projen 0.101.37 → 0.102.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +381 -380
- 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 +5 -4
- 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/cdktn/cdktn-app-ts.js +1 -1
- package/lib/cdktn/cdktn-config.js +1 -1
- package/lib/cdktn/cdktn-construct.js +1 -1
- package/lib/cdktn/cdktn-deps.js +1 -1
- package/lib/cdktn/cdktn-tasks.js +1 -1
- package/lib/circleci/circleci.js +1 -1
- package/lib/component.js +2 -2
- 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/actions.const.d.ts +44 -0
- package/lib/github/actions.const.js +50 -0
- package/lib/github/auto-approve.js +1 -1
- package/lib/github/auto-merge.js +1 -1
- package/lib/github/auto-queue.js +1 -1
- package/lib/github/dependabot.js +1 -1
- package/lib/github/dependency-review.js +4 -3
- package/lib/github/github-credentials.js +4 -3
- 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.js +1 -1
- package/lib/github/pr-template.js +1 -1
- package/lib/github/pull-request-backport.js +4 -3
- package/lib/github/pull-request-lint.js +5 -4
- package/lib/github/stale.js +5 -3
- package/lib/github/task-workflow-job.js +1 -1
- package/lib/github/task-workflow.js +1 -1
- package/lib/github/workflow-actions.js +5 -4
- package/lib/github/workflow-jobs.js +1 -1
- package/lib/github/workflow-steps.js +6 -5
- package/lib/github/workflows.js +8 -7
- 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.js +1 -1
- package/lib/javascript/biome/biome.js +1 -1
- package/lib/javascript/bundler.js +1 -1
- package/lib/javascript/eslint.js +1 -1
- 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.d.ts +3 -2
- package/lib/javascript/node-project.js +9 -8
- 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.js +1 -1
- 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/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.js +1 -1
- package/lib/projects.js +1 -1
- package/lib/projenrc-json.js +1 -1
- package/lib/projenrc.js +1 -1
- package/lib/python/pip.js +1 -1
- package/lib/python/poetry.js +2 -2
- package/lib/python/projenrc.js +1 -1
- 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-config.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 +5 -4
- 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 +5 -3
- 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.js +1 -1
- package/lib/typescript/projenrc.js +1 -1
- 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/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 +5 -3
package/lib/github/workflows.js
CHANGED
|
@@ -5,6 +5,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
|
5
5
|
const node_crypto_1 = require("node:crypto");
|
|
6
6
|
const node_path_1 = require("node:path");
|
|
7
7
|
const case_1 = require("case");
|
|
8
|
+
const actions_const_1 = require("./actions.const");
|
|
8
9
|
const _resolve_1 = require("../_resolve");
|
|
9
10
|
const component_1 = require("../component");
|
|
10
11
|
const util_1 = require("../util");
|
|
@@ -17,7 +18,7 @@ const yaml_1 = require("../yaml");
|
|
|
17
18
|
* @see https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions
|
|
18
19
|
*/
|
|
19
20
|
class GithubWorkflow extends component_1.Component {
|
|
20
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.GithubWorkflow", version: "0.
|
|
21
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.GithubWorkflow", version: "0.102.0" };
|
|
21
22
|
/**
|
|
22
23
|
* The name of the workflow. GitHub displays the names of your workflows under your repository's
|
|
23
24
|
* "Actions" tab.
|
|
@@ -570,7 +571,7 @@ function setupTools(tools) {
|
|
|
570
571
|
throw new Error("java.packageManager is required when java.cache is true");
|
|
571
572
|
}
|
|
572
573
|
steps.push({
|
|
573
|
-
uses:
|
|
574
|
+
uses: actions_const_1.GitHubActions.ACTIONS_SETUP_JAVA,
|
|
574
575
|
with: {
|
|
575
576
|
distribution: tools.java.distribution ?? "corretto",
|
|
576
577
|
"java-version": tools.java.version,
|
|
@@ -580,7 +581,7 @@ function setupTools(tools) {
|
|
|
580
581
|
}
|
|
581
582
|
if (tools.node) {
|
|
582
583
|
steps.push({
|
|
583
|
-
uses:
|
|
584
|
+
uses: actions_const_1.GitHubActions.ACTIONS_SETUP_NODE,
|
|
584
585
|
with: {
|
|
585
586
|
"node-version": tools.node.version,
|
|
586
587
|
"package-manager-cache": tools.node.cache ?? false,
|
|
@@ -592,7 +593,7 @@ function setupTools(tools) {
|
|
|
592
593
|
throw new Error("python.packageManager is required when python.cache is true");
|
|
593
594
|
}
|
|
594
595
|
steps.push({
|
|
595
|
-
uses:
|
|
596
|
+
uses: actions_const_1.GitHubActions.ACTIONS_SETUP_PYTHON,
|
|
596
597
|
with: {
|
|
597
598
|
"python-version": tools.python.version,
|
|
598
599
|
...(tools.python.cache && { cache: tools.python.packageManager }),
|
|
@@ -601,7 +602,7 @@ function setupTools(tools) {
|
|
|
601
602
|
}
|
|
602
603
|
if (tools.go) {
|
|
603
604
|
steps.push({
|
|
604
|
-
uses:
|
|
605
|
+
uses: actions_const_1.GitHubActions.ACTIONS_SETUP_GO,
|
|
605
606
|
with: {
|
|
606
607
|
"go-version": tools.go.version,
|
|
607
608
|
cache: tools.go.cache ?? false,
|
|
@@ -610,7 +611,7 @@ function setupTools(tools) {
|
|
|
610
611
|
}
|
|
611
612
|
if (tools.dotnet) {
|
|
612
613
|
steps.push({
|
|
613
|
-
uses:
|
|
614
|
+
uses: actions_const_1.GitHubActions.ACTIONS_SETUP_DOTNET,
|
|
614
615
|
with: {
|
|
615
616
|
"dotnet-version": tools.dotnet.version,
|
|
616
617
|
cache: tools.dotnet.cache ?? false,
|
|
@@ -628,4 +629,4 @@ function verifyJobConstraints(jobs) {
|
|
|
628
629
|
}
|
|
629
630
|
}
|
|
630
631
|
}
|
|
631
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3dzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dpdGh1Yi93b3JrZmxvd3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZDQUF5QztBQUN6Qyx5Q0FBb0M7QUFDcEMsK0JBQTZCO0FBSzdCLDBDQUFzQztBQUN0Qyw0Q0FBeUM7QUFDekMsa0NBQW1EO0FBQ25ELGtDQUFtQztBQXlFbkM7Ozs7OztHQU1HO0FBQ0gsTUFBYSxjQUFlLFNBQVEscUJBQVM7O0lBQzNDOzs7O09BSUc7SUFDYSxJQUFJLENBQVM7SUFFN0I7Ozs7T0FJRztJQUNILElBQVcsSUFBSTtRQUliLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDYSxXQUFXLENBQXNCO0lBRWpEOztPQUVHO0lBQ2EsR0FBRyxDQUEwQjtJQUU3Qzs7T0FFRztJQUNhLElBQUksQ0FBdUI7SUFFM0M7O09BRUc7SUFDYSxpQkFBaUIsQ0FBb0I7SUFFckQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLE9BQU8sQ0FBVTtJQUVQLEtBQUssR0FHbEIsRUFBRSxDQUFDO0lBQ0MsT0FBTyxDQUF3QjtJQUMvQixNQUFNLEdBQXVCLEVBQUUsQ0FBQztJQUV4Qzs7OztPQUlHO0lBQ0gsWUFDRSxNQUFjLEVBQ2QsSUFBWSxFQUNaLFVBQWlDLEVBQUU7UUFFbkMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRXBELE1BQU0sa0JBQWtCLEdBQXVCO1lBQzdDLGdCQUFnQixFQUFFLEtBQUs7WUFDdkIsS0FBSyxFQUFFLHdCQUF3QjtTQUNoQyxDQUFDO1FBRUYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsZ0JBQWdCO1lBQ3pDLENB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QUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQ2IsR0FBRyxFQUFFLGdIQUFnSCxDQUN0SCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgZXh0bmFtZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IHNuYWtlIH0gZnJvbSBcImNhc2VcIjtcbmltcG9ydCB0eXBlIHsgR2l0SHViQWN0aW9uc1Byb3ZpZGVyIH0gZnJvbSBcIi4vYWN0aW9ucy1wcm92aWRlclwiO1xuaW1wb3J0IHR5cGUgeyBHaXRIdWIgfSBmcm9tIFwiLi9naXRodWJcIjtcbmltcG9ydCB0eXBlIHsgR2l0aHViQ3JlZGVudGlhbHMgfSBmcm9tIFwiLi9naXRodWItY3JlZGVudGlhbHNcIjtcbmltcG9ydCB0eXBlICogYXMgd29ya2Zsb3dzIGZyb20gXCIuL3dvcmtmbG93cy1tb2RlbFwiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCIuLi9fcmVzb2x2ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbXBvbmVudFwiO1xuaW1wb3J0IHsgZGVlcE1lcmdlLCBrZWJhYkNhc2VLZXlzIH0gZnJvbSBcIi4uL3V0aWxcIjtcbmltcG9ydCB7IFlhbWxGaWxlIH0gZnJvbSBcIi4uL3lhbWxcIjtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBgY29uY3VycmVuY3lgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbmN1cnJlbmN5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBDb25jdXJyZW5jeSBncm91cCBjb250cm9scyB3aGljaCB3b3JrZmxvdyBydW5zIHdpbGwgc2hhcmUgdGhlIHNhbWUgY29uY3VycmVuY3kgbGltaXQuXG4gICAqIEZvciBleGFtcGxlLCBpZiB5b3Ugc3BlY2lmeSBgJHt7IGdpdGh1Yi53b3JrZmxvdyB9fS0ke3sgZ2l0aHViLnJlZiB9fWAsIHdvcmtmbG93IHJ1bnMgdHJpZ2dlcmVkXG4gICAqIG9uIHRoZSBzYW1lIGJyYW5jaCBjYW5ub3QgcnVuIGNvbmN1cnJlbnRseSwgYnV0IHdvcmtmbG93cyBydW5zIHRyaWdnZXJlZCBvbiBkaWZmZXJlbnQgYnJhbmNoZXMgY2FuLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtICR7eyBnaXRodWIud29ya2Zsb3cgfX1cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL3dyaXRpbmctd29ya2Zsb3dzL2Nob29zaW5nLXdoYXQteW91ci13b3JrZmxvdy1kb2VzL3VzaW5nLWNvbmN1cnJlbmN5I2V4YW1wbGUtY29uY3VycmVuY3ktZ3JvdXBzXG4gICAqL1xuICByZWFkb25seSBncm91cD86IHN0cmluZztcblxuICAvKipcbiAgICogV2hlbiBhIHdvcmtmbG93IGlzIHRyaWdnZXJlZCB3aGlsZSBhbm90aGVyIG9uZSAoaW4gdGhlIHNhbWUgZ3JvdXApIGlzIHJ1bm5pbmcsIHNob3VsZCBHaXRIdWIgY2FuY2VsXG4gICAqIHRoZSBydW5uaW5nIHdvcmtmbG93P1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgY2FuY2VsSW5Qcm9ncmVzcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYEdpdGh1YldvcmtmbG93YC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHaXRodWJXb3JrZmxvd09wdGlvbnMge1xuICAvKipcbiAgICogRm9yY2UgdGhlIGNyZWF0aW9uIG9mIHRoZSB3b3JrZmxvdyBldmVuIGlmIGB3b3JrZmxvd3NgIGlzIGRpc2FibGVkIGluIGBHaXRIdWJgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZm9yY2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgY29uY3VycmVuY3kgbGltaXRhdGlvbnMuIFVzZSBgY29uY3VycmVuY3lPcHRpb25zYCB0byBjb25maWd1cmUgc3BlY2lmaWMgbm9uIGRlZmF1bHQgdmFsdWVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgbGltaXRDb25jdXJyZW5jeT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbmN1cnJlbmN5IGVuc3VyZXMgdGhhdCBvbmx5IGEgc2luZ2xlIGpvYiBvciB3b3JrZmxvdyB1c2luZyB0aGUgc2FtZSBjb25jdXJyZW5jeSBncm91cCB3aWxsIHJ1biBhdCBhIHRpbWUuIEN1cnJlbnRseSBpbiBiZXRhLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHsgZ3JvdXA6ICR7eyBnaXRodWIud29ya2Zsb3cgfX0sIGNhbmNlbEluUHJvZ3Jlc3M6IGZhbHNlIH1cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL2xlYXJuLWdpdGh1Yi1hY3Rpb25zL3dvcmtmbG93LXN5bnRheC1mb3ItZ2l0aHViLWFjdGlvbnMjY29uY3VycmVuY3lcbiAgICovXG4gIHJlYWRvbmx5IGNvbmN1cnJlbmN5T3B0aW9ucz86IENvbmN1cnJlbmN5T3B0aW9ucztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IGZvciB0aGUgd29ya2Zsb3cuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gYWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICovXG4gIHJlYWRvbmx5IGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFNldCBhIGN1c3RvbSBmaWxlIG5hbWUgZm9yIHRoZSB3b3JrZmxvdyBkZWZpbml0aW9uIGZpbGUuIE11c3QgaW5jbHVkZSBlaXRoZXIgYSAueW1sIG9yIC55YW1sIGZpbGUgZXh0ZW5zaW9uLlxuICAgKlxuICAgKiBVc2UgdGhpcyBvcHRpb24gdG8gc2V0IGEgZmlsZSBuYW1lIGZvciB0aGUgd29ya2Zsb3cgZmlsZSwgdGhhdCBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgZGlzcGxheSBuYW1lLlxuICAgKlxuICAgKiBAZXhhbXBsZSBcImJ1aWxkLW5ldy55bWxcIlxuICAgKiBAZXhhbXBsZSBcIm15LXdvcmtmbG93LnlhbWxcIlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgcGF0aC1zYWZlIHZlcnNpb24gb2YgdGhlIHdvcmtmbG93IG5hbWUgcGx1cyB0aGUgLnltbCBmaWxlIGVuZGluZywgZS5nLiBidWlsZC55bWxcbiAgICovXG4gIHJlYWRvbmx5IGZpbGVOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdvcmtmbG93IGZvciBHaXRIdWIuXG4gKlxuICogQSB3b3JrZmxvdyBpcyBhIGNvbmZpZ3VyYWJsZSBhdXRvbWF0ZWQgcHJvY2VzcyBtYWRlIHVwIG9mIG9uZSBvciBtb3JlIGpvYnMuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL3JlZmVyZW5jZS93b3JrZmxvdy1zeW50YXgtZm9yLWdpdGh1Yi1hY3Rpb25zXG4gKi9cbmV4cG9ydCBjbGFzcyBHaXRodWJXb3JrZmxvdyBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgd29ya2Zsb3cuIEdpdEh1YiBkaXNwbGF5cyB0aGUgbmFtZXMgb2YgeW91ciB3b3JrZmxvd3MgdW5kZXIgeW91ciByZXBvc2l0b3J5J3NcbiAgICogXCJBY3Rpb25zXCIgdGFiLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvd3JpdGluZy13b3JrZmxvd3Mvd29ya2Zsb3ctc3ludGF4LWZvci1naXRodWItYWN0aW9ucyNuYW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbGwgY3VycmVudCBqb2JzIG9mIHRoZSB3b3JrZmxvdy5cbiAgICpcbiAgICogVGhpcyBpcyBhIHJlYWQtb25seSBjb3B5LCB1c2UgdGhlIHJlc3BlY3RpdmUgaGVscGVyIG1ldGhvZHMgdG8gYWRkLCB1cGRhdGUgb3IgcmVtb3ZlIGpvYnMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGpvYnMoKTogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICB3b3JrZmxvd3MuSm9iIHwgd29ya2Zsb3dzLkpvYkNhbGxpbmdSZXVzYWJsZVdvcmtmbG93XG4gID4ge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2pvYnMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgY29uY3VycmVuY3kgY29uZmlndXJhdGlvbiBvZiB0aGUgd29ya2Zsb3cuIHVuZGVmaW5lZCBtZWFucyBubyBjb25jdXJyZW5jeSBsaW1pdGF0aW9ucy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb25jdXJyZW5jeT86IENvbmN1cnJlbmN5T3B0aW9ucztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IGZvciB0aGUgd29ya2Zsb3cuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogVGhlIHdvcmtmbG93IFlBTUwgZmlsZS4gTWF5IG5vdCBleGlzdCBpZiBgd29ya2Zsb3dzRW5hYmxlZGAgaXMgZmFsc2Ugb24gYEdpdEh1YmAuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZmlsZTogWWFtbEZpbGUgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEdpdEh1YiBBUEkgYXV0aGVudGljYXRpb24gbWV0aG9kIHVzZWQgYnkgcHJvamVuIHdvcmtmbG93cy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcm9qZW5DcmVkZW50aWFsczogR2l0aHViQ3JlZGVudGlhbHM7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIGZvciB3b3JrZmxvdyBydW5zIGdlbmVyYXRlZCBmcm9tIHRoZSB3b3JrZmxvdy4gR2l0SHViIGRpc3BsYXlzIHRoZVxuICAgKiB3b3JrZmxvdyBydW4gbmFtZSBpbiB0aGUgbGlzdCBvZiB3b3JrZmxvdyBydW5zIG9uIHlvdXIgcmVwb3NpdG9yeSdzXG4gICAqIFwiQWN0aW9uc1wiIHRhYi4gSWYgYHJ1bi1uYW1lYCBpcyBvbWl0dGVkIG9yIGlzIG9ubHkgd2hpdGVzcGFjZSwgdGhlbiB0aGUgcnVuXG4gICAqIG5hbWUgaXMgc2V0IHRvIGV2ZW50LXNwZWNpZmljIGluZm9ybWF0aW9uIGZvciB0aGUgd29ya2Zsb3cgcnVuLiBGb3JcbiAgICogZXhhbXBsZSwgZm9yIGEgd29ya2Zsb3cgdHJpZ2dlcmVkIGJ5IGEgYHB1c2hgIG9yIGBwdWxsX3JlcXVlc3RgIGV2ZW50LCBpdFxuICAgKiBpcyBzZXQgYXMgdGhlIGNvbW1pdCBtZXNzYWdlLlxuICAgKlxuICAgKiBUaGlzIHZhbHVlIGNhbiBpbmNsdWRlIGV4cHJlc3Npb25zIGFuZCBjYW4gcmVmZXJlbmNlIGBnaXRodWJgIGFuZCBgaW5wdXRzYFxuICAgKiBjb250ZXh0cy5cbiAgICovXG4gIHB1YmxpYyBydW5OYW1lPzogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2pvYnM6IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAgd29ya2Zsb3dzLkpvYiB8IHdvcmtmbG93cy5Kb2JDYWxsaW5nUmV1c2FibGVXb3JrZmxvd1xuICA+ID0ge307XG4gIHByaXZhdGUgYWN0aW9uczogR2l0SHViQWN0aW9uc1Byb3ZpZGVyO1xuICBwcml2YXRlIGV2ZW50czogd29ya2Zsb3dzLlRyaWdnZXJzID0ge307XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBnaXRodWIgVGhlIEdpdEh1YiBjb21wb25lbnQgb2YgdGhlIHByb2plY3QgdGhpcyB3b3JrZmxvdyBiZWxvbmdzIHRvLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgd29ya2Zsb3csIGRpc3BsYXllZCB1bmRlciB0aGUgcmVwb3NpdG9yeSdzIFwiQWN0aW9uc1wiIHRhYi5cbiAgICogQHBhcmFtIG9wdGlvbnMgQWRkaXRpb25hbCBvcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgd29ya2Zsb3cuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBnaXRodWI6IEdpdEh1YixcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9uczogR2l0aHViV29ya2Zsb3dPcHRpb25zID0ge30sXG4gICkge1xuICAgIHN1cGVyKGdpdGh1Yi5wcm9qZWN0LCBgJHtuZXcudGFyZ2V0Lm5hbWV9IyR7bmFtZX1gKTtcblxuICAgIGNvbnN0IGRlZmF1bHRDb25jdXJyZW5jeTogQ29uY3VycmVuY3lPcHRpb25zID0ge1xuICAgICAgY2FuY2VsSW5Qcm9ncmVzczogZmFsc2UsXG4gICAgICBncm91cDogXCIke3sgZ2l0aHViLndvcmtmbG93IH19XCIsXG4gICAgfTtcblxuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5jb25jdXJyZW5jeSA9IG9wdGlvbnMubGltaXRDb25jdXJyZW5jeVxuICAgICAgPyAoZGVlcE1lcmdlKFtcbiAgICAgICAgICBkZWZhdWx0Q29uY3VycmVuY3ksXG4gICAgICAgICAgb3B0aW9ucy5jb25jdXJyZW5jeU9wdGlvbnMsXG4gICAgICAgIF0pIGFzIENvbmN1cnJlbmN5T3B0aW9ucylcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMucHJvamVuQ3JlZGVudGlhbHMgPSBnaXRodWIucHJvamVuQ3JlZGVudGlhbHM7XG4gICAgdGhpcy5hY3Rpb25zID0gZ2l0aHViLmFjdGlvbnM7XG5cbiAgICB0aGlzLmVudiA9IG9wdGlvbnMuZW52O1xuXG4gICAgY29uc3Qgd29ya2Zsb3dzRW5hYmxlZCA9IGdpdGh1Yi53b3JrZmxvd3NFbmFibGVkIHx8IG9wdGlvbnMuZm9yY2U7XG5cbiAgICBpZiAod29ya2Zsb3dzRW5hYmxlZCkge1xuICAgICAgY29uc3QgZmlsZU5hbWUgPSBvcHRpb25zLmZpbGVOYW1lID8/IGAke25hbWUudG9Mb2NhbGVMb3dlckNhc2UoKX0ueW1sYDtcbiAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IGV4dG5hbWUoZmlsZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGlmICghW1wiLnltbFwiLCBcIi55YW1sXCJdLmluY2x1ZGVzKGV4dGVuc2lvbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBHaXRIdWIgV29ya2Zsb3cgZmlsZXMgbXVzdCBoYXZlIGVpdGhlciBhIC55bWwgb3IgLnlhbWwgZmlsZSBleHRlbnNpb24sIGdvdDogJHtmaWxlTmFtZX1gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZpbGUgPSBuZXcgWWFtbEZpbGUodGhpcy5wcm9qZWN0LCBgLmdpdGh1Yi93b3JrZmxvd3MvJHtmaWxlTmFtZX1gLCB7XG4gICAgICAgIG9iajogKCkgPT4gdGhpcy5yZW5kZXJXb3JrZmxvdygpLFxuICAgICAgICAvLyBHaXRIdWIgbmVlZHMgdG8gcmVhZCB0aGUgZmlsZSBmcm9tIHRoZSByZXBvc2l0b3J5IGluIG9yZGVyIHRvIHdvcmsuXG4gICAgICAgIGNvbW1pdHRlZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgZXZlbnRzIHRvIHRyaWdnZXJzIHRoZSB3b3JrZmxvdy5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50cyBUaGUgZXZlbnQocykgdG8gdHJpZ2dlciB0aGUgd29ya2Zsb3cuXG4gICAqL1xuICBwdWJsaWMgb24oZXZlbnRzOiB3b3JrZmxvd3MuVHJpZ2dlcnMpIHtcbiAgICB0aGlzLmV2ZW50cyA9IHtcbiAgICAgIC4uLnRoaXMuZXZlbnRzLFxuICAgICAgLi4uZXZlbnRzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHNpbmdsZSBqb2IgdG8gdGhlIHdvcmtmbG93LlxuICAgKiBAcGFyYW0gaWQgVGhlIGpvYiBuYW1lICh1bmlxdWUgd2l0aGluIHRoZSB3b3JrZmxvdylcbiAgICogQHBhcmFtIGpvYiBUaGUgam9iIHNwZWNpZmljYXRpb25cbiAgICovXG4gIHB1YmxpYyBhZGRKb2IoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBqb2I6IHdvcmtmbG93cy5Kb2IgfCB3b3JrZmxvd3MuSm9iQ2FsbGluZ1JldXNhYmxlV29ya2Zsb3csXG4gICk6IHZvaWQge1xuICAgIHRoaXMuYWRkSm9icyh7IFtpZF06IGpvYiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgam9icyB0byB0aGUgd29ya2Zsb3cuXG4gICAqXG4gICAqIEBwYXJhbSBqb2JzIEpvYnMgdG8gYWRkLlxuICAgKi9cbiAgcHVibGljIGFkZEpvYnMoXG4gICAgam9iczogUmVjb3JkPHN0cmluZywgd29ya2Zsb3dzLkpvYiB8IHdvcmtmbG93cy5Kb2JDYWxsaW5nUmV1c2FibGVXb3JrZmxvdz4sXG4gICkge1xuICAgIHZlcmlmeUpvYkNvbnN0cmFpbnRzKGpvYnMpO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5fam9icywgYXNzaWduSm9iU3RlcElkcyhqb2JzKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgc2luZ2xlIGpvYiBmcm9tIHRoZSB3b3JrZmxvdy5cbiAgICogQHBhcmFtIGlkIFRoZSBqb2IgbmFtZSAodW5pcXVlIHdpdGhpbiB0aGUgd29ya2Zsb3cpXG4gICAqL1xuICBwdWJsaWMgZ2V0Sm9iKFxuICAgIGlkOiBzdHJpbmcsXG4gICk6IHdvcmtmbG93cy5Kb2IgfCB3b3JrZmxvd3MuSm9iQ2FsbGluZ1JldXNhYmxlV29ya2Zsb3cge1xuICAgIHJldHVybiB0aGlzLl9qb2JzW2lkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGEgc2luZ2xlIGpvYiB0byB0aGUgd29ya2Zsb3cuXG4gICAqIEBwYXJhbSBpZCBUaGUgam9iIG5hbWUgKHVuaXF1ZSB3aXRoaW4gdGhlIHdvcmtmbG93KVxuICAgKi9cbiAgcHVibGljIHVwZGF0ZUpvYihcbiAgICBpZDogc3RyaW5nLFxuICAgIGpvYjogd29ya2Zsb3dzLkpvYiB8IHdvcmtmbG93cy5Kb2JDYWxsaW5nUmV1c2FibGVXb3JrZmxvdyxcbiAgKSB7XG4gICAgdGhpcy51cGRhdGVKb2JzKHsgW2lkXTogam9iIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgam9icyBmb3IgdGhpcyB3b3JrZmxvd1xuICAgKiBEb2VzIGEgY29tcGxldGUgcmVwbGFjZSwgaXQgZG9lcyBub3QgdHJ5IHRvIG1lcmdlIHRoZSBqb2JzXG4gICAqXG4gICAqIEBwYXJhbSBqb2JzIEpvYnMgdG8gdXBkYXRlLlxuICAgKi9cbiAgcHVibGljIHVwZGF0ZUpvYnMoXG4gICAgam9iczogUmVjb3JkPHN0cmluZywgd29ya2Zsb3dzLkpvYiB8IHdvcmtmbG93cy5Kb2JDYWxsaW5nUmV1c2FibGVXb3JrZmxvdz4sXG4gICkge1xuICAgIHZlcmlmeUpvYkNvbnN0cmFpbnRzKGpvYnMpO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5fam9icywgYXNzaWduSm9iU3RlcElkcyhqb2JzKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIHNpbmdsZSBqb2IgdG8gdGhlIHdvcmtmbG93LlxuICAgKiBAcGFyYW0gaWQgVGhlIGpvYiBuYW1lICh1bmlxdWUgd2l0aGluIHRoZSB3b3JrZmxvdylcbiAgICovXG4gIHB1YmxpYyByZW1vdmVKb2IoaWQ6IHN0cmluZykge1xuICAgIGRlbGV0ZSB0aGlzLl9qb2JzW2lkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgc2luZ2xlIHN0ZXAgZnJvbSBhIGpvYiBieSBzdGVwIElELlxuICAgKlxuICAgKiBUaGUgcmV0dXJuZWQgb2JqZWN0IGlzIGZyb3plbiBhbmQgcmVhZC1vbmx5LiBVc2UgYHJlcGxhY2VTdGVwYCBvclxuICAgKiBgcGF0Y2hTdGVwYCB0byBtb2RpZnkgYSBzdGVwLlxuICAgKlxuICAgKiBAcGFyYW0gam9iSWQgVGhlIGpvYiBuYW1lICh1bmlxdWUgd2l0aGluIHRoZSB3b3JrZmxvdylcbiAgICogQHBhcmFtIHN0ZXBJZCBUaGUgc3RlcCBJRCB0byBsb29rIHVwXG4gICAqIEByZXR1cm5zIEEgcmVhZC1vbmx5IGNvcHkgb2YgdGhlIHN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXRTdGVwKGpvYklkOiBzdHJpbmcsIHN0ZXBJZDogc3RyaW5nKTogd29ya2Zsb3dzLkpvYlN0ZXAge1xuICAgIGNvbnN0IHN0ZXBzID0gdGhpcy5yZXNvbHZlSm9iU3RlcHMoam9iSWQpO1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5maW5kU3RlcEluZGV4KHN0ZXBzLCBzdGVwSWQsIGpvYklkKTtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7IC4uLnN0ZXBzW2luZGV4XSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBlbmRzIGEgc3RlcCB0byB0aGUgZW5kIG9mIGEgam9iJ3Mgc3RlcCBsaXN0LlxuICAgKlxuICAgKiBAcGFyYW0gam9iSWQgVGhlIGpvYiBuYW1lICh1bmlxdWUgd2l0aGluIHRoZSB3b3JrZmxvdylcbiAgICogQHBhcmFtIHN0ZXAgVGhlIHN0ZXAgdG8gYWRkLiBNdXN0IGhhdmUgYW4gYGlkYCBzZXQuXG4gICAqL1xuICBwdWJsaWMgYXBwZW5kU3RlcChqb2JJZDogc3RyaW5nLCBzdGVwOiB3b3JrZmxvd3MuSm9iU3RlcCk6IHZvaWQge1xuICAgIGNvbnN0IHN0ZXBzID0gdGhpcy5yZXNvbHZlSm9iU3RlcHMoam9iSWQpO1xuICAgIHRoaXMucmVxdWlyZVN0ZXBJZChzdGVwKTtcbiAgICB0aGlzLnJlcXVpcmVVbmlxdWVTdGVwSWQoc3RlcHMsIHN0ZXAuaWQhLCBqb2JJZCk7XG4gICAgc3RlcHMucHVzaChzdGVwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyBhbiBleGlzdGluZyBzdGVwIGluIGEgam9iLCBwcmVzZXJ2aW5nIGl0cyBwb3NpdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGpvYklkIFRoZSBqb2IgbmFtZSAodW5pcXVlIHdpdGhpbiB0aGUgd29ya2Zsb3cpXG4gICAqIEBwYXJhbSBzdGVwSWQgVGhlIElEIG9mIHRoZSBzdGVwIHRvIHJlcGxhY2VcbiAgICogQHBhcmFtIHJlcGxhY2VtZW50U3RlcCBUaGUgcmVwbGFjZW1lbnQgc3RlcC4gSW5oZXJpdHMgdGhlIG9yaWdpbmFsIHN0ZXAncyBJRC5cbiAgICovXG4gIHB1YmxpYyByZXBsYWNlU3RlcChcbiAgICBqb2JJZDogc3RyaW5nLFxuICAgIHN0ZXBJZDogc3RyaW5nLFxuICAgIHJlcGxhY2VtZW50U3RlcDogd29ya2Zsb3dzLkpvYlN0ZXAsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHN0ZXBzID0gdGhpcy5yZXNvbHZlSm9iU3RlcHMoam9iSWQpO1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5maW5kU3RlcEluZGV4KHN0ZXBzLCBzdGVwSWQsIGpvYklkKTtcbiAgICBjb25zdCBuZXdTdGVwID0ge1xuICAgICAgLi4ucmVwbGFjZW1lbnRTdGVwLFxuICAgICAgaWQ6IHN0ZXBJZCxcbiAgICB9O1xuXG4gICAgc3RlcHNbaW5kZXhdID0gbmV3U3RlcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGEgc3VyZ2ljYWwgbW9kaWZpY2F0aW9uIHRvIGFuIGV4aXN0aW5nIHN0ZXAuXG4gICAqXG4gICAqIFRoZSBwcm92aWRlZCBwYXRjaCBpcyBzaGFsbG93LW1lcmdlZCBvbnRvIHRoZSBleGlzdGluZyBzdGVwLiBGaWVsZHMgbm90XG4gICAqIHByZXNlbnQgaW4gdGhlIHBhdGNoIGFyZSBwcmVzZXJ2ZWQgdW5jaGFuZ2VkLiBVc2UgYGdldFN0ZXBgIHRvIHJlYWQgdGhlXG4gICAqIGN1cnJlbnQgc3RlcCB2YWx1ZXMgYmVmb3JlIGNvbnN0cnVjdGluZyB0aGUgcGF0Y2guXG4gICAqXG4gICAqIEBwYXJhbSBqb2JJZCBUaGUgam9iIG5hbWUgKHVuaXF1ZSB3aXRoaW4gdGhlIHdvcmtmbG93KVxuICAgKiBAcGFyYW0gc3RlcElkIFRoZSBJRCBvZiB0aGUgc3RlcCB0byBwYXRjaFxuICAgKiBAcGFyYW0gcGF0Y2ggQSBwYXJ0aWFsIHN0ZXAgb2JqZWN0IHdob3NlIGZpZWxkcyBhcmUgc2hhbGxvdy1tZXJnZWQgb250byB0aGUgZXhpc3Rpbmcgc3RlcFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBBcHBlbmQgYSBmbGFnIHRvIGFuIGV4aXN0aW5nIHRlc3QgY29tbWFuZDpcbiAgICogY29uc3Qgc3RlcCA9IHdvcmtmbG93LmdldFN0ZXAoXCJidWlsZFwiLCBcInRlc3RcIik7XG4gICAqIHdvcmtmbG93LnBhdGNoU3RlcChcImJ1aWxkXCIsIFwidGVzdFwiLCB7XG4gICAqICAgcnVuOiBgJHtzdGVwLnJ1bn0gLS10ZXN0UGF0aElnbm9yZVBhdHRlcm5zIFwiaW50ZWdyYXRpb24vKlwiYCxcbiAgICogfSk7XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIEFkZCBhbiBlbnYgdmFyIHdpdGhvdXQgcmVwbGFjaW5nIGV4aXN0aW5nIG9uZXM6XG4gICAqIGNvbnN0IHN0ZXAgPSB3b3JrZmxvdy5nZXRTdGVwKFwiYnVpbGRcIiwgXCJpbnN0YWxsXCIpO1xuICAgKiB3b3JrZmxvdy5wYXRjaFN0ZXAoXCJidWlsZFwiLCBcImluc3RhbGxcIiwge1xuICAgKiAgIGVudjogeyAuLi5zdGVwLmVudiwgTk9ERV9BVVRIX1RPS0VOOiBcIiR7eyBzdGVwcy5qZnJvZy5vdXRwdXRzLm9pZGMtdG9rZW4gfX1cIiB9LFxuICAgKiB9KTtcbiAgICovXG4gIHB1YmxpYyBwYXRjaFN0ZXAoXG4gICAgam9iSWQ6IHN0cmluZyxcbiAgICBzdGVwSWQ6IHN0cmluZyxcbiAgICBwYXRjaDogd29ya2Zsb3dzLkpvYlN0ZXAsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHN0ZXBzID0gdGhpcy5yZXNvbHZlSm9iU3RlcHMoam9iSWQpO1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5maW5kU3RlcEluZGV4KHN0ZXBzLCBzdGVwSWQsIGpvYklkKTtcbiAgICBjb25zdCBjdXJyZW50U3RlcCA9IHN0ZXBzW2luZGV4XTtcbiAgICBzdGVwc1tpbmRleF0gPSB7IC4uLmN1cnJlbnRTdGVwLCAuLi5wYXRjaCwgaWQ6IHN0ZXBJZCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBzdGVwIGZyb20gYSBqb2IgYnkgc3RlcCBJRC5cbiAgICpcbiAgICogQHBhcmFtIGpvYklkIFRoZSBqb2IgbmFtZSAodW5pcXVlIHdpdGhpbiB0aGUgd29ya2Zsb3cpXG4gICAqIEBwYXJhbSBzdGVwSWQgVGhlIElEIG9mIHRoZSBzdGVwIHRvIHJlbW92ZVxuICAgKi9cbiAgcHVibGljIHJlbW92ZVN0ZXAoam9iSWQ6IHN0cmluZywgc3RlcElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBzdGVwcyA9IHRoaXMucmVzb2x2ZUpvYlN0ZXBzKGpvYklkKTtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZmluZFN0ZXBJbmRleChzdGVwcywgc3RlcElkLCBqb2JJZCk7XG4gICAgc3RlcHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnNlcnRzIGEgc3RlcCBiZWZvcmUgYW4gZXhpc3Rpbmcgc3RlcCwgaWRlbnRpZmllZCBieSBJRC5cbiAgICpcbiAgICogQHBhcmFtIGpvYklkIFRoZSBqb2IgbmFtZSAodW5pcXVlIHdpdGhpbiB0aGUgd29ya2Zsb3cpXG4gICAqIEBwYXJhbSByZWZlcmVuY2VTdGVwSWQgVGhlIElEIG9mIHRoZSBzdGVwIHRvIGluc2VydCBiZWZvcmVcbiAgICogQHBhcmFtIHN0ZXAgVGhlIHN0ZXAgdG8gaW5zZXJ0LiBNdXN0IGhhdmUgYW4gYGlkYCBzZXQuXG4gICAqL1xuICBwdWJsaWMgaW5zZXJ0U3RlcEJlZm9yZShcbiAgICBqb2JJZDogc3RyaW5nLFxuICAgIHJlZmVyZW5jZVN0ZXBJZDogc3RyaW5nLFxuICAgIHN0ZXA6IHdvcmtmbG93cy5Kb2JTdGVwLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBzdGVwcyA9IHRoaXMucmVzb2x2ZUpvYlN0ZXBzKGpvYklkKTtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZmluZFN0ZXBJbmRleChzdGVwcywgcmVmZXJlbmNlU3RlcElkLCBqb2JJZCk7XG4gICAgdGhpcy5yZXF1aXJlU3RlcElkKHN0ZXApO1xuICAgIHRoaXMucmVxdWlyZVVuaXF1ZVN0ZXBJZChzdGVwcywgc3RlcC5pZCEsIGpvYklkKTtcbiAgICBzdGVwcy5zcGxpY2UoaW5kZXgsIDAsIHN0ZXApO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc2VydHMgYSBzdGVwIGFmdGVyIGFuIGV4aXN0aW5nIHN0ZXAsIGlkZW50aWZpZWQgYnkgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBqb2JJZCBUaGUgam9iIG5hbWUgKHVuaXF1ZSB3aXRoaW4gdGhlIHdvcmtmbG93KVxuICAgKiBAcGFyYW0gcmVmZXJlbmNlU3RlcElkIFRoZSBJRCBvZiB0aGUgc3RlcCB0byBpbnNlcnQgYWZ0ZXJcbiAgICogQHBhcmFtIHN0ZXAgVGhlIHN0ZXAgdG8gaW5zZXJ0LiBNdXN0IGhhdmUgYW4gYGlkYCBzZXQuXG4gICAqL1xuICBwdWJsaWMgaW5zZXJ0U3RlcEFmdGVyKFxuICAgIGpvYklkOiBzdHJpbmcsXG4gICAgcmVmZXJlbmNlU3RlcElkOiBzdHJpbmcsXG4gICAgc3RlcDogd29ya2Zsb3dzLkpvYlN0ZXAsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHN0ZXBzID0gdGhpcy5yZXNvbHZlSm9iU3RlcHMoam9iSWQpO1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5maW5kU3RlcEluZGV4KHN0ZXBzLCByZWZlcmVuY2VTdGVwSWQsIGpvYklkKTtcbiAgICB0aGlzLnJlcXVpcmVTdGVwSWQoc3RlcCk7XG4gICAgdGhpcy5yZXF1aXJlVW5pcXVlU3RlcElkKHN0ZXBzLCBzdGVwLmlkISwgam9iSWQpO1xuICAgIHN0ZXBzLnNwbGljZShpbmRleCArIDEsIDAsIHN0ZXApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBtdXRhYmxlIHN0ZXBzIGFycmF5IGZvciBhIGpvYi5cbiAgICogVGhyb3dzIGlmIHRoZSBqb2IgaXMgbm90IGZvdW5kIG9yIGlzIGEgcmV1c2FibGUgd29ya2Zsb3cgY2FsbC5cbiAgICovXG4gIHByaXZhdGUgcmVzb2x2ZUpvYlN0ZXBzKGpvYklkOiBzdHJpbmcpOiB3b3JrZmxvd3MuSm9iU3RlcFtdIHtcbiAgICBjb25zdCBqb2IgPSB0aGlzLl9qb2JzW2pvYklkXTtcbiAgICBpZiAoIWpvYikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSm9iIFwiJHtqb2JJZH1cIiBub3QgZm91bmQgaW4gd29ya2Zsb3cgXCIke3RoaXMubmFtZX1cIi4gQXZhaWxhYmxlIGpvYnM6ICR7T2JqZWN0LmtleXModGhpcy5fam9icykuam9pbihcIiwgXCIpIHx8IFwiKG5vbmUpXCJ9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcInVzZXNcIiBpbiBqb2IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEpvYiBcIiR7am9iSWR9XCIgaXMgYSByZXVzYWJsZSB3b3JrZmxvdyBjYWxsIGFuZCBkb2VzIG5vdCBoYXZlIHN0ZXBzYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBqb2Iuc3RlcHMgYXMgd29ya2Zsb3dzLkpvYlN0ZXBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyB0aGUgaW5kZXggb2YgYSBzdGVwIGJ5IElEIG9yIG5hbWUgd2l0aGluIGEgc3RlcHMgYXJyYXkuXG4gICAqIE1hdGNoZXMgYWdhaW5zdCBgaWRgIGZpcnN0LCB0aGVuIGZhbGxzIGJhY2sgdG8gYG5hbWVgLlxuICAgKiBUaHJvd3MgaWYgdGhlIHN0ZXAgaXMgbm90IGZvdW5kLCBvciBpZiBtdWx0aXBsZSBzdGVwcyBtYXRjaCBieSBuYW1lLlxuICAgKi9cbiAgcHJpdmF0ZSBmaW5kU3RlcEluZGV4KFxuICAgIHN0ZXBzOiB3b3JrZmxvd3MuSm9iU3RlcFtdLFxuICAgIHN0ZXBJZE9yTmFtZTogc3RyaW5nLFxuICAgIGpvYklkOiBzdHJpbmcsXG4gICk6IG51bWJlciB7XG4gICAgLy8gVHJ5IGV4YWN0IGlkIG1hdGNoIGZpcnN0XG4gICAgY29uc3QgYnlJZCA9IHN0ZXBzLmZpbmRJbmRleCgocykgPT4gcy5pZCA9PT0gc3RlcElkT3JOYW1lKTtcbiAgICBpZiAoYnlJZCAhPT0gLTEpIHtcbiAgICAgIHJldHVybiBieUlkO1xuICAgIH1cblxuICAgIC8vIEZhbGwgYmFjayB0byBuYW1lIG1hdGNoXG4gICAgY29uc3QgYnlOYW1lOiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RlcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChzdGVwc1tpXS5uYW1lID09PSBzdGVwSWRPck5hbWUpIHtcbiAgICAgICAgYnlOYW1lLnB1c2goaSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGJ5TmFtZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiBieU5hbWVbMF07XG4gICAgfVxuXG4gICAgaWYgKGJ5TmFtZS5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBNdWx0aXBsZSBzdGVwcyBtYXRjaCBuYW1lIFwiJHtzdGVwSWRPck5hbWV9XCIgaW4gam9iIFwiJHtqb2JJZH1cIiAoYXQgaW5kaWNlcyAke2J5TmFtZS5qb2luKFwiLCBcIil9KS4gVXNlIGEgdW5pcXVlIHN0ZXAgXCJpZFwiIGluc3RlYWQuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgYXZhaWxhYmxlSWRzID0gc3RlcHNcbiAgICAgIC5tYXAoKHMpID0+IHMuaWQpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAuam9pbihcIiwgXCIpO1xuICAgIGNvbnN0IGF2YWlsYWJsZU5hbWVzID0gc3RlcHNcbiAgICAgIC5tYXAoKHMpID0+IHMubmFtZSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5qb2luKFwiLCBcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFN0ZXAgXCIke3N0ZXBJZE9yTmFtZX1cIiBub3QgZm91bmQgaW4gam9iIFwiJHtqb2JJZH1cIi4gQXZhaWxhYmxlIHN0ZXAgSURzOiAke2F2YWlsYWJsZUlkcyB8fCBcIihub25lKVwifS4gQXZhaWxhYmxlIHN0ZXAgbmFtZXM6ICR7YXZhaWxhYmxlTmFtZXMgfHwgXCIobm9uZSlcIn1gLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoYXQgYSBzdGVwIGhhcyBhbiBgaWRgIHNldC5cbiAgICovXG4gIHByaXZhdGUgcmVxdWlyZVN0ZXBJZChzdGVwOiB3b3JrZmxvd3MuSm9iU3RlcCk6IHZvaWQge1xuICAgIGlmICghc3RlcC5pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnU3RlcCBtdXN0IGhhdmUgYW4gXCJpZFwiIHRvIGJlIGFkZGVkIHZpYSB0aGUgc3RlcCBtdXRhdGlvbiBBUEknLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoYXQgYSBzdGVwIElEIGlzIHVuaXF1ZSB3aXRoaW4gYSBqb2IncyBzdGVwcy5cbiAgICovXG4gIHByaXZhdGUgcmVxdWlyZVVuaXF1ZVN0ZXBJZChcbiAgICBzdGVwczogd29ya2Zsb3dzLkpvYlN0ZXBbXSxcbiAgICBzdGVwSWQ6IHN0cmluZyxcbiAgICBqb2JJZDogc3RyaW5nLFxuICApOiB2b2lkIHtcbiAgICBpZiAoc3RlcHMuc29tZSgocykgPT4gcy5pZCA9PT0gc3RlcElkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgU3RlcCBJRCBcIiR7c3RlcElkfVwiIGFscmVhZHkgZXhpc3RzIGluIGpvYiBcIiR7am9iSWR9XCIuIFN0ZXAgSURzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhIGpvYi5gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbmRlcldvcmtmbG93KCkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBcInJ1bi1uYW1lXCI6IHRoaXMucnVuTmFtZSxcbiAgICAgIG9uOiBzbmFrZUNhc2VLZXlzKHRoaXMuZXZlbnRzKSxcbiAgICAgIGNvbmN1cnJlbmN5OiB0aGlzLmNvbmN1cnJlbmN5XG4gICAgICAgID8ge1xuICAgICAgICAgICAgZ3JvdXA6IHRoaXMuY29uY3VycmVuY3k/Lmdyb3VwLFxuICAgICAgICAgICAgXCJjYW5jZWwtaW4tcHJvZ3Jlc3NcIjogdGhpcy5jb25jdXJyZW5jeS5jYW5jZWxJblByb2dyZXNzLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBlbnY6IHRoaXMuZW52LFxuICAgICAgam9iczogcmVuZGVySm9icyh0aGlzLl9qb2JzLCB0aGlzLmFjdGlvbnMpLFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gc25ha2VDYXNlS2V5czxUID0gdW5rbm93bj4ob2JqOiBUKTogVCB7XG4gIGlmICh0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiIHx8IG9iaiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICByZXR1cm4gb2JqLm1hcChzbmFrZUNhc2VLZXlzKSBhcyBhbnk7XG4gIH1cblxuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGZvciAobGV0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvYmopKSB7XG4gICAgaWYgKHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT0gbnVsbCkge1xuICAgICAgdiA9IHNuYWtlQ2FzZUtleXModik7XG4gICAgfVxuICAgIHJlc3VsdFtzbmFrZShrKV0gPSB2O1xuICB9XG4gIHJldHVybiByZXN1bHQgYXMgYW55O1xufVxuXG5mdW5jdGlvbiByZW5kZXJKb2JzKFxuICBqb2JzOiBSZWNvcmQ8c3RyaW5nLCB3b3JrZmxvd3MuSm9iIHwgd29ya2Zsb3dzLkpvYkNhbGxpbmdSZXVzYWJsZVdvcmtmbG93PixcbiAgYWN0aW9uczogR2l0SHViQWN0aW9uc1Byb3ZpZGVyLFxuKSB7XG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgZm9yIChjb25zdCBbbmFtZSwgam9iXSBvZiBPYmplY3QuZW50cmllcyhqb2JzKSkge1xuICAgIHJlc3VsdFtuYW1lXSA9IHJlbmRlckpvYihqb2IpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG5cbiAgLyoqIEBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYWN0aW9ucy9yZWZlcmVuY2Uvd29ya2Zsb3ctc3ludGF4LWZvci1naXRodWItYWN0aW9ucyAqL1xuICBmdW5jdGlvbiByZW5kZXJKb2IoXG4gICAgam9iOiB3b3JrZmxvd3MuSm9iIHwgd29ya2Zsb3dzLkpvYkNhbGxpbmdSZXVzYWJsZVdvcmtmbG93LFxuICApIHtcbiAgICBjb25zdCBzdGVwcyA9IG5ldyBBcnJheTx3b3JrZmxvd3MuSm9iU3RlcD4oKTtcblxuICAgIC8vIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvdXNpbmctd29ya2Zsb3dzL3JldXNpbmctd29ya2Zsb3dzI3N1cHBvcnRlZC1rZXl3b3Jkcy1mb3Itam9icy10aGF0LWNhbGwtYS1yZXVzYWJsZS13b3JrZmxvd1xuICAgIGlmIChcInVzZXNcIiBpbiBqb2IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGpvYi5uYW1lLFxuICAgICAgICBuZWVkczogYXJyYXlPclNjYWxhcihqb2IubmVlZHMpLFxuICAgICAgICBpZjogam9iLmlmLFxuICAgICAgICBwZXJtaXNzaW9uczoga2ViYWJDYXNlS2V5cyhqb2IucGVybWlzc2lvbnMpLFxuICAgICAgICBjb25jdXJyZW5jeTogam9iLmNvbmN1cnJlbmN5LFxuICAgICAgICB1c2VzOiBqb2IudXNlcyxcbiAgICAgICAgd2l0aDogam9iLndpdGgsXG4gICAgICAgIHNlY3JldHM6IGpvYi5zZWNyZXRzLFxuICAgICAgICBzdHJhdGVneTogcmVuZGVySm9iU3RyYXRlZ3koam9iLnN0cmF0ZWd5KSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGpvYi50b29scykge1xuICAgICAgc3RlcHMucHVzaCguLi5zZXR1cFRvb2xzKGpvYi50b29scykpO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJEZWZpbmVkU3RlcHMgPSBrZWJhYkNhc2VLZXlzKHJlc29sdmUoam9iLnN0ZXBzKSwgZmFsc2UpO1xuICAgIHN0ZXBzLnB1c2goLi4udXNlckRlZmluZWRTdGVwcyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogam9iLm5hbWUsXG4gICAgICBuZWVkczogYXJyYXlPclNjYWxhcihqb2IubmVlZHMpLFxuICAgICAgXCJydW5zLW9uXCI6IGFycmF5T3JTY2FsYXIoam9iLnJ1bnNPbkdyb3VwKSA/PyBhcnJheU9yU2NhbGFyKGpvYi5ydW5zT24pLFxuICAgICAgcGVybWlzc2lvbnM6IGtlYmFiQ2FzZUtleXMoam9iLnBlcm1pc3Npb25zKSxcbiAgICAgIGVudmlyb25tZW50OiBqb2IuZW52aXJvbm1lbnQsXG4gICAgICBjb25jdXJyZW5jeTogam9iLmNvbmN1cnJlbmN5LFxuICAgICAgb3V0cHV0czogcmVuZGVySm9iT3V0cHV0cyhqb2Iub3V0cHV0cyksXG4gICAgICBlbnY6IGpvYi5lbnYsXG4gICAgICBkZWZhdWx0czoga2ViYWJDYXNlS2V5cyhqb2IuZGVmYXVsdHMpLFxuICAgICAgaWY6IGpvYi5pZixcbiAgICAgIHN0ZXBzOiBzdGVwcy5tYXAocmVuZGVyU3RlcCksXG4gICAgICBcInRpbWVvdXQtbWludXRlc1wiOiBqb2IudGltZW91dE1pbnV0ZXMsXG4gICAgICBzdHJhdGVneTogcmVuZGVySm9iU3RyYXRlZ3koam9iLnN0cmF0ZWd5KSxcbiAgICAgIFwiY29udGludWUtb24tZXJyb3JcIjogam9iLmNvbnRpbnVlT25FcnJvcixcbiAgICAgIGNvbnRhaW5lcjogam9iLmNvbnRhaW5lcixcbiAgICAgIHNlcnZpY2VzOiBqb2Iuc2VydmljZXMsXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlckpvYk91dHB1dHMob3V0cHV0OiB3b3JrZmxvd3MuSm9iW1wib3V0cHV0c1wiXSkge1xuICAgIGlmIChvdXRwdXQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCByZW5kZXJlZDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW25hbWUsIHsgc3RlcElkLCBvdXRwdXROYW1lIH1dIG9mIE9iamVjdC5lbnRyaWVzKG91dHB1dCkpIHtcbiAgICAgIHJlbmRlcmVkW25hbWVdID0gYFxcJHt7IHN0ZXBzLiR7c3RlcElkfS5vdXRwdXRzLiR7b3V0cHV0TmFtZX0gfX1gO1xuICAgIH1cbiAgICByZXR1cm4gcmVuZGVyZWQ7XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXJKb2JTdHJhdGVneShzdHJhdGVneTogd29ya2Zsb3dzLkpvYltcInN0cmF0ZWd5XCJdKSB7XG4gICAgaWYgKHN0cmF0ZWd5ID09IG51bGwpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgcmVuZGVyZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgXCJtYXgtcGFyYWxsZWxcIjogc3RyYXRlZ3kubWF4UGFyYWxsZWwsXG4gICAgICBcImZhaWwtZmFzdFwiOiBzdHJhdGVneS5mYWlsRmFzdCxcbiAgICB9O1xuXG4gICAgaWYgKHN0cmF0ZWd5Lm1hdHJpeCkge1xuICAgICAgY29uc3QgbWF0cml4OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgICAgaW5jbHVkZTogc3RyYXRlZ3kubWF0cml4LmluY2x1ZGUsXG4gICAgICAgIGV4Y2x1ZGU6IHN0cmF0ZWd5Lm1hdHJpeC5leGNsdWRlLFxuICAgICAgfTtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVzXSBvZiBPYmplY3QuZW50cmllcyhcbiAgICAgICAgc3RyYXRlZ3kubWF0cml4LmRvbWFpbiA/PyB7fSxcbiAgICAgICkpIHtcbiAgICAgICAgaWYgKGtleSBpbiBtYXRyaXgpIHtcbiAgICAgICAgICAvLyBBIGRvbWFpbiBrZXkgd2FzIHNldCB0byBgaW5jbHVkZWAsIG9yIGBleGNsdWRlYDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYElsbGVnYWwgam9iIHN0cmF0ZWd5IG1hdHJpeCBrZXk6ICR7a2V5fWApO1xuICAgICAgICB9XG4gICAgICAgIG1hdHJpeFtrZXldID0gdmFsdWVzO1xuICAgICAgfVxuICAgICAgcmVuZGVyZWQubWF0cml4ID0gbWF0cml4O1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlclN0ZXAoc3RlcDogd29ya2Zsb3dzLkpvYlN0ZXApOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHN0ZXAubmFtZSxcbiAgICAgIGlkOiBzdGVwLmlkLFxuICAgICAgaWY6IHN0ZXAuaWYsXG4gICAgICB1c2VzOiBzdGVwLnVzZXMgJiYgYWN0aW9ucy5nZXQoc3RlcC51c2VzKSxcbiAgICAgIGVudjogc3RlcC5lbnYsXG4gICAgICBydW46IHN0ZXAucnVuLFxuICAgICAgc2hlbGw6IHN0ZXAuc2hlbGwsXG4gICAgICB3aXRoOiBzdGVwLndpdGgsXG4gICAgICBcImNvbnRpbnVlLW9uLWVycm9yXCI6IHN0ZXAuY29udGludWVPbkVycm9yLFxuICAgICAgXCJ0aW1lb3V0LW1pbnV0ZXNcIjogc3RlcC50aW1lb3V0TWludXRlcyxcbiAgICAgIFwid29ya2luZy1kaXJlY3RvcnlcIjogc3RlcC53b3JraW5nRGlyZWN0b3J5LFxuICAgICAgYmFja2dyb3VuZDogc3RlcC5iYWNrZ3JvdW5kLFxuICAgICAgd2FpdDogc3RlcC53YWl0LFxuICAgICAgXCJ3YWl0LWFsbFwiOiBzdGVwLndhaXRBbGwsXG4gICAgICBjYW5jZWw6IHN0ZXAuY2FuY2VsLFxuICAgICAgcGFyYWxsZWw6IHN0ZXAucGFyYWxsZWw/Lm1hcChyZW5kZXJTdGVwKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogRWFnZXJseSBhc3NpZ25zIHN0ZXAgSURzIHRvIGFsbCBub24tcmV1c2FibGUgam9icyBpbiBhIHJlY29yZC5cbiAqIFJldXNhYmxlIHdvcmtmbG93IGpvYnMgKHRob3NlIHdpdGggYHVzZXNgKSBhcmUgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkLlxuICovXG5mdW5jdGlvbiBhc3NpZ25Kb2JTdGVwSWRzKFxuICBqb2JzOiBSZWNvcmQ8c3RyaW5nLCB3b3JrZmxvd3MuSm9iIHwgd29ya2Zsb3dzLkpvYkNhbGxpbmdSZXVzYWJsZVdvcmtmbG93Pixcbik6IFJlY29yZDxzdHJpbmcsIHdvcmtmbG93cy5Kb2IgfCB3b3JrZmxvd3MuSm9iQ2FsbGluZ1JldXNhYmxlV29ya2Zsb3c+IHtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIHdvcmtmbG93cy5Kb2IgfCB3b3JrZmxvd3MuSm9iQ2FsbGluZ1JldXNhYmxlV29ya2Zsb3dcbiAgPiA9IHt9O1xuICBmb3IgKGNvbnN0IFtuYW1lLCBqb2JdIG9mIE9iamVjdC5lbnRyaWVzKGpvYnMpKSB7XG4gICAgaWYgKFwidXNlc1wiIGluIGpvYikge1xuICAgICAgcmVzdWx0W25hbWVdID0gam9iO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBKb2JzIHdpdGggbm8gbGVuZ3RoIG9yIHVuZGVmaW5lZCBzdGVwcyBhcmUgcGFzc2VkIHRocm91Z2ggc2Vuc2VcbiAgICAgIC8vIHN0ZXBzIG1heSBiZSBwb3B1bGF0ZWQgbGF0ZXIgZHVyaW5nIHN5bnRoZXNpcyAoZWcgc2V0dXBUb29scylcbiAgICAgIHJlc3VsdFtuYW1lXSA9XG4gICAgICAgIGpvYi5zdGVwcy5sZW5ndGggPiAwXG4gICAgICAgICAgPyB7IC4uLmpvYiwgc3RlcHM6IGVuc3VyZVN0ZXBzSGF2ZUlkcyhqb2Iuc3RlcHMpIH1cbiAgICAgICAgICA6IGpvYjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBBc3NpZ25zIGEgc3RhYmxlIGBpZGAgdG8gZXZlcnkgc3RlcCB0aGF0IGRvZXNuJ3QgYWxyZWFkeSBoYXZlIG9uZS5cbiAqXG4gKiBQcmlvcml0eTpcbiAqIDEuIEV4cGxpY2l0IGBpZGAgb24gdGhlIHN0ZXAg4oCUIHByZXNlcnZlZCBhcy1pcyBhbmQgbmV2ZXIgcmVuYW1lZC5cbiAqIDIuIERlcml2ZWQgZnJvbSBgbmFtZWAg4oCUIGNvbnZlcnRlZCB0byBzbmFrZV9jYXNlLlxuICogMy4gQ29udGVudCBoYXNoIGZhbGxiYWNrIOKAlCBgYXV0b188aGFzaD5gIGJhc2VkIG9uIGBydW5gIG9yIGB1c2VzYC5cbiAqXG4gKiBFeHBsaWNpdCBJRHMgYXJlIHJlc2VydmVkIGluIGEgZmlyc3QgcGFzcyBzbyB0aGF0IGRlcml2ZWQvYXV0byBJRHMgbmV2ZXJcbiAqIGNvbGxpZGUgd2l0aCB0aGVtLiBEdXBsaWNhdGUgZXhwbGljaXQgSURzIGluIHRoZSBzYW1lIGpvYiB0aHJvdyBhbiBlcnJvci5cbiAqIERlcml2ZWQvYXV0byBJRHMgdGhhdCBjb2xsaWRlIGFyZSBkaXNhbWJpZ3VhdGVkIHdpdGggYF8yYCwgYF8zYCwgZXRjLlxuICovXG5mdW5jdGlvbiBlbnN1cmVTdGVwc0hhdmVJZHMoXG4gIHN0ZXBzOiB3b3JrZmxvd3MuSm9iU3RlcFtdLFxuKTogQXJyYXk8d29ya2Zsb3dzLkpvYlN0ZXAgJiB7IGlkOiBzdHJpbmcgfT4ge1xuICBjb25zdCB1c2VkSWRzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcblxuICAvLyBGaXJzdCBwYXNzOiByZXNlcnZlIGFsbCBleHBsaWNpdCBJRHMgc28gZGVyaXZlZCBJRHMgd29uJ3QgY2xhaW0gdGhlbS5cbiAgZm9yIChjb25zdCBzdGVwIG9mIHN0ZXBzKSB7XG4gICAgaWYgKHN0ZXAuaWQpIHtcbiAgICAgIGlmICh1c2VkSWRzLmhhcyhzdGVwLmlkKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYER1cGxpY2F0ZSBleHBsaWNpdCBzdGVwIGlkIFwiJHtzdGVwLmlkfVwiLiBTdGVwIElEcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSBqb2IuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHVzZWRJZHMuc2V0KHN0ZXAuaWQsIDEpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVuaXF1ZUlkKGJhc2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgY291bnQgPSB1c2VkSWRzLmdldChiYXNlKSA/PyAwO1xuICAgIGlmIChjb3VudCA9PT0gMCkge1xuICAgICAgdXNlZElkcy5zZXQoYmFzZSwgMSk7XG4gICAgICByZXR1cm4gYmFzZTtcbiAgICB9XG4gICAgY29uc3QgbmV4dCA9IGNvdW50ICsgMTtcbiAgICB1c2VkSWRzLnNldChiYXNlLCBuZXh0KTtcbiAgICByZXR1cm4gYCR7YmFzZX1fJHtuZXh0fWA7XG4gIH1cblxuICByZXR1cm4gc3RlcHMubWFwKChzdGVwKSA9PiB7XG4gICAgaWYgKHN0ZXAuaWQpIHtcbiAgICAgIC8vIEV4cGxpY2l0IGlkIOKAlCBhbHJlYWR5IHJlc2VydmVkIGluIGZpcnN0IHBhc3MsIHVzZSBhcy1pc1xuICAgICAgcmV0dXJuIHsgLi4uc3RlcCwgaWQ6IHN0ZXAuaWQgfTtcbiAgICB9XG5cbiAgICBpZiAoc3RlcC5uYW1lKSB7XG4gICAgICAvLyBEZXJpdmUgZnJvbSBuYW1lOiBhbGxvdyBvbmx5IGNoYXJhY3RlcnMgdmFsaWQgZm9yIGEgR2l0SHViIHdvcmtmbG93IGlkXG4gICAgICBjb25zdCBiYXNlID0gc3RlcC5uYW1lXG4gICAgICAgIC8vIGNvbnZlcnQgc3BhY2VzIHRvIHVuZGVyc2NvcmVzXG4gICAgICAgIC5yZXBsYWNlKC9cXHMrL2csIFwiX1wiKVxuICAgICAgICAvLyBub3JtYWxpemUgdG8gbG93ZXJjYXNlXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgIC8vIHJlbW92ZSBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIGluIHdvcmtmbG93IGlkcyAoa2VlcCBhLXosIDAtOSwgXyBhbmQgLSlcbiAgICAgICAgLnJlcGxhY2UoL1teYS16MC05Xy1dL2csIFwiX1wiKVxuICAgICAgICAvLyBjb2xsYXBzZSBtdWx0aXBsZSB1bmRlcnNjb3Jlc1xuICAgICAgICAucmVwbGFjZSgvXysvZywgXCJfXCIpXG4gICAgICAgIC8vIHRyaW0gbGVhZGluZy90cmFpbGluZyB1bmRlcnNjb3JlcyBvciBoeXBoZW5zXG4gICAgICAgIC5yZXBsYWNlKC9eX3xfJC9nLCBcIlwiKTtcbiAgICAgIGNvbnN0IGlkID0gdW5pcXVlSWQoYmFzZSk7XG4gICAgICByZXR1cm4geyAuLi5zdGVwLCBpZCB9O1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrOiBjb250ZW50IGhhc2hcbiAgICBjb25zdCBjb250ZW50ID0gc3RlcC5ydW4gPz8gc3RlcC51c2VzID8/IFwiXCI7XG4gICAgY29uc3QgaGFzaCA9IGNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKGNvbnRlbnQpLmRpZ2VzdChcImhleFwiKS5zbGljZSgwLCA4KTtcbiAgICBjb25zdCBpZCA9IHVuaXF1ZUlkKGBhdXRvXyR7aGFzaH1gKTtcbiAgICByZXR1cm4geyAuLi5zdGVwLCBpZCB9O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYXJyYXlPclNjYWxhcjxUPihhcnI6IFQgfCBUW10gfCB1bmRlZmluZWQpOiBUIHwgVFtdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICByZXR1cm4gYXJyO1xuICB9XG4gIGlmIChhcnIgPT0gbnVsbCB8fCBhcnIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGFycjtcbiAgfVxuICBpZiAoYXJyLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBhcnJbMF07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn1cblxuZnVuY3Rpb24gc2V0dXBUb29scyh0b29sczogd29ya2Zsb3dzLlRvb2xzKSB7XG4gIGNvbnN0IHN0ZXBzOiB3b3JrZmxvd3MuSm9iU3RlcFtdID0gW107XG5cbiAgaWYgKHRvb2xzLmphdmEpIHtcbiAgICBpZiAodG9vbHMuamF2YS5jYWNoZSAmJiAhdG9vbHMuamF2YS5wYWNrYWdlTWFuYWdlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcImphdmEucGFja2FnZU1hbmFnZXIgaXMgcmVxdWlyZWQgd2hlbiBqYXZhLmNhY2hlIGlzIHRydWVcIixcbiAgICAgICk7XG4gICAgfVxuICAgIHN0ZXBzLnB1c2goe1xuICAgICAgdXNlczogXCJhY3Rpb25zL3NldHVwLWphdmFAdjVcIixcbiAgICAgIHdpdGg6IHtcbiAgICAgICAgZGlzdHJpYnV0aW9uOiB0b29scy5qYXZhLmRpc3RyaWJ1dGlvbiA/PyBcImNvcnJldHRvXCIsXG4gICAgICAgIFwiamF2YS12ZXJzaW9uXCI6IHRvb2xzLmphdmEudmVyc2lvbixcbiAgICAgICAgLi4uKHRvb2xzLmphdmEuY2FjaGUgJiYgeyBjYWNoZTogdG9vbHMuamF2YS5wYWNrYWdlTWFuYWdlciB9KSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBpZiAodG9vbHMubm9kZSkge1xuICAgIHN0ZXBzLnB1c2goe1xuICAgICAgdXNlczogXCJhY3Rpb25zL3NldHVwLW5vZGVAdjZcIixcbiAgICAgIHdpdGg6IHtcbiAgICAgICAgXCJub2RlLXZlcnNpb25cIjogdG9vbHMubm9kZS52ZXJzaW9uLFxuICAgICAgICBcInBhY2thZ2UtbWFuYWdlci1jYWNoZVwiOiB0b29scy5ub2RlLmNhY2hlID8/IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh0b29scy5weXRob24pIHtcbiAgICBpZiAodG9vbHMucHl0aG9uLmNhY2hlICYmICF0b29scy5weXRob24ucGFja2FnZU1hbmFnZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJweXRob24ucGFja2FnZU1hbmFnZXIgaXMgcmVxdWlyZWQgd2hlbiBweXRob24uY2FjaGUgaXMgdHJ1ZVwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgc3RlcHMucHVzaCh7XG4gICAgICB1c2VzOiBcImFjdGlvbnMvc2V0dXAtcHl0aG9uQHY2XCIsXG4gICAgICB3aXRoOiB7XG4gICAgICAgIFwicHl0aG9uLXZlcnNpb25cIjogdG9vbHMucHl0aG9uLnZlcnNpb24sXG4gICAgICAgIC4uLih0b29scy5weXRob24uY2FjaGUgJiYgeyBjYWNoZTogdG9vbHMucHl0aG9uLnBhY2thZ2VNYW5hZ2VyIH0pLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh0b29scy5nbykge1xuICAgIHN0ZXBzLnB1c2goe1xuICAgICAgdXNlczogXCJhY3Rpb25zL3NldHVwLWdvQHY2XCIsXG4gICAgICB3aXRoOiB7XG4gICAgICAgIFwiZ28tdmVyc2lvblwiOiB0b29scy5nby52ZXJzaW9uLFxuICAgICAgICBjYWNoZTogdG9vbHMuZ28uY2FjaGUgPz8gZmFsc2UsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHRvb2xzLmRvdG5ldCkge1xuICAgIHN0ZXBzLnB1c2goe1xuICAgICAgdXNlczogXCJhY3Rpb25zL3NldHVwLWRvdG5ldEB2NVwiLFxuICAgICAgd2l0aDoge1xuICAgICAgICBcImRvdG5ldC12ZXJzaW9uXCI6IHRvb2xzLmRvdG5ldC52ZXJzaW9uLFxuICAgICAgICBjYWNoZTogdG9vbHMuZG90bmV0LmNhY2hlID8/IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBzdGVwcztcbn1cblxuZnVuY3Rpb24gdmVyaWZ5Sm9iQ29uc3RyYWludHMoXG4gIGpvYnM6IFJlY29yZDxzdHJpbmcsIHdvcmtmbG93cy5Kb2IgfCB3b3JrZmxvd3MuSm9iQ2FsbGluZ1JldXNhYmxlV29ya2Zsb3c+LFxuKSB7XG4gIC8vIHZlcmlmeSB0aGF0IGpvYiBoYXMgYSBcInBlcm1pc3Npb25zXCIgc3RhdGVtZW50IHRvIGVuc3VyZSB3b3JrZmxvdyBjYW5cbiAgLy8gb3BlcmF0ZSBpbiByZXBvcyB3aXRoIGRlZmF1bHQgdG9rZW5zIHNldCB0byByZWFkb25seVxuICBmb3IgKGNvbnN0IFtpZCwgam9iXSBvZiBPYmplY3QuZW50cmllcyhqb2JzKSkge1xuICAgIGlmICgham9iLnBlcm1pc3Npb25zKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGAke2lkfTogYWxsIHdvcmtmbG93IGpvYnMgbXVzdCBoYXZlIGEgXCJwZXJtaXNzaW9uc1wiIGNsYXVzZSB0byBlbnN1cmUgd29ya2Zsb3cgY2FuIG9wZXJhdGUgaW4gcmVzdHJpY3RlZCByZXBvc2l0b3JpZXNgLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
632
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3dzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dpdGh1Yi93b3JrZmxvd3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZDQUF5QztBQUN6Qyx5Q0FBb0M7QUFDcEMsK0JBQTZCO0FBRTdCLG1EQUFnRDtBQUloRCwwQ0FBc0M7QUFDdEMsNENBQXlDO0FBQ3pDLGtDQUFtRDtBQUNuRCxrQ0FBbUM7QUF5RW5DOzs7Ozs7R0FNRztBQUNILE1BQWEsY0FBZSxTQUFRLHFCQUFTOztJQUMzQzs7OztPQUlHO0lBQ2EsSUFBSSxDQUFTO0lBRTdCOzs7O09BSUc7SUFDSCxJQUFXLElBQUk7UUFJYixPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHO0lBQ2EsV0FBVyxDQUFzQjtJQUVqRDs7T0FFRztJQUNhLEdBQUcsQ0FBMEI7SUFFN0M7O09BRUc7SUFDYSxJQUFJLENBQXVCO0lBRTNDOztPQUVHO0lBQ2EsaUJBQWlCLENBQW9CO0lBRXJEOzs7Ozs7Ozs7O09BVUc7SUFDSSxPQUFPLENBQVU7SUFFUCxLQUFLLEdBR2xCLEVBQUUsQ0FBQztJQUNDLE9BQU8sQ0FBd0I7SUFDL0IsTUFBTSxHQUF1QixFQUFFLENBQUM7SUFFeEM7Ozs7T0FJRztJQUNILFlBQ0UsTUFBYyxFQUNkLElBQVksRUFDWixVQUFpQyxFQUFFO1FBRW5DLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztRQUVwRCxNQUFNLGtCQUFrQixHQUF1QjtZQUM3QyxnQkFBZ0IsRUFBRSxLQUFLO1lBQ3ZCLEtBQUssRUFBRSx3QkFBd0I7U0FDaEMsQ0FBQztRQUVGLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLGdC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U0FBUyxvQkFBb0IsQ0FDM0IsSUFBMEU7SUFFMUUsdUVBQXVFO0lBQ3ZFLHVEQUF1RDtJQUN2RCxLQUFLLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzdDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsTUFBTSxJQUFJLEtBQUssQ0FDYixHQUFHLEVBQUUsZ0hBQWdILENBQ3RILENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQgeyBleHRuYW1lIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgc25ha2UgfSBmcm9tIFwiY2FzZVwiO1xuaW1wb3J0IHR5cGUgeyBHaXRIdWJBY3Rpb25zUHJvdmlkZXIgfSBmcm9tIFwiLi9hY3Rpb25zLXByb3ZpZGVyXCI7XG5pbXBvcnQgeyBHaXRIdWJBY3Rpb25zIH0gZnJvbSBcIi4vYWN0aW9ucy5jb25zdFwiO1xuaW1wb3J0IHR5cGUgeyBHaXRIdWIgfSBmcm9tIFwiLi9naXRodWJcIjtcbmltcG9ydCB0eXBlIHsgR2l0aHViQ3JlZGVudGlhbHMgfSBmcm9tIFwiLi9naXRodWItY3JlZGVudGlhbHNcIjtcbmltcG9ydCB0eXBlICogYXMgd29ya2Zsb3dzIGZyb20gXCIuL3dvcmtmbG93cy1tb2RlbFwiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCIuLi9fcmVzb2x2ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbXBvbmVudFwiO1xuaW1wb3J0IHsgZGVlcE1lcmdlLCBrZWJhYkNhc2VLZXlzIH0gZnJvbSBcIi4uL3V0aWxcIjtcbmltcG9ydCB7IFlhbWxGaWxlIH0gZnJvbSBcIi4uL3lhbWxcIjtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBgY29uY3VycmVuY3lgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbmN1cnJlbmN5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBDb25jdXJyZW5jeSBncm91cCBjb250cm9scyB3aGljaCB3b3JrZmxvdyBydW5zIHdpbGwgc2hhcmUgdGhlIHNhbWUgY29uY3VycmVuY3kgbGltaXQuXG4gICAqIEZvciBleGFtcGxlLCBpZiB5b3Ugc3BlY2lmeSBgJHt7IGdpdGh1Yi53b3JrZmxvdyB9fS0ke3sgZ2l0aHViLnJlZiB9fWAsIHdvcmtmbG93IHJ1bnMgdHJpZ2dlcmVkXG4gICAqIG9uIHRoZSBzYW1lIGJyYW5jaCBjYW5ub3QgcnVuIGNvbmN1cnJlbnRseSwgYnV0IHdvcmtmbG93cyBydW5zIHRyaWdnZXJlZCBvbiBkaWZmZXJlbnQgYnJhbmNoZXMgY2FuLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtICR7eyBnaXRodWIud29ya2Zsb3cgfX1cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL3dyaXRpbmctd29ya2Zsb3dzL2Nob29zaW5nLXdoYXQteW91ci13b3JrZmxvdy1kb2VzL3VzaW5nLWNvbmN1cnJlbmN5I2V4YW1wbGUtY29uY3VycmVuY3ktZ3JvdXBzXG4gICAqL1xuICByZWFkb25seSBncm91cD86IHN0cmluZztcblxuICAvKipcbiAgICogV2hlbiBhIHdvcmtmbG93IGlzIHRyaWdnZXJlZCB3aGlsZSBhbm90aGVyIG9uZSAoaW4gdGhlIHNhbWUgZ3JvdXApIGlzIHJ1bm5pbmcsIHNob3VsZCBHaXRIdWIgY2FuY2VsXG4gICAqIHRoZSBydW5uaW5nIHdvcmtmbG93P1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgY2FuY2VsSW5Qcm9ncmVzcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYEdpdGh1YldvcmtmbG93YC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHaXRodWJXb3JrZmxvd09wdGlvbnMge1xuICAvKipcbiAgICogRm9yY2UgdGhlIGNyZWF0aW9uIG9mIHRoZSB3b3JrZmxvdyBldmVuIGlmIGB3b3JrZmxvd3NgIGlzIGRpc2FibGVkIGluIGBHaXRIdWJgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZm9yY2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgY29uY3VycmVuY3kgbGltaXRhdGlvbnMuIFVzZSBgY29uY3VycmVuY3lPcHRpb25zYCB0byBjb25maWd1cmUgc3BlY2lmaWMgbm9uIGRlZmF1bHQgdmFsdWVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgbGltaXRDb25jdXJyZW5jeT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbmN1cnJlbmN5IGVuc3VyZXMgdGhhdCBvbmx5IGEgc2luZ2xlIGpvYiBvciB3b3JrZmxvdyB1c2luZyB0aGUgc2FtZSBjb25jdXJyZW5jeSBncm91cCB3aWxsIHJ1biBhdCBhIHRpbWUuIEN1cnJlbnRseSBpbiBiZXRhLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHsgZ3JvdXA6ICR7eyBnaXRodWIud29ya2Zsb3cgfX0sIGNhbmNlbEluUHJvZ3Jlc3M6IGZhbHNlIH1cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL2xlYXJuLWdpdGh1Yi1hY3Rpb25zL3dvcmtmbG93LXN5bnRheC1mb3ItZ2l0aHViLWFjdGlvbnMjY29uY3VycmVuY3lcbiAgICovXG4gIHJlYWRvbmx5IGNvbmN1cnJlbmN5T3B0aW9ucz86IENvbmN1cnJlbmN5T3B0aW9ucztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IGZvciB0aGUgd29ya2Zsb3cuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gYWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICovXG4gIHJlYWRvbmx5IGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFNldCBhIGN1c3RvbSBmaWxlIG5hbWUgZm9yIHRoZSB3b3JrZmxvdyBkZWZpbml0aW9uIGZpbGUuIE11c3QgaW5jbHVkZSBlaXRoZXIgYSAueW1sIG9yIC55YW1sIGZpbGUgZXh0ZW5zaW9uLlxuICAgKlxuICAgKiBVc2UgdGhpcyBvcHRpb24gdG8gc2V0IGEgZmlsZSBuYW1lIGZvciB0aGUgd29ya2Zsb3cgZmlsZSwgdGhhdCBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgZGlzcGxheSBuYW1lLlxuICAgKlxuICAgKiBAZXhhbXBsZSBcImJ1aWxkLW5ldy55bWxcIlxuICAgKiBAZXhhbXBsZSBcIm15LXdvcmtmbG93LnlhbWxcIlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgcGF0aC1zYWZlIHZlcnNpb24gb2YgdGhlIHdvcmtmbG93IG5hbWUgcGx1cyB0aGUgLnltbCBmaWxlIGVuZGluZywgZS5nLiBidWlsZC55bWxcbiAgICovXG4gIHJlYWRvbmx5IGZpbGVOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdvcmtmbG93IGZvciBHaXRIdWIuXG4gKlxuICogQSB3b3JrZmxvdyBpcyBhIGNvbmZpZ3VyYWJsZSBhdXRvbWF0ZWQgcHJvY2VzcyBtYWRlIHVwIG9mIG9uZSBvciBtb3JlIGpvYnMuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL3JlZmVyZW5jZS93b3JrZmxvdy1zeW50YXgtZm9yLWdpdGh1Yi1hY3Rpb25zXG4gKi9cbmV4cG9ydCBjbGFzcyBHaXRodWJXb3JrZmxvdyBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgd29ya2Zsb3cuIEdpdEh1YiBkaXNwbGF5cyB0aGUgbmFtZXMgb2YgeW91ciB3b3JrZmxvd3MgdW5kZXIgeW91ciByZXBvc2l0b3J5J3NcbiAgICogXCJBY3Rpb25zXCIgdGFiLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvd3JpdGluZy13b3JrZmxvd3Mvd29ya2Zsb3ctc3ludGF4LWZvci1naXRodWItYWN0aW9ucyNuYW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbGwgY3VycmVudCBqb2JzIG9mIHRoZSB3b3JrZmxvdy5cbiAgICpcbiAgICogVGhpcyBpcyBhIHJlYWQtb25seSBjb3B5LCB1c2UgdGhlIHJlc3BlY3RpdmUgaGVscGVyIG1ldGhvZHMgdG8gYWRkLCB1cGRhdGUgb3IgcmVtb3ZlIGpvYnMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGpvYnMoKTogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICB3b3JrZmxvd3MuSm9iIHwgd29ya2Zsb3dzLkpvYkNhbGxpbmdSZXVzYWJsZVdvcmtmbG93XG4gID4ge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2pvYnMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgY29uY3VycmVuY3kgY29uZmlndXJhdGlvbiBvZiB0aGUgd29ya2Zsb3cuIHVuZGVmaW5lZCBtZWFucyBubyBjb25jdXJyZW5jeSBsaW1pdGF0aW9ucy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb25jdXJyZW5jeT86IENvbmN1cnJlbmN5T3B0aW9ucztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IGZvciB0aGUgd29ya2Zsb3cuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogVGhlIHdvcmtmbG93IFlBTUwgZmlsZS4gTWF5IG5vdCBleGlzdCBpZiBgd29ya2Zsb3dzRW5hYmxlZGAgaXMgZmFsc2Ugb24gYEdpdEh1YmAuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZmlsZTogWWFtbEZpbGUgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEdpdEh1YiBBUEkgYXV0aGVudGljYXRpb24gbWV0aG9kIHVzZWQgYnkgcHJvamVuIHdvcmtmbG93cy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcm9qZW5DcmVkZW50aWFsczogR2l0aHViQ3JlZGVudGlhbHM7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIGZvciB3b3JrZmxvdyBydW5zIGdlbmVyYXRlZCBmcm9tIHRoZSB3b3JrZmxvdy4gR2l0SHViIGRpc3BsYXlzIHRoZVxuICAgKiB3b3JrZmxvdyBydW4gbmFtZSBpbiB0aGUgbGlzdCBvZiB3b3JrZmxvdyBydW5zIG9uIHlvdXIgcmVwb3NpdG9yeSdzXG4gICAqIFwiQWN0aW9uc1wiIHRhYi4gSWYgYHJ1bi1uYW1lYCBpcyBvbWl0dGVkIG9yIGlzIG9ubHkgd2hpdGVzcGFjZSwgdGhlbiB0aGUgcnVuXG4gICAqIG5hbWUgaXMgc2V0IHRvIGV2ZW50LXNwZWNpZmljIGluZm9ybWF0aW9uIGZvciB0aGUgd29ya2Zsb3cgcnVuLiBGb3JcbiAgICogZXhhbXBsZSwgZm9yIGEgd29ya2Zsb3cgdHJpZ2dlcmVkIGJ5IGEgYHB1c2hgIG9yIGBwdWxsX3JlcXVlc3RgIGV2ZW50LCBpdFxuICAgKiBpcyBzZXQgYXMgdGhlIGNvbW1pdCBtZXNzYWdlLlxuICAgKlxuICAgKiBUaGlzIHZhbHVlIGNhbiBpbmNsdWRlIGV4cHJlc3Npb25zIGFuZCBjYW4gcmVmZXJlbmNlIGBnaXRodWJgIGFuZCBgaW5wdXRzYFxuICAgKiBjb250ZXh0cy5cbiAgICovXG4gIHB1YmxpYyBydW5OYW1lPzogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2pvYnM6IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAgd29ya2Zsb3dzLkpvYiB8IHdvcmtmbG93cy5Kb2JDYWxsaW5nUmV1c2FibGVXb3JrZmxvd1xuICA+ID0ge307XG4gIHByaXZhdGUgYWN0aW9uczogR2l0SHViQWN0aW9uc1Byb3ZpZGVyO1xuICBwcml2YXRlIGV2ZW50czogd29ya2Zsb3dzLlRyaWdnZXJzID0ge307XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBnaXRodWIgVGhlIEdpdEh1YiBjb21wb25lbnQgb2YgdGhlIHByb2plY3QgdGhpcyB3b3JrZmxvdyBiZWxvbmdzIHRvLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgd29ya2Zsb3csIGRpc3BsYXllZCB1bmRlciB0aGUgcmVwb3NpdG9yeSdzIFwiQWN0aW9uc1wiIHRhYi5cbiAgICogQHBhcmFtIG9wdGlvbnMgQWRkaXRpb25hbCBvcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgd29ya2Zsb3cuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBnaXRodWI6IEdpdEh1YixcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9uczogR2l0aHViV29ya2Zsb3dPcHRpb25zID0ge30sXG4gICkge1xuICAgIHN1cGVyKGdpdGh1Yi5wcm9qZWN0LCBgJHtuZXcudGFyZ2V0Lm5hbWV9IyR7bmFtZX1gKTtcblxuICAgIGNvbnN0IGRlZmF1bHRDb25jdXJyZW5jeTogQ29uY3VycmVuY3lPcHRpb25zID0ge1xuICAgICAgY2FuY2VsSW5Qcm9ncmVzczogZmFsc2UsXG4gICAgICBncm91cDogXCIke3sgZ2l0aHViLndvcmtmbG93IH19XCIsXG4gICAgfTtcblxuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5jb25jdXJyZW5jeSA9IG9wdGlvbnMubGltaXRDb25jdXJyZW5jeVxuICAgICAgPyAoZGVlcE1lcmdlKFtcbiAgICAgICAgICBkZWZhdWx0Q29uY3VycmVuY3ksXG4gICAgICAgICAgb3B0aW9ucy5jb25jdXJyZW5jeU9wdGlvbnMsXG4gICAgICAgIF0pIGFzIENvbmN1cnJlbmN5T3B0aW9ucylcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMucHJvamVuQ3JlZGVudGlhbHMgPSBnaXRodWIucHJvamVuQ3JlZGVudGlhbHM7XG4gICAgdGhpcy5hY3Rpb25zID0gZ2l0aHViLmFjdGlvbnM7XG5cbiAgICB0aGlzLmVudiA9IG9wdGlvbnMuZW52O1xuXG4gICAgY29uc3Qgd29ya2Zsb3dzRW5hYmxlZCA9IGdpdGh1Yi53b3JrZmxvd3NFbmFibGVkIHx8IG9wdGlvbnMuZm9yY2U7XG5cbiAgICBpZiAod29ya2Zsb3dzRW5hYmxlZCkge1xuICAgICAgY29uc3QgZmlsZU5hbWUgPSBvcHRpb25zLmZpbGVOYW1lID8/IGAke25hbWUudG9Mb2NhbGVMb3dlckNhc2UoKX0ueW1sYDtcbiAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IGV4dG5hbWUoZmlsZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGlmICghW1wiLnltbFwiLCBcIi55YW1sXCJdLmluY2x1ZGVzKGV4dGVuc2lvbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBHaXRIdWIgV29ya2Zsb3cgZmlsZXMgbXVzdCBoYXZlIGVpdGhlciBhIC55bWwgb3IgLnlhbWwgZmlsZSBleHRlbnNpb24sIGdvdDogJHtmaWxlTmFtZX1gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZpbGUgPSBuZXcgWWFtbEZpbGUodGhpcy5wcm9qZWN0LCBgLmdpdGh1Yi93b3JrZmxvd3MvJHtmaWxlTmFtZX1gLCB7XG4gICAgICAgIG9iajogKCkgPT4gdGhpcy5yZW5kZXJXb3JrZmxvdygpLFxuICAgICAgICAvLyBHaXRIdWIgbmVlZHMgdG8gcmVhZCB0aGUgZmlsZSBmcm9tIHRoZSByZXBvc2l0b3J5IGluIG9yZGVyIHRvIHdvcmsuXG4gICAgICAgIGNvbW1pdHRlZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgZXZlbnRzIHRvIHRyaWdnZXJzIHRoZSB3b3JrZmxvdy5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50cyBUaGUgZXZlbnQocykgdG8gdHJpZ2dlciB0aGUgd29ya2Zsb3cuXG4gICAqL1xuICBwdWJsaWMgb24oZXZlbnRzOiB3b3JrZmxvd3MuVHJpZ2dlcnMpIHtcbiAgICB0aGlzLmV2ZW50cyA9IHtcbiAgICAgIC4uLnRoaXMuZXZlbnRzLFxuICAgICAgLi4uZXZlbnRzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHNpbmdsZSBqb2IgdG8gdGhlIHdvcmtmbG93LlxuICAgKiBAcGFyYW0gaWQgVGhlIGpvYiBuYW1lICh1bmlxdWUgd2l0aGluIHRoZSB3b3JrZmxvdylcbiAgICogQHBhcmFtIGpvYiBUaGUgam9iIHNwZWNpZmljYXRpb25cbiAgICovXG4gIHB1YmxpYyBhZGRKb2IoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBqb2I6IHdvcmtmbG93cy5Kb2IgfCB3b3JrZmxvd3MuSm9iQ2FsbGluZ1JldXNhYmxlV29ya2Zsb3csXG4gICk6IHZvaWQge1xuICAgIHRoaXMuYWRkSm9icyh7IFtpZF06IGpvYiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgam9icyB0byB0aGUgd29ya2Zsb3cuXG4gICAqXG4gICAqIEBwYXJhbSBqb2JzIEpvYnMgdG8gYWRkLlxuICAgKi9cbiAgcHVibGljIGFkZEpvYnMoXG4gICAgam9iczogUmVjb3JkPHN0cmluZywgd29ya2Zsb3dzLkpvYiB8IHdvcmtmbG93cy5Kb2JDYWxsaW5nUmV1c2FibGVXb3JrZmxvdz4sXG4gICkge1xuICAgIHZlcmlmeUpvYkNvbnN0cmFpbnRzKGpvYnMpO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5fam9icywgYXNzaWduSm9iU3RlcElkcyhqb2JzKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgc2luZ2xlIGpvYiBmcm9tIHRoZSB3b3JrZmxvdy5cbiAgICogQHBhcmFtIGlkIFRoZSBqb2IgbmFtZSAodW5pcXVlIHdpdGhpbiB0aGUgd29ya2Zsb3cpXG4gICAqL1xuICBwdWJsaWMgZ2V0Sm9iKFxuICAgIGlkOiBzdHJpbmcsXG4gICk6IHdvcmtmbG93cy5Kb2IgfCB3b3JrZmxvd3MuSm9iQ2FsbGluZ1JldXNhYmxlV29ya2Zsb3cge1xuICAgIHJldHVybiB0aGlzLl9qb2JzW2lkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGEgc2luZ2xlIGpvYiB0byB0aGUgd29ya2Zsb3cuXG4gICAqIEBwYXJhbSBpZCBUaGUgam9iIG5hbWUgKHVuaXF1ZSB3aXRoaW4gdGhlIHdvcmtmbG93KVxuICAgKi9cbiAgcHVibGljIHVwZGF0ZUpvYihcbiAgICBpZDogc3RyaW5nLFxuICAgIGpvYjogd29ya2Zsb3dzLkpvYiB8IHdvcmtmbG93cy5Kb2JDYWxsaW5nUmV1c2FibGVXb3JrZmxvdyxcbiAgKSB7XG4gICAgdGhpcy51cGRhdGVKb2JzKHsgW2lkXTogam9iIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgam9icyBmb3IgdGhpcyB3b3JrZmxvd1xuICAgKiBEb2VzIGEgY29tcGxldGUgcmVwbGFjZSwgaXQgZG9lcyBub3QgdHJ5IHRvIG1lcmdlIHRoZSBqb2JzXG4gICAqXG4gICAqIEBwYXJhbSBqb2JzIEpvYnMgdG8gdXBkYXRlLlxuICAgKi9cbiAgcHVibGljIHVwZGF0ZUpvYnMoXG4gICAgam9iczogUmVjb3JkPHN0cmluZywgd29ya2Zsb3dzLkpvYiB8IHdvcmtmbG93cy5Kb2JDYWxsaW5nUmV1c2FibGVXb3JrZmxvdz4sXG4gICkge1xuICAgIHZlcmlmeUpvYkNvbnN0cmFpbnRzKGpvYnMpO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5fam9icywgYXNzaWduSm9iU3RlcElkcyhqb2JzKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIHNpbmdsZSBqb2IgdG8gdGhlIHdvcmtmbG93LlxuICAgKiBAcGFyYW0gaWQgVGhlIGpvYiBuYW1lICh1bmlxdWUgd2l0aGluIHRoZSB3b3JrZmxvdylcbiAgICovXG4gIHB1YmxpYyByZW1vdmVKb2IoaWQ6IHN0cmluZykge1xuICAgIGRlbGV0ZSB0aGlzLl9qb2JzW2lkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgc2luZ2xlIHN0ZXAgZnJvbSBhIGpvYiBieSBzdGVwIElELlxuICAgKlxuICAgKiBUaGUgcmV0dXJuZWQgb2JqZWN0IGlzIGZyb3plbiBhbmQgcmVhZC1vbmx5LiBVc2UgYHJlcGxhY2VTdGVwYCBvclxuICAgKiBgcGF0Y2hTdGVwYCB0byBtb2RpZnkgYSBzdGVwLlxuICAgKlxuICAgKiBAcGFyYW0gam9iSWQgVGhlIGpvYiBuYW1lICh1bmlxdWUgd2l0aGluIHRoZSB3b3JrZmxvdylcbiAgICogQHBhcmFtIHN0ZXBJZCBUaGUgc3RlcCBJRCB0byBsb29rIHVwXG4gICAqIEByZXR1cm5zIEEgcmVhZC1vbmx5IGNvcHkgb2YgdGhlIHN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXRTdGVwKGpvYklkOiBzdHJpbmcsIHN0ZXBJZDogc3RyaW5nKTogd29ya2Zsb3dzLkpvYlN0ZXAge1xuICAgIGNvbnN0IHN0ZXBzID0gdGhpcy5yZXNvbHZlSm9iU3RlcHMoam9iSWQpO1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5maW5kU3RlcEluZGV4KHN0ZXBzLCBzdGVwSWQsIGpvYklkKTtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7IC4uLnN0ZXBzW2luZGV4XSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBlbmRzIGEgc3RlcCB0byB0aGUgZW5kIG9mIGEgam9iJ3Mgc3RlcCBsaXN0LlxuICAgKlxuICAgKiBAcGFyYW0gam9iSWQgVGhlIGpvYiBuYW1lICh1bmlxdWUgd2l0aGluIHRoZSB3b3JrZmxvdylcbiAgICogQHBhcmFtIHN0ZXAgVGhlIHN0ZXAgdG8gYWRkLiBNdXN0IGhhdmUgYW4gYGlkYCBzZXQuXG4gICAqL1xuICBwdWJsaWMgYXBwZW5kU3RlcChqb2JJZDogc3RyaW5nLCBzdGVwOiB3b3JrZmxvd3MuSm9iU3RlcCk6IHZvaWQge1xuICAgIGNvbnN0IHN0ZXBzID0gdGhpcy5yZXNvbHZlSm9iU3RlcHMoam9iSWQpO1xuICAgIHRoaXMucmVxdWlyZVN0ZXBJZChzdGVwKTtcbiAgICB0aGlzLnJlcXVpcmVVbmlxdWVTdGVwSWQoc3RlcHMsIHN0ZXAuaWQhLCBqb2JJZCk7XG4gICAgc3RlcHMucHVzaChzdGVwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyBhbiBleGlzdGluZyBzdGVwIGluIGEgam9iLCBwcmVzZXJ2aW5nIGl0cyBwb3NpdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGpvYklkIFRoZSBqb2IgbmFtZSAodW5pcXVlIHdpdGhpbiB0aGUgd29ya2Zsb3cpXG4gICAqIEBwYXJhbSBzdGVwSWQgVGhlIElEIG9mIHRoZSBzdGVwIHRvIHJlcGxhY2VcbiAgICogQHBhcmFtIHJlcGxhY2VtZW50U3RlcCBUaGUgcmVwbGFjZW1lbnQgc3RlcC4gSW5oZXJpdHMgdGhlIG9yaWdpbmFsIHN0ZXAncyBJRC5cbiAgICovXG4gIHB1YmxpYyByZXBsYWNlU3RlcChcbiAgICBqb2JJZDogc3RyaW5nLFxuICAgIHN0ZXBJZDogc3RyaW5nLFxuICAgIHJlcGxhY2VtZW50U3RlcDogd29ya2Zsb3dzLkpvYlN0ZXAsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHN0ZXBzID0gdGhpcy5yZXNvbHZlSm9iU3RlcHMoam9iSWQpO1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5maW5kU3RlcEluZGV4KHN0ZXBzLCBzdGVwSWQsIGpvYklkKTtcbiAgICBjb25zdCBuZXdTdGVwID0ge1xuICAgICAgLi4ucmVwbGFjZW1lbnRTdGVwLFxuICAgICAgaWQ6IHN0ZXBJZCxcbiAgICB9O1xuXG4gICAgc3RlcHNbaW5kZXhdID0gbmV3U3RlcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGEgc3VyZ2ljYWwgbW9kaWZpY2F0aW9uIHRvIGFuIGV4aXN0aW5nIHN0ZXAuXG4gICAqXG4gICAqIFRoZSBwcm92aWRlZCBwYXRjaCBpcyBzaGFsbG93LW1lcmdlZCBvbnRvIHRoZSBleGlzdGluZyBzdGVwLiBGaWVsZHMgbm90XG4gICAqIHByZXNlbnQgaW4gdGhlIHBhdGNoIGFyZSBwcmVzZXJ2ZWQgdW5jaGFuZ2VkLiBVc2UgYGdldFN0ZXBgIHRvIHJlYWQgdGhlXG4gICAqIGN1cnJlbnQgc3RlcCB2YWx1ZXMgYmVmb3JlIGNvbnN0cnVjdGluZyB0aGUgcGF0Y2guXG4gICAqXG4gICAqIEBwYXJhbSBqb2JJZCBUaGUgam9iIG5hbWUgKHVuaXF1ZSB3aXRoaW4gdGhlIHdvcmtmbG93KVxuICAgKiBAcGFyYW0gc3RlcElkIFRoZSBJRCBvZiB0aGUgc3RlcCB0byBwYXRjaFxuICAgKiBAcGFyYW0gcGF0Y2ggQSBwYXJ0aWFsIHN0ZXAgb2JqZWN0IHdob3NlIGZpZWxkcyBhcmUgc2hhbGxvdy1tZXJnZWQgb250byB0aGUgZXhpc3Rpbmcgc3RlcFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBBcHBlbmQgYSBmbGFnIHRvIGFuIGV4aXN0aW5nIHRlc3QgY29tbWFuZDpcbiAgICogY29uc3Qgc3RlcCA9IHdvcmtmbG93LmdldFN0ZXAoXCJidWlsZFwiLCBcInRlc3RcIik7XG4gICAqIHdvcmtmbG93LnBhdGNoU3RlcChcImJ1aWxkXCIsIFwidGVzdFwiLCB7XG4gICAqICAgcnVuOiBgJHtzdGVwLnJ1bn0gLS10ZXN0UGF0aElnbm9yZVBhdHRlcm5zIFwiaW50ZWdyYXRpb24vKlwiYCxcbiAgICogfSk7XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIEFkZCBhbiBlbnYgdmFyIHdpdGhvdXQgcmVwbGFjaW5nIGV4aXN0aW5nIG9uZXM6XG4gICAqIGNvbnN0IHN0ZXAgPSB3b3JrZmxvdy5nZXRTdGVwKFwiYnVpbGRcIiwgXCJpbnN0YWxsXCIpO1xuICAgKiB3b3JrZmxvdy5wYXRjaFN0ZXAoXCJidWlsZFwiLCBcImluc3RhbGxcIiwge1xuICAgKiAgIGVudjogeyAuLi5zdGVwLmVudiwgTk9ERV9BVVRIX1RPS0VOOiBcIiR7eyBzdGVwcy5qZnJvZy5vdXRwdXRzLm9pZGMtdG9rZW4gfX1cIiB9LFxuICAgKiB9KTtcbiAgICovXG4gIHB1YmxpYyBwYXRjaFN0ZXAoXG4gICAgam9iSWQ6IHN0cmluZyxcbiAgICBzdGVwSWQ6IHN0cmluZyxcbiAgICBwYXRjaDogd29ya2Zsb3dzLkpvYlN0ZXAsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHN0ZXBzID0gdGhpcy5yZXNvbHZlSm9iU3RlcHMoam9iSWQpO1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5maW5kU3RlcEluZGV4KHN0ZXBzLCBzdGVwSWQsIGpvYklkKTtcbiAgICBjb25zdCBjdXJyZW50U3RlcCA9IHN0ZXBzW2luZGV4XTtcbiAgICBzdGVwc1tpbmRleF0gPSB7IC4uLmN1cnJlbnRTdGVwLCAuLi5wYXRjaCwgaWQ6IHN0ZXBJZCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBzdGVwIGZyb20gYSBqb2IgYnkgc3RlcCBJRC5cbiAgICpcbiAgICogQHBhcmFtIGpvYklkIFRoZSBqb2IgbmFtZSAodW5pcXVlIHdpdGhpbiB0aGUgd29ya2Zsb3cpXG4gICAqIEBwYXJhbSBzdGVwSWQgVGhlIElEIG9mIHRoZSBzdGVwIHRvIHJlbW92ZVxuICAgKi9cbiAgcHVibGljIHJlbW92ZVN0ZXAoam9iSWQ6IHN0cmluZywgc3RlcElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBzdGVwcyA9IHRoaXMucmVzb2x2ZUpvYlN0ZXBzKGpvYklkKTtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZmluZFN0ZXBJbmRleChzdGVwcywgc3RlcElkLCBqb2JJZCk7XG4gICAgc3RlcHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnNlcnRzIGEgc3RlcCBiZWZvcmUgYW4gZXhpc3Rpbmcgc3RlcCwgaWRlbnRpZmllZCBieSBJRC5cbiAgICpcbiAgICogQHBhcmFtIGpvYklkIFRoZSBqb2IgbmFtZSAodW5pcXVlIHdpdGhpbiB0aGUgd29ya2Zsb3cpXG4gICAqIEBwYXJhbSByZWZlcmVuY2VTdGVwSWQgVGhlIElEIG9mIHRoZSBzdGVwIHRvIGluc2VydCBiZWZvcmVcbiAgICogQHBhcmFtIHN0ZXAgVGhlIHN0ZXAgdG8gaW5zZXJ0LiBNdXN0IGhhdmUgYW4gYGlkYCBzZXQuXG4gICAqL1xuICBwdWJsaWMgaW5zZXJ0U3RlcEJlZm9yZShcbiAgICBqb2JJZDogc3RyaW5nLFxuICAgIHJlZmVyZW5jZVN0ZXBJZDogc3RyaW5nLFxuICAgIHN0ZXA6IHdvcmtmbG93cy5Kb2JTdGVwLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBzdGVwcyA9IHRoaXMucmVzb2x2ZUpvYlN0ZXBzKGpvYklkKTtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZmluZFN0ZXBJbmRleChzdGVwcywgcmVmZXJlbmNlU3RlcElkLCBqb2JJZCk7XG4gICAgdGhpcy5yZXF1aXJlU3RlcElkKHN0ZXApO1xuICAgIHRoaXMucmVxdWlyZVVuaXF1ZVN0ZXBJZChzdGVwcywgc3RlcC5pZCEsIGpvYklkKTtcbiAgICBzdGVwcy5zcGxpY2UoaW5kZXgsIDAsIHN0ZXApO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc2VydHMgYSBzdGVwIGFmdGVyIGFuIGV4aXN0aW5nIHN0ZXAsIGlkZW50aWZpZWQgYnkgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBqb2JJZCBUaGUgam9iIG5hbWUgKHVuaXF1ZSB3aXRoaW4gdGhlIHdvcmtmbG93KVxuICAgKiBAcGFyYW0gcmVmZXJlbmNlU3RlcElkIFRoZSBJRCBvZiB0aGUgc3RlcCB0byBpbnNlcnQgYWZ0ZXJcbiAgICogQHBhcmFtIHN0ZXAgVGhlIHN0ZXAgdG8gaW5zZXJ0LiBNdXN0IGhhdmUgYW4gYGlkYCBzZXQuXG4gICAqL1xuICBwdWJsaWMgaW5zZXJ0U3RlcEFmdGVyKFxuICAgIGpvYklkOiBzdHJpbmcsXG4gICAgcmVmZXJlbmNlU3RlcElkOiBzdHJpbmcsXG4gICAgc3RlcDogd29ya2Zsb3dzLkpvYlN0ZXAsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHN0ZXBzID0gdGhpcy5yZXNvbHZlSm9iU3RlcHMoam9iSWQpO1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5maW5kU3RlcEluZGV4KHN0ZXBzLCByZWZlcmVuY2VTdGVwSWQsIGpvYklkKTtcbiAgICB0aGlzLnJlcXVpcmVTdGVwSWQoc3RlcCk7XG4gICAgdGhpcy5yZXF1aXJlVW5pcXVlU3RlcElkKHN0ZXBzLCBzdGVwLmlkISwgam9iSWQpO1xuICAgIHN0ZXBzLnNwbGljZShpbmRleCArIDEsIDAsIHN0ZXApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBtdXRhYmxlIHN0ZXBzIGFycmF5IGZvciBhIGpvYi5cbiAgICogVGhyb3dzIGlmIHRoZSBqb2IgaXMgbm90IGZvdW5kIG9yIGlzIGEgcmV1c2FibGUgd29ya2Zsb3cgY2FsbC5cbiAgICovXG4gIHByaXZhdGUgcmVzb2x2ZUpvYlN0ZXBzKGpvYklkOiBzdHJpbmcpOiB3b3JrZmxvd3MuSm9iU3RlcFtdIHtcbiAgICBjb25zdCBqb2IgPSB0aGlzLl9qb2JzW2pvYklkXTtcbiAgICBpZiAoIWpvYikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSm9iIFwiJHtqb2JJZH1cIiBub3QgZm91bmQgaW4gd29ya2Zsb3cgXCIke3RoaXMubmFtZX1cIi4gQXZhaWxhYmxlIGpvYnM6ICR7T2JqZWN0LmtleXModGhpcy5fam9icykuam9pbihcIiwgXCIpIHx8IFwiKG5vbmUpXCJ9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcInVzZXNcIiBpbiBqb2IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEpvYiBcIiR7am9iSWR9XCIgaXMgYSByZXVzYWJsZSB3b3JrZmxvdyBjYWxsIGFuZCBkb2VzIG5vdCBoYXZlIHN0ZXBzYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBqb2Iuc3RlcHMgYXMgd29ya2Zsb3dzLkpvYlN0ZXBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyB0aGUgaW5kZXggb2YgYSBzdGVwIGJ5IElEIG9yIG5hbWUgd2l0aGluIGEgc3RlcHMgYXJyYXkuXG4gICAqIE1hdGNoZXMgYWdhaW5zdCBgaWRgIGZpcnN0LCB0aGVuIGZhbGxzIGJhY2sgdG8gYG5hbWVgLlxuICAgKiBUaHJvd3MgaWYgdGhlIHN0ZXAgaXMgbm90IGZvdW5kLCBvciBpZiBtdWx0aXBsZSBzdGVwcyBtYXRjaCBieSBuYW1lLlxuICAgKi9cbiAgcHJpdmF0ZSBmaW5kU3RlcEluZGV4KFxuICAgIHN0ZXBzOiB3b3JrZmxvd3MuSm9iU3RlcFtdLFxuICAgIHN0ZXBJZE9yTmFtZTogc3RyaW5nLFxuICAgIGpvYklkOiBzdHJpbmcsXG4gICk6IG51bWJlciB7XG4gICAgLy8gVHJ5IGV4YWN0IGlkIG1hdGNoIGZpcnN0XG4gICAgY29uc3QgYnlJZCA9IHN0ZXBzLmZpbmRJbmRleCgocykgPT4gcy5pZCA9PT0gc3RlcElkT3JOYW1lKTtcbiAgICBpZiAoYnlJZCAhPT0gLTEpIHtcbiAgICAgIHJldHVybiBieUlkO1xuICAgIH1cblxuICAgIC8vIEZhbGwgYmFjayB0byBuYW1lIG1hdGNoXG4gICAgY29uc3QgYnlOYW1lOiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RlcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChzdGVwc1tpXS5uYW1lID09PSBzdGVwSWRPck5hbWUpIHtcbiAgICAgICAgYnlOYW1lLnB1c2goaSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGJ5TmFtZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiBieU5hbWVbMF07XG4gICAgfVxuXG4gICAgaWYgKGJ5TmFtZS5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBNdWx0aXBsZSBzdGVwcyBtYXRjaCBuYW1lIFwiJHtzdGVwSWRPck5hbWV9XCIgaW4gam9iIFwiJHtqb2JJZH1cIiAoYXQgaW5kaWNlcyAke2J5TmFtZS5qb2luKFwiLCBcIil9KS4gVXNlIGEgdW5pcXVlIHN0ZXAgXCJpZFwiIGluc3RlYWQuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgYXZhaWxhYmxlSWRzID0gc3RlcHNcbiAgICAgIC5tYXAoKHMpID0+IHMuaWQpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAuam9pbihcIiwgXCIpO1xuICAgIGNvbnN0IGF2YWlsYWJsZU5hbWVzID0gc3RlcHNcbiAgICAgIC5tYXAoKHMpID0+IHMubmFtZSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5qb2luKFwiLCBcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFN0ZXAgXCIke3N0ZXBJZE9yTmFtZX1cIiBub3QgZm91bmQgaW4gam9iIFwiJHtqb2JJZH1cIi4gQXZhaWxhYmxlIHN0ZXAgSURzOiAke2F2YWlsYWJsZUlkcyB8fCBcIihub25lKVwifS4gQXZhaWxhYmxlIHN0ZXAgbmFtZXM6ICR7YXZhaWxhYmxlTmFtZXMgfHwgXCIobm9uZSlcIn1gLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoYXQgYSBzdGVwIGhhcyBhbiBgaWRgIHNldC5cbiAgICovXG4gIHByaXZhdGUgcmVxdWlyZVN0ZXBJZChzdGVwOiB3b3JrZmxvd3MuSm9iU3RlcCk6IHZvaWQge1xuICAgIGlmICghc3RlcC5pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnU3RlcCBtdXN0IGhhdmUgYW4gXCJpZFwiIHRvIGJlIGFkZGVkIHZpYSB0aGUgc3RlcCBtdXRhdGlvbiBBUEknLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoYXQgYSBzdGVwIElEIGlzIHVuaXF1ZSB3aXRoaW4gYSBqb2IncyBzdGVwcy5cbiAgICovXG4gIHByaXZhdGUgcmVxdWlyZVVuaXF1ZVN0ZXBJZChcbiAgICBzdGVwczogd29ya2Zsb3dzLkpvYlN0ZXBbXSxcbiAgICBzdGVwSWQ6IHN0cmluZyxcbiAgICBqb2JJZDogc3RyaW5nLFxuICApOiB2b2lkIHtcbiAgICBpZiAoc3RlcHMuc29tZSgocykgPT4gcy5pZCA9PT0gc3RlcElkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgU3RlcCBJRCBcIiR7c3RlcElkfVwiIGFscmVhZHkgZXhpc3RzIGluIGpvYiBcIiR7am9iSWR9XCIuIFN0ZXAgSURzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhIGpvYi5gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbmRlcldvcmtmbG93KCkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBcInJ1bi1uYW1lXCI6IHRoaXMucnVuTmFtZSxcbiAgICAgIG9uOiBzbmFrZUNhc2VLZXlzKHRoaXMuZXZlbnRzKSxcbiAgICAgIGNvbmN1cnJlbmN5OiB0aGlzLmNvbmN1cnJlbmN5XG4gICAgICAgID8ge1xuICAgICAgICAgICAgZ3JvdXA6IHRoaXMuY29uY3VycmVuY3k/Lmdyb3VwLFxuICAgICAgICAgICAgXCJjYW5jZWwtaW4tcHJvZ3Jlc3NcIjogdGhpcy5jb25jdXJyZW5jeS5jYW5jZWxJblByb2dyZXNzLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBlbnY6IHRoaXMuZW52LFxuICAgICAgam9iczogcmVuZGVySm9icyh0aGlzLl9qb2JzLCB0aGlzLmFjdGlvbnMpLFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gc25ha2VDYXNlS2V5czxUID0gdW5rbm93bj4ob2JqOiBUKTogVCB7XG4gIGlmICh0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiIHx8IG9iaiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICByZXR1cm4gb2JqLm1hcChzbmFrZUNhc2VLZXlzKSBhcyBhbnk7XG4gIH1cblxuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGZvciAobGV0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvYmopKSB7XG4gICAgaWYgKHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT0gbnVsbCkge1xuICAgICAgdiA9IHNuYWtlQ2FzZUtleXModik7XG4gICAgfVxuICAgIHJlc3VsdFtzbmFrZShrKV0gPSB2O1xuICB9XG4gIHJldHVybiByZXN1bHQgYXMgYW55O1xufVxuXG5mdW5jdGlvbiByZW5kZXJKb2JzKFxuICBqb2JzOiBSZWNvcmQ8c3RyaW5nLCB3b3JrZmxvd3MuSm9iIHwgd29ya2Zsb3dzLkpvYkNhbGxpbmdSZXVzYWJsZVdvcmtmbG93PixcbiAgYWN0aW9uczogR2l0SHViQWN0aW9uc1Byb3ZpZGVyLFxuKSB7XG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgZm9yIChjb25zdCBbbmFtZSwgam9iXSBvZiBPYmplY3QuZW50cmllcyhqb2JzKSkge1xuICAgIHJlc3VsdFtuYW1lXSA9IHJlbmRlckpvYihqb2IpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG5cbiAgLyoqIEBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYWN0aW9ucy9yZWZlcmVuY2Uvd29ya2Zsb3ctc3ludGF4LWZvci1naXRodWItYWN0aW9ucyAqL1xuICBmdW5jdGlvbiByZW5kZXJKb2IoXG4gICAgam9iOiB3b3JrZmxvd3MuSm9iIHwgd29ya2Zsb3dzLkpvYkNhbGxpbmdSZXVzYWJsZVdvcmtmbG93LFxuICApIHtcbiAgICBjb25zdCBzdGVwcyA9IG5ldyBBcnJheTx3b3JrZmxvd3MuSm9iU3RlcD4oKTtcblxuICAgIC8vIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvdXNpbmctd29ya2Zsb3dzL3JldXNpbmctd29ya2Zsb3dzI3N1cHBvcnRlZC1rZXl3b3Jkcy1mb3Itam9icy10aGF0LWNhbGwtYS1yZXVzYWJsZS13b3JrZmxvd1xuICAgIGlmIChcInVzZXNcIiBpbiBqb2IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGpvYi5uYW1lLFxuICAgICAgICBuZWVkczogYXJyYXlPclNjYWxhcihqb2IubmVlZHMpLFxuICAgICAgICBpZjogam9iLmlmLFxuICAgICAgICBwZXJtaXNzaW9uczoga2ViYWJDYXNlS2V5cyhqb2IucGVybWlzc2lvbnMpLFxuICAgICAgICBjb25jdXJyZW5jeTogam9iLmNvbmN1cnJlbmN5LFxuICAgICAgICB1c2VzOiBqb2IudXNlcyxcbiAgICAgICAgd2l0aDogam9iLndpdGgsXG4gICAgICAgIHNlY3JldHM6IGpvYi5zZWNyZXRzLFxuICAgICAgICBzdHJhdGVneTogcmVuZGVySm9iU3RyYXRlZ3koam9iLnN0cmF0ZWd5KSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGpvYi50b29scykge1xuICAgICAgc3RlcHMucHVzaCguLi5zZXR1cFRvb2xzKGpvYi50b29scykpO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJEZWZpbmVkU3RlcHMgPSBrZWJhYkNhc2VLZXlzKHJlc29sdmUoam9iLnN0ZXBzKSwgZmFsc2UpO1xuICAgIHN0ZXBzLnB1c2goLi4udXNlckRlZmluZWRTdGVwcyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogam9iLm5hbWUsXG4gICAgICBuZWVkczogYXJyYXlPclNjYWxhcihqb2IubmVlZHMpLFxuICAgICAgXCJydW5zLW9uXCI6IGFycmF5T3JTY2FsYXIoam9iLnJ1bnNPbkdyb3VwKSA/PyBhcnJheU9yU2NhbGFyKGpvYi5ydW5zT24pLFxuICAgICAgcGVybWlzc2lvbnM6IGtlYmFiQ2FzZUtleXMoam9iLnBlcm1pc3Npb25zKSxcbiAgICAgIGVudmlyb25tZW50OiBqb2IuZW52aXJvbm1lbnQsXG4gICAgICBjb25jdXJyZW5jeTogam9iLmNvbmN1cnJlbmN5LFxuICAgICAgb3V0cHV0czogcmVuZGVySm9iT3V0cHV0cyhqb2Iub3V0cHV0cyksXG4gICAgICBlbnY6IGpvYi5lbnYsXG4gICAgICBkZWZhdWx0czoga2ViYWJDYXNlS2V5cyhqb2IuZGVmYXVsdHMpLFxuICAgICAgaWY6IGpvYi5pZixcbiAgICAgIHN0ZXBzOiBzdGVwcy5tYXAocmVuZGVyU3RlcCksXG4gICAgICBcInRpbWVvdXQtbWludXRlc1wiOiBqb2IudGltZW91dE1pbnV0ZXMsXG4gICAgICBzdHJhdGVneTogcmVuZGVySm9iU3RyYXRlZ3koam9iLnN0cmF0ZWd5KSxcbiAgICAgIFwiY29udGludWUtb24tZXJyb3JcIjogam9iLmNvbnRpbnVlT25FcnJvcixcbiAgICAgIGNvbnRhaW5lcjogam9iLmNvbnRhaW5lcixcbiAgICAgIHNlcnZpY2VzOiBqb2Iuc2VydmljZXMsXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlckpvYk91dHB1dHMob3V0cHV0OiB3b3JrZmxvd3MuSm9iW1wib3V0cHV0c1wiXSkge1xuICAgIGlmIChvdXRwdXQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCByZW5kZXJlZDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW25hbWUsIHsgc3RlcElkLCBvdXRwdXROYW1lIH1dIG9mIE9iamVjdC5lbnRyaWVzKG91dHB1dCkpIHtcbiAgICAgIHJlbmRlcmVkW25hbWVdID0gYFxcJHt7IHN0ZXBzLiR7c3RlcElkfS5vdXRwdXRzLiR7b3V0cHV0TmFtZX0gfX1gO1xuICAgIH1cbiAgICByZXR1cm4gcmVuZGVyZWQ7XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXJKb2JTdHJhdGVneShzdHJhdGVneTogd29ya2Zsb3dzLkpvYltcInN0cmF0ZWd5XCJdKSB7XG4gICAgaWYgKHN0cmF0ZWd5ID09IG51bGwpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgcmVuZGVyZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgXCJtYXgtcGFyYWxsZWxcIjogc3RyYXRlZ3kubWF4UGFyYWxsZWwsXG4gICAgICBcImZhaWwtZmFzdFwiOiBzdHJhdGVneS5mYWlsRmFzdCxcbiAgICB9O1xuXG4gICAgaWYgKHN0cmF0ZWd5Lm1hdHJpeCkge1xuICAgICAgY29uc3QgbWF0cml4OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgICAgaW5jbHVkZTogc3RyYXRlZ3kubWF0cml4LmluY2x1ZGUsXG4gICAgICAgIGV4Y2x1ZGU6IHN0cmF0ZWd5Lm1hdHJpeC5leGNsdWRlLFxuICAgICAgfTtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVzXSBvZiBPYmplY3QuZW50cmllcyhcbiAgICAgICAgc3RyYXRlZ3kubWF0cml4LmRvbWFpbiA/PyB7fSxcbiAgICAgICkpIHtcbiAgICAgICAgaWYgKGtleSBpbiBtYXRyaXgpIHtcbiAgICAgICAgICAvLyBBIGRvbWFpbiBrZXkgd2FzIHNldCB0byBgaW5jbHVkZWAsIG9yIGBleGNsdWRlYDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYElsbGVnYWwgam9iIHN0cmF0ZWd5IG1hdHJpeCBrZXk6ICR7a2V5fWApO1xuICAgICAgICB9XG4gICAgICAgIG1hdHJpeFtrZXldID0gdmFsdWVzO1xuICAgICAgfVxuICAgICAgcmVuZGVyZWQubWF0cml4ID0gbWF0cml4O1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlclN0ZXAoc3RlcDogd29ya2Zsb3dzLkpvYlN0ZXApOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHN0ZXAubmFtZSxcbiAgICAgIGlkOiBzdGVwLmlkLFxuICAgICAgaWY6IHN0ZXAuaWYsXG4gICAgICB1c2VzOiBzdGVwLnVzZXMgJiYgYWN0aW9ucy5nZXQoc3RlcC51c2VzKSxcbiAgICAgIGVudjogc3RlcC5lbnYsXG4gICAgICBydW46IHN0ZXAucnVuLFxuICAgICAgc2hlbGw6IHN0ZXAuc2hlbGwsXG4gICAgICB3aXRoOiBzdGVwLndpdGgsXG4gICAgICBcImNvbnRpbnVlLW9uLWVycm9yXCI6IHN0ZXAuY29udGludWVPbkVycm9yLFxuICAgICAgXCJ0aW1lb3V0LW1pbnV0ZXNcIjogc3RlcC50aW1lb3V0TWludXRlcyxcbiAgICAgIFwid29ya2luZy1kaXJlY3RvcnlcIjogc3RlcC53b3JraW5nRGlyZWN0b3J5LFxuICAgICAgYmFja2dyb3VuZDogc3RlcC5iYWNrZ3JvdW5kLFxuICAgICAgd2FpdDogc3RlcC53YWl0LFxuICAgICAgXCJ3YWl0LWFsbFwiOiBzdGVwLndhaXRBbGwsXG4gICAgICBjYW5jZWw6IHN0ZXAuY2FuY2VsLFxuICAgICAgcGFyYWxsZWw6IHN0ZXAucGFyYWxsZWw/Lm1hcChyZW5kZXJTdGVwKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogRWFnZXJseSBhc3NpZ25zIHN0ZXAgSURzIHRvIGFsbCBub24tcmV1c2FibGUgam9icyBpbiBhIHJlY29yZC5cbiAqIFJldXNhYmxlIHdvcmtmbG93IGpvYnMgKHRob3NlIHdpdGggYHVzZXNgKSBhcmUgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkLlxuICovXG5mdW5jdGlvbiBhc3NpZ25Kb2JTdGVwSWRzKFxuICBqb2JzOiBSZWNvcmQ8c3RyaW5nLCB3b3JrZmxvd3MuSm9iIHwgd29ya2Zsb3dzLkpvYkNhbGxpbmdSZXVzYWJsZVdvcmtmbG93Pixcbik6IFJlY29yZDxzdHJpbmcsIHdvcmtmbG93cy5Kb2IgfCB3b3JrZmxvd3MuSm9iQ2FsbGluZ1JldXNhYmxlV29ya2Zsb3c+IHtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIHdvcmtmbG93cy5Kb2IgfCB3b3JrZmxvd3MuSm9iQ2FsbGluZ1JldXNhYmxlV29ya2Zsb3dcbiAgPiA9IHt9O1xuICBmb3IgKGNvbnN0IFtuYW1lLCBqb2JdIG9mIE9iamVjdC5lbnRyaWVzKGpvYnMpKSB7XG4gICAgaWYgKFwidXNlc1wiIGluIGpvYikge1xuICAgICAgcmVzdWx0W25hbWVdID0gam9iO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBKb2JzIHdpdGggbm8gbGVuZ3RoIG9yIHVuZGVmaW5lZCBzdGVwcyBhcmUgcGFzc2VkIHRocm91Z2ggc2Vuc2VcbiAgICAgIC8vIHN0ZXBzIG1heSBiZSBwb3B1bGF0ZWQgbGF0ZXIgZHVyaW5nIHN5bnRoZXNpcyAoZWcgc2V0dXBUb29scylcbiAgICAgIHJlc3VsdFtuYW1lXSA9XG4gICAgICAgIGpvYi5zdGVwcy5sZW5ndGggPiAwXG4gICAgICAgICAgPyB7IC4uLmpvYiwgc3RlcHM6IGVuc3VyZVN0ZXBzSGF2ZUlkcyhqb2Iuc3RlcHMpIH1cbiAgICAgICAgICA6IGpvYjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBBc3NpZ25zIGEgc3RhYmxlIGBpZGAgdG8gZXZlcnkgc3RlcCB0aGF0IGRvZXNuJ3QgYWxyZWFkeSBoYXZlIG9uZS5cbiAqXG4gKiBQcmlvcml0eTpcbiAqIDEuIEV4cGxpY2l0IGBpZGAgb24gdGhlIHN0ZXAg4oCUIHByZXNlcnZlZCBhcy1pcyBhbmQgbmV2ZXIgcmVuYW1lZC5cbiAqIDIuIERlcml2ZWQgZnJvbSBgbmFtZWAg4oCUIGNvbnZlcnRlZCB0byBzbmFrZV9jYXNlLlxuICogMy4gQ29udGVudCBoYXNoIGZhbGxiYWNrIOKAlCBgYXV0b188aGFzaD5gIGJhc2VkIG9uIGBydW5gIG9yIGB1c2VzYC5cbiAqXG4gKiBFeHBsaWNpdCBJRHMgYXJlIHJlc2VydmVkIGluIGEgZmlyc3QgcGFzcyBzbyB0aGF0IGRlcml2ZWQvYXV0byBJRHMgbmV2ZXJcbiAqIGNvbGxpZGUgd2l0aCB0aGVtLiBEdXBsaWNhdGUgZXhwbGljaXQgSURzIGluIHRoZSBzYW1lIGpvYiB0aHJvdyBhbiBlcnJvci5cbiAqIERlcml2ZWQvYXV0byBJRHMgdGhhdCBjb2xsaWRlIGFyZSBkaXNhbWJpZ3VhdGVkIHdpdGggYF8yYCwgYF8zYCwgZXRjLlxuICovXG5mdW5jdGlvbiBlbnN1cmVTdGVwc0hhdmVJZHMoXG4gIHN0ZXBzOiB3b3JrZmxvd3MuSm9iU3RlcFtdLFxuKTogQXJyYXk8d29ya2Zsb3dzLkpvYlN0ZXAgJiB7IGlkOiBzdHJpbmcgfT4ge1xuICBjb25zdCB1c2VkSWRzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcblxuICAvLyBGaXJzdCBwYXNzOiByZXNlcnZlIGFsbCBleHBsaWNpdCBJRHMgc28gZGVyaXZlZCBJRHMgd29uJ3QgY2xhaW0gdGhlbS5cbiAgZm9yIChjb25zdCBzdGVwIG9mIHN0ZXBzKSB7XG4gICAgaWYgKHN0ZXAuaWQpIHtcbiAgICAgIGlmICh1c2VkSWRzLmhhcyhzdGVwLmlkKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYER1cGxpY2F0ZSBleHBsaWNpdCBzdGVwIGlkIFwiJHtzdGVwLmlkfVwiLiBTdGVwIElEcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSBqb2IuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHVzZWRJZHMuc2V0KHN0ZXAuaWQsIDEpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVuaXF1ZUlkKGJhc2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgY291bnQgPSB1c2VkSWRzLmdldChiYXNlKSA/PyAwO1xuICAgIGlmIChjb3VudCA9PT0gMCkge1xuICAgICAgdXNlZElkcy5zZXQoYmFzZSwgMSk7XG4gICAgICByZXR1cm4gYmFzZTtcbiAgICB9XG4gICAgY29uc3QgbmV4dCA9IGNvdW50ICsgMTtcbiAgICB1c2VkSWRzLnNldChiYXNlLCBuZXh0KTtcbiAgICByZXR1cm4gYCR7YmFzZX1fJHtuZXh0fWA7XG4gIH1cblxuICByZXR1cm4gc3RlcHMubWFwKChzdGVwKSA9PiB7XG4gICAgaWYgKHN0ZXAuaWQpIHtcbiAgICAgIC8vIEV4cGxpY2l0IGlkIOKAlCBhbHJlYWR5IHJlc2VydmVkIGluIGZpcnN0IHBhc3MsIHVzZSBhcy1pc1xuICAgICAgcmV0dXJuIHsgLi4uc3RlcCwgaWQ6IHN0ZXAuaWQgfTtcbiAgICB9XG5cbiAgICBpZiAoc3RlcC5uYW1lKSB7XG4gICAgICAvLyBEZXJpdmUgZnJvbSBuYW1lOiBhbGxvdyBvbmx5IGNoYXJhY3RlcnMgdmFsaWQgZm9yIGEgR2l0SHViIHdvcmtmbG93IGlkXG4gICAgICBjb25zdCBiYXNlID0gc3RlcC5uYW1lXG4gICAgICAgIC8vIGNvbnZlcnQgc3BhY2VzIHRvIHVuZGVyc2NvcmVzXG4gICAgICAgIC5yZXBsYWNlKC9cXHMrL2csIFwiX1wiKVxuICAgICAgICAvLyBub3JtYWxpemUgdG8gbG93ZXJjYXNlXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgIC8vIHJlbW92ZSBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIGluIHdvcmtmbG93IGlkcyAoa2VlcCBhLXosIDAtOSwgXyBhbmQgLSlcbiAgICAgICAgLnJlcGxhY2UoL1teYS16MC05Xy1dL2csIFwiX1wiKVxuICAgICAgICAvLyBjb2xsYXBzZSBtdWx0aXBsZSB1bmRlcnNjb3Jlc1xuICAgICAgICAucmVwbGFjZSgvXysvZywgXCJfXCIpXG4gICAgICAgIC8vIHRyaW0gbGVhZGluZy90cmFpbGluZyB1bmRlcnNjb3JlcyBvciBoeXBoZW5zXG4gICAgICAgIC5yZXBsYWNlKC9eX3xfJC9nLCBcIlwiKTtcbiAgICAgIGNvbnN0IGlkID0gdW5pcXVlSWQoYmFzZSk7XG4gICAgICByZXR1cm4geyAuLi5zdGVwLCBpZCB9O1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrOiBjb250ZW50IGhhc2hcbiAgICBjb25zdCBjb250ZW50ID0gc3RlcC5ydW4gPz8gc3RlcC51c2VzID8/IFwiXCI7XG4gICAgY29uc3QgaGFzaCA9IGNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKGNvbnRlbnQpLmRpZ2VzdChcImhleFwiKS5zbGljZSgwLCA4KTtcbiAgICBjb25zdCBpZCA9IHVuaXF1ZUlkKGBhdXRvXyR7aGFzaH1gKTtcbiAgICByZXR1cm4geyAuLi5zdGVwLCBpZCB9O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYXJyYXlPclNjYWxhcjxUPihhcnI6IFQgfCBUW10gfCB1bmRlZmluZWQpOiBUIHwgVFtdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICByZXR1cm4gYXJyO1xuICB9XG4gIGlmIChhcnIgPT0gbnVsbCB8fCBhcnIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGFycjtcbiAgfVxuICBpZiAoYXJyLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBhcnJbMF07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn1cblxuZnVuY3Rpb24gc2V0dXBUb29scyh0b29sczogd29ya2Zsb3dzLlRvb2xzKSB7XG4gIGNvbnN0IHN0ZXBzOiB3b3JrZmxvd3MuSm9iU3RlcFtdID0gW107XG5cbiAgaWYgKHRvb2xzLmphdmEpIHtcbiAgICBpZiAodG9vbHMuamF2YS5jYWNoZSAmJiAhdG9vbHMuamF2YS5wYWNrYWdlTWFuYWdlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcImphdmEucGFja2FnZU1hbmFnZXIgaXMgcmVxdWlyZWQgd2hlbiBqYXZhLmNhY2hlIGlzIHRydWVcIixcbiAgICAgICk7XG4gICAgfVxuICAgIHN0ZXBzLnB1c2goe1xuICAgICAgdXNlczogR2l0SHViQWN0aW9ucy5BQ1RJT05TX1NFVFVQX0pBVkEsXG4gICAgICB3aXRoOiB7XG4gICAgICAgIGRpc3RyaWJ1dGlvbjogdG9vbHMuamF2YS5kaXN0cmlidXRpb24gPz8gXCJjb3JyZXR0b1wiLFxuICAgICAgICBcImphdmEtdmVyc2lvblwiOiB0b29scy5qYXZhLnZlcnNpb24sXG4gICAgICAgIC4uLih0b29scy5qYXZhLmNhY2hlICYmIHsgY2FjaGU6IHRvb2xzLmphdmEucGFja2FnZU1hbmFnZXIgfSksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHRvb2xzLm5vZGUpIHtcbiAgICBzdGVwcy5wdXNoKHtcbiAgICAgIHVzZXM6IEdpdEh1YkFjdGlvbnMuQUNUSU9OU19TRVRVUF9OT0RFLFxuICAgICAgd2l0aDoge1xuICAgICAgICBcIm5vZGUtdmVyc2lvblwiOiB0b29scy5ub2RlLnZlcnNpb24sXG4gICAgICAgIFwicGFja2FnZS1tYW5hZ2VyLWNhY2hlXCI6IHRvb2xzLm5vZGUuY2FjaGUgPz8gZmFsc2UsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHRvb2xzLnB5dGhvbikge1xuICAgIGlmICh0b29scy5weXRob24uY2FjaGUgJiYgIXRvb2xzLnB5dGhvbi5wYWNrYWdlTWFuYWdlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcInB5dGhvbi5wYWNrYWdlTWFuYWdlciBpcyByZXF1aXJlZCB3aGVuIHB5dGhvbi5jYWNoZSBpcyB0cnVlXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBzdGVwcy5wdXNoKHtcbiAgICAgIHVzZXM6IEdpdEh1YkFjdGlvbnMuQUNUSU9OU19TRVRVUF9QWVRIT04sXG4gICAgICB3aXRoOiB7XG4gICAgICAgIFwicHl0aG9uLXZlcnNpb25cIjogdG9vbHMucHl0aG9uLnZlcnNpb24sXG4gICAgICAgIC4uLih0b29scy5weXRob24uY2FjaGUgJiYgeyBjYWNoZTogdG9vbHMucHl0aG9uLnBhY2thZ2VNYW5hZ2VyIH0pLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh0b29scy5nbykge1xuICAgIHN0ZXBzLnB1c2goe1xuICAgICAgdXNlczogR2l0SHViQWN0aW9ucy5BQ1RJT05TX1NFVFVQX0dPLFxuICAgICAgd2l0aDoge1xuICAgICAgICBcImdvLXZlcnNpb25cIjogdG9vbHMuZ28udmVyc2lvbixcbiAgICAgICAgY2FjaGU6IHRvb2xzLmdvLmNhY2hlID8/IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh0b29scy5kb3RuZXQpIHtcbiAgICBzdGVwcy5wdXNoKHtcbiAgICAgIHVzZXM6IEdpdEh1YkFjdGlvbnMuQUNUSU9OU19TRVRVUF9ET1RORVQsXG4gICAgICB3aXRoOiB7XG4gICAgICAgIFwiZG90bmV0LXZlcnNpb25cIjogdG9vbHMuZG90bmV0LnZlcnNpb24sXG4gICAgICAgIGNhY2hlOiB0b29scy5kb3RuZXQuY2FjaGUgPz8gZmFsc2UsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHN0ZXBzO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlKb2JDb25zdHJhaW50cyhcbiAgam9iczogUmVjb3JkPHN0cmluZywgd29ya2Zsb3dzLkpvYiB8IHdvcmtmbG93cy5Kb2JDYWxsaW5nUmV1c2FibGVXb3JrZmxvdz4sXG4pIHtcbiAgLy8gdmVyaWZ5IHRoYXQgam9iIGhhcyBhIFwicGVybWlzc2lvbnNcIiBzdGF0ZW1lbnQgdG8gZW5zdXJlIHdvcmtmbG93IGNhblxuICAvLyBvcGVyYXRlIGluIHJlcG9zIHdpdGggZGVmYXVsdCB0b2tlbnMgc2V0IHRvIHJlYWRvbmx5XG4gIGZvciAoY29uc3QgW2lkLCBqb2JdIG9mIE9iamVjdC5lbnRyaWVzKGpvYnMpKSB7XG4gICAgaWYgKCFqb2IucGVybWlzc2lvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYCR7aWR9OiBhbGwgd29ya2Zsb3cgam9icyBtdXN0IGhhdmUgYSBcInBlcm1pc3Npb25zXCIgY2xhdXNlIHRvIGVuc3VyZSB3b3JrZmxvdyBjYW4gb3BlcmF0ZSBpbiByZXN0cmljdGVkIHJlcG9zaXRvcmllc2AsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -45,7 +45,7 @@ const yaml_1 = require("../yaml");
|
|
|
45
45
|
* @see https://docs.gitlab.com/ee/ci/yaml/
|
|
46
46
|
*/
|
|
47
47
|
class CiConfiguration extends component_1.Component {
|
|
48
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.gitlab.CiConfiguration", version: "0.
|
|
48
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.gitlab.CiConfiguration", version: "0.102.0" };
|
|
49
49
|
/**
|
|
50
50
|
* The name of the configuration.
|
|
51
51
|
*/
|
|
@@ -8,7 +8,7 @@ const nested_configuration_1 = require("./nested-configuration");
|
|
|
8
8
|
* A GitLab CI for the main `.gitlab-ci.yml` file.
|
|
9
9
|
*/
|
|
10
10
|
class GitlabConfiguration extends configuration_1.CiConfiguration {
|
|
11
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.gitlab.GitlabConfiguration", version: "0.
|
|
11
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.gitlab.GitlabConfiguration", version: "0.102.0" };
|
|
12
12
|
nestedTemplates = {};
|
|
13
13
|
constructor(project, options) {
|
|
14
14
|
super(project, "gitlab-ci", options);
|
|
@@ -7,7 +7,7 @@ const configuration_1 = require("./configuration");
|
|
|
7
7
|
* A GitLab CI for templates that are created and included in the `.gitlab-ci.yml` file.
|
|
8
8
|
*/
|
|
9
9
|
class NestedConfiguration extends configuration_1.CiConfiguration {
|
|
10
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.gitlab.NestedConfiguration", version: "0.
|
|
10
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.gitlab.NestedConfiguration", version: "0.102.0" };
|
|
11
11
|
parent;
|
|
12
12
|
constructor(project, parent, name, options) {
|
|
13
13
|
super(project, name, options);
|
package/lib/gitpod.js
CHANGED
|
@@ -106,7 +106,7 @@ var GitpodPortVisibility;
|
|
|
106
106
|
* The Gitpod component which emits .gitpod.yml
|
|
107
107
|
*/
|
|
108
108
|
class Gitpod extends component_1.Component {
|
|
109
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Gitpod", version: "0.
|
|
109
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Gitpod", version: "0.102.0" };
|
|
110
110
|
dockerImage;
|
|
111
111
|
prebuilds;
|
|
112
112
|
tasks = new Array();
|
package/lib/ignore-file.js
CHANGED
|
@@ -5,7 +5,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
|
5
5
|
const file_1 = require("./file");
|
|
6
6
|
const util_1 = require("./util");
|
|
7
7
|
class IgnoreFile extends file_1.FileBase {
|
|
8
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.IgnoreFile", version: "0.
|
|
8
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.IgnoreFile", version: "0.102.0" };
|
|
9
9
|
_patterns;
|
|
10
10
|
filterCommentLines;
|
|
11
11
|
filterEmptyLines;
|
package/lib/ini.js
CHANGED
|
@@ -41,7 +41,7 @@ const object_file_1 = require("./object-file");
|
|
|
41
41
|
* Represents an INI file.
|
|
42
42
|
*/
|
|
43
43
|
class IniFile extends object_file_1.ObjectFile {
|
|
44
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.IniFile", version: "0.
|
|
44
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.IniFile", version: "0.102.0" };
|
|
45
45
|
constructor(project, filePath, options) {
|
|
46
46
|
super(project, filePath, options);
|
|
47
47
|
}
|
package/lib/java/java-project.js
CHANGED
|
@@ -16,7 +16,7 @@ const util_1 = require("../util");
|
|
|
16
16
|
* @pjid java
|
|
17
17
|
*/
|
|
18
18
|
class JavaProject extends github_1.GitHubProject {
|
|
19
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.JavaProject", version: "0.
|
|
19
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.JavaProject", version: "0.102.0" };
|
|
20
20
|
/**
|
|
21
21
|
* API for managing `pom.xml`.
|
|
22
22
|
*/
|
package/lib/java/junit.js
CHANGED
|
@@ -10,7 +10,7 @@ const TESTDIR = (0, path_1.join)("src", "test", "java");
|
|
|
10
10
|
* Implements JUnit-based testing.
|
|
11
11
|
*/
|
|
12
12
|
class Junit extends component_1.Component {
|
|
13
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.Junit", version: "0.
|
|
13
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.Junit", version: "0.102.0" };
|
|
14
14
|
constructor(project, options) {
|
|
15
15
|
super(project);
|
|
16
16
|
const pom = options.pom;
|
|
@@ -7,7 +7,7 @@ const component_1 = require("../component");
|
|
|
7
7
|
* Adds the maven-compiler plugin to a POM file and the `compile` task.
|
|
8
8
|
*/
|
|
9
9
|
class MavenCompile extends component_1.Component {
|
|
10
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.MavenCompile", version: "0.
|
|
10
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.MavenCompile", version: "0.102.0" };
|
|
11
11
|
constructor(project, pom, options = {}) {
|
|
12
12
|
super(project);
|
|
13
13
|
project.gitignore.exclude("target");
|
|
@@ -7,7 +7,7 @@ const component_1 = require("../component");
|
|
|
7
7
|
* Configures a maven project to produce a .jar archive with sources and javadocs.
|
|
8
8
|
*/
|
|
9
9
|
class MavenPackaging extends component_1.Component {
|
|
10
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.MavenPackaging", version: "0.
|
|
10
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.MavenPackaging", version: "0.102.0" };
|
|
11
11
|
/**
|
|
12
12
|
* The directory containing the package output, relative to the project outdir
|
|
13
13
|
*/
|
package/lib/java/maven-sample.js
CHANGED
|
@@ -9,7 +9,7 @@ const sample_file_1 = require("../sample-file");
|
|
|
9
9
|
* Java code sample.
|
|
10
10
|
*/
|
|
11
11
|
class MavenSample extends component_1.Component {
|
|
12
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.MavenSample", version: "0.
|
|
12
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.MavenSample", version: "0.102.0" };
|
|
13
13
|
constructor(project, options) {
|
|
14
14
|
super(project);
|
|
15
15
|
const pkg = options.package.split(".");
|
package/lib/java/pom.js
CHANGED
|
@@ -13,7 +13,7 @@ const POM_XML_ATTRS = {
|
|
|
13
13
|
"@xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
|
|
14
14
|
};
|
|
15
15
|
class UpdatePolicy {
|
|
16
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.UpdatePolicy", version: "0.
|
|
16
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.UpdatePolicy", version: "0.102.0" };
|
|
17
17
|
static ALWAYS = "always";
|
|
18
18
|
static DAILY = "daily";
|
|
19
19
|
static NEVER = "never";
|
|
@@ -37,7 +37,7 @@ var ChecksumPolicy;
|
|
|
37
37
|
* details used by Maven to build the project.
|
|
38
38
|
*/
|
|
39
39
|
class Pom extends component_1.Component {
|
|
40
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.Pom", version: "0.
|
|
40
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.Pom", version: "0.102.0" };
|
|
41
41
|
/**
|
|
42
42
|
* The name of the pom file.
|
|
43
43
|
*/
|
package/lib/java/projenrc.js
CHANGED
|
@@ -19,7 +19,7 @@ const util_1 = require("../util");
|
|
|
19
19
|
* `src/main/java/projenrc.java`.
|
|
20
20
|
*/
|
|
21
21
|
class Projenrc extends projenrc_1.ProjenrcFile {
|
|
22
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.Projenrc", version: "0.
|
|
22
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.Projenrc", version: "0.102.0" };
|
|
23
23
|
/**
|
|
24
24
|
* The name of the java class that includes the projen entrypoint.
|
|
25
25
|
*/
|
|
@@ -100,7 +100,7 @@ const DEFAULT_ASSIST = {
|
|
|
100
100
|
*/
|
|
101
101
|
class Biome extends component_1.Component {
|
|
102
102
|
options;
|
|
103
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Biome", version: "0.
|
|
103
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Biome", version: "0.102.0" };
|
|
104
104
|
static of(project) {
|
|
105
105
|
const isBiome = (c) => c instanceof Biome;
|
|
106
106
|
return project.components.find(isBiome);
|
|
@@ -45,7 +45,7 @@ const dependencies_1 = require("../dependencies");
|
|
|
45
45
|
* single file. In the future, this will also supports bundling websites.
|
|
46
46
|
*/
|
|
47
47
|
class Bundler extends component_1.Component {
|
|
48
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Bundler", version: "0.
|
|
48
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Bundler", version: "0.102.0" };
|
|
49
49
|
/**
|
|
50
50
|
* Returns the `Bundler` instance associated with a project or `undefined` if
|
|
51
51
|
* there is no Bundler.
|
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.
|
|
13
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Eslint", version: "0.102.0" };
|
|
14
14
|
/**
|
|
15
15
|
* Returns the singleton Eslint component of a project or undefined if there is none.
|
|
16
16
|
*/
|
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.
|
|
48
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Transform", version: "0.102.0" };
|
|
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.
|
|
68
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.WatchPlugin", version: "0.102.0" };
|
|
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.
|
|
99
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.JestReporter", version: "0.102.0" };
|
|
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.
|
|
125
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Jest", version: "0.102.0" };
|
|
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.
|
|
11
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.LicenseChecker", version: "0.102.0" };
|
|
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.
|
|
80
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.NodePackage", version: "0.102.0" };
|
|
81
81
|
/**
|
|
82
82
|
* Returns the `NodePackage` instance associated with a project or `undefined` if
|
|
83
83
|
* there is no NodePackage.
|
|
@@ -94,8 +94,9 @@ export interface NodeProjectOptions extends GitHubProjectOptions, NodePackageOpt
|
|
|
94
94
|
readonly buildWorkflowOptions?: BuildWorkflowOptions;
|
|
95
95
|
/**
|
|
96
96
|
* Define a GitHub workflow step for sending code coverage metrics to https://codecov.io/
|
|
97
|
-
*
|
|
98
|
-
* By default, OIDC auth is used.
|
|
97
|
+
*
|
|
98
|
+
* Uses codecov/codecov-action. By default, OIDC auth is used.
|
|
99
|
+
* Alternatively a token can be provided via `codeCovTokenSecret`.
|
|
99
100
|
* @default false
|
|
100
101
|
*/
|
|
101
102
|
readonly codeCov?: boolean;
|