gitlab-ci-local 4.63.0 → 4.64.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/parser.js CHANGED
@@ -114,12 +114,8 @@ export class Parser {
114
114
  // Check job variables for invalid hash of key value pairs, and cast numbers to strings
115
115
  Utils.forEachRealJob(gitlabData, (jobName, jobData) => {
116
116
  assert(jobData.when !== "never", chalk `This GitLab CI configuration is invalid: jobs:${jobName} when:never can only be used in a rules section or workflow:rules`);
117
- for (const [key, _value] of Object.entries(jobData.variables || {})) {
118
- let value = _value;
119
- if (value === null)
120
- value = ""; // variable's values are nullable
121
- assert(typeof value === "string" || typeof value === "number" || typeof value === "boolean", chalk `{blueBright ${jobName}} has invalid variables hash of key value pairs. ${key}=${value}`);
122
- jobData.variables[key] = String(value);
117
+ for (const [key, value] of Object.entries(jobData.variables ?? {})) {
118
+ jobData.variables[key] = Utils.normalizeVariables(value);
123
119
  }
124
120
  for (let i = 0; i < (jobData.services ?? []).length; i++) {
125
121
  const service = jobData.services[i];
@@ -358,4 +354,4 @@ function getExpectedInputType(ctx) {
358
354
  const { interpolationKey, inputsSpecification } = ctx;
359
355
  return inputsSpecification.spec.inputs[interpolationKey]?.type || "string";
360
356
  }
361
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxVQUFVLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMxQixPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLFlBQVksTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUM3QixPQUFPLEtBQUssWUFBWSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDakMsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6QyxPQUFPLEtBQUssUUFBUSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFHN0QsT0FBTyxFQUFDLElBQUksSUFBSSx1QkFBdUIsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBRTFFLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQztBQUN4QixNQUFNLDhCQUE4QixHQUFHLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFVLENBQUM7QUFHekYsTUFBTSxPQUFPLE1BQU07SUFFUCxPQUFPLEdBQWEsRUFBRSxDQUFDO0lBQ3ZCLFdB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LG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUM7QUFDbEYsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFFLEdBQVE7SUFDNUIsTUFBTSxFQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsbUJBQW1CLEVBQUMsR0FBRyxHQUFHLENBQUM7SUFDNUUsTUFBTSxVQUFVLEdBQUcsTUFBTSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7UUFDekMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUMvRCxNQUFNLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRSxLQUFLLENBQUEsMERBQTBELGNBQWMsc0JBQXNCLGdCQUFnQixrREFBa0QsQ0FBQyxDQUFDO0lBQ3hNLE9BQU8sVUFBVSxDQUFDO0FBQ3RCLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFFLEdBQVE7SUFDbkMsTUFBTSxFQUFDLGdCQUFnQixFQUFFLG1CQUFtQixFQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ3BELE9BQU8sbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksSUFBSSxRQUFRLENBQUM7QUFDL0UsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgZGVlcEV4dGVuZCBmcm9tIFwiZGVlcC1leHRlbmRcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSBcImpzLXlhbWxcIjtcbmltcG9ydCBwcmV0dHlIcnRpbWUgZnJvbSBcInByZXR0eS1ocnRpbWVcIjtcbmltcG9ydCB7Sm9ifSBmcm9tIFwiLi9qb2IuanNcIjtcbmltcG9ydCAqIGFzIERhdGFFeHBhbmRlciBmcm9tIFwiLi9kYXRhLWV4cGFuZGVyLmpzXCI7XG5pbXBvcnQge1V0aWxzfSBmcm9tIFwiLi91dGlscy5qc1wiO1xuaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQge1ZhbGlkYXRvcn0gZnJvbSBcIi4vdmFsaWRhdG9yLmpzXCI7XG5pbXBvcnQgKiBhcyBwYXJhbGxlbCBmcm9tIFwiLi9wYXJhbGxlbC5qc1wiO1xuaW1wb3J0IHtHaXREYXRhfSBmcm9tIFwiLi9naXQtZGF0YS5qc1wiO1xuaW1wb3J0IHtQYXJzZXJJbmNsdWRlc30gZnJvbSBcIi4vcGFyc2VyLWluY2x1ZGVzLmpzXCI7XG5pbXBvcnQge1Byb2R1Y2Vyc30gZnJvbSBcIi4vcHJvZHVjZXJzLmpzXCI7XG5pbXBvcnQge1ZhcmlhYmxlc0Zyb21GaWxlc30gZnJvbSBcIi4vdmFyaWFibGVzLWZyb20tZmlsZXMuanNcIjtcbmltcG9ydCB7QXJndn0gZnJvbSBcIi4vYXJndi5qc1wiO1xuaW1wb3J0IHtXcml0ZVN0cmVhbXN9IGZyb20gXCIuL3dyaXRlLXN0cmVhbXMuanNcIjtcbmltcG9ydCB7aW5pdCBhcyBpbml0UHJlZGVmaW5lZFZhcmlhYmxlc30gZnJvbSBcIi4vcHJlZGVmaW5lZC12YXJpYWJsZXMuanNcIjtcblxuY29uc3QgTUFYX0ZVTkNUSU9OUyA9IDM7XG5jb25zdCBJTkNMVURFX0lOUFVUU19TVVBQT1JURURfVFlQRVMgPSBbXCJzdHJpbmdcIiwgXCJib29sZWFuXCIsIFwibnVtYmVyXCIsIFwiYXJyYXlcIl0gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBJbnB1dFR5cGUgPSB0eXBlb2YgSU5DTFVERV9JTlBVVFNfU1VQUE9SVEVEX1RZUEVTW251bWJlcl07XG5cbmV4cG9ydCBjbGFzcyBQYXJzZXIge1xuXG4gICAgcHJpdmF0ZSBfc3RhZ2VzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHByaXZhdGUgX2dpdGxhYkRhdGE6IGFueTtcbiAgICBwcml2YXRlIF9qb2JOYW1lUGFkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIHJlYWRvbmx5IGpvYnM6IEpvYltdO1xuICAgIHJlYWRvbmx5IGFyZ3Y6IEFyZ3Y7XG4gICAgcmVhZG9ubHkgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXM7XG4gICAgcmVhZG9ubHkgcGlwZWxpbmVJaWQ6IG51bWJlcjtcbiAgICByZWFkb25seSBleHBhbmRWYXJpYWJsZXM6IGJvb2xlYW47XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yIChhcmd2OiBBcmd2LCB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcywgcGlwZWxpbmVJaWQ6IG51bWJlciwgam9iczogSm9iW10sIGV4cGFuZFZhcmlhYmxlczogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmFyZ3YgPSBhcmd2O1xuICAgICAgICB0aGlzLndyaXRlU3RyZWFtcyA9IHdyaXRlU3RyZWFtcztcbiAgICAgICAgdGhpcy5waXBlbGluZUlpZCA9IHBpcGVsaW5lSWlkO1xuICAgICAgICB0aGlzLmpvYnMgPSBqb2JzO1xuICAgICAgICB0aGlzLmV4cGFuZFZhcmlhYmxlcyA9IGV4cGFuZFZhcmlhYmxlcztcbiAgICB9XG5cbiAgICBnZXQgc3RhZ2VzICgpOiByZWFkb25seSBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFnZXM7XG4gICAgfVxuXG4gICAgZ2V0IGdpdGxhYkRhdGEgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2l0bGFiRGF0YTtcbiAgICB9XG5cbiAgICBnZXQgam9iTmFtZVBhZCAoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2pvYk5hbWVQYWQgPz8gMDtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgY3JlYXRlIChhcmd2OiBBcmd2LCB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcywgcGlwZWxpbmVJaWQ6IG51bWJlciwgam9iczogSm9iW10sIGV4cGFuZFZhcmlhYmxlczogYm9vbGVhbiA9IHRydWUpIHtcbiAgICAgICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcihhcmd2LCB3cml0ZVN0cmVhbXMsIHBpcGVsaW5lSWlkLCBqb2JzLCBleHBhbmRWYXJpYWJsZXMpO1xuICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgYXdhaXQgcGFyc2VyLmluaXQoKTtcbiAgICAgICAgY29uc3Qgd2FybmluZ3MgPSBhd2FpdCBWYWxpZGF0b3IucnVuKHBhcnNlci5qb2JzLCBwYXJzZXIuc3RhZ2VzKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGpvYiBvZiBwYXJzZXIuam9icykge1xuICAgICAgICAgICAgaWYgKGpvYi5hcnRpZmFjdHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBqb2IuZGVsZXRlQXJ0aWZhY3RzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJzaW5nVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuICAgICAgICBjb25zdCBwYXRoVG9FeHBhbmRlZEdpdExhYkNpID0gcGF0aC5qb2luKGFyZ3YuY3dkLCBhcmd2LnN0YXRlRGlyLCBcImV4cGFuZGVkLWdpdGxhYi1jaS55bWxcIik7XG4gICAgICAgIGZzLm1rZGlycFN5bmMocGF0aC5qb2luKGFyZ3YuY3dkLCBhcmd2LnN0YXRlRGlyKSk7XG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aFRvRXhwYW5kZWRHaXRMYWJDaSwgeWFtbC5kdW1wKHBhcnNlci5naXRsYWJEYXRhKSk7XG4gICAgICAgIGlmIChhcmd2LmNoaWxkUGlwZWxpbmVEZXB0aCA9PSAwKSB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHtncmV5IHBhcnNpbmcgYW5kIGRvd25sb2FkcyBmaW5pc2hlZCBpbiAke3ByZXR0eUhydGltZShwYXJzaW5nVGltZSl9Ln1cXG5gKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHdhcm5pbmcgb2Ygd2FybmluZ3MpIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtge3llbGxvdyAke3dhcm5pbmd9fVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gIyBTZWNvbmQgbGF5ZXIgb2YgY2hlY2sgZm9yIGVycm9ycyB0aGF0IGFyZSBub3QgY2F1Z2h0IGluIFZhbGlkYXRvci5ydW5cbiAgICAgICAgaWYgKHBhcnNlci5hcmd2Lmpzb25TY2hlbWFWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgICAgIFZhbGlkYXRvci5qc29uU2NoZW1hVmFsaWRhdGlvbih7XG4gICAgICAgICAgICAgICAgcGF0aFRvRXhwYW5kZWRHaXRMYWJDaSxcbiAgICAgICAgICAgICAgICBnaXRMYWJDaUNvbmZpZzogcGFyc2VyLmdpdGxhYkRhdGEsXG4gICAgICAgICAgICAgICAgYXJndixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGFyZ3YuY2hpbGRQaXBlbGluZURlcHRoID09IDApIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtge2dyZXkganNvbiBzY2hlbWEgdmFsaWRhdGVkIGluICR7cHJldHR5SHJ0aW1lKHByb2Nlc3MuaHJ0aW1lKHRpbWUpKX19XFxuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlcjtcbiAgICB9XG5cbiAgICBhc3luYyBpbml0ICgpIHtcbiAgICAgICAgY29uc3QgYXJndiA9IHRoaXMuYXJndjtcbiAgICAgICAgY29uc3QgY3dkID0gYXJndi5jd2Q7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gYXJndi5zdGF0ZURpcjtcbiAgICAgICAgY29uc3Qgd3JpdGVTdHJlYW1zID0gdGhpcy53cml0ZVN0cmVhbXM7XG4gICAgICAgIGNvbnN0IGZpbGUgPSBhcmd2LmZpbGU7XG4gICAgICAgIGNvbnN0IHBpcGVsaW5lSWlkID0gdGhpcy5waXBlbGluZUlpZDtcbiAgICAgICAgY29uc3QgZmV0Y2hJbmNsdWRlcyA9IGFyZ3YuZmV0Y2hJbmNsdWRlcztcbiAgICAgICAgY29uc3QgZ2l0RGF0YSA9IGF3YWl0IEdpdERhdGEuaW5pdChjd2QsIHdyaXRlU3RyZWFtcyk7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlc0Zyb21GaWxlcyA9IGF3YWl0IFZhcmlhYmxlc0Zyb21GaWxlcy5pbml0KGFyZ3YsIHdyaXRlU3RyZWFtcywgZ2l0RGF0YSk7XG4gICAgICAgIGNvbnN0IGVudk1hdGNoZWRWYXJpYWJsZXMgPSBVdGlscy5maW5kRW52TWF0Y2hlZFZhcmlhYmxlcyh2YXJpYWJsZXNGcm9tRmlsZXMpO1xuICAgICAgICBjb25zdCBwcmVkZWZpbmVkVmFyaWFibGVzID0gaW5pdFByZWRlZmluZWRWYXJpYWJsZXMoe2dpdERhdGEsIGFyZ3YsIGVudk1hdGNoZWRWYXJpYWJsZXN9KTtcbiAgICAgICAgY29uc3QgdmFyaWFibGVzID0gey4uLnByZWRlZmluZWRWYXJpYWJsZXMsIC4uLmVudk1hdGNoZWRWYXJpYWJsZXMsIC4uLmFyZ3YudmFyaWFibGV9O1xuICAgICAgICBjb25zdCBleHBhbmRlZCA9IFV0aWxzLmV4cGFuZFZhcmlhYmxlcyh2YXJpYWJsZXMpO1xuXG4gICAgICAgIGxldCB5YW1sRGF0YUxpc3Q6IGFueVtdID0gW3tzdGFnZXM6IFtcIi5wcmVcIiwgXCJidWlsZFwiLCBcInRlc3RcIiwgXCJkZXBsb3lcIiwgXCIucG9zdFwiXX1dO1xuICAgICAgICBjb25zdCBnaXRsYWJDaURhdGEgPSBhd2FpdCBQYXJzZXIubG9hZFlhbWwoYCR7Y3dkfS8ke2ZpbGV9YCwge30sIHRoaXMuZXhwYW5kVmFyaWFibGVzKTtcblxuICAgICAgICB5YW1sRGF0YUxpc3QgPSB5YW1sRGF0YUxpc3QuY29uY2F0KGF3YWl0IFBhcnNlckluY2x1ZGVzLmluaXQoZ2l0bGFiQ2lEYXRhLCB7YXJndiwgY3dkLCBzdGF0ZURpciwgd3JpdGVTdHJlYW1zLCBnaXREYXRhLCBmZXRjaEluY2x1ZGVzLCB2YXJpYWJsZXM6IGV4cGFuZGVkLCBleHBhbmRWYXJpYWJsZXM6IHRoaXMuZXhwYW5kVmFyaWFibGVzLCBtYXhpbXVtSW5jbHVkZXM6IGFyZ3YubWF4aW11bUluY2x1ZGVzfSkpO1xuICAgICAgICBQYXJzZXJJbmNsdWRlcy5yZXNldENvdW50KCk7XG5cbiAgICAgICAgY29uc3QgZ2l0bGFiQ2lMb2NhbERhdGEgPSBhd2FpdCBQYXJzZXIubG9hZFlhbWwoYCR7Y3dkfS8uZ2l0bGFiLWNpLWxvY2FsLnltbGAsIHt9LCB0aGlzLmV4cGFuZFZhcmlhYmxlcyk7XG4gICAgICAgIHlhbWxEYXRhTGlzdCA9IHlhbWxEYXRhTGlzdC5jb25jYXQoYXdhaXQgUGFyc2VySW5jbHVkZXMuaW5pdChnaXRsYWJDaUxvY2FsRGF0YSwge2FyZ3YsIGN3ZCwgc3RhdGVEaXIsIHdyaXRlU3RyZWFtcywgZ2l0RGF0YSwgZmV0Y2hJbmNsdWRlcywgdmFyaWFibGVzOiBleHBhbmRlZCwgZXhwYW5kVmFyaWFibGVzOiB0aGlzLmV4cGFuZFZhcmlhYmxlcywgbWF4aW11bUluY2x1ZGVzOiBhcmd2Lm1heGltdW1JbmNsdWRlc30pKTtcbiAgICAgICAgUGFyc2VySW5jbHVkZXMucmVzZXRDb3VudCgpO1xuXG4gICAgICAgIGNvbnN0IGdpdGxhYkRhdGE6IGFueSA9IGRlZXBFeHRlbmQoe30sIC4uLnlhbWxEYXRhTGlzdCk7XG5cbiAgICAgICAgLy8gRXhwYW5kIHZhcmlvdXMgZmllbGRzIGluIGdpdGxhYkRhdGFcbiAgICAgICAgRGF0YUV4cGFuZGVyLmpvYkV4dGVuZHMoZ2l0bGFiRGF0YSk7XG4gICAgICAgIERhdGFFeHBhbmRlci5yZWZlcmVuY2UoZ2l0bGFiRGF0YSwgZ2l0bGFiRGF0YSk7XG4gICAgICAgIERhdGFFeHBhbmRlci5mbGF0dGVuTGlzdHMoZ2l0bGFiRGF0YSk7XG4gICAgICAgIERhdGFFeHBhbmRlci50cmFuc2Zvcm1EZXByZWNhdGVkR2xvYmFsRGVmYXVsdFN5bnRheChnaXRsYWJEYXRhKTtcbiAgICAgICAgRGF0YUV4cGFuZGVyLmluaGVyaXREZWZhdWx0KGdpdGxhYkRhdGEpO1xuICAgICAgICBEYXRhRXhwYW5kZXIubm9ybWFsaXplKGdpdGxhYkRhdGEpO1xuXG4gICAgICAgIGFzc2VydChnaXRsYWJEYXRhLnN0YWdlcyAmJiBBcnJheS5pc0FycmF5KGdpdGxhYkRhdGEuc3RhZ2VzKSwgY2hhbGtge3llbGxvdyBzdGFnZXM6fSBtdXN0IGJlIGFuIGFycmF5YCk7XG4gICAgICAgIGlmICghZ2l0bGFiRGF0YS5zdGFnZXMuaW5jbHVkZXMoXCIucHJlXCIpKSB7XG4gICAgICAgICAgICBnaXRsYWJEYXRhLnN0YWdlcy51bnNoaWZ0KFwiLnByZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWdpdGxhYkRhdGEuc3RhZ2VzLmluY2x1ZGVzKFwiLnBvc3RcIikpIHtcbiAgICAgICAgICAgIGdpdGxhYkRhdGEuc3RhZ2VzLnB1c2goXCIucG9zdFwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zdGFnZXMgPSBnaXRsYWJEYXRhLnN0YWdlcztcblxuICAgICAgICAvLyBDaGVjayBqb2IgdmFyaWFibGVzIGZvciBpbnZhbGlkIGhhc2ggb2Yga2V5IHZhbHVlIHBhaXJzLCBhbmQgY2FzdCBudW1iZXJzIHRvIHN0cmluZ3NcbiAgICAgICAgVXRpbHMuZm9yRWFjaFJlYWxKb2IoZ2l0bGFiRGF0YSwgKGpvYk5hbWUsIGpvYkRhdGEpID0+IHtcbiAgICAgICAgICAgIGFzc2VydChqb2JEYXRhLndoZW4gIT09IFwibmV2ZXJcIixcbiAgICAgICAgICAgICAgICBjaGFsa2BUaGlzIEdpdExhYiBDSSBjb25maWd1cmF0aW9uIGlzIGludmFsaWQ6IGpvYnM6JHtqb2JOYW1lfSB3aGVuOm5ldmVyIGNhbiBvbmx5IGJlIHVzZWQgaW4gYSBydWxlcyBzZWN0aW9uIG9yIHdvcmtmbG93OnJ1bGVzYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIF92YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoam9iRGF0YS52YXJpYWJsZXMgfHwge30pKSB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gX3ZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgdmFsdWUgPSBcIlwiOyAvLyB2YXJpYWJsZSdzIHZhbHVlcyBhcmUgbnVsbGFibGVcbiAgICAgICAgICAgICAgICBhc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICAgICAgY2hhbGtge2JsdWVCcmlnaHQgJHtqb2JOYW1lfX0gaGFzIGludmFsaWQgdmFyaWFibGVzIGhhc2ggb2Yga2V5IHZhbHVlIHBhaXJzLiAke2tleX09JHt2YWx1ZX1gLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgam9iRGF0YS52YXJpYWJsZXNba2V5XSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgKGpvYkRhdGEuc2VydmljZXMgPz8gW10pLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VydmljZSA9IGpvYkRhdGEuc2VydmljZXNbaV07XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc2VydmljZS52YXJpYWJsZXMgfHwge30pKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYWxrYHtibHVlQnJpZ2h0ICR7am9iTmFtZX0uc2VydmljZXNbJHtpfV19IGhhcyBpbnZhbGlkIHZhcmlhYmxlcyBoYXNoIG9mIGtleSB2YWx1ZSBwYWlycy4gJHtrZXl9PSR7dmFsdWV9YCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgam9iRGF0YS5zZXJ2aWNlc1tpXS52YXJpYWJsZXNba2V5XSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9naXRsYWJEYXRhID0gZ2l0bGFiRGF0YTtcblxuICAgICAgICAvLyBHZW5lcmF0ZSBqb2JzIGFuZCBwdXQgdGhlbSBpbnRvIHN0YWdlc1xuICAgICAgICBVdGlscy5mb3JFYWNoUmVhbEpvYihnaXRsYWJEYXRhLCAoam9iTmFtZSwgam9iRGF0YSkgPT4ge1xuICAgICAgICAgICAgYXNzZXJ0KGdpdERhdGEgIT0gbnVsbCwgXCJnaXREYXRhIG11c3QgYmUgc2V0XCIpO1xuICAgICAgICAgICAgYXNzZXJ0KHZhcmlhYmxlc0Zyb21GaWxlcyAhPSBudWxsLCBcImhvbWVWYXJpYWJsZXMgbXVzdCBiZSBzZXRcIik7XG5cbiAgICAgICAgICAgIGxldCBub2RlSW5kZXggPSAxO1xuICAgICAgICAgICAgY29uc3QgcGFyYWxsZWxNYXRyaXhWYXJpYWJsZXNMaXN0ID0gcGFyYWxsZWwubWF0cml4VmFyaWFibGVzTGlzdChqb2JEYXRhLCBqb2JOYW1lKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFyYWxsZWxNYXRyaXhWYXJpYWJsZXMgb2YgcGFyYWxsZWxNYXRyaXhWYXJpYWJsZXNMaXN0KSB7XG4gICAgICAgICAgICAgICAgbGV0IG1hdHJpeEpvYk5hbWUgPSBqb2JOYW1lO1xuICAgICAgICAgICAgICAgIGlmIChwYXJhbGxlbE1hdHJpeFZhcmlhYmxlcykge1xuICAgICAgICAgICAgICAgICAgICBtYXRyaXhKb2JOYW1lID0gYCR7am9iTmFtZX06IFske09iamVjdC52YWx1ZXMocGFyYWxsZWxNYXRyaXhWYXJpYWJsZXMgPz8gW10pLmpvaW4oXCIsXCIpfV1gO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYWxsZWwuaXNQbGFpblBhcmFsbGVsKGpvYkRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdHJpeEpvYk5hbWUgPSBgJHtqb2JOYW1lfTogWyR7bm9kZUluZGV4fS8ke3BhcmFsbGVsTWF0cml4VmFyaWFibGVzTGlzdC5sZW5ndGh9XWA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgam9iID0gbmV3IEpvYih7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3YsXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogam9iRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogbWF0cml4Sm9iTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgYmFzZU5hbWU6IGpvYk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGdsb2JhbFZhcmlhYmxlczogZ2l0bGFiRGF0YS52YXJpYWJsZXMsXG4gICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lSWlkOiBwaXBlbGluZUlpZCxcbiAgICAgICAgICAgICAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlczogey4uLnByZWRlZmluZWRWYXJpYWJsZXN9LCAvLyBOT1RFOiBwYXNzIGJ5IHZhbHVlIGJlY2F1c2UgcHJlZGVmaW5lZFZhcmlhYmxlcyBpcyBtdXRhdGVkIGluIHRoZSBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICBnaXREYXRhLFxuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXNGcm9tRmlsZXMsXG4gICAgICAgICAgICAgICAgICAgIG1hdHJpeFZhcmlhYmxlczogcGFyYWxsZWxNYXRyaXhWYXJpYWJsZXMsXG4gICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleDogKGpvYkRhdGEucGFyYWxsZWwgIT0gbnVsbCkgPyBub2RlSW5kZXggOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBub2Rlc1RvdGFsOiBwYXJhbGxlbE1hdHJpeFZhcmlhYmxlc0xpc3QubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICBleHBhbmRWYXJpYWJsZXM6IHRoaXMuZXhwYW5kVmFyaWFibGVzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kU3RhZ2UgPSB0aGlzLnN0YWdlcy5pbmNsdWRlcyhqb2Iuc3RhZ2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChmb3VuZFN0YWdlLCBjaGFsa2B7eWVsbG93IHN0YWdlOiR7am9iLnN0YWdlfX0gbm90IGZvdW5kIGZvciB7Ymx1ZUJyaWdodCAke2pvYi5uYW1lfX1gKTtcbiAgICAgICAgICAgICAgICB0aGlzLmpvYnMucHVzaChqb2IpO1xuICAgICAgICAgICAgICAgIG5vZGVJbmRleCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBBZGQgc29tZSBwYWRkaW5nIHNvIHRoYXQgam9iIGxvZ3MgYXJlIG5pY2VseSBhbGlnbmVkXG4gICAgICAgIC8vIGFsbG93IHVzZXJzIHRvIG92ZXJyaWRlIHRoaXMgaW4gY2FzZSB0aGV5IGhhdmUgcmVhbGx5IGxvbmcgam9iIG5hbWUgKHNlZSAjODQwKVxuICAgICAgICBpZiAodGhpcy5hcmd2Lm1heEpvYk5hbWVQYWRkaW5nICE9PSBudWxsICYmIHRoaXMuYXJndi5tYXhKb2JOYW1lUGFkZGluZyA8PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9qb2JOYW1lUGFkID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGpvYnMgPSB0aGlzLmFyZ3Yuam9iLmxlbmd0aCAhPT0gMCA/IHRoaXMuYXJndi5qb2IgOiB0aGlzLmpvYnM7XG4gICAgICAgICAgICBqb2JzLmZvckVhY2goKGpvYikgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBqb2JOZWVkc0xlbmd0aDogbnVtYmVyW10gPSBbXTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFyZ3YubmVlZHMgJiYgdGhpcy5hcmd2LmpvYi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5qb2JzLmZpbmQoaiA9PiBqLmJhc2VOYW1lID09PSBqb2IpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQ/Lm5lZWRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBqb2JOZWVkc0xlbmd0aCA9IGZvdW5kLm5lZWRzLm1hcChmID0+IGYuam9iLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgam9iTGVuZ3RoID0gdHlwZW9mIGpvYiA9PSBcInN0cmluZ1wiID8gam9iLmxlbmd0aCA6IGpvYi5uYW1lLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB0aGlzLl9qb2JOYW1lUGFkID0gTWF0aC5tYXgoam9iTGVuZ3RoLCB0aGlzLl9qb2JOYW1lUGFkID8/IDAsIC4uLmpvYk5lZWRzTGVuZ3RoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuYXJndi5tYXhKb2JOYW1lUGFkZGluZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2pvYk5hbWVQYWQgPSBNYXRoLm1pbih0aGlzLmFyZ3YubWF4Sm9iTmFtZVBhZGRpbmcgPz8gMCwgdGhpcy5fam9iTmFtZVBhZCA/PyAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCBqb2JOYW1lUGFkIG9uIGFsbCBqb2JzXG4gICAgICAgIHRoaXMuam9icy5mb3JFYWNoKChqb2IpID0+IHtcbiAgICAgICAgICAgIGpvYi5qb2JOYW1lUGFkID0gdGhpcy5qb2JOYW1lUGFkO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBHZW5lcmF0ZSBwcm9kdWNlcnMgZm9yIGVhY2ggam9iXG4gICAgICAgIHRoaXMuam9icy5mb3JFYWNoKChqb2IpID0+IHtcbiAgICAgICAgICAgIGpvYi5wcm9kdWNlcnMgPSBQcm9kdWNlcnMuaW5pdCh0aGlzLmpvYnMsIHRoaXMuc3RhZ2VzLCBqb2IpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgbG9hZFlhbWwgKGZpbGVQYXRoOiBzdHJpbmcsIGN0eDogYW55ID0ge30sIGV4cGFuZFZhcmlhYmxlczogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCB5bWxQYXRoID0gYCR7ZmlsZVBhdGh9YDtcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHltbFBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxlQ29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKGAke2ZpbGVQYXRofWAsIFwidXRmOFwiKTtcbiAgICAgICAgY29uc3QgZmlsZVNwbGl0ID0gZmlsZUNvbnRlbnQuc3BsaXQoL1xccj9cXG4vZyk7XG4gICAgICAgIGNvbnN0IGZpbGVTcGxpdENsb25lID0gZmlsZVNwbGl0LnNsaWNlKCk7XG5cbiAgICAgICAgbGV0IGludGVyYWN0aXZlTWF0Y2ggPSBudWxsO1xuICAgICAgICBsZXQgZGVzY3JpcHRpb25NYXRjaCA9IG51bGw7XG4gICAgICAgIGxldCBpbmplY3RTU0hBZ2VudCA9IG51bGw7XG4gICAgICAgIGxldCBub0FydGlmYWN0c1RvU291cmNlTWF0Y2ggPSBudWxsO1xuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICBpZiAoZXhwYW5kVmFyaWFibGVzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgZmlsZVNwbGl0KSB7XG4gICAgICAgICAgICAgICAgaW50ZXJhY3RpdmVNYXRjaCA9IGludGVyYWN0aXZlTWF0Y2ggPz8gLyNcXHM/QFxccz9bSWldbnRlcmFjdGl2ZS8uZXhlYyhsaW5lKTtcbiAgICAgICAgICAgICAgICBpbmplY3RTU0hBZ2VudCA9IGluamVjdFNTSEFnZW50ID8/IC8jXFxzP0BcXHM/W0lpXW5qZWN0U1NIQWdlbnQvLmV4ZWMobGluZSk7XG4gICAgICAgICAgICAgICAgbm9BcnRpZmFjdHNUb1NvdXJjZU1hdGNoID0gbm9BcnRpZmFjdHNUb1NvdXJjZU1hdGNoID8/IC8jXFxzP0BcXHM/Tm9BcnRpZmFjdHNUb1NvdXJjZS9pLmV4ZWMobGluZSk7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb25NYXRjaCA9IGRlc2NyaXB0aW9uTWF0Y2ggPz8gLyNcXHM/QFxccz9bRGRdZXNjcmlwdGlvbiAoPzxkZXNjcmlwdGlvbj4uKikvLmV4ZWMobGluZSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBqb2JNYXRjaCA9IC9cXHc6Ly5leGVjKGxpbmUpO1xuICAgICAgICAgICAgICAgIGlmIChqb2JNYXRjaCAmJiAoaW50ZXJhY3RpdmVNYXRjaCB8fCBkZXNjcmlwdGlvbk1hdGNoIHx8IGluamVjdFNTSEFnZW50IHx8IG5vQXJ0aWZhY3RzVG9Tb3VyY2VNYXRjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGludGVyYWN0aXZlTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVTcGxpdENsb25lLnNwbGljZShpbmRleCArIDEsIDAsIFwiICBnY2xJbnRlcmFjdGl2ZTogdHJ1ZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGluamVjdFNTSEFnZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlU3BsaXRDbG9uZS5zcGxpY2UoaW5kZXggKyAxLCAwLCBcIiAgZ2NsSW5qZWN0U1NIQWdlbnQ6IHRydWVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChub0FydGlmYWN0c1RvU291cmNlTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVTcGxpdENsb25lLnNwbGljZShpbmRleCArIDEsIDAsIFwiICBnY2xBcnRpZmFjdHNUb1NvdXJjZTogZmFsc2VcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbk1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlU3BsaXRDbG9uZS5zcGxpY2UoaW5kZXggKyAxLCAwLCBgICBnY2xEZXNjcmlwdGlvbjogJHtkZXNjcmlwdGlvbk1hdGNoPy5ncm91cHM/LmRlc2NyaXB0aW9uID8/IFwiXCJ9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlTWF0Y2ggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbk1hdGNoID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaW5qZWN0U1NIQWdlbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBub0FydGlmYWN0c1RvU291cmNlTWF0Y2ggPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVmZXJlbmNlVHlwZSA9IG5ldyB5YW1sLlR5cGUoXCIhcmVmZXJlbmNlXCIsIHtcbiAgICAgICAgICAgIGtpbmQ6IFwic2VxdWVuY2VcIixcbiAgICAgICAgICAgIGNvbnN0cnVjdDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge3JlZmVyZW5jZURhdGE6IGRhdGF9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHlhbWwuREVGQVVMVF9TQ0hFTUEuZXh0ZW5kKFtyZWZlcmVuY2VUeXBlXSk7XG4gICAgICAgIGxldCBmaWxlRGF0YTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZmlsZURhdGEgPSB5YW1sLmxvYWRBbGwoZmlsZVNwbGl0Q2xvbmUuam9pbihcIlxcblwiKSwgbnVsbCwge3NjaGVtYX0pIGFzIGFueVtdO1xuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgeWFtbC5ZQU1MRXhjZXB0aW9uICYmIGUucmVhc29uID09PSBcImR1cGxpY2F0ZWQgbWFwcGluZyBrZXlcIikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrYHtibGFjay5iZ1llbGxvd0JyaWdodCAgV0FSTiB9IGR1cGxpY2F0ZWQgbWFwcGluZyBrZXkgZGV0ZWN0ZWQhIFZhbHVlcyB3aWxsIGJlIG92ZXJ3cml0dGVuIWApO1xuICAgICAgICAgICAgICAgIGZpbGVEYXRhID0geWFtbC5sb2FkQWxsKGZpbGVTcGxpdENsb25lLmpvaW4oXCJcXG5cIiksIG51bGwsIHtzY2hlbWEsIGpzb246IHRydWV9KSBhcyBhbnlbXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlRGF0YS5sZW5ndGggPD0gMSkgcmV0dXJuIGZpbGVEYXRhWzBdO1xuXG4gICAgICAgIGlmIChpc0dpdGxhYlNwZWNGaWxlKGZpbGVEYXRhWzBdKSkge1xuICAgICAgICAgICAgY29uc3QgaW5wdXRzU3BlY2lmaWNhdGlvbjogYW55ID0gZmlsZURhdGFbMF07XG4gICAgICAgICAgICBjb25zdCB1bmludGVycG9sYXRlZENvbmZpZ3VyYXRpb25zOiBhbnkgPSBmaWxlRGF0YVsxXTtcblxuICAgICAgICAgICAgY29uc3QgaW50ZXJwb2xhdGVkQ29uZmlndXJhdGlvbnMgPSBKU09OLnN0cmluZ2lmeSh1bmludGVycG9sYXRlZENvbmZpZ3VyYXRpb25zKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAvKD88Zmlyc3RDaGFyPi4pPyg/PHNlY29uZENoYXI+Lik/XFwkXFxbXFxbXFxzKmlucHV0cy4oPzxpbnRlcnBvbGF0aW9uS2V5PltcXHctXSspXFxzKlxcfD9cXHMqKD88aW50ZXJwb2xhdGlvbkZ1bmN0aW9ucz4uKj8pXFxzKlxcXVxcXSg/PGxhc3RDaGFyPlteJF0pPy9nIC8vIGh0dHBzOi8vcmVnZXhyLmNvbS84MWMxNlxuICAgICAgICAgICAgICAgICAgICAsIChfOiBzdHJpbmcsIGZpcnN0Q2hhcjogc3RyaW5nLCBzZWNvbmRDaGFyOiBzdHJpbmcsIGludGVycG9sYXRpb25LZXk6IHN0cmluZywgaW50ZXJwb2xhdGlvbkZ1bmN0aW9uczogc3RyaW5nLCBsYXN0Q2hhcjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25maWdGaWxlUGF0aCA9IHBhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgZmlsZVBhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnBvbGF0aW9uS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycG9sYXRpb25GdW5jdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRzU3BlY2lmaWNhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdHgsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDaGFyID8/PSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kQ2hhciA/Pz0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDaGFyID8/PSBcIlwiO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7aW5wdXRWYWx1ZSwgaW5wdXRUeXBlfSA9IHBhcnNlSW5jbHVkZUlucHV0cyhjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0VHdvQ2hhciA9IGZpcnN0Q2hhciArIHNlY29uZENoYXI7XG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGlucHV0VHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHNlY29uZENoYXIgPT0gXCJcXFwiXCIgJiYgbGFzdENoYXIgPT0gXCJcXFwiXCIpICYmIGZpcnN0Q2hhciAhPSBcIlxcXFxcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0Q2hhciArIEpTT04uc3RyaW5naWZ5KGlucHV0VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogVGhpcyBiZWhhdmVzIHNsaWdodGx5IGRpZmZlcmVudGx5IGZyb20gZ2l0bGFiLmNvbS4gSSBjYW4ndCBjb21lIHVwIHdpdGggcHJhY3RpY2FsIHVzZSBjYXNlIHNvIGkgZG9uJ3QgdGhpbmsgaXQncyB3b3J0aCB0aGUgZWZmb3J0IHRvIG1pbWljIHRoaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0VHdvQ2hhciArIEpTT04uc3RyaW5naWZ5KEpTT04uc3RyaW5naWZ5KGlucHV0VmFsdWUpKS5zbGljZSgxLCAtMSkgKyBsYXN0Q2hhcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdFR3b0NoYXIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoaW5wdXRWYWx1ZSkgLy8gZW5zdXJlIGEgdmFsaWQganNvbiBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMSwgLTEpICsgLy8gcmVtb3ZlIHRoZSBzdXJyb3VuZGluZyBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENoYXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChzZWNvbmRDaGFyID09IFwiXFxcIlwiICYmIGxhc3RDaGFyID09IFwiXFxcIlwiKSAmJiBmaXJzdENoYXIgIT0gXCJcXFxcXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdENoYXIgKyBpbnB1dFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdFR3b0NoYXIgKyBpbnB1dFZhbHVlICsgbGFzdENoYXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zd2l0Y2hTdGF0ZW1lbnRFeGhhdXN0aXZlQ2hlY2soaW5wdXRUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShpbnRlcnBvbGF0ZWRDb25maWd1cmF0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbGVEYXRhWzBdO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNHaXRsYWJTcGVjRmlsZSAoZmlsZURhdGE6IGFueSkge1xuICAgIHJldHVybiBcInNwZWNcIiBpbiBmaWxlRGF0YTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVJbnRlcnBvbGF0aW9uS2V5IChjdHg6IGFueSkge1xuICAgIGNvbnN0IHtjb25maWdGaWxlUGF0aCwgaW50ZXJwb2xhdGlvbktleSwgaW5wdXRzU3BlY2lmaWNhdGlvbn0gPSBjdHg7XG4gICAgY29uc3QgaW52YWxpZEludGVycG9sYXRpb25LZXlFcnIgPSBjaGFsa2BUaGlzIEdpdExhYiBDSSBjb25maWd1cmF0aW9uIGlzIGludmFsaWQ6IFxcYHtibHVlQnJpZ2h0ICR7Y29uZmlnRmlsZVBhdGh9fVxcYDogdW5rbm93biBpbnRlcnBvbGF0aW9uIGtleTogXFxgJHtpbnRlcnBvbGF0aW9uS2V5fVxcYC5gO1xuICAgIGFzc2VydChpbnB1dHNTcGVjaWZpY2F0aW9uLnNwZWMuaW5wdXRzPy5baW50ZXJwb2xhdGlvbktleV0gIT09IHVuZGVmaW5lZCwgaW52YWxpZEludGVycG9sYXRpb25LZXlFcnIpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUludGVycG9sYXRpb25GdW5jdGlvbnMgKGN0eDogYW55KSB7XG4gICAgY29uc3Qge2ludGVycG9sYXRpb25GdW5jdGlvbnMsIGNvbmZpZ0ZpbGVQYXRofSA9IGN0eDtcbiAgICBpZiAoaW50ZXJwb2xhdGlvbkZ1bmN0aW9ucyAhPSBcIlwiKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrYHtibGFjay5iZ1llbGxvd0JyaWdodCAgV0FSTiB9IGludGVycG9sYXRpb24gZnVuY3Rpb25zIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIHZpYSBnaXRsYWItY2ktbG9jYWwuIEZ1bmN0aW9ucyB3aWxsIGp1c3QgYmUgYSBuby1vcC5gKTtcbiAgICB9XG4gICAgYXNzZXJ0KGludGVycG9sYXRpb25GdW5jdGlvbnMuc3BsaXQoXCJ8XCIpLmxlbmd0aCA8PSBNQVhfRlVOQ1RJT05TLCBjaGFsa2BUaGlzIEdpdExhYiBDSSBjb25maWd1cmF0aW9uIGlzIGludmFsaWQ6IFxcYHtibHVlQnJpZ2h0ICR7Y29uZmlnRmlsZVBhdGh9fVxcYDogdG9vIG1hbnkgZnVuY3Rpb25zIGluIGludGVycG9sYXRpb24gYmxvY2suYCk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSW5wdXQgKGN0eDogYW55KSB7XG4gICAgY29uc3Qge2NvbmZpZ0ZpbGVQYXRoLCBpbnRlcnBvbGF0aW9uS2V5LCBpbnB1dHNTcGVjaWZpY2F0aW9ufSA9IGN0eDtcbiAgICBjb25zdCBpbnB1dFZhbHVlID0gZ2V0SW5wdXRWYWx1ZShjdHgpO1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IGlucHV0c1NwZWNpZmljYXRpb24uc3BlYy5pbnB1dHNbaW50ZXJwb2xhdGlvbktleV0/Lm9wdGlvbnM7XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgYXNzZXJ0KG9wdGlvbnMuaW5jbHVkZXMoaW5wdXRWYWx1ZSksXG4gICAgICAgICAgICBjaGFsa2BUaGlzIEdpdExhYiBDSSBjb25maWd1cmF0aW9uIGlzIGludmFsaWQ6IFxcYHtibHVlQnJpZ2h0ICR7Y29uZmlnRmlsZVBhdGh9fVxcYDogXFxge2JsdWVCcmlnaHQgJHtpbnRlcnBvbGF0aW9uS2V5fX1cXGAgaW5wdXQ6IFxcYHtibHVlQnJpZ2h0ICR7aW5wdXRWYWx1ZX19XFxgIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2UgaXQgaXMgbm90IGluIHRoZSBsaXN0IG9mIGFsbG93ZWQgb3B0aW9ucy5gKTtcbiAgICB9XG5cbiAgICBjb25zdCBleHBlY3RlZElucHV0VHlwZSA9IGdldEV4cGVjdGVkSW5wdXRUeXBlKGN0eCk7XG4gICAgYXNzZXJ0KElOQ0xVREVfSU5QVVRTX1NVUFBPUlRFRF9UWVBFUy5pbmNsdWRlcyhleHBlY3RlZElucHV0VHlwZSksXG4gICAgICAgIGNoYWxrYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogXFxge2JsdWVCcmlnaHQgJHtjb25maWdGaWxlUGF0aH19XFxgOiBoZWFkZXI6c3BlYzppbnB1dHM6e2JsdWVCcmlnaHQgJHtpbnRlcnBvbGF0aW9uS2V5fX0gaW5wdXQgdHlwZSB1bmtub3duIHZhbHVlOiB7Ymx1ZUJyaWdodCAke2V4cGVjdGVkSW5wdXRUeXBlfX0uYCk7XG5cbiAgICBjb25zdCBpbnB1dFR5cGUgPSBBcnJheS5pc0FycmF5KGlucHV0VmFsdWUpID8gXCJhcnJheVwiIDogdHlwZW9mIGlucHV0VmFsdWU7XG4gICAgYXNzZXJ0KGlucHV0VHlwZSA9PT0gZXhwZWN0ZWRJbnB1dFR5cGUsXG4gICAgICAgIGNoYWxrYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogXFxge2JsdWVCcmlnaHQgJHtjb25maWdGaWxlUGF0aH19XFxgOiBcXGB7Ymx1ZUJyaWdodCAke2ludGVycG9sYXRpb25LZXl9fVxcYCBpbnB1dDogcHJvdmlkZWQgdmFsdWUgaXMgbm90IGEge2JsdWVCcmlnaHQgJHtleHBlY3RlZElucHV0VHlwZX19LmApO1xuXG4gICAgY29uc3QgcmVnZXggPSBpbnB1dHNTcGVjaWZpY2F0aW9uLnNwZWMuaW5wdXRzW2ludGVycG9sYXRpb25LZXldPy5yZWdleDtcbiAgICBpZiAocmVnZXgpIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGtge2JsYWNrLmJnWWVsbG93QnJpZ2h0ICBXQVJOIH0gc3BlYzppbnB1dHM6cmVnZXggaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgdmlhIGdpdGxhYi1jaS1sb2NhbC4gVGhpcyB3aWxsIGp1c3QgYmUgYSBuby1vcC5gKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlSW5jbHVkZUlucHV0cyAoY3R4OiBhbnkpOiB7aW5wdXRWYWx1ZTogYW55OyBpbnB1dFR5cGU6IElucHV0VHlwZX0ge1xuICAgIHZhbGlkYXRlSW50ZXJwb2xhdGlvbktleShjdHgpO1xuICAgIHZhbGlkYXRlSW50ZXJwb2xhdGlvbkZ1bmN0aW9ucyhjdHgpO1xuICAgIHZhbGlkYXRlSW5wdXQoY3R4KTtcbiAgICByZXR1cm4ge2lucHV0VmFsdWU6IGdldElucHV0VmFsdWUoY3R4KSwgaW5wdXRUeXBlOiBnZXRFeHBlY3RlZElucHV0VHlwZShjdHgpfTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5wdXRWYWx1ZSAoY3R4OiBhbnkpIHtcbiAgICBjb25zdCB7aW5wdXRzLCBpbnRlcnBvbGF0aW9uS2V5LCBjb25maWdGaWxlUGF0aCwgaW5wdXRzU3BlY2lmaWNhdGlvbn0gPSBjdHg7XG4gICAgY29uc3QgaW5wdXRWYWx1ZSA9IGlucHV0cz8uW2ludGVycG9sYXRpb25LZXldID8/XG4gICAgICAgIGlucHV0c1NwZWNpZmljYXRpb24uc3BlYy5pbnB1dHNbaW50ZXJwb2xhdGlvbktleV0/LmRlZmF1bHQ7XG4gICAgYXNzZXJ0KGlucHV0VmFsdWUgIT09IHVuZGVmaW5lZCwgY2hhbGtgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBcXGB7Ymx1ZUJyaWdodCAke2NvbmZpZ0ZpbGVQYXRofX1cXGA6IFxcYHtibHVlQnJpZ2h0ICR7aW50ZXJwb2xhdGlvbktleX19XFxgIGlucHV0OiByZXF1aXJlZCB2YWx1ZSBoYXMgbm90IGJlZW4gcHJvdmlkZWQuYCk7XG4gICAgcmV0dXJuIGlucHV0VmFsdWU7XG59XG5cbmZ1bmN0aW9uIGdldEV4cGVjdGVkSW5wdXRUeXBlIChjdHg6IGFueSk6IElucHV0VHlwZSB7XG4gICAgY29uc3Qge2ludGVycG9sYXRpb25LZXksIGlucHV0c1NwZWNpZmljYXRpb259ID0gY3R4O1xuICAgIHJldHVybiBpbnB1dHNTcGVjaWZpY2F0aW9uLnNwZWMuaW5wdXRzW2ludGVycG9sYXRpb25LZXldPy50eXBlIHx8IFwic3RyaW5nXCI7XG59XG4iXX0=
357
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxVQUFVLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMxQixPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLFlBQVksTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUM3QixPQUFPLEtBQUssWUFBWSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDakMsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6QyxPQUFPLEtBQUssUUFBUSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFHN0QsT0FBTyxFQUFDLElBQUksSUFBSSx1QkFBdUIsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBRTFFLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQztBQUN4QixNQUFNLDhCQUE4QixHQUFHLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFVLENBQUM7QUFHekYsTUFBTSxPQUFPLE1BQU07SUFFUCxPQUFPLEdBQWEsRUFBRSxDQUFDO0lBQ3ZCLFdB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QixDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQy9ELE1BQU0sQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFLEtBQUssQ0FBQSwwREFBMEQsY0FBYyxzQkFBc0IsZ0JBQWdCLGtEQUFrRCxDQUFDLENBQUM7SUFDeE0sT0FBTyxVQUFVLENBQUM7QUFDdEIsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUUsR0FBUTtJQUNuQyxNQUFNLEVBQUMsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUMsR0FBRyxHQUFHLENBQUM7SUFDcEQsT0FBTyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsSUFBSSxJQUFJLFFBQVEsQ0FBQztBQUMvRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCBkZWVwRXh0ZW5kIGZyb20gXCJkZWVwLWV4dGVuZFwiO1xuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0ICogYXMgeWFtbCBmcm9tIFwianMteWFtbFwiO1xuaW1wb3J0IHByZXR0eUhydGltZSBmcm9tIFwicHJldHR5LWhydGltZVwiO1xuaW1wb3J0IHtKb2J9IGZyb20gXCIuL2pvYi5qc1wiO1xuaW1wb3J0ICogYXMgRGF0YUV4cGFuZGVyIGZyb20gXCIuL2RhdGEtZXhwYW5kZXIuanNcIjtcbmltcG9ydCB7VXRpbHN9IGZyb20gXCIuL3V0aWxzLmpzXCI7XG5pbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7VmFsaWRhdG9yfSBmcm9tIFwiLi92YWxpZGF0b3IuanNcIjtcbmltcG9ydCAqIGFzIHBhcmFsbGVsIGZyb20gXCIuL3BhcmFsbGVsLmpzXCI7XG5pbXBvcnQge0dpdERhdGF9IGZyb20gXCIuL2dpdC1kYXRhLmpzXCI7XG5pbXBvcnQge1BhcnNlckluY2x1ZGVzfSBmcm9tIFwiLi9wYXJzZXItaW5jbHVkZXMuanNcIjtcbmltcG9ydCB7UHJvZHVjZXJzfSBmcm9tIFwiLi9wcm9kdWNlcnMuanNcIjtcbmltcG9ydCB7VmFyaWFibGVzRnJvbUZpbGVzfSBmcm9tIFwiLi92YXJpYWJsZXMtZnJvbS1maWxlcy5qc1wiO1xuaW1wb3J0IHtBcmd2fSBmcm9tIFwiLi9hcmd2LmpzXCI7XG5pbXBvcnQge1dyaXRlU3RyZWFtc30gZnJvbSBcIi4vd3JpdGUtc3RyZWFtcy5qc1wiO1xuaW1wb3J0IHtpbml0IGFzIGluaXRQcmVkZWZpbmVkVmFyaWFibGVzfSBmcm9tIFwiLi9wcmVkZWZpbmVkLXZhcmlhYmxlcy5qc1wiO1xuXG5jb25zdCBNQVhfRlVOQ1RJT05TID0gMztcbmNvbnN0IElOQ0xVREVfSU5QVVRTX1NVUFBPUlRFRF9UWVBFUyA9IFtcInN0cmluZ1wiLCBcImJvb2xlYW5cIiwgXCJudW1iZXJcIiwgXCJhcnJheVwiXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIElucHV0VHlwZSA9IHR5cGVvZiBJTkNMVURFX0lOUFVUU19TVVBQT1JURURfVFlQRVNbbnVtYmVyXTtcblxuZXhwb3J0IGNsYXNzIFBhcnNlciB7XG5cbiAgICBwcml2YXRlIF9zdGFnZXM6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBfZ2l0bGFiRGF0YTogYW55O1xuICAgIHByaXZhdGUgX2pvYk5hbWVQYWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgcmVhZG9ubHkgam9iczogSm9iW107XG4gICAgcmVhZG9ubHkgYXJndjogQXJndjtcbiAgICByZWFkb25seSB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcztcbiAgICByZWFkb25seSBwaXBlbGluZUlpZDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGV4cGFuZFZhcmlhYmxlczogYm9vbGVhbjtcblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IgKGFyZ3Y6IEFyZ3YsIHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBwaXBlbGluZUlpZDogbnVtYmVyLCBqb2JzOiBKb2JbXSwgZXhwYW5kVmFyaWFibGVzOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuYXJndiA9IGFyZ3Y7XG4gICAgICAgIHRoaXMud3JpdGVTdHJlYW1zID0gd3JpdGVTdHJlYW1zO1xuICAgICAgICB0aGlzLnBpcGVsaW5lSWlkID0gcGlwZWxpbmVJaWQ7XG4gICAgICAgIHRoaXMuam9icyA9IGpvYnM7XG4gICAgICAgIHRoaXMuZXhwYW5kVmFyaWFibGVzID0gZXhwYW5kVmFyaWFibGVzO1xuICAgIH1cblxuICAgIGdldCBzdGFnZXMgKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YWdlcztcbiAgICB9XG5cbiAgICBnZXQgZ2l0bGFiRGF0YSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9naXRsYWJEYXRhO1xuICAgIH1cblxuICAgIGdldCBqb2JOYW1lUGFkICgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fam9iTmFtZVBhZCA/PyAwO1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBjcmVhdGUgKGFyZ3Y6IEFyZ3YsIHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBwaXBlbGluZUlpZDogbnVtYmVyLCBqb2JzOiBKb2JbXSwgZXhwYW5kVmFyaWFibGVzOiBib29sZWFuID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgUGFyc2VyKGFyZ3YsIHdyaXRlU3RyZWFtcywgcGlwZWxpbmVJaWQsIGpvYnMsIGV4cGFuZFZhcmlhYmxlcyk7XG4gICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICBhd2FpdCBwYXJzZXIuaW5pdCgpO1xuICAgICAgICBjb25zdCB3YXJuaW5ncyA9IGF3YWl0IFZhbGlkYXRvci5ydW4ocGFyc2VyLmpvYnMsIHBhcnNlci5zdGFnZXMpO1xuXG4gICAgICAgIGZvciAoY29uc3Qgam9iIG9mIHBhcnNlci5qb2JzKSB7XG4gICAgICAgICAgICBpZiAoam9iLmFydGlmYWN0cyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGpvYi5kZWxldGVBcnRpZmFjdHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcnNpbmdUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgIGNvbnN0IHBhdGhUb0V4cGFuZGVkR2l0TGFiQ2kgPSBwYXRoLmpvaW4oYXJndi5jd2QsIGFyZ3Yuc3RhdGVEaXIsIFwiZXhwYW5kZWQtZ2l0bGFiLWNpLnltbFwiKTtcbiAgICAgICAgZnMubWtkaXJwU3luYyhwYXRoLmpvaW4oYXJndi5jd2QsIGFyZ3Yuc3RhdGVEaXIpKTtcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhwYXRoVG9FeHBhbmRlZEdpdExhYkNpLCB5YW1sLmR1bXAocGFyc2VyLmdpdGxhYkRhdGEpKTtcbiAgICAgICAgaWYgKGFyZ3YuY2hpbGRQaXBlbGluZURlcHRoID09IDApIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtge2dyZXkgcGFyc2luZyBhbmQgZG93bmxvYWRzIGZpbmlzaGVkIGluICR7cHJldHR5SHJ0aW1lKHBhcnNpbmdUaW1lKX0ufVxcbmApO1xuXG4gICAgICAgIGZvciAoY29uc3Qgd2FybmluZyBvZiB3YXJuaW5ncykge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7eWVsbG93ICR7d2FybmluZ319XFxuYCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAjIFNlY29uZCBsYXllciBvZiBjaGVjayBmb3IgZXJyb3JzIHRoYXQgYXJlIG5vdCBjYXVnaHQgaW4gVmFsaWRhdG9yLnJ1blxuICAgICAgICBpZiAocGFyc2VyLmFyZ3YuanNvblNjaGVtYVZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgVmFsaWRhdG9yLmpzb25TY2hlbWFWYWxpZGF0aW9uKHtcbiAgICAgICAgICAgICAgICBwYXRoVG9FeHBhbmRlZEdpdExhYkNpLFxuICAgICAgICAgICAgICAgIGdpdExhYkNpQ29uZmlnOiBwYXJzZXIuZ2l0bGFiRGF0YSxcbiAgICAgICAgICAgICAgICBhcmd2LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXJndi5jaGlsZFBpcGVsaW5lRGVwdGggPT0gMCkgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7Z3JleSBqc29uIHNjaGVtYSB2YWxpZGF0ZWQgaW4gJHtwcmV0dHlIcnRpbWUocHJvY2Vzcy5ocnRpbWUodGltZSkpfX1cXG5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VyO1xuICAgIH1cblxuICAgIGFzeW5jIGluaXQgKCkge1xuICAgICAgICBjb25zdCBhcmd2ID0gdGhpcy5hcmd2O1xuICAgICAgICBjb25zdCBjd2QgPSBhcmd2LmN3ZDtcbiAgICAgICAgY29uc3Qgc3RhdGVEaXIgPSBhcmd2LnN0YXRlRGlyO1xuICAgICAgICBjb25zdCB3cml0ZVN0cmVhbXMgPSB0aGlzLndyaXRlU3RyZWFtcztcbiAgICAgICAgY29uc3QgZmlsZSA9IGFyZ3YuZmlsZTtcbiAgICAgICAgY29uc3QgcGlwZWxpbmVJaWQgPSB0aGlzLnBpcGVsaW5lSWlkO1xuICAgICAgICBjb25zdCBmZXRjaEluY2x1ZGVzID0gYXJndi5mZXRjaEluY2x1ZGVzO1xuICAgICAgICBjb25zdCBnaXREYXRhID0gYXdhaXQgR2l0RGF0YS5pbml0KGN3ZCwgd3JpdGVTdHJlYW1zKTtcbiAgICAgICAgY29uc3QgdmFyaWFibGVzRnJvbUZpbGVzID0gYXdhaXQgVmFyaWFibGVzRnJvbUZpbGVzLmluaXQoYXJndiwgd3JpdGVTdHJlYW1zLCBnaXREYXRhKTtcbiAgICAgICAgY29uc3QgZW52TWF0Y2hlZFZhcmlhYmxlcyA9IFV0aWxzLmZpbmRFbnZNYXRjaGVkVmFyaWFibGVzKHZhcmlhYmxlc0Zyb21GaWxlcyk7XG4gICAgICAgIGNvbnN0IHByZWRlZmluZWRWYXJpYWJsZXMgPSBpbml0UHJlZGVmaW5lZFZhcmlhYmxlcyh7Z2l0RGF0YSwgYXJndiwgZW52TWF0Y2hlZFZhcmlhYmxlc30pO1xuICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSB7Li4ucHJlZGVmaW5lZFZhcmlhYmxlcywgLi4uZW52TWF0Y2hlZFZhcmlhYmxlcywgLi4uYXJndi52YXJpYWJsZX07XG4gICAgICAgIGNvbnN0IGV4cGFuZGVkID0gVXRpbHMuZXhwYW5kVmFyaWFibGVzKHZhcmlhYmxlcyk7XG5cbiAgICAgICAgbGV0IHlhbWxEYXRhTGlzdDogYW55W10gPSBbe3N0YWdlczogW1wiLnByZVwiLCBcImJ1aWxkXCIsIFwidGVzdFwiLCBcImRlcGxveVwiLCBcIi5wb3N0XCJdfV07XG4gICAgICAgIGNvbnN0IGdpdGxhYkNpRGF0YSA9IGF3YWl0IFBhcnNlci5sb2FkWWFtbChgJHtjd2R9LyR7ZmlsZX1gLCB7fSwgdGhpcy5leHBhbmRWYXJpYWJsZXMpO1xuXG4gICAgICAgIHlhbWxEYXRhTGlzdCA9IHlhbWxEYXRhTGlzdC5jb25jYXQoYXdhaXQgUGFyc2VySW5jbHVkZXMuaW5pdChnaXRsYWJDaURhdGEsIHthcmd2LCBjd2QsIHN0YXRlRGlyLCB3cml0ZVN0cmVhbXMsIGdpdERhdGEsIGZldGNoSW5jbHVkZXMsIHZhcmlhYmxlczogZXhwYW5kZWQsIGV4cGFuZFZhcmlhYmxlczogdGhpcy5leHBhbmRWYXJpYWJsZXMsIG1heGltdW1JbmNsdWRlczogYXJndi5tYXhpbXVtSW5jbHVkZXN9KSk7XG4gICAgICAgIFBhcnNlckluY2x1ZGVzLnJlc2V0Q291bnQoKTtcblxuICAgICAgICBjb25zdCBnaXRsYWJDaUxvY2FsRGF0YSA9IGF3YWl0IFBhcnNlci5sb2FkWWFtbChgJHtjd2R9Ly5naXRsYWItY2ktbG9jYWwueW1sYCwge30sIHRoaXMuZXhwYW5kVmFyaWFibGVzKTtcbiAgICAgICAgeWFtbERhdGFMaXN0ID0geWFtbERhdGFMaXN0LmNvbmNhdChhd2FpdCBQYXJzZXJJbmNsdWRlcy5pbml0KGdpdGxhYkNpTG9jYWxEYXRhLCB7YXJndiwgY3dkLCBzdGF0ZURpciwgd3JpdGVTdHJlYW1zLCBnaXREYXRhLCBmZXRjaEluY2x1ZGVzLCB2YXJpYWJsZXM6IGV4cGFuZGVkLCBleHBhbmRWYXJpYWJsZXM6IHRoaXMuZXhwYW5kVmFyaWFibGVzLCBtYXhpbXVtSW5jbHVkZXM6IGFyZ3YubWF4aW11bUluY2x1ZGVzfSkpO1xuICAgICAgICBQYXJzZXJJbmNsdWRlcy5yZXNldENvdW50KCk7XG5cbiAgICAgICAgY29uc3QgZ2l0bGFiRGF0YTogYW55ID0gZGVlcEV4dGVuZCh7fSwgLi4ueWFtbERhdGFMaXN0KTtcblxuICAgICAgICAvLyBFeHBhbmQgdmFyaW91cyBmaWVsZHMgaW4gZ2l0bGFiRGF0YVxuICAgICAgICBEYXRhRXhwYW5kZXIuam9iRXh0ZW5kcyhnaXRsYWJEYXRhKTtcbiAgICAgICAgRGF0YUV4cGFuZGVyLnJlZmVyZW5jZShnaXRsYWJEYXRhLCBnaXRsYWJEYXRhKTtcbiAgICAgICAgRGF0YUV4cGFuZGVyLmZsYXR0ZW5MaXN0cyhnaXRsYWJEYXRhKTtcbiAgICAgICAgRGF0YUV4cGFuZGVyLnRyYW5zZm9ybURlcHJlY2F0ZWRHbG9iYWxEZWZhdWx0U3ludGF4KGdpdGxhYkRhdGEpO1xuICAgICAgICBEYXRhRXhwYW5kZXIuaW5oZXJpdERlZmF1bHQoZ2l0bGFiRGF0YSk7XG4gICAgICAgIERhdGFFeHBhbmRlci5ub3JtYWxpemUoZ2l0bGFiRGF0YSk7XG5cbiAgICAgICAgYXNzZXJ0KGdpdGxhYkRhdGEuc3RhZ2VzICYmIEFycmF5LmlzQXJyYXkoZ2l0bGFiRGF0YS5zdGFnZXMpLCBjaGFsa2B7eWVsbG93IHN0YWdlczp9IG11c3QgYmUgYW4gYXJyYXlgKTtcbiAgICAgICAgaWYgKCFnaXRsYWJEYXRhLnN0YWdlcy5pbmNsdWRlcyhcIi5wcmVcIikpIHtcbiAgICAgICAgICAgIGdpdGxhYkRhdGEuc3RhZ2VzLnVuc2hpZnQoXCIucHJlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZ2l0bGFiRGF0YS5zdGFnZXMuaW5jbHVkZXMoXCIucG9zdFwiKSkge1xuICAgICAgICAgICAgZ2l0bGFiRGF0YS5zdGFnZXMucHVzaChcIi5wb3N0XCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3N0YWdlcyA9IGdpdGxhYkRhdGEuc3RhZ2VzO1xuXG4gICAgICAgIC8vIENoZWNrIGpvYiB2YXJpYWJsZXMgZm9yIGludmFsaWQgaGFzaCBvZiBrZXkgdmFsdWUgcGFpcnMsIGFuZCBjYXN0IG51bWJlcnMgdG8gc3RyaW5nc1xuICAgICAgICBVdGlscy5mb3JFYWNoUmVhbEpvYihnaXRsYWJEYXRhLCAoam9iTmFtZSwgam9iRGF0YSkgPT4ge1xuICAgICAgICAgICAgYXNzZXJ0KGpvYkRhdGEud2hlbiAhPT0gXCJuZXZlclwiLFxuICAgICAgICAgICAgICAgIGNoYWxrYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogam9iczoke2pvYk5hbWV9IHdoZW46bmV2ZXIgY2FuIG9ubHkgYmUgdXNlZCBpbiBhIHJ1bGVzIHNlY3Rpb24gb3Igd29ya2Zsb3c6cnVsZXNgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGpvYkRhdGEudmFyaWFibGVzID8/IHt9KSkge1xuICAgICAgICAgICAgICAgIGpvYkRhdGEudmFyaWFibGVzW2tleV0gPSBVdGlscy5ub3JtYWxpemVWYXJpYWJsZXModmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IChqb2JEYXRhLnNlcnZpY2VzID8/IFtdKS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZpY2UgPSBqb2JEYXRhLnNlcnZpY2VzW2ldO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNlcnZpY2UudmFyaWFibGVzIHx8IHt9KSkge1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFsa2B7Ymx1ZUJyaWdodCAke2pvYk5hbWV9LnNlcnZpY2VzWyR7aX1dfSBoYXMgaW52YWxpZCB2YXJpYWJsZXMgaGFzaCBvZiBrZXkgdmFsdWUgcGFpcnMuICR7a2V5fT0ke3ZhbHVlfWAsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGpvYkRhdGEuc2VydmljZXNbaV0udmFyaWFibGVzW2tleV0gPSBTdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fZ2l0bGFiRGF0YSA9IGdpdGxhYkRhdGE7XG5cbiAgICAgICAgLy8gR2VuZXJhdGUgam9icyBhbmQgcHV0IHRoZW0gaW50byBzdGFnZXNcbiAgICAgICAgVXRpbHMuZm9yRWFjaFJlYWxKb2IoZ2l0bGFiRGF0YSwgKGpvYk5hbWUsIGpvYkRhdGEpID0+IHtcbiAgICAgICAgICAgIGFzc2VydChnaXREYXRhICE9IG51bGwsIFwiZ2l0RGF0YSBtdXN0IGJlIHNldFwiKTtcbiAgICAgICAgICAgIGFzc2VydCh2YXJpYWJsZXNGcm9tRmlsZXMgIT0gbnVsbCwgXCJob21lVmFyaWFibGVzIG11c3QgYmUgc2V0XCIpO1xuXG4gICAgICAgICAgICBsZXQgbm9kZUluZGV4ID0gMTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFsbGVsTWF0cml4VmFyaWFibGVzTGlzdCA9IHBhcmFsbGVsLm1hdHJpeFZhcmlhYmxlc0xpc3Qoam9iRGF0YSwgam9iTmFtZSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhcmFsbGVsTWF0cml4VmFyaWFibGVzIG9mIHBhcmFsbGVsTWF0cml4VmFyaWFibGVzTGlzdCkge1xuICAgICAgICAgICAgICAgIGxldCBtYXRyaXhKb2JOYW1lID0gam9iTmFtZTtcbiAgICAgICAgICAgICAgICBpZiAocGFyYWxsZWxNYXRyaXhWYXJpYWJsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF0cml4Sm9iTmFtZSA9IGAke2pvYk5hbWV9OiBbJHtPYmplY3QudmFsdWVzKHBhcmFsbGVsTWF0cml4VmFyaWFibGVzID8/IFtdKS5qb2luKFwiLFwiKX1dYDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFsbGVsLmlzUGxhaW5QYXJhbGxlbChqb2JEYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBtYXRyaXhKb2JOYW1lID0gYCR7am9iTmFtZX06IFske25vZGVJbmRleH0vJHtwYXJhbGxlbE1hdHJpeFZhcmlhYmxlc0xpc3QubGVuZ3RofV1gO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGpvYiA9IG5ldyBKb2Ioe1xuICAgICAgICAgICAgICAgICAgICBhcmd2LFxuICAgICAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGpvYkRhdGEsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IG1hdHJpeEpvYk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGJhc2VOYW1lOiBqb2JOYW1lLFxuICAgICAgICAgICAgICAgICAgICBnbG9iYWxWYXJpYWJsZXM6IGdpdGxhYkRhdGEudmFyaWFibGVzLFxuICAgICAgICAgICAgICAgICAgICBwaXBlbGluZUlpZDogcGlwZWxpbmVJaWQsXG4gICAgICAgICAgICAgICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXM6IHsuLi5wcmVkZWZpbmVkVmFyaWFibGVzfSwgLy8gTk9URTogcGFzcyBieSB2YWx1ZSBiZWNhdXNlIHByZWRlZmluZWRWYXJpYWJsZXMgaXMgbXV0YXRlZCBpbiB0aGUgY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgZ2l0RGF0YSxcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzRnJvbUZpbGVzLFxuICAgICAgICAgICAgICAgICAgICBtYXRyaXhWYXJpYWJsZXM6IHBhcmFsbGVsTWF0cml4VmFyaWFibGVzLFxuICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXg6IChqb2JEYXRhLnBhcmFsbGVsICE9IG51bGwpID8gbm9kZUluZGV4IDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbm9kZXNUb3RhbDogcGFyYWxsZWxNYXRyaXhWYXJpYWJsZXNMaXN0Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgZXhwYW5kVmFyaWFibGVzOiB0aGlzLmV4cGFuZFZhcmlhYmxlcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZFN0YWdlID0gdGhpcy5zdGFnZXMuaW5jbHVkZXMoam9iLnN0YWdlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZm91bmRTdGFnZSwgY2hhbGtge3llbGxvdyBzdGFnZToke2pvYi5zdGFnZX19IG5vdCBmb3VuZCBmb3Ige2JsdWVCcmlnaHQgJHtqb2IubmFtZX19YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5qb2JzLnB1c2goam9iKTtcbiAgICAgICAgICAgICAgICBub2RlSW5kZXgrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQWRkIHNvbWUgcGFkZGluZyBzbyB0aGF0IGpvYiBsb2dzIGFyZSBuaWNlbHkgYWxpZ25lZFxuICAgICAgICAvLyBhbGxvdyB1c2VycyB0byBvdmVycmlkZSB0aGlzIGluIGNhc2UgdGhleSBoYXZlIHJlYWxseSBsb25nIGpvYiBuYW1lIChzZWUgIzg0MClcbiAgICAgICAgaWYgKHRoaXMuYXJndi5tYXhKb2JOYW1lUGFkZGluZyAhPT0gbnVsbCAmJiB0aGlzLmFyZ3YubWF4Sm9iTmFtZVBhZGRpbmcgPD0gMCkge1xuICAgICAgICAgICAgdGhpcy5fam9iTmFtZVBhZCA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBqb2JzID0gdGhpcy5hcmd2LmpvYi5sZW5ndGggIT09IDAgPyB0aGlzLmFyZ3Yuam9iIDogdGhpcy5qb2JzO1xuICAgICAgICAgICAgam9icy5mb3JFYWNoKChqb2IpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgam9iTmVlZHNMZW5ndGg6IG51bWJlcltdID0gW107XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hcmd2Lm5lZWRzICYmIHRoaXMuYXJndi5qb2IubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuam9icy5maW5kKGogPT4gai5iYXNlTmFtZSA9PT0gam9iKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kPy5uZWVkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgam9iTmVlZHNMZW5ndGggPSBmb3VuZC5uZWVkcy5tYXAoZiA9PiBmLmpvYi5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGpvYkxlbmd0aCA9IHR5cGVvZiBqb2IgPT0gXCJzdHJpbmdcIiA/IGpvYi5sZW5ndGggOiBqb2IubmFtZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy5fam9iTmFtZVBhZCA9IE1hdGgubWF4KGpvYkxlbmd0aCwgdGhpcy5fam9iTmFtZVBhZCA/PyAwLCAuLi5qb2JOZWVkc0xlbmd0aCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFyZ3YubWF4Sm9iTmFtZVBhZGRpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9qb2JOYW1lUGFkID0gTWF0aC5taW4odGhpcy5hcmd2Lm1heEpvYk5hbWVQYWRkaW5nID8/IDAsIHRoaXMuX2pvYk5hbWVQYWQgPz8gMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgam9iTmFtZVBhZCBvbiBhbGwgam9ic1xuICAgICAgICB0aGlzLmpvYnMuZm9yRWFjaCgoam9iKSA9PiB7XG4gICAgICAgICAgICBqb2Iuam9iTmFtZVBhZCA9IHRoaXMuam9iTmFtZVBhZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gR2VuZXJhdGUgcHJvZHVjZXJzIGZvciBlYWNoIGpvYlxuICAgICAgICB0aGlzLmpvYnMuZm9yRWFjaCgoam9iKSA9PiB7XG4gICAgICAgICAgICBqb2IucHJvZHVjZXJzID0gUHJvZHVjZXJzLmluaXQodGhpcy5qb2JzLCB0aGlzLnN0YWdlcywgam9iKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGxvYWRZYW1sIChmaWxlUGF0aDogc3RyaW5nLCBjdHg6IGFueSA9IHt9LCBleHBhbmRWYXJpYWJsZXM6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgeW1sUGF0aCA9IGAke2ZpbGVQYXRofWA7XG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyh5bWxQYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShgJHtmaWxlUGF0aH1gLCBcInV0ZjhcIik7XG4gICAgICAgIGNvbnN0IGZpbGVTcGxpdCA9IGZpbGVDb250ZW50LnNwbGl0KC9cXHI/XFxuL2cpO1xuICAgICAgICBjb25zdCBmaWxlU3BsaXRDbG9uZSA9IGZpbGVTcGxpdC5zbGljZSgpO1xuXG4gICAgICAgIGxldCBpbnRlcmFjdGl2ZU1hdGNoID0gbnVsbDtcbiAgICAgICAgbGV0IGRlc2NyaXB0aW9uTWF0Y2ggPSBudWxsO1xuICAgICAgICBsZXQgaW5qZWN0U1NIQWdlbnQgPSBudWxsO1xuICAgICAgICBsZXQgbm9BcnRpZmFjdHNUb1NvdXJjZU1hdGNoID0gbnVsbDtcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgaWYgKGV4cGFuZFZhcmlhYmxlcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGZpbGVTcGxpdCkge1xuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlTWF0Y2ggPSBpbnRlcmFjdGl2ZU1hdGNoID8/IC8jXFxzP0BcXHM/W0lpXW50ZXJhY3RpdmUvLmV4ZWMobGluZSk7XG4gICAgICAgICAgICAgICAgaW5qZWN0U1NIQWdlbnQgPSBpbmplY3RTU0hBZ2VudCA/PyAvI1xccz9AXFxzP1tJaV1uamVjdFNTSEFnZW50Ly5leGVjKGxpbmUpO1xuICAgICAgICAgICAgICAgIG5vQXJ0aWZhY3RzVG9Tb3VyY2VNYXRjaCA9IG5vQXJ0aWZhY3RzVG9Tb3VyY2VNYXRjaCA/PyAvI1xccz9AXFxzP05vQXJ0aWZhY3RzVG9Tb3VyY2UvaS5leGVjKGxpbmUpO1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uTWF0Y2ggPSBkZXNjcmlwdGlvbk1hdGNoID8/IC8jXFxzP0BcXHM/W0RkXWVzY3JpcHRpb24gKD88ZGVzY3JpcHRpb24+LiopLy5leGVjKGxpbmUpO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgam9iTWF0Y2ggPSAvXFx3Oi8uZXhlYyhsaW5lKTtcbiAgICAgICAgICAgICAgICBpZiAoam9iTWF0Y2ggJiYgKGludGVyYWN0aXZlTWF0Y2ggfHwgZGVzY3JpcHRpb25NYXRjaCB8fCBpbmplY3RTU0hBZ2VudCB8fCBub0FydGlmYWN0c1RvU291cmNlTWF0Y2gpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnRlcmFjdGl2ZU1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlU3BsaXRDbG9uZS5zcGxpY2UoaW5kZXggKyAxLCAwLCBcIiAgZ2NsSW50ZXJhY3RpdmU6IHRydWVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmplY3RTU0hBZ2VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVNwbGl0Q2xvbmUuc3BsaWNlKGluZGV4ICsgMSwgMCwgXCIgIGdjbEluamVjdFNTSEFnZW50OiB0cnVlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobm9BcnRpZmFjdHNUb1NvdXJjZU1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlU3BsaXRDbG9uZS5zcGxpY2UoaW5kZXggKyAxLCAwLCBcIiAgZ2NsQXJ0aWZhY3RzVG9Tb3VyY2U6IGZhbHNlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRpb25NYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVNwbGl0Q2xvbmUuc3BsaWNlKGluZGV4ICsgMSwgMCwgYCAgZ2NsRGVzY3JpcHRpb246ICR7ZGVzY3JpcHRpb25NYXRjaD8uZ3JvdXBzPy5kZXNjcmlwdGlvbiA/PyBcIlwifWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZU1hdGNoID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb25NYXRjaCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGluamVjdFNTSEFnZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgbm9BcnRpZmFjdHNUb1NvdXJjZU1hdGNoID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZVR5cGUgPSBuZXcgeWFtbC5UeXBlKFwiIXJlZmVyZW5jZVwiLCB7XG4gICAgICAgICAgICBraW5kOiBcInNlcXVlbmNlXCIsXG4gICAgICAgICAgICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtyZWZlcmVuY2VEYXRhOiBkYXRhfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzY2hlbWEgPSB5YW1sLkRFRkFVTFRfU0NIRU1BLmV4dGVuZChbcmVmZXJlbmNlVHlwZV0pO1xuICAgICAgICBsZXQgZmlsZURhdGE7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZpbGVEYXRhID0geWFtbC5sb2FkQWxsKGZpbGVTcGxpdENsb25lLmpvaW4oXCJcXG5cIiksIG51bGwsIHtzY2hlbWF9KSBhcyBhbnlbXTtcbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIHlhbWwuWUFNTEV4Y2VwdGlvbiAmJiBlLnJlYXNvbiA9PT0gXCJkdXBsaWNhdGVkIG1hcHBpbmcga2V5XCIpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsa2B7YmxhY2suYmdZZWxsb3dCcmlnaHQgIFdBUk4gfSBkdXBsaWNhdGVkIG1hcHBpbmcga2V5IGRldGVjdGVkISBWYWx1ZXMgd2lsbCBiZSBvdmVyd3JpdHRlbiFgKTtcbiAgICAgICAgICAgICAgICBmaWxlRGF0YSA9IHlhbWwubG9hZEFsbChmaWxlU3BsaXRDbG9uZS5qb2luKFwiXFxuXCIpLCBudWxsLCB7c2NoZW1hLCBqc29uOiB0cnVlfSkgYXMgYW55W107XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZURhdGEubGVuZ3RoIDw9IDEpIHJldHVybiBmaWxlRGF0YVswXTtcblxuICAgICAgICBpZiAoaXNHaXRsYWJTcGVjRmlsZShmaWxlRGF0YVswXSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0c1NwZWNpZmljYXRpb246IGFueSA9IGZpbGVEYXRhWzBdO1xuICAgICAgICAgICAgY29uc3QgdW5pbnRlcnBvbGF0ZWRDb25maWd1cmF0aW9uczogYW55ID0gZmlsZURhdGFbMV07XG5cbiAgICAgICAgICAgIGNvbnN0IGludGVycG9sYXRlZENvbmZpZ3VyYXRpb25zID0gSlNPTi5zdHJpbmdpZnkodW5pbnRlcnBvbGF0ZWRDb25maWd1cmF0aW9ucylcbiAgICAgICAgICAgICAgICAucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgLyg/PGZpcnN0Q2hhcj4uKT8oPzxzZWNvbmRDaGFyPi4pP1xcJFxcW1xcW1xccyppbnB1dHMuKD88aW50ZXJwb2xhdGlvbktleT5bXFx3LV0rKVxccypcXHw/XFxzKig/PGludGVycG9sYXRpb25GdW5jdGlvbnM+Lio/KVxccypcXF1cXF0oPzxsYXN0Q2hhcj5bXiRdKT8vZyAvLyBodHRwczovL3JlZ2V4ci5jb20vODFjMTZcbiAgICAgICAgICAgICAgICAgICAgLCAoXzogc3RyaW5nLCBmaXJzdENoYXI6IHN0cmluZywgc2Vjb25kQ2hhcjogc3RyaW5nLCBpbnRlcnBvbGF0aW9uS2V5OiBzdHJpbmcsIGludGVycG9sYXRpb25GdW5jdGlvbnM6IHN0cmluZywgbGFzdENoYXI6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29uZmlnRmlsZVBhdGggPSBwYXRoLnJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIGZpbGVQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGlvbktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnBvbGF0aW9uRnVuY3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0c1NwZWNpZmljYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3R4LFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Q2hhciA/Pz0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZENoYXIgPz89IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0Q2hhciA/Pz0gXCJcIjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qge2lucHV0VmFsdWUsIGlucHV0VHlwZX0gPSBwYXJzZUluY2x1ZGVJbnB1dHMoY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdFR3b0NoYXIgPSBmaXJzdENoYXIgKyBzZWNvbmRDaGFyO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChpbnB1dFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChzZWNvbmRDaGFyID09IFwiXFxcIlwiICYmIGxhc3RDaGFyID09IFwiXFxcIlwiKSAmJiBmaXJzdENoYXIgIT0gXCJcXFxcXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdENoYXIgKyBKU09OLnN0cmluZ2lmeShpbnB1dFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IFRoaXMgYmVoYXZlcyBzbGlnaHRseSBkaWZmZXJlbnRseSBmcm9tIGdpdGxhYi5jb20uIEkgY2FuJ3QgY29tZSB1cCB3aXRoIHByYWN0aWNhbCB1c2UgY2FzZSBzbyBpIGRvbid0IHRoaW5rIGl0J3Mgd29ydGggdGhlIGVmZm9ydCB0byBtaW1pYyB0aGlzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdFR3b0NoYXIgKyBKU09OLnN0cmluZ2lmeShKU09OLnN0cmluZ2lmeShpbnB1dFZhbHVlKSkuc2xpY2UoMSwgLTEpICsgbGFzdENoYXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RUd29DaGFyICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGlucHV0VmFsdWUpIC8vIGVuc3VyZSBhIHZhbGlkIGpzb24gc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKDEsIC0xKSArIC8vIHJlbW92ZSB0aGUgc3Vycm91bmRpbmcgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDaGFyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoc2Vjb25kQ2hhciA9PSBcIlxcXCJcIiAmJiBsYXN0Q2hhciA9PSBcIlxcXCJcIikgJiYgZmlyc3RDaGFyICE9IFwiXFxcXFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RDaGFyICsgaW5wdXRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RUd29DaGFyICsgaW5wdXRWYWx1ZSArIGxhc3RDaGFyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc3dpdGNoU3RhdGVtZW50RXhoYXVzdGl2ZUNoZWNrKGlucHV0VHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoaW50ZXJwb2xhdGVkQ29uZmlndXJhdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWxlRGF0YVswXTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGlzR2l0bGFiU3BlY0ZpbGUgKGZpbGVEYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gXCJzcGVjXCIgaW4gZmlsZURhdGE7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSW50ZXJwb2xhdGlvbktleSAoY3R4OiBhbnkpIHtcbiAgICBjb25zdCB7Y29uZmlnRmlsZVBhdGgsIGludGVycG9sYXRpb25LZXksIGlucHV0c1NwZWNpZmljYXRpb259ID0gY3R4O1xuICAgIGNvbnN0IGludmFsaWRJbnRlcnBvbGF0aW9uS2V5RXJyID0gY2hhbGtgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBcXGB7Ymx1ZUJyaWdodCAke2NvbmZpZ0ZpbGVQYXRofX1cXGA6IHVua25vd24gaW50ZXJwb2xhdGlvbiBrZXk6IFxcYCR7aW50ZXJwb2xhdGlvbktleX1cXGAuYDtcbiAgICBhc3NlcnQoaW5wdXRzU3BlY2lmaWNhdGlvbi5zcGVjLmlucHV0cz8uW2ludGVycG9sYXRpb25LZXldICE9PSB1bmRlZmluZWQsIGludmFsaWRJbnRlcnBvbGF0aW9uS2V5RXJyKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVJbnRlcnBvbGF0aW9uRnVuY3Rpb25zIChjdHg6IGFueSkge1xuICAgIGNvbnN0IHtpbnRlcnBvbGF0aW9uRnVuY3Rpb25zLCBjb25maWdGaWxlUGF0aH0gPSBjdHg7XG4gICAgaWYgKGludGVycG9sYXRpb25GdW5jdGlvbnMgIT0gXCJcIikge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsa2B7YmxhY2suYmdZZWxsb3dCcmlnaHQgIFdBUk4gfSBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9ucyBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCB2aWEgZ2l0bGFiLWNpLWxvY2FsLiBGdW5jdGlvbnMgd2lsbCBqdXN0IGJlIGEgbm8tb3AuYCk7XG4gICAgfVxuICAgIGFzc2VydChpbnRlcnBvbGF0aW9uRnVuY3Rpb25zLnNwbGl0KFwifFwiKS5sZW5ndGggPD0gTUFYX0ZVTkNUSU9OUywgY2hhbGtgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBcXGB7Ymx1ZUJyaWdodCAke2NvbmZpZ0ZpbGVQYXRofX1cXGA6IHRvbyBtYW55IGZ1bmN0aW9ucyBpbiBpbnRlcnBvbGF0aW9uIGJsb2NrLmApO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUlucHV0IChjdHg6IGFueSkge1xuICAgIGNvbnN0IHtjb25maWdGaWxlUGF0aCwgaW50ZXJwb2xhdGlvbktleSwgaW5wdXRzU3BlY2lmaWNhdGlvbn0gPSBjdHg7XG4gICAgY29uc3QgaW5wdXRWYWx1ZSA9IGdldElucHV0VmFsdWUoY3R4KTtcblxuICAgIGNvbnN0IG9wdGlvbnMgPSBpbnB1dHNTcGVjaWZpY2F0aW9uLnNwZWMuaW5wdXRzW2ludGVycG9sYXRpb25LZXldPy5vcHRpb25zO1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgIGFzc2VydChvcHRpb25zLmluY2x1ZGVzKGlucHV0VmFsdWUpLFxuICAgICAgICAgICAgY2hhbGtgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBcXGB7Ymx1ZUJyaWdodCAke2NvbmZpZ0ZpbGVQYXRofX1cXGA6IFxcYHtibHVlQnJpZ2h0ICR7aW50ZXJwb2xhdGlvbktleX19XFxgIGlucHV0OiBcXGB7Ymx1ZUJyaWdodCAke2lucHV0VmFsdWV9fVxcYCBjYW5ub3QgYmUgdXNlZCBiZWNhdXNlIGl0IGlzIG5vdCBpbiB0aGUgbGlzdCBvZiBhbGxvd2VkIG9wdGlvbnMuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhwZWN0ZWRJbnB1dFR5cGUgPSBnZXRFeHBlY3RlZElucHV0VHlwZShjdHgpO1xuICAgIGFzc2VydChJTkNMVURFX0lOUFVUU19TVVBQT1JURURfVFlQRVMuaW5jbHVkZXMoZXhwZWN0ZWRJbnB1dFR5cGUpLFxuICAgICAgICBjaGFsa2BUaGlzIEdpdExhYiBDSSBjb25maWd1cmF0aW9uIGlzIGludmFsaWQ6IFxcYHtibHVlQnJpZ2h0ICR7Y29uZmlnRmlsZVBhdGh9fVxcYDogaGVhZGVyOnNwZWM6aW5wdXRzOntibHVlQnJpZ2h0ICR7aW50ZXJwb2xhdGlvbktleX19IGlucHV0IHR5cGUgdW5rbm93biB2YWx1ZToge2JsdWVCcmlnaHQgJHtleHBlY3RlZElucHV0VHlwZX19LmApO1xuXG4gICAgY29uc3QgaW5wdXRUeXBlID0gQXJyYXkuaXNBcnJheShpbnB1dFZhbHVlKSA/IFwiYXJyYXlcIiA6IHR5cGVvZiBpbnB1dFZhbHVlO1xuICAgIGFzc2VydChpbnB1dFR5cGUgPT09IGV4cGVjdGVkSW5wdXRUeXBlLFxuICAgICAgICBjaGFsa2BUaGlzIEdpdExhYiBDSSBjb25maWd1cmF0aW9uIGlzIGludmFsaWQ6IFxcYHtibHVlQnJpZ2h0ICR7Y29uZmlnRmlsZVBhdGh9fVxcYDogXFxge2JsdWVCcmlnaHQgJHtpbnRlcnBvbGF0aW9uS2V5fX1cXGAgaW5wdXQ6IHByb3ZpZGVkIHZhbHVlIGlzIG5vdCBhIHtibHVlQnJpZ2h0ICR7ZXhwZWN0ZWRJbnB1dFR5cGV9fS5gKTtcblxuICAgIGNvbnN0IHJlZ2V4ID0gaW5wdXRzU3BlY2lmaWNhdGlvbi5zcGVjLmlucHV0c1tpbnRlcnBvbGF0aW9uS2V5XT8ucmVnZXg7XG4gICAgaWYgKHJlZ2V4KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrYHtibGFjay5iZ1llbGxvd0JyaWdodCAgV0FSTiB9IHNwZWM6aW5wdXRzOnJlZ2V4IGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIHZpYSBnaXRsYWItY2ktbG9jYWwuIFRoaXMgd2lsbCBqdXN0IGJlIGEgbm8tb3AuYCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUluY2x1ZGVJbnB1dHMgKGN0eDogYW55KToge2lucHV0VmFsdWU6IGFueTsgaW5wdXRUeXBlOiBJbnB1dFR5cGV9IHtcbiAgICB2YWxpZGF0ZUludGVycG9sYXRpb25LZXkoY3R4KTtcbiAgICB2YWxpZGF0ZUludGVycG9sYXRpb25GdW5jdGlvbnMoY3R4KTtcbiAgICB2YWxpZGF0ZUlucHV0KGN0eCk7XG4gICAgcmV0dXJuIHtpbnB1dFZhbHVlOiBnZXRJbnB1dFZhbHVlKGN0eCksIGlucHV0VHlwZTogZ2V0RXhwZWN0ZWRJbnB1dFR5cGUoY3R4KX07XG59XG5cbmZ1bmN0aW9uIGdldElucHV0VmFsdWUgKGN0eDogYW55KSB7XG4gICAgY29uc3Qge2lucHV0cywgaW50ZXJwb2xhdGlvbktleSwgY29uZmlnRmlsZVBhdGgsIGlucHV0c1NwZWNpZmljYXRpb259ID0gY3R4O1xuICAgIGNvbnN0IGlucHV0VmFsdWUgPSBpbnB1dHM/LltpbnRlcnBvbGF0aW9uS2V5XSA/P1xuICAgICAgICBpbnB1dHNTcGVjaWZpY2F0aW9uLnNwZWMuaW5wdXRzW2ludGVycG9sYXRpb25LZXldPy5kZWZhdWx0O1xuICAgIGFzc2VydChpbnB1dFZhbHVlICE9PSB1bmRlZmluZWQsIGNoYWxrYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogXFxge2JsdWVCcmlnaHQgJHtjb25maWdGaWxlUGF0aH19XFxgOiBcXGB7Ymx1ZUJyaWdodCAke2ludGVycG9sYXRpb25LZXl9fVxcYCBpbnB1dDogcmVxdWlyZWQgdmFsdWUgaGFzIG5vdCBiZWVuIHByb3ZpZGVkLmApO1xuICAgIHJldHVybiBpbnB1dFZhbHVlO1xufVxuXG5mdW5jdGlvbiBnZXRFeHBlY3RlZElucHV0VHlwZSAoY3R4OiBhbnkpOiBJbnB1dFR5cGUge1xuICAgIGNvbnN0IHtpbnRlcnBvbGF0aW9uS2V5LCBpbnB1dHNTcGVjaWZpY2F0aW9ufSA9IGN0eDtcbiAgICByZXR1cm4gaW5wdXRzU3BlY2lmaWNhdGlvbi5zcGVjLmlucHV0c1tpbnRlcnBvbGF0aW9uS2V5XT8udHlwZSB8fCBcInN0cmluZ1wiO1xufVxuIl19