projen 0.52.21 → 0.52.25
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 +139 -107
- package/changelog.md +3 -3
- package/docs/api/API.md +42 -39
- package/lib/awscdk/auto-discover.d.ts +14 -46
- package/lib/awscdk/auto-discover.js +8 -22
- package/lib/awscdk/awscdk-app-java.d.ts +10 -32
- package/lib/awscdk/awscdk-app-java.js +5 -9
- package/lib/awscdk/awscdk-app-ts.d.ts +15 -35
- package/lib/awscdk/awscdk-app-ts.js +6 -14
- package/lib/awscdk/awscdk-construct.d.ts +14 -28
- package/lib/awscdk/awscdk-construct.js +8 -16
- package/lib/awscdk/awscdk-deps-java.d.ts +1 -8
- package/lib/awscdk/awscdk-deps-java.js +3 -10
- package/lib/awscdk/awscdk-deps-js.d.ts +1 -8
- package/lib/awscdk/awscdk-deps-js.js +3 -10
- package/lib/awscdk/awscdk-deps.d.ts +28 -67
- package/lib/awscdk/awscdk-deps.js +5 -12
- package/lib/awscdk/cdk-config.d.ts +19 -51
- package/lib/awscdk/cdk-config.js +13 -11
- package/lib/awscdk/cdk-tasks.d.ts +7 -24
- package/lib/awscdk/cdk-tasks.js +3 -8
- package/lib/awscdk/integration-test.d.ts +7 -29
- package/lib/awscdk/integration-test.js +3 -8
- package/lib/awscdk/lambda-function.d.ts +22 -50
- package/lib/awscdk/lambda-function.js +11 -24
- package/lib/build/build-workflow.d.ts +33 -78
- package/lib/build/build-workflow.js +15 -25
- package/lib/cdk/auto-discover-base.d.ts +11 -34
- package/lib/cdk/auto-discover-base.js +5 -15
- package/lib/cdk/construct-lib.d.ts +8 -22
- package/lib/cdk/construct-lib.js +3 -8
- package/lib/cdk/integration-test-base.d.ts +12 -38
- package/lib/cdk/integration-test-base.js +2 -8
- package/lib/cdk/jsii-docgen.d.ts +6 -12
- package/lib/cdk/jsii-docgen.js +6 -8
- package/lib/cdk/jsii-project.d.ts +16 -95
- package/lib/cdk/jsii-project.js +3 -10
- package/lib/cdk8s/auto-discover.d.ts +6 -23
- package/lib/cdk8s/auto-discover.js +6 -15
- package/lib/cdk8s/cdk8s-app-ts.d.ts +21 -43
- package/lib/cdk8s/cdk8s-app-ts.js +4 -7
- package/lib/cdk8s/cdk8s-construct.d.ts +12 -27
- package/lib/cdk8s/cdk8s-construct.js +3 -7
- package/lib/cdk8s/integration-test.d.ts +2 -9
- package/lib/cdk8s/integration-test.js +3 -8
- package/lib/cdktf/cdktf-construct.d.ts +3 -12
- package/lib/cdktf/cdktf-construct.js +3 -7
- package/lib/component.d.ts +4 -17
- package/lib/component.js +6 -19
- package/lib/dependencies.d.ts +44 -77
- package/lib/dependencies.js +50 -38
- package/lib/dev-env.d.ts +26 -53
- package/lib/dev-env.js +9 -19
- package/lib/docker-compose.d.ts +83 -209
- package/lib/docker-compose.js +38 -61
- package/lib/file.d.ts +24 -71
- package/lib/file.js +4 -16
- package/lib/gitattributes.d.ts +3 -14
- package/lib/gitattributes.js +5 -16
- package/lib/github/auto-approve.d.ts +7 -23
- package/lib/github/auto-approve.js +3 -8
- package/lib/github/auto-merge.d.ts +7 -29
- package/lib/github/auto-merge.js +7 -16
- package/lib/github/dependabot.d.ts +54 -147
- package/lib/github/dependabot.js +81 -22
- package/lib/github/github-project.d.ts +26 -70
- package/lib/github/github-project.js +5 -10
- package/lib/github/github.d.ts +19 -58
- package/lib/github/github.js +9 -30
- package/lib/github/mergify.d.ts +9 -54
- package/lib/github/mergify.js +2 -14
- package/lib/github/pr-template.d.ts +3 -13
- package/lib/github/pr-template.js +3 -8
- package/lib/github/pull-request-lint.d.ts +8 -28
- package/lib/github/pull-request-lint.js +3 -9
- package/lib/github/stale.d.ts +17 -47
- package/lib/github/stale.js +6 -10
- package/lib/github/task-workflow.d.ts +21 -63
- package/lib/github/task-workflow.js +3 -8
- package/lib/github/workflows-model.d.ts +199 -582
- package/lib/github/workflows-model.js +5 -4
- package/lib/github/workflows.d.ts +14 -41
- package/lib/github/workflows.js +8 -16
- package/lib/gitlab/configuration-model.d.ts +145 -947
- package/lib/gitlab/configuration-model.js +11 -28
- package/lib/gitlab/configuration.d.ts +31 -121
- package/lib/gitlab/configuration.js +14 -49
- package/lib/gitlab/gitlab-configuration.d.ts +2 -13
- package/lib/gitlab/gitlab-configuration.js +4 -15
- package/lib/gitlab/nested-configuration.d.ts +1 -9
- package/lib/gitlab/nested-configuration.js +3 -8
- package/lib/gitpod.d.ts +71 -167
- package/lib/gitpod.js +75 -42
- package/lib/ignore-file.d.ts +4 -23
- package/lib/ignore-file.js +6 -25
- package/lib/ini.d.ts +2 -14
- package/lib/ini.js +3 -13
- package/lib/java/java-project.d.ts +29 -70
- package/lib/java/java-project.js +10 -17
- package/lib/java/junit.d.ts +5 -17
- package/lib/java/junit.js +3 -8
- package/lib/java/maven-compile.d.ts +4 -13
- package/lib/java/maven-compile.js +3 -8
- package/lib/java/maven-packaging.d.ts +6 -21
- package/lib/java/maven-packaging.js +3 -8
- package/lib/java/maven-sample.d.ts +2 -12
- package/lib/java/maven-sample.js +3 -8
- package/lib/java/pom.d.ts +38 -100
- package/lib/java/pom.js +13 -25
- package/lib/java/projenrc.d.ts +7 -22
- package/lib/java/projenrc.js +3 -8
- package/lib/javascript/bundler.d.ts +30 -72
- package/lib/javascript/bundler.js +13 -21
- package/lib/javascript/eslint.d.ts +27 -84
- package/lib/javascript/eslint.js +11 -30
- package/lib/javascript/jest.d.ts +91 -344
- package/lib/javascript/jest.js +6 -23
- package/lib/javascript/node-package.d.ts +111 -259
- package/lib/javascript/node-package.js +64 -81
- package/lib/javascript/node-project.d.ts +112 -220
- package/lib/javascript/node-project.js +54 -73
- package/lib/javascript/npm-config.d.ts +9 -19
- package/lib/javascript/npm-config.js +9 -16
- package/lib/javascript/prettier.d.ts +65 -196
- package/lib/javascript/prettier.js +70 -46
- package/lib/javascript/projenrc.d.ts +2 -12
- package/lib/javascript/projenrc.js +3 -8
- package/lib/javascript/typescript-config.d.ts +62 -158
- package/lib/javascript/typescript-config.js +31 -18
- package/lib/javascript/upgrade-dependencies.d.ts +35 -94
- package/lib/javascript/upgrade-dependencies.js +21 -51
- package/lib/json.d.ts +3 -17
- package/lib/json.js +3 -13
- package/lib/license.d.ts +3 -20
- package/lib/license.js +2 -13
- package/lib/logger.d.ts +18 -62
- package/lib/logger.js +17 -37
- package/lib/makefile.d.ts +14 -45
- package/lib/makefile.js +7 -25
- package/lib/object-file.d.ts +19 -39
- package/lib/object-file.js +17 -28
- package/lib/option-hints.d.ts +4 -13
- package/lib/option-hints.js +11 -5
- package/lib/project-build.d.ts +7 -26
- package/lib/project-build.js +3 -8
- package/lib/project.d.ts +64 -186
- package/lib/project.js +43 -91
- package/lib/projects.d.ts +11 -32
- package/lib/projects.js +4 -8
- package/lib/projenrc-json.d.ts +2 -12
- package/lib/projenrc-json.js +3 -8
- package/lib/python/pip.d.ts +7 -23
- package/lib/python/pip.js +8 -17
- package/lib/python/poetry.d.ts +36 -121
- package/lib/python/poetry.js +12 -26
- package/lib/python/projenrc.d.ts +4 -15
- package/lib/python/projenrc.js +3 -8
- package/lib/python/pytest.d.ts +3 -16
- package/lib/python/pytest.js +2 -8
- package/lib/python/python-deps.d.ts +7 -21
- package/lib/python/python-deps.js +1 -1
- package/lib/python/python-env.d.ts +1 -6
- package/lib/python/python-env.js +1 -1
- package/lib/python/python-packaging.d.ts +12 -34
- package/lib/python/python-packaging.js +1 -1
- package/lib/python/python-project.d.ts +34 -79
- package/lib/python/python-project.js +7 -20
- package/lib/python/python-sample.d.ts +2 -9
- package/lib/python/python-sample.js +3 -8
- package/lib/python/requirements-file.d.ts +4 -19
- package/lib/python/requirements-file.js +5 -15
- package/lib/python/setuppy.d.ts +11 -39
- package/lib/python/setuppy.js +3 -13
- package/lib/python/setuptools.d.ts +2 -14
- package/lib/python/setuptools.js +3 -8
- package/lib/python/venv.d.ts +4 -14
- package/lib/python/venv.js +4 -11
- package/lib/readme.d.ts +7 -16
- package/lib/readme.js +5 -7
- package/lib/release/publisher.d.ts +103 -206
- package/lib/release/publisher.js +47 -59
- package/lib/release/release-trigger.d.ts +16 -48
- package/lib/release/release-trigger.js +8 -18
- package/lib/release/release.d.ts +50 -110
- package/lib/release/release.js +9 -24
- package/lib/run-task.js +1820 -0
- package/lib/sample-file.d.ts +14 -47
- package/lib/sample-file.js +9 -30
- package/lib/semver.d.ts +4 -21
- package/lib/semver.js +6 -20
- package/lib/source-code.d.ts +7 -23
- package/lib/source-code.js +7 -19
- package/lib/task-model.d.ts +21 -61
- package/lib/task-model.js +1 -1
- package/lib/task-runtime.d.ts +7 -24
- package/lib/task-runtime.js +7 -20
- package/lib/task.d.ts +29 -73
- package/lib/task.js +28 -61
- package/lib/tasks.d.ts +12 -34
- package/lib/tasks.js +14 -36
- package/lib/testing.d.ts +6 -10
- package/lib/testing.js +8 -12
- package/lib/textfile.d.ts +9 -24
- package/lib/textfile.js +9 -19
- package/lib/toml.d.ts +2 -14
- package/lib/toml.js +3 -13
- package/lib/typescript/projenrc.d.ts +4 -14
- package/lib/typescript/projenrc.js +3 -8
- package/lib/typescript/typescript-typedoc.d.ts +1 -6
- package/lib/typescript/typescript-typedoc.js +3 -8
- package/lib/typescript/typescript.d.ts +24 -82
- package/lib/typescript/typescript.js +6 -15
- package/lib/version.d.ts +9 -38
- package/lib/version.js +2 -11
- package/lib/vscode/devcontainer.d.ts +10 -30
- package/lib/vscode/devcontainer.js +10 -26
- package/lib/vscode/launch-config.d.ts +18 -97
- package/lib/vscode/launch-config.js +9 -15
- package/lib/vscode/vscode.d.ts +0 -9
- package/lib/vscode/vscode.js +2 -11
- package/lib/web/next.d.ts +19 -60
- package/lib/web/next.js +6 -20
- package/lib/web/postcss.d.ts +3 -24
- package/lib/web/postcss.js +3 -8
- package/lib/web/react.d.ts +13 -60
- package/lib/web/react.js +7 -32
- package/lib/web/tailwind.d.ts +1 -15
- package/lib/web/tailwind.js +3 -7
- package/lib/xmlfile.d.ts +2 -14
- package/lib/xmlfile.js +3 -13
- package/lib/yaml.d.ts +4 -19
- package/lib/yaml.js +3 -13
- package/package.json +5 -5
- package/releasetag.txt +1 -1
- package/version.txt +1 -1
package/lib/docker-compose.js
CHANGED
|
@@ -7,14 +7,9 @@ const component_1 = require("./component");
|
|
|
7
7
|
const util_1 = require("./util");
|
|
8
8
|
const yaml_1 = require("./yaml");
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* @experimental
|
|
10
|
+
* Create a docker-compose YAML file.
|
|
13
11
|
*/
|
|
14
12
|
class DockerCompose extends component_1.Component {
|
|
15
|
-
/**
|
|
16
|
-
* @experimental
|
|
17
|
-
*/
|
|
18
13
|
constructor(project, props) {
|
|
19
14
|
var _c;
|
|
20
15
|
super(project);
|
|
@@ -36,9 +31,7 @@ class DockerCompose extends component_1.Component {
|
|
|
36
31
|
}
|
|
37
32
|
}
|
|
38
33
|
/**
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
* @experimental
|
|
34
|
+
* Depends on a service name.
|
|
42
35
|
*/
|
|
43
36
|
static serviceName(serviceName) {
|
|
44
37
|
return {
|
|
@@ -46,12 +39,10 @@ class DockerCompose extends component_1.Component {
|
|
|
46
39
|
};
|
|
47
40
|
}
|
|
48
41
|
/**
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
* @param
|
|
52
|
-
* @param
|
|
53
|
-
* @param options Port mapping options.
|
|
54
|
-
* @experimental
|
|
42
|
+
* Create a port mapping.
|
|
43
|
+
* @param publishedPort Published port number
|
|
44
|
+
* @param targetPort Container's port number
|
|
45
|
+
* @param options Port mapping options
|
|
55
46
|
*/
|
|
56
47
|
static portMapping(publishedPort, targetPort, options) {
|
|
57
48
|
var _c;
|
|
@@ -64,11 +55,9 @@ class DockerCompose extends component_1.Component {
|
|
|
64
55
|
};
|
|
65
56
|
}
|
|
66
57
|
/**
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
* @param
|
|
70
|
-
* @param targetPath Target path name.
|
|
71
|
-
* @experimental
|
|
58
|
+
* Create a bind volume that binds a host path to the target path in the container.
|
|
59
|
+
* @param sourcePath Host path name
|
|
60
|
+
* @param targetPath Target path name
|
|
72
61
|
*/
|
|
73
62
|
static bindVolume(sourcePath, targetPath) {
|
|
74
63
|
return {
|
|
@@ -82,16 +71,13 @@ class DockerCompose extends component_1.Component {
|
|
|
82
71
|
};
|
|
83
72
|
}
|
|
84
73
|
/**
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
* If you use this
|
|
74
|
+
* Create a named volume and mount it to the target path. If you use this
|
|
88
75
|
* named volume in several services, the volume will be shared. In this
|
|
89
76
|
* case, the volume configuration of the first-provided options are used.
|
|
90
77
|
*
|
|
91
|
-
* @param volumeName Name of the volume
|
|
92
|
-
* @param targetPath Target path
|
|
93
|
-
* @param options volume configuration (default: docker compose defaults)
|
|
94
|
-
* @experimental
|
|
78
|
+
* @param volumeName Name of the volume
|
|
79
|
+
* @param targetPath Target path
|
|
80
|
+
* @param options volume configuration (default: docker compose defaults)
|
|
95
81
|
*/
|
|
96
82
|
static namedVolume(volumeName, targetPath, options = {}) {
|
|
97
83
|
return {
|
|
@@ -106,11 +92,9 @@ class DockerCompose extends component_1.Component {
|
|
|
106
92
|
};
|
|
107
93
|
}
|
|
108
94
|
/**
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
* @param
|
|
112
|
-
* @param description a service description.
|
|
113
|
-
* @experimental
|
|
95
|
+
* Add a service to the docker-compose file.
|
|
96
|
+
* @param serviceName name of the service
|
|
97
|
+
* @param description a service description
|
|
114
98
|
*/
|
|
115
99
|
addService(serviceName, description) {
|
|
116
100
|
const service = new DockerComposeService(serviceName, description);
|
|
@@ -129,16 +113,11 @@ class DockerCompose extends component_1.Component {
|
|
|
129
113
|
}
|
|
130
114
|
exports.DockerCompose = DockerCompose;
|
|
131
115
|
_a = JSII_RTTI_SYMBOL_1;
|
|
132
|
-
DockerCompose[_a] = { fqn: "projen.DockerCompose", version: "0.52.
|
|
116
|
+
DockerCompose[_a] = { fqn: "projen.DockerCompose", version: "0.52.25" };
|
|
133
117
|
/**
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
* @experimental
|
|
118
|
+
* A docker-compose service.
|
|
137
119
|
*/
|
|
138
120
|
class DockerComposeService {
|
|
139
|
-
/**
|
|
140
|
-
* @experimental
|
|
141
|
-
*/
|
|
142
121
|
constructor(serviceName, serviceDescription) {
|
|
143
122
|
var _c, _d, _e, _f;
|
|
144
123
|
if ((!serviceDescription.imageBuild && !serviceDescription.image) ||
|
|
@@ -155,39 +134,33 @@ class DockerComposeService {
|
|
|
155
134
|
this.environment = (_f = serviceDescription.environment) !== null && _f !== void 0 ? _f : {};
|
|
156
135
|
}
|
|
157
136
|
/**
|
|
158
|
-
*
|
|
159
|
-
*
|
|
160
|
-
* @param
|
|
161
|
-
* @param
|
|
162
|
-
* @param options Port mapping options.
|
|
163
|
-
* @experimental
|
|
137
|
+
* Add a port mapping
|
|
138
|
+
* @param publishedPort Published port number
|
|
139
|
+
* @param targetPort Container's port number
|
|
140
|
+
* @param options Port mapping options
|
|
164
141
|
*/
|
|
165
142
|
addPort(publishedPort, targetPort, options) {
|
|
166
143
|
var _c;
|
|
167
144
|
(_c = this.ports) === null || _c === void 0 ? void 0 : _c.push(DockerCompose.portMapping(publishedPort, targetPort, options));
|
|
168
145
|
}
|
|
169
146
|
/**
|
|
170
|
-
*
|
|
171
|
-
*
|
|
172
|
-
* @param
|
|
173
|
-
* @param value value of the environment variable.
|
|
174
|
-
* @experimental
|
|
147
|
+
* Add an environment variable
|
|
148
|
+
* @param name environment variable name
|
|
149
|
+
* @param value value of the environment variable
|
|
175
150
|
*/
|
|
176
151
|
addEnvironment(name, value) {
|
|
177
152
|
this.environment[name] = value;
|
|
178
153
|
}
|
|
179
154
|
/**
|
|
180
|
-
*
|
|
181
|
-
*
|
|
182
|
-
* @experimental
|
|
155
|
+
* Make the service depend on another service.
|
|
156
|
+
* @param serviceName
|
|
183
157
|
*/
|
|
184
158
|
addDependsOn(serviceName) {
|
|
185
159
|
this.dependsOn.push(serviceName);
|
|
186
160
|
}
|
|
187
161
|
/**
|
|
188
|
-
*
|
|
189
|
-
*
|
|
190
|
-
* @experimental
|
|
162
|
+
* Add a volume to the service.
|
|
163
|
+
* @param volume
|
|
191
164
|
*/
|
|
192
165
|
addVolume(volume) {
|
|
193
166
|
this.volumes.push(volume);
|
|
@@ -195,15 +168,19 @@ class DockerComposeService {
|
|
|
195
168
|
}
|
|
196
169
|
exports.DockerComposeService = DockerComposeService;
|
|
197
170
|
_b = JSII_RTTI_SYMBOL_1;
|
|
198
|
-
DockerComposeService[_b] = { fqn: "projen.DockerComposeService", version: "0.52.
|
|
171
|
+
DockerComposeService[_b] = { fqn: "projen.DockerComposeService", version: "0.52.25" };
|
|
199
172
|
/**
|
|
200
|
-
*
|
|
201
|
-
*
|
|
202
|
-
* @experimental
|
|
173
|
+
* Network protocol for port mapping
|
|
203
174
|
*/
|
|
204
175
|
var DockerComposeProtocol;
|
|
205
176
|
(function (DockerComposeProtocol) {
|
|
177
|
+
/**
|
|
178
|
+
* TCP protocol
|
|
179
|
+
*/
|
|
206
180
|
DockerComposeProtocol["TCP"] = "tcp";
|
|
181
|
+
/**
|
|
182
|
+
* UDP protocol
|
|
183
|
+
*/
|
|
207
184
|
DockerComposeProtocol["UDP"] = "udp";
|
|
208
185
|
})(DockerComposeProtocol = exports.DockerComposeProtocol || (exports.DockerComposeProtocol = {}));
|
|
209
186
|
function renderDockerComposeFile(serviceDescriptions, version) {
|
|
@@ -309,4 +286,4 @@ function shouldDecamelizeDockerComposeKey(path) {
|
|
|
309
286
|
// Otherwise, let it all decamelize.
|
|
310
287
|
return true;
|
|
311
288
|
}
|
|
312
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9ja2VyLWNvbXBvc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZG9ja2VyLWNvbXBvc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwyQ0FBd0M7QUFFeEMsaUNBQW1EO0FBQ25ELGlDQUFrQzs7Ozs7O0FBcUJsQyxNQUFhLGFBQWMsU0FBUSxxQkFBUzs7OztJQThEMUMsWUFBWSxPQUFnQixFQUFFLEtBQTBCOztRQUN0RCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFZixNQUFNLFVBQVUsR0FBRyxDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxVQUFVLEVBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBTSxDQUFDLFVBQVUsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDMUUsSUFBSSxlQUFRLENBQUMsT0FBTyxFQUFFLGtCQUFrQixVQUFVLEVBQUUsRUFBRTtZQUNwRCxTQUFTLEVBQUUsSUFBSTtZQUNmLFFBQVEsRUFBRSxJQUFJO1lBQ2QsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtTQUMzQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLGFBQWEsS0FBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDNUQsTUFBTSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztTQUNqRDtRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsYUFBYSxFQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDbEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFFbkIsMERBQTBEO1FBQzFELE1BQU0sZUFBZSxTQUFHLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtB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LENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50XCI7XG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSBcIi4vcHJvamVjdFwiO1xuaW1wb3J0IHsgZGVjYW1lbGl6ZUtleXNSZWN1cnNpdmVseSB9IGZyb20gXCIuL3V0aWxcIjtcbmltcG9ydCB7IFlhbWxGaWxlIH0gZnJvbSBcIi4veWFtbFwiO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGludGVyZmFjZSBEb2NrZXJDb21wb3NlUHJvcHMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBuYW1lU3VmZml4Pzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgc2NoZW1hVmVyc2lvbj86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgc2VydmljZXM/OiBSZWNvcmQ8c3RyaW5nLCBEb2NrZXJDb21wb3NlU2VydmljZURlc2NyaXB0aW9uPjtcbn1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGludGVyZmFjZSBEb2NrZXJDb21wb3NlUG9ydE1hcHBpbmdPcHRpb25zIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgcHJvdG9jb2w/OiBEb2NrZXJDb21wb3NlUHJvdG9jb2w7XG59XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGNsYXNzIERvY2tlckNvbXBvc2UgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBzdGF0aWMgc2VydmljZU5hbWUoc2VydmljZU5hbWU6IHN0cmluZyk6IElEb2NrZXJDb21wb3NlU2VydmljZU5hbWUge1xuICAgIHJldHVybiB7XG4gICAgICBzZXJ2aWNlTmFtZSxcbiAgICB9O1xuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgc3RhdGljIHBvcnRNYXBwaW5nKFxuICAgIHB1Ymxpc2hlZFBvcnQ6IG51bWJlcixcbiAgICB0YXJnZXRQb3J0OiBudW1iZXIsXG4gICAgb3B0aW9ucz86IERvY2tlckNvbXBvc2VQb3J0TWFwcGluZ09wdGlvbnNcbiAgKTogRG9ja2VyQ29tcG9zZVNlcnZpY2VQb3J0IHtcbiAgICBjb25zdCBwcm90b2NvbCA9IG9wdGlvbnM/LnByb3RvY29sID8/IERvY2tlckNvbXBvc2VQcm90b2NvbC5UQ1A7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiB0YXJnZXRQb3J0LFxuICAgICAgcHVibGlzaGVkOiBwdWJsaXNoZWRQb3J0LFxuICAgICAgcHJvdG9jb2w6IHByb3RvY29sLFxuICAgICAgbW9kZTogXCJob3N0XCIsXG4gICAgfTtcbiAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHN0YXRpYyBiaW5kVm9sdW1lKFxuICAgIHNvdXJjZVBhdGg6IHN0cmluZyxcbiAgICB0YXJnZXRQYXRoOiBzdHJpbmdcbiAgKTogSURvY2tlckNvbXBvc2VWb2x1bWVCaW5kaW5nIHtcbiAgICByZXR1cm4ge1xuICAgICAgYmluZChfdm9sdW1lSW5mbzogSURvY2tlckNvbXBvc2VWb2x1bWVDb25maWcpOiBEb2NrZXJDb21wb3NlVm9sdW1lTW91bnQge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IFwiYmluZFwiLFxuICAgICAgICAgIHNvdXJjZTogc291cmNlUGF0aCxcbiAgICAgICAgICB0YXJnZXQ6IHRhcmdldFBhdGgsXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgc3RhdGljIG5hbWVkVm9sdW1lKFxuICAgIHZvbHVtZU5hbWU6IHN0cmluZyxcbiAgICB0YXJnZXRQYXRoOiBzdHJpbmcsXG4gICAgb3B0aW9uczogRG9ja2VyQ29tcG9zZVZvbHVtZUNvbmZpZyA9IHt9XG4gICk6IElEb2NrZXJDb21wb3NlVm9sdW1lQmluZGluZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJpbmQodm9sdW1lSW5mbzogSURvY2tlckNvbXBvc2VWb2x1bWVDb25maWcpOiBEb2NrZXJDb21wb3NlVm9sdW1lTW91bnQge1xuICAgICAgICB2b2x1bWVJbmZvLmFkZFZvbHVtZUNvbmZpZ3VyYXRpb24odm9sdW1lTmFtZSwgb3B0aW9ucyk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiBcInZvbHVtZVwiLFxuICAgICAgICAgIHNvdXJjZTogdm9sdW1lTmFtZSxcbiAgICAgICAgICB0YXJnZXQ6IHRhcmdldFBhdGgsXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IHNlcnZpY2VzOiBSZWNvcmQ8c3RyaW5nLCBEb2NrZXJDb21wb3NlU2VydmljZT47XG4gIHByaXZhdGUgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIHByb3BzPzogRG9ja2VyQ29tcG9zZVByb3BzKSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG5cbiAgICBjb25zdCBuYW1lU3VmZml4ID0gcHJvcHM/Lm5hbWVTdWZmaXggPyBgJHtwcm9wcyEubmFtZVN1ZmZpeH0ueW1sYCA6IFwieW1sXCI7XG4gICAgbmV3IFlhbWxGaWxlKHByb2plY3QsIGBkb2NrZXItY29tcG9zZS4ke25hbWVTdWZmaXh9YCwge1xuICAgICAgY29tbWl0dGVkOiB0cnVlLFxuICAgICAgcmVhZG9ubHk6IHRydWUsXG4gICAgICBvYmo6ICgpID0+IHRoaXMuX3N5bnRoZXNpemVEb2NrZXJDb21wb3NlKCksXG4gICAgfSk7XG5cbiAgICBpZiAocHJvcHM/LnNjaGVtYVZlcnNpb24gJiYgIXBhcnNlRmxvYXQocHJvcHMuc2NoZW1hVmVyc2lvbikpIHtcbiAgICAgIHRocm93IEVycm9yKFwiVmVyc2lvbiB0YWcgbmVlZHMgdG8gYmUgYSBudW1iZXJcIik7XG4gICAgfVxuICAgIHRoaXMudmVyc2lvbiA9IHByb3BzPy5zY2hlbWFWZXJzaW9uID8gcHJvcHMuc2NoZW1hVmVyc2lvbiA6IFwiMy4zXCI7XG4gICAgdGhpcy5zZXJ2aWNlcyA9IHt9O1xuXG4gICAgLy8gQWRkIHRoZSBzZXJ2aWNlcyBwcm92aWRlZCB2aWEgdGhlIGNvbnN0cnVjdG9yIGFyZ3VtZW50LlxuICAgIGNvbnN0IGluaXRpYWxTZXJ2aWNlcyA9IHByb3BzPy5zZXJ2aWNlcyA/PyB7fTtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBzZXJ2aWNlRGVzY3JpcHRpb25dIG9mIE9iamVjdC5lbnRyaWVzKGluaXRpYWxTZXJ2aWNlcykpIHtcbiAgICAgIHRoaXMuYWRkU2VydmljZShuYW1lLCBzZXJ2aWNlRGVzY3JpcHRpb24pO1xuICAgIH1cbiAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyBhZGRTZXJ2aWNlKFxuICAgIHNlcnZpY2VOYW1lOiBzdHJpbmcsXG4gICAgZGVzY3JpcHRpb246IERvY2tlckNvbXBvc2VTZXJ2aWNlRGVzY3JpcHRpb25cbiAgKTogRG9ja2VyQ29tcG9zZVNlcnZpY2Uge1xuICAgIGNvbnN0IHNlcnZpY2UgPSBuZXcgRG9ja2VyQ29tcG9zZVNlcnZpY2Uoc2VydmljZU5hbWUsIGRlc2NyaXB0aW9uKTtcbiAgICB0aGlzLnNlcnZpY2VzW3NlcnZpY2VOYW1lXSA9IHNlcnZpY2U7XG4gICAgcmV0dXJuIHNlcnZpY2U7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfc3ludGhlc2l6ZURvY2tlckNvbXBvc2UoKTogb2JqZWN0IHtcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5zZXJ2aWNlcykubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEb2NrZXJDb21wb3NlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBzZXJ2aWNlXCIpO1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJEb2NrZXJDb21wb3NlRmlsZSh0aGlzLnNlcnZpY2VzLCB0aGlzLnZlcnNpb24pO1xuICB9XG59XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgaW50ZXJmYWNlIElEb2NrZXJDb21wb3NlU2VydmljZU5hbWUge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgc2VydmljZU5hbWU6IHN0cmluZztcbn1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGludGVyZmFjZSBEb2NrZXJDb21wb3NlU2VydmljZURlc2NyaXB0aW9uIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGltYWdlPzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGltYWdlQnVpbGQ/OiBEb2NrZXJDb21wb3NlQnVpbGQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBjb21tYW5kPzogc3RyaW5nW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZGVwZW5kc09uPzogSURvY2tlckNvbXBvc2VTZXJ2aWNlTmFtZVtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgdm9sdW1lcz86IElEb2NrZXJDb21wb3NlVm9sdW1lQmluZGluZ1tdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBwb3J0cz86IERvY2tlckNvbXBvc2VTZXJ2aWNlUG9ydFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGVudmlyb25tZW50PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgY2xhc3MgRG9ja2VyQ29tcG9zZVNlcnZpY2UgaW1wbGVtZW50cyBJRG9ja2VyQ29tcG9zZVNlcnZpY2VOYW1lIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IHNlcnZpY2VOYW1lOiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgcmVhZG9ubHkgaW1hZ2U/OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IGltYWdlQnVpbGQ/OiBEb2NrZXJDb21wb3NlQnVpbGQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IGNvbW1hbmQ/OiBzdHJpbmdbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgcmVhZG9ubHkgZGVwZW5kc09uOiBJRG9ja2VyQ29tcG9zZVNlcnZpY2VOYW1lW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSB2b2x1bWVzOiBJRG9ja2VyQ29tcG9zZVZvbHVtZUJpbmRpbmdbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSBwb3J0czogRG9ja2VyQ29tcG9zZVNlcnZpY2VQb3J0W107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgcmVhZG9ubHkgZW52aXJvbm1lbnQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2VydmljZU5hbWU6IHN0cmluZyxcbiAgICBzZXJ2aWNlRGVzY3JpcHRpb246IERvY2tlckNvbXBvc2VTZXJ2aWNlRGVzY3JpcHRpb25cbiAgKSB7XG4gICAgaWYgKFxuICAgICAgKCFzZXJ2aWNlRGVzY3JpcHRpb24uaW1hZ2VCdWlsZCAmJiAhc2VydmljZURlc2NyaXB0aW9uLmltYWdlKSB8fFxuICAgICAgKHNlcnZpY2VEZXNjcmlwdGlvbi5pbWFnZUJ1aWxkICYmIHNlcnZpY2VEZXNjcmlwdGlvbi5pbWFnZSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEEgc2VydmljZSAke3NlcnZpY2VOYW1lfSByZXF1aXJlcyBleGFjdGx5IG9uZSBvZiBhIFxcYGltYWdlQnVpbGRcXGAgb3IgXFxgaW1hZ2VcXGAga2V5YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlcnZpY2VOYW1lID0gc2VydmljZU5hbWU7XG4gICAgdGhpcy5jb21tYW5kID0gc2VydmljZURlc2NyaXB0aW9uLmNvbW1hbmQ7XG4gICAgdGhpcy5pbWFnZSA9IHNlcnZpY2VEZXNjcmlwdGlvbi5pbWFnZTtcbiAgICB0aGlzLmltYWdlQnVpbGQgPSBzZXJ2aWNlRGVzY3JpcHRpb24uaW1hZ2VCdWlsZDtcbiAgICB0aGlzLmRlcGVuZHNPbiA9IHNlcnZpY2VEZXNjcmlwdGlvbi5kZXBlbmRzT24gPz8gW107XG4gICAgdGhpcy52b2x1bWVzID0gc2VydmljZURlc2NyaXB0aW9uLnZvbHVtZXMgPz8gW107XG4gICAgdGhpcy5wb3J0cyA9IHNlcnZpY2VEZXNjcmlwdGlvbi5wb3J0cyA/PyBbXTtcbiAgICB0aGlzLmVudmlyb25tZW50ID0gc2VydmljZURlc2NyaXB0aW9uLmVudmlyb25tZW50ID8/IHt9O1xuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgYWRkUG9ydChcbiAgICBwdWJsaXNoZWRQb3J0OiBudW1iZXIsXG4gICAgdGFyZ2V0UG9ydDogbnVtYmVyLFxuICAgIG9wdGlvbnM/OiBEb2NrZXJDb21wb3NlUG9ydE1hcHBpbmdPcHRpb25zXG4gICkge1xuICAgIHRoaXMucG9ydHM/LnB1c2goXG4gICAgICBEb2NrZXJDb21wb3NlLnBvcnRNYXBwaW5nKHB1Ymxpc2hlZFBvcnQsIHRhcmdldFBvcnQsIG9wdGlvbnMpXG4gICAgKTtcbiAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyBhZGRFbnZpcm9ubWVudChuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmVudmlyb25tZW50W25hbWVdID0gdmFsdWU7XG4gIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyBhZGREZXBlbmRzT24oc2VydmljZU5hbWU6IElEb2NrZXJDb21wb3NlU2VydmljZU5hbWUpIHtcbiAgICB0aGlzLmRlcGVuZHNPbi5wdXNoKHNlcnZpY2VOYW1lKTtcbiAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyBhZGRWb2x1bWUodm9sdW1lOiBJRG9ja2VyQ29tcG9zZVZvbHVtZUJpbmRpbmcpIHtcbiAgICB0aGlzLnZvbHVtZXMucHVzaCh2b2x1bWUpO1xuICB9XG59XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGludGVyZmFjZSBEb2NrZXJDb21wb3NlU2VydmljZVBvcnQge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgcHVibGlzaGVkOiBudW1iZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHRhcmdldDogbnVtYmVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgcHJvdG9jb2w6IERvY2tlckNvbXBvc2VQcm90b2NvbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgbW9kZTogc3RyaW5nO1xufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGVudW0gRG9ja2VyQ29tcG9zZVByb3RvY29sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIFRDUCA9IFwidGNwXCIsXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIFVEUCA9IFwidWRwXCIsXG59XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBpbnRlcmZhY2UgRG9ja2VyQ29tcG9zZUJ1aWxkIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBjb250ZXh0OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGRvY2tlcmZpbGU/OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGFyZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgaW50ZXJmYWNlIERvY2tlckNvbXBvc2VWb2x1bWVDb25maWcge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZHJpdmVyPzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBkcml2ZXJPcHRzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZXh0ZXJuYWw/OiBib29sZWFuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbn1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBpbnRlcmZhY2UgSURvY2tlckNvbXBvc2VWb2x1bWVCaW5kaW5nIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBiaW5kKHZvbHVtZUNvbmZpZzogSURvY2tlckNvbXBvc2VWb2x1bWVDb25maWcpOiBEb2NrZXJDb21wb3NlVm9sdW1lTW91bnQ7XG59XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgaW50ZXJmYWNlIElEb2NrZXJDb21wb3NlVm9sdW1lQ29uZmlnIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgYWRkVm9sdW1lQ29uZmlndXJhdGlvbihcbiAgICB2b2x1bWVOYW1lOiBzdHJpbmcsXG4gICAgY29uZmlndXJhdGlvbjogRG9ja2VyQ29tcG9zZVZvbHVtZUNvbmZpZ1xuICApOiB2b2lkO1xufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGludGVyZmFjZSBEb2NrZXJDb21wb3NlVm9sdW1lTW91bnQge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgc291cmNlOiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSB0YXJnZXQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBTdHJ1Y3R1cmUgb2YgYSBkb2NrZXIgY29tcG9zZSBmaWxlIGJlZm9yZSB3ZSBkZWNhbWVsaXplLlxuICogQGludGVybmFsXG4gKi9cbmludGVyZmFjZSBEb2NrZXJDb21wb3NlRmlsZVNjaGVtYSB7XG4gIHZlcnNpb246IHN0cmluZztcbiAgc2VydmljZXM6IFJlY29yZDxzdHJpbmcsIERvY2tlckNvbXBvc2VGaWxlU2VydmljZVNjaGVtYT47XG4gIHZvbHVtZXM/OiBSZWNvcmQ8c3RyaW5nLCBEb2NrZXJDb21wb3NlVm9sdW1lQ29uZmlnPjtcbn1cblxuLyoqXG4gKiBTdHJ1Y3R1cmUgb2YgYSBkb2NrZXIgY29tcG9zZSBmaWxlJ3Mgc2VydmljZSBiZWZvcmUgd2UgZGVjYW1lbGl6ZS5cbiAqIEBpbnRlcm5hbFxuICovXG5pbnRlcmZhY2UgRG9ja2VyQ29tcG9zZUZpbGVTZXJ2aWNlU2NoZW1hIHtcbiAgcmVhZG9ubHkgZGVwZW5kc09uPzogc3RyaW5nW107XG4gIHJlYWRvbmx5IGJ1aWxkPzogRG9ja2VyQ29tcG9zZUJ1aWxkO1xuICByZWFkb25seSBpbWFnZT86IHN0cmluZztcbiAgcmVhZG9ubHkgY29tbWFuZD86IHN0cmluZ1tdO1xuICByZWFkb25seSB2b2x1bWVzPzogRG9ja2VyQ29tcG9zZVZvbHVtZU1vdW50W107XG4gIHJlYWRvbmx5IHBvcnRzPzogRG9ja2VyQ29tcG9zZVNlcnZpY2VQb3J0W107XG4gIHJlYWRvbmx5IGVudmlyb25tZW50PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuZnVuY3Rpb24gcmVuZGVyRG9ja2VyQ29tcG9zZUZpbGUoXG4gIHNlcnZpY2VEZXNjcmlwdGlvbnM6IFJlY29yZDxzdHJpbmcsIERvY2tlckNvbXBvc2VTZXJ2aWNlPixcbiAgdmVyc2lvbjogc3RyaW5nXG4pOiBvYmplY3Qge1xuICAvLyBSZWNvcmQgdm9sdW1lIGNvbmZpZ3VyYXRpb25cbiAgY29uc3Qgdm9sdW1lQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBEb2NrZXJDb21wb3NlVm9sdW1lQ29uZmlnPiA9IHt9O1xuICBjb25zdCB2b2x1bWVJbmZvOiBJRG9ja2VyQ29tcG9zZVZvbHVtZUNvbmZpZyA9IHtcbiAgICBhZGRWb2x1bWVDb25maWd1cmF0aW9uKFxuICAgICAgdm9sdW1lTmFtZTogc3RyaW5nLFxuICAgICAgY29uZmlndXJhdGlvbjogRG9ja2VyQ29tcG9zZVZvbHVtZUNvbmZpZ1xuICAgICkge1xuICAgICAgaWYgKCF2b2x1bWVDb25maWdbdm9sdW1lTmFtZV0pIHtcbiAgICAgICAgLy8gRmlyc3Qgdm9sdW1lIGNvbmZpZ3VyYXRpb24gdGFrZXMgcHJlY2VkZW5jZS5cbiAgICAgICAgdm9sdW1lQ29uZmlnW3ZvbHVtZU5hbWVdID0gY29uZmlndXJhdGlvbjtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xuXG4gIC8vIFJlbmRlciBzZXJ2aWNlIGNvbmZpZ3VyYXRpb25cbiAgY29uc3Qgc2VydmljZXM6IFJlY29yZDxzdHJpbmcsIERvY2tlckNvbXBvc2VGaWxlU2VydmljZVNjaGVtYT4gPSB7fTtcbiAgZm9yIChjb25zdCBbc2VydmljZU5hbWUsIHNlcnZpY2VEZXNjcmlwdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgc2VydmljZURlc2NyaXB0aW9ucyA/PyB7fVxuICApKSB7XG4gICAgLy8gUmVzb2x2ZSB0aGUgbmFtZXMgb2YgZWFjaCBkZXBlbmRlbmN5IGFuZCBjaGVjayB0aGF0IHRoZXkgZXhpc3QuXG4gICAgLy8gTm90ZTogVGhleSBtYXkgbm90IGV4aXN0IGlmIHRoZSB1c2VyIG1hZGUgYSBtaXN0YWtlIHdoZW4gcmVmZXJlbmNpbmcgYVxuICAgIC8vIHNlcnZpY2UgYnkgbmFtZSB2aWEgYERvY2tlckNvbXBvc2Uuc2VydmljZU5hbWUoKWAuXG4gICAgLy8gQHNlZSBEb2NrZXJDb21wb3NlLnNlcnZpY2VOYW1lXG4gICAgY29uc3QgZGVwZW5kc09uID0gQXJyYXk8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgZGVwZW5kc09uU2VydmljZU5hbWUgb2Ygc2VydmljZURlc2NyaXB0aW9uLmRlcGVuZHNPbiA/PyBbXSkge1xuICAgICAgY29uc3QgcmVzb2x2ZWRTZXJ2aWNlTmFtZSA9IGRlcGVuZHNPblNlcnZpY2VOYW1lLnNlcnZpY2VOYW1lO1xuICAgICAgaWYgKHJlc29sdmVkU2VydmljZU5hbWUgPT09IHNlcnZpY2VOYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2VydmljZSAke3NlcnZpY2VOYW1lfSBjYW5ub3QgZGVwZW5kIG9uIGl0c2VsZmApO1xuICAgICAgfVxuICAgICAgaWYgKCFzZXJ2aWNlRGVzY3JpcHRpb25zW3Jlc29sdmVkU2VydmljZU5hbWVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVW5hYmxlIHRvIHJlc29sdmUgc2VydmljZSBuYW1lZCAke3Jlc29sdmVkU2VydmljZU5hbWV9IGZvciAke3NlcnZpY2VOYW1lfWBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgZGVwZW5kc09uLnB1c2gocmVzb2x2ZWRTZXJ2aWNlTmFtZSk7XG4gICAgfVxuXG4gICAgLy8gR2l2ZSBlYWNoIHZvbHVtZSBiaW5kaW5nIGEgY2hhbmNlIHRvIGJpbmQgYW55IG5lY2Vzc2FyeSB2b2x1bWVcbiAgICAvLyBjb25maWd1cmF0aW9uIGFuZCBwcm92aWRlIHZvbHVtZSBtb3VudCBpbmZvcm1hdGlvbiBmb3IgdGhlIHNlcnZpY2UuXG4gICAgY29uc3Qgdm9sdW1lczogRG9ja2VyQ29tcG9zZVZvbHVtZU1vdW50W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHZvbHVtZUJpbmRpbmcgb2Ygc2VydmljZURlc2NyaXB0aW9uLnZvbHVtZXMgPz8gW10pIHtcbiAgICAgIHZvbHVtZXMucHVzaCh2b2x1bWVCaW5kaW5nLmJpbmQodm9sdW1lSW5mbykpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBhbmQgc3RvcmUgdGhlIHNlcnZpY2UgY29uZmlndXJhdGlvbiwgdGFraW5nIGNhcmUgbm90IHRvIGNyZWF0ZVxuICAgIC8vIG9iamVjdCBtZW1iZXJzIHdpdGggdW5kZWZpbmVkIHZhbHVlcy5cbiAgICBzZXJ2aWNlc1tzZXJ2aWNlTmFtZV0gPSB7XG4gICAgICAuLi5nZXRPYmplY3RXaXRoS2V5QW5kVmFsdWVJZlZhbHVlSXNEZWZpbmVkKFxuICAgICAgICBcImltYWdlXCIsXG4gICAgICAgIHNlcnZpY2VEZXNjcmlwdGlvbi5pbWFnZVxuICAgICAgKSxcbiAgICAgIC4uLmdldE9iamVjdFdpdGhLZXlBbmRWYWx1ZUlmVmFsdWVJc0RlZmluZWQoXG4gICAgICAgIFwiYnVpbGRcIixcbiAgICAgICAgc2VydmljZURlc2NyaXB0aW9uLmltYWdlQnVpbGRcbiAgICAgICksXG4gICAgICAuLi5nZXRPYmplY3RXaXRoS2V5QW5kVmFsdWVJZlZhbHVlSXNEZWZpbmVkKFxuICAgICAgICBcImNvbW1hbmRcIixcbiAgICAgICAgc2VydmljZURlc2NyaXB0aW9uLmNvbW1hbmRcbiAgICAgICksXG4gICAgICAuLi4oT2JqZWN0LmtleXMoc2VydmljZURlc2NyaXB0aW9uLmVudmlyb25tZW50KS5sZW5ndGggPiAwXG4gICAgICAgID8geyBlbnZpcm9ubWVudDogc2VydmljZURlc2NyaXB0aW9uLmVudmlyb25tZW50IH1cbiAgICAgICAgOiB7fSksXG4gICAgICAuLi4oc2VydmljZURlc2NyaXB0aW9uLnBvcnRzLmxlbmd0aCA+IDBcbiAgICAgICAgPyB7IHBvcnRzOiBzZXJ2aWNlRGVzY3JpcHRpb24ucG9ydHMgfVxuICAgICAgICA6IHt9KSxcbiAgICAgIC4uLihkZXBlbmRzT24ubGVuZ3RoID4gMCA/IHsgZGVwZW5kc09uIH0gOiB7fSksXG4gICAgICAuLi4odm9sdW1lcy5sZW5ndGggPiAwID8geyB2b2x1bWVzIH0gOiB7fSksXG4gICAgfTtcbiAgfVxuXG4gIC8vIEV4cGxpY2l0IHdpdGggdGhlIHR5cGUgaGVyZSBiZWNhdXNlIHRoZSBkZWNhbWVsaXplIHN0ZXAgYWZ0ZXIgdGhpcyB3aXBlc1xuICAvLyBvdXQgdHlwZXMuXG4gIGNvbnN0IGlucHV0OiBEb2NrZXJDb21wb3NlRmlsZVNjaGVtYSA9IHtcbiAgICB2ZXJzaW9uLFxuICAgIHNlcnZpY2VzLFxuICAgIC4uLihPYmplY3Qua2V5cyh2b2x1bWVDb25maWcpLmxlbmd0aCA+IDAgPyB7IHZvbHVtZXM6IHZvbHVtZUNvbmZpZyB9IDoge30pLFxuICB9O1xuXG4gIC8vIENoYW5nZSBtb3N0IGtleXMgdG8gc25ha2UgY2FzZS5cbiAgcmV0dXJuIGRlY2FtZWxpemVLZXlzUmVjdXJzaXZlbHkoaW5wdXQsIHtcbiAgICBzaG91bGREZWNhbWVsaXplOiBzaG91bGREZWNhbWVsaXplRG9ja2VyQ29tcG9zZUtleSxcbiAgICBzZXBhcmF0b3I6IFwiX1wiLFxuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGB7IFtrZXldOiB2YWx1ZSB9YCBpZiBgdmFsdWVgIGlzIGRlZmluZWQsIG90aGVyd2lzZSByZXR1cm5zIGB7fWAgc29cbiAqIHRoYXQgb2JqZWN0IHNwcmVhZGluZyBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSBhIHBlY3VsaWFyIGludGVyZmFjZS5cbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSB2YWx1ZVxuICovXG5mdW5jdGlvbiBnZXRPYmplY3RXaXRoS2V5QW5kVmFsdWVJZlZhbHVlSXNEZWZpbmVkPEsgZXh0ZW5kcyBzdHJpbmcsIFQ+KFxuICBrZXk6IEssXG4gIHZhbHVlOiBUXG4pOiB7IEs6IFQgfSB8IHt9IHtcbiAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPyB7IFtrZXldOiB2YWx1ZSB9IDoge307XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBrZXkgYXQgdGhlIGdpdmVuIHBhdGggc2hvdWxkIGJlIGRlY2FtZWxpemVkLlxuICogTGFyZ2VseSwgYWxsIGtleXMgc2hvdWxkIGJlIHNuYWtlIGNhc2VkLiBCdXQsIHRoZXJlIGFyZSBzb21lXG4gKiBleGNlcHRpb25zIGZvciB1c2VyLXByb3ZpZGVkIG5hbWVzIGZvciBzZXJ2aWNlcywgdm9sdW1lcywgYW5kXG4gKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKlxuICogQHBhcmFtIHBhdGhcbiAqL1xuZnVuY3Rpb24gc2hvdWxkRGVjYW1lbGl6ZURvY2tlckNvbXBvc2VLZXkocGF0aDogc3RyaW5nW10pIHtcbiAgY29uc3QgcG91bmRQYXRoID0gcGF0aC5qb2luKFwiI1wiKTtcblxuICAvLyBEb2VzIG5vdCBkZWNhbWVsaXplIHVzZXIncyBuYW1lcy5cbiAgLy8gc2VydmljZXMubmFtZWhlcmU6XG4gIC8vIHZvbHVtZXMubmFtZWhlcmU6XG4gIGlmICgvXihzZXJ2aWNlc3x2b2x1bWVzKSNbXiNdKyQvLnRlc3QocG91bmRQYXRoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIERvZXMgbm90IGRlY2FtZWxpemUgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gIC8vIHNlcnZpY2VzLm5hbWVoZXJlLmVudmlyb25tZW50LipcbiAgaWYgKC9ec2VydmljZXMjW14jXSsjZW52aXJvbm1lbnQjLy50ZXN0KHBvdW5kUGF0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBEb2VzIG5vdCBkZWNhbWVsaXplIGJ1aWxkIGFyZ3VtZW50c1xuICAvLyBzZXJ2aWNlcy5uYW1laGVyZS5idWlsZC5hcmdzLipcbiAgaWYgKC9ec2VydmljZXMjW14jXSsjYnVpbGQjYXJncyMvLnRlc3QocG91bmRQYXRoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIE90aGVyd2lzZSwgbGV0IGl0IGFsbCBkZWNhbWVsaXplLlxuICByZXR1cm4gdHJ1ZTtcbn1cbiJdfQ==
|
|
289
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9ja2VyLWNvbXBvc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZG9ja2VyLWNvbXBvc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwyQ0FBd0M7QUFFeEMsaUNBQW1EO0FBQ25ELGlDQUFrQztBQW9DbEM7O0dBRUc7QUFDSCxNQUFhLGFBQWMsU0FBUSxxQkFBUztJQWlGMUMsWUFBWSxPQUFnQixFQUFFLEtBQTBCOztRQUN0RCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFZixNQUFNLFVBQVUsR0FBRyxDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxVQUFVLEVBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBTSxDQUFDLFVBQVUsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDMUUsSUFBSSxlQUFRLENBQUMsT0FBTyxFQUFFLGtCQUFrQixVQUFVLEVBQUUsRUFBRTtZQUNwRCxTQUFTLEVBQUUsSUFBSTtZQUNmLFFBQVEsRUFBRSxJQUFJO1lBQ2QsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtTQUMzQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLGFBQWEsS0FBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDNUQsTUFBTSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztTQUNqRDtRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsYUFBYSxFQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDbEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFFbkIsMERBQTBEO1FBQzFELE1BQU0sZUFBZSxTQUFHLEtBQUssYUFBTCxLQUFLLHVCQUFM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QkFBNkIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDakQsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUVELG9DQUFvQztJQUNwQyxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRcIjtcbmltcG9ydCB7IFByb2plY3QgfSBmcm9tIFwiLi9wcm9qZWN0XCI7XG5pbXBvcnQgeyBkZWNhbWVsaXplS2V5c1JlY3Vyc2l2ZWx5IH0gZnJvbSBcIi4vdXRpbFwiO1xuaW1wb3J0IHsgWWFtbEZpbGUgfSBmcm9tIFwiLi95YW1sXCI7XG5cbi8qKlxuICogUHJvcHMgZm9yIERvY2tlckNvbXBvc2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG9ja2VyQ29tcG9zZVByb3BzIHtcbiAgLyoqXG4gICAqIEEgbmFtZSB0byBhZGQgdG8gdGhlIGRvY2tlci1jb21wb3NlLnltbCBmaWxlbmFtZS5cbiAgICogQGV4YW1wbGUgJ215bmFtZScgeWllbGRzICdkb2NrZXItY29tcG9zZS5teW5hbWUueW1sJ1xuICAgKiBAZGVmYXVsdCAtIG5vIG5hbWUgaXMgYWRkZWRcbiAgICovXG4gIHJlYWRvbmx5IG5hbWVTdWZmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERvY2tlciBDb21wb3NlIHNjaGVtYSB2ZXJzaW9uIGRvIGJlIHVzZWRcbiAgICogQGRlZmF1bHQgMy4zXG4gICAqL1xuICByZWFkb25seSBzY2hlbWFWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZXJ2aWNlIGRlc2NyaXB0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VzPzogUmVjb3JkPHN0cmluZywgRG9ja2VyQ29tcG9zZVNlcnZpY2VEZXNjcmlwdGlvbj47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgcG9ydCBtYXBwaW5ncy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEb2NrZXJDb21wb3NlUG9ydE1hcHBpbmdPcHRpb25zIHtcbiAgLyoqXG4gICAqIFBvcnQgbWFwcGluZyBwcm90b2NvbC5cbiAgICogQGRlZmF1bHQgRG9ja2VyQ29tcG9zZVByb3RvY29sLlRDUFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdG9jb2w/OiBEb2NrZXJDb21wb3NlUHJvdG9jb2w7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgZG9ja2VyLWNvbXBvc2UgWUFNTCBmaWxlLlxuICovXG5leHBvcnQgY2xhc3MgRG9ja2VyQ29tcG9zZSBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBEZXBlbmRzIG9uIGEgc2VydmljZSBuYW1lLlxuICAgKi9cbiAgc3RhdGljIHNlcnZpY2VOYW1lKHNlcnZpY2VOYW1lOiBzdHJpbmcpOiBJRG9ja2VyQ29tcG9zZVNlcnZpY2VOYW1lIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VydmljZU5hbWUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBwb3J0IG1hcHBpbmcuXG4gICAqIEBwYXJhbSBwdWJsaXNoZWRQb3J0IFB1Ymxpc2hlZCBwb3J0IG51bWJlclxuICAgKiBAcGFyYW0gdGFyZ2V0UG9ydCBDb250YWluZXIncyBwb3J0IG51bWJlclxuICAgKiBAcGFyYW0gb3B0aW9ucyBQb3J0IG1hcHBpbmcgb3B0aW9uc1xuICAgKi9cbiAgc3RhdGljIHBvcnRNYXBwaW5nKFxuICAgIHB1Ymxpc2hlZFBvcnQ6IG51bWJlcixcbiAgICB0YXJnZXRQb3J0OiBudW1iZXIsXG4gICAgb3B0aW9ucz86IERvY2tlckNvbXBvc2VQb3J0TWFwcGluZ09wdGlvbnNcbiAgKTogRG9ja2VyQ29tcG9zZVNlcnZpY2VQb3J0IHtcbiAgICBjb25zdCBwcm90b2NvbCA9IG9wdGlvbnM/LnByb3RvY29sID8/IERvY2tlckNvbXBvc2VQcm90b2NvbC5UQ1A7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiB0YXJnZXRQb3J0LFxuICAgICAgcHVibGlzaGVkOiBwdWJsaXNoZWRQb3J0LFxuICAgICAgcHJvdG9jb2w6IHByb3RvY29sLFxuICAgICAgbW9kZTogXCJob3N0XCIsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBiaW5kIHZvbHVtZSB0aGF0IGJpbmRzIGEgaG9zdCBwYXRoIHRvIHRoZSB0YXJnZXQgcGF0aCBpbiB0aGUgY29udGFpbmVyLlxuICAgKiBAcGFyYW0gc291cmNlUGF0aCBIb3N0IHBhdGggbmFtZVxuICAgKiBAcGFyYW0gdGFyZ2V0UGF0aCBUYXJnZXQgcGF0aCBuYW1lXG4gICAqL1xuICBzdGF0aWMgYmluZFZvbHVtZShcbiAgICBzb3VyY2VQYXRoOiBzdHJpbmcsXG4gICAgdGFyZ2V0UGF0aDogc3RyaW5nXG4gICk6IElEb2NrZXJDb21wb3NlVm9sdW1lQmluZGluZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJpbmQoX3ZvbHVtZUluZm86IElEb2NrZXJDb21wb3NlVm9sdW1lQ29uZmlnKTogRG9ja2VyQ29tcG9zZVZvbHVtZU1vdW50IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiBcImJpbmRcIixcbiAgICAgICAgICBzb3VyY2U6IHNvdXJjZVBhdGgsXG4gICAgICAgICAgdGFyZ2V0OiB0YXJnZXRQYXRoLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5hbWVkIHZvbHVtZSBhbmQgbW91bnQgaXQgdG8gdGhlIHRhcmdldCBwYXRoLiBJZiB5b3UgdXNlIHRoaXNcbiAgICogbmFtZWQgdm9sdW1lIGluIHNldmVyYWwgc2VydmljZXMsIHRoZSB2b2x1bWUgd2lsbCBiZSBzaGFyZWQuIEluIHRoaXNcbiAgICogY2FzZSwgdGhlIHZvbHVtZSBjb25maWd1cmF0aW9uIG9mIHRoZSBmaXJzdC1wcm92aWRlZCBvcHRpb25zIGFyZSB1c2VkLlxuICAgKlxuICAgKiBAcGFyYW0gdm9sdW1lTmFtZSBOYW1lIG9mIHRoZSB2b2x1bWVcbiAgICogQHBhcmFtIHRhcmdldFBhdGggVGFyZ2V0IHBhdGhcbiAgICogQHBhcmFtIG9wdGlvbnMgdm9sdW1lIGNvbmZpZ3VyYXRpb24gKGRlZmF1bHQ6IGRvY2tlciBjb21wb3NlIGRlZmF1bHRzKVxuICAgKi9cbiAgc3RhdGljIG5hbWVkVm9sdW1lKFxuICAgIHZvbHVtZU5hbWU6IHN0cmluZyxcbiAgICB0YXJnZXRQYXRoOiBzdHJpbmcsXG4gICAgb3B0aW9uczogRG9ja2VyQ29tcG9zZVZvbHVtZUNvbmZpZyA9IHt9XG4gICk6IElEb2NrZXJDb21wb3NlVm9sdW1lQmluZGluZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJpbmQodm9sdW1lSW5mbzogSURvY2tlckNvbXBvc2VWb2x1bWVDb25maWcpOiBEb2NrZXJDb21wb3NlVm9sdW1lTW91bnQge1xuICAgICAgICB2b2x1bWVJbmZvLmFkZFZvbHVtZUNvbmZpZ3VyYXRpb24odm9sdW1lTmFtZSwgb3B0aW9ucyk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiBcInZvbHVtZVwiLFxuICAgICAgICAgIHNvdXJjZTogdm9sdW1lTmFtZSxcbiAgICAgICAgICB0YXJnZXQ6IHRhcmdldFBhdGgsXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IHNlcnZpY2VzOiBSZWNvcmQ8c3RyaW5nLCBEb2NrZXJDb21wb3NlU2VydmljZT47XG4gIHByaXZhdGUgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIHByb3BzPzogRG9ja2VyQ29tcG9zZVByb3BzKSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG5cbiAgICBjb25zdCBuYW1lU3VmZml4ID0gcHJvcHM/Lm5hbWVTdWZmaXggPyBgJHtwcm9wcyEubmFtZVN1ZmZpeH0ueW1sYCA6IFwieW1sXCI7XG4gICAgbmV3IFlhbWxGaWxlKHByb2plY3QsIGBkb2NrZXItY29tcG9zZS4ke25hbWVTdWZmaXh9YCwge1xuICAgICAgY29tbWl0dGVkOiB0cnVlLFxuICAgICAgcmVhZG9ubHk6IHRydWUsXG4gICAgICBvYmo6ICgpID0+IHRoaXMuX3N5bnRoZXNpemVEb2NrZXJDb21wb3NlKCksXG4gICAgfSk7XG5cbiAgICBpZiAocHJvcHM/LnNjaGVtYVZlcnNpb24gJiYgIXBhcnNlRmxvYXQocHJvcHMuc2NoZW1hVmVyc2lvbikpIHtcbiAgICAgIHRocm93IEVycm9yKFwiVmVyc2lvbiB0YWcgbmVlZHMgdG8gYmUgYSBudW1iZXJcIik7XG4gICAgfVxuICAgIHRoaXMudmVyc2lvbiA9IHByb3BzPy5zY2hlbWFWZXJzaW9uID8gcHJvcHMuc2NoZW1hVmVyc2lvbiA6IFwiMy4zXCI7XG4gICAgdGhpcy5zZXJ2aWNlcyA9IHt9O1xuXG4gICAgLy8gQWRkIHRoZSBzZXJ2aWNlcyBwcm92aWRlZCB2aWEgdGhlIGNvbnN0cnVjdG9yIGFyZ3VtZW50LlxuICAgIGNvbnN0IGluaXRpYWxTZXJ2aWNlcyA9IHByb3BzPy5zZXJ2aWNlcyA/PyB7fTtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBzZXJ2aWNlRGVzY3JpcHRpb25dIG9mIE9iamVjdC5lbnRyaWVzKGluaXRpYWxTZXJ2aWNlcykpIHtcbiAgICAgIHRoaXMuYWRkU2VydmljZShuYW1lLCBzZXJ2aWNlRGVzY3JpcHRpb24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBzZXJ2aWNlIHRvIHRoZSBkb2NrZXItY29tcG9zZSBmaWxlLlxuICAgKiBAcGFyYW0gc2VydmljZU5hbWUgbmFtZSBvZiB0aGUgc2VydmljZVxuICAgKiBAcGFyYW0gZGVzY3JpcHRpb24gYSBzZXJ2aWNlIGRlc2NyaXB0aW9uXG4gICAqL1xuICBwdWJsaWMgYWRkU2VydmljZShcbiAgICBzZXJ2aWNlTmFtZTogc3RyaW5nLFxuICAgIGRlc2NyaXB0aW9uOiBEb2NrZXJDb21wb3NlU2VydmljZURlc2NyaXB0aW9uXG4gICk6IERvY2tlckNvbXBvc2VTZXJ2aWNlIHtcbiAgICBjb25zdCBzZXJ2aWNlID0gbmV3IERvY2tlckNvbXBvc2VTZXJ2aWNlKHNlcnZpY2VOYW1lLCBkZXNjcmlwdGlvbik7XG4gICAgdGhpcy5zZXJ2aWNlc1tzZXJ2aWNlTmFtZV0gPSBzZXJ2aWNlO1xuICAgIHJldHVybiBzZXJ2aWNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX3N5bnRoZXNpemVEb2NrZXJDb21wb3NlKCk6IG9iamVjdCB7XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuc2VydmljZXMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRG9ja2VyQ29tcG9zZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUgc2VydmljZVwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyRG9ja2VyQ29tcG9zZUZpbGUodGhpcy5zZXJ2aWNlcywgdGhpcy52ZXJzaW9uKTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIGludGVyZmFjZSBwcm92aWRpbmcgdGhlIG5hbWUgb2YgYSBkb2NrZXIgY29tcG9zZSBzZXJ2aWNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElEb2NrZXJDb21wb3NlU2VydmljZU5hbWUge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGRvY2tlciBjb21wb3NlIHNlcnZpY2UuXG4gICAqL1xuICByZWFkb25seSBzZXJ2aWNlTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIERlc2NyaXB0aW9uIG9mIGEgZG9ja2VyLWNvbXBvc2UueW1sIHNlcnZpY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG9ja2VyQ29tcG9zZVNlcnZpY2VEZXNjcmlwdGlvbiB7XG4gIC8qKlxuICAgKiBVc2UgYSBkb2NrZXIgaW1hZ2UuXG4gICAqIE5vdGU6IFlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGBidWlsZGAgb3IgYGltYWdlYCBrZXkuXG4gICAqIEBzZWUgaW1hZ2VCdWlsZFxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgZG9ja2VyIGltYWdlLlxuICAgKiBOb3RlOiBZb3UgbXVzdCBzcGVjaWZ5IGVpdGhlciBgaW1hZ2VCdWlsZGAgb3IgYGltYWdlYCBrZXkuXG4gICAqIEBzZWUgaW1hZ2VcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlQnVpbGQ/OiBEb2NrZXJDb21wb3NlQnVpbGQ7XG5cbiAgLyoqXG4gICAqIFByb3ZpZGUgYSBjb21tYW5kIHRvIHRoZSBkb2NrZXIgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCAtIHVzZSB0aGUgY29udGFpbmVyJ3MgZGVmYXVsdCBjb21tYW5kXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE5hbWVzIG9mIG90aGVyIHNlcnZpY2VzIHRoaXMgc2VydmljZSBkZXBlbmRzIG9uLlxuICAgKiBAZGVmYXVsdCAtIG5vIGRlcGVuZGVuY2llc1xuICAgKi9cbiAgcmVhZG9ubHkgZGVwZW5kc09uPzogSURvY2tlckNvbXBvc2VTZXJ2aWNlTmFtZVtdO1xuXG4gIC8qKlxuICAgKiBNb3VudCBzb21lIHZvbHVtZXMgaW50byB0aGUgc2VydmljZS5cbiAgICogVXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHRvIGNyZWF0ZSB2b2x1bWVzOlxuICAgKiBAc2VlIERvY2tlckNvbXBvc2UuYmluZFZvbHVtZSgpIHRvIG1vdW50IGEgaG9zdCBwYXRoXG4gICAqIEBzZWUgRG9ja2VyQ29tcG9zZS5uYW1lZFZvbHVtZSgpIHRvIGNyZWF0ZSAmIG1vdW50IGEgbmFtZWQgdm9sdW1lXG4gICAqL1xuICByZWFkb25seSB2b2x1bWVzPzogSURvY2tlckNvbXBvc2VWb2x1bWVCaW5kaW5nW107XG5cbiAgLyoqXG4gICAqIE1hcCBzb21lIHBvcnRzLlxuICAgKiBAZGVmYXVsdCAtIG5vIHBvcnRzIGFyZSBtYXBwZWRcbiAgICovXG4gIHJlYWRvbmx5IHBvcnRzPzogRG9ja2VyQ29tcG9zZVNlcnZpY2VQb3J0W107XG5cbiAgLyoqXG4gICAqIEFkZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gICAqIEBkZWZhdWx0IC0gbm8gZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG4vKipcbiAqIEEgZG9ja2VyLWNvbXBvc2Ugc2VydmljZS5cbiAqL1xuZXhwb3J0IGNsYXNzIERvY2tlckNvbXBvc2VTZXJ2aWNlIGltcGxlbWVudHMgSURvY2tlckNvbXBvc2VTZXJ2aWNlTmFtZSB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBzZXJ2aWNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNlcnZpY2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERvY2tlciBpbWFnZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpbWFnZT86IHN0cmluZztcblxuICAvKipcbiAgICogRG9ja2VyIGltYWdlIGJ1aWxkIGluc3RydWN0aW9ucy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpbWFnZUJ1aWxkPzogRG9ja2VyQ29tcG9zZUJ1aWxkO1xuXG4gIC8qKlxuICAgKiBDb21tYW5kIHRvIHJ1biBpbiB0aGUgY29udGFpbmVyLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbW1hbmQ/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogT3RoZXIgc2VydmljZXMgdGhhdCB0aGlzIHNlcnZpY2UgZGVwZW5kcyBvbi5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZXBlbmRzT246IElEb2NrZXJDb21wb3NlU2VydmljZU5hbWVbXTtcblxuICAvKipcbiAgICogVm9sdW1lcyBtb3VudGVkIGluIHRoZSBjb250YWluZXIuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdm9sdW1lczogSURvY2tlckNvbXBvc2VWb2x1bWVCaW5kaW5nW107XG5cbiAgLyoqXG4gICAqIFB1Ymxpc2hlZCBwb3J0cy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwb3J0czogRG9ja2VyQ29tcG9zZVNlcnZpY2VQb3J0W107XG5cbiAgLyoqXG4gICAqIEVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlbnZpcm9ubWVudDogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzZXJ2aWNlTmFtZTogc3RyaW5nLFxuICAgIHNlcnZpY2VEZXNjcmlwdGlvbjogRG9ja2VyQ29tcG9zZVNlcnZpY2VEZXNjcmlwdGlvblxuICApIHtcbiAgICBpZiAoXG4gICAgICAoIXNlcnZpY2VEZXNjcmlwdGlvbi5pbWFnZUJ1aWxkICYmICFzZXJ2aWNlRGVzY3JpcHRpb24uaW1hZ2UpIHx8XG4gICAgICAoc2VydmljZURlc2NyaXB0aW9uLmltYWdlQnVpbGQgJiYgc2VydmljZURlc2NyaXB0aW9uLmltYWdlKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQSBzZXJ2aWNlICR7c2VydmljZU5hbWV9IHJlcXVpcmVzIGV4YWN0bHkgb25lIG9mIGEgXFxgaW1hZ2VCdWlsZFxcYCBvciBcXGBpbWFnZVxcYCBrZXlgXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuc2VydmljZU5hbWUgPSBzZXJ2aWNlTmFtZTtcbiAgICB0aGlzLmNvbW1hbmQgPSBzZXJ2aWNlRGVzY3JpcHRpb24uY29tbWFuZDtcbiAgICB0aGlzLmltYWdlID0gc2VydmljZURlc2NyaXB0aW9uLmltYWdlO1xuICAgIHRoaXMuaW1hZ2VCdWlsZCA9IHNlcnZpY2VEZXNjcmlwdGlvbi5pbWFnZUJ1aWxkO1xuICAgIHRoaXMuZGVwZW5kc09uID0gc2VydmljZURlc2NyaXB0aW9uLmRlcGVuZHNPbiA/PyBbXTtcbiAgICB0aGlzLnZvbHVtZXMgPSBzZXJ2aWNlRGVzY3JpcHRpb24udm9sdW1lcyA/PyBbXTtcbiAgICB0aGlzLnBvcnRzID0gc2VydmljZURlc2NyaXB0aW9uLnBvcnRzID8/IFtdO1xuICAgIHRoaXMuZW52aXJvbm1lbnQgPSBzZXJ2aWNlRGVzY3JpcHRpb24uZW52aXJvbm1lbnQgPz8ge307XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgcG9ydCBtYXBwaW5nXG4gICAqIEBwYXJhbSBwdWJsaXNoZWRQb3J0IFB1Ymxpc2hlZCBwb3J0IG51bWJlclxuICAgKiBAcGFyYW0gdGFyZ2V0UG9ydCBDb250YWluZXIncyBwb3J0IG51bWJlclxuICAgKiBAcGFyYW0gb3B0aW9ucyBQb3J0IG1hcHBpbmcgb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIGFkZFBvcnQoXG4gICAgcHVibGlzaGVkUG9ydDogbnVtYmVyLFxuICAgIHRhcmdldFBvcnQ6IG51bWJlcixcbiAgICBvcHRpb25zPzogRG9ja2VyQ29tcG9zZVBvcnRNYXBwaW5nT3B0aW9uc1xuICApIHtcbiAgICB0aGlzLnBvcnRzPy5wdXNoKFxuICAgICAgRG9ja2VyQ29tcG9zZS5wb3J0TWFwcGluZyhwdWJsaXNoZWRQb3J0LCB0YXJnZXRQb3J0LCBvcHRpb25zKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIGVudmlyb25tZW50IHZhcmlhYmxlXG4gICAqIEBwYXJhbSBuYW1lIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWVcbiAgICogQHBhcmFtIHZhbHVlIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZVxuICAgKi9cbiAgcHVibGljIGFkZEVudmlyb25tZW50KG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuZW52aXJvbm1lbnRbbmFtZV0gPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIHRoZSBzZXJ2aWNlIGRlcGVuZCBvbiBhbm90aGVyIHNlcnZpY2UuXG4gICAqIEBwYXJhbSBzZXJ2aWNlTmFtZVxuICAgKi9cbiAgcHVibGljIGFkZERlcGVuZHNPbihzZXJ2aWNlTmFtZTogSURvY2tlckNvbXBvc2VTZXJ2aWNlTmFtZSkge1xuICAgIHRoaXMuZGVwZW5kc09uLnB1c2goc2VydmljZU5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHZvbHVtZSB0byB0aGUgc2VydmljZS5cbiAgICogQHBhcmFtIHZvbHVtZVxuICAgKi9cbiAgcHVibGljIGFkZFZvbHVtZSh2b2x1bWU6IElEb2NrZXJDb21wb3NlVm9sdW1lQmluZGluZykge1xuICAgIHRoaXMudm9sdW1lcy5wdXNoKHZvbHVtZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHNlcnZpY2UgcG9ydCBtYXBwaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG9ja2VyQ29tcG9zZVNlcnZpY2VQb3J0IHtcbiAgLyoqXG4gICAqIFB1Ymxpc2hlZCBwb3J0IG51bWJlclxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGlzaGVkOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRhcmdldCBwb3J0IG51bWJlclxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE5ldHdvcmsgcHJvdG9jb2xcbiAgICovXG4gIHJlYWRvbmx5IHByb3RvY29sOiBEb2NrZXJDb21wb3NlUHJvdG9jb2w7XG5cbiAgLyoqXG4gICAqIFBvcnQgbWFwcGluZyBtb2RlLlxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIE5ldHdvcmsgcHJvdG9jb2wgZm9yIHBvcnQgbWFwcGluZ1xuICovXG5leHBvcnQgZW51bSBEb2NrZXJDb21wb3NlUHJvdG9jb2wge1xuICAvKipcbiAgICogVENQIHByb3RvY29sXG4gICAqL1xuICBUQ1AgPSBcInRjcFwiLFxuXG4gIC8qKlxuICAgKiBVRFAgcHJvdG9jb2xcbiAgICovXG4gIFVEUCA9IFwidWRwXCIsXG59XG5cbi8qKlxuICogQnVpbGQgYXJndW1lbnRzIGZvciBjcmVhdGluZyBhIGRvY2tlciBpbWFnZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEb2NrZXJDb21wb3NlQnVpbGQge1xuICAvKipcbiAgICogRG9ja2VyIGJ1aWxkIGNvbnRleHQgZGlyZWN0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGRvY2tlcmZpbGUgdG8gYnVpbGQgZnJvbS5cbiAgICogQGRlZmF1bHQgXCJEb2NrZXJmaWxlXCJcbiAgICovXG4gIHJlYWRvbmx5IGRvY2tlcmZpbGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFyZ3MuXG4gICAqIEBkZWZhdWx0IC0gbm9uZSBhcmUgcHJvdmlkZWRcbiAgICovXG4gIHJlYWRvbmx5IGFyZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG4vKipcbiAqIFZvbHVtZSBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG9ja2VyQ29tcG9zZVZvbHVtZUNvbmZpZyB7XG4gIC8qKlxuICAgKiBEcml2ZXIgdG8gdXNlIGZvciB0aGUgdm9sdW1lXG4gICAqIEBkZWZhdWx0IC0gdmFsdWUgaXMgbm90IHByb3ZpZGVkXG4gICAqL1xuICByZWFkb25seSBkcml2ZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgdG8gcHJvdmlkZSB0byB0aGUgZHJpdmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgZHJpdmVyT3B0cz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIHRvIGluZGljYXRlIHRoYXQgdGhlIHZvbHVtZSBpcyBleHRlcm5hbGx5IGNyZWF0ZWQuXG4gICAqIEBkZWZhdWx0IC0gdW5zZXQsIGluZGljYXRpbmcgdGhhdCBkb2NrZXItY29tcG9zZSBjcmVhdGVzIHRoZSB2b2x1bWVcbiAgICovXG4gIHJlYWRvbmx5IGV4dGVybmFsPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgdm9sdW1lIGZvciB3aGVuIHRoZSB2b2x1bWUgbmFtZSBpc24ndCBnb2luZyB0byB3b3JrIGluIFlBTUwuXG4gICAqIEBkZWZhdWx0IC0gdW5zZXQsIGluZGljYXRpbmcgdGhhdCBkb2NrZXItY29tcG9zZSBjcmVhdGVzIHZvbHVtZXMgYXMgdXN1YWxcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVm9sdW1lIGJpbmRpbmcgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSURvY2tlckNvbXBvc2VWb2x1bWVCaW5kaW5nIHtcbiAgLyoqXG4gICAqIEJpbmRzIHRoZSByZXF1ZXN0ZWQgdm9sdW1lIHRvIHRoZSBkb2NrZXItY29tcG9zZSB2b2x1bWUgY29uZmlndXJhdGlvbiBhbmRcbiAgICogcHJvdmlkZSBtb3VudGluZyBpbnN0cnVjdGlvbnMgZm9yIHN5bnRoZXNpcy5cbiAgICogQHBhcmFtIHZvbHVtZUNvbmZpZyB0aGUgdm9sdW1lIGNvbmZpZ3VyYXRpb25cbiAgICogQHJldHVybnMgbW91bnRpbmcgaW5zdHJ1Y3Rpb25zIGZvciB0aGUgc2VydmljZS5cbiAgICovXG4gIGJpbmQodm9sdW1lQ29uZmlnOiBJRG9ja2VyQ29tcG9zZVZvbHVtZUNvbmZpZyk6IERvY2tlckNvbXBvc2VWb2x1bWVNb3VudDtcbn1cblxuLyoqXG4gKiBTdG9yYWdlIGZvciB2b2x1bWUgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRG9ja2VyQ29tcG9zZVZvbHVtZUNvbmZpZyB7XG4gIC8qKlxuICAgKiBBZGQgdm9sdW1lIGNvbmZpZ3VyYXRpb24gdG8gdGhlIHJlcG9zaXRvcnkuXG4gICAqIEBwYXJhbSB2b2x1bWVOYW1lXG4gICAqIEBwYXJhbSBjb25maWd1cmF0aW9uXG4gICAqL1xuICBhZGRWb2x1bWVDb25maWd1cmF0aW9uKFxuICAgIHZvbHVtZU5hbWU6IHN0cmluZyxcbiAgICBjb25maWd1cmF0aW9uOiBEb2NrZXJDb21wb3NlVm9sdW1lQ29uZmlnXG4gICk6IHZvaWQ7XG59XG5cbi8qKlxuICogU2VydmljZSB2b2x1bWUgbW91bnRpbmcgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG9ja2VyQ29tcG9zZVZvbHVtZU1vdW50IHtcbiAgLyoqXG4gICAqIFR5cGUgb2Ygdm9sdW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWb2x1bWUgc291cmNlXG4gICAqL1xuICByZWFkb25seSBzb3VyY2U6IHN0cmluZztcblxuICAvKipcbiAgICogVm9sdW1lIHRhcmdldFxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU3RydWN0dXJlIG9mIGEgZG9ja2VyIGNvbXBvc2UgZmlsZSBiZWZvcmUgd2UgZGVjYW1lbGl6ZS5cbiAqIEBpbnRlcm5hbFxuICovXG5pbnRlcmZhY2UgRG9ja2VyQ29tcG9zZUZpbGVTY2hlbWEge1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIHNlcnZpY2VzOiBSZWNvcmQ8c3RyaW5nLCBEb2NrZXJDb21wb3NlRmlsZVNlcnZpY2VTY2hlbWE+O1xuICB2b2x1bWVzPzogUmVjb3JkPHN0cmluZywgRG9ja2VyQ29tcG9zZVZvbHVtZUNvbmZpZz47XG59XG5cbi8qKlxuICogU3RydWN0dXJlIG9mIGEgZG9ja2VyIGNvbXBvc2UgZmlsZSdzIHNlcnZpY2UgYmVmb3JlIHdlIGRlY2FtZWxpemUuXG4gKiBAaW50ZXJuYWxcbiAqL1xuaW50ZXJmYWNlIERvY2tlckNvbXBvc2VGaWxlU2VydmljZVNjaGVtYSB7XG4gIHJlYWRvbmx5IGRlcGVuZHNPbj86IHN0cmluZ1tdO1xuICByZWFkb25seSBidWlsZD86IERvY2tlckNvbXBvc2VCdWlsZDtcbiAgcmVhZG9ubHkgaW1hZ2U/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbW1hbmQ/OiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgdm9sdW1lcz86IERvY2tlckNvbXBvc2VWb2x1bWVNb3VudFtdO1xuICByZWFkb25seSBwb3J0cz86IERvY2tlckNvbXBvc2VTZXJ2aWNlUG9ydFtdO1xuICByZWFkb25seSBlbnZpcm9ubWVudD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmZ1bmN0aW9uIHJlbmRlckRvY2tlckNvbXBvc2VGaWxlKFxuICBzZXJ2aWNlRGVzY3JpcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBEb2NrZXJDb21wb3NlU2VydmljZT4sXG4gIHZlcnNpb246IHN0cmluZ1xuKTogb2JqZWN0IHtcbiAgLy8gUmVjb3JkIHZvbHVtZSBjb25maWd1cmF0aW9uXG4gIGNvbnN0IHZvbHVtZUNvbmZpZzogUmVjb3JkPHN0cmluZywgRG9ja2VyQ29tcG9zZVZvbHVtZUNvbmZpZz4gPSB7fTtcbiAgY29uc3Qgdm9sdW1lSW5mbzogSURvY2tlckNvbXBvc2VWb2x1bWVDb25maWcgPSB7XG4gICAgYWRkVm9sdW1lQ29uZmlndXJhdGlvbihcbiAgICAgIHZvbHVtZU5hbWU6IHN0cmluZyxcbiAgICAgIGNvbmZpZ3VyYXRpb246IERvY2tlckNvbXBvc2VWb2x1bWVDb25maWdcbiAgICApIHtcbiAgICAgIGlmICghdm9sdW1lQ29uZmlnW3ZvbHVtZU5hbWVdKSB7XG4gICAgICAgIC8vIEZpcnN0IHZvbHVtZSBjb25maWd1cmF0aW9uIHRha2VzIHByZWNlZGVuY2UuXG4gICAgICAgIHZvbHVtZUNvbmZpZ1t2b2x1bWVOYW1lXSA9IGNvbmZpZ3VyYXRpb247XG4gICAgICB9XG4gICAgfSxcbiAgfTtcblxuICAvLyBSZW5kZXIgc2VydmljZSBjb25maWd1cmF0aW9uXG4gIGNvbnN0IHNlcnZpY2VzOiBSZWNvcmQ8c3RyaW5nLCBEb2NrZXJDb21wb3NlRmlsZVNlcnZpY2VTY2hlbWE+ID0ge307XG4gIGZvciAoY29uc3QgW3NlcnZpY2VOYW1lLCBzZXJ2aWNlRGVzY3JpcHRpb25dIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgIHNlcnZpY2VEZXNjcmlwdGlvbnMgPz8ge31cbiAgKSkge1xuICAgIC8vIFJlc29sdmUgdGhlIG5hbWVzIG9mIGVhY2ggZGVwZW5kZW5jeSBhbmQgY2hlY2sgdGhhdCB0aGV5IGV4aXN0LlxuICAgIC8vIE5vdGU6IFRoZXkgbWF5IG5vdCBleGlzdCBpZiB0aGUgdXNlciBtYWRlIGEgbWlzdGFrZSB3aGVuIHJlZmVyZW5jaW5nIGFcbiAgICAvLyBzZXJ2aWNlIGJ5IG5hbWUgdmlhIGBEb2NrZXJDb21wb3NlLnNlcnZpY2VOYW1lKClgLlxuICAgIC8vIEBzZWUgRG9ja2VyQ29tcG9zZS5zZXJ2aWNlTmFtZVxuICAgIGNvbnN0IGRlcGVuZHNPbiA9IEFycmF5PHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IGRlcGVuZHNPblNlcnZpY2VOYW1lIG9mIHNlcnZpY2VEZXNjcmlwdGlvbi5kZXBlbmRzT24gPz8gW10pIHtcbiAgICAgIGNvbnN0IHJlc29sdmVkU2VydmljZU5hbWUgPSBkZXBlbmRzT25TZXJ2aWNlTmFtZS5zZXJ2aWNlTmFtZTtcbiAgICAgIGlmIChyZXNvbHZlZFNlcnZpY2VOYW1lID09PSBzZXJ2aWNlTmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNlcnZpY2UgJHtzZXJ2aWNlTmFtZX0gY2Fubm90IGRlcGVuZCBvbiBpdHNlbGZgKTtcbiAgICAgIH1cbiAgICAgIGlmICghc2VydmljZURlc2NyaXB0aW9uc1tyZXNvbHZlZFNlcnZpY2VOYW1lXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFVuYWJsZSB0byByZXNvbHZlIHNlcnZpY2UgbmFtZWQgJHtyZXNvbHZlZFNlcnZpY2VOYW1lfSBmb3IgJHtzZXJ2aWNlTmFtZX1gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGRlcGVuZHNPbi5wdXNoKHJlc29sdmVkU2VydmljZU5hbWUpO1xuICAgIH1cblxuICAgIC8vIEdpdmUgZWFjaCB2b2x1bWUgYmluZGluZyBhIGNoYW5jZSB0byBiaW5kIGFueSBuZWNlc3Nhcnkgdm9sdW1lXG4gICAgLy8gY29uZmlndXJhdGlvbiBhbmQgcHJvdmlkZSB2b2x1bWUgbW91bnQgaW5mb3JtYXRpb24gZm9yIHRoZSBzZXJ2aWNlLlxuICAgIGNvbnN0IHZvbHVtZXM6IERvY2tlckNvbXBvc2VWb2x1bWVNb3VudFtdID0gW107XG4gICAgZm9yIChjb25zdCB2b2x1bWVCaW5kaW5nIG9mIHNlcnZpY2VEZXNjcmlwdGlvbi52b2x1bWVzID8/IFtdKSB7XG4gICAgICB2b2x1bWVzLnB1c2godm9sdW1lQmluZGluZy5iaW5kKHZvbHVtZUluZm8pKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgYW5kIHN0b3JlIHRoZSBzZXJ2aWNlIGNvbmZpZ3VyYXRpb24sIHRha2luZyBjYXJlIG5vdCB0byBjcmVhdGVcbiAgICAvLyBvYmplY3QgbWVtYmVycyB3aXRoIHVuZGVmaW5lZCB2YWx1ZXMuXG4gICAgc2VydmljZXNbc2VydmljZU5hbWVdID0ge1xuICAgICAgLi4uZ2V0T2JqZWN0V2l0aEtleUFuZFZhbHVlSWZWYWx1ZUlzRGVmaW5lZChcbiAgICAgICAgXCJpbWFnZVwiLFxuICAgICAgICBzZXJ2aWNlRGVzY3JpcHRpb24uaW1hZ2VcbiAgICAgICksXG4gICAgICAuLi5nZXRPYmplY3RXaXRoS2V5QW5kVmFsdWVJZlZhbHVlSXNEZWZpbmVkKFxuICAgICAgICBcImJ1aWxkXCIsXG4gICAgICAgIHNlcnZpY2VEZXNjcmlwdGlvbi5pbWFnZUJ1aWxkXG4gICAgICApLFxuICAgICAgLi4uZ2V0T2JqZWN0V2l0aEtleUFuZFZhbHVlSWZWYWx1ZUlzRGVmaW5lZChcbiAgICAgICAgXCJjb21tYW5kXCIsXG4gICAgICAgIHNlcnZpY2VEZXNjcmlwdGlvbi5jb21tYW5kXG4gICAgICApLFxuICAgICAgLi4uKE9iamVjdC5rZXlzKHNlcnZpY2VEZXNjcmlwdGlvbi5lbnZpcm9ubWVudCkubGVuZ3RoID4gMFxuICAgICAgICA/IHsgZW52aXJvbm1lbnQ6IHNlcnZpY2VEZXNjcmlwdGlvbi5lbnZpcm9ubWVudCB9XG4gICAgICAgIDoge30pLFxuICAgICAgLi4uKHNlcnZpY2VEZXNjcmlwdGlvbi5wb3J0cy5sZW5ndGggPiAwXG4gICAgICAgID8geyBwb3J0czogc2VydmljZURlc2NyaXB0aW9uLnBvcnRzIH1cbiAgICAgICAgOiB7fSksXG4gICAgICAuLi4oZGVwZW5kc09uLmxlbmd0aCA+IDAgPyB7IGRlcGVuZHNPbiB9IDoge30pLFxuICAgICAgLi4uKHZvbHVtZXMubGVuZ3RoID4gMCA/IHsgdm9sdW1lcyB9IDoge30pLFxuICAgIH07XG4gIH1cblxuICAvLyBFeHBsaWNpdCB3aXRoIHRoZSB0eXBlIGhlcmUgYmVjYXVzZSB0aGUgZGVjYW1lbGl6ZSBzdGVwIGFmdGVyIHRoaXMgd2lwZXNcbiAgLy8gb3V0IHR5cGVzLlxuICBjb25zdCBpbnB1dDogRG9ja2VyQ29tcG9zZUZpbGVTY2hlbWEgPSB7XG4gICAgdmVyc2lvbixcbiAgICBzZXJ2aWNlcyxcbiAgICAuLi4oT2JqZWN0LmtleXModm9sdW1lQ29uZmlnKS5sZW5ndGggPiAwID8geyB2b2x1bWVzOiB2b2x1bWVDb25maWcgfSA6IHt9KSxcbiAgfTtcblxuICAvLyBDaGFuZ2UgbW9zdCBrZXlzIHRvIHNuYWtlIGNhc2UuXG4gIHJldHVybiBkZWNhbWVsaXplS2V5c1JlY3Vyc2l2ZWx5KGlucHV0LCB7XG4gICAgc2hvdWxkRGVjYW1lbGl6ZTogc2hvdWxkRGVjYW1lbGl6ZURvY2tlckNvbXBvc2VLZXksXG4gICAgc2VwYXJhdG9yOiBcIl9cIixcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBgeyBba2V5XTogdmFsdWUgfWAgaWYgYHZhbHVlYCBpcyBkZWZpbmVkLCBvdGhlcndpc2UgcmV0dXJucyBge31gIHNvXG4gKiB0aGF0IG9iamVjdCBzcHJlYWRpbmcgY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGUgYSBwZWN1bGlhciBpbnRlcmZhY2UuXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gdmFsdWVcbiAqL1xuZnVuY3Rpb24gZ2V0T2JqZWN0V2l0aEtleUFuZFZhbHVlSWZWYWx1ZUlzRGVmaW5lZDxLIGV4dGVuZHMgc3RyaW5nLCBUPihcbiAga2V5OiBLLFxuICB2YWx1ZTogVFxuKTogeyBLOiBUIH0gfCB7fSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8geyBba2V5XTogdmFsdWUgfSA6IHt9O1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUga2V5IGF0IHRoZSBnaXZlbiBwYXRoIHNob3VsZCBiZSBkZWNhbWVsaXplZC5cbiAqIExhcmdlbHksIGFsbCBrZXlzIHNob3VsZCBiZSBzbmFrZSBjYXNlZC4gQnV0LCB0aGVyZSBhcmUgc29tZVxuICogZXhjZXB0aW9ucyBmb3IgdXNlci1wcm92aWRlZCBuYW1lcyBmb3Igc2VydmljZXMsIHZvbHVtZXMsIGFuZFxuICogZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICpcbiAqIEBwYXJhbSBwYXRoXG4gKi9cbmZ1bmN0aW9uIHNob3VsZERlY2FtZWxpemVEb2NrZXJDb21wb3NlS2V5KHBhdGg6IHN0cmluZ1tdKSB7XG4gIGNvbnN0IHBvdW5kUGF0aCA9IHBhdGguam9pbihcIiNcIik7XG5cbiAgLy8gRG9lcyBub3QgZGVjYW1lbGl6ZSB1c2VyJ3MgbmFtZXMuXG4gIC8vIHNlcnZpY2VzLm5hbWVoZXJlOlxuICAvLyB2b2x1bWVzLm5hbWVoZXJlOlxuICBpZiAoL14oc2VydmljZXN8dm9sdW1lcykjW14jXSskLy50ZXN0KHBvdW5kUGF0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBEb2VzIG5vdCBkZWNhbWVsaXplIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAvLyBzZXJ2aWNlcy5uYW1laGVyZS5lbnZpcm9ubWVudC4qXG4gIGlmICgvXnNlcnZpY2VzI1teI10rI2Vudmlyb25tZW50Iy8udGVzdChwb3VuZFBhdGgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRG9lcyBub3QgZGVjYW1lbGl6ZSBidWlsZCBhcmd1bWVudHNcbiAgLy8gc2VydmljZXMubmFtZWhlcmUuYnVpbGQuYXJncy4qXG4gIGlmICgvXnNlcnZpY2VzI1teI10rI2J1aWxkI2FyZ3MjLy50ZXN0KHBvdW5kUGF0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBPdGhlcndpc2UsIGxldCBpdCBhbGwgZGVjYW1lbGl6ZS5cbiAgcmV0dXJuIHRydWU7XG59XG4iXX0=
|
package/lib/file.d.ts
CHANGED
|
@@ -1,102 +1,73 @@
|
|
|
1
1
|
import { Component } from "./component";
|
|
2
2
|
import { Project } from "./project";
|
|
3
|
-
/**
|
|
4
|
-
* @experimental
|
|
5
|
-
*/
|
|
6
3
|
export interface FileBaseOptions {
|
|
7
4
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* By
|
|
5
|
+
* Indicates whether this file should be committed to git or ignored. By
|
|
11
6
|
* default, all generated files are committed and anti-tamper is used to
|
|
12
7
|
* protect against manual modifications.
|
|
13
8
|
*
|
|
14
9
|
* @default true
|
|
15
|
-
* @experimental
|
|
16
10
|
*/
|
|
17
11
|
readonly committed?: boolean;
|
|
18
12
|
/**
|
|
19
|
-
*
|
|
20
|
-
*
|
|
13
|
+
* Update the project's .gitignore file
|
|
21
14
|
* @default true
|
|
22
|
-
* @experimental
|
|
23
15
|
*/
|
|
24
16
|
readonly editGitignore?: boolean;
|
|
25
17
|
/**
|
|
26
|
-
*
|
|
18
|
+
* Whether the generated file should be readonly.
|
|
27
19
|
*
|
|
28
20
|
* @default true
|
|
29
|
-
* @experimental
|
|
30
21
|
*/
|
|
31
22
|
readonly readonly?: boolean;
|
|
32
23
|
/**
|
|
33
|
-
*
|
|
24
|
+
* Whether the generated file should be marked as executable.
|
|
34
25
|
*
|
|
35
26
|
* @default false
|
|
36
|
-
* @experimental
|
|
37
27
|
*/
|
|
38
28
|
readonly executable?: boolean;
|
|
39
29
|
/**
|
|
40
|
-
*
|
|
30
|
+
* Adds the projen marker to the file.
|
|
41
31
|
*
|
|
42
32
|
* @default - marker will be included as long as the project is not ejected
|
|
43
|
-
* @experimental
|
|
44
33
|
*/
|
|
45
34
|
readonly marker?: boolean;
|
|
46
35
|
}
|
|
47
|
-
/**
|
|
48
|
-
* @experimental
|
|
49
|
-
*/
|
|
50
36
|
export declare abstract class FileBase extends Component {
|
|
51
37
|
/**
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
* @experimental
|
|
38
|
+
* The file path, relative to the project root.
|
|
55
39
|
*/
|
|
56
40
|
readonly path: string;
|
|
57
41
|
/**
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
* @experimental
|
|
42
|
+
* Indicates if the file should be read-only or read-write.
|
|
61
43
|
*/
|
|
62
44
|
readonly: boolean;
|
|
63
45
|
/**
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
* @experimental
|
|
46
|
+
* Indicates if the file should be marked as executable
|
|
67
47
|
*/
|
|
68
48
|
executable: boolean;
|
|
69
49
|
/**
|
|
70
|
-
*
|
|
50
|
+
* The projen marker, used to identify files as projen-generated.
|
|
71
51
|
*
|
|
72
52
|
* Value is undefined if the project is being ejected.
|
|
73
|
-
*
|
|
74
|
-
* @experimental
|
|
75
53
|
*/
|
|
76
54
|
readonly marker: string | undefined;
|
|
77
55
|
/**
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
* @experimental
|
|
56
|
+
* The absolute path of this file.
|
|
81
57
|
*/
|
|
82
58
|
readonly absolutePath: string;
|
|
83
59
|
private _changed?;
|
|
84
|
-
/**
|
|
85
|
-
* @experimental
|
|
86
|
-
*/
|
|
87
60
|
constructor(project: Project, filePath: string, options?: FileBaseOptions);
|
|
88
61
|
/**
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
* @param resolver Call `resolver.resolve(obj)` on any objects in order to
|
|
62
|
+
* Implemented by derived classes and returns the contents of the file to
|
|
63
|
+
* emit.
|
|
64
|
+
* @param resolver Call `resolver.resolve(obj)` on any objects in order to
|
|
65
|
+
* resolve token functions.
|
|
92
66
|
* @returns the content to synthesize or undefined to skip the file
|
|
93
|
-
* @experimental
|
|
94
67
|
*/
|
|
95
68
|
protected abstract synthesizeContent(resolver: IResolver): string | undefined;
|
|
96
69
|
/**
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
* @experimental
|
|
70
|
+
* Writes the file to the project's output directory
|
|
100
71
|
*/
|
|
101
72
|
synthesize(): void;
|
|
102
73
|
/**
|
|
@@ -107,60 +78,42 @@ export declare abstract class FileBase extends Component {
|
|
|
107
78
|
*/
|
|
108
79
|
private checkForProjenMarker;
|
|
109
80
|
/**
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
* This property is
|
|
81
|
+
* Indicates if the file has been changed during synthesis. This property is
|
|
113
82
|
* only available in `postSynthesize()` hooks. If this is `undefined`, the
|
|
114
83
|
* file has not been synthesized yet.
|
|
115
|
-
*
|
|
116
|
-
* @experimental
|
|
117
84
|
*/
|
|
118
85
|
get changed(): boolean | undefined;
|
|
119
86
|
}
|
|
120
87
|
/**
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
* @experimental
|
|
88
|
+
* API for resolving tokens when synthesizing file content.
|
|
124
89
|
*/
|
|
125
90
|
export interface IResolver {
|
|
126
91
|
/**
|
|
127
|
-
*
|
|
128
|
-
*
|
|
129
|
-
* @param value The value to resolve
|
|
130
|
-
* @experimental
|
|
92
|
+
* Given a value (object/string/array/whatever, looks up any functions inside
|
|
93
|
+
* the object and returns an object where all functions are called.
|
|
94
|
+
* @param value The value to resolve
|
|
131
95
|
* @package options Resolve options
|
|
132
96
|
*/
|
|
133
97
|
resolve(value: any, options?: ResolveOptions): any;
|
|
134
98
|
}
|
|
135
99
|
/**
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
* @experimental
|
|
100
|
+
* Resolve options.
|
|
139
101
|
*/
|
|
140
102
|
export interface ResolveOptions {
|
|
141
103
|
/**
|
|
142
|
-
*
|
|
143
|
-
*
|
|
104
|
+
* Omits empty arrays and objects.
|
|
144
105
|
* @default false
|
|
145
|
-
* @experimental
|
|
146
106
|
*/
|
|
147
107
|
readonly omitEmpty?: boolean;
|
|
148
108
|
/**
|
|
149
|
-
*
|
|
150
|
-
*
|
|
109
|
+
* Context arguments.
|
|
151
110
|
* @default []
|
|
152
|
-
* @experimental
|
|
153
111
|
*/
|
|
154
112
|
readonly args?: any[];
|
|
155
113
|
}
|
|
156
|
-
/**
|
|
157
|
-
* @experimental
|
|
158
|
-
*/
|
|
159
114
|
export interface IResolvable {
|
|
160
115
|
/**
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
* @experimental
|
|
116
|
+
* Resolves and returns content.
|
|
164
117
|
*/
|
|
165
118
|
toJSON(): any;
|
|
166
119
|
}
|
package/lib/file.js
CHANGED
|
@@ -9,13 +9,7 @@ const _resolve_1 = require("./_resolve");
|
|
|
9
9
|
const common_1 = require("./common");
|
|
10
10
|
const component_1 = require("./component");
|
|
11
11
|
const util_1 = require("./util");
|
|
12
|
-
/**
|
|
13
|
-
* @experimental
|
|
14
|
-
*/
|
|
15
12
|
class FileBase extends component_1.Component {
|
|
16
|
-
/**
|
|
17
|
-
* @experimental
|
|
18
|
-
*/
|
|
19
13
|
constructor(project, filePath, options = {}) {
|
|
20
14
|
var _b, _c, _d, _e;
|
|
21
15
|
super(project);
|
|
@@ -49,9 +43,7 @@ class FileBase extends component_1.Component {
|
|
|
49
43
|
}
|
|
50
44
|
}
|
|
51
45
|
/**
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
* @experimental
|
|
46
|
+
* Writes the file to the project's output directory
|
|
55
47
|
*/
|
|
56
48
|
synthesize() {
|
|
57
49
|
const outdir = this.project.outdir;
|
|
@@ -102,13 +94,9 @@ class FileBase extends component_1.Component {
|
|
|
102
94
|
}
|
|
103
95
|
}
|
|
104
96
|
/**
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
* This property is
|
|
97
|
+
* Indicates if the file has been changed during synthesis. This property is
|
|
108
98
|
* only available in `postSynthesize()` hooks. If this is `undefined`, the
|
|
109
99
|
* file has not been synthesized yet.
|
|
110
|
-
*
|
|
111
|
-
* @experimental
|
|
112
100
|
*/
|
|
113
101
|
get changed() {
|
|
114
102
|
return this._changed;
|
|
@@ -116,5 +104,5 @@ class FileBase extends component_1.Component {
|
|
|
116
104
|
}
|
|
117
105
|
exports.FileBase = FileBase;
|
|
118
106
|
_a = JSII_RTTI_SYMBOL_1;
|
|
119
|
-
FileBase[_a] = { fqn: "projen.FileBase", version: "0.52.
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9maWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkJBQTZCO0FBQzdCLHVDQUFzQztBQUN0Qyx5Q0FBcUM7QUFDckMscUNBQW9EO0FBQ3BELDJDQUF3QztBQUV4QyxpQ0FBOEU7Ozs7QUFtQjlFLE1BQXNCLFFBQVMsU0FBUSxxQkFBUzs7OztJQWtCOUMsWUFDRSxPQUFnQixFQUNoQixRQUFnQixFQUNoQixVQUEyQixFQUFFOztRQUU3QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFZixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFDLE9BQU8sQ0FBQyxRQUFRLG1DQUFJLElBQUksQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxVQUFVLFNBQUcsT0FBTyxDQUFDLFVBQVUsbUNBQUksS0FBSyxDQUFDO1FBQzlDLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1FBRXJCLDBFQUEwRTtRQUMxRSxJQUFJLENBQUMsTUFBTTtZQUNULE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxLQUFLO2dCQUN6QyxDQUFDLENBQUMsU0FBUztnQkFDWCxDQUFDLENBQUMsR0FBRyxzQkFBYSxxQkFBcUIsa0JBQVMsd0JBQXdCLENBQUM7UUFFN0UsTUFBTSxXQUFXLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEMsTUFBTSxTQUFTLFNBQUcsT0FBTyxDQUFDLFNBQVMsbUNBQUksSUFBSSxDQUFDO1FBQzVDLElBQUksU0FBUyxJQUFJLFFBQVEsS0FBSyxnQkFBZ0IsRUFBRTtZQUM5QyxPQUFPLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQztTQUNoRDtRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFP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LFFBQVEsQ0FBQyxzQkFBYSxDQUFDLENBQUM7UUFDekQsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDdkIsa0JBQWtCLElBQUksQ0FBQyxJQUFJLG9DQUFvQyxDQUNoRSxDQUFDO1NBQ0g7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxjQUFjLEVBQUU7WUFDekMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUN2QixrQkFBa0IsSUFBSSxDQUFDLElBQUksOENBQThDLENBQzFFLENBQUM7U0FDSDtJQUNILENBQUM7Ozs7Ozs7Ozs7SUFHRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7O0FBcElILDRCQXFJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHJlbW92ZVN5bmMgfSBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwiLi9fcmVzb2x2ZVwiO1xuaW1wb3J0IHsgUFJPSkVOX01BUktFUiwgUFJPSkVOX1JDIH0gZnJvbSBcIi4vY29tbW9uXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRcIjtcbmltcG9ydCB7IFByb2plY3QgfSBmcm9tIFwiLi9wcm9qZWN0XCI7XG5pbXBvcnQgeyBpc0V4ZWN1dGFibGUsIGlzV3JpdGFibGUsIHRyeVJlYWRGaWxlU3luYywgd3JpdGVGaWxlIH0gZnJvbSBcIi4vdXRpbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVCYXNlT3B0aW9ucyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgY29tbWl0dGVkPzogYm9vbGVhbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGVkaXRHaXRpZ25vcmU/OiBib29sZWFuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgcmVhZG9ubHk/OiBib29sZWFuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGV4ZWN1dGFibGU/OiBib29sZWFuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgbWFya2VyPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZpbGVCYXNlIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgcmVhZG9ubHk6IGJvb2xlYW47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgZXhlY3V0YWJsZTogYm9vbGVhbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSBtYXJrZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSBhYnNvbHV0ZVBhdGg6IHN0cmluZztcblxuICBwcml2YXRlIF9jaGFuZ2VkPzogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm9qZWN0OiBQcm9qZWN0LFxuICAgIGZpbGVQYXRoOiBzdHJpbmcsXG4gICAgb3B0aW9uczogRmlsZUJhc2VPcHRpb25zID0ge31cbiAgKSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG5cbiAgICB0aGlzLnJlYWRvbmx5ID0gIXByb2plY3QuZWplY3RlZCAmJiAob3B0aW9ucy5yZWFkb25seSA/PyB0cnVlKTtcbiAgICB0aGlzLmV4ZWN1dGFibGUgPSBvcHRpb25zLmV4ZWN1dGFibGUgPz8gZmFsc2U7XG4gICAgdGhpcy5wYXRoID0gZmlsZVBhdGg7XG5cbiAgICAvLyBgbWFya2VyYCBpcyBlbXB0eSBpZiBwcm9qZWN0IGlzIGJlaW5nIGVqZWN0ZWQgb3IgaWYgZXhwbGljaXRseSBkaXNhYmxlZFxuICAgIHRoaXMubWFya2VyID1cbiAgICAgIHByb2plY3QuZWplY3RlZCB8fCBvcHRpb25zLm1hcmtlciA9PT0gZmFsc2VcbiAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgOiBgJHtQUk9KRU5fTUFSS0VSfS4gVG8gbW9kaWZ5LCBlZGl0ICR7UFJPSkVOX1JDfSBhbmQgcnVuIFwibnB4IHByb2plblwiLmA7XG5cbiAgICBjb25zdCBnbG9iUGF0dGVybiA9IGAvJHt0aGlzLnBhdGh9YDtcbiAgICBjb25zdCBjb21taXR0ZWQgPSBvcHRpb25zLmNvbW1pdHRlZCA/PyB0cnVlO1xuICAgIGlmIChjb21taXR0ZWQgJiYgZmlsZVBhdGggIT09IFwiLmdpdGF0dHJpYnV0ZXNcIikge1xuICAgICAgcHJvamVjdC5yb290LmFubm90YXRlR2VuZXJhdGVkKGAvJHtmaWxlUGF0aH1gKTtcbiAgICB9XG5cbiAgICB0aGlzLmFic29sdXRlUGF0aCA9IHBhdGgucmVzb2x2ZShwcm9qZWN0Lm91dGRpciwgZmlsZVBhdGgpO1xuXG4gICAgLy8gdmVyaWZ5IGZpbGUgcGF0aCBpcyB1bmlxdWUgd2l0aGluIHByb2plY3QgdHJlZVxuICAgIGNvbnN0IGV4aXN0aW5nID0gcHJvamVjdC5yb290LnRyeUZpbmRGaWxlKHRoaXMuYWJzb2x1dGVQYXRoKTtcbiAgICBpZiAoZXhpc3RpbmcgJiYgZXhpc3RpbmcgIT09IHRoaXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHRoZXJlIGlzIGFscmVhZHkgYSBmaWxlIHVuZGVyICR7cGF0aC5yZWxhdGl2ZShcbiAgICAgICAgICBwcm9qZWN0LnJvb3Qub3V0ZGlyLFxuICAgICAgICAgIHRoaXMuYWJzb2x1dGVQYXRoXG4gICAgICAgICl9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBlZGl0R2l0aWdub3JlID0gb3B0aW9ucy5lZGl0R2l0aWdub3JlID8/IHRydWU7XG4gICAgaWYgKGVkaXRHaXRpZ25vcmUpIHtcbiAgICAgIHRoaXMucHJvamVjdC5hZGRHaXRJZ25vcmUoYCR7Y29tbWl0dGVkID8gXCIhXCIgOiBcIlwifSR7Z2xvYlBhdHRlcm59YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdHRlZCAhPSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnXCJnaXRpZ25vcmVcIiBpcyBkaXNhYmxlZCwgc28gaXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byBzcGVjaWZ5IFwiY29tbWl0dGVkXCInXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBzeW50aGVzaXplQ29udGVudChyZXNvbHZlcjogSVJlc29sdmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHN5bnRoZXNpemUoKSB7XG4gICAgY29uc3Qgb3V0ZGlyID0gdGhpcy5wcm9qZWN0Lm91dGRpcjtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihvdXRkaXIsIHRoaXMucGF0aCk7XG4gICAgY29uc3QgcmVzb2x2ZXI6IElSZXNvbHZlciA9IHtcbiAgICAgIHJlc29sdmU6IChvYmosIG9wdGlvbnMpID0+IHJlc29sdmUob2JqLCBvcHRpb25zKSxcbiAgICB9O1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLnN5bnRoZXNpemVDb250ZW50KHJlc29sdmVyKTtcbiAgICBpZiAoY29udGVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyByZW1vdmUgZmlsZSAoaWYgZXhpc3RzKSBhbmQgc2tpcCByZXN0IG9mIHN5bnRoZXNpc1xuICAgICAgcmVtb3ZlU3luYyhmaWxlUGF0aCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgdGhlIGZpbGUgd2FzIGNoYW5nZWQuXG4gICAgY29uc3QgcHJldiA9IHRyeVJlYWRGaWxlU3luYyhmaWxlUGF0aCk7XG4gICAgY29uc3QgcHJldlJlYWRvbmx5ID0gIWlzV3JpdGFibGUoZmlsZVBhdGgpO1xuICAgIGNvbnN0IHByZXZFeGVjdXRhYmxlID0gaXNFeGVjdXRhYmxlKGZpbGVQYXRoKTtcbiAgICBpZiAoXG4gICAgICBwcmV2ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGNvbnRlbnQgPT09IHByZXYgJiZcbiAgICAgIHByZXZSZWFkb25seSA9PT0gdGhpcy5yZWFkb25seSAmJlxuICAgICAgcHJldkV4ZWN1dGFibGUgPT09IHRoaXMuZXhlY3V0YWJsZVxuICAgICkge1xuICAgICAgdGhpcy5wcm9qZWN0LmxvZ2dlci5kZWJ1Zyhgbm8gY2hhbmdlIGluICR7ZmlsZVBhdGh9YCk7XG4gICAgICB0aGlzLl9jaGFuZ2VkID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd3JpdGVGaWxlKGZpbGVQYXRoLCBjb250ZW50LCB7XG4gICAgICByZWFkb25seTogdGhpcy5yZWFkb25seSxcbiAgICAgIGV4ZWN1dGFibGU6IHRoaXMuZXhlY3V0YWJsZSxcbiAgICB9KTtcblxuICAgIHRoaXMuY2hlY2tGb3JQcm9qZW5NYXJrZXIoKTtcblxuICAgIHRoaXMuX2NoYW5nZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvciBkZWJ1Z2dpbmcsIGNoZWNrIHdoZXRoZXIgYSBmaWxlIHdhcyBpbmNvcnJlY3RseSBnZW5lcmF0ZWQgd2l0aFxuICAgKiBvciB3aXRob3V0IHRoZSBwcm9qZW4gbWFya2VyLiBUaGUgcHJvamVuIG1hcmtlciBkb2VzIG5vdCAqbmVlZCogdG8gYmVcbiAgICogaW5jbHVkZWQgb24gcHJvamVuLWdlbmVyYXRlZCBmaWxlcywgYnV0IGl0J3MgcmVjb21tZW5kZWQgc2luY2UgaXQgc2lnbmFsc1xuICAgKiB0aGF0IGl0IHByb2JhYmx5IHNob3VsZCBub3QgYmUgZWRpdGVkIGRpcmVjdGx5LlxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja0ZvclByb2plbk1hcmtlcigpIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbih0aGlzLnByb2plY3Qub3V0ZGlyLCB0aGlzLnBhdGgpO1xuICAgIGNvbnN0IGNvbnRlbnRzID0gdHJ5UmVhZEZpbGVTeW5jKGZpbGVQYXRoKTtcbiAgICBjb25zdCBjb250YWluc01hcmtlciA9IGNvbnRlbnRzPy5pbmNsdWRlcyhQUk9KRU5fTUFSS0VSKTtcbiAgICBpZiAodGhpcy5tYXJrZXIgJiYgIWNvbnRhaW5zTWFya2VyKSB7XG4gICAgICB0aGlzLnByb2plY3QubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgbm90ZTogZXhwZWN0ZWQgJHt0aGlzLnBhdGh9IHRvIGNvbnRhaW4gbWFya2VyIGJ1dCBmb3VuZCBub25lLmBcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5tYXJrZXIgJiYgY29udGFpbnNNYXJrZXIpIHtcbiAgICAgIHRoaXMucHJvamVjdC5sb2dnZXIuZGVidWcoXG4gICAgICAgIGBub3RlOiBleHBlY3RlZCAke3RoaXMucGF0aH0gdG8gbm90IGNvbnRhaW4gbWFya2VyIGJ1dCBmb3VuZCBvbmUgYW55d2F5LmBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgZ2V0IGNoYW5nZWQoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYW5nZWQ7XG4gIH1cbn1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGludGVyZmFjZSBJUmVzb2x2ZXIge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZXNvbHZlKHZhbHVlOiBhbnksIG9wdGlvbnM/OiBSZXNvbHZlT3B0aW9ucyk6IGFueTtcbn1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVPcHRpb25zIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IG9taXRFbXB0eT86IGJvb2xlYW47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgYXJncz86IGFueVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSZXNvbHZhYmxlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgdG9KU09OKCk6IGFueTtcbn1cbiJdfQ==
|
|
107
|
+
FileBase[_a] = { fqn: "projen.FileBase", version: "0.52.25" };
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9maWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkJBQTZCO0FBQzdCLHVDQUFzQztBQUN0Qyx5Q0FBcUM7QUFDckMscUNBQW9EO0FBQ3BELDJDQUF3QztBQUV4QyxpQ0FBOEU7QUF3QzlFLE1BQXNCLFFBQVMsU0FBUSxxQkFBUztJQThCOUMsWUFDRSxPQUFnQixFQUNoQixRQUFnQixFQUNoQixVQUEyQixFQUFFOztRQUU3QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFZixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFDLE9BQU8sQ0FBQyxRQUFRLG1DQUFJLElBQUksQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxVQUFVLFNBQUcsT0FBTyxDQUFDLFVBQVUsbUNBQUksS0FBSyxDQUFDO1FBQzlDLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1FBRXJCLDBFQUEwRTtRQUMxRSxJQUFJLENBQUMsTUFBTTtZQUNULE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxLQUFLO2dCQUN6QyxDQUFDLENBQUMsU0FBUztnQkFDWCxDQUFDLENBQUMsR0FBRyxzQkFBYSxxQkFBcUIsa0JBQVMsd0JBQXdCLENBQUM7UUFFN0UsTUFBTSxXQUFXLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEMsTUFBTSxTQUFTLFNBQUcsT0FBTyxDQUFDLFNBQVMsbUNBQUksSUFBSSxDQUFDO1FBQzVDLElBQUksU0FBUyxJQUFJLFFBQVEsS0FBSyxnQkFBZ0IsRUFBRTtZQUM5QyxPQUFPLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQztTQUNoRDtRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMs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LFFBQVEsQ0FBQyxzQkFBYSxDQUFDLENBQUM7UUFDekQsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDdkIsa0JBQWtCLElBQUksQ0FBQyxJQUFJLG9DQUFvQyxDQUNoRSxDQUFDO1NBQ0g7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxjQUFjLEVBQUU7WUFDekMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUN2QixrQkFBa0IsSUFBSSxDQUFDLElBQUksOENBQThDLENBQzFFLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDOztBQTVKSCw0QkE2SkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyByZW1vdmVTeW5jIH0gZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcIi4vX3Jlc29sdmVcIjtcbmltcG9ydCB7IFBST0pFTl9NQVJLRVIsIFBST0pFTl9SQyB9IGZyb20gXCIuL2NvbW1vblwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50XCI7XG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSBcIi4vcHJvamVjdFwiO1xuaW1wb3J0IHsgaXNFeGVjdXRhYmxlLCBpc1dyaXRhYmxlLCB0cnlSZWFkRmlsZVN5bmMsIHdyaXRlRmlsZSB9IGZyb20gXCIuL3V0aWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBGaWxlQmFzZU9wdGlvbnMge1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBmaWxlIHNob3VsZCBiZSBjb21taXR0ZWQgdG8gZ2l0IG9yIGlnbm9yZWQuIEJ5XG4gICAqIGRlZmF1bHQsIGFsbCBnZW5lcmF0ZWQgZmlsZXMgYXJlIGNvbW1pdHRlZCBhbmQgYW50aS10YW1wZXIgaXMgdXNlZCB0b1xuICAgKiBwcm90ZWN0IGFnYWluc3QgbWFudWFsIG1vZGlmaWNhdGlvbnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGNvbW1pdHRlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgcHJvamVjdCdzIC5naXRpZ25vcmUgZmlsZVxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBlZGl0R2l0aWdub3JlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZ2VuZXJhdGVkIGZpbGUgc2hvdWxkIGJlIHJlYWRvbmx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSByZWFkb25seT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGdlbmVyYXRlZCBmaWxlIHNob3VsZCBiZSBtYXJrZWQgYXMgZXhlY3V0YWJsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGV4ZWN1dGFibGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBZGRzIHRoZSBwcm9qZW4gbWFya2VyIHRvIHRoZSBmaWxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG1hcmtlciB3aWxsIGJlIGluY2x1ZGVkIGFzIGxvbmcgYXMgdGhlIHByb2plY3QgaXMgbm90IGVqZWN0ZWRcbiAgICovXG4gIHJlYWRvbmx5IG1hcmtlcj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBGaWxlQmFzZSBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBUaGUgZmlsZSBwYXRoLCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCByb290LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBmaWxlIHNob3VsZCBiZSByZWFkLW9ubHkgb3IgcmVhZC13cml0ZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seTogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBmaWxlIHNob3VsZCBiZSBtYXJrZWQgYXMgZXhlY3V0YWJsZVxuICAgKi9cbiAgcHVibGljIGV4ZWN1dGFibGU6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBwcm9qZW4gbWFya2VyLCB1c2VkIHRvIGlkZW50aWZ5IGZpbGVzIGFzIHByb2plbi1nZW5lcmF0ZWQuXG4gICAqXG4gICAqIFZhbHVlIGlzIHVuZGVmaW5lZCBpZiB0aGUgcHJvamVjdCBpcyBiZWluZyBlamVjdGVkLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1hcmtlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGlzIGZpbGUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWJzb2x1dGVQYXRoOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBfY2hhbmdlZD86IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvamVjdDogUHJvamVjdCxcbiAgICBmaWxlUGF0aDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IEZpbGVCYXNlT3B0aW9ucyA9IHt9XG4gICkge1xuICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgdGhpcy5yZWFkb25seSA9ICFwcm9qZWN0LmVqZWN0ZWQgJiYgKG9wdGlvbnMucmVhZG9ubHkgPz8gdHJ1ZSk7XG4gICAgdGhpcy5leGVjdXRhYmxlID0gb3B0aW9ucy5leGVjdXRhYmxlID8/IGZhbHNlO1xuICAgIHRoaXMucGF0aCA9IGZpbGVQYXRoO1xuXG4gICAgLy8gYG1hcmtlcmAgaXMgZW1wdHkgaWYgcHJvamVjdCBpcyBiZWluZyBlamVjdGVkIG9yIGlmIGV4cGxpY2l0bHkgZGlzYWJsZWRcbiAgICB0aGlzLm1hcmtlciA9XG4gICAgICBwcm9qZWN0LmVqZWN0ZWQgfHwgb3B0aW9ucy5tYXJrZXIgPT09IGZhbHNlXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogYCR7UFJPSkVOX01BUktFUn0uIFRvIG1vZGlmeSwgZWRpdCAke1BST0pFTl9SQ30gYW5kIHJ1biBcIm5weCBwcm9qZW5cIi5gO1xuXG4gICAgY29uc3QgZ2xvYlBhdHRlcm4gPSBgLyR7dGhpcy5wYXRofWA7XG4gICAgY29uc3QgY29tbWl0dGVkID0gb3B0aW9ucy5jb21taXR0ZWQgPz8gdHJ1ZTtcbiAgICBpZiAoY29tbWl0dGVkICYmIGZpbGVQYXRoICE9PSBcIi5naXRhdHRyaWJ1dGVzXCIpIHtcbiAgICAgIHByb2plY3Qucm9vdC5hbm5vdGF0ZUdlbmVyYXRlZChgLyR7ZmlsZVBhdGh9YCk7XG4gICAgfVxuXG4gICAgdGhpcy5hYnNvbHV0ZVBhdGggPSBwYXRoLnJlc29sdmUocHJvamVjdC5vdXRkaXIsIGZpbGVQYXRoKTtcblxuICAgIC8vIHZlcmlmeSBmaWxlIHBhdGggaXMgdW5pcXVlIHdpdGhpbiBwcm9qZWN0IHRyZWVcbiAgICBjb25zdCBleGlzdGluZyA9IHByb2plY3Qucm9vdC50cnlGaW5kRmlsZSh0aGlzLmFic29sdXRlUGF0aCk7XG4gICAgaWYgKGV4aXN0aW5nICYmIGV4aXN0aW5nICE9PSB0aGlzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGB0aGVyZSBpcyBhbHJlYWR5IGEgZmlsZSB1bmRlciAke3BhdGgucmVsYXRpdmUoXG4gICAgICAgICAgcHJvamVjdC5yb290Lm91dGRpcixcbiAgICAgICAgICB0aGlzLmFic29sdXRlUGF0aFxuICAgICAgICApfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZWRpdEdpdGlnbm9yZSA9IG9wdGlvbnMuZWRpdEdpdGlnbm9yZSA/PyB0cnVlO1xuICAgIGlmIChlZGl0R2l0aWdub3JlKSB7XG4gICAgICB0aGlzLnByb2plY3QuYWRkR2l0SWdub3JlKGAke2NvbW1pdHRlZCA/IFwiIVwiIDogXCJcIn0ke2dsb2JQYXR0ZXJufWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9ucy5jb21taXR0ZWQgIT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1wiZ2l0aWdub3JlXCIgaXMgZGlzYWJsZWQsIHNvIGl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgdG8gc3BlY2lmeSBcImNvbW1pdHRlZFwiJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXMgYW5kIHJldHVybnMgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIHRvXG4gICAqIGVtaXQuXG4gICAqIEBwYXJhbSByZXNvbHZlciBDYWxsIGByZXNvbHZlci5yZXNvbHZlKG9iailgIG9uIGFueSBvYmplY3RzIGluIG9yZGVyIHRvXG4gICAqIHJlc29sdmUgdG9rZW4gZnVuY3Rpb25zLlxuICAgKiBAcmV0dXJucyB0aGUgY29udGVudCB0byBzeW50aGVzaXplIG9yIHVuZGVmaW5lZCB0byBza2lwIHRoZSBmaWxlXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc3ludGhlc2l6ZUNvbnRlbnQocmVzb2x2ZXI6IElSZXNvbHZlcik6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV3JpdGVzIHRoZSBmaWxlIHRvIHRoZSBwcm9qZWN0J3Mgb3V0cHV0IGRpcmVjdG9yeVxuICAgKi9cbiAgcHVibGljIHN5bnRoZXNpemUoKSB7XG4gICAgY29uc3Qgb3V0ZGlyID0gdGhpcy5wcm9qZWN0Lm91dGRpcjtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihvdXRkaXIsIHRoaXMucGF0aCk7XG4gICAgY29uc3QgcmVzb2x2ZXI6IElSZXNvbHZlciA9IHtcbiAgICAgIHJlc29sdmU6IChvYmosIG9wdGlvbnMpID0+IHJlc29sdmUob2JqLCBvcHRpb25zKSxcbiAgICB9O1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLnN5bnRoZXNpemVDb250ZW50KHJlc29sdmVyKTtcbiAgICBpZiAoY29udGVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyByZW1vdmUgZmlsZSAoaWYgZXhpc3RzKSBhbmQgc2tpcCByZXN0IG9mIHN5bnRoZXNpc1xuICAgICAgcmVtb3ZlU3luYyhmaWxlUGF0aCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgdGhlIGZpbGUgd2FzIGNoYW5nZWQuXG4gICAgY29uc3QgcHJldiA9IHRyeVJlYWRGaWxlU3luYyhmaWxlUGF0aCk7XG4gICAgY29uc3QgcHJldlJlYWRvbmx5ID0gIWlzV3JpdGFibGUoZmlsZVBhdGgpO1xuICAgIGNvbnN0IHByZXZFeGVjdXRhYmxlID0gaXNFeGVjdXRhYmxlKGZpbGVQYXRoKTtcbiAgICBpZiAoXG4gICAgICBwcmV2ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGNvbnRlbnQgPT09IHByZXYgJiZcbiAgICAgIHByZXZSZWFkb25seSA9PT0gdGhpcy5yZWFkb25seSAmJlxuICAgICAgcHJldkV4ZWN1dGFibGUgPT09IHRoaXMuZXhlY3V0YWJsZVxuICAgICkge1xuICAgICAgdGhpcy5wcm9qZWN0LmxvZ2dlci5kZWJ1Zyhgbm8gY2hhbmdlIGluICR7ZmlsZVBhdGh9YCk7XG4gICAgICB0aGlzLl9jaGFuZ2VkID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd3JpdGVGaWxlKGZpbGVQYXRoLCBjb250ZW50LCB7XG4gICAgICByZWFkb25seTogdGhpcy5yZWFkb25seSxcbiAgICAgIGV4ZWN1dGFibGU6IHRoaXMuZXhlY3V0YWJsZSxcbiAgICB9KTtcblxuICAgIHRoaXMuY2hlY2tGb3JQcm9qZW5NYXJrZXIoKTtcblxuICAgIHRoaXMuX2NoYW5nZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvciBkZWJ1Z2dpbmcsIGNoZWNrIHdoZXRoZXIgYSBmaWxlIHdhcyBpbmNvcnJlY3RseSBnZW5lcmF0ZWQgd2l0aFxuICAgKiBvciB3aXRob3V0IHRoZSBwcm9qZW4gbWFya2VyLiBUaGUgcHJvamVuIG1hcmtlciBkb2VzIG5vdCAqbmVlZCogdG8gYmVcbiAgICogaW5jbHVkZWQgb24gcHJvamVuLWdlbmVyYXRlZCBmaWxlcywgYnV0IGl0J3MgcmVjb21tZW5kZWQgc2luY2UgaXQgc2lnbmFsc1xuICAgKiB0aGF0IGl0IHByb2JhYmx5IHNob3VsZCBub3QgYmUgZWRpdGVkIGRpcmVjdGx5LlxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja0ZvclByb2plbk1hcmtlcigpIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbih0aGlzLnByb2plY3Qub3V0ZGlyLCB0aGlzLnBhdGgpO1xuICAgIGNvbnN0IGNvbnRlbnRzID0gdHJ5UmVhZEZpbGVTeW5jKGZpbGVQYXRoKTtcbiAgICBjb25zdCBjb250YWluc01hcmtlciA9IGNvbnRlbnRzPy5pbmNsdWRlcyhQUk9KRU5fTUFSS0VSKTtcbiAgICBpZiAodGhpcy5tYXJrZXIgJiYgIWNvbnRhaW5zTWFya2VyKSB7XG4gICAgICB0aGlzLnByb2plY3QubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgbm90ZTogZXhwZWN0ZWQgJHt0aGlzLnBhdGh9IHRvIGNvbnRhaW4gbWFya2VyIGJ1dCBmb3VuZCBub25lLmBcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5tYXJrZXIgJiYgY29udGFpbnNNYXJrZXIpIHtcbiAgICAgIHRoaXMucHJvamVjdC5sb2dnZXIuZGVidWcoXG4gICAgICAgIGBub3RlOiBleHBlY3RlZCAke3RoaXMucGF0aH0gdG8gbm90IGNvbnRhaW4gbWFya2VyIGJ1dCBmb3VuZCBvbmUgYW55d2F5LmBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIGR1cmluZyBzeW50aGVzaXMuIFRoaXMgcHJvcGVydHkgaXNcbiAgICogb25seSBhdmFpbGFibGUgaW4gYHBvc3RTeW50aGVzaXplKClgIGhvb2tzLiBJZiB0aGlzIGlzIGB1bmRlZmluZWRgLCB0aGVcbiAgICogZmlsZSBoYXMgbm90IGJlZW4gc3ludGhlc2l6ZWQgeWV0LlxuICAgKi9cbiAgcHVibGljIGdldCBjaGFuZ2VkKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9jaGFuZ2VkO1xuICB9XG59XG5cbi8qKlxuICogQVBJIGZvciByZXNvbHZpbmcgdG9rZW5zIHdoZW4gc3ludGhlc2l6aW5nIGZpbGUgY29udGVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUmVzb2x2ZXIge1xuICAvKipcbiAgICogR2l2ZW4gYSB2YWx1ZSAob2JqZWN0L3N0cmluZy9hcnJheS93aGF0ZXZlciwgbG9va3MgdXAgYW55IGZ1bmN0aW9ucyBpbnNpZGVcbiAgICogdGhlIG9iamVjdCBhbmQgcmV0dXJucyBhbiBvYmplY3Qgd2hlcmUgYWxsIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHJlc29sdmVcbiAgICogQHBhY2thZ2Ugb3B0aW9ucyBSZXNvbHZlIG9wdGlvbnNcbiAgICovXG4gIHJlc29sdmUodmFsdWU6IGFueSwgb3B0aW9ucz86IFJlc29sdmVPcHRpb25zKTogYW55O1xufVxuXG4vKipcbiAqIFJlc29sdmUgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBPbWl0cyBlbXB0eSBhcnJheXMgYW5kIG9iamVjdHMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBvbWl0RW1wdHk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb250ZXh0IGFyZ3VtZW50cy5cbiAgICogQGRlZmF1bHQgW11cbiAgICovXG4gIHJlYWRvbmx5IGFyZ3M/OiBhbnlbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUmVzb2x2YWJsZSB7XG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhbmQgcmV0dXJucyBjb250ZW50LlxuICAgKi9cbiAgdG9KU09OKCk6IGFueTtcbn1cbiJdfQ==
|