@workflow/next 5.0.0-beta.46 → 5.0.0-beta.47

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,2 +1,3 @@
1
+ export declare function createNextEntrypointMatcher(pageExtensions: readonly string[]): (entry: string) => boolean;
1
2
  export declare function getNextBuilderEager(buildersModule?: typeof import('@workflow/builders')): Promise<any>;
2
3
  //# sourceMappingURL=builder-eager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"builder-eager.d.ts","sourceRoot":"","sources":["../src/builder-eager.ts"],"names":[],"mappings":"AA4BA,wBAAsB,mBAAmB,CACvC,cAAc,CAAC,EAAE,cAAc,oBAAoB,CAAC,gBAquBrD"}
1
+ {"version":3,"file":"builder-eager.d.ts","sourceRoot":"","sources":["../src/builder-eager.ts"],"names":[],"mappings":"AAkCA,wBAAgB,2BAA2B,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,IAGnE,OAAO,MAAM,KAAG,OAAO,CA4BhC;AAKD,wBAAsB,mBAAmB,CACvC,cAAc,CAAC,EAAE,cAAc,oBAAoB,CAAC,gBAwuBrD"}
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createNextEntrypointMatcher = createNextEntrypointMatcher;
6
7
  exports.getNextBuilderEager = getNextBuilderEager;
7
8
  const node_fs_1 = require("node:fs");
8
9
  const promises_1 = require("node:fs/promises");
@@ -12,6 +13,38 @@ const watch_ignore_js_1 = require("./watch-ignore.js");
12
13
  const watch_rebuild_js_1 = require("./watch-rebuild.js");
13
14
  let CachedNextBuilderEager;
14
15
  const importEsm = new Function('specifier', 'return import(specifier)');
16
+ const appEntrypoint = /^(?:page|route|layout|default|error|loading|template|not-found|forbidden|unauthorized|sitemap|(?:icon|apple-icon|opengraph-image|twitter-image)\d?)$/;
17
+ const appRootEntrypoint = /^(?:global-error|global-not-found|robots|manifest)$/;
18
+ const rootEntrypoint = /^(?:instrumentation|middleware|proxy)$/;
19
+ const rootModuleEntrypoint = /^(?:instrumentation-client|mdx-components)\.(?:mjs|[jt]sx?)$/;
20
+ const rootModuleNames = ['instrumentation-client', 'mdx-components'];
21
+ const rootModuleExtensions = ['js', 'mjs', 'tsx', 'ts', 'jsx'];
22
+ function createNextEntrypointMatcher(pageExtensions) {
23
+ const extensions = [...pageExtensions].sort((a, b) => b.length - a.length);
24
+ return (entry) => {
25
+ if (/\.d\.(?:cts|mts|ts)$/.test(entry))
26
+ return false;
27
+ const sourceEntry = entry.replace(/^src\//, '');
28
+ const path = sourceEntry.split('/');
29
+ const filename = path[path.length - 1];
30
+ if (rootModuleEntrypoint.test(sourceEntry))
31
+ return true;
32
+ const extension = extensions.find((extension) => sourceEntry.endsWith(`.${extension}`));
33
+ if (!extension)
34
+ return false;
35
+ const name = filename.slice(0, -extension.length - 1);
36
+ if (path[0] === 'pages')
37
+ return true;
38
+ if (path[0] === 'app') {
39
+ const segments = path.slice(1, -1);
40
+ if (segments.some((segment) => segment.startsWith('_')))
41
+ return false;
42
+ return (appEntrypoint.test(name) ||
43
+ (path.length === 2 && appRootEntrypoint.test(name)));
44
+ }
45
+ return rootEntrypoint.test(sourceEntry.slice(0, -extension.length - 1));
46
+ };
47
+ }
15
48
  // Create the eager Next builder dynamically by extending the ESM BaseBuilder.
16
49
  // Exported as getNextBuilderEager() to allow CommonJS modules to import from
17
50
  // the ESM @workflow/builders package via dynamic import at runtime.
@@ -479,19 +512,21 @@ async function getNextBuilderEager(buildersModule) {
479
512
  }
480
513
  async getInputFiles() {
481
514
  const inputFiles = await super.getInputFiles();
515
+ const isNextEntrypoint = createNextEntrypointMatcher(this.config.pageExtensions);
516
+ const inputFileSet = new Set(inputFiles);
517
+ const rootModuleFiles = new Set(rootModuleNames.flatMap((name) => {
518
+ const file = ['src', '']
519
+ .flatMap((directory) => rootModuleExtensions.map((extension) => (0, node_path_1.join)(this.config.workingDir, directory, `${name}.${extension}`)))
520
+ .find((candidate) => inputFileSet.has(candidate));
521
+ return file ? [file] : [];
522
+ }));
482
523
  return inputFiles.filter((file) => {
483
524
  const entry = (0, node_path_1.relative)(this.config.workingDir, file).replaceAll('\\', '/');
484
- // Match App Router route, page, and layout entrypoints in app/ or src/app/.
485
- if (/^(?:app|src\/app)\/(?:.*\/)?(?:route|page|layout)\./.test(entry)) {
486
- return true;
487
- }
488
- // Match every Pages Router entrypoint in pages/ or src/pages/.
489
- if (/^(?:pages|src\/pages)\//.test(entry)) {
490
- return true;
525
+ const rootModule = entry.startsWith('src/') ? entry.slice(4) : entry;
526
+ if (rootModuleEntrypoint.test(rootModule)) {
527
+ return rootModuleFiles.has(file);
491
528
  }
492
- // Match Next.js root entrypoints at the project root or under src/.
493
- return ['instrumentation', 'middleware', 'proxy'].some((name) => this.config.pageExtensions.some((extension) => entry === `${name}.${extension}` ||
494
- entry === `src/${name}.${extension}`));
529
+ return isNextEntrypoint(entry);
495
530
  });
496
531
  }
497
532
  async writeFunctionsConfig(outputDir) {
@@ -582,4 +617,4 @@ async function getNextBuilderEager(buildersModule) {
582
617
  CachedNextBuilderEager = NextBuilder;
583
618
  return NextBuilder;
584
619
  }
585
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci1lYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9idWlsZGVyLWVhZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBNEJBLGtEQXN1QkM7QUFsd0JELHFDQUFpRDtBQUNqRCwrQ0FBOEU7QUFDOUUseUNBQXlFO0FBS3pFLHdEQUFnQztBQUVoQyx1REFBK0Q7QUFDL0QseURBUTRCO0FBRTVCLElBQUksc0JBQTJCLENBQUM7QUFDaEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFLDBCQUEwQixDQUV2RCxDQUFDO0FBRWhCLDhFQUE4RTtBQUM5RSw2RUFBNkU7QUFDN0Usb0VBQW9FO0FBQzdELEtBQUssVUFBVSxtQkFBbUIsQ0FDdkMsY0FBb0Q7SUFFcEQsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1FBQzNCLE9BQU8sc0JBQXNCLENBQUM7SUFDaEMsQ0FBQztJQUVELE1BQU0sRUFDSixXQUFXLEVBQUUsZ0JBQWdCLEVBQzdCLHVCQUF1QixFQUN2QixzQkFBc0IsRUFDdEIsY0FBYyxFQUNkLGtCQUFrQixHQUNuQixHQUFHLGNBQWM7UUFDbEIsQ0FBQyxNQUFNLFNBQVMsQ0FBc0Msb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0lBRTdFLE1BQU0sV0FBWSxTQUFRLGdCQUFnQjtRQU14QyxLQUFLLENBQUMsS0FBSztZQUNULE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDaEQsTUFBTSxvQkFBb0IsR0FBRyxJQUFBLGdCQUFJLEVBQUMsU0FBUyxFQUFFLHlCQUF5QixDQUFDLENBQUM7WUFFeEUsa0NBQWtDO1lBQ2xDLE1BQU0sSUFBQSxnQkFBSyxFQUFDLG9CQUFvQixFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3ZCLG9FQUFv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QUUsQ0FBQztnQkFDOUIsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQztZQUVELG9DQUFvQztZQUNwQyxJQUFJLE1BQU0sV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7WUFFRCxrRkFBa0Y7WUFDbEYsSUFBSSxNQUFNLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUNoQywrQ0FBK0M7Z0JBQy9DLE1BQU0sSUFBQSxnQkFBSyxFQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QyxPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO1lBRUQsSUFBSSxNQUFNLFdBQVcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUNuQyx1REFBdUQ7Z0JBQ3ZELE1BQU0sSUFBQSxnQkFBSyxFQUFDLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUM1QyxPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDO1lBRUQsTUFBTSxJQUFJLEtBQUssQ0FDYixxSEFBcUgsQ0FDdEgsQ0FBQztRQUNKLENBQUM7S0FDRjtJQUVELHNCQUFzQixHQUFHLFdBQVcsQ0FBQztJQUNyQyxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29uc3RhbnRzLCB0eXBlIERpcmVudCB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgYWNjZXNzLCBta2RpciwgcmVhZGRpciwgcmVhbHBhdGgsIHJtLCBzdGF0IH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBleHRuYW1lLCBpc0Fic29sdXRlLCBqb2luLCByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgdHlwZSB7XG4gIE5leHRDb25maWcgYXMgQnVpbGRlck5leHRDb25maWcsXG4gIFdvcmtmbG93TWFuaWZlc3QsXG59IGZyb20gJ0B3b3JrZmxvdy9idWlsZGVycyc7XG5pbXBvcnQgY2hva2lkYXIgZnJvbSAnY2hva2lkYXInO1xuaW1wb3J0IHR5cGUgeyBOZXh0Q29uZmlnIGFzIFByb2plY3ROZXh0Q29uZmlnIH0gZnJvbSAnbmV4dCc7XG5pbXBvcnQgeyBjcmVhdGVXYXRjaElnbm9yZVByZWRpY2F0ZSB9IGZyb20gJy4vd2F0Y2gtaWdub3JlLmpzJztcbmltcG9ydCB7XG4gIGNsYXNzaWZ5UmVidWlsZCxcbiAgY3JlYXRlU291cmNlU25hcHNob3QsXG4gIHR5cGUgRmlsZUNoYW5nZXMsXG4gIGdldFJlbGV2YW50RmlsZXMsXG4gIHBpbkJhc2VsaW5lc0Fjcm9zc0Z1bGxSZWJ1aWxkLFxuICByZXBsYWNlU291cmNlU25hcHNob3RzLFxuICB0eXBlIFNvdXJjZVNuYXBzaG90LFxufSBmcm9tICcuL3dhdGNoLXJlYnVpbGQuanMnO1xuXG5sZXQgQ2FjaGVkTmV4dEJ1aWxkZXJFYWdlcjogYW55O1xuY29uc3QgaW1wb3J0RXNtID0gbmV3IEZ1bmN0aW9uKCdzcGVjaWZpZXInLCAncmV0dXJuIGltcG9ydChzcGVjaWZpZXIpJykgYXMgPFQ+KFxuICBzcGVjaWZpZXI6IHN0cmluZ1xuKSA9PiBQcm9taXNlPFQ+O1xuXG4vLyBDcmVhdGUgdGhlIGVhZ2VyIE5leHQgYnVpbGRlciBkeW5hbWljYWxseSBieSBleHRlbmRpbmcgdGhlIEVTTSBCYXNlQnVpbGRlci5cbi8vIEV4cG9ydGVkIGFzIGdldE5leHRCdWlsZGVyRWFnZXIoKSB0byBhbGxvdyBDb21tb25KUyBtb2R1bGVzIHRvIGltcG9ydCBmcm9tXG4vLyB0aGUgRVNNIEB3b3JrZmxvdy9idWlsZGVycyBwYWNrYWdlIHZpYSBkeW5hbWljIGltcG9ydCBhdCBydW50aW1lLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE5leHRCdWlsZGVyRWFnZXIoXG4gIGJ1aWxkZXJzTW9kdWxlPzogdHlwZW9mIGltcG9ydCgnQHdvcmtmbG93L2J1aWxkZXJzJylcbikge1xuICBpZiAoQ2FjaGVkTmV4dEJ1aWxkZXJFYWdlcikge1xuICAgIHJldHVybiBDYWNoZWROZXh0QnVpbGRlckVhZ2VyO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIEJhc2VCdWlsZGVyOiBCYXNlQnVpbGRlckNsYXNzLFxuICAgIGdldFdvcmtmbG93UXVldWVUcmlnZ2VyLFxuICAgIGRldGVjdFdvcmtmbG93UGF0dGVybnMsXG4gICAgcGFyZW50SGFzQ2hpbGQsXG4gICAgd3JpdGVGaWxlSWZDaGFuZ2VkLFxuICB9ID0gYnVpbGRlcnNNb2R1bGUgPz9cbiAgKGF3YWl0IGltcG9ydEVzbTx0eXBlb2YgaW1wb3J0KCdAd29ya2Zsb3cvYnVpbGRlcnMnKT4oJ0B3b3JrZmxvdy9idWlsZGVycycpKTtcblxuICBjbGFzcyBOZXh0QnVpbGRlciBleHRlbmRzIEJhc2VCdWlsZGVyQ2xhc3Mge1xuICAgIHByb3RlY3RlZCBkZWNsYXJlIGNvbmZpZzogQnVpbGRlck5leHRDb25maWcgJiB7XG4gICAgICBwYWdlRXh0ZW5zaW9uczogTm9uTnVsbGFibGU8UHJvamVjdE5leHRDb25maWdbJ3BhZ2VFeHRlbnNpb25zJ10+O1xuICAgICAgZGlzdERpcjogc3RyaW5nO1xuICAgIH07XG5cbiAgICBhc3luYyBidWlsZCgpIHtcbiAgICAgIGNvbnN0IG91dHB1dERpciA9IGF3YWl0IHRoaXMuZmluZEFwcERpcmVjdG9yeSgpO1xuICAgICAgY29uc3Qgd29ya2Zsb3dHZW5lcmF0ZWREaXIgPSBqb2luKG91dHB1dERpciwgJy53ZWxsLWtub3duL3dvcmtmbG93L3YxJyk7XG5cbiAgICAgIC8vIEVuc3VyZSBvdXRwdXQgZGlyZWN0b3JpZXMgZXhpc3RcbiAgICAgIGF3YWl0IG1rZGlyKHdvcmtmbG93R2VuZXJhdGVkRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGlmICghdGhpcy5jb25maWcud2F0Y2gpIHtcbiAgICAgICAgLy8gUHJvZHVjdGlvbiBidWlsZCBjYWNoZXMgbWF5IHN0aWxsIGNvbnRhaW4gdGhlIHJldGlyZWQgc3RlcCByb3V0ZS5cbiAgICAgICAgYXdhaXQgcm0oam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ3N0ZXAnKSwge1xuICAgICAgICAgIHJlY3Vyc2l2ZTogdHJ1ZSxcbiAgICAgICAgICBmb3JjZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBhd2FpdCB3cml0ZUZpbGVJZkNoYW5nZWQoam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJy5naXRpZ25vcmUnKSwgJyonKTtcblxuICAgICAgY29uc3QgaW5wdXRGaWxlcyA9IGF3YWl0IHRoaXMuZ2V0SW5wdXRGaWxlcygpO1xuICAgICAgY29uc3QgdHNjb25maWdQYXRoID0gYXdhaXQgdGhpcy5maW5kVHNDb25maWdQYXRoKCk7XG5cbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgIGlucHV0RmlsZXMsXG4gICAgICAgIHdvcmtmbG93R2VuZXJhdGVkRGlyLFxuICAgICAgICB0c2NvbmZpZ1BhdGgsXG4gICAgICB9O1xuXG4gICAgICAvLyBWMjogQnVpbGQgY29tYmluZWQgcm91dGUgKHJlcGxhY2VzIHNlcGFyYXRlIHN0ZXAgKyBmbG93IHJvdXRlcylcbiAgICAgIGNvbnN0IGNvbWJpbmVkUmVzdWx0ID0gYXdhaXQgdGhpcy5idWlsZENvbWJpbmVkRnVuY3Rpb24ob3B0aW9ucyk7XG4gICAgICBhd2FpdCB0aGlzLmJ1aWxkV2ViaG9va1JvdXRlKHsgd29ya2Zsb3dHZW5lcmF0ZWREaXIgfSk7XG5cbiAgICAgIGNvbnN0IHdyaXRlTWFuaWZlc3QgPSBhc3luYyAoXG4gICAgICAgIHNvdXJjZU1hbmlmZXN0OiBXb3JrZmxvd01hbmlmZXN0IHwgdW5kZWZpbmVkXG4gICAgICApID0+IHtcbiAgICAgICAgY29uc3QgbWFuaWZlc3QgPSB7XG4gICAgICAgICAgc3RlcHM6IHsgLi4uc291cmNlTWFuaWZlc3Q/LnN0ZXBzIH0sXG4gICAgICAgICAgd29ya2Zsb3dzOiB7IC4uLnNvdXJjZU1hbmlmZXN0Py53b3JrZmxvd3MgfSxcbiAgICAgICAgICBjbGFzc2VzOiB7IC4uLnNvdXJjZU1hbmlmZXN0Py5jbGFzc2VzIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gV3JpdGUgbWFuaWZlc3RcbiAgICAgICAgY29uc3Qgd29ya2Zsb3dCdW5kbGVQYXRoID0gam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ2Zsb3cvcm91dGUuanMnKTtcbiAgICAgICAgY29uc3QgbWFuaWZlc3RKc29uID0gYXdhaXQgdGhpcy5jcmVhdGVNYW5pZmVzdCh7XG4gICAgICAgICAgd29ya2Zsb3dCdW5kbGVQYXRoLFxuICAgICAgICAgIG1hbmlmZXN0RGlyOiB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICAgICAgICBtYW5pZmVzdCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gRXhwb3NlIG1hbmlmZXN0IGFzIGEgc3RhdGljIGZpbGUgd2hlbiBXT1JLRkxPV19QVUJMSUNfTUFOSUZFU1Q9MS5cbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkRXhwb3NlUHVibGljTWFuaWZlc3QgJiYgbWFuaWZlc3RKc29uKSB7XG4gICAgICAgICAgY29uc3QgcHVibGljTWFuaWZlc3REaXIgPSBqb2luKFxuICAgICAgICAgICAgdGhpcy5jb25maWcud29ya2luZ0RpcixcbiAgICAgICAgICAgICdwdWJsaWMvLndlbGwta25vd24vd29ya2Zsb3cvdjEnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhd2FpdCBta2RpcihwdWJsaWNNYW5pZmVzdERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52LlZFUkNFTF9ERVBMT1lNRU5UX0lEID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGF3YWl0IHdyaXRlRmlsZUlmQ2hhbmdlZChcbiAgICAgICAgICAgICAgam9pbihwdWJsaWNNYW5pZmVzdERpciwgJy5naXRpZ25vcmUnKSxcbiAgICAgICAgICAgICAgJyonXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBXcml0dGVuIGZyb20gdGhlIHNhbWUgc3RyaW5nIHJhdGhlciB0aGFuIGNvcGllZCwgc28gYW4gdW5jaGFuZ2VkXG4gICAgICAgICAgLy8gbWFuaWZlc3QgbGVhdmVzIHRoZSBwdWJsaWMgY29weSB1bnRvdWNoZWQgdG9vLlxuICAgICAgICAgIGF3YWl0IHdyaXRlRmlsZUlmQ2hhbmdlZChcbiAgICAgICAgICAgIGpvaW4ocHVibGljTWFuaWZlc3REaXIsICdtYW5pZmVzdC5qc29uJyksXG4gICAgICAgICAgICBtYW5pZmVzdEpzb25cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBhd2FpdCB3cml0ZU1hbmlmZXN0KGNvbWJpbmVkUmVzdWx0Py5tYW5pZmVzdCk7XG5cbiAgICAgIGF3YWl0IHRoaXMud3JpdGVGdW5jdGlvbnNDb25maWcob3V0cHV0RGlyKTtcblxuICAgICAgaWYgKHRoaXMuY29uZmlnLndhdGNoKSB7XG4gICAgICAgIC8vIFRPRE86IGltcGxlbWVudCB3YXRjaCBtb2RlIGZvciBjb21iaW5lZCBidW5kbGVcbiAgICAgICAgLy8gRm9yIG5vdywgZmFsbCBiYWNrIHRvIGZ1bGwgcmVidWlsZCBvbiBmaWxlIGNoYW5nZXNcbiAgICAgICAgaWYgKCFjb21iaW5lZFJlc3VsdD8uaW50ZXJpbUJ1bmRsZUN0eCB8fCAhY29tYmluZWRSZXN1bHQuYnVuZGxlRmluYWwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnSW52YXJpYW50OiBleHBlY3RlZCB3b3JrZmxvdyBidWlsZCBjb250ZXh0IGluIHdhdGNoIG1vZGUnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0ZXAgcmVnaXN0cmF0aW9ucyBtYXkgYmUgZW1pdHRlZCBhcyBzb3VyY2UgaW1wb3J0cyB3aXRob3V0IGFuXG4gICAgICAgIC8vIGVzYnVpbGQgY29udGV4dCB3aGVuIGV4dGVybmFsaXplTm9uU3RlcHMgaXMgZW5hYmxlZC5cbiAgICAgICAgbGV0IHN0ZXBzQ3R4ID0gY29tYmluZWRSZXN1bHQuc3RlcHNDb250ZXh0O1xuICAgICAgICBsZXQgd29ya2Zsb3dzQ3R4ID0ge1xuICAgICAgICAgIGludGVyaW1CdW5kbGVDdHg6IGNvbWJpbmVkUmVzdWx0LmludGVyaW1CdW5kbGVDdHgsXG4gICAgICAgICAgYnVuZGxlRmluYWw6IGNvbWJpbmVkUmVzdWx0LmJ1bmRsZUZpbmFsLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgZGlzY292ZXJlZEVudHJpZXMgPSBjb21iaW5lZFJlc3VsdC5kaXNjb3ZlcmVkRW50cmllcztcbiAgICAgICAgbGV0IHN0ZXBzTWFuaWZlc3QgPSBjb21iaW5lZFJlc3VsdC5zdGVwc01hbmlmZXN0O1xuICAgICAgICBsZXQgd29ya2Zsb3dzTWFuaWZlc3QgPSBjb21iaW5lZFJlc3VsdC53b3JrZmxvd3NNYW5pZmVzdDtcbiAgICAgICAgY29uc3Qgc3RlcHNPdXRmaWxlID0gam9pbihcbiAgICAgICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICAgICAgICAnZmxvdycsXG4gICAgICAgICAgJ19fc3RlcF9yZWdpc3RyYXRpb25zLmpzJ1xuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZVBhdGggPSAocGF0aG5hbWU6IHN0cmluZykgPT5cbiAgICAgICAgICAoaXNBYnNvbHV0ZShwYXRobmFtZSlcbiAgICAgICAgICAgID8gcGF0aG5hbWVcbiAgICAgICAgICAgIDogcmVzb2x2ZSh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCBwYXRobmFtZSlcbiAgICAgICAgICApLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgICAgY29uc3Qgc291cmNlU25hcHNob3RzID0gbmV3IE1hcDxzdHJpbmcsIFNvdXJjZVNuYXBzaG90PigpO1xuXG4gICAgICAgIGNvbnN0IHdhdGNoYWJsZUV4dGVuc2lvbnMgPSBuZXcgU2V0KFtcbiAgICAgICAgICAnLmpzJyxcbiAgICAgICAgICAnLmpzeCcsXG4gICAgICAgICAgJy50cycsXG4gICAgICAgICAgJy50c3gnLFxuICAgICAgICAgICcubXRzJyxcbiAgICAgICAgICAnLmN0cycsXG4gICAgICAgICAgJy5janMnLFxuICAgICAgICAgICcubWpzJyxcbiAgICAgICAgXSk7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRHZW5lcmF0ZWREaXIgPSB3b3JrZmxvd0dlbmVyYXRlZERpci5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWREaXN0RGlyID0gbm9ybWFsaXplUGF0aCh0aGlzLmNvbmZpZy5kaXN0RGlyKTtcblxuICAgICAgICAvLyBQcnVuZSB0aGUgZGV2IHdhdGNoIHNldCB0byBrZWVwIGNob2tpZGFyIGZyb20gcmVnaXN0ZXJpbmcgYW5cbiAgICAgICAgLy8gZnMud2F0Y2ggcGVyIGRpcmVjdG9yeSBhY3Jvc3MgdGhlIHdob2xlIHByb2plY3QgdHJlZSAoY2hva2lkYXIgNFxuICAgICAgICAvLyBkcm9wcGVkIGZzZXZlbnRzLCBzbyBvbiBtYWNPUyB0aGF0IGV4aGF1c3RzIHRoZSBmZCBsaW1pdCAtPiBFTUZJTEVcbiAgICAgICAgLy8gb24gbGFyZ2UgbW9ub3JlcG9zKS4gVGhpcyBob25vcnMgYC5naXRpZ25vcmVgIGFuZCB0aGVcbiAgICAgICAgLy8gV09SS0ZMT1dfREVWX1dBVENIX0lHTk9SRURfUEFUSFMgZW52IHZhciBpbiBhZGRpdGlvbiB0byB0aGVcbiAgICAgICAgLy8gYnVpbHQtaW4gZnJhZ21lbnRzLiBUaGUgZ2VuZXJhdGVkIHdvcmtmbG93IGRpciBpcyBwYXNzZWQgYXMgYW5cbiAgICAgICAgLy8gZXh0cmEgZnJhZ21lbnQgc28gaXQgaXMgcHJ1bmVkIHJlZ2FyZGxlc3Mgb2YgYC5naXRpZ25vcmVgLlxuICAgICAgICBjb25zdCBpc0lnbm9yZWRXYXRjaFBhdGggPSBjcmVhdGVXYXRjaElnbm9yZVByZWRpY2F0ZSh7XG4gICAgICAgICAgd29ya2luZ0RpcjogdGhpcy5jb25maWcud29ya2luZ0RpcixcbiAgICAgICAgICBwcm9qZWN0Um9vdDogdGhpcy50cmFuc2Zvcm1Qcm9qZWN0Um9vdCxcbiAgICAgICAgICBleHRyYUZyYWdtZW50czogW25vcm1hbGl6ZWRHZW5lcmF0ZWREaXJdLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBoYXNJZ25vcmVkUGF0aEZyYWdtZW50ID0gKG5vcm1hbGl6ZWRQYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBub3JtYWxpemVkUGF0aCA9PT0gbm9ybWFsaXplZERpc3REaXIgfHxcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRQYXRoLnN0YXJ0c1dpdGgoYCR7bm9ybWFsaXplZERpc3REaXJ9L2ApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGlzSWdub3JlZFdhdGNoUGF0aChub3JtYWxpemVkUGF0aCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IHJlYnVpbGRRdWV1ZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgICAgIGNvbnN0IGVucXVldWUgPSAodGFzazogKCkgPT4gUHJvbWlzZTx2b2lkPikgPT4ge1xuICAgICAgICAgIHJlYnVpbGRRdWV1ZSA9IHJlYnVpbGRRdWV1ZS50aGVuKHRhc2spLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHByb2Nlc3MgZmlsZSBjaGFuZ2UnLCBlcnJvcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHJlYnVpbGRRdWV1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZWFkU291cmNlU25hcHNob3QgPSAoZmlsZTogc3RyaW5nKSA9PlxuICAgICAgICAgIGNyZWF0ZVNvdXJjZVNuYXBzaG90KHsgZmlsZSwgZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyB9KTtcblxuICAgICAgICBjb25zdCByZWZyZXNoU291cmNlU25hcHNob3RzID0gKCkgPT5cbiAgICAgICAgICByZXBsYWNlU291cmNlU25hcHNob3RzKHtcbiAgICAgICAgICAgIGRpc2NvdmVyZWRFbnRyaWVzLFxuICAgICAgICAgICAgaW5wdXRGaWxlczogb3B0aW9ucy5pbnB1dEZpbGVzLFxuICAgICAgICAgICAgbm9ybWFsaXplUGF0aCxcbiAgICAgICAgICAgIHJlYWRTbmFwc2hvdDogcmVhZFNvdXJjZVNuYXBzaG90LFxuICAgICAgICAgICAgc291cmNlU25hcHNob3RzLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IG1lcmdlQ29tYmluZWRNYW5pZmVzdCA9IChcbiAgICAgICAgICBuZXh0U3RlcHNNYW5pZmVzdDogV29ya2Zsb3dNYW5pZmVzdFxuICAgICAgICApOiBXb3JrZmxvd01hbmlmZXN0ID0+ICh7XG4gICAgICAgICAgLi4ubmV4dFN0ZXBzTWFuaWZlc3QsXG4gICAgICAgICAgd29ya2Zsb3dzOiB7XG4gICAgICAgICAgICAuLi5uZXh0U3RlcHNNYW5pZmVzdC53b3JrZmxvd3MsXG4gICAgICAgICAgICAuLi53b3JrZmxvd3NNYW5pZmVzdC53b3JrZmxvd3MsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjbGFzc2VzOiB7XG4gICAgICAgICAgICAuLi5uZXh0U3RlcHNNYW5pZmVzdC5jbGFzc2VzLFxuICAgICAgICAgICAgLi4ud29ya2Zsb3dzTWFuaWZlc3QuY2xhc3NlcyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBob3RSZWJ1aWxkID0gYXN5bmMgKHJlZnJlc2hTdGVwUmVnaXN0cmF0aW9uczogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIGlmIChyZWZyZXNoU3RlcFJlZ2lzdHJhdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChzdGVwc0N0eCkge1xuICAgICAgICAgICAgICBhd2FpdCBzdGVwc0N0eC5yZWJ1aWxkKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdGVwc01hbmlmZXN0ID0gYXdhaXQgdGhpcy5jcmVhdGVTdGVwU291cmNlUmVnaXN0cmF0aW9uRmlsZSh7XG4gICAgICAgICAgICAgICAgaW5wdXRGaWxlczogb3B0aW9ucy5pbnB1dEZpbGVzLFxuICAgICAgICAgICAgICAgIG91dGZpbGU6IHN0ZXBzT3V0ZmlsZSxcbiAgICAgICAgICAgICAgICB0c2NvbmZpZ1BhdGgsXG4gICAgICAgICAgICAgICAgZGlzY292ZXJlZEVudHJpZXMsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHdvcmtmbG93UmVzdWx0ID0gYXdhaXQgd29ya2Zsb3dzQ3R4LmludGVyaW1CdW5kbGVDdHgucmVidWlsZCgpO1xuICAgICAgICAgIGNvbnN0IHdvcmtmbG93T3V0cHV0ID0gd29ya2Zsb3dSZXN1bHQub3V0cHV0RmlsZXM/LlswXT8udGV4dDtcbiAgICAgICAgICBpZiAoIXdvcmtmbG93T3V0cHV0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICdJbnZhcmlhbnQ6IGV4cGVjdGVkIHdvcmtmbG93IG91dHB1dCBmcm9tIGhvdCByZWJ1aWxkJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhd2FpdCB3b3JrZmxvd3NDdHguYnVuZGxlRmluYWwod29ya2Zsb3dPdXRwdXQpO1xuICAgICAgICAgIGF3YWl0IHdyaXRlTWFuaWZlc3QobWVyZ2VDb21iaW5lZE1hbmlmZXN0KHN0ZXBzTWFuaWZlc3QpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBUaGUgcGluIGhlbHBlciBvd25zIHRoZSBjYXB0dXJlLWJlZm9yZS1idWlsZCAvIHJlc3RvcmUtYWZ0ZXItXG4gICAgICAgIC8vIHJlZnJlc2ggb3JkZXJpbmcgKGluY2x1ZGluZyB0aGF0IHRoZSBjYXB0dXJlIHJlYWRzIHRoZSBDVVJSRU5UXG4gICAgICAgIC8vIGRpc2NvdmVyZWQgZW50cmllcyBhbmQgaW5wdXQgZmlsZXMsIGJlZm9yZSB0aGUgcmVidWlsZCByZXBsYWNlc1xuICAgICAgICAvLyB0aGVtKSwgc28gYW4gZWRpdCBsYW5kaW5nIHdoaWxlIHRoZSBtdWx0aS1zZWNvbmQgcmVidWlsZCBydW5zIHN0aWxsXG4gICAgICAgIC8vIGRpZmZzIGFnYWluc3Qgd2hhdCB0aGUgcmVidWlsZCBjb25zdW1lZCBpbnN0ZWFkIG9mIGJlaW5nIGFic29yYmVkXG4gICAgICAgIC8vIGludG8gdGhlIHJlZnJlc2hlZCBiYXNlbGluZS4gU2VlIGBwaW5CYXNlbGluZXNBY3Jvc3NGdWxsUmVidWlsZGBcbiAgICAgICAgLy8gZm9yIHRoZSBmdWxsIHJlYXNvbmluZy5cbiAgICAgICAgY29uc3QgZnVsbFJlYnVpbGQgPSAoKSA9PlxuICAgICAgICAgIHBpbkJhc2VsaW5lc0Fjcm9zc0Z1bGxSZWJ1aWxkKHtcbiAgICAgICAgICAgIGRpc2NvdmVyZWRFbnRyaWVzLFxuICAgICAgICAgICAgaW5wdXRGaWxlczogb3B0aW9ucy5pbnB1dEZpbGVzLFxuICAgICAgICAgICAgbm9ybWFsaXplUGF0aCxcbiAgICAgICAgICAgIHJlYWRTbmFwc2hvdDogcmVhZFNvdXJjZVNuYXBzaG90LFxuICAgICAgICAgICAgc291cmNlU25hcHNob3RzLFxuICAgICAgICAgICAgcmVidWlsZDogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmNsZWFyRGlzY292ZXJlZEVudHJpZXNDYWNoZSgpO1xuICAgICAgICAgICAgICBjb25zdCBuZXdJbnB1dEZpbGVzID0gYXdhaXQgdGhpcy5nZXRJbnB1dEZpbGVzKCk7XG4gICAgICAgICAgICAgIG9wdGlvbnMuaW5wdXRGaWxlcyA9IG5ld0lucHV0RmlsZXM7XG5cbiAgICAgICAgICAgICAgYXdhaXQgc3RlcHNDdHg/LmRpc3Bvc2UoKTtcbiAgICAgICAgICAgICAgYXdhaXQgd29ya2Zsb3dzQ3R4LmludGVyaW1CdW5kbGVDdHguZGlzcG9zZSgpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IG5ld0NvbWJpbmVkID0gYXdhaXQgdGhpcy5idWlsZENvbWJpbmVkRnVuY3Rpb24ob3B0aW9ucyk7XG4gICAgICAgICAgICAgIHN0ZXBzQ3R4ID0gbmV3Q29tYmluZWQuc3RlcHNDb250ZXh0O1xuICAgICAgICAgICAgICBkaXNjb3ZlcmVkRW50cmllcyA9IG5ld0NvbWJpbmVkLmRpc2NvdmVyZWRFbnRyaWVzO1xuICAgICAgICAgICAgICBzdGVwc01hbmlmZXN0ID0gbmV3Q29tYmluZWQuc3RlcHNNYW5pZmVzdDtcbiAgICAgICAgICAgICAgd29ya2Zsb3dzTWFuaWZlc3QgPSBuZXdDb21iaW5lZC53b3JrZmxvd3NNYW5pZmVzdDtcblxuICAgICAgICAgICAgICBpZiAoIW5ld0NvbWJpbmVkPy5pbnRlcmltQnVuZGxlQ3R4IHx8ICFuZXdDb21iaW5lZD8uYnVuZGxlRmluYWwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAnSW52YXJpYW50OiBleHBlY3RlZCB3b3JrZmxvd3MgYnVuZGxlIGNvbnRleHQgYWZ0ZXIgcmVidWlsZCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHdvcmtmbG93c0N0eCA9IHtcbiAgICAgICAgICAgICAgICBpbnRlcmltQnVuZGxlQ3R4OiBuZXdDb21iaW5lZC5pbnRlcmltQnVuZGxlQ3R4LFxuICAgICAgICAgICAgICAgIGJ1bmRsZUZpbmFsOiBuZXdDb21iaW5lZC5idW5kbGVGaW5hbCxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBhd2FpdCB3cml0ZU1hbmlmZXN0KG5ld0NvbWJpbmVkLm1hbmlmZXN0KTtcbiAgICAgICAgICAgICAgYXdhaXQgcmVmcmVzaFNvdXJjZVNuYXBzaG90cygpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBpc1dhdGNoYWJsZUZpbGUgPSAocGF0aDogc3RyaW5nKSA9PlxuICAgICAgICAgIHdhdGNoYWJsZUV4dGVuc2lvbnMuaGFzKGV4dG5hbWUocGF0aCkpO1xuXG4gICAgICAgIGNvbnN0IHJlYWRLbm93bkZpbGVzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpbGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgICAgY29uc3QgYWxpYXNlcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgICAgICAgY29uc3QgcmVsZXZhbnRGaWxlcyA9IGdldFJlbGV2YW50RmlsZXMoe1xuICAgICAgICAgICAgZGlzY292ZXJlZEVudHJpZXMsXG4gICAgICAgICAgICBpbnB1dEZpbGVzOiBvcHRpb25zLmlucHV0RmlsZXMsXG4gICAgICAgICAgICBub3JtYWxpemVQYXRoLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3QgYWRkS25vd25GaWxlID0gYXN5bmMgKGZpbGVQYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGxldCByZWFsRmlsZVBhdGggPSBmaWxlUGF0aDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJlYWxGaWxlUGF0aCA9IG5vcm1hbGl6ZVBhdGgoYXdhaXQgcmVhbHBhdGgoZmlsZVBhdGgpKTtcbiAgICAgICAgICAgIH0gY2F0Y2gge31cblxuICAgICAgICAgICAgY29uc3QgY2Fub25pY2FsUGF0aCA9IHJlbGV2YW50RmlsZXMuaGFzKHJlYWxGaWxlUGF0aClcbiAgICAgICAgICAgICAgPyByZWFsRmlsZVBhdGhcbiAgICAgICAgICAgICAgOiBmaWxlUGF0aDtcbiAgICAgICAgICAgIGZpbGVzLmFkZChjYW5vbmljYWxQYXRoKTtcbiAgICAgICAgICAgIGFsaWFzZXMuc2V0KGZpbGVQYXRoLCBjYW5vbmljYWxQYXRoKTtcbiAgICAgICAgICAgIGFsaWFzZXMuc2V0KHJlYWxGaWxlUGF0aCwgY2Fub25pY2FsUGF0aCk7XG4gICAgICAgICAgICByZXR1cm4gY2Fub25pY2FsUGF0aDtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgdmlzaXQgPSBhc3luYyAoZGlyZWN0b3J5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgIGxldCBkaXJlbnRzOiBEaXJlbnQ8c3RyaW5nPltdO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZGlyZW50cyA9IGF3YWl0IHJlYWRkaXIoZGlyZWN0b3J5LCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgZGlyZW50cy5tYXAoYXN5bmMgKGRpcmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gbm9ybWFsaXplUGF0aChqb2luKGRpcmVjdG9yeSwgZGlyZW50Lm5hbWUpKTtcbiAgICAgICAgICAgICAgICBpZiAoaGFzSWdub3JlZFBhdGhGcmFnbWVudChmaWxlUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZGlyZW50LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHZpc2l0KGZpbGVQYXRoKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgc3RhdHM6IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2Ygc3RhdD4+O1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBzdGF0cyA9IGF3YWl0IHN0YXQoZmlsZVBhdGgpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICAgICAgICBhd2FpdCB2aXNpdChmaWxlUGF0aCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFzdGF0cy5pc0ZpbGUoKSB8fCAhaXNXYXRjaGFibGVGaWxlKGZpbGVQYXRoKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGF3YWl0IGFkZEtub3duRmlsZShmaWxlUGF0aCk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBhd2FpdCB2aXNpdCh0aGlzLmNvbmZpZy53b3JraW5nRGlyKTtcbiAgICAgICAgICByZXR1cm4geyBmaWxlcywgYWxpYXNlcywgYWRkS25vd25GaWxlIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgbWVyZ2VGaWxlQ2hhbmdlcyA9IChcbiAgICAgICAgICBsZWZ0OiBGaWxlQ2hhbmdlcyxcbiAgICAgICAgICByaWdodDogRmlsZUNoYW5nZXNcbiAgICAgICAgKTogRmlsZUNoYW5nZXMgPT4gKHtcbiAgICAgICAgICBhZGRlZEZpbGVzOiB1bmlxdWUoWy4uLmxlZnQuYWRkZWRGaWxlcywgLi4ucmlnaHQuYWRkZWRGaWxlc10pLFxuICAgICAgICAgIG1vZGlmaWVkRmlsZXM6IHVuaXF1ZShbXG4gICAgICAgICAgICAuLi5sZWZ0Lm1vZGlmaWVkRmlsZXMsXG4gICAgICAgICAgICAuLi5yaWdodC5tb2RpZmllZEZpbGVzLFxuICAgICAgICAgIF0pLFxuICAgICAgICAgIHJlbW92ZWRGaWxlczogdW5pcXVlKFsuLi5sZWZ0LnJlbW92ZWRGaWxlcywgLi4ucmlnaHQucmVtb3ZlZEZpbGVzXSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHVuaXF1ZSA9IChwYXRoczogc3RyaW5nW10pID0+IFsuLi5uZXcgU2V0KHBhdGhzKV07XG5cbiAgICAgICAgY29uc3QgY2xhc3NpZnlGaWxlQ2hhbmdlcyA9ICh7XG4gICAgICAgICAgY2hhbmdlZEZpbGVzLFxuICAgICAgICAgIGtub3duRmlsZXMsXG4gICAgICAgICAgcmVtb3ZlZEZpbGVzLFxuICAgICAgICB9OiB7XG4gICAgICAgICAgY2hhbmdlZEZpbGVzOiBzdHJpbmdbXTtcbiAgICAgICAgICBrbm93bkZpbGVzOiBTZXQ8c3RyaW5nPjtcbiAgICAgICAgICByZW1vdmVkRmlsZXM6IHN0cmluZ1tdO1xuICAgICAgICB9KTogRmlsZUNoYW5nZXMgPT4ge1xuICAgICAgICAgIGNvbnN0IGFkZGVkRmlsZXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgY29uc3QgbW9kaWZpZWRGaWxlczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiB1bmlxdWUoY2hhbmdlZEZpbGVzKSkge1xuICAgICAgICAgICAgaWYgKGtub3duRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgICAgICAgIG1vZGlmaWVkRmlsZXMucHVzaChmaWxlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGFkZGVkRmlsZXMucHVzaChmaWxlKTtcbiAgICAgICAgICAgICAga25vd25GaWxlcy5hZGQoZmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIHJlbW92ZWRGaWxlcykge1xuICAgICAgICAgICAga25vd25GaWxlcy5kZWxldGUoZmlsZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFkZGVkRmlsZXMsXG4gICAgICAgICAgICBtb2RpZmllZEZpbGVzLFxuICAgICAgICAgICAgcmVtb3ZlZEZpbGVzOiB1bmlxdWUocmVtb3ZlZEZpbGVzKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGhhc0ZpbGVDaGFuZ2VzID0gKHtcbiAgICAgICAgICBhZGRlZEZpbGVzLFxuICAgICAgICAgIG1vZGlmaWVkRmlsZXMsXG4gICAgICAgICAgcmVtb3ZlZEZpbGVzLFxuICAgICAgICB9OiBGaWxlQ2hhbmdlcykgPT5cbiAgICAgICAgICBhZGRlZEZpbGVzLmxlbmd0aCA+IDAgfHxcbiAgICAgICAgICBtb2RpZmllZEZpbGVzLmxlbmd0aCA+IDAgfHxcbiAgICAgICAgICByZW1vdmVkRmlsZXMubGVuZ3RoID4gMDtcbiAgICAgICAgY29uc3QgbG9nRGV2SG1yID0gKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5XT1JLRkxPV19ERVZfSE1SX0xPR1MgPT09ICcxJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coLi4uYXJncyk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEtub3duIGdhcDogdGhlIGluaXRpYWwgYnVpbGQgaGFzIHRoZSBzYW1lIHR3by1yZWFkIHNoYXBlICh0aGVcbiAgICAgICAgLy8gY29tYmluZWQgYnVpbGQgYWJvdmUgY29uc3VtZWQgc291cmNlcywgYW5kIHRoaXMgcmVmcmVzaCByZS1yZWFkc1xuICAgICAgICAvLyB0aGVtKSwgYnV0IG5vIHBpbm5pbmcsIGFuZCB0aGUgd2F0Y2hlciBiZWxvdyBhdHRhY2hlcyB3aXRoXG4gICAgICAgIC8vIGBpZ25vcmVJbml0aWFsOiB0cnVlYCwgc28gYW4gZWRpdCBsYW5kaW5nIGluc2lkZSB0aGUgc3RhcnR1cCB3aW5kb3dcbiAgICAgICAgLy8gaXMgYWJzb3JiZWQgd2l0aCBubyBzdHJhZ2dsZXIgZXZlbnQgdG8gcmVjb3ZlciBpdC4gQm91bmRlZCBieSBkZXZcbiAgICAgICAgLy8gc2VydmVyIHN0YXJ0dXAgcmF0aGVyIHRoYW4gcmVjdXJyaW5nIHBlciByZWJ1aWxkOyBrbm93aW5nbHkgb3V0IG9mXG4gICAgICAgIC8vIHNjb3BlIGZvciB0aGUgbWlkLXJlYnVpbGQgcGlubmluZyBhYm92ZS5cbiAgICAgICAgYXdhaXQgcmVmcmVzaFNvdXJjZVNuYXBzaG90cygpO1xuICAgICAgICBsZXQge1xuICAgICAgICAgIGZpbGVzOiBrbm93bkZpbGVzLFxuICAgICAgICAgIGFsaWFzZXM6IGtub3duRmlsZUFsaWFzZXMsXG4gICAgICAgICAgYWRkS25vd25GaWxlOiByZW1lbWJlcktub3duRmlsZSxcbiAgICAgICAgfSA9IGF3YWl0IHJlYWRLbm93bkZpbGVzKCk7XG5cbiAgICAgICAgY29uc3QgcmVmcmVzaEtub3duRmlsZXMgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV4dEtub3duID0gYXdhaXQgcmVhZEtub3duRmlsZXMoKTtcbiAgICAgICAgICBrbm93bkZpbGVzID0gbmV4dEtub3duLmZpbGVzO1xuICAgICAgICAgIGtub3duRmlsZUFsaWFzZXMgPSBuZXh0S25vd24uYWxpYXNlcztcbiAgICAgICAgICByZW1lbWJlcktub3duRmlsZSA9IG5leHRLbm93bi5hZGRLbm93bkZpbGU7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJvY2Vzc0ZpbGVDaGFuZ2VzID0gYXN5bmMgKGZpbGVDaGFuZ2VzOiBGaWxlQ2hhbmdlcykgPT4ge1xuICAgICAgICAgIGlmICghaGFzRmlsZUNoYW5nZXMoZmlsZUNoYW5nZXMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZGVjaXNpb24gPSBhd2FpdCBjbGFzc2lmeVJlYnVpbGQoe1xuICAgICAgICAgICAgZGlzY292ZXJlZEVudHJpZXMsXG4gICAgICAgICAgICBmaWxlQ2hhbmdlcyxcbiAgICAgICAgICAgIGlucHV0RmlsZXM6IG9wdGlvbnMuaW5wdXRGaWxlcyxcbiAgICAgICAgICAgIG5vcm1hbGl6ZVBhdGgsXG4gICAgICAgICAgICBwYXJlbnRIYXNDaGlsZCxcbiAgICAgICAgICAgIHJlYWRTbmFwc2hvdDogcmVhZFNvdXJjZVNuYXBzaG90LFxuICAgICAgICAgICAgc291cmNlU25hcHNob3RzLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChkZWNpc2lvbi5raW5kID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgIGxvZ0Rldkhtcignd29ya2Zsb3cgZGV2IGhtcjogc2tpcCcpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbZmlsZSwgc25hcHNob3RdIG9mIGRlY2lzaW9uLnNuYXBzaG90cyB8fCBbXSkge1xuICAgICAgICAgICAgICBzb3VyY2VTbmFwc2hvdHMuc2V0KGZpbGUsIHNuYXBzaG90KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGRlY2lzaW9uLmtpbmQgPT09ICdmdWxsJykge1xuICAgICAgICAgICAgbG9nRGV2SG1yKCd3b3JrZmxvdyBkZXYgaG1yOiBmdWxsIHJlZGlzY292ZXJ5Jyk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhd2FpdCBmdWxsUmVidWlsZCgpO1xuICAgICAgICAgICAgICBhd2FpdCByZWZyZXNoS25vd25GaWxlcygpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgLy8gTGV0cyBhIGxvZyByZWFkZXIgdGVsbCBcInF1aWV0XCIgZnJvbSBcInJlYnVpbGQgaW4gZmxpZ2h0XCIuXG4gICAgICAgICAgICAgIC8vIFRoZSBlMmUgSE1SIHRlc3RzIGRyYWluLXRvLXF1aWV0IGJlZm9yZSBjb3VudGluZyBsaW5lcy5cbiAgICAgICAgICAgICAgbG9nRGV2SG1yKCd3b3JrZmxvdyBkZXYgaG1yOiByZWJ1aWxkIGNvbXBsZXRlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbG9nRGV2SG1yKFxuICAgICAgICAgICAgYHdvcmtmbG93IGRldiBobXI6IGhvdCByZWJ1aWxkJHtkZWNpc2lvbi5yZWZyZXNoU3RlcFJlZ2lzdHJhdGlvbnMgPyAnIHdpdGggc3RlcCByZWdpc3RyYXRpb24gcmVmcmVzaCcgOiAnJ31gXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgaG90UmVidWlsZChkZWNpc2lvbi5yZWZyZXNoU3RlcFJlZ2lzdHJhdGlvbnMpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbZmlsZSwgc25hcHNob3RdIG9mIGRlY2lzaW9uLnNuYXBzaG90cykge1xuICAgICAgICAgICAgICBzb3VyY2VTbmFwc2hvdHMuc2V0KGZpbGUsIHNuYXBzaG90KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgLy8gU2VlIHRoZSBtYXRjaGluZyBsaW5lIG9uIHRoZSBmdWxsIHBhdGggYWJvdmUuXG4gICAgICAgICAgICBsb2dEZXZIbXIoJ3dvcmtmbG93IGRldiBobXI6IHJlYnVpbGQgY29tcGxldGUnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IHBlbmRpbmdGaWxlQ2hhbmdlczogRmlsZUNoYW5nZXMgPSB7XG4gICAgICAgICAgYWRkZWRGaWxlczogW10sXG4gICAgICAgICAgbW9kaWZpZWRGaWxlczogW10sXG4gICAgICAgICAgcmVtb3ZlZEZpbGVzOiBbXSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGZsdXNoVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIGNvbnN0IHNjaGVkdWxlRmlsZUNoYW5nZXMgPSAoZmlsZUNoYW5nZXM6IEZpbGVDaGFuZ2VzKSA9PiB7XG4gICAgICAgICAgcGVuZGluZ0ZpbGVDaGFuZ2VzID0gbWVyZ2VGaWxlQ2hhbmdlcyhcbiAgICAgICAgICAgIHBlbmRpbmdGaWxlQ2hhbmdlcyxcbiAgICAgICAgICAgIGZpbGVDaGFuZ2VzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZmx1c2hUaW1lcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbHVzaFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWxlQ2hhbmdlcyA9IHBlbmRpbmdGaWxlQ2hhbmdlcztcbiAgICAgICAgICAgIHBlbmRpbmdGaWxlQ2hhbmdlcyA9IHtcbiAgICAgICAgICAgICAgYWRkZWRGaWxlczogW10sXG4gICAgICAgICAgICAgIG1vZGlmaWVkRmlsZXM6IFtdLFxuICAgICAgICAgICAgICByZW1vdmVkRmlsZXM6IFtdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZsdXNoVGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBlbnF1ZXVlKCgpID0+IHByb2Nlc3NGaWxlQ2hhbmdlcyhmaWxlQ2hhbmdlcykpO1xuICAgICAgICAgIH0sIDEwKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXNvbHZlRXhpc3RpbmdFdmVudFBhdGggPSBhc3luYyAocGF0aG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplUGF0aChwYXRobmFtZSk7XG4gICAgICAgICAgaWYgKCFpc1dhdGNoYWJsZUZpbGUobm9ybWFsaXplZFBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qga25vd25QYXRoID0ga25vd25GaWxlQWxpYXNlcy5nZXQobm9ybWFsaXplZFBhdGgpO1xuICAgICAgICAgIGlmIChrbm93blBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBrbm93blBhdGg7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlYWxGaWxlUGF0aCA9IG5vcm1hbGl6ZVBhdGgoYXdhaXQgcmVhbHBhdGgobm9ybWFsaXplZFBhdGgpKTtcbiAgICAgICAgICAgIHJldHVybiBrbm93bkZpbGVBbGlhc2VzLmdldChyZWFsRmlsZVBhdGgpID8/IG5vcm1hbGl6ZWRQYXRoO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRQYXRoO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBoYW5kbGVGaWxlQWRkZWQgPSBhc3luYyAocGF0aG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplUGF0aChwYXRobmFtZSk7XG4gICAgICAgICAgaWYgKCFpc1dhdGNoYWJsZUZpbGUobm9ybWFsaXplZFBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdQYXRoID0gYXdhaXQgcmVzb2x2ZUV4aXN0aW5nRXZlbnRQYXRoKG5vcm1hbGl6ZWRQYXRoKTtcbiAgICAgICAgICBjb25zdCB3YXNLbm93biA9IGV4aXN0aW5nUGF0aCA/IGtub3duRmlsZXMuaGFzKGV4aXN0aW5nUGF0aCkgOiBmYWxzZTtcbiAgICAgICAgICBjb25zdCBjYW5vbmljYWxQYXRoID0gYXdhaXQgcmVtZW1iZXJLbm93bkZpbGUobm9ybWFsaXplZFBhdGgpO1xuICAgICAgICAgIGtub3duRmlsZXMuYWRkKGNhbm9uaWNhbFBhdGgpO1xuICAgICAgICAgIHNjaGVkdWxlRmlsZUNoYW5nZXMoe1xuICAgICAgICAgICAgYWRkZWRGaWxlczogd2FzS25vd24gPyBbXSA6IFtjYW5vbmljYWxQYXRoXSxcbiAgICAgICAgICAgIG1vZGlmaWVkRmlsZXM6IHdhc0tub3duID8gW2Nhbm9uaWNhbFBhdGhdIDogW10sXG4gICAgICAgICAgICByZW1vdmVkRmlsZXM6IFtdLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGhhbmRsZUZpbGVDaGFuZ2VkID0gYXN5bmMgKHBhdGhuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBjb25zdCBjYW5vbmljYWxQYXRoID0gYXdhaXQgcmVzb2x2ZUV4aXN0aW5nRXZlbnRQYXRoKHBhdGhuYW1lKTtcbiAgICAgICAgICBpZiAoIWNhbm9uaWNhbFBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBmaWxlQ2hhbmdlcyA9IGNsYXNzaWZ5RmlsZUNoYW5nZXMoe1xuICAgICAgICAgICAgY2hhbmdlZEZpbGVzOiBbY2Fub25pY2FsUGF0aF0sXG4gICAgICAgICAgICBrbm93bkZpbGVzLFxuICAgICAgICAgICAgcmVtb3ZlZEZpbGVzOiBbXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoIWtub3duRmlsZUFsaWFzZXMuaGFzKGNhbm9uaWNhbFBhdGgpKSB7XG4gICAgICAgICAgICBhd2FpdCByZW1lbWJlcktub3duRmlsZShjYW5vbmljYWxQYXRoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2NoZWR1bGVGaWxlQ2hhbmdlcyhmaWxlQ2hhbmdlcyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGFuZGxlRmlsZVJlbW92ZWQgPSAocGF0aG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplUGF0aChwYXRobmFtZSk7XG4gICAgICAgICAgaWYgKCFpc1dhdGNoYWJsZUZpbGUobm9ybWFsaXplZFBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY2Fub25pY2FsUGF0aCA9XG4gICAgICAgICAgICBrbm93bkZpbGVBbGlhc2VzLmdldChub3JtYWxpemVkUGF0aCkgPz8gbm9ybWFsaXplZFBhdGg7XG4gICAgICAgICAgY29uc3QgZmlsZUNoYW5nZXMgPSBjbGFzc2lmeUZpbGVDaGFuZ2VzKHtcbiAgICAgICAgICAgIGNoYW5nZWRGaWxlczogW10sXG4gICAgICAgICAgICBrbm93bkZpbGVzLFxuICAgICAgICAgICAgcmVtb3ZlZEZpbGVzOiBbY2Fub25pY2FsUGF0aF0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAga25vd25GaWxlQWxpYXNlcy5kZWxldGUobm9ybWFsaXplZFBhdGgpO1xuICAgICAgICAgIHNjaGVkdWxlRmlsZUNoYW5nZXMoZmlsZUNoYW5nZXMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHdhdGNoZXIgPSBjaG9raWRhci53YXRjaCh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCB7XG4gICAgICAgICAgaWdub3JlSW5pdGlhbDogdHJ1ZSxcbiAgICAgICAgICBmb2xsb3dTeW1saW5rczogdHJ1ZSxcbiAgICAgICAgICBpZ25vcmVkOiAocGF0aG5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplUGF0aChTdHJpbmcocGF0aG5hbWUpKTtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IGV4dG5hbWUobm9ybWFsaXplZFBhdGgpO1xuICAgICAgICAgICAgaWYgKGV4dGVuc2lvbiAmJiAhd2F0Y2hhYmxlRXh0ZW5zaW9ucy5oYXMoZXh0ZW5zaW9uKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBoYXNJZ25vcmVkUGF0aEZyYWdtZW50KG5vcm1hbGl6ZWRQYXRoKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICB3YXRjaGVyLm9uKCdhZGQnLCAocGF0aG5hbWUpID0+IHtcbiAgICAgICAgICB2b2lkIGhhbmRsZUZpbGVBZGRlZChwYXRobmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB3YXRjaGVyLm9uKCdjaGFuZ2UnLCAocGF0aG5hbWUpID0+IHtcbiAgICAgICAgICB2b2lkIGhhbmRsZUZpbGVDaGFuZ2VkKHBhdGhuYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHdhdGNoZXIub24oJ3VubGluaycsIChwYXRobmFtZSkgPT4ge1xuICAgICAgICAgIGhhbmRsZUZpbGVSZW1vdmVkKHBhdGhuYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHdhdGNoZXIub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignV29ya2Zsb3cgZGV2IHdhdGNoZXIgZXJyb3InLCBlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgICB3YXRjaGVyLm9uKCdyZWFkeScsICgpID0+IHtcbiAgICAgICAgICBsb2dEZXZIbXIoJ3dvcmtmbG93IGRldiBobXI6IHJlYWR5Jyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBnZXRJbnB1dEZpbGVzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgIGNvbnN0IGlucHV0RmlsZXMgPSBhd2FpdCBzdXBlci5nZXRJbnB1dEZpbGVzKCk7XG4gICAgICByZXR1cm4gaW5wdXRGaWxlcy5maWx0ZXIoKGZpbGUpID0+IHtcbiAgICAgICAgY29uc3QgZW50cnkgPSByZWxhdGl2ZSh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCBmaWxlKS5yZXBsYWNlQWxsKFxuICAgICAgICAgICdcXFxcJyxcbiAgICAgICAgICAnLydcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBNYXRjaCBBcHAgUm91dGVyIHJvdXRlLCBwYWdlLCBhbmQgbGF5b3V0IGVudHJ5cG9pbnRzIGluIGFwcC8gb3Igc3JjL2FwcC8uXG4gICAgICAgIGlmICgvXig/OmFwcHxzcmNcXC9hcHApXFwvKD86LipcXC8pPyg/OnJvdXRlfHBhZ2V8bGF5b3V0KVxcLi8udGVzdChlbnRyeSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1hdGNoIGV2ZXJ5IFBhZ2VzIFJvdXRlciBlbnRyeXBvaW50IGluIHBhZ2VzLyBvciBzcmMvcGFnZXMvLlxuICAgICAgICBpZiAoL14oPzpwYWdlc3xzcmNcXC9wYWdlcylcXC8vLnRlc3QoZW50cnkpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNYXRjaCBOZXh0LmpzIHJvb3QgZW50cnlwb2ludHMgYXQgdGhlIHByb2plY3Qgcm9vdCBvciB1bmRlciBzcmMvLlxuICAgICAgICByZXR1cm4gWydpbnN0cnVtZW50YXRpb24nLCAnbWlkZGxld2FyZScsICdwcm94eSddLnNvbWUoKG5hbWUpID0+XG4gICAgICAgICAgdGhpcy5jb25maWcucGFnZUV4dGVuc2lvbnMuc29tZShcbiAgICAgICAgICAgIChleHRlbnNpb24pID0+XG4gICAgICAgICAgICAgIGVudHJ5ID09PSBgJHtuYW1lfS4ke2V4dGVuc2lvbn1gIHx8XG4gICAgICAgICAgICAgIGVudHJ5ID09PSBgc3JjLyR7bmFtZX0uJHtleHRlbnNpb259YFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgd3JpdGVGdW5jdGlvbnNDb25maWcob3V0cHV0RGlyOiBzdHJpbmcpIHtcbiAgICAgIC8vIHdlIGRvbid0IHJ1biB0aGlzIGluIGRldmVsb3BtZW50IG1vZGUgYXMgaXQncyBub3QgbmVlZGVkXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBWMiBjb21iaW5lZCBjb25maWc6IHNpbmdsZSB0cmlnZ2VyIGhhbmRsZXMgYm90aCB3b3JrZmxvdyBhbmQgc3RlcCBleGVjdXRpb24uXG4gICAgICAvLyBUaGUgc3RlcCByb3V0ZSBubyBsb25nZXIgbmVlZHMgaXRzIG93biB0cmlnZ2VyIHNpbmNlIHN0ZXBzIGFyZSBleGVjdXRlZFxuICAgICAgLy8gaW5saW5lIGJ5IHRoZSBjb21iaW5lZCBoYW5kbGVyIG9yIHF1ZXVlZCBiYWNrIHRvIF9fd2tmX3dvcmtmbG93Xyogd2l0aCBzdGVwSWQuXG4gICAgICBjb25zdCBnZW5lcmF0ZWRDb25maWcgPSB7XG4gICAgICAgIHZlcnNpb246ICcwJyxcbiAgICAgICAgd29ya2Zsb3dzOiB7XG4gICAgICAgICAgbWF4RHVyYXRpb246ICdtYXgnLFxuICAgICAgICAgIGV4cGVyaW1lbnRhbFRyaWdnZXJzOiBbZ2V0V29ya2Zsb3dRdWV1ZVRyaWdnZXIoKV0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCB3cml0ZUZpbGVJZkNoYW5nZWQoXG4gICAgICAgIGpvaW4ob3V0cHV0RGlyLCAnLndlbGwta25vd24vd29ya2Zsb3cvdjEvY29uZmlnLmpzb24nKSxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoZ2VuZXJhdGVkQ29uZmlnLCBudWxsLCAyKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWMjogQnVpbGQgY29tYmluZWQgcm91dGUgdGhhdCBoYW5kbGVzIGJvdGggd29ya2Zsb3cgYW5kIHN0ZXAgZXhlY3V0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgYnVpbGRDb21iaW5lZEZ1bmN0aW9uKHtcbiAgICAgIGlucHV0RmlsZXMsXG4gICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICAgIHRzY29uZmlnUGF0aCxcbiAgICB9OiB7XG4gICAgICBpbnB1dEZpbGVzOiBzdHJpbmdbXTtcbiAgICAgIHdvcmtmbG93R2VuZXJhdGVkRGlyOiBzdHJpbmc7XG4gICAgICB0c2NvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgfSkge1xuICAgICAgY29uc3QgZmxvd1JvdXRlRGlyID0gam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ2Zsb3cnKTtcbiAgICAgIGF3YWl0IG1rZGlyKGZsb3dSb3V0ZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNyZWF0ZUNvbWJpbmVkQnVuZGxlKHtcbiAgICAgICAgZm9ybWF0OiAnZXNtJyxcbiAgICAgICAgaW5wdXRGaWxlcyxcbiAgICAgICAgc3RlcHNPdXRmaWxlOiBqb2luKGZsb3dSb3V0ZURpciwgJ19fc3RlcF9yZWdpc3RyYXRpb25zLmpzJyksXG4gICAgICAgIGZsb3dPdXRmaWxlOiBqb2luKGZsb3dSb3V0ZURpciwgJ3JvdXRlLmpzJyksXG4gICAgICAgIGJ1bmRsZUZpbmFsT3V0cHV0OiBmYWxzZSxcbiAgICAgICAgZXh0ZXJuYWxpemVOb25TdGVwczogdHJ1ZSxcbiAgICAgICAgc291cmNlU3RlcFJlZ2lzdHJhdGlvbkltcG9ydHM6IHRydWUsXG4gICAgICAgIHRzY29uZmlnUGF0aCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgYnVpbGRXZWJob29rUm91dGUoe1xuICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgfToge1xuICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXI6IHN0cmluZztcbiAgICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBjb25zdCB3ZWJob29rUm91dGVGaWxlID0gam9pbihcbiAgICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgICAgICd3ZWJob29rL1t0b2tlbl0vcm91dGUuanMnXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5jcmVhdGVXZWJob29rQnVuZGxlKHtcbiAgICAgICAgb3V0ZmlsZTogd2ViaG9va1JvdXRlRmlsZSxcbiAgICAgICAgYnVuZGxlOiBmYWxzZSwgLy8gTmV4dC5qcyBkb2Vzbid0IG5lZWQgYnVuZGxpbmdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZmluZEFwcERpcmVjdG9yeSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgY29uc3QgYXBwRGlyID0gcmVzb2x2ZSh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCAnYXBwJyk7XG4gICAgICBjb25zdCBzcmNBcHBEaXIgPSByZXNvbHZlKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsICdzcmMvYXBwJyk7XG4gICAgICBjb25zdCBwYWdlc0RpciA9IHJlc29sdmUodGhpcy5jb25maWcud29ya2luZ0RpciwgJ3BhZ2VzJyk7XG4gICAgICBjb25zdCBzcmNQYWdlc0RpciA9IHJlc29sdmUodGhpcy5jb25maWcud29ya2luZ0RpciwgJ3NyYy9wYWdlcycpO1xuXG4gICAgICAvLyBIZWxwZXIgdG8gY2hlY2sgaWYgYSBwYXRoIGV4aXN0cyBhbmQgaXMgYSBkaXJlY3RvcnlcbiAgICAgIGNvbnN0IGlzRGlyZWN0b3J5ID0gYXN5bmMgKHBhdGg6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGFjY2VzcyhwYXRoLCBjb25zdGFudHMuRl9PSyk7XG4gICAgICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBzdGF0KHBhdGgpO1xuICAgICAgICAgIGlmICghc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYXRoIGV4aXN0cyBidXQgaXMgbm90IGEgZGlyZWN0b3J5OiAke3BhdGh9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLm1lc3NhZ2UuaW5jbHVkZXMoJ25vdCBhIGRpcmVjdG9yeScpKSB7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIC8vIENoZWNrIGlmIGFwcCBkaXJlY3RvcnkgZXhpc3RzXG4gICAgICBpZiAoYXdhaXQgaXNEaXJlY3RvcnkoYXBwRGlyKSkge1xuICAgICAgICByZXR1cm4gYXBwRGlyO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBzcmMvYXBwIGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGlmIChhd2FpdCBpc0RpcmVjdG9yeShzcmNBcHBEaXIpKSB7XG4gICAgICAgIHJldHVybiBzcmNBcHBEaXI7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIG5vIGFwcCBkaXJlY3RvcnkgZXhpc3RzLCBjaGVjayBmb3IgcGFnZXMgZGlyZWN0b3J5IGFuZCBjcmVhdGUgYXBwIG5leHQgdG8gaXRcbiAgICAgIGlmIChhd2FpdCBpc0RpcmVjdG9yeShwYWdlc0RpcikpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGFwcCBkaXJlY3RvcnkgbmV4dCB0byBwYWdlcyBkaXJlY3RvcnlcbiAgICAgICAgYXdhaXQgbWtkaXIoYXBwRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIGFwcERpcjtcbiAgICAgIH1cblxuICAgICAgaWYgKGF3YWl0IGlzRGlyZWN0b3J5KHNyY1BhZ2VzRGlyKSkge1xuICAgICAgICAvLyBDcmVhdGUgc3JjL2FwcCBkaXJlY3RvcnkgbmV4dCB0byBzcmMvcGFnZXMgZGlyZWN0b3J5XG4gICAgICAgIGF3YWl0IG1rZGlyKHNyY0FwcERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBzcmNBcHBEaXI7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIE5leHQuanMgYXBwIG9yIHBhZ2VzIGRpcmVjdG9yeS4gRXhwZWN0ZWQgb25lIG9mOiBcImFwcFwiLCBcInNyYy9hcHBcIiwgXCJwYWdlc1wiLCBvciBcInNyYy9wYWdlc1wiIHRvIGV4aXN0LidcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgQ2FjaGVkTmV4dEJ1aWxkZXJFYWdlciA9IE5leHRCdWlsZGVyO1xuICByZXR1cm4gTmV4dEJ1aWxkZXI7XG59XG4iXX0=
620
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci1lYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9idWlsZGVyLWVhZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBa0NBLGtFQStCQztBQUtELGtEQXl1QkM7QUEveUJELHFDQUFpRDtBQUNqRCwrQ0FBOEU7QUFDOUUseUNBQXlFO0FBS3pFLHdEQUFnQztBQUVoQyx1REFBK0Q7QUFDL0QseURBUTRCO0FBRTVCLElBQUksc0JBQTJCLENBQUM7QUFDaEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFLDBCQUEwQixDQUV2RCxDQUFDO0FBRWhCLE1BQU0sYUFBYSxHQUNqQixzSkFBc0osQ0FBQztBQUN6SixNQUFNLGlCQUFpQixHQUFHLHFEQUFxRCxDQUFDO0FBQ2hGLE1BQU0sY0FBYyxHQUFHLHdDQUF3QyxDQUFDO0FBQ2hFLE1BQU0sb0JBQW9CLEdBQ3hCLDhEQUE4RCxDQUFDO0FBQ2pFLE1BQU0sZUFBZSxHQUFHLENBQUMsd0JBQXdCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUNyRSxNQUFNLG9CQUFvQixHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBRS9ELFNBQWdCLDJCQUEyQixDQUFDLGNBQWlDO0lBQzNFLE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUUzRSxPQUFPLENBQUMsS0FBYSxFQUFXLEVBQUU7UUFDaEMsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFckQsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUs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cyc7XG5pbXBvcnQgeyBhY2Nlc3MsIG1rZGlyLCByZWFkZGlyLCByZWFscGF0aCwgcm0sIHN0YXQgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGV4dG5hbWUsIGlzQWJzb2x1dGUsIGpvaW4sIHJlbGF0aXZlLCByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB0eXBlIHtcbiAgTmV4dENvbmZpZyBhcyBCdWlsZGVyTmV4dENvbmZpZyxcbiAgV29ya2Zsb3dNYW5pZmVzdCxcbn0gZnJvbSAnQHdvcmtmbG93L2J1aWxkZXJzJztcbmltcG9ydCBjaG9raWRhciBmcm9tICdjaG9raWRhcic7XG5pbXBvcnQgdHlwZSB7IE5leHRDb25maWcgYXMgUHJvamVjdE5leHRDb25maWcgfSBmcm9tICduZXh0JztcbmltcG9ydCB7IGNyZWF0ZVdhdGNoSWdub3JlUHJlZGljYXRlIH0gZnJvbSAnLi93YXRjaC1pZ25vcmUuanMnO1xuaW1wb3J0IHtcbiAgY2xhc3NpZnlSZWJ1aWxkLFxuICBjcmVhdGVTb3VyY2VTbmFwc2hvdCxcbiAgdHlwZSBGaWxlQ2hhbmdlcyxcbiAgZ2V0UmVsZXZhbnRGaWxlcyxcbiAgcGluQmFzZWxpbmVzQWNyb3NzRnVsbFJlYnVpbGQsXG4gIHJlcGxhY2VTb3VyY2VTbmFwc2hvdHMsXG4gIHR5cGUgU291cmNlU25hcHNob3QsXG59IGZyb20gJy4vd2F0Y2gtcmVidWlsZC5qcyc7XG5cbmxldCBDYWNoZWROZXh0QnVpbGRlckVhZ2VyOiBhbnk7XG5jb25zdCBpbXBvcnRFc20gPSBuZXcgRnVuY3Rpb24oJ3NwZWNpZmllcicsICdyZXR1cm4gaW1wb3J0KHNwZWNpZmllciknKSBhcyA8VD4oXG4gIHNwZWNpZmllcjogc3RyaW5nXG4pID0+IFByb21pc2U8VD47XG5cbmNvbnN0IGFwcEVudHJ5cG9pbnQgPVxuICAvXig/OnBhZ2V8cm91dGV8bGF5b3V0fGRlZmF1bHR8ZXJyb3J8bG9hZGluZ3x0ZW1wbGF0ZXxub3QtZm91bmR8Zm9yYmlkZGVufHVuYXV0aG9yaXplZHxzaXRlbWFwfCg/Omljb258YXBwbGUtaWNvbnxvcGVuZ3JhcGgtaW1hZ2V8dHdpdHRlci1pbWFnZSlcXGQ/KSQvO1xuY29uc3QgYXBwUm9vdEVudHJ5cG9pbnQgPSAvXig/Omdsb2JhbC1lcnJvcnxnbG9iYWwtbm90LWZvdW5kfHJvYm90c3xtYW5pZmVzdCkkLztcbmNvbnN0IHJvb3RFbnRyeXBvaW50ID0gL14oPzppbnN0cnVtZW50YXRpb258bWlkZGxld2FyZXxwcm94eSkkLztcbmNvbnN0IHJvb3RNb2R1bGVFbnRyeXBvaW50ID1cbiAgL14oPzppbnN0cnVtZW50YXRpb24tY2xpZW50fG1keC1jb21wb25lbnRzKVxcLig/Om1qc3xbanRdc3g/KSQvO1xuY29uc3Qgcm9vdE1vZHVsZU5hbWVzID0gWydpbnN0cnVtZW50YXRpb24tY2xpZW50JywgJ21keC1jb21wb25lbnRzJ107XG5jb25zdCByb290TW9kdWxlRXh0ZW5zaW9ucyA9IFsnanMnLCAnbWpzJywgJ3RzeCcsICd0cycsICdqc3gnXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU5leHRFbnRyeXBvaW50TWF0Y2hlcihwYWdlRXh0ZW5zaW9uczogcmVhZG9ubHkgc3RyaW5nW10pIHtcbiAgY29uc3QgZXh0ZW5zaW9ucyA9IFsuLi5wYWdlRXh0ZW5zaW9uc10uc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aCk7XG5cbiAgcmV0dXJuIChlbnRyeTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKC9cXC5kXFwuKD86Y3RzfG10c3x0cykkLy50ZXN0KGVudHJ5KSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3Qgc291cmNlRW50cnkgPSBlbnRyeS5yZXBsYWNlKC9ec3JjXFwvLywgJycpO1xuICAgIGNvbnN0IHBhdGggPSBzb3VyY2VFbnRyeS5zcGxpdCgnLycpO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuICAgIGlmIChyb290TW9kdWxlRW50cnlwb2ludC50ZXN0KHNvdXJjZUVudHJ5KSkgcmV0dXJuIHRydWU7XG5cbiAgICBjb25zdCBleHRlbnNpb24gPSBleHRlbnNpb25zLmZpbmQoKGV4dGVuc2lvbikgPT5cbiAgICAgIHNvdXJjZUVudHJ5LmVuZHNXaXRoKGAuJHtleHRlbnNpb259YClcbiAgICApO1xuICAgIGlmICghZXh0ZW5zaW9uKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBuYW1lID0gZmlsZW5hbWUuc2xpY2UoMCwgLWV4dGVuc2lvbi5sZW5ndGggLSAxKTtcbiAgICBpZiAocGF0aFswXSA9PT0gJ3BhZ2VzJykgcmV0dXJuIHRydWU7XG5cbiAgICBpZiAocGF0aFswXSA9PT0gJ2FwcCcpIHtcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gcGF0aC5zbGljZSgxLCAtMSk7XG4gICAgICBpZiAoc2VnbWVudHMuc29tZSgoc2VnbWVudCkgPT4gc2VnbWVudC5zdGFydHNXaXRoKCdfJykpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIGFwcEVudHJ5cG9pbnQudGVzdChuYW1lKSB8fFxuICAgICAgICAocGF0aC5sZW5ndGggPT09IDIgJiYgYXBwUm9vdEVudHJ5cG9pbnQudGVzdChuYW1lKSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvb3RFbnRyeXBvaW50LnRlc3Qoc291cmNlRW50cnkuc2xpY2UoMCwgLWV4dGVuc2lvbi5sZW5ndGggLSAxKSk7XG4gIH07XG59XG5cbi8vIENyZWF0ZSB0aGUgZWFnZXIgTmV4dCBidWlsZGVyIGR5bmFtaWNhbGx5IGJ5IGV4dGVuZGluZyB0aGUgRVNNIEJhc2VCdWlsZGVyLlxuLy8gRXhwb3J0ZWQgYXMgZ2V0TmV4dEJ1aWxkZXJFYWdlcigpIHRvIGFsbG93IENvbW1vbkpTIG1vZHVsZXMgdG8gaW1wb3J0IGZyb21cbi8vIHRoZSBFU00gQHdvcmtmbG93L2J1aWxkZXJzIHBhY2thZ2UgdmlhIGR5bmFtaWMgaW1wb3J0IGF0IHJ1bnRpbWUuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0TmV4dEJ1aWxkZXJFYWdlcihcbiAgYnVpbGRlcnNNb2R1bGU/OiB0eXBlb2YgaW1wb3J0KCdAd29ya2Zsb3cvYnVpbGRlcnMnKVxuKSB7XG4gIGlmIChDYWNoZWROZXh0QnVpbGRlckVhZ2VyKSB7XG4gICAgcmV0dXJuIENhY2hlZE5leHRCdWlsZGVyRWFnZXI7XG4gIH1cblxuICBjb25zdCB7XG4gICAgQmFzZUJ1aWxkZXI6IEJhc2VCdWlsZGVyQ2xhc3MsXG4gICAgZ2V0V29ya2Zsb3dRdWV1ZVRyaWdnZXIsXG4gICAgZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyxcbiAgICBwYXJlbnRIYXNDaGlsZCxcbiAgICB3cml0ZUZpbGVJZkNoYW5nZWQsXG4gIH0gPSBidWlsZGVyc01vZHVsZSA/P1xuICAoYXdhaXQgaW1wb3J0RXNtPHR5cGVvZiBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpPignQHdvcmtmbG93L2J1aWxkZXJzJykpO1xuXG4gIGNsYXNzIE5leHRCdWlsZGVyIGV4dGVuZHMgQmFzZUJ1aWxkZXJDbGFzcyB7XG4gICAgcHJvdGVjdGVkIGRlY2xhcmUgY29uZmlnOiBCdWlsZGVyTmV4dENvbmZpZyAmIHtcbiAgICAgIHBhZ2VFeHRlbnNpb25zOiBOb25OdWxsYWJsZTxQcm9qZWN0TmV4dENvbmZpZ1sncGFnZUV4dGVuc2lvbnMnXT47XG4gICAgICBkaXN0RGlyOiBzdHJpbmc7XG4gICAgfTtcblxuICAgIGFzeW5jIGJ1aWxkKCkge1xuICAgICAgY29uc3Qgb3V0cHV0RGlyID0gYXdhaXQgdGhpcy5maW5kQXBwRGlyZWN0b3J5KCk7XG4gICAgICBjb25zdCB3b3JrZmxvd0dlbmVyYXRlZERpciA9IGpvaW4ob3V0cHV0RGlyLCAnLndlbGwta25vd24vd29ya2Zsb3cvdjEnKTtcblxuICAgICAgLy8gRW5zdXJlIG91dHB1dCBkaXJlY3RvcmllcyBleGlzdFxuICAgICAgYXdhaXQgbWtkaXIod29ya2Zsb3dHZW5lcmF0ZWREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgaWYgKCF0aGlzLmNvbmZpZy53YXRjaCkge1xuICAgICAgICAvLyBQcm9kdWN0aW9uIGJ1aWxkIGNhY2hlcyBtYXkgc3RpbGwgY29udGFpbiB0aGUgcmV0aXJlZCBzdGVwIHJvdXRlLlxuICAgICAgICBhd2FpdCBybShqb2luKHdvcmtmbG93R2VuZXJhdGVkRGlyLCAnc3RlcCcpLCB7XG4gICAgICAgICAgcmVjdXJzaXZlOiB0cnVlLFxuICAgICAgICAgIGZvcmNlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHdyaXRlRmlsZUlmQ2hhbmdlZChqb2luKHdvcmtmbG93R2VuZXJhdGVkRGlyLCAnLmdpdGlnbm9yZScpLCAnKicpO1xuXG4gICAgICBjb25zdCBpbnB1dEZpbGVzID0gYXdhaXQgdGhpcy5nZXRJbnB1dEZpbGVzKCk7XG4gICAgICBjb25zdCB0c2NvbmZpZ1BhdGggPSBhd2FpdCB0aGlzLmZpbmRUc0NvbmZpZ1BhdGgoKTtcblxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgaW5wdXRGaWxlcyxcbiAgICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgICAgIHRzY29uZmlnUGF0aCxcbiAgICAgIH07XG5cbiAgICAgIC8vIFYyOiBCdWlsZCBjb21iaW5lZCByb3V0ZSAocmVwbGFjZXMgc2VwYXJhdGUgc3RlcCArIGZsb3cgcm91dGVzKVxuICAgICAgY29uc3QgY29tYmluZWRSZXN1bHQgPSBhd2FpdCB0aGlzLmJ1aWxkQ29tYmluZWRGdW5jdGlvbihvcHRpb25zKTtcbiAgICAgIGF3YWl0IHRoaXMuYnVpbGRXZWJob29rUm91dGUoeyB3b3JrZmxvd0dlbmVyYXRlZERpciB9KTtcblxuICAgICAgY29uc3Qgd3JpdGVNYW5pZmVzdCA9IGFzeW5jIChcbiAgICAgICAgc291cmNlTWFuaWZlc3Q6IFdvcmtmbG93TWFuaWZlc3QgfCB1bmRlZmluZWRcbiAgICAgICkgPT4ge1xuICAgICAgICBjb25zdCBtYW5pZmVzdCA9IHtcbiAgICAgICAgICBzdGVwczogeyAuLi5zb3VyY2VNYW5pZmVzdD8uc3RlcHMgfSxcbiAgICAgICAgICB3b3JrZmxvd3M6IHsgLi4uc291cmNlTWFuaWZlc3Q/LndvcmtmbG93cyB9LFxuICAgICAgICAgIGNsYXNzZXM6IHsgLi4uc291cmNlTWFuaWZlc3Q/LmNsYXNzZXMgfSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBXcml0ZSBtYW5pZmVzdFxuICAgICAgICBjb25zdCB3b3JrZmxvd0J1bmRsZVBhdGggPSBqb2luKHdvcmtmbG93R2VuZXJhdGVkRGlyLCAnZmxvdy9yb3V0ZS5qcycpO1xuICAgICAgICBjb25zdCBtYW5pZmVzdEpzb24gPSBhd2FpdCB0aGlzLmNyZWF0ZU1hbmlmZXN0KHtcbiAgICAgICAgICB3b3JrZmxvd0J1bmRsZVBhdGgsXG4gICAgICAgICAgbWFuaWZlc3REaXI6IHdvcmtmbG93R2VuZXJhdGVkRGlyLFxuICAgICAgICAgIG1hbmlmZXN0LFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBFeHBvc2UgbWFuaWZlc3QgYXMgYSBzdGF0aWMgZmlsZSB3aGVuIFdPUktGTE9XX1BVQkxJQ19NQU5JRkVTVD0xLlxuICAgICAgICBpZiAodGhpcy5zaG91bGRFeHBvc2VQdWJsaWNNYW5pZmVzdCAmJiBtYW5pZmVzdEpzb24pIHtcbiAgICAgICAgICBjb25zdCBwdWJsaWNNYW5pZmVzdERpciA9IGpvaW4oXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy53b3JraW5nRGlyLFxuICAgICAgICAgICAgJ3B1YmxpYy8ud2VsbC1rbm93bi93b3JrZmxvdy92MSdcbiAgICAgICAgICApO1xuICAgICAgICAgIGF3YWl0IG1rZGlyKHB1YmxpY01hbmlmZXN0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuVkVSQ0VMX0RFUExPWU1FTlRfSUQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXdhaXQgd3JpdGVGaWxlSWZDaGFuZ2VkKFxuICAgICAgICAgICAgICBqb2luKHB1YmxpY01hbmlmZXN0RGlyLCAnLmdpdGlnbm9yZScpLFxuICAgICAgICAgICAgICAnKidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFdyaXR0ZW4gZnJvbSB0aGUgc2FtZSBzdHJpbmcgcmF0aGVyIHRoYW4gY29waWVkLCBzbyBhbiB1bmNoYW5nZWRcbiAgICAgICAgICAvLyBtYW5pZmVzdCBsZWF2ZXMgdGhlIHB1YmxpYyBjb3B5IHVudG91Y2hlZCB0b28uXG4gICAgICAgICAgYXdhaXQgd3JpdGVGaWxlSWZDaGFuZ2VkKFxuICAgICAgICAgICAgam9pbihwdWJsaWNNYW5pZmVzdERpciwgJ21hbmlmZXN0Lmpzb24nKSxcbiAgICAgICAgICAgIG1hbmlmZXN0SnNvblxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IHdyaXRlTWFuaWZlc3QoY29tYmluZWRSZXN1bHQ/Lm1hbmlmZXN0KTtcblxuICAgICAgYXdhaXQgdGhpcy53cml0ZUZ1bmN0aW9uc0NvbmZpZyhvdXRwdXREaXIpO1xuXG4gICAgICBpZiAodGhpcy5jb25maWcud2F0Y2gpIHtcbiAgICAgICAgLy8gVE9ETzogaW1wbGVtZW50IHdhdGNoIG1vZGUgZm9yIGNvbWJpbmVkIGJ1bmRsZVxuICAgICAgICAvLyBGb3Igbm93LCBmYWxsIGJhY2sgdG8gZnVsbCByZWJ1aWxkIG9uIGZpbGUgY2hhbmdlc1xuICAgICAgICBpZiAoIWNvbWJpbmVkUmVzdWx0Py5pbnRlcmltQnVuZGxlQ3R4IHx8ICFjb21iaW5lZFJlc3VsdC5idW5kbGVGaW5hbCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdJbnZhcmlhbnQ6IGV4cGVjdGVkIHdvcmtmbG93IGJ1aWxkIGNvbnRleHQgaW4gd2F0Y2ggbW9kZSdcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RlcCByZWdpc3RyYXRpb25zIG1heSBiZSBlbWl0dGVkIGFzIHNvdXJjZSBpbXBvcnRzIHdpdGhvdXQgYW5cbiAgICAgICAgLy8gZXNidWlsZCBjb250ZXh0IHdoZW4gZXh0ZXJuYWxpemVOb25TdGVwcyBpcyBlbmFibGVkLlxuICAgICAgICBsZXQgc3RlcHNDdHggPSBjb21iaW5lZFJlc3VsdC5zdGVwc0NvbnRleHQ7XG4gICAgICAgIGxldCB3b3JrZmxvd3NDdHggPSB7XG4gICAgICAgICAgaW50ZXJpbUJ1bmRsZUN0eDogY29tYmluZWRSZXN1bHQuaW50ZXJpbUJ1bmRsZUN0eCxcbiAgICAgICAgICBidW5kbGVGaW5hbDogY29tYmluZWRSZXN1bHQuYnVuZGxlRmluYWwsXG4gICAgICAgIH07XG4gICAgICAgIGxldCBkaXNjb3ZlcmVkRW50cmllcyA9IGNvbWJpbmVkUmVzdWx0LmRpc2NvdmVyZWRFbnRyaWVzO1xuICAgICAgICBsZXQgc3RlcHNNYW5pZmVzdCA9IGNvbWJpbmVkUmVzdWx0LnN0ZXBzTWFuaWZlc3Q7XG4gICAgICAgIGxldCB3b3JrZmxvd3NNYW5pZmVzdCA9IGNvbWJpbmVkUmVzdWx0LndvcmtmbG93c01hbmlmZXN0O1xuICAgICAgICBjb25zdCBzdGVwc091dGZpbGUgPSBqb2luKFxuICAgICAgICAgIHdvcmtmbG93R2VuZXJhdGVkRGlyLFxuICAgICAgICAgICdmbG93JyxcbiAgICAgICAgICAnX19zdGVwX3JlZ2lzdHJhdGlvbnMuanMnXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplUGF0aCA9IChwYXRobmFtZTogc3RyaW5nKSA9PlxuICAgICAgICAgIChpc0Fic29sdXRlKHBhdGhuYW1lKVxuICAgICAgICAgICAgPyBwYXRobmFtZVxuICAgICAgICAgICAgOiByZXNvbHZlKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsIHBhdGhuYW1lKVxuICAgICAgICAgICkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICAgICAgICBjb25zdCBzb3VyY2VTbmFwc2hvdHMgPSBuZXcgTWFwPHN0cmluZywgU291cmNlU25hcHNob3Q+KCk7XG5cbiAgICAgICAgY29uc3Qgd2F0Y2hhYmxlRXh0ZW5zaW9ucyA9IG5ldyBTZXQoW1xuICAgICAgICAgICcuanMnLFxuICAgICAgICAgICcuanN4JyxcbiAgICAgICAgICAnLnRzJyxcbiAgICAgICAgICAnLnRzeCcsXG4gICAgICAgICAgJy5tdHMnLFxuICAgICAgICAgICcuY3RzJyxcbiAgICAgICAgICAnLmNqcycsXG4gICAgICAgICAgJy5tanMnLFxuICAgICAgICBdKTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZEdlbmVyYXRlZERpciA9IHdvcmtmbG93R2VuZXJhdGVkRGlyLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZERpc3REaXIgPSBub3JtYWxpemVQYXRoKHRoaXMuY29uZmlnLmRpc3REaXIpO1xuXG4gICAgICAgIC8vIFBydW5lIHRoZSBkZXYgd2F0Y2ggc2V0IHRvIGtlZXAgY2hva2lkYXIgZnJvbSByZWdpc3RlcmluZyBhblxuICAgICAgICAvLyBmcy53YXRjaCBwZXIgZGlyZWN0b3J5IGFjcm9zcyB0aGUgd2hvbGUgcHJvamVjdCB0cmVlIChjaG9raWRhciA0XG4gICAgICAgIC8vIGRyb3BwZWQgZnNldmVudHMsIHNvIG9uIG1hY09TIHRoYXQgZXhoYXVzdHMgdGhlIGZkIGxpbWl0IC0+IEVNRklMRVxuICAgICAgICAvLyBvbiBsYXJnZSBtb25vcmVwb3MpLiBUaGlzIGhvbm9ycyBgLmdpdGlnbm9yZWAgYW5kIHRoZVxuICAgICAgICAvLyBXT1JLRkxPV19ERVZfV0FUQ0hfSUdOT1JFRF9QQVRIUyBlbnYgdmFyIGluIGFkZGl0aW9uIHRvIHRoZVxuICAgICAgICAvLyBidWlsdC1pbiBmcmFnbWVudHMuIFRoZSBnZW5lcmF0ZWQgd29ya2Zsb3cgZGlyIGlzIHBhc3NlZCBhcyBhblxuICAgICAgICAvLyBleHRyYSBmcmFnbWVudCBzbyBpdCBpcyBwcnVuZWQgcmVnYXJkbGVzcyBvZiBgLmdpdGlnbm9yZWAuXG4gICAgICAgIGNvbnN0IGlzSWdub3JlZFdhdGNoUGF0aCA9IGNyZWF0ZVdhdGNoSWdub3JlUHJlZGljYXRlKHtcbiAgICAgICAgICB3b3JraW5nRGlyOiB0aGlzLmNvbmZpZy53b3JraW5nRGlyLFxuICAgICAgICAgIHByb2plY3RSb290OiB0aGlzLnRyYW5zZm9ybVByb2plY3RSb290LFxuICAgICAgICAgIGV4dHJhRnJhZ21lbnRzOiBbbm9ybWFsaXplZEdlbmVyYXRlZERpcl0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGhhc0lnbm9yZWRQYXRoRnJhZ21lbnQgPSAobm9ybWFsaXplZFBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRQYXRoID09PSBub3JtYWxpemVkRGlzdERpciB8fFxuICAgICAgICAgICAgbm9ybWFsaXplZFBhdGguc3RhcnRzV2l0aChgJHtub3JtYWxpemVkRGlzdERpcn0vYClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaXNJZ25vcmVkV2F0Y2hQYXRoKG5vcm1hbGl6ZWRQYXRoKTtcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgcmVidWlsZFF1ZXVlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICAgICAgY29uc3QgZW5xdWV1ZSA9ICh0YXNrOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSA9PiB7XG4gICAgICAgICAgcmVidWlsZFF1ZXVlID0gcmVidWlsZFF1ZXVlLnRoZW4odGFzaykuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gcHJvY2VzcyBmaWxlIGNoYW5nZScsIGVycm9yKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gcmVidWlsZFF1ZXVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlYWRTb3VyY2VTbmFwc2hvdCA9IChmaWxlOiBzdHJpbmcpID0+XG4gICAgICAgICAgY3JlYXRlU291cmNlU25hcHNob3QoeyBmaWxlLCBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlZnJlc2hTb3VyY2VTbmFwc2hvdHMgPSAoKSA9PlxuICAgICAgICAgIHJlcGxhY2VTb3VyY2VTbmFwc2hvdHMoe1xuICAgICAgICAgICAgZGlzY292ZXJlZEVudHJpZXMsXG4gICAgICAgICAgICBpbnB1dEZpbGVzOiBvcHRpb25zLmlucHV0RmlsZXMsXG4gICAgICAgICAgICBub3JtYWxpemVQYXRoLFxuICAgICAgICAgICAgcmVhZFNuYXBzaG90OiByZWFkU291cmNlU25hcHNob3QsXG4gICAgICAgICAgICBzb3VyY2VTbmFwc2hvdHMsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgbWVyZ2VDb21iaW5lZE1hbmlmZXN0ID0gKFxuICAgICAgICAgIG5leHRTdGVwc01hbmlmZXN0OiBXb3JrZmxvd01hbmlmZXN0XG4gICAgICAgICk6IFdvcmtmbG93TWFuaWZlc3QgPT4gKHtcbiAgICAgICAgICAuLi5uZXh0U3RlcHNNYW5pZmVzdCxcbiAgICAgICAgICB3b3JrZmxvd3M6IHtcbiAgICAgICAgICAgIC4uLm5leHRTdGVwc01hbmlmZXN0LndvcmtmbG93cyxcbiAgICAgICAgICAgIC4uLndvcmtmbG93c01hbmlmZXN0LndvcmtmbG93cyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNsYXNzZXM6IHtcbiAgICAgICAgICAgIC4uLm5leHRTdGVwc01hbmlmZXN0LmNsYXNzZXMsXG4gICAgICAgICAgICAuLi53b3JrZmxvd3NNYW5pZmVzdC5jbGFzc2VzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGhvdFJlYnVpbGQgPSBhc3luYyAocmVmcmVzaFN0ZXBSZWdpc3RyYXRpb25zOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgaWYgKHJlZnJlc2hTdGVwUmVnaXN0cmF0aW9ucykge1xuICAgICAgICAgICAgaWYgKHN0ZXBzQ3R4KSB7XG4gICAgICAgICAgICAgIGF3YWl0IHN0ZXBzQ3R4LnJlYnVpbGQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0ZXBzTWFuaWZlc3QgPSBhd2FpdCB0aGlzLmNyZWF0ZVN0ZXBTb3VyY2VSZWdpc3RyYXRpb25GaWxlKHtcbiAgICAgICAgICAgICAgICBpbnB1dEZpbGVzOiBvcHRpb25zLmlucHV0RmlsZXMsXG4gICAgICAgICAgICAgICAgb3V0ZmlsZTogc3RlcHNPdXRmaWxlLFxuICAgICAgICAgICAgICAgIHRzY29uZmlnUGF0aCxcbiAgICAgICAgICAgICAgICBkaXNjb3ZlcmVkRW50cmllcyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgd29ya2Zsb3dSZXN1bHQgPSBhd2FpdCB3b3JrZmxvd3NDdHguaW50ZXJpbUJ1bmRsZUN0eC5yZWJ1aWxkKCk7XG4gICAgICAgICAgY29uc3Qgd29ya2Zsb3dPdXRwdXQgPSB3b3JrZmxvd1Jlc3VsdC5vdXRwdXRGaWxlcz8uWzBdPy50ZXh0O1xuICAgICAgICAgIGlmICghd29ya2Zsb3dPdXRwdXQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgJ0ludmFyaWFudDogZXhwZWN0ZWQgd29ya2Zsb3cgb3V0cHV0IGZyb20gaG90IHJlYnVpbGQnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGF3YWl0IHdvcmtmbG93c0N0eC5idW5kbGVGaW5hbCh3b3JrZmxvd091dHB1dCk7XG4gICAgICAgICAgYXdhaXQgd3JpdGVNYW5pZmVzdChtZXJnZUNvbWJpbmVkTWFuaWZlc3Qoc3RlcHNNYW5pZmVzdCkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFRoZSBwaW4gaGVscGVyIG93bnMgdGhlIGNhcHR1cmUtYmVmb3JlLWJ1aWxkIC8gcmVzdG9yZS1hZnRlci1cbiAgICAgICAgLy8gcmVmcmVzaCBvcmRlcmluZyAoaW5jbHVkaW5nIHRoYXQgdGhlIGNhcHR1cmUgcmVhZHMgdGhlIENVUlJFTlRcbiAgICAgICAgLy8gZGlzY292ZXJlZCBlbnRyaWVzIGFuZCBpbnB1dCBmaWxlcywgYmVmb3JlIHRoZSByZWJ1aWxkIHJlcGxhY2VzXG4gICAgICAgIC8vIHRoZW0pLCBzbyBhbiBlZGl0IGxhbmRpbmcgd2hpbGUgdGhlIG11bHRpLXNlY29uZCByZWJ1aWxkIHJ1bnMgc3RpbGxcbiAgICAgICAgLy8gZGlmZnMgYWdhaW5zdCB3aGF0IHRoZSByZWJ1aWxkIGNvbnN1bWVkIGluc3RlYWQgb2YgYmVpbmcgYWJzb3JiZWRcbiAgICAgICAgLy8gaW50byB0aGUgcmVmcmVzaGVkIGJhc2VsaW5lLiBTZWUgYHBpbkJhc2VsaW5lc0Fjcm9zc0Z1bGxSZWJ1aWxkYFxuICAgICAgICAvLyBmb3IgdGhlIGZ1bGwgcmVhc29uaW5nLlxuICAgICAgICBjb25zdCBmdWxsUmVidWlsZCA9ICgpID0+XG4gICAgICAgICAgcGluQmFzZWxpbmVzQWNyb3NzRnVsbFJlYnVpbGQoe1xuICAgICAgICAgICAgZGlzY292ZXJlZEVudHJpZXMsXG4gICAgICAgICAgICBpbnB1dEZpbGVzOiBvcHRpb25zLmlucHV0RmlsZXMsXG4gICAgICAgICAgICBub3JtYWxpemVQYXRoLFxuICAgICAgICAgICAgcmVhZFNuYXBzaG90OiByZWFkU291cmNlU25hcHNob3QsXG4gICAgICAgICAgICBzb3VyY2VTbmFwc2hvdHMsXG4gICAgICAgICAgICByZWJ1aWxkOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJEaXNjb3ZlcmVkRW50cmllc0NhY2hlKCk7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld0lucHV0RmlsZXMgPSBhd2FpdCB0aGlzLmdldElucHV0RmlsZXMoKTtcbiAgICAgICAgICAgICAgb3B0aW9ucy5pbnB1dEZpbGVzID0gbmV3SW5wdXRGaWxlcztcblxuICAgICAgICAgICAgICBhd2FpdCBzdGVwc0N0eD8uZGlzcG9zZSgpO1xuICAgICAgICAgICAgICBhd2FpdCB3b3JrZmxvd3NDdHguaW50ZXJpbUJ1bmRsZUN0eC5kaXNwb3NlKCk7XG5cbiAgICAgICAgICAgICAgY29uc3QgbmV3Q29tYmluZWQgPSBhd2FpdCB0aGlzLmJ1aWxkQ29tYmluZWRGdW5jdGlvbihvcHRpb25zKTtcbiAgICAgICAgICAgICAgc3RlcHNDdHggPSBuZXdDb21iaW5lZC5zdGVwc0NvbnRleHQ7XG4gICAgICAgICAgICAgIGRpc2NvdmVyZWRFbnRyaWVzID0gbmV3Q29tYmluZWQuZGlzY292ZXJlZEVudHJpZXM7XG4gICAgICAgICAgICAgIHN0ZXBzTWFuaWZlc3QgPSBuZXdDb21iaW5lZC5zdGVwc01hbmlmZXN0O1xuICAgICAgICAgICAgICB3b3JrZmxvd3NNYW5pZmVzdCA9IG5ld0NvbWJpbmVkLndvcmtmbG93c01hbmlmZXN0O1xuXG4gICAgICAgICAgICAgIGlmICghbmV3Q29tYmluZWQ/LmludGVyaW1CdW5kbGVDdHggfHwgIW5ld0NvbWJpbmVkPy5idW5kbGVGaW5hbCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICdJbnZhcmlhbnQ6IGV4cGVjdGVkIHdvcmtmbG93cyBidW5kbGUgY29udGV4dCBhZnRlciByZWJ1aWxkJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgd29ya2Zsb3dzQ3R4ID0ge1xuICAgICAgICAgICAgICAgIGludGVyaW1CdW5kbGVDdHg6IG5ld0NvbWJpbmVkLmludGVyaW1CdW5kbGVDdHgsXG4gICAgICAgICAgICAgICAgYnVuZGxlRmluYWw6IG5ld0NvbWJpbmVkLmJ1bmRsZUZpbmFsLFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGF3YWl0IHdyaXRlTWFuaWZlc3QobmV3Q29tYmluZWQubWFuaWZlc3QpO1xuICAgICAgICAgICAgICBhd2FpdCByZWZyZXNoU291cmNlU25hcHNob3RzKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGlzV2F0Y2hhYmxlRmlsZSA9IChwYXRoOiBzdHJpbmcpID0+XG4gICAgICAgICAgd2F0Y2hhYmxlRXh0ZW5zaW9ucy5oYXMoZXh0bmFtZShwYXRoKSk7XG5cbiAgICAgICAgY29uc3QgcmVhZEtub3duRmlsZXMgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICBjb25zdCBhbGlhc2VzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICAgICAgICBjb25zdCByZWxldmFudEZpbGVzID0gZ2V0UmVsZXZhbnRGaWxlcyh7XG4gICAgICAgICAgICBkaXNjb3ZlcmVkRW50cmllcyxcbiAgICAgICAgICAgIGlucHV0RmlsZXM6IG9wdGlvbnMuaW5wdXRGaWxlcyxcbiAgICAgICAgICAgIG5vcm1hbGl6ZVBhdGgsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBhZGRLbm93bkZpbGUgPSBhc3luYyAoZmlsZVBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgbGV0IHJlYWxGaWxlUGF0aCA9IGZpbGVQYXRoO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmVhbEZpbGVQYXRoID0gbm9ybWFsaXplUGF0aChhd2FpdCByZWFscGF0aChmaWxlUGF0aCkpO1xuICAgICAgICAgICAgfSBjYXRjaCB7fVxuXG4gICAgICAgICAgICBjb25zdCBjYW5vbmljYWxQYXRoID0gcmVsZXZhbnRGaWxlcy5oYXMocmVhbEZpbGVQYXRoKVxuICAgICAgICAgICAgICA/IHJlYWxGaWxlUGF0aFxuICAgICAgICAgICAgICA6IGZpbGVQYXRoO1xuICAgICAgICAgICAgZmlsZXMuYWRkKGNhbm9uaWNhbFBhdGgpO1xuICAgICAgICAgICAgYWxpYXNlcy5zZXQoZmlsZVBhdGgsIGNhbm9uaWNhbFBhdGgpO1xuICAgICAgICAgICAgYWxpYXNlcy5zZXQocmVhbEZpbGVQYXRoLCBjYW5vbmljYWxQYXRoKTtcbiAgICAgICAgICAgIHJldHVybiBjYW5vbmljYWxQYXRoO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCB2aXNpdCA9IGFzeW5jIChkaXJlY3Rvcnk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgbGV0IGRpcmVudHM6IERpcmVudDxzdHJpbmc+W107XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBkaXJlbnRzID0gYXdhaXQgcmVhZGRpcihkaXJlY3RvcnksIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICBkaXJlbnRzLm1hcChhc3luYyAoZGlyZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBub3JtYWxpemVQYXRoKGpvaW4oZGlyZWN0b3J5LCBkaXJlbnQubmFtZSkpO1xuICAgICAgICAgICAgICAgIGlmIChoYXNJZ25vcmVkUGF0aEZyYWdtZW50KGZpbGVQYXRoKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChkaXJlbnQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgICAgICAgICAgYXdhaXQgdmlzaXQoZmlsZVBhdGgpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBzdGF0czogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBzdGF0Pj47XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIHN0YXRzID0gYXdhaXQgc3RhdChmaWxlUGF0aCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHZpc2l0KGZpbGVQYXRoKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIXN0YXRzLmlzRmlsZSgpIHx8ICFpc1dhdGNoYWJsZUZpbGUoZmlsZVBhdGgpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYXdhaXQgYWRkS25vd25GaWxlKGZpbGVQYXRoKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGF3YWl0IHZpc2l0KHRoaXMuY29uZmlnLndvcmtpbmdEaXIpO1xuICAgICAgICAgIHJldHVybiB7IGZpbGVzLCBhbGlhc2VzLCBhZGRLbm93bkZpbGUgfTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBtZXJnZUZpbGVDaGFuZ2VzID0gKFxuICAgICAgICAgIGxlZnQ6IEZpbGVDaGFuZ2VzLFxuICAgICAgICAgIHJpZ2h0OiBGaWxlQ2hhbmdlc1xuICAgICAgICApOiBGaWxlQ2hhbmdlcyA9PiAoe1xuICAgICAgICAgIGFkZGVkRmlsZXM6IHVuaXF1ZShbLi4ubGVmdC5hZGRlZEZpbGVzLCAuLi5yaWdodC5hZGRlZEZpbGVzXSksXG4gICAgICAgICAgbW9kaWZpZWRGaWxlczogdW5pcXVlKFtcbiAgICAgICAgICAgIC4uLmxlZnQubW9kaWZpZWRGaWxlcyxcbiAgICAgICAgICAgIC4uLnJpZ2h0Lm1vZGlmaWVkRmlsZXMsXG4gICAgICAgICAgXSksXG4gICAgICAgICAgcmVtb3ZlZEZpbGVzOiB1bmlxdWUoWy4uLmxlZnQucmVtb3ZlZEZpbGVzLCAuLi5yaWdodC5yZW1vdmVkRmlsZXNdKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdW5pcXVlID0gKHBhdGhzOiBzdHJpbmdbXSkgPT4gWy4uLm5ldyBTZXQocGF0aHMpXTtcblxuICAgICAgICBjb25zdCBjbGFzc2lmeUZpbGVDaGFuZ2VzID0gKHtcbiAgICAgICAgICBjaGFuZ2VkRmlsZXMsXG4gICAgICAgICAga25vd25GaWxlcyxcbiAgICAgICAgICByZW1vdmVkRmlsZXMsXG4gICAgICAgIH06IHtcbiAgICAgICAgICBjaGFuZ2VkRmlsZXM6IHN0cmluZ1tdO1xuICAgICAgICAgIGtub3duRmlsZXM6IFNldDxzdHJpbmc+O1xuICAgICAgICAgIHJlbW92ZWRGaWxlczogc3RyaW5nW107XG4gICAgICAgIH0pOiBGaWxlQ2hhbmdlcyA9PiB7XG4gICAgICAgICAgY29uc3QgYWRkZWRGaWxlczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICBjb25zdCBtb2RpZmllZEZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIHVuaXF1ZShjaGFuZ2VkRmlsZXMpKSB7XG4gICAgICAgICAgICBpZiAoa25vd25GaWxlcy5oYXMoZmlsZSkpIHtcbiAgICAgICAgICAgICAgbW9kaWZpZWRGaWxlcy5wdXNoKGZpbGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYWRkZWRGaWxlcy5wdXNoKGZpbGUpO1xuICAgICAgICAgICAgICBrbm93bkZpbGVzLmFkZChmaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgcmVtb3ZlZEZpbGVzKSB7XG4gICAgICAgICAgICBrbm93bkZpbGVzLmRlbGV0ZShmaWxlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWRkZWRGaWxlcyxcbiAgICAgICAgICAgIG1vZGlmaWVkRmlsZXMsXG4gICAgICAgICAgICByZW1vdmVkRmlsZXM6IHVuaXF1ZShyZW1vdmVkRmlsZXMpLFxuICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGFzRmlsZUNoYW5nZXMgPSAoe1xuICAgICAgICAgIGFkZGVkRmlsZXMsXG4gICAgICAgICAgbW9kaWZpZWRGaWxlcyxcbiAgICAgICAgICByZW1vdmVkRmlsZXMsXG4gICAgICAgIH06IEZpbGVDaGFuZ2VzKSA9PlxuICAgICAgICAgIGFkZGVkRmlsZXMubGVuZ3RoID4gMCB8fFxuICAgICAgICAgIG1vZGlmaWVkRmlsZXMubGVuZ3RoID4gMCB8fFxuICAgICAgICAgIHJlbW92ZWRGaWxlcy5sZW5ndGggPiAwO1xuICAgICAgICBjb25zdCBsb2dEZXZIbXIgPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52LldPUktGTE9XX0RFVl9ITVJfTE9HUyA9PT0gJzEnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyguLi5hcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gS25vd24gZ2FwOiB0aGUgaW5pdGlhbCBidWlsZCBoYXMgdGhlIHNhbWUgdHdvLXJlYWQgc2hhcGUgKHRoZVxuICAgICAgICAvLyBjb21iaW5lZCBidWlsZCBhYm92ZSBjb25zdW1lZCBzb3VyY2VzLCBhbmQgdGhpcyByZWZyZXNoIHJlLXJlYWRzXG4gICAgICAgIC8vIHRoZW0pLCBidXQgbm8gcGlubmluZywgYW5kIHRoZSB3YXRjaGVyIGJlbG93IGF0dGFjaGVzIHdpdGhcbiAgICAgICAgLy8gYGlnbm9yZUluaXRpYWw6IHRydWVgLCBzbyBhbiBlZGl0IGxhbmRpbmcgaW5zaWRlIHRoZSBzdGFydHVwIHdpbmRvd1xuICAgICAgICAvLyBpcyBhYnNvcmJlZCB3aXRoIG5vIHN0cmFnZ2xlciBldmVudCB0byByZWNvdmVyIGl0LiBCb3VuZGVkIGJ5IGRldlxuICAgICAgICAvLyBzZXJ2ZXIgc3RhcnR1cCByYXRoZXIgdGhhbiByZWN1cnJpbmcgcGVyIHJlYnVpbGQ7IGtub3dpbmdseSBvdXQgb2ZcbiAgICAgICAgLy8gc2NvcGUgZm9yIHRoZSBtaWQtcmVidWlsZCBwaW5uaW5nIGFib3ZlLlxuICAgICAgICBhd2FpdCByZWZyZXNoU291cmNlU25hcHNob3RzKCk7XG4gICAgICAgIGxldCB7XG4gICAgICAgICAgZmlsZXM6IGtub3duRmlsZXMsXG4gICAgICAgICAgYWxpYXNlczoga25vd25GaWxlQWxpYXNlcyxcbiAgICAgICAgICBhZGRLbm93bkZpbGU6IHJlbWVtYmVyS25vd25GaWxlLFxuICAgICAgICB9ID0gYXdhaXQgcmVhZEtub3duRmlsZXMoKTtcblxuICAgICAgICBjb25zdCByZWZyZXNoS25vd25GaWxlcyA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXh0S25vd24gPSBhd2FpdCByZWFkS25vd25GaWxlcygpO1xuICAgICAgICAgIGtub3duRmlsZXMgPSBuZXh0S25vd24uZmlsZXM7XG4gICAgICAgICAga25vd25GaWxlQWxpYXNlcyA9IG5leHRLbm93bi5hbGlhc2VzO1xuICAgICAgICAgIHJlbWVtYmVyS25vd25GaWxlID0gbmV4dEtub3duLmFkZEtub3duRmlsZTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwcm9jZXNzRmlsZUNoYW5nZXMgPSBhc3luYyAoZmlsZUNoYW5nZXM6IEZpbGVDaGFuZ2VzKSA9PiB7XG4gICAgICAgICAgaWYgKCFoYXNGaWxlQ2hhbmdlcyhmaWxlQ2hhbmdlcykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBkZWNpc2lvbiA9IGF3YWl0IGNsYXNzaWZ5UmVidWlsZCh7XG4gICAgICAgICAgICBkaXNjb3ZlcmVkRW50cmllcyxcbiAgICAgICAgICAgIGZpbGVDaGFuZ2VzLFxuICAgICAgICAgICAgaW5wdXRGaWxlczogb3B0aW9ucy5pbnB1dEZpbGVzLFxuICAgICAgICAgICAgbm9ybWFsaXplUGF0aCxcbiAgICAgICAgICAgIHBhcmVudEhhc0NoaWxkLFxuICAgICAgICAgICAgcmVhZFNuYXBzaG90OiByZWFkU291cmNlU25hcHNob3QsXG4gICAgICAgICAgICBzb3VyY2VTbmFwc2hvdHMsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGRlY2lzaW9uLmtpbmQgPT09ICdub25lJykge1xuICAgICAgICAgICAgbG9nRGV2SG1yKCd3b3JrZmxvdyBkZXYgaG1yOiBza2lwJyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtmaWxlLCBzbmFwc2hvdF0gb2YgZGVjaXNpb24uc25hcHNob3RzIHx8IFtdKSB7XG4gICAgICAgICAgICAgIHNvdXJjZVNuYXBzaG90cy5zZXQoZmlsZSwgc25hcHNob3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGVjaXNpb24ua2luZCA9PT0gJ2Z1bGwnKSB7XG4gICAgICAgICAgICBsb2dEZXZIbXIoJ3dvcmtmbG93IGRldiBobXI6IGZ1bGwgcmVkaXNjb3ZlcnknKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGF3YWl0IGZ1bGxSZWJ1aWxkKCk7XG4gICAgICAgICAgICAgIGF3YWl0IHJlZnJlc2hLbm93bkZpbGVzKCk7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAvLyBMZXRzIGEgbG9nIHJlYWRlciB0ZWxsIFwicXVpZXRcIiBmcm9tIFwicmVidWlsZCBpbiBmbGlnaHRcIi5cbiAgICAgICAgICAgICAgLy8gVGhlIGUyZSBITVIgdGVzdHMgZHJhaW4tdG8tcXVpZXQgYmVmb3JlIGNvdW50aW5nIGxpbmVzLlxuICAgICAgICAgICAgICBsb2dEZXZIbXIoJ3dvcmtmbG93IGRldiBobXI6IHJlYnVpbGQgY29tcGxldGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsb2dEZXZIbXIoXG4gICAgICAgICAgICBgd29ya2Zsb3cgZGV2IGhtcjogaG90IHJlYnVpbGQke2RlY2lzaW9uLnJlZnJlc2hTdGVwUmVnaXN0cmF0aW9ucyA/ICcgd2l0aCBzdGVwIHJlZ2lzdHJhdGlvbiByZWZyZXNoJyA6ICcnfWBcbiAgICAgICAgICApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBob3RSZWJ1aWxkKGRlY2lzaW9uLnJlZnJlc2hTdGVwUmVnaXN0cmF0aW9ucyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtmaWxlLCBzbmFwc2hvdF0gb2YgZGVjaXNpb24uc25hcHNob3RzKSB7XG4gICAgICAgICAgICAgIHNvdXJjZVNuYXBzaG90cy5zZXQoZmlsZSwgc25hcHNob3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAvLyBTZWUgdGhlIG1hdGNoaW5nIGxpbmUgb24gdGhlIGZ1bGwgcGF0aCBhYm92ZS5cbiAgICAgICAgICAgIGxvZ0Rldkhtcignd29ya2Zsb3cgZGV2IGhtcjogcmVidWlsZCBjb21wbGV0ZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgcGVuZGluZ0ZpbGVDaGFuZ2VzOiBGaWxlQ2hhbmdlcyA9IHtcbiAgICAgICAgICBhZGRlZEZpbGVzOiBbXSxcbiAgICAgICAgICBtb2RpZmllZEZpbGVzOiBbXSxcbiAgICAgICAgICByZW1vdmVkRmlsZXM6IFtdLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgZmx1c2hUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgY29uc3Qgc2NoZWR1bGVGaWxlQ2hhbmdlcyA9IChmaWxlQ2hhbmdlczogRmlsZUNoYW5nZXMpID0+IHtcbiAgICAgICAgICBwZW5kaW5nRmlsZUNoYW5nZXMgPSBtZXJnZUZpbGVDaGFuZ2VzKFxuICAgICAgICAgICAgcGVuZGluZ0ZpbGVDaGFuZ2VzLFxuICAgICAgICAgICAgZmlsZUNoYW5nZXNcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChmbHVzaFRpbWVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGZsdXNoVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVDaGFuZ2VzID0gcGVuZGluZ0ZpbGVDaGFuZ2VzO1xuICAgICAgICAgICAgcGVuZGluZ0ZpbGVDaGFuZ2VzID0ge1xuICAgICAgICAgICAgICBhZGRlZEZpbGVzOiBbXSxcbiAgICAgICAgICAgICAgbW9kaWZpZWRGaWxlczogW10sXG4gICAgICAgICAgICAgIHJlbW92ZWRGaWxlczogW10sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZmx1c2hUaW1lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGVucXVldWUoKCkgPT4gcHJvY2Vzc0ZpbGVDaGFuZ2VzKGZpbGVDaGFuZ2VzKSk7XG4gICAgICAgICAgfSwgMTApO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc29sdmVFeGlzdGluZ0V2ZW50UGF0aCA9IGFzeW5jIChwYXRobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVQYXRoKHBhdGhuYW1lKTtcbiAgICAgICAgICBpZiAoIWlzV2F0Y2hhYmxlRmlsZShub3JtYWxpemVkUGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBrbm93blBhdGggPSBrbm93bkZpbGVBbGlhc2VzLmdldChub3JtYWxpemVkUGF0aCk7XG4gICAgICAgICAgaWYgKGtub3duUGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGtub3duUGF0aDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVhbEZpbGVQYXRoID0gbm9ybWFsaXplUGF0aChhd2FpdCByZWFscGF0aChub3JtYWxpemVkUGF0aCkpO1xuICAgICAgICAgICAgcmV0dXJuIGtub3duRmlsZUFsaWFzZXMuZ2V0KHJlYWxGaWxlUGF0aCkgPz8gbm9ybWFsaXplZFBhdGg7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplZFBhdGg7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGhhbmRsZUZpbGVBZGRlZCA9IGFzeW5jIChwYXRobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVQYXRoKHBhdGhuYW1lKTtcbiAgICAgICAgICBpZiAoIWlzV2F0Y2hhYmxlRmlsZShub3JtYWxpemVkUGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBleGlzdGluZ1BhdGggPSBhd2FpdCByZXNvbHZlRXhpc3RpbmdFdmVudFBhdGgobm9ybWFsaXplZFBhdGgpO1xuICAgICAgICAgIGNvbnN0IHdhc0tub3duID0gZXhpc3RpbmdQYXRoID8ga25vd25GaWxlcy5oYXMoZXhpc3RpbmdQYXRoKSA6IGZhbHNlO1xuICAgICAgICAgIGNvbnN0IGNhbm9uaWNhbFBhdGggPSBhd2FpdCByZW1lbWJlcktub3duRmlsZShub3JtYWxpemVkUGF0aCk7XG4gICAgICAgICAga25vd25GaWxlcy5hZGQoY2Fub25pY2FsUGF0aCk7XG4gICAgICAgICAgc2NoZWR1bGVGaWxlQ2hhbmdlcyh7XG4gICAgICAgICAgICBhZGRlZEZpbGVzOiB3YXNLbm93biA/IFtdIDogW2Nhbm9uaWNhbFBhdGhdLFxuICAgICAgICAgICAgbW9kaWZpZWRGaWxlczogd2FzS25vd24gPyBbY2Fub25pY2FsUGF0aF0gOiBbXSxcbiAgICAgICAgICAgIHJlbW92ZWRGaWxlczogW10sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGFuZGxlRmlsZUNoYW5nZWQgPSBhc3luYyAocGF0aG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IGNhbm9uaWNhbFBhdGggPSBhd2FpdCByZXNvbHZlRXhpc3RpbmdFdmVudFBhdGgocGF0aG5hbWUpO1xuICAgICAgICAgIGlmICghY2Fub25pY2FsUGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGZpbGVDaGFuZ2VzID0gY2xhc3NpZnlGaWxlQ2hhbmdlcyh7XG4gICAgICAgICAgICBjaGFuZ2VkRmlsZXM6IFtjYW5vbmljYWxQYXRoXSxcbiAgICAgICAgICAgIGtub3duRmlsZXMsXG4gICAgICAgICAgICByZW1vdmVkRmlsZXM6IFtdLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICgha25vd25GaWxlQWxpYXNlcy5oYXMoY2Fub25pY2FsUGF0aCkpIHtcbiAgICAgICAgICAgIGF3YWl0IHJlbWVtYmVyS25vd25GaWxlKGNhbm9uaWNhbFBhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzY2hlZHVsZUZpbGVDaGFuZ2VzKGZpbGVDaGFuZ2VzKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBoYW5kbGVGaWxlUmVtb3ZlZCA9IChwYXRobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVQYXRoKHBhdGhuYW1lKTtcbiAgICAgICAgICBpZiAoIWlzV2F0Y2hhYmxlRmlsZShub3JtYWxpemVkUGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjYW5vbmljYWxQYXRoID1cbiAgICAgICAgICAgIGtub3duRmlsZUFsaWFzZXMuZ2V0KG5vcm1hbGl6ZWRQYXRoKSA/PyBub3JtYWxpemVkUGF0aDtcbiAgICAgICAgICBjb25zdCBmaWxlQ2hhbmdlcyA9IGNsYXNzaWZ5RmlsZUNoYW5nZXMoe1xuICAgICAgICAgICAgY2hhbmdlZEZpbGVzOiBbXSxcbiAgICAgICAgICAgIGtub3duRmlsZXMsXG4gICAgICAgICAgICByZW1vdmVkRmlsZXM6IFtjYW5vbmljYWxQYXRoXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBrbm93bkZpbGVBbGlhc2VzLmRlbGV0ZShub3JtYWxpemVkUGF0aCk7XG4gICAgICAgICAgc2NoZWR1bGVGaWxlQ2hhbmdlcyhmaWxlQ2hhbmdlcyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgd2F0Y2hlciA9IGNob2tpZGFyLndhdGNoKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsIHtcbiAgICAgICAgICBpZ25vcmVJbml0aWFsOiB0cnVlLFxuICAgICAgICAgIGZvbGxvd1N5bWxpbmtzOiB0cnVlLFxuICAgICAgICAgIGlnbm9yZWQ6IChwYXRobmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVQYXRoKFN0cmluZyhwYXRobmFtZSkpO1xuICAgICAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gZXh0bmFtZShub3JtYWxpemVkUGF0aCk7XG4gICAgICAgICAgICBpZiAoZXh0ZW5zaW9uICYmICF3YXRjaGFibGVFeHRlbnNpb25zLmhhcyhleHRlbnNpb24pKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhhc0lnbm9yZWRQYXRoRnJhZ21lbnQobm9ybWFsaXplZFBhdGgpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHdhdGNoZXIub24oJ2FkZCcsIChwYXRobmFtZSkgPT4ge1xuICAgICAgICAgIHZvaWQgaGFuZGxlRmlsZUFkZGVkKHBhdGhuYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHdhdGNoZXIub24oJ2NoYW5nZScsIChwYXRobmFtZSkgPT4ge1xuICAgICAgICAgIHZvaWQgaGFuZGxlRmlsZUNoYW5nZWQocGF0aG5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgd2F0Y2hlci5vbigndW5saW5rJywgKHBhdGhuYW1lKSA9PiB7XG4gICAgICAgICAgaGFuZGxlRmlsZVJlbW92ZWQocGF0aG5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgd2F0Y2hlci5vbignZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdXb3JrZmxvdyBkZXYgd2F0Y2hlciBlcnJvcicsIGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHdhdGNoZXIub24oJ3JlYWR5JywgKCkgPT4ge1xuICAgICAgICAgIGxvZ0Rldkhtcignd29ya2Zsb3cgZGV2IGhtcjogcmVhZHknKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGdldElucHV0RmlsZXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgY29uc3QgaW5wdXRGaWxlcyA9IGF3YWl0IHN1cGVyLmdldElucHV0RmlsZXMoKTtcbiAgICAgIGNvbnN0IGlzTmV4dEVudHJ5cG9pbnQgPSBjcmVhdGVOZXh0RW50cnlwb2ludE1hdGNoZXIoXG4gICAgICAgIHRoaXMuY29uZmlnLnBhZ2VFeHRlbnNpb25zXG4gICAgICApO1xuICAgICAgY29uc3QgaW5wdXRGaWxlU2V0ID0gbmV3IFNldChpbnB1dEZpbGVzKTtcbiAgICAgIGNvbnN0IHJvb3RNb2R1bGVGaWxlcyA9IG5ldyBTZXQoXG4gICAgICAgIHJvb3RNb2R1bGVOYW1lcy5mbGF0TWFwKChuYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsZSA9IFsnc3JjJywgJyddXG4gICAgICAgICAgICAuZmxhdE1hcCgoZGlyZWN0b3J5KSA9PlxuICAgICAgICAgICAgICByb290TW9kdWxlRXh0ZW5zaW9ucy5tYXAoKGV4dGVuc2lvbikgPT5cbiAgICAgICAgICAgICAgICBqb2luKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsIGRpcmVjdG9yeSwgYCR7bmFtZX0uJHtleHRlbnNpb259YClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmZpbmQoKGNhbmRpZGF0ZSkgPT4gaW5wdXRGaWxlU2V0LmhhcyhjYW5kaWRhdGUpKTtcbiAgICAgICAgICByZXR1cm4gZmlsZSA/IFtmaWxlXSA6IFtdO1xuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIGlucHV0RmlsZXMuZmlsdGVyKChmaWxlKSA9PiB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gcmVsYXRpdmUodGhpcy5jb25maWcud29ya2luZ0RpciwgZmlsZSkucmVwbGFjZUFsbChcbiAgICAgICAgICAnXFxcXCcsXG4gICAgICAgICAgJy8nXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJvb3RNb2R1bGUgPSBlbnRyeS5zdGFydHNXaXRoKCdzcmMvJykgPyBlbnRyeS5zbGljZSg0KSA6IGVudHJ5O1xuICAgICAgICBpZiAocm9vdE1vZHVsZUVudHJ5cG9pbnQudGVzdChyb290TW9kdWxlKSkge1xuICAgICAgICAgIHJldHVybiByb290TW9kdWxlRmlsZXMuaGFzKGZpbGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc05leHRFbnRyeXBvaW50KGVudHJ5KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgd3JpdGVGdW5jdGlvbnNDb25maWcob3V0cHV0RGlyOiBzdHJpbmcpIHtcbiAgICAgIC8vIHdlIGRvbid0IHJ1biB0aGlzIGluIGRldmVsb3BtZW50IG1vZGUgYXMgaXQncyBub3QgbmVlZGVkXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBWMiBjb21iaW5lZCBjb25maWc6IHNpbmdsZSB0cmlnZ2VyIGhhbmRsZXMgYm90aCB3b3JrZmxvdyBhbmQgc3RlcCBleGVjdXRpb24uXG4gICAgICAvLyBUaGUgc3RlcCByb3V0ZSBubyBsb25nZXIgbmVlZHMgaXRzIG93biB0cmlnZ2VyIHNpbmNlIHN0ZXBzIGFyZSBleGVjdXRlZFxuICAgICAgLy8gaW5saW5lIGJ5IHRoZSBjb21iaW5lZCBoYW5kbGVyIG9yIHF1ZXVlZCBiYWNrIHRvIF9fd2tmX3dvcmtmbG93Xyogd2l0aCBzdGVwSWQuXG4gICAgICBjb25zdCBnZW5lcmF0ZWRDb25maWcgPSB7XG4gICAgICAgIHZlcnNpb246ICcwJyxcbiAgICAgICAgd29ya2Zsb3dzOiB7XG4gICAgICAgICAgbWF4RHVyYXRpb246ICdtYXgnLFxuICAgICAgICAgIGV4cGVyaW1lbnRhbFRyaWdnZXJzOiBbZ2V0V29ya2Zsb3dRdWV1ZVRyaWdnZXIoKV0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCB3cml0ZUZpbGVJZkNoYW5nZWQoXG4gICAgICAgIGpvaW4ob3V0cHV0RGlyLCAnLndlbGwta25vd24vd29ya2Zsb3cvdjEvY29uZmlnLmpzb24nKSxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoZ2VuZXJhdGVkQ29uZmlnLCBudWxsLCAyKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWMjogQnVpbGQgY29tYmluZWQgcm91dGUgdGhhdCBoYW5kbGVzIGJvdGggd29ya2Zsb3cgYW5kIHN0ZXAgZXhlY3V0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgYnVpbGRDb21iaW5lZEZ1bmN0aW9uKHtcbiAgICAgIGlucHV0RmlsZXMsXG4gICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICAgIHRzY29uZmlnUGF0aCxcbiAgICB9OiB7XG4gICAgICBpbnB1dEZpbGVzOiBzdHJpbmdbXTtcbiAgICAgIHdvcmtmbG93R2VuZXJhdGVkRGlyOiBzdHJpbmc7XG4gICAgICB0c2NvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgfSkge1xuICAgICAgY29uc3QgZmxvd1JvdXRlRGlyID0gam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ2Zsb3cnKTtcbiAgICAgIGF3YWl0IG1rZGlyKGZsb3dSb3V0ZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNyZWF0ZUNvbWJpbmVkQnVuZGxlKHtcbiAgICAgICAgZm9ybWF0OiAnZXNtJyxcbiAgICAgICAgaW5wdXRGaWxlcyxcbiAgICAgICAgc3RlcHNPdXRmaWxlOiBqb2luKGZsb3dSb3V0ZURpciwgJ19fc3RlcF9yZWdpc3RyYXRpb25zLmpzJyksXG4gICAgICAgIGZsb3dPdXRmaWxlOiBqb2luKGZsb3dSb3V0ZURpciwgJ3JvdXRlLmpzJyksXG4gICAgICAgIGJ1bmRsZUZpbmFsT3V0cHV0OiBmYWxzZSxcbiAgICAgICAgZXh0ZXJuYWxpemVOb25TdGVwczogdHJ1ZSxcbiAgICAgICAgc291cmNlU3RlcFJlZ2lzdHJhdGlvbkltcG9ydHM6IHRydWUsXG4gICAgICAgIHRzY29uZmlnUGF0aCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgYnVpbGRXZWJob29rUm91dGUoe1xuICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgfToge1xuICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXI6IHN0cmluZztcbiAgICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBjb25zdCB3ZWJob29rUm91dGVGaWxlID0gam9pbihcbiAgICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgICAgICd3ZWJob29rL1t0b2tlbl0vcm91dGUuanMnXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5jcmVhdGVXZWJob29rQnVuZGxlKHtcbiAgICAgICAgb3V0ZmlsZTogd2ViaG9va1JvdXRlRmlsZSxcbiAgICAgICAgYnVuZGxlOiBmYWxzZSwgLy8gTmV4dC5qcyBkb2Vzbid0IG5lZWQgYnVuZGxpbmdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZmluZEFwcERpcmVjdG9yeSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgY29uc3QgYXBwRGlyID0gcmVzb2x2ZSh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCAnYXBwJyk7XG4gICAgICBjb25zdCBzcmNBcHBEaXIgPSByZXNvbHZlKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsICdzcmMvYXBwJyk7XG4gICAgICBjb25zdCBwYWdlc0RpciA9IHJlc29sdmUodGhpcy5jb25maWcud29ya2luZ0RpciwgJ3BhZ2VzJyk7XG4gICAgICBjb25zdCBzcmNQYWdlc0RpciA9IHJlc29sdmUodGhpcy5jb25maWcud29ya2luZ0RpciwgJ3NyYy9wYWdlcycpO1xuXG4gICAgICAvLyBIZWxwZXIgdG8gY2hlY2sgaWYgYSBwYXRoIGV4aXN0cyBhbmQgaXMgYSBkaXJlY3RvcnlcbiAgICAgIGNvbnN0IGlzRGlyZWN0b3J5ID0gYXN5bmMgKHBhdGg6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGFjY2VzcyhwYXRoLCBjb25zdGFudHMuRl9PSyk7XG4gICAgICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBzdGF0KHBhdGgpO1xuICAgICAgICAgIGlmICghc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYXRoIGV4aXN0cyBidXQgaXMgbm90IGEgZGlyZWN0b3J5OiAke3BhdGh9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLm1lc3NhZ2UuaW5jbHVkZXMoJ25vdCBhIGRpcmVjdG9yeScpKSB7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIC8vIENoZWNrIGlmIGFwcCBkaXJlY3RvcnkgZXhpc3RzXG4gICAgICBpZiAoYXdhaXQgaXNEaXJlY3RvcnkoYXBwRGlyKSkge1xuICAgICAgICByZXR1cm4gYXBwRGlyO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBzcmMvYXBwIGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGlmIChhd2FpdCBpc0RpcmVjdG9yeShzcmNBcHBEaXIpKSB7XG4gICAgICAgIHJldHVybiBzcmNBcHBEaXI7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIG5vIGFwcCBkaXJlY3RvcnkgZXhpc3RzLCBjaGVjayBmb3IgcGFnZXMgZGlyZWN0b3J5IGFuZCBjcmVhdGUgYXBwIG5leHQgdG8gaXRcbiAgICAgIGlmIChhd2FpdCBpc0RpcmVjdG9yeShwYWdlc0RpcikpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGFwcCBkaXJlY3RvcnkgbmV4dCB0byBwYWdlcyBkaXJlY3RvcnlcbiAgICAgICAgYXdhaXQgbWtkaXIoYXBwRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIGFwcERpcjtcbiAgICAgIH1cblxuICAgICAgaWYgKGF3YWl0IGlzRGlyZWN0b3J5KHNyY1BhZ2VzRGlyKSkge1xuICAgICAgICAvLyBDcmVhdGUgc3JjL2FwcCBkaXJlY3RvcnkgbmV4dCB0byBzcmMvcGFnZXMgZGlyZWN0b3J5XG4gICAgICAgIGF3YWl0IG1rZGlyKHNyY0FwcERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBzcmNBcHBEaXI7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIE5leHQuanMgYXBwIG9yIHBhZ2VzIGRpcmVjdG9yeS4gRXhwZWN0ZWQgb25lIG9mOiBcImFwcFwiLCBcInNyYy9hcHBcIiwgXCJwYWdlc1wiLCBvciBcInNyYy9wYWdlc1wiIHRvIGV4aXN0LidcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgQ2FjaGVkTmV4dEJ1aWxkZXJFYWdlciA9IE5leHRCdWlsZGVyO1xuICByZXR1cm4gTmV4dEJ1aWxkZXI7XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@workflow/next",
3
- "version": "5.0.0-beta.46",
3
+ "version": "5.0.0-beta.47",
4
4
  "description": "Next.js integration for Workflow SDK",
5
5
  "type": "commonjs",
6
6
  "main": "dist/index.js",
@@ -30,8 +30,8 @@
30
30
  "chokidar": "4.0.3",
31
31
  "ignore": "7.0.5",
32
32
  "semver": "7.7.4",
33
- "@workflow/builders": "5.0.0-beta.46",
34
- "@workflow/core": "5.0.0-beta.46",
33
+ "@workflow/builders": "5.0.0-beta.47",
34
+ "@workflow/core": "5.0.0-beta.47",
35
35
  "@workflow/swc-plugin": "5.0.0-beta.5"
36
36
  },
37
37
  "devDependencies": {