@dollhousemcp/mcp-server 2.0.27-rc.4 → 2.0.27-rc.5

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,6 +1,6 @@
1
1
  # Changelog
2
2
 
3
- ## [2.0.27-rc.4] - 2026-04-19
3
+ ## [2.0.27-rc.5] - 2026-04-19
4
4
 
5
5
  - Version bump
6
6
 
@@ -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.27-rc.4";
6
- export declare const BUILD_TIMESTAMP = "2026-04-19T17:27:21.141Z";
5
+ export declare const PACKAGE_VERSION = "2.0.27-rc.5";
6
+ export declare const BUILD_TIMESTAMP = "2026-04-19T18:04:08.471Z";
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.27-rc.4';
6
- export const BUILD_TIMESTAMP = '2026-04-19T17:27:21.141Z';
5
+ export const PACKAGE_VERSION = '2.0.27-rc.5';
6
+ export const BUILD_TIMESTAMP = '2026-04-19T18:04:08.471Z';
7
7
  export const BUILD_TYPE = 'npm';
8
8
  export const PACKAGE_NAME = '@dollhousemcp/mcp-server';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDO0FBQzdDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcyLjAuMjctcmMuNCc7XG5leHBvcnQgY29uc3QgQlVJTERfVElNRVNUQU1QID0gJzIwMjYtMDQtMTlUMTc6Mjc6MjEuMTQxWic7XG5leHBvcnQgY29uc3QgQlVJTERfVFlQRTogJ25wbScgfCAnZ2l0JyA9ICducG0nO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAZG9sbGhvdXNlbWNwL21jcC1zZXJ2ZXInO1xuIl19
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDO0FBQzdDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcyLjAuMjctcmMuNSc7XG5leHBvcnQgY29uc3QgQlVJTERfVElNRVNUQU1QID0gJzIwMjYtMDQtMTlUMTg6MDQ6MDguNDcxWic7XG5leHBvcnQgY29uc3QgQlVJTERfVFlQRTogJ25wbScgfCAnZ2l0JyA9ICducG0nO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAZG9sbGhvdXNlbWNwL21jcC1zZXJ2ZXInO1xuIl19
@@ -88,6 +88,8 @@ export interface IngestRoutesResult {
88
88
  router: Router;
89
89
  /** Get all tracked sessions */
90
90
  getSessions: () => SessionInfo[];
91
+ /** Import active follower sessions from a displaced leader during takeover. */
92
+ importSessions: (sessions: SessionInfo[]) => void;
91
93
  /** Register the leader as a session */
92
94
  registerLeaderSession: (sessionId: string, pid: number) => void;
93
95
  /** Register the web console as a session so the indicator is never empty (#1805) */
@@ -1 +1 @@
1
- {"version":3,"file":"IngestRoutes.d.ts","sourceRoot":"","sources":["../../../src/web/console/IngestRoutes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAgB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAE1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AA+B7D;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,GAAG,EAAE,MAAM,CAAC;IACZ,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,+FAA+F;IAC/F,aAAa,EAAE,MAAM,CAAC;IACtB,uEAAuE;IACvE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3B,wEAAwE;IACxE,QAAQ,EAAE,OAAO,CAAC;IAClB,wEAAwE;IACxE,aAAa,EAAE,OAAO,CAAC;IACvB,iGAAiG;IACjG,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC;IACxB,4DAA4D;IAC5D,aAAa,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC/C,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;IACvD,oBAAoB,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7E,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,WAAW,EAAE,MAAM,WAAW,EAAE,CAAC;IACjC,uCAAuC;IACvC,qBAAqB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,oFAAoF;IACpF,sBAAsB,EAAE,MAAM,IAAI,CAAC;CACpC;AAqBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,gBAAgB,GAAG,kBAAkB,CAucnF"}
1
+ {"version":3,"file":"IngestRoutes.d.ts","sourceRoot":"","sources":["../../../src/web/console/IngestRoutes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAgB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAE1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAgC7D;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,GAAG,EAAE,MAAM,CAAC;IACZ,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,+FAA+F;IAC/F,aAAa,EAAE,MAAM,CAAC;IACtB,uEAAuE;IACvE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3B,wEAAwE;IACxE,QAAQ,EAAE,OAAO,CAAC;IAClB,wEAAwE;IACxE,aAAa,EAAE,OAAO,CAAC;IACvB,iGAAiG;IACjG,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC;IACxB,4DAA4D;IAC5D,aAAa,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC/C,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;IACvD,oBAAoB,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7E,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,WAAW,EAAE,MAAM,WAAW,EAAE,CAAC;IACjC,+EAA+E;IAC/E,cAAc,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;IAClD,uCAAuC;IACvC,qBAAqB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,oFAAoF;IACpF,sBAAsB,EAAE,MAAM,IAAI,CAAC;CACpC;AAqBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,gBAAgB,GAAG,kBAAkB,CAwfnF"}
@@ -31,6 +31,7 @@ const RATE_LIMIT_WINDOW_MS = 60_000;
31
31
  const REAPER_INTERVAL_MS = 5_000;
32
32
  /** How long since last heartbeat before a session is considered dead (ms) */
33
33
  const SESSION_STALE_MS = 15_000;
34
+ const TAKEOVER_IMPORTED_SESSION_GRACE_MS = 60_000;
34
35
  /** Timeout for legacy port federation/proxy requests (ms) */
35
36
  const LEGACY_FETCH_TIMEOUT_MS = 2_000;
36
37
  /** How long before ended sessions are purged from the Map (ms) */
@@ -69,6 +70,7 @@ export function createIngestRoutes(broadcasts) {
69
70
  // When the user dismisses a pid=0 orphan, we add it here. The next heartbeat
70
71
  // (every 10s) carries the PID — we SIGTERM immediately and move to killedSessions.
71
72
  const pendingKills = new Set();
73
+ const importedSessionGraceUntil = new Map();
72
74
  /** Execute a deferred kill if we now have a PID. */
73
75
  function tryExecutePendingKill(sessionId, pid) {
74
76
  const killPid = pid || sessions.get(sessionId)?.pid;
@@ -134,6 +136,7 @@ export function createIngestRoutes(broadcasts) {
134
136
  if (!existing) {
135
137
  return autoRegister(sessionId, pid, authenticated, serverVersion, consoleProtocolVersion);
136
138
  }
139
+ importedSessionGraceUntil.delete(sessionId);
137
140
  if (existing.status === 'ended') {
138
141
  existing.status = 'active';
139
142
  logger.info('[IngestRoutes] Revived ended session still sending data', {
@@ -403,6 +406,12 @@ export function createIngestRoutes(broadcasts) {
403
406
  if (session.isLeader || session.kind === 'console')
404
407
  continue;
405
408
  const age = now - new Date(session.lastHeartbeat).getTime();
409
+ const graceUntil = importedSessionGraceUntil.get(id) ?? 0;
410
+ if (graceUntil > now)
411
+ continue;
412
+ if (graceUntil !== 0) {
413
+ importedSessionGraceUntil.delete(id);
414
+ }
406
415
  if (age <= SESSION_STALE_MS)
407
416
  continue;
408
417
  session.status = 'ended';
@@ -419,6 +428,7 @@ export function createIngestRoutes(broadcasts) {
419
428
  function purgeStaleEntries(now) {
420
429
  for (const [id, session] of sessions) {
421
430
  if (session.status === 'ended' && now - new Date(session.lastHeartbeat).getTime() > ENDED_PURGE_MS) {
431
+ importedSessionGraceUntil.delete(id);
422
432
  sessions.delete(id);
423
433
  }
424
434
  }
@@ -432,6 +442,43 @@ export function createIngestRoutes(broadcasts) {
432
442
  function getSessions() {
433
443
  return Array.from(sessions.values()).filter(s => s.status === 'active');
434
444
  }
445
+ function importSessions(importedSessions) {
446
+ const now = Date.now();
447
+ for (const imported of importedSessions) {
448
+ if (imported.status !== 'active')
449
+ continue;
450
+ if (imported.isLeader || imported.kind === 'console')
451
+ continue;
452
+ if (killedSessions.has(imported.sessionId) || pendingKills.has(imported.sessionId))
453
+ continue;
454
+ const normalizedSessionId = normalizeInput(imported.sessionId);
455
+ const existing = sessions.get(normalizedSessionId);
456
+ if (existing?.isLeader || existing?.kind === 'console') {
457
+ continue;
458
+ }
459
+ const displayName = imported.displayName
460
+ ? namePool.adopt(normalizedSessionId, imported.displayName)
461
+ : namePool.assign(normalizedSessionId);
462
+ const color = imported.color || namePool.getColor(normalizedSessionId) || '#3b82f6';
463
+ const merged = {
464
+ sessionId: normalizedSessionId,
465
+ displayName,
466
+ color,
467
+ pid: imported.pid || existing?.pid || 0,
468
+ startedAt: imported.startedAt || existing?.startedAt || new Date(now).toISOString(),
469
+ lastHeartbeat: imported.lastHeartbeat || existing?.lastHeartbeat || new Date(now).toISOString(),
470
+ status: 'active',
471
+ isLeader: false,
472
+ authenticated: imported.authenticated ?? existing?.authenticated ?? false,
473
+ kind: 'mcp',
474
+ serverVersion: normalizeServerVersion(imported.serverVersion || existing?.serverVersion),
475
+ consoleProtocolVersion: normalizeConsoleProtocolVersion(imported.consoleProtocolVersion ?? existing?.consoleProtocolVersion),
476
+ };
477
+ sessions.set(normalizedSessionId, merged);
478
+ importedSessionGraceUntil.set(normalizedSessionId, now + TAKEOVER_IMPORTED_SESSION_GRACE_MS);
479
+ broadcasts.sessionBroadcast?.(merged);
480
+ }
481
+ }
435
482
  function registerLeaderSession(sessionId, pid) {
436
483
  const displayName = namePool.assign(sessionId, true);
437
484
  const color = namePool.getColor(sessionId) ?? '#3b82f6';
@@ -477,6 +524,6 @@ export function createIngestRoutes(broadcasts) {
477
524
  });
478
525
  logger.info('[IngestRoutes] Console session registered', { sessionId: consoleId, pid: process.pid });
479
526
  }
480
- return { router, getSessions, registerLeaderSession, registerConsoleSession };
527
+ return { router, getSessions, importSessions, registerLeaderSession, registerConsoleSession };
481
528
  }
482
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5nZXN0Um91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dlYi9jb25zb2xlL0luZ2VzdFJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUkxQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUNMLHdCQUF3QixFQUN4QiwrQkFBK0IsR0FDaEMsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixrREFBa0Q7QUFDbEQsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7QUFFL0IscURBQXFEO0FBQ3JELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQztBQUM1QixNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQztBQUVwQyxpREFBaUQ7QUFDakQsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7QUFFakMsNkVBQTZFO0FBQzdFLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDO0FBRWhDLDZEQUE2RDtBQUM3RCxNQUFNLHVCQUF1QixHQUFHLEtBQUssQ0FBQztBQUV0QyxrRUFBa0U7QUFDbEUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLFlBQVk7QUFvRi9DLDZEQUE2RDtBQUM3RCxTQUFTLGNBQWMsQ0FBQyxDQUFTO0lBQy9CLE9B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ZXNDb250ZW50IjpbIi8qKlxuICogRXZlbnQgaW5nZXN0aW9uIHJvdXRlcyBmb3IgdGhlIHVuaWZpZWQgd2ViIGNvbnNvbGUuXG4gKlxuICogVGhlIGNvbnNvbGUgbGVhZGVyIG1vdW50cyB0aGVzZSByb3V0ZXMgc28gZm9sbG93ZXIgTUNQIHNlcnZlcnMgY2FuXG4gKiBmb3J3YXJkIHRoZWlyIGxvZ3MsIG1ldHJpY3MsIGFuZCBzZXNzaW9uIGxpZmVjeWNsZSBldmVudHMuIEFsbCBpbmdlc3RlZFxuICogZW50cmllcyBhcmUgc3RhbXBlZCB3aXRoIGBfc2Vzc2lvbklkYCBpbiB0aGVpciBkYXRhIGZpZWxkIGFuZCB0aGVuXG4gKiBicm9hZGNhc3QgdG8gU1NFIGNsaWVudHMgdmlhIHRoZSBleGlzdGluZyBsb2cvbWV0cmljcyBicm9hZGNhc3QgaG9va3MuXG4gKlxuICogUm91dGVzOlxuICogLSBQT1NUIC9hcGkvaW5nZXN0L2xvZ3MgICAgIOKAlCBCYXRjaGVkIGxvZyBlbnRyaWVzIGZyb20gYSBmb2xsb3dlclxuICogLSBQT1NUIC9hcGkvaW5nZXN0L21ldHJpY3MgIOKAlCBNZXRyaWMgc25hcHNob3RzIGZyb20gYSBmb2xsb3dlclxuICogLSBQT1NUIC9hcGkvaW5nZXN0L3Nlc3Npb24gIOKAlCBTZXNzaW9uIGxpZmVjeWNsZSBldmVudHMgKHN0YXJ0ZWQvc3RvcHBlZC9oZWFydGJlYXQpXG4gKiAtIEdFVCAgL2FwaS9zZXNzaW9ucyAgICAgICAg4oCUIEFjdGl2ZSBzZXNzaW9uIGxpc3QgZm9yIHRoZSBVSVxuICpcbiAqIEBzaW5jZSB2Mi4xLjAg4oCUIElzc3VlICMxNzAwXG4gKi9cblxuaW1wb3J0IGV4cHJlc3MsIHsgUm91dGVyIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3QsIFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgdHlwZSB7IFVuaWZpZWRMb2dFbnRyeSB9IGZyb20gJy4uLy4uL2xvZ2dpbmcvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZXRyaWNTbmFwc2hvdCB9IGZyb20gJy4uLy4uL21ldHJpY3MvdHlwZXMuanMnO1xuaW1wb3J0IHsgU2xpZGluZ1dpbmRvd1JhdGVMaW1pdGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvU2xpZGluZ1dpbmRvd1JhdGVMaW1pdGVyLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgU2Vzc2lvbk5hbWVQb29sIH0gZnJvbSAnLi9TZXNzaW9uTmFtZXMuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IGVudiB9IGZyb20gJy4uLy4uL2NvbmZpZy9lbnYuanMnO1xuaW1wb3J0IHsgUEFDS0FHRV9WRVJTSU9OIH0gZnJvbSAnLi4vLi4vZ2VuZXJhdGVkL3ZlcnNpb24uanMnO1xuaW1wb3J0IHtcbiAgQ09OU09MRV9QUk9UT0NPTF9WRVJTSU9OLFxuICBMRUdBQ1lfQ09OU09MRV9QUk9UT0NPTF9WRVJTSU9OLFxufSBmcm9tICcuL0xlYWRlckVsZWN0aW9uLmpzJztcblxuLyoqIE1heGltdW0gcGF5bG9hZCBzaXplIGZvciBpbmdlc3Rpb24gcmVxdWVzdHMgKi9cbmNvbnN0IE1BWF9QQVlMT0FEX1NJWkUgPSAnMW1iJztcblxuLyoqIFJhdGUgbGltaXQ6IG1heCByZXF1ZXN0cyBwZXIgd2luZG93IHBlciBzb3VyY2UgKi9cbmNvbnN0IFJBVEVfTElNSVRfTUFYID0gMTAwMDtcbmNvbnN0IFJBVEVfTElNSVRfV0lORE9XX01TID0gNjBfMDAwO1xuXG4vKiogSG93IG9mdGVuIHRvIGNoZWNrIGZvciBzdGFsZSBzZXNzaW9ucyAobXMpICovXG5jb25zdCBSRUFQRVJfSU5URVJWQUxfTVMgPSA1XzAwMDtcblxuLyoqIEhvdyBsb25nIHNpbmNlIGxhc3QgaGVhcnRiZWF0IGJlZm9yZSBhIHNlc3Npb24gaXMgY29uc2lkZXJlZCBkZWFkIChtcykgKi9cbmNvbnN0IFNFU1NJT05fU1RBTEVfTVMgPSAxNV8wMDA7XG5cbi8qKiBUaW1lb3V0IGZvciBsZWdhY3kgcG9ydCBmZWRlcmF0aW9uL3Byb3h5IHJlcXVlc3RzIChtcykgKi9cbmNvbnN0IExFR0FDWV9GRVRDSF9USU1FT1VUX01TID0gMl8wMDA7XG5cbi8qKiBIb3cgbG9uZyBiZWZvcmUgZW5kZWQgc2Vzc2lvbnMgYXJlIHB1cmdlZCBmcm9tIHRoZSBNYXAgKG1zKSAqL1xuY29uc3QgRU5ERURfUFVSR0VfTVMgPSA1ICogNjBfMDAwOyAvLyA1IG1pbnV0ZXNcblxuLyoqXG4gKiBUcmFja2VkIHNlc3Npb24gaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvbkluZm8ge1xuICAvKiogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgc2Vzc2lvbiAoVVVJRCBvciBgY29uc29sZS08cGlkPmApLiAqL1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgLyoqIEZyaWVuZGx5IHB1cHBldCBuYW1lIChlLmcuLCBcIktlcm1pdFwiLCBcIlB1bmNoXCIpIG9yIFwiV2ViIENvbnNvbGVcIi4gKi9cbiAgZGlzcGxheU5hbWU6IHN0cmluZztcbiAgLyoqIENhbm9uaWNhbCBoZXggY29sb3IgZm9yIHRoaXMgcHVwcGV0IGNoYXJhY3Rlci4gKi9cbiAgY29sb3I6IHN0cmluZztcbiAgLyoqIE9TIHByb2Nlc3MgSUQgb2YgdGhlIE1DUCBzZXJ2ZXIgb3Igd2ViIGNvbnNvbGUgcHJvY2Vzcy4gKi9cbiAgcGlkOiBudW1iZXI7XG4gIC8qKiBJU08gdGltZXN0YW1wIHdoZW4gdGhlIHNlc3Npb24gc3RhcnRlZC4gKi9cbiAgc3RhcnRlZEF0OiBzdHJpbmc7XG4gIC8qKiBJU08gdGltZXN0YW1wIG9mIHRoZSBtb3N0IHJlY2VudCBoZWFydGJlYXQgKGZvbGxvd2Vycykgb3IgcmVnaXN0cmF0aW9uIChsZWFkZXIvY29uc29sZSkuICovXG4gIGxhc3RIZWFydGJlYXQ6IHN0cmluZztcbiAgLyoqIExpZmVjeWNsZSBzdGF0dXMg4oCUICdhY3RpdmUnIHVudGlsIGVuZGVkIG9yIHJlYXBlZCBmb3Igc3RhbGVuZXNzLiAqL1xuICBzdGF0dXM6ICdhY3RpdmUnIHwgJ2VuZGVkJztcbiAgLyoqIFRydWUgaWYgdGhpcyBzZXNzaW9uIHdvbiBsZWFkZXIgZWxlY3Rpb24gYW5kIG93bnMgdGhlIHRva2VuIGZpbGUuICovXG4gIGlzTGVhZGVyOiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGlzIHNlc3Npb24gY29ubmVjdGVkIHdpdGggYSB2YWxpZCBCZWFyZXIgdG9rZW4gKCMxODA1KS4gKi9cbiAgYXV0aGVudGljYXRlZDogYm9vbGVhbjtcbiAgLyoqIFNlc3Npb24ga2luZCDigJQgJ21jcCcgZm9yIE1DUCBzdGRpbyBzZXNzaW9ucywgJ2NvbnNvbGUnIGZvciB0aGUgd2ViIGNvbnNvbGUgaXRzZWxmICgjMTgwNSkuICovXG4gIGtpbmQ6ICdtY3AnIHwgJ2NvbnNvbGUnO1xuICAvKiogRG9sbGhvdXNlTUNQIHBhY2thZ2UgdmVyc2lvbiByZXBvcnRlZCBieSB0aGUgc2Vzc2lvbi4gKi9cbiAgc2VydmVyVmVyc2lvbjogc3RyaW5nO1xuICAvKiogQ29uc29sZS9zZXNzaW9uIGNvbnRyYWN0IHZlcnNpb24gdXNlZCBmb3IgY29tcGF0aWJpbGl0eS1hd2FyZSB0YWtlb3Zlci4gKi9cbiAgY29uc29sZVByb3RvY29sVmVyc2lvbjogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBheWxvYWQgZm9yIFBPU1QgL2FwaS9pbmdlc3QvbG9nc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZ2VzdExvZ1BheWxvYWQge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgZW50cmllczogVW5pZmllZExvZ0VudHJ5W107XG59XG5cbi8qKlxuICogUGF5bG9hZCBmb3IgUE9TVCAvYXBpL2luZ2VzdC9tZXRyaWNzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5nZXN0TWV0cmljc1BheWxvYWQge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgc25hcHNob3Q6IE1ldHJpY1NuYXBzaG90O1xufVxuXG4vKipcbiAqIFBheWxvYWQgZm9yIFBPU1QgL2FwaS9pbmdlc3Qvc2Vzc2lvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb25FdmVudFBheWxvYWQge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgZXZlbnQ6ICdzdGFydGVkJyB8ICdzdG9wcGVkJyB8ICdoZWFydGJlYXQnO1xuICBwaWQ6IG51bWJlcjtcbiAgc3RhcnRlZEF0OiBzdHJpbmc7XG4gIHNlcnZlclZlcnNpb24/OiBzdHJpbmc7XG4gIGNvbnNvbGVQcm90b2NvbFZlcnNpb24/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ2FsbGJhY2tzIHByb3ZpZGVkIGJ5IHRoZSB1bmlmaWVkIGNvbnNvbGUgb3JjaGVzdHJhdG9yIGZvciBicm9hZGNhc3RpbmdcbiAqIGluZ2VzdGVkIGV2ZW50cyB0aHJvdWdoIHRoZSBleGlzdGluZyBTU0UgaW5mcmFzdHJ1Y3R1cmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5nZXN0QnJvYWRjYXN0cyB7XG4gIGxvZ0Jyb2FkY2FzdDogKGVudHJ5OiBVbmlmaWVkTG9nRW50cnkpID0+IHZvaWQ7XG4gIG1ldHJpY3NPblNuYXBzaG90PzogKHNuYXBzaG90OiBNZXRyaWNTbmFwc2hvdCkgPT4gdm9pZDtcbiAgc3RvcmVNZXRyaWNzU25hcHNob3Q/OiAoc25hcHNob3Q6IE1ldHJpY1NuYXBzaG90LCBzZXNzaW9uSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgc2Vzc2lvbkJyb2FkY2FzdD86IChldmVudDogU2Vzc2lvbkluZm8pID0+IHZvaWQ7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIGNyZWF0aW5nIGluZ2VzdCByb3V0ZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5nZXN0Um91dGVzUmVzdWx0IHtcbiAgcm91dGVyOiBSb3V0ZXI7XG4gIC8qKiBHZXQgYWxsIHRyYWNrZWQgc2Vzc2lvbnMgKi9cbiAgZ2V0U2Vzc2lvbnM6ICgpID0+IFNlc3Npb25JbmZvW107XG4gIC8qKiBSZWdpc3RlciB0aGUgbGVhZGVyIGFzIGEgc2Vzc2lvbiAqL1xuICByZWdpc3RlckxlYWRlclNlc3Npb246IChzZXNzaW9uSWQ6IHN0cmluZywgcGlkOiBudW1iZXIpID0+IHZvaWQ7XG4gIC8qKiBSZWdpc3RlciB0aGUgd2ViIGNvbnNvbGUgYXMgYSBzZXNzaW9uIHNvIHRoZSBpbmRpY2F0b3IgaXMgbmV2ZXIgZW1wdHkgKCMxODA1KSAqL1xuICByZWdpc3RlckNvbnNvbGVTZXNzaW9uOiAoKSA9PiB2b2lkO1xufVxuXG4vKiogTm9ybWFsaXplIGEgc3RyaW5nIHZpYSBVbmljb2RlVmFsaWRhdG9yIChETUNQLVNFQy0wMDQpICovXG5mdW5jdGlvbiBub3JtYWxpemVJbnB1dChzOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUocykubm9ybWFsaXplZENvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlcnZlclZlcnNpb24odmVyc2lvbj86IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgdmVyc2lvbiA9PT0gJ3N0cmluZycgJiYgdmVyc2lvbi50cmltKCkubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB2ZXJzaW9uLnRyaW0oKTtcbiAgfVxuICByZXR1cm4gJ3Vua25vd24nO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVDb25zb2xlUHJvdG9jb2xWZXJzaW9uKHZlcnNpb24/OiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAodHlwZW9mIHZlcnNpb24gPT09ICdudW1iZXInICYmIE51bWJlci5pc0ludGVnZXIodmVyc2lvbikgJiYgdmVyc2lvbiA+PSAwKSB7XG4gICAgcmV0dXJuIHZlcnNpb247XG4gIH1cbiAgcmV0dXJuIExFR0FDWV9DT05TT0xFX1BST1RPQ09MX1ZFUlNJT047XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBpbmdlc3Rpb24gcm91dGVzIGFuZCBzZXNzaW9uIHJlZ2lzdHJ5LlxuICpcbiAqIEBwYXJhbSBicm9hZGNhc3RzIC0gQ2FsbGJhY2tzIHRvIGZvcndhcmQgaW5nZXN0ZWQgZXZlbnRzIHRvIFNTRSBjbGllbnRzXG4gKiBAcmV0dXJucyBSb3V0ZXIgYW5kIHNlc3Npb24gbWFuYWdlbWVudCBmdW5jdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluZ2VzdFJvdXRlcyhicm9hZGNhc3RzOiBJbmdlc3RCcm9hZGNhc3RzKTogSW5nZXN0Um91dGVzUmVzdWx0IHtcbiAgY29uc3Qgcm91dGVyID0gUm91dGVyKCk7XG4gIGNvbnN0IHNlc3Npb25zID0gbmV3IE1hcDxzdHJpbmcsIFNlc3Npb25JbmZvPigpO1xuICBjb25zdCBuYW1lUG9vbCA9IG5ldyBTZXNzaW9uTmFtZVBvb2woKTtcbiAgY29uc3QgcmF0ZUxpbWl0ZXIgPSBuZXcgU2xpZGluZ1dpbmRvd1JhdGVMaW1pdGVyKFJBVEVfTElNSVRfTUFYLCBSQVRFX0xJTUlUX1dJTkRPV19NUyk7XG5cbiAgLy8gU2Vzc2lvbnMgdGhlIHVzZXIgZXhwbGljaXRseSBraWxsZWQg4oCUIG5ldmVyIGNvbWUgYmFjayAoIzE4NzApLlxuICAvLyBDbGVhcmVkIG9ubHkgb24gc2VydmVyIHJlc3RhcnQsIHdoaWNoIGlzIGFwcHJvcHJpYXRlIHNpbmNlIHRoYXQncyBhIG5ldyBjb250ZXh0LlxuICBjb25zdCBraWxsZWRTZXNzaW9ucyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIC8vIFNlc3Npb25zIHdhaXRpbmcgZm9yIGEgUElEIHNvIHdlIGNhbiBTSUdURVJNIHRoZW0gKCMxODcwKS5cbiAgLy8gV2hlbiB0aGUgdXNlciBkaXNtaXNzZXMgYSBwaWQ9MCBvcnBoYW4sIHdlIGFkZCBpdCBoZXJlLiBUaGUgbmV4dCBoZWFydGJlYXRcbiAgLy8gKGV2ZXJ5IDEwcykgY2FycmllcyB0aGUgUElEIOKAlCB3ZSBTSUdURVJNIGltbWVkaWF0ZWx5IGFuZCBtb3ZlIHRvIGtpbGxlZFNlc3Npb25zLlxuICBjb25zdCBwZW5kaW5nS2lsbHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAvKiogRXhlY3V0ZSBhIGRlZmVycmVkIGtpbGwgaWYgd2Ugbm93IGhhdmUgYSBQSUQuICovXG4gIGZ1bmN0aW9uIHRyeUV4ZWN1dGVQZW5kaW5nS2lsbChzZXNzaW9uSWQ6IHN0cmluZywgcGlkPzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qga2lsbFBpZCA9IHBpZCB8fCBzZXNzaW9ucy5nZXQoc2Vzc2lvbklkKT8ucGlkO1xuICAgIGlmICgha2lsbFBpZCkgcmV0dXJuO1xuICAgIHRyeSB7IHByb2Nlc3Mua2lsbChraWxsUGlkLCAnU0lHVEVSTScpOyB9IGNhdGNoIHsgLyogYWxyZWFkeSBkZWFkICovIH1cbiAgICBjb25zdCBleGlzdGluZyA9IHNlc3Npb25zLmdldChzZXNzaW9uSWQpO1xuICAgIGlmIChleGlzdGluZykgZXhpc3Rpbmcuc3RhdHVzID0gJ2VuZGVkJztcbiAgICBsb2dnZXIuaW5mbygnW0luZ2VzdFJvdXRlc10gRGVmZXJyZWQga2lsbCBleGVjdXRlZCDigJQgUElEIGFycml2ZWQnLCB7XG4gICAgICBkaXNwbGF5TmFtZTogZXhpc3Rpbmc/LmRpc3BsYXlOYW1lLCBzZXNzaW9uSWQsIHBpZDoga2lsbFBpZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBQcm9tb3RlIGEgcGVuZGluZyBraWxsIHRvIHBlcm1hbmVudC4gKi9cbiAgZnVuY3Rpb24gZmluYWxpemVQZW5kaW5nS2lsbChzZXNzaW9uSWQ6IHN0cmluZywgcGlkPzogbnVtYmVyKTogdm9pZCB7XG4gICAgdHJ5RXhlY3V0ZVBlbmRpbmdLaWxsKHNlc3Npb25JZCwgcGlkKTtcbiAgICBwZW5kaW5nS2lsbHMuZGVsZXRlKHNlc3Npb25JZCk7XG4gICAga2lsbGVkU2Vzc2lvbnMuYWRkKHNlc3Npb25JZCk7XG4gIH1cblxuICAvKiogQ3JlYXRlIGEgbmV3IHNlc3Npb24gZW50cnkgZm9yIGFuIG9ycGhhbi4gUmV0dXJucyBudWxsIG9uIGZhaWx1cmUuICovXG4gIGZ1bmN0aW9uIGF1dG9SZWdpc3RlcihcbiAgICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgICBwaWQ/OiBudW1iZXIsXG4gICAgYXV0aGVudGljYXRlZCA9IGZhbHNlLFxuICAgIHNlcnZlclZlcnNpb24/OiBzdHJpbmcsXG4gICAgY29uc29sZVByb3RvY29sVmVyc2lvbj86IG51bWJlcixcbiAgKTogU2Vzc2lvbkluZm8gfCBudWxsIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGlzcGxheU5hbWUgPSBuYW1lUG9vbC5hc3NpZ24oc2Vzc2lvbklkKTtcbiAgICAgIGNvbnN0IGNvbG9yID0gbmFtZVBvb2wuZ2V0Q29sb3Ioc2Vzc2lvbklkKSA/PyAnIzNiODJmNic7XG4gICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICBjb25zdCBpbmZvOiBTZXNzaW9uSW5mbyA9IHtcbiAgICAgICAgc2Vzc2lvbklkLCBkaXNwbGF5TmFtZSwgY29sb3IsXG4gICAgICAgIHBpZDogcGlkIHx8IDAsXG4gICAgICAgIHN0YXJ0ZWRBdDogbm93LCBsYXN0SGVhcnRiZWF0OiBub3csXG4gICAgICAgIHN0YXR1czogJ2FjdGl2ZScsIGlzTGVhZGVyOiBmYWxzZSwgYXV0aGVudGljYXRlZCwga2luZDogJ21jcCcsXG4gICAgICAgIHNlcnZlclZlcnNpb246IG5vcm1hbGl6ZVNlcnZlclZlcnNpb24oc2VydmVyVmVyc2lvbiksXG4gICAgICAgIGNvbnNvbGVQcm90b2NvbFZlcnNpb246IG5vcm1hbGl6ZUNvbnNvbGVQcm90b2NvbFZlcnNpb24oY29uc29sZVByb3RvY29sVmVyc2lvbiksXG4gICAgICB9O1xuICAgICAgc2Vzc2lvbnMuc2V0KHNlc3Npb25JZCwgaW5mbyk7XG4gICAgICBsb2dnZXIuaW5mbygnW0luZ2VzdFJvdXRlc10gQXV0by1yZWdpc3RlcmVkIG9ycGhhbmVkIHNlc3Npb24nLCB7XG4gICAgICAgIGRpc3BsYXlOYW1lLCBzZXNzaW9uSWQsIHNvdXJjZTogcGlkID8gJ2hlYXJ0YmVhdCcgOiAnaW5nZXN0aW9uJyxcbiAgICAgIH0pO1xuICAgICAgYnJvYWRjYXN0cy5zZXNzaW9uQnJvYWRjYXN0Py4oaW5mbyk7XG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnW0luZ2VzdFJvdXRlc10gRmFpbGVkIHRvIGF1dG8tcmVnaXN0ZXIgb3JwaGFuZWQgc2Vzc2lvbicsIHtcbiAgICAgICAgc2Vzc2lvbklkLCBlcnJvcjogKGVyciBhcyBFcnJvcikubWVzc2FnZSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEF1dG8tcmVnaXN0ZXIgb3IgdXBkYXRlIGFuIG9ycGhhbmVkIHNlc3Npb24gZnJvbSBpbmdlc3Rpb24gZGF0YS5cbiAgICogUmV0dXJucyB0aGUgc2Vzc2lvbiAoZXhpc3Rpbmcgb3IgbmV3bHkgY3JlYXRlZCksIG9yIG51bGwgaWYga2lsbGVkL3BlbmRpbmcuXG4gICAqL1xuICBmdW5jdGlvbiBlbnN1cmVTZXNzaW9uKFxuICAgIHNlc3Npb25JZDogc3RyaW5nLFxuICAgIHBpZD86IG51bWJlcixcbiAgICBhdXRoZW50aWNhdGVkID0gZmFsc2UsXG4gICAgc2VydmVyVmVyc2lvbj86IHN0cmluZyxcbiAgICBjb25zb2xlUHJvdG9jb2xWZXJzaW9uPzogbnVtYmVyLFxuICApOiBTZXNzaW9uSW5mbyB8IG51bGwge1xuICAgIGlmIChraWxsZWRTZXNzaW9ucy5oYXMoc2Vzc2lvbklkKSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKHBlbmRpbmdLaWxscy5oYXMoc2Vzc2lvbklkKSkge1xuICAgICAgZmluYWxpemVQZW5kaW5nS2lsbChzZXNzaW9uSWQsIHBpZCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBleGlzdGluZyA9IHNlc3Npb25zLmdldChzZXNzaW9uSWQpO1xuICAgIGlmICghZXhpc3RpbmcpIHtcbiAgICAgIHJldHVybiBhdXRvUmVnaXN0ZXIoc2Vzc2lvbklkLCBwaWQsIGF1dGhlbnRpY2F0ZWQsIHNlcnZlclZlcnNpb24sIGNvbnNvbGVQcm90b2NvbFZlcnNpb24pO1xuICAgIH1cblxuICAgIGlmIChleGlzdGluZy5zdGF0dXMgPT09ICdlbmRlZCcpIHtcbiAgICAgIGV4aXN0aW5nLnN0YXR1cyA9ICdhY3RpdmUnO1xuICAgICAgbG9nZ2VyLmluZm8oJ1tJbmdlc3RSb3V0ZXNdIFJldml2ZWQgZW5kZWQgc2Vzc2lvbiBzdGlsbCBzZW5kaW5nIGRhdGEnLCB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiBleGlzdGluZy5kaXNwbGF5TmFtZSwgc2Vzc2lvbklkLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGV4aXN0aW5nLmxhc3RIZWFydGJlYXQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgaWYgKHBpZCAmJiAhZXhpc3RpbmcucGlkKSB7XG4gICAgICBleGlzdGluZy5waWQgPSBwaWQ7XG4gICAgICBsb2dnZXIuaW5mbygnW0luZ2VzdFJvdXRlc10gUmVjb3ZlcmVkIFBJRCBmb3Igb3JwaGFuZWQgc2Vzc2lvbicsIHtcbiAgICAgICAgZGlzcGxheU5hbWU6IGV4aXN0aW5nLmRpc3BsYXlOYW1lLCBzZXNzaW9uSWQsIHBpZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc2VydmVyVmVyc2lvbikge1xuICAgICAgZXhpc3Rpbmcuc2VydmVyVmVyc2lvbiA9IG5vcm1hbGl6ZVNlcnZlclZlcnNpb24oc2VydmVyVmVyc2lvbik7XG4gICAgfVxuICAgIGlmIChjb25zb2xlUHJvdG9jb2xWZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGV4aXN0aW5nLmNvbnNvbGVQcm90b2NvbFZlcnNpb24gPSBub3JtYWxpemVDb25zb2xlUHJvdG9jb2xWZXJzaW9uKGNvbnNvbGVQcm90b2NvbFZlcnNpb24pO1xuICAgIH1cbiAgICByZXR1cm4gZXhpc3Rpbmc7XG4gIH1cblxuICAvLyBKU09OIGJvZHkgcGFyc2luZyB3aXRoIHNpemUgbGltaXRcbiAgcm91dGVyLnVzZShleHByZXNzLmpzb24oeyBsaW1pdDogTUFYX1BBWUxPQURfU0laRSB9KSk7XG5cbiAgLyoqXG4gICAqIFBPU1QgL2FwaS9pbmdlc3QvbG9ncyDigJQgUmVjZWl2ZSBiYXRjaGVkIGxvZyBlbnRyaWVzIGZyb20gYSBmb2xsb3dlci5cbiAgICovXG4gIHJvdXRlci5wb3N0KCcvYXBpL2luZ2VzdC9sb2dzJywgKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICAgIGlmICghcmF0ZUxpbWl0ZXIudHJ5QWNxdWlyZSgpKSB7XG4gICAgICByZXMuc3RhdHVzKDQyOSkuanNvbih7IGVycm9yOiAnUmF0ZSBsaW1pdCBleGNlZWRlZCcgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGF5bG9hZCA9IHJlcS5ib2R5IGFzIEluZ2VzdExvZ1BheWxvYWQ7XG4gICAgaWYgKCFwYXlsb2FkPy5zZXNzaW9uSWQgfHwgIUFycmF5LmlzQXJyYXkocGF5bG9hZC5lbnRyaWVzKSkge1xuICAgICAgY29uc3QgcmVjZWl2ZWQgPSBwYXlsb2FkID8gT2JqZWN0LmtleXMocGF5bG9hZCkgOiBbXTtcbiAgICAgIGxvZ2dlci53YXJuKCdbSW5nZXN0Um91dGVzXSBJbnZhbGlkIGxvZyBwYXlsb2FkJywgeyByZWNlaXZlZCwgaGFzU2Vzc2lvbklkOiAhIXBheWxvYWQ/LnNlc3Npb25JZCwgaGFzRW50cmllczogQXJyYXkuaXNBcnJheShwYXlsb2FkPy5lbnRyaWVzKSB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIHBheWxvYWQnLCByZXF1aXJlZDogWydzZXNzaW9uSWQnLCAnZW50cmllcyddLCByZWNlaXZlZCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcGF5bG9hZC5zZXNzaW9uSWQgPSBub3JtYWxpemVJbnB1dChwYXlsb2FkLnNlc3Npb25JZCk7XG5cbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGxldCBza2lwcGVkID0gMDtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHBheWxvYWQuZW50cmllcykge1xuICAgICAgaWYgKCFlbnRyeSB8fCB0eXBlb2YgZW50cnkubWVzc2FnZSAhPT0gJ3N0cmluZycpIHsgc2tpcHBlZCsrOyBjb250aW51ZTsgfVxuICAgICAgY29uc3Qgc3RhbXBlZDogVW5pZmllZExvZ0VudHJ5ID0ge1xuICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgZGF0YTogeyAuLi5lbnRyeS5kYXRhLCBfc2Vzc2lvbklkOiBwYXlsb2FkLnNlc3Npb25JZCB9LFxuICAgICAgfTtcbiAgICAgIGJyb2FkY2FzdHMubG9nQnJvYWRjYXN0KHN0YW1wZWQpO1xuICAgICAgY291bnQrKztcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgaGVhcnRiZWF0LCByZXZpdmUgZW5kZWQgc2Vzc2lvbnMsIG9yIGF1dG8tcmVnaXN0ZXIgb3JwaGFucyAoIzE4NzApXG4gICAgY29uc3Qgc2Vzc2lvbiA9IGVuc3VyZVNlc3Npb24ocGF5bG9hZC5zZXNzaW9uSWQpO1xuXG4gICAgaWYgKHNraXBwZWQgPiAwKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYFtJbmdlc3RSb3V0ZXNdIExvZyBpbmdlc3QgZnJvbSAke3Nlc3Npb24/LmRpc3BsYXlOYW1lID8/IHBheWxvYWQuc2Vzc2lvbklkfTogYWNjZXB0ZWQ9JHtjb3VudH0sIHNraXBwZWQ9JHtza2lwcGVkfWApO1xuICAgIH1cblxuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgYWNjZXB0ZWQ6IGNvdW50LCBza2lwcGVkIH0pO1xuICB9KTtcblxuICAvKipcbiAgICogUE9TVCAvYXBpL2luZ2VzdC9tZXRyaWNzIOKAlCBSZWNlaXZlIG1ldHJpYyBzbmFwc2hvdHMgZnJvbSBhIGZvbGxvd2VyLlxuICAgKi9cbiAgcm91dGVyLnBvc3QoJy9hcGkvaW5nZXN0L21ldHJpY3MnLCAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKCFyYXRlTGltaXRlci50cnlBY3F1aXJlKCkpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDI5KS5qc29uKHsgZXJyb3I6ICdSYXRlIGxpbWl0IGV4Y2VlZGVkJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXlsb2FkID0gcmVxLmJvZHkgYXMgSW5nZXN0TWV0cmljc1BheWxvYWQ7XG4gICAgaWYgKCFwYXlsb2FkPy5zZXNzaW9uSWQgfHwgIXBheWxvYWQuc25hcHNob3QpIHtcbiAgICAgIGNvbnN0IHJlY2VpdmVkID0gcGF5bG9hZCA/IE9iamVjdC5rZXlzKHBheWxvYWQpIDogW107XG4gICAgICBsb2dnZXIud2FybignW0luZ2VzdFJvdXRlc10gSW52YWxpZCBtZXRyaWNzIHBheWxvYWQnLCB7IHJlY2VpdmVkIH0pO1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgcGF5bG9hZCcsIHJlcXVpcmVkOiBbJ3Nlc3Npb25JZCcsICdzbmFwc2hvdCddLCByZWNlaXZlZCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcGF5bG9hZC5zZXNzaW9uSWQgPSBub3JtYWxpemVJbnB1dChwYXlsb2FkLnNlc3Npb25JZCk7XG5cbiAgICBpZiAoYnJvYWRjYXN0cy5tZXRyaWNzT25TbmFwc2hvdCkge1xuICAgICAgYnJvYWRjYXN0cy5tZXRyaWNzT25TbmFwc2hvdChwYXlsb2FkLnNuYXBzaG90KTtcbiAgICB9XG4gICAgaWYgKGJyb2FkY2FzdHMuc3RvcmVNZXRyaWNzU25hcHNob3QpIHtcbiAgICAgIGJyb2FkY2FzdHMuc3RvcmVNZXRyaWNzU25hcHNob3QocGF5bG9hZC5zbmFwc2hvdCwgcGF5bG9hZC5zZXNzaW9uSWQpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBoZWFydGJlYXQsIHJldml2ZSBlbmRlZCBzZXNzaW9ucywgb3IgYXV0by1yZWdpc3RlciBvcnBoYW5zICgjMTg3MClcbiAgICBjb25zdCBzZXNzaW9uID0gZW5zdXJlU2Vzc2lvbihwYXlsb2FkLnNlc3Npb25JZCk7XG4gICAgbG9nZ2VyLmRlYnVnKGBbSW5nZXN0Um91dGVzXSBNZXRyaWNzIGluZ2VzdGVkIGZyb20gJHtzZXNzaW9uPy5kaXNwbGF5TmFtZSA/PyBwYXlsb2FkLnNlc3Npb25JZH1gKTtcbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IGFjY2VwdGVkOiB0cnVlIH0pO1xuICB9KTtcblxuICAvKipcbiAgICogUE9TVCAvYXBpL2luZ2VzdC9zZXNzaW9uIOKAlCBTZXNzaW9uIGxpZmVjeWNsZSBldmVudHMuXG4gICAqL1xuICByb3V0ZXIucG9zdCgnL2FwaS9pbmdlc3Qvc2Vzc2lvbicsIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICBjb25zdCBwYXlsb2FkID0gcmVxLmJvZHkgYXMgU2Vzc2lvbkV2ZW50UGF5bG9hZDtcbiAgICBpZiAoIXBheWxvYWQ/LnNlc3Npb25JZCB8fCAhcGF5bG9hZC5ldmVudCkge1xuICAgICAgY29uc3QgcmVjZWl2ZWQgPSBwYXlsb2FkID8gT2JqZWN0LmtleXMocGF5bG9hZCkgOiBbXTtcbiAgICAgIGxvZ2dlci53YXJuKCdbSW5nZXN0Um91dGVzXSBJbnZhbGlkIHNlc3Npb24gZXZlbnQgcGF5bG9hZCcsIHsgcmVjZWl2ZWQgfSk7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnSW52YWxpZCBwYXlsb2FkJywgcmVxdWlyZWQ6IFsnc2Vzc2lvbklkJywgJ2V2ZW50J10sIHJlY2VpdmVkIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwYXlsb2FkLnNlc3Npb25JZCA9IG5vcm1hbGl6ZUlucHV0KHBheWxvYWQuc2Vzc2lvbklkKTtcblxuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcblxuICAgIHN3aXRjaCAocGF5bG9hZC5ldmVudCkge1xuICAgICAgY2FzZSAnc3RhcnRlZCc6IHtcbiAgICAgICAgLy8gS2lsbGVkIHNlc3Npb25zIHN0YXkgZGVhZDsgcGVuZGluZyBraWxscyBnZXQgZmluYWxpemVkICgjMTg3MClcbiAgICAgICAgaWYgKGtpbGxlZFNlc3Npb25zLmhhcyhwYXlsb2FkLnNlc3Npb25JZCkpIGJyZWFrO1xuICAgICAgICBpZiAocGVuZGluZ0tpbGxzLmhhcyhwYXlsb2FkLnNlc3Npb25JZCkpIHsgZmluYWxpemVQZW5kaW5nS2lsbChwYXlsb2FkLnNlc3Npb25JZCwgcGF5bG9hZC5waWQpOyBicmVhazsgfVxuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gbmFtZVBvb2wuYXNzaWduKHBheWxvYWQuc2Vzc2lvbklkKTtcbiAgICAgICAgY29uc3QgY29sb3IgPSBuYW1lUG9vbC5nZXRDb2xvcihwYXlsb2FkLnNlc3Npb25JZCkgPz8gJyMzYjgyZjYnO1xuICAgICAgICBjb25zdCBpc0F1dGhlbnRpY2F0ZWQgPSBCb29sZWFuKChyZXMgYXMgYW55KS5sb2NhbHM/LnRva2VuRW50cnkpO1xuICAgICAgICBzZXNzaW9ucy5zZXQocGF5bG9hZC5zZXNzaW9uSWQsIHtcbiAgICAgICAgICBzZXNzaW9uSWQ6IHBheWxvYWQuc2Vzc2lvbklkLCBkaXNwbGF5TmFtZSwgY29sb3IsXG4gICAgICAgICAgcGlkOiBwYXlsb2FkLnBpZCwgc3RhcnRlZEF0OiBwYXlsb2FkLnN0YXJ0ZWRBdCB8fCBub3csIGxhc3RIZWFydGJlYXQ6IG5vdyxcbiAgICAgICAgICBzdGF0dXM6ICdhY3RpdmUnLCBpc0xlYWRlcjogZmFsc2UsIGF1dGhlbnRpY2F0ZWQ6IGlzQXV0aGVudGljYXRlZCwga2luZDogJ21jcCcsXG4gICAgICAgICAgc2VydmVyVmVyc2lvbjogbm9ybWFsaXplU2VydmVyVmVyc2lvbihwYXlsb2FkLnNlcnZlclZlcnNpb24pLFxuICAgICAgICAgIGNvbnNvbGVQcm90b2NvbFZlcnNpb246IG5vcm1hbGl6ZUNvbnNvbGVQcm90b2NvbFZlcnNpb24ocGF5bG9hZC5jb25zb2xlUHJvdG9jb2xWZXJzaW9uKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdbSW5nZXN0Um91dGVzXSBTZXNzaW9uIHJlZ2lzdGVyZWQnLCB7XG4gICAgICAgICAgZGlzcGxheU5hbWUsIHNlc3Npb25JZDogcGF5bG9hZC5zZXNzaW9uSWQsIHBpZDogcGF5bG9hZC5waWQsIGNvbG9yLFxuICAgICAgICAgIGFjdGl2ZVNlc3Npb25zOiBBcnJheS5mcm9tKHNlc3Npb25zLnZhbHVlcygpKS5maWx0ZXIocyA9PiBzLnN0YXR1cyA9PT0gJ2FjdGl2ZScpLmxlbmd0aCxcbiAgICAgICAgfSk7XG4gICAgICAgIGJyb2FkY2FzdHMuc2Vzc2lvbkJyb2FkY2FzdD8uKHNlc3Npb25zLmdldChwYXlsb2FkLnNlc3Npb25JZCkhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdzdG9wcGVkJzoge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IHNlc3Npb25zLmdldChwYXlsb2FkLnNlc3Npb25JZCk7XG4gICAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICAgIGV4aXN0aW5nLnN0YXR1cyA9ICdlbmRlZCc7XG4gICAgICAgICAgZXhpc3RpbmcubGFzdEhlYXJ0YmVhdCA9IG5vdztcbiAgICAgICAgICBuYW1lUG9vbC5yZWxlYXNlKHBheWxvYWQuc2Vzc2lvbklkKTtcbiAgICAgICAgICBsb2dnZXIuaW5mbygnW0luZ2VzdFJvdXRlc10gU2Vzc2lvbiBzdG9wcGVkJywge1xuICAgICAgICAgICAgZGlzcGxheU5hbWU6IGV4aXN0aW5nLmRpc3BsYXlOYW1lLCBzZXNzaW9uSWQ6IHBheWxvYWQuc2Vzc2lvbklkLCBwaWQ6IGV4aXN0aW5nLnBpZCxcbiAgICAgICAgICAgIGFjdGl2ZVNlc3Npb25zOiBBcnJheS5mcm9tKHNlc3Npb25zLnZhbHVlcygpKS5maWx0ZXIocyA9PiBzLnN0YXR1cyA9PT0gJ2FjdGl2ZScpLmxlbmd0aCAtIDEsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJvYWRjYXN0cy5zZXNzaW9uQnJvYWRjYXN0Py4oZXhpc3RpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnaGVhcnRiZWF0Jzoge1xuICAgICAgICAvLyBBdXRvLXJlZ2lzdGVyIG9yIHVwZGF0ZSDigJQgaGVhcnRiZWF0IGluY2x1ZGVzIFBJRCBmb3IgcmVjb3ZlcnkgKCMxODcwKVxuICAgICAgICBlbnN1cmVTZXNzaW9uKFxuICAgICAgICAgIHBheWxvYWQuc2Vzc2lvbklkLFxuICAgICAgICAgIHBheWxvYWQucGlkLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIHBheWxvYWQuc2VydmVyVmVyc2lvbixcbiAgICAgICAgICBwYXlsb2FkLmNvbnNvbGVQcm90b2NvbFZlcnNpb24sXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgb2s6IHRydWUgfSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBHRVQgL2FwaS9zZXNzaW9ucyDigJQgTGlzdCBhbGwgdHJhY2tlZCBzZXNzaW9ucy5cbiAgICovXG4gIHJvdXRlci5nZXQoJy9hcGkvc2Vzc2lvbnMnLCBhc3luYyAoX3JlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICAgIC8vIFNlcnZlci1zaWRlIGFjdGl2ZSBmaWx0ZXIg4oCUIHRoZSBmcm9udGVuZCBhbHNvIGZpbHRlcnMsIGJ1dCBlbmRlZCBzZXNzaW9uc1xuICAgIC8vIHNob3VsZCBuZXZlciBsZWF2ZSB0aGUgQVBJIHRvIHByZXZlbnQgc3RhbGUgVUkgKCMxODcwKS5cbiAgICBjb25zdCBsb2NhbFNlc3Npb25zID0gQXJyYXkuZnJvbShzZXNzaW9ucy52YWx1ZXMoKSkuZmlsdGVyKHMgPT4gcy5zdGF0dXMgPT09ICdhY3RpdmUnKTtcbiAgICBjb25zdCBjdXJyZW50UG9ydCA9IGVudi5ET0xMSE9VU0VfV0VCX0NPTlNPTEVfUE9SVCA/PyA0MTcxNTtcblxuICAgIC8vIEZlZGVyYXRlIHdpdGggdGhlIGxlZ2FjeSBwb3J0ICgzOTM5KSB0byBzaG93IGFsbCBzZXNzaW9ucyBvbiB0aGVcbiAgICAvLyBtYWNoaW5lLCBpbmNsdWRpbmcgdW5hdXRoZW50aWNhdGVkIG9uZXMgZnJvbSBwcmUtYXV0aCBpbnN0YWxscy5cbiAgICAvLyBTZXJ2ZXItdG8tc2VydmVyIGF2b2lkcyBDT1JTIHJlc3RyaWN0aW9ucyAoIzE4MDUpLlxuICAgIGlmIChjdXJyZW50UG9ydCAhPT0gMzkzOSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCBMRUdBQ1lfRkVUQ0hfVElNRU9VVF9NUyk7XG4gICAgICAgIGNvbnN0IGxlZ2FjeVJlcyA9IGF3YWl0IGZldGNoKCdodHRwOi8vMTI3LjAuMC4xOjM5MzkvYXBpL3Nlc3Npb25zJywge1xuICAgICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgICAgIH0pO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIGlmIChsZWdhY3lSZXMub2spIHtcbiAgICAgICAgICBjb25zdCBsZWdhY3lEYXRhID0gYXdhaXQgbGVnYWN5UmVzLmpzb24oKSBhcyB7IHNlc3Npb25zOiBTZXNzaW9uSW5mb1tdIH07XG4gICAgICAgICAgY29uc3QgbG9jYWxJZHMgPSBuZXcgU2V0KGxvY2FsU2Vzc2lvbnMubWFwKHMgPT4gcy5zZXNzaW9uSWQpKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGxzIG9mIChsZWdhY3lEYXRhLnNlc3Npb25zIHx8IFtdKSkge1xuICAgICAgICAgICAgaWYgKCFsb2NhbElkcy5oYXMobHMuc2Vzc2lvbklkKSAmJiBscy5zdGF0dXMgPT09ICdhY3RpdmUnKSB7XG4gICAgICAgICAgICAgIGxvY2FsU2Vzc2lvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgLi4ubHMsXG4gICAgICAgICAgICAgICAgYXV0aGVudGljYXRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAga2luZDogbHMua2luZCB8fCAnbWNwJyxcbiAgICAgICAgICAgICAgICBzZXJ2ZXJWZXJzaW9uOiBub3JtYWxpemVTZXJ2ZXJWZXJzaW9uKGxzLnNlcnZlclZlcnNpb24pLFxuICAgICAgICAgICAgICAgIGNvbnNvbGVQcm90b2NvbFZlcnNpb246IG5vcm1hbGl6ZUNvbnNvbGVQcm90b2NvbFZlcnNpb24obHMuY29uc29sZVByb3RvY29sVmVyc2lvbiksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIExlZ2FjeSBpbnN0YW5jZSBub3QgcnVubmluZyBvciB1bnJlYWNoYWJsZSDigJQgdGhhdCdzIGZpbmVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXMuanNvbih7IHNlc3Npb25zOiBsb2NhbFNlc3Npb25zIH0pO1xuICB9KTtcblxuICAvKipcbiAgICogUE9TVCAvYXBpL3Nlc3Npb25zLzpzZXNzaW9uSWQva2lsbCDigJQgVGVybWluYXRlIGEgc2Vzc2lvbidzIHNlcnZlciBwcm9jZXNzLlxuICAgKi9cbiAgcm91dGVyLnBvc3QoJy9hcGkvc2Vzc2lvbnMvOnNlc3Npb25JZC9raWxsJywgYXN5bmMgKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb25JZCA9IHJlcS5wYXJhbXNbJ3Nlc3Npb25JZCddIGFzIHN0cmluZztcbiAgICBjb25zdCBzZXNzaW9uID0gc2Vzc2lvbnMuZ2V0KHNlc3Npb25JZCk7XG5cbiAgICBpZiAoIXNlc3Npb24pIHtcbiAgICAgIC8vIFNlc3Npb24gbm90IGluIGxvY2FsIE1hcCDigJQgdHJ5IHByb3h5aW5nIGtpbGwgdG8gbGVnYWN5IHBvcnQgKCMxODcwKVxuICAgICAgY29uc3QgY3VycmVudFBvcnQgPSBlbnYuRE9MTEhPVVNFX1dFQl9DT05TT0xFX1BPUlQgPz8gNDE3MTU7XG4gICAgICBpZiAoY3VycmVudFBvcnQgIT09IDM5MzkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgTEVHQUNZX0ZFVENIX1RJTUVPVVRfTVMpO1xuICAgICAgICAgIGNvbnN0IHByb3h5UmVzID0gYXdhaXQgZmV0Y2goYGh0dHA6Ly8xMjcuMC4wLjE6MzkzOS9hcGkvc2Vzc2lvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoc2Vzc2lvbklkKX0va2lsbGAsIHtcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgaWYgKHByb3h5UmVzLm9rKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcHJveHlSZXMuanNvbigpO1xuICAgICAgICAgICAgcmVzLmpzb24oZGF0YSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBMZWdhY3kgaW5zdGFuY2Ugbm90IHJ1bm5pbmcg4oCUIGZhbGwgdGhyb3VnaCB0byA0MDRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbG9nZ2VyLndhcm4oJ1tJbmdlc3RSb3V0ZXNdIEtpbGwgcmVxdWVzdGVkIGZvciB1bmtub3duIHNlc3Npb24nLCB7IHNlc3Npb25JZCB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDA0KS5qc29uKHsgZXJyb3I6ICdTZXNzaW9uIG5vdCBmb3VuZCcsIHNlc3Npb25JZCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXNlc3Npb24ucGlkKSB7XG4gICAgICAvLyBBdXRvLXJlZ2lzdGVyZWQgb3JwaGFuIHdpdGggdW5rbm93biBQSUQg4oCUIHF1ZXVlIGZvciBkZWZlcnJlZCBraWxsICgjMTg3MCkuXG4gICAgICAvLyBUaGUgbmV4dCBoZWFydGJlYXQgKGV2ZXJ5IH4xMHMpIGNhcnJpZXMgdGhlIFBJRC4gZW5zdXJlU2Vzc2lvbigpIHdpbGxcbiAgICAgIC8vIFNJR1RFUk0gdGhlIHByb2Nlc3MgYXMgc29vbiBhcyB0aGUgUElEIGFycml2ZXMuIFNlc3Npb24gaXMgZ29uZSBmb3IgZ29vZC5cbiAgICAgIHNlc3Npb24uc3RhdHVzID0gJ2VuZGVkJztcbiAgICAgIG5hbWVQb29sLnJlbGVhc2Uoc2Vzc2lvbklkKTtcbiAgICAgIHBlbmRpbmdLaWxscy5hZGQoc2Vzc2lvbklkKTtcbiAgICAgIGxvZ2dlci5pbmZvKCdbSW5nZXN0Um91dGVzXSBRdWV1ZWQgZGVmZXJyZWQga2lsbCDigJQgd2FpdGluZyBmb3IgUElEIHZpYSBoZWFydGJlYXQnLCB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiBzZXNzaW9uLmRpc3BsYXlOYW1lLCBzZXNzaW9uSWQsXG4gICAgICB9KTtcbiAgICAgIHJlcy5qc29uKHsgb2s6IHRydWUsIGRpc21pc3NlZDogc2Vzc2lvbi5kaXNwbGF5TmFtZSwgcmVhc29uOiAncGVuZGluZy1raWxsJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTSUdURVJNIHRoZSBwcm9jZXNzLiBFdmVuIGlmIGl0IGZhaWxzIChFU1JDSCA9IGFscmVhZHkgZGVhZCwgRVBFUk0gPSBub3Qgb3VycyksXG4gICAgLy8gbWFyayB0aGUgc2Vzc2lvbiBhcyBwZXJtYW5lbnRseSBraWxsZWQgc28gaXQgbmV2ZXIgcmVhcHBlYXJzICgjMTg3MCkuXG4gICAgdHJ5IHtcbiAgICAgIHByb2Nlc3Mua2lsbChzZXNzaW9uLnBpZCwgJ1NJR1RFUk0nKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnN0IGNvZGUgPSAoZXJyIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZTtcbiAgICAgIGlmIChjb2RlID09PSAnRVNSQ0gnKSB7XG4gICAgICAgIC8vIFByb2Nlc3MgYWxyZWFkeSBkZWFkIOKAlCB0cmVhdCBhcyBzdWNjZXNzZnVsIGtpbGwuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ1tJbmdlc3RSb3V0ZXNdIEZhaWxlZCB0byBraWxsIHNlc3Npb24nLCB7XG4gICAgICAgICAgZGlzcGxheU5hbWU6IHNlc3Npb24uZGlzcGxheU5hbWUsIHNlc3Npb25JZCwgcGlkOiBzZXNzaW9uLnBpZCwgZXJyb3I6IChlcnIgYXMgRXJyb3IpLm1lc3NhZ2UsXG4gICAgICAgIH0pO1xuICAgICAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7IGVycm9yOiAnRmFpbGVkIHRvIGtpbGwgc2Vzc2lvbicsIHNlc3Npb25JZCwgZGlzcGxheU5hbWU6IHNlc3Npb24uZGlzcGxheU5hbWUsIHBpZDogc2Vzc2lvbi5waWQsIGRldGFpbDogKGVyciBhcyBFcnJvcikubWVzc2FnZSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBzZXNzaW9uLnN0YXR1cyA9ICdlbmRlZCc7XG4gICAgbmFtZVBvb2wucmVsZWFzZShzZXNzaW9uSWQpO1xuICAgIGtpbGxlZFNlc3Npb25zLmFkZChzZXNzaW9uSWQpO1xuICAgIGxvZ2dlci5pbmZvKCdbSW5nZXN0Um91dGVzXSBTZXNzaW9uIGtpbGxlZCcsIHtcbiAgICAgIGRpc3BsYXlOYW1lOiBzZXNzaW9uLmRpc3BsYXlOYW1lLCBzZXNzaW9uSWQsIHBpZDogc2Vzc2lvbi5waWQsXG4gICAgICBhY3RpdmVTZXNzaW9uczogQXJyYXkuZnJvbShzZXNzaW9ucy52YWx1ZXMoKSkuZmlsdGVyKHMgPT4gcy5zdGF0dXMgPT09ICdhY3RpdmUnKS5sZW5ndGggLSAxLFxuICAgIH0pO1xuICAgIHJlcy5qc29uKHsgb2s6IHRydWUsIGtpbGxlZDogc2Vzc2lvbi5kaXNwbGF5TmFtZSwgcGlkOiBzZXNzaW9uLnBpZCB9KTtcbiAgfSk7XG5cbiAgLyoqIE1hcmsgc3RhbGUgYWN0aXZlIHNlc3Npb25zIGFzIGVuZGVkLiAqL1xuICBmdW5jdGlvbiByZWFwU3RhbGVTZXNzaW9ucyhub3c6IG51bWJlcik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgW2lkLCBzZXNzaW9uXSBvZiBzZXNzaW9ucykge1xuICAgICAgaWYgKHNlc3Npb24uc3RhdHVzICE9PSAnYWN0aXZlJykgY29udGludWU7XG4gICAgICBpZiAoc2Vzc2lvbi5pc0xlYWRlciB8fCBzZXNzaW9uLmtpbmQgPT09ICdjb25zb2xlJykgY29udGludWU7XG4gICAgICBjb25zdCBhZ2UgPSBub3cgLSBuZXcgRGF0ZShzZXNzaW9uLmxhc3RIZWFydGJlYXQpLmdldFRpbWUoKTtcbiAgICAgIGlmIChhZ2UgPD0gU0VTU0lPTl9TVEFMRV9NUykgY29udGludWU7XG4gICAgICBzZXNzaW9uLnN0YXR1cyA9ICdlbmRlZCc7XG4gICAgICBuYW1lUG9vbC5yZWxlYXNlKGlkKTtcbiAgICAgIGxvZ2dlci5pbmZvKCdbSW5nZXN0Um91dGVzXSBSZWFwZWQgc3RhbGUgc2Vzc2lvbicsIHtcbiAgICAgICAgZGlzcGxheU5hbWU6IHNlc3Npb24uZGlzcGxheU5hbWUsIHNlc3Npb25JZDogaWQsIHBpZDogc2Vzc2lvbi5waWQsXG4gICAgICAgIGxhc3RIZWFydGJlYXRBZ286IGAke01hdGgucm91bmQoYWdlIC8gMTAwMCl9c2AsXG4gICAgICAgIGFjdGl2ZVNlc3Npb25zOiBBcnJheS5mcm9tKHNlc3Npb25zLnZhbHVlcygpKS5maWx0ZXIocyA9PiBzLnN0YXR1cyA9PT0gJ2FjdGl2ZScpLmxlbmd0aCAtIDEsXG4gICAgICB9KTtcbiAgICAgIGJyb2FkY2FzdHMuc2Vzc2lvbkJyb2FkY2FzdD8uKHNlc3Npb24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBEZWxldGUgZW5kZWQgc2Vzc2lvbnMgdG8gYm91bmQgbWVtb3J5ICgjMTg3MCkuICovXG4gIGZ1bmN0aW9uIHB1cmdlU3RhbGVFbnRyaWVzKG5vdzogbnVtYmVyKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBbaWQsIHNlc3Npb25dIG9mIHNlc3Npb25zKSB7XG4gICAgICBpZiAoc2Vzc2lvbi5zdGF0dXMgPT09ICdlbmRlZCcgJiYgbm93IC0gbmV3IERhdGUoc2Vzc2lvbi5sYXN0SGVhcnRiZWF0KS5nZXRUaW1lKCkgPiBFTkRFRF9QVVJHRV9NUykge1xuICAgICAgICBzZXNzaW9ucy5kZWxldGUoaWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlYXBlckludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgcmVhcFN0YWxlU2Vzc2lvbnMobm93KTtcbiAgICBwdXJnZVN0YWxlRW50cmllcyhub3cpO1xuICB9LCBSRUFQRVJfSU5URVJWQUxfTVMpO1xuICByZWFwZXJJbnRlcnZhbC51bnJlZigpO1xuXG4gIGZ1bmN0aW9uIGdldFNlc3Npb25zKCk6IFNlc3Npb25JbmZvW10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHNlc3Npb25zLnZhbHVlcygpKS5maWx0ZXIocyA9PiBzLnN0YXR1cyA9PT0gJ2FjdGl2ZScpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXJMZWFkZXJTZXNzaW9uKHNlc3Npb25JZDogc3RyaW5nLCBwaWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gbmFtZVBvb2wuYXNzaWduKHNlc3Npb25JZCwgdHJ1ZSk7XG4gICAgY29uc3QgY29sb3IgPSBuYW1lUG9vbC5nZXRDb2xvcihzZXNzaW9uSWQpID8/ICcjM2I4MmY2JztcbiAgICBzZXNzaW9ucy5zZXQoc2Vzc2lvbklkLCB7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBkaXNwbGF5TmFtZSxcbiAgICAgIGNvbG9yLFxuICAgICAgcGlkLFxuICAgICAgc3RhcnRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBsYXN0SGVhcnRiZWF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBzdGF0dXM6ICdhY3RpdmUnLFxuICAgICAgaXNMZWFkZXI6IHRydWUsXG4gICAgICBhdXRoZW50aWNhdGVkOiB0cnVlLFxuICAgICAga2luZDogJ21jcCcsXG4gICAgICBzZXJ2ZXJWZXJzaW9uOiBQQUNLQUdFX1ZFUlNJT04sXG4gICAgICBjb25zb2xlUHJvdG9jb2xWZXJzaW9uOiBDT05TT0xFX1BST1RPQ09MX1ZFUlNJT04sXG4gICAgfSk7XG4gICAgbG9nZ2VyLmluZm8oJ1tJbmdlc3RSb3V0ZXNdIExlYWRlciBzZXNzaW9uIHJlZ2lzdGVyZWQnLCB7IGRpc3BsYXlOYW1lLCBzZXNzaW9uSWQsIHBpZCwgY29sb3IgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgdGhlIHdlYiBjb25zb2xlIGl0c2VsZiBhcyBhIHNlc3Npb24gKCMxODA1KS4gRW5zdXJlcyB0aGVcbiAgICogc2Vzc2lvbiBpbmRpY2F0b3IgYWx3YXlzIHNob3dzIGF0IGxlYXN0IG9uZSBlbnRyeSDigJQgdGhlIGNvbnNvbGUgdGhlXG4gICAqIHVzZXIgaXMgY3VycmVudGx5IGxvb2tpbmcgYXQuXG4gICAqL1xuICBmdW5jdGlvbiByZWdpc3RlckNvbnNvbGVTZXNzaW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnNvbGVJZCA9IGBjb25zb2xlLSR7cHJvY2Vzcy5waWR9YDtcbiAgICBpZiAoc2Vzc2lvbnMuaGFzKGNvbnNvbGVJZCkpIHJldHVybjtcbiAgICBjb25zdCBkaXNwbGF5TmFtZSA9ICdXZWIgQ29uc29sZSc7XG4gICAgc2Vzc2lvbnMuc2V0KGNvbnNvbGVJZCwge1xuICAgICAgc2Vzc2lvbklkOiBjb25zb2xlSWQsXG4gICAgICBkaXNwbGF5TmFtZSxcbiAgICAgIGNvbG9yOiAnIzYzNjZmMScsIC8vIGluZGlnbyDigJQgZGlzdGluY3QgZnJvbSBwdXBwZXQgZ3JlZW5zL2JsdWVzXG4gICAgICBwaWQ6IHByb2Nlc3MucGlkLFxuICAgICAgc3RhcnRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBsYXN0SGVhcnRiZWF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBzdGF0dXM6ICdhY3RpdmUnLFxuICAgICAgaXNMZWFkZXI6IGZhbHNlLFxuICAgICAgYXV0aGVudGljYXRlZDogdHJ1ZSxcbiAgICAgIGtpbmQ6ICdjb25zb2xlJyxcbiAgICAgIHNlcnZlclZlcnNpb246IFBBQ0tBR0VfVkVSU0lPTixcbiAgICAgIGNvbnNvbGVQcm90b2NvbFZlcnNpb246IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTixcbiAgICB9KTtcbiAgICBsb2dnZXIuaW5mbygnW0luZ2VzdFJvdXRlc10gQ29uc29sZSBzZXNzaW9uIHJlZ2lzdGVyZWQnLCB7IHNlc3Npb25JZDogY29uc29sZUlkLCBwaWQ6IHByb2Nlc3MucGlkIH0pO1xuICB9XG5cbiAgcmV0dXJuIHsgcm91dGVyLCBnZXRTZXNzaW9ucywgcmVnaXN0ZXJMZWFkZXJTZXNzaW9uLCByZWdpc3RlckNvbnNvbGVTZXNzaW9uIH07XG59XG4iXX0=
529
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5nZXN0Um91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dlYi9jb25zb2xlL0luZ2VzdFJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUkxQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUNMLHdCQUF3QixFQUN4QiwrQkFBK0IsR0FDaEMsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixrREFBa0Q7QUFDbEQsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7QUFFL0IscURBQXFEO0FBQ3JELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQztBQUM1QixNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQztBQUVwQyxpREFBaUQ7QUFDakQsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7QUFFakMsNkVBQTZFO0FBQzdFLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDO0FBQ2hDLE1BQU0sa0NBQWtDLEdBQUcsTUFBTSxDQUFDO0FBRWxELDZEQUE2RDtBQUM3RCxNQUFNLHVCQUF1QixHQUFHLEtBQUssQ0FBQztBQUV0QyxrRUFBa0U7QUFDbEUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLFlBQVk7QUFzRi9DLDZEQUE2RDtB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UyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN2RyxDQUFDO0lBRUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLHFCQUFxQixFQUFFLHNCQUFzQixFQUFFLENBQUM7QUFDaEcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXZlbnQgaW5nZXN0aW9uIHJvdXRlcyBmb3IgdGhlIHVuaWZpZWQgd2ViIGNvbnNvbGUuXG4gKlxuICogVGhlIGNvbnNvbGUgbGVhZGVyIG1vdW50cyB0aGVzZSByb3V0ZXMgc28gZm9sbG93ZXIgTUNQIHNlcnZlcnMgY2FuXG4gKiBmb3J3YXJkIHRoZWlyIGxvZ3MsIG1ldHJpY3MsIGFuZCBzZXNzaW9uIGxpZmVjeWNsZSBldmVudHMuIEFsbCBpbmdlc3RlZFxuICogZW50cmllcyBhcmUgc3RhbXBlZCB3aXRoIGBfc2Vzc2lvbklkYCBpbiB0aGVpciBkYXRhIGZpZWxkIGFuZCB0aGVuXG4gKiBicm9hZGNhc3QgdG8gU1NFIGNsaWVudHMgdmlhIHRoZSBleGlzdGluZyBsb2cvbWV0cmljcyBicm9hZGNhc3QgaG9va3MuXG4gKlxuICogUm91dGVzOlxuICogLSBQT1NUIC9hcGkvaW5nZXN0L2xvZ3MgICAgIOKAlCBCYXRjaGVkIGxvZyBlbnRyaWVzIGZyb20gYSBmb2xsb3dlclxuICogLSBQT1NUIC9hcGkvaW5nZXN0L21ldHJpY3MgIOKAlCBNZXRyaWMgc25hcHNob3RzIGZyb20gYSBmb2xsb3dlclxuICogLSBQT1NUIC9hcGkvaW5nZXN0L3Nlc3Npb24gIOKAlCBTZXNzaW9uIGxpZmVjeWNsZSBldmVudHMgKHN0YXJ0ZWQvc3RvcHBlZC9oZWFydGJlYXQpXG4gKiAtIEdFVCAgL2FwaS9zZXNzaW9ucyAgICAgICAg4oCUIEFjdGl2ZSBzZXNzaW9uIGxpc3QgZm9yIHRoZSBVSVxuICpcbiAqIEBzaW5jZSB2Mi4xLjAg4oCUIElzc3VlICMxNzAwXG4gKi9cblxuaW1wb3J0IGV4cHJlc3MsIHsgUm91dGVyIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3QsIFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgdHlwZSB7IFVuaWZpZWRMb2dFbnRyeSB9IGZyb20gJy4uLy4uL2xvZ2dpbmcvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZXRyaWNTbmFwc2hvdCB9IGZyb20gJy4uLy4uL21ldHJpY3MvdHlwZXMuanMnO1xuaW1wb3J0IHsgU2xpZGluZ1dpbmRvd1JhdGVMaW1pdGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvU2xpZGluZ1dpbmRvd1JhdGVMaW1pdGVyLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgU2Vzc2lvbk5hbWVQb29sIH0gZnJvbSAnLi9TZXNzaW9uTmFtZXMuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IGVudiB9IGZyb20gJy4uLy4uL2NvbmZpZy9lbnYuanMnO1xuaW1wb3J0IHsgUEFDS0FHRV9WRVJTSU9OIH0gZnJvbSAnLi4vLi4vZ2VuZXJhdGVkL3ZlcnNpb24uanMnO1xuaW1wb3J0IHtcbiAgQ09OU09MRV9QUk9UT0NPTF9WRVJTSU9OLFxuICBMRUdBQ1lfQ09OU09MRV9QUk9UT0NPTF9WRVJTSU9OLFxufSBmcm9tICcuL0xlYWRlckVsZWN0aW9uLmpzJztcblxuLyoqIE1heGltdW0gcGF5bG9hZCBzaXplIGZvciBpbmdlc3Rpb24gcmVxdWVzdHMgKi9cbmNvbnN0IE1BWF9QQVlMT0FEX1NJWkUgPSAnMW1iJztcblxuLyoqIFJhdGUgbGltaXQ6IG1heCByZXF1ZXN0cyBwZXIgd2luZG93IHBlciBzb3VyY2UgKi9cbmNvbnN0IFJBVEVfTElNSVRfTUFYID0gMTAwMDtcbmNvbnN0IFJBVEVfTElNSVRfV0lORE9XX01TID0gNjBfMDAwO1xuXG4vKiogSG93IG9mdGVuIHRvIGNoZWNrIGZvciBzdGFsZSBzZXNzaW9ucyAobXMpICovXG5jb25zdCBSRUFQRVJfSU5URVJWQUxfTVMgPSA1XzAwMDtcblxuLyoqIEhvdyBsb25nIHNpbmNlIGxhc3QgaGVhcnRiZWF0IGJlZm9yZSBhIHNlc3Npb24gaXMgY29uc2lkZXJlZCBkZWFkIChtcykgKi9cbmNvbnN0IFNFU1NJT05fU1RBTEVfTVMgPSAxNV8wMDA7XG5jb25zdCBUQUtFT1ZFUl9JTVBPUlRFRF9TRVNTSU9OX0dSQUNFX01TID0gNjBfMDAwO1xuXG4vKiogVGltZW91dCBmb3IgbGVnYWN5IHBvcnQgZmVkZXJhdGlvbi9wcm94eSByZXF1ZXN0cyAobXMpICovXG5jb25zdCBMRUdBQ1lfRkVUQ0hfVElNRU9VVF9NUyA9IDJfMDAwO1xuXG4vKiogSG93IGxvbmcgYmVmb3JlIGVuZGVkIHNlc3Npb25zIGFyZSBwdXJnZWQgZnJvbSB0aGUgTWFwIChtcykgKi9cbmNvbnN0IEVOREVEX1BVUkdFX01TID0gNSAqIDYwXzAwMDsgLy8gNSBtaW51dGVzXG5cbi8qKlxuICogVHJhY2tlZCBzZXNzaW9uIGluZm9ybWF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb25JbmZvIHtcbiAgLyoqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIHNlc3Npb24gKFVVSUQgb3IgYGNvbnNvbGUtPHBpZD5gKS4gKi9cbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIC8qKiBGcmllbmRseSBwdXBwZXQgbmFtZSAoZS5nLiwgXCJLZXJtaXRcIiwgXCJQdW5jaFwiKSBvciBcIldlYiBDb25zb2xlXCIuICovXG4gIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIC8qKiBDYW5vbmljYWwgaGV4IGNvbG9yIGZvciB0aGlzIHB1cHBldCBjaGFyYWN0ZXIuICovXG4gIGNvbG9yOiBzdHJpbmc7XG4gIC8qKiBPUyBwcm9jZXNzIElEIG9mIHRoZSBNQ1Agc2VydmVyIG9yIHdlYiBjb25zb2xlIHByb2Nlc3MuICovXG4gIHBpZDogbnVtYmVyO1xuICAvKiogSVNPIHRpbWVzdGFtcCB3aGVuIHRoZSBzZXNzaW9uIHN0YXJ0ZWQuICovXG4gIHN0YXJ0ZWRBdDogc3RyaW5nO1xuICAvKiogSVNPIHRpbWVzdGFtcCBvZiB0aGUgbW9zdCByZWNlbnQgaGVhcnRiZWF0IChmb2xsb3dlcnMpIG9yIHJlZ2lzdHJhdGlvbiAobGVhZGVyL2NvbnNvbGUpLiAqL1xuICBsYXN0SGVhcnRiZWF0OiBzdHJpbmc7XG4gIC8qKiBMaWZlY3ljbGUgc3RhdHVzIOKAlCAnYWN0aXZlJyB1bnRpbCBlbmRlZCBvciByZWFwZWQgZm9yIHN0YWxlbmVzcy4gKi9cbiAgc3RhdHVzOiAnYWN0aXZlJyB8ICdlbmRlZCc7XG4gIC8qKiBUcnVlIGlmIHRoaXMgc2Vzc2lvbiB3b24gbGVhZGVyIGVsZWN0aW9uIGFuZCBvd25zIHRoZSB0b2tlbiBmaWxlLiAqL1xuICBpc0xlYWRlcjogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhpcyBzZXNzaW9uIGNvbm5lY3RlZCB3aXRoIGEgdmFsaWQgQmVhcmVyIHRva2VuICgjMTgwNSkuICovXG4gIGF1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XG4gIC8qKiBTZXNzaW9uIGtpbmQg4oCUICdtY3AnIGZvciBNQ1Agc3RkaW8gc2Vzc2lvbnMsICdjb25zb2xlJyBmb3IgdGhlIHdlYiBjb25zb2xlIGl0c2VsZiAoIzE4MDUpLiAqL1xuICBraW5kOiAnbWNwJyB8ICdjb25zb2xlJztcbiAgLyoqIERvbGxob3VzZU1DUCBwYWNrYWdlIHZlcnNpb24gcmVwb3J0ZWQgYnkgdGhlIHNlc3Npb24uICovXG4gIHNlcnZlclZlcnNpb246IHN0cmluZztcbiAgLyoqIENvbnNvbGUvc2Vzc2lvbiBjb250cmFjdCB2ZXJzaW9uIHVzZWQgZm9yIGNvbXBhdGliaWxpdHktYXdhcmUgdGFrZW92ZXIuICovXG4gIGNvbnNvbGVQcm90b2NvbFZlcnNpb246IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQYXlsb2FkIGZvciBQT1NUIC9hcGkvaW5nZXN0L2xvZ3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmdlc3RMb2dQYXlsb2FkIHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIGVudHJpZXM6IFVuaWZpZWRMb2dFbnRyeVtdO1xufVxuXG4vKipcbiAqIFBheWxvYWQgZm9yIFBPU1QgL2FwaS9pbmdlc3QvbWV0cmljc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZ2VzdE1ldHJpY3NQYXlsb2FkIHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHNuYXBzaG90OiBNZXRyaWNTbmFwc2hvdDtcbn1cblxuLyoqXG4gKiBQYXlsb2FkIGZvciBQT1NUIC9hcGkvaW5nZXN0L3Nlc3Npb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uRXZlbnRQYXlsb2FkIHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIGV2ZW50OiAnc3RhcnRlZCcgfCAnc3RvcHBlZCcgfCAnaGVhcnRiZWF0JztcbiAgcGlkOiBudW1iZXI7XG4gIHN0YXJ0ZWRBdDogc3RyaW5nO1xuICBzZXJ2ZXJWZXJzaW9uPzogc3RyaW5nO1xuICBjb25zb2xlUHJvdG9jb2xWZXJzaW9uPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIENhbGxiYWNrcyBwcm92aWRlZCBieSB0aGUgdW5pZmllZCBjb25zb2xlIG9yY2hlc3RyYXRvciBmb3IgYnJvYWRjYXN0aW5nXG4gKiBpbmdlc3RlZCBldmVudHMgdGhyb3VnaCB0aGUgZXhpc3RpbmcgU1NFIGluZnJhc3RydWN0dXJlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZ2VzdEJyb2FkY2FzdHMge1xuICBsb2dCcm9hZGNhc3Q6IChlbnRyeTogVW5pZmllZExvZ0VudHJ5KSA9PiB2b2lkO1xuICBtZXRyaWNzT25TbmFwc2hvdD86IChzbmFwc2hvdDogTWV0cmljU25hcHNob3QpID0+IHZvaWQ7XG4gIHN0b3JlTWV0cmljc1NuYXBzaG90PzogKHNuYXBzaG90OiBNZXRyaWNTbmFwc2hvdCwgc2Vzc2lvbklkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHNlc3Npb25Ccm9hZGNhc3Q/OiAoZXZlbnQ6IFNlc3Npb25JbmZvKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBjcmVhdGluZyBpbmdlc3Qgcm91dGVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZ2VzdFJvdXRlc1Jlc3VsdCB7XG4gIHJvdXRlcjogUm91dGVyO1xuICAvKiogR2V0IGFsbCB0cmFja2VkIHNlc3Npb25zICovXG4gIGdldFNlc3Npb25zOiAoKSA9PiBTZXNzaW9uSW5mb1tdO1xuICAvKiogSW1wb3J0IGFjdGl2ZSBmb2xsb3dlciBzZXNzaW9ucyBmcm9tIGEgZGlzcGxhY2VkIGxlYWRlciBkdXJpbmcgdGFrZW92ZXIuICovXG4gIGltcG9ydFNlc3Npb25zOiAoc2Vzc2lvbnM6IFNlc3Npb25JbmZvW10pID0+IHZvaWQ7XG4gIC8qKiBSZWdpc3RlciB0aGUgbGVhZGVyIGFzIGEgc2Vzc2lvbiAqL1xuICByZWdpc3RlckxlYWRlclNlc3Npb246IChzZXNzaW9uSWQ6IHN0cmluZywgcGlkOiBudW1iZXIpID0+IHZvaWQ7XG4gIC8qKiBSZWdpc3RlciB0aGUgd2ViIGNvbnNvbGUgYXMgYSBzZXNzaW9uIHNvIHRoZSBpbmRpY2F0b3IgaXMgbmV2ZXIgZW1wdHkgKCMxODA1KSAqL1xuICByZWdpc3RlckNvbnNvbGVTZXNzaW9uOiAoKSA9PiB2b2lkO1xufVxuXG4vKiogTm9ybWFsaXplIGEgc3RyaW5nIHZpYSBVbmljb2RlVmFsaWRhdG9yIChETUNQLVNFQy0wMDQpICovXG5mdW5jdGlvbiBub3JtYWxpemVJbnB1dChzOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUocykubm9ybWFsaXplZENvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlcnZlclZlcnNpb24odmVyc2lvbj86IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgdmVyc2lvbiA9PT0gJ3N0cmluZycgJiYgdmVyc2lvbi50cmltKCkubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB2ZXJzaW9uLnRyaW0oKTtcbiAgfVxuICByZXR1cm4gJ3Vua25vd24nO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVDb25zb2xlUHJvdG9jb2xWZXJzaW9uKHZlcnNpb24/OiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAodHlwZW9mIHZlcnNpb24gPT09ICdudW1iZXInICYmIE51bWJlci5pc0ludGVnZXIodmVyc2lvbikgJiYgdmVyc2lvbiA+PSAwKSB7XG4gICAgcmV0dXJuIHZlcnNpb247XG4gIH1cbiAgcmV0dXJuIExFR0FDWV9DT05TT0xFX1BST1RPQ09MX1ZFUlNJT047XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBpbmdlc3Rpb24gcm91dGVzIGFuZCBzZXNzaW9uIHJlZ2lzdHJ5LlxuICpcbiAqIEBwYXJhbSBicm9hZGNhc3RzIC0gQ2FsbGJhY2tzIHRvIGZvcndhcmQgaW5nZXN0ZWQgZXZlbnRzIHRvIFNTRSBjbGllbnRzXG4gKiBAcmV0dXJucyBSb3V0ZXIgYW5kIHNlc3Npb24gbWFuYWdlbWVudCBmdW5jdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluZ2VzdFJvdXRlcyhicm9hZGNhc3RzOiBJbmdlc3RCcm9hZGNhc3RzKTogSW5nZXN0Um91dGVzUmVzdWx0IHtcbiAgY29uc3Qgcm91dGVyID0gUm91dGVyKCk7XG4gIGNvbnN0IHNlc3Npb25zID0gbmV3IE1hcDxzdHJpbmcsIFNlc3Npb25JbmZvPigpO1xuICBjb25zdCBuYW1lUG9vbCA9IG5ldyBTZXNzaW9uTmFtZVBvb2woKTtcbiAgY29uc3QgcmF0ZUxpbWl0ZXIgPSBuZXcgU2xpZGluZ1dpbmRvd1JhdGVMaW1pdGVyKFJBVEVfTElNSVRfTUFYLCBSQVRFX0xJTUlUX1dJTkRPV19NUyk7XG5cbiAgLy8gU2Vzc2lvbnMgdGhlIHVzZXIgZXhwbGljaXRseSBraWxsZWQg4oCUIG5ldmVyIGNvbWUgYmFjayAoIzE4NzApLlxuICAvLyBDbGVhcmVkIG9ubHkgb24gc2VydmVyIHJlc3RhcnQsIHdoaWNoIGlzIGFwcHJvcHJpYXRlIHNpbmNlIHRoYXQncyBhIG5ldyBjb250ZXh0LlxuICBjb25zdCBraWxsZWRTZXNzaW9ucyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIC8vIFNlc3Npb25zIHdhaXRpbmcgZm9yIGEgUElEIHNvIHdlIGNhbiBTSUdURVJNIHRoZW0gKCMxODcwKS5cbiAgLy8gV2hlbiB0aGUgdXNlciBkaXNtaXNzZXMgYSBwaWQ9MCBvcnBoYW4sIHdlIGFkZCBpdCBoZXJlLiBUaGUgbmV4dCBoZWFydGJlYXRcbiAgLy8gKGV2ZXJ5IDEwcykgY2FycmllcyB0aGUgUElEIOKAlCB3ZSBTSUdURVJNIGltbWVkaWF0ZWx5IGFuZCBtb3ZlIHRvIGtpbGxlZFNlc3Npb25zLlxuICBjb25zdCBwZW5kaW5nS2lsbHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgaW1wb3J0ZWRTZXNzaW9uR3JhY2VVbnRpbCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG5cbiAgLyoqIEV4ZWN1dGUgYSBkZWZlcnJlZCBraWxsIGlmIHdlIG5vdyBoYXZlIGEgUElELiAqL1xuICBmdW5jdGlvbiB0cnlFeGVjdXRlUGVuZGluZ0tpbGwoc2Vzc2lvbklkOiBzdHJpbmcsIHBpZD86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGtpbGxQaWQgPSBwaWQgfHwgc2Vzc2lvbnMuZ2V0KHNlc3Npb25JZCk/LnBpZDtcbiAgICBpZiAoIWtpbGxQaWQpIHJldHVybjtcbiAgICB0cnkgeyBwcm9jZXNzLmtpbGwoa2lsbFBpZCwgJ1NJR1RFUk0nKTsgfSBjYXRjaCB7IC8qIGFscmVhZHkgZGVhZCAqLyB9XG4gICAgY29uc3QgZXhpc3RpbmcgPSBzZXNzaW9ucy5nZXQoc2Vzc2lvbklkKTtcbiAgICBpZiAoZXhpc3RpbmcpIGV4aXN0aW5nLnN0YXR1cyA9ICdlbmRlZCc7XG4gICAgbG9nZ2VyLmluZm8oJ1tJbmdlc3RSb3V0ZXNdIERlZmVycmVkIGtpbGwgZXhlY3V0ZWQg4oCUIFBJRCBhcnJpdmVkJywge1xuICAgICAgZGlzcGxheU5hbWU6IGV4aXN0aW5nPy5kaXNwbGF5TmFtZSwgc2Vzc2lvbklkLCBwaWQ6IGtpbGxQaWQsXG4gICAgfSk7XG4gIH1cblxuICAvKiogUHJvbW90ZSBhIHBlbmRpbmcga2lsbCB0byBwZXJtYW5lbnQuICovXG4gIGZ1bmN0aW9uIGZpbmFsaXplUGVuZGluZ0tpbGwoc2Vzc2lvbklkOiBzdHJpbmcsIHBpZD86IG51bWJlcik6IHZvaWQge1xuICAgIHRyeUV4ZWN1dGVQZW5kaW5nS2lsbChzZXNzaW9uSWQsIHBpZCk7XG4gICAgcGVuZGluZ0tpbGxzLmRlbGV0ZShzZXNzaW9uSWQpO1xuICAgIGtpbGxlZFNlc3Npb25zLmFkZChzZXNzaW9uSWQpO1xuICB9XG5cbiAgLyoqIENyZWF0ZSBhIG5ldyBzZXNzaW9uIGVudHJ5IGZvciBhbiBvcnBoYW4uIFJldHVybnMgbnVsbCBvbiBmYWlsdXJlLiAqL1xuICBmdW5jdGlvbiBhdXRvUmVnaXN0ZXIoXG4gICAgc2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgcGlkPzogbnVtYmVyLFxuICAgIGF1dGhlbnRpY2F0ZWQgPSBmYWxzZSxcbiAgICBzZXJ2ZXJWZXJzaW9uPzogc3RyaW5nLFxuICAgIGNvbnNvbGVQcm90b2NvbFZlcnNpb24/OiBudW1iZXIsXG4gICk6IFNlc3Npb25JbmZvIHwgbnVsbCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gbmFtZVBvb2wuYXNzaWduKHNlc3Npb25JZCk7XG4gICAgICBjb25zdCBjb2xvciA9IG5hbWVQb29sLmdldENvbG9yKHNlc3Npb25JZCkgPz8gJyMzYjgyZjYnO1xuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgY29uc3QgaW5mbzogU2Vzc2lvbkluZm8gPSB7XG4gICAgICAgIHNlc3Npb25JZCwgZGlzcGxheU5hbWUsIGNvbG9yLFxuICAgICAgICBwaWQ6IHBpZCB8fCAwLFxuICAgICAgICBzdGFydGVkQXQ6IG5vdywgbGFzdEhlYXJ0YmVhdDogbm93LFxuICAgICAgICBzdGF0dXM6ICdhY3RpdmUnLCBpc0xlYWRlcjogZmFsc2UsIGF1dGhlbnRpY2F0ZWQsIGtpbmQ6ICdtY3AnLFxuICAgICAgICBzZXJ2ZXJWZXJzaW9uOiBub3JtYWxpemVTZXJ2ZXJWZXJzaW9uKHNlcnZlclZlcnNpb24pLFxuICAgICAgICBjb25zb2xlUHJvdG9jb2xWZXJzaW9uOiBub3JtYWxpemVDb25zb2xlUHJvdG9jb2xWZXJzaW9uKGNvbnNvbGVQcm90b2NvbFZlcnNpb24pLFxuICAgICAgfTtcbiAgICAgIHNlc3Npb25zLnNldChzZXNzaW9uSWQsIGluZm8pO1xuICAgICAgbG9nZ2VyLmluZm8oJ1tJbmdlc3RSb3V0ZXNdIEF1dG8tcmVnaXN0ZXJlZCBvcnBoYW5lZCBzZXNzaW9uJywge1xuICAgICAgICBkaXNwbGF5TmFtZSwgc2Vzc2lvbklkLCBzb3VyY2U6IHBpZCA/ICdoZWFydGJlYXQnIDogJ2luZ2VzdGlvbicsXG4gICAgICB9KTtcbiAgICAgIGJyb2FkY2FzdHMuc2Vzc2lvbkJyb2FkY2FzdD8uKGluZm8pO1xuICAgICAgcmV0dXJuIGluZm87XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ1tJbmdlc3RSb3V0ZXNdIEZhaWxlZCB0byBhdXRvLXJlZ2lzdGVyIG9ycGhhbmVkIHNlc3Npb24nLCB7XG4gICAgICAgIHNlc3Npb25JZCwgZXJyb3I6IChlcnIgYXMgRXJyb3IpLm1lc3NhZ2UsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBdXRvLXJlZ2lzdGVyIG9yIHVwZGF0ZSBhbiBvcnBoYW5lZCBzZXNzaW9uIGZyb20gaW5nZXN0aW9uIGRhdGEuXG4gICAqIFJldHVybnMgdGhlIHNlc3Npb24gKGV4aXN0aW5nIG9yIG5ld2x5IGNyZWF0ZWQpLCBvciBudWxsIGlmIGtpbGxlZC9wZW5kaW5nLlxuICAgKi9cbiAgZnVuY3Rpb24gZW5zdXJlU2Vzc2lvbihcbiAgICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgICBwaWQ/OiBudW1iZXIsXG4gICAgYXV0aGVudGljYXRlZCA9IGZhbHNlLFxuICAgIHNlcnZlclZlcnNpb24/OiBzdHJpbmcsXG4gICAgY29uc29sZVByb3RvY29sVmVyc2lvbj86IG51bWJlcixcbiAgKTogU2Vzc2lvbkluZm8gfCBudWxsIHtcbiAgICBpZiAoa2lsbGVkU2Vzc2lvbnMuaGFzKHNlc3Npb25JZCkpIHJldHVybiBudWxsO1xuICAgIGlmIChwZW5kaW5nS2lsbHMuaGFzKHNlc3Npb25JZCkpIHtcbiAgICAgIGZpbmFsaXplUGVuZGluZ0tpbGwoc2Vzc2lvbklkLCBwaWQpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmcgPSBzZXNzaW9ucy5nZXQoc2Vzc2lvbklkKTtcbiAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICByZXR1cm4gYXV0b1JlZ2lzdGVyKHNlc3Npb25JZCwgcGlkLCBhdXRoZW50aWNhdGVkLCBzZXJ2ZXJWZXJzaW9uLCBjb25zb2xlUHJvdG9jb2xWZXJzaW9uKTtcbiAgICB9XG5cbiAgICBpbXBvcnRlZFNlc3Npb25HcmFjZVVudGlsLmRlbGV0ZShzZXNzaW9uSWQpO1xuXG4gICAgaWYgKGV4aXN0aW5nLnN0YXR1cyA9PT0gJ2VuZGVkJykge1xuICAgICAgZXhpc3Rpbmcuc3RhdHVzID0gJ2FjdGl2ZSc7XG4gICAgICBsb2dnZXIuaW5mbygnW0luZ2VzdFJvdXRlc10gUmV2aXZlZCBlbmRlZCBzZXNzaW9uIHN0aWxsIHNlbmRpbmcgZGF0YScsIHtcbiAgICAgICAgZGlzcGxheU5hbWU6IGV4aXN0aW5nLmRpc3BsYXlOYW1lLCBzZXNzaW9uSWQsXG4gICAgICB9KTtcbiAgICB9XG4gICAgZXhpc3RpbmcubGFzdEhlYXJ0YmVhdCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICBpZiAocGlkICYmICFleGlzdGluZy5waWQpIHtcbiAgICAgIGV4aXN0aW5nLnBpZCA9IHBpZDtcbiAgICAgIGxvZ2dlci5pbmZvKCdbSW5nZXN0Um91dGVzXSBSZWNvdmVyZWQgUElEIGZvciBvcnBoYW5lZCBzZXNzaW9uJywge1xuICAgICAgICBkaXNwbGF5TmFtZTogZXhpc3RpbmcuZGlzcGxheU5hbWUsIHNlc3Npb25JZCwgcGlkLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChzZXJ2ZXJWZXJzaW9uKSB7XG4gICAgICBleGlzdGluZy5zZXJ2ZXJWZXJzaW9uID0gbm9ybWFsaXplU2VydmVyVmVyc2lvbihzZXJ2ZXJWZXJzaW9uKTtcbiAgICB9XG4gICAgaWYgKGNvbnNvbGVQcm90b2NvbFZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgZXhpc3RpbmcuY29uc29sZVByb3RvY29sVmVyc2lvbiA9IG5vcm1hbGl6ZUNvbnNvbGVQcm90b2NvbFZlcnNpb24oY29uc29sZVByb3RvY29sVmVyc2lvbik7XG4gICAgfVxuICAgIHJldHVybiBleGlzdGluZztcbiAgfVxuXG4gIC8vIEpTT04gYm9keSBwYXJzaW5nIHdpdGggc2l6ZSBsaW1pdFxuICByb3V0ZXIudXNlKGV4cHJlc3MuanNvbih7IGxpbWl0OiBNQVhfUEFZTE9BRF9TSVpFIH0pKTtcblxuICAvKipcbiAgICogUE9TVCAvYXBpL2luZ2VzdC9sb2dzIOKAlCBSZWNlaXZlIGJhdGNoZWQgbG9nIGVudHJpZXMgZnJvbSBhIGZvbGxvd2VyLlxuICAgKi9cbiAgcm91dGVyLnBvc3QoJy9hcGkvaW5nZXN0L2xvZ3MnLCAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKCFyYXRlTGltaXRlci50cnlBY3F1aXJlKCkpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDI5KS5qc29uKHsgZXJyb3I6ICdSYXRlIGxpbWl0IGV4Y2VlZGVkJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXlsb2FkID0gcmVxLmJvZHkgYXMgSW5nZXN0TG9nUGF5bG9hZDtcbiAgICBpZiAoIXBheWxvYWQ/LnNlc3Npb25JZCB8fCAhQXJyYXkuaXNBcnJheShwYXlsb2FkLmVudHJpZXMpKSB7XG4gICAgICBjb25zdCByZWNlaXZlZCA9IHBheWxvYWQgPyBPYmplY3Qua2V5cyhwYXlsb2FkKSA6IFtdO1xuICAgICAgbG9nZ2VyLndhcm4oJ1tJbmdlc3RSb3V0ZXNdIEludmFsaWQgbG9nIHBheWxvYWQnLCB7IHJlY2VpdmVkLCBoYXNTZXNzaW9uSWQ6ICEhcGF5bG9hZD8uc2Vzc2lvbklkLCBoYXNFbnRyaWVzOiBBcnJheS5pc0FycmF5KHBheWxvYWQ/LmVudHJpZXMpIH0pO1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgcGF5bG9hZCcsIHJlcXVpcmVkOiBbJ3Nlc3Npb25JZCcsICdlbnRyaWVzJ10sIHJlY2VpdmVkIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwYXlsb2FkLnNlc3Npb25JZCA9IG5vcm1hbGl6ZUlucHV0KHBheWxvYWQuc2Vzc2lvbklkKTtcblxuICAgIGxldCBjb3VudCA9IDA7XG4gICAgbGV0IHNraXBwZWQgPSAwO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgcGF5bG9hZC5lbnRyaWVzKSB7XG4gICAgICBpZiAoIWVudHJ5IHx8IHR5cGVvZiBlbnRyeS5tZXNzYWdlICE9PSAnc3RyaW5nJykgeyBza2lwcGVkKys7IGNvbnRpbnVlOyB9XG4gICAgICBjb25zdCBzdGFtcGVkOiBVbmlmaWVkTG9nRW50cnkgPSB7XG4gICAgICAgIC4uLmVudHJ5LFxuICAgICAgICBkYXRhOiB7IC4uLmVudHJ5LmRhdGEsIF9zZXNzaW9uSWQ6IHBheWxvYWQuc2Vzc2lvbklkIH0sXG4gICAgICB9O1xuICAgICAgYnJvYWRjYXN0cy5sb2dCcm9hZGNhc3Qoc3RhbXBlZCk7XG4gICAgICBjb3VudCsrO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBoZWFydGJlYXQsIHJldml2ZSBlbmRlZCBzZXNzaW9ucywgb3IgYXV0by1yZWdpc3RlciBvcnBoYW5zICgjMTg3MClcbiAgICBjb25zdCBzZXNzaW9uID0gZW5zdXJlU2Vzc2lvbihwYXlsb2FkLnNlc3Npb25JZCk7XG5cbiAgICBpZiAoc2tpcHBlZCA+IDApIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW0luZ2VzdFJvdXRlc10gTG9nIGluZ2VzdCBmcm9tICR7c2Vzc2lvbj8uZGlzcGxheU5hbWUgPz8gcGF5bG9hZC5zZXNzaW9uSWR9OiBhY2NlcHRlZD0ke2NvdW50fSwgc2tpcHBlZD0ke3NraXBwZWR9YCk7XG4gICAgfVxuXG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oeyBhY2NlcHRlZDogY291bnQsIHNraXBwZWQgfSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBQT1NUIC9hcGkvaW5nZXN0L21ldHJpY3Mg4oCUIFJlY2VpdmUgbWV0cmljIHNuYXBzaG90cyBmcm9tIGEgZm9sbG93ZXIuXG4gICAqL1xuICByb3V0ZXIucG9zdCgnL2FwaS9pbmdlc3QvbWV0cmljcycsIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICBpZiAoIXJhdGVMaW1pdGVyLnRyeUFjcXVpcmUoKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MjkpLmpzb24oeyBlcnJvcjogJ1JhdGUgbGltaXQgZXhjZWVkZWQnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBheWxvYWQgPSByZXEuYm9keSBhcyBJbmdlc3RNZXRyaWNzUGF5bG9hZDtcbiAgICBpZiAoIXBheWxvYWQ/LnNlc3Npb25JZCB8fCAhcGF5bG9hZC5zbmFwc2hvdCkge1xuICAgICAgY29uc3QgcmVjZWl2ZWQgPSBwYXlsb2FkID8gT2JqZWN0LmtleXMocGF5bG9hZCkgOiBbXTtcbiAgICAgIGxvZ2dlci53YXJuKCdbSW5nZXN0Um91dGVzXSBJbnZhbGlkIG1ldHJpY3MgcGF5bG9hZCcsIHsgcmVjZWl2ZWQgfSk7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnSW52YWxpZCBwYXlsb2FkJywgcmVxdWlyZWQ6IFsnc2Vzc2lvbklkJywgJ3NuYXBzaG90J10sIHJlY2VpdmVkIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwYXlsb2FkLnNlc3Npb25JZCA9IG5vcm1hbGl6ZUlucHV0KHBheWxvYWQuc2Vzc2lvbklkKTtcblxuICAgIGlmIChicm9hZGNhc3RzLm1ldHJpY3NPblNuYXBzaG90KSB7XG4gICAgICBicm9hZGNhc3RzLm1ldHJpY3NPblNuYXBzaG90KHBheWxvYWQuc25hcHNob3QpO1xuICAgIH1cbiAgICBpZiAoYnJvYWRjYXN0cy5zdG9yZU1ldHJpY3NTbmFwc2hvdCkge1xuICAgICAgYnJvYWRjYXN0cy5zdG9yZU1ldHJpY3NTbmFwc2hvdChwYXlsb2FkLnNuYXBzaG90LCBwYXlsb2FkLnNlc3Npb25JZCk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGhlYXJ0YmVhdCwgcmV2aXZlIGVuZGVkIHNlc3Npb25zLCBvciBhdXRvLXJlZ2lzdGVyIG9ycGhhbnMgKCMxODcwKVxuICAgIGNvbnN0IHNlc3Npb24gPSBlbnN1cmVTZXNzaW9uKHBheWxvYWQuc2Vzc2lvbklkKTtcbiAgICBsb2dnZXIuZGVidWcoYFtJbmdlc3RSb3V0ZXNdIE1ldHJpY3MgaW5nZXN0ZWQgZnJvbSAke3Nlc3Npb24/LmRpc3BsYXlOYW1lID8/IHBheWxvYWQuc2Vzc2lvbklkfWApO1xuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgYWNjZXB0ZWQ6IHRydWUgfSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBQT1NUIC9hcGkvaW5nZXN0L3Nlc3Npb24g4oCUIFNlc3Npb24gbGlmZWN5Y2xlIGV2ZW50cy5cbiAgICovXG4gIHJvdXRlci5wb3N0KCcvYXBpL2luZ2VzdC9zZXNzaW9uJywgKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICAgIGNvbnN0IHBheWxvYWQgPSByZXEuYm9keSBhcyBTZXNzaW9uRXZlbnRQYXlsb2FkO1xuICAgIGlmICghcGF5bG9hZD8uc2Vzc2lvbklkIHx8ICFwYXlsb2FkLmV2ZW50KSB7XG4gICAgICBjb25zdCByZWNlaXZlZCA9IHBheWxvYWQgPyBPYmplY3Qua2V5cyhwYXlsb2FkKSA6IFtdO1xuICAgICAgbG9nZ2VyLndhcm4oJ1tJbmdlc3RSb3V0ZXNdIEludmFsaWQgc2Vzc2lvbiBldmVudCBwYXlsb2FkJywgeyByZWNlaXZlZCB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIHBheWxvYWQnLCByZXF1aXJlZDogWydzZXNzaW9uSWQnLCAnZXZlbnQnXSwgcmVjZWl2ZWQgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHBheWxvYWQuc2Vzc2lvbklkID0gbm9ybWFsaXplSW5wdXQocGF5bG9hZC5zZXNzaW9uSWQpO1xuXG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gICAgc3dpdGNoIChwYXlsb2FkLmV2ZW50KSB7XG4gICAgICBjYXNlICdzdGFydGVkJzoge1xuICAgICAgICAvLyBLaWxsZWQgc2Vzc2lvbnMgc3RheSBkZWFkOyBwZW5kaW5nIGtpbGxzIGdldCBmaW5hbGl6ZWQgKCMxODcwKVxuICAgICAgICBpZiAoa2lsbGVkU2Vzc2lvbnMuaGFzKHBheWxvYWQuc2Vzc2lvbklkKSkgYnJlYWs7XG4gICAgICAgIGlmIChwZW5kaW5nS2lsbHMuaGFzKHBheWxvYWQuc2Vzc2lvbklkKSkgeyBmaW5hbGl6ZVBlbmRpbmdLaWxsKHBheWxvYWQuc2Vzc2lvbklkLCBwYXlsb2FkLnBpZCk7IGJyZWFrOyB9XG5cbiAgICAgICAgY29uc3QgZGlzcGxheU5hbWUgPSBuYW1lUG9vbC5hc3NpZ24ocGF5bG9hZC5zZXNzaW9uSWQpO1xuICAgICAgICBjb25zdCBjb2xvciA9IG5hbWVQb29sLmdldENvbG9yKHBheWxvYWQuc2Vzc2lvbklkKSA/PyAnIzNiODJmNic7XG4gICAgICAgIGNvbnN0IGlzQXV0aGVudGljYXRlZCA9IEJvb2xlYW4oKHJlcyBhcyBhbnkpLmxvY2Fscz8udG9rZW5FbnRyeSk7XG4gICAgICAgIHNlc3Npb25zLnNldChwYXlsb2FkLnNlc3Npb25JZCwge1xuICAgICAgICAgIHNlc3Npb25JZDogcGF5bG9hZC5zZXNzaW9uSWQsIGRpc3BsYXlOYW1lLCBjb2xvcixcbiAgICAgICAgICBwaWQ6IHBheWxvYWQucGlkLCBzdGFydGVkQXQ6IHBheWxvYWQuc3RhcnRlZEF0IHx8IG5vdywgbGFzdEhlYXJ0YmVhdDogbm93LFxuICAgICAgICAgIHN0YXR1czogJ2FjdGl2ZScsIGlzTGVhZGVyOiBmYWxzZSwgYXV0aGVudGljYXRlZDogaXNBdXRoZW50aWNhdGVkLCBraW5kOiAnbWNwJyxcbiAgICAgICAgICBzZXJ2ZXJWZXJzaW9uOiBub3JtYWxpemVTZXJ2ZXJWZXJzaW9uKHBheWxvYWQuc2VydmVyVmVyc2lvbiksXG4gICAgICAgICAgY29uc29sZVByb3RvY29sVmVyc2lvbjogbm9ybWFsaXplQ29uc29sZVByb3RvY29sVmVyc2lvbihwYXlsb2FkLmNvbnNvbGVQcm90b2NvbFZlcnNpb24pLFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ1tJbmdlc3RSb3V0ZXNdIFNlc3Npb24gcmVnaXN0ZXJlZCcsIHtcbiAgICAgICAgICBkaXNwbGF5TmFtZSwgc2Vzc2lvbklkOiBwYXlsb2FkLnNlc3Npb25JZCwgcGlkOiBwYXlsb2FkLnBpZCwgY29sb3IsXG4gICAgICAgICAgYWN0aXZlU2Vzc2lvbnM6IEFycmF5LmZyb20oc2Vzc2lvbnMudmFsdWVzKCkpLmZpbHRlcihzID0+IHMuc3RhdHVzID09PSAnYWN0aXZlJykubGVuZ3RoLFxuICAgICAgICB9KTtcbiAgICAgICAgYnJvYWRjYXN0cy5zZXNzaW9uQnJvYWRjYXN0Py4oc2Vzc2lvbnMuZ2V0KHBheWxvYWQuc2Vzc2lvbklkKSEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3N0b3BwZWQnOiB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gc2Vzc2lvbnMuZ2V0KHBheWxvYWQuc2Vzc2lvbklkKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgICAgZXhpc3Rpbmcuc3RhdHVzID0gJ2VuZGVkJztcbiAgICAgICAgICBleGlzdGluZy5sYXN0SGVhcnRiZWF0ID0gbm93O1xuICAgICAgICAgIG5hbWVQb29sLnJlbGVhc2UocGF5bG9hZC5zZXNzaW9uSWQpO1xuICAgICAgICAgIGxvZ2dlci5pbmZvKCdbSW5nZXN0Um91dGVzXSBTZXNzaW9uIHN0b3BwZWQnLCB7XG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogZXhpc3RpbmcuZGlzcGxheU5hbWUsIHNlc3Npb25JZDogcGF5bG9hZC5zZXNzaW9uSWQsIHBpZDogZXhpc3RpbmcucGlkLFxuICAgICAgICAgICAgYWN0aXZlU2Vzc2lvbnM6IEFycmF5LmZyb20oc2Vzc2lvbnMudmFsdWVzKCkpLmZpbHRlcihzID0+IHMuc3RhdHVzID09PSAnYWN0aXZlJykubGVuZ3RoIC0gMSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicm9hZGNhc3RzLnNlc3Npb25Ccm9hZGNhc3Q/LihleGlzdGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdoZWFydGJlYXQnOiB7XG4gICAgICAgIC8vIEF1dG8tcmVnaXN0ZXIgb3IgdXBkYXRlIOKAlCBoZWFydGJlYXQgaW5jbHVkZXMgUElEIGZvciByZWNvdmVyeSAoIzE4NzApXG4gICAgICAgIGVuc3VyZVNlc3Npb24oXG4gICAgICAgICAgcGF5bG9hZC5zZXNzaW9uSWQsXG4gICAgICAgICAgcGF5bG9hZC5waWQsXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgcGF5bG9hZC5zZXJ2ZXJWZXJzaW9uLFxuICAgICAgICAgIHBheWxvYWQuY29uc29sZVByb3RvY29sVmVyc2lvbixcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oeyBvazogdHJ1ZSB9KTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEdFVCAvYXBpL3Nlc3Npb25zIOKAlCBMaXN0IGFsbCB0cmFja2VkIHNlc3Npb25zLlxuICAgKi9cbiAgcm91dGVyLmdldCgnL2FwaS9zZXNzaW9ucycsIGFzeW5jIChfcmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiB7XG4gICAgLy8gU2VydmVyLXNpZGUgYWN0aXZlIGZpbHRlciDigJQgdGhlIGZyb250ZW5kIGFsc28gZmlsdGVycywgYnV0IGVuZGVkIHNlc3Npb25zXG4gICAgLy8gc2hvdWxkIG5ldmVyIGxlYXZlIHRoZSBBUEkgdG8gcHJldmVudCBzdGFsZSBVSSAoIzE4NzApLlxuICAgIGNvbnN0IGxvY2FsU2Vzc2lvbnMgPSBBcnJheS5mcm9tKHNlc3Npb25zLnZhbHVlcygpKS5maWx0ZXIocyA9PiBzLnN0YXR1cyA9PT0gJ2FjdGl2ZScpO1xuICAgIGNvbnN0IGN1cnJlbnRQb3J0ID0gZW52LkRPTExIT1VTRV9XRUJfQ09OU09MRV9QT1JUID8/IDQxNzE1O1xuXG4gICAgLy8gRmVkZXJhdGUgd2l0aCB0aGUgbGVnYWN5IHBvcnQgKDM5MzkpIHRvIHNob3cgYWxsIHNlc3Npb25zIG9uIHRoZVxuICAgIC8vIG1hY2hpbmUsIGluY2x1ZGluZyB1bmF1dGhlbnRpY2F0ZWQgb25lcyBmcm9tIHByZS1hdXRoIGluc3RhbGxzLlxuICAgIC8vIFNlcnZlci10by1zZXJ2ZXIgYXZvaWRzIENPUlMgcmVzdHJpY3Rpb25zICgjMTgwNSkuXG4gICAgaWYgKGN1cnJlbnRQb3J0ICE9PSAzOTM5KSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIExFR0FDWV9GRVRDSF9USU1FT1VUX01TKTtcbiAgICAgICAgY29uc3QgbGVnYWN5UmVzID0gYXdhaXQgZmV0Y2goJ2h0dHA6Ly8xMjcuMC4wLjE6MzkzOS9hcGkvc2Vzc2lvbnMnLCB7XG4gICAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgfSk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgaWYgKGxlZ2FjeVJlcy5vaykge1xuICAgICAgICAgIGNvbnN0IGxlZ2FjeURhdGEgPSBhd2FpdCBsZWdhY3lSZXMuanNvbigpIGFzIHsgc2Vzc2lvbnM6IFNlc3Npb25JbmZvW10gfTtcbiAgICAgICAgICBjb25zdCBsb2NhbElkcyA9IG5ldyBTZXQobG9jYWxTZXNzaW9ucy5tYXAocyA9PiBzLnNlc3Npb25JZCkpO1xuICAgICAgICAgIGZvciAoY29uc3QgbHMgb2YgKGxlZ2FjeURhdGEuc2Vzc2lvbnMgfHwgW10pKSB7XG4gICAgICAgICAgICBpZiAoIWxvY2FsSWRzLmhhcyhscy5zZXNzaW9uSWQpICYmIGxzLnN0YXR1cyA9PT0gJ2FjdGl2ZScpIHtcbiAgICAgICAgICAgICAgbG9jYWxTZXNzaW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAuLi5scyxcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBraW5kOiBscy5raW5kIHx8ICdtY3AnLFxuICAgICAgICAgICAgICAgIHNlcnZlclZlcnNpb246IG5vcm1hbGl6ZVNlcnZlclZlcnNpb24obHMuc2VydmVyVmVyc2lvbiksXG4gICAgICAgICAgICAgICAgY29uc29sZVByb3RvY29sVmVyc2lvbjogbm9ybWFsaXplQ29uc29sZVByb3RvY29sVmVyc2lvbihscy5jb25zb2xlUHJvdG9jb2xWZXJzaW9uKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gTGVnYWN5IGluc3RhbmNlIG5vdCBydW5uaW5nIG9yIHVucmVhY2hhYmxlIOKAlCB0aGF0J3MgZmluZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJlcy5qc29uKHsgc2Vzc2lvbnM6IGxvY2FsU2Vzc2lvbnMgfSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBQT1NUIC9hcGkvc2Vzc2lvbnMvOnNlc3Npb25JZC9raWxsIOKAlCBUZXJtaW5hdGUgYSBzZXNzaW9uJ3Mgc2VydmVyIHByb2Nlc3MuXG4gICAqL1xuICByb3V0ZXIucG9zdCgnL2FwaS9zZXNzaW9ucy86c2Vzc2lvbklkL2tpbGwnLCBhc3luYyAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbklkID0gcmVxLnBhcmFtc1snc2Vzc2lvbklkJ10gYXMgc3RyaW5nO1xuICAgIGNvbnN0IHNlc3Npb24gPSBzZXNzaW9ucy5nZXQoc2Vzc2lvbklkKTtcblxuICAgIGlmICghc2Vzc2lvbikge1xuICAgICAgLy8gU2Vzc2lvbiBub3QgaW4gbG9jYWwgTWFwIOKAlCB0cnkgcHJveHlpbmcga2lsbCB0byBsZWdhY3kgcG9ydCAoIzE4NzApXG4gICAgICBjb25zdCBjdXJyZW50UG9ydCA9IGVudi5ET0xMSE9VU0VfV0VCX0NPTlNPTEVfUE9SVCA/PyA0MTcxNTtcbiAgICAgIGlmIChjdXJyZW50UG9ydCAhPT0gMzkzOSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCBMRUdBQ1lfRkVUQ0hfVElNRU9VVF9NUyk7XG4gICAgICAgICAgY29uc3QgcHJveHlSZXMgPSBhd2FpdCBmZXRjaChgaHR0cDovLzEyNy4wLjAuMTozOTM5L2FwaS9zZXNzaW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChzZXNzaW9uSWQpfS9raWxsYCwge1xuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICBpZiAocHJveHlSZXMub2spIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBwcm94eVJlcy5qc29uKCk7XG4gICAgICAgICAgICByZXMuanNvbihkYXRhKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIExlZ2FjeSBpbnN0YW5jZSBub3QgcnVubmluZyDigJQgZmFsbCB0aHJvdWdoIHRvIDQwNFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsb2dnZXIud2FybignW0luZ2VzdFJvdXRlc10gS2lsbCByZXF1ZXN0ZWQgZm9yIHVua25vd24gc2Vzc2lvbicsIHsgc2Vzc2lvbklkIH0pO1xuICAgICAgcmVzLnN0YXR1cyg0MDQpLmpzb24oeyBlcnJvcjogJ1Nlc3Npb24gbm90IGZvdW5kJywgc2Vzc2lvbklkIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghc2Vzc2lvbi5waWQpIHtcbiAgICAgIC8vIEF1dG8tcmVnaXN0ZXJlZCBvcnBoYW4gd2l0aCB1bmtub3duIFBJRCDigJQgcXVldWUgZm9yIGRlZmVycmVkIGtpbGwgKCMxODcwKS5cbiAgICAgIC8vIFRoZSBuZXh0IGhlYXJ0YmVhdCAoZXZlcnkgfjEwcykgY2FycmllcyB0aGUgUElELiBlbnN1cmVTZXNzaW9uKCkgd2lsbFxuICAgICAgLy8gU0lHVEVSTSB0aGUgcHJvY2VzcyBhcyBzb29uIGFzIHRoZSBQSUQgYXJyaXZlcy4gU2Vzc2lvbiBpcyBnb25lIGZvciBnb29kLlxuICAgICAgc2Vzc2lvbi5zdGF0dXMgPSAnZW5kZWQnO1xuICAgICAgbmFtZVBvb2wucmVsZWFzZShzZXNzaW9uSWQpO1xuICAgICAgcGVuZGluZ0tpbGxzLmFkZChzZXNzaW9uSWQpO1xuICAgICAgbG9nZ2VyLmluZm8oJ1tJbmdlc3RSb3V0ZXNdIFF1ZXVlZCBkZWZlcnJlZCBraWxsIOKAlCB3YWl0aW5nIGZvciBQSUQgdmlhIGhlYXJ0YmVhdCcsIHtcbiAgICAgICAgZGlzcGxheU5hbWU6IHNlc3Npb24uZGlzcGxheU5hbWUsIHNlc3Npb25JZCxcbiAgICAgIH0pO1xuICAgICAgcmVzLmpzb24oeyBvazogdHJ1ZSwgZGlzbWlzc2VkOiBzZXNzaW9uLmRpc3BsYXlOYW1lLCByZWFzb246ICdwZW5kaW5nLWtpbGwnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNJR1RFUk0gdGhlIHByb2Nlc3MuIEV2ZW4gaWYgaXQgZmFpbHMgKEVTUkNIID0gYWxyZWFkeSBkZWFkLCBFUEVSTSA9IG5vdCBvdXJzKSxcbiAgICAvLyBtYXJrIHRoZSBzZXNzaW9uIGFzIHBlcm1hbmVudGx5IGtpbGxlZCBzbyBpdCBuZXZlciByZWFwcGVhcnMgKCMxODcwKS5cbiAgICB0cnkge1xuICAgICAgcHJvY2Vzcy5raWxsKHNlc3Npb24ucGlkLCAnU0lHVEVSTScpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3QgY29kZSA9IChlcnIgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlO1xuICAgICAgaWYgKGNvZGUgPT09ICdFU1JDSCcpIHtcbiAgICAgICAgLy8gUHJvY2VzcyBhbHJlYWR5IGRlYWQg4oCUIHRyZWF0IGFzIHN1Y2Nlc3NmdWwga2lsbC5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignW0luZ2VzdFJvdXRlc10gRmFpbGVkIHRvIGtpbGwgc2Vzc2lvbicsIHtcbiAgICAgICAgICBkaXNwbGF5TmFtZTogc2Vzc2lvbi5kaXNwbGF5TmFtZSwgc2Vzc2lvbklkLCBwaWQ6IHNlc3Npb24ucGlkLCBlcnJvcjogKGVyciBhcyBFcnJvcikubWVzc2FnZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6ICdGYWlsZWQgdG8ga2lsbCBzZXNzaW9uJywgc2Vzc2lvbklkLCBkaXNwbGF5TmFtZTogc2Vzc2lvbi5kaXNwbGF5TmFtZSwgcGlkOiBzZXNzaW9uLnBpZCwgZGV0YWlsOiAoZXJyIGFzIEVycm9yKS5tZXNzYWdlIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHNlc3Npb24uc3RhdHVzID0gJ2VuZGVkJztcbiAgICBuYW1lUG9vbC5yZWxlYXNlKHNlc3Npb25JZCk7XG4gICAga2lsbGVkU2Vzc2lvbnMuYWRkKHNlc3Npb25JZCk7XG4gICAgbG9nZ2VyLmluZm8oJ1tJbmdlc3RSb3V0ZXNdIFNlc3Npb24ga2lsbGVkJywge1xuICAgICAgZGlzcGxheU5hbWU6IHNlc3Npb24uZGlzcGxheU5hbWUsIHNlc3Npb25JZCwgcGlkOiBzZXNzaW9uLnBpZCxcbiAgICAgIGFjdGl2ZVNlc3Npb25zOiBBcnJheS5mcm9tKHNlc3Npb25zLnZhbHVlcygpKS5maWx0ZXIocyA9PiBzLnN0YXR1cyA9PT0gJ2FjdGl2ZScpLmxlbmd0aCAtIDEsXG4gICAgfSk7XG4gICAgcmVzLmpzb24oeyBvazogdHJ1ZSwga2lsbGVkOiBzZXNzaW9uLmRpc3BsYXlOYW1lLCBwaWQ6IHNlc3Npb24ucGlkIH0pO1xuICB9KTtcblxuICAvKiogTWFyayBzdGFsZSBhY3RpdmUgc2Vzc2lvbnMgYXMgZW5kZWQuICovXG4gIGZ1bmN0aW9uIHJlYXBTdGFsZVNlc3Npb25zKG5vdzogbnVtYmVyKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBbaWQsIHNlc3Npb25dIG9mIHNlc3Npb25zKSB7XG4gICAgICBpZiAoc2Vzc2lvbi5zdGF0dXMgIT09ICdhY3RpdmUnKSBjb250aW51ZTtcbiAgICAgIGlmIChzZXNzaW9uLmlzTGVhZGVyIHx8IHNlc3Npb24ua2luZCA9PT0gJ2NvbnNvbGUnKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGFnZSA9IG5vdyAtIG5ldyBEYXRlKHNlc3Npb24ubGFzdEhlYXJ0YmVhdCkuZ2V0VGltZSgpO1xuICAgICAgY29uc3QgZ3JhY2VVbnRpbCA9IGltcG9ydGVkU2Vzc2lvbkdyYWNlVW50aWwuZ2V0KGlkKSA/PyAwO1xuICAgICAgaWYgKGdyYWNlVW50aWwgPiBub3cpIGNvbnRpbnVlO1xuICAgICAgaWYgKGdyYWNlVW50aWwgIT09IDApIHtcbiAgICAgICAgaW1wb3J0ZWRTZXNzaW9uR3JhY2VVbnRpbC5kZWxldGUoaWQpO1xuICAgICAgfVxuICAgICAgaWYgKGFnZSA8PSBTRVNTSU9OX1NUQUxFX01TKSBjb250aW51ZTtcbiAgICAgIHNlc3Npb24uc3RhdHVzID0gJ2VuZGVkJztcbiAgICAgIG5hbWVQb29sLnJlbGVhc2UoaWQpO1xuICAgICAgbG9nZ2VyLmluZm8oJ1tJbmdlc3RSb3V0ZXNdIFJlYXBlZCBzdGFsZSBzZXNzaW9uJywge1xuICAgICAgICBkaXNwbGF5TmFtZTogc2Vzc2lvbi5kaXNwbGF5TmFtZSwgc2Vzc2lvbklkOiBpZCwgcGlkOiBzZXNzaW9uLnBpZCxcbiAgICAgICAgbGFzdEhlYXJ0YmVhdEFnbzogYCR7TWF0aC5yb3VuZChhZ2UgLyAxMDAwKX1zYCxcbiAgICAgICAgYWN0aXZlU2Vzc2lvbnM6IEFycmF5LmZyb20oc2Vzc2lvbnMudmFsdWVzKCkpLmZpbHRlcihzID0+IHMuc3RhdHVzID09PSAnYWN0aXZlJykubGVuZ3RoIC0gMSxcbiAgICAgIH0pO1xuICAgICAgYnJvYWRjYXN0cy5zZXNzaW9uQnJvYWRjYXN0Py4oc2Vzc2lvbik7XG4gICAgfVxuICB9XG5cbiAgLyoqIERlbGV0ZSBlbmRlZCBzZXNzaW9ucyB0byBib3VuZCBtZW1vcnkgKCMxODcwKS4gKi9cbiAgZnVuY3Rpb24gcHVyZ2VTdGFsZUVudHJpZXMobm93OiBudW1iZXIpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IFtpZCwgc2Vzc2lvbl0gb2Ygc2Vzc2lvbnMpIHtcbiAgICAgIGlmIChzZXNzaW9uLnN0YXR1cyA9PT0gJ2VuZGVkJyAmJiBub3cgLSBuZXcgRGF0ZShzZXNzaW9uLmxhc3RIZWFydGJlYXQpLmdldFRpbWUoKSA+IEVOREVEX1BVUkdFX01TKSB7XG4gICAgICAgIGltcG9ydGVkU2Vzc2lvbkdyYWNlVW50aWwuZGVsZXRlKGlkKTtcbiAgICAgICAgc2Vzc2lvbnMuZGVsZXRlKGlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCByZWFwZXJJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIHJlYXBTdGFsZVNlc3Npb25zKG5vdyk7XG4gICAgcHVyZ2VTdGFsZUVudHJpZXMobm93KTtcbiAgfSwgUkVBUEVSX0lOVEVSVkFMX01TKTtcbiAgcmVhcGVySW50ZXJ2YWwudW5yZWYoKTtcblxuICBmdW5jdGlvbiBnZXRTZXNzaW9ucygpOiBTZXNzaW9uSW5mb1tdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShzZXNzaW9ucy52YWx1ZXMoKSkuZmlsdGVyKHMgPT4gcy5zdGF0dXMgPT09ICdhY3RpdmUnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGltcG9ydFNlc3Npb25zKGltcG9ydGVkU2Vzc2lvbnM6IFNlc3Npb25JbmZvW10pOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGZvciAoY29uc3QgaW1wb3J0ZWQgb2YgaW1wb3J0ZWRTZXNzaW9ucykge1xuICAgICAgaWYgKGltcG9ydGVkLnN0YXR1cyAhPT0gJ2FjdGl2ZScpIGNvbnRpbnVlO1xuICAgICAgaWYgKGltcG9ydGVkLmlzTGVhZGVyIHx8IGltcG9ydGVkLmtpbmQgPT09ICdjb25zb2xlJykgY29udGludWU7XG4gICAgICBpZiAoa2lsbGVkU2Vzc2lvbnMuaGFzKGltcG9ydGVkLnNlc3Npb25JZCkgfHwgcGVuZGluZ0tpbGxzLmhhcyhpbXBvcnRlZC5zZXNzaW9uSWQpKSBjb250aW51ZTtcblxuICAgICAgY29uc3Qgbm9ybWFsaXplZFNlc3Npb25JZCA9IG5vcm1hbGl6ZUlucHV0KGltcG9ydGVkLnNlc3Npb25JZCk7XG4gICAgICBjb25zdCBleGlzdGluZyA9IHNlc3Npb25zLmdldChub3JtYWxpemVkU2Vzc2lvbklkKTtcbiAgICAgIGlmIChleGlzdGluZz8uaXNMZWFkZXIgfHwgZXhpc3Rpbmc/LmtpbmQgPT09ICdjb25zb2xlJykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGlzcGxheU5hbWUgPSBpbXBvcnRlZC5kaXNwbGF5TmFtZVxuICAgICAgICA/IG5hbWVQb29sLmFkb3B0KG5vcm1hbGl6ZWRTZXNzaW9uSWQsIGltcG9ydGVkLmRpc3BsYXlOYW1lKVxuICAgICAgICA6IG5hbWVQb29sLmFzc2lnbihub3JtYWxpemVkU2Vzc2lvbklkKTtcbiAgICAgIGNvbnN0IGNvbG9yID0gaW1wb3J0ZWQuY29sb3IgfHwgbmFtZVBvb2wuZ2V0Q29sb3Iobm9ybWFsaXplZFNlc3Npb25JZCkgfHwgJyMzYjgyZjYnO1xuICAgICAgY29uc3QgbWVyZ2VkOiBTZXNzaW9uSW5mbyA9IHtcbiAgICAgICAgc2Vzc2lvbklkOiBub3JtYWxpemVkU2Vzc2lvbklkLFxuICAgICAgICBkaXNwbGF5TmFtZSxcbiAgICAgICAgY29sb3IsXG4gICAgICAgIHBpZDogaW1wb3J0ZWQucGlkIHx8IGV4aXN0aW5nPy5waWQgfHwgMCxcbiAgICAgICAgc3RhcnRlZEF0OiBpbXBvcnRlZC5zdGFydGVkQXQgfHwgZXhpc3Rpbmc/LnN0YXJ0ZWRBdCB8fCBuZXcgRGF0ZShub3cpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGxhc3RIZWFydGJlYXQ6IGltcG9ydGVkLmxhc3RIZWFydGJlYXQgfHwgZXhpc3Rpbmc/Lmxhc3RIZWFydGJlYXQgfHwgbmV3IERhdGUobm93KS50b0lTT1N0cmluZygpLFxuICAgICAgICBzdGF0dXM6ICdhY3RpdmUnLFxuICAgICAgICBpc0xlYWRlcjogZmFsc2UsXG4gICAgICAgIGF1dGhlbnRpY2F0ZWQ6IGltcG9ydGVkLmF1dGhlbnRpY2F0ZWQgPz8gZXhpc3Rpbmc/LmF1dGhlbnRpY2F0ZWQgPz8gZmFsc2UsXG4gICAgICAgIGtpbmQ6ICdtY3AnLFxuICAgICAgICBzZXJ2ZXJWZXJzaW9uOiBub3JtYWxpemVTZXJ2ZXJWZXJzaW9uKGltcG9ydGVkLnNlcnZlclZlcnNpb24gfHwgZXhpc3Rpbmc/LnNlcnZlclZlcnNpb24pLFxuICAgICAgICBjb25zb2xlUHJvdG9jb2xWZXJzaW9uOiBub3JtYWxpemVDb25zb2xlUHJvdG9jb2xWZXJzaW9uKFxuICAgICAgICAgIGltcG9ydGVkLmNvbnNvbGVQcm90b2NvbFZlcnNpb24gPz8gZXhpc3Rpbmc/LmNvbnNvbGVQcm90b2NvbFZlcnNpb24sXG4gICAgICAgICksXG4gICAgICB9O1xuXG4gICAgICBzZXNzaW9ucy5zZXQobm9ybWFsaXplZFNlc3Npb25JZCwgbWVyZ2VkKTtcbiAgICAgIGltcG9ydGVkU2Vzc2lvbkdyYWNlVW50aWwuc2V0KG5vcm1hbGl6ZWRTZXNzaW9uSWQsIG5vdyArIFRBS0VPVkVSX0lNUE9SVEVEX1NFU1NJT05fR1JBQ0VfTVMpO1xuICAgICAgYnJvYWRjYXN0cy5zZXNzaW9uQnJvYWRjYXN0Py4obWVyZ2VkKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWdpc3RlckxlYWRlclNlc3Npb24oc2Vzc2lvbklkOiBzdHJpbmcsIHBpZDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgZGlzcGxheU5hbWUgPSBuYW1lUG9vbC5hc3NpZ24oc2Vzc2lvbklkLCB0cnVlKTtcbiAgICBjb25zdCBjb2xvciA9IG5hbWVQb29sLmdldENvbG9yKHNlc3Npb25JZCkgPz8gJyMzYjgyZjYnO1xuICAgIHNlc3Npb25zLnNldChzZXNzaW9uSWQsIHtcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIGRpc3BsYXlOYW1lLFxuICAgICAgY29sb3IsXG4gICAgICBwaWQsXG4gICAgICBzdGFydGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGxhc3RIZWFydGJlYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHN0YXR1czogJ2FjdGl2ZScsXG4gICAgICBpc0xlYWRlcjogdHJ1ZSxcbiAgICAgIGF1dGhlbnRpY2F0ZWQ6IHRydWUsXG4gICAgICBraW5kOiAnbWNwJyxcbiAgICAgIHNlcnZlclZlcnNpb246IFBBQ0tBR0VfVkVSU0lPTixcbiAgICAgIGNvbnNvbGVQcm90b2NvbFZlcnNpb246IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTixcbiAgICB9KTtcbiAgICBsb2dnZXIuaW5mbygnW0luZ2VzdFJvdXRlc10gTGVhZGVyIHNlc3Npb24gcmVnaXN0ZXJlZCcsIHsgZGlzcGxheU5hbWUsIHNlc3Npb25JZCwgcGlkLCBjb2xvciB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciB0aGUgd2ViIGNvbnNvbGUgaXRzZWxmIGFzIGEgc2Vzc2lvbiAoIzE4MDUpLiBFbnN1cmVzIHRoZVxuICAgKiBzZXNzaW9uIGluZGljYXRvciBhbHdheXMgc2hvd3MgYXQgbGVhc3Qgb25lIGVudHJ5IOKAlCB0aGUgY29uc29sZSB0aGVcbiAgICogdXNlciBpcyBjdXJyZW50bHkgbG9va2luZyBhdC5cbiAgICovXG4gIGZ1bmN0aW9uIHJlZ2lzdGVyQ29uc29sZVNlc3Npb24oKTogdm9pZCB7XG4gICAgY29uc3QgY29uc29sZUlkID0gYGNvbnNvbGUtJHtwcm9jZXNzLnBpZH1gO1xuICAgIGlmIChzZXNzaW9ucy5oYXMoY29uc29sZUlkKSkgcmV0dXJuO1xuICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gJ1dlYiBDb25zb2xlJztcbiAgICBzZXNzaW9ucy5zZXQoY29uc29sZUlkLCB7XG4gICAgICBzZXNzaW9uSWQ6IGNvbnNvbGVJZCxcbiAgICAgIGRpc3BsYXlOYW1lLFxuICAgICAgY29sb3I6ICcjNjM2NmYxJywgLy8gaW5kaWdvIOKAlCBkaXN0aW5jdCBmcm9tIHB1cHBldCBncmVlbnMvYmx1ZXNcbiAgICAgIHBpZDogcHJvY2Vzcy5waWQsXG4gICAgICBzdGFydGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGxhc3RIZWFydGJlYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHN0YXR1czogJ2FjdGl2ZScsXG4gICAgICBpc0xlYWRlcjogZmFsc2UsXG4gICAgICBhdXRoZW50aWNhdGVkOiB0cnVlLFxuICAgICAga2luZDogJ2NvbnNvbGUnLFxuICAgICAgc2VydmVyVmVyc2lvbjogUEFDS0FHRV9WRVJTSU9OLFxuICAgICAgY29uc29sZVByb3RvY29sVmVyc2lvbjogQ09OU09MRV9QUk9UT0NPTF9WRVJTSU9OLFxuICAgIH0pO1xuICAgIGxvZ2dlci5pbmZvKCdbSW5nZXN0Um91dGVzXSBDb25zb2xlIHNlc3Npb24gcmVnaXN0ZXJlZCcsIHsgc2Vzc2lvbklkOiBjb25zb2xlSWQsIHBpZDogcHJvY2Vzcy5waWQgfSk7XG4gIH1cblxuICByZXR1cm4geyByb3V0ZXIsIGdldFNlc3Npb25zLCBpbXBvcnRTZXNzaW9ucywgcmVnaXN0ZXJMZWFkZXJTZXNzaW9uLCByZWdpc3RlckNvbnNvbGVTZXNzaW9uIH07XG59XG4iXX0=
@@ -45,6 +45,12 @@ export declare class SessionNamePool {
45
45
  * @param isLeader - If true, follower-only names (e.g., Punch) are excluded
46
46
  */
47
47
  assign(sessionId: string, isLeader?: boolean): string;
48
+ /**
49
+ * Preserve an existing human-facing assignment during leadership handoff.
50
+ * If the requested name is already taken by another live session, the pool
51
+ * falls back to normal assignment logic rather than creating a duplicate.
52
+ */
53
+ adopt(sessionId: string, name: string, isLeader?: boolean): string;
48
54
  /**
49
55
  * Release a name back to the pool with a cooldown period.
50
56
  */
@@ -1 +1 @@
1
- {"version":3,"file":"SessionNames.d.ts","sourceRoot":"","sources":["../../../src/web/console/SessionNames.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAmF7C,CAAC;AAiBF;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAqD5C,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AA8ED;;GAEG;AACH,qBAAa,eAAe;IAC1B,oEAAoE;IACpE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IACtD,uCAAuC;IACvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA6B;IAC3D,0CAA0C;IAC1C,OAAO,CAAC,QAAQ,CAAuB;IAEvC;;;;;OAKG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,UAAQ,GAAG,MAAM;IAuCnD;;OAEG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAehC;;OAEG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI9C;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAK/C;;OAEG;IACH,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAI7B,OAAO,CAAC,cAAc;CAIvB"}
1
+ {"version":3,"file":"SessionNames.d.ts","sourceRoot":"","sources":["../../../src/web/console/SessionNames.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAmF7C,CAAC;AAiBF;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAqD5C,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AA8ED;;GAEG;AACH,qBAAa,eAAe;IAC1B,oEAAoE;IACpE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IACtD,uCAAuC;IACvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA6B;IAC3D,0CAA0C;IAC1C,OAAO,CAAC,QAAQ,CAAuB;IAEvC;;;;;OAKG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,UAAQ,GAAG,MAAM;IAuCnD;;;;OAIG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,UAAQ,GAAG,MAAM;IAiBhE;;OAEG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAehC;;OAEG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI9C;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAK/C;;OAEG;IACH,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAI7B,OAAO,CAAC,cAAc;CAIvB"}
@@ -279,6 +279,25 @@ export class SessionNamePool {
279
279
  logger.warn(`[SessionNames] Name pool exhausted, using fallback '${fallback}' for ${sessionId}`);
280
280
  return fallback;
281
281
  }
282
+ /**
283
+ * Preserve an existing human-facing assignment during leadership handoff.
284
+ * If the requested name is already taken by another live session, the pool
285
+ * falls back to normal assignment logic rather than creating a duplicate.
286
+ */
287
+ adopt(sessionId, name, isLeader = false) {
288
+ const existing = this.assigned.get(sessionId);
289
+ if (existing)
290
+ return existing;
291
+ this.flushCooldowns();
292
+ if (!this.nameToSession.has(name) && !(isLeader && FOLLOWER_ONLY_NAMES.has(name))) {
293
+ this.assigned.set(sessionId, name);
294
+ this.nameToSession.set(name, sessionId);
295
+ this.cooldown = this.cooldown.filter(entry => entry.name !== name);
296
+ logger.debug(`[SessionNames] Adopted '${name}' for ${sessionId}`);
297
+ return name;
298
+ }
299
+ return this.assign(sessionId, isLeader);
300
+ }
282
301
  /**
283
302
  * Release a name back to the pool with a cooldown period.
284
303
  */
@@ -318,4 +337,4 @@ export class SessionNamePool {
318
337
  this.cooldown = this.cooldown.filter(c => (now - c.releasedAt) < NAME_COOLDOWN_MS);
319
338
  }
320
339
  }
321
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2Vzc2lvbk5hbWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dlYi9jb25zb2xlL1Nlc3Npb25OYW1lcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBc0I7SUFDakQsd0JBQXdCO0lBQ3hCLE9BQU87SUFDUCxNQUFNO0lBQ04sV0FBVztJQUNYLFlBQVk7SUFDWixZQUFZO0lBQ1osU0FBUztJQUNULFVBQVU7SUFFVix1QkFBdUI7SUFDdkIsUUFBUTtJQUNSLE9BQU87SUFDUCxRQUFRO0lBQ1IsT0FBTztJQUNQLFNBQVM7SUFDVCxPQUFPO0lBQ1AsU0FBUztJQUNULFNBQVM7SUFFVCx3QkFBd0I7SUFDeEIsT0FBTztJQUNQLE9BQU87SUFFUCxrQkFBa0I7SUFDbEIsT0FBTztJQUNQLFdBQVc7SUFFWCxnQkFBZ0I7SUFDaEIsUUFBUTtJQUNSLE1BQU07SUFDTixPQUFPO0lBQ1AsTUFBTTtJQUNOLE9BQU87SUFFUCwwQkFBMEI7SUFDMUIsVUFBVTtJQUNWLFVBQVU7SUFDVixRQUFRO0lBQ1IsTUFBTTtJQUVOLHlCQUF5QjtJQUN6QixTQUFTO0lBQ1QsUUFBUTtJQUNSLFdBQVc7SUFDWCxZQUFZO0lBQ1osV0FBVztJQUVYLHVCQUF1QjtJQUN2QixPQUFPO0lBQ1AsU0FBUztJQUNULFFBQVE7SUFDUixRQUFRO0lBRVIsd0JBQXdCO0lBQ3hCLFlBQVk7SUFDWixjQUFjO0lBQ2QsV0FBVztJQUNYLFdBQVc7SUFFWCx3QkFBd0I7SUFDeEIsTUFBTTtJQUVOLGVBQWU7SUFDZixPQUFPO0lBQ1AsT0FBTztJQUVQLGdCQUFnQjtJQUNoQixRQUFRO0lBQ1IsS0FBSztJQUNMLFNB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SUFBSSxVQUFVLFNBQVMsY0FBYyxnQkFBZ0IsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQzdHLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU8sQ0FBQyxTQUFpQjtRQUN2QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNILFFBQVEsQ0FBQyxTQUFpQjtRQUN4QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUMvRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNO1FBQ0osT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVPLGNBQWM7UUFDcEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQztJQUNyRixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZyaWVuZGx5IHNlc3Npb24gbmFtZXMgZHJhd24gZnJvbSBmYW1vdXMgcHVwcGV0cywgbWFyaW9uZXR0ZXMsXG4gKiBhbmQgcHVwcGV0IGNoYXJhY3RlcnMgdGhyb3VnaG91dCBoaXN0b3J5LlxuICpcbiAqIE5hbWVzIGFyZSBhc3NpZ25lZCBmcm9tIGEgcG9vbCBhbmQgcmV0dXJuZWQgYWZ0ZXIgYSBjb29sZG93biBwZXJpb2RcbiAqIHdoZW4gc2Vzc2lvbnMgZW5kLiBUaGlzIGtlZXBzIHRoZSBhY3RpdmUgc2Vzc2lvbiBsaXN0IGh1bWFuLXJlYWRhYmxlXG4gKiBhbmQgb24tYnJhbmQgZm9yIERvbGxob3VzZU1DUC5cbiAqXG4gKiBAc2luY2UgdjIuMS4wIOKAlCBJc3N1ZSAjMTcwMFxuICovXG5cbmltcG9ydCB7IHJhbmRvbUludCB9IGZyb20gJ25vZGU6Y3J5cHRvJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5cbi8qKlxuICogRmFtb3VzIHB1cHBldHMsIG1hcmlvbmV0dGVzLCBhbmQgcHVwcGV0IGNoYXJhY3RlcnMgZnJvbSBhcm91bmQgdGhlIHdvcmxkLlxuICogT3JkZXIgZG9lc24ndCBtYXR0ZXIg4oCUIHRoZSBwb29sIGlzIHNodWZmbGVkIG9uIHN0YXJ0dXAuXG4gKi9cbmV4cG9ydCBjb25zdCBBTExfUFVQUEVUX05BTUVTOiByZWFkb25seSBzdHJpbmdbXSA9IFtcbiAgLy8gQ2xhc3NpYyAmIHRyYWRpdGlvbmFsXG4gICdQdW5jaCcsXG4gICdKdWR5JyxcbiAgJ1Bpbm9jY2hpbycsXG4gICdQZXRyb3VjaGthJyxcbiAgJ1B1bGNpbmVsbGEnLFxuICAnR3VpZ25vbCcsXG4gICdLYXNwZXJsZScsXG5cbiAgLy8gTXVwcGV0cyAmIEppbSBIZW5zb25cbiAgJ0tlcm1pdCcsXG4gICdQaWdneScsXG4gICdGb3p6aWUnLFxuICAnR29uem8nLFxuICAnU2Nvb3RlcicsXG4gICdSb3dsZicsXG4gICdXYWxkb3JmJyxcbiAgJ1N0YXRsZXInLFxuXG4gIC8vIEt1a2xhLCBGcmFuIGFuZCBPbGxpZVxuICAnS3VrbGEnLFxuICAnT2xsaWUnLFxuXG4gIC8vIEhvd2R5IERvb2R5IGVyYVxuICAnSG93ZHknLFxuICAnQ2xhcmFiZWxsJyxcblxuICAvLyBTZXNhbWUgU3RyZWV0XG4gICdHcm92ZXInLFxuICAnRWxtbycsXG4gICdFcm5pZScsXG4gICdCZXJ0JyxcbiAgJ09zY2FyJyxcblxuICAvLyBWZW50cmlsb3F1aXN0ICYgdmFyaWV0eVxuICAnTW9ydGltZXInLFxuICAnTGFtYmNob3AnLFxuICAnTWFkYW1lJyxcbiAgJ1RvcG8nLFxuXG4gIC8vIEludGVybmF0aW9uYWwgcHVwcGV0cnlcbiAgJ0J1bnJha3UnLFxuICAnV2F5YW5nJyxcbiAgJ1BldHJ1c2hrYScsXG4gICdIYW5uZXNjaGVuJyxcbiAgJ1ZpdGV6c2xhdicsXG5cbiAgLy8gTW9kZXJuICYgcG9wIGN1bHR1cmVcbiAgJ1NhbGVtJyxcbiAgJ1RyaXVtcGgnLFxuICAnUGVhbnV0JyxcbiAgJ0FjaG1lZCcsXG5cbiAgLy8gTWFyaW9uZXR0ZSB0cmFkaXRpb25zXG4gICdGYW50b2NjaW5pJyxcbiAgJ1NhbHRpbWJhbnF1ZScsXG4gICdCdXJhdHRpbm8nLFxuICAnSGFybGVxdWluJyxcblxuICAvLyBEb2xsaG91c2UgKFRWIHNlcmllcylcbiAgJ0VjaG8nLFxuXG4gIC8vIEluc2lkZSBqb2tlc1xuICAnU3Bpa2UnLFxuICAnQW5nZWwnLFxuXG4gIC8vIENsYXNzaWMgZG9sbHNcbiAgJ0JhcmJpZScsXG4gICdLZW4nLFxuICAnU2tpcHBlcicsXG4gICdNaWRnZScsXG4gICdDaHJpc3RpZScsXG4gICdBbm5pZScsXG4gICdBbmR5JyxcbiAgJ0NhdGh5JyxcbiAgJ1RlZGR5JyxcbiAgJ1hhdmllcicsXG4gICdTdHJhd2JlcnJ5JyxcbiAgJ0JseXRoZScsXG4gICdHaW5ueScsXG4gICdCZXRzeScsXG4gICdNYWRlbGluZScsXG5dO1xuXG4vKiogTmFtZXMgdGhhdCBjYW4gbmV2ZXIgYmUgYXNzaWduZWQgdG8gYSBsZWFkZXIgc2Vzc2lvbiAqL1xuY29uc3QgRk9MTE9XRVJfT05MWV9OQU1FUyA9IG5ldyBTZXQoWydQdW5jaCddKTtcblxuLyoqIEZpc2hlci1ZYXRlcyBzaHVmZmxlIHVzaW5nIGNyeXB0by5yYW5kb21JbnQgKHVuYmlhc2VkLCBubyBtb2R1bG8pICovXG5mdW5jdGlvbiBzaHVmZmxlQXJyYXk8VD4oYXJyOiBUW10pOiBUW10ge1xuICBmb3IgKGxldCBpID0gYXJyLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcbiAgICBjb25zdCBqID0gcmFuZG9tSW50KGkgKyAxKTtcbiAgICBbYXJyW2ldLCBhcnJbal1dID0gW2FycltqXSwgYXJyW2ldXTtcbiAgfVxuICByZXR1cm4gYXJyO1xufVxuXG4vKiogU2h1ZmZsZWQgY29weSBvZiB0aGUgbmFtZSBwb29sIOKAlCByYW5kb21pemVkIG9uIGVhY2ggcHJvY2VzcyBzdGFydCAqL1xuY29uc3QgUFVQUEVUX05BTUVTOiBzdHJpbmdbXSA9IHNodWZmbGVBcnJheShbLi4uQUxMX1BVUFBFVF9OQU1FU10pO1xuXG4vKipcbiAqIEljb25pYyBhdHRpcmUgYW5kIGFjY2Vzc29yaWVzIGRyYXduIGZyb20gZmFtb3VzIGRvbGxzLCBwdXBwZXRzLCBhbmRcbiAqIHRoZWF0cmljYWwgY2hhcmFjdGVycyB0aHJvdWdob3V0IGhpc3RvcnkuIFVzZWQgdG8gbmFtZSBjb25zb2xlIHRva2Vuc1xuICogc28gdGhleSBuZXZlciBjb2xsaWRlIHdpdGggdGhlIHNlc3Npb24gcHVwcGV0LW5hbWUgcG9vbCAoIzE4NzEpLlxuICpcbiAqIE5hbWVzIGV2b2tlIGNvc3R1bWUgcGllY2VzIOKAlCBhIHRva2VuIGlzIHNvbWV0aGluZyB5b3Ugd2VhciBvciBjYXJyeSxcbiAqIG5vdCBhIHBlcnNvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IEFMTF9UT0tFTl9OQU1FUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbXG4gIC8vIFZpY3RvcmlhbiAmIHRoZWF0cmljYWxcbiAgJ1RvcCBIYXQnLFxuICAnTW9ub2NsZScsXG4gICdUcmVuY2ggQ29hdCcsXG4gICdPcGVyYSBDYXBlJyxcbiAgJ09wZXJhIEdsb3ZlcycsXG4gICdWZWx2ZXQgQ2xvYWsnLFxuICAnTGFjZSBDb2xsYXInLFxuICAnU2lsayBDcmF2YXQnLFxuICAnV2Fpc3Rjb2F0JyxcbiAgJ0dpbHQgQnV0dG9uJyxcblxuICAvLyBQaGFudG9tLCBtYXNrcywgbXlzdGVyeVxuICAnSGFsZiBNYXNrJyxcbiAgJ0RvbWlubyBNYXNrJyxcbiAgJ0ZlYXRoZXJlZCBNYXNrJyxcblxuICAvLyBQdW5jaCAmIEp1ZHkgLyBIYXJsZXF1aW5cbiAgJ0plc3RlciBCZWxscycsXG4gICdEaWFtb25kIFN1aXQnLFxuICAnQmVsbCBDYXAnLFxuICAnU2xhcHN0aWNrJyxcbiAgJ1JlZCBOb3NlJyxcblxuICAvLyBQdXBwZXQgdHJhZGl0aW9uc1xuICAnTWFyaW9uZXR0ZSBTdHJpbmdzJyxcbiAgJ0NyYWNrZWQgUG9yY2VsYWluJyxcbiAgJ1BhcGllci1Nw6JjaMOpJyxcblxuICAvLyBDbGFzc2ljIGRvbGxzICYgY2hhcmFjdGVyc1xuICAnUGluayBDb3J2ZXR0ZScsXG4gICdSZWQgWWFybiBIYWlyJyxcbiAgJ1NhaWxvciBTdWl0JyxcbiAgJ1llbGxvdyBIYXQnLFxuICAnUnVieSBTbGlwcGVycycsXG4gICdHbGFzcyBTbGlwcGVyJyxcbiAgJ0JsdWUgUmliYm9uJyxcbiAgJ1N0cmlwZWQgU3RvY2tpbmdzJyxcblxuICAvLyBXaXphcmQgLyB3aXRjaCAvIGZhbnRhc3lcbiAgJ1BvaW50ZWQgSGF0JyxcbiAgJ0Jyb29tc3RpY2snLFxuICAnU2lsdmVyIFdhbmQnLFxuICAnVGluIENyb3duJyxcbiAgJ1N0cmF3IEhhdCcsXG5cbiAgLy8gQWR2ZW50dXJlICYgbXlzdGVyeVxuICAnRGVlcnN0YWxrZXInLFxuICAnTWFnbmlmeWluZyBHbGFzcycsXG4gICdGZWF0aGVyZWQgQ2FwJyxcbiAgJ1NpbHZlciBCdWNrbGUnLFxuICAnV2lja2VyIEJhc2tldCcsXG5dO1xuXG4vKipcbiAqIFBpY2sgYSByYW5kb20gdG9rZW4gbmFtZSBmcm9tIHRoZSBhdHRpcmUgcG9vbC5cbiAqIFVzZWQgYnkgdGhlIGNvbnNvbGUgdG9rZW4gbW9kdWxlIHRvIG5hbWUgbmV3bHkgY3JlYXRlZCB0b2tlbnMgKCMxODcxKS5cbiAqIERyYXduIGZyb20gYSBzZXBhcmF0ZSBwb29sIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIHNlc3Npb24gcHVwcGV0IG5hbWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGlja1JhbmRvbVRva2VuTmFtZSgpOiBzdHJpbmcge1xuICByZXR1cm4gQUxMX1RPS0VOX05BTUVTW3JhbmRvbUludChBTExfVE9LRU5fTkFNRVMubGVuZ3RoKV07XG59XG5cbi8qKlxuICogQ2Fub25pY2FsIGNvbG9ycyBmb3IgZWFjaCBwdXBwZXQgY2hhcmFjdGVyLlxuICogQWRqdXN0ZWQgZnJvbSB0cnVlIGNhbm9uaWNhbCBjb2xvcnMgZm9yIFVJIHJlYWRhYmlsaXR5IGluIGJvdGggbGlnaHQvZGFyayB0aGVtZXMuXG4gKi9cbmNvbnN0IFBVUFBFVF9DT0xPUlM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICdQdW5jaCc6ICAgICAgICAnI0RDMTQzQycsIC8vIGNyaW1zb24gcmVkIGNvc3R1bWVcbiAgJ0p1ZHknOiAgICAgICAgICcjMUU5MEZGJywgLy8gYmx1ZSBkcmVzc1xuICAnUGlub2NjaGlvJzogICAgJyNEQUE1MjAnLCAvLyBnb2xkZW5yb2QgKHdvb2RlbiwgeWVsbG93IGhhdClcbiAgJ1BldHJvdWNoa2EnOiAgICcjQjBCRUM1JywgLy8gYmx1ZS1ncmF5ICh3aGl0ZSBjb3N0dW1lLCBhZGp1c3RlZCBmb3IgdmlzaWJpbGl0eSlcbiAgJ1B1bGNpbmVsbGEnOiAgICcjOTBBNEFFJywgLy8gZ3JheS1ibHVlICh3aGl0ZSBjb3N0dW1lLCBhZGp1c3RlZClcbiAgJ0d1aWdub2wnOiAgICAgICcjOEI0NTEzJywgLy8gc2FkZGxlIGJyb3duXG4gICdLYXNwZXJsZSc6ICAgICAnI0ZGMDAwMCcsIC8vIHJlZCBwb2ludGVkIGNhcFxuICAnS2VybWl0JzogICAgICAgJyM0Q0FGNTAnLCAvLyBncmVlbiBmcm9nXG4gICdQaWdneSc6ICAgICAgICAnI0U5MUU4QycsIC8vIGhvdCBwaW5rIChnbGFtb3JvdXMgcGlnKVxuICAnRm96emllJzogICAgICAgJyNDQzc3MjInLCAvLyBvY2hyZSBicm93biBiZWFyXG4gICdHb256byc6ICAgICAgICAnIzQxNjlFMScsIC8vIHJveWFsIGJsdWVcbiAgJ1Njb290ZXInOiAgICAgICcjRkY4QzAwJywgLy8gZGFyayBvcmFuZ2VcbiAgJ1Jvd2xmJzogICAgICAgICcjOEI2OTE0JywgLy8gZGFyayBnb2xkZW5yb2QgYnJvd24gZG9nXG4gICdXYWxkb3JmJzogICAgICAnIzU1NkIyRicsIC8vIGRhcmsgb2xpdmUgZ3JlZW5cbiAgJ1N0YXRsZXInOiAgICAgICcjNzA4MDkwJywgLy8gc2xhdGUgZ3JheVxuICAnS3VrbGEnOiAgICAgICAgJyNGRjAwMDAnLCAvLyByZWQgbm9zZSBhbmQgY29zdHVtZVxuICAnT2xsaWUnOiAgICAgICAgJyMyMjhCMjInLCAvLyBmb3Jlc3QgZ3JlZW4gZHJhZ29uXG4gICdIb3dkeSc6ICAgICAgICAnI0UyNzI1QicsIC8vIHRlcnJhIGNvdHRhXG4gICdDbGFyYWJlbGwnOiAgICAnI0ZGQ0MwMCcsIC8vIGJyaWdodCB5ZWxsb3cgY2xvd25cbiAgJ0dyb3Zlcic6ICAgICAgICcjNDY4MkI0JywgLy8gc3RlZWwgYmx1ZVxuICAnRWxtbyc6ICAgICAgICAgJyNGRjI0MDAnLCAvLyBzY2FybGV0IHJlZFxuICAnRXJuaWUnOiAgICAgICAgJyNGNEE0NjAnLCAvLyBzYW5keSBicm93blxuICAnQmVydCc6ICAgICAgICAgJyNGRkQ3MDAnLCAvLyBnb2xkIHllbGxvd1xuICAnT3NjYXInOiAgICAgICAgJyM2QjhFMjMnLCAvLyBvbGl2ZSBkcmFiIGdyZWVuXG4gICdNb3J0aW1lcic6ICAgICAnI0RFQjg4NycsIC8vIGJ1cmx5d29vZFxuICAnTGFtYmNob3AnOiAgICAgJyNENEM1QTknLCAvLyB3YXJtIGNyZWFtIChhZGp1c3RlZCBmcm9tIHB1cmUgd2hpdGUpXG4gICdNYWRhbWUnOiAgICAgICAnIzgwMDA4MCcsIC8vIHB1cnBsZVxuICAnVG9wbyc6ICAgICAgICAgJyNBMEEwQTAnLCAvLyBzaWx2ZXIgZ3JheVxuICAnQnVucmFrdSc6ICAgICAgJyNCMjIyMjInLCAvLyBmaXJlYnJpY2sgcmVkXG4gICdXYXlhbmcnOiAgICAgICAnIzZCNDIyNicsIC8vIGRhcmsgbGVhdGhlciBicm93biAobGlnaHRlbmVkIGZvciB2aXNpYmlsaXR5KVxuICAnUGV0cnVzaGthJzogICAgJyNGRjQ1MDAnLCAvLyBvcmFuZ2UgcmVkXG4gICdIYW5uZXNjaGVuJzogICAnI0NENUM1QycsIC8vIGluZGlhbiByZWRcbiAgJ1ZpdGV6c2xhdic6ICAgICcjQjg4NjBCJywgLy8gZGFyayBnb2xkZW5yb2RcbiAgJ1NhbGVtJzogICAgICAgICcjNEE0QTRBJywgLy8gZGFyayBncmF5IChibGFjayBjYXQsIGxpZ2h0ZW5lZCBmb3IgdmlzaWJpbGl0eSlcbiAgJ1RyaXVtcGgnOiAgICAgICcjNkY0RTM3JywgLy8gY29mZmVlIGJyb3duXG4gICdQZWFudXQnOiAgICAgICAnIzkzNzBEQicsIC8vIG1lZGl1bSBwdXJwbGVcbiAgJ0FjaG1lZCc6ICAgICAgICcjQzhCRkE5JywgLy8gYm9uZS9wYXJjaG1lbnQgKGxpZ2h0ZW5lZCBmcm9tIGJlaWdlKVxuICAnRmFudG9jY2luaSc6ICAgJyNDNDFFM0EnLCAvLyBjYXJkaW5hbCByZWRcbiAgJ1NhbHRpbWJhbnF1ZSc6ICcjREFBNTIwJywgLy8gZ29sZGVucm9kXG4gICdCdXJhdHRpbm8nOiAgICAnI0QyNjkxRScsIC8vIGNob2NvbGF0ZSBicm93blxuICAnSGFybGVxdWluJzogICAgJyNFNjAwMjYnLCAvLyBkaWFtb25kIHJlZFxuICAnRWNobyc6ICAgICAgICAgJyM1QzYzNzAnLCAvLyBzbGF0ZSAoZGFyayBhdHRpcmUsIGxpZ2h0ZW5lZCBmb3IgdmlzaWJpbGl0eSlcbiAgJ1NwaWtlJzogICAgICAgICcjRThEQ0M4JywgLy8gcGxhdGludW0vYmxlYWNoIChsaWdodGVuZWQgZm9yIHJlYWRhYmlsaXR5KVxuICAnQW5nZWwnOiAgICAgICAgJyMzRDNEM0QnLCAvLyBjaGFyY29hbCAoYmxhY2sgZHVzdGVyLCBsaWdodGVuZWQgZm9yIHZpc2liaWxpdHkpXG5cbiAgLy8gQ2xhc3NpYyBkb2xsc1xuICAnQmFyYmllJzogICAgICAgJyNFOTFFOTAnLCAvLyBCYXJiaWUgcGlua1xuICAnS2VuJzogICAgICAgICAgJyM0QTkwRDknLCAvLyBLZW4gYmx1ZVxuICAnU2tpcHBlcic6ICAgICAgJyNGRjZCNkInLCAvLyBjb3JhbCByZWRcbiAgJ01pZGdlJzogICAgICAgICcjRTg3MDQwJywgLy8gd2FybSBhdWJ1cm5cbiAgJ0NocmlzdGllJzogICAgICcjQzA2MDMwJywgLy8gd2FybSBicm93blxuICAnQW5uaWUnOiAgICAgICAgJyNFMDMwMzAnLCAvLyBSYWdnZWR5IEFubiByZWQgeWFybiBoYWlyXG4gICdBbmR5JzogICAgICAgICAnIzMwNzBDMCcsIC8vIFJhZ2dlZHkgQW5keSBibHVlIHNhaWxvciBvdXRmaXRcbiAgJ0NhdGh5JzogICAgICAgICcjRDRBNTc0JywgLy8gQ2hhdHR5IENhdGh5IHZpbnRhZ2UgdGFuXG4gICdUZWRkeSc6ICAgICAgICAnI0EwNzg0QScsIC8vIFRlZGR5IFJ1eHBpbiBiZWFyIGJyb3duXG4gICdYYXZpZXInOiAgICAgICAnIzVBQUY0QScsIC8vIFhhdmllciBSb2JlcnRzIC8gQ2FiYmFnZSBQYXRjaCBncmVlblxuICAnU3RyYXdiZXJyeSc6ICAgJyNFODQ0NUEnLCAvLyBzdHJhd2JlcnJ5IHJlZC1waW5rXG4gICdCbHl0aGUnOiAgICAgICAnIzdCNjhFRScsIC8vIGJpZy1leWVkIHB1cnBsZVxuICAnR2lubnknOiAgICAgICAgJyM1QjlCRDUnLCAvLyBjbGFzc2ljIGJsdWUgZHJlc3NcbiAgJ0JldHN5JzogICAgICAgICcjREQ3Njk0JywgLy8gcm9zZSBwaW5rXG4gICdNYWRlbGluZSc6ICAgICAnI0ZGRDcwMCcsIC8vIHllbGxvdyBoYXRcbn07XG5cbi8qKiBDb29sZG93biBwZXJpb2QgYmVmb3JlIGEgcmVsZWFzZWQgbmFtZSBjYW4gYmUgcmV1c2VkIChtcykgKi9cbmNvbnN0IE5BTUVfQ09PTERPV05fTVMgPSA1ICogNjBfMDAwOyAvLyA1IG1pbnV0ZXNcblxuaW50ZXJmYWNlIENvb2xkb3duRW50cnkge1xuICBuYW1lOiBzdHJpbmc7XG4gIHJlbGVhc2VkQXQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBNYW5hZ2VzIGZyaWVuZGx5IHNlc3Npb24gbmFtZSBhc3NpZ25tZW50IGZyb20gdGhlIHB1cHBldCBuYW1lIHBvb2wuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZXNzaW9uTmFtZVBvb2wge1xuICAvKiogTmFtZXMgY3VycmVudGx5IGFzc2lnbmVkIHRvIGFjdGl2ZSBzZXNzaW9uczogc2Vzc2lvbklkIOKGkiBuYW1lICovXG4gIHByaXZhdGUgcmVhZG9ubHkgYXNzaWduZWQgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAvKiogUmV2ZXJzZSBsb29rdXA6IG5hbWUg4oaSIHNlc3Npb25JZCAqL1xuICBwcml2YXRlIHJlYWRvbmx5IG5hbWVUb1Nlc3Npb24gPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAvKiogTmFtZXMgaW4gY29vbGRvd24gYWZ0ZXIgc2Vzc2lvbiBlbmQgKi9cbiAgcHJpdmF0ZSBjb29sZG93bjogQ29vbGRvd25FbnRyeVtdID0gW107XG5cbiAgLyoqXG4gICAqIEFzc2lnbiBhIGZyaWVuZGx5IG5hbWUgdG8gYSBzZXNzaW9uLlxuICAgKiBSZXR1cm5zIGFuIGV4aXN0aW5nIGFzc2lnbm1lbnQgaWYgdGhlIHNlc3Npb24gYWxyZWFkeSBoYXMgb25lLlxuICAgKlxuICAgKiBAcGFyYW0gaXNMZWFkZXIgLSBJZiB0cnVlLCBmb2xsb3dlci1vbmx5IG5hbWVzIChlLmcuLCBQdW5jaCkgYXJlIGV4Y2x1ZGVkXG4gICAqL1xuICBhc3NpZ24oc2Vzc2lvbklkOiBzdHJpbmcsIGlzTGVhZGVyID0gZmFsc2UpOiBzdHJpbmcge1xuICAgIC8vIEFscmVhZHkgYXNzaWduZWQ/XG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmFzc2lnbmVkLmdldChzZXNzaW9uSWQpO1xuICAgIGlmIChleGlzdGluZykgcmV0dXJuIGV4aXN0aW5nO1xuXG4gICAgLy8gRmx1c2ggZXhwaXJlZCBjb29sZG93bnNcbiAgICB0aGlzLmZsdXNoQ29vbGRvd25zKCk7XG5cbiAgICAvLyBGaW5kIGFuIGF2YWlsYWJsZSBuYW1lLCByZXNwZWN0aW5nIGxlYWRlciByZXN0cmljdGlvbnNcbiAgICBjb25zdCBjb29sZG93bk5hbWVzID0gbmV3IFNldCh0aGlzLmNvb2xkb3duLm1hcChjID0+IGMubmFtZSkpO1xuICAgIGNvbnN0IGF2YWlsYWJsZU5hbWUgPSBQVVBQRVRfTkFNRVMuZmluZChcbiAgICAgIG5hbWUgPT4gIXRoaXMubmFtZVRvU2Vzc2lvbi5oYXMobmFtZSkgJiZcbiAgICAgICAgICAgICAgIWNvb2xkb3duTmFtZXMuaGFzKG5hbWUpICYmXG4gICAgICAgICAgICAgICEoaXNMZWFkZXIgJiYgRk9MTE9XRVJfT05MWV9OQU1FUy5oYXMobmFtZSkpXG4gICAgKTtcblxuICAgIGlmIChhdmFpbGFibGVOYW1lKSB7XG4gICAgICB0aGlzLmFzc2lnbmVkLnNldChzZXNzaW9uSWQsIGF2YWlsYWJsZU5hbWUpO1xuICAgICAgdGhpcy5uYW1lVG9TZXNzaW9uLnNldChhdmFpbGFibGVOYW1lLCBzZXNzaW9uSWQpO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBbU2Vzc2lvbk5hbWVzXSBBc3NpZ25lZCAnJHthdmFpbGFibGVOYW1lfScgdG8gJHtzZXNzaW9uSWR9YCk7XG4gICAgICByZXR1cm4gYXZhaWxhYmxlTmFtZTtcbiAgICB9XG5cbiAgICAvLyBBbGwgbmFtZXMgaW4gdXNlIG9yIGNvb2xpbmcgZG93biDigJQgdHJ5IGNvb2xkb3duIG5hbWVzIChvbGRlc3QgZmlyc3QpXG4gICAgaWYgKHRoaXMuY29vbGRvd24ubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgb2xkZXN0ID0gdGhpcy5jb29sZG93bi5zaGlmdCgpITtcbiAgICAgIHRoaXMuYXNzaWduZWQuc2V0KHNlc3Npb25JZCwgb2xkZXN0Lm5hbWUpO1xuICAgICAgdGhpcy5uYW1lVG9TZXNzaW9uLnNldChvbGRlc3QubmFtZSwgc2Vzc2lvbklkKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW1Nlc3Npb25OYW1lc10gQXNzaWduZWQgJyR7b2xkZXN0Lm5hbWV9JyB0byAke3Nlc3Npb25JZH0gKGVhcmx5IGNvb2xkb3duIHJlbGVhc2UpYCk7XG4gICAgICByZXR1cm4gb2xkZXN0Lm5hbWU7XG4gICAgfVxuXG4gICAgLy8gVHJ1bHkgZXhoYXVzdGVkIOKAlCBmYWxsIGJhY2sgdG8gdHJ1bmNhdGVkIHNlc3Npb24gSURcbiAgICBjb25zdCBmYWxsYmFjayA9IHNlc3Npb25JZC5zcGxpdCgnLScpWzFdIHx8IHNlc3Npb25JZC5zbGljZSgwLCA4KTtcbiAgICB0aGlzLmFzc2lnbmVkLnNldChzZXNzaW9uSWQsIGZhbGxiYWNrKTtcbiAgICBsb2dnZXIud2FybihgW1Nlc3Npb25OYW1lc10gTmFtZSBwb29sIGV4aGF1c3RlZCwgdXNpbmcgZmFsbGJhY2sgJyR7ZmFsbGJhY2t9JyBmb3IgJHtzZXNzaW9uSWR9YCk7XG4gICAgcmV0dXJuIGZhbGxiYWNrO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbGVhc2UgYSBuYW1lIGJhY2sgdG8gdGhlIHBvb2wgd2l0aCBhIGNvb2xkb3duIHBlcmlvZC5cbiAgICovXG4gIHJlbGVhc2Uoc2Vzc2lvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5hc3NpZ25lZC5nZXQoc2Vzc2lvbklkKTtcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcblxuICAgIHRoaXMuYXNzaWduZWQuZGVsZXRlKHNlc3Npb25JZCk7XG4gICAgdGhpcy5uYW1lVG9TZXNzaW9uLmRlbGV0ZShuYW1lKTtcblxuICAgIC8vIE9ubHkgY29vbGRvd24gcHVwcGV0IG5hbWVzLCBub3QgZmFsbGJhY2sgSURzXG4gICAgaWYgKFBVUFBFVF9OQU1FUy5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgdGhpcy5jb29sZG93bi5wdXNoKHsgbmFtZSwgcmVsZWFzZWRBdDogRGF0ZS5ub3coKSB9KTtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoYFtTZXNzaW9uTmFtZXNdIFJlbGVhc2VkICcke25hbWV9JyBmcm9tICR7c2Vzc2lvbklkfSAoY29vbGRvd24gJHtOQU1FX0NPT0xET1dOX01TIC8gMTAwMH1zKWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZnJpZW5kbHkgbmFtZSBmb3IgYSBzZXNzaW9uLCBvciB1bmRlZmluZWQgaWYgbm90IGFzc2lnbmVkLlxuICAgKi9cbiAgZ2V0TmFtZShzZXNzaW9uSWQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYXNzaWduZWQuZ2V0KHNlc3Npb25JZCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjYW5vbmljYWwgY29sb3IgZm9yIGFuIGFzc2lnbmVkIHNlc3Npb24gbmFtZS5cbiAgICovXG4gIGdldENvbG9yKHNlc3Npb25JZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5hc3NpZ25lZC5nZXQoc2Vzc2lvbklkKTtcbiAgICByZXR1cm4gbmFtZSA/IChQVVBQRVRfQ09MT1JTW25hbWVdID8/IHVuZGVmaW5lZCkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBjdXJyZW50IGFzc2lnbm1lbnRzLlxuICAgKi9cbiAgZ2V0QWxsKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgTWFwKHRoaXMuYXNzaWduZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaENvb2xkb3ducygpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuY29vbGRvd24gPSB0aGlzLmNvb2xkb3duLmZpbHRlcihjID0+IChub3cgLSBjLnJlbGVhc2VkQXQpIDwgTkFNRV9DT09MRE9XTl9NUyk7XG4gIH1cbn1cbiJdfQ==
340
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2Vzc2lvbk5hbWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dlYi9jb25zb2xlL1Nlc3Npb25OYW1lcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBc0I7SUFDakQsd0JBQXdCO0lBQ3hCLE9BQU87SUFDUCxNQUFNO0lBQ04sV0FBVztJQUNYLFlBQVk7SUFDWixZQUFZO0lBQ1osU0FBUztJQUNULFVBQVU7SUFFVix1QkFBdUI7SUFDdkIsUUFBUTtJQUNSLE9BQU87SUFDUCxRQUFRO0lBQ1IsT0FBTztJQUNQLFNBQVM7SUFDVCxPQUFPO0lBQ1AsU0FBUztJQUNULFNBQVM7SUFFVCx3QkFBd0I7SUFDeEIsT0FBTztJQUNQLE9BQU87SUFFUCxrQkFBa0I7SUFDbEIsT0FBTztJQUNQLFdBQVc7SUFFWCxnQkFBZ0I7SUFDaEIsUUFBUTtJQUNSLE1BQU07SUFDTixPQUFPO0lBQ1AsTUFBTTtJQUNOLE9BQU87SUFFUCwwQkFBMEI7SUFDMUIsVUFBVTtJQUNWLFVBQVU7SUFDVixRQUFRO0lBQ1IsTUFBTTtJQUVOLHlCQUF5QjtJQUN6QixTQUFTO0lBQ1QsUUFBUTtJQUNSLFdBQVc7SUFDWCxZQUFZO0lBQ1osV0FBVztJQUVYLHVCQUF1QjtJQUN2QixPQUFPO0lBQ1AsU0FBUztJQUNULFFBQVE7SUFDUixRQUFRO0lBRVIsd0JBQXdCO0lBQ3hCLFlBQVk7SUFDWixjQUFjO0lBQ2QsV0FBVztJQUNYLFdBQVc7SUFFWCx3QkFBd0I7SUFDeEIsTUFBTTtJQUVOLGVBQWU7SUFDZixPQUFPO0lBQ1AsT0FBTztJQUVQLGdCQUFnQjtJQUNoQixRQUFRO0lBQ1IsS0FBSztJQUNMLFNB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LENBQUMsU0FBaUI7UUFDeEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDL0QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTTtRQUNKLE9BQU8sSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFTyxjQUFjO1FBQ3BCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUM7SUFDckYsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGcmllbmRseSBzZXNzaW9uIG5hbWVzIGRyYXduIGZyb20gZmFtb3VzIHB1cHBldHMsIG1hcmlvbmV0dGVzLFxuICogYW5kIHB1cHBldCBjaGFyYWN0ZXJzIHRocm91Z2hvdXQgaGlzdG9yeS5cbiAqXG4gKiBOYW1lcyBhcmUgYXNzaWduZWQgZnJvbSBhIHBvb2wgYW5kIHJldHVybmVkIGFmdGVyIGEgY29vbGRvd24gcGVyaW9kXG4gKiB3aGVuIHNlc3Npb25zIGVuZC4gVGhpcyBrZWVwcyB0aGUgYWN0aXZlIHNlc3Npb24gbGlzdCBodW1hbi1yZWFkYWJsZVxuICogYW5kIG9uLWJyYW5kIGZvciBEb2xsaG91c2VNQ1AuXG4gKlxuICogQHNpbmNlIHYyLjEuMCDigJQgSXNzdWUgIzE3MDBcbiAqL1xuXG5pbXBvcnQgeyByYW5kb21JbnQgfSBmcm9tICdub2RlOmNyeXB0byc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXIuanMnO1xuXG4vKipcbiAqIEZhbW91cyBwdXBwZXRzLCBtYXJpb25ldHRlcywgYW5kIHB1cHBldCBjaGFyYWN0ZXJzIGZyb20gYXJvdW5kIHRoZSB3b3JsZC5cbiAqIE9yZGVyIGRvZXNuJ3QgbWF0dGVyIOKAlCB0aGUgcG9vbCBpcyBzaHVmZmxlZCBvbiBzdGFydHVwLlxuICovXG5leHBvcnQgY29uc3QgQUxMX1BVUFBFVF9OQU1FUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbXG4gIC8vIENsYXNzaWMgJiB0cmFkaXRpb25hbFxuICAnUHVuY2gnLFxuICAnSnVkeScsXG4gICdQaW5vY2NoaW8nLFxuICAnUGV0cm91Y2hrYScsXG4gICdQdWxjaW5lbGxhJyxcbiAgJ0d1aWdub2wnLFxuICAnS2FzcGVybGUnLFxuXG4gIC8vIE11cHBldHMgJiBKaW0gSGVuc29uXG4gICdLZXJtaXQnLFxuICAnUGlnZ3knLFxuICAnRm96emllJyxcbiAgJ0dvbnpvJyxcbiAgJ1Njb290ZXInLFxuICAnUm93bGYnLFxuICAnV2FsZG9yZicsXG4gICdTdGF0bGVyJyxcblxuICAvLyBLdWtsYSwgRnJhbiBhbmQgT2xsaWVcbiAgJ0t1a2xhJyxcbiAgJ09sbGllJyxcblxuICAvLyBIb3dkeSBEb29keSBlcmFcbiAgJ0hvd2R5JyxcbiAgJ0NsYXJhYmVsbCcsXG5cbiAgLy8gU2VzYW1lIFN0cmVldFxuICAnR3JvdmVyJyxcbiAgJ0VsbW8nLFxuICAnRXJuaWUnLFxuICAnQmVydCcsXG4gICdPc2NhcicsXG5cbiAgLy8gVmVudHJpbG9xdWlzdCAmIHZhcmlldHlcbiAgJ01vcnRpbWVyJyxcbiAgJ0xhbWJjaG9wJyxcbiAgJ01hZGFtZScsXG4gICdUb3BvJyxcblxuICAvLyBJbnRlcm5hdGlvbmFsIHB1cHBldHJ5XG4gICdCdW5yYWt1JyxcbiAgJ1dheWFuZycsXG4gICdQZXRydXNoa2EnLFxuICAnSGFubmVzY2hlbicsXG4gICdWaXRlenNsYXYnLFxuXG4gIC8vIE1vZGVybiAmIHBvcCBjdWx0dXJlXG4gICdTYWxlbScsXG4gICdUcml1bXBoJyxcbiAgJ1BlYW51dCcsXG4gICdBY2htZWQnLFxuXG4gIC8vIE1hcmlvbmV0dGUgdHJhZGl0aW9uc1xuICAnRmFudG9jY2luaScsXG4gICdTYWx0aW1iYW5xdWUnLFxuICAnQnVyYXR0aW5vJyxcbiAgJ0hhcmxlcXVpbicsXG5cbiAgLy8gRG9sbGhvdXNlIChUViBzZXJpZXMpXG4gICdFY2hvJyxcblxuICAvLyBJbnNpZGUgam9rZXNcbiAgJ1NwaWtlJyxcbiAgJ0FuZ2VsJyxcblxuICAvLyBDbGFzc2ljIGRvbGxzXG4gICdCYXJiaWUnLFxuICAnS2VuJyxcbiAgJ1NraXBwZXInLFxuICAnTWlkZ2UnLFxuICAnQ2hyaXN0aWUnLFxuICAnQW5uaWUnLFxuICAnQW5keScsXG4gICdDYXRoeScsXG4gICdUZWRkeScsXG4gICdYYXZpZXInLFxuICAnU3RyYXdiZXJyeScsXG4gICdCbHl0aGUnLFxuICAnR2lubnknLFxuICAnQmV0c3knLFxuICAnTWFkZWxpbmUnLFxuXTtcblxuLyoqIE5hbWVzIHRoYXQgY2FuIG5ldmVyIGJlIGFzc2lnbmVkIHRvIGEgbGVhZGVyIHNlc3Npb24gKi9cbmNvbnN0IEZPTExPV0VSX09OTFlfTkFNRVMgPSBuZXcgU2V0KFsnUHVuY2gnXSk7XG5cbi8qKiBGaXNoZXItWWF0ZXMgc2h1ZmZsZSB1c2luZyBjcnlwdG8ucmFuZG9tSW50ICh1bmJpYXNlZCwgbm8gbW9kdWxvKSAqL1xuZnVuY3Rpb24gc2h1ZmZsZUFycmF5PFQ+KGFycjogVFtdKTogVFtdIHtcbiAgZm9yIChsZXQgaSA9IGFyci5sZW5ndGggLSAxOyBpID4gMDsgaS0tKSB7XG4gICAgY29uc3QgaiA9IHJhbmRvbUludChpICsgMSk7XG4gICAgW2FycltpXSwgYXJyW2pdXSA9IFthcnJbal0sIGFycltpXV07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn1cblxuLyoqIFNodWZmbGVkIGNvcHkgb2YgdGhlIG5hbWUgcG9vbCDigJQgcmFuZG9taXplZCBvbiBlYWNoIHByb2Nlc3Mgc3RhcnQgKi9cbmNvbnN0IFBVUFBFVF9OQU1FUzogc3RyaW5nW10gPSBzaHVmZmxlQXJyYXkoWy4uLkFMTF9QVVBQRVRfTkFNRVNdKTtcblxuLyoqXG4gKiBJY29uaWMgYXR0aXJlIGFuZCBhY2Nlc3NvcmllcyBkcmF3biBmcm9tIGZhbW91cyBkb2xscywgcHVwcGV0cywgYW5kXG4gKiB0aGVhdHJpY2FsIGNoYXJhY3RlcnMgdGhyb3VnaG91dCBoaXN0b3J5LiBVc2VkIHRvIG5hbWUgY29uc29sZSB0b2tlbnNcbiAqIHNvIHRoZXkgbmV2ZXIgY29sbGlkZSB3aXRoIHRoZSBzZXNzaW9uIHB1cHBldC1uYW1lIHBvb2wgKCMxODcxKS5cbiAqXG4gKiBOYW1lcyBldm9rZSBjb3N0dW1lIHBpZWNlcyDigJQgYSB0b2tlbiBpcyBzb21ldGhpbmcgeW91IHdlYXIgb3IgY2FycnksXG4gKiBub3QgYSBwZXJzb24uXG4gKi9cbmV4cG9ydCBjb25zdCBBTExfVE9LRU5fTkFNRVM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAvLyBWaWN0b3JpYW4gJiB0aGVhdHJpY2FsXG4gICdUb3AgSGF0JyxcbiAgJ01vbm9jbGUnLFxuICAnVHJlbmNoIENvYXQnLFxuICAnT3BlcmEgQ2FwZScsXG4gICdPcGVyYSBHbG92ZXMnLFxuICAnVmVsdmV0IENsb2FrJyxcbiAgJ0xhY2UgQ29sbGFyJyxcbiAgJ1NpbGsgQ3JhdmF0JyxcbiAgJ1dhaXN0Y29hdCcsXG4gICdHaWx0IEJ1dHRvbicsXG5cbiAgLy8gUGhhbnRvbSwgbWFza3MsIG15c3RlcnlcbiAgJ0hhbGYgTWFzaycsXG4gICdEb21pbm8gTWFzaycsXG4gICdGZWF0aGVyZWQgTWFzaycsXG5cbiAgLy8gUHVuY2ggJiBKdWR5IC8gSGFybGVxdWluXG4gICdKZXN0ZXIgQmVsbHMnLFxuICAnRGlhbW9uZCBTdWl0JyxcbiAgJ0JlbGwgQ2FwJyxcbiAgJ1NsYXBzdGljaycsXG4gICdSZWQgTm9zZScsXG5cbiAgLy8gUHVwcGV0IHRyYWRpdGlvbnNcbiAgJ01hcmlvbmV0dGUgU3RyaW5ncycsXG4gICdDcmFja2VkIFBvcmNlbGFpbicsXG4gICdQYXBpZXItTcOiY2jDqScsXG5cbiAgLy8gQ2xhc3NpYyBkb2xscyAmIGNoYXJhY3RlcnNcbiAgJ1BpbmsgQ29ydmV0dGUnLFxuICAnUmVkIFlhcm4gSGFpcicsXG4gICdTYWlsb3IgU3VpdCcsXG4gICdZZWxsb3cgSGF0JyxcbiAgJ1J1YnkgU2xpcHBlcnMnLFxuICAnR2xhc3MgU2xpcHBlcicsXG4gICdCbHVlIFJpYmJvbicsXG4gICdTdHJpcGVkIFN0b2NraW5ncycsXG5cbiAgLy8gV2l6YXJkIC8gd2l0Y2ggLyBmYW50YXN5XG4gICdQb2ludGVkIEhhdCcsXG4gICdCcm9vbXN0aWNrJyxcbiAgJ1NpbHZlciBXYW5kJyxcbiAgJ1RpbiBDcm93bicsXG4gICdTdHJhdyBIYXQnLFxuXG4gIC8vIEFkdmVudHVyZSAmIG15c3RlcnlcbiAgJ0RlZXJzdGFsa2VyJyxcbiAgJ01hZ25pZnlpbmcgR2xhc3MnLFxuICAnRmVhdGhlcmVkIENhcCcsXG4gICdTaWx2ZXIgQnVja2xlJyxcbiAgJ1dpY2tlciBCYXNrZXQnLFxuXTtcblxuLyoqXG4gKiBQaWNrIGEgcmFuZG9tIHRva2VuIG5hbWUgZnJvbSB0aGUgYXR0aXJlIHBvb2wuXG4gKiBVc2VkIGJ5IHRoZSBjb25zb2xlIHRva2VuIG1vZHVsZSB0byBuYW1lIG5ld2x5IGNyZWF0ZWQgdG9rZW5zICgjMTg3MSkuXG4gKiBEcmF3biBmcm9tIGEgc2VwYXJhdGUgcG9vbCB0byBhdm9pZCBjb2xsaXNpb24gd2l0aCBzZXNzaW9uIHB1cHBldCBuYW1lcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpY2tSYW5kb21Ub2tlbk5hbWUoKTogc3RyaW5nIHtcbiAgcmV0dXJuIEFMTF9UT0tFTl9OQU1FU1tyYW5kb21JbnQoQUxMX1RPS0VOX05BTUVTLmxlbmd0aCldO1xufVxuXG4vKipcbiAqIENhbm9uaWNhbCBjb2xvcnMgZm9yIGVhY2ggcHVwcGV0IGNoYXJhY3Rlci5cbiAqIEFkanVzdGVkIGZyb20gdHJ1ZSBjYW5vbmljYWwgY29sb3JzIGZvciBVSSByZWFkYWJpbGl0eSBpbiBib3RoIGxpZ2h0L2RhcmsgdGhlbWVzLlxuICovXG5jb25zdCBQVVBQRVRfQ09MT1JTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAnUHVuY2gnOiAgICAgICAgJyNEQzE0M0MnLCAvLyBjcmltc29uIHJlZCBjb3N0dW1lXG4gICdKdWR5JzogICAgICAgICAnIzFFOTBGRicsIC8vIGJsdWUgZHJlc3NcbiAgJ1Bpbm9jY2hpbyc6ICAgICcjREFBNTIwJywgLy8gZ29sZGVucm9kICh3b29kZW4sIHllbGxvdyBoYXQpXG4gICdQZXRyb3VjaGthJzogICAnI0IwQkVDNScsIC8vIGJsdWUtZ3JheSAod2hpdGUgY29zdHVtZSwgYWRqdXN0ZWQgZm9yIHZpc2liaWxpdHkpXG4gICdQdWxjaW5lbGxhJzogICAnIzkwQTRBRScsIC8vIGdyYXktYmx1ZSAod2hpdGUgY29zdHVtZSwgYWRqdXN0ZWQpXG4gICdHdWlnbm9sJzogICAgICAnIzhCNDUxMycsIC8vIHNhZGRsZSBicm93blxuICAnS2FzcGVybGUnOiAgICAgJyNGRjAwMDAnLCAvLyByZWQgcG9pbnRlZCBjYXBcbiAgJ0tlcm1pdCc6ICAgICAgICcjNENBRjUwJywgLy8gZ3JlZW4gZnJvZ1xuICAnUGlnZ3knOiAgICAgICAgJyNFOTFFOEMnLCAvLyBob3QgcGluayAoZ2xhbW9yb3VzIHBpZylcbiAgJ0ZvenppZSc6ICAgICAgICcjQ0M3NzIyJywgLy8gb2NocmUgYnJvd24gYmVhclxuICAnR29uem8nOiAgICAgICAgJyM0MTY5RTEnLCAvLyByb3lhbCBibHVlXG4gICdTY29vdGVyJzogICAgICAnI0ZGOEMwMCcsIC8vIGRhcmsgb3JhbmdlXG4gICdSb3dsZic6ICAgICAgICAnIzhCNjkxNCcsIC8vIGRhcmsgZ29sZGVucm9kIGJyb3duIGRvZ1xuICAnV2FsZG9yZic6ICAgICAgJyM1NTZCMkYnLCAvLyBkYXJrIG9saXZlIGdyZWVuXG4gICdTdGF0bGVyJzogICAgICAnIzcwODA5MCcsIC8vIHNsYXRlIGdyYXlcbiAgJ0t1a2xhJzogICAgICAgICcjRkYwMDAwJywgLy8gcmVkIG5vc2UgYW5kIGNvc3R1bWVcbiAgJ09sbGllJzogICAgICAgICcjMjI4QjIyJywgLy8gZm9yZXN0IGdyZWVuIGRyYWdvblxuICAnSG93ZHknOiAgICAgICAgJyNFMjcyNUInLCAvLyB0ZXJyYSBjb3R0YVxuICAnQ2xhcmFiZWxsJzogICAgJyNGRkNDMDAnLCAvLyBicmlnaHQgeWVsbG93IGNsb3duXG4gICdHcm92ZXInOiAgICAgICAnIzQ2ODJCNCcsIC8vIHN0ZWVsIGJsdWVcbiAgJ0VsbW8nOiAgICAgICAgICcjRkYyNDAwJywgLy8gc2NhcmxldCByZWRcbiAgJ0VybmllJzogICAgICAgICcjRjRBNDYwJywgLy8gc2FuZHkgYnJvd25cbiAgJ0JlcnQnOiAgICAgICAgICcjRkZENzAwJywgLy8gZ29sZCB5ZWxsb3dcbiAgJ09zY2FyJzogICAgICAgICcjNkI4RTIzJywgLy8gb2xpdmUgZHJhYiBncmVlblxuICAnTW9ydGltZXInOiAgICAgJyNERUI4ODcnLCAvLyBidXJseXdvb2RcbiAgJ0xhbWJjaG9wJzogICAgICcjRDRDNUE5JywgLy8gd2FybSBjcmVhbSAoYWRqdXN0ZWQgZnJvbSBwdXJlIHdoaXRlKVxuICAnTWFkYW1lJzogICAgICAgJyM4MDAwODAnLCAvLyBwdXJwbGVcbiAgJ1RvcG8nOiAgICAgICAgICcjQTBBMEEwJywgLy8gc2lsdmVyIGdyYXlcbiAgJ0J1bnJha3UnOiAgICAgICcjQjIyMjIyJywgLy8gZmlyZWJyaWNrIHJlZFxuICAnV2F5YW5nJzogICAgICAgJyM2QjQyMjYnLCAvLyBkYXJrIGxlYXRoZXIgYnJvd24gKGxpZ2h0ZW5lZCBmb3IgdmlzaWJpbGl0eSlcbiAgJ1BldHJ1c2hrYSc6ICAgICcjRkY0NTAwJywgLy8gb3JhbmdlIHJlZFxuICAnSGFubmVzY2hlbic6ICAgJyNDRDVDNUMnLCAvLyBpbmRpYW4gcmVkXG4gICdWaXRlenNsYXYnOiAgICAnI0I4ODYwQicsIC8vIGRhcmsgZ29sZGVucm9kXG4gICdTYWxlbSc6ICAgICAgICAnIzRBNEE0QScsIC8vIGRhcmsgZ3JheSAoYmxhY2sgY2F0LCBsaWdodGVuZWQgZm9yIHZpc2liaWxpdHkpXG4gICdUcml1bXBoJzogICAgICAnIzZGNEUzNycsIC8vIGNvZmZlZSBicm93blxuICAnUGVhbnV0JzogICAgICAgJyM5MzcwREInLCAvLyBtZWRpdW0gcHVycGxlXG4gICdBY2htZWQnOiAgICAgICAnI0M4QkZBOScsIC8vIGJvbmUvcGFyY2htZW50IChsaWdodGVuZWQgZnJvbSBiZWlnZSlcbiAgJ0ZhbnRvY2NpbmknOiAgICcjQzQxRTNBJywgLy8gY2FyZGluYWwgcmVkXG4gICdTYWx0aW1iYW5xdWUnOiAnI0RBQTUyMCcsIC8vIGdvbGRlbnJvZFxuICAnQnVyYXR0aW5vJzogICAgJyNEMjY5MUUnLCAvLyBjaG9jb2xhdGUgYnJvd25cbiAgJ0hhcmxlcXVpbic6ICAgICcjRTYwMDI2JywgLy8gZGlhbW9uZCByZWRcbiAgJ0VjaG8nOiAgICAgICAgICcjNUM2MzcwJywgLy8gc2xhdGUgKGRhcmsgYXR0aXJlLCBsaWdodGVuZWQgZm9yIHZpc2liaWxpdHkpXG4gICdTcGlrZSc6ICAgICAgICAnI0U4RENDOCcsIC8vIHBsYXRpbnVtL2JsZWFjaCAobGlnaHRlbmVkIGZvciByZWFkYWJpbGl0eSlcbiAgJ0FuZ2VsJzogICAgICAgICcjM0QzRDNEJywgLy8gY2hhcmNvYWwgKGJsYWNrIGR1c3RlciwgbGlnaHRlbmVkIGZvciB2aXNpYmlsaXR5KVxuXG4gIC8vIENsYXNzaWMgZG9sbHNcbiAgJ0JhcmJpZSc6ICAgICAgICcjRTkxRTkwJywgLy8gQmFyYmllIHBpbmtcbiAgJ0tlbic6ICAgICAgICAgICcjNEE5MEQ5JywgLy8gS2VuIGJsdWVcbiAgJ1NraXBwZXInOiAgICAgICcjRkY2QjZCJywgLy8gY29yYWwgcmVkXG4gICdNaWRnZSc6ICAgICAgICAnI0U4NzA0MCcsIC8vIHdhcm0gYXVidXJuXG4gICdDaHJpc3RpZSc6ICAgICAnI0MwNjAzMCcsIC8vIHdhcm0gYnJvd25cbiAgJ0FubmllJzogICAgICAgICcjRTAzMDMwJywgLy8gUmFnZ2VkeSBBbm4gcmVkIHlhcm4gaGFpclxuICAnQW5keSc6ICAgICAgICAgJyMzMDcwQzAnLCAvLyBSYWdnZWR5IEFuZHkgYmx1ZSBzYWlsb3Igb3V0Zml0XG4gICdDYXRoeSc6ICAgICAgICAnI0Q0QTU3NCcsIC8vIENoYXR0eSBDYXRoeSB2aW50YWdlIHRhblxuICAnVGVkZHknOiAgICAgICAgJyNBMDc4NEEnLCAvLyBUZWRkeSBSdXhwaW4gYmVhciBicm93blxuICAnWGF2aWVyJzogICAgICAgJyM1QUFGNEEnLCAvLyBYYXZpZXIgUm9iZXJ0cyAvIENhYmJhZ2UgUGF0Y2ggZ3JlZW5cbiAgJ1N0cmF3YmVycnknOiAgICcjRTg0NDVBJywgLy8gc3RyYXdiZXJyeSByZWQtcGlua1xuICAnQmx5dGhlJzogICAgICAgJyM3QjY4RUUnLCAvLyBiaWctZXllZCBwdXJwbGVcbiAgJ0dpbm55JzogICAgICAgICcjNUI5QkQ1JywgLy8gY2xhc3NpYyBibHVlIGRyZXNzXG4gICdCZXRzeSc6ICAgICAgICAnI0RENzY5NCcsIC8vIHJvc2UgcGlua1xuICAnTWFkZWxpbmUnOiAgICAgJyNGRkQ3MDAnLCAvLyB5ZWxsb3cgaGF0XG59O1xuXG4vKiogQ29vbGRvd24gcGVyaW9kIGJlZm9yZSBhIHJlbGVhc2VkIG5hbWUgY2FuIGJlIHJldXNlZCAobXMpICovXG5jb25zdCBOQU1FX0NPT0xET1dOX01TID0gNSAqIDYwXzAwMDsgLy8gNSBtaW51dGVzXG5cbmludGVyZmFjZSBDb29sZG93bkVudHJ5IHtcbiAgbmFtZTogc3RyaW5nO1xuICByZWxlYXNlZEF0OiBudW1iZXI7XG59XG5cbi8qKlxuICogTWFuYWdlcyBmcmllbmRseSBzZXNzaW9uIG5hbWUgYXNzaWdubWVudCBmcm9tIHRoZSBwdXBwZXQgbmFtZSBwb29sLlxuICovXG5leHBvcnQgY2xhc3MgU2Vzc2lvbk5hbWVQb29sIHtcbiAgLyoqIE5hbWVzIGN1cnJlbnRseSBhc3NpZ25lZCB0byBhY3RpdmUgc2Vzc2lvbnM6IHNlc3Npb25JZCDihpIgbmFtZSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGFzc2lnbmVkID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgLyoqIFJldmVyc2UgbG9va3VwOiBuYW1lIOKGkiBzZXNzaW9uSWQgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBuYW1lVG9TZXNzaW9uID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgLyoqIE5hbWVzIGluIGNvb2xkb3duIGFmdGVyIHNlc3Npb24gZW5kICovXG4gIHByaXZhdGUgY29vbGRvd246IENvb2xkb3duRW50cnlbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBBc3NpZ24gYSBmcmllbmRseSBuYW1lIHRvIGEgc2Vzc2lvbi5cbiAgICogUmV0dXJucyBhbiBleGlzdGluZyBhc3NpZ25tZW50IGlmIHRoZSBzZXNzaW9uIGFscmVhZHkgaGFzIG9uZS5cbiAgICpcbiAgICogQHBhcmFtIGlzTGVhZGVyIC0gSWYgdHJ1ZSwgZm9sbG93ZXItb25seSBuYW1lcyAoZS5nLiwgUHVuY2gpIGFyZSBleGNsdWRlZFxuICAgKi9cbiAgYXNzaWduKHNlc3Npb25JZDogc3RyaW5nLCBpc0xlYWRlciA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICAvLyBBbHJlYWR5IGFzc2lnbmVkP1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5hc3NpZ25lZC5nZXQoc2Vzc2lvbklkKTtcbiAgICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZztcblxuICAgIC8vIEZsdXNoIGV4cGlyZWQgY29vbGRvd25zXG4gICAgdGhpcy5mbHVzaENvb2xkb3ducygpO1xuXG4gICAgLy8gRmluZCBhbiBhdmFpbGFibGUgbmFtZSwgcmVzcGVjdGluZyBsZWFkZXIgcmVzdHJpY3Rpb25zXG4gICAgY29uc3QgY29vbGRvd25OYW1lcyA9IG5ldyBTZXQodGhpcy5jb29sZG93bi5tYXAoYyA9PiBjLm5hbWUpKTtcbiAgICBjb25zdCBhdmFpbGFibGVOYW1lID0gUFVQUEVUX05BTUVTLmZpbmQoXG4gICAgICBuYW1lID0+ICF0aGlzLm5hbWVUb1Nlc3Npb24uaGFzKG5hbWUpICYmXG4gICAgICAgICAgICAgICFjb29sZG93bk5hbWVzLmhhcyhuYW1lKSAmJlxuICAgICAgICAgICAgICAhKGlzTGVhZGVyICYmIEZPTExPV0VSX09OTFlfTkFNRVMuaGFzKG5hbWUpKVxuICAgICk7XG5cbiAgICBpZiAoYXZhaWxhYmxlTmFtZSkge1xuICAgICAgdGhpcy5hc3NpZ25lZC5zZXQoc2Vzc2lvbklkLCBhdmFpbGFibGVOYW1lKTtcbiAgICAgIHRoaXMubmFtZVRvU2Vzc2lvbi5zZXQoYXZhaWxhYmxlTmFtZSwgc2Vzc2lvbklkKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW1Nlc3Npb25OYW1lc10gQXNzaWduZWQgJyR7YXZhaWxhYmxlTmFtZX0nIHRvICR7c2Vzc2lvbklkfWApO1xuICAgICAgcmV0dXJuIGF2YWlsYWJsZU5hbWU7XG4gICAgfVxuXG4gICAgLy8gQWxsIG5hbWVzIGluIHVzZSBvciBjb29saW5nIGRvd24g4oCUIHRyeSBjb29sZG93biBuYW1lcyAob2xkZXN0IGZpcnN0KVxuICAgIGlmICh0aGlzLmNvb2xkb3duLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG9sZGVzdCA9IHRoaXMuY29vbGRvd24uc2hpZnQoKSE7XG4gICAgICB0aGlzLmFzc2lnbmVkLnNldChzZXNzaW9uSWQsIG9sZGVzdC5uYW1lKTtcbiAgICAgIHRoaXMubmFtZVRvU2Vzc2lvbi5zZXQob2xkZXN0Lm5hbWUsIHNlc3Npb25JZCk7XG4gICAgICBsb2dnZXIuZGVidWcoYFtTZXNzaW9uTmFtZXNdIEFzc2lnbmVkICcke29sZGVzdC5uYW1lfScgdG8gJHtzZXNzaW9uSWR9IChlYXJseSBjb29sZG93biByZWxlYXNlKWApO1xuICAgICAgcmV0dXJuIG9sZGVzdC5uYW1lO1xuICAgIH1cblxuICAgIC8vIFRydWx5IGV4aGF1c3RlZCDigJQgZmFsbCBiYWNrIHRvIHRydW5jYXRlZCBzZXNzaW9uIElEXG4gICAgY29uc3QgZmFsbGJhY2sgPSBzZXNzaW9uSWQuc3BsaXQoJy0nKVsxXSB8fCBzZXNzaW9uSWQuc2xpY2UoMCwgOCk7XG4gICAgdGhpcy5hc3NpZ25lZC5zZXQoc2Vzc2lvbklkLCBmYWxsYmFjayk7XG4gICAgbG9nZ2VyLndhcm4oYFtTZXNzaW9uTmFtZXNdIE5hbWUgcG9vbCBleGhhdXN0ZWQsIHVzaW5nIGZhbGxiYWNrICcke2ZhbGxiYWNrfScgZm9yICR7c2Vzc2lvbklkfWApO1xuICAgIHJldHVybiBmYWxsYmFjaztcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVzZXJ2ZSBhbiBleGlzdGluZyBodW1hbi1mYWNpbmcgYXNzaWdubWVudCBkdXJpbmcgbGVhZGVyc2hpcCBoYW5kb2ZmLlxuICAgKiBJZiB0aGUgcmVxdWVzdGVkIG5hbWUgaXMgYWxyZWFkeSB0YWtlbiBieSBhbm90aGVyIGxpdmUgc2Vzc2lvbiwgdGhlIHBvb2xcbiAgICogZmFsbHMgYmFjayB0byBub3JtYWwgYXNzaWdubWVudCBsb2dpYyByYXRoZXIgdGhhbiBjcmVhdGluZyBhIGR1cGxpY2F0ZS5cbiAgICovXG4gIGFkb3B0KHNlc3Npb25JZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGlzTGVhZGVyID0gZmFsc2UpOiBzdHJpbmcge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5hc3NpZ25lZC5nZXQoc2Vzc2lvbklkKTtcbiAgICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZztcblxuICAgIHRoaXMuZmx1c2hDb29sZG93bnMoKTtcblxuICAgIGlmICghdGhpcy5uYW1lVG9TZXNzaW9uLmhhcyhuYW1lKSAmJiAhKGlzTGVhZGVyICYmIEZPTExPV0VSX09OTFlfTkFNRVMuaGFzKG5hbWUpKSkge1xuICAgICAgdGhpcy5hc3NpZ25lZC5zZXQoc2Vzc2lvbklkLCBuYW1lKTtcbiAgICAgIHRoaXMubmFtZVRvU2Vzc2lvbi5zZXQobmFtZSwgc2Vzc2lvbklkKTtcbiAgICAgIHRoaXMuY29vbGRvd24gPSB0aGlzLmNvb2xkb3duLmZpbHRlcihlbnRyeSA9PiBlbnRyeS5uYW1lICE9PSBuYW1lKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW1Nlc3Npb25OYW1lc10gQWRvcHRlZCAnJHtuYW1lfScgZm9yICR7c2Vzc2lvbklkfWApO1xuICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXNzaWduKHNlc3Npb25JZCwgaXNMZWFkZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbGVhc2UgYSBuYW1lIGJhY2sgdG8gdGhlIHBvb2wgd2l0aCBhIGNvb2xkb3duIHBlcmlvZC5cbiAgICovXG4gIHJlbGVhc2Uoc2Vzc2lvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5hc3NpZ25lZC5nZXQoc2Vzc2lvbklkKTtcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcblxuICAgIHRoaXMuYXNzaWduZWQuZGVsZXRlKHNlc3Npb25JZCk7XG4gICAgdGhpcy5uYW1lVG9TZXNzaW9uLmRlbGV0ZShuYW1lKTtcblxuICAgIC8vIE9ubHkgY29vbGRvd24gcHVwcGV0IG5hbWVzLCBub3QgZmFsbGJhY2sgSURzXG4gICAgaWYgKFBVUFBFVF9OQU1FUy5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgdGhpcy5jb29sZG93bi5wdXNoKHsgbmFtZSwgcmVsZWFzZWRBdDogRGF0ZS5ub3coKSB9KTtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoYFtTZXNzaW9uTmFtZXNdIFJlbGVhc2VkICcke25hbWV9JyBmcm9tICR7c2Vzc2lvbklkfSAoY29vbGRvd24gJHtOQU1FX0NPT0xET1dOX01TIC8gMTAwMH1zKWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZnJpZW5kbHkgbmFtZSBmb3IgYSBzZXNzaW9uLCBvciB1bmRlZmluZWQgaWYgbm90IGFzc2lnbmVkLlxuICAgKi9cbiAgZ2V0TmFtZShzZXNzaW9uSWQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYXNzaWduZWQuZ2V0KHNlc3Npb25JZCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjYW5vbmljYWwgY29sb3IgZm9yIGFuIGFzc2lnbmVkIHNlc3Npb24gbmFtZS5cbiAgICovXG4gIGdldENvbG9yKHNlc3Npb25JZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5hc3NpZ25lZC5nZXQoc2Vzc2lvbklkKTtcbiAgICByZXR1cm4gbmFtZSA/IChQVVBQRVRfQ09MT1JTW25hbWVdID8/IHVuZGVmaW5lZCkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBjdXJyZW50IGFzc2lnbm1lbnRzLlxuICAgKi9cbiAgZ2V0QWxsKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgTWFwKHRoaXMuYXNzaWduZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaENvb2xkb3ducygpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuY29vbGRvd24gPSB0aGlzLmNvb2xkb3duLmZpbHRlcihjID0+IChub3cgLSBjLnJlbGVhc2VkQXQpIDwgTkFNRV9DT09MRE9XTl9NUyk7XG4gIH1cbn1cbiJdfQ==
@@ -21,6 +21,7 @@ import { isLeaderWebConsoleReachable, forceClaimLeadership, detectLegacyLeader,
21
21
  import { LeaderForwardingLogSink, SessionHeartbeat } from './LeaderForwardingSink.js';
22
22
  import { PromotionManager } from './PromotionManager.js';
23
23
  import { findPidOnPort } from './StaleProcessRecovery.js';
24
+ import type { SessionInfo } from './IngestRoutes.js';
24
25
  /**
25
26
  * Options for starting the unified console.
26
27
  */
@@ -121,6 +122,7 @@ interface DiscoveryDependencies {
121
122
  findPidOnPortImpl?: typeof findPidOnPort;
122
123
  readLeaderLockImpl?: typeof readLeaderLock;
123
124
  }
125
+ export declare function fetchLeaderSessionsSnapshot(port: number, authToken: string | null, fetchImpl?: typeof fetch): Promise<SessionInfo[]>;
124
126
  export declare function discoverLeaderServingPort(port: number, authToken: string | null, deps?: DiscoveryDependencies): Promise<PortLeaderDiscovery>;
125
127
  interface BindFailureRecoveryDependencies extends DiscoveryDependencies {
126
128
  deleteLeaderLockImpl?: typeof deleteLeaderLock;
@@ -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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"}
@@ -99,6 +99,27 @@ export async function warnIfLegacyConsolePresent(currentPort, detect = detectLeg
99
99
  function buildDiscoveryHeaders(authToken) {
100
100
  return authToken ? { Authorization: `Bearer ${authToken}` } : {};
101
101
  }
102
+ export async function fetchLeaderSessionsSnapshot(port, authToken, fetchImpl = fetch) {
103
+ const controller = new AbortController();
104
+ const timeout = setTimeout(() => controller.abort(), LEADER_DISCOVERY_TIMEOUT_MS);
105
+ try {
106
+ const response = await fetchImpl(`http://127.0.0.1:${port}/api/sessions`, {
107
+ headers: buildDiscoveryHeaders(authToken),
108
+ signal: controller.signal,
109
+ });
110
+ if (!response.ok) {
111
+ return [];
112
+ }
113
+ const data = await response.json();
114
+ return Array.isArray(data.sessions) ? data.sessions : [];
115
+ }
116
+ catch {
117
+ return [];
118
+ }
119
+ finally {
120
+ clearTimeout(timeout);
121
+ }
122
+ }
102
123
  function buildLeaderInfoFromSession(port, ownerPid, leaderSession) {
103
124
  return {
104
125
  version: LOCK_VERSION,
@@ -452,12 +473,14 @@ async function attemptForceTakeover(options, currentElection, consolePort, prima
452
473
  election: currentElection,
453
474
  fallback: initialFallback,
454
475
  replacement: initialReplacement,
476
+ recoveredSessions: [],
455
477
  forcedKill: null,
456
478
  takeoverAttempted: false,
457
479
  reboundLockClaimed: false,
458
480
  };
459
481
  }
460
482
  const latestFallback = await discoverLeaderServingPort(consolePort, primaryToken);
483
+ const recoveredSessions = await fetchLeaderSessionsSnapshot(consolePort, primaryToken);
461
484
  const latestReplacement = evaluatePortOwnerReplacement(currentElection.leaderInfo, latestFallback);
462
485
  if (!latestReplacement.shouldEvict || latestReplacement.ownerPid === null) {
463
486
  logger.warn('[UnifiedConsole] Forced takeover target changed before eviction; skipping forced kill', {
@@ -469,6 +492,7 @@ async function attemptForceTakeover(options, currentElection, consolePort, prima
469
492
  election: currentElection,
470
493
  fallback: latestFallback,
471
494
  replacement: latestReplacement,
495
+ recoveredSessions,
472
496
  forcedKill: null,
473
497
  takeoverAttempted: false,
474
498
  reboundLockClaimed: false,
@@ -489,6 +513,7 @@ async function attemptForceTakeover(options, currentElection, consolePort, prima
489
513
  election: currentElection,
490
514
  fallback: latestFallback,
491
515
  replacement: latestReplacement,
516
+ recoveredSessions,
492
517
  forcedKill,
493
518
  takeoverAttempted: true,
494
519
  reboundLockClaimed: false,
@@ -517,6 +542,7 @@ async function attemptForceTakeover(options, currentElection, consolePort, prima
517
542
  election: reboundElection,
518
543
  fallback: latestFallback,
519
544
  replacement: latestReplacement,
545
+ recoveredSessions,
520
546
  forcedKill,
521
547
  takeoverAttempted: true,
522
548
  reboundLockClaimed,
@@ -597,10 +623,12 @@ async function startAsLeader(options, election, consolePort = DEFAULT_CONSOLE_PO
597
623
  // bindAndListen now handles EADDRINUSE by finding and killing the stale
598
624
  // process on the port, then retrying. No external retry loop needed.
599
625
  let webResult = await startWebServer(serverOpts);
626
+ let recoveredFollowerSessions = [];
600
627
  if (webResult.bindResult && !webResult.bindResult.success) {
601
628
  const forceTakeover = await attemptForceTakeover(options, election, consolePort, primaryToken.token, serverOpts, startWebServer);
602
629
  webResult = forceTakeover.webResult;
603
630
  election = forceTakeover.election;
631
+ recoveredFollowerSessions = forceTakeover.recoveredSessions;
604
632
  if (webResult.bindResult && !webResult.bindResult.success) {
605
633
  if (forceTakeover.fallback.leaderInfo) {
606
634
  logger.warn('[UnifiedConsole] Leader role aborted: bind failed, falling back to follower', {
@@ -624,6 +652,13 @@ async function startAsLeader(options, election, consolePort = DEFAULT_CONSOLE_PO
624
652
  ingestResult.registerLeaderSession(options.sessionId, process.pid);
625
653
  // Register the web console itself so the session indicator is never empty (#1805)
626
654
  ingestResult.registerConsoleSession();
655
+ if (recoveredFollowerSessions.length > 0) {
656
+ ingestResult.importSessions(recoveredFollowerSessions);
657
+ logger.info('[UnifiedConsole] Recovered follower session snapshot from displaced leader', {
658
+ sessionId: options.sessionId,
659
+ recoveredSessions: recoveredFollowerSessions.length,
660
+ });
661
+ }
627
662
  // Wire SSE broadcasts for this leader's own events
628
663
  options.wireSSEBroadcasts(webResult, options.metricsSink);
629
664
  // Now wire the live broadcast functions into the ingest routes
@@ -707,4 +742,4 @@ async function startAsFollower(options, election, consolePort = DEFAULT_CONSOLE_
707
742
  },
708
743
  };
709
744
  }
710
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5pZmllZENvbnNvbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViL2NvbnNvbGUvVW5pZmllZENvbnNvbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRztBQU9ILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsV0FBVyxFQUNYLDJCQUEyQixFQUMzQixvQkFBb0IsRUFDcEIsY0FBYyxFQUNkLHFCQUFxQixFQUNyQixrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWix3QkFBd0IsRUFDeEIscUJBQXFCLEVBQ3JCLHdCQUF3QixHQUl6QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsZ0JBQWdCLEdBQ2pCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsT0FBTyxFQUNMLGFBQWEsRUFDYix3QkFBd0IsR0FFekIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFMUM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUMsMEJBQTBCLENBQUM7QUFDNUQsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLENBQUM7QUFDMUMsTUFBTSxtQ0FBbUMsR0FBRyxhQUFhLENBQUM7QUFDMUQsTUFBTSwyQkFBMkIsR0FBRyxLQUFLLENBQUM7QUFD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Q0FBQztJQUNILE9BQU8sQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFeEMsd0NBQXdDO0lBQ3hDLGdCQUFnQixHQUFHLElBQUksZ0JBQWdCLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM5RixNQUFNLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO0lBRS9CLE1BQU0sb0JBQW9CLEdBQUcsNkJBQTZCLENBQ3hELE9BQU8sRUFDUCxXQUFXLEVBQ1gsUUFBUSxFQUNSLFlBQVksRUFDWixjQUFjLEVBQ2QsZ0JBQWdCLENBQ2pCLENBQUM7SUFFRixNQUFNLENBQUMsSUFBSSxDQUFDLG1DQUFtQyxFQUFFO1FBQy9DLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxVQUFVO1FBQ2hFLGFBQWEsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHO1FBQ2hGLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTO0tBQ2hELENBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxJQUFJLEVBQUUsVUFBVTtRQUNoQixRQUFRO1FBQ1IsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2xCLG9CQUFvQixFQUFFLENBQUM7WUFDdkIsTUFBTSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM5QixNQUFNLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVuaWZpZWQgd2ViIGNvbnNvbGUgb3JjaGVzdHJhdG9yLlxuICpcbiAqIFRpZXMgdG9nZXRoZXIgbGVhZGVyIGVsZWN0aW9uLCBjb25zb2xlIHN0YXJ0dXAsIGZvbGxvd2VyIHdpcmluZyxcbiAqIGFuZCBzZXNzaW9uIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBUaGlzIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50XG4gKiBjYWxsZWQgYnkgdGhlIERJIGNvbnRhaW5lciBkdXJpbmcgZGVmZXJyZWQgc2V0dXAuXG4gKlxuICogRmxvdzpcbiAqIDEuIFJ1biBsZWFkZXIgZWxlY3Rpb24gKHJlYWQgbG9jayBmaWxlLCBjbGFpbSBvciBmb2xsb3cpXG4gKiAyLiBJZiBsZWFkZXI6IHN0YXJ0IHdlYiBzZXJ2ZXIgb24gZml4ZWQgcG9ydCwgbW91bnQgaW5nZXN0IHJvdXRlcywgc3RhcnQgaGVhcnRiZWF0XG4gKiAzLiBJZiBmb2xsb3dlcjogcmVnaXN0ZXIgZm9yd2FyZGluZyBzaW5rcyB3aXRoIExvZ01hbmFnZXIsIHN0YXJ0IHNlc3Npb24gaGVhcnRiZWF0XG4gKlxuICogQHNpbmNlIHYyLjEuMCDigJQgSXNzdWUgIzE3MDBcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFVuaWZpZWRMb2dFbnRyeSB9IGZyb20gJy4uLy4uL2xvZ2dpbmcvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZXRyaWNTbmFwc2hvdCB9IGZyb20gJy4uLy4uL21ldHJpY3MvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZW1vcnlMb2dTaW5rIH0gZnJvbSAnLi4vLi4vbG9nZ2luZy9zaW5rcy9NZW1vcnlMb2dTaW5rLmpzJztcbmltcG9ydCB0eXBlIHsgTWVtb3J5TWV0cmljc1NpbmsgfSBmcm9tICcuLi8uLi9tZXRyaWNzL3NpbmtzL01lbW9yeU1ldHJpY3NTaW5rLmpzJztcbmltcG9ydCB0eXBlIHsgV2ViU2VydmVyT3B0aW9ucywgV2ViU2VydmVyUmVzdWx0IH0gZnJvbSAnLi4vc2VydmVyLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7XG4gIGVsZWN0TGVhZGVyLFxuICBpc0xlYWRlcldlYkNvbnNvbGVSZWFjaGFibGUsXG4gIGZvcmNlQ2xhaW1MZWFkZXJzaGlwLFxuICBzdGFydEhlYXJ0YmVhdCxcbiAgcmVnaXN0ZXJMZWFkZXJDbGVhbnVwLFxuICBkZXRlY3RMZWdhY3lMZWFkZXIsXG4gIHJlYWRMZWFkZXJMb2NrLFxuICBkZWxldGVMZWFkZXJMb2NrLFxuICBjbGFpbUxlYWRlcnNoaXAsXG4gIGNyZWF0ZUxlYWRlckluZm8sXG4gIExPQ0tfVkVSU0lPTixcbiAgQ09OU09MRV9QUk9UT0NPTF9WRVJTSU9OLFxuICBMRUdBQ1lfU0VSVkVSX1ZFUlNJT04sXG4gIGV2YWx1YXRlTGVhZGVyUHJlZmVyZW5jZSxcbiAgdHlwZSBFbGVjdGlvblJlc3VsdCxcbiAgdHlwZSBDb25zb2xlTGVhZGVySW5mbyxcbiAgdHlwZSBMZWFkZXJQcmVmZXJlbmNlRGVjaXNpb24sXG59IGZyb20gJy4vTGVhZGVyRWxlY3Rpb24uanMnO1xuaW1wb3J0IHsgY3JlYXRlSW5nZXN0Um91dGVzIH0gZnJvbSAnLi9Jbmdlc3RSb3V0ZXMuanMnO1xuaW1wb3J0IHtcbiAgTGVhZGVyRm9yd2FyZGluZ0xvZ1NpbmssXG4gIFNlc3Npb25IZWFydGJlYXQsXG59IGZyb20gJy4vTGVhZGVyRm9yd2FyZGluZ1NpbmsuanMnO1xuaW1wb3J0IHsgUHJvbW90aW9uTWFuYWdlciB9IGZyb20gJy4vUHJvbW90aW9uTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBDb25zb2xlVG9rZW5TdG9yZSB9IGZyb20gJy4vY29uc29sZVRva2VuLmpzJztcbmltcG9ydCB7XG4gIGZpbmRQaWRPblBvcnQsXG4gIGtpbGxTdGFsZVByb2Nlc3NEZXRhaWxlZCxcbiAgdHlwZSBLaWxsU3RhbGVQcm9jZXNzT3V0Y29tZSxcbn0gZnJvbSAnLi9TdGFsZVByb2Nlc3NSZWNvdmVyeS5qcyc7XG5pbXBvcnQgeyBlbnYgfSBmcm9tICcuLi8uLi9jb25maWcvZW52LmpzJztcblxuLyoqXG4gKiBEZWZhdWx0IGNvbnNvbGUgcG9ydCBmcm9tIHRoZSBlbnYgdmFyLiBVc2VkIGFzIGZhbGxiYWNrIHdoZW4gbm8gcG9ydFxuICogaXMgcHJvdmlkZWQgdmlhIGNvbmZpZyBmaWxlIG9yIG9wdGlvbnMuIFRoZSByZXNvbHV0aW9uIGhpZXJhcmNoeSBpczpcbiAqICAgMS4gb3B0aW9ucy5wb3J0IChmcm9tIGNvbmZpZyBmaWxlLCByZXNvbHZlZCBieSB0aGUgREkgY29udGFpbmVyKVxuICogICAyLiBET0xMSE9VU0VfV0VCX0NPTlNPTEVfUE9SVCBlbnYgdmFyXG4gKiAgIDMuIDQxNzE1IChoYXJkY29kZWQgZGVmYXVsdCBpbiBlbnYudHMpXG4gKi9cbmNvbnN0IERFRkFVTFRfQ09OU09MRV9QT1JUID0gZW52LkRPTExIT1VTRV9XRUJfQ09OU09MRV9QT1JUO1xuY29uc3QgTEVHQUNZX0NPTlNPTEVfRkFMTEJBQ0tfUE9SVCA9IDM5Mzk7XG5jb25zdCBTWU5USEVUSUNfUE9SVF9PV05FUl9TRVNTSU9OX1BSRUZJWCA9ICdwb3J0LW93bmVyLSc7XG5jb25zdCBMRUFERVJfRElTQ09WRVJZX1RJTUVPVVRfTVMgPSAyXzAwMDtcbmNvbnN0IEZPTExPV0VSX0FVVEhPUklUWV9NT05JVE9SX0NPTkZJRyA9IHtcbiAgaW50ZXJ2YWxNczogZW52LkRPTExIT1VTRV9DT05TT0xFX0FVVEhPUklUWV9SRUNIRUNLX01TLFxuICBqaXR0ZXJNczogZW52LkRPTExIT1VTRV9DT05TT0xFX0FVVEhPUklUWV9SRUNIRUNLX0pJVFRFUl9NUyxcbiAgZmFpbHVyZVRocmVzaG9sZDogZW52LkRPTExIT1VTRV9DT05TT0xFX0FVVEhPUklUWV9SRUNIRUNLX0ZBSUxVUkVfVEhSRVNIT0xELFxuICBmYWlsdXJlQ29vbGRvd25NczogZW52LkRPTExIT1VTRV9DT05TT0xFX0FVVEhPUklUWV9SRUNIRUNLX0ZBSUxVUkVfQ09PTERPV05fTVMsXG59IGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBjdXJyZW50VGltZXN0YW1wKCk6IHN0cmluZyB7XG4gIHJldHVybiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVGb2xsb3dlckF1dGhvcml0eVJlY2hlY2tJbnRlcnZhbChzZXNzaW9uSWQ6IHN0cmluZyk6IG51bWJlciB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRTZXNzaW9uSWQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShzZXNzaW9uSWQpLm5vcm1hbGl6ZWRDb250ZW50O1xuICBsZXQgaGFzaCA9IDA7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBub3JtYWxpemVkU2Vzc2lvbklkLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGNvbnN0IGNvZGVQb2ludCA9IG5vcm1hbGl6ZWRTZXNzaW9uSWQuY29kZVBvaW50QXQoaW5kZXgpID8/IDA7XG4gICAgaGFzaCA9IChoYXNoICogMzEgKyBjb2RlUG9pbnQpID4+PiAwO1xuICAgIGlmIChjb2RlUG9pbnQgPiAweGZmZmYpIHtcbiAgICAgIGluZGV4ICs9IDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBGT0xMT1dFUl9BVVRIT1JJVFlfTU9OSVRPUl9DT05GSUcuaW50ZXJ2YWxNcyArIChoYXNoICUgKEZPTExPV0VSX0FVVEhPUklUWV9NT05JVE9SX0NPTkZJRy5qaXR0ZXJNcyArIDEpKTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBzdGFydGluZyB0aGUgdW5pZmllZCBjb25zb2xlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVuaWZpZWRDb25zb2xlT3B0aW9ucyB7XG4gIC8qKiBUaGlzIHByb2Nlc3MncyB1bmlxdWUgc2Vzc2lvbiBJRCAqL1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgLyoqIFN0YWJsZSBEb2xsaG91c2Ugc2Vzc2lvbiBpZGVudGl0eSBzaG93biB0byBodW1hbnMgYW5kIHVzZWQgZm9yIHBlcnNpc3RlbmNlLiAqL1xuICBzdGFibGVTZXNzaW9uSWQ6IHN0cmluZztcbiAgLyoqIFBvcnRmb2xpbyBiYXNlIGRpcmVjdG9yeSAoZm9yIHN0YXJ0V2ViU2VydmVyKSAqL1xuICBwb3J0Zm9saW9EaXI6IHN0cmluZztcbiAgLyoqIExvZyBtZW1vcnkgc2luayAoZm9yIGNvbnNvbGUgaGlzdG9yeSkgKi9cbiAgbWVtb3J5U2luazogTWVtb3J5TG9nU2luaztcbiAgLyoqIE1ldHJpY3MgbWVtb3J5IHNpbmsgKi9cbiAgbWV0cmljc1Npbms/OiBNZW1vcnlNZXRyaWNzU2luaztcbiAgLyoqIE1DUC1BUUwgaGFuZGxlciBmb3IgcGVybWlzc2lvbiByb3V0ZXMgKHR5cGVkIGFzIGFueSB0byBhdm9pZCBjaXJjdWxhciBpbXBvcnRzKSAqL1xuICBtY3BBcWxIYW5kbGVyPzogYW55O1xuICAvKiogQ2FsbGJhY2sgdG8gcmVnaXN0ZXIgYSBsb2cgc2luayB3aXRoIHRoZSBMb2dNYW5hZ2VyICovXG4gIHJlZ2lzdGVyTG9nU2luazogKHNpbms6IHsgd3JpdGUoZW50cnk6IFVuaWZpZWRMb2dFbnRyeSk6IHZvaWQ7IGZsdXNoKCk6IFByb21pc2U8dm9pZD47IGNsb3NlKCk6IFByb21pc2U8dm9pZD4gfSkgPT4gdm9pZDtcbiAgLyoqIENhbGxiYWNrIHRvIHdpcmUgU1NFIGJyb2FkY2FzdHMgYWZ0ZXIgd2ViIHNlcnZlciBzdGFydHMgKi9cbiAgd2lyZVNTRUJyb2FkY2FzdHM6ICh3ZWJSZXN1bHQ6IHsgbG9nQnJvYWRjYXN0PzogKGVudHJ5OiBVbmlmaWVkTG9nRW50cnkpID0+IHZvaWQ7IG1ldHJpY3NPblNuYXBzaG90PzogKHNuYXBzaG90OiBNZXRyaWNTbmFwc2hvdCkgPT4gdm9pZCB9LCBtZXRyaWNzU2luaz86IE1lbW9yeU1ldHJpY3NTaW5rKSA9PiB2b2lkO1xuICAvKiogQ29uc29sZSBwb3J0IG92ZXJyaWRlIGZyb20gY29uZmlnIGZpbGUuIEZhbGxzIGJhY2sgdG8gZW52IHZhciBpZiBub3QgcHJvdmlkZWQuICovXG4gIHBvcnQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIHN0YXJ0aW5nIHRoZSB1bmlmaWVkIGNvbnNvbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5pZmllZENvbnNvbGVSZXN1bHQge1xuICByb2xlOiAnbGVhZGVyJyB8ICdmb2xsb3dlcic7XG4gIGVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdDtcbiAgLyoqIFBvcnQgdGhlIGNvbnNvbGUgaXMgcnVubmluZyBvbiAobGVhZGVyIG9ubHkpICovXG4gIHBvcnQ/OiBudW1iZXI7XG4gIC8qKiBDbGVhbnVwIGZ1bmN0aW9uIHRvIGNhbGwgb24gc2h1dGRvd24gKi9cbiAgY2xlYW51cDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBDaGVjayBmb3IgYSBydW5uaW5nIGxlZ2FjeSAocHJlLWF1dGhlbnRpY2F0aW9uKSBEb2xsaG91c2VNQ1AgY29uc29sZSBhbmRcbiAqIGxvZyBhIFdBUk4tbGV2ZWwgbWVzc2FnZSBpZiBvbmUgaXMgZm91bmQgKCMxNzk0KS5cbiAqXG4gKiBFeHRyYWN0ZWQgZnJvbSBgc3RhcnRVbmlmaWVkQ29uc29sZWAgc28gdGhlIHdpcmluZyBjYW4gYmUgaW50ZWdyYXRpb24tXG4gKiB0ZXN0ZWQgaW4gaXNvbGF0aW9uIHdpdGhvdXQgc3Bpbm5pbmcgdXAgYSBmdWxsIHdlYiBzZXJ2ZXIgYW5kIGxlYWRlclxuICogZWxlY3Rpb24uIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBmaXJlLWFuZC1mb3JnZXQ6IGRldGVjdGlvbiBmYWlsdXJlc1xuICogYXJlIGxvZ2dlZCBhdCBERUJVRyBhbmQgbmV2ZXIgcHJvcGFnYXRlLCBiZWNhdXNlIGEgZmFpbHVyZSBoZXJlIG11c3RcbiAqIG5vdCBibG9jayBsZWFkZXIgZWxlY3Rpb24gb2YgdGhlIGF1dGhlbnRpY2F0ZWQgY29uc29sZS5cbiAqXG4gKiBAcGFyYW0gY3VycmVudFBvcnQgLSBUaGUgcG9ydCB0aGUgYXV0aGVudGljYXRlZCBjb25zb2xlIGludGVuZHMgdG9cbiAqICAgICAgICAgICAgICAgICAgICAgIGJpbmQgdG8uIFVzZWQgaW4gdGhlIHdhcm5pbmcgbWVzc2FnZSB0byBoZWxwIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgdXNlciB0ZWxsIHRoZSB0d28gY29uc29sZXMgYXBhcnQuXG4gKiBAcGFyYW0gZGV0ZWN0ICAgICAgLSBPcHRpb25hbCBpbmplY3Rpb24gcG9pbnQgZm9yIHRoZSBkZXRlY3Rpb25cbiAqICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLiBEZWZhdWx0cyB0byBgZGV0ZWN0TGVnYWN5TGVhZGVyYC4gVGVzdHNcbiAqICAgICAgICAgICAgICAgICAgICAgIHBhc3MgYSBzdHViLlxuICogQHBhcmFtIGxvZyAgICAgICAgIC0gT3B0aW9uYWwgaW5qZWN0aW9uIHBvaW50IGZvciB0aGUgbG9nZ2VyLiBEZWZhdWx0c1xuICogICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIG1vZHVsZSBsb2dnZXIuIFRlc3RzIHBhc3MgYSBzcHkuXG4gKiBAcmV0dXJucyBUaGUgbGVnYWN5IGxlYWRlciBpbmZvIGZyb20gYGRldGVjdCgpYCwgb3IgbnVsbCBpZiBkZXRlY3Rpb25cbiAqICAgICAgICAgIHRocmV3LiBFeHBvc2VkIHNvIHRlc3RzIGNhbiBhc3NlcnQgdGhlIGZ1bGwgcmVzdWx0IHNoYXBlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FybklmTGVnYWN5Q29uc29sZVByZXNlbnQoXG4gIGN1cnJlbnRQb3J0OiBudW1iZXIsXG4gIGRldGVjdDogdHlwZW9mIGRldGVjdExlZ2FjeUxlYWRlciA9IGRldGVjdExlZ2FjeUxlYWRlcixcbiAgbG9nOiB0eXBlb2YgbG9nZ2VyID0gbG9nZ2VyLFxuKTogUHJvbWlzZTxBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIGRldGVjdExlZ2FjeUxlYWRlcj4+IHwgbnVsbD4ge1xuICB0cnkge1xuICAgIGNvbnN0IGxlZ2FjeSA9IGF3YWl0IGRldGVjdCgpO1xuICAgIGlmIChsZWdhY3kubGVnYWN5UnVubmluZykge1xuICAgICAgbG9nLndhcm4oXG4gICAgICAgIGBbVW5pZmllZENvbnNvbGVdIExlZ2FjeSAocHJlLWF1dGhlbnRpY2F0aW9uKSBEb2xsaG91c2VNQ1AgY29uc29sZSBkZXRlY3RlZCBgICtcbiAgICAgICAgYChwaWQ9JHtsZWdhY3kucGlkfSwgcG9ydD0ke2xlZ2FjeS5wb3J0fSkuIEJvdGggY29uc29sZXMgd2lsbCBydW4gYCArXG4gICAgICAgIGBpbmRlcGVuZGVudGx5IG9uIGRpZmZlcmVudCBwb3J0cyB3aXRoIGRpZmZlcmVudCBzZWN1cml0eSBwb3N0dXJlLiBgICtcbiAgICAgICAgYFRoZSBhdXRoZW50aWNhdGVkIGNvbnNvbGUgKHRoaXMgcHJvY2VzcykgdXNlcyBwb3J0ICR7Y3VycmVudFBvcnR9OyBgICtcbiAgICAgICAgYHRoZSBsZWdhY3kgY29uc29sZSB1c2VzIHBvcnQgJHtsZWdhY3kucG9ydCA/PyBMRUdBQ1lfQ09OU09MRV9GQUxMQkFDS19QT1JUfS4gYCArXG4gICAgICAgIGBGb3IgY29uc2lzdGVudCBzZWN1cml0eSwgdXBkYXRlIHRoZSBsZWdhY3kgaW5zdGFsbGF0aW9uIHRvIGEgYCArXG4gICAgICAgIGB2ZXJzaW9uIHdpdGggdGhlIGF1dGhlbnRpY2F0ZWQgY29uc29sZS5gLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGxlZ2FjeTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gQmVzdC1lZmZvcnQg4oCUIG5ldmVyIGJsb2NrIGVsZWN0aW9uIG9uIGEgZGV0ZWN0aW9uIGZhaWx1cmVcbiAgICBsb2cuZGVidWcoJ1tVbmlmaWVkQ29uc29sZV0gTGVnYWN5IGxlYWRlciBkZXRlY3Rpb24gZmFpbGVkJywge1xuICAgICAgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSxcbiAgICB9KTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5pbnRlcmZhY2UgU2Vzc2lvbkFwaVJlY29yZCB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBwaWQ6IG51bWJlcjtcbiAgc3RhcnRlZEF0Pzogc3RyaW5nO1xuICBsYXN0SGVhcnRiZWF0Pzogc3RyaW5nO1xuICBzdGF0dXM/OiBzdHJpbmc7XG4gIGlzTGVhZGVyPzogYm9vbGVhbjtcbiAga2luZD86IHN0cmluZztcbiAgc2VydmVyVmVyc2lvbj86IHN0cmluZztcbiAgY29uc29sZVByb3RvY29sVmVyc2lvbj86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQb3J0TGVhZGVyRGlzY292ZXJ5IHtcbiAgbGVhZGVySW5mbzogQ29uc29sZUxlYWRlckluZm8gfCBudWxsO1xuICBvd25lclBpZDogbnVtYmVyIHwgbnVsbDtcbiAgc291cmNlOiAnYXBpJyB8ICdsb2NrJyB8ICdzeW50aGV0aWMnIHwgJ25vbmUnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJpbmRGYWlsdXJlUmVjb3ZlcnlSZXN1bHQgZXh0ZW5kcyBQb3J0TGVhZGVyRGlzY292ZXJ5IHtcbiAgbG9ja0NsZWFudXBBdHRlbXB0ZWQ6IGJvb2xlYW47XG4gIGxvY2tDbGVhbnVwUGVyZm9ybWVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvcnRPd25lclJlcGxhY2VtZW50RGVjaXNpb24ge1xuICBzaG91bGRFdmljdDogYm9vbGVhbjtcbiAgb3duZXJQaWQ6IG51bWJlciB8IG51bGw7XG4gIHByZWZlcmVuY2U6IExlYWRlclByZWZlcmVuY2VEZWNpc2lvbiB8IG51bGw7XG59XG5cbmludGVyZmFjZSBGb3JjZVRha2VvdmVyQXR0ZW1wdFJlc3VsdCB7XG4gIHdlYlJlc3VsdDogV2ViU2VydmVyUmVzdWx0O1xuICBlbGVjdGlvbjogRWxlY3Rpb25SZXN1bHQ7XG4gIGZhbGxiYWNrOiBQb3J0TGVhZGVyRGlzY292ZXJ5O1xuICByZXBsYWNlbWVudDogUG9ydE93bmVyUmVwbGFjZW1lbnREZWNpc2lvbjtcbiAgZm9yY2VkS2lsbDogS2lsbFN0YWxlUHJvY2Vzc091dGNvbWUgfCBudWxsO1xuICB0YWtlb3ZlckF0dGVtcHRlZDogYm9vbGVhbjtcbiAgcmVib3VuZExvY2tDbGFpbWVkOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgRm9sbG93ZXJBdXRob3JpdHlSZXNvbHV0aW9uIHtcbiAgZWxlY3Rpb246IEVsZWN0aW9uUmVzdWx0O1xuICBkaXNjb3Zlcnk6IFBvcnRMZWFkZXJEaXNjb3ZlcnkgfCBudWxsO1xuICByZXBsYWNlbWVudDogUG9ydE93bmVyUmVwbGFjZW1lbnREZWNpc2lvbiB8IG51bGw7XG4gIGZvcmNlZENsYWltOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgRm9sbG93ZXJBdXRob3JpdHlEZXBlbmRlbmNpZXMge1xuICBpc0xlYWRlcldlYkNvbnNvbGVSZWFjaGFibGVJbXBsPzogdHlwZW9mIGlzTGVhZGVyV2ViQ29uc29sZVJlYWNoYWJsZTtcbiAgZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydEltcGw/OiB0eXBlb2YgZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydDtcbiAgZm9yY2VDbGFpbUxlYWRlcnNoaXBJbXBsPzogdHlwZW9mIGZvcmNlQ2xhaW1MZWFkZXJzaGlwO1xuICBkZWxldGVMZWFkZXJMb2NrSW1wbD86IHR5cGVvZiBkZWxldGVMZWFkZXJMb2NrO1xufVxuXG5pbnRlcmZhY2UgRm9sbG93ZXJBdXRob3JpdHlNb25pdG9yRGVwZW5kZW5jaWVzIGV4dGVuZHMgRm9sbG93ZXJBdXRob3JpdHlEZXBlbmRlbmNpZXMge1xuICByZXNvbHZlRm9sbG93ZXJBdXRob3JpdHlJbXBsPzogdHlwZW9mIHJlc29sdmVGb2xsb3dlckF1dGhvcml0eTtcbiAgc2V0SW50ZXJ2YWxJbXBsPzogdHlwZW9mIHNldEludGVydmFsO1xuICBjbGVhckludGVydmFsSW1wbD86IHR5cGVvZiBjbGVhckludGVydmFsO1xuICBub3dJbXBsPzogKCkgPT4gbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgRGlzY292ZXJ5RGVwZW5kZW5jaWVzIHtcbiAgZmV0Y2hJbXBsPzogdHlwZW9mIGZldGNoO1xuICBmaW5kUGlkT25Qb3J0SW1wbD86IHR5cGVvZiBmaW5kUGlkT25Qb3J0O1xuICByZWFkTGVhZGVyTG9ja0ltcGw/OiB0eXBlb2YgcmVhZExlYWRlckxvY2s7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRGlzY292ZXJ5SGVhZGVycyhhdXRoVG9rZW46IHN0cmluZyB8IG51bGwpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgcmV0dXJuIGF1dGhUb2tlbiA/IHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2F1dGhUb2tlbn1gIH0gOiB7fTtcbn1cblxuZnVuY3Rpb24gYnVpbGRMZWFkZXJJbmZvRnJvbVNlc3Npb24ocG9ydDogbnVtYmVyLCBvd25lclBpZDogbnVtYmVyLCBsZWFkZXJTZXNzaW9uOiBTZXNzaW9uQXBpUmVjb3JkKTogQ29uc29sZUxlYWRlckluZm8ge1xuICByZXR1cm4ge1xuICAgIHZlcnNpb246IExPQ0tfVkVSU0lPTixcbiAgICBwaWQ6IG93bmVyUGlkLFxuICAgIHBvcnQsXG4gICAgc2Vzc2lvbklkOiBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShsZWFkZXJTZXNzaW9uLnNlc3Npb25JZCkubm9ybWFsaXplZENvbnRlbnQsXG4gICAgc3RhcnRlZEF0OiBsZWFkZXJTZXNzaW9uLnN0YXJ0ZWRBdCA/PyBjdXJyZW50VGltZXN0YW1wKCksXG4gICAgaGVhcnRiZWF0OiBsZWFkZXJTZXNzaW9uLmxhc3RIZWFydGJlYXQgPz8gY3VycmVudFRpbWVzdGFtcCgpLFxuICAgIHNlcnZlclZlcnNpb246IGxlYWRlclNlc3Npb24uc2VydmVyVmVyc2lvbiA/PyBMRUdBQ1lfU0VSVkVSX1ZFUlNJT04sXG4gICAgY29uc29sZVByb3RvY29sVmVyc2lvbjogbGVhZGVyU2Vzc2lvbi5jb25zb2xlUHJvdG9jb2xWZXJzaW9uID8/IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTixcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRTeW50aGV0aWNMZWFkZXJJbmZvKHBvcnQ6IG51bWJlciwgb3duZXJQaWQ6IG51bWJlcik6IENvbnNvbGVMZWFkZXJJbmZvIHtcbiAgY29uc3Qgbm93ID0gY3VycmVudFRpbWVzdGFtcCgpO1xuICByZXR1cm4ge1xuICAgIHZlcnNpb246IExPQ0tfVkVSU0lPTixcbiAgICBwaWQ6IG93bmVyUGlkLFxuICAgIHBvcnQsXG4gICAgc2Vzc2lvbklkOiBgJHtTWU5USEVUSUNfUE9SVF9PV05FUl9TRVNTSU9OX1BSRUZJWH0ke293bmVyUGlkfWAsXG4gICAgc3RhcnRlZEF0OiBub3csXG4gICAgaGVhcnRiZWF0OiBub3csXG4gICAgc2VydmVyVmVyc2lvbjogTEVHQUNZX1NFUlZFUl9WRVJTSU9OLFxuICAgIGNvbnNvbGVQcm90b2NvbFZlcnNpb246IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTixcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGlzY292ZXJMZWFkZXJWaWFTZXNzaW9uc0FwaShcbiAgcG9ydDogbnVtYmVyLFxuICBvd25lclBpZDogbnVtYmVyLFxuICBhdXRoVG9rZW46IHN0cmluZyB8IG51bGwsXG4gIGZldGNoSW1wbDogdHlwZW9mIGZldGNoLFxuKTogUHJvbWlzZTxDb25zb2xlTGVhZGVySW5mbyB8IG51bGw+IHtcbiAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCBMRUFERVJfRElTQ09WRVJZX1RJTUVPVVRfTVMpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaEltcGwoYGh0dHA6Ly8xMjcuMC4wLjE6JHtwb3J0fS9hcGkvc2Vzc2lvbnNgLCB7XG4gICAgICBoZWFkZXJzOiBidWlsZERpc2NvdmVyeUhlYWRlcnMoYXV0aFRva2VuKSxcbiAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyB7IHNlc3Npb25zPzogU2Vzc2lvbkFwaVJlY29yZFtdIH07XG4gICAgY29uc3Qgc2Vzc2lvbnMgPSBBcnJheS5pc0FycmF5KHBheWxvYWQuc2Vzc2lvbnMpID8gcGF5bG9hZC5zZXNzaW9ucyA6IFtdO1xuICAgIGNvbnN0IGxlYWRlclNlc3Npb24gPSBzZXNzaW9ucy5maW5kKChzZXNzaW9uKSA9PlxuICAgICAgc2Vzc2lvbi5waWQgPT09IG93bmVyUGlkICYmXG4gICAgICBzZXNzaW9uLmlzTGVhZGVyID09PSB0cnVlICYmXG4gICAgICBzZXNzaW9uLmtpbmQgPT09ICdtY3AnICYmXG4gICAgICBzZXNzaW9uLnN0YXR1cyAhPT0gJ3N0b3BwZWQnXG4gICAgKTtcbiAgICByZXR1cm4gbGVhZGVyU2Vzc2lvbiA/IGJ1aWxkTGVhZGVySW5mb0Zyb21TZXNzaW9uKHBvcnQsIG93bmVyUGlkLCBsZWFkZXJTZXNzaW9uKSA6IG51bGw7XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkaXNjb3ZlckxlYWRlclNlcnZpbmdQb3J0KFxuICBwb3J0OiBudW1iZXIsXG4gIGF1dGhUb2tlbjogc3RyaW5nIHwgbnVsbCxcbiAgZGVwczogRGlzY292ZXJ5RGVwZW5kZW5jaWVzID0ge30sXG4pOiBQcm9taXNlPFBvcnRMZWFkZXJEaXNjb3Zlcnk+IHtcbiAgY29uc3QgZmV0Y2hJbXBsID0gZGVwcy5mZXRjaEltcGwgPz8gZmV0Y2g7XG4gIGNvbnN0IGZpbmRQaWRPblBvcnRJbXBsID0gZGVwcy5maW5kUGlkT25Qb3J0SW1wbCA/PyBmaW5kUGlkT25Qb3J0O1xuICBjb25zdCByZWFkTGVhZGVyTG9ja0ltcGwgPSBkZXBzLnJlYWRMZWFkZXJMb2NrSW1wbCA/PyByZWFkTGVhZGVyTG9jaztcbiAgY29uc3Qgb3duZXJQaWQgPSBhd2FpdCBmaW5kUGlkT25Qb3J0SW1wbChwb3J0KTtcblxuICBpZiAob3duZXJQaWQgIT09IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbGVhZGVySW5mbyA9IGF3YWl0IGRpc2NvdmVyTGVhZGVyVmlhU2Vzc2lvbnNBcGkocG9ydCwgb3duZXJQaWQsIGF1dGhUb2tlbiwgZmV0Y2hJbXBsKTtcbiAgICAgIGlmIChsZWFkZXJJbmZvKSB7XG4gICAgICAgIHJldHVybiB7IG93bmVyUGlkLCBzb3VyY2U6ICdhcGknLCBsZWFkZXJJbmZvIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ1tVbmlmaWVkQ29uc29sZV0gRmFpbGVkIHRvIHF1ZXJ5IGFjdGl2ZSBsZWFkZXIgc2Vzc2lvbnMnLCB7XG4gICAgICAgIHBvcnQsXG4gICAgICAgIG93bmVyUGlkLFxuICAgICAgICBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbG9jayA9IGF3YWl0IHJlYWRMZWFkZXJMb2NrSW1wbCgpO1xuICBpZiAobG9jaz8ucG9ydCA9PT0gcG9ydCAmJiAob3duZXJQaWQgPT09IG51bGwgfHwgbG9jay5waWQgPT09IG93bmVyUGlkKSkge1xuICAgIHJldHVybiB7XG4gICAgICBvd25lclBpZDogb3duZXJQaWQgPz8gbG9jay5waWQsXG4gICAgICBzb3VyY2U6ICdsb2NrJyxcbiAgICAgIGxlYWRlckluZm86IHtcbiAgICAgICAgLi4ubG9jayxcbiAgICAgICAgc2Vzc2lvbklkOiBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShsb2NrLnNlc3Npb25JZCkubm9ybWFsaXplZENvbnRlbnQsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAob3duZXJQaWQgIT09IG51bGwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3duZXJQaWQsXG4gICAgICBzb3VyY2U6ICdzeW50aGV0aWMnLFxuICAgICAgbGVhZGVySW5mbzogYnVpbGRTeW50aGV0aWNMZWFkZXJJbmZvKHBvcnQsIG93bmVyUGlkKSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHsgbGVhZGVySW5mbzogbnVsbCwgb3duZXJQaWQ6IG51bGwsIHNvdXJjZTogJ25vbmUnIH07XG59XG5cbmludGVyZmFjZSBCaW5kRmFpbHVyZVJlY292ZXJ5RGVwZW5kZW5jaWVzIGV4dGVuZHMgRGlzY292ZXJ5RGVwZW5kZW5jaWVzIHtcbiAgZGVsZXRlTGVhZGVyTG9ja0ltcGw/OiB0eXBlb2YgZGVsZXRlTGVhZGVyTG9jaztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlY292ZXJMZWFkZXJCaW5kRmFpbHVyZShcbiAgcHJvdmlzaW9uYWxMZWFkZXI6IENvbnNvbGVMZWFkZXJJbmZvLFxuICBwb3J0OiBudW1iZXIsXG4gIGF1dGhUb2tlbjogc3RyaW5nIHwgbnVsbCxcbiAgZGVwczogQmluZEZhaWx1cmVSZWNvdmVyeURlcGVuZGVuY2llcyA9IHt9LFxuKTogUHJvbWlzZTxCaW5kRmFpbHVyZVJlY292ZXJ5UmVzdWx0PiB7XG4gIGNvbnN0IHJlYWRMZWFkZXJMb2NrSW1wbCA9IGRlcHMucmVhZExlYWRlckxvY2tJbXBsID8/IHJlYWRMZWFkZXJMb2NrO1xuICBjb25zdCBkZWxldGVMZWFkZXJMb2NrSW1wbCA9IGRlcHMuZGVsZXRlTGVhZGVyTG9ja0ltcGwgPz8gZGVsZXRlTGVhZGVyTG9jaztcbiAgbG9nZ2VyLmluZm8oJ1tVbmlmaWVkQ29uc29sZV0gTGVhZGVyIGJpbmQgcmVjb3ZlcnkgaW5pdGlhdGVkJywge1xuICAgIHByb3Zpc2lvbmFsU2Vzc2lvbklkOiBwcm92aXNpb25hbExlYWRlci5zZXNzaW9uSWQsXG4gICAgcHJvdmlzaW9uYWxQaWQ6IHByb3Zpc2lvbmFsTGVhZGVyLnBpZCxcbiAgICBwb3J0LFxuICB9KTtcblxuICBsZXQgZmFsbGJhY2sgPSBhd2FpdCBkaXNjb3ZlckxlYWRlclNlcnZpbmdQb3J0KHBvcnQsIGF1dGhUb2tlbiwgZGVwcyk7XG4gIGxldCBsb2NrQ2xlYW51cEF0dGVtcHRlZCA9IGZhbHNlO1xuICBsZXQgbG9ja0NsZWFudXBQZXJmb3JtZWQgPSBmYWxzZTtcbiAgY29uc3QgY3VycmVudExvY2sgPSBhd2FpdCByZWFkTGVhZGVyTG9ja0ltcGwoKTtcbiAgY29uc3QgcHJvdmlzaW9uYWxMb2NrTWF0Y2hlcyA9IChcbiAgICBjdXJyZW50TG9jaz8ucGlkID09PSBwcm92aXNpb25hbExlYWRlci5waWQgJiZcbiAgICBjdXJyZW50TG9jay5wb3J0ID09PSBwcm92aXNpb25hbExlYWRlci5wb3J0ICYmXG4gICAgY3VycmVudExvY2suc2Vzc2lvbklkID09PSBwcm92aXNpb25hbExlYWRlci5zZXNzaW9uSWRcbiAgKTtcbiAgY29uc3QgZmFsbGJhY2tQb2ludHNUb1Byb3Zpc2lvbmFsTGVhZGVyID0gKFxuICAgIGZhbGxiYWNrLmxlYWRlckluZm8/LnBpZCA9PT0gcHJvdmlzaW9uYWxMZWFkZXIucGlkICYmXG4gICAgZmFsbGJhY2subGVhZGVySW5mby5wb3J0ID09PSBwcm92aXNpb25hbExlYWRlci5wb3J0ICYmXG4gICAgZmFsbGJhY2subGVhZGVySW5mby5zZXNzaW9uSWQgPT09IHByb3Zpc2lvbmFsTGVhZGVyLnNlc3Npb25JZFxuICApO1xuXG4gIGlmIChwcm92aXNpb25hbExvY2tNYXRjaGVzKSB7XG4gICAgbG9ja0NsZWFudXBBdHRlbXB0ZWQgPSB0cnVlO1xuICAgIGF3YWl0IGRlbGV0ZUxlYWRlckxvY2tJbXBsKCk7XG4gICAgbG9ja0NsZWFudXBQZXJmb3JtZWQgPSB0cnVlO1xuICAgIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIFJlbW92ZWQgcHJvdmlzaW9uYWwgbGVhZGVyIGxvY2sgYWZ0ZXIgYmluZCBmYWlsdXJlJywge1xuICAgICAgcHJvdmlzaW9uYWxTZXNzaW9uSWQ6IHByb3Zpc2lvbmFsTGVhZGVyLnNlc3Npb25JZCxcbiAgICAgIHByb3Zpc2lvbmFsUGlkOiBwcm92aXNpb25hbExlYWRlci5waWQsXG4gICAgICBwb3J0LFxuICAgIH0pO1xuICAgIGlmIChmYWxsYmFja1BvaW50c1RvUHJvdmlzaW9uYWxMZWFkZXIpIHtcbiAgICAgIGZhbGxiYWNrID0gYXdhaXQgZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydChwb3J0LCBhdXRoVG9rZW4sIGRlcHMpO1xuICAgIH1cbiAgfVxuXG4gIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIExlYWRlciBiaW5kIHJlY292ZXJ5IGNvbXBsZXRlZCcsIHtcbiAgICBwcm92aXNpb25hbFNlc3Npb25JZDogcHJvdmlzaW9uYWxMZWFkZXIuc2Vzc2lvbklkLFxuICAgIHByb3Zpc2lvbmFsUGlkOiBwcm92aXNpb25hbExlYWRlci5waWQsXG4gICAgcG9ydCxcbiAgICBkaXNjb3ZlcnlTb3VyY2U6IGZhbGxiYWNrLnNvdXJjZSxcbiAgICBvd25lclBpZDogZmFsbGJhY2sub3duZXJQaWQsXG4gICAgbG9ja0NsZWFudXBBdHRlbXB0ZWQsXG4gICAgbG9ja0NsZWFudXBQZXJmb3JtZWQsXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4uZmFsbGJhY2ssXG4gICAgbG9ja0NsZWFudXBBdHRlbXB0ZWQsXG4gICAgbG9ja0NsZWFudXBQZXJmb3JtZWQsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmFsdWF0ZVBvcnRPd25lclJlcGxhY2VtZW50KFxuICBjYW5kaWRhdGVMZWFkZXI6IENvbnNvbGVMZWFkZXJJbmZvLFxuICBmYWxsYmFjazogUG9ydExlYWRlckRpc2NvdmVyeSxcbik6IFBvcnRPd25lclJlcGxhY2VtZW50RGVjaXNpb24ge1xuICBpZiAoIWZhbGxiYWNrLmxlYWRlckluZm8gfHwgZmFsbGJhY2sub3duZXJQaWQgPT09IG51bGwgfHwgZmFsbGJhY2sub3duZXJQaWQgPT09IGNhbmRpZGF0ZUxlYWRlci5waWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvdWxkRXZpY3Q6IGZhbHNlLFxuICAgICAgb3duZXJQaWQ6IGZhbGxiYWNrLm93bmVyUGlkLFxuICAgICAgcHJlZmVyZW5jZTogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcHJlZmVyZW5jZSA9IGV2YWx1YXRlTGVhZGVyUHJlZmVyZW5jZShjYW5kaWRhdGVMZWFkZXIsIGZhbGxiYWNrLmxlYWRlckluZm8pO1xuICByZXR1cm4ge1xuICAgIHNob3VsZEV2aWN0OiBwcmVmZXJlbmNlLnNob3VsZFJlcGxhY2UsXG4gICAgb3duZXJQaWQ6IGZhbGxiYWNrLm93bmVyUGlkLFxuICAgIHByZWZlcmVuY2UsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQmluZEZhaWx1cmVMb2dDb250ZXh0KFxuICBjb25zb2xlUG9ydDogbnVtYmVyLFxuICBwcm92aXNpb25hbExlYWRlcjogQ29uc29sZUxlYWRlckluZm8sXG4gIGJpbmRSZXN1bHQ6IFdlYlNlcnZlclJlc3VsdFsnYmluZFJlc3VsdCddLFxuICBmYWxsYmFjazogUG9ydExlYWRlckRpc2NvdmVyeSxcbiAgcmVwbGFjZW1lbnQ/OiBQb3J0T3duZXJSZXBsYWNlbWVudERlY2lzaW9uLFxuICBmb3JjZWRLaWxsPzogS2lsbFN0YWxlUHJvY2Vzc091dGNvbWUgfCBudWxsLFxuKSB7XG4gIHJldHVybiB7XG4gICAgcG9ydDogY29uc29sZVBvcnQsXG4gICAgYmluZEVycm9yOiBiaW5kUmVzdWx0Py5lcnJvcixcbiAgICBiaW5kRGV0YWlsOiBiaW5kUmVzdWx0Py5kZXRhaWwsXG4gICAgcHJvdmlzaW9uYWxMZWFkZXJQaWQ6IHByb3Zpc2lvbmFsTGVhZGVyLnBpZCxcbiAgICBwcm92aXNpb25hbExlYWRlclNlc3Npb25JZDogcHJvdmlzaW9uYWxMZWFkZXIuc2Vzc2lvbklkLFxuICAgIHByb3Zpc2lvbmFsTGVhZGVyVmVyc2lvbjogcHJvdmlzaW9uYWxMZWFkZXIuc2VydmVyVmVyc2lvbiA/PyBMRUdBQ1lfU0VSVkVSX1ZFUlNJT04sXG4gICAgcHJvdmlzaW9uYWxMZWFkZXJQcm90b2NvbFZlcnNpb246IHByb3Zpc2lvbmFsTGVhZGVyLmNvbnNvbGVQcm90b2NvbFZlcnNpb24gPz8gQ09OU09MRV9QUk9UT0NPTF9WRVJTSU9OLFxuICAgIGZhbGxiYWNrT3duZXJQaWQ6IGZhbGxiYWNrLm93bmVyUGlkLFxuICAgIGZhbGxiYWNrU291cmNlOiBmYWxsYmFjay5zb3VyY2UsXG4gICAgZmFsbGJhY2tMZWFkZXJQaWQ6IGZhbGxiYWNrLmxlYWRlckluZm8/LnBpZCxcbiAgICBmYWxsYmFja0xlYWRlclNlc3Npb25JZDogZmFsbGJhY2subGVhZGVySW5mbz8uc2Vzc2lvbklkLFxuICAgIGZhbGxiYWNrTGVhZGVyVmVyc2lvbjogZmFsbGJhY2subGVhZGVySW5mbz8uc2VydmVyVmVyc2lvbiA/PyBMRUdBQ1lfU0VSVkVSX1ZFUlNJT04sXG4gICAgZmFsbGJhY2tMZWFkZXJQcm90b2NvbFZlcnNpb246IGZhbGxiYWNrLmxlYWRlckluZm8/LmNvbnNvbGVQcm90b2NvbFZlcnNpb24gPz8gQ09OU09MRV9QUk9UT0NPTF9WRVJTSU9OLFxuICAgIHJlcGxhY2VtZW50U2hvdWxkRXZpY3Q6IHJlcGxhY2VtZW50Py5zaG91bGRFdmljdCA/PyBmYWxzZSxcbiAgICByZXBsYWNlbWVudFJlYXNvbjogcmVwbGFjZW1lbnQ/LnByZWZlcmVuY2U/LnJlYXNvbixcbiAgICBmb3JjZWRLaWxsUmVhc29uOiBmb3JjZWRLaWxsPy5yZWFzb24sXG4gICAgZm9yY2VkS2lsbFBpZDogZm9yY2VkS2lsbD8ucGlkLFxuICAgIGZvcmNlZEtpbGxEZXRhaWw6IGZvcmNlZEtpbGw/LmRldGFpbCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBdXRob3JpdHlSZXNvbHV0aW9uTG9nQ29udGV4dChcbiAgY29uc29sZVBvcnQ6IG51bWJlcixcbiAgZWxlY3RlZExlYWRlcjogQ29uc29sZUxlYWRlckluZm8sXG4gIGRpc2NvdmVyeTogUG9ydExlYWRlckRpc2NvdmVyeSB8IG51bGwsXG4gIHJlcGxhY2VtZW50OiBQb3J0T3duZXJSZXBsYWNlbWVudERlY2lzaW9uIHwgbnVsbCxcbikge1xuICByZXR1cm4ge1xuICAgIHBvcnQ6IGNvbnNvbGVQb3J0LFxuICAgIGVsZWN0ZWRMZWFkZXJQaWQ6IGVsZWN0ZWRMZWFkZXIucGlkLFxuICAgIGVsZWN0ZWRMZWFkZXJTZXNzaW9uSWQ6IGVsZWN0ZWRMZWFkZXIuc2Vzc2lvbklkLFxuICAgIGVsZWN0ZWRMZWFkZXJWZXJzaW9uOiBlbGVjdGVkTGVhZGVyLnNlcnZlclZlcnNpb24gPz8gTEVHQUNZX1NFUlZFUl9WRVJTSU9OLFxuICAgIGVsZWN0ZWRMZWFkZXJQcm90b2NvbFZlcnNpb246IGVsZWN0ZWRMZWFkZXIuY29uc29sZVByb3RvY29sVmVyc2lvbiA/PyBDT05TT0xFX1BST1RPQ09MX1ZFUlNJT04sXG4gICAgc2VydmluZ093bmVyUGlkOiBkaXNjb3Zlcnk/Lm93bmVyUGlkID8/IG51bGwsXG4gICAgc2VydmluZ1NvdXJjZTogZGlzY292ZXJ5Py5zb3VyY2UgPz8gJ25vbmUnLFxuICAgIHNlcnZpbmdMZWFkZXJQaWQ6IGRpc2NvdmVyeT8ubGVhZGVySW5mbz8ucGlkID8/IG51bGwsXG4gICAgc2VydmluZ0xlYWRlclNlc3Npb25JZDogZGlzY292ZXJ5Py5sZWFkZXJJbmZvPy5zZXNzaW9uSWQgPz8gbnVsbCxcbiAgICBzZXJ2aW5nTGVhZGVyVmVyc2lvbjogZGlzY292ZXJ5Py5sZWFkZXJJbmZvPy5zZXJ2ZXJWZXJzaW9uID8/IExFR0FDWV9TRVJWRVJfVkVSU0lPTixcbiAgICBzZXJ2aW5nTGVhZGVyUHJvdG9jb2xWZXJzaW9uOiBkaXNjb3Zlcnk/LmxlYWRlckluZm8/LmNvbnNvbGVQcm90b2NvbFZlcnNpb24gPz8gQ09OU09MRV9QUk9UT0NPTF9WRVJTSU9OLFxuICAgIHJlcGxhY2VtZW50U2hvdWxkRXZpY3Q6IHJlcGxhY2VtZW50Py5zaG91bGRFdmljdCA/PyBmYWxzZSxcbiAgICByZXBsYWNlbWVudFJlYXNvbjogcmVwbGFjZW1lbnQ/LnByZWZlcmVuY2U/LnJlYXNvbiA/PyBudWxsLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUZvbGxvd2VyQXV0aG9yaXR5KFxuICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgY29uc29sZVBvcnQ6IG51bWJlcixcbiAgZWxlY3Rpb246IEVsZWN0aW9uUmVzdWx0LFxuICBkZXBzOiBGb2xsb3dlckF1dGhvcml0eURlcGVuZGVuY2llcyA9IHt9LFxuKTogUHJvbWlzZTxGb2xsb3dlckF1dGhvcml0eVJlc29sdXRpb24+IHtcbiAgY29uc3QgaXNMZWFkZXJXZWJDb25zb2xlUmVhY2hhYmxlSW1wbCA9IGRlcHMuaXNMZWFkZXJXZWJDb25zb2xlUmVhY2hhYmxlSW1wbCA/PyBpc0xlYWRlcldlYkNvbnNvbGVSZWFjaGFibGU7XG4gIGNvbnN0IGRpc2NvdmVyTGVhZGVyU2VydmluZ1BvcnRJbXBsID0gZGVwcy5kaXNjb3ZlckxlYWRlclNlcnZpbmdQb3J0SW1wbCA/PyBkaXNjb3ZlckxlYWRlclNlcnZpbmdQb3J0O1xuICBjb25zdCBmb3JjZUNsYWltTGVhZGVyc2hpcEltcGwgPSBkZXBzLmZvcmNlQ2xhaW1MZWFkZXJzaGlwSW1wbCA/PyBmb3JjZUNsYWltTGVhZGVyc2hpcDtcbiAgY29uc3QgZGVsZXRlTGVhZGVyTG9ja0ltcGwgPSBkZXBzLmRlbGV0ZUxlYWRlckxvY2tJbXBsID8/IGRlbGV0ZUxlYWRlckxvY2s7XG5cbiAgY29uc3QgcmVhY2hhYmxlID0gYXdhaXQgaXNMZWFkZXJXZWJDb25zb2xlUmVhY2hhYmxlSW1wbChlbGVjdGlvbi5sZWFkZXJJbmZvKTtcbiAgaWYgKCFyZWFjaGFibGUpIHtcbiAgICBsb2dnZXIud2FybignW1VuaWZpZWRDb25zb2xlXSBFbGVjdGVkIGxlYWRlciBpcyBub3Qgc2VydmluZyB0aGUgY29uc29sZSBwb3J0OyBmb3JjaW5nIHRha2VvdmVyJywge1xuICAgICAgcG9ydDogY29uc29sZVBvcnQsXG4gICAgICBlbGVjdGVkTGVhZGVyUGlkOiBlbGVjdGlvbi5sZWFkZXJJbmZvLnBpZCxcbiAgICAgIGVsZWN0ZWRMZWFkZXJTZXNzaW9uSWQ6IGVsZWN0aW9uLmxlYWRlckluZm8uc2Vzc2lvbklkLFxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBlbGVjdGlvbjogYXdhaXQgZm9yY2VDbGFpbUxlYWRlcnNoaXBJbXBsKHNlc3Npb25JZCwgY29uc29sZVBvcnQpLFxuICAgICAgZGlzY292ZXJ5OiBudWxsLFxuICAgICAgcmVwbGFjZW1lbnQ6IG51bGwsXG4gICAgICBmb3JjZWRDbGFpbTogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgY2FuZGlkYXRlTGVhZGVyID0gY3JlYXRlTGVhZGVySW5mbyhzZXNzaW9uSWQsIGNvbnNvbGVQb3J0KTtcbiAgY29uc3QgZGlzY292ZXJ5ID0gYXdhaXQgZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydEltcGwoY29uc29sZVBvcnQsIG51bGwpO1xuICBpZiAoIWRpc2NvdmVyeS5sZWFkZXJJbmZvIHx8IGRpc2NvdmVyeS5vd25lclBpZCA9PT0gbnVsbCkge1xuICAgIHJldHVybiB7XG4gICAgICBlbGVjdGlvbixcbiAgICAgIGRpc2NvdmVyeSxcbiAgICAgIHJlcGxhY2VtZW50OiBudWxsLFxuICAgICAgZm9yY2VkQ2xhaW06IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBjb25zdCByZXBsYWNlbWVudCA9IGV2YWx1YXRlUG9ydE93bmVyUmVwbGFjZW1lbnQoY2FuZGlkYXRlTGVhZGVyLCBkaXNjb3ZlcnkpO1xuICBpZiAocmVwbGFjZW1lbnQuc2hvdWxkRXZpY3QpIHtcbiAgICBhd2FpdCBkZWxldGVMZWFkZXJMb2NrSW1wbCgpO1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgZGlzY292ZXJ5Lm93bmVyUGlkID09PSBlbGVjdGlvbi5sZWFkZXJJbmZvLnBpZFxuICAgICAgICA/ICdbVW5pZmllZENvbnNvbGVdIE9sZGVyIGNvbnNvbGUgbGVhZGVyIGRldGVjdGVkIG9uIHRoZSBjb25zb2xlIHBvcnQ7IG5ld2VyIHNlc3Npb24gd2lsbCB0YWtlIG92ZXInXG4gICAgICAgIDogJ1tVbmlmaWVkQ29uc29sZV0gU3BsaXQtYnJhaW4gY29uc29sZSBhdXRob3JpdHkgZGV0ZWN0ZWQ7IG5ld2VyIHNlc3Npb24gd2lsbCByZXBsYWNlIHRoZSBhY3R1YWwgcG9ydCBvd25lcicsXG4gICAgICBidWlsZEF1dGhvcml0eVJlc29sdXRpb25Mb2dDb250ZXh0KFxuICAgICAgICBjb25zb2xlUG9ydCxcbiAgICAgICAgZWxlY3Rpb24ubGVhZGVySW5mbyxcbiAgICAgICAgZGlzY292ZXJ5LFxuICAgICAgICByZXBsYWNlbWVudCxcbiAgICAgICksXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgZWxlY3Rpb246IHsgcm9sZTogJ2xlYWRlcicsIGxlYWRlckluZm86IGNhbmRpZGF0ZUxlYWRlciB9LFxuICAgICAgZGlzY292ZXJ5LFxuICAgICAgcmVwbGFjZW1lbnQsXG4gICAgICBmb3JjZWRDbGFpbTogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIGlmIChkaXNjb3Zlcnkub3duZXJQaWQgIT09IGVsZWN0aW9uLmxlYWRlckluZm8ucGlkKSB7XG4gICAgbG9nZ2VyLndhcm4oJ1tVbmlmaWVkQ29uc29sZV0gU3BsaXQtYnJhaW4gY29uc29sZSBhdXRob3JpdHkgZGV0ZWN0ZWQ7IGZvbGxvd2luZyB0aGUgYWN0dWFsIHBvcnQgb3duZXInLCBidWlsZEF1dGhvcml0eVJlc29sdXRpb25Mb2dDb250ZXh0KFxuICAgICAgY29uc29sZVBvcnQsXG4gICAgICBlbGVjdGlvbi5sZWFkZXJJbmZvLFxuICAgICAgZGlzY292ZXJ5LFxuICAgICAgcmVwbGFjZW1lbnQsXG4gICAgKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVsZWN0aW9uOiB7IHJvbGU6ICdmb2xsb3dlcicsIGxlYWRlckluZm86IGRpc2NvdmVyeS5sZWFkZXJJbmZvIH0sXG4gICAgICBkaXNjb3ZlcnksXG4gICAgICByZXBsYWNlbWVudCxcbiAgICAgIGZvcmNlZENsYWltOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBlbGVjdGlvbixcbiAgICBkaXNjb3ZlcnksXG4gICAgcmVwbGFjZW1lbnQsXG4gICAgZm9yY2VkQ2xhaW06IGZhbHNlLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRGb2xsb3dlckF1dGhvcml0eU1vbml0b3IoXG4gIG9wdGlvbnM6IFVuaWZpZWRDb25zb2xlT3B0aW9ucyxcbiAgY29uc29sZVBvcnQ6IG51bWJlcixcbiAgZWxlY3Rpb246IEVsZWN0aW9uUmVzdWx0LFxuICBwcm9tb3Rpb25NZ3I6IFByb21vdGlvbk1hbmFnZXIsXG4gIGZvcndhcmRpbmdTaW5rOiBMZWFkZXJGb3J3YXJkaW5nTG9nU2luayxcbiAgc2Vzc2lvbkhlYXJ0YmVhdDogU2Vzc2lvbkhlYXJ0YmVhdCxcbiAgZGVwczogRm9sbG93ZXJBdXRob3JpdHlNb25pdG9yRGVwZW5kZW5jaWVzID0ge30sXG4pOiAoKSA9PiB2b2lkIHtcbiAgY29uc3QgcmVzb2x2ZUZvbGxvd2VyQXV0aG9yaXR5SW1wbCA9IGRlcHMucmVzb2x2ZUZvbGxvd2VyQXV0aG9yaXR5SW1wbCA/PyByZXNvbHZlRm9sbG93ZXJBdXRob3JpdHk7XG4gIGNvbnN0IHNldEludGVydmFsSW1wbCA9IGRlcHMuc2V0SW50ZXJ2YWxJbXBsID8/IHNldEludGVydmFsO1xuICBjb25zdCBjbGVhckludGVydmFsSW1wbCA9IGRlcHMuY2xlYXJJbnRlcnZhbEltcGwgPz8gY2xlYXJJbnRlcnZhbDtcbiAgY29uc3Qgbm93SW1wbCA9IGRlcHMubm93SW1wbCA/PyBEYXRlLm5vdztcbiAgbGV0IGN1cnJlbnRFbGVjdGlvbiA9IGVsZWN0aW9uO1xuICBsZXQgY2hlY2tJblByb2dyZXNzID0gZmFsc2U7XG4gIGxldCBwcm9tb3Rpb25RdWV1ZWQgPSBmYWxzZTtcbiAgbGV0IGNvbnNlY3V0aXZlRmFpbHVyZXMgPSAwO1xuICBsZXQgY2lyY3VpdE9wZW5VbnRpbE1zID0gMDtcbiAgbGV0IGF1dGhvcml0eVRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD4gfCBudWxsID0gbnVsbDtcbiAgY29uc3QgcmVjaGVja0ludGVydmFsTXMgPSBjb21wdXRlRm9sbG93ZXJBdXRob3JpdHlSZWNoZWNrSW50ZXJ2YWwob3B0aW9ucy5zZXNzaW9uSWQpO1xuXG4gIGNvbnN0IHF1ZXVlQXV0aG9yaXR5UHJvbW90aW9uID0gKCkgPT4ge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIHByb21vdGlvbk1nci5wcm9tb3RlKGZvcndhcmRpbmdTaW5rLCBzZXNzaW9uSGVhcnRiZWF0KVxuICAgICAgICAuY2F0Y2goKGVycikgPT4gbG9nZ2VyLmVycm9yKCdbVW5pZmllZENvbnNvbGVdIEF1dGhvcml0eS1iYXNlZCBwcm9tb3Rpb24gY3Jhc2hlZCcsIHtcbiAgICAgICAgICBlcnJvcjogU3RyaW5nKGVyciksXG4gICAgICAgIH0pKTtcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVSZXNvbHZlZEF1dGhvcml0eSA9IChyZXNvbHZlZDogRm9sbG93ZXJBdXRob3JpdHlSZXNvbHV0aW9uKSA9PiB7XG4gICAgY3VycmVudEVsZWN0aW9uID0gcmVzb2x2ZWQuZWxlY3Rpb247XG4gICAgY29uc2VjdXRpdmVGYWlsdXJlcyA9IDA7XG4gICAgY2lyY3VpdE9wZW5VbnRpbE1zID0gMDtcblxuICAgIGlmIChyZXNvbHZlZC5lbGVjdGlvbi5yb2xlICE9PSAnbGVhZGVyJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHByb21vdGlvblF1ZXVlZCA9IHRydWU7XG4gICAgaWYgKGF1dGhvcml0eVRpbWVyKSB7XG4gICAgICBjbGVhckludGVydmFsSW1wbChhdXRob3JpdHlUaW1lcik7XG4gICAgICBhdXRob3JpdHlUaW1lciA9IG51bGw7XG4gICAgfVxuXG4gICAgbG9nZ2VyLndhcm4oJ1tVbmlmaWVkQ29uc29sZV0gRm9sbG93ZXIgYXV0aG9yaXR5IHJlLWV2YWx1YXRpb24gcXVldWVkIGEgbGVhZGVyIHRha2VvdmVyJywge1xuICAgICAgc2Vzc2lvbklkOiBvcHRpb25zLnNlc3Npb25JZCxcbiAgICAgIHN0YWJsZVNlc3Npb25JZDogb3B0aW9ucy5zdGFibGVTZXNzaW9uSWQsXG4gICAgICBwb3J0OiBjb25zb2xlUG9ydCxcbiAgICAgIHJlY2hlY2tJbnRlcnZhbE1zLFxuICAgICAgZWxlY3RlZExlYWRlclBpZDogZWxlY3Rpb24ubGVhZGVySW5mby5waWQsXG4gICAgICBlbGVjdGVkTGVhZGVyU2Vzc2lvbklkOiBlbGVjdGlvbi5sZWFkZXJJbmZvLnNlc3Npb25JZCxcbiAgICAgIHJlc29sdmVkTGVhZGVyUGlkOiByZXNvbHZlZC5lbGVjdGlvbi5sZWFkZXJJbmZvLnBpZCxcbiAgICAgIHJlc29sdmVkTGVhZGVyU2Vzc2lvbklkOiByZXNvbHZlZC5lbGVjdGlvbi5sZWFkZXJJbmZvLnNlc3Npb25JZCxcbiAgICAgIHJlcGxhY2VtZW50UmVhc29uOiByZXNvbHZlZC5yZXBsYWNlbWVudD8ucHJlZmVyZW5jZT8ucmVhc29uID8/IG51bGwsXG4gICAgICBmb3JjZWRDbGFpbTogcmVzb2x2ZWQuZm9yY2VkQ2xhaW0sXG4gICAgfSk7XG5cbiAgICBxdWV1ZUF1dGhvcml0eVByb21vdGlvbigpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUF1dGhvcml0eUZhaWx1cmUgPSAoZXJyOiB1bmtub3duKSA9PiB7XG4gICAgY29uc2VjdXRpdmVGYWlsdXJlcyArPSAxO1xuICAgIGlmIChjb25zZWN1dGl2ZUZhaWx1cmVzID49IEZPTExPV0VSX0FVVEhPUklUWV9NT05JVE9SX0NPTkZJRy5mYWlsdXJlVGhyZXNob2xkKSB7XG4gICAgICBjaXJjdWl0T3BlblVudGlsTXMgPSBub3dJbXBsKCkgKyBGT0xMT1dFUl9BVVRIT1JJVFlfTU9OSVRPUl9DT05GSUcuZmFpbHVyZUNvb2xkb3duTXM7XG4gICAgICBsb2dnZXIud2FybignW1VuaWZpZWRDb25zb2xlXSBGb2xsb3dlciBhdXRob3JpdHkgcmUtZXZhbHVhdGlvbiBjaXJjdWl0IG9wZW5lZCBhZnRlciByZXBlYXRlZCBmYWlsdXJlcycsIHtcbiAgICAgICAgc2Vzc2lvbklkOiBvcHRpb25zLnNlc3Npb25JZCxcbiAgICAgICAgcG9ydDogY29uc29sZVBvcnQsXG4gICAgICAgIHJlY2hlY2tJbnRlcnZhbE1zLFxuICAgICAgICBjb25zZWN1dGl2ZUZhaWx1cmVzLFxuICAgICAgICBjaXJjdWl0T3BlblVudGlsTXM6IG5ldyBEYXRlKGNpcmN1aXRPcGVuVW50aWxNcykudG9JU09TdHJpbmcoKSxcbiAgICAgIH0pO1xuICAgICAgY29uc2VjdXRpdmVGYWlsdXJlcyA9IDA7XG4gICAgfVxuXG4gICAgbG9nZ2VyLmRlYnVnKCdbVW5pZmllZENvbnNvbGVdIEZvbGxvd2VyIGF1dGhvcml0eSByZS1ldmFsdWF0aW9uIGZhaWxlZCcsIHtcbiAgICAgIGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVyciksXG4gICAgICBzZXNzaW9uSWQ6IG9wdGlvbnMuc2Vzc2lvbklkLFxuICAgICAgcG9ydDogY29uc29sZVBvcnQsXG4gICAgICByZWNoZWNrSW50ZXJ2YWxNcyxcbiAgICAgIGNpcmN1aXRPcGVuVW50aWxNczogY2lyY3VpdE9wZW5VbnRpbE1zID8gbmV3IERhdGUoY2lyY3VpdE9wZW5VbnRpbE1zKS50b0lTT1N0cmluZygpIDogbnVsbCxcbiAgICB9KTtcbiAgfTtcblxuICBhdXRob3JpdHlUaW1lciA9IHNldEludGVydmFsSW1wbCgoKSA9PiB7XG4gICAgaWYgKGNoZWNrSW5Qcm9ncmVzcyB8fCBwcm9tb3Rpb25RdWV1ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY2lyY3VpdE9wZW5VbnRpbE1zID4gbm93SW1wbCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNpcmN1aXRPcGVuVW50aWxNcyAhPT0gMCkge1xuICAgICAgbG9nZ2VyLmluZm8oJ1tVbmlmaWVkQ29uc29sZV0gRm9sbG93ZXIgYXV0aG9yaXR5IHJlLWV2YWx1YXRpb24gY2lyY3VpdCBjbG9zZWQ7IHJlc3VtaW5nIGNoZWNrcycsIHtcbiAgICAgICAgc2Vzc2lvbklkOiBvcHRpb25zLnNlc3Npb25JZCxcbiAgICAgICAgcG9ydDogY29uc29sZVBvcnQsXG4gICAgICAgIHJlY2hlY2tJbnRlcnZhbE1zLFxuICAgICAgfSk7XG4gICAgICBjaXJjdWl0T3BlblVudGlsTXMgPSAwO1xuICAgIH1cblxuICAgIGNoZWNrSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgcmVzb2x2ZUZvbGxvd2VyQXV0aG9yaXR5SW1wbChvcHRpb25zLnNlc3Npb25JZCwgY29uc29sZVBvcnQsIGN1cnJlbnRFbGVjdGlvbilcbiAgICAgIC50aGVuKGhhbmRsZVJlc29sdmVkQXV0aG9yaXR5KVxuICAgICAgLmNhdGNoKGhhbmRsZUF1dGhvcml0eUZhaWx1cmUpXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIGNoZWNrSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgfSk7XG4gIH0sIHJlY2hlY2tJbnRlcnZhbE1zKTtcbiAgYXV0aG9yaXR5VGltZXIudW5yZWYoKTtcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIGlmIChhdXRob3JpdHlUaW1lcikge1xuICAgICAgY2xlYXJJbnRlcnZhbEltcGwoYXV0aG9yaXR5VGltZXIpO1xuICAgICAgYXV0aG9yaXR5VGltZXIgPSBudWxsO1xuICAgIH1cbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYXR0ZW1wdEZvcmNlVGFrZW92ZXIoXG4gIG9wdGlvbnM6IFVuaWZpZWRDb25zb2xlT3B0aW9ucyxcbiAgY3VycmVudEVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdCxcbiAgY29uc29sZVBvcnQ6IG51bWJlcixcbiAgcHJpbWFyeVRva2VuOiBzdHJpbmcsXG4gIHNlcnZlck9wdHM6IFdlYlNlcnZlck9wdGlvbnMsXG4gIHN0YXJ0V2ViU2VydmVySW1wbDogKG9wdGlvbnM6IFdlYlNlcnZlck9wdGlvbnMpID0+IFByb21pc2U8V2ViU2VydmVyUmVzdWx0Pixcbik6IFByb21pc2U8Rm9yY2VUYWtlb3ZlckF0dGVtcHRSZXN1bHQ+IHtcbiAgY29uc3QgaW5pdGlhbEZhbGxiYWNrID0gYXdhaXQgcmVjb3ZlckxlYWRlckJpbmRGYWlsdXJlKGN1cnJlbnRFbGVjdGlvbi5sZWFkZXJJbmZvLCBjb25zb2xlUG9ydCwgcHJpbWFyeVRva2VuKTtcbiAgY29uc3QgaW5pdGlhbFJlcGxhY2VtZW50ID0gZXZhbHVhdGVQb3J0T3duZXJSZXBsYWNlbWVudChjdXJyZW50RWxlY3Rpb24ubGVhZGVySW5mbywgaW5pdGlhbEZhbGxiYWNrKTtcblxuICBpZiAoIWluaXRpYWxSZXBsYWNlbWVudC5zaG91bGRFdmljdCB8fCBpbml0aWFsUmVwbGFjZW1lbnQub3duZXJQaWQgPT09IG51bGwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd2ViUmVzdWx0OiB7IGJpbmRSZXN1bHQ6IHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiAnRUFERFJJTlVTRScsIGRldGFpbDogYFBvcnQgJHtjb25zb2xlUG9ydH0gYWxyZWFkeSBpbiB1c2VgIH0gfSxcbiAgICAgIGVsZWN0aW9uOiBjdXJyZW50RWxlY3Rpb24sXG4gICAgICBmYWxsYmFjazogaW5pdGlhbEZhbGxiYWNrLFxuICAgICAgcmVwbGFjZW1lbnQ6IGluaXRpYWxSZXBsYWNlbWVudCxcbiAgICAgIGZvcmNlZEtpbGw6IG51bGwsXG4gICAgICB0YWtlb3ZlckF0dGVtcHRlZDogZmFsc2UsXG4gICAgICByZWJvdW5kTG9ja0NsYWltZWQ6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBsYXRlc3RGYWxsYmFjayA9IGF3YWl0IGRpc2NvdmVyTGVhZGVyU2VydmluZ1BvcnQoY29uc29sZVBvcnQsIHByaW1hcnlUb2tlbik7XG4gIGNvbnN0IGxhdGVzdFJlcGxhY2VtZW50ID0gZXZhbHVhdGVQb3J0T3duZXJSZXBsYWNlbWVudChjdXJyZW50RWxlY3Rpb24ubGVhZGVySW5mbywgbGF0ZXN0RmFsbGJhY2spO1xuICBpZiAoIWxhdGVzdFJlcGxhY2VtZW50LnNob3VsZEV2aWN0IHx8IGxhdGVzdFJlcGxhY2VtZW50Lm93bmVyUGlkID09PSBudWxsKSB7XG4gICAgbG9nZ2VyLndhcm4oJ1tVbmlmaWVkQ29uc29sZV0gRm9yY2VkIHRha2VvdmVyIHRhcmdldCBjaGFuZ2VkIGJlZm9yZSBldmljdGlvbjsgc2tpcHBpbmcgZm9yY2VkIGtpbGwnLCB7XG4gICAgICAuLi5idWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgICAgICAgY29uc29sZVBvcnQsXG4gICAgICAgIGN1cnJlbnRFbGVjdGlvbi5sZWFkZXJJbmZvLFxuICAgICAgICB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ0VBRERSSU5VU0UnLCBkZXRhaWw6IGBQb3J0ICR7Y29uc29sZVBvcnR9IGFscmVhZHkgaW4gdXNlYCB9LFxuICAgICAgICBsYXRlc3RGYWxsYmFjayxcbiAgICAgICAgbGF0ZXN0UmVwbGFjZW1lbnQsXG4gICAgICApLFxuICAgICAgcHJldmlvdXNPd25lclBpZDogaW5pdGlhbFJlcGxhY2VtZW50Lm93bmVyUGlkLFxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB3ZWJSZXN1bHQ6IHsgYmluZFJlc3VsdDogeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6ICdFQUREUklOVVNFJywgZGV0YWlsOiBgUG9ydCAke2NvbnNvbGVQb3J0fSBhbHJlYWR5IGluIHVzZWAgfSB9LFxuICAgICAgZWxlY3Rpb246IGN1cnJlbnRFbGVjdGlvbixcbiAgICAgIGZhbGxiYWNrOiBsYXRlc3RGYWxsYmFjayxcbiAgICAgIHJlcGxhY2VtZW50OiBsYXRlc3RSZXBsYWNlbWVudCxcbiAgICAgIGZvcmNlZEtpbGw6IG51bGwsXG4gICAgICB0YWtlb3ZlckF0dGVtcHRlZDogZmFsc2UsXG4gICAgICByZWJvdW5kTG9ja0NsYWltZWQ6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBsb2dnZXIud2FybignW1VuaWZpZWRDb25zb2xlXSBBdHRlbXB0aW5nIGZvcmNlZCB0YWtlb3ZlciBmcm9tIG9sZGVyIG9yIGluY29tcGF0aWJsZSBhY3RpdmUgbGVhZGVyJywge1xuICAgIC4uLmJ1aWxkQmluZEZhaWx1cmVMb2dDb250ZXh0KFxuICAgICAgY29uc29sZVBvcnQsXG4gICAgICBjdXJyZW50RWxlY3Rpb24ubGVhZGVySW5mbyxcbiAgICAgIHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiAnRUFERFJJTlVTRScsIGRldGFpbDogYFBvcnQgJHtjb25zb2xlUG9ydH0gYWxyZWFkeSBpbiB1c2VgIH0sXG4gICAgICBsYXRlc3RGYWxsYmFjayxcbiAgICAgIGxhdGVzdFJlcGxhY2VtZW50LFxuICAgICksXG4gIH0pO1xuXG4gIGNvbnN0IGZvcmNlZEtpbGwgPSBhd2FpdCBraWxsU3RhbGVQcm9jZXNzRGV0YWlsZWQobGF0ZXN0UmVwbGFjZW1lbnQub3duZXJQaWQsIGNvbnNvbGVQb3J0LCB7XG4gICAgYWxsb3dBY3RpdmVIb3N0UGFyZW50OiB0cnVlLFxuICB9KTtcbiAgaWYgKCFmb3JjZWRLaWxsLmtpbGxlZCkge1xuICAgIGxvZ2dlci53YXJuKCdbVW5pZmllZENvbnNvbGVdIEZvcmNlZCB0YWtlb3ZlciBza2lwcGVkIG9yIGZhaWxlZCBhZnRlciBpZGVudGlmeWluZyByZXBsYWNlYWJsZSBsZWFkZXInLCB7XG4gICAgICAuLi5idWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgICAgICAgY29uc29sZVBvcnQsXG4gICAgICAgIGN1cnJlbnRFbGVjdGlvbi5sZWFkZXJJbmZvLFxuICAgICAgICB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ0VBRERSSU5VU0UnLCBkZXRhaWw6IGBQb3J0ICR7Y29uc29sZVBvcnR9IGFscmVhZHkgaW4gdXNlYCB9LFxuICAgICAgICBsYXRlc3RGYWxsYmFjayxcbiAgICAgICAgbGF0ZXN0UmVwbGFjZW1lbnQsXG4gICAgICAgIGZvcmNlZEtpbGwsXG4gICAgICApLFxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB3ZWJSZXN1bHQ6IHsgYmluZFJlc3VsdDogeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6ICdFQUREUklOVVNFJywgZGV0YWlsOiBgUG9ydCAke2NvbnNvbGVQb3J0fSBhbHJlYWR5IGluIHVzZWAgfSB9LFxuICAgICAgZWxlY3Rpb246IGN1cnJlbnRFbGVjdGlvbixcbiAgICAgIGZhbGxiYWNrOiBsYXRlc3RGYWxsYmFjayxcbiAgICAgIHJlcGxhY2VtZW50OiBsYXRlc3RSZXBsYWNlbWVudCxcbiAgICAgIGZvcmNlZEtpbGwsXG4gICAgICB0YWtlb3ZlckF0dGVtcHRlZDogdHJ1ZSxcbiAgICAgIHJlYm91bmRMb2NrQ2xhaW1lZDogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHJlYm91bmRXZWJSZXN1bHQgPSBhd2FpdCBzdGFydFdlYlNlcnZlckltcGwoc2VydmVyT3B0cyk7XG4gIGxldCByZWJvdW5kRWxlY3Rpb24gPSBjdXJyZW50RWxlY3Rpb247XG4gIGxldCByZWJvdW5kTG9ja0NsYWltZWQgPSBmYWxzZTtcblxuICBpZiAoIXJlYm91bmRXZWJSZXN1bHQuYmluZFJlc3VsdCB8fCByZWJvdW5kV2ViUmVzdWx0LmJpbmRSZXN1bHQuc3VjY2Vzcykge1xuICAgIGNvbnN0IHJlYm91bmRMZWFkZXJJbmZvID0gY3JlYXRlTGVhZGVySW5mbyhvcHRpb25zLnNlc3Npb25JZCwgY29uc29sZVBvcnQpO1xuICAgIHJlYm91bmRMb2NrQ2xhaW1lZCA9IGF3YWl0IGNsYWltTGVhZGVyc2hpcChyZWJvdW5kTGVhZGVySW5mbyk7XG4gICAgaWYgKCFyZWJvdW5kTG9ja0NsYWltZWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdbVW5pZmllZENvbnNvbGVdIFJlYm91bmQgbGVhZGVyIGJvdW5kIHBvcnQgYnV0IGNvdWxkIG5vdCBpbW1lZGlhdGVseSByZS1jbGFpbSBsb2NrJywge1xuICAgICAgICAuLi5idWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgICAgICAgICBjb25zb2xlUG9ydCxcbiAgICAgICAgICByZWJvdW5kTGVhZGVySW5mbyxcbiAgICAgICAgICByZWJvdW5kV2ViUmVzdWx0LmJpbmRSZXN1bHQsXG4gICAgICAgICAgbGF0ZXN0RmFsbGJhY2ssXG4gICAgICAgICAgbGF0ZXN0UmVwbGFjZW1lbnQsXG4gICAgICAgICAgZm9yY2VkS2lsbCxcbiAgICAgICAgKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZWJvdW5kRWxlY3Rpb24gPSB7IHJvbGU6ICdsZWFkZXInLCBsZWFkZXJJbmZvOiByZWJvdW5kTGVhZGVySW5mbyB9O1xuICB9IGVsc2Uge1xuICAgIGxvZ2dlci53YXJuKCdbVW5pZmllZENvbnNvbGVdIEZvcmNlZCB0YWtlb3ZlciBraWxsZWQgb2xkIGxlYWRlciBidXQgYmluZCByZXRyeSBzdGlsbCBmYWlsZWQnLCB7XG4gICAgICAuLi5idWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgICAgICAgY29uc29sZVBvcnQsXG4gICAgICAgIGN1cnJlbnRFbGVjdGlvbi5sZWFkZXJJbmZvLFxuICAgICAgICByZWJvdW5kV2ViUmVzdWx0LmJpbmRSZXN1bHQsXG4gICAgICAgIGxhdGVzdEZhbGxiYWNrLFxuICAgICAgICBsYXRlc3RSZXBsYWNlbWVudCxcbiAgICAgICAgZm9yY2VkS2lsbCxcbiAgICAgICksXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdlYlJlc3VsdDogcmVib3VuZFdlYlJlc3VsdCxcbiAgICBlbGVjdGlvbjogcmVib3VuZEVsZWN0aW9uLFxuICAgIGZhbGxiYWNrOiBsYXRlc3RGYWxsYmFjayxcbiAgICByZXBsYWNlbWVudDogbGF0ZXN0UmVwbGFjZW1lbnQsXG4gICAgZm9yY2VkS2lsbCxcbiAgICB0YWtlb3ZlckF0dGVtcHRlZDogdHJ1ZSxcbiAgICByZWJvdW5kTG9ja0NsYWltZWQsXG4gIH07XG59XG5cbi8qKlxuICogU3RhcnQgdGhlIHVuaWZpZWQgd2ViIGNvbnNvbGUuXG4gKlxuICogUnVucyBsZWFkZXIgZWxlY3Rpb24sIHRoZW4gZWl0aGVyIHN0YXJ0cyB0aGUgZnVsbCBjb25zb2xlIChsZWFkZXIpXG4gKiBvciBzZXRzIHVwIGV2ZW50IGZvcndhcmRpbmcgKGZvbGxvd2VyKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0VW5pZmllZENvbnNvbGUob3B0aW9uczogVW5pZmllZENvbnNvbGVPcHRpb25zKTogUHJvbWlzZTxVbmlmaWVkQ29uc29sZVJlc3VsdD4ge1xuICAvLyBSZXNvbHZlIHBvcnQ6IG9wdGlvbnMgKGNvbmZpZyBmaWxlKSDihpIgZW52IHZhciDihpIgZGVmYXVsdFxuICBjb25zdCBjb25zb2xlUG9ydCA9IG9wdGlvbnMucG9ydCB8fCBERUZBVUxUX0NPTlNPTEVfUE9SVDtcbiAgbG9nZ2VyLmRlYnVnKGBbVW5pZmllZENvbnNvbGVdIFBvcnQgcmVzb2x2ZWQ6ICR7Y29uc29sZVBvcnR9YCArXG4gICAgKG9wdGlvbnMucG9ydCA/ICcgKGZyb20gY29uZmlnIGZpbGUpJyA6IGAgKGZyb20gZW52L2RlZmF1bHQpYCkpO1xuXG4gIC8vIExlZ2FjeS1sZWFkZXIgZGV0ZWN0aW9uICgjMTc5NCkg4oCUIHdhcm4gdGhlIHVzZXIgaWYgYSBwcmUtYXV0aFxuICAvLyBEb2xsaG91c2VNQ1AgY29uc29sZSBpcyBydW5uaW5nIGFsb25nc2lkZSB0aGlzIGF1dGhlbnRpY2F0ZWQgb25lLlxuICAvLyBUaGV5IHdpbGwgY29leGlzdCBmaW5lIGJlY2F1c2Ugb2YgcG9ydCArIGxvY2sgKyB0b2tlbiBmaWxlIGlzb2xhdGlvbixcbiAgLy8gYnV0IHRoZSB1c2VyIHNob3VsZCBrbm93IGJvdGggZXhpc3Qgc28gdGhlIGRpZmZlcmluZyBzZWN1cml0eSBwb3N0dXJlXG4gIC8vIGJldHdlZW4gdGhlbSBkb2Vzbid0IGxvb2sgbGlrZSBhIGJ1Zy5cbiAgYXdhaXQgd2FybklmTGVnYWN5Q29uc29sZVByZXNlbnQoY29uc29sZVBvcnQpO1xuXG4gIGxldCBlbGVjdGlvbiA9IGF3YWl0IGVsZWN0TGVhZGVyKG9wdGlvbnMuc2Vzc2lvbklkLCBjb25zb2xlUG9ydCk7XG5cbiAgaWYgKGVsZWN0aW9uLnJvbGUgPT09ICdmb2xsb3dlcicpIHtcbiAgICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHJlc29sdmVGb2xsb3dlckF1dGhvcml0eShvcHRpb25zLnNlc3Npb25JZCwgY29uc29sZVBvcnQsIGVsZWN0aW9uKTtcbiAgICBlbGVjdGlvbiA9IHJlc29sdmVkLmVsZWN0aW9uO1xuICB9XG5cbiAgaWYgKGVsZWN0aW9uLnJvbGUgPT09ICdsZWFkZXInKSB7XG4gICAgcmV0dXJuIHN0YXJ0QXNMZWFkZXIob3B0aW9ucywgZWxlY3Rpb24sIGNvbnNvbGVQb3J0KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RhcnRBc0ZvbGxvd2VyKG9wdGlvbnMsIGVsZWN0aW9uLCBjb25zb2xlUG9ydCk7XG4gIH1cbn1cblxuLyoqXG4gKiBTdGFydCBhcyB0aGUgY29uc29sZSBsZWFkZXIuXG4gKiBCaW5kcyB0aGUgcmVzb2x2ZWQgY29uc29sZSBwb3J0IChjb25maWcgZmlsZSDihpIgZW52IHZhciDihpIgZGVmYXVsdCksXG4gKiBtb3VudHMgYWxsIHJvdXRlcyBpbmNsdWRpbmcgaW5nZXN0aW9uLCBzdGFydHMgaGVhcnRiZWF0LlxuICovXG5hc3luYyBmdW5jdGlvbiBzdGFydEFzTGVhZGVyKFxuICBvcHRpb25zOiBVbmlmaWVkQ29uc29sZU9wdGlvbnMsXG4gIGVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdCxcbiAgY29uc29sZVBvcnQ6IG51bWJlciA9IERFRkFVTFRfQ09OU09MRV9QT1JULFxuKTogUHJvbWlzZTxVbmlmaWVkQ29uc29sZVJlc3VsdD4ge1xuICBjb25zdCB7IHN0YXJ0V2ViU2VydmVyIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3NlcnZlci5qcycpO1xuICBjb25zdCB7IHBpY2tSYW5kb21Ub2tlbk5hbWUgfSA9IGF3YWl0IGltcG9ydCgnLi9TZXNzaW9uTmFtZXMuanMnKTtcblxuICAvLyBJbml0aWFsaXplIHRoZSBjb25zb2xlIHRva2VuIHN0b3JlICgjMTc4MCkuIENyZWF0ZXMgdGhlIHRva2VuIGZpbGUgb25cbiAgLy8gZmlyc3QgcnVuLCByZWFkcyB0aGUgZXhpc3RpbmcgdG9rZW5zIG9uIHN1YnNlcXVlbnQgcnVucy4gVGhlIHRva2VuIGlzXG4gIC8vIHBlcnNpc3RlbnQgYWNyb3NzIHJlc3RhcnRzIOKAlCBvbmx5IHJvdGF0ZWQgb24gZXhwbGljaXQgcmVxdWVzdCAoUGhhc2UgMikuXG4gIC8vIEZlYXR1cmUgZmxhZyBET0xMSE9VU0VfV0VCX0FVVEhfRU5BQkxFRCBjb250cm9scyBlbmZvcmNlbWVudDsgdGhlIGZpbGVcbiAgLy8gaXMgZ2VuZXJhdGVkIHJlZ2FyZGxlc3Mgc28gY29uc3VtZXJzIGNhbiBhdHRhY2ggdG9rZW5zIHByZWVtcHRpdmVseS5cbiAgY29uc3QgdG9rZW5TdG9yZSA9IG5ldyBDb25zb2xlVG9rZW5TdG9yZShlbnYuRE9MTEhPVVNFX0NPTlNPTEVfVE9LRU5fRklMRSk7XG4gIGNvbnN0IHByaW1hcnlUb2tlbiA9IGF3YWl0IHRva2VuU3RvcmUuZW5zdXJlSW5pdGlhbGl6ZWQocGlja1JhbmRvbVRva2VuTmFtZSgpKTtcbiAgbG9nZ2VyLmluZm8oJ1tVbmlmaWVkQ29uc29sZV0gQ29uc29sZSB0b2tlbiBzdG9yZSBpbml0aWFsaXplZCcsIHtcbiAgICB0b2tlbklkOiBwcmltYXJ5VG9rZW4uaWQsXG4gICAgdG9rZW5OYW1lOiBwcmltYXJ5VG9rZW4ubmFtZSxcbiAgICBmaWxlOiB0b2tlblN0b3JlLmdldEZpbGVQYXRoKCksXG4gICAgYXV0aEVuZm9yY2VkOiBlbnYuRE9MTEhPVVNFX1dFQl9BVVRIX0VOQUJMRUQsXG4gIH0pO1xuXG4gIC8vIFByZS1jcmVhdGUgYSBwbGFjZWhvbGRlciBicm9hZGNhc3QgdGhhdCB3ZSdsbCB3aXJlIHVwIGFmdGVyIHRoZSBzZXJ2ZXIgc3RhcnRzXG4gIGxldCBsaXZlQnJvYWRjYXN0OiAoKGVudHJ5OiBVbmlmaWVkTG9nRW50cnkpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBsZXQgbGl2ZU1ldHJpY3NPblNuYXBzaG90OiAoKHNuYXBzaG90OiBNZXRyaWNTbmFwc2hvdCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG5cbiAgLy8gQ3JlYXRlIGluZ2VzdGlvbiByb3V0ZXMgd2l0aCBhIGRlZmVycmVkIGJyb2FkY2FzdCAod2lyZWQgYWZ0ZXIgc2VydmVyIHN0YXJ0cylcbiAgY29uc3QgaW5nZXN0UmVzdWx0ID0gY3JlYXRlSW5nZXN0Um91dGVzKHtcbiAgICBsb2dCcm9hZGNhc3Q6IChlbnRyeSkgPT4gbGl2ZUJyb2FkY2FzdD8uKGVudHJ5KSxcbiAgICBtZXRyaWNzT25TbmFwc2hvdDogKHNuYXBzaG90KSA9PiBsaXZlTWV0cmljc09uU25hcHNob3Q/LihzbmFwc2hvdCksXG4gICAgc3RvcmVNZXRyaWNzU25hcHNob3Q6IChzbmFwc2hvdCkgPT4gb3B0aW9ucy5tZXRyaWNzU2luaz8ub25TbmFwc2hvdChzbmFwc2hvdCksXG4gIH0pO1xuXG4gIC8vIFN0YXJ0IHRoZSB3ZWIgc2VydmVyIHdpdGggaW5nZXN0IHJvdXRlcyBtb3VudGVkIGJlZm9yZSB0aGUgU1BBIGZhbGxiYWNrLlxuICAvLyBJZiB0aGUgcG9ydCBpcyBvY2N1cGllZCBieSBhIHN0YWxlIHByb2Nlc3MsIHJldHJ5IHdpdGggZXhwb25lbnRpYWwgYmFja29mZi5cbiAgY29uc3Qgc2VydmVyT3B0cyA9IHtcbiAgICBwb3J0Zm9saW9EaXI6IG9wdGlvbnMucG9ydGZvbGlvRGlyLFxuICAgIG1lbW9yeVNpbms6IG9wdGlvbnMubWVtb3J5U2luayxcbiAgICBtZXRyaWNzU2luazogb3B0aW9ucy5tZXRyaWNzU2luayxcbiAgICBwb3J0OiBjb25zb2xlUG9ydCxcbiAgICBzZXNzaW9uSWQ6IG9wdGlvbnMuc3RhYmxlU2Vzc2lvbklkLFxuICAgIHJ1bnRpbWVTZXNzaW9uSWQ6IG9wdGlvbnMuc2Vzc2lvbklkLFxuICAgIGFkZGl0aW9uYWxSb3V0ZXJzOiBbaW5nZXN0UmVzdWx0LnJvdXRlcl0sXG4gICAgdG9rZW5TdG9yZSxcbiAgICAuLi4ob3B0aW9ucy5tY3BBcWxIYW5kbGVyID8geyBtY3BBcWxIYW5kbGVyOiBvcHRpb25zLm1jcEFxbEhhbmRsZXIgfSA6IHt9KSxcbiAgfTtcbiAgLy8gYmluZEFuZExpc3RlbiBub3cgaGFuZGxlcyBFQUREUklOVVNFIGJ5IGZpbmRpbmcgYW5kIGtpbGxpbmcgdGhlIHN0YWxlXG4gIC8vIHByb2Nlc3Mgb24gdGhlIHBvcnQsIHRoZW4gcmV0cnlpbmcuIE5vIGV4dGVybmFsIHJldHJ5IGxvb3AgbmVlZGVkLlxuICBsZXQgd2ViUmVzdWx0ID0gYXdhaXQgc3RhcnRXZWJTZXJ2ZXIoc2VydmVyT3B0cyk7XG5cbiAgaWYgKHdlYlJlc3VsdC5iaW5kUmVzdWx0ICYmICF3ZWJSZXN1bHQuYmluZFJlc3VsdC5zdWNjZXNzKSB7XG4gICAgY29uc3QgZm9yY2VUYWtlb3ZlciA9IGF3YWl0IGF0dGVtcHRGb3JjZVRha2VvdmVyKFxuICAgICAgb3B0aW9ucyxcbiAgICAgIGVsZWN0aW9uLFxuICAgICAgY29uc29sZVBvcnQsXG4gICAgICBwcmltYXJ5VG9rZW4udG9rZW4sXG4gICAgICBzZXJ2ZXJPcHRzLFxuICAgICAgc3RhcnRXZWJTZXJ2ZXIsXG4gICAgKTtcbiAgICB3ZWJSZXN1bHQgPSBmb3JjZVRha2VvdmVyLndlYlJlc3VsdDtcbiAgICBlbGVjdGlvbiA9IGZvcmNlVGFrZW92ZXIuZWxlY3Rpb247XG5cbiAgICBpZiAod2ViUmVzdWx0LmJpbmRSZXN1bHQgJiYgIXdlYlJlc3VsdC5iaW5kUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIGlmIChmb3JjZVRha2VvdmVyLmZhbGxiYWNrLmxlYWRlckluZm8pIHtcbiAgICAgIGxvZ2dlci53YXJuKCdbVW5pZmllZENvbnNvbGVdIExlYWRlciByb2xlIGFib3J0ZWQ6IGJpbmQgZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gZm9sbG93ZXInLCB7XG4gICAgICAgIC4uLmJ1aWxkQmluZEZhaWx1cmVMb2dDb250ZXh0KFxuICAgICAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgICAgIGVsZWN0aW9uLmxlYWRlckluZm8sXG4gICAgICAgICAgd2ViUmVzdWx0LmJpbmRSZXN1bHQsXG4gICAgICAgICAgZm9yY2VUYWtlb3Zlci5mYWxsYmFjayxcbiAgICAgICAgICBmb3JjZVRha2VvdmVyLnJlcGxhY2VtZW50LFxuICAgICAgICAgIGZvcmNlVGFrZW92ZXIuZm9yY2VkS2lsbCxcbiAgICAgICAgKSxcbiAgICAgICAgdGFrZW92ZXJBdHRlbXB0ZWQ6IGZvcmNlVGFrZW92ZXIudGFrZW92ZXJBdHRlbXB0ZWQsXG4gICAgICAgIHJlYm91bmRMb2NrQ2xhaW1lZDogZm9yY2VUYWtlb3Zlci5yZWJvdW5kTG9ja0NsYWltZWQsXG4gICAgICAgIGxvY2tDbGVhbnVwQXR0ZW1wdGVkOiBmb3JjZVRha2VvdmVyLmZhbGxiYWNrLnNvdXJjZSAhPT0gJ25vbmUnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBmb2xsb3dlckVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdCA9IHsgcm9sZTogJ2ZvbGxvd2VyJywgbGVhZGVySW5mbzogZm9yY2VUYWtlb3Zlci5mYWxsYmFjay5sZWFkZXJJbmZvIH07XG4gICAgICByZXR1cm4gc3RhcnRBc0ZvbGxvd2VyKG9wdGlvbnMsIGZvbGxvd2VyRWxlY3Rpb24sIGNvbnNvbGVQb3J0LCBwcmltYXJ5VG9rZW4udG9rZW4pO1xuICAgICAgfVxuXG4gICAgICBsb2dnZXIuZXJyb3IoJ1tVbmlmaWVkQ29uc29sZV0gTGVhZGVyIGZhaWxlZCB0byBiaW5kIGFuZCBubyBhY3RpdmUgbGVhZGVyIGNvdWxkIGJlIGlkZW50aWZpZWQnLCB7XG4gICAgICAgIC4uLmJ1aWxkQmluZEZhaWx1cmVMb2dDb250ZXh0KFxuICAgICAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgICAgIGVsZWN0aW9uLmxlYWRlckluZm8sXG4gICAgICAgICAgd2ViUmVzdWx0LmJpbmRSZXN1bHQsXG4gICAgICAgICAgZm9yY2VUYWtlb3Zlci5mYWxsYmFjayxcbiAgICAgICAgICBmb3JjZVRha2VvdmVyLnJlcGxhY2VtZW50LFxuICAgICAgICAgIGZvcmNlVGFrZW92ZXIuZm9yY2VkS2lsbCxcbiAgICAgICAgKSxcbiAgICAgICAgdGFrZW92ZXJBdHRlbXB0ZWQ6IGZvcmNlVGFrZW92ZXIudGFrZW92ZXJBdHRlbXB0ZWQsXG4gICAgICAgIHJlYm91bmRMb2NrQ2xhaW1lZDogZm9yY2VUYWtlb3Zlci5yZWJvdW5kTG9ja0NsYWltZWQsXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGVhZGVyIGZhaWxlZCB0byBiaW5kIHBvcnQgJHtjb25zb2xlUG9ydH0gYW5kIG5vIGFjdGl2ZSBsZWFkZXIgd2FzIGRpc2NvdmVyYWJsZWApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlZ2lzdGVyIHRoZSBsZWFkZXIgb25seSBhZnRlciB0aGUgSFRUUCBsaXN0ZW5lciBpcyBhY3R1YWxseSBzZXJ2aW5nIHRoZSBwb3J0LlxuICBpbmdlc3RSZXN1bHQucmVnaXN0ZXJMZWFkZXJTZXNzaW9uKG9wdGlvbnMuc2Vzc2lvbklkLCBwcm9jZXNzLnBpZCk7XG5cbiAgLy8gUmVnaXN0ZXIgdGhlIHdlYiBjb25zb2xlIGl0c2VsZiBzbyB0aGUgc2Vzc2lvbiBpbmRpY2F0b3IgaXMgbmV2ZXIgZW1wdHkgKCMxODA1KVxuICBpbmdlc3RSZXN1bHQucmVnaXN0ZXJDb25zb2xlU2Vzc2lvbigpO1xuXG4gIC8vIFdpcmUgU1NFIGJyb2FkY2FzdHMgZm9yIHRoaXMgbGVhZGVyJ3Mgb3duIGV2ZW50c1xuICBvcHRpb25zLndpcmVTU0VCcm9hZGNhc3RzKHdlYlJlc3VsdCwgb3B0aW9ucy5tZXRyaWNzU2luayk7XG5cbiAgLy8gTm93IHdpcmUgdGhlIGxpdmUgYnJvYWRjYXN0IGZ1bmN0aW9ucyBpbnRvIHRoZSBpbmdlc3Qgcm91dGVzXG4gIGlmICh3ZWJSZXN1bHQubG9nQnJvYWRjYXN0KSB7XG4gICAgY29uc3Qgb3JpZ2luYWxCcm9hZGNhc3QgPSB3ZWJSZXN1bHQubG9nQnJvYWRjYXN0O1xuICAgIC8vIFN0YW1wIGxlYWRlcidzIG93biBlbnRyaWVzIHdpdGggc2Vzc2lvbiBJRFxuICAgIGxpdmVCcm9hZGNhc3QgPSAoZW50cnk6IFVuaWZpZWRMb2dFbnRyeSkgPT4ge1xuICAgICAgY29uc3Qgc3RhbXBlZDogVW5pZmllZExvZ0VudHJ5ID0ge1xuICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgZGF0YTogeyAuLi5lbnRyeS5kYXRhLCBfc2Vzc2lvbklkOiBvcHRpb25zLnNlc3Npb25JZCB9LFxuICAgICAgfTtcbiAgICAgIG9yaWdpbmFsQnJvYWRjYXN0KHN0YW1wZWQpO1xuICAgIH07XG4gIH1cbiAgbGl2ZU1ldHJpY3NPblNuYXBzaG90ID0gd2ViUmVzdWx0Lm1ldHJpY3NPblNuYXBzaG90O1xuXG4gIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIEluZ2VzdGlvbiByb3V0ZXMgbW91bnRlZCcpO1xuXG4gIC8vIFN0YXJ0IGhlYXJ0YmVhdCBhbmQgcmVnaXN0ZXIgY2xlYW51cFxuICBjb25zdCBzdG9wSGVhcnRiZWF0ID0gc3RhcnRIZWFydGJlYXQoZWxlY3Rpb24ubGVhZGVySW5mbyk7XG4gIHJlZ2lzdGVyTGVhZGVyQ2xlYW51cCgpO1xuXG4gIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIExlYWRlciBzdGFydGVkJywge1xuICAgIHNlc3Npb25JZDogb3B0aW9ucy5zZXNzaW9uSWQsIHBvcnQ6IGNvbnNvbGVQb3J0LCBwaWQ6IHByb2Nlc3MucGlkLFxuICAgIHJvbGU6ICdsZWFkZXInLCBpbmdlc3RSb3V0ZXM6IFsnL2FwaS9pbmdlc3QvbG9ncycsICcvYXBpL2luZ2VzdC9tZXRyaWNzJywgJy9hcGkvaW5nZXN0L3Nlc3Npb24nLCAnL2FwaS9zZXNzaW9ucyddLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHJvbGU6ICdsZWFkZXInLFxuICAgIGVsZWN0aW9uLFxuICAgIHBvcnQ6IGNvbnNvbGVQb3J0LFxuICAgIGNsZWFudXA6IGFzeW5jICgpID0+IHtcbiAgICAgIHN0b3BIZWFydGJlYXQoKTtcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIFN0YXJ0IGFzIGEgZm9sbG93ZXIuXG4gKiBSZWdpc3RlcnMgZm9yd2FyZGluZyBzaW5rcyB3aXRoIHRoZSBMb2dNYW5hZ2VyLCBzdGFydHMgc2Vzc2lvbiBoZWFydGJlYXQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0QXNGb2xsb3dlcihcbiAgb3B0aW9uczogVW5pZmllZENvbnNvbGVPcHRpb25zLFxuICBlbGVjdGlvbjogRWxlY3Rpb25SZXN1bHQsXG4gIGNvbnNvbGVQb3J0OiBudW1iZXIgPSBERUZBVUxUX0NPTlNPTEVfUE9SVCxcbiAgaW5pdGlhbEF1dGhUb2tlbjogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4pOiBQcm9taXNlPFVuaWZpZWRDb25zb2xlUmVzdWx0PiB7XG4gIGNvbnN0IGxlYWRlclVybCA9IGBodHRwOi8vMTI3LjAuMC4xOiR7ZWxlY3Rpb24ubGVhZGVySW5mby5wb3J0fWA7XG5cbiAgLy8gUmVhZCB0aGUgY29uc29sZSBhdXRoIHRva2VuICgjMTc4MCkgd3JpdHRlbiBieSB0aGUgbGVhZGVyLiBNYXkgYmUgbnVsbFxuICAvLyBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IHlldCDigJQgdGhlIHNpbmtzIGhhbmRsZSB0aGF0IGdyYWNlZnVsbHkgYW5kXG4gIC8vIHNpbXBseSBvbWl0IHRoZSBCZWFyZXIgaGVhZGVyLCB3aGljaCBpcyBmaW5lIHdoZW4gYXV0aCBpcyBub3QgZW5mb3JjZWQuXG4gIGxldCBhdXRoVG9rZW4gPSBpbml0aWFsQXV0aFRva2VuO1xuICBpZiAoYXV0aFRva2VuID09PSBudWxsKSB7XG4gICAgY29uc3QgeyBnZXRQcmltYXJ5VG9rZW5Gcm9tRmlsZSB9ID0gYXdhaXQgaW1wb3J0KCcuL2NvbnNvbGVUb2tlbi5qcycpO1xuICAgIGF1dGhUb2tlbiA9IGF3YWl0IGdldFByaW1hcnlUb2tlbkZyb21GaWxlKGVudi5ET0xMSE9VU0VfQ09OU09MRV9UT0tFTl9GSUxFKTtcbiAgfVxuICBpZiAoYXV0aFRva2VuKSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdbVW5pZmllZENvbnNvbGVdIEZvbGxvd2VyIGxvYWRlZCBjb25zb2xlIGF1dGggdG9rZW4nKTtcbiAgfSBlbHNlIHtcbiAgICBsb2dnZXIuZGVidWcoJ1tVbmlmaWVkQ29uc29sZV0gTm8gY29uc29sZSBhdXRoIHRva2VuIGZpbGUgZm91bmQ7IGZvbGxvd2VyIHdpbGwgUE9TVCB3aXRob3V0IEJlYXJlciBoZWFkZXInKTtcbiAgfVxuXG4gIC8vIFBlci1pbnN0YW5jZSBwcm9tb3Rpb24gbWFuYWdlciDigJQgdHJhY2tzIGl0cyBvd24gYXR0ZW1wdCBjb3VudGVyIHNvXG4gIC8vIG11bHRpcGxlIGZvbGxvd2VycyBkb24ndCBpbnRlcmZlcmUgd2l0aCBlYWNoIG90aGVyJ3MgcHJvbW90aW9uIGJ1ZGdldHMuXG4gIGNvbnN0IHByb21vdGlvbk1nciA9IG5ldyBQcm9tb3Rpb25NYW5hZ2VyKG9wdGlvbnMsIGNvbnNvbGVQb3J0LCBzdGFydEFzTGVhZGVyLCBzdGFydEFzRm9sbG93ZXIpO1xuXG4gIC8vIERlY2xhcmUgc2Vzc2lvbkhlYXJ0YmVhdCBiZWZvcmUgdGhlIHNpbmsgc28gdGhlIGNsb3N1cmUgY2FuIGNhcHR1cmUgaXQuXG4gIC8vIEJvdGggYXJlIGluaXRpYWxpemVkIGJlZm9yZSB0aGUgY2FsbGJhY2sgY291bGQgcG9zc2libHkgZmlyZSAobmVlZHMgNSsgZmFpbGVkIGZsdXNoZXMpLlxuICBsZXQgc2Vzc2lvbkhlYXJ0YmVhdDogU2Vzc2lvbkhlYXJ0YmVhdDtcblxuICAvLyBSZWdpc3RlciBhIGZvcndhcmRpbmcgbG9nIHNpbmsgd2l0aCBsZWFkZXItZGVhdGggY2FsbGJhY2sgKCMxODUwKS5cbiAgY29uc3QgZm9yd2FyZGluZ1NpbmsgPSBuZXcgTGVhZGVyRm9yd2FyZGluZ0xvZ1NpbmsobGVhZGVyVXJsLCBvcHRpb25zLnNlc3Npb25JZCwgYXV0aFRva2VuLCAoKSA9PiB7XG4gICAgcHJvbW90aW9uTWdyLnByb21vdGUoZm9yd2FyZGluZ1NpbmssIHNlc3Npb25IZWFydGJlYXQpXG4gICAgICAuY2F0Y2goZXJyID0+IGxvZ2dlci5lcnJvcignW1VuaWZpZWRDb25zb2xlXSBQcm9tb3Rpb24gY3Jhc2hlZCcsIHsgZXJyb3I6IFN0cmluZyhlcnIpIH0pKTtcbiAgfSk7XG4gIG9wdGlvbnMucmVnaXN0ZXJMb2dTaW5rKGZvcndhcmRpbmdTaW5rKTtcblxuICAvLyBTdGFydCBzZXNzaW9uIGhlYXJ0YmVhdCB0byB0aGUgbGVhZGVyXG4gIHNlc3Npb25IZWFydGJlYXQgPSBuZXcgU2Vzc2lvbkhlYXJ0YmVhdChsZWFkZXJVcmwsIG9wdGlvbnMuc2Vzc2lvbklkLCBwcm9jZXNzLnBpZCwgYXV0aFRva2VuKTtcbiAgYXdhaXQgc2Vzc2lvbkhlYXJ0YmVhdC5zdGFydCgpO1xuXG4gIGNvbnN0IHN0b3BBdXRob3JpdHlNb25pdG9yID0gc3RhcnRGb2xsb3dlckF1dGhvcml0eU1vbml0b3IoXG4gICAgb3B0aW9ucyxcbiAgICBjb25zb2xlUG9ydCxcbiAgICBlbGVjdGlvbixcbiAgICBwcm9tb3Rpb25NZ3IsXG4gICAgZm9yd2FyZGluZ1NpbmssXG4gICAgc2Vzc2lvbkhlYXJ0YmVhdCxcbiAgKTtcblxuICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBGb2xsb3dlciBzdGFydGVkJywge1xuICAgIHNlc3Npb25JZDogb3B0aW9ucy5zZXNzaW9uSWQsIHBpZDogcHJvY2Vzcy5waWQsIHJvbGU6ICdmb2xsb3dlcicsXG4gICAgbGVhZGVyU2Vzc2lvbjogZWxlY3Rpb24ubGVhZGVySW5mby5zZXNzaW9uSWQsIGxlYWRlclBpZDogZWxlY3Rpb24ubGVhZGVySW5mby5waWQsXG4gICAgbGVhZGVyUG9ydDogZWxlY3Rpb24ubGVhZGVySW5mby5wb3J0LCBsZWFkZXJVcmwsXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgcm9sZTogJ2ZvbGxvd2VyJyxcbiAgICBlbGVjdGlvbixcbiAgICBjbGVhbnVwOiBhc3luYyAoKSA9PiB7XG4gICAgICBzdG9wQXV0aG9yaXR5TW9uaXRvcigpO1xuICAgICAgYXdhaXQgc2Vzc2lvbkhlYXJ0YmVhdC5zdG9wKCk7XG4gICAgICBhd2FpdCBmb3J3YXJkaW5nU2luay5jbG9zZSgpO1xuICAgIH0sXG4gIH07XG59XG4iXX0=
745
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5pZmllZENvbnNvbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViL2NvbnNvbGUvVW5pZmllZENvbnNvbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRztBQU9ILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsV0FBVyxFQUNYLDJCQUEyQixFQUMzQixvQkFBb0IsRUFDcEIsY0FBYyxFQUNkLHFCQUFxQixFQUNyQixrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWix3QkFBd0IsRUFDeEIscUJBQXFCLEVBQ3JCLHdCQUF3QixHQUl6QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsZ0JBQWdCLEdBQ2pCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsT0FBTyxFQUNMLGFBQWEsRUFDYix3QkFBd0IsR0FFekIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHMUM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUMsMEJBQTBCLENBQUM7QUFDNUQsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLENBQUM7QUFDMUMsTUFBTSxtQ0FBbUMsR0FBRyxhQUFhLENBQUM7QUFDMUQsTUFBTSwyQkFBMkIsR0FBRyxLQUFLLENBQUM7QUFD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QixDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlCLE1BQU0sY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9CLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVW5pZmllZCB3ZWIgY29uc29sZSBvcmNoZXN0cmF0b3IuXG4gKlxuICogVGllcyB0b2dldGhlciBsZWFkZXIgZWxlY3Rpb24sIGNvbnNvbGUgc3RhcnR1cCwgZm9sbG93ZXIgd2lyaW5nLFxuICogYW5kIHNlc3Npb24gbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoaXMgaXMgdGhlIG1haW4gZW50cnkgcG9pbnRcbiAqIGNhbGxlZCBieSB0aGUgREkgY29udGFpbmVyIGR1cmluZyBkZWZlcnJlZCBzZXR1cC5cbiAqXG4gKiBGbG93OlxuICogMS4gUnVuIGxlYWRlciBlbGVjdGlvbiAocmVhZCBsb2NrIGZpbGUsIGNsYWltIG9yIGZvbGxvdylcbiAqIDIuIElmIGxlYWRlcjogc3RhcnQgd2ViIHNlcnZlciBvbiBmaXhlZCBwb3J0LCBtb3VudCBpbmdlc3Qgcm91dGVzLCBzdGFydCBoZWFydGJlYXRcbiAqIDMuIElmIGZvbGxvd2VyOiByZWdpc3RlciBmb3J3YXJkaW5nIHNpbmtzIHdpdGggTG9nTWFuYWdlciwgc3RhcnQgc2Vzc2lvbiBoZWFydGJlYXRcbiAqXG4gKiBAc2luY2UgdjIuMS4wIOKAlCBJc3N1ZSAjMTcwMFxuICovXG5cbmltcG9ydCB0eXBlIHsgVW5pZmllZExvZ0VudHJ5IH0gZnJvbSAnLi4vLi4vbG9nZ2luZy90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1ldHJpY1NuYXBzaG90IH0gZnJvbSAnLi4vLi4vbWV0cmljcy90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1lbW9yeUxvZ1NpbmsgfSBmcm9tICcuLi8uLi9sb2dnaW5nL3NpbmtzL01lbW9yeUxvZ1NpbmsuanMnO1xuaW1wb3J0IHR5cGUgeyBNZW1vcnlNZXRyaWNzU2luayB9IGZyb20gJy4uLy4uL21ldHJpY3Mvc2lua3MvTWVtb3J5TWV0cmljc1NpbmsuanMnO1xuaW1wb3J0IHR5cGUgeyBXZWJTZXJ2ZXJPcHRpb25zLCBXZWJTZXJ2ZXJSZXN1bHQgfSBmcm9tICcuLi9zZXJ2ZXIuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHtcbiAgZWxlY3RMZWFkZXIsXG4gIGlzTGVhZGVyV2ViQ29uc29sZVJlYWNoYWJsZSxcbiAgZm9yY2VDbGFpbUxlYWRlcnNoaXAsXG4gIHN0YXJ0SGVhcnRiZWF0LFxuICByZWdpc3RlckxlYWRlckNsZWFudXAsXG4gIGRldGVjdExlZ2FjeUxlYWRlcixcbiAgcmVhZExlYWRlckxvY2ssXG4gIGRlbGV0ZUxlYWRlckxvY2ssXG4gIGNsYWltTGVhZGVyc2hpcCxcbiAgY3JlYXRlTGVhZGVySW5mbyxcbiAgTE9DS19WRVJTSU9OLFxuICBDT05TT0xFX1BST1RPQ09MX1ZFUlNJT04sXG4gIExFR0FDWV9TRVJWRVJfVkVSU0lPTixcbiAgZXZhbHVhdGVMZWFkZXJQcmVmZXJlbmNlLFxuICB0eXBlIEVsZWN0aW9uUmVzdWx0LFxuICB0eXBlIENvbnNvbGVMZWFkZXJJbmZvLFxuICB0eXBlIExlYWRlclByZWZlcmVuY2VEZWNpc2lvbixcbn0gZnJvbSAnLi9MZWFkZXJFbGVjdGlvbi5qcyc7XG5pbXBvcnQgeyBjcmVhdGVJbmdlc3RSb3V0ZXMgfSBmcm9tICcuL0luZ2VzdFJvdXRlcy5qcyc7XG5pbXBvcnQge1xuICBMZWFkZXJGb3J3YXJkaW5nTG9nU2luayxcbiAgU2Vzc2lvbkhlYXJ0YmVhdCxcbn0gZnJvbSAnLi9MZWFkZXJGb3J3YXJkaW5nU2luay5qcyc7XG5pbXBvcnQgeyBQcm9tb3Rpb25NYW5hZ2VyIH0gZnJvbSAnLi9Qcm9tb3Rpb25NYW5hZ2VyLmpzJztcbmltcG9ydCB7IENvbnNvbGVUb2tlblN0b3JlIH0gZnJvbSAnLi9jb25zb2xlVG9rZW4uanMnO1xuaW1wb3J0IHtcbiAgZmluZFBpZE9uUG9ydCxcbiAga2lsbFN0YWxlUHJvY2Vzc0RldGFpbGVkLFxuICB0eXBlIEtpbGxTdGFsZVByb2Nlc3NPdXRjb21lLFxufSBmcm9tICcuL1N0YWxlUHJvY2Vzc1JlY292ZXJ5LmpzJztcbmltcG9ydCB7IGVudiB9IGZyb20gJy4uLy4uL2NvbmZpZy9lbnYuanMnO1xuaW1wb3J0IHR5cGUgeyBTZXNzaW9uSW5mbyB9IGZyb20gJy4vSW5nZXN0Um91dGVzLmpzJztcblxuLyoqXG4gKiBEZWZhdWx0IGNvbnNvbGUgcG9ydCBmcm9tIHRoZSBlbnYgdmFyLiBVc2VkIGFzIGZhbGxiYWNrIHdoZW4gbm8gcG9ydFxuICogaXMgcHJvdmlkZWQgdmlhIGNvbmZpZyBmaWxlIG9yIG9wdGlvbnMuIFRoZSByZXNvbHV0aW9uIGhpZXJhcmNoeSBpczpcbiAqICAgMS4gb3B0aW9ucy5wb3J0IChmcm9tIGNvbmZpZyBmaWxlLCByZXNvbHZlZCBieSB0aGUgREkgY29udGFpbmVyKVxuICogICAyLiBET0xMSE9VU0VfV0VCX0NPTlNPTEVfUE9SVCBlbnYgdmFyXG4gKiAgIDMuIDQxNzE1IChoYXJkY29kZWQgZGVmYXVsdCBpbiBlbnYudHMpXG4gKi9cbmNvbnN0IERFRkFVTFRfQ09OU09MRV9QT1JUID0gZW52LkRPTExIT1VTRV9XRUJfQ09OU09MRV9QT1JUO1xuY29uc3QgTEVHQUNZX0NPTlNPTEVfRkFMTEJBQ0tfUE9SVCA9IDM5Mzk7XG5jb25zdCBTWU5USEVUSUNfUE9SVF9PV05FUl9TRVNTSU9OX1BSRUZJWCA9ICdwb3J0LW93bmVyLSc7XG5jb25zdCBMRUFERVJfRElTQ09WRVJZX1RJTUVPVVRfTVMgPSAyXzAwMDtcbmNvbnN0IEZPTExPV0VSX0FVVEhPUklUWV9NT05JVE9SX0NPTkZJRyA9IHtcbiAgaW50ZXJ2YWxNczogZW52LkRPTExIT1VTRV9DT05TT0xFX0FVVEhPUklUWV9SRUNIRUNLX01TLFxuICBqaXR0ZXJNczogZW52LkRPTExIT1VTRV9DT05TT0xFX0FVVEhPUklUWV9SRUNIRUNLX0pJVFRFUl9NUyxcbiAgZmFpbHVyZVRocmVzaG9sZDogZW52LkRPTExIT1VTRV9DT05TT0xFX0FVVEhPUklUWV9SRUNIRUNLX0ZBSUxVUkVfVEhSRVNIT0xELFxuICBmYWlsdXJlQ29vbGRvd25NczogZW52LkRPTExIT1VTRV9DT05TT0xFX0FVVEhPUklUWV9SRUNIRUNLX0ZBSUxVUkVfQ09PTERPV05fTVMsXG59IGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBjdXJyZW50VGltZXN0YW1wKCk6IHN0cmluZyB7XG4gIHJldHVybiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVGb2xsb3dlckF1dGhvcml0eVJlY2hlY2tJbnRlcnZhbChzZXNzaW9uSWQ6IHN0cmluZyk6IG51bWJlciB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRTZXNzaW9uSWQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShzZXNzaW9uSWQpLm5vcm1hbGl6ZWRDb250ZW50O1xuICBsZXQgaGFzaCA9IDA7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBub3JtYWxpemVkU2Vzc2lvbklkLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGNvbnN0IGNvZGVQb2ludCA9IG5vcm1hbGl6ZWRTZXNzaW9uSWQuY29kZVBvaW50QXQoaW5kZXgpID8/IDA7XG4gICAgaGFzaCA9IChoYXNoICogMzEgKyBjb2RlUG9pbnQpID4+PiAwO1xuICAgIGlmIChjb2RlUG9pbnQgPiAweGZmZmYpIHtcbiAgICAgIGluZGV4ICs9IDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBGT0xMT1dFUl9BVVRIT1JJVFlfTU9OSVRPUl9DT05GSUcuaW50ZXJ2YWxNcyArIChoYXNoICUgKEZPTExPV0VSX0FVVEhPUklUWV9NT05JVE9SX0NPTkZJRy5qaXR0ZXJNcyArIDEpKTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBzdGFydGluZyB0aGUgdW5pZmllZCBjb25zb2xlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVuaWZpZWRDb25zb2xlT3B0aW9ucyB7XG4gIC8qKiBUaGlzIHByb2Nlc3MncyB1bmlxdWUgc2Vzc2lvbiBJRCAqL1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgLyoqIFN0YWJsZSBEb2xsaG91c2Ugc2Vzc2lvbiBpZGVudGl0eSBzaG93biB0byBodW1hbnMgYW5kIHVzZWQgZm9yIHBlcnNpc3RlbmNlLiAqL1xuICBzdGFibGVTZXNzaW9uSWQ6IHN0cmluZztcbiAgLyoqIFBvcnRmb2xpbyBiYXNlIGRpcmVjdG9yeSAoZm9yIHN0YXJ0V2ViU2VydmVyKSAqL1xuICBwb3J0Zm9saW9EaXI6IHN0cmluZztcbiAgLyoqIExvZyBtZW1vcnkgc2luayAoZm9yIGNvbnNvbGUgaGlzdG9yeSkgKi9cbiAgbWVtb3J5U2luazogTWVtb3J5TG9nU2luaztcbiAgLyoqIE1ldHJpY3MgbWVtb3J5IHNpbmsgKi9cbiAgbWV0cmljc1Npbms/OiBNZW1vcnlNZXRyaWNzU2luaztcbiAgLyoqIE1DUC1BUUwgaGFuZGxlciBmb3IgcGVybWlzc2lvbiByb3V0ZXMgKHR5cGVkIGFzIGFueSB0byBhdm9pZCBjaXJjdWxhciBpbXBvcnRzKSAqL1xuICBtY3BBcWxIYW5kbGVyPzogYW55O1xuICAvKiogQ2FsbGJhY2sgdG8gcmVnaXN0ZXIgYSBsb2cgc2luayB3aXRoIHRoZSBMb2dNYW5hZ2VyICovXG4gIHJlZ2lzdGVyTG9nU2luazogKHNpbms6IHsgd3JpdGUoZW50cnk6IFVuaWZpZWRMb2dFbnRyeSk6IHZvaWQ7IGZsdXNoKCk6IFByb21pc2U8dm9pZD47IGNsb3NlKCk6IFByb21pc2U8dm9pZD4gfSkgPT4gdm9pZDtcbiAgLyoqIENhbGxiYWNrIHRvIHdpcmUgU1NFIGJyb2FkY2FzdHMgYWZ0ZXIgd2ViIHNlcnZlciBzdGFydHMgKi9cbiAgd2lyZVNTRUJyb2FkY2FzdHM6ICh3ZWJSZXN1bHQ6IHsgbG9nQnJvYWRjYXN0PzogKGVudHJ5OiBVbmlmaWVkTG9nRW50cnkpID0+IHZvaWQ7IG1ldHJpY3NPblNuYXBzaG90PzogKHNuYXBzaG90OiBNZXRyaWNTbmFwc2hvdCkgPT4gdm9pZCB9LCBtZXRyaWNzU2luaz86IE1lbW9yeU1ldHJpY3NTaW5rKSA9PiB2b2lkO1xuICAvKiogQ29uc29sZSBwb3J0IG92ZXJyaWRlIGZyb20gY29uZmlnIGZpbGUuIEZhbGxzIGJhY2sgdG8gZW52IHZhciBpZiBub3QgcHJvdmlkZWQuICovXG4gIHBvcnQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIHN0YXJ0aW5nIHRoZSB1bmlmaWVkIGNvbnNvbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5pZmllZENvbnNvbGVSZXN1bHQge1xuICByb2xlOiAnbGVhZGVyJyB8ICdmb2xsb3dlcic7XG4gIGVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdDtcbiAgLyoqIFBvcnQgdGhlIGNvbnNvbGUgaXMgcnVubmluZyBvbiAobGVhZGVyIG9ubHkpICovXG4gIHBvcnQ/OiBudW1iZXI7XG4gIC8qKiBDbGVhbnVwIGZ1bmN0aW9uIHRvIGNhbGwgb24gc2h1dGRvd24gKi9cbiAgY2xlYW51cDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBDaGVjayBmb3IgYSBydW5uaW5nIGxlZ2FjeSAocHJlLWF1dGhlbnRpY2F0aW9uKSBEb2xsaG91c2VNQ1AgY29uc29sZSBhbmRcbiAqIGxvZyBhIFdBUk4tbGV2ZWwgbWVzc2FnZSBpZiBvbmUgaXMgZm91bmQgKCMxNzk0KS5cbiAqXG4gKiBFeHRyYWN0ZWQgZnJvbSBgc3RhcnRVbmlmaWVkQ29uc29sZWAgc28gdGhlIHdpcmluZyBjYW4gYmUgaW50ZWdyYXRpb24tXG4gKiB0ZXN0ZWQgaW4gaXNvbGF0aW9uIHdpdGhvdXQgc3Bpbm5pbmcgdXAgYSBmdWxsIHdlYiBzZXJ2ZXIgYW5kIGxlYWRlclxuICogZWxlY3Rpb24uIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBmaXJlLWFuZC1mb3JnZXQ6IGRldGVjdGlvbiBmYWlsdXJlc1xuICogYXJlIGxvZ2dlZCBhdCBERUJVRyBhbmQgbmV2ZXIgcHJvcGFnYXRlLCBiZWNhdXNlIGEgZmFpbHVyZSBoZXJlIG11c3RcbiAqIG5vdCBibG9jayBsZWFkZXIgZWxlY3Rpb24gb2YgdGhlIGF1dGhlbnRpY2F0ZWQgY29uc29sZS5cbiAqXG4gKiBAcGFyYW0gY3VycmVudFBvcnQgLSBUaGUgcG9ydCB0aGUgYXV0aGVudGljYXRlZCBjb25zb2xlIGludGVuZHMgdG9cbiAqICAgICAgICAgICAgICAgICAgICAgIGJpbmQgdG8uIFVzZWQgaW4gdGhlIHdhcm5pbmcgbWVzc2FnZSB0byBoZWxwIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgdXNlciB0ZWxsIHRoZSB0d28gY29uc29sZXMgYXBhcnQuXG4gKiBAcGFyYW0gZGV0ZWN0ICAgICAgLSBPcHRpb25hbCBpbmplY3Rpb24gcG9pbnQgZm9yIHRoZSBkZXRlY3Rpb25cbiAqICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLiBEZWZhdWx0cyB0byBgZGV0ZWN0TGVnYWN5TGVhZGVyYC4gVGVzdHNcbiAqICAgICAgICAgICAgICAgICAgICAgIHBhc3MgYSBzdHViLlxuICogQHBhcmFtIGxvZyAgICAgICAgIC0gT3B0aW9uYWwgaW5qZWN0aW9uIHBvaW50IGZvciB0aGUgbG9nZ2VyLiBEZWZhdWx0c1xuICogICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIG1vZHVsZSBsb2dnZXIuIFRlc3RzIHBhc3MgYSBzcHkuXG4gKiBAcmV0dXJucyBUaGUgbGVnYWN5IGxlYWRlciBpbmZvIGZyb20gYGRldGVjdCgpYCwgb3IgbnVsbCBpZiBkZXRlY3Rpb25cbiAqICAgICAgICAgIHRocmV3LiBFeHBvc2VkIHNvIHRlc3RzIGNhbiBhc3NlcnQgdGhlIGZ1bGwgcmVzdWx0IHNoYXBlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FybklmTGVnYWN5Q29uc29sZVByZXNlbnQoXG4gIGN1cnJlbnRQb3J0OiBudW1iZXIsXG4gIGRldGVjdDogdHlwZW9mIGRldGVjdExlZ2FjeUxlYWRlciA9IGRldGVjdExlZ2FjeUxlYWRlcixcbiAgbG9nOiB0eXBlb2YgbG9nZ2VyID0gbG9nZ2VyLFxuKTogUHJvbWlzZTxBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIGRldGVjdExlZ2FjeUxlYWRlcj4+IHwgbnVsbD4ge1xuICB0cnkge1xuICAgIGNvbnN0IGxlZ2FjeSA9IGF3YWl0IGRldGVjdCgpO1xuICAgIGlmIChsZWdhY3kubGVnYWN5UnVubmluZykge1xuICAgICAgbG9nLndhcm4oXG4gICAgICAgIGBbVW5pZmllZENvbnNvbGVdIExlZ2FjeSAocHJlLWF1dGhlbnRpY2F0aW9uKSBEb2xsaG91c2VNQ1AgY29uc29sZSBkZXRlY3RlZCBgICtcbiAgICAgICAgYChwaWQ9JHtsZWdhY3kucGlkfSwgcG9ydD0ke2xlZ2FjeS5wb3J0fSkuIEJvdGggY29uc29sZXMgd2lsbCBydW4gYCArXG4gICAgICAgIGBpbmRlcGVuZGVudGx5IG9uIGRpZmZlcmVudCBwb3J0cyB3aXRoIGRpZmZlcmVudCBzZWN1cml0eSBwb3N0dXJlLiBgICtcbiAgICAgICAgYFRoZSBhdXRoZW50aWNhdGVkIGNvbnNvbGUgKHRoaXMgcHJvY2VzcykgdXNlcyBwb3J0ICR7Y3VycmVudFBvcnR9OyBgICtcbiAgICAgICAgYHRoZSBsZWdhY3kgY29uc29sZSB1c2VzIHBvcnQgJHtsZWdhY3kucG9ydCA/PyBMRUdBQ1lfQ09OU09MRV9GQUxMQkFDS19QT1JUfS4gYCArXG4gICAgICAgIGBGb3IgY29uc2lzdGVudCBzZWN1cml0eSwgdXBkYXRlIHRoZSBsZWdhY3kgaW5zdGFsbGF0aW9uIHRvIGEgYCArXG4gICAgICAgIGB2ZXJzaW9uIHdpdGggdGhlIGF1dGhlbnRpY2F0ZWQgY29uc29sZS5gLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGxlZ2FjeTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gQmVzdC1lZmZvcnQg4oCUIG5ldmVyIGJsb2NrIGVsZWN0aW9uIG9uIGEgZGV0ZWN0aW9uIGZhaWx1cmVcbiAgICBsb2cuZGVidWcoJ1tVbmlmaWVkQ29uc29sZV0gTGVnYWN5IGxlYWRlciBkZXRlY3Rpb24gZmFpbGVkJywge1xuICAgICAgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSxcbiAgICB9KTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5pbnRlcmZhY2UgU2Vzc2lvbkFwaVJlY29yZCB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBwaWQ6IG51bWJlcjtcbiAgc3RhcnRlZEF0Pzogc3RyaW5nO1xuICBsYXN0SGVhcnRiZWF0Pzogc3RyaW5nO1xuICBzdGF0dXM/OiBzdHJpbmc7XG4gIGlzTGVhZGVyPzogYm9vbGVhbjtcbiAga2luZD86IHN0cmluZztcbiAgc2VydmVyVmVyc2lvbj86IHN0cmluZztcbiAgY29uc29sZVByb3RvY29sVmVyc2lvbj86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQb3J0TGVhZGVyRGlzY292ZXJ5IHtcbiAgbGVhZGVySW5mbzogQ29uc29sZUxlYWRlckluZm8gfCBudWxsO1xuICBvd25lclBpZDogbnVtYmVyIHwgbnVsbDtcbiAgc291cmNlOiAnYXBpJyB8ICdsb2NrJyB8ICdzeW50aGV0aWMnIHwgJ25vbmUnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJpbmRGYWlsdXJlUmVjb3ZlcnlSZXN1bHQgZXh0ZW5kcyBQb3J0TGVhZGVyRGlzY292ZXJ5IHtcbiAgbG9ja0NsZWFudXBBdHRlbXB0ZWQ6IGJvb2xlYW47XG4gIGxvY2tDbGVhbnVwUGVyZm9ybWVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvcnRPd25lclJlcGxhY2VtZW50RGVjaXNpb24ge1xuICBzaG91bGRFdmljdDogYm9vbGVhbjtcbiAgb3duZXJQaWQ6IG51bWJlciB8IG51bGw7XG4gIHByZWZlcmVuY2U6IExlYWRlclByZWZlcmVuY2VEZWNpc2lvbiB8IG51bGw7XG59XG5cbmludGVyZmFjZSBGb3JjZVRha2VvdmVyQXR0ZW1wdFJlc3VsdCB7XG4gIHdlYlJlc3VsdDogV2ViU2VydmVyUmVzdWx0O1xuICBlbGVjdGlvbjogRWxlY3Rpb25SZXN1bHQ7XG4gIGZhbGxiYWNrOiBQb3J0TGVhZGVyRGlzY292ZXJ5O1xuICByZXBsYWNlbWVudDogUG9ydE93bmVyUmVwbGFjZW1lbnREZWNpc2lvbjtcbiAgcmVjb3ZlcmVkU2Vzc2lvbnM6IFNlc3Npb25JbmZvW107XG4gIGZvcmNlZEtpbGw6IEtpbGxTdGFsZVByb2Nlc3NPdXRjb21lIHwgbnVsbDtcbiAgdGFrZW92ZXJBdHRlbXB0ZWQ6IGJvb2xlYW47XG4gIHJlYm91bmRMb2NrQ2xhaW1lZDogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEZvbGxvd2VyQXV0aG9yaXR5UmVzb2x1dGlvbiB7XG4gIGVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdDtcbiAgZGlzY292ZXJ5OiBQb3J0TGVhZGVyRGlzY292ZXJ5IHwgbnVsbDtcbiAgcmVwbGFjZW1lbnQ6IFBvcnRPd25lclJlcGxhY2VtZW50RGVjaXNpb24gfCBudWxsO1xuICBmb3JjZWRDbGFpbTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEZvbGxvd2VyQXV0aG9yaXR5RGVwZW5kZW5jaWVzIHtcbiAgaXNMZWFkZXJXZWJDb25zb2xlUmVhY2hhYmxlSW1wbD86IHR5cGVvZiBpc0xlYWRlcldlYkNvbnNvbGVSZWFjaGFibGU7XG4gIGRpc2NvdmVyTGVhZGVyU2VydmluZ1BvcnRJbXBsPzogdHlwZW9mIGRpc2NvdmVyTGVhZGVyU2VydmluZ1BvcnQ7XG4gIGZvcmNlQ2xhaW1MZWFkZXJzaGlwSW1wbD86IHR5cGVvZiBmb3JjZUNsYWltTGVhZGVyc2hpcDtcbiAgZGVsZXRlTGVhZGVyTG9ja0ltcGw/OiB0eXBlb2YgZGVsZXRlTGVhZGVyTG9jaztcbn1cblxuaW50ZXJmYWNlIEZvbGxvd2VyQXV0aG9yaXR5TW9uaXRvckRlcGVuZGVuY2llcyBleHRlbmRzIEZvbGxvd2VyQXV0aG9yaXR5RGVwZW5kZW5jaWVzIHtcbiAgcmVzb2x2ZUZvbGxvd2VyQXV0aG9yaXR5SW1wbD86IHR5cGVvZiByZXNvbHZlRm9sbG93ZXJBdXRob3JpdHk7XG4gIHNldEludGVydmFsSW1wbD86IHR5cGVvZiBzZXRJbnRlcnZhbDtcbiAgY2xlYXJJbnRlcnZhbEltcGw/OiB0eXBlb2YgY2xlYXJJbnRlcnZhbDtcbiAgbm93SW1wbD86ICgpID0+IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIERpc2NvdmVyeURlcGVuZGVuY2llcyB7XG4gIGZldGNoSW1wbD86IHR5cGVvZiBmZXRjaDtcbiAgZmluZFBpZE9uUG9ydEltcGw/OiB0eXBlb2YgZmluZFBpZE9uUG9ydDtcbiAgcmVhZExlYWRlckxvY2tJbXBsPzogdHlwZW9mIHJlYWRMZWFkZXJMb2NrO1xufVxuXG5mdW5jdGlvbiBidWlsZERpc2NvdmVyeUhlYWRlcnMoYXV0aFRva2VuOiBzdHJpbmcgfCBudWxsKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIHJldHVybiBhdXRoVG9rZW4gPyB7IEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHthdXRoVG9rZW59YCB9IDoge307XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaExlYWRlclNlc3Npb25zU25hcHNob3QoXG4gIHBvcnQ6IG51bWJlcixcbiAgYXV0aFRva2VuOiBzdHJpbmcgfCBudWxsLFxuICBmZXRjaEltcGw6IHR5cGVvZiBmZXRjaCA9IGZldGNoLFxuKTogUHJvbWlzZTxTZXNzaW9uSW5mb1tdPiB7XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgTEVBREVSX0RJU0NPVkVSWV9USU1FT1VUX01TKTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoSW1wbChgaHR0cDovLzEyNy4wLjAuMToke3BvcnR9L2FwaS9zZXNzaW9uc2AsIHtcbiAgICAgIGhlYWRlcnM6IGJ1aWxkRGlzY292ZXJ5SGVhZGVycyhhdXRoVG9rZW4pLFxuICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyB7IHNlc3Npb25zPzogU2Vzc2lvbkluZm9bXSB9O1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGRhdGEuc2Vzc2lvbnMpID8gZGF0YS5zZXNzaW9ucyA6IFtdO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gW107XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkTGVhZGVySW5mb0Zyb21TZXNzaW9uKHBvcnQ6IG51bWJlciwgb3duZXJQaWQ6IG51bWJlciwgbGVhZGVyU2Vzc2lvbjogU2Vzc2lvbkFwaVJlY29yZCk6IENvbnNvbGVMZWFkZXJJbmZvIHtcbiAgcmV0dXJuIHtcbiAgICB2ZXJzaW9uOiBMT0NLX1ZFUlNJT04sXG4gICAgcGlkOiBvd25lclBpZCxcbiAgICBwb3J0LFxuICAgIHNlc3Npb25JZDogVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUobGVhZGVyU2Vzc2lvbi5zZXNzaW9uSWQpLm5vcm1hbGl6ZWRDb250ZW50LFxuICAgIHN0YXJ0ZWRBdDogbGVhZGVyU2Vzc2lvbi5zdGFydGVkQXQgPz8gY3VycmVudFRpbWVzdGFtcCgpLFxuICAgIGhlYXJ0YmVhdDogbGVhZGVyU2Vzc2lvbi5sYXN0SGVhcnRiZWF0ID8/IGN1cnJlbnRUaW1lc3RhbXAoKSxcbiAgICBzZXJ2ZXJWZXJzaW9uOiBsZWFkZXJTZXNzaW9uLnNlcnZlclZlcnNpb24gPz8gTEVHQUNZX1NFUlZFUl9WRVJTSU9OLFxuICAgIGNvbnNvbGVQcm90b2NvbFZlcnNpb246IGxlYWRlclNlc3Npb24uY29uc29sZVByb3RvY29sVmVyc2lvbiA/PyBDT05TT0xFX1BST1RPQ09MX1ZFUlNJT04sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkU3ludGhldGljTGVhZGVySW5mbyhwb3J0OiBudW1iZXIsIG93bmVyUGlkOiBudW1iZXIpOiBDb25zb2xlTGVhZGVySW5mbyB7XG4gIGNvbnN0IG5vdyA9IGN1cnJlbnRUaW1lc3RhbXAoKTtcbiAgcmV0dXJuIHtcbiAgICB2ZXJzaW9uOiBMT0NLX1ZFUlNJT04sXG4gICAgcGlkOiBvd25lclBpZCxcbiAgICBwb3J0LFxuICAgIHNlc3Npb25JZDogYCR7U1lOVEhFVElDX1BPUlRfT1dORVJfU0VTU0lPTl9QUkVGSVh9JHtvd25lclBpZH1gLFxuICAgIHN0YXJ0ZWRBdDogbm93LFxuICAgIGhlYXJ0YmVhdDogbm93LFxuICAgIHNlcnZlclZlcnNpb246IExFR0FDWV9TRVJWRVJfVkVSU0lPTixcbiAgICBjb25zb2xlUHJvdG9jb2xWZXJzaW9uOiBDT05TT0xFX1BST1RPQ09MX1ZFUlNJT04sXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRpc2NvdmVyTGVhZGVyVmlhU2Vzc2lvbnNBcGkoXG4gIHBvcnQ6IG51bWJlcixcbiAgb3duZXJQaWQ6IG51bWJlcixcbiAgYXV0aFRva2VuOiBzdHJpbmcgfCBudWxsLFxuICBmZXRjaEltcGw6IHR5cGVvZiBmZXRjaCxcbik6IFByb21pc2U8Q29uc29sZUxlYWRlckluZm8gfCBudWxsPiB7XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgTEVBREVSX0RJU0NPVkVSWV9USU1FT1VUX01TKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hJbXBsKGBodHRwOi8vMTI3LjAuMC4xOiR7cG9ydH0vYXBpL3Nlc3Npb25zYCwge1xuICAgICAgaGVhZGVyczogYnVpbGREaXNjb3ZlcnlIZWFkZXJzKGF1dGhUb2tlbiksXG4gICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgeyBzZXNzaW9ucz86IFNlc3Npb25BcGlSZWNvcmRbXSB9O1xuICAgIGNvbnN0IHNlc3Npb25zID0gQXJyYXkuaXNBcnJheShwYXlsb2FkLnNlc3Npb25zKSA/IHBheWxvYWQuc2Vzc2lvbnMgOiBbXTtcbiAgICBjb25zdCBsZWFkZXJTZXNzaW9uID0gc2Vzc2lvbnMuZmluZCgoc2Vzc2lvbikgPT5cbiAgICAgIHNlc3Npb24ucGlkID09PSBvd25lclBpZCAmJlxuICAgICAgc2Vzc2lvbi5pc0xlYWRlciA9PT0gdHJ1ZSAmJlxuICAgICAgc2Vzc2lvbi5raW5kID09PSAnbWNwJyAmJlxuICAgICAgc2Vzc2lvbi5zdGF0dXMgIT09ICdzdG9wcGVkJ1xuICAgICk7XG4gICAgcmV0dXJuIGxlYWRlclNlc3Npb24gPyBidWlsZExlYWRlckluZm9Gcm9tU2Vzc2lvbihwb3J0LCBvd25lclBpZCwgbGVhZGVyU2Vzc2lvbikgOiBudWxsO1xuICB9IGZpbmFsbHkge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydChcbiAgcG9ydDogbnVtYmVyLFxuICBhdXRoVG9rZW46IHN0cmluZyB8IG51bGwsXG4gIGRlcHM6IERpc2NvdmVyeURlcGVuZGVuY2llcyA9IHt9LFxuKTogUHJvbWlzZTxQb3J0TGVhZGVyRGlzY292ZXJ5PiB7XG4gIGNvbnN0IGZldGNoSW1wbCA9IGRlcHMuZmV0Y2hJbXBsID8/IGZldGNoO1xuICBjb25zdCBmaW5kUGlkT25Qb3J0SW1wbCA9IGRlcHMuZmluZFBpZE9uUG9ydEltcGwgPz8gZmluZFBpZE9uUG9ydDtcbiAgY29uc3QgcmVhZExlYWRlckxvY2tJbXBsID0gZGVwcy5yZWFkTGVhZGVyTG9ja0ltcGwgPz8gcmVhZExlYWRlckxvY2s7XG4gIGNvbnN0IG93bmVyUGlkID0gYXdhaXQgZmluZFBpZE9uUG9ydEltcGwocG9ydCk7XG5cbiAgaWYgKG93bmVyUGlkICE9PSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxlYWRlckluZm8gPSBhd2FpdCBkaXNjb3ZlckxlYWRlclZpYVNlc3Npb25zQXBpKHBvcnQsIG93bmVyUGlkLCBhdXRoVG9rZW4sIGZldGNoSW1wbCk7XG4gICAgICBpZiAobGVhZGVySW5mbykge1xuICAgICAgICByZXR1cm4geyBvd25lclBpZCwgc291cmNlOiAnYXBpJywgbGVhZGVySW5mbyB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdbVW5pZmllZENvbnNvbGVdIEZhaWxlZCB0byBxdWVyeSBhY3RpdmUgbGVhZGVyIHNlc3Npb25zJywge1xuICAgICAgICBwb3J0LFxuICAgICAgICBvd25lclBpZCxcbiAgICAgICAgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGxvY2sgPSBhd2FpdCByZWFkTGVhZGVyTG9ja0ltcGwoKTtcbiAgaWYgKGxvY2s/LnBvcnQgPT09IHBvcnQgJiYgKG93bmVyUGlkID09PSBudWxsIHx8IGxvY2sucGlkID09PSBvd25lclBpZCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3duZXJQaWQ6IG93bmVyUGlkID8/IGxvY2sucGlkLFxuICAgICAgc291cmNlOiAnbG9jaycsXG4gICAgICBsZWFkZXJJbmZvOiB7XG4gICAgICAgIC4uLmxvY2ssXG4gICAgICAgIHNlc3Npb25JZDogVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUobG9jay5zZXNzaW9uSWQpLm5vcm1hbGl6ZWRDb250ZW50LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKG93bmVyUGlkICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG93bmVyUGlkLFxuICAgICAgc291cmNlOiAnc3ludGhldGljJyxcbiAgICAgIGxlYWRlckluZm86IGJ1aWxkU3ludGhldGljTGVhZGVySW5mbyhwb3J0LCBvd25lclBpZCksXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7IGxlYWRlckluZm86IG51bGwsIG93bmVyUGlkOiBudWxsLCBzb3VyY2U6ICdub25lJyB9O1xufVxuXG5pbnRlcmZhY2UgQmluZEZhaWx1cmVSZWNvdmVyeURlcGVuZGVuY2llcyBleHRlbmRzIERpc2NvdmVyeURlcGVuZGVuY2llcyB7XG4gIGRlbGV0ZUxlYWRlckxvY2tJbXBsPzogdHlwZW9mIGRlbGV0ZUxlYWRlckxvY2s7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWNvdmVyTGVhZGVyQmluZEZhaWx1cmUoXG4gIHByb3Zpc2lvbmFsTGVhZGVyOiBDb25zb2xlTGVhZGVySW5mbyxcbiAgcG9ydDogbnVtYmVyLFxuICBhdXRoVG9rZW46IHN0cmluZyB8IG51bGwsXG4gIGRlcHM6IEJpbmRGYWlsdXJlUmVjb3ZlcnlEZXBlbmRlbmNpZXMgPSB7fSxcbik6IFByb21pc2U8QmluZEZhaWx1cmVSZWNvdmVyeVJlc3VsdD4ge1xuICBjb25zdCByZWFkTGVhZGVyTG9ja0ltcGwgPSBkZXBzLnJlYWRMZWFkZXJMb2NrSW1wbCA/PyByZWFkTGVhZGVyTG9jaztcbiAgY29uc3QgZGVsZXRlTGVhZGVyTG9ja0ltcGwgPSBkZXBzLmRlbGV0ZUxlYWRlckxvY2tJbXBsID8/IGRlbGV0ZUxlYWRlckxvY2s7XG4gIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIExlYWRlciBiaW5kIHJlY292ZXJ5IGluaXRpYXRlZCcsIHtcbiAgICBwcm92aXNpb25hbFNlc3Npb25JZDogcHJvdmlzaW9uYWxMZWFkZXIuc2Vzc2lvbklkLFxuICAgIHByb3Zpc2lvbmFsUGlkOiBwcm92aXNpb25hbExlYWRlci5waWQsXG4gICAgcG9ydCxcbiAgfSk7XG5cbiAgbGV0IGZhbGxiYWNrID0gYXdhaXQgZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydChwb3J0LCBhdXRoVG9rZW4sIGRlcHMpO1xuICBsZXQgbG9ja0NsZWFudXBBdHRlbXB0ZWQgPSBmYWxzZTtcbiAgbGV0IGxvY2tDbGVhbnVwUGVyZm9ybWVkID0gZmFsc2U7XG4gIGNvbnN0IGN1cnJlbnRMb2NrID0gYXdhaXQgcmVhZExlYWRlckxvY2tJbXBsKCk7XG4gIGNvbnN0IHByb3Zpc2lvbmFsTG9ja01hdGNoZXMgPSAoXG4gICAgY3VycmVudExvY2s/LnBpZCA9PT0gcHJvdmlzaW9uYWxMZWFkZXIucGlkICYmXG4gICAgY3VycmVudExvY2sucG9ydCA9PT0gcHJvdmlzaW9uYWxMZWFkZXIucG9ydCAmJlxuICAgIGN1cnJlbnRMb2NrLnNlc3Npb25JZCA9PT0gcHJvdmlzaW9uYWxMZWFkZXIuc2Vzc2lvbklkXG4gICk7XG4gIGNvbnN0IGZhbGxiYWNrUG9pbnRzVG9Qcm92aXNpb25hbExlYWRlciA9IChcbiAgICBmYWxsYmFjay5sZWFkZXJJbmZvPy5waWQgPT09IHByb3Zpc2lvbmFsTGVhZGVyLnBpZCAmJlxuICAgIGZhbGxiYWNrLmxlYWRlckluZm8ucG9ydCA9PT0gcHJvdmlzaW9uYWxMZWFkZXIucG9ydCAmJlxuICAgIGZhbGxiYWNrLmxlYWRlckluZm8uc2Vzc2lvbklkID09PSBwcm92aXNpb25hbExlYWRlci5zZXNzaW9uSWRcbiAgKTtcblxuICBpZiAocHJvdmlzaW9uYWxMb2NrTWF0Y2hlcykge1xuICAgIGxvY2tDbGVhbnVwQXR0ZW1wdGVkID0gdHJ1ZTtcbiAgICBhd2FpdCBkZWxldGVMZWFkZXJMb2NrSW1wbCgpO1xuICAgIGxvY2tDbGVhbnVwUGVyZm9ybWVkID0gdHJ1ZTtcbiAgICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBSZW1vdmVkIHByb3Zpc2lvbmFsIGxlYWRlciBsb2NrIGFmdGVyIGJpbmQgZmFpbHVyZScsIHtcbiAgICAgIHByb3Zpc2lvbmFsU2Vzc2lvbklkOiBwcm92aXNpb25hbExlYWRlci5zZXNzaW9uSWQsXG4gICAgICBwcm92aXNpb25hbFBpZDogcHJvdmlzaW9uYWxMZWFkZXIucGlkLFxuICAgICAgcG9ydCxcbiAgICB9KTtcbiAgICBpZiAoZmFsbGJhY2tQb2ludHNUb1Byb3Zpc2lvbmFsTGVhZGVyKSB7XG4gICAgICBmYWxsYmFjayA9IGF3YWl0IGRpc2NvdmVyTGVhZGVyU2VydmluZ1BvcnQocG9ydCwgYXV0aFRva2VuLCBkZXBzKTtcbiAgICB9XG4gIH1cblxuICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBMZWFkZXIgYmluZCByZWNvdmVyeSBjb21wbGV0ZWQnLCB7XG4gICAgcHJvdmlzaW9uYWxTZXNzaW9uSWQ6IHByb3Zpc2lvbmFsTGVhZGVyLnNlc3Npb25JZCxcbiAgICBwcm92aXNpb25hbFBpZDogcHJvdmlzaW9uYWxMZWFkZXIucGlkLFxuICAgIHBvcnQsXG4gICAgZGlzY292ZXJ5U291cmNlOiBmYWxsYmFjay5zb3VyY2UsXG4gICAgb3duZXJQaWQ6IGZhbGxiYWNrLm93bmVyUGlkLFxuICAgIGxvY2tDbGVhbnVwQXR0ZW1wdGVkLFxuICAgIGxvY2tDbGVhbnVwUGVyZm9ybWVkLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIC4uLmZhbGxiYWNrLFxuICAgIGxvY2tDbGVhbnVwQXR0ZW1wdGVkLFxuICAgIGxvY2tDbGVhbnVwUGVyZm9ybWVkLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZhbHVhdGVQb3J0T3duZXJSZXBsYWNlbWVudChcbiAgY2FuZGlkYXRlTGVhZGVyOiBDb25zb2xlTGVhZGVySW5mbyxcbiAgZmFsbGJhY2s6IFBvcnRMZWFkZXJEaXNjb3ZlcnksXG4pOiBQb3J0T3duZXJSZXBsYWNlbWVudERlY2lzaW9uIHtcbiAgaWYgKCFmYWxsYmFjay5sZWFkZXJJbmZvIHx8IGZhbGxiYWNrLm93bmVyUGlkID09PSBudWxsIHx8IGZhbGxiYWNrLm93bmVyUGlkID09PSBjYW5kaWRhdGVMZWFkZXIucGlkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3VsZEV2aWN0OiBmYWxzZSxcbiAgICAgIG93bmVyUGlkOiBmYWxsYmFjay5vd25lclBpZCxcbiAgICAgIHByZWZlcmVuY2U6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHByZWZlcmVuY2UgPSBldmFsdWF0ZUxlYWRlclByZWZlcmVuY2UoY2FuZGlkYXRlTGVhZGVyLCBmYWxsYmFjay5sZWFkZXJJbmZvKTtcbiAgcmV0dXJuIHtcbiAgICBzaG91bGRFdmljdDogcHJlZmVyZW5jZS5zaG91bGRSZXBsYWNlLFxuICAgIG93bmVyUGlkOiBmYWxsYmFjay5vd25lclBpZCxcbiAgICBwcmVmZXJlbmNlLFxuICB9O1xufVxuXG5mdW5jdGlvbiBidWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgY29uc29sZVBvcnQ6IG51bWJlcixcbiAgcHJvdmlzaW9uYWxMZWFkZXI6IENvbnNvbGVMZWFkZXJJbmZvLFxuICBiaW5kUmVzdWx0OiBXZWJTZXJ2ZXJSZXN1bHRbJ2JpbmRSZXN1bHQnXSxcbiAgZmFsbGJhY2s6IFBvcnRMZWFkZXJEaXNjb3ZlcnksXG4gIHJlcGxhY2VtZW50PzogUG9ydE93bmVyUmVwbGFjZW1lbnREZWNpc2lvbixcbiAgZm9yY2VkS2lsbD86IEtpbGxTdGFsZVByb2Nlc3NPdXRjb21lIHwgbnVsbCxcbikge1xuICByZXR1cm4ge1xuICAgIHBvcnQ6IGNvbnNvbGVQb3J0LFxuICAgIGJpbmRFcnJvcjogYmluZFJlc3VsdD8uZXJyb3IsXG4gICAgYmluZERldGFpbDogYmluZFJlc3VsdD8uZGV0YWlsLFxuICAgIHByb3Zpc2lvbmFsTGVhZGVyUGlkOiBwcm92aXNpb25hbExlYWRlci5waWQsXG4gICAgcHJvdmlzaW9uYWxMZWFkZXJTZXNzaW9uSWQ6IHByb3Zpc2lvbmFsTGVhZGVyLnNlc3Npb25JZCxcbiAgICBwcm92aXNpb25hbExlYWRlclZlcnNpb246IHByb3Zpc2lvbmFsTGVhZGVyLnNlcnZlclZlcnNpb24gPz8gTEVHQUNZX1NFUlZFUl9WRVJTSU9OLFxuICAgIHByb3Zpc2lvbmFsTGVhZGVyUHJvdG9jb2xWZXJzaW9uOiBwcm92aXNpb25hbExlYWRlci5jb25zb2xlUHJvdG9jb2xWZXJzaW9uID8/IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTixcbiAgICBmYWxsYmFja093bmVyUGlkOiBmYWxsYmFjay5vd25lclBpZCxcbiAgICBmYWxsYmFja1NvdXJjZTogZmFsbGJhY2suc291cmNlLFxuICAgIGZhbGxiYWNrTGVhZGVyUGlkOiBmYWxsYmFjay5sZWFkZXJJbmZvPy5waWQsXG4gICAgZmFsbGJhY2tMZWFkZXJTZXNzaW9uSWQ6IGZhbGxiYWNrLmxlYWRlckluZm8/LnNlc3Npb25JZCxcbiAgICBmYWxsYmFja0xlYWRlclZlcnNpb246IGZhbGxiYWNrLmxlYWRlckluZm8/LnNlcnZlclZlcnNpb24gPz8gTEVHQUNZX1NFUlZFUl9WRVJTSU9OLFxuICAgIGZhbGxiYWNrTGVhZGVyUHJvdG9jb2xWZXJzaW9uOiBmYWxsYmFjay5sZWFkZXJJbmZvPy5jb25zb2xlUHJvdG9jb2xWZXJzaW9uID8/IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTixcbiAgICByZXBsYWNlbWVudFNob3VsZEV2aWN0OiByZXBsYWNlbWVudD8uc2hvdWxkRXZpY3QgPz8gZmFsc2UsXG4gICAgcmVwbGFjZW1lbnRSZWFzb246IHJlcGxhY2VtZW50Py5wcmVmZXJlbmNlPy5yZWFzb24sXG4gICAgZm9yY2VkS2lsbFJlYXNvbjogZm9yY2VkS2lsbD8ucmVhc29uLFxuICAgIGZvcmNlZEtpbGxQaWQ6IGZvcmNlZEtpbGw/LnBpZCxcbiAgICBmb3JjZWRLaWxsRGV0YWlsOiBmb3JjZWRLaWxsPy5kZXRhaWwsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQXV0aG9yaXR5UmVzb2x1dGlvbkxvZ0NvbnRleHQoXG4gIGNvbnNvbGVQb3J0OiBudW1iZXIsXG4gIGVsZWN0ZWRMZWFkZXI6IENvbnNvbGVMZWFkZXJJbmZvLFxuICBkaXNjb3Zlcnk6IFBvcnRMZWFkZXJEaXNjb3ZlcnkgfCBudWxsLFxuICByZXBsYWNlbWVudDogUG9ydE93bmVyUmVwbGFjZW1lbnREZWNpc2lvbiB8IG51bGwsXG4pIHtcbiAgcmV0dXJuIHtcbiAgICBwb3J0OiBjb25zb2xlUG9ydCxcbiAgICBlbGVjdGVkTGVhZGVyUGlkOiBlbGVjdGVkTGVhZGVyLnBpZCxcbiAgICBlbGVjdGVkTGVhZGVyU2Vzc2lvbklkOiBlbGVjdGVkTGVhZGVyLnNlc3Npb25JZCxcbiAgICBlbGVjdGVkTGVhZGVyVmVyc2lvbjogZWxlY3RlZExlYWRlci5zZXJ2ZXJWZXJzaW9uID8/IExFR0FDWV9TRVJWRVJfVkVSU0lPTixcbiAgICBlbGVjdGVkTGVhZGVyUHJvdG9jb2xWZXJzaW9uOiBlbGVjdGVkTGVhZGVyLmNvbnNvbGVQcm90b2NvbFZlcnNpb24gPz8gQ09OU09MRV9QUk9UT0NPTF9WRVJTSU9OLFxuICAgIHNlcnZpbmdPd25lclBpZDogZGlzY292ZXJ5Py5vd25lclBpZCA/PyBudWxsLFxuICAgIHNlcnZpbmdTb3VyY2U6IGRpc2NvdmVyeT8uc291cmNlID8/ICdub25lJyxcbiAgICBzZXJ2aW5nTGVhZGVyUGlkOiBkaXNjb3Zlcnk/LmxlYWRlckluZm8/LnBpZCA/PyBudWxsLFxuICAgIHNlcnZpbmdMZWFkZXJTZXNzaW9uSWQ6IGRpc2NvdmVyeT8ubGVhZGVySW5mbz8uc2Vzc2lvbklkID8/IG51bGwsXG4gICAgc2VydmluZ0xlYWRlclZlcnNpb246IGRpc2NvdmVyeT8ubGVhZGVySW5mbz8uc2VydmVyVmVyc2lvbiA/PyBMRUdBQ1lfU0VSVkVSX1ZFUlNJT04sXG4gICAgc2VydmluZ0xlYWRlclByb3RvY29sVmVyc2lvbjogZGlzY292ZXJ5Py5sZWFkZXJJbmZvPy5jb25zb2xlUHJvdG9jb2xWZXJzaW9uID8/IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTixcbiAgICByZXBsYWNlbWVudFNob3VsZEV2aWN0OiByZXBsYWNlbWVudD8uc2hvdWxkRXZpY3QgPz8gZmFsc2UsXG4gICAgcmVwbGFjZW1lbnRSZWFzb246IHJlcGxhY2VtZW50Py5wcmVmZXJlbmNlPy5yZWFzb24gPz8gbnVsbCxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVGb2xsb3dlckF1dGhvcml0eShcbiAgc2Vzc2lvbklkOiBzdHJpbmcsXG4gIGNvbnNvbGVQb3J0OiBudW1iZXIsXG4gIGVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdCxcbiAgZGVwczogRm9sbG93ZXJBdXRob3JpdHlEZXBlbmRlbmNpZXMgPSB7fSxcbik6IFByb21pc2U8Rm9sbG93ZXJBdXRob3JpdHlSZXNvbHV0aW9uPiB7XG4gIGNvbnN0IGlzTGVhZGVyV2ViQ29uc29sZVJlYWNoYWJsZUltcGwgPSBkZXBzLmlzTGVhZGVyV2ViQ29uc29sZVJlYWNoYWJsZUltcGwgPz8gaXNMZWFkZXJXZWJDb25zb2xlUmVhY2hhYmxlO1xuICBjb25zdCBkaXNjb3ZlckxlYWRlclNlcnZpbmdQb3J0SW1wbCA9IGRlcHMuZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydEltcGwgPz8gZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydDtcbiAgY29uc3QgZm9yY2VDbGFpbUxlYWRlcnNoaXBJbXBsID0gZGVwcy5mb3JjZUNsYWltTGVhZGVyc2hpcEltcGwgPz8gZm9yY2VDbGFpbUxlYWRlcnNoaXA7XG4gIGNvbnN0IGRlbGV0ZUxlYWRlckxvY2tJbXBsID0gZGVwcy5kZWxldGVMZWFkZXJMb2NrSW1wbCA/PyBkZWxldGVMZWFkZXJMb2NrO1xuXG4gIGNvbnN0IHJlYWNoYWJsZSA9IGF3YWl0IGlzTGVhZGVyV2ViQ29uc29sZVJlYWNoYWJsZUltcGwoZWxlY3Rpb24ubGVhZGVySW5mbyk7XG4gIGlmICghcmVhY2hhYmxlKSB7XG4gICAgbG9nZ2VyLndhcm4oJ1tVbmlmaWVkQ29uc29sZV0gRWxlY3RlZCBsZWFkZXIgaXMgbm90IHNlcnZpbmcgdGhlIGNvbnNvbGUgcG9ydDsgZm9yY2luZyB0YWtlb3ZlcicsIHtcbiAgICAgIHBvcnQ6IGNvbnNvbGVQb3J0LFxuICAgICAgZWxlY3RlZExlYWRlclBpZDogZWxlY3Rpb24ubGVhZGVySW5mby5waWQsXG4gICAgICBlbGVjdGVkTGVhZGVyU2Vzc2lvbklkOiBlbGVjdGlvbi5sZWFkZXJJbmZvLnNlc3Npb25JZCxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgZWxlY3Rpb246IGF3YWl0IGZvcmNlQ2xhaW1MZWFkZXJzaGlwSW1wbChzZXNzaW9uSWQsIGNvbnNvbGVQb3J0KSxcbiAgICAgIGRpc2NvdmVyeTogbnVsbCxcbiAgICAgIHJlcGxhY2VtZW50OiBudWxsLFxuICAgICAgZm9yY2VkQ2xhaW06IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGNhbmRpZGF0ZUxlYWRlciA9IGNyZWF0ZUxlYWRlckluZm8oc2Vzc2lvbklkLCBjb25zb2xlUG9ydCk7XG4gIGNvbnN0IGRpc2NvdmVyeSA9IGF3YWl0IGRpc2NvdmVyTGVhZGVyU2VydmluZ1BvcnRJbXBsKGNvbnNvbGVQb3J0LCBudWxsKTtcbiAgaWYgKCFkaXNjb3ZlcnkubGVhZGVySW5mbyB8fCBkaXNjb3Zlcnkub3duZXJQaWQgPT09IG51bGwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWxlY3Rpb24sXG4gICAgICBkaXNjb3ZlcnksXG4gICAgICByZXBsYWNlbWVudDogbnVsbCxcbiAgICAgIGZvcmNlZENsYWltOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcmVwbGFjZW1lbnQgPSBldmFsdWF0ZVBvcnRPd25lclJlcGxhY2VtZW50KGNhbmRpZGF0ZUxlYWRlciwgZGlzY292ZXJ5KTtcbiAgaWYgKHJlcGxhY2VtZW50LnNob3VsZEV2aWN0KSB7XG4gICAgYXdhaXQgZGVsZXRlTGVhZGVyTG9ja0ltcGwoKTtcbiAgICBsb2dnZXIud2FybihcbiAgICAgIGRpc2NvdmVyeS5vd25lclBpZCA9PT0gZWxlY3Rpb24ubGVhZGVySW5mby5waWRcbiAgICAgICAgPyAnW1VuaWZpZWRDb25zb2xlXSBPbGRlciBjb25zb2xlIGxlYWRlciBkZXRlY3RlZCBvbiB0aGUgY29uc29sZSBwb3J0OyBuZXdlciBzZXNzaW9uIHdpbGwgdGFrZSBvdmVyJ1xuICAgICAgICA6ICdbVW5pZmllZENvbnNvbGVdIFNwbGl0LWJyYWluIGNvbnNvbGUgYXV0aG9yaXR5IGRldGVjdGVkOyBuZXdlciBzZXNzaW9uIHdpbGwgcmVwbGFjZSB0aGUgYWN0dWFsIHBvcnQgb3duZXInLFxuICAgICAgYnVpbGRBdXRob3JpdHlSZXNvbHV0aW9uTG9nQ29udGV4dChcbiAgICAgICAgY29uc29sZVBvcnQsXG4gICAgICAgIGVsZWN0aW9uLmxlYWRlckluZm8sXG4gICAgICAgIGRpc2NvdmVyeSxcbiAgICAgICAgcmVwbGFjZW1lbnQsXG4gICAgICApLFxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVsZWN0aW9uOiB7IHJvbGU6ICdsZWFkZXInLCBsZWFkZXJJbmZvOiBjYW5kaWRhdGVMZWFkZXIgfSxcbiAgICAgIGRpc2NvdmVyeSxcbiAgICAgIHJlcGxhY2VtZW50LFxuICAgICAgZm9yY2VkQ2xhaW06IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBpZiAoZGlzY292ZXJ5Lm93bmVyUGlkICE9PSBlbGVjdGlvbi5sZWFkZXJJbmZvLnBpZCkge1xuICAgIGxvZ2dlci53YXJuKCdbVW5pZmllZENvbnNvbGVdIFNwbGl0LWJyYWluIGNvbnNvbGUgYXV0aG9yaXR5IGRldGVjdGVkOyBmb2xsb3dpbmcgdGhlIGFjdHVhbCBwb3J0IG93bmVyJywgYnVpbGRBdXRob3JpdHlSZXNvbHV0aW9uTG9nQ29udGV4dChcbiAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgZWxlY3Rpb24ubGVhZGVySW5mbyxcbiAgICAgIGRpc2NvdmVyeSxcbiAgICAgIHJlcGxhY2VtZW50LFxuICAgICkpO1xuICAgIHJldHVybiB7XG4gICAgICBlbGVjdGlvbjogeyByb2xlOiAnZm9sbG93ZXInLCBsZWFkZXJJbmZvOiBkaXNjb3ZlcnkubGVhZGVySW5mbyB9LFxuICAgICAgZGlzY292ZXJ5LFxuICAgICAgcmVwbGFjZW1lbnQsXG4gICAgICBmb3JjZWRDbGFpbTogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZWxlY3Rpb24sXG4gICAgZGlzY292ZXJ5LFxuICAgIHJlcGxhY2VtZW50LFxuICAgIGZvcmNlZENsYWltOiBmYWxzZSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0Rm9sbG93ZXJBdXRob3JpdHlNb25pdG9yKFxuICBvcHRpb25zOiBVbmlmaWVkQ29uc29sZU9wdGlvbnMsXG4gIGNvbnNvbGVQb3J0OiBudW1iZXIsXG4gIGVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdCxcbiAgcHJvbW90aW9uTWdyOiBQcm9tb3Rpb25NYW5hZ2VyLFxuICBmb3J3YXJkaW5nU2luazogTGVhZGVyRm9yd2FyZGluZ0xvZ1NpbmssXG4gIHNlc3Npb25IZWFydGJlYXQ6IFNlc3Npb25IZWFydGJlYXQsXG4gIGRlcHM6IEZvbGxvd2VyQXV0aG9yaXR5TW9uaXRvckRlcGVuZGVuY2llcyA9IHt9LFxuKTogKCkgPT4gdm9pZCB7XG4gIGNvbnN0IHJlc29sdmVGb2xsb3dlckF1dGhvcml0eUltcGwgPSBkZXBzLnJlc29sdmVGb2xsb3dlckF1dGhvcml0eUltcGwgPz8gcmVzb2x2ZUZvbGxvd2VyQXV0aG9yaXR5O1xuICBjb25zdCBzZXRJbnRlcnZhbEltcGwgPSBkZXBzLnNldEludGVydmFsSW1wbCA/PyBzZXRJbnRlcnZhbDtcbiAgY29uc3QgY2xlYXJJbnRlcnZhbEltcGwgPSBkZXBzLmNsZWFySW50ZXJ2YWxJbXBsID8/IGNsZWFySW50ZXJ2YWw7XG4gIGNvbnN0IG5vd0ltcGwgPSBkZXBzLm5vd0ltcGwgPz8gRGF0ZS5ub3c7XG4gIGxldCBjdXJyZW50RWxlY3Rpb24gPSBlbGVjdGlvbjtcbiAgbGV0IGNoZWNrSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICBsZXQgcHJvbW90aW9uUXVldWVkID0gZmFsc2U7XG4gIGxldCBjb25zZWN1dGl2ZUZhaWx1cmVzID0gMDtcbiAgbGV0IGNpcmN1aXRPcGVuVW50aWxNcyA9IDA7XG4gIGxldCBhdXRob3JpdHlUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgbnVsbCA9IG51bGw7XG4gIGNvbnN0IHJlY2hlY2tJbnRlcnZhbE1zID0gY29tcHV0ZUZvbGxvd2VyQXV0aG9yaXR5UmVjaGVja0ludGVydmFsKG9wdGlvbnMuc2Vzc2lvbklkKTtcblxuICBjb25zdCBxdWV1ZUF1dGhvcml0eVByb21vdGlvbiA9ICgpID0+IHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICBwcm9tb3Rpb25NZ3IucHJvbW90ZShmb3J3YXJkaW5nU2luaywgc2Vzc2lvbkhlYXJ0YmVhdClcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IGxvZ2dlci5lcnJvcignW1VuaWZpZWRDb25zb2xlXSBBdXRob3JpdHktYmFzZWQgcHJvbW90aW9uIGNyYXNoZWQnLCB7XG4gICAgICAgICAgZXJyb3I6IFN0cmluZyhlcnIpLFxuICAgICAgICB9KSk7XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUmVzb2x2ZWRBdXRob3JpdHkgPSAocmVzb2x2ZWQ6IEZvbGxvd2VyQXV0aG9yaXR5UmVzb2x1dGlvbikgPT4ge1xuICAgIGN1cnJlbnRFbGVjdGlvbiA9IHJlc29sdmVkLmVsZWN0aW9uO1xuICAgIGNvbnNlY3V0aXZlRmFpbHVyZXMgPSAwO1xuICAgIGNpcmN1aXRPcGVuVW50aWxNcyA9IDA7XG5cbiAgICBpZiAocmVzb2x2ZWQuZWxlY3Rpb24ucm9sZSAhPT0gJ2xlYWRlcicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcm9tb3Rpb25RdWV1ZWQgPSB0cnVlO1xuICAgIGlmIChhdXRob3JpdHlUaW1lcikge1xuICAgICAgY2xlYXJJbnRlcnZhbEltcGwoYXV0aG9yaXR5VGltZXIpO1xuICAgICAgYXV0aG9yaXR5VGltZXIgPSBudWxsO1xuICAgIH1cblxuICAgIGxvZ2dlci53YXJuKCdbVW5pZmllZENvbnNvbGVdIEZvbGxvd2VyIGF1dGhvcml0eSByZS1ldmFsdWF0aW9uIHF1ZXVlZCBhIGxlYWRlciB0YWtlb3ZlcicsIHtcbiAgICAgIHNlc3Npb25JZDogb3B0aW9ucy5zZXNzaW9uSWQsXG4gICAgICBzdGFibGVTZXNzaW9uSWQ6IG9wdGlvbnMuc3RhYmxlU2Vzc2lvbklkLFxuICAgICAgcG9ydDogY29uc29sZVBvcnQsXG4gICAgICByZWNoZWNrSW50ZXJ2YWxNcyxcbiAgICAgIGVsZWN0ZWRMZWFkZXJQaWQ6IGVsZWN0aW9uLmxlYWRlckluZm8ucGlkLFxuICAgICAgZWxlY3RlZExlYWRlclNlc3Npb25JZDogZWxlY3Rpb24ubGVhZGVySW5mby5zZXNzaW9uSWQsXG4gICAgICByZXNvbHZlZExlYWRlclBpZDogcmVzb2x2ZWQuZWxlY3Rpb24ubGVhZGVySW5mby5waWQsXG4gICAgICByZXNvbHZlZExlYWRlclNlc3Npb25JZDogcmVzb2x2ZWQuZWxlY3Rpb24ubGVhZGVySW5mby5zZXNzaW9uSWQsXG4gICAgICByZXBsYWNlbWVudFJlYXNvbjogcmVzb2x2ZWQucmVwbGFjZW1lbnQ/LnByZWZlcmVuY2U/LnJlYXNvbiA/PyBudWxsLFxuICAgICAgZm9yY2VkQ2xhaW06IHJlc29sdmVkLmZvcmNlZENsYWltLFxuICAgIH0pO1xuXG4gICAgcXVldWVBdXRob3JpdHlQcm9tb3Rpb24oKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVBdXRob3JpdHlGYWlsdXJlID0gKGVycjogdW5rbm93bikgPT4ge1xuICAgIGNvbnNlY3V0aXZlRmFpbHVyZXMgKz0gMTtcbiAgICBpZiAoY29uc2VjdXRpdmVGYWlsdXJlcyA+PSBGT0xMT1dFUl9BVVRIT1JJVFlfTU9OSVRPUl9DT05GSUcuZmFpbHVyZVRocmVzaG9sZCkge1xuICAgICAgY2lyY3VpdE9wZW5VbnRpbE1zID0gbm93SW1wbCgpICsgRk9MTE9XRVJfQVVUSE9SSVRZX01PTklUT1JfQ09ORklHLmZhaWx1cmVDb29sZG93bk1zO1xuICAgICAgbG9nZ2VyLndhcm4oJ1tVbmlmaWVkQ29uc29sZV0gRm9sbG93ZXIgYXV0aG9yaXR5IHJlLWV2YWx1YXRpb24gY2lyY3VpdCBvcGVuZWQgYWZ0ZXIgcmVwZWF0ZWQgZmFpbHVyZXMnLCB7XG4gICAgICAgIHNlc3Npb25JZDogb3B0aW9ucy5zZXNzaW9uSWQsXG4gICAgICAgIHBvcnQ6IGNvbnNvbGVQb3J0LFxuICAgICAgICByZWNoZWNrSW50ZXJ2YWxNcyxcbiAgICAgICAgY29uc2VjdXRpdmVGYWlsdXJlcyxcbiAgICAgICAgY2lyY3VpdE9wZW5VbnRpbE1zOiBuZXcgRGF0ZShjaXJjdWl0T3BlblVudGlsTXMpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9KTtcbiAgICAgIGNvbnNlY3V0aXZlRmFpbHVyZXMgPSAwO1xuICAgIH1cblxuICAgIGxvZ2dlci5kZWJ1ZygnW1VuaWZpZWRDb25zb2xlXSBGb2xsb3dlciBhdXRob3JpdHkgcmUtZXZhbHVhdGlvbiBmYWlsZWQnLCB7XG4gICAgICBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpLFxuICAgICAgc2Vzc2lvbklkOiBvcHRpb25zLnNlc3Npb25JZCxcbiAgICAgIHBvcnQ6IGNvbnNvbGVQb3J0LFxuICAgICAgcmVjaGVja0ludGVydmFsTXMsXG4gICAgICBjaXJjdWl0T3BlblVudGlsTXM6IGNpcmN1aXRPcGVuVW50aWxNcyA/IG5ldyBEYXRlKGNpcmN1aXRPcGVuVW50aWxNcykudG9JU09TdHJpbmcoKSA6IG51bGwsXG4gICAgfSk7XG4gIH07XG5cbiAgYXV0aG9yaXR5VGltZXIgPSBzZXRJbnRlcnZhbEltcGwoKCkgPT4ge1xuICAgIGlmIChjaGVja0luUHJvZ3Jlc3MgfHwgcHJvbW90aW9uUXVldWVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNpcmN1aXRPcGVuVW50aWxNcyA+IG5vd0ltcGwoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjaXJjdWl0T3BlblVudGlsTXMgIT09IDApIHtcbiAgICAgIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIEZvbGxvd2VyIGF1dGhvcml0eSByZS1ldmFsdWF0aW9uIGNpcmN1aXQgY2xvc2VkOyByZXN1bWluZyBjaGVja3MnLCB7XG4gICAgICAgIHNlc3Npb25JZDogb3B0aW9ucy5zZXNzaW9uSWQsXG4gICAgICAgIHBvcnQ6IGNvbnNvbGVQb3J0LFxuICAgICAgICByZWNoZWNrSW50ZXJ2YWxNcyxcbiAgICAgIH0pO1xuICAgICAgY2lyY3VpdE9wZW5VbnRpbE1zID0gMDtcbiAgICB9XG5cbiAgICBjaGVja0luUHJvZ3Jlc3MgPSB0cnVlO1xuICAgIHJlc29sdmVGb2xsb3dlckF1dGhvcml0eUltcGwob3B0aW9ucy5zZXNzaW9uSWQsIGNvbnNvbGVQb3J0LCBjdXJyZW50RWxlY3Rpb24pXG4gICAgICAudGhlbihoYW5kbGVSZXNvbHZlZEF1dGhvcml0eSlcbiAgICAgIC5jYXRjaChoYW5kbGVBdXRob3JpdHlGYWlsdXJlKVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICBjaGVja0luUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgIH0pO1xuICB9LCByZWNoZWNrSW50ZXJ2YWxNcyk7XG4gIGF1dGhvcml0eVRpbWVyLnVucmVmKCk7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAoYXV0aG9yaXR5VGltZXIpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWxJbXBsKGF1dGhvcml0eVRpbWVyKTtcbiAgICAgIGF1dGhvcml0eVRpbWVyID0gbnVsbDtcbiAgICB9XG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGF0dGVtcHRGb3JjZVRha2VvdmVyKFxuICBvcHRpb25zOiBVbmlmaWVkQ29uc29sZU9wdGlvbnMsXG4gIGN1cnJlbnRFbGVjdGlvbjogRWxlY3Rpb25SZXN1bHQsXG4gIGNvbnNvbGVQb3J0OiBudW1iZXIsXG4gIHByaW1hcnlUb2tlbjogc3RyaW5nLFxuICBzZXJ2ZXJPcHRzOiBXZWJTZXJ2ZXJPcHRpb25zLFxuICBzdGFydFdlYlNlcnZlckltcGw6IChvcHRpb25zOiBXZWJTZXJ2ZXJPcHRpb25zKSA9PiBQcm9taXNlPFdlYlNlcnZlclJlc3VsdD4sXG4pOiBQcm9taXNlPEZvcmNlVGFrZW92ZXJBdHRlbXB0UmVzdWx0PiB7XG4gIGNvbnN0IGluaXRpYWxGYWxsYmFjayA9IGF3YWl0IHJlY292ZXJMZWFkZXJCaW5kRmFpbHVyZShjdXJyZW50RWxlY3Rpb24ubGVhZGVySW5mbywgY29uc29sZVBvcnQsIHByaW1hcnlUb2tlbik7XG4gIGNvbnN0IGluaXRpYWxSZXBsYWNlbWVudCA9IGV2YWx1YXRlUG9ydE93bmVyUmVwbGFjZW1lbnQoY3VycmVudEVsZWN0aW9uLmxlYWRlckluZm8sIGluaXRpYWxGYWxsYmFjayk7XG5cbiAgaWYgKCFpbml0aWFsUmVwbGFjZW1lbnQuc2hvdWxkRXZpY3QgfHwgaW5pdGlhbFJlcGxhY2VtZW50Lm93bmVyUGlkID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdlYlJlc3VsdDogeyBiaW5kUmVzdWx0OiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ0VBRERSSU5VU0UnLCBkZXRhaWw6IGBQb3J0ICR7Y29uc29sZVBvcnR9IGFscmVhZHkgaW4gdXNlYCB9IH0sXG4gICAgICBlbGVjdGlvbjogY3VycmVudEVsZWN0aW9uLFxuICAgICAgZmFsbGJhY2s6IGluaXRpYWxGYWxsYmFjayxcbiAgICAgIHJlcGxhY2VtZW50OiBpbml0aWFsUmVwbGFjZW1lbnQsXG4gICAgICByZWNvdmVyZWRTZXNzaW9uczogW10sXG4gICAgICBmb3JjZWRLaWxsOiBudWxsLFxuICAgICAgdGFrZW92ZXJBdHRlbXB0ZWQ6IGZhbHNlLFxuICAgICAgcmVib3VuZExvY2tDbGFpbWVkOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbGF0ZXN0RmFsbGJhY2sgPSBhd2FpdCBkaXNjb3ZlckxlYWRlclNlcnZpbmdQb3J0KGNvbnNvbGVQb3J0LCBwcmltYXJ5VG9rZW4pO1xuICBjb25zdCByZWNvdmVyZWRTZXNzaW9ucyA9IGF3YWl0IGZldGNoTGVhZGVyU2Vzc2lvbnNTbmFwc2hvdChjb25zb2xlUG9ydCwgcHJpbWFyeVRva2VuKTtcbiAgY29uc3QgbGF0ZXN0UmVwbGFjZW1lbnQgPSBldmFsdWF0ZVBvcnRPd25lclJlcGxhY2VtZW50KGN1cnJlbnRFbGVjdGlvbi5sZWFkZXJJbmZvLCBsYXRlc3RGYWxsYmFjayk7XG4gIGlmICghbGF0ZXN0UmVwbGFjZW1lbnQuc2hvdWxkRXZpY3QgfHwgbGF0ZXN0UmVwbGFjZW1lbnQub3duZXJQaWQgPT09IG51bGwpIHtcbiAgICBsb2dnZXIud2FybignW1VuaWZpZWRDb25zb2xlXSBGb3JjZWQgdGFrZW92ZXIgdGFyZ2V0IGNoYW5nZWQgYmVmb3JlIGV2aWN0aW9uOyBza2lwcGluZyBmb3JjZWQga2lsbCcsIHtcbiAgICAgIC4uLmJ1aWxkQmluZEZhaWx1cmVMb2dDb250ZXh0KFxuICAgICAgICBjb25zb2xlUG9ydCxcbiAgICAgICAgY3VycmVudEVsZWN0aW9uLmxlYWRlckluZm8sXG4gICAgICAgIHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiAnRUFERFJJTlVTRScsIGRldGFpbDogYFBvcnQgJHtjb25zb2xlUG9ydH0gYWxyZWFkeSBpbiB1c2VgIH0sXG4gICAgICAgIGxhdGVzdEZhbGxiYWNrLFxuICAgICAgICBsYXRlc3RSZXBsYWNlbWVudCxcbiAgICAgICksXG4gICAgICBwcmV2aW91c093bmVyUGlkOiBpbml0aWFsUmVwbGFjZW1lbnQub3duZXJQaWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdlYlJlc3VsdDogeyBiaW5kUmVzdWx0OiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ0VBRERSSU5VU0UnLCBkZXRhaWw6IGBQb3J0ICR7Y29uc29sZVBvcnR9IGFscmVhZHkgaW4gdXNlYCB9IH0sXG4gICAgICBlbGVjdGlvbjogY3VycmVudEVsZWN0aW9uLFxuICAgICAgZmFsbGJhY2s6IGxhdGVzdEZhbGxiYWNrLFxuICAgICAgcmVwbGFjZW1lbnQ6IGxhdGVzdFJlcGxhY2VtZW50LFxuICAgICAgcmVjb3ZlcmVkU2Vzc2lvbnMsXG4gICAgICBmb3JjZWRLaWxsOiBudWxsLFxuICAgICAgdGFrZW92ZXJBdHRlbXB0ZWQ6IGZhbHNlLFxuICAgICAgcmVib3VuZExvY2tDbGFpbWVkOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgbG9nZ2VyLndhcm4oJ1tVbmlmaWVkQ29uc29sZV0gQXR0ZW1wdGluZyBmb3JjZWQgdGFrZW92ZXIgZnJvbSBvbGRlciBvciBpbmNvbXBhdGlibGUgYWN0aXZlIGxlYWRlcicsIHtcbiAgICAuLi5idWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgY3VycmVudEVsZWN0aW9uLmxlYWRlckluZm8sXG4gICAgICB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ0VBRERSSU5VU0UnLCBkZXRhaWw6IGBQb3J0ICR7Y29uc29sZVBvcnR9IGFscmVhZHkgaW4gdXNlYCB9LFxuICAgICAgbGF0ZXN0RmFsbGJhY2ssXG4gICAgICBsYXRlc3RSZXBsYWNlbWVudCxcbiAgICApLFxuICB9KTtcblxuICBjb25zdCBmb3JjZWRLaWxsID0gYXdhaXQga2lsbFN0YWxlUHJvY2Vzc0RldGFpbGVkKGxhdGVzdFJlcGxhY2VtZW50Lm93bmVyUGlkLCBjb25zb2xlUG9ydCwge1xuICAgIGFsbG93QWN0aXZlSG9zdFBhcmVudDogdHJ1ZSxcbiAgfSk7XG4gIGlmICghZm9yY2VkS2lsbC5raWxsZWQpIHtcbiAgICBsb2dnZXIud2FybignW1VuaWZpZWRDb25zb2xlXSBGb3JjZWQgdGFrZW92ZXIgc2tpcHBlZCBvciBmYWlsZWQgYWZ0ZXIgaWRlbnRpZnlpbmcgcmVwbGFjZWFibGUgbGVhZGVyJywge1xuICAgICAgLi4uYnVpbGRCaW5kRmFpbHVyZUxvZ0NvbnRleHQoXG4gICAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgICBjdXJyZW50RWxlY3Rpb24ubGVhZGVySW5mbyxcbiAgICAgICAgeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6ICdFQUREUklOVVNFJywgZGV0YWlsOiBgUG9ydCAke2NvbnNvbGVQb3J0fSBhbHJlYWR5IGluIHVzZWAgfSxcbiAgICAgICAgbGF0ZXN0RmFsbGJhY2ssXG4gICAgICAgIGxhdGVzdFJlcGxhY2VtZW50LFxuICAgICAgICBmb3JjZWRLaWxsLFxuICAgICAgKSxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgd2ViUmVzdWx0OiB7IGJpbmRSZXN1bHQ6IHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiAnRUFERFJJTlVTRScsIGRldGFpbDogYFBvcnQgJHtjb25zb2xlUG9ydH0gYWxyZWFkeSBpbiB1c2VgIH0gfSxcbiAgICAgIGVsZWN0aW9uOiBjdXJyZW50RWxlY3Rpb24sXG4gICAgICBmYWxsYmFjazogbGF0ZXN0RmFsbGJhY2ssXG4gICAgICByZXBsYWNlbWVudDogbGF0ZXN0UmVwbGFjZW1lbnQsXG4gICAgICByZWNvdmVyZWRTZXNzaW9ucyxcbiAgICAgIGZvcmNlZEtpbGwsXG4gICAgICB0YWtlb3ZlckF0dGVtcHRlZDogdHJ1ZSxcbiAgICAgIHJlYm91bmRMb2NrQ2xhaW1lZDogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHJlYm91bmRXZWJSZXN1bHQgPSBhd2FpdCBzdGFydFdlYlNlcnZlckltcGwoc2VydmVyT3B0cyk7XG4gIGxldCByZWJvdW5kRWxlY3Rpb24gPSBjdXJyZW50RWxlY3Rpb247XG4gIGxldCByZWJvdW5kTG9ja0NsYWltZWQgPSBmYWxzZTtcblxuICBpZiAoIXJlYm91bmRXZWJSZXN1bHQuYmluZFJlc3VsdCB8fCByZWJvdW5kV2ViUmVzdWx0LmJpbmRSZXN1bHQuc3VjY2Vzcykge1xuICAgIGNvbnN0IHJlYm91bmRMZWFkZXJJbmZvID0gY3JlYXRlTGVhZGVySW5mbyhvcHRpb25zLnNlc3Npb25JZCwgY29uc29sZVBvcnQpO1xuICAgIHJlYm91bmRMb2NrQ2xhaW1lZCA9IGF3YWl0IGNsYWltTGVhZGVyc2hpcChyZWJvdW5kTGVhZGVySW5mbyk7XG4gICAgaWYgKCFyZWJvdW5kTG9ja0NsYWltZWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdbVW5pZmllZENvbnNvbGVdIFJlYm91bmQgbGVhZGVyIGJvdW5kIHBvcnQgYnV0IGNvdWxkIG5vdCBpbW1lZGlhdGVseSByZS1jbGFpbSBsb2NrJywge1xuICAgICAgICAuLi5idWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgICAgICAgICBjb25zb2xlUG9ydCxcbiAgICAgICAgICByZWJvdW5kTGVhZGVySW5mbyxcbiAgICAgICAgICByZWJvdW5kV2ViUmVzdWx0LmJpbmRSZXN1bHQsXG4gICAgICAgICAgbGF0ZXN0RmFsbGJhY2ssXG4gICAgICAgICAgbGF0ZXN0UmVwbGFjZW1lbnQsXG4gICAgICAgICAgZm9yY2VkS2lsbCxcbiAgICAgICAgKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZWJvdW5kRWxlY3Rpb24gPSB7IHJvbGU6ICdsZWFkZXInLCBsZWFkZXJJbmZvOiByZWJvdW5kTGVhZGVySW5mbyB9O1xuICB9IGVsc2Uge1xuICAgIGxvZ2dlci53YXJuKCdbVW5pZmllZENvbnNvbGVdIEZvcmNlZCB0YWtlb3ZlciBraWxsZWQgb2xkIGxlYWRlciBidXQgYmluZCByZXRyeSBzdGlsbCBmYWlsZWQnLCB7XG4gICAgICAuLi5idWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgICAgICAgY29uc29sZVBvcnQsXG4gICAgICAgIGN1cnJlbnRFbGVjdGlvbi5sZWFkZXJJbmZvLFxuICAgICAgICByZWJvdW5kV2ViUmVzdWx0LmJpbmRSZXN1bHQsXG4gICAgICAgIGxhdGVzdEZhbGxiYWNrLFxuICAgICAgICBsYXRlc3RSZXBsYWNlbWVudCxcbiAgICAgICAgZm9yY2VkS2lsbCxcbiAgICAgICksXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdlYlJlc3VsdDogcmVib3VuZFdlYlJlc3VsdCxcbiAgICBlbGVjdGlvbjogcmVib3VuZEVsZWN0aW9uLFxuICAgIGZhbGxiYWNrOiBsYXRlc3RGYWxsYmFjayxcbiAgICByZXBsYWNlbWVudDogbGF0ZXN0UmVwbGFjZW1lbnQsXG4gICAgcmVjb3ZlcmVkU2Vzc2lvbnMsXG4gICAgZm9yY2VkS2lsbCxcbiAgICB0YWtlb3ZlckF0dGVtcHRlZDogdHJ1ZSxcbiAgICByZWJvdW5kTG9ja0NsYWltZWQsXG4gIH07XG59XG5cbi8qKlxuICogU3RhcnQgdGhlIHVuaWZpZWQgd2ViIGNvbnNvbGUuXG4gKlxuICogUnVucyBsZWFkZXIgZWxlY3Rpb24sIHRoZW4gZWl0aGVyIHN0YXJ0cyB0aGUgZnVsbCBjb25zb2xlIChsZWFkZXIpXG4gKiBvciBzZXRzIHVwIGV2ZW50IGZvcndhcmRpbmcgKGZvbGxvd2VyKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0VW5pZmllZENvbnNvbGUob3B0aW9uczogVW5pZmllZENvbnNvbGVPcHRpb25zKTogUHJvbWlzZTxVbmlmaWVkQ29uc29sZVJlc3VsdD4ge1xuICAvLyBSZXNvbHZlIHBvcnQ6IG9wdGlvbnMgKGNvbmZpZyBmaWxlKSDihpIgZW52IHZhciDihpIgZGVmYXVsdFxuICBjb25zdCBjb25zb2xlUG9ydCA9IG9wdGlvbnMucG9ydCB8fCBERUZBVUxUX0NPTlNPTEVfUE9SVDtcbiAgbG9nZ2VyLmRlYnVnKGBbVW5pZmllZENvbnNvbGVdIFBvcnQgcmVzb2x2ZWQ6ICR7Y29uc29sZVBvcnR9YCArXG4gICAgKG9wdGlvbnMucG9ydCA/ICcgKGZyb20gY29uZmlnIGZpbGUpJyA6IGAgKGZyb20gZW52L2RlZmF1bHQpYCkpO1xuXG4gIC8vIExlZ2FjeS1sZWFkZXIgZGV0ZWN0aW9uICgjMTc5NCkg4oCUIHdhcm4gdGhlIHVzZXIgaWYgYSBwcmUtYXV0aFxuICAvLyBEb2xsaG91c2VNQ1AgY29uc29sZSBpcyBydW5uaW5nIGFsb25nc2lkZSB0aGlzIGF1dGhlbnRpY2F0ZWQgb25lLlxuICAvLyBUaGV5IHdpbGwgY29leGlzdCBmaW5lIGJlY2F1c2Ugb2YgcG9ydCArIGxvY2sgKyB0b2tlbiBmaWxlIGlzb2xhdGlvbixcbiAgLy8gYnV0IHRoZSB1c2VyIHNob3VsZCBrbm93IGJvdGggZXhpc3Qgc28gdGhlIGRpZmZlcmluZyBzZWN1cml0eSBwb3N0dXJlXG4gIC8vIGJldHdlZW4gdGhlbSBkb2Vzbid0IGxvb2sgbGlrZSBhIGJ1Zy5cbiAgYXdhaXQgd2FybklmTGVnYWN5Q29uc29sZVByZXNlbnQoY29uc29sZVBvcnQpO1xuXG4gIGxldCBlbGVjdGlvbiA9IGF3YWl0IGVsZWN0TGVhZGVyKG9wdGlvbnMuc2Vzc2lvbklkLCBjb25zb2xlUG9ydCk7XG5cbiAgaWYgKGVsZWN0aW9uLnJvbGUgPT09ICdmb2xsb3dlcicpIHtcbiAgICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHJlc29sdmVGb2xsb3dlckF1dGhvcml0eShvcHRpb25zLnNlc3Npb25JZCwgY29uc29sZVBvcnQsIGVsZWN0aW9uKTtcbiAgICBlbGVjdGlvbiA9IHJlc29sdmVkLmVsZWN0aW9uO1xuICB9XG5cbiAgaWYgKGVsZWN0aW9uLnJvbGUgPT09ICdsZWFkZXInKSB7XG4gICAgcmV0dXJuIHN0YXJ0QXNMZWFkZXIob3B0aW9ucywgZWxlY3Rpb24sIGNvbnNvbGVQb3J0KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RhcnRBc0ZvbGxvd2VyKG9wdGlvbnMsIGVsZWN0aW9uLCBjb25zb2xlUG9ydCk7XG4gIH1cbn1cblxuLyoqXG4gKiBTdGFydCBhcyB0aGUgY29uc29sZSBsZWFkZXIuXG4gKiBCaW5kcyB0aGUgcmVzb2x2ZWQgY29uc29sZSBwb3J0IChjb25maWcgZmlsZSDihpIgZW52IHZhciDihpIgZGVmYXVsdCksXG4gKiBtb3VudHMgYWxsIHJvdXRlcyBpbmNsdWRpbmcgaW5nZXN0aW9uLCBzdGFydHMgaGVhcnRiZWF0LlxuICovXG5hc3luYyBmdW5jdGlvbiBzdGFydEFzTGVhZGVyKFxuICBvcHRpb25zOiBVbmlmaWVkQ29uc29sZU9wdGlvbnMsXG4gIGVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdCxcbiAgY29uc29sZVBvcnQ6IG51bWJlciA9IERFRkFVTFRfQ09OU09MRV9QT1JULFxuKTogUHJvbWlzZTxVbmlmaWVkQ29uc29sZVJlc3VsdD4ge1xuICBjb25zdCB7IHN0YXJ0V2ViU2VydmVyIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3NlcnZlci5qcycpO1xuICBjb25zdCB7IHBpY2tSYW5kb21Ub2tlbk5hbWUgfSA9IGF3YWl0IGltcG9ydCgnLi9TZXNzaW9uTmFtZXMuanMnKTtcblxuICAvLyBJbml0aWFsaXplIHRoZSBjb25zb2xlIHRva2VuIHN0b3JlICgjMTc4MCkuIENyZWF0ZXMgdGhlIHRva2VuIGZpbGUgb25cbiAgLy8gZmlyc3QgcnVuLCByZWFkcyB0aGUgZXhpc3RpbmcgdG9rZW5zIG9uIHN1YnNlcXVlbnQgcnVucy4gVGhlIHRva2VuIGlzXG4gIC8vIHBlcnNpc3RlbnQgYWNyb3NzIHJlc3RhcnRzIOKAlCBvbmx5IHJvdGF0ZWQgb24gZXhwbGljaXQgcmVxdWVzdCAoUGhhc2UgMikuXG4gIC8vIEZlYXR1cmUgZmxhZyBET0xMSE9VU0VfV0VCX0FVVEhfRU5BQkxFRCBjb250cm9scyBlbmZvcmNlbWVudDsgdGhlIGZpbGVcbiAgLy8gaXMgZ2VuZXJhdGVkIHJlZ2FyZGxlc3Mgc28gY29uc3VtZXJzIGNhbiBhdHRhY2ggdG9rZW5zIHByZWVtcHRpdmVseS5cbiAgY29uc3QgdG9rZW5TdG9yZSA9IG5ldyBDb25zb2xlVG9rZW5TdG9yZShlbnYuRE9MTEhPVVNFX0NPTlNPTEVfVE9LRU5fRklMRSk7XG4gIGNvbnN0IHByaW1hcnlUb2tlbiA9IGF3YWl0IHRva2VuU3RvcmUuZW5zdXJlSW5pdGlhbGl6ZWQocGlja1JhbmRvbVRva2VuTmFtZSgpKTtcbiAgbG9nZ2VyLmluZm8oJ1tVbmlmaWVkQ29uc29sZV0gQ29uc29sZSB0b2tlbiBzdG9yZSBpbml0aWFsaXplZCcsIHtcbiAgICB0b2tlbklkOiBwcmltYXJ5VG9rZW4uaWQsXG4gICAgdG9rZW5OYW1lOiBwcmltYXJ5VG9rZW4ubmFtZSxcbiAgICBmaWxlOiB0b2tlblN0b3JlLmdldEZpbGVQYXRoKCksXG4gICAgYXV0aEVuZm9yY2VkOiBlbnYuRE9MTEhPVVNFX1dFQl9BVVRIX0VOQUJMRUQsXG4gIH0pO1xuXG4gIC8vIFByZS1jcmVhdGUgYSBwbGFjZWhvbGRlciBicm9hZGNhc3QgdGhhdCB3ZSdsbCB3aXJlIHVwIGFmdGVyIHRoZSBzZXJ2ZXIgc3RhcnRzXG4gIGxldCBsaXZlQnJvYWRjYXN0OiAoKGVudHJ5OiBVbmlmaWVkTG9nRW50cnkpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBsZXQgbGl2ZU1ldHJpY3NPblNuYXBzaG90OiAoKHNuYXBzaG90OiBNZXRyaWNTbmFwc2hvdCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG5cbiAgLy8gQ3JlYXRlIGluZ2VzdGlvbiByb3V0ZXMgd2l0aCBhIGRlZmVycmVkIGJyb2FkY2FzdCAod2lyZWQgYWZ0ZXIgc2VydmVyIHN0YXJ0cylcbiAgY29uc3QgaW5nZXN0UmVzdWx0ID0gY3JlYXRlSW5nZXN0Um91dGVzKHtcbiAgICBsb2dCcm9hZGNhc3Q6IChlbnRyeSkgPT4gbGl2ZUJyb2FkY2FzdD8uKGVudHJ5KSxcbiAgICBtZXRyaWNzT25TbmFwc2hvdDogKHNuYXBzaG90KSA9PiBsaXZlTWV0cmljc09uU25hcHNob3Q/LihzbmFwc2hvdCksXG4gICAgc3RvcmVNZXRyaWNzU25hcHNob3Q6IChzbmFwc2hvdCkgPT4gb3B0aW9ucy5tZXRyaWNzU2luaz8ub25TbmFwc2hvdChzbmFwc2hvdCksXG4gIH0pO1xuXG4gIC8vIFN0YXJ0IHRoZSB3ZWIgc2VydmVyIHdpdGggaW5nZXN0IHJvdXRlcyBtb3VudGVkIGJlZm9yZSB0aGUgU1BBIGZhbGxiYWNrLlxuICAvLyBJZiB0aGUgcG9ydCBpcyBvY2N1cGllZCBieSBhIHN0YWxlIHByb2Nlc3MsIHJldHJ5IHdpdGggZXhwb25lbnRpYWwgYmFja29mZi5cbiAgY29uc3Qgc2VydmVyT3B0cyA9IHtcbiAgICBwb3J0Zm9saW9EaXI6IG9wdGlvbnMucG9ydGZvbGlvRGlyLFxuICAgIG1lbW9yeVNpbms6IG9wdGlvbnMubWVtb3J5U2luayxcbiAgICBtZXRyaWNzU2luazogb3B0aW9ucy5tZXRyaWNzU2luayxcbiAgICBwb3J0OiBjb25zb2xlUG9ydCxcbiAgICBzZXNzaW9uSWQ6IG9wdGlvbnMuc3RhYmxlU2Vzc2lvbklkLFxuICAgIHJ1bnRpbWVTZXNzaW9uSWQ6IG9wdGlvbnMuc2Vzc2lvbklkLFxuICAgIGFkZGl0aW9uYWxSb3V0ZXJzOiBbaW5nZXN0UmVzdWx0LnJvdXRlcl0sXG4gICAgdG9rZW5TdG9yZSxcbiAgICAuLi4ob3B0aW9ucy5tY3BBcWxIYW5kbGVyID8geyBtY3BBcWxIYW5kbGVyOiBvcHRpb25zLm1jcEFxbEhhbmRsZXIgfSA6IHt9KSxcbiAgfTtcbiAgLy8gYmluZEFuZExpc3RlbiBub3cgaGFuZGxlcyBFQUREUklOVVNFIGJ5IGZpbmRpbmcgYW5kIGtpbGxpbmcgdGhlIHN0YWxlXG4gIC8vIHByb2Nlc3Mgb24gdGhlIHBvcnQsIHRoZW4gcmV0cnlpbmcuIE5vIGV4dGVybmFsIHJldHJ5IGxvb3AgbmVlZGVkLlxuICBsZXQgd2ViUmVzdWx0ID0gYXdhaXQgc3RhcnRXZWJTZXJ2ZXIoc2VydmVyT3B0cyk7XG4gIGxldCByZWNvdmVyZWRGb2xsb3dlclNlc3Npb25zOiBTZXNzaW9uSW5mb1tdID0gW107XG5cbiAgaWYgKHdlYlJlc3VsdC5iaW5kUmVzdWx0ICYmICF3ZWJSZXN1bHQuYmluZFJlc3VsdC5zdWNjZXNzKSB7XG4gICAgY29uc3QgZm9yY2VUYWtlb3ZlciA9IGF3YWl0IGF0dGVtcHRGb3JjZVRha2VvdmVyKFxuICAgICAgb3B0aW9ucyxcbiAgICAgIGVsZWN0aW9uLFxuICAgICAgY29uc29sZVBvcnQsXG4gICAgICBwcmltYXJ5VG9rZW4udG9rZW4sXG4gICAgICBzZXJ2ZXJPcHRzLFxuICAgICAgc3RhcnRXZWJTZXJ2ZXIsXG4gICAgKTtcbiAgICB3ZWJSZXN1bHQgPSBmb3JjZVRha2VvdmVyLndlYlJlc3VsdDtcbiAgICBlbGVjdGlvbiA9IGZvcmNlVGFrZW92ZXIuZWxlY3Rpb247XG4gICAgcmVjb3ZlcmVkRm9sbG93ZXJTZXNzaW9ucyA9IGZvcmNlVGFrZW92ZXIucmVjb3ZlcmVkU2Vzc2lvbnM7XG5cbiAgICBpZiAod2ViUmVzdWx0LmJpbmRSZXN1bHQgJiYgIXdlYlJlc3VsdC5iaW5kUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIGlmIChmb3JjZVRha2VvdmVyLmZhbGxiYWNrLmxlYWRlckluZm8pIHtcbiAgICAgIGxvZ2dlci53YXJuKCdbVW5pZmllZENvbnNvbGVdIExlYWRlciByb2xlIGFib3J0ZWQ6IGJpbmQgZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gZm9sbG93ZXInLCB7XG4gICAgICAgIC4uLmJ1aWxkQmluZEZhaWx1cmVMb2dDb250ZXh0KFxuICAgICAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgICAgIGVsZWN0aW9uLmxlYWRlckluZm8sXG4gICAgICAgICAgd2ViUmVzdWx0LmJpbmRSZXN1bHQsXG4gICAgICAgICAgZm9yY2VUYWtlb3Zlci5mYWxsYmFjayxcbiAgICAgICAgICBmb3JjZVRha2VvdmVyLnJlcGxhY2VtZW50LFxuICAgICAgICAgIGZvcmNlVGFrZW92ZXIuZm9yY2VkS2lsbCxcbiAgICAgICAgKSxcbiAgICAgICAgdGFrZW92ZXJBdHRlbXB0ZWQ6IGZvcmNlVGFrZW92ZXIudGFrZW92ZXJBdHRlbXB0ZWQsXG4gICAgICAgIHJlYm91bmRMb2NrQ2xhaW1lZDogZm9yY2VUYWtlb3Zlci5yZWJvdW5kTG9ja0NsYWltZWQsXG4gICAgICAgIGxvY2tDbGVhbnVwQXR0ZW1wdGVkOiBmb3JjZVRha2VvdmVyLmZhbGxiYWNrLnNvdXJjZSAhPT0gJ25vbmUnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBmb2xsb3dlckVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdCA9IHsgcm9sZTogJ2ZvbGxvd2VyJywgbGVhZGVySW5mbzogZm9yY2VUYWtlb3Zlci5mYWxsYmFjay5sZWFkZXJJbmZvIH07XG4gICAgICByZXR1cm4gc3RhcnRBc0ZvbGxvd2VyKG9wdGlvbnMsIGZvbGxvd2VyRWxlY3Rpb24sIGNvbnNvbGVQb3J0LCBwcmltYXJ5VG9rZW4udG9rZW4pO1xuICAgICAgfVxuXG4gICAgICBsb2dnZXIuZXJyb3IoJ1tVbmlmaWVkQ29uc29sZV0gTGVhZGVyIGZhaWxlZCB0byBiaW5kIGFuZCBubyBhY3RpdmUgbGVhZGVyIGNvdWxkIGJlIGlkZW50aWZpZWQnLCB7XG4gICAgICAgIC4uLmJ1aWxkQmluZEZhaWx1cmVMb2dDb250ZXh0KFxuICAgICAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgICAgIGVsZWN0aW9uLmxlYWRlckluZm8sXG4gICAgICAgICAgd2ViUmVzdWx0LmJpbmRSZXN1bHQsXG4gICAgICAgICAgZm9yY2VUYWtlb3Zlci5mYWxsYmFjayxcbiAgICAgICAgICBmb3JjZVRha2VvdmVyLnJlcGxhY2VtZW50LFxuICAgICAgICAgIGZvcmNlVGFrZW92ZXIuZm9yY2VkS2lsbCxcbiAgICAgICAgKSxcbiAgICAgICAgdGFrZW92ZXJBdHRlbXB0ZWQ6IGZvcmNlVGFrZW92ZXIudGFrZW92ZXJBdHRlbXB0ZWQsXG4gICAgICAgIHJlYm91bmRMb2NrQ2xhaW1lZDogZm9yY2VUYWtlb3Zlci5yZWJvdW5kTG9ja0NsYWltZWQsXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGVhZGVyIGZhaWxlZCB0byBiaW5kIHBvcnQgJHtjb25zb2xlUG9ydH0gYW5kIG5vIGFjdGl2ZSBsZWFkZXIgd2FzIGRpc2NvdmVyYWJsZWApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlZ2lzdGVyIHRoZSBsZWFkZXIgb25seSBhZnRlciB0aGUgSFRUUCBsaXN0ZW5lciBpcyBhY3R1YWxseSBzZXJ2aW5nIHRoZSBwb3J0LlxuICBpbmdlc3RSZXN1bHQucmVnaXN0ZXJMZWFkZXJTZXNzaW9uKG9wdGlvbnMuc2Vzc2lvbklkLCBwcm9jZXNzLnBpZCk7XG5cbiAgLy8gUmVnaXN0ZXIgdGhlIHdlYiBjb25zb2xlIGl0c2VsZiBzbyB0aGUgc2Vzc2lvbiBpbmRpY2F0b3IgaXMgbmV2ZXIgZW1wdHkgKCMxODA1KVxuICBpbmdlc3RSZXN1bHQucmVnaXN0ZXJDb25zb2xlU2Vzc2lvbigpO1xuXG4gIGlmIChyZWNvdmVyZWRGb2xsb3dlclNlc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICBpbmdlc3RSZXN1bHQuaW1wb3J0U2Vzc2lvbnMocmVjb3ZlcmVkRm9sbG93ZXJTZXNzaW9ucyk7XG4gICAgbG9nZ2VyLmluZm8oJ1tVbmlmaWVkQ29uc29sZV0gUmVjb3ZlcmVkIGZvbGxvd2VyIHNlc3Npb24gc25hcHNob3QgZnJvbSBkaXNwbGFjZWQgbGVhZGVyJywge1xuICAgICAgc2Vzc2lvbklkOiBvcHRpb25zLnNlc3Npb25JZCxcbiAgICAgIHJlY292ZXJlZFNlc3Npb25zOiByZWNvdmVyZWRGb2xsb3dlclNlc3Npb25zLmxlbmd0aCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFdpcmUgU1NFIGJyb2FkY2FzdHMgZm9yIHRoaXMgbGVhZGVyJ3Mgb3duIGV2ZW50c1xuICBvcHRpb25zLndpcmVTU0VCcm9hZGNhc3RzKHdlYlJlc3VsdCwgb3B0aW9ucy5tZXRyaWNzU2luayk7XG5cbiAgLy8gTm93IHdpcmUgdGhlIGxpdmUgYnJvYWRjYXN0IGZ1bmN0aW9ucyBpbnRvIHRoZSBpbmdlc3Qgcm91dGVzXG4gIGlmICh3ZWJSZXN1bHQubG9nQnJvYWRjYXN0KSB7XG4gICAgY29uc3Qgb3JpZ2luYWxCcm9hZGNhc3QgPSB3ZWJSZXN1bHQubG9nQnJvYWRjYXN0O1xuICAgIC8vIFN0YW1wIGxlYWRlcidzIG93biBlbnRyaWVzIHdpdGggc2Vzc2lvbiBJRFxuICAgIGxpdmVCcm9hZGNhc3QgPSAoZW50cnk6IFVuaWZpZWRMb2dFbnRyeSkgPT4ge1xuICAgICAgY29uc3Qgc3RhbXBlZDogVW5pZmllZExvZ0VudHJ5ID0ge1xuICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgZGF0YTogeyAuLi5lbnRyeS5kYXRhLCBfc2Vzc2lvbklkOiBvcHRpb25zLnNlc3Npb25JZCB9LFxuICAgICAgfTtcbiAgICAgIG9yaWdpbmFsQnJvYWRjYXN0KHN0YW1wZWQpO1xuICAgIH07XG4gIH1cbiAgbGl2ZU1ldHJpY3NPblNuYXBzaG90ID0gd2ViUmVzdWx0Lm1ldHJpY3NPblNuYXBzaG90O1xuXG4gIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIEluZ2VzdGlvbiByb3V0ZXMgbW91bnRlZCcpO1xuXG4gIC8vIFN0YXJ0IGhlYXJ0YmVhdCBhbmQgcmVnaXN0ZXIgY2xlYW51cFxuICBjb25zdCBzdG9wSGVhcnRiZWF0ID0gc3RhcnRIZWFydGJlYXQoZWxlY3Rpb24ubGVhZGVySW5mbyk7XG4gIHJlZ2lzdGVyTGVhZGVyQ2xlYW51cCgpO1xuXG4gIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIExlYWRlciBzdGFydGVkJywge1xuICAgIHNlc3Npb25JZDogb3B0aW9ucy5zZXNzaW9uSWQsIHBvcnQ6IGNvbnNvbGVQb3J0LCBwaWQ6IHByb2Nlc3MucGlkLFxuICAgIHJvbGU6ICdsZWFkZXInLCBpbmdlc3RSb3V0ZXM6IFsnL2FwaS9pbmdlc3QvbG9ncycsICcvYXBpL2luZ2VzdC9tZXRyaWNzJywgJy9hcGkvaW5nZXN0L3Nlc3Npb24nLCAnL2FwaS9zZXNzaW9ucyddLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHJvbGU6ICdsZWFkZXInLFxuICAgIGVsZWN0aW9uLFxuICAgIHBvcnQ6IGNvbnNvbGVQb3J0LFxuICAgIGNsZWFudXA6IGFzeW5jICgpID0+IHtcbiAgICAgIHN0b3BIZWFydGJlYXQoKTtcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIFN0YXJ0IGFzIGEgZm9sbG93ZXIuXG4gKiBSZWdpc3RlcnMgZm9yd2FyZGluZyBzaW5rcyB3aXRoIHRoZSBMb2dNYW5hZ2VyLCBzdGFydHMgc2Vzc2lvbiBoZWFydGJlYXQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0QXNGb2xsb3dlcihcbiAgb3B0aW9uczogVW5pZmllZENvbnNvbGVPcHRpb25zLFxuICBlbGVjdGlvbjogRWxlY3Rpb25SZXN1bHQsXG4gIGNvbnNvbGVQb3J0OiBudW1iZXIgPSBERUZBVUxUX0NPTlNPTEVfUE9SVCxcbiAgaW5pdGlhbEF1dGhUb2tlbjogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4pOiBQcm9taXNlPFVuaWZpZWRDb25zb2xlUmVzdWx0PiB7XG4gIGNvbnN0IGxlYWRlclVybCA9IGBodHRwOi8vMTI3LjAuMC4xOiR7ZWxlY3Rpb24ubGVhZGVySW5mby5wb3J0fWA7XG5cbiAgLy8gUmVhZCB0aGUgY29uc29sZSBhdXRoIHRva2VuICgjMTc4MCkgd3JpdHRlbiBieSB0aGUgbGVhZGVyLiBNYXkgYmUgbnVsbFxuICAvLyBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IHlldCDigJQgdGhlIHNpbmtzIGhhbmRsZSB0aGF0IGdyYWNlZnVsbHkgYW5kXG4gIC8vIHNpbXBseSBvbWl0IHRoZSBCZWFyZXIgaGVhZGVyLCB3aGljaCBpcyBmaW5lIHdoZW4gYXV0aCBpcyBub3QgZW5mb3JjZWQuXG4gIGxldCBhdXRoVG9rZW4gPSBpbml0aWFsQXV0aFRva2VuO1xuICBpZiAoYXV0aFRva2VuID09PSBudWxsKSB7XG4gICAgY29uc3QgeyBnZXRQcmltYXJ5VG9rZW5Gcm9tRmlsZSB9ID0gYXdhaXQgaW1wb3J0KCcuL2NvbnNvbGVUb2tlbi5qcycpO1xuICAgIGF1dGhUb2tlbiA9IGF3YWl0IGdldFByaW1hcnlUb2tlbkZyb21GaWxlKGVudi5ET0xMSE9VU0VfQ09OU09MRV9UT0tFTl9GSUxFKTtcbiAgfVxuICBpZiAoYXV0aFRva2VuKSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdbVW5pZmllZENvbnNvbGVdIEZvbGxvd2VyIGxvYWRlZCBjb25zb2xlIGF1dGggdG9rZW4nKTtcbiAgfSBlbHNlIHtcbiAgICBsb2dnZXIuZGVidWcoJ1tVbmlmaWVkQ29uc29sZV0gTm8gY29uc29sZSBhdXRoIHRva2VuIGZpbGUgZm91bmQ7IGZvbGxvd2VyIHdpbGwgUE9TVCB3aXRob3V0IEJlYXJlciBoZWFkZXInKTtcbiAgfVxuXG4gIC8vIFBlci1pbnN0YW5jZSBwcm9tb3Rpb24gbWFuYWdlciDigJQgdHJhY2tzIGl0cyBvd24gYXR0ZW1wdCBjb3VudGVyIHNvXG4gIC8vIG11bHRpcGxlIGZvbGxvd2VycyBkb24ndCBpbnRlcmZlcmUgd2l0aCBlYWNoIG90aGVyJ3MgcHJvbW90aW9uIGJ1ZGdldHMuXG4gIGNvbnN0IHByb21vdGlvbk1nciA9IG5ldyBQcm9tb3Rpb25NYW5hZ2VyKG9wdGlvbnMsIGNvbnNvbGVQb3J0LCBzdGFydEFzTGVhZGVyLCBzdGFydEFzRm9sbG93ZXIpO1xuXG4gIC8vIERlY2xhcmUgc2Vzc2lvbkhlYXJ0YmVhdCBiZWZvcmUgdGhlIHNpbmsgc28gdGhlIGNsb3N1cmUgY2FuIGNhcHR1cmUgaXQuXG4gIC8vIEJvdGggYXJlIGluaXRpYWxpemVkIGJlZm9yZSB0aGUgY2FsbGJhY2sgY291bGQgcG9zc2libHkgZmlyZSAobmVlZHMgNSsgZmFpbGVkIGZsdXNoZXMpLlxuICBsZXQgc2Vzc2lvbkhlYXJ0YmVhdDogU2Vzc2lvbkhlYXJ0YmVhdDtcblxuICAvLyBSZWdpc3RlciBhIGZvcndhcmRpbmcgbG9nIHNpbmsgd2l0aCBsZWFkZXItZGVhdGggY2FsbGJhY2sgKCMxODUwKS5cbiAgY29uc3QgZm9yd2FyZGluZ1NpbmsgPSBuZXcgTGVhZGVyRm9yd2FyZGluZ0xvZ1NpbmsobGVhZGVyVXJsLCBvcHRpb25zLnNlc3Npb25JZCwgYXV0aFRva2VuLCAoKSA9PiB7XG4gICAgcHJvbW90aW9uTWdyLnByb21vdGUoZm9yd2FyZGluZ1NpbmssIHNlc3Npb25IZWFydGJlYXQpXG4gICAgICAuY2F0Y2goZXJyID0+IGxvZ2dlci5lcnJvcignW1VuaWZpZWRDb25zb2xlXSBQcm9tb3Rpb24gY3Jhc2hlZCcsIHsgZXJyb3I6IFN0cmluZyhlcnIpIH0pKTtcbiAgfSk7XG4gIG9wdGlvbnMucmVnaXN0ZXJMb2dTaW5rKGZvcndhcmRpbmdTaW5rKTtcblxuICAvLyBTdGFydCBzZXNzaW9uIGhlYXJ0YmVhdCB0byB0aGUgbGVhZGVyXG4gIHNlc3Npb25IZWFydGJlYXQgPSBuZXcgU2Vzc2lvbkhlYXJ0YmVhdChsZWFkZXJVcmwsIG9wdGlvbnMuc2Vzc2lvbklkLCBwcm9jZXNzLnBpZCwgYXV0aFRva2VuKTtcbiAgYXdhaXQgc2Vzc2lvbkhlYXJ0YmVhdC5zdGFydCgpO1xuXG4gIGNvbnN0IHN0b3BBdXRob3JpdHlNb25pdG9yID0gc3RhcnRGb2xsb3dlckF1dGhvcml0eU1vbml0b3IoXG4gICAgb3B0aW9ucyxcbiAgICBjb25zb2xlUG9ydCxcbiAgICBlbGVjdGlvbixcbiAgICBwcm9tb3Rpb25NZ3IsXG4gICAgZm9yd2FyZGluZ1NpbmssXG4gICAgc2Vzc2lvbkhlYXJ0YmVhdCxcbiAgKTtcblxuICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBGb2xsb3dlciBzdGFydGVkJywge1xuICAgIHNlc3Npb25JZDogb3B0aW9ucy5zZXNzaW9uSWQsIHBpZDogcHJvY2Vzcy5waWQsIHJvbGU6ICdmb2xsb3dlcicsXG4gICAgbGVhZGVyU2Vzc2lvbjogZWxlY3Rpb24ubGVhZGVySW5mby5zZXNzaW9uSWQsIGxlYWRlclBpZDogZWxlY3Rpb24ubGVhZGVySW5mby5waWQsXG4gICAgbGVhZGVyUG9ydDogZWxlY3Rpb24ubGVhZGVySW5mby5wb3J0LCBsZWFkZXJVcmwsXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgcm9sZTogJ2ZvbGxvd2VyJyxcbiAgICBlbGVjdGlvbixcbiAgICBjbGVhbnVwOiBhc3luYyAoKSA9PiB7XG4gICAgICBzdG9wQXV0aG9yaXR5TW9uaXRvcigpO1xuICAgICAgYXdhaXQgc2Vzc2lvbkhlYXJ0YmVhdC5zdG9wKCk7XG4gICAgICBhd2FpdCBmb3J3YXJkaW5nU2luay5jbG9zZSgpO1xuICAgIH0sXG4gIH07XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dollhousemcp/mcp-server",
3
- "version": "2.0.27-rc.4",
3
+ "version": "2.0.27-rc.5",
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",
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.27-rc.4",
6
+ "version": "2.0.27-rc.5",
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.27-rc.4",
32
+ "version": "2.0.27-rc.5",
33
33
  "transport": {
34
34
  "type": "stdio"
35
35
  }