3b26695 ←dfab6bfantonApr 11, 2026 api

edit main.js via macOS

M /sublimated/undefined +38 -12
28 unmodified lines
29
30// src/api.ts
31var import_obsidian = require("obsidian");
32var API_BASE = "https://api.sublimated.com";
33var AuthRequiredError = class extends Error {
34 constructor(status) {
35 super(`auth required (${status})`);
36 this.status = status;
37 this.name = "AuthRequiredError";
38 }
39};
40var SublimatedApi = class {
41 constructor(token) {
42 this.token = token;
43 }
5 unmodified lines
49 headers.Authorization = `Bearer ${this.token}`;
50 }
51 const response = await (0, import_obsidian.requestUrl)({
52 url: `${API_BASE}${path}`,
46 headers
53 headers,
54 throw: false
55 });
56 if (response.status === 401 || response.status === 403) {
57 throw new AuthRequiredError(response.status);
58 }
59 if (response.status >= 400) {
60 throw new Error(
61 `API error ${response.status}: ${response.text}`
62 );
63 }
53 return response.json;
64 const body = response.json;
65 if (!body.ok || body.data === void 0) {
66 const msg = body.error?.message || body.error?.type || "unknown error";
67 throw new Error(`API error: ${msg}`);
68 }
69 return body.data;
70 }
71 async getVersions(spaceSlug, itemId) {
56 const data = await this.request(
72 const raw = await this.request(
73 `/v1/spaces/${encodeURIComponent(spaceSlug)}/items/${encodeURIComponent(itemId)}/versions`
74 );
59 return data.versions;
75 return raw.map(mapVersion);
76 }
77 async testConnection() {
78 try {
79 const data = await this.request(
7 unmodified lines
87 };
88 }
89 }
90};
91function mapVersion(r) {
92 const author = r.actors.find((a) => a.role === "author") ?? r.actors[0] ?? null;
93 return {
94 id: r.id,
95 number: r.version,
96 authorName: author?.name ?? author?.username ?? "unknown",
97 authorType: author?.actor_type ?? "person",
98 message: r.message,
99 createdAt: r.created_at
100 };
101}
102
103// src/settings.ts
104var DEFAULT_SETTINGS = {
105 apiToken: "",
190 unmodified lines
296 cls: "sbl-version-empty"
297 });
298 return;
299 }
273 const isPublic = meta.visibility === "public";
274 if (!this.plugin.settings.apiToken && !isPublic) {
275 contentEl.createEl("p", {
276 text: "API token required for version history.",
277 cls: "sbl-version-empty"
278 });
279 contentEl.createEl("p", {
280 text: "Configure in Settings \u2192 sublimated",
281 cls: "sbl-version-hint"
282 });
283 return;
284 }
300 contentEl.createEl("h4", {
301 text: activeFile.name,
302 cls: "sbl-version-filename"
303 });
26 unmodified lines
330 }
331 }
332 } catch (e) {
333 loading.remove();
334 if (e instanceof AuthRequiredError) {
335 contentEl.createEl("p", {
336 text: "This file is private \u2014 add an API token to view version history.",
337 cls: "sbl-version-empty"
338 });
339 contentEl.createEl("p", {
340 text: "Configure in Settings \u2192 sublimated",
341 cls: "sbl-version-hint"
342 });
343 return;
344 }
345 contentEl.createEl("p", {
346 text: `Error: ${e instanceof Error ? e.message : "Unknown"}`,
347 cls: "sbl-version-error"
348 });
347 unmodified lines
696 default:
697 return "";
698 }
699}
674//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgInNyYy9hcGkudHMiLCAic3JjL3hhdHRyLnRzIiwgInNyYy92ZXJzaW9uLXZpZXcudHMiLCAic3JjL3dlbGNvbWUtbW9kYWwudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7XG5cdE5vdGljZSxcblx0UGx1Z2luLFxuXHRXb3Jrc3BhY2VMZWFmLFxuXHRub3JtYWxpemVQYXRoLFxufSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7XG5cdHR5cGUgU3VibGltYXRlZFNldHRpbmdzLFxuXHRERUZBVUxUX1NFVFRJTkdTLFxuXHRTdWJsaW1hdGVkU2V0dGluZ1RhYixcbn0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcbmltcG9ydCB7IHR5cGUgRmlsZU1ldGFkYXRhLCByZWFkRmlsZU1ldGFkYXRhLCBpc01hY09TIH0gZnJvbSBcIi4veGF0dHJcIjtcbmltcG9ydCB7IFZlcnNpb25WaWV3LCBWRVJTSU9OX1ZJRVdfVFlQRSB9IGZyb20gXCIuL3ZlcnNpb24tdmlld1wiO1xuaW1wb3J0IHsgV2VsY29tZU1vZGFsIH0gZnJvbSBcIi4vd2VsY29tZS1tb2RhbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdWJsaW1hdGVkUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcblx0c2V0dGluZ3M6IFN1YmxpbWF0ZWRTZXR0aW5ncyA9IERFRkFVTFRfU0VUVElOR1M7XG5cdGxhc3RNZXRhZGF0YTogRmlsZU1ldGFkYXRhIHwgbnVsbCA9IG51bGw7XG5cblx0cHJpdmF0ZSBzdGF0dXNCYXJFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuXHRhc3luYyBvbmxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgdGhpcy5sb2FkU2V0dGluZ3MoKTtcblxuXHRcdC8vIHN0YXR1cyBiYXJcblx0XHR0aGlzLnN0YXR1c0JhckVsID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XG5cdFx0dGhpcy5zdGF0dXNCYXJFbC5hZGRDbGFzcyhcInNibC1zdGF0dXMtYmFyXCIpO1xuXHRcdHRoaXMuc3RhdHVzQmFyRWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+XG5cdFx0XHR0aGlzLm9wZW5DdXJyZW50RmlsZU9uV2ViKClcblx0XHQpO1xuXHRcdHRoaXMudXBkYXRlU3RhdHVzQmFyKG51bGwpO1xuXG5cdFx0Ly8gcmVnaXN0ZXIgdmVyc2lvbiBoaXN0b3J5IHZpZXdcblx0XHR0aGlzLnJlZ2lzdGVyVmlldyhcblx0XHRcdFZFUlNJT05fVklFV19UWVBFLFxuXHRcdFx0KGxlYWYpID0+IG5ldyBWZXJzaW9uVmlldyhsZWFmLCB0aGlzKVxuXHRcdCk7XG5cblx0XHQvLyBjb21tYW5kc1xuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XG5cdFx0XHRpZDogXCJvcGVuLW9uLXdlYlwiLFxuXHRcdFx0bmFtZTogXCJPcGVuIG9uIHN1YmxpbWF0ZWQuY29tXCIsXG5cdFx0XHRjYWxsYmFjazogKCkgPT4gdGhpcy5vcGVuQ3VycmVudEZpbGVPbldlYigpLFxuXHRcdH0pO1xuXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcblx0XHRcdGlkOiBcInNob3ctdmVyc2lvbnNcIixcblx0XHRcdG5hbWU6IFwiU2hvdyB2ZXJzaW9uc1wiLFxuXHRcdFx0Y2FsbGJhY2s6ICgpID0+IHRoaXMuYWN0aXZhdGVWZXJzaW9uVmlldygpLFxuXHRcdH0pO1xuXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcblx0XHRcdGlkOiBcImNvcHktd2ViLWxpbmtcIixcblx0XHRcdG5hbWU6IFwiQ29weSB3ZWIgbGlua1wiLFxuXHRcdFx0Y2FsbGJhY2s6ICgpID0+IHRoaXMuY29weVdlYkxpbmsoKSxcblx0XHR9KTtcblxuXHRcdC8vIHJpYmJvbiBpY29uIGZvciB2ZXJzaW9uIHNpZGViYXJcblx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJoaXN0b3J5XCIsIFwic3VibGltYXRlZCB2ZXJzaW9uc1wiLCAoKSA9PiB7XG5cdFx0XHR0aGlzLmFjdGl2YXRlVmVyc2lvblZpZXcoKTtcblx0XHR9KTtcblxuXHRcdC8vIFVSSSBoYW5kbGVyOiBvYnNpZGlhbjovL3N1YmxpbWF0ZWQ/YWN0aW9uPW9wZW4mZmlsZT1wYXRoL3RvL25vdGUubWRcblx0XHR0aGlzLnJlZ2lzdGVyT2JzaWRpYW5Qcm90b2NvbEhhbmRsZXIoXG5cdFx0XHRcInN1YmxpbWF0ZWRcIixcblx0XHRcdChwYXJhbXMpID0+IHRoaXMuaGFuZGxlVXJpKHBhcmFtcylcblx0XHQpO1xuXG5cdFx0Ly8gc2V0dGluZ3MgdGFiXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBTdWJsaW1hdGVkU2V0dGluZ1RhYih0aGlzLmFwcCwgdGhpcykpO1xuXG5cdFx0Ly8gdXBkYXRlIHN0YXR1cyBiYXIgd2hlbiBhY3RpdmUgZmlsZSBjaGFuZ2VzXG5cdFx0dGhpcy5yZWdpc3RlckV2ZW50KFxuXHRcdFx0dGhpcy5hcHAud29ya3NwYWNlLm9uKFwiYWN0aXZlLWxlYWYtY2hhbmdlXCIsICgpID0+IHtcblx0XHRcdFx0dGhpcy5yZWZyZXNoTWV0YWRhdGEoKTtcblx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdC8vIGluaXRpYWwgbWV0YWRhdGEgcmVhZFxuXHRcdHRoaXMucmVmcmVzaE1ldGFkYXRhKCk7XG5cblx0XHQvLyB3ZWxjb21lIG1vZGFsIG9uIGZpcnN0IGluc3RhbGxcblx0XHRpZiAoIXRoaXMuc2V0dGluZ3MuaGFzU2VlbldlbGNvbWUpIHtcblx0XHRcdG5ldyBXZWxjb21lTW9kYWwodGhpcy5hcHApLm9wZW4oKTtcblx0XHRcdHRoaXMuc2V0dGluZ3MuaGFzU2VlbldlbGNvbWUgPSB0cnVlO1xuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcblx0XHR9XG5cdH1cblxuXHRvbnVubG9hZCgpOiB2b2lkIHtcblx0XHR0aGlzLmFwcC53b3Jrc3BhY2UuZGV0YWNoTGVhdmVzT2ZUeXBlKFZFUlNJT05fVklFV19UWVBFKTtcblx0fVxuXG5cdGFzeW5jIGxvYWRTZXR0aW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbihcblx0XHRcdHt9LFxuXHRcdFx0REVGQVVMVF9TRVRUSU5HUyxcblx0XHRcdGF3YWl0IHRoaXMubG9hZERhdGEoKVxuXHRcdCk7XG5cdH1cblxuXHRhc3luYyBzYXZlU2V0dGluZ3MoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcblx0fVxuXG5cdC8vIGRldGVjdCB3b3Jrc3BhY2UgZnJvbSB4YXR0cnMgb24gdGhlIGN1cnJlbnRseSBhY3RpdmUgZmlsZS5cblx0Ly8gZXZlcnkgc3luY2VkIGZpbGUgY2FycmllcyBjb20uc3VibGltYXRlZC5zcGFjZSNQUywgc28gYW55IGZpbGVcblx0Ly8gd2l0aCBzdWJsaW1hdGVkIG1ldGFkYXRhIGlkZW50aWZpZXMgdGhlIHdvcmtzcGFjZS5cblx0ZGV0ZWN0V29ya3NwYWNlKCk6IHsgc3BhY2U6IHN0cmluZyB8IG51bGwgfSB8IG51bGwge1xuXHRcdGlmICghdGhpcy5sYXN0TWV0YWRhdGEpIHJldHVybiBudWxsO1xuXHRcdGlmICghdGhpcy5sYXN0TWV0YWRhdGEuc3BhY2UgJiYgIXRoaXMubGFzdE1ldGFkYXRhLmlkKSByZXR1cm4gbnVsbDtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c3BhY2U6IHRoaXMubGFzdE1ldGFkYXRhLnNwYWNlID8/IG51bGwsXG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgcmVmcmVzaE1ldGFkYXRhKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGZpbGUgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpO1xuXHRcdGlmICghZmlsZSkge1xuXHRcdFx0dGhpcy5sYXN0TWV0YWRhdGEgPSBudWxsO1xuXHRcdFx0dGhpcy51cGRhdGVTdGF0dXNCYXIobnVsbCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCFpc01hY09TKCkpIHtcblx0XHRcdHRoaXMubGFzdE1ldGFkYXRhID0gbnVsbDtcblx0XHRcdHRoaXMudXBkYXRlU3RhdHVzQmFyKG51bGwpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIGdldCBhYnNvbHV0ZSBwYXRoIHZpYSB2YXVsdCBhZGFwdGVyXG5cdFx0Y29uc3QgYWRhcHRlciA9IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXI7XG5cdFx0Y29uc3QgYmFzZVBhdGggPSAoYWRhcHRlciBhcyB7IGdldEJhc2VQYXRoPzogKCkgPT4gc3RyaW5nIH0pXG5cdFx0XHQuZ2V0QmFzZVBhdGg/LigpO1xuXHRcdGlmICghYmFzZVBhdGgpIHtcblx0XHRcdHRoaXMubGFzdE1ldGFkYXRhID0gbnVsbDtcblx0XHRcdHRoaXMudXBkYXRlU3RhdHVzQmFyKG51bGwpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFic1BhdGggPSBgJHtiYXNlUGF0aH0vJHtmaWxlLnBhdGh9YDtcblx0XHR0aGlzLmxhc3RNZXRhZGF0YSA9IGF3YWl0IHJlYWRGaWxlTWV0YWRhdGEoYWJzUGF0aCk7XG5cdFx0dGhpcy51cGRhdGVTdGF0dXNCYXIodGhpcy5sYXN0TWV0YWRhdGEpO1xuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVTdGF0dXNCYXIobWV0YTogRmlsZU1ldGFkYXRhIHwgbnVsbCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5zdGF0dXNCYXJFbCkgcmV0dXJuO1xuXG5cdFx0Ly8gbm8gc3VibGltYXRlZCB4YXR0cnMgXHUyMTkyIGZpbGUgaXNuJ3QgdHJhY2tlZCBieSBzdWJsaW1hdGVkLCBoaWRlIHN0YXR1cyBiYXJcblx0XHRpZiAoIW1ldGEgfHwgKCFtZXRhLnNwYWNlICYmICFtZXRhLmlkKSkge1xuXHRcdFx0dGhpcy5zdGF0dXNCYXJFbC5zZXRUZXh0KFwiXCIpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIGNvbXBhY3QgZm9ybWF0OiBcIlx1MjcxMyBzeW5jZWQgdjIxIGJ5IGFudG9uXCIgKHN5bmMgKyB2ZXJzaW9uICsgYXV0aG9yICsgb3B0aW9uYWwgYnJhbmNoL3Zpc2liaWxpdHkpXG5cdFx0Y29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG5cblx0XHRpZiAobWV0YS5zeW5jU3RhdHVzKSB7XG5cdFx0XHRjb25zdCBpY29uID0gc3luY1N0YXR1c0ljb24obWV0YS5zeW5jU3RhdHVzKTtcblx0XHRcdHBhcnRzLnB1c2goaWNvbiA/IGAke2ljb259ICR7bWV0YS5zeW5jU3RhdHVzfWAgOiBtZXRhLnN5bmNTdGF0dXMpO1xuXHRcdH1cblxuXHRcdGlmIChtZXRhLnZlcnNpb24pIHtcblx0XHRcdHBhcnRzLnB1c2goYHYke21ldGEudmVyc2lvbn1gKTtcblx0XHR9XG5cblx0XHRpZiAobWV0YS5tb2RpZmllZEJ5KSB7XG5cdFx0XHRjb25zdCBwcmVmaXggPVxuXHRcdFx0XHRtZXRhLm1vZGlmaWVkQnlUeXBlID09PSBcImFpX2FnZW50XCIgPyBcImJ5IEFJOlwiIDogXCJieVwiO1xuXHRcdFx0cGFydHMucHVzaChgJHtwcmVmaXh9ICR7bWV0YS5tb2RpZmllZEJ5fWApO1xuXHRcdH1cblxuXHRcdGlmIChtZXRhLmJyYW5jaCAmJiBtZXRhLmJyYW5jaCAhPT0gXCJtYWluXCIpIHtcblx0XHRcdHBhcnRzLnB1c2gobWV0YS5icmFuY2gpO1xuXHRcdH1cblxuXHRcdGlmIChtZXRhLnZpc2liaWxpdHkpIHtcblx0XHRcdHBhcnRzLnB1c2godmlzaWJpbGl0eUljb24obWV0YS52aXNpYmlsaXR5KSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdGF0dXNCYXJFbC5zZXRUZXh0KHBhcnRzLmpvaW4oXCIgXCIpKTtcblxuXHRcdC8vIHNob3cgcG9pbnRlciBjdXJzb3Igd2hlbiBVUkwgYXZhaWxhYmxlXG5cdFx0aWYgKG1ldGEudXJsKSB7XG5cdFx0XHR0aGlzLnN0YXR1c0JhckVsLmFkZENsYXNzKFwic2JsLWNsaWNrYWJsZVwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zdGF0dXNCYXJFbC5yZW1vdmVDbGFzcyhcInNibC1jbGlja2FibGVcIik7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBvcGVuQ3VycmVudEZpbGVPbldlYigpOiB2b2lkIHtcblx0XHRjb25zdCB1cmwgPSB0aGlzLmxhc3RNZXRhZGF0YT8udXJsO1xuXHRcdGlmICghdXJsKSB7XG5cdFx0XHRuZXcgTm90aWNlKFwiTm8gc3VibGltYXRlZCBVUkwgZm9yIHRoaXMgZmlsZVwiKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0d2luZG93Lm9wZW4oYGh0dHBzOi8vJHt1cmx9YCk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGNvcHlXZWJMaW5rKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHVybCA9IHRoaXMubGFzdE1ldGFkYXRhPy51cmw7XG5cdFx0aWYgKCF1cmwpIHtcblx0XHRcdG5ldyBOb3RpY2UoXCJObyBzdWJsaW1hdGVkIFVSTCBmb3IgdGhpcyBmaWxlXCIpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChgaHR0cHM6Ly8ke3VybH1gKTtcblx0XHRuZXcgTm90aWNlKFwiTGluayBjb3BpZWQgdG8gY2xpcGJvYXJkXCIpO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBhY3RpdmF0ZVZlcnNpb25WaWV3KCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGV4aXN0aW5nID1cblx0XHRcdHRoaXMuYXBwLndvcmtzcGFjZS5nZXRMZWF2ZXNPZlR5cGUoVkVSU0lPTl9WSUVXX1RZUEUpO1xuXHRcdGlmIChleGlzdGluZy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLmFwcC53b3Jrc3BhY2UucmV2ZWFsTGVhZihleGlzdGluZ1swXSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGVhZiA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRSaWdodExlYWYoZmFsc2UpO1xuXHRcdGlmICghbGVhZikgcmV0dXJuO1xuXHRcdGF3YWl0IGxlYWYuc2V0Vmlld1N0YXRlKHtcblx0XHRcdHR5cGU6IFZFUlNJT05fVklFV19UWVBFLFxuXHRcdFx0YWN0aXZlOiB0cnVlLFxuXHRcdH0pO1xuXHRcdHRoaXMuYXBwLndvcmtzcGFjZS5yZXZlYWxMZWFmKGxlYWYpO1xuXHR9XG5cblx0cHJpdmF0ZSBoYW5kbGVVcmkocGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogdm9pZCB7XG5cdFx0Y29uc3QgeyBhY3Rpb24sIGZpbGUgfSA9IHBhcmFtcztcblxuXHRcdGlmIChhY3Rpb24gPT09IFwib3BlblwiICYmIGZpbGUpIHtcblx0XHRcdGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVQYXRoKGZpbGUpO1xuXHRcdFx0Y29uc3QgZXhpc3RpbmcgPSB0aGlzLmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgobm9ybWFsaXplZCk7XG5cdFx0XHRpZiAoZXhpc3RpbmcpIHtcblx0XHRcdFx0dGhpcy5hcHAud29ya3NwYWNlLm9wZW5MaW5rVGV4dChub3JtYWxpemVkLCBcIlwiLCBmYWxzZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRuZXcgTm90aWNlKGBGaWxlIG5vdCBmb3VuZDogJHtmaWxlfWApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChhY3Rpb24gPT09IFwiYXV0aFwiICYmIHBhcmFtcy50b2tlbikge1xuXHRcdFx0Ly8gZnV0dXJlOiBPQXV0aCBmbG93IHN0b3JlcyB0b2tlbiBmcm9tIHJlZGlyZWN0XG5cdFx0XHR0aGlzLnNldHRpbmdzLmFwaVRva2VuID0gcGFyYW1zLnRva2VuO1xuXHRcdFx0dGhpcy5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdG5ldyBOb3RpY2UoXCJzdWJsaW1hdGVkOiBzaWduZWQgaW4gc3VjY2Vzc2Z1bGx5XCIpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdG5ldyBOb3RpY2UoYFVua25vd24gc3VibGltYXRlZCBhY3Rpb246ICR7YWN0aW9ufWApO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHN5bmNTdGF0dXNJY29uKHN0YXR1czogc3RyaW5nKTogc3RyaW5nIHtcblx0c3dpdGNoIChzdGF0dXMpIHtcblx0XHRjYXNlIFwic3luY2VkXCI6XG5cdFx0XHRyZXR1cm4gXCJcdTI3MTNcIjtcblx0XHRjYXNlIFwidXBsb2FkaW5nXCI6XG5cdFx0XHRyZXR1cm4gXCJcdTIxOTFcIjtcblx0XHRjYXNlIFwiZG93bmxvYWRpbmdcIjpcblx0XHRcdHJldHVybiBcIlx1MjE5M1wiO1xuXHRcdGNhc2UgXCJlcnJvclwiOlxuXHRcdFx0cmV0dXJuIFwiIVwiO1xuXHRcdGNhc2UgXCJjb25mbGljdFwiOlxuXHRcdFx0cmV0dXJuIFwiXHUyNkEwXCI7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBcIlwiO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHZpc2liaWxpdHlJY29uKHZpc2liaWxpdHk6IHN0cmluZyk6IHN0cmluZyB7XG5cdHN3aXRjaCAodmlzaWJpbGl0eSkge1xuXHRcdGNhc2UgXCJwdWJsaWNcIjpcblx0XHRcdHJldHVybiBcIlx1RDgzQ1x1REYxMFwiO1xuXHRcdGNhc2UgXCJzaGFyZWRcIjpcblx0XHRcdHJldHVybiBcIlx1RDgzRFx1REM2NVwiO1xuXHRcdGNhc2UgXCJwcml2YXRlXCI6XG5cdFx0XHRyZXR1cm4gXCJcdUQ4M0RcdUREMTJcIjtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdH1cbn1cbiIsICJpbXBvcnQgeyBBcHAsIE5vdGljZSwgUGx1Z2luU2V0dGluZ1RhYiwgU2V0dGluZyB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHR5cGUgU3VibGltYXRlZFBsdWdpbiBmcm9tIFwiLi9tYWluXCI7XG5pbXBvcnQgeyBTdWJsaW1hdGVkQXBpIH0gZnJvbSBcIi4vYXBpXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VibGltYXRlZFNldHRpbmdzIHtcblx0YXBpVG9rZW46IHN0cmluZztcblx0aGFzU2VlbldlbGNvbWU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NFVFRJTkdTOiBTdWJsaW1hdGVkU2V0dGluZ3MgPSB7XG5cdGFwaVRva2VuOiBcIlwiLFxuXHRoYXNTZWVuV2VsY29tZTogZmFsc2UsXG59O1xuXG5leHBvcnQgY2xhc3MgU3VibGltYXRlZFNldHRpbmdUYWIgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcblx0cGx1Z2luOiBTdWJsaW1hdGVkUGx1Z2luO1xuXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IFN1YmxpbWF0ZWRQbHVnaW4pIHtcblx0XHRzdXBlcihhcHAsIHBsdWdpbik7XG5cdFx0dGhpcy5wbHVnaW4gPSBwbHVnaW47XG5cdH1cblxuXHRkaXNwbGF5KCk6IHZvaWQge1xuXHRcdGNvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cdFx0Y29udGFpbmVyRWwuZW1wdHkoKTtcblxuXHRcdC8vIGJyYW5kaW5nXG5cdFx0Y29uc3QgaGVhZGVyID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KHsgY2xzOiBcInNibC1zZXR0aW5ncy1oZWFkZXJcIiB9KTtcblx0XHRoZWFkZXIuY3JlYXRlRWwoXCJoMlwiLCB7IHRleHQ6IFwic3VibGltYXRlZFwiIH0pO1xuXHRcdGhlYWRlci5jcmVhdGVFbChcInBcIiwge1xuXHRcdFx0dGV4dDogXCJTeW5jIHN0YXR1cywgdmVyc2lvbiBoaXN0b3J5LCBhbmQgZGVlcCBsaW5rcy5cIixcblx0XHRcdGNsczogXCJzZXR0aW5nLWl0ZW0tZGVzY3JpcHRpb25cIixcblx0XHR9KTtcblxuXHRcdC8vIHdvcmtzcGFjZSBkZXRlY3Rpb24gKGJhc2VkIG9uIHhhdHRycyBvZiB0aGUgbGFzdCBvcGVuZWQgZmlsZSlcblx0XHRjb25zdCB3b3Jrc3BhY2VJbmZvID0gdGhpcy5wbHVnaW4uZGV0ZWN0V29ya3NwYWNlKCk7XG5cdFx0aWYgKHdvcmtzcGFjZUluZm8pIHtcblx0XHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0XHQuc2V0TmFtZShcIkRldGVjdGVkIHdvcmtzcGFjZVwiKVxuXHRcdFx0XHQuc2V0RGVzYyhcblx0XHRcdFx0XHRgU3BhY2U6ICR7d29ya3NwYWNlSW5mby5zcGFjZSB8fCBcInVua25vd25cIn1gXG5cdFx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0XHQuc2V0TmFtZShcIk5vIHN1YmxpbWF0ZWQgZmlsZSBvcGVuXCIpXG5cdFx0XHRcdC5zZXREZXNjKFxuXHRcdFx0XHRcdFwiT3BlbiBhbnkgc3luY2VkIGZpbGUgZnJvbSBhIHN1YmxpbWF0ZWQgZm9sZGVyIHRvIHNlZSB3b3Jrc3BhY2UgaW5mby5cIlxuXHRcdFx0XHQpO1xuXHRcdH1cblxuXHRcdC8vIEFQSSB0b2tlblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoXCJBUEkgdG9rZW5cIilcblx0XHRcdC5zZXREZXNjKFxuXHRcdFx0XHRcIlJlcXVpcmVkIGZvciB2ZXJzaW9uIGhpc3RvcnkuIEdlbmVyYXRlIGF0IHN1YmxpbWF0ZWQuY29tL3NldHRpbmdzL3Rva2Vuc1wiXG5cdFx0XHQpXG5cdFx0XHQuYWRkVGV4dCgodGV4dCkgPT5cblx0XHRcdFx0dGV4dFxuXHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcihcInNrXy4uLlwiKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hcGlUb2tlbilcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5hcGlUb2tlbiA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdCk7XG5cblx0XHQvLyB0ZXN0IGNvbm5lY3Rpb25cblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiVGVzdCBjb25uZWN0aW9uXCIpXG5cdFx0XHQuc2V0RGVzYyhcIlZlcmlmeSB5b3VyIEFQSSB0b2tlbiB3b3Jrc1wiKVxuXHRcdFx0LmFkZEJ1dHRvbigoYnRuKSA9PlxuXHRcdFx0XHRidG4uc2V0QnV0dG9uVGV4dChcIlRlc3RcIikub25DbGljayhhc3luYyAoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLnBsdWdpbi5zZXR0aW5ncy5hcGlUb2tlbikge1xuXHRcdFx0XHRcdFx0bmV3IE5vdGljZShcIk5vIEFQSSB0b2tlbiBjb25maWd1cmVkXCIpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRidG4uc2V0QnV0dG9uVGV4dChcIlRlc3RpbmcuLi5cIik7XG5cdFx0XHRcdFx0YnRuLnNldERpc2FibGVkKHRydWUpO1xuXHRcdFx0XHRcdGNvbnN0IGFwaSA9IG5ldyBTdWJsaW1hdGVkQXBpKFxuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuYXBpVG9rZW5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFwaS50ZXN0Q29ubmVjdGlvbigpO1xuXHRcdFx0XHRcdGlmIChyZXN1bHQub2spIHtcblx0XHRcdFx0XHRcdG5ldyBOb3RpY2UoXG5cdFx0XHRcdFx0XHRcdGBDb25uZWN0ZWQgYXMgJHtyZXN1bHQudXNlcm5hbWV9YFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0bmV3IE5vdGljZShcblx0XHRcdFx0XHRcdFx0YENvbm5lY3Rpb24gZmFpbGVkOiAke3Jlc3VsdC5lcnJvcn1gXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRidG4uc2V0QnV0dG9uVGV4dChcIlRlc3RcIik7XG5cdFx0XHRcdFx0YnRuLnNldERpc2FibGVkKGZhbHNlKTtcblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cblx0XHQvLyBsaW5rc1xuXHRcdGNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiZGl2XCIsIHsgY2xzOiBcInNibC1zZXR0aW5ncy1saW5rc1wiIH0sIChlbCkgPT4ge1xuXHRcdFx0ZWwuY3JlYXRlRWwoXCJhXCIsIHtcblx0XHRcdFx0dGV4dDogXCJzdWJsaW1hdGVkLmNvbVwiLFxuXHRcdFx0XHRocmVmOiBcImh0dHBzOi8vc3VibGltYXRlZC5jb21cIixcblx0XHRcdH0pO1xuXHRcdFx0ZWwuY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCIgXHUwMEI3IFwiIH0pO1xuXHRcdFx0ZWwuY3JlYXRlRWwoXCJhXCIsIHtcblx0XHRcdFx0dGV4dDogXCJEb2N1bWVudGF0aW9uXCIsXG5cdFx0XHRcdGhyZWY6IFwiaHR0cHM6Ly9zdWJsaW1hdGVkLmNvbS9kb2NzL29ic2lkaWFuXCIsXG5cdFx0XHR9KTtcblx0XHRcdGVsLmNyZWF0ZUVsKFwic3BhblwiLCB7IHRleHQ6IFwiIFx1MDBCNyBcIiB9KTtcblx0XHRcdGVsLmNyZWF0ZUVsKFwiYVwiLCB7XG5cdFx0XHRcdHRleHQ6IFwiU291cmNlIGNvZGVcIixcblx0XHRcdFx0aHJlZjogXCJodHRwczovL3N1YmxpbWF0ZWQuY29tL3N1YmxpbWF0ZWQvY29kZS9vYnNpZGlhblwiLFxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cbn1cbiIsICJpbXBvcnQgeyByZXF1ZXN0VXJsIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5cbmNvbnN0IEFQSV9CQVNFID0gXCJodHRwczovL2FwaS5zdWJsaW1hdGVkLmNvbVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZlcnNpb24ge1xuXHRpZDogc3RyaW5nO1xuXHRudW1iZXI6IG51bWJlcjtcblx0YXV0aG9yTmFtZTogc3RyaW5nO1xuXHRhdXRob3JUeXBlOiBzdHJpbmc7XG5cdG1lc3NhZ2U6IHN0cmluZyB8IG51bGw7XG5cdGNyZWF0ZWRBdDogc3RyaW5nO1xuXHRjb21taXRIYXNoOiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZlcnNpb25zUmVzcG9uc2Uge1xuXHR2ZXJzaW9uczogVmVyc2lvbltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RDb25uZWN0aW9uUmVzdWx0IHtcblx0b2s6IGJvb2xlYW47XG5cdHVzZXJuYW1lPzogc3RyaW5nO1xuXHRlcnJvcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFN1YmxpbWF0ZWRBcGkge1xuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIHRva2VuOiBzdHJpbmcpIHt9XG5cblx0cHJpdmF0ZSBhc3luYyByZXF1ZXN0PFQ+KHBhdGg6IHN0cmluZyk6IFByb21pc2U8VD4ge1xuXHRcdGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG5cdFx0XHRBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuXHRcdH07XG5cdFx0aWYgKHRoaXMudG9rZW4pIHtcblx0XHRcdGhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IGBCZWFyZXIgJHt0aGlzLnRva2VufWA7XG5cdFx0fVxuXHRcdGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdFVybCh7XG5cdFx0XHR1cmw6IGAke0FQSV9CQVNFfSR7cGF0aH1gLFxuXHRcdFx0aGVhZGVycyxcblx0XHR9KTtcblxuXHRcdGlmIChyZXNwb25zZS5zdGF0dXMgPj0gNDAwKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdGBBUEkgZXJyb3IgJHtyZXNwb25zZS5zdGF0dXN9OiAke3Jlc3BvbnNlLnRleHR9YFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzcG9uc2UuanNvbiBhcyBUO1xuXHR9XG5cblx0YXN5bmMgZ2V0VmVyc2lvbnMoXG5cdFx0c3BhY2VTbHVnOiBzdHJpbmcsXG5cdFx0aXRlbUlkOiBzdHJpbmdcblx0KTogUHJvbWlzZTxWZXJzaW9uW10+IHtcblx0XHRjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5yZXF1ZXN0PFZlcnNpb25zUmVzcG9uc2U+KFxuXHRcdFx0YC92MS9zcGFjZXMvJHtlbmNvZGVVUklDb21wb25lbnQoc3BhY2VTbHVnKX0vaXRlbXMvJHtlbmNvZGVVUklDb21wb25lbnQoaXRlbUlkKX0vdmVyc2lvbnNgXG5cdFx0KTtcblx0XHRyZXR1cm4gZGF0YS52ZXJzaW9ucztcblx0fVxuXG5cdGFzeW5jIHRlc3RDb25uZWN0aW9uKCk6IFByb21pc2U8VGVzdENvbm5lY3Rpb25SZXN1bHQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgZGF0YSA9IGF3YWl0IHRoaXMucmVxdWVzdDx7IHVzZXJuYW1lOiBzdHJpbmcgfT4oXG5cdFx0XHRcdFwiL3YxL21lXCJcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4geyBvazogdHJ1ZSwgdXNlcm5hbWU6IGRhdGEudXNlcm5hbWUgfTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRvazogZmFsc2UsXG5cdFx0XHRcdGVycm9yOiBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBcIlVua25vd24gZXJyb3JcIixcblx0XHRcdH07XG5cdFx0fVxuXHR9XG59XG4iLCAiaW1wb3J0IHsgZXhlYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gXCJvYnNpZGlhblwiO1xuXG5jb25zdCBYQVRUUl9QUkVGSVggPSBcImNvbS5zdWJsaW1hdGVkLlwiO1xuY29uc3QgWEFUVFJfU1VGRklYID0gXCIjUFNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBGaWxlTWV0YWRhdGEge1xuXHR2ZXJzaW9uOiBzdHJpbmcgfCBudWxsO1xuXHRjb21taXQ6IHN0cmluZyB8IG51bGw7XG5cdHVybDogc3RyaW5nIHwgbnVsbDtcblx0Y29udGVudEhhc2g6IHN0cmluZyB8IG51bGw7XG5cdGlkOiBzdHJpbmcgfCBudWxsO1xuXHRjcmVhdGVkQnk6IHN0cmluZyB8IG51bGw7XG5cdG1vZGlmaWVkQnk6IHN0cmluZyB8IG51bGw7XG5cdG1vZGlmaWVkQnlUeXBlOiBzdHJpbmcgfCBudWxsO1xuXHRzeW5jU3RhdHVzOiBzdHJpbmcgfCBudWxsO1xuXHRzcGFjZTogc3RyaW5nIHwgbnVsbDtcblx0YnJhbmNoOiBzdHJpbmcgfCBudWxsO1xuXHRtb2RpZmllZEF0OiBzdHJpbmcgfCBudWxsO1xuXHR2aXNpYmlsaXR5OiBzdHJpbmcgfCBudWxsO1xufVxuXG5jb25zdCBBVFRSUzogKGtleW9mIEZpbGVNZXRhZGF0YSlbXSA9IFtcblx0XCJ2ZXJzaW9uXCIsXG5cdFwiY29tbWl0XCIsXG5cdFwidXJsXCIsXG5cdFwiY29udGVudEhhc2hcIixcblx0XCJpZFwiLFxuXHRcImNyZWF0ZWRCeVwiLFxuXHRcIm1vZGlmaWVkQnlcIixcblx0XCJtb2RpZmllZEJ5VHlwZVwiLFxuXHRcInN5bmNTdGF0dXNcIixcblx0XCJzcGFjZVwiLFxuXHRcImJyYW5jaFwiLFxuXHRcIm1vZGlmaWVkQXRcIixcblx0XCJ2aXNpYmlsaXR5XCIsXG5dO1xuXG5mdW5jdGlvbiBhdHRyVG9YYXR0ck5hbWUoYXR0cjogc3RyaW5nKTogc3RyaW5nIHtcblx0Ly8gY2FtZWxDYXNlIFx1MjE5MiBrZWJhYi1jYXNlOiBjb250ZW50SGFzaCBcdTIxOTIgY29udGVudC1oYXNoXG5cdGNvbnN0IGtlYmFiID0gYXR0ci5yZXBsYWNlKC9bQS1aXS9nLCAoYykgPT4gXCItXCIgKyBjLnRvTG93ZXJDYXNlKCkpO1xuXHRyZXR1cm4gYCR7WEFUVFJfUFJFRklYfSR7a2ViYWJ9JHtYQVRUUl9TVUZGSVh9YDtcbn1cblxuZnVuY3Rpb24gcmVhZFhhdHRyKHBhdGg6IHN0cmluZywgeGF0dHJOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0ZXhlYyhcblx0XHRcdGB4YXR0ciAtcCAke0pTT04uc3RyaW5naWZ5KHhhdHRyTmFtZSl9ICR7SlNPTi5zdHJpbmdpZnkocGF0aCl9YCxcblx0XHRcdHsgdGltZW91dDogMjAwMCB9LFxuXHRcdFx0KGVyciwgc3Rkb3V0KSA9PiB7XG5cdFx0XHRcdGlmIChlcnIpIHtcblx0XHRcdFx0XHRyZXNvbHZlKG51bGwpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXNvbHZlKHN0ZG91dC50cmltKCkgfHwgbnVsbCk7XG5cdFx0XHR9XG5cdFx0KTtcblx0fSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkRmlsZU1ldGFkYXRhKFxuXHRwYXRoOiBzdHJpbmdcbik6IFByb21pc2U8RmlsZU1ldGFkYXRhIHwgbnVsbD4ge1xuXHRpZiAoIVBsYXRmb3JtLmlzTWFjT1MpIHJldHVybiBudWxsO1xuXG5cdGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChcblx0XHRBVFRSUy5tYXAoKGF0dHIpID0+IHJlYWRYYXR0cihwYXRoLCBhdHRyVG9YYXR0ck5hbWUoYXR0cikpKVxuXHQpO1xuXG5cdC8vIElmIG5vIHhhdHRycyBmb3VuZCBhdCBhbGwsIHRoaXMgaXNuJ3QgYSBzdWJsaW1hdGVkIGZpbGVcblx0aWYgKHJlc3VsdHMuZXZlcnkoKHIpID0+IHIgPT09IG51bGwpKSByZXR1cm4gbnVsbDtcblxuXHRjb25zdCBtZXRhOiBGaWxlTWV0YWRhdGEgPSB7XG5cdFx0dmVyc2lvbjogbnVsbCwgY29tbWl0OiBudWxsLCB1cmw6IG51bGwsIGNvbnRlbnRIYXNoOiBudWxsLFxuXHRcdGlkOiBudWxsLCBjcmVhdGVkQnk6IG51bGwsIG1vZGlmaWVkQnk6IG51bGwsIG1vZGlmaWVkQnlUeXBlOiBudWxsLFxuXHRcdHN5bmNTdGF0dXM6IG51bGwsIHNwYWNlOiBudWxsLCBicmFuY2g6IG51bGwsIG1vZGlmaWVkQXQ6IG51bGwsIHZpc2liaWxpdHk6IG51bGwsXG5cdH07XG5cdEFUVFJTLmZvckVhY2goKGF0dHIsIGkpID0+IHtcblx0XHRtZXRhW2F0dHJdID0gcmVzdWx0c1tpXTtcblx0fSk7XG5cdHJldHVybiBtZXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNYWNPUygpOiBib29sZWFuIHtcblx0cmV0dXJuIFBsYXRmb3JtLmlzTWFjT1M7XG59XG4iLCAiaW1wb3J0IHsgSXRlbVZpZXcsIE5vdGljZSwgV29ya3NwYWNlTGVhZiB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHR5cGUgU3VibGltYXRlZFBsdWdpbiBmcm9tIFwiLi9tYWluXCI7XG5pbXBvcnQgeyBTdWJsaW1hdGVkQXBpLCB0eXBlIFZlcnNpb24gfSBmcm9tIFwiLi9hcGlcIjtcblxuZXhwb3J0IGNvbnN0IFZFUlNJT05fVklFV19UWVBFID0gXCJzdWJsaW1hdGVkLXZlcnNpb25zXCI7XG5cbmV4cG9ydCBjbGFzcyBWZXJzaW9uVmlldyBleHRlbmRzIEl0ZW1WaWV3IHtcblx0cGx1Z2luOiBTdWJsaW1hdGVkUGx1Z2luO1xuXG5cdGNvbnN0cnVjdG9yKGxlYWY6IFdvcmtzcGFjZUxlYWYsIHBsdWdpbjogU3VibGltYXRlZFBsdWdpbikge1xuXHRcdHN1cGVyKGxlYWYpO1xuXHRcdHRoaXMucGx1Z2luID0gcGx1Z2luO1xuXHR9XG5cblx0Z2V0Vmlld1R5cGUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gVkVSU0lPTl9WSUVXX1RZUEU7XG5cdH1cblxuXHRnZXREaXNwbGF5VGV4dCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiBcInN1YmxpbWF0ZWQgdmVyc2lvbnNcIjtcblx0fVxuXG5cdGdldEljb24oKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gXCJoaXN0b3J5XCI7XG5cdH1cblxuXHRhc3luYyBvbk9wZW4oKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgdGhpcy5yZWZyZXNoKCk7XG5cdFx0Ly8gcmVmcmVzaCB3aGVuIGFjdGl2ZSBmaWxlIGNoYW5nZXNcblx0XHR0aGlzLnJlZ2lzdGVyRXZlbnQoXG5cdFx0XHR0aGlzLmFwcC53b3Jrc3BhY2Uub24oXCJhY3RpdmUtbGVhZi1jaGFuZ2VcIiwgKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnJlZnJlc2goKTtcblx0XHRcdH0pXG5cdFx0KTtcblx0fVxuXG5cdGFzeW5jIHJlZnJlc2goKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XG5cdFx0Y29udGVudEVsLmVtcHR5KCk7XG5cdFx0Y29udGVudEVsLmFkZENsYXNzKFwic2JsLXZlcnNpb24tdmlld1wiKTtcblxuXHRcdGNvbnN0IGFjdGl2ZUZpbGUgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpO1xuXHRcdGlmICghYWN0aXZlRmlsZSkge1xuXHRcdFx0Y29udGVudEVsLmNyZWF0ZUVsKFwicFwiLCB7XG5cdFx0XHRcdHRleHQ6IFwiTm8gZmlsZSBvcGVuLlwiLFxuXHRcdFx0XHRjbHM6IFwic2JsLXZlcnNpb24tZW1wdHlcIixcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIHJlYWQgeGF0dHJzIHRvIGdldCBzcGFjZSArIGl0ZW0gSURcblx0XHRjb25zdCBtZXRhID0gdGhpcy5wbHVnaW4ubGFzdE1ldGFkYXRhO1xuXHRcdGlmICghbWV0YT8uc3BhY2UgfHwgIW1ldGE/LmlkKSB7XG5cdFx0XHRjb250ZW50RWwuY3JlYXRlRWwoXCJwXCIsIHtcblx0XHRcdFx0dGV4dDogXCJOb3QgYSBzdWJsaW1hdGVkIGZpbGUuXCIsXG5cdFx0XHRcdGNsczogXCJzYmwtdmVyc2lvbi1lbXB0eVwiLFxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gcHVibGljIGZpbGVzIGNhbiBiZSBmZXRjaGVkIGFub255bW91c2x5OyBwcml2YXRlL3NoYXJlZCBmaWxlcyByZXF1aXJlIGEgdG9rZW5cblx0XHRjb25zdCBpc1B1YmxpYyA9IG1ldGEudmlzaWJpbGl0eSA9PT0gXCJwdWJsaWNcIjtcblx0XHRpZiAoIXRoaXMucGx1Z2luLnNldHRpbmdzLmFwaVRva2VuICYmICFpc1B1YmxpYykge1xuXHRcdFx0Y29udGVudEVsLmNyZWF0ZUVsKFwicFwiLCB7XG5cdFx0XHRcdHRleHQ6IFwiQVBJIHRva2VuIHJlcXVpcmVkIGZvciB2ZXJzaW9uIGhpc3RvcnkuXCIsXG5cdFx0XHRcdGNsczogXCJzYmwtdmVyc2lvbi1lbXB0eVwiLFxuXHRcdFx0fSk7XG5cdFx0XHRjb250ZW50RWwuY3JlYXRlRWwoXCJwXCIsIHtcblx0XHRcdFx0dGV4dDogXCJDb25maWd1cmUgaW4gU2V0dGluZ3MgXHUyMTkyIHN1YmxpbWF0ZWRcIixcblx0XHRcdFx0Y2xzOiBcInNibC12ZXJzaW9uLWhpbnRcIixcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnRlbnRFbC5jcmVhdGVFbChcImg0XCIsIHtcblx0XHRcdHRleHQ6IGFjdGl2ZUZpbGUubmFtZSxcblx0XHRcdGNsczogXCJzYmwtdmVyc2lvbi1maWxlbmFtZVwiLFxuXHRcdH0pO1xuXG5cdFx0Y29uc3QgbG9hZGluZyA9IGNvbnRlbnRFbC5jcmVhdGVFbChcInBcIiwge1xuXHRcdFx0dGV4dDogXCJMb2FkaW5nIHZlcnNpb25zLi4uXCIsXG5cdFx0XHRjbHM6IFwic2JsLXZlcnNpb24tbG9hZGluZ1wiLFxuXHRcdH0pO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGFwaSA9IG5ldyBTdWJsaW1hdGVkQXBpKHRoaXMucGx1Z2luLnNldHRpbmdzLmFwaVRva2VuKTtcblx0XHRcdGNvbnN0IHZlcnNpb25zID0gYXdhaXQgYXBpLmdldFZlcnNpb25zKG1ldGEuc3BhY2UsIG1ldGEuaWQpO1xuXHRcdFx0bG9hZGluZy5yZW1vdmUoKTtcblxuXHRcdFx0aWYgKHZlcnNpb25zLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRjb250ZW50RWwuY3JlYXRlRWwoXCJwXCIsIHtcblx0XHRcdFx0XHR0ZXh0OiBcIk5vIHZlcnNpb25zIGZvdW5kLlwiLFxuXHRcdFx0XHRcdGNsczogXCJzYmwtdmVyc2lvbi1lbXB0eVwiLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBsaXN0ID0gY29udGVudEVsLmNyZWF0ZUVsKFwiZGl2XCIsIHtcblx0XHRcdFx0Y2xzOiBcInNibC12ZXJzaW9uLWxpc3RcIixcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgZ3JvdXBzID0gZ3JvdXBCeURheSh2ZXJzaW9ucyk7XG5cdFx0XHRmb3IgKGNvbnN0IGdyb3VwIG9mIGdyb3Vwcykge1xuXHRcdFx0XHRsaXN0LmNyZWF0ZUVsKFwiZGl2XCIsIHtcblx0XHRcdFx0XHR0ZXh0OiBncm91cC5sYWJlbCxcblx0XHRcdFx0XHRjbHM6IFwic2JsLXZlcnNpb24tZGF5XCIsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRmb3IgKGNvbnN0IHYgb2YgZ3JvdXAudmVyc2lvbnMpIHtcblx0XHRcdFx0XHR0aGlzLnJlbmRlclZlcnNpb24obGlzdCwgdiwgbWV0YS51cmwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0bG9hZGluZy5yZW1vdmUoKTtcblx0XHRcdGNvbnRlbnRFbC5jcmVhdGVFbChcInBcIiwge1xuXHRcdFx0XHR0ZXh0OiBgRXJyb3I6ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogXCJVbmtub3duXCJ9YCxcblx0XHRcdFx0Y2xzOiBcInNibC12ZXJzaW9uLWVycm9yXCIsXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHJlbmRlclZlcnNpb24oXG5cdFx0Y29udGFpbmVyOiBIVE1MRWxlbWVudCxcblx0XHR2OiBWZXJzaW9uLFxuXHRcdGZpbGVVcmw6IHN0cmluZyB8IG51bGxcblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgaXRlbSA9IGNvbnRhaW5lci5jcmVhdGVEaXYoeyBjbHM6IFwic2JsLXZlcnNpb24taXRlbVwiIH0pO1xuXG5cdFx0Y29uc3QgaGVhZGVyID0gaXRlbS5jcmVhdGVEaXYoeyBjbHM6IFwic2JsLXZlcnNpb24taGVhZGVyXCIgfSk7XG5cdFx0aGVhZGVyLmNyZWF0ZUVsKFwic3BhblwiLCB7XG5cdFx0XHR0ZXh0OiBgdiR7di5udW1iZXJ9YCxcblx0XHRcdGNsczogXCJzYmwtdmVyc2lvbi1udW1iZXJcIixcblx0XHR9KTtcblx0XHRoZWFkZXIuY3JlYXRlRWwoXCJzcGFuXCIsIHtcblx0XHRcdHRleHQ6IHYuYXV0aG9yTmFtZSxcblx0XHRcdGNsczogXCJzYmwtdmVyc2lvbi1hdXRob3JcIixcblx0XHR9KTtcblxuXHRcdGNvbnN0IHRpbWUgPSBpdGVtLmNyZWF0ZURpdih7IGNsczogXCJzYmwtdmVyc2lvbi10aW1lXCIgfSk7XG5cdFx0dGltZS5jcmVhdGVFbChcInNwYW5cIiwge1xuXHRcdFx0dGV4dDogZm9ybWF0UmVsYXRpdmVUaW1lKHYuY3JlYXRlZEF0KSxcblx0XHRcdGF0dHI6IHsgdGl0bGU6IG5ldyBEYXRlKHYuY3JlYXRlZEF0KS50b0xvY2FsZVN0cmluZygpIH0sXG5cdFx0fSk7XG5cblx0XHRpZiAodi5tZXNzYWdlKSB7XG5cdFx0XHRpdGVtLmNyZWF0ZURpdih7XG5cdFx0XHRcdHRleHQ6IHYubWVzc2FnZSxcblx0XHRcdFx0Y2xzOiBcInNibC12ZXJzaW9uLW1lc3NhZ2VcIixcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGlmIChmaWxlVXJsKSB7XG5cdFx0XHRjb25zdCB3ZWJVcmwgPSBgaHR0cHM6Ly8ke2ZpbGVVcmx9L352ZXJzaW9ucy92JHt2Lm51bWJlcn1gO1xuXHRcdFx0Y29uc3QgbGluayA9IGl0ZW0uY3JlYXRlRWwoXCJhXCIsIHtcblx0XHRcdFx0dGV4dDogXCJ2aWV3IG9uIHdlYlwiLFxuXHRcdFx0XHRjbHM6IFwic2JsLXZlcnNpb24td2ViLWxpbmtcIixcblx0XHRcdFx0aHJlZjogd2ViVXJsLFxuXHRcdFx0fSk7XG5cdFx0XHRsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuXHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdHdpbmRvdy5vcGVuKHdlYlVybCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRhc3luYyBvbkNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIGNsZWFudXAgaGFuZGxlZCBieSBvYnNpZGlhblxuXHR9XG59XG5cbmludGVyZmFjZSBEYXlHcm91cCB7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdHZlcnNpb25zOiBWZXJzaW9uW107XG59XG5cbmZ1bmN0aW9uIGdyb3VwQnlEYXkodmVyc2lvbnM6IFZlcnNpb25bXSk6IERheUdyb3VwW10ge1xuXHRjb25zdCBncm91cHMgPSBuZXcgTWFwPHN0cmluZywgVmVyc2lvbltdPigpO1xuXHRjb25zdCBvcmRlcjogc3RyaW5nW10gPSBbXTtcblxuXHRmb3IgKGNvbnN0IHYgb2YgdmVyc2lvbnMpIHtcblx0XHRjb25zdCBsYWJlbCA9IGZvcm1hdERheUxhYmVsKHYuY3JlYXRlZEF0KTtcblx0XHRpZiAoIWdyb3Vwcy5oYXMobGFiZWwpKSB7XG5cdFx0XHRncm91cHMuc2V0KGxhYmVsLCBbXSk7XG5cdFx0XHRvcmRlci5wdXNoKGxhYmVsKTtcblx0XHR9XG5cdFx0Z3JvdXBzLmdldChsYWJlbCkhLnB1c2godik7XG5cdH1cblxuXHRyZXR1cm4gb3JkZXIubWFwKChsYWJlbCkgPT4gKHtcblx0XHRsYWJlbCxcblx0XHR2ZXJzaW9uczogZ3JvdXBzLmdldChsYWJlbCkhLFxuXHR9KSk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdERheUxhYmVsKGlzbzogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3Qgbm93ID0gbmV3IERhdGUoKTtcblx0Y29uc3QgZGF0ZSA9IG5ldyBEYXRlKGlzbyk7XG5cblx0Y29uc3Qgbm93RGF5ID0gbmV3IERhdGUobm93LmdldEZ1bGxZZWFyKCksIG5vdy5nZXRNb250aCgpLCBub3cuZ2V0RGF0ZSgpKTtcblx0Y29uc3QgdGhlbkRheSA9IG5ldyBEYXRlKFxuXHRcdGRhdGUuZ2V0RnVsbFllYXIoKSxcblx0XHRkYXRlLmdldE1vbnRoKCksXG5cdFx0ZGF0ZS5nZXREYXRlKClcblx0KTtcblx0Y29uc3QgZGF5cyA9IE1hdGgucm91bmQoXG5cdFx0KG5vd0RheS5nZXRUaW1lKCkgLSB0aGVuRGF5LmdldFRpbWUoKSkgLyAoMTAwMCAqIDYwICogNjAgKiAyNClcblx0KTtcblxuXHRpZiAoZGF5cyA9PT0gMCkgcmV0dXJuIFwiVG9kYXlcIjtcblx0aWYgKGRheXMgPT09IDEpIHJldHVybiBcIlllc3RlcmRheVwiO1xuXHRpZiAoZGF5cyA8IDcpIHJldHVybiBgJHtkYXlzfSBkYXlzIGFnb2A7XG5cdHJldHVybiBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZyhcImVuLVVTXCIsIHtcblx0XHRtb250aDogXCJzaG9ydFwiLFxuXHRcdGRheTogXCJudW1lcmljXCIsXG5cdH0pO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRSZWxhdGl2ZVRpbWUoaXNvOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXHRjb25zdCB0aGVuID0gbmV3IERhdGUoaXNvKS5nZXRUaW1lKCk7XG5cdGNvbnN0IGRpZmYgPSBub3cgLSB0aGVuO1xuXHRjb25zdCBzZWNvbmRzID0gTWF0aC5mbG9vcihkaWZmIC8gMTAwMCk7XG5cdGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKHNlY29uZHMgLyA2MCk7XG5cdGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihtaW51dGVzIC8gNjApO1xuXHRjb25zdCBkYXlzID0gTWF0aC5mbG9vcihob3VycyAvIDI0KTtcblxuXHRpZiAoZGF5cyA+IDMwKSByZXR1cm4gbmV3IERhdGUoaXNvKS50b0xvY2FsZURhdGVTdHJpbmcoKTtcblx0aWYgKGRheXMgPiAwKSByZXR1cm4gYCR7ZGF5c31kIGFnb2A7XG5cdGlmIChob3VycyA+IDApIHJldHVybiBgJHtob3Vyc31oIGFnb2A7XG5cdGlmIChtaW51dGVzID4gMCkgcmV0dXJuIGAke21pbnV0ZXN9bSBhZ29gO1xuXHRyZXR1cm4gXCJqdXN0IG5vd1wiO1xufVxuIiwgImltcG9ydCB7IEFwcCwgTW9kYWwgfSBmcm9tIFwib2JzaWRpYW5cIjtcblxuZXhwb3J0IGNsYXNzIFdlbGNvbWVNb2RhbCBleHRlbmRzIE1vZGFsIHtcblx0Y29uc3RydWN0b3IoYXBwOiBBcHApIHtcblx0XHRzdXBlcihhcHApO1xuXHR9XG5cblx0b25PcGVuKCk6IHZvaWQge1xuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xuXHRcdGNvbnRlbnRFbC5hZGRDbGFzcyhcInNibC13ZWxjb21lLW1vZGFsXCIpO1xuXG5cdFx0Y29udGVudEVsLmNyZWF0ZUVsKFwiaDJcIiwgeyB0ZXh0OiBcIldlbGNvbWUgdG8gc3VibGltYXRlZFwiIH0pO1xuXG5cdFx0Y29udGVudEVsLmNyZWF0ZUVsKFwicFwiLCB7XG5cdFx0XHR0ZXh0OiBcInN1YmxpbWF0ZWQgc3luY3MgeW91ciBmaWxlcyB3aXRoIHZlcnNpb24gaGlzdG9yeSwgY29sbGFib3JhdGlvbiwgYW5kIGEgd2ViIHZpZXdlciBcdTIwMTQgYWxsIHBvd2VyZWQgYnkgZ2l0IHVuZGVyIHRoZSBob29kLlwiLFxuXHRcdH0pO1xuXG5cdFx0Y29uc3Qgc3RlcHMgPSBjb250ZW50RWwuY3JlYXRlRWwoXCJkaXZcIiwgeyBjbHM6IFwic2JsLXdlbGNvbWUtc3RlcHNcIiB9KTtcblxuXHRcdGNvbnN0IHN0ZXAxID0gc3RlcHMuY3JlYXRlRGl2KHsgY2xzOiBcInNibC13ZWxjb21lLXN0ZXBcIiB9KTtcblx0XHRzdGVwMS5jcmVhdGVFbChcInN0cm9uZ1wiLCB7IHRleHQ6IFwiMS4gT3BlbiBhIHN1YmxpbWF0ZWQgZm9sZGVyIGFzIGEgdmF1bHRcIiB9KTtcblx0XHRzdGVwMS5jcmVhdGVFbChcInBcIiwge1xuXHRcdFx0dGV4dDogXCJJbiBGaW5kZXIsIG9wZW4gYW55IHN1YmxpbWF0ZWQgZm9sZGVyIChvciBzdWJmb2xkZXIpIHVuZGVyIENsb3VkU3RvcmFnZSBhcyBhbiBPYnNpZGlhbiB2YXVsdC4gVGhlIHBsdWdpbiBhY3RpdmF0ZXMgYXV0b21hdGljYWxseSBvbiBzeW5jZWQgZmlsZXMuXCIsXG5cdFx0fSk7XG5cblx0XHRjb25zdCBzdGVwMiA9IHN0ZXBzLmNyZWF0ZURpdih7IGNsczogXCJzYmwtd2VsY29tZS1zdGVwXCIgfSk7XG5cdFx0c3RlcDIuY3JlYXRlRWwoXCJzdHJvbmdcIiwgeyB0ZXh0OiBcIjIuIFN0YXR1cyBiYXIgc2hvd3Mgc3luYyBpbmZvXCIgfSk7XG5cdFx0c3RlcDIuY3JlYXRlRWwoXCJwXCIsIHtcblx0XHRcdHRleHQ6IFwiVGhlIGJvdHRvbSBiYXIgc2hvd3MgdmVyc2lvbiBudW1iZXIsIHN5bmMgc3RhdHVzLCBhbmQgYXV0aG9yIGZvciB0aGUgY3VycmVudCBmaWxlIFx1MjAxNCBhbGwgcmVhZCBmcm9tIGxvY2FsIGZpbGUgbWV0YWRhdGEsIG5vIGFjY291bnQgbmVlZGVkLlwiLFxuXHRcdH0pO1xuXG5cdFx0Y29uc3Qgc3RlcDMgPSBzdGVwcy5jcmVhdGVEaXYoeyBjbHM6IFwic2JsLXdlbGNvbWUtc3RlcFwiIH0pO1xuXHRcdHN0ZXAzLmNyZWF0ZUVsKFwic3Ryb25nXCIsIHsgdGV4dDogXCIzLiBBZGQgYW4gQVBJIHRva2VuIGZvciB2ZXJzaW9uIGhpc3RvcnlcIiB9KTtcblx0XHRzdGVwMy5jcmVhdGVFbChcInBcIiwge1xuXHRcdFx0dGV4dDogXCJUbyBicm93c2UgcGFzdCB2ZXJzaW9ucywgYWRkIHlvdXIgQVBJIHRva2VuIGluIFNldHRpbmdzIFx1MjE5MiBzdWJsaW1hdGVkLiBHZW5lcmF0ZSBvbmUgYXQgc3VibGltYXRlZC5jb20vc2V0dGluZ3MvdG9rZW5zLlwiLFxuXHRcdH0pO1xuXG5cdFx0Y29uc3QgbGlua3MgPSBjb250ZW50RWwuY3JlYXRlRGl2KHsgY2xzOiBcInNibC13ZWxjb21lLWxpbmtzXCIgfSk7XG5cdFx0bGlua3MuY3JlYXRlRWwoXCJhXCIsIHtcblx0XHRcdHRleHQ6IFwiRG9jdW1lbnRhdGlvblwiLFxuXHRcdFx0aHJlZjogXCJodHRwczovL3N1YmxpbWF0ZWQuY29tL2RvY3Mvb2JzaWRpYW5cIixcblx0XHR9KTtcblx0XHRsaW5rcy5jcmVhdGVFbChcImJyXCIpO1xuXHRcdGxpbmtzLmNyZWF0ZUVsKFwiYVwiLCB7XG5cdFx0XHR0ZXh0OiBcIlNvdXJjZSBjb2RlXCIsXG5cdFx0XHRocmVmOiBcImh0dHBzOi8vc3VibGltYXRlZC5jb20vc3VibGltYXRlZC9jb2RlL29ic2lkaWFuXCIsXG5cdFx0fSk7XG5cblx0XHRjb25zdCBmb290ZXIgPSBjb250ZW50RWwuY3JlYXRlRGl2KHsgY2xzOiBcInNibC13ZWxjb21lLWZvb3RlclwiIH0pO1xuXHRcdGZvb3Rlci5jcmVhdGVFbChcImJ1dHRvblwiLCB7XG5cdFx0XHR0ZXh0OiBcIkdldCBzdGFydGVkXCIsXG5cdFx0XHRjbHM6IFwibW9kLWN0YVwiLFxuXHRcdH0pLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB0aGlzLmNsb3NlKCkpO1xuXHR9XG5cblx0b25DbG9zZSgpOiB2b2lkIHtcblx0XHR0aGlzLmNvbnRlbnRFbC5lbXB0eSgpO1xuXHR9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFBLG1CQUtPOzs7QUNMUCxJQUFBQyxtQkFBdUQ7OztBQ0F2RCxzQkFBMkI7QUFFM0IsSUFBTSxXQUFXO0FBc0JWLElBQU0sZ0JBQU4sTUFBb0I7QUFBQSxFQUMxQixZQUFvQixPQUFlO0FBQWY7QUFBQSxFQUFnQjtBQUFBLEVBRXBDLE1BQWMsUUFBVyxNQUEwQjtBQUNsRCxVQUFNLFVBQWtDO0FBQUEsTUFDdkMsUUFBUTtBQUFBLElBQ1Q7QUFDQSxRQUFJLEtBQUssT0FBTztBQUNmLGNBQVEsZ0JBQWdCLFVBQVUsS0FBSyxLQUFLO0FBQUEsSUFDN0M7QUFDQSxVQUFNLFdBQVcsVUFBTSw0QkFBVztBQUFBLE1BQ2pDLEtBQUssR0FBRyxRQUFRLEdBQUcsSUFBSTtBQUFBLE1BQ3ZCO0FBQUEsSUFDRCxDQUFDO0FBRUQsUUFBSSxTQUFTLFVBQVUsS0FBSztBQUMzQixZQUFNLElBQUk7QUFBQSxRQUNULGFBQWEsU0FBUyxNQUFNLEtBQUssU0FBUyxJQUFJO0FBQUEsTUFDL0M7QUFBQSxJQUNEO0FB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
700//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgInNyYy9hcGkudHMiLCAic3JjL3hhdHRyLnRzIiwgInNyYy92ZXJzaW9uLXZpZXcudHMiLCAic3JjL3dlbGNvbWUtbW9kYWwudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7XG5cdE5vdGljZSxcblx0UGx1Z2luLFxuXHRXb3Jrc3BhY2VMZWFmLFxuXHRub3JtYWxpemVQYXRoLFxufSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7XG5cdHR5cGUgU3VibGltYXRlZFNldHRpbmdzLFxuXHRERUZBVUxUX1NFVFRJTkdTLFxuXHRTdWJsaW1hdGVkU2V0dGluZ1RhYixcbn0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcbmltcG9ydCB7IHR5cGUgRmlsZU1ldGFkYXRhLCByZWFkRmlsZU1ldGFkYXRhLCBpc01hY09TIH0gZnJvbSBcIi4veGF0dHJcIjtcbmltcG9ydCB7IFZlcnNpb25WaWV3LCBWRVJTSU9OX1ZJRVdfVFlQRSB9IGZyb20gXCIuL3ZlcnNpb24tdmlld1wiO1xuaW1wb3J0IHsgV2VsY29tZU1vZGFsIH0gZnJvbSBcIi4vd2VsY29tZS1tb2RhbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdWJsaW1hdGVkUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcblx0c2V0dGluZ3M6IFN1YmxpbWF0ZWRTZXR0aW5ncyA9IERFRkFVTFRfU0VUVElOR1M7XG5cdGxhc3RNZXRhZGF0YTogRmlsZU1ldGFkYXRhIHwgbnVsbCA9IG51bGw7XG5cblx0cHJpdmF0ZSBzdGF0dXNCYXJFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuXHRhc3luYyBvbmxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgdGhpcy5sb2FkU2V0dGluZ3MoKTtcblxuXHRcdC8vIHN0YXR1cyBiYXJcblx0XHR0aGlzLnN0YXR1c0JhckVsID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XG5cdFx0dGhpcy5zdGF0dXNCYXJFbC5hZGRDbGFzcyhcInNibC1zdGF0dXMtYmFyXCIpO1xuXHRcdHRoaXMuc3RhdHVzQmFyRWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+XG5cdFx0XHR0aGlzLm9wZW5DdXJyZW50RmlsZU9uV2ViKClcblx0XHQpO1xuXHRcdHRoaXMudXBkYXRlU3RhdHVzQmFyKG51bGwpO1xuXG5cdFx0Ly8gcmVnaXN0ZXIgdmVyc2lvbiBoaXN0b3J5IHZpZXdcblx0XHR0aGlzLnJlZ2lzdGVyVmlldyhcblx0XHRcdFZFUlNJT05fVklFV19UWVBFLFxuXHRcdFx0KGxlYWYpID0+IG5ldyBWZXJzaW9uVmlldyhsZWFmLCB0aGlzKVxuXHRcdCk7XG5cblx0XHQvLyBjb21tYW5kc1xuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XG5cdFx0XHRpZDogXCJvcGVuLW9uLXdlYlwiLFxuXHRcdFx0bmFtZTogXCJPcGVuIG9uIHN1YmxpbWF0ZWQuY29tXCIsXG5cdFx0XHRjYWxsYmFjazogKCkgPT4gdGhpcy5vcGVuQ3VycmVudEZpbGVPbldlYigpLFxuXHRcdH0pO1xuXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcblx0XHRcdGlkOiBcInNob3ctdmVyc2lvbnNcIixcblx0XHRcdG5hbWU6IFwiU2hvdyB2ZXJzaW9uc1wiLFxuXHRcdFx0Y2FsbGJhY2s6ICgpID0+IHRoaXMuYWN0aXZhdGVWZXJzaW9uVmlldygpLFxuXHRcdH0pO1xuXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcblx0XHRcdGlkOiBcImNvcHktd2ViLWxpbmtcIixcblx0XHRcdG5hbWU6IFwiQ29weSB3ZWIgbGlua1wiLFxuXHRcdFx0Y2FsbGJhY2s6ICgpID0+IHRoaXMuY29weVdlYkxpbmsoKSxcblx0XHR9KTtcblxuXHRcdC8vIHJpYmJvbiBpY29uIGZvciB2ZXJzaW9uIHNpZGViYXJcblx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJoaXN0b3J5XCIsIFwic3VibGltYXRlZCB2ZXJzaW9uc1wiLCAoKSA9PiB7XG5cdFx0XHR0aGlzLmFjdGl2YXRlVmVyc2lvblZpZXcoKTtcblx0XHR9KTtcblxuXHRcdC8vIFVSSSBoYW5kbGVyOiBvYnNpZGlhbjovL3N1YmxpbWF0ZWQ/YWN0aW9uPW9wZW4mZmlsZT1wYXRoL3RvL25vdGUubWRcblx0XHR0aGlzLnJlZ2lzdGVyT2JzaWRpYW5Qcm90b2NvbEhhbmRsZXIoXG5cdFx0XHRcInN1YmxpbWF0ZWRcIixcblx0XHRcdChwYXJhbXMpID0+IHRoaXMuaGFuZGxlVXJpKHBhcmFtcylcblx0XHQpO1xuXG5cdFx0Ly8gc2V0dGluZ3MgdGFiXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBTdWJsaW1hdGVkU2V0dGluZ1RhYih0aGlzLmFwcCwgdGhpcykpO1xuXG5cdFx0Ly8gdXBkYXRlIHN0YXR1cyBiYXIgd2hlbiBhY3RpdmUgZmlsZSBjaGFuZ2VzXG5cdFx0dGhpcy5yZWdpc3RlckV2ZW50KFxuXHRcdFx0dGhpcy5hcHAud29ya3NwYWNlLm9uKFwiYWN0aXZlLWxlYWYtY2hhbmdlXCIsICgpID0+IHtcblx0XHRcdFx0dGhpcy5yZWZyZXNoTWV0YWRhdGEoKTtcblx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdC8vIGluaXRpYWwgbWV0YWRhdGEgcmVhZFxuXHRcdHRoaXMucmVmcmVzaE1ldGFkYXRhKCk7XG5cblx0XHQvLyB3ZWxjb21lIG1vZGFsIG9uIGZpcnN0IGluc3RhbGxcblx0XHRpZiAoIXRoaXMuc2V0dGluZ3MuaGFzU2VlbldlbGNvbWUpIHtcblx0XHRcdG5ldyBXZWxjb21lTW9kYWwodGhpcy5hcHApLm9wZW4oKTtcblx0XHRcdHRoaXMuc2V0dGluZ3MuaGFzU2VlbldlbGNvbWUgPSB0cnVlO1xuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcblx0XHR9XG5cdH1cblxuXHRvbnVubG9hZCgpOiB2b2lkIHtcblx0XHR0aGlzLmFwcC53b3Jrc3BhY2UuZGV0YWNoTGVhdmVzT2ZUeXBlKFZFUlNJT05fVklFV19UWVBFKTtcblx0fVxuXG5cdGFzeW5jIGxvYWRTZXR0aW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbihcblx0XHRcdHt9LFxuXHRcdFx0REVGQVVMVF9TRVRUSU5HUyxcblx0XHRcdGF3YWl0IHRoaXMubG9hZERhdGEoKVxuXHRcdCk7XG5cdH1cblxuXHRhc3luYyBzYXZlU2V0dGluZ3MoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcblx0fVxuXG5cdC8vIGRldGVjdCB3b3Jrc3BhY2UgZnJvbSB4YXR0cnMgb24gdGhlIGN1cnJlbnRseSBhY3RpdmUgZmlsZS5cblx0Ly8gZXZlcnkgc3luY2VkIGZpbGUgY2FycmllcyBjb20uc3VibGltYXRlZC5zcGFjZSNQUywgc28gYW55IGZpbGVcblx0Ly8gd2l0aCBzdWJsaW1hdGVkIG1ldGFkYXRhIGlkZW50aWZpZXMgdGhlIHdvcmtzcGFjZS5cblx0ZGV0ZWN0V29ya3NwYWNlKCk6IHsgc3BhY2U6IHN0cmluZyB8IG51bGwgfSB8IG51bGwge1xuXHRcdGlmICghdGhpcy5sYXN0TWV0YWRhdGEpIHJldHVybiBudWxsO1xuXHRcdGlmICghdGhpcy5sYXN0TWV0YWRhdGEuc3BhY2UgJiYgIXRoaXMubGFzdE1ldGFkYXRhLmlkKSByZXR1cm4gbnVsbDtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c3BhY2U6IHRoaXMubGFzdE1ldGFkYXRhLnNwYWNlID8/IG51bGwsXG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgcmVmcmVzaE1ldGFkYXRhKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGZpbGUgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpO1xuXHRcdGlmICghZmlsZSkge1xuXHRcdFx0dGhpcy5sYXN0TWV0YWRhdGEgPSBudWxsO1xuXHRcdFx0dGhpcy51cGRhdGVTdGF0dXNCYXIobnVsbCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCFpc01hY09TKCkpIHtcblx0XHRcdHRoaXMubGFzdE1ldGFkYXRhID0gbnVsbDtcblx0XHRcdHRoaXMudXBkYXRlU3RhdHVzQmFyKG51bGwpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIGdldCBhYnNvbHV0ZSBwYXRoIHZpYSB2YXVsdCBhZGFwdGVyXG5cdFx0Y29uc3QgYWRhcHRlciA9IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXI7XG5cdFx0Y29uc3QgYmFzZVBhdGggPSAoYWRhcHRlciBhcyB7IGdldEJhc2VQYXRoPzogKCkgPT4gc3RyaW5nIH0pXG5cdFx0XHQuZ2V0QmFzZVBhdGg/LigpO1xuXHRcdGlmICghYmFzZVBhdGgpIHtcblx0XHRcdHRoaXMubGFzdE1ldGFkYXRhID0gbnVsbDtcblx0XHRcdHRoaXMudXBkYXRlU3RhdHVzQmFyKG51bGwpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFic1BhdGggPSBgJHtiYXNlUGF0aH0vJHtmaWxlLnBhdGh9YDtcblx0XHR0aGlzLmxhc3RNZXRhZGF0YSA9IGF3YWl0IHJlYWRGaWxlTWV0YWRhdGEoYWJzUGF0aCk7XG5cdFx0dGhpcy51cGRhdGVTdGF0dXNCYXIodGhpcy5sYXN0TWV0YWRhdGEpO1xuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVTdGF0dXNCYXIobWV0YTogRmlsZU1ldGFkYXRhIHwgbnVsbCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5zdGF0dXNCYXJFbCkgcmV0dXJuO1xuXG5cdFx0Ly8gbm8gc3VibGltYXRlZCB4YXR0cnMgXHUyMTkyIGZpbGUgaXNuJ3QgdHJhY2tlZCBieSBzdWJsaW1hdGVkLCBoaWRlIHN0YXR1cyBiYXJcblx0XHRpZiAoIW1ldGEgfHwgKCFtZXRhLnNwYWNlICYmICFtZXRhLmlkKSkge1xuXHRcdFx0dGhpcy5zdGF0dXNCYXJFbC5zZXRUZXh0KFwiXCIpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIGNvbXBhY3QgZm9ybWF0OiBcIlx1MjcxMyBzeW5jZWQgdjIxIGJ5IGFudG9uXCIgKHN5bmMgKyB2ZXJzaW9uICsgYXV0aG9yICsgb3B0aW9uYWwgYnJhbmNoL3Zpc2liaWxpdHkpXG5cdFx0Y29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG5cblx0XHRpZiAobWV0YS5zeW5jU3RhdHVzKSB7XG5cdFx0XHRjb25zdCBpY29uID0gc3luY1N0YXR1c0ljb24obWV0YS5zeW5jU3RhdHVzKTtcblx0XHRcdHBhcnRzLnB1c2goaWNvbiA/IGAke2ljb259ICR7bWV0YS5zeW5jU3RhdHVzfWAgOiBtZXRhLnN5bmNTdGF0dXMpO1xuXHRcdH1cblxuXHRcdGlmIChtZXRhLnZlcnNpb24pIHtcblx0XHRcdHBhcnRzLnB1c2goYHYke21ldGEudmVyc2lvbn1gKTtcblx0XHR9XG5cblx0XHRpZiAobWV0YS5tb2RpZmllZEJ5KSB7XG5cdFx0XHRjb25zdCBwcmVmaXggPVxuXHRcdFx0XHRtZXRhLm1vZGlmaWVkQnlUeXBlID09PSBcImFpX2FnZW50XCIgPyBcImJ5IEFJOlwiIDogXCJieVwiO1xuXHRcdFx0cGFydHMucHVzaChgJHtwcmVmaXh9ICR7bWV0YS5tb2RpZmllZEJ5fWApO1xuXHRcdH1cblxuXHRcdGlmIChtZXRhLmJyYW5jaCAmJiBtZXRhLmJyYW5jaCAhPT0gXCJtYWluXCIpIHtcblx0XHRcdHBhcnRzLnB1c2gobWV0YS5icmFuY2gpO1xuXHRcdH1cblxuXHRcdGlmIChtZXRhLnZpc2liaWxpdHkpIHtcblx0XHRcdHBhcnRzLnB1c2godmlzaWJpbGl0eUljb24obWV0YS52aXNpYmlsaXR5KSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdGF0dXNCYXJFbC5zZXRUZXh0KHBhcnRzLmpvaW4oXCIgXCIpKTtcblxuXHRcdC8vIHNob3cgcG9pbnRlciBjdXJzb3Igd2hlbiBVUkwgYXZhaWxhYmxlXG5cdFx0aWYgKG1ldGEudXJsKSB7XG5cdFx0XHR0aGlzLnN0YXR1c0JhckVsLmFkZENsYXNzKFwic2JsLWNsaWNrYWJsZVwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zdGF0dXNCYXJFbC5yZW1vdmVDbGFzcyhcInNibC1jbGlja2FibGVcIik7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBvcGVuQ3VycmVudEZpbGVPbldlYigpOiB2b2lkIHtcblx0XHRjb25zdCB1cmwgPSB0aGlzLmxhc3RNZXRhZGF0YT8udXJsO1xuXHRcdGlmICghdXJsKSB7XG5cdFx0XHRuZXcgTm90aWNlKFwiTm8gc3VibGltYXRlZCBVUkwgZm9yIHRoaXMgZmlsZVwiKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0d2luZG93Lm9wZW4oYGh0dHBzOi8vJHt1cmx9YCk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGNvcHlXZWJMaW5rKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHVybCA9IHRoaXMubGFzdE1ldGFkYXRhPy51cmw7XG5cdFx0aWYgKCF1cmwpIHtcblx0XHRcdG5ldyBOb3RpY2UoXCJObyBzdWJsaW1hdGVkIFVSTCBmb3IgdGhpcyBmaWxlXCIpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChgaHR0cHM6Ly8ke3VybH1gKTtcblx0XHRuZXcgTm90aWNlKFwiTGluayBjb3BpZWQgdG8gY2xpcGJvYXJkXCIpO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBhY3RpdmF0ZVZlcnNpb25WaWV3KCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGV4aXN0aW5nID1cblx0XHRcdHRoaXMuYXBwLndvcmtzcGFjZS5nZXRMZWF2ZXNPZlR5cGUoVkVSU0lPTl9WSUVXX1RZUEUpO1xuXHRcdGlmIChleGlzdGluZy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLmFwcC53b3Jrc3BhY2UucmV2ZWFsTGVhZihleGlzdGluZ1swXSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGVhZiA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRSaWdodExlYWYoZmFsc2UpO1xuXHRcdGlmICghbGVhZikgcmV0dXJuO1xuXHRcdGF3YWl0IGxlYWYuc2V0Vmlld1N0YXRlKHtcblx0XHRcdHR5cGU6IFZFUlNJT05fVklFV19UWVBFLFxuXHRcdFx0YWN0aXZlOiB0cnVlLFxuXHRcdH0pO1xuXHRcdHRoaXMuYXBwLndvcmtzcGFjZS5yZXZlYWxMZWFmKGxlYWYpO1xuXHR9XG5cblx0cHJpdmF0ZSBoYW5kbGVVcmkocGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogdm9pZCB7XG5cdFx0Y29uc3QgeyBhY3Rpb24sIGZpbGUgfSA9IHBhcmFtcztcblxuXHRcdGlmIChhY3Rpb24gPT09IFwib3BlblwiICYmIGZpbGUpIHtcblx0XHRcdGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVQYXRoKGZpbGUpO1xuXHRcdFx0Y29uc3QgZXhpc3RpbmcgPSB0aGlzLmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgobm9ybWFsaXplZCk7XG5cdFx0XHRpZiAoZXhpc3RpbmcpIHtcblx0XHRcdFx0dGhpcy5hcHAud29ya3NwYWNlLm9wZW5MaW5rVGV4dChub3JtYWxpemVkLCBcIlwiLCBmYWxzZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRuZXcgTm90aWNlKGBGaWxlIG5vdCBmb3VuZDogJHtmaWxlfWApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChhY3Rpb24gPT09IFwiYXV0aFwiICYmIHBhcmFtcy50b2tlbikge1xuXHRcdFx0Ly8gZnV0dXJlOiBPQXV0aCBmbG93IHN0b3JlcyB0b2tlbiBmcm9tIHJlZGlyZWN0XG5cdFx0XHR0aGlzLnNldHRpbmdzLmFwaVRva2VuID0gcGFyYW1zLnRva2VuO1xuXHRcdFx0dGhpcy5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdG5ldyBOb3RpY2UoXCJzdWJsaW1hdGVkOiBzaWduZWQgaW4gc3VjY2Vzc2Z1bGx5XCIpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdG5ldyBOb3RpY2UoYFVua25vd24gc3VibGltYXRlZCBhY3Rpb246ICR7YWN0aW9ufWApO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHN5bmNTdGF0dXNJY29uKHN0YXR1czogc3RyaW5nKTogc3RyaW5nIHtcblx0c3dpdGNoIChzdGF0dXMpIHtcblx0XHRjYXNlIFwic3luY2VkXCI6XG5cdFx0XHRyZXR1cm4gXCJcdTI3MTNcIjtcblx0XHRjYXNlIFwidXBsb2FkaW5nXCI6XG5cdFx0XHRyZXR1cm4gXCJcdTIxOTFcIjtcblx0XHRjYXNlIFwiZG93bmxvYWRpbmdcIjpcblx0XHRcdHJldHVybiBcIlx1MjE5M1wiO1xuXHRcdGNhc2UgXCJlcnJvclwiOlxuXHRcdFx0cmV0dXJuIFwiIVwiO1xuXHRcdGNhc2UgXCJjb25mbGljdFwiOlxuXHRcdFx0cmV0dXJuIFwiXHUyNkEwXCI7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBcIlwiO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHZpc2liaWxpdHlJY29uKHZpc2liaWxpdHk6IHN0cmluZyk6IHN0cmluZyB7XG5cdHN3aXRjaCAodmlzaWJpbGl0eSkge1xuXHRcdGNhc2UgXCJwdWJsaWNcIjpcblx0XHRcdHJldHVybiBcIlx1RDgzQ1x1REYxMFwiO1xuXHRcdGNhc2UgXCJzaGFyZWRcIjpcblx0XHRcdHJldHVybiBcIlx1RDgzRFx1REM2NVwiO1xuXHRcdGNhc2UgXCJwcml2YXRlXCI6XG5cdFx0XHRyZXR1cm4gXCJcdUQ4M0RcdUREMTJcIjtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdH1cbn1cbiIsICJpbXBvcnQgeyBBcHAsIE5vdGljZSwgUGx1Z2luU2V0dGluZ1RhYiwgU2V0dGluZyB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHR5cGUgU3VibGltYXRlZFBsdWdpbiBmcm9tIFwiLi9tYWluXCI7XG5pbXBvcnQgeyBTdWJsaW1hdGVkQXBpIH0gZnJvbSBcIi4vYXBpXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VibGltYXRlZFNldHRpbmdzIHtcblx0YXBpVG9rZW46IHN0cmluZztcblx0aGFzU2VlbldlbGNvbWU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NFVFRJTkdTOiBTdWJsaW1hdGVkU2V0dGluZ3MgPSB7XG5cdGFwaVRva2VuOiBcIlwiLFxuXHRoYXNTZWVuV2VsY29tZTogZmFsc2UsXG59O1xuXG5leHBvcnQgY2xhc3MgU3VibGltYXRlZFNldHRpbmdUYWIgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcblx0cGx1Z2luOiBTdWJsaW1hdGVkUGx1Z2luO1xuXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IFN1YmxpbWF0ZWRQbHVnaW4pIHtcblx0XHRzdXBlcihhcHAsIHBsdWdpbik7XG5cdFx0dGhpcy5wbHVnaW4gPSBwbHVnaW47XG5cdH1cblxuXHRkaXNwbGF5KCk6IHZvaWQge1xuXHRcdGNvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cdFx0Y29udGFpbmVyRWwuZW1wdHkoKTtcblxuXHRcdC8vIGJyYW5kaW5nXG5cdFx0Y29uc3QgaGVhZGVyID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KHsgY2xzOiBcInNibC1zZXR0aW5ncy1oZWFkZXJcIiB9KTtcblx0XHRoZWFkZXIuY3JlYXRlRWwoXCJoMlwiLCB7IHRleHQ6IFwic3VibGltYXRlZFwiIH0pO1xuXHRcdGhlYWRlci5jcmVhdGVFbChcInBcIiwge1xuXHRcdFx0dGV4dDogXCJTeW5jIHN0YXR1cywgdmVyc2lvbiBoaXN0b3J5LCBhbmQgZGVlcCBsaW5rcy5cIixcblx0XHRcdGNsczogXCJzZXR0aW5nLWl0ZW0tZGVzY3JpcHRpb25cIixcblx0XHR9KTtcblxuXHRcdC8vIHdvcmtzcGFjZSBkZXRlY3Rpb24gKGJhc2VkIG9uIHhhdHRycyBvZiB0aGUgbGFzdCBvcGVuZWQgZmlsZSlcblx0XHRjb25zdCB3b3Jrc3BhY2VJbmZvID0gdGhpcy5wbHVnaW4uZGV0ZWN0V29ya3NwYWNlKCk7XG5cdFx0aWYgKHdvcmtzcGFjZUluZm8pIHtcblx0XHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0XHQuc2V0TmFtZShcIkRldGVjdGVkIHdvcmtzcGFjZVwiKVxuXHRcdFx0XHQuc2V0RGVzYyhcblx0XHRcdFx0XHRgU3BhY2U6ICR7d29ya3NwYWNlSW5mby5zcGFjZSB8fCBcInVua25vd25cIn1gXG5cdFx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0XHQuc2V0TmFtZShcIk5vIHN1YmxpbWF0ZWQgZmlsZSBvcGVuXCIpXG5cdFx0XHRcdC5zZXREZXNjKFxuXHRcdFx0XHRcdFwiT3BlbiBhbnkgc3luY2VkIGZpbGUgZnJvbSBhIHN1YmxpbWF0ZWQgZm9sZGVyIHRvIHNlZSB3b3Jrc3BhY2UgaW5mby5cIlxuXHRcdFx0XHQpO1xuXHRcdH1cblxuXHRcdC8vIEFQSSB0b2tlblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoXCJBUEkgdG9rZW5cIilcblx0XHRcdC5zZXREZXNjKFxuXHRcdFx0XHRcIlJlcXVpcmVkIGZvciB2ZXJzaW9uIGhpc3RvcnkuIEdlbmVyYXRlIGF0IHN1YmxpbWF0ZWQuY29tL3NldHRpbmdzL3Rva2Vuc1wiXG5cdFx0XHQpXG5cdFx0XHQuYWRkVGV4dCgodGV4dCkgPT5cblx0XHRcdFx0dGV4dFxuXHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcihcInNrXy4uLlwiKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hcGlUb2tlbilcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5hcGlUb2tlbiA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdCk7XG5cblx0XHQvLyB0ZXN0IGNvbm5lY3Rpb25cblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiVGVzdCBjb25uZWN0aW9uXCIpXG5cdFx0XHQuc2V0RGVzYyhcIlZlcmlmeSB5b3VyIEFQSSB0b2tlbiB3b3Jrc1wiKVxuXHRcdFx0LmFkZEJ1dHRvbigoYnRuKSA9PlxuXHRcdFx0XHRidG4uc2V0QnV0dG9uVGV4dChcIlRlc3RcIikub25DbGljayhhc3luYyAoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLnBsdWdpbi5zZXR0aW5ncy5hcGlUb2tlbikge1xuXHRcdFx0XHRcdFx0bmV3IE5vdGljZShcIk5vIEFQSSB0b2tlbiBjb25maWd1cmVkXCIpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRidG4uc2V0QnV0dG9uVGV4dChcIlRlc3RpbmcuLi5cIik7XG5cdFx0XHRcdFx0YnRuLnNldERpc2FibGVkKHRydWUpO1xuXHRcdFx0XHRcdGNvbnN0IGFwaSA9IG5ldyBTdWJsaW1hdGVkQXBpKFxuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuYXBpVG9rZW5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFwaS50ZXN0Q29ubmVjdGlvbigpO1xuXHRcdFx0XHRcdGlmIChyZXN1bHQub2spIHtcblx0XHRcdFx0XHRcdG5ldyBOb3RpY2UoXG5cdFx0XHRcdFx0XHRcdGBDb25uZWN0ZWQgYXMgJHtyZXN1bHQudXNlcm5hbWV9YFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0bmV3IE5vdGljZShcblx0XHRcdFx0XHRcdFx0YENvbm5lY3Rpb24gZmFpbGVkOiAke3Jlc3VsdC5lcnJvcn1gXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRidG4uc2V0QnV0dG9uVGV4dChcIlRlc3RcIik7XG5cdFx0XHRcdFx0YnRuLnNldERpc2FibGVkKGZhbHNlKTtcblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cblx0XHQvLyBsaW5rc1xuXHRcdGNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiZGl2XCIsIHsgY2xzOiBcInNibC1zZXR0aW5ncy1saW5rc1wiIH0sIChlbCkgPT4ge1xuXHRcdFx0ZWwuY3JlYXRlRWwoXCJhXCIsIHtcblx0XHRcdFx0dGV4dDogXCJzdWJsaW1hdGVkLmNvbVwiLFxuXHRcdFx0XHRocmVmOiBcImh0dHBzOi8vc3VibGltYXRlZC5jb21cIixcblx0XHRcdH0pO1xuXHRcdFx0ZWwuY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCIgXHUwMEI3IFwiIH0pO1xuXHRcdFx0ZWwuY3JlYXRlRWwoXCJhXCIsIHtcblx0XHRcdFx0dGV4dDogXCJEb2N1bWVudGF0aW9uXCIsXG5cdFx0XHRcdGhyZWY6IFwiaHR0cHM6Ly9zdWJsaW1hdGVkLmNvbS9kb2NzL29ic2lkaWFuXCIsXG5cdFx0XHR9KTtcblx0XHRcdGVsLmNyZWF0ZUVsKFwic3BhblwiLCB7IHRleHQ6IFwiIFx1MDBCNyBcIiB9KTtcblx0XHRcdGVsLmNyZWF0ZUVsKFwiYVwiLCB7XG5cdFx0XHRcdHRleHQ6IFwiU291cmNlIGNvZGVcIixcblx0XHRcdFx0aHJlZjogXCJodHRwczovL3N1YmxpbWF0ZWQuY29tL3N1YmxpbWF0ZWQvY29kZS9vYnNpZGlhblwiLFxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cbn1cbiIsICJpbXBvcnQgeyByZXF1ZXN0VXJsIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5cbmNvbnN0IEFQSV9CQVNFID0gXCJodHRwczovL2FwaS5zdWJsaW1hdGVkLmNvbVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZlcnNpb24ge1xuXHRpZDogc3RyaW5nO1xuXHRudW1iZXI6IG51bWJlcjtcblx0YXV0aG9yTmFtZTogc3RyaW5nO1xuXHRhdXRob3JUeXBlOiBzdHJpbmc7XG5cdG1lc3NhZ2U6IHN0cmluZyB8IG51bGw7XG5cdGNyZWF0ZWRBdDogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgQXV0aFJlcXVpcmVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG5cdGNvbnN0cnVjdG9yKHB1YmxpYyBzdGF0dXM6IG51bWJlcikge1xuXHRcdHN1cGVyKGBhdXRoIHJlcXVpcmVkICgke3N0YXR1c30pYCk7XG5cdFx0dGhpcy5uYW1lID0gXCJBdXRoUmVxdWlyZWRFcnJvclwiO1xuXHR9XG59XG5cbi8vIFJhdyB3aXJlIGZvcm1hdCBmcm9tIGFwaS5zdWJsaW1hdGVkLmNvbVxuaW50ZXJmYWNlIFJhd0FjdG9yIHtcblx0dXNlcm5hbWU6IHN0cmluZyB8IG51bGw7XG5cdG5hbWU6IHN0cmluZyB8IG51bGw7XG5cdHJvbGU6IHN0cmluZztcblx0YWN0b3JfdHlwZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUmF3VmVyc2lvbiB7XG5cdGlkOiBzdHJpbmc7XG5cdGl0ZW1faWQ6IHN0cmluZztcblx0dmVyc2lvbjogbnVtYmVyO1xuXHRjb250ZW50X2hhc2g6IHN0cmluZztcblx0YmxvYl9zaGExOiBzdHJpbmcgfCBudWxsO1xuXHRzaXplX2J5dGVzOiBudW1iZXI7XG5cdG1lc3NhZ2U6IHN0cmluZyB8IG51bGw7XG5cdG5hbWU6IHN0cmluZyB8IG51bGw7XG5cdGNyZWF0ZWRfYXQ6IHN0cmluZztcblx0YWN0b3JzOiBSYXdBY3RvcltdO1xufVxuXG5pbnRlcmZhY2UgQXBpRW52ZWxvcGU8VD4ge1xuXHRvazogYm9vbGVhbjtcblx0ZGF0YT86IFQ7XG5cdGVycm9yPzogeyB0eXBlOiBzdHJpbmc7IG1lc3NhZ2U/OiBzdHJpbmcgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZXN0Q29ubmVjdGlvblJlc3VsdCB7XG5cdG9rOiBib29sZWFuO1xuXHR1c2VybmFtZT86IHN0cmluZztcblx0ZXJyb3I/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBTdWJsaW1hdGVkQXBpIHtcblx0Y29uc3RydWN0b3IocHJpdmF0ZSB0b2tlbjogc3RyaW5nKSB7fVxuXG5cdHByaXZhdGUgYXN5bmMgcmVxdWVzdDxUPihwYXRoOiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcblx0XHRjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuXHRcdFx0QWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcblx0XHR9O1xuXHRcdGlmICh0aGlzLnRva2VuKSB7XG5cdFx0XHRoZWFkZXJzLkF1dGhvcml6YXRpb24gPSBgQmVhcmVyICR7dGhpcy50b2tlbn1gO1xuXHRcdH1cblx0XHRjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RVcmwoe1xuXHRcdFx0dXJsOiBgJHtBUElfQkFTRX0ke3BhdGh9YCxcblx0XHRcdGhlYWRlcnMsXG5cdFx0XHR0aHJvdzogZmFsc2UsXG5cdFx0fSk7XG5cblx0XHRpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDEgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSA0MDMpIHtcblx0XHRcdHRocm93IG5ldyBBdXRoUmVxdWlyZWRFcnJvcihyZXNwb25zZS5zdGF0dXMpO1xuXHRcdH1cblx0XHRpZiAocmVzcG9uc2Uuc3RhdHVzID49IDQwMCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgQVBJIGVycm9yICR7cmVzcG9uc2Uuc3RhdHVzfTogJHtyZXNwb25zZS50ZXh0fWBcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYm9keSA9IHJlc3BvbnNlLmpzb24gYXMgQXBpRW52ZWxvcGU8VD47XG5cdFx0aWYgKCFib2R5Lm9rIHx8IGJvZHkuZGF0YSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBtc2cgPSBib2R5LmVycm9yPy5tZXNzYWdlIHx8IGJvZHkuZXJyb3I/LnR5cGUgfHwgXCJ1bmtub3duIGVycm9yXCI7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEFQSSBlcnJvcjogJHttc2d9YCk7XG5cdFx0fVxuXHRcdHJldHVybiBib2R5LmRhdGE7XG5cdH1cblxuXHRhc3luYyBnZXRWZXJzaW9ucyhcblx0XHRzcGFjZVNsdWc6IHN0cmluZyxcblx0XHRpdGVtSWQ6IHN0cmluZ1xuXHQpOiBQcm9taXNlPFZlcnNpb25bXT4ge1xuXHRcdGNvbnN0IHJhdyA9IGF3YWl0IHRoaXMucmVxdWVzdDxSYXdWZXJzaW9uW10+KFxuXHRcdFx0YC92MS9zcGFjZXMvJHtlbmNvZGVVUklDb21wb25lbnQoc3BhY2VTbHVnKX0vaXRlbXMvJHtlbmNvZGVVUklDb21wb25lbnQoaXRlbUlkKX0vdmVyc2lvbnNgXG5cdFx0KTtcblx0XHRyZXR1cm4gcmF3Lm1hcChtYXBWZXJzaW9uKTtcblx0fVxuXG5cdGFzeW5jIHRlc3RDb25uZWN0aW9uKCk6IFByb21pc2U8VGVzdENvbm5lY3Rpb25SZXN1bHQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgZGF0YSA9IGF3YWl0IHRoaXMucmVxdWVzdDx7IHVzZXJuYW1lOiBzdHJpbmcgfT4oXG5cdFx0XHRcdFwiL3YxL21lXCJcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4geyBvazogdHJ1ZSwgdXNlcm5hbWU6IGRhdGEudXNlcm5hbWUgfTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRvazogZmFsc2UsXG5cdFx0XHRcdGVycm9yOiBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBcIlVua25vd24gZXJyb3JcIixcblx0XHRcdH07XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIG1hcFZlcnNpb24ocjogUmF3VmVyc2lvbik6IFZlcnNpb24ge1xuXHQvLyBwaWNrIHRoZSBhdXRob3IgYWN0b3I7IGZhbGwgYmFjayB0byB0aGUgZmlyc3QgYWN0b3Igb3IgYSBwbGFjZWhvbGRlclxuXHRjb25zdCBhdXRob3IgPVxuXHRcdHIuYWN0b3JzLmZpbmQoKGEpID0+IGEucm9sZSA9PT0gXCJhdXRob3JcIikgPz8gci5hY3RvcnNbMF0gPz8gbnVsbDtcblx0cmV0dXJuIHtcblx0XHRpZDogci5pZCxcblx0XHRudW1iZXI6IHIudmVyc2lvbixcblx0XHRhdXRob3JOYW1lOiBhdXRob3I/Lm5hbWUgPz8gYXV0aG9yPy51c2VybmFtZSA/PyBcInVua25vd25cIixcblx0XHRhdXRob3JUeXBlOiBhdXRob3I/LmFjdG9yX3R5cGUgPz8gXCJwZXJzb25cIixcblx0XHRtZXNzYWdlOiByLm1lc3NhZ2UsXG5cdFx0Y3JlYXRlZEF0OiByLmNyZWF0ZWRfYXQsXG5cdH07XG59XG4iLCAiaW1wb3J0IHsgZXhlYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gXCJvYnNpZGlhblwiO1xuXG5jb25zdCBYQVRUUl9QUkVGSVggPSBcImNvbS5zdWJsaW1hdGVkLlwiO1xuY29uc3QgWEFUVFJfU1VGRklYID0gXCIjUFNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBGaWxlTWV0YWRhdGEge1xuXHR2ZXJzaW9uOiBzdHJpbmcgfCBudWxsO1xuXHRjb21taXQ6IHN0cmluZyB8IG51bGw7XG5cdHVybDogc3RyaW5nIHwgbnVsbDtcblx0Y29udGVudEhhc2g6IHN0cmluZyB8IG51bGw7XG5cdGlkOiBzdHJpbmcgfCBudWxsO1xuXHRjcmVhdGVkQnk6IHN0cmluZyB8IG51bGw7XG5cdG1vZGlmaWVkQnk6IHN0cmluZyB8IG51bGw7XG5cdG1vZGlmaWVkQnlUeXBlOiBzdHJpbmcgfCBudWxsO1xuXHRzeW5jU3RhdHVzOiBzdHJpbmcgfCBudWxsO1xuXHRzcGFjZTogc3RyaW5nIHwgbnVsbDtcblx0YnJhbmNoOiBzdHJpbmcgfCBudWxsO1xuXHRtb2RpZmllZEF0OiBzdHJpbmcgfCBudWxsO1xuXHR2aXNpYmlsaXR5OiBzdHJpbmcgfCBudWxsO1xufVxuXG5jb25zdCBBVFRSUzogKGtleW9mIEZpbGVNZXRhZGF0YSlbXSA9IFtcblx0XCJ2ZXJzaW9uXCIsXG5cdFwiY29tbWl0XCIsXG5cdFwidXJsXCIsXG5cdFwiY29udGVudEhhc2hcIixcblx0XCJpZFwiLFxuXHRcImNyZWF0ZWRCeVwiLFxuXHRcIm1vZGlmaWVkQnlcIixcblx0XCJtb2RpZmllZEJ5VHlwZVwiLFxuXHRcInN5bmNTdGF0dXNcIixcblx0XCJzcGFjZVwiLFxuXHRcImJyYW5jaFwiLFxuXHRcIm1vZGlmaWVkQXRcIixcblx0XCJ2aXNpYmlsaXR5XCIsXG5dO1xuXG5mdW5jdGlvbiBhdHRyVG9YYXR0ck5hbWUoYXR0cjogc3RyaW5nKTogc3RyaW5nIHtcblx0Ly8gY2FtZWxDYXNlIFx1MjE5MiBrZWJhYi1jYXNlOiBjb250ZW50SGFzaCBcdTIxOTIgY29udGVudC1oYXNoXG5cdGNvbnN0IGtlYmFiID0gYXR0ci5yZXBsYWNlKC9bQS1aXS9nLCAoYykgPT4gXCItXCIgKyBjLnRvTG93ZXJDYXNlKCkpO1xuXHRyZXR1cm4gYCR7WEFUVFJfUFJFRklYfSR7a2ViYWJ9JHtYQVRUUl9TVUZGSVh9YDtcbn1cblxuZnVuY3Rpb24gcmVhZFhhdHRyKHBhdGg6IHN0cmluZywgeGF0dHJOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0ZXhlYyhcblx0XHRcdGB4YXR0ciAtcCAke0pTT04uc3RyaW5naWZ5KHhhdHRyTmFtZSl9ICR7SlNPTi5zdHJpbmdpZnkocGF0aCl9YCxcblx0XHRcdHsgdGltZW91dDogMjAwMCB9LFxuXHRcdFx0KGVyciwgc3Rkb3V0KSA9PiB7XG5cdFx0XHRcdGlmIChlcnIpIHtcblx0XHRcdFx0XHRyZXNvbHZlKG51bGwpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXNvbHZlKHN0ZG91dC50cmltKCkgfHwgbnVsbCk7XG5cdFx0XHR9XG5cdFx0KTtcblx0fSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkRmlsZU1ldGFkYXRhKFxuXHRwYXRoOiBzdHJpbmdcbik6IFByb21pc2U8RmlsZU1ldGFkYXRhIHwgbnVsbD4ge1xuXHRpZiAoIVBsYXRmb3JtLmlzTWFjT1MpIHJldHVybiBudWxsO1xuXG5cdGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChcblx0XHRBVFRSUy5tYXAoKGF0dHIpID0+IHJlYWRYYXR0cihwYXRoLCBhdHRyVG9YYXR0ck5hbWUoYXR0cikpKVxuXHQpO1xuXG5cdC8vIElmIG5vIHhhdHRycyBmb3VuZCBhdCBhbGwsIHRoaXMgaXNuJ3QgYSBzdWJsaW1hdGVkIGZpbGVcblx0aWYgKHJlc3VsdHMuZXZlcnkoKHIpID0+IHIgPT09IG51bGwpKSByZXR1cm4gbnVsbDtcblxuXHRjb25zdCBtZXRhOiBGaWxlTWV0YWRhdGEgPSB7XG5cdFx0dmVyc2lvbjogbnVsbCwgY29tbWl0OiBudWxsLCB1cmw6IG51bGwsIGNvbnRlbnRIYXNoOiBudWxsLFxuXHRcdGlkOiBudWxsLCBjcmVhdGVkQnk6IG51bGwsIG1vZGlmaWVkQnk6IG51bGwsIG1vZGlmaWVkQnlUeXBlOiBudWxsLFxuXHRcdHN5bmNTdGF0dXM6IG51bGwsIHNwYWNlOiBudWxsLCBicmFuY2g6IG51bGwsIG1vZGlmaWVkQXQ6IG51bGwsIHZpc2liaWxpdHk6IG51bGwsXG5cdH07XG5cdEFUVFJTLmZvckVhY2goKGF0dHIsIGkpID0+IHtcblx0XHRtZXRhW2F0dHJdID0gcmVzdWx0c1tpXTtcblx0fSk7XG5cdHJldHVybiBtZXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNYWNPUygpOiBib29sZWFuIHtcblx0cmV0dXJuIFBsYXRmb3JtLmlzTWFjT1M7XG59XG4iLCAiaW1wb3J0IHsgSXRlbVZpZXcsIE5vdGljZSwgV29ya3NwYWNlTGVhZiB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHR5cGUgU3VibGltYXRlZFBsdWdpbiBmcm9tIFwiLi9tYWluXCI7XG5pbXBvcnQgeyBTdWJsaW1hdGVkQXBpLCBBdXRoUmVxdWlyZWRFcnJvciwgdHlwZSBWZXJzaW9uIH0gZnJvbSBcIi4vYXBpXCI7XG5cbmV4cG9ydCBjb25zdCBWRVJTSU9OX1ZJRVdfVFlQRSA9IFwic3VibGltYXRlZC12ZXJzaW9uc1wiO1xuXG5leHBvcnQgY2xhc3MgVmVyc2lvblZpZXcgZXh0ZW5kcyBJdGVtVmlldyB7XG5cdHBsdWdpbjogU3VibGltYXRlZFBsdWdpbjtcblxuXHRjb25zdHJ1Y3RvcihsZWFmOiBXb3Jrc3BhY2VMZWFmLCBwbHVnaW46IFN1YmxpbWF0ZWRQbHVnaW4pIHtcblx0XHRzdXBlcihsZWFmKTtcblx0XHR0aGlzLnBsdWdpbiA9IHBsdWdpbjtcblx0fVxuXG5cdGdldFZpZXdUeXBlKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIFZFUlNJT05fVklFV19UWVBFO1xuXHR9XG5cblx0Z2V0RGlzcGxheVRleHQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gXCJzdWJsaW1hdGVkIHZlcnNpb25zXCI7XG5cdH1cblxuXHRnZXRJY29uKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIFwiaGlzdG9yeVwiO1xuXHR9XG5cblx0YXN5bmMgb25PcGVuKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuXHRcdC8vIHJlZnJlc2ggd2hlbiBhY3RpdmUgZmlsZSBjaGFuZ2VzXG5cdFx0dGhpcy5yZWdpc3RlckV2ZW50KFxuXHRcdFx0dGhpcy5hcHAud29ya3NwYWNlLm9uKFwiYWN0aXZlLWxlYWYtY2hhbmdlXCIsICgpID0+IHtcblx0XHRcdFx0dGhpcy5yZWZyZXNoKCk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblxuXHRhc3luYyByZWZyZXNoKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xuXHRcdGNvbnRlbnRFbC5lbXB0eSgpO1xuXHRcdGNvbnRlbnRFbC5hZGRDbGFzcyhcInNibC12ZXJzaW9uLXZpZXdcIik7XG5cblx0XHRjb25zdCBhY3RpdmVGaWxlID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcblx0XHRpZiAoIWFjdGl2ZUZpbGUpIHtcblx0XHRcdGNvbnRlbnRFbC5jcmVhdGVFbChcInBcIiwge1xuXHRcdFx0XHR0ZXh0OiBcIk5vIGZpbGUgb3Blbi5cIixcblx0XHRcdFx0Y2xzOiBcInNibC12ZXJzaW9uLWVtcHR5XCIsXG5cdFx0XHR9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyByZWFkIHhhdHRycyB0byBnZXQgc3BhY2UgKyBpdGVtIElEXG5cdFx0Y29uc3QgbWV0YSA9IHRoaXMucGx1Z2luLmxhc3RNZXRhZGF0YTtcblx0XHRpZiAoIW1ldGE/LnNwYWNlIHx8ICFtZXRhPy5pZCkge1xuXHRcdFx0Y29udGVudEVsLmNyZWF0ZUVsKFwicFwiLCB7XG5cdFx0XHRcdHRleHQ6IFwiTm90IGEgc3VibGltYXRlZCBmaWxlLlwiLFxuXHRcdFx0XHRjbHM6IFwic2JsLXZlcnNpb24tZW1wdHlcIixcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnRlbnRFbC5jcmVhdGVFbChcImg0XCIsIHtcblx0XHRcdHRleHQ6IGFjdGl2ZUZpbGUubmFtZSxcblx0XHRcdGNsczogXCJzYmwtdmVyc2lvbi1maWxlbmFtZVwiLFxuXHRcdH0pO1xuXG5cdFx0Y29uc3QgbG9hZGluZyA9IGNvbnRlbnRFbC5jcmVhdGVFbChcInBcIiwge1xuXHRcdFx0dGV4dDogXCJMb2FkaW5nIHZlcnNpb25zLi4uXCIsXG5cdFx0XHRjbHM6IFwic2JsLXZlcnNpb24tbG9hZGluZ1wiLFxuXHRcdH0pO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGFwaSA9IG5ldyBTdWJsaW1hdGVkQXBpKHRoaXMucGx1Z2luLnNldHRpbmdzLmFwaVRva2VuKTtcblx0XHRcdGNvbnN0IHZlcnNpb25zID0gYXdhaXQgYXBpLmdldFZlcnNpb25zKG1ldGEuc3BhY2UsIG1ldGEuaWQpO1xuXHRcdFx0bG9hZGluZy5yZW1vdmUoKTtcblxuXHRcdFx0aWYgKHZlcnNpb25zLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRjb250ZW50RWwuY3JlYXRlRWwoXCJwXCIsIHtcblx0XHRcdFx0XHR0ZXh0OiBcIk5vIHZlcnNpb25zIGZvdW5kLlwiLFxuXHRcdFx0XHRcdGNsczogXCJzYmwtdmVyc2lvbi1lbXB0eVwiLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBsaXN0ID0gY29udGVudEVsLmNyZWF0ZUVsKFwiZGl2XCIsIHtcblx0XHRcdFx0Y2xzOiBcInNibC12ZXJzaW9uLWxpc3RcIixcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgZ3JvdXBzID0gZ3JvdXBCeURheSh2ZXJzaW9ucyk7XG5cdFx0XHRmb3IgKGNvbnN0IGdyb3VwIG9mIGdyb3Vwcykge1xuXHRcdFx0XHRsaXN0LmNyZWF0ZUVsKFwiZGl2XCIsIHtcblx0XHRcdFx0XHR0ZXh0OiBncm91cC5sYWJlbCxcblx0XHRcdFx0XHRjbHM6IFwic2JsLXZlcnNpb24tZGF5XCIsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRmb3IgKGNvbnN0IHYgb2YgZ3JvdXAudmVyc2lvbnMpIHtcblx0XHRcdFx0XHR0aGlzLnJlbmRlclZlcnNpb24obGlzdCwgdiwgbWV0YS51cmwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0bG9hZGluZy5yZW1vdmUoKTtcblx0XHRcdGlmIChlIGluc3RhbmNlb2YgQXV0aFJlcXVpcmVkRXJyb3IpIHtcblx0XHRcdFx0Y29udGVudEVsLmNyZWF0ZUVsKFwicFwiLCB7XG5cdFx0XHRcdFx0dGV4dDogXCJUaGlzIGZpbGUgaXMgcHJpdmF0ZSBcdTIwMTQgYWRkIGFuIEFQSSB0b2tlbiB0byB2aWV3IHZlcnNpb24gaGlzdG9yeS5cIixcblx0XHRcdFx0XHRjbHM6IFwic2JsLXZlcnNpb24tZW1wdHlcIixcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGNvbnRlbnRFbC5jcmVhdGVFbChcInBcIiwge1xuXHRcdFx0XHRcdHRleHQ6IFwiQ29uZmlndXJlIGluIFNldHRpbmdzIFx1MjE5MiBzdWJsaW1hdGVkXCIsXG5cdFx0XHRcdFx0Y2xzOiBcInNibC12ZXJzaW9uLWhpbnRcIixcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnRlbnRFbC5jcmVhdGVFbChcInBcIiwge1xuXHRcdFx0XHR0ZXh0OiBgRXJyb3I6ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogXCJVbmtub3duXCJ9YCxcblx0XHRcdFx0Y2xzOiBcInNibC12ZXJzaW9uLWVycm9yXCIsXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHJlbmRlclZlcnNpb24oXG5cdFx0Y29udGFpbmVyOiBIVE1MRWxlbWVudCxcblx0XHR2OiBWZXJzaW9uLFxuXHRcdGZpbGVVcmw6IHN0cmluZyB8IG51bGxcblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgaXRlbSA9IGNvbnRhaW5lci5jcmVhdGVEaXYoeyBjbHM6IFwic2JsLXZlcnNpb24taXRlbVwiIH0pO1xuXG5cdFx0Y29uc3QgaGVhZGVyID0gaXRlbS5jcmVhdGVEaXYoeyBjbHM6IFwic2JsLXZlcnNpb24taGVhZGVyXCIgfSk7XG5cdFx0aGVhZGVyLmNyZWF0ZUVsKFwic3BhblwiLCB7XG5cdFx0XHR0ZXh0OiBgdiR7di5udW1iZXJ9YCxcblx0XHRcdGNsczogXCJzYmwtdmVyc2lvbi1udW1iZXJcIixcblx0XHR9KTtcblx0XHRoZWFkZXIuY3JlYXRlRWwoXCJzcGFuXCIsIHtcblx0XHRcdHRleHQ6IHYuYXV0aG9yTmFtZSxcblx0XHRcdGNsczogXCJzYmwtdmVyc2lvbi1hdXRob3JcIixcblx0XHR9KTtcblxuXHRcdGNvbnN0IHRpbWUgPSBpdGVtLmNyZWF0ZURpdih7IGNsczogXCJzYmwtdmVyc2lvbi10aW1lXCIgfSk7XG5cdFx0dGltZS5jcmVhdGVFbChcInNwYW5cIiwge1xuXHRcdFx0dGV4dDogZm9ybWF0UmVsYXRpdmVUaW1lKHYuY3JlYXRlZEF0KSxcblx0XHRcdGF0dHI6IHsgdGl0bGU6IG5ldyBEYXRlKHYuY3JlYXRlZEF0KS50b0xvY2FsZVN0cmluZygpIH0sXG5cdFx0fSk7XG5cblx0XHRpZiAodi5tZXNzYWdlKSB7XG5cdFx0XHRpdGVtLmNyZWF0ZURpdih7XG5cdFx0XHRcdHRleHQ6IHYubWVzc2FnZSxcblx0XHRcdFx0Y2xzOiBcInNibC12ZXJzaW9uLW1lc3NhZ2VcIixcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGlmIChmaWxlVXJsKSB7XG5cdFx0XHRjb25zdCB3ZWJVcmwgPSBgaHR0cHM6Ly8ke2ZpbGVVcmx9L352ZXJzaW9ucy92JHt2Lm51bWJlcn1gO1xuXHRcdFx0Y29uc3QgbGluayA9IGl0ZW0uY3JlYXRlRWwoXCJhXCIsIHtcblx0XHRcdFx0dGV4dDogXCJ2aWV3IG9uIHdlYlwiLFxuXHRcdFx0XHRjbHM6IFwic2JsLXZlcnNpb24td2ViLWxpbmtcIixcblx0XHRcdFx0aHJlZjogd2ViVXJsLFxuXHRcdFx0fSk7XG5cdFx0XHRsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuXHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdHdpbmRvdy5vcGVuKHdlYlVybCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRhc3luYyBvbkNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIGNsZWFudXAgaGFuZGxlZCBieSBvYnNpZGlhblxuXHR9XG59XG5cbmludGVyZmFjZSBEYXlHcm91cCB7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdHZlcnNpb25zOiBWZXJzaW9uW107XG59XG5cbmZ1bmN0aW9uIGdyb3VwQnlEYXkodmVyc2lvbnM6IFZlcnNpb25bXSk6IERheUdyb3VwW10ge1xuXHRjb25zdCBncm91cHMgPSBuZXcgTWFwPHN0cmluZywgVmVyc2lvbltdPigpO1xuXHRjb25zdCBvcmRlcjogc3RyaW5nW10gPSBbXTtcblxuXHRmb3IgKGNvbnN0IHYgb2YgdmVyc2lvbnMpIHtcblx0XHRjb25zdCBsYWJlbCA9IGZvcm1hdERheUxhYmVsKHYuY3JlYXRlZEF0KTtcblx0XHRpZiAoIWdyb3Vwcy5oYXMobGFiZWwpKSB7XG5cdFx0XHRncm91cHMuc2V0KGxhYmVsLCBbXSk7XG5cdFx0XHRvcmRlci5wdXNoKGxhYmVsKTtcblx0XHR9XG5cdFx0Z3JvdXBzLmdldChsYWJlbCkhLnB1c2godik7XG5cdH1cblxuXHRyZXR1cm4gb3JkZXIubWFwKChsYWJlbCkgPT4gKHtcblx0XHRsYWJlbCxcblx0XHR2ZXJzaW9uczogZ3JvdXBzLmdldChsYWJlbCkhLFxuXHR9KSk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdERheUxhYmVsKGlzbzogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3Qgbm93ID0gbmV3IERhdGUoKTtcblx0Y29uc3QgZGF0ZSA9IG5ldyBEYXRlKGlzbyk7XG5cblx0Y29uc3Qgbm93RGF5ID0gbmV3IERhdGUobm93LmdldEZ1bGxZZWFyKCksIG5vdy5nZXRNb250aCgpLCBub3cuZ2V0RGF0ZSgpKTtcblx0Y29uc3QgdGhlbkRheSA9IG5ldyBEYXRlKFxuXHRcdGRhdGUuZ2V0RnVsbFllYXIoKSxcblx0XHRkYXRlLmdldE1vbnRoKCksXG5cdFx0ZGF0ZS5nZXREYXRlKClcblx0KTtcblx0Y29uc3QgZGF5cyA9IE1hdGgucm91bmQoXG5cdFx0KG5vd0RheS5nZXRUaW1lKCkgLSB0aGVuRGF5LmdldFRpbWUoKSkgLyAoMTAwMCAqIDYwICogNjAgKiAyNClcblx0KTtcblxuXHRpZiAoZGF5cyA9PT0gMCkgcmV0dXJuIFwiVG9kYXlcIjtcblx0aWYgKGRheXMgPT09IDEpIHJldHVybiBcIlllc3RlcmRheVwiO1xuXHRpZiAoZGF5cyA8IDcpIHJldHVybiBgJHtkYXlzfSBkYXlzIGFnb2A7XG5cdHJldHVybiBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZyhcImVuLVVTXCIsIHtcblx0XHRtb250aDogXCJzaG9ydFwiLFxuXHRcdGRheTogXCJudW1lcmljXCIsXG5cdH0pO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRSZWxhdGl2ZVRpbWUoaXNvOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXHRjb25zdCB0aGVuID0gbmV3IERhdGUoaXNvKS5nZXRUaW1lKCk7XG5cdGNvbnN0IGRpZmYgPSBub3cgLSB0aGVuO1xuXHRjb25zdCBzZWNvbmRzID0gTWF0aC5mbG9vcihkaWZmIC8gMTAwMCk7XG5cdGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKHNlY29uZHMgLyA2MCk7XG5cdGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihtaW51dGVzIC8gNjApO1xuXHRjb25zdCBkYXlzID0gTWF0aC5mbG9vcihob3VycyAvIDI0KTtcblxuXHRpZiAoZGF5cyA+IDMwKSByZXR1cm4gbmV3IERhdGUoaXNvKS50b0xvY2FsZURhdGVTdHJpbmcoKTtcblx0aWYgKGRheXMgPiAwKSByZXR1cm4gYCR7ZGF5c31kIGFnb2A7XG5cdGlmIChob3VycyA+IDApIHJldHVybiBgJHtob3Vyc31oIGFnb2A7XG5cdGlmIChtaW51dGVzID4gMCkgcmV0dXJuIGAke21pbnV0ZXN9bSBhZ29gO1xuXHRyZXR1cm4gXCJqdXN0IG5vd1wiO1xufVxuIiwgImltcG9ydCB7IEFwcCwgTW9kYWwgfSBmcm9tIFwib2JzaWRpYW5cIjtcblxuZXhwb3J0IGNsYXNzIFdlbGNvbWVNb2RhbCBleHRlbmRzIE1vZGFsIHtcblx0Y29uc3RydWN0b3IoYXBwOiBBcHApIHtcblx0XHRzdXBlcihhcHApO1xuXHR9XG5cblx0b25PcGVuKCk6IHZvaWQge1xuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xuXHRcdGNvbnRlbnRFbC5hZGRDbGFzcyhcInNibC13ZWxjb21lLW1vZGFsXCIpO1xuXG5cdFx0Y29udGVudEVsLmNyZWF0ZUVsKFwiaDJcIiwgeyB0ZXh0OiBcIldlbGNvbWUgdG8gc3VibGltYXRlZFwiIH0pO1xuXG5cdFx0Y29udGVudEVsLmNyZWF0ZUVsKFwicFwiLCB7XG5cdFx0XHR0ZXh0OiBcInN1YmxpbWF0ZWQgc3luY3MgeW91ciBmaWxlcyB3aXRoIHZlcnNpb24gaGlzdG9yeSwgY29sbGFib3JhdGlvbiwgYW5kIGEgd2ViIHZpZXdlciBcdTIwMTQgYWxsIHBvd2VyZWQgYnkgZ2l0IHVuZGVyIHRoZSBob29kLlwiLFxuXHRcdH0pO1xuXG5cdFx0Y29uc3Qgc3RlcHMgPSBjb250ZW50RWwuY3JlYXRlRWwoXCJkaXZcIiwgeyBjbHM6IFwic2JsLXdlbGNvbWUtc3RlcHNcIiB9KTtcblxuXHRcdGNvbnN0IHN0ZXAxID0gc3RlcHMuY3JlYXRlRGl2KHsgY2xzOiBcInNibC13ZWxjb21lLXN0ZXBcIiB9KTtcblx0XHRzdGVwMS5jcmVhdGVFbChcInN0cm9uZ1wiLCB7IHRleHQ6IFwiMS4gT3BlbiBhIHN1YmxpbWF0ZWQgZm9sZGVyIGFzIGEgdmF1bHRcIiB9KTtcblx0XHRzdGVwMS5jcmVhdGVFbChcInBcIiwge1xuXHRcdFx0dGV4dDogXCJJbiBGaW5kZXIsIG9wZW4gYW55IHN1YmxpbWF0ZWQgZm9sZGVyIChvciBzdWJmb2xkZXIpIHVuZGVyIENsb3VkU3RvcmFnZSBhcyBhbiBPYnNpZGlhbiB2YXVsdC4gVGhlIHBsdWdpbiBhY3RpdmF0ZXMgYXV0b21hdGljYWxseSBvbiBzeW5jZWQgZmlsZXMuXCIsXG5cdFx0fSk7XG5cblx0XHRjb25zdCBzdGVwMiA9IHN0ZXBzLmNyZWF0ZURpdih7IGNsczogXCJzYmwtd2VsY29tZS1zdGVwXCIgfSk7XG5cdFx0c3RlcDIuY3JlYXRlRWwoXCJzdHJvbmdcIiwgeyB0ZXh0OiBcIjIuIFN0YXR1cyBiYXIgc2hvd3Mgc3luYyBpbmZvXCIgfSk7XG5cdFx0c3RlcDIuY3JlYXRlRWwoXCJwXCIsIHtcblx0XHRcdHRleHQ6IFwiVGhlIGJvdHRvbSBiYXIgc2hvd3MgdmVyc2lvbiBudW1iZXIsIHN5bmMgc3RhdHVzLCBhbmQgYXV0aG9yIGZvciB0aGUgY3VycmVudCBmaWxlIFx1MjAxNCBhbGwgcmVhZCBmcm9tIGxvY2FsIGZpbGUgbWV0YWRhdGEsIG5vIGFjY291bnQgbmVlZGVkLlwiLFxuXHRcdH0pO1xuXG5cdFx0Y29uc3Qgc3RlcDMgPSBzdGVwcy5jcmVhdGVEaXYoeyBjbHM6IFwic2JsLXdlbGNvbWUtc3RlcFwiIH0pO1xuXHRcdHN0ZXAzLmNyZWF0ZUVsKFwic3Ryb25nXCIsIHsgdGV4dDogXCIzLiBBZGQgYW4gQVBJIHRva2VuIGZvciB2ZXJzaW9uIGhpc3RvcnlcIiB9KTtcblx0XHRzdGVwMy5jcmVhdGVFbChcInBcIiwge1xuXHRcdFx0dGV4dDogXCJUbyBicm93c2UgcGFzdCB2ZXJzaW9ucywgYWRkIHlvdXIgQVBJIHRva2VuIGluIFNldHRpbmdzIFx1MjE5MiBzdWJsaW1hdGVkLiBHZW5lcmF0ZSBvbmUgYXQgc3VibGltYXRlZC5jb20vc2V0dGluZ3MvdG9rZW5zLlwiLFxuXHRcdH0pO1xuXG5cdFx0Y29uc3QgbGlua3MgPSBjb250ZW50RWwuY3JlYXRlRGl2KHsgY2xzOiBcInNibC13ZWxjb21lLWxpbmtzXCIgfSk7XG5cdFx0bGlua3MuY3JlYXRlRWwoXCJhXCIsIHtcblx0XHRcdHRleHQ6IFwiRG9jdW1lbnRhdGlvblwiLFxuXHRcdFx0aHJlZjogXCJodHRwczovL3N1YmxpbWF0ZWQuY29tL2RvY3Mvb2JzaWRpYW5cIixcblx0XHR9KTtcblx0XHRsaW5rcy5jcmVhdGVFbChcImJyXCIpO1xuXHRcdGxpbmtzLmNyZWF0ZUVsKFwiYVwiLCB7XG5cdFx0XHR0ZXh0OiBcIlNvdXJjZSBjb2RlXCIsXG5cdFx0XHRocmVmOiBcImh0dHBzOi8vc3VibGltYXRlZC5jb20vc3VibGltYXRlZC9jb2RlL29ic2lkaWFuXCIsXG5cdFx0fSk7XG5cblx0XHRjb25zdCBmb290ZXIgPSBjb250ZW50RWwuY3JlYXRlRGl2KHsgY2xzOiBcInNibC13ZWxjb21lLWZvb3RlclwiIH0pO1xuXHRcdGZvb3Rlci5jcmVhdGVFbChcImJ1dHRvblwiLCB7XG5cdFx0XHR0ZXh0OiBcIkdldCBzdGFydGVkXCIsXG5cdFx0XHRjbHM6IFwibW9kLWN0YVwiLFxuXHRcdH0pLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB0aGlzLmNsb3NlKCkpO1xuXHR9XG5cblx0b25DbG9zZSgpOiB2b2lkIHtcblx0XHR0aGlzLmNvbnRlbnRFbC5lbXB0eSgpO1xuXHR9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFB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LENBQUM7QUFDekM7QUFBQSxJQUNEO0FBRUEsVUFBTSxPQUFPLEtBQUssSUFBSSxVQUFVLGFBQWEsS0FBSztBQUNsRCxRQUFJLENBQUMsS0FBTTtBQUNYLFVBQU0sS0FBSyxhQUFhO0FBQUEsTUFDdkIsTUFBTTtBQUFBLE1BQ04sUUFBUTtBQUFBLElBQ1QsQ0FBQztBQUNELFNBQUssSUFBSSxVQUFVLFdBQVcsSUFBSTtBQUFBLEVBQ25DO0FBQUEsRUFFUSxVQUFVLFFBQXNDO0FBQ3ZELFVBQU0sRUFBRSxRQUFRLEtBQUssSUFBSTtBQUV6QixRQUFJLFdBQVcsVUFBVSxNQUFNO0FBQzlCLFlBQU0saUJBQWEsZ0NBQWMsSUFBSTtBQUNyQyxZQUFNLFdBQVcsS0FBSyxJQUFJLE1BQU0sc0JBQXNCLFVBQVU7QUFDaEUsVUFBSSxVQUFVO0FBQ2IsYUFBSyxJQUFJLFVBQVUsYUFBYSxZQUFZLElBQUksS0FBSztBQUFBLE1BQ3RELE9BQU87QUFDTixZQUFJLHdCQUFPLG1CQUFtQixJQUFJLEVBQUU7QUFBQSxNQUNyQztBQUNBO0FBQUEsSUFDRDtBQUVBLFFBQUksV0FBVyxVQUFVLE9BQU8sT0FBTztBQUV0QyxXQUFLLFNBQVMsV0FBVyxPQUFPO0FBQ2hDLFdBQUssYUFBYTtBQUNsQixVQUFJLHdCQUFPLG9DQUFvQztBQUMvQztBQUFBLElBQ0Q7QUFFQSxRQUFJLHdCQUFPLDhCQUE4QixNQUFNLEVBQUU7QUFBQSxFQUNsRDtBQUNEO0FBRUEsU0FBUyxlQUFlLFFBQXdCO0FBQy9DLFVBQVEsUUFBUTtBQUFBLElBQ2YsS0FBSztBQUNKLGFBQU87QUFBQSxJQUNSLEtBQUs7QUFDSixhQUFPO0FBQUEsSUFDUixLQUFLO0FBQ0osYUFBTztBQUFBLElBQ1IsS0FBSztBQUNKLGFBQU87QUFBQSxJQUNSLEtBQUs7QUFDSixhQUFPO0FBQUEsSUFDUjtBQUNDLGFBQU87QUFBQSxFQUNUO0FBQ0Q7QUFFQSxTQUFTLGVBQWUsWUFBNEI7QUFDbkQsVUFBUSxZQUFZO0FBQUEsSUFDbkIsS0FBSztBQUNKLGFBQU87QUFBQSxJQUNSLEtBQUs7QUFDSixhQUFPO0FBQUEsSUFDUixLQUFLO0FBQ0osYUFBTztBQUFBLElBQ1I7QUFDQyxhQUFPO0FBQUEsRUFDVDtBQUNEOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIl0KfQo=