@dollhousemcp/mcp-server 1.9.13 → 1.9.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.
- package/CHANGELOG.md +48 -0
- package/README.github.md +54 -0
- package/README.md.backup +1241 -49
- package/dist/cache/CollectionCache.js +2 -2
- package/dist/collection/CollectionIndexManager.js +3 -3
- package/dist/config/ConfigWizard.js +3 -3
- package/dist/config/indicator-config.js +2 -2
- package/dist/config/portfolio-constants.js +12 -12
- package/dist/elements/BaseElement.js +7 -7
- package/dist/elements/FeedbackProcessor.d.ts +7 -0
- package/dist/elements/FeedbackProcessor.d.ts.map +1 -1
- package/dist/elements/FeedbackProcessor.js +67 -14
- package/dist/elements/agents/AgentManager.js +6 -6
- package/dist/elements/memories/Memory.js +4 -4
- package/dist/elements/memories/MemoryManager.js +3 -3
- package/dist/elements/memories/utils.js +3 -3
- package/dist/elements/skills/Skill.js +2 -2
- package/dist/elements/skills/SkillManager.js +2 -2
- package/dist/elements/templates/Template.d.ts.map +1 -1
- package/dist/elements/templates/Template.js +38 -14
- package/dist/elements/templates/TemplateManager.js +2 -2
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/handlers/ConfigHandler.js +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -16
- package/dist/persona/PersonaElementManager.js +3 -3
- package/dist/persona/PersonaManager.js +2 -2
- package/dist/persona/export-import/PersonaImporter.js +3 -3
- package/dist/portfolio/DefaultElementProvider.d.ts +12 -0
- package/dist/portfolio/DefaultElementProvider.d.ts.map +1 -1
- package/dist/portfolio/DefaultElementProvider.js +23 -6
- package/dist/portfolio/GitHubPortfolioIndexer.js +2 -2
- package/dist/portfolio/MigrationManager.js +2 -2
- package/dist/portfolio/NLPScoringManager.js +2 -2
- package/dist/portfolio/PortfolioManager.d.ts +5 -0
- package/dist/portfolio/PortfolioManager.d.ts.map +1 -1
- package/dist/portfolio/PortfolioManager.js +8 -1
- package/dist/portfolio/PortfolioRepoManager.js +2 -2
- package/dist/portfolio/PortfolioSyncManager.js +5 -5
- package/dist/portfolio/RelationshipManager.js +4 -4
- package/dist/portfolio/UnifiedIndexManager.js +4 -4
- package/dist/portfolio/types/RelationshipTypes.js +2 -2
- package/dist/security/InputValidator.d.ts +12 -0
- package/dist/security/InputValidator.d.ts.map +1 -1
- package/dist/security/InputValidator.js +38 -18
- package/dist/security/audit/config/suppressions.js +10 -10
- package/dist/security/commandValidator.js +2 -2
- package/dist/security/dosProtection.d.ts +123 -0
- package/dist/security/dosProtection.d.ts.map +1 -0
- package/dist/security/dosProtection.js +392 -0
- package/dist/security/pathValidator.js +2 -2
- package/dist/security/secureYamlParser.d.ts.map +1 -1
- package/dist/security/secureYamlParser.js +4 -3
- package/dist/security/tokenManager.js +10 -10
- package/dist/security/validators/unicodeValidator.js +2 -2
- package/dist/security/yamlValidator.js +3 -3
- package/dist/sync/PortfolioDownloader.js +2 -2
- package/dist/sync/PortfolioSyncComparer.js +2 -2
- package/dist/tools/portfolio/PortfolioElementAdapter.js +3 -3
- package/dist/tools/portfolio/submitToPortfolioTool.js +14 -14
- package/dist/utils/EarlyTerminationSearch.d.ts +1 -1
- package/dist/utils/EarlyTerminationSearch.d.ts.map +1 -1
- package/dist/utils/EarlyTerminationSearch.js +3 -3
- package/dist/utils/ElementFormatter.d.ts +1 -0
- package/dist/utils/ElementFormatter.d.ts.map +1 -1
- package/dist/utils/ElementFormatter.js +21 -13
- package/dist/utils/GitHubRateLimiter.d.ts +6 -0
- package/dist/utils/GitHubRateLimiter.d.ts.map +1 -1
- package/dist/utils/GitHubRateLimiter.js +20 -5
- package/dist/utils/RateLimiter.js +2 -2
- package/dist/utils/SecureDownloader.js +2 -2
- package/dist/utils/fileOperations.d.ts +6 -1
- package/dist/utils/fileOperations.d.ts.map +1 -1
- package/dist/utils/fileOperations.js +29 -5
- package/dist/utils/filesystem.js +6 -6
- package/dist/utils/searchUtils.js +2 -2
- package/dist/utils/version.js +3 -3
- package/package.json +1 -1
|
@@ -134,7 +134,7 @@ export function formatIndicator(config, metadata) {
|
|
|
134
134
|
result = result.replace(/\sby(?=\s|]|\)|>|}|$)/, '');
|
|
135
135
|
}
|
|
136
136
|
// Clean up extra spaces
|
|
137
|
-
result = result.
|
|
137
|
+
result = result.replaceAll(/\s+/g, ' ').trim();
|
|
138
138
|
// Apply brackets based on the template format (only if template doesn't already have them)
|
|
139
139
|
if (result && config.style !== 'custom') {
|
|
140
140
|
// Check if the template already includes brackets
|
|
@@ -155,4 +155,4 @@ export function formatIndicator(config, metadata) {
|
|
|
155
155
|
}
|
|
156
156
|
return result;
|
|
157
157
|
}
|
|
158
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kaWNhdG9yLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcvaW5kaWNhdG9yLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtREEsd0JBQXdCO0FBQ3hCLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFvQjtJQUN2RCxPQUFPLEVBQUUsSUFBSTtJQUNiLEtBQUssRUFBRSxNQUFNO0lBQ2IsU0FBUyxFQUFFLElBQUk7SUFDZixRQUFRLEVBQUUsSUFBSTtJQUNkLFdBQVcsRUFBRSxJQUFJO0lBQ2pCLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFlBQVksRUFBRSxLQUFLO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLEtBQUssRUFBRSxJQUFJO0lBQ1gsWUFBWSxFQUFFLFFBQVE7Q0FDdkIsQ0FBQztBQUVGLG9CQUFvQjtBQUNwQixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztJQUM5QixJQUFJLEVBQUUseUNBQXlDO0lBQy9DLE9BQU8sRUFBRSxnQkFBZ0I7SUFDekIsT0FBTyxFQUFFLHFCQUFxQjtJQUM5QixNQUFNLEVBQUUsZ0JBQWdCO0NBQ3pCLENBQUM7QUFFRixtQkFBbUI7QUFDbkIsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHO0lBQ3RCLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtJQUNqQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7SUFDaEMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO0lBQ2hDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtJQUNoQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7Q0FDOUIsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sVUFBVSxtQkFBbUI7SUFDakMsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLHdCQUF3QixFQUFFLENBQUM7SUFFL0MsNENBQTRDO0lBQzVDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUMxRCxNQUFNLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLEtBQUssTUFBTSxDQUFDO0lBQ3RFLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUMxQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDO1FBQ3BELElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM3RCxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQWlDLENBQUM7UUFDbkQsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUMzQyxNQUFNLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUM7UUFDN0QsTUFBTSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQzFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQztJQUN2RCxDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixFQUFFLENBQUM7UUFDN0MsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQztRQUM5RCxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ3pFLE1BQU0sQ0FBQyxZQUFZLEdBQUcsWUFBK0MsQ0FBQztRQUN4RSxDQUFDO0lBQ0gsQ0FBQztJQUVELG9DQUFvQztJQUNwQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDL0QsTUFBTSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxLQUFLLE1BQU0sQ0FBQztJQUMvRSxDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLCtCQUErQixLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzlELE1BQU0sQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsS0FBSyxNQUFNLENBQUM7SUFDN0UsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNoRSxNQUFNLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUNBQWlDLEtBQUssTUFBTSxDQUFDO0lBQ2pGLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsTUFBYztJQUNqRCxNQUFNLGlCQUFpQixHQUFHLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3ZGLDhDQUE4QztJQUM5QyxNQUFNLGdCQUFnQixHQUFHLGlCQUFpQixDQUFDLENBQUUsNENBQTRDO0lBQ3pGLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUUvRCxLQUFLLE1BQU0sV0FBVyxJQUFJLGlCQUFpQixFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQzdDLE9BQU87Z0JBQ0wsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osS0FBSyxFQUFFLHdCQUF3QixXQUFXLDZCQUE2QixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7YUFDdEcsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN6QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUM3QixNQUF1QixFQUN2QixRQUtDO0lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCx5Q0FBeUM7SUFDekMsSUFBSSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlDLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3JELHlCQUF5QjtRQUN6QixNQUFNLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN0QixzREFBc0Q7WUFDdEQsUUFBUSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQztRQUNuQyxDQUFDO2FBQU0sQ0FBQztZQUNOLFFBQVEsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0lBRUQsb0RBQW9EO0lBQ3BELElBQUksTUFBTSxHQUFHLFFBQVE7U0FDbEIsT0FBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDeEQsT0FBTyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDdkQsT0FBTyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUNwRixPQUFPLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ2hGLE9BQU8sQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVksSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUU1Riw2QkFBNkI7SUFDN0Isc0NBQXNDO0lBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzdDLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFDRCxzQ0FBc0M7SUFDdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDM0MsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUNELHdCQUF3QjtJQUN4QixNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFNUMsMkZBQTJGO0lBQzNGLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDeEMsa0RBQWtEO1FBQ2xELE1BQU0sbUJBQW1CLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztZQUNqRCxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1lBQ2hELFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFDaEQsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTVFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDL0MsSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDcEMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksR0FBRyxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3hELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELG1DQUFtQztJQUNuQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUM7SUFDN0IsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIGZvciB0aGUgcGVyc29uYSBhY3RpdmUgaW5kaWNhdG9yIHN5c3RlbS5cbiAqIENvbnRyb2xzIGhvdyBwZXJzb25hIGluZm9ybWF0aW9uIGlzIGRpc3BsYXllZCBpbiBBSSByZXNwb25zZXMuXG4gKiBcbiAqIEBpbnRlcmZhY2UgSW5kaWNhdG9yQ29uZmlnXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgY29uZmlnOiBJbmRpY2F0b3JDb25maWcgPSB7XG4gKiAgIGVuYWJsZWQ6IHRydWUsXG4gKiAgIHN0eWxlOiAnZnVsbCcsXG4gKiAgIHNob3dFbW9qaTogdHJ1ZSxcbiAqICAgc2hvd05hbWU6IHRydWUsXG4gKiAgIHNob3dWZXJzaW9uOiB0cnVlLFxuICogICBzaG93QXV0aG9yOiB0cnVlLFxuICogICBzaG93Q2F0ZWdvcnk6IGZhbHNlLFxuICogICBzZXBhcmF0b3I6ICcgfCAnLFxuICogICBlbW9qaTogJ/Cfjq0nLFxuICogICBicmFja2V0U3R5bGU6ICdzcXVhcmUnXG4gKiB9O1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5kaWNhdG9yQ29uZmlnIHtcbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyB0aGUgaW5kaWNhdG9yIGF0IGFsbCAqL1xuICBlbmFibGVkOiBib29sZWFuO1xuICBcbiAgLyoqIEZvcm1hdCBzdHlsZTogJ2Z1bGwnLCAnbWluaW1hbCcsICdjb21wYWN0JywgJ2N1c3RvbScgKi9cbiAgc3R5bGU6ICdmdWxsJyB8ICdtaW5pbWFsJyB8ICdjb21wYWN0JyB8ICdjdXN0b20nO1xuICBcbiAgLyoqIFxuICAgKiBDdXN0b20gZm9ybWF0IHRlbXBsYXRlICh1c2VkIHdoZW4gc3R5bGUgaXMgJ2N1c3RvbScpXG4gICAqIEF2YWlsYWJsZSBwbGFjZWhvbGRlcnM6IHtlbW9qaX0sIHtuYW1lfSwge3ZlcnNpb259LCB7YXV0aG9yfSwge2NhdGVnb3J5fVxuICAgKi9cbiAgY3VzdG9tRm9ybWF0Pzogc3RyaW5nO1xuICBcbiAgLyoqIFdoZXRoZXIgdG8gaW5jbHVkZSBzcGVjaWZpYyBlbGVtZW50cyAqL1xuICBzaG93RW1vamk6IGJvb2xlYW47XG4gIHNob3dOYW1lOiBib29sZWFuO1xuICBzaG93VmVyc2lvbjogYm9vbGVhbjtcbiAgc2hvd0F1dGhvcjogYm9vbGVhbjtcbiAgc2hvd0NhdGVnb3J5OiBib29sZWFuO1xuICBcbiAgLyoqIFNlcGFyYXRvciBiZXR3ZWVuIGluZGljYXRvciBhbmQgcmVzcG9uc2UgKi9cbiAgc2VwYXJhdG9yOiBzdHJpbmc7XG4gIFxuICAvKiogRW1vamkgdG8gdXNlIChkZWZhdWx0cyB0byDwn46tKSAqL1xuICBlbW9qaTogc3RyaW5nO1xuICBcbiAgLyoqIEJyYWNrZXQgc3R5bGU6ICdzcXVhcmUnLCAncm91bmQnLCAnY3VybHknLCAnYW5nbGUnLCAnbm9uZScgKi9cbiAgYnJhY2tldFN0eWxlOiAnc3F1YXJlJyB8ICdyb3VuZCcgfCAnY3VybHknIHwgJ2FuZ2xlJyB8ICdub25lJztcbn1cblxuLy8gRGVmYXVsdCBjb25maWd1cmF0aW9uXG5leHBvcnQgY29uc3QgREVGQVVMVF9JTkRJQ0FUT1JfQ09ORklHOiBJbmRpY2F0b3JDb25maWcgPSB7XG4gIGVuYWJsZWQ6IHRydWUsXG4gIHN0eWxlOiAnZnVsbCcsXG4gIHNob3dFbW9qaTogdHJ1ZSxcbiAgc2hvd05hbWU6IHRydWUsXG4gIHNob3dWZXJzaW9uOiB0cnVlLFxuICBzaG93QXV0aG9yOiB0cnVlLFxuICBzaG93Q2F0ZWdvcnk6IGZhbHNlLFxuICBzZXBhcmF0b3I6ICcgfCAnLFxuICBlbW9qaTogJ/Cfjq0nLFxuICBicmFja2V0U3R5bGU6ICdzcXVhcmUnXG59O1xuXG4vLyBQcmVkZWZpbmVkIHN0eWxlc1xuZXhwb3J0IGNvbnN0IElORElDQVRPUl9TVFlMRVMgPSB7XG4gIGZ1bGw6ICdbe2Vtb2ppfSB7bmFtZX0gdnt2ZXJzaW9ufSBieSB7YXV0aG9yfV0nLFxuICBtaW5pbWFsOiAne2Vtb2ppfSB7bmFtZX0nLFxuICBjb21wYWN0OiAnW3tuYW1lfSB2e3ZlcnNpb259XScsXG4gIGN1c3RvbTogJ3tjdXN0b21Gb3JtYXR9J1xufTtcblxuLy8gQnJhY2tldCBtYXBwaW5nc1xuZXhwb3J0IGNvbnN0IEJSQUNLRVRTID0ge1xuICBzcXVhcmU6IHsgb3BlbjogJ1snLCBjbG9zZTogJ10nIH0sXG4gIHJvdW5kOiB7IG9wZW46ICcoJywgY2xvc2U6ICcpJyB9LFxuICBjdXJseTogeyBvcGVuOiAneycsIGNsb3NlOiAnfScgfSxcbiAgYW5nbGU6IHsgb3BlbjogJzwnLCBjbG9zZTogJz4nIH0sXG4gIG5vbmU6IHsgb3BlbjogJycsIGNsb3NlOiAnJyB9XG59O1xuXG4vKipcbiAqIExvYWQgaW5kaWNhdG9yIGNvbmZpZ3VyYXRpb24gZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb3IgdXNlIGRlZmF1bHRzLlxuICogRW52aXJvbm1lbnQgdmFyaWFibGVzIHRha2UgcHJlY2VkZW5jZSBvdmVyIGRlZmF1bHQgdmFsdWVzLlxuICogXG4gKiBAcmV0dXJucyB7SW5kaWNhdG9yQ29uZmlnfSBUaGUgbG9hZGVkIGNvbmZpZ3VyYXRpb25cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBTZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGJlZm9yZSBsb2FkaW5nXG4gKiBwcm9jZXNzLmVudi5ET0xMSE9VU0VfSU5ESUNBVE9SX1NUWUxFID0gJ21pbmltYWwnO1xuICogcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0lORElDQVRPUl9FTU9KSSA9ICfwn6SWJztcbiAqIFxuICogY29uc3QgY29uZmlnID0gbG9hZEluZGljYXRvckNvbmZpZygpO1xuICogLy8gY29uZmlnLnN0eWxlID09PSAnbWluaW1hbCdcbiAqIC8vIGNvbmZpZy5lbW9qaSA9PT0gJ/CfpJYnXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRJbmRpY2F0b3JDb25maWcoKTogSW5kaWNhdG9yQ29uZmlnIHtcbiAgY29uc3QgY29uZmlnID0geyAuLi5ERUZBVUxUX0lORElDQVRPUl9DT05GSUcgfTtcbiAgXG4gIC8vIENoZWNrIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3Igb3ZlcnJpZGVzXG4gIGlmIChwcm9jZXNzLmVudi5ET0xMSE9VU0VfSU5ESUNBVE9SX0VOQUJMRUQgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbmZpZy5lbmFibGVkID0gcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0lORElDQVRPUl9FTkFCTEVEID09PSAndHJ1ZSc7XG4gIH1cbiAgXG4gIGlmIChwcm9jZXNzLmVudi5ET0xMSE9VU0VfSU5ESUNBVE9SX1NUWUxFKSB7XG4gICAgY29uc3Qgc3R5bGUgPSBwcm9jZXNzLmVudi5ET0xMSE9VU0VfSU5ESUNBVE9SX1NUWUxFO1xuICAgIGlmIChbJ2Z1bGwnLCAnbWluaW1hbCcsICdjb21wYWN0JywgJ2N1c3RvbSddLmluY2x1ZGVzKHN0eWxlKSkge1xuICAgICAgY29uZmlnLnN0eWxlID0gc3R5bGUgYXMgSW5kaWNhdG9yQ29uZmlnWydzdHlsZSddO1xuICAgIH1cbiAgfVxuICBcbiAgaWYgKHByb2Nlc3MuZW52LkRPTExIT1VTRV9JTkRJQ0FUT1JfRk9STUFUKSB7XG4gICAgY29uZmlnLmN1c3RvbUZvcm1hdCA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9JTkRJQ0FUT1JfRk9STUFUO1xuICAgIGNvbmZpZy5zdHlsZSA9ICdjdXN0b20nO1xuICB9XG4gIFxuICBpZiAocHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0lORElDQVRPUl9FTU9KSSkge1xuICAgIGNvbmZpZy5lbW9qaSA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9JTkRJQ0FUT1JfRU1PSkk7XG4gIH1cbiAgXG4gIGlmIChwcm9jZXNzLmVudi5ET0xMSE9VU0VfSU5ESUNBVE9SX0JSQUNLRVRTKSB7XG4gICAgY29uc3QgYnJhY2tldFN0eWxlID0gcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0lORElDQVRPUl9CUkFDS0VUUztcbiAgICBpZiAoWydzcXVhcmUnLCAncm91bmQnLCAnY3VybHknLCAnYW5nbGUnLCAnbm9uZSddLmluY2x1ZGVzKGJyYWNrZXRTdHlsZSkpIHtcbiAgICAgIGNvbmZpZy5icmFja2V0U3R5bGUgPSBicmFja2V0U3R5bGUgYXMgSW5kaWNhdG9yQ29uZmlnWydicmFja2V0U3R5bGUnXTtcbiAgICB9XG4gIH1cbiAgXG4gIC8vIFBhcnNlIHNob3cgZmxhZ3MgZnJvbSBlbnZpcm9ubWVudFxuICBpZiAocHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0lORElDQVRPUl9TSE9XX1ZFUlNJT04gIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbmZpZy5zaG93VmVyc2lvbiA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9JTkRJQ0FUT1JfU0hPV19WRVJTSU9OID09PSAndHJ1ZSc7XG4gIH1cbiAgXG4gIGlmIChwcm9jZXNzLmVudi5ET0xMSE9VU0VfSU5ESUNBVE9SX1NIT1dfQVVUSE9SICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25maWcuc2hvd0F1dGhvciA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9JTkRJQ0FUT1JfU0hPV19BVVRIT1IgPT09ICd0cnVlJztcbiAgfVxuICBcbiAgaWYgKHByb2Nlc3MuZW52LkRPTExIT1VTRV9JTkRJQ0FUT1JfU0hPV19DQVRFR09SWSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uZmlnLnNob3dDYXRlZ29yeSA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9JTkRJQ0FUT1JfU0hPV19DQVRFR09SWSA9PT0gJ3RydWUnO1xuICB9XG4gIFxuICByZXR1cm4gY29uZmlnO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGN1c3RvbSBmb3JtYXQgdGVtcGxhdGUgZm9yIHZhbGlkIHBsYWNlaG9sZGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDdXN0b21Gb3JtYXQoZm9ybWF0OiBzdHJpbmcpOiB7IHZhbGlkOiBib29sZWFuOyBlcnJvcj86IHN0cmluZyB9IHtcbiAgY29uc3QgdmFsaWRQbGFjZWhvbGRlcnMgPSBbJ3tlbW9qaX0nLCAne25hbWV9JywgJ3t2ZXJzaW9ufScsICd7YXV0aG9yfScsICd7Y2F0ZWdvcnl9J107XG4gIC8vIExlbmd0aCBsaW1pdCBhZGRlZCB0byBwcmV2ZW50IFJlRG9TIGF0dGFja3NcbiAgY29uc3QgcGxhY2Vob2xkZXJSZWdleCA9IC9cXHtbXn1dezAsNTB9XFx9L2c7ICAvLyBMaW1pdGVkIHRvIDUwIGNoYXJzIGZvciBwbGFjZWhvbGRlciBuYW1lc1xuICBjb25zdCBmb3VuZFBsYWNlaG9sZGVycyA9IGZvcm1hdC5tYXRjaChwbGFjZWhvbGRlclJlZ2V4KSB8fCBbXTtcbiAgXG4gIGZvciAoY29uc3QgcGxhY2Vob2xkZXIgb2YgZm91bmRQbGFjZWhvbGRlcnMpIHtcbiAgICBpZiAoIXZhbGlkUGxhY2Vob2xkZXJzLmluY2x1ZGVzKHBsYWNlaG9sZGVyKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICBlcnJvcjogYEludmFsaWQgcGxhY2Vob2xkZXI6ICR7cGxhY2Vob2xkZXJ9LiBWYWxpZCBwbGFjZWhvbGRlcnMgYXJlOiAke3ZhbGlkUGxhY2Vob2xkZXJzLmpvaW4oJywgJyl9YFxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIHJldHVybiB7IHZhbGlkOiB0cnVlIH07XG59XG5cbi8qKlxuICogRm9ybWF0IHRoZSBpbmRpY2F0b3IgYmFzZWQgb24gY29uZmlndXJhdGlvbiBhbmQgcGVyc29uYSBtZXRhZGF0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0SW5kaWNhdG9yKFxuICBjb25maWc6IEluZGljYXRvckNvbmZpZyxcbiAgbWV0YWRhdGE6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmVyc2lvbj86IHN0cmluZztcbiAgICBhdXRob3I/OiBzdHJpbmc7XG4gICAgY2F0ZWdvcnk/OiBzdHJpbmc7XG4gIH1cbik6IHN0cmluZyB7XG4gIGlmICghY29uZmlnLmVuYWJsZWQpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgXG4gIC8vIEdldCB0aGUgZm9ybWF0IHRlbXBsYXRlIGJhc2VkIG9uIHN0eWxlXG4gIGxldCB0ZW1wbGF0ZSA9IElORElDQVRPUl9TVFlMRVNbY29uZmlnLnN0eWxlXTtcbiAgaWYgKGNvbmZpZy5zdHlsZSA9PT0gJ2N1c3RvbScgJiYgY29uZmlnLmN1c3RvbUZvcm1hdCkge1xuICAgIC8vIFZhbGlkYXRlIGN1c3RvbSBmb3JtYXRcbiAgICBjb25zdCB2YWxpZGF0aW9uID0gdmFsaWRhdGVDdXN0b21Gb3JtYXQoY29uZmlnLmN1c3RvbUZvcm1hdCk7XG4gICAgaWYgKCF2YWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICAvLyBGYWxsIGJhY2sgdG8gZnVsbCBzdHlsZSBpZiBjdXN0b20gZm9ybWF0IGlzIGludmFsaWRcbiAgICAgIHRlbXBsYXRlID0gSU5ESUNBVE9SX1NUWUxFUy5mdWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZW1wbGF0ZSA9IGNvbmZpZy5jdXN0b21Gb3JtYXQ7XG4gICAgfVxuICB9XG4gIFxuICAvLyBSZXBsYWNlIHBsYWNlaG9sZGVycyB3aXRoIHZhbHVlcyBvciBlbXB0eSBzdHJpbmdzXG4gIGxldCByZXN1bHQgPSB0ZW1wbGF0ZVxuICAgIC5yZXBsYWNlKCd7ZW1vaml9JywgY29uZmlnLnNob3dFbW9qaSA/IGNvbmZpZy5lbW9qaSA6ICcnKVxuICAgIC5yZXBsYWNlKCd7bmFtZX0nLCBjb25maWcuc2hvd05hbWUgPyBtZXRhZGF0YS5uYW1lIDogJycpXG4gICAgLnJlcGxhY2UoJ3t2ZXJzaW9ufScsIGNvbmZpZy5zaG93VmVyc2lvbiAmJiBtZXRhZGF0YS52ZXJzaW9uID8gbWV0YWRhdGEudmVyc2lvbiA6ICcnKVxuICAgIC5yZXBsYWNlKCd7YXV0aG9yfScsIGNvbmZpZy5zaG93QXV0aG9yICYmIG1ldGFkYXRhLmF1dGhvciA/IG1ldGFkYXRhLmF1dGhvciA6ICcnKVxuICAgIC5yZXBsYWNlKCd7Y2F0ZWdvcnl9JywgY29uZmlnLnNob3dDYXRlZ29yeSAmJiBtZXRhZGF0YS5jYXRlZ29yeSA/IG1ldGFkYXRhLmNhdGVnb3J5IDogJycpO1xuICBcbiAgLy8gQ2xlYW4gdXAgdGhlIGZvcm1hdCBzdHJpbmdcbiAgLy8gUmVtb3ZlIFwidlwiIGlmIG5vIHZlcnNpb24gZm9sbG93cyBpdFxuICBpZiAoIWNvbmZpZy5zaG93VmVyc2lvbiB8fCAhbWV0YWRhdGEudmVyc2lvbikge1xuICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9cXHN2KD89XFxzfF18XFwpfD58fXwkKS8sICcnKTtcbiAgfVxuICAvLyBSZW1vdmUgXCJieVwiIGlmIG5vIGF1dGhvciBmb2xsb3dzIGl0XG4gIGlmICghY29uZmlnLnNob3dBdXRob3IgfHwgIW1ldGFkYXRhLmF1dGhvcikge1xuICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9cXHNieSg/PVxcc3xdfFxcKXw+fH18JCkvLCAnJyk7XG4gIH1cbiAgLy8gQ2xlYW4gdXAgZXh0cmEgc3BhY2VzXG4gIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpO1xuICBcbiAgLy8gQXBwbHkgYnJhY2tldHMgYmFzZWQgb24gdGhlIHRlbXBsYXRlIGZvcm1hdCAob25seSBpZiB0ZW1wbGF0ZSBkb2Vzbid0IGFscmVhZHkgaGF2ZSB0aGVtKVxuICBpZiAocmVzdWx0ICYmIGNvbmZpZy5zdHlsZSAhPT0gJ2N1c3RvbScpIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGVtcGxhdGUgYWxyZWFkeSBpbmNsdWRlcyBicmFja2V0c1xuICAgIGNvbnN0IHRlbXBsYXRlSGFzQnJhY2tldHMgPSB0ZW1wbGF0ZS5pbmNsdWRlcygnWycpIHx8IHRlbXBsYXRlLmluY2x1ZGVzKCddJykgfHwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUuaW5jbHVkZXMoJygnKSB8fCB0ZW1wbGF0ZS5pbmNsdWRlcygnKScpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUuaW5jbHVkZXMoJ3snKSB8fCB0ZW1wbGF0ZS5pbmNsdWRlcygnfScpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUuaW5jbHVkZXMoJzwnKSB8fCB0ZW1wbGF0ZS5pbmNsdWRlcygnPicpO1xuICAgIFxuICAgIGlmICghdGVtcGxhdGVIYXNCcmFja2V0cykge1xuICAgICAgY29uc3QgYnJhY2tldHMgPSBCUkFDS0VUU1tjb25maWcuYnJhY2tldFN0eWxlXTtcbiAgICAgIGlmIChicmFja2V0cy5vcGVuIHx8IGJyYWNrZXRzLmNsb3NlKSB7XG4gICAgICAgIHJlc3VsdCA9IGAke2JyYWNrZXRzLm9wZW59JHtyZXN1bHR9JHticmFja2V0cy5jbG9zZX1gO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgLy8gQWRkIHNlcGFyYXRvciBpZiB3ZSBoYXZlIGNvbnRlbnRcbiAgaWYgKHJlc3VsdCkge1xuICAgIHJlc3VsdCArPSBjb25maWcuc2VwYXJhdG9yO1xuICB9XG4gIFxuICByZXR1cm4gcmVzdWx0O1xufSJdfQ==
|
|
158
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kaWNhdG9yLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcvaW5kaWNhdG9yLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtREEsd0JBQXdCO0FBQ3hCLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFvQjtJQUN2RCxPQUFPLEVBQUUsSUFBSTtJQUNiLEtBQUssRUFBRSxNQUFNO0lBQ2IsU0FBUyxFQUFFLElBQUk7SUFDZixRQUFRLEVBQUUsSUFBSTtJQUNkLFdBQVcsRUFBRSxJQUFJO0lBQ2pCLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFlBQVksRUFBRSxLQUFLO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLEtBQUssRUFBRSxJQUFJO0lBQ1gsWUFBWSxFQUFFLFFBQVE7Q0FDdkIsQ0FBQztBQUVGLG9CQUFvQjtBQUNwQixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztJQUM5QixJQUFJLEVBQUUseUNBQXlDO0lBQy9DLE9BQU8sRUFBRSxnQkFBZ0I7SUFDekIsT0FBTyxFQUFFLHFCQUFxQjtJQUM5QixNQUFNLEVBQUUsZ0JBQWdCO0NBQ3pCLENBQUM7QUFFRixtQkFBbUI7QUFDbkIsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHO0lBQ3RCLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtJQUNqQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7SUFDaEMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO0lBQ2hDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtJQUNoQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7Q0FDOUIsQ0FB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bUJBQW1CLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztZQUNqRCxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1lBQ2hELFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFDaEQsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTVFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDL0MsSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDcEMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksR0FBRyxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3hELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELG1DQUFtQztJQUNuQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUM7SUFDN0IsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIGZvciB0aGUgcGVyc29uYSBhY3RpdmUgaW5kaWNhdG9yIHN5c3RlbS5cbiAqIENvbnRyb2xzIGhvdyBwZXJzb25hIGluZm9ybWF0aW9uIGlzIGRpc3BsYXllZCBpbiBBSSByZXNwb25zZXMuXG4gKiBcbiAqIEBpbnRlcmZhY2UgSW5kaWNhdG9yQ29uZmlnXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgY29uZmlnOiBJbmRpY2F0b3JDb25maWcgPSB7XG4gKiAgIGVuYWJsZWQ6IHRydWUsXG4gKiAgIHN0eWxlOiAnZnVsbCcsXG4gKiAgIHNob3dFbW9qaTogdHJ1ZSxcbiAqICAgc2hvd05hbWU6IHRydWUsXG4gKiAgIHNob3dWZXJzaW9uOiB0cnVlLFxuICogICBzaG93QXV0aG9yOiB0cnVlLFxuICogICBzaG93Q2F0ZWdvcnk6IGZhbHNlLFxuICogICBzZXBhcmF0b3I6ICcgfCAnLFxuICogICBlbW9qaTogJ/Cfjq0nLFxuICogICBicmFja2V0U3R5bGU6ICdzcXVhcmUnXG4gKiB9O1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5kaWNhdG9yQ29uZmlnIHtcbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyB0aGUgaW5kaWNhdG9yIGF0IGFsbCAqL1xuICBlbmFibGVkOiBib29sZWFuO1xuICBcbiAgLyoqIEZvcm1hdCBzdHlsZTogJ2Z1bGwnLCAnbWluaW1hbCcsICdjb21wYWN0JywgJ2N1c3RvbScgKi9cbiAgc3R5bGU6ICdmdWxsJyB8ICdtaW5pbWFsJyB8ICdjb21wYWN0JyB8ICdjdXN0b20nO1xuICBcbiAgLyoqIFxuICAgKiBDdXN0b20gZm9ybWF0IHRlbXBsYXRlICh1c2VkIHdoZW4gc3R5bGUgaXMgJ2N1c3RvbScpXG4gICAqIEF2YWlsYWJsZSBwbGFjZWhvbGRlcnM6IHtlbW9qaX0sIHtuYW1lfSwge3ZlcnNpb259LCB7YXV0aG9yfSwge2NhdGVnb3J5fVxuICAgKi9cbiAgY3VzdG9tRm9ybWF0Pzogc3RyaW5nO1xuICBcbiAgLyoqIFdoZXRoZXIgdG8gaW5jbHVkZSBzcGVjaWZpYyBlbGVtZW50cyAqL1xuICBzaG93RW1vamk6IGJvb2xlYW47XG4gIHNob3dOYW1lOiBib29sZWFuO1xuICBzaG93VmVyc2lvbjogYm9vbGVhbjtcbiAgc2hvd0F1dGhvcjogYm9vbGVhbjtcbiAgc2hvd0NhdGVnb3J5OiBib29sZWFuO1xuICBcbiAgLyoqIFNlcGFyYXRvciBiZXR3ZWVuIGluZGljYXRvciBhbmQgcmVzcG9uc2UgKi9cbiAgc2VwYXJhdG9yOiBzdHJpbmc7XG4gIFxuICAvKiogRW1vamkgdG8gdXNlIChkZWZhdWx0cyB0byDwn46tKSAqL1xuICBlbW9qaTogc3RyaW5nO1xuICBcbiAgLyoqIEJyYWNrZXQgc3R5bGU6ICdzcXVhcmUnLCAncm91bmQnLCAnY3VybHknLCAnYW5nbGUnLCAnbm9uZScgKi9cbiAgYnJhY2tldFN0eWxlOiAnc3F1YXJlJyB8ICdyb3VuZCcgfCAnY3VybHknIHwgJ2FuZ2xlJyB8ICdub25lJztcbn1cblxuLy8gRGVmYXVsdCBjb25maWd1cmF0aW9uXG5leHBvcnQgY29uc3QgREVGQVVMVF9JTkRJQ0FUT1JfQ09ORklHOiBJbmRpY2F0b3JDb25maWcgPSB7XG4gIGVuYWJsZWQ6IHRydWUsXG4gIHN0eWxlOiAnZnVsbCcsXG4gIHNob3dFbW9qaTogdHJ1ZSxcbiAgc2hvd05hbWU6IHRydWUsXG4gIHNob3dWZXJzaW9uOiB0cnVlLFxuICBzaG93QXV0aG9yOiB0cnVlLFxuICBzaG93Q2F0ZWdvcnk6IGZhbHNlLFxuICBzZXBhcmF0b3I6ICcgfCAnLFxuICBlbW9qaTogJ/Cfjq0nLFxuICBicmFja2V0U3R5bGU6ICdzcXVhcmUnXG59O1xuXG4vLyBQcmVkZWZpbmVkIHN0eWxlc1xuZXhwb3J0IGNvbnN0IElORElDQVRPUl9TVFlMRVMgPSB7XG4gIGZ1bGw6ICdbe2Vtb2ppfSB7bmFtZX0gdnt2ZXJzaW9ufSBieSB7YXV0aG9yfV0nLFxuICBtaW5pbWFsOiAne2Vtb2ppfSB7bmFtZX0nLFxuICBjb21wYWN0OiAnW3tuYW1lfSB2e3ZlcnNpb259XScsXG4gIGN1c3RvbTogJ3tjdXN0b21Gb3JtYXR9J1xufTtcblxuLy8gQnJhY2tldCBtYXBwaW5nc1xuZXhwb3J0IGNvbnN0IEJSQUNLRVRTID0ge1xuICBzcXVhcmU6IHsgb3BlbjogJ1snLCBjbG9zZTogJ10nIH0sXG4gIHJvdW5kOiB7IG9wZW46ICcoJywgY2xvc2U6ICcpJyB9LFxuICBjdXJseTogeyBvcGVuOiAneycsIGNsb3NlOiAnfScgfSxcbiAgYW5nbGU6IHsgb3BlbjogJzwnLCBjbG9zZTogJz4nIH0sXG4gIG5vbmU6IHsgb3BlbjogJycsIGNsb3NlOiAnJyB9XG59O1xuXG4vKipcbiAqIExvYWQgaW5kaWNhdG9yIGNvbmZpZ3VyYXRpb24gZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb3IgdXNlIGRlZmF1bHRzLlxuICogRW52aXJvbm1lbnQgdmFyaWFibGVzIHRha2UgcHJlY2VkZW5jZSBvdmVyIGRlZmF1bHQgdmFsdWVzLlxuICogXG4gKiBAcmV0dXJucyB7SW5kaWNhdG9yQ29uZmlnfSBUaGUgbG9hZGVkIGNvbmZpZ3VyYXRpb25cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBTZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGJlZm9yZSBsb2FkaW5nXG4gKiBwcm9jZXNzLmVudi5ET0xMSE9VU0VfSU5ESUNBVE9SX1NUWUxFID0gJ21pbmltYWwnO1xuICogcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0lORElDQVRPUl9FTU9KSSA9ICfwn6SWJztcbiAqIFxuICogY29uc3QgY29uZmlnID0gbG9hZEluZGljYXRvckNvbmZpZygpO1xuICogLy8gY29uZmlnLnN0eWxlID09PSAnbWluaW1hbCdcbiAqIC8vIGNvbmZpZy5lbW9qaSA9PT0gJ/CfpJYnXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRJbmRpY2F0b3JDb25maWcoKTogSW5kaWNhdG9yQ29uZmlnIHtcbiAgY29uc3QgY29uZmlnID0geyAuLi5ERUZBVUxUX0lORElDQVRPUl9DT05GSUcgfTtcbiAgXG4gIC8vIENoZWNrIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3Igb3ZlcnJpZGVzXG4gIGlmIChwcm9jZXNzLmVudi5ET0xMSE9VU0VfSU5ESUNBVE9SX0VOQUJMRUQgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbmZpZy5lbmFibGVkID0gcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0lORElDQVRPUl9FTkFCTEVEID09PSAndHJ1ZSc7XG4gIH1cbiAgXG4gIGlmIChwcm9jZXNzLmVudi5ET0xMSE9VU0VfSU5ESUNBVE9SX1NUWUxFKSB7XG4gICAgY29uc3Qgc3R5bGUgPSBwcm9jZXNzLmVudi5ET0xMSE9VU0VfSU5ESUNBVE9SX1NUWUxFO1xuICAgIGlmIChbJ2Z1bGwnLCAnbWluaW1hbCcsICdjb21wYWN0JywgJ2N1c3RvbSddLmluY2x1ZGVzKHN0eWxlKSkge1xuICAgICAgY29uZmlnLnN0eWxlID0gc3R5bGUgYXMgSW5kaWNhdG9yQ29uZmlnWydzdHlsZSddO1xuICAgIH1cbiAgfVxuICBcbiAgaWYgKHByb2Nlc3MuZW52LkRPTExIT1VTRV9JTkRJQ0FUT1JfRk9STUFUKSB7XG4gICAgY29uZmlnLmN1c3RvbUZvcm1hdCA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9JTkRJQ0FUT1JfRk9STUFUO1xuICAgIGNvbmZpZy5zdHlsZSA9ICdjdXN0b20nO1xuICB9XG4gIFxuICBpZiAocHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0lORElDQVRPUl9FTU9KSSkge1xuICAgIGNvbmZpZy5lbW9qaSA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9JTkRJQ0FUT1JfRU1PSkk7XG4gIH1cbiAgXG4gIGlmIChwcm9jZXNzLmVudi5ET0xMSE9VU0VfSU5ESUNBVE9SX0JSQUNLRVRTKSB7XG4gICAgY29uc3QgYnJhY2tldFN0eWxlID0gcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0lORElDQVRPUl9CUkFDS0VUUztcbiAgICBpZiAoWydzcXVhcmUnLCAncm91bmQnLCAnY3VybHknLCAnYW5nbGUnLCAnbm9uZSddLmluY2x1ZGVzKGJyYWNrZXRTdHlsZSkpIHtcbiAgICAgIGNvbmZpZy5icmFja2V0U3R5bGUgPSBicmFja2V0U3R5bGUgYXMgSW5kaWNhdG9yQ29uZmlnWydicmFja2V0U3R5bGUnXTtcbiAgICB9XG4gIH1cbiAgXG4gIC8vIFBhcnNlIHNob3cgZmxhZ3MgZnJvbSBlbnZpcm9ubWVudFxuICBpZiAocHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0lORElDQVRPUl9TSE9XX1ZFUlNJT04gIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbmZpZy5zaG93VmVyc2lvbiA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9JTkRJQ0FUT1JfU0hPV19WRVJTSU9OID09PSAndHJ1ZSc7XG4gIH1cbiAgXG4gIGlmIChwcm9jZXNzLmVudi5ET0xMSE9VU0VfSU5ESUNBVE9SX1NIT1dfQVVUSE9SICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25maWcuc2hvd0F1dGhvciA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9JTkRJQ0FUT1JfU0hPV19BVVRIT1IgPT09ICd0cnVlJztcbiAgfVxuICBcbiAgaWYgKHByb2Nlc3MuZW52LkRPTExIT1VTRV9JTkRJQ0FUT1JfU0hPV19DQVRFR09SWSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uZmlnLnNob3dDYXRlZ29yeSA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9JTkRJQ0FUT1JfU0hPV19DQVRFR09SWSA9PT0gJ3RydWUnO1xuICB9XG4gIFxuICByZXR1cm4gY29uZmlnO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGN1c3RvbSBmb3JtYXQgdGVtcGxhdGUgZm9yIHZhbGlkIHBsYWNlaG9sZGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDdXN0b21Gb3JtYXQoZm9ybWF0OiBzdHJpbmcpOiB7IHZhbGlkOiBib29sZWFuOyBlcnJvcj86IHN0cmluZyB9IHtcbiAgY29uc3QgdmFsaWRQbGFjZWhvbGRlcnMgPSBbJ3tlbW9qaX0nLCAne25hbWV9JywgJ3t2ZXJzaW9ufScsICd7YXV0aG9yfScsICd7Y2F0ZWdvcnl9J107XG4gIC8vIExlbmd0aCBsaW1pdCBhZGRlZCB0byBwcmV2ZW50IFJlRG9TIGF0dGFja3NcbiAgY29uc3QgcGxhY2Vob2xkZXJSZWdleCA9IC9cXHtbXn1dezAsNTB9XFx9L2c7ICAvLyBMaW1pdGVkIHRvIDUwIGNoYXJzIGZvciBwbGFjZWhvbGRlciBuYW1lc1xuICBjb25zdCBmb3VuZFBsYWNlaG9sZGVycyA9IGZvcm1hdC5tYXRjaChwbGFjZWhvbGRlclJlZ2V4KSB8fCBbXTtcbiAgXG4gIGZvciAoY29uc3QgcGxhY2Vob2xkZXIgb2YgZm91bmRQbGFjZWhvbGRlcnMpIHtcbiAgICBpZiAoIXZhbGlkUGxhY2Vob2xkZXJzLmluY2x1ZGVzKHBsYWNlaG9sZGVyKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICBlcnJvcjogYEludmFsaWQgcGxhY2Vob2xkZXI6ICR7cGxhY2Vob2xkZXJ9LiBWYWxpZCBwbGFjZWhvbGRlcnMgYXJlOiAke3ZhbGlkUGxhY2Vob2xkZXJzLmpvaW4oJywgJyl9YFxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIHJldHVybiB7IHZhbGlkOiB0cnVlIH07XG59XG5cbi8qKlxuICogRm9ybWF0IHRoZSBpbmRpY2F0b3IgYmFzZWQgb24gY29uZmlndXJhdGlvbiBhbmQgcGVyc29uYSBtZXRhZGF0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0SW5kaWNhdG9yKFxuICBjb25maWc6IEluZGljYXRvckNvbmZpZyxcbiAgbWV0YWRhdGE6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmVyc2lvbj86IHN0cmluZztcbiAgICBhdXRob3I/OiBzdHJpbmc7XG4gICAgY2F0ZWdvcnk/OiBzdHJpbmc7XG4gIH1cbik6IHN0cmluZyB7XG4gIGlmICghY29uZmlnLmVuYWJsZWQpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgXG4gIC8vIEdldCB0aGUgZm9ybWF0IHRlbXBsYXRlIGJhc2VkIG9uIHN0eWxlXG4gIGxldCB0ZW1wbGF0ZSA9IElORElDQVRPUl9TVFlMRVNbY29uZmlnLnN0eWxlXTtcbiAgaWYgKGNvbmZpZy5zdHlsZSA9PT0gJ2N1c3RvbScgJiYgY29uZmlnLmN1c3RvbUZvcm1hdCkge1xuICAgIC8vIFZhbGlkYXRlIGN1c3RvbSBmb3JtYXRcbiAgICBjb25zdCB2YWxpZGF0aW9uID0gdmFsaWRhdGVDdXN0b21Gb3JtYXQoY29uZmlnLmN1c3RvbUZvcm1hdCk7XG4gICAgaWYgKCF2YWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICAvLyBGYWxsIGJhY2sgdG8gZnVsbCBzdHlsZSBpZiBjdXN0b20gZm9ybWF0IGlzIGludmFsaWRcbiAgICAgIHRlbXBsYXRlID0gSU5ESUNBVE9SX1NUWUxFUy5mdWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZW1wbGF0ZSA9IGNvbmZpZy5jdXN0b21Gb3JtYXQ7XG4gICAgfVxuICB9XG4gIFxuICAvLyBSZXBsYWNlIHBsYWNlaG9sZGVycyB3aXRoIHZhbHVlcyBvciBlbXB0eSBzdHJpbmdzXG4gIGxldCByZXN1bHQgPSB0ZW1wbGF0ZVxuICAgIC5yZXBsYWNlKCd7ZW1vaml9JywgY29uZmlnLnNob3dFbW9qaSA/IGNvbmZpZy5lbW9qaSA6ICcnKVxuICAgIC5yZXBsYWNlKCd7bmFtZX0nLCBjb25maWcuc2hvd05hbWUgPyBtZXRhZGF0YS5uYW1lIDogJycpXG4gICAgLnJlcGxhY2UoJ3t2ZXJzaW9ufScsIGNvbmZpZy5zaG93VmVyc2lvbiAmJiBtZXRhZGF0YS52ZXJzaW9uID8gbWV0YWRhdGEudmVyc2lvbiA6ICcnKVxuICAgIC5yZXBsYWNlKCd7YXV0aG9yfScsIGNvbmZpZy5zaG93QXV0aG9yICYmIG1ldGFkYXRhLmF1dGhvciA/IG1ldGFkYXRhLmF1dGhvciA6ICcnKVxuICAgIC5yZXBsYWNlKCd7Y2F0ZWdvcnl9JywgY29uZmlnLnNob3dDYXRlZ29yeSAmJiBtZXRhZGF0YS5jYXRlZ29yeSA/IG1ldGFkYXRhLmNhdGVnb3J5IDogJycpO1xuICBcbiAgLy8gQ2xlYW4gdXAgdGhlIGZvcm1hdCBzdHJpbmdcbiAgLy8gUmVtb3ZlIFwidlwiIGlmIG5vIHZlcnNpb24gZm9sbG93cyBpdFxuICBpZiAoIWNvbmZpZy5zaG93VmVyc2lvbiB8fCAhbWV0YWRhdGEudmVyc2lvbikge1xuICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9cXHN2KD89XFxzfF18XFwpfD58fXwkKS8sICcnKTtcbiAgfVxuICAvLyBSZW1vdmUgXCJieVwiIGlmIG5vIGF1dGhvciBmb2xsb3dzIGl0XG4gIGlmICghY29uZmlnLnNob3dBdXRob3IgfHwgIW1ldGFkYXRhLmF1dGhvcikge1xuICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9cXHNieSg/PVxcc3xdfFxcKXw+fH18JCkvLCAnJyk7XG4gIH1cbiAgLy8gQ2xlYW4gdXAgZXh0cmEgc3BhY2VzXG4gIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlQWxsKC9cXHMrL2csICcgJykudHJpbSgpO1xuICBcbiAgLy8gQXBwbHkgYnJhY2tldHMgYmFzZWQgb24gdGhlIHRlbXBsYXRlIGZvcm1hdCAob25seSBpZiB0ZW1wbGF0ZSBkb2Vzbid0IGFscmVhZHkgaGF2ZSB0aGVtKVxuICBpZiAocmVzdWx0ICYmIGNvbmZpZy5zdHlsZSAhPT0gJ2N1c3RvbScpIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGVtcGxhdGUgYWxyZWFkeSBpbmNsdWRlcyBicmFja2V0c1xuICAgIGNvbnN0IHRlbXBsYXRlSGFzQnJhY2tldHMgPSB0ZW1wbGF0ZS5pbmNsdWRlcygnWycpIHx8IHRlbXBsYXRlLmluY2x1ZGVzKCddJykgfHwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUuaW5jbHVkZXMoJygnKSB8fCB0ZW1wbGF0ZS5pbmNsdWRlcygnKScpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUuaW5jbHVkZXMoJ3snKSB8fCB0ZW1wbGF0ZS5pbmNsdWRlcygnfScpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUuaW5jbHVkZXMoJzwnKSB8fCB0ZW1wbGF0ZS5pbmNsdWRlcygnPicpO1xuICAgIFxuICAgIGlmICghdGVtcGxhdGVIYXNCcmFja2V0cykge1xuICAgICAgY29uc3QgYnJhY2tldHMgPSBCUkFDS0VUU1tjb25maWcuYnJhY2tldFN0eWxlXTtcbiAgICAgIGlmIChicmFja2V0cy5vcGVuIHx8IGJyYWNrZXRzLmNsb3NlKSB7XG4gICAgICAgIHJlc3VsdCA9IGAke2JyYWNrZXRzLm9wZW59JHtyZXN1bHR9JHticmFja2V0cy5jbG9zZX1gO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgLy8gQWRkIHNlcGFyYXRvciBpZiB3ZSBoYXZlIGNvbnRlbnRcbiAgaWYgKHJlc3VsdCkge1xuICAgIHJlc3VsdCArPSBjb25maWcuc2VwYXJhdG9yO1xuICB9XG4gIFxuICByZXR1cm4gcmVzdWx0O1xufSJdfQ==
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
export const GITHUB_API_TIMEOUT = {
|
|
14
14
|
// Default timeout for GitHub API requests (milliseconds)
|
|
15
|
-
DEFAULT: parseInt(process.env.DOLLHOUSE_GITHUB_API_TIMEOUT || '30000'),
|
|
15
|
+
DEFAULT: Number.parseInt(process.env.DOLLHOUSE_GITHUB_API_TIMEOUT || '30000'),
|
|
16
16
|
// Minimum allowed timeout (5 seconds)
|
|
17
17
|
MIN: 5000,
|
|
18
18
|
// Maximum allowed timeout (5 minutes)
|
|
@@ -23,7 +23,7 @@ export const GITHUB_API_TIMEOUT = {
|
|
|
23
23
|
*/
|
|
24
24
|
export const FILE_SIZE_LIMITS = {
|
|
25
25
|
// Maximum file size for portfolio submissions (10MB)
|
|
26
|
-
MAX_FILE_SIZE: parseInt(process.env.DOLLHOUSE_MAX_FILE_SIZE || String(10 * 1024 * 1024)),
|
|
26
|
+
MAX_FILE_SIZE: Number.parseInt(process.env.DOLLHOUSE_MAX_FILE_SIZE || String(10 * 1024 * 1024)),
|
|
27
27
|
// Human-readable description of the limit
|
|
28
28
|
MAX_FILE_SIZE_MB: 10
|
|
29
29
|
};
|
|
@@ -32,11 +32,11 @@ export const FILE_SIZE_LIMITS = {
|
|
|
32
32
|
*/
|
|
33
33
|
export const RETRY_CONFIG = {
|
|
34
34
|
// Maximum number of retry attempts
|
|
35
|
-
MAX_ATTEMPTS: parseInt(process.env.DOLLHOUSE_MAX_RETRY_ATTEMPTS || '3'),
|
|
35
|
+
MAX_ATTEMPTS: Number.parseInt(process.env.DOLLHOUSE_MAX_RETRY_ATTEMPTS || '3'),
|
|
36
36
|
// Initial delay between retries (milliseconds)
|
|
37
|
-
INITIAL_DELAY: parseInt(process.env.DOLLHOUSE_INITIAL_RETRY_DELAY || '1000'),
|
|
37
|
+
INITIAL_DELAY: Number.parseInt(process.env.DOLLHOUSE_INITIAL_RETRY_DELAY || '1000'),
|
|
38
38
|
// Maximum delay between retries (milliseconds)
|
|
39
|
-
MAX_DELAY: parseInt(process.env.DOLLHOUSE_MAX_RETRY_DELAY || '5000'),
|
|
39
|
+
MAX_DELAY: Number.parseInt(process.env.DOLLHOUSE_MAX_RETRY_DELAY || '5000'),
|
|
40
40
|
// Backoff multiplier for exponential backoff
|
|
41
41
|
BACKOFF_MULTIPLIER: 2
|
|
42
42
|
};
|
|
@@ -45,9 +45,9 @@ export const RETRY_CONFIG = {
|
|
|
45
45
|
*/
|
|
46
46
|
export const SEARCH_CONFIG = {
|
|
47
47
|
// Minimum similarity score for name suggestions (0.0 to 1.0)
|
|
48
|
-
MIN_SIMILARITY_SCORE: parseFloat(process.env.DOLLHOUSE_MIN_SIMILARITY || '0.3'),
|
|
48
|
+
MIN_SIMILARITY_SCORE: Number.parseFloat(process.env.DOLLHOUSE_MIN_SIMILARITY || '0.3'),
|
|
49
49
|
// Maximum number of suggestions to return
|
|
50
|
-
MAX_SUGGESTIONS: parseInt(process.env.DOLLHOUSE_MAX_SUGGESTIONS || '5')
|
|
50
|
+
MAX_SUGGESTIONS: Number.parseInt(process.env.DOLLHOUSE_MAX_SUGGESTIONS || '5')
|
|
51
51
|
};
|
|
52
52
|
/**
|
|
53
53
|
* Environment variable names for documentation
|
|
@@ -80,14 +80,14 @@ export function getValidatedTimeout() {
|
|
|
80
80
|
*/
|
|
81
81
|
export const GITHUB_API_RATE_LIMITS = {
|
|
82
82
|
// GitHub API limits: 5000/hour authenticated, 60/hour unauthenticated
|
|
83
|
-
AUTHENTICATED_LIMIT: parseInt(process.env.DOLLHOUSE_GITHUB_RATE_LIMIT_AUTH || '5000'),
|
|
84
|
-
UNAUTHENTICATED_LIMIT: parseInt(process.env.DOLLHOUSE_GITHUB_RATE_LIMIT_UNAUTH || '60'),
|
|
83
|
+
AUTHENTICATED_LIMIT: Number.parseInt(process.env.DOLLHOUSE_GITHUB_RATE_LIMIT_AUTH || '5000'),
|
|
84
|
+
UNAUTHENTICATED_LIMIT: Number.parseInt(process.env.DOLLHOUSE_GITHUB_RATE_LIMIT_UNAUTH || '60'),
|
|
85
85
|
// Time window for rate limiting (1 hour)
|
|
86
86
|
WINDOW_MS: 60 * 60 * 1000,
|
|
87
87
|
// Minimum delay between API calls to prevent rapid-fire requests
|
|
88
|
-
MIN_DELAY_MS: parseInt(process.env.DOLLHOUSE_GITHUB_MIN_DELAY || '1000'),
|
|
88
|
+
MIN_DELAY_MS: Number.parseInt(process.env.DOLLHOUSE_GITHUB_MIN_DELAY || '1000'),
|
|
89
89
|
// Buffer percentage - stay below actual limits to avoid hitting them
|
|
90
|
-
BUFFER_PERCENTAGE: parseFloat(process.env.DOLLHOUSE_GITHUB_RATE_BUFFER || '0.9')
|
|
90
|
+
BUFFER_PERCENTAGE: Number.parseFloat(process.env.DOLLHOUSE_GITHUB_RATE_BUFFER || '0.9')
|
|
91
91
|
};
|
|
92
92
|
/**
|
|
93
93
|
* Calculate retry delay using exponential backoff
|
|
@@ -96,4 +96,4 @@ export function calculateRetryDelay(attempt) {
|
|
|
96
96
|
const delay = Math.min(RETRY_CONFIG.INITIAL_DELAY * Math.pow(RETRY_CONFIG.BACKOFF_MULTIPLIER, attempt - 1), RETRY_CONFIG.MAX_DELAY);
|
|
97
97
|
return delay;
|
|
98
98
|
}
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydGZvbGlvLWNvbnN0YW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcvcG9ydGZvbGlvLWNvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBY0g7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDaEMseURBQXlEO0lBQ3pELE9BQU8sRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLElBQUksT0FBTyxDQUFDO0lBRTdFLHNDQUFzQztJQUN0QyxHQUFHLEVBQUUsSUFBSTtJQUVULHNDQUFzQztJQUN0QyxHQUFHLEVBQUUsTUFBTTtDQUNILENBQUM7QUFFWDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHO0lBQzlCLHFEQUFxRDtJQUNyRCxhQUFhLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixJQUFJLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBRS9GLDBDQUEwQztJQUMxQyxnQkFBZ0IsRUFBRSxFQUFFO0NBQ1osQ0FBQztBQUVYOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHO0lBQzFCLG1DQUFtQztJQUNuQyxZQUFZLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixJQUFJLEdBQUcsQ0FBQztJQUU5RSwrQ0FBK0M7SUFDL0MsYUFBYSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsSUFBSSxNQUFNLENBQUM7SUFFbkYsK0NBQStDO0lBQy9DLFNBQVMsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLElBQUksTUFBTSxDQUFDO0lBRTNFLDZDQUE2QztJQUM3QyxrQkFBa0IsRUFBRSxDQUFDO0NBQ2IsQ0FBQztBQUVYOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHO0lBQzNCLDZEQUE2RDtJQUM3RCxvQkFBb0IsRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLElBQUksS0FBSyxDQUFDO0lBRXRGLDBDQUEwQztJQUMxQyxlQUFlLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixJQUFJLEdBQUcsQ0FBQztDQUN0RSxDQUFDO0FBRVg7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUc7SUFDdEIsa0JBQWtCLEVBQUUsOEJBQThCO0lBQ2xELGFBQWEsRUFBRSx5QkFBeUI7SUFDeEMsa0JBQWtCLEVBQUUsOEJBQThCO0lBQ2xELG1CQUFtQixFQUFFLCtCQUErQjtJQUNwRCxlQUFlLEVBQUUsMkJBQTJCO0lBQzVDLGNBQWMsRUFBRSwwQkFBMEI7SUFDMUMsZUFBZSxFQUFFLDJCQUEyQjtDQUNwQyxDQUFDO0FBRVg7O0dBRUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQztJQUUzQyxJQUFJLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNyQyxPQUFPLGtCQUFrQixDQUFDLEdBQUcsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxPQUFPLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDckMsT0FBTyxrQkFBa0IsQ0FBQyxHQUFHLENBQUM7SUFDaEMsQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRztJQUNwQyxzRUFBc0U7SUFDdEUsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxJQUFJLE1BQU0sQ0FBQztJQUM1RixxQkFBcUIsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLElBQUksSUFBSSxDQUFDO0lBRTlGLHlDQUF5QztJQUN6QyxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJO0lBRXpCLGlFQUFpRTtJQUNqRSxZQUFZLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixJQUFJLE1BQU0sQ0FBQztJQUUvRSxxRUFBcUU7SUFDckUsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixJQUFJLEtBQUssQ0FBQztDQUMvRSxDQUFDO0FBRVg7O0dBRUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsT0FBZTtJQUNqRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUNwQixZQUFZLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLGtCQUFrQixFQUFFLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFDbkYsWUFBWSxDQUFDLFNBQVMsQ0FDdkIsQ0FBQztJQUNGLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUG9ydGZvbGlvIFRvb2wgQ29uZmlndXJhdGlvbiBDb25zdGFudHNcbiAqIFxuICogQ2VudHJhbGl6ZWQgY29uZmlndXJhdGlvbiBmb3IgdGltZW91dCB2YWx1ZXMsIGZpbGUgc2l6ZSBsaW1pdHMsXG4gKiByZXRyeSBiZWhhdmlvciwgYW5kIG90aGVyIHBvcnRmb2xpby1yZWxhdGVkIGNvbnN0YW50cy5cbiAqIFxuICogQWxsIHZhbHVlcyBjYW4gYmUgb3ZlcnJpZGRlbiB2aWEgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBmbGV4aWJpbGl0eS5cbiAqL1xuXG4vKipcbiAqIFBvcnRmb2xpbyBlbGVtZW50IG1ldGFkYXRhIGludGVyZmFjZSBmb3IgdHlwZSBzYWZldHlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb3J0Zm9saW9FbGVtZW50TWV0YWRhdGEge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGF1dGhvcjogc3RyaW5nO1xuICBjcmVhdGVkOiBzdHJpbmc7XG4gIHVwZGF0ZWQ6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEdpdEh1YiBBUEkgdGltZW91dCBjb25maWd1cmF0aW9uXG4gKiBVc2VkIGZvciBjb2xsZWN0aW9uIHN1Ym1pc3Npb24gQVBJIGNhbGxzXG4gKi9cbmV4cG9ydCBjb25zdCBHSVRIVUJfQVBJX1RJTUVPVVQgPSB7XG4gIC8vIERlZmF1bHQgdGltZW91dCBmb3IgR2l0SHViIEFQSSByZXF1ZXN0cyAobWlsbGlzZWNvbmRzKVxuICBERUZBVUxUOiBOdW1iZXIucGFyc2VJbnQocHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0dJVEhVQl9BUElfVElNRU9VVCB8fCAnMzAwMDAnKSxcbiAgXG4gIC8vIE1pbmltdW0gYWxsb3dlZCB0aW1lb3V0ICg1IHNlY29uZHMpXG4gIE1JTjogNTAwMCxcbiAgXG4gIC8vIE1heGltdW0gYWxsb3dlZCB0aW1lb3V0ICg1IG1pbnV0ZXMpXG4gIE1BWDogMzAwMDAwXG59IGFzIGNvbnN0O1xuXG4vKipcbiAqIEZpbGUgc2l6ZSBsaW1pdHMgZm9yIHBvcnRmb2xpbyBzdWJtaXNzaW9uc1xuICovXG5leHBvcnQgY29uc3QgRklMRV9TSVpFX0xJTUlUUyA9IHtcbiAgLy8gTWF4aW11bSBmaWxlIHNpemUgZm9yIHBvcnRmb2xpbyBzdWJtaXNzaW9ucyAoMTBNQilcbiAgTUFYX0ZJTEVfU0laRTogTnVtYmVyLnBhcnNlSW50KHByb2Nlc3MuZW52LkRPTExIT1VTRV9NQVhfRklMRV9TSVpFIHx8IFN0cmluZygxMCAqIDEwMjQgKiAxMDI0KSksXG4gIFxuICAvLyBIdW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgbGltaXRcbiAgTUFYX0ZJTEVfU0laRV9NQjogMTBcbn0gYXMgY29uc3Q7XG5cbi8qKlxuICogUmV0cnkgY29uZmlndXJhdGlvbiBmb3IgQVBJIG9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IGNvbnN0IFJFVFJZX0NPTkZJRyA9IHtcbiAgLy8gTWF4aW11bSBudW1iZXIgb2YgcmV0cnkgYXR0ZW1wdHNcbiAgTUFYX0FUVEVNUFRTOiBOdW1iZXIucGFyc2VJbnQocHJvY2Vzcy5lbnYuRE9MTEhPVVNFX01BWF9SRVRSWV9BVFRFTVBUUyB8fCAnMycpLFxuICBcbiAgLy8gSW5pdGlhbCBkZWxheSBiZXR3ZWVuIHJldHJpZXMgKG1pbGxpc2Vjb25kcylcbiAgSU5JVElBTF9ERUxBWTogTnVtYmVyLnBhcnNlSW50KHByb2Nlc3MuZW52LkRPTExIT1VTRV9JTklUSUFMX1JFVFJZX0RFTEFZIHx8ICcxMDAwJyksXG4gIFxuICAvLyBNYXhpbXVtIGRlbGF5IGJldHdlZW4gcmV0cmllcyAobWlsbGlzZWNvbmRzKVxuICBNQVhfREVMQVk6IE51bWJlci5wYXJzZUludChwcm9jZXNzLmVudi5ET0xMSE9VU0VfTUFYX1JFVFJZX0RFTEFZIHx8ICc1MDAwJyksXG4gIFxuICAvLyBCYWNrb2ZmIG11bHRpcGxpZXIgZm9yIGV4cG9uZW50aWFsIGJhY2tvZmZcbiAgQkFDS09GRl9NVUxUSVBMSUVSOiAyXG59IGFzIGNvbnN0O1xuXG4vKipcbiAqIFNlYXJjaCBhbmQgc2ltaWxhcml0eSBtYXRjaGluZyBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBTRUFSQ0hfQ09ORklHID0ge1xuICAvLyBNaW5pbXVtIHNpbWlsYXJpdHkgc2NvcmUgZm9yIG5hbWUgc3VnZ2VzdGlvbnMgKDAuMCB0byAxLjApXG4gIE1JTl9TSU1JTEFSSVRZX1NDT1JFOiBOdW1iZXIucGFyc2VGbG9hdChwcm9jZXNzLmVudi5ET0xMSE9VU0VfTUlOX1NJTUlMQVJJVFkgfHwgJzAuMycpLFxuICBcbiAgLy8gTWF4aW11bSBudW1iZXIgb2Ygc3VnZ2VzdGlvbnMgdG8gcmV0dXJuXG4gIE1BWF9TVUdHRVNUSU9OUzogTnVtYmVyLnBhcnNlSW50KHByb2Nlc3MuZW52LkRPTExIT1VTRV9NQVhfU1VHR0VTVElPTlMgfHwgJzUnKVxufSBhcyBjb25zdDtcblxuLyoqXG4gKiBFbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcyBmb3IgZG9jdW1lbnRhdGlvblxuICovXG5leHBvcnQgY29uc3QgRU5WX1ZBUlMgPSB7XG4gIEdJVEhVQl9BUElfVElNRU9VVDogJ0RPTExIT1VTRV9HSVRIVUJfQVBJX1RJTUVPVVQnLFxuICBNQVhfRklMRV9TSVpFOiAnRE9MTEhPVVNFX01BWF9GSUxFX1NJWkUnLFxuICBNQVhfUkVUUllfQVRURU1QVFM6ICdET0xMSE9VU0VfTUFYX1JFVFJZX0FUVEVNUFRTJyxcbiAgSU5JVElBTF9SRVRSWV9ERUxBWTogJ0RPTExIT1VTRV9JTklUSUFMX1JFVFJZX0RFTEFZJyxcbiAgTUFYX1JFVFJZX0RFTEFZOiAnRE9MTEhPVVNFX01BWF9SRVRSWV9ERUxBWScsXG4gIE1JTl9TSU1JTEFSSVRZOiAnRE9MTEhPVVNFX01JTl9TSU1JTEFSSVRZJyxcbiAgTUFYX1NVR0dFU1RJT05TOiAnRE9MTEhPVVNFX01BWF9TVUdHRVNUSU9OUydcbn0gYXMgY29uc3Q7XG5cbi8qKlxuICogVmFsaWRhdGlvbiBoZWxwZXIgdG8gZW5zdXJlIHRpbWVvdXQgaXMgd2l0aGluIGFjY2VwdGFibGUgYm91bmRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWxpZGF0ZWRUaW1lb3V0KCk6IG51bWJlciB7XG4gIGNvbnN0IHRpbWVvdXQgPSBHSVRIVUJfQVBJX1RJTUVPVVQuREVGQVVMVDtcbiAgXG4gIGlmICh0aW1lb3V0IDwgR0lUSFVCX0FQSV9USU1FT1VULk1JTikge1xuICAgIHJldHVybiBHSVRIVUJfQVBJX1RJTUVPVVQuTUlOO1xuICB9XG4gIFxuICBpZiAodGltZW91dCA+IEdJVEhVQl9BUElfVElNRU9VVC5NQVgpIHtcbiAgICByZXR1cm4gR0lUSFVCX0FQSV9USU1FT1VULk1BWDtcbiAgfVxuICBcbiAgcmV0dXJuIHRpbWVvdXQ7XG59XG5cbi8qKlxuICogR2l0SHViIEFQSSByYXRlIGxpbWl0aW5nIGNvbmZpZ3VyYXRpb25cbiAqIEltcGxlbWVudHMgY2xpZW50LXNpZGUgcmF0ZSBsaW1pdGluZyB0byByZXNwZWN0IEdpdEh1YidzIEFQSSBsaW1pdHNcbiAqL1xuZXhwb3J0IGNvbnN0IEdJVEhVQl9BUElfUkFURV9MSU1JVFMgPSB7XG4gIC8vIEdpdEh1YiBBUEkgbGltaXRzOiA1MDAwL2hvdXIgYXV0aGVudGljYXRlZCwgNjAvaG91ciB1bmF1dGhlbnRpY2F0ZWRcbiAgQVVUSEVOVElDQVRFRF9MSU1JVDogTnVtYmVyLnBhcnNlSW50KHByb2Nlc3MuZW52LkRPTExIT1VTRV9HSVRIVUJfUkFURV9MSU1JVF9BVVRIIHx8ICc1MDAwJyksXG4gIFVOQVVUSEVOVElDQVRFRF9MSU1JVDogTnVtYmVyLnBhcnNlSW50KHByb2Nlc3MuZW52LkRPTExIT1VTRV9HSVRIVUJfUkFURV9MSU1JVF9VTkFVVEggfHwgJzYwJyksXG4gIFxuICAvLyBUaW1lIHdpbmRvdyBmb3IgcmF0ZSBsaW1pdGluZyAoMSBob3VyKVxuICBXSU5ET1dfTVM6IDYwICogNjAgKiAxMDAwLFxuICBcbiAgLy8gTWluaW11bSBkZWxheSBiZXR3ZWVuIEFQSSBjYWxscyB0byBwcmV2ZW50IHJhcGlkLWZpcmUgcmVxdWVzdHNcbiAgTUlOX0RFTEFZX01TOiBOdW1iZXIucGFyc2VJbnQocHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0dJVEhVQl9NSU5fREVMQVkgfHwgJzEwMDAnKSxcbiAgXG4gIC8vIEJ1ZmZlciBwZXJjZW50YWdlIC0gc3RheSBiZWxvdyBhY3R1YWwgbGltaXRzIHRvIGF2b2lkIGhpdHRpbmcgdGhlbVxuICBCVUZGRVJfUEVSQ0VOVEFHRTogTnVtYmVyLnBhcnNlRmxvYXQocHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0dJVEhVQl9SQVRFX0JVRkZFUiB8fCAnMC45Jylcbn0gYXMgY29uc3Q7XG5cbi8qKlxuICogQ2FsY3VsYXRlIHJldHJ5IGRlbGF5IHVzaW5nIGV4cG9uZW50aWFsIGJhY2tvZmZcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZVJldHJ5RGVsYXkoYXR0ZW1wdDogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgZGVsYXkgPSBNYXRoLm1pbihcbiAgICBSRVRSWV9DT05GSUcuSU5JVElBTF9ERUxBWSAqIE1hdGgucG93KFJFVFJZX0NPTkZJRy5CQUNLT0ZGX01VTFRJUExJRVIsIGF0dGVtcHQgLSAxKSxcbiAgICBSRVRSWV9DT05GSUcuTUFYX0RFTEFZXG4gICk7XG4gIHJldHVybiBkZWxheTtcbn0iXX0=
|
|
@@ -32,9 +32,9 @@ export function normalizeVersion(version) {
|
|
|
32
32
|
}
|
|
33
33
|
const [, major, minor = '0', patch = '0', suffix = ''] = match;
|
|
34
34
|
// Strip leading zeros but preserve "0" as valid
|
|
35
|
-
const normalizedMajor = parseInt(major, 10).toString();
|
|
36
|
-
const normalizedMinor = parseInt(minor, 10).toString();
|
|
37
|
-
const normalizedPatch = parseInt(patch, 10).toString();
|
|
35
|
+
const normalizedMajor = Number.parseInt(major, 10).toString();
|
|
36
|
+
const normalizedMinor = Number.parseInt(minor, 10).toString();
|
|
37
|
+
const normalizedPatch = Number.parseInt(patch, 10).toString();
|
|
38
38
|
return `${normalizedMajor}.${normalizedMinor}.${normalizedPatch}${suffix}`;
|
|
39
39
|
}
|
|
40
40
|
export class BaseElement {
|
|
@@ -97,8 +97,8 @@ export class BaseElement {
|
|
|
97
97
|
const typeSlug = this.type.toLowerCase();
|
|
98
98
|
const nameSlug = name
|
|
99
99
|
.toLowerCase()
|
|
100
|
-
.
|
|
101
|
-
.
|
|
100
|
+
.replaceAll(/[^a-z0-9]+/g, '-') // Replace non-alphanumeric chars with hyphens
|
|
101
|
+
.replaceAll(/(^-)|(-$)/g, ''); // Trim leading/trailing hyphens
|
|
102
102
|
const timestamp = Date.now();
|
|
103
103
|
return `${typeSlug}_${nameSlug}_${timestamp}`;
|
|
104
104
|
}
|
|
@@ -400,7 +400,7 @@ export class BaseElement {
|
|
|
400
400
|
// Look for explicit ratings
|
|
401
401
|
const ratingMatch = lower.match(/(\d+)\s*(stars?|\/5|out of 5)/);
|
|
402
402
|
if (ratingMatch) {
|
|
403
|
-
const rating = parseInt(ratingMatch[1]);
|
|
403
|
+
const rating = Number.parseInt(ratingMatch[1]);
|
|
404
404
|
if (rating >= 1 && rating <= 5)
|
|
405
405
|
return rating;
|
|
406
406
|
}
|
|
@@ -500,4 +500,4 @@ export class BaseElement {
|
|
|
500
500
|
this._isDirty = false;
|
|
501
501
|
}
|
|
502
502
|
}
|
|
503
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZUVsZW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZWxlbWVudHMvQmFzZUVsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUdMLGFBQWEsRUFRZCxNQUFNLDRCQUE0QixDQUFDO0FBRXBDLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFbkU7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxPQUFlO0lBQzlDLHlEQUF5RDtJQUN6RCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7SUFFeEUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsNkNBQTZDO1FBQzdDLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLEdBQUcsRUFBRSxLQUFLLEdBQUcsR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7SUFFL0QsZ0RBQWdEO0lBQ2hELE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdkQsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FB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QzFDLENBQUM7SUFFTSxLQUFLLENBQUMsUUFBUTtRQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLElBQUksYUFBYSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO0lBQ3RDLENBQUM7SUFFTSxLQUFLLENBQUMsYUFBYTtRQUN4QixNQUFNLENBQUMsS0FBSyxDQUFDLDJCQUEyQixJQUFJLENBQUMsSUFBSSxhQUFhLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRU0sS0FBSyxDQUFDLFVBQVU7UUFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLElBQUksYUFBYSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDO1FBQzFDLDRDQUE0QztRQUM1QyxJQUFJLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUM7SUFDeEMsQ0FBQztJQUVEOztPQUVHO0lBQ08sU0FBUztRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3BELENBQUM7SUFFRDs7T0FFRztJQUNJLE9BQU87UUFDWixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUztRQUNkLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQmFzZSBhYnN0cmFjdCBjbGFzcyBpbXBsZW1lbnRpbmcgSUVsZW1lbnQgaW50ZXJmYWNlLlxuICogUHJvdmlkZXMgY29tbW9uIGZ1bmN0aW9uYWxpdHkgdGhhdCBhbGwgZWxlbWVudCB0eXBlcyBjYW4gZXh0ZW5kLlxuICovXG5cbmltcG9ydCB7XG4gIElFbGVtZW50LFxuICBJRWxlbWVudE1ldGFkYXRhLFxuICBFbGVtZW50U3RhdHVzLFxuICBFbGVtZW50UmF0aW5ncyxcbiAgUmVmZXJlbmNlLFxuICBFbGVtZW50VmFsaWRhdGlvblJlc3VsdCxcbiAgVmFsaWRhdGlvbkVycm9yLFxuICBWYWxpZGF0aW9uV2FybmluZyxcbiAgRmVlZGJhY2tDb250ZXh0LFxuICBVc2VyRmVlZGJhY2tcbn0gZnJvbSAnLi4vdHlwZXMvZWxlbWVudHMvaW5kZXguanMnO1xuaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tICcuLi9wb3J0Zm9saW8vdHlwZXMuanMnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gJ2pzLXlhbWwnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcbmltcG9ydCB7IFNlY3VyZVlhbWxQYXJzZXIgfSBmcm9tICcuLi9zZWN1cml0eS9zZWN1cmVZYW1sUGFyc2VyLmpzJztcblxuLyoqXG4gKiBOb3JtYWxpemVzIHZlcnNpb24gc3RyaW5ncyB0byBmdWxsIHNlbXZlciBmb3JtYXQgKFguWS5aKVxuICogVGhpcyBoZWxwcyBtYWludGFpbiBjb25zaXN0ZW5jeSB3aGlsZSBhY2NlcHRpbmcgZmxleGlibGUgaW5wdXQgZm9ybWF0c1xuICogXG4gKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSB2ZXJzaW9uIHN0cmluZyB0byBub3JtYWxpemVcbiAqIEByZXR1cm5zIE5vcm1hbGl6ZWQgdmVyc2lvbiBzdHJpbmcgaW4gWC5ZLlogZm9ybWF0IHdpdGggbGVhZGluZyB6ZXJvcyByZW1vdmVkXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBub3JtYWxpemVWZXJzaW9uKFwiMVwiKSAgICAgICAgLy8gXCIxLjAuMFwiXG4gKiBub3JtYWxpemVWZXJzaW9uKFwiMS4yXCIpICAgICAgLy8gXCIxLjIuMFwiXG4gKiBub3JtYWxpemVWZXJzaW9uKFwiMS4yLjNcIikgICAgLy8gXCIxLjIuM1wiXG4gKiBub3JtYWxpemVWZXJzaW9uKFwiMS4wLWJldGFcIikgLy8gXCIxLjAuMC1iZXRhXCJcbiAqIG5vcm1hbGl6ZVZlcnNpb24oXCIwMS4wMi4wM1wiKSAvLyBcIjEuMi4zXCIgKHN0cmlwcyBsZWFkaW5nIHplcm9zKVxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplVmVyc2lvbih2ZXJzaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBFeHRyYWN0IGJhc2UgdmVyc2lvbiBhbmQgYW55IHByZXJlbGVhc2UvYnVpbGQgbWV0YWRhdGFcbiAgY29uc3QgbWF0Y2ggPSB2ZXJzaW9uLm1hdGNoKC9eKFxcZCspKD86XFwuKFxcZCspKT8oPzpcXC4oXFxkKykpPyhbLStdLispPyQvKTtcbiAgXG4gIGlmICghbWF0Y2gpIHtcbiAgICAvLyBSZXR1cm4gYXMtaXMgaWYgbm90IGEgdmFsaWQgdmVyc2lvbiBmb3JtYXRcbiAgICByZXR1cm4gdmVyc2lvbjtcbiAgfVxuICBcbiAgY29uc3QgWywgbWFqb3IsIG1pbm9yID0gJzAnLCBwYXRjaCA9ICcwJywgc3VmZml4ID0gJyddID0gbWF0Y2g7XG4gIFxuICAvLyBTdHJpcCBsZWFkaW5nIHplcm9zIGJ1dCBwcmVzZXJ2ZSBcIjBcIiBhcyB2YWxpZFxuICBjb25zdCBub3JtYWxpemVkTWFqb3IgPSBwYXJzZUludChtYWpvciwgMTApLnRvU3RyaW5nKCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRNaW5vciA9IHBhcnNlSW50KG1pbm9yLCAxMCkudG9TdHJpbmcoKTtcbiAgY29uc3Qgbm9ybWFsaXplZFBhdGNoID0gcGFyc2VJbnQocGF0Y2gsIDEwKS50b1N0cmluZygpO1xuICBcbiAgcmV0dXJuIGAke25vcm1hbGl6ZWRNYWpvcn0uJHtub3JtYWxpemVkTWlub3J9LiR7bm9ybWFsaXplZFBhdGNofSR7c3VmZml4fWA7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRWxlbWVudCBpbXBsZW1lbnRzIElFbGVtZW50IHtcbiAgLy8gSWRlbnRpdHlcbiAgcHVibGljIGlkOiBzdHJpbmc7XG4gIHB1YmxpYyB0eXBlOiBFbGVtZW50VHlwZTtcbiAgcHVibGljIHZlcnNpb246IHN0cmluZztcbiAgXG4gIC8vIE1ldGFkYXRhXG4gIHB1YmxpYyBtZXRhZGF0YTogSUVsZW1lbnRNZXRhZGF0YTtcbiAgXG4gIC8vIEZlYXR1cmVzXG4gIHB1YmxpYyByZWZlcmVuY2VzPzogUmVmZXJlbmNlW107XG4gIHB1YmxpYyBleHRlbnNpb25zPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgcHVibGljIHJhdGluZ3M/OiBFbGVtZW50UmF0aW5ncztcbiAgXG4gIC8vIEludGVybmFsIHN0YXRlXG4gIHByb3RlY3RlZCBfc3RhdHVzOiBFbGVtZW50U3RhdHVzID0gRWxlbWVudFN0YXR1cy5JTkFDVElWRTtcbiAgcHJvdGVjdGVkIF9pc0RpcnR5OiBib29sZWFuID0gZmFsc2U7XG4gIFxuICAvLyBDb25zdGFudHNcbiAgcHJpdmF0ZSByZWFkb25seSBNQVhfRkVFREJBQ0tfSElTVE9SWSA9IDEwMDtcbiAgXG4gIGNvbnN0cnVjdG9yKHR5cGU6IEVsZW1lbnRUeXBlLCBtZXRhZGF0YTogUGFydGlhbDxJRWxlbWVudE1ldGFkYXRhPiA9IHt9KSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLmlkID0gbWV0YWRhdGEubmFtZSA/IHRoaXMuZ2VuZXJhdGVJZChtZXRhZGF0YS5uYW1lKSA6IHV1aWR2NCgpO1xuICAgIHRoaXMudmVyc2lvbiA9IG1ldGFkYXRhLnZlcnNpb24gfHwgJzEuMC4wJztcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIG1ldGFkYXRhIHdpdGggZGVmYXVsdHNcbiAgICAvLyBGSVggIzExMjQ6IEJ1aWxkIG1ldGFkYXRhIG9iamVjdCB3aXRoIGtub3duIGZpZWxkcyBmaXJzdFxuICAgIGNvbnN0IGJhc2VNZXRhZGF0YTogYW55ID0ge1xuICAgICAgbmFtZTogbWV0YWRhdGEubmFtZSB8fCAnVW5uYW1lZCBFbGVtZW50JyxcbiAgICAgIGRlc2NyaXB0aW9uOiBtZXRhZGF0YS5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgIGF1dGhvcjogbWV0YWRhdGEuYXV0aG9yLFxuICAgICAgdmVyc2lvbjogdGhpcy52ZXJzaW9uLFxuICAgICAgY3JlYXRlZDogbWV0YWRhdGEuY3JlYXRlZCB8fCBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBtb2RpZmllZDogbWV0YWRhdGEubW9kaWZpZWQgfHwgbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgdGFnczogbWV0YWRhdGEudGFncyB8fCBbXSxcbiAgICAgIGRlcGVuZGVuY2llczogbWV0YWRhdGEuZGVwZW5kZW5jaWVzIHx8IFtdLFxuICAgICAgY3VzdG9tOiBtZXRhZGF0YS5jdXN0b20gfHwge31cbiAgICB9O1xuXG4gICAgLy8gU2VsZWN0aXZlbHkgcHJlc2VydmUgYWRkaXRpb25hbCBzdHJpbmcgYXJyYXkgZmllbGRzIGxpa2UgdHJpZ2dlcnNcbiAgICAvLyBUaGlzIGF2b2lkcyBzcHJlYWRpbmcgbm9uLXNlcmlhbGl6YWJsZSBvYmplY3RzIHRoYXQgYnJlYWsgWUFNTCBzZXJpYWxpemF0aW9uXG4gICAgaWYgKCd0cmlnZ2VycycgaW4gbWV0YWRhdGEgJiYgQXJyYXkuaXNBcnJheSgobWV0YWRhdGEgYXMgYW55KS50cmlnZ2VycykpIHtcbiAgICAgIGJhc2VNZXRhZGF0YS50cmlnZ2VycyA9IChtZXRhZGF0YSBhcyBhbnkpLnRyaWdnZXJzO1xuICAgIH1cblxuICAgIHRoaXMubWV0YWRhdGEgPSBiYXNlTWV0YWRhdGE7XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBvcHRpb25hbCBmZWF0dXJlc1xuICAgIHRoaXMucmVmZXJlbmNlcyA9IFtdO1xuICAgIHRoaXMuZXh0ZW5zaW9ucyA9IHt9O1xuICAgIHRoaXMucmF0aW5ncyA9IHtcbiAgICAgIGFpUmF0aW5nOiAwLFxuICAgICAgdXNlclJhdGluZzogdW5kZWZpbmVkLFxuICAgICAgcmF0aW5nQ291bnQ6IDAsXG4gICAgICBsYXN0RXZhbHVhdGVkOiBuZXcgRGF0ZSgpLFxuICAgICAgY29uZmlkZW5jZTogMCxcbiAgICAgIHRyZW5kOiAnc3RhYmxlJyxcbiAgICAgIGZlZWRiYWNrSGlzdG9yeTogW11cbiAgICB9O1xuICB9XG4gIFxuICAvKipcbiAgICogR2VuZXJhdGUgYSB1bmlxdWUgSUQgZm9yIHRoZSBlbGVtZW50IGJhc2VkIG9uIGl0cyBuYW1lIGFuZCB0eXBlLlxuICAgKiBGb3JtYXQ6IHR5cGVfbmFtZS1zbHVnX3RpbWVzdGFtcFxuICAgKi9cbiAgcHJvdGVjdGVkIGdlbmVyYXRlSWQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlU2x1ZyA9IHRoaXMudHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IG5hbWVTbHVnID0gbmFtZVxuICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgIC5yZXBsYWNlKC9bXmEtejAtOV0rL2csICctJykgIC8vIFJlcGxhY2Ugbm9uLWFscGhhbnVtZXJpYyBjaGFycyB3aXRoIGh5cGhlbnNcbiAgICAgIC5yZXBsYWNlKC8oXi0pfCgtJCkvZywgJycpOyAgIC8vIFRyaW0gbGVhZGluZy90cmFpbGluZyBoeXBoZW5zXG4gICAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICBcbiAgICByZXR1cm4gYCR7dHlwZVNsdWd9XyR7bmFtZVNsdWd9XyR7dGltZXN0YW1wfWA7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDb3JlIHZhbGlkYXRpb24gdGhhdCBhbGwgZWxlbWVudHMgc2hhcmUuXG4gICAqIFN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIGFuZCBjYWxsIHN1cGVyLnZhbGlkYXRlKCkgZmlyc3QuXG4gICAqL1xuICBwdWJsaWMgdmFsaWRhdGUoKTogRWxlbWVudFZhbGlkYXRpb25SZXN1bHQge1xuICAgIC8vIExvZyBzZWN1cml0eS1yZWxldmFudCB2YWxpZGF0aW9uIGV2ZW50XG4gICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgdHlwZTogJ1lBTUxfUEFSU0VfU1VDQ0VTUycsXG4gICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICBzb3VyY2U6ICdCYXNlRWxlbWVudC52YWxpZGF0ZScsXG4gICAgICBkZXRhaWxzOiBgRWxlbWVudCB2YWxpZGF0aW9uIHBlcmZvcm1lZCBmb3IgJHt0aGlzLnR5cGV9OiR7dGhpcy5pZH1gLFxuICAgICAgYWRkaXRpb25hbERhdGE6IHsgZWxlbWVudFR5cGU6IHRoaXMudHlwZSwgZWxlbWVudElkOiB0aGlzLmlkIH1cbiAgICB9KTtcbiAgICBcbiAgICBjb25zdCBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcltdID0gW107XG4gICAgY29uc3Qgd2FybmluZ3M6IFZhbGlkYXRpb25XYXJuaW5nW10gPSBbXTtcbiAgICBjb25zdCBzdWdnZXN0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgICBcbiAgICAvLyBWYWxpZGF0ZSByZXF1aXJlZCBmaWVsZHNcbiAgICBpZiAoIXRoaXMuaWQpIHtcbiAgICAgIGVycm9ycy5wdXNoKHsgZmllbGQ6ICdpZCcsIG1lc3NhZ2U6ICdFbGVtZW50IElEIGlzIHJlcXVpcmVkJyB9KTtcbiAgICB9XG4gICAgXG4gICAgaWYgKCF0aGlzLm1ldGFkYXRhLm5hbWUgfHwgdGhpcy5tZXRhZGF0YS5uYW1lLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIGVycm9ycy5wdXNoKHsgZmllbGQ6ICdtZXRhZGF0YS5uYW1lJywgbWVzc2FnZTogJ0VsZW1lbnQgbmFtZSBpcyByZXF1aXJlZCcgfSk7XG4gICAgfVxuICAgIFxuICAgIGlmICghdGhpcy5tZXRhZGF0YS5kZXNjcmlwdGlvbiB8fCB0aGlzLm1ldGFkYXRhLmRlc2NyaXB0aW9uLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIHdhcm5pbmdzLnB1c2goeyBcbiAgICAgICAgZmllbGQ6ICdtZXRhZGF0YS5kZXNjcmlwdGlvbicsIFxuICAgICAgICBtZXNzYWdlOiAnRWxlbWVudCBkZXNjcmlwdGlvbiBpcyByZWNvbW1lbmRlZCcsXG4gICAgICAgIHNldmVyaXR5OiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIC8vIFZhbGlkYXRlIHZlcnNpb24gZm9ybWF0IC0gbW9yZSBmbGV4aWJsZSB0byBzdXBwb3J0IExMTS1nZW5lcmF0ZWQgY29udGVudFxuICAgIC8vIEZJWCBmb3IgSXNzdWUgIzkzNTogQWxsb3cgZmxleGlibGUgdmVyc2lvbiBmb3JtYXRzIGxpa2UgXCIxLjBcIiwgXCIxLjFcIiwgXCIyLjAuMFwiXG4gICAgLy8gUHJldmlvdXNseTogU3RyaWN0IHNlbXZlciByZWdleCByZXF1aXJpbmcgWC5ZLlogZm9ybWF0IGNhdXNlZCBza2lsbHMgYWN0aXZhdGlvbiBmYWlsdXJlc1xuICAgIC8vIE5vdzogQWNjZXB0IGNvbW1vbiB2ZXJzaW9uIHBhdHRlcm5zIHRoYXQgTExNcyBhbmQgaHVtYW5zIG5hdHVyYWxseSB1c2VcbiAgICAvLyBOb3RlOiBMZWFkaW5nIHplcm9zIGFyZSBhbGxvd2VkIChlLmcuLCBcIjAxLjAyLjAzXCIpIGJ1dCB3aWxsIGJlIG5vcm1hbGl6ZWQgdG8gXCIxLjIuM1wiXG4gICAgLy8gU2VjdXJpdHk6IE5vIGluamVjdGlvbiByaXNrIGFzIHZlcnNpb24gaXMganVzdCBtZXRhZGF0YSwgbm90IGV4ZWN1dGVkXG4gICAgY29uc3QgZmxleGlibGVWZXJzaW9uUmVnZXggPSAvXlxcZCsoXFwuXFxkKyk/KFxcLlxcZCspPygtW2EtekEtWjAtOS4tXSspPyhcXCtbYS16QS1aMC05Li1dKyk/JC87XG4gICAgaWYgKCFmbGV4aWJsZVZlcnNpb25SZWdleC50ZXN0KHRoaXMudmVyc2lvbikpIHtcbiAgICAgIGVycm9ycy5wdXNoKHsgXG4gICAgICAgIGZpZWxkOiAndmVyc2lvbicsIFxuICAgICAgICBtZXNzYWdlOiAnVmVyc2lvbiBtdXN0IHN0YXJ0IHdpdGggbnVtYmVycyBpbiBmb3JtYXQ6IE1BSk9SWy5NSU5PUl1bLlBBVENIXVstUFJFUkVMRUFTRV1bK0JVSUxEXS4gVmFsaWQgZXhhbXBsZXM6IFwiMVwiLCBcIjEuMFwiLCBcIjEuMC4wXCIsIFwiMi4xXCIsIFwiMS4wLjAtYmV0YVwiLCBcIjEuMC4wLWFscGhhLjFcIiwgXCIxLjAuMCtidWlsZDEyM1wiLiBUaGUgbWFqb3IgdmVyc2lvbiBpcyByZXF1aXJlZCwgbWlub3IgYW5kIHBhdGNoIGFyZSBvcHRpb25hbC4gTm90ZTogTGVhZGluZyB6ZXJvcyAoZS5nLiwgXCIwMS4wMlwiKSBhcmUgYWNjZXB0ZWQgYnV0IHdpbGwgYmUgbm9ybWFsaXplZCB0byBcIjEuMlwiLicsXG4gICAgICAgIGNvZGU6ICdJTlZBTElEX1ZFUlNJT05fRk9STUFUJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIC8vIFZhbGlkYXRlIHJlZmVyZW5jZXNcbiAgICBpZiAodGhpcy5yZWZlcmVuY2VzKSB7XG4gICAgICB0aGlzLnJlZmVyZW5jZXMuZm9yRWFjaCgocmVmLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoIXJlZi51cmkgfHwgcmVmLnVyaS50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgZXJyb3JzLnB1c2goeyBcbiAgICAgICAgICAgIGZpZWxkOiBgcmVmZXJlbmNlc1ske2luZGV4fV0udXJpYCwgXG4gICAgICAgICAgICBtZXNzYWdlOiAnUmVmZXJlbmNlIFVSSSBpcyByZXF1aXJlZCcgXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZWYudGl0bGUgfHwgcmVmLnRpdGxlLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgICAgICB3YXJuaW5ncy5wdXNoKHsgXG4gICAgICAgICAgICBmaWVsZDogYHJlZmVyZW5jZXNbJHtpbmRleH1dLnRpdGxlYCwgXG4gICAgICAgICAgICBtZXNzYWdlOiAnUmVmZXJlbmNlIHRpdGxlIGlzIHJlY29tbWVuZGVkJyxcbiAgICAgICAgICAgIHNldmVyaXR5OiAnbG93J1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgLy8gVmFsaWRhdGUgcmF0aW5ncyBpZiBwcmVzZW50XG4gICAgaWYgKHRoaXMucmF0aW5ncykge1xuICAgICAgaWYgKHRoaXMucmF0aW5ncy5haVJhdGluZyA8IDAgfHwgdGhpcy5yYXRpbmdzLmFpUmF0aW5nID4gNSkge1xuICAgICAgICBlcnJvcnMucHVzaCh7IFxuICAgICAgICAgIGZpZWxkOiAncmF0aW5ncy5haVJhdGluZycsIFxuICAgICAgICAgIG1lc3NhZ2U6ICdBSSByYXRpbmcgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDUnIFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnJhdGluZ3MudXNlclJhdGluZyAhPT0gdW5kZWZpbmVkICYmIFxuICAgICAgICAgICh0aGlzLnJhdGluZ3MudXNlclJhdGluZyA8IDAgfHwgdGhpcy5yYXRpbmdzLnVzZXJSYXRpbmcgPiA1KSkge1xuICAgICAgICBlcnJvcnMucHVzaCh7IFxuICAgICAgICAgIGZpZWxkOiAncmF0aW5ncy51c2VyUmF0aW5nJywgXG4gICAgICAgICAgbWVzc2FnZTogJ1VzZXIgcmF0aW5nIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA1JyBcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIEFkZCBzdWdnZXN0aW9uc1xuICAgIGlmICghdGhpcy5tZXRhZGF0YS50YWdzIHx8IHRoaXMubWV0YWRhdGEudGFncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHN1Z2dlc3Rpb25zLnB1c2goJ0NvbnNpZGVyIGFkZGluZyB0YWdzIHRvIGltcHJvdmUgZGlzY292ZXJhYmlsaXR5Jyk7XG4gICAgfVxuICAgIFxuICAgIGlmICghdGhpcy5tZXRhZGF0YS5hdXRob3IpIHtcbiAgICAgIHN1Z2dlc3Rpb25zLnB1c2goJ0NvbnNpZGVyIGFkZGluZyBhdXRob3IgaW5mb3JtYXRpb24nKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbGlkOiBlcnJvcnMubGVuZ3RoID09PSAwLFxuICAgICAgZXJyb3JzOiBlcnJvcnMubGVuZ3RoID4gMCA/IGVycm9ycyA6IHVuZGVmaW5lZCxcbiAgICAgIHdhcm5pbmdzOiB3YXJuaW5ncy5sZW5ndGggPiAwID8gd2FybmluZ3MgOiB1bmRlZmluZWQsXG4gICAgICBzdWdnZXN0aW9uczogc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IHN1Z2dlc3Rpb25zIDogdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSB0byBKU09OIGZvcm1hdCBmb3IgaW50ZXJuYWwgdXNlIGFuZCB0ZXN0aW5nLlxuICAgKiBNYWludGFpbnMgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIHRlc3RzLlxuICAgKi9cbiAgcHVibGljIHNlcmlhbGl6ZVRvSlNPTigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIHZlcnNpb246IHRoaXMudmVyc2lvbixcbiAgICAgIG1ldGFkYXRhOiB0aGlzLm1ldGFkYXRhLFxuICAgICAgcmVmZXJlbmNlczogdGhpcy5yZWZlcmVuY2VzLFxuICAgICAgZXh0ZW5zaW9uczogdGhpcy5leHRlbnNpb25zLFxuICAgICAgcmF0aW5nczogdGhpcy5yYXRpbmdzXG4gICAgfTtcbiAgICBcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMik7XG4gIH1cblxuICAvKipcbiAgICogRGVmYXVsdCBzZXJpYWxpemF0aW9uIHRvIG1hcmtkb3duIHdpdGggWUFNTCBmcm9udG1hdHRlci5cbiAgICogVXNlcyBqcy15YW1sIGZvciBzZWN1cmUgWUFNTCBnZW5lcmF0aW9uIHRvIHByZXZlbnQgaW5qZWN0aW9uIGF0dGFja3MuXG4gICAqIEZJWDogQ2hhbmdlZCBmcm9tIEpTT04gdG8gcHJvcGVyIG1hcmtkb3duIGZvcm1hdCBmb3IgR2l0SHViIHBvcnRmb2xpbyBzdG9yYWdlLlxuICAgKiBUaGlzIGVuc3VyZXMgZWxlbWVudHMgYXJlIHJlYWRhYmxlIG9uIEdpdEh1YiBhbmQgY29tcGF0aWJsZSB3aXRoIGNvbGxlY3Rpb24gd29ya2Zsb3cuXG4gICAqL1xuICBwdWJsaWMgc2VyaWFsaXplKCk6IHN0cmluZyB7XG4gICAgLy8gQnVpbGQgWUFNTCBmcm9udG1hdHRlciBzdGFydGluZyB3aXRoIGFsbCBtZXRhZGF0YSBmaWVsZHNcbiAgICAvLyBUaGlzIGVuc3VyZXMgc3ViY2xhc3NlcyBjYW4gYWRkIHRoZWlyIG93biBmaWVsZHNcbiAgICBjb25zdCBmcm9udG1hdHRlcjogUmVjb3JkPHN0cmluZywgYW55PiA9IHtcbiAgICAgIC4uLnRoaXMubWV0YWRhdGEsICAvLyBJbmNsdWRlIGFsbCBtZXRhZGF0YSBmaWVsZHNcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIHZlcnNpb246IHRoaXMudmVyc2lvblxuICAgIH07XG4gICAgXG4gICAgLy8gTm90ZTogbWV0YWRhdGEgYWxyZWFkeSBpbmNsdWRlcyBuYW1lLCBkZXNjcmlwdGlvbiwgYXV0aG9yLCBjcmVhdGVkLCBtb2RpZmllZFxuICAgIC8vIGFuZCBhbnkgYWRkaXRpb25hbCBmaWVsZHMgYWRkZWQgYnkgc3ViY2xhc3Nlc1xuICAgIGlmICh0aGlzLnJlZmVyZW5jZXMgJiYgdGhpcy5yZWZlcmVuY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZyb250bWF0dGVyLnJlZmVyZW5jZXMgPSB0aGlzLnJlZmVyZW5jZXMubWFwKHJlZiA9PiAoe1xuICAgICAgICB0eXBlOiByZWYudHlwZSxcbiAgICAgICAgdXJpOiByZWYudXJpLFxuICAgICAgICB0aXRsZTogcmVmLnRpdGxlXG4gICAgICB9KSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnJhdGluZ3MgJiYgdGhpcy5yYXRpbmdzLmFpUmF0aW5nID4gMCkge1xuICAgICAgZnJvbnRtYXR0ZXIucmF0aW5ncyA9IHtcbiAgICAgICAgYWlSYXRpbmc6IHRoaXMucmF0aW5ncy5haVJhdGluZyxcbiAgICAgICAgdXNlclJhdGluZzogdGhpcy5yYXRpbmdzLnVzZXJSYXRpbmcsXG4gICAgICAgIHJhdGluZ0NvdW50OiB0aGlzLnJhdGluZ3MucmF0aW5nQ291bnRcbiAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIC8vIFJlbW92ZSB1bmRlZmluZWQvbnVsbCB2YWx1ZXNcbiAgICBjb25zdCBjbGVhbkZyb250bWF0dGVyID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmVudHJpZXMoZnJvbnRtYXR0ZXIpLmZpbHRlcigoW18sIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbClcbiAgICApO1xuICAgIFxuICAgIC8vIFVzZSBqcy15YW1sIGZvciBzZWN1cmUgWUFNTCBnZW5lcmF0aW9uXG4gICAgLy8gVGhpcyBwcmV2ZW50cyBZQU1MIGluamVjdGlvbiBhdHRhY2tzIGFuZCBoYW5kbGVzIHNwZWNpYWwgY2hhcmFjdGVycyBwcm9wZXJseVxuICAgIGxldCB5YW1sRnJvbnRtYXR0ZXI6IHN0cmluZztcbiAgICB0cnkge1xuICAgICAgeWFtbEZyb250bWF0dGVyID0geWFtbC5kdW1wKGNsZWFuRnJvbnRtYXR0ZXIsIHtcbiAgICAgICAgbm9SZWZzOiB0cnVlLCAgICAgICAgICAvLyBEb24ndCB1c2UgWUFNTCByZWZlcmVuY2VzXG4gICAgICAgIHNvcnRLZXlzOiBmYWxzZSwgICAgICAgLy8gS2VlcCBvdXIgb3JkZXJcbiAgICAgICAgbGluZVdpZHRoOiAtMSwgICAgICAgICAvLyBEb24ndCB3cmFwIGxpbmVzXG4gICAgICAgIHF1b3RpbmdUeXBlOiAnXCInLCAgICAgIC8vIFVzZSBkb3VibGUgcXVvdGVzIHdoZW4gbmVlZGVkXG4gICAgICAgIGZvcmNlUXVvdGVzOiBmYWxzZSwgICAgLy8gT25seSBxdW90ZSB3aGVuIG5lY2Vzc2FyeVxuICAgICAgICBza2lwSW52YWxpZDogZmFsc2UgICAgIC8vIERvbid0IHNraXAgaW52YWxpZCB2YWx1ZXNcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBJZiBZQU1MIGdlbmVyYXRpb24gZmFpbHMsIGxvZyBhbmQgdGhyb3cgYSBtb3JlIGluZm9ybWF0aXZlIGVycm9yXG4gICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBnZW5lcmF0ZSBZQU1MIGZyb250bWF0dGVyJywgeyBlcnJvciwgZnJvbnRtYXR0ZXI6IGNsZWFuRnJvbnRtYXR0ZXIgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBzZXJpYWxpemUgZWxlbWVudCBtZXRhZGF0YSB0byBZQU1MOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWApO1xuICAgIH1cbiAgICBcbiAgICAvLyBWYWxpZGF0ZSB0aGUgZ2VuZXJhdGVkIFlBTUwgY2FuIGJlIHBhcnNlZCBiYWNrIHVzaW5nIFNlY3VyZVlhbWxQYXJzZXJcbiAgICAvLyBISUdIIFNFVkVSSVRZIEZJWDogVXNlIFNlY3VyZVlhbWxQYXJzZXIgaW5zdGVhZCBvZiB5YW1sLmxvYWQgdG8gcHJldmVudCBjb2RlIGV4ZWN1dGlvblxuICAgIHRyeSB7XG4gICAgICBTZWN1cmVZYW1sUGFyc2VyLnBhcnNlKHlhbWxGcm9udG1hdHRlciwge1xuICAgICAgICBtYXhZYW1sU2l6ZTogNjQgKiAxMDI0LCAvLyA2NEtCIGxpbWl0IGZvciBmcm9udG1hdHRlclxuICAgICAgICB2YWxpZGF0ZUNvbnRlbnQ6IHRydWVcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0dlbmVyYXRlZCBpbnZhbGlkIFlBTUwnLCB7IGVycm9yLCB5YW1sOiB5YW1sRnJvbnRtYXR0ZXIgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEdlbmVyYXRlZCBZQU1MIGlzIGludmFsaWQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YCk7XG4gICAgfVxuICAgIFxuICAgIC8vIEdldCBjb250ZW50IC0gc3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyB0byBwcm92aWRlIGFjdHVhbCBjb250ZW50XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCA/IHRoaXMuZ2V0Q29udGVudCgpIDogYCMgJHt0aGlzLm1ldGFkYXRhLm5hbWV9XFxuXFxuJHt0aGlzLm1ldGFkYXRhLmRlc2NyaXB0aW9uIHx8ICcnfWA7XG4gICAgXG4gICAgLy8gVHJpbSB0aGUgWUFNTCB0byByZW1vdmUgdHJhaWxpbmcgbmV3bGluZSB0aGF0IHlhbWwuZHVtcCBhZGRzXG4gICAgcmV0dXJuIGAtLS1cXG4ke3lhbWxGcm9udG1hdHRlci50cmltKCl9XFxuLS0tXFxuXFxuJHtjb250ZW50fWA7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgZWxlbWVudCBjb250ZW50IGZvciBzZXJpYWxpemF0aW9uLlxuICAgKiBTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSB0aGlzIHRvIHByb3ZpZGUgdGhlaXIgc3BlY2lmaWMgY29udGVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRDb250ZW50PygpOiBzdHJpbmc7XG4gIFxuICAvKipcbiAgICogRGVmYXVsdCBkZXNlcmlhbGl6YXRpb24gZnJvbSBKU09OLlxuICAgKiBTdWJjbGFzc2VzIGNhbiBvdmVycmlkZSBmb3IgY3VzdG9tIGZvcm1hdHMuXG4gICAqL1xuICBwdWJsaWMgZGVzZXJpYWxpemUoZGF0YTogc3RyaW5nKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIE5vcm1hbGl6ZSBVbmljb2RlIGlucHV0IGJlZm9yZSBwYXJzaW5nXG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoZGF0YSk7XG4gICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHZhbGlkYXRpb25SZXN1bHQubm9ybWFsaXplZENvbnRlbnQpO1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSByZXF1aXJlZCBmaWVsZHNcbiAgICAgIGlmICghcGFyc2VkLmlkIHx8ICFwYXJzZWQudHlwZSB8fCAhcGFyc2VkLm1ldGFkYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBlbGVtZW50IGRhdGE6IG1pc3NpbmcgcmVxdWlyZWQgZmllbGRzJyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFVwZGF0ZSBwcm9wZXJ0aWVzXG4gICAgICB0aGlzLmlkID0gcGFyc2VkLmlkO1xuICAgICAgdGhpcy50eXBlID0gcGFyc2VkLnR5cGU7XG4gICAgICB0aGlzLnZlcnNpb24gPSBwYXJzZWQudmVyc2lvbiB8fCAnMS4wLjAnO1xuICAgICAgdGhpcy5tZXRhZGF0YSA9IHBhcnNlZC5tZXRhZGF0YTtcbiAgICAgIHRoaXMucmVmZXJlbmNlcyA9IHBhcnNlZC5yZWZlcmVuY2VzIHx8IFtdO1xuICAgICAgdGhpcy5leHRlbnNpb25zID0gcGFyc2VkLmV4dGVuc2lvbnMgfHwge307XG4gICAgICB0aGlzLnJhdGluZ3MgPSBwYXJzZWQucmF0aW5ncztcbiAgICAgIFxuICAgICAgdGhpcy5faXNEaXJ0eSA9IGZhbHNlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBFbmhhbmNlZCBlcnJvciBjb250ZXh0IHByZXNlcnZhdGlvblxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgY29uc3QgZXJyb3JTdGFjayA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5zdGFjayA6IHVuZGVmaW5lZDtcbiAgICAgIFxuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZGVzZXJpYWxpemUgZWxlbWVudCcsIHsgXG4gICAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgIHN0YWNrOiBlcnJvclN0YWNrLFxuICAgICAgICBkYXRhUHJldmlldzogZGF0YS5zdWJzdHJpbmcoMCwgMjAwKSwgLy8gRmlyc3QgMjAwIGNoYXJzIGZvciBjb250ZXh0XG4gICAgICAgIGVsZW1lbnRUeXBlOiB0aGlzLnR5cGVcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBDcmVhdGUgbmV3IGVycm9yIHdpdGggb3JpZ2luYWwgYXMgY2F1c2VcbiAgICAgIGNvbnN0IGRlc2VyaWFsaXplRXJyb3IgPSBuZXcgRXJyb3IoYEJhc2VFbGVtZW50IGRlc2VyaWFsaXphdGlvbiBmYWlsZWQ6ICR7ZXJyb3JNZXNzYWdlfWApO1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgZGVzZXJpYWxpemVFcnJvci5jYXVzZSA9IGVycm9yO1xuICAgICAgfVxuICAgICAgdGhyb3cgZGVzZXJpYWxpemVFcnJvcjtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBQcm9jZXNzIHVzZXIgZmVlZGJhY2sgYW5kIHVwZGF0ZSByYXRpbmdzLlxuICAgKi9cbiAgcHVibGljIHJlY2VpdmVGZWVkYmFjayhmZWVkYmFjazogc3RyaW5nLCBjb250ZXh0PzogRmVlZGJhY2tDb250ZXh0KTogdm9pZCB7XG4gICAgLy8gTm9ybWFsaXplIFVuaWNvZGUgaW5wdXQgdG8gcHJldmVudCBzZWN1cml0eSBpc3N1ZXNcbiAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoZmVlZGJhY2spO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRGZWVkYmFjayA9IHZhbGlkYXRpb25SZXN1bHQubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgXG4gICAgLy8gTG9nIHNlY3VyaXR5IGV2ZW50IGZvciBmZWVkYmFjayBwcm9jZXNzaW5nXG4gICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgdHlwZTogJ0NPTlRFTlRfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnQmFzZUVsZW1lbnQucmVjZWl2ZUZlZWRiYWNrJyxcbiAgICAgIGRldGFpbHM6IGBGZWVkYmFjayBwcm9jZXNzZWQgZm9yIGVsZW1lbnQgJHt0aGlzLnR5cGV9OiR7dGhpcy5pZH1gLFxuICAgICAgYWRkaXRpb25hbERhdGE6IHsgXG4gICAgICAgIGVsZW1lbnRUeXBlOiB0aGlzLnR5cGUsIFxuICAgICAgICBlbGVtZW50SWQ6IHRoaXMuaWQsXG4gICAgICAgIGZlZWRiYWNrTGVuZ3RoOiBmZWVkYmFjay5sZW5ndGgsXG4gICAgICAgIGhhc1VuaWNvZGVJc3N1ZXM6ICF2YWxpZGF0aW9uUmVzdWx0LmlzVmFsaWRcbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICBpZiAoIXRoaXMucmF0aW5ncykge1xuICAgICAgdGhpcy5yYXRpbmdzID0ge1xuICAgICAgICBhaVJhdGluZzogMCxcbiAgICAgICAgdXNlclJhdGluZzogdW5kZWZpbmVkLFxuICAgICAgICByYXRpbmdDb3VudDogMCxcbiAgICAgICAgbGFzdEV2YWx1YXRlZDogbmV3IERhdGUoKSxcbiAgICAgICAgY29uZmlkZW5jZTogMCxcbiAgICAgICAgdHJlbmQ6ICdzdGFibGUnLFxuICAgICAgICBmZWVkYmFja0hpc3Rvcnk6IFtdXG4gICAgICB9O1xuICAgIH1cbiAgICBcbiAgICAvLyBDcmVhdGUgZmVlZGJhY2sgZW50cnkgd2l0aCBub3JtYWxpemVkIGNvbnRlbnRcbiAgICBjb25zdCB1c2VyRmVlZGJhY2s6IFVzZXJGZWVkYmFjayA9IHtcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgICAgIGZlZWRiYWNrOiBub3JtYWxpemVkRmVlZGJhY2ssXG4gICAgICBzZW50aW1lbnQ6IHRoaXMuYW5hbHl6ZVNlbnRpbWVudChub3JtYWxpemVkRmVlZGJhY2spLFxuICAgICAgaW5mZXJyZWRSYXRpbmc6IHRoaXMuaW5mZXJSYXRpbmcobm9ybWFsaXplZEZlZWRiYWNrKSxcbiAgICAgIGNvbnRleHQsXG4gICAgICBlbGVtZW50VmVyc2lvbjogdGhpcy52ZXJzaW9uXG4gICAgfTtcbiAgICBcbiAgICAvLyBBZGQgdG8gaGlzdG9yeSB3aXRoIGJvdW5kcyBjaGVja2luZ1xuICAgIGlmICghdGhpcy5yYXRpbmdzLmZlZWRiYWNrSGlzdG9yeSkge1xuICAgICAgdGhpcy5yYXRpbmdzLmZlZWRiYWNrSGlzdG9yeSA9IFtdO1xuICAgIH1cbiAgICB0aGlzLnJhdGluZ3MuZmVlZGJhY2tIaXN0b3J5LnB1c2godXNlckZlZWRiYWNrKTtcbiAgICBcbiAgICAvLyBQcmV2ZW50IHVuYm91bmRlZCBncm93dGhcbiAgICBpZiAodGhpcy5yYXRpbmdzLmZlZWRiYWNrSGlzdG9yeS5sZW5ndGggPiB0aGlzLk1BWF9GRUVEQkFDS19ISVNUT1JZKSB7XG4gICAgICB0aGlzLnJhdGluZ3MuZmVlZGJhY2tIaXN0b3J5ID0gdGhpcy5yYXRpbmdzLmZlZWRiYWNrSGlzdG9yeS5zbGljZSgtdGhpcy5NQVhfRkVFREJBQ0tfSElTVE9SWSk7XG4gICAgICBsb2dnZXIuZGVidWcoYEZlZWRiYWNrIGhpc3RvcnkgdHJpbW1lZCB0byAke3RoaXMuTUFYX0ZFRURCQUNLX0hJU1RPUll9IGVudHJpZXMgZm9yIGVsZW1lbnQgJHt0aGlzLmlkfWApO1xuICAgIH1cbiAgICBcbiAgICAvLyBVcGRhdGUgdXNlciByYXRpbmcgaWYgd2UgaW5mZXJyZWQgb25lXG4gICAgaWYgKHVzZXJGZWVkYmFjay5pbmZlcnJlZFJhdGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnVwZGF0ZVVzZXJSYXRpbmcodXNlckZlZWRiYWNrLmluZmVycmVkUmF0aW5nKTtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5faXNEaXJ0eSA9IHRydWU7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTaW1wbGUgc2VudGltZW50IGFuYWx5c2lzLlxuICAgKiBTdWJjbGFzc2VzIGNhbiBvdmVycmlkZSBmb3IgbW9yZSBzb3BoaXN0aWNhdGVkIGFuYWx5c2lzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFuYWx5emVTZW50aW1lbnQoZmVlZGJhY2s6IHN0cmluZyk6ICdwb3NpdGl2ZScgfCAnbmVnYXRpdmUnIHwgJ25ldXRyYWwnIHtcbiAgICBjb25zdCBsb3dlciA9IGZlZWRiYWNrLnRvTG93ZXJDYXNlKCk7XG4gICAgXG4gICAgY29uc3QgcG9zaXRpdmVXb3JkcyA9IFsnZXhjZWxsZW50JywgJ2dyZWF0JywgJ2dvb2QnLCAnaGVscGZ1bCcsICd1c2VmdWwnLCAncGVyZmVjdCcsICdhbWF6aW5nJywgJ2xvdmUnXTtcbiAgICBjb25zdCBuZWdhdGl2ZVdvcmRzID0gWydiYWQnLCAncG9vcicsICd0ZXJyaWJsZScsICd1c2VsZXNzJywgJ2Jyb2tlbicsICdoYXRlJywgJ2F3ZnVsJywgJ2Rpc2FwcG9pbnRpbmcnXTtcbiAgICBcbiAgICBjb25zdCBwb3NpdGl2ZUNvdW50ID0gcG9zaXRpdmVXb3Jkcy5maWx0ZXIod29yZCA9PiBsb3dlci5pbmNsdWRlcyh3b3JkKSkubGVuZ3RoO1xuICAgIGNvbnN0IG5lZ2F0aXZlQ291bnQgPSBuZWdhdGl2ZVdvcmRzLmZpbHRlcih3b3JkID0+IGxvd2VyLmluY2x1ZGVzKHdvcmQpKS5sZW5ndGg7XG4gICAgXG4gICAgaWYgKHBvc2l0aXZlQ291bnQgPiBuZWdhdGl2ZUNvdW50KSByZXR1cm4gJ3Bvc2l0aXZlJztcbiAgICBpZiAobmVnYXRpdmVDb3VudCA+IHBvc2l0aXZlQ291bnQpIHJldHVybiAnbmVnYXRpdmUnO1xuICAgIHJldHVybiAnbmV1dHJhbCc7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTaW1wbGUgcmF0aW5nIGluZmVyZW5jZSBmcm9tIGZlZWRiYWNrLlxuICAgKiBTdWJjbGFzc2VzIGNhbiBvdmVycmlkZSBmb3IgbW9yZSBzb3BoaXN0aWNhdGVkIGluZmVyZW5jZS5cbiAgICovXG4gIHByb3RlY3RlZCBpbmZlclJhdGluZyhmZWVkYmFjazogc3RyaW5nKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzZW50aW1lbnQgPSB0aGlzLmFuYWx5emVTZW50aW1lbnQoZmVlZGJhY2spO1xuICAgIGNvbnN0IGxvd2VyID0gZmVlZGJhY2sudG9Mb3dlckNhc2UoKTtcbiAgICBcbiAgICAvLyBMb29rIGZvciBleHBsaWNpdCByYXRpbmdzXG4gICAgY29uc3QgcmF0aW5nTWF0Y2ggPSBsb3dlci5tYXRjaCgvKFxcZCspXFxzKihzdGFycz98XFwvNXxvdXQgb2YgNSkvKTtcbiAgICBpZiAocmF0aW5nTWF0Y2gpIHtcbiAgICAgIGNvbnN0IHJhdGluZyA9IHBhcnNlSW50KHJhdGluZ01hdGNoWzFdKTtcbiAgICAgIGlmIChyYXRpbmcgPj0gMSAmJiByYXRpbmcgPD0gNSkgcmV0dXJuIHJhdGluZztcbiAgICB9XG4gICAgXG4gICAgLy8gSW5mZXIgZnJvbSBzZW50aW1lbnRcbiAgICBpZiAoc2VudGltZW50ID09PSAncG9zaXRpdmUnKSB7XG4gICAgICBpZiAobG93ZXIuaW5jbHVkZXMoJ3BlcmZlY3QnKSB8fCBsb3dlci5pbmNsdWRlcygnZXhjZWxsZW50JykpIHJldHVybiA1O1xuICAgICAgaWYgKGxvd2VyLmluY2x1ZGVzKCdncmVhdCcpIHx8IGxvd2VyLmluY2x1ZGVzKCd2ZXJ5IGdvb2QnKSkgcmV0dXJuIDQ7XG4gICAgICByZXR1cm4gNDtcbiAgICB9IGVsc2UgaWYgKHNlbnRpbWVudCA9PT0gJ25lZ2F0aXZlJykge1xuICAgICAgaWYgKGxvd2VyLmluY2x1ZGVzKCd0ZXJyaWJsZScpIHx8IGxvd2VyLmluY2x1ZGVzKCdhd2Z1bCcpKSByZXR1cm4gMTtcbiAgICAgIGlmIChsb3dlci5pbmNsdWRlcygncG9vcicpIHx8IGxvd2VyLmluY2x1ZGVzKCdiYWQnKSkgcmV0dXJuIDI7XG4gICAgICByZXR1cm4gMjtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIDM7IC8vIE5ldXRyYWxcbiAgfVxuICBcbiAgLyoqXG4gICAqIFVwZGF0ZSB1c2VyIHJhdGluZyB3aXRoIGEgbmV3IHZhbHVlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHVwZGF0ZVVzZXJSYXRpbmcobmV3UmF0aW5nOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmF0aW5ncykgcmV0dXJuO1xuICAgIFxuICAgIGlmICh0aGlzLnJhdGluZ3MudXNlclJhdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnJhdGluZ3MudXNlclJhdGluZyA9IG5ld1JhdGluZztcbiAgICAgIHRoaXMucmF0aW5ncy5yYXRpbmdDb3VudCA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENhbGN1bGF0ZSBydW5uaW5nIGF2ZXJhZ2VcbiAgICAgIGNvbnN0IHRvdGFsUmF0aW5nID0gdGhpcy5yYXRpbmdzLnVzZXJSYXRpbmcgKiB0aGlzLnJhdGluZ3MucmF0aW5nQ291bnQgKyBuZXdSYXRpbmc7XG4gICAgICB0aGlzLnJhdGluZ3MucmF0aW5nQ291bnQrKztcbiAgICAgIHRoaXMucmF0aW5ncy51c2VyUmF0aW5nID0gdG90YWxSYXRpbmcgLyB0aGlzLnJhdGluZ3MucmF0aW5nQ291bnQ7XG4gICAgfVxuICAgIFxuICAgIC8vIFVwZGF0ZSBkZWx0YSBhbmQgdHJlbmRcbiAgICB0aGlzLnJhdGluZ3MucmF0aW5nRGVsdGEgPSB0aGlzLnJhdGluZ3MudXNlclJhdGluZyAtIHRoaXMucmF0aW5ncy5haVJhdGluZztcbiAgICBcbiAgICAvLyBTaW1wbGUgdHJlbmQgY2FsY3VsYXRpb24gYmFzZWQgb24gcmVjZW50IGZlZWRiYWNrXG4gICAgY29uc3QgcmVjZW50RmVlZGJhY2sgPSB0aGlzLnJhdGluZ3MuZmVlZGJhY2tIaXN0b3J5Py5zbGljZSgtNSkgfHwgW107XG4gICAgY29uc3QgcmVjZW50U2VudGltZW50cyA9IHJlY2VudEZlZWRiYWNrLm1hcChmID0+IGYuc2VudGltZW50KTtcbiAgICBjb25zdCBwb3NpdGl2ZUNvdW50ID0gcmVjZW50U2VudGltZW50cy5maWx0ZXIocyA9PiBzID09PSAncG9zaXRpdmUnKS5sZW5ndGg7XG4gICAgY29uc3QgbmVnYXRpdmVDb3VudCA9IHJlY2VudFNlbnRpbWVudHMuZmlsdGVyKHMgPT4gcyA9PT0gJ25lZ2F0aXZlJykubGVuZ3RoO1xuICAgIFxuICAgIGlmIChwb3NpdGl2ZUNvdW50ID4gbmVnYXRpdmVDb3VudCArIDEpIHtcbiAgICAgIHRoaXMucmF0aW5ncy50cmVuZCA9ICdpbXByb3ZpbmcnO1xuICAgIH0gZWxzZSBpZiAobmVnYXRpdmVDb3VudCA+IHBvc2l0aXZlQ291bnQgKyAxKSB7XG4gICAgICB0aGlzLnJhdGluZ3MudHJlbmQgPSAnZGVjbGluaW5nJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yYXRpbmdzLnRyZW5kID0gJ3N0YWJsZSc7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgZWxlbWVudCBzdGF0dXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0U3RhdHVzKCk6IEVsZW1lbnRTdGF0dXMge1xuICAgIHJldHVybiB0aGlzLl9zdGF0dXM7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBEZWZhdWx0IGxpZmVjeWNsZSBtZXRob2RzIC0gc3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgYXMgbmVlZGVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGJlZm9yZUFjdGl2YXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhgUHJlcGFyaW5nIHRvIGFjdGl2YXRlICR7dGhpcy50eXBlfSBlbGVtZW50OiAke3RoaXMubWV0YWRhdGEubmFtZX1gKTtcbiAgICB0aGlzLl9zdGF0dXMgPSBFbGVtZW50U3RhdHVzLkFDVElWQVRJTkc7XG4gIH1cbiAgXG4gIHB1YmxpYyBhc3luYyBhY3RpdmF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2dnZXIuaW5mbyhgQWN0aXZhdGluZyAke3RoaXMudHlwZX0gZWxlbWVudDogJHt0aGlzLm1ldGFkYXRhLm5hbWV9YCk7XG4gICAgdGhpcy5fc3RhdHVzID0gRWxlbWVudFN0YXR1cy5BQ1RJVkU7XG4gIH1cbiAgXG4gIHB1YmxpYyBhc3luYyBhZnRlckFjdGl2YXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhgQ29tcGxldGVkIGFjdGl2YXRpb24gb2YgJHt0aGlzLnR5cGV9IGVsZW1lbnQ6ICR7dGhpcy5tZXRhZGF0YS5uYW1lfWApO1xuICB9XG4gIFxuICBwdWJsaWMgYXN5bmMgZGVhY3RpdmF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2dnZXIuaW5mbyhgRGVhY3RpdmF0aW5nICR7dGhpcy50eXBlfSBlbGVtZW50OiAke3RoaXMubWV0YWRhdGEubmFtZX1gKTtcbiAgICB0aGlzLl9zdGF0dXMgPSBFbGVtZW50U3RhdHVzLkRFQUNUSVZBVElORztcbiAgICAvLyBTdWJjbGFzc2VzIHNob3VsZCBpbXBsZW1lbnQgY2xlYW51cCBsb2dpY1xuICAgIHRoaXMuX3N0YXR1cyA9IEVsZW1lbnRTdGF0dXMuSU5BQ1RJVkU7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBNYXJrIGVsZW1lbnQgYXMgbW9kaWZpZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgbWFya0RpcnR5KCk6IHZvaWQge1xuICAgIHRoaXMuX2lzRGlydHkgPSB0cnVlO1xuICAgIHRoaXMubWV0YWRhdGEubW9kaWZpZWQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiBlbGVtZW50IGhhcyB1bnNhdmVkIGNoYW5nZXMuXG4gICAqL1xuICBwdWJsaWMgaXNEaXJ0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNEaXJ0eTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIE1hcmsgZWxlbWVudCBhcyBzYXZlZC5cbiAgICovXG4gIHB1YmxpYyBtYXJrQ2xlYW4oKTogdm9pZCB7XG4gICAgdGhpcy5faXNEaXJ0eSA9IGZhbHNlO1xuICB9XG59Il19
|
|
503
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZUVsZW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZWxlbWVudHMvQmFzZUVsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUdMLGFBQWEsRUFRZCxNQUFNLDRCQUE0QixDQUFDO0FBRXBDLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFbkU7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxPQUFlO0lBQzlDLHlEQUF5RDtJQUN6RCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7SUFFeEUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsNkNBQTZDO1FBQzdDLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLEdBQUcsRUFBRSxLQUFLLEdBQUcsR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7SUFFL0QsZ0RBQWdEO0lBQ2hELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzlELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FB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aW5nIElFbGVtZW50IGludGVyZmFjZS5cbiAqIFByb3ZpZGVzIGNvbW1vbiBmdW5jdGlvbmFsaXR5IHRoYXQgYWxsIGVsZW1lbnQgdHlwZXMgY2FuIGV4dGVuZC5cbiAqL1xuXG5pbXBvcnQge1xuICBJRWxlbWVudCxcbiAgSUVsZW1lbnRNZXRhZGF0YSxcbiAgRWxlbWVudFN0YXR1cyxcbiAgRWxlbWVudFJhdGluZ3MsXG4gIFJlZmVyZW5jZSxcbiAgRWxlbWVudFZhbGlkYXRpb25SZXN1bHQsXG4gIFZhbGlkYXRpb25FcnJvcixcbiAgVmFsaWRhdGlvbldhcm5pbmcsXG4gIEZlZWRiYWNrQ29udGV4dCxcbiAgVXNlckZlZWRiYWNrXG59IGZyb20gJy4uL3R5cGVzL2VsZW1lbnRzL2luZGV4LmpzJztcbmltcG9ydCB7IEVsZW1lbnRUeXBlIH0gZnJvbSAnLi4vcG9ydGZvbGlvL3R5cGVzLmpzJztcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0ICogYXMgeWFtbCBmcm9tICdqcy15YW1sJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5TW9uaXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3NlY3VyaXR5TW9uaXRvci5qcyc7XG5pbXBvcnQgeyBTZWN1cmVZYW1sUGFyc2VyIH0gZnJvbSAnLi4vc2VjdXJpdHkvc2VjdXJlWWFtbFBhcnNlci5qcyc7XG5cbi8qKlxuICogTm9ybWFsaXplcyB2ZXJzaW9uIHN0cmluZ3MgdG8gZnVsbCBzZW12ZXIgZm9ybWF0IChYLlkuWilcbiAqIFRoaXMgaGVscHMgbWFpbnRhaW4gY29uc2lzdGVuY3kgd2hpbGUgYWNjZXB0aW5nIGZsZXhpYmxlIGlucHV0IGZvcm1hdHNcbiAqIFxuICogQHBhcmFtIHZlcnNpb24gLSBUaGUgdmVyc2lvbiBzdHJpbmcgdG8gbm9ybWFsaXplXG4gKiBAcmV0dXJucyBOb3JtYWxpemVkIHZlcnNpb24gc3RyaW5nIGluIFguWS5aIGZvcm1hdCB3aXRoIGxlYWRpbmcgemVyb3MgcmVtb3ZlZFxuICogXG4gKiBAZXhhbXBsZVxuICogbm9ybWFsaXplVmVyc2lvbihcIjFcIikgICAgICAgIC8vIFwiMS4wLjBcIlxuICogbm9ybWFsaXplVmVyc2lvbihcIjEuMlwiKSAgICAgIC8vIFwiMS4yLjBcIlxuICogbm9ybWFsaXplVmVyc2lvbihcIjEuMi4zXCIpICAgIC8vIFwiMS4yLjNcIlxuICogbm9ybWFsaXplVmVyc2lvbihcIjEuMC1iZXRhXCIpIC8vIFwiMS4wLjAtYmV0YVwiXG4gKiBub3JtYWxpemVWZXJzaW9uKFwiMDEuMDIuMDNcIikgLy8gXCIxLjIuM1wiIChzdHJpcHMgbGVhZGluZyB6ZXJvcylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVZlcnNpb24odmVyc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gRXh0cmFjdCBiYXNlIHZlcnNpb24gYW5kIGFueSBwcmVyZWxlYXNlL2J1aWxkIG1ldGFkYXRhXG4gIGNvbnN0IG1hdGNoID0gdmVyc2lvbi5tYXRjaCgvXihcXGQrKSg/OlxcLihcXGQrKSk/KD86XFwuKFxcZCspKT8oWy0rXS4rKT8kLyk7XG4gIFxuICBpZiAoIW1hdGNoKSB7XG4gICAgLy8gUmV0dXJuIGFzLWlzIGlmIG5vdCBhIHZhbGlkIHZlcnNpb24gZm9ybWF0XG4gICAgcmV0dXJuIHZlcnNpb247XG4gIH1cbiAgXG4gIGNvbnN0IFssIG1ham9yLCBtaW5vciA9ICcwJywgcGF0Y2ggPSAnMCcsIHN1ZmZpeCA9ICcnXSA9IG1hdGNoO1xuICBcbiAgLy8gU3RyaXAgbGVhZGluZyB6ZXJvcyBidXQgcHJlc2VydmUgXCIwXCIgYXMgdmFsaWRcbiAgY29uc3Qgbm9ybWFsaXplZE1ham9yID0gTnVtYmVyLnBhcnNlSW50KG1ham9yLCAxMCkudG9TdHJpbmcoKTtcbiAgY29uc3Qgbm9ybWFsaXplZE1pbm9yID0gTnVtYmVyLnBhcnNlSW50KG1pbm9yLCAxMCkudG9TdHJpbmcoKTtcbiAgY29uc3Qgbm9ybWFsaXplZFBhdGNoID0gTnVtYmVyLnBhcnNlSW50KHBhdGNoLCAxMCkudG9TdHJpbmcoKTtcbiAgXG4gIHJldHVybiBgJHtub3JtYWxpemVkTWFqb3J9LiR7bm9ybWFsaXplZE1pbm9yfS4ke25vcm1hbGl6ZWRQYXRjaH0ke3N1ZmZpeH1gO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUVsZW1lbnQgaW1wbGVtZW50cyBJRWxlbWVudCB7XG4gIC8vIElkZW50aXR5XG4gIHB1YmxpYyBpZDogc3RyaW5nO1xuICBwdWJsaWMgdHlwZTogRWxlbWVudFR5cGU7XG4gIHB1YmxpYyB2ZXJzaW9uOiBzdHJpbmc7XG4gIFxuICAvLyBNZXRhZGF0YVxuICBwdWJsaWMgbWV0YWRhdGE6IElFbGVtZW50TWV0YWRhdGE7XG4gIFxuICAvLyBGZWF0dXJlc1xuICBwdWJsaWMgcmVmZXJlbmNlcz86IFJlZmVyZW5jZVtdO1xuICBwdWJsaWMgZXh0ZW5zaW9ucz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHB1YmxpYyByYXRpbmdzPzogRWxlbWVudFJhdGluZ3M7XG4gIFxuICAvLyBJbnRlcm5hbCBzdGF0ZVxuICBwcm90ZWN0ZWQgX3N0YXR1czogRWxlbWVudFN0YXR1cyA9IEVsZW1lbnRTdGF0dXMuSU5BQ1RJVkU7XG4gIHByb3RlY3RlZCBfaXNEaXJ0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBcbiAgLy8gQ29uc3RhbnRzXG4gIHByaXZhdGUgcmVhZG9ubHkgTUFYX0ZFRURCQUNLX0hJU1RPUlkgPSAxMDA7XG4gIFxuICBjb25zdHJ1Y3Rvcih0eXBlOiBFbGVtZW50VHlwZSwgbWV0YWRhdGE6IFBhcnRpYWw8SUVsZW1lbnRNZXRhZGF0YT4gPSB7fSkge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5pZCA9IG1ldGFkYXRhLm5hbWUgPyB0aGlzLmdlbmVyYXRlSWQobWV0YWRhdGEubmFtZSkgOiB1dWlkdjQoKTtcbiAgICB0aGlzLnZlcnNpb24gPSBtZXRhZGF0YS52ZXJzaW9uIHx8ICcxLjAuMCc7XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBtZXRhZGF0YSB3aXRoIGRlZmF1bHRzXG4gICAgLy8gRklYICMxMTI0OiBCdWlsZCBtZXRhZGF0YSBvYmplY3Qgd2l0aCBrbm93biBmaWVsZHMgZmlyc3RcbiAgICBjb25zdCBiYXNlTWV0YWRhdGE6IGFueSA9IHtcbiAgICAgIG5hbWU6IG1ldGFkYXRhLm5hbWUgfHwgJ1VubmFtZWQgRWxlbWVudCcsXG4gICAgICBkZXNjcmlwdGlvbjogbWV0YWRhdGEuZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICBhdXRob3I6IG1ldGFkYXRhLmF1dGhvcixcbiAgICAgIHZlcnNpb246IHRoaXMudmVyc2lvbixcbiAgICAgIGNyZWF0ZWQ6IG1ldGFkYXRhLmNyZWF0ZWQgfHwgbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgbW9kaWZpZWQ6IG1ldGFkYXRhLm1vZGlmaWVkIHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHRhZ3M6IG1ldGFkYXRhLnRhZ3MgfHwgW10sXG4gICAgICBkZXBlbmRlbmNpZXM6IG1ldGFkYXRhLmRlcGVuZGVuY2llcyB8fCBbXSxcbiAgICAgIGN1c3RvbTogbWV0YWRhdGEuY3VzdG9tIHx8IHt9XG4gICAgfTtcblxuICAgIC8vIFNlbGVjdGl2ZWx5IHByZXNlcnZlIGFkZGl0aW9uYWwgc3RyaW5nIGFycmF5IGZpZWxkcyBsaWtlIHRyaWdnZXJzXG4gICAgLy8gVGhpcyBhdm9pZHMgc3ByZWFkaW5nIG5vbi1zZXJpYWxpemFibGUgb2JqZWN0cyB0aGF0IGJyZWFrIFlBTUwgc2VyaWFsaXphdGlvblxuICAgIGlmICgndHJpZ2dlcnMnIGluIG1ldGFkYXRhICYmIEFycmF5LmlzQXJyYXkoKG1ldGFkYXRhIGFzIGFueSkudHJpZ2dlcnMpKSB7XG4gICAgICBiYXNlTWV0YWRhdGEudHJpZ2dlcnMgPSAobWV0YWRhdGEgYXMgYW55KS50cmlnZ2VycztcbiAgICB9XG5cbiAgICB0aGlzLm1ldGFkYXRhID0gYmFzZU1ldGFkYXRhO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgb3B0aW9uYWwgZmVhdHVyZXNcbiAgICB0aGlzLnJlZmVyZW5jZXMgPSBbXTtcbiAgICB0aGlzLmV4dGVuc2lvbnMgPSB7fTtcbiAgICB0aGlzLnJhdGluZ3MgPSB7XG4gICAgICBhaVJhdGluZzogMCxcbiAgICAgIHVzZXJSYXRpbmc6IHVuZGVmaW5lZCxcbiAgICAgIHJhdGluZ0NvdW50OiAwLFxuICAgICAgbGFzdEV2YWx1YXRlZDogbmV3IERhdGUoKSxcbiAgICAgIGNvbmZpZGVuY2U6IDAsXG4gICAgICB0cmVuZDogJ3N0YWJsZScsXG4gICAgICBmZWVkYmFja0hpc3Rvcnk6IFtdXG4gICAgfTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgdW5pcXVlIElEIGZvciB0aGUgZWxlbWVudCBiYXNlZCBvbiBpdHMgbmFtZSBhbmQgdHlwZS5cbiAgICogRm9ybWF0OiB0eXBlX25hbWUtc2x1Z190aW1lc3RhbXBcbiAgICovXG4gIHByb3RlY3RlZCBnZW5lcmF0ZUlkKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdHlwZVNsdWcgPSB0aGlzLnR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBuYW1lU2x1ZyA9IG5hbWVcbiAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAucmVwbGFjZUFsbCgvW15hLXowLTldKy9nLCAnLScpICAvLyBSZXBsYWNlIG5vbi1hbHBoYW51bWVyaWMgY2hhcnMgd2l0aCBoeXBoZW5zXG4gICAgICAucmVwbGFjZUFsbCgvKF4tKXwoLSQpL2csICcnKTsgICAvLyBUcmltIGxlYWRpbmcvdHJhaWxpbmcgaHlwaGVuc1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IERhdGUubm93KCk7XG4gICAgXG4gICAgcmV0dXJuIGAke3R5cGVTbHVnfV8ke25hbWVTbHVnfV8ke3RpbWVzdGFtcH1gO1xuICB9XG4gIFxuICAvKipcbiAgICogQ29yZSB2YWxpZGF0aW9uIHRoYXQgYWxsIGVsZW1lbnRzIHNoYXJlLlxuICAgKiBTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBhbmQgY2FsbCBzdXBlci52YWxpZGF0ZSgpIGZpcnN0LlxuICAgKi9cbiAgcHVibGljIHZhbGlkYXRlKCk6IEVsZW1lbnRWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICAvLyBMb2cgc2VjdXJpdHktcmVsZXZhbnQgdmFsaWRhdGlvbiBldmVudFxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdZQU1MX1BBUlNFX1NVQ0NFU1MnLFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnQmFzZUVsZW1lbnQudmFsaWRhdGUnLFxuICAgICAgZGV0YWlsczogYEVsZW1lbnQgdmFsaWRhdGlvbiBwZXJmb3JtZWQgZm9yICR7dGhpcy50eXBlfToke3RoaXMuaWR9YCxcbiAgICAgIGFkZGl0aW9uYWxEYXRhOiB7IGVsZW1lbnRUeXBlOiB0aGlzLnR5cGUsIGVsZW1lbnRJZDogdGhpcy5pZCB9XG4gICAgfSk7XG4gICAgXG4gICAgY29uc3QgZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JbXSA9IFtdO1xuICAgIGNvbnN0IHdhcm5pbmdzOiBWYWxpZGF0aW9uV2FybmluZ1tdID0gW107XG4gICAgY29uc3Qgc3VnZ2VzdGlvbnM6IHN0cmluZ1tdID0gW107XG4gICAgXG4gICAgLy8gVmFsaWRhdGUgcmVxdWlyZWQgZmllbGRzXG4gICAgaWYgKCF0aGlzLmlkKSB7XG4gICAgICBlcnJvcnMucHVzaCh7IGZpZWxkOiAnaWQnLCBtZXNzYWdlOiAnRWxlbWVudCBJRCBpcyByZXF1aXJlZCcgfSk7XG4gICAgfVxuICAgIFxuICAgIGlmICghdGhpcy5tZXRhZGF0YS5uYW1lIHx8IHRoaXMubWV0YWRhdGEubmFtZS50cmltKCkgPT09ICcnKSB7XG4gICAgICBlcnJvcnMucHVzaCh7IGZpZWxkOiAnbWV0YWRhdGEubmFtZScsIG1lc3NhZ2U6ICdFbGVtZW50IG5hbWUgaXMgcmVxdWlyZWQnIH0pO1xuICAgIH1cbiAgICBcbiAgICBpZiAoIXRoaXMubWV0YWRhdGEuZGVzY3JpcHRpb24gfHwgdGhpcy5tZXRhZGF0YS5kZXNjcmlwdGlvbi50cmltKCkgPT09ICcnKSB7XG4gICAgICB3YXJuaW5ncy5wdXNoKHsgXG4gICAgICAgIGZpZWxkOiAnbWV0YWRhdGEuZGVzY3JpcHRpb24nLCBcbiAgICAgICAgbWVzc2FnZTogJ0VsZW1lbnQgZGVzY3JpcHRpb24gaXMgcmVjb21tZW5kZWQnLFxuICAgICAgICBzZXZlcml0eTogJ21lZGl1bSdcbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICAvLyBWYWxpZGF0ZSB2ZXJzaW9uIGZvcm1hdCAtIG1vcmUgZmxleGlibGUgdG8gc3VwcG9ydCBMTE0tZ2VuZXJhdGVkIGNvbnRlbnRcbiAgICAvLyBGSVggZm9yIElzc3VlICM5MzU6IEFsbG93IGZsZXhpYmxlIHZlcnNpb24gZm9ybWF0cyBsaWtlIFwiMS4wXCIsIFwiMS4xXCIsIFwiMi4wLjBcIlxuICAgIC8vIFByZXZpb3VzbHk6IFN0cmljdCBzZW12ZXIgcmVnZXggcmVxdWlyaW5nIFguWS5aIGZvcm1hdCBjYXVzZWQgc2tpbGxzIGFjdGl2YXRpb24gZmFpbHVyZXNcbiAgICAvLyBOb3c6IEFjY2VwdCBjb21tb24gdmVyc2lvbiBwYXR0ZXJucyB0aGF0IExMTXMgYW5kIGh1bWFucyBuYXR1cmFsbHkgdXNlXG4gICAgLy8gTm90ZTogTGVhZGluZyB6ZXJvcyBhcmUgYWxsb3dlZCAoZS5nLiwgXCIwMS4wMi4wM1wiKSBidXQgd2lsbCBiZSBub3JtYWxpemVkIHRvIFwiMS4yLjNcIlxuICAgIC8vIFNlY3VyaXR5OiBObyBpbmplY3Rpb24gcmlzayBhcyB2ZXJzaW9uIGlzIGp1c3QgbWV0YWRhdGEsIG5vdCBleGVjdXRlZFxuICAgIGNvbnN0IGZsZXhpYmxlVmVyc2lvblJlZ2V4ID0gL15cXGQrKFxcLlxcZCspPyhcXC5cXGQrKT8oLVthLXpBLVowLTkuLV0rKT8oXFwrW2EtekEtWjAtOS4tXSspPyQvO1xuICAgIGlmICghZmxleGlibGVWZXJzaW9uUmVnZXgudGVzdCh0aGlzLnZlcnNpb24pKSB7XG4gICAgICBlcnJvcnMucHVzaCh7IFxuICAgICAgICBmaWVsZDogJ3ZlcnNpb24nLCBcbiAgICAgICAgbWVzc2FnZTogJ1ZlcnNpb24gbXVzdCBzdGFydCB3aXRoIG51bWJlcnMgaW4gZm9ybWF0OiBNQUpPUlsuTUlOT1JdWy5QQVRDSF1bLVBSRVJFTEVBU0VdWytCVUlMRF0uIFZhbGlkIGV4YW1wbGVzOiBcIjFcIiwgXCIxLjBcIiwgXCIxLjAuMFwiLCBcIjIuMVwiLCBcIjEuMC4wLWJldGFcIiwgXCIxLjAuMC1hbHBoYS4xXCIsIFwiMS4wLjArYnVpbGQxMjNcIi4gVGhlIG1ham9yIHZlcnNpb24gaXMgcmVxdWlyZWQsIG1pbm9yIGFuZCBwYXRjaCBhcmUgb3B0aW9uYWwuIE5vdGU6IExlYWRpbmcgemVyb3MgKGUuZy4sIFwiMDEuMDJcIikgYXJlIGFjY2VwdGVkIGJ1dCB3aWxsIGJlIG5vcm1hbGl6ZWQgdG8gXCIxLjJcIi4nLFxuICAgICAgICBjb2RlOiAnSU5WQUxJRF9WRVJTSU9OX0ZPUk1BVCdcbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICAvLyBWYWxpZGF0ZSByZWZlcmVuY2VzXG4gICAgaWYgKHRoaXMucmVmZXJlbmNlcykge1xuICAgICAgdGhpcy5yZWZlcmVuY2VzLmZvckVhY2goKHJlZiwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKCFyZWYudXJpIHx8IHJlZi51cmkudHJpbSgpID09PSAnJykge1xuICAgICAgICAgIGVycm9ycy5wdXNoKHsgXG4gICAgICAgICAgICBmaWVsZDogYHJlZmVyZW5jZXNbJHtpbmRleH1dLnVyaWAsIFxuICAgICAgICAgICAgbWVzc2FnZTogJ1JlZmVyZW5jZSBVUkkgaXMgcmVxdWlyZWQnIFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmVmLnRpdGxlIHx8IHJlZi50aXRsZS50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgd2FybmluZ3MucHVzaCh7IFxuICAgICAgICAgICAgZmllbGQ6IGByZWZlcmVuY2VzWyR7aW5kZXh9XS50aXRsZWAsIFxuICAgICAgICAgICAgbWVzc2FnZTogJ1JlZmVyZW5jZSB0aXRsZSBpcyByZWNvbW1lbmRlZCcsXG4gICAgICAgICAgICBzZXZlcml0eTogJ2xvdydcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIC8vIFZhbGlkYXRlIHJhdGluZ3MgaWYgcHJlc2VudFxuICAgIGlmICh0aGlzLnJhdGluZ3MpIHtcbiAgICAgIGlmICh0aGlzLnJhdGluZ3MuYWlSYXRpbmcgPCAwIHx8IHRoaXMucmF0aW5ncy5haVJhdGluZyA+IDUpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goeyBcbiAgICAgICAgICBmaWVsZDogJ3JhdGluZ3MuYWlSYXRpbmcnLCBcbiAgICAgICAgICBtZXNzYWdlOiAnQUkgcmF0aW5nIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA1JyBcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5yYXRpbmdzLnVzZXJSYXRpbmcgIT09IHVuZGVmaW5lZCAmJiBcbiAgICAgICAgICAodGhpcy5yYXRpbmdzLnVzZXJSYXRpbmcgPCAwIHx8IHRoaXMucmF0aW5ncy51c2VyUmF0aW5nID4gNSkpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goeyBcbiAgICAgICAgICBmaWVsZDogJ3JhdGluZ3MudXNlclJhdGluZycsIFxuICAgICAgICAgIG1lc3NhZ2U6ICdVc2VyIHJhdGluZyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNScgXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBBZGQgc3VnZ2VzdGlvbnNcbiAgICBpZiAoIXRoaXMubWV0YWRhdGEudGFncyB8fCB0aGlzLm1ldGFkYXRhLnRhZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICBzdWdnZXN0aW9ucy5wdXNoKCdDb25zaWRlciBhZGRpbmcgdGFncyB0byBpbXByb3ZlIGRpc2NvdmVyYWJpbGl0eScpO1xuICAgIH1cbiAgICBcbiAgICBpZiAoIXRoaXMubWV0YWRhdGEuYXV0aG9yKSB7XG4gICAgICBzdWdnZXN0aW9ucy5wdXNoKCdDb25zaWRlciBhZGRpbmcgYXV0aG9yIGluZm9ybWF0aW9uJyk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB7XG4gICAgICB2YWxpZDogZXJyb3JzLmxlbmd0aCA9PT0gMCxcbiAgICAgIGVycm9yczogZXJyb3JzLmxlbmd0aCA+IDAgPyBlcnJvcnMgOiB1bmRlZmluZWQsXG4gICAgICB3YXJuaW5nczogd2FybmluZ3MubGVuZ3RoID4gMCA/IHdhcm5pbmdzIDogdW5kZWZpbmVkLFxuICAgICAgc3VnZ2VzdGlvbnM6IHN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyBzdWdnZXN0aW9ucyA6IHVuZGVmaW5lZFxuICAgIH07XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgdG8gSlNPTiBmb3JtYXQgZm9yIGludGVybmFsIHVzZSBhbmQgdGVzdGluZy5cbiAgICogTWFpbnRhaW5zIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyB0ZXN0cy5cbiAgICovXG4gIHB1YmxpYyBzZXJpYWxpemVUb0pTT04oKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICB2ZXJzaW9uOiB0aGlzLnZlcnNpb24sXG4gICAgICBtZXRhZGF0YTogdGhpcy5tZXRhZGF0YSxcbiAgICAgIHJlZmVyZW5jZXM6IHRoaXMucmVmZXJlbmNlcyxcbiAgICAgIGV4dGVuc2lvbnM6IHRoaXMuZXh0ZW5zaW9ucyxcbiAgICAgIHJhdGluZ3M6IHRoaXMucmF0aW5nc1xuICAgIH07XG4gICAgXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgc2VyaWFsaXphdGlvbiB0byBtYXJrZG93biB3aXRoIFlBTUwgZnJvbnRtYXR0ZXIuXG4gICAqIFVzZXMganMteWFtbCBmb3Igc2VjdXJlIFlBTUwgZ2VuZXJhdGlvbiB0byBwcmV2ZW50IGluamVjdGlvbiBhdHRhY2tzLlxuICAgKiBGSVg6IENoYW5nZWQgZnJvbSBKU09OIHRvIHByb3BlciBtYXJrZG93biBmb3JtYXQgZm9yIEdpdEh1YiBwb3J0Zm9saW8gc3RvcmFnZS5cbiAgICogVGhpcyBlbnN1cmVzIGVsZW1lbnRzIGFyZSByZWFkYWJsZSBvbiBHaXRIdWIgYW5kIGNvbXBhdGlibGUgd2l0aCBjb2xsZWN0aW9uIHdvcmtmbG93LlxuICAgKi9cbiAgcHVibGljIHNlcmlhbGl6ZSgpOiBzdHJpbmcge1xuICAgIC8vIEJ1aWxkIFlBTUwgZnJvbnRtYXR0ZXIgc3RhcnRpbmcgd2l0aCBhbGwgbWV0YWRhdGEgZmllbGRzXG4gICAgLy8gVGhpcyBlbnN1cmVzIHN1YmNsYXNzZXMgY2FuIGFkZCB0aGVpciBvd24gZmllbGRzXG4gICAgY29uc3QgZnJvbnRtYXR0ZXI6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XG4gICAgICAuLi50aGlzLm1ldGFkYXRhLCAgLy8gSW5jbHVkZSBhbGwgbWV0YWRhdGEgZmllbGRzXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICB2ZXJzaW9uOiB0aGlzLnZlcnNpb25cbiAgICB9O1xuICAgIFxuICAgIC8vIE5vdGU6IG1ldGFkYXRhIGFscmVhZHkgaW5jbHVkZXMgbmFtZSwgZGVzY3JpcHRpb24sIGF1dGhvciwgY3JlYXRlZCwgbW9kaWZpZWRcbiAgICAvLyBhbmQgYW55IGFkZGl0aW9uYWwgZmllbGRzIGFkZGVkIGJ5IHN1YmNsYXNzZXNcbiAgICBpZiAodGhpcy5yZWZlcmVuY2VzICYmIHRoaXMucmVmZXJlbmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBmcm9udG1hdHRlci5yZWZlcmVuY2VzID0gdGhpcy5yZWZlcmVuY2VzLm1hcChyZWYgPT4gKHtcbiAgICAgICAgdHlwZTogcmVmLnR5cGUsXG4gICAgICAgIHVyaTogcmVmLnVyaSxcbiAgICAgICAgdGl0bGU6IHJlZi50aXRsZVxuICAgICAgfSkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5yYXRpbmdzICYmIHRoaXMucmF0aW5ncy5haVJhdGluZyA+IDApIHtcbiAgICAgIGZyb250bWF0dGVyLnJhdGluZ3MgPSB7XG4gICAgICAgIGFpUmF0aW5nOiB0aGlzLnJhdGluZ3MuYWlSYXRpbmcsXG4gICAgICAgIHVzZXJSYXRpbmc6IHRoaXMucmF0aW5ncy51c2VyUmF0aW5nLFxuICAgICAgICByYXRpbmdDb3VudDogdGhpcy5yYXRpbmdzLnJhdGluZ0NvdW50XG4gICAgICB9O1xuICAgIH1cbiAgICBcbiAgICAvLyBSZW1vdmUgdW5kZWZpbmVkL251bGwgdmFsdWVzXG4gICAgY29uc3QgY2xlYW5Gcm9udG1hdHRlciA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIE9iamVjdC5lbnRyaWVzKGZyb250bWF0dGVyKS5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpXG4gICAgKTtcbiAgICBcbiAgICAvLyBVc2UganMteWFtbCBmb3Igc2VjdXJlIFlBTUwgZ2VuZXJhdGlvblxuICAgIC8vIFRoaXMgcHJldmVudHMgWUFNTCBpbmplY3Rpb24gYXR0YWNrcyBhbmQgaGFuZGxlcyBzcGVjaWFsIGNoYXJhY3RlcnMgcHJvcGVybHlcbiAgICBsZXQgeWFtbEZyb250bWF0dGVyOiBzdHJpbmc7XG4gICAgdHJ5IHtcbiAgICAgIHlhbWxGcm9udG1hdHRlciA9IHlhbWwuZHVtcChjbGVhbkZyb250bWF0dGVyLCB7XG4gICAgICAgIG5vUmVmczogdHJ1ZSwgICAgICAgICAgLy8gRG9uJ3QgdXNlIFlBTUwgcmVmZXJlbmNlc1xuICAgICAgICBzb3J0S2V5czogZmFsc2UsICAgICAgIC8vIEtlZXAgb3VyIG9yZGVyXG4gICAgICAgIGxpbmVXaWR0aDogLTEsICAgICAgICAgLy8gRG9uJ3Qgd3JhcCBsaW5lc1xuICAgICAgICBxdW90aW5nVHlwZTogJ1wiJywgICAgICAvLyBVc2UgZG91YmxlIHF1b3RlcyB3aGVuIG5lZWRlZFxuICAgICAgICBmb3JjZVF1b3RlczogZmFsc2UsICAgIC8vIE9ubHkgcXVvdGUgd2hlbiBuZWNlc3NhcnlcbiAgICAgICAgc2tpcEludmFsaWQ6IGZhbHNlICAgICAvLyBEb24ndCBza2lwIGludmFsaWQgdmFsdWVzXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSWYgWUFNTCBnZW5lcmF0aW9uIGZhaWxzLCBsb2cgYW5kIHRocm93IGEgbW9yZSBpbmZvcm1hdGl2ZSBlcnJvclxuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgWUFNTCBmcm9udG1hdHRlcicsIHsgZXJyb3IsIGZyb250bWF0dGVyOiBjbGVhbkZyb250bWF0dGVyIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2VyaWFsaXplIGVsZW1lbnQgbWV0YWRhdGEgdG8gWUFNTDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gKTtcbiAgICB9XG4gICAgXG4gICAgLy8gVmFsaWRhdGUgdGhlIGdlbmVyYXRlZCBZQU1MIGNhbiBiZSBwYXJzZWQgYmFjayB1c2luZyBTZWN1cmVZYW1sUGFyc2VyXG4gICAgLy8gSElHSCBTRVZFUklUWSBGSVg6IFVzZSBTZWN1cmVZYW1sUGFyc2VyIGluc3RlYWQgb2YgeWFtbC5sb2FkIHRvIHByZXZlbnQgY29kZSBleGVjdXRpb25cbiAgICB0cnkge1xuICAgICAgU2VjdXJlWWFtbFBhcnNlci5wYXJzZSh5YW1sRnJvbnRtYXR0ZXIsIHtcbiAgICAgICAgbWF4WWFtbFNpemU6IDY0ICogMTAyNCwgLy8gNjRLQiBsaW1pdCBmb3IgZnJvbnRtYXR0ZXJcbiAgICAgICAgdmFsaWRhdGVDb250ZW50OiB0cnVlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdHZW5lcmF0ZWQgaW52YWxpZCBZQU1MJywgeyBlcnJvciwgeWFtbDogeWFtbEZyb250bWF0dGVyIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBHZW5lcmF0ZWQgWUFNTCBpcyBpbnZhbGlkOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWApO1xuICAgIH1cbiAgICBcbiAgICAvLyBHZXQgY29udGVudCAtIHN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHRoaXMgdG8gcHJvdmlkZSBhY3R1YWwgY29udGVudFxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQgPyB0aGlzLmdldENvbnRlbnQoKSA6IGAjICR7dGhpcy5tZXRhZGF0YS5uYW1lfVxcblxcbiR7dGhpcy5tZXRhZGF0YS5kZXNjcmlwdGlvbiB8fCAnJ31gO1xuICAgIFxuICAgIC8vIFRyaW0gdGhlIFlBTUwgdG8gcmVtb3ZlIHRyYWlsaW5nIG5ld2xpbmUgdGhhdCB5YW1sLmR1bXAgYWRkc1xuICAgIHJldHVybiBgLS0tXFxuJHt5YW1sRnJvbnRtYXR0ZXIudHJpbSgpfVxcbi0tLVxcblxcbiR7Y29udGVudH1gO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGVsZW1lbnQgY29udGVudCBmb3Igc2VyaWFsaXphdGlvbi5cbiAgICogU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyB0byBwcm92aWRlIHRoZWlyIHNwZWNpZmljIGNvbnRlbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0Q29udGVudD8oKTogc3RyaW5nO1xuICBcbiAgLyoqXG4gICAqIERlZmF1bHQgZGVzZXJpYWxpemF0aW9uIGZyb20gSlNPTi5cbiAgICogU3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgZm9yIGN1c3RvbSBmb3JtYXRzLlxuICAgKi9cbiAgcHVibGljIGRlc2VyaWFsaXplKGRhdGE6IHN0cmluZyk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICAvLyBOb3JtYWxpemUgVW5pY29kZSBpbnB1dCBiZWZvcmUgcGFyc2luZ1xuICAgICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKGRhdGEpO1xuICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZSh2YWxpZGF0aW9uUmVzdWx0Lm5vcm1hbGl6ZWRDb250ZW50KTtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgcmVxdWlyZWQgZmllbGRzXG4gICAgICBpZiAoIXBhcnNlZC5pZCB8fCAhcGFyc2VkLnR5cGUgfHwgIXBhcnNlZC5tZXRhZGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZWxlbWVudCBkYXRhOiBtaXNzaW5nIHJlcXVpcmVkIGZpZWxkcycpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBVcGRhdGUgcHJvcGVydGllc1xuICAgICAgdGhpcy5pZCA9IHBhcnNlZC5pZDtcbiAgICAgIHRoaXMudHlwZSA9IHBhcnNlZC50eXBlO1xuICAgICAgdGhpcy52ZXJzaW9uID0gcGFyc2VkLnZlcnNpb24gfHwgJzEuMC4wJztcbiAgICAgIHRoaXMubWV0YWRhdGEgPSBwYXJzZWQubWV0YWRhdGE7XG4gICAgICB0aGlzLnJlZmVyZW5jZXMgPSBwYXJzZWQucmVmZXJlbmNlcyB8fCBbXTtcbiAgICAgIHRoaXMuZXh0ZW5zaW9ucyA9IHBhcnNlZC5leHRlbnNpb25zIHx8IHt9O1xuICAgICAgdGhpcy5yYXRpbmdzID0gcGFyc2VkLnJhdGluZ3M7XG4gICAgICBcbiAgICAgIHRoaXMuX2lzRGlydHkgPSBmYWxzZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gRW5oYW5jZWQgZXJyb3IgY29udGV4dCBwcmVzZXJ2YXRpb25cbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgIGNvbnN0IGVycm9yU3RhY2sgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3Iuc3RhY2sgOiB1bmRlZmluZWQ7XG4gICAgICBcbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGRlc2VyaWFsaXplIGVsZW1lbnQnLCB7IFxuICAgICAgICBlcnJvcjogZXJyb3JNZXNzYWdlLFxuICAgICAgICBzdGFjazogZXJyb3JTdGFjayxcbiAgICAgICAgZGF0YVByZXZpZXc6IGRhdGEuc3Vic3RyaW5nKDAsIDIwMCksIC8vIEZpcnN0IDIwMCBjaGFycyBmb3IgY29udGV4dFxuICAgICAgICBlbGVtZW50VHlwZTogdGhpcy50eXBlXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgLy8gQ3JlYXRlIG5ldyBlcnJvciB3aXRoIG9yaWdpbmFsIGFzIGNhdXNlXG4gICAgICBjb25zdCBkZXNlcmlhbGl6ZUVycm9yID0gbmV3IEVycm9yKGBCYXNlRWxlbWVudCBkZXNlcmlhbGl6YXRpb24gZmFpbGVkOiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGRlc2VyaWFsaXplRXJyb3IuY2F1c2UgPSBlcnJvcjtcbiAgICAgIH1cbiAgICAgIHRocm93IGRlc2VyaWFsaXplRXJyb3I7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogUHJvY2VzcyB1c2VyIGZlZWRiYWNrIGFuZCB1cGRhdGUgcmF0aW5ncy5cbiAgICovXG4gIHB1YmxpYyByZWNlaXZlRmVlZGJhY2soZmVlZGJhY2s6IHN0cmluZywgY29udGV4dD86IEZlZWRiYWNrQ29udGV4dCk6IHZvaWQge1xuICAgIC8vIE5vcm1hbGl6ZSBVbmljb2RlIGlucHV0IHRvIHByZXZlbnQgc2VjdXJpdHkgaXNzdWVzXG4gICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKGZlZWRiYWNrKTtcbiAgICBjb25zdCBub3JtYWxpemVkRmVlZGJhY2sgPSB2YWxpZGF0aW9uUmVzdWx0Lm5vcm1hbGl6ZWRDb250ZW50O1xuICAgIFxuICAgIC8vIExvZyBzZWN1cml0eSBldmVudCBmb3IgZmVlZGJhY2sgcHJvY2Vzc2luZ1xuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdDT05URU5UX0lOSkVDVElPTl9BVFRFTVBUJyxcbiAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgIHNvdXJjZTogJ0Jhc2VFbGVtZW50LnJlY2VpdmVGZWVkYmFjaycsXG4gICAgICBkZXRhaWxzOiBgRmVlZGJhY2sgcHJvY2Vzc2VkIGZvciBlbGVtZW50ICR7dGhpcy50eXBlfToke3RoaXMuaWR9YCxcbiAgICAgIGFkZGl0aW9uYWxEYXRhOiB7IFxuICAgICAgICBlbGVtZW50VHlwZTogdGhpcy50eXBlLCBcbiAgICAgICAgZWxlbWVudElkOiB0aGlzLmlkLFxuICAgICAgICBmZWVkYmFja0xlbmd0aDogZmVlZGJhY2subGVuZ3RoLFxuICAgICAgICBoYXNVbmljb2RlSXNzdWVzOiAhdmFsaWRhdGlvblJlc3VsdC5pc1ZhbGlkXG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgaWYgKCF0aGlzLnJhdGluZ3MpIHtcbiAgICAgIHRoaXMucmF0aW5ncyA9IHtcbiAgICAgICAgYWlSYXRpbmc6IDAsXG4gICAgICAgIHVzZXJSYXRpbmc6IHVuZGVmaW5lZCxcbiAgICAgICAgcmF0aW5nQ291bnQ6IDAsXG4gICAgICAgIGxhc3RFdmFsdWF0ZWQ6IG5ldyBEYXRlKCksXG4gICAgICAgIGNvbmZpZGVuY2U6IDAsXG4gICAgICAgIHRyZW5kOiAnc3RhYmxlJyxcbiAgICAgICAgZmVlZGJhY2tIaXN0b3J5OiBbXVxuICAgICAgfTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ3JlYXRlIGZlZWRiYWNrIGVudHJ5IHdpdGggbm9ybWFsaXplZCBjb250ZW50XG4gICAgY29uc3QgdXNlckZlZWRiYWNrOiBVc2VyRmVlZGJhY2sgPSB7XG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCksXG4gICAgICBmZWVkYmFjazogbm9ybWFsaXplZEZlZWRiYWNrLFxuICAgICAgc2VudGltZW50OiB0aGlzLmFuYWx5emVTZW50aW1lbnQobm9ybWFsaXplZEZlZWRiYWNrKSxcbiAgICAgIGluZmVycmVkUmF0aW5nOiB0aGlzLmluZmVyUmF0aW5nKG5vcm1hbGl6ZWRGZWVkYmFjayksXG4gICAgICBjb250ZXh0LFxuICAgICAgZWxlbWVudFZlcnNpb246IHRoaXMudmVyc2lvblxuICAgIH07XG4gICAgXG4gICAgLy8gQWRkIHRvIGhpc3Rvcnkgd2l0aCBib3VuZHMgY2hlY2tpbmdcbiAgICBpZiAoIXRoaXMucmF0aW5ncy5mZWVkYmFja0hpc3RvcnkpIHtcbiAgICAgIHRoaXMucmF0aW5ncy5mZWVkYmFja0hpc3RvcnkgPSBbXTtcbiAgICB9XG4gICAgdGhpcy5yYXRpbmdzLmZlZWRiYWNrSGlzdG9yeS5wdXNoKHVzZXJGZWVkYmFjayk7XG4gICAgXG4gICAgLy8gUHJldmVudCB1bmJvdW5kZWQgZ3Jvd3RoXG4gICAgaWYgKHRoaXMucmF0aW5ncy5mZWVkYmFja0hpc3RvcnkubGVuZ3RoID4gdGhpcy5NQVhfRkVFREJBQ0tfSElTVE9SWSkge1xuICAgICAgdGhpcy5yYXRpbmdzLmZlZWRiYWNrSGlzdG9yeSA9IHRoaXMucmF0aW5ncy5mZWVkYmFja0hpc3Rvcnkuc2xpY2UoLXRoaXMuTUFYX0ZFRURCQUNLX0hJU1RPUlkpO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBGZWVkYmFjayBoaXN0b3J5IHRyaW1tZWQgdG8gJHt0aGlzLk1BWF9GRUVEQkFDS19ISVNUT1JZfSBlbnRyaWVzIGZvciBlbGVtZW50ICR7dGhpcy5pZH1gKTtcbiAgICB9XG4gICAgXG4gICAgLy8gVXBkYXRlIHVzZXIgcmF0aW5nIGlmIHdlIGluZmVycmVkIG9uZVxuICAgIGlmICh1c2VyRmVlZGJhY2suaW5mZXJyZWRSYXRpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy51cGRhdGVVc2VyUmF0aW5nKHVzZXJGZWVkYmFjay5pbmZlcnJlZFJhdGluZyk7XG4gICAgfVxuICAgIFxuICAgIHRoaXMuX2lzRGlydHkgPSB0cnVlO1xuICB9XG4gIFxuICAvKipcbiAgICogU2ltcGxlIHNlbnRpbWVudCBhbmFseXNpcy5cbiAgICogU3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgZm9yIG1vcmUgc29waGlzdGljYXRlZCBhbmFseXNpcy5cbiAgICovXG4gIHByb3RlY3RlZCBhbmFseXplU2VudGltZW50KGZlZWRiYWNrOiBzdHJpbmcpOiAncG9zaXRpdmUnIHwgJ25lZ2F0aXZlJyB8ICduZXV0cmFsJyB7XG4gICAgY29uc3QgbG93ZXIgPSBmZWVkYmFjay50b0xvd2VyQ2FzZSgpO1xuICAgIFxuICAgIGNvbnN0IHBvc2l0aXZlV29yZHMgPSBbJ2V4Y2VsbGVudCcsICdncmVhdCcsICdnb29kJywgJ2hlbHBmdWwnLCAndXNlZnVsJywgJ3BlcmZlY3QnLCAnYW1hemluZycsICdsb3ZlJ107XG4gICAgY29uc3QgbmVnYXRpdmVXb3JkcyA9IFsnYmFkJywgJ3Bvb3InLCAndGVycmlibGUnLCAndXNlbGVzcycsICdicm9rZW4nLCAnaGF0ZScsICdhd2Z1bCcsICdkaXNhcHBvaW50aW5nJ107XG4gICAgXG4gICAgY29uc3QgcG9zaXRpdmVDb3VudCA9IHBvc2l0aXZlV29yZHMuZmlsdGVyKHdvcmQgPT4gbG93ZXIuaW5jbHVkZXMod29yZCkpLmxlbmd0aDtcbiAgICBjb25zdCBuZWdhdGl2ZUNvdW50ID0gbmVnYXRpdmVXb3Jkcy5maWx0ZXIod29yZCA9PiBsb3dlci5pbmNsdWRlcyh3b3JkKSkubGVuZ3RoO1xuICAgIFxuICAgIGlmIChwb3NpdGl2ZUNvdW50ID4gbmVnYXRpdmVDb3VudCkgcmV0dXJuICdwb3NpdGl2ZSc7XG4gICAgaWYgKG5lZ2F0aXZlQ291bnQgPiBwb3NpdGl2ZUNvdW50KSByZXR1cm4gJ25lZ2F0aXZlJztcbiAgICByZXR1cm4gJ25ldXRyYWwnO1xuICB9XG4gIFxuICAvKipcbiAgICogU2ltcGxlIHJhdGluZyBpbmZlcmVuY2UgZnJvbSBmZWVkYmFjay5cbiAgICogU3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgZm9yIG1vcmUgc29waGlzdGljYXRlZCBpbmZlcmVuY2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgaW5mZXJSYXRpbmcoZmVlZGJhY2s6IHN0cmluZyk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc2VudGltZW50ID0gdGhpcy5hbmFseXplU2VudGltZW50KGZlZWRiYWNrKTtcbiAgICBjb25zdCBsb3dlciA9IGZlZWRiYWNrLnRvTG93ZXJDYXNlKCk7XG4gICAgXG4gICAgLy8gTG9vayBmb3IgZXhwbGljaXQgcmF0aW5nc1xuICAgIGNvbnN0IHJhdGluZ01hdGNoID0gbG93ZXIubWF0Y2goLyhcXGQrKVxccyooc3RhcnM/fFxcLzV8b3V0IG9mIDUpLyk7XG4gICAgaWYgKHJhdGluZ01hdGNoKSB7XG4gICAgICBjb25zdCByYXRpbmcgPSBOdW1iZXIucGFyc2VJbnQocmF0aW5nTWF0Y2hbMV0pO1xuICAgICAgaWYgKHJhdGluZyA+PSAxICYmIHJhdGluZyA8PSA1KSByZXR1cm4gcmF0aW5nO1xuICAgIH1cbiAgICBcbiAgICAvLyBJbmZlciBmcm9tIHNlbnRpbWVudFxuICAgIGlmIChzZW50aW1lbnQgPT09ICdwb3NpdGl2ZScpIHtcbiAgICAgIGlmIChsb3dlci5pbmNsdWRlcygncGVyZmVjdCcpIHx8IGxvd2VyLmluY2x1ZGVzKCdleGNlbGxlbnQnKSkgcmV0dXJuIDU7XG4gICAgICBpZiAobG93ZXIuaW5jbHVkZXMoJ2dyZWF0JykgfHwgbG93ZXIuaW5jbHVkZXMoJ3ZlcnkgZ29vZCcpKSByZXR1cm4gNDtcbiAgICAgIHJldHVybiA0O1xuICAgIH0gZWxzZSBpZiAoc2VudGltZW50ID09PSAnbmVnYXRpdmUnKSB7XG4gICAgICBpZiAobG93ZXIuaW5jbHVkZXMoJ3RlcnJpYmxlJykgfHwgbG93ZXIuaW5jbHVkZXMoJ2F3ZnVsJykpIHJldHVybiAxO1xuICAgICAgaWYgKGxvd2VyLmluY2x1ZGVzKCdwb29yJykgfHwgbG93ZXIuaW5jbHVkZXMoJ2JhZCcpKSByZXR1cm4gMjtcbiAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gMzsgLy8gTmV1dHJhbFxuICB9XG4gIFxuICAvKipcbiAgICogVXBkYXRlIHVzZXIgcmF0aW5nIHdpdGggYSBuZXcgdmFsdWUuXG4gICAqL1xuICBwcm90ZWN0ZWQgdXBkYXRlVXNlclJhdGluZyhuZXdSYXRpbmc6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5yYXRpbmdzKSByZXR1cm47XG4gICAgXG4gICAgaWYgKHRoaXMucmF0aW5ncy51c2VyUmF0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucmF0aW5ncy51c2VyUmF0aW5nID0gbmV3UmF0aW5nO1xuICAgICAgdGhpcy5yYXRpbmdzLnJhdGluZ0NvdW50ID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ2FsY3VsYXRlIHJ1bm5pbmcgYXZlcmFnZVxuICAgICAgY29uc3QgdG90YWxSYXRpbmcgPSB0aGlzLnJhdGluZ3MudXNlclJhdGluZyAqIHRoaXMucmF0aW5ncy5yYXRpbmdDb3VudCArIG5ld1JhdGluZztcbiAgICAgIHRoaXMucmF0aW5ncy5yYXRpbmdDb3VudCsrO1xuICAgICAgdGhpcy5yYXRpbmdzLnVzZXJSYXRpbmcgPSB0b3RhbFJhdGluZyAvIHRoaXMucmF0aW5ncy5yYXRpbmdDb3VudDtcbiAgICB9XG4gICAgXG4gICAgLy8gVXBkYXRlIGRlbHRhIGFuZCB0cmVuZFxuICAgIHRoaXMucmF0aW5ncy5yYXRpbmdEZWx0YSA9IHRoaXMucmF0aW5ncy51c2VyUmF0aW5nIC0gdGhpcy5yYXRpbmdzLmFpUmF0aW5nO1xuICAgIFxuICAgIC8vIFNpbXBsZSB0cmVuZCBjYWxjdWxhdGlvbiBiYXNlZCBvbiByZWNlbnQgZmVlZGJhY2tcbiAgICBjb25zdCByZWNlbnRGZWVkYmFjayA9IHRoaXMucmF0aW5ncy5mZWVkYmFja0hpc3Rvcnk/LnNsaWNlKC01KSB8fCBbXTtcbiAgICBjb25zdCByZWNlbnRTZW50aW1lbnRzID0gcmVjZW50RmVlZGJhY2subWFwKGYgPT4gZi5zZW50aW1lbnQpO1xuICAgIGNvbnN0IHBvc2l0aXZlQ291bnQgPSByZWNlbnRTZW50aW1lbnRzLmZpbHRlcihzID0+IHMgPT09ICdwb3NpdGl2ZScpLmxlbmd0aDtcbiAgICBjb25zdCBuZWdhdGl2ZUNvdW50ID0gcmVjZW50U2VudGltZW50cy5maWx0ZXIocyA9PiBzID09PSAnbmVnYXRpdmUnKS5sZW5ndGg7XG4gICAgXG4gICAgaWYgKHBvc2l0aXZlQ291bnQgPiBuZWdhdGl2ZUNvdW50ICsgMSkge1xuICAgICAgdGhpcy5yYXRpbmdzLnRyZW5kID0gJ2ltcHJvdmluZyc7XG4gICAgfSBlbHNlIGlmIChuZWdhdGl2ZUNvdW50ID4gcG9zaXRpdmVDb3VudCArIDEpIHtcbiAgICAgIHRoaXMucmF0aW5ncy50cmVuZCA9ICdkZWNsaW5pbmcnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJhdGluZ3MudHJlbmQgPSAnc3RhYmxlJztcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCBlbGVtZW50IHN0YXR1cy5cbiAgICovXG4gIHB1YmxpYyBnZXRTdGF0dXMoKTogRWxlbWVudFN0YXR1cyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXR1cztcbiAgfVxuICBcbiAgLyoqXG4gICAqIERlZmF1bHQgbGlmZWN5Y2xlIG1ldGhvZHMgLSBzdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBhcyBuZWVkZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYmVmb3JlQWN0aXZhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBQcmVwYXJpbmcgdG8gYWN0aXZhdGUgJHt0aGlzLnR5cGV9IGVsZW1lbnQ6ICR7dGhpcy5tZXRhZGF0YS5uYW1lfWApO1xuICAgIHRoaXMuX3N0YXR1cyA9IEVsZW1lbnRTdGF0dXMuQUNUSVZBVElORztcbiAgfVxuICBcbiAgcHVibGljIGFzeW5jIGFjdGl2YXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZ2dlci5pbmZvKGBBY3RpdmF0aW5nICR7dGhpcy50eXBlfSBlbGVtZW50OiAke3RoaXMubWV0YWRhdGEubmFtZX1gKTtcbiAgICB0aGlzLl9zdGF0dXMgPSBFbGVtZW50U3RhdHVzLkFDVElWRTtcbiAgfVxuICBcbiAgcHVibGljIGFzeW5jIGFmdGVyQWN0aXZhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBDb21wbGV0ZWQgYWN0aXZhdGlvbiBvZiAke3RoaXMudHlwZX0gZWxlbWVudDogJHt0aGlzLm1ldGFkYXRhLm5hbWV9YCk7XG4gIH1cbiAgXG4gIHB1YmxpYyBhc3luYyBkZWFjdGl2YXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZ2dlci5pbmZvKGBEZWFjdGl2YXRpbmcgJHt0aGlzLnR5cGV9IGVsZW1lbnQ6ICR7dGhpcy5tZXRhZGF0YS5uYW1lfWApO1xuICAgIHRoaXMuX3N0YXR1cyA9IEVsZW1lbnRTdGF0dXMuREVBQ1RJVkFUSU5HO1xuICAgIC8vIFN1YmNsYXNzZXMgc2hvdWxkIGltcGxlbWVudCBjbGVhbnVwIGxvZ2ljXG4gICAgdGhpcy5fc3RhdHVzID0gRWxlbWVudFN0YXR1cy5JTkFDVElWRTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIE1hcmsgZWxlbWVudCBhcyBtb2RpZmllZC5cbiAgICovXG4gIHByb3RlY3RlZCBtYXJrRGlydHkoKTogdm9pZCB7XG4gICAgdGhpcy5faXNEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5tZXRhZGF0YS5tb2RpZmllZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIGVsZW1lbnQgaGFzIHVuc2F2ZWQgY2hhbmdlcy5cbiAgICovXG4gIHB1YmxpYyBpc0RpcnR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0RpcnR5O1xuICB9XG4gIFxuICAvKipcbiAgICogTWFyayBlbGVtZW50IGFzIHNhdmVkLlxuICAgKi9cbiAgcHVibGljIG1hcmtDbGVhbigpOiB2b2lkIHtcbiAgICB0aGlzLl9pc0RpcnR5ID0gZmFsc2U7XG4gIH1cbn0iXX0=
|
|
@@ -19,10 +19,12 @@ export declare class FeedbackProcessor implements IFeedbackProcessor {
|
|
|
19
19
|
analyzeSentiment(text: string): Promise<'positive' | 'negative' | 'neutral'>;
|
|
20
20
|
/**
|
|
21
21
|
* Infer numeric rating from text.
|
|
22
|
+
* FIX: Use SafeRegex for DOS protection (PR #1187)
|
|
22
23
|
*/
|
|
23
24
|
inferRating(text: string): Promise<number | null>;
|
|
24
25
|
/**
|
|
25
26
|
* Extract improvement suggestions from feedback.
|
|
27
|
+
* FIX: DOS protection via input length limiting (PR #1187, Issue #1181)
|
|
26
28
|
*/
|
|
27
29
|
extractSuggestions(text: string): Promise<string[]>;
|
|
28
30
|
/**
|
|
@@ -39,6 +41,11 @@ export declare class FeedbackProcessor implements IFeedbackProcessor {
|
|
|
39
41
|
private getPatternWeight;
|
|
40
42
|
/**
|
|
41
43
|
* Calculate relevance of a keyword in context.
|
|
44
|
+
*
|
|
45
|
+
* FIX: ReDoS vulnerability - escape user input before using in RegExp
|
|
46
|
+
* Previously: Used keyword directly in RegExp which could cause ReDoS
|
|
47
|
+
* Now: Properly escapes special regex characters AND uses SafeRegex
|
|
48
|
+
* SonarCloud: Resolves DOS vulnerability hotspot (PR #1187)
|
|
42
49
|
*/
|
|
43
50
|
private calculateRelevance;
|
|
44
51
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedbackProcessor.d.ts","sourceRoot":"","sources":["../../src/elements/FeedbackProcessor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EAElB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"FeedbackProcessor.d.ts","sourceRoot":"","sources":["../../src/elements/FeedbackProcessor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EAElB,MAAM,4BAA4B,CAAC;AAQpC,qBAAa,iBAAkB,YAAW,kBAAkB;IAE1D,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAQ;IAG5C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAW;IAG9C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CA6ChC;IAGF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAG9B;IAGF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAG5B;;IAcF;;OAEG;IACU,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwDlE;;OAEG;IACU,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;IA6CzF;;;OAGG;IACU,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA2D9D;;;OAGG;IACU,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA8ChE;;OAEG;IACH,OAAO,CAAC,eAAe;IAiEvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAqCvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgBxB;;;;;;;OAOG;IACH,OAAO,CAAC,kBAAkB;IAoB1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA+B3B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA2BlC;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAG3B"}
|