obsidian-dev-utils 87.0.3 → 87.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/@types/original-fs/package.json +4 -0
- package/CHANGELOG.md +8 -0
- package/dist/lib/cjs/@types/original-fs.d.cts +15 -0
- package/dist/lib/cjs/generated-during-build.cjs +1 -1
- package/dist/lib/cjs/obsidian/desktop-demo-vault-opener.cjs +7 -3
- package/dist/lib/cjs/script-utils/demo-vault-coverage.cjs +52 -12
- package/dist/lib/cjs/script-utils/demo-vault-coverage.d.cts +48 -14
- package/dist/lib/esm/@types/original-fs.d.mts +15 -0
- package/dist/lib/esm/generated-during-build.mjs +1 -1
- package/dist/lib/esm/obsidian/desktop-demo-vault-opener.mjs +7 -3
- package/dist/lib/esm/script-utils/demo-vault-coverage.d.mts +48 -14
- package/dist/lib/esm/script-utils/demo-vault-coverage.mjs +52 -12
- package/package.json +1 -1
- package/dist/dev/main.js +0 -37464
- package/dist/dev/manifest.json +0 -9
|
@@ -21,7 +21,7 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
21
21
|
globalThis.process = browserProcess;
|
|
22
22
|
})();
|
|
23
23
|
|
|
24
|
-
const LIBRARY_VERSION = "87.0
|
|
24
|
+
const LIBRARY_VERSION = "87.1.0";
|
|
25
25
|
const LIBRARY_STYLES = ".obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component pre, .obsidian-dev-utils.code-highlighter-component code {\n font-family: var(--font-monospace);\n line-height: var(--line-height-normal);\n margin: 0;\n}\n.obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component code {\n font-size: var(--code-size);\n}\n.obsidian-dev-utils.code-highlighter-component textarea {\n background: transparent;\n color: transparent;\n z-index: 2;\n width: 20em;\n height: 10em;\n}\n.obsidian-dev-utils.code-highlighter-component pre {\n position: absolute;\n pointer-events: none;\n border: var(--input-border-width) solid transparent;\n overflow: auto;\n inset: 0;\n padding: var(--size-4-1) var(--size-4-2);\n z-index: 1;\n}\n.obsidian-dev-utils.code-highlighter-component pre::after {\n content: \"\";\n display: block;\n height: var(--bottom-gap, 0);\n}\n.obsidian-dev-utils.code-highlighter-component pre.is-placeholder {\n opacity: 0.6;\n}\n.obsidian-dev-utils.code-highlighter-component code {\n display: block;\n padding: 0;\n}\n\n.obsidian-dev-utils-lock-indicator {\n display: inline-flex;\n align-items: center;\n color: var(--text-muted);\n}\n.obsidian-dev-utils-lock-indicator .svg-icon {\n width: var(--icon-s);\n height: var(--icon-s);\n}\n\n@keyframes obsidian-dev-utils-lock-indicator-flash {\n 40% {\n color: var(--text-error);\n transform: scale(1.4);\n }\n}\n.obsidian-dev-utils-lock-indicator-flash {\n animation: obsidian-dev-utils-lock-indicator-flash 0.35s ease-in-out;\n}\n\n.obsidian-dev-utils input[type=url] {\n height: var(--input-height);\n}\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=tel],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=url],\n.obsidian-dev-utils input[type=week] {\n -webkit-app-region: no-drag;\n background: var(--background-modifier-form-field);\n border: var(--input-border-width) solid var(--background-modifier-border);\n color: var(--text-normal);\n font-family: inherit;\n padding: var(--size-4-1) var(--size-4-2);\n font-size: var(--font-ui-small);\n border-radius: var(--input-radius);\n outline: none;\n}\n@media (hover: hover) {\n .obsidian-dev-utils input[type=month]:hover,\n .obsidian-dev-utils input[type=tel]:hover,\n .obsidian-dev-utils input[type=time]:hover,\n .obsidian-dev-utils input[type=url]:hover,\n .obsidian-dev-utils input[type=week]:hover {\n border-color: var(--background-modifier-border-hover);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n }\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus {\n border-color: var(--background-modifier-border-focus);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus, .obsidian-dev-utils input[type=month]:focus-visible,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=tel]:focus-visible,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=time]:focus-visible,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=url]:focus-visible,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus,\n.obsidian-dev-utils input[type=week]:focus-visible {\n box-shadow: 0 0 0 2px var(--background-modifier-border-focus);\n}\n.obsidian-dev-utils input[type=month]::placeholder,\n.obsidian-dev-utils input[type=tel]::placeholder,\n.obsidian-dev-utils input[type=time]::placeholder,\n.obsidian-dev-utils input[type=url]::placeholder,\n.obsidian-dev-utils input[type=week]::placeholder {\n color: var(--text-faint);\n}\n.mod-rtl input[type=month],\n.mod-rtl input[type=time],\n.mod-rtl input[type=week],\n.is-rtl input[type=month],\n.is-rtl input[type=time],\n.is-rtl input[type=week],\n.rtl input[type=month],\n.rtl input[type=time],\n.rtl input[type=week] {\n direction: rtl;\n}\n.mod-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.rtl input[type=month]::-webkit-calendar-picker-indicator,\n.rtl input[type=time]::-webkit-calendar-picker-indicator,\n.rtl input[type=week]::-webkit-calendar-picker-indicator {\n right: var(--size-4-1);\n left: auto;\n}\n\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=week] {\n font-variant-numeric: tabular-nums;\n position: relative;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-text {\n color: var(--text-faint);\n padding-inline-end: 0;\n}\n.obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n position: absolute;\n left: var(--size-4-1);\n right: auto;\n opacity: 0.5;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:focus {\n background-color: var(--text-selection);\n color: var(--text-normal);\n cursor: text;\n}\n.mod-rtl .obsidian-dev-utils input[type=month], .is-rtl .obsidian-dev-utils input[type=month], .rtl .obsidian-dev-utils input[type=month],\n.mod-rtl .obsidian-dev-utils input[type=time],\n.is-rtl .obsidian-dev-utils input[type=time],\n.rtl .obsidian-dev-utils input[type=time],\n.mod-rtl .obsidian-dev-utils input[type=week],\n.is-rtl .obsidian-dev-utils input[type=week],\n.rtl .obsidian-dev-utils input[type=week] {\n direction: rtl;\n}\n.mod-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .is-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n left: auto;\n right: var(--size-4-1);\n}\n\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=month],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=time],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=week] {\n padding-inline-start: var(--size-4-6);\n}\n\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator {\n margin-inline-start: 0;\n}\n\n.obsidian-dev-utilsprogress.loop {\n min-width: 200px;\n}\n\n@keyframes obsidian-dev-utils-minimized-modal-bar-pulse {\n 0%, 100% {\n box-shadow: var(--shadow-s);\n }\n 50% {\n box-shadow: 0 0 0 2px var(--interactive-accent);\n }\n}\n@keyframes obsidian-dev-utils-minimized-modal-bar-attention {\n 0% {\n box-shadow: 0 0 0 0 var(--interactive-accent);\n }\n 40% {\n box-shadow: 0 0 0 4px var(--interactive-accent);\n }\n 100% {\n box-shadow: var(--shadow-s);\n }\n}\n.obsidian-dev-utils.minimizable-modal .minimize-button {\n position: absolute;\n top: var(--size-4-2);\n right: calc(var(--size-4-2) + var(--size-4-9));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--size-2-2);\n border: none;\n border-radius: var(--radius-s);\n background: transparent;\n color: var(--icon-color);\n cursor: pointer;\n box-shadow: none;\n}\n.obsidian-dev-utils.minimizable-modal .minimize-button:hover {\n background: var(--background-modifier-hover);\n color: var(--icon-color-hover);\n}\n.obsidian-dev-utils.minimized-modal-bar {\n position: fixed;\n right: var(--size-4-4);\n bottom: calc(var(--size-4-4) + var(--size-4-8));\n z-index: var(--layer-modal);\n display: flex;\n align-items: center;\n gap: var(--size-4-2);\n padding: var(--size-4-2) var(--size-4-3);\n border: 1px solid var(--background-modifier-border);\n border-radius: var(--radius-m);\n background: var(--background-secondary);\n box-shadow: var(--shadow-s);\n cursor: pointer;\n animation: obsidian-dev-utils-minimized-modal-bar-pulse 2s ease-in-out infinite;\n}\n.obsidian-dev-utils.minimized-modal-bar:hover {\n background-image: linear-gradient(var(--background-modifier-hover), var(--background-modifier-hover));\n}\n.obsidian-dev-utils.minimized-modal-bar.minimized-modal-bar-attention {\n animation: obsidian-dev-utils-minimized-modal-bar-attention 0.35s ease-out;\n}\n.obsidian-dev-utils.minimized-modal-bar .minimized-modal-bar-title {\n font-weight: var(--font-medium);\n}\n.obsidian-dev-utils.minimized-modal-bar .restore-button,\n.obsidian-dev-utils.minimized-modal-bar .cancel-button {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--size-2-2);\n border: none;\n border-radius: var(--radius-s);\n background: transparent;\n color: var(--icon-color);\n cursor: pointer;\n box-shadow: none;\n}\n.obsidian-dev-utils.minimized-modal-bar .restore-button:hover,\n.obsidian-dev-utils.minimized-modal-bar .cancel-button:hover {\n background: var(--background-modifier-hover);\n color: var(--icon-color-hover);\n}\n\n.obsidian-dev-utils.modal-container .ok-button {\n margin-right: 10px;\n margin-top: 20px;\n}\n\n.obsidian-dev-utils .multiple-dropdown-component select,\n.obsidian-dev-utils .multiple-dropdown-component select:focus,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown {\n height: auto;\n padding-top: 3px;\n}\n.obsidian-dev-utils .multiple-dropdown-component select option:checked,\n.obsidian-dev-utils .multiple-dropdown-component select:focus option:checked,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown option:checked {\n background-color: #1967d2;\n color: #fff;\n}\n\n.obsidian-dev-utils.plugin-notice-name {\n color: var(--text-accent);\n display: inline-block;\n font-weight: var(--font-bold);\n margin-bottom: var(--size-4-2);\n}\n.obsidian-dev-utils.plugin-notice-content {\n padding-right: var(--size-4-5);\n position: relative;\n}\n.obsidian-dev-utils.plugin-notice-content .obsidian-dev-utils.cancel-button {\n display: block;\n margin-top: var(--size-4-2);\n width: fit-content;\n}\n.obsidian-dev-utils.plugin-notice-content .obsidian-dev-utils.plugin-notice-close-button {\n position: absolute;\n right: var(--size-4-3);\n top: var(--size-4-3);\n}\n.obsidian-dev-utils.plugin-notice-requires-explicit-close.notice {\n padding: 0;\n}\n.obsidian-dev-utils.plugin-notice-requires-explicit-close.notice .obsidian-dev-utils.plugin-notice-content {\n padding: var(--size-4-3) var(--size-4-4);\n}\n\n.obsidian-dev-utils.plugin-settings-tab a:focus {\n outline: 2px solid var(--link-color);\n}\n\n.obsidian-dev-utils.prompt-modal .text-box {\n width: 100%;\n}\n\nbody button:not(.clickable-icon) {\n color: var(--text-color);\n}\n\n.obsidian-dev-utils.tri-state-checkbox-component input[type=checkbox]:indeterminate {\n appearance: checkbox;\n}\n\n.obsidian-dev-utils :invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils input.metadata-input-text:active:invalid, .obsidian-dev-utils input.metadata-input-text:focus-visible:invalid, .obsidian-dev-utils input.metadata-input-text:focus:invalid,\n.obsidian-dev-utils input[type=date]:active:invalid,\n.obsidian-dev-utils input[type=date]:focus-visible:invalid,\n.obsidian-dev-utils input[type=date]:focus:invalid,\n.obsidian-dev-utils input[type=datetime-local]:active:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus-visible:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus:invalid,\n.obsidian-dev-utils input[type=email]:active:invalid,\n.obsidian-dev-utils input[type=email]:focus-visible:invalid,\n.obsidian-dev-utils input[type=email]:focus:invalid,\n.obsidian-dev-utils input[type=number]:active:invalid,\n.obsidian-dev-utils input[type=number]:focus-visible:invalid,\n.obsidian-dev-utils input[type=number]:focus:invalid,\n.obsidian-dev-utils input[type=password]:active:invalid,\n.obsidian-dev-utils input[type=password]:focus-visible:invalid,\n.obsidian-dev-utils input[type=password]:focus:invalid,\n.obsidian-dev-utils input[type=search]:active:invalid,\n.obsidian-dev-utils input[type=search]:focus-visible:invalid,\n.obsidian-dev-utils input[type=search]:focus:invalid,\n.obsidian-dev-utils input[type=text]:active:invalid,\n.obsidian-dev-utils input[type=text]:focus-visible:invalid,\n.obsidian-dev-utils input[type=text]:focus:invalid,\n.obsidian-dev-utils textarea:active:invalid,\n.obsidian-dev-utils textarea:focus-visible:invalid,\n.obsidian-dev-utils textarea:focus:invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils.setting-component-wrapper {\n position: relative;\n display: inline-flex;\n}\n.obsidian-dev-utils.overlay-validator {\n caret-color: transparent;\n cursor: default;\n position: absolute;\n background-color: transparent;\n border: none;\n outline: none;\n pointer-events: none;\n z-index: 9999;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n}\n.obsidian-dev-utils.tooltip.tooltip-validator {\n position: absolute;\n top: calc(100% + 8px);\n width: max-content;\n}\n\n/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../src/styles/code-highlighter-component.scss%22,%22../src/styles/editor-lock.scss%22,%22../src/styles/input.scss%22,%22../src/styles/input-time.scss%22,%22../src/styles/loop.scss%22,%22../src/styles/minimizable-modal.scss%22,%22../src/styles/modal-container.scss%22,%22../src/styles/multiple-dropdown-component.scss%22,%22../src/styles/plugin-notice.scss%22,%22../src/styles/plugin-settings-tab.scss%22,%22../src/styles/prompt-modal.scss%22,%22../src/styles/tldraw-button-color-workaround.scss%22,%22../src/styles/tri-state-checkbox-component.scss%22,%22../src/styles/validation.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAEI;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;;ACvCN;EACE;EACA;EACA;;AAEA;EACE;EACA;;;AAMJ;EACE;IACE;IACA;;;AAIJ;EACE;;;ACvBA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;AAAA;AAAA;AAAA;AAAA;IACE;IACA,YACE;;;AAMR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA,YACE;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAGF;AAAA;AAAA;AAAA;AAAA;EACE;;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AC7DV;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAIK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGP;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AAKF;AAAA;AAAA;EACE;;;AAMJ;EACE;;;ACjDJ;EACE;;;ACFJ;EACE;IAEE;;EAGF;IACE;;;AAIJ;EACE;IACE;;EAGF;IACE;;EAGF;IACE;;;AAOA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AASN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAOA;EACE;;AAOF;EACE;;AAGF;EACE;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EACE;EACA;;;ACxGJ;EACE;EACA;;;ACFF;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;;ACTN;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAKF;EACE;EACA;EACA;;AAOJ;EACE;;AAEA;EACE;;;AChCF;EACE;;;ACDF;EACE;;;ACON;EACE;;;ACTE;EACE;;;ACEJ;EAJA;;AAoBI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EApBJ;;AA0BA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA%22,%22file%22:%22styles.css%22,%22sourcesContent%22:%5B%22.obsidian-dev-utils%20%7B%5Cn%20%20&.code-highlighter-component%20%7B%5Cn%20%20%20%20textarea,%20pre,%20code%20%7B%5Cn%20%20%20%20%20%20font-family:%20var(--font-monospace);%5Cn%20%20%20%20%20%20line-height:%20var(--line-height-normal);%5Cn%20%20%20%20%20%20margin:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea,%20code%20%7B%5Cn%20%20%20%20%20%20font-size:%20var(--code-size);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea%20%7B%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20transparent;%5Cn%20%20%20%20%20%20z-index:%202;%5Cn%20%20%20%20%20%20width:%2020em;%5Cn%20%20%20%20%20%20height:%2010em;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20%20%20border:%20var(--input-border-width)%20solid%20transparent;%5Cn%20%20%20%20%20%20overflow:%20auto;%5Cn%20%20%20%20%20%20inset:%200;%5Cn%20%20%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20%20%20z-index:%201;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre::after%20%7B%5Cn%20%20%20%20%20%20content:%20%5C%22%5C%22;%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20height:%20var(--bottom-gap,%200);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre.is-placeholder%20%7B%5Cn%20%20%20%20%20%20opacity:%200.6;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20code%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20padding:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20Lock%20indicators%20shown%20in%20the%20tab%20header%20and%20the%20status%20bar%20while%20a%20note%20is%20locked.%20These%20live%20in%5Cn//%20global%20Obsidian%20DOM%20(tab%20header%20/%20status%20bar),%20so%20they%20are%20styled%20with%20a%20global%20class%20rather%20than%5Cn//%20scoped%20under%20%60.obsidian-dev-utils%60.%5Cn.obsidian-dev-utils-lock-indicator%20%7B%5Cn%20%20display:%20inline-flex;%5Cn%20%20align-items:%20center;%5Cn%20%20color:%20var(--text-muted);%5Cn%5Cn%20%20.svg-icon%20%7B%5Cn%20%20%20%20width:%20var(--icon-s);%5Cn%20%20%20%20height:%20var(--icon-s);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn//%20Flashed%20on%20every%20lock%20indicator%20(tab%20header,%20view%20action,%20status%20bar)%20when%20the%20user%20attempts%20to%5Cn//%20type%20in%20a%20locked%20note,%20to%20make%20clear%20the%20note%20is%20read-only.%20Re-added%20per%20rejected%20keystroke.%5Cn@keyframes%20obsidian-dev-utils-lock-indicator-flash%20%7B%5Cn%20%2040%25%20%7B%5Cn%20%20%20%20color:%20var(--text-error);%5Cn%20%20%20%20transform:%20scale(1.4);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn.obsidian-dev-utils-lock-indicator-flash%20%7B%5Cn%20%20animation:%20obsidian-dev-utils-lock-indicator-flash%200.35s%20ease-in-out;%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='url'%5D%20%7B%5Cn%20%20%20%20height:%20var(--input-height)%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='tel'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='url'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20-webkit-app-region:%20no-drag;%5Cn%20%20%20%20background:%20var(--background-modifier-form-field);%5Cn%20%20%20%20border:%20var(--input-border-width)%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20font-family:%20inherit;%5Cn%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20font-size:%20var(--font-ui-small);%5Cn%20%20%20%20border-radius:%20var(--input-radius);%5Cn%20%20%20%20outline:%20none;%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20@media%20(hover:%20hover)%20%7B%5Cn%20%20%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20border-color:%20var(--background-modifier-border-hover);%5Cn%20%20%20%20%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus,%5Cn%20%20%20%20&:focus-visible%20%7B%5Cn%20%20%20%20%20%20box-shadow:%200%200%200%202px%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::placeholder%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20@at-root%20%7B%5Cn%20%20%20%20.mod-rtl,%5Cn%20%20%20%20.is-rtl,%5Cn%20%20%20%20.rtl%20%7B%5Cn%20%20%20%20%20%20&%20%7B%5Cn%20%20%20%20%20%20%20%20input%5Btype='month'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='time'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20font-variant-numeric:%20tabular-nums;%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-text%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%20%20padding-inline-end:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20left:%20var(--size-4-1);%5Cn%20%20%20%20%20%20right:%20auto;%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-month-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-day-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-year-field%20%7B%5Cn%20%20%20%20%20%20&:active,%5Cn%20%20%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20var(--text-selection);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%20%20%20%20cursor:%20text;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20.mod-rtl%20&,%5Cn%20%20%20%20%20%20.is-rtl%20&,%5Cn%20%20%20%20%20%20.rtl%20&%20%7B%5Cn%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20body:not(.is-ios):not(.is-android)%20&%20%7B%5Cn%20%20%20%20%20%20%20%20padding-inline-start:%20var(--size-4-6);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='time'%5D%20%7B%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&progress.loop%20%7B%5Cn%20%20%20%20min-width:%20200px;%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22@keyframes%20obsidian-dev-utils-minimized-modal-bar-pulse%20%7B%5Cn%20%200%25,%5Cn%20%20100%25%20%7B%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%7D%5Cn%5Cn%20%2050%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%202px%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn@keyframes%20obsidian-dev-utils-minimized-modal-bar-attention%20%7B%5Cn%20%200%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%200%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%5Cn%20%2040%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%204px%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%5Cn%20%20100%25%20%7B%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20//%20The%20minimize%20button%20lives%20inside%20the%20modal%20container,%20left%20of%20Obsidian's%20close%20button.%5Cn%20%20&.minimizable-modal%20%7B%5Cn%20%20%20%20.minimize-button%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20top:%20var(--size-4-2);%5Cn%20%20%20%20%20%20right:%20calc(var(--size-4-2)%20+%20var(--size-4-9));%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20justify-content:%20center;%5Cn%20%20%20%20%20%20padding:%20var(--size-2-2);%5Cn%20%20%20%20%20%20border:%20none;%5Cn%20%20%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20var(--icon-color);%5Cn%20%20%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20%20%20box-shadow:%20none;%5Cn%5Cn%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20background:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20%20%20color:%20var(--icon-color-hover);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20//%20The%20minimized%20bar%20is%20appended%20to%20document.body.%20It%20floats%20at%20the%20bottom-right%20while%20minimized,%5Cn%20%20//%20and%20gently%20pulses%20an%20accent%20ring%20so%20the%20user%20does%20not%20forget%20about%20the%20minimized%20operation.%5Cn%20%20//%20It%20floats%20a%20status-bar's%20height%20above%20the%20bottom%20edge%20so%20it%20never%20covers%20the%20bottom-right%5Cn%20%20//%20status-bar%20items%20(e.g.%20the%20editor-lock%20unlock%20indicator,%20which%20lives%20in%20the%20same%20corner).%5Cn%20%20&.minimized-modal-bar%20%7B%5Cn%20%20%20%20position:%20fixed;%5Cn%20%20%20%20right:%20var(--size-4-4);%5Cn%20%20%20%20bottom:%20calc(var(--size-4-4)%20+%20var(--size-4-8));%5Cn%20%20%20%20z-index:%20var(--layer-modal);%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20align-items:%20center;%5Cn%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20padding:%20var(--size-4-2)%20var(--size-4-3);%5Cn%20%20%20%20border:%201px%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20border-radius:%20var(--radius-m);%5Cn%20%20%20%20background:%20var(--background-secondary);%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20animation:%20obsidian-dev-utils-minimized-modal-bar-pulse%202s%20ease-in-out%20infinite;%5Cn%5Cn%20%20%20%20//%20Layer%20the%20translucent%20hover%20tint%20over%20the%20opaque%20%60background%60%20(%60--background-secondary%60)%20via%5Cn%20%20%20%20//%20%60background-image%60%20instead%20of%20replacing%20the%20background-color.%20%60--background-modifier-hover%60%20is%5Cn%20%20%20%20//%20translucent,%20so%20setting%20it%20as%20%60background%60%20would%20let%20the%20editor%20content%20behind%20the%20floating%20bar%5Cn%20%20%20%20//%20bleed%20through%20and%20make%20the%20title%20unreadable.%20A%20gradient%20of%20the%20tint%20composited%20over%20the%20opaque%5Cn%20%20%20%20//%20base%20keeps%20the%20bar%20opaque%20while%20preserving%20the%20subtle%20hover%20highlight.%5Cn%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20background-image:%20linear-gradient(var(--background-modifier-hover),%20var(--background-modifier-hover));%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20A%20one-shot,%20more%20pronounced%20flash%20played%20when%20the%20user%20attempts%20a%20blocked%20action%20(a%20keystroke,%5Cn%20%20%20%20//%20right-click,%20or%20opening%20another%20modal)%20while%20this%20modal%20is%20minimized,%20so%20the%20block%20is%20not%5Cn%20%20%20%20//%20silent.%20Its%20higher%20specificity%20overrides%20the%20gentle%20infinite%20idle%20pulse%20while%20it%20plays;%20the%5Cn%20%20%20%20//%20class%20is%20removed%20on%20%60animationend%60,%20restoring%20the%20idle%20pulse.%5Cn%20%20%20%20&.minimized-modal-bar-attention%20%7B%5Cn%20%20%20%20%20%20animation:%20obsidian-dev-utils-minimized-modal-bar-attention%200.35s%20ease-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.minimized-modal-bar-title%20%7B%5Cn%20%20%20%20%20%20font-weight:%20var(--font-medium);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.restore-button,%5Cn%20%20%20%20.cancel-button%20%7B%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20justify-content:%20center;%5Cn%20%20%20%20%20%20padding:%20var(--size-2-2);%5Cn%20%20%20%20%20%20border:%20none;%5Cn%20%20%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20var(--icon-color);%5Cn%20%20%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20%20%20box-shadow:%20none;%5Cn%5Cn%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20background:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20%20%20color:%20var(--icon-color-hover);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.modal-container%20%7B%5Cn%20%20%20%20.ok-button%20%7B%5Cn%20%20%20%20%20%20margin-right:%2010px;%5Cn%20%20%20%20%20%20margin-top:%2020px;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20.multiple-dropdown-component%20%7B%5Cn%20%20%20%20select,%5Cn%20%20%20%20select:focus,%5Cn%20%20%20%20.dropdown%20%7B%5Cn%20%20%20%20%20%20height:%20auto;%5Cn%20%20%20%20%20%20padding-top:%203px;%5Cn%5Cn%20%20%20%20%20%20option:checked%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20%231967d2;%5Cn%20%20%20%20%20%20%20%20color:%20%23fff;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.plugin-notice-name%20%7B%5Cn%20%20%20%20color:%20var(--text-accent);%5Cn%20%20%20%20display:%20inline-block;%5Cn%20%20%20%20font-weight:%20var(--font-bold);%5Cn%20%20%20%20margin-bottom:%20var(--size-4-2);%5Cn%20%20%7D%5Cn%5Cn%20%20&.plugin-notice-content%20%7B%5Cn%20%20%20%20padding-right:%20var(--size-4-5);%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20.obsidian-dev-utils.cancel-button%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20margin-top:%20var(--size-4-2);%5Cn%20%20%20%20%20%20width:%20fit-content;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20The%20close%20button%20reuses%20Obsidian's%20%60modal-header-button%60%20+%20%60clickable-icon%60%20classes%20so%20it%20matches%5Cn%20%20%20%20//%20The%20native%20modal%20close%20button%20(box%20+%20hover);%20only%20its%20corner%20position%20is%20set%20here.%5Cn%20%20%20%20.obsidian-dev-utils.plugin-notice-close-button%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20right:%20var(--size-4-3);%5Cn%20%20%20%20%20%20top:%20var(--size-4-3);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20//%20Move%20the%20notice's%20own%20padding%20onto%20the%20content%20wrapper%20so%20the%20wrapper%20covers%20the%20whole%20clickable%5Cn%20%20//%20Area%20%E2%80%94%20otherwise%20a%20click%20landing%20on%20the%20notice's%20bare%20padding%20(outside%20the%20wrapper)%20would%20bypass%20the%5Cn%20%20//%20Stop-propagation%20guard%20and%20dismiss%20the%20hard-to-close%20notice.%5Cn%20%20&.plugin-notice-requires-explicit-close.notice%20%7B%5Cn%20%20%20%20padding:%200;%5Cn%5Cn%20%20%20%20.obsidian-dev-utils.plugin-notice-content%20%7B%5Cn%20%20%20%20%20%20padding:%20var(--size-4-3)%20var(--size-4-4);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.plugin-settings-tab%20%7B%5Cn%20%20%20%20a:focus%20%7B%5Cn%20%20%20%20%20%20outline:%202px%20solid%20var(--link-color);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.prompt-modal%20%7B%5Cn%20%20%20%20.text-box%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20The%20tldraw%20Obsidian%20plugin%20(tldraw/obsidian-plugin)%20ships%20an%20unscoped%20global%20rule%5Cn//%20%60button:not(.clickable-icon)%20%7B%20color:%20currentColor%20%7D%60%20that%20overrides%20Obsidian's%20own%5Cn//%20%60button:not(.clickable-icon)%20%7B%20color:%20var(--text-color)%20%7D%60%20app-wide.%20Obsidian%20sets%5Cn//%20%60--text-color%60%20contextually%20per%20button%20variant%20(%60--text-normal%60%20by%20default,%5Cn//%20%60--text-on-accent%60%20for%20%60.mod-cta%60,%20%60--text-error%60%20for%20%60.mod-warning%60),%20so%20tldraw's%5Cn//%20%60currentColor%60%20discards%20that%20and%20breaks%20button%20contrast%20outside%20tldraw%20%E2%80%94%20e.g.%5Cn//%20White-on-white%20action%20buttons%20inside%20a%20Notice.%20Re-assert%20Obsidian's%20own%20value%20with%20a%5Cn//%20%60body%60-prefixed%20selector%20(specificity%200,1,2)%20so%20it%20wins%20over%20tldraw's%20(0,1,1)%20while%5Cn//%20Staying%20correct%20for%20every%20button%20variant%20(it%20reuses%20the%20same%20contextual%20%60--text-color%60).%5Cn//%20Defensive%20workaround%20%E2%80%94%20remove%20once%20the%20upstream%20fix%20ships%20(tldraw/obsidian-plugin%23210).%5Cnbody%20button:not(.clickable-icon)%20%7B%5Cn%20%20color:%20var(--text-color);%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cr%5Cn%20%20&.tri-state-checkbox-component%20%7B%5Cr%5Cn%20%20%20%20input%5Btype='checkbox'%5D:indeterminate%20%7B%5Cr%5Cn%20%20%20%20%20%20appearance:%20checkbox;%5Cr%5Cn%20%20%20%20%7D%5Cr%5Cn%20%20%7D%5Cr%5Cn%7D%5Cr%5Cn%22,%22@mixin%20invalid%20%7B%5Cn%20%20box-shadow:%200%200%200%202px%20var(--text-error);%5Cn%7D%5Cn%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20:invalid%20%7B%5Cn%20%20%20%20@include%20invalid;%5Cn%20%20%7D%5Cn%5Cn%20%20input.metadata-input-text,%5Cn%20%20input%5Btype='date'%5D,%5Cn%20%20input%5Btype='datetime-local'%5D,%5Cn%20%20input%5Btype='email'%5D,%5Cn%20%20input%5Btype='number'%5D,%5Cn%20%20input%5Btype='password'%5D,%5Cn%20%20input%5Btype='search'%5D,%5Cn%20%20input%5Btype='text'%5D,%5Cn%20%20textarea%20%7B%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus-visible,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20&:invalid%20%7B%5Cn%20%20%20%20%20%20%20%20@include%20invalid;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.setting-component-wrapper%20%7B%5Cn%20%20%20%20position:%20relative;%5Cn%20%20%20%20display:%20inline-flex;%5Cn%20%20%7D%5Cn%5Cn%20%20&.overlay-validator%20%7B%5Cn%20%20%20%20caret-color:%20transparent;%5Cn%20%20%20%20cursor:%20default;%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20background-color:%20transparent;%5Cn%20%20%20%20border:%20none;%5Cn%20%20%20%20outline:%20none;%5Cn%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20z-index:%209999;%5Cn%20%20%20%20left:%200;%5Cn%20%20%20%20top:%200;%5Cn%20%20%20%20width:%20100%25;%5Cn%20%20%20%20height:%20100%25;%5Cn%20%20%7D%5Cn%5Cn%20%20&.tooltip.tooltip-validator%20%7B%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20top:%20calc(100%25%20+%208px);%5Cn%20%20%20%20width:%20max-content;%5Cn%20%20%7D%5Cn%7D%5Cn%22%5D%7D */\n";
|
|
26
26
|
export {
|
|
27
27
|
LIBRARY_STYLES,
|
|
@@ -113,11 +113,15 @@ async function downloadAndExtractDemoVault(params) {
|
|
|
113
113
|
pluginNoticeComponent.showNotice(`No demo vault is available for plugin ${pluginName} v${version}.`);
|
|
114
114
|
return false;
|
|
115
115
|
}
|
|
116
|
-
|
|
117
|
-
zip.extractAllTo(cacheDir, true);
|
|
116
|
+
await extractDemoVaultArchive(Buffer.from(response.arrayBuffer), cacheDir);
|
|
118
117
|
return true;
|
|
119
118
|
}
|
|
119
|
+
async function extractDemoVaultArchive(archive, targetDir) {
|
|
120
|
+
const originalFs = await import("node:original-fs");
|
|
121
|
+
const zip = new AdmZip(archive, { fs: originalFs });
|
|
122
|
+
zip.extractAllTo(targetDir, true);
|
|
123
|
+
}
|
|
120
124
|
export {
|
|
121
125
|
openDemoVault
|
|
122
126
|
};
|
|
123
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2Rlc2t0b3AtZGVtby12YXVsdC1vcGVuZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBEb3dubG9hZHMgYW5kIG9wZW5zIGEgcGx1Z2luJ3Mgc2hpcHBlZCBkZW1vIHZhdWx0IGluIGEgbmV3IE9ic2lkaWFuIHdpbmRvdyAoZGVza3RvcCBvbmx5KS5cbiAqXG4gKiBBIHBsdWdpbiBjYW4gYXR0YWNoIGEgYDxwbHVnaW4taWQ+LmRlbW8tdmF1bHQuemlwYCBhcmNoaXZlIHRvIGVhY2ggR2l0SHViIHJlbGVhc2UgKHNlZVxuICogYGFyY2hpdmVQbHVnaW5EZW1vVmF1bHRgIGluIGBzY3JpcHQtdXRpbHMvZGVtby12YXVsdC50c2ApLiBUaGlzIHJlc29sdmVzIHRoZSBwbHVnaW4ncyByZXBvc2l0b3J5XG4gKiBmcm9tIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHJlZ2lzdHJ5LCBkb3dubG9hZHMgdGhlIGFyY2hpdmUgZm9yIHRoZSBjaG9zZW4gdmVyc2lvbiwgZXh0cmFjdHMgaXQgdG8gYVxuICogcGVyLXZlcnNpb24gY2FjaGUgZm9sZGVyIHVuZGVyIHRoZSBPUyB0ZW1wIGRpcmVjdG9yeSwgYW5kIG9wZW5zIHRoYXQgZm9sZGVyIGFzIGEgdmF1bHQgaW4gYSBuZXdcbiAqIHdpbmRvdy4gV2hlbiB0aGUgaW5zdGFsbGVkIHBsdWdpbiB2ZXJzaW9uIGlzIGJlaGluZCB0aGUgbGF0ZXN0IHJlbGVhc2UsIHRoZSB1c2VyIGlzIG9mZmVyZWQgYSBjaG9pY2VcbiAqIGJldHdlZW4gdGhlIHR3byB2ZXJzaW9ucy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IEFkbVppcCBmcm9tICdhZG0temlwJztcbmltcG9ydCB7IGNvbXBhcmVWZXJzaW9ucyB9IGZyb20gJ2NvbXBhcmUtdmVyc2lvbnMnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLW5vZGVqcy1tb2R1bGVzIC0tIERlc2t0b3Atb25seSBmZWF0dXJlIGdhdGVkIGJ5IGBQbGF0Zm9ybS5pc0Rlc2t0b3BBcHBgOyB0aGUgY29tbWFuZCBpcyBoaWRkZW4gb24gbW9iaWxlIHNvIHRoaXMgTm9kZSBBUEkgaXMgbmV2ZXIgcmVhY2hlZCB0aGVyZS5cbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1ub2RlanMtbW9kdWxlcyAtLSBEZXNrdG9wLW9ubHkgZmVhdHVyZSBnYXRlZCBieSBgUGxhdGZvcm0uaXNEZXNrdG9wQXBwYDsgdGhlIGNvbW1hbmQgaXMgaGlkZGVuIG9uIG1vYmlsZSBzbyB0aGlzIE5vZGUgQVBJIGlzIG5ldmVyIHJlYWNoZWQgdGhlcmUuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXMgLS0gRGVza3RvcC1vbmx5IGZlYXR1cmUgZ2F0ZWQgYnkgYFBsYXRmb3JtLmlzRGVza3RvcEFwcGA7IHRoZSBjb21tYW5kIGlzIGhpZGRlbiBvbiBtb2JpbGUgc28gdGhpcyBOb2RlIEFQSSBpcyBuZXZlciByZWFjaGVkIHRoZXJlLlxuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyByZXF1ZXN0VXJsIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbk5vdGljZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wbHVnaW4tbm90aWNlLWNvbXBvbmVudC50cyc7XG5cbmltcG9ydCB7IGpvaW4gfSBmcm9tICcuLi9wYXRoLnRzJztcbmltcG9ydCB7XG4gIGdldENvbW11bml0eVBsdWdpblJlcG8sXG4gIGdldExhdGVzdFJlbGVhc2VWZXJzaW9uXG59IGZyb20gJy4vY29tbXVuaXR5LXBsdWdpbnMudHMnO1xuaW1wb3J0IHsgc2VsZWN0T3B0aW9uIH0gZnJvbSAnLi9tb2RhbHMvc2VsZWN0LW9wdGlvbi50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIG9wZW5EZW1vVmF1bHR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5EZW1vVmF1bHRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGlkLCB1c2VkIHRvIGxvY2F0ZSB0aGUgR2l0SHViIHJlcG9zaXRvcnkgYW5kIHRoZSBwZXItdmVyc2lvbiBjYWNoZSBmb2xkZXIsIGFuZCB0byBuYW1lXG4gICAqIHRoZSBhcmNoaXZlIGFzc2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBkaXNwbGF5IG5hbWUsIHVzZWQgdG8gbGFiZWwgdGhlIG5vdGljZXMgYW5kIHRoZSB2ZXJzaW9uLWNob2ljZSBkaWFsb2cuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBub3RpY2UgY29tcG9uZW50IHVzZWQgdG8gcmVwb3J0IHByb2JsZW1zIChwbHVnaW4gbm90IGluIHRoZSByZWdpc3RyeSwgbWlzc2luZyBhcmNoaXZlKS5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbk5vdGljZUNvbXBvbmVudDogUGx1Z2luTm90aWNlQ29tcG9uZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudGx5IGluc3RhbGxlZCBwbHVnaW4gdmVyc2lvbiwgb2ZmZXJlZCBhcyBvbmUgb2YgdGhlIHZlcnNpb24gY2hvaWNlcy5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpblZlcnNpb246IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIERvd25sb2FkQW5kRXh0cmFjdERlbW9WYXVsdFBhcmFtcyB7XG4gIHJlYWRvbmx5IGNhY2hlRGlyOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgcGx1Z2luTm90aWNlQ29tcG9uZW50OiBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG4gIHJlYWRvbmx5IHJlcG86IHN0cmluZztcbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xufVxuXG5jb25zdCBERU1PX1ZBVUxUU19DQUNIRV9GT0xERVIgPSAnb2JzaWRpYW4tZGVtby12YXVsdHMnO1xuY29uc3QgSFRUUF9TVEFUVVNfT0sgPSAyMDA7XG5cbi8qKlxuICogRG93bmxvYWRzIGFuZCBvcGVucyB0aGUgcGx1Z2luJ3MgZGVtbyB2YXVsdCBpbiBhIG5ldyBPYnNpZGlhbiB3aW5kb3cuIERlc2t0b3Agb25seS5cbiAqXG4gKiBJZiB0aGUgaW5zdGFsbGVkIHBsdWdpbiB2ZXJzaW9uIGlzIHRoZSBsYXRlc3QgKG9yIG5ld2VyKSwgaXRzIGRlbW8gdmF1bHQgb3BlbnMgZGlyZWN0bHk7IG90aGVyd2lzZVxuICogdGhlIHVzZXIgY2hvb3NlcyBiZXR3ZWVuIHRoZSBsYXRlc3QgYW5kIHRoZSBjdXJyZW50bHktaW5zdGFsbGVkIHZlcnNpb24uIFRoZSBjaG9zZW4gdmVyc2lvbidzXG4gKiBhcmNoaXZlIGlzIGRvd25sb2FkZWQgYW5kIGV4dHJhY3RlZCBvbmNlLCB0aGVuIHJldXNlZCBmcm9tIGEgcGVyLXZlcnNpb24gY2FjaGUgZm9sZGVyLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIE9wZW5EZW1vVmF1bHRQYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSB2YXVsdCBoYXMgYmVlbiBvcGVuZWQsIG9yIG9uY2UgdGhlIG9wZXJhdGlvbiBoYXNcbiAqIGJlZW4gcmVwb3J0ZWQgYXMgbm90IHBvc3NpYmxlIChub3RpY2Ugc2hvd24pIG9yIGNhbmNlbGxlZCBieSB0aGUgdXNlci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5EZW1vVmF1bHQocGFyYW1zOiBPcGVuRGVtb1ZhdWx0UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgcGx1Z2luSWQsXG4gICAgcGx1Z2luTmFtZSxcbiAgICBwbHVnaW5Ob3RpY2VDb21wb25lbnQsXG4gICAgcGx1Z2luVmVyc2lvblxuICB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IHJlcG8gPSBhd2FpdCBnZXRDb21tdW5pdHlQbHVnaW5SZXBvKHBsdWdpbklkKTtcbiAgaWYgKCFyZXBvKSB7XG4gICAgcGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2UoYENvdWxkIG5vdCBmaW5kIHBsdWdpbiAke3BsdWdpbk5hbWV9IGluIHRoZSBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjdXJyZW50VmVyc2lvbiA9IHBsdWdpblZlcnNpb247XG4gIGNvbnN0IGxhdGVzdFZlcnNpb24gPSBhd2FpdCBnZXRMYXRlc3RSZWxlYXNlVmVyc2lvbihyZXBvKTtcblxuICBsZXQgdmVyc2lvblRvT3Blbjogc3RyaW5nO1xuICBpZiAoY29tcGFyZVZlcnNpb25zKGN1cnJlbnRWZXJzaW9uLCBsYXRlc3RWZXJzaW9uKSA+PSAwKSB7XG4gICAgdmVyc2lvblRvT3BlbiA9IGN1cnJlbnRWZXJzaW9uO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNob3NlblZlcnNpb24gPSBhd2FpdCBzZWxlY3RPcHRpb248bnVsbCB8IHN0cmluZz4oe1xuICAgICAgYXBwLFxuICAgICAgbWVzc2FnZTogYEN1cnJlbnQgdmVyc2lvbiBvZiBwbHVnaW4gJHtwbHVnaW5OYW1lfSB2JHtjdXJyZW50VmVyc2lvbn0gaXMgbm90IHRoZSBsYXRlc3QgKHYke2xhdGVzdFZlcnNpb259KWAsXG4gICAgICBvcHRpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpc0N0YTogdHJ1ZSxcbiAgICAgICAgICB0ZXh0OiBgT3BlbiBkZW1vIHZhdWx0IGZvciBsYXRlc3QgdmVyc2lvbiAodiR7bGF0ZXN0VmVyc2lvbn0pYCxcbiAgICAgICAgICB2YWx1ZTogbGF0ZXN0VmVyc2lvblxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogYE9wZW4gZGVtbyB2YXVsdCBmb3IgY3VycmVudCB2ZXJzaW9uICh2JHtjdXJyZW50VmVyc2lvbn0pYCxcbiAgICAgICAgICB2YWx1ZTogY3VycmVudFZlcnNpb25cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6ICdDYW5jZWwnLFxuICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICB0aXRsZTogcGx1Z2luTmFtZVxuICAgIH0pO1xuICAgIGlmIChjaG9zZW5WZXJzaW9uID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZlcnNpb25Ub09wZW4gPSBjaG9zZW5WZXJzaW9uO1xuICB9XG5cbiAgY29uc3QgY2FjaGVEaXIgPSBqb2luKHRtcGRpcigpLCBERU1PX1ZBVUxUU19DQUNIRV9GT0xERVIsIHBsdWdpbklkLCB2ZXJzaW9uVG9PcGVuKTtcbiAgaWYgKCFleGlzdHNTeW5jKGNhY2hlRGlyKSkge1xuICAgIGNvbnN0IGlzRXh0cmFjdGVkID0gYXdhaXQgZG93bmxvYWRBbmRFeHRyYWN0RGVtb1ZhdWx0KHtcbiAgICAgIGNhY2hlRGlyLFxuICAgICAgcGx1Z2luSWQsXG4gICAgICBwbHVnaW5OYW1lLFxuICAgICAgcGx1Z2luTm90aWNlQ29tcG9uZW50LFxuICAgICAgcmVwbyxcbiAgICAgIHZlcnNpb246IHZlcnNpb25Ub09wZW5cbiAgICB9KTtcbiAgICBpZiAoIWlzRXh0cmFjdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgd2luZG93LmVsZWN0cm9uLmlwY1JlbmRlcmVyLnNlbmRTeW5jKCd2YXVsdC1vcGVuJywgY2FjaGVEaXIsIGZhbHNlKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZG93bmxvYWRBbmRFeHRyYWN0RGVtb1ZhdWx0KHBhcmFtczogRG93bmxvYWRBbmRFeHRyYWN0RGVtb1ZhdWx0UGFyYW1zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHtcbiAgICBjYWNoZURpcixcbiAgICBwbHVnaW5JZCxcbiAgICBwbHVnaW5OYW1lLFxuICAgIHBsdWdpbk5vdGljZUNvbXBvbmVudCxcbiAgICByZXBvLFxuICAgIHZlcnNpb25cbiAgfSA9IHBhcmFtcztcblxuICBjb25zdCBhc3NldFVybCA9IGBodHRwczovL2dpdGh1Yi5jb20vJHtyZXBvfS9yZWxlYXNlcy9kb3dubG9hZC8ke3ZlcnNpb259LyR7cGx1Z2luSWR9LmRlbW8tdmF1bHQuemlwYDtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0VXJsKHtcbiAgICB0aHJvdzogZmFsc2UsXG4gICAgdXJsOiBhc3NldFVybFxuICB9KTtcbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gSFRUUF9TVEFUVVNfT0spIHtcbiAgICBwbHVnaW5Ob3RpY2VDb21wb25lbnQuc2hvd05vdGljZShgTm8gZGVtbyB2YXVsdCBpcyBhdmFpbGFibGUgZm9yIHBsdWdpbiAke3BsdWdpbk5hbWV9IHYke3ZlcnNpb259LmApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHppcCA9IG5ldyBBZG1aaXAoQnVmZmVyLmZyb20ocmVzcG9uc2UuYXJyYXlCdWZmZXIpKTtcbiAgemlwLmV4dHJhY3RBbGxUbyhjYWNoZURpciwgdHJ1ZSk7XG4gIHJldHVybiB0cnVlO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFlQSxPQUFPLFlBQVk7QUFDbkIsU0FBUyx1QkFBdUI7QUFFaEMsU0FBUyxjQUFjO0FBRXZCLFNBQVMsa0JBQWtCO0FBRTNCLFNBQVMs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
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2Rlc2t0b3AtZGVtby12YXVsdC1vcGVuZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBEb3dubG9hZHMgYW5kIG9wZW5zIGEgcGx1Z2luJ3Mgc2hpcHBlZCBkZW1vIHZhdWx0IGluIGEgbmV3IE9ic2lkaWFuIHdpbmRvdyAoZGVza3RvcCBvbmx5KS5cbiAqXG4gKiBBIHBsdWdpbiBjYW4gYXR0YWNoIGEgYDxwbHVnaW4taWQ+LmRlbW8tdmF1bHQuemlwYCBhcmNoaXZlIHRvIGVhY2ggR2l0SHViIHJlbGVhc2UgKHNlZVxuICogYGFyY2hpdmVQbHVnaW5EZW1vVmF1bHRgIGluIGBzY3JpcHQtdXRpbHMvZGVtby12YXVsdC50c2ApLiBUaGlzIHJlc29sdmVzIHRoZSBwbHVnaW4ncyByZXBvc2l0b3J5XG4gKiBmcm9tIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHJlZ2lzdHJ5LCBkb3dubG9hZHMgdGhlIGFyY2hpdmUgZm9yIHRoZSBjaG9zZW4gdmVyc2lvbiwgZXh0cmFjdHMgaXQgdG8gYVxuICogcGVyLXZlcnNpb24gY2FjaGUgZm9sZGVyIHVuZGVyIHRoZSBPUyB0ZW1wIGRpcmVjdG9yeSwgYW5kIG9wZW5zIHRoYXQgZm9sZGVyIGFzIGEgdmF1bHQgaW4gYSBuZXdcbiAqIHdpbmRvdy4gV2hlbiB0aGUgaW5zdGFsbGVkIHBsdWdpbiB2ZXJzaW9uIGlzIGJlaGluZCB0aGUgbGF0ZXN0IHJlbGVhc2UsIHRoZSB1c2VyIGlzIG9mZmVyZWQgYSBjaG9pY2VcbiAqIGJldHdlZW4gdGhlIHR3byB2ZXJzaW9ucy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IEFkbVppcCBmcm9tICdhZG0temlwJztcbmltcG9ydCB7IGNvbXBhcmVWZXJzaW9ucyB9IGZyb20gJ2NvbXBhcmUtdmVyc2lvbnMnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLW5vZGVqcy1tb2R1bGVzIC0tIERlc2t0b3Atb25seSBmZWF0dXJlIGdhdGVkIGJ5IGBQbGF0Zm9ybS5pc0Rlc2t0b3BBcHBgOyB0aGUgY29tbWFuZCBpcyBoaWRkZW4gb24gbW9iaWxlIHNvIHRoaXMgTm9kZSBBUEkgaXMgbmV2ZXIgcmVhY2hlZCB0aGVyZS5cbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1ub2RlanMtbW9kdWxlcyAtLSBEZXNrdG9wLW9ubHkgZmVhdHVyZSBnYXRlZCBieSBgUGxhdGZvcm0uaXNEZXNrdG9wQXBwYDsgdGhlIGNvbW1hbmQgaXMgaGlkZGVuIG9uIG1vYmlsZSBzbyB0aGlzIE5vZGUgQVBJIGlzIG5ldmVyIHJlYWNoZWQgdGhlcmUuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXMgLS0gRGVza3RvcC1vbmx5IGZlYXR1cmUgZ2F0ZWQgYnkgYFBsYXRmb3JtLmlzRGVza3RvcEFwcGA7IHRoZSBjb21tYW5kIGlzIGhpZGRlbiBvbiBtb2JpbGUgc28gdGhpcyBOb2RlIEFQSSBpcyBuZXZlciByZWFjaGVkIHRoZXJlLlxuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyByZXF1ZXN0VXJsIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbk5vdGljZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wbHVnaW4tbm90aWNlLWNvbXBvbmVudC50cyc7XG5cbmltcG9ydCB7IGpvaW4gfSBmcm9tICcuLi9wYXRoLnRzJztcbmltcG9ydCB7XG4gIGdldENvbW11bml0eVBsdWdpblJlcG8sXG4gIGdldExhdGVzdFJlbGVhc2VWZXJzaW9uXG59IGZyb20gJy4vY29tbXVuaXR5LXBsdWdpbnMudHMnO1xuaW1wb3J0IHsgc2VsZWN0T3B0aW9uIH0gZnJvbSAnLi9tb2RhbHMvc2VsZWN0LW9wdGlvbi50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIG9wZW5EZW1vVmF1bHR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5EZW1vVmF1bHRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGlkLCB1c2VkIHRvIGxvY2F0ZSB0aGUgR2l0SHViIHJlcG9zaXRvcnkgYW5kIHRoZSBwZXItdmVyc2lvbiBjYWNoZSBmb2xkZXIsIGFuZCB0byBuYW1lXG4gICAqIHRoZSBhcmNoaXZlIGFzc2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBkaXNwbGF5IG5hbWUsIHVzZWQgdG8gbGFiZWwgdGhlIG5vdGljZXMgYW5kIHRoZSB2ZXJzaW9uLWNob2ljZSBkaWFsb2cuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBub3RpY2UgY29tcG9uZW50IHVzZWQgdG8gcmVwb3J0IHByb2JsZW1zIChwbHVnaW4gbm90IGluIHRoZSByZWdpc3RyeSwgbWlzc2luZyBhcmNoaXZlKS5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbk5vdGljZUNvbXBvbmVudDogUGx1Z2luTm90aWNlQ29tcG9uZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudGx5IGluc3RhbGxlZCBwbHVnaW4gdmVyc2lvbiwgb2ZmZXJlZCBhcyBvbmUgb2YgdGhlIHZlcnNpb24gY2hvaWNlcy5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpblZlcnNpb246IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIERvd25sb2FkQW5kRXh0cmFjdERlbW9WYXVsdFBhcmFtcyB7XG4gIHJlYWRvbmx5IGNhY2hlRGlyOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgcGx1Z2luTm90aWNlQ29tcG9uZW50OiBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG4gIHJlYWRvbmx5IHJlcG86IHN0cmluZztcbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xufVxuXG5jb25zdCBERU1PX1ZBVUxUU19DQUNIRV9GT0xERVIgPSAnb2JzaWRpYW4tZGVtby12YXVsdHMnO1xuY29uc3QgSFRUUF9TVEFUVVNfT0sgPSAyMDA7XG5cbi8qKlxuICogRG93bmxvYWRzIGFuZCBvcGVucyB0aGUgcGx1Z2luJ3MgZGVtbyB2YXVsdCBpbiBhIG5ldyBPYnNpZGlhbiB3aW5kb3cuIERlc2t0b3Agb25seS5cbiAqXG4gKiBJZiB0aGUgaW5zdGFsbGVkIHBsdWdpbiB2ZXJzaW9uIGlzIHRoZSBsYXRlc3QgKG9yIG5ld2VyKSwgaXRzIGRlbW8gdmF1bHQgb3BlbnMgZGlyZWN0bHk7IG90aGVyd2lzZVxuICogdGhlIHVzZXIgY2hvb3NlcyBiZXR3ZWVuIHRoZSBsYXRlc3QgYW5kIHRoZSBjdXJyZW50bHktaW5zdGFsbGVkIHZlcnNpb24uIFRoZSBjaG9zZW4gdmVyc2lvbidzXG4gKiBhcmNoaXZlIGlzIGRvd25sb2FkZWQgYW5kIGV4dHJhY3RlZCBvbmNlLCB0aGVuIHJldXNlZCBmcm9tIGEgcGVyLXZlcnNpb24gY2FjaGUgZm9sZGVyLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIE9wZW5EZW1vVmF1bHRQYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSB2YXVsdCBoYXMgYmVlbiBvcGVuZWQsIG9yIG9uY2UgdGhlIG9wZXJhdGlvbiBoYXNcbiAqIGJlZW4gcmVwb3J0ZWQgYXMgbm90IHBvc3NpYmxlIChub3RpY2Ugc2hvd24pIG9yIGNhbmNlbGxlZCBieSB0aGUgdXNlci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5EZW1vVmF1bHQocGFyYW1zOiBPcGVuRGVtb1ZhdWx0UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgcGx1Z2luSWQsXG4gICAgcGx1Z2luTmFtZSxcbiAgICBwbHVnaW5Ob3RpY2VDb21wb25lbnQsXG4gICAgcGx1Z2luVmVyc2lvblxuICB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IHJlcG8gPSBhd2FpdCBnZXRDb21tdW5pdHlQbHVnaW5SZXBvKHBsdWdpbklkKTtcbiAgaWYgKCFyZXBvKSB7XG4gICAgcGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2UoYENvdWxkIG5vdCBmaW5kIHBsdWdpbiAke3BsdWdpbk5hbWV9IGluIHRoZSBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjdXJyZW50VmVyc2lvbiA9IHBsdWdpblZlcnNpb247XG4gIGNvbnN0IGxhdGVzdFZlcnNpb24gPSBhd2FpdCBnZXRMYXRlc3RSZWxlYXNlVmVyc2lvbihyZXBvKTtcblxuICBsZXQgdmVyc2lvblRvT3Blbjogc3RyaW5nO1xuICBpZiAoY29tcGFyZVZlcnNpb25zKGN1cnJlbnRWZXJzaW9uLCBsYXRlc3RWZXJzaW9uKSA+PSAwKSB7XG4gICAgdmVyc2lvblRvT3BlbiA9IGN1cnJlbnRWZXJzaW9uO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNob3NlblZlcnNpb24gPSBhd2FpdCBzZWxlY3RPcHRpb248bnVsbCB8IHN0cmluZz4oe1xuICAgICAgYXBwLFxuICAgICAgbWVzc2FnZTogYEN1cnJlbnQgdmVyc2lvbiBvZiBwbHVnaW4gJHtwbHVnaW5OYW1lfSB2JHtjdXJyZW50VmVyc2lvbn0gaXMgbm90IHRoZSBsYXRlc3QgKHYke2xhdGVzdFZlcnNpb259KWAsXG4gICAgICBvcHRpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpc0N0YTogdHJ1ZSxcbiAgICAgICAgICB0ZXh0OiBgT3BlbiBkZW1vIHZhdWx0IGZvciBsYXRlc3QgdmVyc2lvbiAodiR7bGF0ZXN0VmVyc2lvbn0pYCxcbiAgICAgICAgICB2YWx1ZTogbGF0ZXN0VmVyc2lvblxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogYE9wZW4gZGVtbyB2YXVsdCBmb3IgY3VycmVudCB2ZXJzaW9uICh2JHtjdXJyZW50VmVyc2lvbn0pYCxcbiAgICAgICAgICB2YWx1ZTogY3VycmVudFZlcnNpb25cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6ICdDYW5jZWwnLFxuICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICB0aXRsZTogcGx1Z2luTmFtZVxuICAgIH0pO1xuICAgIGlmIChjaG9zZW5WZXJzaW9uID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZlcnNpb25Ub09wZW4gPSBjaG9zZW5WZXJzaW9uO1xuICB9XG5cbiAgY29uc3QgY2FjaGVEaXIgPSBqb2luKHRtcGRpcigpLCBERU1PX1ZBVUxUU19DQUNIRV9GT0xERVIsIHBsdWdpbklkLCB2ZXJzaW9uVG9PcGVuKTtcbiAgaWYgKCFleGlzdHNTeW5jKGNhY2hlRGlyKSkge1xuICAgIGNvbnN0IGlzRXh0cmFjdGVkID0gYXdhaXQgZG93bmxvYWRBbmRFeHRyYWN0RGVtb1ZhdWx0KHtcbiAgICAgIGNhY2hlRGlyLFxuICAgICAgcGx1Z2luSWQsXG4gICAgICBwbHVnaW5OYW1lLFxuICAgICAgcGx1Z2luTm90aWNlQ29tcG9uZW50LFxuICAgICAgcmVwbyxcbiAgICAgIHZlcnNpb246IHZlcnNpb25Ub09wZW5cbiAgICB9KTtcbiAgICBpZiAoIWlzRXh0cmFjdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgd2luZG93LmVsZWN0cm9uLmlwY1JlbmRlcmVyLnNlbmRTeW5jKCd2YXVsdC1vcGVuJywgY2FjaGVEaXIsIGZhbHNlKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZG93bmxvYWRBbmRFeHRyYWN0RGVtb1ZhdWx0KHBhcmFtczogRG93bmxvYWRBbmRFeHRyYWN0RGVtb1ZhdWx0UGFyYW1zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHtcbiAgICBjYWNoZURpcixcbiAgICBwbHVnaW5JZCxcbiAgICBwbHVnaW5OYW1lLFxuICAgIHBsdWdpbk5vdGljZUNvbXBvbmVudCxcbiAgICByZXBvLFxuICAgIHZlcnNpb25cbiAgfSA9IHBhcmFtcztcblxuICBjb25zdCBhc3NldFVybCA9IGBodHRwczovL2dpdGh1Yi5jb20vJHtyZXBvfS9yZWxlYXNlcy9kb3dubG9hZC8ke3ZlcnNpb259LyR7cGx1Z2luSWR9LmRlbW8tdmF1bHQuemlwYDtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0VXJsKHtcbiAgICB0aHJvdzogZmFsc2UsXG4gICAgdXJsOiBhc3NldFVybFxuICB9KTtcbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gSFRUUF9TVEFUVVNfT0spIHtcbiAgICBwbHVnaW5Ob3RpY2VDb21wb25lbnQuc2hvd05vdGljZShgTm8gZGVtbyB2YXVsdCBpcyBhdmFpbGFibGUgZm9yIHBsdWdpbiAke3BsdWdpbk5hbWV9IHYke3ZlcnNpb259LmApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGF3YWl0IGV4dHJhY3REZW1vVmF1bHRBcmNoaXZlKEJ1ZmZlci5mcm9tKHJlc3BvbnNlLmFycmF5QnVmZmVyKSwgY2FjaGVEaXIpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBhIGRvd25sb2FkZWQgZGVtby12YXVsdCBhcmNoaXZlIHRvIGRpc2suXG4gKlxuICogRWxlY3Ryb24ncyBhc2FyIGxheWVyIGludGVyY2VwdHMgYGZzYCBvcGVyYXRpb25zIG9uIGFueSBwYXRoIGNvbnRhaW5pbmcgYC5hc2FyYCBhbmQgdGhyb3dzIGBFTk9FTlRgXG4gKiB3aGVuIGBjaG1vZGAtaW5nIGFuIGAuYXNhcmAgZmlsZSAoaXQgdHJlYXRzIGl0IGFzIGFuIGFyY2hpdmUgcm9vdCByYXRoZXIgdGhhbiBhIHBsYWluIGZpbGUpLiBBIGRlbW9cbiAqIHZhdWx0IG1heSBzaGlwIHN1Y2ggYSBmaWxlIChlLmcuIGBfYXNzZXRzL0NvZGVTY3JpcHRUb29sa2l0L21vZHVsZS5hc2FyYCBkZW1vbnN0cmF0aW5nIHRoZSBBU0FSXG4gKiByZXF1aXJlIGZlYXR1cmUpLCBhbmQgYWRtLXppcCBgY2htb2RgcyBldmVyeSBleHRyYWN0ZWQgZmlsZSwgc28gZXh0cmFjdGlvbiB3b3VsZCBvdGhlcndpc2UgY3Jhc2guXG4gKiBIYW5kIGFkbS16aXAgRWxlY3Ryb24ncyBgb3JpZ2luYWwtZnNgIFx1MjAxNCB0aGUgcmVhbCBgZnNgIHdpdGggYXNhciBpbnRlcmNlcHRpb24gZGlzYWJsZWQgXHUyMDE0IHNvIHRoZVxuICogYC5hc2FyYCBmaWxlIGlzIHRyZWF0ZWQgYXMgYSBwbGFpbiBmaWxlIGFuZCBgY2htb2RgIHN1Y2NlZWRzLiBJdCBpcyBhIGRlc2t0b3Atb25seSBFbGVjdHJvbiBtb2R1bGVcbiAqIHdpdGggbm8gYnVuZGxlZCB0eXBlcywgc28gaXQgaXMgbG9hZGVkIHZpYSBhIGR5bmFtaWMgaW1wb3J0IGFuZCB0eXBlZCBhcyBgbm9kZTpmc2AncyBzaGFwZS5cbiAqXG4gKiBAcGFyYW0gYXJjaGl2ZSAtIFRoZSByYXcgemlwIGFyY2hpdmUgYnl0ZXMuXG4gKiBAcGFyYW0gdGFyZ2V0RGlyIC0gVGhlIGRpcmVjdG9yeSB0byBleHRyYWN0IGludG8uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGFyY2hpdmUgaGFzIGJlZW4gZXh0cmFjdGVkLlxuICovXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0RGVtb1ZhdWx0QXJjaGl2ZShhcmNoaXZlOiBCdWZmZXIsIHRhcmdldERpcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby11bnJlc29sdmVkIC0tIGBub2RlOm9yaWdpbmFsLWZzYCBpcyBhbiBFbGVjdHJvbiBydW50aW1lIG1vZHVsZSB0eXBlZCB2aWEgYW4gYW1iaWVudCBgZGVjbGFyZSBtb2R1bGVgOyB0aGUgaW1wb3J0IHJlc29sdmVyIGNhbm5vdCBmb2xsb3cgYW1iaWVudCBtb2R1bGUgZGVjbGFyYXRpb25zLCBidXQgVHlwZVNjcmlwdCBhbmQgRWxlY3Ryb24gcmVzb2x2ZSBpdCBhdCBkZXNrdG9wIHJ1bnRpbWUuXG4gIGNvbnN0IG9yaWdpbmFsRnMgPSBhd2FpdCBpbXBvcnQoJ25vZGU6b3JpZ2luYWwtZnMnKSBhcyB0eXBlb2YgaW1wb3J0KCdub2RlOmZzJyk7XG4gIGNvbnN0IHppcCA9IG5ldyBBZG1aaXAoYXJjaGl2ZSwgeyBmczogb3JpZ2luYWxGcyB9KTtcbiAgemlwLmV4dHJhY3RBbGxUbyh0YXJnZXREaXIsIHRydWUpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFlQSxPQUFPLFlBQVk7QUFDbkIsU0FBUyx1QkFBdUI7QUFFaEMsU0FBUyxjQUFjO0FBRXZCLFNBQVMsa0JBQWtCO0FBRTNCLFNBQVMsY0FBYztBQUN2QixTQUFTLGtCQUFrQjtBQUkzQixTQUFTLFlBQVk7QUFDckI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLG9CQUFvQjtBQTBDN0IsTUFBTSwyQkFBMkI7QUFDakMsTUFBTSxpQkFBaUI7QUFhdkIsZUFBc0IsY0FBYyxRQUE0QztBQUM5RSxRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGLElBQUk7QUFFSixRQUFNLE9BQU8sTUFBTSx1QkFBdUIsUUFBUTtBQUNsRCxNQUFJLENBQUMsTUFBTTtBQUNULDBCQUFzQixXQUFXLHlCQUF5QixVQUFVLHFDQUFxQztBQUN6RztBQUFBLEVBQ0Y7QUFFQSxRQUFNLGlCQUFpQjtBQUN2QixRQUFNLGdCQUFnQixNQUFNLHdCQUF3QixJQUFJO0FBRXhELE1BQUk7QUFDSixNQUFJLGdCQUFnQixnQkFBZ0IsYUFBYSxLQUFLLEdBQUc7QUFDdkQsb0JBQWdCO0FBQUEsRUFDbEIsT0FBTztBQUNMLFVBQU0sZ0JBQWdCLE1BQU0sYUFBNEI7QUFBQSxNQUN0RDtBQUFBLE1BQ0EsU0FBUyw2QkFBNkIsVUFBVSxLQUFLLGNBQWMsd0JBQXdCLGFBQWE7QUFBQSxNQUN4RyxTQUFTO0FBQUEsUUFDUDtBQUFBLFVBQ0UsT0FBTztBQUFBLFVBQ1AsTUFBTSx3Q0FBd0MsYUFBYTtBQUFBLFVBQzNELE9BQU87QUFBQSxRQUNUO0FBQUEsUUFDQTtBQUFBLFVBQ0UsTUFBTSx5Q0FBeUMsY0FBYztBQUFBLFVBQzdELE9BQU87QUFBQSxRQUNUO0FBQUEsUUFDQTtBQUFBLFVBQ0UsTUFBTTtBQUFBLFVBQ04sT0FBTztBQUFBLFFBQ1Q7QUFBQSxNQUNGO0FBQUEsTUFDQSxPQUFPO0FBQUEsSUFDVCxDQUFDO0FBQ0QsUUFBSSxrQkFBa0IsTUFBTTtBQUMxQjtBQUFBLElBQ0Y7QUFDQSxvQkFBZ0I7QUFBQSxFQUNsQjtBQUVBLFFBQU0sV0FBVyxLQUFLLE9BQU8sR0FBRywwQkFBMEIsVUFBVSxhQUFhO0FBQ2pGLE1BQUksQ0FBQyxXQUFXLFFBQVEsR0FBRztBQUN6QixVQUFNLGNBQWMsTUFBTSw0QkFBNEI7QUFBQSxNQUNwRDtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLFNBQVM7QUFBQSxJQUNYLENBQUM7QUFDRCxRQUFJLENBQUMsYUFBYTtBQUNoQjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsU0FBTyxTQUFTLFlBQVksU0FBUyxjQUFjLFVBQVUsS0FBSztBQUNwRTtBQUVBLGVBQWUsNEJBQTRCLFFBQTZEO0FBQ3RHLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGLElBQUk7QUFFSixRQUFNLFdBQVcsc0JBQXNCLElBQUksc0JBQXNCLE9BQU8sSUFBSSxRQUFRO0FBQ3BGLFFBQU0sV0FBVyxNQUFNLFdBQVc7QUFBQSxJQUNoQyxPQUFPO0FBQUEsSUFDUCxLQUFLO0FBQUEsRUFDUCxDQUFDO0FBQ0QsTUFBSSxTQUFTLFdBQVcsZ0JBQWdCO0FBQ3RDLDBCQUFzQixXQUFXLHlDQUF5QyxVQUFVLEtBQUssT0FBTyxHQUFHO0FBQ25HLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSx3QkFBd0IsT0FBTyxLQUFLLFNBQVMsV0FBVyxHQUFHLFFBQVE7QUFDekUsU0FBTztBQUNUO0FBaUJBLGVBQWUsd0JBQXdCLFNBQWlCLFdBQWtDO0FBRXhGLFFBQU0sYUFBYSxNQUFNLE9BQU8sa0JBQWtCO0FBQ2xELFFBQU0sTUFBTSxJQUFJLE9BQU8sU0FBUyxFQUFFLElBQUksV0FBVyxDQUFDO0FBQ2xELE1BQUksYUFBYSxXQUFXLElBQUk7QUFDbEM7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -11,8 +11,9 @@
|
|
|
11
11
|
* vault is a learning resource, and these checks only guard that it stays truthful.
|
|
12
12
|
*
|
|
13
13
|
* Two layers are exposed:
|
|
14
|
-
* - {@link DemoVaultCoverageChecker} — a framework-agnostic core that reads the corpus, parses interface
|
|
15
|
-
* members, and returns diagnostic arrays (what is undemonstrated / stale
|
|
14
|
+
* - {@link DemoVaultCoverageChecker} — a framework-agnostic core that reads the corpus, parses interface /
|
|
15
|
+
* class / enum members and exported functions, and returns diagnostic arrays (what is undemonstrated / stale
|
|
16
|
+
* / unlinked).
|
|
16
17
|
* - {@link registerDemoVaultCoverageSuite} — a thin wrapper that registers a `vitest` suite over the core, so
|
|
17
18
|
* a plugin's `demo-vault.no-app.integration.test.ts` is a single declarative call.
|
|
18
19
|
*/
|
|
@@ -21,11 +22,12 @@
|
|
|
21
22
|
*/
|
|
22
23
|
export interface DemoVaultConfigInterfaceCoverageSpec {
|
|
23
24
|
/**
|
|
24
|
-
* The name of the `export interface` whose properties are the config
|
|
25
|
+
* The name of the `export interface`, `export class`, or `export enum` whose properties are the config
|
|
26
|
+
* options.
|
|
25
27
|
*/
|
|
26
28
|
readonly interfaceName: string;
|
|
27
29
|
/**
|
|
28
|
-
* The source file path (relative to the repo root) that declares the interface.
|
|
30
|
+
* The source file path (relative to the repo root) that declares the interface, class, or enum.
|
|
29
31
|
*/
|
|
30
32
|
readonly sourcePath: string;
|
|
31
33
|
}
|
|
@@ -79,16 +81,25 @@ export interface DemoVaultCoverageCheckerFindUnlinkedFeatureDocsParams {
|
|
|
79
81
|
*/
|
|
80
82
|
readonly nonFeatureDocs: string[];
|
|
81
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* The parameters for {@link DemoVaultCoverageChecker.getExportedFunctionNames}.
|
|
86
|
+
*/
|
|
87
|
+
export interface DemoVaultCoverageCheckerGetExportedFunctionNamesParams {
|
|
88
|
+
/**
|
|
89
|
+
* The source file path (relative to the repo root) whose `export function`s are parsed.
|
|
90
|
+
*/
|
|
91
|
+
readonly sourcePath: string;
|
|
92
|
+
}
|
|
82
93
|
/**
|
|
83
94
|
* The parameters for {@link DemoVaultCoverageChecker.getInterfaceMembers}.
|
|
84
95
|
*/
|
|
85
96
|
export interface DemoVaultCoverageCheckerGetInterfaceMembersParams {
|
|
86
97
|
/**
|
|
87
|
-
* The name of the `export interface` to parse.
|
|
98
|
+
* The name of the `export interface`, `export class`, or `export enum` to parse.
|
|
88
99
|
*/
|
|
89
100
|
readonly interfaceName: string;
|
|
90
101
|
/**
|
|
91
|
-
* The source file path (relative to the repo root) that declares the interface.
|
|
102
|
+
* The source file path (relative to the repo root) that declares the interface, class, or enum.
|
|
92
103
|
*/
|
|
93
104
|
readonly sourcePath: string;
|
|
94
105
|
}
|
|
@@ -105,16 +116,26 @@ export interface DemoVaultDocsCoverageSpec {
|
|
|
105
116
|
*/
|
|
106
117
|
readonly nonFeatureDocs: string[];
|
|
107
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* Reflects a module's exported functions, each demonstrated by its bare name in the demo corpus.
|
|
121
|
+
*/
|
|
122
|
+
export interface DemoVaultFunctionsCoverageSpec {
|
|
123
|
+
/**
|
|
124
|
+
* The source file path (relative to the repo root) whose `export function`s must each be demonstrated.
|
|
125
|
+
*/
|
|
126
|
+
readonly sourcePath: string;
|
|
127
|
+
}
|
|
108
128
|
/**
|
|
109
129
|
* Reflects a single interface's members and demonstrates them via `` `${receiver}.<member>` `` references.
|
|
110
130
|
*/
|
|
111
131
|
export interface DemoVaultInterfaceCoverageSpec {
|
|
112
132
|
/**
|
|
113
|
-
* The name of the `export interface` to reflect.
|
|
133
|
+
* The name of the `export interface`, `export class`, or `export enum` to reflect.
|
|
114
134
|
*/
|
|
115
135
|
readonly interfaceName: string;
|
|
116
136
|
/**
|
|
117
|
-
* Whether the demonstrated members are the
|
|
137
|
+
* Whether the demonstrated members are the reflected type's methods or its properties (enum members count as
|
|
138
|
+
* properties).
|
|
118
139
|
*/
|
|
119
140
|
readonly kind: DemoVaultInterfaceMemberKind;
|
|
120
141
|
/**
|
|
@@ -122,7 +143,7 @@ export interface DemoVaultInterfaceCoverageSpec {
|
|
|
122
143
|
*/
|
|
123
144
|
readonly receiver: string;
|
|
124
145
|
/**
|
|
125
|
-
* The source file path (relative to the repo root) that declares the interface.
|
|
146
|
+
* The source file path (relative to the repo root) that declares the interface, class, or enum.
|
|
126
147
|
*/
|
|
127
148
|
readonly sourcePath: string;
|
|
128
149
|
}
|
|
@@ -144,16 +165,17 @@ export interface DemoVaultNonTrivialGuardSpec {
|
|
|
144
165
|
*/
|
|
145
166
|
readonly expectMember: string;
|
|
146
167
|
/**
|
|
147
|
-
* The name of the `export interface` whose members are re-parsed for the
|
|
168
|
+
* The name of the `export interface`, `export class`, or `export enum` whose members are re-parsed for the
|
|
169
|
+
* guard.
|
|
148
170
|
*/
|
|
149
171
|
readonly interfaceName: string;
|
|
150
172
|
/**
|
|
151
|
-
* The source file path (relative to the repo root) that declares the interface.
|
|
173
|
+
* The source file path (relative to the repo root) that declares the interface, class, or enum.
|
|
152
174
|
*/
|
|
153
175
|
readonly sourcePath: string;
|
|
154
176
|
}
|
|
155
177
|
/**
|
|
156
|
-
* The parsed members of a source interface.
|
|
178
|
+
* The parsed members of a source interface, class, or enum.
|
|
157
179
|
*/
|
|
158
180
|
export interface InterfaceMembers {
|
|
159
181
|
/**
|
|
@@ -181,6 +203,11 @@ export interface RegisterDemoVaultCoverageSuiteParams {
|
|
|
181
203
|
* The feature-doc linking check, or `undefined` when the plugin ships no `docs/` folder.
|
|
182
204
|
*/
|
|
183
205
|
readonly docs?: DemoVaultDocsCoverageSpec;
|
|
206
|
+
/**
|
|
207
|
+
* The modules whose `export function`s must each be demonstrated by their bare name, or `undefined` when the
|
|
208
|
+
* plugin exposes no such module to check.
|
|
209
|
+
*/
|
|
210
|
+
readonly functionModules?: DemoVaultFunctionsCoverageSpec[];
|
|
184
211
|
/**
|
|
185
212
|
* The interfaces whose members must each be demonstrated (and referenced without drift).
|
|
186
213
|
*/
|
|
@@ -238,11 +265,18 @@ export declare class DemoVaultCoverageChecker {
|
|
|
238
265
|
*/
|
|
239
266
|
findUnlinkedFeatureDocs(params: DemoVaultCoverageCheckerFindUnlinkedFeatureDocsParams): string[];
|
|
240
267
|
/**
|
|
241
|
-
* Parses the
|
|
268
|
+
* Parses the names of the `export function`s (including `async` and generator declarations) in a source file.
|
|
269
|
+
*
|
|
270
|
+
* @param params - The parameters for the lookup.
|
|
271
|
+
* @returns The exported function names in source order.
|
|
272
|
+
*/
|
|
273
|
+
getExportedFunctionNames(params: DemoVaultCoverageCheckerGetExportedFunctionNamesParams): string[];
|
|
274
|
+
/**
|
|
275
|
+
* Parses the members of an `export interface`, `export class`, or `export enum` declared in a source file.
|
|
242
276
|
*
|
|
243
277
|
* @param params - The parameters for the lookup.
|
|
244
278
|
* @returns The parsed {@link InterfaceMembers}.
|
|
245
|
-
* @throws When the interface cannot be found in the source file.
|
|
279
|
+
* @throws When the interface, class, or enum cannot be found in the source file.
|
|
246
280
|
*/
|
|
247
281
|
getInterfaceMembers(params: DemoVaultCoverageCheckerGetInterfaceMembersParams): InterfaceMembers;
|
|
248
282
|
/**
|
|
@@ -96,26 +96,29 @@ class DemoVaultCoverageChecker {
|
|
|
96
96
|
return featureDocs.filter((doc) => !linkedDocs.has(doc));
|
|
97
97
|
}
|
|
98
98
|
/**
|
|
99
|
-
* Parses the
|
|
99
|
+
* Parses the names of the `export function`s (including `async` and generator declarations) in a source file.
|
|
100
|
+
*
|
|
101
|
+
* @param params - The parameters for the lookup.
|
|
102
|
+
* @returns The exported function names in source order.
|
|
103
|
+
*/
|
|
104
|
+
getExportedFunctionNames(params) {
|
|
105
|
+
const source = readFileSync(join(this.rootFolder, params.sourcePath), "utf-8");
|
|
106
|
+
return [...source.matchAll(/^export (?:async )?function\*? (?<name>\w+)/gm)].map((match) => getMandatoryNamedGroup(match, "name"));
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Parses the members of an `export interface`, `export class`, or `export enum` declared in a source file.
|
|
100
110
|
*
|
|
101
111
|
* @param params - The parameters for the lookup.
|
|
102
112
|
* @returns The parsed {@link InterfaceMembers}.
|
|
103
|
-
* @throws When the interface cannot be found in the source file.
|
|
113
|
+
* @throws When the interface, class, or enum cannot be found in the source file.
|
|
104
114
|
*/
|
|
105
115
|
getInterfaceMembers(params) {
|
|
106
116
|
const source = readFileSync(join(this.rootFolder, params.sourcePath), "utf-8");
|
|
107
|
-
const match = new RegExp(`export interface ${params.interfaceName}
|
|
117
|
+
const match = new RegExp(`export (?<keyword>interface|class|enum) ${params.interfaceName}\\b[^{]*\\{(?<body>[\\s\\S]*?)\\n\\}`).exec(source);
|
|
108
118
|
if (!match) {
|
|
109
119
|
throw new Error(`Could not find interface ${params.interfaceName}`);
|
|
110
120
|
}
|
|
111
|
-
|
|
112
|
-
const methods = extractMethodNames(body);
|
|
113
|
-
const properties = extractPropertyNames(body);
|
|
114
|
-
return {
|
|
115
|
-
all: [...methods, ...properties],
|
|
116
|
-
methods,
|
|
117
|
-
properties
|
|
118
|
-
};
|
|
121
|
+
return parseMembers(getMandatoryNamedGroup(match, "keyword"), getMandatoryNamedGroup(match, "body"));
|
|
119
122
|
}
|
|
120
123
|
/**
|
|
121
124
|
* Reads and caches the demo corpus — every `*.md` note in the demo vault joined into one string.
|
|
@@ -163,6 +166,13 @@ function registerDemoVaultCoverageSuite(params) {
|
|
|
163
166
|
expect(checker.findUndemonstratedMembers({ members: members.properties })).toEqual([]);
|
|
164
167
|
});
|
|
165
168
|
}
|
|
169
|
+
for (const spec of params.functionModules ?? []) {
|
|
170
|
+
it(`demonstrates every exported function in ${spec.sourcePath}`, () => {
|
|
171
|
+
const functionNames = checker.getExportedFunctionNames(spec);
|
|
172
|
+
expect(functionNames.length).toBeGreaterThan(0);
|
|
173
|
+
expect(checker.findUndemonstratedMembers({ members: functionNames })).toEqual([]);
|
|
174
|
+
});
|
|
175
|
+
}
|
|
166
176
|
const docs = params.docs;
|
|
167
177
|
if (docs) {
|
|
168
178
|
it("links a demo note for every feature doc", () => {
|
|
@@ -177,14 +187,44 @@ function registerDemoVaultCoverageSuite(params) {
|
|
|
177
187
|
});
|
|
178
188
|
});
|
|
179
189
|
}
|
|
190
|
+
const CLASS_MEMBER_MODIFIERS = "(?:(?:public|private|protected|readonly|static|abstract|override)\\s+)*";
|
|
191
|
+
function buildMembers(methods, properties) {
|
|
192
|
+
return {
|
|
193
|
+
all: [...methods, ...properties],
|
|
194
|
+
methods,
|
|
195
|
+
properties
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
function extractClassMethodNames(classBody) {
|
|
199
|
+
return [...classBody.matchAll(new RegExp(`^ {2}(?<modifiers>${CLASS_MEMBER_MODIFIERS})(?<name>\\w+)(?:<[^>]*>)?\\(`, "gm"))].filter((match) => !isNonPublicMember(getMandatoryNamedGroup(match, "modifiers"))).map((match) => getMandatoryNamedGroup(match, "name"));
|
|
200
|
+
}
|
|
201
|
+
function extractClassPropertyNames(classBody) {
|
|
202
|
+
return [...classBody.matchAll(new RegExp(`^ {2}(?<modifiers>${CLASS_MEMBER_MODIFIERS})(?<name>\\w+)\\s*\\??\\s*[:=]`, "gm"))].filter((match) => !isNonPublicMember(getMandatoryNamedGroup(match, "modifiers"))).map((match) => getMandatoryNamedGroup(match, "name"));
|
|
203
|
+
}
|
|
204
|
+
function extractEnumMemberNames(enumBody) {
|
|
205
|
+
return [...enumBody.matchAll(/^ {2}(?<name>\w+)/gm)].map((match) => getMandatoryNamedGroup(match, "name"));
|
|
206
|
+
}
|
|
180
207
|
function extractMethodNames(interfaceBody) {
|
|
181
208
|
return [...interfaceBody.matchAll(/^ {2}(?<name>\w+)(?:<[^>]*>)?\(/gm)].map((match) => getMandatoryNamedGroup(match, "name"));
|
|
182
209
|
}
|
|
183
210
|
function extractPropertyNames(interfaceBody) {
|
|
184
211
|
return [...interfaceBody.matchAll(/^ {2}(?<name>\w+)\??:/gm)].map((match) => getMandatoryNamedGroup(match, "name"));
|
|
185
212
|
}
|
|
213
|
+
function isNonPublicMember(modifiers) {
|
|
214
|
+
return /\b(?:private|protected)\b/.test(modifiers);
|
|
215
|
+
}
|
|
216
|
+
function parseMembers(keyword, body) {
|
|
217
|
+
switch (keyword) {
|
|
218
|
+
case "class":
|
|
219
|
+
return buildMembers(extractClassMethodNames(body), extractClassPropertyNames(body));
|
|
220
|
+
case "enum":
|
|
221
|
+
return buildMembers([], extractEnumMemberNames(body));
|
|
222
|
+
default:
|
|
223
|
+
return buildMembers(extractMethodNames(body), extractPropertyNames(body));
|
|
224
|
+
}
|
|
225
|
+
}
|
|
186
226
|
export {
|
|
187
227
|
DemoVaultCoverageChecker,
|
|
188
228
|
registerDemoVaultCoverageSuite
|
|
189
229
|
};
|
|
190
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9kZW1vLXZhdWx0LWNvdmVyYWdlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogU3RhdGljIGNvdmVyYWdlL2ZyZXNobmVzcyBjaGVja3MgdGhhdCBrZWVwIGEgcGx1Z2luJ3MgaW4tcmVwbyBgZGVtby12YXVsdC9gIGluIHN5bmMgd2l0aCBpdHMgcHVibGljIHN1cmZhY2UuXG4gKlxuICogQSBwbHVnaW4gY2FuIHNoaXAgYSBjdXJhdGVkIGRlbW8gdmF1bHQgYXQgYGRlbW8tdmF1bHQvYCBpbiBpdHMgcmVwbyByb290LiBUaGVzZSBoZWxwZXJzIHJlZmxlY3QgdGhlIHJlYWxcbiAqIHB1YmxpYyBBUEkvY29uZmlnL2RvY3Mgc3RyYWlnaHQgZnJvbSBzb3VyY2UgYW5kIGFzc2VydCBcdTIwMTQgV0lUSE9VVCBsYXVuY2hpbmcgT2JzaWRpYW4gXHUyMDE0IHRoYXQgZXZlcnkgZmVhdHVyZSBpc1xuICogZGVtb25zdHJhdGVkIGluIHRoZSBub3RlcyBhbmQgdGhhdCB0aGUgbm90ZXMgcmVmZXJlbmNlIG5vIEFQSSBtZW1iZXIgdGhhdCBubyBsb25nZXIgZXhpc3RzIChyZW5hbWUgZHJpZnQpLlxuICogVGhlIHJ1bnRpbWUgYmVoYXZpb3Igb2YgdGhlIHBsdWdpbiBpcyBjb3ZlcmVkIGJ5IGl0cyBvdGhlciBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IGJ5IHRoZSBkZW1vIHZhdWx0OyB0aGVcbiAqIHZhdWx0IGlzIGEgbGVhcm5pbmcgcmVzb3VyY2UsIGFuZCB0aGVzZSBjaGVja3Mgb25seSBndWFyZCB0aGF0IGl0IHN0YXlzIHRydXRoZnVsLlxuICpcbiAqIFR3byBsYXllcnMgYXJlIGV4cG9zZWQ6XG4gKiAtIHtAbGluayBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJ9IFx1MjAxNCBhIGZyYW1ld29yay1hZ25vc3RpYyBjb3JlIHRoYXQgcmVhZHMgdGhlIGNvcnB1cywgcGFyc2VzIGludGVyZmFjZVxuICogICBtZW1iZXJzLCBhbmQgcmV0dXJucyBkaWFnbm9zdGljIGFycmF5cyAod2hhdCBpcyB1bmRlbW9uc3RyYXRlZCAvIHN0YWxlIC8gdW5saW5rZWQpLlxuICogLSB7QGxpbmsgcmVnaXN0ZXJEZW1vVmF1bHRDb3ZlcmFnZVN1aXRlfSBcdTIwMTQgYSB0aGluIHdyYXBwZXIgdGhhdCByZWdpc3RlcnMgYSBgdml0ZXN0YCBzdWl0ZSBvdmVyIHRoZSBjb3JlLCBzb1xuICogICBhIHBsdWdpbidzIGBkZW1vLXZhdWx0Lm5vLWFwcC5pbnRlZ3JhdGlvbi50ZXN0LnRzYCBpcyBhIHNpbmdsZSBkZWNsYXJhdGl2ZSBjYWxsLlxuICovXG5cbmltcG9ydCB7XG4gIHJlYWRkaXJTeW5jLFxuICByZWFkRmlsZVN5bmNcbn0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQge1xuICBkZXNjcmliZSxcbiAgZXhwZWN0LFxuICBpdFxufSBmcm9tICd2aXRlc3QnO1xuXG5pbXBvcnQgeyBPYnNpZGlhblBsdWdpblJlcG9QYXRocyB9IGZyb20gJy4uL29ic2lkaWFuL3BsdWdpbi9vYnNpZGlhbi1wbHVnaW4tcmVwby1wYXRocy50cyc7XG5pbXBvcnQge1xuICBqb2luLFxuICByZWxhdGl2ZVxufSBmcm9tICcuLi9wYXRoLnRzJztcbmltcG9ydCB7IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAgfSBmcm9tICcuLi9yZWctZXhwLnRzJztcblxuLyoqXG4gKiBSZWZsZWN0cyBhIGNvbmZpZyBpbnRlcmZhY2Ugd2hvc2Ugb3B0aW9ucyBhcmUgZGVtb25zdHJhdGVkIGJ5IHRoZWlyIGJhcmUgbmFtZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZW1vVmF1bHRDb25maWdJbnRlcmZhY2VDb3ZlcmFnZVNwZWMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGBleHBvcnQgaW50ZXJmYWNlYCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSB0aGUgY29uZmlnIG9wdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBpbnRlcmZhY2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgZmlsZSBwYXRoIChyZWxhdGl2ZSB0byB0aGUgcmVwbyByb290KSB0aGF0IGRlY2xhcmVzIHRoZSBpbnRlcmZhY2UuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSB7QGxpbmsgRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyfSBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgcGx1Z2luIHJlcG8gcm9vdCBcdTIwMTQgdGhlIGZvbGRlciBjb250YWluaW5nIGBkZW1vLXZhdWx0L2AgYW5kIHRoZSBzb3VyY2UgYmVpbmdcbiAgICogcmVmbGVjdGVkLiBDYWxsZXJzIHR5cGljYWxseSBwYXNzIGBnZXRSb290Rm9sZGVyKCkgPz8gcHJvY2Vzcy5jd2QoKWAuXG4gICAqL1xuICByZWFkb25seSByb290Rm9sZGVyOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIHtAbGluayBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXIuZmluZFN0YWxlUmVmZXJlbmNlc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyRmluZFN0YWxlUmVmZXJlbmNlc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgcmVjZWl2ZXIgd2hvc2UgYGAgYCR7cmVjZWl2ZXJ9LjxtZW1iZXI+YCBgYCByZWZlcmVuY2VzIGFyZSBzY2FubmVkIGZvciBpbiB0aGUgZGVtbyBjb3JwdXMuXG4gICAqL1xuICByZWFkb25seSByZWNlaXZlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbWVtYmVycyB0aGF0IGN1cnJlbnRseSBleGlzdCBvbiB0aGUgcmVjZWl2ZXI7IGFueSByZWZlcmVuY2VkIG1lbWJlciBub3QgaW4gdGhpcyBzZXQgaXMgc3RhbGUuXG4gICAqL1xuICByZWFkb25seSB2YWxpZE1lbWJlcnM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBwYXJhbWV0ZXJzIGZvciB7QGxpbmsgRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyLmZpbmRVbmRlbW9uc3RyYXRlZE1lbWJlcnN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlckZpbmRVbmRlbW9uc3RyYXRlZE1lbWJlcnNQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG1lbWJlciBuYW1lcyB0aGF0IG11c3QgZWFjaCBhcHBlYXIgaW4gdGhlIGRlbW8gY29ycHVzLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVtYmVyczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZW4gc2V0LCBhIG1lbWJlciBpcyBkZW1vbnN0cmF0ZWQgb25seSBpZiBgYCBgJHtyZWNlaXZlcn0uJHttZW1iZXJ9YCBgYCBhcHBlYXJzIChlLmcuIGEgY29udGV4dCBvYmplY3Qnc1xuICAgKiBtZXRob2RzKTsgd2hlbiBhYnNlbnQsIHRoZSBiYXJlIG1lbWJlciBuYW1lIGlzIGxvb2tlZCB1cCAoZS5nLiBhIGNvbmZpZyBvcHRpb24pLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVjZWl2ZXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIHtAbGluayBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXIuZmluZFVubGlua2VkRmVhdHVyZURvY3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlckZpbmRVbmxpbmtlZEZlYXR1cmVEb2NzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBkb2NzIGZvbGRlciAocmVsYXRpdmUgdG8gdGhlIHJlcG8gcm9vdCkgd2hvc2UgdG9wLWxldmVsIGAqLm1kYCBmaWxlcyBhcmUgdGhlIGZlYXR1cmUgZG9jcy5cbiAgICovXG4gIHJlYWRvbmx5IGRvY3NGb2xkZXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRvYyBiYXNlbmFtZXMgKHdpdGhvdXQgYC5tZGApIHRoYXQgYXJlIE5PVCBwZXItZmVhdHVyZSBwYWdlcyBhbmQgc28gbmVlZCBubyBsaW5raW5nIGRlbW8gbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IG5vbkZlYXR1cmVEb2NzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3Ige0BsaW5rIERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlci5nZXRJbnRlcmZhY2VNZW1iZXJzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJHZXRJbnRlcmZhY2VNZW1iZXJzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBgZXhwb3J0IGludGVyZmFjZWAgdG8gcGFyc2UuXG4gICAqL1xuICByZWFkb25seSBpbnRlcmZhY2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgZmlsZSBwYXRoIChyZWxhdGl2ZSB0byB0aGUgcmVwbyByb290KSB0aGF0IGRlY2xhcmVzIHRoZSBpbnRlcmZhY2UuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJlcyB0aGUgZmVhdHVyZS1kb2MgbGlua2luZyBjaGVjay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZW1vVmF1bHREb2NzQ292ZXJhZ2VTcGVjIHtcbiAgLyoqXG4gICAqIFRoZSBkb2NzIGZvbGRlciAocmVsYXRpdmUgdG8gdGhlIHJlcG8gcm9vdCkgd2hvc2UgdG9wLWxldmVsIGAqLm1kYCBmaWxlcyBhcmUgdGhlIGZlYXR1cmUgZG9jcy5cbiAgICovXG4gIHJlYWRvbmx5IGZvbGRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZG9jIGJhc2VuYW1lcyAod2l0aG91dCBgLm1kYCkgdGhhdCBhcmUgTk9UIHBlci1mZWF0dXJlIHBhZ2VzIGFuZCBzbyBuZWVkIG5vIGxpbmtpbmcgZGVtbyBub3RlLlxuICAgKi9cbiAgcmVhZG9ubHkgbm9uRmVhdHVyZURvY3M6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFJlZmxlY3RzIGEgc2luZ2xlIGludGVyZmFjZSdzIG1lbWJlcnMgYW5kIGRlbW9uc3RyYXRlcyB0aGVtIHZpYSBgYCBgJHtyZWNlaXZlcn0uPG1lbWJlcj5gIGBgIHJlZmVyZW5jZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVtb1ZhdWx0SW50ZXJmYWNlQ292ZXJhZ2VTcGVjIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBgZXhwb3J0IGludGVyZmFjZWAgdG8gcmVmbGVjdC5cbiAgICovXG4gIHJlYWRvbmx5IGludGVyZmFjZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZGVtb25zdHJhdGVkIG1lbWJlcnMgYXJlIHRoZSBpbnRlcmZhY2UncyBtZXRob2RzIG9yIGl0cyBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogRGVtb1ZhdWx0SW50ZXJmYWNlTWVtYmVyS2luZDtcblxuICAvKipcbiAgICogVGhlIGlkZW50aWZpZXIgdGhlIG5vdGVzIGNhbGwgdGhlIG1lbWJlcnMgb24gKGUuZy4gYGNvZGVCdXR0b25Db250ZXh0YCkuXG4gICAqL1xuICByZWFkb25seSByZWNlaXZlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIGZpbGUgcGF0aCAocmVsYXRpdmUgdG8gdGhlIHJlcG8gcm9vdCkgdGhhdCBkZWNsYXJlcyB0aGUgaW50ZXJmYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlUGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgYW4gaW50ZXJmYWNlJ3MgZGVtb25zdHJhdGVkIG1lbWJlcnMgYXJlIGl0cyBtZXRob2RzIG9yIGl0cyBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgdHlwZSBEZW1vVmF1bHRJbnRlcmZhY2VNZW1iZXJLaW5kID0gJ21ldGhvZHMnIHwgJ3Byb3BlcnRpZXMnO1xuXG4vKipcbiAqIENvbmZpZ3VyZXMgdGhlIGd1YXJkIHRoYXQgdGhlIHJlZmxlY3RlZCBzdXJmYWNlIGlzIG5vbi10cml2aWFsIChwcm90ZWN0cyBhZ2FpbnN0IGEgcGFyc2luZyByZWdyZXNzaW9uXG4gKiBzaWxlbnRseSBlbXB0eWluZyBldmVyeSBvdGhlciBjaGVjaykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVtb1ZhdWx0Tm9uVHJpdmlhbEd1YXJkU3BlYyB7XG4gIC8qKlxuICAgKiBBIGRlbW8gbm90ZSAocGF0aCByZWxhdGl2ZSB0byB0aGUgZGVtbyB2YXVsdCkgdGhhdCBtdXN0IGJlIHByZXNlbnQuXG4gICAqL1xuICByZWFkb25seSBleHBlY3REZW1vTm90ZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIG1lbWJlciB0aGF0IG11c3QgYmUgcmVmbGVjdGVkIGZyb20ge0BsaW5rIERlbW9WYXVsdE5vblRyaXZpYWxHdWFyZFNwZWMuaW50ZXJmYWNlTmFtZX0uXG4gICAqL1xuICByZWFkb25seSBleHBlY3RNZW1iZXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGBleHBvcnQgaW50ZXJmYWNlYCB3aG9zZSBtZW1iZXJzIGFyZSByZS1wYXJzZWQgZm9yIHRoZSBndWFyZC5cbiAgICovXG4gIHJlYWRvbmx5IGludGVyZmFjZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNvdXJjZSBmaWxlIHBhdGggKHJlbGF0aXZlIHRvIHRoZSByZXBvIHJvb3QpIHRoYXQgZGVjbGFyZXMgdGhlIGludGVyZmFjZS5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZVBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcGFyc2VkIG1lbWJlcnMgb2YgYSBzb3VyY2UgaW50ZXJmYWNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVyZmFjZU1lbWJlcnMge1xuICAvKipcbiAgICogRXZlcnkgbWVtYmVyIFx1MjAxNCB7QGxpbmsgSW50ZXJmYWNlTWVtYmVycy5tZXRob2RzfSBmb2xsb3dlZCBieSB7QGxpbmsgSW50ZXJmYWNlTWVtYmVycy5wcm9wZXJ0aWVzfS5cbiAgICovXG4gIHJlYWRvbmx5IGFsbDogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRob2QgbWVtYmVycyAoZGVjbGFyZWQgYXMgYG5hbWUoLi4uKWApLlxuICAgKi9cbiAgcmVhZG9ubHkgbWV0aG9kczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwcm9wZXJ0eSBtZW1iZXJzIChkZWNsYXJlZCBhcyBgbmFtZT86IC4uLmApLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvcGVydGllczogc3RyaW5nW107XG59XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIHtAbGluayByZWdpc3RlckRlbW9WYXVsdENvdmVyYWdlU3VpdGV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdGVyRGVtb1ZhdWx0Q292ZXJhZ2VTdWl0ZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgY29uZmlnIGludGVyZmFjZXMgd2hvc2Ugb3B0aW9ucyBtdXN0IGVhY2ggYmUgZGVtb25zdHJhdGVkIGJ5IHRoZWlyIGJhcmUgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IGNvbmZpZ0ludGVyZmFjZXM6IERlbW9WYXVsdENvbmZpZ0ludGVyZmFjZUNvdmVyYWdlU3BlY1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgZmVhdHVyZS1kb2MgbGlua2luZyBjaGVjaywgb3IgYHVuZGVmaW5lZGAgd2hlbiB0aGUgcGx1Z2luIHNoaXBzIG5vIGBkb2NzL2AgZm9sZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgZG9jcz86IERlbW9WYXVsdERvY3NDb3ZlcmFnZVNwZWM7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlcmZhY2VzIHdob3NlIG1lbWJlcnMgbXVzdCBlYWNoIGJlIGRlbW9uc3RyYXRlZCAoYW5kIHJlZmVyZW5jZWQgd2l0aG91dCBkcmlmdCkuXG4gICAqL1xuICByZWFkb25seSBpbnRlcmZhY2VzOiBEZW1vVmF1bHRJbnRlcmZhY2VDb3ZlcmFnZVNwZWNbXTtcblxuICAvKipcbiAgICogVGhlIGd1YXJkIHRoYXQga2VlcHMgdGhlIHJlZmxlY3RlZCBzdXJmYWNlIG5vbi10cml2aWFsLlxuICAgKi9cbiAgcmVhZG9ubHkgbm9uVHJpdmlhbEd1YXJkOiBEZW1vVmF1bHROb25Ucml2aWFsR3VhcmRTcGVjO1xuXG4gIC8qKlxuICAgKiBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgcGx1Z2luIHJlcG8gcm9vdC4gQ2FsbGVycyB0eXBpY2FsbHkgcGFzcyBgZ2V0Um9vdEZvbGRlcigpID8/IHByb2Nlc3MuY3dkKClgLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9vdEZvbGRlcjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlZmxlY3RzIGEgcGx1Z2luJ3MgcHVibGljIHN1cmZhY2UgZnJvbSBzb3VyY2UgYW5kIGNoZWNrcyBpdHMgaW4tcmVwbyBgZGVtby12YXVsdC9gIHN0YXlzIGluIHN5bmMgd2l0aCBpdC5cbiAqXG4gKiBFdmVyeSBtZXRob2QgaXMgYSBwdXJlIHF1ZXJ5IG92ZXIgZmlsZXMgdW5kZXIgdGhlIHJlcG8gcm9vdCAodGhlIGRlbW8gY29ycHVzIGlzIHJlYWQgb25jZSBhbmQgY2FjaGVkKSwgc29cbiAqIHRoZSBjaGVja2VyIGlzIHRyaXZpYWxseSB1bml0LXRlc3RhYmxlIGFnYWluc3QgYSBmaXh0dXJlIHJlcG8gYW5kIGNhcnJpZXMgbm8gdGVzdC1mcmFtZXdvcmsgZGVwZW5kZW5jeS5cbiAqL1xuZXhwb3J0IGNsYXNzIERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlciB7XG4gIHByaXZhdGUgY2FjaGVkQ29ycHVzOiBudWxsIHwgc3RyaW5nID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBkZW1vVmF1bHRGb2xkZXI6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSByb290Rm9sZGVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjaGVja2VyIHJvb3RlZCBhdCBhIHBsdWdpbiByZXBvLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlckNvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgdGhpcy5yb290Rm9sZGVyID0gcGFyYW1zLnJvb3RGb2xkZXI7XG4gICAgdGhpcy5kZW1vVmF1bHRGb2xkZXIgPSBqb2luKHRoaXMucm9vdEZvbGRlciwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRGVtb1ZhdWx0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0cyB0aGUgZGVtbyBub3RlcyBhcyBwYXRocyByZWxhdGl2ZSB0byB0aGUgZGVtbyB2YXVsdCBmb2xkZXIgKGZvciBhIG5vbi10cml2aWFsLXN1cmZhY2UgZ3VhcmQpLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgcmVsYXRpdmUgcGF0aHMgb2YgZXZlcnkgYCoubWRgIG5vdGUgaW4gdGhlIGRlbW8gdmF1bHQuXG4gICAqL1xuICBwdWJsaWMgY29sbGVjdERlbW9Ob3RlUmVsYXRpdmVQYXRocygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdE1hcmtkb3duRmlsZXModGhpcy5kZW1vVmF1bHRGb2xkZXIpLm1hcCgoZmlsZSkgPT4gcmVsYXRpdmUodGhpcy5kZW1vVmF1bHRGb2xkZXIsIGZpbGUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBtZW1iZXJzIHRoYXQgdGhlIGRlbW8gbm90ZXMgcmVmZXJlbmNlIG9uIGEgcmVjZWl2ZXIgYnV0IHRoYXQgbm8gbG9uZ2VyIGV4aXN0IG9uIGl0IChyZW5hbWUgZHJpZnQpLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBsb29rdXAuXG4gICAqIEByZXR1cm5zIFRoZSBkaXN0aW5jdCBzdGFsZSBtZW1iZXIgbmFtZXMgcmVmZXJlbmNlZCBpbiB0aGUgZGVtbyBjb3JwdXMuXG4gICAqL1xuICBwdWJsaWMgZmluZFN0YWxlUmVmZXJlbmNlcyhwYXJhbXM6IERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlckZpbmRTdGFsZVJlZmVyZW5jZXNQYXJhbXMpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgdmFsaWRNZW1iZXJzID0gbmV3IFNldChwYXJhbXMudmFsaWRNZW1iZXJzKTtcbiAgICBjb25zdCByZWZlcmVuY2VkID0gWy4uLnRoaXMucmVhZENvcnB1cygpLm1hdGNoQWxsKG5ldyBSZWdFeHAoYCR7cGFyYW1zLnJlY2VpdmVyfVxcXFwuKD88bWVtYmVyPlxcXFx3KylgLCAnZycpKV1cbiAgICAgIC5tYXAoKG1hdGNoKSA9PiBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnbWVtYmVyJykpO1xuICAgIHJldHVybiBbLi4ubmV3IFNldChyZWZlcmVuY2VkKV0uZmlsdGVyKChtZW1iZXIpID0+ICF2YWxpZE1lbWJlcnMuaGFzKG1lbWJlcikpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIG1lbWJlcnMgdGhhdCBhcmUgbm90IGRlbW9uc3RyYXRlZCBhbnl3aGVyZSBpbiB0aGUgZGVtbyBjb3JwdXMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGxvb2t1cC5cbiAgICogQHJldHVybnMgVGhlIG1lbWJlciBuYW1lcyB3aXRoIG5vIGRlbW9uc3RyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgZmluZFVuZGVtb25zdHJhdGVkTWVtYmVycyhwYXJhbXM6IERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlckZpbmRVbmRlbW9uc3RyYXRlZE1lbWJlcnNQYXJhbXMpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgY29ycHVzID0gdGhpcy5yZWFkQ29ycHVzKCk7XG4gICAgcmV0dXJuIHBhcmFtcy5tZW1iZXJzLmZpbHRlcigobWVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBuZWVkbGUgPSBwYXJhbXMucmVjZWl2ZXIgPT09IHVuZGVmaW5lZCA/IG1lbWJlciA6IGAke3BhcmFtcy5yZWNlaXZlcn0uJHttZW1iZXJ9YDtcbiAgICAgIHJldHVybiAhY29ycHVzLmluY2x1ZGVzKG5lZWRsZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgZmVhdHVyZSBkb2NzIHRoYXQgbm8gZGVtbyBub3RlIGxpbmtzIHRvLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBsb29rdXAuXG4gICAqIEByZXR1cm5zIFRoZSBmZWF0dXJlLWRvYyBiYXNlbmFtZXMgKHdpdGhvdXQgYC5tZGApIG5vdCBsaW5rZWQgZnJvbSBhbnkgZGVtbyBub3RlLlxuICAgKi9cbiAgcHVibGljIGZpbmRVbmxpbmtlZEZlYXR1cmVEb2NzKHBhcmFtczogRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyRmluZFVubGlua2VkRmVhdHVyZURvY3NQYXJhbXMpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgbm9uRmVhdHVyZURvY3MgPSBuZXcgU2V0KHBhcmFtcy5ub25GZWF0dXJlRG9jcyk7XG4gICAgY29uc3QgZmVhdHVyZURvY3MgPSByZWFkZGlyU3luYyhqb2luKHRoaXMucm9vdEZvbGRlciwgcGFyYW1zLmRvY3NGb2xkZXIpKVxuICAgICAgLmZpbHRlcigoZmlsZSkgPT4gZmlsZS5lbmRzV2l0aCgnLm1kJykpXG4gICAgICAubWFwKChmaWxlKSA9PiBmaWxlLnJlcGxhY2UoL1xcLm1kJC8sICcnKSlcbiAgICAgIC5maWx0ZXIoKG5hbWUpID0+ICFub25GZWF0dXJlRG9jcy5oYXMobmFtZSkpO1xuICAgIGNvbnN0IGxpbmtlZERvY3MgPSBuZXcgU2V0KFxuICAgICAgWy4uLnRoaXMucmVhZENvcnB1cygpLm1hdGNoQWxsKC9kb2NzXFwvKD88ZG9jPltcXHctXSspXFwubWQvZyldLm1hcCgobWF0Y2gpID0+IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdkb2MnKSlcbiAgICApO1xuICAgIHJldHVybiBmZWF0dXJlRG9jcy5maWx0ZXIoKGRvYykgPT4gIWxpbmtlZERvY3MuaGFzKGRvYykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyB0aGUgbWVtYmVycyBvZiBhbiBgZXhwb3J0IGludGVyZmFjZWAgZGVjbGFyZWQgaW4gYSBzb3VyY2UgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgbG9va3VwLlxuICAgKiBAcmV0dXJucyBUaGUgcGFyc2VkIHtAbGluayBJbnRlcmZhY2VNZW1iZXJzfS5cbiAgICogQHRocm93cyBXaGVuIHRoZSBpbnRlcmZhY2UgY2Fubm90IGJlIGZvdW5kIGluIHRoZSBzb3VyY2UgZmlsZS5cbiAgICovXG4gIHB1YmxpYyBnZXRJbnRlcmZhY2VNZW1iZXJzKHBhcmFtczogRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyR2V0SW50ZXJmYWNlTWVtYmVyc1BhcmFtcyk6IEludGVyZmFjZU1lbWJlcnMge1xuICAgIGNvbnN0IHNvdXJjZSA9IHJlYWRGaWxlU3luYyhqb2luKHRoaXMucm9vdEZvbGRlciwgcGFyYW1zLnNvdXJjZVBhdGgpLCAndXRmLTgnKTtcbiAgICBjb25zdCBtYXRjaCA9IG5ldyBSZWdFeHAoYGV4cG9ydCBpbnRlcmZhY2UgJHtwYXJhbXMuaW50ZXJmYWNlTmFtZX0gXFxcXHsoPzxib2R5PltcXFxcc1xcXFxTXSo/KVxcXFxuXFxcXH1gKS5leGVjKHNvdXJjZSk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBpbnRlcmZhY2UgJHtwYXJhbXMuaW50ZXJmYWNlTmFtZX1gKTtcbiAgICB9XG4gICAgY29uc3QgYm9keSA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdib2R5Jyk7XG4gICAgY29uc3QgbWV0aG9kcyA9IGV4dHJhY3RNZXRob2ROYW1lcyhib2R5KTtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gZXh0cmFjdFByb3BlcnR5TmFtZXMoYm9keSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFsbDogWy4uLm1ldGhvZHMsIC4uLnByb3BlcnRpZXNdLFxuICAgICAgbWV0aG9kcyxcbiAgICAgIHByb3BlcnRpZXNcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIGFuZCBjYWNoZXMgdGhlIGRlbW8gY29ycHVzIFx1MjAxNCBldmVyeSBgKi5tZGAgbm90ZSBpbiB0aGUgZGVtbyB2YXVsdCBqb2luZWQgaW50byBvbmUgc3RyaW5nLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgY29uY2F0ZW5hdGVkIGRlbW8tbm90ZSBjb250ZW50cy5cbiAgICovXG4gIHB1YmxpYyByZWFkQ29ycHVzKCk6IHN0cmluZyB7XG4gICAgdGhpcy5jYWNoZWRDb3JwdXMgPz89IHRoaXMuY29sbGVjdE1hcmtkb3duRmlsZXModGhpcy5kZW1vVmF1bHRGb2xkZXIpXG4gICAgICAubWFwKChmaWxlKSA9PiByZWFkRmlsZVN5bmMoZmlsZSwgJ3V0Zi04JykpXG4gICAgICAuam9pbignXFxuJyk7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVkQ29ycHVzO1xuICB9XG5cbiAgcHJpdmF0ZSBjb2xsZWN0TWFya2Rvd25GaWxlcyhmb2xkZXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiByZWFkZGlyU3luYyhmb2xkZXIsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KSkge1xuICAgICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgaWYgKGVudHJ5Lm5hbWUgPT09IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk5vZGVNb2R1bGVzIGFzIHN0cmluZykge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5wdXNoKC4uLnRoaXMuY29sbGVjdE1hcmtkb3duRmlsZXMoam9pbihmb2xkZXIsIGVudHJ5Lm5hbWUpKSk7XG4gICAgICB9IGVsc2UgaWYgKGVudHJ5Lm5hbWUuZW5kc1dpdGgoJy5tZCcpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGpvaW4oZm9sZGVyLCBlbnRyeS5uYW1lKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBgdml0ZXN0YCBzdWl0ZSB0aGF0IGtlZXBzIGEgcGx1Z2luJ3MgaW4tcmVwbyBgZGVtby12YXVsdC9gIGluIHN5bmMgd2l0aCBpdHMgcHVibGljIHN1cmZhY2UuXG4gKlxuICogQ2FsbCBpdCBvbmNlIGZyb20gYSBwbHVnaW4ncyBgZGVtby12YXVsdC5uby1hcHAuaW50ZWdyYXRpb24udGVzdC50c2A7IGl0IHJlZ2lzdGVycyBvbmUgdGVzdCBwZXIgY2hlY2ssXG4gKiBkZWxlZ2F0aW5nIHRvIHtAbGluayBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJ9LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZGVjbGFyYXRpdmUgY292ZXJhZ2Ugc3BlY2lmaWNhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRGVtb1ZhdWx0Q292ZXJhZ2VTdWl0ZShwYXJhbXM6IFJlZ2lzdGVyRGVtb1ZhdWx0Q292ZXJhZ2VTdWl0ZVBhcmFtcyk6IHZvaWQge1xuICBjb25zdCBjaGVja2VyID0gbmV3IERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlcih7IHJvb3RGb2xkZXI6IHBhcmFtcy5yb290Rm9sZGVyIH0pO1xuXG4gIGRlc2NyaWJlKCdkZW1vLXZhdWx0IGNvdmVyYWdlJywgKCkgPT4ge1xuICAgIGZvciAoY29uc3Qgc3BlYyBvZiBwYXJhbXMuaW50ZXJmYWNlcykge1xuICAgICAgaXQoYGRlbW9uc3RyYXRlcyBldmVyeSAke3NwZWMuaW50ZXJmYWNlTmFtZX0gJHtzcGVjLmtpbmR9YCwgKCkgPT4ge1xuICAgICAgICBjb25zdCBtZW1iZXJzID0gY2hlY2tlci5nZXRJbnRlcmZhY2VNZW1iZXJzKHNwZWMpO1xuICAgICAgICBjb25zdCBkZW1vbnN0cmF0ZWQgPSBtZW1iZXJzW3NwZWMua2luZF07XG4gICAgICAgIGV4cGVjdChkZW1vbnN0cmF0ZWQubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oMCk7XG4gICAgICAgIGV4cGVjdChjaGVja2VyLmZpbmRVbmRlbW9uc3RyYXRlZE1lbWJlcnMoeyBtZW1iZXJzOiBkZW1vbnN0cmF0ZWQsIHJlY2VpdmVyOiBzcGVjLnJlY2VpdmVyIH0pKS50b0VxdWFsKFtdKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdChgcmVmZXJlbmNlcyBubyAke3NwZWMuaW50ZXJmYWNlTmFtZX0gbWVtYmVyIHRoYXQgbm8gbG9uZ2VyIGV4aXN0c2AsICgpID0+IHtcbiAgICAgICAgY29uc3QgbWVtYmVycyA9IGNoZWNrZXIuZ2V0SW50ZXJmYWNlTWVtYmVycyhzcGVjKTtcbiAgICAgICAgZXhwZWN0KGNoZWNrZXIuZmluZFN0YWxlUmVmZXJlbmNlcyh7IHJlY2VpdmVyOiBzcGVjLnJlY2VpdmVyLCB2YWxpZE1lbWJlcnM6IG1lbWJlcnMuYWxsIH0pKS50b0VxdWFsKFtdKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc3BlYyBvZiBwYXJhbXMuY29uZmlnSW50ZXJmYWNlcykge1xuICAgICAgaXQoYGRlbW9uc3RyYXRlcyBldmVyeSAke3NwZWMuaW50ZXJmYWNlTmFtZX0gb3B0aW9uYCwgKCkgPT4ge1xuICAgICAgICBjb25zdCBtZW1iZXJzID0gY2hlY2tlci5nZXRJbnRlcmZhY2VNZW1iZXJzKHNwZWMpO1xuICAgICAgICBleHBlY3QobWVtYmVycy5wcm9wZXJ0aWVzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApO1xuICAgICAgICBleHBlY3QoY2hlY2tlci5maW5kVW5kZW1vbnN0cmF0ZWRNZW1iZXJzKHsgbWVtYmVyczogbWVtYmVycy5wcm9wZXJ0aWVzIH0pKS50b0VxdWFsKFtdKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGRvY3MgPSBwYXJhbXMuZG9jcztcbiAgICBpZiAoZG9jcykge1xuICAgICAgaXQoJ2xpbmtzIGEgZGVtbyBub3RlIGZvciBldmVyeSBmZWF0dXJlIGRvYycsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KGNoZWNrZXIuZmluZFVubGlua2VkRmVhdHVyZURvY3MoeyBkb2NzRm9sZGVyOiBkb2NzLmZvbGRlciwgbm9uRmVhdHVyZURvY3M6IGRvY3Mubm9uRmVhdHVyZURvY3MgfSkpXG4gICAgICAgICAgLnRvRXF1YWwoW10pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaXQoJ2tlZXBzIHRoZSByZWZsZWN0ZWQgc3VyZmFjZSBub24tdHJpdmlhbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGd1YXJkID0gcGFyYW1zLm5vblRyaXZpYWxHdWFyZDtcbiAgICAgIGNvbnN0IG1lbWJlcnMgPSBjaGVja2VyLmdldEludGVyZmFjZU1lbWJlcnMoZ3VhcmQpO1xuICAgICAgZXhwZWN0KG1lbWJlcnMuYWxsKS50b0NvbnRhaW4oZ3VhcmQuZXhwZWN0TWVtYmVyKTtcbiAgICAgIGV4cGVjdChjaGVja2VyLmNvbGxlY3REZW1vTm90ZVJlbGF0aXZlUGF0aHMoKSkudG9Db250YWluKGd1YXJkLmV4cGVjdERlbW9Ob3RlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RNZXRob2ROYW1lcyhpbnRlcmZhY2VCb2R5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbLi4uaW50ZXJmYWNlQm9keS5tYXRjaEFsbCgvXiB7Mn0oPzxuYW1lPlxcdyspKD86PFtePl0qPik/XFwoL2dtKV0ubWFwKChtYXRjaCkgPT4gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ25hbWUnKSk7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RQcm9wZXJ0eU5hbWVzKGludGVyZmFjZUJvZHk6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFsuLi5pbnRlcmZhY2VCb2R5Lm1hdGNoQWxsKC9eIHsyfSg/PG5hbWU+XFx3KylcXD8/Oi9nbSldLm1hcCgobWF0Y2gpID0+IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICduYW1lJykpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQkE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFTLCtCQUErQjtBQUN4QztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsOEJBQThCO0FBd05oQyxNQUFNLHlCQUF5QjtBQUFBLEVBQzVCLGVBQThCO0FBQUEsRUFDckI7QUFBQSxFQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1YsWUFBWSxRQUFtRDtBQUNwRSxTQUFLLGFBQWEsT0FBTztBQUN6QixTQUFLLGtCQUFrQixLQUFLLEtBQUssWUFBWSx3QkFBd0IsU0FBUztBQUFBLEVBQ2hGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT08sK0JBQXlDO0FBQzlDLFdBQU8sS0FBSyxxQkFBcUIsS0FBSyxlQUFlLEVBQUUsSUFBSSxDQUFDLFNBQVMsU0FBUyxLQUFLLGlCQUFpQixJQUFJLENBQUM7QUFBQSxFQUMzRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUU8sb0JBQW9CLFFBQXFFO0FBQzlGLFVBQU0sZUFBZSxJQUFJLElBQUksT0FBTyxZQUFZO0FBQ2hELFVBQU0sYUFBYSxDQUFDLEdBQUcsS0FBSyxXQUFXLEVBQUUsU0FBUyxJQUFJLE9BQU8sR0FBRyxPQUFPLFFBQVEsc0JBQXNCLEdBQUcsQ0FBQyxDQUFDLEVBQ3ZHLElBQUksQ0FBQyxVQUFVLHVCQUF1QixPQUFPLFFBQVEsQ0FBQztBQUN6RCxXQUFPLENBQUMsR0FBRyxJQUFJLElBQUksVUFBVSxDQUFDLEVBQUUs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
|
|
230
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9kZW1vLXZhdWx0LWNvdmVyYWdlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogU3RhdGljIGNvdmVyYWdlL2ZyZXNobmVzcyBjaGVja3MgdGhhdCBrZWVwIGEgcGx1Z2luJ3MgaW4tcmVwbyBgZGVtby12YXVsdC9gIGluIHN5bmMgd2l0aCBpdHMgcHVibGljIHN1cmZhY2UuXG4gKlxuICogQSBwbHVnaW4gY2FuIHNoaXAgYSBjdXJhdGVkIGRlbW8gdmF1bHQgYXQgYGRlbW8tdmF1bHQvYCBpbiBpdHMgcmVwbyByb290LiBUaGVzZSBoZWxwZXJzIHJlZmxlY3QgdGhlIHJlYWxcbiAqIHB1YmxpYyBBUEkvY29uZmlnL2RvY3Mgc3RyYWlnaHQgZnJvbSBzb3VyY2UgYW5kIGFzc2VydCBcdTIwMTQgV0lUSE9VVCBsYXVuY2hpbmcgT2JzaWRpYW4gXHUyMDE0IHRoYXQgZXZlcnkgZmVhdHVyZSBpc1xuICogZGVtb25zdHJhdGVkIGluIHRoZSBub3RlcyBhbmQgdGhhdCB0aGUgbm90ZXMgcmVmZXJlbmNlIG5vIEFQSSBtZW1iZXIgdGhhdCBubyBsb25nZXIgZXhpc3RzIChyZW5hbWUgZHJpZnQpLlxuICogVGhlIHJ1bnRpbWUgYmVoYXZpb3Igb2YgdGhlIHBsdWdpbiBpcyBjb3ZlcmVkIGJ5IGl0cyBvdGhlciBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IGJ5IHRoZSBkZW1vIHZhdWx0OyB0aGVcbiAqIHZhdWx0IGlzIGEgbGVhcm5pbmcgcmVzb3VyY2UsIGFuZCB0aGVzZSBjaGVja3Mgb25seSBndWFyZCB0aGF0IGl0IHN0YXlzIHRydXRoZnVsLlxuICpcbiAqIFR3byBsYXllcnMgYXJlIGV4cG9zZWQ6XG4gKiAtIHtAbGluayBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJ9IFx1MjAxNCBhIGZyYW1ld29yay1hZ25vc3RpYyBjb3JlIHRoYXQgcmVhZHMgdGhlIGNvcnB1cywgcGFyc2VzIGludGVyZmFjZSAvXG4gKiAgIGNsYXNzIC8gZW51bSBtZW1iZXJzIGFuZCBleHBvcnRlZCBmdW5jdGlvbnMsIGFuZCByZXR1cm5zIGRpYWdub3N0aWMgYXJyYXlzICh3aGF0IGlzIHVuZGVtb25zdHJhdGVkIC8gc3RhbGVcbiAqICAgLyB1bmxpbmtlZCkuXG4gKiAtIHtAbGluayByZWdpc3RlckRlbW9WYXVsdENvdmVyYWdlU3VpdGV9IFx1MjAxNCBhIHRoaW4gd3JhcHBlciB0aGF0IHJlZ2lzdGVycyBhIGB2aXRlc3RgIHN1aXRlIG92ZXIgdGhlIGNvcmUsIHNvXG4gKiAgIGEgcGx1Z2luJ3MgYGRlbW8tdmF1bHQubm8tYXBwLmludGVncmF0aW9uLnRlc3QudHNgIGlzIGEgc2luZ2xlIGRlY2xhcmF0aXZlIGNhbGwuXG4gKi9cblxuaW1wb3J0IHtcbiAgcmVhZGRpclN5bmMsXG4gIHJlYWRGaWxlU3luY1xufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7XG4gIGRlc2NyaWJlLFxuICBleHBlY3QsXG4gIGl0XG59IGZyb20gJ3ZpdGVzdCc7XG5cbmltcG9ydCB7IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzIH0gZnJvbSAnLi4vb2JzaWRpYW4vcGx1Z2luL29ic2lkaWFuLXBsdWdpbi1yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7XG4gIGpvaW4sXG4gIHJlbGF0aXZlXG59IGZyb20gJy4uL3BhdGgudHMnO1xuaW1wb3J0IHsgZ2V0TWFuZGF0b3J5TmFtZWRHcm91cCB9IGZyb20gJy4uL3JlZy1leHAudHMnO1xuXG4vKipcbiAqIFJlZmxlY3RzIGEgY29uZmlnIGludGVyZmFjZSB3aG9zZSBvcHRpb25zIGFyZSBkZW1vbnN0cmF0ZWQgYnkgdGhlaXIgYmFyZSBuYW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlbW9WYXVsdENvbmZpZ0ludGVyZmFjZUNvdmVyYWdlU3BlYyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYGV4cG9ydCBpbnRlcmZhY2VgLCBgZXhwb3J0IGNsYXNzYCwgb3IgYGV4cG9ydCBlbnVtYCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSB0aGUgY29uZmlnXG4gICAqIG9wdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBpbnRlcmZhY2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgZmlsZSBwYXRoIChyZWxhdGl2ZSB0byB0aGUgcmVwbyByb290KSB0aGF0IGRlY2xhcmVzIHRoZSBpbnRlcmZhY2UsIGNsYXNzLCBvciBlbnVtLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlUGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUge0BsaW5rIERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlcn0gY29uc3RydWN0b3IuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyQ29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFic29sdXRlIHBhdGggb2YgdGhlIHBsdWdpbiByZXBvIHJvb3QgXHUyMDE0IHRoZSBmb2xkZXIgY29udGFpbmluZyBgZGVtby12YXVsdC9gIGFuZCB0aGUgc291cmNlIGJlaW5nXG4gICAqIHJlZmxlY3RlZC4gQ2FsbGVycyB0eXBpY2FsbHkgcGFzcyBgZ2V0Um9vdEZvbGRlcigpID8/IHByb2Nlc3MuY3dkKClgLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9vdEZvbGRlcjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBwYXJhbWV0ZXJzIGZvciB7QGxpbmsgRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyLmZpbmRTdGFsZVJlZmVyZW5jZXN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlckZpbmRTdGFsZVJlZmVyZW5jZXNQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHJlY2VpdmVyIHdob3NlIGBgIGAke3JlY2VpdmVyfS48bWVtYmVyPmAgYGAgcmVmZXJlbmNlcyBhcmUgc2Nhbm5lZCBmb3IgaW4gdGhlIGRlbW8gY29ycHVzLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVjZWl2ZXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1lbWJlcnMgdGhhdCBjdXJyZW50bHkgZXhpc3Qgb24gdGhlIHJlY2VpdmVyOyBhbnkgcmVmZXJlbmNlZCBtZW1iZXIgbm90IGluIHRoaXMgc2V0IGlzIHN0YWxlLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsaWRNZW1iZXJzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3Ige0BsaW5rIERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlci5maW5kVW5kZW1vbnN0cmF0ZWRNZW1iZXJzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJGaW5kVW5kZW1vbnN0cmF0ZWRNZW1iZXJzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBtZW1iZXIgbmFtZXMgdGhhdCBtdXN0IGVhY2ggYXBwZWFyIGluIHRoZSBkZW1vIGNvcnB1cy5cbiAgICovXG4gIHJlYWRvbmx5IG1lbWJlcnM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGVuIHNldCwgYSBtZW1iZXIgaXMgZGVtb25zdHJhdGVkIG9ubHkgaWYgYGAgYCR7cmVjZWl2ZXJ9LiR7bWVtYmVyfWAgYGAgYXBwZWFycyAoZS5nLiBhIGNvbnRleHQgb2JqZWN0J3NcbiAgICogbWV0aG9kcyk7IHdoZW4gYWJzZW50LCB0aGUgYmFyZSBtZW1iZXIgbmFtZSBpcyBsb29rZWQgdXAgKGUuZy4gYSBjb25maWcgb3B0aW9uKS5cbiAgICovXG4gIHJlYWRvbmx5IHJlY2VpdmVyPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBwYXJhbWV0ZXJzIGZvciB7QGxpbmsgRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyLmZpbmRVbmxpbmtlZEZlYXR1cmVEb2NzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJGaW5kVW5saW5rZWRGZWF0dXJlRG9jc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZG9jcyBmb2xkZXIgKHJlbGF0aXZlIHRvIHRoZSByZXBvIHJvb3QpIHdob3NlIHRvcC1sZXZlbCBgKi5tZGAgZmlsZXMgYXJlIHRoZSBmZWF0dXJlIGRvY3MuXG4gICAqL1xuICByZWFkb25seSBkb2NzRm9sZGVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkb2MgYmFzZW5hbWVzICh3aXRob3V0IGAubWRgKSB0aGF0IGFyZSBOT1QgcGVyLWZlYXR1cmUgcGFnZXMgYW5kIHNvIG5lZWQgbm8gbGlua2luZyBkZW1vIG5vdGUuXG4gICAqL1xuICByZWFkb25seSBub25GZWF0dXJlRG9jczogc3RyaW5nW107XG59XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIHtAbGluayBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXIuZ2V0RXhwb3J0ZWRGdW5jdGlvbk5hbWVzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJHZXRFeHBvcnRlZEZ1bmN0aW9uTmFtZXNQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHNvdXJjZSBmaWxlIHBhdGggKHJlbGF0aXZlIHRvIHRoZSByZXBvIHJvb3QpIHdob3NlIGBleHBvcnQgZnVuY3Rpb25gcyBhcmUgcGFyc2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlUGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBwYXJhbWV0ZXJzIGZvciB7QGxpbmsgRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyLmdldEludGVyZmFjZU1lbWJlcnN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlckdldEludGVyZmFjZU1lbWJlcnNQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGBleHBvcnQgaW50ZXJmYWNlYCwgYGV4cG9ydCBjbGFzc2AsIG9yIGBleHBvcnQgZW51bWAgdG8gcGFyc2UuXG4gICAqL1xuICByZWFkb25seSBpbnRlcmZhY2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgZmlsZSBwYXRoIChyZWxhdGl2ZSB0byB0aGUgcmVwbyByb290KSB0aGF0IGRlY2xhcmVzIHRoZSBpbnRlcmZhY2UsIGNsYXNzLCBvciBlbnVtLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlUGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyZXMgdGhlIGZlYXR1cmUtZG9jIGxpbmtpbmcgY2hlY2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVtb1ZhdWx0RG9jc0NvdmVyYWdlU3BlYyB7XG4gIC8qKlxuICAgKiBUaGUgZG9jcyBmb2xkZXIgKHJlbGF0aXZlIHRvIHRoZSByZXBvIHJvb3QpIHdob3NlIHRvcC1sZXZlbCBgKi5tZGAgZmlsZXMgYXJlIHRoZSBmZWF0dXJlIGRvY3MuXG4gICAqL1xuICByZWFkb25seSBmb2xkZXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRvYyBiYXNlbmFtZXMgKHdpdGhvdXQgYC5tZGApIHRoYXQgYXJlIE5PVCBwZXItZmVhdHVyZSBwYWdlcyBhbmQgc28gbmVlZCBubyBsaW5raW5nIGRlbW8gbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IG5vbkZlYXR1cmVEb2NzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBSZWZsZWN0cyBhIG1vZHVsZSdzIGV4cG9ydGVkIGZ1bmN0aW9ucywgZWFjaCBkZW1vbnN0cmF0ZWQgYnkgaXRzIGJhcmUgbmFtZSBpbiB0aGUgZGVtbyBjb3JwdXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVtb1ZhdWx0RnVuY3Rpb25zQ292ZXJhZ2VTcGVjIHtcbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgZmlsZSBwYXRoIChyZWxhdGl2ZSB0byB0aGUgcmVwbyByb290KSB3aG9zZSBgZXhwb3J0IGZ1bmN0aW9uYHMgbXVzdCBlYWNoIGJlIGRlbW9uc3RyYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZVBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZWZsZWN0cyBhIHNpbmdsZSBpbnRlcmZhY2UncyBtZW1iZXJzIGFuZCBkZW1vbnN0cmF0ZXMgdGhlbSB2aWEgYGAgYCR7cmVjZWl2ZXJ9LjxtZW1iZXI+YCBgYCByZWZlcmVuY2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlbW9WYXVsdEludGVyZmFjZUNvdmVyYWdlU3BlYyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYGV4cG9ydCBpbnRlcmZhY2VgLCBgZXhwb3J0IGNsYXNzYCwgb3IgYGV4cG9ydCBlbnVtYCB0byByZWZsZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJmYWNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBkZW1vbnN0cmF0ZWQgbWVtYmVycyBhcmUgdGhlIHJlZmxlY3RlZCB0eXBlJ3MgbWV0aG9kcyBvciBpdHMgcHJvcGVydGllcyAoZW51bSBtZW1iZXJzIGNvdW50IGFzXG4gICAqIHByb3BlcnRpZXMpLlxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogRGVtb1ZhdWx0SW50ZXJmYWNlTWVtYmVyS2luZDtcblxuICAvKipcbiAgICogVGhlIGlkZW50aWZpZXIgdGhlIG5vdGVzIGNhbGwgdGhlIG1lbWJlcnMgb24gKGUuZy4gYGNvZGVCdXR0b25Db250ZXh0YCkuXG4gICAqL1xuICByZWFkb25seSByZWNlaXZlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIGZpbGUgcGF0aCAocmVsYXRpdmUgdG8gdGhlIHJlcG8gcm9vdCkgdGhhdCBkZWNsYXJlcyB0aGUgaW50ZXJmYWNlLCBjbGFzcywgb3IgZW51bS5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZVBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGFuIGludGVyZmFjZSdzIGRlbW9uc3RyYXRlZCBtZW1iZXJzIGFyZSBpdHMgbWV0aG9kcyBvciBpdHMgcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IHR5cGUgRGVtb1ZhdWx0SW50ZXJmYWNlTWVtYmVyS2luZCA9ICdtZXRob2RzJyB8ICdwcm9wZXJ0aWVzJztcblxuLyoqXG4gKiBDb25maWd1cmVzIHRoZSBndWFyZCB0aGF0IHRoZSByZWZsZWN0ZWQgc3VyZmFjZSBpcyBub24tdHJpdmlhbCAocHJvdGVjdHMgYWdhaW5zdCBhIHBhcnNpbmcgcmVncmVzc2lvblxuICogc2lsZW50bHkgZW1wdHlpbmcgZXZlcnkgb3RoZXIgY2hlY2spLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlbW9WYXVsdE5vblRyaXZpYWxHdWFyZFNwZWMge1xuICAvKipcbiAgICogQSBkZW1vIG5vdGUgKHBhdGggcmVsYXRpdmUgdG8gdGhlIGRlbW8gdmF1bHQpIHRoYXQgbXVzdCBiZSBwcmVzZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgZXhwZWN0RGVtb05vdGU6IHN0cmluZztcblxuICAvKipcbiAgICogQSBtZW1iZXIgdGhhdCBtdXN0IGJlIHJlZmxlY3RlZCBmcm9tIHtAbGluayBEZW1vVmF1bHROb25Ucml2aWFsR3VhcmRTcGVjLmludGVyZmFjZU5hbWV9LlxuICAgKi9cbiAgcmVhZG9ubHkgZXhwZWN0TWVtYmVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBgZXhwb3J0IGludGVyZmFjZWAsIGBleHBvcnQgY2xhc3NgLCBvciBgZXhwb3J0IGVudW1gIHdob3NlIG1lbWJlcnMgYXJlIHJlLXBhcnNlZCBmb3IgdGhlXG4gICAqIGd1YXJkLlxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJmYWNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIGZpbGUgcGF0aCAocmVsYXRpdmUgdG8gdGhlIHJlcG8gcm9vdCkgdGhhdCBkZWNsYXJlcyB0aGUgaW50ZXJmYWNlLCBjbGFzcywgb3IgZW51bS5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZVBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcGFyc2VkIG1lbWJlcnMgb2YgYSBzb3VyY2UgaW50ZXJmYWNlLCBjbGFzcywgb3IgZW51bS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlcmZhY2VNZW1iZXJzIHtcbiAgLyoqXG4gICAqIEV2ZXJ5IG1lbWJlciBcdTIwMTQge0BsaW5rIEludGVyZmFjZU1lbWJlcnMubWV0aG9kc30gZm9sbG93ZWQgYnkge0BsaW5rIEludGVyZmFjZU1lbWJlcnMucHJvcGVydGllc30uXG4gICAqL1xuICByZWFkb25seSBhbGw6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgbWV0aG9kIG1lbWJlcnMgKGRlY2xhcmVkIGFzIGBuYW1lKC4uLilgKS5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGhvZHM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvcGVydHkgbWVtYmVycyAoZGVjbGFyZWQgYXMgYG5hbWU/OiAuLi5gKS5cbiAgICovXG4gIHJlYWRvbmx5IHByb3BlcnRpZXM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBwYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVnaXN0ZXJEZW1vVmF1bHRDb3ZlcmFnZVN1aXRlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlckRlbW9WYXVsdENvdmVyYWdlU3VpdGVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGNvbmZpZyBpbnRlcmZhY2VzIHdob3NlIG9wdGlvbnMgbXVzdCBlYWNoIGJlIGRlbW9uc3RyYXRlZCBieSB0aGVpciBiYXJlIG5hbWUuXG4gICAqL1xuICByZWFkb25seSBjb25maWdJbnRlcmZhY2VzOiBEZW1vVmF1bHRDb25maWdJbnRlcmZhY2VDb3ZlcmFnZVNwZWNbXTtcblxuICAvKipcbiAgICogVGhlIGZlYXR1cmUtZG9jIGxpbmtpbmcgY2hlY2ssIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhlIHBsdWdpbiBzaGlwcyBubyBgZG9jcy9gIGZvbGRlci5cbiAgICovXG4gIHJlYWRvbmx5IGRvY3M/OiBEZW1vVmF1bHREb2NzQ292ZXJhZ2VTcGVjO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kdWxlcyB3aG9zZSBgZXhwb3J0IGZ1bmN0aW9uYHMgbXVzdCBlYWNoIGJlIGRlbW9uc3RyYXRlZCBieSB0aGVpciBiYXJlIG5hbWUsIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhlXG4gICAqIHBsdWdpbiBleHBvc2VzIG5vIHN1Y2ggbW9kdWxlIHRvIGNoZWNrLlxuICAgKi9cbiAgcmVhZG9ubHkgZnVuY3Rpb25Nb2R1bGVzPzogRGVtb1ZhdWx0RnVuY3Rpb25zQ292ZXJhZ2VTcGVjW107XG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlcmZhY2VzIHdob3NlIG1lbWJlcnMgbXVzdCBlYWNoIGJlIGRlbW9uc3RyYXRlZCAoYW5kIHJlZmVyZW5jZWQgd2l0aG91dCBkcmlmdCkuXG4gICAqL1xuICByZWFkb25seSBpbnRlcmZhY2VzOiBEZW1vVmF1bHRJbnRlcmZhY2VDb3ZlcmFnZVNwZWNbXTtcblxuICAvKipcbiAgICogVGhlIGd1YXJkIHRoYXQga2VlcHMgdGhlIHJlZmxlY3RlZCBzdXJmYWNlIG5vbi10cml2aWFsLlxuICAgKi9cbiAgcmVhZG9ubHkgbm9uVHJpdmlhbEd1YXJkOiBEZW1vVmF1bHROb25Ucml2aWFsR3VhcmRTcGVjO1xuXG4gIC8qKlxuICAgKiBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgcGx1Z2luIHJlcG8gcm9vdC4gQ2FsbGVycyB0eXBpY2FsbHkgcGFzcyBgZ2V0Um9vdEZvbGRlcigpID8/IHByb2Nlc3MuY3dkKClgLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9vdEZvbGRlcjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlZmxlY3RzIGEgcGx1Z2luJ3MgcHVibGljIHN1cmZhY2UgZnJvbSBzb3VyY2UgYW5kIGNoZWNrcyBpdHMgaW4tcmVwbyBgZGVtby12YXVsdC9gIHN0YXlzIGluIHN5bmMgd2l0aCBpdC5cbiAqXG4gKiBFdmVyeSBtZXRob2QgaXMgYSBwdXJlIHF1ZXJ5IG92ZXIgZmlsZXMgdW5kZXIgdGhlIHJlcG8gcm9vdCAodGhlIGRlbW8gY29ycHVzIGlzIHJlYWQgb25jZSBhbmQgY2FjaGVkKSwgc29cbiAqIHRoZSBjaGVja2VyIGlzIHRyaXZpYWxseSB1bml0LXRlc3RhYmxlIGFnYWluc3QgYSBmaXh0dXJlIHJlcG8gYW5kIGNhcnJpZXMgbm8gdGVzdC1mcmFtZXdvcmsgZGVwZW5kZW5jeS5cbiAqL1xuZXhwb3J0IGNsYXNzIERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlciB7XG4gIHByaXZhdGUgY2FjaGVkQ29ycHVzOiBudWxsIHwgc3RyaW5nID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBkZW1vVmF1bHRGb2xkZXI6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSByb290Rm9sZGVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjaGVja2VyIHJvb3RlZCBhdCBhIHBsdWdpbiByZXBvLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlckNvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgdGhpcy5yb290Rm9sZGVyID0gcGFyYW1zLnJvb3RGb2xkZXI7XG4gICAgdGhpcy5kZW1vVmF1bHRGb2xkZXIgPSBqb2luKHRoaXMucm9vdEZvbGRlciwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRGVtb1ZhdWx0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0cyB0aGUgZGVtbyBub3RlcyBhcyBwYXRocyByZWxhdGl2ZSB0byB0aGUgZGVtbyB2YXVsdCBmb2xkZXIgKGZvciBhIG5vbi10cml2aWFsLXN1cmZhY2UgZ3VhcmQpLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgcmVsYXRpdmUgcGF0aHMgb2YgZXZlcnkgYCoubWRgIG5vdGUgaW4gdGhlIGRlbW8gdmF1bHQuXG4gICAqL1xuICBwdWJsaWMgY29sbGVjdERlbW9Ob3RlUmVsYXRpdmVQYXRocygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdE1hcmtkb3duRmlsZXModGhpcy5kZW1vVmF1bHRGb2xkZXIpLm1hcCgoZmlsZSkgPT4gcmVsYXRpdmUodGhpcy5kZW1vVmF1bHRGb2xkZXIsIGZpbGUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBtZW1iZXJzIHRoYXQgdGhlIGRlbW8gbm90ZXMgcmVmZXJlbmNlIG9uIGEgcmVjZWl2ZXIgYnV0IHRoYXQgbm8gbG9uZ2VyIGV4aXN0IG9uIGl0IChyZW5hbWUgZHJpZnQpLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBsb29rdXAuXG4gICAqIEByZXR1cm5zIFRoZSBkaXN0aW5jdCBzdGFsZSBtZW1iZXIgbmFtZXMgcmVmZXJlbmNlZCBpbiB0aGUgZGVtbyBjb3JwdXMuXG4gICAqL1xuICBwdWJsaWMgZmluZFN0YWxlUmVmZXJlbmNlcyhwYXJhbXM6IERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlckZpbmRTdGFsZVJlZmVyZW5jZXNQYXJhbXMpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgdmFsaWRNZW1iZXJzID0gbmV3IFNldChwYXJhbXMudmFsaWRNZW1iZXJzKTtcbiAgICBjb25zdCByZWZlcmVuY2VkID0gWy4uLnRoaXMucmVhZENvcnB1cygpLm1hdGNoQWxsKG5ldyBSZWdFeHAoYCR7cGFyYW1zLnJlY2VpdmVyfVxcXFwuKD88bWVtYmVyPlxcXFx3KylgLCAnZycpKV1cbiAgICAgIC5tYXAoKG1hdGNoKSA9PiBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnbWVtYmVyJykpO1xuICAgIHJldHVybiBbLi4ubmV3IFNldChyZWZlcmVuY2VkKV0uZmlsdGVyKChtZW1iZXIpID0+ICF2YWxpZE1lbWJlcnMuaGFzKG1lbWJlcikpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIG1lbWJlcnMgdGhhdCBhcmUgbm90IGRlbW9uc3RyYXRlZCBhbnl3aGVyZSBpbiB0aGUgZGVtbyBjb3JwdXMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGxvb2t1cC5cbiAgICogQHJldHVybnMgVGhlIG1lbWJlciBuYW1lcyB3aXRoIG5vIGRlbW9uc3RyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgZmluZFVuZGVtb25zdHJhdGVkTWVtYmVycyhwYXJhbXM6IERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlckZpbmRVbmRlbW9uc3RyYXRlZE1lbWJlcnNQYXJhbXMpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgY29ycHVzID0gdGhpcy5yZWFkQ29ycHVzKCk7XG4gICAgcmV0dXJuIHBhcmFtcy5tZW1iZXJzLmZpbHRlcigobWVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBuZWVkbGUgPSBwYXJhbXMucmVjZWl2ZXIgPT09IHVuZGVmaW5lZCA/IG1lbWJlciA6IGAke3BhcmFtcy5yZWNlaXZlcn0uJHttZW1iZXJ9YDtcbiAgICAgIHJldHVybiAhY29ycHVzLmluY2x1ZGVzKG5lZWRsZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgZmVhdHVyZSBkb2NzIHRoYXQgbm8gZGVtbyBub3RlIGxpbmtzIHRvLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBsb29rdXAuXG4gICAqIEByZXR1cm5zIFRoZSBmZWF0dXJlLWRvYyBiYXNlbmFtZXMgKHdpdGhvdXQgYC5tZGApIG5vdCBsaW5rZWQgZnJvbSBhbnkgZGVtbyBub3RlLlxuICAgKi9cbiAgcHVibGljIGZpbmRVbmxpbmtlZEZlYXR1cmVEb2NzKHBhcmFtczogRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyRmluZFVubGlua2VkRmVhdHVyZURvY3NQYXJhbXMpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgbm9uRmVhdHVyZURvY3MgPSBuZXcgU2V0KHBhcmFtcy5ub25GZWF0dXJlRG9jcyk7XG4gICAgY29uc3QgZmVhdHVyZURvY3MgPSByZWFkZGlyU3luYyhqb2luKHRoaXMucm9vdEZvbGRlciwgcGFyYW1zLmRvY3NGb2xkZXIpKVxuICAgICAgLmZpbHRlcigoZmlsZSkgPT4gZmlsZS5lbmRzV2l0aCgnLm1kJykpXG4gICAgICAubWFwKChmaWxlKSA9PiBmaWxlLnJlcGxhY2UoL1xcLm1kJC8sICcnKSlcbiAgICAgIC5maWx0ZXIoKG5hbWUpID0+ICFub25GZWF0dXJlRG9jcy5oYXMobmFtZSkpO1xuICAgIGNvbnN0IGxpbmtlZERvY3MgPSBuZXcgU2V0KFxuICAgICAgWy4uLnRoaXMucmVhZENvcnB1cygpLm1hdGNoQWxsKC9kb2NzXFwvKD88ZG9jPltcXHctXSspXFwubWQvZyldLm1hcCgobWF0Y2gpID0+IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdkb2MnKSlcbiAgICApO1xuICAgIHJldHVybiBmZWF0dXJlRG9jcy5maWx0ZXIoKGRvYykgPT4gIWxpbmtlZERvY3MuaGFzKGRvYykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyB0aGUgbmFtZXMgb2YgdGhlIGBleHBvcnQgZnVuY3Rpb25gcyAoaW5jbHVkaW5nIGBhc3luY2AgYW5kIGdlbmVyYXRvciBkZWNsYXJhdGlvbnMpIGluIGEgc291cmNlIGZpbGUuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGxvb2t1cC5cbiAgICogQHJldHVybnMgVGhlIGV4cG9ydGVkIGZ1bmN0aW9uIG5hbWVzIGluIHNvdXJjZSBvcmRlci5cbiAgICovXG4gIHB1YmxpYyBnZXRFeHBvcnRlZEZ1bmN0aW9uTmFtZXMocGFyYW1zOiBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJHZXRFeHBvcnRlZEZ1bmN0aW9uTmFtZXNQYXJhbXMpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc291cmNlID0gcmVhZEZpbGVTeW5jKGpvaW4odGhpcy5yb290Rm9sZGVyLCBwYXJhbXMuc291cmNlUGF0aCksICd1dGYtOCcpO1xuICAgIHJldHVybiBbLi4uc291cmNlLm1hdGNoQWxsKC9eZXhwb3J0ICg/OmFzeW5jICk/ZnVuY3Rpb25cXCo/ICg/PG5hbWU+XFx3KykvZ20pXVxuICAgICAgLm1hcCgobWF0Y2gpID0+IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICduYW1lJykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyB0aGUgbWVtYmVycyBvZiBhbiBgZXhwb3J0IGludGVyZmFjZWAsIGBleHBvcnQgY2xhc3NgLCBvciBgZXhwb3J0IGVudW1gIGRlY2xhcmVkIGluIGEgc291cmNlIGZpbGUuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGxvb2t1cC5cbiAgICogQHJldHVybnMgVGhlIHBhcnNlZCB7QGxpbmsgSW50ZXJmYWNlTWVtYmVyc30uXG4gICAqIEB0aHJvd3MgV2hlbiB0aGUgaW50ZXJmYWNlLCBjbGFzcywgb3IgZW51bSBjYW5ub3QgYmUgZm91bmQgaW4gdGhlIHNvdXJjZSBmaWxlLlxuICAgKi9cbiAgcHVibGljIGdldEludGVyZmFjZU1lbWJlcnMocGFyYW1zOiBEZW1vVmF1bHRDb3ZlcmFnZUNoZWNrZXJHZXRJbnRlcmZhY2VNZW1iZXJzUGFyYW1zKTogSW50ZXJmYWNlTWVtYmVycyB7XG4gICAgY29uc3Qgc291cmNlID0gcmVhZEZpbGVTeW5jKGpvaW4odGhpcy5yb290Rm9sZGVyLCBwYXJhbXMuc291cmNlUGF0aCksICd1dGYtOCcpO1xuICAgIGNvbnN0IG1hdGNoID0gbmV3IFJlZ0V4cChgZXhwb3J0ICg/PGtleXdvcmQ+aW50ZXJmYWNlfGNsYXNzfGVudW0pICR7cGFyYW1zLmludGVyZmFjZU5hbWV9XFxcXGJbXntdKlxcXFx7KD88Ym9keT5bXFxcXHNcXFxcU10qPylcXFxcblxcXFx9YCkuZXhlYyhzb3VyY2UpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgaW50ZXJmYWNlICR7cGFyYW1zLmludGVyZmFjZU5hbWV9YCk7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZU1lbWJlcnMoZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ2tleXdvcmQnKSwgZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ2JvZHknKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVhZHMgYW5kIGNhY2hlcyB0aGUgZGVtbyBjb3JwdXMgXHUyMDE0IGV2ZXJ5IGAqLm1kYCBub3RlIGluIHRoZSBkZW1vIHZhdWx0IGpvaW5lZCBpbnRvIG9uZSBzdHJpbmcuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBjb25jYXRlbmF0ZWQgZGVtby1ub3RlIGNvbnRlbnRzLlxuICAgKi9cbiAgcHVibGljIHJlYWRDb3JwdXMoKTogc3RyaW5nIHtcbiAgICB0aGlzLmNhY2hlZENvcnB1cyA/Pz0gdGhpcy5jb2xsZWN0TWFya2Rvd25GaWxlcyh0aGlzLmRlbW9WYXVsdEZvbGRlcilcbiAgICAgIC5tYXAoKGZpbGUpID0+IHJlYWRGaWxlU3luYyhmaWxlLCAndXRmLTgnKSlcbiAgICAgIC5qb2luKCdcXG4nKTtcbiAgICByZXR1cm4gdGhpcy5jYWNoZWRDb3JwdXM7XG4gIH1cblxuICBwcml2YXRlIGNvbGxlY3RNYXJrZG93bkZpbGVzKGZvbGRlcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHJlYWRkaXJTeW5jKGZvbGRlciwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pKSB7XG4gICAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICBpZiAoZW50cnkubmFtZSA9PT0gT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTm9kZU1vZHVsZXMgYXMgc3RyaW5nKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5jb2xsZWN0TWFya2Rvd25GaWxlcyhqb2luKGZvbGRlciwgZW50cnkubmFtZSkpKTtcbiAgICAgIH0gZWxzZSBpZiAoZW50cnkubmFtZS5lbmRzV2l0aCgnLm1kJykpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goam9pbihmb2xkZXIsIGVudHJ5Lm5hbWUpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBhIGB2aXRlc3RgIHN1aXRlIHRoYXQga2VlcHMgYSBwbHVnaW4ncyBpbi1yZXBvIGBkZW1vLXZhdWx0L2AgaW4gc3luYyB3aXRoIGl0cyBwdWJsaWMgc3VyZmFjZS5cbiAqXG4gKiBDYWxsIGl0IG9uY2UgZnJvbSBhIHBsdWdpbidzIGBkZW1vLXZhdWx0Lm5vLWFwcC5pbnRlZ3JhdGlvbi50ZXN0LnRzYDsgaXQgcmVnaXN0ZXJzIG9uZSB0ZXN0IHBlciBjaGVjayxcbiAqIGRlbGVnYXRpbmcgdG8ge0BsaW5rIERlbW9WYXVsdENvdmVyYWdlQ2hlY2tlcn0uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBkZWNsYXJhdGl2ZSBjb3ZlcmFnZSBzcGVjaWZpY2F0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZW1vVmF1bHRDb3ZlcmFnZVN1aXRlKHBhcmFtczogUmVnaXN0ZXJEZW1vVmF1bHRDb3ZlcmFnZVN1aXRlUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IGNoZWNrZXIgPSBuZXcgRGVtb1ZhdWx0Q292ZXJhZ2VDaGVja2VyKHsgcm9vdEZvbGRlcjogcGFyYW1zLnJvb3RGb2xkZXIgfSk7XG5cbiAgZGVzY3JpYmUoJ2RlbW8tdmF1bHQgY292ZXJhZ2UnLCAoKSA9PiB7XG4gICAgZm9yIChjb25zdCBzcGVjIG9mIHBhcmFtcy5pbnRlcmZhY2VzKSB7XG4gICAgICBpdChgZGVtb25zdHJhdGVzIGV2ZXJ5ICR7c3BlYy5pbnRlcmZhY2VOYW1lfSAke3NwZWMua2luZH1gLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lbWJlcnMgPSBjaGVja2VyLmdldEludGVyZmFjZU1lbWJlcnMoc3BlYyk7XG4gICAgICAgIGNvbnN0IGRlbW9uc3RyYXRlZCA9IG1lbWJlcnNbc3BlYy5raW5kXTtcbiAgICAgICAgZXhwZWN0KGRlbW9uc3RyYXRlZC5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigwKTtcbiAgICAgICAgZXhwZWN0KGNoZWNrZXIuZmluZFVuZGVtb25zdHJhdGVkTWVtYmVycyh7IG1lbWJlcnM6IGRlbW9uc3RyYXRlZCwgcmVjZWl2ZXI6IHNwZWMucmVjZWl2ZXIgfSkpLnRvRXF1YWwoW10pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KGByZWZlcmVuY2VzIG5vICR7c3BlYy5pbnRlcmZhY2VOYW1lfSBtZW1iZXIgdGhhdCBubyBsb25nZXIgZXhpc3RzYCwgKCkgPT4ge1xuICAgICAgICBjb25zdCBtZW1iZXJzID0gY2hlY2tlci5nZXRJbnRlcmZhY2VNZW1iZXJzKHNwZWMpO1xuICAgICAgICBleHBlY3QoY2hlY2tlci5maW5kU3RhbGVSZWZlcmVuY2VzKHsgcmVjZWl2ZXI6IHNwZWMucmVjZWl2ZXIsIHZhbGlkTWVtYmVyczogbWVtYmVycy5hbGwgfSkpLnRvRXF1YWwoW10pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzcGVjIG9mIHBhcmFtcy5jb25maWdJbnRlcmZhY2VzKSB7XG4gICAgICBpdChgZGVtb25zdHJhdGVzIGV2ZXJ5ICR7c3BlYy5pbnRlcmZhY2VOYW1lfSBvcHRpb25gLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lbWJlcnMgPSBjaGVja2VyLmdldEludGVyZmFjZU1lbWJlcnMoc3BlYyk7XG4gICAgICAgIGV4cGVjdChtZW1iZXJzLnByb3BlcnRpZXMubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oMCk7XG4gICAgICAgIGV4cGVjdChjaGVja2VyLmZpbmRVbmRlbW9uc3RyYXRlZE1lbWJlcnMoeyBtZW1iZXJzOiBtZW1iZXJzLnByb3BlcnRpZXMgfSkpLnRvRXF1YWwoW10pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzcGVjIG9mIHBhcmFtcy5mdW5jdGlvbk1vZHVsZXMgPz8gW10pIHtcbiAgICAgIGl0KGBkZW1vbnN0cmF0ZXMgZXZlcnkgZXhwb3J0ZWQgZnVuY3Rpb24gaW4gJHtzcGVjLnNvdXJjZVBhdGh9YCwgKCkgPT4ge1xuICAgICAgICBjb25zdCBmdW5jdGlvbk5hbWVzID0gY2hlY2tlci5nZXRFeHBvcnRlZEZ1bmN0aW9uTmFtZXMoc3BlYyk7XG4gICAgICAgIGV4cGVjdChmdW5jdGlvbk5hbWVzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApO1xuICAgICAgICBleHBlY3QoY2hlY2tlci5maW5kVW5kZW1vbnN0cmF0ZWRNZW1iZXJzKHsgbWVtYmVyczogZnVuY3Rpb25OYW1lcyB9KSkudG9FcXVhbChbXSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBkb2NzID0gcGFyYW1zLmRvY3M7XG4gICAgaWYgKGRvY3MpIHtcbiAgICAgIGl0KCdsaW5rcyBhIGRlbW8gbm90ZSBmb3IgZXZlcnkgZmVhdHVyZSBkb2MnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChjaGVja2VyLmZpbmRVbmxpbmtlZEZlYXR1cmVEb2NzKHsgZG9jc0ZvbGRlcjogZG9jcy5mb2xkZXIsIG5vbkZlYXR1cmVEb2NzOiBkb2NzLm5vbkZlYXR1cmVEb2NzIH0pKVxuICAgICAgICAgIC50b0VxdWFsKFtdKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGl0KCdrZWVwcyB0aGUgcmVmbGVjdGVkIHN1cmZhY2Ugbm9uLXRyaXZpYWwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBndWFyZCA9IHBhcmFtcy5ub25Ucml2aWFsR3VhcmQ7XG4gICAgICBjb25zdCBtZW1iZXJzID0gY2hlY2tlci5nZXRJbnRlcmZhY2VNZW1iZXJzKGd1YXJkKTtcbiAgICAgIGV4cGVjdChtZW1iZXJzLmFsbCkudG9Db250YWluKGd1YXJkLmV4cGVjdE1lbWJlcik7XG4gICAgICBleHBlY3QoY2hlY2tlci5jb2xsZWN0RGVtb05vdGVSZWxhdGl2ZVBhdGhzKCkpLnRvQ29udGFpbihndWFyZC5leHBlY3REZW1vTm90ZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5jb25zdCBDTEFTU19NRU1CRVJfTU9ESUZJRVJTID0gJyg/Oig/OnB1YmxpY3xwcml2YXRlfHByb3RlY3RlZHxyZWFkb25seXxzdGF0aWN8YWJzdHJhY3R8b3ZlcnJpZGUpXFxcXHMrKSonO1xuXG5mdW5jdGlvbiBidWlsZE1lbWJlcnMobWV0aG9kczogc3RyaW5nW10sIHByb3BlcnRpZXM6IHN0cmluZ1tdKTogSW50ZXJmYWNlTWVtYmVycyB7XG4gIHJldHVybiB7XG4gICAgYWxsOiBbLi4ubWV0aG9kcywgLi4ucHJvcGVydGllc10sXG4gICAgbWV0aG9kcyxcbiAgICBwcm9wZXJ0aWVzXG4gIH07XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RDbGFzc01ldGhvZE5hbWVzKGNsYXNzQm9keTogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gWy4uLmNsYXNzQm9keS5tYXRjaEFsbChuZXcgUmVnRXhwKGBeIHsyfSg/PG1vZGlmaWVycz4ke0NMQVNTX01FTUJFUl9NT0RJRklFUlN9KSg/PG5hbWU+XFxcXHcrKSg/OjxbXj5dKj4pP1xcXFwoYCwgJ2dtJykpXVxuICAgIC5maWx0ZXIoKG1hdGNoKSA9PiAhaXNOb25QdWJsaWNNZW1iZXIoZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ21vZGlmaWVycycpKSlcbiAgICAubWFwKChtYXRjaCkgPT4gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ25hbWUnKSk7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RDbGFzc1Byb3BlcnR5TmFtZXMoY2xhc3NCb2R5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbLi4uY2xhc3NCb2R5Lm1hdGNoQWxsKG5ldyBSZWdFeHAoYF4gezJ9KD88bW9kaWZpZXJzPiR7Q0xBU1NfTUVNQkVSX01PRElGSUVSU30pKD88bmFtZT5cXFxcdyspXFxcXHMqXFxcXD8/XFxcXHMqWzo9XWAsICdnbScpKV1cbiAgICAuZmlsdGVyKChtYXRjaCkgPT4gIWlzTm9uUHVibGljTWVtYmVyKGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdtb2RpZmllcnMnKSkpXG4gICAgLm1hcCgobWF0Y2gpID0+IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICduYW1lJykpO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0RW51bU1lbWJlck5hbWVzKGVudW1Cb2R5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbLi4uZW51bUJvZHkubWF0Y2hBbGwoL14gezJ9KD88bmFtZT5cXHcrKS9nbSldLm1hcCgobWF0Y2gpID0+IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICduYW1lJykpO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0TWV0aG9kTmFtZXMoaW50ZXJmYWNlQm9keTogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gWy4uLmludGVyZmFjZUJvZHkubWF0Y2hBbGwoL14gezJ9KD88bmFtZT5cXHcrKSg/OjxbXj5dKj4pP1xcKC9nbSldLm1hcCgobWF0Y2gpID0+IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICduYW1lJykpO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0UHJvcGVydHlOYW1lcyhpbnRlcmZhY2VCb2R5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbLi4uaW50ZXJmYWNlQm9keS5tYXRjaEFsbCgvXiB7Mn0oPzxuYW1lPlxcdyspXFw/PzovZ20pXS5tYXAoKG1hdGNoKSA9PiBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnbmFtZScpKTtcbn1cblxuZnVuY3Rpb24gaXNOb25QdWJsaWNNZW1iZXIobW9kaWZpZXJzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIC9cXGIoPzpwcml2YXRlfHByb3RlY3RlZClcXGIvLnRlc3QobW9kaWZpZXJzKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNZW1iZXJzKGtleXdvcmQ6IHN0cmluZywgYm9keTogc3RyaW5nKTogSW50ZXJmYWNlTWVtYmVycyB7XG4gIHN3aXRjaCAoa2V5d29yZCkge1xuICAgIGNhc2UgJ2NsYXNzJzpcbiAgICAgIHJldHVybiBidWlsZE1lbWJlcnMoZXh0cmFjdENsYXNzTWV0aG9kTmFtZXMoYm9keSksIGV4dHJhY3RDbGFzc1Byb3BlcnR5TmFtZXMoYm9keSkpO1xuICAgIGNhc2UgJ2VudW0nOlxuICAgICAgcmV0dXJuIGJ1aWxkTWVtYmVycyhbXSwgZXh0cmFjdEVudW1NZW1iZXJOYW1lcyhib2R5KSk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBidWlsZE1lbWJlcnMoZXh0cmFjdE1ldGhvZE5hbWVzKGJvZHkpLCBleHRyYWN0UHJvcGVydHlOYW1lcyhib2R5KSk7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUJBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsU0FBUywrQkFBK0I7QUFDeEM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLDhCQUE4QjtBQXFQaEMsTUFBTSx5QkFBeUI7QUFBQSxFQUM1QixlQUE4QjtBQUFBLEVBQ3JCO0FBQUEsRUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9WLFlBQVksUUFBbUQ7QUFDcEUsU0FBSyxhQUFhLE9BQU87QUFDekIsU0FBSyxrQkFBa0IsS0FBSyxLQUFLLFlBQVksd0JBQXdCLFNBQVM7QUFBQSxFQUNoRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9PLCtCQUF5QztBQUM5QyxXQUFPLEtBQUsscUJBQXFCLEtBQUssZUFBZSxFQUFFLElBQUksQ0FBQyxTQUFTLFNBQVMsS0FBSyxpQkFBaUIsSUFBSSxDQUFDO0FBQUEsRUFDM0c7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFPLG9CQUFvQixRQUFxRTtBQUM5RixVQUFNLGVBQWUsSUFBSSxJQUFJLE9BQU8sWUFB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
|