projen 0.101.7 → 0.101.9
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/.jsii +439 -88
- package/lib/ai-instructions.js +2 -2
- package/lib/awscdk/auto-discover.js +6 -6
- package/lib/awscdk/awscdk-app-java.js +1 -1
- package/lib/awscdk/awscdk-app-py.js +1 -1
- package/lib/awscdk/awscdk-app-ts.js +1 -1
- package/lib/awscdk/awscdk-construct.js +1 -1
- package/lib/awscdk/awscdk-deps-java.js +1 -1
- package/lib/awscdk/awscdk-deps-js.js +1 -1
- package/lib/awscdk/awscdk-deps-py.js +1 -1
- package/lib/awscdk/awscdk-deps.js +1 -1
- package/lib/awscdk/cdk-config.js +3 -3
- package/lib/awscdk/cdk-tasks.js +1 -1
- package/lib/awscdk/integration-test.js +1 -1
- package/lib/awscdk/lambda-extension.js +1 -1
- package/lib/awscdk/lambda-function.js +2 -2
- package/lib/build/build-workflow.js +1 -1
- package/lib/cdk/auto-discover-base.js +2 -2
- package/lib/cdk/construct-lib.js +1 -1
- package/lib/cdk/integration-test-base.js +1 -1
- package/lib/cdk/jsii-build.js +1 -1
- package/lib/cdk/jsii-docgen.js +1 -1
- package/lib/cdk/jsii-project.js +1 -1
- package/lib/cdk8s/auto-discover.js +2 -2
- package/lib/cdk8s/cdk8s-app-py.js +1 -1
- package/lib/cdk8s/cdk8s-app-ts.js +1 -1
- package/lib/cdk8s/cdk8s-construct.js +1 -1
- package/lib/cdk8s/cdk8s-deps-py.js +1 -1
- package/lib/cdk8s/cdk8s-deps.js +1 -1
- package/lib/cdk8s/integration-test.js +1 -1
- package/lib/cdktf/cdktf-construct.js +1 -1
- package/lib/circleci/circleci.js +1 -1
- package/lib/cli/cmds/new.js +1 -8
- package/lib/component.d.ts +21 -1
- package/lib/component.js +27 -3
- package/lib/dependencies.js +1 -1
- package/lib/dev-env.js +1 -1
- package/lib/docker-compose/docker-compose-service.js +1 -1
- package/lib/docker-compose/docker-compose.js +1 -1
- package/lib/file.js +1 -1
- package/lib/gitattributes.js +1 -1
- package/lib/github/actions-provider.js +1 -1
- package/lib/github/auto-approve.js +1 -1
- package/lib/github/auto-merge.js +6 -7
- package/lib/github/auto-queue.js +1 -1
- package/lib/github/dependabot.js +1 -1
- package/lib/github/dependency-review.js +1 -1
- package/lib/github/github-credentials.js +1 -1
- package/lib/github/github-project.js +1 -1
- package/lib/github/github.js +1 -1
- package/lib/github/merge-queue.js +1 -1
- package/lib/github/mergify.d.ts +32 -1
- package/lib/github/mergify.js +5 -2
- package/lib/github/pr-template.js +1 -1
- package/lib/github/pull-request-backport.js +1 -1
- package/lib/github/pull-request-lint.js +1 -1
- package/lib/github/stale.js +1 -1
- package/lib/github/task-workflow-job.js +1 -1
- package/lib/github/task-workflow.js +1 -1
- package/lib/github/workflow-actions.js +1 -1
- package/lib/github/workflow-jobs.js +1 -1
- package/lib/github/workflow-steps.js +1 -1
- package/lib/github/workflows.js +1 -1
- package/lib/gitlab/configuration.js +1 -1
- package/lib/gitlab/gitlab-configuration.js +1 -1
- package/lib/gitlab/nested-configuration.js +1 -1
- package/lib/gitpod.js +1 -1
- package/lib/ignore-file.js +1 -1
- package/lib/ini.js +1 -1
- package/lib/java/java-project.js +1 -1
- package/lib/java/junit.js +1 -1
- package/lib/java/maven-compile.js +1 -1
- package/lib/java/maven-packaging.js +1 -1
- package/lib/java/maven-sample.js +1 -1
- package/lib/java/pom.js +2 -2
- package/lib/java/projenrc.d.ts +2 -1
- package/lib/java/projenrc.js +6 -9
- package/lib/javascript/biome/biome.d.ts +5 -1
- package/lib/javascript/biome/biome.js +8 -2
- package/lib/javascript/bundler.js +1 -1
- package/lib/javascript/eslint.d.ts +5 -1
- package/lib/javascript/eslint.js +8 -2
- package/lib/javascript/jest.js +4 -4
- package/lib/javascript/license-checker.js +1 -1
- package/lib/javascript/node-package.js +1 -1
- package/lib/javascript/node-project.js +1 -1
- package/lib/javascript/npm-config.js +1 -1
- package/lib/javascript/pnpm-workspace-config.js +2 -2
- package/lib/javascript/pnpm-workspace.js +1 -1
- package/lib/javascript/prettier.js +1 -1
- package/lib/javascript/projenrc.d.ts +2 -1
- package/lib/javascript/projenrc.js +6 -8
- package/lib/javascript/render-options.d.ts +15 -1
- package/lib/javascript/render-options.js +7 -3
- package/lib/javascript/typescript-config.js +2 -2
- package/lib/javascript/upgrade-dependencies.js +2 -2
- package/lib/javascript/yarnrc.js +1 -1
- package/lib/json-patch.js +1 -1
- package/lib/json.js +1 -1
- package/lib/license.js +1 -1
- package/lib/logger.js +1 -1
- package/lib/logging.js +3 -2
- package/lib/makefile.js +1 -1
- package/lib/object-file.js +1 -1
- package/lib/project-build.js +1 -1
- package/lib/project-tree.js +1 -1
- package/lib/project.d.ts +19 -5
- package/lib/project.js +34 -11
- package/lib/projects.js +7 -5
- package/lib/projenrc-json.d.ts +2 -1
- package/lib/projenrc-json.js +6 -8
- package/lib/projenrc.js +1 -1
- package/lib/python/pip.js +1 -1
- package/lib/python/poetry.js +2 -2
- package/lib/python/projenrc.d.ts +2 -1
- package/lib/python/projenrc.js +6 -9
- package/lib/python/pyproject-toml-file.js +1 -1
- package/lib/python/pytest-sample.js +1 -1
- package/lib/python/pytest.js +1 -1
- package/lib/python/python-project.js +1 -1
- package/lib/python/python-sample.js +1 -1
- package/lib/python/requirements-file.js +1 -1
- package/lib/python/setuppy.js +1 -1
- package/lib/python/setuptools.js +1 -1
- package/lib/python/uv.js +1 -1
- package/lib/python/venv.js +1 -1
- package/lib/readme.js +1 -1
- package/lib/release/publisher.js +1 -1
- package/lib/release/release-trigger.js +1 -1
- package/lib/release/release.js +1 -1
- package/lib/renovatebot.js +1 -1
- package/lib/run-task.cjs +245 -49
- package/lib/sample-file.js +2 -2
- package/lib/script-runner.js +1 -1
- package/lib/source-code.js +1 -1
- package/lib/task-shell.js +1 -1
- package/lib/task.js +1 -1
- package/lib/tasks.js +1 -1
- package/lib/testing.js +1 -1
- package/lib/textfile.js +1 -1
- package/lib/toml.js +1 -1
- package/lib/typescript/projenrc-ts.d.ts +2 -1
- package/lib/typescript/projenrc-ts.js +6 -8
- package/lib/typescript/projenrc.d.ts +3 -1
- package/lib/typescript/projenrc.js +7 -9
- package/lib/typescript/typescript-runner.js +1 -1
- package/lib/typescript/typescript-typedoc.js +1 -1
- package/lib/typescript/typescript.js +5 -5
- package/lib/util/exec.d.ts +7 -0
- package/lib/util/exec.js +36 -13
- package/lib/version.js +2 -2
- package/lib/vscode/devcontainer.js +1 -1
- package/lib/vscode/extensions.js +1 -1
- package/lib/vscode/launch-config.js +1 -1
- package/lib/vscode/settings.js +1 -1
- package/lib/vscode/vscode.js +1 -1
- package/lib/web/next.js +3 -3
- package/lib/web/postcss.js +1 -1
- package/lib/web/react.js +3 -3
- package/lib/web/tailwind.js +1 -1
- package/lib/xmlfile.js +1 -1
- package/lib/yaml.js +1 -1
- package/package.json +1 -1
package/lib/javascript/eslint.js
CHANGED
|
@@ -10,7 +10,7 @@ const yaml_1 = require("../yaml");
|
|
|
10
10
|
* Represents eslint configuration.
|
|
11
11
|
*/
|
|
12
12
|
class Eslint extends component_1.Component {
|
|
13
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Eslint", version: "0.101.
|
|
13
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Eslint", version: "0.101.9" };
|
|
14
14
|
/**
|
|
15
15
|
* Returns the singleton Eslint component of a project or undefined if there is none.
|
|
16
16
|
*/
|
|
@@ -367,6 +367,12 @@ class Eslint extends component_1.Component {
|
|
|
367
367
|
renderDevDepsAllowList() {
|
|
368
368
|
return Array.from(this._allowDevDeps);
|
|
369
369
|
}
|
|
370
|
+
/**
|
|
371
|
+
* Runs eslint once, right after the project is first created, so the generated code is linted (and auto-fixed) immediately.
|
|
372
|
+
*/
|
|
373
|
+
postProjectCreation(_initProject) {
|
|
374
|
+
this.nodeProject.tasks.runTask(this.eslintTask.name);
|
|
375
|
+
}
|
|
370
376
|
/**
|
|
371
377
|
* Update the task with the current list of lint patterns and file extensions
|
|
372
378
|
*/
|
|
@@ -422,4 +428,4 @@ class ExtendsDefaultOrder {
|
|
|
422
428
|
ExtendsDefaultOrder.ORDER.indexOf(b));
|
|
423
429
|
}
|
|
424
430
|
}
|
|
425
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNsaW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2phdmFzY3JpcHQvZXNsaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSx5Q0FBc0M7QUFFdEMsNENBQXlDO0FBRXpDLGtDQUFtQztBQUtuQyxrQ0FBbUM7QUFrSm5DOztHQUVHO0FBQ0gsTUFBYSxNQUFPLFNBQVEscUJBQVM7O0lBQ25DOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFnQjtRQUMvQixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQVksRUFBZSxFQUFFLENBQUMsQ0FBQyxZQUFZLE1BQU0sQ0FBQztRQUNwRSxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7T0FFRztJQUNhLElBQUksQ0FBYTtJQUVqQzs7T0FFRztJQUNhLEtBQUssQ0FBMEI7SUFFL0M7O09BRUc7SUFDYSxTQUFTLEdBQXFCLEVBQUUsQ0FBQztJQUVqRDs7T0FFRztJQUNhLFVBQVUsQ0FBTztJQUVqQzs7T0FFRztJQUNhLE1BQU0sQ0FBTTtJQUU1Qjs7T0FFRztJQUNhLGNBQWMsQ0FBVztJQUVqQyxnQkFBZ0IsQ0FBc0I7SUFDN0IsYUFBYSxDQUFjO0lBQzNCLG9CQUFvQixHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDekMsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDN0IsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDN0IsZUFBZSxDQUFjO0lBQzdCLFNBQVMsQ0FBYztJQUN2QixhQUFhLENBQWM7SUFDM0IsV0FBVyxDQUFjO0lBQ3pCLFdBQVcsQ0FBaUI7SUFFN0MsWUFBWSxPQUFvQixFQUFFLE9BQXNCO1FBQ3RELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVmLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDO1FBRTNCLE9BQU8sQ0FBQyxVQUFV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QVMsRUFBRSxDQUFTO1FBQ2pDLE9BQU8sQ0FDTCxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNwQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUNyQyxDQUFDO0lBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByZXR0aWVyIH0gZnJvbSBcIi4vcHJldHRpZXJcIjtcbmltcG9ydCB0eXBlIHsgSUNvbXBhcmVTdHJpbmcgfSBmcm9tIFwiLi4vY29tcGFyZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBOb2RlUHJvamVjdCB9IGZyb20gXCIuLi9qYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyBKc29uRmlsZSB9IGZyb20gXCIuLi9qc29uXCI7XG5pbXBvcnQgdHlwZSB7IE9iamVjdEZpbGUgfSBmcm9tIFwiLi4vb2JqZWN0LWZpbGVcIjtcbmltcG9ydCB0eXBlIHsgUHJvamVjdCB9IGZyb20gXCIuLi9wcm9qZWN0XCI7XG5pbXBvcnQgdHlwZSB7IFRhc2sgfSBmcm9tIFwiLi4vdGFza1wiO1xuaW1wb3J0IHR5cGUgeyBUYXNrU3RlcE9wdGlvbnMgfSBmcm9tIFwiLi4vdGFzay1tb2RlbFwiO1xuaW1wb3J0IHsgWWFtbEZpbGUgfSBmcm9tIFwiLi4veWFtbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVzbGludE9wdGlvbnMge1xuICAvKipcbiAgICogUGF0aCB0byBgdHNjb25maWcuanNvbmAgd2hpY2ggc2hvdWxkIGJlIHVzZWQgYnkgZXNsaW50LlxuICAgKiBAZGVmYXVsdCBcIi4vdHNjb25maWcuanNvblwiXG4gICAqL1xuICByZWFkb25seSB0c2NvbmZpZ1BhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVzZSB0aGUgdHlwZXNjcmlwdC1lc2xpbnQgXCJwcm9qZWN0IHNlcnZpY2VcIiBmb3IgdHlwZWQgbGludGluZyBpbnN0ZWFkIG9mIGFcbiAgICogc2luZ2xlIGBwYXJzZXJPcHRpb25zLnByb2plY3RgLlxuICAgKlxuICAgKiBXaGVuIGVuYWJsZWQsIHR5cGVzY3JpcHQtZXNsaW50IHJlc29sdmVzIHRoZSBuZWFyZXN0IGB0c2NvbmZpZy5qc29uYCBmb3JcbiAgICogZWFjaCBsaW50ZWQgZmlsZSAodGhlIHNhbWUgcmVzb2x1dGlvbiBtb2RlbCB1c2VkIGJ5IHRoZSBUeXBlU2NyaXB0IGxhbmd1YWdlXG4gICAqIHNlcnZpY2UgLyBgdHNzZXJ2ZXJgKS4gVGhpcyBhbGxvd3MgZmlsZXMgaW4gZGlmZmVyZW50IGRpcmVjdG9yaWVzIChlLmcuXG4gICAqIGBzcmNgIGFuZCBgdGVzdGApIHRvIGJlIGxpbnRlZCBhZ2FpbnN0IHRoZSBgdHNjb25maWcuanNvbmAgdGhhdCBhY3R1YWxseVxuICAgKiBpbmNsdWRlcyB0aGVtLCB3aXRob3V0IG1haW50YWluaW5nIGEgc2luZ2xlIGNvbmZpZyB0aGF0IGxpc3RzIGV2ZXJ5IGZpbGUuXG4gICAqXG4gICAqIFJlcXVpcmVzIGBAdHlwZXNjcmlwdC1lc2xpbnQvKmAgdjggb3IgbmV3ZXIuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly90eXBlc2NyaXB0LWVzbGludC5pby9ibG9nL3Byb2plY3Qtc2VydmljZS9cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHByb2plY3RTZXJ2aWNlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRmlsZXMgb3IgZ2xvYiBwYXR0ZXJucyBvciBkaXJlY3RvcmllcyB3aXRoIHNvdXJjZSBmaWxlcyB0byBsaW50IChlLmcuIFsgXCJzcmNcIiBdKVxuICAgKi9cbiAgcmVhZG9ubHkgZGlyczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEZpbGVzIG9yIGdsb2IgcGF0dGVybnMgb3IgZGlyZWN0b3JpZXMgd2l0aCBzb3VyY2UgZmlsZXMgdGhhdCBpbmNsdWRlIHRlc3RzIGFuZCBidWlsZCB0b29sc1xuICAgKlxuICAgKiBUaGVzZSBzb3VyY2VzIGFyZSBsaW50ZWQgYnV0IG1heSBhbHNvIGltcG9ydCBwYWNrYWdlcyBmcm9tIGBkZXZEZXBlbmRlbmNpZXNgLlxuICAgKiBAZGVmYXVsdCBbXVxuICAgKi9cbiAgcmVhZG9ubHkgZGV2ZGlycz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogRmlsZSB0eXBlcyB0aGF0IHNob3VsZCBiZSBsaW50ZWQgKGUuZy4gWyBcIi5qc1wiLCBcIi50c1wiIF0pXG4gICAqIEBkZWZhdWx0IFtcIi50c1wiXVxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZUV4dGVuc2lvbnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgZXNsaW50IGNvbW1hbmQgZXhlY3V0ZWQgYnkgZXNsaW50IHRhc2tcbiAgICovXG4gIHJlYWRvbmx5IGNvbW1hbmRPcHRpb25zPzogRXNsaW50Q29tbWFuZE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgZmlsZSBwYXR0ZXJucyB0aGF0IHNob3VsZCBub3QgYmUgbGludGVkLCB1c2luZyB0aGUgc2FtZSBzeW50YXhcbiAgICogYXMgLmdpdGlnbm9yZSBwYXR0ZXJucy5cbiAgICpcbiAgICogQGRlZmF1bHQgWyAnKi5qcycsICcqLmQudHMnLCAnbm9kZV9tb2R1bGVzLycsICcqLmdlbmVyYXRlZC50cycsICdjb3ZlcmFnZScgXVxuICAgKi9cbiAgcmVhZG9ubHkgaWdub3JlUGF0dGVybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogRW5hYmxlIHByZXR0aWVyIGZvciBjb2RlIGZvcm1hdHRpbmdcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHByZXR0aWVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGV4dGVuZHMgYXJyYXkgaW4gZXNsaW50IGlzIG9yZGVyIGRlcGVuZGVudC5cbiAgICogVGhpcyBvcHRpb24gYWxsb3dzIHRvIHNvcnQgdGhlIGV4dGVuZHMgYXJyYXkgaW4gYW55IHdheSBzZWVuIGZpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBVc2Uga25vd24gRVNMaW50IGJlc3QgcHJhY3RpY2VzIHRvIHBsYWNlIFwicHJldHRpZXJcIiBwbHVnaW5zIGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5XG4gICAqL1xuICByZWFkb25seSBzb3J0RXh0ZW5kcz86IElDb21wYXJlU3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgaW1wb3J0IGFsaWFzIGZvciBtb2R1bGUgcGF0aHNcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSBhbGlhc01hcD86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBpbXBvcnQgYWxpYXMgZm9yIG1vZHVsZSBwYXRoc1xuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IGFsaWFzRXh0ZW5zaW9ucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBbHdheXMgdHJ5IHRvIHJlc29sdmUgdHlwZXMgdW5kZXIgYDxyb290PkB0eXBlc2AgZGlyZWN0b3J5IGV2ZW4gaXQgZG9lc24ndCBjb250YWluIGFueSBzb3VyY2UgY29kZS5cbiAgICogVGhpcyBwcmV2ZW50cyBgaW1wb3J0L25vLXVucmVzb2x2ZWRgIGVzbGludCBlcnJvcnMgd2hlbiBpbXBvcnRpbmcgYSBgQHR5cGVzLypgIG1vZHVsZSB0aGF0IHdvdWxkIG90aGVyd2lzZSByZW1haW4gdW5yZXNvbHZlZC5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdHNBbHdheXNUcnlUeXBlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdyaXRlIGVzbGludCBjb25maWd1cmF0aW9uIGFzIFlBTUwgaW5zdGVhZCBvZiBKU09OXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB5YW1sPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFc2xpbnRDb21tYW5kT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGZpeCBlc2xpbnQgaXNzdWVzIHdoZW4gcnVubmluZyB0aGUgZXNsaW50IHRhc2tcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZml4PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRXh0cmEgZmxhZyBhcmd1bWVudHMgdG8gcGFzcyB0byBlc2xpbnQgY29tbWFuZFxuICAgKi9cbiAgcmVhZG9ubHkgZXh0cmFBcmdzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogZXNsaW50IHJ1bGVzIG92ZXJyaWRlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXNsaW50T3ZlcnJpZGUge1xuICAvKipcbiAgICogRmlsZXMgb3IgZmlsZSBwYXR0ZXJucyBvbiB3aGljaCB0byBhcHBseSB0aGUgb3ZlcnJpZGVcbiAgICovXG4gIHJlYWRvbmx5IGZpbGVzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUGF0dGVybihzKSB0byBleGNsdWRlIGZyb20gdGhpcyBvdmVycmlkZS5cbiAgICogSWYgYSBmaWxlIG1hdGNoZXMgYW55IG9mIHRoZSBleGNsdWRlZCBwYXR0ZXJucywgdGhlIGNvbmZpZ3VyYXRpb24gd29u4oCZdCBhcHBseS5cbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVkRmlsZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIG92ZXJyaWRkZW4gcnVsZXNcbiAgICovXG4gIHJlYWRvbmx5IHJ1bGVzPzogeyBbcnVsZTogc3RyaW5nXTogYW55IH07XG5cbiAgLyoqXG4gICAqIFRoZSBvdmVycmlkZGVuIHBhcnNlclxuICAgKi9cbiAgcmVhZG9ubHkgcGFyc2VyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb25maWcocykgdG8gZXh0ZW5kIGluIHRoaXMgb3ZlcnJpZGVcbiAgICovXG4gIHJlYWRvbmx5IGV4dGVuZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogYHBsdWdpbnNgIG92ZXJyaWRlXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBlc2xpbnQgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEVzbGludCBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gRXNsaW50IGNvbXBvbmVudCBvZiBhIHByb2plY3Qgb3IgdW5kZWZpbmVkIGlmIHRoZXJlIGlzIG5vbmUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHByb2plY3Q6IFByb2plY3QpOiBFc2xpbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGlzRXNsaW50ID0gKGM6IENvbXBvbmVudCk6IGMgaXMgRXNsaW50ID0+IGMgaW5zdGFuY2VvZiBFc2xpbnQ7XG4gICAgcmV0dXJuIHByb2plY3QuY29tcG9uZW50cy5maW5kKGlzRXNsaW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdW5kZXJseWluZyBjb25maWcgZmlsZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGZpbGU6IE9iamVjdEZpbGU7XG5cbiAgLyoqXG4gICAqIGVzbGludCBydWxlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBydWxlczogeyBbcnVsZTogc3RyaW5nXTogYW55IH07XG5cbiAgLyoqXG4gICAqIGVzbGludCBvdmVycmlkZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgb3ZlcnJpZGVzOiBFc2xpbnRPdmVycmlkZVtdID0gW107XG5cbiAgLyoqXG4gICAqIGVzbGludCB0YXNrLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVzbGludFRhc2s6IFRhc2s7XG5cbiAgLyoqXG4gICAqIERpcmVjdCBhY2Nlc3MgdG8gdGhlIGVzbGludCBjb25maWd1cmF0aW9uIChlc2NhcGUgaGF0Y2gpXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29uZmlnOiBhbnk7XG5cbiAgLyoqXG4gICAqIEZpbGUgcGF0dGVybnMgdGhhdCBzaG91bGQgbm90IGJlIGxpbnRlZFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlnbm9yZVBhdHRlcm5zOiBzdHJpbmdbXTtcblxuICBwcml2YXRlIF9mb3JtYXR0aW5nUnVsZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FsbG93RGV2RGVwczogU2V0PHN0cmluZz47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FsbG93RGVmYXVsdFByb2plY3QgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGx1Z2lucyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9leHRlbmRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGVFeHRlbnNpb25zOiBTZXQ8c3RyaW5nPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZmxhZ0FyZ3M6IFNldDxzdHJpbmc+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9saW50UGF0dGVybnM6IFNldDxzdHJpbmc+O1xuICBwcml2YXRlIHJlYWRvbmx5IG5vZGVQcm9qZWN0OiBOb2RlUHJvamVjdDtcbiAgcHJpdmF0ZSByZWFkb25seSBzb3J0RXh0ZW5kczogSUNvbXBhcmVTdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJvamVjdDogTm9kZVByb2plY3QsIG9wdGlvbnM6IEVzbGludE9wdGlvbnMpIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIHRoaXMubm9kZVByb2plY3QgPSBwcm9qZWN0O1xuXG4gICAgcHJvamVjdC5hZGREZXZEZXBzKFxuICAgICAgXCJlc2xpbnRAXjlcIixcbiAgICAgIFwiQHR5cGVzY3JpcHQtZXNsaW50L2VzbGludC1wbHVnaW5AXjhcIixcbiAgICAgIFwiQHR5cGVzY3JpcHQtZXNsaW50L3BhcnNlckBeOFwiLFxuICAgICAgXCJlc2xpbnQtaW1wb3J0LXJlc29sdmVyLXR5cGVzY3JpcHRcIixcbiAgICAgIFwiZXNsaW50LXBsdWdpbi1pbXBvcnRcIixcbiAgICApO1xuXG4gICAgaWYgKG9wdGlvbnMuYWxpYXNNYXApIHtcbiAgICAgIHByb2plY3QuYWRkRGV2RGVwcyhcImVzbGludC1pbXBvcnQtcmVzb2x2ZXItYWxpYXNcIik7XG4gICAgfVxuXG4gICAgY29uc3QgZGV2ZGlycyA9IG9wdGlvbnMuZGV2ZGlycyA/PyBbXTtcblxuICAgIHRoaXMuX2xpbnRQYXR0ZXJucyA9IG5ldyBTZXQoWy4uLm9wdGlvbnMuZGlycywgLi4uZGV2ZGlyc10pO1xuICAgIHRoaXMuX2ZpbGVFeHRlbnNpb25zID0gbmV3IFNldChvcHRpb25zLmZpbGVFeHRlbnNpb25zID8/IFtcIi50c1wiXSk7XG5cbiAgICB0aGlzLl9hbGxvd0RldkRlcHMgPSBuZXcgU2V0KChkZXZkaXJzID8/IFtdKS5tYXAoKGRpcikgPT4gYCoqLyR7ZGlyfS8qKmApKTtcblxuICAgIGNvbnN0IGNvbW1hbmRPcHRpb25zID0gb3B0aW9ucy5jb21tYW5kT3B0aW9ucyA/PyB7fTtcbiAgICBjb25zdCB7IGZpeCA9IHRydWUsIGV4dHJhQXJnczogZXh0cmFGbGFnQXJncyA9IFtdIH0gPSBjb21tYW5kT3B0aW9ucztcbiAgICB0aGlzLl9mbGFnQXJncyA9IG5ldyBTZXQoZXh0cmFGbGFnQXJncyk7XG4gICAgaWYgKGZpeCkge1xuICAgICAgdGhpcy5fZmxhZ0FyZ3MuYWRkKFwiLS1maXhcIik7XG4gICAgfVxuICAgIHRoaXMuX2ZsYWdBcmdzLmFkZChcIi0tbm8tZXJyb3Itb24tdW5tYXRjaGVkLXBhdHRlcm5cIik7XG5cbiAgICB0aGlzLnNvcnRFeHRlbmRzID0gb3B0aW9ucy5zb3J0RXh0ZW5kcyA/PyBuZXcgRXh0ZW5kc0RlZmF1bHRPcmRlcigpO1xuXG4gICAgdGhpcy5lc2xpbnRUYXNrID0gcHJvamVjdC5hZGRUYXNrKFwiZXNsaW50XCIsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlJ1bnMgZXNsaW50IGFnYWluc3QgdGhlIGNvZGViYXNlXCIsXG4gICAgICBlbnY6IHtcbiAgICAgICAgRVNMSU5UX1VTRV9GTEFUX0NPTkZJRzogXCJmYWxzZVwiLFxuICAgICAgICBOT0RFX05PX1dBUk5JTkdTOiBcIjFcIiwgLy8gU3VwcHJlc3MgZXNsaW50IHdhcm5pbmcgYWJvdXQgbGVnYWN5IGNvbmZpZyBmb3JtYXQsIGFzIGl0IGp1c3QgY29uZnVzZXMgdXNlcnMuIFRoaXMgd2lsbCBzdXBwcmVzcyBhbGwgbm9kZSB3YXJuaW5ncywgYnV0IGluIHByYWN0aWNlIHVzZXJzIGNhbm5vdCBhY3Rpb24gd2FybmluZ3MgZnJvbSBlc2xpbnQgYW55d2F5LlxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZVRhc2soKTtcblxuICAgIHByb2plY3QudGVzdFRhc2suc3Bhd24odGhpcy5lc2xpbnRUYXNrKTtcblxuICAgIC8vIGV4Y2x1ZGUgc29tZSBmaWxlc1xuICAgIHByb2plY3QubnBtaWdub3JlPy5leGNsdWRlKFwiLy5lc2xpbnRyYy5qc29uXCIpO1xuXG4gICAgdGhpcy5fZm9ybWF0dGluZ1J1bGVzID0ge1xuICAgICAgLy8gU3R5bGVcbiAgICAgIFwiQHN0eWxpc3RpYy9pbmRlbnRcIjogW1wiZXJyb3JcIiwgMl0sXG4gICAgICBcIkBzdHlsaXN0aWMvcXVvdGVzXCI6IFtcImVycm9yXCIsIFwic2luZ2xlXCIsIHsgYXZvaWRFc2NhcGU6IHRydWUgfV0sXG4gICAgICBcIkBzdHlsaXN0aWMvY29tbWEtZGFuZ2xlXCI6IFtcImVycm9yXCIsIFwiYWx3YXlzLW11bHRpbGluZVwiXSwgLy8gZW5zdXJlcyBjbGVhbiBkaWZmcywgc2VlIGh0dHBzOi8vbWVkaXVtLmNvbS9AbmlrZ3JhZi93aHkteW91LXNob3VsZC1lbmZvcmNlLWRhbmdsaW5nLWNvbW1hcy1mb3ItbXVsdGlsaW5lLXN0YXRlbWVudHMtZDAzNGM5OGUzNmY4XG4gICAgICBcIkBzdHlsaXN0aWMvY29tbWEtc3BhY2luZ1wiOiBbXCJlcnJvclwiLCB7IGJlZm9yZTogZmFsc2UsIGFmdGVyOiB0cnVlIH1dLCAvLyBzcGFjZSBhZnRlciwgbm8gc3BhY2UgYmVmb3JlXG4gICAgICBcIkBzdHlsaXN0aWMvbm8tbXVsdGktc3BhY2VzXCI6IFtcImVycm9yXCIsIHsgaWdub3JlRU9MQ29tbWVudHM6IGZhbHNlIH1dLCAvLyBubyBtdWx0aSBzcGFjZXNcbiAgICAgIFwiQHN0eWxpc3RpYy9hcnJheS1icmFja2V0LXNwYWNpbmdcIjogW1wiZXJyb3JcIiwgXCJuZXZlclwiXSwgLy8gWzEsIDIsIDNdXG4gICAgICBcIkBzdHlsaXN0aWMvYXJyYXktYnJhY2tldC1uZXdsaW5lXCI6IFtcImVycm9yXCIsIFwiY29uc2lzdGVudFwiXSwgLy8gZW5mb3JjZSBjb25zaXN0ZW50IGxpbmUgYnJlYWtzIGJldHdlZW4gYnJhY2tldHNcbiAgICAgIFwiQHN0eWxpc3RpYy9vYmplY3QtY3VybHktc3BhY2luZ1wiOiBbXCJlcnJvclwiLCBcImFsd2F5c1wiXSwgLy8geyBrZXk6ICd2YWx1ZScgfVxuICAgICAgXCJAc3R5bGlzdGljL29iamVjdC1jdXJseS1uZXdsaW5lXCI6IFtcbiAgICAgICAgXCJlcnJvclwiLFxuICAgICAgICB7IG11bHRpbGluZTogdHJ1ZSwgY29uc2lzdGVudDogdHJ1ZSB9LFxuICAgICAgXSwgLy8gZW5mb3JjZSBjb25zaXN0ZW50IGxpbmUgYnJlYWtzIGJldHdlZW4gYnJhY2VzXG4gICAgICBcIkBzdHlsaXN0aWMvb2JqZWN0LXByb3BlcnR5LW5ld2xpbmVcIjogW1xuICAgICAgICBcImVycm9yXCIsXG4gICAgICAgIHsgYWxsb3dBbGxQcm9wZXJ0aWVzT25TYW1lTGluZTogdHJ1ZSB9LFxuICAgICAgXSwgLy8gZW5mb3JjZSBcInNhbWUgbGluZVwiIG9yIFwibXVsdGlwbGUgbGluZVwiIG9uIG9iamVjdCBwcm9wZXJ0aWVzXG4gICAgICBcIkBzdHlsaXN0aWMva2V5d29yZC1zcGFjaW5nXCI6IFtcImVycm9yXCJdLCAvLyByZXF1aXJlIGEgc3BhY2UgYmVmb3JlICYgYWZ0ZXIga2V5d29yZHNcbiAgICAgIFwiQHN0eWxpc3RpYy9icmFjZS1zdHlsZVwiOiBbXCJlcnJvclwiLCBcIjF0YnNcIiwgeyBhbGxvd1NpbmdsZUxpbmU6IHRydWUgfV0sIC8vIGVuZm9yY2Ugb25lIHRydWUgYnJhY2Ugc3R5bGVcbiAgICAgIFwiQHN0eWxpc3RpYy9zcGFjZS1iZWZvcmUtYmxvY2tzXCI6IFtcImVycm9yXCJdLCAvLyByZXF1aXJlIHNwYWNlIGJlZm9yZSBibG9ja3NcbiAgICAgIC8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3R5cGVzY3JpcHQtZXNsaW50L3R5cGVzY3JpcHQtZXNsaW50L2lzc3Vlcy84MDcyXG4gICAgICBcIkBzdHlsaXN0aWMvbWVtYmVyLWRlbGltaXRlci1zdHlsZVwiOiBbXCJlcnJvclwiXSxcblxuICAgICAgLy8gUmVxdWlyZSBzZW1pY29sb25zXG4gICAgICBcIkBzdHlsaXN0aWMvc2VtaVwiOiBbXCJlcnJvclwiLCBcImFsd2F5c1wiXSxcblxuICAgICAgLy8gTWF4IGxpbmUgbGVuZ3Roc1xuICAgICAgXCJAc3R5bGlzdGljL21heC1sZW5cIjogW1xuICAgICAgICBcImVycm9yXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBjb2RlOiAxNTAsXG4gICAgICAgICAgaWdub3JlVXJsczogdHJ1ZSwgLy8gTW9zdCBjb21tb24gcmVhc29uIHRvIGRpc2FibGUgaXRcbiAgICAgICAgICBpZ25vcmVTdHJpbmdzOiB0cnVlLCAvLyBUaGVzZSBhcmUgbm90IGZhbnRhc3RpYyBidXQgbmVjZXNzYXJ5IGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgICAgIGlnbm9yZVRlbXBsYXRlTGl0ZXJhbHM6IHRydWUsXG4gICAgICAgICAgaWdub3JlQ29tbWVudHM6IHRydWUsXG4gICAgICAgICAgaWdub3JlUmVnRXhwTGl0ZXJhbHM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuXG4gICAgICAvLyBEb24ndCB1bm5lY2Vzc2FyaWx5IHF1b3RlIHByb3BlcnRpZXNcbiAgICAgIFwiQHN0eWxpc3RpYy9xdW90ZS1wcm9wc1wiOiBbXCJlcnJvclwiLCBcImNvbnNpc3RlbnQtYXMtbmVlZGVkXCJdLFxuXG4gICAgICAvLyBSZXF1aXJlZCBzcGFjaW5nIGluIHByb3BlcnR5IGRlY2xhcmF0aW9ucyAoY29waWVkIGZyb20gVFNMaW50LCBkZWZhdWx0cyBhcmUgZ29vZClcbiAgICAgIFwiQHN0eWxpc3RpYy9rZXktc3BhY2luZ1wiOiBbXCJlcnJvclwiXSxcblxuICAgICAgLy8gTm8gbXVsdGlwbGUgZW1wdHkgbGluZXNcbiAgICAgIFwiQHN0eWxpc3RpYy9uby1tdWx0aXBsZS1lbXB0eS1saW5lc1wiOiBbXCJlcnJvclwiXSxcblxuICAgICAgLy8gVXNlbGVzcyBkaWZmIHJlc3VsdHNcbiAgICAgIFwiQHN0eWxpc3RpYy9uby10cmFpbGluZy1zcGFjZXNcIjogW1wiZXJyb3JcIl0sXG4gICAgfTtcblxuICAgIHRoaXMucnVsZXMgPSB7XG4gICAgICAvLyByZXF1aXJlIGN1cmx5IGJyYWNlcyBmb3IgbXVsdGlsaW5lIGNvbnRyb2wgc3RhdGVtZW50c1xuICAgICAgY3VybHk6IFtcImVycm9yXCIsIFwibXVsdGktbGluZVwiLCBcImNvbnNpc3RlbnRcIl0sXG5cbiAgICAgIC8vIFJlcXVpcmUgdXNlIG9mIHRoZSBgaW1wb3J0IHsgZm9vIH0gZnJvbSAnYmFyJztgIGZvcm0gaW5zdGVhZCBvZiBgaW1wb3J0IGZvbyA9IHJlcXVpcmUoJ2JhcicpO2BcbiAgICAgIFwiQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1wiOiBcImVycm9yXCIsXG5cbiAgICAgIC8vIFJlcXVpcmUgYWxsIGltcG9ydGVkIGRlcGVuZGVuY2llcyBhcmUgYWN0dWFsbHkgZGVjbGFyZWQgaW4gcGFja2FnZS5qc29uXG4gICAgICBcImltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1wiOiBbXG4gICAgICAgIFwiZXJyb3JcIixcbiAgICAgICAge1xuICAgICAgICAgIC8vIE9ubHkgYWxsb3cgaW1wb3J0aW5nIGRldkRlcGVuZGVuY2llcyBmcm9tIFwiZGV2ZGlyc1wiLlxuICAgICAgICAgIGRldkRlcGVuZGVuY2llczogKCkgPT4gdGhpcy5yZW5kZXJEZXZEZXBzQWxsb3dMaXN0KCksXG4gICAgICAgICAgb3B0aW9uYWxEZXBlbmRlbmNpZXM6IGZhbHNlLCAvLyBEaXNhbGxvdyBpbXBvcnRpbmcgb3B0aW9uYWwgZGVwZW5kZW5jaWVzICh0aG9zZSBzaG91bGRuJ3QgYmUgaW4gdXNlIGluIHRoZSBwcm9qZWN0KVxuICAgICAgICAgIHBlZXJEZXBlbmRlbmNpZXM6IHRydWUsIC8vIEFsbG93IGltcG9ydGluZyBwZWVyIGRlcGVuZGVuY2llcyAodGhhdCBhcmVuJ3QgYWxzbyBkaXJlY3QgZGVwZW5kZW5jaWVzKVxuICAgICAgICB9LFxuICAgICAgXSxcblxuICAgICAgLy8gUmVxdWlyZSBhbGwgaW1wb3J0ZWQgbGlicmFyaWVzIGFjdHVhbGx5IHJlc29sdmUgKCEhcmVxdWlyZWQgZm9yIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyB0byB3b3JrISEpXG4gICAgICBcImltcG9ydC9uby11bnJlc29sdmVkXCI6IFtcImVycm9yXCJdLFxuXG4gICAgICAvLyBSZXF1aXJlIGFuIG9yZGVyaW5nIG9uIGFsbCBpbXBvcnRzXG4gICAgICBcImltcG9ydC9vcmRlclwiOiBbXG4gICAgICAgIFwid2FyblwiLFxuICAgICAgICB7XG4gICAgICAgICAgZ3JvdXBzOiBbXCJidWlsdGluXCIsIFwiZXh0ZXJuYWxcIl0sXG4gICAgICAgICAgYWxwaGFiZXRpemU6IHsgb3JkZXI6IFwiYXNjXCIsIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZSB9LFxuICAgICAgICB9LFxuICAgICAgXSxcblxuICAgICAgLy8gQ2Fubm90IGltcG9ydCBmcm9tIHRoZSBzYW1lIG1vZHVsZSB0d2ljZVxuICAgICAgXCJpbXBvcnQvbm8tZHVwbGljYXRlc1wiOiBbXCJlcnJvclwiXSxcblxuICAgICAgLy8gQ2Fubm90IHNoYWRvdyBuYW1lc1xuICAgICAgXCJuby1zaGFkb3dcIjogW1wib2ZmXCJdLFxuICAgICAgXCJAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93XCI6IFwiZXJyb3JcIixcbiAgICAgIC8vIE9uZSBvZiB0aGUgZWFzaWVzdCBtaXN0YWtlcyB0byBtYWtlXG4gICAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1wiOiBcImVycm9yXCIsXG5cbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGluc2lkZSB0cnkvY2F0Y2ggYmxvY2tzLCBwcm9taXNlcyBhcmUgJ3JldHVybiBhd2FpdCdlZFxuICAgICAgLy8gKG11c3QgZGlzYWJsZSB0aGUgYmFzZSBydWxlIGFzIGl0IGNhbiByZXBvcnQgaW5jb3JyZWN0IGVycm9ycylcbiAgICAgIFwibm8tcmV0dXJuLWF3YWl0XCI6IFtcIm9mZlwiXSxcbiAgICAgIFwiQHR5cGVzY3JpcHQtZXNsaW50L3JldHVybi1hd2FpdFwiOiBcImVycm9yXCIsXG5cbiAgICAgIC8vIE11c3QgdXNlIGZvby5iYXIgaW5zdGVhZCBvZiBmb29bJ2JhciddIGlmIHBvc3NpYmxlXG4gICAgICBcImRvdC1ub3RhdGlvblwiOiBbXCJlcnJvclwiXSxcblxuICAgICAgLy8gQXJlIHlvdSBzdXJlIHwgaXMgbm90IGEgdHlwbyBmb3IgfHwgP1xuICAgICAgXCJuby1iaXR3aXNlXCI6IFtcImVycm9yXCJdLFxuXG4gICAgICAvLyBNZW1iZXIgb3JkZXJpbmdcbiAgICAgIFwiQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1wiOiBbXG4gICAgICAgIFwiZXJyb3JcIixcbiAgICAgICAge1xuICAgICAgICAgIGRlZmF1bHQ6IFtcbiAgICAgICAgICAgIFwicHVibGljLXN0YXRpYy1maWVsZFwiLFxuICAgICAgICAgICAgXCJwdWJsaWMtc3RhdGljLW1ldGhvZFwiLFxuICAgICAgICAgICAgXCJwcm90ZWN0ZWQtc3RhdGljLWZpZWxkXCIsXG4gICAgICAgICAgICBcInByb3RlY3RlZC1zdGF0aWMtbWV0aG9kXCIsXG4gICAgICAgICAgICBcInByaXZhdGUtc3RhdGljLWZpZWxkXCIsXG4gICAgICAgICAgICBcInByaXZhdGUtc3RhdGljLW1ldGhvZFwiLFxuXG4gICAgICAgICAgICBcImZpZWxkXCIsXG5cbiAgICAgICAgICAgIC8vIENvbnN0cnVjdG9yc1xuICAgICAgICAgICAgXCJjb25zdHJ1Y3RvclwiLCAvLyA9IFtcInB1YmxpYy1jb25zdHJ1Y3RvclwiLCBcInByb3RlY3RlZC1jb25zdHJ1Y3RvclwiLCBcInByaXZhdGUtY29uc3RydWN0b3JcIl1cblxuICAgICAgICAgICAgLy8gTWV0aG9kc1xuICAgICAgICAgICAgXCJtZXRob2RcIixcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgdGhpcy5pZ25vcmVQYXR0ZXJucyA9IG9wdGlvbnMuaWdub3JlUGF0dGVybnMgPz8gW1xuICAgICAgXCIqLmpzXCIsXG4gICAgICBcIiouZC50c1wiLFxuICAgICAgXCJub2RlX21vZHVsZXMvXCIsXG4gICAgICBcIiouZ2VuZXJhdGVkLnRzXCIsXG4gICAgICBcImNvdmVyYWdlXCIsXG4gICAgXTtcblxuICAgIGNvbnN0IHRzY29uZmlnID0gb3B0aW9ucy50c2NvbmZpZ1BhdGggPz8gXCIuL3RzY29uZmlnLmpzb25cIjtcbiAgICBjb25zdCBwcm9qZWN0U2VydmljZSA9IG9wdGlvbnMucHJvamVjdFNlcnZpY2UgPz8gZmFsc2U7XG5cbiAgICB0aGlzLmFkZFBsdWdpbnMoXCJAdHlwZXNjcmlwdC1lc2xpbnRcIik7XG4gICAgdGhpcy5hZGRQbHVnaW5zKFwiaW1wb3J0XCIpO1xuICAgIHRoaXMuYWRkRXh0ZW5kcyhcInBsdWdpbjppbXBvcnQvdHlwZXNjcmlwdFwiKTtcblxuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgZW52OiB7XG4gICAgICAgIGplc3Q6IHRydWUsXG4gICAgICAgIG5vZGU6IHRydWUsXG4gICAgICB9LFxuICAgICAgcm9vdDogdHJ1ZSxcbiAgICAgIHBsdWdpbnM6IHRoaXMuX3BsdWdpbnMsXG4gICAgICBwYXJzZXI6IFwiQHR5cGVzY3JpcHQtZXNsaW50L3BhcnNlclwiLFxuICAgICAgcGFyc2VyT3B0aW9uczoge1xuICAgICAgICBlY21hVmVyc2lvbjogMjAxOCxcbiAgICAgICAgc291cmNlVHlwZTogXCJtb2R1bGVcIixcbiAgICAgICAgLy8gRWl0aGVyIGxldCB0eXBlc2NyaXB0LWVzbGludCByZXNvbHZlIHRoZSBuZWFyZXN0IHRzY29uZmlnIHBlciBmaWxlXG4gICAgICAgIC8vIChwcm9qZWN0IHNlcnZpY2UpLCBvciBwaW4gYWxsIGZpbGVzIHRvIGEgc2luZ2xlIHByb2plY3QuXG4gICAgICAgIC4uLihwcm9qZWN0U2VydmljZVxuICAgICAgICAgID8geyBwcm9qZWN0U2VydmljZTogKCkgPT4gdGhpcy5yZW5kZXJQcm9qZWN0U2VydmljZSh0c2NvbmZpZykgfVxuICAgICAgICAgIDogeyBwcm9qZWN0OiB0c2NvbmZpZyB9KSxcbiAgICAgIH0sXG4gICAgICBleHRlbmRzOiAoKSA9PlxuICAgICAgICBBcnJheS5mcm9tKHRoaXMuX2V4dGVuZHMpLnNvcnQoKGEsIGIpID0+XG4gICAgICAgICAgdGhpcy5zb3J0RXh0ZW5kcy5jb21wYXJlKGEsIGIpLFxuICAgICAgICApLFxuICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgXCJpbXBvcnQvcGFyc2Vyc1wiOiB7XG4gICAgICAgICAgXCJAdHlwZXNjcmlwdC1lc2xpbnQvcGFyc2VyXCI6IFtcIi50c1wiLCBcIi50c3hcIl0sXG4gICAgICAgIH0sXG4gICAgICAgIFwiaW1wb3J0L3Jlc29sdmVyXCI6IHtcbiAgICAgICAgICAuLi4ob3B0aW9ucy5hbGlhc01hcCAmJiB7XG4gICAgICAgICAgICBhbGlhczoge1xuICAgICAgICAgICAgICBtYXA6IE9iamVjdC5lbnRyaWVzKG9wdGlvbnMuYWxpYXNNYXApLm1hcCgoW2ssIHZdKSA9PiBbaywgdl0pLFxuICAgICAgICAgICAgICBleHRlbnNpb25zOiBvcHRpb25zLmFsaWFzRXh0ZW5zaW9ucyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgbm9kZToge30sXG4gICAgICAgICAgdHlwZXNjcmlwdDoge1xuICAgICAgICAgICAgcHJvamVjdDogdHNjb25maWcsXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy50c0Fsd2F5c1RyeVR5cGVzICE9PSBmYWxzZSAmJiB7IGFsd2F5c1RyeVR5cGVzOiB0cnVlIH0pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgaWdub3JlUGF0dGVybnM6IHRoaXMuaWdub3JlUGF0dGVybnMsXG4gICAgICBydWxlczogKCkgPT4gKHsgLi4udGhpcy5fZm9ybWF0dGluZ1J1bGVzLCAuLi50aGlzLnJ1bGVzIH0pLFxuICAgICAgb3ZlcnJpZGVzOiB0aGlzLm92ZXJyaWRlcyxcbiAgICB9O1xuXG4gICAgaWYgKG9wdGlvbnMueWFtbCkge1xuICAgICAgdGhpcy5maWxlID0gbmV3IFlhbWxGaWxlKHByb2plY3QsIFwiLmVzbGludHJjLnltbFwiLCB7XG4gICAgICAgIG9iajogdGhpcy5jb25maWcsXG4gICAgICAgIG1hcmtlcjogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbGUgPSBuZXcgSnNvbkZpbGUocHJvamVjdCwgXCIuZXNsaW50cmMuanNvblwiLCB7XG4gICAgICAgIG9iajogdGhpcy5jb25maWcsXG4gICAgICAgIC8vIGh0dHBzOi8vZXNsaW50Lm9yZy9kb2NzL2xhdGVzdC91c2VyLWd1aWRlL2NvbmZpZ3VyaW5nL2NvbmZpZ3VyYXRpb24tZmlsZXMjY29tbWVudHMtaW4tY29uZmlndXJhdGlvbi1maWxlc1xuICAgICAgICBtYXJrZXI6IHRydWUsXG4gICAgICAgIGFsbG93Q29tbWVudHM6IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXNlciBlbmFibGVkIHByZXR0aWVyIGV4cGxpY2l0bHkgX29yXyBpZiB0aGUgcHJvamVjdCBoYXMgYVxuICAgIC8vIGBQcmV0dGllcmAgY29tcG9uZW50LCB3ZSBzaGFsbCB0d2VhayBvdXIgY29uZmlndXJhdGlvbiBhY2NvcmRpbmdseS5cbiAgICBpZiAob3B0aW9ucy5wcmV0dGllciB8fCBQcmV0dGllci5vZihwcm9qZWN0KSkge1xuICAgICAgdGhpcy5lbmFibGVQcmV0dGllcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5vZGVQcm9qZWN0LmFkZERldkRlcHMoXCJAc3R5bGlzdGljL2VzbGludC1wbHVnaW5AXjJcIik7XG4gICAgICB0aGlzLmFkZFBsdWdpbnMoXCJAc3R5bGlzdGljXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGltbXV0YWJsZSBjb3B5IG9mIHRoZSBsaW50UGF0dGVybnMgYmVpbmcgdXNlZCBieSB0aGlzIGVzbGludCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldCBsaW50UGF0dGVybnMoKTogc3RyaW5nW10ge1xuICAgIGlmICh0aGlzLl9saW50UGF0dGVybnMgJiYgdGhpcy5fbGludFBhdHRlcm5zLnNpemUgPiAwKSB7XG4gICAgICByZXR1cm4gWy4uLnRoaXMuX2xpbnRQYXR0ZXJuc107XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGZpbGUsIGdsb2IgcGF0dGVybiBvciBkaXJlY3Rvcnkgd2l0aCBzb3VyY2UgZmlsZXMgdG8gbGludCAoZS5nLiBbIFwic3JjXCIgXSlcbiAgICovXG4gIHB1YmxpYyBhZGRMaW50UGF0dGVybihwYXR0ZXJuOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9saW50UGF0dGVybnMuYWRkKHBhdHRlcm4pO1xuICAgIHRoaXMudXBkYXRlVGFzaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBlc2xpbnQgcnVsZS5cbiAgICovXG4gIHB1YmxpYyBhZGRSdWxlcyhydWxlczogeyBbcnVsZTogc3RyaW5nXTogYW55IH0pIHtcbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhydWxlcykpIHtcbiAgICAgIHRoaXMucnVsZXNba10gPSB2O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGVzbGludCBwbHVnaW5cbiAgICogQHBhcmFtIHBsdWdpbnMgVGhlIG5hbWVzIG9mIHBsdWdpbnMgdG8gYWRkXG4gICAqL1xuICBwdWJsaWMgYWRkUGx1Z2lucyguLi5wbHVnaW5zOiBzdHJpbmdbXSkge1xuICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIHBsdWdpbnMpIHtcbiAgICAgIHRoaXMuX3BsdWdpbnMuYWRkKHBsdWdpbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBlc2xpbnQgb3ZlcnJpZGUuXG4gICAqL1xuICBwdWJsaWMgYWRkT3ZlcnJpZGUob3ZlcnJpZGU6IEVzbGludE92ZXJyaWRlKSB7XG4gICAgdGhpcy5vdmVycmlkZXMucHVzaChvdmVycmlkZSk7XG4gIH1cblxuICAvKipcbiAgICogRG8gbm90IGxpbnQgdGhlc2UgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgYWRkSWdub3JlUGF0dGVybihwYXR0ZXJuOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlnbm9yZVBhdHRlcm5zLnB1c2gocGF0dGVybik7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBgZXh0ZW5kc2AgaXRlbSB0byB0aGUgZXNsaW50IGNvbmZpZ3VyYXRpb24uXG4gICAqIEBwYXJhbSBleHRlbmRMaXN0IFRoZSBsaXN0IG9mIFwiZXh0ZW5kc1wiIHRvIGFkZC5cbiAgICovXG4gIHB1YmxpYyBhZGRFeHRlbmRzKC4uLmV4dGVuZExpc3Q6IHN0cmluZ1tdKSB7XG4gICAgZm9yIChjb25zdCBleHRlbmQgb2YgZXh0ZW5kTGlzdCkge1xuICAgICAgdGhpcy5fZXh0ZW5kcy5hZGQoZXh0ZW5kKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgZ2xvYiBmaWxlIHBhdHRlcm4gd2hpY2ggYWxsb3dzIGltcG9ydGluZyBkZXYgZGVwZW5kZW5jaWVzLlxuICAgKiBAcGFyYW0gcGF0dGVybiBnbG9iIHBhdHRlcm4uXG4gICAqL1xuICBwdWJsaWMgYWxsb3dEZXZEZXBzKHBhdHRlcm46IHN0cmluZykge1xuICAgIHRoaXMuX2FsbG93RGV2RGVwcy5hZGQocGF0dGVybik7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgZmlsZXMgbWF0Y2hpbmcgdGhlc2UgcGF0dGVybnMgdG8gYmUgbGludGVkIHdpdGggdGhlIHR5cGVzY3JpcHQtZXNsaW50XG4gICAqIFwiZGVmYXVsdCBwcm9qZWN0XCIgd2hlbiB0aGV5IGFyZSBub3QgaW5jbHVkZWQgYnkgYW55IGB0c2NvbmZpZy5qc29uYC5cbiAgICpcbiAgICogT25seSBoYXMgYW4gZWZmZWN0IHdoZW4gdGhlIHByb2plY3Qgc2VydmljZSBpcyBlbmFibGVkIChzZWVcbiAgICogYEVzbGludE9wdGlvbnMucHJvamVjdFNlcnZpY2VgKS4gVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgbG9vc2UgZmlsZXNcbiAgICogdGhhdCBsaXZlIG91dHNpZGUgYHNyY2AvYHRlc3RgIChlLmcuIGAucHJvamVucmMudHNgKS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL3R5cGVzY3JpcHQtZXNsaW50LmlvL3BhY2thZ2VzL3BhcnNlci8jYWxsb3dkZWZhdWx0cHJvamVjdFxuICAgKiBAcGFyYW0gcGF0dGVybnMgZ2xvYiBwYXR0ZXJucywgcmVsYXRpdmUgdG8gdGhlIHByb2plY3Qgcm9vdC5cbiAgICovXG4gIHB1YmxpYyBhbGxvd0RlZmF1bHRQcm9qZWN0RmlsZXMoLi4ucGF0dGVybnM6IHN0cmluZ1tdKSB7XG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5zKSB7XG4gICAgICB0aGlzLl9hbGxvd0RlZmF1bHRQcm9qZWN0LmFkZChwYXR0ZXJuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIHRoZSB2YWx1ZSBvZiBgcGFyc2VyT3B0aW9ucy5wcm9qZWN0U2VydmljZWAuIFdoZW4gbG9vc2UgZmlsZXMgaGF2ZVxuICAgKiBiZWVuIHJlZ2lzdGVyZWQgdmlhIGBhbGxvd0RlZmF1bHRQcm9qZWN0RmlsZXNgLCBhbiBvcHRpb25zIG9iamVjdCBpc1xuICAgKiBlbWl0dGVkOyBvdGhlcndpc2UgdGhlIHBsYWluIGB0cnVlYCBzaG9ydGhhbmQgaXMgdXNlZC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHJlbmRlclByb2plY3RTZXJ2aWNlKGRlZmF1bHRQcm9qZWN0OiBzdHJpbmcpOiBib29sZWFuIHwgb2JqZWN0IHtcbiAgICBpZiAodGhpcy5fYWxsb3dEZWZhdWx0UHJvamVjdC5zaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGFsbG93RGVmYXVsdFByb2plY3Q6IEFycmF5LmZyb20odGhpcy5fYWxsb3dEZWZhdWx0UHJvamVjdCksXG4gICAgICBkZWZhdWx0UHJvamVjdCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgcHJldHRpZXIgZm9yIGNvZGUgZm9ybWF0dGluZy5cbiAgICovXG4gIHByaXZhdGUgZW5hYmxlUHJldHRpZXIoKSB7XG4gICAgdGhpcy5ub2RlUHJvamVjdC5hZGREZXZEZXBzKFxuICAgICAgXCJwcmV0dGllclwiLFxuICAgICAgXCJlc2xpbnQtcGx1Z2luLXByZXR0aWVyXCIsXG4gICAgICBcImVzbGludC1jb25maWctcHJldHRpZXJcIixcbiAgICApO1xuXG4gICAgdGhpcy5fZm9ybWF0dGluZ1J1bGVzID0ge307XG5cbiAgICB0aGlzLmFkZEV4dGVuZHMoXCJwbHVnaW46cHJldHRpZXIvcmVjb21tZW5kZWRcIik7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckRldkRlcHNBbGxvd0xpc3QoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5fYWxsb3dEZXZEZXBzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHRhc2sgd2l0aCB0aGUgY3VycmVudCBsaXN0IG9mIGxpbnQgcGF0dGVybnMgYW5kIGZpbGUgZXh0ZW5zaW9uc1xuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVUYXNrKCkge1xuICAgIGNvbnN0IHRhc2tFeGVjQ29tbWFuZCA9IFwiZXNsaW50XCI7XG4gICAgY29uc3QgYXJnc1NldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGlmICh0aGlzLl9maWxlRXh0ZW5zaW9ucy5zaXplID4gMCkge1xuICAgICAgYXJnc1NldC5hZGQoYC0tZXh0ICR7Wy4uLnRoaXMuX2ZpbGVFeHRlbnNpb25zXS5qb2luKFwiLFwiKX1gKTtcbiAgICB9XG4gICAgYXJnc1NldC5hZGQoYCR7Wy4uLnRoaXMuX2ZsYWdBcmdzXS5qb2luKFwiIFwiKX1gKTtcbiAgICBhcmdzU2V0LmFkZChcIiRAXCIpOyAvLyBFeHRlcm5hbCBhcmdzIGdvIGhlcmVcblxuICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiB0aGlzLl9saW50UGF0dGVybnMpIHtcbiAgICAgIGFyZ3NTZXQuYWRkKHBhdHRlcm4pO1xuICAgIH1cblxuICAgIHRoaXMuZXNsaW50VGFzay5yZXNldChcbiAgICAgIFt0YXNrRXhlY0NvbW1hbmQsIC4uLmFyZ3NTZXRdLmpvaW4oXCIgXCIpLFxuICAgICAgdGhpcy5idWlsZFRhc2tTdGVwT3B0aW9ucyh0YXNrRXhlY0NvbW1hbmQpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSW4gY2FzZSBvZiBleHRlcm5hbCBlZGl0aW5nIG9mIHRoZSBlc2xpbnQgdGFzayBzdGVwLCB3ZSBwcmVzZXJ2ZSB0aG9zZSBjaGFuZ2VzLlxuICAgKiBPdGhlcndpc2UsIHdlIHJldHVybiB0aGUgZGVmYXVsdCB0YXNrIHN0ZXAgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHRhc2tFeGVjQ29tbWFuZCBUaGUgY29tbWFuZCB0aGF0IHRoZSBFU0xpbnQgdGFza3MgZXhlY3V0ZXNcbiAgICogQHJldHVybnMgRWl0aGVyIHRoZSBleHRlcm5hbGx5IGVkaXRlZCwgb3IgdGhlIGRlZmF1bHQgdGFzayBzdGVwIG9wdGlvbnNcbiAgICovXG4gIHByaXZhdGUgYnVpbGRUYXNrU3RlcE9wdGlvbnModGFza0V4ZWNDb21tYW5kOiBzdHJpbmcpOiBUYXNrU3RlcE9wdGlvbnMge1xuICAgIGNvbnN0IGN1cnJlbnRFc2xpbnRUYXNrU3RlcCA9IHRoaXMuZXNsaW50VGFzaz8uc3RlcHM/LmZpbmQoKHN0ZXApID0+XG4gICAgICBzdGVwPy5leGVjPy5zdGFydHNXaXRoPy4odGFza0V4ZWNDb21tYW5kKSxcbiAgICApO1xuXG4gICAgaWYgKGN1cnJlbnRFc2xpbnRUYXNrU3RlcCkge1xuICAgICAgY29uc3QgeyBhcmdzLCBjb25kaXRpb24sIGN3ZCwgZW52LCBuYW1lLCByZWNlaXZlQXJncyB9ID1cbiAgICAgICAgY3VycmVudEVzbGludFRhc2tTdGVwO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYXJncyxcbiAgICAgICAgY29uZGl0aW9uLFxuICAgICAgICBjd2QsXG4gICAgICAgIGVudixcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcmVjZWl2ZUFyZ3MsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICByZWNlaXZlQXJnczogdHJ1ZSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQSBjb21wYXJlIHByb3RvY29sIHRwIHNvcnQgdGhlIGV4dGVuZHMgYXJyYXkgaW4gZXNsaW50IGNvbmZpZyB1c2luZyBrbm93biBFU0xpbnQgYmVzdCBwcmFjdGljZXMuXG4gKlxuICogUGxhY2VzIFwicHJldHRpZXJcIiBwbHVnaW5zIGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5XG4gKi9cbmNsYXNzIEV4dGVuZHNEZWZhdWx0T3JkZXIgaW1wbGVtZW50cyBJQ29tcGFyZVN0cmluZyB7XG4gIC8vIFRoaXMgaXMgdGhlIG9yZGVyIHRoYXQgRVNMaW50IGJlc3QgcHJhY3RpY2VzIHN1Z2dlc3RcbiAgcHJpdmF0ZSBzdGF0aWMgT1JERVIgPSBbXCJwbHVnaW46cHJldHRpZXIvcmVjb21tZW5kZWRcIiwgXCJwcmV0dGllclwiXTtcblxuICBwdWJsaWMgY29tcGFyZShhOiBzdHJpbmcsIGI6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIChcbiAgICAgIEV4dGVuZHNEZWZhdWx0T3JkZXIuT1JERVIuaW5kZXhPZihhKSAtXG4gICAgICBFeHRlbmRzRGVmYXVsdE9yZGVyLk9SREVSLmluZGV4T2YoYilcbiAgICApO1xuICB9XG59XG4iXX0=
|
|
431
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNsaW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2phdmFzY3JpcHQvZXNsaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSx5Q0FBc0M7QUFFdEMsNENBQXlDO0FBRXpDLGtDQUFtQztBQUtuQyxrQ0FBbUM7QUFrSm5DOztHQUVHO0FBQ0gsTUFBYSxNQUFPLFNBQVEscUJBQVM7O0lBQ25DOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFnQjtRQUMvQixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQVksRUFBZSxFQUFFLENBQUMsQ0FBQyxZQUFZLE1BQU0sQ0FBQztRQUNwRSxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7T0FFRztJQUNhLElBQUksQ0FBYTtJQUVqQzs7T0FFRztJQUNhLEtBQUssQ0FBMEI7SUFFL0M7O09BRUc7SUFDYSxTQUFTLEdBQXFCLEVBQUUsQ0FBQztJQUVqRDs7T0FFRztJQUNhLFVBQVUsQ0FBTztJQUVqQzs7T0FFRztJQUNhLE1BQU0sQ0FBTTtJQUU1Qjs7T0FFRztJQUNhLGNBQWMsQ0FBVztJQUVqQyxnQkFBZ0IsQ0FBc0I7SUFDN0IsYUFBYSxDQUFjO0lBQzNCLG9CQUFvQixHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDekMsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDN0IsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDN0IsZUFBZSxDQUFjO0lBQzdCLFNBQVMsQ0FBYztJQUN2QixhQUFhLENBQWM7SUFDM0IsV0FBVyxDQUFjO0lBQ3pCLFdBQVcsQ0FBaUI7SUFFN0MsWUFBWSxPQUFvQixFQUFFLE9BQXNCO1FBQ3RELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVmLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDO1FBRTNCLE9BQU8sQ0FBQyxVQUFV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d0JBd2VDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sbUJBQW1CO0lBQ3ZCLHVEQUF1RDtJQUMvQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsNkJBQTZCLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFFNUQsT0FBTyxDQUFDLENBQVMsRUFBRSxDQUFTO1FBQ2pDLE9BQU8sQ0FDTCxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNwQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUNyQyxDQUFDO0lBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByZXR0aWVyIH0gZnJvbSBcIi4vcHJldHRpZXJcIjtcbmltcG9ydCB0eXBlIHsgSUNvbXBhcmVTdHJpbmcgfSBmcm9tIFwiLi4vY29tcGFyZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBOb2RlUHJvamVjdCB9IGZyb20gXCIuLi9qYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyBKc29uRmlsZSB9IGZyb20gXCIuLi9qc29uXCI7XG5pbXBvcnQgdHlwZSB7IE9iamVjdEZpbGUgfSBmcm9tIFwiLi4vb2JqZWN0LWZpbGVcIjtcbmltcG9ydCB0eXBlIHsgSW5pdFByb2plY3QsIFByb2plY3QgfSBmcm9tIFwiLi4vcHJvamVjdFwiO1xuaW1wb3J0IHR5cGUgeyBUYXNrIH0gZnJvbSBcIi4uL3Rhc2tcIjtcbmltcG9ydCB0eXBlIHsgVGFza1N0ZXBPcHRpb25zIH0gZnJvbSBcIi4uL3Rhc2stbW9kZWxcIjtcbmltcG9ydCB7IFlhbWxGaWxlIH0gZnJvbSBcIi4uL3lhbWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBFc2xpbnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFBhdGggdG8gYHRzY29uZmlnLmpzb25gIHdoaWNoIHNob3VsZCBiZSB1c2VkIGJ5IGVzbGludC5cbiAgICogQGRlZmF1bHQgXCIuL3RzY29uZmlnLmpzb25cIlxuICAgKi9cbiAgcmVhZG9ubHkgdHNjb25maWdQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVc2UgdGhlIHR5cGVzY3JpcHQtZXNsaW50IFwicHJvamVjdCBzZXJ2aWNlXCIgZm9yIHR5cGVkIGxpbnRpbmcgaW5zdGVhZCBvZiBhXG4gICAqIHNpbmdsZSBgcGFyc2VyT3B0aW9ucy5wcm9qZWN0YC5cbiAgICpcbiAgICogV2hlbiBlbmFibGVkLCB0eXBlc2NyaXB0LWVzbGludCByZXNvbHZlcyB0aGUgbmVhcmVzdCBgdHNjb25maWcuanNvbmAgZm9yXG4gICAqIGVhY2ggbGludGVkIGZpbGUgKHRoZSBzYW1lIHJlc29sdXRpb24gbW9kZWwgdXNlZCBieSB0aGUgVHlwZVNjcmlwdCBsYW5ndWFnZVxuICAgKiBzZXJ2aWNlIC8gYHRzc2VydmVyYCkuIFRoaXMgYWxsb3dzIGZpbGVzIGluIGRpZmZlcmVudCBkaXJlY3RvcmllcyAoZS5nLlxuICAgKiBgc3JjYCBhbmQgYHRlc3RgKSB0byBiZSBsaW50ZWQgYWdhaW5zdCB0aGUgYHRzY29uZmlnLmpzb25gIHRoYXQgYWN0dWFsbHlcbiAgICogaW5jbHVkZXMgdGhlbSwgd2l0aG91dCBtYWludGFpbmluZyBhIHNpbmdsZSBjb25maWcgdGhhdCBsaXN0cyBldmVyeSBmaWxlLlxuICAgKlxuICAgKiBSZXF1aXJlcyBgQHR5cGVzY3JpcHQtZXNsaW50LypgIHY4IG9yIG5ld2VyLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vdHlwZXNjcmlwdC1lc2xpbnQuaW8vYmxvZy9wcm9qZWN0LXNlcnZpY2UvXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0U2VydmljZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZpbGVzIG9yIGdsb2IgcGF0dGVybnMgb3IgZGlyZWN0b3JpZXMgd2l0aCBzb3VyY2UgZmlsZXMgdG8gbGludCAoZS5nLiBbIFwic3JjXCIgXSlcbiAgICovXG4gIHJlYWRvbmx5IGRpcnM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBGaWxlcyBvciBnbG9iIHBhdHRlcm5zIG9yIGRpcmVjdG9yaWVzIHdpdGggc291cmNlIGZpbGVzIHRoYXQgaW5jbHVkZSB0ZXN0cyBhbmQgYnVpbGQgdG9vbHNcbiAgICpcbiAgICogVGhlc2Ugc291cmNlcyBhcmUgbGludGVkIGJ1dCBtYXkgYWxzbyBpbXBvcnQgcGFja2FnZXMgZnJvbSBgZGV2RGVwZW5kZW5jaWVzYC5cbiAgICogQGRlZmF1bHQgW11cbiAgICovXG4gIHJlYWRvbmx5IGRldmRpcnM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIEZpbGUgdHlwZXMgdGhhdCBzaG91bGQgYmUgbGludGVkIChlLmcuIFsgXCIuanNcIiwgXCIudHNcIiBdKVxuICAgKiBAZGVmYXVsdCBbXCIudHNcIl1cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVFeHRlbnNpb25zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIGVzbGludCBjb21tYW5kIGV4ZWN1dGVkIGJ5IGVzbGludCB0YXNrXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kT3B0aW9ucz86IEVzbGludENvbW1hbmRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGZpbGUgcGF0dGVybnMgdGhhdCBzaG91bGQgbm90IGJlIGxpbnRlZCwgdXNpbmcgdGhlIHNhbWUgc3ludGF4XG4gICAqIGFzIC5naXRpZ25vcmUgcGF0dGVybnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IFsgJyouanMnLCAnKi5kLnRzJywgJ25vZGVfbW9kdWxlcy8nLCAnKi5nZW5lcmF0ZWQudHMnLCAnY292ZXJhZ2UnIF1cbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZVBhdHRlcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBwcmV0dGllciBmb3IgY29kZSBmb3JtYXR0aW5nXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBwcmV0dGllcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBleHRlbmRzIGFycmF5IGluIGVzbGludCBpcyBvcmRlciBkZXBlbmRlbnQuXG4gICAqIFRoaXMgb3B0aW9uIGFsbG93cyB0byBzb3J0IHRoZSBleHRlbmRzIGFycmF5IGluIGFueSB3YXkgc2VlbiBmaXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVXNlIGtub3duIEVTTGludCBiZXN0IHByYWN0aWNlcyB0byBwbGFjZSBcInByZXR0aWVyXCIgcGx1Z2lucyBhdCB0aGUgZW5kIG9mIHRoZSBhcnJheVxuICAgKi9cbiAgcmVhZG9ubHkgc29ydEV4dGVuZHM/OiBJQ29tcGFyZVN0cmluZztcblxuICAvKipcbiAgICogRW5hYmxlIGltcG9ydCBhbGlhcyBmb3IgbW9kdWxlIHBhdGhzXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgYWxpYXNNYXA/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBFbmFibGUgaW1wb3J0IGFsaWFzIGZvciBtb2R1bGUgcGF0aHNcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSBhbGlhc0V4dGVuc2lvbnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQWx3YXlzIHRyeSB0byByZXNvbHZlIHR5cGVzIHVuZGVyIGA8cm9vdD5AdHlwZXNgIGRpcmVjdG9yeSBldmVuIGl0IGRvZXNuJ3QgY29udGFpbiBhbnkgc291cmNlIGNvZGUuXG4gICAqIFRoaXMgcHJldmVudHMgYGltcG9ydC9uby11bnJlc29sdmVkYCBlc2xpbnQgZXJyb3JzIHdoZW4gaW1wb3J0aW5nIGEgYEB0eXBlcy8qYCBtb2R1bGUgdGhhdCB3b3VsZCBvdGhlcndpc2UgcmVtYWluIHVucmVzb2x2ZWQuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHRzQWx3YXlzVHJ5VHlwZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXcml0ZSBlc2xpbnQgY29uZmlndXJhdGlvbiBhcyBZQU1MIGluc3RlYWQgb2YgSlNPTlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgeWFtbD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXNsaW50Q29tbWFuZE9wdGlvbnMge1xuICAvKipcbiAgICogV2hldGhlciB0byBmaXggZXNsaW50IGlzc3VlcyB3aGVuIHJ1bm5pbmcgdGhlIGVzbGludCB0YXNrXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGZpeD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEV4dHJhIGZsYWcgYXJndW1lbnRzIHRvIHBhc3MgdG8gZXNsaW50IGNvbW1hbmRcbiAgICovXG4gIHJlYWRvbmx5IGV4dHJhQXJncz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIGVzbGludCBydWxlcyBvdmVycmlkZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVzbGludE92ZXJyaWRlIHtcbiAgLyoqXG4gICAqIEZpbGVzIG9yIGZpbGUgcGF0dGVybnMgb24gd2hpY2ggdG8gYXBwbHkgdGhlIG92ZXJyaWRlXG4gICAqL1xuICByZWFkb25seSBmaWxlczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFBhdHRlcm4ocykgdG8gZXhjbHVkZSBmcm9tIHRoaXMgb3ZlcnJpZGUuXG4gICAqIElmIGEgZmlsZSBtYXRjaGVzIGFueSBvZiB0aGUgZXhjbHVkZWQgcGF0dGVybnMsIHRoZSBjb25maWd1cmF0aW9uIHdvbuKAmXQgYXBwbHkuXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlZEZpbGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBvdmVycmlkZGVuIHJ1bGVzXG4gICAqL1xuICByZWFkb25seSBydWxlcz86IHsgW3J1bGU6IHN0cmluZ106IGFueSB9O1xuXG4gIC8qKlxuICAgKiBUaGUgb3ZlcnJpZGRlbiBwYXJzZXJcbiAgICovXG4gIHJlYWRvbmx5IHBhcnNlcj86IHN0cmluZztcblxuICAvKipcbiAgICogQ29uZmlnKHMpIHRvIGV4dGVuZCBpbiB0aGlzIG92ZXJyaWRlXG4gICAqL1xuICByZWFkb25seSBleHRlbmRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIGBwbHVnaW5zYCBvdmVycmlkZVxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2lucz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgZXNsaW50IGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBFc2xpbnQgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2luZ2xldG9uIEVzbGludCBjb21wb25lbnQgb2YgYSBwcm9qZWN0IG9yIHVuZGVmaW5lZCBpZiB0aGVyZSBpcyBub25lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBvZihwcm9qZWN0OiBQcm9qZWN0KTogRXNsaW50IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBpc0VzbGludCA9IChjOiBDb21wb25lbnQpOiBjIGlzIEVzbGludCA9PiBjIGluc3RhbmNlb2YgRXNsaW50O1xuICAgIHJldHVybiBwcm9qZWN0LmNvbXBvbmVudHMuZmluZChpc0VzbGludCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHVuZGVybHlpbmcgY29uZmlnIGZpbGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmaWxlOiBPYmplY3RGaWxlO1xuXG4gIC8qKlxuICAgKiBlc2xpbnQgcnVsZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcnVsZXM6IHsgW3J1bGU6IHN0cmluZ106IGFueSB9O1xuXG4gIC8qKlxuICAgKiBlc2xpbnQgb3ZlcnJpZGVzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG92ZXJyaWRlczogRXNsaW50T3ZlcnJpZGVbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBlc2xpbnQgdGFzay5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlc2xpbnRUYXNrOiBUYXNrO1xuXG4gIC8qKlxuICAgKiBEaXJlY3QgYWNjZXNzIHRvIHRoZSBlc2xpbnQgY29uZmlndXJhdGlvbiAoZXNjYXBlIGhhdGNoKVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbmZpZzogYW55O1xuXG4gIC8qKlxuICAgKiBGaWxlIHBhdHRlcm5zIHRoYXQgc2hvdWxkIG5vdCBiZSBsaW50ZWRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpZ25vcmVQYXR0ZXJuczogc3RyaW5nW107XG5cbiAgcHJpdmF0ZSBfZm9ybWF0dGluZ1J1bGVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9hbGxvd0RldkRlcHM6IFNldDxzdHJpbmc+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9hbGxvd0RlZmF1bHRQcm9qZWN0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BsdWdpbnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXh0ZW5kcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9maWxlRXh0ZW5zaW9uczogU2V0PHN0cmluZz47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZsYWdBcmdzOiBTZXQ8c3RyaW5nPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGludFBhdHRlcm5zOiBTZXQ8c3RyaW5nPjtcbiAgcHJpdmF0ZSByZWFkb25seSBub2RlUHJvamVjdDogTm9kZVByb2plY3Q7XG4gIHByaXZhdGUgcmVhZG9ubHkgc29ydEV4dGVuZHM6IElDb21wYXJlU3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IE5vZGVQcm9qZWN0LCBvcHRpb25zOiBFc2xpbnRPcHRpb25zKSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG5cbiAgICB0aGlzLm5vZGVQcm9qZWN0ID0gcHJvamVjdDtcblxuICAgIHByb2plY3QuYWRkRGV2RGVwcyhcbiAgICAgIFwiZXNsaW50QF45XCIsXG4gICAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9lc2xpbnQtcGx1Z2luQF44XCIsXG4gICAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9wYXJzZXJAXjhcIixcbiAgICAgIFwiZXNsaW50LWltcG9ydC1yZXNvbHZlci10eXBlc2NyaXB0XCIsXG4gICAgICBcImVzbGludC1wbHVnaW4taW1wb3J0XCIsXG4gICAgKTtcblxuICAgIGlmIChvcHRpb25zLmFsaWFzTWFwKSB7XG4gICAgICBwcm9qZWN0LmFkZERldkRlcHMoXCJlc2xpbnQtaW1wb3J0LXJlc29sdmVyLWFsaWFzXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGRldmRpcnMgPSBvcHRpb25zLmRldmRpcnMgPz8gW107XG5cbiAgICB0aGlzLl9saW50UGF0dGVybnMgPSBuZXcgU2V0KFsuLi5vcHRpb25zLmRpcnMsIC4uLmRldmRpcnNdKTtcbiAgICB0aGlzLl9maWxlRXh0ZW5zaW9ucyA9IG5ldyBTZXQob3B0aW9ucy5maWxlRXh0ZW5zaW9ucyA/PyBbXCIudHNcIl0pO1xuXG4gICAgdGhpcy5fYWxsb3dEZXZEZXBzID0gbmV3IFNldCgoZGV2ZGlycyA/PyBbXSkubWFwKChkaXIpID0+IGAqKi8ke2Rpcn0vKipgKSk7XG5cbiAgICBjb25zdCBjb21tYW5kT3B0aW9ucyA9IG9wdGlvbnMuY29tbWFuZE9wdGlvbnMgPz8ge307XG4gICAgY29uc3QgeyBmaXggPSB0cnVlLCBleHRyYUFyZ3M6IGV4dHJhRmxhZ0FyZ3MgPSBbXSB9ID0gY29tbWFuZE9wdGlvbnM7XG4gICAgdGhpcy5fZmxhZ0FyZ3MgPSBuZXcgU2V0KGV4dHJhRmxhZ0FyZ3MpO1xuICAgIGlmIChmaXgpIHtcbiAgICAgIHRoaXMuX2ZsYWdBcmdzLmFkZChcIi0tZml4XCIpO1xuICAgIH1cbiAgICB0aGlzLl9mbGFnQXJncy5hZGQoXCItLW5vLWVycm9yLW9uLXVubWF0Y2hlZC1wYXR0ZXJuXCIpO1xuXG4gICAgdGhpcy5zb3J0RXh0ZW5kcyA9IG9wdGlvbnMuc29ydEV4dGVuZHMgPz8gbmV3IEV4dGVuZHNEZWZhdWx0T3JkZXIoKTtcblxuICAgIHRoaXMuZXNsaW50VGFzayA9IHByb2plY3QuYWRkVGFzayhcImVzbGludFwiLCB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJSdW5zIGVzbGludCBhZ2FpbnN0IHRoZSBjb2RlYmFzZVwiLFxuICAgICAgZW52OiB7XG4gICAgICAgIEVTTElOVF9VU0VfRkxBVF9DT05GSUc6IFwiZmFsc2VcIixcbiAgICAgICAgTk9ERV9OT19XQVJOSU5HUzogXCIxXCIsIC8vIFN1cHByZXNzIGVzbGludCB3YXJuaW5nIGFib3V0IGxlZ2FjeSBjb25maWcgZm9ybWF0LCBhcyBpdCBqdXN0IGNvbmZ1c2VzIHVzZXJzLiBUaGlzIHdpbGwgc3VwcHJlc3MgYWxsIG5vZGUgd2FybmluZ3MsIGJ1dCBpbiBwcmFjdGljZSB1c2VycyBjYW5ub3QgYWN0aW9uIHdhcm5pbmdzIGZyb20gZXNsaW50IGFueXdheS5cbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVUYXNrKCk7XG5cbiAgICBwcm9qZWN0LnRlc3RUYXNrLnNwYXduKHRoaXMuZXNsaW50VGFzayk7XG5cbiAgICAvLyBleGNsdWRlIHNvbWUgZmlsZXNcbiAgICBwcm9qZWN0Lm5wbWlnbm9yZT8uZXhjbHVkZShcIi8uZXNsaW50cmMuanNvblwiKTtcblxuICAgIHRoaXMuX2Zvcm1hdHRpbmdSdWxlcyA9IHtcbiAgICAgIC8vIFN0eWxlXG4gICAgICBcIkBzdHlsaXN0aWMvaW5kZW50XCI6IFtcImVycm9yXCIsIDJdLFxuICAgICAgXCJAc3R5bGlzdGljL3F1b3Rlc1wiOiBbXCJlcnJvclwiLCBcInNpbmdsZVwiLCB7IGF2b2lkRXNjYXBlOiB0cnVlIH1dLFxuICAgICAgXCJAc3R5bGlzdGljL2NvbW1hLWRhbmdsZVwiOiBbXCJlcnJvclwiLCBcImFsd2F5cy1tdWx0aWxpbmVcIl0sIC8vIGVuc3VyZXMgY2xlYW4gZGlmZnMsIHNlZSBodHRwczovL21lZGl1bS5jb20vQG5pa2dyYWYvd2h5LXlvdS1zaG91bGQtZW5mb3JjZS1kYW5nbGluZy1jb21tYXMtZm9yLW11bHRpbGluZS1zdGF0ZW1lbnRzLWQwMzRjOThlMzZmOFxuICAgICAgXCJAc3R5bGlzdGljL2NvbW1hLXNwYWNpbmdcIjogW1wiZXJyb3JcIiwgeyBiZWZvcmU6IGZhbHNlLCBhZnRlcjogdHJ1ZSB9XSwgLy8gc3BhY2UgYWZ0ZXIsIG5vIHNwYWNlIGJlZm9yZVxuICAgICAgXCJAc3R5bGlzdGljL25vLW11bHRpLXNwYWNlc1wiOiBbXCJlcnJvclwiLCB7IGlnbm9yZUVPTENvbW1lbnRzOiBmYWxzZSB9XSwgLy8gbm8gbXVsdGkgc3BhY2VzXG4gICAgICBcIkBzdHlsaXN0aWMvYXJyYXktYnJhY2tldC1zcGFjaW5nXCI6IFtcImVycm9yXCIsIFwibmV2ZXJcIl0sIC8vIFsxLCAyLCAzXVxuICAgICAgXCJAc3R5bGlzdGljL2FycmF5LWJyYWNrZXQtbmV3bGluZVwiOiBbXCJlcnJvclwiLCBcImNvbnNpc3RlbnRcIl0sIC8vIGVuZm9yY2UgY29uc2lzdGVudCBsaW5lIGJyZWFrcyBiZXR3ZWVuIGJyYWNrZXRzXG4gICAgICBcIkBzdHlsaXN0aWMvb2JqZWN0LWN1cmx5LXNwYWNpbmdcIjogW1wiZXJyb3JcIiwgXCJhbHdheXNcIl0sIC8vIHsga2V5OiAndmFsdWUnIH1cbiAgICAgIFwiQHN0eWxpc3RpYy9vYmplY3QtY3VybHktbmV3bGluZVwiOiBbXG4gICAgICAgIFwiZXJyb3JcIixcbiAgICAgICAgeyBtdWx0aWxpbmU6IHRydWUsIGNvbnNpc3RlbnQ6IHRydWUgfSxcbiAgICAgIF0sIC8vIGVuZm9yY2UgY29uc2lzdGVudCBsaW5lIGJyZWFrcyBiZXR3ZWVuIGJyYWNlc1xuICAgICAgXCJAc3R5bGlzdGljL29iamVjdC1wcm9wZXJ0eS1uZXdsaW5lXCI6IFtcbiAgICAgICAgXCJlcnJvclwiLFxuICAgICAgICB7IGFsbG93QWxsUHJvcGVydGllc09uU2FtZUxpbmU6IHRydWUgfSxcbiAgICAgIF0sIC8vIGVuZm9yY2UgXCJzYW1lIGxpbmVcIiBvciBcIm11bHRpcGxlIGxpbmVcIiBvbiBvYmplY3QgcHJvcGVydGllc1xuICAgICAgXCJAc3R5bGlzdGljL2tleXdvcmQtc3BhY2luZ1wiOiBbXCJlcnJvclwiXSwgLy8gcmVxdWlyZSBhIHNwYWNlIGJlZm9yZSAmIGFmdGVyIGtleXdvcmRzXG4gICAgICBcIkBzdHlsaXN0aWMvYnJhY2Utc3R5bGVcIjogW1wiZXJyb3JcIiwgXCIxdGJzXCIsIHsgYWxsb3dTaW5nbGVMaW5lOiB0cnVlIH1dLCAvLyBlbmZvcmNlIG9uZSB0cnVlIGJyYWNlIHN0eWxlXG4gICAgICBcIkBzdHlsaXN0aWMvc3BhY2UtYmVmb3JlLWJsb2Nrc1wiOiBbXCJlcnJvclwiXSwgLy8gcmVxdWlyZSBzcGFjZSBiZWZvcmUgYmxvY2tzXG4gICAgICAvLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90eXBlc2NyaXB0LWVzbGludC90eXBlc2NyaXB0LWVzbGludC9pc3N1ZXMvODA3MlxuICAgICAgXCJAc3R5bGlzdGljL21lbWJlci1kZWxpbWl0ZXItc3R5bGVcIjogW1wiZXJyb3JcIl0sXG5cbiAgICAgIC8vIFJlcXVpcmUgc2VtaWNvbG9uc1xuICAgICAgXCJAc3R5bGlzdGljL3NlbWlcIjogW1wiZXJyb3JcIiwgXCJhbHdheXNcIl0sXG5cbiAgICAgIC8vIE1heCBsaW5lIGxlbmd0aHNcbiAgICAgIFwiQHN0eWxpc3RpYy9tYXgtbGVuXCI6IFtcbiAgICAgICAgXCJlcnJvclwiLFxuICAgICAgICB7XG4gICAgICAgICAgY29kZTogMTUwLFxuICAgICAgICAgIGlnbm9yZVVybHM6IHRydWUsIC8vIE1vc3QgY29tbW9uIHJlYXNvbiB0byBkaXNhYmxlIGl0XG4gICAgICAgICAgaWdub3JlU3RyaW5nczogdHJ1ZSwgLy8gVGhlc2UgYXJlIG5vdCBmYW50YXN0aWMgYnV0IG5lY2Vzc2FyeSBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgICAgICBpZ25vcmVUZW1wbGF0ZUxpdGVyYWxzOiB0cnVlLFxuICAgICAgICAgIGlnbm9yZUNvbW1lbnRzOiB0cnVlLFxuICAgICAgICAgIGlnbm9yZVJlZ0V4cExpdGVyYWxzOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgXSxcblxuICAgICAgLy8gRG9uJ3QgdW5uZWNlc3NhcmlseSBxdW90ZSBwcm9wZXJ0aWVzXG4gICAgICBcIkBzdHlsaXN0aWMvcXVvdGUtcHJvcHNcIjogW1wiZXJyb3JcIiwgXCJjb25zaXN0ZW50LWFzLW5lZWRlZFwiXSxcblxuICAgICAgLy8gUmVxdWlyZWQgc3BhY2luZyBpbiBwcm9wZXJ0eSBkZWNsYXJhdGlvbnMgKGNvcGllZCBmcm9tIFRTTGludCwgZGVmYXVsdHMgYXJlIGdvb2QpXG4gICAgICBcIkBzdHlsaXN0aWMva2V5LXNwYWNpbmdcIjogW1wiZXJyb3JcIl0sXG5cbiAgICAgIC8vIE5vIG11bHRpcGxlIGVtcHR5IGxpbmVzXG4gICAgICBcIkBzdHlsaXN0aWMvbm8tbXVsdGlwbGUtZW1wdHktbGluZXNcIjogW1wiZXJyb3JcIl0sXG5cbiAgICAgIC8vIFVzZWxlc3MgZGlmZiByZXN1bHRzXG4gICAgICBcIkBzdHlsaXN0aWMvbm8tdHJhaWxpbmctc3BhY2VzXCI6IFtcImVycm9yXCJdLFxuICAgIH07XG5cbiAgICB0aGlzLnJ1bGVzID0ge1xuICAgICAgLy8gcmVxdWlyZSBjdXJseSBicmFjZXMgZm9yIG11bHRpbGluZSBjb250cm9sIHN0YXRlbWVudHNcbiAgICAgIGN1cmx5OiBbXCJlcnJvclwiLCBcIm11bHRpLWxpbmVcIiwgXCJjb25zaXN0ZW50XCJdLFxuXG4gICAgICAvLyBSZXF1aXJlIHVzZSBvZiB0aGUgYGltcG9ydCB7IGZvbyB9IGZyb20gJ2Jhcic7YCBmb3JtIGluc3RlYWQgb2YgYGltcG9ydCBmb28gPSByZXF1aXJlKCdiYXInKTtgXG4gICAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcIjogXCJlcnJvclwiLFxuXG4gICAgICAvLyBSZXF1aXJlIGFsbCBpbXBvcnRlZCBkZXBlbmRlbmNpZXMgYXJlIGFjdHVhbGx5IGRlY2xhcmVkIGluIHBhY2thZ2UuanNvblxuICAgICAgXCJpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcIjogW1xuICAgICAgICBcImVycm9yXCIsXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBPbmx5IGFsbG93IGltcG9ydGluZyBkZXZEZXBlbmRlbmNpZXMgZnJvbSBcImRldmRpcnNcIi5cbiAgICAgICAgICBkZXZEZXBlbmRlbmNpZXM6ICgpID0+IHRoaXMucmVuZGVyRGV2RGVwc0FsbG93TGlzdCgpLFxuICAgICAgICAgIG9wdGlvbmFsRGVwZW5kZW5jaWVzOiBmYWxzZSwgLy8gRGlzYWxsb3cgaW1wb3J0aW5nIG9wdGlvbmFsIGRlcGVuZGVuY2llcyAodGhvc2Ugc2hvdWxkbid0IGJlIGluIHVzZSBpbiB0aGUgcHJvamVjdClcbiAgICAgICAgICBwZWVyRGVwZW5kZW5jaWVzOiB0cnVlLCAvLyBBbGxvdyBpbXBvcnRpbmcgcGVlciBkZXBlbmRlbmNpZXMgKHRoYXQgYXJlbid0IGFsc28gZGlyZWN0IGRlcGVuZGVuY2llcylcbiAgICAgICAgfSxcbiAgICAgIF0sXG5cbiAgICAgIC8vIFJlcXVpcmUgYWxsIGltcG9ydGVkIGxpYnJhcmllcyBhY3R1YWxseSByZXNvbHZlICghIXJlcXVpcmVkIGZvciBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgdG8gd29yayEhKVxuICAgICAgXCJpbXBvcnQvbm8tdW5yZXNvbHZlZFwiOiBbXCJlcnJvclwiXSxcblxuICAgICAgLy8gUmVxdWlyZSBhbiBvcmRlcmluZyBvbiBhbGwgaW1wb3J0c1xuICAgICAgXCJpbXBvcnQvb3JkZXJcIjogW1xuICAgICAgICBcIndhcm5cIixcbiAgICAgICAge1xuICAgICAgICAgIGdyb3VwczogW1wiYnVpbHRpblwiLCBcImV4dGVybmFsXCJdLFxuICAgICAgICAgIGFscGhhYmV0aXplOiB7IG9yZGVyOiBcImFzY1wiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWUgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG5cbiAgICAgIC8vIENhbm5vdCBpbXBvcnQgZnJvbSB0aGUgc2FtZSBtb2R1bGUgdHdpY2VcbiAgICAgIFwiaW1wb3J0L25vLWR1cGxpY2F0ZXNcIjogW1wiZXJyb3JcIl0sXG5cbiAgICAgIC8vIENhbm5vdCBzaGFkb3cgbmFtZXNcbiAgICAgIFwibm8tc2hhZG93XCI6IFtcIm9mZlwiXSxcbiAgICAgIFwiQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvd1wiOiBcImVycm9yXCIsXG4gICAgICAvLyBPbmUgb2YgdGhlIGVhc2llc3QgbWlzdGFrZXMgdG8gbWFrZVxuICAgICAgXCJAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXNcIjogXCJlcnJvclwiLFxuXG4gICAgICAvLyBNYWtlIHN1cmUgdGhhdCBpbnNpZGUgdHJ5L2NhdGNoIGJsb2NrcywgcHJvbWlzZXMgYXJlICdyZXR1cm4gYXdhaXQnZWRcbiAgICAgIC8vIChtdXN0IGRpc2FibGUgdGhlIGJhc2UgcnVsZSBhcyBpdCBjYW4gcmVwb3J0IGluY29ycmVjdCBlcnJvcnMpXG4gICAgICBcIm5vLXJldHVybi1hd2FpdFwiOiBbXCJvZmZcIl0sXG4gICAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9yZXR1cm4tYXdhaXRcIjogXCJlcnJvclwiLFxuXG4gICAgICAvLyBNdXN0IHVzZSBmb28uYmFyIGluc3RlYWQgb2YgZm9vWydiYXInXSBpZiBwb3NzaWJsZVxuICAgICAgXCJkb3Qtbm90YXRpb25cIjogW1wiZXJyb3JcIl0sXG5cbiAgICAgIC8vIEFyZSB5b3Ugc3VyZSB8IGlzIG5vdCBhIHR5cG8gZm9yIHx8ID9cbiAgICAgIFwibm8tYml0d2lzZVwiOiBbXCJlcnJvclwiXSxcblxuICAgICAgLy8gTWVtYmVyIG9yZGVyaW5nXG4gICAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcIjogW1xuICAgICAgICBcImVycm9yXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkZWZhdWx0OiBbXG4gICAgICAgICAgICBcInB1YmxpYy1zdGF0aWMtZmllbGRcIixcbiAgICAgICAgICAgIFwicHVibGljLXN0YXRpYy1tZXRob2RcIixcbiAgICAgICAgICAgIFwicHJvdGVjdGVkLXN0YXRpYy1maWVsZFwiLFxuICAgICAgICAgICAgXCJwcm90ZWN0ZWQtc3RhdGljLW1ldGhvZFwiLFxuICAgICAgICAgICAgXCJwcml2YXRlLXN0YXRpYy1maWVsZFwiLFxuICAgICAgICAgICAgXCJwcml2YXRlLXN0YXRpYy1tZXRob2RcIixcblxuICAgICAgICAgICAgXCJmaWVsZFwiLFxuXG4gICAgICAgICAgICAvLyBDb25zdHJ1Y3RvcnNcbiAgICAgICAgICAgIFwiY29uc3RydWN0b3JcIiwgLy8gPSBbXCJwdWJsaWMtY29uc3RydWN0b3JcIiwgXCJwcm90ZWN0ZWQtY29uc3RydWN0b3JcIiwgXCJwcml2YXRlLWNvbnN0cnVjdG9yXCJdXG5cbiAgICAgICAgICAgIC8vIE1ldGhvZHNcbiAgICAgICAgICAgIFwibWV0aG9kXCIsXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIHRoaXMuaWdub3JlUGF0dGVybnMgPSBvcHRpb25zLmlnbm9yZVBhdHRlcm5zID8/IFtcbiAgICAgIFwiKi5qc1wiLFxuICAgICAgXCIqLmQudHNcIixcbiAgICAgIFwibm9kZV9tb2R1bGVzL1wiLFxuICAgICAgXCIqLmdlbmVyYXRlZC50c1wiLFxuICAgICAgXCJjb3ZlcmFnZVwiLFxuICAgIF07XG5cbiAgICBjb25zdCB0c2NvbmZpZyA9IG9wdGlvbnMudHNjb25maWdQYXRoID8/IFwiLi90c2NvbmZpZy5qc29uXCI7XG4gICAgY29uc3QgcHJvamVjdFNlcnZpY2UgPSBvcHRpb25zLnByb2plY3RTZXJ2aWNlID8/IGZhbHNlO1xuXG4gICAgdGhpcy5hZGRQbHVnaW5zKFwiQHR5cGVzY3JpcHQtZXNsaW50XCIpO1xuICAgIHRoaXMuYWRkUGx1Z2lucyhcImltcG9ydFwiKTtcbiAgICB0aGlzLmFkZEV4dGVuZHMoXCJwbHVnaW46aW1wb3J0L3R5cGVzY3JpcHRcIik7XG5cbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIGVudjoge1xuICAgICAgICBqZXN0OiB0cnVlLFxuICAgICAgICBub2RlOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHJvb3Q6IHRydWUsXG4gICAgICBwbHVnaW5zOiB0aGlzLl9wbHVnaW5zLFxuICAgICAgcGFyc2VyOiBcIkB0eXBlc2NyaXB0LWVzbGludC9wYXJzZXJcIixcbiAgICAgIHBhcnNlck9wdGlvbnM6IHtcbiAgICAgICAgZWNtYVZlcnNpb246IDIwMTgsXG4gICAgICAgIHNvdXJjZVR5cGU6IFwibW9kdWxlXCIsXG4gICAgICAgIC8vIEVpdGhlciBsZXQgdHlwZXNjcmlwdC1lc2xpbnQgcmVzb2x2ZSB0aGUgbmVhcmVzdCB0c2NvbmZpZyBwZXIgZmlsZVxuICAgICAgICAvLyAocHJvamVjdCBzZXJ2aWNlKSwgb3IgcGluIGFsbCBmaWxlcyB0byBhIHNpbmdsZSBwcm9qZWN0LlxuICAgICAgICAuLi4ocHJvamVjdFNlcnZpY2VcbiAgICAgICAgICA/IHsgcHJvamVjdFNlcnZpY2U6ICgpID0+IHRoaXMucmVuZGVyUHJvamVjdFNlcnZpY2UodHNjb25maWcpIH1cbiAgICAgICAgICA6IHsgcHJvamVjdDogdHNjb25maWcgfSksXG4gICAgICB9LFxuICAgICAgZXh0ZW5kczogKCkgPT5cbiAgICAgICAgQXJyYXkuZnJvbSh0aGlzLl9leHRlbmRzKS5zb3J0KChhLCBiKSA9PlxuICAgICAgICAgIHRoaXMuc29ydEV4dGVuZHMuY29tcGFyZShhLCBiKSxcbiAgICAgICAgKSxcbiAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgIFwiaW1wb3J0L3BhcnNlcnNcIjoge1xuICAgICAgICAgIFwiQHR5cGVzY3JpcHQtZXNsaW50L3BhcnNlclwiOiBbXCIudHNcIiwgXCIudHN4XCJdLFxuICAgICAgICB9LFxuICAgICAgICBcImltcG9ydC9yZXNvbHZlclwiOiB7XG4gICAgICAgICAgLi4uKG9wdGlvbnMuYWxpYXNNYXAgJiYge1xuICAgICAgICAgICAgYWxpYXM6IHtcbiAgICAgICAgICAgICAgbWFwOiBPYmplY3QuZW50cmllcyhvcHRpb25zLmFsaWFzTWFwKS5tYXAoKFtrLCB2XSkgPT4gW2ssIHZdKSxcbiAgICAgICAgICAgICAgZXh0ZW5zaW9uczogb3B0aW9ucy5hbGlhc0V4dGVuc2lvbnMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG5vZGU6IHt9LFxuICAgICAgICAgIHR5cGVzY3JpcHQ6IHtcbiAgICAgICAgICAgIHByb2plY3Q6IHRzY29uZmlnLFxuICAgICAgICAgICAgLi4uKG9wdGlvbnMudHNBbHdheXNUcnlUeXBlcyAhPT0gZmFsc2UgJiYgeyBhbHdheXNUcnlUeXBlczogdHJ1ZSB9KSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGlnbm9yZVBhdHRlcm5zOiB0aGlzLmlnbm9yZVBhdHRlcm5zLFxuICAgICAgcnVsZXM6ICgpID0+ICh7IC4uLnRoaXMuX2Zvcm1hdHRpbmdSdWxlcywgLi4udGhpcy5ydWxlcyB9KSxcbiAgICAgIG92ZXJyaWRlczogdGhpcy5vdmVycmlkZXMsXG4gICAgfTtcblxuICAgIGlmIChvcHRpb25zLnlhbWwpIHtcbiAgICAgIHRoaXMuZmlsZSA9IG5ldyBZYW1sRmlsZShwcm9qZWN0LCBcIi5lc2xpbnRyYy55bWxcIiwge1xuICAgICAgICBvYmo6IHRoaXMuY29uZmlnLFxuICAgICAgICBtYXJrZXI6IHRydWUsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWxlID0gbmV3IEpzb25GaWxlKHByb2plY3QsIFwiLmVzbGludHJjLmpzb25cIiwge1xuICAgICAgICBvYmo6IHRoaXMuY29uZmlnLFxuICAgICAgICAvLyBodHRwczovL2VzbGludC5vcmcvZG9jcy9sYXRlc3QvdXNlci1ndWlkZS9jb25maWd1cmluZy9jb25maWd1cmF0aW9uLWZpbGVzI2NvbW1lbnRzLWluLWNvbmZpZ3VyYXRpb24tZmlsZXNcbiAgICAgICAgbWFya2VyOiB0cnVlLFxuICAgICAgICBhbGxvd0NvbW1lbnRzOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHVzZXIgZW5hYmxlZCBwcmV0dGllciBleHBsaWNpdGx5IF9vcl8gaWYgdGhlIHByb2plY3QgaGFzIGFcbiAgICAvLyBgUHJldHRpZXJgIGNvbXBvbmVudCwgd2Ugc2hhbGwgdHdlYWsgb3VyIGNvbmZpZ3VyYXRpb24gYWNjb3JkaW5nbHkuXG4gICAgaWYgKG9wdGlvbnMucHJldHRpZXIgfHwgUHJldHRpZXIub2YocHJvamVjdCkpIHtcbiAgICAgIHRoaXMuZW5hYmxlUHJldHRpZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ub2RlUHJvamVjdC5hZGREZXZEZXBzKFwiQHN0eWxpc3RpYy9lc2xpbnQtcGx1Z2luQF4yXCIpO1xuICAgICAgdGhpcy5hZGRQbHVnaW5zKFwiQHN0eWxpc3RpY1wiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBpbW11dGFibGUgY29weSBvZiB0aGUgbGludFBhdHRlcm5zIGJlaW5nIHVzZWQgYnkgdGhpcyBlc2xpbnQgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgbGludFBhdHRlcm5zKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAodGhpcy5fbGludFBhdHRlcm5zICYmIHRoaXMuX2xpbnRQYXR0ZXJucy5zaXplID4gMCkge1xuICAgICAgcmV0dXJuIFsuLi50aGlzLl9saW50UGF0dGVybnNdO1xuICAgIH1cblxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBmaWxlLCBnbG9iIHBhdHRlcm4gb3IgZGlyZWN0b3J5IHdpdGggc291cmNlIGZpbGVzIHRvIGxpbnQgKGUuZy4gWyBcInNyY1wiIF0pXG4gICAqL1xuICBwdWJsaWMgYWRkTGludFBhdHRlcm4ocGF0dGVybjogc3RyaW5nKSB7XG4gICAgdGhpcy5fbGludFBhdHRlcm5zLmFkZChwYXR0ZXJuKTtcbiAgICB0aGlzLnVwZGF0ZVRhc2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gZXNsaW50IHJ1bGUuXG4gICAqL1xuICBwdWJsaWMgYWRkUnVsZXMocnVsZXM6IHsgW3J1bGU6IHN0cmluZ106IGFueSB9KSB7XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMocnVsZXMpKSB7XG4gICAgICB0aGlzLnJ1bGVzW2tdID0gdjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBlc2xpbnQgcGx1Z2luXG4gICAqIEBwYXJhbSBwbHVnaW5zIFRoZSBuYW1lcyBvZiBwbHVnaW5zIHRvIGFkZFxuICAgKi9cbiAgcHVibGljIGFkZFBsdWdpbnMoLi4ucGx1Z2luczogc3RyaW5nW10pIHtcbiAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiBwbHVnaW5zKSB7XG4gICAgICB0aGlzLl9wbHVnaW5zLmFkZChwbHVnaW4pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gZXNsaW50IG92ZXJyaWRlLlxuICAgKi9cbiAgcHVibGljIGFkZE92ZXJyaWRlKG92ZXJyaWRlOiBFc2xpbnRPdmVycmlkZSkge1xuICAgIHRoaXMub3ZlcnJpZGVzLnB1c2gob3ZlcnJpZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIERvIG5vdCBsaW50IHRoZXNlIGZpbGVzLlxuICAgKi9cbiAgcHVibGljIGFkZElnbm9yZVBhdHRlcm4ocGF0dGVybjogc3RyaW5nKSB7XG4gICAgdGhpcy5pZ25vcmVQYXR0ZXJucy5wdXNoKHBhdHRlcm4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gYGV4dGVuZHNgIGl0ZW0gdG8gdGhlIGVzbGludCBjb25maWd1cmF0aW9uLlxuICAgKiBAcGFyYW0gZXh0ZW5kTGlzdCBUaGUgbGlzdCBvZiBcImV4dGVuZHNcIiB0byBhZGQuXG4gICAqL1xuICBwdWJsaWMgYWRkRXh0ZW5kcyguLi5leHRlbmRMaXN0OiBzdHJpbmdbXSkge1xuICAgIGZvciAoY29uc3QgZXh0ZW5kIG9mIGV4dGVuZExpc3QpIHtcbiAgICAgIHRoaXMuX2V4dGVuZHMuYWRkKGV4dGVuZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGdsb2IgZmlsZSBwYXR0ZXJuIHdoaWNoIGFsbG93cyBpbXBvcnRpbmcgZGV2IGRlcGVuZGVuY2llcy5cbiAgICogQHBhcmFtIHBhdHRlcm4gZ2xvYiBwYXR0ZXJuLlxuICAgKi9cbiAgcHVibGljIGFsbG93RGV2RGVwcyhwYXR0ZXJuOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9hbGxvd0RldkRlcHMuYWRkKHBhdHRlcm4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IGZpbGVzIG1hdGNoaW5nIHRoZXNlIHBhdHRlcm5zIHRvIGJlIGxpbnRlZCB3aXRoIHRoZSB0eXBlc2NyaXB0LWVzbGludFxuICAgKiBcImRlZmF1bHQgcHJvamVjdFwiIHdoZW4gdGhleSBhcmUgbm90IGluY2x1ZGVkIGJ5IGFueSBgdHNjb25maWcuanNvbmAuXG4gICAqXG4gICAqIE9ubHkgaGFzIGFuIGVmZmVjdCB3aGVuIHRoZSBwcm9qZWN0IHNlcnZpY2UgaXMgZW5hYmxlZCAoc2VlXG4gICAqIGBFc2xpbnRPcHRpb25zLnByb2plY3RTZXJ2aWNlYCkuIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIGxvb3NlIGZpbGVzXG4gICAqIHRoYXQgbGl2ZSBvdXRzaWRlIGBzcmNgL2B0ZXN0YCAoZS5nLiBgLnByb2plbnJjLnRzYCkuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly90eXBlc2NyaXB0LWVzbGludC5pby9wYWNrYWdlcy9wYXJzZXIvI2FsbG93ZGVmYXVsdHByb2plY3RcbiAgICogQHBhcmFtIHBhdHRlcm5zIGdsb2IgcGF0dGVybnMsIHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IHJvb3QuXG4gICAqL1xuICBwdWJsaWMgYWxsb3dEZWZhdWx0UHJvamVjdEZpbGVzKC4uLnBhdHRlcm5zOiBzdHJpbmdbXSkge1xuICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBwYXR0ZXJucykge1xuICAgICAgdGhpcy5fYWxsb3dEZWZhdWx0UHJvamVjdC5hZGQocGF0dGVybik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgdmFsdWUgb2YgYHBhcnNlck9wdGlvbnMucHJvamVjdFNlcnZpY2VgLiBXaGVuIGxvb3NlIGZpbGVzIGhhdmVcbiAgICogYmVlbiByZWdpc3RlcmVkIHZpYSBgYWxsb3dEZWZhdWx0UHJvamVjdEZpbGVzYCwgYW4gb3B0aW9ucyBvYmplY3QgaXNcbiAgICogZW1pdHRlZDsgb3RoZXJ3aXNlIHRoZSBwbGFpbiBgdHJ1ZWAgc2hvcnRoYW5kIGlzIHVzZWQuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJQcm9qZWN0U2VydmljZShkZWZhdWx0UHJvamVjdDogc3RyaW5nKTogYm9vbGVhbiB8IG9iamVjdCB7XG4gICAgaWYgKHRoaXMuX2FsbG93RGVmYXVsdFByb2plY3Quc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBhbGxvd0RlZmF1bHRQcm9qZWN0OiBBcnJheS5mcm9tKHRoaXMuX2FsbG93RGVmYXVsdFByb2plY3QpLFxuICAgICAgZGVmYXVsdFByb2plY3QsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIHByZXR0aWVyIGZvciBjb2RlIGZvcm1hdHRpbmcuXG4gICAqL1xuICBwcml2YXRlIGVuYWJsZVByZXR0aWVyKCkge1xuICAgIHRoaXMubm9kZVByb2plY3QuYWRkRGV2RGVwcyhcbiAgICAgIFwicHJldHRpZXJcIixcbiAgICAgIFwiZXNsaW50LXBsdWdpbi1wcmV0dGllclwiLFxuICAgICAgXCJlc2xpbnQtY29uZmlnLXByZXR0aWVyXCIsXG4gICAgKTtcblxuICAgIHRoaXMuX2Zvcm1hdHRpbmdSdWxlcyA9IHt9O1xuXG4gICAgdGhpcy5hZGRFeHRlbmRzKFwicGx1Z2luOnByZXR0aWVyL3JlY29tbWVuZGVkXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJEZXZEZXBzQWxsb3dMaXN0KCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuX2FsbG93RGV2RGVwcyk7XG4gIH1cblxuICAvKipcbiAgICogUnVucyBlc2xpbnQgb25jZSwgcmlnaHQgYWZ0ZXIgdGhlIHByb2plY3QgaXMgZmlyc3QgY3JlYXRlZCwgc28gdGhlIGdlbmVyYXRlZCBjb2RlIGlzIGxpbnRlZCAoYW5kIGF1dG8tZml4ZWQpIGltbWVkaWF0ZWx5LlxuICAgKi9cbiAgcHVibGljIHBvc3RQcm9qZWN0Q3JlYXRpb24oX2luaXRQcm9qZWN0OiBJbml0UHJvamVjdCkge1xuICAgIHRoaXMubm9kZVByb2plY3QudGFza3MucnVuVGFzayh0aGlzLmVzbGludFRhc2submFtZSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSB0YXNrIHdpdGggdGhlIGN1cnJlbnQgbGlzdCBvZiBsaW50IHBhdHRlcm5zIGFuZCBmaWxlIGV4dGVuc2lvbnNcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlVGFzaygpIHtcbiAgICBjb25zdCB0YXNrRXhlY0NvbW1hbmQgPSBcImVzbGludFwiO1xuICAgIGNvbnN0IGFyZ3NTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBpZiAodGhpcy5fZmlsZUV4dGVuc2lvbnMuc2l6ZSA+IDApIHtcbiAgICAgIGFyZ3NTZXQuYWRkKGAtLWV4dCAke1suLi50aGlzLl9maWxlRXh0ZW5zaW9uc10uam9pbihcIixcIil9YCk7XG4gICAgfVxuICAgIGFyZ3NTZXQuYWRkKGAke1suLi50aGlzLl9mbGFnQXJnc10uam9pbihcIiBcIil9YCk7XG4gICAgYXJnc1NldC5hZGQoXCIkQFwiKTsgLy8gRXh0ZXJuYWwgYXJncyBnbyBoZXJlXG5cbiAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgdGhpcy5fbGludFBhdHRlcm5zKSB7XG4gICAgICBhcmdzU2V0LmFkZChwYXR0ZXJuKTtcbiAgICB9XG5cbiAgICB0aGlzLmVzbGludFRhc2sucmVzZXQoXG4gICAgICBbdGFza0V4ZWNDb21tYW5kLCAuLi5hcmdzU2V0XS5qb2luKFwiIFwiKSxcbiAgICAgIHRoaXMuYnVpbGRUYXNrU3RlcE9wdGlvbnModGFza0V4ZWNDb21tYW5kKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIGNhc2Ugb2YgZXh0ZXJuYWwgZWRpdGluZyBvZiB0aGUgZXNsaW50IHRhc2sgc3RlcCwgd2UgcHJlc2VydmUgdGhvc2UgY2hhbmdlcy5cbiAgICogT3RoZXJ3aXNlLCB3ZSByZXR1cm4gdGhlIGRlZmF1bHQgdGFzayBzdGVwIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB0YXNrRXhlY0NvbW1hbmQgVGhlIGNvbW1hbmQgdGhhdCB0aGUgRVNMaW50IHRhc2tzIGV4ZWN1dGVzXG4gICAqIEByZXR1cm5zIEVpdGhlciB0aGUgZXh0ZXJuYWxseSBlZGl0ZWQsIG9yIHRoZSBkZWZhdWx0IHRhc2sgc3RlcCBvcHRpb25zXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkVGFza1N0ZXBPcHRpb25zKHRhc2tFeGVjQ29tbWFuZDogc3RyaW5nKTogVGFza1N0ZXBPcHRpb25zIHtcbiAgICBjb25zdCBjdXJyZW50RXNsaW50VGFza1N0ZXAgPSB0aGlzLmVzbGludFRhc2s/LnN0ZXBzPy5maW5kKChzdGVwKSA9PlxuICAgICAgc3RlcD8uZXhlYz8uc3RhcnRzV2l0aD8uKHRhc2tFeGVjQ29tbWFuZCksXG4gICAgKTtcblxuICAgIGlmIChjdXJyZW50RXNsaW50VGFza1N0ZXApIHtcbiAgICAgIGNvbnN0IHsgYXJncywgY29uZGl0aW9uLCBjd2QsIGVudiwgbmFtZSwgcmVjZWl2ZUFyZ3MgfSA9XG4gICAgICAgIGN1cnJlbnRFc2xpbnRUYXNrU3RlcDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFyZ3MsXG4gICAgICAgIGNvbmRpdGlvbixcbiAgICAgICAgY3dkLFxuICAgICAgICBlbnYsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHJlY2VpdmVBcmdzLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVjZWl2ZUFyZ3M6IHRydWUsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEEgY29tcGFyZSBwcm90b2NvbCB0cCBzb3J0IHRoZSBleHRlbmRzIGFycmF5IGluIGVzbGludCBjb25maWcgdXNpbmcga25vd24gRVNMaW50IGJlc3QgcHJhY3RpY2VzLlxuICpcbiAqIFBsYWNlcyBcInByZXR0aWVyXCIgcGx1Z2lucyBhdCB0aGUgZW5kIG9mIHRoZSBhcnJheVxuICovXG5jbGFzcyBFeHRlbmRzRGVmYXVsdE9yZGVyIGltcGxlbWVudHMgSUNvbXBhcmVTdHJpbmcge1xuICAvLyBUaGlzIGlzIHRoZSBvcmRlciB0aGF0IEVTTGludCBiZXN0IHByYWN0aWNlcyBzdWdnZXN0XG4gIHByaXZhdGUgc3RhdGljIE9SREVSID0gW1wicGx1Z2luOnByZXR0aWVyL3JlY29tbWVuZGVkXCIsIFwicHJldHRpZXJcIl07XG5cbiAgcHVibGljIGNvbXBhcmUoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiAoXG4gICAgICBFeHRlbmRzRGVmYXVsdE9yZGVyLk9SREVSLmluZGV4T2YoYSkgLVxuICAgICAgRXh0ZW5kc0RlZmF1bHRPcmRlci5PUkRFUi5pbmRleE9mKGIpXG4gICAgKTtcbiAgfVxufVxuIl19
|
package/lib/javascript/jest.js
CHANGED
|
@@ -45,7 +45,7 @@ const DEFAULT_TEST_REPORTS_DIR = "test-reports";
|
|
|
45
45
|
class Transform {
|
|
46
46
|
name;
|
|
47
47
|
options;
|
|
48
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Transform", version: "0.101.
|
|
48
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Transform", version: "0.101.9" };
|
|
49
49
|
constructor(name, options) {
|
|
50
50
|
this.name = name;
|
|
51
51
|
this.options = options;
|
|
@@ -65,7 +65,7 @@ exports.Transform = Transform;
|
|
|
65
65
|
class WatchPlugin {
|
|
66
66
|
name;
|
|
67
67
|
options;
|
|
68
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.WatchPlugin", version: "0.101.
|
|
68
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.WatchPlugin", version: "0.101.9" };
|
|
69
69
|
constructor(name, options) {
|
|
70
70
|
this.name = name;
|
|
71
71
|
this.options = options;
|
|
@@ -96,7 +96,7 @@ var UpdateSnapshot;
|
|
|
96
96
|
class JestReporter {
|
|
97
97
|
name;
|
|
98
98
|
options;
|
|
99
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.JestReporter", version: "0.101.
|
|
99
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.JestReporter", version: "0.101.9" };
|
|
100
100
|
constructor(name, options) {
|
|
101
101
|
this.name = name;
|
|
102
102
|
this.options = options;
|
|
@@ -122,7 +122,7 @@ exports.JestReporter = JestReporter;
|
|
|
122
122
|
*
|
|
123
123
|
*/
|
|
124
124
|
class Jest extends component_1.Component {
|
|
125
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Jest", version: "0.101.
|
|
125
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Jest", version: "0.101.9" };
|
|
126
126
|
/**
|
|
127
127
|
* Returns the singleton Jest component of a project or undefined if there is none.
|
|
128
128
|
*/
|
|
@@ -8,7 +8,7 @@ const dependencies_1 = require("../dependencies");
|
|
|
8
8
|
* Enforces allowed licenses used by dependencies.
|
|
9
9
|
*/
|
|
10
10
|
class LicenseChecker extends component_1.Component {
|
|
11
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.LicenseChecker", version: "0.101.
|
|
11
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.LicenseChecker", version: "0.101.9" };
|
|
12
12
|
task;
|
|
13
13
|
constructor(scope, options) {
|
|
14
14
|
const taskName = options.taskName ?? "check-licenses";
|
|
@@ -77,7 +77,7 @@ var CodeArtifactAuthProvider;
|
|
|
77
77
|
* Represents the npm `package.json` file.
|
|
78
78
|
*/
|
|
79
79
|
class NodePackage extends component_1.Component {
|
|
80
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.NodePackage", version: "0.101.
|
|
80
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.NodePackage", version: "0.101.9" };
|
|
81
81
|
/**
|
|
82
82
|
* Returns the `NodePackage` instance associated with a project or `undefined` if
|
|
83
83
|
* there is no NodePackage.
|
|
@@ -81,7 +81,7 @@ var AutoRelease;
|
|
|
81
81
|
* @pjid node
|
|
82
82
|
*/
|
|
83
83
|
class NodeProject extends github_1.GitHubProject {
|
|
84
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.NodeProject", version: "0.101.
|
|
84
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.NodeProject", version: "0.101.9" };
|
|
85
85
|
/**
|
|
86
86
|
* API for managing the node package.
|
|
87
87
|
*/
|
|
@@ -8,7 +8,7 @@ const ini_1 = require("../ini");
|
|
|
8
8
|
* File representing the local NPM config in .npmrc
|
|
9
9
|
*/
|
|
10
10
|
class NpmConfig extends component_1.Component {
|
|
11
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.NpmConfig", version: "0.101.
|
|
11
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.NpmConfig", version: "0.101.9" };
|
|
12
12
|
/**
|
|
13
13
|
* The config object. This object can be mutated until the project is
|
|
14
14
|
* synthesized.
|
|
@@ -358,7 +358,7 @@ var PnpmWorkspaceYamlSchemaReporter;
|
|
|
358
358
|
*/
|
|
359
359
|
class PnpmWorkspaceYamlSchemaLinkWorkspacePackages {
|
|
360
360
|
value;
|
|
361
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.PnpmWorkspaceYamlSchemaLinkWorkspacePackages", version: "0.101.
|
|
361
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.PnpmWorkspaceYamlSchemaLinkWorkspacePackages", version: "0.101.9" };
|
|
362
362
|
static fromBoolean(value) {
|
|
363
363
|
return new PnpmWorkspaceYamlSchemaLinkWorkspacePackages(value);
|
|
364
364
|
}
|
|
@@ -377,7 +377,7 @@ exports.PnpmWorkspaceYamlSchemaLinkWorkspacePackages = PnpmWorkspaceYamlSchemaLi
|
|
|
377
377
|
*/
|
|
378
378
|
class PnpmWorkspaceYamlSchemaSaveWorkspaceProtocol {
|
|
379
379
|
value;
|
|
380
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.PnpmWorkspaceYamlSchemaSaveWorkspaceProtocol", version: "0.101.
|
|
380
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.PnpmWorkspaceYamlSchemaSaveWorkspaceProtocol", version: "0.101.9" };
|
|
381
381
|
static fromBoolean(value) {
|
|
382
382
|
return new PnpmWorkspaceYamlSchemaSaveWorkspaceProtocol(value);
|
|
383
383
|
}
|
|
@@ -11,7 +11,7 @@ const pnpm_workspace_config_1 = require("./pnpm-workspace-config");
|
|
|
11
11
|
* @see https://pnpm.io/pnpm-workspace_yaml
|
|
12
12
|
*/
|
|
13
13
|
class PnpmWorkspaceYaml extends component_1.Component {
|
|
14
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.PnpmWorkspaceYaml", version: "0.101.
|
|
14
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.PnpmWorkspaceYaml", version: "0.101.9" };
|
|
15
15
|
/**
|
|
16
16
|
* Returns the `PnpmWorkspaceYaml` instance associated with a project or
|
|
17
17
|
* `undefined` if there is none.
|
|
@@ -113,7 +113,7 @@ var TrailingComma;
|
|
|
113
113
|
* Represents prettier configuration.
|
|
114
114
|
*/
|
|
115
115
|
class Prettier extends component_1.Component {
|
|
116
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Prettier", version: "0.101.
|
|
116
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Prettier", version: "0.101.9" };
|
|
117
117
|
static of(project) {
|
|
118
118
|
const isPrettier = (c) => c instanceof Prettier;
|
|
119
119
|
return project.components.find(isPrettier);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Project } from "../project";
|
|
1
|
+
import type { InitProject, Project } from "../project";
|
|
2
2
|
import { ProjenrcFile } from "../projenrc";
|
|
3
3
|
export interface ProjenrcOptions {
|
|
4
4
|
/**
|
|
@@ -17,5 +17,6 @@ export declare class Projenrc extends ProjenrcFile {
|
|
|
17
17
|
readonly filePath: string;
|
|
18
18
|
constructor(project: Project, options?: ProjenrcOptions);
|
|
19
19
|
preSynthesize(): void;
|
|
20
|
+
projectCreation(initProject: InitProject): void;
|
|
20
21
|
private generateProjenrc;
|
|
21
22
|
}
|
|
@@ -16,14 +16,13 @@ const biome_1 = require("./biome/biome");
|
|
|
16
16
|
* and has no expectations around the project's main language.
|
|
17
17
|
*/
|
|
18
18
|
class Projenrc extends projenrc_1.ProjenrcFile {
|
|
19
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Projenrc", version: "0.101.
|
|
19
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Projenrc", version: "0.101.9" };
|
|
20
20
|
filePath;
|
|
21
21
|
constructor(project, options = {}) {
|
|
22
22
|
super(project);
|
|
23
23
|
this.filePath = options.filename ?? common_1.DEFAULT_PROJEN_RC_JS_FILENAME;
|
|
24
24
|
// this is the task projen executes when running `projen`
|
|
25
25
|
project.defaultTask?.execArgs(["node", this.filePath]);
|
|
26
|
-
this.generateProjenrc();
|
|
27
26
|
}
|
|
28
27
|
preSynthesize() {
|
|
29
28
|
super.preSynthesize();
|
|
@@ -40,15 +39,14 @@ class Projenrc extends projenrc_1.ProjenrcFile {
|
|
|
40
39
|
const biome = biome_1.Biome.of(this.project);
|
|
41
40
|
biome?.addFilePattern(this.filePath);
|
|
42
41
|
}
|
|
43
|
-
|
|
42
|
+
projectCreation(initProject) {
|
|
43
|
+
this.generateProjenrc(initProject);
|
|
44
|
+
}
|
|
45
|
+
generateProjenrc(bootstrap) {
|
|
44
46
|
const rcfile = (0, path_1.resolve)(this.project.outdir, this.filePath);
|
|
45
47
|
if ((0, fs_1.existsSync)(rcfile)) {
|
|
46
48
|
return; // already exists
|
|
47
49
|
}
|
|
48
|
-
const bootstrap = this.project.initProject;
|
|
49
|
-
if (!bootstrap) {
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
50
|
const parts = bootstrap.fqn.split(".");
|
|
53
51
|
const moduleName = parts[0];
|
|
54
52
|
const importName = parts[1];
|
|
@@ -71,4 +69,4 @@ class Projenrc extends projenrc_1.ProjenrcFile {
|
|
|
71
69
|
}
|
|
72
70
|
}
|
|
73
71
|
exports.Projenrc = Projenrc;
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVucmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvamF2YXNjcmlwdC9wcm9qZW5yYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsMkJBQTBEO0FBQzFELCtCQUF3QztBQUN4QyxxQ0FBa0M7QUFDbEMscURBQTJEO0FBQzNELHNDQUEwRDtBQUcxRCwwQ0FBMkM7QUFDM0MseUNBQXNDO0FBVXRDOzs7OztHQUtHO0FBQ0gsTUFBYSxRQUFTLFNBQVEsdUJBQVk7O0lBQ3hCLFFBQVEsQ0FBUztJQUVqQyxZQUFZLE9BQWdCLEVBQUUsVUFBMkIsRUFBRTtRQUN6RCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFZixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLElBQUksc0NBQTZCLENBQUM7UUFFbEUseURBQXlEO1FBQ3pELE9BQU8sQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFZSxhQUFhO1FBQzNCLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUV0QixNQUFNLE1BQU0sR0FBRyxlQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxNQUFNLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0QyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM5QyxNQUFNLEVBQUUsV0FBVyxDQUFDO1lBQ2xCLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDdEIsS0FBSyxFQUFFO2dCQUNMLHVDQUF1QyxFQUFFLEtBQUs7Z0JBQzlDLG1DQUFtQyxFQUFFLEtBQUs7YUFDM0M7U0FDRixDQUFDLENBQUM7UUFFSCxNQUFNLEtBQUssR0FBRyxhQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQyxLQUFLLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU0sZUFBZSxDQUFDLFdBQXdCO1FBQzdDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsU0FBc0I7UUFDN0MsTUFBTSxNQUFNLEdBQUcsSUFBQSxjQUFPLEVBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNELElBQUksSUFBQSxlQUFVLEVBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUN2QixPQUFPLENBQUMsaUJBQWlCO1FBQzNCLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTNDLE1BQU0sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBQSx3Q0FBdUIsRUFBQztZQUMzRCxRQUFRLEVBQUUsU0FBUyxDQUFDLFFBQVE7WUFDNUIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1lBQ3BCLElBQUksRUFBRSxTQUFTLENBQUMsSUFBNEI7U0FDN0MsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFcEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQztRQUNsQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDdEMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2IsS0FBSyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsU0FBUyxJQUFJLGVBQWUsSUFBSSxDQUFDLENBQUM7UUFDcEUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2IsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRS9CLElBQUEsY0FBUyxFQUFDLElBQUEsY0FBTyxFQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDaEQsSUFBQSxrQkFBYSxFQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUN0QiwwQ0FBMEMsTUFBTSxFQUFFLENBQ25ELENBQUM7SUFDSixDQUFDOztBQWpFSCw0QkFrRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGlzdHNTeW5jLCBta2RpclN5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IGRpcm5hbWUsIHJlc29sdmUgfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgRXNsaW50IH0gZnJvbSBcIi4vZXNsaW50XCI7XG5pbXBvcnQgeyByZW5kZXJKYXZhU2NyaXB0T3B0aW9ucyB9IGZyb20gXCIuL3JlbmRlci1vcHRpb25zXCI7XG5pbXBvcnQgeyBERUZBVUxUX1BST0pFTl9SQ19KU19GSUxFTkFNRSB9IGZyb20gXCIuLi9jb21tb25cIjtcbmltcG9ydCB0eXBlIHsgSW52ZW50b3J5UHJvamVjdFR5cGUgfSBmcm9tIFwiLi4vaW52ZW50b3J5XCI7XG5pbXBvcnQgdHlwZSB7IEluaXRQcm9qZWN0LCBQcm9qZWN0IH0gZnJvbSBcIi4uL3Byb2plY3RcIjtcbmltcG9ydCB7IFByb2plbnJjRmlsZSB9IGZyb20gXCIuLi9wcm9qZW5yY1wiO1xuaW1wb3J0IHsgQmlvbWUgfSBmcm9tIFwiLi9iaW9tZS9iaW9tZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFByb2plbnJjT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcHJvamVucmMgZmlsZS5cbiAgICogQGRlZmF1bHQgXCIucHJvamVucmMuanNcIlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZW5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBwcm9qZW5yYyBmaWxlIHdyaXR0ZW4gaW4gSmF2YVNjcmlwdFxuICpcbiAqIFRoaXMgY29tcG9uZW50IGNhbiBiZSBpbnN0YW50aWF0ZWQgaW4gYW55IHR5cGUgb2YgcHJvamVjdFxuICogYW5kIGhhcyBubyBleHBlY3RhdGlvbnMgYXJvdW5kIHRoZSBwcm9qZWN0J3MgbWFpbiBsYW5ndWFnZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFByb2plbnJjIGV4dGVuZHMgUHJvamVucmNGaWxlIHtcbiAgcHVibGljIHJlYWRvbmx5IGZpbGVQYXRoOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgb3B0aW9uczogUHJvamVucmNPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIHRoaXMuZmlsZVBhdGggPSBvcHRpb25zLmZpbGVuYW1lID8/IERFRkFVTFRfUFJPSkVOX1JDX0pTX0ZJTEVOQU1FO1xuXG4gICAgLy8gdGhpcyBpcyB0aGUgdGFzayBwcm9qZW4gZXhlY3V0ZXMgd2hlbiBydW5uaW5nIGBwcm9qZW5gXG4gICAgcHJvamVjdC5kZWZhdWx0VGFzaz8uZXhlY0FyZ3MoW1wibm9kZVwiLCB0aGlzLmZpbGVQYXRoXSk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgcHJlU3ludGhlc2l6ZSgpOiB2b2lkIHtcbiAgICBzdXBlci5wcmVTeW50aGVzaXplKCk7XG5cbiAgICBjb25zdCBlc2xpbnQgPSBFc2xpbnQub2YodGhpcy5wcm9qZWN0KTtcbiAgICBlc2xpbnQ/LmFkZExpbnRQYXR0ZXJuKHRoaXMuZmlsZVBhdGgpO1xuICAgIGVzbGludD8uYWRkSWdub3JlUGF0dGVybihgISR7dGhpcy5maWxlUGF0aH1gKTtcbiAgICBlc2xpbnQ/LmFkZE92ZXJyaWRlKHtcbiAgICAgIGZpbGVzOiBbdGhpcy5maWxlUGF0aF0sXG4gICAgICBydWxlczoge1xuICAgICAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcIjogXCJvZmZcIixcbiAgICAgICAgXCJpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcIjogXCJvZmZcIixcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBiaW9tZSA9IEJpb21lLm9mKHRoaXMucHJvamVjdCk7XG4gICAgYmlvbWU/LmFkZEZpbGVQYXR0ZXJuKHRoaXMuZmlsZVBhdGgpO1xuICB9XG5cbiAgcHVibGljIHByb2plY3RDcmVhdGlvbihpbml0UHJvamVjdDogSW5pdFByb2plY3QpIHtcbiAgICB0aGlzLmdlbmVyYXRlUHJvamVucmMoaW5pdFByb2plY3QpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZVByb2plbnJjKGJvb3RzdHJhcDogSW5pdFByb2plY3QpIHtcbiAgICBjb25zdCByY2ZpbGUgPSByZXNvbHZlKHRoaXMucHJvamVjdC5vdXRkaXIsIHRoaXMuZmlsZVBhdGgpO1xuICAgIGlmIChleGlzdHNTeW5jKHJjZmlsZSkpIHtcbiAgICAgIHJldHVybjsgLy8gYWxyZWFkeSBleGlzdHNcbiAgICB9XG5cbiAgICBjb25zdCBwYXJ0cyA9IGJvb3RzdHJhcC5mcW4uc3BsaXQoXCIuXCIpO1xuICAgIGNvbnN0IG1vZHVsZU5hbWUgPSBwYXJ0c1swXTtcbiAgICBjb25zdCBpbXBvcnROYW1lID0gcGFydHNbMV07XG4gICAgY29uc3QgY2xhc3NOYW1lID0gcGFydHMuc2xpY2UoMSkuam9pbihcIi5cIik7XG5cbiAgICBjb25zdCB7IHJlbmRlcmVkT3B0aW9ucywgaW1wb3J0cyB9ID0gcmVuZGVySmF2YVNjcmlwdE9wdGlvbnMoe1xuICAgICAgY29tbWVudHM6IGJvb3RzdHJhcC5jb21tZW50cyxcbiAgICAgIGFyZ3M6IGJvb3RzdHJhcC5hcmdzLFxuICAgICAgdHlwZTogYm9vdHN0cmFwLnR5cGUgYXMgSW52ZW50b3J5UHJvamVjdFR5cGUsXG4gICAgfSk7XG5cbiAgICBpbXBvcnRzLmFkZChtb2R1bGVOYW1lLCBpbXBvcnROYW1lKTtcblxuICAgIGNvbnN0IGxpbmVzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBsaW5lcy5wdXNoKC4uLmltcG9ydHMuYXNDanNSZXF1aXJlKCkpO1xuICAgIGxpbmVzLnB1c2goKTtcbiAgICBsaW5lcy5wdXNoKGBjb25zdCBwcm9qZWN0ID0gbmV3ICR7Y2xhc3NOYW1lfSgke3JlbmRlcmVkT3B0aW9uc30pO2ApO1xuICAgIGxpbmVzLnB1c2goKTtcbiAgICBsaW5lcy5wdXNoKFwicHJvamVjdC5zeW50aCgpO1wiKTtcblxuICAgIG1rZGlyU3luYyhkaXJuYW1lKHJjZmlsZSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIHdyaXRlRmlsZVN5bmMocmNmaWxlLCBsaW5lcy5qb2luKFwiXFxuXCIpKTtcbiAgICB0aGlzLnByb2plY3QubG9nZ2VyLmluZm8oXG4gICAgICBgUHJvamVjdCBkZWZpbml0aW9uIGZpbGUgd2FzIGNyZWF0ZWQgYXQgJHtyY2ZpbGV9YCxcbiAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -31,6 +31,18 @@ export interface RenderProjectOptions {
|
|
|
31
31
|
* @default - none
|
|
32
32
|
*/
|
|
33
33
|
readonly omitFromBootstrap?: string[];
|
|
34
|
+
/**
|
|
35
|
+
* Whether `projen new` will call `project.synth()` after construction.
|
|
36
|
+
* Embedded in the `__new__` field so `Project.synth()` can detect `--no-synth`.
|
|
37
|
+
* @default true
|
|
38
|
+
*/
|
|
39
|
+
readonly synth?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Whether `projen new` will run post-synthesis steps (e.g. package manager install).
|
|
42
|
+
* Embedded in the `__new__` field for components that need to know.
|
|
43
|
+
* @default true
|
|
44
|
+
*/
|
|
45
|
+
readonly post?: boolean;
|
|
34
46
|
/**
|
|
35
47
|
* Prefix all imports with this string and the full module name
|
|
36
48
|
* This is required when executing options code in a vm
|
|
@@ -42,12 +54,14 @@ export interface RenderProjectOptions {
|
|
|
42
54
|
/**
|
|
43
55
|
* Renders options as if the project was created via `projen new` (embeds the __new__ field).
|
|
44
56
|
*/
|
|
45
|
-
export declare function renderProjenInitOptions(fqn: string, args: Record<string, any>, comments?: InitProjectOptionHints): any;
|
|
57
|
+
export declare function renderProjenInitOptions(fqn: string, args: Record<string, any>, comments?: InitProjectOptionHints, synth?: boolean, post?: boolean): any;
|
|
46
58
|
export declare function resolveInitProject(opts: any): {
|
|
47
59
|
args: Record<string, any>;
|
|
48
60
|
fqn: string;
|
|
49
61
|
type: inventory.InventoryProjectType;
|
|
50
62
|
comments: InitProjectOptionHints;
|
|
63
|
+
synth: boolean;
|
|
64
|
+
post: boolean;
|
|
51
65
|
} | undefined;
|
|
52
66
|
export declare class ModuleImports {
|
|
53
67
|
private imports;
|
|
@@ -44,10 +44,10 @@ const TAB = makePadding(2);
|
|
|
44
44
|
/**
|
|
45
45
|
* Renders options as if the project was created via `projen new` (embeds the __new__ field).
|
|
46
46
|
*/
|
|
47
|
-
function renderProjenInitOptions(fqn, args, comments = option_hints_1.InitProjectOptionHints.NONE) {
|
|
47
|
+
function renderProjenInitOptions(fqn, args, comments = option_hints_1.InitProjectOptionHints.NONE, synth = true, post = true) {
|
|
48
48
|
return {
|
|
49
49
|
...args,
|
|
50
|
-
[PROJEN_NEW]: { fqn, args, comments },
|
|
50
|
+
[PROJEN_NEW]: { fqn, args, comments, synth, post },
|
|
51
51
|
};
|
|
52
52
|
}
|
|
53
53
|
function resolveInitProject(opts) {
|
|
@@ -64,6 +64,8 @@ function resolveInitProject(opts) {
|
|
|
64
64
|
fqn: f.fqn,
|
|
65
65
|
type: type,
|
|
66
66
|
comments: f.comments,
|
|
67
|
+
synth: f.synth ?? true,
|
|
68
|
+
post: f.post ?? true,
|
|
67
69
|
};
|
|
68
70
|
}
|
|
69
71
|
class ModuleImports {
|
|
@@ -157,6 +159,8 @@ function renderJavaScriptOptions(opts) {
|
|
|
157
159
|
args: opts.args,
|
|
158
160
|
fqn: opts.type.fqn,
|
|
159
161
|
comments: opts.comments,
|
|
162
|
+
synth: opts.synth ?? true,
|
|
163
|
+
post: opts.post ?? true,
|
|
160
164
|
})},`;
|
|
161
165
|
optionsWithDefaults.push(PROJEN_NEW);
|
|
162
166
|
}
|
|
@@ -252,4 +256,4 @@ function renderArgAsJavaScript(arg, option) {
|
|
|
252
256
|
function makePadding(paddingLength) {
|
|
253
257
|
return " ".repeat(paddingLength);
|
|
254
258
|
}
|
|
255
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLW9wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvamF2YXNjcmlwdC9yZW5kZXItb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEyRUEsMERBU0M7QUFFRCxnREFnQkM7QUFtRUQsMERBb0ZDO0FBN1BELHdEQUEwQztBQUMxQyxrREFBeUQ7QUFFekQsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDO0FBQzdCLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQW9FM0I7O0dBRUc7QUFDSCxTQUFnQix1QkFBdUIsQ0FDckMsR0FBVyxFQUNYLElBQXlCLEVBQ3pCLFdBQW1DLHFDQUFzQixDQUFDLElBQUk7SUFFOUQsT0FBTztRQUNMLEdBQUcsSUFBSTtRQUNQLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBZ0I7S0FDcEQsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFnQixrQkFBa0IsQ0FBQyxJQUFTO0lBQzFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQWUsQ0FBQztJQUN6QyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDUCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDVixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBQ0QsT0FBTztRQUNMLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTtRQUNaLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRztRQUNWLElBQUksRUFBRSxJQUFJO1FBQ1Ys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RSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQywrQkFBK0I7UUFDaEcsTUFBTSxFQUFFLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxVQUFVLEVBQUUsQ0FBQyxDQUFDLDZCQUE2QjtRQUNyRixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZO1FBQ3pDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDdEMsT0FBTyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDeEMsQ0FBQztTQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNCLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ3JDLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxJQUFJLEtBQUssQ0FDYixxQkFBcUIsTUFBTSxDQUFDLElBQUkscUZBQXFGLENBQ3RILENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLGFBQXFCO0lBQ3hDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgaW52ZW50b3J5IGZyb20gXCIuLi9pbnZlbnRvcnlcIjtcbmltcG9ydCB7IEluaXRQcm9qZWN0T3B0aW9uSGludHMgfSBmcm9tIFwiLi4vb3B0aW9uLWhpbnRzXCI7XG5cbmNvbnN0IFBST0pFTl9ORVcgPSBcIl9fbmV3X19cIjtcbmNvbnN0IFRBQiA9IG1ha2VQYWRkaW5nKDIpO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGByZW5kZXJQcm9qZWN0T3B0aW9uc2AuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyUHJvamVjdE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHByb2plY3QgdHlwZSB0byByZW5kZXIuXG4gICAqL1xuICByZWFkb25seSB0eXBlOiBpbnZlbnRvcnkuSW52ZW50b3J5UHJvamVjdFR5cGU7XG5cbiAgLyoqXG4gICAqIFByb2plY3QgYXJndW1lbnRzIGFzIHBhc3NlZCB0byBgcHJvamVuIG5ld2AuXG4gICAqL1xuICByZWFkb25seSBhcmdzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIGNvbW1lbnRlZCBvdXQgb3B0aW9ucy5cbiAgICogQGRlZmF1bHQgSW5pdFByb2plY3RPcHRpb25IaW50cy5GRUFUVVJFRFxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWVudHM/OiBJbml0UHJvamVjdE9wdGlvbkhpbnRzO1xuXG4gIC8qKlxuICAgKiBJbmplY3QgYSBgX19uZXdfX2AgYXR0cmlidXRlIHRvIHRoZSBwcm9qZWN0IGNvbnN0cnVjdG9yIHdpdGggYSBzdHJpbmdpZmllZFxuICAgKiB2ZXJzaW9uIG9mIHRoZSBwcm9qZWN0IHBhcmFtZXRlcnMgYW5kIGEgYGpzaWlGcW5gIGF0dHJpYnV0ZSB0aGF0IGluY2x1ZGVzXG4gICAqIHRoZSBGUU4gb2YgdGhlIHByb2plY3QgdHlwZS4gVGhpcyBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgaW5pdGlhbFxuICAgKiBwcm9qZW5yYyBmaWxlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGJvb3RzdHJhcD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBmaWVsZHMgdG8gb21pdCBmcm9tIHRoZSBpbml0aWFsIHByb2plbnJjIGZpbGUuXG4gICAqIEBkZWZhdWx0IC0gbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgb21pdEZyb21Cb290c3RyYXA/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUHJlZml4IGFsbCBpbXBvcnRzIHdpdGggdGhpcyBzdHJpbmcgYW5kIHRoZSBmdWxsIG1vZHVsZSBuYW1lXG4gICAqIFRoaXMgaXMgcmVxdWlyZWQgd2hlbiBleGVjdXRpbmcgb3B0aW9ucyBjb2RlIGluIGEgdm1cbiAgICpcbiAgICogQGRlZmF1bHQgLSBvbmx5IHVzZSBzdWJtb2R1bGUgYXMgcHJlZml4XG4gICAqL1xuICByZWFkb25seSBwcmVmaXhJbXBvcnRzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEluZm9ybWF0aW9uIHBhc3NlZCBmcm9tIGBwcm9qZW4gbmV3YCB0byB0aGUgcHJvamVjdCBvYmplY3Qgd2hlbiB0aGUgcHJvamVjdFxuICogaXMgZmlyc3QgY3JlYXRlZC4gSXQgaXMgdXNlZCB0byBnZW5lcmF0ZSBwcm9qZW5yYyBmaWxlcyBpbiB2YXJpb3VzIGxhbmd1YWdlcy5cbiAqL1xuaW50ZXJmYWNlIFByb2plbkluaXQge1xuICAvKipcbiAgICogVGhlIEpTSUkgRlFOIG9mIHRoZSBwcm9qZWN0IHR5cGUuXG4gICAqL1xuICByZWFkb25seSBmcW46IHN0cmluZztcblxuICAvKipcbiAgICogSW5pdGlhbCBhcmd1bWVudHMgcGFzc2VkIHRvIGBwcm9qZW4gbmV3YC5cbiAgICovXG4gIHJlYWRvbmx5IGFyZ3M6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgLyoqXG4gICAqIEluY2x1ZGUgY29tbWVudGVkIG91dCBvcHRpb25zLiBEb2VzIG5vdCBhcHBseSB0byBwcm9qZW5yYy5qc29uIGZpbGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWVudHM6IEluaXRQcm9qZWN0T3B0aW9uSGludHM7XG59XG5cbi8qKlxuICogUmVuZGVycyBvcHRpb25zIGFzIGlmIHRoZSBwcm9qZWN0IHdhcyBjcmVhdGVkIHZpYSBgcHJvamVuIG5ld2AgKGVtYmVkcyB0aGUgX19uZXdfXyBmaWVsZCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJQcm9qZW5Jbml0T3B0aW9ucyhcbiAgZnFuOiBzdHJpbmcsXG4gIGFyZ3M6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gIGNvbW1lbnRzOiBJbml0UHJvamVjdE9wdGlvbkhpbnRzID0gSW5pdFByb2plY3RPcHRpb25IaW50cy5OT05FLFxuKTogYW55IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5hcmdzLFxuICAgIFtQUk9KRU5fTkVXXTogeyBmcW4sIGFyZ3MsIGNvbW1lbnRzIH0gYXMgUHJvamVuSW5pdCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVJbml0UHJvamVjdChvcHRzOiBhbnkpIHtcbiAgY29uc3QgZiA9IG9wdHNbUFJPSkVOX05FV10gYXMgUHJvamVuSW5pdDtcbiAgaWYgKCFmKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHR5cGUgPSBpbnZlbnRvcnkucmVzb2x2ZVByb2plY3RUeXBlKGYuZnFuKTtcbiAgaWYgKCF0eXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB1bmFibGUgdG8gcmVzb2x2ZSBwcm9qZWN0IHR5cGUgZm9yICR7Zi5mcW59YCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBhcmdzOiBmLmFyZ3MsXG4gICAgZnFuOiBmLmZxbixcbiAgICB0eXBlOiB0eXBlLFxuICAgIGNvbW1lbnRzOiBmLmNvbW1lbnRzLFxuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgTW9kdWxlSW1wb3J0cyB7XG4gIHByaXZhdGUgaW1wb3J0czogTWFwPHN0cmluZywgU2V0PHN0cmluZz4+ID0gbmV3IE1hcCgpO1xuXG4gIC8qKlxuICAgKiBBZGQgYSBuYW1lZCBpbXBvcnQgZnJvbSBhIG1vZHVsZVxuICAgKi9cbiAgcHVibGljIGFkZChtb2R1bGVOYW1lOiBzdHJpbmcsIGltcG9ydE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IG1vZHVsZUltcG9ydHMgPSB0aGlzLmltcG9ydHMuZ2V0KG1vZHVsZU5hbWUpID8/IG5ldyBTZXQoKTtcbiAgICBtb2R1bGVJbXBvcnRzLmFkZChpbXBvcnROYW1lKTtcbiAgICB0aGlzLmltcG9ydHMuc2V0KG1vZHVsZU5hbWUsIG1vZHVsZUltcG9ydHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgbmFtZWQgaW1wb3J0cyBmb3IgYSBtb2R1bGVcbiAgICovXG4gIHB1YmxpYyBnZXQobW9kdWxlTmFtZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IG1vZHVsZUltcG9ydHMgPSB0aGlzLmltcG9ydHMuZ2V0KG1vZHVsZU5hbWUpID8/IG5ldyBTZXQoKTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShtb2R1bGVJbXBvcnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBsaXN0IG9mIGFsbCB1c2VkIG1vZHVsZXNcbiAgICovXG4gIHB1YmxpYyBnZXQgbW9kdWxlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5pbXBvcnRzLmtleXMoKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFsbCBpbXBvcnRzIGFzIEVTTSBpbXBvcnQgc3RhdGVtZW50c1xuICAgKi9cbiAgcHVibGljIGFzRXNtSW1wb3J0cygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuYWxsKCkubWFwKFxuICAgICAgKFttb2R1bGVOYW1lLCBuYW1lZEltcG9ydHNdKSA9PlxuICAgICAgICBgaW1wb3J0IHsgJHtbLi4ubmFtZWRJbXBvcnRzXS5qb2luKFwiLCBcIil9IH0gZnJvbSBcIiR7bW9kdWxlTmFtZX1cIjtgLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFsbCBpbXBvcnRzIGFzIENKUyByZXF1aXJlIHN0YXRlbWVudHNcbiAgICovXG4gIHB1YmxpYyBhc0Nqc1JlcXVpcmUoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmFsbCgpLm1hcChcbiAgICAgIChbbW9kdWxlTmFtZSwgbmFtZWRJbXBvcnRzXSkgPT5cbiAgICAgICAgYGNvbnN0IHsgJHtbLi4ubmFtZWRJbXBvcnRzXS5qb2luKFwiLCBcIil9IH0gPSByZXF1aXJlKFwiJHttb2R1bGVOYW1lfVwiKTtgLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFsbCgpOiBBcnJheTxbc3RyaW5nLCBzdHJpbmdbXV0+IHtcbiAgICBjb25zdCBhbGxJbXBvcnRzID0gT2JqZWN0LmZyb21FbnRyaWVzKHRoaXMuaW1wb3J0cyk7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGFsbEltcG9ydHMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBbXG4gICAgICBrZXksXG4gICAgICBBcnJheS5mcm9tKHZhbHVlKS5zb3J0KCksXG4gICAgXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBQcmludHMgYWxsIHBhcmFtZXRlcnMgdGhhdCBjYW4gYmUgdXNlZCBpbiBhIHByb2plY3QgdHlwZSwgYWxvbmdzaWRlIHRoZWlyIGRlc2NyaXB0aW9ucy5cbiAqXG4gKiBQYXJhbWV0ZXJzIGluIGBwYXJhbXNgIHRoYXQgYXJlbid0IHVuZGVmaW5lZCBhcmUgcmVuZGVyZWQgYXMgZGVmYXVsdHMsXG4gKiB3aGlsZSBhbGwgb3RoZXIgcGFyYW1ldGVycyBhcmUgcmVuZGVyZWQgYXMgY29tbWVudGVkIG91dC5cbiAqXG4gKiBSZXR1cm5zIHRoZSBwcmludGVkIG91dHB1dCBhbmQgYSBzZXQgb2YgcmVxdWlyZWQgaW1wb3J0cyBhcyBhbiBvYmplY3RcbiAqIGluIHRoZSBmb3JtIHsgb3B0aW9ucywgaW1wb3J0cyB9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVySmF2YVNjcmlwdE9wdGlvbnMob3B0czogUmVuZGVyUHJvamVjdE9wdGlvbnMpOiB7XG4gIHJlbmRlcmVkT3B0aW9uczogc3RyaW5nO1xuICBpbXBvcnRzOiBNb2R1bGVJbXBvcnRzO1xufSB7XG4gIGNvbnN0IHJlbmRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgY29uc3Qgb3B0aW9uc1dpdGhEZWZhdWx0czogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgYWxsSW1wb3J0cyA9IG5ldyBNb2R1bGVJbXBvcnRzKCk7XG5cbiAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0cy50eXBlLm9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9uLmRlcHJlY2F0ZWQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbk5hbWUgPSBvcHRpb24ubmFtZTtcblxuICAgIGlmIChvcHRzLmFyZ3Nbb3B0aW9uTmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgYXJnID0gb3B0cy5hcmdzW29wdGlvbk5hbWVdO1xuICAgICAgY29uc3QgeyBqcywgbW9kdWxlTmFtZSwgaW1wb3J0TmFtZSB9ID0gcmVuZGVyQXJnQXNKYXZhU2NyaXB0KGFyZywgb3B0aW9uKTtcblxuICAgICAgcmVuZGVyc1tvcHRpb25OYW1lXSA9IGAke29wdGlvbk5hbWV9OiAke2pzfSxgO1xuICAgICAgb3B0aW9uc1dpdGhEZWZhdWx0cy5wdXNoKG9wdGlvbk5hbWUpO1xuXG4gICAgICBpZiAobW9kdWxlTmFtZSAmJiBpbXBvcnROYW1lKSB7XG4gICAgICAgIGFsbEltcG9ydHMuYWRkKG1vZHVsZU5hbWUsIGltcG9ydE5hbWUpO1xuICAgICAgICBpZiAob3B0cy5wcmVmaXhJbXBvcnRzKSB7XG4gICAgICAgICAgY29uc3QgcHJlZml4ID0gYCR7b3B0cy5wcmVmaXhJbXBvcnRzfVtcIiR7bW9kdWxlTmFtZX1cIl0uYDtcbiAgICAgICAgICByZW5kZXJzW29wdGlvbk5hbWVdID0gYCR7b3B0aW9uTmFtZX06ICR7cHJlZml4fSR7anN9LGA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gb3B0aW9uLmRlZmF1bHQ/LnN0YXJ0c1dpdGgoXCItXCIpXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogKG9wdGlvbi5kZWZhdWx0ID8/IHVuZGVmaW5lZCk7XG4gICAgICByZW5kZXJzW29wdGlvbk5hbWVdID0gYC8vICR7b3B0aW9uTmFtZX06ICR7ZGVmYXVsdFZhbHVlfSxgO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGJvb3RzdHJhcCA9IG9wdHMuYm9vdHN0cmFwID8/IGZhbHNlO1xuICBpZiAoYm9vdHN0cmFwKSB7XG4gICAgZm9yIChjb25zdCBhcmcgb2Ygb3B0cy5vbWl0RnJvbUJvb3RzdHJhcCA/PyBbXSkge1xuICAgICAgZGVsZXRlIG9wdHMuYXJnc1thcmddO1xuICAgIH1cbiAgICByZW5kZXJzW1BST0pFTl9ORVddID0gYCR7UFJPSkVOX05FV306ICR7SlNPTi5zdHJpbmdpZnkoe1xuICAgICAgYXJnczogb3B0cy5hcmdzLFxuICAgICAgZnFuOiBvcHRzLnR5cGUuZnFuLFxuICAgICAgY29tbWVudHM6IG9wdHMuY29tbWVudHMsXG4gICAgfSBhcyBQcm9qZW5Jbml0KX0sYDtcbiAgICBvcHRpb25zV2l0aERlZmF1bHRzLnB1c2goUFJPSkVOX05FVyk7XG4gIH1cblxuICAvLyBnZW5lcmF0ZSByZW5kZXJpbmdcbiAgY29uc3QgcmVzdWx0OiBzdHJpbmdbXSA9IFtdO1xuICByZXN1bHQucHVzaChcIntcIik7XG5cbiAgLy8gcmVuZGVyIG9wdGlvbnMgd2l0aCBkZWZhdWx0c1xuICBvcHRpb25zV2l0aERlZmF1bHRzLnNvcnQoKTtcbiAgZm9yIChjb25zdCBvcHRpb25OYW1lIG9mIG9wdGlvbnNXaXRoRGVmYXVsdHMpIHtcbiAgICByZXN1bHQucHVzaChgJHtUQUJ9JHtyZW5kZXJzW29wdGlvbk5hbWVdfWApO1xuICB9XG4gIGlmIChyZXN1bHQubGVuZ3RoID4gMSkge1xuICAgIHJlc3VsdC5wdXNoKFwiXCIpO1xuICB9XG5cbiAgLy8gcmVuZGVyIG9wdGlvbnMgd2l0aG91dCBkZWZhdWx0cyBhcyBjb21tZW50c1xuICBpZiAob3B0cy5jb21tZW50cyA9PT0gSW5pdFByb2plY3RPcHRpb25IaW50cy5BTEwpIHtcbiAgICBjb25zdCBvcHRpb25zID0gb3B0cy50eXBlLm9wdGlvbnMuZmlsdGVyKFxuICAgICAgKG9wdCkgPT4gIW9wdC5kZXByZWNhdGVkICYmIG9wdHMuYXJnc1tvcHQubmFtZV0gPT09IHVuZGVmaW5lZCxcbiAgICApO1xuICAgIHJlc3VsdC5wdXNoKC4uLnJlbmRlckNvbW1lbnRlZE9wdGlvbnNCeU1vZHVsZShyZW5kZXJzLCBvcHRpb25zKSk7XG4gIH0gZWxzZSBpZiAob3B0cy5jb21tZW50cyA9PT0gSW5pdFByb2plY3RPcHRpb25IaW50cy5GRUFUVVJFRCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBvcHRzLnR5cGUub3B0aW9ucy5maWx0ZXIoXG4gICAgICAob3B0KSA9PlxuICAgICAgICAhb3B0LmRlcHJlY2F0ZWQgJiYgb3B0cy5hcmdzW29wdC5uYW1lXSA9PT0gdW5kZWZpbmVkICYmIG9wdC5mZWF0dXJlZCxcbiAgICApO1xuICAgIHJlc3VsdC5wdXNoKC4uLnJlbmRlckNvbW1lbnRlZE9wdGlvbnNJbk9yZGVyKHJlbmRlcnMsIG9wdGlvbnMpKTtcbiAgfSBlbHNlIGlmIChvcHRzLmNvbW1lbnRzID09PSBJbml0UHJvamVjdE9wdGlvbkhpbnRzLk5PTkUpIHtcbiAgICAvLyBkb24ndCByZW5kZXIgYW55IGV4dHJhIG9wdGlvbnNcbiAgfVxuXG4gIGlmIChyZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdID09PSBcIlwiKSB7XG4gICAgcmVzdWx0LnBvcCgpO1xuICB9XG4gIHJlc3VsdC5wdXNoKFwifVwiKTtcbiAgcmV0dXJuIHsgcmVuZGVyZWRPcHRpb25zOiByZXN1bHQuam9pbihcIlxcblwiKSwgaW1wb3J0czogYWxsSW1wb3J0cyB9O1xufVxuXG5mdW5jdGlvbiByZW5kZXJDb21tZW50ZWRPcHRpb25zQnlNb2R1bGUoXG4gIHJlbmRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIG9wdGlvbnM6IGludmVudG9yeS5JbnZlbnRvcnlQcm9qZWN0T3B0aW9uW10sXG4pIHtcbiAgY29uc3Qgb3B0aW9uc0J5TW9kdWxlOiBSZWNvcmQ8c3RyaW5nLCBpbnZlbnRvcnkuSW52ZW50b3J5UHJvamVjdE9wdGlvbltdPiA9XG4gICAge307XG5cbiAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgIGNvbnN0IHBhcmVudE1vZHVsZSA9IG9wdGlvbi5wYXJlbnQ7XG4gICAgb3B0aW9uc0J5TW9kdWxlW3BhcmVudE1vZHVsZV0gPSBvcHRpb25zQnlNb2R1bGVbcGFyZW50TW9kdWxlXSA/PyBbXTtcbiAgICBvcHRpb25zQnlNb2R1bGVbcGFyZW50TW9kdWxlXS5wdXNoKG9wdGlvbik7XG4gIH1cblxuICBmb3IgKGNvbnN0IHBhcmVudE1vZHVsZSBpbiBvcHRpb25zQnlNb2R1bGUpIHtcbiAgICBvcHRpb25zQnlNb2R1bGVbcGFyZW50TW9kdWxlXS5zb3J0KChvMSwgbzIpID0+XG4gICAgICBvMS5uYW1lLmxvY2FsZUNvbXBhcmUobzIubmFtZSksXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBjb25zdCBtYXJnaW5TaXplID0gTWF0aC5tYXgoXG4gICAgLi4ub3B0aW9ucy5tYXAoKG9wdCkgPT4gcmVuZGVyc1tvcHQubmFtZV0ubGVuZ3RoKSxcbiAgKTtcbiAgZm9yIChjb25zdCBbbW9kdWxlTmFtZSwgb3B0aW9uR3JvdXBdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgIG9wdGlvbnNCeU1vZHVsZSxcbiAgKS5zb3J0KCkpIHtcbiAgICByZXN1bHQucHVzaChgJHtUQUJ9LyogJHttb2R1bGVOYW1lfSAqL2ApO1xuICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbkdyb3VwKSB7XG4gICAgICBjb25zdCBwYXJhbVJlbmRlciA9IHJlbmRlcnNbb3B0aW9uLm5hbWVdO1xuICAgICAgY29uc3QgZG9jc3RyaW5nID0gb3B0aW9uLmRvY3MgfHwgXCJObyBkb2N1bWVudGF0aW9uIGZvdW5kLlwiO1xuICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgIGAke1RBQn0ke3BhcmFtUmVuZGVyfSR7bWFrZVBhZGRpbmcoXG4gICAgICAgICAgbWFyZ2luU2l6ZSAtIHBhcmFtUmVuZGVyLmxlbmd0aCArIDIsXG4gICAgICAgICl9LyogJHtkb2NzdHJpbmd9ICovYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJlc3VsdC5wdXNoKFwiXCIpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckNvbW1lbnRlZE9wdGlvbnNJbk9yZGVyKFxuICByZW5kZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBvcHRpb25zOiBpbnZlbnRvcnkuUHJvamVjdE9wdGlvbltdLFxuKSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBjb25zdCBtYXJnaW5TaXplID0gTWF0aC5tYXgoXG4gICAgLi4ub3B0aW9ucy5tYXAoKG9wdCkgPT4gcmVuZGVyc1tvcHQubmFtZV0ubGVuZ3RoKSxcbiAgKTtcbiAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgIGNvbnN0IHBhcmFtUmVuZGVyID0gcmVuZGVyc1tvcHRpb24ubmFtZV07XG4gICAgY29uc3QgZG9jc3RyaW5nID0gb3B0aW9uLmRvY3MgfHwgXCJObyBkb2N1bWVudGF0aW9uIGZvdW5kLlwiO1xuICAgIHJlc3VsdC5wdXNoKFxuICAgICAgYCR7VEFCfSR7cGFyYW1SZW5kZXJ9JHttYWtlUGFkZGluZyhcbiAgICAgICAgbWFyZ2luU2l6ZSAtIHBhcmFtUmVuZGVyLmxlbmd0aCArIDIsXG4gICAgICApfS8qICR7ZG9jc3RyaW5nfSAqL2AsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSB2YWx1ZSBhcyBhIEphdmFTY3JpcHQgdmFsdWUsIGNvbnZlcnRpbmcgc3RyaW5ncyB0byBlbnVtcyB3aGVyZVxuICogYXBwcm9wcmlhdGUuIFRoZSB0eXBlIG11c3QgYmUgSlNPTi1saWtlIChzdHJpbmcsIG51bWJlciwgYm9vbGVhbiwgYXJyYXksXG4gKiBlbnVtLCBvciBKU09OIG9iamVjdCkuXG4gKlxuICogUmV0dXJucyBhIEphdmFTY3JpcHQgZXhwcmVzc2lvbiBhcyBhIHN0cmluZywgYW5kIHRoZSBuYW1lcyBvZiBhbnlcbiAqIG5lY2Vzc2FyeSBpbXBvcnRzLlxuICovXG5mdW5jdGlvbiByZW5kZXJBcmdBc0phdmFTY3JpcHQoXG4gIGFyZzogYW55LFxuICBvcHRpb246IGludmVudG9yeS5JbnZlbnRvcnlQcm9qZWN0T3B0aW9uLFxuKSB7XG4gIGlmIChvcHRpb24ua2luZCA9PT0gXCJlbnVtXCIpIHtcbiAgICBpZiAoIW9wdGlvbi5mcW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZnFuIGZpZWxkIGlzIG1pc3NpbmcgZnJvbSBlbnVtIG9wdGlvbiAke29wdGlvbi5uYW1lfWApO1xuICAgIH1cbiAgICBjb25zdCBwYXJ0cyA9IG9wdGlvbi5mcW4uc3BsaXQoXCIuXCIpOyAvLyAtPiBbJ3Byb2plbicsICd3ZWInLCAnTXlFbnVtJ11cbiAgICBjb25zdCBlbnVtQ2hvaWNlID0gU3RyaW5nKGFyZykudG9VcHBlckNhc2UoKS5yZXBsYWNlKC8tL2csIFwiX1wiKTsgLy8gY3VzdG9tLXZhbHVlIC0+IENVU1RPTV9WQUxVRVxuICAgIGNvbnN0IGpzID0gYCR7cGFydHMuc2xpY2UoMSkuam9pbihcIi5cIil9LiR7ZW51bUNob2ljZX1gOyAvLyAtPiB3ZWIuTXlFbnVtLkNVU1RPTV9WQUxVRVxuICAgIGNvbnN0IG1vZHVsZU5hbWUgPSBwYXJ0c1swXTsgLy8gLT4gcHJvamVuXG4gICAgY29uc3QgaW1wb3J0TmFtZSA9IHBhcnRzWzFdOyAvLyAtPiB3ZWJcbiAgICByZXR1cm4geyBqcywgbW9kdWxlTmFtZSwgaW1wb3J0TmFtZSB9O1xuICB9IGVsc2UgaWYgKG9wdGlvbi5qc29uTGlrZSkge1xuICAgIHJldHVybiB7IGpzOiBKU09OLnN0cmluZ2lmeShhcmcpIH07XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFVuZXhwZWN0ZWQgb3B0aW9uICR7b3B0aW9uLm5hbWV9IC0gY2Fubm90IHJlbmRlciBhIHZhbHVlIGZvciB0aGlzIG9wdGlvbiBiZWNhdXNlIGl0IGRvZXMgbm90IGhhdmUgYSBKU09OLWxpa2UgdHlwZS5gLFxuICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFrZVBhZGRpbmcocGFkZGluZ0xlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIFwiIFwiLnJlcGVhdChwYWRkaW5nTGVuZ3RoKTtcbn1cbiJdfQ==
|
|
259
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLW9wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvamF2YXNjcmlwdC9yZW5kZXItb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxR0EsMERBV0M7QUFFRCxnREFrQkM7QUFtRUQsMERBc0ZDO0FBN1JELHdEQUEwQztBQUMxQyxrREFBeUQ7QUFFekQsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDO0FBQzdCLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQThGM0I7O0dBRUc7QUFDSCxTQUFnQix1QkFBdUIsQ0FDckMsR0FBVyxFQUNYLElBQXlCLEVBQ3pCLFdBQW1DLHFDQUFzQixDQUFDLElBQUksRUFDOUQsUUFBaUIsSUFBSSxFQUNyQixPQUFnQixJQUFJO0lBRXBCLE9BQU87UUFDTCxHQUFHLElBQUk7UUFDUCxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBZ0I7S0FDakUsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFnQixrQkFBa0IsQ0FBQyxJQUFTO0lBQzFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQWUsQ0FBQztJQUN6QyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDUCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDVixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBQ0QsT0FBTztRQUNMLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTtR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L2ludmVudG9yeVwiO1xuaW1wb3J0IHsgSW5pdFByb2plY3RPcHRpb25IaW50cyB9IGZyb20gXCIuLi9vcHRpb24taGludHNcIjtcblxuY29uc3QgUFJPSkVOX05FVyA9IFwiX19uZXdfX1wiO1xuY29uc3QgVEFCID0gbWFrZVBhZGRpbmcoMik7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYHJlbmRlclByb2plY3RPcHRpb25zYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJQcm9qZWN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgcHJvamVjdCB0eXBlIHRvIHJlbmRlci5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IGludmVudG9yeS5JbnZlbnRvcnlQcm9qZWN0VHlwZTtcblxuICAvKipcbiAgICogUHJvamVjdCBhcmd1bWVudHMgYXMgcGFzc2VkIHRvIGBwcm9qZW4gbmV3YC5cbiAgICovXG4gIHJlYWRvbmx5IGFyZ3M6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgLyoqXG4gICAqIEluY2x1ZGUgY29tbWVudGVkIG91dCBvcHRpb25zLlxuICAgKiBAZGVmYXVsdCBJbml0UHJvamVjdE9wdGlvbkhpbnRzLkZFQVRVUkVEXG4gICAqL1xuICByZWFkb25seSBjb21tZW50cz86IEluaXRQcm9qZWN0T3B0aW9uSGludHM7XG5cbiAgLyoqXG4gICAqIEluamVjdCBhIGBfX25ld19fYCBhdHRyaWJ1dGUgdG8gdGhlIHByb2plY3QgY29uc3RydWN0b3Igd2l0aCBhIHN0cmluZ2lmaWVkXG4gICAqIHZlcnNpb24gb2YgdGhlIHByb2plY3QgcGFyYW1ldGVycyBhbmQgYSBganNpaUZxbmAgYXR0cmlidXRlIHRoYXQgaW5jbHVkZXNcbiAgICogdGhlIEZRTiBvZiB0aGUgcHJvamVjdCB0eXBlLiBUaGlzIGlzIG5lZWRlZCBpbiBvcmRlciB0byBnZW5lcmF0ZSBpbml0aWFsXG4gICAqIHByb2plbnJjIGZpbGVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYm9vdHN0cmFwPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGZpZWxkcyB0byBvbWl0IGZyb20gdGhlIGluaXRpYWwgcHJvamVucmMgZmlsZS5cbiAgICogQGRlZmF1bHQgLSBub25lXG4gICAqL1xuICByZWFkb25seSBvbWl0RnJvbUJvb3RzdHJhcD86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGBwcm9qZW4gbmV3YCB3aWxsIGNhbGwgYHByb2plY3Quc3ludGgoKWAgYWZ0ZXIgY29uc3RydWN0aW9uLlxuICAgKiBFbWJlZGRlZCBpbiB0aGUgYF9fbmV3X19gIGZpZWxkIHNvIGBQcm9qZWN0LnN5bnRoKClgIGNhbiBkZXRlY3QgYC0tbm8tc3ludGhgLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBzeW50aD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYHByb2plbiBuZXdgIHdpbGwgcnVuIHBvc3Qtc3ludGhlc2lzIHN0ZXBzIChlLmcuIHBhY2thZ2UgbWFuYWdlciBpbnN0YWxsKS5cbiAgICogRW1iZWRkZWQgaW4gdGhlIGBfX25ld19fYCBmaWVsZCBmb3IgY29tcG9uZW50cyB0aGF0IG5lZWQgdG8ga25vdy5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcG9zdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFByZWZpeCBhbGwgaW1wb3J0cyB3aXRoIHRoaXMgc3RyaW5nIGFuZCB0aGUgZnVsbCBtb2R1bGUgbmFtZVxuICAgKiBUaGlzIGlzIHJlcXVpcmVkIHdoZW4gZXhlY3V0aW5nIG9wdGlvbnMgY29kZSBpbiBhIHZtXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gb25seSB1c2Ugc3VibW9kdWxlIGFzIHByZWZpeFxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZml4SW1wb3J0cz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBJbmZvcm1hdGlvbiBwYXNzZWQgZnJvbSBgcHJvamVuIG5ld2AgdG8gdGhlIHByb2plY3Qgb2JqZWN0IHdoZW4gdGhlIHByb2plY3RcbiAqIGlzIGZpcnN0IGNyZWF0ZWQuIEl0IGlzIHVzZWQgdG8gZ2VuZXJhdGUgcHJvamVucmMgZmlsZXMgaW4gdmFyaW91cyBsYW5ndWFnZXMuXG4gKi9cbmludGVyZmFjZSBQcm9qZW5Jbml0IHtcbiAgLyoqXG4gICAqIFRoZSBKU0lJIEZRTiBvZiB0aGUgcHJvamVjdCB0eXBlLlxuICAgKi9cbiAgcmVhZG9ubHkgZnFuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluaXRpYWwgYXJndW1lbnRzIHBhc3NlZCB0byBgcHJvamVuIG5ld2AuXG4gICAqL1xuICByZWFkb25seSBhcmdzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIGNvbW1lbnRlZCBvdXQgb3B0aW9ucy4gRG9lcyBub3QgYXBwbHkgdG8gcHJvamVucmMuanNvbiBmaWxlcy5cbiAgICovXG4gIHJlYWRvbmx5IGNvbW1lbnRzOiBJbml0UHJvamVjdE9wdGlvbkhpbnRzO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGBwcm9qZW4gbmV3YCB3aWxsIGNhbGwgYHByb2plY3Quc3ludGgoKWAgYWZ0ZXIgY29uc3RydWN0aW9uLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBzeW50aDogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciBgcHJvamVuIG5ld2Agd2lsbCBydW4gcG9zdC1zeW50aGVzaXMgc3RlcHMgKGUuZy4gcGFja2FnZSBtYW5hZ2VyIGluc3RhbGwpLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBwb3N0OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgb3B0aW9ucyBhcyBpZiB0aGUgcHJvamVjdCB3YXMgY3JlYXRlZCB2aWEgYHByb2plbiBuZXdgIChlbWJlZHMgdGhlIF9fbmV3X18gZmllbGQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyUHJvamVuSW5pdE9wdGlvbnMoXG4gIGZxbjogc3RyaW5nLFxuICBhcmdzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICBjb21tZW50czogSW5pdFByb2plY3RPcHRpb25IaW50cyA9IEluaXRQcm9qZWN0T3B0aW9uSGludHMuTk9ORSxcbiAgc3ludGg6IGJvb2xlYW4gPSB0cnVlLFxuICBwb3N0OiBib29sZWFuID0gdHJ1ZSxcbik6IGFueSB7XG4gIHJldHVybiB7XG4gICAgLi4uYXJncyxcbiAgICBbUFJPSkVOX05FV106IHsgZnFuLCBhcmdzLCBjb21tZW50cywgc3ludGgsIHBvc3QgfSBhcyBQcm9qZW5Jbml0LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUluaXRQcm9qZWN0KG9wdHM6IGFueSkge1xuICBjb25zdCBmID0gb3B0c1tQUk9KRU5fTkVXXSBhcyBQcm9qZW5Jbml0O1xuICBpZiAoIWYpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgdHlwZSA9IGludmVudG9yeS5yZXNvbHZlUHJvamVjdFR5cGUoZi5mcW4pO1xuICBpZiAoIXR5cGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHVuYWJsZSB0byByZXNvbHZlIHByb2plY3QgdHlwZSBmb3IgJHtmLmZxbn1gKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGFyZ3M6IGYuYXJncyxcbiAgICBmcW46IGYuZnFuLFxuICAgIHR5cGU6IHR5cGUsXG4gICAgY29tbWVudHM6IGYuY29tbWVudHMsXG4gICAgc3ludGg6IGYuc3ludGggPz8gdHJ1ZSxcbiAgICBwb3N0OiBmLnBvc3QgPz8gdHJ1ZSxcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vZHVsZUltcG9ydHMge1xuICBwcml2YXRlIGltcG9ydHM6IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PiA9IG5ldyBNYXAoKTtcblxuICAvKipcbiAgICogQWRkIGEgbmFtZWQgaW1wb3J0IGZyb20gYSBtb2R1bGVcbiAgICovXG4gIHB1YmxpYyBhZGQobW9kdWxlTmFtZTogc3RyaW5nLCBpbXBvcnROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtb2R1bGVJbXBvcnRzID0gdGhpcy5pbXBvcnRzLmdldChtb2R1bGVOYW1lKSA/PyBuZXcgU2V0KCk7XG4gICAgbW9kdWxlSW1wb3J0cy5hZGQoaW1wb3J0TmFtZSk7XG4gICAgdGhpcy5pbXBvcnRzLnNldChtb2R1bGVOYW1lLCBtb2R1bGVJbXBvcnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIG5hbWVkIGltcG9ydHMgZm9yIGEgbW9kdWxlXG4gICAqL1xuICBwdWJsaWMgZ2V0KG1vZHVsZU5hbWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBtb2R1bGVJbXBvcnRzID0gdGhpcy5pbXBvcnRzLmdldChtb2R1bGVOYW1lKSA/PyBuZXcgU2V0KCk7XG4gICAgcmV0dXJuIEFycmF5LmZyb20obW9kdWxlSW1wb3J0cyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgbGlzdCBvZiBhbGwgdXNlZCBtb2R1bGVzXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1vZHVsZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuaW1wb3J0cy5rZXlzKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbGwgaW1wb3J0cyBhcyBFU00gaW1wb3J0IHN0YXRlbWVudHNcbiAgICovXG4gIHB1YmxpYyBhc0VzbUltcG9ydHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmFsbCgpLm1hcChcbiAgICAgIChbbW9kdWxlTmFtZSwgbmFtZWRJbXBvcnRzXSkgPT5cbiAgICAgICAgYGltcG9ydCB7ICR7Wy4uLm5hbWVkSW1wb3J0c10uam9pbihcIiwgXCIpfSB9IGZyb20gXCIke21vZHVsZU5hbWV9XCI7YCxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbGwgaW1wb3J0cyBhcyBDSlMgcmVxdWlyZSBzdGF0ZW1lbnRzXG4gICAqL1xuICBwdWJsaWMgYXNDanNSZXF1aXJlKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5hbGwoKS5tYXAoXG4gICAgICAoW21vZHVsZU5hbWUsIG5hbWVkSW1wb3J0c10pID0+XG4gICAgICAgIGBjb25zdCB7ICR7Wy4uLm5hbWVkSW1wb3J0c10uam9pbihcIiwgXCIpfSB9ID0gcmVxdWlyZShcIiR7bW9kdWxlTmFtZX1cIik7YCxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhbGwoKTogQXJyYXk8W3N0cmluZywgc3RyaW5nW11dPiB7XG4gICAgY29uc3QgYWxsSW1wb3J0cyA9IE9iamVjdC5mcm9tRW50cmllcyh0aGlzLmltcG9ydHMpO1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhhbGxJbXBvcnRzKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gW1xuICAgICAga2V5LFxuICAgICAgQXJyYXkuZnJvbSh2YWx1ZSkuc29ydCgpLFxuICAgIF0pO1xuICB9XG59XG5cbi8qKlxuICogUHJpbnRzIGFsbCBwYXJhbWV0ZXJzIHRoYXQgY2FuIGJlIHVzZWQgaW4gYSBwcm9qZWN0IHR5cGUsIGFsb25nc2lkZSB0aGVpciBkZXNjcmlwdGlvbnMuXG4gKlxuICogUGFyYW1ldGVycyBpbiBgcGFyYW1zYCB0aGF0IGFyZW4ndCB1bmRlZmluZWQgYXJlIHJlbmRlcmVkIGFzIGRlZmF1bHRzLFxuICogd2hpbGUgYWxsIG90aGVyIHBhcmFtZXRlcnMgYXJlIHJlbmRlcmVkIGFzIGNvbW1lbnRlZCBvdXQuXG4gKlxuICogUmV0dXJucyB0aGUgcHJpbnRlZCBvdXRwdXQgYW5kIGEgc2V0IG9mIHJlcXVpcmVkIGltcG9ydHMgYXMgYW4gb2JqZWN0XG4gKiBpbiB0aGUgZm9ybSB7IG9wdGlvbnMsIGltcG9ydHMgfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckphdmFTY3JpcHRPcHRpb25zKG9wdHM6IFJlbmRlclByb2plY3RPcHRpb25zKToge1xuICByZW5kZXJlZE9wdGlvbnM6IHN0cmluZztcbiAgaW1wb3J0czogTW9kdWxlSW1wb3J0cztcbn0ge1xuICBjb25zdCByZW5kZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGNvbnN0IG9wdGlvbnNXaXRoRGVmYXVsdHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGFsbEltcG9ydHMgPSBuZXcgTW9kdWxlSW1wb3J0cygpO1xuXG4gIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdHMudHlwZS5vcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbi5kZXByZWNhdGVkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25OYW1lID0gb3B0aW9uLm5hbWU7XG5cbiAgICBpZiAob3B0cy5hcmdzW29wdGlvbk5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGFyZyA9IG9wdHMuYXJnc1tvcHRpb25OYW1lXTtcbiAgICAgIGNvbnN0IHsganMsIG1vZHVsZU5hbWUsIGltcG9ydE5hbWUgfSA9IHJlbmRlckFyZ0FzSmF2YVNjcmlwdChhcmcsIG9wdGlvbik7XG5cbiAgICAgIHJlbmRlcnNbb3B0aW9uTmFtZV0gPSBgJHtvcHRpb25OYW1lfTogJHtqc30sYDtcbiAgICAgIG9wdGlvbnNXaXRoRGVmYXVsdHMucHVzaChvcHRpb25OYW1lKTtcblxuICAgICAgaWYgKG1vZHVsZU5hbWUgJiYgaW1wb3J0TmFtZSkge1xuICAgICAgICBhbGxJbXBvcnRzLmFkZChtb2R1bGVOYW1lLCBpbXBvcnROYW1lKTtcbiAgICAgICAgaWYgKG9wdHMucHJlZml4SW1wb3J0cykge1xuICAgICAgICAgIGNvbnN0IHByZWZpeCA9IGAke29wdHMucHJlZml4SW1wb3J0c31bXCIke21vZHVsZU5hbWV9XCJdLmA7XG4gICAgICAgICAgcmVuZGVyc1tvcHRpb25OYW1lXSA9IGAke29wdGlvbk5hbWV9OiAke3ByZWZpeH0ke2pzfSxgO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IG9wdGlvbi5kZWZhdWx0Py5zdGFydHNXaXRoKFwiLVwiKVxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IChvcHRpb24uZGVmYXVsdCA/PyB1bmRlZmluZWQpO1xuICAgICAgcmVuZGVyc1tvcHRpb25OYW1lXSA9IGAvLyAke29wdGlvbk5hbWV9OiAke2RlZmF1bHRWYWx1ZX0sYDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBib290c3RyYXAgPSBvcHRzLmJvb3RzdHJhcCA/PyBmYWxzZTtcbiAgaWYgKGJvb3RzdHJhcCkge1xuICAgIGZvciAoY29uc3QgYXJnIG9mIG9wdHMub21pdEZyb21Cb290c3RyYXAgPz8gW10pIHtcbiAgICAgIGRlbGV0ZSBvcHRzLmFyZ3NbYXJnXTtcbiAgICB9XG4gICAgcmVuZGVyc1tQUk9KRU5fTkVXXSA9IGAke1BST0pFTl9ORVd9OiAke0pTT04uc3RyaW5naWZ5KHtcbiAgICAgIGFyZ3M6IG9wdHMuYXJncyxcbiAgICAgIGZxbjogb3B0cy50eXBlLmZxbixcbiAgICAgIGNvbW1lbnRzOiBvcHRzLmNvbW1lbnRzLFxuICAgICAgc3ludGg6IG9wdHMuc3ludGggPz8gdHJ1ZSxcbiAgICAgIHBvc3Q6IG9wdHMucG9zdCA/PyB0cnVlLFxuICAgIH0gYXMgUHJvamVuSW5pdCl9LGA7XG4gICAgb3B0aW9uc1dpdGhEZWZhdWx0cy5wdXNoKFBST0pFTl9ORVcpO1xuICB9XG5cbiAgLy8gZ2VuZXJhdGUgcmVuZGVyaW5nXG4gIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcbiAgcmVzdWx0LnB1c2goXCJ7XCIpO1xuXG4gIC8vIHJlbmRlciBvcHRpb25zIHdpdGggZGVmYXVsdHNcbiAgb3B0aW9uc1dpdGhEZWZhdWx0cy5zb3J0KCk7XG4gIGZvciAoY29uc3Qgb3B0aW9uTmFtZSBvZiBvcHRpb25zV2l0aERlZmF1bHRzKSB7XG4gICAgcmVzdWx0LnB1c2goYCR7VEFCfSR7cmVuZGVyc1tvcHRpb25OYW1lXX1gKTtcbiAgfVxuICBpZiAocmVzdWx0Lmxlbmd0aCA+IDEpIHtcbiAgICByZXN1bHQucHVzaChcIlwiKTtcbiAgfVxuXG4gIC8vIHJlbmRlciBvcHRpb25zIHdpdGhvdXQgZGVmYXVsdHMgYXMgY29tbWVudHNcbiAgaWYgKG9wdHMuY29tbWVudHMgPT09IEluaXRQcm9qZWN0T3B0aW9uSGludHMuQUxMKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IG9wdHMudHlwZS5vcHRpb25zLmZpbHRlcihcbiAgICAgIChvcHQpID0+ICFvcHQuZGVwcmVjYXRlZCAmJiBvcHRzLmFyZ3Nbb3B0Lm5hbWVdID09PSB1bmRlZmluZWQsXG4gICAgKTtcbiAgICByZXN1bHQucHVzaCguLi5yZW5kZXJDb21tZW50ZWRPcHRpb25zQnlNb2R1bGUocmVuZGVycywgb3B0aW9ucykpO1xuICB9IGVsc2UgaWYgKG9wdHMuY29tbWVudHMgPT09IEluaXRQcm9qZWN0T3B0aW9uSGludHMuRkVBVFVSRUQpIHtcbiAgICBjb25zdCBvcHRpb25zID0gb3B0cy50eXBlLm9wdGlvbnMuZmlsdGVyKFxuICAgICAgKG9wdCkgPT5cbiAgICAgICAgIW9wdC5kZXByZWNhdGVkICYmIG9wdHMuYXJnc1tvcHQubmFtZV0gPT09IHVuZGVmaW5lZCAmJiBvcHQuZmVhdHVyZWQsXG4gICAgKTtcbiAgICByZXN1bHQucHVzaCguLi5yZW5kZXJDb21tZW50ZWRPcHRpb25zSW5PcmRlcihyZW5kZXJzLCBvcHRpb25zKSk7XG4gIH0gZWxzZSBpZiAob3B0cy5jb21tZW50cyA9PT0gSW5pdFByb2plY3RPcHRpb25IaW50cy5OT05FKSB7XG4gICAgLy8gZG9uJ3QgcmVuZGVyIGFueSBleHRyYSBvcHRpb25zXG4gIH1cblxuICBpZiAocmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXSA9PT0gXCJcIikge1xuICAgIHJlc3VsdC5wb3AoKTtcbiAgfVxuICByZXN1bHQucHVzaChcIn1cIik7XG4gIHJldHVybiB7IHJlbmRlcmVkT3B0aW9uczogcmVzdWx0LmpvaW4oXCJcXG5cIiksIGltcG9ydHM6IGFsbEltcG9ydHMgfTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyQ29tbWVudGVkT3B0aW9uc0J5TW9kdWxlKFxuICByZW5kZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBvcHRpb25zOiBpbnZlbnRvcnkuSW52ZW50b3J5UHJvamVjdE9wdGlvbltdLFxuKSB7XG4gIGNvbnN0IG9wdGlvbnNCeU1vZHVsZTogUmVjb3JkPHN0cmluZywgaW52ZW50b3J5LkludmVudG9yeVByb2plY3RPcHRpb25bXT4gPVxuICAgIHt9O1xuXG4gIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICBjb25zdCBwYXJlbnRNb2R1bGUgPSBvcHRpb24ucGFyZW50O1xuICAgIG9wdGlvbnNCeU1vZHVsZVtwYXJlbnRNb2R1bGVdID0gb3B0aW9uc0J5TW9kdWxlW3BhcmVudE1vZHVsZV0gPz8gW107XG4gICAgb3B0aW9uc0J5TW9kdWxlW3BhcmVudE1vZHVsZV0ucHVzaChvcHRpb24pO1xuICB9XG5cbiAgZm9yIChjb25zdCBwYXJlbnRNb2R1bGUgaW4gb3B0aW9uc0J5TW9kdWxlKSB7XG4gICAgb3B0aW9uc0J5TW9kdWxlW3BhcmVudE1vZHVsZV0uc29ydCgobzEsIG8yKSA9PlxuICAgICAgbzEubmFtZS5sb2NhbGVDb21wYXJlKG8yLm5hbWUpLFxuICAgICk7XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgY29uc3QgbWFyZ2luU2l6ZSA9IE1hdGgubWF4KFxuICAgIC4uLm9wdGlvbnMubWFwKChvcHQpID0+IHJlbmRlcnNbb3B0Lm5hbWVdLmxlbmd0aCksXG4gICk7XG4gIGZvciAoY29uc3QgW21vZHVsZU5hbWUsIG9wdGlvbkdyb3VwXSBvZiBPYmplY3QuZW50cmllcyhcbiAgICBvcHRpb25zQnlNb2R1bGUsXG4gICkuc29ydCgpKSB7XG4gICAgcmVzdWx0LnB1c2goYCR7VEFCfS8qICR7bW9kdWxlTmFtZX0gKi9gKTtcbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25Hcm91cCkge1xuICAgICAgY29uc3QgcGFyYW1SZW5kZXIgPSByZW5kZXJzW29wdGlvbi5uYW1lXTtcbiAgICAgIGNvbnN0IGRvY3N0cmluZyA9IG9wdGlvbi5kb2NzIHx8IFwiTm8gZG9jdW1lbnRhdGlvbiBmb3VuZC5cIjtcbiAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICBgJHtUQUJ9JHtwYXJhbVJlbmRlcn0ke21ha2VQYWRkaW5nKFxuICAgICAgICAgIG1hcmdpblNpemUgLSBwYXJhbVJlbmRlci5sZW5ndGggKyAyLFxuICAgICAgICApfS8qICR7ZG9jc3RyaW5nfSAqL2AsXG4gICAgICApO1xuICAgIH1cbiAgICByZXN1bHQucHVzaChcIlwiKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiByZW5kZXJDb21tZW50ZWRPcHRpb25zSW5PcmRlcihcbiAgcmVuZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgb3B0aW9uczogaW52ZW50b3J5LlByb2plY3RPcHRpb25bXSxcbikge1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgY29uc3QgbWFyZ2luU2l6ZSA9IE1hdGgubWF4KFxuICAgIC4uLm9wdGlvbnMubWFwKChvcHQpID0+IHJlbmRlcnNbb3B0Lm5hbWVdLmxlbmd0aCksXG4gICk7XG4gIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICBjb25zdCBwYXJhbVJlbmRlciA9IHJlbmRlcnNbb3B0aW9uLm5hbWVdO1xuICAgIGNvbnN0IGRvY3N0cmluZyA9IG9wdGlvbi5kb2NzIHx8IFwiTm8gZG9jdW1lbnRhdGlvbiBmb3VuZC5cIjtcbiAgICByZXN1bHQucHVzaChcbiAgICAgIGAke1RBQn0ke3BhcmFtUmVuZGVyfSR7bWFrZVBhZGRpbmcoXG4gICAgICAgIG1hcmdpblNpemUgLSBwYXJhbVJlbmRlci5sZW5ndGggKyAyLFxuICAgICAgKX0vKiAke2RvY3N0cmluZ30gKi9gLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgdmFsdWUgYXMgYSBKYXZhU2NyaXB0IHZhbHVlLCBjb252ZXJ0aW5nIHN0cmluZ3MgdG8gZW51bXMgd2hlcmVcbiAqIGFwcHJvcHJpYXRlLiBUaGUgdHlwZSBtdXN0IGJlIEpTT04tbGlrZSAoc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4sIGFycmF5LFxuICogZW51bSwgb3IgSlNPTiBvYmplY3QpLlxuICpcbiAqIFJldHVybnMgYSBKYXZhU2NyaXB0IGV4cHJlc3Npb24gYXMgYSBzdHJpbmcsIGFuZCB0aGUgbmFtZXMgb2YgYW55XG4gKiBuZWNlc3NhcnkgaW1wb3J0cy5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyQXJnQXNKYXZhU2NyaXB0KFxuICBhcmc6IGFueSxcbiAgb3B0aW9uOiBpbnZlbnRvcnkuSW52ZW50b3J5UHJvamVjdE9wdGlvbixcbikge1xuICBpZiAob3B0aW9uLmtpbmQgPT09IFwiZW51bVwiKSB7XG4gICAgaWYgKCFvcHRpb24uZnFuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGZxbiBmaWVsZCBpcyBtaXNzaW5nIGZyb20gZW51bSBvcHRpb24gJHtvcHRpb24ubmFtZX1gKTtcbiAgICB9XG4gICAgY29uc3QgcGFydHMgPSBvcHRpb24uZnFuLnNwbGl0KFwiLlwiKTsgLy8gLT4gWydwcm9qZW4nLCAnd2ViJywgJ015RW51bSddXG4gICAgY29uc3QgZW51bUNob2ljZSA9IFN0cmluZyhhcmcpLnRvVXBwZXJDYXNlKCkucmVwbGFjZSgvLS9nLCBcIl9cIik7IC8vIGN1c3RvbS12YWx1ZSAtPiBDVVNUT01fVkFMVUVcbiAgICBjb25zdCBqcyA9IGAke3BhcnRzLnNsaWNlKDEpLmpvaW4oXCIuXCIpfS4ke2VudW1DaG9pY2V9YDsgLy8gLT4gd2ViLk15RW51bS5DVVNUT01fVkFMVUVcbiAgICBjb25zdCBtb2R1bGVOYW1lID0gcGFydHNbMF07IC8vIC0+IHByb2plblxuICAgIGNvbnN0IGltcG9ydE5hbWUgPSBwYXJ0c1sxXTsgLy8gLT4gd2ViXG4gICAgcmV0dXJuIHsganMsIG1vZHVsZU5hbWUsIGltcG9ydE5hbWUgfTtcbiAgfSBlbHNlIGlmIChvcHRpb24uanNvbkxpa2UpIHtcbiAgICByZXR1cm4geyBqczogSlNPTi5zdHJpbmdpZnkoYXJnKSB9O1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBVbmV4cGVjdGVkIG9wdGlvbiAke29wdGlvbi5uYW1lfSAtIGNhbm5vdCByZW5kZXIgYSB2YWx1ZSBmb3IgdGhpcyBvcHRpb24gYmVjYXVzZSBpdCBkb2VzIG5vdCBoYXZlIGEgSlNPTi1saWtlIHR5cGUuYCxcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1ha2VQYWRkaW5nKHBhZGRpbmdMZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBcIiBcIi5yZXBlYXQocGFkZGluZ0xlbmd0aCk7XG59XG4iXX0=
|