gitlab-ci-local 4.28.2 → 4.31.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.
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -25,70 +29,112 @@ Object.defineProperty(exports, "__esModule", { value: true });
25
29
  exports.VariablesFromFiles = void 0;
26
30
  const fs = __importStar(require("fs-extra"));
27
31
  const yaml = __importStar(require("js-yaml"));
28
- const path_1 = __importDefault(require("path"));
29
32
  const chalk_1 = __importDefault(require("chalk"));
33
+ const asserts_1 = require("./asserts");
34
+ const utils_1 = require("./utils");
30
35
  class VariablesFromFiles {
31
- static async init(cwd, writeStreams, gitData, home) {
32
- const homeDir = home.replace(/\/$/, "");
36
+ static async init(argv, writeStreams, gitData) {
37
+ const cwd = argv.cwd;
38
+ const homeDir = argv.home;
39
+ const remoteVariables = argv.remoteVariables;
40
+ const autoCompleting = argv.autoCompleting;
33
41
  const homeVariablesFile = `${homeDir}/.gitlab-ci-local/variables.yml`;
34
- let variables = {};
35
- let homeFileData;
36
- if (!fs.existsSync(homeVariablesFile)) {
37
- homeFileData = {};
42
+ const variables = {};
43
+ let remoteFileData = {};
44
+ let homeFileData = {};
45
+ if (remoteVariables && !autoCompleting) {
46
+ const match = remoteVariables.match(/(?<url>git@.*?)=(?<file>.*?)=(?<ref>.*)/);
47
+ (0, asserts_1.assert)(match != null, "--remote-variables is malformed use 'git@gitlab.com:firecow/example.git=gitlab-variables.yml=master' syntax");
48
+ const url = match.groups?.url;
49
+ const file = match.groups?.file;
50
+ const ref = match.groups?.ref;
51
+ const res = await utils_1.Utils.bash(`git archive --remote=${url} ${ref} ${file} | tar -xO ${file}`, cwd);
52
+ remoteFileData = yaml.load(`${res.stdout}`);
38
53
  }
39
- else {
54
+ if (await fs.pathExists(homeVariablesFile)) {
40
55
  homeFileData = yaml.load(await fs.readFile(homeVariablesFile, "utf8"), { schema: yaml.FAILSAFE_SCHEMA });
41
56
  }
42
- for (const [globalKey, globalEntry] of Object.entries(homeFileData?.global ?? [])) {
43
- if (typeof globalEntry !== "string") {
44
- continue;
57
+ const unpack = (v) => {
58
+ if (typeof v === "string") {
59
+ const catchAll = { values: {}, type: "variable" };
60
+ catchAll.values = {};
61
+ catchAll.values["*"] = v;
62
+ return catchAll;
45
63
  }
46
- variables[globalKey] = globalEntry;
47
- }
48
- const groupUrl = `${gitData.remote.host}/${gitData.remote.group}/`;
49
- for (const [groupKey, groupEntries] of Object.entries(homeFileData?.group ?? [])) {
50
- if (!groupUrl.includes(this.normalizeProjectKey(groupKey, writeStreams))) {
51
- continue;
64
+ if (v.type == null) {
65
+ v.type = "variable";
52
66
  }
53
- if (typeof groupEntries !== "object") {
54
- continue;
67
+ return v;
68
+ };
69
+ const addToVariables = async (key, val, scopePriority) => {
70
+ const { type, values } = unpack(val);
71
+ for (const [matcher, content] of Object.entries(values)) {
72
+ (0, asserts_1.assert)(typeof content == "string", `${key}.${matcher} content must be text or multiline text`);
73
+ if (type === "variable" && typeof content === "string" && !content.match(/^[/|~]/)) {
74
+ const regexp = new RegExp(matcher.replace(/\*/g, ".*"), "g");
75
+ variables[key] = variables[key] ?? { type: "variable", environments: [] };
76
+ variables[key].environments.push({ content, regexp, regexpPriority: matcher.length, scopePriority });
77
+ }
78
+ else if (type === "variable" && typeof content === "string" && content.match(/^[/|~]/)) {
79
+ const fileSource = content.replace(/^~\/(.*)/, `${homeDir}/$1`);
80
+ const regexp = new RegExp(matcher.replace(/\*/g, ".*"), "g");
81
+ variables[key] = variables[key] ?? { type: "file", environments: [] };
82
+ if (fs.existsSync(fileSource)) {
83
+ variables[key].environments.push({ content, regexp, regexpPriority: matcher.length, scopePriority, fileSource });
84
+ }
85
+ else {
86
+ variables[key].environments.push({ content: `warn: ${key} is pointing to invalid path\n`, regexp, regexpPriority: matcher.length, scopePriority });
87
+ }
88
+ }
89
+ else if (type === "file") {
90
+ const regexp = new RegExp(matcher.replace(/\*/g, ".*"), "g");
91
+ variables[key] = variables[key] ?? { type: "file", environments: [] };
92
+ variables[key].environments.push({ content, regexp, regexpPriority: matcher.length, scopePriority });
93
+ }
94
+ else {
95
+ (0, asserts_1.assert)(false, `${key} was not handled properly`);
96
+ }
55
97
  }
56
- variables = { ...variables, ...groupEntries };
57
- }
58
- const projectUrl = `${gitData.remote.host}/${gitData.remote.group}/${gitData.remote.project}.git`;
59
- for (const [projectKey, projectEntries] of Object.entries(homeFileData?.project ?? [])) {
60
- if (!projectUrl.includes(this.normalizeProjectKey(projectKey, writeStreams))) {
61
- continue;
98
+ };
99
+ const addVariableFileToVariables = async (fileData, filePriority) => {
100
+ for (const [globalKey, globalEntry] of Object.entries(fileData?.global ?? {})) {
101
+ await addToVariables(globalKey, globalEntry, 1 + filePriority);
62
102
  }
63
- if (typeof projectEntries !== "object") {
64
- continue;
103
+ const groupUrl = `${gitData.remote.host}/${gitData.remote.group}/`;
104
+ for (const [groupKey, groupEntries] of Object.entries(fileData?.group ?? {})) {
105
+ if (!groupUrl.includes(this.normalizeProjectKey(groupKey, writeStreams)))
106
+ continue;
107
+ (0, asserts_1.assert)(groupEntries != null, "groupEntries cannot be null/undefined");
108
+ (0, asserts_1.assert)(typeof groupEntries === "object", "groupEntries must be object");
109
+ for (const [k, v] of Object.entries(groupEntries)) {
110
+ await addToVariables(k, v, 2 + filePriority);
111
+ }
65
112
  }
66
- variables = { ...variables, ...projectEntries };
67
- }
68
- const projectVariablesFile = `${cwd}/.gitlab-ci-local-variables.yml`;
113
+ const projectUrl = `${gitData.remote.host}/${gitData.remote.group}/${gitData.remote.project}.git`;
114
+ for (const [projectKey, projectEntries] of Object.entries(fileData?.project ?? [])) {
115
+ if (!projectUrl.includes(this.normalizeProjectKey(projectKey, writeStreams)))
116
+ continue;
117
+ (0, asserts_1.assert)(projectEntries != null, "projectEntries cannot be null/undefined");
118
+ (0, asserts_1.assert)(typeof projectEntries === "object", "projectEntries must be object");
119
+ for (const [k, v] of Object.entries(projectEntries)) {
120
+ await addToVariables(k, v, 3 + filePriority);
121
+ }
122
+ }
123
+ };
124
+ await addVariableFileToVariables(remoteFileData, 0);
125
+ await addVariableFileToVariables(homeFileData, 10);
126
+ const projectVariablesFile = `${argv.cwd}/.gitlab-ci-local-variables.yml`;
69
127
  if (fs.existsSync(projectVariablesFile)) {
70
- const projectFileData = yaml.load(await fs.readFile(projectVariablesFile, "utf8"), { schema: yaml.FAILSAFE_SCHEMA }) ?? {};
71
- if (typeof projectFileData === "object") {
72
- variables = { ...variables, ...projectFileData };
128
+ const projectVariablesFileData = yaml.load(await fs.readFile(projectVariablesFile, "utf8"), { schema: yaml.FAILSAFE_SCHEMA }) ?? {};
129
+ (0, asserts_1.assert)(projectVariablesFileData != null, "projectEntries cannot be null/undefined");
130
+ (0, asserts_1.assert)(typeof projectVariablesFileData === "object", "projectEntries must be object");
131
+ for (const [k, v] of Object.entries(projectVariablesFileData)) {
132
+ await addToVariables(k, v, 24);
73
133
  }
74
134
  }
75
- // Generate files for file type variables
76
- for (const [key, value] of Object.entries(variables)) {
77
- if (typeof value !== "string") {
78
- continue;
79
- }
80
- if (!value.match(/^[/|~]/)) {
81
- continue;
82
- }
83
- if (value.match(/\/$/)) {
84
- continue;
85
- }
86
- const fromFilePath = value.replace(/^~\/(.*)/, `${homeDir}/$1`);
87
- if (fs.existsSync(fromFilePath)) {
88
- await fs.ensureDir(`/tmp/gitlab-ci-local-file-variables-${gitData.CI_PROJECT_PATH_SLUG}/`);
89
- await fs.copyFile(fromFilePath, `/tmp/gitlab-ci-local-file-variables-${gitData.CI_PROJECT_PATH_SLUG}/${path_1.default.basename(fromFilePath)}`);
90
- variables[key] = `/tmp/gitlab-ci-local-file-variables-${gitData.CI_PROJECT_PATH_SLUG}/${path_1.default.basename(fromFilePath)}`;
91
- }
135
+ for (const varObj of Object.values(variables)) {
136
+ varObj.environments.sort((a, b) => b.scopePriority - a.scopePriority);
137
+ varObj.environments.sort((a, b) => b.regexpPriority - a.regexpPriority);
92
138
  }
93
139
  return variables;
94
140
  }
@@ -100,4 +146,4 @@ class VariablesFromFiles {
100
146
  }
101
147
  }
102
148
  exports.VariablesFromFiles = VariablesFromFiles;
103
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWFibGVzLWZyb20tZmlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ2YXJpYWJsZXMtZnJvbS1maWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsNkNBQStCO0FBQy9CLDhDQUFnQztBQUNoQyxnREFBd0I7QUFDeEIsa0RBQTBCO0FBRTFCLE1BQWEsa0JBQWtCO0lBRTNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQVcsRUFBRSxZQUEwQixFQUFFLE9BQWdCLEVBQUUsSUFBWTtRQUNyRixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN4QyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsT0FBTyxpQ0FBaUMsQ0FBQztRQUN0RSxJQUFJLFNBQVMsR0FBOEIsRUFBRSxDQUFDO1FBQzlDLElBQUksWUFBaUIsQ0FBQztRQUN0QixJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQ25DLFlBQVksR0FBSSxFQUFFLENBQUM7U0FDdEI7YUFBTTtZQUNILFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFDLENBQUMsQ0FBQztTQUMxRztRQUVELEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxNQUFNLElBQUksRUFBRSxDQUFDLEVBQUU7WUFDL0UsSUFBSSxPQUFPLFdBQVcsS0FBSyxRQUFRLEVBQUU7Z0JBQ2pDLFNBQVM7YUFDWjtZQUNELFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxXQUFXLENBQUM7U0FDdEM7UUFFRCxNQUFNLFFBQVEsR0FB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LENBQUMsb0JBQW9CLElBQUksY0FBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO2FBQ3pIO1NBQ0o7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRUQsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEdBQVcsRUFBRSxZQUEwQjtRQUM5RCxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFPLEdBQUcsQ0FBQztRQUNuQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUEsZUFBSyxFQUFBLGtDQUFrQyxHQUFHLFNBQVMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BHLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDakMsQ0FBQztDQUNKO0FBL0VELGdEQStFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7V3JpdGVTdHJlYW1zfSBmcm9tIFwiLi90eXBlcy93cml0ZS1zdHJlYW1zXCI7XG5pbXBvcnQge0dpdERhdGF9IGZyb20gXCIuL2dpdC1kYXRhXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSBcImpzLXlhbWxcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5cbmV4cG9ydCBjbGFzcyBWYXJpYWJsZXNGcm9tRmlsZXMge1xuXG4gICAgc3RhdGljIGFzeW5jIGluaXQoY3dkOiBzdHJpbmcsIHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBnaXREYXRhOiBHaXREYXRhLCBob21lOiBzdHJpbmcpOiBQcm9taXNlPHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0+IHtcbiAgICAgICAgY29uc3QgaG9tZURpciA9IGhvbWUucmVwbGFjZSgvXFwvJC8sIFwiXCIpO1xuICAgICAgICBjb25zdCBob21lVmFyaWFibGVzRmlsZSA9IGAke2hvbWVEaXJ9Ly5naXRsYWItY2ktbG9jYWwvdmFyaWFibGVzLnltbGA7XG4gICAgICAgIGxldCB2YXJpYWJsZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICAgICAgbGV0IGhvbWVGaWxlRGF0YTogYW55O1xuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoaG9tZVZhcmlhYmxlc0ZpbGUpKSB7XG4gICAgICAgICAgICBob21lRmlsZURhdGEgPSAge307XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBob21lRmlsZURhdGEgPSB5YW1sLmxvYWQoYXdhaXQgZnMucmVhZEZpbGUoaG9tZVZhcmlhYmxlc0ZpbGUsIFwidXRmOFwiKSwge3NjaGVtYTogeWFtbC5GQUlMU0FGRV9TQ0hFTUF9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgW2dsb2JhbEtleSwgZ2xvYmFsRW50cnldIG9mIE9iamVjdC5lbnRyaWVzKGhvbWVGaWxlRGF0YT8uZ2xvYmFsID8/IFtdKSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBnbG9iYWxFbnRyeSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyaWFibGVzW2dsb2JhbEtleV0gPSBnbG9iYWxFbnRyeTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdyb3VwVXJsID0gYCR7Z2l0RGF0YS5yZW1vdGUuaG9zdH0vJHtnaXREYXRhLnJlbW90ZS5ncm91cH0vYDtcbiAgICAgICAgZm9yIChjb25zdCBbZ3JvdXBLZXksIGdyb3VwRW50cmllc10gb2YgT2JqZWN0LmVudHJpZXMoaG9tZUZpbGVEYXRhPy5ncm91cCA/PyBbXSkpIHtcbiAgICAgICAgICAgIGlmICghZ3JvdXBVcmwuaW5jbHVkZXModGhpcy5ub3JtYWxpemVQcm9qZWN0S2V5KGdyb3VwS2V5LCB3cml0ZVN0cmVhbXMpKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBncm91cEVudHJpZXMgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhcmlhYmxlcyA9IHsuLi52YXJpYWJsZXMsIC4uLmdyb3VwRW50cmllc307XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9qZWN0VXJsID0gYCR7Z2l0RGF0YS5yZW1vdGUuaG9zdH0vJHtnaXREYXRhLnJlbW90ZS5ncm91cH0vJHtnaXREYXRhLnJlbW90ZS5wcm9qZWN0fS5naXRgO1xuICAgICAgICBmb3IgKGNvbnN0IFtwcm9qZWN0S2V5LCBwcm9qZWN0RW50cmllc10gb2YgT2JqZWN0LmVudHJpZXMoaG9tZUZpbGVEYXRhPy5wcm9qZWN0ID8/IFtdKSkge1xuICAgICAgICAgICAgaWYgKCFwcm9qZWN0VXJsLmluY2x1ZGVzKHRoaXMubm9ybWFsaXplUHJvamVjdEtleShwcm9qZWN0S2V5LCB3cml0ZVN0cmVhbXMpKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9qZWN0RW50cmllcyAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyaWFibGVzID0gey4uLnZhcmlhYmxlcywgLi4ucHJvamVjdEVudHJpZXN9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJvamVjdFZhcmlhYmxlc0ZpbGUgPSBgJHtjd2R9Ly5naXRsYWItY2ktbG9jYWwtdmFyaWFibGVzLnltbGA7XG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKHByb2plY3RWYXJpYWJsZXNGaWxlKSkge1xuICAgICAgICAgICAgY29uc3QgcHJvamVjdEZpbGVEYXRhOiBhbnkgPSB5YW1sLmxvYWQoYXdhaXQgZnMucmVhZEZpbGUocHJvamVjdFZhcmlhYmxlc0ZpbGUsIFwidXRmOFwiKSwge3NjaGVtYTogeWFtbC5GQUlMU0FGRV9TQ0hFTUF9KSA/PyB7fTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvamVjdEZpbGVEYXRhID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgdmFyaWFibGVzID0gey4uLnZhcmlhYmxlcywgLi4ucHJvamVjdEZpbGVEYXRhfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdlbmVyYXRlIGZpbGVzIGZvciBmaWxlIHR5cGUgdmFyaWFibGVzXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhcmlhYmxlcykpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdmFsdWUubWF0Y2goL15bL3x+XS8pKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZS5tYXRjaCgvXFwvJC8pKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZyb21GaWxlUGF0aCA9IHZhbHVlLnJlcGxhY2UoL15+XFwvKC4qKS8sIGAke2hvbWVEaXJ9LyQxYCk7XG4gICAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhmcm9tRmlsZVBhdGgpKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgZnMuZW5zdXJlRGlyKGAvdG1wL2dpdGxhYi1jaS1sb2NhbC1maWxlLXZhcmlhYmxlcy0ke2dpdERhdGEuQ0lfUFJPSkVDVF9QQVRIX1NMVUd9L2ApO1xuICAgICAgICAgICAgICAgIGF3YWl0IGZzLmNvcHlGaWxlKGZyb21GaWxlUGF0aCwgYC90bXAvZ2l0bGFiLWNpLWxvY2FsLWZpbGUtdmFyaWFibGVzLSR7Z2l0RGF0YS5DSV9QUk9KRUNUX1BBVEhfU0xVR30vJHtwYXRoLmJhc2VuYW1lKGZyb21GaWxlUGF0aCl9YCk7XG4gICAgICAgICAgICAgICAgdmFyaWFibGVzW2tleV0gPSBgL3RtcC9naXRsYWItY2ktbG9jYWwtZmlsZS12YXJpYWJsZXMtJHtnaXREYXRhLkNJX1BST0pFQ1RfUEFUSF9TTFVHfS8ke3BhdGguYmFzZW5hbWUoZnJvbUZpbGVQYXRoKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlcztcbiAgICB9XG5cbiAgICBzdGF0aWMgbm9ybWFsaXplUHJvamVjdEtleShrZXk6IHN0cmluZywgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWtleS5pbmNsdWRlcyhcIjpcIikpIHJldHVybiBrZXk7XG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtge3llbGxvdyBXQVJOSU5HOiBJbnRlcnByZXRpbmcgJyR7a2V5fScgYXMgJyR7a2V5LnJlcGxhY2UoXCI6XCIsIFwiL1wiKX0nfVxcbmApO1xuICAgICAgICByZXR1cm4ga2V5LnJlcGxhY2UoXCI6XCIsIFwiL1wiKTtcbiAgICB9XG59XG4iXX0=
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWFibGVzLWZyb20tZmlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ2YXJpYWJsZXMtZnJvbS1maWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLDZDQUErQjtBQUMvQiw4Q0FBZ0M7QUFDaEMsa0RBQTBCO0FBRTFCLHVDQUFpQztBQUNqQyxtQ0FBOEI7QUFhOUIsTUFBYSxrQkFBa0I7SUFFM0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBVSxFQUFFLFlBQTBCLEVBQUUsT0FBZ0I7UUFDdEUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNyQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzFCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDN0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUMzQyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsT0FBTyxpQ0FBaUMsQ0FBQztRQUN0RSxNQUFNLFNBQVMsR0FBcUMsRUFBRSxDQUFDO1FBQ3ZELElBQUksY0FBYyxHQUFRLEVBQUUsQ0FBQztRQUM3QixJQUFJLFlBQVksR0FBUSxFQUFFLENBQUM7UUFFM0IsSUFBSSxlQUFlLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDcEMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1lBQy9FLElBQUEsZ0JBQU0sRUFBQyxLQUFLLElBQUksSUFBSSxFQUFFLDZHQUE2RyxDQUFDLENBQUM7WUFDckksTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7WUFDOUIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7WUFDaEMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxHQUFH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bXBvcnQge1dyaXRlU3RyZWFtc30gZnJvbSBcIi4vdHlwZXMvd3JpdGUtc3RyZWFtc1wiO1xuaW1wb3J0IHtHaXREYXRhfSBmcm9tIFwiLi9naXQtZGF0YVwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gXCJqcy15YW1sXCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQge0FyZ3Z9IGZyb20gXCIuL2FyZ3ZcIjtcbmltcG9ydCB7YXNzZXJ0fSBmcm9tIFwiLi9hc3NlcnRzXCI7XG5pbXBvcnQge1V0aWxzfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENJQ0RWYXJpYWJsZSB7XG4gICAgdHlwZTogXCJmaWxlXCJ8XCJ2YXJpYWJsZVwiO1xuICAgIGVudmlyb25tZW50czoge1xuICAgICAgICBjb250ZW50OiBzdHJpbmc7XG4gICAgICAgIHJlZ2V4cDogUmVnRXhwO1xuICAgICAgICByZWdleHBQcmlvcml0eTogbnVtYmVyO1xuICAgICAgICBzY29wZVByaW9yaXR5OiBudW1iZXI7XG4gICAgICAgIGZpbGVTb3VyY2U/OiBzdHJpbmc7XG4gICAgfVtdO1xufVxuXG5leHBvcnQgY2xhc3MgVmFyaWFibGVzRnJvbUZpbGVzIHtcblxuICAgIHN0YXRpYyBhc3luYyBpbml0KGFyZ3Y6IEFyZ3YsIHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBnaXREYXRhOiBHaXREYXRhKTogUHJvbWlzZTx7IFtuYW1lOiBzdHJpbmddOiBDSUNEVmFyaWFibGUgfT4ge1xuICAgICAgICBjb25zdCBjd2QgPSBhcmd2LmN3ZDtcbiAgICAgICAgY29uc3QgaG9tZURpciA9IGFyZ3YuaG9tZTtcbiAgICAgICAgY29uc3QgcmVtb3RlVmFyaWFibGVzID0gYXJndi5yZW1vdGVWYXJpYWJsZXM7XG4gICAgICAgIGNvbnN0IGF1dG9Db21wbGV0aW5nID0gYXJndi5hdXRvQ29tcGxldGluZztcbiAgICAgICAgY29uc3QgaG9tZVZhcmlhYmxlc0ZpbGUgPSBgJHtob21lRGlyfS8uZ2l0bGFiLWNpLWxvY2FsL3ZhcmlhYmxlcy55bWxgO1xuICAgICAgICBjb25zdCB2YXJpYWJsZXM6IHsgW25hbWU6IHN0cmluZ106IENJQ0RWYXJpYWJsZSB9ID0ge307XG4gICAgICAgIGxldCByZW1vdGVGaWxlRGF0YTogYW55ID0ge307XG4gICAgICAgIGxldCBob21lRmlsZURhdGE6IGFueSA9IHt9O1xuXG4gICAgICAgIGlmIChyZW1vdGVWYXJpYWJsZXMgJiYgIWF1dG9Db21wbGV0aW5nKSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IHJlbW90ZVZhcmlhYmxlcy5tYXRjaCgvKD88dXJsPmdpdEAuKj8pPSg/PGZpbGU+Lio/KT0oPzxyZWY+LiopLyk7XG4gICAgICAgICAgICBhc3NlcnQobWF0Y2ggIT0gbnVsbCwgXCItLXJlbW90ZS12YXJpYWJsZXMgaXMgbWFsZm9ybWVkIHVzZSAnZ2l0QGdpdGxhYi5jb206ZmlyZWNvdy9leGFtcGxlLmdpdD1naXRsYWItdmFyaWFibGVzLnltbD1tYXN0ZXInIHN5bnRheFwiKTtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IG1hdGNoLmdyb3Vwcz8udXJsO1xuICAgICAgICAgICAgY29uc3QgZmlsZSA9IG1hdGNoLmdyb3Vwcz8uZmlsZTtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IG1hdGNoLmdyb3Vwcz8ucmVmO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgVXRpbHMuYmFzaChgZ2l0IGFyY2hpdmUgLS1yZW1vdGU9JHt1cmx9ICR7cmVmfSAke2ZpbGV9IHwgdGFyIC14TyAke2ZpbGV9YCwgY3dkKTtcbiAgICAgICAgICAgIHJlbW90ZUZpbGVEYXRhID0geWFtbC5sb2FkKGAke3Jlcy5zdGRvdXR9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXdhaXQgZnMucGF0aEV4aXN0cyhob21lVmFyaWFibGVzRmlsZSkpIHtcbiAgICAgICAgICAgIGhvbWVGaWxlRGF0YSA9IHlhbWwubG9hZChhd2FpdCBmcy5yZWFkRmlsZShob21lVmFyaWFibGVzRmlsZSwgXCJ1dGY4XCIpLCB7c2NoZW1hOiB5YW1sLkZBSUxTQUZFX1NDSEVNQX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdW5wYWNrICA9ICh2OiBhbnkpOiB7IHZhbHVlczogYW55OyB0eXBlOiBcImZpbGVcInxcInZhcmlhYmxlXCJ9ID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhdGNoQWxsOiB7IHZhbHVlczogYW55OyB0eXBlOiBcImZpbGVcInxcInZhcmlhYmxlXCJ9ID0geyB2YWx1ZXM6IHt9LCB0eXBlOiBcInZhcmlhYmxlXCJ9O1xuICAgICAgICAgICAgICAgIGNhdGNoQWxsLnZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgICAgIGNhdGNoQWxsLnZhbHVlc1tcIipcIl0gPSB2O1xuICAgICAgICAgICAgICAgIHJldHVybiBjYXRjaEFsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2LnR5cGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHYudHlwZSA9IFwidmFyaWFibGVcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBhZGRUb1ZhcmlhYmxlcyA9IGFzeW5jIChrZXk6IHN0cmluZywgdmFsOiBhbnksIHNjb3BlUHJpb3JpdHk6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgY29uc3Qge3R5cGUsIHZhbHVlc30gPSB1bnBhY2sodmFsKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW21hdGNoZXIsIGNvbnRlbnRdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQodHlwZW9mIGNvbnRlbnQgPT0gXCJzdHJpbmdcIiwgYCR7a2V5fS4ke21hdGNoZXJ9IGNvbnRlbnQgbXVzdCBiZSB0ZXh0IG9yIG11bHRpbGluZSB0ZXh0YCk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IFwidmFyaWFibGVcIiAmJiB0eXBlb2YgY29udGVudCA9PT0gXCJzdHJpbmdcIiAmJiAhY29udGVudC5tYXRjaCgvXlsvfH5dLykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVnZXhwID0gbmV3IFJlZ0V4cChtYXRjaGVyLnJlcGxhY2UoL1xcKi9nLCBcIi4qXCIpLCBcImdcIik7XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlc1trZXldID0gdmFyaWFibGVzW2tleV0gPz8ge3R5cGU6IFwidmFyaWFibGVcIiwgZW52aXJvbm1lbnRzOiBbXX07XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlc1trZXldLmVudmlyb25tZW50cy5wdXNoKHtjb250ZW50LCByZWdleHAsIHJlZ2V4cFByaW9yaXR5OiBtYXRjaGVyLmxlbmd0aCwgc2NvcGVQcmlvcml0eX0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJ2YXJpYWJsZVwiICYmIHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiICYmIGNvbnRlbnQubWF0Y2goL15bL3x+XS8pKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVTb3VyY2UgPSBjb250ZW50LnJlcGxhY2UoL15+XFwvKC4qKS8sIGAke2hvbWVEaXJ9LyQxYCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2V4cCA9IG5ldyBSZWdFeHAobWF0Y2hlci5yZXBsYWNlKC9cXCovZywgXCIuKlwiKSwgXCJnXCIpO1xuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXNba2V5XSA9IHZhcmlhYmxlc1trZXldID8/IHt0eXBlOiBcImZpbGVcIiwgZW52aXJvbm1lbnRzOiBbXX07XG4gICAgICAgICAgICAgICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGZpbGVTb3VyY2UpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXNba2V5XS5lbnZpcm9ubWVudHMucHVzaCh7Y29udGVudCwgcmVnZXhwLCByZWdleHBQcmlvcml0eTogbWF0Y2hlci5sZW5ndGgsIHNjb3BlUHJpb3JpdHksIGZpbGVTb3VyY2V9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlc1trZXldLmVudmlyb25tZW50cy5wdXNoKHtjb250ZW50OiBgd2FybjogJHtrZXl9IGlzIHBvaW50aW5nIHRvIGludmFsaWQgcGF0aFxcbmAsIHJlZ2V4cCwgcmVnZXhwUHJpb3JpdHk6IG1hdGNoZXIubGVuZ3RoLCBzY29wZVByaW9yaXR5fSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwiZmlsZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2V4cCA9IG5ldyBSZWdFeHAobWF0Y2hlci5yZXBsYWNlKC9cXCovZywgXCIuKlwiKSwgXCJnXCIpO1xuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXNba2V5XSA9IHZhcmlhYmxlc1trZXldID8/IHt0eXBlOiBcImZpbGVcIiwgZW52aXJvbm1lbnRzOiBbXX07XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlc1trZXldLmVudmlyb25tZW50cy5wdXNoKHtjb250ZW50LCByZWdleHAsIHJlZ2V4cFByaW9yaXR5OiBtYXRjaGVyLmxlbmd0aCwgc2NvcGVQcmlvcml0eSB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UsIGAke2tleX0gd2FzIG5vdCBoYW5kbGVkIHByb3Blcmx5YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGFkZFZhcmlhYmxlRmlsZVRvVmFyaWFibGVzID0gYXN5bmMoZmlsZURhdGE6IGFueSwgZmlsZVByaW9yaXR5OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2dsb2JhbEtleSwgZ2xvYmFsRW50cnldIG9mIE9iamVjdC5lbnRyaWVzKGZpbGVEYXRhPy5nbG9iYWwgPz8ge30pKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgYWRkVG9WYXJpYWJsZXMoZ2xvYmFsS2V5LCBnbG9iYWxFbnRyeSwgMSArIGZpbGVQcmlvcml0eSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGdyb3VwVXJsID0gYCR7Z2l0RGF0YS5yZW1vdGUuaG9zdH0vJHtnaXREYXRhLnJlbW90ZS5ncm91cH0vYDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2dyb3VwS2V5LCBncm91cEVudHJpZXNdIG9mIE9iamVjdC5lbnRyaWVzKGZpbGVEYXRhPy5ncm91cCA/PyB7fSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWdyb3VwVXJsLmluY2x1ZGVzKHRoaXMubm9ybWFsaXplUHJvamVjdEtleShncm91cEtleSwgd3JpdGVTdHJlYW1zKSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGFzc2VydChncm91cEVudHJpZXMgIT0gbnVsbCwgXCJncm91cEVudHJpZXMgY2Fubm90IGJlIG51bGwvdW5kZWZpbmVkXCIpO1xuICAgICAgICAgICAgICAgIGFzc2VydCh0eXBlb2YgZ3JvdXBFbnRyaWVzID09PSBcIm9iamVjdFwiLCBcImdyb3VwRW50cmllcyBtdXN0IGJlIG9iamVjdFwiKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhncm91cEVudHJpZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGFkZFRvVmFyaWFibGVzKGssIHYsIDIgKyBmaWxlUHJpb3JpdHkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcHJvamVjdFVybCA9IGAke2dpdERhdGEucmVtb3RlLmhvc3R9LyR7Z2l0RGF0YS5yZW1vdGUuZ3JvdXB9LyR7Z2l0RGF0YS5yZW1vdGUucHJvamVjdH0uZ2l0YDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW3Byb2plY3RLZXksIHByb2plY3RFbnRyaWVzXSBvZiBPYmplY3QuZW50cmllcyhmaWxlRGF0YT8ucHJvamVjdCA/PyBbXSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXByb2plY3RVcmwuaW5jbHVkZXModGhpcy5ub3JtYWxpemVQcm9qZWN0S2V5KHByb2plY3RLZXksIHdyaXRlU3RyZWFtcykpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBhc3NlcnQocHJvamVjdEVudHJpZXMgIT0gbnVsbCwgXCJwcm9qZWN0RW50cmllcyBjYW5ub3QgYmUgbnVsbC91bmRlZmluZWRcIik7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KHR5cGVvZiBwcm9qZWN0RW50cmllcyA9PT0gXCJvYmplY3RcIiwgXCJwcm9qZWN0RW50cmllcyBtdXN0IGJlIG9iamVjdFwiKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhwcm9qZWN0RW50cmllcykpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYWRkVG9WYXJpYWJsZXMoaywgdiwgMyArIGZpbGVQcmlvcml0eSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGF3YWl0IGFkZFZhcmlhYmxlRmlsZVRvVmFyaWFibGVzKHJlbW90ZUZpbGVEYXRhLCAwKTtcbiAgICAgICAgYXdhaXQgYWRkVmFyaWFibGVGaWxlVG9WYXJpYWJsZXMoaG9tZUZpbGVEYXRhLCAxMCk7XG5cbiAgICAgICAgY29uc3QgcHJvamVjdFZhcmlhYmxlc0ZpbGUgPSBgJHthcmd2LmN3ZH0vLmdpdGxhYi1jaS1sb2NhbC12YXJpYWJsZXMueW1sYDtcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMocHJvamVjdFZhcmlhYmxlc0ZpbGUpKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9qZWN0VmFyaWFibGVzRmlsZURhdGE6IGFueSA9IHlhbWwubG9hZChhd2FpdCBmcy5yZWFkRmlsZShwcm9qZWN0VmFyaWFibGVzRmlsZSwgXCJ1dGY4XCIpLCB7c2NoZW1hOiB5YW1sLkZBSUxTQUZFX1NDSEVNQX0pID8/IHt9O1xuICAgICAgICAgICAgYXNzZXJ0KHByb2plY3RWYXJpYWJsZXNGaWxlRGF0YSAhPSBudWxsLCBcInByb2plY3RFbnRyaWVzIGNhbm5vdCBiZSBudWxsL3VuZGVmaW5lZFwiKTtcbiAgICAgICAgICAgIGFzc2VydCh0eXBlb2YgcHJvamVjdFZhcmlhYmxlc0ZpbGVEYXRhID09PSBcIm9iamVjdFwiLCBcInByb2plY3RFbnRyaWVzIG11c3QgYmUgb2JqZWN0XCIpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMocHJvamVjdFZhcmlhYmxlc0ZpbGVEYXRhKSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGFkZFRvVmFyaWFibGVzKGssIHYsIDI0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgdmFyT2JqIG9mIE9iamVjdC52YWx1ZXModmFyaWFibGVzKSkge1xuICAgICAgICAgICAgdmFyT2JqLmVudmlyb25tZW50cy5zb3J0KChhLCBiKSA9PiBiLnNjb3BlUHJpb3JpdHkgLSBhLnNjb3BlUHJpb3JpdHkpO1xuICAgICAgICAgICAgdmFyT2JqLmVudmlyb25tZW50cy5zb3J0KChhLCBiKSA9PiBiLnJlZ2V4cFByaW9yaXR5IC0gYS5yZWdleHBQcmlvcml0eSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFyaWFibGVzO1xuICAgIH1cblxuICAgIHN0YXRpYyBub3JtYWxpemVQcm9qZWN0S2V5KGtleTogc3RyaW5nLCB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcyk6IHN0cmluZyB7XG4gICAgICAgIGlmICgha2V5LmluY2x1ZGVzKFwiOlwiKSkgcmV0dXJuIGtleTtcbiAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7eWVsbG93IFdBUk5JTkc6IEludGVycHJldGluZyAnJHtrZXl9JyBhcyAnJHtrZXkucmVwbGFjZShcIjpcIiwgXCIvXCIpfSd9XFxuYCk7XG4gICAgICAgIHJldHVybiBrZXkucmVwbGFjZShcIjpcIiwgXCIvXCIpO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLW9wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwYXJzZXItb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtXcml0ZVN0cmVhbXN9IGZyb20gXCIuL3dyaXRlLXN0cmVhbXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZXJPcHRpb25zIHtcbiAgICBjd2Q6IHN0cmluZztcbiAgICB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcztcbiAgICBwaXBlbGluZUlpZDogbnVtYmVyO1xuICAgIHZhcmlhYmxlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgICBleHRyYUhvc3RzPzogc3RyaW5nW107XG4gICAgdm9sdW1lcz86IHN0cmluZ1tdO1xuICAgIGhvbWU/OiBzdHJpbmc7XG4gICAgZmlsZT86IHN0cmluZztcbiAgICBzaGVsbElzb2xhdGlvbj86IGJvb2xlYW47XG4gICAgbW91bnRDYWNoZT86IGJvb2xlYW47XG4gICAgZmV0Y2hJbmNsdWRlcz86IGJvb2xlYW47XG59XG4iXX0=