projen 0.42.0 → 0.42.1
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 +182 -372
- package/API.md +32 -165
- package/lib/awscdk/auto-discover.d.ts +0 -7
- package/lib/awscdk/auto-discover.js +4 -5
- package/lib/awscdk/awscdk-app-ts.d.ts +28 -7
- package/lib/awscdk/awscdk-app-ts.js +37 -30
- package/lib/awscdk/awscdk-construct.d.ts +93 -13
- package/lib/awscdk/awscdk-construct.js +87 -49
- package/lib/awscdk/cdk-config.js +1 -1
- package/lib/awscdk/cdk-tasks.js +1 -1
- package/lib/awscdk/index.d.ts +0 -1
- package/lib/awscdk/index.js +1 -2
- package/lib/awscdk/integration-test.js +1 -1
- package/lib/awscdk/java-app.js +1 -1
- package/lib/awscdk/lambda-function.d.ts +1 -8
- package/lib/awscdk/lambda-function.js +5 -14
- package/lib/cdk/construct-lib.js +1 -1
- package/lib/cdk/jsii-docgen.js +1 -1
- package/lib/cdk/jsii-project.js +1 -1
- package/lib/cdk8s/cdk8s-app-ts.js +1 -1
- package/lib/cdk8s/cdk8s-construct.js +1 -1
- package/lib/cdktf/cdktf-construct.js +1 -1
- package/lib/component.js +1 -1
- package/lib/dependencies.js +1 -1
- package/lib/dev-env.js +1 -1
- package/lib/docker-compose.js +2 -2
- package/lib/file.js +1 -1
- package/lib/gitattributes.js +1 -1
- package/lib/github/auto-approve.js +1 -1
- package/lib/github/auto-merge.js +1 -1
- package/lib/github/dependabot.js +1 -1
- package/lib/github/github-project.js +1 -1
- package/lib/github/github.js +1 -1
- package/lib/github/mergify.js +1 -1
- package/lib/github/pr-template.js +1 -1
- package/lib/github/pull-request-lint.js +1 -1
- package/lib/github/stale.js +1 -1
- package/lib/github/task-workflow.js +1 -1
- package/lib/github/workflows.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 +1 -1
- package/lib/java/projenrc.js +1 -1
- package/lib/javascript/bundler.js +1 -1
- package/lib/javascript/eslint.js +1 -1
- package/lib/javascript/jest.js +1 -1
- package/lib/javascript/node-package.js +1 -1
- package/lib/javascript/node-project.js +1 -1
- package/lib/javascript/npm-config.js +1 -1
- package/lib/javascript/projenrc.js +1 -1
- package/lib/javascript/typescript-config.js +1 -1
- package/lib/javascript/upgrade-dependencies.js +2 -2
- 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.js +1 -1
- package/lib/projects.js +1 -1
- package/lib/projenrc-json.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/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/venv.js +1 -1
- package/lib/readme.js +1 -1
- package/lib/release/publisher.js +1 -1
- package/lib/release/release-trigger.js +1 -1
- package/lib/release/release.js +1 -1
- package/lib/sample-file.js +2 -2
- package/lib/semver.js +1 -1
- package/lib/source-code.js +1 -1
- package/lib/task-runtime.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.js +1 -1
- package/lib/typescript/typescript-typedoc.js +1 -1
- package/lib/typescript/typescript.js +3 -3
- package/lib/version.js +1 -1
- package/lib/vscode/devcontainer.js +1 -1
- package/lib/vscode/launch-config.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 +4 -4
- package/lib/web/tailwind.js +1 -1
- package/lib/xmlfile.js +1 -1
- package/lib/yaml.js +1 -1
- package/package.json +1 -1
- package/lib/awscdk/awscdk-deps.d.ts +0 -157
- package/lib/awscdk/awscdk-deps.js +0 -163
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
import { DependencyType } from '..';
|
|
2
|
-
import { Component } from '../component';
|
|
3
|
-
import { Project } from '../project';
|
|
4
|
-
/**
|
|
5
|
-
* (experimental) Options for `AwsCdkDeps`.
|
|
6
|
-
*
|
|
7
|
-
* @experimental
|
|
8
|
-
*/
|
|
9
|
-
export interface AwsCdkDepsCommonOptions {
|
|
10
|
-
/**
|
|
11
|
-
* (experimental) Semantic version requirement for the the AWS CDK libraries.
|
|
12
|
-
*
|
|
13
|
-
* @default "^2"
|
|
14
|
-
* @experimental
|
|
15
|
-
*/
|
|
16
|
-
readonly cdkVersion: string;
|
|
17
|
-
/**
|
|
18
|
-
* (experimental) Semantic version requirement for the `constructs` library.
|
|
19
|
-
*
|
|
20
|
-
* @default - for CDK 1.x the default is "^3.2.27", for CDK 2.x the default
|
|
21
|
-
* is "^10.0.5".
|
|
22
|
-
* @experimental
|
|
23
|
-
*/
|
|
24
|
-
readonly constructsVersion?: string;
|
|
25
|
-
/**
|
|
26
|
-
* (deprecated) Use pinned version instead of caret version for CDK.
|
|
27
|
-
*
|
|
28
|
-
* You can use this to prevent yarn to mix versions for your CDK dependencies and to prevent auto-updates.
|
|
29
|
-
* If you use experimental features this will let you define the moment you include breaking changes.
|
|
30
|
-
*
|
|
31
|
-
* @deprecated Not supported: to pin your CDK version just set `cdkVersion` to a pinned version.
|
|
32
|
-
*/
|
|
33
|
-
readonly cdkVersionPinning?: boolean;
|
|
34
|
-
/**
|
|
35
|
-
* (deprecated) Which AWS CDK modules (those that start with "@aws-cdk/") does this library require when consumed?
|
|
36
|
-
*
|
|
37
|
-
* @deprecated For CDK 2.x use 'peerDeps' instead
|
|
38
|
-
*/
|
|
39
|
-
readonly cdkDependencies?: string[];
|
|
40
|
-
/**
|
|
41
|
-
* (deprecated) If this is enabled (default), all modules declared in `cdkDependencies` will be also added as normal `dependencies` (as well as `peerDependencies`).
|
|
42
|
-
*
|
|
43
|
-
* This is to ensure that downstream consumers actually have your CDK dependencies installed
|
|
44
|
-
* when using npm < 7 or yarn, where peer dependencies are not automatically installed.
|
|
45
|
-
* If this is disabled, `cdkDependencies` will be added to `devDependencies` to ensure
|
|
46
|
-
* they are present during development.
|
|
47
|
-
*
|
|
48
|
-
* @default true
|
|
49
|
-
* @deprecated Not supported in CDK v2.
|
|
50
|
-
*/
|
|
51
|
-
readonly cdkDependenciesAsDeps?: boolean;
|
|
52
|
-
/**
|
|
53
|
-
* (deprecated) Install the @aws-cdk/assert library?
|
|
54
|
-
*
|
|
55
|
-
* @default false
|
|
56
|
-
* @deprecated Use `cdkAssertions` instead
|
|
57
|
-
*/
|
|
58
|
-
readonly cdkAssert?: boolean;
|
|
59
|
-
/**
|
|
60
|
-
* (experimental) Install the @aws-cdk/assertions library?
|
|
61
|
-
*
|
|
62
|
-
* Only needed for CDK 1.x. If using CDK 2.x then
|
|
63
|
-
* assertions is already included in 'aws-cdk-lib'
|
|
64
|
-
*
|
|
65
|
-
* @default true
|
|
66
|
-
* @experimental
|
|
67
|
-
*/
|
|
68
|
-
readonly cdkAssertions?: boolean;
|
|
69
|
-
/**
|
|
70
|
-
* (deprecated) AWS CDK modules required for testing.
|
|
71
|
-
*
|
|
72
|
-
* @deprecated For CDK 2.x use 'devDeps' instead
|
|
73
|
-
*/
|
|
74
|
-
readonly cdkTestDependencies?: string[];
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* @experimental
|
|
78
|
-
*/
|
|
79
|
-
export interface AwsCdkDepsOptions extends AwsCdkDepsCommonOptions {
|
|
80
|
-
/**
|
|
81
|
-
* (experimental) The type of dependency to use for runtime AWS CDK and `constructs` modules.
|
|
82
|
-
*
|
|
83
|
-
* For libraries, use peer dependencies and for apps use runtime dependencies.
|
|
84
|
-
*
|
|
85
|
-
* @experimental
|
|
86
|
-
*/
|
|
87
|
-
readonly dependencyType: DependencyType;
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* (experimental) Manages dependencies on the AWS CDK.
|
|
91
|
-
*
|
|
92
|
-
* @experimental
|
|
93
|
-
*/
|
|
94
|
-
export declare class AwsCdkDeps extends Component {
|
|
95
|
-
/**
|
|
96
|
-
* (experimental) The dependency requirement for AWS CDK (e.g. `^2.0.0`).
|
|
97
|
-
*
|
|
98
|
-
* @experimental
|
|
99
|
-
*/
|
|
100
|
-
readonly cdkVersion: string;
|
|
101
|
-
/**
|
|
102
|
-
* (experimental) The semantic version requirement of `constructs`.
|
|
103
|
-
*
|
|
104
|
-
* @experimental
|
|
105
|
-
*/
|
|
106
|
-
readonly constructsVersion: string;
|
|
107
|
-
/**
|
|
108
|
-
* (deprecated) Whether CDK dependencies are added as normal dependencies (and peer dependencies).
|
|
109
|
-
*
|
|
110
|
-
* @deprecated Not used for CDK 2.x
|
|
111
|
-
*/
|
|
112
|
-
readonly cdkDependenciesAsDeps: boolean;
|
|
113
|
-
/**
|
|
114
|
-
* (experimental) The major version of the AWX CDK (e.g. 1, 2, ...).
|
|
115
|
-
*
|
|
116
|
-
* @experimental
|
|
117
|
-
*/
|
|
118
|
-
readonly cdkMajorVersion: number;
|
|
119
|
-
private readonly dependencyType;
|
|
120
|
-
/**
|
|
121
|
-
* @experimental
|
|
122
|
-
*/
|
|
123
|
-
constructor(project: Project, options: AwsCdkDepsOptions);
|
|
124
|
-
/**
|
|
125
|
-
* (experimental) Adds dependencies to AWS CDK modules.
|
|
126
|
-
*
|
|
127
|
-
* The type of dependency is determined by the `dependencyType` option.
|
|
128
|
-
*
|
|
129
|
-
* This method is not supported in CDK v2. Use `project.addPeerDeps()` or
|
|
130
|
-
* `project.addDeps()` as appropriate.
|
|
131
|
-
*
|
|
132
|
-
* @param deps names of cdk modules (e.g. `@aws-cdk/aws-lambda`).
|
|
133
|
-
* @experimental
|
|
134
|
-
*/
|
|
135
|
-
addV1Dependencies(...deps: string[]): void;
|
|
136
|
-
/**
|
|
137
|
-
* (experimental) Adds AWS CDK modules as dev dependencies.
|
|
138
|
-
*
|
|
139
|
-
* This method is not supported in CDK v2. Use `project.addPeerDeps()` or
|
|
140
|
-
* `project.addDeps()` as appropriate.
|
|
141
|
-
*
|
|
142
|
-
* @param deps names of cdk modules (e.g. `@aws-cdk/aws-lambda`).
|
|
143
|
-
* @experimental
|
|
144
|
-
*/
|
|
145
|
-
addV1DevDependencies(...deps: string[]): void;
|
|
146
|
-
private addConstructsDependency;
|
|
147
|
-
/**
|
|
148
|
-
* Addsa depdenencies on the AWS CDK framework (e.g. `@aws-cdk/core` for V1 or `aws-cdk-lib` for V1).
|
|
149
|
-
*/
|
|
150
|
-
private addFrameworkDependency;
|
|
151
|
-
private addV1AssertionLibraryDependency;
|
|
152
|
-
/**
|
|
153
|
-
* Adds a set of dependencies with the user-specified dependency type.
|
|
154
|
-
* @param deps The set of dependency specifications
|
|
155
|
-
*/
|
|
156
|
-
private addV1DependenciesByType;
|
|
157
|
-
}
|
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var _a;
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.AwsCdkDeps = void 0;
|
|
5
|
-
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
-
const semver = require("semver");
|
|
7
|
-
const __1 = require("..");
|
|
8
|
-
const component_1 = require("../component");
|
|
9
|
-
/**
|
|
10
|
-
* (experimental) Manages dependencies on the AWS CDK.
|
|
11
|
-
*
|
|
12
|
-
* @experimental
|
|
13
|
-
*/
|
|
14
|
-
class AwsCdkDeps extends component_1.Component {
|
|
15
|
-
/**
|
|
16
|
-
* @experimental
|
|
17
|
-
*/
|
|
18
|
-
constructor(project, options) {
|
|
19
|
-
var _b, _c, _d, _e;
|
|
20
|
-
super(project);
|
|
21
|
-
if (options.cdkVersionPinning) {
|
|
22
|
-
throw new Error('"cdkVersionPinning" is deprecated, set "cdkVersion" to a pinned version');
|
|
23
|
-
}
|
|
24
|
-
if (semver.valid(options.cdkVersion)) {
|
|
25
|
-
this.project.logger.warn(`NOTICE: "cdkVersion" is now a version range and is currently pinned to ${options.cdkVersion}. We recommend setting it to "^${options.cdkVersion}".`);
|
|
26
|
-
}
|
|
27
|
-
if (semver.valid(options.constructsVersion)) {
|
|
28
|
-
this.project.logger.warn(`NOTICE: "constructsVersion" is now a version range and is currently pinned to ${options.constructsVersion}. We recommend setting it to "^${options.constructsVersion}".`);
|
|
29
|
-
}
|
|
30
|
-
this.cdkDependenciesAsDeps = (_b = options.cdkDependenciesAsDeps) !== null && _b !== void 0 ? _b : true;
|
|
31
|
-
this.cdkVersion = options.cdkVersion;
|
|
32
|
-
this.dependencyType = options.dependencyType;
|
|
33
|
-
const mv = (_c = semver.minVersion(this.cdkVersion)) === null || _c === void 0 ? void 0 : _c.major;
|
|
34
|
-
if (!mv) {
|
|
35
|
-
throw new Error(`Unable to determine CDK major version for ${mv}`);
|
|
36
|
-
}
|
|
37
|
-
this.cdkMajorVersion = mv;
|
|
38
|
-
this.addFrameworkDependency(options);
|
|
39
|
-
this.addV1AssertionLibraryDependency(options);
|
|
40
|
-
// add a dependency on `constructs`
|
|
41
|
-
this.constructsVersion = this.addConstructsDependency(options.constructsVersion);
|
|
42
|
-
this.addV1Dependencies(...(_d = options.cdkDependencies) !== null && _d !== void 0 ? _d : []);
|
|
43
|
-
this.addV1DevDependencies(...(_e = options.cdkTestDependencies) !== null && _e !== void 0 ? _e : []);
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* (experimental) Adds dependencies to AWS CDK modules.
|
|
47
|
-
*
|
|
48
|
-
* The type of dependency is determined by the `dependencyType` option.
|
|
49
|
-
*
|
|
50
|
-
* This method is not supported in CDK v2. Use `project.addPeerDeps()` or
|
|
51
|
-
* `project.addDeps()` as appropriate.
|
|
52
|
-
*
|
|
53
|
-
* @param deps names of cdk modules (e.g. `@aws-cdk/aws-lambda`).
|
|
54
|
-
* @experimental
|
|
55
|
-
*/
|
|
56
|
-
addV1Dependencies(...deps) {
|
|
57
|
-
if (deps.length > 0 && this.cdkMajorVersion !== 1) {
|
|
58
|
-
throw new Error('addV1Dependencies() is not supported for CDK 2.x and above, use addDeps() or addPeerDeps() instead');
|
|
59
|
-
}
|
|
60
|
-
// this will add dependencies based on the type requested by the user
|
|
61
|
-
// for libraries, this will be "peer" and for apps it will be "runtime"
|
|
62
|
-
this.addV1DependenciesByType(this.dependencyType, ...deps);
|
|
63
|
-
// add deps as runtime deps if `cdkDepsAsDeps` is true
|
|
64
|
-
if (this.cdkDependenciesAsDeps) {
|
|
65
|
-
this.addV1DependenciesByType(__1.DependencyType.RUNTIME, ...deps);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* (experimental) Adds AWS CDK modules as dev dependencies.
|
|
70
|
-
*
|
|
71
|
-
* This method is not supported in CDK v2. Use `project.addPeerDeps()` or
|
|
72
|
-
* `project.addDeps()` as appropriate.
|
|
73
|
-
*
|
|
74
|
-
* @param deps names of cdk modules (e.g. `@aws-cdk/aws-lambda`).
|
|
75
|
-
* @experimental
|
|
76
|
-
*/
|
|
77
|
-
addV1DevDependencies(...deps) {
|
|
78
|
-
if (deps.length > 0 && this.cdkMajorVersion !== 1) {
|
|
79
|
-
throw new Error('addV1DevDependencies() is not supported for CDK 2.x and above, use addDevDeps() instead');
|
|
80
|
-
}
|
|
81
|
-
this.addV1DependenciesByType(__1.DependencyType.BUILD, ...deps);
|
|
82
|
-
}
|
|
83
|
-
addConstructsDependency(requestedVersion) {
|
|
84
|
-
var _b;
|
|
85
|
-
const defaultConstructsVersion = this.cdkMajorVersion === 1 ? '^3.2.27' : '^10.0.5';
|
|
86
|
-
const constructsVersion = requestedVersion !== null && requestedVersion !== void 0 ? requestedVersion : defaultConstructsVersion;
|
|
87
|
-
const constructsMajorVersion = (_b = semver.minVersion(constructsVersion)) === null || _b === void 0 ? void 0 : _b.major;
|
|
88
|
-
if (!constructsMajorVersion) {
|
|
89
|
-
throw new Error(`Cannot determine major version of constructs version '${constructsVersion}'`);
|
|
90
|
-
}
|
|
91
|
-
switch (this.cdkMajorVersion) {
|
|
92
|
-
case 1:
|
|
93
|
-
if (constructsMajorVersion !== 3) {
|
|
94
|
-
throw new Error('AWS CDK 1.x requires constructs 3.x');
|
|
95
|
-
}
|
|
96
|
-
break;
|
|
97
|
-
case 2:
|
|
98
|
-
if (constructsMajorVersion !== 10) {
|
|
99
|
-
throw new Error('AWS CDK 2.x requires constructs 10.x');
|
|
100
|
-
}
|
|
101
|
-
break;
|
|
102
|
-
}
|
|
103
|
-
this.project.deps.addDependency(`constructs@${constructsVersion}`, this.dependencyType);
|
|
104
|
-
return constructsVersion;
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Addsa depdenencies on the AWS CDK framework (e.g. `@aws-cdk/core` for V1 or `aws-cdk-lib` for V1).
|
|
108
|
-
*/
|
|
109
|
-
addFrameworkDependency(options) {
|
|
110
|
-
switch (this.cdkMajorVersion) {
|
|
111
|
-
case 1:
|
|
112
|
-
this.addV1Dependencies('@aws-cdk/core');
|
|
113
|
-
break;
|
|
114
|
-
case 2:
|
|
115
|
-
if (options.cdkDependencies !== undefined) {
|
|
116
|
-
throw new Error('cdkDependencies is not used for CDK 2.x. Use "peerDeps" instead');
|
|
117
|
-
}
|
|
118
|
-
if (options.cdkDependenciesAsDeps !== undefined) {
|
|
119
|
-
throw new Error('cdkDependenciesAsDeps is not used for CDK 2.x');
|
|
120
|
-
}
|
|
121
|
-
if (options.cdkTestDependencies !== undefined) {
|
|
122
|
-
throw new Error('cdkTestDependencies is not used for CDK 2.x. Use "devDeps" instead');
|
|
123
|
-
}
|
|
124
|
-
this.project.deps.addDependency(`aws-cdk-lib@${this.cdkVersion}`, this.dependencyType);
|
|
125
|
-
break;
|
|
126
|
-
default:
|
|
127
|
-
throw new Error(`Unsupported AWS CDK major version ${this.cdkMajorVersion}.x`);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
addV1AssertionLibraryDependency(options) {
|
|
131
|
-
var _b;
|
|
132
|
-
if (this.cdkMajorVersion !== 1) {
|
|
133
|
-
if (options.cdkAssert !== undefined) {
|
|
134
|
-
throw new Error('cdkAssert is not used for CDK 2.x. Use the assertions library that is provided in aws-cdk-lib');
|
|
135
|
-
}
|
|
136
|
-
if (options.cdkAssertions !== undefined) {
|
|
137
|
-
throw new Error('cdkAssertion is not used for CDK 2.x. Use the assertions library that is provided in aws-cdk-lib');
|
|
138
|
-
}
|
|
139
|
-
return;
|
|
140
|
-
}
|
|
141
|
-
const testDeps = new Array();
|
|
142
|
-
if (options.cdkAssert) {
|
|
143
|
-
testDeps.push('@aws-cdk/assert');
|
|
144
|
-
}
|
|
145
|
-
if ((_b = options.cdkAssertions) !== null && _b !== void 0 ? _b : true) {
|
|
146
|
-
testDeps.push('@aws-cdk/assertions');
|
|
147
|
-
}
|
|
148
|
-
this.addV1DependenciesByType(__1.DependencyType.TEST, ...testDeps);
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* Adds a set of dependencies with the user-specified dependency type.
|
|
152
|
-
* @param deps The set of dependency specifications
|
|
153
|
-
*/
|
|
154
|
-
addV1DependenciesByType(type, ...modules) {
|
|
155
|
-
for (const module of modules) {
|
|
156
|
-
this.project.deps.addDependency(`${module}@${this.cdkVersion}`, type);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
exports.AwsCdkDeps = AwsCdkDeps;
|
|
161
|
-
_a = JSII_RTTI_SYMBOL_1;
|
|
162
|
-
AwsCdkDeps[_a] = { fqn: "projen.awscdk.AwsCdkDeps", version: "0.42.0" };
|
|
163
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzY2RrLWRlcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXdzY2RrL2F3c2Nkay1kZXBzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsaUNBQWlDO0FBQ2pDLDBCQUFvQztBQUNwQyw0Q0FBeUM7Ozs7OztBQW9DekMsTUFBYSxVQUFXLFNBQVEscUJBQVM7Ozs7SUFldkMsWUFBWSxPQUFnQixFQUFFLE9BQTBCOztRQUN0RCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFZixJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRTtZQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLHlFQUF5RSxDQUFDLENBQUM7U0FDNUY7UUFFRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywwRUFBMEUsT0FBTyxDQUFDLFVBQVUsa0NBQWtDLE9BQU8sQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDO1NBQ2hMO1FBRUQsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQzNDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpRkFBaUYsT0FBTyxDQUFDLGlCQUFpQixrQ0FBa0MsT0FBTyxDQUFDLGlCQUFpQixJQUFJLENBQUMsQ0FBQztTQUNyTTtRQUVELElBQUksQ0FBQyxxQkFBcUIsU0FBRyxPQUFPLENBQUMscUJBQXFCLG1DQUFJLElBQUksQ0FBQztRQUNuRSxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDckMsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO1FBRTdDLE1BQU0sRUFBRSxTQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQywwQ0FBRSxL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QUFNLFFBQVEsR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO1FBQ3JDLElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRTtZQUNyQixRQUFRLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7U0FDbEM7UUFFRCxVQUFJLE9BQU8sQ0FBQyxhQUFhLG1DQUFJLElBQUksRUFBRTtZQUNqQyxRQUFRLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7U0FDdEM7UUFFRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsa0JBQWMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssdUJBQXVCLENBQUMsSUFBb0IsRUFBRSxHQUFHLE9BQWlCO1FBQ3hFLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO1lBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDdkU7SUFDSCxDQUFDOztBQW5LSCxnQ0FvS0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7IERlcGVuZGVuY3lUeXBlIH0gZnJvbSAnLi4nO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50JztcbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi9wcm9qZWN0JztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBpbnRlcmZhY2UgQXdzQ2RrRGVwc0NvbW1vbk9wdGlvbnMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBjZGtWZXJzaW9uOiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBjb25zdHJ1Y3RzVmVyc2lvbj86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBjZGtWZXJzaW9uUGlubmluZz86IGJvb2xlYW47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGNka0RlcGVuZGVuY2llcz86IHN0cmluZ1tdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBjZGtEZXBlbmRlbmNpZXNBc0RlcHM/OiBib29sZWFuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgY2RrQXNzZXJ0PzogYm9vbGVhbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgY2RrQXNzZXJ0aW9ucz86IGJvb2xlYW47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGNka1Rlc3REZXBlbmRlbmNpZXM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBd3NDZGtEZXBzT3B0aW9ucyBleHRlbmRzIEF3c0Nka0RlcHNDb21tb25PcHRpb25zIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZGVwZW5kZW5jeVR5cGU6IERlcGVuZGVuY3lUeXBlO1xufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGNsYXNzIEF3c0Nka0RlcHMgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSBjZGtWZXJzaW9uOiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgcmVhZG9ubHkgY29uc3RydWN0c1ZlcnNpb246IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IGNka0RlcGVuZGVuY2llc0FzRGVwczogYm9vbGVhbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSBjZGtNYWpvclZlcnNpb246IG51bWJlcjtcblxuICBwcml2YXRlIHJlYWRvbmx5IGRlcGVuZGVuY3lUeXBlOiBEZXBlbmRlbmN5VHlwZTtcblxuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBBd3NDZGtEZXBzT3B0aW9ucykge1xuICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgaWYgKG9wdGlvbnMuY2RrVmVyc2lvblBpbm5pbmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignXCJjZGtWZXJzaW9uUGlubmluZ1wiIGlzIGRlcHJlY2F0ZWQsIHNldCBcImNka1ZlcnNpb25cIiB0byBhIHBpbm5lZCB2ZXJzaW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKHNlbXZlci52YWxpZChvcHRpb25zLmNka1ZlcnNpb24pKSB7XG4gICAgICB0aGlzLnByb2plY3QubG9nZ2VyLndhcm4oYE5PVElDRTogXCJjZGtWZXJzaW9uXCIgaXMgbm93IGEgdmVyc2lvbiByYW5nZSBhbmQgaXMgY3VycmVudGx5IHBpbm5lZCB0byAke29wdGlvbnMuY2RrVmVyc2lvbn0uIFdlIHJlY29tbWVuZCBzZXR0aW5nIGl0IHRvIFwiXiR7b3B0aW9ucy5jZGtWZXJzaW9ufVwiLmApO1xuICAgIH1cblxuICAgIGlmIChzZW12ZXIudmFsaWQob3B0aW9ucy5jb25zdHJ1Y3RzVmVyc2lvbikpIHtcbiAgICAgIHRoaXMucHJvamVjdC5sb2dnZXIud2FybihgTk9USUNFOiBcImNvbnN0cnVjdHNWZXJzaW9uXCIgaXMgbm93IGEgdmVyc2lvbiByYW5nZSBhbmQgaXMgY3VycmVudGx5IHBpbm5lZCB0byAke29wdGlvbnMuY29uc3RydWN0c1ZlcnNpb259LiBXZSByZWNvbW1lbmQgc2V0dGluZyBpdCB0byBcIl4ke29wdGlvbnMuY29uc3RydWN0c1ZlcnNpb259XCIuYCk7XG4gICAgfVxuXG4gICAgdGhpcy5jZGtEZXBlbmRlbmNpZXNBc0RlcHMgPSBvcHRpb25zLmNka0RlcGVuZGVuY2llc0FzRGVwcyA/PyB0cnVlO1xuICAgIHRoaXMuY2RrVmVyc2lvbiA9IG9wdGlvbnMuY2RrVmVyc2lvbjtcbiAgICB0aGlzLmRlcGVuZGVuY3lUeXBlID0gb3B0aW9ucy5kZXBlbmRlbmN5VHlwZTtcblxuICAgIGNvbnN0IG12ID0gc2VtdmVyLm1pblZlcnNpb24odGhpcy5jZGtWZXJzaW9uKT8ubWFqb3I7XG4gICAgaWYgKCFtdikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZGV0ZXJtaW5lIENESyBtYWpvciB2ZXJzaW9uIGZvciAke212fWApO1xuICAgIH1cbiAgICB0aGlzLmNka01ham9yVmVyc2lvbiA9IG12O1xuXG4gICAgdGhpcy5hZGRGcmFtZXdvcmtEZXBlbmRlbmN5KG9wdGlvbnMpO1xuICAgIHRoaXMuYWRkVjFBc3NlcnRpb25MaWJyYXJ5RGVwZW5kZW5jeShvcHRpb25zKTtcblxuICAgIC8vIGFkZCBhIGRlcGVuZGVuY3kgb24gYGNvbnN0cnVjdHNgXG4gICAgdGhpcy5jb25zdHJ1Y3RzVmVyc2lvbiA9IHRoaXMuYWRkQ29uc3RydWN0c0RlcGVuZGVuY3kob3B0aW9ucy5jb25zdHJ1Y3RzVmVyc2lvbik7XG5cbiAgICB0aGlzLmFkZFYxRGVwZW5kZW5jaWVzKC4uLm9wdGlvbnMuY2RrRGVwZW5kZW5jaWVzID8/IFtdKTtcbiAgICB0aGlzLmFkZFYxRGV2RGVwZW5kZW5jaWVzKC4uLm9wdGlvbnMuY2RrVGVzdERlcGVuZGVuY2llcyA/PyBbXSk7XG4gIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgYWRkVjFEZXBlbmRlbmNpZXMoLi4uZGVwczogc3RyaW5nW10pIHtcbiAgICBpZiAoZGVwcy5sZW5ndGggPiAwICYmIHRoaXMuY2RrTWFqb3JWZXJzaW9uICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FkZFYxRGVwZW5kZW5jaWVzKCkgaXMgbm90IHN1cHBvcnRlZCBmb3IgQ0RLIDIueCBhbmQgYWJvdmUsIHVzZSBhZGREZXBzKCkgb3IgYWRkUGVlckRlcHMoKSBpbnN0ZWFkJyk7XG4gICAgfVxuXG4gICAgLy8gdGhpcyB3aWxsIGFkZCBkZXBlbmRlbmNpZXMgYmFzZWQgb24gdGhlIHR5cGUgcmVxdWVzdGVkIGJ5IHRoZSB1c2VyXG4gICAgLy8gZm9yIGxpYnJhcmllcywgdGhpcyB3aWxsIGJlIFwicGVlclwiIGFuZCBmb3IgYXBwcyBpdCB3aWxsIGJlIFwicnVudGltZVwiXG4gICAgdGhpcy5hZGRWMURlcGVuZGVuY2llc0J5VHlwZSh0aGlzLmRlcGVuZGVuY3lUeXBlLCAuLi5kZXBzKTtcblxuICAgIC8vIGFkZCBkZXBzIGFzIHJ1bnRpbWUgZGVwcyBpZiBgY2RrRGVwc0FzRGVwc2AgaXMgdHJ1ZVxuICAgIGlmICh0aGlzLmNka0RlcGVuZGVuY2llc0FzRGVwcykge1xuICAgICAgdGhpcy5hZGRWMURlcGVuZGVuY2llc0J5VHlwZShEZXBlbmRlbmN5VHlwZS5SVU5USU1FLCAuLi5kZXBzKTtcbiAgICB9XG4gIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgYWRkVjFEZXZEZXBlbmRlbmNpZXMoLi4uZGVwczogc3RyaW5nW10pIHtcbiAgICBpZiAoZGVwcy5sZW5ndGggPiAwICYmIHRoaXMuY2RrTWFqb3JWZXJzaW9uICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FkZFYxRGV2RGVwZW5kZW5jaWVzKCkgaXMgbm90IHN1cHBvcnRlZCBmb3IgQ0RLIDIueCBhbmQgYWJvdmUsIHVzZSBhZGREZXZEZXBzKCkgaW5zdGVhZCcpO1xuICAgIH1cblxuICAgIHRoaXMuYWRkVjFEZXBlbmRlbmNpZXNCeVR5cGUoRGVwZW5kZW5jeVR5cGUuQlVJTEQsIC4uLmRlcHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRDb25zdHJ1Y3RzRGVwZW5kZW5jeShyZXF1ZXN0ZWRWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBkZWZhdWx0Q29uc3RydWN0c1ZlcnNpb24gPSB0aGlzLmNka01ham9yVmVyc2lvbiA9PT0gMSA/ICdeMy4yLjI3JyA6ICdeMTAuMC41JztcbiAgICBjb25zdCBjb25zdHJ1Y3RzVmVyc2lvbiA9IHJlcXVlc3RlZFZlcnNpb24gPz8gZGVmYXVsdENvbnN0cnVjdHNWZXJzaW9uO1xuXG4gICAgY29uc3QgY29uc3RydWN0c01ham9yVmVyc2lvbiA9IHNlbXZlci5taW5WZXJzaW9uKGNvbnN0cnVjdHNWZXJzaW9uKT8ubWFqb3I7XG4gICAgaWYgKCFjb25zdHJ1Y3RzTWFqb3JWZXJzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBkZXRlcm1pbmUgbWFqb3IgdmVyc2lvbiBvZiBjb25zdHJ1Y3RzIHZlcnNpb24gJyR7Y29uc3RydWN0c1ZlcnNpb259J2ApO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy5jZGtNYWpvclZlcnNpb24pIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgaWYgKGNvbnN0cnVjdHNNYWpvclZlcnNpb24gIT09IDMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FXUyBDREsgMS54IHJlcXVpcmVzIGNvbnN0cnVjdHMgMy54Jyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgaWYgKGNvbnN0cnVjdHNNYWpvclZlcnNpb24gIT09IDEwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBV1MgQ0RLIDIueCByZXF1aXJlcyBjb25zdHJ1Y3RzIDEwLngnKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLnByb2plY3QuZGVwcy5hZGREZXBlbmRlbmN5KGBjb25zdHJ1Y3RzQCR7Y29uc3RydWN0c1ZlcnNpb259YCwgdGhpcy5kZXBlbmRlbmN5VHlwZSk7XG5cbiAgICByZXR1cm4gY29uc3RydWN0c1ZlcnNpb247XG4gIH1cblxuICAvKipcbiAgICogQWRkc2EgZGVwZGVuZW5jaWVzIG9uIHRoZSBBV1MgQ0RLIGZyYW1ld29yayAoZS5nLiBgQGF3cy1jZGsvY29yZWAgZm9yIFYxIG9yIGBhd3MtY2RrLWxpYmAgZm9yIFYxKS5cbiAgICovXG4gIHByaXZhdGUgYWRkRnJhbWV3b3JrRGVwZW5kZW5jeShvcHRpb25zOiBBd3NDZGtEZXBzT3B0aW9ucykge1xuICAgIHN3aXRjaCAodGhpcy5jZGtNYWpvclZlcnNpb24pIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgdGhpcy5hZGRWMURlcGVuZGVuY2llcygnQGF3cy1jZGsvY29yZScpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAyOlxuICAgICAgICBpZiAob3B0aW9ucy5jZGtEZXBlbmRlbmNpZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2RrRGVwZW5kZW5jaWVzIGlzIG5vdCB1c2VkIGZvciBDREsgMi54LiBVc2UgXCJwZWVyRGVwc1wiIGluc3RlYWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5jZGtEZXBlbmRlbmNpZXNBc0RlcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2RrRGVwZW5kZW5jaWVzQXNEZXBzIGlzIG5vdCB1c2VkIGZvciBDREsgMi54Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuY2RrVGVzdERlcGVuZGVuY2llcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjZGtUZXN0RGVwZW5kZW5jaWVzIGlzIG5vdCB1c2VkIGZvciBDREsgMi54LiBVc2UgXCJkZXZEZXBzXCIgaW5zdGVhZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcm9qZWN0LmRlcHMuYWRkRGVwZW5kZW5jeShgYXdzLWNkay1saWJAJHt0aGlzLmNka1ZlcnNpb259YCwgdGhpcy5kZXBlbmRlbmN5VHlwZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIEFXUyBDREsgbWFqb3IgdmVyc2lvbiAke3RoaXMuY2RrTWFqb3JWZXJzaW9ufS54YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRWMUFzc2VydGlvbkxpYnJhcnlEZXBlbmRlbmN5KG9wdGlvbnM6IEF3c0Nka0RlcHNPcHRpb25zKSB7XG4gICAgaWYgKHRoaXMuY2RrTWFqb3JWZXJzaW9uICE9PSAxKSB7XG4gICAgICBpZiAob3B0aW9ucy5jZGtBc3NlcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nka0Fzc2VydCBpcyBub3QgdXNlZCBmb3IgQ0RLIDIueC4gVXNlIHRoZSBhc3NlcnRpb25zIGxpYnJhcnkgdGhhdCBpcyBwcm92aWRlZCBpbiBhd3MtY2RrLWxpYicpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuY2RrQXNzZXJ0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY2RrQXNzZXJ0aW9uIGlzIG5vdCB1c2VkIGZvciBDREsgMi54LiBVc2UgdGhlIGFzc2VydGlvbnMgbGlicmFyeSB0aGF0IGlzIHByb3ZpZGVkIGluIGF3cy1jZGstbGliJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXN0RGVwcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgaWYgKG9wdGlvbnMuY2RrQXNzZXJ0KSB7XG4gICAgICB0ZXN0RGVwcy5wdXNoKCdAYXdzLWNkay9hc3NlcnQnKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5jZGtBc3NlcnRpb25zID8/IHRydWUpIHtcbiAgICAgIHRlc3REZXBzLnB1c2goJ0Bhd3MtY2RrL2Fzc2VydGlvbnMnKTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZFYxRGVwZW5kZW5jaWVzQnlUeXBlKERlcGVuZGVuY3lUeXBlLlRFU1QsIC4uLnRlc3REZXBzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgc2V0IG9mIGRlcGVuZGVuY2llcyB3aXRoIHRoZSB1c2VyLXNwZWNpZmllZCBkZXBlbmRlbmN5IHR5cGUuXG4gICAqIEBwYXJhbSBkZXBzIFRoZSBzZXQgb2YgZGVwZW5kZW5jeSBzcGVjaWZpY2F0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBhZGRWMURlcGVuZGVuY2llc0J5VHlwZSh0eXBlOiBEZXBlbmRlbmN5VHlwZSwgLi4ubW9kdWxlczogc3RyaW5nW10pIHtcbiAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XG4gICAgICB0aGlzLnByb2plY3QuZGVwcy5hZGREZXBlbmRlbmN5KGAke21vZHVsZX1AJHt0aGlzLmNka1ZlcnNpb259YCwgdHlwZSk7XG4gICAgfVxuICB9XG59Il19
|