@dollhousemcp/mcp-server 2.0.9 → 2.0.10

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 (37) hide show
  1. package/dist/elements/ensembles/Ensemble.d.ts +9 -0
  2. package/dist/elements/ensembles/Ensemble.d.ts.map +1 -1
  3. package/dist/elements/ensembles/Ensemble.js +71 -4
  4. package/dist/generated/version.d.ts +2 -2
  5. package/dist/generated/version.d.ts.map +1 -1
  6. package/dist/generated/version.js +3 -3
  7. package/dist/handlers/mcp-aql/IntrospectionResolver.d.ts +57 -0
  8. package/dist/handlers/mcp-aql/IntrospectionResolver.d.ts.map +1 -1
  9. package/dist/handlers/mcp-aql/IntrospectionResolver.js +181 -2
  10. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +8 -0
  11. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
  12. package/dist/handlers/mcp-aql/MCPAQLHandler.js +32 -6
  13. package/dist/handlers/mcp-aql/OperationRouter.d.ts.map +1 -1
  14. package/dist/handlers/mcp-aql/OperationRouter.js +6 -1
  15. package/dist/handlers/mcp-aql/OperationSchema.d.ts +7 -0
  16. package/dist/handlers/mcp-aql/OperationSchema.d.ts.map +1 -1
  17. package/dist/handlers/mcp-aql/OperationSchema.js +120 -8
  18. package/dist/handlers/mcp-aql/SchemaDispatcher.d.ts.map +1 -1
  19. package/dist/handlers/mcp-aql/SchemaDispatcher.js +11 -1
  20. package/dist/handlers/mcp-aql/types.d.ts.map +1 -1
  21. package/dist/handlers/mcp-aql/types.js +11 -1
  22. package/dist/index.js +19 -1
  23. package/dist/server/tools/MCPAQLTools.d.ts.map +1 -1
  24. package/dist/server/tools/MCPAQLTools.js +7 -1
  25. package/dist/web/public/app.js +118 -7
  26. package/dist/web/public/dollhouse-logo.png +0 -0
  27. package/dist/web/public/index.html +5 -2
  28. package/dist/web/public/logs.js +56 -1
  29. package/dist/web/public/metrics.js +32 -1
  30. package/dist/web/public/setup.css +79 -0
  31. package/dist/web/public/setup.js +90 -0
  32. package/dist/web/public/styles.css +3 -1
  33. package/dist/web/server.d.ts +1 -1
  34. package/dist/web/server.d.ts.map +1 -1
  35. package/dist/web/server.js +14 -3
  36. package/package.json +2 -2
  37. package/server.json +2 -2
@@ -222,6 +222,7 @@ export async function startWebServer(options) {
222
222
  const fallbackUrl = `http://127.0.0.1:${port}`;
223
223
  logger.info(`[WebUI] Management console running at ${url}`);
224
224
  console.error(`\n DollhouseMCP Management Console\n ${url}\n ${fallbackUrl} (fallback)\n`);
225
+ console.error(` Type "q" or "quit" to exit.\n`);
225
226
  if (options.openBrowser) {
226
227
  openInBrowser(url);
227
228
  }
@@ -257,10 +258,20 @@ export async function startWebServer(options) {
257
258
  * @param port - Port to bind to (default: 3939)
258
259
  * @returns Result with URL, server status, and browser open status
259
260
  */
260
- export async function openPortfolioBrowser(portfolioDir, port, mcpAqlHandler, tab) {
261
+ export async function openPortfolioBrowser(portfolioDir, port, mcpAqlHandler, tab, urlParams) {
261
262
  const targetPort = port || DEFAULT_PORT;
262
263
  const baseUrl = `http://${CONSOLE_HOST}:${targetPort}`;
263
- const url = tab ? `${baseUrl}/#${tab}` : baseUrl;
264
+ // Build URL with optional tab hash and query parameters
265
+ // Format: http://host:port/#tab?key=value&key=value
266
+ let url = baseUrl;
267
+ if (tab) {
268
+ const qs = urlParams ? new URLSearchParams(urlParams).toString() : '';
269
+ url = `${baseUrl}/#${tab}${qs ? '?' + qs : ''}`;
270
+ }
271
+ else if (urlParams && Object.keys(urlParams).length > 0) {
272
+ const qs = new URLSearchParams(urlParams).toString();
273
+ url = `${baseUrl}/#portfolio?${qs}`;
274
+ }
264
275
  const alreadyRunning = serverRunning;
265
276
  if (!serverRunning) {
266
277
  await startWebServer({
@@ -278,4 +289,4 @@ export async function openPortfolioBrowser(portfolioDir, port, mcpAqlHandler, ta
278
289
  ...(browserResult.error ? { warning: `Browser could not be opened automatically: ${browserResult.error}. Open ${url} manually.` } : {}),
279
290
  };
280
291
  }
281
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dlYi9zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbkMsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQXdCLE1BQU0sdUJBQXVCLENBQUM7QUFDOUUsT0FBTyxFQUFFLG1CQUFtQixFQUE0QixNQUFNLDJCQUEyQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUs1QyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDMUIsTUFBTSxZQUFZLEdBQUcscUJBQXFCLENBQUM7QUFDM0MsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzNELG1H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Q0FBQztLQUN4SSxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRG9sbGhvdXNlTUNQIFdlYiBVSSBTZXJ2ZXJcbiAqXG4gKiBMaWdodHdlaWdodCBFeHByZXNzIHNlcnZlciBmb3IgYnJvd3NpbmcgcG9ydGZvbGlvIGVsZW1lbnRzIGluIGEgYnJvd3Nlci5cbiAqIEJvdW5kIHRvIDEyNy4wLjAuMSBvbmx5IChsb2NhbGhvc3QpLiBSZWFkLW9ubHkgZm9yIFYxLlxuICpcbiAqIENhbiBiZSBzdGFydGVkIHN0YW5kYWxvbmUgKGAtLXdlYmAgZmxhZykgb3IgZnJvbSB3aXRoaW4gdGhlIE1DUCBzZXJ2ZXJcbiAqIHByb2Nlc3MgdmlhIGBvcGVuUG9ydGZvbGlvQnJvd3NlcigpYC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9Eb2xsaG91c2VNQ1AvbWNwLXNlcnZlci12Mi1yZWZhY3Rvci9pc3N1ZXMvNzA0XG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9Eb2xsaG91c2VNQ1AvbWNwLXNlcnZlci12Mi1yZWZhY3Rvci9pc3N1ZXMvNzc0XG4gKi9cblxuaW1wb3J0IGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBqb2luLCBkaXJuYW1lLCBleHRuYW1lIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgeyBleGVjRmlsZSB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBwbGF0Zm9ybSB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHsgbWtkaXIsIHJlYWRkaXIgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGNyZWF0ZUFwaVJvdXRlcywgY3JlYXRlR2F0ZXdheUFwaVJvdXRlcyB9IGZyb20gJy4vcm91dGVzLmpzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ1JvdXRlcywgdHlwZSBMb2dSb3V0ZXNSZXN1bHQgfSBmcm9tICcuL3JvdXRlcy9sb2dSb3V0ZXMuanMnO1xuaW1wb3J0IHsgY3JlYXRlTWV0cmljc1JvdXRlcywgdHlwZSBNZXRyaWNzUm91dGVzUmVzdWx0IH0gZnJvbSAnLi9yb3V0ZXMvbWV0cmljc1JvdXRlcy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVIZWFsdGhSb3V0ZXMgfSBmcm9tICcuL3JvdXRlcy9oZWFsdGhSb3V0ZXMuanMnO1xuaW1wb3J0IHsgY3JlYXRlU2V0dXBSb3V0ZXMgfSBmcm9tICcuL3JvdXRlcy9zZXR1cFJvdXRlcy5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBNQ1BBUUxIYW5kbGVyIH0gZnJvbSAnLi4vaGFuZGxlcnMvbWNwLWFxbC9NQ1BBUUxIYW5kbGVyLmpzJztcbmltcG9ydCB0eXBlIHsgTWVtb3J5TG9nU2luayB9IGZyb20gJy4uL2xvZ2dpbmcvc2lua3MvTWVtb3J5TG9nU2luay5qcyc7XG5pbXBvcnQgdHlwZSB7IE1lbW9yeU1ldHJpY3NTaW5rIH0gZnJvbSAnLi4vbWV0cmljcy9zaW5rcy9NZW1vcnlNZXRyaWNzU2luay5qcyc7XG5cbmNvbnN0IF9fZGlybmFtZSA9IGRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTtcbmNvbnN0IERFRkFVTFRfUE9SVCA9IDM5Mzk7XG5jb25zdCBDT05TT0xFX0hPU1QgPSAnZG9sbGhvdXNlLmxvY2FsaG9zdCc7XG5jb25zdCBBTExPV0VEX1BBR0VfRVhURU5TSU9OUyA9IG5ldyBTZXQoWycuaHRtbCcsICcuaHRtJ10pO1xuLyoqIE1heCBKU09OIGJvZHkgZm9yIHNldHVwIHJvdXRlcyAoaW5zdGFsbC9vcGVuLWNvbmZpZykuIEluZ2VzdCByb3V0ZXMgdXNlIHRoZWlyIG93biAxbWIgbGltaXQuICovXG5jb25zdCBTRVRVUF9CT0RZX0xJTUlUID0gJzFrYic7XG5cbi8qKiBUcmFjayB3aGV0aGVyIHRoZSB3ZWIgc2VydmVyIGlzIGFscmVhZHkgcnVubmluZyBpbi1wcm9jZXNzLiAqL1xubGV0IHNlcnZlclJ1bm5pbmcgPSBmYWxzZTtcbmxldCBzZXJ2ZXJQb3J0ID0gREVGQVVMVF9QT1JUO1xuXG4vKiogQ2hlY2sgd2hldGhlciB0aGUgd2ViIHNlcnZlciBoYXMgYmVlbiBzdGFydGVkIGluIHRoaXMgcHJvY2Vzcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1dlYlNlcnZlclJ1bm5pbmcoKTogYm9vbGVhbiB7XG4gIHJldHVybiBzZXJ2ZXJSdW5uaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHN0YXJ0aW5nIHRoZSB3ZWIgc2VydmVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYlNlcnZlck9wdGlvbnMge1xuICAvKiogUG9ydCB0byBiaW5kIHRvIChkZWZhdWx0OiAzOTM5KSAqL1xuICBwb3J0PzogbnVtYmVyO1xuICAvKiogUGF0aCB0byB0aGUgcG9ydGZvbGlvIGRpcmVjdG9yeSAoZS5nLiwgfi8uZG9sbGhvdXNlL3BvcnRmb2xpbykgKi9cbiAgcG9ydGZvbGlvRGlyOiBzdHJpbmc7XG4gIC8qKiBPcGVuIHRoZSBicm93c2VyIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgc3RhcnRpbmcgKGRlZmF1bHQ6IGZhbHNlKSAqL1xuICBvcGVuQnJvd3Nlcj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBNQ1BBUUxIYW5kbGVyIGZvciByb3V0aW5nIHRocm91Z2ggdGhlIE1DUC1BUUwgcGlwZWxpbmUuXG4gICAqIFdoZW4gcHJvdmlkZWQsIEFQSSByb3V0ZXMgdXNlIHRoZSBnYXRld2F5ICh2YWxpZGF0ZWQsIGNhY2hlZCwgZ2F0ZWtlZXBlci1jaGVja2VkKS5cbiAgICogV2hlbiBhYnNlbnQsIGZhbGxzIGJhY2sgdG8gZGlyZWN0IGZpbGVzeXN0ZW0gYWNjZXNzIChsZWdhY3kgYmVoYXZpb3IpLlxuICAgKiBJc3N1ZSAjNzk2OiBXZWIgTUNQLUFRTCBHYXRld2F5LlxuICAgKi9cbiAgbWNwQXFsSGFuZGxlcj86IE1DUEFRTEhhbmRsZXI7XG4gIC8qKiBNZW1vcnlMb2dTaW5rIGZvciBsb2cgcm91dGVzIChvcHRpb25hbCDigJQgbG9ncyB0YWIgZGlzYWJsZWQgaWYgbm90IHByb3ZpZGVkKSAqL1xuICBtZW1vcnlTaW5rPzogTWVtb3J5TG9nU2luaztcbiAgLyoqIE1lbW9yeU1ldHJpY3NTaW5rIGZvciBtZXRyaWNzIHJvdXRlcyAob3B0aW9uYWwg4oCUIG1ldHJpY3MgdGFiIGRpc2FibGVkIGlmIG5vdCBwcm92aWRlZCkgKi9cbiAgbWV0cmljc1Npbms/OiBNZW1vcnlNZXRyaWNzU2luaztcbiAgLyoqIEFkZGl0aW9uYWwgcm91dGVycyB0byBtb3VudCBiZWZvcmUgdGhlIFNQQSBmYWxsYmFjayAoZS5nLiwgaW5nZXN0IHJvdXRlcykgKi9cbiAgYWRkaXRpb25hbFJvdXRlcnM/OiBpbXBvcnQoJ2V4cHJlc3MnKS5Sb3V0ZXJbXTtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2Ygc3RhcnRpbmcgdGhlIHdlYiBzZXJ2ZXIsIGluY2x1ZGluZyBob29rcyBmb3IgREkgd2lyaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYlNlcnZlclJlc3VsdCB7XG4gIC8qKiBFeHByZXNzIGFwcCBpbnN0YW5jZSDigJQgZm9yIG1vdW50aW5nIGFkZGl0aW9uYWwgcm91dGVzIChlLmcuLCBpbmdlc3Qgcm91dGVzKSAqL1xuICBhcHA/OiBpbXBvcnQoJ2V4cHJlc3MnKS5FeHByZXNzO1xuICAvKiogTG9nIGJyb2FkY2FzdCBmdW5jdGlvbiDigJQgY2FsbCB3aXRoIGVhY2ggZW50cnkgdG8gcHVzaCB0byBTU0UgY2xpZW50cyAqL1xuICBsb2dCcm9hZGNhc3Q/OiAoZW50cnk6IGltcG9ydCgnLi4vbG9nZ2luZy90eXBlcy5qcycpLlVuaWZpZWRMb2dFbnRyeSkgPT4gdm9pZDtcbiAgLyoqIE1ldHJpY3Mgc25hcHNob3QgZnVuY3Rpb24g4oCUIGNhbGwgd2l0aCBlYWNoIHNuYXBzaG90IHRvIHB1c2ggdG8gU1NFIGNsaWVudHMgKi9cbiAgbWV0cmljc09uU25hcHNob3Q/OiAoc25hcHNob3Q6IGltcG9ydCgnLi4vbWV0cmljcy90eXBlcy5qcycpLk1ldHJpY1NuYXBzaG90KSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBhdHRlbXB0aW5nIHRvIG9wZW4gdGhlIGJyb3dzZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnJvd3Nlck9wZW5SZXN1bHQge1xuICAvKiogVGhlIFVSTCB0aGUgc2VydmVyIGlzIHJ1bm5pbmcgb24gKi9cbiAgdXJsOiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRoZSBzZXJ2ZXIgd2FzIGFscmVhZHkgcnVubmluZyAodHJ1ZSkgb3IganVzdCBzdGFydGVkIChmYWxzZSkgKi9cbiAgYWxyZWFkeVJ1bm5pbmc6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSBicm93c2VyIHdhcyBzdWNjZXNzZnVsbHkgb3BlbmVkICovXG4gIGJyb3dzZXJPcGVuZWQ6IGJvb2xlYW47XG4gIC8qKiBXYXJuaW5nIG1lc3NhZ2UgaWYgdGhlIGJyb3dzZXIgY291bGQgbm90IGJlIG9wZW5lZCAqL1xuICB3YXJuaW5nPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wZW4gYSBVUkwgaW4gdGhlIHN5c3RlbSdzIGRlZmF1bHQgYnJvd3Nlci5cbiAqXG4gKiBQbGF0Zm9ybS1hd2FyZTpcbiAqIC0gbWFjT1M6IGBvcGVuYFxuICogLSBMaW51eDogYHhkZy1vcGVuYFxuICogLSBXaW5kb3dzOiBgc3RhcnRgXG4gKlxuICogQHBhcmFtIHVybCAtIFRoZSBVUkwgdG8gb3BlblxuICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRydWUgaWYgdGhlIGJyb3dzZXIgb3BlbmVkLCBmYWxzZSB3aXRoIGVycm9yIG1lc3NhZ2UgaWYgbm90XG4gKi9cbmZ1bmN0aW9uIG9wZW5JbkJyb3dzZXIodXJsOiBzdHJpbmcpOiBQcm9taXNlPHsgc3VjY2VzczogYm9vbGVhbjsgZXJyb3I/OiBzdHJpbmcgfT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBwbGF0ID0gcGxhdGZvcm0oKTtcbiAgICBjb25zdCBjbWQgPSBwbGF0ID09PSAnZGFyd2luJyA/ICdvcGVuJ1xuICAgICAgOiBwbGF0ID09PSAnd2luMzInID8gJ3N0YXJ0J1xuICAgICAgOiAneGRnLW9wZW4nO1xuXG4gICAgLy8gU2VjdXJpdHk6IHVzZSBleGVjRmlsZSB3aXRoIFVSTCBhcyBhcmd1bWVudCBhcnJheSwgbm90IHN0cmluZyBpbnRlcnBvbGF0aW9uXG4gICAgY29uc3QgdXJsU3RyID0gU3RyaW5nKHVybCk7XG4gICAgLy8gQWNjZXB0IGxvY2FsaG9zdCwgMTI3LjAuMC4xLCBhbmQgKi5sb2NhbGhvc3Qgc3ViZG9tYWlucyAoUkZDIDY3NjEpXG4gICAgaWYgKCEvXmh0dHBzPzpcXC9cXC8obG9jYWxob3N0fDEyN1xcLjBcXC4wXFwuMXxbXFx3LV0rXFwubG9jYWxob3N0KVs6L10vLnRlc3QodXJsU3RyKSkge1xuICAgICAgcmVzb2x2ZSh7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ1VSTCBtdXN0IGJlIGEgbG9jYWxob3N0IEhUVFAgVVJMJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXhlY0ZpbGUoY21kLCBbdXJsU3RyXSwgKGVycikgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBsb2dnZXIud2FybihgW1dlYlVJXSBDb3VsZCBub3QgYXV0by1vcGVuIGJyb3dzZXI6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJlc29sdmUoeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6IGVyci5tZXNzYWdlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSh7IHN1Y2Nlc3M6IHRydWUgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFN0YXJ0IHRoZSBwb3J0Zm9saW8gd2ViIHNlcnZlci5cbiAqXG4gKiBCaW5kcyB0byAxMjcuMC4wLjEgb25seSAobG9jYWxob3N0KS4gU2VydmVzIHRoZSBwb3J0Zm9saW8gYnJvd3NlclxuICogZnJvbnRlbmQgYW5kIEFQSSByb3V0ZXMgZm9yIHJlYWRpbmcgZWxlbWVudHMuXG4gKlxuICogSWRlbXBvdGVudDogaWYgdGhlIHNlcnZlciBpcyBhbHJlYWR5IHJ1bm5pbmcsIG9wdGlvbmFsbHkgb3BlbnMgdGhlXG4gKiBicm93c2VyIHdpdGhvdXQgc3RhcnRpbmcgYSBzZWNvbmQgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBTZXJ2ZXIgY29uZmlndXJhdGlvblxuICogQHJldHVybnMgSG9va3MgZm9yIERJIHdpcmluZyAobG9nIGJyb2FkY2FzdCwgbWV0cmljcyBvblNuYXBzaG90KVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRXZWJTZXJ2ZXIob3B0aW9uczogV2ViU2VydmVyT3B0aW9ucyk6IFByb21pc2U8V2ViU2VydmVyUmVzdWx0PiB7XG4gIGNvbnN0IHBvcnQgPSBvcHRpb25zLnBvcnQgfHwgREVGQVVMVF9QT1JUO1xuICBjb25zdCByZXN1bHQ6IFdlYlNlcnZlclJlc3VsdCA9IHt9O1xuXG4gIGlmIChzZXJ2ZXJSdW5uaW5nKSB7XG4gICAgaWYgKG9wdGlvbnMub3BlbkJyb3dzZXIpIHtcbiAgICAgIG9wZW5JbkJyb3dzZXIoYGh0dHA6Ly8ke0NPTlNPTEVfSE9TVH06JHtzZXJ2ZXJQb3J0fWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgY29uc3QgYXBwID0gZXhwcmVzcygpO1xuICByZXN1bHQuYXBwID0gYXBwO1xuICBhcHAuZGlzYWJsZSgneC1wb3dlcmVkLWJ5Jyk7XG5cbiAgLy8gU2VjdXJpdHkgaGVhZGVyc1xuICBhcHAudXNlKChfcmVxLCByZXMsIG5leHQpID0+IHtcbiAgICByZXMuc2V0SGVhZGVyKCdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJywgJ25vc25pZmYnKTtcbiAgICByZXMuc2V0SGVhZGVyKCdYLUZyYW1lLU9wdGlvbnMnLCAnREVOWScpO1xuICAgIHJlcy5zZXRIZWFkZXIoJ1gtWFNTLVByb3RlY3Rpb24nLCAnMTsgbW9kZT1ibG9jaycpO1xuICAgIHJlcy5zZXRIZWFkZXIoJ1JlZmVycmVyLVBvbGljeScsICduby1yZWZlcnJlcicpO1xuICAgIHJlcy5zZXRIZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsIGBodHRwOi8vJHtDT05TT0xFX0hPU1R9OiR7cG9ydH1gKTtcbiAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVNlY3VyaXR5LVBvbGljeScsIFtcbiAgICAgIFwiZGVmYXVsdC1zcmMgJ3NlbGYnXCIsXG4gICAgICBcInNjcmlwdC1zcmMgJ3NlbGYnIGNkbi5qc2RlbGl2ci5uZXQgY2RuanMuY2xvdWRmbGFyZS5jb21cIixcbiAgICAgIFwic3R5bGUtc3JjICdzZWxmJyAndW5zYWZlLWlubGluZScgY2RuanMuY2xvdWRmbGFyZS5jb20gY2RuLmpzZGVsaXZyLm5ldFwiLFxuICAgICAgXCJjb25uZWN0LXNyYyAnc2VsZicgcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbVwiLFxuICAgICAgXCJmb250LXNyYyAnc2VsZidcIixcbiAgICBdLmpvaW4oJzsgJykpO1xuICAgIG5leHQoKTtcbiAgfSk7XG5cbiAgLy8gU2V0dXAgcm91dGVzOiBhdXRvLWluc3RhbGwgRG9sbGhvdXNlTUNQIHRvIE1DUCBjbGllbnRzIChtb3VudCBCRUZPUkUgQVBJIHJvdXRlcylcbiAgLy8gQm9keSBsaW1pdCBzY29wZWQgdG8gc2V0dXAgcm91dGVzIG9ubHkg4oCUIGluZ2VzdCByb3V0ZXMgbmVlZCAxbWIgZm9yIGZvbGxvd2VyIGxvZyBmb3J3YXJkaW5nXG4gIGNvbnN0IHNldHVwSnNvblBhcnNlciA9IGV4cHJlc3MuanNvbih7IGxpbWl0OiBTRVRVUF9CT0RZX0xJTUlULCB0eXBlOiAnYXBwbGljYXRpb24vanNvbicgfSk7XG4gIGNvbnN0IHsgaW5zdGFsbEhhbmRsZXIsIG9wZW5Db25maWdIYW5kbGVyLCB2ZXJzaW9uSGFuZGxlciwgbWNwYlJlZGlyZWN0SGFuZGxlciwgZGV0ZWN0SGFuZGxlciB9ID0gY3JlYXRlU2V0dXBSb3V0ZXMoKTtcbiAgYXBwLnBvc3QoJy9hcGkvc2V0dXAvaW5zdGFsbCcsIHNldHVwSnNvblBhcnNlciwgaW5zdGFsbEhhbmRsZXIpO1xuICBhcHAucG9zdCgnL2FwaS9zZXR1cC9vcGVuLWNvbmZpZycsIHNldHVwSnNvblBhcnNlciwgb3BlbkNvbmZpZ0hhbmRsZXIpO1xuICBhcHAuZ2V0KCcvYXBpL3NldHVwL3ZlcnNpb24nLCB2ZXJzaW9uSGFuZGxlcik7XG4gIGFwcC5nZXQoJy9hcGkvc2V0dXAvbWNwYicsIG1jcGJSZWRpcmVjdEhhbmRsZXIpO1xuICBhcHAuZ2V0KCcvYXBpL3NldHVwL2RldGVjdCcsIGRldGVjdEhhbmRsZXIpO1xuICBsb2dnZXIuaW5mbygnW1dlYlVJXSBTZXR1cCByb3V0ZXMgbW91bnRlZCBhdCAvYXBpL3NldHVwJyk7XG5cbiAgLy8gQVBJIHJvdXRlcyDigJQgdXNlIE1DUC1BUUwgZ2F0ZXdheSB3aGVuIGhhbmRsZXIgaXMgYXZhaWxhYmxlIChJc3N1ZSAjNzk2KVxuICBpZiAob3B0aW9ucy5tY3BBcWxIYW5kbGVyKSB7XG4gICAgYXBwLnVzZSgnL2FwaScsIGNyZWF0ZUdhdGV3YXlBcGlSb3V0ZXMob3B0aW9ucy5tY3BBcWxIYW5kbGVyLCBvcHRpb25zLnBvcnRmb2xpb0RpcikpO1xuXG4gICAgLy8gUGVybWlzc2lvbiBldmFsdWF0aW9uIHJvdXRlcyAoUE9TVCAvZXZhbHVhdGVfcGVybWlzc2lvbiwgR0VUIC9wZXJtaXNzaW9ucy9zdGF0dXMpXG4gICAgY29uc3QgeyByZWdpc3RlclBlcm1pc3Npb25Sb3V0ZXMgfSA9IGF3YWl0IGltcG9ydCgnLi9yb3V0ZXMvcGVybWlzc2lvblJvdXRlcy5qcycpO1xuICAgIGNvbnN0IHBlcm1Sb3V0ZXIgPSAoYXdhaXQgaW1wb3J0KCdleHByZXNzJykpLlJvdXRlcigpO1xuICAgIHJlZ2lzdGVyUGVybWlzc2lvblJvdXRlcyhwZXJtUm91dGVyLCBvcHRpb25zLm1jcEFxbEhhbmRsZXIpO1xuICAgIGFwcC51c2UoJy9hcGknLCBwZXJtUm91dGVyKTtcblxuICAgIGxvZ2dlci5pbmZvKCdbV2ViVUldIEFQSSByb3V0ZXMgdXNpbmcgTUNQLUFRTCBHYXRld2F5ICsgcGVybWlzc2lvbiByb3V0ZXMnKTtcbiAgfSBlbHNlIHtcbiAgICBhcHAudXNlKCcvYXBpJywgY3JlYXRlQXBpUm91dGVzKG9wdGlvbnMucG9ydGZvbGlvRGlyKSk7XG4gICAgbG9nZ2VyLndhcm4oJ1tXZWJVSV0gQVBJIHJvdXRlcyB1c2luZyBkaXJlY3QgZmlsZXN5c3RlbSBhY2Nlc3MgKG5vIE1DUC1BUUwgaGFuZGxlciBhdmFpbGFibGUpJyk7XG4gIH1cblxuICAvLyBDb25zb2xlIHJvdXRlczogbG9ncywgbWV0cmljcywgaGVhbHRoXG4gIGxldCBsb2dSb3V0ZXM6IExvZ1JvdXRlc1Jlc3VsdCB8IHVuZGVmaW5lZDtcbiAgbGV0IG1ldHJpY3NSb3V0ZXM6IE1ldHJpY3NSb3V0ZXNSZXN1bHQgfCB1bmRlZmluZWQ7XG5cbiAgaWYgKG9wdGlvbnMubWVtb3J5U2luaykge1xuICAgIGxvZ1JvdXRlcyA9IGNyZWF0ZUxvZ1JvdXRlcyhvcHRpb25zLm1lbW9yeVNpbmspO1xuICAgIGFwcC51c2UoJy9hcGknLCBsb2dSb3V0ZXMucm91dGVyKTtcbiAgICByZXN1bHQubG9nQnJvYWRjYXN0ID0gbG9nUm91dGVzLmJyb2FkY2FzdDtcbiAgICBsb2dnZXIuaW5mbygnW1dlYlVJXSBMb2cgdmlld2VyIHJvdXRlcyBtb3VudGVkIGF0IC9hcGkvbG9ncycpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMubWV0cmljc1NpbmspIHtcbiAgICBtZXRyaWNzUm91dGVzID0gY3JlYXRlTWV0cmljc1JvdXRlcyhvcHRpb25zLm1ldHJpY3NTaW5rKTtcbiAgICBhcHAudXNlKCcvYXBpJywgbWV0cmljc1JvdXRlcy5yb3V0ZXIpO1xuICAgIHJlc3VsdC5tZXRyaWNzT25TbmFwc2hvdCA9IG1ldHJpY3NSb3V0ZXMub25TbmFwc2hvdDtcbiAgICBsb2dnZXIuaW5mbygnW1dlYlVJXSBNZXRyaWNzIHJvdXRlcyBtb3VudGVkIGF0IC9hcGkvbWV0cmljcycpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMubWVtb3J5U2luaykge1xuICAgIGNvbnN0IGhlYWx0aFJvdXRlciA9IGNyZWF0ZUhlYWx0aFJvdXRlcyh7XG4gICAgICBtZW1vcnlTaW5rOiBvcHRpb25zLm1lbW9yeVNpbmssXG4gICAgICBtZXRyaWNzU2luazogb3B0aW9ucy5tZXRyaWNzU2luayxcbiAgICAgIGxvZ0NsaWVudENvdW50OiBsb2dSb3V0ZXMgPyBsb2dSb3V0ZXMuY2xpZW50Q291bnQgOiAoKSA9PiAwLFxuICAgICAgbWV0cmljc0NsaWVudENvdW50OiBtZXRyaWNzUm91dGVzID8gbWV0cmljc1JvdXRlcy5jbGllbnRDb3VudCA6ICgpID0+IDAsXG4gICAgfSk7XG4gICAgYXBwLnVzZSgnL2FwaScsIGhlYWx0aFJvdXRlcik7XG4gIH1cblxuICAvLyBTZXJ2ZSB+Ly5kb2xsaG91c2UvcGFnZXMvIGF0IC9wYWdlcy8g4oCUIGRhc2hib2FyZHMsIGdlbmVyYXRlZCBjb250ZW50LCBzdGFjayB2aWV3c1xuICBjb25zdCBwYWdlc0RpciA9IGpvaW4oZGlybmFtZShvcHRpb25zLnBvcnRmb2xpb0RpciksICdwYWdlcycpO1xuICBta2RpcihwYWdlc0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSkuY2F0Y2goZXJyID0+IHtcbiAgICBsb2dnZXIud2FybihgW1dlYlVJXSBDb3VsZCBub3QgY3JlYXRlIHBhZ2VzIGRpcmVjdG9yeTogJHsoZXJyIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICB9KTtcbiAgYXBwLnVzZSgnL3BhZ2VzJywgZXhwcmVzcy5zdGF0aWMocGFnZXNEaXIpKTtcblxuICAvKipcbiAgICogR0VUIC9hcGkvcGFnZXNcbiAgICogTGlzdHMgYXZhaWxhYmxlIEhUTUwgcGFnZXMgaW4gfi8uZG9sbGhvdXNlL3BhZ2VzLy5cbiAgICogUmV0dXJucyBwYWdlIG5hbWVzIGFuZCB0aGVpciBVUkxzIGZvciB0aGUgbWFuYWdlbWVudCBjb25zb2xlLlxuICAgKi9cbiAgYXBwLmdldCgnL2FwaS9wYWdlcycsIGFzeW5jIChfcmVxLCByZXMpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCByZWFkZGlyKHBhZ2VzRGlyKTtcbiAgICAgIGNvbnN0IHBhZ2VzID0gZmlsZXNcbiAgICAgICAgLmZpbHRlcihmID0+ICFmLnN0YXJ0c1dpdGgoJy4nKSAmJiBBTExPV0VEX1BBR0VfRVhURU5TSU9OUy5oYXMoZXh0bmFtZShmKSkpXG4gICAgICAgIC5tYXAoZiA9PiAoeyBuYW1lOiBmLCB1cmw6IGAvcGFnZXMvJHtmfWAgfSkpO1xuICAgICAgcmVzLmpzb24oeyBwYWdlcywgZGlyZWN0b3J5OiBwYWdlc0RpciB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJlcy5qc29uKHsgcGFnZXM6IFtdLCBkaXJlY3Rvcnk6IHBhZ2VzRGlyIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gQWRkaXRpb25hbCByb3V0ZXJzIChlLmcuLCB1bmlmaWVkIGNvbnNvbGUgaW5nZXN0IHJvdXRlcykg4oCUIG11c3QgbW91bnQgYmVmb3JlIFNQQSBmYWxsYmFja1xuICBvcHRpb25zLmFkZGl0aW9uYWxSb3V0ZXJzPy5mb3JFYWNoKHJvdXRlciA9PiBhcHAudXNlKHJvdXRlcikpO1xuXG4gIC8vIFN0YXRpYyBmcm9udGVuZCBmaWxlc1xuICBjb25zdCBwdWJsaWNEaXIgPSBqb2luKF9fZGlybmFtZSwgJ3B1YmxpYycpO1xuICBhcHAudXNlKGV4cHJlc3Muc3RhdGljKHB1YmxpY0RpcikpO1xuXG4gIC8vIFNQQSBmYWxsYmFja1xuICBhcHAuZ2V0KCcveypwYXRofScsIChyZXEsIHJlcykgPT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gcmVxLnBhdGgubm9ybWFsaXplKCdORkMnKTtcbiAgICBpZiAobm9ybWFsaXplZFBhdGguc3RhcnRzV2l0aCgnL2FwaS8nKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDQpLmpzb24oeyBlcnJvcjogYEFQSSByb3V0ZSBub3QgZm91bmQ6ICR7bm9ybWFsaXplZFBhdGh9YCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG5vcm1hbGl6ZWRQYXRoLnN0YXJ0c1dpdGgoJy9wYWdlcy8nKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDQpLmpzb24oeyBlcnJvcjogYFBhZ2Ugbm90IGZvdW5kOiAke25vcm1hbGl6ZWRQYXRofWAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJlcy5zZW5kRmlsZShqb2luKHB1YmxpY0RpciwgJ2luZGV4Lmh0bWwnKSk7XG4gIH0pO1xuXG4gIC8vIEdsb2JhbCBlcnJvciBoYW5kbGVyIOKAlCBjYXRjaCBFeHByZXNzIGVycm9ycyBhbmQgcm91dGUgdG8gbG9nZ2VyIGluc3RlYWQgb2YgdGVybWluYWwuXG4gIC8vIFdpdGhvdXQgdGhpcywgRXhwcmVzcyBkdW1wcyBzdGFjayB0cmFjZXMgdG8gc3RkZXJyICh2aXNpYmxlIGluIC0td2ViIHRlcm1pbmFsKS5cbiAgLy8gQWxsIGVycm9ycyBzdGlsbCBhcHBlYXIgaW4gdGhlIG1hbmFnZW1lbnQgY29uc29sZSdzIExvZ3MgdGFiIHZpYSBNZW1vcnlMb2dTaW5rLlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFwcC51c2UoKGVycjogRXJyb3IsIF9yZXE6IGltcG9ydCgnZXhwcmVzcycpLlJlcXVlc3QsIHJlczogaW1wb3J0KCdleHByZXNzJykuUmVzcG9uc2UsIF9uZXh0OiBpbXBvcnQoJ2V4cHJlc3MnKS5OZXh0RnVuY3Rpb24pID0+IHtcbiAgICBjb25zdCBzdGF0dXMgPSAoZXJyIGFzIGFueSkuc3RhdHVzIHx8IChlcnIgYXMgYW55KS5zdGF0dXNDb2RlIHx8IDUwMDtcbiAgICBsb2dnZXIud2FybihgW1dlYlVJXSAke2Vyci5uYW1lfTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICBpZiAoIXJlcy5oZWFkZXJzU2VudCkge1xuICAgICAgcmVzLnN0YXR1cyhzdGF0dXMpLmpzb24oeyBlcnJvcjogZXJyLm1lc3NhZ2UgfSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBCaW5kIHRvIGxvY2FsaG9zdCBvbmx5IOKAlCBoYW5kbGUgcG9ydCBjb25mbGljdHMgZ3JhY2VmdWxseVxuICAvLyBOT1RFOiBVc2Ugc3RkZXJyIGZvciB0ZXJtaW5hbCBvdXRwdXQsIG5vdCBzdGRvdXQuIEluIE1DUCBzdGRpbyBtb2RlLCBzdGRvdXRcbiAgLy8gaXMgcmVzZXJ2ZWQgZm9yIEpTT04tUlBDIG1lc3NhZ2VzIOKAlCBhbnkgbm9uLUpTT04gb3V0cHV0IGNvcnJ1cHRzIHRoZSBwcm90b2NvbC5cbiAgLy8gc3RkZXJyIGlzIHNhZmUgZm9yIGh1bWFuLXJlYWRhYmxlIG1lc3NhZ2VzIGluIGJvdGggTUNQIGFuZCBzdGFuZGFsb25lIG1vZGVzLlxuICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IGh0dHBTZXJ2ZXIgPSBhcHAubGlzdGVuKHBvcnQsICcxMjcuMC4wLjEnLCAoKSA9PiB7XG4gICAgICBzZXJ2ZXJSdW5uaW5nID0gdHJ1ZTtcbiAgICAgIHNlcnZlclBvcnQgPSBwb3J0O1xuICAgICAgY29uc3QgdXJsID0gYGh0dHA6Ly8ke0NPTlNPTEVfSE9TVH06JHtwb3J0fWA7XG4gICAgICBjb25zdCBmYWxsYmFja1VybCA9IGBodHRwOi8vMTI3LjAuMC4xOiR7cG9ydH1gO1xuICAgICAgbG9nZ2VyLmluZm8oYFtXZWJVSV0gTWFuYWdlbWVudCBjb25zb2xlIHJ1bm5pbmcgYXQgJHt1cmx9YCk7XG4gICAgICBjb25zb2xlLmVycm9yKGBcXG4gIERvbGxob3VzZU1DUCBNYW5hZ2VtZW50IENvbnNvbGVcXG4gICR7dXJsfVxcbiAgJHtmYWxsYmFja1VybH0gKGZhbGxiYWNrKVxcbmApO1xuXG4gICAgICBpZiAob3B0aW9ucy5vcGVuQnJvd3Nlcikge1xuICAgICAgICBvcGVuSW5Ccm93c2VyKHVybCk7XG4gICAgICB9XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gICAgaHR0cFNlcnZlci5vbignZXJyb3InLCAoZXJyOiBOb2RlSlMuRXJybm9FeGNlcHRpb24pID0+IHtcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VBRERSSU5VU0UnKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGBodHRwOi8vJHtDT05TT0xFX0hPU1R9OiR7cG9ydH1gO1xuICAgICAgICBsb2dnZXIuaW5mbyhgW1dlYlVJXSBQb3J0ICR7cG9ydH0gYWxyZWFkeSBpbiB1c2Ug4oCUIG9wZW5pbmcgZXhpc3RpbmcgY29uc29sZWApO1xuICAgICAgICBjb25zb2xlLmVycm9yKGBcXG4gIERvbGxob3VzZU1DUCBNYW5hZ2VtZW50IENvbnNvbGUgKGV4aXN0aW5nIGluc3RhbmNlKVxcbiAgJHt1cmx9XFxuYCk7XG4gICAgICAgIGlmIChvcHRpb25zLm9wZW5Ccm93c2VyKSB7XG4gICAgICAgICAgb3BlbkluQnJvd3Nlcih1cmwpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYFtXZWJVSV0gRmFpbGVkIHRvIGJpbmQgcG9ydCAke3BvcnR9OiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZSgpOyAvLyBXZWIgY29uc29sZSBpcyBvcHRpb25hbCDigJQgZG9uJ3QgYmxvY2sgc3RhcnR1cFxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIE9wZW4gdGhlIHBvcnRmb2xpbyBicm93c2VyIGZyb20gd2l0aGluIHRoZSBNQ1Agc2VydmVyIHByb2Nlc3MuXG4gKlxuICogU3RhcnRzIHRoZSB3ZWIgc2VydmVyIGlmIG5vdCBhbHJlYWR5IHJ1bm5pbmcsIHRoZW4gb3BlbnMgdGhlIHN5c3RlbVxuICogYnJvd3NlciB0byB0aGUgcG9ydGZvbGlvIFVJLiBSZXR1cm5zIGEgcmVzdWx0IG9iamVjdCBpbmRpY2F0aW5nXG4gKiB3aGV0aGVyIHRoZSBzZXJ2ZXIgc3RhcnRlZCBhbmQgdGhlIGJyb3dzZXIgb3BlbmVkIHN1Y2Nlc3NmdWxseS5cbiAqXG4gKiBDYWxsZWQgYnkgdGhlIGBvcGVuX3BvcnRmb2xpb19icm93c2VyYCBNQ1AtQVFMIG9wZXJhdGlvbiAoSXNzdWUgIzc3NCkuXG4gKlxuICogQHBhcmFtIHBvcnRmb2xpb0RpciAtIFBhdGggdG8gdGhlIHBvcnRmb2xpbyBkaXJlY3RvcnkgKGUuZy4sIH4vLmRvbGxob3VzZS9wb3J0Zm9saW8pXG4gKiBAcGFyYW0gcG9ydCAtIFBvcnQgdG8gYmluZCB0byAoZGVmYXVsdDogMzkzOSlcbiAqIEByZXR1cm5zIFJlc3VsdCB3aXRoIFVSTCwgc2VydmVyIHN0YXR1cywgYW5kIGJyb3dzZXIgb3BlbiBzdGF0dXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5Qb3J0Zm9saW9Ccm93c2VyKHBvcnRmb2xpb0Rpcjogc3RyaW5nLCBwb3J0PzogbnVtYmVyLCBtY3BBcWxIYW5kbGVyPzogTUNQQVFMSGFuZGxlciwgdGFiPzogc3RyaW5nKTogUHJvbWlzZTxCcm93c2VyT3BlblJlc3VsdD4ge1xuICBjb25zdCB0YXJnZXRQb3J0ID0gcG9ydCB8fCBERUZBVUxUX1BPUlQ7XG4gIGNvbnN0IGJhc2VVcmwgPSBgaHR0cDovLyR7Q09OU09MRV9IT1NUfToke3RhcmdldFBvcnR9YDtcbiAgY29uc3QgdXJsID0gdGFiID8gYCR7YmFzZVVybH0vIyR7dGFifWAgOiBiYXNlVXJsO1xuICBjb25zdCBhbHJlYWR5UnVubmluZyA9IHNlcnZlclJ1bm5pbmc7XG5cbiAgaWYgKCFzZXJ2ZXJSdW5uaW5nKSB7XG4gICAgYXdhaXQgc3RhcnRXZWJTZXJ2ZXIoe1xuICAgICAgcG9ydGZvbGlvRGlyLFxuICAgICAgcG9ydDogdGFyZ2V0UG9ydCxcbiAgICAgIG9wZW5Ccm93c2VyOiBmYWxzZSwgLy8gV2UnbGwgb3BlbiBtYW51YWxseSBiZWxvdyB0byBjYXB0dXJlIHRoZSByZXN1bHRcbiAgICAgIG1jcEFxbEhhbmRsZXIsXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBicm93c2VyUmVzdWx0ID0gYXdhaXQgb3BlbkluQnJvd3Nlcih1cmwpO1xuXG4gIHJldHVybiB7XG4gICAgdXJsLFxuICAgIGFscmVhZHlSdW5uaW5nLFxuICAgIGJyb3dzZXJPcGVuZWQ6IGJyb3dzZXJSZXN1bHQuc3VjY2VzcyxcbiAgICAuLi4oYnJvd3NlclJlc3VsdC5lcnJvciA/IHsgd2FybmluZzogYEJyb3dzZXIgY291bGQgbm90IGJlIG9wZW5lZCBhdXRvbWF0aWNhbGx5OiAke2Jyb3dzZXJSZXN1bHQuZXJyb3J9LiBPcGVuICR7dXJsfSBtYW51YWxseS5gIH0gOiB7fSksXG4gIH07XG59XG4iXX0=
292
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dlYi9zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbkMsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQXdCLE1BQU0sdUJBQXVCLENBQUM7QUFDOUUsT0FBTyxFQUFFLG1CQUFtQixFQUE0QixNQUFNLDJCQUEyQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUs1QyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDMUIsTUFBTSxZQUFZLEdBQUcscUJBQXFCLENBQUM7QUFDM0MsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzNELG1H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ckQsR0FBRyxHQUFHLEdBQUcsT0FBTyxlQUFlLEVBQUUsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUM7SUFFckMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ25CLE1BQU0sY0FBYyxDQUFDO1lBQ25CLFlBQVk7WUFDWixJQUFJLEVBQUUsVUFBVTtZQUNoQixXQUFXLEVBQUUsS0FBSyxFQUFFLGtEQUFrRDtZQUN0RSxhQUFhO1NBQ2QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sYUFBYSxHQUFHLE1BQU0sYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRS9DLE9BQU87UUFDTCxHQUFHO1FBQ0gsY0FBYztRQUNkLGFBQWEsRUFBRSxhQUFhLENBQUMsT0FBTztRQUNwQyxHQUFHLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsOENBQThDLGFBQWEsQ0FBQyxLQUFLLFVBQVUsR0FBRyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ3hJLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEb2xsaG91c2VNQ1AgV2ViIFVJIFNlcnZlclxuICpcbiAqIExpZ2h0d2VpZ2h0IEV4cHJlc3Mgc2VydmVyIGZvciBicm93c2luZyBwb3J0Zm9saW8gZWxlbWVudHMgaW4gYSBicm93c2VyLlxuICogQm91bmQgdG8gMTI3LjAuMC4xIG9ubHkgKGxvY2FsaG9zdCkuIFJlYWQtb25seSBmb3IgVjEuXG4gKlxuICogQ2FuIGJlIHN0YXJ0ZWQgc3RhbmRhbG9uZSAoYC0td2ViYCBmbGFnKSBvciBmcm9tIHdpdGhpbiB0aGUgTUNQIHNlcnZlclxuICogcHJvY2VzcyB2aWEgYG9wZW5Qb3J0Zm9saW9Ccm93c2VyKClgLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL0RvbGxob3VzZU1DUC9tY3Atc2VydmVyLXYyLXJlZmFjdG9yL2lzc3Vlcy83MDRcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL0RvbGxob3VzZU1DUC9tY3Atc2VydmVyLXYyLXJlZmFjdG9yL2lzc3Vlcy83NzRcbiAqL1xuXG5pbXBvcnQgZXhwcmVzcyBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IGpvaW4sIGRpcm5hbWUsIGV4dG5hbWUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB7IGV4ZWNGaWxlIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IHBsYXRmb3JtIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyBta2RpciwgcmVhZGRpciB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgY3JlYXRlQXBpUm91dGVzLCBjcmVhdGVHYXRld2F5QXBpUm91dGVzIH0gZnJvbSAnLi9yb3V0ZXMuanMnO1xuaW1wb3J0IHsgY3JlYXRlTG9nUm91dGVzLCB0eXBlIExvZ1JvdXRlc1Jlc3VsdCB9IGZyb20gJy4vcm91dGVzL2xvZ1JvdXRlcy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVNZXRyaWNzUm91dGVzLCB0eXBlIE1ldHJpY3NSb3V0ZXNSZXN1bHQgfSBmcm9tICcuL3JvdXRlcy9tZXRyaWNzUm91dGVzLmpzJztcbmltcG9ydCB7IGNyZWF0ZUhlYWx0aFJvdXRlcyB9IGZyb20gJy4vcm91dGVzL2hlYWx0aFJvdXRlcy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVTZXR1cFJvdXRlcyB9IGZyb20gJy4vcm91dGVzL3NldHVwUm91dGVzLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgdHlwZSB7IE1DUEFRTEhhbmRsZXIgfSBmcm9tICcuLi9oYW5kbGVycy9tY3AtYXFsL01DUEFRTEhhbmRsZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBNZW1vcnlMb2dTaW5rIH0gZnJvbSAnLi4vbG9nZ2luZy9zaW5rcy9NZW1vcnlMb2dTaW5rLmpzJztcbmltcG9ydCB0eXBlIHsgTWVtb3J5TWV0cmljc1NpbmsgfSBmcm9tICcuLi9tZXRyaWNzL3NpbmtzL01lbW9yeU1ldHJpY3NTaW5rLmpzJztcblxuY29uc3QgX19kaXJuYW1lID0gZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpO1xuY29uc3QgREVGQVVMVF9QT1JUID0gMzkzOTtcbmNvbnN0IENPTlNPTEVfSE9TVCA9ICdkb2xsaG91c2UubG9jYWxob3N0JztcbmNvbnN0IEFMTE9XRURfUEFHRV9FWFRFTlNJT05TID0gbmV3IFNldChbJy5odG1sJywgJy5odG0nXSk7XG4vKiogTWF4IEpTT04gYm9keSBmb3Igc2V0dXAgcm91dGVzIChpbnN0YWxsL29wZW4tY29uZmlnKS4gSW5nZXN0IHJvdXRlcyB1c2UgdGhlaXIgb3duIDFtYiBsaW1pdC4gKi9cbmNvbnN0IFNFVFVQX0JPRFlfTElNSVQgPSAnMWtiJztcblxuLyoqIFRyYWNrIHdoZXRoZXIgdGhlIHdlYiBzZXJ2ZXIgaXMgYWxyZWFkeSBydW5uaW5nIGluLXByb2Nlc3MuICovXG5sZXQgc2VydmVyUnVubmluZyA9IGZhbHNlO1xubGV0IHNlcnZlclBvcnQgPSBERUZBVUxUX1BPUlQ7XG5cbi8qKiBDaGVjayB3aGV0aGVyIHRoZSB3ZWIgc2VydmVyIGhhcyBiZWVuIHN0YXJ0ZWQgaW4gdGhpcyBwcm9jZXNzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzV2ViU2VydmVyUnVubmluZygpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNlcnZlclJ1bm5pbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Igc3RhcnRpbmcgdGhlIHdlYiBzZXJ2ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViU2VydmVyT3B0aW9ucyB7XG4gIC8qKiBQb3J0IHRvIGJpbmQgdG8gKGRlZmF1bHQ6IDM5MzkpICovXG4gIHBvcnQ/OiBudW1iZXI7XG4gIC8qKiBQYXRoIHRvIHRoZSBwb3J0Zm9saW8gZGlyZWN0b3J5IChlLmcuLCB+Ly5kb2xsaG91c2UvcG9ydGZvbGlvKSAqL1xuICBwb3J0Zm9saW9EaXI6IHN0cmluZztcbiAgLyoqIE9wZW4gdGhlIGJyb3dzZXIgYXV0b21hdGljYWxseSBhZnRlciBzdGFydGluZyAoZGVmYXVsdDogZmFsc2UpICovXG4gIG9wZW5Ccm93c2VyPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE1DUEFRTEhhbmRsZXIgZm9yIHJvdXRpbmcgdGhyb3VnaCB0aGUgTUNQLUFRTCBwaXBlbGluZS5cbiAgICogV2hlbiBwcm92aWRlZCwgQVBJIHJvdXRlcyB1c2UgdGhlIGdhdGV3YXkgKHZhbGlkYXRlZCwgY2FjaGVkLCBnYXRla2VlcGVyLWNoZWNrZWQpLlxuICAgKiBXaGVuIGFic2VudCwgZmFsbHMgYmFjayB0byBkaXJlY3QgZmlsZXN5c3RlbSBhY2Nlc3MgKGxlZ2FjeSBiZWhhdmlvcikuXG4gICAqIElzc3VlICM3OTY6IFdlYiBNQ1AtQVFMIEdhdGV3YXkuXG4gICAqL1xuICBtY3BBcWxIYW5kbGVyPzogTUNQQVFMSGFuZGxlcjtcbiAgLyoqIE1lbW9yeUxvZ1NpbmsgZm9yIGxvZyByb3V0ZXMgKG9wdGlvbmFsIOKAlCBsb2dzIHRhYiBkaXNhYmxlZCBpZiBub3QgcHJvdmlkZWQpICovXG4gIG1lbW9yeVNpbms/OiBNZW1vcnlMb2dTaW5rO1xuICAvKiogTWVtb3J5TWV0cmljc1NpbmsgZm9yIG1ldHJpY3Mgcm91dGVzIChvcHRpb25hbCDigJQgbWV0cmljcyB0YWIgZGlzYWJsZWQgaWYgbm90IHByb3ZpZGVkKSAqL1xuICBtZXRyaWNzU2luaz86IE1lbW9yeU1ldHJpY3NTaW5rO1xuICAvKiogQWRkaXRpb25hbCByb3V0ZXJzIHRvIG1vdW50IGJlZm9yZSB0aGUgU1BBIGZhbGxiYWNrIChlLmcuLCBpbmdlc3Qgcm91dGVzKSAqL1xuICBhZGRpdGlvbmFsUm91dGVycz86IGltcG9ydCgnZXhwcmVzcycpLlJvdXRlcltdO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBzdGFydGluZyB0aGUgd2ViIHNlcnZlciwgaW5jbHVkaW5nIGhvb2tzIGZvciBESSB3aXJpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViU2VydmVyUmVzdWx0IHtcbiAgLyoqIEV4cHJlc3MgYXBwIGluc3RhbmNlIOKAlCBmb3IgbW91bnRpbmcgYWRkaXRpb25hbCByb3V0ZXMgKGUuZy4sIGluZ2VzdCByb3V0ZXMpICovXG4gIGFwcD86IGltcG9ydCgnZXhwcmVzcycpLkV4cHJlc3M7XG4gIC8qKiBMb2cgYnJvYWRjYXN0IGZ1bmN0aW9uIOKAlCBjYWxsIHdpdGggZWFjaCBlbnRyeSB0byBwdXNoIHRvIFNTRSBjbGllbnRzICovXG4gIGxvZ0Jyb2FkY2FzdD86IChlbnRyeTogaW1wb3J0KCcuLi9sb2dnaW5nL3R5cGVzLmpzJykuVW5pZmllZExvZ0VudHJ5KSA9PiB2b2lkO1xuICAvKiogTWV0cmljcyBzbmFwc2hvdCBmdW5jdGlvbiDigJQgY2FsbCB3aXRoIGVhY2ggc25hcHNob3QgdG8gcHVzaCB0byBTU0UgY2xpZW50cyAqL1xuICBtZXRyaWNzT25TbmFwc2hvdD86IChzbmFwc2hvdDogaW1wb3J0KCcuLi9tZXRyaWNzL3R5cGVzLmpzJykuTWV0cmljU25hcHNob3QpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIGF0dGVtcHRpbmcgdG8gb3BlbiB0aGUgYnJvd3Nlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCcm93c2VyT3BlblJlc3VsdCB7XG4gIC8qKiBUaGUgVVJMIHRoZSBzZXJ2ZXIgaXMgcnVubmluZyBvbiAqL1xuICB1cmw6IHN0cmluZztcbiAgLyoqIFdoZXRoZXIgdGhlIHNlcnZlciB3YXMgYWxyZWFkeSBydW5uaW5nICh0cnVlKSBvciBqdXN0IHN0YXJ0ZWQgKGZhbHNlKSAqL1xuICBhbHJlYWR5UnVubmluZzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhlIGJyb3dzZXIgd2FzIHN1Y2Nlc3NmdWxseSBvcGVuZWQgKi9cbiAgYnJvd3Nlck9wZW5lZDogYm9vbGVhbjtcbiAgLyoqIFdhcm5pbmcgbWVzc2FnZSBpZiB0aGUgYnJvd3NlciBjb3VsZCBub3QgYmUgb3BlbmVkICovXG4gIHdhcm5pbmc/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3BlbiBhIFVSTCBpbiB0aGUgc3lzdGVtJ3MgZGVmYXVsdCBicm93c2VyLlxuICpcbiAqIFBsYXRmb3JtLWF3YXJlOlxuICogLSBtYWNPUzogYG9wZW5gXG4gKiAtIExpbnV4OiBgeGRnLW9wZW5gXG4gKiAtIFdpbmRvd3M6IGBzdGFydGBcbiAqXG4gKiBAcGFyYW0gdXJsIC0gVGhlIFVSTCB0byBvcGVuXG4gKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBpZiB0aGUgYnJvd3NlciBvcGVuZWQsIGZhbHNlIHdpdGggZXJyb3IgbWVzc2FnZSBpZiBub3RcbiAqL1xuZnVuY3Rpb24gb3BlbkluQnJvd3Nlcih1cmw6IHN0cmluZyk6IFByb21pc2U8eyBzdWNjZXNzOiBib29sZWFuOyBlcnJvcj86IHN0cmluZyB9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IHBsYXQgPSBwbGF0Zm9ybSgpO1xuICAgIGNvbnN0IGNtZCA9IHBsYXQgPT09ICdkYXJ3aW4nID8gJ29wZW4nXG4gICAgICA6IHBsYXQgPT09ICd3aW4zMicgPyAnc3RhcnQnXG4gICAgICA6ICd4ZGctb3Blbic7XG5cbiAgICAvLyBTZWN1cml0eTogdXNlIGV4ZWNGaWxlIHdpdGggVVJMIGFzIGFyZ3VtZW50IGFycmF5LCBub3Qgc3RyaW5nIGludGVycG9sYXRpb25cbiAgICBjb25zdCB1cmxTdHIgPSBTdHJpbmcodXJsKTtcbiAgICAvLyBBY2NlcHQgbG9jYWxob3N0LCAxMjcuMC4wLjEsIGFuZCAqLmxvY2FsaG9zdCBzdWJkb21haW5zIChSRkMgNjc2MSlcbiAgICBpZiAoIS9eaHR0cHM/OlxcL1xcLyhsb2NhbGhvc3R8MTI3XFwuMFxcLjBcXC4xfFtcXHctXStcXC5sb2NhbGhvc3QpWzovXS8udGVzdCh1cmxTdHIpKSB7XG4gICAgICByZXNvbHZlKHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiAnVVJMIG11c3QgYmUgYSBsb2NhbGhvc3QgSFRUUCBVUkwnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBleGVjRmlsZShjbWQsIFt1cmxTdHJdLCAoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBbV2ViVUldIENvdWxkIG5vdCBhdXRvLW9wZW4gYnJvd3NlcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgcmVzb2x2ZSh7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogZXJyLm1lc3NhZ2UgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKHsgc3VjY2VzczogdHJ1ZSB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogU3RhcnQgdGhlIHBvcnRmb2xpbyB3ZWIgc2VydmVyLlxuICpcbiAqIEJpbmRzIHRvIDEyNy4wLjAuMSBvbmx5IChsb2NhbGhvc3QpLiBTZXJ2ZXMgdGhlIHBvcnRmb2xpbyBicm93c2VyXG4gKiBmcm9udGVuZCBhbmQgQVBJIHJvdXRlcyBmb3IgcmVhZGluZyBlbGVtZW50cy5cbiAqXG4gKiBJZGVtcG90ZW50OiBpZiB0aGUgc2VydmVyIGlzIGFscmVhZHkgcnVubmluZywgb3B0aW9uYWxseSBvcGVucyB0aGVcbiAqIGJyb3dzZXIgd2l0aG91dCBzdGFydGluZyBhIHNlY29uZCBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFNlcnZlciBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyBIb29rcyBmb3IgREkgd2lyaW5nIChsb2cgYnJvYWRjYXN0LCBtZXRyaWNzIG9uU25hcHNob3QpXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGFydFdlYlNlcnZlcihvcHRpb25zOiBXZWJTZXJ2ZXJPcHRpb25zKTogUHJvbWlzZTxXZWJTZXJ2ZXJSZXN1bHQ+IHtcbiAgY29uc3QgcG9ydCA9IG9wdGlvbnMucG9ydCB8fCBERUZBVUxUX1BPUlQ7XG4gIGNvbnN0IHJlc3VsdDogV2ViU2VydmVyUmVzdWx0ID0ge307XG5cbiAgaWYgKHNlcnZlclJ1bm5pbmcpIHtcbiAgICBpZiAob3B0aW9ucy5vcGVuQnJvd3Nlcikge1xuICAgICAgb3BlbkluQnJvd3NlcihgaHR0cDovLyR7Q09OU09MRV9IT1NUfToke3NlcnZlclBvcnR9YCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBjb25zdCBhcHAgPSBleHByZXNzKCk7XG4gIHJlc3VsdC5hcHAgPSBhcHA7XG4gIGFwcC5kaXNhYmxlKCd4LXBvd2VyZWQtYnknKTtcblxuICAvLyBTZWN1cml0eSBoZWFkZXJzXG4gIGFwcC51c2UoKF9yZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgIHJlcy5zZXRIZWFkZXIoJ1gtQ29udGVudC1UeXBlLU9wdGlvbnMnLCAnbm9zbmlmZicpO1xuICAgIHJlcy5zZXRIZWFkZXIoJ1gtRnJhbWUtT3B0aW9ucycsICdERU5ZJyk7XG4gICAgcmVzLnNldEhlYWRlcignWC1YU1MtUHJvdGVjdGlvbicsICcxOyBtb2RlPWJsb2NrJyk7XG4gICAgcmVzLnNldEhlYWRlcignUmVmZXJyZXItUG9saWN5JywgJ25vLXJlZmVycmVyJyk7XG4gICAgcmVzLnNldEhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJywgYGh0dHA6Ly8ke0NPTlNPTEVfSE9TVH06JHtwb3J0fWApO1xuICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5JywgW1xuICAgICAgXCJkZWZhdWx0LXNyYyAnc2VsZidcIixcbiAgICAgIFwic2NyaXB0LXNyYyAnc2VsZicgY2RuLmpzZGVsaXZyLm5ldCBjZG5qcy5jbG91ZGZsYXJlLmNvbVwiLFxuICAgICAgXCJzdHlsZS1zcmMgJ3NlbGYnICd1bnNhZmUtaW5saW5lJyBjZG5qcy5jbG91ZGZsYXJlLmNvbSBjZG4uanNkZWxpdnIubmV0XCIsXG4gICAgICBcImNvbm5lY3Qtc3JjICdzZWxmJyByYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tXCIsXG4gICAgICBcImZvbnQtc3JjICdzZWxmJ1wiLFxuICAgIF0uam9pbignOyAnKSk7XG4gICAgbmV4dCgpO1xuICB9KTtcblxuICAvLyBTZXR1cCByb3V0ZXM6IGF1dG8taW5zdGFsbCBEb2xsaG91c2VNQ1AgdG8gTUNQIGNsaWVudHMgKG1vdW50IEJFRk9SRSBBUEkgcm91dGVzKVxuICAvLyBCb2R5IGxpbWl0IHNjb3BlZCB0byBzZXR1cCByb3V0ZXMgb25seSDigJQgaW5nZXN0IHJvdXRlcyBuZWVkIDFtYiBmb3IgZm9sbG93ZXIgbG9nIGZvcndhcmRpbmdcbiAgY29uc3Qgc2V0dXBKc29uUGFyc2VyID0gZXhwcmVzcy5qc29uKHsgbGltaXQ6IFNFVFVQX0JPRFlfTElNSVQsIHR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyB9KTtcbiAgY29uc3QgeyBpbnN0YWxsSGFuZGxlciwgb3BlbkNvbmZpZ0hhbmRsZXIsIHZlcnNpb25IYW5kbGVyLCBtY3BiUmVkaXJlY3RIYW5kbGVyLCBkZXRlY3RIYW5kbGVyIH0gPSBjcmVhdGVTZXR1cFJvdXRlcygpO1xuICBhcHAucG9zdCgnL2FwaS9zZXR1cC9pbnN0YWxsJywgc2V0dXBKc29uUGFyc2VyLCBpbnN0YWxsSGFuZGxlcik7XG4gIGFwcC5wb3N0KCcvYXBpL3NldHVwL29wZW4tY29uZmlnJywgc2V0dXBKc29uUGFyc2VyLCBvcGVuQ29uZmlnSGFuZGxlcik7XG4gIGFwcC5nZXQoJy9hcGkvc2V0dXAvdmVyc2lvbicsIHZlcnNpb25IYW5kbGVyKTtcbiAgYXBwLmdldCgnL2FwaS9zZXR1cC9tY3BiJywgbWNwYlJlZGlyZWN0SGFuZGxlcik7XG4gIGFwcC5nZXQoJy9hcGkvc2V0dXAvZGV0ZWN0JywgZGV0ZWN0SGFuZGxlcik7XG4gIGxvZ2dlci5pbmZvKCdbV2ViVUldIFNldHVwIHJvdXRlcyBtb3VudGVkIGF0IC9hcGkvc2V0dXAnKTtcblxuICAvLyBBUEkgcm91dGVzIOKAlCB1c2UgTUNQLUFRTCBnYXRld2F5IHdoZW4gaGFuZGxlciBpcyBhdmFpbGFibGUgKElzc3VlICM3OTYpXG4gIGlmIChvcHRpb25zLm1jcEFxbEhhbmRsZXIpIHtcbiAgICBhcHAudXNlKCcvYXBpJywgY3JlYXRlR2F0ZXdheUFwaVJvdXRlcyhvcHRpb25zLm1jcEFxbEhhbmRsZXIsIG9wdGlvbnMucG9ydGZvbGlvRGlyKSk7XG5cbiAgICAvLyBQZXJtaXNzaW9uIGV2YWx1YXRpb24gcm91dGVzIChQT1NUIC9ldmFsdWF0ZV9wZXJtaXNzaW9uLCBHRVQgL3Blcm1pc3Npb25zL3N0YXR1cylcbiAgICBjb25zdCB7IHJlZ2lzdGVyUGVybWlzc2lvblJvdXRlcyB9ID0gYXdhaXQgaW1wb3J0KCcuL3JvdXRlcy9wZXJtaXNzaW9uUm91dGVzLmpzJyk7XG4gICAgY29uc3QgcGVybVJvdXRlciA9IChhd2FpdCBpbXBvcnQoJ2V4cHJlc3MnKSkuUm91dGVyKCk7XG4gICAgcmVnaXN0ZXJQZXJtaXNzaW9uUm91dGVzKHBlcm1Sb3V0ZXIsIG9wdGlvbnMubWNwQXFsSGFuZGxlcik7XG4gICAgYXBwLnVzZSgnL2FwaScsIHBlcm1Sb3V0ZXIpO1xuXG4gICAgbG9nZ2VyLmluZm8oJ1tXZWJVSV0gQVBJIHJvdXRlcyB1c2luZyBNQ1AtQVFMIEdhdGV3YXkgKyBwZXJtaXNzaW9uIHJvdXRlcycpO1xuICB9IGVsc2Uge1xuICAgIGFwcC51c2UoJy9hcGknLCBjcmVhdGVBcGlSb3V0ZXMob3B0aW9ucy5wb3J0Zm9saW9EaXIpKTtcbiAgICBsb2dnZXIud2FybignW1dlYlVJXSBBUEkgcm91dGVzIHVzaW5nIGRpcmVjdCBmaWxlc3lzdGVtIGFjY2VzcyAobm8gTUNQLUFRTCBoYW5kbGVyIGF2YWlsYWJsZSknKTtcbiAgfVxuXG4gIC8vIENvbnNvbGUgcm91dGVzOiBsb2dzLCBtZXRyaWNzLCBoZWFsdGhcbiAgbGV0IGxvZ1JvdXRlczogTG9nUm91dGVzUmVzdWx0IHwgdW5kZWZpbmVkO1xuICBsZXQgbWV0cmljc1JvdXRlczogTWV0cmljc1JvdXRlc1Jlc3VsdCB8IHVuZGVmaW5lZDtcblxuICBpZiAob3B0aW9ucy5tZW1vcnlTaW5rKSB7XG4gICAgbG9nUm91dGVzID0gY3JlYXRlTG9nUm91dGVzKG9wdGlvbnMubWVtb3J5U2luayk7XG4gICAgYXBwLnVzZSgnL2FwaScsIGxvZ1JvdXRlcy5yb3V0ZXIpO1xuICAgIHJlc3VsdC5sb2dCcm9hZGNhc3QgPSBsb2dSb3V0ZXMuYnJvYWRjYXN0O1xuICAgIGxvZ2dlci5pbmZvKCdbV2ViVUldIExvZyB2aWV3ZXIgcm91dGVzIG1vdW50ZWQgYXQgL2FwaS9sb2dzJyk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5tZXRyaWNzU2luaykge1xuICAgIG1ldHJpY3NSb3V0ZXMgPSBjcmVhdGVNZXRyaWNzUm91dGVzKG9wdGlvbnMubWV0cmljc1NpbmspO1xuICAgIGFwcC51c2UoJy9hcGknLCBtZXRyaWNzUm91dGVzLnJvdXRlcik7XG4gICAgcmVzdWx0Lm1ldHJpY3NPblNuYXBzaG90ID0gbWV0cmljc1JvdXRlcy5vblNuYXBzaG90O1xuICAgIGxvZ2dlci5pbmZvKCdbV2ViVUldIE1ldHJpY3Mgcm91dGVzIG1vdW50ZWQgYXQgL2FwaS9tZXRyaWNzJyk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5tZW1vcnlTaW5rKSB7XG4gICAgY29uc3QgaGVhbHRoUm91dGVyID0gY3JlYXRlSGVhbHRoUm91dGVzKHtcbiAgICAgIG1lbW9yeVNpbms6IG9wdGlvbnMubWVtb3J5U2luayxcbiAgICAgIG1ldHJpY3NTaW5rOiBvcHRpb25zLm1ldHJpY3NTaW5rLFxuICAgICAgbG9nQ2xpZW50Q291bnQ6IGxvZ1JvdXRlcyA/IGxvZ1JvdXRlcy5jbGllbnRDb3VudCA6ICgpID0+IDAsXG4gICAgICBtZXRyaWNzQ2xpZW50Q291bnQ6IG1ldHJpY3NSb3V0ZXMgPyBtZXRyaWNzUm91dGVzLmNsaWVudENvdW50IDogKCkgPT4gMCxcbiAgICB9KTtcbiAgICBhcHAudXNlKCcvYXBpJywgaGVhbHRoUm91dGVyKTtcbiAgfVxuXG4gIC8vIFNlcnZlIH4vLmRvbGxob3VzZS9wYWdlcy8gYXQgL3BhZ2VzLyDigJQgZGFzaGJvYXJkcywgZ2VuZXJhdGVkIGNvbnRlbnQsIHN0YWNrIHZpZXdzXG4gIGNvbnN0IHBhZ2VzRGlyID0gam9pbihkaXJuYW1lKG9wdGlvbnMucG9ydGZvbGlvRGlyKSwgJ3BhZ2VzJyk7XG4gIG1rZGlyKHBhZ2VzRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KS5jYXRjaChlcnIgPT4ge1xuICAgIGxvZ2dlci53YXJuKGBbV2ViVUldIENvdWxkIG5vdCBjcmVhdGUgcGFnZXMgZGlyZWN0b3J5OiAkeyhlcnIgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gIH0pO1xuICBhcHAudXNlKCcvcGFnZXMnLCBleHByZXNzLnN0YXRpYyhwYWdlc0RpcikpO1xuXG4gIC8qKlxuICAgKiBHRVQgL2FwaS9wYWdlc1xuICAgKiBMaXN0cyBhdmFpbGFibGUgSFRNTCBwYWdlcyBpbiB+Ly5kb2xsaG91c2UvcGFnZXMvLlxuICAgKiBSZXR1cm5zIHBhZ2UgbmFtZXMgYW5kIHRoZWlyIFVSTHMgZm9yIHRoZSBtYW5hZ2VtZW50IGNvbnNvbGUuXG4gICAqL1xuICBhcHAuZ2V0KCcvYXBpL3BhZ2VzJywgYXN5bmMgKF9yZXEsIHJlcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHJlYWRkaXIocGFnZXNEaXIpO1xuICAgICAgY29uc3QgcGFnZXMgPSBmaWxlc1xuICAgICAgICAuZmlsdGVyKGYgPT4gIWYuc3RhcnRzV2l0aCgnLicpICYmIEFMTE9XRURfUEFHRV9FWFRFTlNJT05TLmhhcyhleHRuYW1lKGYpKSlcbiAgICAgICAgLm1hcChmID0+ICh7IG5hbWU6IGYsIHVybDogYC9wYWdlcy8ke2Z9YCB9KSk7XG4gICAgICByZXMuanNvbih7IHBhZ2VzLCBkaXJlY3Rvcnk6IHBhZ2VzRGlyIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmVzLmpzb24oeyBwYWdlczogW10sIGRpcmVjdG9yeTogcGFnZXNEaXIgfSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBBZGRpdGlvbmFsIHJvdXRlcnMgKGUuZy4sIHVuaWZpZWQgY29uc29sZSBpbmdlc3Qgcm91dGVzKSDigJQgbXVzdCBtb3VudCBiZWZvcmUgU1BBIGZhbGxiYWNrXG4gIG9wdGlvbnMuYWRkaXRpb25hbFJvdXRlcnM/LmZvckVhY2gocm91dGVyID0+IGFwcC51c2Uocm91dGVyKSk7XG5cbiAgLy8gU3RhdGljIGZyb250ZW5kIGZpbGVzXG4gIGNvbnN0IHB1YmxpY0RpciA9IGpvaW4oX19kaXJuYW1lLCAncHVibGljJyk7XG4gIGFwcC51c2UoZXhwcmVzcy5zdGF0aWMocHVibGljRGlyKSk7XG5cbiAgLy8gU1BBIGZhbGxiYWNrXG4gIGFwcC5nZXQoJy97KnBhdGh9JywgKHJlcSwgcmVzKSA9PiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSByZXEucGF0aC5ub3JtYWxpemUoJ05GQycpO1xuICAgIGlmIChub3JtYWxpemVkUGF0aC5zdGFydHNXaXRoKCcvYXBpLycpKSB7XG4gICAgICByZXMuc3RhdHVzKDQwNCkuanNvbih7IGVycm9yOiBgQVBJIHJvdXRlIG5vdCBmb3VuZDogJHtub3JtYWxpemVkUGF0aH1gIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobm9ybWFsaXplZFBhdGguc3RhcnRzV2l0aCgnL3BhZ2VzLycpKSB7XG4gICAgICByZXMuc3RhdHVzKDQwNCkuanNvbih7IGVycm9yOiBgUGFnZSBub3QgZm91bmQ6ICR7bm9ybWFsaXplZFBhdGh9YCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmVzLnNlbmRGaWxlKGpvaW4ocHVibGljRGlyLCAnaW5kZXguaHRtbCcpKTtcbiAgfSk7XG5cbiAgLy8gR2xvYmFsIGVycm9yIGhhbmRsZXIg4oCUIGNhdGNoIEV4cHJlc3MgZXJyb3JzIGFuZCByb3V0ZSB0byBsb2dnZXIgaW5zdGVhZCBvZiB0ZXJtaW5hbC5cbiAgLy8gV2l0aG91dCB0aGlzLCBFeHByZXNzIGR1bXBzIHN0YWNrIHRyYWNlcyB0byBzdGRlcnIgKHZpc2libGUgaW4gLS13ZWIgdGVybWluYWwpLlxuICAvLyBBbGwgZXJyb3JzIHN0aWxsIGFwcGVhciBpbiB0aGUgbWFuYWdlbWVudCBjb25zb2xlJ3MgTG9ncyB0YWIgdmlhIE1lbW9yeUxvZ1NpbmsuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYXBwLnVzZSgoZXJyOiBFcnJvciwgX3JlcTogaW1wb3J0KCdleHByZXNzJykuUmVxdWVzdCwgcmVzOiBpbXBvcnQoJ2V4cHJlc3MnKS5SZXNwb25zZSwgX25leHQ6IGltcG9ydCgnZXhwcmVzcycpLk5leHRGdW5jdGlvbikgPT4ge1xuICAgIGNvbnN0IHN0YXR1cyA9IChlcnIgYXMgYW55KS5zdGF0dXMgfHwgKGVyciBhcyBhbnkpLnN0YXR1c0NvZGUgfHwgNTAwO1xuICAgIGxvZ2dlci53YXJuKGBbV2ViVUldICR7ZXJyLm5hbWV9OiAke2Vyci5tZXNzYWdlfWApO1xuICAgIGlmICghcmVzLmhlYWRlcnNTZW50KSB7XG4gICAgICByZXMuc3RhdHVzKHN0YXR1cykuanNvbih7IGVycm9yOiBlcnIubWVzc2FnZSB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIEJpbmQgdG8gbG9jYWxob3N0IG9ubHkg4oCUIGhhbmRsZSBwb3J0IGNvbmZsaWN0cyBncmFjZWZ1bGx5XG4gIC8vIE5PVEU6IFVzZSBzdGRlcnIgZm9yIHRlcm1pbmFsIG91dHB1dCwgbm90IHN0ZG91dC4gSW4gTUNQIHN0ZGlvIG1vZGUsIHN0ZG91dFxuICAvLyBpcyByZXNlcnZlZCBmb3IgSlNPTi1SUEMgbWVzc2FnZXMg4oCUIGFueSBub24tSlNPTiBvdXRwdXQgY29ycnVwdHMgdGhlIHByb3RvY29sLlxuICAvLyBzdGRlcnIgaXMgc2FmZSBmb3IgaHVtYW4tcmVhZGFibGUgbWVzc2FnZXMgaW4gYm90aCBNQ1AgYW5kIHN0YW5kYWxvbmUgbW9kZXMuXG4gIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgaHR0cFNlcnZlciA9IGFwcC5saXN0ZW4ocG9ydCwgJzEyNy4wLjAuMScsICgpID0+IHtcbiAgICAgIHNlcnZlclJ1bm5pbmcgPSB0cnVlO1xuICAgICAgc2VydmVyUG9ydCA9IHBvcnQ7XG4gICAgICBjb25zdCB1cmwgPSBgaHR0cDovLyR7Q09OU09MRV9IT1NUfToke3BvcnR9YDtcbiAgICAgIGNvbnN0IGZhbGxiYWNrVXJsID0gYGh0dHA6Ly8xMjcuMC4wLjE6JHtwb3J0fWA7XG4gICAgICBsb2dnZXIuaW5mbyhgW1dlYlVJXSBNYW5hZ2VtZW50IGNvbnNvbGUgcnVubmluZyBhdCAke3VybH1gKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFxcbiAgRG9sbGhvdXNlTUNQIE1hbmFnZW1lbnQgQ29uc29sZVxcbiAgJHt1cmx9XFxuICAke2ZhbGxiYWNrVXJsfSAoZmFsbGJhY2spXFxuYCk7XG4gICAgICBjb25zb2xlLmVycm9yKGAgIFR5cGUgXCJxXCIgb3IgXCJxdWl0XCIgdG8gZXhpdC5cXG5gKTtcblxuICAgICAgaWYgKG9wdGlvbnMub3BlbkJyb3dzZXIpIHtcbiAgICAgICAgb3BlbkluQnJvd3Nlcih1cmwpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0pO1xuICAgIGh0dHBTZXJ2ZXIub24oJ2Vycm9yJywgKGVycjogTm9kZUpTLkVycm5vRXhjZXB0aW9uKSA9PiB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFQUREUklOVVNFJykge1xuICAgICAgICBjb25zdCB1cmwgPSBgaHR0cDovLyR7Q09OU09MRV9IT1NUfToke3BvcnR9YDtcbiAgICAgICAgbG9nZ2VyLmluZm8oYFtXZWJVSV0gUG9ydCAke3BvcnR9IGFscmVhZHkgaW4gdXNlIOKAlCBvcGVuaW5nIGV4aXN0aW5nIGNvbnNvbGVgKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihgXFxuICBEb2xsaG91c2VNQ1AgTWFuYWdlbWVudCBDb25zb2xlIChleGlzdGluZyBpbnN0YW5jZSlcXG4gICR7dXJsfVxcbmApO1xuICAgICAgICBpZiAob3B0aW9ucy5vcGVuQnJvd3Nlcikge1xuICAgICAgICAgIG9wZW5JbkJyb3dzZXIodXJsKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKGBbV2ViVUldIEZhaWxlZCB0byBiaW5kIHBvcnQgJHtwb3J0fTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoKTsgLy8gV2ViIGNvbnNvbGUgaXMgb3B0aW9uYWwg4oCUIGRvbid0IGJsb2NrIHN0YXJ0dXBcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBPcGVuIHRoZSBwb3J0Zm9saW8gYnJvd3NlciBmcm9tIHdpdGhpbiB0aGUgTUNQIHNlcnZlciBwcm9jZXNzLlxuICpcbiAqIFN0YXJ0cyB0aGUgd2ViIHNlcnZlciBpZiBub3QgYWxyZWFkeSBydW5uaW5nLCB0aGVuIG9wZW5zIHRoZSBzeXN0ZW1cbiAqIGJyb3dzZXIgdG8gdGhlIHBvcnRmb2xpbyBVSS4gUmV0dXJucyBhIHJlc3VsdCBvYmplY3QgaW5kaWNhdGluZ1xuICogd2hldGhlciB0aGUgc2VydmVyIHN0YXJ0ZWQgYW5kIHRoZSBicm93c2VyIG9wZW5lZCBzdWNjZXNzZnVsbHkuXG4gKlxuICogQ2FsbGVkIGJ5IHRoZSBgb3Blbl9wb3J0Zm9saW9fYnJvd3NlcmAgTUNQLUFRTCBvcGVyYXRpb24gKElzc3VlICM3NzQpLlxuICpcbiAqIEBwYXJhbSBwb3J0Zm9saW9EaXIgLSBQYXRoIHRvIHRoZSBwb3J0Zm9saW8gZGlyZWN0b3J5IChlLmcuLCB+Ly5kb2xsaG91c2UvcG9ydGZvbGlvKVxuICogQHBhcmFtIHBvcnQgLSBQb3J0IHRvIGJpbmQgdG8gKGRlZmF1bHQ6IDM5MzkpXG4gKiBAcmV0dXJucyBSZXN1bHQgd2l0aCBVUkwsIHNlcnZlciBzdGF0dXMsIGFuZCBicm93c2VyIG9wZW4gc3RhdHVzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuUG9ydGZvbGlvQnJvd3Nlcihwb3J0Zm9saW9EaXI6IHN0cmluZywgcG9ydD86IG51bWJlciwgbWNwQXFsSGFuZGxlcj86IE1DUEFRTEhhbmRsZXIsIHRhYj86IHN0cmluZywgdXJsUGFyYW1zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFByb21pc2U8QnJvd3Nlck9wZW5SZXN1bHQ+IHtcbiAgY29uc3QgdGFyZ2V0UG9ydCA9IHBvcnQgfHwgREVGQVVMVF9QT1JUO1xuICBjb25zdCBiYXNlVXJsID0gYGh0dHA6Ly8ke0NPTlNPTEVfSE9TVH06JHt0YXJnZXRQb3J0fWA7XG5cbiAgLy8gQnVpbGQgVVJMIHdpdGggb3B0aW9uYWwgdGFiIGhhc2ggYW5kIHF1ZXJ5IHBhcmFtZXRlcnNcbiAgLy8gRm9ybWF0OiBodHRwOi8vaG9zdDpwb3J0LyN0YWI/a2V5PXZhbHVlJmtleT12YWx1ZVxuICBsZXQgdXJsID0gYmFzZVVybDtcbiAgaWYgKHRhYikge1xuICAgIGNvbnN0IHFzID0gdXJsUGFyYW1zID8gbmV3IFVSTFNlYXJjaFBhcmFtcyh1cmxQYXJhbXMpLnRvU3RyaW5nKCkgOiAnJztcbiAgICB1cmwgPSBgJHtiYXNlVXJsfS8jJHt0YWJ9JHtxcyA/ICc/JyArIHFzIDogJyd9YDtcbiAgfSBlbHNlIGlmICh1cmxQYXJhbXMgJiYgT2JqZWN0LmtleXModXJsUGFyYW1zKS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgcXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHVybFBhcmFtcykudG9TdHJpbmcoKTtcbiAgICB1cmwgPSBgJHtiYXNlVXJsfS8jcG9ydGZvbGlvPyR7cXN9YDtcbiAgfVxuXG4gIGNvbnN0IGFscmVhZHlSdW5uaW5nID0gc2VydmVyUnVubmluZztcblxuICBpZiAoIXNlcnZlclJ1bm5pbmcpIHtcbiAgICBhd2FpdCBzdGFydFdlYlNlcnZlcih7XG4gICAgICBwb3J0Zm9saW9EaXIsXG4gICAgICBwb3J0OiB0YXJnZXRQb3J0LFxuICAgICAgb3BlbkJyb3dzZXI6IGZhbHNlLCAvLyBXZSdsbCBvcGVuIG1hbnVhbGx5IGJlbG93IHRvIGNhcHR1cmUgdGhlIHJlc3VsdFxuICAgICAgbWNwQXFsSGFuZGxlcixcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGJyb3dzZXJSZXN1bHQgPSBhd2FpdCBvcGVuSW5Ccm93c2VyKHVybCk7XG5cbiAgcmV0dXJuIHtcbiAgICB1cmwsXG4gICAgYWxyZWFkeVJ1bm5pbmcsXG4gICAgYnJvd3Nlck9wZW5lZDogYnJvd3NlclJlc3VsdC5zdWNjZXNzLFxuICAgIC4uLihicm93c2VyUmVzdWx0LmVycm9yID8geyB3YXJuaW5nOiBgQnJvd3NlciBjb3VsZCBub3QgYmUgb3BlbmVkIGF1dG9tYXRpY2FsbHk6ICR7YnJvd3NlclJlc3VsdC5lcnJvcn0uIE9wZW4gJHt1cmx9IG1hbnVhbGx5LmAgfSA6IHt9KSxcbiAgfTtcbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dollhousemcp/mcp-server",
3
- "version": "2.0.9",
3
+ "version": "2.0.10",
4
4
  "description": "DollhouseMCP - A Model Context Protocol (MCP) server that enables dynamic AI persona management from markdown files, allowing Claude and other compatible AI assistants to activate and switch between different behavioral personas.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -192,7 +192,7 @@
192
192
  "globals": "^17.4.0",
193
193
  "jest": "^30.2.0",
194
194
  "supertest": "^7.2.2",
195
- "ts-jest": "^29.4.5",
195
+ "ts-jest": "^29.4.9",
196
196
  "ts-jest-resolver": "^2.0.1",
197
197
  "tsx": "^4.21.0",
198
198
  "typescript": "^5.9.3"
package/server.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "name": "io.github.DollhouseMCP/mcp-server",
4
4
  "title": "DollhouseMCP",
5
5
  "description": "OSS to create Personas, Skills, Templates, Agents, and Memories to customize your AI experience.",
6
- "version": "2.0.8",
6
+ "version": "2.0.10",
7
7
  "homepage": "https://dollhousemcp.com",
8
8
  "repository": {
9
9
  "type": "git",
@@ -29,7 +29,7 @@
29
29
  {
30
30
  "registryType": "npm",
31
31
  "identifier": "@dollhousemcp/mcp-server",
32
- "version": "2.0.8",
32
+ "version": "2.0.10",
33
33
  "transport": {
34
34
  "type": "stdio"
35
35
  }