vite-plugin-react-server 1.3.6 → 1.4.0

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.
Files changed (48) hide show
  1. package/README.md +32 -18
  2. package/dist/package.json +4 -2
  3. package/dist/plugin/config/resolveOptions.d.ts.map +1 -1
  4. package/dist/plugin/config/resolveOptions.js +4 -2
  5. package/dist/plugin/dev-server/plugin.client.d.ts.map +1 -1
  6. package/dist/plugin/dev-server/plugin.client.js +13 -3
  7. package/dist/plugin/dev-server/plugin.server.d.ts.map +1 -1
  8. package/dist/plugin/dev-server/plugin.server.js +54 -4
  9. package/dist/plugin/react-static/plugin.server.d.ts.map +1 -1
  10. package/dist/plugin/react-static/plugin.server.js +9 -1
  11. package/dist/plugin/react-static/renderPagesBatched.d.ts.map +1 -1
  12. package/dist/plugin/react-static/renderPagesBatched.js +136 -36
  13. package/dist/plugin/react-static/types.d.ts +1 -0
  14. package/dist/plugin/react-static/types.d.ts.map +1 -1
  15. package/dist/plugin/types.d.ts +15 -0
  16. package/dist/plugin/types.d.ts.map +1 -1
  17. package/dist/plugin/utils/createReactFetcher.js +24 -2
  18. package/dist/plugin/utils/useRscHmr.js +10 -2
  19. package/dist/plugin/vendor/register-vendor.js +1 -1
  20. package/dist/plugin/vendor/vendor-alias.d.ts +5 -2
  21. package/dist/plugin/vendor/vendor-alias.d.ts.map +1 -1
  22. package/dist/plugin/vendor/vendor-alias.js +60 -26
  23. package/dist/plugin/vendor/vendor.server.d.ts.map +1 -1
  24. package/dist/plugin/vendor/vendor.server.js +2 -2
  25. package/dist/plugin/vendor/vendor.static.d.ts.map +1 -1
  26. package/dist/plugin/vendor/vendor.static.js +2 -2
  27. package/dist/tsconfig.tsbuildinfo +1 -1
  28. package/oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.development.js +1 -1
  29. package/oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.production.js +1 -1
  30. package/oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.node.development.js +1 -1
  31. package/oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.node.production.js +1 -1
  32. package/oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +1 -1
  33. package/oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-server.node.production.js +1 -1
  34. package/oss-experimental/react-server-dom-esm/esm/react-server-dom-esm-client.browser.development.js +1 -1
  35. package/oss-experimental/react-server-dom-esm/esm/react-server-dom-esm-client.browser.production.js +1 -1
  36. package/oss-experimental/react-server-dom-esm/package.json +3 -3
  37. package/package.json +4 -2
  38. package/plugin/config/resolveOptions.ts +2 -0
  39. package/plugin/dev-server/plugin.client.ts +13 -2
  40. package/plugin/dev-server/plugin.server.ts +71 -4
  41. package/plugin/react-static/plugin.server.ts +11 -1
  42. package/plugin/react-static/renderPagesBatched.ts +148 -39
  43. package/plugin/react-static/types.ts +1 -0
  44. package/plugin/types.ts +15 -0
  45. package/plugin/vendor/register-vendor.ts +1 -1
  46. package/plugin/vendor/vendor-alias.ts +61 -39
  47. package/plugin/vendor/vendor.server.ts +3 -3
  48. package/plugin/vendor/vendor.static.ts +3 -2
package/README.md CHANGED
@@ -266,6 +266,20 @@ export function TodoForm() {
266
266
  }
267
267
  ```
268
268
 
269
+ ### Parallel Rendering
270
+
271
+ Pages are rendered in parallel batches by default for faster builds:
272
+
273
+ ```ts
274
+ build: {
275
+ pages: ["/", "/about", "/contact", ...hundredsOfPages],
276
+ renderMode: "parallel", // default
277
+ batchSize: 8, // pages per batch
278
+ }
279
+ ```
280
+
281
+ Use `renderMode: "sequential"` for debugging or low-memory environments.
282
+
269
283
  ### Client Components
270
284
 
271
285
  ```tsx
@@ -300,7 +314,7 @@ export function Counter() {
300
314
  ## Requirements
301
315
 
302
316
  - **Node.js**: 23.7.0 or higher
303
- - **React**: Experimental version (handled by patch system)
317
+ - **React**: Experimental version (handled by vendored ESM transport)
304
318
  - **Vite**: Compatible with latest Vite versions
305
319
 
306
320
  ## TypeScript
@@ -323,26 +337,26 @@ This enables type support for:
323
337
 
324
338
  ## Contributing
325
339
 
326
- This project uses experimental React features and includes a patch system for compatibility. See [React Type Compatibility](./docs/react-type-compatibility.md) for maintenance details.
340
+ This project uses experimental React features with a vendored ESM transport (`react-server-dom-esm`). Plugin maintainers can refresh the vendored copy with `npm run experimental:build-oss`. See [React Type Compatibility](./docs/react-type-compatibility.md) for maintenance details.
327
341
 
328
342
  ## Documentation
329
343
 
330
- | Topic |
331
- |-------|
332
- | [Getting Started](./docs/getting-started.md) |
333
- | [Core Concepts](./docs/core-concepts.md) |
334
- | [Configuration Guide](./docs/configuration.md) |
335
- | [CSS & Styling](./docs/css-handling.md) |
336
- | [Server Actions](./docs/server-actions.md) |
337
- | [Build & Deployment](./docs/build-orchestration.md) |
338
- | [Advanced Development](./docs/advanced-topics.md) |
339
- | [Plugin Internals](./docs/transformer-plugin.md) |
340
- | [Worker System](./docs/rsc-worker.md) |
341
- | [API Reference](./docs/api-reference.md) |
342
- | [React Compatibility](./docs/react-type-compatibility.md) |
343
- | [Troubleshooting](./docs/troubleshooting-guide.md) |
344
- | [Package Exports](./docs/package-exports.md) |
345
- | [Transformations](./docs/transformations.md) |
344
+ | Topic | Description |
345
+ |-------|-------------|
346
+ | [Getting Started](./docs/getting-started.md) | Installation, basic setup, and first page |
347
+ | [Core Concepts](./docs/core-concepts.md) | React conditions, environments, and architecture |
348
+ | [Configuration Guide](./docs/configuration.md) | Plugin options and Vite config |
349
+ | [CSS & Styling](./docs/css-handling.md) | CSS collection, inline styles, and global CSS |
350
+ | [Server Actions](./docs/server-actions.md) | `"use server"` directives and form actions |
351
+ | [Build & Deployment](./docs/build-orchestration.md) | Multi-step and Environment API builds |
352
+ | [Advanced Development](./docs/advanced-topics.md) | Custom workers, streaming, and advanced patterns |
353
+ | [Plugin Internals](./docs/transformer-plugin.md) | How the transformer processes directives |
354
+ | [Worker System](./docs/rsc-worker.md) | RSC and HTML worker architecture |
355
+ | [API Reference](./docs/api-reference.md) | Exported functions and types |
356
+ | [React Compatibility](./docs/react-type-compatibility.md) | Version support, vendored ESM transport |
357
+ | [Troubleshooting](./docs/troubleshooting-guide.md) | Common errors and solutions |
358
+ | [Package Exports](./docs/package-exports.md) | All package exports and conditional loading |
359
+ | [Transformations](./docs/transformations.md) | Code transformations and directive handling |
346
360
 
347
361
 
348
362
  ## License
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vite-plugin-react-server",
3
- "version": "1.3.6",
3
+ "version": "1.4.0",
4
4
  "description": "Vite plugin for React Server Components (RSC)",
5
5
  "type": "module",
6
6
  "main": "./dist/plugin/index.js",
@@ -43,7 +43,9 @@
43
43
  "./stream": "./dist/plugin/stream/index.js",
44
44
  "./stream/client": "./dist/plugin/stream/index.client.js",
45
45
  "./stream/server": "./dist/plugin/stream/index.server.js",
46
- "./env": "./dist/plugin/env/plugin.js",
46
+ "./env": {
47
+ "types": "./env.d.ts"
48
+ },
47
49
  "./config": "./dist/plugin/config/index.js",
48
50
  "./error": "./dist/plugin/error/index.js",
49
51
  "./vendor": "./dist/plugin/vendor/index.js",
@@ -1 +1 @@
1
- {"version":3,"file":"resolveOptions.d.ts","sourceRoot":"","sources":["../../../plugin/config/resolveOptions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EAKpB,MAAM,aAAa,CAAC;AAcrB,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AAOjD,MAAM,MAAM,oBAAoB,GAC5B;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,mBAAmB,CAAC;IACjC,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,GACD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AAE3D,MAAM,MAAM,gBAAgB,GAAG,CAC7B,OAAO,EAAE,mBAAmB,EAC5B,YAAY,CAAC,EAAE,OAAO,EACtB,MAAM,CAAC,EAAE,MAAM,KACZ,oBAAoB,CAAC;AA+C1B;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,gBAuwB5B,CAAC"}
1
+ {"version":3,"file":"resolveOptions.d.ts","sourceRoot":"","sources":["../../../plugin/config/resolveOptions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EAKpB,MAAM,aAAa,CAAC;AAcrB,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AAOjD,MAAM,MAAM,oBAAoB,GAC5B;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,mBAAmB,CAAC;IACjC,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,GACD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AAE3D,MAAM,MAAM,gBAAgB,GAAG,CAC7B,OAAO,EAAE,mBAAmB,EAC5B,YAAY,CAAC,EAAE,OAAO,EACtB,MAAM,CAAC,EAAE,MAAM,KACZ,oBAAoB,CAAC;AA+C1B;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,gBAywB5B,CAAC"}
@@ -364,7 +364,9 @@ const resolveOptions = function _resolveOptions(options = {}, forceResolve = fal
364
364
  nodeExtension: DEFAULT_CONFIG.BUILD.nodeExtension,
365
365
  useRscWorker: options.build?.useRscWorker ?? DEFAULT_CONFIG.BUILD.useRscWorker,
366
366
  useHtmlWorker: options.build?.useHtmlWorker ?? // Force useHtmlWorker to true when build.pages is explicitly configured, regardless of default logic
367
- (options.build?.pages && (Array.isArray(options.build.pages) || typeof options.build.pages === "function")) ? true : DEFAULT_CONFIG.BUILD.useHtmlWorker
367
+ (options.build?.pages && (Array.isArray(options.build.pages) || typeof options.build.pages === "function")) ? true : DEFAULT_CONFIG.BUILD.useHtmlWorker,
368
+ renderMode: options.build?.renderMode ?? "parallel",
369
+ batchSize: options.build?.batchSize ?? 8
368
370
  };
369
371
  const dev = {
370
372
  useHtmlWorker: options.dev?.useHtmlWorker ?? DEFAULT_CONFIG.DEV.useHtmlWorker,
@@ -497,4 +499,4 @@ const resolveOptions = function _resolveOptions(options = {}, forceResolve = fal
497
499
  };
498
500
 
499
501
  export { resolveOptions };
500
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZU9wdGlvbnMuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BsdWdpbi9jb25maWcvcmVzb2x2ZU9wdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcmVSZW5kZXJlZEFzc2V0LCBQcmVSZW5kZXJlZENodW5rIH0gZnJvbSBcInJvbGx1cFwiO1xuaW1wb3J0IHR5cGUge1xuICBTdHJlYW1QbHVnaW5PcHRpb25zLFxuICBSZXNvbHZlZFVzZXJPcHRpb25zLFxuICBQYWdlTmFtZSxcbiAgUHJvcHNOYW1lLFxuICBIdG1sTmFtZSxcbiAgUm9vdE5hbWUsXG59IGZyb20gXCIuLi90eXBlcy5qc1wiO1xuaW1wb3J0IHtcbiAgQkFTRV9QQVRURVJOUyxcbiAgREVGQVVMVF9DT05GSUcsXG4gIERFRkFVTFRfTE9BREVSX0NPTkZJRyxcbn0gZnJvbSBcIi4vZGVmYXVsdHMuanNcIjtcbmltcG9ydCB7IGpvaW4sIHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBwbHVnaW5Sb290IH0gZnJvbSBcIi4uL3Jvb3QuanNcIjtcbmltcG9ydCB7IGNyZWF0ZUlucHV0Tm9ybWFsaXplciB9IGZyb20gXCIuLi9oZWxwZXJzL2lucHV0Tm9ybWFsaXplci5qc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZURpcmVjdGl2ZU1hdGNoZXIgfSBmcm9tIFwiLi9yZXNvbHZlRGlyZWN0aXZlTWF0Y2hlci5qc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZUFsbG93ZWREaXJlY3RpdmVzIH0gZnJvbSBcIi4vcmVzb2x2ZUFsbG93ZWREaXJlY3RpdmVzLmpzXCI7XG5pbXBvcnQgeyByZXNvbHZlUmVnRXhwIH0gZnJvbSBcIi4vcmVzb2x2ZVJlZ0V4cC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBMb2FkZXJDb25maWcgfSBmcm9tIFwiLi4vbG9hZGVyL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBoYW5kbGVFcnJvciB9IGZyb20gXCIuLi9lcnJvci9oYW5kbGVFcnJvci5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyLCB0eXBlIExvZ2dlciB9IGZyb20gXCJ2aXRlXCI7XG5pbXBvcnQgeyBnZXRDb25kaXRpb24gfSBmcm9tIFwiLi9nZXRDb25kaXRpb24uanNcIjtcbmltcG9ydCB7IGdldE5vZGVFbnYgfSBmcm9tIFwiLi9nZXROb2RlRW52LmpzXCI7XG5pbXBvcnQgeyBzdGFzaFVzZXJPcHRpb25zLCBnZXRTdGFzaGVkVXNlck9wdGlvbnMsIGdldEVudmlyb25tZW50SWQgfSBmcm9tIFwiLi9zdGFzaGVkT3B0aW9uc1N0YXRlLmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQgeyByZWFkRmlsZVN5bmMsIGV4aXN0c1N5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuXG5leHBvcnQgdHlwZSBSZXNvbHZlT3B0aW9uc1JldHVybiA9XG4gIHwge1xuICAgICAgdHlwZTogXCJzdWNjZXNzXCI7XG4gICAgICB1c2VyT3B0aW9uczogUmVzb2x2ZWRVc2VyT3B0aW9ucztcbiAgICAgIGVycm9yPzogbmV2ZXI7XG4gICAgfVxuICB8IHsgdHlwZTogXCJlcnJvclwiOyBlcnJvcjogdW5rbm93bjsgdXNlck9wdGlvbnM/OiBuZXZlciB9O1xuXG5leHBvcnQgdHlwZSBSZXNvbHZlT3B0aW9uc0ZuID0gKFxuICBvcHRpb25zOiBTdHJlYW1QbHVnaW5PcHRpb25zLFxuICBmb3JjZVJlc29sdmU/OiBib29sZWFuLFxuICBsb2dnZXI/OiBMb2dnZXJcbikgPT4gUmVzb2x2ZU9wdGlvbnNSZXR1cm47XG5cbi8vIC8qKlxuLy8gICogRW5zdXJlcyBhIHBhdGggZW5kcyB3aXRoIC5qcyBleHRlbnNpb25cbi8vICAqL1xuLy8gY29uc3QgYWRkRXh0ZW5zaW9uID0gKHBhdGg6IHN0cmluZywgZXh0ZW5zaW9uOiBzdHJpbmcgPSBcImpzXCIpID0+IHtcbi8vICAgaWYgKHBhdGguZW5kc1dpdGgoYC4ke2V4dGVuc2lvbn1gKSkgcmV0dXJuIHBhdGg7XG4vLyAgIGlmIChwYXRoLmVuZHNXaXRoKFwiLy5cIikpIHJldHVybiBwYXRoLnNsaWNlKDAsIC0yKSArIFwiLlwiICsgZXh0ZW5zaW9uO1xuLy8gICBpZiAocGF0aC5lbmRzV2l0aChcIi5cIikpIHJldHVybiBwYXRoICsgXCIuXCIgKyBleHRlbnNpb247XG4vLyAgIHJldHVybiBwYXRoICsgXCIuXCIgKyBleHRlbnNpb247XG4vLyB9O1xuXG4vKipcbiAqIEhhbmRsZXMgc2VhcmNoIHF1ZXJ5IHBhcmFtZXRlcnMgaW4gZmlsZSBwYXRoc1xuICovXG5jb25zdCBoYW5kbGVTZWFyY2hRdWVyeSA9IChwYXRoOiBzdHJpbmcpID0+IHtcbiAgY29uc3Qgc2VhcmNoUXVlcnkgPSBwYXRoLnNwbGl0KFwiP1wiKVsxXTtcbiAgaWYgKCFzZWFyY2hRdWVyeSkgcmV0dXJuIHBhdGg7XG4gIGNvbnN0IGZvbGRlciA9IHBhdGguc3BsaXQoXCIvXCIpLnNsaWNlKDAsIC0xKS5qb2luKFwiL1wiKTtcbiAgY29uc3QgZmlsZW5hbWUgPSBwYXRoLnNwbGl0KFwiL1wiKS5wb3AoKTtcbiAgY29uc3QgZmlsZU5hbWVFeHRJbmRleCA9IGZpbGVuYW1lPy5sYXN0SW5kZXhPZihcIi5cIik7XG4gIGNvbnN0IGZpbGVOYW1lV2l0aG91dEV4dCA9IGZpbGVuYW1lPy5zbGljZSgwLCBmaWxlTmFtZUV4dEluZGV4KTtcbiAgY29uc3QgZXh0ZW5zaW9uID0gZmlsZW5hbWU/LnNsaWNlKGZpbGVOYW1lRXh0SW5kZXgpO1xuICByZXR1cm4gYCR7Zm9sZGVyfS8ke2ZpbGVOYW1lV2l0aG91dEV4dH0uJHtzZWFyY2hRdWVyeX0uJHtleHRlbnNpb259YDtcbn07XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgcGF0aCB3aXRoIGFuIG9wdGlvbmFsIHBhdHRlcm4gbWF0Y2hlciBhbmQgZXh0ZW5zaW9uLlxuICogSWYgYSBwYXR0ZXJuIG1hdGNoZXMgYW5kIHRoZSBwYXRoIGRvZXNuJ3QgZW5kIHdpdGggdGhlIGV4dGVuc2lvbiwgdGhlIGV4dGVuc2lvbiBpcyBhcHBlbmRlZC5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIHJlZ2lzdGVyXG4gKiBAcGFyYW0gcGF0dGVybiAtIE9wdGlvbmFsIHBhdHRlcm4gbWF0Y2hlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSBpZiB0aGUgcGF0aCBtYXRjaGVzXG4gKiBAcGFyYW0gZXh0IC0gT3B0aW9uYWwgZXh0ZW5zaW9uIHRvIGFwcGVuZCBpZiBwYXR0ZXJuIG1hdGNoZXMgYW5kIHBhdGggZG9lc24ndCBhbHJlYWR5IGVuZCB3aXRoIGl0XG4gKi9cbmNvbnN0IHJlZ2lzdGVyUGF0aCA9IChwYXRoOiBzdHJpbmcsIHBhdHRlcm4/OiBSZWdFeHAsIGV4dD86IHN0cmluZykgPT4ge1xuICAvLyBJZiB3ZSBoYXZlIGEgcGF0dGVybiBhbmQgaXQgZG9lc24ndCBtYXRjaCwgb3Igd2UgaGF2ZSBhbiBleHRlbnNpb24gYW5kIHRoZSBwYXRoIGRvZXNuJ3QgZW5kIHdpdGggaXQsIGFwcGVuZCB0aGUgZXh0ZW5zaW9uXG4gIGlmICgocGF0dGVybiAmJiAhcGF0dGVybi50ZXN0KHBhdGgpKSB8fCAoZXh0ICYmICFwYXRoLmVuZHNXaXRoKGV4dCkpKSB7XG4gICAgcmV0dXJuIHBhdGggKyBleHQ7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNYWluIE9wdGlvbnMgUmVzb2x2ZXJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxubGV0IG9yaWdpbmFsT3B0aW9uczogYW55IHwgbnVsbCA9IG51bGw7XG4vKipcbiAqIFJlc29sdmVzIHRoZSB1c2VyIG9wdGlvbnMgZm9yIHRoZSBwbHVnaW4uXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgdXNlciBvcHRpb25zIHRvIHJlc29sdmUuXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlc29sdmVPcHRpb25zOiBSZXNvbHZlT3B0aW9uc0ZuID0gZnVuY3Rpb24gX3Jlc29sdmVPcHRpb25zKFxuICBvcHRpb25zID0ge30gYXMgU3RyZWFtUGx1Z2luT3B0aW9ucyxcbiAgZm9yY2VSZXNvbHZlID0gZmFsc2UsXG4gIGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcighb3B0aW9ucy52ZXJib3NlID8gXCJlcnJvclwiIDogXCJpbmZvXCIsIHtcbiAgICBwcmVmaXg6IFwidml0ZTpwbHVnaW4tcmVhY3Qtc2VydmVyL2NvbmZpZyNyZXNvbHZlT3B0aW9uc1wiLFxuICB9KVxuKSB7XG4gIGlmICghZm9yY2VSZXNvbHZlICYmIG9yaWdpbmFsT3B0aW9ucyA9PSBudWxsKSB7XG4gICAgb3JpZ2luYWxPcHRpb25zID0gb3B0aW9ucztcbiAgfSBlbHNlIGlmIChvcmlnaW5hbE9wdGlvbnMgIT0gbnVsbCAmJiBvcHRpb25zICE9PSBvcmlnaW5hbE9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcIm9wdGlvbnMgY2hhbmdlZCwgZm9yY2luZyByZS1yZXNvbHZlXCIpO1xuICAgIH1cbiAgICBmb3JjZVJlc29sdmUgPSB0cnVlO1xuICB9XG4gIFxuICAvLyBGb3JjZSByZS1yZXNvbHZlIGlmIHByb2plY3RSb290IGNoYW5nZWRcbiAgaWYgKG9yaWdpbmFsT3B0aW9ucyAhPSBudWxsICYmIG9yaWdpbmFsT3B0aW9ucy5wcm9qZWN0Um9vdCAhPT0gb3B0aW9ucy5wcm9qZWN0Um9vdCkge1xuICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBwcm9qZWN0Um9vdCBjaGFuZ2VkIGZyb20gJHtvcmlnaW5hbE9wdGlvbnMucHJvamVjdFJvb3R9IHRvICR7b3B0aW9ucy5wcm9qZWN0Um9vdH0sIGZvcmNpbmcgcmUtcmVzb2x2ZWApO1xuICAgIH1cbiAgICBmb3JjZVJlc29sdmUgPSB0cnVlO1xuICB9XG4gIFxuICBjb25zdCBwYW5pY1RocmVzaG9sZCA9XG4gICAgdHlwZW9mIG9wdGlvbnMucGFuaWNUaHJlc2hvbGQgPT09IFwic3RyaW5nXCJcbiAgICAgID8gb3B0aW9ucy5wYW5pY1RocmVzaG9sZFxuICAgICAgOiBERUZBVUxUX0NPTkZJRy5QQU5JQ19USFJFU0hPTEQ7XG4gIC8vIHNpbmNlIHBhbmljVGhyZXNob2xkIGFmZmVjdHMgdGhlIGJlaGF2aW9yIG9mIHRoZSBwbHVnaW4sIHdlIG5lZWQgdG8gcmUtcmVzb2x2ZSB0aGUgb3B0aW9ucyBpZiBpdCBjaGFuZ2VzXG4gIGNvbnN0IGVudklkID0gZ2V0RW52aXJvbm1lbnRJZChnZXRDb25kaXRpb24oKSwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPz8gXCJwcm9kdWN0aW9uXCIpO1xuXG4gIC8vIFJldHVybiBzdGFzaGVkIG9wdGlvbnMgaWYgYXZhaWxhYmxlXG4gIGNvbnN0IHN0YXNoZWRPcHRpb25zID0gZ2V0U3Rhc2hlZFVzZXJPcHRpb25zKGVudklkKTtcbiAgaWYgKHN0YXNoZWRPcHRpb25zICYmICFmb3JjZVJlc29sdmUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzdWNjZXNzXCIsXG4gICAgICB1c2VyT3B0aW9uczogc3Rhc2hlZE9wdGlvbnMgYXMgbmV2ZXIsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGxvYWRlck1vZGUgPSBvcHRpb25zLmxvYWRlcj8ubW9kZSA/PyB1bmRlZmluZWQ7XG4gIC8vIE1vZHVsZSBwYXRoIGNvbmZpZ3VyYXRpb25cbiAgY29uc3QgbW9kdWxlQmFzZSA9XG4gICAgdHlwZW9mIG9wdGlvbnMubW9kdWxlQmFzZSA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLm1vZHVsZUJhc2VcbiAgICAgIDogREVGQVVMVF9DT05GSUcuTU9EVUxFX0JBU0U7XG5cbiAgLy8gQmFzaWMgY29uZmlndXJhdGlvbiAtIHVzZSB0aGUgZmlyc3QgcHJvamVjdFJvb3QgdGhhdCB3YXMgcHJvdmlkZWQsIG9yIGZhbGwgYmFjayB0byBjdXJyZW50IG9wdGlvbnNcbiAgY29uc3QgcHJvamVjdFJvb3QgPSBvcHRpb25zLnByb2plY3RSb290ID8/IG9yaWdpbmFsT3B0aW9ucz8ucHJvamVjdFJvb3QgPz8gcHJvY2Vzcy5jd2QoKTtcbiAgXG4gIGlmIChvcHRpb25zLnZlcmJvc2UgJiYgb3B0aW9ucy5wcm9qZWN0Um9vdCAhPSBvcmlnaW5hbE9wdGlvbnM/LnByb2plY3RSb290KSB7XG4gICAgbG9nZ2VyLmluZm8oYFtyZXNvbHZlT3B0aW9uc10gbmV3IHByb2plY3RSb290OiAke3Byb2plY3RSb290fWApO1xuICB9XG5cbiAgLy8gQnVpbGQgb3B0aW9uc1xuICBjb25zdCBwcmVzZXJ2ZU1vZHVsZXNSb290ID1cbiAgICBvcHRpb25zLmJ1aWxkPy5wcmVzZXJ2ZU1vZHVsZXNSb290ID8/XG4gICAgREVGQVVMVF9DT05GSUcuQlVJTEQucHJlc2VydmVNb2R1bGVzUm9vdDtcblxuICAvLyBHZXQgY3VycmVudCBtb2RlIHRvIGNoZWNrIGlmIHdlJ3JlIGluIGRldmVsb3BtZW50XG4gIGNvbnN0IGN1cnJlbnRNb2RlID0gZ2V0Tm9kZUVudihwcm9jZXNzLmVudi5OT0RFX0VOVik7XG4gIGNvbnN0IGlzRGV2ZWxvcG1lbnQgPSBjdXJyZW50TW9kZSA9PT0gXCJkZXZlbG9wbWVudFwiO1xuXG4gIC8vIFJvbGx1cCdzIHByZXNlcnZlTW9kdWxlc1Jvb3Qgd29ya3MgaW4gcmV2ZXJzZSBvZiB3aGF0IHlvdSdkIGV4cGVjdDpcbiAgLy8gLSBXaGVuIHVzZXIgd2FudHMgcHJlc2VydmF0aW9uICh0cnVlKTogcGFzcyB1bmRlZmluZWQgdG8gUm9sbHVwIChkb24ndCBzdHJpcCBhbnl0aGluZylcbiAgLy8gLSBXaGVuIHVzZXIgd2FudHMgc3RyaXBwaW5nIChmYWxzZSk6IHBhc3MgbW9kdWxlQmFzZSB0byBSb2xsdXAgKHN0cmlwIHRoaXMgcGF0aClcbiAgLy8gQ1JJVElDQUw6IEluIGRldmVsb3BtZW50IG1vZGUsIE5FVkVSIHN0cmlwIG1vZHVsZUJhc2UgKHNyYy8pIGJlY2F1c2UgVml0ZSBzZXJ2ZXMgZnJvbSBzb3VyY2UgbG9jYXRpb25zXG4gIGNvbnN0IHByZXNlcnZlTW9kdWxlc1Jvb3RTdHJpbmcgPVxuICAgICFpc0RldmVsb3BtZW50ICYmIHByZXNlcnZlTW9kdWxlc1Jvb3QgPT09IGZhbHNlXG4gICAgICA/IG1vZHVsZUJhc2UgLy8gU3RyaXAgc3JjLyBmcm9tIG91dHB1dCBwYXRocyAocHJvZHVjdGlvbiBvbmx5KVxuICAgICAgOiB1bmRlZmluZWQ7IC8vIEtlZXAgc3JjLyBpbiBvdXRwdXQgcGF0aHNcblxuICBjb25zdCBjbGllbnQgPVxuICAgIHR5cGVvZiBvcHRpb25zLmJ1aWxkPy5jbGllbnQgPT09IFwic3RyaW5nXCJcbiAgICAgID8gb3B0aW9ucy5idWlsZC5jbGllbnRcbiAgICAgIDogREVGQVVMVF9DT05GSUcuQlVJTEQuY2xpZW50O1xuXG4gIGNvbnN0IG91dERpciA9XG4gICAgdHlwZW9mIG9wdGlvbnMuYnVpbGQ/Lm91dERpciA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLmJ1aWxkLm91dERpclxuICAgICAgOiBERUZBVUxUX0NPTkZJRy5CVUlMRC5vdXREaXI7XG5cbiAgLy8gVXNlIGRlZmF1bHRzIGZvciBub3cgLSB0aGVzZSB3aWxsIGJlIHVwZGF0ZWQgbGF0ZXIgd2hlbiB3ZSBoYXZlIHRoZSBjb25maWcgd2l0aCBwcm9wZXIgcHJlZml4XG4gIGNvbnN0IG1vZHVsZUJhc2VQYXRoID1cbiAgICB0eXBlb2Ygb3B0aW9ucy5tb2R1bGVCYXNlUGF0aCA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLm1vZHVsZUJhc2VQYXRoXG4gICAgICA6IERFRkFVTFRfQ09ORklHLk1PRFVMRV9CQVNFX1BBVEg7XG5cbiAgY29uc3QgbW9kdWxlQmFzZVVSTCA9XG4gICAgdHlwZW9mIG9wdGlvbnMubW9kdWxlQmFzZVVSTCA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLm1vZHVsZUJhc2VVUkxcbiAgICAgIDogREVGQVVMVF9DT05GSUcuTU9EVUxFX0JBU0VfVVJMO1xuXG4gIGNvbnN0IG1vZHVsZVJvb3RQYXRoID1cbiAgICB0eXBlb2Ygb3B0aW9ucy5tb2R1bGVSb290UGF0aCA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLm1vZHVsZVJvb3RQYXRoXG4gICAgICA6IGpvaW4ocHJvamVjdFJvb3QsIG91dERpciwgY2xpZW50KTtcblxuICBjb25zdCBwdWJsaWNPcmlnaW4gPVxuICAgIHR5cGVvZiBvcHRpb25zLnB1YmxpY09yaWdpbiA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLnB1YmxpY09yaWdpblxuICAgICAgOiBERUZBVUxUX0NPTkZJRy5QVUJMSUNfT1JJR0lOO1xuXG5cbiAgY29uc3QgcnNjV29ya2VyUGF0aCA9XG4gICAgdHlwZW9mIG9wdGlvbnMucnNjV29ya2VyUGF0aCA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyByZXNvbHZlKHByb2plY3RSb290LCBvcHRpb25zLnJzY1dvcmtlclBhdGgpXG4gICAgICA6IHJlc29sdmUocGx1Z2luUm9vdCwgREVGQVVMVF9DT05GSUcuUlNDX1dPUktFUl9QQVRIKTtcblxuICBjb25zdCBodG1sV29ya2VyUGF0aCA9XG4gICAgdHlwZW9mIG9wdGlvbnMuaHRtbFdvcmtlclBhdGggPT09IFwic3RyaW5nXCJcbiAgICAgID8gcmVzb2x2ZShwcm9qZWN0Um9vdCwgb3B0aW9ucy5odG1sV29ya2VyUGF0aClcbiAgICAgIDogcmVzb2x2ZShwbHVnaW5Sb290LCBERUZBVUxUX0NPTkZJRy5IVE1MX1dPUktFUl9QQVRIKTtcblxuICBjb25zdCBsb2FkZXJQYXRoID1cbiAgICB0eXBlb2Ygb3B0aW9ucy5sb2FkZXJQYXRoID09PSBcInN0cmluZ1wiXG4gICAgICA/IHJlc29sdmUocHJvamVjdFJvb3QsIG9wdGlvbnMubG9hZGVyUGF0aClcbiAgICAgIDogcmVzb2x2ZShwbHVnaW5Sb290LCBERUZBVUxUX0NPTkZJRy5MT0FERVJfUEFUSCk7XG5cbiAgY29uc3QganNFeHRlbnNpb24gPVxuICAgIHR5cGVvZiBvcHRpb25zLmJ1aWxkPy5qc0V4dGVuc2lvbiA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLmJ1aWxkLmpzRXh0ZW5zaW9uXG4gICAgICA6IERFRkFVTFRfQ09ORklHLkJVSUxELmpzRXh0ZW5zaW9uO1xuICBjb25zdCBjc3NFeHRlbnNpb24gPVxuICAgIHR5cGVvZiBvcHRpb25zLmJ1aWxkPy5jc3NFeHRlbnNpb24gPT09IFwic3RyaW5nXCJcbiAgICAgID8gb3B0aW9ucy5idWlsZC5jc3NFeHRlbnNpb25cbiAgICAgIDogREVGQVVMVF9DT05GSUcuQlVJTEQuY3NzRXh0ZW5zaW9uO1xuICBjb25zdCBjc3NNb2R1bGVFeHRlbnNpb24gPVxuICAgIHR5cGVvZiBvcHRpb25zLmJ1aWxkPy5jc3NNb2R1bGVFeHRlbnNpb24gPT09IFwic3RyaW5nXCJcbiAgICAgID8gb3B0aW9ucy5idWlsZC5jc3NNb2R1bGVFeHRlbnNpb25cbiAgICAgIDogREVGQVVMVF9DT05GSUcuQlVJTEQuY3NzTW9kdWxlRXh0ZW5zaW9uO1xuICBjb25zdCBodG1sRXh0ZW5zaW9uID1cbiAgICB0eXBlb2Ygb3B0aW9ucy5idWlsZD8uaHRtbEV4dGVuc2lvbiA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLmJ1aWxkLmh0bWxFeHRlbnNpb25cbiAgICAgIDogREVGQVVMVF9DT05GSUcuQlVJTEQuaHRtbEV4dGVuc2lvbjtcbiAgY29uc3QganNvbkV4dGVuc2lvbiA9XG4gICAgdHlwZW9mIG9wdGlvbnMuYnVpbGQ/Lmpzb25FeHRlbnNpb24gPT09IFwic3RyaW5nXCJcbiAgICAgID8gb3B0aW9ucy5idWlsZC5qc29uRXh0ZW5zaW9uXG4gICAgICA6IERFRkFVTFRfQ09ORklHLkJVSUxELmpzb25FeHRlbnNpb247XG4gIGNvbnN0IHJzY0V4dGVuc2lvbiA9XG4gICAgdHlwZW9mIG9wdGlvbnMuYnVpbGQ/LnJzY0V4dGVuc2lvbiA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLmJ1aWxkLnJzY0V4dGVuc2lvblxuICAgICAgOiBERUZBVUxUX0NPTkZJRy5CVUlMRC5yc2NFeHRlbnNpb247XG5cbiAgY29uc3QgcnNjT3V0cHV0UGF0aCA9XG4gICAgdHlwZW9mIG9wdGlvbnMuYnVpbGQ/LnJzY091dHB1dFBhdGggPT09IFwic3RyaW5nXCJcbiAgICAgID8gb3B0aW9ucy5idWlsZC5yc2NPdXRwdXRQYXRoXG4gICAgICA6IERFRkFVTFRfQ09ORklHLkJVSUxELnJzY091dHB1dFBhdGg7XG4gIGNvbnN0IGh0bWxPdXRwdXRQYXRoID1cbiAgICB0eXBlb2Ygb3B0aW9ucy5idWlsZD8uaHRtbE91dHB1dFBhdGggPT09IFwic3RyaW5nXCJcbiAgICAgID8gb3B0aW9ucy5idWlsZC5odG1sT3V0cHV0UGF0aFxuICAgICAgOiBERUZBVUxUX0NPTkZJRy5CVUlMRC5odG1sT3V0cHV0UGF0aDtcblxuICBjb25zdCBtb2R1bGVQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8ubW9kdWxlUGF0dGVybixcbiAgICBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLm1vZHVsZVBhdHRlcm5cbiAgKTtcblxuICBjb25zdCBqc29uUGF0dGVybiA9IHJlc29sdmVSZWdFeHAoXG4gICAgb3B0aW9ucy5hdXRvRGlzY292ZXI/Lmpzb25QYXR0ZXJuLFxuICAgIERFRkFVTFRfQ09ORklHLkFVVE9fRElTQ09WRVIuanNvblBhdHRlcm5cbiAgKTtcblxuICBjb25zdCBjc3NQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8uY3NzUGF0dGVybixcbiAgICBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLmNzc1BhdHRlcm5cbiAgKTtcblxuICBjb25zdCBodG1sUGF0dGVybiA9IHJlc29sdmVSZWdFeHAoXG4gICAgb3B0aW9ucy5hdXRvRGlzY292ZXI/Lmh0bWxQYXR0ZXJuLFxuICAgIERFRkFVTFRfQ09ORklHLkFVVE9fRElTQ09WRVIuaHRtbFBhdHRlcm5cbiAgKTtcblxuICBjb25zdCByc2NQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8ucnNjUGF0dGVybixcbiAgICBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLnJzY1BhdHRlcm5cbiAgKTtcblxuICBjb25zdCBjbGllbnRQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8uY2xpZW50UGF0dGVybixcbiAgICBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLmNsaWVudFBhdHRlcm5cbiAgKTtcblxuICBjb25zdCBzZXJ2ZXJQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8uc2VydmVyUGF0dGVybixcbiAgICBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLnNlcnZlclBhdHRlcm5cbiAgKTtcblxuICBjb25zdCBub2RlUGF0dGVybiA9IHJlc29sdmVSZWdFeHAoXG4gICAgb3B0aW9ucy5hdXRvRGlzY292ZXI/Lm5vZGVQYXR0ZXJuLFxuICAgIERFRkFVTFRfQ09ORklHLkFVVE9fRElTQ09WRVIubm9kZU9ubHlcbiAgKTtcblxuICBjb25zdCBwcm9wc1BhdHRlcm4gPSByZXNvbHZlUmVnRXhwKFxuICAgIG9wdGlvbnMuYXV0b0Rpc2NvdmVyPy5wcm9wc1BhdHRlcm4sXG4gICAgREVGQVVMVF9DT05GSUcuQVVUT19ESVNDT1ZFUi5wcm9wc1BhdHRlcm5cbiAgKTtcblxuICBjb25zdCBwYWdlUGF0dGVybiA9IHJlc29sdmVSZWdFeHAoXG4gICAgb3B0aW9ucy5hdXRvRGlzY292ZXI/LnBhZ2VQYXR0ZXJuLFxuICAgIERFRkFVTFRfQ09ORklHLkFVVE9fRElTQ09WRVIucGFnZVBhdHRlcm5cbiAgKTtcblxuICBjb25zdCBjc3NNb2R1bGVQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8uY3NzTW9kdWxlUGF0dGVybixcbiAgICBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLmNzc01vZHVsZVBhdHRlcm5cbiAgKTtcblxuICBjb25zdCB2ZW5kb3JQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8udmVuZG9yUGF0dGVybixcbiAgICBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLnZlbmRvclBhdHRlcm5cbiAgKTtcblxuICBjb25zdCB2aXJ0dWFsUGF0dGVybiA9IHJlc29sdmVSZWdFeHAoXG4gICAgb3B0aW9ucy5hdXRvRGlzY292ZXI/LnZpcnR1YWxQYXR0ZXJuLFxuICAgIERFRkFVTFRfQ09ORklHLkFVVE9fRElTQ09WRVIudmlydHVhbFBhdHRlcm5cbiAgKTtcblxuICBjb25zdCBkb3RQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8uZG90UGF0dGVybixcbiAgICBCQVNFX1BBVFRFUk5TLkRPVF9GSUxFU1xuICApO1xuXG4gIC8qKiBMb2FkZXIgb3B0aW9ucyAqL1xuICBjb25zdCBzZXJ2ZXJEaXJlY3RpdmUgPSByZXNvbHZlUmVnRXhwKFxuICAgIG9wdGlvbnMubG9hZGVyPy5zZXJ2ZXJEaXJlY3RpdmUsXG4gICAgREVGQVVMVF9MT0FERVJfQ09ORklHLnNlcnZlckRpcmVjdGl2ZVxuICApO1xuICBjb25zdCBjbGllbnREaXJlY3RpdmUgPSByZXNvbHZlUmVnRXhwKFxuICAgIG9wdGlvbnMubG9hZGVyPy5jbGllbnREaXJlY3RpdmUsXG4gICAgREVGQVVMVF9MT0FERVJfQ09ORklHLmNsaWVudERpcmVjdGl2ZVxuICApO1xuICBjb25zdCBpc1NlcnZlckZ1bmN0aW9uQ29kZSA9IHJlc29sdmVEaXJlY3RpdmVNYXRjaGVyKFxuICAgIHNlcnZlckRpcmVjdGl2ZSxcbiAgICAoY29kZTogc3RyaW5nLCBtb2R1bGVJZD86IHN0cmluZykgPT5cbiAgICAgIGNvZGUubWF0Y2goc2VydmVyRGlyZWN0aXZlKSAhPSBudWxsIHx8XG4gICAgICAodHlwZW9mIG1vZHVsZUlkID09PSBcInN0cmluZ1wiICYmIHNlcnZlclBhdHRlcm4udGVzdChtb2R1bGVJZCkpIHx8XG4gICAgICBmYWxzZVxuICApO1xuXG4gIGNvbnN0IGlzQ2xpZW50Q29tcG9uZW50Q29kZSA9IHJlc29sdmVEaXJlY3RpdmVNYXRjaGVyKFxuICAgIGNsaWVudERpcmVjdGl2ZSxcbiAgICAoY29kZTogc3RyaW5nLCBtb2R1bGVJZD86IHN0cmluZykgPT5cbiAgICAgIGNvZGUubWF0Y2goY2xpZW50RGlyZWN0aXZlKSAhPSBudWxsIHx8XG4gICAgICAodHlwZW9mIG1vZHVsZUlkID09PSBcInN0cmluZ1wiICYmIGNsaWVudFBhdHRlcm4udGVzdChtb2R1bGVJZCkpIHx8XG4gICAgICBmYWxzZVxuICApO1xuXG4gIGNvbnN0IGlzQ2xpZW50Q29tcG9uZW50QnlDb2RlID0gcmVzb2x2ZURpcmVjdGl2ZU1hdGNoZXIoXG4gICAgY2xpZW50RGlyZWN0aXZlLFxuICAgIChjb2RlOiBzdHJpbmcpID0+IGNvZGUubWF0Y2goY2xpZW50RGlyZWN0aXZlKSAhPSBudWxsIHx8IGZhbHNlXG4gICk7XG5cbiAgY29uc3QgaXNDbGllbnRDb21wb25lbnRCeU5hbWUgPSAobW9kdWxlSWQ6IHN0cmluZywgX3RyYW5zZm9ybWVkTW9kdWxlSWQ/OiBzdHJpbmcpID0+IFxuICAgICh0eXBlb2YgbW9kdWxlSWQgPT09IFwic3RyaW5nXCIgJiYgY2xpZW50UGF0dGVybi50ZXN0KG1vZHVsZUlkKSkgfHwgZmFsc2U7XG5cbiAgY29uc3QgaGFzaE9wdGlvbiA9IG9wdGlvbnMuYnVpbGQ/Lmhhc2ggPz8gREVGQVVMVF9DT05GSUcuQlVJTEQuaGFzaDtcblxuICAvLyBDbGVhbiBoYXNoIEFQSSB0aGF0IG1pbWljcyBSb2xsdXAncyBiZWhhdmlvciBidXQgYWxsb3dzIGNvbnRyb2wgb3ZlciBpbnB1dFxuICBjb25zdCBjcmVhdGVSb2xsdXBMaWtlSGFzaCA9IChjb250ZW50OiBzdHJpbmcsIGhhc2hDaGFyYWN0ZXJzOiAnYmFzZTM2JyB8ICdiYXNlNjQnIHwgJ2hleCcgPSAnYmFzZTM2JykgPT4ge1xuICAgIGNvbnN0IGhhc2ggPSBjcmVhdGVIYXNoKCdzaGExJyk7XG4gICAgaGFzaC51cGRhdGUoY29udGVudCk7XG4gICAgY29uc3QgZnVsbEhhc2ggPSBoYXNoLmRpZ2VzdCgnaGV4Jyk7XG4gICAgXG4gICAgLy8gQXBwbHkgdGhlIHNhbWUgY2hhcmFjdGVyIHNldCBsb2dpYyBhcyBSb2xsdXBcbiAgICBzd2l0Y2ggKGhhc2hDaGFyYWN0ZXJzKSB7XG4gICAgICBjYXNlICdiYXNlMzYnOlxuICAgICAgICAvLyBDb252ZXJ0IGhleCB0byBiYXNlMzYgKDAtOSwgYS16KVxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoZnVsbEhhc2guc3Vic3RyaW5nKDAsIDgpLCAxNikudG9TdHJpbmcoMzYpO1xuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gQ29udmVydCB0byBiYXNlNjQtbGlrZSBmb3JtYXQgKEEtWiwgYS16LCAwLTksIC0sIF8pXG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShmdWxsSGFzaC5zdWJzdHJpbmcoMCwgOCksICdoZXgnKS50b1N0cmluZygnYmFzZTY0JylcbiAgICAgICAgICAucmVwbGFjZSgvXFwrL2csICctJylcbiAgICAgICAgICAucmVwbGFjZSgvXFwvL2csICdfJylcbiAgICAgICAgICAucmVwbGFjZSgvPS9nLCAnJyk7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gUmV0dXJuIGhleCBmb3JtYXRcbiAgICAgICAgcmV0dXJuIGZ1bGxIYXNoLnN1YnN0cmluZygwLCA4KTtcbiAgICB9XG4gIH07XG5cbiAgLy8gVXNlci1mYWNpbmcgaGFzaCBmdW5jdGlvbiB0aGF0IGNhbiB0YWtlIHNvdXJjZSBjb250ZW50IG9yIGZpbGVuYW1lXG4gIGNvbnN0IGhhc2ggPSAoaW5wdXQ6IHN0cmluZyB8IG51bGwsIF9zc3I6IGJvb2xlYW4sIHNvdXJjZUNvbnRlbnQ/OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIWlucHV0KSByZXR1cm4gXCJcIjtcbiAgICBpZiAobmV3IFJlZ0V4cChCQVNFX1BBVFRFUk5TLkVYVC5OT0RFKS50ZXN0KGlucHV0KSkge1xuICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBcbiAgICAvLyBDUklUSUNBTDogTmV2ZXIgaGFzaCBub2RlX21vZHVsZXMgZmlsZXMgLSBWaXRlL1JvbGx1cCBoYW5kbGVzIHRob3NlXG4gICAgaWYgKGlucHV0LmluY2x1ZGVzKFwibm9kZV9tb2R1bGVzXCIpKSB7XG4gICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuICAgIFxuICAgIC8vIENSSVRJQ0FMOiBOZXZlciBoYXNoIHZpcnR1YWwgbW9kdWxlcyAoX3ZpcnR1YWwgb3IgbWF0Y2hpbmcgdmlydHVhbFBhdHRlcm4pIC0gVml0ZSBoYW5kbGVzIHRob3NlXG4gICAgY29uc3QgdmlydHVhbFBhdHRlcm4gPSByZXNvbHZlUmVnRXhwKFxuICAgICAgb3B0aW9ucy5hdXRvRGlzY292ZXI/LnZpcnR1YWxQYXR0ZXJuLFxuICAgICAgREVGQVVMVF9DT05GSUcuQVVUT19ESVNDT1ZFUi52aXJ0dWFsUGF0dGVyblxuICAgICk7XG4gICAgaWYgKGlucHV0LmluY2x1ZGVzKFwiX3ZpcnR1YWxcIikgfHwgKHZpcnR1YWxQYXR0ZXJuICYmIHZpcnR1YWxQYXR0ZXJuLnRlc3QoaW5wdXQpKSkge1xuICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBcbiAgICAvLyBDaGVjayBpZiBoYXNoaW5nIGlzIGRpc2FibGVkXG4gICAgaWYgKGhhc2hPcHRpb24gPT09IFwiZmFsc2VcIikge1xuICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBcbiAgICAvLyBPbmx5IGhhc2ggY2xpZW50IGNvbXBvbmVudHMgLSBzZXJ2ZXIgZmlsZXMgc2hvdWxkIG5vdCBiZSBoYXNoZWRcbiAgICBjb25zdCBpc0NsaWVudENvbXBvbmVudCA9IGNsaWVudFBhdHRlcm4udGVzdChpbnB1dCk7XG4gICAgaWYgKCFpc0NsaWVudENvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBcbiAgICAvLyBEZXRlcm1pbmUgd2hhdCB0byBoYXNoIGJhc2VkIG9uIGF2YWlsYWJsZSBpbnB1dFxuICAgIGxldCBjb250ZW50VG9IYXNoOiBzdHJpbmc7XG4gICAgXG4gICAgaWYgKHNvdXJjZUNvbnRlbnQpIHtcbiAgICAgIC8vIFVzZSBwcm92aWRlZCBzb3VyY2UgY29udGVudCAocHJlZmVycmVkKVxuICAgICAgY29udGVudFRvSGFzaCA9IHNvdXJjZUNvbnRlbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgICAgLy8gVHJ5IHRvIHJlYWQgc291cmNlIGZpbGUgY29udGVudFxuICAgICB0cnkge1xuICAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSByZXNvbHZlKHByb2plY3RSb290LCBpbnB1dCk7XG4gICAgICAgaWYgKGV4aXN0c1N5bmMoc291cmNlUGF0aCkpIHtcbiAgICAgICAgIGNvbnRlbnRUb0hhc2ggPSByZWFkRmlsZVN5bmMoc291cmNlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICAgICAvLyBEZWJ1ZyBsb2dnaW5nXG4gICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgIGxvZ2dlci5pbmZvKGBbaGFzaF0gUmVhZGluZyBzb3VyY2U6ICR7c291cmNlUGF0aH0gKCR7Y29udGVudFRvSGFzaC5sZW5ndGh9IGNoYXJzKWApO1xuICAgICAgICAgfVxuICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAvLyBGYWxsYmFjayB0byBmaWxlbmFtZVxuICAgICAgICAgY29udGVudFRvSGFzaCA9IGlucHV0O1xuICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICBsb2dnZXIud2FybihgW2hhc2hdIEZpbGUgbm90IGZvdW5kOiAke3NvdXJjZVBhdGh9LCB1c2luZyBmaWxlbmFtZTogJHtpbnB1dH1gKTtcbiAgICAgICAgIH1cbiAgICAgICB9XG4gICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgLy8gRmFsbGJhY2sgdG8gZmlsZW5hbWVcbiAgICAgICBjb250ZW50VG9IYXNoID0gaW5wdXQ7XG4gICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgbG9nZ2VyLndhcm4oYFtoYXNoXSBFcnJvciByZWFkaW5nICR7aW5wdXR9OiAke2Vycm9yfWApO1xuICAgICAgIH1cbiAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBHZW5lcmF0ZSBoYXNoIHVzaW5nIFJvbGx1cC1saWtlIGFsZ29yaXRobVxuICAgIGNvbnN0IGhhc2hDaGFyYWN0ZXJzID0gdHlwZW9mIGhhc2hPcHRpb24gPT09ICdvYmplY3QnICYmIGhhc2hPcHRpb24/LmZvcm1hdCA9PT0gJ2hleCcgPyAnaGV4JyA6ICdiYXNlMzYnO1xuICAgIGNvbnN0IGNvbnRlbnRIYXNoID0gY3JlYXRlUm9sbHVwTGlrZUhhc2goY29udGVudFRvSGFzaCwgaGFzaENoYXJhY3RlcnMpO1xuICAgIFxuICAgIC8vIEFwcGx5IG5hbWluZyBsb2dpY1xuICAgIGNvbnN0IGV4dGVuc2lvbkluZGV4ID0gaW5wdXQubGFzdEluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChleHRlbnNpb25JbmRleCAhPT0gLTEpIHtcbiAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IGlucHV0LnNsaWNlKGV4dGVuc2lvbkluZGV4KTtcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gaW5wdXQuc2xpY2UoMCwgZXh0ZW5zaW9uSW5kZXgpO1xuICAgICAgcmV0dXJuIGZpbGVuYW1lICsgXCItXCIgKyBjb250ZW50SGFzaCArIGV4dGVuc2lvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGlucHV0ICsgXCItXCIgKyBjb250ZW50SGFzaDtcbiAgICB9XG4gIH07XG5cbiAgLy8gT3V0cHV0IHBhdGggcmVzb2x1dGlvblxuICBjb25zdCBnZXRPdXRwdXRQYXRoID0gKG46IHN0cmluZyB8IG51bGwsIGlzQXNzZXQ6IGJvb2xlYW4gPSBmYWxzZSkgPT4ge1xuICAgIGlmICghbikgcmV0dXJuIFwiXCI7XG4gICAgbGV0IHBhdGggPSBoYW5kbGVTZWFyY2hRdWVyeShuKTtcbiAgICBwYXRoID0gcGF0aC5zdGFydHNXaXRoKG1vZHVsZUJhc2UgKyBtb2R1bGVCYXNlUGF0aClcbiAgICAgID8gcGF0aC5zbGljZShtb2R1bGVCYXNlLmxlbmd0aCArIG1vZHVsZUJhc2VQYXRoLmxlbmd0aClcbiAgICAgIDogcGF0aDtcblxuICAgIC8vIEZvciBhc3NldHMgdGhhdCBhcmUgbm90IG1vZHVsZXMsIHByZXNlcnZlIHRoZSBvcmlnaW5hbCBleHRlbnNpb25cbiAgICAvLyBPbmx5IGFwcGx5IG1vZHVsZSB0cmFuc2Zvcm1hdGlvbnMgaWYgdGhlIGZpbGUgYWN0dWFsbHkgbWF0Y2hlcyBtb2R1bGUgcGF0dGVybnNcbiAgICBpZiAoaXNBc3NldCkge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIG1vZHVsZSBmaWxlIChKUy9UUy9KU1gvVFNYKSAtIGlmIHNvLCBhcHBseSBtb2R1bGUgdHJhbnNmb3JtYXRpb25zXG4gICAgICBjb25zdCBpc01vZHVsZUZpbGUgPSBtb2R1bGVQYXR0ZXJuLnRlc3QocGF0aCkgfHwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudFBhdHRlcm4udGVzdChwYXRoKSB8fCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyUGF0dGVybi50ZXN0KHBhdGgpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzUGF0dGVybi50ZXN0KHBhdGgpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VQYXR0ZXJuLnRlc3QocGF0aCk7XG4gICAgICBcbiAgICAgIC8vIElmIGl0J3Mgbm90IGEgbW9kdWxlIGZpbGUsIHByZXNlcnZlIHRoZSBvcmlnaW5hbCBleHRlbnNpb25cbiAgICAgIGlmICghaXNNb2R1bGVGaWxlKSB7XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2ZW5kb3JQYXR0ZXJuLnRlc3QocGF0aCkpXG4gICAgICByZXR1cm4gcmVnaXN0ZXJQYXRoKHBhdGgsIHZlbmRvclBhdHRlcm4sIGpzRXh0ZW5zaW9uKTtcbiAgICBpZiAoY3NzTW9kdWxlUGF0dGVybi50ZXN0KHBhdGgpKVxuICAgICAgcmV0dXJuIHJlZ2lzdGVyUGF0aChwYXRoLCBjc3NNb2R1bGVQYXR0ZXJuLCBjc3NFeHRlbnNpb24pO1xuICAgIGlmIChjc3NQYXR0ZXJuLnRlc3QocGF0aCkpXG4gICAgICByZXR1cm4gcmVnaXN0ZXJQYXRoKHBhdGgsIGNzc1BhdHRlcm4sIGNzc0V4dGVuc2lvbik7XG4gICAgaWYgKGNsaWVudFBhdHRlcm4udGVzdChwYXRoKSlcbiAgICAgIHJldHVybiByZWdpc3RlclBhdGgocGF0aCwgY2xpZW50UGF0dGVybiwganNFeHRlbnNpb24pO1xuICAgIGlmIChodG1sUGF0dGVybi50ZXN0KHBhdGgpKVxuICAgICAgcmV0dXJuIHJlZ2lzdGVyUGF0aChwYXRoLCBodG1sUGF0dGVybiwgaHRtbEV4dGVuc2lvbik7XG4gICAgaWYgKGpzb25QYXR0ZXJuLnRlc3QocGF0aCkpXG4gICAgICByZXR1cm4gcmVnaXN0ZXJQYXRoKHBhdGgsIGpzb25QYXR0ZXJuLCBqc29uRXh0ZW5zaW9uKTtcbiAgICBpZiAocHJvcHNQYXR0ZXJuLnRlc3QocGF0aCkpXG4gICAgICByZXR1cm4gcmVnaXN0ZXJQYXRoKHBhdGgsIHByb3BzUGF0dGVybiwganNFeHRlbnNpb24pO1xuICAgIGlmIChwYWdlUGF0dGVybi50ZXN0KHBhdGgpKVxuICAgICAgcmV0dXJuIHJlZ2lzdGVyUGF0aChwYXRoLCBwYWdlUGF0dGVybiwganNFeHRlbnNpb24pO1xuICAgIGlmIChzZXJ2ZXJQYXR0ZXJuLnRlc3QocGF0aCkpXG4gICAgICByZXR1cm4gcmVnaXN0ZXJQYXRoKHBhdGgsIHNlcnZlclBhdHRlcm4sIGpzRXh0ZW5zaW9uKTtcbiAgICBpZiAobW9kdWxlUGF0dGVybi50ZXN0KHBhdGgpKVxuICAgICAgcmV0dXJuIHJlZ2lzdGVyUGF0aChwYXRoLCBtb2R1bGVQYXR0ZXJuLCBqc0V4dGVuc2lvbik7XG4gICAgXG4gICAgLy8gRmFsbGJhY2s6IG9ubHkgYXBwbHkgbW9kdWxlIHBhdHRlcm4gaWYgd2UncmUgc3VyZSBpdCdzIGEgbW9kdWxlXG4gICAgLy8gRm9yIGFzc2V0cywgd2UndmUgYWxyZWFkeSByZXR1cm5lZCBhYm92ZSwgc28gdGhpcyBpcyBzYWZlXG4gICAgcmV0dXJuIHJlZ2lzdGVyUGF0aChwYXRoLCBtb2R1bGVQYXR0ZXJuLCBqc0V4dGVuc2lvbik7XG4gIH07XG5cbiAgY29uc3Qgbm9ybWFsaXplciA9XG4gICAgb3B0aW9ucy5ub3JtYWxpemVyID8/XG4gICAgY3JlYXRlSW5wdXROb3JtYWxpemVyKHtcbiAgICAgIHJvb3Q6IHByb2plY3RSb290LFxuICAgICAgcHJlc2VydmVNb2R1bGVzUm9vdDogcHJlc2VydmVNb2R1bGVzUm9vdFN0cmluZyxcbiAgICAgIHJlbW92ZUV4dGVuc2lvbjogdHJ1ZSxcbiAgICAgIG1vZHVsZUJhc2VQYXRoLFxuICAgICAgbW9kdWxlQmFzZVVSTCxcbiAgICB9KTtcbiAgLy8gRmlsZSBuYW1pbmcgZnVuY3Rpb25zIC0gZGVmaW5lZCBhcyByZWd1bGFyIGZ1bmN0aW9ucyB0byBhdm9pZCBjbG9zdXJlIGlzc3Vlc1xuICBmdW5jdGlvbiBlbnRyeUZpbGUobjogUHJlUmVuZGVyZWRDaHVuaywgc3NyOiBib29sZWFuLCBzb3VyY2VDb250ZW50Pzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZXIobi5uYW1lKVswXTtcbiAgICBsZXQgb3V0cHV0UGF0aCA9IGdldE91dHB1dFBhdGgobm9ybWFsaXplZE5hbWUpO1xuICAgIFxuICAgIC8vIFdoZW4gcHJlc2VydmVNb2R1bGVzUm9vdCBpcyB0cnVlLCBwcmVzZXJ2ZSB0aGUgc3JjLyBwcmVmaXggaW4gb3V0cHV0IHBhdGhzXG4gICAgaWYgKHByZXNlcnZlTW9kdWxlc1Jvb3QgJiYgbi5uYW1lLnN0YXJ0c1dpdGgoXCJzcmMvXCIpKSB7XG4gICAgICAvLyBJZiB0aGUgbm9ybWFsaXplZCBuYW1lIGRvZXNuJ3QgaGF2ZSBzcmMvLCBhZGQgaXQgYmFja1xuICAgICAgaWYgKCFvdXRwdXRQYXRoLnN0YXJ0c1dpdGgoXCJzcmMvXCIpKSB7XG4gICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBvdXRwdXRQYXRoIHN0YXJ0cyB3aXRoIGEgc2xhc2hcbiAgICAgICAgaWYgKG91dHB1dFBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgICBvdXRwdXRQYXRoID0gXCJzcmNcIiArIG91dHB1dFBhdGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0cHV0UGF0aCA9IFwic3JjL1wiICsgb3V0cHV0UGF0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICByZXR1cm4gaGFzaChvdXRwdXRQYXRoLCBzc3IsIHNvdXJjZUNvbnRlbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2h1bmtGaWxlKG46IFByZVJlbmRlcmVkQ2h1bmssIHNzcjogYm9vbGVhbiwgc291cmNlQ29udGVudD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemVyKG4ubmFtZSlbMF07XG4gICAgbGV0IG91dHB1dFBhdGggPSBnZXRPdXRwdXRQYXRoKG5vcm1hbGl6ZWROYW1lKTtcbiAgICBcbiAgICAvLyBXaGVuIHByZXNlcnZlTW9kdWxlc1Jvb3QgaXMgdHJ1ZSwgcHJlc2VydmUgdGhlIHNyYy8gcHJlZml4IGluIG91dHB1dCBwYXRoc1xuICAgIGlmIChwcmVzZXJ2ZU1vZHVsZXNSb290ICYmIG4ubmFtZS5zdGFydHNXaXRoKFwic3JjL1wiKSkge1xuICAgICAgLy8gSWYgdGhlIG5vcm1hbGl6ZWQgbmFtZSBkb2Vzbid0IGhhdmUgc3JjLywgYWRkIGl0IGJhY2tcbiAgICAgIGlmICghb3V0cHV0UGF0aC5zdGFydHNXaXRoKFwic3JjL1wiKSkge1xuICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgb3V0cHV0UGF0aCBzdGFydHMgd2l0aCBhIHNsYXNoXG4gICAgICAgIGlmIChvdXRwdXRQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgICAgb3V0cHV0UGF0aCA9IFwic3JjXCIgKyBvdXRwdXRQYXRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dHB1dFBhdGggPSBcInNyYy9cIiArIG91dHB1dFBhdGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGhhc2gob3V0cHV0UGF0aCwgc3NyLCBzb3VyY2VDb250ZW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFzc2V0RmlsZShuOiBQcmVSZW5kZXJlZEFzc2V0LCBzc3I6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgaWYgKG4ubmFtZXMubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIG4ubmFtZXMubWFwKChuYW1lKSA9PiBoYXNoKG5hbWUsIHNzcikpLmpvaW4oXCIsXCIpO1xuICAgIH1cbiAgICBsZXQgZmlyc3ROYW1lID0gbi5uYW1lc1swXTtcblxuICAgIC8vIENsZWFuIHVwIGFzc2V0IHBhdGhzIGJ5IHJlbW92aW5nIHRoZSBtb2R1bGVCYXNlIGZyb20gd2l0aGluIGFzc2V0cyBkaXJlY3RvcnlcbiAgICAvLyBUcmFuc2Zvcm06IGFzc2V0cy9zcmMvcGFnZS9maWxlLmNzcyAtPiBhc3NldHMvcGFnZS9maWxlLmNzc1xuICAgIGNvbnN0IGFzc2V0c0RpciA9IGJ1aWxkLmFzc2V0c0RpciB8fCBcImFzc2V0c1wiO1xuICAgIGlmIChmaXJzdE5hbWUuc3RhcnRzV2l0aChhc3NldHNEaXIgKyBcIi9cIiArIG1vZHVsZUJhc2UgKyBcIi9cIikpIHtcbiAgICAgIGZpcnN0TmFtZSA9XG4gICAgICAgIGFzc2V0c0RpciArXG4gICAgICAgIFwiL1wiICtcbiAgICAgICAgZmlyc3ROYW1lLnNsaWNlKChhc3NldHNEaXIgKyBcIi9cIiArIG1vZHVsZUJhc2UgKyBcIi9cIikubGVuZ3RoKTtcbiAgICB9XG4gICAgLy8gSGFuZGxlIG1vZHVsZUJhc2VQYXRoIHJlbW92YWxcbiAgICBlbHNlIGlmIChtb2R1bGVCYXNlUGF0aCAmJiBmaXJzdE5hbWUuc3RhcnRzV2l0aChtb2R1bGVCYXNlUGF0aCkpIHtcbiAgICAgIGZpcnN0TmFtZSA9IGZpcnN0TmFtZS5zbGljZShtb2R1bGVCYXNlUGF0aC5sZW5ndGgpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBtb2R1bGVCYXNlVVJMICYmXG4gICAgICBtb2R1bGVCYXNlVVJMICE9PSBcIi9cIiAmJlxuICAgICAgbW9kdWxlQmFzZVVSTCAhPT0gXCJcIiAmJlxuICAgICAgZmlyc3ROYW1lLnN0YXJ0c1dpdGgobW9kdWxlQmFzZVVSTClcbiAgICApIHtcbiAgICAgIGZpcnN0TmFtZSA9IGZpcnN0TmFtZS5zbGljZShtb2R1bGVCYXNlVVJMLmxlbmd0aCk7XG4gICAgfVxuICAgIC8vIEhhbmRsZSBkaXJlY3QgbW9kdWxlQmFzZSByZW1vdmFsXG4gICAgZWxzZSBpZiAoZmlyc3ROYW1lLnN0YXJ0c1dpdGgobW9kdWxlQmFzZSArIFwiL1wiKSkge1xuICAgICAgZmlyc3ROYW1lID0gZmlyc3ROYW1lLnNsaWNlKG1vZHVsZUJhc2UubGVuZ3RoICsgMSk7XG4gICAgfVxuXG4gICAgLy8gRm9yIENTUyBmaWxlcywgZW5zdXJlIHRoZXkgZ28gaW50byB0aGUgYXNzZXRzIGRpcmVjdG9yeVxuICAgIGlmIChmaXJzdE5hbWUuZW5kc1dpdGgoXCIuY3NzXCIpKSB7XG4gICAgICAvLyBBZGQgYXNzZXRzIGRpcmVjdG9yeSBwcmVmaXggaWYgbm90IGFscmVhZHkgcHJlc2VudFxuICAgICAgaWYgKCFmaXJzdE5hbWUuc3RhcnRzV2l0aChhc3NldHNEaXIgKyBcIi9cIikpIHtcbiAgICAgICAgZmlyc3ROYW1lID0gYXNzZXRzRGlyICsgXCIvXCIgKyBmaXJzdE5hbWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGFzaChmaXJzdE5hbWUsIGZhbHNlKTtcbiAgICB9XG5cbiAgICAvLyBGb3Igb3RoZXIgYXNzZXRzLCBhcHBseSB0aGUgZXh0ZW5zaW9uIG1hcHBpbmcgaWYgbmVlZGVkXG4gICAgLy8gUGFzcyBpc0Fzc2V0PXRydWUgdG8gcHJlc2VydmUgZXh0ZW5zaW9ucyBmb3Igbm9uLW1vZHVsZSBhc3NldHNcbiAgICByZXR1cm4gaGFzaChnZXRPdXRwdXRQYXRoKGZpcnN0TmFtZSwgdHJ1ZSksIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBwYWdlc1xuICAgKiBhc3NldHNEaXJcbiAgICogY2xpZW50XG4gICAqIHNlcnZlclxuICAgKiBzdGF0aWNcbiAgICogYXBpXG4gICAqIG91dERpclxuICAgKiBoYXNoXG5cbiAgICogcHJlc2VydmVNb2R1bGVzUm9vdFxuICAgKiByc2NPdXRwdXRQYXRoXG4gICAqIGh0bWxPdXRwdXRQYXRoXG4gICAqIGVudHJ5RmlsZVxuICAgKiBjaHVua0ZpbGVcbiAgICogYXNzZXRGaWxlXG4gICAqIGV4dGVuc2lvbk1hcFxuICAgKiBtb2R1bGVFeHRlbnNpb25cbiAgICoganNFeHRlbnNpb25cbiAgICogY3NzRXh0ZW5zaW9uXG4gICAqIGh0bWxFeHRlbnNpb25cbiAgICoganNvbkV4dGVuc2lvblxuICAgKiByc2NFeHRlbnNpb25cbiAgICogY3NzTW9kdWxlRXh0ZW5zaW9uXG4gICAqIG5vZGVFeHRlbnNpb25cbiAgICovXG4gIGNvbnN0IGJ1aWxkID0ge1xuICAgIHBhZ2VzOiBvcHRpb25zLmJ1aWxkPy5wYWdlcyA/PyBERUZBVUxUX0NPTkZJRy5CVUlMRC5wYWdlcyxcbiAgICBhc3NldHNEaXI6IG9wdGlvbnMuYnVpbGQ/LmFzc2V0c0RpciA/PyBERUZBVUxUX0NPTkZJRy5CVUlMRC5hc3NldHNEaXIsXG4gICAgY2xpZW50OiBvcHRpb25zLmJ1aWxkPy5jbGllbnQgPz8gREVGQVVMVF9DT05GSUcuQlVJTEQuY2xpZW50LFxuICAgIHNlcnZlcjogb3B0aW9ucy5idWlsZD8uc2VydmVyID8/IERFRkFVTFRfQ09ORklHLkJVSUxELnNlcnZlcixcbiAgICBzdGF0aWM6IG9wdGlvbnMuYnVpbGQ/LnN0YXRpYyA/PyBERUZBVUxUX0NPTkZJRy5CVUlMRC5zdGF0aWMsXG4gICAgYXBpOiBvcHRpb25zLmJ1aWxkPy5hcGkgPz8gREVGQVVMVF9DT05GSUcuQlVJTEQuYXBpLFxuICAgIHByZXNlcnZlTW9kdWxlc1Jvb3Q6XG4gICAgICBvcHRpb25zLmJ1aWxkPy5wcmVzZXJ2ZU1vZHVsZXNSb290ID8/XG4gICAgICBERUZBVUxUX0NPTkZJRy5CVUlMRC5wcmVzZXJ2ZU1vZHVsZXNSb290LFxuICAgIG91dERpcjogb3B0aW9ucy5idWlsZD8ub3V0RGlyID8/IERFRkFVTFRfQ09ORklHLkJVSUxELm91dERpcixcbiAgICBoYXNoOiBvcHRpb25zLmJ1aWxkPy5oYXNoID8/IERFRkFVTFRfQ09ORklHLkJVSUxELmhhc2gsXG4gICAgZXh0ZW5zaW9uTWFwOiB7XG4gICAgICAvLyBGaWxlIGV4dGVuc2lvbnMgZmlyc3QgKG1vcmUgc3BlY2lmaWMgcGF0dGVybnMgc2hvdWxkIGNvbWUgZmlyc3QpXG4gICAgICBbQkFTRV9QQVRURVJOUy5FWFQuQ1NTXTogY3NzRXh0ZW5zaW9uLFxuICAgICAgW0JBU0VfUEFUVEVSTlMuRVhULkpTT05dOiBqc29uRXh0ZW5zaW9uLFxuICAgICAgW0JBU0VfUEFUVEVSTlMuRVhULkhUTUxdOiBodG1sRXh0ZW5zaW9uLFxuICAgICAgW0JBU0VfUEFUVEVSTlMuRVhULlJTQ106IHJzY0V4dGVuc2lvbixcbiAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgLm5vZGUgZmlsZXNcbiAgICAgIFtCQVNFX1BBVFRFUk5TLkVYVC5OT0RFXTpcbiAgICAgICAgQkFTRV9QQVRURVJOUy5FWFQuTk9ERSArXG4gICAgICAgIChvcHRpb25zLmJ1aWxkPy5qc0V4dGVuc2lvbiA/PyBERUZBVUxUX0NPTkZJRy5CVUlMRC5qc0V4dGVuc2lvbiksXG4gICAgICAvLyBHZW5lcmFsIG1vZHVsZSBwYXR0ZXJuIGxhc3QgKGxlc3Mgc3BlY2lmaWMpXG4gICAgICBbQkFTRV9QQVRURVJOUy5NT0RVTEVdOiBqc0V4dGVuc2lvbixcbiAgICAgIC4uLm9wdGlvbnMuYnVpbGQ/LmV4dGVuc2lvbk1hcCxcbiAgICB9LFxuICAgIGVudHJ5RmlsZSxcbiAgICBjaHVua0ZpbGUsXG4gICAgYXNzZXRGaWxlLFxuXG4gICAgcnNjT3V0cHV0UGF0aDogcnNjT3V0cHV0UGF0aCxcbiAgICBodG1sT3V0cHV0UGF0aDogaHRtbE91dHB1dFBhdGgsXG4gICAgbW9kdWxlRXh0ZW5zaW9uOiBqc0V4dGVuc2lvbixcbiAgICBqc0V4dGVuc2lvbjoganNFeHRlbnNpb24sXG4gICAgY3NzRXh0ZW5zaW9uOiBjc3NFeHRlbnNpb24sXG4gICAgaHRtbEV4dGVuc2lvbjogaHRtbEV4dGVuc2lvbixcbiAgICBqc29uRXh0ZW5zaW9uOiBqc29uRXh0ZW5zaW9uLFxuICAgIHJzY0V4dGVuc2lvbjogcnNjRXh0ZW5zaW9uLFxuICAgIGNzc01vZHVsZUV4dGVuc2lvbjogY3NzTW9kdWxlRXh0ZW5zaW9uLFxuICAgIG5vZGVFeHRlbnNpb246IERFRkFVTFRfQ09ORklHLkJVSUxELm5vZGVFeHRlbnNpb24sXG4gICAgdXNlUnNjV29ya2VyOiBvcHRpb25zLmJ1aWxkPy51c2VSc2NXb3JrZXIgPz8gREVGQVVMVF9DT05GSUcuQlVJTEQudXNlUnNjV29ya2VyLFxuICAgIHVzZUh0bWxXb3JrZXI6IG9wdGlvbnMuYnVpbGQ/LnVzZUh0bWxXb3JrZXIgPz8gXG4gICAgICAvLyBGb3JjZSB1c2VIdG1sV29ya2VyIHRvIHRydWUgd2hlbiBidWlsZC5wYWdlcyBpcyBleHBsaWNpdGx5IGNvbmZpZ3VyZWQsIHJlZ2FyZGxlc3Mgb2YgZGVmYXVsdCBsb2dpY1xuICAgICAgKG9wdGlvbnMuYnVpbGQ/LnBhZ2VzICYmIChBcnJheS5pc0FycmF5KG9wdGlvbnMuYnVpbGQucGFnZXMpIHx8IHR5cGVvZiBvcHRpb25zLmJ1aWxkLnBhZ2VzID09PSAnZnVuY3Rpb24nKSkgPyB0cnVlIDogREVGQVVMVF9DT05GSUcuQlVJTEQudXNlSHRtbFdvcmtlcixcbiAgfSBzYXRpc2ZpZXMgUmVzb2x2ZWRVc2VyT3B0aW9uc1tcImJ1aWxkXCJdO1xuXG4gIC8vIERldmVsb3BtZW50IGNvbmZpZ3VyYXRpb25cbiAgY29uc3QgZGV2ID0ge1xuICAgIHVzZUh0bWxXb3JrZXI6IG9wdGlvbnMuZGV2Py51c2VIdG1sV29ya2VyID8/IERFRkFVTFRfQ09ORklHLkRFVi51c2VIdG1sV29ya2VyLFxuICAgIHVzZVJzY1dvcmtlcjogb3B0aW9ucy5kZXY/LnVzZVJzY1dvcmtlciA/PyBERUZBVUxUX0NPTkZJRy5ERVYudXNlUnNjV29ya2VyLFxuICB9IHNhdGlzZmllcyBSZXNvbHZlZFVzZXJPcHRpb25zW1wiZGV2XCJdO1xuXG4gIC8vIEF1dG8tZGlzY292ZXJ5IGNvbmZpZ3VyYXRpb25cbiAgY29uc3QgYXV0b0Rpc2NvdmVyID0ge1xuICAgIGNsaWVudEVudHJ5OiBvcHRpb25zLmF1dG9EaXNjb3Zlcj8uY2xpZW50RW50cnkgPz8gREVGQVVMVF9DT05GSUcuQVVUT19ESVNDT1ZFUi5jbGllbnRFbnRyeSxcbiAgICBzZXJ2ZXJFbnRyeTogb3B0aW9ucy5hdXRvRGlzY292ZXI/LnNlcnZlckVudHJ5ID8/IERFRkFVTFRfQ09ORklHLkFVVE9fRElTQ09WRVIuc2VydmVyRW50cnksXG4gICAgY3NzRW50cnk6IG9wdGlvbnMuYXV0b0Rpc2NvdmVyPy5jc3NFbnRyeSA/PyBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLmNzc0VudHJ5LFxuICAgIGpzb25FbnRyeTogb3B0aW9ucy5hdXRvRGlzY292ZXI/Lmpzb25FbnRyeSA/PyBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLmpzb25FbnRyeSxcbiAgICBodG1sRW50cnk6IG9wdGlvbnMuYXV0b0Rpc2NvdmVyPy5odG1sRW50cnkgPz8gREVGQVVMVF9DT05GSUcuQVVUT19ESVNDT1ZFUi5odG1sRW50cnksXG4gICAgbW9kdWxlUGF0dGVybixcbiAgICBqc29uUGF0dGVybixcbiAgICBjc3NQYXR0ZXJuLFxuICAgIGh0bWxQYXR0ZXJuLFxuICAgIHJzY1BhdHRlcm4sXG4gICAgY2xpZW50UGF0dGVybixcbiAgICBzZXJ2ZXJQYXR0ZXJuLFxuICAgIG5vZGVQYXR0ZXJuLFxuICAgIHByb3BzUGF0dGVybixcbiAgICBwYWdlUGF0dGVybixcbiAgICBjc3NNb2R1bGVQYXR0ZXJuLFxuICAgIHZlbmRvclBhdHRlcm4sXG4gICAgdmlydHVhbFBhdHRlcm4sXG4gICAgZG90UGF0dGVybixcbiAgfSBzYXRpc2ZpZXMgUmVzb2x2ZWRVc2VyT3B0aW9uc1tcImF1dG9EaXNjb3ZlclwiXTtcblxuICBjb25zdCBhbGxvd2VkRGlyZWN0aXZlcyA9IHJlc29sdmVBbGxvd2VkRGlyZWN0aXZlcyhcbiAgICBvcHRpb25zLmxvYWRlcj8uYWxsb3dlZERpcmVjdGl2ZXMgPz8gREVGQVVMVF9MT0FERVJfQ09ORklHLmFsbG93ZWREaXJlY3RpdmVzXG4gICk7XG5cbiAgLy8gQ3JlYXRlIGxvYWRlciBjb25maWd1cmF0aW9uXG4gIGNvbnN0IGxvYWRlciA9IGxvYWRlck1vZGVcbiAgICA/ICh7XG4gICAgICAgIHNlcnZlckRpcmVjdGl2ZTogcmVzb2x2ZVJlZ0V4cChcbiAgICAgICAgICBvcHRpb25zLmxvYWRlcj8uc2VydmVyRGlyZWN0aXZlLFxuICAgICAgICAgIERFRkFVTFRfTE9BREVSX0NPTkZJRy5zZXJ2ZXJEaXJlY3RpdmVcbiAgICAgICAgKSxcbiAgICAgICAgY2xpZW50RGlyZWN0aXZlOiByZXNvbHZlUmVnRXhwKFxuICAgICAgICAgIG9wdGlvbnMubG9hZGVyPy5jbGllbnREaXJlY3RpdmUsXG4gICAgICAgICAgREVGQVVMVF9MT0FERVJfQ09ORklHLmNsaWVudERpcmVjdGl2ZVxuICAgICAgICApLFxuICAgICAgICBhbGxvd2VkRGlyZWN0aXZlczogYWxsb3dlZERpcmVjdGl2ZXMsXG4gICAgICAgIGdldERpcmVjdGl2ZVR5cGU6XG4gICAgICAgICAgb3B0aW9ucy5sb2FkZXI/LmdldERpcmVjdGl2ZVR5cGUgPz8gb3B0aW9ucy5sb2FkZXI/LmFsbG93ZWREaXJlY3RpdmVzXG4gICAgICAgICAgICA/IChkaXJlY3RpdmU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmxvYWRlcj8uYWxsb3dlZERpcmVjdGl2ZXMpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMubG9hZGVyPy5hbGxvd2VkRGlyZWN0aXZlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMubG9hZGVyPy5hbGxvd2VkRGlyZWN0aXZlcy5pbmNsdWRlcyhkaXJlY3RpdmUpXG4gICAgICAgICAgICAgICAgICAgICAgPyBkaXJlY3RpdmUgPT09IFwidXNlIHNlcnZlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFwic2VydmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJjbGllbnRcIlxuICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29uZmlnID0gb3B0aW9ucy5sb2FkZXI/LmFsbG93ZWREaXJlY3RpdmVzW2RpcmVjdGl2ZV07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25maWdcbiAgICAgICAgICAgICAgICAgICAgICA/IGRpcmVjdGl2ZSA9PT0gXCJ1c2Ugc2VydmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gXCJzZXJ2ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgOiBcImNsaWVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogREVGQVVMVF9MT0FERVJfQ09ORklHLmdldERpcmVjdGl2ZVR5cGUsXG4gICAgICAgIG1vZGU6IGxvYWRlck1vZGUsXG4gICAgICAgIGltcG9ydFNlcnZlclBhdGg6XG4gICAgICAgICAgb3B0aW9ucy5sb2FkZXI/LmltcG9ydFNlcnZlclBhdGggPz9cbiAgICAgICAgICBERUZBVUxUX0NPTkZJRy5SU0NfTE9BREVSW2xvYWRlck1vZGVdLmltcG9ydFNlcnZlclBhdGgsXG4gICAgICAgIGltcG9ydENsaWVudFBhdGg6XG4gICAgICAgICAgb3B0aW9ucy5sb2FkZXI/LmltcG9ydENsaWVudFBhdGggPz9cbiAgICAgICAgICBERUZBVUxUX0NPTkZJRy5SU0NfTE9BREVSW2xvYWRlck1vZGVdLmltcG9ydENsaWVudFBhdGgsXG4gICAgICAgIHJlZ2lzdGVyQ2xpZW50UmVmZXJlbmNlTmFtZTpcbiAgICAgICAgICBvcHRpb25zLmxvYWRlcj8ucmVnaXN0ZXJDbGllbnRSZWZlcmVuY2VOYW1lID8/XG4gICAgICAgICAgREVGQVVMVF9DT05GSUcuUlNDX0xPQURFUltsb2FkZXJNb2RlXS5yZWdpc3RlckNsaWVudFJlZmVyZW5jZU5hbWUsXG4gICAgICAgIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlTmFtZTpcbiAgICAgICAgICBvcHRpb25zLmxvYWRlcj8ucmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2VOYW1lID8/XG4gICAgICAgICAgREVGQVVMVF9DT05GSUcuUlNDX0xPQURFUltsb2FkZXJNb2RlXS5yZWdpc3RlclNlcnZlclJlZmVyZW5jZU5hbWUsXG4gICAgICAgIGlzU2VydmVyRnVuY3Rpb25Db2RlLFxuICAgICAgICBpc0NsaWVudENvbXBvbmVudENvZGUsXG4gICAgICAgIGlzQ2xpZW50Q29tcG9uZW50QnlDb2RlLFxuICAgICAgICBpc0NsaWVudENvbXBvbmVudEJ5TmFtZSxcbiAgICAgICAgcGFyc2U6IG9wdGlvbnM/LmxvYWRlcj8ucGFyc2UgPz8gREVGQVVMVF9MT0FERVJfQ09ORklHLnBhcnNlLFxuICAgICAgICBtb2R1bGVJRDogb3B0aW9ucz8ubG9hZGVyPy5tb2R1bGVJRCA/PyBvcHRpb25zPy5tb2R1bGVJRCxcbiAgICAgIH0gYXMgUmVxdWlyZWQ8TG9hZGVyQ29uZmlnPilcbiAgICA6IHVuZGVmaW5lZDtcblxuICBjb25zdCBwaXBlYWJsZVN0cmVhbU9wdGlvbnMgPSBvcHRpb25zLnBpcGVhYmxlU3RyZWFtT3B0aW9uc1xuICAgID8gb3B0aW9ucy5waXBlYWJsZVN0cmVhbU9wdGlvbnNcbiAgICA6IHt9O1xuXG4gIC8vIFJldHVybiByZXNvbHZlZCBvcHRpb25zXG4gIHRyeSB7XG4gICAgY29uc3QgdXNlck9wdGlvbnM6IFJlc29sdmVkVXNlck9wdGlvbnMgPSB7XG4gICAgICBwcm9qZWN0Um9vdCxcbiAgICAgIG1vZHVsZUJhc2UsXG4gICAgICBtb2R1bGVCYXNlUGF0aCxcbiAgICAgIG1vZHVsZUJhc2VVUkwsXG4gICAgICBtb2R1bGVSb290UGF0aCxcbiAgICAgIHB1YmxpY09yaWdpbixcbiAgICAgIGJ1aWxkOiBidWlsZCxcbiAgICAgIGRldjogZGV2LFxuICAgICAgdmVyYm9zZTogb3B0aW9ucy52ZXJib3NlID8/IERFRkFVTFRfQ09ORklHLlZFUkJPU0UsXG4gICAgICBhdmFpbGFibGVFbnZpcm9ubWVudHM6IChvcHRpb25zIGFzIGFueSkuYXZhaWxhYmxlRW52aXJvbm1lbnRzLFxuICAgICAgc3RyYXRlZ3k6IChvcHRpb25zIGFzIGFueSkuc3RyYXRlZ3ksXG4gICAgICBvbk1ldHJpY3M6XG4gICAgICAgIHR5cGVvZiBvcHRpb25zLm9uTWV0cmljcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBvcHRpb25zLm9uTWV0cmljc1xuICAgICAgICAgIDogREVGQVVMVF9DT05GSUcuT05fTUVUUklDUyxcbiAgICAgIG9uRXZlbnQ6XG4gICAgICAgIHR5cGVvZiBvcHRpb25zLm9uRXZlbnQgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gb3B0aW9ucy5vbkV2ZW50XG4gICAgICAgICAgOiBERUZBVUxUX0NPTkZJRy5PTl9FVkVOVCxcbiAgICAgIFBhZ2U6IG9wdGlvbnMuUGFnZSxcbiAgICAgIHByb3BzOiBvcHRpb25zLnByb3BzLFxuICAgICAgSHRtbDogb3B0aW9ucy5IdG1sID8/IERFRkFVTFRfQ09ORklHLkhUTUwsXG4gICAgICBSb290OiBvcHRpb25zLlJvb3QgPz8gREVGQVVMVF9DT05GSUcuUk9PVCxcbiAgICAgIGNvbXBvbmVudHM6IG9wdGlvbnMuY29tcG9uZW50cyxcbiAgICAgIG5vcm1hbGl6ZXI6IG5vcm1hbGl6ZXIsXG4gICAgICBtb2R1bGVJRDogb3B0aW9ucy5tb2R1bGVJRCwgLy8gaWYgbm90IHByb3ZpZGVkLCB3aWxsIGJlIGNyZWF0ZWQgd2hlbiBjb25maWcgaG9vayBpcyBjYWxsZWRcbiAgICAgIHBhZ2VFeHBvcnROYW1lOlxuICAgICAgICBvcHRpb25zLnBhZ2VFeHBvcnROYW1lID8/IChERUZBVUxUX0NPTkZJRy5QQUdFX0VYUE9SVF9OQU1FIGFzIFBhZ2VOYW1lKSxcbiAgICAgIHByb3BzRXhwb3J0TmFtZTpcbiAgICAgICAgb3B0aW9ucy5wcm9wc0V4cG9ydE5hbWUgPz9cbiAgICAgICAgKERFRkFVTFRfQ09ORklHLlBST1BTX0VYUE9SVF9OQU1FIGFzIFByb3BzTmFtZSksXG4gICAgICBodG1sRXhwb3J0TmFtZTpcbiAgICAgICAgb3B0aW9ucy5odG1sRXhwb3J0TmFtZSA/PyAoREVGQVVMVF9DT05GSUcuSFRNTF9FWFBPUlRfTkFNRSBhcyBIdG1sTmFtZSksXG4gICAgICByb290RXhwb3J0TmFtZTpcbiAgICAgICAgb3B0aW9ucy5yb290RXhwb3J0TmFtZSA/PyAoREVGQVVMVF9DT05GSUcuUk9PVF9FWFBPUlRfTkFNRSBhcyBSb290TmFtZSksXG4gICAgICBjc3M6IHtcbiAgICAgICAgaW5saW5lQ3NzOiBvcHRpb25zLmNzcz8uaW5saW5lQ3NzID8/IERFRkFVTFRfQ09ORklHLkNTUy5pbmxpbmVDc3MsXG4gICAgICAgIGlubGluZVRocmVzaG9sZDpcbiAgICAgICAgICBvcHRpb25zLmNzcz8uaW5saW5lVGhyZXNob2xkID8/IERFRkFVTFRfQ09ORklHLkNTUy5pbmxpbmVUaHJlc2hvbGQsXG4gICAgICAgIGlubGluZVBhdHRlcm5zOlxuICAgICAgICAgIG9wdGlvbnMuY3NzPy5pbmxpbmVQYXR0ZXJucyA/PyBERUZBVUxUX0NPTkZJRy5DU1MuaW5saW5lUGF0dGVybnMsXG4gICAgICAgIGxpbmtQYXR0ZXJuczpcbiAgICAgICAgICBvcHRpb25zLmNzcz8ubGlua1BhdHRlcm5zID8/IERFRkFVTFRfQ09ORklHLkNTUy5saW5rUGF0dGVybnMsXG4gICAgICB9LFxuICAgICAgaHRtbFdvcmtlclBhdGg6IGh0bWxXb3JrZXJQYXRoLFxuICAgICAgcnNjV29ya2VyUGF0aDogcnNjV29ya2VyUGF0aCxcbiAgICAgIGxvYWRlclBhdGg6IGxvYWRlclBhdGgsXG4gICAgICByZWFjdExvYWRlclBhdGg6XG4gICAgICAgIG9wdGlvbnMucmVhY3RMb2FkZXJQYXRoID8/IERFRkFVTFRfQ09ORklHLlJFQUNUX0xPQURFUl9QQVRILFxuICAgICAgY3NzTG9hZGVyUGF0aDogb3B0aW9ucy5jc3NMb2FkZXJQYXRoID8/IERFRkFVTFRfQ09ORklHLkNTU19MT0FERVJfUEFUSCxcbiAgICAgIGVudkxvYWRlclBhdGg6IG9wdGlvbnMuZW52TG9hZGVyUGF0aCA/PyBERUZBVUxUX0NPTkZJRy5FTlZfTE9BREVSX1BBVEgsXG4gICAgICBjbGllbnRFbnRyeTogb3B0aW9ucy5jbGllbnRFbnRyeSA/PyBERUZBVUxUX0NPTkZJRy5DTElFTlRfRU5UUlksXG4gICAgICBzZXJ2ZXJFbnRyeTogb3B0aW9ucy5zZXJ2ZXJFbnRyeSA/PyBERUZBVUxUX0NPTkZJRy5TRVJWRVJfRU5UUlksXG4gICAgICBhdXRvRGlzY292ZXI6IGF1dG9EaXNjb3ZlcixcbiAgICAgIGxvYWRlcjogbG9hZGVyLFxuICAgICAgcGlwZWFibGVTdHJlYW1PcHRpb25zLFxuICAgICAgcnNjVGltZW91dDpcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMucnNjVGltZW91dCA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgID8gb3B0aW9ucy5yc2NUaW1lb3V0XG4gICAgICAgICAgOiBERUZBVUxUX0NPTkZJRy5SU0NfVElNRU9VVCxcbiAgICAgIGh0bWxUaW1lb3V0OlxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5odG1sVGltZW91dCA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgID8gb3B0aW9ucy5odG1sVGltZW91dFxuICAgICAgICAgIDogREVGQVVMVF9DT05GSUcuSFRNTF9USU1FT1VULFxuICAgICAgaHRtbFdvcmtlclN0YXJ0dXBUaW1lb3V0OlxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5odG1sV29ya2VyU3RhcnR1cFRpbWVvdXQgPT09IFwibnVtYmVyXCJcbiAgICAgICAgICA/IG9wdGlvbnMuaHRtbFdvcmtlclN0YXJ0dXBUaW1lb3V0XG4gICAgICAgICAgOiBERUZBVUxUX0NPTkZJRy5IVE1MX1dPUktFUl9TVEFSVFVQX1RJTUVPVVQsXG4gICAgICByc2NXb3JrZXJTdGFydHVwVGltZW91dDpcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMucnNjV29ya2VyU3RhcnR1cFRpbWVvdXQgPT09IFwibnVtYmVyXCJcbiAgICAgICAgICA/IG9wdGlvbnMucnNjV29ya2VyU3RhcnR1cFRpbWVvdXRcbiAgICAgICAgICA6IERFRkFVTFRfQ09ORklHLlJTQ19XT1JLRVJfU1RBUlRVUF9USU1FT1VULFxuICAgICAgZmlsZVdyaXRlVGltZW91dDpcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMuZmlsZVdyaXRlVGltZW91dCA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgID8gb3B0aW9ucy5maWxlV3JpdGVUaW1lb3V0XG4gICAgICAgICAgOiBERUZBVUxUX0NPTkZJRy5GSUxFX1dSSVRFX1RJTUVPVVQsXG4gICAgICB3b3JrZXJTaHV0ZG93blRpbWVvdXQ6XG4gICAgICAgIHR5cGVvZiBvcHRpb25zLndvcmtlclNodXRkb3duVGltZW91dCA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgID8gb3B0aW9ucy53b3JrZXJTaHV0ZG93blRpbWVvdXRcbiAgICAgICAgICA6IERFRkFVTFRfQ09ORklHLldPUktFUl9TSFVURE9XTl9USU1FT1VULFxuICAgICAgcGFuaWNUaHJlc2hvbGQ6IHBhbmljVGhyZXNob2xkLFxuICAgIH07XG5cbiAgICAvLyBTdGFzaCB0aGUgcmVzb2x2ZWQgb3B0aW9uc1xuICAgIHN0YXNoVXNlck9wdGlvbnMoZW52SWQsIHVzZXJPcHRpb25zKTtcblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInN1Y2Nlc3NcIixcbiAgICAgIHVzZXJPcHRpb25zLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZXJyb3JcIixcbiAgICAgIGVycm9yOiBoYW5kbGVFcnJvcih7XG4gICAgICAgIGVycm9yLFxuICAgICAgICBsb2dnZXI6IGxvZ2dlcixcbiAgICAgICAgcGFuaWNUaHJlc2hvbGQsXG4gICAgICAgIGNvbnRleHQ6IFwiY29uZmlnKHJlc29sdmVPcHRpb25zKVwiLFxuICAgICAgfSksXG4gICAgfTtcbiAgfVxufTtcblxuXG4iXSwibmFtZXMiOlsiaGFzaCIsInZpcnR1YWxQYXR0ZXJuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdEQSxNQUFNLGlCQUFBLEdBQW9CLENBQUMsSUFBaUIsS0FBQTtBQUMxQyxFQUFBLE1BQU0sV0FBYyxHQUFBLElBQUEsQ0FBSyxLQUFNLENBQUEsR0FB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
502
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZU9wdGlvbnMuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BsdWdpbi9jb25maWcvcmVzb2x2ZU9wdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcmVSZW5kZXJlZEFzc2V0LCBQcmVSZW5kZXJlZENodW5rIH0gZnJvbSBcInJvbGx1cFwiO1xuaW1wb3J0IHR5cGUge1xuICBTdHJlYW1QbHVnaW5PcHRpb25zLFxuICBSZXNvbHZlZFVzZXJPcHRpb25zLFxuICBQYWdlTmFtZSxcbiAgUHJvcHNOYW1lLFxuICBIdG1sTmFtZSxcbiAgUm9vdE5hbWUsXG59IGZyb20gXCIuLi90eXBlcy5qc1wiO1xuaW1wb3J0IHtcbiAgQkFTRV9QQVRURVJOUyxcbiAgREVGQVVMVF9DT05GSUcsXG4gIERFRkFVTFRfTE9BREVSX0NPTkZJRyxcbn0gZnJvbSBcIi4vZGVmYXVsdHMuanNcIjtcbmltcG9ydCB7IGpvaW4sIHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBwbHVnaW5Sb290IH0gZnJvbSBcIi4uL3Jvb3QuanNcIjtcbmltcG9ydCB7IGNyZWF0ZUlucHV0Tm9ybWFsaXplciB9IGZyb20gXCIuLi9oZWxwZXJzL2lucHV0Tm9ybWFsaXplci5qc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZURpcmVjdGl2ZU1hdGNoZXIgfSBmcm9tIFwiLi9yZXNvbHZlRGlyZWN0aXZlTWF0Y2hlci5qc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZUFsbG93ZWREaXJlY3RpdmVzIH0gZnJvbSBcIi4vcmVzb2x2ZUFsbG93ZWREaXJlY3RpdmVzLmpzXCI7XG5pbXBvcnQgeyByZXNvbHZlUmVnRXhwIH0gZnJvbSBcIi4vcmVzb2x2ZVJlZ0V4cC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBMb2FkZXJDb25maWcgfSBmcm9tIFwiLi4vbG9hZGVyL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBoYW5kbGVFcnJvciB9IGZyb20gXCIuLi9lcnJvci9oYW5kbGVFcnJvci5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyLCB0eXBlIExvZ2dlciB9IGZyb20gXCJ2aXRlXCI7XG5pbXBvcnQgeyBnZXRDb25kaXRpb24gfSBmcm9tIFwiLi9nZXRDb25kaXRpb24uanNcIjtcbmltcG9ydCB7IGdldE5vZGVFbnYgfSBmcm9tIFwiLi9nZXROb2RlRW52LmpzXCI7XG5pbXBvcnQgeyBzdGFzaFVzZXJPcHRpb25zLCBnZXRTdGFzaGVkVXNlck9wdGlvbnMsIGdldEVudmlyb25tZW50SWQgfSBmcm9tIFwiLi9zdGFzaGVkT3B0aW9uc1N0YXRlLmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQgeyByZWFkRmlsZVN5bmMsIGV4aXN0c1N5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuXG5leHBvcnQgdHlwZSBSZXNvbHZlT3B0aW9uc1JldHVybiA9XG4gIHwge1xuICAgICAgdHlwZTogXCJzdWNjZXNzXCI7XG4gICAgICB1c2VyT3B0aW9uczogUmVzb2x2ZWRVc2VyT3B0aW9ucztcbiAgICAgIGVycm9yPzogbmV2ZXI7XG4gICAgfVxuICB8IHsgdHlwZTogXCJlcnJvclwiOyBlcnJvcjogdW5rbm93bjsgdXNlck9wdGlvbnM/OiBuZXZlciB9O1xuXG5leHBvcnQgdHlwZSBSZXNvbHZlT3B0aW9uc0ZuID0gKFxuICBvcHRpb25zOiBTdHJlYW1QbHVnaW5PcHRpb25zLFxuICBmb3JjZVJlc29sdmU/OiBib29sZWFuLFxuICBsb2dnZXI/OiBMb2dnZXJcbikgPT4gUmVzb2x2ZU9wdGlvbnNSZXR1cm47XG5cbi8vIC8qKlxuLy8gICogRW5zdXJlcyBhIHBhdGggZW5kcyB3aXRoIC5qcyBleHRlbnNpb25cbi8vICAqL1xuLy8gY29uc3QgYWRkRXh0ZW5zaW9uID0gKHBhdGg6IHN0cmluZywgZXh0ZW5zaW9uOiBzdHJpbmcgPSBcImpzXCIpID0+IHtcbi8vICAgaWYgKHBhdGguZW5kc1dpdGgoYC4ke2V4dGVuc2lvbn1gKSkgcmV0dXJuIHBhdGg7XG4vLyAgIGlmIChwYXRoLmVuZHNXaXRoKFwiLy5cIikpIHJldHVybiBwYXRoLnNsaWNlKDAsIC0yKSArIFwiLlwiICsgZXh0ZW5zaW9uO1xuLy8gICBpZiAocGF0aC5lbmRzV2l0aChcIi5cIikpIHJldHVybiBwYXRoICsgXCIuXCIgKyBleHRlbnNpb247XG4vLyAgIHJldHVybiBwYXRoICsgXCIuXCIgKyBleHRlbnNpb247XG4vLyB9O1xuXG4vKipcbiAqIEhhbmRsZXMgc2VhcmNoIHF1ZXJ5IHBhcmFtZXRlcnMgaW4gZmlsZSBwYXRoc1xuICovXG5jb25zdCBoYW5kbGVTZWFyY2hRdWVyeSA9IChwYXRoOiBzdHJpbmcpID0+IHtcbiAgY29uc3Qgc2VhcmNoUXVlcnkgPSBwYXRoLnNwbGl0KFwiP1wiKVsxXTtcbiAgaWYgKCFzZWFyY2hRdWVyeSkgcmV0dXJuIHBhdGg7XG4gIGNvbnN0IGZvbGRlciA9IHBhdGguc3BsaXQoXCIvXCIpLnNsaWNlKDAsIC0xKS5qb2luKFwiL1wiKTtcbiAgY29uc3QgZmlsZW5hbWUgPSBwYXRoLnNwbGl0KFwiL1wiKS5wb3AoKTtcbiAgY29uc3QgZmlsZU5hbWVFeHRJbmRleCA9IGZpbGVuYW1lPy5sYXN0SW5kZXhPZihcIi5cIik7XG4gIGNvbnN0IGZpbGVOYW1lV2l0aG91dEV4dCA9IGZpbGVuYW1lPy5zbGljZSgwLCBmaWxlTmFtZUV4dEluZGV4KTtcbiAgY29uc3QgZXh0ZW5zaW9uID0gZmlsZW5hbWU/LnNsaWNlKGZpbGVOYW1lRXh0SW5kZXgpO1xuICByZXR1cm4gYCR7Zm9sZGVyfS8ke2ZpbGVOYW1lV2l0aG91dEV4dH0uJHtzZWFyY2hRdWVyeX0uJHtleHRlbnNpb259YDtcbn07XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgcGF0aCB3aXRoIGFuIG9wdGlvbmFsIHBhdHRlcm4gbWF0Y2hlciBhbmQgZXh0ZW5zaW9uLlxuICogSWYgYSBwYXR0ZXJuIG1hdGNoZXMgYW5kIHRoZSBwYXRoIGRvZXNuJ3QgZW5kIHdpdGggdGhlIGV4dGVuc2lvbiwgdGhlIGV4dGVuc2lvbiBpcyBhcHBlbmRlZC5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIHJlZ2lzdGVyXG4gKiBAcGFyYW0gcGF0dGVybiAtIE9wdGlvbmFsIHBhdHRlcm4gbWF0Y2hlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSBpZiB0aGUgcGF0aCBtYXRjaGVzXG4gKiBAcGFyYW0gZXh0IC0gT3B0aW9uYWwgZXh0ZW5zaW9uIHRvIGFwcGVuZCBpZiBwYXR0ZXJuIG1hdGNoZXMgYW5kIHBhdGggZG9lc24ndCBhbHJlYWR5IGVuZCB3aXRoIGl0XG4gKi9cbmNvbnN0IHJlZ2lzdGVyUGF0aCA9IChwYXRoOiBzdHJpbmcsIHBhdHRlcm4/OiBSZWdFeHAsIGV4dD86IHN0cmluZykgPT4ge1xuICAvLyBJZiB3ZSBoYXZlIGEgcGF0dGVybiBhbmQgaXQgZG9lc24ndCBtYXRjaCwgb3Igd2UgaGF2ZSBhbiBleHRlbnNpb24gYW5kIHRoZSBwYXRoIGRvZXNuJ3QgZW5kIHdpdGggaXQsIGFwcGVuZCB0aGUgZXh0ZW5zaW9uXG4gIGlmICgocGF0dGVybiAmJiAhcGF0dGVybi50ZXN0KHBhdGgpKSB8fCAoZXh0ICYmICFwYXRoLmVuZHNXaXRoKGV4dCkpKSB7XG4gICAgcmV0dXJuIHBhdGggKyBleHQ7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNYWluIE9wdGlvbnMgUmVzb2x2ZXJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxubGV0IG9yaWdpbmFsT3B0aW9uczogYW55IHwgbnVsbCA9IG51bGw7XG4vKipcbiAqIFJlc29sdmVzIHRoZSB1c2VyIG9wdGlvbnMgZm9yIHRoZSBwbHVnaW4uXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgdXNlciBvcHRpb25zIHRvIHJlc29sdmUuXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlc29sdmVPcHRpb25zOiBSZXNvbHZlT3B0aW9uc0ZuID0gZnVuY3Rpb24gX3Jlc29sdmVPcHRpb25zKFxuICBvcHRpb25zID0ge30gYXMgU3RyZWFtUGx1Z2luT3B0aW9ucyxcbiAgZm9yY2VSZXNvbHZlID0gZmFsc2UsXG4gIGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcighb3B0aW9ucy52ZXJib3NlID8gXCJlcnJvclwiIDogXCJpbmZvXCIsIHtcbiAgICBwcmVmaXg6IFwidml0ZTpwbHVnaW4tcmVhY3Qtc2VydmVyL2NvbmZpZyNyZXNvbHZlT3B0aW9uc1wiLFxuICB9KVxuKSB7XG4gIGlmICghZm9yY2VSZXNvbHZlICYmIG9yaWdpbmFsT3B0aW9ucyA9PSBudWxsKSB7XG4gICAgb3JpZ2luYWxPcHRpb25zID0gb3B0aW9ucztcbiAgfSBlbHNlIGlmIChvcmlnaW5hbE9wdGlvbnMgIT0gbnVsbCAmJiBvcHRpb25zICE9PSBvcmlnaW5hbE9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcIm9wdGlvbnMgY2hhbmdlZCwgZm9yY2luZyByZS1yZXNvbHZlXCIpO1xuICAgIH1cbiAgICBmb3JjZVJlc29sdmUgPSB0cnVlO1xuICB9XG4gIFxuICAvLyBGb3JjZSByZS1yZXNvbHZlIGlmIHByb2plY3RSb290IGNoYW5nZWRcbiAgaWYgKG9yaWdpbmFsT3B0aW9ucyAhPSBudWxsICYmIG9yaWdpbmFsT3B0aW9ucy5wcm9qZWN0Um9vdCAhPT0gb3B0aW9ucy5wcm9qZWN0Um9vdCkge1xuICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBwcm9qZWN0Um9vdCBjaGFuZ2VkIGZyb20gJHtvcmlnaW5hbE9wdGlvbnMucHJvamVjdFJvb3R9IHRvICR7b3B0aW9ucy5wcm9qZWN0Um9vdH0sIGZvcmNpbmcgcmUtcmVzb2x2ZWApO1xuICAgIH1cbiAgICBmb3JjZVJlc29sdmUgPSB0cnVlO1xuICB9XG4gIFxuICBjb25zdCBwYW5pY1RocmVzaG9sZCA9XG4gICAgdHlwZW9mIG9wdGlvbnMucGFuaWNUaHJlc2hvbGQgPT09IFwic3RyaW5nXCJcbiAgICAgID8gb3B0aW9ucy5wYW5pY1RocmVzaG9sZFxuICAgICAgOiBERUZBVUxUX0NPTkZJRy5QQU5JQ19USFJFU0hPTEQ7XG4gIC8vIHNpbmNlIHBhbmljVGhyZXNob2xkIGFmZmVjdHMgdGhlIGJlaGF2aW9yIG9mIHRoZSBwbHVnaW4sIHdlIG5lZWQgdG8gcmUtcmVzb2x2ZSB0aGUgb3B0aW9ucyBpZiBpdCBjaGFuZ2VzXG4gIGNvbnN0IGVudklkID0gZ2V0RW52aXJvbm1lbnRJZChnZXRDb25kaXRpb24oKSwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPz8gXCJwcm9kdWN0aW9uXCIpO1xuXG4gIC8vIFJldHVybiBzdGFzaGVkIG9wdGlvbnMgaWYgYXZhaWxhYmxlXG4gIGNvbnN0IHN0YXNoZWRPcHRpb25zID0gZ2V0U3Rhc2hlZFVzZXJPcHRpb25zKGVudklkKTtcbiAgaWYgKHN0YXNoZWRPcHRpb25zICYmICFmb3JjZVJlc29sdmUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzdWNjZXNzXCIsXG4gICAgICB1c2VyT3B0aW9uczogc3Rhc2hlZE9wdGlvbnMgYXMgbmV2ZXIsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGxvYWRlck1vZGUgPSBvcHRpb25zLmxvYWRlcj8ubW9kZSA/PyB1bmRlZmluZWQ7XG4gIC8vIE1vZHVsZSBwYXRoIGNvbmZpZ3VyYXRpb25cbiAgY29uc3QgbW9kdWxlQmFzZSA9XG4gICAgdHlwZW9mIG9wdGlvbnMubW9kdWxlQmFzZSA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLm1vZHVsZUJhc2VcbiAgICAgIDogREVGQVVMVF9DT05GSUcuTU9EVUxFX0JBU0U7XG5cbiAgLy8gQmFzaWMgY29uZmlndXJhdGlvbiAtIHVzZSB0aGUgZmlyc3QgcHJvamVjdFJvb3QgdGhhdCB3YXMgcHJvdmlkZWQsIG9yIGZhbGwgYmFjayB0byBjdXJyZW50IG9wdGlvbnNcbiAgY29uc3QgcHJvamVjdFJvb3QgPSBvcHRpb25zLnByb2plY3RSb290ID8/IG9yaWdpbmFsT3B0aW9ucz8ucHJvamVjdFJvb3QgPz8gcHJvY2Vzcy5jd2QoKTtcbiAgXG4gIGlmIChvcHRpb25zLnZlcmJvc2UgJiYgb3B0aW9ucy5wcm9qZWN0Um9vdCAhPSBvcmlnaW5hbE9wdGlvbnM/LnByb2plY3RSb290KSB7XG4gICAgbG9nZ2VyLmluZm8oYFtyZXNvbHZlT3B0aW9uc10gbmV3IHByb2plY3RSb290OiAke3Byb2plY3RSb290fWApO1xuICB9XG5cbiAgLy8gQnVpbGQgb3B0aW9uc1xuICBjb25zdCBwcmVzZXJ2ZU1vZHVsZXNSb290ID1cbiAgICBvcHRpb25zLmJ1aWxkPy5wcmVzZXJ2ZU1vZHVsZXNSb290ID8/XG4gICAgREVGQVVMVF9DT05GSUcuQlVJTEQucHJlc2VydmVNb2R1bGVzUm9vdDtcblxuICAvLyBHZXQgY3VycmVudCBtb2RlIHRvIGNoZWNrIGlmIHdlJ3JlIGluIGRldmVsb3BtZW50XG4gIGNvbnN0IGN1cnJlbnRNb2RlID0gZ2V0Tm9kZUVudihwcm9jZXNzLmVudi5OT0RFX0VOVik7XG4gIGNvbnN0IGlzRGV2ZWxvcG1lbnQgPSBjdXJyZW50TW9kZSA9PT0gXCJkZXZlbG9wbWVudFwiO1xuXG4gIC8vIFJvbGx1cCdzIHByZXNlcnZlTW9kdWxlc1Jvb3Qgd29ya3MgaW4gcmV2ZXJzZSBvZiB3aGF0IHlvdSdkIGV4cGVjdDpcbiAgLy8gLSBXaGVuIHVzZXIgd2FudHMgcHJlc2VydmF0aW9uICh0cnVlKTogcGFzcyB1bmRlZmluZWQgdG8gUm9sbHVwIChkb24ndCBzdHJpcCBhbnl0aGluZylcbiAgLy8gLSBXaGVuIHVzZXIgd2FudHMgc3RyaXBwaW5nIChmYWxzZSk6IHBhc3MgbW9kdWxlQmFzZSB0byBSb2xsdXAgKHN0cmlwIHRoaXMgcGF0aClcbiAgLy8gQ1JJVElDQUw6IEluIGRldmVsb3BtZW50IG1vZGUsIE5FVkVSIHN0cmlwIG1vZHVsZUJhc2UgKHNyYy8pIGJlY2F1c2UgVml0ZSBzZXJ2ZXMgZnJvbSBzb3VyY2UgbG9jYXRpb25zXG4gIGNvbnN0IHByZXNlcnZlTW9kdWxlc1Jvb3RTdHJpbmcgPVxuICAgICFpc0RldmVsb3BtZW50ICYmIHByZXNlcnZlTW9kdWxlc1Jvb3QgPT09IGZhbHNlXG4gICAgICA/IG1vZHVsZUJhc2UgLy8gU3RyaXAgc3JjLyBmcm9tIG91dHB1dCBwYXRocyAocHJvZHVjdGlvbiBvbmx5KVxuICAgICAgOiB1bmRlZmluZWQ7IC8vIEtlZXAgc3JjLyBpbiBvdXRwdXQgcGF0aHNcblxuICBjb25zdCBjbGllbnQgPVxuICAgIHR5cGVvZiBvcHRpb25zLmJ1aWxkPy5jbGllbnQgPT09IFwic3RyaW5nXCJcbiAgICAgID8gb3B0aW9ucy5idWlsZC5jbGllbnRcbiAgICAgIDogREVGQVVMVF9DT05GSUcuQlVJTEQuY2xpZW50O1xuXG4gIGNvbnN0IG91dERpciA9XG4gICAgdHlwZW9mIG9wdGlvbnMuYnVpbGQ/Lm91dERpciA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLmJ1aWxkLm91dERpclxuICAgICAgOiBERUZBVUxUX0NPTkZJRy5CVUlMRC5vdXREaXI7XG5cbiAgLy8gVXNlIGRlZmF1bHRzIGZvciBub3cgLSB0aGVzZSB3aWxsIGJlIHVwZGF0ZWQgbGF0ZXIgd2hlbiB3ZSBoYXZlIHRoZSBjb25maWcgd2l0aCBwcm9wZXIgcHJlZml4XG4gIGNvbnN0IG1vZHVsZUJhc2VQYXRoID1cbiAgICB0eXBlb2Ygb3B0aW9ucy5tb2R1bGVCYXNlUGF0aCA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLm1vZHVsZUJhc2VQYXRoXG4gICAgICA6IERFRkFVTFRfQ09ORklHLk1PRFVMRV9CQVNFX1BBVEg7XG5cbiAgY29uc3QgbW9kdWxlQmFzZVVSTCA9XG4gICAgdHlwZW9mIG9wdGlvbnMubW9kdWxlQmFzZVVSTCA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLm1vZHVsZUJhc2VVUkxcbiAgICAgIDogREVGQVVMVF9DT05GSUcuTU9EVUxFX0JBU0VfVVJMO1xuXG4gIGNvbnN0IG1vZHVsZVJvb3RQYXRoID1cbiAgICB0eXBlb2Ygb3B0aW9ucy5tb2R1bGVSb290UGF0aCA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLm1vZHVsZVJvb3RQYXRoXG4gICAgICA6IGpvaW4ocHJvamVjdFJvb3QsIG91dERpciwgY2xpZW50KTtcblxuICBjb25zdCBwdWJsaWNPcmlnaW4gPVxuICAgIHR5cGVvZiBvcHRpb25zLnB1YmxpY09yaWdpbiA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLnB1YmxpY09yaWdpblxuICAgICAgOiBERUZBVUxUX0NPTkZJRy5QVUJMSUNfT1JJR0lOO1xuXG5cbiAgY29uc3QgcnNjV29ya2VyUGF0aCA9XG4gICAgdHlwZW9mIG9wdGlvbnMucnNjV29ya2VyUGF0aCA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyByZXNvbHZlKHByb2plY3RSb290LCBvcHRpb25zLnJzY1dvcmtlclBhdGgpXG4gICAgICA6IHJlc29sdmUocGx1Z2luUm9vdCwgREVGQVVMVF9DT05GSUcuUlNDX1dPUktFUl9QQVRIKTtcblxuICBjb25zdCBodG1sV29ya2VyUGF0aCA9XG4gICAgdHlwZW9mIG9wdGlvbnMuaHRtbFdvcmtlclBhdGggPT09IFwic3RyaW5nXCJcbiAgICAgID8gcmVzb2x2ZShwcm9qZWN0Um9vdCwgb3B0aW9ucy5odG1sV29ya2VyUGF0aClcbiAgICAgIDogcmVzb2x2ZShwbHVnaW5Sb290LCBERUZBVUxUX0NPTkZJRy5IVE1MX1dPUktFUl9QQVRIKTtcblxuICBjb25zdCBsb2FkZXJQYXRoID1cbiAgICB0eXBlb2Ygb3B0aW9ucy5sb2FkZXJQYXRoID09PSBcInN0cmluZ1wiXG4gICAgICA/IHJlc29sdmUocHJvamVjdFJvb3QsIG9wdGlvbnMubG9hZGVyUGF0aClcbiAgICAgIDogcmVzb2x2ZShwbHVnaW5Sb290LCBERUZBVUxUX0NPTkZJRy5MT0FERVJfUEFUSCk7XG5cbiAgY29uc3QganNFeHRlbnNpb24gPVxuICAgIHR5cGVvZiBvcHRpb25zLmJ1aWxkPy5qc0V4dGVuc2lvbiA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLmJ1aWxkLmpzRXh0ZW5zaW9uXG4gICAgICA6IERFRkFVTFRfQ09ORklHLkJVSUxELmpzRXh0ZW5zaW9uO1xuICBjb25zdCBjc3NFeHRlbnNpb24gPVxuICAgIHR5cGVvZiBvcHRpb25zLmJ1aWxkPy5jc3NFeHRlbnNpb24gPT09IFwic3RyaW5nXCJcbiAgICAgID8gb3B0aW9ucy5idWlsZC5jc3NFeHRlbnNpb25cbiAgICAgIDogREVGQVVMVF9DT05GSUcuQlVJTEQuY3NzRXh0ZW5zaW9uO1xuICBjb25zdCBjc3NNb2R1bGVFeHRlbnNpb24gPVxuICAgIHR5cGVvZiBvcHRpb25zLmJ1aWxkPy5jc3NNb2R1bGVFeHRlbnNpb24gPT09IFwic3RyaW5nXCJcbiAgICAgID8gb3B0aW9ucy5idWlsZC5jc3NNb2R1bGVFeHRlbnNpb25cbiAgICAgIDogREVGQVVMVF9DT05GSUcuQlVJTEQuY3NzTW9kdWxlRXh0ZW5zaW9uO1xuICBjb25zdCBodG1sRXh0ZW5zaW9uID1cbiAgICB0eXBlb2Ygb3B0aW9ucy5idWlsZD8uaHRtbEV4dGVuc2lvbiA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLmJ1aWxkLmh0bWxFeHRlbnNpb25cbiAgICAgIDogREVGQVVMVF9DT05GSUcuQlVJTEQuaHRtbEV4dGVuc2lvbjtcbiAgY29uc3QganNvbkV4dGVuc2lvbiA9XG4gICAgdHlwZW9mIG9wdGlvbnMuYnVpbGQ/Lmpzb25FeHRlbnNpb24gPT09IFwic3RyaW5nXCJcbiAgICAgID8gb3B0aW9ucy5idWlsZC5qc29uRXh0ZW5zaW9uXG4gICAgICA6IERFRkFVTFRfQ09ORklHLkJVSUxELmpzb25FeHRlbnNpb247XG4gIGNvbnN0IHJzY0V4dGVuc2lvbiA9XG4gICAgdHlwZW9mIG9wdGlvbnMuYnVpbGQ/LnJzY0V4dGVuc2lvbiA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLmJ1aWxkLnJzY0V4dGVuc2lvblxuICAgICAgOiBERUZBVUxUX0NPTkZJRy5CVUlMRC5yc2NFeHRlbnNpb247XG5cbiAgY29uc3QgcnNjT3V0cHV0UGF0aCA9XG4gICAgdHlwZW9mIG9wdGlvbnMuYnVpbGQ/LnJzY091dHB1dFBhdGggPT09IFwic3RyaW5nXCJcbiAgICAgID8gb3B0aW9ucy5idWlsZC5yc2NPdXRwdXRQYXRoXG4gICAgICA6IERFRkFVTFRfQ09ORklHLkJVSUxELnJzY091dHB1dFBhdGg7XG4gIGNvbnN0IGh0bWxPdXRwdXRQYXRoID1cbiAgICB0eXBlb2Ygb3B0aW9ucy5idWlsZD8uaHRtbE91dHB1dFBhdGggPT09IFwic3RyaW5nXCJcbiAgICAgID8gb3B0aW9ucy5idWlsZC5odG1sT3V0cHV0UGF0aFxuICAgICAgOiBERUZBVUxUX0NPTkZJRy5CVUlMRC5odG1sT3V0cHV0UGF0aDtcblxuICBjb25zdCBtb2R1bGVQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8ubW9kdWxlUGF0dGVybixcbiAgICBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLm1vZHVsZVBhdHRlcm5cbiAgKTtcblxuICBjb25zdCBqc29uUGF0dGVybiA9IHJlc29sdmVSZWdFeHAoXG4gICAgb3B0aW9ucy5hdXRvRGlzY292ZXI/Lmpzb25QYXR0ZXJuLFxuICAgIERFRkFVTFRfQ09ORklHLkFVVE9fRElTQ09WRVIuanNvblBhdHRlcm5cbiAgKTtcblxuICBjb25zdCBjc3NQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8uY3NzUGF0dGVybixcbiAgICBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLmNzc1BhdHRlcm5cbiAgKTtcblxuICBjb25zdCBodG1sUGF0dGVybiA9IHJlc29sdmVSZWdFeHAoXG4gICAgb3B0aW9ucy5hdXRvRGlzY292ZXI/Lmh0bWxQYXR0ZXJuLFxuICAgIERFRkFVTFRfQ09ORklHLkFVVE9fRElTQ09WRVIuaHRtbFBhdHRlcm5cbiAgKTtcblxuICBjb25zdCByc2NQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8ucnNjUGF0dGVybixcbiAgICBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLnJzY1BhdHRlcm5cbiAgKTtcblxuICBjb25zdCBjbGllbnRQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8uY2xpZW50UGF0dGVybixcbiAgICBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLmNsaWVudFBhdHRlcm5cbiAgKTtcblxuICBjb25zdCBzZXJ2ZXJQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8uc2VydmVyUGF0dGVybixcbiAgICBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLnNlcnZlclBhdHRlcm5cbiAgKTtcblxuICBjb25zdCBub2RlUGF0dGVybiA9IHJlc29sdmVSZWdFeHAoXG4gICAgb3B0aW9ucy5hdXRvRGlzY292ZXI/Lm5vZGVQYXR0ZXJuLFxuICAgIERFRkFVTFRfQ09ORklHLkFVVE9fRElTQ09WRVIubm9kZU9ubHlcbiAgKTtcblxuICBjb25zdCBwcm9wc1BhdHRlcm4gPSByZXNvbHZlUmVnRXhwKFxuICAgIG9wdGlvbnMuYXV0b0Rpc2NvdmVyPy5wcm9wc1BhdHRlcm4sXG4gICAgREVGQVVMVF9DT05GSUcuQVVUT19ESVNDT1ZFUi5wcm9wc1BhdHRlcm5cbiAgKTtcblxuICBjb25zdCBwYWdlUGF0dGVybiA9IHJlc29sdmVSZWdFeHAoXG4gICAgb3B0aW9ucy5hdXRvRGlzY292ZXI/LnBhZ2VQYXR0ZXJuLFxuICAgIERFRkFVTFRfQ09ORklHLkFVVE9fRElTQ09WRVIucGFnZVBhdHRlcm5cbiAgKTtcblxuICBjb25zdCBjc3NNb2R1bGVQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8uY3NzTW9kdWxlUGF0dGVybixcbiAgICBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLmNzc01vZHVsZVBhdHRlcm5cbiAgKTtcblxuICBjb25zdCB2ZW5kb3JQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8udmVuZG9yUGF0dGVybixcbiAgICBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLnZlbmRvclBhdHRlcm5cbiAgKTtcblxuICBjb25zdCB2aXJ0dWFsUGF0dGVybiA9IHJlc29sdmVSZWdFeHAoXG4gICAgb3B0aW9ucy5hdXRvRGlzY292ZXI/LnZpcnR1YWxQYXR0ZXJuLFxuICAgIERFRkFVTFRfQ09ORklHLkFVVE9fRElTQ09WRVIudmlydHVhbFBhdHRlcm5cbiAgKTtcblxuICBjb25zdCBkb3RQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8uZG90UGF0dGVybixcbiAgICBCQVNFX1BBVFRFUk5TLkRPVF9GSUxFU1xuICApO1xuXG4gIC8qKiBMb2FkZXIgb3B0aW9ucyAqL1xuICBjb25zdCBzZXJ2ZXJEaXJlY3RpdmUgPSByZXNvbHZlUmVnRXhwKFxuICAgIG9wdGlvbnMubG9hZGVyPy5zZXJ2ZXJEaXJlY3RpdmUsXG4gICAgREVGQVVMVF9MT0FERVJfQ09ORklHLnNlcnZlckRpcmVjdGl2ZVxuICApO1xuICBjb25zdCBjbGllbnREaXJlY3RpdmUgPSByZXNvbHZlUmVnRXhwKFxuICAgIG9wdGlvbnMubG9hZGVyPy5jbGllbnREaXJlY3RpdmUsXG4gICAgREVGQVVMVF9MT0FERVJfQ09ORklHLmNsaWVudERpcmVjdGl2ZVxuICApO1xuICBjb25zdCBpc1NlcnZlckZ1bmN0aW9uQ29kZSA9IHJlc29sdmVEaXJlY3RpdmVNYXRjaGVyKFxuICAgIHNlcnZlckRpcmVjdGl2ZSxcbiAgICAoY29kZTogc3RyaW5nLCBtb2R1bGVJZD86IHN0cmluZykgPT5cbiAgICAgIGNvZGUubWF0Y2goc2VydmVyRGlyZWN0aXZlKSAhPSBudWxsIHx8XG4gICAgICAodHlwZW9mIG1vZHVsZUlkID09PSBcInN0cmluZ1wiICYmIHNlcnZlclBhdHRlcm4udGVzdChtb2R1bGVJZCkpIHx8XG4gICAgICBmYWxzZVxuICApO1xuXG4gIGNvbnN0IGlzQ2xpZW50Q29tcG9uZW50Q29kZSA9IHJlc29sdmVEaXJlY3RpdmVNYXRjaGVyKFxuICAgIGNsaWVudERpcmVjdGl2ZSxcbiAgICAoY29kZTogc3RyaW5nLCBtb2R1bGVJZD86IHN0cmluZykgPT5cbiAgICAgIGNvZGUubWF0Y2goY2xpZW50RGlyZWN0aXZlKSAhPSBudWxsIHx8XG4gICAgICAodHlwZW9mIG1vZHVsZUlkID09PSBcInN0cmluZ1wiICYmIGNsaWVudFBhdHRlcm4udGVzdChtb2R1bGVJZCkpIHx8XG4gICAgICBmYWxzZVxuICApO1xuXG4gIGNvbnN0IGlzQ2xpZW50Q29tcG9uZW50QnlDb2RlID0gcmVzb2x2ZURpcmVjdGl2ZU1hdGNoZXIoXG4gICAgY2xpZW50RGlyZWN0aXZlLFxuICAgIChjb2RlOiBzdHJpbmcpID0+IGNvZGUubWF0Y2goY2xpZW50RGlyZWN0aXZlKSAhPSBudWxsIHx8IGZhbHNlXG4gICk7XG5cbiAgY29uc3QgaXNDbGllbnRDb21wb25lbnRCeU5hbWUgPSAobW9kdWxlSWQ6IHN0cmluZywgX3RyYW5zZm9ybWVkTW9kdWxlSWQ/OiBzdHJpbmcpID0+IFxuICAgICh0eXBlb2YgbW9kdWxlSWQgPT09IFwic3RyaW5nXCIgJiYgY2xpZW50UGF0dGVybi50ZXN0KG1vZHVsZUlkKSkgfHwgZmFsc2U7XG5cbiAgY29uc3QgaGFzaE9wdGlvbiA9IG9wdGlvbnMuYnVpbGQ/Lmhhc2ggPz8gREVGQVVMVF9DT05GSUcuQlVJTEQuaGFzaDtcblxuICAvLyBDbGVhbiBoYXNoIEFQSSB0aGF0IG1pbWljcyBSb2xsdXAncyBiZWhhdmlvciBidXQgYWxsb3dzIGNvbnRyb2wgb3ZlciBpbnB1dFxuICBjb25zdCBjcmVhdGVSb2xsdXBMaWtlSGFzaCA9IChjb250ZW50OiBzdHJpbmcsIGhhc2hDaGFyYWN0ZXJzOiAnYmFzZTM2JyB8ICdiYXNlNjQnIHwgJ2hleCcgPSAnYmFzZTM2JykgPT4ge1xuICAgIGNvbnN0IGhhc2ggPSBjcmVhdGVIYXNoKCdzaGExJyk7XG4gICAgaGFzaC51cGRhdGUoY29udGVudCk7XG4gICAgY29uc3QgZnVsbEhhc2ggPSBoYXNoLmRpZ2VzdCgnaGV4Jyk7XG4gICAgXG4gICAgLy8gQXBwbHkgdGhlIHNhbWUgY2hhcmFjdGVyIHNldCBsb2dpYyBhcyBSb2xsdXBcbiAgICBzd2l0Y2ggKGhhc2hDaGFyYWN0ZXJzKSB7XG4gICAgICBjYXNlICdiYXNlMzYnOlxuICAgICAgICAvLyBDb252ZXJ0IGhleCB0byBiYXNlMzYgKDAtOSwgYS16KVxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoZnVsbEhhc2guc3Vic3RyaW5nKDAsIDgpLCAxNikudG9TdHJpbmcoMzYpO1xuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gQ29udmVydCB0byBiYXNlNjQtbGlrZSBmb3JtYXQgKEEtWiwgYS16LCAwLTksIC0sIF8pXG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShmdWxsSGFzaC5zdWJzdHJpbmcoMCwgOCksICdoZXgnKS50b1N0cmluZygnYmFzZTY0JylcbiAgICAgICAgICAucmVwbGFjZSgvXFwrL2csICctJylcbiAgICAgICAgICAucmVwbGFjZSgvXFwvL2csICdfJylcbiAgICAgICAgICAucmVwbGFjZSgvPS9nLCAnJyk7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gUmV0dXJuIGhleCBmb3JtYXRcbiAgICAgICAgcmV0dXJuIGZ1bGxIYXNoLnN1YnN0cmluZygwLCA4KTtcbiAgICB9XG4gIH07XG5cbiAgLy8gVXNlci1mYWNpbmcgaGFzaCBmdW5jdGlvbiB0aGF0IGNhbiB0YWtlIHNvdXJjZSBjb250ZW50IG9yIGZpbGVuYW1lXG4gIGNvbnN0IGhhc2ggPSAoaW5wdXQ6IHN0cmluZyB8IG51bGwsIF9zc3I6IGJvb2xlYW4sIHNvdXJjZUNvbnRlbnQ/OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIWlucHV0KSByZXR1cm4gXCJcIjtcbiAgICBpZiAobmV3IFJlZ0V4cChCQVNFX1BBVFRFUk5TLkVYVC5OT0RFKS50ZXN0KGlucHV0KSkge1xuICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBcbiAgICAvLyBDUklUSUNBTDogTmV2ZXIgaGFzaCBub2RlX21vZHVsZXMgZmlsZXMgLSBWaXRlL1JvbGx1cCBoYW5kbGVzIHRob3NlXG4gICAgaWYgKGlucHV0LmluY2x1ZGVzKFwibm9kZV9tb2R1bGVzXCIpKSB7XG4gICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuICAgIFxuICAgIC8vIENSSVRJQ0FMOiBOZXZlciBoYXNoIHZpcnR1YWwgbW9kdWxlcyAoX3ZpcnR1YWwgb3IgbWF0Y2hpbmcgdmlydHVhbFBhdHRlcm4pIC0gVml0ZSBoYW5kbGVzIHRob3NlXG4gICAgY29uc3QgdmlydHVhbFBhdHRlcm4gPSByZXNvbHZlUmVnRXhwKFxuICAgICAgb3B0aW9ucy5hdXRvRGlzY292ZXI/LnZpcnR1YWxQYXR0ZXJuLFxuICAgICAgREVGQVVMVF9DT05GSUcuQVVUT19ESVNDT1ZFUi52aXJ0dWFsUGF0dGVyblxuICAgICk7XG4gICAgaWYgKGlucHV0LmluY2x1ZGVzKFwiX3ZpcnR1YWxcIikgfHwgKHZpcnR1YWxQYXR0ZXJuICYmIHZpcnR1YWxQYXR0ZXJuLnRlc3QoaW5wdXQpKSkge1xuICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBcbiAgICAvLyBDaGVjayBpZiBoYXNoaW5nIGlzIGRpc2FibGVkXG4gICAgaWYgKGhhc2hPcHRpb24gPT09IFwiZmFsc2VcIikge1xuICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBcbiAgICAvLyBPbmx5IGhhc2ggY2xpZW50IGNvbXBvbmVudHMgLSBzZXJ2ZXIgZmlsZXMgc2hvdWxkIG5vdCBiZSBoYXNoZWRcbiAgICBjb25zdCBpc0NsaWVudENvbXBvbmVudCA9IGNsaWVudFBhdHRlcm4udGVzdChpbnB1dCk7XG4gICAgaWYgKCFpc0NsaWVudENvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBcbiAgICAvLyBEZXRlcm1pbmUgd2hhdCB0byBoYXNoIGJhc2VkIG9uIGF2YWlsYWJsZSBpbnB1dFxuICAgIGxldCBjb250ZW50VG9IYXNoOiBzdHJpbmc7XG4gICAgXG4gICAgaWYgKHNvdXJjZUNvbnRlbnQpIHtcbiAgICAgIC8vIFVzZSBwcm92aWRlZCBzb3VyY2UgY29udGVudCAocHJlZmVycmVkKVxuICAgICAgY29udGVudFRvSGFzaCA9IHNvdXJjZUNvbnRlbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgICAgLy8gVHJ5IHRvIHJlYWQgc291cmNlIGZpbGUgY29udGVudFxuICAgICB0cnkge1xuICAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSByZXNvbHZlKHByb2plY3RSb290LCBpbnB1dCk7XG4gICAgICAgaWYgKGV4aXN0c1N5bmMoc291cmNlUGF0aCkpIHtcbiAgICAgICAgIGNvbnRlbnRUb0hhc2ggPSByZWFkRmlsZVN5bmMoc291cmNlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICAgICAvLyBEZWJ1ZyBsb2dnaW5nXG4gICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgIGxvZ2dlci5pbmZvKGBbaGFzaF0gUmVhZGluZyBzb3VyY2U6ICR7c291cmNlUGF0aH0gKCR7Y29udGVudFRvSGFzaC5sZW5ndGh9IGNoYXJzKWApO1xuICAgICAgICAgfVxuICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAvLyBGYWxsYmFjayB0byBmaWxlbmFtZVxuICAgICAgICAgY29udGVudFRvSGFzaCA9IGlucHV0O1xuICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICBsb2dnZXIud2FybihgW2hhc2hdIEZpbGUgbm90IGZvdW5kOiAke3NvdXJjZVBhdGh9LCB1c2luZyBmaWxlbmFtZTogJHtpbnB1dH1gKTtcbiAgICAgICAgIH1cbiAgICAgICB9XG4gICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgLy8gRmFsbGJhY2sgdG8gZmlsZW5hbWVcbiAgICAgICBjb250ZW50VG9IYXNoID0gaW5wdXQ7XG4gICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgbG9nZ2VyLndhcm4oYFtoYXNoXSBFcnJvciByZWFkaW5nICR7aW5wdXR9OiAke2Vycm9yfWApO1xuICAgICAgIH1cbiAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBHZW5lcmF0ZSBoYXNoIHVzaW5nIFJvbGx1cC1saWtlIGFsZ29yaXRobVxuICAgIGNvbnN0IGhhc2hDaGFyYWN0ZXJzID0gdHlwZW9mIGhhc2hPcHRpb24gPT09ICdvYmplY3QnICYmIGhhc2hPcHRpb24/LmZvcm1hdCA9PT0gJ2hleCcgPyAnaGV4JyA6ICdiYXNlMzYnO1xuICAgIGNvbnN0IGNvbnRlbnRIYXNoID0gY3JlYXRlUm9sbHVwTGlrZUhhc2goY29udGVudFRvSGFzaCwgaGFzaENoYXJhY3RlcnMpO1xuICAgIFxuICAgIC8vIEFwcGx5IG5hbWluZyBsb2dpY1xuICAgIGNvbnN0IGV4dGVuc2lvbkluZGV4ID0gaW5wdXQubGFzdEluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChleHRlbnNpb25JbmRleCAhPT0gLTEpIHtcbiAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IGlucHV0LnNsaWNlKGV4dGVuc2lvbkluZGV4KTtcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gaW5wdXQuc2xpY2UoMCwgZXh0ZW5zaW9uSW5kZXgpO1xuICAgICAgcmV0dXJuIGZpbGVuYW1lICsgXCItXCIgKyBjb250ZW50SGFzaCArIGV4dGVuc2lvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGlucHV0ICsgXCItXCIgKyBjb250ZW50SGFzaDtcbiAgICB9XG4gIH07XG5cbiAgLy8gT3V0cHV0IHBhdGggcmVzb2x1dGlvblxuICBjb25zdCBnZXRPdXRwdXRQYXRoID0gKG46IHN0cmluZyB8IG51bGwsIGlzQXNzZXQ6IGJvb2xlYW4gPSBmYWxzZSkgPT4ge1xuICAgIGlmICghbikgcmV0dXJuIFwiXCI7XG4gICAgbGV0IHBhdGggPSBoYW5kbGVTZWFyY2hRdWVyeShuKTtcbiAgICBwYXRoID0gcGF0aC5zdGFydHNXaXRoKG1vZHVsZUJhc2UgKyBtb2R1bGVCYXNlUGF0aClcbiAgICAgID8gcGF0aC5zbGljZShtb2R1bGVCYXNlLmxlbmd0aCArIG1vZHVsZUJhc2VQYXRoLmxlbmd0aClcbiAgICAgIDogcGF0aDtcblxuICAgIC8vIEZvciBhc3NldHMgdGhhdCBhcmUgbm90IG1vZHVsZXMsIHByZXNlcnZlIHRoZSBvcmlnaW5hbCBleHRlbnNpb25cbiAgICAvLyBPbmx5IGFwcGx5IG1vZHVsZSB0cmFuc2Zvcm1hdGlvbnMgaWYgdGhlIGZpbGUgYWN0dWFsbHkgbWF0Y2hlcyBtb2R1bGUgcGF0dGVybnNcbiAgICBpZiAoaXNBc3NldCkge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIG1vZHVsZSBmaWxlIChKUy9UUy9KU1gvVFNYKSAtIGlmIHNvLCBhcHBseSBtb2R1bGUgdHJhbnNmb3JtYXRpb25zXG4gICAgICBjb25zdCBpc01vZHVsZUZpbGUgPSBtb2R1bGVQYXR0ZXJuLnRlc3QocGF0aCkgfHwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudFBhdHRlcm4udGVzdChwYXRoKSB8fCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyUGF0dGVybi50ZXN0KHBhdGgpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzUGF0dGVybi50ZXN0KHBhdGgpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VQYXR0ZXJuLnRlc3QocGF0aCk7XG4gICAgICBcbiAgICAgIC8vIElmIGl0J3Mgbm90IGEgbW9kdWxlIGZpbGUsIHByZXNlcnZlIHRoZSBvcmlnaW5hbCBleHRlbnNpb25cbiAgICAgIGlmICghaXNNb2R1bGVGaWxlKSB7XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2ZW5kb3JQYXR0ZXJuLnRlc3QocGF0aCkpXG4gICAgICByZXR1cm4gcmVnaXN0ZXJQYXRoKHBhdGgsIHZlbmRvclBhdHRlcm4sIGpzRXh0ZW5zaW9uKTtcbiAgICBpZiAoY3NzTW9kdWxlUGF0dGVybi50ZXN0KHBhdGgpKVxuICAgICAgcmV0dXJuIHJlZ2lzdGVyUGF0aChwYXRoLCBjc3NNb2R1bGVQYXR0ZXJuLCBjc3NFeHRlbnNpb24pO1xuICAgIGlmIChjc3NQYXR0ZXJuLnRlc3QocGF0aCkpXG4gICAgICByZXR1cm4gcmVnaXN0ZXJQYXRoKHBhdGgsIGNzc1BhdHRlcm4sIGNzc0V4dGVuc2lvbik7XG4gICAgaWYgKGNsaWVudFBhdHRlcm4udGVzdChwYXRoKSlcbiAgICAgIHJldHVybiByZWdpc3RlclBhdGgocGF0aCwgY2xpZW50UGF0dGVybiwganNFeHRlbnNpb24pO1xuICAgIGlmIChodG1sUGF0dGVybi50ZXN0KHBhdGgpKVxuICAgICAgcmV0dXJuIHJlZ2lzdGVyUGF0aChwYXRoLCBodG1sUGF0dGVybiwgaHRtbEV4dGVuc2lvbik7XG4gICAgaWYgKGpzb25QYXR0ZXJuLnRlc3QocGF0aCkpXG4gICAgICByZXR1cm4gcmVnaXN0ZXJQYXRoKHBhdGgsIGpzb25QYXR0ZXJuLCBqc29uRXh0ZW5zaW9uKTtcbiAgICBpZiAocHJvcHNQYXR0ZXJuLnRlc3QocGF0aCkpXG4gICAgICByZXR1cm4gcmVnaXN0ZXJQYXRoKHBhdGgsIHByb3BzUGF0dGVybiwganNFeHRlbnNpb24pO1xuICAgIGlmIChwYWdlUGF0dGVybi50ZXN0KHBhdGgpKVxuICAgICAgcmV0dXJuIHJlZ2lzdGVyUGF0aChwYXRoLCBwYWdlUGF0dGVybiwganNFeHRlbnNpb24pO1xuICAgIGlmIChzZXJ2ZXJQYXR0ZXJuLnRlc3QocGF0aCkpXG4gICAgICByZXR1cm4gcmVnaXN0ZXJQYXRoKHBhdGgsIHNlcnZlclBhdHRlcm4sIGpzRXh0ZW5zaW9uKTtcbiAgICBpZiAobW9kdWxlUGF0dGVybi50ZXN0KHBhdGgpKVxuICAgICAgcmV0dXJuIHJlZ2lzdGVyUGF0aChwYXRoLCBtb2R1bGVQYXR0ZXJuLCBqc0V4dGVuc2lvbik7XG4gICAgXG4gICAgLy8gRmFsbGJhY2s6IG9ubHkgYXBwbHkgbW9kdWxlIHBhdHRlcm4gaWYgd2UncmUgc3VyZSBpdCdzIGEgbW9kdWxlXG4gICAgLy8gRm9yIGFzc2V0cywgd2UndmUgYWxyZWFkeSByZXR1cm5lZCBhYm92ZSwgc28gdGhpcyBpcyBzYWZlXG4gICAgcmV0dXJuIHJlZ2lzdGVyUGF0aChwYXRoLCBtb2R1bGVQYXR0ZXJuLCBqc0V4dGVuc2lvbik7XG4gIH07XG5cbiAgY29uc3Qgbm9ybWFsaXplciA9XG4gICAgb3B0aW9ucy5ub3JtYWxpemVyID8/XG4gICAgY3JlYXRlSW5wdXROb3JtYWxpemVyKHtcbiAgICAgIHJvb3Q6IHByb2plY3RSb290LFxuICAgICAgcHJlc2VydmVNb2R1bGVzUm9vdDogcHJlc2VydmVNb2R1bGVzUm9vdFN0cmluZyxcbiAgICAgIHJlbW92ZUV4dGVuc2lvbjogdHJ1ZSxcbiAgICAgIG1vZHVsZUJhc2VQYXRoLFxuICAgICAgbW9kdWxlQmFzZVVSTCxcbiAgICB9KTtcbiAgLy8gRmlsZSBuYW1pbmcgZnVuY3Rpb25zIC0gZGVmaW5lZCBhcyByZWd1bGFyIGZ1bmN0aW9ucyB0byBhdm9pZCBjbG9zdXJlIGlzc3Vlc1xuICBmdW5jdGlvbiBlbnRyeUZpbGUobjogUHJlUmVuZGVyZWRDaHVuaywgc3NyOiBib29sZWFuLCBzb3VyY2VDb250ZW50Pzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZXIobi5uYW1lKVswXTtcbiAgICBsZXQgb3V0cHV0UGF0aCA9IGdldE91dHB1dFBhdGgobm9ybWFsaXplZE5hbWUpO1xuICAgIFxuICAgIC8vIFdoZW4gcHJlc2VydmVNb2R1bGVzUm9vdCBpcyB0cnVlLCBwcmVzZXJ2ZSB0aGUgc3JjLyBwcmVmaXggaW4gb3V0cHV0IHBhdGhzXG4gICAgaWYgKHByZXNlcnZlTW9kdWxlc1Jvb3QgJiYgbi5uYW1lLnN0YXJ0c1dpdGgoXCJzcmMvXCIpKSB7XG4gICAgICAvLyBJZiB0aGUgbm9ybWFsaXplZCBuYW1lIGRvZXNuJ3QgaGF2ZSBzcmMvLCBhZGQgaXQgYmFja1xuICAgICAgaWYgKCFvdXRwdXRQYXRoLnN0YXJ0c1dpdGgoXCJzcmMvXCIpKSB7XG4gICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBvdXRwdXRQYXRoIHN0YXJ0cyB3aXRoIGEgc2xhc2hcbiAgICAgICAgaWYgKG91dHB1dFBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgICBvdXRwdXRQYXRoID0gXCJzcmNcIiArIG91dHB1dFBhdGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0cHV0UGF0aCA9IFwic3JjL1wiICsgb3V0cHV0UGF0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICByZXR1cm4gaGFzaChvdXRwdXRQYXRoLCBzc3IsIHNvdXJjZUNvbnRlbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2h1bmtGaWxlKG46IFByZVJlbmRlcmVkQ2h1bmssIHNzcjogYm9vbGVhbiwgc291cmNlQ29udGVudD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemVyKG4ubmFtZSlbMF07XG4gICAgbGV0IG91dHB1dFBhdGggPSBnZXRPdXRwdXRQYXRoKG5vcm1hbGl6ZWROYW1lKTtcbiAgICBcbiAgICAvLyBXaGVuIHByZXNlcnZlTW9kdWxlc1Jvb3QgaXMgdHJ1ZSwgcHJlc2VydmUgdGhlIHNyYy8gcHJlZml4IGluIG91dHB1dCBwYXRoc1xuICAgIGlmIChwcmVzZXJ2ZU1vZHVsZXNSb290ICYmIG4ubmFtZS5zdGFydHNXaXRoKFwic3JjL1wiKSkge1xuICAgICAgLy8gSWYgdGhlIG5vcm1hbGl6ZWQgbmFtZSBkb2Vzbid0IGhhdmUgc3JjLywgYWRkIGl0IGJhY2tcbiAgICAgIGlmICghb3V0cHV0UGF0aC5zdGFydHNXaXRoKFwic3JjL1wiKSkge1xuICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgb3V0cHV0UGF0aCBzdGFydHMgd2l0aCBhIHNsYXNoXG4gICAgICAgIGlmIChvdXRwdXRQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgICAgb3V0cHV0UGF0aCA9IFwic3JjXCIgKyBvdXRwdXRQYXRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dHB1dFBhdGggPSBcInNyYy9cIiArIG91dHB1dFBhdGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGhhc2gob3V0cHV0UGF0aCwgc3NyLCBzb3VyY2VDb250ZW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFzc2V0RmlsZShuOiBQcmVSZW5kZXJlZEFzc2V0LCBzc3I6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgaWYgKG4ubmFtZXMubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIG4ubmFtZXMubWFwKChuYW1lKSA9PiBoYXNoKG5hbWUsIHNzcikpLmpvaW4oXCIsXCIpO1xuICAgIH1cbiAgICBsZXQgZmlyc3ROYW1lID0gbi5uYW1lc1swXTtcblxuICAgIC8vIENsZWFuIHVwIGFzc2V0IHBhdGhzIGJ5IHJlbW92aW5nIHRoZSBtb2R1bGVCYXNlIGZyb20gd2l0aGluIGFzc2V0cyBkaXJlY3RvcnlcbiAgICAvLyBUcmFuc2Zvcm06IGFzc2V0cy9zcmMvcGFnZS9maWxlLmNzcyAtPiBhc3NldHMvcGFnZS9maWxlLmNzc1xuICAgIGNvbnN0IGFzc2V0c0RpciA9IGJ1aWxkLmFzc2V0c0RpciB8fCBcImFzc2V0c1wiO1xuICAgIGlmIChmaXJzdE5hbWUuc3RhcnRzV2l0aChhc3NldHNEaXIgKyBcIi9cIiArIG1vZHVsZUJhc2UgKyBcIi9cIikpIHtcbiAgICAgIGZpcnN0TmFtZSA9XG4gICAgICAgIGFzc2V0c0RpciArXG4gICAgICAgIFwiL1wiICtcbiAgICAgICAgZmlyc3ROYW1lLnNsaWNlKChhc3NldHNEaXIgKyBcIi9cIiArIG1vZHVsZUJhc2UgKyBcIi9cIikubGVuZ3RoKTtcbiAgICB9XG4gICAgLy8gSGFuZGxlIG1vZHVsZUJhc2VQYXRoIHJlbW92YWxcbiAgICBlbHNlIGlmIChtb2R1bGVCYXNlUGF0aCAmJiBmaXJzdE5hbWUuc3RhcnRzV2l0aChtb2R1bGVCYXNlUGF0aCkpIHtcbiAgICAgIGZpcnN0TmFtZSA9IGZpcnN0TmFtZS5zbGljZShtb2R1bGVCYXNlUGF0aC5sZW5ndGgpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBtb2R1bGVCYXNlVVJMICYmXG4gICAgICBtb2R1bGVCYXNlVVJMICE9PSBcIi9cIiAmJlxuICAgICAgbW9kdWxlQmFzZVVSTCAhPT0gXCJcIiAmJlxuICAgICAgZmlyc3ROYW1lLnN0YXJ0c1dpdGgobW9kdWxlQmFzZVVSTClcbiAgICApIHtcbiAgICAgIGZpcnN0TmFtZSA9IGZpcnN0TmFtZS5zbGljZShtb2R1bGVCYXNlVVJMLmxlbmd0aCk7XG4gICAgfVxuICAgIC8vIEhhbmRsZSBkaXJlY3QgbW9kdWxlQmFzZSByZW1vdmFsXG4gICAgZWxzZSBpZiAoZmlyc3ROYW1lLnN0YXJ0c1dpdGgobW9kdWxlQmFzZSArIFwiL1wiKSkge1xuICAgICAgZmlyc3ROYW1lID0gZmlyc3ROYW1lLnNsaWNlKG1vZHVsZUJhc2UubGVuZ3RoICsgMSk7XG4gICAgfVxuXG4gICAgLy8gRm9yIENTUyBmaWxlcywgZW5zdXJlIHRoZXkgZ28gaW50byB0aGUgYXNzZXRzIGRpcmVjdG9yeVxuICAgIGlmIChmaXJzdE5hbWUuZW5kc1dpdGgoXCIuY3NzXCIpKSB7XG4gICAgICAvLyBBZGQgYXNzZXRzIGRpcmVjdG9yeSBwcmVmaXggaWYgbm90IGFscmVhZHkgcHJlc2VudFxuICAgICAgaWYgKCFmaXJzdE5hbWUuc3RhcnRzV2l0aChhc3NldHNEaXIgKyBcIi9cIikpIHtcbiAgICAgICAgZmlyc3ROYW1lID0gYXNzZXRzRGlyICsgXCIvXCIgKyBmaXJzdE5hbWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGFzaChmaXJzdE5hbWUsIGZhbHNlKTtcbiAgICB9XG5cbiAgICAvLyBGb3Igb3RoZXIgYXNzZXRzLCBhcHBseSB0aGUgZXh0ZW5zaW9uIG1hcHBpbmcgaWYgbmVlZGVkXG4gICAgLy8gUGFzcyBpc0Fzc2V0PXRydWUgdG8gcHJlc2VydmUgZXh0ZW5zaW9ucyBmb3Igbm9uLW1vZHVsZSBhc3NldHNcbiAgICByZXR1cm4gaGFzaChnZXRPdXRwdXRQYXRoKGZpcnN0TmFtZSwgdHJ1ZSksIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBwYWdlc1xuICAgKiBhc3NldHNEaXJcbiAgICogY2xpZW50XG4gICAqIHNlcnZlclxuICAgKiBzdGF0aWNcbiAgICogYXBpXG4gICAqIG91dERpclxuICAgKiBoYXNoXG5cbiAgICogcHJlc2VydmVNb2R1bGVzUm9vdFxuICAgKiByc2NPdXRwdXRQYXRoXG4gICAqIGh0bWxPdXRwdXRQYXRoXG4gICAqIGVudHJ5RmlsZVxuICAgKiBjaHVua0ZpbGVcbiAgICogYXNzZXRGaWxlXG4gICAqIGV4dGVuc2lvbk1hcFxuICAgKiBtb2R1bGVFeHRlbnNpb25cbiAgICoganNFeHRlbnNpb25cbiAgICogY3NzRXh0ZW5zaW9uXG4gICAqIGh0bWxFeHRlbnNpb25cbiAgICoganNvbkV4dGVuc2lvblxuICAgKiByc2NFeHRlbnNpb25cbiAgICogY3NzTW9kdWxlRXh0ZW5zaW9uXG4gICAqIG5vZGVFeHRlbnNpb25cbiAgICovXG4gIGNvbnN0IGJ1aWxkID0ge1xuICAgIHBhZ2VzOiBvcHRpb25zLmJ1aWxkPy5wYWdlcyA/PyBERUZBVUxUX0NPTkZJRy5CVUlMRC5wYWdlcyxcbiAgICBhc3NldHNEaXI6IG9wdGlvbnMuYnVpbGQ/LmFzc2V0c0RpciA/PyBERUZBVUxUX0NPTkZJRy5CVUlMRC5hc3NldHNEaXIsXG4gICAgY2xpZW50OiBvcHRpb25zLmJ1aWxkPy5jbGllbnQgPz8gREVGQVVMVF9DT05GSUcuQlVJTEQuY2xpZW50LFxuICAgIHNlcnZlcjogb3B0aW9ucy5idWlsZD8uc2VydmVyID8/IERFRkFVTFRfQ09ORklHLkJVSUxELnNlcnZlcixcbiAgICBzdGF0aWM6IG9wdGlvbnMuYnVpbGQ/LnN0YXRpYyA/PyBERUZBVUxUX0NPTkZJRy5CVUlMRC5zdGF0aWMsXG4gICAgYXBpOiBvcHRpb25zLmJ1aWxkPy5hcGkgPz8gREVGQVVMVF9DT05GSUcuQlVJTEQuYXBpLFxuICAgIHByZXNlcnZlTW9kdWxlc1Jvb3Q6XG4gICAgICBvcHRpb25zLmJ1aWxkPy5wcmVzZXJ2ZU1vZHVsZXNSb290ID8/XG4gICAgICBERUZBVUxUX0NPTkZJRy5CVUlMRC5wcmVzZXJ2ZU1vZHVsZXNSb290LFxuICAgIG91dERpcjogb3B0aW9ucy5idWlsZD8ub3V0RGlyID8/IERFRkFVTFRfQ09ORklHLkJVSUxELm91dERpcixcbiAgICBoYXNoOiBvcHRpb25zLmJ1aWxkPy5oYXNoID8/IERFRkFVTFRfQ09ORklHLkJVSUxELmhhc2gsXG4gICAgZXh0ZW5zaW9uTWFwOiB7XG4gICAgICAvLyBGaWxlIGV4dGVuc2lvbnMgZmlyc3QgKG1vcmUgc3BlY2lmaWMgcGF0dGVybnMgc2hvdWxkIGNvbWUgZmlyc3QpXG4gICAgICBbQkFTRV9QQVRURVJOUy5FWFQuQ1NTXTogY3NzRXh0ZW5zaW9uLFxuICAgICAgW0JBU0VfUEFUVEVSTlMuRVhULkpTT05dOiBqc29uRXh0ZW5zaW9uLFxuICAgICAgW0JBU0VfUEFUVEVSTlMuRVhULkhUTUxdOiBodG1sRXh0ZW5zaW9uLFxuICAgICAgW0JBU0VfUEFUVEVSTlMuRVhULlJTQ106IHJzY0V4dGVuc2lvbixcbiAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgLm5vZGUgZmlsZXNcbiAgICAgIFtCQVNFX1BBVFRFUk5TLkVYVC5OT0RFXTpcbiAgICAgICAgQkFTRV9QQVRURVJOUy5FWFQuTk9ERSArXG4gICAgICAgIChvcHRpb25zLmJ1aWxkPy5qc0V4dGVuc2lvbiA/PyBERUZBVUxUX0NPTkZJRy5CVUlMRC5qc0V4dGVuc2lvbiksXG4gICAgICAvLyBHZW5lcmFsIG1vZHVsZSBwYXR0ZXJuIGxhc3QgKGxlc3Mgc3BlY2lmaWMpXG4gICAgICBbQkFTRV9QQVRURVJOUy5NT0RVTEVdOiBqc0V4dGVuc2lvbixcbiAgICAgIC4uLm9wdGlvbnMuYnVpbGQ/LmV4dGVuc2lvbk1hcCxcbiAgICB9LFxuICAgIGVudHJ5RmlsZSxcbiAgICBjaHVua0ZpbGUsXG4gICAgYXNzZXRGaWxlLFxuXG4gICAgcnNjT3V0cHV0UGF0aDogcnNjT3V0cHV0UGF0aCxcbiAgICBodG1sT3V0cHV0UGF0aDogaHRtbE91dHB1dFBhdGgsXG4gICAgbW9kdWxlRXh0ZW5zaW9uOiBqc0V4dGVuc2lvbixcbiAgICBqc0V4dGVuc2lvbjoganNFeHRlbnNpb24sXG4gICAgY3NzRXh0ZW5zaW9uOiBjc3NFeHRlbnNpb24sXG4gICAgaHRtbEV4dGVuc2lvbjogaHRtbEV4dGVuc2lvbixcbiAgICBqc29uRXh0ZW5zaW9uOiBqc29uRXh0ZW5zaW9uLFxuICAgIHJzY0V4dGVuc2lvbjogcnNjRXh0ZW5zaW9uLFxuICAgIGNzc01vZHVsZUV4dGVuc2lvbjogY3NzTW9kdWxlRXh0ZW5zaW9uLFxuICAgIG5vZGVFeHRlbnNpb246IERFRkFVTFRfQ09ORklHLkJVSUxELm5vZGVFeHRlbnNpb24sXG4gICAgdXNlUnNjV29ya2VyOiBvcHRpb25zLmJ1aWxkPy51c2VSc2NXb3JrZXIgPz8gREVGQVVMVF9DT05GSUcuQlVJTEQudXNlUnNjV29ya2VyLFxuICAgIHVzZUh0bWxXb3JrZXI6IG9wdGlvbnMuYnVpbGQ/LnVzZUh0bWxXb3JrZXIgPz8gXG4gICAgICAvLyBGb3JjZSB1c2VIdG1sV29ya2VyIHRvIHRydWUgd2hlbiBidWlsZC5wYWdlcyBpcyBleHBsaWNpdGx5IGNvbmZpZ3VyZWQsIHJlZ2FyZGxlc3Mgb2YgZGVmYXVsdCBsb2dpY1xuICAgICAgKG9wdGlvbnMuYnVpbGQ/LnBhZ2VzICYmIChBcnJheS5pc0FycmF5KG9wdGlvbnMuYnVpbGQucGFnZXMpIHx8IHR5cGVvZiBvcHRpb25zLmJ1aWxkLnBhZ2VzID09PSAnZnVuY3Rpb24nKSkgPyB0cnVlIDogREVGQVVMVF9DT05GSUcuQlVJTEQudXNlSHRtbFdvcmtlcixcbiAgICByZW5kZXJNb2RlOiBvcHRpb25zLmJ1aWxkPy5yZW5kZXJNb2RlID8/IFwicGFyYWxsZWxcIixcbiAgICBiYXRjaFNpemU6IG9wdGlvbnMuYnVpbGQ/LmJhdGNoU2l6ZSA/PyA4LFxuICB9IHNhdGlzZmllcyBSZXNvbHZlZFVzZXJPcHRpb25zW1wiYnVpbGRcIl07XG5cbiAgLy8gRGV2ZWxvcG1lbnQgY29uZmlndXJhdGlvblxuICBjb25zdCBkZXYgPSB7XG4gICAgdXNlSHRtbFdvcmtlcjogb3B0aW9ucy5kZXY/LnVzZUh0bWxXb3JrZXIgPz8gREVGQVVMVF9DT05GSUcuREVWLnVzZUh0bWxXb3JrZXIsXG4gICAgdXNlUnNjV29ya2VyOiBvcHRpb25zLmRldj8udXNlUnNjV29ya2VyID8/IERFRkFVTFRfQ09ORklHLkRFVi51c2VSc2NXb3JrZXIsXG4gIH0gc2F0aXNmaWVzIFJlc29sdmVkVXNlck9wdGlvbnNbXCJkZXZcIl07XG5cbiAgLy8gQXV0by1kaXNjb3ZlcnkgY29uZmlndXJhdGlvblxuICBjb25zdCBhdXRvRGlzY292ZXIgPSB7XG4gICAgY2xpZW50RW50cnk6IG9wdGlvbnMuYXV0b0Rpc2NvdmVyPy5jbGllbnRFbnRyeSA/PyBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLmNsaWVudEVudHJ5LFxuICAgIHNlcnZlckVudHJ5OiBvcHRpb25zLmF1dG9EaXNjb3Zlcj8uc2VydmVyRW50cnkgPz8gREVGQVVMVF9DT05GSUcuQVVUT19ESVNDT1ZFUi5zZXJ2ZXJFbnRyeSxcbiAgICBjc3NFbnRyeTogb3B0aW9ucy5hdXRvRGlzY292ZXI/LmNzc0VudHJ5ID8/IERFRkFVTFRfQ09ORklHLkFVVE9fRElTQ09WRVIuY3NzRW50cnksXG4gICAganNvbkVudHJ5OiBvcHRpb25zLmF1dG9EaXNjb3Zlcj8uanNvbkVudHJ5ID8/IERFRkFVTFRfQ09ORklHLkFVVE9fRElTQ09WRVIuanNvbkVudHJ5LFxuICAgIGh0bWxFbnRyeTogb3B0aW9ucy5hdXRvRGlzY292ZXI/Lmh0bWxFbnRyeSA/PyBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLmh0bWxFbnRyeSxcbiAgICBtb2R1bGVQYXR0ZXJuLFxuICAgIGpzb25QYXR0ZXJuLFxuICAgIGNzc1BhdHRlcm4sXG4gICAgaHRtbFBhdHRlcm4sXG4gICAgcnNjUGF0dGVybixcbiAgICBjbGllbnRQYXR0ZXJuLFxuICAgIHNlcnZlclBhdHRlcm4sXG4gICAgbm9kZVBhdHRlcm4sXG4gICAgcHJvcHNQYXR0ZXJuLFxuICAgIHBhZ2VQYXR0ZXJuLFxuICAgIGNzc01vZHVsZVBhdHRlcm4sXG4gICAgdmVuZG9yUGF0dGVybixcbiAgICB2aXJ0dWFsUGF0dGVybixcbiAgICBkb3RQYXR0ZXJuLFxuICB9IHNhdGlzZmllcyBSZXNvbHZlZFVzZXJPcHRpb25zW1wiYXV0b0Rpc2NvdmVyXCJdO1xuXG4gIGNvbnN0IGFsbG93ZWREaXJlY3RpdmVzID0gcmVzb2x2ZUFsbG93ZWREaXJlY3RpdmVzKFxuICAgIG9wdGlvbnMubG9hZGVyPy5hbGxvd2VkRGlyZWN0aXZlcyA/PyBERUZBVUxUX0xPQURFUl9DT05GSUcuYWxsb3dlZERpcmVjdGl2ZXNcbiAgKTtcblxuICAvLyBDcmVhdGUgbG9hZGVyIGNvbmZpZ3VyYXRpb25cbiAgY29uc3QgbG9hZGVyID0gbG9hZGVyTW9kZVxuICAgID8gKHtcbiAgICAgICAgc2VydmVyRGlyZWN0aXZlOiByZXNvbHZlUmVnRXhwKFxuICAgICAgICAgIG9wdGlvbnMubG9hZGVyPy5zZXJ2ZXJEaXJlY3RpdmUsXG4gICAgICAgICAgREVGQVVMVF9MT0FERVJfQ09ORklHLnNlcnZlckRpcmVjdGl2ZVxuICAgICAgICApLFxuICAgICAgICBjbGllbnREaXJlY3RpdmU6IHJlc29sdmVSZWdFeHAoXG4gICAgICAgICAgb3B0aW9ucy5sb2FkZXI/LmNsaWVudERpcmVjdGl2ZSxcbiAgICAgICAgICBERUZBVUxUX0xPQURFUl9DT05GSUcuY2xpZW50RGlyZWN0aXZlXG4gICAgICAgICksXG4gICAgICAgIGFsbG93ZWREaXJlY3RpdmVzOiBhbGxvd2VkRGlyZWN0aXZlcyxcbiAgICAgICAgZ2V0RGlyZWN0aXZlVHlwZTpcbiAgICAgICAgICBvcHRpb25zLmxvYWRlcj8uZ2V0RGlyZWN0aXZlVHlwZSA/PyBvcHRpb25zLmxvYWRlcj8uYWxsb3dlZERpcmVjdGl2ZXNcbiAgICAgICAgICAgID8gKGRpcmVjdGl2ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubG9hZGVyPy5hbGxvd2VkRGlyZWN0aXZlcykge1xuICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy5sb2FkZXI/LmFsbG93ZWREaXJlY3RpdmVzKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5sb2FkZXI/LmFsbG93ZWREaXJlY3RpdmVzLmluY2x1ZGVzKGRpcmVjdGl2ZSlcbiAgICAgICAgICAgICAgICAgICAgICA/IGRpcmVjdGl2ZSA9PT0gXCJ1c2Ugc2VydmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gXCJzZXJ2ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgOiBcImNsaWVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25maWcgPSBvcHRpb25zLmxvYWRlcj8uYWxsb3dlZERpcmVjdGl2ZXNbZGlyZWN0aXZlXTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgID8gZGlyZWN0aXZlID09PSBcInVzZSBzZXJ2ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyBcInNlcnZlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwiY2xpZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBERUZBVUxUX0xPQURFUl9DT05GSUcuZ2V0RGlyZWN0aXZlVHlwZSxcbiAgICAgICAgbW9kZTogbG9hZGVyTW9kZSxcbiAgICAgICAgaW1wb3J0U2VydmVyUGF0aDpcbiAgICAgICAgICBvcHRpb25zLmxvYWRlcj8uaW1wb3J0U2VydmVyUGF0aCA/P1xuICAgICAgICAgIERFRkFVTFRfQ09ORklHLlJTQ19MT0FERVJbbG9hZGVyTW9kZV0uaW1wb3J0U2VydmVyUGF0aCxcbiAgICAgICAgaW1wb3J0Q2xpZW50UGF0aDpcbiAgICAgICAgICBvcHRpb25zLmxvYWRlcj8uaW1wb3J0Q2xpZW50UGF0aCA/P1xuICAgICAgICAgIERFRkFVTFRfQ09ORklHLlJTQ19MT0FERVJbbG9hZGVyTW9kZV0uaW1wb3J0Q2xpZW50UGF0aCxcbiAgICAgICAgcmVnaXN0ZXJDbGllbnRSZWZlcmVuY2VOYW1lOlxuICAgICAgICAgIG9wdGlvbnMubG9hZGVyPy5yZWdpc3RlckNsaWVudFJlZmVyZW5jZU5hbWUgPz9cbiAgICAgICAgICBERUZBVUxUX0NPTkZJRy5SU0NfTE9BREVSW2xvYWRlck1vZGVdLnJlZ2lzdGVyQ2xpZW50UmVmZXJlbmNlTmFtZSxcbiAgICAgICAgcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2VOYW1lOlxuICAgICAgICAgIG9wdGlvbnMubG9hZGVyPy5yZWdpc3RlclNlcnZlclJlZmVyZW5jZU5hbWUgPz9cbiAgICAgICAgICBERUZBVUxUX0NPTkZJRy5SU0NfTE9BREVSW2xvYWRlck1vZGVdLnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlTmFtZSxcbiAgICAgICAgaXNTZXJ2ZXJGdW5jdGlvbkNvZGUsXG4gICAgICAgIGlzQ2xpZW50Q29tcG9uZW50Q29kZSxcbiAgICAgICAgaXNDbGllbnRDb21wb25lbnRCeUNvZGUsXG4gICAgICAgIGlzQ2xpZW50Q29tcG9uZW50QnlOYW1lLFxuICAgICAgICBwYXJzZTogb3B0aW9ucz8ubG9hZGVyPy5wYXJzZSA/PyBERUZBVUxUX0xPQURFUl9DT05GSUcucGFyc2UsXG4gICAgICAgIG1vZHVsZUlEOiBvcHRpb25zPy5sb2FkZXI/Lm1vZHVsZUlEID8/IG9wdGlvbnM/Lm1vZHVsZUlELFxuICAgICAgfSBhcyBSZXF1aXJlZDxMb2FkZXJDb25maWc+KVxuICAgIDogdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHBpcGVhYmxlU3RyZWFtT3B0aW9ucyA9IG9wdGlvbnMucGlwZWFibGVTdHJlYW1PcHRpb25zXG4gICAgPyBvcHRpb25zLnBpcGVhYmxlU3RyZWFtT3B0aW9uc1xuICAgIDoge307XG5cbiAgLy8gUmV0dXJuIHJlc29sdmVkIG9wdGlvbnNcbiAgdHJ5IHtcbiAgICBjb25zdCB1c2VyT3B0aW9uczogUmVzb2x2ZWRVc2VyT3B0aW9ucyA9IHtcbiAgICAgIHByb2plY3RSb290LFxuICAgICAgbW9kdWxlQmFzZSxcbiAgICAgIG1vZHVsZUJhc2VQYXRoLFxuICAgICAgbW9kdWxlQmFzZVVSTCxcbiAgICAgIG1vZHVsZVJvb3RQYXRoLFxuICAgICAgcHVibGljT3JpZ2luLFxuICAgICAgYnVpbGQ6IGJ1aWxkLFxuICAgICAgZGV2OiBkZXYsXG4gICAgICB2ZXJib3NlOiBvcHRpb25zLnZlcmJvc2UgPz8gREVGQVVMVF9DT05GSUcuVkVSQk9TRSxcbiAgICAgIGF2YWlsYWJsZUVudmlyb25tZW50czogKG9wdGlvbnMgYXMgYW55KS5hdmFpbGFibGVFbnZpcm9ubWVudHMsXG4gICAgICBzdHJhdGVneTogKG9wdGlvbnMgYXMgYW55KS5zdHJhdGVneSxcbiAgICAgIG9uTWV0cmljczpcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMub25NZXRyaWNzID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IG9wdGlvbnMub25NZXRyaWNzXG4gICAgICAgICAgOiBERUZBVUxUX0NPTkZJRy5PTl9NRVRSSUNTLFxuICAgICAgb25FdmVudDpcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMub25FdmVudCA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBvcHRpb25zLm9uRXZlbnRcbiAgICAgICAgICA6IERFRkFVTFRfQ09ORklHLk9OX0VWRU5ULFxuICAgICAgUGFnZTogb3B0aW9ucy5QYWdlLFxuICAgICAgcHJvcHM6IG9wdGlvbnMucHJvcHMsXG4gICAgICBIdG1sOiBvcHRpb25zLkh0bWwgPz8gREVGQVVMVF9DT05GSUcuSFRNTCxcbiAgICAgIFJvb3Q6IG9wdGlvbnMuUm9vdCA/PyBERUZBVUxUX0NPTkZJRy5ST09ULFxuICAgICAgY29tcG9uZW50czogb3B0aW9ucy5jb21wb25lbnRzLFxuICAgICAgbm9ybWFsaXplcjogbm9ybWFsaXplcixcbiAgICAgIG1vZHVsZUlEOiBvcHRpb25zLm1vZHVsZUlELCAvLyBpZiBub3QgcHJvdmlkZWQsIHdpbGwgYmUgY3JlYXRlZCB3aGVuIGNvbmZpZyBob29rIGlzIGNhbGxlZFxuICAgICAgcGFnZUV4cG9ydE5hbWU6XG4gICAgICAgIG9wdGlvbnMucGFnZUV4cG9ydE5hbWUgPz8gKERFRkFVTFRfQ09ORklHLlBBR0VfRVhQT1JUX05BTUUgYXMgUGFnZU5hbWUpLFxuICAgICAgcHJvcHNFeHBvcnROYW1lOlxuICAgICAgICBvcHRpb25zLnByb3BzRXhwb3J0TmFtZSA/P1xuICAgICAgICAoREVGQVVMVF9DT05GSUcuUFJPUFNfRVhQT1JUX05BTUUgYXMgUHJvcHNOYW1lKSxcbiAgICAgIGh0bWxFeHBvcnROYW1lOlxuICAgICAgICBvcHRpb25zLmh0bWxFeHBvcnROYW1lID8/IChERUZBVUxUX0NPTkZJRy5IVE1MX0VYUE9SVF9OQU1FIGFzIEh0bWxOYW1lKSxcbiAgICAgIHJvb3RFeHBvcnROYW1lOlxuICAgICAgICBvcHRpb25zLnJvb3RFeHBvcnROYW1lID8/IChERUZBVUxUX0NPTkZJRy5ST09UX0VYUE9SVF9OQU1FIGFzIFJvb3ROYW1lKSxcbiAgICAgIGNzczoge1xuICAgICAgICBpbmxpbmVDc3M6IG9wdGlvbnMuY3NzPy5pbmxpbmVDc3MgPz8gREVGQVVMVF9DT05GSUcuQ1NTLmlubGluZUNzcyxcbiAgICAgICAgaW5saW5lVGhyZXNob2xkOlxuICAgICAgICAgIG9wdGlvbnMuY3NzPy5pbmxpbmVUaHJlc2hvbGQgPz8gREVGQVVMVF9DT05GSUcuQ1NTLmlubGluZVRocmVzaG9sZCxcbiAgICAgICAgaW5saW5lUGF0dGVybnM6XG4gICAgICAgICAgb3B0aW9ucy5jc3M/LmlubGluZVBhdHRlcm5zID8/IERFRkFVTFRfQ09ORklHLkNTUy5pbmxpbmVQYXR0ZXJucyxcbiAgICAgICAgbGlua1BhdHRlcm5zOlxuICAgICAgICAgIG9wdGlvbnMuY3NzPy5saW5rUGF0dGVybnMgPz8gREVGQVVMVF9DT05GSUcuQ1NTLmxpbmtQYXR0ZXJucyxcbiAgICAgIH0sXG4gICAgICBodG1sV29ya2VyUGF0aDogaHRtbFdvcmtlclBhdGgsXG4gICAgICByc2NXb3JrZXJQYXRoOiByc2NXb3JrZXJQYXRoLFxuICAgICAgbG9hZGVyUGF0aDogbG9hZGVyUGF0aCxcbiAgICAgIHJlYWN0TG9hZGVyUGF0aDpcbiAgICAgICAgb3B0aW9ucy5yZWFjdExvYWRlclBhdGggPz8gREVGQVVMVF9DT05GSUcuUkVBQ1RfTE9BREVSX1BBVEgsXG4gICAgICBjc3NMb2FkZXJQYXRoOiBvcHRpb25zLmNzc0xvYWRlclBhdGggPz8gREVGQVVMVF9DT05GSUcuQ1NTX0xPQURFUl9QQVRILFxuICAgICAgZW52TG9hZGVyUGF0aDogb3B0aW9ucy5lbnZMb2FkZXJQYXRoID8/IERFRkFVTFRfQ09ORklHLkVOVl9MT0FERVJfUEFUSCxcbiAgICAgIGNsaWVudEVudHJ5OiBvcHRpb25zLmNsaWVudEVudHJ5ID8/IERFRkFVTFRfQ09ORklHLkNMSUVOVF9FTlRSWSxcbiAgICAgIHNlcnZlckVudHJ5OiBvcHRpb25zLnNlcnZlckVudHJ5ID8/IERFRkFVTFRfQ09ORklHLlNFUlZFUl9FTlRSWSxcbiAgICAgIGF1dG9EaXNjb3ZlcjogYXV0b0Rpc2NvdmVyLFxuICAgICAgbG9hZGVyOiBsb2FkZXIsXG4gICAgICBwaXBlYWJsZVN0cmVhbU9wdGlvbnMsXG4gICAgICByc2NUaW1lb3V0OlxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5yc2NUaW1lb3V0ID09PSBcIm51bWJlclwiXG4gICAgICAgICAgPyBvcHRpb25zLnJzY1RpbWVvdXRcbiAgICAgICAgICA6IERFRkFVTFRfQ09ORklHLlJTQ19USU1FT1VULFxuICAgICAgaHRtbFRpbWVvdXQ6XG4gICAgICAgIHR5cGVvZiBvcHRpb25zLmh0bWxUaW1lb3V0ID09PSBcIm51bWJlclwiXG4gICAgICAgICAgPyBvcHRpb25zLmh0bWxUaW1lb3V0XG4gICAgICAgICAgOiBERUZBVUxUX0NPTkZJRy5IVE1MX1RJTUVPVVQsXG4gICAgICBodG1sV29ya2VyU3RhcnR1cFRpbWVvdXQ6XG4gICAgICAgIHR5cGVvZiBvcHRpb25zLmh0bWxXb3JrZXJTdGFydHVwVGltZW91dCA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgID8gb3B0aW9ucy5odG1sV29ya2VyU3RhcnR1cFRpbWVvdXRcbiAgICAgICAgICA6IERFRkFVTFRfQ09ORklHLkhUTUxfV09SS0VSX1NUQVJUVVBfVElNRU9VVCxcbiAgICAgIHJzY1dvcmtlclN0YXJ0dXBUaW1lb3V0OlxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5yc2NXb3JrZXJTdGFydHVwVGltZW91dCA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgID8gb3B0aW9ucy5yc2NXb3JrZXJTdGFydHVwVGltZW91dFxuICAgICAgICAgIDogREVGQVVMVF9DT05GSUcuUlNDX1dPUktFUl9TVEFSVFVQX1RJTUVPVVQsXG4gICAgICBmaWxlV3JpdGVUaW1lb3V0OlxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5maWxlV3JpdGVUaW1lb3V0ID09PSBcIm51bWJlclwiXG4gICAgICAgICAgPyBvcHRpb25zLmZpbGVXcml0ZVRpbWVvdXRcbiAgICAgICAgICA6IERFRkFVTFRfQ09ORklHLkZJTEVfV1JJVEVfVElNRU9VVCxcbiAgICAgIHdvcmtlclNodXRkb3duVGltZW91dDpcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMud29ya2VyU2h1dGRvd25UaW1lb3V0ID09PSBcIm51bWJlclwiXG4gICAgICAgICAgPyBvcHRpb25zLndvcmtlclNodXRkb3duVGltZW91dFxuICAgICAgICAgIDogREVGQVVMVF9DT05GSUcuV09SS0VSX1NIVVRET1dOX1RJTUVPVVQsXG4gICAgICBwYW5pY1RocmVzaG9sZDogcGFuaWNUaHJlc2hvbGQsXG4gICAgfTtcblxuICAgIC8vIFN0YXNoIHRoZSByZXNvbHZlZCBvcHRpb25zXG4gICAgc3Rhc2hVc2VyT3B0aW9ucyhlbnZJZCwgdXNlck9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwic3VjY2Vzc1wiLFxuICAgICAgdXNlck9wdGlvbnMsXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJlcnJvclwiLFxuICAgICAgZXJyb3I6IGhhbmRsZUVycm9yKHtcbiAgICAgICAgZXJyb3IsXG4gICAgICAgIGxvZ2dlcjogbG9nZ2VyLFxuICAgICAgICBwYW5pY1RocmVzaG9sZCxcbiAgICAgICAgY29udGV4dDogXCJjb25maWcocmVzb2x2ZU9wdGlvbnMpXCIsXG4gICAgICB9KSxcbiAgICB9O1xuICB9XG59O1xuXG5cbiJdLCJuYW1lcyI6WyJoYXNoIiwidmlydHVhbFBhdHRlcm4iXSwibWFwcGluZ3MiOiI7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
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.client.d.ts","sourceRoot":"","sources":["../../../plugin/dev-server/plugin.client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAMnD;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,YAqJtC,CAAC"}
1
+ {"version":3,"file":"plugin.client.d.ts","sourceRoot":"","sources":["../../../plugin/dev-server/plugin.client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAMnD;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,YA+JtC,CAAC"}
@@ -3,6 +3,7 @@
3
3
  * Copyright (c) Nico Brinkkemper
4
4
  * MIT License
5
5
  */
6
+ import { readFileSync } from 'node:fs';
6
7
  import { configureReactServer } from './configureReactServer.client.js';
7
8
  import { resolveOptions } from '../config/resolveOptions.js';
8
9
 
@@ -67,8 +68,17 @@ const vitePluginReactDevServer = function _vitePluginReactServerDevClient(option
67
68
  const moduleBase = userOptions.moduleBase || "src";
68
69
  const projectRoot = userOptions.projectRoot || server.config.root;
69
70
  const normalizedFile = file.replace(projectRoot, "").replace(/^\/+/, "");
70
- const isServerFile = normalizedFile.startsWith(moduleBase + "/") && (file.endsWith(".tsx") || file.endsWith(".ts") || file.endsWith(".jsx") || file.endsWith(".js"));
71
- server.config.logger.info(`[vite-plugin-react-server] handleHotUpdate: file=${file}, normalized=${normalizedFile}, isServerFile=${isServerFile}, hasHandler=${!!hmrHandler}`);
71
+ const isSourceFile = normalizedFile.startsWith(moduleBase + "/") && (file.endsWith(".tsx") || file.endsWith(".ts") || file.endsWith(".jsx") || file.endsWith(".js"));
72
+ const isClientFile = isSourceFile && (() => {
73
+ try {
74
+ const head = readFileSync(file, "utf-8").slice(0, 200);
75
+ return /^\s*["']use client["']/.test(head.split("\n")[0]);
76
+ } catch {
77
+ return false;
78
+ }
79
+ })();
80
+ const isServerFile = isSourceFile && !isClientFile;
81
+ server.config.logger.info(`[vite-plugin-react-server] handleHotUpdate: file=${file}, normalized=${normalizedFile}, isServerFile=${isServerFile}, isClientFile=${isClientFile}, hasHandler=${!!hmrHandler}`);
72
82
  if (isServerFile && hmrHandler) {
73
83
  isProcessingHmr = true;
74
84
  try {
@@ -119,4 +129,4 @@ const vitePluginReactDevServer = function _vitePluginReactServerDevClient(option
119
129
  };
120
130
 
121
131
  export { vitePluginReactDevServer };
122
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmNsaWVudC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL2Rldi1zZXJ2ZXIvcGx1Z2luLmNsaWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFZpdGVQbHVnaW5GbiB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgY29uZmlndXJlUmVhY3RTZXJ2ZXIgfSBmcm9tIFwiLi9jb25maWd1cmVSZWFjdFNlcnZlci5jbGllbnQuanNcIjtcbmltcG9ydCB7IHJlc29sdmVPcHRpb25zIH0gZnJvbSBcIi4uL2NvbmZpZy9yZXNvbHZlT3B0aW9ucy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBDb25maWdFbnYgfSBmcm9tIFwidml0ZVwiO1xuXG5cbi8qKlxuICogRGV2IHNlcnZlciBwbHVnaW4gZm9yIGNsaWVudCBlbnZpcm9ubWVudC5cbiAqIFVzZXMgY29uZmlndXJlU2VydmVyIGhvb2sgZm9yIHByb3BlciBkZXYgc2VydmVyIHNldHVwLlxuICovXG5leHBvcnQgY29uc3Qgdml0ZVBsdWdpblJlYWN0RGV2U2VydmVyOiBWaXRlUGx1Z2luRm4gPSBmdW5jdGlvbiBfdml0ZVBsdWdpblJlYWN0U2VydmVyRGV2Q2xpZW50KG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm9wdGlvbnMgaXMgcmVxdWlyZWRcIik7XG4gIH1cblxuICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gIH1cbiAgXG4gIGNvbnN0IHJlc29sdmVkT3B0aW9ucyA9IHJlc29sdmVPcHRpb25zKG9wdGlvbnMpO1xuICBpZiAocmVzb2x2ZWRPcHRpb25zLnR5cGUgPT09IFwiZXJyb3JcIikge1xuICAgIGlmIChyZXNvbHZlZE9wdGlvbnMuZXJyb3IgIT0gbnVsbCkge1xuICAgICAgdGhyb3cgcmVzb2x2ZWRPcHRpb25zLmVycm9yO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcmVzb2x2ZSBvcHRpb25zXCIpO1xuICB9XG4gIGNvbnN0IHVzZXJPcHRpb25zID0gcmVzb2x2ZWRPcHRpb25zLnVzZXJPcHRpb25zO1xuICBcblxuICBsZXQgY29uZmlnRW52OiBDb25maWdFbnYgfCB1bmRlZmluZWQ7XG4gIGxldCBobXJIYW5kbGVyOiB7IHJlc3RhcnQ6ICgoKSA9PiBQcm9taXNlPHZvaWQ+KSB8IG51bGw7IHNlbmRIbXJVcGRhdGU6IChmaWxlOiBzdHJpbmcsIHJvdXRlcz86IHN0cmluZ1tdKSA9PiB2b2lkIH0gfCBudWxsID0gbnVsbDtcbiAgbGV0IGlzUHJvY2Vzc2luZ0htciA9IGZhbHNlOyAvLyBQcmV2ZW50IHJlY3Vyc2l2ZSBITVIgdXBkYXRlc1xuICBsZXQgcmVzdGFydFRpbWVvdXQ6IE5vZGVKUy5UaW1lb3V0IHwgbnVsbCA9IG51bGw7IC8vIERlYm91bmNlIHdvcmtlciByZXN0YXJ0c1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogXCJ2aXRlLXBsdWdpbi1yZWFjdC1zZXJ2ZXI6ZGV2LXNlcnZlci1jbGllbnRcIixcbiAgICBhcHBseTogXCJzZXJ2ZVwiLCAvLyBPbmx5IGFwcGx5IGluIGRldiBzZXJ2ZXIgbW9kZVxuICAgIC8vIE5vdGU6IFJlbW92ZWQgYXBwbHlUb0Vudmlyb25tZW50IC0gaGFuZGxlSG90VXBkYXRlIG5lZWRzIHRvIHJ1biByZWdhcmRsZXNzXG4gICAgLy8gVGhlIHBsdWdpbiBzaG91bGQgYXBwbHkgdG8gY2xpZW50IGVudmlyb25tZW50LCBidXQgaGFuZGxlSG90VXBkYXRlIGlzIGEgZGV2IHNlcnZlciBob29rXG4gICAgLy8gdGhhdCBzaG91bGQgd29yayByZWdhcmRsZXNzIG9mIGVudmlyb25tZW50IGZpbHRlcmluZ1xuICAgIGNvbmZpZyhfY29uZmlnLCB2aXRlQ29uZmlnRW52KSB7XG4gICAgICBjb25maWdFbnYgPSB2aXRlQ29uZmlnRW52O1xuICBcbiAgICB9LFxuICAgIGNvbmZpZ3VyZVNlcnZlcihzZXJ2ZXIpIHsgICAgICBcbiAgICAgIC8vIExvZyB0aGF0IHBsdWdpbiBpcyBiZWluZyBjb25maWd1cmVkXG4gICAgICBzZXJ2ZXIuY29uZmlnLmxvZ2dlci5pbmZvKGBbdml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyXSBEZXYgc2VydmVyIHBsdWdpbiBjb25maWd1cmVkIGZvciBjbGllbnQgZW52aXJvbm1lbnRgKTtcbiAgICAgIFxuICAgICAgLy8gQ29uZmlndXJlIHRoZSBSZWFjdCBzZXJ2ZXIgZm9yIGNsaWVudCBlbnZpcm9ubWVudCAod29ya2VyLWJhc2VkKVxuICAgICAgLy8gVGhpcyB1c2VzIHRoZSBleGlzdGluZyBjb25maWd1cmVSZWFjdFNlcnZlci5jbGllbnQuanMgaW1wbGVtZW50YXRpb25cbiAgICAgIGhtckhhbmRsZXIgPSBjb25maWd1cmVSZWFjdFNlcnZlcih7XG4gICAgICAgIHNlcnZlcixcbiAgICAgICAgYXV0b0Rpc2NvdmVyZWRGaWxlczoge1xuICAgICAgICAgIHByb3BzTWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgcGFnZU1hcDogbmV3IE1hcCgpLFxuICAgICAgICAgIHJvb3RNYXA6IG5ldyBNYXAoKSxcbiAgICAgICAgICBodG1sTWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgcm91dGVNYXA6IG5ldyBNYXAoKSxcbiAgICAgICAgICB1cmxNYXA6IG5ldyBNYXAoKSxcbiAgICAgICAgICBlcnJvcnM6IFtdLFxuICAgICAgICAgIHdvcmtlclBhdGhzOiB7fSxcbiAgICAgICAgICBzZXJ2ZXJFbnRyeTogbnVsbCxcbiAgICAgICAgICBjbGllbnRFbnRyeToge30sXG4gICAgICAgICAgY2xpZW50SW5wdXRzOiB7fSxcbiAgICAgICAgICBzdGF0aWNJbnB1dHM6IHt9LFxuICAgICAgICAgIHNlcnZlcklucHV0czoge30sXG4gICAgICAgICAgLy8gc3RhdGljTWFuaWZlc3QgcmVtb3ZlZCBmcm9tIEF1dG9EaXNjb3ZlcmVkRmlsZXNcbiAgICAgICAgICBzZXJ2ZXJBY3Rpb25zOiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAgdXNlck9wdGlvbnMsXG4gICAgICAgIGNvbmZpZ0VudjogY29uZmlnRW52ISxcbiAgICAgICAgc2VydmVyTWFuaWZlc3Q6IHt9LCBcbiAgICAgICAgcmVzb2x2ZWRDb25maWc6IHNlcnZlci5jb25maWcsXG4gICAgICB9KTtcbiAgICB9LFxuICAgIGhhbmRsZUhvdFVwZGF0ZSh7IGZpbGUsIHNlcnZlciB9KSB7XG4gICAgICAvLyBQcmV2ZW50IHJlY3Vyc2l2ZSBITVIgdXBkYXRlc1xuICAgICAgaWYgKGlzUHJvY2Vzc2luZ0htcikge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBIYW5kbGUgc2VydmVyIGNvbXBvbmVudCBmaWxlIGNoYW5nZXNcbiAgICAgIGNvbnN0IG1vZHVsZUJhc2UgPSB1c2VyT3B0aW9ucy5tb2R1bGVCYXNlIHx8IFwic3JjXCI7XG4gICAgICBjb25zdCBwcm9qZWN0Um9vdCA9IHVzZXJPcHRpb25zLnByb2plY3RSb290IHx8IHNlcnZlci5jb25maWcucm9vdDtcbiAgICAgIFxuICAgICAgLy8gTm9ybWFsaXplIHBhdGhzIGZvciBjb21wYXJpc29uIChoYW5kbGUgYm90aCBhYnNvbHV0ZSBhbmQgcmVsYXRpdmUpXG4gICAgICBjb25zdCBub3JtYWxpemVkRmlsZSA9IGZpbGUucmVwbGFjZShwcm9qZWN0Um9vdCwgJycpLnJlcGxhY2UoL15cXC8rLywgJycpO1xuICAgICAgY29uc3QgaXNTZXJ2ZXJGaWxlID0gbm9ybWFsaXplZEZpbGUuc3RhcnRzV2l0aChtb2R1bGVCYXNlICsgJy8nKSAmJiBcbiAgICAgICAgKGZpbGUuZW5kc1dpdGgoJy50c3gnKSB8fCBmaWxlLmVuZHNXaXRoKCcudHMnKSB8fCBmaWxlLmVuZHNXaXRoKCcuanN4JykgfHwgZmlsZS5lbmRzV2l0aCgnLmpzJykpO1xuICAgICAgXG4gICAgICAvLyBBbHdheXMgbG9nIGZvciBkZWJ1Z2dpbmdcbiAgICAgIHNlcnZlci5jb25maWcubG9nZ2VyLmluZm8oYFt2aXRlLXBsdWdpbi1yZWFjdC1zZXJ2ZXJdIGhhbmRsZUhvdFVwZGF0ZTogZmlsZT0ke2ZpbGV9LCBub3JtYWxpemVkPSR7bm9ybWFsaXplZEZpbGV9LCBpc1NlcnZlckZpbGU9JHtpc1NlcnZlckZpbGV9LCBoYXNIYW5kbGVyPSR7ISFobXJIYW5kbGVyfWApO1xuICAgICAgXG4gICAgICBpZiAoaXNTZXJ2ZXJGaWxlICYmIGhtckhhbmRsZXIpIHtcbiAgICAgICAgaXNQcm9jZXNzaW5nSG1yID0gdHJ1ZTtcbiAgICAgICAgXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc2VydmVyLmNvbmZpZy5sb2dnZXIuaW5mbyhgW3ZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcl0gRmlsZSBjaGFuZ2VkOiAke2ZpbGV9LCBzZW5kaW5nIEhNUiB1cGRhdGUuLi5gKTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBDUklUSUNBTDogU2VuZCBITVJfVVBEQVRFIG1lc3NhZ2UgdG8gd29ya2VyIHRvIGludmFsaWRhdGUgbW9kdWxlc1xuICAgICAgICAgIC8vIFRoaXMgY2xlYXJzIGNvbXBvbmVudCBjYWNoZXMsIGJ1dCBOb2RlLmpzJ3MgRVMgbW9kdWxlIGNhY2hlIHBlcnNpc3RzXG4gICAgICAgICAgaG1ySGFuZGxlci5zZW5kSG1yVXBkYXRlKGZpbGUpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIENSSVRJQ0FMOiBTZW5kIGN1c3RvbSBITVIgbWVzc2FnZSB0byBjbGllbnQgdmlhIFdlYlNvY2tldFxuICAgICAgICAgIC8vIFNlcnZlciBjb21wb25lbnRzIGFyZW4ndCBpbiB0aGUgY2xpZW50IGJ1bmRsZSwgc28gdml0ZTpiZWZvcmVVcGRhdGUgZG9lc24ndCBmaXJlXG4gICAgICAgICAgLy8gV2UgbmVlZCB0byBtYW51YWxseSBub3RpZnkgdGhlIGNsaWVudCB0byByZWZldGNoIHRoZSBSU0Mgc3RyZWFtXG4gICAgICAgICAgc2VydmVyLndzLnNlbmQoe1xuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbScsXG4gICAgICAgICAgICBldmVudDogJ3ZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcjpzZXJ2ZXItY29tcG9uZW50LXVwZGF0ZScsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIGZpbGU6IG5vcm1hbGl6ZWRGaWxlLFxuICAgICAgICAgICAgICBwYXRoOiBmaWxlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBDUklUSUNBTDogTm9kZS5qcyBjYWNoZXMgRVMgbW9kdWxlcywgc28gd2UgbmVlZCB0byByZXN0YXJ0IHRoZSB3b3JrZXJcbiAgICAgICAgICAvLyB0byBjbGVhciB0aGUgbW9kdWxlIGNhY2hlLiBEZWJvdW5jZSByZXN0YXJ0cyB0byBwcmV2ZW50IHJlY3Vyc2lvbi5cbiAgICAgICAgICBpZiAoaG1ySGFuZGxlci5yZXN0YXJ0KSB7XG4gICAgICAgICAgICAvLyBDbGVhciBhbnkgcGVuZGluZyByZXN0YXJ0XG4gICAgICAgICAgICBpZiAocmVzdGFydFRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlc3RhcnRUaW1lb3V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gRGVib3VuY2Ugd29ya2VyIHJlc3RhcnQgdG8gcHJldmVudCByZWN1cnNpb25cbiAgICAgICAgICAgIC8vIFdhaXQgNTAwbXMgYWZ0ZXIgdGhlIGxhc3QgZmlsZSBjaGFuZ2UgYmVmb3JlIHJlc3RhcnRpbmdcbiAgICAgICAgICAgIHJlc3RhcnRUaW1lb3V0ID0gc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgc2VydmVyLmNvbmZpZy5sb2dnZXIuaW5mbyhgW3ZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcl0gUmVzdGFydGluZyB3b3JrZXIgdG8gY2xlYXIgTm9kZS5qcyBtb2R1bGUgY2FjaGUuLi5gKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBobXJIYW5kbGVyIS5yZXN0YXJ0ISgpO1xuICAgICAgICAgICAgICAgIHNlcnZlci5jb25maWcubG9nZ2VyLmluZm8oYFt2aXRlLXBsdWdpbi1yZWFjdC1zZXJ2ZXJdIFdvcmtlciByZXN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5YCk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgc2VydmVyLmNvbmZpZy5sb2dnZXIuZXJyb3IoYFt2aXRlLXBsdWdpbi1yZWFjdC1zZXJ2ZXJdIEZhaWxlZCB0byByZXN0YXJ0IHdvcmtlcjogJHtlcnJvcn1gKTtcbiAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICByZXN0YXJ0VGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICAgICAgLy8gUmVzZXQgZmxhZyBhZnRlciByZXN0YXJ0IGNvbXBsZXRlc1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaXNQcm9jZXNzaW5nSG1yID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgNTAwKTsgLy8gNTAwbXMgZGVib3VuY2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTm8gcmVzdGFydCBmdW5jdGlvbiBhdmFpbGFibGUgeWV0IC0gd29ya2VyIGhhc24ndCBiZWVuIGNyZWF0ZWRcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgZXhwZWN0ZWQgaWYgaGFuZGxlSG90VXBkYXRlIGZpcmVzIGJlZm9yZSB0aGUgZmlyc3QgcmVxdWVzdFxuICAgICAgICAgICAgc2VydmVyLmNvbmZpZy5sb2dnZXIud2FybihgW3ZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcl0gUmVzdGFydCBmdW5jdGlvbiBub3QgYXZhaWxhYmxlIHlldCAtIHdvcmtlciB3aWxsIGJlIGNyZWF0ZWQgb24gbmV4dCByZXF1ZXN0YCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgaXNQcm9jZXNzaW5nSG1yID0gZmFsc2U7XG4gICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBzZXJ2ZXIuY29uZmlnLmxvZ2dlci5lcnJvcihgW3ZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcl0gRXJyb3IgaGFuZGxpbmcgSE1SIHVwZGF0ZTogJHtlcnJvcn1gKTtcbiAgICAgICAgICBpc1Byb2Nlc3NpbmdIbXIgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1NlcnZlckZpbGUgJiYgIWhtckhhbmRsZXIpIHtcbiAgICAgICAgc2VydmVyLmNvbmZpZy5sb2dnZXIud2FybihgW3ZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcl0gU2VydmVyIGZpbGUgY2hhbmdlZCBidXQgSE1SIGhhbmRsZXIgbm90IGF2YWlsYWJsZSB5ZXQ6ICR7ZmlsZX1gKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gUmV0dXJuIHVuZGVmaW5lZCB0byBhbGxvdyBvdGhlciBwbHVnaW5zIHRvIGhhbmRsZSB0aGUgdXBkYXRlXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0sXG4gIH07XG59O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBVWEsTUFBQSx3QkFBQSxHQUF5QyxTQUFTLCtCQUFBLENBQWdDLE9BQVMsRUFBQTtBQUN0RyxFQUFBLElBQUksV0FBVyxJQUFNLEVBQUE7QUFDbkIsSUFBTSxNQUFBLElBQUksTUFBTSxxQkFBcUIsQ0FBQTtBQUFBO0FBR3ZDLEVBQUEsSUFBSSxRQUFRLE9BQVMsRUFBQTtBQUdyQixFQUFNLE1BQUEsZUFBQSxHQUFrQixlQUFlLE9BQU8sQ0FBQTtBQUM5QyxFQUFJLElBQUEsZUFBQSxDQUFnQixTQUFTLE9BQVMsRUFBQTtBQUNwQyxJQUFJLElBQUEsZUFBQSxDQUFn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
132
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmNsaWVudC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL2Rldi1zZXJ2ZXIvcGx1Z2luLmNsaWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHR5cGUgeyBWaXRlUGx1Z2luRm4gfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IGNvbmZpZ3VyZVJlYWN0U2VydmVyIH0gZnJvbSBcIi4vY29uZmlndXJlUmVhY3RTZXJ2ZXIuY2xpZW50LmpzXCI7XG5pbXBvcnQgeyByZXNvbHZlT3B0aW9ucyB9IGZyb20gXCIuLi9jb25maWcvcmVzb2x2ZU9wdGlvbnMuanNcIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlnRW52IH0gZnJvbSBcInZpdGVcIjtcblxuXG4vKipcbiAqIERldiBzZXJ2ZXIgcGx1Z2luIGZvciBjbGllbnQgZW52aXJvbm1lbnQuXG4gKiBVc2VzIGNvbmZpZ3VyZVNlcnZlciBob29rIGZvciBwcm9wZXIgZGV2IHNlcnZlciBzZXR1cC5cbiAqL1xuZXhwb3J0IGNvbnN0IHZpdGVQbHVnaW5SZWFjdERldlNlcnZlcjogVml0ZVBsdWdpbkZuID0gZnVuY3Rpb24gX3ZpdGVQbHVnaW5SZWFjdFNlcnZlckRldkNsaWVudChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJvcHRpb25zIGlzIHJlcXVpcmVkXCIpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICB9XG4gIFxuICBjb25zdCByZXNvbHZlZE9wdGlvbnMgPSByZXNvbHZlT3B0aW9ucyhvcHRpb25zKTtcbiAgaWYgKHJlc29sdmVkT3B0aW9ucy50eXBlID09PSBcImVycm9yXCIpIHtcbiAgICBpZiAocmVzb2x2ZWRPcHRpb25zLmVycm9yICE9IG51bGwpIHtcbiAgICAgIHRocm93IHJlc29sdmVkT3B0aW9ucy5lcnJvcjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIHJlc29sdmUgb3B0aW9uc1wiKTtcbiAgfVxuICBjb25zdCB1c2VyT3B0aW9ucyA9IHJlc29sdmVkT3B0aW9ucy51c2VyT3B0aW9ucztcbiAgXG5cbiAgbGV0IGNvbmZpZ0VudjogQ29uZmlnRW52IHwgdW5kZWZpbmVkO1xuICBsZXQgaG1ySGFuZGxlcjogeyByZXN0YXJ0OiAoKCkgPT4gUHJvbWlzZTx2b2lkPikgfCBudWxsOyBzZW5kSG1yVXBkYXRlOiAoZmlsZTogc3RyaW5nLCByb3V0ZXM/OiBzdHJpbmdbXSkgPT4gdm9pZCB9IHwgbnVsbCA9IG51bGw7XG4gIGxldCBpc1Byb2Nlc3NpbmdIbXIgPSBmYWxzZTsgLy8gUHJldmVudCByZWN1cnNpdmUgSE1SIHVwZGF0ZXNcbiAgbGV0IHJlc3RhcnRUaW1lb3V0OiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBudWxsOyAvLyBEZWJvdW5jZSB3b3JrZXIgcmVzdGFydHNcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IFwidml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyOmRldi1zZXJ2ZXItY2xpZW50XCIsXG4gICAgYXBwbHk6IFwic2VydmVcIiwgLy8gT25seSBhcHBseSBpbiBkZXYgc2VydmVyIG1vZGVcbiAgICAvLyBOb3RlOiBSZW1vdmVkIGFwcGx5VG9FbnZpcm9ubWVudCAtIGhhbmRsZUhvdFVwZGF0ZSBuZWVkcyB0byBydW4gcmVnYXJkbGVzc1xuICAgIC8vIFRoZSBwbHVnaW4gc2hvdWxkIGFwcGx5IHRvIGNsaWVudCBlbnZpcm9ubWVudCwgYnV0IGhhbmRsZUhvdFVwZGF0ZSBpcyBhIGRldiBzZXJ2ZXIgaG9va1xuICAgIC8vIHRoYXQgc2hvdWxkIHdvcmsgcmVnYXJkbGVzcyBvZiBlbnZpcm9ubWVudCBmaWx0ZXJpbmdcbiAgICBjb25maWcoX2NvbmZpZywgdml0ZUNvbmZpZ0Vudikge1xuICAgICAgY29uZmlnRW52ID0gdml0ZUNvbmZpZ0VudjtcbiAgXG4gICAgfSxcbiAgICBjb25maWd1cmVTZXJ2ZXIoc2VydmVyKSB7ICAgICAgXG4gICAgICAvLyBMb2cgdGhhdCBwbHVnaW4gaXMgYmVpbmcgY29uZmlndXJlZFxuICAgICAgc2VydmVyLmNvbmZpZy5sb2dnZXIuaW5mbyhgW3ZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcl0gRGV2IHNlcnZlciBwbHVnaW4gY29uZmlndXJlZCBmb3IgY2xpZW50IGVudmlyb25tZW50YCk7XG4gICAgICBcbiAgICAgIC8vIENvbmZpZ3VyZSB0aGUgUmVhY3Qgc2VydmVyIGZvciBjbGllbnQgZW52aXJvbm1lbnQgKHdvcmtlci1iYXNlZClcbiAgICAgIC8vIFRoaXMgdXNlcyB0aGUgZXhpc3RpbmcgY29uZmlndXJlUmVhY3RTZXJ2ZXIuY2xpZW50LmpzIGltcGxlbWVudGF0aW9uXG4gICAgICBobXJIYW5kbGVyID0gY29uZmlndXJlUmVhY3RTZXJ2ZXIoe1xuICAgICAgICBzZXJ2ZXIsXG4gICAgICAgIGF1dG9EaXNjb3ZlcmVkRmlsZXM6IHtcbiAgICAgICAgICBwcm9wc01hcDogbmV3IE1hcCgpLFxuICAgICAgICAgIHBhZ2VNYXA6IG5ldyBNYXAoKSxcbiAgICAgICAgICByb290TWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgaHRtbE1hcDogbmV3IE1hcCgpLFxuICAgICAgICAgIHJvdXRlTWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgdXJsTWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgZXJyb3JzOiBbXSxcbiAgICAgICAgICB3b3JrZXJQYXRoczoge30sXG4gICAgICAgICAgc2VydmVyRW50cnk6IG51bGwsXG4gICAgICAgICAgY2xpZW50RW50cnk6IHt9LFxuICAgICAgICAgIGNsaWVudElucHV0czoge30sXG4gICAgICAgICAgc3RhdGljSW5wdXRzOiB7fSxcbiAgICAgICAgICBzZXJ2ZXJJbnB1dHM6IHt9LFxuICAgICAgICAgIC8vIHN0YXRpY01hbmlmZXN0IHJlbW92ZWQgZnJvbSBBdXRvRGlzY292ZXJlZEZpbGVzXG4gICAgICAgICAgc2VydmVyQWN0aW9uczoge30sXG4gICAgICAgIH0sXG4gICAgICAgIHVzZXJPcHRpb25zLFxuICAgICAgICBjb25maWdFbnY6IGNvbmZpZ0VudiEsXG4gICAgICAgIHNlcnZlck1hbmlmZXN0OiB7fSwgXG4gICAgICAgIHJlc29sdmVkQ29uZmlnOiBzZXJ2ZXIuY29uZmlnLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBoYW5kbGVIb3RVcGRhdGUoeyBmaWxlLCBzZXJ2ZXIgfSkge1xuICAgICAgLy8gUHJldmVudCByZWN1cnNpdmUgSE1SIHVwZGF0ZXNcbiAgICAgIGlmIChpc1Byb2Nlc3NpbmdIbXIpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSGFuZGxlIHNlcnZlciBjb21wb25lbnQgZmlsZSBjaGFuZ2VzXG4gICAgICBjb25zdCBtb2R1bGVCYXNlID0gdXNlck9wdGlvbnMubW9kdWxlQmFzZSB8fCBcInNyY1wiO1xuICAgICAgY29uc3QgcHJvamVjdFJvb3QgPSB1c2VyT3B0aW9ucy5wcm9qZWN0Um9vdCB8fCBzZXJ2ZXIuY29uZmlnLnJvb3Q7XG4gICAgICBcbiAgICAgIC8vIE5vcm1hbGl6ZSBwYXRocyBmb3IgY29tcGFyaXNvbiAoaGFuZGxlIGJvdGggYWJzb2x1dGUgYW5kIHJlbGF0aXZlKVxuICAgICAgY29uc3Qgbm9ybWFsaXplZEZpbGUgPSBmaWxlLnJlcGxhY2UocHJvamVjdFJvb3QsICcnKS5yZXBsYWNlKC9eXFwvKy8sICcnKTtcbiAgICAgIGNvbnN0IGlzU291cmNlRmlsZSA9IG5vcm1hbGl6ZWRGaWxlLnN0YXJ0c1dpdGgobW9kdWxlQmFzZSArICcvJykgJiYgXG4gICAgICAgIChmaWxlLmVuZHNXaXRoKCcudHN4JykgfHwgZmlsZS5lbmRzV2l0aCgnLnRzJykgfHwgZmlsZS5lbmRzV2l0aCgnLmpzeCcpIHx8IGZpbGUuZW5kc1dpdGgoJy5qcycpKTtcbiAgICAgIFxuICAgICAgLy8gU2tpcCBjbGllbnQgY29tcG9uZW50cyDigJQgbGV0IEB2aXRlanMvcGx1Z2luLXJlYWN0IGhhbmRsZSB0aGVtIHdpdGggRmFzdCBSZWZyZXNoXG4gICAgICBjb25zdCBpc0NsaWVudEZpbGUgPSBpc1NvdXJjZUZpbGUgJiYgKCgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBoZWFkID0gcmVhZEZpbGVTeW5jKGZpbGUsICd1dGYtOCcpLnNsaWNlKDAsIDIwMCk7XG4gICAgICAgICAgcmV0dXJuIC9eXFxzKltcIidddXNlIGNsaWVudFtcIiddLy50ZXN0KGhlYWQuc3BsaXQoJ1xcbicpWzBdKTtcbiAgICAgICAgfSBjYXRjaCB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgfSkoKTtcbiAgICAgIFxuICAgICAgY29uc3QgaXNTZXJ2ZXJGaWxlID0gaXNTb3VyY2VGaWxlICYmICFpc0NsaWVudEZpbGU7XG4gICAgICBcbiAgICAgIC8vIEFsd2F5cyBsb2cgZm9yIGRlYnVnZ2luZ1xuICAgICAgc2VydmVyLmNvbmZpZy5sb2dnZXIuaW5mbyhgW3ZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcl0gaGFuZGxlSG90VXBkYXRlOiBmaWxlPSR7ZmlsZX0sIG5vcm1hbGl6ZWQ9JHtub3JtYWxpemVkRmlsZX0sIGlzU2VydmVyRmlsZT0ke2lzU2VydmVyRmlsZX0sIGlzQ2xpZW50RmlsZT0ke2lzQ2xpZW50RmlsZX0sIGhhc0hhbmRsZXI9JHshIWhtckhhbmRsZXJ9YCk7XG4gICAgICBcbiAgICAgIGlmIChpc1NlcnZlckZpbGUgJiYgaG1ySGFuZGxlcikge1xuICAgICAgICBpc1Byb2Nlc3NpbmdIbXIgPSB0cnVlO1xuICAgICAgICBcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzZXJ2ZXIuY29uZmlnLmxvZ2dlci5pbmZvKGBbdml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyXSBGaWxlIGNoYW5nZWQ6ICR7ZmlsZX0sIHNlbmRpbmcgSE1SIHVwZGF0ZS4uLmApO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIENSSVRJQ0FMOiBTZW5kIEhNUl9VUERBVEUgbWVzc2FnZSB0byB3b3JrZXIgdG8gaW52YWxpZGF0ZSBtb2R1bGVzXG4gICAgICAgICAgLy8gVGhpcyBjbGVhcnMgY29tcG9uZW50IGNhY2hlcywgYnV0IE5vZGUuanMncyBFUyBtb2R1bGUgY2FjaGUgcGVyc2lzdHNcbiAgICAgICAgICBobXJIYW5kbGVyLnNlbmRIbXJVcGRhdGUoZmlsZSk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQ1JJVElDQUw6IFNlbmQgY3VzdG9tIEhNUiBtZXNzYWdlIHRvIGNsaWVudCB2aWEgV2ViU29ja2V0XG4gICAgICAgICAgLy8gU2VydmVyIGNvbXBvbmVudHMgYXJlbid0IGluIHRoZSBjbGllbnQgYnVuZGxlLCBzbyB2aXRlOmJlZm9yZVVwZGF0ZSBkb2Vzbid0IGZpcmVcbiAgICAgICAgICAvLyBXZSBuZWVkIHRvIG1hbnVhbGx5IG5vdGlmeSB0aGUgY2xpZW50IHRvIHJlZmV0Y2ggdGhlIFJTQyBzdHJlYW1cbiAgICAgICAgICBzZXJ2ZXIud3Muc2VuZCh7XG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tJyxcbiAgICAgICAgICAgIGV2ZW50OiAndml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyOnNlcnZlci1jb21wb25lbnQtdXBkYXRlJyxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgZmlsZTogbm9ybWFsaXplZEZpbGUsXG4gICAgICAgICAgICAgIHBhdGg6IGZpbGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIENSSVRJQ0FMOiBOb2RlLmpzIGNhY2hlcyBFUyBtb2R1bGVzLCBzbyB3ZSBuZWVkIHRvIHJlc3RhcnQgdGhlIHdvcmtlclxuICAgICAgICAgIC8vIHRvIGNsZWFyIHRoZSBtb2R1bGUgY2FjaGUuIERlYm91bmNlIHJlc3RhcnRzIHRvIHByZXZlbnQgcmVjdXJzaW9uLlxuICAgICAgICAgIGlmIChobXJIYW5kbGVyLnJlc3RhcnQpIHtcbiAgICAgICAgICAgIC8vIENsZWFyIGFueSBwZW5kaW5nIHJlc3RhcnRcbiAgICAgICAgICAgIGlmIChyZXN0YXJ0VGltZW91dCkge1xuICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVzdGFydFRpbWVvdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBEZWJvdW5jZSB3b3JrZXIgcmVzdGFydCB0byBwcmV2ZW50IHJlY3Vyc2lvblxuICAgICAgICAgICAgLy8gV2FpdCA1MDBtcyBhZnRlciB0aGUgbGFzdCBmaWxlIGNoYW5nZSBiZWZvcmUgcmVzdGFydGluZ1xuICAgICAgICAgICAgcmVzdGFydFRpbWVvdXQgPSBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXIuY29uZmlnLmxvZ2dlci5pbmZvKGBbdml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyXSBSZXN0YXJ0aW5nIHdvcmtlciB0byBjbGVhciBOb2RlLmpzIG1vZHVsZSBjYWNoZS4uLmApO1xuICAgICAgICAgICAgICAgIGF3YWl0IGhtckhhbmRsZXIhLnJlc3RhcnQhKCk7XG4gICAgICAgICAgICAgICAgc2VydmVyLmNvbmZpZy5sb2dnZXIuaW5mbyhgW3ZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcl0gV29ya2VyIHJlc3RhcnRlZCBzdWNjZXNzZnVsbHlgKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXIuY29uZmlnLmxvZ2dlci5lcnJvcihgW3ZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcl0gRmFpbGVkIHRvIHJlc3RhcnQgd29ya2VyOiAke2Vycm9yfWApO1xuICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHJlc3RhcnRUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAvLyBSZXNldCBmbGFnIGFmdGVyIHJlc3RhcnQgY29tcGxldGVzXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpc1Byb2Nlc3NpbmdIbXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCA1MDApOyAvLyA1MDBtcyBkZWJvdW5jZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBObyByZXN0YXJ0IGZ1bmN0aW9uIGF2YWlsYWJsZSB5ZXQgLSB3b3JrZXIgaGFzbid0IGJlZW4gY3JlYXRlZFxuICAgICAgICAgICAgLy8gVGhpcyBpcyBleHBlY3RlZCBpZiBoYW5kbGVIb3RVcGRhdGUgZmlyZXMgYmVmb3JlIHRoZSBmaXJzdCByZXF1ZXN0XG4gICAgICAgICAgICBzZXJ2ZXIuY29uZmlnLmxvZ2dlci53YXJuKGBbdml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyXSBSZXN0YXJ0IGZ1bmN0aW9uIG5vdCBhdmFpbGFibGUgeWV0IC0gd29ya2VyIHdpbGwgYmUgY3JlYXRlZCBvbiBuZXh0IHJlcXVlc3RgKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBpc1Byb2Nlc3NpbmdIbXIgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHNlcnZlci5jb25maWcubG9nZ2VyLmVycm9yKGBbdml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyXSBFcnJvciBoYW5kbGluZyBITVIgdXBkYXRlOiAke2Vycm9yfWApO1xuICAgICAgICAgIGlzUHJvY2Vzc2luZ0htciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzU2VydmVyRmlsZSAmJiAhaG1ySGFuZGxlcikge1xuICAgICAgICBzZXJ2ZXIuY29uZmlnLmxvZ2dlci53YXJuKGBbdml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyXSBTZXJ2ZXIgZmlsZSBjaGFuZ2VkIGJ1dCBITVIgaGFuZGxlciBub3QgYXZhaWxhYmxlIHlldDogJHtmaWxlfWApO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBSZXR1cm4gdW5kZWZpbmVkIHRvIGFsbG93IG90aGVyIHBsdWdpbnMgdG8gaGFuZGxlIHRoZSB1cGRhdGVcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSxcbiAgfTtcbn07XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBV2EsTUFBQSx3QkFBQSxHQUF5QyxTQUFTLCtCQUFBLENBQWdDLE9BQVMsRUFBQTtBQUN0RyxFQUFBLElBQUksV0FBVyxJQUFNLEVBQUE7QUFDbkIsSUFBTSxNQUFBLElBQUksTUFBTSxxQkFBcUIsQ0FBQTtBQUFBO0FBR3ZDLEVBQUEsSUFBSSxRQUFRLE9BQVMsRUFBQTtBQUdyQixFQUFNLE1BQUEsZUFBQSxHQUFrQixlQUFlLE9BQU8sQ0FBQTtBQUM5QyxFQUFJLElBQUEsZUFBQSxDQUFnQixTQUFTLE9BQVMsRUFBQTtBQUNwQyxJQUFJLElBQUEsZUFBQSxDQUFnQixTQUFTLElBQU0sRUFBQTtBQUNqQyxNQUFBLE1BQU0sZUFBZ0IsQ0FBQSxLQUFBO0FBQUE7QUFFeEIsSUFBTSxNQUFBLElBQUksTUFBTSwyQkFBMkIsQ0FBQTtBQUFBO0FBRTdDLEVBQUEsTUFBTSxjQUFjLGVBQWdCLENBQUEsV0FBQTtBQUdwQyxFQUFJLElBQUEsU0FBQTtBQUNKLEVBQUEsSUFBSSxVQUF5SCxHQUFBLElBQUE7QUFDN0gsRUFBQSxJQUFJLGVBQWtCLEdBQUEsS0FBQTtBQUN0QixFQUFBLElBQUksY0FBd0MsR0FBQSxJQUFBO0FBRTVDLEVBQU8sT0FBQTtBQUFBLElBQ0wsSUFBTSxFQUFBLDRDQUFBO0FBQUEsSUFDTixLQUFPLEVBQUEsT0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFJUCxNQUFBLENBQU8sU0FBUyxhQUFlLEVBQUE7QUFDN0IsTUFBWSxTQUFBLEdBQUEsYUFBQTtBQUFB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
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.server.d.ts","sourceRoot":"","sources":["../../../plugin/dev-server/plugin.server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAG1D,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,MAAM,CAAC;AAElD;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GAA4C,SAAS,mBAAmB,KAAG,MAAM,EA2HrH,CAAC"}
1
+ {"version":3,"file":"plugin.server.d.ts","sourceRoot":"","sources":["../../../plugin/dev-server/plugin.server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAG1D,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,MAAM,CAAC;AAGlD;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GAA4C,SAAS,mBAAmB,KAAG,MAAM,EA6LrH,CAAC"}