@workflow/next 5.0.0-beta.21 → 5.0.0-beta.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"builder-eager.d.ts","sourceRoot":"","sources":["../src/builder-eager.ts"],"names":[],"mappings":"AAWA,wBAAsB,mBAAmB,iBAmgBxC"}
1
+ {"version":3,"file":"builder-eager.d.ts","sourceRoot":"","sources":["../src/builder-eager.ts"],"names":[],"mappings":"AAeA,wBAAsB,mBAAmB,iBAghBxC"}
@@ -265,17 +265,19 @@ async function getNextBuilderEager() {
265
265
  }
266
266
  async getInputFiles() {
267
267
  const inputFiles = await super.getInputFiles();
268
- return inputFiles.filter((item) => {
269
- // Match App Router entrypoints: route.ts, page.ts, layout.ts in app/ or src/app/ directories
270
- // Matches: /app/page.ts, /app/dashboard/page.ts, /src/app/route.ts, etc.
271
- if (item.match(/(^|.*[/\\])(app|src[/\\]app)([/\\](route|page|layout)\.|[/\\].*[/\\](route|page|layout)\.)/)) {
268
+ return inputFiles.filter((file) => {
269
+ const entry = (0, node_path_1.relative)(this.config.workingDir, file).replaceAll('\\', '/');
270
+ // Match App Router route, page, and layout entrypoints in app/ or src/app/.
271
+ if (/^(?:app|src\/app)\/(?:.*\/)?(?:route|page|layout)\./.test(entry)) {
272
272
  return true;
273
273
  }
274
- // Match Pages Router entrypoints: files in pages/ or src/pages/
275
- if (item.match(/[/\\](pages|src[/\\]pages)[/\\]/)) {
274
+ // Match every Pages Router entrypoint in pages/ or src/pages/.
275
+ if (/^(?:pages|src\/pages)\//.test(entry)) {
276
276
  return true;
277
277
  }
278
- return false;
278
+ // Match Next.js root entrypoints at the project root or under src/.
279
+ return ['instrumentation', 'middleware', 'proxy'].some((name) => this.config.pageExtensions.some((extension) => entry === `${name}.${extension}` ||
280
+ entry === `src/${name}.${extension}`));
279
281
  });
280
282
  }
281
283
  async writeFunctionsConfig(outputDir) {
@@ -366,4 +368,4 @@ async function getNextBuilderEager() {
366
368
  CachedNextBuilderEager = NextBuilder;
367
369
  return NextBuilder;
368
370
  }
369
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci1lYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9idWlsZGVyLWVhZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBV0Esa0RBbWdCQztBQTlnQkQscUNBQW9DO0FBQ3BDLCtDQUE0RTtBQUM1RSx5Q0FBbUQ7QUFFbkQsMERBQWtDO0FBRWxDLElBQUksc0JBQTJCLENBQUM7QUFFaEMsOEVBQThFO0FBQzlFLDZFQUE2RTtBQUM3RSxvRUFBb0U7QUFDN0QsS0FBSyxVQUFVLG1CQUFtQjtJQUN2QyxJQUFJLHNCQUFzQixFQUFFLENBQUM7UUFDM0IsT0FBTyxzQkFBc0IsQ0FBQztJQUNoQyxDQUFDO0lBRUQsTUFBTSxFQUNKLFdBQVcsRUFBRSxnQkFBZ0IsRUFDN0Isc0JBQXNCO0lBQ3RCLDRJQUE0STtNQUM3SSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQ2IsOEJBQThCLENBQy9CLENBQXdDLENBQUM7SUFFMUMsTUFBTSxXQUFZLFNBQVEsZ0JBQWdCO1FBQ3hDLEtBQUssQ0FBQyxLQUFLO1lBQ1QsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNoRCxNQUFNLG9CQUFvQixHQUFHLElBQUEsZ0JBQUksRUFBQyxTQUFTLEVBQUUseUJBQXlCLENBQUMsQ0FBQztZQUV4RSxrQ0FBa0M7WUFDbEMsTUFBTSxJQUFBLGdCQUFLLEVBQUMsb0JBQW9CLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN2RCxNQUFNLElBQUEsb0JBQVMsRUFBQyxJQUFBLGdCQUFJLEVBQUMsb0JBQW9CLEVBQUUsWUFBWSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFFL0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDOUMsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUVuRCxNQUFN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IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgYWNjZXNzLCBjb3B5RmlsZSwgbWtkaXIsIHN0YXQsIHdyaXRlRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZXh0bmFtZSwgam9pbiwgcmVzb2x2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgdHlwZSB7IFdvcmtmbG93TWFuaWZlc3QgfSBmcm9tICdAd29ya2Zsb3cvYnVpbGRlcnMnO1xuaW1wb3J0IFdhdGNocGFjayBmcm9tICd3YXRjaHBhY2snO1xuXG5sZXQgQ2FjaGVkTmV4dEJ1aWxkZXJFYWdlcjogYW55O1xuXG4vLyBDcmVhdGUgdGhlIGVhZ2VyIE5leHQgYnVpbGRlciBkeW5hbWljYWxseSBieSBleHRlbmRpbmcgdGhlIEVTTSBCYXNlQnVpbGRlci5cbi8vIEV4cG9ydGVkIGFzIGdldE5leHRCdWlsZGVyRWFnZXIoKSB0byBhbGxvdyBDb21tb25KUyBtb2R1bGVzIHRvIGltcG9ydCBmcm9tXG4vLyB0aGUgRVNNIEB3b3JrZmxvdy9idWlsZGVycyBwYWNrYWdlIHZpYSBkeW5hbWljIGltcG9ydCBhdCBydW50aW1lLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE5leHRCdWlsZGVyRWFnZXIoKSB7XG4gIGlmIChDYWNoZWROZXh0QnVpbGRlckVhZ2VyKSB7XG4gICAgcmV0dXJuIENhY2hlZE5leHRCdWlsZGVyRWFnZXI7XG4gIH1cblxuICBjb25zdCB7XG4gICAgQmFzZUJ1aWxkZXI6IEJhc2VCdWlsZGVyQ2xhc3MsXG4gICAgV09SS0ZMT1dfUVVFVUVfVFJJR0dFUixcbiAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zZWN1cml0eS9ub0dsb2JhbEV2YWw6IE5lZWQgdG8gdXNlIGV2YWwgaGVyZSB0byBhdm9pZCBUeXBlU2NyaXB0IGZyb20gdHJhbnNwaWxpbmcgdGhlIGltcG9ydCBzdGF0ZW1lbnQgaW50byBgcmVxdWlyZSgpYFxuICB9ID0gKGF3YWl0IGV2YWwoXG4gICAgJ2ltcG9ydChcIkB3b3JrZmxvdy9idWlsZGVyc1wiKSdcbiAgKSkgYXMgdHlwZW9mIGltcG9ydCgnQHdvcmtmbG93L2J1aWxkZXJzJyk7XG5cbiAgY2xhc3MgTmV4dEJ1aWxkZXIgZXh0ZW5kcyBCYXNlQnVpbGRlckNsYXNzIHtcbiAgICBhc3luYyBidWlsZCgpIHtcbiAgICAgIGNvbnN0IG91dHB1dERpciA9IGF3YWl0IHRoaXMuZmluZEFwcERpcmVjdG9yeSgpO1xuICAgICAgY29uc3Qgd29ya2Zsb3dHZW5lcmF0ZWREaXIgPSBqb2luKG91dHB1dERpciwgJy53ZWxsLWtub3duL3dvcmtmbG93L3YxJyk7XG5cbiAgICAgIC8vIEVuc3VyZSBvdXRwdXQgZGlyZWN0b3JpZXMgZXhpc3RcbiAgICAgIGF3YWl0IG1rZGlyKHdvcmtmbG93R2VuZXJhdGVkRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZShqb2luKHdvcmtmbG93R2VuZXJhdGVkRGlyLCAnLmdpdGlnbm9yZScpLCAnKicpO1xuXG4gICAgICBjb25zdCBpbnB1dEZpbGVzID0gYXdhaXQgdGhpcy5nZXRJbnB1dEZpbGVzKCk7XG4gICAgICBjb25zdCB0c2NvbmZpZ1BhdGggPSBhd2FpdCB0aGlzLmZpbmRUc0NvbmZpZ1BhdGgoKTtcblxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgaW5wdXRGaWxlcyxcbiAgICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgICAgIHRzY29uZmlnUGF0aCxcbiAgICAgIH07XG5cbiAgICAgIC8vIFYyOiBCdWlsZCBjb21iaW5lZCByb3V0ZSAocmVwbGFjZXMgc2VwYXJhdGUgc3RlcCArIGZsb3cgcm91dGVzKVxuICAgICAgY29uc3QgY29tYmluZWRSZXN1bHQgPSBhd2FpdCB0aGlzLmJ1aWxkQ29tYmluZWRGdW5jdGlvbihvcHRpb25zKTtcbiAgICAgIGF3YWl0IHRoaXMuYnVpbGRXZWJob29rUm91dGUoeyB3b3JrZmxvd0dlbmVyYXRlZERpciB9KTtcblxuICAgICAgY29uc3Qgd3JpdGVNYW5pZmVzdCA9IGFzeW5jIChcbiAgICAgICAgc291cmNlTWFuaWZlc3Q6IFdvcmtmbG93TWFuaWZlc3QgfCB1bmRlZmluZWRcbiAgICAgICkgPT4ge1xuICAgICAgICBjb25zdCBtYW5pZmVzdCA9IHtcbiAgICAgICAgICBzdGVwczogeyAuLi5zb3VyY2VNYW5pZmVzdD8uc3RlcHMgfSxcbiAgICAgICAgICB3b3JrZmxvd3M6IHsgLi4uc291cmNlTWFuaWZlc3Q/LndvcmtmbG93cyB9LFxuICAgICAgICAgIGNsYXNzZXM6IHsgLi4uc291cmNlTWFuaWZlc3Q/LmNsYXNzZXMgfSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBXcml0ZSBtYW5pZmVzdFxuICAgICAgICBjb25zdCB3b3JrZmxvd0J1bmRsZVBhdGggPSBqb2luKHdvcmtmbG93R2VuZXJhdGVkRGlyLCAnZmxvdy9yb3V0ZS5qcycpO1xuICAgICAgICBjb25zdCBtYW5pZmVzdEpzb24gPSBhd2FpdCB0aGlzLmNyZWF0ZU1hbmlmZXN0KHtcbiAgICAgICAgICB3b3JrZmxvd0J1bmRsZVBhdGgsXG4gICAgICAgICAgbWFuaWZlc3REaXI6IHdvcmtmbG93R2VuZXJhdGVkRGlyLFxuICAgICAgICAgIG1hbmlmZXN0LFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBFeHBvc2UgbWFuaWZlc3QgYXMgYSBzdGF0aWMgZmlsZSB3aGVuIFdPUktGTE9XX1BVQkxJQ19NQU5JRkVTVD0xLlxuICAgICAgICBpZiAodGhpcy5zaG91bGRFeHBvc2VQdWJsaWNNYW5pZmVzdCAmJiBtYW5pZmVzdEpzb24pIHtcbiAgICAgICAgICBjb25zdCBwdWJsaWNNYW5pZmVzdERpciA9IGpvaW4oXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy53b3JraW5nRGlyLFxuICAgICAgICAgICAgJ3B1YmxpYy8ud2VsbC1rbm93bi93b3JrZmxvdy92MSdcbiAgICAgICAgICApO1xuICAgICAgICAgIGF3YWl0IG1rZGlyKHB1YmxpY01hbmlmZXN0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuVkVSQ0VMX0RFUExPWU1FTlRfSUQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXdhaXQgd3JpdGVGaWxlKGpvaW4ocHVibGljTWFuaWZlc3REaXIsICcuZ2l0aWdub3JlJyksICcqJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IGNvcHlGaWxlKFxuICAgICAgICAgICAgam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ21hbmlmZXN0Lmpzb24nKSxcbiAgICAgICAgICAgIGpvaW4ocHVibGljTWFuaWZlc3REaXIsICdtYW5pZmVzdC5qc29uJylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBhd2FpdCB3cml0ZU1hbmlmZXN0KGNvbWJpbmVkUmVzdWx0Py5tYW5pZmVzdCk7XG5cbiAgICAgIGF3YWl0IHRoaXMud3JpdGVGdW5jdGlvbnNDb25maWcob3V0cHV0RGlyKTtcblxuICAgICAgaWYgKHRoaXMuY29uZmlnLndhdGNoKSB7XG4gICAgICAgIC8vIFRPRE86IGltcGxlbWVudCB3YXRjaCBtb2RlIGZvciBjb21iaW5lZCBidW5kbGVcbiAgICAgICAgLy8gRm9yIG5vdywgZmFsbCBiYWNrIHRvIGZ1bGwgcmVidWlsZCBvbiBmaWxlIGNoYW5nZXNcbiAgICAgICAgaWYgKCFjb21iaW5lZFJlc3VsdD8uaW50ZXJpbUJ1bmRsZUN0eCB8fCAhY29tYmluZWRSZXN1bHQuYnVuZGxlRmluYWwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnSW52YXJpYW50OiBleHBlY3RlZCB3b3JrZmxvdyBidWlsZCBjb250ZXh0IGluIHdhdGNoIG1vZGUnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0ZXAgcmVnaXN0cmF0aW9ucyBtYXkgYmUgZW1pdHRlZCBhcyBzb3VyY2UgaW1wb3J0cyB3aXRob3V0IGFuXG4gICAgICAgIC8vIGVzYnVpbGQgY29udGV4dCB3aGVuIGV4dGVybmFsaXplTm9uU3RlcHMgaXMgZW5hYmxlZC5cbiAgICAgICAgbGV0IHN0ZXBzQ3R4ID0gY29tYmluZWRSZXN1bHQuc3RlcHNDb250ZXh0O1xuICAgICAgICBsZXQgd29ya2Zsb3dzQ3R4ID0ge1xuICAgICAgICAgIGludGVyaW1CdW5kbGVDdHg6IGNvbWJpbmVkUmVzdWx0LmludGVyaW1CdW5kbGVDdHgsXG4gICAgICAgICAgYnVuZGxlRmluYWw6IGNvbWJpbmVkUmVzdWx0LmJ1bmRsZUZpbmFsLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZVBhdGggPSAocGF0aG5hbWU6IHN0cmluZykgPT5cbiAgICAgICAgICBwYXRobmFtZS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgICAgIHR5cGUgV2F0Y2hwYWNrVGltZUluZm9FbnRyeSA9IHtcbiAgICAgICAgICBzYWZlVGltZTogbnVtYmVyO1xuICAgICAgICAgIHRpbWVzdGFtcD86IG51bWJlcjtcbiAgICAgICAgfTtcbiAgICAgICAgdHlwZSBGaWxlQ2hhbmdlcyA9IHtcbiAgICAgICAgICBhZGRlZEZpbGVzOiBzdHJpbmdbXTtcbiAgICAgICAgICBtb2RpZmllZEZpbGVzOiBzdHJpbmdbXTtcbiAgICAgICAgICByZW1vdmVkRmlsZXM6IHN0cmluZ1tdO1xuICAgICAgICB9O1xuICAgICAgICBsZXQgcHJldmlvdXNUaW1lSW5mbyA9IG5ldyBNYXA8c3RyaW5nLCBXYXRjaHBhY2tUaW1lSW5mb0VudHJ5PigpO1xuXG4gICAgICAgIGNvbnN0IHdhdGNoYWJsZUV4dGVuc2lvbnMgPSBuZXcgU2V0KFtcbiAgICAgICAgICAnLmpzJyxcbiAgICAgICAgICAnLmpzeCcsXG4gICAgICAgICAgJy50cycsXG4gICAgICAgICAgJy50c3gnLFxuICAgICAgICAgICcubXRzJyxcbiAgICAgICAgICAnLmN0cycsXG4gICAgICAgICAgJy5janMnLFxuICAgICAgICAgICcubWpzJyxcbiAgICAgICAgXSk7XG4gICAgICAgIGNvbnN0IGlnbm9yZWRQYXRoRnJhZ21lbnRzID0gW1xuICAgICAgICAgICcvLmdpdC8nLFxuICAgICAgICAgICcvbm9kZV9tb2R1bGVzLycsXG4gICAgICAgICAgJy8ubmV4dC8nLFxuICAgICAgICAgICcvLnR1cmJvLycsXG4gICAgICAgICAgJy8udmVyY2VsLycsXG4gICAgICAgICAgJy9kaXN0LycsXG4gICAgICAgICAgJy9idWlsZC8nLFxuICAgICAgICAgICcvb3V0LycsXG4gICAgICAgICAgJy8uY2FjaGUvJyxcbiAgICAgICAgICAnLy55YXJuLycsXG4gICAgICAgICAgJy8ucG5wbS1zdG9yZS8nLFxuICAgICAgICAgICcvLnBhcmNlbC1jYWNoZS8nLFxuICAgICAgICAgICcvLndlbGwta25vd24vd29ya2Zsb3cvJyxcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZEdlbmVyYXRlZERpciA9IHdvcmtmbG93R2VuZXJhdGVkRGlyLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgICAgaWdub3JlZFBhdGhGcmFnbWVudHMucHVzaChub3JtYWxpemVkR2VuZXJhdGVkRGlyKTtcblxuICAgICAgICAvLyBUaGVyZSBpcyBhIG5vZGUuanMgYnVnIG9uIE1hY09TIHdoaWNoIGNhdXNlcyBjbG9zaW5nIGZpbGUgd2F0Y2hlcnMgdG8gYmUgcmVhbGx5IHNsb3cuXG4gICAgICAgIC8vIFRoaXMgbGltaXRzIHRoZSBudW1iZXIgb2Ygd2F0Y2hlcnMgdG8gbWl0aWdhdGUgdGhlIGlzc3VlLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzI5OTQ5XG4gICAgICAgIHByb2Nlc3MuZW52LldBVENIUEFDS19XQVRDSEVSX0xJTUlUID1cbiAgICAgICAgICBwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJyA/ICcyMCcgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgY29uc3Qgd2F0Y2hlciA9IG5ldyBXYXRjaHBhY2soe1xuICAgICAgICAgIC8vIFdhdGNocGFjayBkZWZhdWx0IGlzIDIwMG1zIHdoaWNoIGFkZHMgMjAwbXMgb2YgZGVhZCB0aW1lIG9uIGJvb3R1cC5cbiAgICAgICAgICBhZ2dyZWdhdGVUaW1lb3V0OiA1LFxuICAgICAgICAgIGlnbm9yZWQ6IChwYXRobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IHBhdGhuYW1lLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IGV4dG5hbWUobm9ybWFsaXplZFBhdGgpO1xuICAgICAgICAgICAgaWYgKGV4dGVuc2lvbiAmJiAhd2F0Y2hhYmxlRXh0ZW5zaW9ucy5oYXMoZXh0ZW5zaW9uKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChub3JtYWxpemVkUGF0aC5zdGFydHNXaXRoKG5vcm1hbGl6ZWRHZW5lcmF0ZWREaXIpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBmcmFnbWVudCBvZiBpZ25vcmVkUGF0aEZyYWdtZW50cykge1xuICAgICAgICAgICAgICBpZiAobm9ybWFsaXplZFBhdGguaW5jbHVkZXMoZnJhZ21lbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZWFkVGltZUluZm9FbnRyaWVzID0gKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJhd0VudHJpZXMgPSB3YXRjaGVyLmdldFRpbWVJbmZvRW50cmllcygpIGFzIE1hcDxcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIFdhdGNocGFja1RpbWVJbmZvRW50cnlcbiAgICAgICAgICA+O1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRFbnRyaWVzID0gbmV3IE1hcDxzdHJpbmcsIFdhdGNocGFja1RpbWVJbmZvRW50cnk+KCk7XG4gICAgICAgICAgZm9yIChjb25zdCBbcGF0aCwgaW5mb10gb2YgcmF3RW50cmllcykge1xuICAgICAgICAgICAgbm9ybWFsaXplZEVudHJpZXMuc2V0KG5vcm1hbGl6ZVBhdGgocGF0aCksIGluZm8pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbm9ybWFsaXplZEVudHJpZXM7XG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IHJlYnVpbGRRdWV1ZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgICAgIGNvbnN0IGVucXVldWUgPSAodGFzazogKCkgPT4gUHJvbWlzZTx2b2lkPikgPT4ge1xuICAgICAgICAgIHJlYnVpbGRRdWV1ZSA9IHJlYnVpbGRRdWV1ZS50aGVuKHRhc2spLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHByb2Nlc3MgZmlsZSBjaGFuZ2UnLCBlcnJvcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHJlYnVpbGRRdWV1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBmdWxsUmVidWlsZCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0aGlzLmNsZWFyRGlzY292ZXJlZEVudHJpZXNDYWNoZSgpO1xuICAgICAgICAgIGNvbnN0IG5ld0lucHV0RmlsZXMgPSBhd2FpdCB0aGlzLmdldElucHV0RmlsZXMoKTtcbiAgICAgICAgICBvcHRpb25zLmlucHV0RmlsZXMgPSBuZXdJbnB1dEZpbGVzO1xuXG4gICAgICAgICAgYXdhaXQgc3RlcHNDdHg/LmRpc3Bvc2UoKTtcbiAgICAgICAgICBhd2FpdCB3b3JrZmxvd3NDdHguaW50ZXJpbUJ1bmRsZUN0eC5kaXNwb3NlKCk7XG5cbiAgICAgICAgICBjb25zdCBuZXdDb21iaW5lZCA9IGF3YWl0IHRoaXMuYnVpbGRDb21iaW5lZEZ1bmN0aW9uKG9wdGlvbnMpO1xuICAgICAgICAgIHN0ZXBzQ3R4ID0gbmV3Q29tYmluZWQuc3RlcHNDb250ZXh0O1xuXG4gICAgICAgICAgaWYgKCFuZXdDb21iaW5lZD8uaW50ZXJpbUJ1bmRsZUN0eCB8fCAhbmV3Q29tYmluZWQ/LmJ1bmRsZUZpbmFsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICdJbnZhcmlhbnQ6IGV4cGVjdGVkIHdvcmtmbG93cyBidW5kbGUgY29udGV4dCBhZnRlciByZWJ1aWxkJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgd29ya2Zsb3dzQ3R4ID0ge1xuICAgICAgICAgICAgaW50ZXJpbUJ1bmRsZUN0eDogbmV3Q29tYmluZWQuaW50ZXJpbUJ1bmRsZUN0eCxcbiAgICAgICAgICAgIGJ1bmRsZUZpbmFsOiBuZXdDb21iaW5lZC5idW5kbGVGaW5hbCxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgYXdhaXQgd3JpdGVNYW5pZmVzdChuZXdDb21iaW5lZC5tYW5pZmVzdCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaXNXYXRjaGFibGVGaWxlID0gKHBhdGg6IHN0cmluZykgPT5cbiAgICAgICAgICB3YXRjaGFibGVFeHRlbnNpb25zLmhhcyhleHRuYW1lKHBhdGgpKTtcblxuICAgICAgICBjb25zdCBub3JtYWxpemVXYXRjaHBhY2tQYXRocyA9IChwYXRocz86IEl0ZXJhYmxlPHN0cmluZz4pID0+IHtcbiAgICAgICAgICBjb25zdCBub3JtYWxpemVkUGF0aHM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgaWYgKCFwYXRocykge1xuICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRQYXRocztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IHBhdGggb2YgcGF0aHMpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplUGF0aChwYXRoKTtcbiAgICAgICAgICAgIGlmIChpc1dhdGNoYWJsZUZpbGUobm9ybWFsaXplZFBhdGgpKSB7XG4gICAgICAgICAgICAgIG5vcm1hbGl6ZWRQYXRocy5wdXNoKG5vcm1hbGl6ZWRQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbm9ybWFsaXplZFBhdGhzO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHVuaXF1ZSA9IChwYXRoczogc3RyaW5nW10pID0+IFsuLi5uZXcgU2V0KHBhdGhzKV07XG5cbiAgICAgICAgY29uc3QgZ2V0Q29tcGFyYWJsZVRpbWVzdGFtcCA9IChlbnRyeTogV2F0Y2hwYWNrVGltZUluZm9FbnRyeSkgPT5cbiAgICAgICAgICBlbnRyeS50aW1lc3RhbXAgPz8gZW50cnkuc2FmZVRpbWU7XG5cbiAgICAgICAgY29uc3QgZmluZFJlbW92ZWRGaWxlcyA9IChcbiAgICAgICAgICBjdXJyZW50RW50cmllczogTWFwPHN0cmluZywgV2F0Y2hwYWNrVGltZUluZm9FbnRyeT4sXG4gICAgICAgICAgcHJldmlvdXNFbnRyaWVzOiBNYXA8c3RyaW5nLCBXYXRjaHBhY2tUaW1lSW5mb0VudHJ5PlxuICAgICAgICApID0+IHtcbiAgICAgICAgICBjb25zdCByZW1vdmVkOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgIGZvciAoY29uc3QgcGF0aCBvZiBwcmV2aW91c0VudHJpZXMua2V5cygpKSB7XG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRFbnRyaWVzLmhhcyhwYXRoKSAmJiBpc1dhdGNoYWJsZUZpbGUocGF0aCkpIHtcbiAgICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKHBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVtb3ZlZDtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBmaW5kQWRkZWRBbmRNb2RpZmllZEZpbGVzID0gKFxuICAgICAgICAgIGN1cnJlbnRFbnRyaWVzOiBNYXA8c3RyaW5nLCBXYXRjaHBhY2tUaW1lSW5mb0VudHJ5PixcbiAgICAgICAgICBwcmV2aW91c0VudHJpZXM6IE1hcDxzdHJpbmcsIFdhdGNocGFja1RpbWVJbmZvRW50cnk+XG4gICAgICAgICkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFkZGVkOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgIGNvbnN0IG1vZGlmaWVkOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBbcGF0aCwgaW5mb10gb2YgY3VycmVudEVudHJpZXMpIHtcbiAgICAgICAgICAgIGlmICghaXNXYXRjaGFibGVGaWxlKHBhdGgpKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwcmV2aW91cyA9IHByZXZpb3VzRW50cmllcy5nZXQocGF0aCk7XG4gICAgICAgICAgICBpZiAoIXByZXZpb3VzKSB7XG4gICAgICAgICAgICAgIGFkZGVkLnB1c2gocGF0aCk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGdldENvbXBhcmFibGVUaW1lc3RhbXAoaW5mbykgIT09IGdldENvbXBhcmFibGVUaW1lc3RhbXAocHJldmlvdXMpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgbW9kaWZpZWQucHVzaChwYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4geyBhZGRlZCwgbW9kaWZpZWQgfTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBkZXRlcm1pbmVGaWxlQ2hhbmdlcyA9IChcbiAgICAgICAgICBjdXJyZW50RW50cmllczogTWFwPHN0cmluZywgV2F0Y2hwYWNrVGltZUluZm9FbnRyeT4sXG4gICAgICAgICAgcHJldmlvdXNFbnRyaWVzOiBNYXA8c3RyaW5nLCBXYXRjaHBhY2tUaW1lSW5mb0VudHJ5PlxuICAgICAgICApOiBGaWxlQ2hhbmdlcyA9PiB7XG4gICAgICAgICAgY29uc3QgcmVtb3ZlZEZpbGVzID0gZmluZFJlbW92ZWRGaWxlcyhcbiAgICAgICAgICAgIGN1cnJlbnRFbnRyaWVzLFxuICAgICAgICAgICAgcHJldmlvdXNFbnRyaWVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB7IGFkZGVkLCBtb2RpZmllZCB9ID0gZmluZEFkZGVkQW5kTW9kaWZpZWRGaWxlcyhcbiAgICAgICAgICAgIGN1cnJlbnRFbnRyaWVzLFxuICAgICAgICAgICAgcHJldmlvdXNFbnRyaWVzXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhZGRlZEZpbGVzOiBhZGRlZCxcbiAgICAgICAgICAgIG1vZGlmaWVkRmlsZXM6IG1vZGlmaWVkLFxuICAgICAgICAgICAgcmVtb3ZlZEZpbGVzLFxuICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgbWVyZ2VGaWxlQ2hhbmdlcyA9ICh7XG4gICAgICAgICAgY3VycmVudEVudHJpZXMsXG4gICAgICAgICAgcHJldmlvdXNFbnRyaWVzLFxuICAgICAgICAgIHRpbWVzdGFtcENoYW5nZXMsXG4gICAgICAgICAgZXZlbnRDaGFuZ2VkRmlsZXMsXG4gICAgICAgICAgZXZlbnRSZW1vdmVkRmlsZXMsXG4gICAgICAgIH06IHtcbiAgICAgICAgICBjdXJyZW50RW50cmllczogTWFwPHN0cmluZywgV2F0Y2hwYWNrVGltZUluZm9FbnRyeT47XG4gICAgICAgICAgcHJldmlvdXNFbnRyaWVzOiBNYXA8c3RyaW5nLCBXYXRjaHBhY2tUaW1lSW5mb0VudHJ5PjtcbiAgICAgICAgICB0aW1lc3RhbXBDaGFuZ2VzOiBGaWxlQ2hhbmdlcztcbiAgICAgICAgICBldmVudENoYW5nZWRGaWxlczogc3RyaW5nW107XG4gICAgICAgICAgZXZlbnRSZW1vdmVkRmlsZXM6IHN0cmluZ1tdO1xuICAgICAgICB9KTogRmlsZUNoYW5nZXMgPT4gKHtcbiAgICAgICAgICBhZGRlZEZpbGVzOiB1bmlxdWUoW1xuICAgICAgICAgICAgLi4udGltZXN0YW1wQ2hhbmdlcy5hZGRlZEZpbGVzLFxuICAgICAgICAgICAgLi4uZXZlbnRDaGFuZ2VkRmlsZXMuZmlsdGVyKFxuICAgICAgICAgICAgICAocGF0aCkgPT4gY3VycmVudEVudHJpZXMuaGFzKHBhdGgpICYmICFwcmV2aW91c0VudHJpZXMuaGFzKHBhdGgpXG4gICAgICAgICAgICApLFxuICAgICAgICAgIF0pLFxuICAgICAgICAgIG1vZGlmaWVkRmlsZXM6IHVuaXF1ZShbXG4gICAgICAgICAgICAuLi50aW1lc3RhbXBDaGFuZ2VzLm1vZGlmaWVkRmlsZXMsXG4gICAgICAgICAgICAuLi5ldmVudENoYW5nZWRGaWxlcyxcbiAgICAgICAgICBdKSxcbiAgICAgICAgICByZW1vdmVkRmlsZXM6IHVuaXF1ZShbXG4gICAgICAgICAgICAuLi50aW1lc3RhbXBDaGFuZ2VzLnJlbW92ZWRGaWxlcyxcbiAgICAgICAgICAgIC4uLmV2ZW50UmVtb3ZlZEZpbGVzLFxuICAgICAgICAgIF0pLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBoYXNGaWxlQ2hhbmdlcyA9ICh7XG4gICAgICAgICAgYWRkZWRGaWxlcyxcbiAgICAgICAgICBtb2RpZmllZEZpbGVzLFxuICAgICAgICAgIHJlbW92ZWRGaWxlcyxcbiAgICAgICAgfTogRmlsZUNoYW5nZXMpID0+XG4gICAgICAgICAgYWRkZWRGaWxlcy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgbW9kaWZpZWRGaWxlcy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgcmVtb3ZlZEZpbGVzLmxlbmd0aCA+IDA7XG5cbiAgICAgICAgbGV0IGlzSW5pdGlhbCA9IHRydWU7XG5cbiAgICAgICAgd2F0Y2hlci5vbihcbiAgICAgICAgICAnYWdncmVnYXRlZCcsXG4gICAgICAgICAgKGNoYW5nZXM/OiBTZXQ8c3RyaW5nPiwgcmVtb3ZhbHM/OiBTZXQ8c3RyaW5nPikgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEVudHJpZXMgPSByZWFkVGltZUluZm9FbnRyaWVzKCk7XG4gICAgICAgICAgICBjb25zdCBldmVudENoYW5nZWRGaWxlcyA9IG5vcm1hbGl6ZVdhdGNocGFja1BhdGhzKGNoYW5nZXMpO1xuICAgICAgICAgICAgY29uc3QgZXZlbnRSZW1vdmVkRmlsZXMgPSBub3JtYWxpemVXYXRjaHBhY2tQYXRocyhyZW1vdmFscyk7XG4gICAgICAgICAgICBjb25zdCB0aW1lc3RhbXBDaGFuZ2VzID0gZGV0ZXJtaW5lRmlsZUNoYW5nZXMoXG4gICAgICAgICAgICAgIGN1cnJlbnRFbnRyaWVzLFxuICAgICAgICAgICAgICBwcmV2aW91c1RpbWVJbmZvXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBmaWxlQ2hhbmdlcyA9IG1lcmdlRmlsZUNoYW5nZXMoe1xuICAgICAgICAgICAgICBjdXJyZW50RW50cmllcyxcbiAgICAgICAgICAgICAgcHJldmlvdXNFbnRyaWVzOiBwcmV2aW91c1RpbWVJbmZvLFxuICAgICAgICAgICAgICB0aW1lc3RhbXBDaGFuZ2VzLFxuICAgICAgICAgICAgICBldmVudENoYW5nZWRGaWxlcyxcbiAgICAgICAgICAgICAgZXZlbnRSZW1vdmVkRmlsZXMsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcHJldmlvdXNUaW1lSW5mbyA9IGN1cnJlbnRFbnRyaWVzO1xuXG4gICAgICAgICAgICBpZiAoaXNJbml0aWFsKSB7XG4gICAgICAgICAgICAgIGlzSW5pdGlhbCA9IGZhbHNlO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZXZlbnRDaGFuZ2VkRmlsZXMubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICAgICAgZXZlbnRSZW1vdmVkRmlsZXMubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWhhc0ZpbGVDaGFuZ2VzKGZpbGVDaGFuZ2VzKSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVucXVldWUoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICBhd2FpdCBmdWxsUmVidWlsZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIHdhdGNoZXIud2F0Y2goe1xuICAgICAgICAgIGRpcmVjdG9yaWVzOiBbdGhpcy5jb25maWcud29ya2luZ0Rpcl0sXG4gICAgICAgICAgc3RhcnRUaW1lOiBEYXRlLm5vdygpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgZ2V0SW5wdXRGaWxlcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICBjb25zdCBpbnB1dEZpbGVzID0gYXdhaXQgc3VwZXIuZ2V0SW5wdXRGaWxlcygpO1xuICAgICAgcmV0dXJuIGlucHV0RmlsZXMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgIC8vIE1hdGNoIEFwcCBSb3V0ZXIgZW50cnlwb2ludHM6IHJvdXRlLnRzLCBwYWdlLnRzLCBsYXlvdXQudHMgaW4gYXBwLyBvciBzcmMvYXBwLyBkaXJlY3Rvcmllc1xuICAgICAgICAvLyBNYXRjaGVzOiAvYXBwL3BhZ2UudHMsIC9hcHAvZGFzaGJvYXJkL3BhZ2UudHMsIC9zcmMvYXBwL3JvdXRlLnRzLCBldGMuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBpdGVtLm1hdGNoKFxuICAgICAgICAgICAgLyhefC4qWy9cXFxcXSkoYXBwfHNyY1svXFxcXF1hcHApKFsvXFxcXF0ocm91dGV8cGFnZXxsYXlvdXQpXFwufFsvXFxcXF0uKlsvXFxcXF0ocm91dGV8cGFnZXxsYXlvdXQpXFwuKS9cbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1hdGNoIFBhZ2VzIFJvdXRlciBlbnRyeXBvaW50czogZmlsZXMgaW4gcGFnZXMvIG9yIHNyYy9wYWdlcy9cbiAgICAgICAgaWYgKGl0ZW0ubWF0Y2goL1svXFxcXF0ocGFnZXN8c3JjWy9cXFxcXXBhZ2VzKVsvXFxcXF0vKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgd3JpdGVGdW5jdGlvbnNDb25maWcob3V0cHV0RGlyOiBzdHJpbmcpIHtcbiAgICAgIC8vIHdlIGRvbid0IHJ1biB0aGlzIGluIGRldmVsb3BtZW50IG1vZGUgYXMgaXQncyBub3QgbmVlZGVkXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBWMiBjb21iaW5lZCBjb25maWc6IHNpbmdsZSB0cmlnZ2VyIGhhbmRsZXMgYm90aCB3b3JrZmxvdyBhbmQgc3RlcCBleGVjdXRpb24uXG4gICAgICAvLyBUaGUgc3RlcCByb3V0ZSBubyBsb25nZXIgbmVlZHMgaXRzIG93biB0cmlnZ2VyIHNpbmNlIHN0ZXBzIGFyZSBleGVjdXRlZFxuICAgICAgLy8gaW5saW5lIGJ5IHRoZSBjb21iaW5lZCBoYW5kbGVyIG9yIHF1ZXVlZCBiYWNrIHRvIF9fd2tmX3dvcmtmbG93Xyogd2l0aCBzdGVwSWQuXG4gICAgICBjb25zdCBnZW5lcmF0ZWRDb25maWcgPSB7XG4gICAgICAgIHZlcnNpb246ICcwJyxcbiAgICAgICAgd29ya2Zsb3dzOiB7XG4gICAgICAgICAgbWF4RHVyYXRpb246ICdtYXgnLFxuICAgICAgICAgIGV4cGVyaW1lbnRhbFRyaWdnZXJzOiBbV09SS0ZMT1dfUVVFVUVfVFJJR0dFUl0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCB3cml0ZUZpbGUoXG4gICAgICAgIGpvaW4ob3V0cHV0RGlyLCAnLndlbGwta25vd24vd29ya2Zsb3cvdjEvY29uZmlnLmpzb24nKSxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoZ2VuZXJhdGVkQ29uZmlnLCBudWxsLCAyKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWMjogQnVpbGQgY29tYmluZWQgcm91dGUgdGhhdCBoYW5kbGVzIGJvdGggd29ya2Zsb3cgYW5kIHN0ZXAgZXhlY3V0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgYnVpbGRDb21iaW5lZEZ1bmN0aW9uKHtcbiAgICAgIGlucHV0RmlsZXMsXG4gICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICAgIHRzY29uZmlnUGF0aCxcbiAgICB9OiB7XG4gICAgICBpbnB1dEZpbGVzOiBzdHJpbmdbXTtcbiAgICAgIHdvcmtmbG93R2VuZXJhdGVkRGlyOiBzdHJpbmc7XG4gICAgICB0c2NvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgfSkge1xuICAgICAgY29uc3QgZmxvd1JvdXRlRGlyID0gam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ2Zsb3cnKTtcbiAgICAgIGF3YWl0IG1rZGlyKGZsb3dSb3V0ZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNyZWF0ZUNvbWJpbmVkQnVuZGxlKHtcbiAgICAgICAgZm9ybWF0OiAnZXNtJyxcbiAgICAgICAgaW5wdXRGaWxlcyxcbiAgICAgICAgc3RlcHNPdXRmaWxlOiBqb2luKGZsb3dSb3V0ZURpciwgJ19fc3RlcF9yZWdpc3RyYXRpb25zLmpzJyksXG4gICAgICAgIGZsb3dPdXRmaWxlOiBqb2luKGZsb3dSb3V0ZURpciwgJ3JvdXRlLmpzJyksXG4gICAgICAgIGJ1bmRsZUZpbmFsT3V0cHV0OiBmYWxzZSxcbiAgICAgICAgZXh0ZXJuYWxpemVOb25TdGVwczogdHJ1ZSxcbiAgICAgICAgc291cmNlU3RlcFJlZ2lzdHJhdGlvbkltcG9ydHM6IHRydWUsXG4gICAgICAgIHRzY29uZmlnUGF0aCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgYnVpbGRXZWJob29rUm91dGUoe1xuICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgfToge1xuICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXI6IHN0cmluZztcbiAgICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBjb25zdCB3ZWJob29rUm91dGVGaWxlID0gam9pbihcbiAgICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgICAgICd3ZWJob29rL1t0b2tlbl0vcm91dGUuanMnXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5jcmVhdGVXZWJob29rQnVuZGxlKHtcbiAgICAgICAgb3V0ZmlsZTogd2ViaG9va1JvdXRlRmlsZSxcbiAgICAgICAgYnVuZGxlOiBmYWxzZSwgLy8gTmV4dC5qcyBkb2Vzbid0IG5lZWQgYnVuZGxpbmdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZmluZEFwcERpcmVjdG9yeSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgY29uc3QgYXBwRGlyID0gcmVzb2x2ZSh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCAnYXBwJyk7XG4gICAgICBjb25zdCBzcmNBcHBEaXIgPSByZXNvbHZlKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsICdzcmMvYXBwJyk7XG4gICAgICBjb25zdCBwYWdlc0RpciA9IHJlc29sdmUodGhpcy5jb25maWcud29ya2luZ0RpciwgJ3BhZ2VzJyk7XG4gICAgICBjb25zdCBzcmNQYWdlc0RpciA9IHJlc29sdmUodGhpcy5jb25maWcud29ya2luZ0RpciwgJ3NyYy9wYWdlcycpO1xuXG4gICAgICAvLyBIZWxwZXIgdG8gY2hlY2sgaWYgYSBwYXRoIGV4aXN0cyBhbmQgaXMgYSBkaXJlY3RvcnlcbiAgICAgIGNvbnN0IGlzRGlyZWN0b3J5ID0gYXN5bmMgKHBhdGg6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGFjY2VzcyhwYXRoLCBjb25zdGFudHMuRl9PSyk7XG4gICAgICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBzdGF0KHBhdGgpO1xuICAgICAgICAgIGlmICghc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYXRoIGV4aXN0cyBidXQgaXMgbm90IGEgZGlyZWN0b3J5OiAke3BhdGh9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLm1lc3NhZ2UuaW5jbHVkZXMoJ25vdCBhIGRpcmVjdG9yeScpKSB7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIC8vIENoZWNrIGlmIGFwcCBkaXJlY3RvcnkgZXhpc3RzXG4gICAgICBpZiAoYXdhaXQgaXNEaXJlY3RvcnkoYXBwRGlyKSkge1xuICAgICAgICByZXR1cm4gYXBwRGlyO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBzcmMvYXBwIGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGlmIChhd2FpdCBpc0RpcmVjdG9yeShzcmNBcHBEaXIpKSB7XG4gICAgICAgIHJldHVybiBzcmNBcHBEaXI7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIG5vIGFwcCBkaXJlY3RvcnkgZXhpc3RzLCBjaGVjayBmb3IgcGFnZXMgZGlyZWN0b3J5IGFuZCBjcmVhdGUgYXBwIG5leHQgdG8gaXRcbiAgICAgIGlmIChhd2FpdCBpc0RpcmVjdG9yeShwYWdlc0RpcikpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGFwcCBkaXJlY3RvcnkgbmV4dCB0byBwYWdlcyBkaXJlY3RvcnlcbiAgICAgICAgYXdhaXQgbWtkaXIoYXBwRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIGFwcERpcjtcbiAgICAgIH1cblxuICAgICAgaWYgKGF3YWl0IGlzRGlyZWN0b3J5KHNyY1BhZ2VzRGlyKSkge1xuICAgICAgICAvLyBDcmVhdGUgc3JjL2FwcCBkaXJlY3RvcnkgbmV4dCB0byBzcmMvcGFnZXMgZGlyZWN0b3J5XG4gICAgICAgIGF3YWl0IG1rZGlyKHNyY0FwcERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBzcmNBcHBEaXI7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIE5leHQuanMgYXBwIG9yIHBhZ2VzIGRpcmVjdG9yeS4gRXhwZWN0ZWQgb25lIG9mOiBcImFwcFwiLCBcInNyYy9hcHBcIiwgXCJwYWdlc1wiLCBvciBcInNyYy9wYWdlc1wiIHRvIGV4aXN0LidcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgQ2FjaGVkTmV4dEJ1aWxkZXJFYWdlciA9IE5leHRCdWlsZGVyO1xuICByZXR1cm4gTmV4dEJ1aWxkZXI7XG59XG4iXX0=
371
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci1lYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9idWlsZGVyLWVhZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBZUEsa0RBZ2hCQztBQS9oQkQscUNBQW9DO0FBQ3BDLCtDQUE0RTtBQUM1RSx5Q0FBNkQ7QUFNN0QsMERBQWtDO0FBRWxDLElBQUksc0JBQTJCLENBQUM7QUFFaEMsOEVBQThFO0FBQzlFLDZFQUE2RTtBQUM3RSxvRUFBb0U7QUFDN0QsS0FBSyxVQUFVLG1CQUFtQjtJQUN2QyxJQUFJLHNCQUFzQixFQUFFLENBQUM7UUFDM0IsT0FBTyxzQkFBc0IsQ0FBQztJQUNoQyxDQUFDO0lBRUQsTUFBTSxFQUNKLFdBQVcsRUFBRSxnQkFBZ0IsRUFDN0Isc0JBQXNCO0lBQ3RCLDRJQUE0STtNQUM3SSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQ2IsOEJBQThCLENBQy9CLENBQXdDLENBQUM7SUFFMUMsTUFBTSxXQUFZLFNBQVEsZ0JBQWdCO1FBS3hDLEtBQUssQ0FBQyxLQUFLO1lBQ1QsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNoRCxNQUFNLG9CQUFvQixHQUFHLElBQUEsZ0JBQUksRUFBQyxTQUFTLEVBQUUseUJBQXlCLENBQUMsQ0FBQztZQUV4RSxrQ0FBa0M7WUFDbEMsTUFBTSxJQUFBLGdCQUFLLEVBQUMsb0JBQW9CLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN2RCxNQUFNLElBQUEsb0JBQVMsRUFBQyxJQUFBLGdCQUFJLEVBQUMsb0JBQW9CLEVBQUUsWUFBWSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFFL0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDOUMsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUVuRCxNQUFN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TyxNQUFNLENBQUM7WUFDaEIsQ0FBQztZQUVELElBQUksTUFBTSxXQUFXLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDbkMsdURBQXVEO2dCQUN2RCxNQUFNLElBQUEsZ0JBQUssRUFBQyxTQUFTLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDNUMsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQztZQUVELE1BQU0sSUFBSSxLQUFLLENBQ2IscUhBQXFILENBQ3RILENBQUM7UUFDSixDQUFDO0tBQ0Y7SUFFRCxzQkFBc0IsR0FBRyxXQUFXLENBQUM7SUFDckMsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbnN0YW50cyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgYWNjZXNzLCBjb3B5RmlsZSwgbWtkaXIsIHN0YXQsIHdyaXRlRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZXh0bmFtZSwgam9pbiwgcmVsYXRpdmUsIHJlc29sdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHR5cGUge1xuICBOZXh0Q29uZmlnIGFzIEJ1aWxkZXJOZXh0Q29uZmlnLFxuICBXb3JrZmxvd01hbmlmZXN0LFxufSBmcm9tICdAd29ya2Zsb3cvYnVpbGRlcnMnO1xuaW1wb3J0IHR5cGUgeyBOZXh0Q29uZmlnIGFzIFByb2plY3ROZXh0Q29uZmlnIH0gZnJvbSAnbmV4dCc7XG5pbXBvcnQgV2F0Y2hwYWNrIGZyb20gJ3dhdGNocGFjayc7XG5cbmxldCBDYWNoZWROZXh0QnVpbGRlckVhZ2VyOiBhbnk7XG5cbi8vIENyZWF0ZSB0aGUgZWFnZXIgTmV4dCBidWlsZGVyIGR5bmFtaWNhbGx5IGJ5IGV4dGVuZGluZyB0aGUgRVNNIEJhc2VCdWlsZGVyLlxuLy8gRXhwb3J0ZWQgYXMgZ2V0TmV4dEJ1aWxkZXJFYWdlcigpIHRvIGFsbG93IENvbW1vbkpTIG1vZHVsZXMgdG8gaW1wb3J0IGZyb21cbi8vIHRoZSBFU00gQHdvcmtmbG93L2J1aWxkZXJzIHBhY2thZ2UgdmlhIGR5bmFtaWMgaW1wb3J0IGF0IHJ1bnRpbWUuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0TmV4dEJ1aWxkZXJFYWdlcigpIHtcbiAgaWYgKENhY2hlZE5leHRCdWlsZGVyRWFnZXIpIHtcbiAgICByZXR1cm4gQ2FjaGVkTmV4dEJ1aWxkZXJFYWdlcjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBCYXNlQnVpbGRlcjogQmFzZUJ1aWxkZXJDbGFzcyxcbiAgICBXT1JLRkxPV19RVUVVRV9UUklHR0VSLFxuICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3NlY3VyaXR5L25vR2xvYmFsRXZhbDogTmVlZCB0byB1c2UgZXZhbCBoZXJlIHRvIGF2b2lkIFR5cGVTY3JpcHQgZnJvbSB0cmFuc3BpbGluZyB0aGUgaW1wb3J0IHN0YXRlbWVudCBpbnRvIGByZXF1aXJlKClgXG4gIH0gPSAoYXdhaXQgZXZhbChcbiAgICAnaW1wb3J0KFwiQHdvcmtmbG93L2J1aWxkZXJzXCIpJ1xuICApKSBhcyB0eXBlb2YgaW1wb3J0KCdAd29ya2Zsb3cvYnVpbGRlcnMnKTtcblxuICBjbGFzcyBOZXh0QnVpbGRlciBleHRlbmRzIEJhc2VCdWlsZGVyQ2xhc3Mge1xuICAgIHByb3RlY3RlZCBkZWNsYXJlIGNvbmZpZzogQnVpbGRlck5leHRDb25maWcgJiB7XG4gICAgICBwYWdlRXh0ZW5zaW9uczogTm9uTnVsbGFibGU8UHJvamVjdE5leHRDb25maWdbJ3BhZ2VFeHRlbnNpb25zJ10+O1xuICAgIH07XG5cbiAgICBhc3luYyBidWlsZCgpIHtcbiAgICAgIGNvbnN0IG91dHB1dERpciA9IGF3YWl0IHRoaXMuZmluZEFwcERpcmVjdG9yeSgpO1xuICAgICAgY29uc3Qgd29ya2Zsb3dHZW5lcmF0ZWREaXIgPSBqb2luKG91dHB1dERpciwgJy53ZWxsLWtub3duL3dvcmtmbG93L3YxJyk7XG5cbiAgICAgIC8vIEVuc3VyZSBvdXRwdXQgZGlyZWN0b3JpZXMgZXhpc3RcbiAgICAgIGF3YWl0IG1rZGlyKHdvcmtmbG93R2VuZXJhdGVkRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZShqb2luKHdvcmtmbG93R2VuZXJhdGVkRGlyLCAnLmdpdGlnbm9yZScpLCAnKicpO1xuXG4gICAgICBjb25zdCBpbnB1dEZpbGVzID0gYXdhaXQgdGhpcy5nZXRJbnB1dEZpbGVzKCk7XG4gICAgICBjb25zdCB0c2NvbmZpZ1BhdGggPSBhd2FpdCB0aGlzLmZpbmRUc0NvbmZpZ1BhdGgoKTtcblxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgaW5wdXRGaWxlcyxcbiAgICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgICAgIHRzY29uZmlnUGF0aCxcbiAgICAgIH07XG5cbiAgICAgIC8vIFYyOiBCdWlsZCBjb21iaW5lZCByb3V0ZSAocmVwbGFjZXMgc2VwYXJhdGUgc3RlcCArIGZsb3cgcm91dGVzKVxuICAgICAgY29uc3QgY29tYmluZWRSZXN1bHQgPSBhd2FpdCB0aGlzLmJ1aWxkQ29tYmluZWRGdW5jdGlvbihvcHRpb25zKTtcbiAgICAgIGF3YWl0IHRoaXMuYnVpbGRXZWJob29rUm91dGUoeyB3b3JrZmxvd0dlbmVyYXRlZERpciB9KTtcblxuICAgICAgY29uc3Qgd3JpdGVNYW5pZmVzdCA9IGFzeW5jIChcbiAgICAgICAgc291cmNlTWFuaWZlc3Q6IFdvcmtmbG93TWFuaWZlc3QgfCB1bmRlZmluZWRcbiAgICAgICkgPT4ge1xuICAgICAgICBjb25zdCBtYW5pZmVzdCA9IHtcbiAgICAgICAgICBzdGVwczogeyAuLi5zb3VyY2VNYW5pZmVzdD8uc3RlcHMgfSxcbiAgICAgICAgICB3b3JrZmxvd3M6IHsgLi4uc291cmNlTWFuaWZlc3Q/LndvcmtmbG93cyB9LFxuICAgICAgICAgIGNsYXNzZXM6IHsgLi4uc291cmNlTWFuaWZlc3Q/LmNsYXNzZXMgfSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBXcml0ZSBtYW5pZmVzdFxuICAgICAgICBjb25zdCB3b3JrZmxvd0J1bmRsZVBhdGggPSBqb2luKHdvcmtmbG93R2VuZXJhdGVkRGlyLCAnZmxvdy9yb3V0ZS5qcycpO1xuICAgICAgICBjb25zdCBtYW5pZmVzdEpzb24gPSBhd2FpdCB0aGlzLmNyZWF0ZU1hbmlmZXN0KHtcbiAgICAgICAgICB3b3JrZmxvd0J1bmRsZVBhdGgsXG4gICAgICAgICAgbWFuaWZlc3REaXI6IHdvcmtmbG93R2VuZXJhdGVkRGlyLFxuICAgICAgICAgIG1hbmlmZXN0LFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBFeHBvc2UgbWFuaWZlc3QgYXMgYSBzdGF0aWMgZmlsZSB3aGVuIFdPUktGTE9XX1BVQkxJQ19NQU5JRkVTVD0xLlxuICAgICAgICBpZiAodGhpcy5zaG91bGRFeHBvc2VQdWJsaWNNYW5pZmVzdCAmJiBtYW5pZmVzdEpzb24pIHtcbiAgICAgICAgICBjb25zdCBwdWJsaWNNYW5pZmVzdERpciA9IGpvaW4oXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy53b3JraW5nRGlyLFxuICAgICAgICAgICAgJ3B1YmxpYy8ud2VsbC1rbm93bi93b3JrZmxvdy92MSdcbiAgICAgICAgICApO1xuICAgICAgICAgIGF3YWl0IG1rZGlyKHB1YmxpY01hbmlmZXN0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuVkVSQ0VMX0RFUExPWU1FTlRfSUQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXdhaXQgd3JpdGVGaWxlKGpvaW4ocHVibGljTWFuaWZlc3REaXIsICcuZ2l0aWdub3JlJyksICcqJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IGNvcHlGaWxlKFxuICAgICAgICAgICAgam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ21hbmlmZXN0Lmpzb24nKSxcbiAgICAgICAgICAgIGpvaW4ocHVibGljTWFuaWZlc3REaXIsICdtYW5pZmVzdC5qc29uJylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBhd2FpdCB3cml0ZU1hbmlmZXN0KGNvbWJpbmVkUmVzdWx0Py5tYW5pZmVzdCk7XG5cbiAgICAgIGF3YWl0IHRoaXMud3JpdGVGdW5jdGlvbnNDb25maWcob3V0cHV0RGlyKTtcblxuICAgICAgaWYgKHRoaXMuY29uZmlnLndhdGNoKSB7XG4gICAgICAgIC8vIFRPRE86IGltcGxlbWVudCB3YXRjaCBtb2RlIGZvciBjb21iaW5lZCBidW5kbGVcbiAgICAgICAgLy8gRm9yIG5vdywgZmFsbCBiYWNrIHRvIGZ1bGwgcmVidWlsZCBvbiBmaWxlIGNoYW5nZXNcbiAgICAgICAgaWYgKCFjb21iaW5lZFJlc3VsdD8uaW50ZXJpbUJ1bmRsZUN0eCB8fCAhY29tYmluZWRSZXN1bHQuYnVuZGxlRmluYWwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnSW52YXJpYW50OiBleHBlY3RlZCB3b3JrZmxvdyBidWlsZCBjb250ZXh0IGluIHdhdGNoIG1vZGUnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0ZXAgcmVnaXN0cmF0aW9ucyBtYXkgYmUgZW1pdHRlZCBhcyBzb3VyY2UgaW1wb3J0cyB3aXRob3V0IGFuXG4gICAgICAgIC8vIGVzYnVpbGQgY29udGV4dCB3aGVuIGV4dGVybmFsaXplTm9uU3RlcHMgaXMgZW5hYmxlZC5cbiAgICAgICAgbGV0IHN0ZXBzQ3R4ID0gY29tYmluZWRSZXN1bHQuc3RlcHNDb250ZXh0O1xuICAgICAgICBsZXQgd29ya2Zsb3dzQ3R4ID0ge1xuICAgICAgICAgIGludGVyaW1CdW5kbGVDdHg6IGNvbWJpbmVkUmVzdWx0LmludGVyaW1CdW5kbGVDdHgsXG4gICAgICAgICAgYnVuZGxlRmluYWw6IGNvbWJpbmVkUmVzdWx0LmJ1bmRsZUZpbmFsLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZVBhdGggPSAocGF0aG5hbWU6IHN0cmluZykgPT5cbiAgICAgICAgICBwYXRobmFtZS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgICAgIHR5cGUgV2F0Y2hwYWNrVGltZUluZm9FbnRyeSA9IHtcbiAgICAgICAgICBzYWZlVGltZTogbnVtYmVyO1xuICAgICAgICAgIHRpbWVzdGFtcD86IG51bWJlcjtcbiAgICAgICAgfTtcbiAgICAgICAgdHlwZSBGaWxlQ2hhbmdlcyA9IHtcbiAgICAgICAgICBhZGRlZEZpbGVzOiBzdHJpbmdbXTtcbiAgICAgICAgICBtb2RpZmllZEZpbGVzOiBzdHJpbmdbXTtcbiAgICAgICAgICByZW1vdmVkRmlsZXM6IHN0cmluZ1tdO1xuICAgICAgICB9O1xuICAgICAgICBsZXQgcHJldmlvdXNUaW1lSW5mbyA9IG5ldyBNYXA8c3RyaW5nLCBXYXRjaHBhY2tUaW1lSW5mb0VudHJ5PigpO1xuXG4gICAgICAgIGNvbnN0IHdhdGNoYWJsZUV4dGVuc2lvbnMgPSBuZXcgU2V0KFtcbiAgICAgICAgICAnLmpzJyxcbiAgICAgICAgICAnLmpzeCcsXG4gICAgICAgICAgJy50cycsXG4gICAgICAgICAgJy50c3gnLFxuICAgICAgICAgICcubXRzJyxcbiAgICAgICAgICAnLmN0cycsXG4gICAgICAgICAgJy5janMnLFxuICAgICAgICAgICcubWpzJyxcbiAgICAgICAgXSk7XG4gICAgICAgIGNvbnN0IGlnbm9yZWRQYXRoRnJhZ21lbnRzID0gW1xuICAgICAgICAgICcvLmdpdC8nLFxuICAgICAgICAgICcvbm9kZV9tb2R1bGVzLycsXG4gICAgICAgICAgJy8ubmV4dC8nLFxuICAgICAgICAgICcvLnR1cmJvLycsXG4gICAgICAgICAgJy8udmVyY2VsLycsXG4gICAgICAgICAgJy9kaXN0LycsXG4gICAgICAgICAgJy9idWlsZC8nLFxuICAgICAgICAgICcvb3V0LycsXG4gICAgICAgICAgJy8uY2FjaGUvJyxcbiAgICAgICAgICAnLy55YXJuLycsXG4gICAgICAgICAgJy8ucG5wbS1zdG9yZS8nLFxuICAgICAgICAgICcvLnBhcmNlbC1jYWNoZS8nLFxuICAgICAgICAgICcvLndlbGwta25vd24vd29ya2Zsb3cvJyxcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZEdlbmVyYXRlZERpciA9IHdvcmtmbG93R2VuZXJhdGVkRGlyLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgICAgaWdub3JlZFBhdGhGcmFnbWVudHMucHVzaChub3JtYWxpemVkR2VuZXJhdGVkRGlyKTtcblxuICAgICAgICAvLyBUaGVyZSBpcyBhIG5vZGUuanMgYnVnIG9uIE1hY09TIHdoaWNoIGNhdXNlcyBjbG9zaW5nIGZpbGUgd2F0Y2hlcnMgdG8gYmUgcmVhbGx5IHNsb3cuXG4gICAgICAgIC8vIFRoaXMgbGltaXRzIHRoZSBudW1iZXIgb2Ygd2F0Y2hlcnMgdG8gbWl0aWdhdGUgdGhlIGlzc3VlLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzI5OTQ5XG4gICAgICAgIHByb2Nlc3MuZW52LldBVENIUEFDS19XQVRDSEVSX0xJTUlUID1cbiAgICAgICAgICBwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJyA/ICcyMCcgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgY29uc3Qgd2F0Y2hlciA9IG5ldyBXYXRjaHBhY2soe1xuICAgICAgICAgIC8vIFdhdGNocGFjayBkZWZhdWx0IGlzIDIwMG1zIHdoaWNoIGFkZHMgMjAwbXMgb2YgZGVhZCB0aW1lIG9uIGJvb3R1cC5cbiAgICAgICAgICBhZ2dyZWdhdGVUaW1lb3V0OiA1LFxuICAgICAgICAgIGlnbm9yZWQ6IChwYXRobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IHBhdGhuYW1lLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IGV4dG5hbWUobm9ybWFsaXplZFBhdGgpO1xuICAgICAgICAgICAgaWYgKGV4dGVuc2lvbiAmJiAhd2F0Y2hhYmxlRXh0ZW5zaW9ucy5oYXMoZXh0ZW5zaW9uKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChub3JtYWxpemVkUGF0aC5zdGFydHNXaXRoKG5vcm1hbGl6ZWRHZW5lcmF0ZWREaXIpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBmcmFnbWVudCBvZiBpZ25vcmVkUGF0aEZyYWdtZW50cykge1xuICAgICAgICAgICAgICBpZiAobm9ybWFsaXplZFBhdGguaW5jbHVkZXMoZnJhZ21lbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZWFkVGltZUluZm9FbnRyaWVzID0gKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJhd0VudHJpZXMgPSB3YXRjaGVyLmdldFRpbWVJbmZvRW50cmllcygpIGFzIE1hcDxcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIFdhdGNocGFja1RpbWVJbmZvRW50cnlcbiAgICAgICAgICA+O1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRFbnRyaWVzID0gbmV3IE1hcDxzdHJpbmcsIFdhdGNocGFja1RpbWVJbmZvRW50cnk+KCk7XG4gICAgICAgICAgZm9yIChjb25zdCBbcGF0aCwgaW5mb10gb2YgcmF3RW50cmllcykge1xuICAgICAgICAgICAgbm9ybWFsaXplZEVudHJpZXMuc2V0KG5vcm1hbGl6ZVBhdGgocGF0aCksIGluZm8pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbm9ybWFsaXplZEVudHJpZXM7XG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IHJlYnVpbGRRdWV1ZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgICAgIGNvbnN0IGVucXVldWUgPSAodGFzazogKCkgPT4gUHJvbWlzZTx2b2lkPikgPT4ge1xuICAgICAgICAgIHJlYnVpbGRRdWV1ZSA9IHJlYnVpbGRRdWV1ZS50aGVuKHRhc2spLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHByb2Nlc3MgZmlsZSBjaGFuZ2UnLCBlcnJvcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHJlYnVpbGRRdWV1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBmdWxsUmVidWlsZCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0aGlzLmNsZWFyRGlzY292ZXJlZEVudHJpZXNDYWNoZSgpO1xuICAgICAgICAgIGNvbnN0IG5ld0lucHV0RmlsZXMgPSBhd2FpdCB0aGlzLmdldElucHV0RmlsZXMoKTtcbiAgICAgICAgICBvcHRpb25zLmlucHV0RmlsZXMgPSBuZXdJbnB1dEZpbGVzO1xuXG4gICAgICAgICAgYXdhaXQgc3RlcHNDdHg/LmRpc3Bvc2UoKTtcbiAgICAgICAgICBhd2FpdCB3b3JrZmxvd3NDdHguaW50ZXJpbUJ1bmRsZUN0eC5kaXNwb3NlKCk7XG5cbiAgICAgICAgICBjb25zdCBuZXdDb21iaW5lZCA9IGF3YWl0IHRoaXMuYnVpbGRDb21iaW5lZEZ1bmN0aW9uKG9wdGlvbnMpO1xuICAgICAgICAgIHN0ZXBzQ3R4ID0gbmV3Q29tYmluZWQuc3RlcHNDb250ZXh0O1xuXG4gICAgICAgICAgaWYgKCFuZXdDb21iaW5lZD8uaW50ZXJpbUJ1bmRsZUN0eCB8fCAhbmV3Q29tYmluZWQ/LmJ1bmRsZUZpbmFsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICdJbnZhcmlhbnQ6IGV4cGVjdGVkIHdvcmtmbG93cyBidW5kbGUgY29udGV4dCBhZnRlciByZWJ1aWxkJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgd29ya2Zsb3dzQ3R4ID0ge1xuICAgICAgICAgICAgaW50ZXJpbUJ1bmRsZUN0eDogbmV3Q29tYmluZWQuaW50ZXJpbUJ1bmRsZUN0eCxcbiAgICAgICAgICAgIGJ1bmRsZUZpbmFsOiBuZXdDb21iaW5lZC5idW5kbGVGaW5hbCxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgYXdhaXQgd3JpdGVNYW5pZmVzdChuZXdDb21iaW5lZC5tYW5pZmVzdCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaXNXYXRjaGFibGVGaWxlID0gKHBhdGg6IHN0cmluZykgPT5cbiAgICAgICAgICB3YXRjaGFibGVFeHRlbnNpb25zLmhhcyhleHRuYW1lKHBhdGgpKTtcblxuICAgICAgICBjb25zdCBub3JtYWxpemVXYXRjaHBhY2tQYXRocyA9IChwYXRocz86IEl0ZXJhYmxlPHN0cmluZz4pID0+IHtcbiAgICAgICAgICBjb25zdCBub3JtYWxpemVkUGF0aHM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgaWYgKCFwYXRocykge1xuICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRQYXRocztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IHBhdGggb2YgcGF0aHMpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplUGF0aChwYXRoKTtcbiAgICAgICAgICAgIGlmIChpc1dhdGNoYWJsZUZpbGUobm9ybWFsaXplZFBhdGgpKSB7XG4gICAgICAgICAgICAgIG5vcm1hbGl6ZWRQYXRocy5wdXNoKG5vcm1hbGl6ZWRQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbm9ybWFsaXplZFBhdGhzO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHVuaXF1ZSA9IChwYXRoczogc3RyaW5nW10pID0+IFsuLi5uZXcgU2V0KHBhdGhzKV07XG5cbiAgICAgICAgY29uc3QgZ2V0Q29tcGFyYWJsZVRpbWVzdGFtcCA9IChlbnRyeTogV2F0Y2hwYWNrVGltZUluZm9FbnRyeSkgPT5cbiAgICAgICAgICBlbnRyeS50aW1lc3RhbXAgPz8gZW50cnkuc2FmZVRpbWU7XG5cbiAgICAgICAgY29uc3QgZmluZFJlbW92ZWRGaWxlcyA9IChcbiAgICAgICAgICBjdXJyZW50RW50cmllczogTWFwPHN0cmluZywgV2F0Y2hwYWNrVGltZUluZm9FbnRyeT4sXG4gICAgICAgICAgcHJldmlvdXNFbnRyaWVzOiBNYXA8c3RyaW5nLCBXYXRjaHBhY2tUaW1lSW5mb0VudHJ5PlxuICAgICAgICApID0+IHtcbiAgICAgICAgICBjb25zdCByZW1vdmVkOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgIGZvciAoY29uc3QgcGF0aCBvZiBwcmV2aW91c0VudHJpZXMua2V5cygpKSB7XG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRFbnRyaWVzLmhhcyhwYXRoKSAmJiBpc1dhdGNoYWJsZUZpbGUocGF0aCkpIHtcbiAgICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKHBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVtb3ZlZDtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBmaW5kQWRkZWRBbmRNb2RpZmllZEZpbGVzID0gKFxuICAgICAgICAgIGN1cnJlbnRFbnRyaWVzOiBNYXA8c3RyaW5nLCBXYXRjaHBhY2tUaW1lSW5mb0VudHJ5PixcbiAgICAgICAgICBwcmV2aW91c0VudHJpZXM6IE1hcDxzdHJpbmcsIFdhdGNocGFja1RpbWVJbmZvRW50cnk+XG4gICAgICAgICkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFkZGVkOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgIGNvbnN0IG1vZGlmaWVkOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBbcGF0aCwgaW5mb10gb2YgY3VycmVudEVudHJpZXMpIHtcbiAgICAgICAgICAgIGlmICghaXNXYXRjaGFibGVGaWxlKHBhdGgpKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwcmV2aW91cyA9IHByZXZpb3VzRW50cmllcy5nZXQocGF0aCk7XG4gICAgICAgICAgICBpZiAoIXByZXZpb3VzKSB7XG4gICAgICAgICAgICAgIGFkZGVkLnB1c2gocGF0aCk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGdldENvbXBhcmFibGVUaW1lc3RhbXAoaW5mbykgIT09IGdldENvbXBhcmFibGVUaW1lc3RhbXAocHJldmlvdXMpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgbW9kaWZpZWQucHVzaChwYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4geyBhZGRlZCwgbW9kaWZpZWQgfTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBkZXRlcm1pbmVGaWxlQ2hhbmdlcyA9IChcbiAgICAgICAgICBjdXJyZW50RW50cmllczogTWFwPHN0cmluZywgV2F0Y2hwYWNrVGltZUluZm9FbnRyeT4sXG4gICAgICAgICAgcHJldmlvdXNFbnRyaWVzOiBNYXA8c3RyaW5nLCBXYXRjaHBhY2tUaW1lSW5mb0VudHJ5PlxuICAgICAgICApOiBGaWxlQ2hhbmdlcyA9PiB7XG4gICAgICAgICAgY29uc3QgcmVtb3ZlZEZpbGVzID0gZmluZFJlbW92ZWRGaWxlcyhcbiAgICAgICAgICAgIGN1cnJlbnRFbnRyaWVzLFxuICAgICAgICAgICAgcHJldmlvdXNFbnRyaWVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB7IGFkZGVkLCBtb2RpZmllZCB9ID0gZmluZEFkZGVkQW5kTW9kaWZpZWRGaWxlcyhcbiAgICAgICAgICAgIGN1cnJlbnRFbnRyaWVzLFxuICAgICAgICAgICAgcHJldmlvdXNFbnRyaWVzXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhZGRlZEZpbGVzOiBhZGRlZCxcbiAgICAgICAgICAgIG1vZGlmaWVkRmlsZXM6IG1vZGlmaWVkLFxuICAgICAgICAgICAgcmVtb3ZlZEZpbGVzLFxuICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgbWVyZ2VGaWxlQ2hhbmdlcyA9ICh7XG4gICAgICAgICAgY3VycmVudEVudHJpZXMsXG4gICAgICAgICAgcHJldmlvdXNFbnRyaWVzLFxuICAgICAgICAgIHRpbWVzdGFtcENoYW5nZXMsXG4gICAgICAgICAgZXZlbnRDaGFuZ2VkRmlsZXMsXG4gICAgICAgICAgZXZlbnRSZW1vdmVkRmlsZXMsXG4gICAgICAgIH06IHtcbiAgICAgICAgICBjdXJyZW50RW50cmllczogTWFwPHN0cmluZywgV2F0Y2hwYWNrVGltZUluZm9FbnRyeT47XG4gICAgICAgICAgcHJldmlvdXNFbnRyaWVzOiBNYXA8c3RyaW5nLCBXYXRjaHBhY2tUaW1lSW5mb0VudHJ5PjtcbiAgICAgICAgICB0aW1lc3RhbXBDaGFuZ2VzOiBGaWxlQ2hhbmdlcztcbiAgICAgICAgICBldmVudENoYW5nZWRGaWxlczogc3RyaW5nW107XG4gICAgICAgICAgZXZlbnRSZW1vdmVkRmlsZXM6IHN0cmluZ1tdO1xuICAgICAgICB9KTogRmlsZUNoYW5nZXMgPT4gKHtcbiAgICAgICAgICBhZGRlZEZpbGVzOiB1bmlxdWUoW1xuICAgICAgICAgICAgLi4udGltZXN0YW1wQ2hhbmdlcy5hZGRlZEZpbGVzLFxuICAgICAgICAgICAgLi4uZXZlbnRDaGFuZ2VkRmlsZXMuZmlsdGVyKFxuICAgICAgICAgICAgICAocGF0aCkgPT4gY3VycmVudEVudHJpZXMuaGFzKHBhdGgpICYmICFwcmV2aW91c0VudHJpZXMuaGFzKHBhdGgpXG4gICAgICAgICAgICApLFxuICAgICAgICAgIF0pLFxuICAgICAgICAgIG1vZGlmaWVkRmlsZXM6IHVuaXF1ZShbXG4gICAgICAgICAgICAuLi50aW1lc3RhbXBDaGFuZ2VzLm1vZGlmaWVkRmlsZXMsXG4gICAgICAgICAgICAuLi5ldmVudENoYW5nZWRGaWxlcyxcbiAgICAgICAgICBdKSxcbiAgICAgICAgICByZW1vdmVkRmlsZXM6IHVuaXF1ZShbXG4gICAgICAgICAgICAuLi50aW1lc3RhbXBDaGFuZ2VzLnJlbW92ZWRGaWxlcyxcbiAgICAgICAgICAgIC4uLmV2ZW50UmVtb3ZlZEZpbGVzLFxuICAgICAgICAgIF0pLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBoYXNGaWxlQ2hhbmdlcyA9ICh7XG4gICAgICAgICAgYWRkZWRGaWxlcyxcbiAgICAgICAgICBtb2RpZmllZEZpbGVzLFxuICAgICAgICAgIHJlbW92ZWRGaWxlcyxcbiAgICAgICAgfTogRmlsZUNoYW5nZXMpID0+XG4gICAgICAgICAgYWRkZWRGaWxlcy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgbW9kaWZpZWRGaWxlcy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgcmVtb3ZlZEZpbGVzLmxlbmd0aCA+IDA7XG5cbiAgICAgICAgbGV0IGlzSW5pdGlhbCA9IHRydWU7XG5cbiAgICAgICAgd2F0Y2hlci5vbihcbiAgICAgICAgICAnYWdncmVnYXRlZCcsXG4gICAgICAgICAgKGNoYW5nZXM/OiBTZXQ8c3RyaW5nPiwgcmVtb3ZhbHM/OiBTZXQ8c3RyaW5nPikgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEVudHJpZXMgPSByZWFkVGltZUluZm9FbnRyaWVzKCk7XG4gICAgICAgICAgICBjb25zdCBldmVudENoYW5nZWRGaWxlcyA9IG5vcm1hbGl6ZVdhdGNocGFja1BhdGhzKGNoYW5nZXMpO1xuICAgICAgICAgICAgY29uc3QgZXZlbnRSZW1vdmVkRmlsZXMgPSBub3JtYWxpemVXYXRjaHBhY2tQYXRocyhyZW1vdmFscyk7XG4gICAgICAgICAgICBjb25zdCB0aW1lc3RhbXBDaGFuZ2VzID0gZGV0ZXJtaW5lRmlsZUNoYW5nZXMoXG4gICAgICAgICAgICAgIGN1cnJlbnRFbnRyaWVzLFxuICAgICAgICAgICAgICBwcmV2aW91c1RpbWVJbmZvXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBmaWxlQ2hhbmdlcyA9IG1lcmdlRmlsZUNoYW5nZXMoe1xuICAgICAgICAgICAgICBjdXJyZW50RW50cmllcyxcbiAgICAgICAgICAgICAgcHJldmlvdXNFbnRyaWVzOiBwcmV2aW91c1RpbWVJbmZvLFxuICAgICAgICAgICAgICB0aW1lc3RhbXBDaGFuZ2VzLFxuICAgICAgICAgICAgICBldmVudENoYW5nZWRGaWxlcyxcbiAgICAgICAgICAgICAgZXZlbnRSZW1vdmVkRmlsZXMsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcHJldmlvdXNUaW1lSW5mbyA9IGN1cnJlbnRFbnRyaWVzO1xuXG4gICAgICAgICAgICBpZiAoaXNJbml0aWFsKSB7XG4gICAgICAgICAgICAgIGlzSW5pdGlhbCA9IGZhbHNlO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZXZlbnRDaGFuZ2VkRmlsZXMubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICAgICAgZXZlbnRSZW1vdmVkRmlsZXMubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWhhc0ZpbGVDaGFuZ2VzKGZpbGVDaGFuZ2VzKSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVucXVldWUoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICBhd2FpdCBmdWxsUmVidWlsZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIHdhdGNoZXIud2F0Y2goe1xuICAgICAgICAgIGRpcmVjdG9yaWVzOiBbdGhpcy5jb25maWcud29ya2luZ0Rpcl0sXG4gICAgICAgICAgc3RhcnRUaW1lOiBEYXRlLm5vdygpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgZ2V0SW5wdXRGaWxlcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICBjb25zdCBpbnB1dEZpbGVzID0gYXdhaXQgc3VwZXIuZ2V0SW5wdXRGaWxlcygpO1xuICAgICAgcmV0dXJuIGlucHV0RmlsZXMuZmlsdGVyKChmaWxlKSA9PiB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gcmVsYXRpdmUodGhpcy5jb25maWcud29ya2luZ0RpciwgZmlsZSkucmVwbGFjZUFsbChcbiAgICAgICAgICAnXFxcXCcsXG4gICAgICAgICAgJy8nXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gTWF0Y2ggQXBwIFJvdXRlciByb3V0ZSwgcGFnZSwgYW5kIGxheW91dCBlbnRyeXBvaW50cyBpbiBhcHAvIG9yIHNyYy9hcHAvLlxuICAgICAgICBpZiAoL14oPzphcHB8c3JjXFwvYXBwKVxcLyg/Oi4qXFwvKT8oPzpyb3V0ZXxwYWdlfGxheW91dClcXC4vLnRlc3QoZW50cnkpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNYXRjaCBldmVyeSBQYWdlcyBSb3V0ZXIgZW50cnlwb2ludCBpbiBwYWdlcy8gb3Igc3JjL3BhZ2VzLy5cbiAgICAgICAgaWYgKC9eKD86cGFnZXN8c3JjXFwvcGFnZXMpXFwvLy50ZXN0KGVudHJ5KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWF0Y2ggTmV4dC5qcyByb290IGVudHJ5cG9pbnRzIGF0IHRoZSBwcm9qZWN0IHJvb3Qgb3IgdW5kZXIgc3JjLy5cbiAgICAgICAgcmV0dXJuIFsnaW5zdHJ1bWVudGF0aW9uJywgJ21pZGRsZXdhcmUnLCAncHJveHknXS5zb21lKChuYW1lKSA9PlxuICAgICAgICAgIHRoaXMuY29uZmlnLnBhZ2VFeHRlbnNpb25zLnNvbWUoXG4gICAgICAgICAgICAoZXh0ZW5zaW9uKSA9PlxuICAgICAgICAgICAgICBlbnRyeSA9PT0gYCR7bmFtZX0uJHtleHRlbnNpb259YCB8fFxuICAgICAgICAgICAgICBlbnRyeSA9PT0gYHNyYy8ke25hbWV9LiR7ZXh0ZW5zaW9ufWBcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHdyaXRlRnVuY3Rpb25zQ29uZmlnKG91dHB1dERpcjogc3RyaW5nKSB7XG4gICAgICAvLyB3ZSBkb24ndCBydW4gdGhpcyBpbiBkZXZlbG9wbWVudCBtb2RlIGFzIGl0J3Mgbm90IG5lZWRlZFxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVjIgY29tYmluZWQgY29uZmlnOiBzaW5nbGUgdHJpZ2dlciBoYW5kbGVzIGJvdGggd29ya2Zsb3cgYW5kIHN0ZXAgZXhlY3V0aW9uLlxuICAgICAgLy8gVGhlIHN0ZXAgcm91dGUgbm8gbG9uZ2VyIG5lZWRzIGl0cyBvd24gdHJpZ2dlciBzaW5jZSBzdGVwcyBhcmUgZXhlY3V0ZWRcbiAgICAgIC8vIGlubGluZSBieSB0aGUgY29tYmluZWQgaGFuZGxlciBvciBxdWV1ZWQgYmFjayB0byBfX3drZl93b3JrZmxvd18qIHdpdGggc3RlcElkLlxuICAgICAgY29uc3QgZ2VuZXJhdGVkQ29uZmlnID0ge1xuICAgICAgICB2ZXJzaW9uOiAnMCcsXG4gICAgICAgIHdvcmtmbG93czoge1xuICAgICAgICAgIG1heER1cmF0aW9uOiAnbWF4JyxcbiAgICAgICAgICBleHBlcmltZW50YWxUcmlnZ2VyczogW1dPUktGTE9XX1FVRVVFX1RSSUdHRVJdLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgd3JpdGVGaWxlKFxuICAgICAgICBqb2luKG91dHB1dERpciwgJy53ZWxsLWtub3duL3dvcmtmbG93L3YxL2NvbmZpZy5qc29uJyksXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KGdlbmVyYXRlZENvbmZpZywgbnVsbCwgMilcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVjI6IEJ1aWxkIGNvbWJpbmVkIHJvdXRlIHRoYXQgaGFuZGxlcyBib3RoIHdvcmtmbG93IGFuZCBzdGVwIGV4ZWN1dGlvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIGJ1aWxkQ29tYmluZWRGdW5jdGlvbih7XG4gICAgICBpbnB1dEZpbGVzLFxuICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgICB0c2NvbmZpZ1BhdGgsXG4gICAgfToge1xuICAgICAgaW5wdXRGaWxlczogc3RyaW5nW107XG4gICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcjogc3RyaW5nO1xuICAgICAgdHNjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIH0pIHtcbiAgICAgIGNvbnN0IGZsb3dSb3V0ZURpciA9IGpvaW4od29ya2Zsb3dHZW5lcmF0ZWREaXIsICdmbG93Jyk7XG4gICAgICBhd2FpdCBta2RpcihmbG93Um91dGVEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5jcmVhdGVDb21iaW5lZEJ1bmRsZSh7XG4gICAgICAgIGZvcm1hdDogJ2VzbScsXG4gICAgICAgIGlucHV0RmlsZXMsXG4gICAgICAgIHN0ZXBzT3V0ZmlsZTogam9pbihmbG93Um91dGVEaXIsICdfX3N0ZXBfcmVnaXN0cmF0aW9ucy5qcycpLFxuICAgICAgICBmbG93T3V0ZmlsZTogam9pbihmbG93Um91dGVEaXIsICdyb3V0ZS5qcycpLFxuICAgICAgICBidW5kbGVGaW5hbE91dHB1dDogZmFsc2UsXG4gICAgICAgIGV4dGVybmFsaXplTm9uU3RlcHM6IHRydWUsXG4gICAgICAgIHNvdXJjZVN0ZXBSZWdpc3RyYXRpb25JbXBvcnRzOiB0cnVlLFxuICAgICAgICB0c2NvbmZpZ1BhdGgsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGJ1aWxkV2ViaG9va1JvdXRlKHtcbiAgICAgIHdvcmtmbG93R2VuZXJhdGVkRGlyLFxuICAgIH06IHtcbiAgICAgIHdvcmtmbG93R2VuZXJhdGVkRGlyOiBzdHJpbmc7XG4gICAgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgY29uc3Qgd2ViaG9va1JvdXRlRmlsZSA9IGpvaW4oXG4gICAgICAgIHdvcmtmbG93R2VuZXJhdGVkRGlyLFxuICAgICAgICAnd2ViaG9vay9bdG9rZW5dL3JvdXRlLmpzJ1xuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMuY3JlYXRlV2ViaG9va0J1bmRsZSh7XG4gICAgICAgIG91dGZpbGU6IHdlYmhvb2tSb3V0ZUZpbGUsXG4gICAgICAgIGJ1bmRsZTogZmFsc2UsIC8vIE5leHQuanMgZG9lc24ndCBuZWVkIGJ1bmRsaW5nXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGZpbmRBcHBEaXJlY3RvcnkoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgIGNvbnN0IGFwcERpciA9IHJlc29sdmUodGhpcy5jb25maWcud29ya2luZ0RpciwgJ2FwcCcpO1xuICAgICAgY29uc3Qgc3JjQXBwRGlyID0gcmVzb2x2ZSh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCAnc3JjL2FwcCcpO1xuICAgICAgY29uc3QgcGFnZXNEaXIgPSByZXNvbHZlKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsICdwYWdlcycpO1xuICAgICAgY29uc3Qgc3JjUGFnZXNEaXIgPSByZXNvbHZlKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsICdzcmMvcGFnZXMnKTtcblxuICAgICAgLy8gSGVscGVyIHRvIGNoZWNrIGlmIGEgcGF0aCBleGlzdHMgYW5kIGlzIGEgZGlyZWN0b3J5XG4gICAgICBjb25zdCBpc0RpcmVjdG9yeSA9IGFzeW5jIChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBhY2Nlc3MocGF0aCwgY29uc3RhbnRzLkZfT0spO1xuICAgICAgICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgc3RhdChwYXRoKTtcbiAgICAgICAgICBpZiAoIXN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGF0aCBleGlzdHMgYnV0IGlzIG5vdCBhIGRpcmVjdG9yeTogJHtwYXRofWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5tZXNzYWdlLmluY2x1ZGVzKCdub3QgYSBkaXJlY3RvcnknKSkge1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAvLyBDaGVjayBpZiBhcHAgZGlyZWN0b3J5IGV4aXN0c1xuICAgICAgaWYgKGF3YWl0IGlzRGlyZWN0b3J5KGFwcERpcikpIHtcbiAgICAgICAgcmV0dXJuIGFwcERpcjtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgc3JjL2FwcCBkaXJlY3RvcnkgZXhpc3RzXG4gICAgICBpZiAoYXdhaXQgaXNEaXJlY3Rvcnkoc3JjQXBwRGlyKSkge1xuICAgICAgICByZXR1cm4gc3JjQXBwRGlyO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBubyBhcHAgZGlyZWN0b3J5IGV4aXN0cywgY2hlY2sgZm9yIHBhZ2VzIGRpcmVjdG9yeSBhbmQgY3JlYXRlIGFwcCBuZXh0IHRvIGl0XG4gICAgICBpZiAoYXdhaXQgaXNEaXJlY3RvcnkocGFnZXNEaXIpKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhcHAgZGlyZWN0b3J5IG5leHQgdG8gcGFnZXMgZGlyZWN0b3J5XG4gICAgICAgIGF3YWl0IG1rZGlyKGFwcERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBhcHBEaXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChhd2FpdCBpc0RpcmVjdG9yeShzcmNQYWdlc0RpcikpIHtcbiAgICAgICAgLy8gQ3JlYXRlIHNyYy9hcHAgZGlyZWN0b3J5IG5leHQgdG8gc3JjL3BhZ2VzIGRpcmVjdG9yeVxuICAgICAgICBhd2FpdCBta2RpcihzcmNBcHBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gc3JjQXBwRGlyO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdDb3VsZCBub3QgZmluZCBOZXh0LmpzIGFwcCBvciBwYWdlcyBkaXJlY3RvcnkuIEV4cGVjdGVkIG9uZSBvZjogXCJhcHBcIiwgXCJzcmMvYXBwXCIsIFwicGFnZXNcIiwgb3IgXCJzcmMvcGFnZXNcIiB0byBleGlzdC4nXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIENhY2hlZE5leHRCdWlsZGVyRWFnZXIgPSBOZXh0QnVpbGRlcjtcbiAgcmV0dXJuIE5leHRCdWlsZGVyO1xufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAqTvC,wBAAgB,YAAY,CAC1B,cAAc,EACV,UAAU,GACV,CAAC,CACC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE;IAAE,aAAa,EAAE,UAAU,CAAA;CAAE,KAC/B,OAAO,CAAC,UAAU,CAAC,CAAC,EAC7B,EACE,SAAS,GACV,GAAE;IACD,SAAS,CAAC,EAAE;QACV,KAAK,CAAC,EAAE;YACN,IAAI,CAAC,EAAE,MAAM,CAAC;SACf,CAAC;QACF;;;;;;WAMG;QACH,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;KACjE,CAAC;CACE,IAkBJ,OAAO,MAAM,EACb,KAAK;IAAE,aAAa,EAAE,UAAU,CAAA;CAAE,yBAwMrC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAqTvC,wBAAgB,YAAY,CAC1B,cAAc,EACV,UAAU,GACV,CAAC,CACC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE;IAAE,aAAa,EAAE,UAAU,CAAA;CAAE,KAC/B,OAAO,CAAC,UAAU,CAAC,CAAC,EAC7B,EACE,SAAS,GACV,GAAE;IACD,SAAS,CAAC,EAAE;QACV,KAAK,CAAC,EAAE;YACN,IAAI,CAAC,EAAE,MAAM,CAAC;SACf,CAAC;QACF;;;;;;WAMG;QACH,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;KACjE,CAAC;CACE,IAkBJ,OAAO,MAAM,EACb,KAAK;IAAE,aAAa,EAAE,UAAU,CAAA;CAAE,yBAyNrC"}
package/dist/index.js CHANGED
@@ -1,4 +1,37 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
37
  };
@@ -244,6 +277,12 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
244
277
  }
245
278
  }
246
279
  return async function buildConfig(phase, ctx) {
280
+ if (phase === 'phase-development-server' ||
281
+ phase === 'phase-production-build') {
282
+ const { prewarmWorkflowSwcPluginCache } = await Promise.resolve().then(() => __importStar(require('./swc-plugin-cache.js')));
283
+ // Loader workers inherit this cwd and read from the same SWC cache.
284
+ prewarmWorkflowSwcPluginCache(process.cwd());
285
+ }
247
286
  const loaderPath = require.resolve('./loader');
248
287
  let nextConfig;
249
288
  if (typeof nextConfigOrFn === 'function') {
@@ -322,8 +361,14 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
322
361
  const NextBuilder = await (0, builder_js_1.getNextBuilder)(nextVersion);
323
362
  return new NextBuilder({
324
363
  watch: shouldWatch,
325
- // discover workflows from pages/app entries
326
- dirs: ['pages', 'app', 'src/pages', 'src/app'],
364
+ // getInputFiles filters the project to Next.js entrypoints
365
+ dirs: ['.'],
366
+ pageExtensions: nextConfig.pageExtensions ?? [
367
+ 'tsx',
368
+ 'ts',
369
+ 'jsx',
370
+ 'js',
371
+ ],
327
372
  projectRoot: nextConfig.outputFileTracingRoot,
328
373
  moduleSpecifierRoot: process.cwd(),
329
374
  workingDir: process.cwd(),
@@ -411,4 +456,4 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
411
456
  return nextConfig;
412
457
  };
413
458
  }
414
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUF3VEEsb0NBa1BDO0FBMWlCRCxxQ0FBNEQ7QUFDNUQsK0NBQTZEO0FBQzdELHlDQUFzRDtBQUV0RCxvREFBNEI7QUFDNUIsNkNBQThDO0FBRTlDLE1BQU0sb0JBQW9CLEdBQUcsd0JBQXdCLENBQUM7QUFDdEQsTUFBTSxnQ0FBZ0MsR0FBRztJQUN2QyxlQUFlO0lBQ2YsY0FBYztJQUNkLGtCQUFrQjtJQUNsQixrQkFBa0I7Q0FDbkIsQ0FBQztBQUNGLE1BQU0scUNBQXFDLEdBQUc7SUFDNUMsb0JBQW9CO0lBQ3BCLEdBQUcsZ0NBQWdDO0NBQ3BDLENBQUM7QUFFRixNQUFNLGtCQUFrQixHQUFHLGlDQUFpQyxDQUFDO0FBQzdELE1BQU0sY0FBYyxHQUFHLDZCQUE2QixDQUFDO0FBQ3JELE1BQU0sMEJBQTBCLEdBQUcsaUNBQWlDLENBQUM7QUFDckUsTUFBTSwwQkFBMEIsR0FDOUIsb0VBQW9FLENBQUM7QUFDdkUsTUFBTSxvQ0FBb0MsR0FDeEMsOENBQThDLENBQUM7QUFFakQsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLE1BQU0sdUNBQXVDLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztBQWVsRSxTQUFTLGFBQWEsQ0FBQyxLQUFjO0lBQ25DLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlFLENBQUM7QUFFRCxTQUFTLDRCQUE0QixDQUFDLFNBQWlCO0lBQ3JELElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7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QkFDOUIsSUFBSSxFQUFFLGtDQUFrQztnQkFDeEMsTUFBTSxFQUFFLFVBQVU7YUFDbkIsQ0FBQyxDQUFDO1lBRUgsT0FBTyxxQkFBcUI7Z0JBQzFCLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksYUFBYSxDQUFDO2dCQUNuRCxDQUFDLENBQUMsYUFBYSxDQUFDO1FBQ3BCLENBQUMsQ0FBQztRQUNGLHlEQUF5RDtRQUN6RCx1REFBdUQ7UUFDdkQsSUFDRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCO1lBQ3hDLEtBQUssS0FBSyx5QkFBeUIsRUFDbkMsQ0FBQztZQUNELE1BQU0sZUFBZSxHQUFHLE1BQU0sa0JBQWtCLEVBQUUsQ0FBQztZQUVuRCxNQUFNLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM5QixPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixHQUFHLEdBQUcsQ0FBQztRQUNoRCxDQUFDO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvcHlGaWxlU3luYywgbWtkaXJTeW5jLCBzdGF0U3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgY29weUZpbGUsIG1rZGlyLCByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSwgaXNBYnNvbHV0ZSwgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgdHlwZSB7IE5leHRDb25maWcgfSBmcm9tICduZXh0JztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7IGdldE5leHRCdWlsZGVyIH0gZnJvbSAnLi9idWlsZGVyLmpzJztcblxuY29uc3QgVkVSQ0VMX1dPUkxEX1BBQ0tBR0UgPSAnQHdvcmtmbG93L3dvcmxkLXZlcmNlbCc7XG5jb25zdCBWRVJDRUxfV09STERfREVQRU5ERU5DWV9QQUNLQUdFUyA9IFtcbiAgJ0B2ZXJjZWwvcXVldWUnLFxuICAnQHZlcmNlbC9vaWRjJyxcbiAgJ0B2ZXJjZWwvY2xpLWF1dGgnLFxuICAnQG5hcGktcnMva2V5cmluZycsXG5dO1xuY29uc3QgVkVSQ0VMX1dPUkxEX1NFUlZFUl9FWFRFUk5BTF9QQUNLQUdFUyA9IFtcbiAgVkVSQ0VMX1dPUkxEX1BBQ0tBR0UsXG4gIC4uLlZFUkNFTF9XT1JMRF9ERVBFTkRFTkNZX1BBQ0tBR0VTLFxuXTtcblxuY29uc3QgdXNlV29ya2Zsb3dQYXR0ZXJuID0gL15cXHMqKFsnXCJdKXVzZSB3b3JrZmxvd1xcMTs/XFxzKiQvbTtcbmNvbnN0IHVzZVN0ZXBQYXR0ZXJuID0gL15cXHMqKFsnXCJdKXVzZSBzdGVwXFwxOz9cXHMqJC9tO1xuY29uc3Qgd29ya2Zsb3dTZXJkZUltcG9ydFBhdHRlcm4gPSAvZnJvbVxccysoWydcIl0pQHdvcmtmbG93XFwvc2VyZGVcXDEvO1xuY29uc3Qgd29ya2Zsb3dTZXJkZVN5bWJvbFBhdHRlcm4gPVxuICAvU3ltYm9sXFwuZm9yXFxzKlxcKFxccyooWydcIl0pd29ya2Zsb3ctKD86c2VyaWFsaXplfGRlc2VyaWFsaXplKVxcMVxccypcXCkvO1xuY29uc3Qgd29ya2Zsb3dTZXJkZUNvbXB1dGVkUHJvcGVydHlQYXR0ZXJuID1cbiAgL1xcW1xccypXT1JLRkxPV18oPzpTRVJJQUxJWkV8REVTRVJJQUxJWkUpXFxzKlxcXS87XG5cbmNvbnN0IFBTRVVET19FWFRFUk5BTF9QQUNLQUdFUyA9IG5ldyBTZXQoWydzZXJ2ZXItb25seScsICdjbGllbnQtb25seSddKTtcbmNvbnN0IHdhcm5lZEF1dG9SZW1vdmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG5pbnRlcmZhY2UgV29ya2Zsb3dQYXR0ZXJuTWF0Y2gge1xuICBoYXNVc2VXb3JrZmxvdzogYm9vbGVhbjtcbiAgaGFzVXNlU3RlcDogYm9vbGVhbjtcbiAgaGFzU2VyZGU6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBEZXRlY3RlZFNlcnZlckV4dGVybmFsUGFja2FnZSB7XG4gIHBhY2thZ2VOYW1lOiBzdHJpbmc7XG4gIGhhc1VzZVdvcmtmbG93OiBib29sZWFuO1xuICBoYXNVc2VTdGVwOiBib29sZWFuO1xuICBoYXNTZXJkZTogYm9vbGVhbjtcbn1cblxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBpc1Jlc29sdmFibGVQYWNrYWdlU3BlY2lmaWVyKHNwZWNpZmllcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChzcGVjaWZpZXIuc3RhcnRzV2l0aCgnLicpIHx8IHNwZWNpZmllci5zdGFydHNXaXRoKCcvJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHNwZWNpZmllci5zdGFydHNXaXRoKCckJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHNwZWNpZmllci5pbmNsdWRlcygnKicpIHx8IHNwZWNpZmllci5pbmNsdWRlcygnOicpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGRldGVjdFdvcmtmbG93UGF0dGVybnMoc291cmNlOiBzdHJpbmcpOiBXb3JrZmxvd1BhdHRlcm5NYXRjaCB7XG4gIGNvbnN0IGhhc1VzZVdvcmtmbG93ID0gdXNlV29ya2Zsb3dQYXR0ZXJuLnRlc3Qoc291cmNlKTtcbiAgY29uc3QgaGFzVXNlU3RlcCA9IHVzZVN0ZXBQYXR0ZXJuLnRlc3Qoc291cmNlKTtcbiAgY29uc3QgaGFzU2VyZGVJbXBvcnQgPSB3b3JrZmxvd1NlcmRlSW1wb3J0UGF0dGVybi50ZXN0KHNvdXJjZSk7XG4gIGNvbnN0IGhhc1NlcmRlU3ltYm9sID0gd29ya2Zsb3dTZXJkZVN5bWJvbFBhdHRlcm4udGVzdChzb3VyY2UpO1xuICBjb25zdCBoYXNTZXJkZUNvbXB1dGVkUHJvcGVydHkgPVxuICAgIHdvcmtmbG93U2VyZGVDb21wdXRlZFByb3BlcnR5UGF0dGVybi50ZXN0KHNvdXJjZSk7XG5cbiAgcmV0dXJuIHtcbiAgICBoYXNVc2VXb3JrZmxvdyxcbiAgICBoYXNVc2VTdGVwLFxuICAgIGhhc1NlcmRlOiBoYXNTZXJkZUltcG9ydCB8fCBoYXNTZXJkZVN5bWJvbCB8fCBoYXNTZXJkZUNvbXB1dGVkUHJvcGVydHksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldElzc3VlTGFiZWxzKGRldGVjdGVkOiBEZXRlY3RlZFNlcnZlckV4dGVybmFsUGFja2FnZSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgaXNzdWVzOiBzdHJpbmdbXSA9IFtdO1xuICBpZiAoZGV0ZWN0ZWQuaGFzVXNlV29ya2Zsb3cpIHtcbiAgICBpc3N1ZXMucHVzaCgnXCJ1c2Ugd29ya2Zsb3dcIiBmdW5jdGlvbnMnKTtcbiAgfVxuICBpZiAoZGV0ZWN0ZWQuaGFzVXNlU3RlcCkge1xuICAgIGlzc3Vlcy5wdXNoKCdcInVzZSBzdGVwXCIgZnVuY3Rpb25zJyk7XG4gIH1cbiAgaWYgKGRldGVjdGVkLmhhc1NlcmRlKSB7XG4gICAgaXNzdWVzLnB1c2goJ3NlcmlhbGl6YXRpb24gY2xhc3NlcycpO1xuICB9XG4gIHJldHVybiBpc3N1ZXM7XG59XG5cbmZ1bmN0aW9uIGhhc1dvcmtmbG93U2VyZGVEZXBlbmRlbmN5KHBhY2thZ2VKc29uOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmICghaXNQbGFpbk9iamVjdChwYWNrYWdlSnNvbikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBkZXBlbmRlbmNpZXMgPSBpc1BsYWluT2JqZWN0KHBhY2thZ2VKc29uLmRlcGVuZGVuY2llcylcbiAgICA/IHBhY2thZ2VKc29uLmRlcGVuZGVuY2llc1xuICAgIDoge307XG4gIGNvbnN0IHBlZXJEZXBlbmRlbmNpZXMgPSBpc1BsYWluT2JqZWN0KHBhY2thZ2VKc29uLnBlZXJEZXBlbmRlbmNpZXMpXG4gICAgPyBwYWNrYWdlSnNvbi5wZWVyRGVwZW5kZW5jaWVzXG4gICAgOiB7fTtcblxuICByZXR1cm4gKFxuICAgIE9iamVjdC5oYXNPd24oZGVwZW5kZW5jaWVzLCAnQHdvcmtmbG93L3NlcmRlJykgfHxcbiAgICBPYmplY3QuaGFzT3duKHBlZXJEZXBlbmRlbmNpZXMsICdAd29ya2Zsb3cvc2VyZGUnKVxuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkZXRlY3RTZXJ2ZXJFeHRlcm5hbFBhY2thZ2UoXG4gIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gIHdvcmtpbmdEaXI6IHN0cmluZ1xuKTogUHJvbWlzZTxEZXRlY3RlZFNlcnZlckV4dGVybmFsUGFja2FnZSB8IG51bGw+IHtcbiAgaWYgKCFpc1Jlc29sdmFibGVQYWNrYWdlU3BlY2lmaWVyKHBhY2thZ2VOYW1lKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbGV0IGhhc1VzZVdvcmtmbG93ID0gZmFsc2U7XG4gIGxldCBoYXNVc2VTdGVwID0gZmFsc2U7XG4gIGxldCBoYXNTZXJkZSA9IGZhbHNlO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcmVxdWlyZS5yZXNvbHZlKGAke3BhY2thZ2VOYW1lfS9wYWNrYWdlLmpzb25gLCB7XG4gICAgICBwYXRoczogW3dvcmtpbmdEaXJdLFxuICAgIH0pO1xuICAgIGNvbnN0IHBhY2thZ2VKc29uU291cmNlID0gYXdhaXQgcmVhZEZpbGUocGFja2FnZUpzb25QYXRoLCAndXRmLTgnKTtcbiAgICBjb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UocGFja2FnZUpzb25Tb3VyY2UpIGFzIHVua25vd247XG4gICAgaGFzU2VyZGUgPSBoYXNXb3JrZmxvd1NlcmRlRGVwZW5kZW5jeShwYWNrYWdlSnNvbik7XG4gIH0gY2F0Y2gge1xuICAgIC8vIEJlc3QtZWZmb3J0IG9ubHkuIENvbnRpbnVlIHRvIHNvdXJjZSBzY2FubmluZy5cbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgZW50cnlQYXRoID0gcmVxdWlyZS5yZXNvbHZlKHBhY2thZ2VOYW1lLCB7XG4gICAgICBwYXRoczogW3dvcmtpbmdEaXJdLFxuICAgIH0pO1xuICAgIGNvbnN0IHNvdXJjZSA9IGF3YWl0IHJlYWRGaWxlKGVudHJ5UGF0aCwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgcGF0dGVybnMgPSBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zKHNvdXJjZSk7XG4gICAgaGFzVXNlV29ya2Zsb3cgPSBwYXR0ZXJucy5oYXNVc2VXb3JrZmxvdztcbiAgICBoYXNVc2VTdGVwID0gcGF0dGVybnMuaGFzVXNlU3RlcDtcbiAgICBoYXNTZXJkZSB8fD0gcGF0dGVybnMuaGFzU2VyZGU7XG4gIH0gY2F0Y2gge1xuICAgIC8vIEJlc3QtZWZmb3J0IG9ubHkuIFVzZSB3aGljaGV2ZXIgc2lnbmFsIHdlIGFscmVhZHkgaGF2ZS5cbiAgfVxuXG4gIGlmICghaGFzVXNlV29ya2Zsb3cgJiYgIWhhc1VzZVN0ZXAgJiYgIWhhc1NlcmRlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhY2thZ2VOYW1lLFxuICAgIGhhc1VzZVdvcmtmbG93LFxuICAgIGhhc1VzZVN0ZXAsXG4gICAgaGFzU2VyZGUsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHdhcm5BYm91dEF1dG9SZW1vdmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcyhcbiAgZGV0ZWN0ZWRQYWNrYWdlczogRGV0ZWN0ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VbXVxuKTogdm9pZCB7XG4gIGNvbnN0IG5ld2x5RGV0ZWN0ZWRQYWNrYWdlcyA9IGRldGVjdGVkUGFja2FnZXMuZmlsdGVyKCh7IHBhY2thZ2VOYW1lIH0pID0+IHtcbiAgICByZXR1cm4gIXdhcm5lZEF1dG9SZW1vdmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcy5oYXMocGFja2FnZU5hbWUpO1xuICB9KTtcblxuICBpZiAobmV3bHlEZXRlY3RlZFBhY2thZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvciAoY29uc3QgeyBwYWNrYWdlTmFtZSB9IG9mIG5ld2x5RGV0ZWN0ZWRQYWNrYWdlcykge1xuICAgIHdhcm5lZEF1dG9SZW1vdmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcy5hZGQocGFja2FnZU5hbWUpO1xuICB9XG5cbiAgY29uc3QgcGFja2FnZURlc2NyaXB0aW9ucyA9IG5ld2x5RGV0ZWN0ZWRQYWNrYWdlc1xuICAgIC5tYXAoXG4gICAgICAoZGV0ZWN0ZWQpID0+XG4gICAgICAgIGBcIiR7ZGV0ZWN0ZWQucGFja2FnZU5hbWV9XCIgKCR7Z2V0SXNzdWVMYWJlbHMoZGV0ZWN0ZWQpLmpvaW4oJywgJyl9KWBcbiAgICApXG4gICAgLmpvaW4oJywgJyk7XG4gIGNvbnN0IHBhY2thZ2VOYW1lcyA9IG5ld2x5RGV0ZWN0ZWRQYWNrYWdlc1xuICAgIC5tYXAoKGRldGVjdGVkKSA9PiBgXCIke2RldGVjdGVkLnBhY2thZ2VOYW1lfVwiYClcbiAgICAuam9pbignLCAnKTtcblxuICBjb25zb2xlLndhcm4oXG4gICAgYFxcbuKaoCBXb3JrZmxvdyBmb3VuZCB3b3JrZmxvdyBjb2RlIGluIHNlcnZlckV4dGVybmFsUGFja2FnZXM6ICR7cGFja2FnZURlc2NyaXB0aW9uc30uYCArXG4gICAgICBgXFxuICBXb3JrZmxvdyByZW1vdmVkIHRoZSBhZmZlY3RlZCBlbnRyaWVzIGZyb20gc2VydmVyRXh0ZXJuYWxQYWNrYWdlcyBmb3IgdGhpcyBidWlsZCBhbmQgaXMgY29tcGlsaW5nIHRoZSBwYWNrYWdlcyBhbnl3YXkuYCArXG4gICAgICBgXFxuICBSZW1vdmUgJHtwYWNrYWdlTmFtZXN9IGZyb20gc2VydmVyRXh0ZXJuYWxQYWNrYWdlcyBpbiBuZXh0LmNvbmZpZyB0byBzaWxlbmNlIHRoaXMgd2FybmluZy5cXG5gXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVOZXh0VmVyc2lvbih3b3JraW5nRGlyOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBlcnJvcnM6IHVua25vd25bXSA9IFtdO1xuXG4gIC8vIFRyeSByZXNvbHZpbmcgZnJvbSB0aGUgY29uc3VtaW5nIHByb2plY3QncyB3b3JraW5nIGRpcmVjdG9yeSBmaXJzdC5cbiAgLy8gVGhpcyBoYW5kbGVzIG1vbm9yZXBvIHNldHVwcyB3aGVyZSBgbmV4dGAgbWF5IG5vdCBiZSBob2lzdGVkIHRvIHRoZVxuICAvLyBzYW1lIGxvY2F0aW9uIGFzIGBAd29ya2Zsb3cvbmV4dGAuXG4gIHRyeSB7XG4gICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcmVxdWlyZS5yZXNvbHZlKCduZXh0L3BhY2thZ2UuanNvbicsIHtcbiAgICAgIHBhdGhzOiBbd29ya2luZ0Rpcl0sXG4gICAgfSk7XG4gICAgY29uc3QgcmVzb2x2ZWRQYWNrYWdlSnNvbiA9IHJlcXVpcmUocGFja2FnZUpzb25QYXRoKSBhcyB7XG4gICAgICB2ZXJzaW9uPzogdW5rbm93bjtcbiAgICB9O1xuICAgIGlmICh0eXBlb2YgcmVzb2x2ZWRQYWNrYWdlSnNvbi52ZXJzaW9uID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHJlc29sdmVkUGFja2FnZUpzb24udmVyc2lvbjtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvcnMucHVzaChlKTtcbiAgfVxuXG4gIC8vIEZhbGwgYmFjayB0byByZXNvbHZpbmcgcmVsYXRpdmUgdG8gdGhpcyBwYWNrYWdlJ3MgbG9jYXRpb24uXG4gIHRyeSB7XG4gICAgY29uc3QgdmVyc2lvbiA9IChyZXF1aXJlKCduZXh0L3BhY2thZ2UuanNvbicpIGFzIHsgdmVyc2lvbj86IHVua25vd24gfSlcbiAgICAgIC52ZXJzaW9uO1xuICAgIGlmICh0eXBlb2YgdmVyc2lvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB2ZXJzaW9uO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9ycy5wdXNoKGUpO1xuICB9XG5cbiAgdGhyb3cgbmV3IEFnZ3JlZ2F0ZUVycm9yKFxuICAgIGVycm9ycyxcbiAgICBgQ291bGQgbm90IHJlc29sdmUgTmV4dC5qcyB2ZXJzaW9uLiBFbnN1cmUgXFxgbmV4dFxcYCBpcyBpbnN0YWxsZWQgaW4geW91ciBwcm9qZWN0ICh3b3JraW5nIGRpcmVjdG9yeTogJHt3b3JraW5nRGlyfSkuYFxuICApO1xufVxuXG5mdW5jdGlvbiBmaWxlRXhpc3RzKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIGNvbnN0IHN0YXRzID0gc3RhdFN5bmMocGF0aCk7XG4gICAgcmV0dXJuIHN0YXRzLmlzRmlsZSgpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0V29ya2Zsb3dNYW5pZmVzdENvcHlQYXRocyh7XG4gIHByb2plY3REaXIsXG4gIGRpc3REaXIsXG59OiB7XG4gIHByb2plY3REaXI6IHN0cmluZztcbiAgZGlzdERpcjogc3RyaW5nO1xufSk6IHsgbWFuaWZlc3RQYXRoOiBzdHJpbmc7IGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG1hbmlmZXN0Q2FuZGlkYXRlcyA9IFtcbiAgICBqb2luKHByb2plY3REaXIsICdhcHAvLndlbGwta25vd24vd29ya2Zsb3cvdjEvbWFuaWZlc3QuanNvbicpLFxuICAgIGpvaW4ocHJvamVjdERpciwgJ3NyYy9hcHAvLndlbGwta25vd24vd29ya2Zsb3cvdjEvbWFuaWZlc3QuanNvbicpLFxuICAgIGpvaW4ocHJvamVjdERpciwgJ3B1YmxpYy8ud2VsbC1rbm93bi93b3JrZmxvdy92MS9tYW5pZmVzdC5qc29uJyksXG4gIF07XG4gIGNvbnN0IG1hbmlmZXN0UGF0aCA9IG1hbmlmZXN0Q2FuZGlkYXRlcy5maW5kKGZpbGVFeGlzdHMpO1xuXG4gIGlmICghbWFuaWZlc3RQYXRoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVzb2x2ZWREaXN0RGlyID0gaXNBYnNvbHV0ZShkaXN0RGlyKVxuICAgID8gZGlzdERpclxuICAgIDogam9pbihwcm9qZWN0RGlyLCBkaXN0RGlyKTtcbiAgY29uc3QgZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGggPSBqb2luKFxuICAgIHJlc29sdmVkRGlzdERpcixcbiAgICAnZGlhZ25vc3RpY3MnLFxuICAgICd3b3JrZmxvd3MtbWFuaWZlc3QuanNvbidcbiAgKTtcbiAgcmV0dXJuIHsgbWFuaWZlc3RQYXRoLCBkaWFnbm9zdGljc01hbmlmZXN0UGF0aCB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBjb3B5V29ya2Zsb3dEaWFnbm9zdGljc01hbmlmZXN0KG1ldGFkYXRhOiB7XG4gIHByb2plY3REaXI6IHN0cmluZztcbiAgZGlzdERpcjogc3RyaW5nO1xufSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwYXRocyA9IGdldFdvcmtmbG93TWFuaWZlc3RDb3B5UGF0aHMobWV0YWRhdGEpO1xuICBpZiAoIXBhdGhzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgeyBtYW5pZmVzdFBhdGgsIGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoIH0gPSBwYXRocztcbiAgYXdhaXQgbWtkaXIoZGlybmFtZShkaWFnbm9zdGljc01hbmlmZXN0UGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhd2FpdCBjb3B5RmlsZShtYW5pZmVzdFBhdGgsIGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoKTtcbn1cblxuZnVuY3Rpb24gY29weVdvcmtmbG93RGlhZ25vc3RpY3NNYW5pZmVzdFN5bmMobWV0YWRhdGE6IHtcbiAgcHJvamVjdERpcjogc3RyaW5nO1xuICBkaXN0RGlyOiBzdHJpbmc7XG59KTogdm9pZCB7XG4gIGNvbnN0IHBhdGhzID0gZ2V0V29ya2Zsb3dNYW5pZmVzdENvcHlQYXRocyhtZXRhZGF0YSk7XG4gIGlmICghcGF0aHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB7IG1hbmlmZXN0UGF0aCwgZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGggfSA9IHBhdGhzO1xuICBta2RpclN5bmMoZGlybmFtZShkaWFnbm9zdGljc01hbmlmZXN0UGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBjb3B5RmlsZVN5bmMobWFuaWZlc3RQYXRoLCBkaWFnbm9zdGljc01hbmlmZXN0UGF0aCk7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyV29ya2Zsb3dEaWFnbm9zdGljc01hbmlmZXN0Q29weShtZXRhZGF0YToge1xuICBwcm9qZWN0RGlyOiBzdHJpbmc7XG4gIGRpc3REaXI6IHN0cmluZztcbn0pOiB2b2lkIHtcbiAgY29uc3QgbWFya2VyID0gJ19fd29ya2Zsb3dEaWFnbm9zdGljc01hbmlmZXN0Q29waWVzJztcbiAgY29uc3QgZ2xvYmFsV2l0aE1hcmtlciA9IGdsb2JhbFRoaXMgYXMgdHlwZW9mIGdsb2JhbFRoaXMgJiB7XG4gICAgW21hcmtlcl0/OiBBcnJheTx7IHByb2plY3REaXI6IHN0cmluZzsgZGlzdERpcjogc3RyaW5nIH0+O1xuICB9O1xuXG4gIGlmICghZ2xvYmFsV2l0aE1hcmtlclttYXJrZXJdKSB7XG4gICAgZ2xvYmFsV2l0aE1hcmtlclttYXJrZXJdID0gW107XG4gICAgcHJvY2Vzcy5vbmNlKCdleGl0JywgKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBjb3B5TWV0YWRhdGEgb2YgZ2xvYmFsV2l0aE1hcmtlclttYXJrZXJdIHx8IFtdKSB7XG4gICAgICAgIGNvcHlXb3JrZmxvd0RpYWdub3N0aWNzTWFuaWZlc3RTeW5jKGNvcHlNZXRhZGF0YSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnbG9iYWxXaXRoTWFya2VyW21hcmtlcl0ucHVzaChtZXRhZGF0YSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoV29ya2Zsb3coXG4gIG5leHRDb25maWdPckZuOlxuICAgIHwgTmV4dENvbmZpZ1xuICAgIHwgKChcbiAgICAgICAgcGhhc2U6IHN0cmluZyxcbiAgICAgICAgY3R4OiB7IGRlZmF1bHRDb25maWc6IE5leHRDb25maWcgfVxuICAgICAgKSA9PiBQcm9taXNlPE5leHRDb25maWc+KSxcbiAge1xuICAgIHdvcmtmbG93cyxcbiAgfToge1xuICAgIHdvcmtmbG93cz86IHtcbiAgICAgIGxvY2FsPzoge1xuICAgICAgICBwb3J0PzogbnVtYmVyO1xuICAgICAgfTtcbiAgICAgIC8qKlxuICAgICAgICogQ29udHJvbHMgaG93IHNvdXJjZSBtYXBzIGFyZSBlbWl0dGVkIGZvciB3b3JrZmxvdyBidW5kbGVzLiBBY2NlcHRzXG4gICAgICAgKiB0aGUgc2FtZSB2YWx1ZXMgYXMgZXNidWlsZCdzIGBzb3VyY2VtYXBgIG9wdGlvbjogYHRydWVgL2AnaW5saW5lJ2BcbiAgICAgICAqIChkZWZhdWx0KSwgYCdsaW5rZWQnYCwgYCdleHRlcm5hbCdgLCBgJ2JvdGgnYCwgb3IgYGZhbHNlYCB0byBvbWl0XG4gICAgICAgKiBzb3VyY2UgbWFwcy4gQ2FuIGFsc28gYmUgc2V0IHZpYSB0aGUgYFdPUktGTE9XX1NPVVJDRU1BUGBcbiAgICAgICAqIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICAgICAgICovXG4gICAgICBzb3VyY2VtYXA/OiBib29sZWFuIHwgJ2lubGluZScgfCAnbGlua2VkJyB8ICdleHRlcm5hbCcgfCAnYm90aCc7XG4gICAgfTtcbiAgfSA9IHt9XG4pIHtcbiAgaWYgKCFwcm9jZXNzLmVudi5WRVJDRUxfREVQTE9ZTUVOVF9JRCkge1xuICAgIGlmICghcHJvY2Vzcy5lbnYuV09SS0ZMT1dfVEFSR0VUX1dPUkxEKSB7XG4gICAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19UQVJHRVRfV09STEQgPSAnbG9jYWwnO1xuICAgICAgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfTE9DQUxfREFUQV9ESVIgPSAnLm5leHQvd29ya2Zsb3ctZGF0YSc7XG4gICAgfVxuICAgIGNvbnN0IG1heWJlUG9ydCA9IHdvcmtmbG93cz8ubG9jYWw/LnBvcnQ7XG4gICAgaWYgKG1heWJlUG9ydCkge1xuICAgICAgcHJvY2Vzcy5lbnYuUE9SVCA9IG1heWJlUG9ydC50b1N0cmluZygpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoIXByb2Nlc3MuZW52LldPUktGTE9XX1RBUkdFVF9XT1JMRCkge1xuICAgICAgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfVEFSR0VUX1dPUkxEID0gJ3ZlcmNlbCc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIGJ1aWxkQ29uZmlnKFxuICAgIHBoYXNlOiBzdHJpbmcsXG4gICAgY3R4OiB7IGRlZmF1bHRDb25maWc6IE5leHRDb25maWcgfVxuICApIHtcbiAgICBjb25zdCBsb2FkZXJQYXRoID0gcmVxdWlyZS5yZXNvbHZlKCcuL2xvYWRlcicpO1xuICAgIGxldCBuZXh0Q29uZmlnOiBOZXh0Q29uZmlnO1xuXG4gICAgaWYgKHR5cGVvZiBuZXh0Q29uZmlnT3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbmV4dENvbmZpZyA9IGF3YWl0IG5leHRDb25maWdPckZuKHBoYXNlLCBjdHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0Q29uZmlnID0gbmV4dENvbmZpZ09yRm47XG4gICAgfVxuICAgIC8vIHNoYWxsb3cgY2xvbmUgdG8gYXZvaWQgcmVhZC1vbmx5IG9uIHRvcC1sZXZlbFxuICAgIG5leHRDb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBuZXh0Q29uZmlnKTtcbiAgICBuZXh0Q29uZmlnLnNlcnZlckV4dGVybmFsUGFja2FnZXMgPSBbXG4gICAgICAuLi5uZXcgU2V0KFtcbiAgICAgICAgLi4uKG5leHRDb25maWcuc2VydmVyRXh0ZXJuYWxQYWNrYWdlcyB8fCBbXSksXG4gICAgICAgIC8vIEtlZXAgdGhlIFZlcmNlbCB3b3JsZCBhbmQgaXRzIG5hdGl2ZS1wcm9uZSBkZXBlbmRlbmNpZXMgZXh0ZXJuYWwgc29cbiAgICAgICAgLy8gbG9jYWwgYnVpbGRzIGRvIG5vdCB0cnkgdG8gcGFyc2UgQHZlcmNlbC9xdWV1ZSdzIGtleXJpbmcgZGVwZW5kZW5jeVxuICAgICAgICAvLyB0cmVlLlxuICAgICAgICAuLi5WRVJDRUxfV09STERfU0VSVkVSX0VYVEVSTkFMX1BBQ0tBR0VTLFxuICAgICAgXSksXG4gICAgXTtcbiAgICBjb25zdCBleGlzdGluZ0NvbXBpbGVyID0gbmV4dENvbmZpZy5jb21waWxlciA/PyB7fTtcbiAgICBjb25zdCBleGlzdGluZ1J1bkFmdGVyUHJvZHVjdGlvbkNvbXBpbGUgPSAoXG4gICAgICBleGlzdGluZ0NvbXBpbGVyIGFzIHtcbiAgICAgICAgcnVuQWZ0ZXJQcm9kdWN0aW9uQ29tcGlsZT86IChtZXRhZGF0YToge1xuICAgICAgICAgIHByb2plY3REaXI6IHN0cmluZztcbiAgICAgICAgICBkaXN0RGlyOiBzdHJpbmc7XG4gICAgICAgIH0pID0+IFByb21pc2U8dm9pZD47XG4gICAgICB9XG4gICAgKS5ydW5BZnRlclByb2R1Y3Rpb25Db21waWxlO1xuXG4gICAgY29uc3QgY29uZmlndXJlZFNlcnZlckV4dGVybmFsUGFja2FnZXMgPSBBcnJheS5pc0FycmF5KFxuICAgICAgbmV4dENvbmZpZy5zZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzXG4gICAgKVxuICAgICAgPyBuZXh0Q29uZmlnLnNlcnZlckV4dGVybmFsUGFja2FnZXNcbiAgICAgIDogW107XG4gICAgbGV0IGVmZmVjdGl2ZVNlcnZlckV4dGVybmFsUGFja2FnZXMgPSBjb25maWd1cmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcztcblxuICAgIGlmIChjb25maWd1cmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBkZXRlY3RlZFdvcmtmbG93UGFja2FnZXM6IERldGVjdGVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgcGFja2FnZU5hbWUgb2YgY29uZmlndXJlZFNlcnZlckV4dGVybmFsUGFja2FnZXMpIHtcbiAgICAgICAgaWYgKFBTRVVET19FWFRFUk5BTF9QQUNLQUdFUy5oYXMocGFja2FnZU5hbWUpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGRldGVjdGVkID0gYXdhaXQgZGV0ZWN0U2VydmVyRXh0ZXJuYWxQYWNrYWdlKFxuICAgICAgICAgICAgcGFja2FnZU5hbWUsXG4gICAgICAgICAgICBwcm9jZXNzLmN3ZCgpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZGV0ZWN0ZWQpIHtcbiAgICAgICAgICAgIGRldGVjdGVkV29ya2Zsb3dQYWNrYWdlcy5wdXNoKGRldGVjdGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIEJlc3QtZWZmb3J0IG9ubHkuIE5ldmVyIGJsb2NrIGNvbmZpZyBnZW5lcmF0aW9uLlxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChkZXRlY3RlZFdvcmtmbG93UGFja2FnZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCByZW1vdmVkUGFja2FnZXMgPSBuZXcgU2V0KFxuICAgICAgICAgIGRldGVjdGVkV29ya2Zsb3dQYWNrYWdlcy5tYXAoKGRldGVjdGVkKSA9PiBkZXRlY3RlZC5wYWNrYWdlTmFtZSlcbiAgICAgICAgKTtcbiAgICAgICAgZWZmZWN0aXZlU2VydmVyRXh0ZXJuYWxQYWNrYWdlcyA9XG4gICAgICAgICAgY29uZmlndXJlZFNlcnZlckV4dGVybmFsUGFja2FnZXMuZmlsdGVyKFxuICAgICAgICAgICAgKHBhY2thZ2VOYW1lKSA9PiAhcmVtb3ZlZFBhY2thZ2VzLmhhcyhwYWNrYWdlTmFtZSlcbiAgICAgICAgICApO1xuICAgICAgICBuZXh0Q29uZmlnLnNlcnZlckV4dGVybmFsUGFja2FnZXMgPSBlZmZlY3RpdmVTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzO1xuICAgICAgICB3YXJuQWJvdXRBdXRvUmVtb3ZlZFNlcnZlckV4dGVybmFsUGFja2FnZXMoZGV0ZWN0ZWRXb3JrZmxvd1BhY2thZ2VzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb25maWd1cmUgdGhlIGxvYWRlciBpZiB0dXJib3BhY2sgaXMgYmVpbmcgdXNlZFxuICAgIGlmICghbmV4dENvbmZpZy50dXJib3BhY2spIHtcbiAgICAgIG5leHRDb25maWcudHVyYm9wYWNrID0ge307XG4gICAgfVxuICAgIGlmICghbmV4dENvbmZpZy50dXJib3BhY2sucnVsZXMpIHtcbiAgICAgIG5leHRDb25maWcudHVyYm9wYWNrLnJ1bGVzID0ge307XG4gICAgfVxuICAgIGNvbnN0IGV4aXN0aW5nUnVsZXMgPSBuZXh0Q29uZmlnLnR1cmJvcGFjay5ydWxlcyBhcyBhbnk7XG4gICAgY29uc3QgbmV4dFZlcnNpb24gPSByZXNvbHZlTmV4dFZlcnNpb24ocHJvY2Vzcy5jd2QoKSk7XG4gICAgY29uc3Qgc3VwcG9ydHNUdXJib0NvbmRpdGlvbiA9IHNlbXZlci5ndGUobmV4dFZlcnNpb24sICd2MTYuMC4wJyk7XG5cbiAgICBjb25zdCBzaG91bGRXYXRjaCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnO1xuICAgIGxldCB3b3JrZmxvd0J1aWxkZXJQcm9taXNlOiBQcm9taXNlPGFueT4gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgZGlzdERpciA9IG5leHRDb25maWcuZGlzdERpciB8fCAnLm5leHQnO1xuXG4gICAgbmV4dENvbmZpZy5jb21waWxlciA9IHtcbiAgICAgIC4uLmV4aXN0aW5nQ29tcGlsZXIsXG4gICAgICBydW5BZnRlclByb2R1Y3Rpb25Db21waWxlOiBhc3luYyAobWV0YWRhdGEpID0+IHtcbiAgICAgICAgaWYgKGV4aXN0aW5nUnVuQWZ0ZXJQcm9kdWN0aW9uQ29tcGlsZSkge1xuICAgICAgICAgIGF3YWl0IGV4aXN0aW5nUnVuQWZ0ZXJQcm9kdWN0aW9uQ29tcGlsZShtZXRhZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgY29weVdvcmtmbG93RGlhZ25vc3RpY3NNYW5pZmVzdChtZXRhZGF0YSk7XG4gICAgICAgIHJlZ2lzdGVyV29ya2Zsb3dEaWFnbm9zdGljc01hbmlmZXN0Q29weShtZXRhZGF0YSk7XG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBnZXRXb3JrZmxvd0J1aWxkZXIgPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXdvcmtmbG93QnVpbGRlclByb21pc2UpIHtcbiAgICAgICAgd29ya2Zsb3dCdWlsZGVyUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgTmV4dEJ1aWxkZXIgPSBhd2FpdCBnZXROZXh0QnVpbGRlcihuZXh0VmVyc2lvbik7XG4gICAgICAgICAgcmV0dXJuIG5ldyBOZXh0QnVpbGRlcih7XG4gICAgICAgICAgICB3YXRjaDogc2hvdWxkV2F0Y2gsXG4gICAgICAgICAgICAvLyBkaXNjb3ZlciB3b3JrZmxvd3MgZnJvbSBwYWdlcy9hcHAgZW50cmllc1xuICAgICAgICAgICAgZGlyczogWydwYWdlcycsICdhcHAnLCAnc3JjL3BhZ2VzJywgJ3NyYy9hcHAnXSxcbiAgICAgICAgICAgIHByb2plY3RSb290OiBuZXh0Q29uZmlnLm91dHB1dEZpbGVUcmFjaW5nUm9vdCxcbiAgICAgICAgICAgIG1vZHVsZVNwZWNpZmllclJvb3Q6IHByb2Nlc3MuY3dkKCksXG4gICAgICAgICAgICB3b3JraW5nRGlyOiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICAgICAgZGlzdERpcixcbiAgICAgICAgICAgIGRpYWdub3N0aWNzRGlyOiBgJHtkaXN0RGlyfS9kaWFnbm9zdGljc2AsXG4gICAgICAgICAgICBidWlsZFRhcmdldDogJ25leHQnLFxuICAgICAgICAgICAgd29ya2Zsb3dzQnVuZGxlUGF0aDogJycsIC8vIG5vdCB1c2VkIGluIGJhc2VcbiAgICAgICAgICAgIHN0ZXBzQnVuZGxlUGF0aDogJycsIC8vIG5vdCB1c2VkIGluIGJhc2VcbiAgICAgICAgICAgIHdlYmhvb2tCdW5kbGVQYXRoOiAnJywgLy8gbm9kZSB1c2VkIGluIGJhc2VcbiAgICAgICAgICAgIHNvdXJjZW1hcDogd29ya2Zsb3dzPy5zb3VyY2VtYXAsXG4gICAgICAgICAgICBleHRlcm5hbFBhY2thZ2VzOiBbXG4gICAgICAgICAgICAgIC8vIHNlcnZlci1vbmx5IGFuZCBjbGllbnQtb25seSBhcmUgcHNldWRvLXBhY2thZ2VzIGhhbmRsZWQgYnkgTmV4dC5qc1xuICAgICAgICAgICAgICAvLyBkdXJpbmcgaXRzIGJ1aWxkIHByb2Nlc3MuIFdlIG1hcmsgdGhlbSBhcyBleHRlcm5hbCB0byBwcmV2ZW50IGVzYnVpbGRcbiAgICAgICAgICAgICAgLy8gZnJvbSBmYWlsaW5nIHdoZW4gYnVuZGxpbmcgY29kZSB0aGF0IGltcG9ydHMgdGhlbS5cbiAgICAgICAgICAgICAgLy8gU2VlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvZ2V0dGluZy1zdGFydGVkL3NlcnZlci1hbmQtY2xpZW50LWNvbXBvbmVudHNcbiAgICAgICAgICAgICAgJ3NlcnZlci1vbmx5JyxcbiAgICAgICAgICAgICAgJ2NsaWVudC1vbmx5JyxcbiAgICAgICAgICAgICAgLi4uZWZmZWN0aXZlU2VydmVyRXh0ZXJuYWxQYWNrYWdlcyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB3b3JrZmxvd0J1aWxkZXJQcm9taXNlO1xuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBbXG4gICAgICAnKi50c3gnLFxuICAgICAgJyoudHMnLFxuICAgICAgJyouanN4JyxcbiAgICAgICcqLmpzJyxcbiAgICAgICcqLm1qcycsXG4gICAgICAnKi5tdHMnLFxuICAgICAgJyouY2pzJyxcbiAgICAgICcqLmN0cycsXG4gICAgXSkge1xuICAgICAgbmV4dENvbmZpZy50dXJib3BhY2sucnVsZXNba2V5XSA9IHtcbiAgICAgICAgLi4uKHN1cHBvcnRzVHVyYm9Db25kaXRpb25cbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgY29uZGl0aW9uOiB7XG4gICAgICAgICAgICAgICAgLy8gVXNlICdhbGwnIHRvIGNvbWJpbmU6IG11c3QgbWF0Y2ggY29udGVudCBBTkQgbXVzdCBOT1QgYmUgaW4gZ2VuZXJhdGVkIHBhdGhcbiAgICAgICAgICAgICAgICAvLyBNZXJnZSB3aXRoIGFueSBleGlzdGluZyAnYWxsJyBjb25kaXRpb25zIGZyb20gdXNlciBjb25maWdcbiAgICAgICAgICAgICAgICBhbGw6IFtcbiAgICAgICAgICAgICAgICAgIC4uLihleGlzdGluZ1J1bGVzW2tleV0/LmNvbmRpdGlvbj8uYWxsIHx8IFtdKSxcbiAgICAgICAgICAgICAgICAgIC8vIEV4Y2x1ZGUgZ2VuZXJhdGVkIHdvcmtmbG93IHJvdXRlIGZpbGVzIGZyb20gdHJhbnNmb3JtYXRpb25cbiAgICAgICAgICAgICAgICAgIHsgbm90OiB7IHBhdGg6IC9bL1xcXFxdXFwud2VsbC1rbm93blsvXFxcXF13b3JrZmxvd1svXFxcXF0vIH0gfSxcbiAgICAgICAgICAgICAgICAgIC8vIE1hdGNoIGZpbGVzIHdpdGggd29ya2Zsb3cgZGlyZWN0aXZlcyBvciBjdXN0b20gc2VyaWFsaXphdGlvbiBwYXR0ZXJuc1xuICAgICAgICAgICAgICAgICAgLy8gVXNlcyBiYWNrcmVmZXJlbmNlcyAoXFwyLCBcXDMpIHRvIGVuc3VyZSBtYXRjaGluZyBxdW90ZSB0eXBlc1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50OlxuICAgICAgICAgICAgICAgICAgICAgIC8odXNlIHdvcmtmbG93fHVzZSBzdGVwfGZyb21cXHMrKFsnXCJdKUB3b3JrZmxvd1xcL3NlcmRlXFwyfFN5bWJvbFxcLmZvclxccypcXChcXHMqKFsnXCJdKXdvcmtmbG93LSg/OnNlcmlhbGl6ZXxkZXNlcmlhbGl6ZSlcXDNcXHMqXFwpKS8sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIGxvYWRlcnM6IFsuLi4oZXhpc3RpbmdSdWxlc1trZXldPy5sb2FkZXJzIHx8IFtdKSwgbG9hZGVyUGF0aF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIGNvbmZpZ3VyZSB0aGUgbG9hZGVyIGZvciB3ZWJwYWNrXG4gICAgY29uc3QgZXhpc3RpbmdXZWJwYWNrTW9kaWZ5ID0gbmV4dENvbmZpZy53ZWJwYWNrO1xuICAgIG5leHRDb25maWcud2VicGFjayA9ICguLi5hcmdzKSA9PiB7XG4gICAgICBjb25zdCBbd2VicGFja0NvbmZpZ10gPSBhcmdzO1xuICAgICAgaWYgKCF3ZWJwYWNrQ29uZmlnLm1vZHVsZSkge1xuICAgICAgICB3ZWJwYWNrQ29uZmlnLm1vZHVsZSA9IHt9O1xuICAgICAgfVxuICAgICAgaWYgKCF3ZWJwYWNrQ29uZmlnLm1vZHVsZS5ydWxlcykge1xuICAgICAgICB3ZWJwYWNrQ29uZmlnLm1vZHVsZS5ydWxlcyA9IFtdO1xuICAgICAgfVxuICAgICAgLy8gbG9hZGVycyBpbiB3ZWJwYWNrIGFwcGx5IGJvdHRvbS0+dXAgc28gZW5zdXJlXG4gICAgICAvLyBvdXJzIGNvbWVzIGJlZm9yZSB0aGUgZGVmYXVsdCBzd2MgdHJhbnNmb3JtXG4gICAgICB3ZWJwYWNrQ29uZmlnLm1vZHVsZS5ydWxlcy5wdXNoKHtcbiAgICAgICAgdGVzdDogLy4qXFwuKG1qc3xjanN8Y3RzfHRzfHRzeHxqc3xqc3gpJC8sXG4gICAgICAgIGxvYWRlcjogbG9hZGVyUGF0aCxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZXhpc3RpbmdXZWJwYWNrTW9kaWZ5XG4gICAgICAgID8gKGV4aXN0aW5nV2VicGFja01vZGlmeSguLi5hcmdzKSA/PyB3ZWJwYWNrQ29uZmlnKVxuICAgICAgICA6IHdlYnBhY2tDb25maWc7XG4gICAgfTtcbiAgICAvLyBvbmx5IHJ1biB0aGlzIGluIHRoZSBtYWluIHByb2Nlc3Mgc28gaXQgb25seSBydW5zIG9uY2VcbiAgICAvLyBhcyBOZXh0LmpzIHVzZXMgY2hpbGQgcHJvY2Vzc2VzIGZvciBkaWZmZXJlbnQgYnVpbGRzXG4gICAgaWYgKFxuICAgICAgIXByb2Nlc3MuZW52LldPUktGTE9XX05FWFRfUFJJVkFURV9CVUlMVCAmJlxuICAgICAgcGhhc2UgIT09ICdwaGFzZS1wcm9kdWN0aW9uLXNlcnZlcidcbiAgICApIHtcbiAgICAgIGNvbnN0IHdvcmtmbG93QnVpbGRlciA9IGF3YWl0IGdldFdvcmtmbG93QnVpbGRlcigpO1xuXG4gICAgICBhd2FpdCB3b3JrZmxvd0J1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHByb2Nlc3MuZW52LldPUktGTE9XX05FWFRfUFJJVkFURV9CVUlMVCA9ICcxJztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dENvbmZpZztcbiAgfTtcbn1cbiJdfQ==
459
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF3VEEsb0NBbVFDO0FBM2pCRCxxQ0FBNEQ7QUFDNUQsK0NBQTZEO0FBQzdELHlDQUFzRDtBQUV0RCxvREFBNEI7QUFDNUIsNkNBQThDO0FBRTlDLE1BQU0sb0JBQW9CLEdBQUcsd0JBQXdCLENBQUM7QUFDdEQsTUFBTSxnQ0FBZ0MsR0FBRztJQUN2QyxlQUFlO0lBQ2YsY0FBYztJQUNkLGtCQUFrQjtJQUNsQixrQkFBa0I7Q0FDbkIsQ0FBQztBQUNGLE1BQU0scUNBQXFDLEdBQUc7SUFDNUMsb0JBQW9CO0lBQ3BCLEdBQUcsZ0NBQWdDO0NBQ3BDLENBQUM7QUFFRixNQUFNLGtCQUFrQixHQUFHLGlDQUFpQyxDQUFDO0FBQzdELE1BQU0sY0FBYyxHQUFHLDZCQUE2QixDQUFDO0FBQ3JELE1BQU0sMEJBQTBCLEdBQUcsaUNBQWlDLENBQUM7QUFDckUsTUFBTSwwQkFBMEIsR0FDOUIsb0VBQW9FLENBQUM7QUFDdkUsTUFBTSxvQ0FBb0MsR0FDeEMsOENBQThDLENBQUM7QUFFakQsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLE1BQU0sdUNBQXVDLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztBQWVsRSxTQUFTLGFBQWEsQ0FBQyxLQUFjO0lBQ25DLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlFLENBQUM7QUFFRCxTQUFTLDRCQUE0QixDQUFDLFNBQWlCO0lBQ3JELElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDM0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDOUIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2RCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUFDLE1BQWM7SUFDNUMsTUFBTSxjQUFjLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0MsTUFBTSxjQUFjLEdBQUcsMEJBQTBCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9ELE1BQU0sY0FBYyxHQUFHLDBCQUEwQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvRCxNQUFNLHdCQUF3QixHQUM1QixvQ0FBb0MsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFcEQsT0FBTztRQUNMLGNBQWM7UUFDZCxVQUFVO1FBQ1YsUUFBUSxFQUFFLGNBQWMsSUFBSSxjQUFjLElBQUksd0JBQXdCO0tBQ3ZFLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsUUFBdUM7SUFDN0QsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO0lBQzVCLElBQUksUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLDBCQUEwQixDQUFDLFdBQW9CO0lBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUNoQyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQztRQUMxRCxDQUFDLENBQUMsV0FBVyxDQUFDLFlBQVk7UUFDMUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNQLE1BQU0sZ0JBQWdCLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNsRSxDQUFDLENBQUMsV0FBVyxDQUFDLGdCQUFnQjtRQUM5QixDQUFDLENBQUMsRUFBRSxDQUFDO0lBRVAsT0FBTyxDQUNMLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLGlCQUFpQixDQUFDO1FBQzlDLE1BQU0sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLENBQUMsQ0FDbkQsQ0FBQztBQUNKLENBQUM7QUFFRCxLQUFLLFVBQVUsMkJBQTJCLENBQ3hDLFdBQW1CLEVBQ25CLFVBQWtCO0lBRWxCLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQy9DLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUksY0FBYyxHQUFHLEtBQUssQ0FBQztJQUMzQixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDdkIsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBRXJCLElBQUksQ0FBQztRQUNILE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxXQUFXLGVBQWUsRUFBRTtZQUNyRSxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUM7U0FDcEIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLElBQUEsbUJBQVEsRUFBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbkUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBWSxDQUFDO1FBQzdELFFBQVEsR0FBRywwQkFBMEIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsaURBQWlEO0lBQ25ELENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRTtZQUM3QyxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUM7U0FDcEIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLG1CQUFRLEVBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2xELE1BQU0sUUFBUSxHQUFHLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hELGNBQWMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDO1FBQ3pDLFVBQVUsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBQ2pDLFFBQVEsS0FBSyxRQUFRLENBQUMsUUFBUSxDQUFDO0lBQ2pDLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCwwREFBMEQ7SUFDNUQsQ0FBQztJQUVELElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxPQUFPO1FBQ0wsV0FBVztRQUNYLGNBQWM7UUFDZCxVQUFVO1FBQ1YsUUFBUTtLQUNULENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUywwQ0FBMEMsQ0FDakQsZ0JBQWlEO0lBRWpELE1BQU0scUJBQXFCLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFO1FBQ3hFLE9BQU8sQ0FBQyx1Q0FBdUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbkUsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLHFCQUFxQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN2QyxPQUFPO0lBQ1QsQ0FBQztJQUVELEtBQUssTUFBTSxFQUFFLFdBQVcsRUFBRSxJQUFJLHFCQUFxQixFQUFFLENBQUM7UUFDcEQsdUNBQXVDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxNQUFNLG1CQUFtQixHQUFHLHFCQUFxQjtTQUM5QyxHQUFHLENBQ0YsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUNYLElBQUksUUFBUSxDQUFDLFdBQVcsTUFBTSxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ3ZFO1NBQ0EsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2QsTUFBTSxZQUFZLEdBQUcscUJBQXFCO1NBQ3ZDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxRQUFRLENBQUMsV0FBVyxHQUFHLENBQUM7U0FDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRWQsT0FBTyxDQUFDLElBQUksQ0FDViwrREFBK0QsbUJBQW1CLEdBQUc7UUFDbkYsNEhBQTRIO1FBQzVILGNBQWMsWUFBWSx3RUFBd0UsQ0FDckcsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLFVBQWtCO0lBQzVDLE1BQU0sTUFBTSxHQUFjLEVBQUUsQ0FBQztJQUU3QixzRUFBc0U7SUFDdEUsc0VBQXNFO0lBQ3RFLHFDQUFxQztJQUNyQyxJQUFJLENBQUM7UUFDSCxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFO1lBQzNELEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQztTQUNwQixDQUFDLENBQUM7UUFDSCxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxlQUFlLENBRWxELENBQUM7UUFDRixJQUFJLE9BQU8sbUJBQW1CLENBQUMsT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3BELE9BQU8sbUJBQW1CLENBQUMsT0FBTyxDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVELDhEQUE4RDtJQUM5RCxJQUFJLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBSSxPQUFPLENBQUMsbUJBQW1CLENBQTJCO2FBQ3BFLE9BQU8sQ0FBQztRQUNYLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDaEMsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQixDQUFDO0lBRUQsTUFBTSxJQUFJLGNBQWMsQ0FDdEIsTUFBTSxFQUNOLHVHQUF1RyxVQUFVLElBQUksQ0FDdEgsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxJQUFZO0lBQzlCLElBQUksQ0FBQztRQUNILE1BQU0sS0FBSyxHQUFHLElBQUEsa0JBQVEsRUFBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixPQUFPLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsNEJBQTRCLENBQUMsRUFDcEMsVUFBVSxFQUNWLE9BQU8sR0FJUjtJQUNDLE1BQU0sa0JBQWtCLEdBQUc7UUFDekIsSUFBQSxnQkFBSSxFQUFDLFVBQVUsRUFBRSwyQ0FBMkMsQ0FBQztRQUM3RCxJQUFBLGdCQUFJLEVBQUMsVUFBVSxFQUFFLCtDQUErQyxDQUFDO1FBQ2pFLElBQUEsZ0JBQUksRUFBQyxVQUFVLEVBQUUsOENBQThDLENBQUM7S0FDakUsQ0FBQztJQUNGLE1BQU0sWUFBWSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUV6RCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEIsT0FBTztJQUNULENBQUM7SUFFRCxNQUFNLGVBQWUsR0FBRyxJQUFBLHNCQUFVLEVBQUMsT0FBTyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxPQUFPO1FBQ1QsQ0FBQyxDQUFDLElBQUEsZ0JBQUksRUFBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDOUIsTUFBTSx1QkFBdUIsR0FBRyxJQUFBLGdCQUFJLEVBQ2xDLGVBQWUsRUFDZixhQUFhLEVBQ2IseUJBQXlCLENBQzFCLENBQUM7SUFDRixPQUFPLEVBQUUsWUFBWSxFQUFFLHVCQUF1QixFQUFFLENBQUM7QUFDbkQsQ0FBQztBQUVELEtBQUssVUFBVSwrQkFBK0IsQ0FBQyxRQUc5QztJQUNDLE1BQU0sS0FBSyxHQUFHLDRCQUE0QixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxFQUFFLFlBQVksRUFBRSx1QkFBdUIsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUN4RCxNQUFNLElBQUEsZ0JBQUssRUFBQyxJQUFBLG1CQUFPLEVBQUMsdUJBQXVCLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLE1BQU0sSUFBQSxtQkFBUSxFQUFDLFlBQVksRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFFRCxTQUFTLG1DQUFtQyxDQUFDLFFBRzVDO0lBQ0MsTUFBTSxLQUFLLEdBQUcsNEJBQTRCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsT0FBTztJQUNULENBQUM7SUFFRCxNQUFNLEVBQUUsWUFBWSxFQUFFLHVCQUF1QixFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQ3hELElBQUEsbUJBQVMsRUFBQyxJQUFBLG1CQUFPLEVBQUMsdUJBQXVCLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLElBQUEsc0JBQVksRUFBQyxZQUFZLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBRUQsU0FBUyx1Q0FBdUMsQ0FBQyxRQUdoRDtJQUNDLE1BQU0sTUFBTSxHQUFHLHFDQUFxQyxDQUFDO0lBQ3JELE1BQU0sZ0JBQWdCLEdBQUcsVUFFeEIsQ0FBQztJQUVGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzlCLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM5QixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUU7WUFDeEIsS0FBSyxNQUFNLFlBQVksSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFDMUQsbUNBQW1DLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDcEQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxQyxDQUFDO0FBRUQsU0FBZ0IsWUFBWSxDQUMxQixjQUs2QixFQUM3QixFQUNFLFNBQVMsTUFlUCxFQUFFO0lBRU4sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLEdBQUcsT0FBTyxDQUFDO1lBQzVDLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEdBQUcscUJBQXFCLENBQUM7UUFDOUQsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDO1FBQ3pDLElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7U0FBTSxDQUFDO1FBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUN2QyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixHQUFHLFFBQVEsQ0FBQztRQUMvQyxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sS0FBSyxVQUFVLFdBQVcsQ0FDL0IsS0FBYSxFQUNiLEdBQWtDO1FBRWxDLElBQ0UsS0FBSyxLQUFLLDBCQUEwQjtZQUNwQyxLQUFLLEtBQUssd0JBQXdCLEVBQ2xDLENBQUM7WUFDRCxNQUFNLEVBQUUsNkJBQTZCLEVBQUUsR0FBRyx3REFDeEMsdUJBQXVCLEdBQ3hCLENBQUM7WUFDRixvRUFBb0U7WUFDcEUsNkJBQTZCLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0MsSUFBSSxVQUFzQixDQUFDO1FBRTNCLElBQUksT0FBTyxjQUFjLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDekMsVUFBVSxHQUFHLE1BQU0sY0FBYyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNoRCxDQUFDO2FBQU0sQ0FBQztZQUNOLFVBQVUsR0FBRyxjQUFjLENBQUM7UUFDOUIsQ0FBQztRQUNELGdEQUFnRDtRQUNoRCxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDM0MsVUFBVSxDQUFDLHNCQUFzQixHQUFHO1lBQ2xDLEdBQUcsSUFBSSxHQUFHLENBQUM7Z0JBQ1QsR0FBRyxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsSUFBSSxFQUFFLENBQUM7Z0JBQzVDLHNFQUFzRTtnQkFDdEUsc0VBQXNFO2dCQUN0RSxRQUFRO2dCQUNSLEdBQUcscUNBQXFDO2FBQ3pDLENBQUM7U0FDSCxDQUFDO1FBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUNuRCxNQUFNLGlDQUFpQyxHQUNyQyxnQkFNRCxDQUFDLHlCQUF5QixDQUFDO1FBRTVCLE1BQU0sZ0NBQWdDLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FDcEQsVUFBVSxDQUFDLHNCQUFzQixDQUNsQztZQUNDLENBQUMsQ0FBQyxVQUFVLENBQUMsc0JBQXNCO1lBQ25DLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDUCxJQUFJLCtCQUErQixHQUFHLGdDQUFnQyxDQUFDO1FBRXZFLElBQUksZ0NBQWdDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hELE1BQU0sd0JBQXdCLEdBQW9DLEVBQUUsQ0FBQztZQUNyRSxLQUFLLE1BQU0sV0FBVyxJQUFJLGdDQUFnQyxFQUFFLENBQUM7Z0JBQzNELElBQUksd0JBQXdCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7b0JBQzlDLFNBQVM7Z0JBQ1gsQ0FBQztnQkFFRCxJQUFJLENBQUM7b0JBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSwyQkFBMkIsQ0FDaEQsV0FBVyxFQUNYLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FDZCxDQUFDO29CQUNGLElBQUksUUFBUSxFQUFFLENBQUM7d0JBQ2Isd0JBQXdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUMxQyxDQUFDO2dCQUNILENBQUM7Z0JBQUMsTUFBTSxDQUFDO29CQUNQLG1EQUFtRDtnQkFDckQsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJLHdCQUF3QixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQzdCLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUNqRSxDQUFDO2dCQUNGLCtCQUErQjtvQkFDN0IsZ0NBQWdDLENBQUMsTUFBTSxDQUNyQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUNuRCxDQUFDO2dCQUNKLFVBQVUsQ0FBQyxzQkFBc0IsR0FBRywrQkFBK0IsQ0FBQztnQkFDcEUsMENBQTBDLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUN2RSxDQUFDO1FBQ0gsQ0FBQztRQUVELGtEQUFrRDtRQUNsRCxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzFCLFVBQVUsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQzVCLENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDbEMsQ0FBQztRQUNELE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBWSxDQUFDO1FBQ3hELE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sc0JBQXNCLEdBQUcsZ0JBQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRWxFLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLGFBQWEsQ0FBQztRQUMzRCxJQUFJLHNCQUFnRCxDQUFDO1FBQ3JELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDO1FBRTlDLFVBQVUsQ0FBQyxRQUFRLEdBQUc7WUFDcEIsR0FBRyxnQkFBZ0I7WUFDbkIseUJBQXlCLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFO2dCQUM1QyxJQUFJLGlDQUFpQyxFQUFFLENBQUM7b0JBQ3RDLE1BQU0saUNBQWlDLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3BELENBQUM7Z0JBQ0QsTUFBTSwrQkFBK0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDaEQsdUNBQXVDLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEQsQ0FBQztTQUNGLENBQUM7UUFFRixNQUFNLGtCQUFrQixHQUFHLEtBQUssSUFBSSxFQUFFO1lBQ3BDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUM1QixzQkFBc0IsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFO29CQUNuQyxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUEsMkJBQWMsRUFBQyxXQUFXLENBQUMsQ0FBQztvQkFDdEQsT0FBTyxJQUFJLFdBQVcsQ0FBQzt3QkFDckIsS0FBSyxFQUFFLFdBQVc7d0JBQ2xCLDJEQUEyRDt3QkFDM0QsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDO3dCQUNYLGNBQWMsRUFBRSxVQUFVLENBQUMsY0FBYyxJQUFJOzRCQUMzQyxLQUFLOzRCQUNMLElBQUk7NEJBQ0osS0FBSzs0QkFDTCxJQUFJO3lCQUNMO3dCQUNELFdBQVcsRUFBRSxVQUFVLENBQUMscUJBQXFCO3dCQUM3QyxtQkFBbUIsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFO3dCQUNsQyxVQUFVLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRTt3QkFDekIsT0FBTzt3QkFDUCxjQUFjLEVBQUUsR0FBRyxPQUFPLGNBQWM7d0JBQ3hDLFdBQVcsRUFBRSxNQUFNO3dCQUNuQixtQkFBbUIsRUFBRSxFQUFFLEVBQUUsbUJBQW1CO3dCQUM1QyxlQUFlLEVBQUUsRUFBRSxFQUFFLG1CQUFtQjt3QkFDeEMsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLG9CQUFvQjt3QkFDM0MsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTO3dCQUMvQixnQkFBZ0IsRUFBRTs0QkFDaEIscUVBQXFFOzRCQUNyRSx3RUFBd0U7NEJBQ3hFLHFEQUFxRDs0QkFDckQsZ0ZBQWdGOzRCQUNoRixhQUFhOzRCQUNiLGFBQWE7NEJBQ2IsR0FBRywrQkFBK0I7eUJBQ25DO3FCQUNGLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1AsQ0FBQztZQUVELE9BQU8sc0JBQXNCLENBQUM7UUFDaEMsQ0FBQyxDQUFDO1FBRUYsS0FBSyxNQUFNLEdBQUcsSUFBSTtZQUNoQixPQUFPO1lBQ1AsTUFBTTtZQUNOLE9BQU87WUFDUCxNQUFNO1lBQ04sT0FBTztZQUNQLE9BQU87WUFDUCxPQUFPO1lBQ1AsT0FBTztTQUNSLEVBQUUsQ0FBQztZQUNGLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHO2dCQUNoQyxHQUFHLENBQUMsc0JBQXNCO29CQUN4QixDQUFDLENBQUM7d0JBQ0UsU0FBUyxFQUFFOzRCQUNULDZFQUE2RTs0QkFDN0UsNERBQTREOzRCQUM1RCxHQUFHLEVBQUU7Z0NBQ0gsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztnQ0FDN0MsNkRBQTZEO2dDQUM3RCxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxxQ0FBcUMsRUFBRSxFQUFFO2dDQUN4RCx3RUFBd0U7Z0NBQ3hFLDhEQUE4RDtnQ0FDOUQ7b0NBQ0UsT0FBTyxFQUNMLDRIQUE0SDtpQ0FDL0g7NkJBQ0Y7eUJBQ0Y7cUJBQ0Y7b0JBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDUCxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUM7YUFDOUQsQ0FBQztRQUNKLENBQUM7UUFFRCxtQ0FBbUM7UUFDbkMsTUFBTSxxQkFBcUIsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQ2pELFVBQVUsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFO1lBQy9CLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDMUIsYUFBYSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDNUIsQ0FBQztZQUNELElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNoQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDbEMsQ0FBQztZQUNELGdEQUFnRDtZQUNoRCw4Q0FBOEM7WUFDOUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO2dCQUM5QixJQUFJLEVBQUUsa0NBQWtDO2dCQUN4QyxNQUFNLEVBQUUsVUFBVTthQUNuQixDQUFDLENBQUM7WUFFSCxPQUFPLHFCQUFxQjtnQkFDMUIsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxhQUFhLENBQUM7Z0JBQ25ELENBQUMsQ0FBQyxhQUFhLENBQUM7UUFDcEIsQ0FBQyxDQUFDO1FBQ0YseURBQXlEO1FBQ3pELHVEQUF1RDtRQUN2RCxJQUNFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkI7WUFDeEMsS0FBSyxLQUFLLHlCQUF5QixFQUNuQyxDQUFDO1lBQ0QsTUFBTSxlQUFlLEdBQUcsTUFBTSxrQkFBa0IsRUFBRSxDQUFDO1lBRW5ELE1BQU0sZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzlCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLEdBQUcsR0FBRyxDQUFDO1FBQ2hELENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29weUZpbGVTeW5jLCBta2RpclN5bmMsIHN0YXRTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBjb3B5RmlsZSwgbWtkaXIsIHJlYWRGaWxlIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCBpc0Fic29sdXRlLCBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB0eXBlIHsgTmV4dENvbmZpZyB9IGZyb20gJ25leHQnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHsgZ2V0TmV4dEJ1aWxkZXIgfSBmcm9tICcuL2J1aWxkZXIuanMnO1xuXG5jb25zdCBWRVJDRUxfV09STERfUEFDS0FHRSA9ICdAd29ya2Zsb3cvd29ybGQtdmVyY2VsJztcbmNvbnN0IFZFUkNFTF9XT1JMRF9ERVBFTkRFTkNZX1BBQ0tBR0VTID0gW1xuICAnQHZlcmNlbC9xdWV1ZScsXG4gICdAdmVyY2VsL29pZGMnLFxuICAnQHZlcmNlbC9jbGktYXV0aCcsXG4gICdAbmFwaS1ycy9rZXlyaW5nJyxcbl07XG5jb25zdCBWRVJDRUxfV09STERfU0VSVkVSX0VYVEVSTkFMX1BBQ0tBR0VTID0gW1xuICBWRVJDRUxfV09STERfUEFDS0FHRSxcbiAgLi4uVkVSQ0VMX1dPUkxEX0RFUEVOREVOQ1lfUEFDS0FHRVMsXG5dO1xuXG5jb25zdCB1c2VXb3JrZmxvd1BhdHRlcm4gPSAvXlxccyooWydcIl0pdXNlIHdvcmtmbG93XFwxOz9cXHMqJC9tO1xuY29uc3QgdXNlU3RlcFBhdHRlcm4gPSAvXlxccyooWydcIl0pdXNlIHN0ZXBcXDE7P1xccyokL207XG5jb25zdCB3b3JrZmxvd1NlcmRlSW1wb3J0UGF0dGVybiA9IC9mcm9tXFxzKyhbJ1wiXSlAd29ya2Zsb3dcXC9zZXJkZVxcMS87XG5jb25zdCB3b3JrZmxvd1NlcmRlU3ltYm9sUGF0dGVybiA9XG4gIC9TeW1ib2xcXC5mb3JcXHMqXFwoXFxzKihbJ1wiXSl3b3JrZmxvdy0oPzpzZXJpYWxpemV8ZGVzZXJpYWxpemUpXFwxXFxzKlxcKS87XG5jb25zdCB3b3JrZmxvd1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eVBhdHRlcm4gPVxuICAvXFxbXFxzKldPUktGTE9XXyg/OlNFUklBTElaRXxERVNFUklBTElaRSlcXHMqXFxdLztcblxuY29uc3QgUFNFVURPX0VYVEVSTkFMX1BBQ0tBR0VTID0gbmV3IFNldChbJ3NlcnZlci1vbmx5JywgJ2NsaWVudC1vbmx5J10pO1xuY29uc3Qgd2FybmVkQXV0b1JlbW92ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbmludGVyZmFjZSBXb3JrZmxvd1BhdHRlcm5NYXRjaCB7XG4gIGhhc1VzZVdvcmtmbG93OiBib29sZWFuO1xuICBoYXNVc2VTdGVwOiBib29sZWFuO1xuICBoYXNTZXJkZTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIERldGVjdGVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlIHtcbiAgcGFja2FnZU5hbWU6IHN0cmluZztcbiAgaGFzVXNlV29ya2Zsb3c6IGJvb2xlYW47XG4gIGhhc1VzZVN0ZXA6IGJvb2xlYW47XG4gIGhhc1NlcmRlOiBib29sZWFuO1xufVxuXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGlzUmVzb2x2YWJsZVBhY2thZ2VTcGVjaWZpZXIoc3BlY2lmaWVyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKHNwZWNpZmllci5zdGFydHNXaXRoKCcuJykgfHwgc3BlY2lmaWVyLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoc3BlY2lmaWVyLnN0YXJ0c1dpdGgoJyQnKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoc3BlY2lmaWVyLmluY2x1ZGVzKCcqJykgfHwgc3BlY2lmaWVyLmluY2x1ZGVzKCc6JykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyhzb3VyY2U6IHN0cmluZyk6IFdvcmtmbG93UGF0dGVybk1hdGNoIHtcbiAgY29uc3QgaGFzVXNlV29ya2Zsb3cgPSB1c2VXb3JrZmxvd1BhdHRlcm4udGVzdChzb3VyY2UpO1xuICBjb25zdCBoYXNVc2VTdGVwID0gdXNlU3RlcFBhdHRlcm4udGVzdChzb3VyY2UpO1xuICBjb25zdCBoYXNTZXJkZUltcG9ydCA9IHdvcmtmbG93U2VyZGVJbXBvcnRQYXR0ZXJuLnRlc3Qoc291cmNlKTtcbiAgY29uc3QgaGFzU2VyZGVTeW1ib2wgPSB3b3JrZmxvd1NlcmRlU3ltYm9sUGF0dGVybi50ZXN0KHNvdXJjZSk7XG4gIGNvbnN0IGhhc1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eSA9XG4gICAgd29ya2Zsb3dTZXJkZUNvbXB1dGVkUHJvcGVydHlQYXR0ZXJuLnRlc3Qoc291cmNlKTtcblxuICByZXR1cm4ge1xuICAgIGhhc1VzZVdvcmtmbG93LFxuICAgIGhhc1VzZVN0ZXAsXG4gICAgaGFzU2VyZGU6IGhhc1NlcmRlSW1wb3J0IHx8IGhhc1NlcmRlU3ltYm9sIHx8IGhhc1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0SXNzdWVMYWJlbHMoZGV0ZWN0ZWQ6IERldGVjdGVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlKTogc3RyaW5nW10ge1xuICBjb25zdCBpc3N1ZXM6IHN0cmluZ1tdID0gW107XG4gIGlmIChkZXRlY3RlZC5oYXNVc2VXb3JrZmxvdykge1xuICAgIGlzc3Vlcy5wdXNoKCdcInVzZSB3b3JrZmxvd1wiIGZ1bmN0aW9ucycpO1xuICB9XG4gIGlmIChkZXRlY3RlZC5oYXNVc2VTdGVwKSB7XG4gICAgaXNzdWVzLnB1c2goJ1widXNlIHN0ZXBcIiBmdW5jdGlvbnMnKTtcbiAgfVxuICBpZiAoZGV0ZWN0ZWQuaGFzU2VyZGUpIHtcbiAgICBpc3N1ZXMucHVzaCgnc2VyaWFsaXphdGlvbiBjbGFzc2VzJyk7XG4gIH1cbiAgcmV0dXJuIGlzc3Vlcztcbn1cblxuZnVuY3Rpb24gaGFzV29ya2Zsb3dTZXJkZURlcGVuZGVuY3kocGFja2FnZUpzb246IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KHBhY2thZ2VKc29uKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGRlcGVuZGVuY2llcyA9IGlzUGxhaW5PYmplY3QocGFja2FnZUpzb24uZGVwZW5kZW5jaWVzKVxuICAgID8gcGFja2FnZUpzb24uZGVwZW5kZW5jaWVzXG4gICAgOiB7fTtcbiAgY29uc3QgcGVlckRlcGVuZGVuY2llcyA9IGlzUGxhaW5PYmplY3QocGFja2FnZUpzb24ucGVlckRlcGVuZGVuY2llcylcbiAgICA/IHBhY2thZ2VKc29uLnBlZXJEZXBlbmRlbmNpZXNcbiAgICA6IHt9O1xuXG4gIHJldHVybiAoXG4gICAgT2JqZWN0Lmhhc093bihkZXBlbmRlbmNpZXMsICdAd29ya2Zsb3cvc2VyZGUnKSB8fFxuICAgIE9iamVjdC5oYXNPd24ocGVlckRlcGVuZGVuY2llcywgJ0B3b3JrZmxvdy9zZXJkZScpXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRldGVjdFNlcnZlckV4dGVybmFsUGFja2FnZShcbiAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgd29ya2luZ0Rpcjogc3RyaW5nXG4pOiBQcm9taXNlPERldGVjdGVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlIHwgbnVsbD4ge1xuICBpZiAoIWlzUmVzb2x2YWJsZVBhY2thZ2VTcGVjaWZpZXIocGFja2FnZU5hbWUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsZXQgaGFzVXNlV29ya2Zsb3cgPSBmYWxzZTtcbiAgbGV0IGhhc1VzZVN0ZXAgPSBmYWxzZTtcbiAgbGV0IGhhc1NlcmRlID0gZmFsc2U7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSByZXF1aXJlLnJlc29sdmUoYCR7cGFja2FnZU5hbWV9L3BhY2thZ2UuanNvbmAsIHtcbiAgICAgIHBhdGhzOiBbd29ya2luZ0Rpcl0sXG4gICAgfSk7XG4gICAgY29uc3QgcGFja2FnZUpzb25Tb3VyY2UgPSBhd2FpdCByZWFkRmlsZShwYWNrYWdlSnNvblBhdGgsICd1dGYtOCcpO1xuICAgIGNvbnN0IHBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShwYWNrYWdlSnNvblNvdXJjZSkgYXMgdW5rbm93bjtcbiAgICBoYXNTZXJkZSA9IGhhc1dvcmtmbG93U2VyZGVEZXBlbmRlbmN5KHBhY2thZ2VKc29uKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gQmVzdC1lZmZvcnQgb25seS4gQ29udGludWUgdG8gc291cmNlIHNjYW5uaW5nLlxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBlbnRyeVBhdGggPSByZXF1aXJlLnJlc29sdmUocGFja2FnZU5hbWUsIHtcbiAgICAgIHBhdGhzOiBbd29ya2luZ0Rpcl0sXG4gICAgfSk7XG4gICAgY29uc3Qgc291cmNlID0gYXdhaXQgcmVhZEZpbGUoZW50cnlQYXRoLCAndXRmLTgnKTtcbiAgICBjb25zdCBwYXR0ZXJucyA9IGRldGVjdFdvcmtmbG93UGF0dGVybnMoc291cmNlKTtcbiAgICBoYXNVc2VXb3JrZmxvdyA9IHBhdHRlcm5zLmhhc1VzZVdvcmtmbG93O1xuICAgIGhhc1VzZVN0ZXAgPSBwYXR0ZXJucy5oYXNVc2VTdGVwO1xuICAgIGhhc1NlcmRlIHx8PSBwYXR0ZXJucy5oYXNTZXJkZTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gQmVzdC1lZmZvcnQgb25seS4gVXNlIHdoaWNoZXZlciBzaWduYWwgd2UgYWxyZWFkeSBoYXZlLlxuICB9XG5cbiAgaWYgKCFoYXNVc2VXb3JrZmxvdyAmJiAhaGFzVXNlU3RlcCAmJiAhaGFzU2VyZGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGFja2FnZU5hbWUsXG4gICAgaGFzVXNlV29ya2Zsb3csXG4gICAgaGFzVXNlU3RlcCxcbiAgICBoYXNTZXJkZSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gd2FybkFib3V0QXV0b1JlbW92ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzKFxuICBkZXRlY3RlZFBhY2thZ2VzOiBEZXRlY3RlZFNlcnZlckV4dGVybmFsUGFja2FnZVtdXG4pOiB2b2lkIHtcbiAgY29uc3QgbmV3bHlEZXRlY3RlZFBhY2thZ2VzID0gZGV0ZWN0ZWRQYWNrYWdlcy5maWx0ZXIoKHsgcGFja2FnZU5hbWUgfSkgPT4ge1xuICAgIHJldHVybiAhd2FybmVkQXV0b1JlbW92ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzLmhhcyhwYWNrYWdlTmFtZSk7XG4gIH0pO1xuXG4gIGlmIChuZXdseURldGVjdGVkUGFja2FnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yIChjb25zdCB7IHBhY2thZ2VOYW1lIH0gb2YgbmV3bHlEZXRlY3RlZFBhY2thZ2VzKSB7XG4gICAgd2FybmVkQXV0b1JlbW92ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzLmFkZChwYWNrYWdlTmFtZSk7XG4gIH1cblxuICBjb25zdCBwYWNrYWdlRGVzY3JpcHRpb25zID0gbmV3bHlEZXRlY3RlZFBhY2thZ2VzXG4gICAgLm1hcChcbiAgICAgIChkZXRlY3RlZCkgPT5cbiAgICAgICAgYFwiJHtkZXRlY3RlZC5wYWNrYWdlTmFtZX1cIiAoJHtnZXRJc3N1ZUxhYmVscyhkZXRlY3RlZCkuam9pbignLCAnKX0pYFxuICAgIClcbiAgICAuam9pbignLCAnKTtcbiAgY29uc3QgcGFja2FnZU5hbWVzID0gbmV3bHlEZXRlY3RlZFBhY2thZ2VzXG4gICAgLm1hcCgoZGV0ZWN0ZWQpID0+IGBcIiR7ZGV0ZWN0ZWQucGFja2FnZU5hbWV9XCJgKVxuICAgIC5qb2luKCcsICcpO1xuXG4gIGNvbnNvbGUud2FybihcbiAgICBgXFxu4pqgIFdvcmtmbG93IGZvdW5kIHdvcmtmbG93IGNvZGUgaW4gc2VydmVyRXh0ZXJuYWxQYWNrYWdlczogJHtwYWNrYWdlRGVzY3JpcHRpb25zfS5gICtcbiAgICAgIGBcXG4gIFdvcmtmbG93IHJlbW92ZWQgdGhlIGFmZmVjdGVkIGVudHJpZXMgZnJvbSBzZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzIGZvciB0aGlzIGJ1aWxkIGFuZCBpcyBjb21waWxpbmcgdGhlIHBhY2thZ2VzIGFueXdheS5gICtcbiAgICAgIGBcXG4gIFJlbW92ZSAke3BhY2thZ2VOYW1lc30gZnJvbSBzZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzIGluIG5leHQuY29uZmlnIHRvIHNpbGVuY2UgdGhpcyB3YXJuaW5nLlxcbmBcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU5leHRWZXJzaW9uKHdvcmtpbmdEaXI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGVycm9yczogdW5rbm93bltdID0gW107XG5cbiAgLy8gVHJ5IHJlc29sdmluZyBmcm9tIHRoZSBjb25zdW1pbmcgcHJvamVjdCdzIHdvcmtpbmcgZGlyZWN0b3J5IGZpcnN0LlxuICAvLyBUaGlzIGhhbmRsZXMgbW9ub3JlcG8gc2V0dXBzIHdoZXJlIGBuZXh0YCBtYXkgbm90IGJlIGhvaXN0ZWQgdG8gdGhlXG4gIC8vIHNhbWUgbG9jYXRpb24gYXMgYEB3b3JrZmxvdy9uZXh0YC5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSByZXF1aXJlLnJlc29sdmUoJ25leHQvcGFja2FnZS5qc29uJywge1xuICAgICAgcGF0aHM6IFt3b3JraW5nRGlyXSxcbiAgICB9KTtcbiAgICBjb25zdCByZXNvbHZlZFBhY2thZ2VKc29uID0gcmVxdWlyZShwYWNrYWdlSnNvblBhdGgpIGFzIHtcbiAgICAgIHZlcnNpb24/OiB1bmtub3duO1xuICAgIH07XG4gICAgaWYgKHR5cGVvZiByZXNvbHZlZFBhY2thZ2VKc29uLnZlcnNpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZWRQYWNrYWdlSnNvbi52ZXJzaW9uO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9ycy5wdXNoKGUpO1xuICB9XG5cbiAgLy8gRmFsbCBiYWNrIHRvIHJlc29sdmluZyByZWxhdGl2ZSB0byB0aGlzIHBhY2thZ2UncyBsb2NhdGlvbi5cbiAgdHJ5IHtcbiAgICBjb25zdCB2ZXJzaW9uID0gKHJlcXVpcmUoJ25leHQvcGFja2FnZS5qc29uJykgYXMgeyB2ZXJzaW9uPzogdW5rbm93biB9KVxuICAgICAgLnZlcnNpb247XG4gICAgaWYgKHR5cGVvZiB2ZXJzaW9uID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHZlcnNpb247XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3JzLnB1c2goZSk7XG4gIH1cblxuICB0aHJvdyBuZXcgQWdncmVnYXRlRXJyb3IoXG4gICAgZXJyb3JzLFxuICAgIGBDb3VsZCBub3QgcmVzb2x2ZSBOZXh0LmpzIHZlcnNpb24uIEVuc3VyZSBcXGBuZXh0XFxgIGlzIGluc3RhbGxlZCBpbiB5b3VyIHByb2plY3QgKHdvcmtpbmcgZGlyZWN0b3J5OiAke3dvcmtpbmdEaXJ9KS5gXG4gICk7XG59XG5cbmZ1bmN0aW9uIGZpbGVFeGlzdHMocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3RhdHMgPSBzdGF0U3luYyhwYXRoKTtcbiAgICByZXR1cm4gc3RhdHMuaXNGaWxlKCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRXb3JrZmxvd01hbmlmZXN0Q29weVBhdGhzKHtcbiAgcHJvamVjdERpcixcbiAgZGlzdERpcixcbn06IHtcbiAgcHJvamVjdERpcjogc3RyaW5nO1xuICBkaXN0RGlyOiBzdHJpbmc7XG59KTogeyBtYW5pZmVzdFBhdGg6IHN0cmluZzsgZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGg6IHN0cmluZyB9IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWFuaWZlc3RDYW5kaWRhdGVzID0gW1xuICAgIGpvaW4ocHJvamVjdERpciwgJ2FwcC8ud2VsbC1rbm93bi93b3JrZmxvdy92MS9tYW5pZmVzdC5qc29uJyksXG4gICAgam9pbihwcm9qZWN0RGlyLCAnc3JjL2FwcC8ud2VsbC1rbm93bi93b3JrZmxvdy92MS9tYW5pZmVzdC5qc29uJyksXG4gICAgam9pbihwcm9qZWN0RGlyLCAncHVibGljLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL21hbmlmZXN0Lmpzb24nKSxcbiAgXTtcbiAgY29uc3QgbWFuaWZlc3RQYXRoID0gbWFuaWZlc3RDYW5kaWRhdGVzLmZpbmQoZmlsZUV4aXN0cyk7XG5cbiAgaWYgKCFtYW5pZmVzdFBhdGgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZXNvbHZlZERpc3REaXIgPSBpc0Fic29sdXRlKGRpc3REaXIpXG4gICAgPyBkaXN0RGlyXG4gICAgOiBqb2luKHByb2plY3REaXIsIGRpc3REaXIpO1xuICBjb25zdCBkaWFnbm9zdGljc01hbmlmZXN0UGF0aCA9IGpvaW4oXG4gICAgcmVzb2x2ZWREaXN0RGlyLFxuICAgICdkaWFnbm9zdGljcycsXG4gICAgJ3dvcmtmbG93cy1tYW5pZmVzdC5qc29uJ1xuICApO1xuICByZXR1cm4geyBtYW5pZmVzdFBhdGgsIGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvcHlXb3JrZmxvd0RpYWdub3N0aWNzTWFuaWZlc3QobWV0YWRhdGE6IHtcbiAgcHJvamVjdERpcjogc3RyaW5nO1xuICBkaXN0RGlyOiBzdHJpbmc7XG59KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBhdGhzID0gZ2V0V29ya2Zsb3dNYW5pZmVzdENvcHlQYXRocyhtZXRhZGF0YSk7XG4gIGlmICghcGF0aHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB7IG1hbmlmZXN0UGF0aCwgZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGggfSA9IHBhdGhzO1xuICBhd2FpdCBta2RpcihkaXJuYW1lKGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGF3YWl0IGNvcHlGaWxlKG1hbmlmZXN0UGF0aCwgZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGgpO1xufVxuXG5mdW5jdGlvbiBjb3B5V29ya2Zsb3dEaWFnbm9zdGljc01hbmlmZXN0U3luYyhtZXRhZGF0YToge1xuICBwcm9qZWN0RGlyOiBzdHJpbmc7XG4gIGRpc3REaXI6IHN0cmluZztcbn0pOiB2b2lkIHtcbiAgY29uc3QgcGF0aHMgPSBnZXRXb3JrZmxvd01hbmlmZXN0Q29weVBhdGhzKG1ldGFkYXRhKTtcbiAgaWYgKCFwYXRocykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHsgbWFuaWZlc3RQYXRoLCBkaWFnbm9zdGljc01hbmlmZXN0UGF0aCB9ID0gcGF0aHM7XG4gIG1rZGlyU3luYyhkaXJuYW1lKGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGNvcHlGaWxlU3luYyhtYW5pZmVzdFBhdGgsIGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoKTtcbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJXb3JrZmxvd0RpYWdub3N0aWNzTWFuaWZlc3RDb3B5KG1ldGFkYXRhOiB7XG4gIHByb2plY3REaXI6IHN0cmluZztcbiAgZGlzdERpcjogc3RyaW5nO1xufSk6IHZvaWQge1xuICBjb25zdCBtYXJrZXIgPSAnX193b3JrZmxvd0RpYWdub3N0aWNzTWFuaWZlc3RDb3BpZXMnO1xuICBjb25zdCBnbG9iYWxXaXRoTWFya2VyID0gZ2xvYmFsVGhpcyBhcyB0eXBlb2YgZ2xvYmFsVGhpcyAmIHtcbiAgICBbbWFya2VyXT86IEFycmF5PHsgcHJvamVjdERpcjogc3RyaW5nOyBkaXN0RGlyOiBzdHJpbmcgfT47XG4gIH07XG5cbiAgaWYgKCFnbG9iYWxXaXRoTWFya2VyW21hcmtlcl0pIHtcbiAgICBnbG9iYWxXaXRoTWFya2VyW21hcmtlcl0gPSBbXTtcbiAgICBwcm9jZXNzLm9uY2UoJ2V4aXQnLCAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGNvcHlNZXRhZGF0YSBvZiBnbG9iYWxXaXRoTWFya2VyW21hcmtlcl0gfHwgW10pIHtcbiAgICAgICAgY29weVdvcmtmbG93RGlhZ25vc3RpY3NNYW5pZmVzdFN5bmMoY29weU1ldGFkYXRhKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdsb2JhbFdpdGhNYXJrZXJbbWFya2VyXS5wdXNoKG1ldGFkYXRhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhXb3JrZmxvdyhcbiAgbmV4dENvbmZpZ09yRm46XG4gICAgfCBOZXh0Q29uZmlnXG4gICAgfCAoKFxuICAgICAgICBwaGFzZTogc3RyaW5nLFxuICAgICAgICBjdHg6IHsgZGVmYXVsdENvbmZpZzogTmV4dENvbmZpZyB9XG4gICAgICApID0+IFByb21pc2U8TmV4dENvbmZpZz4pLFxuICB7XG4gICAgd29ya2Zsb3dzLFxuICB9OiB7XG4gICAgd29ya2Zsb3dzPzoge1xuICAgICAgbG9jYWw/OiB7XG4gICAgICAgIHBvcnQ/OiBudW1iZXI7XG4gICAgICB9O1xuICAgICAgLyoqXG4gICAgICAgKiBDb250cm9scyBob3cgc291cmNlIG1hcHMgYXJlIGVtaXR0ZWQgZm9yIHdvcmtmbG93IGJ1bmRsZXMuIEFjY2VwdHNcbiAgICAgICAqIHRoZSBzYW1lIHZhbHVlcyBhcyBlc2J1aWxkJ3MgYHNvdXJjZW1hcGAgb3B0aW9uOiBgdHJ1ZWAvYCdpbmxpbmUnYFxuICAgICAgICogKGRlZmF1bHQpLCBgJ2xpbmtlZCdgLCBgJ2V4dGVybmFsJ2AsIGAnYm90aCdgLCBvciBgZmFsc2VgIHRvIG9taXRcbiAgICAgICAqIHNvdXJjZSBtYXBzLiBDYW4gYWxzbyBiZSBzZXQgdmlhIHRoZSBgV09SS0ZMT1dfU09VUkNFTUFQYFxuICAgICAgICogZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gICAgICAgKi9cbiAgICAgIHNvdXJjZW1hcD86IGJvb2xlYW4gfCAnaW5saW5lJyB8ICdsaW5rZWQnIHwgJ2V4dGVybmFsJyB8ICdib3RoJztcbiAgICB9O1xuICB9ID0ge31cbikge1xuICBpZiAoIXByb2Nlc3MuZW52LlZFUkNFTF9ERVBMT1lNRU5UX0lEKSB7XG4gICAgaWYgKCFwcm9jZXNzLmVudi5XT1JLRkxPV19UQVJHRVRfV09STEQpIHtcbiAgICAgIHByb2Nlc3MuZW52LldPUktGTE9XX1RBUkdFVF9XT1JMRCA9ICdsb2NhbCc7XG4gICAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19MT0NBTF9EQVRBX0RJUiA9ICcubmV4dC93b3JrZmxvdy1kYXRhJztcbiAgICB9XG4gICAgY29uc3QgbWF5YmVQb3J0ID0gd29ya2Zsb3dzPy5sb2NhbD8ucG9ydDtcbiAgICBpZiAobWF5YmVQb3J0KSB7XG4gICAgICBwcm9jZXNzLmVudi5QT1JUID0gbWF5YmVQb3J0LnRvU3RyaW5nKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICghcHJvY2Vzcy5lbnYuV09SS0ZMT1dfVEFSR0VUX1dPUkxEKSB7XG4gICAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19UQVJHRVRfV09STEQgPSAndmVyY2VsJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gYnVpbGRDb25maWcoXG4gICAgcGhhc2U6IHN0cmluZyxcbiAgICBjdHg6IHsgZGVmYXVsdENvbmZpZzogTmV4dENvbmZpZyB9XG4gICkge1xuICAgIGlmIChcbiAgICAgIHBoYXNlID09PSAncGhhc2UtZGV2ZWxvcG1lbnQtc2VydmVyJyB8fFxuICAgICAgcGhhc2UgPT09ICdwaGFzZS1wcm9kdWN0aW9uLWJ1aWxkJ1xuICAgICkge1xuICAgICAgY29uc3QgeyBwcmV3YXJtV29ya2Zsb3dTd2NQbHVnaW5DYWNoZSB9ID0gYXdhaXQgaW1wb3J0KFxuICAgICAgICAnLi9zd2MtcGx1Z2luLWNhY2hlLmpzJ1xuICAgICAgKTtcbiAgICAgIC8vIExvYWRlciB3b3JrZXJzIGluaGVyaXQgdGhpcyBjd2QgYW5kIHJlYWQgZnJvbSB0aGUgc2FtZSBTV0MgY2FjaGUuXG4gICAgICBwcmV3YXJtV29ya2Zsb3dTd2NQbHVnaW5DYWNoZShwcm9jZXNzLmN3ZCgpKTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2FkZXJQYXRoID0gcmVxdWlyZS5yZXNvbHZlKCcuL2xvYWRlcicpO1xuICAgIGxldCBuZXh0Q29uZmlnOiBOZXh0Q29uZmlnO1xuXG4gICAgaWYgKHR5cGVvZiBuZXh0Q29uZmlnT3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbmV4dENvbmZpZyA9IGF3YWl0IG5leHRDb25maWdPckZuKHBoYXNlLCBjdHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0Q29uZmlnID0gbmV4dENvbmZpZ09yRm47XG4gICAgfVxuICAgIC8vIHNoYWxsb3cgY2xvbmUgdG8gYXZvaWQgcmVhZC1vbmx5IG9uIHRvcC1sZXZlbFxuICAgIG5leHRDb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBuZXh0Q29uZmlnKTtcbiAgICBuZXh0Q29uZmlnLnNlcnZlckV4dGVybmFsUGFja2FnZXMgPSBbXG4gICAgICAuLi5uZXcgU2V0KFtcbiAgICAgICAgLi4uKG5leHRDb25maWcuc2VydmVyRXh0ZXJuYWxQYWNrYWdlcyB8fCBbXSksXG4gICAgICAgIC8vIEtlZXAgdGhlIFZlcmNlbCB3b3JsZCBhbmQgaXRzIG5hdGl2ZS1wcm9uZSBkZXBlbmRlbmNpZXMgZXh0ZXJuYWwgc29cbiAgICAgICAgLy8gbG9jYWwgYnVpbGRzIGRvIG5vdCB0cnkgdG8gcGFyc2UgQHZlcmNlbC9xdWV1ZSdzIGtleXJpbmcgZGVwZW5kZW5jeVxuICAgICAgICAvLyB0cmVlLlxuICAgICAgICAuLi5WRVJDRUxfV09STERfU0VSVkVSX0VYVEVSTkFMX1BBQ0tBR0VTLFxuICAgICAgXSksXG4gICAgXTtcbiAgICBjb25zdCBleGlzdGluZ0NvbXBpbGVyID0gbmV4dENvbmZpZy5jb21waWxlciA/PyB7fTtcbiAgICBjb25zdCBleGlzdGluZ1J1bkFmdGVyUHJvZHVjdGlvbkNvbXBpbGUgPSAoXG4gICAgICBleGlzdGluZ0NvbXBpbGVyIGFzIHtcbiAgICAgICAgcnVuQWZ0ZXJQcm9kdWN0aW9uQ29tcGlsZT86IChtZXRhZGF0YToge1xuICAgICAgICAgIHByb2plY3REaXI6IHN0cmluZztcbiAgICAgICAgICBkaXN0RGlyOiBzdHJpbmc7XG4gICAgICAgIH0pID0+IFByb21pc2U8dm9pZD47XG4gICAgICB9XG4gICAgKS5ydW5BZnRlclByb2R1Y3Rpb25Db21waWxlO1xuXG4gICAgY29uc3QgY29uZmlndXJlZFNlcnZlckV4dGVybmFsUGFja2FnZXMgPSBBcnJheS5pc0FycmF5KFxuICAgICAgbmV4dENvbmZpZy5zZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzXG4gICAgKVxuICAgICAgPyBuZXh0Q29uZmlnLnNlcnZlckV4dGVybmFsUGFja2FnZXNcbiAgICAgIDogW107XG4gICAgbGV0IGVmZmVjdGl2ZVNlcnZlckV4dGVybmFsUGFja2FnZXMgPSBjb25maWd1cmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcztcblxuICAgIGlmIChjb25maWd1cmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBkZXRlY3RlZFdvcmtmbG93UGFja2FnZXM6IERldGVjdGVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgcGFja2FnZU5hbWUgb2YgY29uZmlndXJlZFNlcnZlckV4dGVybmFsUGFja2FnZXMpIHtcbiAgICAgICAgaWYgKFBTRVVET19FWFRFUk5BTF9QQUNLQUdFUy5oYXMocGFja2FnZU5hbWUpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGRldGVjdGVkID0gYXdhaXQgZGV0ZWN0U2VydmVyRXh0ZXJuYWxQYWNrYWdlKFxuICAgICAgICAgICAgcGFja2FnZU5hbWUsXG4gICAgICAgICAgICBwcm9jZXNzLmN3ZCgpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZGV0ZWN0ZWQpIHtcbiAgICAgICAgICAgIGRldGVjdGVkV29ya2Zsb3dQYWNrYWdlcy5wdXNoKGRldGVjdGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIEJlc3QtZWZmb3J0IG9ubHkuIE5ldmVyIGJsb2NrIGNvbmZpZyBnZW5lcmF0aW9uLlxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChkZXRlY3RlZFdvcmtmbG93UGFja2FnZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCByZW1vdmVkUGFja2FnZXMgPSBuZXcgU2V0KFxuICAgICAgICAgIGRldGVjdGVkV29ya2Zsb3dQYWNrYWdlcy5tYXAoKGRldGVjdGVkKSA9PiBkZXRlY3RlZC5wYWNrYWdlTmFtZSlcbiAgICAgICAgKTtcbiAgICAgICAgZWZmZWN0aXZlU2VydmVyRXh0ZXJuYWxQYWNrYWdlcyA9XG4gICAgICAgICAgY29uZmlndXJlZFNlcnZlckV4dGVybmFsUGFja2FnZXMuZmlsdGVyKFxuICAgICAgICAgICAgKHBhY2thZ2VOYW1lKSA9PiAhcmVtb3ZlZFBhY2thZ2VzLmhhcyhwYWNrYWdlTmFtZSlcbiAgICAgICAgICApO1xuICAgICAgICBuZXh0Q29uZmlnLnNlcnZlckV4dGVybmFsUGFja2FnZXMgPSBlZmZlY3RpdmVTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzO1xuICAgICAgICB3YXJuQWJvdXRBdXRvUmVtb3ZlZFNlcnZlckV4dGVybmFsUGFja2FnZXMoZGV0ZWN0ZWRXb3JrZmxvd1BhY2thZ2VzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb25maWd1cmUgdGhlIGxvYWRlciBpZiB0dXJib3BhY2sgaXMgYmVpbmcgdXNlZFxuICAgIGlmICghbmV4dENvbmZpZy50dXJib3BhY2spIHtcbiAgICAgIG5leHRDb25maWcudHVyYm9wYWNrID0ge307XG4gICAgfVxuICAgIGlmICghbmV4dENvbmZpZy50dXJib3BhY2sucnVsZXMpIHtcbiAgICAgIG5leHRDb25maWcudHVyYm9wYWNrLnJ1bGVzID0ge307XG4gICAgfVxuICAgIGNvbnN0IGV4aXN0aW5nUnVsZXMgPSBuZXh0Q29uZmlnLnR1cmJvcGFjay5ydWxlcyBhcyBhbnk7XG4gICAgY29uc3QgbmV4dFZlcnNpb24gPSByZXNvbHZlTmV4dFZlcnNpb24ocHJvY2Vzcy5jd2QoKSk7XG4gICAgY29uc3Qgc3VwcG9ydHNUdXJib0NvbmRpdGlvbiA9IHNlbXZlci5ndGUobmV4dFZlcnNpb24sICd2MTYuMC4wJyk7XG5cbiAgICBjb25zdCBzaG91bGRXYXRjaCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnO1xuICAgIGxldCB3b3JrZmxvd0J1aWxkZXJQcm9taXNlOiBQcm9taXNlPGFueT4gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgZGlzdERpciA9IG5leHRDb25maWcuZGlzdERpciB8fCAnLm5leHQnO1xuXG4gICAgbmV4dENvbmZpZy5jb21waWxlciA9IHtcbiAgICAgIC4uLmV4aXN0aW5nQ29tcGlsZXIsXG4gICAgICBydW5BZnRlclByb2R1Y3Rpb25Db21waWxlOiBhc3luYyAobWV0YWRhdGEpID0+IHtcbiAgICAgICAgaWYgKGV4aXN0aW5nUnVuQWZ0ZXJQcm9kdWN0aW9uQ29tcGlsZSkge1xuICAgICAgICAgIGF3YWl0IGV4aXN0aW5nUnVuQWZ0ZXJQcm9kdWN0aW9uQ29tcGlsZShtZXRhZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgY29weVdvcmtmbG93RGlhZ25vc3RpY3NNYW5pZmVzdChtZXRhZGF0YSk7XG4gICAgICAgIHJlZ2lzdGVyV29ya2Zsb3dEaWFnbm9zdGljc01hbmlmZXN0Q29weShtZXRhZGF0YSk7XG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBnZXRXb3JrZmxvd0J1aWxkZXIgPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXdvcmtmbG93QnVpbGRlclByb21pc2UpIHtcbiAgICAgICAgd29ya2Zsb3dCdWlsZGVyUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgTmV4dEJ1aWxkZXIgPSBhd2FpdCBnZXROZXh0QnVpbGRlcihuZXh0VmVyc2lvbik7XG4gICAgICAgICAgcmV0dXJuIG5ldyBOZXh0QnVpbGRlcih7XG4gICAgICAgICAgICB3YXRjaDogc2hvdWxkV2F0Y2gsXG4gICAgICAgICAgICAvLyBnZXRJbnB1dEZpbGVzIGZpbHRlcnMgdGhlIHByb2plY3QgdG8gTmV4dC5qcyBlbnRyeXBvaW50c1xuICAgICAgICAgICAgZGlyczogWycuJ10sXG4gICAgICAgICAgICBwYWdlRXh0ZW5zaW9uczogbmV4dENvbmZpZy5wYWdlRXh0ZW5zaW9ucyA/PyBbXG4gICAgICAgICAgICAgICd0c3gnLFxuICAgICAgICAgICAgICAndHMnLFxuICAgICAgICAgICAgICAnanN4JyxcbiAgICAgICAgICAgICAgJ2pzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBwcm9qZWN0Um9vdDogbmV4dENvbmZpZy5vdXRwdXRGaWxlVHJhY2luZ1Jvb3QsXG4gICAgICAgICAgICBtb2R1bGVTcGVjaWZpZXJSb290OiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICAgICAgd29ya2luZ0RpcjogcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgICAgIGRpc3REaXIsXG4gICAgICAgICAgICBkaWFnbm9zdGljc0RpcjogYCR7ZGlzdERpcn0vZGlhZ25vc3RpY3NgLFxuICAgICAgICAgICAgYnVpbGRUYXJnZXQ6ICduZXh0JyxcbiAgICAgICAgICAgIHdvcmtmbG93c0J1bmRsZVBhdGg6ICcnLCAvLyBub3QgdXNlZCBpbiBiYXNlXG4gICAgICAgICAgICBzdGVwc0J1bmRsZVBhdGg6ICcnLCAvLyBub3QgdXNlZCBpbiBiYXNlXG4gICAgICAgICAgICB3ZWJob29rQnVuZGxlUGF0aDogJycsIC8vIG5vZGUgdXNlZCBpbiBiYXNlXG4gICAgICAgICAgICBzb3VyY2VtYXA6IHdvcmtmbG93cz8uc291cmNlbWFwLFxuICAgICAgICAgICAgZXh0ZXJuYWxQYWNrYWdlczogW1xuICAgICAgICAgICAgICAvLyBzZXJ2ZXItb25seSBhbmQgY2xpZW50LW9ubHkgYXJlIHBzZXVkby1wYWNrYWdlcyBoYW5kbGVkIGJ5IE5leHQuanNcbiAgICAgICAgICAgICAgLy8gZHVyaW5nIGl0cyBidWlsZCBwcm9jZXNzLiBXZSBtYXJrIHRoZW0gYXMgZXh0ZXJuYWwgdG8gcHJldmVudCBlc2J1aWxkXG4gICAgICAgICAgICAgIC8vIGZyb20gZmFpbGluZyB3aGVuIGJ1bmRsaW5nIGNvZGUgdGhhdCBpbXBvcnRzIHRoZW0uXG4gICAgICAgICAgICAgIC8vIFNlZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2dldHRpbmctc3RhcnRlZC9zZXJ2ZXItYW5kLWNsaWVudC1jb21wb25lbnRzXG4gICAgICAgICAgICAgICdzZXJ2ZXItb25seScsXG4gICAgICAgICAgICAgICdjbGllbnQtb25seScsXG4gICAgICAgICAgICAgIC4uLmVmZmVjdGl2ZVNlcnZlckV4dGVybmFsUGFja2FnZXMsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gd29ya2Zsb3dCdWlsZGVyUHJvbWlzZTtcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgW1xuICAgICAgJyoudHN4JyxcbiAgICAgICcqLnRzJyxcbiAgICAgICcqLmpzeCcsXG4gICAgICAnKi5qcycsXG4gICAgICAnKi5tanMnLFxuICAgICAgJyoubXRzJyxcbiAgICAgICcqLmNqcycsXG4gICAgICAnKi5jdHMnLFxuICAgIF0pIHtcbiAgICAgIG5leHRDb25maWcudHVyYm9wYWNrLnJ1bGVzW2tleV0gPSB7XG4gICAgICAgIC4uLihzdXBwb3J0c1R1cmJvQ29uZGl0aW9uXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGNvbmRpdGlvbjoge1xuICAgICAgICAgICAgICAgIC8vIFVzZSAnYWxsJyB0byBjb21iaW5lOiBtdXN0IG1hdGNoIGNvbnRlbnQgQU5EIG11c3QgTk9UIGJlIGluIGdlbmVyYXRlZCBwYXRoXG4gICAgICAgICAgICAgICAgLy8gTWVyZ2Ugd2l0aCBhbnkgZXhpc3RpbmcgJ2FsbCcgY29uZGl0aW9ucyBmcm9tIHVzZXIgY29uZmlnXG4gICAgICAgICAgICAgICAgYWxsOiBbXG4gICAgICAgICAgICAgICAgICAuLi4oZXhpc3RpbmdSdWxlc1trZXldPy5jb25kaXRpb24/LmFsbCB8fCBbXSksXG4gICAgICAgICAgICAgICAgICAvLyBFeGNsdWRlIGdlbmVyYXRlZCB3b3JrZmxvdyByb3V0ZSBmaWxlcyBmcm9tIHRyYW5zZm9ybWF0aW9uXG4gICAgICAgICAgICAgICAgICB7IG5vdDogeyBwYXRoOiAvWy9cXFxcXVxcLndlbGwta25vd25bL1xcXFxdd29ya2Zsb3dbL1xcXFxdLyB9IH0sXG4gICAgICAgICAgICAgICAgICAvLyBNYXRjaCBmaWxlcyB3aXRoIHdvcmtmbG93IGRpcmVjdGl2ZXMgb3IgY3VzdG9tIHNlcmlhbGl6YXRpb24gcGF0dGVybnNcbiAgICAgICAgICAgICAgICAgIC8vIFVzZXMgYmFja3JlZmVyZW5jZXMgKFxcMiwgXFwzKSB0byBlbnN1cmUgbWF0Y2hpbmcgcXVvdGUgdHlwZXNcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDpcbiAgICAgICAgICAgICAgICAgICAgICAvKHVzZSB3b3JrZmxvd3x1c2Ugc3RlcHxmcm9tXFxzKyhbJ1wiXSlAd29ya2Zsb3dcXC9zZXJkZVxcMnxTeW1ib2xcXC5mb3JcXHMqXFwoXFxzKihbJ1wiXSl3b3JrZmxvdy0oPzpzZXJpYWxpemV8ZGVzZXJpYWxpemUpXFwzXFxzKlxcKSkvLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICBsb2FkZXJzOiBbLi4uKGV4aXN0aW5nUnVsZXNba2V5XT8ubG9hZGVycyB8fCBbXSksIGxvYWRlclBhdGhdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBjb25maWd1cmUgdGhlIGxvYWRlciBmb3Igd2VicGFja1xuICAgIGNvbnN0IGV4aXN0aW5nV2VicGFja01vZGlmeSA9IG5leHRDb25maWcud2VicGFjaztcbiAgICBuZXh0Q29uZmlnLndlYnBhY2sgPSAoLi4uYXJncykgPT4ge1xuICAgICAgY29uc3QgW3dlYnBhY2tDb25maWddID0gYXJncztcbiAgICAgIGlmICghd2VicGFja0NvbmZpZy5tb2R1bGUpIHtcbiAgICAgICAgd2VicGFja0NvbmZpZy5tb2R1bGUgPSB7fTtcbiAgICAgIH1cbiAgICAgIGlmICghd2VicGFja0NvbmZpZy5tb2R1bGUucnVsZXMpIHtcbiAgICAgICAgd2VicGFja0NvbmZpZy5tb2R1bGUucnVsZXMgPSBbXTtcbiAgICAgIH1cbiAgICAgIC8vIGxvYWRlcnMgaW4gd2VicGFjayBhcHBseSBib3R0b20tPnVwIHNvIGVuc3VyZVxuICAgICAgLy8gb3VycyBjb21lcyBiZWZvcmUgdGhlIGRlZmF1bHQgc3djIHRyYW5zZm9ybVxuICAgICAgd2VicGFja0NvbmZpZy5tb2R1bGUucnVsZXMucHVzaCh7XG4gICAgICAgIHRlc3Q6IC8uKlxcLihtanN8Y2pzfGN0c3x0c3x0c3h8anN8anN4KSQvLFxuICAgICAgICBsb2FkZXI6IGxvYWRlclBhdGgsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGV4aXN0aW5nV2VicGFja01vZGlmeVxuICAgICAgICA/IChleGlzdGluZ1dlYnBhY2tNb2RpZnkoLi4uYXJncykgPz8gd2VicGFja0NvbmZpZylcbiAgICAgICAgOiB3ZWJwYWNrQ29uZmlnO1xuICAgIH07XG4gICAgLy8gb25seSBydW4gdGhpcyBpbiB0aGUgbWFpbiBwcm9jZXNzIHNvIGl0IG9ubHkgcnVucyBvbmNlXG4gICAgLy8gYXMgTmV4dC5qcyB1c2VzIGNoaWxkIHByb2Nlc3NlcyBmb3IgZGlmZmVyZW50IGJ1aWxkc1xuICAgIGlmIChcbiAgICAgICFwcm9jZXNzLmVudi5XT1JLRkxPV19ORVhUX1BSSVZBVEVfQlVJTFQgJiZcbiAgICAgIHBoYXNlICE9PSAncGhhc2UtcHJvZHVjdGlvbi1zZXJ2ZXInXG4gICAgKSB7XG4gICAgICBjb25zdCB3b3JrZmxvd0J1aWxkZXIgPSBhd2FpdCBnZXRXb3JrZmxvd0J1aWxkZXIoKTtcblxuICAgICAgYXdhaXQgd29ya2Zsb3dCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19ORVhUX1BSSVZBVEVfQlVJTFQgPSAnMSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRDb25maWc7XG4gIH07XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAyMA,KAAK,qBAAqB,GAAG;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CACZ,KAAK,EAAE,KAAK,GAAG,IAAI,EACnB,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,GAAG,KACZ,IAAI,CAAC;IACV,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;CACnD,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,cAAc,CACpC,IAAI,EAAE,qBAAqB,EAC3B,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,SAAS,EAAE,GAAG,GACb,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAyGjC"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAyMA,KAAK,qBAAqB,GAAG;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CACZ,KAAK,EAAE,KAAK,GAAG,IAAI,EACnB,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,GAAG,KACZ,IAAI,CAAC;IACV,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;CACnD,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,cAAc,CACpC,IAAI,EAAE,qBAAqB,EAC3B,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,SAAS,EAAE,GAAG,GACb,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CA0GjC"}
package/dist/loader.js CHANGED
@@ -184,6 +184,7 @@ function workflowLoader(source, sourceMap) {
184
184
  },
185
185
  target: 'es2022',
186
186
  experimental: {
187
+ cacheRoot: (0, node_path_1.join)(workingDir, '.swc'),
187
188
  plugins: [[swcPluginPath, { mode, moduleSpecifier }]],
188
189
  },
189
190
  transform: {
@@ -222,4 +223,4 @@ function workflowLoader(source, sourceMap) {
222
223
  callback(error instanceof Error ? error : new Error(String(error)));
223
224
  });
224
225
  }
225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQW9OQSxpQ0E2R0M7QUFqVUQscUNBQXFDO0FBQ3JDLHlDQUFvRDtBQUNwRCxvQ0FBc0M7QUFNdEMseUZBQXlGO0FBQ3pGLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxHQUFHLEVBR2xDLENBQUM7QUFDSix5R0FBeUc7QUFDekcsSUFBSSxvQkFBb0IsR0FBK0MsSUFBSSxDQUFDO0FBSzVFLElBQUksOEJBQThCLEdBQW9DLElBQUksQ0FBQztBQUUzRSxTQUFTLHNCQUFzQixDQUM3QixhQUFvQyxFQUNwQyxjQUFzQjtJQUV0QixhQUFhLENBQUMsYUFBYSxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDOUMsYUFBYSxDQUFDLGtCQUFrQixFQUFFLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDckQsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEtBQWtCLEVBQUUsY0FBc0I7SUFDN0QsSUFBSSxJQUFBLG9CQUFVLEVBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztRQUMvQixLQUFLLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzVCLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUywrQkFBK0I7SUFDdEMsSUFBSSw4QkFBOEIsRUFBRSxDQUFDO1FBQ25DLE9BQU8sOEJBQThCLENBQUM7SUFDeEMsQ0FBQztJQUVELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUM5RCxNQUFNLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQzVDLHNDQUFzQyxDQUN2QyxDQUFDO0lBQ0YsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFFbkUsK0RBQStEO0lBQy9ELG9FQUFvRTtJQUNwRSxNQUFNLHdCQUF3QixHQUFHLElBQUEsZ0JB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aW1wb3J0IHsgZGlybmFtZSwgam9pbiwgcmVsYXRpdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgdHJhbnNmb3JtIH0gZnJvbSAnQHN3Yy9jb3JlJztcblxudHlwZSBEZWNvcmF0b3JPcHRpb25zV2l0aENvbmZpZ1BhdGggPVxuICBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpLkRlY29yYXRvck9wdGlvbnNXaXRoQ29uZmlnUGF0aDtcbnR5cGUgV29ya2Zsb3dQYXR0ZXJuTWF0Y2ggPSBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpLldvcmtmbG93UGF0dGVybk1hdGNoO1xuXG4vLyBDYWNoZSBkZWNvcmF0b3Igb3B0aW9ucyBwZXIgd29ya2luZyBkaXJlY3RvcnkgdG8gYXZvaWQgcmVhZGluZyB0c2NvbmZpZyBmb3IgZXZlcnkgZmlsZVxuY29uc3QgZGVjb3JhdG9yT3B0aW9uc0NhY2hlID0gbmV3IE1hcDxcbiAgc3RyaW5nLFxuICBQcm9taXNlPERlY29yYXRvck9wdGlvbnNXaXRoQ29uZmlnUGF0aD5cbj4oKTtcbi8vIENhY2hlIGZvciBzaGFyZWQgdXRpbGl0aWVzIGZyb20gQHdvcmtmbG93L2J1aWxkZXJzIChFU00gbW9kdWxlIGxvYWRlZCBkeW5hbWljYWxseSBpbiBDb21tb25KUyBjb250ZXh0KVxubGV0IGNhY2hlZEJ1aWxkZXJzTW9kdWxlOiB0eXBlb2YgaW1wb3J0KCdAd29ya2Zsb3cvYnVpbGRlcnMnKSB8IG51bGwgPSBudWxsO1xudHlwZSBMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXMgPSB7XG4gIHN3Y1BsdWdpblBhdGg6IHN0cmluZztcbiAgZmlsZXM6IHN0cmluZ1tdO1xufTtcbmxldCBjYWNoZWRMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXM6IExvYWRlclN0YXRpY0RlcGVuZGVuY2llcyB8IG51bGwgPSBudWxsO1xuXG5mdW5jdGlvbiByZWdpc3RlckZpbGVEZXBlbmRlbmN5KFxuICBsb2FkZXJDb250ZXh0OiBXb3JrZmxvd0xvYWRlckNvbnRleHQsXG4gIGRlcGVuZGVuY3lQYXRoOiBzdHJpbmdcbik6IHZvaWQge1xuICBsb2FkZXJDb250ZXh0LmFkZERlcGVuZGVuY3k/LihkZXBlbmRlbmN5UGF0aCk7XG4gIGxvYWRlckNvbnRleHQuYWRkQnVpbGREZXBlbmRlbmN5Py4oZGVwZW5kZW5jeVBhdGgpO1xufVxuXG5mdW5jdGlvbiBhZGRJZkV4aXN0cyhmaWxlczogU2V0PHN0cmluZz4sIGRlcGVuZGVuY3lQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKGV4aXN0c1N5bmMoZGVwZW5kZW5jeVBhdGgpKSB7XG4gICAgZmlsZXMuYWRkKGRlcGVuZGVuY3lQYXRoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzKCk6IExvYWRlclN0YXRpY0RlcGVuZGVuY2llcyB7XG4gIGlmIChjYWNoZWRMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXMpIHtcbiAgICByZXR1cm4gY2FjaGVkTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzO1xuICB9XG5cbiAgY29uc3Qgc3djUGx1Z2luUGF0aCA9IHJlcXVpcmUucmVzb2x2ZSgnQHdvcmtmbG93L3N3Yy1wbHVnaW4nKTtcbiAgY29uc3Qgc3djUGx1Z2luQnVpbGRIYXNoUGF0aCA9IHJlcXVpcmUucmVzb2x2ZShcbiAgICAnQHdvcmtmbG93L3N3Yy1wbHVnaW4vYnVpbGQtaGFzaC5qc29uJ1xuICApO1xuICBjb25zdCB3b3JrZmxvd0J1aWxkZXJzUGF0aCA9IHJlcXVpcmUucmVzb2x2ZSgnQHdvcmtmbG93L2J1aWxkZXJzJyk7XG5cbiAgLy8gRGVyaXZlIHBhY2thZ2UuanNvbiBwYXRocyBmcm9tIHJlc29sdmVkIGVudHJ5cG9pbnRzIHRvIGF2b2lkXG4gIC8vIFR1cmJvcGFjayBsb2FkZXItZXZhbCBmYWlsdXJlcyBhcm91bmQgLi4vcGFja2FnZS5qc29uIHJlc29sdXRpb24uXG4gIGNvbnN0IHN3Y1BsdWdpblBhY2thZ2VKc29uUGF0aCA9IGpvaW4oZGlybmFtZShzd2NQbHVnaW5QYXRoKSwgJ3BhY2thZ2UuanNvbicpO1xuICBjb25zdCB3b3JrZmxvd0J1aWxkZXJzUGFja2FnZUpzb25QYXRoID0gam9pbihcbiAgICBkaXJuYW1lKHdvcmtmbG93QnVpbGRlcnNQYXRoKSxcbiAgICAnLi4vcGFja2FnZS5qc29uJ1xuICApO1xuXG4gIGNvbnN0IGZpbGVzID0gbmV3IFNldDxzdHJpbmc+KFtcbiAgICBfX2ZpbGVuYW1lLFxuICAgIHN3Y1BsdWdpblBhdGgsXG4gICAgc3djUGx1Z2luQnVpbGRIYXNoUGF0aCxcbiAgICB3b3JrZmxvd0J1aWxkZXJzUGF0aCxcbiAgXSk7XG4gIGFkZElmRXhpc3RzKGZpbGVzLCBzd2NQbHVnaW5QYWNrYWdlSnNvblBhdGgpO1xuICBhZGRJZkV4aXN0cyhmaWxlcywgd29ya2Zsb3dCdWlsZGVyc1BhY2thZ2VKc29uUGF0aCk7XG5cbiAgY2FjaGVkTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzID0ge1xuICAgIHN3Y1BsdWdpblBhdGgsXG4gICAgZmlsZXM6IEFycmF5LmZyb20oZmlsZXMpLFxuICB9O1xuICByZXR1cm4gY2FjaGVkTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzO1xufVxuXG5mdW5jdGlvbiByZWdpc3RlclRyYW5zZm9ybURlcGVuZGVuY2llcyhcbiAgbG9hZGVyQ29udGV4dDogV29ya2Zsb3dMb2FkZXJDb250ZXh0XG4pOiBzdHJpbmcge1xuICBjb25zdCBzdGF0aWNEZXBlbmRlbmNpZXMgPSByZXNvbHZlTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzKCk7XG4gIGZvciAoY29uc3QgZGVwZW5kZW5jeVBhdGggb2Ygc3RhdGljRGVwZW5kZW5jaWVzLmZpbGVzKSB7XG4gICAgcmVnaXN0ZXJGaWxlRGVwZW5kZW5jeShsb2FkZXJDb250ZXh0LCBkZXBlbmRlbmN5UGF0aCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGljRGVwZW5kZW5jaWVzLnN3Y1BsdWdpblBhdGg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEJ1aWxkZXJzTW9kdWxlKCk6IFByb21pc2U8XG4gIHR5cGVvZiBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpXG4+IHtcbiAgaWYgKGNhY2hlZEJ1aWxkZXJzTW9kdWxlKSB7XG4gICAgcmV0dXJuIGNhY2hlZEJ1aWxkZXJzTW9kdWxlO1xuICB9XG4gIC8vIER5bmFtaWMgaW1wb3J0IHRvIGhhbmRsZSBFU00gbW9kdWxlIGZyb20gQ29tbW9uSlMgY29udGV4dFxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zZWN1cml0eS9ub0dsb2JhbEV2YWw6IE5lZWQgdG8gdXNlIGV2YWwgaGVyZSB0byBhdm9pZCBUeXBlU2NyaXB0IGZyb20gdHJhbnNwaWxpbmcgdGhlIGltcG9ydCBzdGF0ZW1lbnQgaW50byBgcmVxdWlyZSgpYFxuICBjYWNoZWRCdWlsZGVyc01vZHVsZSA9IChhd2FpdCBldmFsKFxuICAgICdpbXBvcnQoXCJAd29ya2Zsb3cvYnVpbGRlcnNcIiknXG4gICkpIGFzIHR5cGVvZiBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpO1xuICByZXR1cm4gY2FjaGVkQnVpbGRlcnNNb2R1bGU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldERlY29yYXRvck9wdGlvbnMoXG4gIHdvcmtpbmdEaXI6IHN0cmluZ1xuKTogUHJvbWlzZTxEZWNvcmF0b3JPcHRpb25zV2l0aENvbmZpZ1BhdGg+IHtcbiAgY29uc3QgY2FjaGVkID0gZGVjb3JhdG9yT3B0aW9uc0NhY2hlLmdldCh3b3JraW5nRGlyKTtcbiAgaWYgKGNhY2hlZCkge1xuICAgIHJldHVybiBjYWNoZWQ7XG4gIH1cblxuICBjb25zdCBwcm9taXNlID0gKGFzeW5jICgpOiBQcm9taXNlPERlY29yYXRvck9wdGlvbnNXaXRoQ29uZmlnUGF0aD4gPT4ge1xuICAgIGNvbnN0IHsgZ2V0RGVjb3JhdG9yT3B0aW9uc0ZvckRpcmVjdG9yeVdpdGhDb25maWdQYXRoIH0gPVxuICAgICAgYXdhaXQgZ2V0QnVpbGRlcnNNb2R1bGUoKTtcbiAgICByZXR1cm4gZ2V0RGVjb3JhdG9yT3B0aW9uc0ZvckRpcmVjdG9yeVdpdGhDb25maWdQYXRoKHdvcmtpbmdEaXIpO1xuICB9KSgpO1xuXG4gIGRlY29yYXRvck9wdGlvbnNDYWNoZS5zZXQod29ya2luZ0RpciwgcHJvbWlzZSk7XG4gIHJldHVybiBwcm9taXNlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkZXRlY3RQYXR0ZXJucyhzb3VyY2U6IHN0cmluZyk6IFByb21pc2U8V29ya2Zsb3dQYXR0ZXJuTWF0Y2g+IHtcbiAgY29uc3QgeyBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zIH0gPSBhd2FpdCBnZXRCdWlsZGVyc01vZHVsZSgpO1xuICByZXR1cm4gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyhzb3VyY2UpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjaGVja0dlbmVyYXRlZEZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB7IGlzR2VuZXJhdGVkV29ya2Zsb3dGaWxlIH0gPSBhd2FpdCBnZXRCdWlsZGVyc01vZHVsZSgpO1xuICByZXR1cm4gaXNHZW5lcmF0ZWRXb3JrZmxvd0ZpbGUoZmlsZVBhdGgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjaGVja1Nob3VsZFRyYW5zZm9ybShcbiAgZmlsZVBhdGg6IHN0cmluZyxcbiAgcGF0dGVybnM6IFdvcmtmbG93UGF0dGVybk1hdGNoXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgeyBzaG91bGRUcmFuc2Zvcm1GaWxlIH0gPSBhd2FpdCBnZXRCdWlsZGVyc01vZHVsZSgpO1xuICByZXR1cm4gc2hvdWxkVHJhbnNmb3JtRmlsZShmaWxlUGF0aCwgcGF0dGVybnMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRNb2R1bGVTcGVjaWZpZXIoXG4gIGZpbGVQYXRoOiBzdHJpbmcsXG4gIHByb2plY3RSb290OiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHsgcmVzb2x2ZU1vZHVsZVNwZWNpZmllciB9ID0gYXdhaXQgZ2V0QnVpbGRlcnNNb2R1bGUoKTtcbiAgcmV0dXJuIHJlc29sdmVNb2R1bGVTcGVjaWZpZXIoZmlsZVBhdGgsIHByb2plY3RSb290KS5tb2R1bGVTcGVjaWZpZXI7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVXb3JrZmxvd0FsaWFzUGF0aChcbiAgZmlsZVBhdGg6IHN0cmluZyxcbiAgd29ya2luZ0Rpcjogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB7IHJlc29sdmVXb3JrZmxvd0FsaWFzUmVsYXRpdmVQYXRoIH0gPSBhd2FpdCBnZXRCdWlsZGVyc01vZHVsZSgpO1xuICByZXR1cm4gcmVzb2x2ZVdvcmtmbG93QWxpYXNSZWxhdGl2ZVBhdGgoZmlsZVBhdGgsIHdvcmtpbmdEaXIpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZWxhdGl2ZUZpbGVuYW1lRm9yU3djKFxuICBmaWxlbmFtZTogc3RyaW5nLFxuICB3b3JraW5nRGlyOiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRXb3JraW5nRGlyID0gd29ya2luZ0RpclxuICAgIC5yZXBsYWNlKC9cXFxcL2csICcvJylcbiAgICAucmVwbGFjZSgvXFwvJC8sICcnKTtcbiAgY29uc3Qgbm9ybWFsaXplZEZpbGVwYXRoID0gZmlsZW5hbWUucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuXG4gIC8vIFdpbmRvd3MgZml4OiBVc2UgY2FzZS1pbnNlbnNpdGl2ZSBjb21wYXJpc29uIHRvIHdvcmsgYXJvdW5kIGRyaXZlIGxldHRlciBjYXNpbmcgaXNzdWVzXG4gIGNvbnN0IGxvd2VyV2QgPSBub3JtYWxpemVkV29ya2luZ0Rpci50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBsb3dlclBhdGggPSBub3JtYWxpemVkRmlsZXBhdGgudG9Mb3dlckNhc2UoKTtcblxuICBsZXQgcmVsYXRpdmVGaWxlbmFtZTogc3RyaW5nO1xuICBpZiAobG93ZXJQYXRoLnN0YXJ0c1dpdGgoYCR7bG93ZXJXZH0vYCkpIHtcbiAgICAvLyBGaWxlIGlzIHVuZGVyIHdvcmtpbmcgZGlyZWN0b3J5IC0gbWFudWFsbHkgY2FsY3VsYXRlIHJlbGF0aXZlIHBhdGhcbiAgICByZWxhdGl2ZUZpbGVuYW1lID0gbm9ybWFsaXplZEZpbGVwYXRoLnN1YnN0cmluZyhcbiAgICAgIG5vcm1hbGl6ZWRXb3JraW5nRGlyLmxlbmd0aCArIDFcbiAgICApO1xuICB9IGVsc2UgaWYgKGxvd2VyUGF0aCA9PT0gbG93ZXJXZCkge1xuICAgIC8vIEZpbGUgSVMgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IChzaG91bGRuJ3QgaGFwcGVuKVxuICAgIHJlbGF0aXZlRmlsZW5hbWUgPSAnLic7XG4gIH0gZWxzZSB7XG4gICAgLy8gVXNlIHJlbGF0aXZlKCkgZm9yIGZpbGVzIG91dHNpZGUgd29ya2luZyBkaXJlY3RvcnlcbiAgICByZWxhdGl2ZUZpbGVuYW1lID0gcmVsYXRpdmUod29ya2luZ0RpciwgZmlsZW5hbWUpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcblxuICAgIGlmIChyZWxhdGl2ZUZpbGVuYW1lLnN0YXJ0c1dpdGgoJy4uLycpKSB7XG4gICAgICBjb25zdCBhbGlhc2VkUmVsYXRpdmVQYXRoID0gYXdhaXQgcmVzb2x2ZVdvcmtmbG93QWxpYXNQYXRoKFxuICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgd29ya2luZ0RpclxuICAgICAgKTtcbiAgICAgIGlmIChhbGlhc2VkUmVsYXRpdmVQYXRoKSB7XG4gICAgICAgIHJlbGF0aXZlRmlsZW5hbWUgPSBhbGlhc2VkUmVsYXRpdmVQYXRoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVsYXRpdmVGaWxlbmFtZSA9IHJlbGF0aXZlRmlsZW5hbWVcbiAgICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAgIC5maWx0ZXIoKHBhcnQpID0+IHBhcnQgIT09ICcuLicpXG4gICAgICAgICAgLmpvaW4oJy8nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBGaW5hbCBzYWZldHkgY2hlY2sgLSBlbnN1cmUgd2UgbmV2ZXIgcGFzcyBhbiBhYnNvbHV0ZSBwYXRoIHRvIFNXQ1xuICBpZiAocmVsYXRpdmVGaWxlbmFtZS5pbmNsdWRlcygnOicpIHx8IHJlbGF0aXZlRmlsZW5hbWUuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgLy8gVGhpcyBzaG91bGQgcmFyZWx5IGhhcHBlbiwgYnV0IHVzZSBmaWxlbmFtZSBzcGxpdCBhcyBsYXN0IHJlc29ydFxuICAgIHJlbGF0aXZlRmlsZW5hbWUgPSBub3JtYWxpemVkRmlsZXBhdGguc3BsaXQoJy8nKS5wb3AoKSB8fCAndW5rbm93bi50cyc7XG4gIH1cblxuICByZXR1cm4gcmVsYXRpdmVGaWxlbmFtZTtcbn1cblxuLy8gVGhpcyBsb2FkZXIgYXBwbGllcyB0aGUgXCJ1c2Ugd29ya2Zsb3dcIi9cInVzZSBzdGVwXCIgdHJhbnNmb3JtLlxuLy8gQWxsIGZpbGVzIHVzZSBzdGVwIG1vZGU7IHRoZSBTV0MgcGx1Z2luIGRlY2lkZXMgcGVyLWZ1bmN0aW9uIHdoZXRoZXJcbi8vIHRvIGVtaXQgd29ya2Zsb3cgb3Igc3RlcCBiaW5kaW5ncyBiYXNlZCBvbiB0aGUgc291cmNlJ3MgZGlyZWN0aXZlcy5cbnR5cGUgV29ya2Zsb3dMb2FkZXJDb250ZXh0ID0ge1xuICByZXNvdXJjZVBhdGg6IHN0cmluZztcbiAgYXN5bmM/OiAoKSA9PiAoXG4gICAgZXJyb3I6IEVycm9yIHwgbnVsbCxcbiAgICBjb250ZW50Pzogc3RyaW5nLFxuICAgIHNvdXJjZU1hcD86IGFueVxuICApID0+IHZvaWQ7XG4gIGFkZERlcGVuZGVuY3k/OiAoZGVwZW5kZW5jeTogc3RyaW5nKSA9PiB2b2lkO1xuICBhZGRCdWlsZERlcGVuZGVuY3k/OiAoZGVwZW5kZW5jeTogc3RyaW5nKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gd29ya2Zsb3dMb2FkZXIoXG4gIHRoaXM6IFdvcmtmbG93TG9hZGVyQ29udGV4dCxcbiAgc291cmNlOiBzdHJpbmcgfCBCdWZmZXIsXG4gIHNvdXJjZU1hcDogYW55XG4pOiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4gfCB2b2lkIHtcbiAgY29uc3QgY2FsbGJhY2sgPSB0aGlzLmFzeW5jPy4oKTtcbiAgY29uc3QgcnVuID0gYXN5bmMgKCk6IFByb21pc2U8eyBjb2RlOiBzdHJpbmc7IG1hcDogYW55IH0+ID0+IHtcbiAgICBjb25zdCBmaWxlbmFtZSA9IHRoaXMucmVzb3VyY2VQYXRoO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRTb3VyY2UgPSBzb3VyY2UudG9TdHJpbmcoKTtcbiAgICBjb25zdCB3b3JraW5nRGlyID0gcHJvY2Vzcy5jd2QoKTtcbiAgICBjb25zdCBzd2NQbHVnaW5QYXRoID0gcmVnaXN0ZXJUcmFuc2Zvcm1EZXBlbmRlbmNpZXModGhpcyk7XG4gICAgY29uc3Qgc291cmNlRm9yVHJhbnNmb3JtID0gbm9ybWFsaXplZFNvdXJjZTtcblxuICAgIGNvbnN0IGlzR2VuZXJhdGVkV29ya2Zsb3dGaWxlID0gYXdhaXQgY2hlY2tHZW5lcmF0ZWRGaWxlKGZpbGVuYW1lKTtcbiAgICAvLyBTa2lwIGdlbmVyYXRlZCB3b3JrZmxvdyByb3V0ZSBmaWxlcyB0byBhdm9pZCByZS1wcm9jZXNzaW5nIHRoZW0uXG4gICAgaWYgKGlzR2VuZXJhdGVkV29ya2Zsb3dGaWxlKSB7XG4gICAgICByZXR1cm4geyBjb2RlOiBub3JtYWxpemVkU291cmNlLCBtYXA6IHNvdXJjZU1hcCB9O1xuICAgIH1cblxuICAgIC8vIERldGVjdCB3b3JrZmxvdyBwYXR0ZXJucyBpbiB0aGUgc291cmNlIGNvZGUuXG4gICAgY29uc3QgcGF0dGVybnMgPSBhd2FpdCBkZXRlY3RQYXR0ZXJucyhzb3VyY2VGb3JUcmFuc2Zvcm0pO1xuXG4gICAgLy8gQ2hlY2sgaWYgZmlsZSBuZWVkcyB0cmFuc2Zvcm1hdGlvbiBiYXNlZCBvbiBwYXR0ZXJucyBhbmQgcGF0aFxuICAgIGlmICghKGF3YWl0IGNoZWNrU2hvdWxkVHJhbnNmb3JtKGZpbGVuYW1lLCBwYXR0ZXJucykpKSB7XG4gICAgICByZXR1cm4geyBjb2RlOiBub3JtYWxpemVkU291cmNlLCBtYXA6IHNvdXJjZU1hcCB9O1xuICAgIH1cblxuICAgIGNvbnN0IGlzVHlwZVNjcmlwdCA9XG4gICAgICBmaWxlbmFtZS5lbmRzV2l0aCgnLnRzJykgfHxcbiAgICAgIGZpbGVuYW1lLmVuZHNXaXRoKCcudHN4JykgfHxcbiAgICAgIGZpbGVuYW1lLmVuZHNXaXRoKCcubXRzJykgfHxcbiAgICAgIGZpbGVuYW1lLmVuZHNXaXRoKCcuY3RzJyk7XG5cbiAgICAvLyBDYWxjdWxhdGUgcmVsYXRpdmUgZmlsZW5hbWUgZm9yIFNXQyBwbHVnaW5cbiAgICAvLyBUaGUgU1dDIHBsdWdpbiB1c2VzIGZpbGVuYW1lIHRvIGdlbmVyYXRlIHdvcmtmbG93SWQsIHNvIGl0IG11c3QgYmUgcmVsYXRpdmVcbiAgICBjb25zdCByZWxhdGl2ZUZpbGVuYW1lID0gYXdhaXQgZ2V0UmVsYXRpdmVGaWxlbmFtZUZvclN3YyhcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgd29ya2luZ0RpclxuICAgICk7XG5cbiAgICAvLyBHZXQgZGVjb3JhdG9yIG9wdGlvbnMgZnJvbSB0c2NvbmZpZyAoY2FjaGVkIHBlciB3b3JraW5nIGRpcmVjdG9yeSlcbiAgICBjb25zdCB7IG9wdGlvbnM6IGRlY29yYXRvck9wdGlvbnMsIGNvbmZpZ1BhdGggfSA9XG4gICAgICBhd2FpdCBnZXREZWNvcmF0b3JPcHRpb25zKHdvcmtpbmdEaXIpO1xuICAgIGlmIChjb25maWdQYXRoKSB7XG4gICAgICByZWdpc3RlckZpbGVEZXBlbmRlbmN5KHRoaXMsIGNvbmZpZ1BhdGgpO1xuICAgIH1cblxuICAgIC8vIFJlc29sdmUgbW9kdWxlIHNwZWNpZmllciBmb3IgcGFja2FnZXMgKG5vZGVfbW9kdWxlcyBvciB3b3Jrc3BhY2UgcGFja2FnZXMpXG4gICAgY29uc3QgbW9kdWxlU3BlY2lmaWVyID0gYXdhaXQgZ2V0TW9kdWxlU3BlY2lmaWVyKGZpbGVuYW1lLCB3b3JraW5nRGlyKTtcbiAgICBjb25zdCBtb2RlID0gJ3N0ZXAnO1xuXG4gICAgLy8gVHJhbnNmb3JtIHdpdGggU1dDXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdHJhbnNmb3JtKHNvdXJjZUZvclRyYW5zZm9ybSwge1xuICAgICAgZmlsZW5hbWU6IHJlbGF0aXZlRmlsZW5hbWUsXG4gICAgICBqc2M6IHtcbiAgICAgICAgcGFyc2VyOiB7XG4gICAgICAgICAgLi4uKGlzVHlwZVNjcmlwdFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgc3ludGF4OiAndHlwZXNjcmlwdCcsXG4gICAgICAgICAgICAgICAgdHN4OiBmaWxlbmFtZS5lbmRzV2l0aCgnLnRzeCcpLFxuICAgICAgICAgICAgICAgIGRlY29yYXRvcnM6IGRlY29yYXRvck9wdGlvbnMuZGVjb3JhdG9ycyxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgc3ludGF4OiAnZWNtYXNjcmlwdCcsXG4gICAgICAgICAgICAgICAganN4OiBmaWxlbmFtZS5lbmRzV2l0aCgnLmpzeCcpLFxuICAgICAgICAgICAgICAgIGRlY29yYXRvcnM6IGRlY29yYXRvck9wdGlvbnMuZGVjb3JhdG9ycyxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICAgIHRhcmdldDogJ2VzMjAyMicsXG4gICAgICAgIGV4cGVyaW1lbnRhbDoge1xuICAgICAgICAgIHBsdWdpbnM6IFtbc3djUGx1Z2luUGF0aCwgeyBtb2RlLCBtb2R1bGVTcGVjaWZpZXIgfV1dLFxuICAgICAgICB9LFxuICAgICAgICB0cmFuc2Zvcm06IHtcbiAgICAgICAgICByZWFjdDoge1xuICAgICAgICAgICAgcnVudGltZTogJ3ByZXNlcnZlJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGxlZ2FjeURlY29yYXRvcjogZGVjb3JhdG9yT3B0aW9ucy5sZWdhY3lEZWNvcmF0b3IsXG4gICAgICAgICAgZGVjb3JhdG9yTWV0YWRhdGE6IGRlY29yYXRvck9wdGlvbnMuZGVjb3JhdG9yTWV0YWRhdGEsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgbWluaWZ5OiBmYWxzZSxcbiAgICAgIGlucHV0U291cmNlTWFwOiBzb3VyY2VNYXAsXG4gICAgICBzb3VyY2VNYXBzOiB0cnVlLFxuICAgICAgaW5saW5lU291cmNlc0NvbnRlbnQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICBsZXQgdHJhbnNmb3JtZWRNYXAgPSBzb3VyY2VNYXA7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQubWFwID09PSAnc3RyaW5nJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdHJhbnNmb3JtZWRNYXAgPSBKU09OLnBhcnNlKHJlc3VsdC5tYXApO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRyYW5zZm9ybWVkTWFwID0gcmVzdWx0Lm1hcDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJlc3VsdC5tYXApIHtcbiAgICAgIHRyYW5zZm9ybWVkTWFwID0gcmVzdWx0Lm1hcDtcbiAgICB9XG5cbiAgICByZXR1cm4geyBjb2RlOiByZXN1bHQuY29kZSwgbWFwOiB0cmFuc2Zvcm1lZE1hcCB9O1xuICB9O1xuXG4gIGlmICghY2FsbGJhY2spIHtcbiAgICByZXR1cm4gcnVuKCkudGhlbigocmVzdWx0KSA9PiByZXN1bHQuY29kZSk7XG4gIH1cblxuICB2b2lkIHJ1bigpXG4gICAgLnRoZW4oKHJlc3VsdCkgPT4gY2FsbGJhY2sobnVsbCwgcmVzdWx0LmNvZGUsIHJlc3VsdC5tYXApKVxuICAgIC5jYXRjaCgoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgIGNhbGxiYWNrKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKSk7XG4gICAgfSk7XG59XG4iXX0=
226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQW9OQSxpQ0E4R0M7QUFsVUQscUNBQXFDO0FBQ3JDLHlDQUFvRDtBQUNwRCxvQ0FBc0M7QUFNdEMseUZBQXlGO0FBQ3pGLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxHQUFHLEVBR2xDLENBQUM7QUFDSix5R0FBeUc7QUFDekcsSUFBSSxvQkFBb0IsR0FBK0MsSUFBSSxDQUFDO0FBSzVFLElBQUksOEJBQThCLEdBQW9DLElBQUksQ0FBQztBQUUzRSxTQUFTLHNCQUFzQixDQUM3QixhQUFvQyxFQUNwQyxjQUFzQjtJQUV0QixhQUFhLENBQUMsYUFBYSxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDOUMsYUFBYSxDQUFDLGtCQUFrQixFQUFFLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDckQsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEtBQWtCLEVBQUUsY0FBc0I7SUFDN0QsSUFBSSxJQUFBLG9CQUFVLEVBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztRQUMvQixLQUFLLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzVCLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUywrQkFBK0I7SUFDdEMsSUFBSSw4QkFBOEIsRUFBRSxDQUFDO1FBQ25DLE9BQU8sOEJBQThCLENBQUM7SUFDeEMsQ0FBQztJQUVELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUM5RCxNQUFNLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQzVDLHNDQUFzQyxDQUN2QyxDQUFDO0lBQ0YsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFFbkUsK0RBQStEO0lBQy9ELG9FQUFvRTtJQUNwRSxNQUFNLHdCQUF3QixHQUFHLElBQUEsZ0JB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Y2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luLCByZWxhdGl2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyB0cmFuc2Zvcm0gfSBmcm9tICdAc3djL2NvcmUnO1xuXG50eXBlIERlY29yYXRvck9wdGlvbnNXaXRoQ29uZmlnUGF0aCA9XG4gIGltcG9ydCgnQHdvcmtmbG93L2J1aWxkZXJzJykuRGVjb3JhdG9yT3B0aW9uc1dpdGhDb25maWdQYXRoO1xudHlwZSBXb3JrZmxvd1BhdHRlcm5NYXRjaCA9IGltcG9ydCgnQHdvcmtmbG93L2J1aWxkZXJzJykuV29ya2Zsb3dQYXR0ZXJuTWF0Y2g7XG5cbi8vIENhY2hlIGRlY29yYXRvciBvcHRpb25zIHBlciB3b3JraW5nIGRpcmVjdG9yeSB0byBhdm9pZCByZWFkaW5nIHRzY29uZmlnIGZvciBldmVyeSBmaWxlXG5jb25zdCBkZWNvcmF0b3JPcHRpb25zQ2FjaGUgPSBuZXcgTWFwPFxuICBzdHJpbmcsXG4gIFByb21pc2U8RGVjb3JhdG9yT3B0aW9uc1dpdGhDb25maWdQYXRoPlxuPigpO1xuLy8gQ2FjaGUgZm9yIHNoYXJlZCB1dGlsaXRpZXMgZnJvbSBAd29ya2Zsb3cvYnVpbGRlcnMgKEVTTSBtb2R1bGUgbG9hZGVkIGR5bmFtaWNhbGx5IGluIENvbW1vbkpTIGNvbnRleHQpXG5sZXQgY2FjaGVkQnVpbGRlcnNNb2R1bGU6IHR5cGVvZiBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpIHwgbnVsbCA9IG51bGw7XG50eXBlIExvYWRlclN0YXRpY0RlcGVuZGVuY2llcyA9IHtcbiAgc3djUGx1Z2luUGF0aDogc3RyaW5nO1xuICBmaWxlczogc3RyaW5nW107XG59O1xubGV0IGNhY2hlZExvYWRlclN0YXRpY0RlcGVuZGVuY2llczogTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzIHwgbnVsbCA9IG51bGw7XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRmlsZURlcGVuZGVuY3koXG4gIGxvYWRlckNvbnRleHQ6IFdvcmtmbG93TG9hZGVyQ29udGV4dCxcbiAgZGVwZW5kZW5jeVBhdGg6IHN0cmluZ1xuKTogdm9pZCB7XG4gIGxvYWRlckNvbnRleHQuYWRkRGVwZW5kZW5jeT8uKGRlcGVuZGVuY3lQYXRoKTtcbiAgbG9hZGVyQ29udGV4dC5hZGRCdWlsZERlcGVuZGVuY3k/LihkZXBlbmRlbmN5UGF0aCk7XG59XG5cbmZ1bmN0aW9uIGFkZElmRXhpc3RzKGZpbGVzOiBTZXQ8c3RyaW5nPiwgZGVwZW5kZW5jeVBhdGg6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoZXhpc3RzU3luYyhkZXBlbmRlbmN5UGF0aCkpIHtcbiAgICBmaWxlcy5hZGQoZGVwZW5kZW5jeVBhdGgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXMoKTogTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzIHtcbiAgaWYgKGNhY2hlZExvYWRlclN0YXRpY0RlcGVuZGVuY2llcykge1xuICAgIHJldHVybiBjYWNoZWRMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXM7XG4gIH1cblxuICBjb25zdCBzd2NQbHVnaW5QYXRoID0gcmVxdWlyZS5yZXNvbHZlKCdAd29ya2Zsb3cvc3djLXBsdWdpbicpO1xuICBjb25zdCBzd2NQbHVnaW5CdWlsZEhhc2hQYXRoID0gcmVxdWlyZS5yZXNvbHZlKFxuICAgICdAd29ya2Zsb3cvc3djLXBsdWdpbi9idWlsZC1oYXNoLmpzb24nXG4gICk7XG4gIGNvbnN0IHdvcmtmbG93QnVpbGRlcnNQYXRoID0gcmVxdWlyZS5yZXNvbHZlKCdAd29ya2Zsb3cvYnVpbGRlcnMnKTtcblxuICAvLyBEZXJpdmUgcGFja2FnZS5qc29uIHBhdGhzIGZyb20gcmVzb2x2ZWQgZW50cnlwb2ludHMgdG8gYXZvaWRcbiAgLy8gVHVyYm9wYWNrIGxvYWRlci1ldmFsIGZhaWx1cmVzIGFyb3VuZCAuLi9wYWNrYWdlLmpzb24gcmVzb2x1dGlvbi5cbiAgY29uc3Qgc3djUGx1Z2luUGFja2FnZUpzb25QYXRoID0gam9pbihkaXJuYW1lKHN3Y1BsdWdpblBhdGgpLCAncGFja2FnZS5qc29uJyk7XG4gIGNvbnN0IHdvcmtmbG93QnVpbGRlcnNQYWNrYWdlSnNvblBhdGggPSBqb2luKFxuICAgIGRpcm5hbWUod29ya2Zsb3dCdWlsZGVyc1BhdGgpLFxuICAgICcuLi9wYWNrYWdlLmpzb24nXG4gICk7XG5cbiAgY29uc3QgZmlsZXMgPSBuZXcgU2V0PHN0cmluZz4oW1xuICAgIF9fZmlsZW5hbWUsXG4gICAgc3djUGx1Z2luUGF0aCxcbiAgICBzd2NQbHVnaW5CdWlsZEhhc2hQYXRoLFxuICAgIHdvcmtmbG93QnVpbGRlcnNQYXRoLFxuICBdKTtcbiAgYWRkSWZFeGlzdHMoZmlsZXMsIHN3Y1BsdWdpblBhY2thZ2VKc29uUGF0aCk7XG4gIGFkZElmRXhpc3RzKGZpbGVzLCB3b3JrZmxvd0J1aWxkZXJzUGFja2FnZUpzb25QYXRoKTtcblxuICBjYWNoZWRMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXMgPSB7XG4gICAgc3djUGx1Z2luUGF0aCxcbiAgICBmaWxlczogQXJyYXkuZnJvbShmaWxlcyksXG4gIH07XG4gIHJldHVybiBjYWNoZWRMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXM7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyVHJhbnNmb3JtRGVwZW5kZW5jaWVzKFxuICBsb2FkZXJDb250ZXh0OiBXb3JrZmxvd0xvYWRlckNvbnRleHRcbik6IHN0cmluZyB7XG4gIGNvbnN0IHN0YXRpY0RlcGVuZGVuY2llcyA9IHJlc29sdmVMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXMoKTtcbiAgZm9yIChjb25zdCBkZXBlbmRlbmN5UGF0aCBvZiBzdGF0aWNEZXBlbmRlbmNpZXMuZmlsZXMpIHtcbiAgICByZWdpc3RlckZpbGVEZXBlbmRlbmN5KGxvYWRlckNvbnRleHQsIGRlcGVuZGVuY3lQYXRoKTtcbiAgfVxuXG4gIHJldHVybiBzdGF0aWNEZXBlbmRlbmNpZXMuc3djUGx1Z2luUGF0aDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0QnVpbGRlcnNNb2R1bGUoKTogUHJvbWlzZTxcbiAgdHlwZW9mIGltcG9ydCgnQHdvcmtmbG93L2J1aWxkZXJzJylcbj4ge1xuICBpZiAoY2FjaGVkQnVpbGRlcnNNb2R1bGUpIHtcbiAgICByZXR1cm4gY2FjaGVkQnVpbGRlcnNNb2R1bGU7XG4gIH1cbiAgLy8gRHluYW1pYyBpbXBvcnQgdG8gaGFuZGxlIEVTTSBtb2R1bGUgZnJvbSBDb21tb25KUyBjb250ZXh0XG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3NlY3VyaXR5L25vR2xvYmFsRXZhbDogTmVlZCB0byB1c2UgZXZhbCBoZXJlIHRvIGF2b2lkIFR5cGVTY3JpcHQgZnJvbSB0cmFuc3BpbGluZyB0aGUgaW1wb3J0IHN0YXRlbWVudCBpbnRvIGByZXF1aXJlKClgXG4gIGNhY2hlZEJ1aWxkZXJzTW9kdWxlID0gKGF3YWl0IGV2YWwoXG4gICAgJ2ltcG9ydChcIkB3b3JrZmxvdy9idWlsZGVyc1wiKSdcbiAgKSkgYXMgdHlwZW9mIGltcG9ydCgnQHdvcmtmbG93L2J1aWxkZXJzJyk7XG4gIHJldHVybiBjYWNoZWRCdWlsZGVyc01vZHVsZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0RGVjb3JhdG9yT3B0aW9ucyhcbiAgd29ya2luZ0Rpcjogc3RyaW5nXG4pOiBQcm9taXNlPERlY29yYXRvck9wdGlvbnNXaXRoQ29uZmlnUGF0aD4ge1xuICBjb25zdCBjYWNoZWQgPSBkZWNvcmF0b3JPcHRpb25zQ2FjaGUuZ2V0KHdvcmtpbmdEaXIpO1xuICBpZiAoY2FjaGVkKSB7XG4gICAgcmV0dXJuIGNhY2hlZDtcbiAgfVxuXG4gIGNvbnN0IHByb21pc2UgPSAoYXN5bmMgKCk6IFByb21pc2U8RGVjb3JhdG9yT3B0aW9uc1dpdGhDb25maWdQYXRoPiA9PiB7XG4gICAgY29uc3QgeyBnZXREZWNvcmF0b3JPcHRpb25zRm9yRGlyZWN0b3J5V2l0aENvbmZpZ1BhdGggfSA9XG4gICAgICBhd2FpdCBnZXRCdWlsZGVyc01vZHVsZSgpO1xuICAgIHJldHVybiBnZXREZWNvcmF0b3JPcHRpb25zRm9yRGlyZWN0b3J5V2l0aENvbmZpZ1BhdGgod29ya2luZ0Rpcik7XG4gIH0pKCk7XG5cbiAgZGVjb3JhdG9yT3B0aW9uc0NhY2hlLnNldCh3b3JraW5nRGlyLCBwcm9taXNlKTtcbiAgcmV0dXJuIHByb21pc2U7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRldGVjdFBhdHRlcm5zKHNvdXJjZTogc3RyaW5nKTogUHJvbWlzZTxXb3JrZmxvd1BhdHRlcm5NYXRjaD4ge1xuICBjb25zdCB7IGRldGVjdFdvcmtmbG93UGF0dGVybnMgfSA9IGF3YWl0IGdldEJ1aWxkZXJzTW9kdWxlKCk7XG4gIHJldHVybiBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zKHNvdXJjZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNoZWNrR2VuZXJhdGVkRmlsZShmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHsgaXNHZW5lcmF0ZWRXb3JrZmxvd0ZpbGUgfSA9IGF3YWl0IGdldEJ1aWxkZXJzTW9kdWxlKCk7XG4gIHJldHVybiBpc0dlbmVyYXRlZFdvcmtmbG93RmlsZShmaWxlUGF0aCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNoZWNrU2hvdWxkVHJhbnNmb3JtKFxuICBmaWxlUGF0aDogc3RyaW5nLFxuICBwYXR0ZXJuczogV29ya2Zsb3dQYXR0ZXJuTWF0Y2hcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB7IHNob3VsZFRyYW5zZm9ybUZpbGUgfSA9IGF3YWl0IGdldEJ1aWxkZXJzTW9kdWxlKCk7XG4gIHJldHVybiBzaG91bGRUcmFuc2Zvcm1GaWxlKGZpbGVQYXRoLCBwYXR0ZXJucyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldE1vZHVsZVNwZWNpZmllcihcbiAgZmlsZVBhdGg6IHN0cmluZyxcbiAgcHJvamVjdFJvb3Q6IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgeyByZXNvbHZlTW9kdWxlU3BlY2lmaWVyIH0gPSBhd2FpdCBnZXRCdWlsZGVyc01vZHVsZSgpO1xuICByZXR1cm4gcmVzb2x2ZU1vZHVsZVNwZWNpZmllcihmaWxlUGF0aCwgcHJvamVjdFJvb3QpLm1vZHVsZVNwZWNpZmllcjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVdvcmtmbG93QWxpYXNQYXRoKFxuICBmaWxlUGF0aDogc3RyaW5nLFxuICB3b3JraW5nRGlyOiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHsgcmVzb2x2ZVdvcmtmbG93QWxpYXNSZWxhdGl2ZVBhdGggfSA9IGF3YWl0IGdldEJ1aWxkZXJzTW9kdWxlKCk7XG4gIHJldHVybiByZXNvbHZlV29ya2Zsb3dBbGlhc1JlbGF0aXZlUGF0aChmaWxlUGF0aCwgd29ya2luZ0Rpcik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlbGF0aXZlRmlsZW5hbWVGb3JTd2MoXG4gIGZpbGVuYW1lOiBzdHJpbmcsXG4gIHdvcmtpbmdEaXI6IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qgbm9ybWFsaXplZFdvcmtpbmdEaXIgPSB3b3JraW5nRGlyXG4gICAgLnJlcGxhY2UoL1xcXFwvZywgJy8nKVxuICAgIC5yZXBsYWNlKC9cXC8kLywgJycpO1xuICBjb25zdCBub3JtYWxpemVkRmlsZXBhdGggPSBmaWxlbmFtZS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG5cbiAgLy8gV2luZG93cyBmaXg6IFVzZSBjYXNlLWluc2Vuc2l0aXZlIGNvbXBhcmlzb24gdG8gd29yayBhcm91bmQgZHJpdmUgbGV0dGVyIGNhc2luZyBpc3N1ZXNcbiAgY29uc3QgbG93ZXJXZCA9IG5vcm1hbGl6ZWRXb3JraW5nRGlyLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGxvd2VyUGF0aCA9IG5vcm1hbGl6ZWRGaWxlcGF0aC50b0xvd2VyQ2FzZSgpO1xuXG4gIGxldCByZWxhdGl2ZUZpbGVuYW1lOiBzdHJpbmc7XG4gIGlmIChsb3dlclBhdGguc3RhcnRzV2l0aChgJHtsb3dlcldkfS9gKSkge1xuICAgIC8vIEZpbGUgaXMgdW5kZXIgd29ya2luZyBkaXJlY3RvcnkgLSBtYW51YWxseSBjYWxjdWxhdGUgcmVsYXRpdmUgcGF0aFxuICAgIHJlbGF0aXZlRmlsZW5hbWUgPSBub3JtYWxpemVkRmlsZXBhdGguc3Vic3RyaW5nKFxuICAgICAgbm9ybWFsaXplZFdvcmtpbmdEaXIubGVuZ3RoICsgMVxuICAgICk7XG4gIH0gZWxzZSBpZiAobG93ZXJQYXRoID09PSBsb3dlcldkKSB7XG4gICAgLy8gRmlsZSBJUyB0aGUgd29ya2luZyBkaXJlY3RvcnkgKHNob3VsZG4ndCBoYXBwZW4pXG4gICAgcmVsYXRpdmVGaWxlbmFtZSA9ICcuJztcbiAgfSBlbHNlIHtcbiAgICAvLyBVc2UgcmVsYXRpdmUoKSBmb3IgZmlsZXMgb3V0c2lkZSB3b3JraW5nIGRpcmVjdG9yeVxuICAgIHJlbGF0aXZlRmlsZW5hbWUgPSByZWxhdGl2ZSh3b3JraW5nRGlyLCBmaWxlbmFtZSkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuXG4gICAgaWYgKHJlbGF0aXZlRmlsZW5hbWUuc3RhcnRzV2l0aCgnLi4vJykpIHtcbiAgICAgIGNvbnN0IGFsaWFzZWRSZWxhdGl2ZVBhdGggPSBhd2FpdCByZXNvbHZlV29ya2Zsb3dBbGlhc1BhdGgoXG4gICAgICAgIGZpbGVuYW1lLFxuICAgICAgICB3b3JraW5nRGlyXG4gICAgICApO1xuICAgICAgaWYgKGFsaWFzZWRSZWxhdGl2ZVBhdGgpIHtcbiAgICAgICAgcmVsYXRpdmVGaWxlbmFtZSA9IGFsaWFzZWRSZWxhdGl2ZVBhdGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWxhdGl2ZUZpbGVuYW1lID0gcmVsYXRpdmVGaWxlbmFtZVxuICAgICAgICAgIC5zcGxpdCgnLycpXG4gICAgICAgICAgLmZpbHRlcigocGFydCkgPT4gcGFydCAhPT0gJy4uJylcbiAgICAgICAgICAuam9pbignLycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEZpbmFsIHNhZmV0eSBjaGVjayAtIGVuc3VyZSB3ZSBuZXZlciBwYXNzIGFuIGFic29sdXRlIHBhdGggdG8gU1dDXG4gIGlmIChyZWxhdGl2ZUZpbGVuYW1lLmluY2x1ZGVzKCc6JykgfHwgcmVsYXRpdmVGaWxlbmFtZS5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAvLyBUaGlzIHNob3VsZCByYXJlbHkgaGFwcGVuLCBidXQgdXNlIGZpbGVuYW1lIHNwbGl0IGFzIGxhc3QgcmVzb3J0XG4gICAgcmVsYXRpdmVGaWxlbmFtZSA9IG5vcm1hbGl6ZWRGaWxlcGF0aC5zcGxpdCgnLycpLnBvcCgpIHx8ICd1bmtub3duLnRzJztcbiAgfVxuXG4gIHJldHVybiByZWxhdGl2ZUZpbGVuYW1lO1xufVxuXG4vLyBUaGlzIGxvYWRlciBhcHBsaWVzIHRoZSBcInVzZSB3b3JrZmxvd1wiL1widXNlIHN0ZXBcIiB0cmFuc2Zvcm0uXG4vLyBBbGwgZmlsZXMgdXNlIHN0ZXAgbW9kZTsgdGhlIFNXQyBwbHVnaW4gZGVjaWRlcyBwZXItZnVuY3Rpb24gd2hldGhlclxuLy8gdG8gZW1pdCB3b3JrZmxvdyBvciBzdGVwIGJpbmRpbmdzIGJhc2VkIG9uIHRoZSBzb3VyY2UncyBkaXJlY3RpdmVzLlxudHlwZSBXb3JrZmxvd0xvYWRlckNvbnRleHQgPSB7XG4gIHJlc291cmNlUGF0aDogc3RyaW5nO1xuICBhc3luYz86ICgpID0+IChcbiAgICBlcnJvcjogRXJyb3IgfCBudWxsLFxuICAgIGNvbnRlbnQ/OiBzdHJpbmcsXG4gICAgc291cmNlTWFwPzogYW55XG4gICkgPT4gdm9pZDtcbiAgYWRkRGVwZW5kZW5jeT86IChkZXBlbmRlbmN5OiBzdHJpbmcpID0+IHZvaWQ7XG4gIGFkZEJ1aWxkRGVwZW5kZW5jeT86IChkZXBlbmRlbmN5OiBzdHJpbmcpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB3b3JrZmxvd0xvYWRlcihcbiAgdGhpczogV29ya2Zsb3dMb2FkZXJDb250ZXh0LFxuICBzb3VyY2U6IHN0cmluZyB8IEJ1ZmZlcixcbiAgc291cmNlTWFwOiBhbnlcbik6IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPiB8IHZvaWQge1xuICBjb25zdCBjYWxsYmFjayA9IHRoaXMuYXN5bmM/LigpO1xuICBjb25zdCBydW4gPSBhc3luYyAoKTogUHJvbWlzZTx7IGNvZGU6IHN0cmluZzsgbWFwOiBhbnkgfT4gPT4ge1xuICAgIGNvbnN0IGZpbGVuYW1lID0gdGhpcy5yZXNvdXJjZVBhdGg7XG4gICAgY29uc3Qgbm9ybWFsaXplZFNvdXJjZSA9IHNvdXJjZS50b1N0cmluZygpO1xuICAgIGNvbnN0IHdvcmtpbmdEaXIgPSBwcm9jZXNzLmN3ZCgpO1xuICAgIGNvbnN0IHN3Y1BsdWdpblBhdGggPSByZWdpc3RlclRyYW5zZm9ybURlcGVuZGVuY2llcyh0aGlzKTtcbiAgICBjb25zdCBzb3VyY2VGb3JUcmFuc2Zvcm0gPSBub3JtYWxpemVkU291cmNlO1xuXG4gICAgY29uc3QgaXNHZW5lcmF0ZWRXb3JrZmxvd0ZpbGUgPSBhd2FpdCBjaGVja0dlbmVyYXRlZEZpbGUoZmlsZW5hbWUpO1xuICAgIC8vIFNraXAgZ2VuZXJhdGVkIHdvcmtmbG93IHJvdXRlIGZpbGVzIHRvIGF2b2lkIHJlLXByb2Nlc3NpbmcgdGhlbS5cbiAgICBpZiAoaXNHZW5lcmF0ZWRXb3JrZmxvd0ZpbGUpIHtcbiAgICAgIHJldHVybiB7IGNvZGU6IG5vcm1hbGl6ZWRTb3VyY2UsIG1hcDogc291cmNlTWFwIH07XG4gICAgfVxuXG4gICAgLy8gRGV0ZWN0IHdvcmtmbG93IHBhdHRlcm5zIGluIHRoZSBzb3VyY2UgY29kZS5cbiAgICBjb25zdCBwYXR0ZXJucyA9IGF3YWl0IGRldGVjdFBhdHRlcm5zKHNvdXJjZUZvclRyYW5zZm9ybSk7XG5cbiAgICAvLyBDaGVjayBpZiBmaWxlIG5lZWRzIHRyYW5zZm9ybWF0aW9uIGJhc2VkIG9uIHBhdHRlcm5zIGFuZCBwYXRoXG4gICAgaWYgKCEoYXdhaXQgY2hlY2tTaG91bGRUcmFuc2Zvcm0oZmlsZW5hbWUsIHBhdHRlcm5zKSkpIHtcbiAgICAgIHJldHVybiB7IGNvZGU6IG5vcm1hbGl6ZWRTb3VyY2UsIG1hcDogc291cmNlTWFwIH07XG4gICAgfVxuXG4gICAgY29uc3QgaXNUeXBlU2NyaXB0ID1cbiAgICAgIGZpbGVuYW1lLmVuZHNXaXRoKCcudHMnKSB8fFxuICAgICAgZmlsZW5hbWUuZW5kc1dpdGgoJy50c3gnKSB8fFxuICAgICAgZmlsZW5hbWUuZW5kc1dpdGgoJy5tdHMnKSB8fFxuICAgICAgZmlsZW5hbWUuZW5kc1dpdGgoJy5jdHMnKTtcblxuICAgIC8vIENhbGN1bGF0ZSByZWxhdGl2ZSBmaWxlbmFtZSBmb3IgU1dDIHBsdWdpblxuICAgIC8vIFRoZSBTV0MgcGx1Z2luIHVzZXMgZmlsZW5hbWUgdG8gZ2VuZXJhdGUgd29ya2Zsb3dJZCwgc28gaXQgbXVzdCBiZSByZWxhdGl2ZVxuICAgIGNvbnN0IHJlbGF0aXZlRmlsZW5hbWUgPSBhd2FpdCBnZXRSZWxhdGl2ZUZpbGVuYW1lRm9yU3djKFxuICAgICAgZmlsZW5hbWUsXG4gICAgICB3b3JraW5nRGlyXG4gICAgKTtcblxuICAgIC8vIEdldCBkZWNvcmF0b3Igb3B0aW9ucyBmcm9tIHRzY29uZmlnIChjYWNoZWQgcGVyIHdvcmtpbmcgZGlyZWN0b3J5KVxuICAgIGNvbnN0IHsgb3B0aW9uczogZGVjb3JhdG9yT3B0aW9ucywgY29uZmlnUGF0aCB9ID1cbiAgICAgIGF3YWl0IGdldERlY29yYXRvck9wdGlvbnMod29ya2luZ0Rpcik7XG4gICAgaWYgKGNvbmZpZ1BhdGgpIHtcbiAgICAgIHJlZ2lzdGVyRmlsZURlcGVuZGVuY3kodGhpcywgY29uZmlnUGF0aCk7XG4gICAgfVxuXG4gICAgLy8gUmVzb2x2ZSBtb2R1bGUgc3BlY2lmaWVyIGZvciBwYWNrYWdlcyAobm9kZV9tb2R1bGVzIG9yIHdvcmtzcGFjZSBwYWNrYWdlcylcbiAgICBjb25zdCBtb2R1bGVTcGVjaWZpZXIgPSBhd2FpdCBnZXRNb2R1bGVTcGVjaWZpZXIoZmlsZW5hbWUsIHdvcmtpbmdEaXIpO1xuICAgIGNvbnN0IG1vZGUgPSAnc3RlcCc7XG5cbiAgICAvLyBUcmFuc2Zvcm0gd2l0aCBTV0NcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0cmFuc2Zvcm0oc291cmNlRm9yVHJhbnNmb3JtLCB7XG4gICAgICBmaWxlbmFtZTogcmVsYXRpdmVGaWxlbmFtZSxcbiAgICAgIGpzYzoge1xuICAgICAgICBwYXJzZXI6IHtcbiAgICAgICAgICAuLi4oaXNUeXBlU2NyaXB0XG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBzeW50YXg6ICd0eXBlc2NyaXB0JyxcbiAgICAgICAgICAgICAgICB0c3g6IGZpbGVuYW1lLmVuZHNXaXRoKCcudHN4JyksXG4gICAgICAgICAgICAgICAgZGVjb3JhdG9yczogZGVjb3JhdG9yT3B0aW9ucy5kZWNvcmF0b3JzLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBzeW50YXg6ICdlY21hc2NyaXB0JyxcbiAgICAgICAgICAgICAgICBqc3g6IGZpbGVuYW1lLmVuZHNXaXRoKCcuanN4JyksXG4gICAgICAgICAgICAgICAgZGVjb3JhdG9yczogZGVjb3JhdG9yT3B0aW9ucy5kZWNvcmF0b3JzLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgICAgdGFyZ2V0OiAnZXMyMDIyJyxcbiAgICAgICAgZXhwZXJpbWVudGFsOiB7XG4gICAgICAgICAgY2FjaGVSb290OiBqb2luKHdvcmtpbmdEaXIsICcuc3djJyksXG4gICAgICAgICAgcGx1Z2luczogW1tzd2NQbHVnaW5QYXRoLCB7IG1vZGUsIG1vZHVsZVNwZWNpZmllciB9XV0sXG4gICAgICAgIH0sXG4gICAgICAgIHRyYW5zZm9ybToge1xuICAgICAgICAgIHJlYWN0OiB7XG4gICAgICAgICAgICBydW50aW1lOiAncHJlc2VydmUnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbGVnYWN5RGVjb3JhdG9yOiBkZWNvcmF0b3JPcHRpb25zLmxlZ2FjeURlY29yYXRvcixcbiAgICAgICAgICBkZWNvcmF0b3JNZXRhZGF0YTogZGVjb3JhdG9yT3B0aW9ucy5kZWNvcmF0b3JNZXRhZGF0YSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBtaW5pZnk6IGZhbHNlLFxuICAgICAgaW5wdXRTb3VyY2VNYXA6IHNvdXJjZU1hcCxcbiAgICAgIHNvdXJjZU1hcHM6IHRydWUsXG4gICAgICBpbmxpbmVTb3VyY2VzQ29udGVudDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGxldCB0cmFuc2Zvcm1lZE1hcCA9IHNvdXJjZU1hcDtcbiAgICBpZiAodHlwZW9mIHJlc3VsdC5tYXAgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0cmFuc2Zvcm1lZE1hcCA9IEpTT04ucGFyc2UocmVzdWx0Lm1hcCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdHJhbnNmb3JtZWRNYXAgPSByZXN1bHQubWFwO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmVzdWx0Lm1hcCkge1xuICAgICAgdHJhbnNmb3JtZWRNYXAgPSByZXN1bHQubWFwO1xuICAgIH1cblxuICAgIHJldHVybiB7IGNvZGU6IHJlc3VsdC5jb2RlLCBtYXA6IHRyYW5zZm9ybWVkTWFwIH07XG4gIH07XG5cbiAgaWYgKCFjYWxsYmFjaykge1xuICAgIHJldHVybiBydW4oKS50aGVuKChyZXN1bHQpID0+IHJlc3VsdC5jb2RlKTtcbiAgfVxuXG4gIHZvaWQgcnVuKClcbiAgICAudGhlbigocmVzdWx0KSA9PiBjYWxsYmFjayhudWxsLCByZXN1bHQuY29kZSwgcmVzdWx0Lm1hcCkpXG4gICAgLmNhdGNoKChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgY2FsbGJhY2soZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpKTtcbiAgICB9KTtcbn1cbiJdfQ==
@@ -0,0 +1,7 @@
1
+ /**
2
+ * SWC does not atomically write its Wasmer cache. Compile the plugin before
3
+ * Next.js starts parallel loader workers.
4
+ * @see https://github.com/swc-project/swc/issues/10065
5
+ */
6
+ export declare function prewarmWorkflowSwcPluginCache(projectRoot: string): void;
7
+ //# sourceMappingURL=swc-plugin-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swc-plugin-cache.d.ts","sourceRoot":"","sources":["../src/swc-plugin-cache.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAWvE"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.prewarmWorkflowSwcPluginCache = prewarmWorkflowSwcPluginCache;
4
+ const node_path_1 = require("node:path");
5
+ const core_1 = require("@swc/core");
6
+ /**
7
+ * SWC does not atomically write its Wasmer cache. Compile the plugin before
8
+ * Next.js starts parallel loader workers.
9
+ * @see https://github.com/swc-project/swc/issues/10065
10
+ */
11
+ function prewarmWorkflowSwcPluginCache(projectRoot) {
12
+ (0, core_1.transformSync)(`async function step() { 'use step'; }`, {
13
+ filename: '__workflow_swc_cache_warmup__.js',
14
+ swcrc: false,
15
+ jsc: {
16
+ experimental: {
17
+ cacheRoot: (0, node_path_1.join)(projectRoot, '.swc'),
18
+ plugins: [[require.resolve('@workflow/swc-plugin'), { mode: 'step' }]],
19
+ },
20
+ },
21
+ });
22
+ }
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3djLXBsdWdpbi1jYWNoZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zd2MtcGx1Z2luLWNhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBUUEsc0VBV0M7QUFuQkQseUNBQWlDO0FBQ2pDLG9DQUEwQztBQUUxQzs7OztHQUlHO0FBQ0gsU0FBZ0IsNkJBQTZCLENBQUMsV0FBbUI7SUFDL0QsSUFBQSxvQkFBYSxFQUFDLHVDQUF1QyxFQUFFO1FBQ3JELFFBQVEsRUFBRSxrQ0FBa0M7UUFDNUMsS0FBSyxFQUFFLEtBQUs7UUFDWixHQUFHLEVBQUU7WUFDSCxZQUFZLEVBQUU7Z0JBQ1osU0FBUyxFQUFFLElBQUEsZ0JBQUksRUFBQyxXQUFXLEVBQUUsTUFBTSxDQUFDO2dCQUNwQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO2FBQ3ZFO1NBQ0Y7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyB0cmFuc2Zvcm1TeW5jIH0gZnJvbSAnQHN3Yy9jb3JlJztcblxuLyoqXG4gKiBTV0MgZG9lcyBub3QgYXRvbWljYWxseSB3cml0ZSBpdHMgV2FzbWVyIGNhY2hlLiBDb21waWxlIHRoZSBwbHVnaW4gYmVmb3JlXG4gKiBOZXh0LmpzIHN0YXJ0cyBwYXJhbGxlbCBsb2FkZXIgd29ya2Vycy5cbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N3Yy1wcm9qZWN0L3N3Yy9pc3N1ZXMvMTAwNjVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXdhcm1Xb3JrZmxvd1N3Y1BsdWdpbkNhY2hlKHByb2plY3RSb290OiBzdHJpbmcpOiB2b2lkIHtcbiAgdHJhbnNmb3JtU3luYyhgYXN5bmMgZnVuY3Rpb24gc3RlcCgpIHsgJ3VzZSBzdGVwJzsgfWAsIHtcbiAgICBmaWxlbmFtZTogJ19fd29ya2Zsb3dfc3djX2NhY2hlX3dhcm11cF9fLmpzJyxcbiAgICBzd2NyYzogZmFsc2UsXG4gICAganNjOiB7XG4gICAgICBleHBlcmltZW50YWw6IHtcbiAgICAgICAgY2FjaGVSb290OiBqb2luKHByb2plY3RSb290LCAnLnN3YycpLFxuICAgICAgICBwbHVnaW5zOiBbW3JlcXVpcmUucmVzb2x2ZSgnQHdvcmtmbG93L3N3Yy1wbHVnaW4nKSwgeyBtb2RlOiAnc3RlcCcgfV1dLFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@workflow/next",
3
- "version": "5.0.0-beta.21",
3
+ "version": "5.0.0-beta.22",
4
4
  "description": "Next.js integration for Workflow SDK",
5
5
  "type": "commonjs",
6
6
  "main": "dist/index.js",
@@ -29,8 +29,8 @@
29
29
  "@swc/core": "1.15.3",
30
30
  "semver": "7.7.4",
31
31
  "watchpack": "2.5.1",
32
- "@workflow/builders": "5.0.0-beta.21",
33
- "@workflow/core": "5.0.0-beta.21",
32
+ "@workflow/builders": "5.0.0-beta.22",
33
+ "@workflow/core": "5.0.0-beta.22",
34
34
  "@workflow/swc-plugin": "5.0.0-beta.5"
35
35
  },
36
36
  "devDependencies": {
@@ -38,6 +38,7 @@
38
38
  "@types/semver": "7.7.1",
39
39
  "@types/watchpack": "2.4.4",
40
40
  "next": "16.2.1",
41
+ "vitest": "^4.0.18",
41
42
  "@workflow/tsconfig": "5.0.0-beta.0"
42
43
  },
43
44
  "peerDependencies": {
@@ -51,6 +52,7 @@
51
52
  "scripts": {
52
53
  "build": "tsc",
53
54
  "dev": "tsc --watch",
55
+ "test": "vitest run src",
54
56
  "clean": "tsc --build --clean && rm -rf dist docs"
55
57
  }
56
58
  }