@dollhousemcp/mcp-server 2.0.38 → 2.0.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/cache/CollectionCache.d.ts +1 -0
  3. package/dist/cache/CollectionCache.d.ts.map +1 -1
  4. package/dist/cache/CollectionCache.js +7 -16
  5. package/dist/cache/CollectionIndexCache.d.ts +1 -1
  6. package/dist/cache/CollectionIndexCache.d.ts.map +1 -1
  7. package/dist/cache/CollectionIndexCache.js +3 -2
  8. package/dist/cache/cachePaths.d.ts +7 -0
  9. package/dist/cache/cachePaths.d.ts.map +1 -0
  10. package/dist/cache/cachePaths.js +15 -0
  11. package/dist/di/Container.js +2 -2
  12. package/dist/elements/agents/AgentManager.d.ts +126 -6
  13. package/dist/elements/agents/AgentManager.d.ts.map +1 -1
  14. package/dist/elements/agents/AgentManager.js +224 -32
  15. package/dist/elements/base/BaseElementManager.d.ts.map +1 -1
  16. package/dist/elements/base/BaseElementManager.js +4 -18
  17. package/dist/elements/memories/Memory.d.ts +7 -0
  18. package/dist/elements/memories/Memory.d.ts.map +1 -1
  19. package/dist/elements/memories/Memory.js +68 -34
  20. package/dist/elements/memories/MemoryManager.d.ts.map +1 -1
  21. package/dist/elements/memories/MemoryManager.js +10 -2
  22. package/dist/elements/memories/memoryYamlValidation.d.ts +6 -0
  23. package/dist/elements/memories/memoryYamlValidation.d.ts.map +1 -0
  24. package/dist/elements/memories/memoryYamlValidation.js +25 -0
  25. package/dist/generated/version.d.ts +2 -2
  26. package/dist/generated/version.js +3 -3
  27. package/dist/handlers/CollectionHandler.d.ts.map +1 -1
  28. package/dist/handlers/CollectionHandler.js +2 -3
  29. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +1 -1
  30. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
  31. package/dist/handlers/mcp-aql/MCPAQLHandler.js +135 -71
  32. package/dist/handlers/mcp-aql/OperationSchema.js +4 -4
  33. package/dist/handlers/mcp-aql/policies/ElementPolicies.d.ts.map +1 -1
  34. package/dist/handlers/mcp-aql/policies/ElementPolicies.js +7 -5
  35. package/dist/portfolio/PortfolioManager.d.ts +5 -1
  36. package/dist/portfolio/PortfolioManager.d.ts.map +1 -1
  37. package/dist/portfolio/PortfolioManager.js +9 -3
  38. package/dist/security/contentValidator.d.ts +9 -1
  39. package/dist/security/contentValidator.d.ts.map +1 -1
  40. package/dist/security/contentValidator.js +24 -3
  41. package/dist/security/secureYamlParser.d.ts +3 -1
  42. package/dist/security/secureYamlParser.d.ts.map +1 -1
  43. package/dist/security/secureYamlParser.js +3 -3
  44. package/dist/security/securityMonitor.d.ts +1 -1
  45. package/dist/security/securityMonitor.d.ts.map +1 -1
  46. package/dist/security/securityMonitor.js +1 -1
  47. package/dist/security/validation/BackgroundValidator.d.ts.map +1 -1
  48. package/dist/security/validation/BackgroundValidator.js +6 -4
  49. package/dist/storage/MemoryMetadataExtractor.d.ts.map +1 -1
  50. package/dist/storage/MemoryMetadataExtractor.js +7 -2
  51. package/dist/utils/filesystem.d.ts +6 -0
  52. package/dist/utils/filesystem.d.ts.map +1 -1
  53. package/dist/utils/filesystem.js +22 -1
  54. package/package.json +9 -9
  55. package/server.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.0.40] - 2026-08-05
4
+
5
+ - Recover stale agent execution policies through a narrow, durable-state-verified path while preserving active restarts, DangerZone requirements, read restrictions, and independent agent executions. This resolves the documented abort-path failure and mitigates the broader interrupted-execution incident while automatic cleanup remains tracked separately. (#2427, #2428, #2441)
6
+ - Preserve append-only memory writes when historical entries trip newer content-scanner rules. Structural YAML protections and control-field validation remain enforced, while unsafe historical output is sanitized or redacted instead of permanently blocking future appends. (#2440, #2442)
7
+ - Keep collection and collection-index caches under Dollhouse home by default, honor explicit cache and home overrides safely, and prevent cache files from appearing in the process working repository. (#2426, #2443)
8
+ - Restore the SonarCloud security rating by hardening CI, container, and setup dependency installation; pinning external tooling; enforcing HTTPS-only downloads; removing on-demand package execution; and adding regression coverage without removing DollhouseMCP capabilities. (#2446, #2447)
9
+ - Update the existing exact `giget` override to `tar` 7.5.22, removing the critical runtime archive-processing advisory without changing any other dependency. (#2449, #2450)
10
+
11
+ ## [2.0.39] - 2026-07-31
12
+
13
+ - Fix agent sub-element activation: `activates:` references (canonical filename slugs like `security-analyst`) never resolved elements whose metadata carries display names (`Security Analyst`), so agents silently ran without their declared personas and skills — while their tool sandbox still fully applied. Lookup now matches exact names first, then falls back to the same filename normalization used when saving elements; degenerate references (empty or separator-only) warn instead of resolving. (#2432, #2433)
14
+ - **Behavior change:** agents that previously ran bare will start loading their full declared context (personas and skills) after upgrading — expect richer agent behavior from the shipped defaults such as `code-reviewer`.
15
+
3
16
  ## [2.0.38] - 2026-07-04
4
17
 
5
18
  - Close the remaining symlink containment bypasses for convert CLI output paths. Output directories that do not exist yet are vetted through their nearest existing ancestor (#2342, #2343), and output bases are now contained canonically: relative outputs (including the default) must truly resolve inside the working directory even when a symlink tries to redirect them, and explicit outside destinations disclose their real location when a symlink diverts them (#2344, #2346).
@@ -23,6 +23,7 @@ export declare class CollectionCache {
23
23
  private readonly CACHE_TTL_MS;
24
24
  private readonly fileOperations;
25
25
  constructor(fileOperations: IFileOperationsService, baseDir?: string);
26
+ getCacheFilePath(): string;
26
27
  /**
27
28
  * Initialize cache directory
28
29
  */
@@ -1 +1 @@
1
- {"version":3,"file":"CollectionCache.d.ts","sourceRoot":"","sources":["../../src/cache/CollectionCache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAE9E,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAuB;IAGpD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;gBAE5C,cAAc,EAAE,sBAAsB,EAAE,OAAO,CAAC,EAAE,MAAM;IAiBpE;;OAEG;YACW,cAAc;IAS5B;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAqCvD;;OAEG;IACG,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BtE;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAkB3D;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;IACG,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IASnE;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAKtC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAajC;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;CAY1F"}
1
+ {"version":3,"file":"CollectionCache.d.ts","sourceRoot":"","sources":["../../src/cache/CollectionCache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAG9E,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAuB;IAGpD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;gBAE5C,cAAc,EAAE,sBAAsB,EAAE,OAAO,CAAC,EAAE,MAAM;IASpE,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;YACW,cAAc;IAS5B;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAqCvD;;OAEG;IACG,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBtE;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAkB3D;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;IACG,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IASnE;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAKtC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAajC;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;CAY1F"}
@@ -4,6 +4,7 @@
4
4
  import * as path from 'path';
5
5
  import { logger } from '../utils/logger.js';
6
6
  import { SecurityMonitor } from '../security/securityMonitor.js';
7
+ import { resolveCollectionCacheDir } from './cachePaths.js';
7
8
  /**
8
9
  * Persistent cache for collection data that supports offline browsing
9
10
  */
@@ -16,19 +17,13 @@ export class CollectionCache {
16
17
  constructor(fileOperations, baseDir) {
17
18
  // Initialize file operations service
18
19
  this.fileOperations = fileOperations;
19
- // Use environment variable if set, otherwise fall back to parameter or default
20
- const envCacheDir = process.env.DOLLHOUSE_CACHE_DIR;
21
- if (envCacheDir) {
22
- this.cacheDir = envCacheDir;
23
- logger.debug(`CollectionCache: Using environment cache directory: ${this.cacheDir}`);
24
- }
25
- else {
26
- const defaultBaseDir = baseDir || process.cwd();
27
- this.cacheDir = path.join(defaultBaseDir, '.dollhousemcp', 'cache');
28
- logger.debug(`CollectionCache: Using default cache directory: ${this.cacheDir}`);
29
- }
20
+ this.cacheDir = resolveCollectionCacheDir(baseDir);
21
+ logger.debug(`CollectionCache: Using cache directory: ${this.cacheDir}`);
30
22
  this.cacheFile = path.join(this.cacheDir, 'collection-cache.json');
31
23
  }
24
+ getCacheFilePath() {
25
+ return this.cacheFile;
26
+ }
32
27
  /**
33
28
  * Initialize cache directory
34
29
  */
@@ -95,10 +90,6 @@ export class CollectionCache {
95
90
  maxSize: 50 * 1024 * 1024 // 50MB for collection cache
96
91
  });
97
92
  logger.debug(`Saved ${items.length} items to collection cache`);
98
- // SECURITY FIX: Add audit logging for cache write operations
99
- logger.debug('Security audit: Cache write operation completed successfully');
100
- // Log operation completed successfully
101
- logger.debug(`Cache file operation completed with ${items.length} items`);
102
93
  }
103
94
  catch (error) {
104
95
  logger.error(`Failed to save collection cache: ${error}`);
@@ -180,4 +171,4 @@ export class CollectionCache {
180
171
  };
181
172
  }
182
173
  }
183
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvbkNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NhY2hlL0NvbGxlY3Rpb25DYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFpQmpFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFDbEIsUUFBUSxDQUFTO0lBQ2pCLFNBQVMsQ0FBUztJQUNULFlBQVksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxnQ0FBZ0M7SUFFckYsOENBQThDO0lBQzdCLGNBQWMsQ0FBeUI7SUFFeEQsWUFBWSxjQUFzQyxFQUFFLE9BQWdCO1FBQ2xFLHFDQUFxQztRQUNyQyxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUVyQywrRUFBK0U7UUFDL0UsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztRQUNwRCxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxLQUFLLENBQUMsdURBQXVELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxjQUFjLEdBQUcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNwRSxNQUFNLENBQUMsS0FBSyxDQUFDLG1EQUFtRCxJQUFJLENBQUMsUUFBUSxFQUFF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QyxDQUFDO1lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSyxLQUFhLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNyQyxNQUFNLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzdELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGFBQWE7UUFDakIsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDdkQsQ0FBQztRQUVELE9BQU87WUFDTCxTQUFTLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQzdCLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVM7WUFDdEMsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxZQUFZO1NBQzNELENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBlcnNpc3RlbnQgY2FjaGUgZm9yIGNvbGxlY3Rpb24gZGF0YSB0byBzdXBwb3J0IG9mZmxpbmUvYW5vbnltb3VzIGJyb3dzaW5nXG4gKi9cblxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHsgSUZpbGVPcGVyYXRpb25zU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL0ZpbGVPcGVyYXRpb25zU2VydmljZS5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGlvbkl0ZW0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHBhdGg6IHN0cmluZztcbiAgc2hhOiBzdHJpbmc7XG4gIGNvbnRlbnQ/OiBzdHJpbmc7XG4gIGxhc3RfbW9kaWZpZWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGlvbkNhY2hlRW50cnkge1xuICBpdGVtczogQ29sbGVjdGlvbkl0ZW1bXTtcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIGV0YWc/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGVyc2lzdGVudCBjYWNoZSBmb3IgY29sbGVjdGlvbiBkYXRhIHRoYXQgc3VwcG9ydHMgb2ZmbGluZSBicm93c2luZ1xuICovXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkNhY2hlIHtcbiAgcHJpdmF0ZSBjYWNoZURpcjogc3RyaW5nO1xuICBwcml2YXRlIGNhY2hlRmlsZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IENBQ0hFX1RUTF9NUyA9IDI0ICogNjAgKiA2MCAqIDEwMDA7IC8vIDI0IGhvdXJzIGZvciBjb2xsZWN0aW9uIGNhY2hlXG5cbiAgLy8gRmlsZSBvcGVyYXRpb25zIHNlcnZpY2UgZm9yIHNlY3VyZSBmaWxlIEkvT1xuICBwcml2YXRlIHJlYWRvbmx5IGZpbGVPcGVyYXRpb25zOiBJRmlsZU9wZXJhdGlvbnNTZXJ2aWNlO1xuXG4gIGNvbnN0cnVjdG9yKGZpbGVPcGVyYXRpb25zOiBJRmlsZU9wZXJhdGlvbnNTZXJ2aWNlLCBiYXNlRGlyPzogc3RyaW5nKSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBmaWxlIG9wZXJhdGlvbnMgc2VydmljZVxuICAgIHRoaXMuZmlsZU9wZXJhdGlvbnMgPSBmaWxlT3BlcmF0aW9ucztcblxuICAgIC8vIFVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiBzZXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gcGFyYW1ldGVyIG9yIGRlZmF1bHRcbiAgICBjb25zdCBlbnZDYWNoZURpciA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9DQUNIRV9ESVI7XG4gICAgaWYgKGVudkNhY2hlRGlyKSB7XG4gICAgICB0aGlzLmNhY2hlRGlyID0gZW52Q2FjaGVEaXI7XG4gICAgICBsb2dnZXIuZGVidWcoYENvbGxlY3Rpb25DYWNoZTogVXNpbmcgZW52aXJvbm1lbnQgY2FjaGUgZGlyZWN0b3J5OiAke3RoaXMuY2FjaGVEaXJ9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRCYXNlRGlyID0gYmFzZURpciB8fCBwcm9jZXNzLmN3ZCgpO1xuICAgICAgdGhpcy5jYWNoZURpciA9IHBhdGguam9pbihkZWZhdWx0QmFzZURpciwgJy5kb2xsaG91c2VtY3AnLCAnY2FjaGUnKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgQ29sbGVjdGlvbkNhY2hlOiBVc2luZyBkZWZhdWx0IGNhY2hlIGRpcmVjdG9yeTogJHt0aGlzLmNhY2hlRGlyfWApO1xuICAgIH1cbiAgICB0aGlzLmNhY2hlRmlsZSA9IHBhdGguam9pbih0aGlzLmNhY2hlRGlyLCAnY29sbGVjdGlvbi1jYWNoZS5qc29uJyk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGNhY2hlIGRpcmVjdG9yeVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVDYWNoZURpcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5maWxlT3BlcmF0aW9ucy5jcmVhdGVEaXJlY3RvcnkodGhpcy5jYWNoZURpcik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBjYWNoZSBkaXJlY3Rvcnk6ICR7ZXJyb3J9YCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBMb2FkIGNvbGxlY3Rpb24gZGF0YSBmcm9tIHBlcnNpc3RlbnQgY2FjaGVcbiAgICovXG4gIGFzeW5jIGxvYWRDYWNoZSgpOiBQcm9taXNlPENvbGxlY3Rpb25DYWNoZUVudHJ5IHwgbnVsbD4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBWYWxpZGF0ZSBjYWNoZSBmaWxlIHBhdGggKGJhc2ljIHNlY3VyaXR5IGNoZWNrKVxuICAgICAgaWYgKHRoaXMuY2FjaGVGaWxlLmluY2x1ZGVzKCcuLicpIHx8IHRoaXMuY2FjaGVGaWxlLmluY2x1ZGVzKCdcXDAnKSkge1xuICAgICAgICAvLyBTRUNVUklUWSBGSVg6IEFkZCBhdWRpdCBsb2dnaW5nIGZvciBwYXRoIHRyYXZlcnNhbCBhdHRlbXB0IGRldGVjdGlvblxuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ1BBVEhfVFJBVkVSU0FMX0FUVEVNUFQnLFxuICAgICAgICAgIHNldmVyaXR5OiAnSElHSCcsXG4gICAgICAgICAgc291cmNlOiAnQ29sbGVjdGlvbkNhY2hlLmxvYWRDYWNoZScsXG4gICAgICAgICAgZGV0YWlsczogYFBvdGVudGlhbCBwYXRoIHRyYXZlcnNhbCBhdHRlbXB0IGRldGVjdGVkIGluIGNhY2hlIGZpbGUgcGF0aDogJHt0aGlzLmNhY2hlRmlsZS5zdWJzdHJpbmcoMCwgMTAwKX1gXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dnZXIud2FybignSW52YWxpZCBjYWNoZSBmaWxlIHBhdGgsIHNraXBwaW5nIGNhY2hlIGxvYWQnKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmZpbGVPcGVyYXRpb25zLnJlYWRGaWxlKHRoaXMuY2FjaGVGaWxlLCB7XG4gICAgICAgIHNvdXJjZTogJ0NvbGxlY3Rpb25DYWNoZS5sb2FkQ2FjaGUnLFxuICAgICAgICBtYXhTaXplOiA1MCAqIDEwMjQgKiAxMDI0IC8vIDUwTUIgZm9yIGNvbGxlY3Rpb24gY2FjaGVcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2FjaGU6IENvbGxlY3Rpb25DYWNoZUVudHJ5ID0gSlNPTi5wYXJzZShkYXRhKTtcblxuICAgICAgLy8gQ2hlY2sgaWYgY2FjaGUgaXMgZXhwaXJlZFxuICAgICAgaWYgKERhdGUubm93KCkgLSBjYWNoZS50aW1lc3RhbXAgPiB0aGlzLkNBQ0hFX1RUTF9NUykge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ0NvbGxlY3Rpb24gY2FjaGUgZXhwaXJlZCwgd2lsbCByZWZyZXNoIGZyb20gR2l0SHViJyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBsb2dnZXIuZGVidWcoYExvYWRlZCAke2NhY2hlLml0ZW1zLmxlbmd0aH0gaXRlbXMgZnJvbSBjb2xsZWN0aW9uIGNhY2hlYCk7XG4gICAgICByZXR1cm4gY2FjaGU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICgoZXJyb3IgYXMgYW55KS5jb2RlICE9PSAnRU5PRU5UJykge1xuICAgICAgICBsb2dnZXIuZGVidWcoYEZhaWxlZCB0byBsb2FkIGNvbGxlY3Rpb24gY2FjaGU6ICR7ZXJyb3J9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTYXZlIGNvbGxlY3Rpb24gZGF0YSB0byBwZXJzaXN0ZW50IGNhY2hlXG4gICAqL1xuICBhc3luYyBzYXZlQ2FjaGUoaXRlbXM6IENvbGxlY3Rpb25JdGVtW10sIGV0YWc/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5lbnN1cmVDYWNoZURpcigpO1xuXG4gICAgICBjb25zdCBjYWNoZUVudHJ5OiBDb2xsZWN0aW9uQ2FjaGVFbnRyeSA9IHtcbiAgICAgICAgaXRlbXMsXG4gICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAgZXRhZ1xuICAgICAgfTtcblxuICAgICAgY29uc3QgZGF0YSA9IEpTT04uc3RyaW5naWZ5KGNhY2hlRW50cnksIG51bGwsIDIpO1xuICAgICAgYXdhaXQgdGhpcy5maWxlT3BlcmF0aW9ucy53cml0ZUZpbGUodGhpcy5jYWNoZUZpbGUsIGRhdGEsIHtcbiAgICAgICAgc291cmNlOiAnQ29sbGVjdGlvbkNhY2hlLnNhdmVDYWNoZScsXG4gICAgICAgIG1heFNpemU6IDUwICogMTAyNCAqIDEwMjQgLy8gNTBNQiBmb3IgY29sbGVjdGlvbiBjYWNoZVxuICAgICAgfSk7XG5cbiAgICAgIGxvZ2dlci5kZWJ1ZyhgU2F2ZWQgJHtpdGVtcy5sZW5ndGh9IGl0ZW1zIHRvIGNvbGxlY3Rpb24gY2FjaGVgKTtcblxuICAgICAgLy8gU0VDVVJJVFkgRklYOiBBZGQgYXVkaXQgbG9nZ2luZyBmb3IgY2FjaGUgd3JpdGUgb3BlcmF0aW9uc1xuICAgICAgbG9nZ2VyLmRlYnVnKCdTZWN1cml0eSBhdWRpdDogQ2FjaGUgd3JpdGUgb3BlcmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHknKTtcblxuICAgICAgLy8gTG9nIG9wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XG4gICAgICBsb2dnZXIuZGVidWcoYENhY2hlIGZpbGUgb3BlcmF0aW9uIGNvbXBsZXRlZCB3aXRoICR7aXRlbXMubGVuZ3RofSBpdGVtc2ApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBzYXZlIGNvbGxlY3Rpb24gY2FjaGU6ICR7ZXJyb3J9YCk7XG4gICAgICAvLyBEb24ndCB0aHJvdyAtIGNhY2hpbmcgZmFpbHVyZXMgc2hvdWxkbid0IGJyZWFrIGZ1bmN0aW9uYWxpdHlcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTZWFyY2ggY2FjaGVkIGNvbGxlY3Rpb24gaXRlbXMgd2l0aCBmdXp6eSBtYXRjaGluZ1xuICAgKi9cbiAgYXN5bmMgc2VhcmNoQ2FjaGUocXVlcnk6IHN0cmluZyk6IFByb21pc2U8Q29sbGVjdGlvbkl0ZW1bXT4ge1xuICAgIGNvbnN0IGNhY2hlID0gYXdhaXQgdGhpcy5sb2FkQ2FjaGUoKTtcbiAgICBpZiAoIWNhY2hlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IG5vcm1hbGl6ZWRRdWVyeSA9IHRoaXMubm9ybWFsaXplU2VhcmNoVGVybShxdWVyeSk7XG4gICAgcmV0dXJuIGNhY2hlLml0ZW1zLmZpbHRlcihpdGVtID0+IHtcbiAgICAgIC8vIFNlYXJjaCBpbiBmaWxlbmFtZSBhbmQgcGF0aCB3aXRoIG5vcm1hbGl6YXRpb25cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gdGhpcy5ub3JtYWxpemVTZWFyY2hUZXJtKGl0ZW0ubmFtZSk7XG4gICAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IHRoaXMubm9ybWFsaXplU2VhcmNoVGVybShpdGVtLnBhdGgpO1xuICAgICAgXG4gICAgICByZXR1cm4gbm9ybWFsaXplZE5hbWUuaW5jbHVkZXMobm9ybWFsaXplZFF1ZXJ5KSB8fCBcbiAgICAgICAgICAgICBub3JtYWxpemVkUGF0aC5pbmNsdWRlcyhub3JtYWxpemVkUXVlcnkpIHx8XG4gICAgICAgICAgICAgKGl0ZW0uY29udGVudCAmJiB0aGlzLm5vcm1hbGl6ZVNlYXJjaFRlcm0oaXRlbS5jb250ZW50KS5pbmNsdWRlcyhub3JtYWxpemVkUXVlcnkpKTtcbiAgICB9KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIE5vcm1hbGl6ZSBzZWFyY2ggdGVybXMgZm9yIGJldHRlciBtYXRjaGluZyAoaGFuZGxlcyBzcGFjZXMsIGRhc2hlcywgZXRjLilcbiAgICovXG4gIHByaXZhdGUgbm9ybWFsaXplU2VhcmNoVGVybSh0ZXJtOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0ZXJtLnRvTG93ZXJDYXNlKClcbiAgICAgIC5yZXBsYWNlQWxsKC9bLV9cXHNdKy9nLCAnICcpICAvLyBDb252ZXJ0IGRhc2hlcywgdW5kZXJzY29yZXMgdG8gc3BhY2VzXG4gICAgICAucmVwbGFjZSgvXFwubWQkLywgJycpICAgICAgIC8vIFJlbW92ZSAubWQgZXh0ZW5zaW9uXG4gICAgICAudHJpbSgpO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGNhY2hlZCBjb2xsZWN0aW9uIGl0ZW1zIGJ5IHR5cGUvcGF0aFxuICAgKi9cbiAgYXN5bmMgZ2V0SXRlbXNCeVBhdGgocGF0aFByZWZpeDogc3RyaW5nKTogUHJvbWlzZTxDb2xsZWN0aW9uSXRlbVtdPiB7XG4gICAgY29uc3QgY2FjaGUgPSBhd2FpdCB0aGlzLmxvYWRDYWNoZSgpO1xuICAgIGlmICghY2FjaGUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGNhY2hlLml0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0ucGF0aC5zdGFydHNXaXRoKHBhdGhQcmVmaXgpKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIGNhY2hlIGV4aXN0cyBhbmQgaXMgdmFsaWRcbiAgICovXG4gIGFzeW5jIGlzQ2FjaGVWYWxpZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjYWNoZSA9IGF3YWl0IHRoaXMubG9hZENhY2hlKCk7XG4gICAgcmV0dXJuIGNhY2hlICE9PSBudWxsO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2xlYXIgdGhlIGNhY2hlXG4gICAqL1xuICBhc3luYyBjbGVhckNhY2hlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmZpbGVPcGVyYXRpb25zLmRlbGV0ZUZpbGUodGhpcy5jYWNoZUZpbGUsIHVuZGVmaW5lZCwge1xuICAgICAgICBzb3VyY2U6ICdDb2xsZWN0aW9uQ2FjaGUuY2xlYXJDYWNoZSdcbiAgICAgIH0pO1xuICAgICAgbG9nZ2VyLmRlYnVnKCdDb2xsZWN0aW9uIGNhY2hlIGNsZWFyZWQnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKChlcnJvciBhcyBhbnkpLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgRmFpbGVkIHRvIGNsZWFyIGNvbGxlY3Rpb24gY2FjaGU6ICR7ZXJyb3J9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGNhY2hlIHN0YXRzIGZvciBkZWJ1Z2dpbmdcbiAgICovXG4gIGFzeW5jIGdldENhY2hlU3RhdHMoKTogUHJvbWlzZTx7IGl0ZW1Db3VudDogbnVtYmVyOyBjYWNoZUFnZTogbnVtYmVyOyBpc1ZhbGlkOiBib29sZWFuIH0+IHtcbiAgICBjb25zdCBjYWNoZSA9IGF3YWl0IHRoaXMubG9hZENhY2hlKCk7XG4gICAgaWYgKCFjYWNoZSkge1xuICAgICAgcmV0dXJuIHsgaXRlbUNvdW50OiAwLCBjYWNoZUFnZTogMCwgaXNWYWxpZDogZmFsc2UgfTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1Db3VudDogY2FjaGUuaXRlbXMubGVuZ3RoLFxuICAgICAgY2FjaGVBZ2U6IERhdGUubm93KCkgLSBjYWNoZS50aW1lc3RhbXAsXG4gICAgICBpc1ZhbGlkOiBEYXRlLm5vdygpIC0gY2FjaGUudGltZXN0YW1wIDw9IHRoaXMuQ0FDSEVfVFRMX01TXG4gICAgfTtcbiAgfVxufSJdfQ==
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvbkNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NhY2hlL0NvbGxlY3Rpb25DYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFakUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFnQjVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFDbEIsUUFBUSxDQUFTO0lBQ2pCLFNBQVMsQ0FBUztJQUNULFlBQVksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxnQ0FBZ0M7SUFFckYsOENBQThDO0lBQzdCLGNBQWMsQ0FBeUI7SUFFeEQsWUFBWSxjQUFzQyxFQUFFLE9BQWdCO1FBQ2xFLHFDQUFxQztRQUNyQyxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUVyQyxJQUFJLENBQUMsUUFBUSxHQUFHLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25ELE1BQU0sQ0FBQyxLQUFLLENBQUMsMkNBQTJDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLHVCQUF1QixDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQ7O09BRUc7SUFDSyxLQUFLLENBQUMsY0FBYztRQUMxQixJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMscUNBQXFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDM0QsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFNBQVM7UUFDYixJQUFJLENBQUM7WUFDSCxrREFBa0Q7WUFDbEQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNuRSx1RUFBdUU7Z0JBQ3ZFLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDL0IsSUFBSSxFQUFFLHdCQUF3QjtvQkFDOUIsUUFBUSxFQUFFLE1BQU07b0JBQ2hCLE1BQU0sRUFBRSwyQkFBMkI7b0JBQ25DLE9BQU8sRUFBRSxpRUFBaUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2lCQUM3RyxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO2dCQUM1RCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQzlELE1BQU0sRUFBRSwyQkFBMkI7Z0JBQ25DLE9BQU8sRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyw0QkFBNEI7YUFDdkQsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxLQUFLLEdBQXlCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFckQsNEJBQTRCO1lBQzVCLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNyRCxNQUFNLENBQUMsS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7Z0JBQ25FLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sOEJBQThCLENBQUMsQ0FBQztZQUN6RSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSyxLQUFhLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNyQyxNQUFNLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzVELENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQXVCLEVBQUUsSUFBYTtRQUNwRCxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUU1QixNQUFNLFVBQVUsR0FBeUI7Z0JBQ3ZDLEtBQUs7Z0JBQ0wsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ3JCLElBQUk7YUFDTCxDQUFDO1lBRUYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2pELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUU7Z0JBQ3hELE1BQU0sRUFBRSwyQkFBMkI7Z0JBQ25DLE9BQU8sRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyw0QkFBNEI7YUFDdkQsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLEtBQUssQ0FBQyxNQUFNLDRCQUE0QixDQUFDLENBQUM7UUFDbEUsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzFELCtEQUErRDtRQUNqRSxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFhO1FBQzdCLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4RCxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQy9CLGlEQUFpRDtZQUNqRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFM0QsT0FBTyxjQUFjLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQztnQkFDeEMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7Z0JBQ3hDLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQzVGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssbUJBQW1CLENBQUMsSUFBWTtRQUN0QyxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUU7YUFDdEIsVUFBVSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBRSx3Q0FBd0M7YUFDckUsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBTyx1QkFBdUI7YUFDbEQsSUFBSSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsY0FBYyxDQUFDLFVBQWtCO1FBQ3JDLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxZQUFZO1FBQ2hCLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3JDLE9BQU8sS0FBSyxLQUFLLElBQUksQ0FBQztJQUN4QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsVUFBVTtRQUNkLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUU7Z0JBQzlELE1BQU0sRUFBRSw0QkFBNEI7YUFDckMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSyxLQUFhLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNyQyxNQUFNLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzdELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGFBQWE7UUFDakIsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDdkQsQ0FBQztRQUVELE9BQU87WUFDTCxTQUFTLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQzdCLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVM7WUFDdEMsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxZQUFZO1NBQzNELENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBlcnNpc3RlbnQgY2FjaGUgZm9yIGNvbGxlY3Rpb24gZGF0YSB0byBzdXBwb3J0IG9mZmxpbmUvYW5vbnltb3VzIGJyb3dzaW5nXG4gKi9cblxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHsgSUZpbGVPcGVyYXRpb25zU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL0ZpbGVPcGVyYXRpb25zU2VydmljZS5qcyc7XG5pbXBvcnQgeyByZXNvbHZlQ29sbGVjdGlvbkNhY2hlRGlyIH0gZnJvbSAnLi9jYWNoZVBhdGhzLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBDb2xsZWN0aW9uSXRlbSB7XG4gIG5hbWU6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICBzaGE6IHN0cmluZztcbiAgY29udGVudD86IHN0cmluZztcbiAgbGFzdF9tb2RpZmllZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2xsZWN0aW9uQ2FjaGVFbnRyeSB7XG4gIGl0ZW1zOiBDb2xsZWN0aW9uSXRlbVtdO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgZXRhZz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQZXJzaXN0ZW50IGNhY2hlIGZvciBjb2xsZWN0aW9uIGRhdGEgdGhhdCBzdXBwb3J0cyBvZmZsaW5lIGJyb3dzaW5nXG4gKi9cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uQ2FjaGUge1xuICBwcml2YXRlIGNhY2hlRGlyOiBzdHJpbmc7XG4gIHByaXZhdGUgY2FjaGVGaWxlOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgQ0FDSEVfVFRMX01TID0gMjQgKiA2MCAqIDYwICogMTAwMDsgLy8gMjQgaG91cnMgZm9yIGNvbGxlY3Rpb24gY2FjaGVcblxuICAvLyBGaWxlIG9wZXJhdGlvbnMgc2VydmljZSBmb3Igc2VjdXJlIGZpbGUgSS9PXG4gIHByaXZhdGUgcmVhZG9ubHkgZmlsZU9wZXJhdGlvbnM6IElGaWxlT3BlcmF0aW9uc1NlcnZpY2U7XG5cbiAgY29uc3RydWN0b3IoZmlsZU9wZXJhdGlvbnM6IElGaWxlT3BlcmF0aW9uc1NlcnZpY2UsIGJhc2VEaXI/OiBzdHJpbmcpIHtcbiAgICAvLyBJbml0aWFsaXplIGZpbGUgb3BlcmF0aW9ucyBzZXJ2aWNlXG4gICAgdGhpcy5maWxlT3BlcmF0aW9ucyA9IGZpbGVPcGVyYXRpb25zO1xuXG4gICAgdGhpcy5jYWNoZURpciA9IHJlc29sdmVDb2xsZWN0aW9uQ2FjaGVEaXIoYmFzZURpcik7XG4gICAgbG9nZ2VyLmRlYnVnKGBDb2xsZWN0aW9uQ2FjaGU6IFVzaW5nIGNhY2hlIGRpcmVjdG9yeTogJHt0aGlzLmNhY2hlRGlyfWApO1xuICAgIHRoaXMuY2FjaGVGaWxlID0gcGF0aC5qb2luKHRoaXMuY2FjaGVEaXIsICdjb2xsZWN0aW9uLWNhY2hlLmpzb24nKTtcbiAgfVxuXG4gIGdldENhY2hlRmlsZVBhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZUZpbGU7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGNhY2hlIGRpcmVjdG9yeVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVDYWNoZURpcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5maWxlT3BlcmF0aW9ucy5jcmVhdGVEaXJlY3RvcnkodGhpcy5jYWNoZURpcik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBjYWNoZSBkaXJlY3Rvcnk6ICR7ZXJyb3J9YCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBMb2FkIGNvbGxlY3Rpb24gZGF0YSBmcm9tIHBlcnNpc3RlbnQgY2FjaGVcbiAgICovXG4gIGFzeW5jIGxvYWRDYWNoZSgpOiBQcm9taXNlPENvbGxlY3Rpb25DYWNoZUVudHJ5IHwgbnVsbD4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBWYWxpZGF0ZSBjYWNoZSBmaWxlIHBhdGggKGJhc2ljIHNlY3VyaXR5IGNoZWNrKVxuICAgICAgaWYgKHRoaXMuY2FjaGVGaWxlLmluY2x1ZGVzKCcuLicpIHx8IHRoaXMuY2FjaGVGaWxlLmluY2x1ZGVzKCdcXDAnKSkge1xuICAgICAgICAvLyBTRUNVUklUWSBGSVg6IEFkZCBhdWRpdCBsb2dnaW5nIGZvciBwYXRoIHRyYXZlcnNhbCBhdHRlbXB0IGRldGVjdGlvblxuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ1BBVEhfVFJBVkVSU0FMX0FUVEVNUFQnLFxuICAgICAgICAgIHNldmVyaXR5OiAnSElHSCcsXG4gICAgICAgICAgc291cmNlOiAnQ29sbGVjdGlvbkNhY2hlLmxvYWRDYWNoZScsXG4gICAgICAgICAgZGV0YWlsczogYFBvdGVudGlhbCBwYXRoIHRyYXZlcnNhbCBhdHRlbXB0IGRldGVjdGVkIGluIGNhY2hlIGZpbGUgcGF0aDogJHt0aGlzLmNhY2hlRmlsZS5zdWJzdHJpbmcoMCwgMTAwKX1gXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dnZXIud2FybignSW52YWxpZCBjYWNoZSBmaWxlIHBhdGgsIHNraXBwaW5nIGNhY2hlIGxvYWQnKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmZpbGVPcGVyYXRpb25zLnJlYWRGaWxlKHRoaXMuY2FjaGVGaWxlLCB7XG4gICAgICAgIHNvdXJjZTogJ0NvbGxlY3Rpb25DYWNoZS5sb2FkQ2FjaGUnLFxuICAgICAgICBtYXhTaXplOiA1MCAqIDEwMjQgKiAxMDI0IC8vIDUwTUIgZm9yIGNvbGxlY3Rpb24gY2FjaGVcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2FjaGU6IENvbGxlY3Rpb25DYWNoZUVudHJ5ID0gSlNPTi5wYXJzZShkYXRhKTtcblxuICAgICAgLy8gQ2hlY2sgaWYgY2FjaGUgaXMgZXhwaXJlZFxuICAgICAgaWYgKERhdGUubm93KCkgLSBjYWNoZS50aW1lc3RhbXAgPiB0aGlzLkNBQ0hFX1RUTF9NUykge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ0NvbGxlY3Rpb24gY2FjaGUgZXhwaXJlZCwgd2lsbCByZWZyZXNoIGZyb20gR2l0SHViJyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBsb2dnZXIuZGVidWcoYExvYWRlZCAke2NhY2hlLml0ZW1zLmxlbmd0aH0gaXRlbXMgZnJvbSBjb2xsZWN0aW9uIGNhY2hlYCk7XG4gICAgICByZXR1cm4gY2FjaGU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICgoZXJyb3IgYXMgYW55KS5jb2RlICE9PSAnRU5PRU5UJykge1xuICAgICAgICBsb2dnZXIuZGVidWcoYEZhaWxlZCB0byBsb2FkIGNvbGxlY3Rpb24gY2FjaGU6ICR7ZXJyb3J9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTYXZlIGNvbGxlY3Rpb24gZGF0YSB0byBwZXJzaXN0ZW50IGNhY2hlXG4gICAqL1xuICBhc3luYyBzYXZlQ2FjaGUoaXRlbXM6IENvbGxlY3Rpb25JdGVtW10sIGV0YWc/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5lbnN1cmVDYWNoZURpcigpO1xuXG4gICAgICBjb25zdCBjYWNoZUVudHJ5OiBDb2xsZWN0aW9uQ2FjaGVFbnRyeSA9IHtcbiAgICAgICAgaXRlbXMsXG4gICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAgZXRhZ1xuICAgICAgfTtcblxuICAgICAgY29uc3QgZGF0YSA9IEpTT04uc3RyaW5naWZ5KGNhY2hlRW50cnksIG51bGwsIDIpO1xuICAgICAgYXdhaXQgdGhpcy5maWxlT3BlcmF0aW9ucy53cml0ZUZpbGUodGhpcy5jYWNoZUZpbGUsIGRhdGEsIHtcbiAgICAgICAgc291cmNlOiAnQ29sbGVjdGlvbkNhY2hlLnNhdmVDYWNoZScsXG4gICAgICAgIG1heFNpemU6IDUwICogMTAyNCAqIDEwMjQgLy8gNTBNQiBmb3IgY29sbGVjdGlvbiBjYWNoZVxuICAgICAgfSk7XG5cbiAgICAgIGxvZ2dlci5kZWJ1ZyhgU2F2ZWQgJHtpdGVtcy5sZW5ndGh9IGl0ZW1zIHRvIGNvbGxlY3Rpb24gY2FjaGVgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gc2F2ZSBjb2xsZWN0aW9uIGNhY2hlOiAke2Vycm9yfWApO1xuICAgICAgLy8gRG9uJ3QgdGhyb3cgLSBjYWNoaW5nIGZhaWx1cmVzIHNob3VsZG4ndCBicmVhayBmdW5jdGlvbmFsaXR5XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogU2VhcmNoIGNhY2hlZCBjb2xsZWN0aW9uIGl0ZW1zIHdpdGggZnV6enkgbWF0Y2hpbmdcbiAgICovXG4gIGFzeW5jIHNlYXJjaENhY2hlKHF1ZXJ5OiBzdHJpbmcpOiBQcm9taXNlPENvbGxlY3Rpb25JdGVtW10+IHtcbiAgICBjb25zdCBjYWNoZSA9IGF3YWl0IHRoaXMubG9hZENhY2hlKCk7XG4gICAgaWYgKCFjYWNoZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBub3JtYWxpemVkUXVlcnkgPSB0aGlzLm5vcm1hbGl6ZVNlYXJjaFRlcm0ocXVlcnkpO1xuICAgIHJldHVybiBjYWNoZS5pdGVtcy5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAvLyBTZWFyY2ggaW4gZmlsZW5hbWUgYW5kIHBhdGggd2l0aCBub3JtYWxpemF0aW9uXG4gICAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IHRoaXMubm9ybWFsaXplU2VhcmNoVGVybShpdGVtLm5hbWUpO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSB0aGlzLm5vcm1hbGl6ZVNlYXJjaFRlcm0oaXRlbS5wYXRoKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIG5vcm1hbGl6ZWROYW1lLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSkgfHwgXG4gICAgICAgICAgICAgbm9ybWFsaXplZFBhdGguaW5jbHVkZXMobm9ybWFsaXplZFF1ZXJ5KSB8fFxuICAgICAgICAgICAgIChpdGVtLmNvbnRlbnQgJiYgdGhpcy5ub3JtYWxpemVTZWFyY2hUZXJtKGl0ZW0uY29udGVudCkuaW5jbHVkZXMobm9ybWFsaXplZFF1ZXJ5KSk7XG4gICAgfSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBOb3JtYWxpemUgc2VhcmNoIHRlcm1zIGZvciBiZXR0ZXIgbWF0Y2hpbmcgKGhhbmRsZXMgc3BhY2VzLCBkYXNoZXMsIGV0Yy4pXG4gICAqL1xuICBwcml2YXRlIG5vcm1hbGl6ZVNlYXJjaFRlcm0odGVybTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGVybS50b0xvd2VyQ2FzZSgpXG4gICAgICAucmVwbGFjZUFsbCgvWy1fXFxzXSsvZywgJyAnKSAgLy8gQ29udmVydCBkYXNoZXMsIHVuZGVyc2NvcmVzIHRvIHNwYWNlc1xuICAgICAgLnJlcGxhY2UoL1xcLm1kJC8sICcnKSAgICAgICAvLyBSZW1vdmUgLm1kIGV4dGVuc2lvblxuICAgICAgLnRyaW0oKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBjYWNoZWQgY29sbGVjdGlvbiBpdGVtcyBieSB0eXBlL3BhdGhcbiAgICovXG4gIGFzeW5jIGdldEl0ZW1zQnlQYXRoKHBhdGhQcmVmaXg6IHN0cmluZyk6IFByb21pc2U8Q29sbGVjdGlvbkl0ZW1bXT4ge1xuICAgIGNvbnN0IGNhY2hlID0gYXdhaXQgdGhpcy5sb2FkQ2FjaGUoKTtcbiAgICBpZiAoIWNhY2hlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBjYWNoZS5pdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLnBhdGguc3RhcnRzV2l0aChwYXRoUHJlZml4KSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiBjYWNoZSBleGlzdHMgYW5kIGlzIHZhbGlkXG4gICAqL1xuICBhc3luYyBpc0NhY2hlVmFsaWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgY2FjaGUgPSBhd2FpdCB0aGlzLmxvYWRDYWNoZSgpO1xuICAgIHJldHVybiBjYWNoZSAhPT0gbnVsbDtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENsZWFyIHRoZSBjYWNoZVxuICAgKi9cbiAgYXN5bmMgY2xlYXJDYWNoZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5maWxlT3BlcmF0aW9ucy5kZWxldGVGaWxlKHRoaXMuY2FjaGVGaWxlLCB1bmRlZmluZWQsIHtcbiAgICAgICAgc291cmNlOiAnQ29sbGVjdGlvbkNhY2hlLmNsZWFyQ2FjaGUnXG4gICAgICB9KTtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnQ29sbGVjdGlvbiBjYWNoZSBjbGVhcmVkJyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICgoZXJyb3IgYXMgYW55KS5jb2RlICE9PSAnRU5PRU5UJykge1xuICAgICAgICBsb2dnZXIuZGVidWcoYEZhaWxlZCB0byBjbGVhciBjb2xsZWN0aW9uIGNhY2hlOiAke2Vycm9yfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBjYWNoZSBzdGF0cyBmb3IgZGVidWdnaW5nXG4gICAqL1xuICBhc3luYyBnZXRDYWNoZVN0YXRzKCk6IFByb21pc2U8eyBpdGVtQ291bnQ6IG51bWJlcjsgY2FjaGVBZ2U6IG51bWJlcjsgaXNWYWxpZDogYm9vbGVhbiB9PiB7XG4gICAgY29uc3QgY2FjaGUgPSBhd2FpdCB0aGlzLmxvYWRDYWNoZSgpO1xuICAgIGlmICghY2FjaGUpIHtcbiAgICAgIHJldHVybiB7IGl0ZW1Db3VudDogMCwgY2FjaGVBZ2U6IDAsIGlzVmFsaWQ6IGZhbHNlIH07XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBpdGVtQ291bnQ6IGNhY2hlLml0ZW1zLmxlbmd0aCxcbiAgICAgIGNhY2hlQWdlOiBEYXRlLm5vdygpIC0gY2FjaGUudGltZXN0YW1wLFxuICAgICAgaXNWYWxpZDogRGF0ZS5ub3coKSAtIGNhY2hlLnRpbWVzdGFtcCA8PSB0aGlzLkNBQ0hFX1RUTF9NU1xuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -16,7 +16,7 @@ export declare class CollectionIndexCache {
16
16
  private memoryCache;
17
17
  private fetchPromise;
18
18
  private readonly fileOperations;
19
- constructor(githubClient: GitHubClient, baseDir: string, performanceMonitor: PerformanceMonitor, fileOperations: IFileOperationsService);
19
+ constructor(githubClient: GitHubClient, baseDir: string | undefined, performanceMonitor: PerformanceMonitor, fileOperations: IFileOperationsService);
20
20
  /**
21
21
  * Get the collection index with performance optimization and lazy loading
22
22
  */
@@ -1 +1 @@
1
- {"version":3,"file":"CollectionIndexCache.d.ts","sourceRoot":"","sources":["../../src/cache/CollectionIndexCache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,eAAe,EAAe,MAAM,wBAAwB,CAAC;AAEtE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAG7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAE9E,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkB;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqE;IAC/F,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,YAAY,CAAyC;IAG7D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;gBAGtD,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,MAAM,EACf,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,sBAAsB;IAmBxC;;OAEG;IACG,QAAQ,CAAC,QAAQ,GAAE,OAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IAiEnE;;OAEG;IACH,OAAO,CAAC,OAAO;IASf;;OAEG;YACW,UAAU;IAiExB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAc9B;;OAEG;YACW,UAAU;IAqBxB;;OAEG;YACW,YAAY;IA8B1B;;OAEG;YACW,cAAc;IAS5B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA0BjC;;OAEG;IACH,aAAa,IAAI;QACf,OAAO,EAAE,OAAO,CAAC;QACjB,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,OAAO,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,GAAG,CAAC;QACjB,kBAAkB,EAAE,GAAG,CAAC;KACzB;IA0BD;;OAEG;IACH,KAAK,IAAI,IAAI;IAUb;;OAEG;YACW,sBAAsB;IAuBpC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAqBhC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAK7B;;OAEG;IACH,OAAO,CAAC,0BAA0B;CAInC"}
1
+ {"version":3,"file":"CollectionIndexCache.d.ts","sourceRoot":"","sources":["../../src/cache/CollectionIndexCache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,eAAe,EAAe,MAAM,wBAAwB,CAAC;AAEtE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAG7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAG9E,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkB;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqE;IAC/F,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,YAAY,CAAyC;IAG7D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;gBAGtD,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,sBAAsB;IAmBxC;;OAEG;IACG,QAAQ,CAAC,QAAQ,GAAE,OAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IAiEnE;;OAEG;IACH,OAAO,CAAC,OAAO;IASf;;OAEG;YACW,UAAU;IAiExB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAc9B;;OAEG;YACW,UAAU;IAqBxB;;OAEG;YACW,YAAY;IA8B1B;;OAEG;YACW,cAAc;IAS5B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA0BjC;;OAEG;IACH,aAAa,IAAI;QACf,OAAO,EAAE,OAAO,CAAC;QACjB,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,OAAO,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,GAAG,CAAC;QACjB,kBAAkB,EAAE,GAAG,CAAC;KACzB;IA0BD;;OAEG;IACH,KAAK,IAAI,IAAI;IAUb;;OAEG;YACW,sBAAsB;IAuBpC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAqBhC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAK7B;;OAEG;IACH,OAAO,CAAC,0BAA0B;CAInC"}
@@ -5,6 +5,7 @@ import * as path from 'path';
5
5
  import { logger } from '../utils/logger.js';
6
6
  import { SecurityMonitor } from '../security/securityMonitor.js';
7
7
  import { CacheFactory } from './LRUCache.js';
8
+ import { resolveCollectionCacheDir } from './cachePaths.js';
8
9
  export class CollectionIndexCache {
9
10
  cache = null;
10
11
  TTL = 15 * 60 * 1000; // 15 minutes in milliseconds
@@ -19,7 +20,7 @@ export class CollectionIndexCache {
19
20
  fileOperations;
20
21
  constructor(githubClient, baseDir, performanceMonitor, fileOperations) {
21
22
  this.githubClient = githubClient;
22
- this.cacheDir = path.join(baseDir, '.dollhousemcp', 'cache');
23
+ this.cacheDir = resolveCollectionCacheDir(baseDir);
23
24
  this.cacheFile = path.join(this.cacheDir, 'collection-index-cache.json');
24
25
  this.performanceMonitor = performanceMonitor;
25
26
  this.fileOperations = fileOperations;
@@ -361,4 +362,4 @@ export class CollectionIndexCache {
361
362
  return 5; // Placeholder value
362
363
  }
363
364
  }
364
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvbkluZGV4Q2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2FjaGUvQ29sbGVjdGlvbkluZGV4Q2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUU3QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBWSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJdkQsTUFBTSxPQUFPLG9CQUFvQjtJQUN2QixLQUFLLEdBQXVCLElBQUksQ0FBQztJQUN4QixHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyw2QkFBNkI7SUFDbkQsU0FBUyxHQUFHLGlFQUFpRSxDQUFDO0lBQ3ZGLFFBQVEsQ0FBUztJQUNqQixTQUFTLENBQVM7SUFDbEIsWUFBWSxDQUFlO0lBQzNCLGtCQUFrQixDQUFxQjtJQUN2QyxXQUFXLENBQWdCO0lBQzNCLFlBQVksR0FBb0MsSUFBSSxDQUFDLENBQUMsNkJBQTZCO0lBRTNGLDhDQUE4QztJQUM3QixjQUFjLENBQXlCO0lBRXhELFlBQ0UsWUFBMEIsRUFDMUIsT0FBZSxFQUNmLGtCQUFzQyxFQUN0QyxjQUFzQztRQUV0QyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSw2QkFBNkIsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztRQUM3QyxJ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QUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QyxXQUFXLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlDLFNBQVMsRUFBRSxDQUFDO1NBQ2IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0sscUJBQXFCO1FBQzNCLHlEQUF5RDtRQUN6RCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7T0FFRztJQUNLLDBCQUEwQjtRQUNoQyx1REFBdUQ7UUFDdkQsT0FBTyxDQUFDLENBQUMsQ0FBQyxvQkFBb0I7SUFDaEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTbWFydCBjYWNoZSBmb3IgY29sbGVjdGlvbiBpbmRleCB3aXRoIGNvbmRpdGlvbmFsIGZldGNoaW5nIGFuZCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25cbiAqL1xuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkluZGV4LCBDYWNoZWRJbmRleCB9IGZyb20gJy4uL3R5cGVzL2NvbGxlY3Rpb24uanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IEdpdEh1YkNsaWVudCB9IGZyb20gJy4uL2NvbGxlY3Rpb24vR2l0SHViQ2xpZW50LmpzJztcbmltcG9ydCB7IFNlY3VyaXR5TW9uaXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3NlY3VyaXR5TW9uaXRvci5qcyc7XG5pbXBvcnQgeyBMUlVDYWNoZSwgQ2FjaGVGYWN0b3J5IH0gZnJvbSAnLi9MUlVDYWNoZS5qcyc7XG5pbXBvcnQgeyBQZXJmb3JtYW5jZU1vbml0b3IgfSBmcm9tICcuLi91dGlscy9QZXJmb3JtYW5jZU1vbml0b3IuanMnO1xuaW1wb3J0IHsgSUZpbGVPcGVyYXRpb25zU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL0ZpbGVPcGVyYXRpb25zU2VydmljZS5qcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uSW5kZXhDYWNoZSB7XG4gIHByaXZhdGUgY2FjaGU6IENhY2hlZEluZGV4IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgVFRMID0gMTUgKiA2MCAqIDEwMDA7IC8vIDE1IG1pbnV0ZXMgaW4gbWlsbGlzZWNvbmRzXG4gIHByaXZhdGUgcmVhZG9ubHkgSU5ERVhfVVJMID0gJ2h0dHBzOi8vZG9sbGhvdXNlbWNwLmdpdGh1Yi5pby9jb2xsZWN0aW9uL2NvbGxlY3Rpb24taW5kZXguanNvbic7XG4gIHByaXZhdGUgY2FjaGVEaXI6IHN0cmluZztcbiAgcHJpdmF0ZSBjYWNoZUZpbGU6IHN0cmluZztcbiAgcHJpdmF0ZSBnaXRodWJDbGllbnQ6IEdpdEh1YkNsaWVudDtcbiAgcHJpdmF0ZSBwZXJmb3JtYW5jZU1vbml0b3I6IFBlcmZvcm1hbmNlTW9uaXRvcjtcbiAgcHJpdmF0ZSBtZW1vcnlDYWNoZTogTFJVQ2FjaGU8YW55PjtcbiAgcHJpdmF0ZSBmZXRjaFByb21pc2U6IFByb21pc2U8Q29sbGVjdGlvbkluZGV4PiB8IG51bGwgPSBudWxsOyAvLyBQcmV2ZW50IGNvbmN1cnJlbnQgZmV0Y2hlc1xuXG4gIC8vIEZpbGUgb3BlcmF0aW9ucyBzZXJ2aWNlIGZvciBzZWN1cmUgZmlsZSBJL09cbiAgcHJpdmF0ZSByZWFkb25seSBmaWxlT3BlcmF0aW9uczogSUZpbGVPcGVyYXRpb25zU2VydmljZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBnaXRodWJDbGllbnQ6IEdpdEh1YkNsaWVudCxcbiAgICBiYXNlRGlyOiBzdHJpbmcsXG4gICAgcGVyZm9ybWFuY2VNb25pdG9yOiBQZXJmb3JtYW5jZU1vbml0b3IsXG4gICAgZmlsZU9wZXJhdGlvbnM6IElGaWxlT3BlcmF0aW9uc1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5naXRodWJDbGllbnQgPSBnaXRodWJDbGllbnQ7XG4gICAgdGhpcy5jYWNoZURpciA9IHBhdGguam9pbihiYXNlRGlyLCAnLmRvbGxob3VzZW1jcCcsICdjYWNoZScpO1xuICAgIHRoaXMuY2FjaGVGaWxlID0gcGF0aC5qb2luKHRoaXMuY2FjaGVEaXIsICdjb2xsZWN0aW9uLWluZGV4LWNhY2hlLmpzb24nKTtcbiAgICB0aGlzLnBlcmZvcm1hbmNlTW9uaXRvciA9IHBlcmZvcm1hbmNlTW9uaXRvcjtcbiAgICB0aGlzLmZpbGVPcGVyYXRpb25zID0gZmlsZU9wZXJhdGlvbnM7XG5cbiAgICAvLyBJbml0aWFsaXplIG1lbW9yeSBjYWNoZSBmb3IgZnJlcXVlbnRseSBhY2Nlc3NlZCBkYXRhXG4gICAgdGhpcy5tZW1vcnlDYWNoZSA9IENhY2hlRmFjdG9yeS5jcmVhdGVBUElDYWNoZSh7XG4gICAgICBtYXhTaXplOiA1MCxcbiAgICAgIG1heE1lbW9yeU1COiAxMCxcbiAgICAgIHR0bE1zOiA1ICogNjAgKiAxMDAwLCAvLyA1IG1pbnV0ZXNcbiAgICAgIG9uRXZpY3Rpb246IChrZXksIF92YWx1ZSkgPT4ge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ0NvbGxlY3Rpb24gbWVtb3J5IGNhY2hlIGV2aWN0aW9uJywgeyBrZXkgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgdGhlIGNvbGxlY3Rpb24gaW5kZXggd2l0aCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gYW5kIGxhenkgbG9hZGluZ1xuICAgKi9cbiAgYXN5bmMgZ2V0SW5kZXgobGF6eUxvYWQ6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8Q29sbGVjdGlvbkluZGV4PiB7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBtZW1vcnlCZWZvcmUgPSBwcm9jZXNzLm1lbW9yeVVzYWdlKCkuaGVhcFVzZWQ7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIC8vIENoZWNrIG1lbW9yeSBjYWNoZSBmaXJzdCBmb3IgZmFzdGVzdCBhY2Nlc3NcbiAgICAgIGNvbnN0IG1lbW9yeUNhY2hlZCA9IHRoaXMubWVtb3J5Q2FjaGUuZ2V0KCdjb2xsZWN0aW9uLWluZGV4Jyk7XG4gICAgICBpZiAobWVtb3J5Q2FjaGVkICYmIHRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnVXNpbmcgbWVtb3J5IGNhY2hlZCBjb2xsZWN0aW9uIGluZGV4Jyk7XG4gICAgICAgIHRoaXMucmVjb3JkUGVyZm9ybWFuY2VNZXRyaWNzKHN0YXJ0VGltZSwgbWVtb3J5QmVmb3JlLCAnbWVtb3J5LWhpdCcpO1xuICAgICAgICByZXR1cm4gbWVtb3J5Q2FjaGVkO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIHZhbGlkIGRpc2sgY2FjaGVkIGRhdGFcbiAgICAgIGlmICh0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ1VzaW5nIHZhbGlkIGRpc2sgY2FjaGVkIGNvbGxlY3Rpb24gaW5kZXgnKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jYWNoZSEuZGF0YTtcbiAgICAgICAgdGhpcy5tZW1vcnlDYWNoZS5zZXQoJ2NvbGxlY3Rpb24taW5kZXgnLCByZXN1bHQpO1xuICAgICAgICB0aGlzLnJlY29yZFBlcmZvcm1hbmNlTWV0cmljcyhzdGFydFRpbWUsIG1lbW9yeUJlZm9yZSwgJ2Rpc2staGl0Jyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFByZXZlbnQgY29uY3VycmVudCBmZXRjaGVzXG4gICAgICBpZiAodGhpcy5mZXRjaFByb21pc2UpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdXYWl0aW5nIGZvciBvbmdvaW5nIGNvbGxlY3Rpb24gaW5kZXggZmV0Y2gnKTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZmV0Y2hQcm9taXNlO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBMYXp5IGxvYWRpbmc6IE9ubHkgZmV0Y2ggaWYgbm90IGluIGxhenkgbW9kZSBvciBhYnNvbHV0ZWx5IG5lY2Vzc2FyeVxuICAgICAgaWYgKGxhenlMb2FkICYmIHRoaXMuY2FjaGU/LmRhdGEpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdVc2luZyBzdGFsZSBjYWNoZSBpbiBsYXp5IGxvYWQgbW9kZScpO1xuICAgICAgICB0aGlzLnJlY29yZFBlcmZvcm1hbmNlTWV0cmljcyhzdGFydFRpbWUsIG1lbW9yeUJlZm9yZSwgJ2xhenktc3RhbGUnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGUuZGF0YTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ3JlYXRlIGZldGNoIHByb21pc2UgdG8gcHJldmVudCBjb25jdXJyZW50IHJlcXVlc3RzXG4gICAgICB0aGlzLmZldGNoUHJvbWlzZSA9IHRoaXMuZmV0Y2hGcmVzaFdpdGhGYWxsYmFjaygpO1xuICAgICAgXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmZldGNoUHJvbWlzZTtcbiAgICAgICAgdGhpcy5tZW1vcnlDYWNoZS5zZXQoJ2NvbGxlY3Rpb24taW5kZXgnLCByZXN1bHQpO1xuICAgICAgICB0aGlzLnJlY29yZFBlcmZvcm1hbmNlTWV0cmljcyhzdGFydFRpbWUsIG1lbW9yeUJlZm9yZSwgJ2ZyZXNoLWZldGNoJyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmZldGNoUHJvbWlzZSA9IG51bGw7XG4gICAgICB9XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZ2V0IGNvbGxlY3Rpb24gaW5kZXg6JywgZXJyb3IpO1xuICAgICAgXG4gICAgICAvLyBUcnkgbG9hZGluZyBmcm9tIHBlcnNpc3RlbnQgY2FjaGUgYXMgbGFzdCByZXNvcnRcbiAgICAgIGNvbnN0IHBlcnNpc3RlbnRDYWNoZSA9IGF3YWl0IHRoaXMubG9hZEZyb21EaXNrKCk7XG4gICAgICBpZiAocGVyc2lzdGVudENhY2hlKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnVXNpbmcgcGVyc2lzdGVudCBjYWNoZSBhcyBsYXN0IHJlc29ydCcpO1xuICAgICAgICB0aGlzLmNhY2hlID0gcGVyc2lzdGVudENhY2hlO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwZXJzaXN0ZW50Q2FjaGUuZGF0YTtcbiAgICAgICAgdGhpcy5tZW1vcnlDYWNoZS5zZXQoJ2NvbGxlY3Rpb24taW5kZXgnLCByZXN1bHQpO1xuICAgICAgICB0aGlzLnJlY29yZFBlcmZvcm1hbmNlTWV0cmljcyhzdGFydFRpbWUsIG1lbW9yeUJlZm9yZSwgJ2Rpc2stZmFsbGJhY2snKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgY3VycmVudCBjYWNoZSBpcyB2YWxpZCAod2l0aGluIFRUTClcbiAgICovXG4gIHByaXZhdGUgaXNWYWxpZCgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY2FjaGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgYWdlID0gRGF0ZS5ub3coKSAtIHRoaXMuY2FjaGUuZmV0Y2hlZEF0LmdldFRpbWUoKTtcbiAgICByZXR1cm4gYWdlIDwgdGhpcy5UVEw7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGZXRjaCBmcmVzaCBpbmRleCBmcm9tIEdpdEh1YiB3aXRoIGNvbmRpdGlvbmFsIHJlcXVlc3RzXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGZldGNoRnJlc2goKTogUHJvbWlzZTxDb2xsZWN0aW9uSW5kZXggfCBudWxsPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEJ1aWxkIGhlYWRlcnMgZm9yIGNvbmRpdGlvbmFsIHJlcXVlc3RcbiAgICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICdVc2VyLUFnZW50JzogJ0RvbGxob3VzZU1DUC8xLjAnXG4gICAgICB9O1xuICAgICAgXG4gICAgICAvLyBBZGQgY29uZGl0aW9uYWwgaGVhZGVycyBpZiB3ZSBoYXZlIGNhY2hlXG4gICAgICBpZiAodGhpcy5jYWNoZT8uZXRhZykge1xuICAgICAgICBoZWFkZXJzWydJZi1Ob25lLU1hdGNoJ10gPSB0aGlzLmNhY2hlLmV0YWc7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jYWNoZT8ubGFzdE1vZGlmaWVkKSB7XG4gICAgICAgIGhlYWRlcnNbJ0lmLU1vZGlmaWVkLVNpbmNlJ10gPSB0aGlzLmNhY2hlLmxhc3RNb2RpZmllZDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gVXNlIGZldGNoIGRpcmVjdGx5IGZvciBiZXR0ZXIgY29udHJvbCBvdmVyIGNvbmRpdGlvbmFsIHJlcXVlc3RzXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHRoaXMuSU5ERVhfVVJMLCB7IGhlYWRlcnMgfSk7XG4gICAgICBcbiAgICAgIC8vIDMwNCBOb3QgTW9kaWZpZWQgLSB1c2UgY2FjaGVkIGRhdGFcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDMwNCkge1xuICAgICAgICBpZiAodGhpcy5jYWNoZSkge1xuICAgICAgICAgIC8vIFVwZGF0ZSB0aW1lc3RhbXAgdG8gZXh0ZW5kIGNhY2hlIHZhbGlkaXR5XG4gICAgICAgICAgdGhpcy5jYWNoZS5mZXRjaGVkQXQgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgIGF3YWl0IHRoaXMuc2F2ZVRvRGlzayh0aGlzLmNhY2hlKTtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoJ0NvbGxlY3Rpb24gaW5kZXggbm90IG1vZGlmaWVkIC0gcmVmcmVzaGVkIGNhY2hlIHRpbWVzdGFtcCcpO1xuICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlLmRhdGE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IGluZGV4RGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBDb2xsZWN0aW9uSW5kZXg7XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIHRoZSBpbmRleCBzdHJ1Y3R1cmVcbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZUluZGV4U3RydWN0dXJlKGluZGV4RGF0YSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvbGxlY3Rpb24gaW5kZXggc3RydWN0dXJlIHJlY2VpdmVkJyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENyZWF0ZSBuZXcgY2FjaGUgZW50cnlcbiAgICAgIGNvbnN0IG5ld0NhY2hlOiBDYWNoZWRJbmRleCA9IHtcbiAgICAgICAgZGF0YTogaW5kZXhEYXRhLFxuICAgICAgICBmZXRjaGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIGV0YWc6IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdldGFnJykgfHwgdW5kZWZpbmVkLFxuICAgICAgICBsYXN0TW9kaWZpZWQ6IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdsYXN0LW1vZGlmaWVkJykgfHwgdW5kZWZpbmVkXG4gICAgICB9O1xuICAgICAgXG4gICAgICB0aGlzLmNhY2hlID0gbmV3Q2FjaGU7XG4gICAgICBcbiAgICAgIC8vIFNhdmUgdG8gcGVyc2lzdGVudCBjYWNoZSBpbiBiYWNrZ3JvdW5kXG4gICAgICB0aGlzLnNhdmVUb0Rpc2sobmV3Q2FjaGUpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdGYWlsZWQgdG8gc2F2ZSBpbmRleCBjYWNoZSB0byBkaXNrOicsIGVycm9yKTtcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBsb2dnZXIuZGVidWcoYEZyZXNoIGNvbGxlY3Rpb24gaW5kZXggZmV0Y2hlZCB3aXRoICR7aW5kZXhEYXRhLnRvdGFsX2VsZW1lbnRzfSBlbGVtZW50c2ApO1xuICAgICAgcmV0dXJuIGluZGV4RGF0YTtcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ0ZhaWxlZCB0byBmZXRjaCBmcmVzaCBjb2xsZWN0aW9uIGluZGV4OicsIGVycm9yKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoZSBzdHJ1Y3R1cmUgb2YgYSBjb2xsZWN0aW9uIGluZGV4XG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlSW5kZXhTdHJ1Y3R1cmUoaW5kZXg6IGFueSk6IGluZGV4IGlzIENvbGxlY3Rpb25JbmRleCB7XG4gICAgcmV0dXJuIChcbiAgICAgIGluZGV4ICYmXG4gICAgICB0eXBlb2YgaW5kZXggPT09ICdvYmplY3QnICYmXG4gICAgICB0eXBlb2YgaW5kZXgudmVyc2lvbiA9PT0gJ3N0cmluZycgJiZcbiAgICAgIHR5cGVvZiBpbmRleC5nZW5lcmF0ZWQgPT09ICdzdHJpbmcnICYmXG4gICAgICB0eXBlb2YgaW5kZXgudG90YWxfZWxlbWVudHMgPT09ICdudW1iZXInICYmXG4gICAgICBpbmRleC5pbmRleCAmJlxuICAgICAgdHlwZW9mIGluZGV4LmluZGV4ID09PSAnb2JqZWN0JyAmJlxuICAgICAgaW5kZXgubWV0YWRhdGEgJiZcbiAgICAgIHR5cGVvZiBpbmRleC5tZXRhZGF0YSA9PT0gJ29iamVjdCdcbiAgICApO1xuICB9XG4gIFxuICAvKipcbiAgICogU2F2ZSBjYWNoZSB0byBwZXJzaXN0ZW50IHN0b3JhZ2VcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2F2ZVRvRGlzayhjYWNoZTogQ2FjaGVkSW5kZXgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5lbnN1cmVDYWNoZURpcigpO1xuXG4gICAgICBjb25zdCBjYWNoZURhdGEgPSB7XG4gICAgICAgIC4uLmNhY2hlLFxuICAgICAgICBmZXRjaGVkQXQ6IGNhY2hlLmZldGNoZWRBdC50b0lTT1N0cmluZygpIC8vIFNlcmlhbGl6ZSBkYXRlXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBkYXRhID0gSlNPTi5zdHJpbmdpZnkoY2FjaGVEYXRhLCBudWxsLCAyKTtcbiAgICAgIGF3YWl0IHRoaXMuZmlsZU9wZXJhdGlvbnMud3JpdGVGaWxlKHRoaXMuY2FjaGVGaWxlLCBkYXRhLCB7XG4gICAgICAgIHNvdXJjZTogJ0NvbGxlY3Rpb25JbmRleENhY2hlLnNhdmVUb0Rpc2snXG4gICAgICB9KTtcblxuICAgICAgbG9nZ2VyLmRlYnVnKCdDb2xsZWN0aW9uIGluZGV4IGNhY2hlIHNhdmVkIHRvIGRpc2snKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdGYWlsZWQgdG8gc2F2ZSBjb2xsZWN0aW9uIGluZGV4IGNhY2hlOicsIGVycm9yKTtcbiAgICAgIC8vIERvbid0IHRocm93IC0gY2FjaGUgcGVyc2lzdGVuY2UgZmFpbHVyZXMgc2hvdWxkbid0IGJyZWFrIGZ1bmN0aW9uYWxpdHlcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBMb2FkIGNhY2hlIGZyb20gcGVyc2lzdGVudCBzdG9yYWdlXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGxvYWRGcm9tRGlzaygpOiBQcm9taXNlPENhY2hlZEluZGV4IHwgbnVsbD4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBCYXNpYyBzZWN1cml0eSBjaGVjayBmb3IgcGF0aCB0cmF2ZXJzYWxcbiAgICAgIGlmICh0aGlzLmNhY2hlRmlsZS5pbmNsdWRlcygnLi4nKSB8fCB0aGlzLmNhY2hlRmlsZS5pbmNsdWRlcygnXFwwJykpIHtcbiAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgIHR5cGU6ICdQQVRIX1RSQVZFUlNBTF9BVFRFTVBUJyxcbiAgICAgICAgICBzZXZlcml0eTogJ0hJR0gnLFxuICAgICAgICAgIHNvdXJjZTogJ0NvbGxlY3Rpb25JbmRleENhY2hlLmxvYWRGcm9tRGlzaycsXG4gICAgICAgICAgZGV0YWlsczogYFBvdGVudGlhbCBwYXRoIHRyYXZlcnNhbCBhdHRlbXB0IGRldGVjdGVkOiAke3RoaXMuY2FjaGVGaWxlLnN1YnN0cmluZygwLCAxMDApfWBcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5maWxlT3BlcmF0aW9ucy5yZWFkRmlsZSh0aGlzLmNhY2hlRmlsZSwge1xuICAgICAgICBzb3VyY2U6ICdDb2xsZWN0aW9uSW5kZXhDYWNoZS5sb2FkRnJvbURpc2snXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNhY2hlRGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmNhY2hlRGF0YSxcbiAgICAgICAgZmV0Y2hlZEF0OiBuZXcgRGF0ZShjYWNoZURhdGEuZmV0Y2hlZEF0KSAvLyBEZXNlcmlhbGl6ZSBkYXRlXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoKGVycm9yIGFzIGFueSkuY29kZSAhPT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdGYWlsZWQgdG8gbG9hZCBjb2xsZWN0aW9uIGluZGV4IGNhY2hlIGZyb20gZGlzazonLCBlcnJvcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBFbnN1cmUgY2FjaGUgZGlyZWN0b3J5IGV4aXN0c1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVDYWNoZURpcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5maWxlT3BlcmF0aW9ucy5jcmVhdGVEaXJlY3RvcnkodGhpcy5jYWNoZURpcik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGNyZWF0ZSBjYWNoZSBkaXJlY3Rvcnk6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogQ2xlYXIgYWxsIGNhY2hlIGRhdGEgd2l0aCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nXG4gICAqL1xuICBhc3luYyBjbGVhckNhY2hlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLmNhY2hlID0gbnVsbDtcbiAgICB0aGlzLm1lbW9yeUNhY2hlLmNsZWFyKCk7XG5cbiAgICAvLyBDYW5jZWwgYW55IG9uZ29pbmcgZmV0Y2hcbiAgICB0aGlzLmZldGNoUHJvbWlzZSA9IG51bGw7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5maWxlT3BlcmF0aW9ucy5kZWxldGVGaWxlKHRoaXMuY2FjaGVGaWxlLCB1bmRlZmluZWQsIHtcbiAgICAgICAgc291cmNlOiAnQ29sbGVjdGlvbkluZGV4Q2FjaGUuY2xlYXJDYWNoZSdcbiAgICAgIH0pO1xuICAgICAgbG9nZ2VyLmRlYnVnKCdDb2xsZWN0aW9uIGluZGV4IGNhY2hlIGNsZWFyZWQgZnJvbSBkaXNrJyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICgoZXJyb3IgYXMgYW55KS5jb2RlICE9PSAnRU5PRU5UJykge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ0ZhaWxlZCB0byBjbGVhciBjb2xsZWN0aW9uIGluZGV4IGNhY2hlOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoJ0NvbGxlY3Rpb24gY2FjaGUgY2xlYXJlZCcsIHtcbiAgICAgIGR1cmF0aW9uOiBEYXRlLm5vdygpIC0gc3RhcnRUaW1lLFxuICAgICAgbWVtb3J5RnJlZWQ6IHRoaXMubWVtb3J5Q2FjaGUuZ2V0TWVtb3J5VXNhZ2VNQigpXG4gICAgfSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgY29tcHJlaGVuc2l2ZSBjYWNoZSBzdGF0aXN0aWNzIGZvciBkZWJ1Z2dpbmcgYW5kIG1vbml0b3JpbmdcbiAgICovXG4gIGdldENhY2hlU3RhdHMoKTogeyBcbiAgICBpc1ZhbGlkOiBib29sZWFuOyBcbiAgICBhZ2U6IG51bWJlcjsgXG4gICAgaGFzQ2FjaGU6IGJvb2xlYW47IFxuICAgIGVsZW1lbnRzOiBudW1iZXI7XG4gICAgbWVtb3J5Q2FjaGU6IGFueTtcbiAgICBwZXJmb3JtYW5jZU1ldHJpY3M6IGFueTtcbiAgfSB7XG4gICAgaWYgKCF0aGlzLmNhY2hlKSB7XG4gICAgICByZXR1cm4geyBcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsIFxuICAgICAgICBhZ2U6IDAsIFxuICAgICAgICBoYXNDYWNoZTogZmFsc2UsIFxuICAgICAgICBlbGVtZW50czogMCxcbiAgICAgICAgbWVtb3J5Q2FjaGU6IHRoaXMubWVtb3J5Q2FjaGUuZ2V0U3RhdHMoKSxcbiAgICAgICAgcGVyZm9ybWFuY2VNZXRyaWNzOiBudWxsXG4gICAgICB9O1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBhZ2UgPSBEYXRlLm5vdygpIC0gdGhpcy5jYWNoZS5mZXRjaGVkQXQuZ2V0VGltZSgpO1xuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOiB0aGlzLmlzVmFsaWQoKSxcbiAgICAgIGFnZSxcbiAgICAgIGhhc0NhY2hlOiB0cnVlLFxuICAgICAgZWxlbWVudHM6IHRoaXMuY2FjaGUuZGF0YS50b3RhbF9lbGVtZW50cyxcbiAgICAgIG1lbW9yeUNhY2hlOiB0aGlzLm1lbW9yeUNhY2hlLmdldFN0YXRzKCksXG4gICAgICBwZXJmb3JtYW5jZU1ldHJpY3M6IHtcbiAgICAgICAgY2FjaGVIaXRSYXRlOiB0aGlzLmNhbGN1bGF0ZUNhY2hlSGl0UmF0ZSgpLFxuICAgICAgICBhdmVyYWdlQWNjZXNzVGltZTogdGhpcy5jYWxjdWxhdGVBdmVyYWdlQWNjZXNzVGltZSgpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBpbi1tZW1vcnkgY2FjaGUgc3RhdGUgd2l0aG91dCB0b3VjaGluZyBkaXNrLlxuICAgKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5jYWNoZSA9IG51bGw7XG4gICAgdGhpcy5tZW1vcnlDYWNoZS5jbGVhcigpO1xuICAgIHRoaXMuZmV0Y2hQcm9taXNlID0gbnVsbDtcbiAgfVxuICBcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUFJJVkFURSBIRUxQRVIgTUVUSE9EUyBGT1IgUEVSRk9STUFOQ0VcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgXG4gIC8qKlxuICAgKiBGZXRjaCBmcmVzaCBpbmRleCB3aXRoIGNvbXByZWhlbnNpdmUgZmFsbGJhY2sgc3RyYXRlZ3lcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hGcmVzaFdpdGhGYWxsYmFjaygpOiBQcm9taXNlPENvbGxlY3Rpb25JbmRleD4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBUcnkgdG8gZmV0Y2ggZnJlc2ggaW5kZXhcbiAgICAgIGNvbnN0IGZyZXNoSW5kZXggPSBhd2FpdCB0aGlzLmZldGNoRnJlc2goKTtcbiAgICAgIGlmIChmcmVzaEluZGV4KSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnQ29sbGVjdGlvbiBpbmRleCBmZXRjaGVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgICByZXR1cm4gZnJlc2hJbmRleDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ0ZyZXNoIGZldGNoIGZhaWxlZCwgdHJ5aW5nIGZhbGxiYWNrJywge1xuICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgLy8gRmFsbCBiYWNrIHRvIHN0YWxlIGNhY2hlIGlmIGF2YWlsYWJsZVxuICAgIGlmICh0aGlzLmNhY2hlPy5kYXRhKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ1VzaW5nIHN0YWxlIGNhY2hlZCBjb2xsZWN0aW9uIGluZGV4IGFzIGZhbGxiYWNrJyk7XG4gICAgICByZXR1cm4gdGhpcy5jYWNoZS5kYXRhO1xuICAgIH1cbiAgICBcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGNvbGxlY3Rpb24gaW5kZXggYXZhaWxhYmxlIC0gZnJlc2ggZmV0Y2ggZmFpbGVkIGFuZCBubyBjYWNoZSBleGlzdHMnKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFJlY29yZCBwZXJmb3JtYW5jZSBtZXRyaWNzIGZvciBjYWNoZSBvcGVyYXRpb25zXG4gICAqL1xuICBwcml2YXRlIHJlY29yZFBlcmZvcm1hbmNlTWV0cmljcyhzdGFydFRpbWU6IG51bWJlciwgbWVtb3J5QmVmb3JlOiBudW1iZXIsIG9wZXJhdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgIGNvbnN0IG1lbW9yeUFmdGVyID0gcHJvY2Vzcy5tZW1vcnlVc2FnZSgpLmhlYXBVc2VkO1xuICAgIFxuICAgIGxvZ2dlci5kZWJ1ZygnQ29sbGVjdGlvbiBjYWNoZSBvcGVyYXRpb24gY29tcGxldGVkJywge1xuICAgICAgb3BlcmF0aW9uLFxuICAgICAgZHVyYXRpb24sXG4gICAgICBtZW1vcnlVc2FnZU1COiAobWVtb3J5QWZ0ZXIgLSBtZW1vcnlCZWZvcmUpIC8gKDEwMjQgKiAxMDI0KVxuICAgIH0pO1xuICAgIFxuICAgIC8vIFJlY29yZCBjYWNoZSBwZXJmb3JtYW5jZSBtZXRyaWNzXG4gICAgdGhpcy5wZXJmb3JtYW5jZU1vbml0b3IucmVjb3JkQ2FjaGVQZXJmb3JtYW5jZSgnY29sbGVjdGlvbkluZGV4Jywge1xuICAgICAgaGl0UmF0ZTogb3BlcmF0aW9uLmluY2x1ZGVzKCdoaXQnKSA/IDEgOiAwLFxuICAgICAgYXZnSGl0VGltZTogb3BlcmF0aW9uLmluY2x1ZGVzKCdoaXQnKSA/IGR1cmF0aW9uIDogMCxcbiAgICAgIGF2Z01pc3NUaW1lOiBvcGVyYXRpb24uaW5jbHVkZXMoJ2hpdCcpID8gMCA6IGR1cmF0aW9uLFxuICAgICAgdG90YWxIaXRzOiBvcGVyYXRpb24uaW5jbHVkZXMoJ2hpdCcpID8gMSA6IDAsXG4gICAgICB0b3RhbE1pc3Nlczogb3BlcmF0aW9uLmluY2x1ZGVzKCdoaXQnKSA/IDAgOiAxLFxuICAgICAgZXZpY3Rpb25zOiAwXG4gICAgfSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgY2FjaGUgaGl0IHJhdGUgKHBsYWNlaG9sZGVyIGZvciBmdXR1cmUgaW1wbGVtZW50YXRpb24pXG4gICAqL1xuICBwcml2YXRlIGNhbGN1bGF0ZUNhY2hlSGl0UmF0ZSgpOiBudW1iZXIge1xuICAgIC8vIFRoaXMgd291bGQgYmUgaW1wbGVtZW50ZWQgd2l0aCBhY3R1YWwgbWV0cmljcyB0cmFja2luZ1xuICAgIHJldHVybiB0aGlzLm1lbW9yeUNhY2hlLmdldFN0YXRzKCkuaGl0UmF0ZTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBhdmVyYWdlIGFjY2VzcyB0aW1lIChwbGFjZWhvbGRlciBmb3IgZnV0dXJlIGltcGxlbWVudGF0aW9uKVxuICAgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVBdmVyYWdlQWNjZXNzVGltZSgpOiBudW1iZXIge1xuICAgIC8vIFRoaXMgd291bGQgYmUgaW1wbGVtZW50ZWQgd2l0aCBhY3R1YWwgdGltaW5nIG1ldHJpY3NcbiAgICByZXR1cm4gNTsgLy8gUGxhY2Vob2xkZXIgdmFsdWVcbiAgfVxufVxuIl19
365
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvbkluZGV4Q2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2FjaGUvQ29sbGVjdGlvbkluZGV4Q2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUU3QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBWSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHdkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFNUQsTUFBTSxPQUFPLG9CQUFvQjtJQUN2QixLQUFLLEdBQXVCLElBQUksQ0FBQztJQUN4QixHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyw2QkFBNkI7SUFDbkQsU0FBUyxHQUFHLGlFQUFpRSxDQUFDO0lBQ3ZGLFFBQVEsQ0FBUztJQUNqQixTQUFTLENBQVM7SUFDbEIsWUFBWSxDQUFlO0lBQzNCLGtCQUFrQixDQUFxQjtJQUN2QyxXQUFXLENBQWdCO0lBQzNCLFlBQVksR0FBb0MsSUFBSSxDQUFDLENBQUMsNkJBQTZCO0lBRTNGLDhDQUE4QztJQUM3QixjQUFjLENBQXlCO0lBRXhELFlBQ0UsWUFBMEIsRUFDMUIsT0FBMkIsRUFDM0Isa0JBQXNDLEVBQ3RDLGNBQXNDO1FBRXRDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcseUJBQXlCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsNkJBQTZCLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7UUFDN0MsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7UUFFckMsdURBQXVEO1FBQ3ZELElBQUksQ0FBQyxXQUFXLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQztZQUM3QyxPQUFPLEVBQUUsRUFBRTtZQUNYLFdBQVcsRUFBRSxFQUFFO1lBQ2YsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLFlBQVk7WUFDbEMsVUFBVSxFQUFFLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUMxQixNQUFNLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUM1RCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFvQixLQUFLO1FBQ3RDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM3QixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDO1FBRXBELElBQUksQ0FBQztZQUNILDhDQUE4QztZQUM5QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzlELElBQUksWUFBWSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO2dCQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7Z0JBQ3JELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUNyRSxPQUFPLFlBQVksQ0FBQztZQUN0QixDQUFDO1lBRUQsMENBQTBDO1lBQzFDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7Z0JBQ25CLE1BQU0sQ0FBQyxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQztnQkFDekQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDbkUsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQztZQUVELDZCQUE2QjtZQUM3QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO2dCQUMzRCxPQUFPLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQztZQUNqQyxDQUFDO1lBRUQsdUVBQXVFO1lBQ3ZFLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7Z0JBQ2pDLE1BQU0sQ0FBQyxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQ3JFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDekIsQ0FBQztZQUVELHNEQUFzRDtZQUN0RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBRWxELElBQUksQ0FBQztnQkFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQztnQkFDdEUsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQztvQkFBUyxDQUFDO2dCQUNULElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQzNCLENBQUM7UUFFSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsaUNBQWlDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFdkQsbURBQW1EO1lBQ25ELE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xELElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sQ0FBQyxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztnQkFDdEQsSUFBSSxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUM7Z0JBQzdCLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQztnQkFDeEUsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQztZQUVELE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLE9BQU87UUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN4RCxPQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7T0FFRztJQUNLLEtBQUssQ0FBQyxVQUFVO1FBQ3RCLElBQUksQ0FBQztZQUNILHdDQUF3QztZQUN4QyxNQUFNLE9BQU8sR0FBMkI7Z0JBQ3RDLFFBQVEsRUFBRSxrQkFBa0I7Z0JBQzVCLFlBQVksRUFBRSxrQkFBa0I7YUFDakMsQ0FBQztZQUVGLDJDQUEyQztZQUMzQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7Z0JBQ3JCLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztZQUM3QyxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxDQUFDO2dCQUM3QixPQUFPLENBQUMsbUJBQW1CLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztZQUN6RCxDQUFDO1lBRUQsa0VBQWtFO1lBQ2xFLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBRTFELHFDQUFxQztZQUNyQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQzVCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNmLDRDQUE0QztvQkFDNUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDbEMsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDbEMsTUFBTSxDQUFDLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO29CQUMxRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO2dCQUN6QixDQUFDO1lBQ0gsQ0FBQztZQUVELElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxRQUFRLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQ3JFLENBQUM7WUFFRCxNQUFNLFNBQVMsR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQXFCLENBQUM7WUFFM0QsK0JBQStCO1lBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1lBQ2pFLENBQUM7WUFFRCx5QkFBeUI7WUFDekIsTUFBTSxRQUFRLEdBQWdCO2dCQUM1QixJQUFJLEVBQUUsU0FBUztnQkFDZixTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUU7Z0JBQ3JCLElBQUksRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxTQUFTO2dCQUMvQyxZQUFZLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksU0FBUzthQUNqRSxDQUFDO1lBRUYsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7WUFFdEIseUNBQXlDO1lBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN0QyxNQUFNLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzdELENBQUMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLEtBQUssQ0FBQyx1Q0FBdUMsU0FBUyxDQUFDLGNBQWMsV0FBVyxDQUFDLENBQUM7WUFDekYsT0FBTyxTQUFTLENBQUM7UUFFbkIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLENBQUMsS0FBSyxDQUFDLHlDQUF5QyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQy9ELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLHNCQUFzQixDQUFDLEtBQVU7UUFDdkMsT0FBTyxDQUNMLEtBQUs7WUFDTCxPQUFPLEtBQUssS0FBSyxRQUFRO1lBQ3pCLE9BQU8sS0FBSyxDQUFDLE9BQU8sS0FBSyxRQUFRO1lBQ2pDLE9BQU8sS0FBSyxDQUFDLFNBQVMsS0FBSyxRQUFRO1lBQ25DLE9BQU8sS0FBSyxDQUFDLGNBQWMsS0FBSyxRQUFRO1lBQ3hDLEtBQUssQ0FBQyxLQUFLO1lBQ1gsT0FBTyxLQUFLLENBQUMsS0FBSyxLQUFLLFFBQVE7WUFDL0IsS0FBSyxDQUFDLFFBQVE7WUFDZCxPQUFPLEtBQUssQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUNuQyxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFrQjtRQUN6QyxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUU1QixNQUFNLFNBQVMsR0FBRztnQkFDaEIsR0FBRyxLQUFLO2dCQUNSLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLGlCQUFpQjthQUMzRCxDQUFDO1lBRUYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2hELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUU7Z0JBQ3hELE1BQU0sRUFBRSxpQ0FBaUM7YUFDMUMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQyx3Q0FBd0MsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM5RCx5RUFBeUU7UUFDM0UsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLEtBQUssQ0FBQyxZQUFZO1FBQ3hCLElBQUksQ0FBQztZQUNILDBDQUEwQztZQUMxQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ25FLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDL0IsSUFBSSxFQUFFLHdCQUF3QjtvQkFDOUIsUUFBUSxFQUFFLE1BQU07b0JBQ2hCLE1BQU0sRUFBRSxtQ0FBbUM7b0JBQzNDLE9BQU8sRUFBRSw4Q0FBOEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2lCQUMxRixDQUFDLENBQUM7Z0JBQ0gsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUM5RCxNQUFNLEVBQUUsbUNBQW1DO2FBQzVDLENBQUMsQ0FBQztZQUNILE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFbkMsT0FBTztnQkFDTCxHQUFHLFNBQVM7Z0JBQ1osU0FBUyxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxtQkFBbUI7YUFDN0QsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSyxLQUFhLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNyQyxNQUFNLENBQUMsS0FBSyxDQUFDLGtEQUFrRCxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzFFLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxLQUFLLENBQUMsY0FBYztRQUMxQixJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDekQsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFVBQVU7UUFDZCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFN0IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUV6QiwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFFekIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRTtnQkFDOUQsTUFBTSxFQUFFLGlDQUFpQzthQUMxQyxDQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFLLEtBQWEsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3JDLE1BQU0sQ0FBQyxLQUFLLENBQUMseUNBQXlDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDakUsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLDBCQUEwQixFQUFFO1lBQ3ZDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUztZQUNoQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRTtTQUNqRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhO1FBUVgsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQixPQUFPO2dCQUNMLE9BQU8sRUFBRSxLQUFLO2dCQUNkLEdBQUcsRUFBRSxDQUFDO2dCQUNOLFFBQVEsRUFBRSxLQUFLO2dCQUNmLFFBQVEsRUFBRSxDQUFDO2dCQUNYLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRTtnQkFDeEMsa0JBQWtCLEVBQUUsSUFBSTthQUN6QixDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN4RCxPQUFPO1lBQ0wsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDdkIsR0FBRztZQUNILFFBQVEsRUFBRSxJQUFJO1lBQ2QsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWM7WUFDeEMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFO1lBQ3hDLGtCQUFrQixFQUFFO2dCQUNsQixZQUFZLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixFQUFFO2dCQUMxQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsMEJBQTBCLEVBQUU7YUFDckQ7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNILElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7SUFDM0IsQ0FBQztJQUVELHdEQUF3RDtJQUN4RCx5Q0FBeUM7SUFDekMsd0RBQXdEO0lBRXhEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLHNCQUFzQjtRQUNsQyxJQUFJLENBQUM7WUFDSCwyQkFBMkI7WUFDM0IsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDM0MsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDZixNQUFNLENBQUMsS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7Z0JBQ3RELE9BQU8sVUFBVSxDQUFDO1lBQ3BCLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMscUNBQXFDLEVBQUU7Z0JBQ2pELEtBQUssRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2FBQzlELENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCx3Q0FBd0M7UUFDeEMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ3JCLE1BQU0sQ0FBQyxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztZQUNoRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3pCLENBQUM7UUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLHdFQUF3RSxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUVEOztPQUVHO0lBQ0ssd0JBQXdCLENBQUMsU0FBaUIsRUFBRSxZQUFvQixFQUFFLFNBQWlCO1FBQ3pGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUM7UUFDeEMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQztRQUVuRCxNQUFNLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxFQUFFO1lBQ25ELFNBQVM7WUFDVCxRQUFRO1lBQ1IsYUFBYSxFQUFFLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztTQUM1RCxDQUFDLENBQUM7UUFFSCxtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHNCQUFzQixDQUFDLGlCQUFpQixFQUFFO1lBQ2hFLE9BQU8sRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwRCxXQUFXLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRO1lBQ3JELFNBQVMsRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QyxTQUFTLEVBQUUsQ0FBQztTQUNiLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNLLHFCQUFxQjtRQUMzQix5REFBeUQ7UUFDekQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQztJQUM3QyxDQUFDO0lBRUQ7O09BRUc7SUFDSywwQkFBMEI7UUFDaEMsdURBQXVEO1FBQ3ZELE9BQU8sQ0FBQyxDQUFDLENBQUMsb0JBQW9CO0lBQ2hDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU21hcnQgY2FjaGUgZm9yIGNvbGxlY3Rpb24gaW5kZXggd2l0aCBjb25kaXRpb25hbCBmZXRjaGluZyBhbmQgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uXG4gKi9cblxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IENvbGxlY3Rpb25JbmRleCwgQ2FjaGVkSW5kZXggfSBmcm9tICcuLi90eXBlcy9jb2xsZWN0aW9uLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBHaXRIdWJDbGllbnQgfSBmcm9tICcuLi9jb2xsZWN0aW9uL0dpdEh1YkNsaWVudC5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHsgTFJVQ2FjaGUsIENhY2hlRmFjdG9yeSB9IGZyb20gJy4vTFJVQ2FjaGUuanMnO1xuaW1wb3J0IHsgUGVyZm9ybWFuY2VNb25pdG9yIH0gZnJvbSAnLi4vdXRpbHMvUGVyZm9ybWFuY2VNb25pdG9yLmpzJztcbmltcG9ydCB7IElGaWxlT3BlcmF0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9GaWxlT3BlcmF0aW9uc1NlcnZpY2UuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZUNvbGxlY3Rpb25DYWNoZURpciB9IGZyb20gJy4vY2FjaGVQYXRocy5qcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uSW5kZXhDYWNoZSB7XG4gIHByaXZhdGUgY2FjaGU6IENhY2hlZEluZGV4IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgVFRMID0gMTUgKiA2MCAqIDEwMDA7IC8vIDE1IG1pbnV0ZXMgaW4gbWlsbGlzZWNvbmRzXG4gIHByaXZhdGUgcmVhZG9ubHkgSU5ERVhfVVJMID0gJ2h0dHBzOi8vZG9sbGhvdXNlbWNwLmdpdGh1Yi5pby9jb2xsZWN0aW9uL2NvbGxlY3Rpb24taW5kZXguanNvbic7XG4gIHByaXZhdGUgY2FjaGVEaXI6IHN0cmluZztcbiAgcHJpdmF0ZSBjYWNoZUZpbGU6IHN0cmluZztcbiAgcHJpdmF0ZSBnaXRodWJDbGllbnQ6IEdpdEh1YkNsaWVudDtcbiAgcHJpdmF0ZSBwZXJmb3JtYW5jZU1vbml0b3I6IFBlcmZvcm1hbmNlTW9uaXRvcjtcbiAgcHJpdmF0ZSBtZW1vcnlDYWNoZTogTFJVQ2FjaGU8YW55PjtcbiAgcHJpdmF0ZSBmZXRjaFByb21pc2U6IFByb21pc2U8Q29sbGVjdGlvbkluZGV4PiB8IG51bGwgPSBudWxsOyAvLyBQcmV2ZW50IGNvbmN1cnJlbnQgZmV0Y2hlc1xuXG4gIC8vIEZpbGUgb3BlcmF0aW9ucyBzZXJ2aWNlIGZvciBzZWN1cmUgZmlsZSBJL09cbiAgcHJpdmF0ZSByZWFkb25seSBmaWxlT3BlcmF0aW9uczogSUZpbGVPcGVyYXRpb25zU2VydmljZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBnaXRodWJDbGllbnQ6IEdpdEh1YkNsaWVudCxcbiAgICBiYXNlRGlyOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgcGVyZm9ybWFuY2VNb25pdG9yOiBQZXJmb3JtYW5jZU1vbml0b3IsXG4gICAgZmlsZU9wZXJhdGlvbnM6IElGaWxlT3BlcmF0aW9uc1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5naXRodWJDbGllbnQgPSBnaXRodWJDbGllbnQ7XG4gICAgdGhpcy5jYWNoZURpciA9IHJlc29sdmVDb2xsZWN0aW9uQ2FjaGVEaXIoYmFzZURpcik7XG4gICAgdGhpcy5jYWNoZUZpbGUgPSBwYXRoLmpvaW4odGhpcy5jYWNoZURpciwgJ2NvbGxlY3Rpb24taW5kZXgtY2FjaGUuanNvbicpO1xuICAgIHRoaXMucGVyZm9ybWFuY2VNb25pdG9yID0gcGVyZm9ybWFuY2VNb25pdG9yO1xuICAgIHRoaXMuZmlsZU9wZXJhdGlvbnMgPSBmaWxlT3BlcmF0aW9ucztcblxuICAgIC8vIEluaXRpYWxpemUgbWVtb3J5IGNhY2hlIGZvciBmcmVxdWVudGx5IGFjY2Vzc2VkIGRhdGFcbiAgICB0aGlzLm1lbW9yeUNhY2hlID0gQ2FjaGVGYWN0b3J5LmNyZWF0ZUFQSUNhY2hlKHtcbiAgICAgIG1heFNpemU6IDUwLFxuICAgICAgbWF4TWVtb3J5TUI6IDEwLFxuICAgICAgdHRsTXM6IDUgKiA2MCAqIDEwMDAsIC8vIDUgbWludXRlc1xuICAgICAgb25FdmljdGlvbjogKGtleSwgX3ZhbHVlKSA9PiB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnQ29sbGVjdGlvbiBtZW1vcnkgY2FjaGUgZXZpY3Rpb24nLCB7IGtleSB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCB0aGUgY29sbGVjdGlvbiBpbmRleCB3aXRoIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBhbmQgbGF6eSBsb2FkaW5nXG4gICAqL1xuICBhc3luYyBnZXRJbmRleChsYXp5TG9hZDogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxDb2xsZWN0aW9uSW5kZXg+IHtcbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG1lbW9yeUJlZm9yZSA9IHByb2Nlc3MubWVtb3J5VXNhZ2UoKS5oZWFwVXNlZDtcbiAgICBcbiAgICB0cnkge1xuICAgICAgLy8gQ2hlY2sgbWVtb3J5IGNhY2hlIGZpcnN0IGZvciBmYXN0ZXN0IGFjY2Vzc1xuICAgICAgY29uc3QgbWVtb3J5Q2FjaGVkID0gdGhpcy5tZW1vcnlDYWNoZS5nZXQoJ2NvbGxlY3Rpb24taW5kZXgnKTtcbiAgICAgIGlmIChtZW1vcnlDYWNoZWQgJiYgdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdVc2luZyBtZW1vcnkgY2FjaGVkIGNvbGxlY3Rpb24gaW5kZXgnKTtcbiAgICAgICAgdGhpcy5yZWNvcmRQZXJmb3JtYW5jZU1ldHJpY3Moc3RhcnRUaW1lLCBtZW1vcnlCZWZvcmUsICdtZW1vcnktaGl0Jyk7XG4gICAgICAgIHJldHVybiBtZW1vcnlDYWNoZWQ7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgdmFsaWQgZGlzayBjYWNoZWQgZGF0YVxuICAgICAgaWYgKHRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnVXNpbmcgdmFsaWQgZGlzayBjYWNoZWQgY29sbGVjdGlvbiBpbmRleCcpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNhY2hlIS5kYXRhO1xuICAgICAgICB0aGlzLm1lbW9yeUNhY2hlLnNldCgnY29sbGVjdGlvbi1pbmRleCcsIHJlc3VsdCk7XG4gICAgICAgIHRoaXMucmVjb3JkUGVyZm9ybWFuY2VNZXRyaWNzKHN0YXJ0VGltZSwgbWVtb3J5QmVmb3JlLCAnZGlzay1oaXQnKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gUHJldmVudCBjb25jdXJyZW50IGZldGNoZXNcbiAgICAgIGlmICh0aGlzLmZldGNoUHJvbWlzZSkge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ1dhaXRpbmcgZm9yIG9uZ29pbmcgY29sbGVjdGlvbiBpbmRleCBmZXRjaCcpO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5mZXRjaFByb21pc2U7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIExhenkgbG9hZGluZzogT25seSBmZXRjaCBpZiBub3QgaW4gbGF6eSBtb2RlIG9yIGFic29sdXRlbHkgbmVjZXNzYXJ5XG4gICAgICBpZiAobGF6eUxvYWQgJiYgdGhpcy5jYWNoZT8uZGF0YSkge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ1VzaW5nIHN0YWxlIGNhY2hlIGluIGxhenkgbG9hZCBtb2RlJyk7XG4gICAgICAgIHRoaXMucmVjb3JkUGVyZm9ybWFuY2VNZXRyaWNzKHN0YXJ0VGltZSwgbWVtb3J5QmVmb3JlLCAnbGF6eS1zdGFsZScpO1xuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZS5kYXRhO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDcmVhdGUgZmV0Y2ggcHJvbWlzZSB0byBwcmV2ZW50IGNvbmN1cnJlbnQgcmVxdWVzdHNcbiAgICAgIHRoaXMuZmV0Y2hQcm9taXNlID0gdGhpcy5mZXRjaEZyZXNoV2l0aEZhbGxiYWNrKCk7XG4gICAgICBcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZmV0Y2hQcm9taXNlO1xuICAgICAgICB0aGlzLm1lbW9yeUNhY2hlLnNldCgnY29sbGVjdGlvbi1pbmRleCcsIHJlc3VsdCk7XG4gICAgICAgIHRoaXMucmVjb3JkUGVyZm9ybWFuY2VNZXRyaWNzKHN0YXJ0VGltZSwgbWVtb3J5QmVmb3JlLCAnZnJlc2gtZmV0Y2gnKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZmV0Y2hQcm9taXNlID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBnZXQgY29sbGVjdGlvbiBpbmRleDonLCBlcnJvcik7XG4gICAgICBcbiAgICAgIC8vIFRyeSBsb2FkaW5nIGZyb20gcGVyc2lzdGVudCBjYWNoZSBhcyBsYXN0IHJlc29ydFxuICAgICAgY29uc3QgcGVyc2lzdGVudENhY2hlID0gYXdhaXQgdGhpcy5sb2FkRnJvbURpc2soKTtcbiAgICAgIGlmIChwZXJzaXN0ZW50Q2FjaGUpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdVc2luZyBwZXJzaXN0ZW50IGNhY2hlIGFzIGxhc3QgcmVzb3J0Jyk7XG4gICAgICAgIHRoaXMuY2FjaGUgPSBwZXJzaXN0ZW50Q2FjaGU7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBlcnNpc3RlbnRDYWNoZS5kYXRhO1xuICAgICAgICB0aGlzLm1lbW9yeUNhY2hlLnNldCgnY29sbGVjdGlvbi1pbmRleCcsIHJlc3VsdCk7XG4gICAgICAgIHRoaXMucmVjb3JkUGVyZm9ybWFuY2VNZXRyaWNzKHN0YXJ0VGltZSwgbWVtb3J5QmVmb3JlLCAnZGlzay1mYWxsYmFjaycpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgXG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiBjdXJyZW50IGNhY2hlIGlzIHZhbGlkICh3aXRoaW4gVFRMKVxuICAgKi9cbiAgcHJpdmF0ZSBpc1ZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5jYWNoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBhZ2UgPSBEYXRlLm5vdygpIC0gdGhpcy5jYWNoZS5mZXRjaGVkQXQuZ2V0VGltZSgpO1xuICAgIHJldHVybiBhZ2UgPCB0aGlzLlRUTDtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEZldGNoIGZyZXNoIGluZGV4IGZyb20gR2l0SHViIHdpdGggY29uZGl0aW9uYWwgcmVxdWVzdHNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hGcmVzaCgpOiBQcm9taXNlPENvbGxlY3Rpb25JbmRleCB8IG51bGw+IHtcbiAgICB0cnkge1xuICAgICAgLy8gQnVpbGQgaGVhZGVycyBmb3IgY29uZGl0aW9uYWwgcmVxdWVzdFxuICAgICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgJ1VzZXItQWdlbnQnOiAnRG9sbGhvdXNlTUNQLzEuMCdcbiAgICAgIH07XG4gICAgICBcbiAgICAgIC8vIEFkZCBjb25kaXRpb25hbCBoZWFkZXJzIGlmIHdlIGhhdmUgY2FjaGVcbiAgICAgIGlmICh0aGlzLmNhY2hlPy5ldGFnKSB7XG4gICAgICAgIGhlYWRlcnNbJ0lmLU5vbmUtTWF0Y2gnXSA9IHRoaXMuY2FjaGUuZXRhZztcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNhY2hlPy5sYXN0TW9kaWZpZWQpIHtcbiAgICAgICAgaGVhZGVyc1snSWYtTW9kaWZpZWQtU2luY2UnXSA9IHRoaXMuY2FjaGUubGFzdE1vZGlmaWVkO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBVc2UgZmV0Y2ggZGlyZWN0bHkgZm9yIGJldHRlciBjb250cm9sIG92ZXIgY29uZGl0aW9uYWwgcmVxdWVzdHNcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godGhpcy5JTkRFWF9VUkwsIHsgaGVhZGVycyB9KTtcbiAgICAgIFxuICAgICAgLy8gMzA0IE5vdCBNb2RpZmllZCAtIHVzZSBjYWNoZWQgZGF0YVxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMzA0KSB7XG4gICAgICAgIGlmICh0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgLy8gVXBkYXRlIHRpbWVzdGFtcCB0byBleHRlbmQgY2FjaGUgdmFsaWRpdHlcbiAgICAgICAgICB0aGlzLmNhY2hlLmZldGNoZWRBdCA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zYXZlVG9EaXNrKHRoaXMuY2FjaGUpO1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnQ29sbGVjdGlvbiBpbmRleCBub3QgbW9kaWZpZWQgLSByZWZyZXNoZWQgY2FjaGUgdGltZXN0YW1wJyk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGUuZGF0YTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c306ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgaW5kZXhEYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIENvbGxlY3Rpb25JbmRleDtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgdGhlIGluZGV4IHN0cnVjdHVyZVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlSW5kZXhTdHJ1Y3R1cmUoaW5kZXhEYXRhKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29sbGVjdGlvbiBpbmRleCBzdHJ1Y3R1cmUgcmVjZWl2ZWQnKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ3JlYXRlIG5ldyBjYWNoZSBlbnRyeVxuICAgICAgY29uc3QgbmV3Q2FjaGU6IENhY2hlZEluZGV4ID0ge1xuICAgICAgICBkYXRhOiBpbmRleERhdGEsXG4gICAgICAgIGZldGNoZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgZXRhZzogcmVzcG9uc2UuaGVhZGVycy5nZXQoJ2V0YWcnKSB8fCB1bmRlZmluZWQsXG4gICAgICAgIGxhc3RNb2RpZmllZDogcmVzcG9uc2UuaGVhZGVycy5nZXQoJ2xhc3QtbW9kaWZpZWQnKSB8fCB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgICBcbiAgICAgIHRoaXMuY2FjaGUgPSBuZXdDYWNoZTtcbiAgICAgIFxuICAgICAgLy8gU2F2ZSB0byBwZXJzaXN0ZW50IGNhY2hlIGluIGJhY2tncm91bmRcbiAgICAgIHRoaXMuc2F2ZVRvRGlzayhuZXdDYWNoZSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ0ZhaWxlZCB0byBzYXZlIGluZGV4IGNhY2hlIHRvIGRpc2s6JywgZXJyb3IpO1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgRnJlc2ggY29sbGVjdGlvbiBpbmRleCBmZXRjaGVkIHdpdGggJHtpbmRleERhdGEudG90YWxfZWxlbWVudHN9IGVsZW1lbnRzYCk7XG4gICAgICByZXR1cm4gaW5kZXhEYXRhO1xuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnRmFpbGVkIHRvIGZldGNoIGZyZXNoIGNvbGxlY3Rpb24gaW5kZXg6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIHN0cnVjdHVyZSBvZiBhIGNvbGxlY3Rpb24gaW5kZXhcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVJbmRleFN0cnVjdHVyZShpbmRleDogYW55KTogaW5kZXggaXMgQ29sbGVjdGlvbkluZGV4IHtcbiAgICByZXR1cm4gKFxuICAgICAgaW5kZXggJiZcbiAgICAgIHR5cGVvZiBpbmRleCA9PT0gJ29iamVjdCcgJiZcbiAgICAgIHR5cGVvZiBpbmRleC52ZXJzaW9uID09PSAnc3RyaW5nJyAmJlxuICAgICAgdHlwZW9mIGluZGV4LmdlbmVyYXRlZCA9PT0gJ3N0cmluZycgJiZcbiAgICAgIHR5cGVvZiBpbmRleC50b3RhbF9lbGVtZW50cyA9PT0gJ251bWJlcicgJiZcbiAgICAgIGluZGV4LmluZGV4ICYmXG4gICAgICB0eXBlb2YgaW5kZXguaW5kZXggPT09ICdvYmplY3QnICYmXG4gICAgICBpbmRleC5tZXRhZGF0YSAmJlxuICAgICAgdHlwZW9mIGluZGV4Lm1ldGFkYXRhID09PSAnb2JqZWN0J1xuICAgICk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTYXZlIGNhY2hlIHRvIHBlcnNpc3RlbnQgc3RvcmFnZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzYXZlVG9EaXNrKGNhY2hlOiBDYWNoZWRJbmRleCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmVuc3VyZUNhY2hlRGlyKCk7XG5cbiAgICAgIGNvbnN0IGNhY2hlRGF0YSA9IHtcbiAgICAgICAgLi4uY2FjaGUsXG4gICAgICAgIGZldGNoZWRBdDogY2FjaGUuZmV0Y2hlZEF0LnRvSVNPU3RyaW5nKCkgLy8gU2VyaWFsaXplIGRhdGVcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnN0cmluZ2lmeShjYWNoZURhdGEsIG51bGwsIDIpO1xuICAgICAgYXdhaXQgdGhpcy5maWxlT3BlcmF0aW9ucy53cml0ZUZpbGUodGhpcy5jYWNoZUZpbGUsIGRhdGEsIHtcbiAgICAgICAgc291cmNlOiAnQ29sbGVjdGlvbkluZGV4Q2FjaGUuc2F2ZVRvRGlzaydcbiAgICAgIH0pO1xuXG4gICAgICBsb2dnZXIuZGVidWcoJ0NvbGxlY3Rpb24gaW5kZXggY2FjaGUgc2F2ZWQgdG8gZGlzaycpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ0ZhaWxlZCB0byBzYXZlIGNvbGxlY3Rpb24gaW5kZXggY2FjaGU6JywgZXJyb3IpO1xuICAgICAgLy8gRG9uJ3QgdGhyb3cgLSBjYWNoZSBwZXJzaXN0ZW5jZSBmYWlsdXJlcyBzaG91bGRuJ3QgYnJlYWsgZnVuY3Rpb25hbGl0eVxuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIExvYWQgY2FjaGUgZnJvbSBwZXJzaXN0ZW50IHN0b3JhZ2VcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbG9hZEZyb21EaXNrKCk6IFByb21pc2U8Q2FjaGVkSW5kZXggfCBudWxsPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEJhc2ljIHNlY3VyaXR5IGNoZWNrIGZvciBwYXRoIHRyYXZlcnNhbFxuICAgICAgaWYgKHRoaXMuY2FjaGVGaWxlLmluY2x1ZGVzKCcuLicpIHx8IHRoaXMuY2FjaGVGaWxlLmluY2x1ZGVzKCdcXDAnKSkge1xuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ1BBVEhfVFJBVkVSU0FMX0FUVEVNUFQnLFxuICAgICAgICAgIHNldmVyaXR5OiAnSElHSCcsXG4gICAgICAgICAgc291cmNlOiAnQ29sbGVjdGlvbkluZGV4Q2FjaGUubG9hZEZyb21EaXNrJyxcbiAgICAgICAgICBkZXRhaWxzOiBgUG90ZW50aWFsIHBhdGggdHJhdmVyc2FsIGF0dGVtcHQgZGV0ZWN0ZWQ6ICR7dGhpcy5jYWNoZUZpbGUuc3Vic3RyaW5nKDAsIDEwMCl9YFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmZpbGVPcGVyYXRpb25zLnJlYWRGaWxlKHRoaXMuY2FjaGVGaWxlLCB7XG4gICAgICAgIHNvdXJjZTogJ0NvbGxlY3Rpb25JbmRleENhY2hlLmxvYWRGcm9tRGlzaydcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2FjaGVEYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uY2FjaGVEYXRhLFxuICAgICAgICBmZXRjaGVkQXQ6IG5ldyBEYXRlKGNhY2hlRGF0YS5mZXRjaGVkQXQpIC8vIERlc2VyaWFsaXplIGRhdGVcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICgoZXJyb3IgYXMgYW55KS5jb2RlICE9PSAnRU5PRU5UJykge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ0ZhaWxlZCB0byBsb2FkIGNvbGxlY3Rpb24gaW5kZXggY2FjaGUgZnJvbSBkaXNrOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEVuc3VyZSBjYWNoZSBkaXJlY3RvcnkgZXhpc3RzXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGVuc3VyZUNhY2hlRGlyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmZpbGVPcGVyYXRpb25zLmNyZWF0ZURpcmVjdG9yeSh0aGlzLmNhY2hlRGlyKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gY3JlYXRlIGNhY2hlIGRpcmVjdG9yeTonLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgY2FjaGUgZGF0YSB3aXRoIHBlcmZvcm1hbmNlIG1vbml0b3JpbmdcbiAgICovXG4gIGFzeW5jIGNsZWFyQ2FjaGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuY2FjaGUgPSBudWxsO1xuICAgIHRoaXMubWVtb3J5Q2FjaGUuY2xlYXIoKTtcblxuICAgIC8vIENhbmNlbCBhbnkgb25nb2luZyBmZXRjaFxuICAgIHRoaXMuZmV0Y2hQcm9taXNlID0gbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmZpbGVPcGVyYXRpb25zLmRlbGV0ZUZpbGUodGhpcy5jYWNoZUZpbGUsIHVuZGVmaW5lZCwge1xuICAgICAgICBzb3VyY2U6ICdDb2xsZWN0aW9uSW5kZXhDYWNoZS5jbGVhckNhY2hlJ1xuICAgICAgfSk7XG4gICAgICBsb2dnZXIuZGVidWcoJ0NvbGxlY3Rpb24gaW5kZXggY2FjaGUgY2xlYXJlZCBmcm9tIGRpc2snKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKChlcnJvciBhcyBhbnkpLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnRmFpbGVkIHRvIGNsZWFyIGNvbGxlY3Rpb24gaW5kZXggY2FjaGU6JywgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxvZ2dlci5kZWJ1ZygnQ29sbGVjdGlvbiBjYWNoZSBjbGVhcmVkJywge1xuICAgICAgZHVyYXRpb246IERhdGUubm93KCkgLSBzdGFydFRpbWUsXG4gICAgICBtZW1vcnlGcmVlZDogdGhpcy5tZW1vcnlDYWNoZS5nZXRNZW1vcnlVc2FnZU1CKClcbiAgICB9KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBjb21wcmVoZW5zaXZlIGNhY2hlIHN0YXRpc3RpY3MgZm9yIGRlYnVnZ2luZyBhbmQgbW9uaXRvcmluZ1xuICAgKi9cbiAgZ2V0Q2FjaGVTdGF0cygpOiB7IFxuICAgIGlzVmFsaWQ6IGJvb2xlYW47IFxuICAgIGFnZTogbnVtYmVyOyBcbiAgICBoYXNDYWNoZTogYm9vbGVhbjsgXG4gICAgZWxlbWVudHM6IG51bWJlcjtcbiAgICBtZW1vcnlDYWNoZTogYW55O1xuICAgIHBlcmZvcm1hbmNlTWV0cmljczogYW55O1xuICB9IHtcbiAgICBpZiAoIXRoaXMuY2FjaGUpIHtcbiAgICAgIHJldHVybiB7IFxuICAgICAgICBpc1ZhbGlkOiBmYWxzZSwgXG4gICAgICAgIGFnZTogMCwgXG4gICAgICAgIGhhc0NhY2hlOiBmYWxzZSwgXG4gICAgICAgIGVsZW1lbnRzOiAwLFxuICAgICAgICBtZW1vcnlDYWNoZTogdGhpcy5tZW1vcnlDYWNoZS5nZXRTdGF0cygpLFxuICAgICAgICBwZXJmb3JtYW5jZU1ldHJpY3M6IG51bGxcbiAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGFnZSA9IERhdGUubm93KCkgLSB0aGlzLmNhY2hlLmZldGNoZWRBdC5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVmFsaWQ6IHRoaXMuaXNWYWxpZCgpLFxuICAgICAgYWdlLFxuICAgICAgaGFzQ2FjaGU6IHRydWUsXG4gICAgICBlbGVtZW50czogdGhpcy5jYWNoZS5kYXRhLnRvdGFsX2VsZW1lbnRzLFxuICAgICAgbWVtb3J5Q2FjaGU6IHRoaXMubWVtb3J5Q2FjaGUuZ2V0U3RhdHMoKSxcbiAgICAgIHBlcmZvcm1hbmNlTWV0cmljczoge1xuICAgICAgICBjYWNoZUhpdFJhdGU6IHRoaXMuY2FsY3VsYXRlQ2FjaGVIaXRSYXRlKCksXG4gICAgICAgIGF2ZXJhZ2VBY2Nlc3NUaW1lOiB0aGlzLmNhbGN1bGF0ZUF2ZXJhZ2VBY2Nlc3NUaW1lKClcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGluLW1lbW9yeSBjYWNoZSBzdGF0ZSB3aXRob3V0IHRvdWNoaW5nIGRpc2suXG4gICAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlID0gbnVsbDtcbiAgICB0aGlzLm1lbW9yeUNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5mZXRjaFByb21pc2UgPSBudWxsO1xuICB9XG4gIFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQUklWQVRFIEhFTFBFUiBNRVRIT0RTIEZPUiBQRVJGT1JNQU5DRVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBcbiAgLyoqXG4gICAqIEZldGNoIGZyZXNoIGluZGV4IHdpdGggY29tcHJlaGVuc2l2ZSBmYWxsYmFjayBzdHJhdGVneVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaEZyZXNoV2l0aEZhbGxiYWNrKCk6IFByb21pc2U8Q29sbGVjdGlvbkluZGV4PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRyeSB0byBmZXRjaCBmcmVzaCBpbmRleFxuICAgICAgY29uc3QgZnJlc2hJbmRleCA9IGF3YWl0IHRoaXMuZmV0Y2hGcmVzaCgpO1xuICAgICAgaWYgKGZyZXNoSW5kZXgpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdDb2xsZWN0aW9uIGluZGV4IGZldGNoZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICAgIHJldHVybiBmcmVzaEluZGV4O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignRnJlc2ggZmV0Y2ggZmFpbGVkLCB0cnlpbmcgZmFsbGJhY2snLCB7XG4gICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcilcbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICAvLyBGYWxsIGJhY2sgdG8gc3RhbGUgY2FjaGUgaWYgYXZhaWxhYmxlXG4gICAgaWYgKHRoaXMuY2FjaGU/LmRhdGEpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnVXNpbmcgc3RhbGUgY2FjaGVkIGNvbGxlY3Rpb24gaW5kZXggYXMgZmFsbGJhY2snKTtcbiAgICAgIHJldHVybiB0aGlzLmNhY2hlLmRhdGE7XG4gICAgfVxuICAgIFxuICAgIHRocm93IG5ldyBFcnJvcignTm8gY29sbGVjdGlvbiBpbmRleCBhdmFpbGFibGUgLSBmcmVzaCBmZXRjaCBmYWlsZWQgYW5kIG5vIGNhY2hlIGV4aXN0cycpO1xuICB9XG4gIFxuICAvKipcbiAgICogUmVjb3JkIHBlcmZvcm1hbmNlIG1ldHJpY3MgZm9yIGNhY2hlIG9wZXJhdGlvbnNcbiAgICovXG4gIHByaXZhdGUgcmVjb3JkUGVyZm9ybWFuY2VNZXRyaWNzKHN0YXJ0VGltZTogbnVtYmVyLCBtZW1vcnlCZWZvcmU6IG51bWJlciwgb3BlcmF0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBkdXJhdGlvbiA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgY29uc3QgbWVtb3J5QWZ0ZXIgPSBwcm9jZXNzLm1lbW9yeVVzYWdlKCkuaGVhcFVzZWQ7XG4gICAgXG4gICAgbG9nZ2VyLmRlYnVnKCdDb2xsZWN0aW9uIGNhY2hlIG9wZXJhdGlvbiBjb21wbGV0ZWQnLCB7XG4gICAgICBvcGVyYXRpb24sXG4gICAgICBkdXJhdGlvbixcbiAgICAgIG1lbW9yeVVzYWdlTUI6IChtZW1vcnlBZnRlciAtIG1lbW9yeUJlZm9yZSkgLyAoMTAyNCAqIDEwMjQpXG4gICAgfSk7XG4gICAgXG4gICAgLy8gUmVjb3JkIGNhY2hlIHBlcmZvcm1hbmNlIG1ldHJpY3NcbiAgICB0aGlzLnBlcmZvcm1hbmNlTW9uaXRvci5yZWNvcmRDYWNoZVBlcmZvcm1hbmNlKCdjb2xsZWN0aW9uSW5kZXgnLCB7XG4gICAgICBoaXRSYXRlOiBvcGVyYXRpb24uaW5jbHVkZXMoJ2hpdCcpID8gMSA6IDAsXG4gICAgICBhdmdIaXRUaW1lOiBvcGVyYXRpb24uaW5jbHVkZXMoJ2hpdCcpID8gZHVyYXRpb24gOiAwLFxuICAgICAgYXZnTWlzc1RpbWU6IG9wZXJhdGlvbi5pbmNsdWRlcygnaGl0JykgPyAwIDogZHVyYXRpb24sXG4gICAgICB0b3RhbEhpdHM6IG9wZXJhdGlvbi5pbmNsdWRlcygnaGl0JykgPyAxIDogMCxcbiAgICAgIHRvdGFsTWlzc2VzOiBvcGVyYXRpb24uaW5jbHVkZXMoJ2hpdCcpID8gMCA6IDEsXG4gICAgICBldmljdGlvbnM6IDBcbiAgICB9KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBjYWNoZSBoaXQgcmF0ZSAocGxhY2Vob2xkZXIgZm9yIGZ1dHVyZSBpbXBsZW1lbnRhdGlvbilcbiAgICovXG4gIHByaXZhdGUgY2FsY3VsYXRlQ2FjaGVIaXRSYXRlKCk6IG51bWJlciB7XG4gICAgLy8gVGhpcyB3b3VsZCBiZSBpbXBsZW1lbnRlZCB3aXRoIGFjdHVhbCBtZXRyaWNzIHRyYWNraW5nXG4gICAgcmV0dXJuIHRoaXMubWVtb3J5Q2FjaGUuZ2V0U3RhdHMoKS5oaXRSYXRlO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2FsY3VsYXRlIGF2ZXJhZ2UgYWNjZXNzIHRpbWUgKHBsYWNlaG9sZGVyIGZvciBmdXR1cmUgaW1wbGVtZW50YXRpb24pXG4gICAqL1xuICBwcml2YXRlIGNhbGN1bGF0ZUF2ZXJhZ2VBY2Nlc3NUaW1lKCk6IG51bWJlciB7XG4gICAgLy8gVGhpcyB3b3VsZCBiZSBpbXBsZW1lbnRlZCB3aXRoIGFjdHVhbCB0aW1pbmcgbWV0cmljc1xuICAgIHJldHVybiA1OyAvLyBQbGFjZWhvbGRlciB2YWx1ZVxuICB9XG59XG4iXX0=
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Resolve the shared collection cache directory.
3
+ * @param baseDir Optional home-root override used by isolated tests. This is not
4
+ * a cache-directory override; use DOLLHOUSE_CACHE_DIR for an exact cache path.
5
+ */
6
+ export declare function resolveCollectionCacheDir(baseDir?: string): string;
7
+ //# sourceMappingURL=cachePaths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cachePaths.d.ts","sourceRoot":"","sources":["../../src/cache/cachePaths.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAMlE"}
@@ -0,0 +1,15 @@
1
+ import * as os from 'node:os';
2
+ import * as path from 'node:path';
3
+ /**
4
+ * Resolve the shared collection cache directory.
5
+ * @param baseDir Optional home-root override used by isolated tests. This is not
6
+ * a cache-directory override; use DOLLHOUSE_CACHE_DIR for an exact cache path.
7
+ */
8
+ export function resolveCollectionCacheDir(baseDir) {
9
+ const configuredCacheDir = process.env.DOLLHOUSE_CACHE_DIR;
10
+ if (configuredCacheDir)
11
+ return configuredCacheDir;
12
+ const dollhouseHome = baseDir || process.env.DOLLHOUSE_HOME_DIR || os.homedir();
13
+ return path.join(dollhouseHome, '.dollhouse', 'cache');
14
+ }
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGVQYXRocy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jYWNoZS9jYWNoZVBhdGhzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBRWxDOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUseUJBQXlCLENBQUMsT0FBZ0I7SUFDeEQsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDO0lBQzNELElBQUksa0JBQWtCO1FBQUUsT0FBTyxrQkFBa0IsQ0FBQztJQUVsRCxNQUFNLGFBQWEsR0FBRyxPQUFPLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDaEYsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDekQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIG9zIGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG4vKipcbiAqIFJlc29sdmUgdGhlIHNoYXJlZCBjb2xsZWN0aW9uIGNhY2hlIGRpcmVjdG9yeS5cbiAqIEBwYXJhbSBiYXNlRGlyIE9wdGlvbmFsIGhvbWUtcm9vdCBvdmVycmlkZSB1c2VkIGJ5IGlzb2xhdGVkIHRlc3RzLiBUaGlzIGlzIG5vdFxuICogYSBjYWNoZS1kaXJlY3Rvcnkgb3ZlcnJpZGU7IHVzZSBET0xMSE9VU0VfQ0FDSEVfRElSIGZvciBhbiBleGFjdCBjYWNoZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUNvbGxlY3Rpb25DYWNoZURpcihiYXNlRGlyPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgY29uZmlndXJlZENhY2hlRGlyID0gcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0NBQ0hFX0RJUjtcbiAgaWYgKGNvbmZpZ3VyZWRDYWNoZURpcikgcmV0dXJuIGNvbmZpZ3VyZWRDYWNoZURpcjtcblxuICBjb25zdCBkb2xsaG91c2VIb21lID0gYmFzZURpciB8fCBwcm9jZXNzLmVudi5ET0xMSE9VU0VfSE9NRV9ESVIgfHwgb3MuaG9tZWRpcigpO1xuICByZXR1cm4gcGF0aC5qb2luKGRvbGxob3VzZUhvbWUsICcuZG9sbGhvdXNlJywgJ2NhY2hlJyk7XG59XG4iXX0=