@mnaoumov/typescript-dev-toolkit 3.7.3 → 3.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/cjs/docs-site/api-doc-documented-files.cjs +3 -3
- package/dist/lib/cjs/docs-site/api-doc-documented-files.d.cts +3 -2
- package/dist/lib/cjs/docs-site/api-doc-page-generation.cjs +5 -2
- package/dist/lib/cjs/docs-site/api-doc-settings.cjs +1 -1
- package/dist/lib/cjs/docs-site/api-doc-settings.d.cts +66 -1
- package/dist/lib/cjs/docs-site/api-doc-source-processing.cjs +9 -4
- package/dist/lib/cjs/docs-site/api-doc-source-processing.d.cts +5 -3
- package/dist/lib/cjs/docs-site/api-doc-text-utils.cjs +17 -5
- package/dist/lib/cjs/docs-site/api-doc-text-utils.d.cts +3 -3
- package/dist/lib/cjs/docs-site/api-docs.cjs +2 -2
- package/dist/lib/cjs/docs-site/docs-site-config.cjs +9 -1
- package/dist/lib/cjs/docs-site/docs-site-config.d.cts +29 -1
- package/dist/lib/cjs/upstream-sync.cjs +35 -8
- package/dist/lib/cjs/upstream-sync.d.cts +9 -0
- package/dist/lib/cjs/version.cjs +32 -4
- package/dist/lib/cjs/version.d.cts +36 -1
- package/dist/lib/esm/docs-site/api-doc-documented-files.d.mts +3 -2
- package/dist/lib/esm/docs-site/api-doc-documented-files.mjs +3 -3
- package/dist/lib/esm/docs-site/api-doc-page-generation.mjs +5 -2
- package/dist/lib/esm/docs-site/api-doc-settings.d.mts +66 -1
- package/dist/lib/esm/docs-site/api-doc-settings.mjs +1 -1
- package/dist/lib/esm/docs-site/api-doc-source-processing.d.mts +5 -3
- package/dist/lib/esm/docs-site/api-doc-source-processing.mjs +9 -4
- package/dist/lib/esm/docs-site/api-doc-text-utils.d.mts +3 -3
- package/dist/lib/esm/docs-site/api-doc-text-utils.mjs +17 -5
- package/dist/lib/esm/docs-site/api-docs.mjs +2 -2
- package/dist/lib/esm/docs-site/docs-site-config.d.mts +29 -1
- package/dist/lib/esm/docs-site/docs-site-config.mjs +9 -1
- package/dist/lib/esm/upstream-sync.d.mts +9 -0
- package/dist/lib/esm/upstream-sync.mjs +34 -8
- package/dist/lib/esm/version.d.mts +36 -1
- package/dist/lib/esm/version.mjs +30 -4
- package/package.json +1 -1
|
@@ -11,7 +11,14 @@ import { matchesGlob } from "node:path";
|
|
|
11
11
|
const COMPARE_FILE_LIMIT = 300;
|
|
12
12
|
const SHORT_SHA_LENGTH = 12;
|
|
13
13
|
const OUTPUT_TAIL_LINES = 60;
|
|
14
|
+
const FAILURE_LINE_LIMIT = 20;
|
|
14
15
|
const JSON_INDENT_SPACES = 2;
|
|
16
|
+
const ESC = String.raw`(?:\u001B|\^\[)`;
|
|
17
|
+
const TERMINAL_CONTROL_REG_EXP = new RegExp(
|
|
18
|
+
String.raw`${ESC}\[[0-?]*[ -/]*[@-~]|${ESC}\][^\u0007\u001B^]*(?:\u0007|\^G|${ESC}\\)|\u001B[@-Z\\-_]`,
|
|
19
|
+
"g"
|
|
20
|
+
);
|
|
21
|
+
const FAILURE_LINE_REG_EXP = /step-failed|\bfail(?:s|ed|ure|ing)?\b|\berror\b|\bnot found\b|\bERR!|[✗×]/i;
|
|
15
22
|
function buildPrBody(plan, steps, diffStat) {
|
|
16
23
|
const { entry, head, pin } = plan.status;
|
|
17
24
|
const source = isGitUpstream(entry) ? `\`${entry.repo}@${entry.ref}\`` : `npm \`${entry.npm}@${entry.tag ?? "latest"}\``;
|
|
@@ -37,12 +44,15 @@ function buildPrBody(plan, steps, diffStat) {
|
|
|
37
44
|
}
|
|
38
45
|
}
|
|
39
46
|
if (diffStat !== null) {
|
|
40
|
-
lines.push("### Generated changes", "", "```text", diffStat.trimEnd(), "```", "");
|
|
47
|
+
lines.push("### Generated changes", "", "```text", cleanCommandOutput(diffStat).trimEnd(), "```", "");
|
|
41
48
|
}
|
|
42
49
|
lines.push("This PR was opened by the upstream-sync job and is never merged automatically.");
|
|
43
50
|
return `${lines.join("\n")}
|
|
44
51
|
`;
|
|
45
52
|
}
|
|
53
|
+
function cleanCommandOutput(output) {
|
|
54
|
+
return output.replaceAll(TERMINAL_CONTROL_REG_EXP, "").replaceAll("\r\n", "\n").split("\n").map((line) => toLastLineState(line)).join("\n");
|
|
55
|
+
}
|
|
46
56
|
async function compareWithUpstream(entry, dependencies) {
|
|
47
57
|
if (!isGitUpstream(entry)) {
|
|
48
58
|
const tag = entry.tag ?? "latest";
|
|
@@ -151,7 +161,7 @@ function writePin(configPath, status) {
|
|
|
151
161
|
}
|
|
152
162
|
function applyPlan(plan, config, options, dependencies) {
|
|
153
163
|
const { entry } = plan.status;
|
|
154
|
-
const env = { UPSTREAM_NAME: entry.name, UPSTREAM_TARGET: plan.status.head };
|
|
164
|
+
const env = { FORCE_COLOR: "0", NO_COLOR: "1", UPSTREAM_NAME: entry.name, UPSTREAM_TARGET: plan.status.head };
|
|
155
165
|
const handler = { command: entry.handler, result: dependencies.shell(entry.handler, env) };
|
|
156
166
|
writePin(options.configPath, plan.status);
|
|
157
167
|
const verifyCommand = entry.verify ?? config.verify;
|
|
@@ -160,18 +170,22 @@ function applyPlan(plan, config, options, dependencies) {
|
|
|
160
170
|
execOrThrow(dependencies, "git", ["add", "--all"]);
|
|
161
171
|
execOrThrow(dependencies, "git", ["commit", "--no-verify", "--message", plan.title]);
|
|
162
172
|
const diffStat = execOrThrow(dependencies, "git", ["diff", "--stat", "HEAD~1", "HEAD"]);
|
|
173
|
+
const body = buildPrBody(plan, { handler, verify }, diffStat);
|
|
163
174
|
const isRemoteBranch = dependencies.exec("git", ["ls-remote", "--exit-code", "--heads", "origin", plan.branch]).exitCode === 0;
|
|
164
175
|
if (isRemoteBranch) {
|
|
165
176
|
execOrThrow(dependencies, "git", ["fetch", "origin", plan.branch]);
|
|
166
177
|
if (dependencies.exec("git", ["diff", "--quiet", "FETCH_HEAD", "HEAD"]).exitCode === 0) {
|
|
167
|
-
dependencies
|
|
178
|
+
const open = findOpenPr(dependencies, plan.branch);
|
|
179
|
+
if (open !== null) {
|
|
180
|
+
execOrThrow(dependencies, "gh", ["pr", "edit", open, "--body", body]);
|
|
181
|
+
}
|
|
182
|
+
dependencies.log(`${entry.name}: ${plan.branch} already holds this result; nothing pushed${open === null ? "" : `, PR #${open}'s body rewritten`}.`);
|
|
168
183
|
return { name: entry.name, outcome: "unchanged" };
|
|
169
184
|
}
|
|
170
185
|
}
|
|
171
186
|
execOrThrow(dependencies, "git", ["push", "--force", "origin", `HEAD:refs/heads/${plan.branch}`]);
|
|
172
|
-
const
|
|
173
|
-
|
|
174
|
-
if (existing !== "" && existing !== "null") {
|
|
187
|
+
const existing = findOpenPr(dependencies, plan.branch);
|
|
188
|
+
if (existing !== null) {
|
|
175
189
|
const prNumber2 = Number(existing);
|
|
176
190
|
execOrThrow(dependencies, "gh", ["pr", "edit", existing, "--title", plan.title, "--body", body]);
|
|
177
191
|
execOrThrow(dependencies, "gh", isFailed ? ["pr", "ready", existing, "--undo"] : ["pr", "ready", existing]);
|
|
@@ -197,12 +211,15 @@ function applyPlan(plan, config, options, dependencies) {
|
|
|
197
211
|
}
|
|
198
212
|
function describeStep(heading, step) {
|
|
199
213
|
const isPassed = step.result.exitCode === 0;
|
|
200
|
-
const
|
|
214
|
+
const outputLines = cleanCommandOutput(step.result.output).trimEnd().split("\n");
|
|
215
|
+
const tail = outputLines.slice(-OUTPUT_TAIL_LINES).join("\n");
|
|
216
|
+
const failureLines = isPassed ? [] : outputLines.filter((line) => FAILURE_LINE_REG_EXP.test(line)).slice(0, FAILURE_LINE_LIMIT);
|
|
201
217
|
return [
|
|
202
218
|
`### ${heading}`,
|
|
203
219
|
"",
|
|
204
220
|
`\`${step.command}\`: ${isPassed ? "passed" : `**FAILED** (exit ${String(step.result.exitCode)})`}.`,
|
|
205
221
|
"",
|
|
222
|
+
...failureLines.length === 0 ? [] : ["Lines reporting the failure:", "", "```text", ...failureLines, "```", ""],
|
|
206
223
|
isPassed ? "<details><summary>Output</summary>" : "<details open><summary>Output</summary>",
|
|
207
224
|
"",
|
|
208
225
|
"```text",
|
|
@@ -220,6 +237,10 @@ function execOrThrow(dependencies, file, arguments_) {
|
|
|
220
237
|
}
|
|
221
238
|
return result.output;
|
|
222
239
|
}
|
|
240
|
+
function findOpenPr(dependencies, branch) {
|
|
241
|
+
const number = execOrThrow(dependencies, "gh", ["pr", "list", "--head", branch, "--state", "open", "--json", "number", "--jq", ".[0].number"]).trim();
|
|
242
|
+
return number === "" || number === "null" ? null : number;
|
|
243
|
+
}
|
|
223
244
|
function isGitUpstream(entry) {
|
|
224
245
|
return "repo" in entry;
|
|
225
246
|
}
|
|
@@ -257,12 +278,17 @@ ${dirty}`);
|
|
|
257
278
|
dependencies.exec("git", ["branch", "--delete", "--force", plan.branch]);
|
|
258
279
|
}
|
|
259
280
|
}
|
|
281
|
+
function toLastLineState(line) {
|
|
282
|
+
const states = line.replace(/\r+$/, "");
|
|
283
|
+
return states.slice(states.lastIndexOf("\r") + 1);
|
|
284
|
+
}
|
|
260
285
|
export {
|
|
261
286
|
buildPrBody,
|
|
287
|
+
cleanCommandOutput,
|
|
262
288
|
compareWithUpstream,
|
|
263
289
|
parseUpstreamsConfig,
|
|
264
290
|
planSync,
|
|
265
291
|
syncUpstreams,
|
|
266
292
|
writePin
|
|
267
293
|
};
|
|
268
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3Vwc3RyZWFtLXN5bmMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBXYXRjaGVzIHRoZSB1cHN0cmVhbXMgYSByZXBvc2l0b3J5IG1pcnJvcnMgYW5kIG9wZW5zIG9uZSB1cGRhdGUgUFIgcGVyIHVwc3RyZWFtIHRoYXQgbW92ZWQuXG4gKlxuICogRXZlcnl0aGluZyBoZXJlIGlzIGRyaXZlbiBieSBgdXBzdHJlYW1zLmpzb25gIGFuZCB0aGUgaGFuZGxlciBjb21tYW5kcyBpdCBuYW1lcywgc28gYW55IHJlcG9zaXRvcnkgdGhhdCB2ZW5kb3JzXG4gKiB1cHN0cmVhbSBjb2RlIGNhbiB1c2UgaXQ6IHRocm91Z2ggdGhlIGBzeW5jLXVwc3RyZWFtc2AgYmluLCBvciB0aGUgcmV1c2FibGUgYHN5bmMtdXBzdHJlYW1zLnltbGAgd29ya2Zsb3cuXG4gKi9cblxuaW1wb3J0IHtcbiAgcmVhZEZpbGVTeW5jLFxuICB3cml0ZUZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgbWF0Y2hlc0dsb2IgfSBmcm9tICdub2RlOnBhdGgnO1xuXG4vKipcbiAqIFdoYXQgYSBjb21tYW5kIHByaW50ZWQgYW5kIGhvdyBpdCBleGl0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZFJlc3VsdCB7XG4gIHJlYWRvbmx5IGV4aXRDb2RlOiBudW1iZXI7XG4gIHJlYWRvbmx5IG91dHB1dDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIHVwc3RyZWFtIGZvbGxvd2VkIG9uIGEgR2l0SHViIGJyYW5jaCBvciB0YWcsIHBpbm5lZCB0byBhIGNvbW1pdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHaXRVcHN0cmVhbUVudHJ5IHtcbiAgLyoqXG4gICAqIFRoZSBwaW5uZWQgY29tbWl0OiB0aGUgbGFzdCB1cHN0cmVhbSBzdGF0ZSB0aGUgaGFuZGxlciB3YXMgcnVuIGFnYWluc3QuXG4gICAqL1xuICBjb21taXQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBzaGVsbCBjb21tYW5kIHRoYXQgdHVybnMgYSBuZXdlciB1cHN0cmVhbSBzdGF0ZSBpbnRvIGNoYW5nZXMgaW4gdGhpcyByZXBvc2l0b3J5LlxuICAgKi9cbiAgaGFuZGxlcjogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcGF0aHMgd2F0Y2hlZCB1cHN0cmVhbSwgYXMgZ2xvYnMgcmVsYXRpdmUgdG8gdGhlIHJlcG9zaXRvcnkgcm9vdC4gQSBtb3ZlIHRoYXQgdG91Y2hlcyBub25lIG9mIHRoZW0gb3BlbnMgbm8gUFIuXG4gICAqL1xuICBwYXRoczogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKlxuICAgKiBUaGUgYnJhbmNoIG9yIHRhZyBmb2xsb3dlZC5cbiAgICovXG4gIHJlZjogc3RyaW5nO1xuICAvKipcbiAgICogYDxvd25lcj4vPHJlcG8+YCBvbiBHaXRIdWIuXG4gICAqL1xuICByZXBvOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc2hlbGwgY29tbWFuZCB0aGF0IGNoZWNrcyB0aGUgaGFuZGxlcidzIHJlc3VsdC4gT3ZlcnJpZGVzIHRoZSBmaWxlJ3MgdG9wLWxldmVsIGB2ZXJpZnlgLlxuICAgKi9cbiAgdmVyaWZ5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIHVwc3RyZWFtIGZvbGxvd2VkIGFzIGFuIG5wbSBwYWNrYWdlJ3MgZGlzdC10YWcsIHBpbm5lZCB0byBhIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTnBtVXBzdHJlYW1FbnRyeSB7XG4gIGhhbmRsZXI6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHBhY2thZ2UgbmFtZS5cbiAgICovXG4gIG5wbTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGRpc3QtdGFnIGZvbGxvd2VkLiBgbGF0ZXN0YCB3aGVuIGFic2VudC5cbiAgICovXG4gIHRhZz86IHN0cmluZztcbiAgdmVyaWZ5Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHBpbm5lZCB2ZXJzaW9uLlxuICAgKi9cbiAgdmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2ZXJ5dGhpbmcgdGhlIHN5bmMgZG9lcyB0byB0aGUgb3V0c2lkZSB3b3JsZCwgc28gYSB0ZXN0IGNhbiBzdGFuZCBhIGZpeHR1cmUgaW4gZm9yIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5bmNEZXBlbmRlbmNpZXMge1xuICAvKipcbiAgICogUnVucyBhbiBleGVjdXRhYmxlIHdpdGggYXJndW1lbnRzIGFuZCBubyBzaGVsbC5cbiAgICovXG4gIGV4ZWM6IChmaWxlOiBzdHJpbmcsIGFyZ3VtZW50c186IHJlYWRvbmx5IHN0cmluZ1tdLCBlbnY/OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PikgPT4gQ29tbWFuZFJlc3VsdDtcbiAgLyoqXG4gICAqIEdFVHMgYSBVUkwgYW5kIHBhcnNlcyB0aGUgSlNPTiBpdCByZXR1cm5zLCB0aHJvd2luZyBvbiBhbiBIVFRQIGVycm9yLlxuICAgKi9cbiAgZmV0Y2hKc29uOiAodXJsOiBzdHJpbmcpID0+IFByb21pc2U8dW5rbm93bj47XG4gIGxvZzogKHRleHQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFJ1bnMgYSBjb21tYW5kIGxpbmUgdGhyb3VnaCB0aGUgc2hlbGw6IGEgaGFuZGxlciBvciBhIHZlcmlmeSBjb21tYW5kLlxuICAgKi9cbiAgc2hlbGw6IChjb21tYW5kOiBzdHJpbmcsIGVudj86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KSA9PiBDb21tYW5kUmVzdWx0O1xufVxuXG4vKipcbiAqIFRoZSBQUiBhbiB1cHN0cmVhbSBtb3ZlIGFza3MgZm9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5bmNQbGFuIHtcbiAgYnJhbmNoOiBzdHJpbmc7XG4gIHN0YXR1czogVXBzdHJlYW1TdGF0dXM7XG4gIHRpdGxlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogV2hhdCBoYXBwZW5lZCB0byBvbmUgZW50cnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3luY1Jlc3VsdCB7XG4gIC8qKlxuICAgKiBTZXQgd2hlbiBjaGVja2luZyBvciBhcHBseWluZyB0aHJldzogdGhlIGpvYiByZXBvcnRzIGl0IGFuZCBtb3ZlcyBvbiB0byB0aGUgbmV4dCBlbnRyeS5cbiAgICovXG4gIHJlYWRvbmx5IGVycm9yPzogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBgcGxhbm5lZGAgaW4gYSBkcnkgcnVuLCBgb3BlbmVkYC9gdXBkYXRlZGAgd2hlbiBhIFBSIHdhcyBwdXNoZWQsIGB1bmNoYW5nZWRgIHdoZW4gdGhlIGJyYW5jaCBhbHJlYWR5IGhlbGQgdGhpcyByZXN1bHQuXG4gICAqL1xuICByZWFkb25seSBvdXRjb21lOiAnY3VycmVudCcgfCAnZXJyb3InIHwgJ29wZW5lZCcgfCAncGxhbm5lZCcgfCAndW5jaGFuZ2VkJyB8ICd1bndhdGNoZWQnIHwgJ3VwZGF0ZWQnO1xuICByZWFkb25seSBwck51bWJlcj86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBXaGF0IHtAbGluayBzeW5jVXBzdHJlYW1zfSBzeW5jcywgYW5kIGhvdy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTeW5jVXBzdHJlYW1zT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYnJhbmNoIGVhY2ggUFIgdGFyZ2V0cyBhbmQgZWFjaCB1cGRhdGUgYnJhbmNoIGlzIGN1dCBmcm9tLlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZUJyYW5jaDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHBhdGggdG8gYHVwc3RyZWFtcy5qc29uYCwgd2hpY2ggdGhlIHN5bmMgdXBkYXRlcyB0aGUgcGluIGluLlxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlnUGF0aDogc3RyaW5nO1xuICAvKipcbiAgICogUGxhbiBhbmQgcHJpbnQgZXZlcnkgUFIsIGFuZCBjaGFuZ2Ugbm90aGluZy5cbiAgICovXG4gIHJlYWRvbmx5IGRyeVJ1bjogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE9ubHkgdGhlIGVudHJpZXMgd2l0aCB0aGVzZSBuYW1lcywgb3IgZXZlcnkgZW50cnkgd2hlbiBlbXB0eS5cbiAgICovXG4gIHJlYWRvbmx5IG9ubHk6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9uZSB1cHN0cmVhbSB0aGF0IGB1cHN0cmVhbXMuanNvbmAgbGlzdHM6IGEgZ2l0IG9uZSBvciBhbiBucG0gb25lLlxuICovXG5leHBvcnQgdHlwZSBVcHN0cmVhbUVudHJ5ID0gR2l0VXBzdHJlYW1FbnRyeSB8IE5wbVVwc3RyZWFtRW50cnk7XG5cbi8qKlxuICogVGhlIGNvbnRlbnQgb2YgYHVwc3RyZWFtcy5qc29uYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcHN0cmVhbXNDb25maWcge1xuICB1cHN0cmVhbXM6IHJlYWRvbmx5IFVwc3RyZWFtRW50cnlbXTtcbiAgLyoqXG4gICAqIFRoZSBzaGVsbCBjb21tYW5kIHRoYXQgY2hlY2tzIGV2ZXJ5IGhhbmRsZXIncyByZXN1bHQsIHVubGVzcyBhbiBlbnRyeSBuYW1lcyBpdHMgb3duLlxuICAgKi9cbiAgdmVyaWZ5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdoYXQgb25lIGNvbXBhcmlzb24gb2YgYW4gZW50cnkgd2l0aCBpdHMgdXBzdHJlYW0gZm91bmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBzdHJlYW1TdGF0dXMge1xuICAvKipcbiAgICogVGhlIHVwc3RyZWFtIHBhdGhzIHRoYXQgY2hhbmdlZCBhbmQgYXJlIHdhdGNoZWQsIHNvcnRlZC4gQWx3YXlzIGVtcHR5IGZvciBhbiBucG0gdXBzdHJlYW0uXG4gICAqL1xuICBjaGFuZ2VkUGF0aHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKipcbiAgICogQSBsaW5rIHRoYXQgc2hvd3Mgd2hhdCBjaGFuZ2VkIGJldHdlZW4gdGhlIHBpbiBhbmQgdGhlIGhlYWQuXG4gICAqL1xuICBjb21wYXJlVXJsOiBzdHJpbmc7XG4gIGVudHJ5OiBVcHN0cmVhbUVudHJ5O1xuICAvKipcbiAgICogVGhlIGNvbW1pdCBvciB2ZXJzaW9uIHRoZSB1cHN0cmVhbSBpcyBhdCBub3cuXG4gICAqL1xuICBoZWFkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgY29tbWl0IG9yIHZlcnNpb24gYHVwc3RyZWFtcy5qc29uYCByZWNvcmRzLlxuICAgKi9cbiAgcGluOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBgY3VycmVudGA6IG5vdGhpbmcgdG8gZG8uIGBtb3ZlZGA6IGEgUFIgaXMgZHVlLiBgdW53YXRjaGVkYDogdXBzdHJlYW0gbW92ZWQsIGJ1dCBubyB3YXRjaGVkIHBhdGggY2hhbmdlZC5cbiAgICovXG4gIHN0YXRlOiAnY3VycmVudCcgfCAnbW92ZWQnIHwgJ3Vud2F0Y2hlZCc7XG4gIC8qKlxuICAgKiBXaGV0aGVyIEdpdEh1YiB0cnVuY2F0ZWQgdGhlIGNvbXBhcmUncyBmaWxlIGxpc3QsIHNvIGEgd2F0Y2hlZCBwYXRoIG1heSBiZSBtaXNzaW5nIGZyb20gYGNoYW5nZWRQYXRoc2AuXG4gICAqL1xuICB0cnVuY2F0ZWQ6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBHaXRIdWJDb21taXQge1xuICBzaGE6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEdpdEh1YkNvbXBhcmUge1xuICBmaWxlcz86IHJlYWRvbmx5IEdpdEh1YkNvbXBhcmVGaWxlW107XG59XG5cbi8qKlxuICogT25lIGZpbGUgb2YgYSBHaXRIdWIgY29tcGFyZSwgYXMgdGhlIEFQSSBzcGVsbHMgaXQuXG4gKi9cbmludGVyZmFjZSBHaXRIdWJDb21wYXJlRmlsZSB7XG4gIGZpbGVuYW1lOiBzdHJpbmc7XG5cbiAgcHJldmlvdXNfZmlsZW5hbWU/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBOcG1QYWNrdW1lbnQge1xuICAnZGlzdC10YWdzJzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuaW50ZXJmYWNlIFN0ZXBSZXN1bHQge1xuICByZWFkb25seSBjb21tYW5kOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlc3VsdDogQ29tbWFuZFJlc3VsdDtcbn1cblxuLyoqXG4gKiBUaGUgaGFuZGxlciBhbmQgdmVyaWZ5IHJ1bnMgYSBQUiBib2R5IHJlcG9ydHMuXG4gKi9cbmludGVyZmFjZSBTdGVwUmVzdWx0cyB7XG4gIGhhbmRsZXI6IFN0ZXBSZXN1bHQ7XG4gIHZlcmlmeTogbnVsbCB8IFN0ZXBSZXN1bHQ7XG59XG5cbi8qKlxuICogYHVwc3RyZWFtcy5qc29uYCByZWFkIGxvb3NlbHksIHRvIHdyaXRlIG9uZSB2YWx1ZSBiYWNrIHdpdGhvdXQgZGlzdHVyYmluZyB0aGUgcmVzdC5cbiAqL1xuaW50ZXJmYWNlIFVwc3RyZWFtc0ZpbGVTaGFwZSB7XG4gIHVwc3RyZWFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcbn1cblxuLyoqXG4gKiBHaXRIdWIncyBjb21wYXJlIEFQSSBsaXN0cyBhdCBtb3N0IHRoaXMgbWFueSBmaWxlcywgYW5kIHNheXMgbm90aGluZyB3aGVuIGl0IHN0b3BzLlxuICovXG5jb25zdCBDT01QQVJFX0ZJTEVfTElNSVQgPSAzMDA7XG5cbmNvbnN0IFNIT1JUX1NIQV9MRU5HVEggPSAxMjtcblxuLyoqXG4gKiBUaGUgdGFpbCBvZiBhIGNvbW1hbmQncyBvdXRwdXQgYSBQUiBib2R5IHF1b3RlczogZW5vdWdoIHRvIHJlYWQgYSBmYWlsdXJlLCBzaG9ydCBlbm91Z2ggdG8gc3RheSB1bmRlciBHaXRIdWIncyBib2R5IGxpbWl0LlxuICovXG5jb25zdCBPVVRQVVRfVEFJTF9MSU5FUyA9IDYwO1xuXG5jb25zdCBKU09OX0lOREVOVF9TUEFDRVMgPSAyO1xuXG4vKipcbiAqIFdyaXRlcyB0aGUgUFIgYm9keS5cbiAqXG4gKiBAcGFyYW0gcGxhbiAtIFRoZSBwbGFuLlxuICogQHBhcmFtIHN0ZXBzIC0gVGhlIGhhbmRsZXIgYW5kIHZlcmlmeSBydW5zLCBvciBgbnVsbGAgaW4gYSBkcnkgcnVuLCB3aGVyZSBuZWl0aGVyIHJ1bnMuXG4gKiBAcGFyYW0gZGlmZlN0YXQgLSBgZ2l0IGRpZmYgLS1zdGF0YCBvZiB0aGUgdXBkYXRlIGNvbW1pdCwgb3IgYG51bGxgIGluIGEgZHJ5IHJ1bi5cbiAqIEByZXR1cm5zIFRoZSBib2R5LCBpbiBNYXJrZG93bi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUHJCb2R5KHBsYW46IFN5bmNQbGFuLCBzdGVwczogbnVsbCB8IFN0ZXBSZXN1bHRzLCBkaWZmU3RhdDogbnVsbCB8IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgZW50cnksIGhlYWQsIHBpbiB9ID0gcGxhbi5zdGF0dXM7XG4gIGNvbnN0IHNvdXJjZSA9IGlzR2l0VXBzdHJlYW0oZW50cnkpID8gYFxcYCR7ZW50cnkucmVwb31AJHtlbnRyeS5yZWZ9XFxgYCA6IGBucG0gXFxgJHtlbnRyeS5ucG19QCR7ZW50cnkudGFnID8/ICdsYXRlc3QnfVxcYGA7XG4gIGNvbnN0IGxpbmVzID0gW1xuICAgIGBVcHN0cmVhbSBcXGAke2VudHJ5Lm5hbWV9XFxgIG1vdmVkOiAke3NvdXJjZX0gZnJvbSBcXGAke3Bpbn1cXGAgdG8gXFxgJHtoZWFkfVxcYC5gLFxuICAgICcnLFxuICAgIGBDb21wYXJlOiAke3BsYW4uc3RhdHVzLmNvbXBhcmVVcmx9YCxcbiAgICAnJ1xuICBdO1xuXG4gIGlmIChpc0dpdFVwc3RyZWFtKGVudHJ5KSkge1xuICAgIGxpbmVzLnB1c2goJyMjIyBDaGFuZ2VkIHVwc3RyZWFtIGZpbGVzJywgJycsIC4uLnBsYW4uc3RhdHVzLmNoYW5nZWRQYXRocy5tYXAoKHBhdGgpID0+IGAtIFxcYCR7cGF0aH1cXGBgKSk7XG4gICAgaWYgKHBsYW4uc3RhdHVzLnRydW5jYXRlZCkge1xuICAgICAgbGluZXMucHVzaChgLSBHaXRIdWIgbGlzdHMgYXQgbW9zdCAke1N0cmluZyhDT01QQVJFX0ZJTEVfTElNSVQpfSBmaWxlczogb3BlbiB0aGUgY29tcGFyZSBsaW5rIGZvciB0aGUgcmVzdC5gKTtcbiAgICB9XG4gICAgbGluZXMucHVzaCgnJyk7XG4gIH1cblxuICBpZiAoc3RlcHMgPT09IG51bGwpIHtcbiAgICBsaW5lcy5wdXNoKCcjIyMgSGFuZGxlcicsICcnLCBgXFxgJHtlbnRyeS5oYW5kbGVyfVxcYDogbm90IHJ1biAoZHJ5IHJ1bikuYCwgJycpO1xuICB9IGVsc2Uge1xuICAgIGxpbmVzLnB1c2goLi4uZGVzY3JpYmVTdGVwKCdIYW5kbGVyJywgc3RlcHMuaGFuZGxlcikpO1xuICAgIGlmIChzdGVwcy52ZXJpZnkgIT09IG51bGwpIHtcbiAgICAgIGxpbmVzLnB1c2goLi4uZGVzY3JpYmVTdGVwKCdWZXJpZnknLCBzdGVwcy52ZXJpZnkpKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZGlmZlN0YXQgIT09IG51bGwpIHtcbiAgICBsaW5lcy5wdXNoKCcjIyMgR2VuZXJhdGVkIGNoYW5nZXMnLCAnJywgJ2BgYHRleHQnLCBkaWZmU3RhdC50cmltRW5kKCksICdgYGAnLCAnJyk7XG4gIH1cblxuICBsaW5lcy5wdXNoKCdUaGlzIFBSIHdhcyBvcGVuZWQgYnkgdGhlIHVwc3RyZWFtLXN5bmMgam9iIGFuZCBpcyBuZXZlciBtZXJnZWQgYXV0b21hdGljYWxseS4nKTtcbiAgcmV0dXJuIGAke2xpbmVzLmpvaW4oJ1xcbicpfVxcbmA7XG59XG5cbi8qKlxuICogQ29tcGFyZXMgb25lIGVudHJ5IHdpdGggaXRzIHVwc3RyZWFtLlxuICpcbiAqIEBwYXJhbSBlbnRyeSAtIFRoZSBlbnRyeS5cbiAqIEBwYXJhbSBkZXBlbmRlbmNpZXMgLSBUaGUgb3V0c2lkZSB3b3JsZC5cbiAqIEByZXR1cm5zIFdoYXQgdGhlIGNvbXBhcmlzb24gZm91bmQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb21wYXJlV2l0aFVwc3RyZWFtKGVudHJ5OiBVcHN0cmVhbUVudHJ5LCBkZXBlbmRlbmNpZXM6IFBpY2s8U3luY0RlcGVuZGVuY2llcywgJ2ZldGNoSnNvbic+KTogUHJvbWlzZTxVcHN0cmVhbVN0YXR1cz4ge1xuICBpZiAoIWlzR2l0VXBzdHJlYW0oZW50cnkpKSB7XG4gICAgY29uc3QgdGFnID0gZW50cnkudGFnID8/ICdsYXRlc3QnO1xuICAgIGNvbnN0IHBhY2t1bWVudCA9IGF3YWl0IGRlcGVuZGVuY2llcy5mZXRjaEpzb24oYGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnLyR7ZW50cnkubnBtLnJlcGxhY2UoJy8nLCAnJTJmJyl9YCkgYXMgTnBtUGFja3VtZW50O1xuICAgIGNvbnN0IGhlYWQgPSBwYWNrdW1lbnRbJ2Rpc3QtdGFncyddW3RhZ107XG4gICAgaWYgKGhlYWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBucG0gcGFja2FnZSAke2VudHJ5Lm5wbX0gaGFzIG5vIGRpc3QtdGFnIFwiJHt0YWd9XCIuYCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjaGFuZ2VkUGF0aHM6IFtdLFxuICAgICAgY29tcGFyZVVybDogYGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlLyR7ZW50cnkubnBtfS92LyR7aGVhZH1gLFxuICAgICAgZW50cnksXG4gICAgICBoZWFkLFxuICAgICAgcGluOiBlbnRyeS52ZXJzaW9uLFxuICAgICAgc3RhdGU6IGhlYWQgPT09IGVudHJ5LnZlcnNpb24gPyAnY3VycmVudCcgOiAnbW92ZWQnLFxuICAgICAgdHJ1bmNhdGVkOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjb25zdCBjb21taXQgPSBhd2FpdCBkZXBlbmRlbmNpZXMuZmV0Y2hKc29uKGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7ZW50cnkucmVwb30vY29tbWl0cy8ke2VuY29kZVVSSUNvbXBvbmVudChlbnRyeS5yZWYpfWApIGFzIEdpdEh1YkNvbW1pdDtcbiAgY29uc3QgaGVhZCA9IGNvbW1pdC5zaGE7XG4gIGNvbnN0IGNvbXBhcmVVcmwgPSBgaHR0cHM6Ly9naXRodWIuY29tLyR7ZW50cnkucmVwb30vY29tcGFyZS8ke2VudHJ5LmNvbW1pdH0uLi4ke2hlYWR9YDtcbiAgaWYgKGhlYWQgPT09IGVudHJ5LmNvbW1pdCkge1xuICAgIHJldHVybiB7IGNoYW5nZWRQYXRoczogW10sIGNvbXBhcmVVcmwsIGVudHJ5LCBoZWFkLCBwaW46IGVudHJ5LmNvbW1pdCwgc3RhdGU6ICdjdXJyZW50JywgdHJ1bmNhdGVkOiBmYWxzZSB9O1xuICB9XG5cbiAgY29uc3QgY29tcGFyZSA9IGF3YWl0IGRlcGVuZGVuY2llcy5mZXRjaEpzb24oYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvJHtlbnRyeS5yZXBvfS9jb21wYXJlLyR7ZW50cnkuY29tbWl0fS4uLiR7aGVhZH1gKSBhcyBHaXRIdWJDb21wYXJlO1xuICBjb25zdCBmaWxlcyA9IGNvbXBhcmUuZmlsZXMgPz8gW107XG4gIGNvbnN0IHRvdWNoZWQgPSBuZXcgU2V0KGZpbGVzLmZsYXRNYXAoKGZpbGUpID0+IGZpbGUucHJldmlvdXNfZmlsZW5hbWUgPT09IHVuZGVmaW5lZCA/IFtmaWxlLmZpbGVuYW1lXSA6IFtmaWxlLmZpbGVuYW1lLCBmaWxlLnByZXZpb3VzX2ZpbGVuYW1lXSkpO1xuICBjb25zdCBjaGFuZ2VkUGF0aHMgPSBbLi4udG91Y2hlZF0uZmlsdGVyKChwYXRoKSA9PiBlbnRyeS5wYXRocy5zb21lKChnbG9iKSA9PiBtYXRjaGVzR2xvYihwYXRoLCBnbG9iKSkpLnNvcnQoKTtcbiAgY29uc3QgaXNUcnVuY2F0ZWQgPSBmaWxlcy5sZW5ndGggPj0gQ09NUEFSRV9GSUxFX0xJTUlUO1xuICByZXR1cm4ge1xuICAgIGNoYW5nZWRQYXRocyxcbiAgICBjb21wYXJlVXJsLFxuICAgIGVudHJ5LFxuICAgIGhlYWQsXG4gICAgcGluOiBlbnRyeS5jb21taXQsXG4gICAgc3RhdGU6IGNoYW5nZWRQYXRocy5sZW5ndGggPiAwIHx8IGlzVHJ1bmNhdGVkID8gJ21vdmVkJyA6ICd1bndhdGNoZWQnLFxuICAgIHRydW5jYXRlZDogaXNUcnVuY2F0ZWRcbiAgfTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYW5kIHZhbGlkYXRlcyBhbiBgdXBzdHJlYW1zLmpzb25gLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIGZpbGUncyBjb250ZW50LlxuICogQHJldHVybnMgVGhlIGNvbmZpZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVXBzdHJlYW1zQ29uZmlnKHRleHQ6IHN0cmluZyk6IFVwc3RyZWFtc0NvbmZpZyB7XG4gIGNvbnN0IGNvbmZpZyA9IEpTT04ucGFyc2UodGV4dCkgYXMgUGFydGlhbDxVcHN0cmVhbXNDb25maWc+O1xuICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZmlnLnVwc3RyZWFtcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1cHN0cmVhbXMuanNvbiBoYXMgbm8gXCJ1cHN0cmVhbXNcIiBhcnJheS4nKTtcbiAgfVxuICAvLyBSZWFkIHRocm91Z2ggYFJlZmxlY3QuZ2V0YCwgYmVjYXVzZSBub3RoaW5nIGFib3V0IHRoZSBwYXJzZWQgZW50cmllcyBpcyBrbm93biB5ZXQuXG4gIGNvbnN0IGVudHJpZXM6IHJlYWRvbmx5IG9iamVjdFtdID0gY29uZmlnLnVwc3RyZWFtcztcbiAgY29uc3QgbmFtZXMgPSBuZXcgU2V0PHVua25vd24+KCk7XG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGNvbnN0IG5hbWU6IHVua25vd24gPSBSZWZsZWN0LmdldChlbnRyeSwgJ25hbWUnKTtcbiAgICBjb25zdCBsYWJlbCA9IHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJyA/IGBcIiR7bmFtZX1cImAgOiAnd2l0aCBubyBuYW1lJztcbiAgICBjb25zdCBpc0dpdCA9ICdyZXBvJyBpbiBlbnRyeTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGlzR2l0ID8gWyduYW1lJywgJ3JlcG8nLCAncmVmJywgJ2NvbW1pdCcsICdoYW5kbGVyJ10gOiBbJ25hbWUnLCAnbnBtJywgJ3ZlcnNpb24nLCAnaGFuZGxlciddO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIHJlcXVpcmVkKSB7XG4gICAgICBpZiAodHlwZW9mIFJlZmxlY3QuZ2V0KGVudHJ5LCBrZXkpICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGB1cHN0cmVhbXMuanNvbjogZW50cnkgJHtsYWJlbH0gbmVlZHMgYSBzdHJpbmcgXCIke2tleX1cIi5gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzR2l0ICYmICFBcnJheS5pc0FycmF5KFJlZmxlY3QuZ2V0KGVudHJ5LCAncGF0aHMnKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdXBzdHJlYW1zLmpzb246IGVudHJ5ICR7bGFiZWx9IG5lZWRzIGEgXCJwYXRoc1wiIGFycmF5LmApO1xuICAgIH1cbiAgICBpZiAobmFtZXMuaGFzKG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVwc3RyZWFtcy5qc29uOiB0aGUgbmFtZSAke2xhYmVsfSBpcyB1c2VkIHR3aWNlLmApO1xuICAgIH1cbiAgICBuYW1lcy5hZGQobmFtZSk7XG4gIH1cbiAgcmV0dXJuIGNvbmZpZyBhcyBVcHN0cmVhbXNDb25maWc7XG59XG5cbi8qKlxuICogUGxhbnMgdGhlIFBSIGEgbW92ZWQgdXBzdHJlYW0gYXNrcyBmb3IuXG4gKlxuICogQHBhcmFtIHN0YXR1cyAtIFRoZSBjb21wYXJpc29uIG9mIGEgbW92ZWQgZW50cnkuXG4gKiBAcmV0dXJucyBUaGUgYnJhbmNoIGFuZCB0aXRsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBsYW5TeW5jKHN0YXR1czogVXBzdHJlYW1TdGF0dXMpOiBTeW5jUGxhbiB7XG4gIHJldHVybiB7XG4gICAgYnJhbmNoOiBgdXBzdHJlYW0vJHtzdGF0dXMuZW50cnkubmFtZX1gLFxuICAgIHN0YXR1cyxcbiAgICB0aXRsZTogYGNob3JlKHVwc3RyZWFtKTogc3luYyAke3N0YXR1cy5lbnRyeS5uYW1lfSB0byAke3Nob3J0ZW4oc3RhdHVzLmhlYWQpfWBcbiAgfTtcbn1cblxuLyoqXG4gKiBDaGVja3MgZXZlcnkgZW50cnksIGFuZCBvcGVucyBvciB1cGRhdGVzIG9uZSBQUiBwZXIgbW92ZWQgdXBzdHJlYW0uXG4gKlxuICogQSBoYW5kbGVyIG9yIHZlcmlmeSBmYWlsdXJlIHN0aWxsIG9wZW5zIHRoZSBQUiwgYXMgYSBkcmFmdCB3aXRoIHRoZSBmYWlsdXJlIGluIGl0cyBib2R5LCBzbyBhIGJyZWFraW5nIHVwc3RyZWFtIGNoYW5nZVxuICogaXMgc2VlbiByYXRoZXIgdGhhbiBza2lwcGVkLiBBbiBlcnJvciBpbiB0aGUgc3luYyBpdHNlbGYsIHN1Y2ggYXMgYSBmYWlsZWQgQVBJIGNhbGwsIGlzIHJlcG9ydGVkIGluIHRoZSBlbnRyeSdzIHJlc3VsdFxuICogYW5kIHRoZSBuZXh0IGVudHJ5IHN0aWxsIHJ1bnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBXaGF0IHRvIHN5bmMsIGFuZCBob3cuXG4gKiBAcGFyYW0gZGVwZW5kZW5jaWVzIC0gVGhlIG91dHNpZGUgd29ybGQuXG4gKiBAcmV0dXJucyBPbmUgcmVzdWx0IHBlciBlbnRyeSBjaGVja2VkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3luY1Vwc3RyZWFtcyhvcHRpb25zOiBTeW5jVXBzdHJlYW1zT3B0aW9ucywgZGVwZW5kZW5jaWVzOiBTeW5jRGVwZW5kZW5jaWVzKTogUHJvbWlzZTxTeW5jUmVzdWx0W10+IHtcbiAgY29uc3QgY29uZmlnID0gcGFyc2VVcHN0cmVhbXNDb25maWcocmVhZEZpbGVTeW5jKG9wdGlvbnMuY29uZmlnUGF0aCwgJ3V0Zi04JykpO1xuICBjb25zdCB1bmtub3duID0gb3B0aW9ucy5vbmx5LmZpbHRlcigobmFtZSkgPT4gY29uZmlnLnVwc3RyZWFtcy5ldmVyeSgoZW50cnkpID0+IGVudHJ5Lm5hbWUgIT09IG5hbWUpKTtcbiAgaWYgKHVua25vd24ubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgdXBzdHJlYW1zLmpzb24gaGFzIG5vIGVudHJ5IG5hbWVkICR7dW5rbm93bi5tYXAoKG5hbWUpID0+IGBcIiR7bmFtZX1cImApLmpvaW4oJywgJyl9LmApO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0czogU3luY1Jlc3VsdFtdID0gW107XG4gIGZvciAoY29uc3QgZW50cnkgb2YgY29uZmlnLnVwc3RyZWFtcykge1xuICAgIGlmIChvcHRpb25zLm9ubHkubGVuZ3RoID4gMCAmJiAhb3B0aW9ucy5vbmx5LmluY2x1ZGVzKGVudHJ5Lm5hbWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdHMucHVzaChhd2FpdCBzeW5jRW50cnkoZW50cnksIGNvbmZpZywgb3B0aW9ucywgZGVwZW5kZW5jaWVzKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICBkZXBlbmRlbmNpZXMubG9nKGAke2VudHJ5Lm5hbWV9OiBFUlJPUiAke21lc3NhZ2V9YCk7XG4gICAgICByZXN1bHRzLnB1c2goeyBlcnJvcjogbWVzc2FnZSwgbmFtZTogZW50cnkubmFtZSwgb3V0Y29tZTogJ2Vycm9yJyB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbi8qKlxuICogUmVjb3JkcyBgaGVhZGAgYXMgdGhlIGVudHJ5J3MgcGluIGluIGB1cHN0cmVhbXMuanNvbmAsIHVubGVzcyB0aGUgaGFuZGxlciBhbHJlYWR5IG1vdmVkIGl0LCBrZWVwaW5nIHRoZSBmaWxlJ3NcbiAqIGtleSBvcmRlciBhbmQgZm9ybWF0dGluZy5cbiAqXG4gKiBAcGFyYW0gY29uZmlnUGF0aCAtIFRoZSBwYXRoIHRvIGB1cHN0cmVhbXMuanNvbmAuXG4gKiBAcGFyYW0gc3RhdHVzIC0gVGhlIGNvbXBhcmlzb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVBpbihjb25maWdQYXRoOiBzdHJpbmcsIHN0YXR1czogVXBzdHJlYW1TdGF0dXMpOiB2b2lkIHtcbiAgY29uc3QgdGV4dCA9IHJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmLTgnKTtcbiAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZSh0ZXh0KSBhcyBVcHN0cmVhbXNGaWxlU2hhcGU7XG4gIGNvbnN0IGtleSA9IGlzR2l0VXBzdHJlYW0oc3RhdHVzLmVudHJ5KSA/ICdjb21taXQnIDogJ3ZlcnNpb24nO1xuICBjb25zdCB0YXJnZXQgPSBwYXJzZWQudXBzdHJlYW1zLmZpbmQoKGVudHJ5KSA9PiBlbnRyeVsnbmFtZSddID09PSBzdGF0dXMuZW50cnkubmFtZSk7XG4gIGlmICh0YXJnZXQ/LltrZXldICE9PSBzdGF0dXMucGluKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRhcmdldFtrZXldID0gc3RhdHVzLmhlYWQ7XG4gIHdyaXRlRmlsZVN5bmMoY29uZmlnUGF0aCwgYCR7SlNPTi5zdHJpbmdpZnkocGFyc2VkLCBudWxsLCBKU09OX0lOREVOVF9TUEFDRVMpfVxcbmApO1xufVxuXG5mdW5jdGlvbiBhcHBseVBsYW4ocGxhbjogU3luY1BsYW4sIGNvbmZpZzogVXBzdHJlYW1zQ29uZmlnLCBvcHRpb25zOiBTeW5jVXBzdHJlYW1zT3B0aW9ucywgZGVwZW5kZW5jaWVzOiBTeW5jRGVwZW5kZW5jaWVzKTogU3luY1Jlc3VsdCB7XG4gIGNvbnN0IHsgZW50cnkgfSA9IHBsYW4uc3RhdHVzO1xuICBjb25zdCBlbnYgPSB7IFVQU1RSRUFNX05BTUU6IGVudHJ5Lm5hbWUsIFVQU1RSRUFNX1RBUkdFVDogcGxhbi5zdGF0dXMuaGVhZCB9O1xuICBjb25zdCBoYW5kbGVyOiBTdGVwUmVzdWx0ID0geyBjb21tYW5kOiBlbnRyeS5oYW5kbGVyLCByZXN1bHQ6IGRlcGVuZGVuY2llcy5zaGVsbChlbnRyeS5oYW5kbGVyLCBlbnYpIH07XG4gIHdyaXRlUGluKG9wdGlvbnMuY29uZmlnUGF0aCwgcGxhbi5zdGF0dXMpO1xuICBjb25zdCB2ZXJpZnlDb21tYW5kID0gZW50cnkudmVyaWZ5ID8/IGNvbmZpZy52ZXJpZnk7XG4gIGNvbnN0IHZlcmlmeTogbnVsbCB8IFN0ZXBSZXN1bHQgPSB2ZXJpZnlDb21tYW5kID09PSB1bmRlZmluZWQgPyBudWxsIDogeyBjb21tYW5kOiB2ZXJpZnlDb21tYW5kLCByZXN1bHQ6IGRlcGVuZGVuY2llcy5zaGVsbCh2ZXJpZnlDb21tYW5kLCBlbnYpIH07XG4gIGNvbnN0IGlzRmFpbGVkID0gaGFuZGxlci5yZXN1bHQuZXhpdENvZGUgIT09IDAgfHwgKHZlcmlmeSAhPT0gbnVsbCAmJiB2ZXJpZnkucmVzdWx0LmV4aXRDb2RlICE9PSAwKTtcblxuICBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXMsICdnaXQnLCBbJ2FkZCcsICctLWFsbCddKTtcbiAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2l0JywgWydjb21taXQnLCAnLS1uby12ZXJpZnknLCAnLS1tZXNzYWdlJywgcGxhbi50aXRsZV0pO1xuICBjb25zdCBkaWZmU3RhdCA9IGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2dpdCcsIFsnZGlmZicsICctLXN0YXQnLCAnSEVBRH4xJywgJ0hFQUQnXSk7XG5cbiAgY29uc3QgaXNSZW1vdGVCcmFuY2ggPSBkZXBlbmRlbmNpZXMuZXhlYygnZ2l0JywgWydscy1yZW1vdGUnLCAnLS1leGl0LWNvZGUnLCAnLS1oZWFkcycsICdvcmlnaW4nLCBwbGFuLmJyYW5jaF0pLmV4aXRDb2RlID09PSAwO1xuICBpZiAoaXNSZW1vdGVCcmFuY2gpIHtcbiAgICBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXMsICdnaXQnLCBbJ2ZldGNoJywgJ29yaWdpbicsIHBsYW4uYnJhbmNoXSk7XG4gICAgaWYgKGRlcGVuZGVuY2llcy5leGVjKCdnaXQnLCBbJ2RpZmYnLCAnLS1xdWlldCcsICdGRVRDSF9IRUFEJywgJ0hFQUQnXSkuZXhpdENvZGUgPT09IDApIHtcbiAgICAgIGRlcGVuZGVuY2llcy5sb2coYCR7ZW50cnkubmFtZX06ICR7cGxhbi5icmFuY2h9IGFscmVhZHkgaG9sZHMgdGhpcyByZXN1bHQ7IG5vdGhpbmcgcHVzaGVkLmApO1xuICAgICAgcmV0dXJuIHsgbmFtZTogZW50cnkubmFtZSwgb3V0Y29tZTogJ3VuY2hhbmdlZCcgfTtcbiAgICB9XG4gIH1cbiAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2l0JywgWydwdXNoJywgJy0tZm9yY2UnLCAnb3JpZ2luJywgYEhFQUQ6cmVmcy9oZWFkcy8ke3BsYW4uYnJhbmNofWBdKTtcblxuICBjb25zdCBib2R5ID0gYnVpbGRQckJvZHkocGxhbiwgeyBoYW5kbGVyLCB2ZXJpZnkgfSwgZGlmZlN0YXQpO1xuICBjb25zdCBleGlzdGluZyA9IGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2doJywgWydwcicsICdsaXN0JywgJy0taGVhZCcsIHBsYW4uYnJhbmNoLCAnLS1zdGF0ZScsICdvcGVuJywgJy0tanNvbicsICdudW1iZXInLCAnLS1qcScsICcuWzBdLm51bWJlciddKS50cmltKCk7XG4gIGlmIChleGlzdGluZyAhPT0gJycgJiYgZXhpc3RpbmcgIT09ICdudWxsJykge1xuICAgIGNvbnN0IHByTnVtYmVyID0gTnVtYmVyKGV4aXN0aW5nKTtcbiAgICBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXMsICdnaCcsIFsncHInLCAnZWRpdCcsIGV4aXN0aW5nLCAnLS10aXRsZScsIHBsYW4udGl0bGUsICctLWJvZHknLCBib2R5XSk7XG4gICAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2gnLCBpc0ZhaWxlZCA/IFsncHInLCAncmVhZHknLCBleGlzdGluZywgJy0tdW5kbyddIDogWydwcicsICdyZWFkeScsIGV4aXN0aW5nXSk7XG4gICAgZGVwZW5kZW5jaWVzLmxvZyhgJHtlbnRyeS5uYW1lfTogdXBkYXRlZCBQUiAjJHtleGlzdGluZ30ke2lzRmFpbGVkID8gJyAoZHJhZnQ6IGEgc3RlcCBmYWlsZWQpJyA6ICcnfS5gKTtcbiAgICByZXR1cm4geyBuYW1lOiBlbnRyeS5uYW1lLCBvdXRjb21lOiAndXBkYXRlZCcsIHByTnVtYmVyIH07XG4gIH1cblxuICBjb25zdCB1cmwgPSBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXMsICdnaCcsIFtcbiAgICAncHInLFxuICAgICdjcmVhdGUnLFxuICAgICctLWJhc2UnLFxuICAgIG9wdGlvbnMuYmFzZUJyYW5jaCxcbiAgICAnLS1oZWFkJyxcbiAgICBwbGFuLmJyYW5jaCxcbiAgICAnLS10aXRsZScsXG4gICAgcGxhbi50aXRsZSxcbiAgICAnLS1ib2R5JyxcbiAgICBib2R5LFxuICAgIC4uLihpc0ZhaWxlZCA/IFsnLS1kcmFmdCddIDogW10pXG4gIF0pLnRyaW0oKTtcbiAgZGVwZW5kZW5jaWVzLmxvZyhgJHtlbnRyeS5uYW1lfTogb3BlbmVkICR7dXJsfSR7aXNGYWlsZWQgPyAnIChkcmFmdDogYSBzdGVwIGZhaWxlZCknIDogJyd9LmApO1xuICBjb25zdCBwck51bWJlciA9IE51bWJlcigvXFwvcHVsbFxcLyg/PE51bWJlcj5cXGQrKS8uZXhlYyh1cmwpPy5ncm91cHM/LlsnTnVtYmVyJ10gPz8gTmFOKTtcbiAgcmV0dXJuIE51bWJlci5pc05hTihwck51bWJlcikgPyB7IG5hbWU6IGVudHJ5Lm5hbWUsIG91dGNvbWU6ICdvcGVuZWQnIH0gOiB7IG5hbWU6IGVudHJ5Lm5hbWUsIG91dGNvbWU6ICdvcGVuZWQnLCBwck51bWJlciB9O1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVN0ZXAoaGVhZGluZzogc3RyaW5nLCBzdGVwOiBTdGVwUmVzdWx0KTogc3RyaW5nW10ge1xuICBjb25zdCBpc1Bhc3NlZCA9IHN0ZXAucmVzdWx0LmV4aXRDb2RlID09PSAwO1xuICBjb25zdCB0YWlsID0gc3RlcC5yZXN1bHQub3V0cHV0LnRyaW1FbmQoKS5zcGxpdCgvXFxyP1xcbi8pLnNsaWNlKC1PVVRQVVRfVEFJTF9MSU5FUykuam9pbignXFxuJyk7XG4gIHJldHVybiBbXG4gICAgYCMjIyAke2hlYWRpbmd9YCxcbiAgICAnJyxcbiAgICBgXFxgJHtzdGVwLmNvbW1hbmR9XFxgOiAke2lzUGFzc2VkID8gJ3Bhc3NlZCcgOiBgKipGQUlMRUQqKiAoZXhpdCAke1N0cmluZyhzdGVwLnJlc3VsdC5leGl0Q29kZSl9KWB9LmAsXG4gICAgJycsXG4gICAgaXNQYXNzZWQgPyAnPGRldGFpbHM+PHN1bW1hcnk+T3V0cHV0PC9zdW1tYXJ5PicgOiAnPGRldGFpbHMgb3Blbj48c3VtbWFyeT5PdXRwdXQ8L3N1bW1hcnk+JyxcbiAgICAnJyxcbiAgICAnYGBgdGV4dCcsXG4gICAgdGFpbCxcbiAgICAnYGBgJyxcbiAgICAnJyxcbiAgICAnPC9kZXRhaWxzPicsXG4gICAgJydcbiAgXTtcbn1cblxuZnVuY3Rpb24gZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzOiBTeW5jRGVwZW5kZW5jaWVzLCBmaWxlOiBzdHJpbmcsIGFyZ3VtZW50c186IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgY29uc3QgcmVzdWx0ID0gZGVwZW5kZW5jaWVzLmV4ZWMoZmlsZSwgYXJndW1lbnRzXyk7XG4gIGlmIChyZXN1bHQuZXhpdENvZGUgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZmlsZX0gJHthcmd1bWVudHNfLmpvaW4oJyAnKX0gZmFpbGVkIChleGl0ICR7U3RyaW5nKHJlc3VsdC5leGl0Q29kZSl9KTogJHtyZXN1bHQub3V0cHV0LnRyaW0oKX1gKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0Lm91dHB1dDtcbn1cblxuZnVuY3Rpb24gaXNHaXRVcHN0cmVhbShlbnRyeTogVXBzdHJlYW1FbnRyeSk6IGVudHJ5IGlzIEdpdFVwc3RyZWFtRW50cnkge1xuICByZXR1cm4gJ3JlcG8nIGluIGVudHJ5O1xufVxuXG5mdW5jdGlvbiBzaG9ydGVuKGhlYWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiAvXlswLTlhLWZdezQwfSQvLnRlc3QoaGVhZCkgPyBoZWFkLnNsaWNlKDAsIFNIT1JUX1NIQV9MRU5HVEgpIDogaGVhZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3luY0VudHJ5KGVudHJ5OiBVcHN0cmVhbUVudHJ5LCBjb25maWc6IFVwc3RyZWFtc0NvbmZpZywgb3B0aW9uczogU3luY1Vwc3RyZWFtc09wdGlvbnMsIGRlcGVuZGVuY2llczogU3luY0RlcGVuZGVuY2llcyk6IFByb21pc2U8U3luY1Jlc3VsdD4ge1xuICBjb25zdCBzdGF0dXMgPSBhd2FpdCBjb21wYXJlV2l0aFVwc3RyZWFtKGVudHJ5LCBkZXBlbmRlbmNpZXMpO1xuICBpZiAoc3RhdHVzLnN0YXRlID09PSAnY3VycmVudCcpIHtcbiAgICBkZXBlbmRlbmNpZXMubG9nKGAke2VudHJ5Lm5hbWV9OiBjdXJyZW50IGF0ICR7c2hvcnRlbihzdGF0dXMuaGVhZCl9LmApO1xuICAgIHJldHVybiB7IG5hbWU6IGVudHJ5Lm5hbWUsIG91dGNvbWU6ICdjdXJyZW50JyB9O1xuICB9XG4gIGlmIChzdGF0dXMuc3RhdGUgPT09ICd1bndhdGNoZWQnKSB7XG4gICAgZGVwZW5kZW5jaWVzLmxvZyhgJHtlbnRyeS5uYW1lfTogbW92ZWQgdG8gJHtzaG9ydGVuKHN0YXR1cy5oZWFkKX0sIGJ1dCBubyB3YXRjaGVkIHBhdGggY2hhbmdlZCBzaW5jZSAke3Nob3J0ZW4oc3RhdHVzLnBpbil9LmApO1xuICAgIHJldHVybiB7IG5hbWU6IGVudHJ5Lm5hbWUsIG91dGNvbWU6ICd1bndhdGNoZWQnIH07XG4gIH1cblxuICBjb25zdCBwbGFuID0gcGxhblN5bmMoc3RhdHVzKTtcbiAgaWYgKG9wdGlvbnMuZHJ5UnVuKSB7XG4gICAgZGVwZW5kZW5jaWVzLmxvZyhgJHtlbnRyeS5uYW1lfTogbW92ZWQgZnJvbSAke3Nob3J0ZW4oc3RhdHVzLnBpbil9IHRvICR7c2hvcnRlbihzdGF0dXMuaGVhZCl9LiBXb3VsZCBwdXNoICR7cGxhbi5icmFuY2h9IGFuZCBvcGVuOmApO1xuICAgIGRlcGVuZGVuY2llcy5sb2coYCAgdGl0bGU6ICR7cGxhbi50aXRsZX1gKTtcbiAgICBkZXBlbmRlbmNpZXMubG9nKGJ1aWxkUHJCb2R5KHBsYW4sIG51bGwsIG51bGwpLnJlcGxhY2VBbGwoL14vZ20sICcgIHwgJykpO1xuICAgIHJldHVybiB7IG5hbWU6IGVudHJ5Lm5hbWUsIG91dGNvbWU6ICdwbGFubmVkJyB9O1xuICB9XG5cbiAgLy8gVGhlIHVwZGF0ZSBjb21taXQgdGFrZXMgZXZlcnkgZmlsZSBpbiB0aGUgdHJlZSwgc28gYSBmaWxlIGxlZnQgbHlpbmcgYXJvdW5kIHdvdWxkIGJlIHB1c2hlZCB3aXRoIGl0LlxuICBjb25zdCBkaXJ0eSA9IGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2dpdCcsIFsnc3RhdHVzJywgJy0tcG9yY2VsYWluJ10pLnRyaW0oKTtcbiAgaWYgKGRpcnR5ICE9PSAnJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgdGhlIHdvcmtpbmcgdHJlZSBpcyBub3QgY2xlYW4sIGFuZCB0aGUgdXBkYXRlIGNvbW1pdCB3b3VsZCB0YWtlIHRoZXNlIGZpbGVzIHdpdGggaXQ6XFxuJHtkaXJ0eX1gKTtcbiAgfVxuICBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXMsICdnaXQnLCBbJ2ZldGNoJywgJ29yaWdpbicsIG9wdGlvbnMuYmFzZUJyYW5jaF0pO1xuICBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXMsICdnaXQnLCBbJ2NoZWNrb3V0JywgJy1CJywgcGxhbi5icmFuY2gsIGBvcmlnaW4vJHtvcHRpb25zLmJhc2VCcmFuY2h9YF0pO1xuICB0cnkge1xuICAgIHJldHVybiBhcHBseVBsYW4ocGxhbiwgY29uZmlnLCBvcHRpb25zLCBkZXBlbmRlbmNpZXMpO1xuICB9IGZpbmFsbHkge1xuICAgIGRlcGVuZGVuY2llcy5leGVjKCdnaXQnLCBbJ2NoZWNrb3V0JywgJy0tZm9yY2UnLCBvcHRpb25zLmJhc2VCcmFuY2hdKTtcbiAgICBkZXBlbmRlbmNpZXMuZXhlYygnZ2l0JywgWydicmFuY2gnLCAnLS1kZWxldGUnLCAnLS1mb3JjZScsIHBsYW4uYnJhbmNoXSk7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBU0E7QUFBQSxFQUNFO0FBQUEsRUFD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
|
|
294
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3Vwc3RyZWFtLXN5bmMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBXYXRjaGVzIHRoZSB1cHN0cmVhbXMgYSByZXBvc2l0b3J5IG1pcnJvcnMgYW5kIG9wZW5zIG9uZSB1cGRhdGUgUFIgcGVyIHVwc3RyZWFtIHRoYXQgbW92ZWQuXG4gKlxuICogRXZlcnl0aGluZyBoZXJlIGlzIGRyaXZlbiBieSBgdXBzdHJlYW1zLmpzb25gIGFuZCB0aGUgaGFuZGxlciBjb21tYW5kcyBpdCBuYW1lcywgc28gYW55IHJlcG9zaXRvcnkgdGhhdCB2ZW5kb3JzXG4gKiB1cHN0cmVhbSBjb2RlIGNhbiB1c2UgaXQ6IHRocm91Z2ggdGhlIGBzeW5jLXVwc3RyZWFtc2AgYmluLCBvciB0aGUgcmV1c2FibGUgYHN5bmMtdXBzdHJlYW1zLnltbGAgd29ya2Zsb3cuXG4gKi9cblxuaW1wb3J0IHtcbiAgcmVhZEZpbGVTeW5jLFxuICB3cml0ZUZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgbWF0Y2hlc0dsb2IgfSBmcm9tICdub2RlOnBhdGgnO1xuXG4vKipcbiAqIFdoYXQgYSBjb21tYW5kIHByaW50ZWQgYW5kIGhvdyBpdCBleGl0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZFJlc3VsdCB7XG4gIHJlYWRvbmx5IGV4aXRDb2RlOiBudW1iZXI7XG4gIHJlYWRvbmx5IG91dHB1dDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIHVwc3RyZWFtIGZvbGxvd2VkIG9uIGEgR2l0SHViIGJyYW5jaCBvciB0YWcsIHBpbm5lZCB0byBhIGNvbW1pdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHaXRVcHN0cmVhbUVudHJ5IHtcbiAgLyoqXG4gICAqIFRoZSBwaW5uZWQgY29tbWl0OiB0aGUgbGFzdCB1cHN0cmVhbSBzdGF0ZSB0aGUgaGFuZGxlciB3YXMgcnVuIGFnYWluc3QuXG4gICAqL1xuICBjb21taXQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBzaGVsbCBjb21tYW5kIHRoYXQgdHVybnMgYSBuZXdlciB1cHN0cmVhbSBzdGF0ZSBpbnRvIGNoYW5nZXMgaW4gdGhpcyByZXBvc2l0b3J5LlxuICAgKi9cbiAgaGFuZGxlcjogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcGF0aHMgd2F0Y2hlZCB1cHN0cmVhbSwgYXMgZ2xvYnMgcmVsYXRpdmUgdG8gdGhlIHJlcG9zaXRvcnkgcm9vdC4gQSBtb3ZlIHRoYXQgdG91Y2hlcyBub25lIG9mIHRoZW0gb3BlbnMgbm8gUFIuXG4gICAqL1xuICBwYXRoczogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKlxuICAgKiBUaGUgYnJhbmNoIG9yIHRhZyBmb2xsb3dlZC5cbiAgICovXG4gIHJlZjogc3RyaW5nO1xuICAvKipcbiAgICogYDxvd25lcj4vPHJlcG8+YCBvbiBHaXRIdWIuXG4gICAqL1xuICByZXBvOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc2hlbGwgY29tbWFuZCB0aGF0IGNoZWNrcyB0aGUgaGFuZGxlcidzIHJlc3VsdC4gT3ZlcnJpZGVzIHRoZSBmaWxlJ3MgdG9wLWxldmVsIGB2ZXJpZnlgLlxuICAgKi9cbiAgdmVyaWZ5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIHVwc3RyZWFtIGZvbGxvd2VkIGFzIGFuIG5wbSBwYWNrYWdlJ3MgZGlzdC10YWcsIHBpbm5lZCB0byBhIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTnBtVXBzdHJlYW1FbnRyeSB7XG4gIGhhbmRsZXI6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHBhY2thZ2UgbmFtZS5cbiAgICovXG4gIG5wbTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGRpc3QtdGFnIGZvbGxvd2VkLiBgbGF0ZXN0YCB3aGVuIGFic2VudC5cbiAgICovXG4gIHRhZz86IHN0cmluZztcbiAgdmVyaWZ5Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHBpbm5lZCB2ZXJzaW9uLlxuICAgKi9cbiAgdmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2ZXJ5dGhpbmcgdGhlIHN5bmMgZG9lcyB0byB0aGUgb3V0c2lkZSB3b3JsZCwgc28gYSB0ZXN0IGNhbiBzdGFuZCBhIGZpeHR1cmUgaW4gZm9yIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5bmNEZXBlbmRlbmNpZXMge1xuICAvKipcbiAgICogUnVucyBhbiBleGVjdXRhYmxlIHdpdGggYXJndW1lbnRzIGFuZCBubyBzaGVsbC5cbiAgICovXG4gIGV4ZWM6IChmaWxlOiBzdHJpbmcsIGFyZ3VtZW50c186IHJlYWRvbmx5IHN0cmluZ1tdLCBlbnY/OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PikgPT4gQ29tbWFuZFJlc3VsdDtcbiAgLyoqXG4gICAqIEdFVHMgYSBVUkwgYW5kIHBhcnNlcyB0aGUgSlNPTiBpdCByZXR1cm5zLCB0aHJvd2luZyBvbiBhbiBIVFRQIGVycm9yLlxuICAgKi9cbiAgZmV0Y2hKc29uOiAodXJsOiBzdHJpbmcpID0+IFByb21pc2U8dW5rbm93bj47XG4gIGxvZzogKHRleHQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFJ1bnMgYSBjb21tYW5kIGxpbmUgdGhyb3VnaCB0aGUgc2hlbGw6IGEgaGFuZGxlciBvciBhIHZlcmlmeSBjb21tYW5kLlxuICAgKi9cbiAgc2hlbGw6IChjb21tYW5kOiBzdHJpbmcsIGVudj86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KSA9PiBDb21tYW5kUmVzdWx0O1xufVxuXG4vKipcbiAqIFRoZSBQUiBhbiB1cHN0cmVhbSBtb3ZlIGFza3MgZm9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5bmNQbGFuIHtcbiAgYnJhbmNoOiBzdHJpbmc7XG4gIHN0YXR1czogVXBzdHJlYW1TdGF0dXM7XG4gIHRpdGxlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogV2hhdCBoYXBwZW5lZCB0byBvbmUgZW50cnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3luY1Jlc3VsdCB7XG4gIC8qKlxuICAgKiBTZXQgd2hlbiBjaGVja2luZyBvciBhcHBseWluZyB0aHJldzogdGhlIGpvYiByZXBvcnRzIGl0IGFuZCBtb3ZlcyBvbiB0byB0aGUgbmV4dCBlbnRyeS5cbiAgICovXG4gIHJlYWRvbmx5IGVycm9yPzogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBgcGxhbm5lZGAgaW4gYSBkcnkgcnVuLCBgb3BlbmVkYC9gdXBkYXRlZGAgd2hlbiBhIFBSIHdhcyBwdXNoZWQsIGB1bmNoYW5nZWRgIHdoZW4gdGhlIGJyYW5jaCBhbHJlYWR5IGhlbGQgdGhpcyByZXN1bHQuXG4gICAqL1xuICByZWFkb25seSBvdXRjb21lOiAnY3VycmVudCcgfCAnZXJyb3InIHwgJ29wZW5lZCcgfCAncGxhbm5lZCcgfCAndW5jaGFuZ2VkJyB8ICd1bndhdGNoZWQnIHwgJ3VwZGF0ZWQnO1xuICByZWFkb25seSBwck51bWJlcj86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBXaGF0IHtAbGluayBzeW5jVXBzdHJlYW1zfSBzeW5jcywgYW5kIGhvdy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTeW5jVXBzdHJlYW1zT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYnJhbmNoIGVhY2ggUFIgdGFyZ2V0cyBhbmQgZWFjaCB1cGRhdGUgYnJhbmNoIGlzIGN1dCBmcm9tLlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZUJyYW5jaDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHBhdGggdG8gYHVwc3RyZWFtcy5qc29uYCwgd2hpY2ggdGhlIHN5bmMgdXBkYXRlcyB0aGUgcGluIGluLlxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlnUGF0aDogc3RyaW5nO1xuICAvKipcbiAgICogUGxhbiBhbmQgcHJpbnQgZXZlcnkgUFIsIGFuZCBjaGFuZ2Ugbm90aGluZy5cbiAgICovXG4gIHJlYWRvbmx5IGRyeVJ1bjogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE9ubHkgdGhlIGVudHJpZXMgd2l0aCB0aGVzZSBuYW1lcywgb3IgZXZlcnkgZW50cnkgd2hlbiBlbXB0eS5cbiAgICovXG4gIHJlYWRvbmx5IG9ubHk6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9uZSB1cHN0cmVhbSB0aGF0IGB1cHN0cmVhbXMuanNvbmAgbGlzdHM6IGEgZ2l0IG9uZSBvciBhbiBucG0gb25lLlxuICovXG5leHBvcnQgdHlwZSBVcHN0cmVhbUVudHJ5ID0gR2l0VXBzdHJlYW1FbnRyeSB8IE5wbVVwc3RyZWFtRW50cnk7XG5cbi8qKlxuICogVGhlIGNvbnRlbnQgb2YgYHVwc3RyZWFtcy5qc29uYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcHN0cmVhbXNDb25maWcge1xuICB1cHN0cmVhbXM6IHJlYWRvbmx5IFVwc3RyZWFtRW50cnlbXTtcbiAgLyoqXG4gICAqIFRoZSBzaGVsbCBjb21tYW5kIHRoYXQgY2hlY2tzIGV2ZXJ5IGhhbmRsZXIncyByZXN1bHQsIHVubGVzcyBhbiBlbnRyeSBuYW1lcyBpdHMgb3duLlxuICAgKi9cbiAgdmVyaWZ5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdoYXQgb25lIGNvbXBhcmlzb24gb2YgYW4gZW50cnkgd2l0aCBpdHMgdXBzdHJlYW0gZm91bmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBzdHJlYW1TdGF0dXMge1xuICAvKipcbiAgICogVGhlIHVwc3RyZWFtIHBhdGhzIHRoYXQgY2hhbmdlZCBhbmQgYXJlIHdhdGNoZWQsIHNvcnRlZC4gQWx3YXlzIGVtcHR5IGZvciBhbiBucG0gdXBzdHJlYW0uXG4gICAqL1xuICBjaGFuZ2VkUGF0aHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKipcbiAgICogQSBsaW5rIHRoYXQgc2hvd3Mgd2hhdCBjaGFuZ2VkIGJldHdlZW4gdGhlIHBpbiBhbmQgdGhlIGhlYWQuXG4gICAqL1xuICBjb21wYXJlVXJsOiBzdHJpbmc7XG4gIGVudHJ5OiBVcHN0cmVhbUVudHJ5O1xuICAvKipcbiAgICogVGhlIGNvbW1pdCBvciB2ZXJzaW9uIHRoZSB1cHN0cmVhbSBpcyBhdCBub3cuXG4gICAqL1xuICBoZWFkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgY29tbWl0IG9yIHZlcnNpb24gYHVwc3RyZWFtcy5qc29uYCByZWNvcmRzLlxuICAgKi9cbiAgcGluOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBgY3VycmVudGA6IG5vdGhpbmcgdG8gZG8uIGBtb3ZlZGA6IGEgUFIgaXMgZHVlLiBgdW53YXRjaGVkYDogdXBzdHJlYW0gbW92ZWQsIGJ1dCBubyB3YXRjaGVkIHBhdGggY2hhbmdlZC5cbiAgICovXG4gIHN0YXRlOiAnY3VycmVudCcgfCAnbW92ZWQnIHwgJ3Vud2F0Y2hlZCc7XG4gIC8qKlxuICAgKiBXaGV0aGVyIEdpdEh1YiB0cnVuY2F0ZWQgdGhlIGNvbXBhcmUncyBmaWxlIGxpc3QsIHNvIGEgd2F0Y2hlZCBwYXRoIG1heSBiZSBtaXNzaW5nIGZyb20gYGNoYW5nZWRQYXRoc2AuXG4gICAqL1xuICB0cnVuY2F0ZWQ6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBHaXRIdWJDb21taXQge1xuICBzaGE6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEdpdEh1YkNvbXBhcmUge1xuICBmaWxlcz86IHJlYWRvbmx5IEdpdEh1YkNvbXBhcmVGaWxlW107XG59XG5cbi8qKlxuICogT25lIGZpbGUgb2YgYSBHaXRIdWIgY29tcGFyZSwgYXMgdGhlIEFQSSBzcGVsbHMgaXQuXG4gKi9cbmludGVyZmFjZSBHaXRIdWJDb21wYXJlRmlsZSB7XG4gIGZpbGVuYW1lOiBzdHJpbmc7XG5cbiAgcHJldmlvdXNfZmlsZW5hbWU/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBOcG1QYWNrdW1lbnQge1xuICAnZGlzdC10YWdzJzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuaW50ZXJmYWNlIFN0ZXBSZXN1bHQge1xuICByZWFkb25seSBjb21tYW5kOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlc3VsdDogQ29tbWFuZFJlc3VsdDtcbn1cblxuLyoqXG4gKiBUaGUgaGFuZGxlciBhbmQgdmVyaWZ5IHJ1bnMgYSBQUiBib2R5IHJlcG9ydHMuXG4gKi9cbmludGVyZmFjZSBTdGVwUmVzdWx0cyB7XG4gIGhhbmRsZXI6IFN0ZXBSZXN1bHQ7XG4gIHZlcmlmeTogbnVsbCB8IFN0ZXBSZXN1bHQ7XG59XG5cbi8qKlxuICogYHVwc3RyZWFtcy5qc29uYCByZWFkIGxvb3NlbHksIHRvIHdyaXRlIG9uZSB2YWx1ZSBiYWNrIHdpdGhvdXQgZGlzdHVyYmluZyB0aGUgcmVzdC5cbiAqL1xuaW50ZXJmYWNlIFVwc3RyZWFtc0ZpbGVTaGFwZSB7XG4gIHVwc3RyZWFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcbn1cblxuLyoqXG4gKiBHaXRIdWIncyBjb21wYXJlIEFQSSBsaXN0cyBhdCBtb3N0IHRoaXMgbWFueSBmaWxlcywgYW5kIHNheXMgbm90aGluZyB3aGVuIGl0IHN0b3BzLlxuICovXG5jb25zdCBDT01QQVJFX0ZJTEVfTElNSVQgPSAzMDA7XG5cbmNvbnN0IFNIT1JUX1NIQV9MRU5HVEggPSAxMjtcblxuLyoqXG4gKiBUaGUgdGFpbCBvZiBhIGNvbW1hbmQncyBvdXRwdXQgYSBQUiBib2R5IHF1b3RlczogZW5vdWdoIHRvIHJlYWQgYSBmYWlsdXJlLCBzaG9ydCBlbm91Z2ggdG8gc3RheSB1bmRlciBHaXRIdWIncyBib2R5IGxpbWl0LlxuICovXG5jb25zdCBPVVRQVVRfVEFJTF9MSU5FUyA9IDYwO1xuXG4vKipcbiAqIFRoZSBtb3N0IGxpbmVzIHRoYXQgcmVwb3J0IGEgZmFpbHVyZSBhIGZhaWxlZCBzdGVwJ3Mgc2VjdGlvbiBvcGVucyB3aXRoLCBhaGVhZCBvZiBpdHMgb3V0cHV0IHRhaWwuXG4gKi9cbmNvbnN0IEZBSUxVUkVfTElORV9MSU1JVCA9IDIwO1xuXG5jb25zdCBKU09OX0lOREVOVF9TUEFDRVMgPSAyO1xuXG4vKipcbiAqIFRoZSBFU0MgdGhhdCBvcGVucyBhIHRlcm1pbmFsIGNvbnRyb2wgc2VxdWVuY2UsIGVpdGhlciBhcyB0aGUgYnl0ZSBvciBhcyB0aGUgY2FyZXQgdGV4dCBgXltgIGEgbG9nIHZpZXdlciBvciBhblxuICogZWFybGllciBjb3B5IHR1cm5lZCBpdCBpbnRvLiBCb3RoIHJlYWNoZWQgYSBQUiBib2R5OiBjcmVhdGUtb2JzaWRpYW4tcGx1Z2luIzIgY2FycmllZCB0aGUgY2FyZXQgZm9ybS5cbiAqL1xuY29uc3QgRVNDID0gU3RyaW5nLnJhd2AoPzpcXHUwMDFCfFxcXlxcWylgO1xuXG4vKipcbiAqIENvbnRyb2wgU2VxdWVuY2UgSW50cm9kdWNlciBzZXF1ZW5jZXMgKGNvbG9ycywgY3Vyc29yIG1vdmVzKSwgT3BlcmF0aW5nIFN5c3RlbSBDb21tYW5kIHNlcXVlbmNlcyAoaHlwZXJsaW5rcyxcbiAqIHRpdGxlcywgZW5kZWQgYnkgQkVMIG9yIFNULCBhbHNvIGFzIGBeR2ApLCBhbmQgdGhlIHR3by1jaGFyYWN0ZXIgZXNjYXBlcy4gQSB0d28tY2hhcmFjdGVyIGVzY2FwZSBpcyBtYXRjaGVkIG9ubHkgYXNcbiAqIHRoZSBieXRlLCBiZWNhdXNlIGl0cyBjYXJldCB0ZXh0IGFsc28gc3BlbGxzIGFuIG9yZGluYXJ5IHJlZ3VsYXIgZXhwcmVzc2lvbiwgc3VjaCBhcyBgXltBLVpdYC5cbiAqL1xuY29uc3QgVEVSTUlOQUxfQ09OVFJPTF9SRUdfRVhQID0gbmV3IFJlZ0V4cChcbiAgU3RyaW5nLnJhd2Ake0VTQ31cXFtbMC0/XSpbIC0vXSpbQC1+XXwke0VTQ31cXF1bXlxcdTAwMDdcXHUwMDFCXl0qKD86XFx1MDAwN3xcXF5HfCR7RVNDfVxcXFwpfFxcdTAwMUJbQC1aXFxcXC1fXWAsXG4gICdnJ1xuKTtcblxuLyoqXG4gKiBBIGxpbmUgdGhhdCByZXBvcnRzIGEgZmFpbHVyZSwgd2hpY2ggYSBmYWlsZWQgc3RlcCdzIHNlY3Rpb24gcXVvdGVzIGZpcnN0LCBiZWNhdXNlIHRoZSB0YWlsIG1heSBiZSBhIGdyZWVuIHRlc3QgcnVuXG4gKiB0aGF0IGZpbmlzaGVkIGFmdGVyIGl0LlxuICovXG5jb25zdCBGQUlMVVJFX0xJTkVfUkVHX0VYUCA9IC9zdGVwLWZhaWxlZHxcXGJmYWlsKD86c3xlZHx1cmV8aW5nKT9cXGJ8XFxiZXJyb3JcXGJ8XFxibm90IGZvdW5kXFxifFxcYkVSUiF8W1x1MjcxN1x1MDBEN10vaTtcblxuLyoqXG4gKiBXcml0ZXMgdGhlIFBSIGJvZHkuXG4gKlxuICogQHBhcmFtIHBsYW4gLSBUaGUgcGxhbi5cbiAqIEBwYXJhbSBzdGVwcyAtIFRoZSBoYW5kbGVyIGFuZCB2ZXJpZnkgcnVucywgb3IgYG51bGxgIGluIGEgZHJ5IHJ1biwgd2hlcmUgbmVpdGhlciBydW5zLlxuICogQHBhcmFtIGRpZmZTdGF0IC0gYGdpdCBkaWZmIC0tc3RhdGAgb2YgdGhlIHVwZGF0ZSBjb21taXQsIG9yIGBudWxsYCBpbiBhIGRyeSBydW4uXG4gKiBAcmV0dXJucyBUaGUgYm9keSwgaW4gTWFya2Rvd24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFByQm9keShwbGFuOiBTeW5jUGxhbiwgc3RlcHM6IG51bGwgfCBTdGVwUmVzdWx0cywgZGlmZlN0YXQ6IG51bGwgfCBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB7IGVudHJ5LCBoZWFkLCBwaW4gfSA9IHBsYW4uc3RhdHVzO1xuICBjb25zdCBzb3VyY2UgPSBpc0dpdFVwc3RyZWFtKGVudHJ5KSA/IGBcXGAke2VudHJ5LnJlcG99QCR7ZW50cnkucmVmfVxcYGAgOiBgbnBtIFxcYCR7ZW50cnkubnBtfUAke2VudHJ5LnRhZyA/PyAnbGF0ZXN0J31cXGBgO1xuICBjb25zdCBsaW5lcyA9IFtcbiAgICBgVXBzdHJlYW0gXFxgJHtlbnRyeS5uYW1lfVxcYCBtb3ZlZDogJHtzb3VyY2V9IGZyb20gXFxgJHtwaW59XFxgIHRvIFxcYCR7aGVhZH1cXGAuYCxcbiAgICAnJyxcbiAgICBgQ29tcGFyZTogJHtwbGFuLnN0YXR1cy5jb21wYXJlVXJsfWAsXG4gICAgJydcbiAgXTtcblxuICBpZiAoaXNHaXRVcHN0cmVhbShlbnRyeSkpIHtcbiAgICBsaW5lcy5wdXNoKCcjIyMgQ2hhbmdlZCB1cHN0cmVhbSBmaWxlcycsICcnLCAuLi5wbGFuLnN0YXR1cy5jaGFuZ2VkUGF0aHMubWFwKChwYXRoKSA9PiBgLSBcXGAke3BhdGh9XFxgYCkpO1xuICAgIGlmIChwbGFuLnN0YXR1cy50cnVuY2F0ZWQpIHtcbiAgICAgIGxpbmVzLnB1c2goYC0gR2l0SHViIGxpc3RzIGF0IG1vc3QgJHtTdHJpbmcoQ09NUEFSRV9GSUxFX0xJTUlUKX0gZmlsZXM6IG9wZW4gdGhlIGNvbXBhcmUgbGluayBmb3IgdGhlIHJlc3QuYCk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goJycpO1xuICB9XG5cbiAgaWYgKHN0ZXBzID09PSBudWxsKSB7XG4gICAgbGluZXMucHVzaCgnIyMjIEhhbmRsZXInLCAnJywgYFxcYCR7ZW50cnkuaGFuZGxlcn1cXGA6IG5vdCBydW4gKGRyeSBydW4pLmAsICcnKTtcbiAgfSBlbHNlIHtcbiAgICBsaW5lcy5wdXNoKC4uLmRlc2NyaWJlU3RlcCgnSGFuZGxlcicsIHN0ZXBzLmhhbmRsZXIpKTtcbiAgICBpZiAoc3RlcHMudmVyaWZ5ICE9PSBudWxsKSB7XG4gICAgICBsaW5lcy5wdXNoKC4uLmRlc2NyaWJlU3RlcCgnVmVyaWZ5Jywgc3RlcHMudmVyaWZ5KSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRpZmZTdGF0ICE9PSBudWxsKSB7XG4gICAgbGluZXMucHVzaCgnIyMjIEdlbmVyYXRlZCBjaGFuZ2VzJywgJycsICdgYGB0ZXh0JywgY2xlYW5Db21tYW5kT3V0cHV0KGRpZmZTdGF0KS50cmltRW5kKCksICdgYGAnLCAnJyk7XG4gIH1cblxuICBsaW5lcy5wdXNoKCdUaGlzIFBSIHdhcyBvcGVuZWQgYnkgdGhlIHVwc3RyZWFtLXN5bmMgam9iIGFuZCBpcyBuZXZlciBtZXJnZWQgYXV0b21hdGljYWxseS4nKTtcbiAgcmV0dXJuIGAke2xpbmVzLmpvaW4oJ1xcbicpfVxcbmA7XG59XG5cbi8qKlxuICogVHVybnMgYSBjb21tYW5kJ3MgY2FwdHVyZWQgb3V0cHV0IGludG8gcGxhaW4gdGV4dCBhIFBSIGJvZHkgY2FuIHF1b3RlOiB0ZXJtaW5hbCBjb250cm9sIHNlcXVlbmNlcyBhcmUgcmVtb3ZlZCxcbiAqIHdoZXRoZXIgdGhleSBhcnJpdmVkIGFzIEVTQyBieXRlcyBvciBhcyB0aGVpciBjYXJldC1yZW5kZXJlZCBgXltbLi4ubWAgdGV4dCwgYW5kIGEgbGluZSBhIHByb2dyZXNzIGRpc3BsYXkgcmV3cm90ZVxuICogd2l0aCBgXFxyYCBrZWVwcyBvbmx5IGl0cyBsYXN0IHN0YXRlLlxuICpcbiAqIEBwYXJhbSBvdXRwdXQgLSBUaGUgY2FwdHVyZWQgb3V0cHV0LlxuICogQHJldHVybnMgVGhlIHBsYWluIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkNvbW1hbmRPdXRwdXQob3V0cHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gb3V0cHV0XG4gICAgLnJlcGxhY2VBbGwoVEVSTUlOQUxfQ09OVFJPTF9SRUdfRVhQLCAnJylcbiAgICAucmVwbGFjZUFsbCgnXFxyXFxuJywgJ1xcbicpXG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC5tYXAoKGxpbmUpID0+IHRvTGFzdExpbmVTdGF0ZShsaW5lKSlcbiAgICAuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogQ29tcGFyZXMgb25lIGVudHJ5IHdpdGggaXRzIHVwc3RyZWFtLlxuICpcbiAqIEBwYXJhbSBlbnRyeSAtIFRoZSBlbnRyeS5cbiAqIEBwYXJhbSBkZXBlbmRlbmNpZXMgLSBUaGUgb3V0c2lkZSB3b3JsZC5cbiAqIEByZXR1cm5zIFdoYXQgdGhlIGNvbXBhcmlzb24gZm91bmQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb21wYXJlV2l0aFVwc3RyZWFtKGVudHJ5OiBVcHN0cmVhbUVudHJ5LCBkZXBlbmRlbmNpZXM6IFBpY2s8U3luY0RlcGVuZGVuY2llcywgJ2ZldGNoSnNvbic+KTogUHJvbWlzZTxVcHN0cmVhbVN0YXR1cz4ge1xuICBpZiAoIWlzR2l0VXBzdHJlYW0oZW50cnkpKSB7XG4gICAgY29uc3QgdGFnID0gZW50cnkudGFnID8/ICdsYXRlc3QnO1xuICAgIGNvbnN0IHBhY2t1bWVudCA9IGF3YWl0IGRlcGVuZGVuY2llcy5mZXRjaEpzb24oYGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnLyR7ZW50cnkubnBtLnJlcGxhY2UoJy8nLCAnJTJmJyl9YCkgYXMgTnBtUGFja3VtZW50O1xuICAgIGNvbnN0IGhlYWQgPSBwYWNrdW1lbnRbJ2Rpc3QtdGFncyddW3RhZ107XG4gICAgaWYgKGhlYWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBucG0gcGFja2FnZSAke2VudHJ5Lm5wbX0gaGFzIG5vIGRpc3QtdGFnIFwiJHt0YWd9XCIuYCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjaGFuZ2VkUGF0aHM6IFtdLFxuICAgICAgY29tcGFyZVVybDogYGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlLyR7ZW50cnkubnBtfS92LyR7aGVhZH1gLFxuICAgICAgZW50cnksXG4gICAgICBoZWFkLFxuICAgICAgcGluOiBlbnRyeS52ZXJzaW9uLFxuICAgICAgc3RhdGU6IGhlYWQgPT09IGVudHJ5LnZlcnNpb24gPyAnY3VycmVudCcgOiAnbW92ZWQnLFxuICAgICAgdHJ1bmNhdGVkOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjb25zdCBjb21taXQgPSBhd2FpdCBkZXBlbmRlbmNpZXMuZmV0Y2hKc29uKGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7ZW50cnkucmVwb30vY29tbWl0cy8ke2VuY29kZVVSSUNvbXBvbmVudChlbnRyeS5yZWYpfWApIGFzIEdpdEh1YkNvbW1pdDtcbiAgY29uc3QgaGVhZCA9IGNvbW1pdC5zaGE7XG4gIGNvbnN0IGNvbXBhcmVVcmwgPSBgaHR0cHM6Ly9naXRodWIuY29tLyR7ZW50cnkucmVwb30vY29tcGFyZS8ke2VudHJ5LmNvbW1pdH0uLi4ke2hlYWR9YDtcbiAgaWYgKGhlYWQgPT09IGVudHJ5LmNvbW1pdCkge1xuICAgIHJldHVybiB7IGNoYW5nZWRQYXRoczogW10sIGNvbXBhcmVVcmwsIGVudHJ5LCBoZWFkLCBwaW46IGVudHJ5LmNvbW1pdCwgc3RhdGU6ICdjdXJyZW50JywgdHJ1bmNhdGVkOiBmYWxzZSB9O1xuICB9XG5cbiAgY29uc3QgY29tcGFyZSA9IGF3YWl0IGRlcGVuZGVuY2llcy5mZXRjaEpzb24oYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvJHtlbnRyeS5yZXBvfS9jb21wYXJlLyR7ZW50cnkuY29tbWl0fS4uLiR7aGVhZH1gKSBhcyBHaXRIdWJDb21wYXJlO1xuICBjb25zdCBmaWxlcyA9IGNvbXBhcmUuZmlsZXMgPz8gW107XG4gIGNvbnN0IHRvdWNoZWQgPSBuZXcgU2V0KGZpbGVzLmZsYXRNYXAoKGZpbGUpID0+IGZpbGUucHJldmlvdXNfZmlsZW5hbWUgPT09IHVuZGVmaW5lZCA/IFtmaWxlLmZpbGVuYW1lXSA6IFtmaWxlLmZpbGVuYW1lLCBmaWxlLnByZXZpb3VzX2ZpbGVuYW1lXSkpO1xuICBjb25zdCBjaGFuZ2VkUGF0aHMgPSBbLi4udG91Y2hlZF0uZmlsdGVyKChwYXRoKSA9PiBlbnRyeS5wYXRocy5zb21lKChnbG9iKSA9PiBtYXRjaGVzR2xvYihwYXRoLCBnbG9iKSkpLnNvcnQoKTtcbiAgY29uc3QgaXNUcnVuY2F0ZWQgPSBmaWxlcy5sZW5ndGggPj0gQ09NUEFSRV9GSUxFX0xJTUlUO1xuICByZXR1cm4ge1xuICAgIGNoYW5nZWRQYXRocyxcbiAgICBjb21wYXJlVXJsLFxuICAgIGVudHJ5LFxuICAgIGhlYWQsXG4gICAgcGluOiBlbnRyeS5jb21taXQsXG4gICAgc3RhdGU6IGNoYW5nZWRQYXRocy5sZW5ndGggPiAwIHx8IGlzVHJ1bmNhdGVkID8gJ21vdmVkJyA6ICd1bndhdGNoZWQnLFxuICAgIHRydW5jYXRlZDogaXNUcnVuY2F0ZWRcbiAgfTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYW5kIHZhbGlkYXRlcyBhbiBgdXBzdHJlYW1zLmpzb25gLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIGZpbGUncyBjb250ZW50LlxuICogQHJldHVybnMgVGhlIGNvbmZpZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVXBzdHJlYW1zQ29uZmlnKHRleHQ6IHN0cmluZyk6IFVwc3RyZWFtc0NvbmZpZyB7XG4gIGNvbnN0IGNvbmZpZyA9IEpTT04ucGFyc2UodGV4dCkgYXMgUGFydGlhbDxVcHN0cmVhbXNDb25maWc+O1xuICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZmlnLnVwc3RyZWFtcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1cHN0cmVhbXMuanNvbiBoYXMgbm8gXCJ1cHN0cmVhbXNcIiBhcnJheS4nKTtcbiAgfVxuICAvLyBSZWFkIHRocm91Z2ggYFJlZmxlY3QuZ2V0YCwgYmVjYXVzZSBub3RoaW5nIGFib3V0IHRoZSBwYXJzZWQgZW50cmllcyBpcyBrbm93biB5ZXQuXG4gIGNvbnN0IGVudHJpZXM6IHJlYWRvbmx5IG9iamVjdFtdID0gY29uZmlnLnVwc3RyZWFtcztcbiAgY29uc3QgbmFtZXMgPSBuZXcgU2V0PHVua25vd24+KCk7XG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGNvbnN0IG5hbWU6IHVua25vd24gPSBSZWZsZWN0LmdldChlbnRyeSwgJ25hbWUnKTtcbiAgICBjb25zdCBsYWJlbCA9IHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJyA/IGBcIiR7bmFtZX1cImAgOiAnd2l0aCBubyBuYW1lJztcbiAgICBjb25zdCBpc0dpdCA9ICdyZXBvJyBpbiBlbnRyeTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGlzR2l0ID8gWyduYW1lJywgJ3JlcG8nLCAncmVmJywgJ2NvbW1pdCcsICdoYW5kbGVyJ10gOiBbJ25hbWUnLCAnbnBtJywgJ3ZlcnNpb24nLCAnaGFuZGxlciddO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIHJlcXVpcmVkKSB7XG4gICAgICBpZiAodHlwZW9mIFJlZmxlY3QuZ2V0KGVudHJ5LCBrZXkpICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGB1cHN0cmVhbXMuanNvbjogZW50cnkgJHtsYWJlbH0gbmVlZHMgYSBzdHJpbmcgXCIke2tleX1cIi5gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzR2l0ICYmICFBcnJheS5pc0FycmF5KFJlZmxlY3QuZ2V0KGVudHJ5LCAncGF0aHMnKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdXBzdHJlYW1zLmpzb246IGVudHJ5ICR7bGFiZWx9IG5lZWRzIGEgXCJwYXRoc1wiIGFycmF5LmApO1xuICAgIH1cbiAgICBpZiAobmFtZXMuaGFzKG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVwc3RyZWFtcy5qc29uOiB0aGUgbmFtZSAke2xhYmVsfSBpcyB1c2VkIHR3aWNlLmApO1xuICAgIH1cbiAgICBuYW1lcy5hZGQobmFtZSk7XG4gIH1cbiAgcmV0dXJuIGNvbmZpZyBhcyBVcHN0cmVhbXNDb25maWc7XG59XG5cbi8qKlxuICogUGxhbnMgdGhlIFBSIGEgbW92ZWQgdXBzdHJlYW0gYXNrcyBmb3IuXG4gKlxuICogQHBhcmFtIHN0YXR1cyAtIFRoZSBjb21wYXJpc29uIG9mIGEgbW92ZWQgZW50cnkuXG4gKiBAcmV0dXJucyBUaGUgYnJhbmNoIGFuZCB0aXRsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBsYW5TeW5jKHN0YXR1czogVXBzdHJlYW1TdGF0dXMpOiBTeW5jUGxhbiB7XG4gIHJldHVybiB7XG4gICAgYnJhbmNoOiBgdXBzdHJlYW0vJHtzdGF0dXMuZW50cnkubmFtZX1gLFxuICAgIHN0YXR1cyxcbiAgICB0aXRsZTogYGNob3JlKHVwc3RyZWFtKTogc3luYyAke3N0YXR1cy5lbnRyeS5uYW1lfSB0byAke3Nob3J0ZW4oc3RhdHVzLmhlYWQpfWBcbiAgfTtcbn1cblxuLyoqXG4gKiBDaGVja3MgZXZlcnkgZW50cnksIGFuZCBvcGVucyBvciB1cGRhdGVzIG9uZSBQUiBwZXIgbW92ZWQgdXBzdHJlYW0uXG4gKlxuICogQSBoYW5kbGVyIG9yIHZlcmlmeSBmYWlsdXJlIHN0aWxsIG9wZW5zIHRoZSBQUiwgYXMgYSBkcmFmdCB3aXRoIHRoZSBmYWlsdXJlIGluIGl0cyBib2R5LCBzbyBhIGJyZWFraW5nIHVwc3RyZWFtIGNoYW5nZVxuICogaXMgc2VlbiByYXRoZXIgdGhhbiBza2lwcGVkLiBBbiBlcnJvciBpbiB0aGUgc3luYyBpdHNlbGYsIHN1Y2ggYXMgYSBmYWlsZWQgQVBJIGNhbGwsIGlzIHJlcG9ydGVkIGluIHRoZSBlbnRyeSdzIHJlc3VsdFxuICogYW5kIHRoZSBuZXh0IGVudHJ5IHN0aWxsIHJ1bnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBXaGF0IHRvIHN5bmMsIGFuZCBob3cuXG4gKiBAcGFyYW0gZGVwZW5kZW5jaWVzIC0gVGhlIG91dHNpZGUgd29ybGQuXG4gKiBAcmV0dXJucyBPbmUgcmVzdWx0IHBlciBlbnRyeSBjaGVja2VkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3luY1Vwc3RyZWFtcyhvcHRpb25zOiBTeW5jVXBzdHJlYW1zT3B0aW9ucywgZGVwZW5kZW5jaWVzOiBTeW5jRGVwZW5kZW5jaWVzKTogUHJvbWlzZTxTeW5jUmVzdWx0W10+IHtcbiAgY29uc3QgY29uZmlnID0gcGFyc2VVcHN0cmVhbXNDb25maWcocmVhZEZpbGVTeW5jKG9wdGlvbnMuY29uZmlnUGF0aCwgJ3V0Zi04JykpO1xuICBjb25zdCB1bmtub3duID0gb3B0aW9ucy5vbmx5LmZpbHRlcigobmFtZSkgPT4gY29uZmlnLnVwc3RyZWFtcy5ldmVyeSgoZW50cnkpID0+IGVudHJ5Lm5hbWUgIT09IG5hbWUpKTtcbiAgaWYgKHVua25vd24ubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgdXBzdHJlYW1zLmpzb24gaGFzIG5vIGVudHJ5IG5hbWVkICR7dW5rbm93bi5tYXAoKG5hbWUpID0+IGBcIiR7bmFtZX1cImApLmpvaW4oJywgJyl9LmApO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0czogU3luY1Jlc3VsdFtdID0gW107XG4gIGZvciAoY29uc3QgZW50cnkgb2YgY29uZmlnLnVwc3RyZWFtcykge1xuICAgIGlmIChvcHRpb25zLm9ubHkubGVuZ3RoID4gMCAmJiAhb3B0aW9ucy5vbmx5LmluY2x1ZGVzKGVudHJ5Lm5hbWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdHMucHVzaChhd2FpdCBzeW5jRW50cnkoZW50cnksIGNvbmZpZywgb3B0aW9ucywgZGVwZW5kZW5jaWVzKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICBkZXBlbmRlbmNpZXMubG9nKGAke2VudHJ5Lm5hbWV9OiBFUlJPUiAke21lc3NhZ2V9YCk7XG4gICAgICByZXN1bHRzLnB1c2goeyBlcnJvcjogbWVzc2FnZSwgbmFtZTogZW50cnkubmFtZSwgb3V0Y29tZTogJ2Vycm9yJyB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbi8qKlxuICogUmVjb3JkcyBgaGVhZGAgYXMgdGhlIGVudHJ5J3MgcGluIGluIGB1cHN0cmVhbXMuanNvbmAsIHVubGVzcyB0aGUgaGFuZGxlciBhbHJlYWR5IG1vdmVkIGl0LCBrZWVwaW5nIHRoZSBmaWxlJ3NcbiAqIGtleSBvcmRlciBhbmQgZm9ybWF0dGluZy5cbiAqXG4gKiBAcGFyYW0gY29uZmlnUGF0aCAtIFRoZSBwYXRoIHRvIGB1cHN0cmVhbXMuanNvbmAuXG4gKiBAcGFyYW0gc3RhdHVzIC0gVGhlIGNvbXBhcmlzb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVBpbihjb25maWdQYXRoOiBzdHJpbmcsIHN0YXR1czogVXBzdHJlYW1TdGF0dXMpOiB2b2lkIHtcbiAgY29uc3QgdGV4dCA9IHJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmLTgnKTtcbiAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZSh0ZXh0KSBhcyBVcHN0cmVhbXNGaWxlU2hhcGU7XG4gIGNvbnN0IGtleSA9IGlzR2l0VXBzdHJlYW0oc3RhdHVzLmVudHJ5KSA/ICdjb21taXQnIDogJ3ZlcnNpb24nO1xuICBjb25zdCB0YXJnZXQgPSBwYXJzZWQudXBzdHJlYW1zLmZpbmQoKGVudHJ5KSA9PiBlbnRyeVsnbmFtZSddID09PSBzdGF0dXMuZW50cnkubmFtZSk7XG4gIGlmICh0YXJnZXQ/LltrZXldICE9PSBzdGF0dXMucGluKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRhcmdldFtrZXldID0gc3RhdHVzLmhlYWQ7XG4gIHdyaXRlRmlsZVN5bmMoY29uZmlnUGF0aCwgYCR7SlNPTi5zdHJpbmdpZnkocGFyc2VkLCBudWxsLCBKU09OX0lOREVOVF9TUEFDRVMpfVxcbmApO1xufVxuXG5mdW5jdGlvbiBhcHBseVBsYW4ocGxhbjogU3luY1BsYW4sIGNvbmZpZzogVXBzdHJlYW1zQ29uZmlnLCBvcHRpb25zOiBTeW5jVXBzdHJlYW1zT3B0aW9ucywgZGVwZW5kZW5jaWVzOiBTeW5jRGVwZW5kZW5jaWVzKTogU3luY1Jlc3VsdCB7XG4gIGNvbnN0IHsgZW50cnkgfSA9IHBsYW4uc3RhdHVzO1xuICAvLyBObyBjb2xvcjogdGhlIG91dHB1dCBpcyBxdW90ZWQgaW4gYSBQUiBib2R5LCB3aGVyZSBhIGNvbG9yIGNvZGUgaXMgb25seSBub2lzZS4gYENJYCBpcyBsZWZ0IGFsb25lLCBiZWNhdXNlIGl0XG4gIC8vIGNoYW5nZXMgd2hhdCBzb21lIHRvb2xzIGRvLCBub3QganVzdCBob3cgdGhleSBwcmludC5cbiAgY29uc3QgZW52ID0geyBGT1JDRV9DT0xPUjogJzAnLCBOT19DT0xPUjogJzEnLCBVUFNUUkVBTV9OQU1FOiBlbnRyeS5uYW1lLCBVUFNUUkVBTV9UQVJHRVQ6IHBsYW4uc3RhdHVzLmhlYWQgfTtcbiAgY29uc3QgaGFuZGxlcjogU3RlcFJlc3VsdCA9IHsgY29tbWFuZDogZW50cnkuaGFuZGxlciwgcmVzdWx0OiBkZXBlbmRlbmNpZXMuc2hlbGwoZW50cnkuaGFuZGxlciwgZW52KSB9O1xuICB3cml0ZVBpbihvcHRpb25zLmNvbmZpZ1BhdGgsIHBsYW4uc3RhdHVzKTtcbiAgY29uc3QgdmVyaWZ5Q29tbWFuZCA9IGVudHJ5LnZlcmlmeSA/PyBjb25maWcudmVyaWZ5O1xuICBjb25zdCB2ZXJpZnk6IG51bGwgfCBTdGVwUmVzdWx0ID0gdmVyaWZ5Q29tbWFuZCA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IHsgY29tbWFuZDogdmVyaWZ5Q29tbWFuZCwgcmVzdWx0OiBkZXBlbmRlbmNpZXMuc2hlbGwodmVyaWZ5Q29tbWFuZCwgZW52KSB9O1xuICBjb25zdCBpc0ZhaWxlZCA9IGhhbmRsZXIucmVzdWx0LmV4aXRDb2RlICE9PSAwIHx8ICh2ZXJpZnkgIT09IG51bGwgJiYgdmVyaWZ5LnJlc3VsdC5leGl0Q29kZSAhPT0gMCk7XG5cbiAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2l0JywgWydhZGQnLCAnLS1hbGwnXSk7XG4gIGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2dpdCcsIFsnY29tbWl0JywgJy0tbm8tdmVyaWZ5JywgJy0tbWVzc2FnZScsIHBsYW4udGl0bGVdKTtcbiAgY29uc3QgZGlmZlN0YXQgPSBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXMsICdnaXQnLCBbJ2RpZmYnLCAnLS1zdGF0JywgJ0hFQUR+MScsICdIRUFEJ10pO1xuXG4gIGNvbnN0IGJvZHkgPSBidWlsZFByQm9keShwbGFuLCB7IGhhbmRsZXIsIHZlcmlmeSB9LCBkaWZmU3RhdCk7XG4gIGNvbnN0IGlzUmVtb3RlQnJhbmNoID0gZGVwZW5kZW5jaWVzLmV4ZWMoJ2dpdCcsIFsnbHMtcmVtb3RlJywgJy0tZXhpdC1jb2RlJywgJy0taGVhZHMnLCAnb3JpZ2luJywgcGxhbi5icmFuY2hdKS5leGl0Q29kZSA9PT0gMDtcbiAgaWYgKGlzUmVtb3RlQnJhbmNoKSB7XG4gICAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2l0JywgWydmZXRjaCcsICdvcmlnaW4nLCBwbGFuLmJyYW5jaF0pO1xuICAgIGlmIChkZXBlbmRlbmNpZXMuZXhlYygnZ2l0JywgWydkaWZmJywgJy0tcXVpZXQnLCAnRkVUQ0hfSEVBRCcsICdIRUFEJ10pLmV4aXRDb2RlID09PSAwKSB7XG4gICAgICAvLyBUaGUgYm9keSBpcyBzdGlsbCByZXdyaXR0ZW4sIHNvIGEgY2hhbmdlIHRvIGhvdyBpdCBpcyB3cml0dGVuIHJlYWNoZXMgYSBQUiB3aG9zZSBicmFuY2ggaGFzIG5vdCBtb3ZlZC5cbiAgICAgIGNvbnN0IG9wZW4gPSBmaW5kT3BlblByKGRlcGVuZGVuY2llcywgcGxhbi5icmFuY2gpO1xuICAgICAgaWYgKG9wZW4gIT09IG51bGwpIHtcbiAgICAgICAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2gnLCBbJ3ByJywgJ2VkaXQnLCBvcGVuLCAnLS1ib2R5JywgYm9keV0pO1xuICAgICAgfVxuICAgICAgZGVwZW5kZW5jaWVzLmxvZyhgJHtlbnRyeS5uYW1lfTogJHtwbGFuLmJyYW5jaH0gYWxyZWFkeSBob2xkcyB0aGlzIHJlc3VsdDsgbm90aGluZyBwdXNoZWQke29wZW4gPT09IG51bGwgPyAnJyA6IGAsIFBSICMke29wZW59J3MgYm9keSByZXdyaXR0ZW5gfS5gKTtcbiAgICAgIHJldHVybiB7IG5hbWU6IGVudHJ5Lm5hbWUsIG91dGNvbWU6ICd1bmNoYW5nZWQnIH07XG4gICAgfVxuICB9XG4gIGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2dpdCcsIFsncHVzaCcsICctLWZvcmNlJywgJ29yaWdpbicsIGBIRUFEOnJlZnMvaGVhZHMvJHtwbGFuLmJyYW5jaH1gXSk7XG5cbiAgY29uc3QgZXhpc3RpbmcgPSBmaW5kT3BlblByKGRlcGVuZGVuY2llcywgcGxhbi5icmFuY2gpO1xuICBpZiAoZXhpc3RpbmcgIT09IG51bGwpIHtcbiAgICBjb25zdCBwck51bWJlciA9IE51bWJlcihleGlzdGluZyk7XG4gICAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2gnLCBbJ3ByJywgJ2VkaXQnLCBleGlzdGluZywgJy0tdGl0bGUnLCBwbGFuLnRpdGxlLCAnLS1ib2R5JywgYm9keV0pO1xuICAgIGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2doJywgaXNGYWlsZWQgPyBbJ3ByJywgJ3JlYWR5JywgZXhpc3RpbmcsICctLXVuZG8nXSA6IFsncHInLCAncmVhZHknLCBleGlzdGluZ10pO1xuICAgIGRlcGVuZGVuY2llcy5sb2coYCR7ZW50cnkubmFtZX06IHVwZGF0ZWQgUFIgIyR7ZXhpc3Rpbmd9JHtpc0ZhaWxlZCA/ICcgKGRyYWZ0OiBhIHN0ZXAgZmFpbGVkKScgOiAnJ30uYCk7XG4gICAgcmV0dXJuIHsgbmFtZTogZW50cnkubmFtZSwgb3V0Y29tZTogJ3VwZGF0ZWQnLCBwck51bWJlciB9O1xuICB9XG5cbiAgY29uc3QgdXJsID0gZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2gnLCBbXG4gICAgJ3ByJyxcbiAgICAnY3JlYXRlJyxcbiAgICAnLS1iYXNlJyxcbiAgICBvcHRpb25zLmJhc2VCcmFuY2gsXG4gICAgJy0taGVhZCcsXG4gICAgcGxhbi5icmFuY2gsXG4gICAgJy0tdGl0bGUnLFxuICAgIHBsYW4udGl0bGUsXG4gICAgJy0tYm9keScsXG4gICAgYm9keSxcbiAgICAuLi4oaXNGYWlsZWQgPyBbJy0tZHJhZnQnXSA6IFtdKVxuICBdKS50cmltKCk7XG4gIGRlcGVuZGVuY2llcy5sb2coYCR7ZW50cnkubmFtZX06IG9wZW5lZCAke3VybH0ke2lzRmFpbGVkID8gJyAoZHJhZnQ6IGEgc3RlcCBmYWlsZWQpJyA6ICcnfS5gKTtcbiAgY29uc3QgcHJOdW1iZXIgPSBOdW1iZXIoL1xcL3B1bGxcXC8oPzxOdW1iZXI+XFxkKykvLmV4ZWModXJsKT8uZ3JvdXBzPy5bJ051bWJlciddID8/IE5hTik7XG4gIHJldHVybiBOdW1iZXIuaXNOYU4ocHJOdW1iZXIpID8geyBuYW1lOiBlbnRyeS5uYW1lLCBvdXRjb21lOiAnb3BlbmVkJyB9IDogeyBuYW1lOiBlbnRyeS5uYW1lLCBvdXRjb21lOiAnb3BlbmVkJywgcHJOdW1iZXIgfTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVTdGVwKGhlYWRpbmc6IHN0cmluZywgc3RlcDogU3RlcFJlc3VsdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgaXNQYXNzZWQgPSBzdGVwLnJlc3VsdC5leGl0Q29kZSA9PT0gMDtcbiAgY29uc3Qgb3V0cHV0TGluZXMgPSBjbGVhbkNvbW1hbmRPdXRwdXQoc3RlcC5yZXN1bHQub3V0cHV0KS50cmltRW5kKCkuc3BsaXQoJ1xcbicpO1xuICBjb25zdCB0YWlsID0gb3V0cHV0TGluZXMuc2xpY2UoLU9VVFBVVF9UQUlMX0xJTkVTKS5qb2luKCdcXG4nKTtcbiAgY29uc3QgZmFpbHVyZUxpbmVzID0gaXNQYXNzZWQgPyBbXSA6IG91dHB1dExpbmVzLmZpbHRlcigobGluZSkgPT4gRkFJTFVSRV9MSU5FX1JFR19FWFAudGVzdChsaW5lKSkuc2xpY2UoMCwgRkFJTFVSRV9MSU5FX0xJTUlUKTtcbiAgcmV0dXJuIFtcbiAgICBgIyMjICR7aGVhZGluZ31gLFxuICAgICcnLFxuICAgIGBcXGAke3N0ZXAuY29tbWFuZH1cXGA6ICR7aXNQYXNzZWQgPyAncGFzc2VkJyA6IGAqKkZBSUxFRCoqIChleGl0ICR7U3RyaW5nKHN0ZXAucmVzdWx0LmV4aXRDb2RlKX0pYH0uYCxcbiAgICAnJyxcbiAgICAuLi4oZmFpbHVyZUxpbmVzLmxlbmd0aCA9PT0gMCA/IFtdIDogWydMaW5lcyByZXBvcnRpbmcgdGhlIGZhaWx1cmU6JywgJycsICdgYGB0ZXh0JywgLi4uZmFpbHVyZUxpbmVzLCAnYGBgJywgJyddKSxcbiAgICBpc1Bhc3NlZCA/ICc8ZGV0YWlscz48c3VtbWFyeT5PdXRwdXQ8L3N1bW1hcnk+JyA6ICc8ZGV0YWlscyBvcGVuPjxzdW1tYXJ5Pk91dHB1dDwvc3VtbWFyeT4nLFxuICAgICcnLFxuICAgICdgYGB0ZXh0JyxcbiAgICB0YWlsLFxuICAgICdgYGAnLFxuICAgICcnLFxuICAgICc8L2RldGFpbHM+JyxcbiAgICAnJ1xuICBdO1xufVxuXG5mdW5jdGlvbiBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXM6IFN5bmNEZXBlbmRlbmNpZXMsIGZpbGU6IHN0cmluZywgYXJndW1lbnRzXzogcmVhZG9ubHkgc3RyaW5nW10pOiBzdHJpbmcge1xuICBjb25zdCByZXN1bHQgPSBkZXBlbmRlbmNpZXMuZXhlYyhmaWxlLCBhcmd1bWVudHNfKTtcbiAgaWYgKHJlc3VsdC5leGl0Q29kZSAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtmaWxlfSAke2FyZ3VtZW50c18uam9pbignICcpfSBmYWlsZWQgKGV4aXQgJHtTdHJpbmcocmVzdWx0LmV4aXRDb2RlKX0pOiAke3Jlc3VsdC5vdXRwdXQudHJpbSgpfWApO1xuICB9XG4gIHJldHVybiByZXN1bHQub3V0cHV0O1xufVxuXG5mdW5jdGlvbiBmaW5kT3BlblByKGRlcGVuZGVuY2llczogU3luY0RlcGVuZGVuY2llcywgYnJhbmNoOiBzdHJpbmcpOiBudWxsIHwgc3RyaW5nIHtcbiAgY29uc3QgbnVtYmVyID0gZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2gnLCBbJ3ByJywgJ2xpc3QnLCAnLS1oZWFkJywgYnJhbmNoLCAnLS1zdGF0ZScsICdvcGVuJywgJy0tanNvbicsICdudW1iZXInLCAnLS1qcScsICcuWzBdLm51bWJlciddKS50cmltKCk7XG4gIHJldHVybiBudW1iZXIgPT09ICcnIHx8IG51bWJlciA9PT0gJ251bGwnID8gbnVsbCA6IG51bWJlcjtcbn1cblxuZnVuY3Rpb24gaXNHaXRVcHN0cmVhbShlbnRyeTogVXBzdHJlYW1FbnRyeSk6IGVudHJ5IGlzIEdpdFVwc3RyZWFtRW50cnkge1xuICByZXR1cm4gJ3JlcG8nIGluIGVudHJ5O1xufVxuXG5mdW5jdGlvbiBzaG9ydGVuKGhlYWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiAvXlswLTlhLWZdezQwfSQvLnRlc3QoaGVhZCkgPyBoZWFkLnNsaWNlKDAsIFNIT1JUX1NIQV9MRU5HVEgpIDogaGVhZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3luY0VudHJ5KGVudHJ5OiBVcHN0cmVhbUVudHJ5LCBjb25maWc6IFVwc3RyZWFtc0NvbmZpZywgb3B0aW9uczogU3luY1Vwc3RyZWFtc09wdGlvbnMsIGRlcGVuZGVuY2llczogU3luY0RlcGVuZGVuY2llcyk6IFByb21pc2U8U3luY1Jlc3VsdD4ge1xuICBjb25zdCBzdGF0dXMgPSBhd2FpdCBjb21wYXJlV2l0aFVwc3RyZWFtKGVudHJ5LCBkZXBlbmRlbmNpZXMpO1xuICBpZiAoc3RhdHVzLnN0YXRlID09PSAnY3VycmVudCcpIHtcbiAgICBkZXBlbmRlbmNpZXMubG9nKGAke2VudHJ5Lm5hbWV9OiBjdXJyZW50IGF0ICR7c2hvcnRlbihzdGF0dXMuaGVhZCl9LmApO1xuICAgIHJldHVybiB7IG5hbWU6IGVudHJ5Lm5hbWUsIG91dGNvbWU6ICdjdXJyZW50JyB9O1xuICB9XG4gIGlmIChzdGF0dXMuc3RhdGUgPT09ICd1bndhdGNoZWQnKSB7XG4gICAgZGVwZW5kZW5jaWVzLmxvZyhgJHtlbnRyeS5uYW1lfTogbW92ZWQgdG8gJHtzaG9ydGVuKHN0YXR1cy5oZWFkKX0sIGJ1dCBubyB3YXRjaGVkIHBhdGggY2hhbmdlZCBzaW5jZSAke3Nob3J0ZW4oc3RhdHVzLnBpbil9LmApO1xuICAgIHJldHVybiB7IG5hbWU6IGVudHJ5Lm5hbWUsIG91dGNvbWU6ICd1bndhdGNoZWQnIH07XG4gIH1cblxuICBjb25zdCBwbGFuID0gcGxhblN5bmMoc3RhdHVzKTtcbiAgaWYgKG9wdGlvbnMuZHJ5UnVuKSB7XG4gICAgZGVwZW5kZW5jaWVzLmxvZyhgJHtlbnRyeS5uYW1lfTogbW92ZWQgZnJvbSAke3Nob3J0ZW4oc3RhdHVzLnBpbil9IHRvICR7c2hvcnRlbihzdGF0dXMuaGVhZCl9LiBXb3VsZCBwdXNoICR7cGxhbi5icmFuY2h9IGFuZCBvcGVuOmApO1xuICAgIGRlcGVuZGVuY2llcy5sb2coYCAgdGl0bGU6ICR7cGxhbi50aXRsZX1gKTtcbiAgICBkZXBlbmRlbmNpZXMubG9nKGJ1aWxkUHJCb2R5KHBsYW4sIG51bGwsIG51bGwpLnJlcGxhY2VBbGwoL14vZ20sICcgIHwgJykpO1xuICAgIHJldHVybiB7IG5hbWU6IGVudHJ5Lm5hbWUsIG91dGNvbWU6ICdwbGFubmVkJyB9O1xuICB9XG5cbiAgLy8gVGhlIHVwZGF0ZSBjb21taXQgdGFrZXMgZXZlcnkgZmlsZSBpbiB0aGUgdHJlZSwgc28gYSBmaWxlIGxlZnQgbHlpbmcgYXJvdW5kIHdvdWxkIGJlIHB1c2hlZCB3aXRoIGl0LlxuICBjb25zdCBkaXJ0eSA9IGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2dpdCcsIFsnc3RhdHVzJywgJy0tcG9yY2VsYWluJ10pLnRyaW0oKTtcbiAgaWYgKGRpcnR5ICE9PSAnJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgdGhlIHdvcmtpbmcgdHJlZSBpcyBub3QgY2xlYW4sIGFuZCB0aGUgdXBkYXRlIGNvbW1pdCB3b3VsZCB0YWtlIHRoZXNlIGZpbGVzIHdpdGggaXQ6XFxuJHtkaXJ0eX1gKTtcbiAgfVxuICBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXMsICdnaXQnLCBbJ2ZldGNoJywgJ29yaWdpbicsIG9wdGlvbnMuYmFzZUJyYW5jaF0pO1xuICBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXMsICdnaXQnLCBbJ2NoZWNrb3V0JywgJy1CJywgcGxhbi5icmFuY2gsIGBvcmlnaW4vJHtvcHRpb25zLmJhc2VCcmFuY2h9YF0pO1xuICB0cnkge1xuICAgIHJldHVybiBhcHBseVBsYW4ocGxhbiwgY29uZmlnLCBvcHRpb25zLCBkZXBlbmRlbmNpZXMpO1xuICB9IGZpbmFsbHkge1xuICAgIGRlcGVuZGVuY2llcy5leGVjKCdnaXQnLCBbJ2NoZWNrb3V0JywgJy0tZm9yY2UnLCBvcHRpb25zLmJhc2VCcmFuY2hdKTtcbiAgICBkZXBlbmRlbmNpZXMuZXhlYygnZ2l0JywgWydicmFuY2gnLCAnLS1kZWxldGUnLCAnLS1mb3JjZScsIHBsYW4uYnJhbmNoXSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9MYXN0TGluZVN0YXRlKGxpbmU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHN0YXRlcyA9IGxpbmUucmVwbGFjZSgvXFxyKyQvLCAnJyk7XG4gIHJldHVybiBzdGF0ZXMuc2xpY2Uoc3RhdGVzLmxhc3RJbmRleE9mKCdcXHInKSArIDEpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFTQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsbUJBQW1CO0FBMk41QixNQUFNLHFCQUFxQjtBQUUzQixNQUFNLG1CQUFtQjtBQUt6QixNQUFNLG9CQUFvQjtBQUsxQixNQUFNLHFCQUFxQjtBQUUzQixNQUFNLHFCQUFxQjtBQU0zQixNQUFNLE1BQU0sT0FBTztBQU9uQixNQUFNLDJCQUEyQixJQUFJO0FBQUEsRUFDbkMsT0FBTyxNQUFNLEdBQUcsdUJBQXVCLEdBQUcsb0NBQW9DLEdBQUc7QUFBQSxFQUNqRjtBQUNGO0FBTUEsTUFBTSx1QkFBdUI7QUFVdEIsU0FBUyxZQUFZLE1BQWdCLE9BQTJCLFVBQWlDO0FBQ3RHLFFBQU0sRUFBRSxPQUFPLE1BQU0sSUFBSSxJQUFJLEtBQUs7QUFDbEMsUUFBTSxTQUFTLGNBQWMsS0FBSyxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxHQUFHLE9BQU8sU0FBUyxNQUFNLEdBQUcsSUFBSSxNQUFNLE9BQU8sUUFBUTtBQUNwSCxRQUFNLFFBQVE7QUFBQSxJQUNaLGNBQWMsTUFBTSxJQUFJLGFBQWEsTUFBTSxXQUFXLEdBQUcsV0FBVyxJQUFJO0FBQUEsSUFDeEU7QUFBQSxJQUNBLFlBQVksS0FBSyxPQUFPLFVBQVU7QUFBQSxJQUNsQztB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QU0sb0JBQW9CLE9BQU8sWUFBWTtBQUM1RCxNQUFJLE9BQU8sVUFBVSxXQUFXO0FBQzlCLGlCQUFhLElBQUksR0FBRyxNQUFNLElBQUksZ0JBQWdCLFFBQVEsT0FBTyxJQUFJLENBQUMsR0FBRztBQUNyRSxXQUFPLEVBQUUsTUFBTSxNQUFNLE1BQU0sU0FBUyxVQUFVO0FBQUEsRUFDaEQ7QUFDQSxNQUFJLE9BQU8sVUFBVSxhQUFhO0FBQ2hDLGlCQUFhLElBQUksR0FBRyxNQUFNLElBQUksY0FBYyxRQUFRLE9BQU8sSUFBSSxDQUFDLHVDQUF1QyxRQUFRLE9BQU8sR0FBRyxDQUFDLEdBQUc7QUFDN0gsV0FBTyxFQUFFLE1BQU0sTUFBTSxNQUFNLFNBQVMsWUFBWTtBQUFBLEVBQ2xEO0FBRUEsUUFBTSxPQUFPLFNBQVMsTUFBTTtBQUM1QixNQUFJLFFBQVEsUUFBUTtBQUNsQixpQkFBYSxJQUFJLEdBQUcsTUFBTSxJQUFJLGdCQUFnQixRQUFRLE9BQU8sR0FBRyxDQUFDLE9BQU8sUUFBUSxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxNQUFNLFlBQVk7QUFDbkksaUJBQWEsSUFBSSxZQUFZLEtBQUssS0FBSyxFQUFFO0FBQ3pDLGlCQUFhLElBQUksWUFBWSxNQUFNLE1BQU0sSUFBSSxFQUFFLFdBQVcsT0FBTyxNQUFNLENBQUM7QUFDeEUsV0FBTyxFQUFFLE1BQU0sTUFBTSxNQUFNLFNBQVMsVUFBVTtBQUFBLEVBQ2hEO0FBR0EsUUFBTSxRQUFRLFlBQVksY0FBYyxPQUFPLENBQUMsVUFBVSxhQUFhLENBQUMsRUFBRSxLQUFLO0FBQy9FLE1BQUksVUFBVSxJQUFJO0FBQ2hCLFVBQU0sSUFBSSxNQUFNO0FBQUEsRUFBeUYsS0FBSyxFQUFFO0FBQUEsRUFDbEg7QUFDQSxjQUFZLGNBQWMsT0FBTyxDQUFDLFNBQVMsVUFBVSxRQUFRLFVBQVUsQ0FBQztBQUN4RSxjQUFZLGNBQWMsT0FBTyxDQUFDLFlBQVksTUFBTSxLQUFLLFFBQVEsVUFBVSxRQUFRLFVBQVUsRUFBRSxDQUFDO0FBQ2hHLE1BQUk7QUFDRixXQUFPLFVBQVUsTUFBTSxRQUFRLFNBQVMsWUFBWTtBQUFBLEVBQ3RELFVBQUU7QUFDQSxpQkFBYSxLQUFLLE9BQU8sQ0FBQyxZQUFZLFdBQVcsUUFBUSxVQUFVLENBQUM7QUFDcEUsaUJBQWEsS0FBSyxPQUFPLENBQUMsVUFBVSxZQUFZLFdBQVcsS0FBSyxNQUFNLENBQUM7QUFBQSxFQUN6RTtBQUNGO0FBRUEsU0FBUyxnQkFBZ0IsTUFBc0I7QUFDN0MsUUFBTSxTQUFTLEtBQUssUUFBUSxRQUFRLEVBQUU7QUFDdEMsU0FBTyxPQUFPLE1BQU0sT0FBTyxZQUFZLElBQUksSUFBSSxDQUFDO0FBQ2xEOyIsCiAgIm5hbWVzIjogWyJoZWFkIiwgInByTnVtYmVyIl0KfQo=
|
|
@@ -181,13 +181,27 @@ export declare enum VersionUpdateType {
|
|
|
181
181
|
PrePatch = "prepatch",
|
|
182
182
|
PreRelease = "prerelease"
|
|
183
183
|
}
|
|
184
|
+
/**
|
|
185
|
+
* Where `HEAD` stood when a release started: the branch it is on (empty for a detached `HEAD`) and its commit.
|
|
186
|
+
*/
|
|
187
|
+
export interface GitHeadState {
|
|
188
|
+
/**
|
|
189
|
+
* The checked-out branch, or an empty string for a detached `HEAD`.
|
|
190
|
+
*/
|
|
191
|
+
readonly branch: string;
|
|
192
|
+
/**
|
|
193
|
+
* The commit `HEAD` points at.
|
|
194
|
+
*/
|
|
195
|
+
readonly sha: string;
|
|
196
|
+
}
|
|
184
197
|
/**
|
|
185
198
|
* Creates a Git tag for the new version.
|
|
186
199
|
*
|
|
187
200
|
* @param newVersion - The new version number to use for the tag.
|
|
201
|
+
* @param commitSha - The commit to tag. When omitted, `HEAD` is tagged.
|
|
188
202
|
* @returns A {@link Promise} that resolves when the tag has been created.
|
|
189
203
|
*/
|
|
190
|
-
export declare function addGitTag(newVersion: string): Promise<void>;
|
|
204
|
+
export declare function addGitTag(newVersion: string, commitSha?: string): Promise<void>;
|
|
191
205
|
/**
|
|
192
206
|
* Adds updated files to the Git staging area and commits them with the new version message.
|
|
193
207
|
*
|
|
@@ -227,6 +241,21 @@ export declare function assertGitInstalled(): Promise<void>;
|
|
|
227
241
|
* @throws Error if the Git repository is not clean.
|
|
228
242
|
*/
|
|
229
243
|
export declare function assertGitRepoClean(): Promise<void>;
|
|
244
|
+
/**
|
|
245
|
+
* Asserts that `HEAD` is the release commit: on the branch the release started on, a single commit on top of the
|
|
246
|
+
* commit it started from, with the `chore: release <version>` subject.
|
|
247
|
+
*
|
|
248
|
+
* A successful `git commit` proves only that a commit was made somewhere. A checkout switched underneath a
|
|
249
|
+
* release by another process takes the commit onto that other branch, and when it is switched back the tag and
|
|
250
|
+
* the GitHub release go out on the commit before the bump, with the bump left staged in the working tree and nothing
|
|
251
|
+
* reported. So the release checks where the commit landed before tagging, and again before pushing.
|
|
252
|
+
*
|
|
253
|
+
* @param newVersion - The version being released.
|
|
254
|
+
* @param startHead - Where `HEAD` stood when the release started.
|
|
255
|
+
* @param stage - The step about to run, for the error message (for example `tagging`).
|
|
256
|
+
* @returns A {@link Promise} that resolves to the release commit's SHA.
|
|
257
|
+
*/
|
|
258
|
+
export declare function assertReleaseCommitLanded(newVersion: string, startHead: GitHeadState, stage: string): Promise<string>;
|
|
230
259
|
/**
|
|
231
260
|
* Wraps any bare `http(s)://` URL in the given text in angle brackets (`<url>`) so that text emitted
|
|
232
261
|
* into a Markdown document (such as a generated changelog bullet) passes markdownlint's
|
|
@@ -273,6 +302,12 @@ export declare function getVersionUpdateType(versionUpdateType: string): Version
|
|
|
273
302
|
* @returns A {@link Promise} that resolves when the push operation is complete.
|
|
274
303
|
*/
|
|
275
304
|
export declare function gitPush(): Promise<void>;
|
|
305
|
+
/**
|
|
306
|
+
* Reads where `HEAD` stands now.
|
|
307
|
+
*
|
|
308
|
+
* @returns A {@link Promise} that resolves to the current {@link GitHeadState}.
|
|
309
|
+
*/
|
|
310
|
+
export declare function readGitHeadState(): Promise<GitHeadState>;
|
|
276
311
|
/**
|
|
277
312
|
* The flags {@link parseVersionArguments} recognizes, in the shape Node's `parseArgs` takes. Exported so a wrapper
|
|
278
313
|
* that adds flags of its own can parse them all in one pass and still read these through
|