@mnaoumov/obsidian-lib 6.0.2 → 6.0.3
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/dist/lib/cjs/generated-during-build.cjs +1 -1
- package/dist/lib/cjs/html-element.cjs +1 -1
- package/dist/lib/cjs/parse-link.cjs +50 -6
- package/dist/lib/cjs/parse-link.d.cts +6 -1
- package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +1 -1
- package/dist/lib/esm/generated-during-build.mjs +1 -1
- package/dist/lib/esm/html-element.mjs +1 -1
- package/dist/lib/esm/parse-link.d.mts +6 -1
- package/dist/lib/esm/parse-link.mjs +50 -6
- package/dist/lib/esm/setting-components/code-highlighter-component.mjs +1 -1
- package/package.json +2 -2
|
@@ -91,7 +91,7 @@ __export(generated_during_build_exports, {
|
|
|
91
91
|
LIBRARY_VERSION: () => LIBRARY_VERSION
|
|
92
92
|
});
|
|
93
93
|
module.exports = __toCommonJS(generated_during_build_exports);
|
|
94
|
-
const LIBRARY_VERSION = "6.0.
|
|
94
|
+
const LIBRARY_VERSION = "6.0.3";
|
|
95
95
|
const LIBRARY_STYLES = ".obsidian-lib.code-highlighter-component textarea, .obsidian-lib.code-highlighter-component pre, .obsidian-lib.code-highlighter-component code {\n font-family: var(--font-monospace);\n line-height: var(--line-height-normal);\n margin: 0;\n}\n.obsidian-lib.code-highlighter-component textarea, .obsidian-lib.code-highlighter-component code {\n font-size: var(--code-size);\n}\n.obsidian-lib.code-highlighter-component textarea {\n background: transparent;\n color: transparent;\n z-index: 2;\n width: 20em;\n height: 10em;\n}\n.obsidian-lib.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-lib.code-highlighter-component pre::after {\n content: \"\";\n display: block;\n height: var(--bottom-gap, 0);\n}\n.obsidian-lib.code-highlighter-component pre.is-placeholder {\n opacity: 0.6;\n}\n.obsidian-lib.code-highlighter-component code {\n display: block;\n padding: 0;\n}\n\n.obsidian-lib-lock-indicator {\n display: inline-flex;\n align-items: center;\n color: var(--text-muted);\n}\n.obsidian-lib-lock-indicator .svg-icon {\n width: var(--icon-s);\n height: var(--icon-s);\n}\n\n@keyframes obsidian-lib-lock-indicator-flash {\n 40% {\n color: var(--text-error);\n transform: scale(1.4);\n }\n}\n.obsidian-lib-lock-indicator-flash {\n animation: obsidian-lib-lock-indicator-flash 0.35s ease-in-out;\n}\n\n.obsidian-lib input[type=url] {\n height: var(--input-height);\n}\n.obsidian-lib input[type=month],\n.obsidian-lib input[type=tel],\n.obsidian-lib input[type=time],\n.obsidian-lib input[type=url],\n.obsidian-lib 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-lib input[type=month]:hover,\n .obsidian-lib input[type=tel]:hover,\n .obsidian-lib input[type=time]:hover,\n .obsidian-lib input[type=url]:hover,\n .obsidian-lib 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-lib input[type=month]:active, .obsidian-lib input[type=month]:focus,\n.obsidian-lib input[type=tel]:active,\n.obsidian-lib input[type=tel]:focus,\n.obsidian-lib input[type=time]:active,\n.obsidian-lib input[type=time]:focus,\n.obsidian-lib input[type=url]:active,\n.obsidian-lib input[type=url]:focus,\n.obsidian-lib input[type=week]:active,\n.obsidian-lib 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-lib input[type=month]:active, .obsidian-lib input[type=month]:focus, .obsidian-lib input[type=month]:focus-visible,\n.obsidian-lib input[type=tel]:active,\n.obsidian-lib input[type=tel]:focus,\n.obsidian-lib input[type=tel]:focus-visible,\n.obsidian-lib input[type=time]:active,\n.obsidian-lib input[type=time]:focus,\n.obsidian-lib input[type=time]:focus-visible,\n.obsidian-lib input[type=url]:active,\n.obsidian-lib input[type=url]:focus,\n.obsidian-lib input[type=url]:focus-visible,\n.obsidian-lib input[type=week]:active,\n.obsidian-lib input[type=week]:focus,\n.obsidian-lib input[type=week]:focus-visible {\n box-shadow: 0 0 0 2px var(--background-modifier-border-focus);\n}\n.obsidian-lib input[type=month]::placeholder,\n.obsidian-lib input[type=tel]::placeholder,\n.obsidian-lib input[type=time]::placeholder,\n.obsidian-lib input[type=url]::placeholder,\n.obsidian-lib 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-lib input[type=month],\n.obsidian-lib input[type=time],\n.obsidian-lib input[type=week] {\n font-variant-numeric: tabular-nums;\n position: relative;\n}\n.obsidian-lib input[type=month]::-webkit-datetime-edit-text,\n.obsidian-lib input[type=time]::-webkit-datetime-edit-text,\n.obsidian-lib input[type=week]::-webkit-datetime-edit-text {\n color: var(--text-faint);\n padding-inline-end: 0;\n}\n.obsidian-lib input[type=month]::-webkit-calendar-picker-indicator,\n.obsidian-lib input[type=time]::-webkit-calendar-picker-indicator,\n.obsidian-lib 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-lib input[type=month]::-webkit-datetime-edit-month-field:active, .obsidian-lib input[type=month]::-webkit-datetime-edit-month-field:focus, .obsidian-lib input[type=month]::-webkit-datetime-edit-day-field:active, .obsidian-lib input[type=month]::-webkit-datetime-edit-day-field:focus, .obsidian-lib input[type=month]::-webkit-datetime-edit-year-field:active, .obsidian-lib input[type=month]::-webkit-datetime-edit-year-field:focus,\n.obsidian-lib input[type=time]::-webkit-datetime-edit-month-field:active,\n.obsidian-lib input[type=time]::-webkit-datetime-edit-month-field:focus,\n.obsidian-lib input[type=time]::-webkit-datetime-edit-day-field:active,\n.obsidian-lib input[type=time]::-webkit-datetime-edit-day-field:focus,\n.obsidian-lib input[type=time]::-webkit-datetime-edit-year-field:active,\n.obsidian-lib input[type=time]::-webkit-datetime-edit-year-field:focus,\n.obsidian-lib input[type=week]::-webkit-datetime-edit-month-field:active,\n.obsidian-lib input[type=week]::-webkit-datetime-edit-month-field:focus,\n.obsidian-lib input[type=week]::-webkit-datetime-edit-day-field:active,\n.obsidian-lib input[type=week]::-webkit-datetime-edit-day-field:focus,\n.obsidian-lib input[type=week]::-webkit-datetime-edit-year-field:active,\n.obsidian-lib 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-lib input[type=month], .is-rtl .obsidian-lib input[type=month], .rtl .obsidian-lib input[type=month],\n.mod-rtl .obsidian-lib input[type=time],\n.is-rtl .obsidian-lib input[type=time],\n.rtl .obsidian-lib input[type=time],\n.mod-rtl .obsidian-lib input[type=week],\n.is-rtl .obsidian-lib input[type=week],\n.rtl .obsidian-lib input[type=week] {\n direction: rtl;\n}\n.mod-rtl .obsidian-lib input[type=month]::-webkit-calendar-picker-indicator, .is-rtl .obsidian-lib input[type=month]::-webkit-calendar-picker-indicator, .rtl .obsidian-lib input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-lib input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-lib input[type=time]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-lib input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-lib input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-lib input[type=week]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-lib 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-lib input[type=month],\nbody:not(.is-ios):not(.is-android) .obsidian-lib input[type=time],\nbody:not(.is-ios):not(.is-android) .obsidian-lib input[type=week] {\n padding-inline-start: var(--size-4-6);\n}\n\n.obsidian-lib input[type=time]::-webkit-calendar-picker-indicator {\n margin-inline-start: 0;\n}\n\nprogress.obsidian-lib.loop {\n min-width: 200px;\n}\n\n@keyframes obsidian-lib-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-lib-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-lib.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-lib.minimizable-modal .minimize-button:hover {\n background: var(--background-modifier-hover);\n color: var(--icon-color-hover);\n}\n.obsidian-lib.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-lib-minimized-modal-bar-pulse 2s ease-in-out infinite;\n}\n.obsidian-lib.minimized-modal-bar:hover {\n background-image: linear-gradient(var(--background-modifier-hover), var(--background-modifier-hover));\n}\n.obsidian-lib.minimized-modal-bar.minimized-modal-bar-attention {\n animation: obsidian-lib-minimized-modal-bar-attention 0.35s ease-out;\n}\n.obsidian-lib.minimized-modal-bar .minimized-modal-bar-title {\n font-weight: var(--font-medium);\n}\n.obsidian-lib.minimized-modal-bar .restore-button,\n.obsidian-lib.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-lib.minimized-modal-bar .restore-button:hover,\n.obsidian-lib.minimized-modal-bar .cancel-button:hover {\n background: var(--background-modifier-hover);\n color: var(--icon-color-hover);\n}\n\n.obsidian-lib.modal-commands {\n display: flex;\n flex-wrap: wrap;\n gap: var(--size-2-2);\n padding: var(--size-4-2) var(--size-4-3);\n border-top: 1px solid var(--background-modifier-border);\n}\n.obsidian-lib.modal-command-control {\n margin-inline-start: var(--size-2-2);\n vertical-align: middle;\n}\n.obsidian-lib.modal-command {\n display: inline-flex;\n align-items: baseline;\n gap: var(--size-2-2);\n min-height: var(--size-4-8);\n padding: var(--size-2-1) var(--size-4-2);\n border: 1px solid var(--background-modifier-border);\n border-radius: var(--radius-s);\n background-color: var(--background-secondary);\n color: var(--text-muted);\n font-size: var(--font-ui-smaller);\n white-space: nowrap;\n cursor: pointer;\n}\n.obsidian-lib.modal-command:hover:not(:disabled) {\n background-color: var(--background-modifier-hover);\n color: var(--text-normal);\n}\n.obsidian-lib.modal-command.is-active {\n border-color: var(--interactive-accent);\n background-color: var(--interactive-accent);\n color: var(--text-on-accent);\n}\n.obsidian-lib.modal-command:disabled {\n opacity: 0.5;\n cursor: default;\n}\n.obsidian-lib.modal-command-hotkey {\n color: var(--text-faint);\n font-size: var(--font-smallest);\n}\n.modal-command.is-active .obsidian-lib.modal-command-hotkey {\n opacity: 0.7;\n color: var(--text-on-accent);\n}\n\n.obsidian-lib.modal-container .ok-button {\n margin-right: 10px;\n margin-top: 20px;\n}\n\n.obsidian-lib.multiple-dropdown-component select,\n.obsidian-lib.multiple-dropdown-component select:focus,\n.obsidian-lib.multiple-dropdown-component .dropdown {\n height: auto;\n padding-top: 3px;\n}\n.obsidian-lib.multiple-dropdown-component select option:checked,\n.obsidian-lib.multiple-dropdown-component select:focus option:checked,\n.obsidian-lib.multiple-dropdown-component .dropdown option:checked {\n background-color: var(--interactive-accent);\n color: var(--text-on-accent);\n}\n\n.obsidian-lib.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-lib.plugin-notice-name code {\n color: inherit;\n}\n.obsidian-lib.plugin-notice-content {\n padding-right: var(--size-4-5);\n position: relative;\n}\n.obsidian-lib.plugin-notice-content .obsidian-lib.cancel-button {\n display: block;\n margin-top: var(--size-4-2);\n width: fit-content;\n}\n.obsidian-lib.plugin-notice-content .obsidian-lib.plugin-notice-close-button {\n position: absolute;\n right: var(--size-4-3);\n top: var(--size-4-3);\n}\n.obsidian-lib.plugin-notice-requires-explicit-close.notice {\n padding: 0;\n}\n.obsidian-lib.plugin-notice-requires-explicit-close.notice .obsidian-lib.plugin-notice-content {\n padding: var(--size-4-3) var(--size-4-4);\n}\n\n.obsidian-lib.plugin-settings-tab a:focus {\n outline: 2px solid var(--link-color);\n}\n\n.obsidian-lib.plugin-suggestion-banner {\n background-color: var(--background-secondary);\n border-left: var(--size-2-1) solid var(--text-accent);\n border-radius: var(--radius-s);\n display: flex;\n flex-direction: column;\n gap: var(--size-4-2);\n margin-bottom: var(--size-4-4);\n padding: var(--size-4-3) var(--size-4-4);\n}\n.obsidian-lib.plugin-suggestion-banner button {\n width: fit-content;\n}\n.obsidian-lib.plugin-suggestion-notice-buttons {\n display: flex;\n flex-wrap: wrap;\n gap: var(--size-4-2);\n margin-top: var(--size-4-2);\n}\n\n.obsidian-lib.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-lib.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-lib.popover .setting-item-info {\n margin-right: 0;\n}\n.obsidian-lib.popover .setting-item-control {\n flex-grow: 1;\n justify-content: flex-end;\n}\n.obsidian-lib.popover input[type=text] {\n width: 100%;\n}\n\n.obsidian-lib.prompt-modal .text-box {\n width: 100%;\n}\n\n.obsidian-lib button:not(.clickable-icon) {\n color: var(--text-color);\n}\n\n.obsidian-lib.tri-state-checkbox-component input[type=checkbox]:indeterminate {\n appearance: checkbox;\n}\n\n.obsidian-lib :invalid:not(.untouched) {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-lib input.metadata-input-text:active:invalid:not(.untouched), .obsidian-lib input.metadata-input-text:focus-visible:invalid:not(.untouched), .obsidian-lib input.metadata-input-text:focus:invalid:not(.untouched),\n.obsidian-lib input[type=date]:active:invalid:not(.untouched),\n.obsidian-lib input[type=date]:focus-visible:invalid:not(.untouched),\n.obsidian-lib input[type=date]:focus:invalid:not(.untouched),\n.obsidian-lib input[type=datetime-local]:active:invalid:not(.untouched),\n.obsidian-lib input[type=datetime-local]:focus-visible:invalid:not(.untouched),\n.obsidian-lib input[type=datetime-local]:focus:invalid:not(.untouched),\n.obsidian-lib input[type=email]:active:invalid:not(.untouched),\n.obsidian-lib input[type=email]:focus-visible:invalid:not(.untouched),\n.obsidian-lib input[type=email]:focus:invalid:not(.untouched),\n.obsidian-lib input[type=number]:active:invalid:not(.untouched),\n.obsidian-lib input[type=number]:focus-visible:invalid:not(.untouched),\n.obsidian-lib input[type=number]:focus:invalid:not(.untouched),\n.obsidian-lib input[type=password]:active:invalid:not(.untouched),\n.obsidian-lib input[type=password]:focus-visible:invalid:not(.untouched),\n.obsidian-lib input[type=password]:focus:invalid:not(.untouched),\n.obsidian-lib input[type=search]:active:invalid:not(.untouched),\n.obsidian-lib input[type=search]:focus-visible:invalid:not(.untouched),\n.obsidian-lib input[type=search]:focus:invalid:not(.untouched),\n.obsidian-lib input[type=text]:active:invalid:not(.untouched),\n.obsidian-lib input[type=text]:focus-visible:invalid:not(.untouched),\n.obsidian-lib input[type=text]:focus:invalid:not(.untouched),\n.obsidian-lib textarea:active:invalid:not(.untouched),\n.obsidian-lib textarea:focus-visible:invalid:not(.untouched),\n.obsidian-lib textarea:focus:invalid:not(.untouched) {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-lib.setting-component-wrapper {\n position: relative;\n display: inline-flex;\n}\n.obsidian-lib.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-lib.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-commands.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/plugin-suggestion.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;;;AC/CK;EACP;;;ACJJ;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;;;ACpGN;EACE;EACA;EACA;EACA;EACA;;AAOF;EACE;EACA;;AAMF;EACE;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAKF;EACE;EACA;EACA;;AAKF;EACE;EACA;;AAIJ;EACE;EACA;;AAGA;EACE;EACA;;;ACpEF;EACE;EACA;;;ACCF;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;;ACZN;EACE;EACA;EACA;EACA;;AAGA;EACE;;AAIJ;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAKF;EACE;EACA;EACA;;AAOJ;EACE;;AAEA;EACE;;;ACrCF;EACE;;;ACFJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKJ;EACE;EACA;EACA;EACA;;;ACjBF;EAIE;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;;AC9BF;EACE;;;ACUN;EACE;;;ACZE;EACE;;;ACKJ;EAPA;;AAuBI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAvBJ;;AA6BA;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-lib%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-lib%60.%5Cn.obsidian-lib-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-lib-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-lib-lock-indicator-flash%20%7B%5Cn%20%20animation:%20obsidian-lib-lock-indicator-flash%200.35s%20ease-in-out;%5Cn%7D%5Cn%22,%22.obsidian-lib%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-lib%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-lib%20%7B%5Cn%20%20//%20Not%20%60&progress%60:%20that%20APPENDS%20the%20element%20name%20to%20the%20parent%20class,%20producing%20one%20long%20class%20that%20matches%5Cn%20%20//%20nothing.%20The%20element%20type%20has%20to%20lead%20the%20compound%20selector%20instead.%5Cn%20%20@at-root%20progress%23%7B&%7D.loop%20%7B%5Cn%20%20%20%20min-width:%20200px;%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22@keyframes%20obsidian-lib-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-lib-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-lib%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-lib-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-lib-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-lib%20%7B%5Cn%20%20//%20The%20strip%20of%20commands%20along%20the%20bottom%20of%20a%20modal.%5Cn%20%20//%5Cn%20%20//%20In%20%60Instructions%60%20render%20mode%20it%20also%20carries%20Obsidian's%20own%20%60.prompt-instructions%60%20%E2%80%94%20whose%20rule%20is%5Cn%20%20//%20unscoped,%20so%20it%20applies%20to%20a%20plain%20%60Modal%60%20too%20%E2%80%94%20and%20this%20one%20only%20re-tunes%20that%20rule's%20%60gap%60%20and%5Cn%20%20//%20%60padding%60%20and%20adds%20the%20separator;%20in%20%60Buttons%60%20mode%20it%20is%20the%20whole%20strip.%5Cn%20%20&.modal-commands%20%7B%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20flex-wrap:%20wrap;%5Cn%20%20%20%20gap:%20var(--size-2-2);%5Cn%20%20%20%20padding:%20var(--size-4-2)%20var(--size-4-3);%5Cn%20%20%20%20border-top:%201px%20solid%20var(--background-modifier-border);%5Cn%20%20%7D%5Cn%5Cn%20%20//%20A%20control%20the%20%60Instructions%60%20renderer%20injects%20into%20an%20instruction's%20purpose%20text%20%E2%80%94%20a%20checkbox,%20a%5Cn%20%20//%20dropdown.%20Obsidian%20styles%20the%20instruction%20bar%20itself,%20but%20its%20own%20bar%20never%20contains%20a%20control,%20so%5Cn%20%20//%20nothing%20upstream%20separates%20one%20from%20the%20label%20it%20belongs%20to.%20Sits%20on%20the%20control%20rather%20than%20on%20the%5Cn%20%20//%20strip,%20so%20it%20reaches%20a%20%60SuggestModal%60's%20native%20bar%20as%20well%20as%20a%20self-created%20one.%5Cn%20%20&.modal-command-control%20%7B%5Cn%20%20%20%20margin-inline-start:%20var(--size-2-2);%5Cn%20%20%20%20vertical-align:%20middle;%5Cn%20%20%7D%5Cn%5Cn%20%20//%20One%20command%20button.%20Replaces%20the%20instruction%20bar%20rather%20than%20supplementing%20it:%20the%20bar%20can%20only%20ever%5Cn%20%20//%20say%20which%20key%20to%20press,%20and%20on%20a%20phone%20there%20is%20no%20modifier%20key%20to%20press,%20so%20every%20control%20it%20names%5Cn%20%20//%20is%20unreachable%20there.%5Cn%20%20&.modal-command%20%7B%5Cn%20%20%20%20display:%20inline-flex;%5Cn%20%20%20%20align-items:%20baseline;%5Cn%20%20%20%20gap:%20var(--size-2-2);%5Cn%5Cn%20%20%20%20//%20Comfortably%20tappable%20on%20a%20phone,%20where%20this%20strip%20is%20the%20only%20way%20in.%5Cn%20%20%20%20min-height:%20var(--size-4-8);%5Cn%20%20%20%20padding:%20var(--size-2-1)%20var(--size-4-2);%5Cn%20%20%20%20border:%201px%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20background-color:%20var(--background-secondary);%5Cn%20%20%20%20color:%20var(--text-muted);%5Cn%20%20%20%20font-size:%20var(--font-ui-smaller);%5Cn%20%20%20%20white-space:%20nowrap;%5Cn%20%20%20%20cursor:%20pointer;%5Cn%5Cn%20%20%20%20&:hover:not(:disabled)%20%7B%5Cn%20%20%20%20%20%20background-color:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20A%20toggle%20that%20is%20ON.%20An%20action%20never%20carries%20it%20%E2%80%94%20it%20does%20something%20and%20is%20done,%20so%20there%20is%20no%5Cn%20%20%20%20//%20state%20for%20it%20to%20show.%5Cn%20%20%20%20&.is-active%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--interactive-accent);%5Cn%20%20%20%20%20%20background-color:%20var(--interactive-accent);%5Cn%20%20%20%20%20%20color:%20var(--text-on-accent);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20Disabled%20rather%20than%20removed:%20a%20strip%20that%20lost%20buttons%20as%20modes%20change%20would%20reflow%20under%20the%5Cn%20%20%20%20//%20pointer,%20which%20on%20a%20phone%20means%20a%20mis-tap.%5Cn%20%20%20%20&:disabled%20%7B%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%20%20cursor:%20default;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.modal-command-hotkey%20%7B%5Cn%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20font-size:%20var(--font-smallest);%5Cn%5Cn%20%20%20%20//%20Faint%20against%20the%20surface%20is%20right;%20faint%20against%20the%20accent%20fill%20is%20invisible.%5Cn%20%20%20%20.modal-command.is-active%20&%20%7B%5Cn%20%20%20%20%20%20opacity:%200.7;%5Cn%20%20%20%20%20%20color:%20var(--text-on-accent);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%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-lib%20%7B%5Cn%20%20//%20Compound,%20not%20nested:%20%60addPluginCssClasses%60%20puts%20%60obsidian-lib%60%20and%20%60multiple-dropdown-component%60%20on%20the%5Cn%20%20//%20SAME%20element%20(the%20setting's%20control%20container),%20so%20a%20descendant%20selector%20matched%20nothing%20and%20every%20multiple%5Cn%20%20//%20dropdown%20rendered%20one%20row%20tall%20%E2%80%94%20Obsidian's%20%60.dropdown%60%20height,%20with%20no%20popup%20behind%20it%20to%20pick%20from.%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:%20var(--interactive-accent);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-on-accent);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%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%5Cn%20%20%20%20//%20The%20name%20is%20inline%20code;%20it%20keeps%20the%20code%20background%20and%20font%20but%20takes%20the%20prefix's%20accent%20color.%5Cn%20%20%20%20code%20%7B%5Cn%20%20%20%20%20%20color:%20inherit;%5Cn%20%20%20%20%7D%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-lib.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-lib.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-lib.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-lib%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.obsidian-lib%20%7B%5Cn%20%20&.plugin-suggestion-banner%20%7B%5Cn%20%20%20%20background-color:%20var(--background-secondary);%5Cn%20%20%20%20border-left:%20var(--size-2-1)%20solid%20var(--text-accent);%5Cn%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20flex-direction:%20column;%5Cn%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20margin-bottom:%20var(--size-4-4);%5Cn%20%20%20%20padding:%20var(--size-4-3)%20var(--size-4-4);%5Cn%5Cn%20%20%20%20button%20%7B%5Cn%20%20%20%20%20%20width:%20fit-content;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20//%20A%20notice%20lays%20its%20buttons%20out%20inline%20with%20no%20spacing,%20so%20the%20action%20button%20would%20touch%20the%20decline%20button.%5Cn%20%20&.plugin-suggestion-notice-buttons%20%7B%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20flex-wrap:%20wrap;%5Cn%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20margin-top:%20var(--size-4-2);%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-lib%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-lib%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%20inside%20the%5Cn//%20Library's%20own%20UI%20(specificity%200,2,1),%20which%20wins%20over%20tldraw's%20(0,1,1)%20while%20staying%20correct%5Cn//%20For%20every%20button%20variant%20(it%20reuses%20the%20same%20contextual%20%60--text-color%60).%5Cn//%20It%20MUST%20stay%20scoped%20to%20%60.obsidian-lib%60:%20an%20unscoped%20re-assert%20(it%20was%20%60body%20button%E2%80%A6%60,%5Cn//%200,1,2)%20lands%20on%20every%20button%20in%20the%20app%20and%20beats%20any%20other%20plugin's%20own%20button%20color%5Cn//%20Written%20at%200,1,1,%20which%20Obsidian's%20own%20rule%20used%20to%20lose%20to%20(obsidian-custom-attachment-location%2395).%5Cn//%20Defensive%20workaround%20%E2%80%94%20remove%20once%20the%20upstream%20fix%20ships%20(tldraw/obsidian-plugin%23210).%5Cn.obsidian-lib%20button:not(.clickable-icon)%20%7B%5Cn%20%20color:%20var(--text-color);%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.tri-state-checkbox-component%20%7B%5Cn%20%20%20%20input%5Btype='checkbox'%5D:indeterminate%20%7B%5Cn%20%20%20%20%20%20appearance:%20checkbox;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22@mixin%20invalid%20%7B%5Cn%20%20box-shadow:%200%200%200%202px%20var(--text-error);%5Cn%7D%5Cn%5Cn//%20An%20input%20the%20user%20has%20not%20interacted%20with%20yet%20carries%20%60.untouched%60%20(set%20by%20%60PromptModal%60),%20so%20a%20modal%20that%5Cn//%20opens%20invalid%20by%20design%20does%20not%20greet%20the%20user%20in%20red.%20Both%20blocks%20below%20must%20be%20gated:%20the%20input%20is%5Cn//%20focused%20on%20open,%20so%20the%20focus%20block%20alone%20would%20keep%20painting%20it.%5Cn.obsidian-lib%20%7B%5Cn%20%20:invalid:not(.untouched)%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:not(.untouched)%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";
|
|
96
96
|
// Annotate the CommonJS export names for ESM import in node:
|
|
97
97
|
0 && (module.exports = {
|
|
@@ -140,4 +140,4 @@ function createFragmentWithCodeBlocks(message) {
|
|
|
140
140
|
asCodeBlock,
|
|
141
141
|
createFragmentWithCodeBlocks
|
|
142
142
|
});
|
|
143
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9odG1sLWVsZW1lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIE9ic2lkaWFuLXNwZWNpZmljIEhUTUwgZWxlbWVudCBoZWxwZXJzLlxuICpcbiAqIFVubGlrZSB0aGUgT2JzaWRpYW4tcnVudGltZS1hZ25vc3RpYyBoZWxwZXJzIGluIGBzcmMvaHRtbC1lbGVtZW50LnRzYCwgdGhlc2UgZGVwZW5kIG9uXG4gKiBPYnNpZGlhbi1zcGVjaWZpYyBwcmVzZW50YXRpb24g4oCUIHRoZSBgbWFya2Rvd24tcmVuZGVyZWRgIENTUyBjbGFzcyB0aGF0IHN0eWxlcyByZW5kZXJlZCBtYXJrZG93biwgYW5kXG4gKiB0aGUgYEVkaXRvciA+IFNwZWxsY2hlY2tgIHZhdWx0IHNldHRpbmcg4oCUIHNvIHRoZXkgbGl2ZSBpbiB0aGUgT2JzaWRpYW4gbGF5ZXIgYW5kIHVzZSBPYnNpZGlhbidzXG4gKiBgY3JlYXRlRWxgIERPTSBhdWdtZW50YXRpb24uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IENzc0NsYXNzIH0gZnJvbSAnLi9jc3MtY2xhc3MudHMnO1xuaW1wb3J0IHtcbiAgaXNTcGVsbGNoZWNrRW5hYmxlZEZvck1vZGUsXG4gIFNwZWxsY2hlY2tNb2RlXG59IGZyb20gJy4vb2JzaWRpYW4tc2V0dGluZ3MudHMnO1xuXG4vLyBUaGUgZmlyc3QgY29kZSBwb2ludCBvZiB0aGUgQmFzaWMgTXVsdGlsaW5ndWFsIFBsYW5lJ3MgUHJpdmF0ZSBVc2UgQXJlYS4gV3JpdHRlbiBhcyBhIGNvZGUgcG9pbnQgYW5kXG4vLyBjb21wb3NlZCBhdCBydW50aW1lIHJhdGhlciB0aGFuIGFzIGEgc3RyaW5nIGVzY2FwZSwgc28gdGhlIGNvbnN0YW50IGJlbG93IHN0YXlzIGxlZ2libGUgaW4gdGhlIHNvdXJjZVxuLy8gaW5zdGVhZCBvZiBiZWluZyBhbiBpbnZpc2libGUgY2hhcmFjdGVyIG5vIHJlYWRlciBjYW4gaWRlbnRpZnkuXG5jb25zdCBQUklWQVRFX1VTRV9BUkVBX0ZJUlNUX0NPREVfUE9JTlQgPSAweEUwXzAwO1xuXG4vLyBXcmFwcyBhIHZhbHVlIHRoYXQgc2hvdWxkIHJlbmRlciBhcyBhIGNvZGUgYmxvY2suIEEgcHJpdmF0ZS11c2UgY29kZSBwb2ludCwgc28gaXQgY2Fubm90IGNvbGxpZGUgd2l0aFxuLy8gYW55dGhpbmcgYSB0cmFuc2xhdG9yIHdvdWxkIGxlZ2l0aW1hdGVseSB3cml0ZSwgYW5kIHNvIGEgbWVzc2FnZSB0aGF0IHNvbWVob3cgcmVhY2hlcyB0aGUgdXNlciB3aXRoXG4vLyBpdHMgZGVsaW1pdGVycyBpbnRhY3QgaXMgdmlzaWJseSB3cm9uZyByYXRoZXIgdGhhbiBwbGF1c2libHkgaW50ZW50aW9uYWwuXG5jb25zdCBDT0RFX0JMT0NLX0RFTElNSVRFUiA9IFN0cmluZy5mcm9tQ29kZVBvaW50KFBSSVZBVEVfVVNFX0FSRUFfRklSU1RfQ09ERV9QT0lOVCk7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGFwcGx5U3BlbGxjaGVja01vZGV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGx5U3BlbGxjaGVja01vZGVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB0byBzZXQgdGhlIGBzcGVsbGNoZWNrYCBhdHRyaWJ1dGUgb24uXG4gICAqL1xuICByZWFkb25seSBlbGVtZW50OiBIVE1MRWxlbWVudDtcblxuICAvKipcbiAgICogVGhlIG1vZGUgZGVjaWRpbmcgd2hldGhlciB0aGUgZWxlbWVudCBpcyBzcGVsbC1jaGVja2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgU3BlbGxjaGVja01vZGUuT2ZmYFxuICAgKi9cbiAgcmVhZG9ubHkgc3BlbGxjaGVja01vZGU/OiBTcGVsbGNoZWNrTW9kZTtcbn1cblxuLyoqXG4gKiBBcHBlbmRzIGEgY29kZSBibG9jayB0byB0aGUgZ2l2ZW4gRG9jdW1lbnRGcmFnbWVudCBvciBIVE1MRWxlbWVudCwgc3R5bGVkIHRvIG1hdGNoIE9ic2lkaWFuJ3NcbiAqIHJlbmRlcmVkLW1hcmtkb3duIGlubGluZSBjb2RlLlxuICpcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIERvY3VtZW50RnJhZ21lbnQgb3IgSFRNTEVsZW1lbnQgdG8gYXBwZW5kIHRoZSBjb2RlIGJsb2NrIHRvLlxuICogQHBhcmFtIGNvZGUgLSBUaGUgY29kZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGNvZGUgYmxvY2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRDb2RlQmxvY2soZWxlbWVudDogRG9jdW1lbnRGcmFnbWVudCB8IEhUTUxFbGVtZW50LCBjb2RlOiBzdHJpbmcpOiB2b2lkIHtcbiAgZWxlbWVudC5jcmVhdGVFbCgnc3Ryb25nJywgeyBjbHM6IGAke0Nzc0NsYXNzLk1hcmtkb3duUmVuZGVyZWR9ICR7Q3NzQ2xhc3MuQ29kZX1gIH0sIChzdHJvbmcpID0+IHtcbiAgICBzdHJvbmcuY3JlYXRlRWwoJ2NvZGUnLCB7IHRleHQ6IGNvZGUgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEFwcGVuZHMgYSBzdHJpbmcgYXMgdGV4dCwgb3IgYSBmcmVzaCBkZWVwIGNsb25lIG9mIGEge0BsaW5rIERvY3VtZW50RnJhZ21lbnR9LCB0byB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAqXG4gKiBBcHBlbmRpbmcgYSBmcmFnbWVudCBtb3ZlcyBpdHMgY2hpbGRyZW4gb3V0IG9mIGl0LCBzbyBhIGZyYWdtZW50IHJlbmRlcmVkIG1vcmUgdGhhbiBvbmNlIOKAlCBhIG5vdGljZSBhbmRcbiAqIGEgc2V0dGluZ3MgYmFubmVyLCBvciBhIGJhbm5lciByZW5kZXJlZCBhZ2FpbiBvbiBldmVyeSByZWZyZXNoIOKAlCB3b3VsZCBiZSBlbXB0eSBmcm9tIHRoZSBzZWNvbmQgcmVuZGVyXG4gKiBvbi4gQ2xvbmluZyBsZWF2ZXMgdGhlIGNhbGxlcidzIGZyYWdtZW50IGludGFjdCBmb3IgdGhlIG5leHQgcmVuZGVyLlxuICpcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIERvY3VtZW50RnJhZ21lbnQgb3IgSFRNTEVsZW1lbnQgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIGNvbnRlbnQgLSBUaGUgdGV4dCwgb3IgdGhlIGZyYWdtZW50IHRvIGFwcGVuZCBhIGNsb25lIG9mLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kVGV4dE9yRnJhZ21lbnRDbG9uZShlbGVtZW50OiBEb2N1bWVudEZyYWdtZW50IHwgSFRNTEVsZW1lbnQsIGNvbnRlbnQ6IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmcpOiB2b2lkIHtcbiAgZWxlbWVudC5hcHBlbmQodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnID8gY29udGVudCA6IGNvbnRlbnQuY2xvbmVOb2RlKHRydWUpKTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBgc3BlbGxjaGVja2AgYXR0cmlidXRlIG9uIGFuIGVsZW1lbnQgZnJvbSBhIHtAbGluayBTcGVsbGNoZWNrTW9kZX0uXG4gKlxuICogVGhlIGF0dHJpYnV0ZSBoYXMgdG8gYmUgc2V0IGV4cGxpY2l0bHksIGJlY2F1c2UgYm90aCBvZiB0aGUgc3VyZmFjZXMgdGhhdCBuZWVkIHRoaXMgYXJlIGJvcm4gd2l0aFxuICogYHNwZWxsY2hlY2s9XCJmYWxzZVwiYDogYEFic3RyYWN0VGV4dENvbXBvbmVudGAgZm9yY2VzIGl0IG9udG8gZXZlcnkgdGV4dCBjb21wb25lbnQsIGFuZCBPYnNpZGlhbiBidWlsZHNcbiAqIGV2ZXJ5IGBTdWdnZXN0TW9kYWxgIGlucHV0IHdpdGggaXQgd2l0aG91dCBjb25zdWx0aW5nIGBFZGl0b3IgPiBTcGVsbGNoZWNrYCBhdCBhbGwuXG4gKlxuICogV2hpY2ggb2YgdGhvc2UgYSBnaXZlbiBib3ggd2FudHMgaXMgYSBjYWxsLXNpdGUgZGVjaXNpb24sIGFuZCB0aGUgZGlzdGluY3Rpb24gdGhhdCBob2xkcyB1cCBpcyB3aGF0IHRoZVxuICogYm94IGlzIEZPUjogb25lIHRoYXQgb25seSBGSU5EUyBzb21ldGhpbmcgaXMgYSBzZWFyY2ggZmllbGQgYW5kIHN0YXlzIHVuY2hlY2tlZCwgYmVjYXVzZSBzcXVpZ2dsZXMgdW5kZXJcbiAqIGhhbGYtdHlwZWQgZnJhZ21lbnRzIGFyZSBub2lzZTsgb25lIHRoYXQgTkFNRVMgc29tZXRoaW5nIGlzIGEgcHJvc2UgZmllbGQgYW5kIGZvbGxvd3MgdGhlIHNldHRpbmcsIHRoZVxuICogd2F5IE9ic2lkaWFuJ3Mgb3duIGlubGluZSB0aXRsZSBhbmQgZmlsZS1leHBsb3JlciByZW5hbWUgZG8uXG4gKlxuICogQ2FsbCBpdCBhZ2FpbiB3aGVuZXZlciB0aGF0IGFuc3dlciBjaGFuZ2VzIOKAlCBhIHBpY2tlciB0aGF0IHN3aXRjaGVzIGJldHdlZW4gZmluZGluZyBhbmQgY3JlYXRpbmcgZmxpcHNcbiAqIG1vZGVzIG1pZC1vcGVuLCBhbmQgdGhlIGF0dHJpYnV0ZSBoYXMgdG8gZm9sbG93LlxuICpcbiAqIFRoZSBuYW1lIGJlaW5nIHR5cGVkIG1heSBiZSBhIFBBVEggcmF0aGVyIHRoYW4gYSBiYXJlIGJhc2VuYW1lLCBzbyBmb2xkZXIgc2VnbWVudHMgZ2V0IGNoZWNrZWQgdG9vLlxuICogVGhhdCBpcyB3aGF0IE9ic2lkaWFuJ3Mgb3duIGlubGluZSByZW5hbWUgZG9lcywgYW5kIHRoZSBhbHRlcm5hdGl2ZSDigJQgY2hlY2tpbmcgb25seSB0aGUgbGFzdCBzZWdtZW50IOKAlFxuICogY2Fubm90IGJlIGV4cHJlc3NlZCBhcyBhbiBhdHRyaWJ1dGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBhcHBseWluZyB0aGUgc3BlbGxjaGVjayBtb2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlTcGVsbGNoZWNrTW9kZShwYXJhbXM6IEFwcGx5U3BlbGxjaGVja01vZGVQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBlbGVtZW50LFxuICAgIHNwZWxsY2hlY2tNb2RlID0gU3BlbGxjaGVja01vZGUuT2ZmXG4gIH0gPSBwYXJhbXM7XG4gIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdzcGVsbGNoZWNrJywgU3RyaW5nKGlzU3BlbGxjaGVja0VuYWJsZWRGb3JNb2RlKGFwcCwgc3BlbGxjaGVja01vZGUpKSk7XG59XG5cbi8qKlxuICogTWFya3MgYSB2YWx1ZSBzbyB0aGF0IHtAbGluayBjcmVhdGVGcmFnbWVudFdpdGhDb2RlQmxvY2tzfSByZW5kZXJzIGl0IGFzIGFuIGlubGluZSBjb2RlIGJsb2NrLlxuICpcbiAqIFdyYXAgYSB2YWx1ZSB3aXRoIHRoaXMgYmVmb3JlIGhhbmRpbmcgaXQgdG8gYHQoKWAsIGFuZCB0aGUgdHJhbnNsYXRlZCBtZXNzYWdlIGNvbWVzIGJhY2sgd2l0aCB0aGUgdmFsdWVcbiAqIGFscmVhZHkgaW4gcGxhY2UsIGRlbGltaXRlZDpcbiAqXG4gKiBgYGB0c1xuICogY3JlYXRlRnJhZ21lbnRXaXRoQ29kZUJsb2Nrcyh0KCgkKSA9PiAkLm9ic2lkaWFuTGliLnBsdWdpblN1Z2dlc3Rpb24uaW5zdGFsbGVkLCB7XG4gKiAgIHBsdWdpbk5hbWU6IGFzQ29kZUJsb2NrKHBsdWdpbk5hbWUpXG4gKiB9KSk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgbWFya2VyIHRyYXZlbHMgV0lUSCB0aGUgdmFsdWUgcmF0aGVyIHRoYW4gYmVpbmcgYSBwb3NpdGlvbmFsIHBsYWNlaG9sZGVyIHRoZSBjYWxsZXIgbWF0Y2hlcyB1cFxuICogYWZ0ZXJ3YXJkcy4gVGhhdCBkaXN0aW5jdGlvbiBpcyB0aGUgd2hvbGUgcG9pbnQ6IGEgbWVzc2FnZSBuYW1pbmcgdHdvIHBsdWdpbnMgaXMgaW50ZXJwb2xhdGVkIGJ5IG5hbWUsXG4gKiBhbmQgYSB0cmFuc2xhdGlvbiBpcyBmcmVlIHRvIHB1dCB0aGVtIGluIGVpdGhlciBvcmRlciwgc28gYW55dGhpbmcgdGhhdCByZS1hc3NvY2lhdGVkIHZhbHVlcyB3aXRoXG4gKiBwbGFjZWhvbGRlcnMgYnkgcG9zaXRpb24gd291bGQgc2lsZW50bHkgc3dhcCB0aGVtIHRoZSBtb21lbnQgYSBzZW50ZW5jZSByZWFkIHRoZSBvdGhlciB3YXkgcm91bmQuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHJlbmRlciBhcyBhIGNvZGUgYmxvY2suXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUsIGRlbGltaXRlZCBmb3Ige0BsaW5rIGNyZWF0ZUZyYWdtZW50V2l0aENvZGVCbG9ja3N9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNDb2RlQmxvY2sodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtDT0RFX0JMT0NLX0RFTElNSVRFUn0ke3ZhbHVlfSR7Q09ERV9CTE9DS19ERUxJTUlURVJ9YDtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSB7QGxpbmsgRG9jdW1lbnRGcmFnbWVudH0gZnJvbSBhbiBhbHJlYWR5LXRyYW5zbGF0ZWQgbWVzc2FnZSwgcmVuZGVyaW5nIGV2ZXJ5IHZhbHVlIHRoYXQgd2FzXG4gKiB3cmFwcGVkIGluIHtAbGluayBhc0NvZGVCbG9ja30gYXMgYW4gaW5saW5lIGNvZGUgYmxvY2sgYW5kIHRoZSByZXN0IGFzIHBsYWluIHRleHQuXG4gKlxuICogVGhlIG1lc3NhZ2Ugc3RheXMgT05FIHRyYW5zbGF0YWJsZSB1bml0LiBTcGxpdHRpbmcgYSBzZW50ZW5jZSBpbnRvIGEgcHJlZml4IGFuZCBhIHN1ZmZpeCBhcm91bmQgdGhlIHZhbHVlXG4gKiBpcyB0aGUgb2J2aW91cyBhbHRlcm5hdGl2ZSBhbmQgaXQgZG9lcyBub3Qgc3Vydml2ZSB0cmFuc2xhdGlvbjogYSBsYW5ndWFnZSB0aGF0IHJlb3JkZXJzIHRoZSBjbGF1c2UsIG9yXG4gKiB0aGF0IG5lZWRzIGRpZmZlcmVudCBjYXNlIG9uIHRoZSBzdXJyb3VuZGluZyB3b3JkcywgY2Fubm90IGV4cHJlc3MgdGhhdCB0aHJvdWdoIHR3byBmaXhlZCBoYWx2ZXMuIEhlcmVcbiAqIHRoZSB2YWx1ZSBzaXRzIHdoZXJldmVyIHRoZSB0cmFuc2xhdGlvbiBwdXRzIGl0LCBhbmQgb25seSBpdHMgcmVuZGVyaW5nIGlzIGRlY2lkZWQuXG4gKlxuICogQSBtZXNzYWdlIHdpdGggbm90aGluZyBtYXJrZWQgY29tZXMgYmFjayBhcyBwbGFpbiB0ZXh0LCBzbyB0aGlzIGlzIHNhZmUgdG8gYXBwbHkgdG8gYW55IG1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgdHJhbnNsYXRlZCBtZXNzYWdlLCB3aXRoIGl0cyBjb2RlIHZhbHVlcyB3cmFwcGVkIGJ5IHtAbGluayBhc0NvZGVCbG9ja30uXG4gKiBAcmV0dXJucyBUaGUgZnJhZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGcmFnbWVudFdpdGhDb2RlQmxvY2tzKG1lc3NhZ2U6IHN0cmluZyk6IERvY3VtZW50RnJhZ21lbnQge1xuICBjb25zdCBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50KCk7XG5cbiAgLy8gRGVsaW1pdGVycyBjb21lIGluIHBhaXJzLCBzbyB0aGUgc2VnbWVudHMgYmV0d2VlbiB0aGVtIGFsdGVybmF0ZTogcGxhaW4gdGV4dCwgY29kZSB2YWx1ZSwgcGxhaW4gdGV4dC5cbiAgbGV0IGlzQ29kZVNlZ21lbnQgPSBmYWxzZTtcbiAgZm9yIChjb25zdCBzZWdtZW50IG9mIG1lc3NhZ2Uuc3BsaXQoQ09ERV9CTE9DS19ERUxJTUlURVIpKSB7XG4gICAgaWYgKHNlZ21lbnQgIT09ICcnKSB7XG4gICAgICBpZiAoaXNDb2RlU2VnbWVudCkge1xuICAgICAgICBhcHBlbmRDb2RlQmxvY2soZnJhZ21lbnQsIHNlZ21lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZnJhZ21lbnQuYXBwZW5kVGV4dChzZWdtZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpc0NvZGVTZWdtZW50ID0gIWlzQ29kZVNlZ21lbnQ7XG4gIH1cblxuICByZXR1cm4gZnJhZ21lbnQ7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWFBLHVCQUF5QjtBQUN6QiwrQkFHTztBQUtQLE1BQU0sb0NBQW9DO0FBSzFDLE1BQU0sdUJBQXVCLE9BQU8sY0FBYyxpQ0FBaUM7QUErQjVFLFNBQVMsZ0JBQWdCLFNBQXlDLE1BQW9CO0FBQzNGLFVBQVEsU0FBUyxVQUFVLEVBQUUsS0FBSyxHQUFHLDBCQUFTLGdCQUFnQixJQUFJLDBCQUFTLElBQUksR0FBRyxHQUFHLENBQUMsV0FBVztBQUMvRixXQUFPLFNBQVMsUUFBUSxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQUEsRUFDeEMsQ0FBQztBQUNIO0FBWU8sU0FBUywwQkFBMEIsU0FBeUMsU0FBMEM7QUFDM0gsVUFBUSxPQUFPLE9BQU8sWUFBWSxXQUFXLFVBQVUsUUFBUSxVQUFVLElBQUksQ0FBQztBQUNoRjtBQXVCTyxTQUFTLG9CQUFvQixRQUF5QztBQUMzRSxRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0E7QUFBQSxJQUNBLGlCQUFpQix3Q0FBZTtBQUFBLEVBQ2xDLElBQUk7QUFDSixVQUFRLGFBQWEsY0FBYyxXQUFPLHFEQUEyQixLQUFLLGNBQWMsQ0FBQyxDQUFDO0FBQzVGO0FBc0JPLFNBQVMsWUFBWSxPQUF1QjtBQUNqRCxTQUFPLEdBQUcsb0JBQW9CLEdBQUcsS0FBSyxHQUFHLG9CQUFvQjtBQUMvRDtBQWdCTyxTQUFTLDZCQUE2QixTQUFtQztBQUM5RSxRQUFNLFdBQVcsZUFBZTtBQUdoQyxNQUFJLGdCQUFnQjtBQUNwQixhQUFXLFdBQVcsUUFBUSxNQUFNLG9CQUFvQixHQUFHO0FBQ3pELFFBQUksWUFBWSxJQUFJO0FBQ2xCLFVBQUksZUFBZTtBQUNqQix3QkFBZ0IsVUFBVSxPQUFPO0FBQUEsTUFDbkMsT0FBTztBQUNMLGlCQUFTLFdBQVcsT0FBTztBQUFBLE1BQzdCO0FBQUEsSUFDRjtBQUVBLG9CQUFnQixDQUFDO0FBQUEsRUFDbkI7QUFFQSxTQUFPO0FBQ1Q7IiwibmFtZXMiOltdfQ==
|
|
143
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9odG1sLWVsZW1lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIE9ic2lkaWFuLXNwZWNpZmljIEhUTUwgZWxlbWVudCBoZWxwZXJzLlxuICpcbiAqIFVubGlrZSB0aGUgT2JzaWRpYW4tcnVudGltZS1hZ25vc3RpYyBoZWxwZXJzIGluIGBzcmMvaHRtbC1lbGVtZW50LnRzYCwgdGhlc2UgZGVwZW5kIG9uXG4gKiBPYnNpZGlhbi1zcGVjaWZpYyBwcmVzZW50YXRpb24g4oCUIHRoZSBgbWFya2Rvd24tcmVuZGVyZWRgIENTUyBjbGFzcyB0aGF0IHN0eWxlcyByZW5kZXJlZCBtYXJrZG93biwgYW5kXG4gKiB0aGUgYEVkaXRvciA+IFNwZWxsY2hlY2tgIHZhdWx0IHNldHRpbmcg4oCUIHNvIHRoZXkgbGl2ZSBpbiB0aGUgT2JzaWRpYW4gbGF5ZXIgYW5kIHVzZSBPYnNpZGlhbidzXG4gKiBgY3JlYXRlRWxgIERPTSBhdWdtZW50YXRpb24uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IENzc0NsYXNzIH0gZnJvbSAnLi9jc3MtY2xhc3MudHMnO1xuaW1wb3J0IHtcbiAgaXNTcGVsbGNoZWNrRW5hYmxlZEZvck1vZGUsXG4gIFNwZWxsY2hlY2tNb2RlXG59IGZyb20gJy4vb2JzaWRpYW4tc2V0dGluZ3MudHMnO1xuXG4vLyBUaGUgZmlyc3QgY29kZSBwb2ludCBvZiB0aGUgQmFzaWMgTXVsdGlsaW5ndWFsIFBsYW5lJ3MgUHJpdmF0ZSBVc2UgQXJlYS4gV3JpdHRlbiBhcyBhIGNvZGUgcG9pbnQgYW5kXG4vLyBjb21wb3NlZCBhdCBydW50aW1lIHJhdGhlciB0aGFuIGFzIGEgc3RyaW5nIGVzY2FwZSwgc28gdGhlIGNvbnN0YW50IGJlbG93IHN0YXlzIGxlZ2libGUgaW4gdGhlIHNvdXJjZVxuLy8gaW5zdGVhZCBvZiBiZWluZyBhbiBpbnZpc2libGUgY2hhcmFjdGVyIG5vIHJlYWRlciBjYW4gaWRlbnRpZnkuXG5jb25zdCBQUklWQVRFX1VTRV9BUkVBX0ZJUlNUX0NPREVfUE9JTlQgPSAweEUwXzAwO1xuXG4vLyBXcmFwcyBhIHZhbHVlIHRoYXQgc2hvdWxkIHJlbmRlciBhcyBhIGNvZGUgYmxvY2suIEEgcHJpdmF0ZS11c2UgY29kZSBwb2ludCwgc28gaXQgY2Fubm90IGNvbGxpZGUgd2l0aFxuLy8gYW55dGhpbmcgYSB0cmFuc2xhdG9yIHdvdWxkIGxlZ2l0aW1hdGVseSB3cml0ZSwgYW5kIHNvIGEgbWVzc2FnZSB0aGF0IHNvbWVob3cgcmVhY2hlcyB0aGUgdXNlciB3aXRoXG4vLyBpdHMgZGVsaW1pdGVycyBpbnRhY3QgaXMgdmlzaWJseSB3cm9uZyByYXRoZXIgdGhhbiBwbGF1c2libHkgaW50ZW50aW9uYWwuXG5jb25zdCBDT0RFX0JMT0NLX0RFTElNSVRFUiA9IFN0cmluZy5mcm9tQ29kZVBvaW50KFBSSVZBVEVfVVNFX0FSRUFfRklSU1RfQ09ERV9QT0lOVCk7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGFwcGx5U3BlbGxjaGVja01vZGV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGx5U3BlbGxjaGVja01vZGVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB0byBzZXQgdGhlIGBzcGVsbGNoZWNrYCBhdHRyaWJ1dGUgb24uXG4gICAqL1xuICByZWFkb25seSBlbGVtZW50OiBIVE1MRWxlbWVudDtcblxuICAvKipcbiAgICogVGhlIG1vZGUgZGVjaWRpbmcgd2hldGhlciB0aGUgZWxlbWVudCBpcyBzcGVsbC1jaGVja2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgU3BlbGxjaGVja01vZGUuT2ZmYFxuICAgKi9cbiAgcmVhZG9ubHkgc3BlbGxjaGVja01vZGU/OiBTcGVsbGNoZWNrTW9kZTtcbn1cblxuLyoqXG4gKiBBcHBlbmRzIGEgY29kZSBibG9jayB0byB0aGUgZ2l2ZW4gRG9jdW1lbnRGcmFnbWVudCBvciBIVE1MRWxlbWVudCwgc3R5bGVkIHRvIG1hdGNoIE9ic2lkaWFuJ3NcbiAqIHJlbmRlcmVkLW1hcmtkb3duIGlubGluZSBjb2RlLlxuICpcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIERvY3VtZW50RnJhZ21lbnQgb3IgSFRNTEVsZW1lbnQgdG8gYXBwZW5kIHRoZSBjb2RlIGJsb2NrIHRvLlxuICogQHBhcmFtIGNvZGUgLSBUaGUgY29kZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGNvZGUgYmxvY2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRDb2RlQmxvY2soZWxlbWVudDogRG9jdW1lbnRGcmFnbWVudCB8IEhUTUxFbGVtZW50LCBjb2RlOiBzdHJpbmcpOiB2b2lkIHtcbiAgZWxlbWVudC5jcmVhdGVFbCgnc3Ryb25nJywgeyBjbHM6IGAke0Nzc0NsYXNzLk1hcmtkb3duUmVuZGVyZWR9ICR7Q3NzQ2xhc3MuQ29kZX1gIH0sIChzdHJvbmcpID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW4tZGV2LXRvb2xraXQvbm8tYmFyZS1jb2RlLWVsZW1lbnQgLS0gVGhpcyBpcyB0aGUgaGVscGVyIHRoZSBydWxlIHBvaW50cyB0bzogdGhlIHdyYXBwaW5nIGBzdHJvbmdgIGNhcnJpZXMgdGhlIGNsYXNzZXMgdGhhdCBnaXZlIHRoaXMgYGNvZGVgIGl0cyBjaGlwLlxuICAgIHN0cm9uZy5jcmVhdGVFbCgnY29kZScsIHsgdGV4dDogY29kZSB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogQXBwZW5kcyBhIHN0cmluZyBhcyB0ZXh0LCBvciBhIGZyZXNoIGRlZXAgY2xvbmUgb2YgYSB7QGxpbmsgRG9jdW1lbnRGcmFnbWVudH0sIHRvIHRoZSBnaXZlbiBlbGVtZW50LlxuICpcbiAqIEFwcGVuZGluZyBhIGZyYWdtZW50IG1vdmVzIGl0cyBjaGlsZHJlbiBvdXQgb2YgaXQsIHNvIGEgZnJhZ21lbnQgcmVuZGVyZWQgbW9yZSB0aGFuIG9uY2Ug4oCUIGEgbm90aWNlIGFuZFxuICogYSBzZXR0aW5ncyBiYW5uZXIsIG9yIGEgYmFubmVyIHJlbmRlcmVkIGFnYWluIG9uIGV2ZXJ5IHJlZnJlc2gg4oCUIHdvdWxkIGJlIGVtcHR5IGZyb20gdGhlIHNlY29uZCByZW5kZXJcbiAqIG9uLiBDbG9uaW5nIGxlYXZlcyB0aGUgY2FsbGVyJ3MgZnJhZ21lbnQgaW50YWN0IGZvciB0aGUgbmV4dCByZW5kZXIuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgRG9jdW1lbnRGcmFnbWVudCBvciBIVE1MRWxlbWVudCB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0gY29udGVudCAtIFRoZSB0ZXh0LCBvciB0aGUgZnJhZ21lbnQgdG8gYXBwZW5kIGEgY2xvbmUgb2YuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRUZXh0T3JGcmFnbWVudENsb25lKGVsZW1lbnQ6IERvY3VtZW50RnJhZ21lbnQgfCBIVE1MRWxlbWVudCwgY29udGVudDogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZyk6IHZvaWQge1xuICBlbGVtZW50LmFwcGVuZCh0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycgPyBjb250ZW50IDogY29udGVudC5jbG9uZU5vZGUodHJ1ZSkpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIGBzcGVsbGNoZWNrYCBhdHRyaWJ1dGUgb24gYW4gZWxlbWVudCBmcm9tIGEge0BsaW5rIFNwZWxsY2hlY2tNb2RlfS5cbiAqXG4gKiBUaGUgYXR0cmlidXRlIGhhcyB0byBiZSBzZXQgZXhwbGljaXRseSwgYmVjYXVzZSBib3RoIG9mIHRoZSBzdXJmYWNlcyB0aGF0IG5lZWQgdGhpcyBhcmUgYm9ybiB3aXRoXG4gKiBgc3BlbGxjaGVjaz1cImZhbHNlXCJgOiBgQWJzdHJhY3RUZXh0Q29tcG9uZW50YCBmb3JjZXMgaXQgb250byBldmVyeSB0ZXh0IGNvbXBvbmVudCwgYW5kIE9ic2lkaWFuIGJ1aWxkc1xuICogZXZlcnkgYFN1Z2dlc3RNb2RhbGAgaW5wdXQgd2l0aCBpdCB3aXRob3V0IGNvbnN1bHRpbmcgYEVkaXRvciA+IFNwZWxsY2hlY2tgIGF0IGFsbC5cbiAqXG4gKiBXaGljaCBvZiB0aG9zZSBhIGdpdmVuIGJveCB3YW50cyBpcyBhIGNhbGwtc2l0ZSBkZWNpc2lvbiwgYW5kIHRoZSBkaXN0aW5jdGlvbiB0aGF0IGhvbGRzIHVwIGlzIHdoYXQgdGhlXG4gKiBib3ggaXMgRk9SOiBvbmUgdGhhdCBvbmx5IEZJTkRTIHNvbWV0aGluZyBpcyBhIHNlYXJjaCBmaWVsZCBhbmQgc3RheXMgdW5jaGVja2VkLCBiZWNhdXNlIHNxdWlnZ2xlcyB1bmRlclxuICogaGFsZi10eXBlZCBmcmFnbWVudHMgYXJlIG5vaXNlOyBvbmUgdGhhdCBOQU1FUyBzb21ldGhpbmcgaXMgYSBwcm9zZSBmaWVsZCBhbmQgZm9sbG93cyB0aGUgc2V0dGluZywgdGhlXG4gKiB3YXkgT2JzaWRpYW4ncyBvd24gaW5saW5lIHRpdGxlIGFuZCBmaWxlLWV4cGxvcmVyIHJlbmFtZSBkby5cbiAqXG4gKiBDYWxsIGl0IGFnYWluIHdoZW5ldmVyIHRoYXQgYW5zd2VyIGNoYW5nZXMg4oCUIGEgcGlja2VyIHRoYXQgc3dpdGNoZXMgYmV0d2VlbiBmaW5kaW5nIGFuZCBjcmVhdGluZyBmbGlwc1xuICogbW9kZXMgbWlkLW9wZW4sIGFuZCB0aGUgYXR0cmlidXRlIGhhcyB0byBmb2xsb3cuXG4gKlxuICogVGhlIG5hbWUgYmVpbmcgdHlwZWQgbWF5IGJlIGEgUEFUSCByYXRoZXIgdGhhbiBhIGJhcmUgYmFzZW5hbWUsIHNvIGZvbGRlciBzZWdtZW50cyBnZXQgY2hlY2tlZCB0b28uXG4gKiBUaGF0IGlzIHdoYXQgT2JzaWRpYW4ncyBvd24gaW5saW5lIHJlbmFtZSBkb2VzLCBhbmQgdGhlIGFsdGVybmF0aXZlIOKAlCBjaGVja2luZyBvbmx5IHRoZSBsYXN0IHNlZ21lbnQg4oCUXG4gKiBjYW5ub3QgYmUgZXhwcmVzc2VkIGFzIGFuIGF0dHJpYnV0ZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIGFwcGx5aW5nIHRoZSBzcGVsbGNoZWNrIG1vZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVNwZWxsY2hlY2tNb2RlKHBhcmFtczogQXBwbHlTcGVsbGNoZWNrTW9kZVBhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGVsZW1lbnQsXG4gICAgc3BlbGxjaGVja01vZGUgPSBTcGVsbGNoZWNrTW9kZS5PZmZcbiAgfSA9IHBhcmFtcztcbiAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3NwZWxsY2hlY2snLCBTdHJpbmcoaXNTcGVsbGNoZWNrRW5hYmxlZEZvck1vZGUoYXBwLCBzcGVsbGNoZWNrTW9kZSkpKTtcbn1cblxuLyoqXG4gKiBNYXJrcyBhIHZhbHVlIHNvIHRoYXQge0BsaW5rIGNyZWF0ZUZyYWdtZW50V2l0aENvZGVCbG9ja3N9IHJlbmRlcnMgaXQgYXMgYW4gaW5saW5lIGNvZGUgYmxvY2suXG4gKlxuICogV3JhcCBhIHZhbHVlIHdpdGggdGhpcyBiZWZvcmUgaGFuZGluZyBpdCB0byBgdCgpYCwgYW5kIHRoZSB0cmFuc2xhdGVkIG1lc3NhZ2UgY29tZXMgYmFjayB3aXRoIHRoZSB2YWx1ZVxuICogYWxyZWFkeSBpbiBwbGFjZSwgZGVsaW1pdGVkOlxuICpcbiAqIGBgYHRzXG4gKiBjcmVhdGVGcmFnbWVudFdpdGhDb2RlQmxvY2tzKHQoKCQpID0+ICQub2JzaWRpYW5MaWIucGx1Z2luU3VnZ2VzdGlvbi5pbnN0YWxsZWQsIHtcbiAqICAgcGx1Z2luTmFtZTogYXNDb2RlQmxvY2socGx1Z2luTmFtZSlcbiAqIH0pKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBtYXJrZXIgdHJhdmVscyBXSVRIIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiBiZWluZyBhIHBvc2l0aW9uYWwgcGxhY2Vob2xkZXIgdGhlIGNhbGxlciBtYXRjaGVzIHVwXG4gKiBhZnRlcndhcmRzLiBUaGF0IGRpc3RpbmN0aW9uIGlzIHRoZSB3aG9sZSBwb2ludDogYSBtZXNzYWdlIG5hbWluZyB0d28gcGx1Z2lucyBpcyBpbnRlcnBvbGF0ZWQgYnkgbmFtZSxcbiAqIGFuZCBhIHRyYW5zbGF0aW9uIGlzIGZyZWUgdG8gcHV0IHRoZW0gaW4gZWl0aGVyIG9yZGVyLCBzbyBhbnl0aGluZyB0aGF0IHJlLWFzc29jaWF0ZWQgdmFsdWVzIHdpdGhcbiAqIHBsYWNlaG9sZGVycyBieSBwb3NpdGlvbiB3b3VsZCBzaWxlbnRseSBzd2FwIHRoZW0gdGhlIG1vbWVudCBhIHNlbnRlbmNlIHJlYWQgdGhlIG90aGVyIHdheSByb3VuZC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gcmVuZGVyIGFzIGEgY29kZSBibG9jay5cbiAqIEByZXR1cm5zIFRoZSB2YWx1ZSwgZGVsaW1pdGVkIGZvciB7QGxpbmsgY3JlYXRlRnJhZ21lbnRXaXRoQ29kZUJsb2Nrc30uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc0NvZGVCbG9jayh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke0NPREVfQkxPQ0tfREVMSU1JVEVSfSR7dmFsdWV9JHtDT0RFX0JMT0NLX0RFTElNSVRFUn1gO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhIHtAbGluayBEb2N1bWVudEZyYWdtZW50fSBmcm9tIGFuIGFscmVhZHktdHJhbnNsYXRlZCBtZXNzYWdlLCByZW5kZXJpbmcgZXZlcnkgdmFsdWUgdGhhdCB3YXNcbiAqIHdyYXBwZWQgaW4ge0BsaW5rIGFzQ29kZUJsb2NrfSBhcyBhbiBpbmxpbmUgY29kZSBibG9jayBhbmQgdGhlIHJlc3QgYXMgcGxhaW4gdGV4dC5cbiAqXG4gKiBUaGUgbWVzc2FnZSBzdGF5cyBPTkUgdHJhbnNsYXRhYmxlIHVuaXQuIFNwbGl0dGluZyBhIHNlbnRlbmNlIGludG8gYSBwcmVmaXggYW5kIGEgc3VmZml4IGFyb3VuZCB0aGUgdmFsdWVcbiAqIGlzIHRoZSBvYnZpb3VzIGFsdGVybmF0aXZlIGFuZCBpdCBkb2VzIG5vdCBzdXJ2aXZlIHRyYW5zbGF0aW9uOiBhIGxhbmd1YWdlIHRoYXQgcmVvcmRlcnMgdGhlIGNsYXVzZSwgb3JcbiAqIHRoYXQgbmVlZHMgZGlmZmVyZW50IGNhc2Ugb24gdGhlIHN1cnJvdW5kaW5nIHdvcmRzLCBjYW5ub3QgZXhwcmVzcyB0aGF0IHRocm91Z2ggdHdvIGZpeGVkIGhhbHZlcy4gSGVyZVxuICogdGhlIHZhbHVlIHNpdHMgd2hlcmV2ZXIgdGhlIHRyYW5zbGF0aW9uIHB1dHMgaXQsIGFuZCBvbmx5IGl0cyByZW5kZXJpbmcgaXMgZGVjaWRlZC5cbiAqXG4gKiBBIG1lc3NhZ2Ugd2l0aCBub3RoaW5nIG1hcmtlZCBjb21lcyBiYWNrIGFzIHBsYWluIHRleHQsIHNvIHRoaXMgaXMgc2FmZSB0byBhcHBseSB0byBhbnkgbWVzc2FnZS5cbiAqXG4gKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSB0cmFuc2xhdGVkIG1lc3NhZ2UsIHdpdGggaXRzIGNvZGUgdmFsdWVzIHdyYXBwZWQgYnkge0BsaW5rIGFzQ29kZUJsb2NrfS5cbiAqIEByZXR1cm5zIFRoZSBmcmFnbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZyYWdtZW50V2l0aENvZGVCbG9ja3MobWVzc2FnZTogc3RyaW5nKTogRG9jdW1lbnRGcmFnbWVudCB7XG4gIGNvbnN0IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnQoKTtcblxuICAvLyBEZWxpbWl0ZXJzIGNvbWUgaW4gcGFpcnMsIHNvIHRoZSBzZWdtZW50cyBiZXR3ZWVuIHRoZW0gYWx0ZXJuYXRlOiBwbGFpbiB0ZXh0LCBjb2RlIHZhbHVlLCBwbGFpbiB0ZXh0LlxuICBsZXQgaXNDb2RlU2VnbWVudCA9IGZhbHNlO1xuICBmb3IgKGNvbnN0IHNlZ21lbnQgb2YgbWVzc2FnZS5zcGxpdChDT0RFX0JMT0NLX0RFTElNSVRFUikpIHtcbiAgICBpZiAoc2VnbWVudCAhPT0gJycpIHtcbiAgICAgIGlmIChpc0NvZGVTZWdtZW50KSB7XG4gICAgICAgIGFwcGVuZENvZGVCbG9jayhmcmFnbWVudCwgc2VnbWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmcmFnbWVudC5hcHBlbmRUZXh0KHNlZ21lbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlzQ29kZVNlZ21lbnQgPSAhaXNDb2RlU2VnbWVudDtcbiAgfVxuXG4gIHJldHVybiBmcmFnbWVudDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBYUEsdUJBQXlCO0FBQ3pCLCtCQUdPO0FBS1AsTUFBTSxvQ0FBb0M7QUFLMUMsTUFBTSx1QkFBdUIsT0FBTyxjQUFjLGlDQUFpQztBQStCNUUsU0FBUyxnQkFBZ0IsU0FBeUMsTUFBb0I7QUFDM0YsVUFBUSxTQUFTLFVBQVUsRUFBRSxLQUFLLEdBQUcsMEJBQVMsZ0JBQWdCLElBQUksMEJBQVMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxXQUFXO0FBRS9GLFdBQU8sU0FBUyxRQUFRLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFBQSxFQUN4QyxDQUFDO0FBQ0g7QUFZTyxTQUFTLDBCQUEwQixTQUF5QyxTQUEwQztBQUMzSCxVQUFRLE9BQU8sT0FBTyxZQUFZLFdBQVcsVUFBVSxRQUFRLFVBQVUsSUFBSSxDQUFDO0FBQ2hGO0FBdUJPLFNBQVMsb0JBQW9CLFFBQXlDO0FBQzNFLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLElBQ0EsaUJBQWlCLHdDQUFlO0FBQUEsRUFDbEMsSUFBSTtBQUNKLFVBQVEsYUFBYSxjQUFjLFdBQU8scURBQTJCLEtBQUssY0FBYyxDQUFDLENBQUM7QUFDNUY7QUFzQk8sU0FBUyxZQUFZLE9BQXVCO0FBQ2pELFNBQU8sR0FBRyxvQkFBb0IsR0FBRyxLQUFLLEdBQUcsb0JBQW9CO0FBQy9EO0FBZ0JPLFNBQVMsNkJBQTZCLFNBQW1DO0FBQzlFLFFBQU0sV0FBVyxlQUFlO0FBR2hDLE1BQUksZ0JBQWdCO0FBQ3BCLGFBQVcsV0FBVyxRQUFRLE1BQU0sb0JBQW9CLEdBQUc7QUFDekQsUUFBSSxZQUFZLElBQUk7QUFDbEIsVUFBSSxlQUFlO0FBQ2pCLHdCQUFnQixVQUFVLE9BQU87QUFBQSxNQUNuQyxPQUFPO0FBQ0wsaUJBQVMsV0FBVyxPQUFPO0FBQUEsTUFDN0I7QUFBQSxJQUNGO0FBRUEsb0JBQWdCLENBQUM7QUFBQSxFQUNuQjtBQUVBLFNBQU87QUFDVDsiLCJuYW1lcyI6W119
|
|
@@ -192,10 +192,15 @@ class FrontmatterLinksParser {
|
|
|
192
192
|
}
|
|
193
193
|
parseValue(value, key) {
|
|
194
194
|
if (typeof value === "string") {
|
|
195
|
-
const
|
|
196
|
-
const
|
|
195
|
+
const options = { shouldRecognizeWwwAutolinkLiterals: false };
|
|
196
|
+
const parseLinkResults = parseLinks(value, options);
|
|
197
|
+
const wholeValueLink = getWholeValueLink({ links: parseLinkResults, options, value });
|
|
198
|
+
if (wholeValueLink) {
|
|
199
|
+
this.categorize({ isSingleLink: true, key, parseLinkResult: wholeValueLink, value });
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
197
202
|
for (const parseLinkResult of parseLinkResults) {
|
|
198
|
-
this.categorize({ isSingleLink, key, parseLinkResult, value });
|
|
203
|
+
this.categorize({ isSingleLink: false, key, parseLinkResult, value });
|
|
199
204
|
}
|
|
200
205
|
return;
|
|
201
206
|
}
|
|
@@ -224,8 +229,7 @@ function parseFrontmatterLinks(frontmatter) {
|
|
|
224
229
|
return new FrontmatterLinksParser().parse(frontmatter);
|
|
225
230
|
}
|
|
226
231
|
function parseLink($string, options) {
|
|
227
|
-
|
|
228
|
-
return links[0]?.raw === $string ? links[0] : null;
|
|
232
|
+
return getWholeValueLink({ links: parseLinks($string, options), options, value: $string });
|
|
229
233
|
}
|
|
230
234
|
function parseLinks($string, options) {
|
|
231
235
|
const shouldRecognizeWwwAutolinkLiterals = options?.shouldRecognizeWwwAutolinkLiterals ?? true;
|
|
@@ -416,6 +420,34 @@ function getRawLink(node, $string) {
|
|
|
416
420
|
const pos = (0, import_type_guards.ensureNonNullable)(node.position);
|
|
417
421
|
return $string.slice(pos.start.offset, pos.end.offset);
|
|
418
422
|
}
|
|
423
|
+
function getWholeValueLink(params) {
|
|
424
|
+
const { links, options, value } = params;
|
|
425
|
+
const [firstLink] = links;
|
|
426
|
+
if (links.length === 1 && firstLink?.raw === value) {
|
|
427
|
+
return firstLink;
|
|
428
|
+
}
|
|
429
|
+
if (!value.startsWith("[") || links.length > 1) {
|
|
430
|
+
return null;
|
|
431
|
+
}
|
|
432
|
+
if (firstLink) {
|
|
433
|
+
if (firstLink.isWikilink || !firstLink.raw.startsWith("[") || firstLink.endOffset !== value.length) {
|
|
434
|
+
return null;
|
|
435
|
+
}
|
|
436
|
+
return widenToWholeValue({
|
|
437
|
+
captionEndOffset: firstLink.startOffset + 1 + (firstLink.alias?.length ?? 0),
|
|
438
|
+
link: firstLink,
|
|
439
|
+
value
|
|
440
|
+
});
|
|
441
|
+
}
|
|
442
|
+
const captionEndOffset = value.lastIndexOf("](");
|
|
443
|
+
if (captionEndOffset === -1) {
|
|
444
|
+
return null;
|
|
445
|
+
}
|
|
446
|
+
const maskedValue = `[${value.slice(1, captionEndOffset).replaceAll(/[[\]]/g, "@")}${value.slice(captionEndOffset)}`;
|
|
447
|
+
const maskedLinks = parseLinks(maskedValue, options);
|
|
448
|
+
const [maskedLink] = maskedLinks;
|
|
449
|
+
return maskedLinks.length === 1 && maskedLink?.raw === maskedValue ? widenToWholeValue({ captionEndOffset, link: maskedLink, value }) : null;
|
|
450
|
+
}
|
|
419
451
|
function hasAngleBracketsInLink(params) {
|
|
420
452
|
const { raw, rawUrl } = params;
|
|
421
453
|
const OPEN_ANGLE_BRACKET = "<";
|
|
@@ -506,6 +538,18 @@ function trimWwwAutolinkLiteralEnd(literal) {
|
|
|
506
538
|
}
|
|
507
539
|
return lastCharacter === ")" && countOccurrences(literal, ")") > countOccurrences(literal, "(") ? literal.slice(0, -1) : literal.replace(TRAILING_ENTITY_REFERENCE_REG_EXP, "");
|
|
508
540
|
}
|
|
541
|
+
function widenToWholeValue(params) {
|
|
542
|
+
const { captionEndOffset, link, value } = params;
|
|
543
|
+
const alias = value.slice(1, captionEndOffset);
|
|
544
|
+
return {
|
|
545
|
+
...link,
|
|
546
|
+
alias,
|
|
547
|
+
endOffset: value.length,
|
|
548
|
+
raw: value,
|
|
549
|
+
startOffset: 0,
|
|
550
|
+
unescapedAlias: unescapeAlias(alias)
|
|
551
|
+
};
|
|
552
|
+
}
|
|
509
553
|
// Annotate the CommonJS export names for ESM import in node:
|
|
510
554
|
0 && (module.exports = {
|
|
511
555
|
escapeAlias,
|
|
@@ -517,4 +561,4 @@ function trimWwwAutolinkLiteralEnd(literal) {
|
|
|
517
561
|
toParseLinkReference,
|
|
518
562
|
unescapeAlias
|
|
519
563
|
});
|
|
520
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYXJzZS1saW5rLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaGlzIG1vZHVsZSBwcm92aWRlcyB1dGlsaXRpZXMgZm9yIHBhcnNpbmcgbWFya2Rvd24gYW5kIHdpa2kgbGlua3MgaW50byBzdHJ1Y3R1cmVkIGRhdGEsIGFuZCBmb3JcbiAqIGVzY2FwaW5nLCB1bmVzY2FwaW5nLCBhbmQgZW5jb2RpbmcgbGluayBjb21wb25lbnRzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY09iamVjdCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQgdHlwZSB7IExpbmsgfSBmcm9tICdtZGFzdCc7XG5pbXBvcnQgdHlwZSB7XG4gIEZyb250bWF0dGVyTGlua0NhY2hlLFxuICBMb2MsXG4gIFJlZmVyZW5jZSxcbiAgUmVmZXJlbmNlQ2FjaGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBOb2RlIH0gZnJvbSAndW5pc3QnO1xuXG5pbXBvcnQgeyBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXMgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvb2JqZWN0LXV0aWxzJztcbmltcG9ydCB7IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcmVnLWV4cCc7XG5pbXBvcnQgeyByZXBsYWNlQWxsIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQge1xuICBlbmNvZGVVcmwsXG4gIGlzRmlsZVVybCxcbiAgaXNVcmxcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3VybCc7XG5pbXBvcnQgeyBpc0Zyb250bWF0dGVyTGlua0NhY2hlIH0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdC9pbXBsZW1lbnRhdGlvbnMnO1xuaW1wb3J0IHsgcmVtYXJrIH0gZnJvbSAncmVtYXJrJztcbmltcG9ydCByZW1hcmtQYXJzZSBmcm9tICdyZW1hcmstcGFyc2UnO1xuaW1wb3J0IHsgd2lraUxpbmtQbHVnaW4gfSBmcm9tICdyZW1hcmstd2lraS1saW5rJztcbmltcG9ydCB7IHZpc2l0IH0gZnJvbSAndW5pc3QtdXRpbC12aXNpdCc7XG5cbi8qKlxuICogUmVndWxhciBleHByZXNzaW9uIGZvciBzcGVjaWFsIG1hcmtkb3duIGxpbmsgc3ltYm9scy5cbiAqL1xuY29uc3QgU1BFQ0lBTF9NQVJLRE9XTl9MSU5LX1NZTUJPTFNfUkVHRVggPSAvW1xcXFxbXFxdPD5fKn49YCRdL2c7XG5cbmNvbnN0IFdJS0lMSU5LX0RJVklERVIgPSAnfCc7XG5cbi8qKlxuICogTWF0Y2hlcyBhIGNhbmRpZGF0ZSBHRk0gZXh0ZW5kZWQgYHd3dy5gIGF1dG9saW5rIGxpdGVyYWw6IGB3d3cuYCBhdCB0aGUgc3RhcnQgb2YgdGhlIHRleHQgb3IgYWZ0ZXJcbiAqIHdoaXRlc3BhY2UsIGAqYCwgYF9gLCBgfmAsIGAoYCBvciBgPGAsIHJ1bm5pbmcgdXAgdG8gdGhlIG5leHQgd2hpdGVzcGFjZSwgYDxgIG9yIGA+YC4gR0ZNIGl0c2VsZlxuICoga2VlcHMgYSBjbG9zaW5nIGA+YCBpbiB0aGUgbGl0ZXJhbCAoT2JzaWRpYW4gcmVuZGVycyBgPHd3dy5leGFtcGxlLmNvbT5gIHdpdGggYW4gaHJlZiBlbmRpbmcgaW5cbiAqIGAlM0VgKTsgc3RvcHBpbmcgYmVmb3JlIGl0IGlzIGRlbGliZXJhdGUsIHNvIHRoZSBicmFja2V0cyBjYW4gYmUgcmVwb3J0ZWQgYXJvdW5kIHRoZSBsaXRlcmFsIGluc3RlYWQuXG4gKlxuICogVGhlIHByZWNlZGluZyBjaGFyYWN0ZXIgaXMgY29uc3VtZWQgYW5kIHRoZSBsaXRlcmFsIGNhcHR1cmVkIGFzIGBMaXRlcmFsYCwgYmVjYXVzZSBhIGxvb2tiZWhpbmQgaXMgYVxuICogc3ludGF4IGVycm9yIG9uIGlPUyBiZWZvcmUgMTYuNCwgYmVsb3cgdGhlIGlPUyAxNSBPYnNpZGlhbiBtb2JpbGUgc3RpbGwgc3VwcG9ydHMuIENvbnN1bWluZyBpdCBsb3NlcyBub1xuICogY2FuZGlkYXRlOiBhIG1hdGNoIGVuZHMgYmVmb3JlIHdoaXRlc3BhY2UsIGA8YCwgYD5gIG9yIHRoZSBlbmQsIHNvIHRoZSBjaGFyYWN0ZXIgYSBmb2xsb3dpbmcgY2FuZGlkYXRlXG4gKiBuZWVkcyBpcyBuZXZlciBwYXJ0IG9mIHRoZSBwcmV2aW91cyBtYXRjaC5cbiAqL1xuY29uc3QgV1dXX0FVVE9MSU5LX0xJVEVSQUxfQ0FORElEQVRFX1JFR19FWFAgPSAvKD86XnxbXFxzKCo8X35dKSg/PExpdGVyYWw+d3d3XFwuW15cXHM8Pl0qKS9nO1xuXG4vKipcbiAqIE1hdGNoZXMgdGhlIGRvbWFpbiBvZiBhIEdGTSBleHRlbmRlZCBgd3d3LmAgYXV0b2xpbmsgbGl0ZXJhbDogc2VnbWVudHMgb2YgbGV0dGVycywgZGlnaXRzLFxuICogdW5kZXJzY29yZXMgYW5kIGh5cGhlbnMgc2VwYXJhdGVkIGJ5IHBlcmlvZHMuXG4gKi9cbmNvbnN0IFdXV19BVVRPTElOS19MSVRFUkFMX0RPTUFJTl9SRUdfRVhQID0gL153d3coPzpcXC5bXFxwe0x9XFxwe059Xy1dKykrL3U7XG5cbi8qKlxuICogVGhlIGNoYXJhY3RlcnMgR0ZNIGRyb3BzIGZyb20gdGhlIGVuZCBvZiBhbiBleHRlbmRlZCBhdXRvbGluay5cbiAqL1xuY29uc3QgV1dXX0FVVE9MSU5LX0xJVEVSQUxfVFJBSUxJTkdfUFVOQ1RVQVRJT04gPSBuZXcgU2V0KFsnXycsICcsJywgJzonLCAnIScsICc/JywgJy4nLCAnKicsICd+J10pO1xuXG4vKipcbiAqIE1hdGNoZXMgYW4gZW50aXR5IHJlZmVyZW5jZSBhdCB0aGUgZW5kIG9mIGFuIGV4dGVuZGVkIGF1dG9saW5rLCB3aGljaCBHRk0gZHJvcHMuXG4gKi9cbmNvbnN0IFRSQUlMSU5HX0VOVElUWV9SRUZFUkVOQ0VfUkVHX0VYUCA9IC8mW1xcZEEtWmEtel0rOyQvO1xuXG4vKipcbiAqIFRoZSBzY2hlbWUgT2JzaWRpYW4gb3BlbnMgYSBHRk0gZXh0ZW5kZWQgYHd3dy5gIGF1dG9saW5rIGxpdGVyYWwgd2l0aC5cbiAqL1xuY29uc3QgV1dXX0FVVE9MSU5LX0xJVEVSQUxfU0NIRU1FID0gJ2h0dHA6Ly8nO1xuXG4vKipcbiAqIFRoZSByZXN1bHQgb2YgcGFyc2luZyB0aGUgbGlua3MgZnJvbSBhIG5vdGUncyBmcm9udG1hdHRlciB2aWEge0BsaW5rIHBhcnNlRnJvbnRtYXR0ZXJMaW5rc30uIEludGVybmFsXG4gKiBzaW5nbGUtbGluayBmcm9udG1hdHRlciB2YWx1ZXMgYXJlIG9taXR0ZWQsIGFzIE9ic2lkaWFuIG5hdGl2ZWx5IGNhY2hlcyB0aGVtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlRnJvbnRtYXR0ZXJMaW5rc1Jlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgZXh0ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gc2luZ2xlLWxpbmsgKHNpbmdsZS12YWx1ZSkgZnJvbnRtYXR0ZXIgdmFsdWVzLlxuICAgKi9cbiAgcmVhZG9ubHkgZnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzOiBQYXJzZUxpbmtGcm9udG1hdHRlclJlZmVyZW5jZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgZXh0ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gbXVsdGktbGluayAobXVsdGktdmFsdWUpIGZyb250bWF0dGVyIHZhbHVlcy5cbiAgICovXG4gIHJlYWRvbmx5IG11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3M6IFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlV2l0aE9mZnNldHNbXTtcblxuICAvKipcbiAgICogVGhlIGludGVybmFsIGxpbmtzIHBhcnNlZCBmcm9tIG11bHRpLWxpbmsgKG11bHRpLXZhbHVlKSBmcm9udG1hdHRlciB2YWx1ZXMuXG4gICAqL1xuICByZWFkb25seSBtdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5rczogUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2VXaXRoT2Zmc2V0c1tdO1xufVxuXG4vKipcbiAqIEEge0BsaW5rIEZyb250bWF0dGVyTGlua0NhY2hlfSBmb3IgYSBsaW5rIHBhcnNlZCBmcm9tIGEgc2luZ2xlLWxpbmsgZnJvbnRtYXR0ZXIgdmFsdWUgdmlhXG4gKiB7QGxpbmsgcGFyc2VMaW5rc30uIEl0IGNhcnJpZXMgdGhlIGZ1bGwge0BsaW5rIFBhcnNlTGlua1Jlc3VsdH0gc28gY29uc3VtZXJzIGNhbiBpbnNwZWN0IHRoZSBwYXJzZVxuICogZGV0YWlscyB3aXRob3V0IHJlLXBhcnNpbmcgdGhlIGxpbmsuIFVzZSB0aGlzIHdoZW4gdGhlIHdob2xlIGZyb250bWF0dGVyIHZhbHVlIGlzIGEgc2luZ2xlIGxpbmsuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2UgZXh0ZW5kcyBGcm9udG1hdHRlckxpbmtDYWNoZSB7XG4gIC8qKlxuICAgKiBUaGUgcmVzdWx0IG9mIHBhcnNpbmcgdGhlIGxpbmsuXG4gICAqL1xuICByZWFkb25seSBwYXJzZUxpbmtSZXN1bHQ6IFBhcnNlTGlua1Jlc3VsdDtcbn1cblxuLyoqXG4gKiBBIHtAbGluayBQYXJzZUxpbmtGcm9udG1hdHRlclJlZmVyZW5jZX0gZm9yIGEgbGluayBwYXJzZWQgZnJvbSBhIG11bHRpLWxpbmsgZnJvbnRtYXR0ZXIgdmFsdWUgdmlhXG4gKiB7QGxpbmsgcGFyc2VMaW5rc30sIGFkZGl0aW9uYWxseSBjYXJyeWluZyB0aGUgb2Zmc2V0cyBvZiB0aGUgbGluayB3aXRoaW4gdGhlIGZyb250bWF0dGVyIHZhbHVlLiBVc2VcbiAqIHRoaXMgd2hlbiB0aGUgZnJvbnRtYXR0ZXIgdmFsdWUgaG9sZHMgbXVsdGlwbGUgbGlua3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2VXaXRoT2Zmc2V0cyBleHRlbmRzIFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlIHtcbiAgLyoqXG4gICAqIEFuIGVuZCBvZmZzZXQgb2YgdGhlIGxpbmsgaW4gdGhlIGZyb250bWF0dGVyIHZhbHVlLlxuICAgKi9cbiAgZW5kT2Zmc2V0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEEgc3RhcnQgb2Zmc2V0IG9mIHRoZSBsaW5rIGluIHRoZSBmcm9udG1hdHRlciB2YWx1ZS5cbiAgICovXG4gIHN0YXJ0T2Zmc2V0OiBudW1iZXI7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHBhcnNlTGlua30uIFRoZSBzYW1lIGFzIHtAbGluayBQYXJzZUxpbmtzT3B0aW9uc30uXG4gKi9cbmV4cG9ydCB0eXBlIFBhcnNlTGlua09wdGlvbnMgPSBQYXJzZUxpbmtzT3B0aW9ucztcblxuLyoqXG4gKiBBIHtAbGluayBSZWZlcmVuY2VDYWNoZX0gZm9yIGEgbGluayBwYXJzZWQgZnJvbSBjb250ZW50IHZpYSB7QGxpbmsgcGFyc2VMaW5rc30uIEl0IGNhcnJpZXMgdGhlIGZ1bGxcbiAqIHtAbGluayBQYXJzZUxpbmtSZXN1bHR9IHNvIGNvbnN1bWVycyBjYW4gaW5zcGVjdCB0aGUgcGFyc2UgZGV0YWlscyB3aXRob3V0IHJlLXBhcnNpbmcgdGhlIGxpbmsuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VMaW5rUmVmZXJlbmNlIGV4dGVuZHMgUmVmZXJlbmNlQ2FjaGUge1xuICAvKipcbiAgICogVGhlIHJlc3VsdCBvZiBwYXJzaW5nIHRoZSBsaW5rLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyc2VMaW5rUmVzdWx0OiBQYXJzZUxpbmtSZXN1bHQ7XG59XG5cbi8qKlxuICogQSByZXN1bHQgb2YgcGFyc2luZyBhIGxpbmsuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VMaW5rUmVzdWx0IHtcbiAgLyoqXG4gICAqIEFuIGFsaWFzIG9mIHRoZSBsaW5rLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBcbiAgICogW1xcKmFsaWFzXFwqXShsaW5rLm1kKSAtPiBcXCphbGlhc1xcKlxuICAgKiBgYGBcbiAgICovXG4gIHJlYWRvbmx5IGFsaWFzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBlbmNvZGVkIFVSTCBvZiB0aGUgbGluay5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgXG4gICAqIFthbGlhc10oPGxpbmsgd2l0aCBzcGFjZS5tZD4pIC0+IGxpbmslMjB3aXRoJTIwc3BhY2UubWRcbiAgICogYGBgXG4gICAqL1xuICByZWFkb25seSBlbmNvZGVkVXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBlbmQgb2Zmc2V0IG9mIHRoZSBsaW5rIGluIHRoZSBvcmlnaW5hbCB0ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgZW5kT2Zmc2V0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgbGluayBoYXMgYW5nbGUgYnJhY2tldHMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYFxuICAgKiBbYWxpYXNdKDxsaW5rLm1kPikgLT4gdHJ1ZVxuICAgKiBbYWxpYXNdKGxpbmsubWQpIC0+IGZhbHNlXG4gICAqIGBgYFxuICAgKi9cbiAgcmVhZG9ubHkgaGFzQW5nbGVCcmFja2V0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgbGluayBpcyBhbiBlbWJlZCBsaW5rLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBcbiAgICogIVtbYWxpYXNdXSAtPiB0cnVlXG4gICAqIFtbYWxpYXNdXSAtPiBmYWxzZVxuICAgKiBgYGBcbiAgICovXG4gIHJlYWRvbmx5IGlzRW1iZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgbGluayBpcyBleHRlcm5hbC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgXG4gICAqIFthbGlhc10oaHR0cHM6Ly9leGFtcGxlLmNvbSkgLT4gdHJ1ZVxuICAgKiBbYWxpYXNdKGZpbGUubWQpIC0+IGZhbHNlXG4gICAqIGBgYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNFeHRlcm5hbDogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIGlzIGEgYGZpbGU6Ly9gIFVSTC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgXG4gICAqIFthbGlhc10oZmlsZTovLy9DOi94LnR4dCkgLT4gdHJ1ZVxuICAgKiBbYWxpYXNdKGh0dHBzOi8vZXhhbXBsZS5jb20pIC0+IGZhbHNlXG4gICAqIGBgYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNGaWxlVXJsOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGxpbmsgaXMgYSB3aWtpbGluay5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgXG4gICAqIFtbYWxpYXNdXSAtPiB0cnVlXG4gICAqIFthbGlhc10obGluay5tZCkgLT4gZmFsc2VcbiAgICogYGBgXG4gICAqL1xuICByZWFkb25seSBpc1dpa2lsaW5rOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIHJhdyBsaW5rIHRleHQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYFxuICAgKiBbYWxpYXNdKGxpbmsubWQpIC0+IFthbGlhc10obGluay5tZClcbiAgICogYGBgXG4gICAqL1xuICByZWFkb25seSByYXc6IHN0cmluZztcblxuICAvKipcbiAgICogQSBzdGFydCBvZmZzZXQgb2YgdGhlIGxpbmsgaW4gdGhlIG9yaWdpbmFsIHRleHQuXG4gICAqL1xuICByZWFkb25seSBzdGFydE9mZnNldDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIHRpdGxlIG9mIHRoZSBsaW5rLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBcbiAgICogW2FsaWFzXShsaW5rLm1kIFwidGl0bGVcIikgLT4gdGl0bGVcbiAgICogYGBgXG4gICAqL1xuICByZWFkb25seSB0aXRsZT86IHN0cmluZztcblxuICAvKipcbiAgICogQW4gdW5lc2NhcGVkIGFsaWFzIG9mIHRoZSBsaW5rLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBcbiAgICogW1xcKmFsaWFzXFwqXShsaW5rLm1kKSAtPiAqYWxpYXMqXG4gICAqIGBgYFxuICAgKi9cbiAgcmVhZG9ubHkgdW5lc2NhcGVkQWxpYXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFuIFVSTCBvZiB0aGUgbGluay5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgXG4gICAqIFthbGlhc10obGluayUyMHdpdGglMjBzcGFjZS5tZCkgLT4gbGluayB3aXRoIHNwYWNlLm1kXG4gICAqIGBgYFxuICAgKi9cbiAgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHBhcnNlTGlua3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlTGlua3NPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVjb2duaXplIEdGTSBleHRlbmRlZCBgd3d3LmAgYXV0b2xpbmsgbGl0ZXJhbHMgKGB3d3cuZXhhbXBsZS5jb21gLCBhbHNvIGluc2lkZVxuICAgKiBgPC4uLj5gKSBhcyBleHRlcm5hbCBsaW5rcywgYXMgT2JzaWRpYW4gZG9lcyBpbiBhIG5vdGUncyBib2R5LiBPYnNpZGlhbiBkb2VzIG5vdCBsaW5rIHRoZW0gaW5cbiAgICogZnJvbnRtYXR0ZXIgdmFsdWVzLCBzbyB7QGxpbmsgcGFyc2VGcm9udG1hdHRlckxpbmtzfSB0dXJucyB0aGlzIG9mZi5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUmVjb2duaXplV3d3QXV0b2xpbmtMaXRlcmFscz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgdG9QYXJzZUxpbmtSZWZlcmVuY2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvUGFyc2VMaW5rUmVmZXJlbmNlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IHRoZSBwYXJzZWQgbGluaydzIG9mZnNldHMgaW5kZXggaW50by4gVXNlZCB0byBjb21wdXRlIHRoZSBsaW5lIGFuZCBjb2x1bW4uXG4gICAqL1xuICByZWFkb25seSBjb250ZW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJzZWQgbGluayB0byB3cmFwLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyc2VMaW5rUmVzdWx0OiBQYXJzZUxpbmtSZXN1bHQ7XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgRnJvbnRtYXR0ZXJMaW5rc1BhcnNlci5jYXRlZ29yaXplfS5cbiAqL1xuaW50ZXJmYWNlIENhdGVnb3JpemVGcm9udG1hdHRlckxpbmtQYXJhbXMge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgd2hvbGUgZnJvbnRtYXR0ZXIgdmFsdWUgaXMgYSBzaW5nbGUgbGluay5cbiAgICovXG4gIHJlYWRvbmx5IGlzU2luZ2xlTGluazogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGtleSBwYXRoIG9mIHRoZSBmcm9udG1hdHRlciB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyc2VkIGxpbmsuXG4gICAqL1xuICByZWFkb25seSBwYXJzZUxpbmtSZXN1bHQ6IFBhcnNlTGlua1Jlc3VsdDtcblxuICAvKipcbiAgICogVGhlIGZyb250bWF0dGVyIHZhbHVlIHRoZSBsaW5rIHdhcyBwYXJzZWQgZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgZGVjb2RlVXJsU2FmZWx5fS5cbiAqL1xuaW50ZXJmYWNlIERlY29kZVVybFNhZmVseVBhcmFtcyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBsaW5rIHVzZXMgYW5nbGUgYnJhY2tldHMuXG4gICAqL1xuICByZWFkb25seSBoYXNBbmdsZUJyYWNrZXRzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBsaW5rIGlzIGV4dGVybmFsLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNFeHRlcm5hbDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBVUkwgdG8gZGVjb2RlLlxuICAgKi9cbiAgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgZXh0cmFjdEFsaWFzfS5cbiAqL1xuaW50ZXJmYWNlIEV4dHJhY3RBbGlhc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBBIHN0cmluZyB0byBleHRyYWN0IHRoZSBhbGlhcyBmcm9tLlxuICAgKi9cbiAgcmVhZG9ubHkgJHN0cmluZzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBlbmQgb2Zmc2V0IG9mIHRoZSBhbGlhcyBpbiB0aGUgc3RyaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgYWxpYXNFbmRPZmZzZXQ6IG51bWJlcjtcblxuICAvKipcbiAgICogQSBzdGFydCBvZmZzZXQgb2YgdGhlIGFsaWFzIGluIHRoZSBzdHJpbmcuXG4gICAqL1xuICByZWFkb25seSBhbGlhc1N0YXJ0T2Zmc2V0OiBudW1iZXI7XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgZXh0cmFjdFRleHRMaW5rc30uXG4gKi9cbmludGVyZmFjZSBFeHRyYWN0VGV4dExpbmtzUGFyYW1zIHtcbiAgLyoqXG4gICAqIEEgc3RyaW5nIHRvIGV4dHJhY3QgdGhlIHRleHQgbGlua3MgZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5ICRzdHJpbmc6IHN0cmluZztcblxuICAvKipcbiAgICogQW4gZW5kIG9mZnNldCBvZiB0aGUgdGV4dCBwYXJ0IGluIHRoZSBzdHJpbmcuXG4gICAqL1xuICByZWFkb25seSBlbmRPZmZzZXQ6IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZWNvZ25pemUgR0ZNIGV4dGVuZGVkIGB3d3cuYCBhdXRvbGluayBsaXRlcmFscy5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFJlY29nbml6ZVd3d0F1dG9saW5rTGl0ZXJhbHM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgc3RhcnQgb2Zmc2V0IG9mIHRoZSB0ZXh0IHBhcnQgaW4gdGhlIHN0cmluZy5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0T2Zmc2V0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBwYXJzZWQgbGlua3MgdG8gYXBwZW5kIHRoZSBleHRyYWN0ZWQgdGV4dCBsaW5rcyB0by5cbiAgICovXG4gIHJlYWRvbmx5IHRleHRMaW5rczogUGFyc2VMaW5rUmVzdWx0W107XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgaGFzQW5nbGVCcmFja2V0c0luTGlua30uXG4gKi9cbmludGVyZmFjZSBIYXNBbmdsZUJyYWNrZXRzSW5MaW5rUGFyYW1zIHtcbiAgLyoqXG4gICAqIEEgcmF3IGxpbmsgdGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IHJhdzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHJhdyBVUkwgb2YgdGhlIGxpbmsuXG4gICAqL1xuICByZWFkb25seSByYXdVcmw6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFdpa2lMaW5rTm9kZSBleHRlbmRzIE5vZGUge1xuICBkYXRhOiBXaWtpTGlua05vZGVEYXRhO1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgV2lraUxpbmtOb2RlRGF0YSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgYWxpYXM6IHN0cmluZztcbn1cblxuY2xhc3MgRnJvbnRtYXR0ZXJMaW5rc1BhcnNlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzOiBQYXJzZUxpbmtGcm9udG1hdHRlclJlZmVyZW5jZVtdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgbXVsdGlWYWx1ZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rczogUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2VXaXRoT2Zmc2V0c1tdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgbXVsdGlWYWx1ZUZyb250bWF0dGVyTGlua3M6IFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlV2l0aE9mZnNldHNbXSA9IFtdO1xuXG4gIHB1YmxpYyBwYXJzZShmcm9udG1hdHRlcjogdW5rbm93bik6IFBhcnNlRnJvbnRtYXR0ZXJMaW5rc1Jlc3VsdCB7XG4gICAgdGhpcy5wYXJzZVZhbHVlKGZyb250bWF0dGVyLCAnJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZyb250bWF0dGVyRXh0ZXJuYWxMaW5rczogdGhpcy5mcm9udG1hdHRlckV4dGVybmFsTGlua3MsXG4gICAgICBtdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzOiB0aGlzLm11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3MsXG4gICAgICBtdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5rczogdGhpcy5tdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5rc1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNhdGVnb3JpemUocGFyYW1zOiBDYXRlZ29yaXplRnJvbnRtYXR0ZXJMaW5rUGFyYW1zKTogdm9pZCB7XG4gICAgY29uc3QgeyBpc1NpbmdsZUxpbmssIGtleSwgcGFyc2VMaW5rUmVzdWx0LCB2YWx1ZSB9ID0gcGFyYW1zO1xuICAgIGlmICghcGFyc2VMaW5rUmVzdWx0LmlzRXh0ZXJuYWwgJiYgaXNTaW5nbGVMaW5rKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVmZXJlbmNlOiBQYXJzZUxpbmtGcm9udG1hdHRlclJlZmVyZW5jZSA9IHtcbiAgICAgIGRpc3BsYXlUZXh0OiBwYXJzZUxpbmtSZXN1bHQuYWxpYXMgPz8gcGFyc2VMaW5rUmVzdWx0LnVybCxcbiAgICAgIGtleSxcbiAgICAgIGxpbms6IHBhcnNlTGlua1Jlc3VsdC51cmwsXG4gICAgICBvcmlnaW5hbDogdmFsdWUsXG4gICAgICBwYXJzZUxpbmtSZXN1bHRcbiAgICB9O1xuXG4gICAgaWYgKGlzU2luZ2xlTGluaykge1xuICAgICAgdGhpcy5mcm9udG1hdHRlckV4dGVybmFsTGlua3MucHVzaChyZWZlcmVuY2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlZmVyZW5jZVdpdGhPZmZzZXRzOiBQYXJzZUxpbmtGcm9udG1hdHRlclJlZmVyZW5jZVdpdGhPZmZzZXRzID0ge1xuICAgICAgLi4ucmVmZXJlbmNlLFxuICAgICAgZW5kT2Zmc2V0OiBwYXJzZUxpbmtSZXN1bHQuZW5kT2Zmc2V0LFxuICAgICAgc3RhcnRPZmZzZXQ6IHBhcnNlTGlua1Jlc3VsdC5zdGFydE9mZnNldFxuICAgIH07XG5cbiAgICBpZiAocGFyc2VMaW5rUmVzdWx0LmlzRXh0ZXJuYWwpIHtcbiAgICAgIHRoaXMubXVsdGlWYWx1ZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcy5wdXNoKHJlZmVyZW5jZVdpdGhPZmZzZXRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5rcy5wdXNoKHJlZmVyZW5jZVdpdGhPZmZzZXRzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBhcnNlVmFsdWUodmFsdWU6IHVua25vd24sIGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIE9ic2lkaWFuIGxpbmtzIGEgc2NoZW1lLWxlc3MgYHd3dy5gIGxpdGVyYWwgaW4gdGhlIGJvZHkgb25seSwgbmV2ZXIgaW4gYSBmcm9udG1hdHRlciB2YWx1ZS5cbiAgICAgIGNvbnN0IHBhcnNlTGlua1Jlc3VsdHMgPSBwYXJzZUxpbmtzKHZhbHVlLCB7IHNob3VsZFJlY29nbml6ZVd3d0F1dG9saW5rTGl0ZXJhbHM6IGZhbHNlIH0pO1xuICAgICAgY29uc3QgaXNTaW5nbGVMaW5rID0gcGFyc2VMaW5rUmVzdWx0c1swXT8ucmF3ID09PSB2YWx1ZTtcbiAgICAgIGZvciAoY29uc3QgcGFyc2VMaW5rUmVzdWx0IG9mIHBhcnNlTGlua1Jlc3VsdHMpIHtcbiAgICAgICAgdGhpcy5jYXRlZ29yaXplKHsgaXNTaW5nbGVMaW5rLCBrZXksIHBhcnNlTGlua1Jlc3VsdCwgdmFsdWUgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtjaGlsZEtleSwgY2hpbGRWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUgYXMgR2VuZXJpY09iamVjdCkpIHtcbiAgICAgIHRoaXMucGFyc2VWYWx1ZShjaGlsZFZhbHVlLCBrZXkgPyBgJHtrZXl9LiR7Y2hpbGRLZXl9YCA6IGNoaWxkS2V5KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBFc2NhcGVzIHRoZSBhbGlhcyBvZiBhIG1hcmtkb3duIGxpbmsuXG4gKlxuICogQHBhcmFtIGFsaWFzIC0gQW4gYWxpYXMgb2YgYSBtYXJrZG93biBsaW5rLlxuICogQHJldHVybnMgQW4gZXNjYXBlZCBhbGlhcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGVzY2FwZUFsaWFzKCcqKmFsaWFzKionKSAvLyAnXFxcXCpcXFxcKmFsaWFzXFxcXCpcXFxcKidcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlQWxpYXMoYWxpYXM6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiByZXBsYWNlQWxsKHtcbiAgICAkc3RyaW5nOiBhbGlhcyxcbiAgICByZXBsYWNlcjogU3RyaW5nLnJhd2BcXCQmYCxcbiAgICBzZWFyY2hWYWx1ZTogU1BFQ0lBTF9NQVJLRE9XTl9MSU5LX1NZTUJPTFNfUkVHRVhcbiAgfSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgcmVmZXJlbmNlIGlzIGEge0BsaW5rIFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlfS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgcmVmZXJlbmNlIGlzIGEge0BsaW5rIFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlfSwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlKHJlZmVyZW5jZTogUmVmZXJlbmNlKTogcmVmZXJlbmNlIGlzIFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlIHtcbiAgcmV0dXJuIGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGUocmVmZXJlbmNlKSAmJiAncGFyc2VMaW5rUmVzdWx0JyBpbiByZWZlcmVuY2U7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgcmVmZXJlbmNlIGlzIGEge0BsaW5rIFBhcnNlTGlua1JlZmVyZW5jZX0uXG4gKlxuICogQHBhcmFtIHJlZmVyZW5jZSAtIFRoZSByZWZlcmVuY2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHJlZmVyZW5jZSBpcyBhIHtAbGluayBQYXJzZUxpbmtSZWZlcmVuY2V9LCBvdGhlcndpc2UgYGZhbHNlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGFyc2VMaW5rUmVmZXJlbmNlKHJlZmVyZW5jZTogUmVmZXJlbmNlKTogcmVmZXJlbmNlIGlzIFBhcnNlTGlua1JlZmVyZW5jZSB7XG4gIHJldHVybiAncGFyc2VMaW5rUmVzdWx0JyBpbiByZWZlcmVuY2U7XG59XG5cbi8qKlxuICogUGFyc2VzIHRoZSBsaW5rcyBmcm9tIGEgbm90ZSdzIGZyb250bWF0dGVyLiBFYWNoIHN0cmluZyB2YWx1ZSBpcyBwYXJzZWQgdmlhIHtAbGluayBwYXJzZUxpbmtzfTogYSB2YWx1ZVxuICogdGhhdCBpcyBhIHNpbmdsZSBsaW5rIHlpZWxkcyBhbiBlbnRyeSB3aXRob3V0IG9mZnNldHMsIGFuZCBhIHZhbHVlIHRoYXQgaG9sZHMgbXVsdGlwbGUgbGlua3MgeWllbGRzXG4gKiBvZmZzZXQtY2FycnlpbmcgZW50cmllcy4gSW50ZXJuYWwgc2luZ2xlLWxpbmsgdmFsdWVzIGFyZSBvbWl0dGVkLCBhcyBPYnNpZGlhbiBuYXRpdmVseSBjYWNoZXMgdGhlbS5cbiAqXG4gKiBAcGFyYW0gZnJvbnRtYXR0ZXIgLSBUaGUgZnJvbnRtYXR0ZXIgdG8gcGFyc2UgKGEgdmFsdWUsIG9iamVjdCwgb3IgYXJyYXkpLlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBmcm9udG1hdHRlciBsaW5rcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRnJvbnRtYXR0ZXJMaW5rcyhmcm9udG1hdHRlcjogdW5rbm93bik6IFBhcnNlRnJvbnRtYXR0ZXJMaW5rc1Jlc3VsdCB7XG4gIHJldHVybiBuZXcgRnJvbnRtYXR0ZXJMaW5rc1BhcnNlcigpLnBhcnNlKGZyb250bWF0dGVyKTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYSBsaW5rIGludG8gaXRzIGNvbXBvbmVudHMuXG4gKlxuICogQHBhcmFtICRzdHJpbmcgLSBUaGUgbGluayB0byBwYXJzZS5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcnNlIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIGxpbmsuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUxpbmsoJHN0cmluZzogc3RyaW5nLCBvcHRpb25zPzogUGFyc2VMaW5rT3B0aW9ucyk6IG51bGwgfCBQYXJzZUxpbmtSZXN1bHQge1xuICBjb25zdCBsaW5rcyA9IHBhcnNlTGlua3MoJHN0cmluZywgb3B0aW9ucyk7XG4gIHJldHVybiBsaW5rc1swXT8ucmF3ID09PSAkc3RyaW5nID8gbGlua3NbMF0gOiBudWxsO1xufVxuXG4vKipcbiAqIFBhcnNlcyBhbGwgbGlua3MgaW4gYSBzdHJpbmcuXG4gKlxuICogQmVzaWRlcyBtYXJrZG93biBsaW5rcywgd2lraWxpbmtzIGFuZCBhdXRvbGlua3MsIHRoZSBwbGFpbiB0ZXh0IGJldHdlZW4gdGhlbSBpcyBzY2FubmVkIGZvciBiYXJlXG4gKiBVUkxzIHdpdGggYSBzY2hlbWUgKGBodHRwczovL2V4YW1wbGUuY29tYCkgYW5kLCB1bmxlc3MgdHVybmVkIG9mZiB0aHJvdWdoXG4gKiB7QGxpbmsgUGFyc2VMaW5rc09wdGlvbnMuc2hvdWxkUmVjb2duaXplV3d3QXV0b2xpbmtMaXRlcmFsc30sIGZvciBHRk0gZXh0ZW5kZWQgYHd3dy5gIGF1dG9saW5rXG4gKiBsaXRlcmFscyAoYHd3dy5leGFtcGxlLmNvbWApLiBTdWNoIGEgbGl0ZXJhbCBpcyByZXBvcnRlZCBhcyBhbiBleHRlcm5hbCBsaW5rIHdob3NlIGB1cmxgIGNhcnJpZXMgdGhlXG4gKiBgaHR0cDovL2Agc2NoZW1lIE9ic2lkaWFuIG9wZW5zIGl0IHdpdGgsIHNvIGEgbGluayByZWJ1aWx0IGZyb20gaXQgc3RheXMgZXh0ZXJuYWw6IGEgc2NoZW1lLWxlc3NcbiAqIGBbYWxpYXNdKHd3dy5leGFtcGxlLmNvbSlgIGlzIGFuIGludGVybmFsIGxpbmsgaW4gT2JzaWRpYW4uIEEgbGl0ZXJhbCB3cmFwcGVkIGluIGA8Li4uPmAgcmVwb3J0cyB0aGVcbiAqIGJyYWNrZXRzIGFzIHBhcnQgb2YgYHJhd2AsIHNvIHJlcGxhY2luZyBgcmF3YCBsZWF2ZXMgbm8gc3RyYXkgYnJhY2tldCBiZWhpbmQuXG4gKlxuICogQHBhcmFtICRzdHJpbmcgLSBUaGUgc3RyaW5nIHRvIHBhcnNlIHRoZSBsaW5rcyBpbi5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcnNlIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIGxpbmtzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VMaW5rcygkc3RyaW5nOiBzdHJpbmcsIG9wdGlvbnM/OiBQYXJzZUxpbmtzT3B0aW9ucyk6IFBhcnNlTGlua1Jlc3VsdFtdIHtcbiAgY29uc3Qgc2hvdWxkUmVjb2duaXplV3d3QXV0b2xpbmtMaXRlcmFscyA9IG9wdGlvbnM/LnNob3VsZFJlY29nbml6ZVd3d0F1dG9saW5rTGl0ZXJhbHMgPz8gdHJ1ZTtcbiAgY29uc3QgZW1iZWRTeW1ib2xPZmZzZXRzID0gbmV3IFNldDxudW1iZXI+KCk7XG5cbiAgY29uc3QgRU1CRURfTElOS19QUkVGSVggPSAnIVsnO1xuICBjb25zdCBOT19FTUJFRF9MSU5LX1BSRUZJWCA9ICdAWyc7XG4gIGNvbnN0IERVTU1ZX0NIQVJBQ1RFUiA9ICdAJztcblxuICBjb25zdCBFTUJFRF9JTlNJREVfTElOS19SRUdfRVhQID0gL1xcWyg/PExpbmtBbGlhcz4hXFxbLio/XFxdXFwoLis/XFwpKVxcXVxcKCg/PExpbms+Lis/KVxcKS9nO1xuICBjb25zdCBub0luc2lkZUVtYmVkc0xpbmtzU3RyaW5nID0gcmVwbGFjZUFsbCh7XG4gICAgJHN0cmluZyxcbiAgICByZXBsYWNlcjogKHsgY2FwdHVyZWRHcm91cEFyZ3VtZW50czogW2xpbmtBbGlhcyA9ICcnLCBsaW5rID0gJyddIH0pID0+IHtcbiAgICAgIGNvbnN0IGR1bW15QWxpYXMgPSBEVU1NWV9DSEFSQUNURVIucmVwZWF0KGxpbmtBbGlhcy5sZW5ndGgpO1xuICAgICAgcmV0dXJuIGBbJHtkdW1teUFsaWFzfV0oJHtsaW5rfSlgO1xuICAgIH0sXG4gICAgc2VhcmNoVmFsdWU6IEVNQkVEX0lOU0lERV9MSU5LX1JFR19FWFBcbiAgfSk7XG5cbiAgY29uc3Qgbm9FbWJlZFN0cmluZyA9IHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IG5vSW5zaWRlRW1iZWRzTGlua3NTdHJpbmcsXG4gICAgcmVwbGFjZXI6ICgkYXJndW1lbnRzKSA9PiB7XG4gICAgICBlbWJlZFN5bWJvbE9mZnNldHMuYWRkKCRhcmd1bWVudHMub2Zmc2V0KTtcbiAgICAgIHJldHVybiBOT19FTUJFRF9MSU5LX1BSRUZJWDtcbiAgICB9LFxuICAgIHNlYXJjaFZhbHVlOiBFTUJFRF9MSU5LX1BSRUZJWFxuICB9KTtcblxuICBjb25zdCBwcm9jZXNzb3IgPSByZW1hcmsoKS51c2UocmVtYXJrUGFyc2UpLnVzZSh3aWtpTGlua1BsdWdpbiwgeyBhbGlhc0RpdmlkZXI6IFdJS0lMSU5LX0RJVklERVIgfSk7XG4gIGNvbnN0IHJvb3QgPSBwcm9jZXNzb3IucGFyc2Uobm9FbWJlZFN0cmluZyk7XG5cbiAgY29uc3QgbGlua3M6IFBhcnNlTGlua1Jlc3VsdFtdID0gW107XG4gIGNvbnN0IHRleHRMaW5rczogUGFyc2VMaW5rUmVzdWx0W10gPSBbXTtcblxuICB2aXNpdChyb290LCAobm9kZTogTm9kZSkgPT4ge1xuICAgIGxldCBsaW5rOiBQYXJzZUxpbmtSZXN1bHQ7XG4gICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2xpbmsnOiB7XG4gICAgICAgIGxpbmsgPSBwYXJzZUxpbmtOb2RlKG5vZGUgYXMgTGluaywgJHN0cmluZyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnd2lraUxpbmsnOiB7XG4gICAgICAgIGxpbmsgPSBwYXJzZVdpa2lsaW5rTm9kZShub2RlIGFzIFdpa2lMaW5rTm9kZSwgJHN0cmluZyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVtYmVkU3ltYm9sT2Zmc2V0cy5oYXMobGluay5zdGFydE9mZnNldCAtIDEpKSB7XG4gICAgICBsaW5rID0ge1xuICAgICAgICAuLi5saW5rLFxuICAgICAgICBpc0VtYmVkOiB0cnVlLFxuICAgICAgICByYXc6IGAhJHtsaW5rLnJhd31gLFxuICAgICAgICBzdGFydE9mZnNldDogbGluay5zdGFydE9mZnNldCAtIDFcbiAgICAgIH07XG4gICAgfVxuICAgIGxpbmtzLnB1c2gobGluayk7XG4gIH0pO1xuXG4gIGxpbmtzLnNvcnQoKGEsIGIpID0+IGEuc3RhcnRPZmZzZXQgLSBiLnN0YXJ0T2Zmc2V0KTtcblxuICBsZXQgdGV4dFN0YXJ0T2Zmc2V0ID0gMDtcblxuICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3MpIHtcbiAgICBleHRyYWN0VGV4dExpbmtzKHtcbiAgICAgICRzdHJpbmcsXG4gICAgICBlbmRPZmZzZXQ6IGxpbmsuc3RhcnRPZmZzZXQgLSAxLFxuICAgICAgc2hvdWxkUmVjb2duaXplV3d3QXV0b2xpbmtMaXRlcmFscyxcbiAgICAgIHN0YXJ0T2Zmc2V0OiB0ZXh0U3RhcnRPZmZzZXQsXG4gICAgICB0ZXh0TGlua3NcbiAgICB9KTtcbiAgICB0ZXh0U3RhcnRPZmZzZXQgPSBsaW5rLmVuZE9mZnNldCArIDE7XG4gIH1cblxuICBleHRyYWN0VGV4dExpbmtzKHtcbiAgICAkc3RyaW5nLFxuICAgIGVuZE9mZnNldDogJHN0cmluZy5sZW5ndGggLSAxLFxuICAgIHNob3VsZFJlY29nbml6ZVd3d0F1dG9saW5rTGl0ZXJhbHMsXG4gICAgc3RhcnRPZmZzZXQ6IHRleHRTdGFydE9mZnNldCxcbiAgICB0ZXh0TGlua3NcbiAgfSk7XG5cbiAgbGlua3MucHVzaCguLi50ZXh0TGlua3MpO1xuICBsaW5rcy5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0T2Zmc2V0IC0gYi5zdGFydE9mZnNldCk7XG5cbiAgcmV0dXJuIGxpbmtzO1xufVxuXG4vKipcbiAqIFdyYXBzIGEge0BsaW5rIFBhcnNlTGlua1Jlc3VsdH0gaW50byBhIHtAbGluayBQYXJzZUxpbmtSZWZlcmVuY2V9IHNvIGl0IGNhbiBmbG93IHRocm91Z2ggdGhlXG4gKiByZWZlcmVuY2UtYmFzZWQgZmlsZS1jaGFuZ2UgcGlwZWxpbmUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB3cmFwcGluZyB0aGUgcGFyc2VkIGxpbmsuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIFBhcnNlTGlua1JlZmVyZW5jZX0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1BhcnNlTGlua1JlZmVyZW5jZShwYXJhbXM6IFRvUGFyc2VMaW5rUmVmZXJlbmNlUGFyYW1zKTogUGFyc2VMaW5rUmVmZXJlbmNlIHtcbiAgY29uc3QgeyBjb250ZW50LCBwYXJzZUxpbmtSZXN1bHQgfSA9IHBhcmFtcztcbiAgcmV0dXJuIHtcbiAgICAuLi4ocGFyc2VMaW5rUmVzdWx0LmFsaWFzICE9PSB1bmRlZmluZWQgJiYgeyBkaXNwbGF5VGV4dDogcGFyc2VMaW5rUmVzdWx0LmFsaWFzIH0pLFxuICAgIGxpbms6IHBhcnNlTGlua1Jlc3VsdC51cmwsXG4gICAgb3JpZ2luYWw6IHBhcnNlTGlua1Jlc3VsdC5yYXcsXG4gICAgcGFyc2VMaW5rUmVzdWx0LFxuICAgIHBvc2l0aW9uOiB7XG4gICAgICBlbmQ6IG9mZnNldFRvTG9jKGNvbnRlbnQsIHBhcnNlTGlua1Jlc3VsdC5lbmRPZmZzZXQpLFxuICAgICAgc3RhcnQ6IG9mZnNldFRvTG9jKGNvbnRlbnQsIHBhcnNlTGlua1Jlc3VsdC5zdGFydE9mZnNldClcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogVW5lc2NhcGVzIHRoZSBhbGlhcyBvZiBhIG1hcmtkb3duIGxpbmsuXG4gKlxuICogQHBhcmFtIGVzY2FwZWRBbGlhcyAtIEFuIGVzY2FwZWQgYWxpYXMuXG4gKiBAcmV0dXJucyBBbiB1bmVzY2FwZWQgYWxpYXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiB1bmVzY2FwZUFsaWFzKCdcXFxcKlxcXFwqYWxpYXNcXFxcKlxcXFwqJykgLy8gJyoqYWxpYXMqKidcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5lc2NhcGVBbGlhcyhlc2NhcGVkQWxpYXM6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiByZXBsYWNlQWxsKHtcbiAgICAkc3RyaW5nOiBlc2NhcGVkQWxpYXMsXG4gICAgcmVwbGFjZXI6ICh7IGNhcHR1cmVkR3JvdXBBcmd1bWVudHM6IFtiYWNrc2xhc2hlcyA9ICcnLCBzcGVjaWFsQ2hhciA9ICcnXSB9KSA9PiB7XG4gICAgICBjb25zdCBFU0NBUEVEX0JBQ0tTTEFTSF9MRU5HVEggPSAyO1xuICAgICAgY29uc3QgYmFja3NsYXNoQ291bnQgPSBiYWNrc2xhc2hlcy5sZW5ndGg7XG4gICAgICBjb25zdCBrZWVwQ291bnQgPSBNYXRoLmZsb29yKGJhY2tzbGFzaENvdW50IC8gRVNDQVBFRF9CQUNLU0xBU0hfTEVOR1RIKTtcbiAgICAgIHJldHVybiAnXFxcXCcucmVwZWF0KGtlZXBDb3VudCkgKyBzcGVjaWFsQ2hhcjtcbiAgICB9LFxuICAgIHNlYXJjaFZhbHVlOiAvKD88QmFja3NsYXNoZXM+XFxcXCspKD88U3BlY2lhbENoYXJhY3Rlcj5bIVwiIyQlJicoKSorLC0uLzo7PD0+P0BbXFxcXFxcXV5fYHt8fX5dKS9nXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjb3VudE9jY3VycmVuY2VzKCRzdHJpbmc6IHN0cmluZywgY2hhcmFjdGVyOiBzdHJpbmcpOiBudW1iZXIge1xuICByZXR1cm4gJHN0cmluZy5zcGxpdChjaGFyYWN0ZXIpLmxlbmd0aCAtIDE7XG59XG5cbmZ1bmN0aW9uIGRlY29kZVVybFNhZmVseShwYXJhbXM6IERlY29kZVVybFNhZmVseVBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgaGFzQW5nbGVCcmFja2V0cywgaXNFeHRlcm5hbCwgdXJsIH0gPSBwYXJhbXM7XG4gIC8vIGBmaWxlOi8vYCBVUkxzIGFyZSBleHRlcm5hbCwgYnV0IHRoZWlyIHBlcmNlbnQtZW5jb2RpbmcgaXMgcHVyZWx5IGNvc21ldGljLCBzbyBkZWNvZGUgdGhlbSBsaWtlXG4gIC8vIGludGVybmFsIGxpbmtzLiBFdmVyeSBvdGhlciBleHRlcm5hbCBVUkwgaXMgbGVmdCB1bnRvdWNoZWQgKGl0cyBlbmNvZGluZyBtYXkgYmUgc2lnbmlmaWNhbnQpLlxuICBpZiAoKGlzRXh0ZXJuYWwgfHwgaGFzQW5nbGVCcmFja2V0cykgJiYgIWlzRmlsZVVybCh1cmwpKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh1cmwpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBkZWNvZGUgVVJMICR7dXJsfWAsIGVycm9yKTtcbiAgICByZXR1cm4gdXJsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RBbGlhcyhwYXJhbXM6IEV4dHJhY3RBbGlhc1BhcmFtcyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHsgJHN0cmluZywgYWxpYXNFbmRPZmZzZXQsIGFsaWFzU3RhcnRPZmZzZXQgfSA9IHBhcmFtcztcbiAgcmV0dXJuIGFsaWFzU3RhcnRPZmZzZXQgPCBhbGlhc0VuZE9mZnNldFxuICAgID8gJHN0cmluZy5zbGljZShhbGlhc1N0YXJ0T2Zmc2V0LCBhbGlhc0VuZE9mZnNldClcbiAgICA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFRleHRMaW5rcyhwYXJhbXM6IEV4dHJhY3RUZXh0TGlua3NQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgeyAkc3RyaW5nLCBlbmRPZmZzZXQsIHNob3VsZFJlY29nbml6ZVd3d0F1dG9saW5rTGl0ZXJhbHMsIHN0YXJ0T2Zmc2V0LCB0ZXh0TGlua3MgfSA9IHBhcmFtcztcbiAgaWYgKHN0YXJ0T2Zmc2V0ID4gZW5kT2Zmc2V0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgdGV4dFBhcnQgPSAkc3RyaW5nLnNsaWNlKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgKyAxKTtcbiAgY29uc3Qgc2NoZW1lTGlua3M6IFBhcnNlTGlua1Jlc3VsdFtdID0gW107XG4gIHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IHRleHRQYXJ0LFxuICAgIHJlcGxhY2VyOiAoeyBjYXB0dXJlZEdyb3VwQXJndW1lbnRzOiBbcmF3VXJsID0gJyddLCBvZmZzZXQgfSkgPT4ge1xuICAgICAgaWYgKCFpc1VybChyYXdVcmwpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gRGVjb2RlIGJhcmUgYGZpbGU6Ly9gIFVSTHMgbGlrZSB0aGUgYnJhY2tldGVkIHBhdGggKGBwYXJzZUxpbmtOb2RlYCkgZG9lcy5cbiAgICAgIC8vIE9mZnNldHMgYW5kIGByYXdgIHN0YXkgYmFzZWQgb24gdGhlIG9yaWdpbmFsIChwb3NzaWJseSBwZXJjZW50LWVuY29kZWQpIHRleHQuXG4gICAgICBjb25zdCB1cmwgPSBkZWNvZGVVcmxTYWZlbHkoe1xuICAgICAgICBoYXNBbmdsZUJyYWNrZXRzOiBmYWxzZSxcbiAgICAgICAgaXNFeHRlcm5hbDogdHJ1ZSxcbiAgICAgICAgdXJsOiByYXdVcmxcbiAgICAgIH0pO1xuICAgICAgc2NoZW1lTGlua3MucHVzaCh7XG4gICAgICAgIGVuY29kZWRVcmw6IGVuY29kZVVybCh1cmwpLFxuICAgICAgICBlbmRPZmZzZXQ6IHN0YXJ0T2Zmc2V0ICsgb2Zmc2V0ICsgcmF3VXJsLmxlbmd0aCxcbiAgICAgICAgaGFzQW5nbGVCcmFja2V0czogZmFsc2UsXG4gICAgICAgIGlzRW1iZWQ6IGZhbHNlLFxuICAgICAgICBpc0V4dGVybmFsOiB0cnVlLFxuICAgICAgICBpc0ZpbGVVcmw6IGlzRmlsZVVybCh1cmwpLFxuICAgICAgICBpc1dpa2lsaW5rOiBmYWxzZSxcbiAgICAgICAgcmF3OiByYXdVcmwsXG4gICAgICAgIHN0YXJ0T2Zmc2V0OiBzdGFydE9mZnNldCArIG9mZnNldCxcbiAgICAgICAgdXJsXG4gICAgICB9KTtcbiAgICB9LFxuICAgIHNlYXJjaFZhbHVlOiAvKD88VXJsPlxcUyspL2dcbiAgfSk7XG4gIHRleHRMaW5rcy5wdXNoKC4uLnNjaGVtZUxpbmtzKTtcblxuICBpZiAoIXNob3VsZFJlY29nbml6ZVd3d0F1dG9saW5rTGl0ZXJhbHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmb3IgKGNvbnN0IG1hdGNoIG9mIHRleHRQYXJ0Lm1hdGNoQWxsKFdXV19BVVRPTElOS19MSVRFUkFMX0NBTkRJREFURV9SRUdfRVhQKSkge1xuICAgIGNvbnN0IGNhbmRpZGF0ZSA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdMaXRlcmFsJyk7XG4gICAgY29uc3QgbGl0ZXJhbCA9IHRyaW1Xd3dBdXRvbGlua0xpdGVyYWwoY2FuZGlkYXRlKTtcbiAgICBpZiAoIWlzVmFsaWRXd3dBdXRvbGlua0xpdGVyYWwobGl0ZXJhbCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGxpdGVyYWxTdGFydE9mZnNldCA9IHN0YXJ0T2Zmc2V0ICsgbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggLSBjYW5kaWRhdGUubGVuZ3RoO1xuICAgIGNvbnN0IGxpdGVyYWxFbmRPZmZzZXQgPSBsaXRlcmFsU3RhcnRPZmZzZXQgKyBsaXRlcmFsLmxlbmd0aDtcbiAgICBpZiAoc2NoZW1lTGlua3Muc29tZSgobGluaykgPT4gbGluay5zdGFydE9mZnNldCA8IGxpdGVyYWxFbmRPZmZzZXQgJiYgbGl0ZXJhbFN0YXJ0T2Zmc2V0IDwgbGluay5lbmRPZmZzZXQpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBoYXNBbmdsZUJyYWNrZXRzID0gJHN0cmluZ1tsaXRlcmFsU3RhcnRPZmZzZXQgLSAxXSA9PT0gJzwnICYmICRzdHJpbmdbbGl0ZXJhbEVuZE9mZnNldF0gPT09ICc+JztcbiAgICBjb25zdCBsaW5rU3RhcnRPZmZzZXQgPSBoYXNBbmdsZUJyYWNrZXRzID8gbGl0ZXJhbFN0YXJ0T2Zmc2V0IC0gMSA6IGxpdGVyYWxTdGFydE9mZnNldDtcbiAgICBjb25zdCBsaW5rRW5kT2Zmc2V0ID0gaGFzQW5nbGVCcmFja2V0cyA/IGxpdGVyYWxFbmRPZmZzZXQgKyAxIDogbGl0ZXJhbEVuZE9mZnNldDtcbiAgICBjb25zdCB1cmwgPSBXV1dfQVVUT0xJTktfTElURVJBTF9TQ0hFTUUgKyBsaXRlcmFsO1xuICAgIHRleHRMaW5rcy5wdXNoKHtcbiAgICAgIGVuY29kZWRVcmw6IGVuY29kZVVybCh1cmwpLFxuICAgICAgZW5kT2Zmc2V0OiBsaW5rRW5kT2Zmc2V0LFxuICAgICAgaGFzQW5nbGVCcmFja2V0cyxcbiAgICAgIGlzRW1iZWQ6IGZhbHNlLFxuICAgICAgaXNFeHRlcm5hbDogdHJ1ZSxcbiAgICAgIGlzRmlsZVVybDogZmFsc2UsXG4gICAgICBpc1dpa2lsaW5rOiBmYWxzZSxcbiAgICAgIHJhdzogJHN0cmluZy5zbGljZShsaW5rU3RhcnRPZmZzZXQsIGxpbmtFbmRPZmZzZXQpLFxuICAgICAgc3RhcnRPZmZzZXQ6IGxpbmtTdGFydE9mZnNldCxcbiAgICAgIHVybFxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFJhd0xpbmsobm9kZTogTm9kZSwgJHN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcG9zID0gZW5zdXJlTm9uTnVsbGFibGUobm9kZS5wb3NpdGlvbik7XG4gIHJldHVybiAkc3RyaW5nLnNsaWNlKHBvcy5zdGFydC5vZmZzZXQsIHBvcy5lbmQub2Zmc2V0KTtcbn1cblxuZnVuY3Rpb24gaGFzQW5nbGVCcmFja2V0c0luTGluayhwYXJhbXM6IEhhc0FuZ2xlQnJhY2tldHNJbkxpbmtQYXJhbXMpOiBib29sZWFuIHtcbiAgY29uc3QgeyByYXcsIHJhd1VybCB9ID0gcGFyYW1zO1xuICBjb25zdCBPUEVOX0FOR0xFX0JSQUNLRVQgPSAnPCc7XG4gIHJldHVybiByYXcuc3RhcnRzV2l0aChPUEVOX0FOR0xFX0JSQUNLRVQpIHx8IHJhd1VybC5zdGFydHNXaXRoKE9QRU5fQU5HTEVfQlJBQ0tFVCk7XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWRXd3dBdXRvbGlua0xpdGVyYWwobGl0ZXJhbDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGRvbWFpbiA9IFdXV19BVVRPTElOS19MSVRFUkFMX0RPTUFJTl9SRUdfRVhQLmV4ZWMobGl0ZXJhbCk/LlswXTtcbiAgaWYgKGRvbWFpbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gR0ZNOiBubyB1bmRlcnNjb3JlIGluIHRoZSBsYXN0IHR3byBzZWdtZW50cyBvZiB0aGUgZG9tYWluLlxuICBjb25zdCBMQVNUX1NFR01FTlRTX0NPVU5UID0gMjtcbiAgcmV0dXJuIGRvbWFpbi5zcGxpdCgnLicpLnNsaWNlKC1MQVNUX1NFR01FTlRTX0NPVU5UKS5ldmVyeSgoc2VnbWVudCkgPT4gIXNlZ21lbnQuaW5jbHVkZXMoJ18nKSk7XG59XG5cbmZ1bmN0aW9uIG9mZnNldFRvTG9jKGNvbnRlbnQ6IHN0cmluZywgb2Zmc2V0OiBudW1iZXIpOiBMb2Mge1xuICBjb25zdCBwcmVjZWRpbmdDb250ZW50ID0gY29udGVudC5zbGljZSgwLCBvZmZzZXQpO1xuICBjb25zdCBsaW5lID0gKHByZWNlZGluZ0NvbnRlbnQubWF0Y2goL1xcbi9nKSA/PyBbXSkubGVuZ3RoO1xuICBjb25zdCBsYXN0TmV3bGluZU9mZnNldCA9IHByZWNlZGluZ0NvbnRlbnQubGFzdEluZGV4T2YoJ1xcbicpO1xuICByZXR1cm4ge1xuICAgIGNvbDogb2Zmc2V0IC0gKGxhc3ROZXdsaW5lT2Zmc2V0ICsgMSksXG4gICAgbGluZSxcbiAgICBvZmZzZXRcbiAgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VMaW5rTm9kZShub2RlOiBMaW5rLCAkc3RyaW5nOiBzdHJpbmcpOiBQYXJzZUxpbmtSZXN1bHQge1xuICBjb25zdCBMSU5LX0FMSUFTX1NVRkZJWCA9ICddKCc7XG4gIGNvbnN0IExJTktfU1VGRklYID0gJyknO1xuICBjb25zdCByYXcgPSBnZXRSYXdMaW5rKG5vZGUsICRzdHJpbmcpO1xuICBjb25zdCBwb3NpdGlvbiA9IGVuc3VyZU5vbk51bGxhYmxlKG5vZGUucG9zaXRpb24pO1xuICBjb25zdCBub2RlRW5kT2Zmc2V0ID0gZW5zdXJlTm9uTnVsbGFibGUocG9zaXRpb24uZW5kLm9mZnNldCk7XG4gIGNvbnN0IG5vZGVTdGFydE9mZnNldCA9IGVuc3VyZU5vbk51bGxhYmxlKHBvc2l0aW9uLnN0YXJ0Lm9mZnNldCk7XG4gIC8vIEFuIGVtcHR5IGxhYmVsIChgW10oLi4uKWApIGhhcyBubyBjaGlsZHJlbiwgc28gaXQgc3RhcnRzIGFuZCBlbmRzIGp1c3QgYWZ0ZXIgdGhlIG5vZGUncyBvd24gYFtgLiBBbiBlbWJlZCdzIGAhYCBpcyBvdXRzaWRlIHRoZSBub2RlLCBzaW5jZSBgcGFyc2VMaW5rc2AgbWFza3MgaXQgYmVmb3JlIHBhcnNpbmcuXG4gIGNvbnN0IGVtcHR5QWxpYXNPZmZzZXQgPSBub2RlU3RhcnRPZmZzZXQgKyAxO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9iZXR0ZXItZG9tLXRyYXZlcnNpbmcgLS0gYG5vZGVgIGlzIGFuIG1kYXN0IG5vZGUsIG5vdCBhIERPTSBub2RlLiBJdCBoYXMgbm8gYGZpcnN0RWxlbWVudENoaWxkYDsgdGhlIHJ1bGUgbWF0Y2hlcyB0aGUgYC5jaGlsZHJlblswXWAgc2hhcGUgd2l0aG91dCBjaGVja2luZyB3aGF0IGl0IGlzIG9uLlxuICBjb25zdCBhbGlhc05vZGVTdGFydE9mZnNldCA9IG5vZGUuY2hpbGRyZW5bMF0/LnBvc2l0aW9uPy5zdGFydC5vZmZzZXQgPz8gZW1wdHlBbGlhc09mZnNldDtcbiAgY29uc3QgYWxpYXNOb2RlRW5kT2Zmc2V0ID0gbm9kZS5jaGlsZHJlbi5hdCgtMSk/LnBvc2l0aW9uPy5lbmQub2Zmc2V0ID8/IGVtcHR5QWxpYXNPZmZzZXQ7XG4gIGNvbnN0IHJhd1VybCA9ICRzdHJpbmcuc2xpY2UoYWxpYXNOb2RlRW5kT2Zmc2V0ICsgTElOS19BTElBU19TVUZGSVgubGVuZ3RoLCBub2RlRW5kT2Zmc2V0IC0gTElOS19TVUZGSVgubGVuZ3RoKTtcbiAgY29uc3QgaGFzQW5nbGVCcmFja2V0cyA9IGhhc0FuZ2xlQnJhY2tldHNJbkxpbmsoe1xuICAgIHJhdyxcbiAgICByYXdVcmxcbiAgfSk7XG4gIGNvbnN0IGlzRXh0ZXJuYWwgPSBpc1VybChub2RlLnVybCk7XG4gIGNvbnN0IHVybCA9IGRlY29kZVVybFNhZmVseSh7XG4gICAgaGFzQW5nbGVCcmFja2V0cyxcbiAgICBpc0V4dGVybmFsLFxuICAgIHVybDogbm9kZS51cmxcbiAgfSk7XG4gIGNvbnN0IGFsaWFzID0gZXh0cmFjdEFsaWFzKHtcbiAgICAkc3RyaW5nLFxuICAgIGFsaWFzRW5kT2Zmc2V0OiBhbGlhc05vZGVFbmRPZmZzZXQsXG4gICAgYWxpYXNTdGFydE9mZnNldDogYWxpYXNOb2RlU3RhcnRPZmZzZXRcbiAgfSk7XG4gIHJldHVybiBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8UGFyc2VMaW5rUmVzdWx0Pih7XG4gICAgYWxpYXMsXG4gICAgZW5jb2RlZFVybDogaXNFeHRlcm5hbCA/IGVuY29kZVVybCh1cmwpIDogdW5kZWZpbmVkLFxuICAgIGVuZE9mZnNldDogbm9kZUVuZE9mZnNldCxcbiAgICBoYXNBbmdsZUJyYWNrZXRzLFxuICAgIGlzRW1iZWQ6IGZhbHNlLFxuICAgIGlzRXh0ZXJuYWwsXG4gICAgaXNGaWxlVXJsOiBpc0ZpbGVVcmwodXJsKSxcbiAgICBpc1dpa2lsaW5rOiBmYWxzZSxcbiAgICByYXcsXG4gICAgc3RhcnRPZmZzZXQ6IG5vZGVTdGFydE9mZnNldCxcbiAgICB0aXRsZTogbm9kZS50aXRsZSA/PyB1bmRlZmluZWQsXG4gICAgdW5lc2NhcGVkQWxpYXM6IGFsaWFzID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB1bmVzY2FwZUFsaWFzKGFsaWFzKSxcbiAgICB1cmxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2lraWxpbmtOb2RlKG5vZGU6IFdpa2lMaW5rTm9kZSwgJHN0cmluZzogc3RyaW5nKTogUGFyc2VMaW5rUmVzdWx0IHtcbiAgY29uc3QgcG9zaXRpb24gPSBlbnN1cmVOb25OdWxsYWJsZShub2RlLnBvc2l0aW9uKTtcbiAgcmV0dXJuIG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxQYXJzZUxpbmtSZXN1bHQ+KHtcbiAgICBhbGlhczogJHN0cmluZy5pbmNsdWRlcyhXSUtJTElOS19ESVZJREVSKSA/IG5vZGUuZGF0YS5hbGlhcyA6IHVuZGVmaW5lZCxcbiAgICBlbmRPZmZzZXQ6IGVuc3VyZU5vbk51bGxhYmxlKHBvc2l0aW9uLmVuZC5vZmZzZXQpLFxuICAgIGlzRW1iZWQ6IGZhbHNlLFxuICAgIGlzRXh0ZXJuYWw6IGZhbHNlLFxuICAgIGlzRmlsZVVybDogZmFsc2UsXG4gICAgaXNXaWtpbGluazogdHJ1ZSxcbiAgICByYXc6IGdldFJhd0xpbmsobm9kZSwgJHN0cmluZyksXG4gICAgc3RhcnRPZmZzZXQ6IGVuc3VyZU5vbk51bGxhYmxlKHBvc2l0aW9uLnN0YXJ0Lm9mZnNldCksXG4gICAgdXJsOiBub2RlLnZhbHVlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiB0cmltV3d3QXV0b2xpbmtMaXRlcmFsKGxpdGVyYWw6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHRyaW1tZWQgPSB0cmltV3d3QXV0b2xpbmtMaXRlcmFsRW5kKGxpdGVyYWwpO1xuICByZXR1cm4gdHJpbW1lZCA9PT0gbGl0ZXJhbCA/IGxpdGVyYWwgOiB0cmltV3d3QXV0b2xpbmtMaXRlcmFsKHRyaW1tZWQpO1xufVxuXG5mdW5jdGlvbiB0cmltV3d3QXV0b2xpbmtMaXRlcmFsRW5kKGxpdGVyYWw6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGxhc3RDaGFyYWN0ZXIgPSBsaXRlcmFsLnNsaWNlKC0xKTtcbiAgaWYgKFdXV19BVVRPTElOS19MSVRFUkFMX1RSQUlMSU5HX1BVTkNUVUFUSU9OLmhhcyhsYXN0Q2hhcmFjdGVyKSkge1xuICAgIHJldHVybiBsaXRlcmFsLnNsaWNlKDAsIC0xKTtcbiAgfVxuXG4gIC8vIEdGTTogYSBjbG9zaW5nIHBhcmVudGhlc2lzIHdpdGggbm8gb3BlbmluZyBvbmUgdG8gbWF0Y2ggaXMgbm90IHBhcnQgb2YgdGhlIGxpdGVyYWwuXG4gIHJldHVybiBsYXN0Q2hhcmFjdGVyID09PSAnKScgJiYgY291bnRPY2N1cnJlbmNlcyhsaXRlcmFsLCAnKScpID4gY291bnRPY2N1cnJlbmNlcyhsaXRlcmFsLCAnKCcpXG4gICAgPyBsaXRlcmFsLnNsaWNlKDAsIC0xKVxuICAgIDogbGl0ZXJhbC5yZXBsYWNlKFRSQUlMSU5HX0VOVElUWV9SRUZFUkVOQ0VfUkVHX0VYUCwgJycpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBaUJBLDBCQUE0QztBQUM1QyxxQkFBdUM7QUFDdkMsb0JBQTJCO0FBQzNCLHlCQUFrQztBQUNsQyxpQkFJTztBQUNQLDZCQUF1QztBQUN2QyxvQkFBdUI7QUFDdkIsMEJBQXdCO0FBQ3hCLDhCQUErQjtBQUMvQiw4QkFBc0I7QUFLdEIsTUFBTSxzQ0FBc0M7QUFFNUMsTUFBTSxtQkFBbUI7QUFhekIsTUFBTSx5Q0FBeUM7QUFNL0MsTUFBTSxzQ0FBc0M7QUFLNUMsTUFBTSw0Q0FBNEMsb0JBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssR0FBRyxDQUFDO0FBS2xHLE1BQU0sb0NBQW9DO0FBSzFDLE1BQU0sOEJBQThCO0FBMFZwQyxNQUFNLHVCQUF1QjtBQUFBLEVBQ1YsMkJBQTRELENBQUM7QUFBQSxFQUM3RCxxQ0FBaUYsQ0FBQztBQUFBLEVBQ2xGLDZCQUF5RSxDQUFDO0FBQUEsRUFFcEYsTUFBTSxhQUFtRDtBQUM5RCxTQUFLLFdBQVcsYUFBYSxFQUFFO0FBQy9CLFdBQU87QUFBQSxNQUNMLDBCQUEwQixLQUFLO0FBQUEsTUFDL0Isb0NBQW9DLEtBQUs7QUFBQSxNQUN6Qyw0QkFBNEIsS0FBSztBQUFBLElBQ25DO0FBQUEsRUFDRjtBQUFBLEVBRVEsV0FBVyxRQUErQztBQUNoRSxVQUFNLEVBQUUsY0FBYyxLQUFLLGlCQUFp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
|
|
564
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYXJzZS1saW5rLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaGlzIG1vZHVsZSBwcm92aWRlcyB1dGlsaXRpZXMgZm9yIHBhcnNpbmcgbWFya2Rvd24gYW5kIHdpa2kgbGlua3MgaW50byBzdHJ1Y3R1cmVkIGRhdGEsIGFuZCBmb3JcbiAqIGVzY2FwaW5nLCB1bmVzY2FwaW5nLCBhbmQgZW5jb2RpbmcgbGluayBjb21wb25lbnRzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY09iamVjdCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQgdHlwZSB7IExpbmsgfSBmcm9tICdtZGFzdCc7XG5pbXBvcnQgdHlwZSB7XG4gIEZyb250bWF0dGVyTGlua0NhY2hlLFxuICBMb2MsXG4gIFJlZmVyZW5jZSxcbiAgUmVmZXJlbmNlQ2FjaGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBOb2RlIH0gZnJvbSAndW5pc3QnO1xuXG5pbXBvcnQgeyBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXMgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvb2JqZWN0LXV0aWxzJztcbmltcG9ydCB7IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcmVnLWV4cCc7XG5pbXBvcnQgeyByZXBsYWNlQWxsIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQge1xuICBlbmNvZGVVcmwsXG4gIGlzRmlsZVVybCxcbiAgaXNVcmxcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3VybCc7XG5pbXBvcnQgeyBpc0Zyb250bWF0dGVyTGlua0NhY2hlIH0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdC9pbXBsZW1lbnRhdGlvbnMnO1xuaW1wb3J0IHsgcmVtYXJrIH0gZnJvbSAncmVtYXJrJztcbmltcG9ydCByZW1hcmtQYXJzZSBmcm9tICdyZW1hcmstcGFyc2UnO1xuaW1wb3J0IHsgd2lraUxpbmtQbHVnaW4gfSBmcm9tICdyZW1hcmstd2lraS1saW5rJztcbmltcG9ydCB7IHZpc2l0IH0gZnJvbSAndW5pc3QtdXRpbC12aXNpdCc7XG5cbi8qKlxuICogUmVndWxhciBleHByZXNzaW9uIGZvciBzcGVjaWFsIG1hcmtkb3duIGxpbmsgc3ltYm9scy5cbiAqL1xuY29uc3QgU1BFQ0lBTF9NQVJLRE9XTl9MSU5LX1NZTUJPTFNfUkVHRVggPSAvW1xcXFxbXFxdPD5fKn49YCRdL2c7XG5cbmNvbnN0IFdJS0lMSU5LX0RJVklERVIgPSAnfCc7XG5cbi8qKlxuICogTWF0Y2hlcyBhIGNhbmRpZGF0ZSBHRk0gZXh0ZW5kZWQgYHd3dy5gIGF1dG9saW5rIGxpdGVyYWw6IGB3d3cuYCBhdCB0aGUgc3RhcnQgb2YgdGhlIHRleHQgb3IgYWZ0ZXJcbiAqIHdoaXRlc3BhY2UsIGAqYCwgYF9gLCBgfmAsIGAoYCBvciBgPGAsIHJ1bm5pbmcgdXAgdG8gdGhlIG5leHQgd2hpdGVzcGFjZSwgYDxgIG9yIGA+YC4gR0ZNIGl0c2VsZlxuICoga2VlcHMgYSBjbG9zaW5nIGA+YCBpbiB0aGUgbGl0ZXJhbCAoT2JzaWRpYW4gcmVuZGVycyBgPHd3dy5leGFtcGxlLmNvbT5gIHdpdGggYW4gaHJlZiBlbmRpbmcgaW5cbiAqIGAlM0VgKTsgc3RvcHBpbmcgYmVmb3JlIGl0IGlzIGRlbGliZXJhdGUsIHNvIHRoZSBicmFja2V0cyBjYW4gYmUgcmVwb3J0ZWQgYXJvdW5kIHRoZSBsaXRlcmFsIGluc3RlYWQuXG4gKlxuICogVGhlIHByZWNlZGluZyBjaGFyYWN0ZXIgaXMgY29uc3VtZWQgYW5kIHRoZSBsaXRlcmFsIGNhcHR1cmVkIGFzIGBMaXRlcmFsYCwgYmVjYXVzZSBhIGxvb2tiZWhpbmQgaXMgYVxuICogc3ludGF4IGVycm9yIG9uIGlPUyBiZWZvcmUgMTYuNCwgYmVsb3cgdGhlIGlPUyAxNSBPYnNpZGlhbiBtb2JpbGUgc3RpbGwgc3VwcG9ydHMuIENvbnN1bWluZyBpdCBsb3NlcyBub1xuICogY2FuZGlkYXRlOiBhIG1hdGNoIGVuZHMgYmVmb3JlIHdoaXRlc3BhY2UsIGA8YCwgYD5gIG9yIHRoZSBlbmQsIHNvIHRoZSBjaGFyYWN0ZXIgYSBmb2xsb3dpbmcgY2FuZGlkYXRlXG4gKiBuZWVkcyBpcyBuZXZlciBwYXJ0IG9mIHRoZSBwcmV2aW91cyBtYXRjaC5cbiAqL1xuY29uc3QgV1dXX0FVVE9MSU5LX0xJVEVSQUxfQ0FORElEQVRFX1JFR19FWFAgPSAvKD86XnxbXFxzKCo8X35dKSg/PExpdGVyYWw+d3d3XFwuW15cXHM8Pl0qKS9nO1xuXG4vKipcbiAqIE1hdGNoZXMgdGhlIGRvbWFpbiBvZiBhIEdGTSBleHRlbmRlZCBgd3d3LmAgYXV0b2xpbmsgbGl0ZXJhbDogc2VnbWVudHMgb2YgbGV0dGVycywgZGlnaXRzLFxuICogdW5kZXJzY29yZXMgYW5kIGh5cGhlbnMgc2VwYXJhdGVkIGJ5IHBlcmlvZHMuXG4gKi9cbmNvbnN0IFdXV19BVVRPTElOS19MSVRFUkFMX0RPTUFJTl9SRUdfRVhQID0gL153d3coPzpcXC5bXFxwe0x9XFxwe059Xy1dKykrL3U7XG5cbi8qKlxuICogVGhlIGNoYXJhY3RlcnMgR0ZNIGRyb3BzIGZyb20gdGhlIGVuZCBvZiBhbiBleHRlbmRlZCBhdXRvbGluay5cbiAqL1xuY29uc3QgV1dXX0FVVE9MSU5LX0xJVEVSQUxfVFJBSUxJTkdfUFVOQ1RVQVRJT04gPSBuZXcgU2V0KFsnXycsICcsJywgJzonLCAnIScsICc/JywgJy4nLCAnKicsICd+J10pO1xuXG4vKipcbiAqIE1hdGNoZXMgYW4gZW50aXR5IHJlZmVyZW5jZSBhdCB0aGUgZW5kIG9mIGFuIGV4dGVuZGVkIGF1dG9saW5rLCB3aGljaCBHRk0gZHJvcHMuXG4gKi9cbmNvbnN0IFRSQUlMSU5HX0VOVElUWV9SRUZFUkVOQ0VfUkVHX0VYUCA9IC8mW1xcZEEtWmEtel0rOyQvO1xuXG4vKipcbiAqIFRoZSBzY2hlbWUgT2JzaWRpYW4gb3BlbnMgYSBHRk0gZXh0ZW5kZWQgYHd3dy5gIGF1dG9saW5rIGxpdGVyYWwgd2l0aC5cbiAqL1xuY29uc3QgV1dXX0FVVE9MSU5LX0xJVEVSQUxfU0NIRU1FID0gJ2h0dHA6Ly8nO1xuXG4vKipcbiAqIFRoZSByZXN1bHQgb2YgcGFyc2luZyB0aGUgbGlua3MgZnJvbSBhIG5vdGUncyBmcm9udG1hdHRlciB2aWEge0BsaW5rIHBhcnNlRnJvbnRtYXR0ZXJMaW5rc30uIEludGVybmFsXG4gKiBzaW5nbGUtbGluayBmcm9udG1hdHRlciB2YWx1ZXMgYXJlIG9taXR0ZWQsIGFzIE9ic2lkaWFuIG5hdGl2ZWx5IGNhY2hlcyB0aGVtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlRnJvbnRtYXR0ZXJMaW5rc1Jlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgZXh0ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gc2luZ2xlLWxpbmsgKHNpbmdsZS12YWx1ZSkgZnJvbnRtYXR0ZXIgdmFsdWVzLlxuICAgKi9cbiAgcmVhZG9ubHkgZnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzOiBQYXJzZUxpbmtGcm9udG1hdHRlclJlZmVyZW5jZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgZXh0ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gbXVsdGktbGluayAobXVsdGktdmFsdWUpIGZyb250bWF0dGVyIHZhbHVlcy5cbiAgICovXG4gIHJlYWRvbmx5IG11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3M6IFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlV2l0aE9mZnNldHNbXTtcblxuICAvKipcbiAgICogVGhlIGludGVybmFsIGxpbmtzIHBhcnNlZCBmcm9tIG11bHRpLWxpbmsgKG11bHRpLXZhbHVlKSBmcm9udG1hdHRlciB2YWx1ZXMuXG4gICAqL1xuICByZWFkb25seSBtdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5rczogUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2VXaXRoT2Zmc2V0c1tdO1xufVxuXG4vKipcbiAqIEEge0BsaW5rIEZyb250bWF0dGVyTGlua0NhY2hlfSBmb3IgYSBsaW5rIHBhcnNlZCBmcm9tIGEgc2luZ2xlLWxpbmsgZnJvbnRtYXR0ZXIgdmFsdWUgdmlhXG4gKiB7QGxpbmsgcGFyc2VMaW5rc30uIEl0IGNhcnJpZXMgdGhlIGZ1bGwge0BsaW5rIFBhcnNlTGlua1Jlc3VsdH0gc28gY29uc3VtZXJzIGNhbiBpbnNwZWN0IHRoZSBwYXJzZVxuICogZGV0YWlscyB3aXRob3V0IHJlLXBhcnNpbmcgdGhlIGxpbmsuIFVzZSB0aGlzIHdoZW4gdGhlIHdob2xlIGZyb250bWF0dGVyIHZhbHVlIGlzIGEgc2luZ2xlIGxpbmsuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2UgZXh0ZW5kcyBGcm9udG1hdHRlckxpbmtDYWNoZSB7XG4gIC8qKlxuICAgKiBUaGUgcmVzdWx0IG9mIHBhcnNpbmcgdGhlIGxpbmsuXG4gICAqL1xuICByZWFkb25seSBwYXJzZUxpbmtSZXN1bHQ6IFBhcnNlTGlua1Jlc3VsdDtcbn1cblxuLyoqXG4gKiBBIHtAbGluayBQYXJzZUxpbmtGcm9udG1hdHRlclJlZmVyZW5jZX0gZm9yIGEgbGluayBwYXJzZWQgZnJvbSBhIG11bHRpLWxpbmsgZnJvbnRtYXR0ZXIgdmFsdWUgdmlhXG4gKiB7QGxpbmsgcGFyc2VMaW5rc30sIGFkZGl0aW9uYWxseSBjYXJyeWluZyB0aGUgb2Zmc2V0cyBvZiB0aGUgbGluayB3aXRoaW4gdGhlIGZyb250bWF0dGVyIHZhbHVlLiBVc2VcbiAqIHRoaXMgd2hlbiB0aGUgZnJvbnRtYXR0ZXIgdmFsdWUgaG9sZHMgbXVsdGlwbGUgbGlua3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2VXaXRoT2Zmc2V0cyBleHRlbmRzIFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlIHtcbiAgLyoqXG4gICAqIEFuIGVuZCBvZmZzZXQgb2YgdGhlIGxpbmsgaW4gdGhlIGZyb250bWF0dGVyIHZhbHVlLlxuICAgKi9cbiAgZW5kT2Zmc2V0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEEgc3RhcnQgb2Zmc2V0IG9mIHRoZSBsaW5rIGluIHRoZSBmcm9udG1hdHRlciB2YWx1ZS5cbiAgICovXG4gIHN0YXJ0T2Zmc2V0OiBudW1iZXI7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHBhcnNlTGlua30uIFRoZSBzYW1lIGFzIHtAbGluayBQYXJzZUxpbmtzT3B0aW9uc30uXG4gKi9cbmV4cG9ydCB0eXBlIFBhcnNlTGlua09wdGlvbnMgPSBQYXJzZUxpbmtzT3B0aW9ucztcblxuLyoqXG4gKiBBIHtAbGluayBSZWZlcmVuY2VDYWNoZX0gZm9yIGEgbGluayBwYXJzZWQgZnJvbSBjb250ZW50IHZpYSB7QGxpbmsgcGFyc2VMaW5rc30uIEl0IGNhcnJpZXMgdGhlIGZ1bGxcbiAqIHtAbGluayBQYXJzZUxpbmtSZXN1bHR9IHNvIGNvbnN1bWVycyBjYW4gaW5zcGVjdCB0aGUgcGFyc2UgZGV0YWlscyB3aXRob3V0IHJlLXBhcnNpbmcgdGhlIGxpbmsuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VMaW5rUmVmZXJlbmNlIGV4dGVuZHMgUmVmZXJlbmNlQ2FjaGUge1xuICAvKipcbiAgICogVGhlIHJlc3VsdCBvZiBwYXJzaW5nIHRoZSBsaW5rLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyc2VMaW5rUmVzdWx0OiBQYXJzZUxpbmtSZXN1bHQ7XG59XG5cbi8qKlxuICogQSByZXN1bHQgb2YgcGFyc2luZyBhIGxpbmsuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VMaW5rUmVzdWx0IHtcbiAgLyoqXG4gICAqIEFuIGFsaWFzIG9mIHRoZSBsaW5rLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBcbiAgICogW1xcKmFsaWFzXFwqXShsaW5rLm1kKSAtPiBcXCphbGlhc1xcKlxuICAgKiBgYGBcbiAgICovXG4gIHJlYWRvbmx5IGFsaWFzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBlbmNvZGVkIFVSTCBvZiB0aGUgbGluay5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgXG4gICAqIFthbGlhc10oPGxpbmsgd2l0aCBzcGFjZS5tZD4pIC0+IGxpbmslMjB3aXRoJTIwc3BhY2UubWRcbiAgICogYGBgXG4gICAqL1xuICByZWFkb25seSBlbmNvZGVkVXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBlbmQgb2Zmc2V0IG9mIHRoZSBsaW5rIGluIHRoZSBvcmlnaW5hbCB0ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgZW5kT2Zmc2V0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgbGluayBoYXMgYW5nbGUgYnJhY2tldHMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYFxuICAgKiBbYWxpYXNdKDxsaW5rLm1kPikgLT4gdHJ1ZVxuICAgKiBbYWxpYXNdKGxpbmsubWQpIC0+IGZhbHNlXG4gICAqIGBgYFxuICAgKi9cbiAgcmVhZG9ubHkgaGFzQW5nbGVCcmFja2V0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgbGluayBpcyBhbiBlbWJlZCBsaW5rLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBcbiAgICogIVtbYWxpYXNdXSAtPiB0cnVlXG4gICAqIFtbYWxpYXNdXSAtPiBmYWxzZVxuICAgKiBgYGBcbiAgICovXG4gIHJlYWRvbmx5IGlzRW1iZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgbGluayBpcyBleHRlcm5hbC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgXG4gICAqIFthbGlhc10oaHR0cHM6Ly9leGFtcGxlLmNvbSkgLT4gdHJ1ZVxuICAgKiBbYWxpYXNdKGZpbGUubWQpIC0+IGZhbHNlXG4gICAqIGBgYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNFeHRlcm5hbDogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaW5rIGlzIGEgYGZpbGU6Ly9gIFVSTC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgXG4gICAqIFthbGlhc10oZmlsZTovLy9DOi94LnR4dCkgLT4gdHJ1ZVxuICAgKiBbYWxpYXNdKGh0dHBzOi8vZXhhbXBsZS5jb20pIC0+IGZhbHNlXG4gICAqIGBgYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNGaWxlVXJsOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGxpbmsgaXMgYSB3aWtpbGluay5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgXG4gICAqIFtbYWxpYXNdXSAtPiB0cnVlXG4gICAqIFthbGlhc10obGluay5tZCkgLT4gZmFsc2VcbiAgICogYGBgXG4gICAqL1xuICByZWFkb25seSBpc1dpa2lsaW5rOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIHJhdyBsaW5rIHRleHQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYFxuICAgKiBbYWxpYXNdKGxpbmsubWQpIC0+IFthbGlhc10obGluay5tZClcbiAgICogYGBgXG4gICAqL1xuICByZWFkb25seSByYXc6IHN0cmluZztcblxuICAvKipcbiAgICogQSBzdGFydCBvZmZzZXQgb2YgdGhlIGxpbmsgaW4gdGhlIG9yaWdpbmFsIHRleHQuXG4gICAqL1xuICByZWFkb25seSBzdGFydE9mZnNldDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIHRpdGxlIG9mIHRoZSBsaW5rLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBcbiAgICogW2FsaWFzXShsaW5rLm1kIFwidGl0bGVcIikgLT4gdGl0bGVcbiAgICogYGBgXG4gICAqL1xuICByZWFkb25seSB0aXRsZT86IHN0cmluZztcblxuICAvKipcbiAgICogQW4gdW5lc2NhcGVkIGFsaWFzIG9mIHRoZSBsaW5rLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBcbiAgICogW1xcKmFsaWFzXFwqXShsaW5rLm1kKSAtPiAqYWxpYXMqXG4gICAqIGBgYFxuICAgKi9cbiAgcmVhZG9ubHkgdW5lc2NhcGVkQWxpYXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFuIFVSTCBvZiB0aGUgbGluay5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgXG4gICAqIFthbGlhc10obGluayUyMHdpdGglMjBzcGFjZS5tZCkgLT4gbGluayB3aXRoIHNwYWNlLm1kXG4gICAqIGBgYFxuICAgKi9cbiAgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHBhcnNlTGlua3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlTGlua3NPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVjb2duaXplIEdGTSBleHRlbmRlZCBgd3d3LmAgYXV0b2xpbmsgbGl0ZXJhbHMgKGB3d3cuZXhhbXBsZS5jb21gLCBhbHNvIGluc2lkZVxuICAgKiBgPC4uLj5gKSBhcyBleHRlcm5hbCBsaW5rcywgYXMgT2JzaWRpYW4gZG9lcyBpbiBhIG5vdGUncyBib2R5LiBPYnNpZGlhbiBkb2VzIG5vdCBsaW5rIHRoZW0gaW5cbiAgICogZnJvbnRtYXR0ZXIgdmFsdWVzLCBzbyB7QGxpbmsgcGFyc2VGcm9udG1hdHRlckxpbmtzfSB0dXJucyB0aGlzIG9mZi5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUmVjb2duaXplV3d3QXV0b2xpbmtMaXRlcmFscz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgdG9QYXJzZUxpbmtSZWZlcmVuY2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvUGFyc2VMaW5rUmVmZXJlbmNlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IHRoZSBwYXJzZWQgbGluaydzIG9mZnNldHMgaW5kZXggaW50by4gVXNlZCB0byBjb21wdXRlIHRoZSBsaW5lIGFuZCBjb2x1bW4uXG4gICAqL1xuICByZWFkb25seSBjb250ZW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJzZWQgbGluayB0byB3cmFwLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyc2VMaW5rUmVzdWx0OiBQYXJzZUxpbmtSZXN1bHQ7XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgRnJvbnRtYXR0ZXJMaW5rc1BhcnNlci5jYXRlZ29yaXplfS5cbiAqL1xuaW50ZXJmYWNlIENhdGVnb3JpemVGcm9udG1hdHRlckxpbmtQYXJhbXMge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgd2hvbGUgZnJvbnRtYXR0ZXIgdmFsdWUgaXMgYSBzaW5nbGUgbGluay5cbiAgICovXG4gIHJlYWRvbmx5IGlzU2luZ2xlTGluazogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGtleSBwYXRoIG9mIHRoZSBmcm9udG1hdHRlciB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyc2VkIGxpbmsuXG4gICAqL1xuICByZWFkb25seSBwYXJzZUxpbmtSZXN1bHQ6IFBhcnNlTGlua1Jlc3VsdDtcblxuICAvKipcbiAgICogVGhlIGZyb250bWF0dGVyIHZhbHVlIHRoZSBsaW5rIHdhcyBwYXJzZWQgZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgZGVjb2RlVXJsU2FmZWx5fS5cbiAqL1xuaW50ZXJmYWNlIERlY29kZVVybFNhZmVseVBhcmFtcyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBsaW5rIHVzZXMgYW5nbGUgYnJhY2tldHMuXG4gICAqL1xuICByZWFkb25seSBoYXNBbmdsZUJyYWNrZXRzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBsaW5rIGlzIGV4dGVybmFsLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNFeHRlcm5hbDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBVUkwgdG8gZGVjb2RlLlxuICAgKi9cbiAgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgZXh0cmFjdEFsaWFzfS5cbiAqL1xuaW50ZXJmYWNlIEV4dHJhY3RBbGlhc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBBIHN0cmluZyB0byBleHRyYWN0IHRoZSBhbGlhcyBmcm9tLlxuICAgKi9cbiAgcmVhZG9ubHkgJHN0cmluZzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBlbmQgb2Zmc2V0IG9mIHRoZSBhbGlhcyBpbiB0aGUgc3RyaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgYWxpYXNFbmRPZmZzZXQ6IG51bWJlcjtcblxuICAvKipcbiAgICogQSBzdGFydCBvZmZzZXQgb2YgdGhlIGFsaWFzIGluIHRoZSBzdHJpbmcuXG4gICAqL1xuICByZWFkb25seSBhbGlhc1N0YXJ0T2Zmc2V0OiBudW1iZXI7XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgZXh0cmFjdFRleHRMaW5rc30uXG4gKi9cbmludGVyZmFjZSBFeHRyYWN0VGV4dExpbmtzUGFyYW1zIHtcbiAgLyoqXG4gICAqIEEgc3RyaW5nIHRvIGV4dHJhY3QgdGhlIHRleHQgbGlua3MgZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5ICRzdHJpbmc6IHN0cmluZztcblxuICAvKipcbiAgICogQW4gZW5kIG9mZnNldCBvZiB0aGUgdGV4dCBwYXJ0IGluIHRoZSBzdHJpbmcuXG4gICAqL1xuICByZWFkb25seSBlbmRPZmZzZXQ6IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZWNvZ25pemUgR0ZNIGV4dGVuZGVkIGB3d3cuYCBhdXRvbGluayBsaXRlcmFscy5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFJlY29nbml6ZVd3d0F1dG9saW5rTGl0ZXJhbHM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgc3RhcnQgb2Zmc2V0IG9mIHRoZSB0ZXh0IHBhcnQgaW4gdGhlIHN0cmluZy5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0T2Zmc2V0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBwYXJzZWQgbGlua3MgdG8gYXBwZW5kIHRoZSBleHRyYWN0ZWQgdGV4dCBsaW5rcyB0by5cbiAgICovXG4gIHJlYWRvbmx5IHRleHRMaW5rczogUGFyc2VMaW5rUmVzdWx0W107XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgZ2V0V2hvbGVWYWx1ZUxpbmt9LlxuICovXG5pbnRlcmZhY2UgR2V0V2hvbGVWYWx1ZUxpbmtQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGxpbmtzIHtAbGluayBwYXJzZUxpbmtzfSBmb3VuZCBpbiB0aGUgdmFsdWUuXG4gICAqL1xuICByZWFkb25seSBsaW5rczogcmVhZG9ubHkgUGFyc2VMaW5rUmVzdWx0W107XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJzZSBvcHRpb25zIHRoZSBsaW5rcyB3ZXJlIGZvdW5kIHdpdGguXG4gICAqL1xuICByZWFkb25seSBvcHRpb25zOiBQYXJzZUxpbmtzT3B0aW9ucyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHZhbHVlIHRvIHJlYWQgYXMgb25lIGxpbmsuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtcyBmb3Ige0BsaW5rIGhhc0FuZ2xlQnJhY2tldHNJbkxpbmt9LlxuICovXG5pbnRlcmZhY2UgSGFzQW5nbGVCcmFja2V0c0luTGlua1BhcmFtcyB7XG4gIC8qKlxuICAgKiBBIHJhdyBsaW5rIHRleHQuXG4gICAqL1xuICByZWFkb25seSByYXc6IHN0cmluZztcblxuICAvKipcbiAgICogQSByYXcgVVJMIG9mIHRoZSBsaW5rLlxuICAgKi9cbiAgcmVhZG9ubHkgcmF3VXJsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgd2lkZW5Ub1dob2xlVmFsdWV9LlxuICovXG5pbnRlcmZhY2UgV2lkZW5Ub1dob2xlVmFsdWVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG9mZnNldCBvZiB0aGUgYF0oYCB0aGF0IGVuZHMgdGhlIGNhcHRpb24uXG4gICAqL1xuICByZWFkb25seSBjYXB0aW9uRW5kT2Zmc2V0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBsaW5rIGZvdW5kIGF0IHRoZSBlbmQgb2YgdGhlIHZhbHVlLlxuICAgKi9cbiAgcmVhZG9ubHkgbGluazogUGFyc2VMaW5rUmVzdWx0O1xuXG4gIC8qKlxuICAgKiBUaGUgd2hvbGUgdmFsdWUuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgV2lraUxpbmtOb2RlIGV4dGVuZHMgTm9kZSB7XG4gIGRhdGE6IFdpa2lMaW5rTm9kZURhdGE7XG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBXaWtpTGlua05vZGVEYXRhIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBhbGlhczogc3RyaW5nO1xufVxuXG5jbGFzcyBGcm9udG1hdHRlckxpbmtzUGFyc2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBmcm9udG1hdHRlckV4dGVybmFsTGlua3M6IFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBtdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzOiBQYXJzZUxpbmtGcm9udG1hdHRlclJlZmVyZW5jZVdpdGhPZmZzZXRzW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBtdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5rczogUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2VXaXRoT2Zmc2V0c1tdID0gW107XG5cbiAgcHVibGljIHBhcnNlKGZyb250bWF0dGVyOiB1bmtub3duKTogUGFyc2VGcm9udG1hdHRlckxpbmtzUmVzdWx0IHtcbiAgICB0aGlzLnBhcnNlVmFsdWUoZnJvbnRtYXR0ZXIsICcnKTtcbiAgICByZXR1cm4ge1xuICAgICAgZnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzOiB0aGlzLmZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcyxcbiAgICAgIG11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3M6IHRoaXMubXVsdGlWYWx1ZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcyxcbiAgICAgIG11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzOiB0aGlzLm11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY2F0ZWdvcml6ZShwYXJhbXM6IENhdGVnb3JpemVGcm9udG1hdHRlckxpbmtQYXJhbXMpOiB2b2lkIHtcbiAgICBjb25zdCB7IGlzU2luZ2xlTGluaywga2V5LCBwYXJzZUxpbmtSZXN1bHQsIHZhbHVlIH0gPSBwYXJhbXM7XG4gICAgaWYgKCFwYXJzZUxpbmtSZXN1bHQuaXNFeHRlcm5hbCAmJiBpc1NpbmdsZUxpbmspIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZWZlcmVuY2U6IFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlID0ge1xuICAgICAgZGlzcGxheVRleHQ6IHBhcnNlTGlua1Jlc3VsdC5hbGlhcyA/PyBwYXJzZUxpbmtSZXN1bHQudXJsLFxuICAgICAga2V5LFxuICAgICAgbGluazogcGFyc2VMaW5rUmVzdWx0LnVybCxcbiAgICAgIG9yaWdpbmFsOiB2YWx1ZSxcbiAgICAgIHBhcnNlTGlua1Jlc3VsdFxuICAgIH07XG5cbiAgICBpZiAoaXNTaW5nbGVMaW5rKSB7XG4gICAgICB0aGlzLmZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcy5wdXNoKHJlZmVyZW5jZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVmZXJlbmNlV2l0aE9mZnNldHM6IFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlV2l0aE9mZnNldHMgPSB7XG4gICAgICAuLi5yZWZlcmVuY2UsXG4gICAgICBlbmRPZmZzZXQ6IHBhcnNlTGlua1Jlc3VsdC5lbmRPZmZzZXQsXG4gICAgICBzdGFydE9mZnNldDogcGFyc2VMaW5rUmVzdWx0LnN0YXJ0T2Zmc2V0XG4gICAgfTtcblxuICAgIGlmIChwYXJzZUxpbmtSZXN1bHQuaXNFeHRlcm5hbCkge1xuICAgICAgdGhpcy5tdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzLnB1c2gocmVmZXJlbmNlV2l0aE9mZnNldHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzLnB1c2gocmVmZXJlbmNlV2l0aE9mZnNldHMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VWYWx1ZSh2YWx1ZTogdW5rbm93biwga2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gT2JzaWRpYW4gbGlua3MgYSBzY2hlbWUtbGVzcyBgd3d3LmAgbGl0ZXJhbCBpbiB0aGUgYm9keSBvbmx5LCBuZXZlciBpbiBhIGZyb250bWF0dGVyIHZhbHVlLlxuICAgICAgY29uc3Qgb3B0aW9uczogUGFyc2VMaW5rc09wdGlvbnMgPSB7IHNob3VsZFJlY29nbml6ZVd3d0F1dG9saW5rTGl0ZXJhbHM6IGZhbHNlIH07XG4gICAgICBjb25zdCBwYXJzZUxpbmtSZXN1bHRzID0gcGFyc2VMaW5rcyh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICBjb25zdCB3aG9sZVZhbHVlTGluayA9IGdldFdob2xlVmFsdWVMaW5rKHsgbGlua3M6IHBhcnNlTGlua1Jlc3VsdHMsIG9wdGlvbnMsIHZhbHVlIH0pO1xuICAgICAgaWYgKHdob2xlVmFsdWVMaW5rKSB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcml6ZSh7IGlzU2luZ2xlTGluazogdHJ1ZSwga2V5LCBwYXJzZUxpbmtSZXN1bHQ6IHdob2xlVmFsdWVMaW5rLCB2YWx1ZSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHBhcnNlTGlua1Jlc3VsdCBvZiBwYXJzZUxpbmtSZXN1bHRzKSB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcml6ZSh7IGlzU2luZ2xlTGluazogZmFsc2UsIGtleSwgcGFyc2VMaW5rUmVzdWx0LCB2YWx1ZSB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2NoaWxkS2V5LCBjaGlsZFZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSBhcyBHZW5lcmljT2JqZWN0KSkge1xuICAgICAgdGhpcy5wYXJzZVZhbHVlKGNoaWxkVmFsdWUsIGtleSA/IGAke2tleX0uJHtjaGlsZEtleX1gIDogY2hpbGRLZXkpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEVzY2FwZXMgdGhlIGFsaWFzIG9mIGEgbWFya2Rvd24gbGluay5cbiAqXG4gKiBAcGFyYW0gYWxpYXMgLSBBbiBhbGlhcyBvZiBhIG1hcmtkb3duIGxpbmsuXG4gKiBAcmV0dXJucyBBbiBlc2NhcGVkIGFsaWFzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogZXNjYXBlQWxpYXMoJyoqYWxpYXMqKicpIC8vICdcXFxcKlxcXFwqYWxpYXNcXFxcKlxcXFwqJ1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVBbGlhcyhhbGlhczogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IGFsaWFzLFxuICAgIHJlcGxhY2VyOiBTdHJpbmcucmF3YFxcJCZgLFxuICAgIHNlYXJjaFZhbHVlOiBTUEVDSUFMX01BUktET1dOX0xJTktfU1lNQk9MU19SRUdFWFxuICB9KTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSByZWZlcmVuY2UgaXMgYSB7QGxpbmsgUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2V9LlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2UgLSBUaGUgcmVmZXJlbmNlIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSByZWZlcmVuY2UgaXMgYSB7QGxpbmsgUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2V9LCBvdGhlcndpc2UgYGZhbHNlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2UocmVmZXJlbmNlOiBSZWZlcmVuY2UpOiByZWZlcmVuY2UgaXMgUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2Uge1xuICByZXR1cm4gaXNGcm9udG1hdHRlckxpbmtDYWNoZShyZWZlcmVuY2UpICYmICdwYXJzZUxpbmtSZXN1bHQnIGluIHJlZmVyZW5jZTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSByZWZlcmVuY2UgaXMgYSB7QGxpbmsgUGFyc2VMaW5rUmVmZXJlbmNlfS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgcmVmZXJlbmNlIGlzIGEge0BsaW5rIFBhcnNlTGlua1JlZmVyZW5jZX0sIG90aGVyd2lzZSBgZmFsc2VgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXJzZUxpbmtSZWZlcmVuY2UocmVmZXJlbmNlOiBSZWZlcmVuY2UpOiByZWZlcmVuY2UgaXMgUGFyc2VMaW5rUmVmZXJlbmNlIHtcbiAgcmV0dXJuICdwYXJzZUxpbmtSZXN1bHQnIGluIHJlZmVyZW5jZTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIGxpbmtzIGZyb20gYSBub3RlJ3MgZnJvbnRtYXR0ZXIuIEVhY2ggc3RyaW5nIHZhbHVlIGlzIHBhcnNlZCB2aWEge0BsaW5rIHBhcnNlTGlua3N9OiBhIHZhbHVlXG4gKiB0aGF0IGlzIGEgc2luZ2xlIGxpbmsgeWllbGRzIGFuIGVudHJ5IHdpdGhvdXQgb2Zmc2V0cywgYW5kIGEgdmFsdWUgdGhhdCBob2xkcyBtdWx0aXBsZSBsaW5rcyB5aWVsZHNcbiAqIG9mZnNldC1jYXJyeWluZyBlbnRyaWVzLiBBIHZhbHVlIGlzIGEgc2luZ2xlIGxpbmsgdGhlIHdheSBPYnNpZGlhbiByZWFkcyBpdCwgc28gYFtBIFsgQl0odC5tZClgIGlzIG9uZVxuICogbGluayBjYXB0aW9uZWQgYEEgWyBCYCAoc2VlIHtAbGluayBwYXJzZUxpbmt9KS4gSW50ZXJuYWwgc2luZ2xlLWxpbmsgdmFsdWVzIGFyZSBvbWl0dGVkLCBhcyBPYnNpZGlhbiBuYXRpdmVseSBjYWNoZXMgdGhlbS5cbiAqXG4gKiBAcGFyYW0gZnJvbnRtYXR0ZXIgLSBUaGUgZnJvbnRtYXR0ZXIgdG8gcGFyc2UgKGEgdmFsdWUsIG9iamVjdCwgb3IgYXJyYXkpLlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBmcm9udG1hdHRlciBsaW5rcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRnJvbnRtYXR0ZXJMaW5rcyhmcm9udG1hdHRlcjogdW5rbm93bik6IFBhcnNlRnJvbnRtYXR0ZXJMaW5rc1Jlc3VsdCB7XG4gIHJldHVybiBuZXcgRnJvbnRtYXR0ZXJMaW5rc1BhcnNlcigpLnBhcnNlKGZyb250bWF0dGVyKTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYSBsaW5rIGludG8gaXRzIGNvbXBvbmVudHMuXG4gKlxuICogQSBzdHJpbmcgdGhhdCBzdGFydHMgd2l0aCBgW2AgYW5kIGVuZHMgd2l0aCBhIG1hcmtkb3duIGxpbmsgaXMgcmVhZCBhcyBPTkUgbGluayB3aG9zZSBjYXB0aW9uIHJ1bnNcbiAqIGZyb20gdGhlIGxlYWRpbmcgYFtgIHRvIHRoYXQgbGluaydzIGBdKGAsIHRoZSB3YXkgT2JzaWRpYW4gcmVhZHMgYSBmcm9udG1hdHRlciB2YWx1ZTogYFtBIFsgQl0odC5tZClgXG4gKiBoYXMgdGhlIGFsaWFzIGBBIFsgQmAsIHdoZXJlIENvbW1vbk1hcmsgZmluZHMgb25seSBgWyBCXSh0Lm1kKWAuXG4gKlxuICogQHBhcmFtICRzdHJpbmcgLSBUaGUgbGluayB0byBwYXJzZS5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcnNlIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIGxpbmsuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUxpbmsoJHN0cmluZzogc3RyaW5nLCBvcHRpb25zPzogUGFyc2VMaW5rT3B0aW9ucyk6IG51bGwgfCBQYXJzZUxpbmtSZXN1bHQge1xuICByZXR1cm4gZ2V0V2hvbGVWYWx1ZUxpbmsoeyBsaW5rczogcGFyc2VMaW5rcygkc3RyaW5nLCBvcHRpb25zKSwgb3B0aW9ucywgdmFsdWU6ICRzdHJpbmcgfSk7XG59XG5cbi8qKlxuICogUGFyc2VzIGFsbCBsaW5rcyBpbiBhIHN0cmluZy5cbiAqXG4gKiBCZXNpZGVzIG1hcmtkb3duIGxpbmtzLCB3aWtpbGlua3MgYW5kIGF1dG9saW5rcywgdGhlIHBsYWluIHRleHQgYmV0d2VlbiB0aGVtIGlzIHNjYW5uZWQgZm9yIGJhcmVcbiAqIFVSTHMgd2l0aCBhIHNjaGVtZSAoYGh0dHBzOi8vZXhhbXBsZS5jb21gKSBhbmQsIHVubGVzcyB0dXJuZWQgb2ZmIHRocm91Z2hcbiAqIHtAbGluayBQYXJzZUxpbmtzT3B0aW9ucy5zaG91bGRSZWNvZ25pemVXd3dBdXRvbGlua0xpdGVyYWxzfSwgZm9yIEdGTSBleHRlbmRlZCBgd3d3LmAgYXV0b2xpbmtcbiAqIGxpdGVyYWxzIChgd3d3LmV4YW1wbGUuY29tYCkuIFN1Y2ggYSBsaXRlcmFsIGlzIHJlcG9ydGVkIGFzIGFuIGV4dGVybmFsIGxpbmsgd2hvc2UgYHVybGAgY2FycmllcyB0aGVcbiAqIGBodHRwOi8vYCBzY2hlbWUgT2JzaWRpYW4gb3BlbnMgaXQgd2l0aCwgc28gYSBsaW5rIHJlYnVpbHQgZnJvbSBpdCBzdGF5cyBleHRlcm5hbDogYSBzY2hlbWUtbGVzc1xuICogYFthbGlhc10od3d3LmV4YW1wbGUuY29tKWAgaXMgYW4gaW50ZXJuYWwgbGluayBpbiBPYnNpZGlhbi4gQSBsaXRlcmFsIHdyYXBwZWQgaW4gYDwuLi4+YCByZXBvcnRzIHRoZVxuICogYnJhY2tldHMgYXMgcGFydCBvZiBgcmF3YCwgc28gcmVwbGFjaW5nIGByYXdgIGxlYXZlcyBubyBzdHJheSBicmFja2V0IGJlaGluZC5cbiAqXG4gKiBAcGFyYW0gJHN0cmluZyAtIFRoZSBzdHJpbmcgdG8gcGFyc2UgdGhlIGxpbmtzIGluLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyc2Ugb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgbGlua3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUxpbmtzKCRzdHJpbmc6IHN0cmluZywgb3B0aW9ucz86IFBhcnNlTGlua3NPcHRpb25zKTogUGFyc2VMaW5rUmVzdWx0W10ge1xuICBjb25zdCBzaG91bGRSZWNvZ25pemVXd3dBdXRvbGlua0xpdGVyYWxzID0gb3B0aW9ucz8uc2hvdWxkUmVjb2duaXplV3d3QXV0b2xpbmtMaXRlcmFscyA/PyB0cnVlO1xuICBjb25zdCBlbWJlZFN5bWJvbE9mZnNldHMgPSBuZXcgU2V0PG51bWJlcj4oKTtcblxuICBjb25zdCBFTUJFRF9MSU5LX1BSRUZJWCA9ICchWyc7XG4gIGNvbnN0IE5PX0VNQkVEX0xJTktfUFJFRklYID0gJ0BbJztcbiAgY29uc3QgRFVNTVlfQ0hBUkFDVEVSID0gJ0AnO1xuXG4gIGNvbnN0IEVNQkVEX0lOU0lERV9MSU5LX1JFR19FWFAgPSAvXFxbKD88TGlua0FsaWFzPiFcXFsuKj9cXF1cXCguKz9cXCkpXFxdXFwoKD88TGluaz4uKz8pXFwpL2c7XG4gIGNvbnN0IG5vSW5zaWRlRW1iZWRzTGlua3NTdHJpbmcgPSByZXBsYWNlQWxsKHtcbiAgICAkc3RyaW5nLFxuICAgIHJlcGxhY2VyOiAoeyBjYXB0dXJlZEdyb3VwQXJndW1lbnRzOiBbbGlua0FsaWFzID0gJycsIGxpbmsgPSAnJ10gfSkgPT4ge1xuICAgICAgY29uc3QgZHVtbXlBbGlhcyA9IERVTU1ZX0NIQVJBQ1RFUi5yZXBlYXQobGlua0FsaWFzLmxlbmd0aCk7XG4gICAgICByZXR1cm4gYFske2R1bW15QWxpYXN9XSgke2xpbmt9KWA7XG4gICAgfSxcbiAgICBzZWFyY2hWYWx1ZTogRU1CRURfSU5TSURFX0xJTktfUkVHX0VYUFxuICB9KTtcblxuICBjb25zdCBub0VtYmVkU3RyaW5nID0gcmVwbGFjZUFsbCh7XG4gICAgJHN0cmluZzogbm9JbnNpZGVFbWJlZHNMaW5rc1N0cmluZyxcbiAgICByZXBsYWNlcjogKCRhcmd1bWVudHMpID0+IHtcbiAgICAgIGVtYmVkU3ltYm9sT2Zmc2V0cy5hZGQoJGFyZ3VtZW50cy5vZmZzZXQpO1xuICAgICAgcmV0dXJuIE5PX0VNQkVEX0xJTktfUFJFRklYO1xuICAgIH0sXG4gICAgc2VhcmNoVmFsdWU6IEVNQkVEX0xJTktfUFJFRklYXG4gIH0pO1xuXG4gIGNvbnN0IHByb2Nlc3NvciA9IHJlbWFyaygpLnVzZShyZW1hcmtQYXJzZSkudXNlKHdpa2lMaW5rUGx1Z2luLCB7IGFsaWFzRGl2aWRlcjogV0lLSUxJTktfRElWSURFUiB9KTtcbiAgY29uc3Qgcm9vdCA9IHByb2Nlc3Nvci5wYXJzZShub0VtYmVkU3RyaW5nKTtcblxuICBjb25zdCBsaW5rczogUGFyc2VMaW5rUmVzdWx0W10gPSBbXTtcbiAgY29uc3QgdGV4dExpbmtzOiBQYXJzZUxpbmtSZXN1bHRbXSA9IFtdO1xuXG4gIHZpc2l0KHJvb3QsIChub2RlOiBOb2RlKSA9PiB7XG4gICAgbGV0IGxpbms6IFBhcnNlTGlua1Jlc3VsdDtcbiAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgY2FzZSAnbGluayc6IHtcbiAgICAgICAgbGluayA9IHBhcnNlTGlua05vZGUobm9kZSBhcyBMaW5rLCAkc3RyaW5nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICd3aWtpTGluayc6IHtcbiAgICAgICAgbGluayA9IHBhcnNlV2lraWxpbmtOb2RlKG5vZGUgYXMgV2lraUxpbmtOb2RlLCAkc3RyaW5nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW1iZWRTeW1ib2xPZmZzZXRzLmhhcyhsaW5rLnN0YXJ0T2Zmc2V0IC0gMSkpIHtcbiAgICAgIGxpbmsgPSB7XG4gICAgICAgIC4uLmxpbmssXG4gICAgICAgIGlzRW1iZWQ6IHRydWUsXG4gICAgICAgIHJhdzogYCEke2xpbmsucmF3fWAsXG4gICAgICAgIHN0YXJ0T2Zmc2V0OiBsaW5rLnN0YXJ0T2Zmc2V0IC0gMVxuICAgICAgfTtcbiAgICB9XG4gICAgbGlua3MucHVzaChsaW5rKTtcbiAgfSk7XG5cbiAgbGlua3Muc29ydCgoYSwgYikgPT4gYS5zdGFydE9mZnNldCAtIGIuc3RhcnRPZmZzZXQpO1xuXG4gIGxldCB0ZXh0U3RhcnRPZmZzZXQgPSAwO1xuXG4gIGZvciAoY29uc3QgbGluayBvZiBsaW5rcykge1xuICAgIGV4dHJhY3RUZXh0TGlua3Moe1xuICAgICAgJHN0cmluZyxcbiAgICAgIGVuZE9mZnNldDogbGluay5zdGFydE9mZnNldCAtIDEsXG4gICAgICBzaG91bGRSZWNvZ25pemVXd3dBdXRvbGlua0xpdGVyYWxzLFxuICAgICAgc3RhcnRPZmZzZXQ6IHRleHRTdGFydE9mZnNldCxcbiAgICAgIHRleHRMaW5rc1xuICAgIH0pO1xuICAgIHRleHRTdGFydE9mZnNldCA9IGxpbmsuZW5kT2Zmc2V0ICsgMTtcbiAgfVxuXG4gIGV4dHJhY3RUZXh0TGlua3Moe1xuICAgICRzdHJpbmcsXG4gICAgZW5kT2Zmc2V0OiAkc3RyaW5nLmxlbmd0aCAtIDEsXG4gICAgc2hvdWxkUmVjb2duaXplV3d3QXV0b2xpbmtMaXRlcmFscyxcbiAgICBzdGFydE9mZnNldDogdGV4dFN0YXJ0T2Zmc2V0LFxuICAgIHRleHRMaW5rc1xuICB9KTtcblxuICBsaW5rcy5wdXNoKC4uLnRleHRMaW5rcyk7XG4gIGxpbmtzLnNvcnQoKGEsIGIpID0+IGEuc3RhcnRPZmZzZXQgLSBiLnN0YXJ0T2Zmc2V0KTtcblxuICByZXR1cm4gbGlua3M7XG59XG5cbi8qKlxuICogV3JhcHMgYSB7QGxpbmsgUGFyc2VMaW5rUmVzdWx0fSBpbnRvIGEge0BsaW5rIFBhcnNlTGlua1JlZmVyZW5jZX0gc28gaXQgY2FuIGZsb3cgdGhyb3VnaCB0aGVcbiAqIHJlZmVyZW5jZS1iYXNlZCBmaWxlLWNoYW5nZSBwaXBlbGluZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHdyYXBwaW5nIHRoZSBwYXJzZWQgbGluay5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgUGFyc2VMaW5rUmVmZXJlbmNlfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvUGFyc2VMaW5rUmVmZXJlbmNlKHBhcmFtczogVG9QYXJzZUxpbmtSZWZlcmVuY2VQYXJhbXMpOiBQYXJzZUxpbmtSZWZlcmVuY2Uge1xuICBjb25zdCB7IGNvbnRlbnQsIHBhcnNlTGlua1Jlc3VsdCB9ID0gcGFyYW1zO1xuICByZXR1cm4ge1xuICAgIC4uLihwYXJzZUxpbmtSZXN1bHQuYWxpYXMgIT09IHVuZGVmaW5lZCAmJiB7IGRpc3BsYXlUZXh0OiBwYXJzZUxpbmtSZXN1bHQuYWxpYXMgfSksXG4gICAgbGluazogcGFyc2VMaW5rUmVzdWx0LnVybCxcbiAgICBvcmlnaW5hbDogcGFyc2VMaW5rUmVzdWx0LnJhdyxcbiAgICBwYXJzZUxpbmtSZXN1bHQsXG4gICAgcG9zaXRpb246IHtcbiAgICAgIGVuZDogb2Zmc2V0VG9Mb2MoY29udGVudCwgcGFyc2VMaW5rUmVzdWx0LmVuZE9mZnNldCksXG4gICAgICBzdGFydDogb2Zmc2V0VG9Mb2MoY29udGVudCwgcGFyc2VMaW5rUmVzdWx0LnN0YXJ0T2Zmc2V0KVxuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBVbmVzY2FwZXMgdGhlIGFsaWFzIG9mIGEgbWFya2Rvd24gbGluay5cbiAqXG4gKiBAcGFyYW0gZXNjYXBlZEFsaWFzIC0gQW4gZXNjYXBlZCBhbGlhcy5cbiAqIEByZXR1cm5zIEFuIHVuZXNjYXBlZCBhbGlhcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIHVuZXNjYXBlQWxpYXMoJ1xcXFwqXFxcXCphbGlhc1xcXFwqXFxcXConKSAvLyAnKiphbGlhcyoqJ1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmVzY2FwZUFsaWFzKGVzY2FwZWRBbGlhczogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IGVzY2FwZWRBbGlhcyxcbiAgICByZXBsYWNlcjogKHsgY2FwdHVyZWRHcm91cEFyZ3VtZW50czogW2JhY2tzbGFzaGVzID0gJycsIHNwZWNpYWxDaGFyID0gJyddIH0pID0+IHtcbiAgICAgIGNvbnN0IEVTQ0FQRURfQkFDS1NMQVNIX0xFTkdUSCA9IDI7XG4gICAgICBjb25zdCBiYWNrc2xhc2hDb3VudCA9IGJhY2tzbGFzaGVzLmxlbmd0aDtcbiAgICAgIGNvbnN0IGtlZXBDb3VudCA9IE1hdGguZmxvb3IoYmFja3NsYXNoQ291bnQgLyBFU0NBUEVEX0JBQ0tTTEFTSF9MRU5HVEgpO1xuICAgICAgcmV0dXJuICdcXFxcJy5yZXBlYXQoa2VlcENvdW50KSArIHNwZWNpYWxDaGFyO1xuICAgIH0sXG4gICAgc2VhcmNoVmFsdWU6IC8oPzxCYWNrc2xhc2hlcz5cXFxcKykoPzxTcGVjaWFsQ2hhcmFjdGVyPlshXCIjJCUmJygpKissLS4vOjs8PT4/QFtcXFxcXFxdXl9ge3x9fl0pL2dcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNvdW50T2NjdXJyZW5jZXMoJHN0cmluZzogc3RyaW5nLCBjaGFyYWN0ZXI6IHN0cmluZyk6IG51bWJlciB7XG4gIHJldHVybiAkc3RyaW5nLnNwbGl0KGNoYXJhY3RlcikubGVuZ3RoIC0gMTtcbn1cblxuZnVuY3Rpb24gZGVjb2RlVXJsU2FmZWx5KHBhcmFtczogRGVjb2RlVXJsU2FmZWx5UGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3QgeyBoYXNBbmdsZUJyYWNrZXRzLCBpc0V4dGVybmFsLCB1cmwgfSA9IHBhcmFtcztcbiAgLy8gYGZpbGU6Ly9gIFVSTHMgYXJlIGV4dGVybmFsLCBidXQgdGhlaXIgcGVyY2VudC1lbmNvZGluZyBpcyBwdXJlbHkgY29zbWV0aWMsIHNvIGRlY29kZSB0aGVtIGxpa2VcbiAgLy8gaW50ZXJuYWwgbGlua3MuIEV2ZXJ5IG90aGVyIGV4dGVybmFsIFVSTCBpcyBsZWZ0IHVudG91Y2hlZCAoaXRzIGVuY29kaW5nIG1heSBiZSBzaWduaWZpY2FudCkuXG4gIGlmICgoaXNFeHRlcm5hbCB8fCBoYXNBbmdsZUJyYWNrZXRzKSAmJiAhaXNGaWxlVXJsKHVybCkpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHVybCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGRlY29kZSBVUkwgJHt1cmx9YCwgZXJyb3IpO1xuICAgIHJldHVybiB1cmw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdEFsaWFzKHBhcmFtczogRXh0cmFjdEFsaWFzUGFyYW1zKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgeyAkc3RyaW5nLCBhbGlhc0VuZE9mZnNldCwgYWxpYXNTdGFydE9mZnNldCB9ID0gcGFyYW1zO1xuICByZXR1cm4gYWxpYXNTdGFydE9mZnNldCA8IGFsaWFzRW5kT2Zmc2V0XG4gICAgPyAkc3RyaW5nLnNsaWNlKGFsaWFzU3RhcnRPZmZzZXQsIGFsaWFzRW5kT2Zmc2V0KVxuICAgIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0VGV4dExpbmtzKHBhcmFtczogRXh0cmFjdFRleHRMaW5rc1BhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7ICRzdHJpbmcsIGVuZE9mZnNldCwgc2hvdWxkUmVjb2duaXplV3d3QXV0b2xpbmtMaXRlcmFscywgc3RhcnRPZmZzZXQsIHRleHRMaW5rcyB9ID0gcGFyYW1zO1xuICBpZiAoc3RhcnRPZmZzZXQgPiBlbmRPZmZzZXQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB0ZXh0UGFydCA9ICRzdHJpbmcuc2xpY2Uoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCArIDEpO1xuICBjb25zdCBzY2hlbWVMaW5rczogUGFyc2VMaW5rUmVzdWx0W10gPSBbXTtcbiAgcmVwbGFjZUFsbCh7XG4gICAgJHN0cmluZzogdGV4dFBhcnQsXG4gICAgcmVwbGFjZXI6ICh7IGNhcHR1cmVkR3JvdXBBcmd1bWVudHM6IFtyYXdVcmwgPSAnJ10sIG9mZnNldCB9KSA9PiB7XG4gICAgICBpZiAoIWlzVXJsKHJhd1VybCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBEZWNvZGUgYmFyZSBgZmlsZTovL2AgVVJMcyBsaWtlIHRoZSBicmFja2V0ZWQgcGF0aCAoYHBhcnNlTGlua05vZGVgKSBkb2VzLlxuICAgICAgLy8gT2Zmc2V0cyBhbmQgYHJhd2Agc3RheSBiYXNlZCBvbiB0aGUgb3JpZ2luYWwgKHBvc3NpYmx5IHBlcmNlbnQtZW5jb2RlZCkgdGV4dC5cbiAgICAgIGNvbnN0IHVybCA9IGRlY29kZVVybFNhZmVseSh7XG4gICAgICAgIGhhc0FuZ2xlQnJhY2tldHM6IGZhbHNlLFxuICAgICAgICBpc0V4dGVybmFsOiB0cnVlLFxuICAgICAgICB1cmw6IHJhd1VybFxuICAgICAgfSk7XG4gICAgICBzY2hlbWVMaW5rcy5wdXNoKHtcbiAgICAgICAgZW5jb2RlZFVybDogZW5jb2RlVXJsKHVybCksXG4gICAgICAgIGVuZE9mZnNldDogc3RhcnRPZmZzZXQgKyBvZmZzZXQgKyByYXdVcmwubGVuZ3RoLFxuICAgICAgICBoYXNBbmdsZUJyYWNrZXRzOiBmYWxzZSxcbiAgICAgICAgaXNFbWJlZDogZmFsc2UsXG4gICAgICAgIGlzRXh0ZXJuYWw6IHRydWUsXG4gICAgICAgIGlzRmlsZVVybDogaXNGaWxlVXJsKHVybCksXG4gICAgICAgIGlzV2lraWxpbms6IGZhbHNlLFxuICAgICAgICByYXc6IHJhd1VybCxcbiAgICAgICAgc3RhcnRPZmZzZXQ6IHN0YXJ0T2Zmc2V0ICsgb2Zmc2V0LFxuICAgICAgICB1cmxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgc2VhcmNoVmFsdWU6IC8oPzxVcmw+XFxTKykvZ1xuICB9KTtcbiAgdGV4dExpbmtzLnB1c2goLi4uc2NoZW1lTGlua3MpO1xuXG4gIGlmICghc2hvdWxkUmVjb2duaXplV3d3QXV0b2xpbmtMaXRlcmFscykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgdGV4dFBhcnQubWF0Y2hBbGwoV1dXX0FVVE9MSU5LX0xJVEVSQUxfQ0FORElEQVRFX1JFR19FWFApKSB7XG4gICAgY29uc3QgY2FuZGlkYXRlID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ0xpdGVyYWwnKTtcbiAgICBjb25zdCBsaXRlcmFsID0gdHJpbVd3d0F1dG9saW5rTGl0ZXJhbChjYW5kaWRhdGUpO1xuICAgIGlmICghaXNWYWxpZFd3d0F1dG9saW5rTGl0ZXJhbChsaXRlcmFsKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgbGl0ZXJhbFN0YXJ0T2Zmc2V0ID0gc3RhcnRPZmZzZXQgKyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCAtIGNhbmRpZGF0ZS5sZW5ndGg7XG4gICAgY29uc3QgbGl0ZXJhbEVuZE9mZnNldCA9IGxpdGVyYWxTdGFydE9mZnNldCArIGxpdGVyYWwubGVuZ3RoO1xuICAgIGlmIChzY2hlbWVMaW5rcy5zb21lKChsaW5rKSA9PiBsaW5rLnN0YXJ0T2Zmc2V0IDwgbGl0ZXJhbEVuZE9mZnNldCAmJiBsaXRlcmFsU3RhcnRPZmZzZXQgPCBsaW5rLmVuZE9mZnNldCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc0FuZ2xlQnJhY2tldHMgPSAkc3RyaW5nW2xpdGVyYWxTdGFydE9mZnNldCAtIDFdID09PSAnPCcgJiYgJHN0cmluZ1tsaXRlcmFsRW5kT2Zmc2V0XSA9PT0gJz4nO1xuICAgIGNvbnN0IGxpbmtTdGFydE9mZnNldCA9IGhhc0FuZ2xlQnJhY2tldHMgPyBsaXRlcmFsU3RhcnRPZmZzZXQgLSAxIDogbGl0ZXJhbFN0YXJ0T2Zmc2V0O1xuICAgIGNvbnN0IGxpbmtFbmRPZmZzZXQgPSBoYXNBbmdsZUJyYWNrZXRzID8gbGl0ZXJhbEVuZE9mZnNldCArIDEgOiBsaXRlcmFsRW5kT2Zmc2V0O1xuICAgIGNvbnN0IHVybCA9IFdXV19BVVRPTElOS19MSVRFUkFMX1NDSEVNRSArIGxpdGVyYWw7XG4gICAgdGV4dExpbmtzLnB1c2goe1xuICAgICAgZW5jb2RlZFVybDogZW5jb2RlVXJsKHVybCksXG4gICAgICBlbmRPZmZzZXQ6IGxpbmtFbmRPZmZzZXQsXG4gICAgICBoYXNBbmdsZUJyYWNrZXRzLFxuICAgICAgaXNFbWJlZDogZmFsc2UsXG4gICAgICBpc0V4dGVybmFsOiB0cnVlLFxuICAgICAgaXNGaWxlVXJsOiBmYWxzZSxcbiAgICAgIGlzV2lraWxpbms6IGZhbHNlLFxuICAgICAgcmF3OiAkc3RyaW5nLnNsaWNlKGxpbmtTdGFydE9mZnNldCwgbGlua0VuZE9mZnNldCksXG4gICAgICBzdGFydE9mZnNldDogbGlua1N0YXJ0T2Zmc2V0LFxuICAgICAgdXJsXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UmF3TGluayhub2RlOiBOb2RlLCAkc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwb3MgPSBlbnN1cmVOb25OdWxsYWJsZShub2RlLnBvc2l0aW9uKTtcbiAgcmV0dXJuICRzdHJpbmcuc2xpY2UocG9zLnN0YXJ0Lm9mZnNldCwgcG9zLmVuZC5vZmZzZXQpO1xufVxuXG4vKipcbiAqIFJlYWRzIGEgd2hvbGUgdmFsdWUgYXMgb25lIGxpbmssIGFzIE9ic2lkaWFuIHJlYWRzIGEgZnJvbnRtYXR0ZXIgdmFsdWUuIE9ic2lkaWFuIHRha2VzIGEgdmFsdWUgdGhhdFxuICogc3RhcnRzIHdpdGggYFtgIGFuZCBlbmRzIHdpdGggYF0odXJsKWAgYXMgYSBzaW5nbGUgbGluayBjYXB0aW9uZWQgYnkgZXZlcnl0aGluZyBpbiBiZXR3ZWVuLCBzbyBhIGNhcHRpb25cbiAqIGhvbGRpbmcgYW4gdW5iYWxhbmNlZCBicmFja2V0IChgW0EgWyBCXSh0Lm1kKWAsIGBbYV0gW2JdKGMubWQpYCwgYFthXWJdKGMubWQpYCkgaXMgc3RpbGwgb25lIGxpbmtcbiAqIHRoZXJlLCB3aGVyZSBDb21tb25NYXJrIGZpbmRzIGEgc2hvcnRlciBsaW5rIGF0IHRoZSBpbm5lciBgW2AsIG9yIG5vbmUgYXQgYWxsLiBBIHZhbHVlIENvbW1vbk1hcmsgcmVhZHNcbiAqIGFzIHR3byBvciBtb3JlIGxpbmtzIHN0YXlzIG11bHRpLWxpbmssIGJlY2F1c2Ugd2hhdCBPYnNpZGlhbiBtYWtlcyBvZiB0aG9zZSBpcyBnYXJiYWdlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgdmFsdWUgYW5kIGl0cyBsaW5rcy5cbiAqIEByZXR1cm5zIFRoZSBsaW5rIHNwYW5uaW5nIHRoZSB3aG9sZSB2YWx1ZSwgb3IgYG51bGxgIGlmIHRoZSB2YWx1ZSBpcyBub3QgYSBzaW5nbGUgbGluay5cbiAqL1xuZnVuY3Rpb24gZ2V0V2hvbGVWYWx1ZUxpbmsocGFyYW1zOiBHZXRXaG9sZVZhbHVlTGlua1BhcmFtcyk6IG51bGwgfCBQYXJzZUxpbmtSZXN1bHQge1xuICBjb25zdCB7IGxpbmtzLCBvcHRpb25zLCB2YWx1ZSB9ID0gcGFyYW1zO1xuICBjb25zdCBbZmlyc3RMaW5rXSA9IGxpbmtzO1xuICBpZiAobGlua3MubGVuZ3RoID09PSAxICYmIGZpcnN0TGluaz8ucmF3ID09PSB2YWx1ZSkge1xuICAgIHJldHVybiBmaXJzdExpbms7XG4gIH1cblxuICBpZiAoIXZhbHVlLnN0YXJ0c1dpdGgoJ1snKSB8fCBsaW5rcy5sZW5ndGggPiAxKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoZmlyc3RMaW5rKSB7XG4gICAgLy8gT25seSBhIG1hcmtkb3duIGxpbmsgd2lkZW5zOiBhIHdpa2lsaW5rLCBhbiBlbWJlZCwgYSBiYXJlIFVSTCBvciBhbiBhdXRvbGluayBkb2VzIG5vdC5cbiAgICBpZiAoZmlyc3RMaW5rLmlzV2lraWxpbmsgfHwgIWZpcnN0TGluay5yYXcuc3RhcnRzV2l0aCgnWycpIHx8IGZpcnN0TGluay5lbmRPZmZzZXQgIT09IHZhbHVlLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdpZGVuVG9XaG9sZVZhbHVlKHtcbiAgICAgIGNhcHRpb25FbmRPZmZzZXQ6IGZpcnN0TGluay5zdGFydE9mZnNldCArIDEgKyAoZmlyc3RMaW5rLmFsaWFzPy5sZW5ndGggPz8gMCksXG4gICAgICBsaW5rOiBmaXJzdExpbmssXG4gICAgICB2YWx1ZVxuICAgIH0pO1xuICB9XG5cbiAgLy8gTm8gbGluayBhdCBhbGwsIGFzIGluIGBbYV1iXShjLm1kKWA6IGhpZGUgdGhlIGNhcHRpb24ncyBicmFja2V0cyBzbyBDb21tb25NYXJrIHNlZXMgb25lIGxpbmsuXG4gIGNvbnN0IGNhcHRpb25FbmRPZmZzZXQgPSB2YWx1ZS5sYXN0SW5kZXhPZignXSgnKTtcbiAgaWYgKGNhcHRpb25FbmRPZmZzZXQgPT09IC0xKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBtYXNrZWRWYWx1ZSA9IGBbJHt2YWx1ZS5zbGljZSgxLCBjYXB0aW9uRW5kT2Zmc2V0KS5yZXBsYWNlQWxsKC9bW1xcXV0vZywgJ0AnKX0ke3ZhbHVlLnNsaWNlKGNhcHRpb25FbmRPZmZzZXQpfWA7XG4gIGNvbnN0IG1hc2tlZExpbmtzID0gcGFyc2VMaW5rcyhtYXNrZWRWYWx1ZSwgb3B0aW9ucyk7XG4gIGNvbnN0IFttYXNrZWRMaW5rXSA9IG1hc2tlZExpbmtzO1xuICByZXR1cm4gbWFza2VkTGlua3MubGVuZ3RoID09PSAxICYmIG1hc2tlZExpbms/LnJhdyA9PT0gbWFza2VkVmFsdWVcbiAgICA/IHdpZGVuVG9XaG9sZVZhbHVlKHsgY2FwdGlvbkVuZE9mZnNldCwgbGluazogbWFza2VkTGluaywgdmFsdWUgfSlcbiAgICA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGhhc0FuZ2xlQnJhY2tldHNJbkxpbmsocGFyYW1zOiBIYXNBbmdsZUJyYWNrZXRzSW5MaW5rUGFyYW1zKTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgcmF3LCByYXdVcmwgfSA9IHBhcmFtcztcbiAgY29uc3QgT1BFTl9BTkdMRV9CUkFDS0VUID0gJzwnO1xuICByZXR1cm4gcmF3LnN0YXJ0c1dpdGgoT1BFTl9BTkdMRV9CUkFDS0VUKSB8fCByYXdVcmwuc3RhcnRzV2l0aChPUEVOX0FOR0xFX0JSQUNLRVQpO1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkV3d3QXV0b2xpbmtMaXRlcmFsKGxpdGVyYWw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBkb21haW4gPSBXV1dfQVVUT0xJTktfTElURVJBTF9ET01BSU5fUkVHX0VYUC5leGVjKGxpdGVyYWwpPy5bMF07XG4gIGlmIChkb21haW4gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEdGTTogbm8gdW5kZXJzY29yZSBpbiB0aGUgbGFzdCB0d28gc2VnbWVudHMgb2YgdGhlIGRvbWFpbi5cbiAgY29uc3QgTEFTVF9TRUdNRU5UU19DT1VOVCA9IDI7XG4gIHJldHVybiBkb21haW4uc3BsaXQoJy4nKS5zbGljZSgtTEFTVF9TRUdNRU5UU19DT1VOVCkuZXZlcnkoKHNlZ21lbnQpID0+ICFzZWdtZW50LmluY2x1ZGVzKCdfJykpO1xufVxuXG5mdW5jdGlvbiBvZmZzZXRUb0xvYyhjb250ZW50OiBzdHJpbmcsIG9mZnNldDogbnVtYmVyKTogTG9jIHtcbiAgY29uc3QgcHJlY2VkaW5nQ29udGVudCA9IGNvbnRlbnQuc2xpY2UoMCwgb2Zmc2V0KTtcbiAgY29uc3QgbGluZSA9IChwcmVjZWRpbmdDb250ZW50Lm1hdGNoKC9cXG4vZykgPz8gW10pLmxlbmd0aDtcbiAgY29uc3QgbGFzdE5ld2xpbmVPZmZzZXQgPSBwcmVjZWRpbmdDb250ZW50Lmxhc3RJbmRleE9mKCdcXG4nKTtcbiAgcmV0dXJuIHtcbiAgICBjb2w6IG9mZnNldCAtIChsYXN0TmV3bGluZU9mZnNldCArIDEpLFxuICAgIGxpbmUsXG4gICAgb2Zmc2V0XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlTGlua05vZGUobm9kZTogTGluaywgJHN0cmluZzogc3RyaW5nKTogUGFyc2VMaW5rUmVzdWx0IHtcbiAgY29uc3QgTElOS19BTElBU19TVUZGSVggPSAnXSgnO1xuICBjb25zdCBMSU5LX1NVRkZJWCA9ICcpJztcbiAgY29uc3QgcmF3ID0gZ2V0UmF3TGluayhub2RlLCAkc3RyaW5nKTtcbiAgY29uc3QgcG9zaXRpb24gPSBlbnN1cmVOb25OdWxsYWJsZShub2RlLnBvc2l0aW9uKTtcbiAgY29uc3Qgbm9kZUVuZE9mZnNldCA9IGVuc3VyZU5vbk51bGxhYmxlKHBvc2l0aW9uLmVuZC5vZmZzZXQpO1xuICBjb25zdCBub2RlU3RhcnRPZmZzZXQgPSBlbnN1cmVOb25OdWxsYWJsZShwb3NpdGlvbi5zdGFydC5vZmZzZXQpO1xuICAvLyBBbiBlbXB0eSBsYWJlbCAoYFtdKC4uLilgKSBoYXMgbm8gY2hpbGRyZW4sIHNvIGl0IHN0YXJ0cyBhbmQgZW5kcyBqdXN0IGFmdGVyIHRoZSBub2RlJ3Mgb3duIGBbYC4gQW4gZW1iZWQncyBgIWAgaXMgb3V0c2lkZSB0aGUgbm9kZSwgc2luY2UgYHBhcnNlTGlua3NgIG1hc2tzIGl0IGJlZm9yZSBwYXJzaW5nLlxuICBjb25zdCBlbXB0eUFsaWFzT2Zmc2V0ID0gbm9kZVN0YXJ0T2Zmc2V0ICsgMTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vYmV0dGVyLWRvbS10cmF2ZXJzaW5nIC0tIGBub2RlYCBpcyBhbiBtZGFzdCBub2RlLCBub3QgYSBET00gbm9kZS4gSXQgaGFzIG5vIGBmaXJzdEVsZW1lbnRDaGlsZGA7IHRoZSBydWxlIG1hdGNoZXMgdGhlIGAuY2hpbGRyZW5bMF1gIHNoYXBlIHdpdGhvdXQgY2hlY2tpbmcgd2hhdCBpdCBpcyBvbi5cbiAgY29uc3QgYWxpYXNOb2RlU3RhcnRPZmZzZXQgPSBub2RlLmNoaWxkcmVuWzBdPy5wb3NpdGlvbj8uc3RhcnQub2Zmc2V0ID8/IGVtcHR5QWxpYXNPZmZzZXQ7XG4gIGNvbnN0IGFsaWFzTm9kZUVuZE9mZnNldCA9IG5vZGUuY2hpbGRyZW4uYXQoLTEpPy5wb3NpdGlvbj8uZW5kLm9mZnNldCA/PyBlbXB0eUFsaWFzT2Zmc2V0O1xuICBjb25zdCByYXdVcmwgPSAkc3RyaW5nLnNsaWNlKGFsaWFzTm9kZUVuZE9mZnNldCArIExJTktfQUxJQVNfU1VGRklYLmxlbmd0aCwgbm9kZUVuZE9mZnNldCAtIExJTktfU1VGRklYLmxlbmd0aCk7XG4gIGNvbnN0IGhhc0FuZ2xlQnJhY2tldHMgPSBoYXNBbmdsZUJyYWNrZXRzSW5MaW5rKHtcbiAgICByYXcsXG4gICAgcmF3VXJsXG4gIH0pO1xuICBjb25zdCBpc0V4dGVybmFsID0gaXNVcmwobm9kZS51cmwpO1xuICBjb25zdCB1cmwgPSBkZWNvZGVVcmxTYWZlbHkoe1xuICAgIGhhc0FuZ2xlQnJhY2tldHMsXG4gICAgaXNFeHRlcm5hbCxcbiAgICB1cmw6IG5vZGUudXJsXG4gIH0pO1xuICBjb25zdCBhbGlhcyA9IGV4dHJhY3RBbGlhcyh7XG4gICAgJHN0cmluZyxcbiAgICBhbGlhc0VuZE9mZnNldDogYWxpYXNOb2RlRW5kT2Zmc2V0LFxuICAgIGFsaWFzU3RhcnRPZmZzZXQ6IGFsaWFzTm9kZVN0YXJ0T2Zmc2V0XG4gIH0pO1xuICByZXR1cm4gbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFBhcnNlTGlua1Jlc3VsdD4oe1xuICAgIGFsaWFzLFxuICAgIGVuY29kZWRVcmw6IGlzRXh0ZXJuYWwgPyBlbmNvZGVVcmwodXJsKSA6IHVuZGVmaW5lZCxcbiAgICBlbmRPZmZzZXQ6IG5vZGVFbmRPZmZzZXQsXG4gICAgaGFzQW5nbGVCcmFja2V0cyxcbiAgICBpc0VtYmVkOiBmYWxzZSxcbiAgICBpc0V4dGVybmFsLFxuICAgIGlzRmlsZVVybDogaXNGaWxlVXJsKHVybCksXG4gICAgaXNXaWtpbGluazogZmFsc2UsXG4gICAgcmF3LFxuICAgIHN0YXJ0T2Zmc2V0OiBub2RlU3RhcnRPZmZzZXQsXG4gICAgdGl0bGU6IG5vZGUudGl0bGUgPz8gdW5kZWZpbmVkLFxuICAgIHVuZXNjYXBlZEFsaWFzOiBhbGlhcyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdW5lc2NhcGVBbGlhcyhhbGlhcyksXG4gICAgdXJsXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdpa2lsaW5rTm9kZShub2RlOiBXaWtpTGlua05vZGUsICRzdHJpbmc6IHN0cmluZyk6IFBhcnNlTGlua1Jlc3VsdCB7XG4gIGNvbnN0IHBvc2l0aW9uID0gZW5zdXJlTm9uTnVsbGFibGUobm9kZS5wb3NpdGlvbik7XG4gIHJldHVybiBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8UGFyc2VMaW5rUmVzdWx0Pih7XG4gICAgYWxpYXM6ICRzdHJpbmcuaW5jbHVkZXMoV0lLSUxJTktfRElWSURFUikgPyBub2RlLmRhdGEuYWxpYXMgOiB1bmRlZmluZWQsXG4gICAgZW5kT2Zmc2V0OiBlbnN1cmVOb25OdWxsYWJsZShwb3NpdGlvbi5lbmQub2Zmc2V0KSxcbiAgICBpc0VtYmVkOiBmYWxzZSxcbiAgICBpc0V4dGVybmFsOiBmYWxzZSxcbiAgICBpc0ZpbGVVcmw6IGZhbHNlLFxuICAgIGlzV2lraWxpbms6IHRydWUsXG4gICAgcmF3OiBnZXRSYXdMaW5rKG5vZGUsICRzdHJpbmcpLFxuICAgIHN0YXJ0T2Zmc2V0OiBlbnN1cmVOb25OdWxsYWJsZShwb3NpdGlvbi5zdGFydC5vZmZzZXQpLFxuICAgIHVybDogbm9kZS52YWx1ZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gdHJpbVd3d0F1dG9saW5rTGl0ZXJhbChsaXRlcmFsOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB0cmltbWVkID0gdHJpbVd3d0F1dG9saW5rTGl0ZXJhbEVuZChsaXRlcmFsKTtcbiAgcmV0dXJuIHRyaW1tZWQgPT09IGxpdGVyYWwgPyBsaXRlcmFsIDogdHJpbVd3d0F1dG9saW5rTGl0ZXJhbCh0cmltbWVkKTtcbn1cblxuZnVuY3Rpb24gdHJpbVd3d0F1dG9saW5rTGl0ZXJhbEVuZChsaXRlcmFsOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBsYXN0Q2hhcmFjdGVyID0gbGl0ZXJhbC5zbGljZSgtMSk7XG4gIGlmIChXV1dfQVVUT0xJTktfTElURVJBTF9UUkFJTElOR19QVU5DVFVBVElPTi5oYXMobGFzdENoYXJhY3RlcikpIHtcbiAgICByZXR1cm4gbGl0ZXJhbC5zbGljZSgwLCAtMSk7XG4gIH1cblxuICAvLyBHRk06IGEgY2xvc2luZyBwYXJlbnRoZXNpcyB3aXRoIG5vIG9wZW5pbmcgb25lIHRvIG1hdGNoIGlzIG5vdCBwYXJ0IG9mIHRoZSBsaXRlcmFsLlxuICByZXR1cm4gbGFzdENoYXJhY3RlciA9PT0gJyknICYmIGNvdW50T2NjdXJyZW5jZXMobGl0ZXJhbCwgJyknKSA+IGNvdW50T2NjdXJyZW5jZXMobGl0ZXJhbCwgJygnKVxuICAgID8gbGl0ZXJhbC5zbGljZSgwLCAtMSlcbiAgICA6IGxpdGVyYWwucmVwbGFjZShUUkFJTElOR19FTlRJVFlfUkVGRVJFTkNFX1JFR19FWFAsICcnKTtcbn1cblxuZnVuY3Rpb24gd2lkZW5Ub1dob2xlVmFsdWUocGFyYW1zOiBXaWRlblRvV2hvbGVWYWx1ZVBhcmFtcyk6IFBhcnNlTGlua1Jlc3VsdCB7XG4gIGNvbnN0IHsgY2FwdGlvbkVuZE9mZnNldCwgbGluaywgdmFsdWUgfSA9IHBhcmFtcztcbiAgLy8gTmV2ZXIgZW1wdHk6IGEgdmFsdWUgd2hvc2UgY2FwdGlvbiBpcyBlbXB0eSwgYFtdKHVybClgLCBpcyBhIGxpbmsgQ29tbW9uTWFyayBhbHJlYWR5IHNwYW5zIHdob2xlLlxuICBjb25zdCBhbGlhcyA9IHZhbHVlLnNsaWNlKDEsIGNhcHRpb25FbmRPZmZzZXQpO1xuICByZXR1cm4ge1xuICAgIC4uLmxpbmssXG4gICAgYWxpYXMsXG4gICAgZW5kT2Zmc2V0OiB2YWx1ZS5sZW5ndGgsXG4gICAgcmF3OiB2YWx1ZSxcbiAgICBzdGFydE9mZnNldDogMCxcbiAgICB1bmVzY2FwZWRBbGlhczogdW5lc2NhcGVBbGlhcyhhbGlhcylcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWlCQSwwQkFBNEM7QUFDNUMscUJBQXVDO0FBQ3ZDLG9CQUEyQjtBQUMzQix5QkFBa0M7QUFDbEMsaUJBSU87QUFDUCw2QkFBdUM7QUFDdkMsb0JBQXVCO0FBQ3ZCLDBCQUF3QjtBQUN4Qiw4QkFBK0I7QUFDL0IsOEJBQXNCO0FBS3RCLE1BQU0sc0NBQXNDO0FBRTVDLE1BQU0sbUJBQW1CO0FBYXpCLE1BQU0seUNBQXlDO0FBTS9DLE1BQU0sc0NBQXNDO0FBSzVDLE1BQU0sNENBQTRDLG9CQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEdBQUcsQ0FBQztBQUtsRyxNQUFNLG9DQUFvQztBQUsxQyxNQUFNLDhCQUE4QjtBQWtZcEMsTUFBTSx1QkFBdUI7QUFB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
|
|
@@ -236,7 +236,8 @@ export declare function isParseLinkReference(reference: Reference): reference is
|
|
|
236
236
|
/**
|
|
237
237
|
* Parses the links from a note's frontmatter. Each string value is parsed via {@link parseLinks}: a value
|
|
238
238
|
* that is a single link yields an entry without offsets, and a value that holds multiple links yields
|
|
239
|
-
* offset-carrying entries.
|
|
239
|
+
* offset-carrying entries. A value is a single link the way Obsidian reads it, so `[A [ B](t.md)` is one
|
|
240
|
+
* link captioned `A [ B` (see {@link parseLink}). Internal single-link values are omitted, as Obsidian natively caches them.
|
|
240
241
|
*
|
|
241
242
|
* @param frontmatter - The frontmatter to parse (a value, object, or array).
|
|
242
243
|
* @returns The parsed frontmatter links.
|
|
@@ -245,6 +246,10 @@ export declare function parseFrontmatterLinks(frontmatter: unknown): ParseFrontm
|
|
|
245
246
|
/**
|
|
246
247
|
* Parses a link into its components.
|
|
247
248
|
*
|
|
249
|
+
* A string that starts with `[` and ends with a markdown link is read as ONE link whose caption runs
|
|
250
|
+
* from the leading `[` to that link's `](`, the way Obsidian reads a frontmatter value: `[A [ B](t.md)`
|
|
251
|
+
* has the alias `A [ B`, where CommonMark finds only `[ B](t.md)`.
|
|
252
|
+
*
|
|
248
253
|
* @param $string - The link to parse.
|
|
249
254
|
* @param options - The parse options.
|
|
250
255
|
* @returns The parsed link.
|