@mnaoumov/typescript-dev-toolkit 0.0.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +15 -1
- package/bundlers/esbuild-impl/change-extension-plugin/package.json +6 -0
- package/bundlers/esbuild-impl/custom-esbuild-options-plugin/package.json +6 -0
- package/bundlers/esbuild-impl/fix-esm-plugin/package.json +6 -0
- package/bundlers/esbuild-impl/index/package.json +6 -0
- package/bundlers/esbuild-impl/package.json +6 -0
- package/bundlers/esbuild-impl/preprocess-plugin/package.json +6 -0
- package/bundlers/esbuild-impl/svelte-wrapper-plugin/package.json +6 -0
- package/bundlers/index/package.json +6 -0
- package/bundlers/package.json +6 -0
- package/dist/lib/cjs/build.cjs +191 -0
- package/dist/lib/cjs/build.d.cts +59 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/change-extension-plugin.cjs +139 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/change-extension-plugin.d.cts +25 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/custom-esbuild-options-plugin.cjs +96 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/custom-esbuild-options-plugin.d.cts +14 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/fix-esm-plugin.cjs +106 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/fix-esm-plugin.d.cts +13 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/index.cjs +111 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/index.d.cts +6 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.cjs +211 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.d.cts +143 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/svelte-wrapper-plugin.cjs +129 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/svelte-wrapper-plugin.d.cts +14 -0
- package/dist/lib/cjs/bundlers/index.cjs +99 -0
- package/dist/lib/cjs/bundlers/index.d.cts +2 -0
- package/dist/lib/cjs/check-project-types.cjs +163 -0
- package/dist/lib/cjs/check-project-types.d.cts +92 -0
- package/dist/lib/cjs/cli-utils.cjs +276 -0
- package/dist/lib/cjs/cli-utils.d.cts +123 -0
- package/dist/lib/cjs/code-generator.cjs +96 -0
- package/dist/lib/cjs/code-generator.d.cts +14 -0
- package/dist/lib/cjs/commitlint-config.cjs +110 -0
- package/dist/lib/cjs/commitlint-config.d.cts +14 -0
- package/dist/lib/cjs/commitlint-forbidden-patterns.cjs +110 -0
- package/dist/lib/cjs/commitlint-forbidden-patterns.d.cts +37 -0
- package/dist/lib/cjs/commitlint-spellcheck-header.cjs +126 -0
- package/dist/lib/cjs/commitlint-spellcheck-header.d.cts +40 -0
- package/dist/lib/cjs/env-toggle.cjs +133 -0
- package/dist/lib/cjs/env-toggle.d.cts +42 -0
- package/dist/lib/cjs/exec.cjs +455 -0
- package/dist/lib/cjs/exec.d.cts +162 -0
- package/dist/lib/cjs/forbidden-patterns.cjs +157 -0
- package/dist/lib/cjs/forbidden-patterns.d.cts +57 -0
- package/dist/lib/cjs/formatters/dprint.cjs +108 -0
- package/dist/lib/cjs/formatters/dprint.d.cts +33 -0
- package/dist/lib/cjs/formatters/index.cjs +99 -0
- package/dist/lib/cjs/formatters/index.d.cts +2 -0
- package/dist/lib/cjs/fs.cjs +123 -0
- package/dist/lib/cjs/fs.d.cts +80 -0
- package/dist/lib/cjs/gate.cjs +140 -0
- package/dist/lib/cjs/gate.d.cts +93 -0
- package/dist/lib/cjs/git.cjs +109 -0
- package/dist/lib/cjs/git.d.cts +37 -0
- package/dist/lib/cjs/index.cjs +186 -0
- package/dist/lib/cjs/index.d.cts +35 -0
- package/dist/lib/cjs/json.cjs +141 -0
- package/dist/lib/cjs/json.d.cts +102 -0
- package/dist/lib/cjs/library-build.cjs +475 -0
- package/dist/lib/cjs/library-build.d.cts +97 -0
- package/dist/lib/cjs/linters/cspell-content.cjs +124 -0
- package/dist/lib/cjs/linters/cspell-content.d.cts +46 -0
- package/dist/lib/cjs/linters/cspell.cjs +103 -0
- package/dist/lib/cjs/linters/cspell.d.cts +36 -0
- package/dist/lib/cjs/linters/eslint-agnostic-core-boundary.cjs +94 -0
- package/dist/lib/cjs/linters/eslint-agnostic-core-boundary.d.cts +49 -0
- package/dist/lib/cjs/linters/eslint-config.cjs +1068 -0
- package/dist/lib/cjs/linters/eslint-config.d.cts +123 -0
- package/dist/lib/cjs/linters/eslint-no-restricted-syntax.cjs +130 -0
- package/dist/lib/cjs/linters/eslint-no-restricted-syntax.d.cts +27 -0
- package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.cjs +116 -0
- package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.d.cts +26 -0
- package/dist/lib/cjs/linters/eslint-rules/index.cjs +132 -0
- package/dist/lib/cjs/linters/eslint-rules/index.d.cts +13 -0
- package/dist/lib/cjs/linters/eslint-rules/no-async-callback-to-unsafe-return.cjs +175 -0
- package/dist/lib/cjs/linters/eslint-rules/no-async-callback-to-unsafe-return.d.cts +10 -0
- package/dist/lib/cjs/linters/eslint-rules/no-unresolved-jsdoc-link.cjs +290 -0
- package/dist/lib/cjs/linters/eslint-rules/no-unresolved-jsdoc-link.d.cts +10 -0
- package/dist/lib/cjs/linters/eslint-rules/no-unused-params-members.cjs +265 -0
- package/dist/lib/cjs/linters/eslint-rules/no-unused-params-members.d.cts +41 -0
- package/dist/lib/cjs/linters/eslint-rules/no-used-underscore-variables.cjs +134 -0
- package/dist/lib/cjs/linters/eslint-rules/no-used-underscore-variables.d.cts +20 -0
- package/dist/lib/cjs/linters/eslint-rules/params-options-name-match.cjs +217 -0
- package/dist/lib/cjs/linters/eslint-rules/params-options-name-match.d.cts +36 -0
- package/dist/lib/cjs/linters/eslint-rules/prefer-noop-async.cjs +126 -0
- package/dist/lib/cjs/linters/eslint-rules/prefer-noop-async.d.cts +10 -0
- package/dist/lib/cjs/linters/eslint-rules/readonly-params-options-result-members.cjs +125 -0
- package/dist/lib/cjs/linters/eslint-rules/readonly-params-options-result-members.d.cts +20 -0
- package/dist/lib/cjs/linters/eslint-rules/require-method-template.cjs +181 -0
- package/dist/lib/cjs/linters/eslint-rules/require-method-template.d.cts +14 -0
- package/dist/lib/cjs/linters/eslint-rules/require-super-call.cjs +217 -0
- package/dist/lib/cjs/linters/eslint-rules/require-super-call.d.cts +10 -0
- package/dist/lib/cjs/linters/eslint-rules/rule-tester-helper.cjs +92 -0
- package/dist/lib/cjs/linters/eslint-rules/rule-tester-helper.d.cts +18 -0
- package/dist/lib/cjs/linters/eslint-rules/ts-estree-node.cjs +92 -0
- package/dist/lib/cjs/linters/eslint-rules/ts-estree-node.d.cts +23 -0
- package/dist/lib/cjs/linters/eslint-types/@types/@eslint-community__eslint-plugin-eslint-comments__configs.d.cts +20 -0
- package/dist/lib/cjs/linters/eslint-types/@types/eslint-plugin-verify-tsdoc.d.cts +17 -0
- package/dist/lib/cjs/linters/eslint.cjs +122 -0
- package/dist/lib/cjs/linters/eslint.d.cts +35 -0
- package/dist/lib/cjs/linters/index.cjs +138 -0
- package/dist/lib/cjs/linters/index.d.cts +15 -0
- package/dist/lib/cjs/linters/lint-ignores.cjs +91 -0
- package/dist/lib/cjs/linters/lint-ignores.d.cts +30 -0
- package/dist/lib/cjs/linters/markdownlint-cli2-config.cjs +169 -0
- package/dist/lib/cjs/linters/markdownlint-cli2-config.d.cts +11 -0
- package/dist/lib/cjs/linters/markdownlint-content.cjs +120 -0
- package/dist/lib/cjs/linters/markdownlint-content.d.cts +47 -0
- package/dist/lib/cjs/linters/markdownlint-ignores.cjs +95 -0
- package/dist/lib/cjs/linters/markdownlint-ignores.d.cts +35 -0
- package/dist/lib/cjs/linters/markdownlint-rules/index.cjs +99 -0
- package/dist/lib/cjs/linters/markdownlint-rules/index.d.cts +2 -0
- package/dist/lib/cjs/linters/markdownlint-rules/no-soft-break-in-paragraph.cjs +152 -0
- package/dist/lib/cjs/linters/markdownlint-rules/no-soft-break-in-paragraph.d.cts +35 -0
- package/dist/lib/cjs/linters/markdownlint-types/@types/markdownlint-cli2-config-schema.d.cts +1344 -0
- package/dist/lib/cjs/linters/markdownlint-types/@types/markdownlint-cli2.d.cts +67 -0
- package/dist/lib/cjs/linters/markdownlint.cjs +151 -0
- package/dist/lib/cjs/linters/markdownlint.d.cts +32 -0
- package/dist/lib/cjs/linters/over-exposure.cjs +685 -0
- package/dist/lib/cjs/linters/over-exposure.d.cts +357 -0
- package/dist/lib/cjs/nano-staged-config.cjs +148 -0
- package/dist/lib/cjs/nano-staged-config.d.cts +54 -0
- package/dist/lib/cjs/npm-publish.cjs +93 -0
- package/dist/lib/cjs/npm-publish.d.cts +19 -0
- package/dist/lib/cjs/npm-run.cjs +120 -0
- package/dist/lib/cjs/npm-run.d.cts +34 -0
- package/dist/lib/cjs/npm.cjs +200 -0
- package/dist/lib/cjs/npm.d.cts +168 -0
- package/dist/lib/cjs/package-lock-integrity.cjs +134 -0
- package/dist/lib/cjs/package-lock-integrity.d.cts +38 -0
- package/dist/lib/cjs/package-manager.cjs +291 -0
- package/dist/lib/cjs/package-manager.d.cts +93 -0
- package/dist/lib/cjs/released-issues.cjs +178 -0
- package/dist/lib/cjs/released-issues.d.cts +79 -0
- package/dist/lib/cjs/repo-paths.cjs +167 -0
- package/dist/lib/cjs/repo-paths.d.cts +318 -0
- package/dist/lib/cjs/root.cjs +150 -0
- package/dist/lib/cjs/root.d.cts +107 -0
- package/dist/lib/cjs/test-runners/index.cjs +102 -0
- package/dist/lib/cjs/test-runners/index.d.cts +3 -0
- package/dist/lib/cjs/test-runners/vitest-config.cjs +126 -0
- package/dist/lib/cjs/test-runners/vitest-config.d.cts +90 -0
- package/dist/lib/cjs/test-runners/vitest.cjs +115 -0
- package/dist/lib/cjs/test-runners/vitest.d.cts +52 -0
- package/dist/lib/cjs/validate-declarations.cjs +120 -0
- package/dist/lib/cjs/validate-declarations.d.cts +37 -0
- package/dist/lib/cjs/version.cjs +758 -0
- package/dist/lib/cjs/version.d.cts +418 -0
- package/dist/lib/esm/build.d.mts +59 -0
- package/dist/lib/esm/build.mjs +165 -0
- package/dist/lib/esm/bundlers/esbuild-impl/change-extension-plugin.d.mts +25 -0
- package/dist/lib/esm/bundlers/esbuild-impl/change-extension-plugin.mjs +101 -0
- package/dist/lib/esm/bundlers/esbuild-impl/custom-esbuild-options-plugin.d.mts +14 -0
- package/dist/lib/esm/bundlers/esbuild-impl/custom-esbuild-options-plugin.mjs +59 -0
- package/dist/lib/esm/bundlers/esbuild-impl/fix-esm-plugin.d.mts +13 -0
- package/dist/lib/esm/bundlers/esbuild-impl/fix-esm-plugin.mjs +69 -0
- package/dist/lib/esm/bundlers/esbuild-impl/index.d.mts +6 -0
- package/dist/lib/esm/bundlers/esbuild-impl/index.mjs +60 -0
- package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.d.mts +143 -0
- package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.mjs +176 -0
- package/dist/lib/esm/bundlers/esbuild-impl/svelte-wrapper-plugin.d.mts +14 -0
- package/dist/lib/esm/bundlers/esbuild-impl/svelte-wrapper-plugin.mjs +82 -0
- package/dist/lib/esm/bundlers/index.d.mts +2 -0
- package/dist/lib/esm/bundlers/index.mjs +52 -0
- package/dist/lib/esm/check-project-types.d.mts +92 -0
- package/dist/lib/esm/check-project-types.mjs +123 -0
- package/dist/lib/esm/cli-utils.d.mts +123 -0
- package/dist/lib/esm/cli-utils.mjs +225 -0
- package/dist/lib/esm/code-generator.d.mts +14 -0
- package/dist/lib/esm/code-generator.mjs +59 -0
- package/dist/lib/esm/commitlint-config.d.mts +14 -0
- package/dist/lib/esm/commitlint-config.mjs +79 -0
- package/dist/lib/esm/commitlint-forbidden-patterns.d.mts +37 -0
- package/dist/lib/esm/commitlint-forbidden-patterns.mjs +75 -0
- package/dist/lib/esm/commitlint-spellcheck-header.d.mts +40 -0
- package/dist/lib/esm/commitlint-spellcheck-header.mjs +87 -0
- package/dist/lib/esm/env-toggle.d.mts +42 -0
- package/dist/lib/esm/env-toggle.mjs +84 -0
- package/dist/lib/esm/exec.d.mts +162 -0
- package/dist/lib/esm/exec.mjs +410 -0
- package/dist/lib/esm/forbidden-patterns.d.mts +57 -0
- package/dist/lib/esm/forbidden-patterns.mjs +108 -0
- package/dist/lib/esm/formatters/dprint.d.mts +33 -0
- package/dist/lib/esm/formatters/dprint.mjs +75 -0
- package/dist/lib/esm/formatters/index.d.mts +2 -0
- package/dist/lib/esm/formatters/index.mjs +52 -0
- package/dist/lib/esm/fs.d.mts +80 -0
- package/dist/lib/esm/fs.mjs +89 -0
- package/dist/lib/esm/gate.d.mts +93 -0
- package/dist/lib/esm/gate.mjs +106 -0
- package/dist/lib/esm/git.d.mts +37 -0
- package/dist/lib/esm/git.mjs +72 -0
- package/dist/lib/esm/index.d.mts +35 -0
- package/dist/lib/esm/index.mjs +110 -0
- package/dist/lib/esm/json.d.mts +102 -0
- package/dist/lib/esm/json.mjs +106 -0
- package/dist/lib/esm/library-build.d.mts +97 -0
- package/dist/lib/esm/library-build.mjs +435 -0
- package/dist/lib/esm/linters/cspell-content.d.mts +46 -0
- package/dist/lib/esm/linters/cspell-content.mjs +87 -0
- package/dist/lib/esm/linters/cspell.d.mts +36 -0
- package/dist/lib/esm/linters/cspell.mjs +69 -0
- package/dist/lib/esm/linters/eslint-agnostic-core-boundary.d.mts +49 -0
- package/dist/lib/esm/linters/eslint-agnostic-core-boundary.mjs +57 -0
- package/dist/lib/esm/linters/eslint-config.d.mts +123 -0
- package/dist/lib/esm/linters/eslint-config.mjs +1022 -0
- package/dist/lib/esm/linters/eslint-no-restricted-syntax.d.mts +27 -0
- package/dist/lib/esm/linters/eslint-no-restricted-syntax.mjs +93 -0
- package/dist/lib/esm/linters/eslint-rules/in-house-plugin.d.mts +26 -0
- package/dist/lib/esm/linters/eslint-rules/in-house-plugin.mjs +77 -0
- package/dist/lib/esm/linters/eslint-rules/index.d.mts +13 -0
- package/dist/lib/esm/linters/eslint-rules/index.mjs +74 -0
- package/dist/lib/esm/linters/eslint-rules/no-async-callback-to-unsafe-return.d.mts +10 -0
- package/dist/lib/esm/linters/eslint-rules/no-async-callback-to-unsafe-return.mjs +144 -0
- package/dist/lib/esm/linters/eslint-rules/no-unresolved-jsdoc-link.d.mts +10 -0
- package/dist/lib/esm/linters/eslint-rules/no-unresolved-jsdoc-link.mjs +277 -0
- package/dist/lib/esm/linters/eslint-rules/no-unused-params-members.d.mts +41 -0
- package/dist/lib/esm/linters/eslint-rules/no-unused-params-members.mjs +227 -0
- package/dist/lib/esm/linters/eslint-rules/no-used-underscore-variables.d.mts +20 -0
- package/dist/lib/esm/linters/eslint-rules/no-used-underscore-variables.mjs +96 -0
- package/dist/lib/esm/linters/eslint-rules/params-options-name-match.d.mts +36 -0
- package/dist/lib/esm/linters/eslint-rules/params-options-name-match.mjs +179 -0
- package/dist/lib/esm/linters/eslint-rules/prefer-noop-async.d.mts +10 -0
- package/dist/lib/esm/linters/eslint-rules/prefer-noop-async.mjs +88 -0
- package/dist/lib/esm/linters/eslint-rules/readonly-params-options-result-members.d.mts +20 -0
- package/dist/lib/esm/linters/eslint-rules/readonly-params-options-result-members.mjs +87 -0
- package/dist/lib/esm/linters/eslint-rules/require-method-template.d.mts +14 -0
- package/dist/lib/esm/linters/eslint-rules/require-method-template.mjs +142 -0
- package/dist/lib/esm/linters/eslint-rules/require-super-call.d.mts +10 -0
- package/dist/lib/esm/linters/eslint-rules/require-super-call.mjs +183 -0
- package/dist/lib/esm/linters/eslint-rules/rule-tester-helper.d.mts +18 -0
- package/dist/lib/esm/linters/eslint-rules/rule-tester-helper.mjs +55 -0
- package/dist/lib/esm/linters/eslint-rules/ts-estree-node.d.mts +23 -0
- package/dist/lib/esm/linters/eslint-rules/ts-estree-node.mjs +55 -0
- package/dist/lib/esm/linters/eslint-types/@types/@eslint-community__eslint-plugin-eslint-comments__configs.d.mts +20 -0
- package/dist/lib/esm/linters/eslint-types/@types/eslint-plugin-verify-tsdoc.d.mts +17 -0
- package/dist/lib/esm/linters/eslint.d.mts +35 -0
- package/dist/lib/esm/linters/eslint.mjs +88 -0
- package/dist/lib/esm/linters/index.d.mts +15 -0
- package/dist/lib/esm/linters/index.mjs +78 -0
- package/dist/lib/esm/linters/lint-ignores.d.mts +30 -0
- package/dist/lib/esm/linters/lint-ignores.mjs +54 -0
- package/dist/lib/esm/linters/markdownlint-cli2-config.d.mts +11 -0
- package/dist/lib/esm/linters/markdownlint-cli2-config.mjs +122 -0
- package/dist/lib/esm/linters/markdownlint-content.d.mts +47 -0
- package/dist/lib/esm/linters/markdownlint-content.mjs +83 -0
- package/dist/lib/esm/linters/markdownlint-ignores.d.mts +35 -0
- package/dist/lib/esm/linters/markdownlint-ignores.mjs +57 -0
- package/dist/lib/esm/linters/markdownlint-rules/index.d.mts +2 -0
- package/dist/lib/esm/linters/markdownlint-rules/index.mjs +52 -0
- package/dist/lib/esm/linters/markdownlint-rules/no-soft-break-in-paragraph.d.mts +35 -0
- package/dist/lib/esm/linters/markdownlint-rules/no-soft-break-in-paragraph.mjs +114 -0
- package/dist/lib/esm/linters/markdownlint-types/@types/markdownlint-cli2-config-schema.d.mts +1344 -0
- package/dist/lib/esm/linters/markdownlint-types/@types/markdownlint-cli2.d.mts +67 -0
- package/dist/lib/esm/linters/markdownlint.d.mts +32 -0
- package/dist/lib/esm/linters/markdownlint.mjs +124 -0
- package/dist/lib/esm/linters/over-exposure.d.mts +357 -0
- package/dist/lib/esm/linters/over-exposure.mjs +672 -0
- package/dist/lib/esm/nano-staged-config.d.mts +54 -0
- package/dist/lib/esm/nano-staged-config.mjs +103 -0
- package/dist/lib/esm/npm-publish.d.mts +19 -0
- package/dist/lib/esm/npm-publish.mjs +56 -0
- package/dist/lib/esm/npm-run.d.mts +34 -0
- package/dist/lib/esm/npm-run.mjs +81 -0
- package/dist/lib/esm/npm.d.mts +168 -0
- package/dist/lib/esm/npm.mjs +155 -0
- package/dist/lib/esm/package-lock-integrity.d.mts +38 -0
- package/dist/lib/esm/package-lock-integrity.mjs +99 -0
- package/dist/lib/esm/package-manager.d.mts +93 -0
- package/dist/lib/esm/package-manager.mjs +245 -0
- package/dist/lib/esm/released-issues.d.mts +79 -0
- package/dist/lib/esm/released-issues.mjs +143 -0
- package/dist/lib/esm/repo-paths.d.mts +318 -0
- package/dist/lib/esm/repo-paths.mjs +130 -0
- package/dist/lib/esm/root.d.mts +107 -0
- package/dist/lib/esm/root.mjs +115 -0
- package/dist/lib/esm/test-runners/index.d.mts +3 -0
- package/dist/lib/esm/test-runners/index.mjs +54 -0
- package/dist/lib/esm/test-runners/vitest-config.d.mts +90 -0
- package/dist/lib/esm/test-runners/vitest-config.mjs +86 -0
- package/dist/lib/esm/test-runners/vitest.d.mts +52 -0
- package/dist/lib/esm/test-runners/vitest.mjs +76 -0
- package/dist/lib/esm/validate-declarations.d.mts +37 -0
- package/dist/lib/esm/validate-declarations.mjs +87 -0
- package/dist/lib/esm/version.d.mts +418 -0
- package/dist/lib/esm/version.mjs +723 -0
- package/formatters/dprint/package.json +6 -0
- package/formatters/index/package.json +6 -0
- package/formatters/package.json +6 -0
- package/linters/cspell/package.json +6 -0
- package/linters/cspell-content/package.json +6 -0
- package/linters/eslint/package.json +6 -0
- package/linters/eslint-agnostic-core-boundary/package.json +6 -0
- package/linters/eslint-config/package.json +6 -0
- package/linters/eslint-no-restricted-syntax/package.json +6 -0
- package/linters/eslint-rules/in-house-plugin/package.json +6 -0
- package/linters/eslint-rules/index/package.json +6 -0
- package/linters/eslint-rules/no-async-callback-to-unsafe-return/package.json +6 -0
- package/linters/eslint-rules/no-unresolved-jsdoc-link/package.json +6 -0
- package/linters/eslint-rules/no-unused-params-members/package.json +6 -0
- package/linters/eslint-rules/no-used-underscore-variables/package.json +6 -0
- package/linters/eslint-rules/package.json +6 -0
- package/linters/eslint-rules/params-options-name-match/package.json +6 -0
- package/linters/eslint-rules/prefer-noop-async/package.json +6 -0
- package/linters/eslint-rules/readonly-params-options-result-members/package.json +6 -0
- package/linters/eslint-rules/require-method-template/package.json +6 -0
- package/linters/eslint-rules/require-super-call/package.json +6 -0
- package/linters/eslint-rules/rule-tester-helper/package.json +6 -0
- package/linters/eslint-rules/ts-estree-node/package.json +6 -0
- package/linters/eslint-types/@types/@eslint-community__eslint-plugin-eslint-comments__configs/package.json +4 -0
- package/linters/eslint-types/@types/eslint-plugin-verify-tsdoc/package.json +4 -0
- package/linters/index/package.json +6 -0
- package/linters/lint-ignores/package.json +6 -0
- package/linters/markdownlint/package.json +6 -0
- package/linters/markdownlint-cli2-config/package.json +6 -0
- package/linters/markdownlint-content/package.json +6 -0
- package/linters/markdownlint-ignores/package.json +6 -0
- package/linters/markdownlint-rules/index/package.json +6 -0
- package/linters/markdownlint-rules/no-soft-break-in-paragraph/package.json +6 -0
- package/linters/markdownlint-rules/package.json +6 -0
- package/linters/markdownlint-types/@types/markdownlint-cli2/package.json +4 -0
- package/linters/markdownlint-types/@types/markdownlint-cli2-config-schema/package.json +4 -0
- package/linters/over-exposure/package.json +6 -0
- package/linters/package.json +6 -0
- package/package.json +329 -13
- package/test-runners/index/package.json +6 -0
- package/test-runners/package.json +6 -0
- package/test-runners/vitest/package.json +6 -0
- package/test-runners/vitest-config/package.json +6 -0
|
@@ -0,0 +1,475 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
(function () {
|
|
7
|
+
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
|
+
symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
|
|
9
|
+
symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function ensureBrowserProcess() {
|
|
13
|
+
const browserProcess = {
|
|
14
|
+
browser: true,
|
|
15
|
+
cwd() {
|
|
16
|
+
return '/';
|
|
17
|
+
},
|
|
18
|
+
env: {},
|
|
19
|
+
platform: 'android'
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const existingProcess = globalThis.process;
|
|
23
|
+
|
|
24
|
+
if (!existingProcess) {
|
|
25
|
+
globalThis.process = browserProcess;
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (existingProcess.versions?.node) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const existingProcessRecord = existingProcess;
|
|
34
|
+
|
|
35
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
36
|
+
existingProcessRecord[key] ??= value;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
existingProcessRecord['browser'] = true;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function keepName($unknown) {
|
|
43
|
+
return $unknown;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
(function initCjs() {
|
|
47
|
+
const globalThisRecord = globalThis;
|
|
48
|
+
ensureDisposeSymbols();
|
|
49
|
+
globalThisRecord['__name'] ??= keepName;
|
|
50
|
+
globalThisRecord['__extractDefault'] ??= extractDefault;
|
|
51
|
+
|
|
52
|
+
ensureBrowserProcess();
|
|
53
|
+
|
|
54
|
+
// eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
|
|
55
|
+
function extractDefault(module) {
|
|
56
|
+
return module && module.__esModule && 'default' in module ? module.default : module;
|
|
57
|
+
}
|
|
58
|
+
})();
|
|
59
|
+
})();
|
|
60
|
+
|
|
61
|
+
"use strict";
|
|
62
|
+
var __create = Object.create;
|
|
63
|
+
var __defProp = Object.defineProperty;
|
|
64
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
65
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
66
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
67
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
68
|
+
var __export = (target, all) => {
|
|
69
|
+
for (var name in all)
|
|
70
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
71
|
+
};
|
|
72
|
+
var __copyProps = (to, from, except, desc) => {
|
|
73
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
74
|
+
for (let key of __getOwnPropNames(from))
|
|
75
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
76
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
77
|
+
}
|
|
78
|
+
return to;
|
|
79
|
+
};
|
|
80
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
81
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
82
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
83
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
84
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
85
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
86
|
+
mod
|
|
87
|
+
));
|
|
88
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
89
|
+
var library_build_exports = {};
|
|
90
|
+
__export(library_build_exports, {
|
|
91
|
+
LIBRARY_BANNER: () => LIBRARY_BANNER,
|
|
92
|
+
LIBRARY_BUILD_STEPS: () => LIBRARY_BUILD_STEPS,
|
|
93
|
+
SOURCE_CONDITION: () => SOURCE_CONDITION,
|
|
94
|
+
buildCleanLibrary: () => buildCleanLibrary,
|
|
95
|
+
buildLibrary: () => buildLibrary,
|
|
96
|
+
buildLibraryTypes: () => buildLibraryTypes,
|
|
97
|
+
generateLibraryExports: () => generateLibraryExports,
|
|
98
|
+
generateLibraryIndex: () => generateLibraryIndex,
|
|
99
|
+
runBuildSteps: () => runBuildSteps
|
|
100
|
+
});
|
|
101
|
+
module.exports = __toCommonJS(library_build_exports);
|
|
102
|
+
var import_async = require('@mnaoumov/typescript-lib/async');
|
|
103
|
+
var import_object_utils = require('@mnaoumov/typescript-lib/object-utils');
|
|
104
|
+
var import_path = require('@mnaoumov/typescript-lib/path');
|
|
105
|
+
var import_string = require('@mnaoumov/typescript-lib/string');
|
|
106
|
+
var import_esbuild = require('esbuild');
|
|
107
|
+
var import_node_fs = require('node:fs');
|
|
108
|
+
var import_promises = require('node:fs/promises');
|
|
109
|
+
var import_node_path = require('node:path');
|
|
110
|
+
var import_node_process = __toESM(__extractDefault(require('node:process')), 1);
|
|
111
|
+
var import_build = require('./build.cjs');
|
|
112
|
+
var import_change_extension_plugin = require('./bundlers/esbuild-impl/change-extension-plugin.cjs');
|
|
113
|
+
var import_fix_esm_plugin = require('./bundlers/esbuild-impl/fix-esm-plugin.cjs');
|
|
114
|
+
var import_preprocess_plugin = require('./bundlers/esbuild-impl/preprocess-plugin.cjs');
|
|
115
|
+
var import_check_project_types = require('./check-project-types.cjs');
|
|
116
|
+
var import_code_generator = require('./code-generator.cjs');
|
|
117
|
+
var import_fs = require('./fs.cjs');
|
|
118
|
+
var import_json = require('./json.cjs');
|
|
119
|
+
var import_npm_run = require('./npm-run.cjs');
|
|
120
|
+
var import_npm = require('./npm.cjs');
|
|
121
|
+
var import_package_manager = require('./package-manager.cjs');
|
|
122
|
+
var import_repo_paths = require('./repo-paths.cjs');
|
|
123
|
+
var import_root = require('./root.cjs');
|
|
124
|
+
const LIBRARY_BANNER = `/*
|
|
125
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
126
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
127
|
+
*/
|
|
128
|
+
`;
|
|
129
|
+
const LIBRARY_BUILD_STEPS = [
|
|
130
|
+
"build:clean",
|
|
131
|
+
"build:generate-index",
|
|
132
|
+
"build:compile",
|
|
133
|
+
"build:types",
|
|
134
|
+
"build:validate-declarations",
|
|
135
|
+
"build:lib",
|
|
136
|
+
"build:generate-exports"
|
|
137
|
+
];
|
|
138
|
+
const SOURCE_CONDITION = "@mnaoumov/source";
|
|
139
|
+
const DECLARATION_REFERENCE_TYPES = /* @__PURE__ */ new Set(["node"]);
|
|
140
|
+
const REFERENCE_LIB_DIRECTIVE = ["<reference", "lib="].join(" ");
|
|
141
|
+
const REFERENCE_LIB_REG_EXP = /\/\/\/ <reference lib="(?<Lib>[^"]+)" \/>/gm;
|
|
142
|
+
const BARE_TYPE_IMPORT_REG_EXP = /^import type (?<Clause>.+?) from '(?<Specifier>[^.'][^']*)';$/gm;
|
|
143
|
+
const BARE_INLINE_IMPORT_TYPE_REG_EXP = /import\("(?<Specifier>[^."][^"]*)"\)/g;
|
|
144
|
+
const STATIC_IMPORT_REG_EXP = /from '(?<ImportPath>.+?)\.ts';/gm;
|
|
145
|
+
const DYNAMIC_IMPORT_REG_EXP = /import\((?<Quote>['"])(?<ImportPath>.+?)\.ts\k<Quote>\)/gm;
|
|
146
|
+
async function buildCleanLibrary() {
|
|
147
|
+
await (0, import_build.buildClean)();
|
|
148
|
+
for (const file of await (0, import_fs.readdirPosix)(import_repo_paths.RepoPaths.Src, { recursive: true })) {
|
|
149
|
+
if ((0, import_path.basename)(file) === import_repo_paths.RepoPaths.IndexTs) {
|
|
150
|
+
await (0, import_promises.rm)((0, import_path.join)(import_repo_paths.RepoPaths.Src, file));
|
|
151
|
+
}
|
|
152
|
+
if (file.endsWith(import_repo_paths.RepoPaths.DtsExtension) && !file.split("/").includes(import_repo_paths.RepoPaths.Types)) {
|
|
153
|
+
await (0, import_promises.rm)((0, import_path.join)(import_repo_paths.RepoPaths.Src, file));
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
for (const file of await (0, import_fs.readdirPosix)(import_repo_paths.RepoPaths.CurrentFolder, { recursive: true })) {
|
|
157
|
+
if ((0, import_path.basename)(file) !== import_repo_paths.RepoPaths.PackageJson || file === import_repo_paths.RepoPaths.PackageJson || file.startsWith(import_repo_paths.RepoPaths.NodeModules)) {
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
await (0, import_promises.rm)(file);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
async function buildLibrary(options = {}) {
|
|
164
|
+
const { preprocessPluginFactory = (isEsm) => (0, import_preprocess_plugin.preprocessPlugin)({ isEsm }) } = options;
|
|
165
|
+
const libFiles = await getLibFiles();
|
|
166
|
+
await buildLibraryFormat({ format: "cjs", libFiles, preprocessPluginFactory });
|
|
167
|
+
await buildLibraryFormat({ format: "esm", libFiles, preprocessPluginFactory });
|
|
168
|
+
}
|
|
169
|
+
async function buildLibraryTypes() {
|
|
170
|
+
await (0, import_root.execFromRoot)([...(0, import_package_manager.resolveToolCommand)({ tool: "tsc" }), "--project", "./tsconfig.types.json"]);
|
|
171
|
+
const libraryFileName = (0, import_node_fs.existsSync)((0, import_path.join)(import_repo_paths.RepoPaths.Src, "library.ts")) ? "library" : "index";
|
|
172
|
+
const allLibs = await collectAllLibs();
|
|
173
|
+
const allTypes = collectAllTypes();
|
|
174
|
+
for (const file of await (0, import_fs.readdirPosix)(import_repo_paths.RepoPaths.Src, { recursive: true })) {
|
|
175
|
+
if (!file.endsWith(import_repo_paths.RepoPaths.DtsExtension) || file.startsWith(import_repo_paths.RepoPaths.TestHelpers)) {
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
const folder = (0, import_path.dirname)(file);
|
|
179
|
+
const name = (0, import_path.basename)(file, import_repo_paths.RepoPaths.DtsExtension);
|
|
180
|
+
const content = await (0, import_promises.readFile)((0, import_path.join)(import_repo_paths.RepoPaths.Src, file), "utf-8");
|
|
181
|
+
const ctsPath = (0, import_path.join)(import_repo_paths.RepoPaths.DistLib, import_repo_paths.RepoPaths.Cjs, folder, name + import_repo_paths.RepoPaths.DctsExtension);
|
|
182
|
+
const mtsPath = (0, import_path.join)(import_repo_paths.RepoPaths.DistLib, import_repo_paths.RepoPaths.Esm, folder, name + import_repo_paths.RepoPaths.DmtsExtension);
|
|
183
|
+
await (0, import_promises.mkdir)((0, import_path.dirname)(ctsPath), { recursive: true });
|
|
184
|
+
await (0, import_promises.mkdir)((0, import_path.dirname)(mtsPath), { recursive: true });
|
|
185
|
+
let ctsContent = toCtsContent(content);
|
|
186
|
+
let mtsContent = toMtsContent(content);
|
|
187
|
+
if (name === libraryFileName && folder === ".") {
|
|
188
|
+
const directives = buildAllReferenceLibDirectives(allLibs) + buildAllReferenceTypesDirectives(allTypes);
|
|
189
|
+
ctsContent = directives + ctsContent;
|
|
190
|
+
mtsContent = directives + mtsContent;
|
|
191
|
+
} else {
|
|
192
|
+
ctsContent = buildReferencePathDirective({ declarationFilePath: ctsPath, extension: import_repo_paths.RepoPaths.DctsExtension, libraryFileName, moduleDirectory: import_repo_paths.RepoPaths.Cjs }) + ctsContent;
|
|
193
|
+
mtsContent = buildReferencePathDirective({ declarationFilePath: mtsPath, extension: import_repo_paths.RepoPaths.DmtsExtension, libraryFileName, moduleDirectory: import_repo_paths.RepoPaths.Esm }) + mtsContent;
|
|
194
|
+
}
|
|
195
|
+
await (0, import_promises.writeFile)(ctsPath, ctsContent);
|
|
196
|
+
await (0, import_promises.writeFile)(mtsPath, mtsContent);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
async function generateLibraryExports(options = {}) {
|
|
200
|
+
const { sourceCondition } = options;
|
|
201
|
+
const srcFolders = [import_repo_paths.RepoPaths.Src];
|
|
202
|
+
for (const dirent of await (0, import_fs.readdirPosix)(import_repo_paths.RepoPaths.Src, { recursive: true, withFileTypes: true })) {
|
|
203
|
+
if (!dirent.isDirectory()) {
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
const path = (0, import_path.join)(dirent.parentPath, dirent.name);
|
|
207
|
+
if (path.includes(import_repo_paths.RepoPaths.Styles) || path.includes(import_repo_paths.RepoPaths.TestHelpers)) {
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
srcFolders.push(path);
|
|
211
|
+
}
|
|
212
|
+
srcFolders.sort();
|
|
213
|
+
let isChanged = false;
|
|
214
|
+
await (0, import_npm.editPackageJson)(async (packageJson) => {
|
|
215
|
+
const oldExports = packageJson.exports;
|
|
216
|
+
const exportConditions = {};
|
|
217
|
+
packageJson.exports = exportConditions;
|
|
218
|
+
for (const srcFolder of srcFolders) {
|
|
219
|
+
await setExport({ exportConditions, isWildcard: false, sourceCondition, srcFolder });
|
|
220
|
+
await setExport({ exportConditions, isWildcard: true, sourceCondition, srcFolder });
|
|
221
|
+
}
|
|
222
|
+
isChanged = !(0, import_object_utils.isDeepEqual)(oldExports, packageJson.exports);
|
|
223
|
+
});
|
|
224
|
+
if (isChanged) {
|
|
225
|
+
throw new Error("Package exports have changed. Please review the changes and commit them.");
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
async function generateLibraryIndex() {
|
|
229
|
+
await generateIndex(import_repo_paths.RepoPaths.Src);
|
|
230
|
+
}
|
|
231
|
+
async function runBuildSteps(steps = LIBRARY_BUILD_STEPS) {
|
|
232
|
+
for (const step of steps) {
|
|
233
|
+
await (0, import_npm_run.npmRunOptional)(step);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
function buildAllReferenceLibDirectives(libs) {
|
|
237
|
+
return `${libs.map((lib) => `/// ${REFERENCE_LIB_DIRECTIVE}"${lib}" />`).join("\n")}
|
|
238
|
+
`;
|
|
239
|
+
}
|
|
240
|
+
function buildAllReferenceTypesDirectives(types) {
|
|
241
|
+
return types.length === 0 ? "" : `${types.map((type) => `/// <reference types="${type}" />`).join("\n")}
|
|
242
|
+
`;
|
|
243
|
+
}
|
|
244
|
+
async function buildLibraryFormat(params) {
|
|
245
|
+
const { format, libFiles, preprocessPluginFactory } = params;
|
|
246
|
+
const extension = format === "cjs" ? import_repo_paths.RepoPaths.CjsExtension : import_repo_paths.RepoPaths.MjsExtension;
|
|
247
|
+
const buildOptions = {
|
|
248
|
+
// Explicit, because esbuild otherwise takes the folder its service process started in.
|
|
249
|
+
// eslint-disable-next-line unicorn/name-replacements -- esbuild's own option name.
|
|
250
|
+
absWorkingDir: import_node_process.default.cwd(),
|
|
251
|
+
banner: {
|
|
252
|
+
js: LIBRARY_BANNER
|
|
253
|
+
},
|
|
254
|
+
bundle: false,
|
|
255
|
+
entryPoints: libFiles,
|
|
256
|
+
format,
|
|
257
|
+
logLevel: "info",
|
|
258
|
+
outdir: (0, import_path.join)(import_repo_paths.RepoPaths.DistLib, format),
|
|
259
|
+
platform: "node",
|
|
260
|
+
plugins: [
|
|
261
|
+
preprocessPluginFactory(format === "esm"),
|
|
262
|
+
(0, import_fix_esm_plugin.fixEsmPlugin)(),
|
|
263
|
+
(0, import_change_extension_plugin.changeExtensionPlugin)(extension)
|
|
264
|
+
],
|
|
265
|
+
sourcemap: "inline",
|
|
266
|
+
target: "ES2022",
|
|
267
|
+
treeShaking: true,
|
|
268
|
+
write: false
|
|
269
|
+
};
|
|
270
|
+
const buildContext = await (0, import_esbuild.context)(buildOptions);
|
|
271
|
+
try {
|
|
272
|
+
await buildContext.rebuild();
|
|
273
|
+
} finally {
|
|
274
|
+
await buildContext.dispose();
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
function buildReferencePathDirective(params) {
|
|
278
|
+
const { declarationFilePath, extension, libraryFileName, moduleDirectory } = params;
|
|
279
|
+
const libraryFilePath = (0, import_path.join)(import_repo_paths.RepoPaths.DistLib, moduleDirectory, libraryFileName + extension);
|
|
280
|
+
let relativePath = (0, import_node_path.relative)((0, import_path.dirname)(declarationFilePath), libraryFilePath).replaceAll("\\", "/");
|
|
281
|
+
if (!relativePath.startsWith(".")) {
|
|
282
|
+
relativePath = `./${relativePath}`;
|
|
283
|
+
}
|
|
284
|
+
return `/// <reference path="${relativePath}" />
|
|
285
|
+
`;
|
|
286
|
+
}
|
|
287
|
+
async function collectAllLibs() {
|
|
288
|
+
const { options } = (0, import_check_project_types.parseTsConfig)(import_repo_paths.RepoPaths.TsConfigJson);
|
|
289
|
+
const libs = new Set((options.lib ?? []).map((lib) => lib.toLowerCase().replace(/^lib\./, "").replace(/\.d\.ts$/, "")));
|
|
290
|
+
for (const file of await (0, import_fs.readdirPosix)(import_repo_paths.RepoPaths.Src, { recursive: true })) {
|
|
291
|
+
if (!file.endsWith(".ts")) {
|
|
292
|
+
continue;
|
|
293
|
+
}
|
|
294
|
+
const sourceContent = (0, import_node_fs.readFileSync)((0, import_path.join)(import_repo_paths.RepoPaths.Src, file), "utf-8");
|
|
295
|
+
for (const [, lib] of sourceContent.matchAll(REFERENCE_LIB_REG_EXP)) {
|
|
296
|
+
libs.add(String(lib).toLowerCase());
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
return [...libs].sort();
|
|
300
|
+
}
|
|
301
|
+
function collectAllTypes() {
|
|
302
|
+
const { options } = (0, import_check_project_types.parseTsConfig)(import_repo_paths.RepoPaths.TsConfigJson);
|
|
303
|
+
return (options.types ?? []).filter((type) => DECLARATION_REFERENCE_TYPES.has(type)).sort();
|
|
304
|
+
}
|
|
305
|
+
async function generateIndex(folder) {
|
|
306
|
+
const dirents = await (0, import_fs.readdirPosix)(folder, { withFileTypes: true });
|
|
307
|
+
const maybeLines = await (0, import_async.asyncMap)(dirents, (dirent) => handleIndexDirent(folder, dirent));
|
|
308
|
+
const lines = maybeLines.filter((line) => line !== void 0);
|
|
309
|
+
if (lines.length === 0) {
|
|
310
|
+
return "skipped" /* Skipped */;
|
|
311
|
+
}
|
|
312
|
+
await (0, import_code_generator.generate)((0, import_path.join)(folder, import_repo_paths.RepoPaths.IndexTs), lines);
|
|
313
|
+
return "success" /* Success */;
|
|
314
|
+
}
|
|
315
|
+
async function getLibFiles() {
|
|
316
|
+
let files = await (0, import_fs.readdirPosix)(import_repo_paths.RepoPaths.Src, { recursive: true });
|
|
317
|
+
files = files.map((file) => (0, import_path.normalizeIfRelative)((0, import_path.join)(import_repo_paths.RepoPaths.Src, file)));
|
|
318
|
+
return files.filter(
|
|
319
|
+
(file) => file.endsWith(import_repo_paths.RepoPaths.TsExtension) && !file.endsWith(import_repo_paths.RepoPaths.DtsExtension) && !file.endsWith(".test.ts") && !file.includes(`/${import_repo_paths.RepoPaths.TestHelpers}/`)
|
|
320
|
+
);
|
|
321
|
+
}
|
|
322
|
+
async function handleIndexDirent(folder, dirent) {
|
|
323
|
+
if (isExcludedFromIndex(folder, dirent)) {
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
let sourceFile;
|
|
327
|
+
let name;
|
|
328
|
+
if (dirent.isDirectory()) {
|
|
329
|
+
const result = await generateIndex((0, import_path.join)(folder, dirent.name));
|
|
330
|
+
if (result !== "success" /* Success */) {
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
sourceFile = (0, import_path.normalizeIfRelative)((0, import_path.join)(dirent.name, import_repo_paths.RepoPaths.IndexTs));
|
|
334
|
+
name = dirent.name;
|
|
335
|
+
} else {
|
|
336
|
+
const extension = (0, import_path.extname)(dirent.name);
|
|
337
|
+
name = (0, import_path.basename)(dirent.name, extension);
|
|
338
|
+
sourceFile = (0, import_path.normalizeIfRelative)(dirent.name);
|
|
339
|
+
}
|
|
340
|
+
return `export * as '${name}' from '${sourceFile}';`;
|
|
341
|
+
}
|
|
342
|
+
function isExcludedFileName(name) {
|
|
343
|
+
return !name.endsWith(import_repo_paths.RepoPaths.TsExtension) || name.endsWith(".test.ts") || name === "setup.ts" || name.endsWith("-setup.ts");
|
|
344
|
+
}
|
|
345
|
+
function isExcludedFromIndex(folder, dirent) {
|
|
346
|
+
const excludedNames = [import_repo_paths.RepoPaths.IndexTs, import_repo_paths.RepoPaths.Types, import_repo_paths.RepoPaths.Styles, import_repo_paths.RepoPaths.TestHelpers];
|
|
347
|
+
const isExcludedEntry = excludedNames.includes(dirent.name) || dirent.name.endsWith(import_repo_paths.RepoPaths.DtsExtension) || folder.split("/").includes(import_repo_paths.RepoPaths.Types);
|
|
348
|
+
return isExcludedEntry || dirent.isFile() && isExcludedFileName(dirent.name);
|
|
349
|
+
}
|
|
350
|
+
async function setExport(params) {
|
|
351
|
+
const { exportConditions, isWildcard, sourceCondition, srcFolder } = params;
|
|
352
|
+
const importPath = (0, import_string.replaceAll)({
|
|
353
|
+
$string: srcFolder,
|
|
354
|
+
replacer: import_repo_paths.RepoPaths.CurrentFolder,
|
|
355
|
+
searchValue: import_repo_paths.RepoPaths.Src
|
|
356
|
+
});
|
|
357
|
+
const conditionPath = isWildcard ? `${importPath}/${import_repo_paths.RepoPaths.Any}` : importPath;
|
|
358
|
+
const dmtsPath = toDistPath({ format: import_repo_paths.RepoPaths.Esm, importPath, name: isWildcard ? import_repo_paths.RepoPaths.AnyDmts : import_repo_paths.RepoPaths.IndexDmts });
|
|
359
|
+
const dctsPath = toDistPath({ format: import_repo_paths.RepoPaths.Cjs, importPath, name: isWildcard ? import_repo_paths.RepoPaths.AnyDcts : import_repo_paths.RepoPaths.IndexDcts });
|
|
360
|
+
const dmtsFolderPath = (0, import_path.dirname)(dmtsPath);
|
|
361
|
+
const dctsFolderPath = (0, import_path.dirname)(dctsPath);
|
|
362
|
+
if (!isWildcard && !(0, import_node_fs.existsSync)(dctsPath)) {
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
365
|
+
const isTypesOnly = importPath.includes(import_repo_paths.RepoPaths.Types);
|
|
366
|
+
const mjsPath = toDistPath({ format: import_repo_paths.RepoPaths.Esm, importPath, name: isWildcard ? import_repo_paths.RepoPaths.AnyMjs : import_repo_paths.RepoPaths.IndexMjs });
|
|
367
|
+
const cjsPath = toDistPath({ format: import_repo_paths.RepoPaths.Cjs, importPath, name: isWildcard ? import_repo_paths.RepoPaths.AnyCjs : import_repo_paths.RepoPaths.IndexCjs });
|
|
368
|
+
if (isTypesOnly) {
|
|
369
|
+
exportConditions[conditionPath] = {
|
|
370
|
+
import: {
|
|
371
|
+
types: dmtsPath
|
|
372
|
+
},
|
|
373
|
+
require: {
|
|
374
|
+
types: dctsPath
|
|
375
|
+
}
|
|
376
|
+
};
|
|
377
|
+
} else {
|
|
378
|
+
const sourcePath = (0, import_path.normalizeIfRelative)((0, import_path.join)(import_repo_paths.RepoPaths.Src, importPath, isWildcard ? import_repo_paths.RepoPaths.AnyTs : import_repo_paths.RepoPaths.IndexTs));
|
|
379
|
+
exportConditions[conditionPath] = {
|
|
380
|
+
/* eslint-disable perfectionist/sort-objects -- Order matters once it is written to `package.json`. */
|
|
381
|
+
// First, so it wins wherever it is set: inside the repository, before anything is built.
|
|
382
|
+
...sourceCondition !== void 0 && { [sourceCondition]: sourcePath },
|
|
383
|
+
import: {
|
|
384
|
+
types: dmtsPath,
|
|
385
|
+
default: mjsPath
|
|
386
|
+
},
|
|
387
|
+
require: {
|
|
388
|
+
types: dctsPath,
|
|
389
|
+
default: cjsPath
|
|
390
|
+
}
|
|
391
|
+
/* eslint-enable perfectionist/sort-objects -- Order matters once it is written to `package.json`. */
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
if (importPath === import_repo_paths.RepoPaths.CurrentFolder) {
|
|
395
|
+
return;
|
|
396
|
+
}
|
|
397
|
+
if (!isWildcard) {
|
|
398
|
+
await writeSubpathPackageJson(
|
|
399
|
+
importPath,
|
|
400
|
+
isTypesOnly ? { type: "module", types: (0, import_path.relative)(importPath, dctsPath) } : { main: (0, import_path.relative)(importPath, cjsPath), module: (0, import_path.relative)(importPath, mjsPath), type: "module", types: (0, import_path.relative)(importPath, dctsPath) }
|
|
401
|
+
);
|
|
402
|
+
return;
|
|
403
|
+
}
|
|
404
|
+
for (const file of await (0, import_fs.readdirPosix)(dctsFolderPath)) {
|
|
405
|
+
if (!file.endsWith(import_repo_paths.RepoPaths.DctsExtension)) {
|
|
406
|
+
continue;
|
|
407
|
+
}
|
|
408
|
+
const name = (0, import_path.basename)(file, import_repo_paths.RepoPaths.DctsExtension);
|
|
409
|
+
const packageJsonFolderPath = (0, import_path.join)(importPath, name);
|
|
410
|
+
const types = (0, import_path.relative)(packageJsonFolderPath, (0, import_path.join)(dctsFolderPath, name + import_repo_paths.RepoPaths.DctsExtension));
|
|
411
|
+
await writeSubpathPackageJson(
|
|
412
|
+
packageJsonFolderPath,
|
|
413
|
+
isTypesOnly ? { type: "module", types } : {
|
|
414
|
+
main: (0, import_path.relative)(packageJsonFolderPath, (0, import_path.join)(dctsFolderPath, name + import_repo_paths.RepoPaths.CjsExtension)),
|
|
415
|
+
module: (0, import_path.relative)(packageJsonFolderPath, (0, import_path.join)(dmtsFolderPath, name + import_repo_paths.RepoPaths.MjsExtension)),
|
|
416
|
+
type: "module",
|
|
417
|
+
types
|
|
418
|
+
}
|
|
419
|
+
);
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
function toCtsContent(content) {
|
|
423
|
+
let ctsContent = (0, import_string.replaceAll)({
|
|
424
|
+
$string: content,
|
|
425
|
+
replacer: "from '$<ImportPath>.cjs';",
|
|
426
|
+
searchValue: STATIC_IMPORT_REG_EXP
|
|
427
|
+
});
|
|
428
|
+
ctsContent = (0, import_string.replaceAll)({
|
|
429
|
+
$string: ctsContent,
|
|
430
|
+
replacer: "import($<Quote>$<ImportPath>.cjs$<Quote>)",
|
|
431
|
+
searchValue: DYNAMIC_IMPORT_REG_EXP
|
|
432
|
+
});
|
|
433
|
+
ctsContent = (0, import_string.replaceAll)({
|
|
434
|
+
$string: ctsContent,
|
|
435
|
+
replacer: "import type $<Clause> from '$<Specifier>' with { 'resolution-mode': 'import' };",
|
|
436
|
+
searchValue: BARE_TYPE_IMPORT_REG_EXP
|
|
437
|
+
});
|
|
438
|
+
return (0, import_string.replaceAll)({
|
|
439
|
+
$string: ctsContent,
|
|
440
|
+
replacer: `import("$<Specifier>", { with: { 'resolution-mode': 'import' } })`,
|
|
441
|
+
searchValue: BARE_INLINE_IMPORT_TYPE_REG_EXP
|
|
442
|
+
});
|
|
443
|
+
}
|
|
444
|
+
function toDistPath(params) {
|
|
445
|
+
return (0, import_path.normalizeIfRelative)((0, import_path.join)(import_repo_paths.RepoPaths.DistLib, params.format, params.importPath, params.name));
|
|
446
|
+
}
|
|
447
|
+
function toMtsContent(content) {
|
|
448
|
+
const mtsContent = (0, import_string.replaceAll)({
|
|
449
|
+
$string: content,
|
|
450
|
+
replacer: "from '$<ImportPath>.mjs';",
|
|
451
|
+
searchValue: STATIC_IMPORT_REG_EXP
|
|
452
|
+
});
|
|
453
|
+
return (0, import_string.replaceAll)({
|
|
454
|
+
$string: mtsContent,
|
|
455
|
+
replacer: "import($<Quote>$<ImportPath>.mjs$<Quote>)",
|
|
456
|
+
searchValue: DYNAMIC_IMPORT_REG_EXP
|
|
457
|
+
});
|
|
458
|
+
}
|
|
459
|
+
async function writeSubpathPackageJson(folder, packageJson) {
|
|
460
|
+
await (0, import_promises.mkdir)(folder, { recursive: true });
|
|
461
|
+
await (0, import_json.writeJson)((0, import_path.join)(folder, import_repo_paths.RepoPaths.PackageJson), packageJson);
|
|
462
|
+
}
|
|
463
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
464
|
+
0 && (module.exports = {
|
|
465
|
+
LIBRARY_BANNER,
|
|
466
|
+
LIBRARY_BUILD_STEPS,
|
|
467
|
+
SOURCE_CONDITION,
|
|
468
|
+
buildCleanLibrary,
|
|
469
|
+
buildLibrary,
|
|
470
|
+
buildLibraryTypes,
|
|
471
|
+
generateLibraryExports,
|
|
472
|
+
generateLibraryIndex,
|
|
473
|
+
runBuildSteps
|
|
474
|
+
});
|
|
475
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2xpYnJhcnktYnVpbGQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaGUgYnVpbGQgcGlwZWxpbmUgb2YgYSBUeXBlU2NyaXB0IExJQlJBUlkgcGFja2FnZTogb25lIGBkaXN0L2xpYi97Y2pzLGVzbX1gIHRyZWUgb2YgdW5idW5kbGVkIG1vZHVsZXMgYmVzaWRlIGl0c1xuICogYC5kLmN0c2AgLyBgLmQubXRzYCBkZWNsYXJhdGlvbnMsIHRoZSBnZW5lcmF0ZWQgYGluZGV4LnRzYCBiYXJyZWxzLCBhbmQgdGhlIGdlbmVyYXRlZCBgcGFja2FnZS5qc29uYCBgZXhwb3J0c2AgbWFwLlxuICpcbiAqIEVhY2ggc3RlcCB3b3JrcyBvbiB0aGUgY3VycmVudCB3b3JraW5nIGZvbGRlciwgd2hpY2ggaXMgdGhlIHBhY2thZ2UgYmVpbmcgYnVpbHQuIEEgcmVwb3NpdG9yeSdzXG4gKiBgc2NyaXB0cy9idWlsZC0qLnRzYCBlbnRyeSBwb2ludHMgYXJlIHRoaW4gYHdyYXBDbGlUYXNrYCB3cmFwcGVycyBhcm91bmQgdGhlc2UgZnVuY3Rpb25zLCBhbmQgaXRzIGBidWlsZGAgc2NyaXB0XG4gKiBydW5zIHRoZW0gaW4gb3JkZXIgdGhyb3VnaCB7QGxpbmsgcnVuQnVpbGRTdGVwc30uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBCdWlsZE9wdGlvbnMsXG4gIFBsdWdpblxufSBmcm9tICdlc2J1aWxkJztcbmltcG9ydCB0eXBlIHsgRGlyZW50IH0gZnJvbSAnbm9kZTpmcyc7XG5cbmltcG9ydCB7IGFzeW5jTWFwIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IGlzRGVlcEVxdWFsIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQge1xuICBiYXNlbmFtZSxcbiAgZGlybmFtZSxcbiAgZXh0bmFtZSxcbiAgam9pbixcbiAgbm9ybWFsaXplSWZSZWxhdGl2ZSxcbiAgcmVsYXRpdmVcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuaW1wb3J0IHsgcmVwbGFjZUFsbCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9zdHJpbmcnO1xuaW1wb3J0IHsgY29udGV4dCB9IGZyb20gJ2VzYnVpbGQnO1xuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgcmVhZEZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgbWtkaXIsXG4gIHJlYWRGaWxlLFxuICBybSxcbiAgd3JpdGVGaWxlXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgcmVsYXRpdmUgYXMgcmVsYXRpdmVOYXRpdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuaW1wb3J0IHR5cGUgeyBQYWNrYWdlSnNvbiB9IGZyb20gJy4vbnBtLnRzJztcblxuaW1wb3J0IHsgYnVpbGRDbGVhbiB9IGZyb20gJy4vYnVpbGQudHMnO1xuaW1wb3J0IHsgY2hhbmdlRXh0ZW5zaW9uUGx1Z2luIH0gZnJvbSAnLi9idW5kbGVycy9lc2J1aWxkLWltcGwvY2hhbmdlLWV4dGVuc2lvbi1wbHVnaW4udHMnO1xuaW1wb3J0IHsgZml4RXNtUGx1Z2luIH0gZnJvbSAnLi9idW5kbGVycy9lc2J1aWxkLWltcGwvZml4LWVzbS1wbHVnaW4udHMnO1xuaW1wb3J0IHsgcHJlcHJvY2Vzc1BsdWdpbiB9IGZyb20gJy4vYnVuZGxlcnMvZXNidWlsZC1pbXBsL3ByZXByb2Nlc3MtcGx1Z2luLnRzJztcbmltcG9ydCB7IHBhcnNlVHNDb25maWcgfSBmcm9tICcuL2NoZWNrLXByb2plY3QtdHlwZXMudHMnO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tICcuL2NvZGUtZ2VuZXJhdG9yLnRzJztcbmltcG9ydCB7IHJlYWRkaXJQb3NpeCB9IGZyb20gJy4vZnMudHMnO1xuaW1wb3J0IHsgd3JpdGVKc29uIH0gZnJvbSAnLi9qc29uLnRzJztcbmltcG9ydCB7IG5wbVJ1bk9wdGlvbmFsIH0gZnJvbSAnLi9ucG0tcnVuLnRzJztcbmltcG9ydCB7IGVkaXRQYWNrYWdlSnNvbiB9IGZyb20gJy4vbnBtLnRzJztcbmltcG9ydCB7IHJlc29sdmVUb29sQ29tbWFuZCB9IGZyb20gJy4vcGFja2FnZS1tYW5hZ2VyLnRzJztcbmltcG9ydCB7IFJlcG9QYXRocyB9IGZyb20gJy4vcmVwby1wYXRocy50cyc7XG5pbXBvcnQgeyBleGVjRnJvbVJvb3QgfSBmcm9tICcuL3Jvb3QudHMnO1xuXG4vKipcbiAqIFRoZSBiYW5uZXIgZXZlcnkgZW1pdHRlZCBsaWJyYXJ5IG1vZHVsZSBvcGVucyB3aXRoLlxuICovXG5leHBvcnQgY29uc3QgTElCUkFSWV9CQU5ORVIgPSBgLypcblRISVMgSVMgQSBHRU5FUkFURUQvQlVORExFRCBGSUxFIEJZIEVTQlVJTERcbmlmIHlvdSB3YW50IHRvIHZpZXcgdGhlIHNvdXJjZSwgcGxlYXNlIHZpc2l0IHRoZSBnaXRodWIgcmVwb3NpdG9yeSBvZiB0aGlzIHBsdWdpblxuKi9cbmA7XG5cbi8qKlxuICogVGhlIHN0ZXBzIG9mIGEgbGlicmFyeSBidWlsZCwgaW4gdGhlIG9yZGVyIHtAbGluayBydW5CdWlsZFN0ZXBzfSBydW5zIHRoZW0uXG4gKi9cbmV4cG9ydCBjb25zdCBMSUJSQVJZX0JVSUxEX1NURVBTOiByZWFkb25seSBzdHJpbmdbXSA9IFtcbiAgJ2J1aWxkOmNsZWFuJyxcbiAgJ2J1aWxkOmdlbmVyYXRlLWluZGV4JyxcbiAgJ2J1aWxkOmNvbXBpbGUnLFxuICAnYnVpbGQ6dHlwZXMnLFxuICAnYnVpbGQ6dmFsaWRhdGUtZGVjbGFyYXRpb25zJyxcbiAgJ2J1aWxkOmxpYicsXG4gICdidWlsZDpnZW5lcmF0ZS1leHBvcnRzJ1xuXTtcblxuLyoqXG4gKiBUaGUgZXhwb3J0IGNvbmRpdGlvbiB0aGUgYG9ic2lkaWFuLWRldi11dGlsc2Agd29ya3NwYWNlIG1hcHMgZXZlcnkgc3VicGF0aCBvbnRvIGl0cyBUeXBlU2NyaXB0IHNvdXJjZSB3aXRoLCBzbyBhXG4gKiBwYWNrYWdlIHRoZXJlIGNhbiBpbXBvcnQgYSBzaWJsaW5nIHBhY2thZ2UncyBzb3VyY2UgYmVmb3JlIGFueXRoaW5nIGlzIGJ1aWx0LiBQYXNzIGl0IHRvXG4gKiB7QGxpbmsgZ2VuZXJhdGVMaWJyYXJ5RXhwb3J0c30gdGhyb3VnaCB7QGxpbmsgR2VuZXJhdGVMaWJyYXJ5RXhwb3J0c09wdGlvbnMuc291cmNlQ29uZGl0aW9ufS5cbiAqL1xuZXhwb3J0IGNvbnN0IFNPVVJDRV9DT05ESVRJT04gPSAnQG1uYW91bW92L3NvdXJjZSc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGJ1aWxkTGlicmFyeX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRMaWJyYXJ5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBwcmVwcm9jZXNzIHBsdWdpbiBmb3Igb25lIG91dHB1dCBmb3JtYXQuIERlZmF1bHRzIHRvIHRoZSBnZW5lcmljIG9uZSwgd2hpY2ggY2FycmllcyBub1xuICAgKiBlbnZpcm9ubWVudC1zcGVjaWZpYyBgcmVxdWlyZWAgcGF0Y2guXG4gICAqL1xuICByZWFkb25seSBwcmVwcm9jZXNzUGx1Z2luRmFjdG9yeT86IChpc0VzbTogYm9vbGVhbikgPT4gUGx1Z2luO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBnZW5lcmF0ZUxpYnJhcnlFeHBvcnRzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZUxpYnJhcnlFeHBvcnRzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBbiBleHBvcnQgY29uZGl0aW9uIHRvIHB1dCBmaXJzdCBpbiBldmVyeSBlbnRyeSwgbWFwcGluZyB0aGUgc3VicGF0aCBvbnRvIGl0cyBUeXBlU2NyaXB0IHNvdXJjZS4gT25seSBhXG4gICAqIHJlcG9zaXRvcnkgaG9sZGluZyBzZXZlcmFsIHBhY2thZ2VzIHRoYXQgaW1wb3J0IGVhY2ggb3RoZXIgbmVlZHMgb25lOyBub3RoaW5nIG91dHNpZGUgaXQgc2V0cyB0aGUgY29uZGl0aW9uLCBhbmRcbiAgICogdGhlIHNvdXJjZXMgaXQgcG9pbnRzIGF0IGRvIG5vdCBzaGlwLCBzbyB0aGUgcHVibGlzaCBoYXMgdG8gc3RyaXAgaXQgYWdhaW4uIE9taXR0ZWQsIHRoZSBtYXAgaGFzIG5vbmUuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VDb25kaXRpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbnR5cGUgTW9kdWxlRm9ybWF0ID0gJ2NqcycgfCAnZXNtJztcblxuY29uc3QgREVDTEFSQVRJT05fUkVGRVJFTkNFX1RZUEVTID0gbmV3IFNldChbJ25vZGUnXSk7XG4vLyBTcGVsbGVkIGFwYXJ0IG9uIHB1cnBvc2U6IHtAbGluayBjb2xsZWN0QWxsTGlic30gc2NhbnMgZXZlcnkgc291cmNlIGZpbGUgb2YgdGhlIHBhY2thZ2UgYmVpbmcgYnVpbHQgZm9yIHRoZVxuLy8gZGlyZWN0aXZlLCB0aGlzIG9uZSBpbmNsdWRlZCwgc28gYSBsaXRlcmFsIG9uZSBoZXJlIHdvdWxkIGJlIHJlYWQgYXMgYSBsaWIgdGhpcyBwYWNrYWdlIG5lZWRzLlxuY29uc3QgUkVGRVJFTkNFX0xJQl9ESVJFQ1RJVkUgPSBbJzxyZWZlcmVuY2UnLCAnbGliPSddLmpvaW4oJyAnKTtcbmNvbnN0IFJFRkVSRU5DRV9MSUJfUkVHX0VYUCA9IC9cXC9cXC9cXC8gPHJlZmVyZW5jZSBsaWI9XCIoPzxMaWI+W15cIl0rKVwiIFxcLz4vZ207XG5cbi8vIEEgYmFyZS1zcGVjaWZpZXIgKG5vbi1yZWxhdGl2ZSkgdHlwZS1vbmx5IGltcG9ydCwgZS5nLiBgaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztgLlxuY29uc3QgQkFSRV9UWVBFX0lNUE9SVF9SRUdfRVhQID0gL15pbXBvcnQgdHlwZSAoPzxDbGF1c2U+Lis/KSBmcm9tICcoPzxTcGVjaWZpZXI+W14uJ11bXiddKiknOyQvZ207XG5cbi8vIEEgYmFyZS1zcGVjaWZpZXIgKG5vbi1yZWxhdGl2ZSkgaW5saW5lIGltcG9ydCB0eXBlIG5vZGUsIGUuZy4gYGltcG9ydChcInR5cGUtZmVzdFwiKS5Qcm9taXNhYmxlYC5cbmNvbnN0IEJBUkVfSU5MSU5FX0lNUE9SVF9UWVBFX1JFR19FWFAgPSAvaW1wb3J0XFwoXCIoPzxTcGVjaWZpZXI+W14uXCJdW15cIl0qKVwiXFwpL2c7XG5cbmNvbnN0IFNUQVRJQ19JTVBPUlRfUkVHX0VYUCA9IC9mcm9tICcoPzxJbXBvcnRQYXRoPi4rPylcXC50cyc7L2dtO1xuXG4vLyBJbmxpbmUgaW1wb3J0LXR5cGUgbm9kZXMgKGB0eXBlb2YgaW1wb3J0KCcuL2Zvby50cycpYCkgcHJlc2VydmUgdGhlIHNvdXJjZSBxdW90ZSBzdHlsZS5cbi8vIEhhbmQtYXV0aG9yZWQgYC5kLnRzYCBmaWxlcyBlbWl0IHNpbmdsZSBxdW90ZXM7IHRzYy1nZW5lcmF0ZWQgZGVjbGFyYXRpb25zIGVtaXQgZG91YmxlIHF1b3Rlcy5cbi8vIENhcHR1cmUgdGhlIHF1b3RlIGFuZCByZXVzZSBpdCBpbiB0aGUgcmVwbGFjZW1lbnQgc28gYm90aCBzdHlsZXMgYXJlIHJld3JpdHRlbi5cbmNvbnN0IERZTkFNSUNfSU1QT1JUX1JFR19FWFAgPSAvaW1wb3J0XFwoKD88UXVvdGU+WydcIl0pKD88SW1wb3J0UGF0aD4uKz8pXFwudHNcXGs8UXVvdGU+XFwpL2dtO1xuXG5lbnVtIEdlbmVyYXRlSW5kZXhSZXN1bHQge1xuICBTa2lwcGVkID0gJ3NraXBwZWQnLFxuICBTdWNjZXNzID0gJ3N1Y2Nlc3MnXG59XG5cbmludGVyZmFjZSBCdWlsZExpYnJhcnlGb3JtYXRQYXJhbXMge1xuICByZWFkb25seSBmb3JtYXQ6IE1vZHVsZUZvcm1hdDtcbiAgcmVhZG9ubHkgbGliRmlsZXM6IHN0cmluZ1tdO1xuICByZWFkb25seSBwcmVwcm9jZXNzUGx1Z2luRmFjdG9yeTogKGlzRXNtOiBib29sZWFuKSA9PiBQbHVnaW47XG59XG5cbmludGVyZmFjZSBCdWlsZFJlZmVyZW5jZVBhdGhEaXJlY3RpdmVQYXJhbXMge1xuICByZWFkb25seSBkZWNsYXJhdGlvbkZpbGVQYXRoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGV4dGVuc2lvbjogc3RyaW5nO1xuICByZWFkb25seSBsaWJyYXJ5RmlsZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbW9kdWxlRGlyZWN0b3J5OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBTZXRFeHBvcnRQYXJhbXMge1xuICByZWFkb25seSBleHBvcnRDb25kaXRpb25zOiBQYWNrYWdlSnNvbi5FeHBvcnRDb25kaXRpb25zO1xuICByZWFkb25seSBpc1dpbGRjYXJkOiBib29sZWFuO1xuICByZWFkb25seSBzb3VyY2VDb25kaXRpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgc3JjRm9sZGVyOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBUb0Rpc3RQYXRoUGFyYW1zIHtcbiAgcmVhZG9ubHkgZm9ybWF0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGltcG9ydFBhdGg6IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBhbiBlYXJsaWVyIGJ1aWxkIGxlZnQ6IGBkaXN0L2AsIHRoZSBnZW5lcmF0ZWQgYGluZGV4LnRzYCBiYXJyZWxzLCB0aGUgYC5kLnRzYCBmaWxlcyBgdHNjYCB3cm90ZVxuICogYmVzaWRlIHRoZSBzb3VyY2VzIChoYW5kLWF1dGhvcmVkIG9uZXMgdW5kZXIgYEB0eXBlc2Agc3RheSksIGFuZCB0aGUgcGVyLXN1YnBhdGggYHBhY2thZ2UuanNvbmAgc3R1YnMuXG4gKlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIGV2ZXJ5dGhpbmcgaGFzIGJlZW4gcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkQ2xlYW5MaWJyYXJ5KCk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBidWlsZENsZWFuKCk7XG4gIGZvciAoY29uc3QgZmlsZSBvZiBhd2FpdCByZWFkZGlyUG9zaXgoUmVwb1BhdGhzLlNyYywgeyByZWN1cnNpdmU6IHRydWUgfSkpIHtcbiAgICBpZiAoYmFzZW5hbWUoZmlsZSkgPT09IFJlcG9QYXRocy5JbmRleFRzIGFzIHN0cmluZykge1xuICAgICAgYXdhaXQgcm0oam9pbihSZXBvUGF0aHMuU3JjLCBmaWxlKSk7XG4gICAgfVxuXG4gICAgaWYgKGZpbGUuZW5kc1dpdGgoUmVwb1BhdGhzLkR0c0V4dGVuc2lvbikgJiYgIWZpbGUuc3BsaXQoJy8nKS5pbmNsdWRlcyhSZXBvUGF0aHMuVHlwZXMpKSB7XG4gICAgICBhd2FpdCBybShqb2luKFJlcG9QYXRocy5TcmMsIGZpbGUpKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IGZpbGUgb2YgYXdhaXQgcmVhZGRpclBvc2l4KFJlcG9QYXRocy5DdXJyZW50Rm9sZGVyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KSkge1xuICAgIGlmICgoYmFzZW5hbWUoZmlsZSkgIT09IFJlcG9QYXRocy5QYWNrYWdlSnNvbiBhcyBzdHJpbmcpIHx8IChmaWxlID09PSBSZXBvUGF0aHMuUGFja2FnZUpzb24gYXMgc3RyaW5nKSB8fCBmaWxlLnN0YXJ0c1dpdGgoUmVwb1BhdGhzLk5vZGVNb2R1bGVzKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgYXdhaXQgcm0oZmlsZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgZXZlcnkgc291cmNlIG1vZHVsZSwgdW5idW5kbGVkLCBpbnRvIGBkaXN0L2xpYi9janNgIChgLmNqc2ApIGFuZCBgZGlzdC9saWIvZXNtYCAoYC5tanNgKS5cbiAqXG4gKiBUaGUgb3V0cHV0IGZvbGRlcnMgbXVzdCBhbHJlYWR5IGV4aXN0OyB7QGxpbmsgYnVpbGRMaWJyYXJ5VHlwZXN9IGNyZWF0ZXMgdGhlbS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBidWlsZCBvcHRpb25zLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIGJvdGggZm9ybWF0cyBoYXZlIGJlZW4gYnVpbHQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZExpYnJhcnkob3B0aW9uczogQnVpbGRMaWJyYXJ5T3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgcHJlcHJvY2Vzc1BsdWdpbkZhY3RvcnkgPSAoaXNFc206IGJvb2xlYW4pOiBQbHVnaW4gPT4gcHJlcHJvY2Vzc1BsdWdpbih7IGlzRXNtIH0pIH0gPSBvcHRpb25zO1xuICBjb25zdCBsaWJGaWxlcyA9IGF3YWl0IGdldExpYkZpbGVzKCk7XG4gIGF3YWl0IGJ1aWxkTGlicmFyeUZvcm1hdCh7IGZvcm1hdDogJ2NqcycsIGxpYkZpbGVzLCBwcmVwcm9jZXNzUGx1Z2luRmFjdG9yeSB9KTtcbiAgYXdhaXQgYnVpbGRMaWJyYXJ5Rm9ybWF0KHsgZm9ybWF0OiAnZXNtJywgbGliRmlsZXMsIHByZXByb2Nlc3NQbHVnaW5GYWN0b3J5IH0pO1xufVxuXG4vKipcbiAqIEVtaXRzIHRoZSBkZWNsYXJhdGlvbnMgd2l0aCBgdHNjIC0tcHJvamVjdCAuL3RzY29uZmlnLnR5cGVzLmpzb25gLCB0aGVuIGNvcGllcyBlYWNoIG9uZSBpbnRvIGBkaXN0L2xpYmAgdHdpY2U6IGFzIGFcbiAqIGAuZC5jdHNgIHdob3NlIHJlbGF0aXZlIGltcG9ydHMgbmFtZSBgLmNqc2AgZmlsZXMgYW5kIHdob3NlIGJhcmUgdHlwZSBpbXBvcnRzIGNhcnJ5IGByZXNvbHV0aW9uLW1vZGU6IGltcG9ydGAsIGFuZFxuICogYXMgYSBgLmQubXRzYCB3aG9zZSByZWxhdGl2ZSBpbXBvcnRzIG5hbWUgYC5tanNgIGZpbGVzLlxuICpcbiAqIFRoZSBsaWJyYXJ5J3Mgcm9vdCBkZWNsYXJhdGlvbiAoYGxpYnJhcnkudHNgIHdoZXJlIHRoZSBwYWNrYWdlIGhhcyBvbmUsIG90aGVyd2lzZSB0aGUgZ2VuZXJhdGVkIGBpbmRleC50c2ApIGNhcnJpZXNcbiAqIGV2ZXJ5IGBsaWJgIGFuZCBgdHlwZXNgIHJlZmVyZW5jZSB0aGUgcGFja2FnZSBuZWVkczsgZXZlcnkgb3RoZXIgZGVjbGFyYXRpb24gcmVmZXJlbmNlcyBpdCBieSBwYXRoLlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZGVjbGFyYXRpb25zIGhhdmUgYmVlbiB3cml0dGVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRMaWJyYXJ5VHlwZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbLi4ucmVzb2x2ZVRvb2xDb21tYW5kKHsgdG9vbDogJ3RzYycgfSksICctLXByb2plY3QnLCAnLi90c2NvbmZpZy50eXBlcy5qc29uJ10pO1xuXG4gIGNvbnN0IGxpYnJhcnlGaWxlTmFtZSA9IGV4aXN0c1N5bmMoam9pbihSZXBvUGF0aHMuU3JjLCAnbGlicmFyeS50cycpKSA/ICdsaWJyYXJ5JyA6ICdpbmRleCc7XG4gIGNvbnN0IGFsbExpYnMgPSBhd2FpdCBjb2xsZWN0QWxsTGlicygpO1xuICBjb25zdCBhbGxUeXBlcyA9IGNvbGxlY3RBbGxUeXBlcygpO1xuXG4gIGZvciAoY29uc3QgZmlsZSBvZiBhd2FpdCByZWFkZGlyUG9zaXgoUmVwb1BhdGhzLlNyYywgeyByZWN1cnNpdmU6IHRydWUgfSkpIHtcbiAgICBpZiAoIWZpbGUuZW5kc1dpdGgoUmVwb1BhdGhzLkR0c0V4dGVuc2lvbikgfHwgZmlsZS5zdGFydHNXaXRoKFJlcG9QYXRocy5UZXN0SGVscGVycykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGZvbGRlciA9IGRpcm5hbWUoZmlsZSk7XG4gICAgY29uc3QgbmFtZSA9IGJhc2VuYW1lKGZpbGUsIFJlcG9QYXRocy5EdHNFeHRlbnNpb24pO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShqb2luKFJlcG9QYXRocy5TcmMsIGZpbGUpLCAndXRmLTgnKTtcblxuICAgIGNvbnN0IGN0c1BhdGggPSBqb2luKFJlcG9QYXRocy5EaXN0TGliLCBSZXBvUGF0aHMuQ2pzLCBmb2xkZXIsIG5hbWUgKyBSZXBvUGF0aHMuRGN0c0V4dGVuc2lvbik7XG4gICAgY29uc3QgbXRzUGF0aCA9IGpvaW4oUmVwb1BhdGhzLkRpc3RMaWIsIFJlcG9QYXRocy5Fc20sIGZvbGRlciwgbmFtZSArIFJlcG9QYXRocy5EbXRzRXh0ZW5zaW9uKTtcblxuICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUoY3RzUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUobXRzUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgbGV0IGN0c0NvbnRlbnQgPSB0b0N0c0NvbnRlbnQoY29udGVudCk7XG4gICAgbGV0IG10c0NvbnRlbnQgPSB0b010c0NvbnRlbnQoY29udGVudCk7XG5cbiAgICBpZiAobmFtZSA9PT0gbGlicmFyeUZpbGVOYW1lICYmIGZvbGRlciA9PT0gJy4nKSB7XG4gICAgICBjb25zdCBkaXJlY3RpdmVzID0gYnVpbGRBbGxSZWZlcmVuY2VMaWJEaXJlY3RpdmVzKGFsbExpYnMpICsgYnVpbGRBbGxSZWZlcmVuY2VUeXBlc0RpcmVjdGl2ZXMoYWxsVHlwZXMpO1xuICAgICAgY3RzQ29udGVudCA9IGRpcmVjdGl2ZXMgKyBjdHNDb250ZW50O1xuICAgICAgbXRzQ29udGVudCA9IGRpcmVjdGl2ZXMgKyBtdHNDb250ZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBjdHNDb250ZW50ID0gYnVpbGRSZWZlcmVuY2VQYXRoRGlyZWN0aXZlKHsgZGVjbGFyYXRpb25GaWxlUGF0aDogY3RzUGF0aCwgZXh0ZW5zaW9uOiBSZXBvUGF0aHMuRGN0c0V4dGVuc2lvbiwgbGlicmFyeUZpbGVOYW1lLCBtb2R1bGVEaXJlY3Rvcnk6IFJlcG9QYXRocy5DanMgfSlcbiAgICAgICAgKyBjdHNDb250ZW50O1xuICAgICAgbXRzQ29udGVudCA9IGJ1aWxkUmVmZXJlbmNlUGF0aERpcmVjdGl2ZSh7IGRlY2xhcmF0aW9uRmlsZVBhdGg6IG10c1BhdGgsIGV4dGVuc2lvbjogUmVwb1BhdGhzLkRtdHNFeHRlbnNpb24sIGxpYnJhcnlGaWxlTmFtZSwgbW9kdWxlRGlyZWN0b3J5OiBSZXBvUGF0aHMuRXNtIH0pXG4gICAgICAgICsgbXRzQ29udGVudDtcbiAgICB9XG5cbiAgICBhd2FpdCB3cml0ZUZpbGUoY3RzUGF0aCwgY3RzQ29udGVudCk7XG4gICAgYXdhaXQgd3JpdGVGaWxlKG10c1BhdGgsIG10c0NvbnRlbnQpO1xuICB9XG59XG5cbi8qKlxuICogUmVnZW5lcmF0ZXMgdGhlIGBleHBvcnRzYCBtYXAgb2YgdGhlIHBhY2thZ2UncyBgcGFja2FnZS5qc29uYCBmcm9tIGl0cyBzb3VyY2UgZm9sZGVycywgYW5kIHdyaXRlcyBhIGBwYWNrYWdlLmpzb25gXG4gKiBzdHViIHBlciBzdWJwYXRoIGZvciByZXNvbHZlcnMgdGhhdCBkbyBub3QgcmVhZCBgZXhwb3J0c2AuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUge0BsaW5rIEdlbmVyYXRlTGlicmFyeUV4cG9ydHNPcHRpb25zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbWFwIGlzIGN1cnJlbnQuXG4gKiBAdGhyb3dzIElmIHRoZSBtYXAgY2hhbmdlZCwgc28gdGhlIGNoYW5nZSBnZXRzIHJldmlld2VkIGFuZCBjb21taXR0ZWQgcmF0aGVyIHRoYW4gc2hpcHBlZCB1bnNlZW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUxpYnJhcnlFeHBvcnRzKG9wdGlvbnM6IEdlbmVyYXRlTGlicmFyeUV4cG9ydHNPcHRpb25zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBzb3VyY2VDb25kaXRpb24gfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHNyY0ZvbGRlcnM6IHN0cmluZ1tdID0gW1JlcG9QYXRocy5TcmNdO1xuXG4gIGZvciAoY29uc3QgZGlyZW50IG9mIGF3YWl0IHJlYWRkaXJQb3NpeChSZXBvUGF0aHMuU3JjLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KSkge1xuICAgIGlmICghZGlyZW50LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHBhdGggPSBqb2luKGRpcmVudC5wYXJlbnRQYXRoLCBkaXJlbnQubmFtZSk7XG5cbiAgICBpZiAocGF0aC5pbmNsdWRlcyhSZXBvUGF0aHMuU3R5bGVzKSB8fCBwYXRoLmluY2x1ZGVzKFJlcG9QYXRocy5UZXN0SGVscGVycykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHNyY0ZvbGRlcnMucHVzaChwYXRoKTtcbiAgfVxuXG4gIHNyY0ZvbGRlcnMuc29ydCgpO1xuXG4gIGxldCBpc0NoYW5nZWQgPSBmYWxzZTtcblxuICBhd2FpdCBlZGl0UGFja2FnZUpzb24oYXN5bmMgKHBhY2thZ2VKc29uKSA9PiB7XG4gICAgY29uc3Qgb2xkRXhwb3J0cyA9IHBhY2thZ2VKc29uLmV4cG9ydHM7XG4gICAgY29uc3QgZXhwb3J0Q29uZGl0aW9uczogUGFja2FnZUpzb24uRXhwb3J0Q29uZGl0aW9ucyA9IHt9O1xuICAgIHBhY2thZ2VKc29uLmV4cG9ydHMgPSBleHBvcnRDb25kaXRpb25zO1xuICAgIGZvciAoY29uc3Qgc3JjRm9sZGVyIG9mIHNyY0ZvbGRlcnMpIHtcbiAgICAgIGF3YWl0IHNldEV4cG9ydCh7IGV4cG9ydENvbmRpdGlvbnMsIGlzV2lsZGNhcmQ6IGZhbHNlLCBzb3VyY2VDb25kaXRpb24sIHNyY0ZvbGRlciB9KTtcbiAgICAgIGF3YWl0IHNldEV4cG9ydCh7IGV4cG9ydENvbmRpdGlvbnMsIGlzV2lsZGNhcmQ6IHRydWUsIHNvdXJjZUNvbmRpdGlvbiwgc3JjRm9sZGVyIH0pO1xuICAgIH1cblxuICAgIGlzQ2hhbmdlZCA9ICFpc0RlZXBFcXVhbChvbGRFeHBvcnRzLCBwYWNrYWdlSnNvbi5leHBvcnRzKTtcbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb24gLS0gSXQgY2hhbmdlZCBpbiB0aGUgYGVkaXRQYWNrYWdlSnNvbmAsIEVTTGludCBtaXN0YWtlbmx5IGRvZXMgbm90IHJlY29nbml6ZSBpdC5cbiAgaWYgKGlzQ2hhbmdlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUGFja2FnZSBleHBvcnRzIGhhdmUgY2hhbmdlZC4gUGxlYXNlIHJldmlldyB0aGUgY2hhbmdlcyBhbmQgY29tbWl0IHRoZW0uJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYW4gYGluZGV4LnRzYCBiYXJyZWwgaW4gZXZlcnkgc291cmNlIGZvbGRlciB0aGF0IGhhcyBzb21ldGhpbmcgdG8gZXhwb3J0LCByZS1leHBvcnRpbmcgZWFjaCBtb2R1bGUgYW5kXG4gKiBlYWNoIHN1Yi1iYXJyZWwgdW5kZXIgaXRzIG93biBuYW1lLlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgYmFycmVscyBoYXZlIGJlZW4gd3JpdHRlbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlTGlicmFyeUluZGV4KCk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBnZW5lcmF0ZUluZGV4KFJlcG9QYXRocy5TcmMpO1xufVxuXG4vKipcbiAqIFJ1bnMgZWFjaCBuYW1lZCBucG0gc2NyaXB0IHRoZSBwYWNrYWdlIGRlZmluZXMsIGluIG9yZGVyLCBza2lwcGluZyB0aGUgb25lcyBpdCBkb2VzIG5vdCBkZWZpbmUuXG4gKlxuICogQHBhcmFtIHN0ZXBzIC0gVGhlIG5wbSBzY3JpcHQgbmFtZXMuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gZXZlcnkgc3RlcCBoYXMgcnVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQnVpbGRTdGVwcyhzdGVwczogcmVhZG9ubHkgc3RyaW5nW10gPSBMSUJSQVJZX0JVSUxEX1NURVBTKTogUHJvbWlzZTx2b2lkPiB7XG4gIGZvciAoY29uc3Qgc3RlcCBvZiBzdGVwcykge1xuICAgIGF3YWl0IG5wbVJ1bk9wdGlvbmFsKHN0ZXApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQWxsUmVmZXJlbmNlTGliRGlyZWN0aXZlcyhsaWJzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtcbiAgICBsaWJzXG4gICAgICAubWFwKChsaWIpID0+IGAvLy8gJHtSRUZFUkVOQ0VfTElCX0RJUkVDVElWRX1cIiR7bGlifVwiIC8+YClcbiAgICAgIC5qb2luKCdcXG4nKVxuICB9XFxuYDtcbn1cblxuZnVuY3Rpb24gYnVpbGRBbGxSZWZlcmVuY2VUeXBlc0RpcmVjdGl2ZXModHlwZXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVzLmxlbmd0aCA9PT0gMFxuICAgID8gJydcbiAgICA6IGAke1xuICAgICAgdHlwZXNcbiAgICAgICAgLm1hcCgodHlwZSkgPT4gYC8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiJHt0eXBlfVwiIC8+YClcbiAgICAgICAgLmpvaW4oJ1xcbicpXG4gICAgfVxcbmA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkTGlicmFyeUZvcm1hdChwYXJhbXM6IEJ1aWxkTGlicmFyeUZvcm1hdFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGZvcm1hdCwgbGliRmlsZXMsIHByZXByb2Nlc3NQbHVnaW5GYWN0b3J5IH0gPSBwYXJhbXM7XG4gIGNvbnN0IGV4dGVuc2lvbiA9IGZvcm1hdCA9PT0gJ2NqcycgPyBSZXBvUGF0aHMuQ2pzRXh0ZW5zaW9uIDogUmVwb1BhdGhzLk1qc0V4dGVuc2lvbjtcbiAgY29uc3QgYnVpbGRPcHRpb25zOiBCdWlsZE9wdGlvbnMgPSB7XG4gICAgLy8gRXhwbGljaXQsIGJlY2F1c2UgZXNidWlsZCBvdGhlcndpc2UgdGFrZXMgdGhlIGZvbGRlciBpdHMgc2VydmljZSBwcm9jZXNzIHN0YXJ0ZWQgaW4uXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gZXNidWlsZCdzIG93biBvcHRpb24gbmFtZS5cbiAgICBhYnNXb3JraW5nRGlyOiBwcm9jZXNzLmN3ZCgpLFxuICAgIGJhbm5lcjoge1xuICAgICAganM6IExJQlJBUllfQkFOTkVSXG4gICAgfSxcbiAgICBidW5kbGU6IGZhbHNlLFxuICAgIGVudHJ5UG9pbnRzOiBsaWJGaWxlcyxcbiAgICBmb3JtYXQsXG4gICAgbG9nTGV2ZWw6ICdpbmZvJyxcbiAgICBvdXRkaXI6IGpvaW4oUmVwb1BhdGhzLkRpc3RMaWIsIGZvcm1hdCksXG4gICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICBwbHVnaW5zOiBbXG4gICAgICBwcmVwcm9jZXNzUGx1Z2luRmFjdG9yeShmb3JtYXQgPT09ICdlc20nKSxcbiAgICAgIGZpeEVzbVBsdWdpbigpLFxuICAgICAgY2hhbmdlRXh0ZW5zaW9uUGx1Z2luKGV4dGVuc2lvbilcbiAgICBdLFxuICAgIHNvdXJjZW1hcDogJ2lubGluZScsXG4gICAgdGFyZ2V0OiAnRVMyMDIyJyxcbiAgICB0cmVlU2hha2luZzogdHJ1ZSxcbiAgICB3cml0ZTogZmFsc2VcbiAgfTtcblxuICBjb25zdCBidWlsZENvbnRleHQgPSBhd2FpdCBjb250ZXh0KGJ1aWxkT3B0aW9ucyk7XG4gIHRyeSB7XG4gICAgYXdhaXQgYnVpbGRDb250ZXh0LnJlYnVpbGQoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBidWlsZENvbnRleHQuZGlzcG9zZSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkUmVmZXJlbmNlUGF0aERpcmVjdGl2ZShwYXJhbXM6IEJ1aWxkUmVmZXJlbmNlUGF0aERpcmVjdGl2ZVBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgZGVjbGFyYXRpb25GaWxlUGF0aCwgZXh0ZW5zaW9uLCBsaWJyYXJ5RmlsZU5hbWUsIG1vZHVsZURpcmVjdG9yeSB9ID0gcGFyYW1zO1xuICBjb25zdCBsaWJyYXJ5RmlsZVBhdGggPSBqb2luKFJlcG9QYXRocy5EaXN0TGliLCBtb2R1bGVEaXJlY3RvcnksIGxpYnJhcnlGaWxlTmFtZSArIGV4dGVuc2lvbik7XG4gIGxldCByZWxhdGl2ZVBhdGggPSByZWxhdGl2ZU5hdGl2ZShkaXJuYW1lKGRlY2xhcmF0aW9uRmlsZVBhdGgpLCBsaWJyYXJ5RmlsZVBhdGgpLnJlcGxhY2VBbGwoJ1xcXFwnLCAnLycpO1xuICBpZiAoIXJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKCcuJykpIHtcbiAgICByZWxhdGl2ZVBhdGggPSBgLi8ke3JlbGF0aXZlUGF0aH1gO1xuICB9XG4gIHJldHVybiBgLy8vIDxyZWZlcmVuY2UgcGF0aD1cIiR7cmVsYXRpdmVQYXRofVwiIC8+XFxuYDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29sbGVjdEFsbExpYnMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAvLyBUaGUgUkVTT0xWRUQgb3B0aW9ucywgYmVjYXVzZSBhIHBhY2thZ2UncyBgdHNjb25maWcuanNvbmAgaW5oZXJpdHMgYGxpYmAgZnJvbSB0aGUgc2hhcmVkIGJhc2UuIFRoZSByZXNvbHZlZFxuICAvLyBuYW1lcyBhcmUgZmlsZSBuYW1lcyAoYGxpYi5kb20uaXRlcmFibGUuZC50c2ApLCBzbyB0aGV5IGFyZSBtYXBwZWQgYmFjayBvbnRvIHRoZSBuYW1lcyBhIGRpcmVjdGl2ZSB0YWtlcy5cbiAgY29uc3QgeyBvcHRpb25zIH0gPSBwYXJzZVRzQ29uZmlnKFJlcG9QYXRocy5Uc0NvbmZpZ0pzb24pO1xuICBjb25zdCBsaWJzID0gbmV3IFNldCgob3B0aW9ucy5saWIgPz8gW10pLm1hcCgobGliKSA9PiBsaWIudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9ebGliXFwuLywgJycpLnJlcGxhY2UoL1xcLmRcXC50cyQvLCAnJykpKTtcblxuICBmb3IgKGNvbnN0IGZpbGUgb2YgYXdhaXQgcmVhZGRpclBvc2l4KFJlcG9QYXRocy5TcmMsIHsgcmVjdXJzaXZlOiB0cnVlIH0pKSB7XG4gICAgaWYgKCFmaWxlLmVuZHNXaXRoKCcudHMnKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlQ29udGVudCA9IHJlYWRGaWxlU3luYyhqb2luKFJlcG9QYXRocy5TcmMsIGZpbGUpLCAndXRmLTgnKTtcbiAgICAvLyBUaGUgcmVndWxhciBleHByZXNzaW9uIGFsd2F5cyBjYXB0dXJlcyBpdHMgb25lIGdyb3VwLCBzbyBubyBmYWxsYmFjayBmb3IgYSBtaXNzaW5nIG9uZSBpcyBuZWVkZWQuXG4gICAgZm9yIChjb25zdCBbLCBsaWJdIG9mIHNvdXJjZUNvbnRlbnQubWF0Y2hBbGwoUkVGRVJFTkNFX0xJQl9SRUdfRVhQKSkge1xuICAgICAgbGlicy5hZGQoU3RyaW5nKGxpYikudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFsuLi5saWJzXS5zb3J0KCk7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RBbGxUeXBlcygpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHsgb3B0aW9ucyB9ID0gcGFyc2VUc0NvbmZpZyhSZXBvUGF0aHMuVHNDb25maWdKc29uKTtcbiAgcmV0dXJuIChvcHRpb25zLnR5cGVzID8/IFtdKVxuICAgIC5maWx0ZXIoKHR5cGUpID0+IERFQ0xBUkFUSU9OX1JFRkVSRU5DRV9UWVBFUy5oYXModHlwZSkpXG4gICAgLnNvcnQoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVJbmRleChmb2xkZXI6IHN0cmluZyk6IFByb21pc2U8R2VuZXJhdGVJbmRleFJlc3VsdD4ge1xuICBjb25zdCBkaXJlbnRzID0gYXdhaXQgcmVhZGRpclBvc2l4KGZvbGRlciwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuICBjb25zdCBtYXliZUxpbmVzID0gYXdhaXQgYXN5bmNNYXAoZGlyZW50cywgKGRpcmVudCkgPT4gaGFuZGxlSW5kZXhEaXJlbnQoZm9sZGVyLCBkaXJlbnQpKTtcbiAgY29uc3QgbGluZXMgPSBtYXliZUxpbmVzLmZpbHRlcigobGluZSkgPT4gbGluZSAhPT0gdW5kZWZpbmVkKTtcblxuICBpZiAobGluZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEdlbmVyYXRlSW5kZXhSZXN1bHQuU2tpcHBlZDtcbiAgfVxuXG4gIGF3YWl0IGdlbmVyYXRlKGpvaW4oZm9sZGVyLCBSZXBvUGF0aHMuSW5kZXhUcyksIGxpbmVzKTtcbiAgcmV0dXJuIEdlbmVyYXRlSW5kZXhSZXN1bHQuU3VjY2Vzcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0TGliRmlsZXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBsZXQgZmlsZXMgPSBhd2FpdCByZWFkZGlyUG9zaXgoUmVwb1BhdGhzLlNyYywgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGZpbGVzID0gZmlsZXMubWFwKChmaWxlKSA9PiBub3JtYWxpemVJZlJlbGF0aXZlKGpvaW4oUmVwb1BhdGhzLlNyYywgZmlsZSkpKTtcbiAgcmV0dXJuIGZpbGVzLmZpbHRlcigoZmlsZSkgPT5cbiAgICBmaWxlLmVuZHNXaXRoKFJlcG9QYXRocy5Uc0V4dGVuc2lvbikgJiYgIWZpbGUuZW5kc1dpdGgoUmVwb1BhdGhzLkR0c0V4dGVuc2lvbikgJiYgIWZpbGUuZW5kc1dpdGgoJy50ZXN0LnRzJylcbiAgICAmJiAhZmlsZS5pbmNsdWRlcyhgLyR7UmVwb1BhdGhzLlRlc3RIZWxwZXJzfS9gKVxuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVJbmRleERpcmVudChmb2xkZXI6IHN0cmluZywgZGlyZW50OiBEaXJlbnQpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBpZiAoaXNFeGNsdWRlZEZyb21JbmRleChmb2xkZXIsIGRpcmVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgc291cmNlRmlsZTogc3RyaW5nO1xuICBsZXQgbmFtZTogc3RyaW5nO1xuICBpZiAoZGlyZW50LmlzRGlyZWN0b3J5KCkpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZW5lcmF0ZUluZGV4KGpvaW4oZm9sZGVyLCBkaXJlbnQubmFtZSkpO1xuICAgIGlmIChyZXN1bHQgIT09IEdlbmVyYXRlSW5kZXhSZXN1bHQuU3VjY2Vzcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzb3VyY2VGaWxlID0gbm9ybWFsaXplSWZSZWxhdGl2ZShqb2luKGRpcmVudC5uYW1lLCBSZXBvUGF0aHMuSW5kZXhUcykpO1xuICAgIG5hbWUgPSBkaXJlbnQubmFtZTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBleHRlbnNpb24gPSBleHRuYW1lKGRpcmVudC5uYW1lKTtcbiAgICBuYW1lID0gYmFzZW5hbWUoZGlyZW50Lm5hbWUsIGV4dGVuc2lvbik7XG4gICAgc291cmNlRmlsZSA9IG5vcm1hbGl6ZUlmUmVsYXRpdmUoZGlyZW50Lm5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIGBleHBvcnQgKiBhcyAnJHtuYW1lfScgZnJvbSAnJHtzb3VyY2VGaWxlfSc7YDtcbn1cblxuZnVuY3Rpb24gaXNFeGNsdWRlZEZpbGVOYW1lKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gIW5hbWUuZW5kc1dpdGgoUmVwb1BhdGhzLlRzRXh0ZW5zaW9uKSB8fCBuYW1lLmVuZHNXaXRoKCcudGVzdC50cycpIHx8IG5hbWUgPT09ICdzZXR1cC50cycgfHwgbmFtZS5lbmRzV2l0aCgnLXNldHVwLnRzJyk7XG59XG5cbmZ1bmN0aW9uIGlzRXhjbHVkZWRGcm9tSW5kZXgoZm9sZGVyOiBzdHJpbmcsIGRpcmVudDogRGlyZW50KTogYm9vbGVhbiB7XG4gIGNvbnN0IGV4Y2x1ZGVkTmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1JlcG9QYXRocy5JbmRleFRzLCBSZXBvUGF0aHMuVHlwZXMsIFJlcG9QYXRocy5TdHlsZXMsIFJlcG9QYXRocy5UZXN0SGVscGVyc107XG4gIGNvbnN0IGlzRXhjbHVkZWRFbnRyeSA9IGV4Y2x1ZGVkTmFtZXMuaW5jbHVkZXMoZGlyZW50Lm5hbWUpIHx8IGRpcmVudC5uYW1lLmVuZHNXaXRoKFJlcG9QYXRocy5EdHNFeHRlbnNpb24pIHx8IGZvbGRlci5zcGxpdCgnLycpLmluY2x1ZGVzKFJlcG9QYXRocy5UeXBlcyk7XG4gIHJldHVybiBpc0V4Y2x1ZGVkRW50cnkgfHwgKGRpcmVudC5pc0ZpbGUoKSAmJiBpc0V4Y2x1ZGVkRmlsZU5hbWUoZGlyZW50Lm5hbWUpKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0RXhwb3J0KHBhcmFtczogU2V0RXhwb3J0UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgZXhwb3J0Q29uZGl0aW9ucywgaXNXaWxkY2FyZCwgc291cmNlQ29uZGl0aW9uLCBzcmNGb2xkZXIgfSA9IHBhcmFtcztcbiAgY29uc3QgaW1wb3J0UGF0aCA9IHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IHNyY0ZvbGRlcixcbiAgICByZXBsYWNlcjogUmVwb1BhdGhzLkN1cnJlbnRGb2xkZXIsXG4gICAgc2VhcmNoVmFsdWU6IFJlcG9QYXRocy5TcmNcbiAgfSk7XG4gIGNvbnN0IGNvbmRpdGlvblBhdGggPSBpc1dpbGRjYXJkID8gYCR7aW1wb3J0UGF0aH0vJHtSZXBvUGF0aHMuQW55fWAgOiBpbXBvcnRQYXRoO1xuICBjb25zdCBkbXRzUGF0aCA9IHRvRGlzdFBhdGgoeyBmb3JtYXQ6IFJlcG9QYXRocy5Fc20sIGltcG9ydFBhdGgsIG5hbWU6IGlzV2lsZGNhcmQgPyBSZXBvUGF0aHMuQW55RG10cyA6IFJlcG9QYXRocy5JbmRleERtdHMgfSk7XG4gIGNvbnN0IGRjdHNQYXRoID0gdG9EaXN0UGF0aCh7IGZvcm1hdDogUmVwb1BhdGhzLkNqcywgaW1wb3J0UGF0aCwgbmFtZTogaXNXaWxkY2FyZCA/IFJlcG9QYXRocy5BbnlEY3RzIDogUmVwb1BhdGhzLkluZGV4RGN0cyB9KTtcbiAgY29uc3QgZG10c0ZvbGRlclBhdGggPSBkaXJuYW1lKGRtdHNQYXRoKTtcbiAgY29uc3QgZGN0c0ZvbGRlclBhdGggPSBkaXJuYW1lKGRjdHNQYXRoKTtcblxuICBpZiAoIWlzV2lsZGNhcmQgJiYgIWV4aXN0c1N5bmMoZGN0c1BhdGgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaXNUeXBlc09ubHkgPSBpbXBvcnRQYXRoLmluY2x1ZGVzKFJlcG9QYXRocy5UeXBlcyk7XG4gIGNvbnN0IG1qc1BhdGggPSB0b0Rpc3RQYXRoKHsgZm9ybWF0OiBSZXBvUGF0aHMuRXNtLCBpbXBvcnRQYXRoLCBuYW1lOiBpc1dpbGRjYXJkID8gUmVwb1BhdGhzLkFueU1qcyA6IFJlcG9QYXRocy5JbmRleE1qcyB9KTtcbiAgY29uc3QgY2pzUGF0aCA9IHRvRGlzdFBhdGgoeyBmb3JtYXQ6IFJlcG9QYXRocy5DanMsIGltcG9ydFBhdGgsIG5hbWU6IGlzV2lsZGNhcmQgPyBSZXBvUGF0aHMuQW55Q2pzIDogUmVwb1BhdGhzLkluZGV4Q2pzIH0pO1xuXG4gIGlmIChpc1R5cGVzT25seSkge1xuICAgIGV4cG9ydENvbmRpdGlvbnNbY29uZGl0aW9uUGF0aF0gPSB7XG4gICAgICBpbXBvcnQ6IHtcbiAgICAgICAgdHlwZXM6IGRtdHNQYXRoXG4gICAgICB9LFxuICAgICAgcmVxdWlyZToge1xuICAgICAgICB0eXBlczogZGN0c1BhdGhcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHNvdXJjZVBhdGggPSBub3JtYWxpemVJZlJlbGF0aXZlKGpvaW4oUmVwb1BhdGhzLlNyYywgaW1wb3J0UGF0aCwgaXNXaWxkY2FyZCA/IFJlcG9QYXRocy5BbnlUcyA6IFJlcG9QYXRocy5JbmRleFRzKSk7XG5cbiAgICBleHBvcnRDb25kaXRpb25zW2NvbmRpdGlvblBhdGhdID0ge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcGVyZmVjdGlvbmlzdC9zb3J0LW9iamVjdHMgLS0gT3JkZXIgbWF0dGVycyBvbmNlIGl0IGlzIHdyaXR0ZW4gdG8gYHBhY2thZ2UuanNvbmAuICovXG4gICAgICAvLyBGaXJzdCwgc28gaXQgd2lucyB3aGVyZXZlciBpdCBpcyBzZXQ6IGluc2lkZSB0aGUgcmVwb3NpdG9yeSwgYmVmb3JlIGFueXRoaW5nIGlzIGJ1aWx0LlxuICAgICAgLi4uKHNvdXJjZUNvbmRpdGlvbiAhPT0gdW5kZWZpbmVkICYmIHsgW3NvdXJjZUNvbmRpdGlvbl06IHNvdXJjZVBhdGggfSksXG4gICAgICBpbXBvcnQ6IHtcbiAgICAgICAgdHlwZXM6IGRtdHNQYXRoLFxuICAgICAgICBkZWZhdWx0OiBtanNQYXRoXG4gICAgICB9LFxuICAgICAgcmVxdWlyZToge1xuICAgICAgICB0eXBlczogZGN0c1BhdGgsXG4gICAgICAgIGRlZmF1bHQ6IGNqc1BhdGhcbiAgICAgIH1cbiAgICAgIC8qIGVzbGludC1lbmFibGUgcGVyZmVjdGlvbmlzdC9zb3J0LW9iamVjdHMgLS0gT3JkZXIgbWF0dGVycyBvbmNlIGl0IGlzIHdyaXR0ZW4gdG8gYHBhY2thZ2UuanNvbmAuICovXG4gICAgfTtcbiAgfVxuXG4gIGlmIChpbXBvcnRQYXRoID09PSBSZXBvUGF0aHMuQ3VycmVudEZvbGRlciBhcyBzdHJpbmcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIWlzV2lsZGNhcmQpIHtcbiAgICBhd2FpdCB3cml0ZVN1YnBhdGhQYWNrYWdlSnNvbihcbiAgICAgIGltcG9ydFBhdGgsXG4gICAgICBpc1R5cGVzT25seVxuICAgICAgICA/IHsgdHlwZTogJ21vZHVsZScsIHR5cGVzOiByZWxhdGl2ZShpbXBvcnRQYXRoLCBkY3RzUGF0aCkgfVxuICAgICAgICA6IHsgbWFpbjogcmVsYXRpdmUoaW1wb3J0UGF0aCwgY2pzUGF0aCksIG1vZHVsZTogcmVsYXRpdmUoaW1wb3J0UGF0aCwgbWpzUGF0aCksIHR5cGU6ICdtb2R1bGUnLCB0eXBlczogcmVsYXRpdmUoaW1wb3J0UGF0aCwgZGN0c1BhdGgpIH1cbiAgICApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvciAoY29uc3QgZmlsZSBvZiBhd2FpdCByZWFkZGlyUG9zaXgoZGN0c0ZvbGRlclBhdGgpKSB7XG4gICAgaWYgKCFmaWxlLmVuZHNXaXRoKFJlcG9QYXRocy5EY3RzRXh0ZW5zaW9uKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IG5hbWUgPSBiYXNlbmFtZShmaWxlLCBSZXBvUGF0aHMuRGN0c0V4dGVuc2lvbik7XG4gICAgY29uc3QgcGFja2FnZUpzb25Gb2xkZXJQYXRoID0gam9pbihpbXBvcnRQYXRoLCBuYW1lKTtcbiAgICBjb25zdCB0eXBlcyA9IHJlbGF0aXZlKHBhY2thZ2VKc29uRm9sZGVyUGF0aCwgam9pbihkY3RzRm9sZGVyUGF0aCwgbmFtZSArIFJlcG9QYXRocy5EY3RzRXh0ZW5zaW9uKSk7XG4gICAgYXdhaXQgd3JpdGVTdWJwYXRoUGFja2FnZUpzb24oXG4gICAgICBwYWNrYWdlSnNvbkZvbGRlclBhdGgsXG4gICAgICBpc1R5cGVzT25seVxuICAgICAgICA/IHsgdHlwZTogJ21vZHVsZScsIHR5cGVzIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgbWFpbjogcmVsYXRpdmUocGFja2FnZUpzb25Gb2xkZXJQYXRoLCBqb2luKGRjdHNGb2xkZXJQYXRoLCBuYW1lICsgUmVwb1BhdGhzLkNqc0V4dGVuc2lvbikpLFxuICAgICAgICAgIG1vZHVsZTogcmVsYXRpdmUocGFja2FnZUpzb25Gb2xkZXJQYXRoLCBqb2luKGRtdHNGb2xkZXJQYXRoLCBuYW1lICsgUmVwb1BhdGhzLk1qc0V4dGVuc2lvbikpLFxuICAgICAgICAgIHR5cGU6ICdtb2R1bGUnLFxuICAgICAgICAgIHR5cGVzXG4gICAgICAgIH1cbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvQ3RzQ29udGVudChjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgY3RzQ29udGVudCA9IHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IGNvbnRlbnQsXG4gICAgcmVwbGFjZXI6ICdmcm9tIFxcJyQ8SW1wb3J0UGF0aD4uY2pzXFwnOycsXG4gICAgc2VhcmNoVmFsdWU6IFNUQVRJQ19JTVBPUlRfUkVHX0VYUFxuICB9KTtcbiAgY3RzQ29udGVudCA9IHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IGN0c0NvbnRlbnQsXG4gICAgcmVwbGFjZXI6ICdpbXBvcnQoJDxRdW90ZT4kPEltcG9ydFBhdGg+LmNqcyQ8UXVvdGU+KScsXG4gICAgc2VhcmNoVmFsdWU6IERZTkFNSUNfSU1QT1JUX1JFR19FWFBcbiAgfSk7XG5cbiAgLy8gQSBgLmQuY3RzYCBmaWxlIGlzIGEgQ29tbW9uSlMgbW9kdWxlLiBUeXBlLW9ubHkgaW1wb3J0cyBvZiBhIGJhcmUgc3BlY2lmaWVyIHJlc29sdmluZyB0byBhblxuICAvLyBFU00tb25seSBwYWNrYWdlIG5lZWQgYSBgcmVzb2x1dGlvbi1tb2RlYCBhdHRyaWJ1dGUsIGVsc2UgYHRzY2AgcmVwb3J0cyBUUzE1NDEgLyBUUzE1NDIuXG4gIC8vIFBhc3NpbmcgYCdpbXBvcnQnYCBpcyB2YWxpZCBmb3IgQ29tbW9uSlMgdGFyZ2V0cyB0b28sIHNvIGV2ZXJ5IGJhcmUgc3BlY2lmaWVyIHJlY2VpdmVzIGl0LlxuICAvLyBUaGUgRVNNIGAuZC5tdHNgIG5lZWRzIG5vIHN1Y2ggYXR0cmlidXRlLCBzbyB0aGlzIHRyYW5zZm9ybSBydW5zIG9uIENvbW1vbkpTIGNvbnRlbnQgb25seS5cbiAgY3RzQ29udGVudCA9IHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IGN0c0NvbnRlbnQsXG4gICAgcmVwbGFjZXI6ICdpbXBvcnQgdHlwZSAkPENsYXVzZT4gZnJvbSBcXCckPFNwZWNpZmllcj5cXCcgd2l0aCB7IFxcJ3Jlc29sdXRpb24tbW9kZVxcJzogXFwnaW1wb3J0XFwnIH07JyxcbiAgICBzZWFyY2hWYWx1ZTogQkFSRV9UWVBFX0lNUE9SVF9SRUdfRVhQXG4gIH0pO1xuICByZXR1cm4gcmVwbGFjZUFsbCh7XG4gICAgJHN0cmluZzogY3RzQ29udGVudCxcbiAgICByZXBsYWNlcjogJ2ltcG9ydChcIiQ8U3BlY2lmaWVyPlwiLCB7IHdpdGg6IHsgXFwncmVzb2x1dGlvbi1tb2RlXFwnOiBcXCdpbXBvcnRcXCcgfSB9KScsXG4gICAgc2VhcmNoVmFsdWU6IEJBUkVfSU5MSU5FX0lNUE9SVF9UWVBFX1JFR19FWFBcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHRvRGlzdFBhdGgocGFyYW1zOiBUb0Rpc3RQYXRoUGFyYW1zKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZUlmUmVsYXRpdmUoam9pbihSZXBvUGF0aHMuRGlzdExpYiwgcGFyYW1zLmZvcm1hdCwgcGFyYW1zLmltcG9ydFBhdGgsIHBhcmFtcy5uYW1lKSk7XG59XG5cbmZ1bmN0aW9uIHRvTXRzQ29udGVudChjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtdHNDb250ZW50ID0gcmVwbGFjZUFsbCh7XG4gICAgJHN0cmluZzogY29udGVudCxcbiAgICByZXBsYWNlcjogJ2Zyb20gXFwnJDxJbXBvcnRQYXRoPi5tanNcXCc7JyxcbiAgICBzZWFyY2hWYWx1ZTogU1RBVElDX0lNUE9SVF9SRUdfRVhQXG4gIH0pO1xuICByZXR1cm4gcmVwbGFjZUFsbCh7XG4gICAgJHN0cmluZzogbXRzQ29udGVudCxcbiAgICByZXBsYWNlcjogJ2ltcG9ydCgkPFF1b3RlPiQ8SW1wb3J0UGF0aD4ubWpzJDxRdW90ZT4pJyxcbiAgICBzZWFyY2hWYWx1ZTogRFlOQU1JQ19JTVBPUlRfUkVHX0VYUFxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVTdWJwYXRoUGFja2FnZUpzb24oZm9sZGVyOiBzdHJpbmcsIHBhY2thZ2VKc29uOiBQYWNrYWdlSnNvbik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBta2Rpcihmb2xkZXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhd2FpdCB3cml0ZUpzb24oam9pbihmb2xkZXIsIFJlcG9QYXRocy5QYWNrYWdlSnNvbiksIHBhY2thZ2VKc29uKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWlCQSxtQkFBeUI7QUFDekIsMEJBQTRCO0FBQzVCLGtCQU9PO0FBQ1Asb0JBQTJCO0FBQzNCLHFCQUF3QjtBQUN4QixxQkFHTztBQUNQLHNCQUtPO0FBQ1AsdUJBQTJDO0FBQzNDLDBCQUFvQjtBQUlwQixtQkFBMkI7QUFDM0IscUNBQXNDO0FBQ3RDLDRCQUE2QjtBQUM3QiwrQkFBaUM7QUFDakMsaUNBQThCO0FBQzlCLDRCQUF5QjtBQUN6QixnQkFBNkI7QUFDN0Isa0JBQTBCO0FBQzFCLHFCQUErQjtBQUMvQixpQkFBZ0M7QUFDaEMsNkJBQW1DO0FBQ25DLHdCQUEwQjtBQUMxQixrQkFBNkI7QUFLdEIsTUFBTSxpQkFBaUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVN2QixNQUFNLHNCQUF5QztBQUFBLEVBQ3BEO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Y7QUFPTyxNQUFNLG1CQUFtQjtBQTJCaEMsTUFBTSw4QkFBOEIsb0JBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUdwRCxNQUFNLDBCQUEwQixDQUFDLGNBQWMsTUFBTSxFQUFFLEtBQUssR0FBRztBQUMvRCxNQUFNLHdCQUF3QjtBQUc5QixNQUFNLDJCQUEyQjtBQUdqQyxNQUFNLGtDQUFrQztBQUV4QyxNQUFNLHdCQUF3QjtBQUs5QixNQUFNLHlCQUF5QjtBQXVDL0IsZUFBc0Isb0JBQW1DO0FBQ3ZELFlBQU0seUJBQVc7QUFDakIsYUFBVyxRQUFRLFVBQU0sd0JBQWEsNEJBQVUsS0FBSyxFQUFFLFdBQVcsS0FBSyxDQUFDLEdBQUc7QUFDekUsWUFBSSxzQkFBUyxJQUFJLE1BQU0sNEJBQVUsU0FBbUI7QUFDbEQsZ0JBQU0sd0JBQUcsa0JBQUssNEJBQVUsS0FBSyxJQUFJLENBQUM7QUFBQSxJQUNwQztBQUVBLFFBQUksS0FBSyxTQUFTLDRCQUFVLFlBQVksS0FBSyxDQUFDLEtBQUssTUFBTSxHQUFHLEVBQUUsU0FBUyw0QkFBVSxLQUFLLEdBQUc7QUFDdkYsZ0JBQU0sd0JBQUcsa0JBQUssNEJBQVUsS0FBSyxJQUFJLENBQUM7QUFBQSxJQUNwQztBQUFBLEVBQ0Y7QUFFQSxhQUFXLFFBQVEsVUFBTSx3QkFBYSw0QkFBVSxlQUFlLEVBQUUsV0FBVyxLQUFLLENBQUMsR0FBRztBQUNuRixZQUFLLHNCQUFTLElBQUksTUFBTSw0QkFBVSxlQUEyQixTQUFTLDRCQUFVLGVBQTBCLEtBQUssV0FBVyw0QkFBVSxXQUFXLEdBQUc7QUFDaEo7QUFBQSxJQUNGO0FBRUEsY0FBTSxvQkFBRyxJQUFJO0FBQUEsRUFDZjtBQUNGO0FBVUEsZUFBc0IsYUFBYSxVQUErQixDQUFDLEdBQWtCO0FBQ25GLFFBQU0sRUFBRSwwQkFBMEIsQ0FBQyxjQUEyQiwyQ0FBaUIsRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFJO0FBQzlGLFFBQU0sV0FBVyxNQUFNLFlBQVk7QUFDbkMsUUFBTSxtQkFBbUIsRUFBRSxRQUFRLE9BQU8sVUFBVSx3QkFBd0IsQ0FBQztBQUM3RSxRQUFNLG1CQUFtQixFQUFFLFFBQVEsT0FBTyxVQUFVLHdCQUF3QixDQUFDO0FBQy9FO0FBWUEsZUFBc0Isb0JBQW1DO0FBQ3ZELFlBQU0sMEJBQWEsQ0FBQyxPQUFHLDJDQUFtQixFQUFFLE1BQU0sTUFBTSxDQUFDLEdBQUcsYUFBYSx1QkFBdUIsQ0FBQztBQUVqRyxRQUFNLHNCQUFrQiwrQkFBVyxrQkFBSyw0QkFBVSxLQUFLLFlBQVksQ0FBQyxJQUFJLFlBQVk7QUFDcEYsUUFBTSxVQUFVLE1BQU0sZUFBZTtBQUNyQyxRQUFNLFdBQVcsZ0JBQWdCO0FBRWpDLGFBQVcsUUFBUSxVQUFNLHdCQUFhLDRCQUFVLEtBQUssRUFBRSxXQUFXLEtBQUssQ0FBQyxHQUFHO0FBQ3pFLFFBQUksQ0FBQyxLQUFLLFNBQVMsNEJBQVUsWUFBWSxLQUFLLEtBQUssV0FBVyw0QkFBVSxXQUFXLEdBQUc7QUFDcEY7QUFBQSxJQUNGO0FBRUEsVUFBTSxhQUFTLHFCQUFRLElBQUk7QUFDM0IsVUFBTSxXQUFPLHNCQUFTLE1BQU0sNEJBQVUsWUFBWTtBQUNsRCxVQUFNLFVBQVUsVUFBTSw4QkFBUyxrQkFBSyw0QkFBVSxLQUFLLElBQUksR0FBRyxPQUFPO0FBRWpFLFVBQU0sY0FBVSxrQkFBSyw0QkFBVSxTQUFTLDRCQUFVLEtBQUssUUFBUSxPQUFPLDRCQUFVLGFBQWE7QUFDN0YsVUFBTSxjQUFVLGtCQUFLLDRCQUFVLFNBQVMsNEJBQVUsS0FBSyxRQUFRLE9BQU8sNEJBQVUsYUFBYTtBQUU3RixjQUFNLDJCQUFNLHFCQUFRLE9BQU8sR0FBRyxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQ2pELGNBQU0sMkJBQU0scUJBQVEsT0FBTyxHQUFHLEVBQUUsV0FBVyxLQUFLLENBQUM7QUFFakQsUUFBSSxhQUFhLGFBQWEsT0FBTztBQUNyQyxRQUFJLGFBQWEsYUFBYSxPQUFPO0FBRXJDLFFBQUksU0FBUyxtQkFBbUIsV0FBVyxLQUFLO0FBQzlDLFlBQU0sYUFBYSwrQkFBK0IsT0FBTyxJQUFJLGlDQUFpQyxRQUFRO0FBQ3RHLG1CQUFhLGFBQWE7QUFDMUIsbUJBQWEsYUFBYTtBQUFBLElBQzVCLE9BQU87QUFDTCxtQkFBYSw0QkFBNEIsRUFBRSxxQkFBcUIsU0FBUyxXQUFXLDRCQUFVLGVBQWUsaUJBQWlCLGlCQUFpQiw0QkFBVSxJQUFJLENBQUMsSUFDMUo7QUFDSixtQkFBYSw0QkFBNEIsRUFBRSxxQkFBcUIsU0FBUyxXQUFXLDRCQUFVLGVBQWUsaUJBQWlCLGlCQUFpQiw0QkFBVSxJQUFJLENBQUMsSUFDMUo7QUFBQSxJQUNOO0FBRUEsY0FBTSwyQkFBVSxTQUFTLFVBQVU7QUFDbkMsY0FBTSwyQkFBVSxTQUFTLFVBQVU7QUFBQSxFQUNyQztBQUNGO0FBVUEsZUFBc0IsdUJBQXVCLFVBQXlDLENBQUMsR0FBa0I7QUFDdkcsUUFBTSxFQUFFLGdCQUFnQixJQUFJO0FBQzVCLFFBQU0sYUFBdUIsQ0FBQyw0QkFBVSxHQUFHO0FBRTNDLGFBQVcsVUFBVSxVQUFNLHdCQUFhLDRCQUFVLEtBQUssRUFBRSxXQUFXLE1BQU0sZUFBZSxLQUFLLENBQUMsR0FBRztBQUNoRyxRQUFJLENBQUMsT0FBTyxZQUFZLEdBQUc7QUFDekI7QUFBQSxJQUNGO0FBRUEsVUFBTSxXQUFPLGtCQUFLLE9BQU8sWUFBWSxPQUFPLElBQUk7QUFFaEQsUUFBSSxLQUFLLFNBQVMsNEJBQVUsTUFBTSxLQUFLLEtBQUssU0FBUyw0QkFBVSxXQUFXLEdBQUc7QUFDM0U7QUFBQSxJQUNGO0FBRUEsZUFBVyxLQUFLLElBQUk7QUFBQSxFQUN0QjtBQUVBLGFBQVcsS0FBSztBQUVoQixNQUFJLFlBQVk7QUFFaEIsWUFBTSw0QkFBZ0IsT0FBTyxnQkFBZ0I7QUFDM0MsVUFBTSxhQUFhLFlBQVk7QUFDL0IsVUFBTSxtQkFBaUQsQ0FBQztBQUN4RCxnQkFBWSxVQUFVO0FBQ3RCLGVBQVcsYUFBYSxZQUFZO0FBQ2xDLFlBQU0sVUFBVSxFQUFFLGtCQUFrQixZQUFZLE9BQU8saUJBQWlCLFVBQVUsQ0FBQztBQUNuRixZQUFNLFVBQVUsRUFBRSxrQkFBa0IsWUFBWSxNQUFNLGlCQUFpQixVQUFVLENBQUM7QUFBQSxJQUNwRjtBQUVBLGdCQUFZLEtBQUMsaUNBQVksWUFBWSxZQUFZLE9BQU87QUFBQSxFQUMxRCxDQUFDO0FBR0QsTUFBSSxXQUFXO0FBQ2IsVUFBTSxJQUFJLE1BQU0sMEVBQTBFO0FBQUEsRUFDNUY7QUFDRjtBQVFBLGVBQXNCLHVCQUFzQztBQUMxRCxRQUFNLGNBQWMsNEJBQVUsR0FBRztBQUNuQztBQVFBLGVBQXNCLGNBQWMsUUFBMkIscUJBQW9DO0FBQ2pHLGFBQVcsUUFBUSxPQUFPO0FBQ3hCLGNBQU0sK0JBQWUsSUFBSTtBQUFBLEVBQzNCO0FBQ0Y7QUFFQSxTQUFTLCtCQUErQixNQUF3QjtBQUM5RCxTQUFPLEdBQ0wsS0FDRyxJQUFJLENBQUMsUUFBUSxPQUFPLHVCQUF1QixJQUFJLEdBQUcsTUFBTSxFQUN4RCxLQUFLLElBQUksQ0FDZDtBQUFBO0FBQ0Y7QUFFQSxTQUFTLGlDQUFpQyxPQUF5QjtBQUNqRSxTQUFPLE1BQU0sV0FBVyxJQUNwQixLQUNBLEdBQ0EsTUFDRyxJQUFJLENBQUMsU0FBUyx5QkFBeUIsSUFBSSxNQUFNLEVBQ2pELEtBQUssSUFBSSxDQUNkO0FBQUE7QUFDSjtBQUVBLGVBQWUsbUJBQW1CLFFBQWlEO0FBQ2pGLFFBQU0sRUFBRSxRQUFRLFVBQVUsd0JBQXdCLElBQUk7QUFDdEQsUUFBTSxZQUFZLFdBQVcsUUFBUSw0QkFBVSxlQUFlLDRCQUFVO0FBQ3hFLFFBQU0sZUFBNkI7QUFBQTtBQUFBO0FBQUEsSUFHakMsZUFBZSxvQkFBQUEsUUFBUSxJQUFJO0FBQUEsSUFDM0IsUUFBUTtBQUFBLE1BQ04sSUFBSTtBQUFBLElBQ047QUFBQSxJQUNBLFFBQVE7QUFBQSxJQUNSLGFBQWE7QUFBQSxJQUNiO0FBQUEsSUFDQSxVQUFVO0FBQUEsSUFDVixZQUFRLGtCQUFLLDRCQUFVLFNBQVMsTUFBTTtBQUFBLElBQ3RDLFVBQVU7QUFBQSxJQUNWLFNBQVM7QUFBQSxNQUNQLHdCQUF3QixXQUFXLEtBQUs7QUFBQSxVQUN4QyxvQ0FBYTtBQUFBLFVBQ2Isc0RBQXNCLFNBQVM7QUFBQSxJQUNqQztBQUFBLElBQ0EsV0FBVztBQUFBLElBQ1gsUUFBUTtBQUFBLElBQ1IsYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLGVBQWUsVUFBTSx3QkFBUSxZQUFZO0FBQy9DLE1BQUk7QUFDRixVQUFNLGFBQWEsUUFBUTtBQUFBLEVBQzdCLFVBQUU7QUFDQSxVQUFNLGFBQWEsUUFBUTtBQUFBLEVBQzdCO0FBQ0Y7QUFFQSxTQUFTLDRCQUE0QixRQUFtRDtBQUN0RixRQUFNLEVBQUUscUJBQXFCLFdBQVcsaUJBQWlCLGdCQUFnQixJQUFJO0FBQzdFLFFBQU0sc0JBQWtCLGtCQUFLLDRCQUFVLFNBQVMsaUJBQWlCLGtCQUFrQixTQUFTO0FBQzVGLE1BQUksbUJBQWUsaUJBQUFDLGNBQWUscUJBQVEsbUJBQW1CLEdBQUcsZUFBZSxFQUFFLFdBQVcsTUFBTSxHQUFHO0FBQ3JHLE1BQUksQ0FBQyxhQUFhLFdBQVcsR0FBRyxHQUFHO0FBQ2pDLG1CQUFlLEtBQUssWUFBWTtBQUFBLEVBQ2xDO0FBQ0EsU0FBTyx3QkFBd0IsWUFBWTtBQUFBO0FBQzdDO0FBRUEsZUFBZSxpQkFBb0M7QUFHakQsUUFBTSxFQUFFLFFBQVEsUUFBSSwwQ0FBYyw0QkFBVSxZQUFZO0FBQ3hELFFBQU0sT0FBTyxJQUFJLEtBQUssUUFBUSxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLFlBQVksRUFBRSxRQUFRLFVBQVUsRUFBRSxFQUFFLFFBQVEsWUFBWSxFQUFFLENBQUMsQ0FBQztBQUV0SCxhQUFXLFFBQVEsVUFBTSx3QkFBYSw0QkFBVSxLQUFLLEVBQUUsV0FBVyxLQUFLLENBQUMsR0FBRztBQUN6RSxRQUFJLENBQUMsS0FBSyxTQUFTLEtBQUssR0FBRztBQUN6QjtBQUFBLElBQ0Y7QUFFQSxVQUFNLG9CQUFnQixpQ0FBYSxrQkFBSyw0QkFBVSxLQUFLLElBQUksR0FBRyxPQUFPO0FBRXJFLGVBQVcsQ0FBQyxFQUFFLEdBQUcsS0FBSyxjQUFjLFNBQVMscUJBQXFCLEdBQUc7QUFDbkUsV0FBSyxJQUFJLE9BQU8sR0FBRyxFQUFFLFlBQVksQ0FBQztBQUFBLElBQ3BDO0FBQUEsRUFDRjtBQUVBLFNBQU8sQ0FBQyxHQUFHLElBQUksRUFBRSxLQUFLO0FBQ3hCO0FBRUEsU0FBUyxrQkFBNEI7QUFDbkMsUUFBTSxFQUFFLFFBQVEsUUFBSSwwQ0FBYyw0QkFBVSxZQUFZO0FBQ3hELFVBQVEsUUFBUSxTQUFTLENBQUMsR0FDdkIsT0FBTyxDQUFDLFNBQVMsNEJBQTRCLElBQUksSUFBSSxDQUFDLEVBQ3RELEtBQUs7QUFDVjtBQUVBLGVBQWUsY0FBYyxRQUE4QztBQUN6RSxRQUFNLFVBQVUsVUFBTSx3QkFBYSxRQUFRLEVBQUUsZUFBZSxLQUFLLENBQUM7QUFDbEUsUUFBTSxhQUFhLFVBQU0sdUJBQVMsU0FBUyxDQUFDLFdBQVcsa0JBQWtCLFFBQVEsTUFBTSxDQUFDO0FBQ3hGLFFBQU0sUUFBUSxXQUFXLE9BQU8sQ0FBQyxTQUFTLFNBQVMsTUFBUztBQUU1RCxNQUFJLE1BQU0sV0FBVyxHQUFHO0FBQ3RCLFdBQU87QUFBQSxFQUNUO0FBRUEsWUFBTSxvQ0FBUyxrQkFBSyxRQUFRLDRCQUFVLE9BQU8sR0FBRyxLQUFLO0FBQ3JELFNBQU87QUFDVDtBQUVBLGVBQWUsY0FBaUM7QUFDOUMsTUFBSSxRQUFRLFVBQU0sd0JBQWEsNEJBQVUsS0FBSyxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQ2pFLFVBQVEsTUFBTSxJQUFJLENBQUMsYUFBUyxxQ0FBb0Isa0JBQUssNEJBQVUsS0FBSyxJQUFJLENBQUMsQ0FBQztBQUMxRSxTQUFPLE1BQU07QUFBQSxJQUFPLENBQUMsU0FDbkIsS0FBSyxTQUFTLDRCQUFVLFdBQVcsS0FBSyxDQUFDLEtBQUssU0FBUyw0QkFBVSxZQUFZLEtBQUssQ0FBQyxLQUFLLFNBQVMsVUFBVSxLQUN4RyxDQUFDLEtBQUssU0FBUyxJQUFJLDRCQUFVLFdBQVcsR0FBRztBQUFBLEVBQ2hEO0FBQ0Y7QUFFQSxlQUFlLGtCQUFrQixRQUFnQixRQUE2QztBQUM1RixNQUFJLG9CQUFvQixRQUFRLE1BQU0sR0FBRztBQUN2QztBQUFBLEVBQ0Y7QUFFQSxNQUFJO0FBQ0osTUFBSTtBQUNKLE1BQUksT0FBTyxZQUFZLEdBQUc7QUFDeEIsVUFBTSxTQUFTLE1BQU0sa0JBQWMsa0JBQUssUUFBUSxPQUFPLElBQUksQ0FBQztBQUM1RCxRQUFJLFdBQVcseUJBQTZCO0FBQzFDO0FBQUEsSUFDRjtBQUNBLHFCQUFhLHFDQUFvQixrQkFBSyxPQUFPLE1BQU0sNEJBQVUsT0FBTyxDQUFDO0FBQ3JFLFdBQU8sT0FBTztBQUFBLEVBQ2hCLE9BQU87QUFDTCxVQUFNLGdCQUFZLHFCQUFRLE9BQU8sSUFBSTtBQUNyQyxlQUFPLHNCQUFTLE9BQU8sTUFBTSxTQUFTO0FBQ3RDLHFCQUFhLGlDQUFvQixPQUFPLElBQUk7QUFBQSxFQUM5QztBQUVBLFNBQU8sZ0JBQWdCLElBQUksV0FBVyxVQUFVO0FBQ2xEO0FBRUEsU0FBUyxtQkFBbUIsTUFBdUI7QUFDakQsU0FBTyxDQUFDLEtBQUssU0FBUyw0QkFBVSxXQUFXLEtBQUssS0FBSyxTQUFTLFVBQVUsS0FBSyxTQUFTLGNBQWMsS0FBSyxTQUFTLFdBQVc7QUFDL0g7QUFFQSxTQUFTLG9CQUFvQixRQUFnQixRQUF5QjtBQUNwRSxRQUFNLGdCQUFtQyxDQUFDLDRCQUFVLFNBQVMsNEJBQVUsT0FBTyw0QkFBVSxRQUFRLDRCQUFVLFdBQVc7QUFDckgsUUFBTSxrQkFBa0IsY0FBYyxTQUFTLE9BQU8sSUFBSSxLQUFLLE9BQU8sS0FBSyxTQUFTLDRCQUFVLFlBQVksS0FBSyxPQUFPLE1BQU0sR0FBRyxFQUFFLFNBQVMsNEJBQVUsS0FBSztBQUN6SixTQUFPLG1CQUFvQixPQUFPLE9BQU8sS0FBSyxtQkFBbUIsT0FBTyxJQUFJO0FBQzlFO0FBRUEsZUFBZSxVQUFVLFFBQXdDO0FBQy9ELFFBQU0sRUFBRSxrQkFBa0IsWUFBWSxpQkFBaUIsVUFBVSxJQUFJO0FBQ3JFLFFBQU0saUJBQWEsMEJBQVc7QUFBQSxJQUM1QixTQUFTO0FBQUEsSUFDVCxVQUFVLDRCQUFVO0FBQUEsSUFDcEIsYUFBYSw0QkFBVTtBQUFBLEVBQ3pCLENBQUM7QUFDRCxRQUFNLGdCQUFnQixhQUFhLEdBQUcsVUFBVSxJQUFJLDRCQUFVLEdBQUcsS0FBSztBQUN0RSxRQUFNLFdBQVcsV0FBVyxFQUFFLFFBQVEsNEJBQVUsS0FBSyxZQUFZLE1BQU0sYUFBYSw0QkFBVSxVQUFVLDRCQUFVLFVBQVUsQ0FBQztBQUM3SCxRQUFNLFdBQVcsV0FBVyxFQUFFLFFBQVEsNEJBQVUsS0FBSyxZQUFZLE1BQU0sYUFBYSw0QkFBVSxVQUFVLDRCQUFVLFVBQVUsQ0FBQztBQUM3SCxRQUFNLHFCQUFpQixxQkFBUSxRQUFRO0FBQ3ZDLFFBQU0scUJBQWlCLHFCQUFRLFFBQVE7QUFFdkMsTUFBSSxDQUFDLGNBQWMsS0FBQywyQkFBVyxRQUFRLEdBQUc7QUFDeEM7QUFBQSxFQUNGO0FBRUEsUUFBTSxjQUFjLFdBQVcsU0FBUyw0QkFBVSxLQUFLO0FBQ3ZELFFBQU0sVUFBVSxXQUFXLEVBQUUsUUFBUSw0QkFBVSxLQUFLLFlBQVksTUFBTSxhQUFhLDRCQUFVLFNBQVMsNEJBQVUsU0FBUyxDQUFDO0FBQzFILFFBQU0sVUFBVSxXQUFXLEVBQUUsUUFBUSw0QkFBVSxLQUFLLFlBQVksTUFBTSxhQUFhLDRCQUFVLFNBQVMsNEJBQVUsU0FBUyxDQUFDO0FBRTFILE1BQUksYUFBYTtBQUNmLHFCQUFpQixhQUFhLElBQUk7QUFBQSxNQUNoQyxRQUFRO0FBQUEsUUFDTixPQUFPO0FBQUEsTUFDVDtBQUFBLE1BQ0EsU0FBUztBQUFBLFFBQ1AsT0FBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUEsRUFDRixPQUFPO0FBQ0wsVUFBTSxpQkFBYSxxQ0FBb0Isa0JBQUssNEJBQVUsS0FBSyxZQUFZLGFBQWEsNEJBQVUsUUFBUSw0QkFBVSxPQUFPLENBQUM7QUFFeEgscUJBQWlCLGFBQWEsSUFBSTtBQUFBO0FBQUE7QUFBQSxNQUdoQyxHQUFJLG9CQUFvQixVQUFhLEVBQUUsQ0FBQyxlQUFlLEdBQUcsV0FBVztBQUFBLE1BQ3JFLFFBQVE7QUFBQSxRQUNOLE9BQU87QUFBQSxRQUNQLFNBQVM7QUFBQSxNQUNYO0FBQUEsTUFDQSxTQUFTO0FBQUEsUUFDUCxPQUFPO0FBQUEsUUFDUCxTQUFTO0FBQUEsTUFDWDtBQUFBO0FBQUEsSUFFRjtBQUFBLEVBQ0Y7QUFFQSxNQUFJLGVBQWUsNEJBQVUsZUFBeUI7QUFDcEQ7QUFBQSxFQUNGO0FBRUEsTUFBSSxDQUFDLFlBQVk7QUFDZixVQUFNO0FBQUEsTUFDSjtBQUFBLE1BQ0EsY0FDSSxFQUFFLE1BQU0sVUFBVSxXQUFPLHNCQUFTLFlBQVksUUFBUSxFQUFFLElBQ3hELEVBQUUsVUFBTSxzQkFBUyxZQUFZLE9BQU8sR0FBRyxZQUFRLHNCQUFTLFlBQVksT0FBTyxHQUFHLE1BQU0sVUFBVSxXQUFPLHNCQUFTLFlBQVksUUFBUSxFQUFFO0FBQUEsSUFDMUk7QUFDQTtBQUFBLEVBQ0Y7QUFFQSxhQUFXLFFBQVEsVUFBTSx3QkFBYSxjQUFjLEdBQUc7QUFDckQsUUFBSSxDQUFDLEtBQUssU0FBUyw0QkFBVSxhQUFhLEdBQUc7QUFDM0M7QUFBQSxJQUNGO0FBQ0EsVUFBTSxXQUFPLHNCQUFTLE1BQU0sNEJBQVUsYUFBYTtBQUNuRCxVQUFNLDRCQUF3QixrQkFBSyxZQUFZLElBQUk7QUFDbkQsVUFBTSxZQUFRLHNCQUFTLDJCQUF1QixrQkFBSyxnQkFBZ0IsT0FBTyw0QkFBVSxhQUFhLENBQUM7QUFDbEcsVUFBTTtBQUFBLE1BQ0o7QUFBQSxNQUNBLGNBQ0ksRUFBRSxNQUFNLFVBQVUsTUFBTSxJQUN4QjtBQUFBLFFBQ0EsVUFBTSxzQkFBUywyQkFBdUIsa0JBQUssZ0JBQWdCLE9BQU8sNEJBQVUsWUFBWSxDQUFDO0FBQUEsUUFDekYsWUFBUSxzQkFBUywyQkFBdUIsa0JBQUssZ0JBQWdCLE9BQU8sNEJBQVUsWUFBWSxDQUFDO0FBQUEsUUFDM0YsTUFBTTtBQUFBLFFBQ047QUFBQSxNQUNGO0FBQUEsSUFDSjtBQUFBLEVBQ0Y7QUFDRjtBQUVBLFNBQVMsYUFBYSxTQUF5QjtBQUM3QyxNQUFJLGlCQUFhLDBCQUFXO0FBQUEsSUFDMUIsU0FBUztBQUFBLElBQ1QsVUFBVTtBQUFBLElBQ1YsYUFBYTtBQUFBLEVBQ2YsQ0FBQztBQUNELG1CQUFhLDBCQUFXO0FBQUEsSUFDdEIsU0FBUztBQUFBLElBQ1QsVUFBVTtBQUFBLElBQ1YsYUFBYTtBQUFBLEVBQ2YsQ0FBQztBQU1ELG1CQUFhLDBCQUFXO0FBQUEsSUFDdEIsU0FBUztBQUFBLElBQ1QsVUFBVTtBQUFBLElBQ1YsYUFBYTtBQUFBLEVBQ2YsQ0FBQztBQUNELGFBQU8sMEJBQVc7QUFBQSxJQUNoQixTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsSUFDVixhQUFhO0FBQUEsRUFDZixDQUFDO0FBQ0g7QUFFQSxTQUFTLFdBQVcsUUFBa0M7QUFDcEQsYUFBTyxxQ0FBb0Isa0JBQUssNEJBQVUsU0FBUyxPQUFPLFFBQVEsT0FBTyxZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ25HO0FBRUEsU0FBUyxhQUFhLFNBQXlCO0FBQzdDLFFBQU0saUJBQWEsMEJBQVc7QUFBQSxJQUM1QixTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsSUFDVixhQUFhO0FBQUEsRUFDZixDQUFDO0FBQ0QsYUFBTywwQkFBVztBQUFBLElBQ2hCLFNBQVM7QUFBQSxJQUNULFVBQVU7QUFBQSxJQUNWLGFBQWE7QUFBQSxFQUNmLENBQUM7QUFDSDtBQUVBLGVBQWUsd0JBQXdCLFFBQWdCLGFBQXlDO0FBQzlGLFlBQU0sdUJBQU0sUUFBUSxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQ3ZDLFlBQU0sMkJBQVUsa0JBQUssUUFBUSw0QkFBVSxXQUFXLEdBQUcsV0FBVztBQUNsRTsiLAogICJuYW1lcyI6IFsicHJvY2VzcyIsICJyZWxhdGl2ZU5hdGl2ZSJdCn0K
|