vitest 0.1.18 → 0.1.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/worker.js CHANGED
@@ -1,12 +1,12 @@
1
- import { r as resolve, d as dirname, b as basename, j as join } from './index-1964368a.js';
2
- import { s as slash, n as normalizeId$1, t as toFilePath, b as isPrimitive, i as isNodeBuiltin, c as createBirpc } from './index-46e1d4ad.js';
1
+ import { r as resolve, d as dirname, j as join, b as basename } from './index-1964368a.js';
2
+ import { i as isNodeBuiltin, c as createBirpc } from './index-ba307c22.js';
3
3
  import { d as distDir } from './constants-de5287a6.js';
4
- import { builtinModules, createRequire } from 'module';
5
- import { pathToFileURL, fileURLToPath } from 'url';
4
+ import { createRequire } from 'module';
5
+ import { fileURLToPath, pathToFileURL } from 'url';
6
6
  import vm from 'vm';
7
7
  import { existsSync, readdirSync } from 'fs';
8
8
  import { a as spyOn, s as spies } from './jest-mock-113430de.js';
9
- import { m as mergeSlashes } from './index-f2daefb8.js';
9
+ import { m as mergeSlashes } from './index-80a227f0.js';
10
10
  import { r as rpc } from './rpc-8c7cc374.js';
11
11
  import 'path';
12
12
  import 'assert';
@@ -16,34 +16,65 @@ import 'tinyspy';
16
16
  import 'tty';
17
17
  import 'local-pkg';
18
18
 
19
- function normalizeId(id, base) {
19
+ function normalizeId$1(id, base) {
20
20
  if (base && id.startsWith(base))
21
21
  id = `/${id.slice(base.length)}`;
22
22
  return id.replace(/^\/@id\/__x00__/, "\0").replace(/^\/@id\//, "").replace(/^__vite-browser-external:/, "").replace(/^node:/, "").replace(/[?&]v=\w+/, "?").replace(/\?$/, "");
23
23
  }
24
24
 
25
+ const isWindows$1 = process.platform === "win32";
26
+ function slash$1(str) {
27
+ return str.replace(/\\/g, "/");
28
+ }
29
+ function normalizeId(id, base) {
30
+ if (base && id.startsWith(base))
31
+ id = `/${id.slice(base.length)}`;
32
+ return id.replace(/^\/@id\/__x00__/, "\0").replace(/^\/@id\//, "").replace(/^__vite-browser-external:/, "").replace(/^node:/, "").replace(/[?&]v=\w+/, "?").replace(/\?$/, "");
33
+ }
34
+ function isPrimitive(v) {
35
+ return v !== Object(v);
36
+ }
37
+ function toFilePath$1(id, root) {
38
+ let absolute = slash$1(id).startsWith("/@fs/") ? id.slice(4) : id.startsWith(dirname(root)) && dirname(root) !== "/" ? id : id.startsWith("/") ? slash$1(resolve(root, id.slice(1))) : id;
39
+ if (absolute.startsWith("//"))
40
+ absolute = absolute.slice(1);
41
+ return isWindows$1 && absolute.startsWith("/") ? fileURLToPath(pathToFileURL(absolute.slice(1)).href) : absolute;
42
+ }
43
+ const DEFAULT_REQUEST_STUBS = {
44
+ "/@vite/client": {
45
+ injectQuery: (id) => id,
46
+ createHotContext() {
47
+ return {
48
+ accept: () => {
49
+ },
50
+ prune: () => {
51
+ }
52
+ };
53
+ },
54
+ updateStyle() {
55
+ }
56
+ }
57
+ };
25
58
  class ViteNodeRunner {
26
59
  constructor(options) {
27
60
  this.options = options;
28
61
  this.root = options.root || process.cwd();
29
62
  this.moduleCache = options.moduleCache || new Map();
30
- this.externalCache = new Map();
31
- builtinModules.forEach((m) => this.externalCache.set(m, m));
32
63
  }
33
64
  async executeFile(file) {
34
- return await this.cachedRequest(`/@fs/${slash(resolve(file))}`, []);
65
+ return await this.cachedRequest(`/@fs/${slash$1(resolve(file))}`, []);
35
66
  }
36
67
  async executeId(id) {
37
68
  return await this.cachedRequest(id, []);
38
69
  }
39
70
  async cachedRequest(rawId, callstack) {
40
71
  var _a, _b;
41
- const id = normalizeId$1(rawId, this.options.base);
42
- const fsPath = toFilePath(id, this.root);
43
- if ((_a = this.moduleCache.get(fsPath)) == null ? void 0 : _a.promise)
44
- return (_b = this.moduleCache.get(fsPath)) == null ? void 0 : _b.promise;
72
+ const id = normalizeId(rawId, this.options.base);
73
+ if ((_a = this.moduleCache.get(id)) == null ? void 0 : _a.promise)
74
+ return (_b = this.moduleCache.get(id)) == null ? void 0 : _b.promise;
75
+ const fsPath = toFilePath$1(id, this.root);
45
76
  const promise = this.directRequest(id, fsPath, callstack);
46
- this.setCache(fsPath, { promise });
77
+ this.setCache(id, { promise });
47
78
  return await promise;
48
79
  }
49
80
  async directRequest(id, fsPath, callstack) {
@@ -51,28 +82,28 @@ class ViteNodeRunner {
51
82
  const request = async (dep) => {
52
83
  var _a;
53
84
  if (callstack.includes(dep)) {
54
- const cacheKey = toFilePath(dep, this.root);
55
- if (!((_a = this.moduleCache.get(cacheKey)) == null ? void 0 : _a.exports))
56
- throw new Error(`Circular dependency detected
85
+ if (!((_a = this.moduleCache.get(dep)) == null ? void 0 : _a.exports))
86
+ throw new Error(`[vite-node] Circular dependency detected
57
87
  Stack:
58
88
  ${[...callstack, dep].reverse().map((p) => `- ${p}`).join("\n")}`);
59
- return this.moduleCache.get(cacheKey).exports;
89
+ return this.moduleCache.get(dep).exports;
60
90
  }
61
91
  return this.cachedRequest(dep, callstack);
62
92
  };
63
- if (this.options.requestStubs && id in this.options.requestStubs)
64
- return this.options.requestStubs[id];
93
+ const requestStubs = this.options.requestStubs || DEFAULT_REQUEST_STUBS;
94
+ if (id in requestStubs)
95
+ return requestStubs[id];
65
96
  const { code: transformed, externalize } = await this.options.fetchModule(id);
66
97
  if (externalize) {
67
- const mod = await interpretedImport(externalize, this.options.interpretDefault ?? true);
68
- this.setCache(fsPath, { exports: mod });
98
+ const mod = await this.interopedImport(externalize);
99
+ this.setCache(id, { exports: mod });
69
100
  return mod;
70
101
  }
71
102
  if (transformed == null)
72
- throw new Error(`failed to load ${id}`);
103
+ throw new Error(`[vite-node] Failed to load ${id}`);
73
104
  const url = pathToFileURL(fsPath).href;
74
105
  const exports = {};
75
- this.setCache(fsPath, { code: transformed, exports });
106
+ this.setCache(id, { code: transformed, exports });
76
107
  const __filename = fileURLToPath(url);
77
108
  const moduleProxy = {
78
109
  set exports(value) {
@@ -112,9 +143,27 @@ ${[...callstack, dep].reverse().map((p) => `- ${p}`).join("\n")}`);
112
143
  else
113
144
  Object.assign(this.moduleCache.get(id), mod);
114
145
  }
115
- }
116
- function hasNestedDefault(target) {
117
- return "__esModule" in target && target.__esModule && "default" in target.default;
146
+ shouldInterop(path, mod) {
147
+ if (this.options.interopDefault === false)
148
+ return false;
149
+ return !path.endsWith(".mjs") && "default" in mod;
150
+ }
151
+ async interopedImport(path) {
152
+ const mod = await import(path);
153
+ if (this.shouldInterop(path, mod)) {
154
+ const tryDefault = this.hasNestedDefault(mod);
155
+ return new Proxy(mod, {
156
+ get: proxyMethod("get", tryDefault),
157
+ set: proxyMethod("set", tryDefault),
158
+ has: proxyMethod("has", tryDefault),
159
+ deleteProperty: proxyMethod("deleteProperty", tryDefault)
160
+ });
161
+ }
162
+ return mod;
163
+ }
164
+ hasNestedDefault(target) {
165
+ return "__esModule" in target && target.__esModule && "default" in target.default;
166
+ }
118
167
  }
119
168
  function proxyMethod(name, tryDefault) {
120
169
  return function(target, key, ...args) {
@@ -126,19 +175,6 @@ function proxyMethod(name, tryDefault) {
126
175
  return result;
127
176
  };
128
177
  }
129
- async function interpretedImport(path, interpretDefault) {
130
- const mod = await import(path);
131
- if (interpretDefault && "default" in mod) {
132
- const tryDefault = hasNestedDefault(mod);
133
- return new Proxy(mod, {
134
- get: proxyMethod("get", tryDefault),
135
- set: proxyMethod("set", tryDefault),
136
- has: proxyMethod("has", tryDefault),
137
- deleteProperty: proxyMethod("deleteProperty", tryDefault)
138
- });
139
- }
140
- return mod;
141
- }
142
178
  function exportAll(exports, sourceModule) {
143
179
  for (const key in sourceModule) {
144
180
  if (key !== "default") {
@@ -156,6 +192,17 @@ function exportAll(exports, sourceModule) {
156
192
  }
157
193
  }
158
194
 
195
+ const isWindows = process.platform === "win32";
196
+ function slash(str) {
197
+ return str.replace(/\\/g, "/");
198
+ }
199
+ function toFilePath(id, root) {
200
+ let absolute = slash(id).startsWith("/@fs/") ? id.slice(4) : id.startsWith(dirname(root)) && dirname(root) !== "/" ? id : id.startsWith("/") ? slash(resolve(root, id.slice(1))) : id;
201
+ if (absolute.startsWith("//"))
202
+ absolute = absolute.slice(1);
203
+ return isWindows && absolute.startsWith("/") ? fileURLToPath(pathToFileURL(absolute.slice(1)).href) : absolute;
204
+ }
205
+
159
206
  var __defProp = Object.defineProperty;
160
207
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
161
208
  var __hasOwnProp = Object.prototype.hasOwnProperty;
@@ -172,27 +219,6 @@ var __spreadValues = (a, b) => {
172
219
  }
173
220
  return a;
174
221
  };
175
- function resolveMockPath(mockPath, root, external) {
176
- const path = normalizeId(external || mockPath);
177
- if (external || isNodeBuiltin(mockPath)) {
178
- const mockDirname = dirname(path);
179
- const baseFilename = basename(path);
180
- const mockFolder = resolve(root, "__mocks__", mockDirname);
181
- if (!existsSync(mockFolder))
182
- return null;
183
- const files = readdirSync(mockFolder);
184
- for (const file of files) {
185
- const [basename2] = file.split(".");
186
- if (basename2 === baseFilename)
187
- return resolve(mockFolder, file).replace(root, "");
188
- }
189
- return null;
190
- }
191
- const dir = dirname(path);
192
- const baseId = basename(path);
193
- const fullPath = resolve(dir, "__mocks__", baseId);
194
- return existsSync(fullPath) ? fullPath.replace(root, "") : null;
195
- }
196
222
  function getObjectType(value) {
197
223
  return Object.prototype.toString.apply(value).slice(8, -1);
198
224
  }
@@ -209,79 +235,193 @@ function mockPrototype(proto) {
209
235
  }
210
236
  return newProto;
211
237
  }
212
- function mockObject(obj) {
213
- const type = getObjectType(obj);
214
- if (Array.isArray(obj))
215
- return [];
216
- else if (type !== "Object" && type !== "Module")
217
- return obj;
218
- const newObj = __spreadValues({}, obj);
219
- const proto = mockPrototype(Object.getPrototypeOf(obj));
220
- Object.setPrototypeOf(newObj, proto);
221
- for (const k in obj) {
222
- newObj[k] = mockObject(obj[k]);
223
- const type2 = getObjectType(obj[k]);
224
- if (type2.includes("Function") && !obj[k].__isSpy) {
225
- spyOn(newObj, k).mockImplementation(() => {
226
- });
227
- Object.defineProperty(newObj[k], "length", { value: 0 });
228
- }
238
+ const pendingIds = [];
239
+ class VitestMocker {
240
+ constructor(options, moduleCache, request) {
241
+ this.options = options;
242
+ this.moduleCache = moduleCache;
243
+ this.callbacks = {};
244
+ this.root = this.options.root;
245
+ this.request = request;
229
246
  }
230
- return newObj;
231
- }
232
- function createMocker(root, mockMap) {
233
- function getSuiteFilepath() {
247
+ get mockMap() {
248
+ return this.options.mockMap;
249
+ }
250
+ on(event, cb) {
234
251
  var _a;
235
- return (_a = process.__vitest_worker__) == null ? void 0 : _a.filepath;
252
+ (_a = this.callbacks)[event] ?? (_a[event] = []);
253
+ this.callbacks[event].push(cb);
254
+ }
255
+ emit(event, ...args) {
256
+ (this.callbacks[event] ?? []).forEach((fn) => fn(...args));
257
+ }
258
+ getSuiteFilepath() {
259
+ var _a;
260
+ return ((_a = process.__vitest_worker__) == null ? void 0 : _a.filepath) || "global";
261
+ }
262
+ getMocks() {
263
+ const suite = this.getSuiteFilepath();
264
+ const suiteMocks = this.mockMap[suite || ""];
265
+ const globalMocks = this.mockMap.global;
266
+ return __spreadValues(__spreadValues({}, suiteMocks), globalMocks);
267
+ }
268
+ async resolvePath(id, importer) {
269
+ const path = await this.options.resolveId(id, importer);
270
+ return {
271
+ path: normalizeId$1((path == null ? void 0 : path.id) || id),
272
+ external: (path == null ? void 0 : path.id.includes("/node_modules/")) ? id : null
273
+ };
274
+ }
275
+ async resolveMocks() {
276
+ await Promise.all(pendingIds.map(async (mock) => {
277
+ const { path, external } = await this.resolvePath(mock.id, mock.importer);
278
+ if (mock.type === "unmock")
279
+ this.unmockPath(path, external);
280
+ if (mock.type === "mock")
281
+ this.mockPath(path, external, mock.factory);
282
+ }));
283
+ pendingIds.length = 0;
236
284
  }
237
- function getActualPath(path, external) {
285
+ async callFunctionMock(dep, mock) {
286
+ var _a;
287
+ const cacheName = `${dep}__mock`;
288
+ const cached = (_a = this.moduleCache.get(cacheName)) == null ? void 0 : _a.exports;
289
+ if (cached)
290
+ return cached;
291
+ const exports = await mock();
292
+ this.emit("mocked", cacheName, { exports });
293
+ return exports;
294
+ }
295
+ getDependencyMock(dep) {
296
+ return this.getMocks()[this.resolveDependency(dep)];
297
+ }
298
+ resolveDependency(dep) {
299
+ if (dep.startsWith("/node_modules/"))
300
+ dep = mergeSlashes(`/@fs/${join(this.root, dep)}`);
301
+ return normalizeId$1(dep);
302
+ }
303
+ getActualPath(path, external) {
238
304
  if (external)
239
305
  return mergeSlashes(`/@fs/${path}`);
240
- return normalizeId(path.replace(root, ""));
241
- }
242
- function unmockPath(path, nmName) {
243
- const suitefile = getSuiteFilepath();
244
- if (suitefile) {
245
- const fsPath = getActualPath(path, nmName);
246
- mockMap[suitefile] ?? (mockMap[suitefile] = {});
247
- delete mockMap[suitefile][fsPath];
306
+ return normalizeId$1(path.replace(this.root, ""));
307
+ }
308
+ resolveMockPath(mockPath, external) {
309
+ const path = normalizeId$1(external || mockPath);
310
+ if (external || isNodeBuiltin(mockPath)) {
311
+ const mockDirname = dirname(path);
312
+ const baseFilename = basename(path);
313
+ const mockFolder = resolve(this.root, "__mocks__", mockDirname);
314
+ if (!existsSync(mockFolder))
315
+ return null;
316
+ const files = readdirSync(mockFolder);
317
+ for (const file of files) {
318
+ const [basename2] = file.split(".");
319
+ if (basename2 === baseFilename)
320
+ return resolve(mockFolder, file).replace(this.root, "");
321
+ }
322
+ return null;
323
+ }
324
+ const dir = dirname(path);
325
+ const baseId = basename(path);
326
+ const fullPath = resolve(dir, "__mocks__", baseId);
327
+ return existsSync(fullPath) ? fullPath.replace(this.root, "") : null;
328
+ }
329
+ mockObject(obj) {
330
+ const type = getObjectType(obj);
331
+ if (Array.isArray(obj))
332
+ return [];
333
+ else if (type !== "Object" && type !== "Module")
334
+ return obj;
335
+ const newObj = __spreadValues({}, obj);
336
+ const proto = mockPrototype(Object.getPrototypeOf(obj));
337
+ Object.setPrototypeOf(newObj, proto);
338
+ for (const k in obj) {
339
+ newObj[k] = this.mockObject(obj[k]);
340
+ const type2 = getObjectType(obj[k]);
341
+ if (type2.includes("Function") && !obj[k].__isSpy) {
342
+ spyOn(newObj, k).mockImplementation(() => {
343
+ });
344
+ Object.defineProperty(newObj[k], "length", { value: 0 });
345
+ }
248
346
  }
347
+ return newObj;
348
+ }
349
+ unmockPath(path, external) {
350
+ var _a;
351
+ const suitefile = this.getSuiteFilepath();
352
+ const fsPath = this.getActualPath(path, external);
353
+ if ((_a = this.mockMap[suitefile]) == null ? void 0 : _a[fsPath])
354
+ delete this.mockMap[suitefile][fsPath];
355
+ }
356
+ mockPath(path, external, factory) {
357
+ var _a;
358
+ const suitefile = this.getSuiteFilepath();
359
+ const fsPath = this.getActualPath(path, external);
360
+ (_a = this.mockMap)[suitefile] ?? (_a[suitefile] = {});
361
+ this.mockMap[suitefile][fsPath] = factory || this.resolveMockPath(path, external);
249
362
  }
250
- function mockPath(path, nmName, factory) {
251
- const suitefile = getSuiteFilepath();
252
- if (suitefile) {
253
- const fsPath = getActualPath(path, nmName);
254
- mockMap[suitefile] ?? (mockMap[suitefile] = {});
255
- mockMap[suitefile][fsPath] = factory || resolveMockPath(path, root, nmName);
363
+ async importActual(id, importer) {
364
+ const { path, external } = await this.resolvePath(id, importer);
365
+ const fsPath = this.getActualPath(path, external);
366
+ const result = await this.request(fsPath);
367
+ return result;
368
+ }
369
+ async importMock(id, importer) {
370
+ const { path, external } = await this.resolvePath(id, importer);
371
+ let mock = this.getDependencyMock(path);
372
+ if (mock === void 0)
373
+ mock = this.resolveMockPath(path, external);
374
+ if (mock === null) {
375
+ const fsPath = this.getActualPath(path, external);
376
+ const mod = await this.request(fsPath);
377
+ return this.mockObject(mod);
256
378
  }
379
+ if (typeof mock === "function")
380
+ return this.callFunctionMock(path, mock);
381
+ return this.requestWithMock(mock);
257
382
  }
258
- function clearMocks({ clearMocks: clearMocks2, mockReset, restoreMocks }) {
259
- if (!clearMocks2 && !mockReset && !restoreMocks)
383
+ async requestWithMock(dep) {
384
+ var _a;
385
+ await this.resolveMocks();
386
+ const mock = this.getDependencyMock(dep);
387
+ if (mock === null) {
388
+ const cacheName = `${dep}__mock`;
389
+ const cache = this.moduleCache.get(cacheName);
390
+ if (cache == null ? void 0 : cache.exports)
391
+ return cache.exports;
392
+ const cacheKey = toFilePath(dep, this.root);
393
+ const mod = ((_a = this.moduleCache.get(cacheKey)) == null ? void 0 : _a.exports) || await this.request(dep);
394
+ const exports = this.mockObject(mod);
395
+ this.emit("mocked", cacheName, { exports });
396
+ return exports;
397
+ }
398
+ if (typeof mock === "function")
399
+ return this.callFunctionMock(dep, mock);
400
+ if (typeof mock === "string")
401
+ dep = mock;
402
+ return this.request(dep);
403
+ }
404
+ clearMocks({ clearMocks, mockReset, restoreMocks }) {
405
+ if (!clearMocks && !mockReset && !restoreMocks)
260
406
  return;
261
407
  spies.forEach((s) => {
262
408
  if (restoreMocks)
263
409
  s.mockRestore();
264
410
  else if (mockReset)
265
411
  s.mockReset();
266
- else if (clearMocks2)
412
+ else if (clearMocks)
267
413
  s.mockClear();
268
414
  });
269
415
  }
270
- function resolveDependency(dep) {
271
- if (dep.startsWith("/node_modules/"))
272
- return mergeSlashes(`/@fs/${join(root, dep)}`);
273
- return normalizeId(dep);
274
- }
275
- return {
276
- mockPath,
277
- unmockPath,
278
- clearMocks,
279
- getActualPath,
280
- mockObject,
281
- getSuiteFilepath,
282
- resolveMockPath,
283
- resolveDependency
284
- };
416
+ queueMock(id, importer, factory) {
417
+ pendingIds.push({ type: "mock", id, importer, factory });
418
+ }
419
+ queueUnmock(id, importer) {
420
+ pendingIds.push({ type: "unmock", id, importer });
421
+ }
422
+ withRequest(request) {
423
+ return new VitestMocker(this.options, this.moduleCache, request);
424
+ }
285
425
  }
286
426
 
287
427
  async function executeInViteNode(options) {
@@ -295,82 +435,18 @@ class VitestRunner extends ViteNodeRunner {
295
435
  constructor(options) {
296
436
  super(options);
297
437
  this.options = options;
298
- options.requestStubs = options.requestStubs || {
299
- "/@vite/client": {
300
- injectQuery: (id) => id,
301
- createHotContext() {
302
- return {
303
- accept: () => {
304
- },
305
- prune: () => {
306
- }
307
- };
308
- },
309
- updateStyle() {
310
- }
311
- }
312
- };
313
- this.mocker = createMocker(this.root, options.mockMap);
438
+ this.mocker = new VitestMocker(options, this.moduleCache);
314
439
  }
315
440
  prepareContext(context) {
316
- const suite = this.mocker.getSuiteFilepath();
317
- const mockMap = this.options.mockMap;
318
441
  const request = context.__vite_ssr_import__;
319
- const callFunctionMock = async (dep, mock) => {
320
- var _a;
321
- const name = `${dep}__mock`;
322
- const cached = (_a = this.moduleCache.get(name)) == null ? void 0 : _a.exports;
323
- if (cached)
324
- return cached;
325
- const exports = await mock();
326
- this.setCache(name, { exports });
327
- return exports;
328
- };
329
- const requestWithMock = async (dep) => {
330
- var _a;
331
- const mocks = mockMap[suite || ""] || {};
332
- const mock = mocks[this.mocker.resolveDependency(dep)];
333
- if (mock === null) {
334
- const mockedKey = `${dep}__mock`;
335
- const cache = this.moduleCache.get(mockedKey);
336
- if (cache == null ? void 0 : cache.exports)
337
- return cache.exports;
338
- const cacheKey = toFilePath(dep, this.root);
339
- const mod = ((_a = this.moduleCache.get(cacheKey)) == null ? void 0 : _a.exports) || await request(dep);
340
- const exports = this.mocker.mockObject(mod);
341
- this.setCache(mockedKey, { exports });
342
- return exports;
343
- }
344
- if (typeof mock === "function")
345
- return callFunctionMock(dep, mock);
346
- if (typeof mock === "string")
347
- dep = mock;
348
- return request(dep);
349
- };
350
- const importActual = (path, nmName) => {
351
- return request(this.mocker.getActualPath(path, nmName));
352
- };
353
- const importMock = async (path, nmName) => {
354
- if (!suite)
355
- throw new Error("You can import mock only inside of a running test");
356
- const mock = (mockMap[suite] || {})[path] || this.mocker.resolveMockPath(path, this.root, nmName);
357
- if (mock === null) {
358
- const fsPath = this.mocker.getActualPath(path, nmName);
359
- const mod = await request(fsPath);
360
- return this.mocker.mockObject(mod);
361
- }
362
- if (typeof mock === "function")
363
- return callFunctionMock(path, mock);
364
- return requestWithMock(mock);
365
- };
442
+ const mocker = this.mocker.withRequest(request);
443
+ mocker.on("mocked", (dep, module) => {
444
+ this.setCache(dep, module);
445
+ });
366
446
  return Object.assign(context, {
367
- __vite_ssr_import__: requestWithMock,
368
- __vite_ssr_dynamic_import__: requestWithMock,
369
- __vitest__mock__: this.mocker.mockPath,
370
- __vitest__unmock__: this.mocker.unmockPath,
371
- __vitest__importActual__: importActual,
372
- __vitest__importMock__: importMock,
373
- __vitest__clearMocks__: this.mocker.clearMocks
447
+ __vite_ssr_import__: (dep) => mocker.requestWithMock(dep),
448
+ __vite_ssr_dynamic_import__: (dep) => mocker.requestWithMock(dep),
449
+ __vitest_mocker__: mocker
374
450
  });
375
451
  }
376
452
  }
@@ -397,9 +473,12 @@ async function startViteNode(ctx) {
397
473
  fetchModule(id) {
398
474
  return rpc().fetch(id);
399
475
  },
476
+ resolveId(id, importer) {
477
+ return rpc().resolveId(id, importer);
478
+ },
400
479
  moduleCache,
401
480
  mockMap,
402
- interpretDefault: config.deps.interpretDefault ?? true,
481
+ interopDefault: config.deps.interopDefault ?? true,
403
482
  root: config.root,
404
483
  base: config.base
405
484
  }))[0];
@@ -441,4 +520,4 @@ async function run(ctx) {
441
520
  }
442
521
 
443
522
  export { collect, run };
444
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2VyLmpzIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMvcGF0aC50cyIsIi4uLy4uL3ZpdGUtbm9kZS9kaXN0L2NsaWVudC5qcyIsIi4uL3NyYy9ub2RlL21vY2tlci50cyIsIi4uL3NyYy9ub2RlL2V4ZWN1dGUudHMiLCIuLi9zcmMvcnVudGltZS93b3JrZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUlkKGlkOiBzdHJpbmcsIGJhc2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoYmFzZSAmJiBpZC5zdGFydHNXaXRoKGJhc2UpKVxuICAgIGlkID0gYC8ke2lkLnNsaWNlKGJhc2UubGVuZ3RoKX1gXG5cbiAgcmV0dXJuIGlkXG4gICAgLnJlcGxhY2UoL15cXC9AaWRcXC9fX3gwMF9fLywgJ1xcMCcpIC8vIHZpcnR1YWwgbW9kdWxlcyBzdGFydCB3aXRoIGBcXDBgXG4gICAgLnJlcGxhY2UoL15cXC9AaWRcXC8vLCAnJylcbiAgICAucmVwbGFjZSgvXl9fdml0ZS1icm93c2VyLWV4dGVybmFsOi8sICcnKVxuICAgIC5yZXBsYWNlKC9ebm9kZTovLCAnJylcbiAgICAucmVwbGFjZSgvWz8mXXY9XFx3Ky8sICc/JykgLy8gcmVtb3ZlID92PSBxdWVyeVxuICAgIC5yZXBsYWNlKC9cXD8kLywgJycpIC8vIHJlbW92ZSBlbmQgcXVlcnkgbWFya1xufVxuIiwiaW1wb3J0IHsgYnVpbHRpbk1vZHVsZXMsIGNyZWF0ZVJlcXVpcmUgfSBmcm9tICdtb2R1bGUnO1xuaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCwgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ3VybCc7XG5pbXBvcnQgdm0gZnJvbSAndm0nO1xuaW1wb3J0IHsgcmVzb2x2ZSwgZGlybmFtZSB9IGZyb20gJ3BhdGhlJztcbmltcG9ydCB7IHNsYXNoLCBub3JtYWxpemVJZCwgdG9GaWxlUGF0aCwgaXNQcmltaXRpdmUgfSBmcm9tICcuL3V0aWxzLmpzJztcblxuY2xhc3MgVml0ZU5vZGVSdW5uZXIge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnJvb3QgPSBvcHRpb25zLnJvb3QgfHwgcHJvY2Vzcy5jd2QoKTtcbiAgICB0aGlzLm1vZHVsZUNhY2hlID0gb3B0aW9ucy5tb2R1bGVDYWNoZSB8fCBuZXcgTWFwKCk7XG4gICAgdGhpcy5leHRlcm5hbENhY2hlID0gbmV3IE1hcCgpO1xuICAgIGJ1aWx0aW5Nb2R1bGVzLmZvckVhY2goKG0pID0+IHRoaXMuZXh0ZXJuYWxDYWNoZS5zZXQobSwgbSkpO1xuICB9XG4gIGFzeW5jIGV4ZWN1dGVGaWxlKGZpbGUpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jYWNoZWRSZXF1ZXN0KGAvQGZzLyR7c2xhc2gocmVzb2x2ZShmaWxlKSl9YCwgW10pO1xuICB9XG4gIGFzeW5jIGV4ZWN1dGVJZChpZCkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNhY2hlZFJlcXVlc3QoaWQsIFtdKTtcbiAgfVxuICBhc3luYyBjYWNoZWRSZXF1ZXN0KHJhd0lkLCBjYWxsc3RhY2spIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IGlkID0gbm9ybWFsaXplSWQocmF3SWQsIHRoaXMub3B0aW9ucy5iYXNlKTtcbiAgICBjb25zdCBmc1BhdGggPSB0b0ZpbGVQYXRoKGlkLCB0aGlzLnJvb3QpO1xuICAgIGlmICgoX2EgPSB0aGlzLm1vZHVsZUNhY2hlLmdldChmc1BhdGgpKSA9PSBudWxsID8gdm9pZCAwIDogX2EucHJvbWlzZSlcbiAgICAgIHJldHVybiAoX2IgPSB0aGlzLm1vZHVsZUNhY2hlLmdldChmc1BhdGgpKSA9PSBudWxsID8gdm9pZCAwIDogX2IucHJvbWlzZTtcbiAgICBjb25zdCBwcm9taXNlID0gdGhpcy5kaXJlY3RSZXF1ZXN0KGlkLCBmc1BhdGgsIGNhbGxzdGFjayk7XG4gICAgdGhpcy5zZXRDYWNoZShmc1BhdGgsIHsgcHJvbWlzZSB9KTtcbiAgICByZXR1cm4gYXdhaXQgcHJvbWlzZTtcbiAgfVxuICBhc3luYyBkaXJlY3RSZXF1ZXN0KGlkLCBmc1BhdGgsIGNhbGxzdGFjaykge1xuICAgIGNhbGxzdGFjayA9IFsuLi5jYWxsc3RhY2ssIGlkXTtcbiAgICBjb25zdCByZXF1ZXN0ID0gYXN5bmMgKGRlcCkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgaWYgKGNhbGxzdGFjay5pbmNsdWRlcyhkZXApKSB7XG4gICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gdG9GaWxlUGF0aChkZXAsIHRoaXMucm9vdCk7XG4gICAgICAgIGlmICghKChfYSA9IHRoaXMubW9kdWxlQ2FjaGUuZ2V0KGNhY2hlS2V5KSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmV4cG9ydHMpKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2lyY3VsYXIgZGVwZW5kZW5jeSBkZXRlY3RlZFxuU3RhY2s6XG4ke1suLi5jYWxsc3RhY2ssIGRlcF0ucmV2ZXJzZSgpLm1hcCgocCkgPT4gYC0gJHtwfWApLmpvaW4oXCJcXG5cIil9YCk7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZHVsZUNhY2hlLmdldChjYWNoZUtleSkuZXhwb3J0cztcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNhY2hlZFJlcXVlc3QoZGVwLCBjYWxsc3RhY2spO1xuICAgIH07XG4gICAgaWYgKHRoaXMub3B0aW9ucy5yZXF1ZXN0U3R1YnMgJiYgaWQgaW4gdGhpcy5vcHRpb25zLnJlcXVlc3RTdHVicylcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMucmVxdWVzdFN0dWJzW2lkXTtcbiAgICBjb25zdCB7IGNvZGU6IHRyYW5zZm9ybWVkLCBleHRlcm5hbGl6ZSB9ID0gYXdhaXQgdGhpcy5vcHRpb25zLmZldGNoTW9kdWxlKGlkKTtcbiAgICBpZiAoZXh0ZXJuYWxpemUpIHtcbiAgICAgIGNvbnN0IG1vZCA9IGF3YWl0IGludGVycHJldGVkSW1wb3J0KGV4dGVybmFsaXplLCB0aGlzLm9wdGlvbnMuaW50ZXJwcmV0RGVmYXVsdCA/PyB0cnVlKTtcbiAgICAgIHRoaXMuc2V0Q2FjaGUoZnNQYXRoLCB7IGV4cG9ydHM6IG1vZCB9KTtcbiAgICAgIHJldHVybiBtb2Q7XG4gICAgfVxuICAgIGlmICh0cmFuc2Zvcm1lZCA9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gbG9hZCAke2lkfWApO1xuICAgIGNvbnN0IHVybCA9IHBhdGhUb0ZpbGVVUkwoZnNQYXRoKS5ocmVmO1xuICAgIGNvbnN0IGV4cG9ydHMgPSB7fTtcbiAgICB0aGlzLnNldENhY2hlKGZzUGF0aCwgeyBjb2RlOiB0cmFuc2Zvcm1lZCwgZXhwb3J0cyB9KTtcbiAgICBjb25zdCBfX2ZpbGVuYW1lID0gZmlsZVVSTFRvUGF0aCh1cmwpO1xuICAgIGNvbnN0IG1vZHVsZVByb3h5ID0ge1xuICAgICAgc2V0IGV4cG9ydHModmFsdWUpIHtcbiAgICAgICAgZXhwb3J0QWxsKGV4cG9ydHMsIHZhbHVlKTtcbiAgICAgICAgZXhwb3J0cy5kZWZhdWx0ID0gdmFsdWU7XG4gICAgICB9LFxuICAgICAgZ2V0IGV4cG9ydHMoKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLmRlZmF1bHQ7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5wcmVwYXJlQ29udGV4dCh7XG4gICAgICBfX3ZpdGVfc3NyX2ltcG9ydF9fOiByZXF1ZXN0LFxuICAgICAgX192aXRlX3Nzcl9keW5hbWljX2ltcG9ydF9fOiByZXF1ZXN0LFxuICAgICAgX192aXRlX3Nzcl9leHBvcnRzX186IGV4cG9ydHMsXG4gICAgICBfX3ZpdGVfc3NyX2V4cG9ydEFsbF9fOiAob2JqKSA9PiBleHBvcnRBbGwoZXhwb3J0cywgb2JqKSxcbiAgICAgIF9fdml0ZV9zc3JfaW1wb3J0X21ldGFfXzogeyB1cmwgfSxcbiAgICAgIHJlcXVpcmU6IGNyZWF0ZVJlcXVpcmUodXJsKSxcbiAgICAgIGV4cG9ydHMsXG4gICAgICBtb2R1bGU6IG1vZHVsZVByb3h5LFxuICAgICAgX19maWxlbmFtZSxcbiAgICAgIF9fZGlybmFtZTogZGlybmFtZShfX2ZpbGVuYW1lKVxuICAgIH0pO1xuICAgIGNvbnN0IGZuID0gdm0ucnVuSW5UaGlzQ29udGV4dChgYXN5bmMgKCR7T2JqZWN0LmtleXMoY29udGV4dCkuam9pbihcIixcIil9KT0+e3ske3RyYW5zZm9ybWVkfVxufX1gLCB7XG4gICAgICBmaWxlbmFtZTogZnNQYXRoLFxuICAgICAgbGluZU9mZnNldDogMFxuICAgIH0pO1xuICAgIGF3YWl0IGZuKC4uLk9iamVjdC52YWx1ZXMoY29udGV4dCkpO1xuICAgIHJldHVybiBleHBvcnRzO1xuICB9XG4gIHByZXBhcmVDb250ZXh0KGNvbnRleHQpIHtcbiAgICByZXR1cm4gY29udGV4dDtcbiAgfVxuICBzZXRDYWNoZShpZCwgbW9kKSB7XG4gICAgaWYgKCF0aGlzLm1vZHVsZUNhY2hlLmhhcyhpZCkpXG4gICAgICB0aGlzLm1vZHVsZUNhY2hlLnNldChpZCwgbW9kKTtcbiAgICBlbHNlXG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMubW9kdWxlQ2FjaGUuZ2V0KGlkKSwgbW9kKTtcbiAgfVxufVxuZnVuY3Rpb24gaGFzTmVzdGVkRGVmYXVsdCh0YXJnZXQpIHtcbiAgcmV0dXJuIFwiX19lc01vZHVsZVwiIGluIHRhcmdldCAmJiB0YXJnZXQuX19lc01vZHVsZSAmJiBcImRlZmF1bHRcIiBpbiB0YXJnZXQuZGVmYXVsdDtcbn1cbmZ1bmN0aW9uIHByb3h5TWV0aG9kKG5hbWUsIHRyeURlZmF1bHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHRhcmdldCwga2V5LCAuLi5hcmdzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gUmVmbGVjdFtuYW1lXSh0YXJnZXQsIGtleSwgLi4uYXJncyk7XG4gICAgaWYgKGlzUHJpbWl0aXZlKHRhcmdldC5kZWZhdWx0KSlcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgaWYgKHRyeURlZmF1bHQgJiYga2V5ID09PSBcImRlZmF1bHRcIiB8fCB0eXBlb2YgcmVzdWx0ID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgcmV0dXJuIFJlZmxlY3RbbmFtZV0odGFyZ2V0LmRlZmF1bHQsIGtleSwgLi4uYXJncyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGludGVycHJldGVkSW1wb3J0KHBhdGgsIGludGVycHJldERlZmF1bHQpIHtcbiAgY29uc3QgbW9kID0gYXdhaXQgaW1wb3J0KHBhdGgpO1xuICBpZiAoaW50ZXJwcmV0RGVmYXVsdCAmJiBcImRlZmF1bHRcIiBpbiBtb2QpIHtcbiAgICBjb25zdCB0cnlEZWZhdWx0ID0gaGFzTmVzdGVkRGVmYXVsdChtb2QpO1xuICAgIHJldHVybiBuZXcgUHJveHkobW9kLCB7XG4gICAgICBnZXQ6IHByb3h5TWV0aG9kKFwiZ2V0XCIsIHRyeURlZmF1bHQpLFxuICAgICAgc2V0OiBwcm94eU1ldGhvZChcInNldFwiLCB0cnlEZWZhdWx0KSxcbiAgICAgIGhhczogcHJveHlNZXRob2QoXCJoYXNcIiwgdHJ5RGVmYXVsdCksXG4gICAgICBkZWxldGVQcm9wZXJ0eTogcHJveHlNZXRob2QoXCJkZWxldGVQcm9wZXJ0eVwiLCB0cnlEZWZhdWx0KVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBtb2Q7XG59XG5mdW5jdGlvbiBleHBvcnRBbGwoZXhwb3J0cywgc291cmNlTW9kdWxlKSB7XG4gIGZvciAoY29uc3Qga2V5IGluIHNvdXJjZU1vZHVsZSkge1xuICAgIGlmIChrZXkgIT09IFwiZGVmYXVsdFwiKSB7XG4gICAgICB0cnkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZU1vZHVsZVtrZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChfZXJyKSB7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB7IFZpdGVOb2RlUnVubmVyIH07XG4iLCJpbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkZGlyU3luYyB9IGZyb20gJ2ZzJ1xuaW1wb3J0IHsgaXNOb2RlQnVpbHRpbiB9IGZyb20gJ21sbHknXG5pbXBvcnQgeyBiYXNlbmFtZSwgZGlybmFtZSwgam9pbiwgcmVzb2x2ZSB9IGZyb20gJ3BhdGhlJ1xuaW1wb3J0IHsgc3BpZXMsIHNweU9uIH0gZnJvbSAnLi4vaW50ZWdyYXRpb25zL2plc3QtbW9jaydcbmltcG9ydCB7IG1lcmdlU2xhc2hlcywgbm9ybWFsaXplSWQgfSBmcm9tICcuLi91dGlscydcblxuZXhwb3J0IHR5cGUgU3VpdGVNb2NrcyA9IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGwgfCAoKCkgPT4gYW55KT4+XG5cbmZ1bmN0aW9uIHJlc29sdmVNb2NrUGF0aChtb2NrUGF0aDogc3RyaW5nLCByb290OiBzdHJpbmcsIGV4dGVybmFsOiBzdHJpbmcgfCBudWxsKSB7XG4gIGNvbnN0IHBhdGggPSBub3JtYWxpemVJZChleHRlcm5hbCB8fCBtb2NrUGF0aClcblxuICAvLyBpdCdzIGEgbm9kZV9tb2R1bGUgYWxpYXNcbiAgLy8gYWxsIG1vY2tzIHNob3VsZCBiZSBpbnNpZGUgPHJvb3Q+L19fbW9ja3NfX1xuICBpZiAoZXh0ZXJuYWwgfHwgaXNOb2RlQnVpbHRpbihtb2NrUGF0aCkpIHtcbiAgICBjb25zdCBtb2NrRGlybmFtZSA9IGRpcm5hbWUocGF0aCkgLy8gZm9yIG5lc3RlZCBtb2NrczogQHZ1ZXVzZS9pbnRlZ3JhdGlvbi91c2VKd3RcbiAgICBjb25zdCBiYXNlRmlsZW5hbWUgPSBiYXNlbmFtZShwYXRoKVxuICAgIGNvbnN0IG1vY2tGb2xkZXIgPSByZXNvbHZlKHJvb3QsICdfX21vY2tzX18nLCBtb2NrRGlybmFtZSlcblxuICAgIGlmICghZXhpc3RzU3luYyhtb2NrRm9sZGVyKSkgcmV0dXJuIG51bGxcblxuICAgIGNvbnN0IGZpbGVzID0gcmVhZGRpclN5bmMobW9ja0ZvbGRlcilcblxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgY29uc3QgW2Jhc2VuYW1lXSA9IGZpbGUuc3BsaXQoJy4nKVxuICAgICAgaWYgKGJhc2VuYW1lID09PSBiYXNlRmlsZW5hbWUpXG4gICAgICAgIHJldHVybiByZXNvbHZlKG1vY2tGb2xkZXIsIGZpbGUpLnJlcGxhY2Uocm9vdCwgJycpXG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IGRpciA9IGRpcm5hbWUocGF0aClcbiAgY29uc3QgYmFzZUlkID0gYmFzZW5hbWUocGF0aClcbiAgY29uc3QgZnVsbFBhdGggPSByZXNvbHZlKGRpciwgJ19fbW9ja3NfXycsIGJhc2VJZClcbiAgcmV0dXJuIGV4aXN0c1N5bmMoZnVsbFBhdGgpID8gZnVsbFBhdGgucmVwbGFjZShyb290LCAnJykgOiBudWxsXG59XG5cbmZ1bmN0aW9uIGdldE9iamVjdFR5cGUodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseSh2YWx1ZSkuc2xpY2UoOCwgLTEpXG59XG5cbmZ1bmN0aW9uIG1vY2tQcm90b3R5cGUocHJvdG86IGFueSkge1xuICBpZiAoIXByb3RvKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IG5ld1Byb3RvOiBhbnkgPSB7fVxuXG4gIGNvbnN0IHByb3RvRGVzY3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhwcm90bylcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgZm9yIChjb25zdCBkIGluIHByb3RvRGVzY3IpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3UHJvdG8sIGQsIHByb3RvRGVzY3JbZF0pXG5cbiAgICBpZiAodHlwZW9mIHByb3RvRGVzY3JbZF0udmFsdWUgPT09ICdmdW5jdGlvbicpXG4gICAgICBzcHlPbihuZXdQcm90bywgZCkubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KVxuICB9XG5cbiAgcmV0dXJuIG5ld1Byb3RvXG59XG5cbmZ1bmN0aW9uIG1vY2tPYmplY3Qob2JqOiBhbnkpIHtcbiAgY29uc3QgdHlwZSA9IGdldE9iamVjdFR5cGUob2JqKVxuXG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpXG4gICAgcmV0dXJuIFtdXG4gIGVsc2UgaWYgKHR5cGUgIT09ICdPYmplY3QnICYmIHR5cGUgIT09ICdNb2R1bGUnKVxuICAgIHJldHVybiBvYmpcblxuICBjb25zdCBuZXdPYmogPSB7IC4uLm9iaiB9XG5cbiAgY29uc3QgcHJvdG8gPSBtb2NrUHJvdG90eXBlKE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopKVxuICBPYmplY3Quc2V0UHJvdG90eXBlT2YobmV3T2JqLCBwcm90bylcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgZm9yIChjb25zdCBrIGluIG9iaikge1xuICAgIG5ld09ialtrXSA9IG1vY2tPYmplY3Qob2JqW2tdKVxuICAgIGNvbnN0IHR5cGUgPSBnZXRPYmplY3RUeXBlKG9ialtrXSlcblxuICAgIGlmICh0eXBlLmluY2x1ZGVzKCdGdW5jdGlvbicpICYmICFvYmpba10uX19pc1NweSkge1xuICAgICAgc3B5T24obmV3T2JqLCBrKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3T2JqW2tdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMCB9KSAvLyB0aW55c3B5IHJldGFpbnMgbGVuZ3RoLCBidXQgamVzdCBkb2VzbnRcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ld09ialxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja2VyKHJvb3Q6IHN0cmluZywgbW9ja01hcDogU3VpdGVNb2Nrcykge1xuICBmdW5jdGlvbiBnZXRTdWl0ZUZpbGVwYXRoKCkge1xuICAgIHJldHVybiBwcm9jZXNzLl9fdml0ZXN0X3dvcmtlcl9fPy5maWxlcGF0aFxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QWN0dWFsUGF0aChwYXRoOiBzdHJpbmcsIGV4dGVybmFsOiBzdHJpbmcpIHtcbiAgICBpZiAoZXh0ZXJuYWwpXG4gICAgICByZXR1cm4gbWVyZ2VTbGFzaGVzKGAvQGZzLyR7cGF0aH1gKVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZUlkKHBhdGgucmVwbGFjZShyb290LCAnJykpXG4gIH1cblxuICBmdW5jdGlvbiB1bm1vY2tQYXRoKHBhdGg6IHN0cmluZywgbm1OYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzdWl0ZWZpbGUgPSBnZXRTdWl0ZUZpbGVwYXRoKClcblxuICAgIGlmIChzdWl0ZWZpbGUpIHtcbiAgICAgIGNvbnN0IGZzUGF0aCA9IGdldEFjdHVhbFBhdGgocGF0aCwgbm1OYW1lKVxuICAgICAgbW9ja01hcFtzdWl0ZWZpbGVdID8/PSB7fVxuICAgICAgZGVsZXRlIG1vY2tNYXBbc3VpdGVmaWxlXVtmc1BhdGhdXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbW9ja1BhdGgocGF0aDogc3RyaW5nLCBubU5hbWU6IHN0cmluZywgZmFjdG9yeT86ICgpID0+IGFueSkge1xuICAgIGNvbnN0IHN1aXRlZmlsZSA9IGdldFN1aXRlRmlsZXBhdGgoKVxuXG4gICAgaWYgKHN1aXRlZmlsZSkge1xuICAgICAgY29uc3QgZnNQYXRoID0gZ2V0QWN0dWFsUGF0aChwYXRoLCBubU5hbWUpXG4gICAgICBtb2NrTWFwW3N1aXRlZmlsZV0gPz89IHt9XG4gICAgICBtb2NrTWFwW3N1aXRlZmlsZV1bZnNQYXRoXSA9IGZhY3RvcnkgfHwgcmVzb2x2ZU1vY2tQYXRoKHBhdGgsIHJvb3QsIG5tTmFtZSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhck1vY2tzKHsgY2xlYXJNb2NrcywgbW9ja1Jlc2V0LCByZXN0b3JlTW9ja3MgfTogeyBjbGVhck1vY2tzOiBib29sZWFuOyBtb2NrUmVzZXQ6IGJvb2xlYW47IHJlc3RvcmVNb2NrczogYm9vbGVhbiB9KSB7XG4gICAgaWYgKCFjbGVhck1vY2tzICYmICFtb2NrUmVzZXQgJiYgIXJlc3RvcmVNb2NrcylcbiAgICAgIHJldHVyblxuXG4gICAgc3BpZXMuZm9yRWFjaCgocykgPT4ge1xuICAgICAgaWYgKHJlc3RvcmVNb2NrcylcbiAgICAgICAgcy5tb2NrUmVzdG9yZSgpXG4gICAgICBlbHNlIGlmIChtb2NrUmVzZXQpXG4gICAgICAgIHMubW9ja1Jlc2V0KClcbiAgICAgIGVsc2UgaWYgKGNsZWFyTW9ja3MpXG4gICAgICAgIHMubW9ja0NsZWFyKClcbiAgICB9KVxuICB9XG5cbiAgLy8gbnBtIHJlc29sdmVzIGFzIC9ub2RlX21vZHVsZXMsIGJ1dCB3ZSBzdG9yZSBhcyAvQGZzLy4uLi9ub2RlX21vZHVsZXNcbiAgZnVuY3Rpb24gcmVzb2x2ZURlcGVuZGVuY3koZGVwOiBzdHJpbmcpIHtcbiAgICBpZiAoZGVwLnN0YXJ0c1dpdGgoJy9ub2RlX21vZHVsZXMvJykpXG4gICAgICByZXR1cm4gbWVyZ2VTbGFzaGVzKGAvQGZzLyR7am9pbihyb290LCBkZXApfWApXG5cbiAgICByZXR1cm4gbm9ybWFsaXplSWQoZGVwKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtb2NrUGF0aCxcbiAgICB1bm1vY2tQYXRoLFxuICAgIGNsZWFyTW9ja3MsXG4gICAgZ2V0QWN0dWFsUGF0aCxcblxuICAgIG1vY2tPYmplY3QsXG4gICAgZ2V0U3VpdGVGaWxlcGF0aCxcbiAgICByZXNvbHZlTW9ja1BhdGgsXG4gICAgcmVzb2x2ZURlcGVuZGVuY3ksXG4gIH1cbn1cbiIsImltcG9ydCB7IFZpdGVOb2RlUnVubmVyIH0gZnJvbSAndml0ZS1ub2RlL2NsaWVudCdcbmltcG9ydCB7IHRvRmlsZVBhdGggfSBmcm9tICd2aXRlLW5vZGUvdXRpbHMnXG5pbXBvcnQgdHlwZSB7IFZpdGVOb2RlUnVubmVyT3B0aW9ucyB9IGZyb20gJ3ZpdGUtbm9kZSdcbmltcG9ydCB0eXBlIHsgU3VpdGVNb2NrcyB9IGZyb20gJy4vbW9ja2VyJ1xuaW1wb3J0IHsgY3JlYXRlTW9ja2VyIH0gZnJvbSAnLi9tb2NrZXInXG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0ZU9wdGlvbnMgZXh0ZW5kcyBWaXRlTm9kZVJ1bm5lck9wdGlvbnMge1xuICBmaWxlczogc3RyaW5nW11cbiAgbW9ja01hcDogU3VpdGVNb2Nrc1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUluVml0ZU5vZGUob3B0aW9uczogRXhlY3V0ZU9wdGlvbnMpIHtcbiAgY29uc3QgcnVubmVyID0gbmV3IFZpdGVzdFJ1bm5lcihvcHRpb25zKVxuXG4gIGNvbnN0IHJlc3VsdDogYW55W10gPSBbXVxuICBmb3IgKGNvbnN0IGZpbGUgb2Ygb3B0aW9ucy5maWxlcylcbiAgICByZXN1bHQucHVzaChhd2FpdCBydW5uZXIuZXhlY3V0ZUZpbGUoZmlsZSkpXG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5leHBvcnQgY2xhc3MgVml0ZXN0UnVubmVyIGV4dGVuZHMgVml0ZU5vZGVSdW5uZXIge1xuICBtb2NrZXI6IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZU1vY2tlcj5cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgb3B0aW9uczogRXhlY3V0ZU9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zKVxuXG4gICAgb3B0aW9ucy5yZXF1ZXN0U3R1YnMgPSBvcHRpb25zLnJlcXVlc3RTdHVicyB8fCB7XG4gICAgICAnL0B2aXRlL2NsaWVudCc6IHtcbiAgICAgICAgaW5qZWN0UXVlcnk6IChpZDogc3RyaW5nKSA9PiBpZCxcbiAgICAgICAgY3JlYXRlSG90Q29udGV4dCgpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWNjZXB0OiAoKSA9PiB7fSxcbiAgICAgICAgICAgIHBydW5lOiAoKSA9PiB7fSxcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHVwZGF0ZVN0eWxlKCkge30sXG4gICAgICB9LFxuICAgIH1cblxuICAgIHRoaXMubW9ja2VyID0gY3JlYXRlTW9ja2VyKHRoaXMucm9vdCwgb3B0aW9ucy5tb2NrTWFwKVxuICB9XG5cbiAgcHJlcGFyZUNvbnRleHQoY29udGV4dDogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIGNvbnN0IHN1aXRlID0gdGhpcy5tb2NrZXIuZ2V0U3VpdGVGaWxlcGF0aCgpXG4gICAgY29uc3QgbW9ja01hcCA9IHRoaXMub3B0aW9ucy5tb2NrTWFwXG4gICAgY29uc3QgcmVxdWVzdCA9IGNvbnRleHQuX192aXRlX3Nzcl9pbXBvcnRfX1xuXG4gICAgY29uc3QgY2FsbEZ1bmN0aW9uTW9jayA9IGFzeW5jKGRlcDogc3RyaW5nLCBtb2NrOiAoKSA9PiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBgJHtkZXB9X19tb2NrYFxuICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy5tb2R1bGVDYWNoZS5nZXQobmFtZSk/LmV4cG9ydHNcbiAgICAgIGlmIChjYWNoZWQpXG4gICAgICAgIHJldHVybiBjYWNoZWRcbiAgICAgIGNvbnN0IGV4cG9ydHMgPSBhd2FpdCBtb2NrKClcbiAgICAgIHRoaXMuc2V0Q2FjaGUobmFtZSwgeyBleHBvcnRzIH0pXG4gICAgICByZXR1cm4gZXhwb3J0c1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RXaXRoTW9jayA9IGFzeW5jKGRlcDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBtb2NrcyA9IG1vY2tNYXBbc3VpdGUgfHwgJyddIHx8IHt9XG4gICAgICBjb25zdCBtb2NrID0gbW9ja3NbdGhpcy5tb2NrZXIucmVzb2x2ZURlcGVuZGVuY3koZGVwKV1cbiAgICAgIGlmIChtb2NrID09PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG1vY2tlZEtleSA9IGAke2RlcH1fX21vY2tgXG4gICAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy5tb2R1bGVDYWNoZS5nZXQobW9ja2VkS2V5KVxuICAgICAgICBpZiAoY2FjaGU/LmV4cG9ydHMpXG4gICAgICAgICAgcmV0dXJuIGNhY2hlLmV4cG9ydHNcbiAgICAgICAgY29uc3QgY2FjaGVLZXkgPSB0b0ZpbGVQYXRoKGRlcCwgdGhpcy5yb290KVxuICAgICAgICBjb25zdCBtb2QgPSB0aGlzLm1vZHVsZUNhY2hlLmdldChjYWNoZUtleSk/LmV4cG9ydHMgfHwgYXdhaXQgcmVxdWVzdChkZXApXG4gICAgICAgIGNvbnN0IGV4cG9ydHMgPSB0aGlzLm1vY2tlci5tb2NrT2JqZWN0KG1vZClcbiAgICAgICAgdGhpcy5zZXRDYWNoZShtb2NrZWRLZXksIHsgZXhwb3J0cyB9KVxuICAgICAgICByZXR1cm4gZXhwb3J0c1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBtb2NrID09PSAnZnVuY3Rpb24nKVxuICAgICAgICByZXR1cm4gY2FsbEZ1bmN0aW9uTW9jayhkZXAsIG1vY2spXG4gICAgICBpZiAodHlwZW9mIG1vY2sgPT09ICdzdHJpbmcnKVxuICAgICAgICBkZXAgPSBtb2NrXG4gICAgICByZXR1cm4gcmVxdWVzdChkZXApXG4gICAgfVxuICAgIGNvbnN0IGltcG9ydEFjdHVhbCA9IChwYXRoOiBzdHJpbmcsIG5tTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gcmVxdWVzdCh0aGlzLm1vY2tlci5nZXRBY3R1YWxQYXRoKHBhdGgsIG5tTmFtZSkpXG4gICAgfVxuICAgIGNvbnN0IGltcG9ydE1vY2sgPSBhc3luYyhwYXRoOiBzdHJpbmcsIG5tTmFtZTogc3RyaW5nKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICAgIGlmICghc3VpdGUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IGNhbiBpbXBvcnQgbW9jayBvbmx5IGluc2lkZSBvZiBhIHJ1bm5pbmcgdGVzdCcpXG5cbiAgICAgIGNvbnN0IG1vY2sgPSAobW9ja01hcFtzdWl0ZV0gfHwge30pW3BhdGhdIHx8IHRoaXMubW9ja2VyLnJlc29sdmVNb2NrUGF0aChwYXRoLCB0aGlzLnJvb3QsIG5tTmFtZSlcbiAgICAgIGlmIChtb2NrID09PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGZzUGF0aCA9IHRoaXMubW9ja2VyLmdldEFjdHVhbFBhdGgocGF0aCwgbm1OYW1lKVxuICAgICAgICBjb25zdCBtb2QgPSBhd2FpdCByZXF1ZXN0KGZzUGF0aClcbiAgICAgICAgcmV0dXJuIHRoaXMubW9ja2VyLm1vY2tPYmplY3QobW9kKVxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBtb2NrID09PSAnZnVuY3Rpb24nKVxuICAgICAgICByZXR1cm4gY2FsbEZ1bmN0aW9uTW9jayhwYXRoLCBtb2NrKVxuICAgICAgcmV0dXJuIHJlcXVlc3RXaXRoTW9jayhtb2NrKVxuICAgIH1cblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKGNvbnRleHQsIHtcbiAgICAgIF9fdml0ZV9zc3JfaW1wb3J0X186IHJlcXVlc3RXaXRoTW9jayxcbiAgICAgIF9fdml0ZV9zc3JfZHluYW1pY19pbXBvcnRfXzogcmVxdWVzdFdpdGhNb2NrLFxuXG4gICAgICAvLyB2aXRlc3QubW9jayBBUElcbiAgICAgIF9fdml0ZXN0X19tb2NrX186IHRoaXMubW9ja2VyLm1vY2tQYXRoLFxuICAgICAgX192aXRlc3RfX3VubW9ja19fOiB0aGlzLm1vY2tlci51bm1vY2tQYXRoLFxuICAgICAgX192aXRlc3RfX2ltcG9ydEFjdHVhbF9fOiBpbXBvcnRBY3R1YWwsXG4gICAgICBfX3ZpdGVzdF9faW1wb3J0TW9ja19fOiBpbXBvcnRNb2NrLFxuICAgICAgLy8gc3BpZXMgZnJvbSAnamVzdC1tb2NrJyBhcmUgZGlmZmVyZW50IGluc2lkZSBzdWl0ZXMgYW5kIGV4ZWN1dGUsXG4gICAgICAvLyBzbyB3ZWUgbmVlZCB0byBjYWxsIHRoaXMgdHdpY2UgLSBpbnNpZGUgc3VpdGUgYW5kIGhlcmVcbiAgICAgIF9fdml0ZXN0X19jbGVhck1vY2tzX186IHRoaXMubW9ja2VyLmNsZWFyTW9ja3MsXG4gICAgfSlcbiAgfVxufVxuIiwiaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJ3BhdGhlJ1xuaW1wb3J0IHR5cGUgeyBCaXJwY1JldHVybiB9IGZyb20gJ2JpcnBjJ1xuaW1wb3J0IHsgY3JlYXRlQmlycGMgfSBmcm9tICdiaXJwYydcbmltcG9ydCB0eXBlIHsgTW9kdWxlQ2FjaGUsIFJlc29sdmVkQ29uZmlnLCBUZXN0LCBXb3JrZXJDb250ZXh0LCBXb3JrZXJSUEMgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IGRpc3REaXIgfSBmcm9tICcuLi9jb25zdGFudHMnXG5pbXBvcnQgeyBleGVjdXRlSW5WaXRlTm9kZSB9IGZyb20gJy4uL25vZGUvZXhlY3V0ZSdcbmltcG9ydCB7IHJwYyB9IGZyb20gJy4vcnBjJ1xuXG5sZXQgX3ZpdGVOb2RlOiB7XG4gIHJ1bjogKGZpbGVzOiBzdHJpbmdbXSwgY29uZmlnOiBSZXNvbHZlZENvbmZpZykgPT4gUHJvbWlzZTx2b2lkPlxuICBjb2xsZWN0OiAoZmlsZXM6IHN0cmluZ1tdLCBjb25maWc6IFJlc29sdmVkQ29uZmlnKSA9PiBQcm9taXNlPHZvaWQ+XG59XG5jb25zdCBtb2R1bGVDYWNoZTogTWFwPHN0cmluZywgTW9kdWxlQ2FjaGU+ID0gbmV3IE1hcCgpXG5jb25zdCBtb2NrTWFwID0ge31cblxuYXN5bmMgZnVuY3Rpb24gc3RhcnRWaXRlTm9kZShjdHg6IFdvcmtlckNvbnRleHQpIHtcbiAgaWYgKF92aXRlTm9kZSlcbiAgICByZXR1cm4gX3ZpdGVOb2RlXG5cbiAgY29uc3QgcHJvY2Vzc0V4aXQgPSBwcm9jZXNzLmV4aXRcblxuICBwcm9jZXNzLm9uKCdiZWZvcmVFeGl0JywgKGNvZGUpID0+IHtcbiAgICBycGMoKS5vbldvcmtlckV4aXQoY29kZSlcbiAgfSlcblxuICBwcm9jZXNzLmV4aXQgPSAoY29kZSA9IHByb2Nlc3MuZXhpdENvZGUgfHwgMCk6IG5ldmVyID0+IHtcbiAgICBycGMoKS5vbldvcmtlckV4aXQoY29kZSlcbiAgICByZXR1cm4gcHJvY2Vzc0V4aXQoY29kZSlcbiAgfVxuXG4gIGNvbnN0IHsgY29uZmlnIH0gPSBjdHhcblxuICBjb25zdCB7IHJ1biwgY29sbGVjdCB9ID0gKGF3YWl0IGV4ZWN1dGVJblZpdGVOb2RlKHtcbiAgICBmaWxlczogW1xuICAgICAgcmVzb2x2ZShkaXN0RGlyLCAnZW50cnkuanMnKSxcbiAgICBdLFxuICAgIGZldGNoTW9kdWxlKGlkKSB7XG4gICAgICByZXR1cm4gcnBjKCkuZmV0Y2goaWQpXG4gICAgfSxcbiAgICBtb2R1bGVDYWNoZSxcbiAgICBtb2NrTWFwLFxuICAgIGludGVycHJldERlZmF1bHQ6IGNvbmZpZy5kZXBzLmludGVycHJldERlZmF1bHQgPz8gdHJ1ZSxcbiAgICByb290OiBjb25maWcucm9vdCxcbiAgICBiYXNlOiBjb25maWcuYmFzZSxcbiAgfSkpWzBdXG5cbiAgX3ZpdGVOb2RlID0geyBydW4sIGNvbGxlY3QgfVxuXG4gIHJldHVybiBfdml0ZU5vZGVcbn1cblxuZnVuY3Rpb24gaW5pdChjdHg6IFdvcmtlckNvbnRleHQpIHtcbiAgaWYgKHByb2Nlc3MuX192aXRlc3Rfd29ya2VyX18gJiYgY3R4LmNvbmZpZy50aHJlYWRzICYmIGN0eC5jb25maWcuaXNvbGF0ZSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHdvcmtlciBmb3IgJHtjdHguZmlsZXMuam9pbignLCcpfSBhbHJlYWR5IGluaXRpYWxpemVkIGJ5ICR7cHJvY2Vzcy5fX3ZpdGVzdF93b3JrZXJfXy5jdHguZmlsZXMuam9pbignLCcpfS4gVGhpcyBpcyBwcm9iYWJseSBhbiBpbnRlcm5hbCBidWcgb2YgVml0ZXN0LmApXG5cbiAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJ1xcMCcpXG5cbiAgY29uc3QgeyBjb25maWcsIHBvcnQgfSA9IGN0eFxuXG4gIHByb2Nlc3MuX192aXRlc3Rfd29ya2VyX18gPSB7XG4gICAgY3R4LFxuICAgIG1vZHVsZUNhY2hlLFxuICAgIGNvbmZpZyxcbiAgICBycGM6IGNyZWF0ZUJpcnBjPFdvcmtlclJQQz4oXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZXZlbnROYW1lczogWydvblVzZXJDb25zb2xlTG9nJywgJ29uQ29sbGVjdGVkJywgJ29uV29ya2VyRXhpdCddLFxuICAgICAgICBwb3N0KHYpIHsgcG9ydC5wb3N0TWVzc2FnZSh2KSB9LFxuICAgICAgICBvbihmbikgeyBwb3J0LmFkZExpc3RlbmVyKCdtZXNzYWdlJywgZm4pIH0sXG4gICAgICB9LFxuICAgICksXG4gIH1cblxuICBpZiAoY3R4LmludmFsaWRhdGVzKVxuICAgIGN0eC5pbnZhbGlkYXRlcy5mb3JFYWNoKGkgPT4gbW9kdWxlQ2FjaGUuZGVsZXRlKGkpKVxuICBjdHguZmlsZXMuZm9yRWFjaChpID0+IG1vZHVsZUNhY2hlLmRlbGV0ZShpKSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbGxlY3QoY3R4OiBXb3JrZXJDb250ZXh0KSB7XG4gIGluaXQoY3R4KVxuICBjb25zdCB7IGNvbGxlY3QgfSA9IGF3YWl0IHN0YXJ0Vml0ZU5vZGUoY3R4KVxuICByZXR1cm4gY29sbGVjdChjdHguZmlsZXMsIGN0eC5jb25maWcpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW4oY3R4OiBXb3JrZXJDb250ZXh0KSB7XG4gIGluaXQoY3R4KVxuICBjb25zdCB7IHJ1biB9ID0gYXdhaXQgc3RhcnRWaXRlTm9kZShjdHgpXG4gIHJldHVybiBydW4oY3R4LmZpbGVzLCBjdHguY29uZmlnKVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIG5hbWVzcGFjZSBOb2RlSlMge1xuICAgIGludGVyZmFjZSBQcm9jZXNzIHtcbiAgICAgIF9fdml0ZXN0X3dvcmtlcl9fOiB7XG4gICAgICAgIGN0eDogV29ya2VyQ29udGV4dFxuICAgICAgICBjb25maWc6IFJlc29sdmVkQ29uZmlnXG4gICAgICAgIHJwYzogQmlycGNSZXR1cm48V29ya2VyUlBDPlxuICAgICAgICBjdXJyZW50PzogVGVzdFxuICAgICAgICBmaWxlcGF0aD86IHN0cmluZ1xuICAgICAgICBtb2R1bGVDYWNoZTogTWFwPHN0cmluZywgTW9kdWxlQ2FjaGU+XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXSwibmFtZXMiOlsibm9ybWFsaXplSWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFPLFNBQVMsV0FBVyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUU7QUFDdEMsRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztBQUNqQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDakw7O0FDQ0EsTUFBTSxjQUFjLENBQUM7QUFDckIsRUFBRSxXQUFXLENBQUMsT0FBTyxFQUFFO0FBQ3ZCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzlDLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7QUFDeEQsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFDbkMsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFD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
523
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2VyLmpzIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMvcGF0aC50cyIsIi4uLy4uL3ZpdGUtbm9kZS9kaXN0L2NsaWVudC5qcyIsIi4uLy4uL3ZpdGUtbm9kZS9kaXN0L3V0aWxzLmpzIiwiLi4vc3JjL25vZGUvbW9ja2VyLnRzIiwiLi4vc3JjL25vZGUvZXhlY3V0ZS50cyIsIi4uL3NyYy9ydW50aW1lL3dvcmtlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplSWQoaWQ6IHN0cmluZywgYmFzZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChiYXNlICYmIGlkLnN0YXJ0c1dpdGgoYmFzZSkpXG4gICAgaWQgPSBgLyR7aWQuc2xpY2UoYmFzZS5sZW5ndGgpfWBcblxuICByZXR1cm4gaWRcbiAgICAucmVwbGFjZSgvXlxcL0BpZFxcL19feDAwX18vLCAnXFwwJykgLy8gdmlydHVhbCBtb2R1bGVzIHN0YXJ0IHdpdGggYFxcMGBcbiAgICAucmVwbGFjZSgvXlxcL0BpZFxcLy8sICcnKVxuICAgIC5yZXBsYWNlKC9eX192aXRlLWJyb3dzZXItZXh0ZXJuYWw6LywgJycpXG4gICAgLnJlcGxhY2UoL15ub2RlOi8sICcnKVxuICAgIC5yZXBsYWNlKC9bPyZddj1cXHcrLywgJz8nKSAvLyByZW1vdmUgP3Y9IHF1ZXJ5XG4gICAgLnJlcGxhY2UoL1xcPyQvLCAnJykgLy8gcmVtb3ZlIGVuZCBxdWVyeSBtYXJrXG59XG4iLCJpbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSAnbW9kdWxlJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGgsIHBhdGhUb0ZpbGVVUkwgfSBmcm9tICd1cmwnO1xuaW1wb3J0IHZtIGZyb20gJ3ZtJztcbmltcG9ydCB7IGRpcm5hbWUsIHJlc29sdmUgfSBmcm9tICdwYXRoZSc7XG5cbmNvbnN0IGlzV2luZG93cyA9IHByb2Nlc3MucGxhdGZvcm0gPT09IFwid2luMzJcIjtcbmZ1bmN0aW9uIHNsYXNoKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpO1xufVxuZnVuY3Rpb24gbm9ybWFsaXplSWQoaWQsIGJhc2UpIHtcbiAgaWYgKGJhc2UgJiYgaWQuc3RhcnRzV2l0aChiYXNlKSlcbiAgICBpZCA9IGAvJHtpZC5zbGljZShiYXNlLmxlbmd0aCl9YDtcbiAgcmV0dXJuIGlkLnJlcGxhY2UoL15cXC9AaWRcXC9fX3gwMF9fLywgXCJcXDBcIikucmVwbGFjZSgvXlxcL0BpZFxcLy8sIFwiXCIpLnJlcGxhY2UoL15fX3ZpdGUtYnJvd3Nlci1leHRlcm5hbDovLCBcIlwiKS5yZXBsYWNlKC9ebm9kZTovLCBcIlwiKS5yZXBsYWNlKC9bPyZddj1cXHcrLywgXCI/XCIpLnJlcGxhY2UoL1xcPyQvLCBcIlwiKTtcbn1cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKHYpIHtcbiAgcmV0dXJuIHYgIT09IE9iamVjdCh2KTtcbn1cbmZ1bmN0aW9uIHRvRmlsZVBhdGgoaWQsIHJvb3QpIHtcbiAgbGV0IGFic29sdXRlID0gc2xhc2goaWQpLnN0YXJ0c1dpdGgoXCIvQGZzL1wiKSA/IGlkLnNsaWNlKDQpIDogaWQuc3RhcnRzV2l0aChkaXJuYW1lKHJvb3QpKSAmJiBkaXJuYW1lKHJvb3QpICE9PSBcIi9cIiA/IGlkIDogaWQuc3RhcnRzV2l0aChcIi9cIikgPyBzbGFzaChyZXNvbHZlKHJvb3QsIGlkLnNsaWNlKDEpKSkgOiBpZDtcbiAgaWYgKGFic29sdXRlLnN0YXJ0c1dpdGgoXCIvL1wiKSlcbiAgICBhYnNvbHV0ZSA9IGFic29sdXRlLnNsaWNlKDEpO1xuICByZXR1cm4gaXNXaW5kb3dzICYmIGFic29sdXRlLnN0YXJ0c1dpdGgoXCIvXCIpID8gZmlsZVVSTFRvUGF0aChwYXRoVG9GaWxlVVJMKGFic29sdXRlLnNsaWNlKDEpKS5ocmVmKSA6IGFic29sdXRlO1xufVxuXG5jb25zdCBERUZBVUxUX1JFUVVFU1RfU1RVQlMgPSB7XG4gIFwiL0B2aXRlL2NsaWVudFwiOiB7XG4gICAgaW5qZWN0UXVlcnk6IChpZCkgPT4gaWQsXG4gICAgY3JlYXRlSG90Q29udGV4dCgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICB9LFxuICAgICAgICBwcnVuZTogKCkgPT4ge1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0sXG4gICAgdXBkYXRlU3R5bGUoKSB7XG4gICAgfVxuICB9XG59O1xuY2xhc3MgVml0ZU5vZGVSdW5uZXIge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnJvb3QgPSBvcHRpb25zLnJvb3QgfHwgcHJvY2Vzcy5jd2QoKTtcbiAgICB0aGlzLm1vZHVsZUNhY2hlID0gb3B0aW9ucy5tb2R1bGVDYWNoZSB8fCBuZXcgTWFwKCk7XG4gIH1cbiAgYXN5bmMgZXhlY3V0ZUZpbGUoZmlsZSkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNhY2hlZFJlcXVlc3QoYC9AZnMvJHtzbGFzaChyZXNvbHZlKGZpbGUpKX1gLCBbXSk7XG4gIH1cbiAgYXN5bmMgZXhlY3V0ZUlkKGlkKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY2FjaGVkUmVxdWVzdChpZCwgW10pO1xuICB9XG4gIGFzeW5jIGNhY2hlZFJlcXVlc3QocmF3SWQsIGNhbGxzdGFjaykge1xuICAgIHZhciBfYSwgX2I7XG4gICAgY29uc3QgaWQgPSBub3JtYWxpemVJZChyYXdJZCwgdGhpcy5vcHRpb25zLmJhc2UpO1xuICAgIGlmICgoX2EgPSB0aGlzLm1vZHVsZUNhY2hlLmdldChpZCkpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wcm9taXNlKVxuICAgICAgcmV0dXJuIChfYiA9IHRoaXMubW9kdWxlQ2FjaGUuZ2V0KGlkKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLnByb21pc2U7XG4gICAgY29uc3QgZnNQYXRoID0gdG9GaWxlUGF0aChpZCwgdGhpcy5yb290KTtcbiAgICBjb25zdCBwcm9taXNlID0gdGhpcy5kaXJlY3RSZXF1ZXN0KGlkLCBmc1BhdGgsIGNhbGxzdGFjayk7XG4gICAgdGhpcy5zZXRDYWNoZShpZCwgeyBwcm9taXNlIH0pO1xuICAgIHJldHVybiBhd2FpdCBwcm9taXNlO1xuICB9XG4gIGFzeW5jIGRpcmVjdFJlcXVlc3QoaWQsIGZzUGF0aCwgY2FsbHN0YWNrKSB7XG4gICAgY2FsbHN0YWNrID0gWy4uLmNhbGxzdGFjaywgaWRdO1xuICAgIGNvbnN0IHJlcXVlc3QgPSBhc3luYyAoZGVwKSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBpZiAoY2FsbHN0YWNrLmluY2x1ZGVzKGRlcCkpIHtcbiAgICAgICAgaWYgKCEoKF9hID0gdGhpcy5tb2R1bGVDYWNoZS5nZXQoZGVwKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmV4cG9ydHMpKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgW3ZpdGUtbm9kZV0gQ2lyY3VsYXIgZGVwZW5kZW5jeSBkZXRlY3RlZFxuU3RhY2s6XG4ke1suLi5jYWxsc3RhY2ssIGRlcF0ucmV2ZXJzZSgpLm1hcCgocCkgPT4gYC0gJHtwfWApLmpvaW4oXCJcXG5cIil9YCk7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZHVsZUNhY2hlLmdldChkZXApLmV4cG9ydHM7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5jYWNoZWRSZXF1ZXN0KGRlcCwgY2FsbHN0YWNrKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlcXVlc3RTdHVicyA9IHRoaXMub3B0aW9ucy5yZXF1ZXN0U3R1YnMgfHwgREVGQVVMVF9SRVFVRVNUX1NUVUJTO1xuICAgIGlmIChpZCBpbiByZXF1ZXN0U3R1YnMpXG4gICAgICByZXR1cm4gcmVxdWVzdFN0dWJzW2lkXTtcbiAgICBjb25zdCB7IGNvZGU6IHRyYW5zZm9ybWVkLCBleHRlcm5hbGl6ZSB9ID0gYXdhaXQgdGhpcy5vcHRpb25zLmZldGNoTW9kdWxlKGlkKTtcbiAgICBpZiAoZXh0ZXJuYWxpemUpIHtcbiAgICAgIGNvbnN0IG1vZCA9IGF3YWl0IHRoaXMuaW50ZXJvcGVkSW1wb3J0KGV4dGVybmFsaXplKTtcbiAgICAgIHRoaXMuc2V0Q2FjaGUoaWQsIHsgZXhwb3J0czogbW9kIH0pO1xuICAgICAgcmV0dXJuIG1vZDtcbiAgICB9XG4gICAgaWYgKHRyYW5zZm9ybWVkID09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFt2aXRlLW5vZGVdIEZhaWxlZCB0byBsb2FkICR7aWR9YCk7XG4gICAgY29uc3QgdXJsID0gcGF0aFRvRmlsZVVSTChmc1BhdGgpLmhyZWY7XG4gICAgY29uc3QgZXhwb3J0cyA9IHt9O1xuICAgIHRoaXMuc2V0Q2FjaGUoaWQsIHsgY29kZTogdHJhbnNmb3JtZWQsIGV4cG9ydHMgfSk7XG4gICAgY29uc3QgX19maWxlbmFtZSA9IGZpbGVVUkxUb1BhdGgodXJsKTtcbiAgICBjb25zdCBtb2R1bGVQcm94eSA9IHtcbiAgICAgIHNldCBleHBvcnRzKHZhbHVlKSB7XG4gICAgICAgIGV4cG9ydEFsbChleHBvcnRzLCB2YWx1ZSk7XG4gICAgICAgIGV4cG9ydHMuZGVmYXVsdCA9IHZhbHVlO1xuICAgICAgfSxcbiAgICAgIGdldCBleHBvcnRzKCkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5kZWZhdWx0O1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMucHJlcGFyZUNvbnRleHQoe1xuICAgICAgX192aXRlX3Nzcl9pbXBvcnRfXzogcmVxdWVzdCxcbiAgICAgIF9fdml0ZV9zc3JfZHluYW1pY19pbXBvcnRfXzogcmVxdWVzdCxcbiAgICAgIF9fdml0ZV9zc3JfZXhwb3J0c19fOiBleHBvcnRzLFxuICAgICAgX192aXRlX3Nzcl9leHBvcnRBbGxfXzogKG9iaikgPT4gZXhwb3J0QWxsKGV4cG9ydHMsIG9iaiksXG4gICAgICBfX3ZpdGVfc3NyX2ltcG9ydF9tZXRhX186IHsgdXJsIH0sXG4gICAgICByZXF1aXJlOiBjcmVhdGVSZXF1aXJlKHVybCksXG4gICAgICBleHBvcnRzLFxuICAgICAgbW9kdWxlOiBtb2R1bGVQcm94eSxcbiAgICAgIF9fZmlsZW5hbWUsXG4gICAgICBfX2Rpcm5hbWU6IGRpcm5hbWUoX19maWxlbmFtZSlcbiAgICB9KTtcbiAgICBjb25zdCBmbiA9IHZtLnJ1bkluVGhpc0NvbnRleHQoYGFzeW5jICgke09iamVjdC5rZXlzKGNvbnRleHQpLmpvaW4oXCIsXCIpfSk9Pnt7JHt0cmFuc2Zvcm1lZH1cbn19YCwge1xuICAgICAgZmlsZW5hbWU6IGZzUGF0aCxcbiAgICAgIGxpbmVPZmZzZXQ6IDBcbiAgICB9KTtcbiAgICBhd2FpdCBmbiguLi5PYmplY3QudmFsdWVzKGNvbnRleHQpKTtcbiAgICByZXR1cm4gZXhwb3J0cztcbiAgfVxuICBwcmVwYXJlQ29udGV4dChjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH1cbiAgc2V0Q2FjaGUoaWQsIG1vZCkge1xuICAgIGlmICghdGhpcy5tb2R1bGVDYWNoZS5oYXMoaWQpKVxuICAgICAgdGhpcy5tb2R1bGVDYWNoZS5zZXQoaWQsIG1vZCk7XG4gICAgZWxzZVxuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLm1vZHVsZUNhY2hlLmdldChpZCksIG1vZCk7XG4gIH1cbiAgc2hvdWxkSW50ZXJvcChwYXRoLCBtb2QpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmludGVyb3BEZWZhdWx0ID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gIXBhdGguZW5kc1dpdGgoXCIubWpzXCIpICYmIFwiZGVmYXVsdFwiIGluIG1vZDtcbiAgfVxuICBhc3luYyBpbnRlcm9wZWRJbXBvcnQocGF0aCkge1xuICAgIGNvbnN0IG1vZCA9IGF3YWl0IGltcG9ydChwYXRoKTtcbiAgICBpZiAodGhpcy5zaG91bGRJbnRlcm9wKHBhdGgsIG1vZCkpIHtcbiAgICAgIGNvbnN0IHRyeURlZmF1bHQgPSB0aGlzLmhhc05lc3RlZERlZmF1bHQobW9kKTtcbiAgICAgIHJldHVybiBuZXcgUHJveHkobW9kLCB7XG4gICAgICAgIGdldDogcHJveHlNZXRob2QoXCJnZXRcIiwgdHJ5RGVmYXVsdCksXG4gICAgICAgIHNldDogcHJveHlNZXRob2QoXCJzZXRcIiwgdHJ5RGVmYXVsdCksXG4gICAgICAgIGhhczogcHJveHlNZXRob2QoXCJoYXNcIiwgdHJ5RGVmYXVsdCksXG4gICAgICAgIGRlbGV0ZVByb3BlcnR5OiBwcm94eU1ldGhvZChcImRlbGV0ZVByb3BlcnR5XCIsIHRyeURlZmF1bHQpXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG1vZDtcbiAgfVxuICBoYXNOZXN0ZWREZWZhdWx0KHRhcmdldCkge1xuICAgIHJldHVybiBcIl9fZXNNb2R1bGVcIiBpbiB0YXJnZXQgJiYgdGFyZ2V0Ll9fZXNNb2R1bGUgJiYgXCJkZWZhdWx0XCIgaW4gdGFyZ2V0LmRlZmF1bHQ7XG4gIH1cbn1cbmZ1bmN0aW9uIHByb3h5TWV0aG9kKG5hbWUsIHRyeURlZmF1bHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHRhcmdldCwga2V5LCAuLi5hcmdzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gUmVmbGVjdFtuYW1lXSh0YXJnZXQsIGtleSwgLi4uYXJncyk7XG4gICAgaWYgKGlzUHJpbWl0aXZlKHRhcmdldC5kZWZhdWx0KSlcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgaWYgKHRyeURlZmF1bHQgJiYga2V5ID09PSBcImRlZmF1bHRcIiB8fCB0eXBlb2YgcmVzdWx0ID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgcmV0dXJuIFJlZmxlY3RbbmFtZV0odGFyZ2V0LmRlZmF1bHQsIGtleSwgLi4uYXJncyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cbmZ1bmN0aW9uIGV4cG9ydEFsbChleHBvcnRzLCBzb3VyY2VNb2R1bGUpIHtcbiAgZm9yIChjb25zdCBrZXkgaW4gc291cmNlTW9kdWxlKSB7XG4gICAgaWYgKGtleSAhPT0gXCJkZWZhdWx0XCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlTW9kdWxlW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKF9lcnIpIHtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHsgREVGQVVMVF9SRVFVRVNUX1NUVUJTLCBWaXRlTm9kZVJ1bm5lciB9O1xuIiwiaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCwgcGF0aFRvRmlsZVVSTCB9IGZyb20gJ3VybCc7XG5pbXBvcnQgeyBkaXJuYW1lLCByZXNvbHZlIH0gZnJvbSAncGF0aGUnO1xuXG5jb25zdCBpc1dpbmRvd3MgPSBwcm9jZXNzLnBsYXRmb3JtID09PSBcIndpbjMyXCI7XG5mdW5jdGlvbiBzbGFzaChzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKTtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZUlkKGlkLCBiYXNlKSB7XG4gIGlmIChiYXNlICYmIGlkLnN0YXJ0c1dpdGgoYmFzZSkpXG4gICAgaWQgPSBgLyR7aWQuc2xpY2UoYmFzZS5sZW5ndGgpfWA7XG4gIHJldHVybiBpZC5yZXBsYWNlKC9eXFwvQGlkXFwvX194MDBfXy8sIFwiXFwwXCIpLnJlcGxhY2UoL15cXC9AaWRcXC8vLCBcIlwiKS5yZXBsYWNlKC9eX192aXRlLWJyb3dzZXItZXh0ZXJuYWw6LywgXCJcIikucmVwbGFjZSgvXm5vZGU6LywgXCJcIikucmVwbGFjZSgvWz8mXXY9XFx3Ky8sIFwiP1wiKS5yZXBsYWNlKC9cXD8kLywgXCJcIik7XG59XG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSh2KSB7XG4gIHJldHVybiB2ICE9PSBPYmplY3Qodik7XG59XG5mdW5jdGlvbiB0b0ZpbGVQYXRoKGlkLCByb290KSB7XG4gIGxldCBhYnNvbHV0ZSA9IHNsYXNoKGlkKS5zdGFydHNXaXRoKFwiL0Bmcy9cIikgPyBpZC5zbGljZSg0KSA6IGlkLnN0YXJ0c1dpdGgoZGlybmFtZShyb290KSkgJiYgZGlybmFtZShyb290KSAhPT0gXCIvXCIgPyBpZCA6IGlkLnN0YXJ0c1dpdGgoXCIvXCIpID8gc2xhc2gocmVzb2x2ZShyb290LCBpZC5zbGljZSgxKSkpIDogaWQ7XG4gIGlmIChhYnNvbHV0ZS5zdGFydHNXaXRoKFwiLy9cIikpXG4gICAgYWJzb2x1dGUgPSBhYnNvbHV0ZS5zbGljZSgxKTtcbiAgcmV0dXJuIGlzV2luZG93cyAmJiBhYnNvbHV0ZS5zdGFydHNXaXRoKFwiL1wiKSA/IGZpbGVVUkxUb1BhdGgocGF0aFRvRmlsZVVSTChhYnNvbHV0ZS5zbGljZSgxKSkuaHJlZikgOiBhYnNvbHV0ZTtcbn1cblxuZXhwb3J0IHsgaXNQcmltaXRpdmUsIGlzV2luZG93cywgbm9ybWFsaXplSWQsIHNsYXNoLCB0b0ZpbGVQYXRoIH07XG4iLCJpbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkZGlyU3luYyB9IGZyb20gJ2ZzJ1xuaW1wb3J0IHsgaXNOb2RlQnVpbHRpbiB9IGZyb20gJ21sbHknXG5pbXBvcnQgeyBiYXNlbmFtZSwgZGlybmFtZSwgam9pbiwgcmVzb2x2ZSB9IGZyb20gJ3BhdGhlJ1xuaW1wb3J0IHR5cGUgeyBNb2R1bGVDYWNoZSB9IGZyb20gJ3ZpdGUtbm9kZSdcbmltcG9ydCB7IHRvRmlsZVBhdGggfSBmcm9tICd2aXRlLW5vZGUvdXRpbHMnXG5pbXBvcnQgeyBzcGllcywgc3B5T24gfSBmcm9tICcuLi9pbnRlZ3JhdGlvbnMvamVzdC1tb2NrJ1xuaW1wb3J0IHsgbWVyZ2VTbGFzaGVzLCBub3JtYWxpemVJZCB9IGZyb20gJy4uL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBFeGVjdXRlT3B0aW9ucyB9IGZyb20gJy4vZXhlY3V0ZSdcblxuZXhwb3J0IHR5cGUgU3VpdGVNb2NrcyA9IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGwgfCAoKCkgPT4gdW5rbm93bik+PlxuXG50eXBlIENhbGxiYWNrID0gKC4uLmFyZ3M6IGFueVtdKSA9PiB1bmtub3duXG5cbmludGVyZmFjZSBQZW5kaW5nU3VpdGVNb2NrIHtcbiAgaWQ6IHN0cmluZ1xuICBpbXBvcnRlcjogc3RyaW5nXG4gIHR5cGU6ICdtb2NrJyB8ICd1bm1vY2snXG4gIGZhY3Rvcnk/OiAoKSA9PiB1bmtub3duXG59XG5cbmZ1bmN0aW9uIGdldE9iamVjdFR5cGUodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseSh2YWx1ZSkuc2xpY2UoOCwgLTEpXG59XG5cbmZ1bmN0aW9uIG1vY2tQcm90b3R5cGUocHJvdG86IGFueSkge1xuICBpZiAoIXByb3RvKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IG5ld1Byb3RvOiBhbnkgPSB7fVxuXG4gIGNvbnN0IHByb3RvRGVzY3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhwcm90bylcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgZm9yIChjb25zdCBkIGluIHByb3RvRGVzY3IpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3UHJvdG8sIGQsIHByb3RvRGVzY3JbZF0pXG5cbiAgICBpZiAodHlwZW9mIHByb3RvRGVzY3JbZF0udmFsdWUgPT09ICdmdW5jdGlvbicpXG4gICAgICBzcHlPbihuZXdQcm90bywgZCkubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KVxuICB9XG5cbiAgcmV0dXJuIG5ld1Byb3RvXG59XG5cbmNvbnN0IHBlbmRpbmdJZHM6IFBlbmRpbmdTdWl0ZU1vY2tbXSA9IFtdXG5cbmV4cG9ydCBjbGFzcyBWaXRlc3RNb2NrZXIge1xuICBwcml2YXRlIHJlcXVlc3QhOiAoZGVwOiBzdHJpbmcpID0+IHVua25vd25cblxuICBwcml2YXRlIHJvb3Q6IHN0cmluZ1xuICAvLyBwcml2YXRlIG1vY2tNYXA6IFN1aXRlTW9ja3NcblxuICBwcml2YXRlIGNhbGxiYWNrczogUmVjb3JkPHN0cmluZywgKCguLi5hcmdzOiBhbnlbXSkgPT4gdW5rbm93bilbXT4gPSB7fVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBvcHRpb25zOiBFeGVjdXRlT3B0aW9ucyxcbiAgICBwcml2YXRlIG1vZHVsZUNhY2hlOiBNYXA8c3RyaW5nLCBNb2R1bGVDYWNoZT4sXG4gICAgcmVxdWVzdD86IChkZXA6IHN0cmluZykgPT4gdW5rbm93bixcbiAgKSB7XG4gICAgdGhpcy5yb290ID0gdGhpcy5vcHRpb25zLnJvb3RcbiAgICAvLyB0aGlzLm1vY2tNYXAgPSBvcHRpb25zLm1vY2tNYXBcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0IVxuICB9XG5cbiAgZ2V0IG1vY2tNYXAoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5tb2NrTWFwXG4gIH1cblxuICBwdWJsaWMgb24oZXZlbnQ6IHN0cmluZywgY2I6IENhbGxiYWNrKSB7XG4gICAgdGhpcy5jYWxsYmFja3NbZXZlbnRdID8/PSBbXVxuICAgIHRoaXMuY2FsbGJhY2tzW2V2ZW50XS5wdXNoKGNiKVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0KGV2ZW50OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgKHRoaXMuY2FsbGJhY2tzW2V2ZW50XSA/PyBbXSkuZm9yRWFjaChmbiA9PiBmbiguLi5hcmdzKSlcbiAgfVxuXG4gIHB1YmxpYyBnZXRTdWl0ZUZpbGVwYXRoKCkge1xuICAgIHJldHVybiBwcm9jZXNzLl9fdml0ZXN0X3dvcmtlcl9fPy5maWxlcGF0aCB8fCAnZ2xvYmFsJ1xuICB9XG5cbiAgcHVibGljIGdldE1vY2tzKCkge1xuICAgIGNvbnN0IHN1aXRlID0gdGhpcy5nZXRTdWl0ZUZpbGVwYXRoKClcbiAgICBjb25zdCBzdWl0ZU1vY2tzID0gdGhpcy5tb2NrTWFwW3N1aXRlIHx8ICcnXVxuICAgIGNvbnN0IGdsb2JhbE1vY2tzID0gdGhpcy5tb2NrTWFwLmdsb2JhbFxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN1aXRlTW9ja3MsXG4gICAgICAuLi5nbG9iYWxNb2NrcyxcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc29sdmVQYXRoKGlkOiBzdHJpbmcsIGltcG9ydGVyOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXRoID0gYXdhaXQgdGhpcy5vcHRpb25zLnJlc29sdmVJZChpZCwgaW1wb3J0ZXIpXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhdGg6IG5vcm1hbGl6ZUlkKHBhdGg/LmlkIHx8IGlkKSxcbiAgICAgIGV4dGVybmFsOiBwYXRoPy5pZC5pbmNsdWRlcygnL25vZGVfbW9kdWxlcy8nKSA/IGlkIDogbnVsbCxcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc29sdmVNb2NrcygpIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChwZW5kaW5nSWRzLm1hcChhc3luYyhtb2NrKSA9PiB7XG4gICAgICBjb25zdCB7IHBhdGgsIGV4dGVybmFsIH0gPSBhd2FpdCB0aGlzLnJlc29sdmVQYXRoKG1vY2suaWQsIG1vY2suaW1wb3J0ZXIpXG4gICAgICBpZiAobW9jay50eXBlID09PSAndW5tb2NrJylcbiAgICAgICAgdGhpcy51bm1vY2tQYXRoKHBhdGgsIGV4dGVybmFsKVxuICAgICAgaWYgKG1vY2sudHlwZSA9PT0gJ21vY2snKVxuICAgICAgICB0aGlzLm1vY2tQYXRoKHBhdGgsIGV4dGVybmFsLCBtb2NrLmZhY3RvcnkpXG4gICAgfSkpXG5cbiAgICBwZW5kaW5nSWRzLmxlbmd0aCA9IDBcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2FsbEZ1bmN0aW9uTW9jayhkZXA6IHN0cmluZywgbW9jazogKCkgPT4gYW55KSB7XG4gICAgY29uc3QgY2FjaGVOYW1lID0gYCR7ZGVwfV9fbW9ja2BcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLm1vZHVsZUNhY2hlLmdldChjYWNoZU5hbWUpPy5leHBvcnRzXG4gICAgaWYgKGNhY2hlZClcbiAgICAgIHJldHVybiBjYWNoZWRcbiAgICBjb25zdCBleHBvcnRzID0gYXdhaXQgbW9jaygpXG4gICAgdGhpcy5lbWl0KCdtb2NrZWQnLCBjYWNoZU5hbWUsIHsgZXhwb3J0cyB9KVxuICAgIHJldHVybiBleHBvcnRzXG4gIH1cblxuICBwdWJsaWMgZ2V0RGVwZW5kZW5jeU1vY2soZGVwOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRNb2NrcygpW3RoaXMucmVzb2x2ZURlcGVuZGVuY3koZGVwKV1cbiAgfVxuXG4gIC8vIG5wbSByZXNvbHZlcyBhcyAvbm9kZV9tb2R1bGVzLCBidXQgd2Ugc3RvcmUgYXMgL0Bmcy8uLi4vbm9kZV9tb2R1bGVzXG4gIHB1YmxpYyByZXNvbHZlRGVwZW5kZW5jeShkZXA6IHN0cmluZykge1xuICAgIGlmIChkZXAuc3RhcnRzV2l0aCgnL25vZGVfbW9kdWxlcy8nKSlcbiAgICAgIGRlcCA9IG1lcmdlU2xhc2hlcyhgL0Bmcy8ke2pvaW4odGhpcy5yb290LCBkZXApfWApXG5cbiAgICByZXR1cm4gbm9ybWFsaXplSWQoZGVwKVxuICB9XG5cbiAgcHVibGljIGdldEFjdHVhbFBhdGgocGF0aDogc3RyaW5nLCBleHRlcm5hbDogc3RyaW5nIHwgbnVsbCkge1xuICAgIGlmIChleHRlcm5hbClcbiAgICAgIHJldHVybiBtZXJnZVNsYXNoZXMoYC9AZnMvJHtwYXRofWApXG5cbiAgICByZXR1cm4gbm9ybWFsaXplSWQocGF0aC5yZXBsYWNlKHRoaXMucm9vdCwgJycpKVxuICB9XG5cbiAgcHVibGljIHJlc29sdmVNb2NrUGF0aChtb2NrUGF0aDogc3RyaW5nLCBleHRlcm5hbDogc3RyaW5nIHwgbnVsbCkge1xuICAgIGNvbnN0IHBhdGggPSBub3JtYWxpemVJZChleHRlcm5hbCB8fCBtb2NrUGF0aClcblxuICAgIC8vIGl0J3MgYSBub2RlX21vZHVsZSBhbGlhc1xuICAgIC8vIGFsbCBtb2NrcyBzaG91bGQgYmUgaW5zaWRlIDxyb290Pi9fX21vY2tzX19cbiAgICBpZiAoZXh0ZXJuYWwgfHwgaXNOb2RlQnVpbHRpbihtb2NrUGF0aCkpIHtcbiAgICAgIGNvbnN0IG1vY2tEaXJuYW1lID0gZGlybmFtZShwYXRoKSAvLyBmb3IgbmVzdGVkIG1vY2tzOiBAdnVldXNlL2ludGVncmF0aW9uL3VzZUp3dFxuICAgICAgY29uc3QgYmFzZUZpbGVuYW1lID0gYmFzZW5hbWUocGF0aClcbiAgICAgIGNvbnN0IG1vY2tGb2xkZXIgPSByZXNvbHZlKHRoaXMucm9vdCwgJ19fbW9ja3NfXycsIG1vY2tEaXJuYW1lKVxuXG4gICAgICBpZiAoIWV4aXN0c1N5bmMobW9ja0ZvbGRlcikpIHJldHVybiBudWxsXG5cbiAgICAgIGNvbnN0IGZpbGVzID0gcmVhZGRpclN5bmMobW9ja0ZvbGRlcilcblxuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgIGNvbnN0IFtiYXNlbmFtZV0gPSBmaWxlLnNwbGl0KCcuJylcbiAgICAgICAgaWYgKGJhc2VuYW1lID09PSBiYXNlRmlsZW5hbWUpXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUobW9ja0ZvbGRlciwgZmlsZSkucmVwbGFjZSh0aGlzLnJvb3QsICcnKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGNvbnN0IGRpciA9IGRpcm5hbWUocGF0aClcbiAgICBjb25zdCBiYXNlSWQgPSBiYXNlbmFtZShwYXRoKVxuICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVzb2x2ZShkaXIsICdfX21vY2tzX18nLCBiYXNlSWQpXG4gICAgcmV0dXJuIGV4aXN0c1N5bmMoZnVsbFBhdGgpID8gZnVsbFBhdGgucmVwbGFjZSh0aGlzLnJvb3QsICcnKSA6IG51bGxcbiAgfVxuXG4gIHB1YmxpYyBtb2NrT2JqZWN0KG9iajogYW55KSB7XG4gICAgY29uc3QgdHlwZSA9IGdldE9iamVjdFR5cGUob2JqKVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSlcbiAgICAgIHJldHVybiBbXVxuICAgIGVsc2UgaWYgKHR5cGUgIT09ICdPYmplY3QnICYmIHR5cGUgIT09ICdNb2R1bGUnKVxuICAgICAgcmV0dXJuIG9ialxuXG4gICAgY29uc3QgbmV3T2JqID0geyAuLi5vYmogfVxuXG4gICAgY29uc3QgcHJvdG8gPSBtb2NrUHJvdG90eXBlKE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopKVxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihuZXdPYmosIHByb3RvKVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgZm9yIChjb25zdCBrIGluIG9iaikge1xuICAgICAgbmV3T2JqW2tdID0gdGhpcy5tb2NrT2JqZWN0KG9ialtrXSlcbiAgICAgIGNvbnN0IHR5cGUgPSBnZXRPYmplY3RUeXBlKG9ialtrXSlcblxuICAgICAgaWYgKHR5cGUuaW5jbHVkZXMoJ0Z1bmN0aW9uJykgJiYgIW9ialtrXS5fX2lzU3B5KSB7XG4gICAgICAgIHNweU9uKG5ld09iaiwgaykubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KVxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3T2JqW2tdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMCB9KSAvLyB0aW55c3B5IHJldGFpbnMgbGVuZ3RoLCBidXQgamVzdCBkb2VzbnRcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld09ialxuICB9XG5cbiAgcHVibGljIHVubW9ja1BhdGgocGF0aDogc3RyaW5nLCBleHRlcm5hbDogc3RyaW5nIHwgbnVsbCkge1xuICAgIGNvbnN0IHN1aXRlZmlsZSA9IHRoaXMuZ2V0U3VpdGVGaWxlcGF0aCgpXG5cbiAgICBjb25zdCBmc1BhdGggPSB0aGlzLmdldEFjdHVhbFBhdGgocGF0aCwgZXh0ZXJuYWwpXG5cbiAgICBpZiAodGhpcy5tb2NrTWFwW3N1aXRlZmlsZV0/Lltmc1BhdGhdKVxuICAgICAgZGVsZXRlIHRoaXMubW9ja01hcFtzdWl0ZWZpbGVdW2ZzUGF0aF1cbiAgfVxuXG4gIHB1YmxpYyBtb2NrUGF0aChwYXRoOiBzdHJpbmcsIGV4dGVybmFsOiBzdHJpbmcgfCBudWxsLCBmYWN0b3J5PzogKCkgPT4gYW55KSB7XG4gICAgY29uc3Qgc3VpdGVmaWxlID0gdGhpcy5nZXRTdWl0ZUZpbGVwYXRoKClcblxuICAgIGNvbnN0IGZzUGF0aCA9IHRoaXMuZ2V0QWN0dWFsUGF0aChwYXRoLCBleHRlcm5hbClcblxuICAgIHRoaXMubW9ja01hcFtzdWl0ZWZpbGVdID8/PSB7fVxuICAgIHRoaXMubW9ja01hcFtzdWl0ZWZpbGVdW2ZzUGF0aF0gPSBmYWN0b3J5IHx8IHRoaXMucmVzb2x2ZU1vY2tQYXRoKHBhdGgsIGV4dGVybmFsKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGltcG9ydEFjdHVhbDxUPihpZDogc3RyaW5nLCBpbXBvcnRlcjogc3RyaW5nKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgeyBwYXRoLCBleHRlcm5hbCB9ID0gYXdhaXQgdGhpcy5yZXNvbHZlUGF0aChpZCwgaW1wb3J0ZXIpXG4gICAgY29uc3QgZnNQYXRoID0gdGhpcy5nZXRBY3R1YWxQYXRoKHBhdGgsIGV4dGVybmFsKVxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdChmc1BhdGgpXG4gICAgcmV0dXJuIHJlc3VsdCBhcyBUXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaW1wb3J0TW9jayhpZDogc3RyaW5nLCBpbXBvcnRlcjogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCB7IHBhdGgsIGV4dGVybmFsIH0gPSBhd2FpdCB0aGlzLnJlc29sdmVQYXRoKGlkLCBpbXBvcnRlcilcblxuICAgIGxldCBtb2NrID0gdGhpcy5nZXREZXBlbmRlbmN5TW9jayhwYXRoKVxuXG4gICAgaWYgKG1vY2sgPT09IHVuZGVmaW5lZClcbiAgICAgIG1vY2sgPSB0aGlzLnJlc29sdmVNb2NrUGF0aChwYXRoLCBleHRlcm5hbClcblxuICAgIGlmIChtb2NrID09PSBudWxsKSB7XG4gICAgICBjb25zdCBmc1BhdGggPSB0aGlzLmdldEFjdHVhbFBhdGgocGF0aCwgZXh0ZXJuYWwpXG4gICAgICBjb25zdCBtb2QgPSBhd2FpdCB0aGlzLnJlcXVlc3QoZnNQYXRoKVxuICAgICAgcmV0dXJuIHRoaXMubW9ja09iamVjdChtb2QpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgbW9jayA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIHJldHVybiB0aGlzLmNhbGxGdW5jdGlvbk1vY2socGF0aCwgbW9jaylcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0V2l0aE1vY2sobW9jaylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZXF1ZXN0V2l0aE1vY2soZGVwOiBzdHJpbmcpIHtcbiAgICBhd2FpdCB0aGlzLnJlc29sdmVNb2NrcygpXG5cbiAgICBjb25zdCBtb2NrID0gdGhpcy5nZXREZXBlbmRlbmN5TW9jayhkZXApXG5cbiAgICBpZiAobW9jayA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgY2FjaGVOYW1lID0gYCR7ZGVwfV9fbW9ja2BcbiAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy5tb2R1bGVDYWNoZS5nZXQoY2FjaGVOYW1lKVxuICAgICAgaWYgKGNhY2hlPy5leHBvcnRzKVxuICAgICAgICByZXR1cm4gY2FjaGUuZXhwb3J0c1xuICAgICAgY29uc3QgY2FjaGVLZXkgPSB0b0ZpbGVQYXRoKGRlcCwgdGhpcy5yb290KVxuICAgICAgY29uc3QgbW9kID0gdGhpcy5tb2R1bGVDYWNoZS5nZXQoY2FjaGVLZXkpPy5leHBvcnRzIHx8IGF3YWl0IHRoaXMucmVxdWVzdChkZXApXG4gICAgICBjb25zdCBleHBvcnRzID0gdGhpcy5tb2NrT2JqZWN0KG1vZClcbiAgICAgIHRoaXMuZW1pdCgnbW9ja2VkJywgY2FjaGVOYW1lLCB7IGV4cG9ydHMgfSlcbiAgICAgIHJldHVybiBleHBvcnRzXG4gICAgfVxuICAgIGlmICh0eXBlb2YgbW9jayA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIHJldHVybiB0aGlzLmNhbGxGdW5jdGlvbk1vY2soZGVwLCBtb2NrKVxuICAgIGlmICh0eXBlb2YgbW9jayA9PT0gJ3N0cmluZycpXG4gICAgICBkZXAgPSBtb2NrXG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChkZXApXG4gIH1cblxuICBwdWJsaWMgY2xlYXJNb2Nrcyh7IGNsZWFyTW9ja3MsIG1vY2tSZXNldCwgcmVzdG9yZU1vY2tzIH06IHsgY2xlYXJNb2Nrcz86IGJvb2xlYW47IG1vY2tSZXNldD86IGJvb2xlYW47IHJlc3RvcmVNb2Nrcz86IGJvb2xlYW4gfSkge1xuICAgIGlmICghY2xlYXJNb2NrcyAmJiAhbW9ja1Jlc2V0ICYmICFyZXN0b3JlTW9ja3MpXG4gICAgICByZXR1cm5cblxuICAgIHNwaWVzLmZvckVhY2goKHMpID0+IHtcbiAgICAgIGlmIChyZXN0b3JlTW9ja3MpXG4gICAgICAgIHMubW9ja1Jlc3RvcmUoKVxuICAgICAgZWxzZSBpZiAobW9ja1Jlc2V0KVxuICAgICAgICBzLm1vY2tSZXNldCgpXG4gICAgICBlbHNlIGlmIChjbGVhck1vY2tzKVxuICAgICAgICBzLm1vY2tDbGVhcigpXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBxdWV1ZU1vY2soaWQ6IHN0cmluZywgaW1wb3J0ZXI6IHN0cmluZywgZmFjdG9yeT86ICgpID0+IHVua25vd24pIHtcbiAgICBwZW5kaW5nSWRzLnB1c2goeyB0eXBlOiAnbW9jaycsIGlkLCBpbXBvcnRlciwgZmFjdG9yeSB9KVxuICB9XG5cbiAgcHVibGljIHF1ZXVlVW5tb2NrKGlkOiBzdHJpbmcsIGltcG9ydGVyOiBzdHJpbmcpIHtcbiAgICBwZW5kaW5nSWRzLnB1c2goeyB0eXBlOiAndW5tb2NrJywgaWQsIGltcG9ydGVyIH0pXG4gIH1cblxuICBwdWJsaWMgd2l0aFJlcXVlc3QocmVxdWVzdDogKGRlcDogc3RyaW5nKSA9PiB1bmtub3duKSB7XG4gICAgcmV0dXJuIG5ldyBWaXRlc3RNb2NrZXIodGhpcy5vcHRpb25zLCB0aGlzLm1vZHVsZUNhY2hlLCByZXF1ZXN0KVxuICB9XG59XG4iLCJpbXBvcnQgeyBWaXRlTm9kZVJ1bm5lciB9IGZyb20gJ3ZpdGUtbm9kZS9jbGllbnQnXG5pbXBvcnQgdHlwZSB7IE1vZHVsZUNhY2hlLCBWaXRlTm9kZVJ1bm5lck9wdGlvbnMgfSBmcm9tICd2aXRlLW5vZGUnXG5pbXBvcnQgdHlwZSB7IFN1aXRlTW9ja3MgfSBmcm9tICcuL21vY2tlcidcbmltcG9ydCB7IFZpdGVzdE1vY2tlciB9IGZyb20gJy4vbW9ja2VyJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWN1dGVPcHRpb25zIGV4dGVuZHMgVml0ZU5vZGVSdW5uZXJPcHRpb25zIHtcbiAgZmlsZXM6IHN0cmluZ1tdXG4gIG1vY2tNYXA6IFN1aXRlTW9ja3Ncbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVJblZpdGVOb2RlKG9wdGlvbnM6IEV4ZWN1dGVPcHRpb25zKSB7XG4gIGNvbnN0IHJ1bm5lciA9IG5ldyBWaXRlc3RSdW5uZXIob3B0aW9ucylcblxuICBjb25zdCByZXN1bHQ6IGFueVtdID0gW11cbiAgZm9yIChjb25zdCBmaWxlIG9mIG9wdGlvbnMuZmlsZXMpXG4gICAgcmVzdWx0LnB1c2goYXdhaXQgcnVubmVyLmV4ZWN1dGVGaWxlKGZpbGUpKVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuZXhwb3J0IGNsYXNzIFZpdGVzdFJ1bm5lciBleHRlbmRzIFZpdGVOb2RlUnVubmVyIHtcbiAgbW9ja2VyOiBWaXRlc3RNb2NrZXJcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgb3B0aW9uczogRXhlY3V0ZU9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zKVxuICAgIHRoaXMubW9ja2VyID0gbmV3IFZpdGVzdE1vY2tlcihvcHRpb25zLCB0aGlzLm1vZHVsZUNhY2hlKVxuICB9XG5cbiAgcHJlcGFyZUNvbnRleHQoY29udGV4dDogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBjb250ZXh0Ll9fdml0ZV9zc3JfaW1wb3J0X19cblxuICAgIGNvbnN0IG1vY2tlciA9IHRoaXMubW9ja2VyLndpdGhSZXF1ZXN0KHJlcXVlc3QpXG5cbiAgICBtb2NrZXIub24oJ21vY2tlZCcsIChkZXA6IHN0cmluZywgbW9kdWxlOiBQYXJ0aWFsPE1vZHVsZUNhY2hlPikgPT4ge1xuICAgICAgdGhpcy5zZXRDYWNoZShkZXAsIG1vZHVsZSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oY29udGV4dCwge1xuICAgICAgX192aXRlX3Nzcl9pbXBvcnRfXzogKGRlcDogc3RyaW5nKSA9PiBtb2NrZXIucmVxdWVzdFdpdGhNb2NrKGRlcCksXG4gICAgICBfX3ZpdGVfc3NyX2R5bmFtaWNfaW1wb3J0X186IChkZXA6IHN0cmluZykgPT4gbW9ja2VyLnJlcXVlc3RXaXRoTW9jayhkZXApLFxuXG4gICAgICBfX3ZpdGVzdF9tb2NrZXJfXzogbW9ja2VyLFxuICAgIH0pXG4gIH1cbn1cbiIsImltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdwYXRoZSdcbmltcG9ydCB0eXBlIHsgQmlycGNSZXR1cm4gfSBmcm9tICdiaXJwYydcbmltcG9ydCB7IGNyZWF0ZUJpcnBjIH0gZnJvbSAnYmlycGMnXG5pbXBvcnQgdHlwZSB7IE1vZHVsZUNhY2hlLCBSZXNvbHZlZENvbmZpZywgVGVzdCwgV29ya2VyQ29udGV4dCwgV29ya2VyUlBDIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBkaXN0RGlyIH0gZnJvbSAnLi4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgZXhlY3V0ZUluVml0ZU5vZGUgfSBmcm9tICcuLi9ub2RlL2V4ZWN1dGUnXG5pbXBvcnQgeyBycGMgfSBmcm9tICcuL3JwYydcblxubGV0IF92aXRlTm9kZToge1xuICBydW46IChmaWxlczogc3RyaW5nW10sIGNvbmZpZzogUmVzb2x2ZWRDb25maWcpID0+IFByb21pc2U8dm9pZD5cbiAgY29sbGVjdDogKGZpbGVzOiBzdHJpbmdbXSwgY29uZmlnOiBSZXNvbHZlZENvbmZpZykgPT4gUHJvbWlzZTx2b2lkPlxufVxuY29uc3QgbW9kdWxlQ2FjaGU6IE1hcDxzdHJpbmcsIE1vZHVsZUNhY2hlPiA9IG5ldyBNYXAoKVxuY29uc3QgbW9ja01hcCA9IHt9XG5cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0Vml0ZU5vZGUoY3R4OiBXb3JrZXJDb250ZXh0KSB7XG4gIGlmIChfdml0ZU5vZGUpXG4gICAgcmV0dXJuIF92aXRlTm9kZVxuXG4gIGNvbnN0IHByb2Nlc3NFeGl0ID0gcHJvY2Vzcy5leGl0XG5cbiAgcHJvY2Vzcy5vbignYmVmb3JlRXhpdCcsIChjb2RlKSA9PiB7XG4gICAgcnBjKCkub25Xb3JrZXJFeGl0KGNvZGUpXG4gIH0pXG5cbiAgcHJvY2Vzcy5leGl0ID0gKGNvZGUgPSBwcm9jZXNzLmV4aXRDb2RlIHx8IDApOiBuZXZlciA9PiB7XG4gICAgcnBjKCkub25Xb3JrZXJFeGl0KGNvZGUpXG4gICAgcmV0dXJuIHByb2Nlc3NFeGl0KGNvZGUpXG4gIH1cblxuICBjb25zdCB7IGNvbmZpZyB9ID0gY3R4XG5cbiAgY29uc3QgeyBydW4sIGNvbGxlY3QgfSA9IChhd2FpdCBleGVjdXRlSW5WaXRlTm9kZSh7XG4gICAgZmlsZXM6IFtcbiAgICAgIHJlc29sdmUoZGlzdERpciwgJ2VudHJ5LmpzJyksXG4gICAgXSxcbiAgICBmZXRjaE1vZHVsZShpZCkge1xuICAgICAgcmV0dXJuIHJwYygpLmZldGNoKGlkKVxuICAgIH0sXG4gICAgcmVzb2x2ZUlkKGlkLCBpbXBvcnRlcikge1xuICAgICAgcmV0dXJuIHJwYygpLnJlc29sdmVJZChpZCwgaW1wb3J0ZXIpXG4gICAgfSxcbiAgICBtb2R1bGVDYWNoZSxcbiAgICBtb2NrTWFwLFxuICAgIGludGVyb3BEZWZhdWx0OiBjb25maWcuZGVwcy5pbnRlcm9wRGVmYXVsdCA/PyB0cnVlLFxuICAgIHJvb3Q6IGNvbmZpZy5yb290LFxuICAgIGJhc2U6IGNvbmZpZy5iYXNlLFxuICB9KSlbMF1cblxuICBfdml0ZU5vZGUgPSB7IHJ1biwgY29sbGVjdCB9XG5cbiAgcmV0dXJuIF92aXRlTm9kZVxufVxuXG5mdW5jdGlvbiBpbml0KGN0eDogV29ya2VyQ29udGV4dCkge1xuICBpZiAocHJvY2Vzcy5fX3ZpdGVzdF93b3JrZXJfXyAmJiBjdHguY29uZmlnLnRocmVhZHMgJiYgY3R4LmNvbmZpZy5pc29sYXRlKVxuICAgIHRocm93IG5ldyBFcnJvcihgd29ya2VyIGZvciAke2N0eC5maWxlcy5qb2luKCcsJyl9IGFscmVhZHkgaW5pdGlhbGl6ZWQgYnkgJHtwcm9jZXNzLl9fdml0ZXN0X3dvcmtlcl9fLmN0eC5maWxlcy5qb2luKCcsJyl9LiBUaGlzIGlzIHByb2JhYmx5IGFuIGludGVybmFsIGJ1ZyBvZiBWaXRlc3QuYClcblxuICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnXFwwJylcblxuICBjb25zdCB7IGNvbmZpZywgcG9ydCB9ID0gY3R4XG5cbiAgcHJvY2Vzcy5fX3ZpdGVzdF93b3JrZXJfXyA9IHtcbiAgICBjdHgsXG4gICAgbW9kdWxlQ2FjaGUsXG4gICAgY29uZmlnLFxuICAgIHJwYzogY3JlYXRlQmlycGM8V29ya2VyUlBDPihcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBldmVudE5hbWVzOiBbJ29uVXNlckNvbnNvbGVMb2cnLCAnb25Db2xsZWN0ZWQnLCAnb25Xb3JrZXJFeGl0J10sXG4gICAgICAgIHBvc3QodikgeyBwb3J0LnBvc3RNZXNzYWdlKHYpIH0sXG4gICAgICAgIG9uKGZuKSB7IHBvcnQuYWRkTGlzdGVuZXIoJ21lc3NhZ2UnLCBmbikgfSxcbiAgICAgIH0sXG4gICAgKSxcbiAgfVxuXG4gIGlmIChjdHguaW52YWxpZGF0ZXMpXG4gICAgY3R4LmludmFsaWRhdGVzLmZvckVhY2goaSA9PiBtb2R1bGVDYWNoZS5kZWxldGUoaSkpXG4gIGN0eC5maWxlcy5mb3JFYWNoKGkgPT4gbW9kdWxlQ2FjaGUuZGVsZXRlKGkpKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29sbGVjdChjdHg6IFdvcmtlckNvbnRleHQpIHtcbiAgaW5pdChjdHgpXG4gIGNvbnN0IHsgY29sbGVjdCB9ID0gYXdhaXQgc3RhcnRWaXRlTm9kZShjdHgpXG4gIHJldHVybiBjb2xsZWN0KGN0eC5maWxlcywgY3R4LmNvbmZpZylcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bihjdHg6IFdvcmtlckNvbnRleHQpIHtcbiAgaW5pdChjdHgpXG4gIGNvbnN0IHsgcnVuIH0gPSBhd2FpdCBzdGFydFZpdGVOb2RlKGN0eClcbiAgcmV0dXJuIHJ1bihjdHguZmlsZXMsIGN0eC5jb25maWcpXG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgbmFtZXNwYWNlIE5vZGVKUyB7XG4gICAgaW50ZXJmYWNlIFByb2Nlc3Mge1xuICAgICAgX192aXRlc3Rfd29ya2VyX186IHtcbiAgICAgICAgY3R4OiBXb3JrZXJDb250ZXh0XG4gICAgICAgIGNvbmZpZzogUmVzb2x2ZWRDb25maWdcbiAgICAgICAgcnBjOiBCaXJwY1JldHVybjxXb3JrZXJSUEM+XG4gICAgICAgIGN1cnJlbnQ/OiBUZXN0XG4gICAgICAgIGZpbGVwYXRoPzogc3RyaW5nXG4gICAgICAgIG1vZHVsZUNhY2hlOiBNYXA8c3RyaW5nLCBNb2R1bGVDYWNoZT5cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJub3JtYWxpemVJZCIsImlzV2luZG93cyIsInNsYXNoIiwidG9GaWxlUGF0aCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU8sU0FBU0EsYUFBVyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUU7QUFDdEMsRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztBQUNqQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxP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