@dollhousemcp/mcp-server 2.0.23 → 2.0.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.0.25] - 2026-04-16
4
+
5
+ Restore audit markdown export and harden direct commercial license email delivery
6
+
7
+ ## [2.0.24] - 2026-04-16
8
+
9
+ - Fix web console authority convergence so newer sessions replace stale listeners, register correctly, and serve current assets.
10
+
3
11
  ## [2.0.23] - 2026-04-16
4
12
 
5
13
  - Expand npm package keywords for broader discovery across MCP clients, AI tool ecosystems, and Dollhouse element primitives.
@@ -2,8 +2,8 @@
2
2
  * Auto-generated file - DO NOT EDIT
3
3
  * Generated at build time by scripts/generate-version.js
4
4
  */
5
- export declare const PACKAGE_VERSION = "2.0.23";
6
- export declare const BUILD_TIMESTAMP = "2026-04-16T16:19:30.762Z";
5
+ export declare const PACKAGE_VERSION = "2.0.25";
6
+ export declare const BUILD_TIMESTAMP = "2026-04-16T20:24:44.649Z";
7
7
  export declare const BUILD_TYPE: 'npm' | 'git';
8
8
  export declare const PACKAGE_NAME = "@dollhousemcp/mcp-server";
9
9
  //# sourceMappingURL=version.d.ts.map
@@ -2,8 +2,8 @@
2
2
  * Auto-generated file - DO NOT EDIT
3
3
  * Generated at build time by scripts/generate-version.js
4
4
  */
5
- export const PACKAGE_VERSION = '2.0.23';
6
- export const BUILD_TIMESTAMP = '2026-04-16T16:19:30.762Z';
5
+ export const PACKAGE_VERSION = '2.0.25';
6
+ export const BUILD_TIMESTAMP = '2026-04-16T20:24:44.649Z';
7
7
  export const BUILD_TYPE = 'npm';
8
8
  export const PACKAGE_NAME = '@dollhousemcp/mcp-server';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcyLjAuMjMnO1xuZXhwb3J0IGNvbnN0IEJVSUxEX1RJTUVTVEFNUCA9ICcyMDI2LTA0LTE2VDE2OjE5OjMwLjc2MlonO1xuZXhwb3J0IGNvbnN0IEJVSUxEX1RZUEU6ICducG0nIHwgJ2dpdCcgPSAnbnBtJztcbmV4cG9ydCBjb25zdCBQQUNLQUdFX05BTUUgPSAnQGRvbGxob3VzZW1jcC9tY3Atc2VydmVyJztcbiJdfQ==
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcyLjAuMjUnO1xuZXhwb3J0IGNvbnN0IEJVSUxEX1RJTUVTVEFNUCA9ICcyMDI2LTA0LTE2VDIwOjI0OjQ0LjY0OVonO1xuZXhwb3J0IGNvbnN0IEJVSUxEX1RZUEU6ICducG0nIHwgJ2dpdCcgPSAnbnBtJztcbmV4cG9ydCBjb25zdCBQQUNLQUdFX05BTUUgPSAnQGRvbGxob3VzZW1jcC9tY3Atc2VydmVyJztcbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"StaleProcessRecovery.d.ts","sourceRoot":"","sources":["../../../src/web/console/StaleProcessRecovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA8DH,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EACF,gBAAgB,GAChB,gBAAgB,GAChB,uBAAuB,GACvB,oBAAoB,GACpB,YAAY,GACZ,cAAc,GACd,aAAa,GACb,eAAe,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGlE;AA+LD;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAyBxE;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGlF;AAED,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,uBAAuB,CAAC,CAyBlC;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAoCrE"}
1
+ {"version":3,"file":"StaleProcessRecovery.d.ts","sourceRoot":"","sources":["../../../src/web/console/StaleProcessRecovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA8DH,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EACF,gBAAgB,GAChB,gBAAgB,GAChB,uBAAuB,GACvB,oBAAoB,GACpB,YAAY,GACZ,cAAc,GACd,aAAa,GACb,eAAe,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGlE;AA+LD;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAwCxE;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGlF;AAED,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,uBAAuB,CAAC,CAyBlC;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAoCrE"}
@@ -234,19 +234,33 @@ export async function findPidOnPort(port) {
234
234
  const { execFile: execFileCb } = await import('node:child_process');
235
235
  const { promisify } = await import('node:util');
236
236
  const execFileAsync = promisify(execFileCb);
237
- // Try lsof first (macOS + most Linux), fall back to fuser (minimal Linux/Docker)
237
+ // Query only LISTEN sockets so established client connections to the console
238
+ // don't get mistaken for the owning leader process.
238
239
  for (const cmd of [
239
- { bin: 'lsof', args: ['-ti', `:${port}`] },
240
- { bin: 'fuser', args: [`${port}/tcp`] },
240
+ { bin: 'lsof', args: ['-nP', '-iTCP:' + String(port), '-sTCP:LISTEN', '-t'] },
241
+ { bin: 'ss', args: ['-ltnp', `sport = :${port}`] },
242
+ { bin: 'fuser', args: ['-n', 'tcp', String(port)] },
241
243
  ]) {
242
244
  try {
243
245
  const { stdout, stderr } = await execFileAsync(cmd.bin, cmd.args, { timeout: COMMAND_TIMEOUT_MS });
244
- // fuser outputs to stderr on some systems
245
246
  const output = (stdout || stderr || '').trim();
246
- const pids = output
247
- .split(/\s+/)
248
- .map((token) => parsePidToken(token))
249
- .filter((pid) => pid !== null);
247
+ if (!output) {
248
+ continue;
249
+ }
250
+ let pids = [];
251
+ if (cmd.bin === 'ss') {
252
+ pids = output
253
+ .split('\n')
254
+ .flatMap((line) => Array.from(line.matchAll(/pid=(\d+)/g), (match) => parsePidToken(match[1])))
255
+ .filter((pid) => pid !== null);
256
+ }
257
+ else {
258
+ // fuser outputs to stderr on some systems; lsof emits one PID per line.
259
+ pids = output
260
+ .split(/\s+/)
261
+ .map((token) => parsePidToken(token))
262
+ .filter((pid) => pid !== null);
263
+ }
250
264
  const otherPid = pids.find(p => p !== process.pid);
251
265
  if (otherPid)
252
266
  return otherPid;
@@ -338,4 +352,4 @@ export async function recoverStalePort(port) {
338
352
  }
339
353
  return outcome.killed;
340
354
  }
341
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhbGVQcm9jZXNzUmVjb3ZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViL2NvbnNvbGUvU3RhbGVQcm9jZXNzUmVjb3ZlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7OztHQVNHO0FBRUgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFakYsOEVBQThFO0FBQzlFLHFFQUFxRTtBQUNyRSxrREFBa0Q7QUFDbEQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUM7QUFDaEMsb0VBQW9FO0FBQ3BFLE1BQU0sZUFBZSxHQUFHLEdBQUcsQ0FBQztBQUM1QixtREFBbUQ7QUFDbkQsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDO0FBQzNCLCtDQUErQztBQUMvQyxNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUM7QUFDNUIsOERBQThEO0FBQzlELE1BQU0scUJBQXFCLEdBQUcsR0FBRyxDQUFDO0FBQ2xDLHdGQUF3RjtBQUN4RixNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBQztBQUNoQyx5RkFBeUY7QUFDekYsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLG9GQUFvRjtBQUNwRixNQUFNLDhCQUE4QixHQUFHLENBQUMsQ0FBQztBQUV6QyxJQUFJLE9BQU8sR0FBeUQsSUFBSSxDQUFDO0FBQ3pFLEtBQUssVUFBVSxTQUFTO0lBQ3RCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQztZQUFDLE9BQU8sR0FBRyxDQUFDLE1BQU0sTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFBQyxDQUFDO1FBQ2pFLE1BQU0sQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFDRCxNQUFNLE1BQU0sR0FBRztJQUNiLElBQUksRUFBRSxLQUFLLEVBQUUsR0FB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LENBQUMsTUFBTTtTQUN2QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0YWxlIHByb2Nlc3MgZGV0ZWN0aW9uIGFuZCByZWNvdmVyeSAoIzE4NTApLlxuICpcbiAqIEZpbmRzIGFuZCBraWxscyB6b21iaWUgRG9sbGhvdXNlTUNQIHByb2Nlc3NlcyB0aGF0IHNxdWF0IG9uIHRoZSBjb25zb2xlXG4gKiBwb3J0IGFmdGVyIHRoZWlyIHNlc3Npb24gaGFzIGVuZGVkLiBVc2VkIGJ5IGJpbmRBbmRMaXN0ZW4gaW4gc2VydmVyLnRzXG4gKiB3aGVuIEVBRERSSU5VU0Ugb2NjdXJzLlxuICpcbiAqIEV4dHJhY3RlZCB0byBhIHN0YW5kYWxvbmUgbW9kdWxlIHNvIGl0IGNhbiBiZSB0ZXN0ZWQgd2l0aG91dCBpbXBvcnRpbmdcbiAqIHRoZSBmdWxsIEV4cHJlc3Mgc2VydmVyIGFuZCBpdHMgZGVwZW5kZW5jeSBjaGFpbi5cbiAqL1xuXG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcblxuLy8gVXNlIGxhenkgaW1wb3J0IGZvciBsb2dnZXIgdG8gYXZvaWQgcHVsbGluZyBpbiB0aGUgZnVsbCBlbnYudHMvY29uZmlnIGNoYWluXG4vLyBhdCBtb2R1bGUgbG9hZCB0aW1lLiBUaGlzIGtlZXBzIHRoZSBtb2R1bGUgaW5kZXBlbmRlbnRseSB0ZXN0YWJsZS5cbi8qKiBUaW1lb3V0IGZvciBsc29mL2Z1c2VyL3BzIHN5c3RlbSBjYWxscyAobXMpICovXG5jb25zdCBDT01NQU5EX1RJTUVPVVRfTVMgPSAxMDAwO1xuLyoqIFBvbGxpbmcgaW50ZXJ2YWwgd2hlbiB3YWl0aW5nIGZvciBTSUdURVJNIHRvIHRha2UgZWZmZWN0IChtcykgKi9cbmNvbnN0IFNJR1RFUk1fUE9MTF9NUyA9IDMwMDtcbi8qKiBOdW1iZXIgb2YgcG9sbHMgYmVmb3JlIGVzY2FsYXRpbmcgdG8gU0lHS0lMTCAqL1xuY29uc3QgS0lMTF9QT0xMX0NPVU5UID0gMTA7XG4vKiogV2FpdCBhZnRlciBTSUdLSUxMIGJlZm9yZSByZXR1cm5pbmcgKG1zKSAqL1xuY29uc3QgU0lHS0lMTF9XQUlUX01TID0gNTAwO1xuLyoqIFdhaXQgYmV0d2VlbiBsb2NrIGZpbGUgcmVhZHMgZm9yIFRPQ1RPVSBtaXRpZ2F0aW9uIChtcykgKi9cbmNvbnN0IExPQ0tfUkVDSEVDS19ERUxBWV9NUyA9IDUwMDtcbi8qKiBOdW1iZXIgb2YgbG9jay1maWxlIGNoZWNrcyBiZWZvcmUgZGVjaWRpbmcgdGhlIHBvcnQgaG9sZGVyIGlzIG5vdCBhIGZyZXNoIGxlYWRlci4gKi9cbmNvbnN0IExPQ0tfUkVDSEVDS19BVFRFTVBUUyA9IDI7XG4vKiogUElEIHVzZWQgYnkgdGhlIE9TIGluaXQvbGF1bmNoZCBwcm9jZXNzOyBkaXJlY3QgY2hpbGRyZW4gYXJlIGVmZmVjdGl2ZWx5IG9ycGhhbmVkLiAqL1xuY29uc3QgUk9PVF9QQVJFTlRfUElEID0gMTtcbi8qKiBOdW1iZXIgb2YgYHBzYCBjb2x1bW5zIHJlcXVlc3RlZCBieSBpbnNwZWN0UHJvY2VzczogdXNlciwgcGlkLCBwcGlkLCBjb21tYW5kLiAqL1xuY29uc3QgUFJPQ0VTU19JTlNQRUNUSU9OX0ZJRUxEX0NPVU5UID0gNDtcblxubGV0IF9sb2dnZXI6IHR5cGVvZiBpbXBvcnQoJy4uLy4uL3V0aWxzL2xvZ2dlci5qcycpLmxvZ2dlciB8IG51bGwgPSBudWxsO1xuYXN5bmMgZnVuY3Rpb24gZ2V0TG9nZ2VyKCkge1xuICBpZiAoIV9sb2dnZXIpIHtcbiAgICB0cnkgeyBfbG9nZ2VyID0gKGF3YWl0IGltcG9ydCgnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJykpLmxvZ2dlcjsgfVxuICAgIGNhdGNoIHsgLyogZmFsbGJhY2sgYmVsb3cgKi8gfVxuICB9XG4gIHJldHVybiBfbG9nZ2VyO1xufVxuY29uc3QgbG9nZ2VyID0ge1xuICB3YXJuOiBhc3luYyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgY29uc3QgbCA9IGF3YWl0IGdldExvZ2dlcigpO1xuICAgIGlmIChsKSBsLndhcm4oYXJnc1swXSBhcyBzdHJpbmcsIGFyZ3NbMV0pO1xuICAgIGVsc2UgY29uc29sZS5lcnJvcignW1dBUk5dJywgLi4uYXJncyk7XG4gIH0sXG4gIGluZm86IGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICBjb25zdCBsID0gYXdhaXQgZ2V0TG9nZ2VyKCk7XG4gICAgaWYgKGwpIGwuaW5mbyhhcmdzWzBdIGFzIHN0cmluZywgYXJnc1sxXSk7XG4gICAgZWxzZSBjb25zb2xlLmVycm9yKCdbSU5GT10nLCAuLi5hcmdzKTtcbiAgfSxcbiAgZGVidWc6IGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICBjb25zdCBsID0gYXdhaXQgZ2V0TG9nZ2VyKCk7XG4gICAgaWYgKGwpIGwuZGVidWcoYXJnc1swXSBhcyBzdHJpbmcsIGFyZ3NbMV0pO1xuICB9LFxufTtcblxuY29uc3QgTUNQX0hPU1RfUEFSRU5UX1BBVFRFUk5TID0gW1xuICAvQ2xhdWRlXFwuYXBwXFwvQ29udGVudHNcXC9IZWxwZXJzXFwvZGlzY2xhaW1lci9pLFxuICAvQ29kZXhcXC5hcHBcXC9Db250ZW50c1xcL1Jlc291cmNlc1xcL2NvZGV4IGFwcC1zZXJ2ZXIvaSxcbiAgL0N1cnNvclxcLmFwcFxcLy9pLFxuICAvV2luZHN1cmZcXC5hcHBcXC8vaSxcbl07XG5cbmludGVyZmFjZSBQcm9jZXNzSW5zcGVjdGlvbiB7XG4gIHVzZXI6IHN0cmluZztcbiAgcGlkOiBudW1iZXI7XG4gIHBhcmVudFBpZDogbnVtYmVyO1xuICBjb21tYW5kOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgS2lsbFN0YWxlUHJvY2Vzc091dGNvbWUge1xuICBraWxsZWQ6IGJvb2xlYW47XG4gIHJlYXNvbjpcbiAgICB8ICdpbnNwZWN0X2ZhaWxlZCdcbiAgICB8ICdkaWZmZXJlbnRfdXNlcidcbiAgICB8ICdub3RfZG9sbGhvdXNlX3Byb2Nlc3MnXG4gICAgfCAnYWN0aXZlX2hvc3RfcGFyZW50J1xuICAgIHwgJ3Rlcm1pbmF0ZWQnXG4gICAgfCAnYWxyZWFkeV9kZWFkJ1xuICAgIHwgJ3N0aWxsX2FsaXZlJ1xuICAgIHwgJ3NpZ25hbF9mYWlsZWQnO1xuICBwaWQ6IG51bWJlcjtcbiAgcGFyZW50UGlkPzogbnVtYmVyO1xuICBjb21tYW5kPzogc3RyaW5nO1xuICBwYXJlbnRDb21tYW5kPzogc3RyaW5nO1xuICBkZXRhaWw/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgS2lsbFN0YWxlUHJvY2Vzc09wdGlvbnMge1xuICBhbGxvd0FjdGl2ZUhvc3RQYXJlbnQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWNvZ25pemVkTWNwSG9zdFBhcmVudChjb21tYW5kOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3Qgbm9ybWFsaXplZENvbW1hbmQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShjb21tYW5kKS5ub3JtYWxpemVkQ29udGVudDtcbiAgcmV0dXJuIE1DUF9IT1NUX1BBUkVOVF9QQVRURVJOUy5zb21lKChwYXR0ZXJuKSA9PiBwYXR0ZXJuLnRlc3Qobm9ybWFsaXplZENvbW1hbmQpKTtcbn1cblxuZnVuY3Rpb24gaXNEb2xsaG91c2VQcm9jZXNzQ29tbWFuZChjbWRMaW5lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3Qgbm9ybWFsaXplZENvbW1hbmQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShjbWRMaW5lKS5ub3JtYWxpemVkQ29udGVudDtcbiAgY29uc3QgaXNEb2xsaG91c2VCaW4gPSAvKD86XnxcXC8pZG9sbGhvdXNlbWNwKD86XFxzfCQpLy50ZXN0KG5vcm1hbGl6ZWRDb21tYW5kKSB8fFxuICAgIG5vcm1hbGl6ZWRDb21tYW5kLmluY2x1ZGVzKCcuYmluL2RvbGxob3VzZW1jcCcpO1xuICBjb25zdCBpc01jcFNlcnZlckJpbiA9IG5vcm1hbGl6ZWRDb21tYW5kLmluY2x1ZGVzKCcuYmluL21jcC1zZXJ2ZXInKSB8fFxuICAgIC8oPzpkb2xsaG91c2VtY3B8bWNwLXNlcnZlcilbL1xcXFxdZGlzdFsvXFxcXF1pbmRleFxcLmpzLy50ZXN0KG5vcm1hbGl6ZWRDb21tYW5kKTtcbiAgcmV0dXJuIGlzRG9sbGhvdXNlQmluIHx8IGlzTWNwU2VydmVyQmluO1xufVxuXG5mdW5jdGlvbiBwYXJzZVBpZFRva2VuKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIgfCBudWxsIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjb2RlUG9pbnQgPSB2YWx1ZS5jb2RlUG9pbnRBdChpKTtcbiAgICBpZiAoY29kZVBvaW50ID09PSB1bmRlZmluZWQgfHwgY29kZVBvaW50IDwgNDggfHwgY29kZVBvaW50ID4gNTcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHBhcnNlZCA9IE51bWJlci5wYXJzZUludCh2YWx1ZSwgMTApO1xuICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHBhcnNlZCkgfHwgcGFyc2VkIDwgUk9PVF9QQVJFTlRfUElEKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIHBhcnNlZDtcbn1cblxuZnVuY3Rpb24gaXNXaGl0ZXNwYWNlQ2hhcih2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiB2YWx1ZSA9PT0gJyAnIHx8IHZhbHVlID09PSAnXFx0JyB8fCB2YWx1ZSA9PT0gJ1xcbicgfHwgdmFsdWUgPT09ICdcXHInIHx8IHZhbHVlID09PSAnXFxmJyB8fCB2YWx1ZSA9PT0gJ1xcdic7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkS2lsbE91dGNvbWUoXG4gIGtpbGxlZDogYm9vbGVhbixcbiAgcmVhc29uOiBLaWxsU3RhbGVQcm9jZXNzT3V0Y29tZVsncmVhc29uJ10sXG4gIHByb2Nlc3NJbmZvOiBQcm9jZXNzSW5zcGVjdGlvbixcbiAgcGFyZW50Q29tbWFuZD86IHN0cmluZyxcbiAgZGV0YWlsPzogc3RyaW5nLFxuKTogS2lsbFN0YWxlUHJvY2Vzc091dGNvbWUge1xuICByZXR1cm4ge1xuICAgIGtpbGxlZCxcbiAgICByZWFzb24sXG4gICAgcGlkOiBwcm9jZXNzSW5mby5waWQsXG4gICAgcGFyZW50UGlkOiBwcm9jZXNzSW5mby5wYXJlbnRQaWQsXG4gICAgY29tbWFuZDogcHJvY2Vzc0luZm8uY29tbWFuZCxcbiAgICBwYXJlbnRDb21tYW5kLFxuICAgIC4uLihkZXRhaWwgPyB7IGRldGFpbCB9IDoge30pLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRLaWxsR3VhcmRGYWlsdXJlKFxuICBwcm9jZXNzSW5mbzogUHJvY2Vzc0luc3BlY3Rpb24sXG4gIHBvcnQ6IG51bWJlcixcbiAgb3B0aW9uczogS2lsbFN0YWxlUHJvY2Vzc09wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8S2lsbFN0YWxlUHJvY2Vzc091dGNvbWUgfCBudWxsPiB7XG4gIGNvbnN0IGN1cnJlbnRVc2VyID0gKGF3YWl0IGltcG9ydCgnbm9kZTpvcycpKS51c2VySW5mbygpLnVzZXJuYW1lO1xuICBpZiAocHJvY2Vzc0luZm8udXNlciAhPT0gY3VycmVudFVzZXIpIHtcbiAgICBhd2FpdCBsb2dnZXIud2FybihgW1dlYlVJXSBQb3J0ICR7cG9ydH0gaGVsZCBieSBkaWZmZXJlbnQgdXNlciAocGlkICR7cHJvY2Vzc0luZm8ucGlkfSkg4oCUIG5vdCBraWxsaW5nYCk7XG4gICAgcmV0dXJuIGJ1aWxkS2lsbE91dGNvbWUoZmFsc2UsICdkaWZmZXJlbnRfdXNlcicsIHByb2Nlc3NJbmZvKTtcbiAgfVxuXG4gIGlmICghaXNEb2xsaG91c2VQcm9jZXNzQ29tbWFuZChwcm9jZXNzSW5mby5jb21tYW5kKSkge1xuICAgIGF3YWl0IGxvZ2dlci53YXJuKGBbV2ViVUldIFBvcnQgJHtwb3J0fSBoZWxkIGJ5IG5vbi1Eb2xsaG91c2VNQ1AgcHJvY2VzcyAocGlkICR7cHJvY2Vzc0luZm8ucGlkfSkg4oCUIG5vdCBraWxsaW5nYCwge1xuICAgICAgY21kTGluZTogcHJvY2Vzc0luZm8uY29tbWFuZCxcbiAgICB9KTtcbiAgICByZXR1cm4gYnVpbGRLaWxsT3V0Y29tZShmYWxzZSwgJ25vdF9kb2xsaG91c2VfcHJvY2VzcycsIHByb2Nlc3NJbmZvKTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzSW5mby5wYXJlbnRQaWQgPD0gUk9PVF9QQVJFTlRfUElEIHx8ICFpc1BpZEFsaXZlKHByb2Nlc3NJbmZvLnBhcmVudFBpZCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHBhcmVudENvbW1hbmQgPSAoYXdhaXQgZ2V0UHJvY2Vzc0NvbW1hbmQocHJvY2Vzc0luZm8ucGFyZW50UGlkKSkgPz8gdW5kZWZpbmVkO1xuICBpZiAoIW9wdGlvbnMuYWxsb3dBY3RpdmVIb3N0UGFyZW50ICYmIHBhcmVudENvbW1hbmQgJiYgaXNSZWNvZ25pemVkTWNwSG9zdFBhcmVudChwYXJlbnRDb21tYW5kKSkge1xuICAgIGF3YWl0IGxvZ2dlci53YXJuKGBbV2ViVUldIFBvcnQgJHtwb3J0fSBoZWxkIGJ5IGFjdGl2ZSBjbGllbnQtYmFja2VkIERvbGxob3VzZU1DUCBwcm9jZXNzIChwaWQgJHtwcm9jZXNzSW5mby5waWR9KSDigJQgbm90IGtpbGxpbmdgLCB7XG4gICAgICBjbWRMaW5lOiBwcm9jZXNzSW5mby5jb21tYW5kLFxuICAgICAgcGFyZW50UGlkOiBwcm9jZXNzSW5mby5wYXJlbnRQaWQsXG4gICAgICBwYXJlbnRDb21tYW5kLFxuICAgIH0pO1xuICAgIHJldHVybiBidWlsZEtpbGxPdXRjb21lKGZhbHNlLCAnYWN0aXZlX2hvc3RfcGFyZW50JywgcHJvY2Vzc0luZm8sIHBhcmVudENvbW1hbmQpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHRlcm1pbmF0ZVByb2Nlc3MoXG4gIHByb2Nlc3NJbmZvOiBQcm9jZXNzSW5zcGVjdGlvbixcbiAgcG9ydDogbnVtYmVyLFxuICBwYXJlbnRDb21tYW5kPzogc3RyaW5nLFxuKTogUHJvbWlzZTxLaWxsU3RhbGVQcm9jZXNzT3V0Y29tZT4ge1xuICBwcm9jZXNzLmtpbGwocHJvY2Vzc0luZm8ucGlkLCAnU0lHVEVSTScpO1xuICBsb2dnZXIud2FybihgW1dlYlVJXSBTZW50IFNJR1RFUk0gdG8gc3RhbGUgcHJvY2VzcyAke3Byb2Nlc3NJbmZvLnBpZH0gb24gcG9ydCAke3BvcnR9YCwge1xuICAgIGNtZExpbmU6IHByb2Nlc3NJbmZvLmNvbW1hbmQsXG4gICAgcGFyZW50UGlkOiBwcm9jZXNzSW5mby5wYXJlbnRQaWQsXG4gICAgcGFyZW50Q29tbWFuZCxcbiAgfSk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBLSUxMX1BPTExfQ09VTlQ7IGkrKykge1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCBTSUdURVJNX1BPTExfTVMpKTtcbiAgICBpZiAoIWlzUGlkQWxpdmUocHJvY2Vzc0luZm8ucGlkKSkge1xuICAgICAgcmV0dXJuIGJ1aWxkS2lsbE91dGNvbWUodHJ1ZSwgJ3Rlcm1pbmF0ZWQnLCBwcm9jZXNzSW5mbywgcGFyZW50Q29tbWFuZCk7XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzcy5raWxsKHByb2Nlc3NJbmZvLnBpZCwgJ1NJR0tJTEwnKTtcbiAgbG9nZ2VyLndhcm4oYFtXZWJVSV0gU2VudCBTSUdLSUxMIHRvIHN0YWxlIHByb2Nlc3MgJHtwcm9jZXNzSW5mby5waWR9IG9uIHBvcnQgJHtwb3J0fWApO1xuICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgU0lHS0lMTF9XQUlUX01TKSk7XG4gIHJldHVybiBpc1BpZEFsaXZlKHByb2Nlc3NJbmZvLnBpZClcbiAgICA/IGJ1aWxkS2lsbE91dGNvbWUoZmFsc2UsICdzdGlsbF9hbGl2ZScsIHByb2Nlc3NJbmZvLCBwYXJlbnRDb21tYW5kKVxuICAgIDogYnVpbGRLaWxsT3V0Y29tZSh0cnVlLCAndGVybWluYXRlZCcsIHByb2Nlc3NJbmZvLCBwYXJlbnRDb21tYW5kKTtcbn1cblxuZnVuY3Rpb24gc3BsaXRQcm9jZXNzSW5zcGVjdGlvbkZpZWxkcyhsaW5lOiBzdHJpbmcpOiBzdHJpbmdbXSB8IG51bGwge1xuICBjb25zdCBmaWVsZHM6IHN0cmluZ1tdID0gW107XG4gIGxldCBpbmRleCA9IDA7XG4gIGNvbnN0IG5vcm1hbGl6ZWRMaW5lID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUobGluZSkubm9ybWFsaXplZENvbnRlbnQudHJpbSgpO1xuXG4gIHdoaWxlIChpbmRleCA8IG5vcm1hbGl6ZWRMaW5lLmxlbmd0aCAmJiBmaWVsZHMubGVuZ3RoIDwgUFJPQ0VTU19JTlNQRUNUSU9OX0ZJRUxEX0NPVU5UIC0gMSkge1xuICAgIHdoaWxlIChpbmRleCA8IG5vcm1hbGl6ZWRMaW5lLmxlbmd0aCAmJiBpc1doaXRlc3BhY2VDaGFyKG5vcm1hbGl6ZWRMaW5lW2luZGV4XSkpIHtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuICAgIGlmIChpbmRleCA+PSBub3JtYWxpemVkTGluZS5sZW5ndGgpIGJyZWFrO1xuXG4gICAgY29uc3QgZmllbGRTdGFydCA9IGluZGV4O1xuICAgIHdoaWxlIChpbmRleCA8IG5vcm1hbGl6ZWRMaW5lLmxlbmd0aCAmJiAhaXNXaGl0ZXNwYWNlQ2hhcihub3JtYWxpemVkTGluZVtpbmRleF0pKSB7XG4gICAgICBpbmRleCsrO1xuICAgIH1cbiAgICBmaWVsZHMucHVzaChub3JtYWxpemVkTGluZS5zbGljZShmaWVsZFN0YXJ0LCBpbmRleCkpO1xuICB9XG5cbiAgd2hpbGUgKGluZGV4IDwgbm9ybWFsaXplZExpbmUubGVuZ3RoICYmIGlzV2hpdGVzcGFjZUNoYXIobm9ybWFsaXplZExpbmVbaW5kZXhdKSkge1xuICAgIGluZGV4Kys7XG4gIH1cbiAgaWYgKGluZGV4IDwgbm9ybWFsaXplZExpbmUubGVuZ3RoKSB7XG4gICAgZmllbGRzLnB1c2gobm9ybWFsaXplZExpbmUuc2xpY2UoaW5kZXgpKTtcbiAgfVxuXG4gIHJldHVybiBmaWVsZHMubGVuZ3RoID09PSBQUk9DRVNTX0lOU1BFQ1RJT05fRklFTERfQ09VTlQgPyBmaWVsZHMgOiBudWxsO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpbnNwZWN0UHJvY2VzcyhwaWQ6IG51bWJlcik6IFByb21pc2U8UHJvY2Vzc0luc3BlY3Rpb24gfCBudWxsPiB7XG4gIGNvbnN0IHsgZXhlY0ZpbGU6IGV4ZWNGaWxlQ2IgfSA9IGF3YWl0IGltcG9ydCgnbm9kZTpjaGlsZF9wcm9jZXNzJyk7XG4gIGNvbnN0IHsgcHJvbWlzaWZ5IH0gPSBhd2FpdCBpbXBvcnQoJ25vZGU6dXRpbCcpO1xuICBjb25zdCBleGVjRmlsZUFzeW5jID0gcHJvbWlzaWZ5KGV4ZWNGaWxlQ2IpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IGV4ZWNGaWxlQXN5bmMoXG4gICAgICAncHMnLFxuICAgICAgWyctcCcsIFN0cmluZyhwaWQpLCAnLW8nLCAndXNlcj0scGlkPSxwcGlkPSxjb21tYW5kPSddLFxuICAgICAgeyB0aW1lb3V0OiBDT01NQU5EX1RJTUVPVVRfTVMgfSxcbiAgICApO1xuICAgIGNvbnN0IGZpZWxkcyA9IHNwbGl0UHJvY2Vzc0luc3BlY3Rpb25GaWVsZHMoc3Rkb3V0KTtcbiAgICBpZiAoIWZpZWxkcykgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgW3VzZXIsIHBpZFRva2VuLCBwYXJlbnRQaWRUb2tlbiwgY29tbWFuZF0gPSBmaWVsZHM7XG4gICAgY29uc3QgcGFyc2VkUGlkID0gcGFyc2VQaWRUb2tlbihwaWRUb2tlbik7XG4gICAgY29uc3QgcGFyc2VkUGFyZW50UGlkID0gcGFyc2VQaWRUb2tlbihwYXJlbnRQaWRUb2tlbik7XG4gICAgaWYgKHBhcnNlZFBpZCA9PT0gbnVsbCB8fCBwYXJzZWRQYXJlbnRQaWQgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHVzZXI6IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHVzZXIpLm5vcm1hbGl6ZWRDb250ZW50LFxuICAgICAgcGlkOiBwYXJzZWRQaWQsXG4gICAgICBwYXJlbnRQaWQ6IHBhcnNlZFBhcmVudFBpZCxcbiAgICAgIGNvbW1hbmQ6IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKGNvbW1hbmQpLm5vcm1hbGl6ZWRDb250ZW50LFxuICAgIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFByb2Nlc3NDb21tYW5kKHBpZDogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gIGNvbnN0IHsgZXhlY0ZpbGU6IGV4ZWNGaWxlQ2IgfSA9IGF3YWl0IGltcG9ydCgnbm9kZTpjaGlsZF9wcm9jZXNzJyk7XG4gIGNvbnN0IHsgcHJvbWlzaWZ5IH0gPSBhd2FpdCBpbXBvcnQoJ25vZGU6dXRpbCcpO1xuICBjb25zdCBleGVjRmlsZUFzeW5jID0gcHJvbWlzaWZ5KGV4ZWNGaWxlQ2IpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IGV4ZWNGaWxlQXN5bmMoJ3BzJywgWyctcCcsIFN0cmluZyhwaWQpLCAnLW8nLCAnY29tbWFuZD0nXSwgeyB0aW1lb3V0OiBDT01NQU5EX1RJTUVPVVRfTVMgfSk7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHN0ZG91dCkubm9ybWFsaXplZENvbnRlbnQudHJpbSgpO1xuICAgIHJldHVybiBub3JtYWxpemVkIHx8IG51bGw7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzUGlkQWxpdmUocGlkOiBudW1iZXIpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBwcm9jZXNzLmtpbGwocGlkLCAwKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogRmluZCB0aGUgUElEIG9mIHRoZSBwcm9jZXNzIGxpc3RlbmluZyBvbiBhIGdpdmVuIHBvcnQuXG4gKiBVc2VzIGxzb2Ygb24gbWFjT1MvTGludXguIFJldHVybnMgbnVsbCBpZiBub3QgZm91bmQgb3Igb24gZXJyb3IuXG4gKlxuICogVGltZW91dDogMXMg4oCUIGxzb2Ygb24gbG9jYWxob3N0IGlzIHR5cGljYWxseSA8MTAwbXMuIFRoZSAxcyBjZWlsaW5nXG4gKiBoYW5kbGVzIHNsb3cgTkZTLW1vdW50ZWQgL2Rldi9mZCBvciBvdmVybG9hZGVkIENJIHJ1bm5lcnMgd2l0aG91dFxuICogZGVsYXlpbmcgc3RhcnR1cCBub3RpY2VhYmx5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluZFBpZE9uUG9ydChwb3J0OiBudW1iZXIpOiBQcm9taXNlPG51bWJlciB8IG51bGw+IHtcbiAgY29uc3QgeyBleGVjRmlsZTogZXhlY0ZpbGVDYiB9ID0gYXdhaXQgaW1wb3J0KCdub2RlOmNoaWxkX3Byb2Nlc3MnKTtcbiAgY29uc3QgeyBwcm9taXNpZnkgfSA9IGF3YWl0IGltcG9ydCgnbm9kZTp1dGlsJyk7XG4gIGNvbnN0IGV4ZWNGaWxlQXN5bmMgPSBwcm9taXNpZnkoZXhlY0ZpbGVDYik7XG5cbiAgLy8gVHJ5IGxzb2YgZmlyc3QgKG1hY09TICsgbW9zdCBMaW51eCksIGZhbGwgYmFjayB0byBmdXNlciAobWluaW1hbCBMaW51eC9Eb2NrZXIpXG4gIGZvciAoY29uc3QgY21kIG9mIFtcbiAgICB7IGJpbjogJ2xzb2YnLCBhcmdzOiBbJy10aScsIGA6JHtwb3J0fWBdIH0sXG4gICAgeyBiaW46ICdmdXNlcicsIGFyZ3M6IFtgJHtwb3J0fS90Y3BgXSB9LFxuICBdKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgc3Rkb3V0LCBzdGRlcnIgfSA9IGF3YWl0IGV4ZWNGaWxlQXN5bmMoY21kLmJpbiwgY21kLmFyZ3MsIHsgdGltZW91dDogQ09NTUFORF9USU1FT1VUX01TIH0pO1xuICAgICAgLy8gZnVzZXIgb3V0cHV0cyB0byBzdGRlcnIgb24gc29tZSBzeXN0ZW1zXG4gICAgICBjb25zdCBvdXRwdXQgPSAoc3Rkb3V0IHx8IHN0ZGVyciB8fCAnJykudHJpbSgpO1xuICAgICAgY29uc3QgcGlkcyA9IG91dHB1dFxuICAgICAgICAuc3BsaXQoL1xccysvKVxuICAgICAgICAubWFwKCh0b2tlbikgPT4gcGFyc2VQaWRUb2tlbih0b2tlbikpXG4gICAgICAgIC5maWx0ZXIoKHBpZCk6IHBpZCBpcyBudW1iZXIgPT4gcGlkICE9PSBudWxsKTtcbiAgICAgIGNvbnN0IG90aGVyUGlkID0gcGlkcy5maW5kKHAgPT4gcCAhPT0gcHJvY2Vzcy5waWQpO1xuICAgICAgaWYgKG90aGVyUGlkKSByZXR1cm4gb3RoZXJQaWQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICBjb250aW51ZTsgLy8gY29tbWFuZCBub3QgZm91bmQgb3Igbm8gcmVzdWx0cyDigJQgdHJ5IG5leHRcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogS2lsbCBhIHN0YWxlIHByb2Nlc3MgaG9sZGluZyBhIHBvcnQuIFNlbmRzIFNJR1RFUk0sIHdhaXRzIGJyaWVmbHksXG4gKiB0aGVuIFNJR0tJTEwgaWYgc3RpbGwgYWxpdmUuIE9ubHkga2lsbHMgRG9sbGhvdXNlTUNQIHByb2Nlc3Nlc1xuICogKHZlcmlmaWVkIGJ5IGNoZWNraW5nIHRoZSBjb21tYW5kIGxpbmUgYW5kIHVzZXIgb3duZXJzaGlwKS5cbiAqXG4gKiBUaW1lb3V0OiAxcyBmb3IgcHMgdmVyaWZpY2F0aW9uLiBLaWxsIHdhaXQ6IDMwMG1zIMOXIDEwIHBvbGxzID0gM3NcbiAqIGJlZm9yZSBlc2NhbGF0aW5nIHRvIFNJR0tJTEwuIFRvdGFsIHdvcnN0IGNhc2U6IH40cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGtpbGxTdGFsZVByb2Nlc3MocGlkOiBudW1iZXIsIHBvcnQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBvdXRjb21lID0gYXdhaXQga2lsbFN0YWxlUHJvY2Vzc0RldGFpbGVkKHBpZCwgcG9ydCk7XG4gIHJldHVybiBvdXRjb21lLmtpbGxlZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGtpbGxTdGFsZVByb2Nlc3NEZXRhaWxlZChcbiAgcGlkOiBudW1iZXIsXG4gIHBvcnQ6IG51bWJlcixcbiAgb3B0aW9uczogS2lsbFN0YWxlUHJvY2Vzc09wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8S2lsbFN0YWxlUHJvY2Vzc091dGNvbWU+IHtcbiAgY29uc3QgcHJvY2Vzc0luZm8gPSBhd2FpdCBpbnNwZWN0UHJvY2VzcyhwaWQpO1xuICBpZiAoIXByb2Nlc3NJbmZvKSB7XG4gICAgYXdhaXQgbG9nZ2VyLmRlYnVnKGBbV2ViVUldIENhbm5vdCB2ZXJpZnkgcHJvY2VzcyAke3BpZH0g4oCUIHNraXBwaW5nIGtpbGxgKTtcbiAgICByZXR1cm4geyBraWxsZWQ6IGZhbHNlLCByZWFzb246ICdpbnNwZWN0X2ZhaWxlZCcsIHBpZCB9O1xuICB9XG5cbiAgY29uc3QgZ3VhcmRGYWlsdXJlID0gYXdhaXQgZ2V0S2lsbEd1YXJkRmFpbHVyZShwcm9jZXNzSW5mbywgcG9ydCwgb3B0aW9ucyk7XG4gIGlmIChndWFyZEZhaWx1cmUpIHtcbiAgICByZXR1cm4gZ3VhcmRGYWlsdXJlO1xuICB9XG4gIGNvbnN0IHBhcmVudENvbW1hbmQgPSBwcm9jZXNzSW5mby5wYXJlbnRQaWQgPiBST09UX1BBUkVOVF9QSURcbiAgICA/IChhd2FpdCBnZXRQcm9jZXNzQ29tbWFuZChwcm9jZXNzSW5mby5wYXJlbnRQaWQpKSA/PyB1bmRlZmluZWRcbiAgICA6IHVuZGVmaW5lZDtcblxuICBhd2FpdCBsb2dnZXIuZGVidWcoYFtXZWJVSV0gVmVyaWZpZWQgc3RhbGUgcHJvY2VzcyAke3BpZH0gaXMgRG9sbGhvdXNlTUNQYCwgeyBjbWRMaW5lOiBwcm9jZXNzSW5mby5jb21tYW5kLCBwYXJlbnRQaWQ6IHByb2Nlc3NJbmZvLnBhcmVudFBpZCwgcGFyZW50Q29tbWFuZCB9KTtcblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB0ZXJtaW5hdGVQcm9jZXNzKHByb2Nlc3NJbmZvLCBwb3J0LCBwYXJlbnRDb21tYW5kKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKCFpc1BpZEFsaXZlKHBpZCkpIHtcbiAgICAgIHJldHVybiBidWlsZEtpbGxPdXRjb21lKHRydWUsICdhbHJlYWR5X2RlYWQnLCBwcm9jZXNzSW5mbywgcGFyZW50Q29tbWFuZCk7XG4gICAgfVxuICAgIHJldHVybiBidWlsZEtpbGxPdXRjb21lKGZhbHNlLCAnc2lnbmFsX2ZhaWxlZCcsIHByb2Nlc3NJbmZvLCBwYXJlbnRDb21tYW5kLCBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycikpO1xuICB9XG59XG5cbi8qKlxuICogRGV0ZWN0IGFuZCByZWNvdmVyIGZyb20gYSBzdGFsZSBwcm9jZXNzIHNxdWF0dGluZyBvbiB0aGUgcG9ydC5cbiAqIENvbXBhcmVzIHRoZSBwb3J0IGhvbGRlcidzIFBJRCBhZ2FpbnN0IHRoZSBsZWFkZXIgbG9jayBmaWxlIHRvIGRldGVybWluZVxuICogaWYgaXQncyBhIHNxdWF0dGVyLiBSZXR1cm5zIHRydWUgaWYgdGhlIHNxdWF0dGVyIHdhcyBraWxsZWQuXG4gKlxuICogVGltZW91dHM6IGxzb2YgMXMsIHBzIDFzLCBTSUdURVJNIHdhaXQgM3Mg4oCUIG1heCB+NXMgdG90YWwuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWNvdmVyU3RhbGVQb3J0KHBvcnQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBzdGFsZVBpZCA9IGF3YWl0IGZpbmRQaWRPblBvcnQocG9ydCk7XG4gIGlmICghc3RhbGVQaWQpIHJldHVybiBmYWxzZTtcblxuICAvLyBUT0NUT1UgbWl0aWdhdGlvbjogYSBuZXcgcHJvY2VzcyBtYXkgaGF2ZSBqdXN0IGJvdW5kIHRoZSBwb3J0IGJ1dCBub3QgeWV0XG4gIC8vIHdyaXR0ZW4gaXRzIGxvY2sgZmlsZS4gUmVhZCB0aGUgbG9jaywgcGF1c2UsIHJlLXJlYWQuIElmIHRoZSBzZWNvbmQgcmVhZFxuICAvLyBub3cgbWF0Y2hlcyB0aGUgcG9ydCBob2xkZXIsIGl0J3MgYSBmcmVzaCBsZWFkZXIg4oCUIGRvbid0IGtpbGwuXG4gIGNvbnN0IHsgcmVhZExlYWRlckxvY2sgfSA9IGF3YWl0IGltcG9ydCgnLi9MZWFkZXJFbGVjdGlvbi5qcycpO1xuICBmb3IgKGxldCBjaGVjayA9IDA7IGNoZWNrIDwgTE9DS19SRUNIRUNLX0FUVEVNUFRTOyBjaGVjaysrKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxvY2sgPSBhd2FpdCByZWFkTGVhZGVyTG9jaygpO1xuICAgICAgaWYgKGxvY2s/LnBpZCA9PT0gc3RhbGVQaWQgJiYgbG9jaz8ucG9ydCA9PT0gcG9ydCAmJiBsb2NrLnBpZCAhPT0gcHJvY2Vzcy5waWQpIHtcbiAgICAgICAgYXdhaXQgbG9nZ2VyLndhcm4oYFtXZWJVSV0gUG9ydCAke3BvcnR9IGhlbGQgYnkgbGVnaXRpbWF0ZSBsZWFkZXIgKHBpZCAke3N0YWxlUGlkfSkg4oCUIG5vdCBraWxsaW5nYCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIENhbid0IHJlYWQgbG9jayBmaWxlIOKAlCBjb250aW51ZSB0byBuZXh0IGNoZWNrIG9yIGtpbGxcbiAgICB9XG4gICAgaWYgKGNoZWNrIDwgTE9DS19SRUNIRUNLX0FUVEVNUFRTIC0gMSkge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIExPQ0tfUkVDSEVDS19ERUxBWV9NUykpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG91dGNvbWUgPSBhd2FpdCBraWxsU3RhbGVQcm9jZXNzRGV0YWlsZWQoc3RhbGVQaWQsIHBvcnQpO1xuICBpZiAob3V0Y29tZS5raWxsZWQpIHtcbiAgICBsb2dnZXIuaW5mbyhgW1dlYlVJXSBTdGFsZSBwcm9jZXNzICR7c3RhbGVQaWR9IHJlbW92ZWQgZnJvbSBwb3J0ICR7cG9ydH1gKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgU0lHS0lMTF9XQUlUX01TKSk7IC8vIGJyaWVmIHBhdXNlIGZvciBwb3J0IHJlbGVhc2VcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBsb2dnZXIuZGVidWcoYFtXZWJVSV0gU3RhbGUtcG9ydCByZWNvdmVyeSBza2lwcGVkIGZvciBwaWQgJHtzdGFsZVBpZH1gLCB7XG4gICAgICByZWFzb246IG91dGNvbWUucmVhc29uLFxuICAgICAgcGFyZW50UGlkOiBvdXRjb21lLnBhcmVudFBpZCxcbiAgICAgIHBhcmVudENvbW1hbmQ6IG91dGNvbWUucGFyZW50Q29tbWFuZCxcbiAgICAgIGRldGFpbDogb3V0Y29tZS5kZXRhaWwsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG91dGNvbWUua2lsbGVkO1xufVxuIl19
355
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhbGVQcm9jZXNzUmVjb3ZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViL2NvbnNvbGUvU3RhbGVQcm9jZXNzUmVjb3ZlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7OztHQVNHO0FBRUgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFakYsOEVBQThFO0FBQzlFLHFFQUFxRTtBQUNyRSxrREFBa0Q7QUFDbEQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUM7QUFDaEMsb0VBQW9FO0FBQ3BFLE1BQU0sZUFBZSxHQUFHLEdBQUcsQ0FBQztBQUM1QixtREFBbUQ7QUFDbkQsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDO0FBQzNCLCtDQUErQztBQUMvQyxNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUM7QUFDNUIsOERBQThEO0FBQzlELE1BQU0scUJBQXFCLEdBQUcsR0FBRyxDQUFDO0FBQ2xDLHdGQUF3RjtBQUN4RixNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBQztBQUNoQyx5RkFBeUY7QUFDekYsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLG9GQUFvRjtBQUNwRixNQUFNLDhCQUE4QixHQUFHLENBQUMsQ0FBQztBQUV6QyxJQUFJLE9BQU8sR0FBeUQsSUFBSSxDQUFDO0FBQ3pFLEtBQUssVUFBVSxTQUFTO0lBQ3RCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQztZQUFDLE9BQU8sR0FBRyxDQUFDLE1BQU0sTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFBQyxDQUFDO1FBQ2pFLE1BQU0sQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFDRCxNQUFNLE1BQU0sR0FBRztJQUNiLElBQUksRUFBRSxLQUFLLEVBQUUsR0FB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QUssR0FBRyxxQkFBcUIsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7UUFDL0QsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixRQUFRLHNCQUFzQixJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQywrQkFBK0I7SUFDekYsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsK0NBQStDLFFBQVEsRUFBRSxFQUFFO1lBQzVFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtZQUN0QixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7WUFDNUIsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhO1lBQ3BDLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtTQUN2QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0YWxlIHByb2Nlc3MgZGV0ZWN0aW9uIGFuZCByZWNvdmVyeSAoIzE4NTApLlxuICpcbiAqIEZpbmRzIGFuZCBraWxscyB6b21iaWUgRG9sbGhvdXNlTUNQIHByb2Nlc3NlcyB0aGF0IHNxdWF0IG9uIHRoZSBjb25zb2xlXG4gKiBwb3J0IGFmdGVyIHRoZWlyIHNlc3Npb24gaGFzIGVuZGVkLiBVc2VkIGJ5IGJpbmRBbmRMaXN0ZW4gaW4gc2VydmVyLnRzXG4gKiB3aGVuIEVBRERSSU5VU0Ugb2NjdXJzLlxuICpcbiAqIEV4dHJhY3RlZCB0byBhIHN0YW5kYWxvbmUgbW9kdWxlIHNvIGl0IGNhbiBiZSB0ZXN0ZWQgd2l0aG91dCBpbXBvcnRpbmdcbiAqIHRoZSBmdWxsIEV4cHJlc3Mgc2VydmVyIGFuZCBpdHMgZGVwZW5kZW5jeSBjaGFpbi5cbiAqL1xuXG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcblxuLy8gVXNlIGxhenkgaW1wb3J0IGZvciBsb2dnZXIgdG8gYXZvaWQgcHVsbGluZyBpbiB0aGUgZnVsbCBlbnYudHMvY29uZmlnIGNoYWluXG4vLyBhdCBtb2R1bGUgbG9hZCB0aW1lLiBUaGlzIGtlZXBzIHRoZSBtb2R1bGUgaW5kZXBlbmRlbnRseSB0ZXN0YWJsZS5cbi8qKiBUaW1lb3V0IGZvciBsc29mL2Z1c2VyL3BzIHN5c3RlbSBjYWxscyAobXMpICovXG5jb25zdCBDT01NQU5EX1RJTUVPVVRfTVMgPSAxMDAwO1xuLyoqIFBvbGxpbmcgaW50ZXJ2YWwgd2hlbiB3YWl0aW5nIGZvciBTSUdURVJNIHRvIHRha2UgZWZmZWN0IChtcykgKi9cbmNvbnN0IFNJR1RFUk1fUE9MTF9NUyA9IDMwMDtcbi8qKiBOdW1iZXIgb2YgcG9sbHMgYmVmb3JlIGVzY2FsYXRpbmcgdG8gU0lHS0lMTCAqL1xuY29uc3QgS0lMTF9QT0xMX0NPVU5UID0gMTA7XG4vKiogV2FpdCBhZnRlciBTSUdLSUxMIGJlZm9yZSByZXR1cm5pbmcgKG1zKSAqL1xuY29uc3QgU0lHS0lMTF9XQUlUX01TID0gNTAwO1xuLyoqIFdhaXQgYmV0d2VlbiBsb2NrIGZpbGUgcmVhZHMgZm9yIFRPQ1RPVSBtaXRpZ2F0aW9uIChtcykgKi9cbmNvbnN0IExPQ0tfUkVDSEVDS19ERUxBWV9NUyA9IDUwMDtcbi8qKiBOdW1iZXIgb2YgbG9jay1maWxlIGNoZWNrcyBiZWZvcmUgZGVjaWRpbmcgdGhlIHBvcnQgaG9sZGVyIGlzIG5vdCBhIGZyZXNoIGxlYWRlci4gKi9cbmNvbnN0IExPQ0tfUkVDSEVDS19BVFRFTVBUUyA9IDI7XG4vKiogUElEIHVzZWQgYnkgdGhlIE9TIGluaXQvbGF1bmNoZCBwcm9jZXNzOyBkaXJlY3QgY2hpbGRyZW4gYXJlIGVmZmVjdGl2ZWx5IG9ycGhhbmVkLiAqL1xuY29uc3QgUk9PVF9QQVJFTlRfUElEID0gMTtcbi8qKiBOdW1iZXIgb2YgYHBzYCBjb2x1bW5zIHJlcXVlc3RlZCBieSBpbnNwZWN0UHJvY2VzczogdXNlciwgcGlkLCBwcGlkLCBjb21tYW5kLiAqL1xuY29uc3QgUFJPQ0VTU19JTlNQRUNUSU9OX0ZJRUxEX0NPVU5UID0gNDtcblxubGV0IF9sb2dnZXI6IHR5cGVvZiBpbXBvcnQoJy4uLy4uL3V0aWxzL2xvZ2dlci5qcycpLmxvZ2dlciB8IG51bGwgPSBudWxsO1xuYXN5bmMgZnVuY3Rpb24gZ2V0TG9nZ2VyKCkge1xuICBpZiAoIV9sb2dnZXIpIHtcbiAgICB0cnkgeyBfbG9nZ2VyID0gKGF3YWl0IGltcG9ydCgnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJykpLmxvZ2dlcjsgfVxuICAgIGNhdGNoIHsgLyogZmFsbGJhY2sgYmVsb3cgKi8gfVxuICB9XG4gIHJldHVybiBfbG9nZ2VyO1xufVxuY29uc3QgbG9nZ2VyID0ge1xuICB3YXJuOiBhc3luYyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgY29uc3QgbCA9IGF3YWl0IGdldExvZ2dlcigpO1xuICAgIGlmIChsKSBsLndhcm4oYXJnc1swXSBhcyBzdHJpbmcsIGFyZ3NbMV0pO1xuICAgIGVsc2UgY29uc29sZS5lcnJvcignW1dBUk5dJywgLi4uYXJncyk7XG4gIH0sXG4gIGluZm86IGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICBjb25zdCBsID0gYXdhaXQgZ2V0TG9nZ2VyKCk7XG4gICAgaWYgKGwpIGwuaW5mbyhhcmdzWzBdIGFzIHN0cmluZywgYXJnc1sxXSk7XG4gICAgZWxzZSBjb25zb2xlLmVycm9yKCdbSU5GT10nLCAuLi5hcmdzKTtcbiAgfSxcbiAgZGVidWc6IGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICBjb25zdCBsID0gYXdhaXQgZ2V0TG9nZ2VyKCk7XG4gICAgaWYgKGwpIGwuZGVidWcoYXJnc1swXSBhcyBzdHJpbmcsIGFyZ3NbMV0pO1xuICB9LFxufTtcblxuY29uc3QgTUNQX0hPU1RfUEFSRU5UX1BBVFRFUk5TID0gW1xuICAvQ2xhdWRlXFwuYXBwXFwvQ29udGVudHNcXC9IZWxwZXJzXFwvZGlzY2xhaW1lci9pLFxuICAvQ29kZXhcXC5hcHBcXC9Db250ZW50c1xcL1Jlc291cmNlc1xcL2NvZGV4IGFwcC1zZXJ2ZXIvaSxcbiAgL0N1cnNvclxcLmFwcFxcLy9pLFxuICAvV2luZHN1cmZcXC5hcHBcXC8vaSxcbl07XG5cbmludGVyZmFjZSBQcm9jZXNzSW5zcGVjdGlvbiB7XG4gIHVzZXI6IHN0cmluZztcbiAgcGlkOiBudW1iZXI7XG4gIHBhcmVudFBpZDogbnVtYmVyO1xuICBjb21tYW5kOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgS2lsbFN0YWxlUHJvY2Vzc091dGNvbWUge1xuICBraWxsZWQ6IGJvb2xlYW47XG4gIHJlYXNvbjpcbiAgICB8ICdpbnNwZWN0X2ZhaWxlZCdcbiAgICB8ICdkaWZmZXJlbnRfdXNlcidcbiAgICB8ICdub3RfZG9sbGhvdXNlX3Byb2Nlc3MnXG4gICAgfCAnYWN0aXZlX2hvc3RfcGFyZW50J1xuICAgIHwgJ3Rlcm1pbmF0ZWQnXG4gICAgfCAnYWxyZWFkeV9kZWFkJ1xuICAgIHwgJ3N0aWxsX2FsaXZlJ1xuICAgIHwgJ3NpZ25hbF9mYWlsZWQnO1xuICBwaWQ6IG51bWJlcjtcbiAgcGFyZW50UGlkPzogbnVtYmVyO1xuICBjb21tYW5kPzogc3RyaW5nO1xuICBwYXJlbnRDb21tYW5kPzogc3RyaW5nO1xuICBkZXRhaWw/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgS2lsbFN0YWxlUHJvY2Vzc09wdGlvbnMge1xuICBhbGxvd0FjdGl2ZUhvc3RQYXJlbnQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWNvZ25pemVkTWNwSG9zdFBhcmVudChjb21tYW5kOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3Qgbm9ybWFsaXplZENvbW1hbmQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShjb21tYW5kKS5ub3JtYWxpemVkQ29udGVudDtcbiAgcmV0dXJuIE1DUF9IT1NUX1BBUkVOVF9QQVRURVJOUy5zb21lKChwYXR0ZXJuKSA9PiBwYXR0ZXJuLnRlc3Qobm9ybWFsaXplZENvbW1hbmQpKTtcbn1cblxuZnVuY3Rpb24gaXNEb2xsaG91c2VQcm9jZXNzQ29tbWFuZChjbWRMaW5lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3Qgbm9ybWFsaXplZENvbW1hbmQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShjbWRMaW5lKS5ub3JtYWxpemVkQ29udGVudDtcbiAgY29uc3QgaXNEb2xsaG91c2VCaW4gPSAvKD86XnxcXC8pZG9sbGhvdXNlbWNwKD86XFxzfCQpLy50ZXN0KG5vcm1hbGl6ZWRDb21tYW5kKSB8fFxuICAgIG5vcm1hbGl6ZWRDb21tYW5kLmluY2x1ZGVzKCcuYmluL2RvbGxob3VzZW1jcCcpO1xuICBjb25zdCBpc01jcFNlcnZlckJpbiA9IG5vcm1hbGl6ZWRDb21tYW5kLmluY2x1ZGVzKCcuYmluL21jcC1zZXJ2ZXInKSB8fFxuICAgIC8oPzpkb2xsaG91c2VtY3B8bWNwLXNlcnZlcilbL1xcXFxdZGlzdFsvXFxcXF1pbmRleFxcLmpzLy50ZXN0KG5vcm1hbGl6ZWRDb21tYW5kKTtcbiAgcmV0dXJuIGlzRG9sbGhvdXNlQmluIHx8IGlzTWNwU2VydmVyQmluO1xufVxuXG5mdW5jdGlvbiBwYXJzZVBpZFRva2VuKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIgfCBudWxsIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjb2RlUG9pbnQgPSB2YWx1ZS5jb2RlUG9pbnRBdChpKTtcbiAgICBpZiAoY29kZVBvaW50ID09PSB1bmRlZmluZWQgfHwgY29kZVBvaW50IDwgNDggfHwgY29kZVBvaW50ID4gNTcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHBhcnNlZCA9IE51bWJlci5wYXJzZUludCh2YWx1ZSwgMTApO1xuICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHBhcnNlZCkgfHwgcGFyc2VkIDwgUk9PVF9QQVJFTlRfUElEKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIHBhcnNlZDtcbn1cblxuZnVuY3Rpb24gaXNXaGl0ZXNwYWNlQ2hhcih2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiB2YWx1ZSA9PT0gJyAnIHx8IHZhbHVlID09PSAnXFx0JyB8fCB2YWx1ZSA9PT0gJ1xcbicgfHwgdmFsdWUgPT09ICdcXHInIHx8IHZhbHVlID09PSAnXFxmJyB8fCB2YWx1ZSA9PT0gJ1xcdic7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkS2lsbE91dGNvbWUoXG4gIGtpbGxlZDogYm9vbGVhbixcbiAgcmVhc29uOiBLaWxsU3RhbGVQcm9jZXNzT3V0Y29tZVsncmVhc29uJ10sXG4gIHByb2Nlc3NJbmZvOiBQcm9jZXNzSW5zcGVjdGlvbixcbiAgcGFyZW50Q29tbWFuZD86IHN0cmluZyxcbiAgZGV0YWlsPzogc3RyaW5nLFxuKTogS2lsbFN0YWxlUHJvY2Vzc091dGNvbWUge1xuICByZXR1cm4ge1xuICAgIGtpbGxlZCxcbiAgICByZWFzb24sXG4gICAgcGlkOiBwcm9jZXNzSW5mby5waWQsXG4gICAgcGFyZW50UGlkOiBwcm9jZXNzSW5mby5wYXJlbnRQaWQsXG4gICAgY29tbWFuZDogcHJvY2Vzc0luZm8uY29tbWFuZCxcbiAgICBwYXJlbnRDb21tYW5kLFxuICAgIC4uLihkZXRhaWwgPyB7IGRldGFpbCB9IDoge30pLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRLaWxsR3VhcmRGYWlsdXJlKFxuICBwcm9jZXNzSW5mbzogUHJvY2Vzc0luc3BlY3Rpb24sXG4gIHBvcnQ6IG51bWJlcixcbiAgb3B0aW9uczogS2lsbFN0YWxlUHJvY2Vzc09wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8S2lsbFN0YWxlUHJvY2Vzc091dGNvbWUgfCBudWxsPiB7XG4gIGNvbnN0IGN1cnJlbnRVc2VyID0gKGF3YWl0IGltcG9ydCgnbm9kZTpvcycpKS51c2VySW5mbygpLnVzZXJuYW1lO1xuICBpZiAocHJvY2Vzc0luZm8udXNlciAhPT0gY3VycmVudFVzZXIpIHtcbiAgICBhd2FpdCBsb2dnZXIud2FybihgW1dlYlVJXSBQb3J0ICR7cG9ydH0gaGVsZCBieSBkaWZmZXJlbnQgdXNlciAocGlkICR7cHJvY2Vzc0luZm8ucGlkfSkg4oCUIG5vdCBraWxsaW5nYCk7XG4gICAgcmV0dXJuIGJ1aWxkS2lsbE91dGNvbWUoZmFsc2UsICdkaWZmZXJlbnRfdXNlcicsIHByb2Nlc3NJbmZvKTtcbiAgfVxuXG4gIGlmICghaXNEb2xsaG91c2VQcm9jZXNzQ29tbWFuZChwcm9jZXNzSW5mby5jb21tYW5kKSkge1xuICAgIGF3YWl0IGxvZ2dlci53YXJuKGBbV2ViVUldIFBvcnQgJHtwb3J0fSBoZWxkIGJ5IG5vbi1Eb2xsaG91c2VNQ1AgcHJvY2VzcyAocGlkICR7cHJvY2Vzc0luZm8ucGlkfSkg4oCUIG5vdCBraWxsaW5nYCwge1xuICAgICAgY21kTGluZTogcHJvY2Vzc0luZm8uY29tbWFuZCxcbiAgICB9KTtcbiAgICByZXR1cm4gYnVpbGRLaWxsT3V0Y29tZShmYWxzZSwgJ25vdF9kb2xsaG91c2VfcHJvY2VzcycsIHByb2Nlc3NJbmZvKTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzSW5mby5wYXJlbnRQaWQgPD0gUk9PVF9QQVJFTlRfUElEIHx8ICFpc1BpZEFsaXZlKHByb2Nlc3NJbmZvLnBhcmVudFBpZCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHBhcmVudENvbW1hbmQgPSAoYXdhaXQgZ2V0UHJvY2Vzc0NvbW1hbmQocHJvY2Vzc0luZm8ucGFyZW50UGlkKSkgPz8gdW5kZWZpbmVkO1xuICBpZiAoIW9wdGlvbnMuYWxsb3dBY3RpdmVIb3N0UGFyZW50ICYmIHBhcmVudENvbW1hbmQgJiYgaXNSZWNvZ25pemVkTWNwSG9zdFBhcmVudChwYXJlbnRDb21tYW5kKSkge1xuICAgIGF3YWl0IGxvZ2dlci53YXJuKGBbV2ViVUldIFBvcnQgJHtwb3J0fSBoZWxkIGJ5IGFjdGl2ZSBjbGllbnQtYmFja2VkIERvbGxob3VzZU1DUCBwcm9jZXNzIChwaWQgJHtwcm9jZXNzSW5mby5waWR9KSDigJQgbm90IGtpbGxpbmdgLCB7XG4gICAgICBjbWRMaW5lOiBwcm9jZXNzSW5mby5jb21tYW5kLFxuICAgICAgcGFyZW50UGlkOiBwcm9jZXNzSW5mby5wYXJlbnRQaWQsXG4gICAgICBwYXJlbnRDb21tYW5kLFxuICAgIH0pO1xuICAgIHJldHVybiBidWlsZEtpbGxPdXRjb21lKGZhbHNlLCAnYWN0aXZlX2hvc3RfcGFyZW50JywgcHJvY2Vzc0luZm8sIHBhcmVudENvbW1hbmQpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHRlcm1pbmF0ZVByb2Nlc3MoXG4gIHByb2Nlc3NJbmZvOiBQcm9jZXNzSW5zcGVjdGlvbixcbiAgcG9ydDogbnVtYmVyLFxuICBwYXJlbnRDb21tYW5kPzogc3RyaW5nLFxuKTogUHJvbWlzZTxLaWxsU3RhbGVQcm9jZXNzT3V0Y29tZT4ge1xuICBwcm9jZXNzLmtpbGwocHJvY2Vzc0luZm8ucGlkLCAnU0lHVEVSTScpO1xuICBsb2dnZXIud2FybihgW1dlYlVJXSBTZW50IFNJR1RFUk0gdG8gc3RhbGUgcHJvY2VzcyAke3Byb2Nlc3NJbmZvLnBpZH0gb24gcG9ydCAke3BvcnR9YCwge1xuICAgIGNtZExpbmU6IHByb2Nlc3NJbmZvLmNvbW1hbmQsXG4gICAgcGFyZW50UGlkOiBwcm9jZXNzSW5mby5wYXJlbnRQaWQsXG4gICAgcGFyZW50Q29tbWFuZCxcbiAgfSk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBLSUxMX1BPTExfQ09VTlQ7IGkrKykge1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCBTSUdURVJNX1BPTExfTVMpKTtcbiAgICBpZiAoIWlzUGlkQWxpdmUocHJvY2Vzc0luZm8ucGlkKSkge1xuICAgICAgcmV0dXJuIGJ1aWxkS2lsbE91dGNvbWUodHJ1ZSwgJ3Rlcm1pbmF0ZWQnLCBwcm9jZXNzSW5mbywgcGFyZW50Q29tbWFuZCk7XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzcy5raWxsKHByb2Nlc3NJbmZvLnBpZCwgJ1NJR0tJTEwnKTtcbiAgbG9nZ2VyLndhcm4oYFtXZWJVSV0gU2VudCBTSUdLSUxMIHRvIHN0YWxlIHByb2Nlc3MgJHtwcm9jZXNzSW5mby5waWR9IG9uIHBvcnQgJHtwb3J0fWApO1xuICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgU0lHS0lMTF9XQUlUX01TKSk7XG4gIHJldHVybiBpc1BpZEFsaXZlKHByb2Nlc3NJbmZvLnBpZClcbiAgICA/IGJ1aWxkS2lsbE91dGNvbWUoZmFsc2UsICdzdGlsbF9hbGl2ZScsIHByb2Nlc3NJbmZvLCBwYXJlbnRDb21tYW5kKVxuICAgIDogYnVpbGRLaWxsT3V0Y29tZSh0cnVlLCAndGVybWluYXRlZCcsIHByb2Nlc3NJbmZvLCBwYXJlbnRDb21tYW5kKTtcbn1cblxuZnVuY3Rpb24gc3BsaXRQcm9jZXNzSW5zcGVjdGlvbkZpZWxkcyhsaW5lOiBzdHJpbmcpOiBzdHJpbmdbXSB8IG51bGwge1xuICBjb25zdCBmaWVsZHM6IHN0cmluZ1tdID0gW107XG4gIGxldCBpbmRleCA9IDA7XG4gIGNvbnN0IG5vcm1hbGl6ZWRMaW5lID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUobGluZSkubm9ybWFsaXplZENvbnRlbnQudHJpbSgpO1xuXG4gIHdoaWxlIChpbmRleCA8IG5vcm1hbGl6ZWRMaW5lLmxlbmd0aCAmJiBmaWVsZHMubGVuZ3RoIDwgUFJPQ0VTU19JTlNQRUNUSU9OX0ZJRUxEX0NPVU5UIC0gMSkge1xuICAgIHdoaWxlIChpbmRleCA8IG5vcm1hbGl6ZWRMaW5lLmxlbmd0aCAmJiBpc1doaXRlc3BhY2VDaGFyKG5vcm1hbGl6ZWRMaW5lW2luZGV4XSkpIHtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuICAgIGlmIChpbmRleCA+PSBub3JtYWxpemVkTGluZS5sZW5ndGgpIGJyZWFrO1xuXG4gICAgY29uc3QgZmllbGRTdGFydCA9IGluZGV4O1xuICAgIHdoaWxlIChpbmRleCA8IG5vcm1hbGl6ZWRMaW5lLmxlbmd0aCAmJiAhaXNXaGl0ZXNwYWNlQ2hhcihub3JtYWxpemVkTGluZVtpbmRleF0pKSB7XG4gICAgICBpbmRleCsrO1xuICAgIH1cbiAgICBmaWVsZHMucHVzaChub3JtYWxpemVkTGluZS5zbGljZShmaWVsZFN0YXJ0LCBpbmRleCkpO1xuICB9XG5cbiAgd2hpbGUgKGluZGV4IDwgbm9ybWFsaXplZExpbmUubGVuZ3RoICYmIGlzV2hpdGVzcGFjZUNoYXIobm9ybWFsaXplZExpbmVbaW5kZXhdKSkge1xuICAgIGluZGV4Kys7XG4gIH1cbiAgaWYgKGluZGV4IDwgbm9ybWFsaXplZExpbmUubGVuZ3RoKSB7XG4gICAgZmllbGRzLnB1c2gobm9ybWFsaXplZExpbmUuc2xpY2UoaW5kZXgpKTtcbiAgfVxuXG4gIHJldHVybiBmaWVsZHMubGVuZ3RoID09PSBQUk9DRVNTX0lOU1BFQ1RJT05fRklFTERfQ09VTlQgPyBmaWVsZHMgOiBudWxsO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpbnNwZWN0UHJvY2VzcyhwaWQ6IG51bWJlcik6IFByb21pc2U8UHJvY2Vzc0luc3BlY3Rpb24gfCBudWxsPiB7XG4gIGNvbnN0IHsgZXhlY0ZpbGU6IGV4ZWNGaWxlQ2IgfSA9IGF3YWl0IGltcG9ydCgnbm9kZTpjaGlsZF9wcm9jZXNzJyk7XG4gIGNvbnN0IHsgcHJvbWlzaWZ5IH0gPSBhd2FpdCBpbXBvcnQoJ25vZGU6dXRpbCcpO1xuICBjb25zdCBleGVjRmlsZUFzeW5jID0gcHJvbWlzaWZ5KGV4ZWNGaWxlQ2IpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IGV4ZWNGaWxlQXN5bmMoXG4gICAgICAncHMnLFxuICAgICAgWyctcCcsIFN0cmluZyhwaWQpLCAnLW8nLCAndXNlcj0scGlkPSxwcGlkPSxjb21tYW5kPSddLFxuICAgICAgeyB0aW1lb3V0OiBDT01NQU5EX1RJTUVPVVRfTVMgfSxcbiAgICApO1xuICAgIGNvbnN0IGZpZWxkcyA9IHNwbGl0UHJvY2Vzc0luc3BlY3Rpb25GaWVsZHMoc3Rkb3V0KTtcbiAgICBpZiAoIWZpZWxkcykgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgW3VzZXIsIHBpZFRva2VuLCBwYXJlbnRQaWRUb2tlbiwgY29tbWFuZF0gPSBmaWVsZHM7XG4gICAgY29uc3QgcGFyc2VkUGlkID0gcGFyc2VQaWRUb2tlbihwaWRUb2tlbik7XG4gICAgY29uc3QgcGFyc2VkUGFyZW50UGlkID0gcGFyc2VQaWRUb2tlbihwYXJlbnRQaWRUb2tlbik7XG4gICAgaWYgKHBhcnNlZFBpZCA9PT0gbnVsbCB8fCBwYXJzZWRQYXJlbnRQaWQgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHVzZXI6IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHVzZXIpLm5vcm1hbGl6ZWRDb250ZW50LFxuICAgICAgcGlkOiBwYXJzZWRQaWQsXG4gICAgICBwYXJlbnRQaWQ6IHBhcnNlZFBhcmVudFBpZCxcbiAgICAgIGNvbW1hbmQ6IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKGNvbW1hbmQpLm5vcm1hbGl6ZWRDb250ZW50LFxuICAgIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFByb2Nlc3NDb21tYW5kKHBpZDogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gIGNvbnN0IHsgZXhlY0ZpbGU6IGV4ZWNGaWxlQ2IgfSA9IGF3YWl0IGltcG9ydCgnbm9kZTpjaGlsZF9wcm9jZXNzJyk7XG4gIGNvbnN0IHsgcHJvbWlzaWZ5IH0gPSBhd2FpdCBpbXBvcnQoJ25vZGU6dXRpbCcpO1xuICBjb25zdCBleGVjRmlsZUFzeW5jID0gcHJvbWlzaWZ5KGV4ZWNGaWxlQ2IpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IGV4ZWNGaWxlQXN5bmMoJ3BzJywgWyctcCcsIFN0cmluZyhwaWQpLCAnLW8nLCAnY29tbWFuZD0nXSwgeyB0aW1lb3V0OiBDT01NQU5EX1RJTUVPVVRfTVMgfSk7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHN0ZG91dCkubm9ybWFsaXplZENvbnRlbnQudHJpbSgpO1xuICAgIHJldHVybiBub3JtYWxpemVkIHx8IG51bGw7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzUGlkQWxpdmUocGlkOiBudW1iZXIpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBwcm9jZXNzLmtpbGwocGlkLCAwKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogRmluZCB0aGUgUElEIG9mIHRoZSBwcm9jZXNzIGxpc3RlbmluZyBvbiBhIGdpdmVuIHBvcnQuXG4gKiBVc2VzIGxzb2Ygb24gbWFjT1MvTGludXguIFJldHVybnMgbnVsbCBpZiBub3QgZm91bmQgb3Igb24gZXJyb3IuXG4gKlxuICogVGltZW91dDogMXMg4oCUIGxzb2Ygb24gbG9jYWxob3N0IGlzIHR5cGljYWxseSA8MTAwbXMuIFRoZSAxcyBjZWlsaW5nXG4gKiBoYW5kbGVzIHNsb3cgTkZTLW1vdW50ZWQgL2Rldi9mZCBvciBvdmVybG9hZGVkIENJIHJ1bm5lcnMgd2l0aG91dFxuICogZGVsYXlpbmcgc3RhcnR1cCBub3RpY2VhYmx5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluZFBpZE9uUG9ydChwb3J0OiBudW1iZXIpOiBQcm9taXNlPG51bWJlciB8IG51bGw+IHtcbiAgY29uc3QgeyBleGVjRmlsZTogZXhlY0ZpbGVDYiB9ID0gYXdhaXQgaW1wb3J0KCdub2RlOmNoaWxkX3Byb2Nlc3MnKTtcbiAgY29uc3QgeyBwcm9taXNpZnkgfSA9IGF3YWl0IGltcG9ydCgnbm9kZTp1dGlsJyk7XG4gIGNvbnN0IGV4ZWNGaWxlQXN5bmMgPSBwcm9taXNpZnkoZXhlY0ZpbGVDYik7XG5cbiAgLy8gUXVlcnkgb25seSBMSVNURU4gc29ja2V0cyBzbyBlc3RhYmxpc2hlZCBjbGllbnQgY29ubmVjdGlvbnMgdG8gdGhlIGNvbnNvbGVcbiAgLy8gZG9uJ3QgZ2V0IG1pc3Rha2VuIGZvciB0aGUgb3duaW5nIGxlYWRlciBwcm9jZXNzLlxuICBmb3IgKGNvbnN0IGNtZCBvZiBbXG4gICAgeyBiaW46ICdsc29mJywgYXJnczogWyctblAnLCAnLWlUQ1A6JyArIFN0cmluZyhwb3J0KSwgJy1zVENQOkxJU1RFTicsICctdCddIH0sXG4gICAgeyBiaW46ICdzcycsIGFyZ3M6IFsnLWx0bnAnLCBgc3BvcnQgPSA6JHtwb3J0fWBdIH0sXG4gICAgeyBiaW46ICdmdXNlcicsIGFyZ3M6IFsnLW4nLCAndGNwJywgU3RyaW5nKHBvcnQpXSB9LFxuICBdKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgc3Rkb3V0LCBzdGRlcnIgfSA9IGF3YWl0IGV4ZWNGaWxlQXN5bmMoY21kLmJpbiwgY21kLmFyZ3MsIHsgdGltZW91dDogQ09NTUFORF9USU1FT1VUX01TIH0pO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gKHN0ZG91dCB8fCBzdGRlcnIgfHwgJycpLnRyaW0oKTtcbiAgICAgIGlmICghb3V0cHV0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgcGlkczogbnVtYmVyW10gPSBbXTtcbiAgICAgIGlmIChjbWQuYmluID09PSAnc3MnKSB7XG4gICAgICAgIHBpZHMgPSBvdXRwdXRcbiAgICAgICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAgICAgLmZsYXRNYXAoKGxpbmUpID0+IEFycmF5LmZyb20obGluZS5tYXRjaEFsbCgvcGlkPShcXGQrKS9nKSwgKG1hdGNoKSA9PiBwYXJzZVBpZFRva2VuKG1hdGNoWzFdKSkpXG4gICAgICAgICAgLmZpbHRlcigocGlkKTogcGlkIGlzIG51bWJlciA9PiBwaWQgIT09IG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZnVzZXIgb3V0cHV0cyB0byBzdGRlcnIgb24gc29tZSBzeXN0ZW1zOyBsc29mIGVtaXRzIG9uZSBQSUQgcGVyIGxpbmUuXG4gICAgICAgIHBpZHMgPSBvdXRwdXRcbiAgICAgICAgICAuc3BsaXQoL1xccysvKVxuICAgICAgICAgIC5tYXAoKHRva2VuKSA9PiBwYXJzZVBpZFRva2VuKHRva2VuKSlcbiAgICAgICAgICAuZmlsdGVyKChwaWQpOiBwaWQgaXMgbnVtYmVyID0+IHBpZCAhPT0gbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG90aGVyUGlkID0gcGlkcy5maW5kKHAgPT4gcCAhPT0gcHJvY2Vzcy5waWQpO1xuICAgICAgaWYgKG90aGVyUGlkKSByZXR1cm4gb3RoZXJQaWQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICBjb250aW51ZTsgLy8gY29tbWFuZCBub3QgZm91bmQgb3Igbm8gcmVzdWx0cyDigJQgdHJ5IG5leHRcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogS2lsbCBhIHN0YWxlIHByb2Nlc3MgaG9sZGluZyBhIHBvcnQuIFNlbmRzIFNJR1RFUk0sIHdhaXRzIGJyaWVmbHksXG4gKiB0aGVuIFNJR0tJTEwgaWYgc3RpbGwgYWxpdmUuIE9ubHkga2lsbHMgRG9sbGhvdXNlTUNQIHByb2Nlc3Nlc1xuICogKHZlcmlmaWVkIGJ5IGNoZWNraW5nIHRoZSBjb21tYW5kIGxpbmUgYW5kIHVzZXIgb3duZXJzaGlwKS5cbiAqXG4gKiBUaW1lb3V0OiAxcyBmb3IgcHMgdmVyaWZpY2F0aW9uLiBLaWxsIHdhaXQ6IDMwMG1zIMOXIDEwIHBvbGxzID0gM3NcbiAqIGJlZm9yZSBlc2NhbGF0aW5nIHRvIFNJR0tJTEwuIFRvdGFsIHdvcnN0IGNhc2U6IH40cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGtpbGxTdGFsZVByb2Nlc3MocGlkOiBudW1iZXIsIHBvcnQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBvdXRjb21lID0gYXdhaXQga2lsbFN0YWxlUHJvY2Vzc0RldGFpbGVkKHBpZCwgcG9ydCk7XG4gIHJldHVybiBvdXRjb21lLmtpbGxlZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGtpbGxTdGFsZVByb2Nlc3NEZXRhaWxlZChcbiAgcGlkOiBudW1iZXIsXG4gIHBvcnQ6IG51bWJlcixcbiAgb3B0aW9uczogS2lsbFN0YWxlUHJvY2Vzc09wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8S2lsbFN0YWxlUHJvY2Vzc091dGNvbWU+IHtcbiAgY29uc3QgcHJvY2Vzc0luZm8gPSBhd2FpdCBpbnNwZWN0UHJvY2VzcyhwaWQpO1xuICBpZiAoIXByb2Nlc3NJbmZvKSB7XG4gICAgYXdhaXQgbG9nZ2VyLmRlYnVnKGBbV2ViVUldIENhbm5vdCB2ZXJpZnkgcHJvY2VzcyAke3BpZH0g4oCUIHNraXBwaW5nIGtpbGxgKTtcbiAgICByZXR1cm4geyBraWxsZWQ6IGZhbHNlLCByZWFzb246ICdpbnNwZWN0X2ZhaWxlZCcsIHBpZCB9O1xuICB9XG5cbiAgY29uc3QgZ3VhcmRGYWlsdXJlID0gYXdhaXQgZ2V0S2lsbEd1YXJkRmFpbHVyZShwcm9jZXNzSW5mbywgcG9ydCwgb3B0aW9ucyk7XG4gIGlmIChndWFyZEZhaWx1cmUpIHtcbiAgICByZXR1cm4gZ3VhcmRGYWlsdXJlO1xuICB9XG4gIGNvbnN0IHBhcmVudENvbW1hbmQgPSBwcm9jZXNzSW5mby5wYXJlbnRQaWQgPiBST09UX1BBUkVOVF9QSURcbiAgICA/IChhd2FpdCBnZXRQcm9jZXNzQ29tbWFuZChwcm9jZXNzSW5mby5wYXJlbnRQaWQpKSA/PyB1bmRlZmluZWRcbiAgICA6IHVuZGVmaW5lZDtcblxuICBhd2FpdCBsb2dnZXIuZGVidWcoYFtXZWJVSV0gVmVyaWZpZWQgc3RhbGUgcHJvY2VzcyAke3BpZH0gaXMgRG9sbGhvdXNlTUNQYCwgeyBjbWRMaW5lOiBwcm9jZXNzSW5mby5jb21tYW5kLCBwYXJlbnRQaWQ6IHByb2Nlc3NJbmZvLnBhcmVudFBpZCwgcGFyZW50Q29tbWFuZCB9KTtcblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB0ZXJtaW5hdGVQcm9jZXNzKHByb2Nlc3NJbmZvLCBwb3J0LCBwYXJlbnRDb21tYW5kKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKCFpc1BpZEFsaXZlKHBpZCkpIHtcbiAgICAgIHJldHVybiBidWlsZEtpbGxPdXRjb21lKHRydWUsICdhbHJlYWR5X2RlYWQnLCBwcm9jZXNzSW5mbywgcGFyZW50Q29tbWFuZCk7XG4gICAgfVxuICAgIHJldHVybiBidWlsZEtpbGxPdXRjb21lKGZhbHNlLCAnc2lnbmFsX2ZhaWxlZCcsIHByb2Nlc3NJbmZvLCBwYXJlbnRDb21tYW5kLCBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycikpO1xuICB9XG59XG5cbi8qKlxuICogRGV0ZWN0IGFuZCByZWNvdmVyIGZyb20gYSBzdGFsZSBwcm9jZXNzIHNxdWF0dGluZyBvbiB0aGUgcG9ydC5cbiAqIENvbXBhcmVzIHRoZSBwb3J0IGhvbGRlcidzIFBJRCBhZ2FpbnN0IHRoZSBsZWFkZXIgbG9jayBmaWxlIHRvIGRldGVybWluZVxuICogaWYgaXQncyBhIHNxdWF0dGVyLiBSZXR1cm5zIHRydWUgaWYgdGhlIHNxdWF0dGVyIHdhcyBraWxsZWQuXG4gKlxuICogVGltZW91dHM6IGxzb2YgMXMsIHBzIDFzLCBTSUdURVJNIHdhaXQgM3Mg4oCUIG1heCB+NXMgdG90YWwuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWNvdmVyU3RhbGVQb3J0KHBvcnQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBzdGFsZVBpZCA9IGF3YWl0IGZpbmRQaWRPblBvcnQocG9ydCk7XG4gIGlmICghc3RhbGVQaWQpIHJldHVybiBmYWxzZTtcblxuICAvLyBUT0NUT1UgbWl0aWdhdGlvbjogYSBuZXcgcHJvY2VzcyBtYXkgaGF2ZSBqdXN0IGJvdW5kIHRoZSBwb3J0IGJ1dCBub3QgeWV0XG4gIC8vIHdyaXR0ZW4gaXRzIGxvY2sgZmlsZS4gUmVhZCB0aGUgbG9jaywgcGF1c2UsIHJlLXJlYWQuIElmIHRoZSBzZWNvbmQgcmVhZFxuICAvLyBub3cgbWF0Y2hlcyB0aGUgcG9ydCBob2xkZXIsIGl0J3MgYSBmcmVzaCBsZWFkZXIg4oCUIGRvbid0IGtpbGwuXG4gIGNvbnN0IHsgcmVhZExlYWRlckxvY2sgfSA9IGF3YWl0IGltcG9ydCgnLi9MZWFkZXJFbGVjdGlvbi5qcycpO1xuICBmb3IgKGxldCBjaGVjayA9IDA7IGNoZWNrIDwgTE9DS19SRUNIRUNLX0FUVEVNUFRTOyBjaGVjaysrKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxvY2sgPSBhd2FpdCByZWFkTGVhZGVyTG9jaygpO1xuICAgICAgaWYgKGxvY2s/LnBpZCA9PT0gc3RhbGVQaWQgJiYgbG9jaz8ucG9ydCA9PT0gcG9ydCAmJiBsb2NrLnBpZCAhPT0gcHJvY2Vzcy5waWQpIHtcbiAgICAgICAgYXdhaXQgbG9nZ2VyLndhcm4oYFtXZWJVSV0gUG9ydCAke3BvcnR9IGhlbGQgYnkgbGVnaXRpbWF0ZSBsZWFkZXIgKHBpZCAke3N0YWxlUGlkfSkg4oCUIG5vdCBraWxsaW5nYCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIENhbid0IHJlYWQgbG9jayBmaWxlIOKAlCBjb250aW51ZSB0byBuZXh0IGNoZWNrIG9yIGtpbGxcbiAgICB9XG4gICAgaWYgKGNoZWNrIDwgTE9DS19SRUNIRUNLX0FUVEVNUFRTIC0gMSkge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIExPQ0tfUkVDSEVDS19ERUxBWV9NUykpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG91dGNvbWUgPSBhd2FpdCBraWxsU3RhbGVQcm9jZXNzRGV0YWlsZWQoc3RhbGVQaWQsIHBvcnQpO1xuICBpZiAob3V0Y29tZS5raWxsZWQpIHtcbiAgICBsb2dnZXIuaW5mbyhgW1dlYlVJXSBTdGFsZSBwcm9jZXNzICR7c3RhbGVQaWR9IHJlbW92ZWQgZnJvbSBwb3J0ICR7cG9ydH1gKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgU0lHS0lMTF9XQUlUX01TKSk7IC8vIGJyaWVmIHBhdXNlIGZvciBwb3J0IHJlbGVhc2VcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBsb2dnZXIuZGVidWcoYFtXZWJVSV0gU3RhbGUtcG9ydCByZWNvdmVyeSBza2lwcGVkIGZvciBwaWQgJHtzdGFsZVBpZH1gLCB7XG4gICAgICByZWFzb246IG91dGNvbWUucmVhc29uLFxuICAgICAgcGFyZW50UGlkOiBvdXRjb21lLnBhcmVudFBpZCxcbiAgICAgIHBhcmVudENvbW1hbmQ6IG91dGNvbWUucGFyZW50Q29tbWFuZCxcbiAgICAgIGRldGFpbDogb3V0Y29tZS5kZXRhaWwsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG91dGNvbWUua2lsbGVkO1xufVxuIl19
@@ -17,7 +17,7 @@ import type { MetricSnapshot } from '../../metrics/types.js';
17
17
  import type { MemoryLogSink } from '../../logging/sinks/MemoryLogSink.js';
18
18
  import type { MemoryMetricsSink } from '../../metrics/sinks/MemoryMetricsSink.js';
19
19
  import { logger } from '../../utils/logger.js';
20
- import { detectLegacyLeader, readLeaderLock, deleteLeaderLock, type ElectionResult, type ConsoleLeaderInfo, type LeaderPreferenceDecision } from './LeaderElection.js';
20
+ import { isLeaderWebConsoleReachable, forceClaimLeadership, detectLegacyLeader, readLeaderLock, deleteLeaderLock, type ElectionResult, type ConsoleLeaderInfo, type LeaderPreferenceDecision } from './LeaderElection.js';
21
21
  import { findPidOnPort } from './StaleProcessRecovery.js';
22
22
  /**
23
23
  * Options for starting the unified console.
@@ -94,6 +94,18 @@ export interface PortOwnerReplacementDecision {
94
94
  ownerPid: number | null;
95
95
  preference: LeaderPreferenceDecision | null;
96
96
  }
97
+ interface FollowerAuthorityResolution {
98
+ election: ElectionResult;
99
+ discovery: PortLeaderDiscovery | null;
100
+ replacement: PortOwnerReplacementDecision | null;
101
+ forcedClaim: boolean;
102
+ }
103
+ interface FollowerAuthorityDependencies {
104
+ isLeaderWebConsoleReachableImpl?: typeof isLeaderWebConsoleReachable;
105
+ discoverLeaderServingPortImpl?: typeof discoverLeaderServingPort;
106
+ forceClaimLeadershipImpl?: typeof forceClaimLeadership;
107
+ deleteLeaderLockImpl?: typeof deleteLeaderLock;
108
+ }
97
109
  interface DiscoveryDependencies {
98
110
  fetchImpl?: typeof fetch;
99
111
  findPidOnPortImpl?: typeof findPidOnPort;
@@ -105,6 +117,7 @@ interface BindFailureRecoveryDependencies extends DiscoveryDependencies {
105
117
  }
106
118
  export declare function recoverLeaderBindFailure(provisionalLeader: ConsoleLeaderInfo, port: number, authToken: string | null, deps?: BindFailureRecoveryDependencies): Promise<BindFailureRecoveryResult>;
107
119
  export declare function evaluatePortOwnerReplacement(candidateLeader: ConsoleLeaderInfo, fallback: PortLeaderDiscovery): PortOwnerReplacementDecision;
120
+ export declare function resolveFollowerAuthority(sessionId: string, consolePort: number, election: ElectionResult, deps?: FollowerAuthorityDependencies): Promise<FollowerAuthorityResolution>;
108
121
  /**
109
122
  * Start the unified web console.
110
123
  *
@@ -1 +1 @@
1
- {"version":3,"file":"UnifiedConsole.d.ts","sourceRoot":"","sources":["../../../src/web/console/UnifiedConsole.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"UnifiedConsole.d.ts","sourceRoot":"","sources":["../../../src/web/console/UnifiedConsole.ts"],"names":[],"mappings":"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"}