@dollhousemcp/mcp-server 2.0.13 → 2.0.15

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 (35) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/di/Container.d.ts.map +1 -1
  3. package/dist/di/Container.js +19 -9
  4. package/dist/elements/BaseElement.js +2 -2
  5. package/dist/elements/memories/Memory.d.ts.map +1 -1
  6. package/dist/elements/memories/Memory.js +3 -3
  7. package/dist/elements/skills/Skill.d.ts.map +1 -1
  8. package/dist/elements/skills/Skill.js +4 -4
  9. package/dist/elements/templates/Template.d.ts.map +1 -1
  10. package/dist/elements/templates/Template.js +4 -4
  11. package/dist/generated/version.d.ts +2 -2
  12. package/dist/generated/version.js +3 -3
  13. package/dist/handlers/ElementCRUDHandler.d.ts +10 -0
  14. package/dist/handlers/ElementCRUDHandler.d.ts.map +1 -1
  15. package/dist/handlers/ElementCRUDHandler.js +123 -1
  16. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +1 -0
  17. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
  18. package/dist/handlers/mcp-aql/MCPAQLHandler.js +31 -2
  19. package/dist/services/ActivationStore.d.ts +20 -0
  20. package/dist/services/ActivationStore.d.ts.map +1 -1
  21. package/dist/services/ActivationStore.js +104 -1
  22. package/dist/web/console/IngestRoutes.d.ts +1 -0
  23. package/dist/web/console/IngestRoutes.d.ts.map +1 -1
  24. package/dist/web/console/IngestRoutes.js +4 -1
  25. package/dist/web/console/UnifiedConsole.js +2 -1
  26. package/dist/web/public/permissions.css +224 -16
  27. package/dist/web/public/permissions.js +326 -63
  28. package/dist/web/public/sessions.js +218 -98
  29. package/dist/web/public/styles.css +15 -10
  30. package/dist/web/routes/permissionRoutes.d.ts.map +1 -1
  31. package/dist/web/routes/permissionRoutes.js +57 -19
  32. package/dist/web/server.d.ts.map +1 -1
  33. package/dist/web/server.js +2 -1
  34. package/package.json +1 -1
  35. package/server.json +2 -2
@@ -9,7 +9,7 @@
9
9
  * 4. MEDIUM: Implemented memory management to prevent unbounded growth
10
10
  * 5. MEDIUM: Added XSS protection through input sanitization
11
11
  */
12
- import { BaseElement } from '../BaseElement.js';
12
+ import { BaseElement, normalizeVersion } from '../BaseElement.js';
13
13
  import { ElementType } from '../../portfolio/types.js';
14
14
  import { logger } from '../../utils/logger.js';
15
15
  import { sanitizeInput } from '../../security/InputValidator.js';
@@ -370,8 +370,8 @@ export class Skill extends BaseElement {
370
370
  // Update ID and version if provided
371
371
  if (parsed.id)
372
372
  this.id = parsed.id;
373
- if (parsed.version)
374
- this.version = parsed.version;
373
+ if (parsed.version != null)
374
+ this.version = normalizeVersion(String(parsed.version));
375
375
  // Restore parameters
376
376
  if (parsed.parameters) {
377
377
  this.parameters.clear();
@@ -439,4 +439,4 @@ export class Skill extends BaseElement {
439
439
  logger.debug(`Cleared all parameters for skill: ${this.metadata.name}`);
440
440
  }
441
441
  }
442
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tpbGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvc2tpbGxzL1NraWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDakYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQW9DOUQsTUFBTSxPQUFPLEtBQU0sU0FBUSxXQUFXO0lBRXBDLHFGQUFxRjtJQUM5RSxVQUFVLEdBQXFCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFaEQsMkVBQTJFO0lBQzNFLDhFQUE4RTtJQUM5RSw4Q0FBOEM7SUFDN0IsbUJBQW1CLEdBQUcsR0FBRyxDQUFDO0lBQzFCLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxDQUFDLCtCQUErQjtJQUU1RSw0Q0FBNEM7SUFDM0IsZUFBZSxDQUFrQjtJQUVsRCxZQUFZLFFBQWdDLEVBQUUsZUFBdUIsRUFBRSxFQUFFLGVBQWdDLEVBQUUsVUFBa0IsRUFBRTtRQUM3SCw2REFBNkQ7UUFDN0QsNERBQTREO1FBQzVELDBFQUEwRTtRQUMxRSwyQ0FBMkM7UUFDM0MsOEJBQThCO1FBQzlCLDZCQUE2QjtRQUM3QixNQUFNLGlCQUFpQixHQUFHO1lBQ3hCLEdBQUcsUUFBUTtZQUNYLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUNqSCxXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDdkksQ0FBQztRQUVGLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO1FBQ3ZDLHdEQUF3RDtRQUN4RCxzRkFBc0Y7UUFDdEYsaURBQWlEO1FBQ2pELElBQUksWUFBWSxJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLE1BQU0saUJBQWlCLEdBQUcsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN6SixJQUFJLENBQUMsWUFBWSxHQUFHLGlCQUFpQixDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztRQUMvRCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUV2QixpQ0FBaUM7UUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRztZQUNkLEdBQUcsSUFBSSxDQUFDLFFBQVE7WUFDaEIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTLElBQUksRUFBRTtZQUNuQyxVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVUsSUFBSSxVQUFVO1lBQzdDLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxJQUFJLEVBQUU7WUFDL0IsYUFBYSxFQUFFLFFBQVEsQ0FBQyxhQUFhLElBQUksRUFBRTtZQUMzQyxVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVUsSUFBSSxFQUFFO1lBQ3JDLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUSxJQUFJLEVBQUU7WUFDakMsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLGlCQUFpQixJQUFJLENBQUM7U0FDbkQsQ0FBQztRQUVGLGlDQUFpQztRQUNqQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUM5RCxNQUFNLFNBQVMsR0FBbUI7b0JBQ2hDLEdBQUcsS0FBSztvQkFDUixJQUFJLEVBQUUsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO29CQUNqRixXQUFXLEVBQUUsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDO2lCQUNqRyxDQUFDO2dCQUNGLHVEQUF1RDtnQkFDdkQsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2xCLFNBQVMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hFLENBQUM7Z0JBQ0QsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNLLG9CQUFvQjtRQUMxQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN2QyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNqRCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsWUFBWSxDQUFDLElBQVksRUFBRSxLQUFVO1FBQ25DLHFFQUFxRTtRQUNyRSxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTlDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsNERBQTREO1lBQzVELG1FQUFtRTtZQUNuRSxlQUFlLENBQUMsZ0JBQWdCLENBQUM7Z0JBQy9CLElBQUksRUFBRSxzQkFBc0I7Z0JBQzVCLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixNQUFNLEVBQUUsb0JBQW9CO2dCQUM1QixPQUFPLEVBQUUscUNBQXFDLGFBQWEsZUFBZSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRTthQUMvRixDQUFDLENBQUM7WUFDSCxNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsYUFBYSxpQ0FBaUMsQ0FBQyxDQUFDO1FBQ2hGLENBQUM7UUFFRCw4REFBOEQ7UUFDOUQsSUFBSSxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBRTNCLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM1QixxRUFBcUU7WUFDckUsa0VBQWtFO1lBQ2xFLGlDQUFpQztZQUNqQyxzREFBc0Q7WUFDdEQsc0RBQXNEO1lBQ3RELG1EQUFtRDtZQUNuRCxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDN0QsY0FBYyxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUVoRiw2Q0FBNkM7WUFDN0Msd0RBQXdEO1lBQ3hELCtEQUErRDtZQUMvRCxJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO2dCQUNqRixxREFBcUQ7Z0JBQ3JELGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDL0IsSUFBSSxFQUFFLDJCQUEyQjtvQkFDakMsUUFBUSxFQUFFLE1BQU07b0JBQ2hCLE1BQU0sRUFBRSxvQkFBb0I7b0JBQzVCLE9BQU8sRUFBRSw2Q0FBNkMsYUFBYSxlQUFlLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFO2lCQUN2RyxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1lBQzNELENBQUM7UUFDSCxDQUFDO1FBRUQsa0JBQWtCO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDeEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsYUFBYSxlQUFlLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzVGLENBQUM7UUFFRCw2REFBNkQ7UUFDN0Qsc0ZBQXNGO1FBQ3RGLHlFQUF5RTtRQUN6RSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDNUYscUVBQXFFO1lBQ3JFLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDL0IsSUFBSSxFQUFFLHFCQUFxQjtnQkFDM0IsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLE1BQU0sRUFBRSxvQkFBb0I7Z0JBQzVCLE9BQU8sRUFBRSx1Q0FBdUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFVBQVUsSUFBSSxDQUFDLG1CQUFtQixFQUFFO2FBQ3ZHLENBQUMsQ0FBQztZQUNILE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLElBQUksQ0FBQyxtQkFBbUIscUJBQXFCLENBQUMsQ0FBQztRQUN0RyxDQUFDO1FBRUQsMERBQTBEO1FBQzFELGlGQUFpRjtRQUNqRixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDL0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsSUFBSSxDQUFDLGtCQUFrQixxQkFBcUIsQ0FBQyxDQUFDO1FBQ3RHLENBQUM7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDbkQsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsYUFBYSxNQUFNLGNBQWMsY0FBYyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDckcsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWSxDQUFDLElBQVk7UUFDdkIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0I7UUFDZCxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7T0FFRztJQUNLLHNCQUFzQixDQUFDLEtBQXFCLEVBQUUsS0FBVTtRQUM5RCxRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuQixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUM7WUFDbkMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUNkLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDMUIsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztvQkFBRSxPQUFPLEtBQUssQ0FBQztnQkFDcEMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUc7b0JBQUUsT0FBTyxLQUFLLENBQUM7Z0JBQzdELElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHO29CQUFFLE9BQU8sS0FBSyxDQUFDO2dCQUM3RCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFDRCxLQUFLLFNBQVM7Z0JBQ1osT0FBTyxPQUFPLEtBQUssS0FBSyxTQUFTLENBQUM7WUFDcEMsS0FBSyxNQUFNO2dCQUNULE9BQU8sS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO1lBQ3pEO2dCQUNFLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQVc7UUFDdkIsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRXRELCtCQUErQjtRQUMvQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVU7WUFDOUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3hELEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFMUIsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hGLENBQUM7UUFFRCx5RUFBeUU7UUFDekUscURBQXFEO1FBQ3JELE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksNEJBQTRCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUUvRixPQUFPO1lBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSTtZQUN6QixVQUFVLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ25DLEtBQUs7WUFDTCxXQUFXLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7U0FDdEMsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNhLFFBQVE7UUFDdEIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWhDLG1DQUFtQztRQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07WUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVE7WUFBRSxNQUFNLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUUzQyxtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ2pCLEtBQUssRUFBRSxjQUFjO2dCQUNyQixPQUFPLEVBQUUsb0NBQW9DO2dCQUM3QyxJQUFJLEVBQUUsb0JBQW9CO2FBQzNCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCw0QkFBNEI7UUFDNUIsTUFBTSxlQUFlLEdBQUcsQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMzRSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDcEYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ2pCLEtBQUssRUFBRSxZQUFZO2dCQUNuQixPQUFPLEVBQUUsOEJBQThCLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ25FLElBQUksRUFBRSxvQkFBb0I7YUFDM0IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELDZCQUE2QjtRQUM3QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDbEQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUNqRixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDakIsS0FBSyxFQUFFLG1CQUFtQjtvQkFDMUIsT0FBTyxFQUFFLDZDQUE2QztvQkFDdEQsSUFBSSxFQUFFLHFCQUFxQjtpQkFDNUIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFFRCxzQkFBc0I7UUFDdEIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDaEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztvQkFDNUMsTUFBTSxDQUFDLE1BQU8sQ0FBQyxJQUFJLENBQUM7d0JBQ2xCLEtBQUssRUFBRSxjQUFjLEtBQUssUUFBUTt3QkFDbEMsT0FBTyxFQUFFLDRCQUE0Qjt3QkFDckMsSUFBSSxFQUFFLHdCQUF3QjtxQkFDL0IsQ0FBQyxDQUFDO2dCQUNMLENBQUM7Z0JBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUM1RSxNQUFNLENBQUMsTUFBTyxDQUFDLElBQUksQ0FBQzt3QkFDbEIsS0FBSyxFQUFFLGNBQWMsS0FBSyxXQUFXO3dCQUNyQyxPQUFPLEVBQUUsMENBQTBDO3dCQUNuRCxJQUFJLEVBQUUsc0JBQXNCO3FCQUM3QixDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELDhCQUE4QjtRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pFLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNuQixLQUFLLEVBQUUsU0FBUztnQkFDaEIsT0FBTyxFQUFFLDJEQUEyRDtnQkFDcEUsUUFBUSxFQUFFLEtBQUs7YUFDaEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ25CLEtBQUssRUFBRSxVQUFVO2dCQUNqQixPQUFPLEVBQUUsZ0RBQWdEO2dCQUN6RCxRQUFRLEVBQUUsUUFBUTthQUNuQixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsOENBQThDO1FBQzlDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHO0lBQ2EsZUFBZTtRQUM3QixNQUFNLElBQUksR0FBRztZQUNYLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNYLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQy9CLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixVQUFVLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ25DLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQ3RCLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDZ0IsVUFBVTtRQUMzQixJQUFJLE9BQU8sR0FBRyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxNQUFNLENBQUM7UUFDNUMsT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLE1BQU0sQ0FBQztRQUU5QyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixPQUFPLElBQUksc0JBQXNCLElBQUksQ0FBQyxZQUFZLE1BQU0sQ0FBQztRQUMzRCxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDdkMsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDN0MsT0FBTyxJQUFJLG1CQUFtQixDQUFDO1lBQy9CLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ2xELE9BQU8sSUFBSSxPQUFPLEdBQUcsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDeEQsQ0FBQztZQUNELE9BQU8sSUFBSSxJQUFJLENBQUM7UUFDbEIsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7O09BR0c7SUFDYSxTQUFTO1FBQ3ZCLHdEQUF3RDtRQUN4RCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDM0MsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNoQixHQUFHLGtCQUFrQjtZQUNyQixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDL0IsVUFBVSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtTQUNwQyxDQUFDO1FBRUYsc0RBQXNEO1FBQ3RELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVqQyw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQztRQUVyQyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDYSxXQUFXLENBQUMsSUFBWTtRQUN0QyxJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRWhDLGtCQUFrQjtZQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBRXpELDBCQUEwQjtZQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDO1lBRTlDLG9DQUFvQztZQUNwQyxJQUFJLE1BQU0sQ0FBQyxFQUFFO2dCQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxJQUFJLE1BQU0sQ0FBQyxPQUFPO2dCQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUVsRCxxQkFBcUI7WUFDckIsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3hCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7b0JBQ3pELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDbEMsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDckIsTUFBTSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRTVELENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN0RCxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDYSxLQUFLLENBQUMsUUFBUTtRQUM1QixNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVwRSxnREFBZ0Q7UUFDaEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4SCxDQUFDO1FBRUQsTUFBTSxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsYUFBbUM7UUFDdkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRS9GLDBCQUEwQjtRQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNyQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7UUFFSCwyQ0FBMkM7UUFDM0MsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JELE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ2EsS0FBSyxDQUFDLFVBQVU7UUFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFdEUscUVBQXFFO1FBQ3JFLDJEQUEyRDtRQUMzRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFdkIsTUFBTSxLQUFLLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4QixNQUFNLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDMUUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTa2lsbCBlbGVtZW50IGNsYXNzIGltcGxlbWVudGluZyBJRWxlbWVudCBpbnRlcmZhY2UuXG4gKiBSZXByZXNlbnRzIGEgZGlzY3JldGUgY2FwYWJpbGl0eSBmb3Igc3BlY2lmaWMgdGFza3MuXG4gKiBcbiAqIFNFQ1VSSVRZIEZJWEVTIElNUExFTUVOVEVEIChQUiAjMzE5KTpcbiAqIDEuIENSSVRJQ0FMOiBBZGRlZCBjb21wcmVoZW5zaXZlIGlucHV0IHZhbGlkYXRpb24gZm9yIGFsbCBza2lsbCBwYXJhbWV0ZXJzXG4gKiAyLiBNRURJVU06IEltcGxlbWVudGVkIFVuaWNvZGUgbm9ybWFsaXphdGlvbiB0byBwcmV2ZW50IGhvbW9ncmFwaCBhdHRhY2tzXG4gKiAzLiBNRURJVU06IEFkZGVkIGF1ZGl0IGxvZ2dpbmcgZm9yIHNlY3VyaXR5IGV2ZW50cyB2aWEgU2VjdXJpdHlNb25pdG9yXG4gKiA0LiBNRURJVU06IEltcGxlbWVudGVkIG1lbW9yeSBtYW5hZ2VtZW50IHRvIHByZXZlbnQgdW5ib3VuZGVkIGdyb3d0aFxuICogNS4gTUVESVVNOiBBZGRlZCBYU1MgcHJvdGVjdGlvbiB0aHJvdWdoIGlucHV0IHNhbml0aXphdGlvblxuICovXG5cbmltcG9ydCB7IEJhc2VFbGVtZW50IH0gZnJvbSAnLi4vQmFzZUVsZW1lbnQuanMnO1xuaW1wb3J0IHsgSUVsZW1lbnQsIElFbGVtZW50TWV0YWRhdGEsIEVsZW1lbnRWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnLi4vLi4vdHlwZXMvZWxlbWVudHMvaW5kZXguanMnO1xuaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tICcuLi8uLi9wb3J0Zm9saW8vdHlwZXMuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IHNhbml0aXplSW5wdXQgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9JbnB1dFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5TW9uaXRvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3NlY3VyaXR5TW9uaXRvci5qcyc7XG5pbXBvcnQgeyBDb250ZW50VmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvY29udGVudFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBTRUNVUklUWV9MSU1JVFMgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvTWV0YWRhdGFTZXJ2aWNlLmpzJztcblxuLy8gRXh0ZW5kIElFbGVtZW50TWV0YWRhdGEgd2l0aCBza2lsbC1zcGVjaWZpYyBmaWVsZHNcbmV4cG9ydCBpbnRlcmZhY2UgU2tpbGxNZXRhZGF0YSBleHRlbmRzIElFbGVtZW50TWV0YWRhdGEge1xuICB0eXBlPzogRWxlbWVudFR5cGUuU0tJTEw7ICAgICAgICAgICAgICAgIC8vIFNraWxsIHR5cGUgY29uc3RyYWludCBmb3IgdHlwZSBzYWZldHlcbiAgbGFuZ3VhZ2VzPzogc3RyaW5nW107ICAgICAgICAgICAvLyBQcm9ncmFtbWluZy9zcG9rZW4gbGFuZ3VhZ2VzIHRoaXMgc2tpbGwgd29ya3Mgd2l0aFxuICBjb21wbGV4aXR5PzogJ2JlZ2lubmVyJyB8ICdpbnRlcm1lZGlhdGUnIHwgJ2FkdmFuY2VkJyB8ICdleHBlcnQnO1xuICBkb21haW5zPzogc3RyaW5nW107ICAgICAgICAgICAgIC8vIERvbWFpbiBjYXRlZ29yaWVzIChlLmcuLCB3ZWItZGV2LCBkYXRhLXNjaWVuY2UsIHdyaXRpbmcpXG4gIHByZXJlcXVpc2l0ZXM/OiBzdHJpbmdbXTsgICAgICAgLy8gUmVxdWlyZWQga25vd2xlZGdlIG9yIG90aGVyIHNraWxsc1xuICBwYXJhbWV0ZXJzPzogU2tpbGxQYXJhbWV0ZXJbXTsgIC8vIENvbmZpZ3VyYWJsZSBwYXJhbWV0ZXJzXG4gIGV4YW1wbGVzPzogU2tpbGxFeGFtcGxlW107ICAgICAgLy8gVXNhZ2UgZXhhbXBsZXNcbiAgY2VydGlmaWNhdGlvbj86IHN0cmluZzsgICAgICAgICAvLyBFeHRlcm5hbCBjZXJ0aWZpY2F0aW9uIG9yIHZhbGlkYXRpb25cbiAgcHJvZmljaWVuY3lfbGV2ZWw/OiBudW1iZXI7ICAgICAvLyAxLTEwMCBwcm9maWNpZW5jeSBsZXZlbFxuICB0cmlnZ2Vycz86IHN0cmluZ1tdOyAgICAgICAgICAgIC8vIEFjdGlvbiB2ZXJicyB0aGF0IHRyaWdnZXIgdGhpcyBza2lsbCAoZS5nLiwgXCJhbmFseXplXCIsIFwidmFsaWRhdGVcIiwgXCJvcHRpbWl6ZVwiKVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNraWxsUGFyYW1ldGVyIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2Jvb2xlYW4nIHwgJ2VudW0nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIGRlZmF1bHQ/OiBhbnk7XG4gIG9wdGlvbnM/OiBzdHJpbmdbXTsgIC8vIEZvciBlbnVtIHR5cGVcbiAgbWluPzogbnVtYmVyOyAgICAgICAgLy8gRm9yIG51bWJlciB0eXBlXG4gIG1heD86IG51bWJlcjsgICAgICAgIC8vIEZvciBudW1iZXIgdHlwZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNraWxsRXhhbXBsZSB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGlucHV0PzogYW55O1xuICBvdXRwdXQ/OiBhbnk7XG4gIGNvZGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBTa2lsbCBleHRlbmRzIEJhc2VFbGVtZW50IGltcGxlbWVudHMgSUVsZW1lbnQge1xuICBwdWJsaWMgZGVjbGFyZSBtZXRhZGF0YTogU2tpbGxNZXRhZGF0YTtcbiAgLy8gaW5zdHJ1Y3Rpb25zIGFuZCBjb250ZW50IGluaGVyaXRlZCBmcm9tIEJhc2VFbGVtZW50ICh2Mi4wIGR1YWwtZmllbGQgYXJjaGl0ZWN0dXJlKVxuICBwdWJsaWMgcGFyYW1ldGVyczogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoKTtcblxuICAvLyBTRUNVUklUWSBGSVggIzQ6IE1lbW9yeSBtYW5hZ2VtZW50IGNvbnN0YW50cyB0byBwcmV2ZW50IHVuYm91bmRlZCBncm93dGhcbiAgLy8gUHJldmlvdXNseTogTm8gbGltaXRzIG9uIHBhcmFtZXRlciBzdG9yYWdlLCBjb3VsZCBsZWFkIHRvIG1lbW9yeSBleGhhdXN0aW9uXG4gIC8vIE5vdzogRW5mb3JjZWQgbGltaXRzIG9uIGJvdGggY291bnQgYW5kIHNpemVcbiAgcHJpdmF0ZSByZWFkb25seSBNQVhfUEFSQU1FVEVSX0NPVU5UID0gMTAwO1xuICBwcml2YXRlIHJlYWRvbmx5IE1BWF9QQVJBTUVURVJfU0laRSA9IDEwMDAwOyAvLyBNYXggc2l6ZSBwZXIgcGFyYW1ldGVyIHZhbHVlXG5cbiAgLy8gU3RvcmUgTWV0YWRhdGFTZXJ2aWNlIGZvciBjbG9uZSBvcGVyYXRpb25cbiAgcHJpdmF0ZSByZWFkb25seSBtZXRhZGF0YVNlcnZpY2U6IE1ldGFkYXRhU2VydmljZTtcblxuICBjb25zdHJ1Y3RvcihtZXRhZGF0YTogUGFydGlhbDxTa2lsbE1ldGFkYXRhPiwgaW5zdHJ1Y3Rpb25zOiBzdHJpbmcgPSAnJywgbWV0YWRhdGFTZXJ2aWNlOiBNZXRhZGF0YVNlcnZpY2UsIGNvbnRlbnQ6IHN0cmluZyA9ICcnKSB7XG4gICAgLy8gU0VDVVJJVFkgRklYICMyOiBWYWxpZGF0ZSBhbmQgc2FuaXRpemUgQUxMIG1ldGFkYXRhIGZpZWxkc1xuICAgIC8vIFByZXZpb3VzbHk6IG1ldGFkYXRhIHdhcyB1c2VkIGRpcmVjdGx5IHdpdGhvdXQgdmFsaWRhdGlvblxuICAgIC8vIE5vdzogQWxsIHN0cmluZyBpbnB1dHMgYXJlIFVuaWNvZGUgbm9ybWFsaXplZCBhbmQgc2FuaXRpemVkIHRvIHByZXZlbnQ6XG4gICAgLy8gLSBYU1MgYXR0YWNrcyB0aHJvdWdoIG1hbGljaW91cyBtZXRhZGF0YVxuICAgIC8vIC0gVW5pY29kZSBob21vZ3JhcGggYXR0YWNrc1xuICAgIC8vIC0gQnVmZmVyIG92ZXJmbG93IGF0dGVtcHRzXG4gICAgY29uc3Qgc2FuaXRpemVkTWV0YWRhdGEgPSB7XG4gICAgICAuLi5tZXRhZGF0YSxcbiAgICAgIG5hbWU6IG1ldGFkYXRhLm5hbWUgPyBzYW5pdGl6ZUlucHV0KFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKG1ldGFkYXRhLm5hbWUpLm5vcm1hbGl6ZWRDb250ZW50LCAxMDApIDogdW5kZWZpbmVkLFxuICAgICAgZGVzY3JpcHRpb246IG1ldGFkYXRhLmRlc2NyaXB0aW9uID8gc2FuaXRpemVJbnB1dChVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShtZXRhZGF0YS5kZXNjcmlwdGlvbikubm9ybWFsaXplZENvbnRlbnQsIDUwMCkgOiB1bmRlZmluZWRcbiAgICB9O1xuXG4gICAgc3VwZXIoRWxlbWVudFR5cGUuU0tJTEwsIHNhbml0aXplZE1ldGFkYXRhLCBtZXRhZGF0YVNlcnZpY2UpO1xuICAgIHRoaXMubWV0YWRhdGFTZXJ2aWNlID0gbWV0YWRhdGFTZXJ2aWNlO1xuICAgIC8vIEVuc3VyZSBpbnN0cnVjdGlvbnMgaXMgYWx3YXlzIGEgc3RyaW5nLCBldmVuIGlmIGVtcHR5XG4gICAgLy8gVXNlIENvbnRlbnRWYWxpZGF0b3IgZm9yIG11bHRpLWxpbmUgY29udGVudCB0byBwcmVzZXJ2ZSBmb3JtYXR0aW5nIChuZXdsaW5lcywgdGFicylcbiAgICAvLyB3aGlsZSBzdGlsbCBkZXRlY3RpbmcgcHJvbXB0IGluamVjdGlvbiBhdHRhY2tzXG4gICAgaWYgKGluc3RydWN0aW9ucyAmJiBpbnN0cnVjdGlvbnMudHJpbSgpKSB7XG4gICAgICBjb25zdCBjb250ZW50VmFsaWRhdGlvbiA9IENvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVBbmRTYW5pdGl6ZShpbnN0cnVjdGlvbnMsIHsgbWF4TGVuZ3RoOiBTRUNVUklUWV9MSU1JVFMuTUFYX0NPTlRFTlRfTEVOR1RILCBjb250ZW50Q29udGV4dDogJ3NraWxsJyB9KTtcbiAgICAgIHRoaXMuaW5zdHJ1Y3Rpb25zID0gY29udGVudFZhbGlkYXRpb24uc2FuaXRpemVkQ29udGVudCB8fCAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnN0cnVjdGlvbnMgPSAnJztcbiAgICB9XG4gICAgdGhpcy5jb250ZW50ID0gY29udGVudDtcblxuICAgIC8vIEVuc3VyZSBza2lsbC1zcGVjaWZpYyBtZXRhZGF0YVxuICAgIHRoaXMubWV0YWRhdGEgPSB7XG4gICAgICAuLi50aGlzLm1ldGFkYXRhLFxuICAgICAgbGFuZ3VhZ2VzOiBtZXRhZGF0YS5sYW5ndWFnZXMgfHwgW10sXG4gICAgICBjb21wbGV4aXR5OiBtZXRhZGF0YS5jb21wbGV4aXR5IHx8ICdiZWdpbm5lcicsXG4gICAgICBkb21haW5zOiBtZXRhZGF0YS5kb21haW5zIHx8IFtdLFxuICAgICAgcHJlcmVxdWlzaXRlczogbWV0YWRhdGEucHJlcmVxdWlzaXRlcyB8fCBbXSxcbiAgICAgIHBhcmFtZXRlcnM6IG1ldGFkYXRhLnBhcmFtZXRlcnMgfHwgW10sXG4gICAgICBleGFtcGxlczogbWV0YWRhdGEuZXhhbXBsZXMgfHwgW10sXG4gICAgICBwcm9maWNpZW5jeV9sZXZlbDogbWV0YWRhdGEucHJvZmljaWVuY3lfbGV2ZWwgfHwgMFxuICAgIH07XG5cbiAgICAvLyBWYWxpZGF0ZSBwYXJhbWV0ZXIgZGVmaW5pdGlvbnNcbiAgICBpZiAodGhpcy5tZXRhZGF0YS5wYXJhbWV0ZXJzKSB7XG4gICAgICB0aGlzLm1ldGFkYXRhLnBhcmFtZXRlcnMgPSB0aGlzLm1ldGFkYXRhLnBhcmFtZXRlcnMubWFwKHBhcmFtID0+IHtcbiAgICAgICAgY29uc3Qgc2FuaXRpemVkOiBTa2lsbFBhcmFtZXRlciA9IHtcbiAgICAgICAgICAuLi5wYXJhbSxcbiAgICAgICAgICBuYW1lOiBzYW5pdGl6ZUlucHV0KFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHBhcmFtLm5hbWUpLm5vcm1hbGl6ZWRDb250ZW50LCA1MCksXG4gICAgICAgICAgZGVzY3JpcHRpb246IHNhbml0aXplSW5wdXQoVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUocGFyYW0uZGVzY3JpcHRpb24pLm5vcm1hbGl6ZWRDb250ZW50LCAyMDApXG4gICAgICAgIH07XG4gICAgICAgIC8vIE9ubHkgaW5jbHVkZSBvcHRpb25zIGlmIHRoZXkgZXhpc3QgKGF2b2lkIHVuZGVmaW5lZClcbiAgICAgICAgaWYgKHBhcmFtLm9wdGlvbnMpIHtcbiAgICAgICAgICBzYW5pdGl6ZWQub3B0aW9ucyA9IHBhcmFtLm9wdGlvbnMubWFwKG9wdCA9PiBzYW5pdGl6ZUlucHV0KG9wdCwgMTAwKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNhbml0aXplZDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgcGFyYW1ldGVyIHZhbHVlcyB3aXRoIGRlZmF1bHRzXG4gICAgdGhpcy5pbml0aWFsaXplUGFyYW1ldGVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgcGFyYW1ldGVycyB3aXRoIGRlZmF1bHQgdmFsdWVzXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpemVQYXJhbWV0ZXJzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1ldGFkYXRhLnBhcmFtZXRlcnMpIHtcbiAgICAgIHRoaXMubWV0YWRhdGEucGFyYW1ldGVycy5mb3JFYWNoKHBhcmFtID0+IHtcbiAgICAgICAgaWYgKHBhcmFtLmRlZmF1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMucGFyYW1ldGVycy5zZXQocGFyYW0ubmFtZSwgcGFyYW0uZGVmYXVsdCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBwYXJhbWV0ZXIgdmFsdWVcbiAgICogU0VDVVJJVFkgRklYICMxOiBDb21wcmVoZW5zaXZlIGlucHV0IHZhbGlkYXRpb24gZm9yIGFsbCBza2lsbCBwYXJhbWV0ZXJzXG4gICAqIFByZXZpb3VzbHk6IFBhcmFtZXRlcnMgd2VyZSBzZXQgd2l0aG91dCB2YWxpZGF0aW9uLCBjcmVhdGluZyBzZWN1cml0eSByaXNrc1xuICAgKiBOb3c6IEZ1bGwgdmFsaWRhdGlvbiBwaXBlbGluZSBpbmNsdWRpbmcgc2FuaXRpemF0aW9uLCB0eXBlIGNoZWNraW5nLCBhbmQgc2l6ZSBsaW1pdHNcbiAgICovXG4gIHNldFBhcmFtZXRlcihuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBDUklUSUNBTCBGSVg6IFNhbml0aXplIHBhcmFtZXRlciBuYW1lIHRvIHByZXZlbnQgaW5qZWN0aW9uIGF0dGFja3NcbiAgICBjb25zdCBzYW5pdGl6ZWROYW1lID0gc2FuaXRpemVJbnB1dChuYW1lLCA1MCk7XG4gICAgXG4gICAgY29uc3QgcGFyYW0gPSB0aGlzLm1ldGFkYXRhLnBhcmFtZXRlcnM/LmZpbmQocCA9PiBwLm5hbWUgPT09IHNhbml0aXplZE5hbWUpO1xuICAgIGlmICghcGFyYW0pIHtcbiAgICAgIC8vIFNFQ1VSSVRZIEZJWCAjMzogTG9nIGF1ZGl0IGV2ZW50cyBmb3Igc2VjdXJpdHkgbW9uaXRvcmluZ1xuICAgICAgLy8gVGhpcyBoZWxwcyBkZXRlY3QgcG90ZW50aWFsIGF0dGFjayBwYXR0ZXJucyBvciBtaXNjb25maWd1cmF0aW9uc1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnWUFNTF9QQVJTSU5HX1dBUk5JTkcnLFxuICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgIHNvdXJjZTogJ1NraWxsLnNldFBhcmFtZXRlcicsXG4gICAgICAgIGRldGFpbHM6IGBBdHRlbXB0IHRvIHNldCB1bmtub3duIHBhcmFtZXRlcjogJHtzYW5pdGl6ZWROYW1lfSBmb3Igc2tpbGw6ICR7dGhpcy5tZXRhZGF0YS5uYW1lfWBcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYXJhbWV0ZXIgJyR7c2FuaXRpemVkTmFtZX0nIG5vdCBmb3VuZCBpbiBza2lsbCBkZWZpbml0aW9uYCk7XG4gICAgfVxuXG4gICAgLy8gQ1JJVElDQUwgRklYOiBTYW5pdGl6ZSBhbmQgdmFsaWRhdGUgdGhlIHZhbHVlIGJhc2VkIG9uIHR5cGVcbiAgICBsZXQgc2FuaXRpemVkVmFsdWUgPSB2YWx1ZTtcbiAgICBcbiAgICBpZiAocGFyYW0udHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIFNFQ1VSSVRZIEZJWCAjMiAmICM1OiBOb3JtYWxpemUgVW5pY29kZSBhbmQgc2FuaXRpemUgc3RyaW5nIHZhbHVlc1xuICAgICAgLy8gUHJldmlvdXNseTogU3RyaW5nIHZhbHVlcyB3ZXJlIHVzZWQgZGlyZWN0bHkgd2l0aG91dCB2YWxpZGF0aW9uXG4gICAgICAvLyBOb3c6IEZ1bGwgdmFsaWRhdGlvbiBwaXBlbGluZTpcbiAgICAgIC8vIDEuIFVuaWNvZGUgbm9ybWFsaXphdGlvbiBwcmV2ZW50cyBob21vZ3JhcGggYXR0YWNrc1xuICAgICAgLy8gMi4gc2FuaXRpemVJbnB1dCgpIHN0cmlwcyBkYW5nZXJvdXMgSFRNTC9KUyBjb250ZW50XG4gICAgICAvLyAzLiBMZW5ndGggbGltaXRzIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93IGF0dGFja3NcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShTdHJpbmcodmFsdWUpKTtcbiAgICAgIHNhbml0aXplZFZhbHVlID0gc2FuaXRpemVJbnB1dChub3JtYWxpemVkLm5vcm1hbGl6ZWRDb250ZW50LCBwYXJhbS5tYXggfHwgMTAwMCk7XG4gICAgICBcbiAgICAgIC8vIFNFQ1VSSVRZIEZJWCAjNTogQWRkaXRpb25hbCBYU1MgcHJvdGVjdGlvblxuICAgICAgLy8gQ2hlY2sgZm9yIGNvbW1vbiBYU1MgcGF0dGVybnMgZXZlbiBhZnRlciBzYW5pdGl6YXRpb25cbiAgICAgIC8vIFRoaXMgcHJvdmlkZXMgZGVmZW5zZS1pbi1kZXB0aCBhZ2FpbnN0IHNvcGhpc3RpY2F0ZWQgYXR0YWNrc1xuICAgICAgaWYgKHNhbml0aXplZFZhbHVlLmluY2x1ZGVzKCc8c2NyaXB0JykgfHwgc2FuaXRpemVkVmFsdWUuaW5jbHVkZXMoJ2phdmFzY3JpcHQ6JykpIHtcbiAgICAgICAgLy8gU0VDVVJJVFkgRklYICMzOiBMb2cgaGlnaC1zZXZlcml0eSBzZWN1cml0eSBldmVudHNcbiAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgIHR5cGU6ICdDT05URU5UX0lOSkVDVElPTl9BVFRFTVBUJyxcbiAgICAgICAgICBzZXZlcml0eTogJ0hJR0gnLFxuICAgICAgICAgIHNvdXJjZTogJ1NraWxsLnNldFBhcmFtZXRlcicsXG4gICAgICAgICAgZGV0YWlsczogYFBvdGVudGlhbCBYU1MgYXR0ZW1wdCBpbiBza2lsbCBwYXJhbWV0ZXI6ICR7c2FuaXRpemVkTmFtZX0gZm9yIHNraWxsOiAke3RoaXMubWV0YWRhdGEubmFtZX1gXG4gICAgICAgIH0pO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBwYXJhbWV0ZXIgdmFsdWUnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUeXBlIHZhbGlkYXRpb25cbiAgICBpZiAoIXRoaXMudmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZShwYXJhbSwgc2FuaXRpemVkVmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAnJHtzYW5pdGl6ZWROYW1lfSc6IGV4cGVjdGVkICR7cGFyYW0udHlwZX1gKTtcbiAgICB9XG5cbiAgICAvLyBTRUNVUklUWSBGSVggIzQ6IE1lbW9yeSBtYW5hZ2VtZW50IC0gY2hlY2sgcGFyYW1ldGVyIGNvdW50XG4gICAgLy8gUHJldmlvdXNseTogTm8gbGltaXRzIG9uIHBhcmFtZXRlciBzdG9yYWdlLCBjb3VsZCBsZWFkIHRvIG1lbW9yeSBleGhhdXN0aW9uIGF0dGFja3NcbiAgICAvLyBOb3c6IEVuZm9yY2VkIGxpbWl0cyBwcmV2ZW50IGF0dGFja2VycyBmcm9tIGNvbnN1bWluZyB1bmxpbWl0ZWQgbWVtb3J5XG4gICAgaWYgKHRoaXMucGFyYW1ldGVycy5zaXplID49IHRoaXMuTUFYX1BBUkFNRVRFUl9DT1VOVCAmJiAhdGhpcy5wYXJhbWV0ZXJzLmhhcyhzYW5pdGl6ZWROYW1lKSkge1xuICAgICAgLy8gU0VDVVJJVFkgRklYICMzOiBMb2cgcmF0ZSBsaW1pdCB2aW9sYXRpb25zIGZvciBzZWN1cml0eSBtb25pdG9yaW5nXG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdSQVRFX0xJTUlUX0VYQ0VFREVEJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgICBzb3VyY2U6ICdTa2lsbC5zZXRQYXJhbWV0ZXInLFxuICAgICAgICBkZXRhaWxzOiBgUGFyYW1ldGVyIGxpbWl0IGV4Y2VlZGVkIGZvciBza2lsbDogJHt0aGlzLm1ldGFkYXRhLm5hbWV9LiBNYXg6ICR7dGhpcy5NQVhfUEFSQU1FVEVSX0NPVU5UfWBcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYXJhbWV0ZXIgbGltaXQgZXhjZWVkZWQuIE1heGltdW0gJHt0aGlzLk1BWF9QQVJBTUVURVJfQ09VTlR9IHBhcmFtZXRlcnMgYWxsb3dlZGApO1xuICAgIH1cbiAgICBcbiAgICAvLyBTRUNVUklUWSBGSVggIzQ6IENoZWNrIHBhcmFtZXRlciB2YWx1ZSBzaXplIGZvciBzdHJpbmdzXG4gICAgLy8gVGhpcyBwcmV2ZW50cyBhdHRhY2tlcnMgZnJvbSBzdG9yaW5nIG1hc3NpdmUgc3RyaW5ncyB0aGF0IGNvdWxkIGV4aGF1c3QgbWVtb3J5XG4gICAgaWYgKHBhcmFtLnR5cGUgPT09ICdzdHJpbmcnICYmIHNhbml0aXplZFZhbHVlLmxlbmd0aCA+IHRoaXMuTUFYX1BBUkFNRVRFUl9TSVpFKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBhcmFtZXRlciB2YWx1ZSB0b28gbGFyZ2UuIE1heGltdW0gJHt0aGlzLk1BWF9QQVJBTUVURVJfU0laRX0gY2hhcmFjdGVycyBhbGxvd2VkYCk7XG4gICAgfVxuXG4gICAgdGhpcy5wYXJhbWV0ZXJzLnNldChzYW5pdGl6ZWROYW1lLCBzYW5pdGl6ZWRWYWx1ZSk7XG4gICAgbG9nZ2VyLmRlYnVnKGBTZXQgcGFyYW1ldGVyICR7c2FuaXRpemVkTmFtZX0gPSAke3Nhbml0aXplZFZhbHVlfSBmb3Igc2tpbGwgJHt0aGlzLm1ldGFkYXRhLm5hbWV9YCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgcGFyYW1ldGVyIHZhbHVlXG4gICAqL1xuICBnZXRQYXJhbWV0ZXIobmFtZTogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbWV0ZXJzLmdldChuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHBhcmFtZXRlcnMgYXMgb2JqZWN0XG4gICAqL1xuICBnZXRBbGxQYXJhbWV0ZXJzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXModGhpcy5wYXJhbWV0ZXJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBwYXJhbWV0ZXIgdmFsdWUgYWdhaW5zdCBpdHMgZGVmaW5pdGlvblxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVBhcmFtZXRlclZhbHVlKHBhcmFtOiBTa2lsbFBhcmFtZXRlciwgdmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHN3aXRjaCAocGFyYW0udHlwZSkge1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG4gICAgICBjYXNlICdudW1iZXInOiB7XG4gICAgICAgIGNvbnN0IG51bSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgIGlmIChOdW1iZXIuaXNOYU4obnVtKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAocGFyYW0ubWluICE9PSB1bmRlZmluZWQgJiYgbnVtIDwgcGFyYW0ubWluKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChwYXJhbS5tYXggIT09IHVuZGVmaW5lZCAmJiBudW0gPiBwYXJhbS5tYXgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nO1xuICAgICAgY2FzZSAnZW51bSc6XG4gICAgICAgIHJldHVybiBwYXJhbS5vcHRpb25zPy5pbmNsdWRlcyhTdHJpbmcodmFsdWUpKSB8fCBmYWxzZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIHRoZSBza2lsbCB3aXRoIGN1cnJlbnQgcGFyYW1ldGVyc1xuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZShpbnB1dD86IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgbG9nZ2VyLmluZm8oYEV4ZWN1dGluZyBza2lsbDogJHt0aGlzLm1ldGFkYXRhLm5hbWV9YCk7XG4gICAgXG4gICAgLy8gVmFsaWRhdGUgcmVxdWlyZWQgcGFyYW1ldGVyc1xuICAgIGNvbnN0IG1pc3NpbmdSZXF1aXJlZCA9IHRoaXMubWV0YWRhdGEucGFyYW1ldGVyc1xuICAgICAgPy5maWx0ZXIocCA9PiBwLnJlcXVpcmVkICYmICF0aGlzLnBhcmFtZXRlcnMuaGFzKHAubmFtZSkpXG4gICAgICAubWFwKHAgPT4gcC5uYW1lKSB8fCBbXTtcbiAgICBcbiAgICBpZiAobWlzc2luZ1JlcXVpcmVkLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyByZXF1aXJlZCBwYXJhbWV0ZXJzOiAke21pc3NpbmdSZXF1aXJlZC5qb2luKCcsICcpfWApO1xuICAgIH1cblxuICAgIC8vIFNraWxscyBkb24ndCBoYXZlIGJ1aWx0LWluIGV4ZWN1dGlvbiBsb2dpYyAtIHRoaXMgd291bGQgYmUgaW1wbGVtZW50ZWRcbiAgICAvLyBieSBzcGVjaWZpYyBza2lsbCB0eXBlcyBvciB0aHJvdWdoIGEgcGx1Z2luIHN5c3RlbVxuICAgIGxvZ2dlci5kZWJ1ZyhgU2tpbGwgJHt0aGlzLm1ldGFkYXRhLm5hbWV9IGV4ZWN1dGVkIHdpdGggcGFyYW1ldGVyczpgLCB0aGlzLmdldEFsbFBhcmFtZXRlcnMoKSk7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIHNraWxsOiB0aGlzLm1ldGFkYXRhLm5hbWUsXG4gICAgICBwYXJhbWV0ZXJzOiB0aGlzLmdldEFsbFBhcmFtZXRlcnMoKSxcbiAgICAgIGlucHV0LFxuICAgICAgZXhlY3V0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU2tpbGwtc3BlY2lmaWMgdmFsaWRhdGlvblxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIHZhbGlkYXRlKCk6IEVsZW1lbnRWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHQgPSBzdXBlci52YWxpZGF0ZSgpO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgYXJyYXlzIGlmIG5vdCBwcmVzZW50XG4gICAgaWYgKCFyZXN1bHQuZXJyb3JzKSByZXN1bHQuZXJyb3JzID0gW107XG4gICAgaWYgKCFyZXN1bHQud2FybmluZ3MpIHJlc3VsdC53YXJuaW5ncyA9IFtdO1xuICAgIFxuICAgIC8vIEluc3RydWN0aW9ucyBzaG91bGQgbm90IGJlIGVtcHR5XG4gICAgaWYgKCF0aGlzLmluc3RydWN0aW9ucyB8fCB0aGlzLmluc3RydWN0aW9ucy50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXN1bHQuZXJyb3JzLnB1c2goe1xuICAgICAgICBmaWVsZDogJ2luc3RydWN0aW9ucycsXG4gICAgICAgIG1lc3NhZ2U6ICdTa2lsbCBpbnN0cnVjdGlvbnMgY2Fubm90IGJlIGVtcHR5JyxcbiAgICAgICAgY29kZTogJ0VNUFRZX0lOU1RSVUNUSU9OUydcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGNvbXBsZXhpdHkgbGV2ZWxcbiAgICBjb25zdCB2YWxpZENvbXBsZXhpdHkgPSBbJ2JlZ2lubmVyJywgJ2ludGVybWVkaWF0ZScsICdhZHZhbmNlZCcsICdleHBlcnQnXTtcbiAgICBpZiAodGhpcy5tZXRhZGF0YS5jb21wbGV4aXR5ICYmICF2YWxpZENvbXBsZXhpdHkuaW5jbHVkZXModGhpcy5tZXRhZGF0YS5jb21wbGV4aXR5KSkge1xuICAgICAgcmVzdWx0LmVycm9ycy5wdXNoKHtcbiAgICAgICAgZmllbGQ6ICdjb21wbGV4aXR5JyxcbiAgICAgICAgbWVzc2FnZTogYENvbXBsZXhpdHkgbXVzdCBiZSBvbmUgb2Y6ICR7dmFsaWRDb21wbGV4aXR5LmpvaW4oJywgJyl9YCxcbiAgICAgICAgY29kZTogJ0lOVkFMSURfQ09NUExFWElUWSdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHByb2ZpY2llbmN5IGxldmVsXG4gICAgaWYgKHRoaXMubWV0YWRhdGEucHJvZmljaWVuY3lfbGV2ZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRoaXMubWV0YWRhdGEucHJvZmljaWVuY3lfbGV2ZWwgPCAwIHx8IHRoaXMubWV0YWRhdGEucHJvZmljaWVuY3lfbGV2ZWwgPiAxMDApIHtcbiAgICAgICAgcmVzdWx0LmVycm9ycy5wdXNoKHtcbiAgICAgICAgICBmaWVsZDogJ3Byb2ZpY2llbmN5X2xldmVsJyxcbiAgICAgICAgICBtZXNzYWdlOiAnUHJvZmljaWVuY3kgbGV2ZWwgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEwMCcsXG4gICAgICAgICAgY29kZTogJ0lOVkFMSURfUFJPRklDSUVOQ1knXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHBhcmFtZXRlcnNcbiAgICBpZiAodGhpcy5tZXRhZGF0YS5wYXJhbWV0ZXJzKSB7XG4gICAgICB0aGlzLm1ldGFkYXRhLnBhcmFtZXRlcnMuZm9yRWFjaCgocGFyYW0sIGluZGV4KSA9PiB7XG4gICAgICAgIGlmICghcGFyYW0ubmFtZSB8fCBwYXJhbS5uYW1lLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgICAgICByZXN1bHQuZXJyb3JzIS5wdXNoKHtcbiAgICAgICAgICAgIGZpZWxkOiBgcGFyYW1ldGVyc1ske2luZGV4fV0ubmFtZWAsXG4gICAgICAgICAgICBtZXNzYWdlOiAnUGFyYW1ldGVyIG5hbWUgaXMgcmVxdWlyZWQnLFxuICAgICAgICAgICAgY29kZTogJ01JU1NJTkdfUEFSQU1FVEVSX05BTUUnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmIChwYXJhbS50eXBlID09PSAnZW51bScgJiYgKCFwYXJhbS5vcHRpb25zIHx8IHBhcmFtLm9wdGlvbnMubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgIHJlc3VsdC5lcnJvcnMhLnB1c2goe1xuICAgICAgICAgICAgZmllbGQ6IGBwYXJhbWV0ZXJzWyR7aW5kZXh9XS5vcHRpb25zYCxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdFbnVtIHBhcmFtZXRlciBtdXN0IGhhdmUgb3B0aW9ucyBkZWZpbmVkJyxcbiAgICAgICAgICAgIGNvZGU6ICdNSVNTSU5HX0VOVU1fT1BUSU9OUydcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gV2FybmluZ3MgZm9yIGJlc3QgcHJhY3RpY2VzXG4gICAgaWYgKCF0aGlzLm1ldGFkYXRhLmRvbWFpbnMgfHwgdGhpcy5tZXRhZGF0YS5kb21haW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmVzdWx0Lndhcm5pbmdzLnB1c2goe1xuICAgICAgICBmaWVsZDogJ2RvbWFpbnMnLFxuICAgICAgICBtZXNzYWdlOiAnQ29uc2lkZXIgYWRkaW5nIGRvbWFpbiBjYXRlZ29yaWVzIGZvciBiZXR0ZXIgb3JnYW5pemF0aW9uJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdsb3cnXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubWV0YWRhdGEuZXhhbXBsZXMgfHwgdGhpcy5tZXRhZGF0YS5leGFtcGxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJlc3VsdC53YXJuaW5ncy5wdXNoKHtcbiAgICAgICAgZmllbGQ6ICdleGFtcGxlcycsXG4gICAgICAgIG1lc3NhZ2U6ICdBZGRpbmcgdXNhZ2UgZXhhbXBsZXMgaW1wcm92ZXMgc2tpbGwgdXNhYmlsaXR5JyxcbiAgICAgICAgc2V2ZXJpdHk6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIHZhbGlkIGZsYWcgYmFzZWQgb24gZmluYWwgZXJyb3JzXG4gICAgcmVzdWx0LnZhbGlkID0gKHJlc3VsdC5lcnJvcnM/Lmxlbmd0aCB8fCAwKSA9PT0gMDtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIHRvIEpTT04gZm9ybWF0IGZvciBpbnRlcm5hbCB1c2UgYW5kIHRlc3RpbmdcbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBzZXJpYWxpemVUb0pTT04oKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICB2ZXJzaW9uOiB0aGlzLnZlcnNpb24sXG4gICAgICBtZXRhZGF0YTogdGhpcy5tZXRhZGF0YSxcbiAgICAgIGluc3RydWN0aW9uczogdGhpcy5pbnN0cnVjdGlvbnMsXG4gICAgICBjb250ZW50OiB0aGlzLmNvbnRlbnQsXG4gICAgICBwYXJhbWV0ZXJzOiB0aGlzLmdldEFsbFBhcmFtZXRlcnMoKSxcbiAgICAgIHJlZmVyZW5jZXM6IHRoaXMucmVmZXJlbmNlcyxcbiAgICAgIGV4dGVuc2lvbnM6IHRoaXMuZXh0ZW5zaW9ucyxcbiAgICAgIHJhdGluZ3M6IHRoaXMucmF0aW5nc1xuICAgIH07XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb250ZW50IGZvciBzZXJpYWxpemF0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZ2V0Q29udGVudCgpOiBzdHJpbmcge1xuICAgIGxldCBjb250ZW50ID0gYCMgJHt0aGlzLm1ldGFkYXRhLm5hbWV9XFxuXFxuYDtcbiAgICBjb250ZW50ICs9IGAke3RoaXMubWV0YWRhdGEuZGVzY3JpcHRpb259XFxuXFxuYDtcbiAgICBcbiAgICBpZiAodGhpcy5pbnN0cnVjdGlvbnMpIHtcbiAgICAgIGNvbnRlbnQgKz0gYCMjIEluc3RydWN0aW9uc1xcblxcbiR7dGhpcy5pbnN0cnVjdGlvbnN9XFxuXFxuYDtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5nZXRBbGxQYXJhbWV0ZXJzKCk7XG4gICAgaWYgKHBhcmFtcyAmJiBPYmplY3Qua2V5cyhwYXJhbXMpLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnRlbnQgKz0gYCMjIFBhcmFtZXRlcnNcXG5cXG5gO1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyYW1zKSkge1xuICAgICAgICBjb250ZW50ICs9IGAtICoqJHtrZXl9Kio6ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfVxcbmA7XG4gICAgICB9XG4gICAgICBjb250ZW50ICs9ICdcXG4nO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgc2tpbGwgdG8gbWFya2Rvd24gZm9ybWF0IHdpdGggWUFNTCBmcm9udG1hdHRlclxuICAgKiBGSVg6IENoYW5nZWQgZnJvbSBKU09OIHRvIG1hcmtkb3duIGZvciBHaXRIdWIgcG9ydGZvbGlvIGNvbXBhdGliaWxpdHlcbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBzZXJpYWxpemUoKTogc3RyaW5nIHtcbiAgICAvLyBBZGQgc2tpbGwtc3BlY2lmaWMgZGF0YSB0byBleHRlbnNpb25zIGZvciBmcm9udG1hdHRlclxuICAgIGNvbnN0IG9yaWdpbmFsRXh0ZW5zaW9ucyA9IHRoaXMuZXh0ZW5zaW9ucztcbiAgICB0aGlzLmV4dGVuc2lvbnMgPSB7XG4gICAgICAuLi5vcmlnaW5hbEV4dGVuc2lvbnMsXG4gICAgICBpbnN0cnVjdGlvbnM6IHRoaXMuaW5zdHJ1Y3Rpb25zLFxuICAgICAgcGFyYW1ldGVyczogdGhpcy5nZXRBbGxQYXJhbWV0ZXJzKClcbiAgICB9O1xuICAgIFxuICAgIC8vIFVzZSBiYXNlIGNsYXNzIHNlcmlhbGl6ZSB3aGljaCBub3cgb3V0cHV0cyBtYXJrZG93blxuICAgIGNvbnN0IHJlc3VsdCA9IHN1cGVyLnNlcmlhbGl6ZSgpO1xuICAgIFxuICAgIC8vIFJlc3RvcmUgb3JpZ2luYWwgZXh0ZW5zaW9uc1xuICAgIHRoaXMuZXh0ZW5zaW9ucyA9IG9yaWdpbmFsRXh0ZW5zaW9ucztcbiAgICBcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIHNraWxsIGZyb20gSlNPTiBmb3JtYXRcbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBkZXNlcmlhbGl6ZShkYXRhOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIFxuICAgICAgLy8gVXBkYXRlIG1ldGFkYXRhXG4gICAgICB0aGlzLm1ldGFkYXRhID0geyAuLi50aGlzLm1ldGFkYXRhLCAuLi5wYXJzZWQubWV0YWRhdGEgfTtcbiAgICAgIFxuICAgICAgLy8gVXBkYXRlIG90aGVyIHByb3BlcnRpZXNcbiAgICAgIHRoaXMuaW5zdHJ1Y3Rpb25zID0gcGFyc2VkLmluc3RydWN0aW9ucyB8fCAnJztcbiAgICAgIHRoaXMuY29udGVudCA9IHBhcnNlZC5jb250ZW50IHx8ICcnO1xuICAgICAgdGhpcy5yZWZlcmVuY2VzID0gcGFyc2VkLnJlZmVyZW5jZXMgfHwgW107XG4gICAgICB0aGlzLmV4dGVuc2lvbnMgPSBwYXJzZWQuZXh0ZW5zaW9ucyB8fCB7fTtcbiAgICAgIHRoaXMucmF0aW5ncyA9IHBhcnNlZC5yYXRpbmdzIHx8IHRoaXMucmF0aW5ncztcbiAgICAgIFxuICAgICAgLy8gVXBkYXRlIElEIGFuZCB2ZXJzaW9uIGlmIHByb3ZpZGVkXG4gICAgICBpZiAocGFyc2VkLmlkKSB0aGlzLmlkID0gcGFyc2VkLmlkO1xuICAgICAgaWYgKHBhcnNlZC52ZXJzaW9uKSB0aGlzLnZlcnNpb24gPSBwYXJzZWQudmVyc2lvbjtcbiAgICAgIFxuICAgICAgLy8gUmVzdG9yZSBwYXJhbWV0ZXJzXG4gICAgICBpZiAocGFyc2VkLnBhcmFtZXRlcnMpIHtcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLmNsZWFyKCk7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHBhcnNlZC5wYXJhbWV0ZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICB0aGlzLnBhcmFtZXRlcnMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdGhpcy5faXNEaXJ0eSA9IHRydWU7XG4gICAgICBsb2dnZXIuZGVidWcoYERlc2VyaWFsaXplZCBza2lsbDogJHt0aGlzLm1ldGFkYXRhLm5hbWV9YCk7XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZGVzZXJpYWxpemUgc2tpbGw6ICR7ZXJyb3J9YCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERlc2VyaWFsaXphdGlvbiBmYWlsZWQ6ICR7ZXJyb3J9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNraWxsIGFjdGl2YXRpb24gbGlmZWN5Y2xlXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgYWN0aXZhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nZ2VyLmluZm8oYEFjdGl2YXRpbmcgc2tpbGw6ICR7dGhpcy5tZXRhZGF0YS5uYW1lfSAoJHt0aGlzLmlkfSlgKTtcbiAgICBcbiAgICAvLyBWYWxpZGF0ZSB0aGF0IGFsbCByZXF1aXJlZCBwYXJhbWV0ZXJzIGFyZSBzZXRcbiAgICBjb25zdCB2YWxpZGF0aW9uID0gdGhpcy52YWxpZGF0ZSgpO1xuICAgIGlmICghdmFsaWRhdGlvbi52YWxpZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgYWN0aXZhdGUgc2tpbGwgd2l0aCB2YWxpZGF0aW9uIGVycm9yczogJHt2YWxpZGF0aW9uLmVycm9ycz8ubWFwKGUgPT4gZS5tZXNzYWdlKS5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgICBcbiAgICBhd2FpdCBzdXBlci5hY3RpdmF0ZT8uKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvbmUgdGhlIHNraWxsIHdpdGggZGlmZmVyZW50IHBhcmFtZXRlcnNcbiAgICovXG4gIGNsb25lKG5ld1BhcmFtZXRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogU2tpbGwge1xuICAgIGNvbnN0IGNsb25lZCA9IG5ldyBTa2lsbCh0aGlzLm1ldGFkYXRhLCB0aGlzLmluc3RydWN0aW9ucywgdGhpcy5tZXRhZGF0YVNlcnZpY2UsIHRoaXMuY29udGVudCk7XG5cbiAgICAvLyBDb3B5IGN1cnJlbnQgcGFyYW1ldGVyc1xuICAgIHRoaXMucGFyYW1ldGVycy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBjbG9uZWQucGFyYW1ldGVycy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBPdmVycmlkZSB3aXRoIG5ldyBwYXJhbWV0ZXJzIGlmIHByb3ZpZGVkXG4gICAgaWYgKG5ld1BhcmFtZXRlcnMpIHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKG5ld1BhcmFtZXRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBjbG9uZWQuc2V0UGFyYW1ldGVyKGtleSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsb25lZDtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFNraWxsIGRlYWN0aXZhdGlvbiBsaWZlY3ljbGVcbiAgICogU0VDVVJJVFkgRklYICM0OiBBdXRvbWF0aWNhbGx5IGNsZWFycyBwYXJhbWV0ZXJzIG9uIGRlYWN0aXZhdGlvblxuICAgKiB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyBpbiBsb25nLXJ1bm5pbmcgcHJvY2Vzc2VzXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgZGVhY3RpdmF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2dnZXIuaW5mbyhgRGVhY3RpdmF0aW5nIHNraWxsOiAke3RoaXMubWV0YWRhdGEubmFtZX0gKCR7dGhpcy5pZH0pYCk7XG4gICAgXG4gICAgLy8gU0VDVVJJVFkgRklYICM0OiBDbGVhciBwYXJhbWV0ZXJzIHRvIGZyZWUgbWVtb3J5IGFuZCBwcmV2ZW50IGxlYWtzXG4gICAgLy8gVGhpcyBlbnN1cmVzIHNraWxscyBkb24ndCByZXRhaW4gZGF0YSBhZnRlciBkZWFjdGl2YXRpb25cbiAgICB0aGlzLmNsZWFyUGFyYW1ldGVycygpO1xuICAgIFxuICAgIGF3YWl0IHN1cGVyLmRlYWN0aXZhdGU/LigpO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2xlYXIgYWxsIHBhcmFtZXRlcnMgKGZvciBtZW1vcnkgbWFuYWdlbWVudClcbiAgICogU0VDVVJJVFkgRklYICM0OiBBZGRlZCBtZXRob2QgdG8gY2xlYXIgcGFyYW1ldGVycyBhbmQgcHJldmVudCBtZW1vcnkgbGVha3NcbiAgICogUHJldmlvdXNseTogUGFyYW1ldGVycyBhY2N1bXVsYXRlZCBpbmRlZmluaXRlbHkgaW4gbG9uZy1ydW5uaW5nIHByb2Nlc3Nlc1xuICAgKiBOb3c6IFByb3ZpZGVzIGV4cGxpY2l0IGNsZWFudXAgbWVjaGFuaXNtIGNhbGxlZCBkdXJpbmcgZGVhY3RpdmF0aW9uXG4gICAqL1xuICBjbGVhclBhcmFtZXRlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5wYXJhbWV0ZXJzLmNsZWFyKCk7XG4gICAgbG9nZ2VyLmRlYnVnKGBDbGVhcmVkIGFsbCBwYXJhbWV0ZXJzIGZvciBza2lsbDogJHt0aGlzLm1ldGFkYXRhLm5hbWV9YCk7XG4gIH1cbn0iXX0=
442
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tpbGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvc2tpbGxzL1NraWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDakYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQW9DOUQsTUFBTSxPQUFPLEtBQU0sU0FBUSxXQUFXO0lBRXBDLHFGQUFxRjtJQUM5RSxVQUFVLEdBQXFCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFaEQsMkVBQTJFO0lBQzNFLDhFQUE4RTtJQUM5RSw4Q0FBOEM7SUFDN0IsbUJBQW1CLEdBQUcsR0FBRyxDQUFDO0lBQzFCLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxDQUFDLCtCQUErQjtJQUU1RSw0Q0FBNEM7SUFDM0IsZUFBZSxDQUFrQjtJQUVsRCxZQUFZLFFBQWdDLEVBQUUsZUFBdUIsRUFBRSxFQUFFLGVBQWdDLEVBQUUsVUFBa0IsRUFBRTtRQUM3SCw2REFBNkQ7UUFDN0QsNERBQTREO1FBQzVELDBFQUEwRTtRQUMxRSwyQ0FBMkM7UUFDM0MsOEJBQThCO1FBQzlCLDZCQUE2QjtRQUM3QixNQUFNLGlCQUFpQixHQUFHO1lBQ3hCLEdBQUcsUUFBUTtZQUNYLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUNqSCxXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDdkksQ0FBQztRQUVGLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO1FBQ3ZDLHdEQUF3RDtRQUN4RCxzRkFBc0Y7UUFDdEYsaURBQWlEO1FBQ2pELElBQUksWUFBWSxJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLE1BQU0saUJBQWlCLEdBQUcsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN6SixJQUFJLENBQUMsWUFBWSxHQUFHLGlCQUFpQixDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztRQUMvRCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUV2QixpQ0FBaUM7UUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRztZQUNkLEdBQUcsSUFBSSxDQUFDLFFBQVE7WUFDaEIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTLElBQUksRUFBRTtZQUNuQyxVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVUsSUFBSSxVQUFVO1lBQzdDLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxJQUFJLEVBQUU7WUFDL0IsYUFBYSxFQUFFLFFBQVEsQ0FBQyxhQUFhLElBQUksRUFBRTtZQUMzQyxVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVUsSUFBSSxFQUFFO1lBQ3JDLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUSxJQUFJLEVBQUU7WUFDakMsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLGlCQUFpQixJQUFJLENBQUM7U0FDbkQsQ0FBQztRQUVGLGlDQUFpQztRQUNqQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUM5RCxNQUFNLFNBQVMsR0FBbUI7b0JBQ2hDLEdBQUcsS0FBSztvQkFDUixJQUFJLEVBQUUsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO29CQUNqRixXQUFXLEVBQUUsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDO2lCQUNqRyxDQUFDO2dCQUNGLHVEQUF1RDtnQkFDdkQsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2xCLFNBQVMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hFLENBQUM7Z0JBQ0QsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNLLG9CQUFvQjtRQUMxQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN2QyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNqRCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsWUFBWSxDQUFDLElBQVksRUFBRSxLQUFVO1FBQ25DLHFFQUFxRTtRQUNyRSxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTlDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsNERBQTREO1lBQzVELG1FQUFtRTtZQUNuRSxlQUFlLENBQUMsZ0JBQWdCLENBQUM7Z0JBQy9CLElBQUksRUFBRSxzQkFBc0I7Z0JBQzVCLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixNQUFNLEVBQUUsb0JBQW9CO2dCQUM1QixPQUFPLEVBQUUscUNBQXFDLGFBQWEsZUFBZSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRTthQUMvRixDQUFDLENBQUM7WUFDSCxNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsYUFBYSxpQ0FBaUMsQ0FBQyxDQUFDO1FBQ2hGLENBQUM7UUFFRCw4REFBOEQ7UUFDOUQsSUFBSSxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBRTNCLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM1QixxRUFBcUU7WUFDckUsa0VBQWtFO1lBQ2xFLGlDQUFpQztZQUNqQyxzREFBc0Q7WUFDdEQsc0RBQXNEO1lBQ3RELG1EQUFtRDtZQUNuRCxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDN0QsY0FBYyxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUVoRiw2Q0FBNkM7WUFDN0Msd0RBQXdEO1lBQ3hELCtEQUErRDtZQUMvRCxJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO2dCQUNqRixxREFBcUQ7Z0JBQ3JELGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDL0IsSUFBSSxFQUFFLDJCQUEyQjtvQkFDakMsUUFBUSxFQUFFLE1BQU07b0JBQ2hCLE1BQU0sRUFBRSxvQkFBb0I7b0JBQzVCLE9BQU8sRUFBRSw2Q0FBNkMsYUFBYSxlQUFlLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFO2lCQUN2RyxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1lBQzNELENBQUM7UUFDSCxDQUFDO1FBRUQsa0JBQWtCO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDeEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsYUFBYSxlQUFlLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzVGLENBQUM7UUFFRCw2REFBNkQ7UUFDN0Qsc0ZBQXNGO1FBQ3RGLHlFQUF5RTtRQUN6RSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDNUYscUVBQXFFO1lBQ3JFLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDL0IsSUFBSSxFQUFFLHFCQUFxQjtnQkFDM0IsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLE1BQU0sRUFBRSxvQkFBb0I7Z0JBQzVCLE9BQU8sRUFBRSx1Q0FBdUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFVBQVUsSUFBSSxDQUFDLG1CQUFtQixFQUFFO2FBQ3ZHLENBQUMsQ0FBQztZQUNILE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLElBQUksQ0FBQyxtQkFBbUIscUJBQXFCLENBQUMsQ0FBQztRQUN0RyxDQUFDO1FBRUQsMERBQTBEO1FBQzFELGlGQUFpRjtRQUNqRixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDL0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsSUFBSSxDQUFDLGtCQUFrQixxQkFBcUIsQ0FBQyxDQUFDO1FBQ3RHLENBQUM7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDbkQsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsYUFBYSxNQUFNLGNBQWMsY0FBYyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDckcsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWSxDQUFDLElBQVk7UUFDdkIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0I7UUFDZCxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7T0FFRztJQUNLLHNCQUFzQixDQUFDLEtBQXFCLEVBQUUsS0FBVTtRQUM5RCxRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuQixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUM7WUFDbkMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUNkLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDMUIsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztvQkFBRSxPQUFPLEtBQUssQ0FBQztnQkFDcEMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUc7b0JBQUUsT0FBTyxLQUFLLENBQUM7Z0JBQzdELElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHO29CQUFFLE9BQU8sS0FBSyxDQUFDO2dCQUM3RCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFDRCxLQUFLLFNBQVM7Z0JBQ1osT0FBTyxPQUFPLEtBQUssS0FBSyxTQUFTLENBQUM7WUFDcEMsS0FBSyxNQUFNO2dCQUNULE9BQU8sS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO1lBQ3pEO2dCQUNFLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQVc7UUFDdkIsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRXRELCtCQUErQjtRQUMvQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVU7WUFDOUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3hELEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFMUIsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hGLENBQUM7UUFFRCx5RUFBeUU7UUFDekUscURBQXFEO1FBQ3JELE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksNEJBQTRCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUUvRixPQUFPO1lBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSTtZQUN6QixVQUFVLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ25DLEtBQUs7WUFDTCxXQUFXLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7U0FDdEMsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNhLFFBQVE7UUFDdEIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWhDLG1DQUFtQztRQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07WUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVE7WUFBRSxNQUFNLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUUzQyxtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ2pCLEtBQUssRUFBRSxjQUFjO2dCQUNyQixPQUFPLEVBQUUsb0NBQW9DO2dCQUM3QyxJQUFJLEVBQUUsb0JBQW9CO2FBQzNCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCw0QkFBNEI7UUFDNUIsTUFBTSxlQUFlLEdBQUcsQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMzRSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDcEYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ2pCLEtBQUssRUFBRSxZQUFZO2dCQUNuQixPQUFPLEVBQUUsOEJBQThCLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ25FLElBQUksRUFBRSxvQkFBb0I7YUFDM0IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELDZCQUE2QjtRQUM3QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDbEQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUNqRixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDakIsS0FBSyxFQUFFLG1CQUFtQjtvQkFDMUIsT0FBTyxFQUFFLDZDQUE2QztvQkFDdEQsSUFBSSxFQUFFLHFCQUFxQjtpQkFDNUIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFFRCxzQkFBc0I7UUFDdEIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDaEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztvQkFDNUMsTUFBTSxDQUFDLE1BQU8sQ0FBQyxJQUFJLENBQUM7d0JBQ2xCLEtBQUssRUFBRSxjQUFjLEtBQUssUUFBUTt3QkFDbEMsT0FBTyxFQUFFLDRCQUE0Qjt3QkFDckMsSUFBSSxFQUFFLHdCQUF3QjtxQkFDL0IsQ0FBQyxDQUFDO2dCQUNMLENBQUM7Z0JBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUM1RSxNQUFNLENBQUMsTUFBTyxDQUFDLElBQUksQ0FBQzt3QkFDbEIsS0FBSyxFQUFFLGNBQWMsS0FBSyxXQUFXO3dCQUNyQyxPQUFPLEVBQUUsMENBQTBDO3dCQUNuRCxJQUFJLEVBQUUsc0JBQXNCO3FCQUM3QixDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELDhCQUE4QjtRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pFLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNuQixLQUFLLEVBQUUsU0FBUztnQkFDaEIsT0FBTyxFQUFFLDJEQUEyRDtnQkFDcEUsUUFBUSxFQUFFLEtBQUs7YUFDaEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ25CLEtBQUssRUFBRSxVQUFVO2dCQUNqQixPQUFPLEVBQUUsZ0RBQWdEO2dCQUN6RCxRQUFRLEVBQUUsUUFBUTthQUNuQixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsOENBQThDO1FBQzlDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHO0lBQ2EsZUFBZTtRQUM3QixNQUFNLElBQUksR0FBRztZQUNYLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNYLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQy9CLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixVQUFVLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ25DLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQ3RCLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDZ0IsVUFBVTtRQUMzQixJQUFJLE9BQU8sR0FBRyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxNQUFNLENBQUM7UUFDNUMsT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLE1BQU0sQ0FBQztRQUU5QyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixPQUFPLElBQUksc0JBQXNCLElBQUksQ0FBQyxZQUFZLE1BQU0sQ0FBQztRQUMzRCxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDdkMsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDN0MsT0FBTyxJQUFJLG1CQUFtQixDQUFDO1lBQy9CLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ2xELE9BQU8sSUFBSSxPQUFPLEdBQUcsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDeEQsQ0FBQztZQUNELE9BQU8sSUFBSSxJQUFJLENBQUM7UUFDbEIsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7O09BR0c7SUFDYSxTQUFTO1FBQ3ZCLHdEQUF3RDtRQUN4RCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDM0MsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNoQixHQUFHLGtCQUFrQjtZQUNyQixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDL0IsVUFBVSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtTQUNwQyxDQUFDO1FBRUYsc0RBQXNEO1FBQ3RELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVqQyw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQztRQUVyQyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDYSxXQUFXLENBQUMsSUFBWTtRQUN0QyxJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRWhDLGtCQUFrQjtZQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBRXpELDBCQUEwQjtZQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDO1lBRTlDLG9DQUFvQztZQUNwQyxJQUFJLE1BQU0sQ0FBQyxFQUFFO2dCQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLElBQUksSUFBSTtnQkFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUVwRixxQkFBcUI7WUFDckIsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3hCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7b0JBQ3pELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDbEMsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDckIsTUFBTSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRTVELENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN0RCxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDYSxLQUFLLENBQUMsUUFBUTtRQUM1QixNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVwRSxnREFBZ0Q7UUFDaEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4SCxDQUFDO1FBRUQsTUFBTSxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsYUFBbUM7UUFDdkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRS9GLDBCQUEwQjtRQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNyQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7UUFFSCwyQ0FBMkM7UUFDM0MsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JELE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ2EsS0FBSyxDQUFDLFVBQVU7UUFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFdEUscUVBQXFFO1FBQ3JFLDJEQUEyRDtRQUMzRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFdkIsTUFBTSxLQUFLLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4QixNQUFNLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDMUUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTa2lsbCBlbGVtZW50IGNsYXNzIGltcGxlbWVudGluZyBJRWxlbWVudCBpbnRlcmZhY2UuXG4gKiBSZXByZXNlbnRzIGEgZGlzY3JldGUgY2FwYWJpbGl0eSBmb3Igc3BlY2lmaWMgdGFza3MuXG4gKiBcbiAqIFNFQ1VSSVRZIEZJWEVTIElNUExFTUVOVEVEIChQUiAjMzE5KTpcbiAqIDEuIENSSVRJQ0FMOiBBZGRlZCBjb21wcmVoZW5zaXZlIGlucHV0IHZhbGlkYXRpb24gZm9yIGFsbCBza2lsbCBwYXJhbWV0ZXJzXG4gKiAyLiBNRURJVU06IEltcGxlbWVudGVkIFVuaWNvZGUgbm9ybWFsaXphdGlvbiB0byBwcmV2ZW50IGhvbW9ncmFwaCBhdHRhY2tzXG4gKiAzLiBNRURJVU06IEFkZGVkIGF1ZGl0IGxvZ2dpbmcgZm9yIHNlY3VyaXR5IGV2ZW50cyB2aWEgU2VjdXJpdHlNb25pdG9yXG4gKiA0LiBNRURJVU06IEltcGxlbWVudGVkIG1lbW9yeSBtYW5hZ2VtZW50IHRvIHByZXZlbnQgdW5ib3VuZGVkIGdyb3d0aFxuICogNS4gTUVESVVNOiBBZGRlZCBYU1MgcHJvdGVjdGlvbiB0aHJvdWdoIGlucHV0IHNhbml0aXphdGlvblxuICovXG5cbmltcG9ydCB7IEJhc2VFbGVtZW50LCBub3JtYWxpemVWZXJzaW9uIH0gZnJvbSAnLi4vQmFzZUVsZW1lbnQuanMnO1xuaW1wb3J0IHsgSUVsZW1lbnQsIElFbGVtZW50TWV0YWRhdGEsIEVsZW1lbnRWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnLi4vLi4vdHlwZXMvZWxlbWVudHMvaW5kZXguanMnO1xuaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tICcuLi8uLi9wb3J0Zm9saW8vdHlwZXMuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IHNhbml0aXplSW5wdXQgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9JbnB1dFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5TW9uaXRvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3NlY3VyaXR5TW9uaXRvci5qcyc7XG5pbXBvcnQgeyBDb250ZW50VmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvY29udGVudFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBTRUNVUklUWV9MSU1JVFMgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvTWV0YWRhdGFTZXJ2aWNlLmpzJztcblxuLy8gRXh0ZW5kIElFbGVtZW50TWV0YWRhdGEgd2l0aCBza2lsbC1zcGVjaWZpYyBmaWVsZHNcbmV4cG9ydCBpbnRlcmZhY2UgU2tpbGxNZXRhZGF0YSBleHRlbmRzIElFbGVtZW50TWV0YWRhdGEge1xuICB0eXBlPzogRWxlbWVudFR5cGUuU0tJTEw7ICAgICAgICAgICAgICAgIC8vIFNraWxsIHR5cGUgY29uc3RyYWludCBmb3IgdHlwZSBzYWZldHlcbiAgbGFuZ3VhZ2VzPzogc3RyaW5nW107ICAgICAgICAgICAvLyBQcm9ncmFtbWluZy9zcG9rZW4gbGFuZ3VhZ2VzIHRoaXMgc2tpbGwgd29ya3Mgd2l0aFxuICBjb21wbGV4aXR5PzogJ2JlZ2lubmVyJyB8ICdpbnRlcm1lZGlhdGUnIHwgJ2FkdmFuY2VkJyB8ICdleHBlcnQnO1xuICBkb21haW5zPzogc3RyaW5nW107ICAgICAgICAgICAgIC8vIERvbWFpbiBjYXRlZ29yaWVzIChlLmcuLCB3ZWItZGV2LCBkYXRhLXNjaWVuY2UsIHdyaXRpbmcpXG4gIHByZXJlcXVpc2l0ZXM/OiBzdHJpbmdbXTsgICAgICAgLy8gUmVxdWlyZWQga25vd2xlZGdlIG9yIG90aGVyIHNraWxsc1xuICBwYXJhbWV0ZXJzPzogU2tpbGxQYXJhbWV0ZXJbXTsgIC8vIENvbmZpZ3VyYWJsZSBwYXJhbWV0ZXJzXG4gIGV4YW1wbGVzPzogU2tpbGxFeGFtcGxlW107ICAgICAgLy8gVXNhZ2UgZXhhbXBsZXNcbiAgY2VydGlmaWNhdGlvbj86IHN0cmluZzsgICAgICAgICAvLyBFeHRlcm5hbCBjZXJ0aWZpY2F0aW9uIG9yIHZhbGlkYXRpb25cbiAgcHJvZmljaWVuY3lfbGV2ZWw/OiBudW1iZXI7ICAgICAvLyAxLTEwMCBwcm9maWNpZW5jeSBsZXZlbFxuICB0cmlnZ2Vycz86IHN0cmluZ1tdOyAgICAgICAgICAgIC8vIEFjdGlvbiB2ZXJicyB0aGF0IHRyaWdnZXIgdGhpcyBza2lsbCAoZS5nLiwgXCJhbmFseXplXCIsIFwidmFsaWRhdGVcIiwgXCJvcHRpbWl6ZVwiKVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNraWxsUGFyYW1ldGVyIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2Jvb2xlYW4nIHwgJ2VudW0nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIGRlZmF1bHQ/OiBhbnk7XG4gIG9wdGlvbnM/OiBzdHJpbmdbXTsgIC8vIEZvciBlbnVtIHR5cGVcbiAgbWluPzogbnVtYmVyOyAgICAgICAgLy8gRm9yIG51bWJlciB0eXBlXG4gIG1heD86IG51bWJlcjsgICAgICAgIC8vIEZvciBudW1iZXIgdHlwZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNraWxsRXhhbXBsZSB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGlucHV0PzogYW55O1xuICBvdXRwdXQ/OiBhbnk7XG4gIGNvZGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBTa2lsbCBleHRlbmRzIEJhc2VFbGVtZW50IGltcGxlbWVudHMgSUVsZW1lbnQge1xuICBwdWJsaWMgZGVjbGFyZSBtZXRhZGF0YTogU2tpbGxNZXRhZGF0YTtcbiAgLy8gaW5zdHJ1Y3Rpb25zIGFuZCBjb250ZW50IGluaGVyaXRlZCBmcm9tIEJhc2VFbGVtZW50ICh2Mi4wIGR1YWwtZmllbGQgYXJjaGl0ZWN0dXJlKVxuICBwdWJsaWMgcGFyYW1ldGVyczogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoKTtcblxuICAvLyBTRUNVUklUWSBGSVggIzQ6IE1lbW9yeSBtYW5hZ2VtZW50IGNvbnN0YW50cyB0byBwcmV2ZW50IHVuYm91bmRlZCBncm93dGhcbiAgLy8gUHJldmlvdXNseTogTm8gbGltaXRzIG9uIHBhcmFtZXRlciBzdG9yYWdlLCBjb3VsZCBsZWFkIHRvIG1lbW9yeSBleGhhdXN0aW9uXG4gIC8vIE5vdzogRW5mb3JjZWQgbGltaXRzIG9uIGJvdGggY291bnQgYW5kIHNpemVcbiAgcHJpdmF0ZSByZWFkb25seSBNQVhfUEFSQU1FVEVSX0NPVU5UID0gMTAwO1xuICBwcml2YXRlIHJlYWRvbmx5IE1BWF9QQVJBTUVURVJfU0laRSA9IDEwMDAwOyAvLyBNYXggc2l6ZSBwZXIgcGFyYW1ldGVyIHZhbHVlXG5cbiAgLy8gU3RvcmUgTWV0YWRhdGFTZXJ2aWNlIGZvciBjbG9uZSBvcGVyYXRpb25cbiAgcHJpdmF0ZSByZWFkb25seSBtZXRhZGF0YVNlcnZpY2U6IE1ldGFkYXRhU2VydmljZTtcblxuICBjb25zdHJ1Y3RvcihtZXRhZGF0YTogUGFydGlhbDxTa2lsbE1ldGFkYXRhPiwgaW5zdHJ1Y3Rpb25zOiBzdHJpbmcgPSAnJywgbWV0YWRhdGFTZXJ2aWNlOiBNZXRhZGF0YVNlcnZpY2UsIGNvbnRlbnQ6IHN0cmluZyA9ICcnKSB7XG4gICAgLy8gU0VDVVJJVFkgRklYICMyOiBWYWxpZGF0ZSBhbmQgc2FuaXRpemUgQUxMIG1ldGFkYXRhIGZpZWxkc1xuICAgIC8vIFByZXZpb3VzbHk6IG1ldGFkYXRhIHdhcyB1c2VkIGRpcmVjdGx5IHdpdGhvdXQgdmFsaWRhdGlvblxuICAgIC8vIE5vdzogQWxsIHN0cmluZyBpbnB1dHMgYXJlIFVuaWNvZGUgbm9ybWFsaXplZCBhbmQgc2FuaXRpemVkIHRvIHByZXZlbnQ6XG4gICAgLy8gLSBYU1MgYXR0YWNrcyB0aHJvdWdoIG1hbGljaW91cyBtZXRhZGF0YVxuICAgIC8vIC0gVW5pY29kZSBob21vZ3JhcGggYXR0YWNrc1xuICAgIC8vIC0gQnVmZmVyIG92ZXJmbG93IGF0dGVtcHRzXG4gICAgY29uc3Qgc2FuaXRpemVkTWV0YWRhdGEgPSB7XG4gICAgICAuLi5tZXRhZGF0YSxcbiAgICAgIG5hbWU6IG1ldGFkYXRhLm5hbWUgPyBzYW5pdGl6ZUlucHV0KFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKG1ldGFkYXRhLm5hbWUpLm5vcm1hbGl6ZWRDb250ZW50LCAxMDApIDogdW5kZWZpbmVkLFxuICAgICAgZGVzY3JpcHRpb246IG1ldGFkYXRhLmRlc2NyaXB0aW9uID8gc2FuaXRpemVJbnB1dChVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShtZXRhZGF0YS5kZXNjcmlwdGlvbikubm9ybWFsaXplZENvbnRlbnQsIDUwMCkgOiB1bmRlZmluZWRcbiAgICB9O1xuXG4gICAgc3VwZXIoRWxlbWVudFR5cGUuU0tJTEwsIHNhbml0aXplZE1ldGFkYXRhLCBtZXRhZGF0YVNlcnZpY2UpO1xuICAgIHRoaXMubWV0YWRhdGFTZXJ2aWNlID0gbWV0YWRhdGFTZXJ2aWNlO1xuICAgIC8vIEVuc3VyZSBpbnN0cnVjdGlvbnMgaXMgYWx3YXlzIGEgc3RyaW5nLCBldmVuIGlmIGVtcHR5XG4gICAgLy8gVXNlIENvbnRlbnRWYWxpZGF0b3IgZm9yIG11bHRpLWxpbmUgY29udGVudCB0byBwcmVzZXJ2ZSBmb3JtYXR0aW5nIChuZXdsaW5lcywgdGFicylcbiAgICAvLyB3aGlsZSBzdGlsbCBkZXRlY3RpbmcgcHJvbXB0IGluamVjdGlvbiBhdHRhY2tzXG4gICAgaWYgKGluc3RydWN0aW9ucyAmJiBpbnN0cnVjdGlvbnMudHJpbSgpKSB7XG4gICAgICBjb25zdCBjb250ZW50VmFsaWRhdGlvbiA9IENvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVBbmRTYW5pdGl6ZShpbnN0cnVjdGlvbnMsIHsgbWF4TGVuZ3RoOiBTRUNVUklUWV9MSU1JVFMuTUFYX0NPTlRFTlRfTEVOR1RILCBjb250ZW50Q29udGV4dDogJ3NraWxsJyB9KTtcbiAgICAgIHRoaXMuaW5zdHJ1Y3Rpb25zID0gY29udGVudFZhbGlkYXRpb24uc2FuaXRpemVkQ29udGVudCB8fCAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnN0cnVjdGlvbnMgPSAnJztcbiAgICB9XG4gICAgdGhpcy5jb250ZW50ID0gY29udGVudDtcblxuICAgIC8vIEVuc3VyZSBza2lsbC1zcGVjaWZpYyBtZXRhZGF0YVxuICAgIHRoaXMubWV0YWRhdGEgPSB7XG4gICAgICAuLi50aGlzLm1ldGFkYXRhLFxuICAgICAgbGFuZ3VhZ2VzOiBtZXRhZGF0YS5sYW5ndWFnZXMgfHwgW10sXG4gICAgICBjb21wbGV4aXR5OiBtZXRhZGF0YS5jb21wbGV4aXR5IHx8ICdiZWdpbm5lcicsXG4gICAgICBkb21haW5zOiBtZXRhZGF0YS5kb21haW5zIHx8IFtdLFxuICAgICAgcHJlcmVxdWlzaXRlczogbWV0YWRhdGEucHJlcmVxdWlzaXRlcyB8fCBbXSxcbiAgICAgIHBhcmFtZXRlcnM6IG1ldGFkYXRhLnBhcmFtZXRlcnMgfHwgW10sXG4gICAgICBleGFtcGxlczogbWV0YWRhdGEuZXhhbXBsZXMgfHwgW10sXG4gICAgICBwcm9maWNpZW5jeV9sZXZlbDogbWV0YWRhdGEucHJvZmljaWVuY3lfbGV2ZWwgfHwgMFxuICAgIH07XG5cbiAgICAvLyBWYWxpZGF0ZSBwYXJhbWV0ZXIgZGVmaW5pdGlvbnNcbiAgICBpZiAodGhpcy5tZXRhZGF0YS5wYXJhbWV0ZXJzKSB7XG4gICAgICB0aGlzLm1ldGFkYXRhLnBhcmFtZXRlcnMgPSB0aGlzLm1ldGFkYXRhLnBhcmFtZXRlcnMubWFwKHBhcmFtID0+IHtcbiAgICAgICAgY29uc3Qgc2FuaXRpemVkOiBTa2lsbFBhcmFtZXRlciA9IHtcbiAgICAgICAgICAuLi5wYXJhbSxcbiAgICAgICAgICBuYW1lOiBzYW5pdGl6ZUlucHV0KFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHBhcmFtLm5hbWUpLm5vcm1hbGl6ZWRDb250ZW50LCA1MCksXG4gICAgICAgICAgZGVzY3JpcHRpb246IHNhbml0aXplSW5wdXQoVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUocGFyYW0uZGVzY3JpcHRpb24pLm5vcm1hbGl6ZWRDb250ZW50LCAyMDApXG4gICAgICAgIH07XG4gICAgICAgIC8vIE9ubHkgaW5jbHVkZSBvcHRpb25zIGlmIHRoZXkgZXhpc3QgKGF2b2lkIHVuZGVmaW5lZClcbiAgICAgICAgaWYgKHBhcmFtLm9wdGlvbnMpIHtcbiAgICAgICAgICBzYW5pdGl6ZWQub3B0aW9ucyA9IHBhcmFtLm9wdGlvbnMubWFwKG9wdCA9PiBzYW5pdGl6ZUlucHV0KG9wdCwgMTAwKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNhbml0aXplZDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgcGFyYW1ldGVyIHZhbHVlcyB3aXRoIGRlZmF1bHRzXG4gICAgdGhpcy5pbml0aWFsaXplUGFyYW1ldGVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgcGFyYW1ldGVycyB3aXRoIGRlZmF1bHQgdmFsdWVzXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpemVQYXJhbWV0ZXJzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1ldGFkYXRhLnBhcmFtZXRlcnMpIHtcbiAgICAgIHRoaXMubWV0YWRhdGEucGFyYW1ldGVycy5mb3JFYWNoKHBhcmFtID0+IHtcbiAgICAgICAgaWYgKHBhcmFtLmRlZmF1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMucGFyYW1ldGVycy5zZXQocGFyYW0ubmFtZSwgcGFyYW0uZGVmYXVsdCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBwYXJhbWV0ZXIgdmFsdWVcbiAgICogU0VDVVJJVFkgRklYICMxOiBDb21wcmVoZW5zaXZlIGlucHV0IHZhbGlkYXRpb24gZm9yIGFsbCBza2lsbCBwYXJhbWV0ZXJzXG4gICAqIFByZXZpb3VzbHk6IFBhcmFtZXRlcnMgd2VyZSBzZXQgd2l0aG91dCB2YWxpZGF0aW9uLCBjcmVhdGluZyBzZWN1cml0eSByaXNrc1xuICAgKiBOb3c6IEZ1bGwgdmFsaWRhdGlvbiBwaXBlbGluZSBpbmNsdWRpbmcgc2FuaXRpemF0aW9uLCB0eXBlIGNoZWNraW5nLCBhbmQgc2l6ZSBsaW1pdHNcbiAgICovXG4gIHNldFBhcmFtZXRlcihuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBDUklUSUNBTCBGSVg6IFNhbml0aXplIHBhcmFtZXRlciBuYW1lIHRvIHByZXZlbnQgaW5qZWN0aW9uIGF0dGFja3NcbiAgICBjb25zdCBzYW5pdGl6ZWROYW1lID0gc2FuaXRpemVJbnB1dChuYW1lLCA1MCk7XG4gICAgXG4gICAgY29uc3QgcGFyYW0gPSB0aGlzLm1ldGFkYXRhLnBhcmFtZXRlcnM/LmZpbmQocCA9PiBwLm5hbWUgPT09IHNhbml0aXplZE5hbWUpO1xuICAgIGlmICghcGFyYW0pIHtcbiAgICAgIC8vIFNFQ1VSSVRZIEZJWCAjMzogTG9nIGF1ZGl0IGV2ZW50cyBmb3Igc2VjdXJpdHkgbW9uaXRvcmluZ1xuICAgICAgLy8gVGhpcyBoZWxwcyBkZXRlY3QgcG90ZW50aWFsIGF0dGFjayBwYXR0ZXJucyBvciBtaXNjb25maWd1cmF0aW9uc1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnWUFNTF9QQVJTSU5HX1dBUk5JTkcnLFxuICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgIHNvdXJjZTogJ1NraWxsLnNldFBhcmFtZXRlcicsXG4gICAgICAgIGRldGFpbHM6IGBBdHRlbXB0IHRvIHNldCB1bmtub3duIHBhcmFtZXRlcjogJHtzYW5pdGl6ZWROYW1lfSBmb3Igc2tpbGw6ICR7dGhpcy5tZXRhZGF0YS5uYW1lfWBcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYXJhbWV0ZXIgJyR7c2FuaXRpemVkTmFtZX0nIG5vdCBmb3VuZCBpbiBza2lsbCBkZWZpbml0aW9uYCk7XG4gICAgfVxuXG4gICAgLy8gQ1JJVElDQUwgRklYOiBTYW5pdGl6ZSBhbmQgdmFsaWRhdGUgdGhlIHZhbHVlIGJhc2VkIG9uIHR5cGVcbiAgICBsZXQgc2FuaXRpemVkVmFsdWUgPSB2YWx1ZTtcbiAgICBcbiAgICBpZiAocGFyYW0udHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIFNFQ1VSSVRZIEZJWCAjMiAmICM1OiBOb3JtYWxpemUgVW5pY29kZSBhbmQgc2FuaXRpemUgc3RyaW5nIHZhbHVlc1xuICAgICAgLy8gUHJldmlvdXNseTogU3RyaW5nIHZhbHVlcyB3ZXJlIHVzZWQgZGlyZWN0bHkgd2l0aG91dCB2YWxpZGF0aW9uXG4gICAgICAvLyBOb3c6IEZ1bGwgdmFsaWRhdGlvbiBwaXBlbGluZTpcbiAgICAgIC8vIDEuIFVuaWNvZGUgbm9ybWFsaXphdGlvbiBwcmV2ZW50cyBob21vZ3JhcGggYXR0YWNrc1xuICAgICAgLy8gMi4gc2FuaXRpemVJbnB1dCgpIHN0cmlwcyBkYW5nZXJvdXMgSFRNTC9KUyBjb250ZW50XG4gICAgICAvLyAzLiBMZW5ndGggbGltaXRzIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93IGF0dGFja3NcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShTdHJpbmcodmFsdWUpKTtcbiAgICAgIHNhbml0aXplZFZhbHVlID0gc2FuaXRpemVJbnB1dChub3JtYWxpemVkLm5vcm1hbGl6ZWRDb250ZW50LCBwYXJhbS5tYXggfHwgMTAwMCk7XG4gICAgICBcbiAgICAgIC8vIFNFQ1VSSVRZIEZJWCAjNTogQWRkaXRpb25hbCBYU1MgcHJvdGVjdGlvblxuICAgICAgLy8gQ2hlY2sgZm9yIGNvbW1vbiBYU1MgcGF0dGVybnMgZXZlbiBhZnRlciBzYW5pdGl6YXRpb25cbiAgICAgIC8vIFRoaXMgcHJvdmlkZXMgZGVmZW5zZS1pbi1kZXB0aCBhZ2FpbnN0IHNvcGhpc3RpY2F0ZWQgYXR0YWNrc1xuICAgICAgaWYgKHNhbml0aXplZFZhbHVlLmluY2x1ZGVzKCc8c2NyaXB0JykgfHwgc2FuaXRpemVkVmFsdWUuaW5jbHVkZXMoJ2phdmFzY3JpcHQ6JykpIHtcbiAgICAgICAgLy8gU0VDVVJJVFkgRklYICMzOiBMb2cgaGlnaC1zZXZlcml0eSBzZWN1cml0eSBldmVudHNcbiAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgIHR5cGU6ICdDT05URU5UX0lOSkVDVElPTl9BVFRFTVBUJyxcbiAgICAgICAgICBzZXZlcml0eTogJ0hJR0gnLFxuICAgICAgICAgIHNvdXJjZTogJ1NraWxsLnNldFBhcmFtZXRlcicsXG4gICAgICAgICAgZGV0YWlsczogYFBvdGVudGlhbCBYU1MgYXR0ZW1wdCBpbiBza2lsbCBwYXJhbWV0ZXI6ICR7c2FuaXRpemVkTmFtZX0gZm9yIHNraWxsOiAke3RoaXMubWV0YWRhdGEubmFtZX1gXG4gICAgICAgIH0pO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBwYXJhbWV0ZXIgdmFsdWUnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUeXBlIHZhbGlkYXRpb25cbiAgICBpZiAoIXRoaXMudmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZShwYXJhbSwgc2FuaXRpemVkVmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAnJHtzYW5pdGl6ZWROYW1lfSc6IGV4cGVjdGVkICR7cGFyYW0udHlwZX1gKTtcbiAgICB9XG5cbiAgICAvLyBTRUNVUklUWSBGSVggIzQ6IE1lbW9yeSBtYW5hZ2VtZW50IC0gY2hlY2sgcGFyYW1ldGVyIGNvdW50XG4gICAgLy8gUHJldmlvdXNseTogTm8gbGltaXRzIG9uIHBhcmFtZXRlciBzdG9yYWdlLCBjb3VsZCBsZWFkIHRvIG1lbW9yeSBleGhhdXN0aW9uIGF0dGFja3NcbiAgICAvLyBOb3c6IEVuZm9yY2VkIGxpbWl0cyBwcmV2ZW50IGF0dGFja2VycyBmcm9tIGNvbnN1bWluZyB1bmxpbWl0ZWQgbWVtb3J5XG4gICAgaWYgKHRoaXMucGFyYW1ldGVycy5zaXplID49IHRoaXMuTUFYX1BBUkFNRVRFUl9DT1VOVCAmJiAhdGhpcy5wYXJhbWV0ZXJzLmhhcyhzYW5pdGl6ZWROYW1lKSkge1xuICAgICAgLy8gU0VDVVJJVFkgRklYICMzOiBMb2cgcmF0ZSBsaW1pdCB2aW9sYXRpb25zIGZvciBzZWN1cml0eSBtb25pdG9yaW5nXG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdSQVRFX0xJTUlUX0VYQ0VFREVEJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgICBzb3VyY2U6ICdTa2lsbC5zZXRQYXJhbWV0ZXInLFxuICAgICAgICBkZXRhaWxzOiBgUGFyYW1ldGVyIGxpbWl0IGV4Y2VlZGVkIGZvciBza2lsbDogJHt0aGlzLm1ldGFkYXRhLm5hbWV9LiBNYXg6ICR7dGhpcy5NQVhfUEFSQU1FVEVSX0NPVU5UfWBcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYXJhbWV0ZXIgbGltaXQgZXhjZWVkZWQuIE1heGltdW0gJHt0aGlzLk1BWF9QQVJBTUVURVJfQ09VTlR9IHBhcmFtZXRlcnMgYWxsb3dlZGApO1xuICAgIH1cbiAgICBcbiAgICAvLyBTRUNVUklUWSBGSVggIzQ6IENoZWNrIHBhcmFtZXRlciB2YWx1ZSBzaXplIGZvciBzdHJpbmdzXG4gICAgLy8gVGhpcyBwcmV2ZW50cyBhdHRhY2tlcnMgZnJvbSBzdG9yaW5nIG1hc3NpdmUgc3RyaW5ncyB0aGF0IGNvdWxkIGV4aGF1c3QgbWVtb3J5XG4gICAgaWYgKHBhcmFtLnR5cGUgPT09ICdzdHJpbmcnICYmIHNhbml0aXplZFZhbHVlLmxlbmd0aCA+IHRoaXMuTUFYX1BBUkFNRVRFUl9TSVpFKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBhcmFtZXRlciB2YWx1ZSB0b28gbGFyZ2UuIE1heGltdW0gJHt0aGlzLk1BWF9QQVJBTUVURVJfU0laRX0gY2hhcmFjdGVycyBhbGxvd2VkYCk7XG4gICAgfVxuXG4gICAgdGhpcy5wYXJhbWV0ZXJzLnNldChzYW5pdGl6ZWROYW1lLCBzYW5pdGl6ZWRWYWx1ZSk7XG4gICAgbG9nZ2VyLmRlYnVnKGBTZXQgcGFyYW1ldGVyICR7c2FuaXRpemVkTmFtZX0gPSAke3Nhbml0aXplZFZhbHVlfSBmb3Igc2tpbGwgJHt0aGlzLm1ldGFkYXRhLm5hbWV9YCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgcGFyYW1ldGVyIHZhbHVlXG4gICAqL1xuICBnZXRQYXJhbWV0ZXIobmFtZTogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbWV0ZXJzLmdldChuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHBhcmFtZXRlcnMgYXMgb2JqZWN0XG4gICAqL1xuICBnZXRBbGxQYXJhbWV0ZXJzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXModGhpcy5wYXJhbWV0ZXJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBwYXJhbWV0ZXIgdmFsdWUgYWdhaW5zdCBpdHMgZGVmaW5pdGlvblxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVBhcmFtZXRlclZhbHVlKHBhcmFtOiBTa2lsbFBhcmFtZXRlciwgdmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHN3aXRjaCAocGFyYW0udHlwZSkge1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG4gICAgICBjYXNlICdudW1iZXInOiB7XG4gICAgICAgIGNvbnN0IG51bSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgIGlmIChOdW1iZXIuaXNOYU4obnVtKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAocGFyYW0ubWluICE9PSB1bmRlZmluZWQgJiYgbnVtIDwgcGFyYW0ubWluKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChwYXJhbS5tYXggIT09IHVuZGVmaW5lZCAmJiBudW0gPiBwYXJhbS5tYXgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nO1xuICAgICAgY2FzZSAnZW51bSc6XG4gICAgICAgIHJldHVybiBwYXJhbS5vcHRpb25zPy5pbmNsdWRlcyhTdHJpbmcodmFsdWUpKSB8fCBmYWxzZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIHRoZSBza2lsbCB3aXRoIGN1cnJlbnQgcGFyYW1ldGVyc1xuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZShpbnB1dD86IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgbG9nZ2VyLmluZm8oYEV4ZWN1dGluZyBza2lsbDogJHt0aGlzLm1ldGFkYXRhLm5hbWV9YCk7XG4gICAgXG4gICAgLy8gVmFsaWRhdGUgcmVxdWlyZWQgcGFyYW1ldGVyc1xuICAgIGNvbnN0IG1pc3NpbmdSZXF1aXJlZCA9IHRoaXMubWV0YWRhdGEucGFyYW1ldGVyc1xuICAgICAgPy5maWx0ZXIocCA9PiBwLnJlcXVpcmVkICYmICF0aGlzLnBhcmFtZXRlcnMuaGFzKHAubmFtZSkpXG4gICAgICAubWFwKHAgPT4gcC5uYW1lKSB8fCBbXTtcbiAgICBcbiAgICBpZiAobWlzc2luZ1JlcXVpcmVkLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyByZXF1aXJlZCBwYXJhbWV0ZXJzOiAke21pc3NpbmdSZXF1aXJlZC5qb2luKCcsICcpfWApO1xuICAgIH1cblxuICAgIC8vIFNraWxscyBkb24ndCBoYXZlIGJ1aWx0LWluIGV4ZWN1dGlvbiBsb2dpYyAtIHRoaXMgd291bGQgYmUgaW1wbGVtZW50ZWRcbiAgICAvLyBieSBzcGVjaWZpYyBza2lsbCB0eXBlcyBvciB0aHJvdWdoIGEgcGx1Z2luIHN5c3RlbVxuICAgIGxvZ2dlci5kZWJ1ZyhgU2tpbGwgJHt0aGlzLm1ldGFkYXRhLm5hbWV9IGV4ZWN1dGVkIHdpdGggcGFyYW1ldGVyczpgLCB0aGlzLmdldEFsbFBhcmFtZXRlcnMoKSk7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIHNraWxsOiB0aGlzLm1ldGFkYXRhLm5hbWUsXG4gICAgICBwYXJhbWV0ZXJzOiB0aGlzLmdldEFsbFBhcmFtZXRlcnMoKSxcbiAgICAgIGlucHV0LFxuICAgICAgZXhlY3V0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU2tpbGwtc3BlY2lmaWMgdmFsaWRhdGlvblxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIHZhbGlkYXRlKCk6IEVsZW1lbnRWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHQgPSBzdXBlci52YWxpZGF0ZSgpO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgYXJyYXlzIGlmIG5vdCBwcmVzZW50XG4gICAgaWYgKCFyZXN1bHQuZXJyb3JzKSByZXN1bHQuZXJyb3JzID0gW107XG4gICAgaWYgKCFyZXN1bHQud2FybmluZ3MpIHJlc3VsdC53YXJuaW5ncyA9IFtdO1xuICAgIFxuICAgIC8vIEluc3RydWN0aW9ucyBzaG91bGQgbm90IGJlIGVtcHR5XG4gICAgaWYgKCF0aGlzLmluc3RydWN0aW9ucyB8fCB0aGlzLmluc3RydWN0aW9ucy50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXN1bHQuZXJyb3JzLnB1c2goe1xuICAgICAgICBmaWVsZDogJ2luc3RydWN0aW9ucycsXG4gICAgICAgIG1lc3NhZ2U6ICdTa2lsbCBpbnN0cnVjdGlvbnMgY2Fubm90IGJlIGVtcHR5JyxcbiAgICAgICAgY29kZTogJ0VNUFRZX0lOU1RSVUNUSU9OUydcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGNvbXBsZXhpdHkgbGV2ZWxcbiAgICBjb25zdCB2YWxpZENvbXBsZXhpdHkgPSBbJ2JlZ2lubmVyJywgJ2ludGVybWVkaWF0ZScsICdhZHZhbmNlZCcsICdleHBlcnQnXTtcbiAgICBpZiAodGhpcy5tZXRhZGF0YS5jb21wbGV4aXR5ICYmICF2YWxpZENvbXBsZXhpdHkuaW5jbHVkZXModGhpcy5tZXRhZGF0YS5jb21wbGV4aXR5KSkge1xuICAgICAgcmVzdWx0LmVycm9ycy5wdXNoKHtcbiAgICAgICAgZmllbGQ6ICdjb21wbGV4aXR5JyxcbiAgICAgICAgbWVzc2FnZTogYENvbXBsZXhpdHkgbXVzdCBiZSBvbmUgb2Y6ICR7dmFsaWRDb21wbGV4aXR5LmpvaW4oJywgJyl9YCxcbiAgICAgICAgY29kZTogJ0lOVkFMSURfQ09NUExFWElUWSdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHByb2ZpY2llbmN5IGxldmVsXG4gICAgaWYgKHRoaXMubWV0YWRhdGEucHJvZmljaWVuY3lfbGV2ZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRoaXMubWV0YWRhdGEucHJvZmljaWVuY3lfbGV2ZWwgPCAwIHx8IHRoaXMubWV0YWRhdGEucHJvZmljaWVuY3lfbGV2ZWwgPiAxMDApIHtcbiAgICAgICAgcmVzdWx0LmVycm9ycy5wdXNoKHtcbiAgICAgICAgICBmaWVsZDogJ3Byb2ZpY2llbmN5X2xldmVsJyxcbiAgICAgICAgICBtZXNzYWdlOiAnUHJvZmljaWVuY3kgbGV2ZWwgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEwMCcsXG4gICAgICAgICAgY29kZTogJ0lOVkFMSURfUFJPRklDSUVOQ1knXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHBhcmFtZXRlcnNcbiAgICBpZiAodGhpcy5tZXRhZGF0YS5wYXJhbWV0ZXJzKSB7XG4gICAgICB0aGlzLm1ldGFkYXRhLnBhcmFtZXRlcnMuZm9yRWFjaCgocGFyYW0sIGluZGV4KSA9PiB7XG4gICAgICAgIGlmICghcGFyYW0ubmFtZSB8fCBwYXJhbS5uYW1lLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgICAgICByZXN1bHQuZXJyb3JzIS5wdXNoKHtcbiAgICAgICAgICAgIGZpZWxkOiBgcGFyYW1ldGVyc1ske2luZGV4fV0ubmFtZWAsXG4gICAgICAgICAgICBtZXNzYWdlOiAnUGFyYW1ldGVyIG5hbWUgaXMgcmVxdWlyZWQnLFxuICAgICAgICAgICAgY29kZTogJ01JU1NJTkdfUEFSQU1FVEVSX05BTUUnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmIChwYXJhbS50eXBlID09PSAnZW51bScgJiYgKCFwYXJhbS5vcHRpb25zIHx8IHBhcmFtLm9wdGlvbnMubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgIHJlc3VsdC5lcnJvcnMhLnB1c2goe1xuICAgICAgICAgICAgZmllbGQ6IGBwYXJhbWV0ZXJzWyR7aW5kZXh9XS5vcHRpb25zYCxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdFbnVtIHBhcmFtZXRlciBtdXN0IGhhdmUgb3B0aW9ucyBkZWZpbmVkJyxcbiAgICAgICAgICAgIGNvZGU6ICdNSVNTSU5HX0VOVU1fT1BUSU9OUydcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gV2FybmluZ3MgZm9yIGJlc3QgcHJhY3RpY2VzXG4gICAgaWYgKCF0aGlzLm1ldGFkYXRhLmRvbWFpbnMgfHwgdGhpcy5tZXRhZGF0YS5kb21haW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmVzdWx0Lndhcm5pbmdzLnB1c2goe1xuICAgICAgICBmaWVsZDogJ2RvbWFpbnMnLFxuICAgICAgICBtZXNzYWdlOiAnQ29uc2lkZXIgYWRkaW5nIGRvbWFpbiBjYXRlZ29yaWVzIGZvciBiZXR0ZXIgb3JnYW5pemF0aW9uJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdsb3cnXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubWV0YWRhdGEuZXhhbXBsZXMgfHwgdGhpcy5tZXRhZGF0YS5leGFtcGxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJlc3VsdC53YXJuaW5ncy5wdXNoKHtcbiAgICAgICAgZmllbGQ6ICdleGFtcGxlcycsXG4gICAgICAgIG1lc3NhZ2U6ICdBZGRpbmcgdXNhZ2UgZXhhbXBsZXMgaW1wcm92ZXMgc2tpbGwgdXNhYmlsaXR5JyxcbiAgICAgICAgc2V2ZXJpdHk6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIHZhbGlkIGZsYWcgYmFzZWQgb24gZmluYWwgZXJyb3JzXG4gICAgcmVzdWx0LnZhbGlkID0gKHJlc3VsdC5lcnJvcnM/Lmxlbmd0aCB8fCAwKSA9PT0gMDtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIHRvIEpTT04gZm9ybWF0IGZvciBpbnRlcm5hbCB1c2UgYW5kIHRlc3RpbmdcbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBzZXJpYWxpemVUb0pTT04oKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICB2ZXJzaW9uOiB0aGlzLnZlcnNpb24sXG4gICAgICBtZXRhZGF0YTogdGhpcy5tZXRhZGF0YSxcbiAgICAgIGluc3RydWN0aW9uczogdGhpcy5pbnN0cnVjdGlvbnMsXG4gICAgICBjb250ZW50OiB0aGlzLmNvbnRlbnQsXG4gICAgICBwYXJhbWV0ZXJzOiB0aGlzLmdldEFsbFBhcmFtZXRlcnMoKSxcbiAgICAgIHJlZmVyZW5jZXM6IHRoaXMucmVmZXJlbmNlcyxcbiAgICAgIGV4dGVuc2lvbnM6IHRoaXMuZXh0ZW5zaW9ucyxcbiAgICAgIHJhdGluZ3M6IHRoaXMucmF0aW5nc1xuICAgIH07XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb250ZW50IGZvciBzZXJpYWxpemF0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZ2V0Q29udGVudCgpOiBzdHJpbmcge1xuICAgIGxldCBjb250ZW50ID0gYCMgJHt0aGlzLm1ldGFkYXRhLm5hbWV9XFxuXFxuYDtcbiAgICBjb250ZW50ICs9IGAke3RoaXMubWV0YWRhdGEuZGVzY3JpcHRpb259XFxuXFxuYDtcbiAgICBcbiAgICBpZiAodGhpcy5pbnN0cnVjdGlvbnMpIHtcbiAgICAgIGNvbnRlbnQgKz0gYCMjIEluc3RydWN0aW9uc1xcblxcbiR7dGhpcy5pbnN0cnVjdGlvbnN9XFxuXFxuYDtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5nZXRBbGxQYXJhbWV0ZXJzKCk7XG4gICAgaWYgKHBhcmFtcyAmJiBPYmplY3Qua2V5cyhwYXJhbXMpLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnRlbnQgKz0gYCMjIFBhcmFtZXRlcnNcXG5cXG5gO1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyYW1zKSkge1xuICAgICAgICBjb250ZW50ICs9IGAtICoqJHtrZXl9Kio6ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfVxcbmA7XG4gICAgICB9XG4gICAgICBjb250ZW50ICs9ICdcXG4nO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgc2tpbGwgdG8gbWFya2Rvd24gZm9ybWF0IHdpdGggWUFNTCBmcm9udG1hdHRlclxuICAgKiBGSVg6IENoYW5nZWQgZnJvbSBKU09OIHRvIG1hcmtkb3duIGZvciBHaXRIdWIgcG9ydGZvbGlvIGNvbXBhdGliaWxpdHlcbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBzZXJpYWxpemUoKTogc3RyaW5nIHtcbiAgICAvLyBBZGQgc2tpbGwtc3BlY2lmaWMgZGF0YSB0byBleHRlbnNpb25zIGZvciBmcm9udG1hdHRlclxuICAgIGNvbnN0IG9yaWdpbmFsRXh0ZW5zaW9ucyA9IHRoaXMuZXh0ZW5zaW9ucztcbiAgICB0aGlzLmV4dGVuc2lvbnMgPSB7XG4gICAgICAuLi5vcmlnaW5hbEV4dGVuc2lvbnMsXG4gICAgICBpbnN0cnVjdGlvbnM6IHRoaXMuaW5zdHJ1Y3Rpb25zLFxuICAgICAgcGFyYW1ldGVyczogdGhpcy5nZXRBbGxQYXJhbWV0ZXJzKClcbiAgICB9O1xuICAgIFxuICAgIC8vIFVzZSBiYXNlIGNsYXNzIHNlcmlhbGl6ZSB3aGljaCBub3cgb3V0cHV0cyBtYXJrZG93blxuICAgIGNvbnN0IHJlc3VsdCA9IHN1cGVyLnNlcmlhbGl6ZSgpO1xuICAgIFxuICAgIC8vIFJlc3RvcmUgb3JpZ2luYWwgZXh0ZW5zaW9uc1xuICAgIHRoaXMuZXh0ZW5zaW9ucyA9IG9yaWdpbmFsRXh0ZW5zaW9ucztcbiAgICBcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIHNraWxsIGZyb20gSlNPTiBmb3JtYXRcbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBkZXNlcmlhbGl6ZShkYXRhOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIFxuICAgICAgLy8gVXBkYXRlIG1ldGFkYXRhXG4gICAgICB0aGlzLm1ldGFkYXRhID0geyAuLi50aGlzLm1ldGFkYXRhLCAuLi5wYXJzZWQubWV0YWRhdGEgfTtcbiAgICAgIFxuICAgICAgLy8gVXBkYXRlIG90aGVyIHByb3BlcnRpZXNcbiAgICAgIHRoaXMuaW5zdHJ1Y3Rpb25zID0gcGFyc2VkLmluc3RydWN0aW9ucyB8fCAnJztcbiAgICAgIHRoaXMuY29udGVudCA9IHBhcnNlZC5jb250ZW50IHx8ICcnO1xuICAgICAgdGhpcy5yZWZlcmVuY2VzID0gcGFyc2VkLnJlZmVyZW5jZXMgfHwgW107XG4gICAgICB0aGlzLmV4dGVuc2lvbnMgPSBwYXJzZWQuZXh0ZW5zaW9ucyB8fCB7fTtcbiAgICAgIHRoaXMucmF0aW5ncyA9IHBhcnNlZC5yYXRpbmdzIHx8IHRoaXMucmF0aW5ncztcbiAgICAgIFxuICAgICAgLy8gVXBkYXRlIElEIGFuZCB2ZXJzaW9uIGlmIHByb3ZpZGVkXG4gICAgICBpZiAocGFyc2VkLmlkKSB0aGlzLmlkID0gcGFyc2VkLmlkO1xuICAgICAgaWYgKHBhcnNlZC52ZXJzaW9uICE9IG51bGwpIHRoaXMudmVyc2lvbiA9IG5vcm1hbGl6ZVZlcnNpb24oU3RyaW5nKHBhcnNlZC52ZXJzaW9uKSk7XG4gICAgICBcbiAgICAgIC8vIFJlc3RvcmUgcGFyYW1ldGVyc1xuICAgICAgaWYgKHBhcnNlZC5wYXJhbWV0ZXJzKSB7XG4gICAgICAgIHRoaXMucGFyYW1ldGVycy5jbGVhcigpO1xuICAgICAgICBPYmplY3QuZW50cmllcyhwYXJzZWQucGFyYW1ldGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHRoaXMuX2lzRGlydHkgPSB0cnVlO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBEZXNlcmlhbGl6ZWQgc2tpbGw6ICR7dGhpcy5tZXRhZGF0YS5uYW1lfWApO1xuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGRlc2VyaWFsaXplIHNraWxsOiAke2Vycm9yfWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEZXNlcmlhbGl6YXRpb24gZmFpbGVkOiAke2Vycm9yfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTa2lsbCBhY3RpdmF0aW9uIGxpZmVjeWNsZVxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIGFjdGl2YXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZ2dlci5pbmZvKGBBY3RpdmF0aW5nIHNraWxsOiAke3RoaXMubWV0YWRhdGEubmFtZX0gKCR7dGhpcy5pZH0pYCk7XG4gICAgXG4gICAgLy8gVmFsaWRhdGUgdGhhdCBhbGwgcmVxdWlyZWQgcGFyYW1ldGVycyBhcmUgc2V0XG4gICAgY29uc3QgdmFsaWRhdGlvbiA9IHRoaXMudmFsaWRhdGUoKTtcbiAgICBpZiAoIXZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGFjdGl2YXRlIHNraWxsIHdpdGggdmFsaWRhdGlvbiBlcnJvcnM6ICR7dmFsaWRhdGlvbi5lcnJvcnM/Lm1hcChlID0+IGUubWVzc2FnZSkuam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgXG4gICAgYXdhaXQgc3VwZXIuYWN0aXZhdGU/LigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb25lIHRoZSBza2lsbCB3aXRoIGRpZmZlcmVudCBwYXJhbWV0ZXJzXG4gICAqL1xuICBjbG9uZShuZXdQYXJhbWV0ZXJzPzogUmVjb3JkPHN0cmluZywgYW55Pik6IFNraWxsIHtcbiAgICBjb25zdCBjbG9uZWQgPSBuZXcgU2tpbGwodGhpcy5tZXRhZGF0YSwgdGhpcy5pbnN0cnVjdGlvbnMsIHRoaXMubWV0YWRhdGFTZXJ2aWNlLCB0aGlzLmNvbnRlbnQpO1xuXG4gICAgLy8gQ29weSBjdXJyZW50IHBhcmFtZXRlcnNcbiAgICB0aGlzLnBhcmFtZXRlcnMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgY2xvbmVkLnBhcmFtZXRlcnMuc2V0KGtleSwgdmFsdWUpO1xuICAgIH0pO1xuXG4gICAgLy8gT3ZlcnJpZGUgd2l0aCBuZXcgcGFyYW1ldGVycyBpZiBwcm92aWRlZFxuICAgIGlmIChuZXdQYXJhbWV0ZXJzKSB7XG4gICAgICBPYmplY3QuZW50cmllcyhuZXdQYXJhbWV0ZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgY2xvbmVkLnNldFBhcmFtZXRlcihrZXksIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBjbG9uZWQ7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTa2lsbCBkZWFjdGl2YXRpb24gbGlmZWN5Y2xlXG4gICAqIFNFQ1VSSVRZIEZJWCAjNDogQXV0b21hdGljYWxseSBjbGVhcnMgcGFyYW1ldGVycyBvbiBkZWFjdGl2YXRpb25cbiAgICogdG8gcHJldmVudCBtZW1vcnkgbGVha3MgaW4gbG9uZy1ydW5uaW5nIHByb2Nlc3Nlc1xuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIGRlYWN0aXZhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nZ2VyLmluZm8oYERlYWN0aXZhdGluZyBza2lsbDogJHt0aGlzLm1ldGFkYXRhLm5hbWV9ICgke3RoaXMuaWR9KWApO1xuICAgIFxuICAgIC8vIFNFQ1VSSVRZIEZJWCAjNDogQ2xlYXIgcGFyYW1ldGVycyB0byBmcmVlIG1lbW9yeSBhbmQgcHJldmVudCBsZWFrc1xuICAgIC8vIFRoaXMgZW5zdXJlcyBza2lsbHMgZG9uJ3QgcmV0YWluIGRhdGEgYWZ0ZXIgZGVhY3RpdmF0aW9uXG4gICAgdGhpcy5jbGVhclBhcmFtZXRlcnMoKTtcbiAgICBcbiAgICBhd2FpdCBzdXBlci5kZWFjdGl2YXRlPy4oKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENsZWFyIGFsbCBwYXJhbWV0ZXJzIChmb3IgbWVtb3J5IG1hbmFnZW1lbnQpXG4gICAqIFNFQ1VSSVRZIEZJWCAjNDogQWRkZWQgbWV0aG9kIHRvIGNsZWFyIHBhcmFtZXRlcnMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzXG4gICAqIFByZXZpb3VzbHk6IFBhcmFtZXRlcnMgYWNjdW11bGF0ZWQgaW5kZWZpbml0ZWx5IGluIGxvbmctcnVubmluZyBwcm9jZXNzZXNcbiAgICogTm93OiBQcm92aWRlcyBleHBsaWNpdCBjbGVhbnVwIG1lY2hhbmlzbSBjYWxsZWQgZHVyaW5nIGRlYWN0aXZhdGlvblxuICAgKi9cbiAgY2xlYXJQYXJhbWV0ZXJzKCk6IHZvaWQge1xuICAgIHRoaXMucGFyYW1ldGVycy5jbGVhcigpO1xuICAgIGxvZ2dlci5kZWJ1ZyhgQ2xlYXJlZCBhbGwgcGFyYW1ldGVycyBmb3Igc2tpbGw6ICR7dGhpcy5tZXRhZGF0YS5uYW1lfWApO1xuICB9XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"Template.d.ts","sourceRoot":"","sources":["../../../src/elements/templates/Template.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Template.d.ts","sourceRoot":"","sources":["../../../src/elements/templates/Template.ts"],"names":[],"mappings":"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"}