gitlab-ci-local 4.63.0 → 4.64.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/LICENSE +1 -1
- package/README.md +10 -0
- package/package.json +5 -5
- package/src/argv.js +8 -1
- package/src/data-expander.js +2 -10
- package/src/index.js +15 -3
- package/src/job.js +95 -10
- package/src/parser-includes.js +111 -67
- package/src/parser.js +3 -7
- package/src/schema/schema.js +227 -112
- package/src/utils.js +15 -31
- package/src/validator.js +2 -2
- package/src/variables-from-files.js +15 -8
package/src/utils.js
CHANGED
|
@@ -10,7 +10,6 @@ import assert from "assert";
|
|
|
10
10
|
import { GitData } from "./git-data.js";
|
|
11
11
|
import globby from "globby";
|
|
12
12
|
import micromatch from "micromatch";
|
|
13
|
-
import axios from "axios";
|
|
14
13
|
import path from "path";
|
|
15
14
|
export class Utils {
|
|
16
15
|
static bashMulti(scripts, cwd = process.cwd()) {
|
|
@@ -349,35 +348,6 @@ export class Utils {
|
|
|
349
348
|
static isObject(v) {
|
|
350
349
|
return Object.getPrototypeOf(v) === Object.prototype;
|
|
351
350
|
}
|
|
352
|
-
static async remoteFileExist(cwd, file, ref, domain, projectPath, protocol, port) {
|
|
353
|
-
switch (protocol) {
|
|
354
|
-
case "ssh":
|
|
355
|
-
case "git":
|
|
356
|
-
try {
|
|
357
|
-
await Utils.spawn(`git archive --remote=ssh://git@${domain}:${port}/${projectPath}.git ${ref} ${file}`.split(" "), cwd);
|
|
358
|
-
return true;
|
|
359
|
-
}
|
|
360
|
-
catch (e) {
|
|
361
|
-
if (!e.stderr.includes(`remote: fatal: pathspec '${file}' did not match any files`))
|
|
362
|
-
throw new Error(e);
|
|
363
|
-
return false;
|
|
364
|
-
}
|
|
365
|
-
case "http":
|
|
366
|
-
case "https": {
|
|
367
|
-
try {
|
|
368
|
-
const axiosConfig = Utils.getAxiosProxyConfig();
|
|
369
|
-
const { status } = await axios.get(`${protocol}://${domain}:${port}/${projectPath}/-/raw/${ref}/${file}`, axiosConfig);
|
|
370
|
-
return (status === 200);
|
|
371
|
-
}
|
|
372
|
-
catch {
|
|
373
|
-
return false;
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
default: {
|
|
377
|
-
Utils.switchStatementExhaustiveCheck(protocol);
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
351
|
static switchStatementExhaustiveCheck(param) {
|
|
382
352
|
// https://dev.to/babak/exhaustive-type-checking-with-typescript-4l3f
|
|
383
353
|
throw new Error(`Unhandled case ${param}`);
|
|
@@ -403,5 +373,19 @@ export class Utils {
|
|
|
403
373
|
}
|
|
404
374
|
return {};
|
|
405
375
|
}
|
|
376
|
+
static normalizeVariables(variable) {
|
|
377
|
+
if (variable === null) {
|
|
378
|
+
return ""; // variable's values are nullable
|
|
379
|
+
}
|
|
380
|
+
else if (Utils.isObject(variable)) {
|
|
381
|
+
if (variable["expand"] === false) {
|
|
382
|
+
return String(variable["value"]).replaceAll("$", () => "$$");
|
|
383
|
+
}
|
|
384
|
+
return String(variable["value"]);
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
return String(variable);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
406
390
|
}
|
|
407
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzVCLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsR0FBRyxFQUFVLE1BQU0sVUFBVSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMxQixPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxTQUFTLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFNUIsT0FBTyxFQUFDLE9BQU8sRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxVQUFVLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sS0FBMkIsTUFBTSxPQUFPLENBQUM7QUFDaEQsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBZXhCLE1BQU0sT0FBTyxLQUFLO0lBQ2QsTUFBTSxDQUFDLFNBQVMsQ0FBRSxPQUFpQixFQUFFLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFO1FBQ3BELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFJLENBQUUsV0FBbUIsRUFBRSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUNqRCxPQUFPLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBQyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJ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QUFRLENBQUMsQ0FBQztZQUNuQyxPQUFPO2dCQUNILEtBQUssRUFBRTtvQkFDSCxJQUFJLEVBQUUsUUFBUSxDQUFDLFFBQVE7b0JBQ3ZCLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtvQkFDeEQsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7aUJBQy9DO2FBQ0osQ0FBQztRQUNOLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcIi4vZ2xvYmFsLmpzXCI7XG5pbXBvcnQge1JFMkpTfSBmcm9tIFwicmUyanNcIjtcbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7Sm9iLCBKb2JSdWxlfSBmcm9tIFwiLi9qb2IuanNcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCBjaGVja3N1bSBmcm9tIFwiY2hlY2tzdW1cIjtcbmltcG9ydCBiYXNlNjR1cmwgZnJvbSBcImJhc2U2NHVybFwiO1xuaW1wb3J0IGV4ZWNhIGZyb20gXCJleGVjYVwiO1xuaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQge0NJQ0RWYXJpYWJsZX0gZnJvbSBcIi4vdmFyaWFibGVzLWZyb20tZmlsZXMuanNcIjtcbmltcG9ydCB7R2l0RGF0YSwgR2l0U2NoZW1hfSBmcm9tIFwiLi9naXQtZGF0YS5qc1wiO1xuaW1wb3J0IGdsb2JieSBmcm9tIFwiZ2xvYmJ5XCI7XG5pbXBvcnQgbWljcm9tYXRjaCBmcm9tIFwibWljcm9tYXRjaFwiO1xuaW1wb3J0IGF4aW9zLCB7QXhpb3NSZXF1ZXN0Q29uZmlnfSBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQge0FyZ3Z9IGZyb20gXCIuL2FyZ3YuanNcIjtcblxudHlwZSBSdWxlUmVzdWx0T3B0ID0ge1xuICAgIGFyZ3Y6IEFyZ3Y7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgcnVsZXM6IEpvYlJ1bGVbXTtcbiAgICB2YXJpYWJsZXM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9O1xufTtcblxudHlwZSBFeHBhbmRXaXRoID0ge1xuICAgIHVuZXNjYXBlOiBzdHJpbmc7XG4gICAgdmFyaWFibGU6IChuYW1lOiBzdHJpbmcpID0+IHN0cmluZztcbn07XG5cbmV4cG9ydCBjbGFzcyBVdGlscyB7XG4gICAgc3RhdGljIGJhc2hNdWx0aSAoc2NyaXB0czogc3RyaW5nW10sIGN3ZCA9IHByb2Nlc3MuY3dkKCkpOiBQcm9taXNlPHtzdGRvdXQ6IHN0cmluZzsgc3RkZXJyOiBzdHJpbmc7IGV4aXRDb2RlOiBudW1iZXJ9PiB7XG4gICAgICAgIHJldHVybiBleGVjYShzY3JpcHRzLmpvaW4oXCIgJiYgXFxcXFwiKSwge3NoZWxsOiBcImJhc2hcIiwgY3dkfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGJhc2ggKHNoZWxsU2NyaXB0OiBzdHJpbmcsIGN3ZCA9IHByb2Nlc3MuY3dkKCkpOiBQcm9taXNlPHtzdGRvdXQ6IHN0cmluZzsgc3RkZXJyOiBzdHJpbmc7IGV4aXRDb2RlOiBudW1iZXJ9PiB7XG4gICAgICAgIHJldHVybiBleGVjYShzaGVsbFNjcmlwdCwge3NoZWxsOiBcImJhc2hcIiwgY3dkfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIHNwYXduIChjbWRBcmdzOiBzdHJpbmdbXSwgY3dkID0gcHJvY2Vzcy5jd2QoKSk6IFByb21pc2U8e3N0ZG91dDogc3RyaW5nOyBzdGRlcnI6IHN0cmluZ30+IHtcbiAgICAgICAgcmV0dXJuIGV4ZWNhKGNtZEFyZ3NbMF0sIGNtZEFyZ3Muc2xpY2UoMSksIHtjd2R9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc3luY1NwYXduIChjbWRBcmdzOiBzdHJpbmdbXSwgY3dkID0gcHJvY2Vzcy5jd2QoKSk6IHtzdGRvdXQ6IHN0cmluZzsgc3RkZXJyOiBzdHJpbmd9IHtcbiAgICAgICAgcmV0dXJuIGV4ZWNhLnN5bmMoY21kQXJnc1swXSwgY21kQXJncy5zbGljZSgxKSwge2N3ZH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBmc1VybCAodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdXJsLnJlcGxhY2UoL15odHRwczpcXC9cXC8vZywgXCJcIikucmVwbGFjZSgvXmh0dHA6XFwvXFwvL2csIFwiXCIpO1xuICAgIH1cblxuICAgIHN0YXRpYyBzYWZlRG9ja2VyU3RyaW5nIChqb2JOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGpvYk5hbWUucmVwbGFjZSgvW15cXHctXSsvZywgKG1hdGNoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYmFzZTY0dXJsLmVuY29kZShtYXRjaCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBzYWZlQmFzaFN0cmluZyAoczogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBgJyR7cy5yZXBsYWNlKC8nL2csIFwiJ1xcXCInXFxcIidcIil9J2A7IC8vIHJlcGxhY2VzIGAnYCB3aXRoIGAnXCInXCInYFxuICAgIH1cblxuICAgIHN0YXRpYyBmb3JFYWNoUmVhbEpvYiAoZ2l0bGFiRGF0YTogYW55LCBjYWxsYmFjazogKGpvYk5hbWU6IHN0cmluZywgam9iRGF0YTogYW55KSA9PiB2b2lkKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2pvYk5hbWUsIGpvYkRhdGFdIG9mIE9iamVjdC5lbnRyaWVzPGFueT4oZ2l0bGFiRGF0YSkpIHtcbiAgICAgICAgICAgIGlmIChKb2IuaWxsZWdhbEpvYk5hbWVzLmhhcyhqb2JOYW1lKSB8fCBqb2JOYW1lWzBdLnN0YXJ0c1dpdGgoXCIuXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhqb2JOYW1lLCBqb2JEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBnZXRKb2JOYW1lc0Zyb21QcmV2aW91c1N0YWdlcyAoam9iczogUmVhZG9ubHlBcnJheTxKb2I+LCBzdGFnZXM6IHJlYWRvbmx5IHN0cmluZ1tdLCBjdXJyZW50Sm9iOiBKb2IpIHtcbiAgICAgICAgY29uc3Qgam9iTmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTdGFnZUluZGV4ID0gc3RhZ2VzLmluZGV4T2YoY3VycmVudEpvYi5zdGFnZSk7XG4gICAgICAgIGpvYnMuZm9yRWFjaChqb2IgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhZ2VJbmRleCA9IHN0YWdlcy5pbmRleE9mKGpvYi5zdGFnZSk7XG4gICAgICAgICAgICBpZiAoc3RhZ2VJbmRleCA8IGN1cnJlbnRTdGFnZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgam9iTmFtZXMucHVzaChqb2IubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gam9iTmFtZXM7XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGdldENvdmVyYWdlUGVyY2VudCAoY3dkOiBzdHJpbmcsIHN0YXRlRGlyOiBzdHJpbmcsIGNvdmVyYWdlUmVnZXg6IHN0cmluZywgam9iTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShgJHtjd2R9LyR7c3RhdGVEaXJ9L291dHB1dC8ke2pvYk5hbWV9LmxvZ2AsIFwidXRmOFwiKTtcblxuICAgICAgICBjb25zdCByZWdleCA9IFJFMkpTLmNvbXBpbGUoXG4gICAgICAgICAgICBjb3ZlcmFnZVJlZ2V4XG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL15cXC8vLCBcIlwiKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXC8kLywgXCJcIiksXG4gICAgICAgICAgICBSRTJKUy5NVUxUSUxJTkUsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBBcnJheS5mcm9tKGNvbnRlbnQubWF0Y2hBbGxSRTJKUyhyZWdleCkpO1xuICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDApIHJldHVybiBcIjBcIjtcblxuICAgICAgICBjb25zdCBsYXN0TWF0Y2ggPSBtYXRjaGVzW21hdGNoZXMubGVuZ3RoIC0gMV07XG4gICAgICAgIGNvbnN0IGRpZ2l0cyA9IC9cXGQrKD86XFwuXFxkKyk/Ly5leGVjKGxhc3RNYXRjaFsxXSA/PyBsYXN0TWF0Y2hbMF0pO1xuICAgICAgICBpZiAoIWRpZ2l0cykgcmV0dXJuIFwiMFwiO1xuICAgICAgICByZXR1cm4gZGlnaXRzWzBdID8/IFwiMFwiO1xuICAgIH1cblxuICAgIHN0YXRpYyBwcmludEpvYk5hbWVzIChzdHJlYW06ICh0eHQ6IHN0cmluZykgPT4gdm9pZCwgam9iOiB7bmFtZTogc3RyaW5nfSwgaTogbnVtYmVyLCBhcnI6IHtuYW1lOiBzdHJpbmd9W10pIHtcbiAgICAgICAgaWYgKGkgPT09IGFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICBzdHJlYW0oY2hhbGtge2JsdWVCcmlnaHQgJHtqb2IubmFtZX19YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHJlYW0oY2hhbGtge2JsdWVCcmlnaHQgJHtqb2IubmFtZX19LCBgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGV4cGFuZFRleHRXaXRoICh0ZXh0OiBhbnksIGV4cGFuZFdpdGg6IEV4cGFuZFdpdGgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0ZXh0ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoXG4gICAgICAgICAgICAvKFxcJFxcJCl8XFwkXFx7KFthLXpBLVpfXVxcdyopfXxcXCQoW2EtekEtWl9dXFx3KikvZywgLy8gaHR0cHM6Ly9yZWdleHIuY29tLzdzNGthXG4gICAgICAgICAgICAoX21hdGNoLCBlc2NhcGUsIHZhcjEsIHZhcjIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGVzY2FwZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhwYW5kV2l0aC51bmVzY2FwZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gdmFyMSB8fCB2YXIyO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQobmFtZSwgXCJ1bmV4cGVjdGVkIHVuc2V0IGNhcHR1cmUgZ3JvdXBcIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtleHBhbmRXaXRoLnZhcmlhYmxlKG5hbWUpfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZXhwYW5kVGV4dCAodGV4dDogYW55LCBlbnZzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkge1xuICAgICAgICByZXR1cm4gdGhpcy5leHBhbmRUZXh0V2l0aCh0ZXh0LCB7XG4gICAgICAgICAgICB1bmVzY2FwZTogXCIkXCIsXG4gICAgICAgICAgICB2YXJpYWJsZTogKG5hbWUpID0+IGVudnNbbmFtZV0gPz8gXCJcIixcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGV4cGFuZFZhcmlhYmxlcyAodmFyaWFibGVzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkge1xuICAgICAgICBjb25zdCBfdmFyaWFibGVzID0gey4uLnZhcmlhYmxlc307IC8vIGNvcHkgYnkgdmFsdWUgdG8gcHJldmVudCBtdXRhdGluZyB0aGUgb3JpZ2luYWwgaW5wdXRcbiAgICAgICAgbGV0IGV4cGFuZGVkQW55VmFyaWFibGVzLCBpID0gMDtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgYXNzZXJ0KGkgPCAxMDAsIFwiUmVjdXJzaXZlIHZhcmlhYmxlIGV4cGFuc2lvbiByZWFjaGVkIDEwMCBpdGVyYXRpb25zXCIpO1xuICAgICAgICAgICAgZXhwYW5kZWRBbnlWYXJpYWJsZXMgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKF92YXJpYWJsZXMpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW52c1dpdGhvdXRTZWxmID0gey4uLl92YXJpYWJsZXN9O1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBlbnZzV2l0aG91dFNlbGZba107XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlICQkJ3MgYXJlIGNvbnZlcnRlZCB0byBzaW5nbGUgJCdzIG5vdywgdGhlbiB0aGUgbmV4dFxuICAgICAgICAgICAgICAgIC8vIGl0ZXJhdGlvbiwgdGhleSBtaWdodCBiZSBpbnRlcnByZXRlZCBhcyBfdmFyaWFibGVzLCBldmVuXG4gICAgICAgICAgICAgICAgLy8gdGhvdWdoIHRoZXkgd2VyZSAqZXhwbGljaXRseSogZXNjYXBlZC4gVG8gd29yayBhcm91bmQgdGhpcyxcbiAgICAgICAgICAgICAgICAvLyBsZWF2ZSB0aGUgJyQkJ3MgYXMgdGhlIHNhbWUgdmFsdWUsIHRoZW4gb25seSB1bmVzY2FwZSB0aGVtIGF0XG4gICAgICAgICAgICAgICAgLy8gdGhlIHZlcnkgZW5kLlxuICAgICAgICAgICAgICAgIF92YXJpYWJsZXNba10gPSBVdGlscy5leHBhbmRUZXh0V2l0aCh2LCB7XG4gICAgICAgICAgICAgICAgICAgIHVuZXNjYXBlOiBcIiQkXCIsXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlOiAobmFtZSkgPT4gZW52c1dpdGhvdXRTZWxmW25hbWVdID8/IFwiXCIsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwYW5kZWRBbnlWYXJpYWJsZXMgfHw9IF92YXJpYWJsZXNba10gIT09IHY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH0gd2hpbGUgKGV4cGFuZGVkQW55VmFyaWFibGVzKTtcblxuICAgICAgICByZXR1cm4gX3ZhcmlhYmxlcztcbiAgICB9XG5cbiAgICBzdGF0aWMgdW5zY2FwZSQkVmFyaWFibGVzICh2YXJpYWJsZXM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9KSB7XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHZhcmlhYmxlcykpIHtcbiAgICAgICAgICAgIHZhcmlhYmxlc1trXSA9IFV0aWxzLmV4cGFuZFRleHQodiwge30pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlcztcbiAgICB9XG5cbiAgICBzdGF0aWMgZmluZEVudk1hdGNoZWRWYXJpYWJsZXMgKHZhcmlhYmxlczoge1tuYW1lOiBzdHJpbmddOiBDSUNEVmFyaWFibGV9LCBmaWxlVmFyaWFibGVzRGlyPzogc3RyaW5nLCBlbnZpcm9ubWVudD86IHtuYW1lOiBzdHJpbmd9KSB7XG4gICAgICAgIGNvbnN0IGVudk1hdGNoZWRWYXJpYWJsZXM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHZhcmlhYmxlcykpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2Ygdi5lbnZpcm9ubWVudHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoZW52aXJvbm1lbnQ/Lm5hbWUubWF0Y2goZW50cnkucmVnZXhwKSB8fCBlbnRyeS5yZWdleHAuc291cmNlID09PSBcIi4qXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVWYXJpYWJsZXNEaXIgIT0gbnVsbCAmJiB2LnR5cGUgPT09IFwiZmlsZVwiICYmICFlbnRyeS5maWxlU291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnZNYXRjaGVkVmFyaWFibGVzW2tdID0gYCR7ZmlsZVZhcmlhYmxlc0Rpcn0vJHtrfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICBmcy5ta2RpcnBTeW5jKGAke2ZpbGVWYXJpYWJsZXNEaXJ9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGAke2ZpbGVWYXJpYWJsZXNEaXJ9LyR7a31gLCBlbnRyeS5jb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWxlVmFyaWFibGVzRGlyICE9IG51bGwgJiYgdi50eXBlID09PSBcImZpbGVcIiAmJiBlbnRyeS5maWxlU291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnZNYXRjaGVkVmFyaWFibGVzW2tdID0gYCR7ZmlsZVZhcmlhYmxlc0Rpcn0vJHtrfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICBmcy5ta2RpcnBTeW5jKGAke2ZpbGVWYXJpYWJsZXNEaXJ9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmcy5jb3B5RmlsZVN5bmMoZW50cnkuZmlsZVNvdXJjZSwgYCR7ZmlsZVZhcmlhYmxlc0Rpcn0vJHtrfWApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW52TWF0Y2hlZFZhcmlhYmxlc1trXSA9IGVudHJ5LmNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnZNYXRjaGVkVmFyaWFibGVzO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRSdWxlc1Jlc3VsdCAob3B0OiBSdWxlUmVzdWx0T3B0LCBnaXREYXRhOiBHaXREYXRhLCBqb2JXaGVuOiBzdHJpbmcgPSBcIm9uX3N1Y2Nlc3NcIiwgam9iQWxsb3dGYWlsdXJlOiBib29sZWFuIHwge2V4aXRfY29kZXM6IG51bWJlciB8IG51bWJlcltdfSA9IGZhbHNlKToge3doZW46IHN0cmluZzsgYWxsb3dGYWlsdXJlOiBib29sZWFuIHwge2V4aXRfY29kZXM6IG51bWJlciB8IG51bWJlcltdfTsgdmFyaWFibGVzPzoge1tuYW1lOiBzdHJpbmddOiBzdHJpbmd9fSB7XG4gICAgICAgIGxldCB3aGVuID0gXCJuZXZlclwiO1xuICAgICAgICBjb25zdCB7ZXZhbHVhdGVSdWxlQ2hhbmdlc30gPSBvcHQuYXJndjtcblxuICAgICAgICAvLyBvcHRpb25hbCBtYW51YWwgam9icyBhbGxvd0ZhaWx1cmUgZGVmYXVsdHMgdG8gdHJ1ZSBodHRwczovL2RvY3MuZ2l0bGFiLmNvbS9lZS9jaS9qb2JzL2pvYl9jb250cm9sLmh0bWwjdHlwZXMtb2YtbWFudWFsLWpvYnNcbiAgICAgICAgbGV0IGFsbG93RmFpbHVyZSA9IGpvYldoZW4gPT09IFwibWFudWFsXCIgPyB0cnVlIDogam9iQWxsb3dGYWlsdXJlO1xuICAgICAgICBsZXQgcnVsZVZhcmlhYmxlOiB7W25hbWU6IHN0cmluZ106IHN0cmluZ30gfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIG9wdC5ydWxlcykge1xuICAgICAgICAgICAgaWYgKCFVdGlscy5ldmFsdWF0ZVJ1bGVJZihydWxlLmlmLCBvcHQudmFyaWFibGVzKSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmV2YWx1YXRlUnVsZUV4aXN0KG9wdC5jd2QsIHJ1bGUuZXhpc3RzKSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAoZXZhbHVhdGVSdWxlQ2hhbmdlcyAmJiAhVXRpbHMuZXZhbHVhdGVSdWxlQ2hhbmdlcyhnaXREYXRhLmJyYW5jaGVzLmRlZmF1bHQsIHJ1bGUuY2hhbmdlcywgb3B0LmN3ZCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICB3aGVuID0gcnVsZS53aGVuID8gcnVsZS53aGVuIDogam9iV2hlbjtcbiAgICAgICAgICAgIGFsbG93RmFpbHVyZSA9IHJ1bGUuYWxsb3dfZmFpbHVyZSA/PyBhbGxvd0ZhaWx1cmU7XG4gICAgICAgICAgICBydWxlVmFyaWFibGUgPSBydWxlLnZhcmlhYmxlcztcblxuICAgICAgICAgICAgYnJlYWs7IC8vIEVhcmx5IHJldHVybiwgd2lsbCBub3QgZXZhbHVhdGUgdGhlIHJlbWFpbmluZyBydWxlc1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHt3aGVuLCBhbGxvd0ZhaWx1cmUsIHZhcmlhYmxlczogcnVsZVZhcmlhYmxlfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZXZhbHVhdGVSdWxlSWYgKHJ1bGVJZjogc3RyaW5nIHwgdW5kZWZpbmVkLCBlbnZzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAocnVsZUlmID09PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuICAgICAgICBsZXQgZXZhbFN0ciA9IHJ1bGVJZjtcblxuICAgICAgICBjb25zdCBmbGFnc1RvQmluYXJ5ID0gKGZsYWdzOiBzdHJpbmcpOiBudW1iZXIgPT4ge1xuICAgICAgICAgICAgbGV0IGJpbmFyeSA9IDA7XG4gICAgICAgICAgICBpZiAoZmxhZ3MuaW5jbHVkZXMoXCJpXCIpKSB7XG4gICAgICAgICAgICAgICAgYmluYXJ5IHw9IFJFMkpTLkNBU0VfSU5TRU5TSVRJVkU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmxhZ3MuaW5jbHVkZXMoXCJzXCIpKSB7XG4gICAgICAgICAgICAgICAgYmluYXJ5IHw9IFJFMkpTLkRPVEFMTDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmbGFncy5pbmNsdWRlcyhcIm1cIikpIHtcbiAgICAgICAgICAgICAgICBiaW5hcnkgfD0gUkUySlMuTVVMVElMSU5FO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJpbmFyeTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBFeHBhbmQgYWxsIHZhcmlhYmxlc1xuICAgICAgICBldmFsU3RyID0gdGhpcy5leHBhbmRUZXh0V2l0aChldmFsU3RyLCB7XG4gICAgICAgICAgICB1bmVzY2FwZTogSlNPTi5zdHJpbmdpZnkoXCIkXCIpLFxuICAgICAgICAgICAgdmFyaWFibGU6IChuYW1lKSA9PiBKU09OLnN0cmluZ2lmeShlbnZzW25hbWVdID8/IG51bGwpLnJlcGxhY2VBbGwoXCJcXFxcXFxcXFwiLCBcIlxcXFxcIiksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBleHBhbmRlZEV2YWxTdHIgPSBldmFsU3RyO1xuXG4gICAgICAgIC8vIFNjZW5hcmlvIHdoZW4gUkhTIGlzIGEgPHJlZ2V4PlxuICAgICAgICAvLyBodHRwczovL3JlZ2V4ci5jb20vODVzam9cbiAgICAgICAgY29uc3QgcGF0dGVybjEgPSAvXFxzKig/PG9wZXJhdG9yPig/Oj1+KXwoPzohfikpXFxzKlxcLyg/PHJocz4uKj8pXFwvKD88ZmxhZ3M+W2lnbXN1eV0qKShcXHN8JHxcXCkpL2c7XG4gICAgICAgIGV2YWxTdHIgPSBldmFsU3RyLnJlcGxhY2UocGF0dGVybjEsIChfLCBvcGVyYXRvciwgcmhzLCBmbGFncywgcmVtYWluaW5nVG9rZW5zKSA9PiB7XG4gICAgICAgICAgICBsZXQgX29wZXJhdG9yO1xuICAgICAgICAgICAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgICAgICAgICAgICAgIGNhc2UgXCI9flwiOlxuICAgICAgICAgICAgICAgICAgICBfb3BlcmF0b3IgPSBcIiE9XCI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCIhflwiOlxuICAgICAgICAgICAgICAgICAgICBfb3BlcmF0b3IgPSBcIj09XCI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG9wZXJhdG9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgX3JocyA9IEpTT04uc3RyaW5naWZ5KHJocyk7IC8vIEpTT04uc3RyaW5naWZ5IGZvciBlc2NhcGluZyBgXCJgXG4gICAgICAgICAgICBjb25zdCBjb250YWluc05vbkVzY2FwZWRTbGFzaCA9IC8oPzwhXFxcXClcXC8vLnRlc3QoX3Jocyk7XG4gICAgICAgICAgICBjb25zdCBhc3NlcnRNc2cgPSBbXG4gICAgICAgICAgICAgICAgXCJFcnJvciBhdHRlbXB0aW5nIHRvIGV2YWx1YXRlIHRoZSBmb2xsb3dpbmcgcnVsZXM6XCIsXG4gICAgICAgICAgICAgICAgXCIgIHJ1bGVzOlwiLFxuICAgICAgICAgICAgICAgIGAgICAgLSBpZjogJyR7ZXhwYW5kZWRFdmFsU3RyfSdgLFxuICAgICAgICAgICAgICAgIFwiYXMgcmhzIGNvbnRhaW5zIHVuZXNjYXBlZCBxdW90ZVwiLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGFzc2VydCghY29udGFpbnNOb25Fc2NhcGVkU2xhc2gsIGFzc2VydE1zZy5qb2luKFwiXFxuXCIpKTtcbiAgICAgICAgICAgIGNvbnN0IGZsYWdzQmluYXJ5ID0gZmxhZ3NUb0JpbmFyeShmbGFncyk7XG4gICAgICAgICAgICByZXR1cm4gYC5tYXRjaFJFMkpTKFJFMkpTLmNvbXBpbGUoJHtfcmhzfSwgJHtmbGFnc0JpbmFyeX0pKSAke19vcGVyYXRvcn0gbnVsbCR7cmVtYWluaW5nVG9rZW5zfWA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFNjZW5hcmlvIHdoZW4gUkhTIGlzIHN1cnJvdW5kZWQgYnkgc2luZ2xlL2RvdWJsZS1xdW90ZXNcbiAgICAgICAgLy8gaHR0cHM6Ly9yZWdleHIuY29tLzg1dDBnXG4gICAgICAgIGNvbnN0IHBhdHRlcm4yID0gL1xccyooPzxvcGVyYXRvcj49fnwhfilcXHMqKFtcIiddKSg/PHJocz4oPzpcXFxcLnxbXlxcXFxdKSo/KVxcMi9nO1xuICAgICAgICBldmFsU3RyID0gZXZhbFN0ci5yZXBsYWNlKHBhdHRlcm4yLCAoXywgb3BlcmF0b3IsIF9fLCByaHMpID0+IHtcbiAgICAgICAgICAgIGxldCBfb3BlcmF0b3I7XG4gICAgICAgICAgICBzd2l0Y2ggKG9wZXJhdG9yKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcIj1+XCI6XG4gICAgICAgICAgICAgICAgICAgIF9vcGVyYXRvciA9IFwiIT1cIjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIiF+XCI6XG4gICAgICAgICAgICAgICAgICAgIF9vcGVyYXRvciA9IFwiPT1cIjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgb3BlcmF0b3I7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGFzc2VydE1zZyA9IFtcbiAgICAgICAgICAgICAgICBcIlJIUyAoJHtyaHN9KSBtdXN0IGJlIGEgcmVnZXggcGF0dGVybi4gRG8gbm90IHJlbHkgb24gdGhpcyBiZWhhdmlvciFcIixcbiAgICAgICAgICAgICAgICBcIlJlZmVyIHRvIGh0dHBzOi8vZG9jcy5naXRsYWIuY29tL2VlL2NpL2pvYnMvam9iX3J1bGVzLmh0bWwjdW5leHBlY3RlZC1iZWhhdmlvci1mcm9tLXJlZ3VsYXItZXhwcmVzc2lvbi1tYXRjaGluZy13aXRoLSBmb3IgbW9yZSBpbmZvLi4uXCIsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgYXNzZXJ0KCgvXFwvKC4qKVxcLyhcXHcqKS8udGVzdChyaHMpKSwgYXNzZXJ0TXNnLmpvaW4oXCJcXG5cIikpO1xuXG4gICAgICAgICAgICBjb25zdCByZWdleCA9IC9cXC8oPzxwYXR0ZXJuPi4qKVxcLyg/PGZsYWdzPltpZ21zdXldKikvO1xuICAgICAgICAgICAgY29uc3QgX3JocyA9IHJocy5yZXBsYWNlKHJlZ2V4LCAoXzogc3RyaW5nLCBwYXR0ZXJuOiBzdHJpbmcsIGZsYWdzOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmbGFnc0JpbmFyeSA9IGZsYWdzVG9CaW5hcnkoZmxhZ3MpO1xuICAgICAgICAgICAgICAgIHJldHVybiBgUkUySlMuY29tcGlsZShcIiR7cGF0dGVybn1cIiwgJHtmbGFnc0JpbmFyeX0pYDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGAubWF0Y2hSRTJKUygke19yaHN9KSAke19vcGVyYXRvcn0gbnVsbGA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV2YWxTdHIgPSBldmFsU3RyLnJlcGxhY2UoL251bGwubWF0Y2hSRTJKU1xcKC4rP1xcKVxccyohPVxccypudWxsL2csIFwiZmFsc2VcIik7XG4gICAgICAgIGV2YWxTdHIgPSBldmFsU3RyLnJlcGxhY2UoL251bGwubWF0Y2hSRTJKU1xcKC4rP1xcKVxccyo9PVxccypudWxsL2csIFwidHJ1ZVwiKTtcblxuICAgICAgICBldmFsU3RyID0gZXZhbFN0ci50cmltKCk7XG5cbiAgICAgICAgbGV0IHJlcztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIChnbG9iYWwgYXMgYW55KS5SRTJKUyA9IFJFMkpTOyAvLyBBc3NpZ24gUkUySlMgdG8gdGhlIGdsb2JhbCBvYmplY3RcbiAgICAgICAgICAgIHJlcyA9ICgwLCBldmFsKShldmFsU3RyKTsgLy8gaHR0cHM6Ly9lc2J1aWxkLmdpdGh1Yi5pby9jb250ZW50LXR5cGVzLyNkaXJlY3QtZXZhbFxuICAgICAgICAgICAgZGVsZXRlIChnbG9iYWwgYXMgYW55KS5SRTJKUzsgLy8gQ2xlYW51cFxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIGNvbnN0IGFzc2VydE1zZyA9IFtcbiAgICAgICAgICAgICAgICBcIkVycm9yIGF0dGVtcHRpbmcgdG8gZXZhbHVhdGUgdGhlIGZvbGxvd2luZyBydWxlczpcIixcbiAgICAgICAgICAgICAgICBcIiAgcnVsZXM6XCIsXG4gICAgICAgICAgICAgICAgYCAgICAtIGlmOiAnJHtleHBhbmRlZEV2YWxTdHJ9J2AsXG4gICAgICAgICAgICAgICAgXCJhc1wiLFxuICAgICAgICAgICAgICAgIFwiYGBgamF2YXNjcmlwdFwiLFxuICAgICAgICAgICAgICAgIGAke2V2YWxTdHJ9YCxcbiAgICAgICAgICAgICAgICBcImBgYFwiLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGFzc2VydChmYWxzZSwgYXNzZXJ0TXNnLmpvaW4oXCJcXG5cIikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBCb29sZWFuKHJlcyk7XG4gICAgfVxuXG4gICAgc3RhdGljIGV2YWx1YXRlUnVsZUV4aXN0IChjd2Q6IHN0cmluZywgcnVsZUV4aXN0czogc3RyaW5nW10gfCB7cGF0aHM6IHN0cmluZ1tdfSB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAocnVsZUV4aXN0cyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICAvLyBOb3JtYWxpemUgcnVsZXM6ZXhpc3RzOnBhdGhzIHRvIHJ1bGVzOmV4aXN0c1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocnVsZUV4aXN0cykpIHJ1bGVFeGlzdHMgPSBydWxlRXhpc3RzLnBhdGhzO1xuXG4gICAgICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBydWxlRXhpc3RzKSB7XG4gICAgICAgICAgICBpZiAocGF0dGVybiA9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ2xvYmJ5LnN5bmMocGF0dGVybiwge2RvdDogdHJ1ZSwgY3dkfSkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZXZhbHVhdGVSdWxlQ2hhbmdlcyAoZGVmYXVsdEJyYW5jaDogc3RyaW5nLCBydWxlQ2hhbmdlczogc3RyaW5nW10gfCB7cGF0aHM6IHN0cmluZ1tdfSB8IHVuZGVmaW5lZCwgY3dkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHJ1bGVDaGFuZ2VzID09PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuXG4gICAgICAgIC8vIE5vcm1hbGl6ZSBydWxlczpjaGFuZ2VzOnBhdGhzIHRvIHJ1bGVzOmNoYW5nZXNcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJ1bGVDaGFuZ2VzKSkgcnVsZUNoYW5nZXMgPSBydWxlQ2hhbmdlcy5wYXRocztcblxuICAgICAgICAvLyBOT1RFOiBodHRwczovL2RvY3MuZ2l0bGFiLmNvbS9lZS9jaS95YW1sLyNydWxlc2NoYW5nZXNcbiAgICAgICAgLy8gICBHbG9iIHBhdHRlcm5zIGFyZSBpbnRlcnByZXRlZCB3aXRoIFJ1YnkncyBbRmlsZS5mbm1hdGNoXShodHRwczovL2RvY3MucnVieS1sYW5nLm9yZy9lbi9tYXN0ZXIvRmlsZS5odG1sI21ldGhvZC1jLWZubWF0Y2gpXG4gICAgICAgIC8vICAgd2l0aCB0aGUgZmxhZ3MgRmlsZTo6Rk5NX1BBVEhOQU1FIHwgRmlsZTo6Rk5NX0RPVE1BVENIIHwgRmlsZTo6Rk5NX0VYVEdMT0IuXG4gICAgICAgIHJldHVybiBtaWNyb21hdGNoLnNvbWUoR2l0RGF0YS5jaGFuZ2VkRmlsZXMoYG9yaWdpbi8ke2RlZmF1bHRCcmFuY2h9YCwgY3dkKSwgcnVsZUNoYW5nZXMsIHtcbiAgICAgICAgICAgIG5vbmVnYXRlOiB0cnVlLFxuICAgICAgICAgICAgbm9leHRnbG9iOiB0cnVlLFxuICAgICAgICAgICAgcG9zaXg6IGZhbHNlLFxuICAgICAgICAgICAgZG90OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgaXNTdWJwYXRoIChsaHM6IHN0cmluZywgcmhzOiBzdHJpbmcsIGN3ZDogc3RyaW5nID0gcHJvY2Vzcy5jd2QoKSkge1xuICAgICAgICBsZXQgYWJzTGhzID0gXCJcIjtcbiAgICAgICAgaWYgKHBhdGguaXNBYnNvbHV0ZShsaHMpKSB7XG4gICAgICAgICAgICBhYnNMaHMgPSBsaHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhYnNMaHMgPSBwYXRoLnJlc29sdmUoY3dkLCBsaHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGFic1JocyA9IFwiXCI7XG4gICAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUocmhzKSkge1xuICAgICAgICAgICAgYWJzUmhzID0gcmhzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWJzUmhzID0gcGF0aC5yZXNvbHZlKGN3ZCwgcmhzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlbGF0aXZlID0gcGF0aC5yZWxhdGl2ZShhYnNSaHMsIGFic0xocyk7XG4gICAgICAgIHJldHVybiAhcmVsYXRpdmUuc3RhcnRzV2l0aChcIi4uXCIpO1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyByc3luY1RyYWNrZWRGaWxlcyAoY3dkOiBzdHJpbmcsIHN0YXRlRGlyOiBzdHJpbmcsIHRhcmdldDogc3RyaW5nKTogUHJvbWlzZTx7aHJkZWx0YXRpbWU6IFtudW1iZXIsIG51bWJlcl19PiB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICBhd2FpdCBmcy5ta2RpcnAoYCR7Y3dkfS8ke3N0YXRlRGlyfS9idWlsZHMvJHt0YXJnZXR9YCk7XG4gICAgICAgIGF3YWl0IFV0aWxzLmJhc2goYHJzeW5jIC1hIC0tZGVsZXRlLWV4Y2x1ZGVkIC0tZGVsZXRlIC0tZXhjbHVkZS1mcm9tPTwoZ2l0IGxzLWZpbGVzIC1vIC0tZGlyZWN0b3J5IHwgYXdrICd7cHJpbnQgXCIvXCIkMH0nKSAtLWV4Y2x1ZGUgJHtzdGF0ZURpcn0vIC4vICR7c3RhdGVEaXJ9L2J1aWxkcy8ke3RhcmdldH0vYCwgY3dkKTtcbiAgICAgICAgcmV0dXJuIHtocmRlbHRhdGltZTogcHJvY2Vzcy5ocnRpbWUodGltZSl9O1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBjaGVja3N1bUZpbGVzIChjd2Q6IHN0cmluZywgZmlsZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXM6IFByb21pc2U8c3RyaW5nPltdID0gW107XG5cbiAgICAgICAgZmlsZXMuZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCEgZnMucGF0aEV4aXN0c1N5bmMoZmlsZSkpIHJlc29sdmUocGF0aC5yZWxhdGl2ZShjd2QsIGZpbGUpKTsgLy8gbXVzdCB1c2UgcmVsYXRpdmUgcGF0aCBoZXJlLCBzbyB0aGF0IGNoZWNrc3VtIGNhbiBiZSBkZXRlcm1pbmlzdGljIHdoZW4gcnVubmluZyB0aGUgdW5pdCB0ZXN0c1xuICAgICAgICAgICAgICAgIGNoZWNrc3VtLmZpbGUoZmlsZSwgKGVyciwgaGFzaCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShoYXNoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgICAgICByZXR1cm4gY2hlY2tzdW0ocmVzdWx0LmpvaW4oXCJcIikpO1xuICAgIH1cblxuICAgIHN0YXRpYyBpc09iamVjdCAodjogYW55KSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YodikgPT09IE9iamVjdC5wcm90b3R5cGU7XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIHJlbW90ZUZpbGVFeGlzdCAoY3dkOiBzdHJpbmcsIGZpbGU6IHN0cmluZywgcmVmOiBzdHJpbmcsIGRvbWFpbjogc3RyaW5nLCBwcm9qZWN0UGF0aDogc3RyaW5nLCBwcm90b2NvbDogR2l0U2NoZW1hLCBwb3J0OiBzdHJpbmcpIHtcbiAgICAgICAgc3dpdGNoIChwcm90b2NvbCkge1xuICAgICAgICAgICAgY2FzZSBcInNzaFwiOlxuICAgICAgICAgICAgY2FzZSBcImdpdFwiOlxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKGBnaXQgYXJjaGl2ZSAtLXJlbW90ZT1zc2g6Ly9naXRAJHtkb21haW59OiR7cG9ydH0vJHtwcm9qZWN0UGF0aH0uZ2l0ICR7cmVmfSAke2ZpbGV9YC5zcGxpdChcIiBcIiksIGN3ZCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWUuc3RkZXJyLmluY2x1ZGVzKGByZW1vdGU6IGZhdGFsOiBwYXRoc3BlYyAnJHtmaWxlfScgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZXNgKSkgdGhyb3cgbmV3IEVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlIFwiaHR0cFwiOlxuICAgICAgICAgICAgY2FzZSBcImh0dHBzXCI6IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBheGlvc0NvbmZpZzogQXhpb3NSZXF1ZXN0Q29uZmlnID0gVXRpbHMuZ2V0QXhpb3NQcm94eUNvbmZpZygpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7c3RhdHVzfSA9IGF3YWl0IGF4aW9zLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgIGAke3Byb3RvY29sfTovLyR7ZG9tYWlufToke3BvcnR9LyR7cHJvamVjdFBhdGh9Ly0vcmF3LyR7cmVmfS8ke2ZpbGV9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF4aW9zQ29uZmlnLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHN0YXR1cyA9PT0gMjAwKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICBVdGlscy5zd2l0Y2hTdGF0ZW1lbnRFeGhhdXN0aXZlQ2hlY2socHJvdG9jb2wpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIHN3aXRjaFN0YXRlbWVudEV4aGF1c3RpdmVDaGVjayAocGFyYW06IG5ldmVyKTogbmV2ZXIge1xuICAgICAgICAvLyBodHRwczovL2Rldi50by9iYWJhay9leGhhdXN0aXZlLXR5cGUtY2hlY2tpbmctd2l0aC10eXBlc2NyaXB0LTRsM2ZcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZSAke3BhcmFtfWApO1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBnZXRUcmFja2VkRmlsZXMgKGN3ZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBjb25zdCBsc0ZpbGVzUmVzID0gYXdhaXQgVXRpbHMuYmFzaChcImdpdCBscy1maWxlcyAtLWRlZHVwbGljYXRlXCIsIGN3ZCk7XG4gICAgICAgIGlmIChsc0ZpbGVzUmVzLmV4aXRDb2RlICE9IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxpc3QgdHJhY2tlZCBmaWxlcyBpbiAke2N3ZH06ICR7bHNGaWxlc1Jlcy5zdGRlcnJ9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxzRmlsZXNSZXMuc3Rkb3V0LnNwbGl0KFwiXFxuXCIpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRBeGlvc1Byb3h5Q29uZmlnICgpOiBBeGlvc1JlcXVlc3RDb25maWcge1xuICAgICAgICBjb25zdCBwcm94eUVudiA9IHByb2Nlc3MuZW52LkhUVFBTX1BST1hZIHx8IHByb2Nlc3MuZW52LkhUVFBfUFJPWFk7XG4gICAgICAgIGlmIChwcm94eUVudikge1xuICAgICAgICAgICAgY29uc3QgcHJveHlVcmwgPSBuZXcgVVJMKHByb3h5RW52KTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJveHk6IHtcbiAgICAgICAgICAgICAgICAgICAgaG9zdDogcHJveHlVcmwuaG9zdG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHBvcnQ6IHByb3h5VXJsLnBvcnQgPyBwYXJzZUludChwcm94eVVybC5wb3J0LCAxMCkgOiA4MDgwLFxuICAgICAgICAgICAgICAgICAgICBwcm90b2NvbDogcHJveHlVcmwucHJvdG9jb2wucmVwbGFjZShcIjpcIiwgXCJcIiksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbn1cbiJdfQ==
|
|
391
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzVCLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsR0FBRyxFQUFVLE1BQU0sVUFBVSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMxQixPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxTQUFTLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFNUIsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxVQUFVLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQWV4QixNQUFNLE9BQU8sS0FBSztJQUNkLE1BQU0sQ0FBQyxTQUFTLENBQUUsT0FBaUIsRUFBRSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUNwRCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxNQUFNLENBQUMsSUFBSSxDQUFFLFdBQW1CLEVBQUUsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUU7UUFDakQsT0FBTyxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFFLE9BQWlCLEVB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UUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7b0JBQ3hELFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO2lCQUMvQzthQUNKLENBQUM7UUFDTixDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxDQUFDLGtCQUFrQixDQUFFLFFBQWE7UUFDcEMsSUFBSSxRQUFRLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDcEIsT0FBTyxFQUFFLENBQUMsQ0FBQyxpQ0FBaUM7UUFDaEQsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ2xDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUMvQixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pFLENBQUM7WUFDRCxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNyQyxDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLENBQUM7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCIuL2dsb2JhbC5qc1wiO1xuaW1wb3J0IHtSRTJKU30gZnJvbSBcInJlMmpzXCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQge0pvYiwgSm9iUnVsZX0gZnJvbSBcIi4vam9iLmpzXCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgY2hlY2tzdW0gZnJvbSBcImNoZWNrc3VtXCI7XG5pbXBvcnQgYmFzZTY0dXJsIGZyb20gXCJiYXNlNjR1cmxcIjtcbmltcG9ydCBleGVjYSBmcm9tIFwiZXhlY2FcIjtcbmltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHtDSUNEVmFyaWFibGV9IGZyb20gXCIuL3ZhcmlhYmxlcy1mcm9tLWZpbGVzLmpzXCI7XG5pbXBvcnQge0dpdERhdGF9IGZyb20gXCIuL2dpdC1kYXRhLmpzXCI7XG5pbXBvcnQgZ2xvYmJ5IGZyb20gXCJnbG9iYnlcIjtcbmltcG9ydCBtaWNyb21hdGNoIGZyb20gXCJtaWNyb21hdGNoXCI7XG5pbXBvcnQge0F4aW9zUmVxdWVzdENvbmZpZ30gZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHtBcmd2fSBmcm9tIFwiLi9hcmd2LmpzXCI7XG5cbnR5cGUgUnVsZVJlc3VsdE9wdCA9IHtcbiAgICBhcmd2OiBBcmd2O1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIHJ1bGVzOiBKb2JSdWxlW107XG4gICAgdmFyaWFibGVzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfTtcbn07XG5cbnR5cGUgRXhwYW5kV2l0aCA9IHtcbiAgICB1bmVzY2FwZTogc3RyaW5nO1xuICAgIHZhcmlhYmxlOiAobmFtZTogc3RyaW5nKSA9PiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY2xhc3MgVXRpbHMge1xuICAgIHN0YXRpYyBiYXNoTXVsdGkgKHNjcmlwdHM6IHN0cmluZ1tdLCBjd2QgPSBwcm9jZXNzLmN3ZCgpKTogUHJvbWlzZTx7c3Rkb3V0OiBzdHJpbmc7IHN0ZGVycjogc3RyaW5nOyBleGl0Q29kZTogbnVtYmVyfT4ge1xuICAgICAgICByZXR1cm4gZXhlY2Eoc2NyaXB0cy5qb2luKFwiICYmIFxcXFxcIiksIHtzaGVsbDogXCJiYXNoXCIsIGN3ZH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBiYXNoIChzaGVsbFNjcmlwdDogc3RyaW5nLCBjd2QgPSBwcm9jZXNzLmN3ZCgpKTogUHJvbWlzZTx7c3Rkb3V0OiBzdHJpbmc7IHN0ZGVycjogc3RyaW5nOyBleGl0Q29kZTogbnVtYmVyfT4ge1xuICAgICAgICByZXR1cm4gZXhlY2Eoc2hlbGxTY3JpcHQsIHtzaGVsbDogXCJiYXNoXCIsIGN3ZH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBzcGF3biAoY21kQXJnczogc3RyaW5nW10sIGN3ZCA9IHByb2Nlc3MuY3dkKCkpOiBQcm9taXNlPHtzdGRvdXQ6IHN0cmluZzsgc3RkZXJyOiBzdHJpbmd9PiB7XG4gICAgICAgIHJldHVybiBleGVjYShjbWRBcmdzWzBdLCBjbWRBcmdzLnNsaWNlKDEpLCB7Y3dkfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIHN5bmNTcGF3biAoY21kQXJnczogc3RyaW5nW10sIGN3ZCA9IHByb2Nlc3MuY3dkKCkpOiB7c3Rkb3V0OiBzdHJpbmc7IHN0ZGVycjogc3RyaW5nfSB7XG4gICAgICAgIHJldHVybiBleGVjYS5zeW5jKGNtZEFyZ3NbMF0sIGNtZEFyZ3Muc2xpY2UoMSksIHtjd2R9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZnNVcmwgKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHVybC5yZXBsYWNlKC9eaHR0cHM6XFwvXFwvL2csIFwiXCIpLnJlcGxhY2UoL15odHRwOlxcL1xcLy9nLCBcIlwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc2FmZURvY2tlclN0cmluZyAoam9iTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBqb2JOYW1lLnJlcGxhY2UoL1teXFx3LV0rL2csIChtYXRjaCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGJhc2U2NHVybC5lbmNvZGUobWF0Y2gpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc2FmZUJhc2hTdHJpbmcgKHM6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gYCcke3MucmVwbGFjZSgvJy9nLCBcIidcXFwiJ1xcXCInXCIpfSdgOyAvLyByZXBsYWNlcyBgJ2Agd2l0aCBgJ1wiJ1wiJ2BcbiAgICB9XG5cbiAgICBzdGF0aWMgZm9yRWFjaFJlYWxKb2IgKGdpdGxhYkRhdGE6IGFueSwgY2FsbGJhY2s6IChqb2JOYW1lOiBzdHJpbmcsIGpvYkRhdGE6IGFueSkgPT4gdm9pZCkge1xuICAgICAgICBmb3IgKGNvbnN0IFtqb2JOYW1lLCBqb2JEYXRhXSBvZiBPYmplY3QuZW50cmllczxhbnk+KGdpdGxhYkRhdGEpKSB7XG4gICAgICAgICAgICBpZiAoSm9iLmlsbGVnYWxKb2JOYW1lcy5oYXMoam9iTmFtZSkgfHwgam9iTmFtZVswXS5zdGFydHNXaXRoKFwiLlwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2soam9iTmFtZSwgam9iRGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0Sm9iTmFtZXNGcm9tUHJldmlvdXNTdGFnZXMgKGpvYnM6IFJlYWRvbmx5QXJyYXk8Sm9iPiwgc3RhZ2VzOiByZWFkb25seSBzdHJpbmdbXSwgY3VycmVudEpvYjogSm9iKSB7XG4gICAgICAgIGNvbnN0IGpvYk5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBjb25zdCBjdXJyZW50U3RhZ2VJbmRleCA9IHN0YWdlcy5pbmRleE9mKGN1cnJlbnRKb2Iuc3RhZ2UpO1xuICAgICAgICBqb2JzLmZvckVhY2goam9iID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YWdlSW5kZXggPSBzdGFnZXMuaW5kZXhPZihqb2Iuc3RhZ2UpO1xuICAgICAgICAgICAgaWYgKHN0YWdlSW5kZXggPCBjdXJyZW50U3RhZ2VJbmRleCkge1xuICAgICAgICAgICAgICAgIGpvYk5hbWVzLnB1c2goam9iLm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGpvYk5hbWVzO1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBnZXRDb3ZlcmFnZVBlcmNlbnQgKGN3ZDogc3RyaW5nLCBzdGF0ZURpcjogc3RyaW5nLCBjb3ZlcmFnZVJlZ2V4OiBzdHJpbmcsIGpvYk5hbWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUoYCR7Y3dkfS8ke3N0YXRlRGlyfS9vdXRwdXQvJHtqb2JOYW1lfS5sb2dgLCBcInV0ZjhcIik7XG5cbiAgICAgICAgY29uc3QgcmVnZXggPSBSRTJKUy5jb21waWxlKFxuICAgICAgICAgICAgY292ZXJhZ2VSZWdleFxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9eXFwvLywgXCJcIilcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwvJC8sIFwiXCIpLFxuICAgICAgICAgICAgUkUySlMuTVVMVElMSU5FLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gQXJyYXkuZnJvbShjb250ZW50Lm1hdGNoQWxsUkUySlMocmVnZXgpKTtcbiAgICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSByZXR1cm4gXCIwXCI7XG5cbiAgICAgICAgY29uc3QgbGFzdE1hdGNoID0gbWF0Y2hlc1ttYXRjaGVzLmxlbmd0aCAtIDFdO1xuICAgICAgICBjb25zdCBkaWdpdHMgPSAvXFxkKyg/OlxcLlxcZCspPy8uZXhlYyhsYXN0TWF0Y2hbMV0gPz8gbGFzdE1hdGNoWzBdKTtcbiAgICAgICAgaWYgKCFkaWdpdHMpIHJldHVybiBcIjBcIjtcbiAgICAgICAgcmV0dXJuIGRpZ2l0c1swXSA/PyBcIjBcIjtcbiAgICB9XG5cbiAgICBzdGF0aWMgcHJpbnRKb2JOYW1lcyAoc3RyZWFtOiAodHh0OiBzdHJpbmcpID0+IHZvaWQsIGpvYjoge25hbWU6IHN0cmluZ30sIGk6IG51bWJlciwgYXJyOiB7bmFtZTogc3RyaW5nfVtdKSB7XG4gICAgICAgIGlmIChpID09PSBhcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgc3RyZWFtKGNoYWxrYHtibHVlQnJpZ2h0ICR7am9iLm5hbWV9fWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyZWFtKGNoYWxrYHtibHVlQnJpZ2h0ICR7am9iLm5hbWV9fSwgYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBleHBhbmRUZXh0V2l0aCAodGV4dDogYW55LCBleHBhbmRXaXRoOiBFeHBhbmRXaXRoKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGV4dCAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGV4dC5yZXBsYWNlKFxuICAgICAgICAgICAgLyhcXCRcXCQpfFxcJFxceyhbYS16QS1aX11cXHcqKX18XFwkKFthLXpBLVpfXVxcdyopL2csIC8vIGh0dHBzOi8vcmVnZXhyLmNvbS83czRrYVxuICAgICAgICAgICAgKF9tYXRjaCwgZXNjYXBlLCB2YXIxLCB2YXIyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlc2NhcGUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4cGFuZFdpdGgudW5lc2NhcGU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHZhcjEgfHwgdmFyMjtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KG5hbWUsIFwidW5leHBlY3RlZCB1bnNldCBjYXB0dXJlIGdyb3VwXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7ZXhwYW5kV2l0aC52YXJpYWJsZShuYW1lKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgc3RhdGljIGV4cGFuZFRleHQgKHRleHQ6IGFueSwgZW52czoge1trZXk6IHN0cmluZ106IHN0cmluZ30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwYW5kVGV4dFdpdGgodGV4dCwge1xuICAgICAgICAgICAgdW5lc2NhcGU6IFwiJFwiLFxuICAgICAgICAgICAgdmFyaWFibGU6IChuYW1lKSA9PiBlbnZzW25hbWVdID8/IFwiXCIsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBleHBhbmRWYXJpYWJsZXMgKHZhcmlhYmxlczoge1trZXk6IHN0cmluZ106IHN0cmluZ30pIHtcbiAgICAgICAgY29uc3QgX3ZhcmlhYmxlcyA9IHsuLi52YXJpYWJsZXN9OyAvLyBjb3B5IGJ5IHZhbHVlIHRvIHByZXZlbnQgbXV0YXRpbmcgdGhlIG9yaWdpbmFsIGlucHV0XG4gICAgICAgIGxldCBleHBhbmRlZEFueVZhcmlhYmxlcywgaSA9IDA7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGFzc2VydChpIDwgMTAwLCBcIlJlY3Vyc2l2ZSB2YXJpYWJsZSBleHBhbnNpb24gcmVhY2hlZCAxMDAgaXRlcmF0aW9uc1wiKTtcbiAgICAgICAgICAgIGV4cGFuZGVkQW55VmFyaWFibGVzID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhfdmFyaWFibGVzKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudnNXaXRob3V0U2VsZiA9IHsuLi5fdmFyaWFibGVzfTtcbiAgICAgICAgICAgICAgICBkZWxldGUgZW52c1dpdGhvdXRTZWxmW2tdO1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSAkJCdzIGFyZSBjb252ZXJ0ZWQgdG8gc2luZ2xlICQncyBub3csIHRoZW4gdGhlIG5leHRcbiAgICAgICAgICAgICAgICAvLyBpdGVyYXRpb24sIHRoZXkgbWlnaHQgYmUgaW50ZXJwcmV0ZWQgYXMgX3ZhcmlhYmxlcywgZXZlblxuICAgICAgICAgICAgICAgIC8vIHRob3VnaCB0aGV5IHdlcmUgKmV4cGxpY2l0bHkqIGVzY2FwZWQuIFRvIHdvcmsgYXJvdW5kIHRoaXMsXG4gICAgICAgICAgICAgICAgLy8gbGVhdmUgdGhlICckJCdzIGFzIHRoZSBzYW1lIHZhbHVlLCB0aGVuIG9ubHkgdW5lc2NhcGUgdGhlbSBhdFxuICAgICAgICAgICAgICAgIC8vIHRoZSB2ZXJ5IGVuZC5cbiAgICAgICAgICAgICAgICBfdmFyaWFibGVzW2tdID0gVXRpbHMuZXhwYW5kVGV4dFdpdGgodiwge1xuICAgICAgICAgICAgICAgICAgICB1bmVzY2FwZTogXCIkJFwiLFxuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZTogKG5hbWUpID0+IGVudnNXaXRob3V0U2VsZltuYW1lXSA/PyBcIlwiLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cGFuZGVkQW55VmFyaWFibGVzIHx8PSBfdmFyaWFibGVzW2tdICE9PSB2O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9IHdoaWxlIChleHBhbmRlZEFueVZhcmlhYmxlcyk7XG5cbiAgICAgICAgcmV0dXJuIF92YXJpYWJsZXM7XG4gICAgfVxuXG4gICAgc3RhdGljIHVuc2NhcGUkJFZhcmlhYmxlcyAodmFyaWFibGVzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkge1xuICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyh2YXJpYWJsZXMpKSB7XG4gICAgICAgICAgICB2YXJpYWJsZXNba10gPSBVdGlscy5leHBhbmRUZXh0KHYsIHt9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YXJpYWJsZXM7XG4gICAgfVxuXG4gICAgc3RhdGljIGZpbmRFbnZNYXRjaGVkVmFyaWFibGVzICh2YXJpYWJsZXM6IHtbbmFtZTogc3RyaW5nXTogQ0lDRFZhcmlhYmxlfSwgZmlsZVZhcmlhYmxlc0Rpcj86IHN0cmluZywgZW52aXJvbm1lbnQ/OiB7bmFtZTogc3RyaW5nfSkge1xuICAgICAgICBjb25zdCBlbnZNYXRjaGVkVmFyaWFibGVzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyh2YXJpYWJsZXMpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHYuZW52aXJvbm1lbnRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVudmlyb25tZW50Py5uYW1lLm1hdGNoKGVudHJ5LnJlZ2V4cCkgfHwgZW50cnkucmVnZXhwLnNvdXJjZSA9PT0gXCIuKlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWxlVmFyaWFibGVzRGlyICE9IG51bGwgJiYgdi50eXBlID09PSBcImZpbGVcIiAmJiAhZW50cnkuZmlsZVNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW52TWF0Y2hlZFZhcmlhYmxlc1trXSA9IGAke2ZpbGVWYXJpYWJsZXNEaXJ9LyR7a31gO1xuICAgICAgICAgICAgICAgICAgICAgICAgZnMubWtkaXJwU3luYyhgJHtmaWxlVmFyaWFibGVzRGlyfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhgJHtmaWxlVmFyaWFibGVzRGlyfS8ke2t9YCwgZW50cnkuY29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsZVZhcmlhYmxlc0RpciAhPSBudWxsICYmIHYudHlwZSA9PT0gXCJmaWxlXCIgJiYgZW50cnkuZmlsZVNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW52TWF0Y2hlZFZhcmlhYmxlc1trXSA9IGAke2ZpbGVWYXJpYWJsZXNEaXJ9LyR7a31gO1xuICAgICAgICAgICAgICAgICAgICAgICAgZnMubWtkaXJwU3luYyhgJHtmaWxlVmFyaWFibGVzRGlyfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgZnMuY29weUZpbGVTeW5jKGVudHJ5LmZpbGVTb3VyY2UsIGAke2ZpbGVWYXJpYWJsZXNEaXJ9LyR7a31gKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudk1hdGNoZWRWYXJpYWJsZXNba10gPSBlbnRyeS5jb250ZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW52TWF0Y2hlZFZhcmlhYmxlcztcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UnVsZXNSZXN1bHQgKG9wdDogUnVsZVJlc3VsdE9wdCwgZ2l0RGF0YTogR2l0RGF0YSwgam9iV2hlbjogc3RyaW5nID0gXCJvbl9zdWNjZXNzXCIsIGpvYkFsbG93RmFpbHVyZTogYm9vbGVhbiB8IHtleGl0X2NvZGVzOiBudW1iZXIgfCBudW1iZXJbXX0gPSBmYWxzZSk6IHt3aGVuOiBzdHJpbmc7IGFsbG93RmFpbHVyZTogYm9vbGVhbiB8IHtleGl0X2NvZGVzOiBudW1iZXIgfCBudW1iZXJbXX07IHZhcmlhYmxlcz86IHtbbmFtZTogc3RyaW5nXTogc3RyaW5nfX0ge1xuICAgICAgICBsZXQgd2hlbiA9IFwibmV2ZXJcIjtcbiAgICAgICAgY29uc3Qge2V2YWx1YXRlUnVsZUNoYW5nZXN9ID0gb3B0LmFyZ3Y7XG5cbiAgICAgICAgLy8gb3B0aW9uYWwgbWFudWFsIGpvYnMgYWxsb3dGYWlsdXJlIGRlZmF1bHRzIHRvIHRydWUgaHR0cHM6Ly9kb2NzLmdpdGxhYi5jb20vZWUvY2kvam9icy9qb2JfY29udHJvbC5odG1sI3R5cGVzLW9mLW1hbnVhbC1qb2JzXG4gICAgICAgIGxldCBhbGxvd0ZhaWx1cmUgPSBqb2JXaGVuID09PSBcIm1hbnVhbFwiID8gdHJ1ZSA6IGpvYkFsbG93RmFpbHVyZTtcbiAgICAgICAgbGV0IHJ1bGVWYXJpYWJsZToge1tuYW1lOiBzdHJpbmddOiBzdHJpbmd9IHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBvcHQucnVsZXMpIHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuZXZhbHVhdGVSdWxlSWYocnVsZS5pZiwgb3B0LnZhcmlhYmxlcykpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKCFVdGlscy5ldmFsdWF0ZVJ1bGVFeGlzdChvcHQuY3dkLCBydWxlLmV4aXN0cykpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKGV2YWx1YXRlUnVsZUNoYW5nZXMgJiYgIVV0aWxzLmV2YWx1YXRlUnVsZUNoYW5nZXMoZ2l0RGF0YS5icmFuY2hlcy5kZWZhdWx0LCBydWxlLmNoYW5nZXMsIG9wdC5jd2QpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgd2hlbiA9IHJ1bGUud2hlbiA/IHJ1bGUud2hlbiA6IGpvYldoZW47XG4gICAgICAgICAgICBhbGxvd0ZhaWx1cmUgPSBydWxlLmFsbG93X2ZhaWx1cmUgPz8gYWxsb3dGYWlsdXJlO1xuICAgICAgICAgICAgcnVsZVZhcmlhYmxlID0gcnVsZS52YXJpYWJsZXM7XG5cbiAgICAgICAgICAgIGJyZWFrOyAvLyBFYXJseSByZXR1cm4sIHdpbGwgbm90IGV2YWx1YXRlIHRoZSByZW1haW5pbmcgcnVsZXNcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7d2hlbiwgYWxsb3dGYWlsdXJlLCB2YXJpYWJsZXM6IHJ1bGVWYXJpYWJsZX07XG4gICAgfVxuXG4gICAgc3RhdGljIGV2YWx1YXRlUnVsZUlmIChydWxlSWY6IHN0cmluZyB8IHVuZGVmaW5lZCwgZW52czoge1trZXk6IHN0cmluZ106IHN0cmluZ30pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHJ1bGVJZiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgbGV0IGV2YWxTdHIgPSBydWxlSWY7XG5cbiAgICAgICAgY29uc3QgZmxhZ3NUb0JpbmFyeSA9IChmbGFnczogc3RyaW5nKTogbnVtYmVyID0+IHtcbiAgICAgICAgICAgIGxldCBiaW5hcnkgPSAwO1xuICAgICAgICAgICAgaWYgKGZsYWdzLmluY2x1ZGVzKFwiaVwiKSkge1xuICAgICAgICAgICAgICAgIGJpbmFyeSB8PSBSRTJKUy5DQVNFX0lOU0VOU0lUSVZFO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZsYWdzLmluY2x1ZGVzKFwic1wiKSkge1xuICAgICAgICAgICAgICAgIGJpbmFyeSB8PSBSRTJKUy5ET1RBTEw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmxhZ3MuaW5jbHVkZXMoXCJtXCIpKSB7XG4gICAgICAgICAgICAgICAgYmluYXJ5IHw9IFJFMkpTLk1VTFRJTElORTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBiaW5hcnk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gRXhwYW5kIGFsbCB2YXJpYWJsZXNcbiAgICAgICAgZXZhbFN0ciA9IHRoaXMuZXhwYW5kVGV4dFdpdGgoZXZhbFN0ciwge1xuICAgICAgICAgICAgdW5lc2NhcGU6IEpTT04uc3RyaW5naWZ5KFwiJFwiKSxcbiAgICAgICAgICAgIHZhcmlhYmxlOiAobmFtZSkgPT4gSlNPTi5zdHJpbmdpZnkoZW52c1tuYW1lXSA/PyBudWxsKS5yZXBsYWNlQWxsKFwiXFxcXFxcXFxcIiwgXCJcXFxcXCIpLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZXhwYW5kZWRFdmFsU3RyID0gZXZhbFN0cjtcblxuICAgICAgICAvLyBTY2VuYXJpbyB3aGVuIFJIUyBpcyBhIDxyZWdleD5cbiAgICAgICAgLy8gaHR0cHM6Ly9yZWdleHIuY29tLzg1c2pvXG4gICAgICAgIGNvbnN0IHBhdHRlcm4xID0gL1xccyooPzxvcGVyYXRvcj4oPzo9fil8KD86IX4pKVxccypcXC8oPzxyaHM+Lio/KVxcLyg/PGZsYWdzPltpZ21zdXldKikoXFxzfCR8XFwpKS9nO1xuICAgICAgICBldmFsU3RyID0gZXZhbFN0ci5yZXBsYWNlKHBhdHRlcm4xLCAoXywgb3BlcmF0b3IsIHJocywgZmxhZ3MsIHJlbWFpbmluZ1Rva2VucykgPT4ge1xuICAgICAgICAgICAgbGV0IF9vcGVyYXRvcjtcbiAgICAgICAgICAgIHN3aXRjaCAob3BlcmF0b3IpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwiPX5cIjpcbiAgICAgICAgICAgICAgICAgICAgX29wZXJhdG9yID0gXCIhPVwiO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiIX5cIjpcbiAgICAgICAgICAgICAgICAgICAgX29wZXJhdG9yID0gXCI9PVwiO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBvcGVyYXRvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IF9yaHMgPSBKU09OLnN0cmluZ2lmeShyaHMpOyAvLyBKU09OLnN0cmluZ2lmeSBmb3IgZXNjYXBpbmcgYFwiYFxuICAgICAgICAgICAgY29uc3QgY29udGFpbnNOb25Fc2NhcGVkU2xhc2ggPSAvKD88IVxcXFwpXFwvLy50ZXN0KF9yaHMpO1xuICAgICAgICAgICAgY29uc3QgYXNzZXJ0TXNnID0gW1xuICAgICAgICAgICAgICAgIFwiRXJyb3IgYXR0ZW1wdGluZyB0byBldmFsdWF0ZSB0aGUgZm9sbG93aW5nIHJ1bGVzOlwiLFxuICAgICAgICAgICAgICAgIFwiICBydWxlczpcIixcbiAgICAgICAgICAgICAgICBgICAgIC0gaWY6ICcke2V4cGFuZGVkRXZhbFN0cn0nYCxcbiAgICAgICAgICAgICAgICBcImFzIHJocyBjb250YWlucyB1bmVzY2FwZWQgcXVvdGVcIixcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBhc3NlcnQoIWNvbnRhaW5zTm9uRXNjYXBlZFNsYXNoLCBhc3NlcnRNc2cuam9pbihcIlxcblwiKSk7XG4gICAgICAgICAgICBjb25zdCBmbGFnc0JpbmFyeSA9IGZsYWdzVG9CaW5hcnkoZmxhZ3MpO1xuICAgICAgICAgICAgcmV0dXJuIGAubWF0Y2hSRTJKUyhSRTJKUy5jb21waWxlKCR7X3Joc30sICR7ZmxhZ3NCaW5hcnl9KSkgJHtfb3BlcmF0b3J9IG51bGwke3JlbWFpbmluZ1Rva2Vuc31gO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTY2VuYXJpbyB3aGVuIFJIUyBpcyBzdXJyb3VuZGVkIGJ5IHNpbmdsZS9kb3VibGUtcXVvdGVzXG4gICAgICAgIC8vIGh0dHBzOi8vcmVnZXhyLmNvbS84NXQwZ1xuICAgICAgICBjb25zdCBwYXR0ZXJuMiA9IC9cXHMqKD88b3BlcmF0b3I+PX58IX4pXFxzKihbXCInXSkoPzxyaHM+KD86XFxcXC58W15cXFxcXSkqPylcXDIvZztcbiAgICAgICAgZXZhbFN0ciA9IGV2YWxTdHIucmVwbGFjZShwYXR0ZXJuMiwgKF8sIG9wZXJhdG9yLCBfXywgcmhzKSA9PiB7XG4gICAgICAgICAgICBsZXQgX29wZXJhdG9yO1xuICAgICAgICAgICAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgICAgICAgICAgICAgIGNhc2UgXCI9flwiOlxuICAgICAgICAgICAgICAgICAgICBfb3BlcmF0b3IgPSBcIiE9XCI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCIhflwiOlxuICAgICAgICAgICAgICAgICAgICBfb3BlcmF0b3IgPSBcIj09XCI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG9wZXJhdG9yO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBhc3NlcnRNc2cgPSBbXG4gICAgICAgICAgICAgICAgXCJSSFMgKCR7cmhzfSkgbXVzdCBiZSBhIHJlZ2V4IHBhdHRlcm4uIERvIG5vdCByZWx5IG9uIHRoaXMgYmVoYXZpb3IhXCIsXG4gICAgICAgICAgICAgICAgXCJSZWZlciB0byBodHRwczovL2RvY3MuZ2l0bGFiLmNvbS9lZS9jaS9qb2JzL2pvYl9ydWxlcy5odG1sI3VuZXhwZWN0ZWQtYmVoYXZpb3ItZnJvbS1yZWd1bGFyLWV4cHJlc3Npb24tbWF0Y2hpbmctd2l0aC0gZm9yIG1vcmUgaW5mby4uLlwiLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGFzc2VydCgoL1xcLyguKilcXC8oXFx3KikvLnRlc3QocmhzKSksIGFzc2VydE1zZy5qb2luKFwiXFxuXCIpKTtcblxuICAgICAgICAgICAgY29uc3QgcmVnZXggPSAvXFwvKD88cGF0dGVybj4uKilcXC8oPzxmbGFncz5baWdtc3V5XSopLztcbiAgICAgICAgICAgIGNvbnN0IF9yaHMgPSByaHMucmVwbGFjZShyZWdleCwgKF86IHN0cmluZywgcGF0dGVybjogc3RyaW5nLCBmbGFnczogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmxhZ3NCaW5hcnkgPSBmbGFnc1RvQmluYXJ5KGZsYWdzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFJFMkpTLmNvbXBpbGUoXCIke3BhdHRlcm59XCIsICR7ZmxhZ3NCaW5hcnl9KWA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBgLm1hdGNoUkUySlMoJHtfcmhzfSkgJHtfb3BlcmF0b3J9IG51bGxgO1xuICAgICAgICB9KTtcblxuICAgICAgICBldmFsU3RyID0gZXZhbFN0ci5yZXBsYWNlKC9udWxsLm1hdGNoUkUySlNcXCguKz9cXClcXHMqIT1cXHMqbnVsbC9nLCBcImZhbHNlXCIpO1xuICAgICAgICBldmFsU3RyID0gZXZhbFN0ci5yZXBsYWNlKC9udWxsLm1hdGNoUkUySlNcXCguKz9cXClcXHMqPT1cXHMqbnVsbC9nLCBcInRydWVcIik7XG5cbiAgICAgICAgZXZhbFN0ciA9IGV2YWxTdHIudHJpbSgpO1xuXG4gICAgICAgIGxldCByZXM7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAoZ2xvYmFsIGFzIGFueSkuUkUySlMgPSBSRTJKUzsgLy8gQXNzaWduIFJFMkpTIHRvIHRoZSBnbG9iYWwgb2JqZWN0XG4gICAgICAgICAgICByZXMgPSAoMCwgZXZhbCkoZXZhbFN0cik7IC8vIGh0dHBzOi8vZXNidWlsZC5naXRodWIuaW8vY29udGVudC10eXBlcy8jZGlyZWN0LWV2YWxcbiAgICAgICAgICAgIGRlbGV0ZSAoZ2xvYmFsIGFzIGFueSkuUkUySlM7IC8vIENsZWFudXBcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICBjb25zdCBhc3NlcnRNc2cgPSBbXG4gICAgICAgICAgICAgICAgXCJFcnJvciBhdHRlbXB0aW5nIHRvIGV2YWx1YXRlIHRoZSBmb2xsb3dpbmcgcnVsZXM6XCIsXG4gICAgICAgICAgICAgICAgXCIgIHJ1bGVzOlwiLFxuICAgICAgICAgICAgICAgIGAgICAgLSBpZjogJyR7ZXhwYW5kZWRFdmFsU3RyfSdgLFxuICAgICAgICAgICAgICAgIFwiYXNcIixcbiAgICAgICAgICAgICAgICBcImBgYGphdmFzY3JpcHRcIixcbiAgICAgICAgICAgICAgICBgJHtldmFsU3RyfWAsXG4gICAgICAgICAgICAgICAgXCJgYGBcIixcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBhc3NlcnQoZmFsc2UsIGFzc2VydE1zZy5qb2luKFwiXFxuXCIpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQm9vbGVhbihyZXMpO1xuICAgIH1cblxuICAgIHN0YXRpYyBldmFsdWF0ZVJ1bGVFeGlzdCAoY3dkOiBzdHJpbmcsIHJ1bGVFeGlzdHM6IHN0cmluZ1tdIHwge3BhdGhzOiBzdHJpbmdbXX0gfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHJ1bGVFeGlzdHMgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgLy8gTm9ybWFsaXplIHJ1bGVzOmV4aXN0czpwYXRocyB0byBydWxlczpleGlzdHNcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJ1bGVFeGlzdHMpKSBydWxlRXhpc3RzID0gcnVsZUV4aXN0cy5wYXRocztcblxuICAgICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcnVsZUV4aXN0cykge1xuICAgICAgICAgICAgaWYgKHBhdHRlcm4gPT0gXCJcIikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdsb2JieS5zeW5jKHBhdHRlcm4sIHtkb3Q6IHRydWUsIGN3ZH0pLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgc3RhdGljIGV2YWx1YXRlUnVsZUNoYW5nZXMgKGRlZmF1bHRCcmFuY2g6IHN0cmluZywgcnVsZUNoYW5nZXM6IHN0cmluZ1tdIHwge3BhdGhzOiBzdHJpbmdbXX0gfCB1bmRlZmluZWQsIGN3ZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChydWxlQ2hhbmdlcyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICAvLyBOb3JtYWxpemUgcnVsZXM6Y2hhbmdlczpwYXRocyB0byBydWxlczpjaGFuZ2VzXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShydWxlQ2hhbmdlcykpIHJ1bGVDaGFuZ2VzID0gcnVsZUNoYW5nZXMucGF0aHM7XG5cbiAgICAgICAgLy8gTk9URTogaHR0cHM6Ly9kb2NzLmdpdGxhYi5jb20vZWUvY2kveWFtbC8jcnVsZXNjaGFuZ2VzXG4gICAgICAgIC8vICAgR2xvYiBwYXR0ZXJucyBhcmUgaW50ZXJwcmV0ZWQgd2l0aCBSdWJ5J3MgW0ZpbGUuZm5tYXRjaF0oaHR0cHM6Ly9kb2NzLnJ1YnktbGFuZy5vcmcvZW4vbWFzdGVyL0ZpbGUuaHRtbCNtZXRob2QtYy1mbm1hdGNoKVxuICAgICAgICAvLyAgIHdpdGggdGhlIGZsYWdzIEZpbGU6OkZOTV9QQVRITkFNRSB8IEZpbGU6OkZOTV9ET1RNQVRDSCB8IEZpbGU6OkZOTV9FWFRHTE9CLlxuICAgICAgICByZXR1cm4gbWljcm9tYXRjaC5zb21lKEdpdERhdGEuY2hhbmdlZEZpbGVzKGBvcmlnaW4vJHtkZWZhdWx0QnJhbmNofWAsIGN3ZCksIHJ1bGVDaGFuZ2VzLCB7XG4gICAgICAgICAgICBub25lZ2F0ZTogdHJ1ZSxcbiAgICAgICAgICAgIG5vZXh0Z2xvYjogdHJ1ZSxcbiAgICAgICAgICAgIHBvc2l4OiBmYWxzZSxcbiAgICAgICAgICAgIGRvdDogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGlzU3VicGF0aCAobGhzOiBzdHJpbmcsIHJoczogc3RyaW5nLCBjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCkpIHtcbiAgICAgICAgbGV0IGFic0xocyA9IFwiXCI7XG4gICAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUobGhzKSkge1xuICAgICAgICAgICAgYWJzTGhzID0gbGhzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWJzTGhzID0gcGF0aC5yZXNvbHZlKGN3ZCwgbGhzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBhYnNSaHMgPSBcIlwiO1xuICAgICAgICBpZiAocGF0aC5pc0Fic29sdXRlKHJocykpIHtcbiAgICAgICAgICAgIGFic1JocyA9IHJocztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFic1JocyA9IHBhdGgucmVzb2x2ZShjd2QsIHJocyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWxhdGl2ZSA9IHBhdGgucmVsYXRpdmUoYWJzUmhzLCBhYnNMaHMpO1xuICAgICAgICByZXR1cm4gIXJlbGF0aXZlLnN0YXJ0c1dpdGgoXCIuLlwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgcnN5bmNUcmFja2VkRmlsZXMgKGN3ZDogc3RyaW5nLCBzdGF0ZURpcjogc3RyaW5nLCB0YXJnZXQ6IHN0cmluZyk6IFByb21pc2U8e2hyZGVsdGF0aW1lOiBbbnVtYmVyLCBudW1iZXJdfT4ge1xuICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgYXdhaXQgZnMubWtkaXJwKGAke2N3ZH0vJHtzdGF0ZURpcn0vYnVpbGRzLyR7dGFyZ2V0fWApO1xuICAgICAgICBhd2FpdCBVdGlscy5iYXNoKGByc3luYyAtYSAtLWRlbGV0ZS1leGNsdWRlZCAtLWRlbGV0ZSAtLWV4Y2x1ZGUtZnJvbT08KGdpdCBscy1maWxlcyAtbyAtLWRpcmVjdG9yeSB8IGF3ayAne3ByaW50IFwiL1wiJDB9JykgLS1leGNsdWRlICR7c3RhdGVEaXJ9LyAuLyAke3N0YXRlRGlyfS9idWlsZHMvJHt0YXJnZXR9L2AsIGN3ZCk7XG4gICAgICAgIHJldHVybiB7aHJkZWx0YXRpbWU6IHByb2Nlc3MuaHJ0aW1lKHRpbWUpfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgY2hlY2tzdW1GaWxlcyAoY3dkOiBzdHJpbmcsIGZpbGVzOiBzdHJpbmdbXSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzOiBQcm9taXNlPHN0cmluZz5bXSA9IFtdO1xuXG4gICAgICAgIGZpbGVzLmZvckVhY2goKGZpbGUpID0+IHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2gobmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghIGZzLnBhdGhFeGlzdHNTeW5jKGZpbGUpKSByZXNvbHZlKHBhdGgucmVsYXRpdmUoY3dkLCBmaWxlKSk7IC8vIG11c3QgdXNlIHJlbGF0aXZlIHBhdGggaGVyZSwgc28gdGhhdCBjaGVja3N1bSBjYW4gYmUgZGV0ZXJtaW5pc3RpYyB3aGVuIHJ1bm5pbmcgdGhlIHVuaXQgdGVzdHNcbiAgICAgICAgICAgICAgICBjaGVja3N1bS5maWxlKGZpbGUsIChlcnIsIGhhc2gpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoaGFzaCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICAgICAgcmV0dXJuIGNoZWNrc3VtKHJlc3VsdC5qb2luKFwiXCIpKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgaXNPYmplY3QgKHY6IGFueSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKHYpID09PSBPYmplY3QucHJvdG90eXBlO1xuICAgIH1cblxuICAgIHN0YXRpYyBzd2l0Y2hTdGF0ZW1lbnRFeGhhdXN0aXZlQ2hlY2sgKHBhcmFtOiBuZXZlcik6IG5ldmVyIHtcbiAgICAgICAgLy8gaHR0cHM6Ly9kZXYudG8vYmFiYWsvZXhoYXVzdGl2ZS10eXBlLWNoZWNraW5nLXdpdGgtdHlwZXNjcmlwdC00bDNmXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIGNhc2UgJHtwYXJhbX1gKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgZ2V0VHJhY2tlZEZpbGVzIChjd2Q6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgY29uc3QgbHNGaWxlc1JlcyA9IGF3YWl0IFV0aWxzLmJhc2goXCJnaXQgbHMtZmlsZXMgLS1kZWR1cGxpY2F0ZVwiLCBjd2QpO1xuICAgICAgICBpZiAobHNGaWxlc1Jlcy5leGl0Q29kZSAhPSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsaXN0IHRyYWNrZWQgZmlsZXMgaW4gJHtjd2R9OiAke2xzRmlsZXNSZXMuc3RkZXJyfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsc0ZpbGVzUmVzLnN0ZG91dC5zcGxpdChcIlxcblwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0QXhpb3NQcm94eUNvbmZpZyAoKTogQXhpb3NSZXF1ZXN0Q29uZmlnIHtcbiAgICAgICAgY29uc3QgcHJveHlFbnYgPSBwcm9jZXNzLmVudi5IVFRQU19QUk9YWSB8fCBwcm9jZXNzLmVudi5IVFRQX1BST1hZO1xuICAgICAgICBpZiAocHJveHlFbnYpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3h5VXJsID0gbmV3IFVSTChwcm94eUVudik7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3h5OiB7XG4gICAgICAgICAgICAgICAgICAgIGhvc3Q6IHByb3h5VXJsLmhvc3RuYW1lLFxuICAgICAgICAgICAgICAgICAgICBwb3J0OiBwcm94eVVybC5wb3J0ID8gcGFyc2VJbnQocHJveHlVcmwucG9ydCwgMTApIDogODA4MCxcbiAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2w6IHByb3h5VXJsLnByb3RvY29sLnJlcGxhY2UoXCI6XCIsIFwiXCIpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBzdGF0aWMgbm9ybWFsaXplVmFyaWFibGVzICh2YXJpYWJsZTogYW55KSB7XG4gICAgICAgIGlmICh2YXJpYWJsZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7IC8vIHZhcmlhYmxlJ3MgdmFsdWVzIGFyZSBudWxsYWJsZVxuICAgICAgICB9IGVsc2UgaWYgKFV0aWxzLmlzT2JqZWN0KHZhcmlhYmxlKSkge1xuICAgICAgICAgICAgaWYgKHZhcmlhYmxlW1wiZXhwYW5kXCJdID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFyaWFibGVbXCJ2YWx1ZVwiXSkucmVwbGFjZUFsbChcIiRcIiwgKCkgPT4gXCIkJFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFyaWFibGVbXCJ2YWx1ZVwiXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhcmlhYmxlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
package/src/validator.js
CHANGED
|
@@ -37,7 +37,7 @@ ${e.trimEnd()}
|
|
|
37
37
|
|
|
38
38
|
For further troubleshooting, consider either of the following:
|
|
39
39
|
\t• Copy the content of {blueBright ${terminalLink(".gitlab-ci-local/expanded-gitlab-ci.yml", pathToExpandedGitLabCi)}} to the ${terminalLink("pipeline editor", "https://docs.gitlab.com/ee/ci/pipeline_editor/")} to debug it
|
|
40
|
-
\t• Use --ignore-schema-paths
|
|
40
|
+
\t• Use --ignore-schema-paths "#/definitions/tags/minItems" --ignore-schema-paths "#/additionalProperties" to partially disable certain validation rule
|
|
41
41
|
\t• Use --json-schema-validation=false to disable schema validation (not recommended)}
|
|
42
42
|
`);
|
|
43
43
|
}
|
|
@@ -148,4 +148,4 @@ For further troubleshooting, consider either of the following:
|
|
|
148
148
|
return warnings;
|
|
149
149
|
}
|
|
150
150
|
}
|
|
151
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQztBQUV0QixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sTUFBTSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLFlBQVksTUFBTSxlQUFlLENBQUM7QUFHekMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBRXJCLE1BQU0sT0FBTyxTQUFTO0lBQ2xCLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBRSxFQUFDLHNCQUFzQixFQUFFLGNBQWMsRUFBRSxJQUFJLEVBSXpFO1FBQ0csTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7WUFDaEIsT0FBTyxFQUFFLElBQUk7WUFDYixTQUFTLEVBQUUsSUFBSTtZQUNmLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLGVBQWUsRUFBRSxLQUFLO1lBQ3RCLFdBQVcsRUFBRSxLQUFLLEVBQUUscUVBQXFFO1lBQ3pGLFFBQVEsRUFBRSxDQUFDLHFCQUFxQixDQUFDO1NBQ3BDLENBQUMsQ0FBQztRQUNILE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksS0FBSztZQUFFLE9BQU87UUFDbEIsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDO1lBQ2pDLElBQUksRUFBRSxjQUFjO1lBQ3BCLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTTtTQUMxQixDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMs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QztZQUM5RCxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBanYgZnJvbSBcImFqdlwiO1xuaW1wb3J0IHtKb2J9IGZyb20gXCIuL2pvYi5qc1wiO1xuaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgc2NoZW1hIGZyb20gXCIuL3NjaGVtYS9pbmRleC5qc1wiO1xuaW1wb3J0IHtiZXR0ZXJBanZFcnJvcnN9IGZyb20gXCIuL3NjaGVtYS1lcnJvci5qc1wiO1xuaW1wb3J0IHRlcm1pbmFsTGluayBmcm9tIFwidGVybWluYWwtbGlua1wiO1xuaW1wb3J0IHtBcmd2fSBmcm9tIFwiLi9hcmd2LmpzXCI7XG5cbmNvbnN0IE1BWF9FUlJPUlMgPSA1O1xuXG5leHBvcnQgY2xhc3MgVmFsaWRhdG9yIHtcbiAgICBzdGF0aWMganNvblNjaGVtYVZhbGlkYXRpb24gKHtwYXRoVG9FeHBhbmRlZEdpdExhYkNpLCBnaXRMYWJDaUNvbmZpZywgYXJndn06IHtcbiAgICAgICAgcGF0aFRvRXhwYW5kZWRHaXRMYWJDaTogc3RyaW5nO1xuICAgICAgICBnaXRMYWJDaUNvbmZpZzogb2JqZWN0O1xuICAgICAgICBhcmd2OiBBcmd2O1xuICAgIH0pIHtcbiAgICAgICAgY29uc3QgYWp2ID0gbmV3IEFqdih7XG4gICAgICAgICAgICB2ZXJib3NlOiB0cnVlLFxuICAgICAgICAgICAgYWxsRXJyb3JzOiB0cnVlLFxuICAgICAgICAgICAgYWxsb3dVbmlvblR5cGVzOiB0cnVlLFxuICAgICAgICAgICAgdmFsaWRhdGVGb3JtYXRzOiBmYWxzZSxcbiAgICAgICAgICAgIHN0cmljdFR5cGVzOiBmYWxzZSwgLy8gdG8gc3VwcHJlc3MgdGhlIG1pc3NpbmcgdHlwZXMgZGVmaW5lZCBpbiB0aGUgZ2l0bGFiLWNpIGpzb24gc2NoZW1hXG4gICAgICAgICAgICBrZXl3b3JkczogW1wibWFya2Rvd25EZXNjcmlwdGlvblwiXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlID0gYWp2LmNvbXBpbGUoc2NoZW1hKTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZShnaXRMYWJDaUNvbmZpZyk7XG4gICAgICAgIGlmICh2YWxpZCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBiZXR0ZXJFcnJvcnMgPSBiZXR0ZXJBanZFcnJvcnMoe1xuICAgICAgICAgICAgZGF0YTogZ2l0TGFiQ2lDb25maWcsXG4gICAgICAgICAgICBlcnJvcnM6IHZhbGlkYXRlLmVycm9ycyxcbiAgICAgICAgfSkuZmlsdGVyKGJldHRlckVycm9yID0+ICFhcmd2Lmlnbm9yZVNjaGVtYVBhdGhzLmluY2x1ZGVzKGJldHRlckVycm9yLnNjaGVtYVBhdGgpKTtcblxuICAgICAgICBsZXQgZTogc3RyaW5nID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGJldHRlckVycm9ycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgKyAxID4gTUFYX0VSUk9SUykge1xuICAgICAgICAgICAgICAgIGUgKz0gYFxcdC4uLiBhbmQgJHtsZW4gLSBNQVhfRVJST1JTfSBtb3JlYDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGUgKz0gY2hhbGtgXFx04oCiIHtyZWRCcmlnaHQgJHtiZXR0ZXJFcnJvcnNbaV0ubWVzc2FnZX19IGF0IHtibHVlQnJpZ2h0ICR7YmV0dGVyRXJyb3JzW2ldLnBhdGh9fSB7Z3JleSBbJHtiZXR0ZXJFcnJvcnNbaV0uc2NoZW1hUGF0aH1dfVxcbmA7XG4gICAgICAgIH1cblxuICAgICAgICBhc3NlcnQodmFsaWQgfHwgYmV0dGVyRXJyb3JzLmxlbmd0aCA9PSAwLCBjaGFsa2BcbntyZXNldCBJbnZhbGlkIC5naXRsYWItY2kueW1sIGNvbmZpZ3VyYXRpb24hXG4ke2UudHJpbUVuZCgpfVxuXG5Gb3IgZnVydGhlciB0cm91Ymxlc2hvb3RpbmcsIGNvbnNpZGVyIGVpdGhlciBvZiB0aGUgZm9sbG93aW5nOlxuXFx04oCiIENvcHkgdGhlIGNvbnRlbnQgb2Yge2JsdWVCcmlnaHQgJHt0ZXJtaW5hbExpbmsoXCIuZ2l0bGFiLWNpLWxvY2FsL2V4cGFuZGVkLWdpdGxhYi1jaS55bWxcIiwgcGF0aFRvRXhwYW5kZWRHaXRMYWJDaSl9fSB0byB0aGUgJHt0ZXJtaW5hbExpbmsoXCJwaXBlbGluZSBlZGl0b3JcIiwgXCJodHRwczovL2RvY3MuZ2l0bGFiLmNvbS9lZS9jaS9waXBlbGluZV9lZGl0b3IvXCIpfSB0byBkZWJ1ZyBpdFxuXFx04oCiIFVzZSAtLWlnbm9yZS1zY2hlbWEtcGF0aHM9IFwiIy9kZWZpbml0aW9ucy90YWdzL21pbkl0ZW1zXCIgLS1pZ25vcmUtc2NoZW1hLXBhdGhzIFwiIy9hZGRpdGlvbmFsUHJvcGVydGllc1wiIHRvIHBhcnRpYWxseSBkaXNhYmxlIGNlcnRhaW4gdmFsaWRhdGlvbiBydWxlXG5cXHTigKIgVXNlIC0tanNvbi1zY2hlbWEtdmFsaWRhdGlvbj1mYWxzZSB0byBkaXNhYmxlIHNjaGVtYSB2YWxpZGF0aW9uIChub3QgcmVjb21tZW5kZWQpfVxuYCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgbmVlZHMgKGpvYnM6IFJlYWRvbmx5QXJyYXk8Sm9iPiwgc3RhZ2VzOiByZWFkb25seSBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgam9iIG9mIGpvYnMpIHtcbiAgICAgICAgICAgIGlmIChqb2IubmVlZHMgPT09IG51bGwgfHwgam9iLm5lZWRzLmxlbmd0aCA9PT0gMCkgY29udGludWU7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgW2ksIG5lZWRdIG9mIGpvYi5uZWVkcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAobmVlZC5waXBlbGluZSkge1xuICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy5wdXNoKGAke2pvYi5uYW1lfS5uZWVkc1ske2l9XS5qb2I6JHtuZWVkLmpvYn0gaWdub3JlZCwgcGlwZWxpbmUga2V5IG5vdCBzdXBwb3J0ZWRgKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChuZWVkLnByb2plY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgd2FybmluZ3MucHVzaChgJHtqb2IubmFtZX0ubmVlZHNbJHtpfV0gaWdub3JlZCwgcHJvamVjdCBrZXkgbm90IHN1cHBvcnRlZGApO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbmVlZEpvYiA9IGpvYnMuZmluZChqID0+IGouYmFzZU5hbWUgPT09IG5lZWQuam9iKTtcbiAgICAgICAgICAgICAgICBpZiAobmVlZC5vcHRpb25hbCAmJiAhbmVlZEpvYikgY29udGludWU7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KG5lZWRKb2IgIT0gbnVsbCwgY2hhbGtgbmVlZHM6IFt7Ymx1ZUJyaWdodCAke25lZWQuam9ifX1dIGZvciB7Ymx1ZUJyaWdodCAke2pvYi5iYXNlTmFtZX19IGNvdWxkIG5vdCBiZSBmb3VuZGApO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5lZWRKb2JTdGFnZUluZGV4ID0gc3RhZ2VzLmluZGV4T2YobmVlZEpvYi5zdGFnZSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgam9iU3RhZ2VJbmRleCA9IHN0YWdlcy5pbmRleE9mKGpvYi5zdGFnZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KG5lZWRKb2JTdGFnZUluZGV4IDw9IGpvYlN0YWdlSW5kZXgsIGNoYWxrYG5lZWRzOiBbe2JsdWVCcmlnaHQgJHtuZWVkSm9iLm5hbWV9fV0gZm9yIHtibHVlQnJpZ2h0ICR7am9iLm5hbWV9fSBpcyBpbiBhIGZ1dHVyZSBzdGFnZWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdhcm5pbmdzO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGRlcGVuZGVuY2llcyAoam9iczogUmVhZG9ubHlBcnJheTxKb2I+LCBzdGFnZXM6IHJlYWRvbmx5IHN0cmluZ1tdKSB7XG4gICAgICAgIGZvciAoY29uc3Qgam9iIG9mIGpvYnMpIHtcbiAgICAgICAgICAgIGlmIChqb2IuZGVwZW5kZW5jaWVzID09PSBudWxsIHx8IGpvYi5kZXBlbmRlbmNpZXMubGVuZ3RoID09PSAwKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgdW5kZWZEZXBzID0gam9iLmRlcGVuZGVuY2llcy5maWx0ZXIoKGopID0+ICFqb2JzLnNvbWUobiA9PiBuLmJhc2VOYW1lID09PSBqKSk7XG4gICAgICAgICAgICBhc3NlcnQodW5kZWZEZXBzLmxlbmd0aCAhPT0gam9iLmRlcGVuZGVuY2llcy5sZW5ndGgsIGNoYWxrYGRlcGVuZGVuY2llczogW3tibHVlQnJpZ2h0ICR7dW5kZWZEZXBzLmpvaW4oXCIsXCIpfX1dIGZvciB7Ymx1ZUJyaWdodCAke2pvYi5uYW1lfX0gY2Fubm90IGJlIGZvdW5kYCk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZGVwIG9mIGpvYi5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBKb2IgPSBqb2JzLmZpbmQoaiA9PiBqLmJhc2VOYW1lID09PSBkZXApO1xuICAgICAgICAgICAgICAgIGFzc2VydChkZXBKb2IgIT0gbnVsbCwgY2hhbGtgZGVwZW5kZW5jaWVzOiBbe2JsdWVCcmlnaHQgJHtkZXB9fV0gZm9yIHtibHVlQnJpZ2h0ICR7am9iLmJhc2VOYW1lfX0gY291bGQgbm90IGJlIGZvdW5kYCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwSm9iU3RhZ2VJbmRleCA9IHN0YWdlcy5pbmRleE9mKGRlcEpvYi5zdGFnZSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgam9iU3RhZ2VJbmRleCA9IHN0YWdlcy5pbmRleE9mKGpvYi5zdGFnZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRlcEpvYlN0YWdlSW5kZXggPD0gam9iU3RhZ2VJbmRleCwgY2hhbGtgZGVwZW5kZW5jaWVzOiBbe2JsdWVCcmlnaHQgJHtkZXBKb2IubmFtZX19XSBmb3Ige2JsdWVCcmlnaHQgJHtqb2IubmFtZX19IGlzIGluIGEgZnV0dXJlIHN0YWdlYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBkZXBlbmRlbmNpZXNDb250YWlubWVudCAoam9iczogUmVhZG9ubHlBcnJheTxKb2I+KSB7XG4gICAgICAgIGZvciAoY29uc3Qgam9iIG9mIGpvYnMpIHtcbiAgICAgICAgICAgIGNvbnN0IG5lZWRzID0gam9iLm5lZWRzO1xuICAgICAgICAgICAgY29uc3QgZGVwZW5kZW5jaWVzID0gam9iLmRlcGVuZGVuY2llcztcbiAgICAgICAgICAgIGlmIChuZWVkcyAmJiBuZWVkcy5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKCFkZXBlbmRlbmNpZXMgfHwgIW5lZWRzKSBjb250aW51ZTtcblxuXG4gICAgICAgICAgICBjb25zdCBldmVyeUluY2x1ZGVkID0gZGVwZW5kZW5jaWVzLmV2ZXJ5KChkZXA6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZWVkcy5zb21lKG4gPT4gbi5qb2IgPT09IGRlcCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGFzc2VydE1zZyA9IGAke2pvYi5mb3JtYXR0ZWRKb2JOYW1lfSBuZWVkczogJyR7bmVlZHMubWFwKG4gPT4gbi5qb2IpLmpvaW4oXCIsXCIpfScgZG9lc24ndCBmdWxseSBjb250YWluIGRlcGVuZGVuY2llczogJyR7ZGVwZW5kZW5jaWVzLmpvaW4oXCIsXCIpfSdgO1xuICAgICAgICAgICAgYXNzZXJ0KGV2ZXJ5SW5jbHVkZWQsIGFzc2VydE1zZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGVzZSBqb2JzIG5hbWVkIGFyZSByZXNlcnZlZCBrZXl3b3JkcyBpbiBHaXRMYWIgQ0kgYnV0IGRvZXMgbm90IHByZXZlbnQgdGhlIHBpcGVsaW5lIGZyb20gcnVubmluZ1xuICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlY293L2dpdGxhYi1jaS1sb2NhbC9pc3N1ZXMvMTI2M1xuICAgICAqIEBwYXJhbSBqb2JzTmFtZXNcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIHBvdGVudGlhbElsbGVnYWxKb2JOYW1lIChqb2JzTmFtZXM6IHN0cmluZ1tdKSB7XG4gICAgICAgIGNvbnN0IHdhcm5pbmdzID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgam9iTmFtZSBvZiBqb2JzTmFtZXMpIHtcbiAgICAgICAgICAgIGlmIChuZXcgU2V0KFtcInR5cGVzXCIsIFwidHJ1ZVwiLCBcImZhbHNlXCIsIFwibmlsXCJdKS5oYXMoam9iTmFtZSkpIHtcbiAgICAgICAgICAgICAgICB3YXJuaW5ncy5wdXNoKGBKb2IgbmFtZSBcIiR7am9iTmFtZX1cIiBpcyBhIHJlc2VydmVkIGtleXdvcmQuIChodHRwczovL2RvY3MuZ2l0bGFiLmNvbS9lZS9jaS9qb2JzLyNqb2ItbmFtZS1saW1pdGF0aW9ucylgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd2FybmluZ3M7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgc2NyaXB0QmxhbmsgKGpvYnM6IFJlYWRvbmx5QXJyYXk8Sm9iPikge1xuICAgICAgICBmb3IgKGNvbnN0IGpvYiBvZiBqb2JzKSB7XG4gICAgICAgICAgICBpZiAoam9iLnRyaWdnZXIpIGNvbnRpbnVlOyAvLyBKb2JzIHdpdGggdHJpZ2dlciBhcmUgYWxsb3dlZCB0byBoYXZlIGVtcHR5IHNjcmlwdFxuICAgICAgICAgICAgYXNzZXJ0KGpvYi5zY3JpcHRzLmxlbmd0aCA+IDAsIGNoYWxrYHtibHVlICR7am9iLm5hbWV9fSBoYXMgZW1wdHkgc2NyaXB0YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBhcnJheU9mU3RyaW5ncyAoam9iczogUmVhZG9ubHlBcnJheTxKb2I+KSB7XG4gICAgICAgIGZvciAoY29uc3Qgam9iIG9mIGpvYnMpIHtcbiAgICAgICAgICAgIGlmIChqb2IudHJpZ2dlcikgY29udGludWU7XG4gICAgICAgICAgICBqb2IuYmVmb3JlU2NyaXB0cy5mb3JFYWNoKChzOiBhbnkpID0+IGFzc2VydCh0eXBlb2YgcyA9PT0gXCJzdHJpbmdcIiwgY2hhbGtge2JsdWUgJHtqb2IubmFtZX19IGJlZm9yZV9zY3JpcHQgY29udGFpbnMgbm9uIHN0cmluZyB2YWx1ZWApKTtcbiAgICAgICAgICAgIGpvYi5hZnRlclNjcmlwdHMuZm9yRWFjaCgoczogYW55KSA9PiBhc3NlcnQodHlwZW9mIHMgPT09IFwic3RyaW5nXCIsIGNoYWxrYHtibHVlICR7am9iLm5hbWV9fSBhZnRlcl9zY3JpcHQgY29udGFpbnMgbm9uIHN0cmluZyB2YWx1ZWApKTtcbiAgICAgICAgICAgIGpvYi5zY3JpcHRzLmZvckVhY2goKHM6IGFueSkgPT4gYXNzZXJ0KHR5cGVvZiBzID09PSBcInN0cmluZ1wiLCBjaGFsa2B7Ymx1ZSAke2pvYi5uYW1lfX0gc2NyaXB0IGNvbnRhaW5zIG5vbiBzdHJpbmcgdmFsdWVgKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgcnVuIChqb2JzOiBSZWFkb25seUFycmF5PEpvYj4sIHN0YWdlczogcmVhZG9ubHkgc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG4gICAgICAgIHRoaXMuc2NyaXB0Qmxhbmsoam9icyk7XG4gICAgICAgIHRoaXMuYXJyYXlPZlN0cmluZ3Moam9icyk7XG4gICAgICAgIHdhcm5pbmdzLnB1c2goLi4udGhpcy5uZWVkcyhqb2JzLCBzdGFnZXMpKTtcbiAgICAgICAgdGhpcy5kZXBlbmRlbmNpZXMoam9icywgc3RhZ2VzKTtcbiAgICAgICAgdGhpcy5kZXBlbmRlbmNpZXNDb250YWlubWVudChqb2JzKTtcbiAgICAgICAgd2FybmluZ3MucHVzaCguLi50aGlzLnBvdGVudGlhbElsbGVnYWxKb2JOYW1lKGpvYnMubWFwKGogPT4gai5iYXNlTmFtZSkpKTtcbiAgICAgICAgd2FybmluZ3MucHVzaCguLi50aGlzLmFydGlmYWN0cyhqb2JzKSk7XG4gICAgICAgIHJldHVybiB3YXJuaW5ncztcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBhcnRpZmFjdHMgKGpvYnM6IFJlYWRvbmx5QXJyYXk8Sm9iPikge1xuICAgICAgICBjb25zdCB3YXJuaW5nczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBqb2Igb2Ygam9icykge1xuICAgICAgICAgICAgaWYgKGpvYi5hcnRpZmFjdHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB3YXJuaW5ncy5wdXNoKGAke2pvYi5uYW1lfS5hcnRpZmFjdHMgaXMgbnVsbCwgaWdub3JpbmcuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdhcm5pbmdzO1xuICAgIH1cbn1cbiJdfQ==
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQztBQUV0QixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sTUFBTSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLFlBQVksTUFBTSxlQUFlLENBQUM7QUFHekMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBRXJCLE1BQU0sT0FBTyxTQUFTO0lBQ2xCLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBRSxFQUFDLHNCQUFzQixFQUFFLGNBQWMsRUFBRSxJQUFJLEVBSXpFO1FBQ0csTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7WUFDaEIsT0FBTyxFQUFFLElBQUk7WUFDYixTQUFTLEVBQUUsSUFBSTtZQUNmLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLGVBQWUsRUFBRSxLQUFLO1lBQ3RCLFdBQVcsRUFBRSxLQUFLLEVBQUUscUVBQXFFO1lBQ3pGLFFBQVEsRUFBRSxDQUFDLHFCQUFxQixDQUFDO1NBQ3BDLENBQUMsQ0FBQztRQUNILE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksS0FBSztZQUFFLE9BQU87UUFDbEIsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDO1lBQ2pDLElBQUksRUFBRSxjQUFjO1lBQ3BCLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTTtTQUMxQixDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMs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QztZQUM5RCxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBanYgZnJvbSBcImFqdlwiO1xuaW1wb3J0IHtKb2J9IGZyb20gXCIuL2pvYi5qc1wiO1xuaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgc2NoZW1hIGZyb20gXCIuL3NjaGVtYS9pbmRleC5qc1wiO1xuaW1wb3J0IHtiZXR0ZXJBanZFcnJvcnN9IGZyb20gXCIuL3NjaGVtYS1lcnJvci5qc1wiO1xuaW1wb3J0IHRlcm1pbmFsTGluayBmcm9tIFwidGVybWluYWwtbGlua1wiO1xuaW1wb3J0IHtBcmd2fSBmcm9tIFwiLi9hcmd2LmpzXCI7XG5cbmNvbnN0IE1BWF9FUlJPUlMgPSA1O1xuXG5leHBvcnQgY2xhc3MgVmFsaWRhdG9yIHtcbiAgICBzdGF0aWMganNvblNjaGVtYVZhbGlkYXRpb24gKHtwYXRoVG9FeHBhbmRlZEdpdExhYkNpLCBnaXRMYWJDaUNvbmZpZywgYXJndn06IHtcbiAgICAgICAgcGF0aFRvRXhwYW5kZWRHaXRMYWJDaTogc3RyaW5nO1xuICAgICAgICBnaXRMYWJDaUNvbmZpZzogb2JqZWN0O1xuICAgICAgICBhcmd2OiBBcmd2O1xuICAgIH0pIHtcbiAgICAgICAgY29uc3QgYWp2ID0gbmV3IEFqdih7XG4gICAgICAgICAgICB2ZXJib3NlOiB0cnVlLFxuICAgICAgICAgICAgYWxsRXJyb3JzOiB0cnVlLFxuICAgICAgICAgICAgYWxsb3dVbmlvblR5cGVzOiB0cnVlLFxuICAgICAgICAgICAgdmFsaWRhdGVGb3JtYXRzOiBmYWxzZSxcbiAgICAgICAgICAgIHN0cmljdFR5cGVzOiBmYWxzZSwgLy8gdG8gc3VwcHJlc3MgdGhlIG1pc3NpbmcgdHlwZXMgZGVmaW5lZCBpbiB0aGUgZ2l0bGFiLWNpIGpzb24gc2NoZW1hXG4gICAgICAgICAgICBrZXl3b3JkczogW1wibWFya2Rvd25EZXNjcmlwdGlvblwiXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlID0gYWp2LmNvbXBpbGUoc2NoZW1hKTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZShnaXRMYWJDaUNvbmZpZyk7XG4gICAgICAgIGlmICh2YWxpZCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBiZXR0ZXJFcnJvcnMgPSBiZXR0ZXJBanZFcnJvcnMoe1xuICAgICAgICAgICAgZGF0YTogZ2l0TGFiQ2lDb25maWcsXG4gICAgICAgICAgICBlcnJvcnM6IHZhbGlkYXRlLmVycm9ycyxcbiAgICAgICAgfSkuZmlsdGVyKGJldHRlckVycm9yID0+ICFhcmd2Lmlnbm9yZVNjaGVtYVBhdGhzLmluY2x1ZGVzKGJldHRlckVycm9yLnNjaGVtYVBhdGgpKTtcblxuICAgICAgICBsZXQgZTogc3RyaW5nID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGJldHRlckVycm9ycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgKyAxID4gTUFYX0VSUk9SUykge1xuICAgICAgICAgICAgICAgIGUgKz0gYFxcdC4uLiBhbmQgJHtsZW4gLSBNQVhfRVJST1JTfSBtb3JlYDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGUgKz0gY2hhbGtgXFx04oCiIHtyZWRCcmlnaHQgJHtiZXR0ZXJFcnJvcnNbaV0ubWVzc2FnZX19IGF0IHtibHVlQnJpZ2h0ICR7YmV0dGVyRXJyb3JzW2ldLnBhdGh9fSB7Z3JleSBbJHtiZXR0ZXJFcnJvcnNbaV0uc2NoZW1hUGF0aH1dfVxcbmA7XG4gICAgICAgIH1cblxuICAgICAgICBhc3NlcnQodmFsaWQgfHwgYmV0dGVyRXJyb3JzLmxlbmd0aCA9PSAwLCBjaGFsa2BcbntyZXNldCBJbnZhbGlkIC5naXRsYWItY2kueW1sIGNvbmZpZ3VyYXRpb24hXG4ke2UudHJpbUVuZCgpfVxuXG5Gb3IgZnVydGhlciB0cm91Ymxlc2hvb3RpbmcsIGNvbnNpZGVyIGVpdGhlciBvZiB0aGUgZm9sbG93aW5nOlxuXFx04oCiIENvcHkgdGhlIGNvbnRlbnQgb2Yge2JsdWVCcmlnaHQgJHt0ZXJtaW5hbExpbmsoXCIuZ2l0bGFiLWNpLWxvY2FsL2V4cGFuZGVkLWdpdGxhYi1jaS55bWxcIiwgcGF0aFRvRXhwYW5kZWRHaXRMYWJDaSl9fSB0byB0aGUgJHt0ZXJtaW5hbExpbmsoXCJwaXBlbGluZSBlZGl0b3JcIiwgXCJodHRwczovL2RvY3MuZ2l0bGFiLmNvbS9lZS9jaS9waXBlbGluZV9lZGl0b3IvXCIpfSB0byBkZWJ1ZyBpdFxuXFx04oCiIFVzZSAtLWlnbm9yZS1zY2hlbWEtcGF0aHMgXCIjL2RlZmluaXRpb25zL3RhZ3MvbWluSXRlbXNcIiAtLWlnbm9yZS1zY2hlbWEtcGF0aHMgXCIjL2FkZGl0aW9uYWxQcm9wZXJ0aWVzXCIgdG8gcGFydGlhbGx5IGRpc2FibGUgY2VydGFpbiB2YWxpZGF0aW9uIHJ1bGVcblxcdOKAoiBVc2UgLS1qc29uLXNjaGVtYS12YWxpZGF0aW9uPWZhbHNlIHRvIGRpc2FibGUgc2NoZW1hIHZhbGlkYXRpb24gKG5vdCByZWNvbW1lbmRlZCl9XG5gKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBuZWVkcyAoam9iczogUmVhZG9ubHlBcnJheTxKb2I+LCBzdGFnZXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgICAgICBjb25zdCB3YXJuaW5nczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBqb2Igb2Ygam9icykge1xuICAgICAgICAgICAgaWYgKGpvYi5uZWVkcyA9PT0gbnVsbCB8fCBqb2IubmVlZHMubGVuZ3RoID09PSAwKSBjb250aW51ZTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBbaSwgbmVlZF0gb2Ygam9iLm5lZWRzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgIGlmIChuZWVkLnBpcGVsaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goYCR7am9iLm5hbWV9Lm5lZWRzWyR7aX1dLmpvYjoke25lZWQuam9ifSBpZ25vcmVkLCBwaXBlbGluZSBrZXkgbm90IHN1cHBvcnRlZGApO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5lZWQucHJvamVjdCkge1xuICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy5wdXNoKGAke2pvYi5uYW1lfS5uZWVkc1ske2l9XSBpZ25vcmVkLCBwcm9qZWN0IGtleSBub3Qgc3VwcG9ydGVkYCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBuZWVkSm9iID0gam9icy5maW5kKGogPT4gai5iYXNlTmFtZSA9PT0gbmVlZC5qb2IpO1xuICAgICAgICAgICAgICAgIGlmIChuZWVkLm9wdGlvbmFsICYmICFuZWVkSm9iKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBhc3NlcnQobmVlZEpvYiAhPSBudWxsLCBjaGFsa2BuZWVkczogW3tibHVlQnJpZ2h0ICR7bmVlZC5qb2J9fV0gZm9yIHtibHVlQnJpZ2h0ICR7am9iLmJhc2VOYW1lfX0gY291bGQgbm90IGJlIGZvdW5kYCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmVlZEpvYlN0YWdlSW5kZXggPSBzdGFnZXMuaW5kZXhPZihuZWVkSm9iLnN0YWdlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBqb2JTdGFnZUluZGV4ID0gc3RhZ2VzLmluZGV4T2Yoam9iLnN0YWdlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQobmVlZEpvYlN0YWdlSW5kZXggPD0gam9iU3RhZ2VJbmRleCwgY2hhbGtgbmVlZHM6IFt7Ymx1ZUJyaWdodCAke25lZWRKb2IubmFtZX19XSBmb3Ige2JsdWVCcmlnaHQgJHtqb2IubmFtZX19IGlzIGluIGEgZnV0dXJlIHN0YWdlYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd2FybmluZ3M7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZGVwZW5kZW5jaWVzIChqb2JzOiBSZWFkb25seUFycmF5PEpvYj4sIHN0YWdlczogcmVhZG9ubHkgc3RyaW5nW10pIHtcbiAgICAgICAgZm9yIChjb25zdCBqb2Igb2Ygam9icykge1xuICAgICAgICAgICAgaWYgKGpvYi5kZXBlbmRlbmNpZXMgPT09IG51bGwgfHwgam9iLmRlcGVuZGVuY2llcy5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCB1bmRlZkRlcHMgPSBqb2IuZGVwZW5kZW5jaWVzLmZpbHRlcigoaikgPT4gIWpvYnMuc29tZShuID0+IG4uYmFzZU5hbWUgPT09IGopKTtcbiAgICAgICAgICAgIGFzc2VydCh1bmRlZkRlcHMubGVuZ3RoICE9PSBqb2IuZGVwZW5kZW5jaWVzLmxlbmd0aCwgY2hhbGtgZGVwZW5kZW5jaWVzOiBbe2JsdWVCcmlnaHQgJHt1bmRlZkRlcHMuam9pbihcIixcIil9fV0gZm9yIHtibHVlQnJpZ2h0ICR7am9iLm5hbWV9fSBjYW5ub3QgYmUgZm91bmRgKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBkZXAgb2Ygam9iLmRlcGVuZGVuY2llcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlcEpvYiA9IGpvYnMuZmluZChqID0+IGouYmFzZU5hbWUgPT09IGRlcCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRlcEpvYiAhPSBudWxsLCBjaGFsa2BkZXBlbmRlbmNpZXM6IFt7Ymx1ZUJyaWdodCAke2RlcH19XSBmb3Ige2JsdWVCcmlnaHQgJHtqb2IuYmFzZU5hbWV9fSBjb3VsZCBub3QgYmUgZm91bmRgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBKb2JTdGFnZUluZGV4ID0gc3RhZ2VzLmluZGV4T2YoZGVwSm9iLnN0YWdlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBqb2JTdGFnZUluZGV4ID0gc3RhZ2VzLmluZGV4T2Yoam9iLnN0YWdlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGVwSm9iU3RhZ2VJbmRleCA8PSBqb2JTdGFnZUluZGV4LCBjaGFsa2BkZXBlbmRlbmNpZXM6IFt7Ymx1ZUJyaWdodCAke2RlcEpvYi5uYW1lfX1dIGZvciB7Ymx1ZUJyaWdodCAke2pvYi5uYW1lfX0gaXMgaW4gYSBmdXR1cmUgc3RhZ2VgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGRlcGVuZGVuY2llc0NvbnRhaW5tZW50IChqb2JzOiBSZWFkb25seUFycmF5PEpvYj4pIHtcbiAgICAgICAgZm9yIChjb25zdCBqb2Igb2Ygam9icykge1xuICAgICAgICAgICAgY29uc3QgbmVlZHMgPSBqb2IubmVlZHM7XG4gICAgICAgICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSBqb2IuZGVwZW5kZW5jaWVzO1xuICAgICAgICAgICAgaWYgKG5lZWRzICYmIG5lZWRzLmxlbmd0aCA9PT0gMCkgY29udGludWU7XG4gICAgICAgICAgICBpZiAoIWRlcGVuZGVuY2llcyB8fCAhbmVlZHMpIGNvbnRpbnVlO1xuXG5cbiAgICAgICAgICAgIGNvbnN0IGV2ZXJ5SW5jbHVkZWQgPSBkZXBlbmRlbmNpZXMuZXZlcnkoKGRlcDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5lZWRzLnNvbWUobiA9PiBuLmpvYiA9PT0gZGVwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgYXNzZXJ0TXNnID0gYCR7am9iLmZvcm1hdHRlZEpvYk5hbWV9IG5lZWRzOiAnJHtuZWVkcy5tYXAobiA9PiBuLmpvYikuam9pbihcIixcIil9JyBkb2Vzbid0IGZ1bGx5IGNvbnRhaW4gZGVwZW5kZW5jaWVzOiAnJHtkZXBlbmRlbmNpZXMuam9pbihcIixcIil9J2A7XG4gICAgICAgICAgICBhc3NlcnQoZXZlcnlJbmNsdWRlZCwgYXNzZXJ0TXNnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZXNlIGpvYnMgbmFtZWQgYXJlIHJlc2VydmVkIGtleXdvcmRzIGluIEdpdExhYiBDSSBidXQgZG9lcyBub3QgcHJldmVudCB0aGUgcGlwZWxpbmUgZnJvbSBydW5uaW5nXG4gICAgICogaHR0cHM6Ly9naXRodWIuY29tL2ZpcmVjb3cvZ2l0bGFiLWNpLWxvY2FsL2lzc3Vlcy8xMjYzXG4gICAgICogQHBhcmFtIGpvYnNOYW1lc1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgcG90ZW50aWFsSWxsZWdhbEpvYk5hbWUgKGpvYnNOYW1lczogc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3Qgd2FybmluZ3MgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBqb2JOYW1lIG9mIGpvYnNOYW1lcykge1xuICAgICAgICAgICAgaWYgKG5ldyBTZXQoW1widHlwZXNcIiwgXCJ0cnVlXCIsIFwiZmFsc2VcIiwgXCJuaWxcIl0pLmhhcyhqb2JOYW1lKSkge1xuICAgICAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goYEpvYiBuYW1lIFwiJHtqb2JOYW1lfVwiIGlzIGEgcmVzZXJ2ZWQga2V5d29yZC4gKGh0dHBzOi8vZG9jcy5naXRsYWIuY29tL2VlL2NpL2pvYnMvI2pvYi1uYW1lLWxpbWl0YXRpb25zKWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3YXJuaW5ncztcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBzY3JpcHRCbGFuayAoam9iczogUmVhZG9ubHlBcnJheTxKb2I+KSB7XG4gICAgICAgIGZvciAoY29uc3Qgam9iIG9mIGpvYnMpIHtcbiAgICAgICAgICAgIGlmIChqb2IudHJpZ2dlcikgY29udGludWU7IC8vIEpvYnMgd2l0aCB0cmlnZ2VyIGFyZSBhbGxvd2VkIHRvIGhhdmUgZW1wdHkgc2NyaXB0XG4gICAgICAgICAgICBhc3NlcnQoam9iLnNjcmlwdHMubGVuZ3RoID4gMCwgY2hhbGtge2JsdWUgJHtqb2IubmFtZX19IGhhcyBlbXB0eSBzY3JpcHRgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGFycmF5T2ZTdHJpbmdzIChqb2JzOiBSZWFkb25seUFycmF5PEpvYj4pIHtcbiAgICAgICAgZm9yIChjb25zdCBqb2Igb2Ygam9icykge1xuICAgICAgICAgICAgaWYgKGpvYi50cmlnZ2VyKSBjb250aW51ZTtcbiAgICAgICAgICAgIGpvYi5iZWZvcmVTY3JpcHRzLmZvckVhY2goKHM6IGFueSkgPT4gYXNzZXJ0KHR5cGVvZiBzID09PSBcInN0cmluZ1wiLCBjaGFsa2B7Ymx1ZSAke2pvYi5uYW1lfX0gYmVmb3JlX3NjcmlwdCBjb250YWlucyBub24gc3RyaW5nIHZhbHVlYCkpO1xuICAgICAgICAgICAgam9iLmFmdGVyU2NyaXB0cy5mb3JFYWNoKChzOiBhbnkpID0+IGFzc2VydCh0eXBlb2YgcyA9PT0gXCJzdHJpbmdcIiwgY2hhbGtge2JsdWUgJHtqb2IubmFtZX19IGFmdGVyX3NjcmlwdCBjb250YWlucyBub24gc3RyaW5nIHZhbHVlYCkpO1xuICAgICAgICAgICAgam9iLnNjcmlwdHMuZm9yRWFjaCgoczogYW55KSA9PiBhc3NlcnQodHlwZW9mIHMgPT09IFwic3RyaW5nXCIsIGNoYWxrYHtibHVlICR7am9iLm5hbWV9fSBzY3JpcHQgY29udGFpbnMgbm9uIHN0cmluZyB2YWx1ZWApKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBydW4gKGpvYnM6IFJlYWRvbmx5QXJyYXk8Sm9iPiwgc3RhZ2VzOiByZWFkb25seSBzdHJpbmdbXSkge1xuICAgICAgICBjb25zdCB3YXJuaW5nczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgdGhpcy5zY3JpcHRCbGFuayhqb2JzKTtcbiAgICAgICAgdGhpcy5hcnJheU9mU3RyaW5ncyhqb2JzKTtcbiAgICAgICAgd2FybmluZ3MucHVzaCguLi50aGlzLm5lZWRzKGpvYnMsIHN0YWdlcykpO1xuICAgICAgICB0aGlzLmRlcGVuZGVuY2llcyhqb2JzLCBzdGFnZXMpO1xuICAgICAgICB0aGlzLmRlcGVuZGVuY2llc0NvbnRhaW5tZW50KGpvYnMpO1xuICAgICAgICB3YXJuaW5ncy5wdXNoKC4uLnRoaXMucG90ZW50aWFsSWxsZWdhbEpvYk5hbWUoam9icy5tYXAoaiA9PiBqLmJhc2VOYW1lKSkpO1xuICAgICAgICB3YXJuaW5ncy5wdXNoKC4uLnRoaXMuYXJ0aWZhY3RzKGpvYnMpKTtcbiAgICAgICAgcmV0dXJuIHdhcm5pbmdzO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGFydGlmYWN0cyAoam9iczogUmVhZG9ubHlBcnJheTxKb2I+KSB7XG4gICAgICAgIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGpvYiBvZiBqb2JzKSB7XG4gICAgICAgICAgICBpZiAoam9iLmFydGlmYWN0cyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goYCR7am9iLm5hbWV9LmFydGlmYWN0cyBpcyBudWxsLCBpZ25vcmluZy5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd2FybmluZ3M7XG4gICAgfVxufVxuIl19
|
|
@@ -4,6 +4,7 @@ import chalk from "chalk";
|
|
|
4
4
|
import assert from "assert";
|
|
5
5
|
import { Utils } from "./utils.js";
|
|
6
6
|
import dotenv from "dotenv";
|
|
7
|
+
import deepExtend from "deep-extend";
|
|
7
8
|
export class VariablesFromFiles {
|
|
8
9
|
static async init(argv, writeStreams, gitData) {
|
|
9
10
|
const cwd = argv.cwd;
|
|
@@ -16,13 +17,19 @@ export class VariablesFromFiles {
|
|
|
16
17
|
let remoteFileData = {};
|
|
17
18
|
let homeFileData = {};
|
|
18
19
|
if (remoteVariables && !autoCompleting) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
20
|
+
for (let i = 0; i < remoteVariables.length; i++) {
|
|
21
|
+
const match = /(?<url>git@.*?)=(?<file>.*?)=(?<ref>.*)/.exec(remoteVariables[i]);
|
|
22
|
+
assert(match != null, "--remote-variables is malformed use 'git@gitlab.com:firecow/example.git=gitlab-variables.yml=master' syntax");
|
|
23
|
+
const url = match.groups?.url;
|
|
24
|
+
const file = match.groups?.file;
|
|
25
|
+
const ref = match.groups?.ref;
|
|
26
|
+
const res = await Utils.bash(`set -eou pipefail; git archive --remote=${url} ${ref} ${file} | tar -xO ${file}`, cwd);
|
|
27
|
+
const loadedYaml = yaml.load(`${res.stdout}`);
|
|
28
|
+
// Check if loadedYaml is an object
|
|
29
|
+
if (typeof loadedYaml === "object" && loadedYaml !== null) {
|
|
30
|
+
remoteFileData = deepExtend(remoteFileData, loadedYaml);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
26
33
|
}
|
|
27
34
|
if (await fs.pathExists(homeVariablesFile)) {
|
|
28
35
|
homeFileData = yaml.load(await fs.readFile(homeVariablesFile, "utf8"), { schema: yaml.FAILSAFE_SCHEMA });
|
|
@@ -133,4 +140,4 @@ export class VariablesFromFiles {
|
|
|
133
140
|
return key.replace(":", "/");
|
|
134
141
|
}
|
|
135
142
|
}
|
|
136
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWFibGVzLWZyb20tZmlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ2YXJpYWJsZXMtZnJvbS1maWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDMUIsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFDaEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ2pDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQWE1QixNQUFNLE9BQU8sa0JBQWtCO0lBRTNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFFLElBQVUsRUFBRSxZQUEwQixFQUFFLE9BQWdCO1FBQ3ZFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDckIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUMvQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzFCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDN0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUMzQyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsT0FBTyxJQUFJLFFBQVEsZ0JBQWdCLENBQUM7UUFDakUsTUFBTSxTQUFTLEdBQW1DLEVBQUUsQ0FBQztRQUNyRCxJQUFJLGNBQWMsR0FBUSxFQUFFLENBQUM7UUFDN0IsSUFBSSxZQUFZLEdBQVEsRUFBRSxDQUFDO1FBRTNCLElBQUksZUFBZSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDckMsTUFBTSxLQUFLLEdBQUcseUNBQXlDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzlFLE1BQU0sQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFLDZH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LENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7V3JpdGVTdHJlYW1zfSBmcm9tIFwiLi93cml0ZS1zdHJlYW1zLmpzXCI7XG5pbXBvcnQge0dpdERhdGF9IGZyb20gXCIuL2dpdC1kYXRhLmpzXCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gXCJqcy15YW1sXCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQge0FyZ3Z9IGZyb20gXCIuL2FyZ3YuanNcIjtcbmltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHtVdGlsc30gZnJvbSBcIi4vdXRpbHMuanNcIjtcbmltcG9ydCBkb3RlbnYgZnJvbSBcImRvdGVudlwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENJQ0RWYXJpYWJsZSB7XG4gICAgdHlwZTogXCJmaWxlXCIgfCBcInZhcmlhYmxlXCI7XG4gICAgZW52aXJvbm1lbnRzOiB7XG4gICAgICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICAgICAgcmVnZXhwOiBSZWdFeHA7XG4gICAgICAgIHJlZ2V4cFByaW9yaXR5OiBudW1iZXI7XG4gICAgICAgIHNjb3BlUHJpb3JpdHk6IG51bWJlcjtcbiAgICAgICAgZmlsZVNvdXJjZT86IHN0cmluZztcbiAgICB9W107XG59XG5cbmV4cG9ydCBjbGFzcyBWYXJpYWJsZXNGcm9tRmlsZXMge1xuXG4gICAgc3RhdGljIGFzeW5jIGluaXQgKGFyZ3Y6IEFyZ3YsIHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBnaXREYXRhOiBHaXREYXRhKTogUHJvbWlzZTx7W25hbWU6IHN0cmluZ106IENJQ0RWYXJpYWJsZX0+IHtcbiAgICAgICAgY29uc3QgY3dkID0gYXJndi5jd2Q7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gYXJndi5zdGF0ZURpcjtcbiAgICAgICAgY29uc3QgaG9tZURpciA9IGFyZ3YuaG9tZTtcbiAgICAgICAgY29uc3QgcmVtb3RlVmFyaWFibGVzID0gYXJndi5yZW1vdGVWYXJpYWJsZXM7XG4gICAgICAgIGNvbnN0IGF1dG9Db21wbGV0aW5nID0gYXJndi5hdXRvQ29tcGxldGluZztcbiAgICAgICAgY29uc3QgaG9tZVZhcmlhYmxlc0ZpbGUgPSBgJHtob21lRGlyfS8ke3N0YXRlRGlyfS92YXJpYWJsZXMueW1sYDtcbiAgICAgICAgY29uc3QgdmFyaWFibGVzOiB7W25hbWU6IHN0cmluZ106IENJQ0RWYXJpYWJsZX0gPSB7fTtcbiAgICAgICAgbGV0IHJlbW90ZUZpbGVEYXRhOiBhbnkgPSB7fTtcbiAgICAgICAgbGV0IGhvbWVGaWxlRGF0YTogYW55ID0ge307XG5cbiAgICAgICAgaWYgKHJlbW90ZVZhcmlhYmxlcyAmJiAhYXV0b0NvbXBsZXRpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gLyg/PHVybD5naXRALio/KT0oPzxmaWxlPi4qPyk9KD88cmVmPi4qKS8uZXhlYyhyZW1vdGVWYXJpYWJsZXMpO1xuICAgICAgICAgICAgYXNzZXJ0KG1hdGNoICE9IG51bGwsIFwiLS1yZW1vdGUtdmFyaWFibGVzIGlzIG1hbGZvcm1lZCB1c2UgJ2dpdEBnaXRsYWIuY29tOmZpcmVjb3cvZXhhbXBsZS5naXQ9Z2l0bGFiLXZhcmlhYmxlcy55bWw9bWFzdGVyJyBzeW50YXhcIik7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSBtYXRjaC5ncm91cHM/LnVybDtcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBtYXRjaC5ncm91cHM/LmZpbGU7XG4gICAgICAgICAgICBjb25zdCByZWYgPSBtYXRjaC5ncm91cHM/LnJlZjtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IFV0aWxzLmJhc2goYHNldCAtZW91IHBpcGVmYWlsOyBnaXQgYXJjaGl2ZSAtLXJlbW90ZT0ke3VybH0gJHtyZWZ9ICR7ZmlsZX0gfCB0YXIgLXhPICR7ZmlsZX1gLCBjd2QpO1xuICAgICAgICAgICAgcmVtb3RlRmlsZURhdGEgPSB5YW1sLmxvYWQoYCR7cmVzLnN0ZG91dH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhd2FpdCBmcy5wYXRoRXhpc3RzKGhvbWVWYXJpYWJsZXNGaWxlKSkge1xuICAgICAgICAgICAgaG9tZUZpbGVEYXRhID0geWFtbC5sb2FkKGF3YWl0IGZzLnJlYWRGaWxlKGhvbWVWYXJpYWJsZXNGaWxlLCBcInV0ZjhcIiksIHtzY2hlbWE6IHlhbWwuRkFJTFNBRkVfU0NIRU1BfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1bnBhY2sgPSAodjogYW55KToge3ZhbHVlczogYW55OyB0eXBlOiBcImZpbGVcIiB8IFwidmFyaWFibGVcIiB8IG51bGx9ID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhdGNoQWxsOiB7dmFsdWVzOiBhbnk7IHR5cGU6IFwiZmlsZVwiIHwgXCJ2YXJpYWJsZVwiIHwgbnVsbH0gPSB7dmFsdWVzOiB7fSwgdHlwZTogbnVsbH07XG4gICAgICAgICAgICAgICAgY2F0Y2hBbGwudmFsdWVzID0ge307XG4gICAgICAgICAgICAgICAgY2F0Y2hBbGwudmFsdWVzW1wiKlwiXSA9IHY7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhdGNoQWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2LnR5cGUgPSB2LnR5cGUgPz8gXCJ2YXJpYWJsZVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGFkZFRvVmFyaWFibGVzID0gYXN5bmMgKGtleTogc3RyaW5nLCB2YWw6IGFueSwgc2NvcGVQcmlvcml0eTogbnVtYmVyLCBpc0RvdEVudiA9IGZhbHNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7dHlwZSwgdmFsdWVzfSA9IHVucGFjayh2YWwpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbbWF0Y2hlciwgY29udGVudF0gb2YgT2JqZWN0LmVudHJpZXModmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGFzc2VydCh0eXBlb2YgY29udGVudCA9PSBcInN0cmluZ1wiLCBgJHtrZXl9LiR7bWF0Y2hlcn0gY29udGVudCBtdXN0IGJlIHRleHQgb3IgbXVsdGlsaW5lIHRleHRgKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNEb3RFbnYgfHwgdHlwZSA9PT0gXCJ2YXJpYWJsZVwiIHx8ICh0eXBlID09PSBudWxsICYmICEvXlsvfl0vLmV4ZWMoY29udGVudCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2V4cCA9IG1hdGNoZXIgPT09IFwiKlwiID8gLy4qL2cgOiBuZXcgUmVnRXhwKGBeJHttYXRjaGVyLnJlcGxhY2UoL1xcKi9nLCBcIi4qXCIpfSRgLCBcImdcIik7XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlc1trZXldID0gdmFyaWFibGVzW2tleV0gPz8ge3R5cGU6IFwidmFyaWFibGVcIiwgZW52aXJvbm1lbnRzOiBbXX07XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlc1trZXldLmVudmlyb25tZW50cy5wdXNoKHtjb250ZW50LCByZWdleHAsIHJlZ2V4cFByaW9yaXR5OiBtYXRjaGVyLmxlbmd0aCwgc2NvcGVQcmlvcml0eX0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gbnVsbCAmJiAvXlsvfl0vLmV4ZWMoY29udGVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsZVNvdXJjZSA9IGNvbnRlbnQucmVwbGFjZSgvXn5cXC8oLiopLywgYCR7aG9tZURpcn0vJDFgKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVnZXhwID0gbWF0Y2hlciA9PT0gXCIqXCIgPyAvLiovZyA6IG5ldyBSZWdFeHAoYF4ke21hdGNoZXIucmVwbGFjZSgvXFwqL2csIFwiLipcIil9JGAsIFwiZ1wiKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzW2tleV0gPSB2YXJpYWJsZXNba2V5XSA/PyB7dHlwZTogXCJmaWxlXCIsIGVudmlyb25tZW50czogW119O1xuICAgICAgICAgICAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhmaWxlU291cmNlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzW2tleV0uZW52aXJvbm1lbnRzLnB1c2goe2NvbnRlbnQsIHJlZ2V4cCwgcmVnZXhwUHJpb3JpdHk6IG1hdGNoZXIubGVuZ3RoLCBzY29wZVByaW9yaXR5LCBmaWxlU291cmNlfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXNba2V5XS5lbnZpcm9ubWVudHMucHVzaCh7Y29udGVudDogYHdhcm46ICR7a2V5fSBpcyBwb2ludGluZyB0byBpbnZhbGlkIHBhdGhcXG5gLCByZWdleHAsIHJlZ2V4cFByaW9yaXR5OiBtYXRjaGVyLmxlbmd0aCwgc2NvcGVQcmlvcml0eX0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBcImZpbGVcIikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWdleHAgPSBtYXRjaGVyID09PSBcIipcIiA/IC8uKi9nIDogbmV3IFJlZ0V4cChgXiR7bWF0Y2hlci5yZXBsYWNlKC9cXCovZywgXCIuKlwiKX0kYCwgXCJnXCIpO1xuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXNba2V5XSA9IHZhcmlhYmxlc1trZXldID8/IHt0eXBlOiBcImZpbGVcIiwgZW52aXJvbm1lbnRzOiBbXX07XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlc1trZXldLmVudmlyb25tZW50cy5wdXNoKHtjb250ZW50LCByZWdleHAsIHJlZ2V4cFByaW9yaXR5OiBtYXRjaGVyLmxlbmd0aCwgc2NvcGVQcmlvcml0eX0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSwgYCR7a2V5fSB3YXMgbm90IGhhbmRsZWQgcHJvcGVybHlgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgYWRkVmFyaWFibGVGaWxlVG9WYXJpYWJsZXMgPSBhc3luYyAoZmlsZURhdGE6IGFueSwgZmlsZVByaW9yaXR5OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2dsb2JhbEtleSwgZ2xvYmFsRW50cnldIG9mIE9iamVjdC5lbnRyaWVzKGZpbGVEYXRhPy5nbG9iYWwgPz8ge30pKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgYWRkVG9WYXJpYWJsZXMoZ2xvYmFsS2V5LCBnbG9iYWxFbnRyeSwgMSArIGZpbGVQcmlvcml0eSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGdyb3VwVXJsID0gYCR7Z2l0RGF0YS5yZW1vdGUuaG9zdH0vJHtnaXREYXRhLnJlbW90ZS5ncm91cH0vYDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2dyb3VwS2V5LCBncm91cEVudHJpZXNdIG9mIE9iamVjdC5lbnRyaWVzKGZpbGVEYXRhPy5ncm91cCA/PyB7fSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWdyb3VwVXJsLmluY2x1ZGVzKHRoaXMubm9ybWFsaXplUHJvamVjdEtleShncm91cEtleSwgd3JpdGVTdHJlYW1zKSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGFzc2VydChncm91cEVudHJpZXMgIT0gbnVsbCwgXCJncm91cEVudHJpZXMgY2Fubm90IGJlIG51bGwvdW5kZWZpbmVkXCIpO1xuICAgICAgICAgICAgICAgIGFzc2VydChVdGlscy5pc09iamVjdChncm91cEVudHJpZXMpLCBcImdyb3VwIGVudHJpZXMgaW4gdmFyaWFibGUgZmlsZXMgbXVzdCBiZSBhbiBvYmplY3RcIik7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoZ3JvdXBFbnRyaWVzKSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBhZGRUb1ZhcmlhYmxlcyhrLCB2LCAyICsgZmlsZVByaW9yaXR5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHByb2plY3RVcmwgPSBgJHtnaXREYXRhLnJlbW90ZS5ob3N0fS8ke2dpdERhdGEucmVtb3RlLmdyb3VwfS8ke2dpdERhdGEucmVtb3RlLnByb2plY3R9LmdpdGA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtwcm9qZWN0S2V5LCBwcm9qZWN0RW50cmllc10gb2YgT2JqZWN0LmVudHJpZXMoZmlsZURhdGE/LnByb2plY3QgPz8gW10pKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFwcm9qZWN0VXJsLmluY2x1ZGVzKHRoaXMubm9ybWFsaXplUHJvamVjdEtleShwcm9qZWN0S2V5LCB3cml0ZVN0cmVhbXMpKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KHByb2plY3RFbnRyaWVzICE9IG51bGwsIFwicHJvamVjdEVudHJpZXMgY2Fubm90IGJlIG51bGwvdW5kZWZpbmVkXCIpO1xuICAgICAgICAgICAgICAgIGFzc2VydChVdGlscy5pc09iamVjdChwcm9qZWN0RW50cmllcyksIFwicHJvamVjdCBlbnRyaWVzIGluIHZhcmlhYmxlIGZpbGVzIG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHByb2plY3RFbnRyaWVzKSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBhZGRUb1ZhcmlhYmxlcyhrLCB2LCAzICsgZmlsZVByaW9yaXR5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgYWRkVmFyaWFibGVGaWxlVG9WYXJpYWJsZXMocmVtb3RlRmlsZURhdGEsIDApO1xuICAgICAgICBhd2FpdCBhZGRWYXJpYWJsZUZpbGVUb1ZhcmlhYmxlcyhob21lRmlsZURhdGEsIDEwKTtcblxuICAgICAgICBjb25zdCBwcm9qZWN0VmFyaWFibGVzRmlsZSA9IGAke2FyZ3YuY3dkfS8ke2FyZ3YudmFyaWFibGVzRmlsZX1gO1xuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhwcm9qZWN0VmFyaWFibGVzRmlsZSkpIHtcbiAgICAgICAgICAgIGxldCBpc0RvdEVudkZvcm1hdCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgcHJvamVjdFZhcmlhYmxlc0ZpbGVSYXdDb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUocHJvamVjdFZhcmlhYmxlc0ZpbGUsIFwidXRmOFwiKTtcbiAgICAgICAgICAgIGxldCBwcm9qZWN0VmFyaWFibGVzRmlsZURhdGE7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHByb2plY3RWYXJpYWJsZXNGaWxlRGF0YSA9IHlhbWwubG9hZChwcm9qZWN0VmFyaWFibGVzRmlsZVJhd0NvbnRlbnQsIHtzY2hlbWE6IHlhbWwuRkFJTFNBRkVfU0NIRU1BfSkgPz8ge307XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mKHByb2plY3RWYXJpYWJsZXNGaWxlRGF0YSkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNEb3RFbnZGb3JtYXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBwcm9qZWN0VmFyaWFibGVzRmlsZURhdGEgPSBkb3RlbnYucGFyc2UocHJvamVjdFZhcmlhYmxlc0ZpbGVSYXdDb250ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiB5YW1sLllBTUxFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaXNEb3RFbnZGb3JtYXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBwcm9qZWN0VmFyaWFibGVzRmlsZURhdGEgPSBkb3RlbnYucGFyc2UocHJvamVjdFZhcmlhYmxlc0ZpbGVSYXdDb250ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3NlcnQocHJvamVjdFZhcmlhYmxlc0ZpbGVEYXRhICE9IG51bGwsIFwicHJvamVjdEVudHJpZXMgY2Fubm90IGJlIG51bGwvdW5kZWZpbmVkXCIpO1xuICAgICAgICAgICAgYXNzZXJ0KFV0aWxzLmlzT2JqZWN0KHByb2plY3RWYXJpYWJsZXNGaWxlRGF0YSksIGAke2FyZ3YuY3dkfS8uZ2l0bGFiLWNpLWxvY2FsLXZhcmlhYmxlcy55bWwgbXVzdCBjb250YWluIGFuIG9iamVjdGApO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMocHJvamVjdFZhcmlhYmxlc0ZpbGVEYXRhKSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGFkZFRvVmFyaWFibGVzKGssIHYsIDI0LCBpc0RvdEVudkZvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHZhck9iaiBvZiBPYmplY3QudmFsdWVzKHZhcmlhYmxlcykpIHtcbiAgICAgICAgICAgIHZhck9iai5lbnZpcm9ubWVudHMuc29ydCgoYSwgYikgPT4gYi5zY29wZVByaW9yaXR5IC0gYS5zY29wZVByaW9yaXR5KTtcbiAgICAgICAgICAgIHZhck9iai5lbnZpcm9ubWVudHMuc29ydCgoYSwgYikgPT4gYi5yZWdleHBQcmlvcml0eSAtIGEucmVnZXhwUHJpb3JpdHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlcztcbiAgICB9XG5cbiAgICBzdGF0aWMgbm9ybWFsaXplUHJvamVjdEtleSAoa2V5OiBzdHJpbmcsIHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFrZXkuaW5jbHVkZXMoXCI6XCIpKSByZXR1cm4ga2V5O1xuICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHt5ZWxsb3cgV0FSTklORzogSW50ZXJwcmV0aW5nICcke2tleX0nIGFzICcke2tleS5yZXBsYWNlKFwiOlwiLCBcIi9cIil9J31cXG5gKTtcbiAgICAgICAgcmV0dXJuIGtleS5yZXBsYWNlKFwiOlwiLCBcIi9cIik7XG4gICAgfVxufVxuIl19
|
|
143
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWFibGVzLWZyb20tZmlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ2YXJpYWJsZXMtZnJvbS1maWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDMUIsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFDaEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ2pDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLFVBQVUsTUFBTSxhQUFhLENBQUM7QUFhckMsTUFBTSxPQUFPLGtCQUFrQjtJQUUzQixNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBRSxJQUFVLEVBQUUsWUFBMEIsRUFBRSxPQUFnQjtRQUN2RSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ3JCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDL0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUMxQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQzdDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDM0MsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLE9BQU8sSUFBSSxRQUFRLGdCQUFnQixDQUFDO1FBQ2pFLE1BQU0sU0FBUyxHQUFtQyxFQUFFLENBQUM7UUFDckQsSUFBSSxjQUFjLEdBQVEsRUFBRSxDQUFDO1FBQzdCLElBQUksWUFBWSxHQUFRLEVBQUUsQ0FBQztRQUUzQixJQUFJLGVBQWUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3JDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFF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QUFDLENBQUM7UUFDNUUsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxNQUFNLENBQUMsbUJBQW1CLENBQUUsR0FBVyxFQUFFLFlBQTBCO1FBQy9ELElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU8sR0FBRyxDQUFDO1FBQ25DLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFBLGtDQUFrQyxHQUFHLFNBQVMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BHLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDakMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtXcml0ZVN0cmVhbXN9IGZyb20gXCIuL3dyaXRlLXN0cmVhbXMuanNcIjtcbmltcG9ydCB7R2l0RGF0YX0gZnJvbSBcIi4vZ2l0LWRhdGEuanNcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSBcImpzLXlhbWxcIjtcbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7QXJndn0gZnJvbSBcIi4vYXJndi5qc1wiO1xuaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQge1V0aWxzfSBmcm9tIFwiLi91dGlscy5qc1wiO1xuaW1wb3J0IGRvdGVudiBmcm9tIFwiZG90ZW52XCI7XG5pbXBvcnQgZGVlcEV4dGVuZCBmcm9tIFwiZGVlcC1leHRlbmRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBDSUNEVmFyaWFibGUge1xuICAgIHR5cGU6IFwiZmlsZVwiIHwgXCJ2YXJpYWJsZVwiO1xuICAgIGVudmlyb25tZW50czoge1xuICAgICAgICBjb250ZW50OiBzdHJpbmc7XG4gICAgICAgIHJlZ2V4cDogUmVnRXhwO1xuICAgICAgICByZWdleHBQcmlvcml0eTogbnVtYmVyO1xuICAgICAgICBzY29wZVByaW9yaXR5OiBudW1iZXI7XG4gICAgICAgIGZpbGVTb3VyY2U/OiBzdHJpbmc7XG4gICAgfVtdO1xufVxuXG5leHBvcnQgY2xhc3MgVmFyaWFibGVzRnJvbUZpbGVzIHtcblxuICAgIHN0YXRpYyBhc3luYyBpbml0IChhcmd2OiBBcmd2LCB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcywgZ2l0RGF0YTogR2l0RGF0YSk6IFByb21pc2U8e1tuYW1lOiBzdHJpbmddOiBDSUNEVmFyaWFibGV9PiB7XG4gICAgICAgIGNvbnN0IGN3ZCA9IGFyZ3YuY3dkO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IGFyZ3Yuc3RhdGVEaXI7XG4gICAgICAgIGNvbnN0IGhvbWVEaXIgPSBhcmd2LmhvbWU7XG4gICAgICAgIGNvbnN0IHJlbW90ZVZhcmlhYmxlcyA9IGFyZ3YucmVtb3RlVmFyaWFibGVzO1xuICAgICAgICBjb25zdCBhdXRvQ29tcGxldGluZyA9IGFyZ3YuYXV0b0NvbXBsZXRpbmc7XG4gICAgICAgIGNvbnN0IGhvbWVWYXJpYWJsZXNGaWxlID0gYCR7aG9tZURpcn0vJHtzdGF0ZURpcn0vdmFyaWFibGVzLnltbGA7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlczoge1tuYW1lOiBzdHJpbmddOiBDSUNEVmFyaWFibGV9ID0ge307XG4gICAgICAgIGxldCByZW1vdGVGaWxlRGF0YTogYW55ID0ge307XG4gICAgICAgIGxldCBob21lRmlsZURhdGE6IGFueSA9IHt9O1xuXG4gICAgICAgIGlmIChyZW1vdGVWYXJpYWJsZXMgJiYgIWF1dG9Db21wbGV0aW5nKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbW90ZVZhcmlhYmxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gLyg/PHVybD5naXRALio/KT0oPzxmaWxlPi4qPyk9KD88cmVmPi4qKS8uZXhlYyhyZW1vdGVWYXJpYWJsZXNbaV0pO1xuICAgICAgICAgICAgICAgIGFzc2VydChtYXRjaCAhPSBudWxsLCBcIi0tcmVtb3RlLXZhcmlhYmxlcyBpcyBtYWxmb3JtZWQgdXNlICdnaXRAZ2l0bGFiLmNvbTpmaXJlY293L2V4YW1wbGUuZ2l0PWdpdGxhYi12YXJpYWJsZXMueW1sPW1hc3Rlcicgc3ludGF4XCIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IG1hdGNoLmdyb3Vwcz8udXJsO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBtYXRjaC5ncm91cHM/LmZpbGU7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVmID0gbWF0Y2guZ3JvdXBzPy5yZWY7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgVXRpbHMuYmFzaChgc2V0IC1lb3UgcGlwZWZhaWw7IGdpdCBhcmNoaXZlIC0tcmVtb3RlPSR7dXJsfSAke3JlZn0gJHtmaWxlfSB8IHRhciAteE8gJHtmaWxlfWAsIGN3ZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9hZGVkWWFtbCA9IHlhbWwubG9hZChgJHtyZXMuc3Rkb3V0fWApO1xuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGxvYWRlZFlhbWwgaXMgYW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBsb2FkZWRZYW1sID09PSBcIm9iamVjdFwiICYmIGxvYWRlZFlhbWwgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3RlRmlsZURhdGEgPSBkZWVwRXh0ZW5kKHJlbW90ZUZpbGVEYXRhLCBsb2FkZWRZYW1sKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXdhaXQgZnMucGF0aEV4aXN0cyhob21lVmFyaWFibGVzRmlsZSkpIHtcbiAgICAgICAgICAgIGhvbWVGaWxlRGF0YSA9IHlhbWwubG9hZChhd2FpdCBmcy5yZWFkRmlsZShob21lVmFyaWFibGVzRmlsZSwgXCJ1dGY4XCIpLCB7c2NoZW1hOiB5YW1sLkZBSUxTQUZFX1NDSEVNQX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdW5wYWNrID0gKHY6IGFueSk6IHt2YWx1ZXM6IGFueTsgdHlwZTogXCJmaWxlXCIgfCBcInZhcmlhYmxlXCIgfCBudWxsfSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYXRjaEFsbDoge3ZhbHVlczogYW55OyB0eXBlOiBcImZpbGVcIiB8IFwidmFyaWFibGVcIiB8IG51bGx9ID0ge3ZhbHVlczoge30sIHR5cGU6IG51bGx9O1xuICAgICAgICAgICAgICAgIGNhdGNoQWxsLnZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgICAgIGNhdGNoQWxsLnZhbHVlc1tcIipcIl0gPSB2O1xuICAgICAgICAgICAgICAgIHJldHVybiBjYXRjaEFsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdi50eXBlID0gdi50eXBlID8/IFwidmFyaWFibGVcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBhZGRUb1ZhcmlhYmxlcyA9IGFzeW5jIChrZXk6IHN0cmluZywgdmFsOiBhbnksIHNjb3BlUHJpb3JpdHk6IG51bWJlciwgaXNEb3RFbnYgPSBmYWxzZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qge3R5cGUsIHZhbHVlc30gPSB1bnBhY2sodmFsKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW21hdGNoZXIsIGNvbnRlbnRdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQodHlwZW9mIGNvbnRlbnQgPT0gXCJzdHJpbmdcIiwgYCR7a2V5fS4ke21hdGNoZXJ9IGNvbnRlbnQgbXVzdCBiZSB0ZXh0IG9yIG11bHRpbGluZSB0ZXh0YCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzRG90RW52IHx8IHR5cGUgPT09IFwidmFyaWFibGVcIiB8fCAodHlwZSA9PT0gbnVsbCAmJiAhL15bL35dLy5leGVjKGNvbnRlbnQpKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWdleHAgPSBtYXRjaGVyID09PSBcIipcIiA/IC8uKi9nIDogbmV3IFJlZ0V4cChgXiR7bWF0Y2hlci5yZXBsYWNlKC9cXCovZywgXCIuKlwiKX0kYCwgXCJnXCIpO1xuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXNba2V5XSA9IHZhcmlhYmxlc1trZXldID8/IHt0eXBlOiBcInZhcmlhYmxlXCIsIGVudmlyb25tZW50czogW119O1xuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXNba2V5XS5lbnZpcm9ubWVudHMucHVzaCh7Y29udGVudCwgcmVnZXhwLCByZWdleHBQcmlvcml0eTogbWF0Y2hlci5sZW5ndGgsIHNjb3BlUHJpb3JpdHl9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IG51bGwgJiYgL15bL35dLy5leGVjKGNvbnRlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVTb3VyY2UgPSBjb250ZW50LnJlcGxhY2UoL15+XFwvKC4qKS8sIGAke2hvbWVEaXJ9LyQxYCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2V4cCA9IG1hdGNoZXIgPT09IFwiKlwiID8gLy4qL2cgOiBuZXcgUmVnRXhwKGBeJHttYXRjaGVyLnJlcGxhY2UoL1xcKi9nLCBcIi4qXCIpfSRgLCBcImdcIik7XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlc1trZXldID0gdmFyaWFibGVzW2tleV0gPz8ge3R5cGU6IFwiZmlsZVwiLCBlbnZpcm9ubWVudHM6IFtdfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoZmlsZVNvdXJjZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlc1trZXldLmVudmlyb25tZW50cy5wdXNoKHtjb250ZW50LCByZWdleHAsIHJlZ2V4cFByaW9yaXR5OiBtYXRjaGVyLmxlbmd0aCwgc2NvcGVQcmlvcml0eSwgZmlsZVNvdXJjZX0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzW2tleV0uZW52aXJvbm1lbnRzLnB1c2goe2NvbnRlbnQ6IGB3YXJuOiAke2tleX0gaXMgcG9pbnRpbmcgdG8gaW52YWxpZCBwYXRoXFxuYCwgcmVnZXhwLCByZWdleHBQcmlvcml0eTogbWF0Y2hlci5sZW5ndGgsIHNjb3BlUHJpb3JpdHl9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJmaWxlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVnZXhwID0gbWF0Y2hlciA9PT0gXCIqXCIgPyAvLiovZyA6IG5ldyBSZWdFeHAoYF4ke21hdGNoZXIucmVwbGFjZSgvXFwqL2csIFwiLipcIil9JGAsIFwiZ1wiKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzW2tleV0gPSB2YXJpYWJsZXNba2V5XSA/PyB7dHlwZTogXCJmaWxlXCIsIGVudmlyb25tZW50czogW119O1xuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXNba2V5XS5lbnZpcm9ubWVudHMucHVzaCh7Y29udGVudCwgcmVnZXhwLCByZWdleHBQcmlvcml0eTogbWF0Y2hlci5sZW5ndGgsIHNjb3BlUHJpb3JpdHl9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UsIGAke2tleX0gd2FzIG5vdCBoYW5kbGVkIHByb3Blcmx5YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGFkZFZhcmlhYmxlRmlsZVRvVmFyaWFibGVzID0gYXN5bmMgKGZpbGVEYXRhOiBhbnksIGZpbGVQcmlvcml0eTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtnbG9iYWxLZXksIGdsb2JhbEVudHJ5XSBvZiBPYmplY3QuZW50cmllcyhmaWxlRGF0YT8uZ2xvYmFsID8/IHt9KSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGFkZFRvVmFyaWFibGVzKGdsb2JhbEtleSwgZ2xvYmFsRW50cnksIDEgKyBmaWxlUHJpb3JpdHkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBncm91cFVybCA9IGAke2dpdERhdGEucmVtb3RlLmhvc3R9LyR7Z2l0RGF0YS5yZW1vdGUuZ3JvdXB9L2A7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtncm91cEtleSwgZ3JvdXBFbnRyaWVzXSBvZiBPYmplY3QuZW50cmllcyhmaWxlRGF0YT8uZ3JvdXAgPz8ge30pKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFncm91cFVybC5pbmNsdWRlcyh0aGlzLm5vcm1hbGl6ZVByb2plY3RLZXkoZ3JvdXBLZXksIHdyaXRlU3RyZWFtcykpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZ3JvdXBFbnRyaWVzICE9IG51bGwsIFwiZ3JvdXBFbnRyaWVzIGNhbm5vdCBiZSBudWxsL3VuZGVmaW5lZFwiKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoVXRpbHMuaXNPYmplY3QoZ3JvdXBFbnRyaWVzKSwgXCJncm91cCBlbnRyaWVzIGluIHZhcmlhYmxlIGZpbGVzIG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGdyb3VwRW50cmllcykpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYWRkVG9WYXJpYWJsZXMoaywgdiwgMiArIGZpbGVQcmlvcml0eSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwcm9qZWN0VXJsID0gYCR7Z2l0RGF0YS5yZW1vdGUuaG9zdH0vJHtnaXREYXRhLnJlbW90ZS5ncm91cH0vJHtnaXREYXRhLnJlbW90ZS5wcm9qZWN0fS5naXRgO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbcHJvamVjdEtleSwgcHJvamVjdEVudHJpZXNdIG9mIE9iamVjdC5lbnRyaWVzKGZpbGVEYXRhPy5wcm9qZWN0ID8/IFtdKSkge1xuICAgICAgICAgICAgICAgIGlmICghcHJvamVjdFVybC5pbmNsdWRlcyh0aGlzLm5vcm1hbGl6ZVByb2plY3RLZXkocHJvamVjdEtleSwgd3JpdGVTdHJlYW1zKSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGFzc2VydChwcm9qZWN0RW50cmllcyAhPSBudWxsLCBcInByb2plY3RFbnRyaWVzIGNhbm5vdCBiZSBudWxsL3VuZGVmaW5lZFwiKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoVXRpbHMuaXNPYmplY3QocHJvamVjdEVudHJpZXMpLCBcInByb2plY3QgZW50cmllcyBpbiB2YXJpYWJsZSBmaWxlcyBtdXN0IGJlIGFuIG9iamVjdFwiKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhwcm9qZWN0RW50cmllcykpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYWRkVG9WYXJpYWJsZXMoaywgdiwgMyArIGZpbGVQcmlvcml0eSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGF3YWl0IGFkZFZhcmlhYmxlRmlsZVRvVmFyaWFibGVzKHJlbW90ZUZpbGVEYXRhLCAwKTtcbiAgICAgICAgYXdhaXQgYWRkVmFyaWFibGVGaWxlVG9WYXJpYWJsZXMoaG9tZUZpbGVEYXRhLCAxMCk7XG5cbiAgICAgICAgY29uc3QgcHJvamVjdFZhcmlhYmxlc0ZpbGUgPSBgJHthcmd2LmN3ZH0vJHthcmd2LnZhcmlhYmxlc0ZpbGV9YDtcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMocHJvamVjdFZhcmlhYmxlc0ZpbGUpKSB7XG4gICAgICAgICAgICBsZXQgaXNEb3RFbnZGb3JtYXQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IHByb2plY3RWYXJpYWJsZXNGaWxlUmF3Q29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKHByb2plY3RWYXJpYWJsZXNGaWxlLCBcInV0ZjhcIik7XG4gICAgICAgICAgICBsZXQgcHJvamVjdFZhcmlhYmxlc0ZpbGVEYXRhO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwcm9qZWN0VmFyaWFibGVzRmlsZURhdGEgPSB5YW1sLmxvYWQocHJvamVjdFZhcmlhYmxlc0ZpbGVSYXdDb250ZW50LCB7c2NoZW1hOiB5YW1sLkZBSUxTQUZFX1NDSEVNQX0pID8/IHt9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZihwcm9qZWN0VmFyaWFibGVzRmlsZURhdGEpID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzRG90RW52Rm9ybWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdFZhcmlhYmxlc0ZpbGVEYXRhID0gZG90ZW52LnBhcnNlKHByb2plY3RWYXJpYWJsZXNGaWxlUmF3Q29udGVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgeWFtbC5ZQU1MRXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzRG90RW52Rm9ybWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdFZhcmlhYmxlc0ZpbGVEYXRhID0gZG90ZW52LnBhcnNlKHByb2plY3RWYXJpYWJsZXNGaWxlUmF3Q29udGVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXNzZXJ0KHByb2plY3RWYXJpYWJsZXNGaWxlRGF0YSAhPSBudWxsLCBcInByb2plY3RFbnRyaWVzIGNhbm5vdCBiZSBudWxsL3VuZGVmaW5lZFwiKTtcbiAgICAgICAgICAgIGFzc2VydChVdGlscy5pc09iamVjdChwcm9qZWN0VmFyaWFibGVzRmlsZURhdGEpLCBgJHthcmd2LmN3ZH0vLmdpdGxhYi1jaS1sb2NhbC12YXJpYWJsZXMueW1sIG11c3QgY29udGFpbiBhbiBvYmplY3RgKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHByb2plY3RWYXJpYWJsZXNGaWxlRGF0YSkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBhZGRUb1ZhcmlhYmxlcyhrLCB2LCAyNCwgaXNEb3RFbnZGb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCB2YXJPYmogb2YgT2JqZWN0LnZhbHVlcyh2YXJpYWJsZXMpKSB7XG4gICAgICAgICAgICB2YXJPYmouZW52aXJvbm1lbnRzLnNvcnQoKGEsIGIpID0+IGIuc2NvcGVQcmlvcml0eSAtIGEuc2NvcGVQcmlvcml0eSk7XG4gICAgICAgICAgICB2YXJPYmouZW52aXJvbm1lbnRzLnNvcnQoKGEsIGIpID0+IGIucmVnZXhwUHJpb3JpdHkgLSBhLnJlZ2V4cFByaW9yaXR5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YXJpYWJsZXM7XG4gICAgfVxuXG4gICAgc3RhdGljIG5vcm1hbGl6ZVByb2plY3RLZXkgKGtleTogc3RyaW5nLCB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcyk6IHN0cmluZyB7XG4gICAgICAgIGlmICgha2V5LmluY2x1ZGVzKFwiOlwiKSkgcmV0dXJuIGtleTtcbiAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7eWVsbG93IFdBUk5JTkc6IEludGVycHJldGluZyAnJHtrZXl9JyBhcyAnJHtrZXkucmVwbGFjZShcIjpcIiwgXCIvXCIpfSd9XFxuYCk7XG4gICAgICAgIHJldHVybiBrZXkucmVwbGFjZShcIjpcIiwgXCIvXCIpO1xuICAgIH1cbn1cbiJdfQ==
|