@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
|
@@ -79,6 +79,13 @@ export class PortfolioManager {
|
|
|
79
79
|
getElementDir(type) {
|
|
80
80
|
return path.join(this.baseDir, type);
|
|
81
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* Get the file extension for a specific element type
|
|
84
|
+
* FIX (#1213): Expose ELEMENT_FILE_EXTENSIONS mapping for correct extension display
|
|
85
|
+
*/
|
|
86
|
+
getFileExtension(type) {
|
|
87
|
+
return ELEMENT_FILE_EXTENSIONS[type] || DEFAULT_ELEMENT_FILE_EXTENSION;
|
|
88
|
+
}
|
|
82
89
|
/**
|
|
83
90
|
* Initialize the portfolio directory structure
|
|
84
91
|
* Uses locking to prevent race conditions during concurrent initialization
|
|
@@ -387,4 +394,4 @@ export class PortfolioManager {
|
|
|
387
394
|
}
|
|
388
395
|
}
|
|
389
396
|
}
|
|
390
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9ydGZvbGlvTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wb3J0Zm9saW8vUG9ydGZvbGlvTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDN0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxXQUFXLEVBQW1CLE1BQU0sWUFBWSxDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXZFLFlBQVk7QUFDWixNQUFNLHVCQUF1QixHQUFnQztJQUMzRCxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLO0lBQzVCLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUs7SUFDMUIsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSztJQUM3QixDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLO0lBQzFCLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU87SUFDN0IsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSztDQUM5QixDQUFDO0FBRUYsK0NBQStDO0FBQy9DLE1BQU0sOEJBQThCLEdBQUcsS0FBSyxDQUFDO0FBRTdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQztBQUd2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QkFDckMsTUFBTSxDQUFDLEtBQUssQ0FBQyxnREFBZ0QsT0FBTyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2xGLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBvcnRmb2xpbyBNYW5hZ2VyIC0gTWFuYWdlcyB0aGUgcG9ydGZvbGlvIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGFsbCBlbGVtZW50IHR5cGVzXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdvcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgRWxlbWVudFR5cGUsIFBvcnRmb2xpb0NvbmZpZyB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgRGVmYXVsdEVsZW1lbnRQcm92aWRlciB9IGZyb20gJy4vRGVmYXVsdEVsZW1lbnRQcm92aWRlci5qcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXIsIEVycm9yQ2F0ZWdvcnkgfSBmcm9tICcuLi91dGlscy9FcnJvckhhbmRsZXIuanMnO1xuXG4vLyBDb25zdGFudHNcbmNvbnN0IEVMRU1FTlRfRklMRV9FWFRFTlNJT05TOiBSZWNvcmQ8RWxlbWVudFR5cGUsIHN0cmluZz4gPSB7XG4gIFtFbGVtZW50VHlwZS5QRVJTT05BXTogJy5tZCcsXG4gIFtFbGVtZW50VHlwZS5TS0lMTF06ICcubWQnLFxuICBbRWxlbWVudFR5cGUuVEVNUExBVEVdOiAnLm1kJyxcbiAgW0VsZW1lbnRUeXBlLkFHRU5UXTogJy5tZCcsXG4gIFtFbGVtZW50VHlwZS5NRU1PUlldOiAnLnlhbWwnLFxuICBbRWxlbWVudFR5cGUuRU5TRU1CTEVdOiAnLm1kJ1xufTtcblxuLy8gRGVmYXVsdCBleHRlbnNpb24gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbmNvbnN0IERFRkFVTFRfRUxFTUVOVF9GSUxFX0VYVEVOU0lPTiA9ICcubWQnO1xuXG5leHBvcnQgeyBFbGVtZW50VHlwZSB9O1xuZXhwb3J0IHR5cGUgeyBQb3J0Zm9saW9Db25maWcgfTtcblxuZXhwb3J0IGNsYXNzIFBvcnRmb2xpb01hbmFnZXIge1xuICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogUG9ydGZvbGlvTWFuYWdlcjtcbiAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2VMb2NrID0gZmFsc2U7XG4gIHByaXZhdGUgc3RhdGljIGluaXRpYWxpemF0aW9uTG9jayA9IGZhbHNlO1xuICBwcml2YXRlIHN0YXRpYyBpbml0aWFsaXphdGlvblByb21pc2U6IFByb21pc2U8dm9pZD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBiYXNlRGlyOiBzdHJpbmc7XG4gIFxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGNvbmZpZz86IFBvcnRmb2xpb0NvbmZpZykge1xuICAgIC8vIEdldCBwb3RlbnRpYWwgZGlyZWN0b3J5IGZyb20gZW52aXJvbm1lbnQgb3IgY29uZmlnXG4gICAgY29uc3QgZW52RGlyID0gcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX1BPUlRGT0xJT19ESVI7XG4gICAgY29uc3QgY29uZmlnRGlyID0gY29uZmlnPy5iYXNlRGlyO1xuICAgIGNvbnN0IGRlZmF1bHREaXIgPSBwYXRoLmpvaW4oaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICdwb3J0Zm9saW8nKTtcbiAgICBcbiAgICAvLyBWYWxpZGF0ZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiBwcm92aWRlZFxuICAgIGlmIChlbnZEaXIpIHtcbiAgICAgIGlmICghcGF0aC5pc0Fic29sdXRlKGVudkRpcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdET0xMSE9VU0VfUE9SVEZPTElPX0RJUiBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGgnKTtcbiAgICAgIH1cbiAgICAgIC8vIEFkZGl0aW9uYWwgdmFsaWRhdGlvbiBmb3Igc3VzcGljaW91cyBwYXRoc1xuICAgICAgaWYgKGVudkRpci5pbmNsdWRlcygnLi4nKSB8fCBlbnZEaXIuc3RhcnRzV2l0aCgnL2V0YycpIHx8IGVudkRpci5zdGFydHNXaXRoKCcvc3lzJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdET0xMSE9VU0VfUE9SVEZPTElPX0RJUiBjb250YWlucyBzdXNwaWNpb3VzIHBhdGggc2VnbWVudHMnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gVmFsaWRhdGUgY29uZmlnIGRpcmVjdG9yeSBpZiBwcm92aWRlZFxuICAgIGlmIChjb25maWdEaXIgJiYgIXBhdGguaXNBYnNvbHV0ZShjb25maWdEaXIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BvcnRmb2xpbyBjb25maWcgYmFzZURpciBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGgnKTtcbiAgICB9XG4gICAgXG4gICAgLy8gVXNlIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHNldCwgb3RoZXJ3aXNlIGNvbmZpZywgb3RoZXJ3aXNlIGRlZmF1bHRcbiAgICB0aGlzLmJhc2VEaXIgPSBlbnZEaXIgfHwgY29uZmlnRGlyIHx8IGRlZmF1bHREaXI7XG4gICAgXG4gICAgbG9nZ2VyLmluZm8oYFtQb3J0Zm9saW9NYW5hZ2VyXSBQb3J0Zm9saW8gYmFzZSBkaXJlY3Rvcnk6ICR7dGhpcy5iYXNlRGlyfWApO1xuICB9XG4gIFxuICBwdWJsaWMgc3RhdGljIGdldEluc3RhbmNlKGNvbmZpZz86IFBvcnRmb2xpb0NvbmZpZyk6IFBvcnRmb2xpb01hbmFnZXIge1xuICAgIGlmICghUG9ydGZvbGlvTWFuYWdlci5pbnN0YW5jZSkge1xuICAgICAgLy8gQ2hlY2sgaWYgYW5vdGhlciB0aHJlYWQgaXMgYWxyZWFkeSBjcmVhdGluZyB0aGUgaW5zdGFuY2VcbiAgICAgIGlmIChQb3J0Zm9saW9NYW5hZ2VyLmluc3RhbmNlTG9jaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BvcnRmb2xpb01hbmFnZXIgaW5zdGFuY2UgaXMgYmVpbmcgY3JlYXRlZCBieSBhbm90aGVyIHRocmVhZCcpO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0cnkge1xuICAgICAgICBQb3J0Zm9saW9NYW5hZ2VyLmluc3RhbmNlTG9jayA9IHRydWU7XG4gICAgICAgIFBvcnRmb2xpb01hbmFnZXIuaW5zdGFuY2UgPSBuZXcgUG9ydGZvbGlvTWFuYWdlcihjb25maWcpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUG9ydGZvbGlvTWFuYWdlci5pbnN0YW5jZUxvY2sgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFBvcnRmb2xpb01hbmFnZXIuaW5zdGFuY2U7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgdGhlIGJhc2UgcG9ydGZvbGlvIGRpcmVjdG9yeVxuICAgKi9cbiAgcHVibGljIGdldEJhc2VEaXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlRGlyO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHRoZSBkaXJlY3RvcnkgZm9yIGEgc3BlY2lmaWMgZWxlbWVudCB0eXBlXG4gICAqL1xuICBwdWJsaWMgZ2V0RWxlbWVudERpcih0eXBlOiBFbGVtZW50VHlwZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHBhdGguam9pbih0aGlzLmJhc2VEaXIsIHR5cGUpO1xuICB9XG4gIFxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgcG9ydGZvbGlvIGRpcmVjdG9yeSBzdHJ1Y3R1cmVcbiAgICogVXNlcyBsb2NraW5nIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBjb25jdXJyZW50IGluaXRpYWxpemF0aW9uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaW5pdGlhbGl6ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBJZiBhbHJlYWR5IGluaXRpYWxpemluZywgd2FpdCBmb3IgdGhlIGV4aXN0aW5nIGluaXRpYWxpemF0aW9uXG4gICAgaWYgKFBvcnRmb2xpb01hbmFnZXIuaW5pdGlhbGl6YXRpb25Qcm9taXNlKSB7XG4gICAgICByZXR1cm4gUG9ydGZvbGlvTWFuYWdlci5pbml0aWFsaXphdGlvblByb21pc2U7XG4gICAgfVxuICAgIFxuICAgIC8vIElmIGFscmVhZHkgaW5pdGlhbGl6ZWQsIGNoZWNrIGlmIGRpcmVjdG9yaWVzIGV4aXN0XG4gICAgaWYgKGF3YWl0IHRoaXMuZXhpc3RzKCkpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnW1BvcnRmb2xpb01hbmFnZXJdIFBvcnRmb2xpbyBhbHJlYWR5IGluaXRpYWxpemVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIENyZWF0ZSBpbml0aWFsaXphdGlvbiBwcm9taXNlIHRvIHByZXZlbnQgY29uY3VycmVudCBpbml0aWFsaXphdGlvblxuICAgIFBvcnRmb2xpb01hbmFnZXIuaW5pdGlhbGl6YXRpb25Qcm9taXNlID0gdGhpcy5wZXJmb3JtSW5pdGlhbGl6YXRpb24oKTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgYXdhaXQgUG9ydGZvbGlvTWFuYWdlci5pbml0aWFsaXphdGlvblByb21pc2U7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIENsZWFyIHRoZSBwcm9taXNlIGFmdGVyIGNvbXBsZXRpb25cbiAgICAgIFBvcnRmb2xpb01hbmFnZXIuaW5pdGlhbGl6YXRpb25Qcm9taXNlID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBQZXJmb3JtIHRoZSBhY3R1YWwgaW5pdGlhbGl6YXRpb24gLSBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwZXJmb3JtSW5pdGlhbGl6YXRpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nZ2VyLmluZm8oJ1tQb3J0Zm9saW9NYW5hZ2VyXSBJbml0aWFsaXppbmcgcG9ydGZvbGlvIGRpcmVjdG9yeSBzdHJ1Y3R1cmUnKTtcbiAgICBcbiAgICAvLyBDcmVhdGUgYmFzZSBkaXJlY3RvcnlcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMubWtkaXIodGhpcy5iYXNlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZXJyID0gZXJyb3IgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uO1xuICAgICAgLy8gSW4gcmVhZC1vbmx5IGVudmlyb25tZW50cyAobGlrZSBEb2NrZXIpLCB3ZSBjYW4ndCBjcmVhdGUgZGlyZWN0b3JpZXNcbiAgICAgIC8vIExvZyBidXQgY29udGludWUgLSB0aGUgcG9ydGZvbGlvIHdpbGwgYmUgZW1wdHkgYnV0IGZ1bmN0aW9uYWxcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VBQ0NFUycgfHwgZXJyLmNvZGUgPT09ICdFUk9GUycgfHwgZXJyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBbUG9ydGZvbGlvTWFuYWdlcl0gQ2Fubm90IGNyZWF0ZSBwb3J0Zm9saW8gZGlyZWN0b3J5IChyZWFkLW9ubHkgZW52aXJvbm1lbnQ/KTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYFtEb2xsaG91c2VNQ1BdIFJ1bm5pbmcgaW4gcmVhZC1vbmx5IG1vZGUgLSBwb3J0Zm9saW8gZmVhdHVyZXMgZGlzYWJsZWRgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIFxuICAgIC8vIENyZWF0ZSBzdWJkaXJlY3RvcmllcyBmb3IgZWFjaCBlbGVtZW50IHR5cGVcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnRUeXBlIG9mIE9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpKSB7XG4gICAgICBjb25zdCBlbGVtZW50RGlyID0gcGF0aC5qb2luKHRoaXMuYmFzZURpciwgZWxlbWVudFR5cGUpO1xuICAgICAgYXdhaXQgZnMubWtkaXIoZWxlbWVudERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBsb2dnZXIuZGVidWcoYFtQb3J0Zm9saW9NYW5hZ2VyXSBDcmVhdGVkIGRpcmVjdG9yeTogJHtlbGVtZW50RGlyfWApO1xuICAgIH1cbiAgICBcbiAgICAvLyBDcmVhdGUgc3BlY2lhbCBkaXJlY3RvcmllcyBmb3Igc3RhdGVmdWwgZWxlbWVudHNcbiAgICBjb25zdCBhZ2VudFN0YXRlRGlyID0gcGF0aC5qb2luKHRoaXMuYmFzZURpciwgRWxlbWVudFR5cGUuQUdFTlQsICcuc3RhdGUnKTtcbiAgICBhd2FpdCBmcy5ta2RpcihhZ2VudFN0YXRlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBcbiAgICBsb2dnZXIuaW5mbygnW1BvcnRmb2xpb01hbmFnZXJdIFBvcnRmb2xpbyBkaXJlY3Rvcnkgc3RydWN0dXJlIGluaXRpYWxpemVkJyk7XG4gICAgXG4gICAgLy8gTWlncmF0aW9uIGZvciB2MS40LjIgdXNlcnM6IHJlbmFtZSBzaW5ndWxhciBkaXJlY3RvcmllcyB0byBwbHVyYWxcbiAgICBhd2FpdCB0aGlzLm1pZ3JhdGVGcm9tU2luZ3VsYXJEaXJlY3RvcmllcygpO1xuICAgIFxuICAgIC8vIFBvcHVsYXRlIHdpdGggZGVmYXVsdCBlbGVtZW50cyBpZiB0aGlzIGlzIGEgbmV3IGluc3RhbGxhdGlvblxuICAgIC8vIFNraXAgZHVyaW5nIHRlc3RzIHRvIGF2b2lkIGludGVyZmVyZW5jZVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkZWZhdWx0UHJvdmlkZXIgPSBuZXcgRGVmYXVsdEVsZW1lbnRQcm92aWRlcigpO1xuICAgICAgICBhd2FpdCBkZWZhdWx0UHJvdmlkZXIucG9wdWxhdGVEZWZhdWx0cyh0aGlzLmJhc2VEaXIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdbUG9ydGZvbGlvTWFuYWdlcl0gRXJyb3IgcG9wdWxhdGluZyBkZWZhdWx0IGVsZW1lbnRzOicsIGVycm9yKTtcbiAgICAgICAgLy8gTG9nIHRvIHN0ZGVyciBmb3IgQ2xhdWRlIERlc2t0b3AgdmlzaWJpbGl0eVxuICAgICAgICBsb2dnZXIuZXJyb3IoYFtQb3J0Zm9saW9NYW5hZ2VyXSBDUklUSUNBTDogRmFpbGVkIHRvIHBvcHVsYXRlIGRlZmF1bHQgZWxlbWVudHM6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgICAvLyBDb250aW51ZSBhbnl3YXkgLSBlbXB0eSBwb3J0Zm9saW8gaXMgdmFsaWRcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiBwb3J0Zm9saW8gZGlyZWN0b3J5IGV4aXN0c1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGV4aXN0cygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMuYWNjZXNzKHRoaXMuYmFzZURpcik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIGZpbGVuYW1lIGFwcGVhcnMgdG8gYmUgYSB0ZXN0IGVsZW1lbnRcbiAgICogU0FGRVRZOiBQYXR0ZXJuLWJhc2VkIGZpbHRlcmluZyBvbmx5LCBubyBjb250ZW50IHBhcnNpbmdcbiAgICovXG4gIHB1YmxpYyBpc1Rlc3RFbGVtZW50KGZpbGVuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyBEYW5nZXJvdXMgdGVzdCBwYXR0ZXJucyB0aGF0IHNob3VsZCBuZXZlciBhcHBlYXIgaW4gcHJvZHVjdGlvblxuICAgIGNvbnN0IGRhbmdlcm91c1BhdHRlcm5zID0gW1xuICAgICAgL15iaW4tc2gvaSxcbiAgICAgIC9ecm0tcmYvaSxcbiAgICAgIC9ebmMtZS1iaW4vaSxcbiAgICAgIC9ecHl0aG9uLWMtaW1wb3J0L2ksXG4gICAgICAvXmN1cmwuKmV2aWwvaSxcbiAgICAgIC9ed2dldC4qbWFsaWNpb3VzL2ksXG4gICAgICAvXmV2YWwtL2ksXG4gICAgICAvXmV4ZWMtL2ksXG4gICAgICAvXmJhc2gtYy0vaSxcbiAgICAgIC9ec2gtYy0vaSxcbiAgICAgIC9ecG93ZXJzaGVsbC0vaSxcbiAgICAgIC9eY21kLWMtL2ksXG4gICAgICAvc2hlbGwtaW5qZWN0aW9uL2lcbiAgICBdO1xuICAgIFxuICAgIC8vIENvbW1vbiB0ZXN0IHBhdHRlcm5zXG4gICAgY29uc3QgdGVzdFBhdHRlcm5zID0gW1xuICAgICAgL150ZXN0LS9pLFxuICAgICAgL15tZW1vcnktdGVzdC0vaSxcbiAgICAgIC9eeWFtbC10ZXN0L2ksXG4gICAgICAvXnBlcmYtdGVzdC0vaSxcbiAgICAgIC9ec3RhYmlsaXR5LXRlc3QtL2ksXG4gICAgICAvXnJvdW5kdHJpcC10ZXN0L2ksXG4gICAgICAvdGVzdC1wZXJzb25hL2ksXG4gICAgICAvdGVzdC1za2lsbC9pLFxuICAgICAgL3Rlc3QtdGVtcGxhdGUvaSxcbiAgICAgIC90ZXN0LWFnZW50L2ksXG4gICAgICAvXFwudGVzdFxcLi8sXG4gICAgICAvX190ZXN0X18vLFxuICAgICAgL3Rlc3QtZGF0YS8sXG4gICAgICAvcGVuZXRyYXRpb24tdGVzdC9pLFxuICAgICAgL21ldGFkYXRhLXRlc3QvaSxcbiAgICAgIC90ZXN0cGVyc29uYVxcZCsvaSAgLy8gR2VuZXJhdGVkIHRlc3QgcGVyc29uYXMgd2l0aCB0aW1lc3RhbXBzXG4gICAgXTtcbiAgICBcbiAgICAvLyBDaGVjayBkYW5nZXJvdXMgcGF0dGVybnMgZmlyc3RcbiAgICBpZiAoZGFuZ2Vyb3VzUGF0dGVybnMuc29tZShwYXR0ZXJuID0+IHBhdHRlcm4udGVzdChmaWxlbmFtZSkpKSB7XG4gICAgICBsb2dnZXIud2FybihgW1BvcnRmb2xpb01hbmFnZXJdIEZpbHRlcmVkIGRhbmdlcm91cyB0ZXN0IGVsZW1lbnQ6ICR7ZmlsZW5hbWV9YCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgY29tbW9uIHRlc3QgcGF0dGVybnNcbiAgICByZXR1cm4gdGVzdFBhdHRlcm5zLnNvbWUocGF0dGVybiA9PiBwYXR0ZXJuLnRlc3QoZmlsZW5hbWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IGFsbCBlbGVtZW50cyBvZiBhIHNwZWNpZmljIHR5cGVcbiAgICovXG4gIHB1YmxpYyBhc3luYyBsaXN0RWxlbWVudHModHlwZTogRWxlbWVudFR5cGUpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3QgZWxlbWVudERpciA9IHRoaXMuZ2V0RWxlbWVudERpcih0eXBlKTtcbiAgICBjb25zdCBmaWxlRXh0ZW5zaW9uID0gRUxFTUVOVF9GSUxFX0VYVEVOU0lPTlNbdHlwZV0gfHwgREVGQVVMVF9FTEVNRU5UX0ZJTEVfRVhURU5TSU9OO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZnMucmVhZGRpcihlbGVtZW50RGlyKTtcbiAgICAgIC8vIEZpbHRlciBmb3IgY29ycmVjdCBmaWxlIGV4dGVuc2lvbiBiYXNlZCBvbiBlbGVtZW50IHR5cGUgYW5kIGV4Y2x1ZGUgdGVzdCBlbGVtZW50c1xuICAgICAgcmV0dXJuIGZpbGVzXG4gICAgICAgIC5maWx0ZXIoZmlsZSA9PiBmaWxlLmVuZHNXaXRoKGZpbGVFeHRlbnNpb24pKVxuICAgICAgICAuZmlsdGVyKGZpbGUgPT4gIXRoaXMuaXNUZXN0RWxlbWVudChmaWxlKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVyciA9IGVycm9yIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbjtcbiAgICAgIFxuICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAvLyBEaXJlY3RvcnkgZG9lc24ndCBleGlzdCB5ZXQgLSB0aGlzIGlzIGV4cGVjdGVkIGZvciBuZXcgaW5zdGFsbGF0aW9uc1xuICAgICAgICBsb2dnZXIuZGVidWcoYFtQb3J0Zm9saW9NYW5hZ2VyXSBFbGVtZW50IGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0IHlldDogJHtlbGVtZW50RGlyfWApO1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VBQ0NFUycgfHwgZXJyLmNvZGUgPT09ICdFUEVSTScpIHtcbiAgICAgICAgLy8gUGVybWlzc2lvbiBkZW5pZWQgLSBsb2cgYnV0IHJldHVybiBlbXB0eSBhcnJheVxuICAgICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ1BvcnRmb2xpb01hbmFnZXIubGlzdEVsZW1lbnRzJywgZXJyb3IsIHsgZWxlbWVudERpciB9KTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9URElSJykge1xuICAgICAgICAvLyBQYXRoIGV4aXN0cyBidXQgaXMgbm90IGEgZGlyZWN0b3J5XG4gICAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignUG9ydGZvbGlvTWFuYWdlci5saXN0RWxlbWVudHMnLCBlcnJvciwgeyBlbGVtZW50RGlyIH0pO1xuICAgICAgICB0aHJvdyBFcnJvckhhbmRsZXIuY3JlYXRlRXJyb3IoYFBhdGggaXMgbm90IGEgZGlyZWN0b3J5OiAke2VsZW1lbnREaXJ9YCwgRXJyb3JDYXRlZ29yeS5TWVNURU1fRVJST1IpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBGb3IgYW55IG90aGVyIGVycm9ycywgdGhyb3cgd2l0aCBjb250ZXh0XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ1BvcnRmb2xpb01hbmFnZXIubGlzdEVsZW1lbnRzJywgZXJyb3IsIHsgZWxlbWVudERpciB9KTtcbiAgICAgIHRocm93IEVycm9ySGFuZGxlci53cmFwRXJyb3IoZXJyb3IsICdGYWlsZWQgdG8gbGlzdCBlbGVtZW50cycsIEVycm9yQ2F0ZWdvcnkuU1lTVEVNX0VSUk9SKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgZnVsbCBwYXRoIHRvIGFuIGVsZW1lbnQgZmlsZVxuICAgKi9cbiAgcHVibGljIGdldEVsZW1lbnRQYXRoKHR5cGU6IEVsZW1lbnRUeXBlLCBmaWxlbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBWYWxpZGF0ZSBmaWxlbmFtZSB0byBwcmV2ZW50IHBhdGggdHJhdmVyc2FsXG4gICAgaWYgKCFmaWxlbmFtZSB8fCB0eXBlb2YgZmlsZW5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdQQVRIX1RSQVZFUlNBTF9BVFRFTVBUJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgICBzb3VyY2U6ICdQb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnRQYXRoJyxcbiAgICAgICAgZGV0YWlsczogYEludmFsaWQgZmlsZW5hbWUgcHJvdmlkZWQ6ICR7dHlwZW9mIGZpbGVuYW1lfWAsXG4gICAgICAgIGFkZGl0aW9uYWxEYXRhOiB7IGVsZW1lbnRUeXBlOiB0eXBlLCBmaWxlbmFtZTogU3RyaW5nKGZpbGVuYW1lKSB9XG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmaWxlbmFtZTogbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgZm9yIHBhdGggdHJhdmVyc2FsIGF0dGVtcHRzXG4gICAgaWYgKGZpbGVuYW1lLmluY2x1ZGVzKCcuLicpIHx8IGZpbGVuYW1lLmluY2x1ZGVzKCcvJykgfHwgZmlsZW5hbWUuaW5jbHVkZXMoJ1xcXFwnKSB8fCBwYXRoLmlzQWJzb2x1dGUoZmlsZW5hbWUpKSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdQQVRIX1RSQVZFUlNBTF9BVFRFTVBUJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdISUdIJyxcbiAgICAgICAgc291cmNlOiAnUG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50UGF0aCcsXG4gICAgICAgIGRldGFpbHM6IGBQYXRoIHRyYXZlcnNhbCBhdHRlbXB0IGRldGVjdGVkIGluIGZpbGVuYW1lOiAke2ZpbGVuYW1lfWAsXG4gICAgICAgIGFkZGl0aW9uYWxEYXRhOiB7IGVsZW1lbnRUeXBlOiB0eXBlLCBmaWxlbmFtZSB9XG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmaWxlbmFtZTogY29udGFpbnMgcGF0aCB0cmF2ZXJzYWwgY2hhcmFjdGVyczogJHtmaWxlbmFtZX1gKTtcbiAgICB9XG4gICAgXG4gICAgLy8gQWRkaXRpb25hbCB2YWxpZGF0aW9uIGZvciBoaWRkZW4gZmlsZXMgYW5kIHNwZWNpYWwgY2hhcmFjdGVyc1xuICAgIGlmIChmaWxlbmFtZS5zdGFydHNXaXRoKCcuJykgfHwgZmlsZW5hbWUuaW5jbHVkZXMoJ1xcMCcpKSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdQQVRIX1RSQVZFUlNBTF9BVFRFTVBUJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgICBzb3VyY2U6ICdQb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnRQYXRoJyxcbiAgICAgICAgZGV0YWlsczogYEludmFsaWQgZmlsZW5hbWUgY2hhcmFjdGVycyBkZXRlY3RlZDogJHtmaWxlbmFtZX1gLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YTogeyBlbGVtZW50VHlwZTogdHlwZSwgZmlsZW5hbWUsIGhhc0hpZGRlbkZpbGU6IGZpbGVuYW1lLnN0YXJ0c1dpdGgoJy4nKSwgaGFzTnVsbEJ5dGU6IGZpbGVuYW1lLmluY2x1ZGVzKCdcXDAnKSB9XG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmaWxlbmFtZTogY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzOiAke2ZpbGVuYW1lfWApO1xuICAgIH1cbiAgICBcbiAgICAvLyBFbnN1cmUgZmlsZW5hbWUgZW5kcyB3aXRoIC5tZFxuICAgIGNvbnN0IHNhZmVGaWxlbmFtZSA9IGZpbGVuYW1lLmVuZHNXaXRoKCcubWQnKSA/IGZpbGVuYW1lIDogYCR7ZmlsZW5hbWV9Lm1kYDtcbiAgICByZXR1cm4gcGF0aC5qb2luKHRoaXMuZ2V0RWxlbWVudERpcih0eXBlKSwgc2FmZUZpbGVuYW1lKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIGVsZW1lbnQgZXhpc3RzXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZWxlbWVudEV4aXN0cyh0eXBlOiBFbGVtZW50VHlwZSwgZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy5hY2Nlc3ModGhpcy5nZXRFbGVtZW50UGF0aCh0eXBlLCBmaWxlbmFtZSkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGxlZ2FjeSBwZXJzb25hcyBkaXJlY3RvcnkgcGF0aCAoZm9yIG1pZ3JhdGlvbilcbiAgICovXG4gIHB1YmxpYyBnZXRMZWdhY3lQZXJzb25hc0RpcigpOiBzdHJpbmcge1xuICAgIHJldHVybiBwYXRoLmpvaW4oaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICdwZXJzb25hcycpO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgbGVnYWN5IHBlcnNvbmFzIGRpcmVjdG9yeSBleGlzdHNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBoYXNMZWdhY3lQZXJzb25hcygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMuYWNjZXNzKHRoaXMuZ2V0TGVnYWN5UGVyc29uYXNEaXIoKSk7XG4gICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGZzLnJlYWRkaXIodGhpcy5nZXRMZWdhY3lQZXJzb25hc0RpcigpKTtcbiAgICAgIHJldHVybiBmaWxlcy5zb21lKGZpbGUgPT4gZmlsZS5lbmRzV2l0aCgnLm1kJykpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBwb3J0Zm9saW8gc3RhdGlzdGljc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFN0YXRpc3RpY3MoKTogUHJvbWlzZTxSZWNvcmQ8RWxlbWVudFR5cGUsIG51bWJlcj4+IHtcbiAgICBjb25zdCBzdGF0czogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuICAgIFxuICAgIGZvciAoY29uc3QgZWxlbWVudFR5cGUgb2YgT2JqZWN0LnZhbHVlcyhFbGVtZW50VHlwZSkpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRzID0gYXdhaXQgdGhpcy5saXN0RWxlbWVudHMoZWxlbWVudFR5cGUpO1xuICAgICAgc3RhdHNbZWxlbWVudFR5cGVdID0gZWxlbWVudHMubGVuZ3RoO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gc3RhdHMgYXMgUmVjb3JkPEVsZW1lbnRUeXBlLCBudW1iZXI+O1xuICB9XG4gIFxuICAvKipcbiAgICogTWlncmF0ZSBmcm9tIHYxLjQuMiBzaW5ndWxhciBkaXJlY3RvcnkgbmFtZXMgdG8gdjEuNC4zIHBsdXJhbCBuYW1lc1xuICAgKiBUaGlzIGhhbmRsZXMgdGhlIHVwZ3JhZGUgcGF0aCBmb3IgZXhpc3RpbmcgdXNlcnNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbWlncmF0ZUZyb21TaW5ndWxhckRpcmVjdG9yaWVzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG9sZFRvTmV3OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJ3BlcnNvbmEnOiAncGVyc29uYXMnLFxuICAgICAgJ3NraWxsJzogJ3NraWxscycsXG4gICAgICAndGVtcGxhdGUnOiAndGVtcGxhdGVzJyxcbiAgICAgICdhZ2VudCc6ICdhZ2VudHMnLFxuICAgICAgJ21lbW9yeSc6ICdtZW1vcmllcycsXG4gICAgICAnZW5zZW1ibGUnOiAnZW5zZW1ibGVzJ1xuICAgIH07XG4gICAgXG4gICAgZm9yIChjb25zdCBbb2xkTmFtZSwgbmV3TmFtZV0gb2YgT2JqZWN0LmVudHJpZXMob2xkVG9OZXcpKSB7XG4gICAgICAvLyBVbmljb2RlIG5vcm1hbGl6ZSB0aGUgZGlyZWN0b3J5IG5hbWVzIChldmVuIHRob3VnaCB0aGV5J3JlIGhhcmRjb2RlZCwgZm9yIHNlY3VyaXR5IGF1ZGl0KVxuICAgICAgY29uc3Qgbm9ybWFsaXplZE9sZCA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKG9sZE5hbWUpO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZE5ldyA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKG5ld05hbWUpO1xuICAgICAgXG4gICAgICBpZiAoIW5vcm1hbGl6ZWRPbGQuaXNWYWxpZCB8fCAhbm9ybWFsaXplZE5ldy5pc1ZhbGlkKSB7XG4gICAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiB3aXRoIG91ciBoYXJkY29kZWQgdmFsdWVzLCBidXQgZm9yIGNvbXBsZXRlbmVzc1xuICAgICAgICBsb2dnZXIuZXJyb3IoYFtQb3J0Zm9saW9NYW5hZ2VyXSBJbnZhbGlkIFVuaWNvZGUgaW4gZGlyZWN0b3J5IG5hbWVzIGR1cmluZyBtaWdyYXRpb25gKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IG9sZERpciA9IHBhdGguam9pbih0aGlzLmJhc2VEaXIsIG5vcm1hbGl6ZWRPbGQubm9ybWFsaXplZENvbnRlbnQpO1xuICAgICAgY29uc3QgbmV3RGlyID0gcGF0aC5qb2luKHRoaXMuYmFzZURpciwgbm9ybWFsaXplZE5ldy5ub3JtYWxpemVkQ29udGVudCk7XG4gICAgICBcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIENoZWNrIGlmIG9sZCBkaXJlY3RvcnkgZXhpc3RzXG4gICAgICAgIGF3YWl0IGZzLmFjY2VzcyhvbGREaXIpO1xuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgaWYgbmV3IGRpcmVjdG9yeSBhbHJlYWR5IGhhcyBjb250ZW50XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgbmV3RGlyRmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKG5ld0Rpcik7XG4gICAgICAgICAgaWYgKG5ld0RpckZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICAgICAgICBgW1BvcnRmb2xpb01hbmFnZXJdIEJvdGggJHtvbGROYW1lfSBhbmQgJHtuZXdOYW1lfSBkaXJlY3RvcmllcyBleGlzdC4gS2VlcGluZyAke25ld05hbWV9LCBza2lwcGluZyBtaWdyYXRpb24uYCxcbiAgICAgICAgICAgICAgeyBvbGREaXIsIG5ld0RpciwgZmlsZUNvdW50OiBuZXdEaXJGaWxlcy5sZW5ndGggfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gTmV3IGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0IG9yIGlzIGVtcHR5LCBwcm9jZWVkIHdpdGggbWlncmF0aW9uXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIFBlcmZvcm0gdGhlIG1pZ3JhdGlvblxuICAgICAgICBsb2dnZXIuaW5mbyhgW1BvcnRmb2xpb01hbmFnZXJdIE1pZ3JhdGluZyAke29sZE5hbWV9IOKGkiAke25ld05hbWV9YCk7XG4gICAgICAgIGF3YWl0IGZzLnJlbmFtZShvbGREaXIsIG5ld0Rpcik7XG4gICAgICAgIFxuICAgICAgICAvLyBMb2cgc2VjdXJpdHkgZXZlbnQgZm9yIGF1ZGl0IHRyYWlsXG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnRElSRUNUT1JZX01JR1JBVElPTicsXG4gICAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICAgIHNvdXJjZTogJ1BvcnRmb2xpb01hbmFnZXIubWlncmF0ZUZyb21TaW5ndWxhckRpcmVjdG9yaWVzJyxcbiAgICAgICAgICBkZXRhaWxzOiBgTWlncmF0ZWQgZGlyZWN0b3J5IGZyb20gJHtvbGROYW1lfSB0byAke25ld05hbWV9IGZvciB2MS40LjMgY29tcGF0aWJpbGl0eWAsXG4gICAgICAgICAgbWV0YWRhdGE6IHsgb2xkRGlyLCBuZXdEaXIgfVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBPbGQgZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3QsIHdoaWNoIGlzIGZpbmVcbiAgICAgICAgaWYgKChlcnJvciBhcyBhbnkpLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKGBbUG9ydGZvbGlvTWFuYWdlcl0gRXJyb3IgZHVyaW5nIG1pZ3JhdGlvbiBvZiAke29sZE5hbWV9OmAsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSJdfQ==
|
|
397
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9ydGZvbGlvTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wb3J0Zm9saW8vUG9ydGZvbGlvTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDN0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxXQUFXLEVBQW1CLE1BQU0sWUFBWSxDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXZFLFlBQVk7QUFDWixNQUFNLHVCQUF1QixHQUFnQztJQUMzRCxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLO0lBQzVCLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUs7SUFDMUIsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSztJQUM3QixDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLO0lBQzFCLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU87SUFDN0IsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSztDQUM5QixDQUFDO0FBRUYsK0NBQStDO0FBQy9DLE1BQU0sOEJBQThCLEdBQUcsS0FBSyxDQUFDO0FBRTdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQztBQUd2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WUFFTCxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZiw2Q0FBNkM7Z0JBQzdDLElBQUssS0FBYSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDckMsTUFBTSxDQUFDLEtBQUssQ0FBQyxnREFBZ0QsT0FBTyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2xGLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBvcnRmb2xpbyBNYW5hZ2VyIC0gTWFuYWdlcyB0aGUgcG9ydGZvbGlvIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGFsbCBlbGVtZW50IHR5cGVzXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdvcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgRWxlbWVudFR5cGUsIFBvcnRmb2xpb0NvbmZpZyB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgRGVmYXVsdEVsZW1lbnRQcm92aWRlciB9IGZyb20gJy4vRGVmYXVsdEVsZW1lbnRQcm92aWRlci5qcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXIsIEVycm9yQ2F0ZWdvcnkgfSBmcm9tICcuLi91dGlscy9FcnJvckhhbmRsZXIuanMnO1xuXG4vLyBDb25zdGFudHNcbmNvbnN0IEVMRU1FTlRfRklMRV9FWFRFTlNJT05TOiBSZWNvcmQ8RWxlbWVudFR5cGUsIHN0cmluZz4gPSB7XG4gIFtFbGVtZW50VHlwZS5QRVJTT05BXTogJy5tZCcsXG4gIFtFbGVtZW50VHlwZS5TS0lMTF06ICcubWQnLFxuICBbRWxlbWVudFR5cGUuVEVNUExBVEVdOiAnLm1kJyxcbiAgW0VsZW1lbnRUeXBlLkFHRU5UXTogJy5tZCcsXG4gIFtFbGVtZW50VHlwZS5NRU1PUlldOiAnLnlhbWwnLFxuICBbRWxlbWVudFR5cGUuRU5TRU1CTEVdOiAnLm1kJ1xufTtcblxuLy8gRGVmYXVsdCBleHRlbnNpb24gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbmNvbnN0IERFRkFVTFRfRUxFTUVOVF9GSUxFX0VYVEVOU0lPTiA9ICcubWQnO1xuXG5leHBvcnQgeyBFbGVtZW50VHlwZSB9O1xuZXhwb3J0IHR5cGUgeyBQb3J0Zm9saW9Db25maWcgfTtcblxuZXhwb3J0IGNsYXNzIFBvcnRmb2xpb01hbmFnZXIge1xuICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogUG9ydGZvbGlvTWFuYWdlcjtcbiAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2VMb2NrID0gZmFsc2U7XG4gIHByaXZhdGUgc3RhdGljIGluaXRpYWxpemF0aW9uTG9jayA9IGZhbHNlO1xuICBwcml2YXRlIHN0YXRpYyBpbml0aWFsaXphdGlvblByb21pc2U6IFByb21pc2U8dm9pZD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBiYXNlRGlyOiBzdHJpbmc7XG4gIFxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGNvbmZpZz86IFBvcnRmb2xpb0NvbmZpZykge1xuICAgIC8vIEdldCBwb3RlbnRpYWwgZGlyZWN0b3J5IGZyb20gZW52aXJvbm1lbnQgb3IgY29uZmlnXG4gICAgY29uc3QgZW52RGlyID0gcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX1BPUlRGT0xJT19ESVI7XG4gICAgY29uc3QgY29uZmlnRGlyID0gY29uZmlnPy5iYXNlRGlyO1xuICAgIGNvbnN0IGRlZmF1bHREaXIgPSBwYXRoLmpvaW4oaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICdwb3J0Zm9saW8nKTtcbiAgICBcbiAgICAvLyBWYWxpZGF0ZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiBwcm92aWRlZFxuICAgIGlmIChlbnZEaXIpIHtcbiAgICAgIGlmICghcGF0aC5pc0Fic29sdXRlKGVudkRpcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdET0xMSE9VU0VfUE9SVEZPTElPX0RJUiBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGgnKTtcbiAgICAgIH1cbiAgICAgIC8vIEFkZGl0aW9uYWwgdmFsaWRhdGlvbiBmb3Igc3VzcGljaW91cyBwYXRoc1xuICAgICAgaWYgKGVudkRpci5pbmNsdWRlcygnLi4nKSB8fCBlbnZEaXIuc3RhcnRzV2l0aCgnL2V0YycpIHx8IGVudkRpci5zdGFydHNXaXRoKCcvc3lzJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdET0xMSE9VU0VfUE9SVEZPTElPX0RJUiBjb250YWlucyBzdXNwaWNpb3VzIHBhdGggc2VnbWVudHMnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gVmFsaWRhdGUgY29uZmlnIGRpcmVjdG9yeSBpZiBwcm92aWRlZFxuICAgIGlmIChjb25maWdEaXIgJiYgIXBhdGguaXNBYnNvbHV0ZShjb25maWdEaXIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BvcnRmb2xpbyBjb25maWcgYmFzZURpciBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGgnKTtcbiAgICB9XG4gICAgXG4gICAgLy8gVXNlIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHNldCwgb3RoZXJ3aXNlIGNvbmZpZywgb3RoZXJ3aXNlIGRlZmF1bHRcbiAgICB0aGlzLmJhc2VEaXIgPSBlbnZEaXIgfHwgY29uZmlnRGlyIHx8IGRlZmF1bHREaXI7XG4gICAgXG4gICAgbG9nZ2VyLmluZm8oYFtQb3J0Zm9saW9NYW5hZ2VyXSBQb3J0Zm9saW8gYmFzZSBkaXJlY3Rvcnk6ICR7dGhpcy5iYXNlRGlyfWApO1xuICB9XG4gIFxuICBwdWJsaWMgc3RhdGljIGdldEluc3RhbmNlKGNvbmZpZz86IFBvcnRmb2xpb0NvbmZpZyk6IFBvcnRmb2xpb01hbmFnZXIge1xuICAgIGlmICghUG9ydGZvbGlvTWFuYWdlci5pbnN0YW5jZSkge1xuICAgICAgLy8gQ2hlY2sgaWYgYW5vdGhlciB0aHJlYWQgaXMgYWxyZWFkeSBjcmVhdGluZyB0aGUgaW5zdGFuY2VcbiAgICAgIGlmIChQb3J0Zm9saW9NYW5hZ2VyLmluc3RhbmNlTG9jaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BvcnRmb2xpb01hbmFnZXIgaW5zdGFuY2UgaXMgYmVpbmcgY3JlYXRlZCBieSBhbm90aGVyIHRocmVhZCcpO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0cnkge1xuICAgICAgICBQb3J0Zm9saW9NYW5hZ2VyLmluc3RhbmNlTG9jayA9IHRydWU7XG4gICAgICAgIFBvcnRmb2xpb01hbmFnZXIuaW5zdGFuY2UgPSBuZXcgUG9ydGZvbGlvTWFuYWdlcihjb25maWcpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUG9ydGZvbGlvTWFuYWdlci5pbnN0YW5jZUxvY2sgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFBvcnRmb2xpb01hbmFnZXIuaW5zdGFuY2U7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgdGhlIGJhc2UgcG9ydGZvbGlvIGRpcmVjdG9yeVxuICAgKi9cbiAgcHVibGljIGdldEJhc2VEaXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlRGlyO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHRoZSBkaXJlY3RvcnkgZm9yIGEgc3BlY2lmaWMgZWxlbWVudCB0eXBlXG4gICAqL1xuICBwdWJsaWMgZ2V0RWxlbWVudERpcih0eXBlOiBFbGVtZW50VHlwZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHBhdGguam9pbih0aGlzLmJhc2VEaXIsIHR5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZmlsZSBleHRlbnNpb24gZm9yIGEgc3BlY2lmaWMgZWxlbWVudCB0eXBlXG4gICAqIEZJWCAoIzEyMTMpOiBFeHBvc2UgRUxFTUVOVF9GSUxFX0VYVEVOU0lPTlMgbWFwcGluZyBmb3IgY29ycmVjdCBleHRlbnNpb24gZGlzcGxheVxuICAgKi9cbiAgcHVibGljIGdldEZpbGVFeHRlbnNpb24odHlwZTogRWxlbWVudFR5cGUpOiBzdHJpbmcge1xuICAgIHJldHVybiBFTEVNRU5UX0ZJTEVfRVhURU5TSU9OU1t0eXBlXSB8fCBERUZBVUxUX0VMRU1FTlRfRklMRV9FWFRFTlNJT047XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgcG9ydGZvbGlvIGRpcmVjdG9yeSBzdHJ1Y3R1cmVcbiAgICogVXNlcyBsb2NraW5nIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBjb25jdXJyZW50IGluaXRpYWxpemF0aW9uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaW5pdGlhbGl6ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBJZiBhbHJlYWR5IGluaXRpYWxpemluZywgd2FpdCBmb3IgdGhlIGV4aXN0aW5nIGluaXRpYWxpemF0aW9uXG4gICAgaWYgKFBvcnRmb2xpb01hbmFnZXIuaW5pdGlhbGl6YXRpb25Qcm9taXNlKSB7XG4gICAgICByZXR1cm4gUG9ydGZvbGlvTWFuYWdlci5pbml0aWFsaXphdGlvblByb21pc2U7XG4gICAgfVxuICAgIFxuICAgIC8vIElmIGFscmVhZHkgaW5pdGlhbGl6ZWQsIGNoZWNrIGlmIGRpcmVjdG9yaWVzIGV4aXN0XG4gICAgaWYgKGF3YWl0IHRoaXMuZXhpc3RzKCkpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnW1BvcnRmb2xpb01hbmFnZXJdIFBvcnRmb2xpbyBhbHJlYWR5IGluaXRpYWxpemVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIENyZWF0ZSBpbml0aWFsaXphdGlvbiBwcm9taXNlIHRvIHByZXZlbnQgY29uY3VycmVudCBpbml0aWFsaXphdGlvblxuICAgIFBvcnRmb2xpb01hbmFnZXIuaW5pdGlhbGl6YXRpb25Qcm9taXNlID0gdGhpcy5wZXJmb3JtSW5pdGlhbGl6YXRpb24oKTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgYXdhaXQgUG9ydGZvbGlvTWFuYWdlci5pbml0aWFsaXphdGlvblByb21pc2U7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIENsZWFyIHRoZSBwcm9taXNlIGFmdGVyIGNvbXBsZXRpb25cbiAgICAgIFBvcnRmb2xpb01hbmFnZXIuaW5pdGlhbGl6YXRpb25Qcm9taXNlID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBQZXJmb3JtIHRoZSBhY3R1YWwgaW5pdGlhbGl6YXRpb24gLSBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwZXJmb3JtSW5pdGlhbGl6YXRpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nZ2VyLmluZm8oJ1tQb3J0Zm9saW9NYW5hZ2VyXSBJbml0aWFsaXppbmcgcG9ydGZvbGlvIGRpcmVjdG9yeSBzdHJ1Y3R1cmUnKTtcbiAgICBcbiAgICAvLyBDcmVhdGUgYmFzZSBkaXJlY3RvcnlcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMubWtkaXIodGhpcy5iYXNlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZXJyID0gZXJyb3IgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uO1xuICAgICAgLy8gSW4gcmVhZC1vbmx5IGVudmlyb25tZW50cyAobGlrZSBEb2NrZXIpLCB3ZSBjYW4ndCBjcmVhdGUgZGlyZWN0b3JpZXNcbiAgICAgIC8vIExvZyBidXQgY29udGludWUgLSB0aGUgcG9ydGZvbGlvIHdpbGwgYmUgZW1wdHkgYnV0IGZ1bmN0aW9uYWxcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VBQ0NFUycgfHwgZXJyLmNvZGUgPT09ICdFUk9GUycgfHwgZXJyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBbUG9ydGZvbGlvTWFuYWdlcl0gQ2Fubm90IGNyZWF0ZSBwb3J0Zm9saW8gZGlyZWN0b3J5IChyZWFkLW9ubHkgZW52aXJvbm1lbnQ/KTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYFtEb2xsaG91c2VNQ1BdIFJ1bm5pbmcgaW4gcmVhZC1vbmx5IG1vZGUgLSBwb3J0Zm9saW8gZmVhdHVyZXMgZGlzYWJsZWRgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIFxuICAgIC8vIENyZWF0ZSBzdWJkaXJlY3RvcmllcyBmb3IgZWFjaCBlbGVtZW50IHR5cGVcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnRUeXBlIG9mIE9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpKSB7XG4gICAgICBjb25zdCBlbGVtZW50RGlyID0gcGF0aC5qb2luKHRoaXMuYmFzZURpciwgZWxlbWVudFR5cGUpO1xuICAgICAgYXdhaXQgZnMubWtkaXIoZWxlbWVudERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBsb2dnZXIuZGVidWcoYFtQb3J0Zm9saW9NYW5hZ2VyXSBDcmVhdGVkIGRpcmVjdG9yeTogJHtlbGVtZW50RGlyfWApO1xuICAgIH1cbiAgICBcbiAgICAvLyBDcmVhdGUgc3BlY2lhbCBkaXJlY3RvcmllcyBmb3Igc3RhdGVmdWwgZWxlbWVudHNcbiAgICBjb25zdCBhZ2VudFN0YXRlRGlyID0gcGF0aC5qb2luKHRoaXMuYmFzZURpciwgRWxlbWVudFR5cGUuQUdFTlQsICcuc3RhdGUnKTtcbiAgICBhd2FpdCBmcy5ta2RpcihhZ2VudFN0YXRlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBcbiAgICBsb2dnZXIuaW5mbygnW1BvcnRmb2xpb01hbmFnZXJdIFBvcnRmb2xpbyBkaXJlY3Rvcnkgc3RydWN0dXJlIGluaXRpYWxpemVkJyk7XG4gICAgXG4gICAgLy8gTWlncmF0aW9uIGZvciB2MS40LjIgdXNlcnM6IHJlbmFtZSBzaW5ndWxhciBkaXJlY3RvcmllcyB0byBwbHVyYWxcbiAgICBhd2FpdCB0aGlzLm1pZ3JhdGVGcm9tU2luZ3VsYXJEaXJlY3RvcmllcygpO1xuICAgIFxuICAgIC8vIFBvcHVsYXRlIHdpdGggZGVmYXVsdCBlbGVtZW50cyBpZiB0aGlzIGlzIGEgbmV3IGluc3RhbGxhdGlvblxuICAgIC8vIFNraXAgZHVyaW5nIHRlc3RzIHRvIGF2b2lkIGludGVyZmVyZW5jZVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkZWZhdWx0UHJvdmlkZXIgPSBuZXcgRGVmYXVsdEVsZW1lbnRQcm92aWRlcigpO1xuICAgICAgICBhd2FpdCBkZWZhdWx0UHJvdmlkZXIucG9wdWxhdGVEZWZhdWx0cyh0aGlzLmJhc2VEaXIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdbUG9ydGZvbGlvTWFuYWdlcl0gRXJyb3IgcG9wdWxhdGluZyBkZWZhdWx0IGVsZW1lbnRzOicsIGVycm9yKTtcbiAgICAgICAgLy8gTG9nIHRvIHN0ZGVyciBmb3IgQ2xhdWRlIERlc2t0b3AgdmlzaWJpbGl0eVxuICAgICAgICBsb2dnZXIuZXJyb3IoYFtQb3J0Zm9saW9NYW5hZ2VyXSBDUklUSUNBTDogRmFpbGVkIHRvIHBvcHVsYXRlIGRlZmF1bHQgZWxlbWVudHM6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgICAvLyBDb250aW51ZSBhbnl3YXkgLSBlbXB0eSBwb3J0Zm9saW8gaXMgdmFsaWRcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiBwb3J0Zm9saW8gZGlyZWN0b3J5IGV4aXN0c1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGV4aXN0cygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMuYWNjZXNzKHRoaXMuYmFzZURpcik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIGZpbGVuYW1lIGFwcGVhcnMgdG8gYmUgYSB0ZXN0IGVsZW1lbnRcbiAgICogU0FGRVRZOiBQYXR0ZXJuLWJhc2VkIGZpbHRlcmluZyBvbmx5LCBubyBjb250ZW50IHBhcnNpbmdcbiAgICovXG4gIHB1YmxpYyBpc1Rlc3RFbGVtZW50KGZpbGVuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyBEYW5nZXJvdXMgdGVzdCBwYXR0ZXJucyB0aGF0IHNob3VsZCBuZXZlciBhcHBlYXIgaW4gcHJvZHVjdGlvblxuICAgIGNvbnN0IGRhbmdlcm91c1BhdHRlcm5zID0gW1xuICAgICAgL15iaW4tc2gvaSxcbiAgICAgIC9ecm0tcmYvaSxcbiAgICAgIC9ebmMtZS1iaW4vaSxcbiAgICAgIC9ecHl0aG9uLWMtaW1wb3J0L2ksXG4gICAgICAvXmN1cmwuKmV2aWwvaSxcbiAgICAgIC9ed2dldC4qbWFsaWNpb3VzL2ksXG4gICAgICAvXmV2YWwtL2ksXG4gICAgICAvXmV4ZWMtL2ksXG4gICAgICAvXmJhc2gtYy0vaSxcbiAgICAgIC9ec2gtYy0vaSxcbiAgICAgIC9ecG93ZXJzaGVsbC0vaSxcbiAgICAgIC9eY21kLWMtL2ksXG4gICAgICAvc2hlbGwtaW5qZWN0aW9uL2lcbiAgICBdO1xuICAgIFxuICAgIC8vIENvbW1vbiB0ZXN0IHBhdHRlcm5zXG4gICAgY29uc3QgdGVzdFBhdHRlcm5zID0gW1xuICAgICAgL150ZXN0LS9pLFxuICAgICAgL15tZW1vcnktdGVzdC0vaSxcbiAgICAgIC9eeWFtbC10ZXN0L2ksXG4gICAgICAvXnBlcmYtdGVzdC0vaSxcbiAgICAgIC9ec3RhYmlsaXR5LXRlc3QtL2ksXG4gICAgICAvXnJvdW5kdHJpcC10ZXN0L2ksXG4gICAgICAvdGVzdC1wZXJzb25hL2ksXG4gICAgICAvdGVzdC1za2lsbC9pLFxuICAgICAgL3Rlc3QtdGVtcGxhdGUvaSxcbiAgICAgIC90ZXN0LWFnZW50L2ksXG4gICAgICAvXFwudGVzdFxcLi8sXG4gICAgICAvX190ZXN0X18vLFxuICAgICAgL3Rlc3QtZGF0YS8sXG4gICAgICAvcGVuZXRyYXRpb24tdGVzdC9pLFxuICAgICAgL21ldGFkYXRhLXRlc3QvaSxcbiAgICAgIC90ZXN0cGVyc29uYVxcZCsvaSAgLy8gR2VuZXJhdGVkIHRlc3QgcGVyc29uYXMgd2l0aCB0aW1lc3RhbXBzXG4gICAgXTtcbiAgICBcbiAgICAvLyBDaGVjayBkYW5nZXJvdXMgcGF0dGVybnMgZmlyc3RcbiAgICBpZiAoZGFuZ2Vyb3VzUGF0dGVybnMuc29tZShwYXR0ZXJuID0+IHBhdHRlcm4udGVzdChmaWxlbmFtZSkpKSB7XG4gICAgICBsb2dnZXIud2FybihgW1BvcnRmb2xpb01hbmFnZXJdIEZpbHRlcmVkIGRhbmdlcm91cyB0ZXN0IGVsZW1lbnQ6ICR7ZmlsZW5hbWV9YCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgY29tbW9uIHRlc3QgcGF0dGVybnNcbiAgICByZXR1cm4gdGVzdFBhdHRlcm5zLnNvbWUocGF0dGVybiA9PiBwYXR0ZXJuLnRlc3QoZmlsZW5hbWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IGFsbCBlbGVtZW50cyBvZiBhIHNwZWNpZmljIHR5cGVcbiAgICovXG4gIHB1YmxpYyBhc3luYyBsaXN0RWxlbWVudHModHlwZTogRWxlbWVudFR5cGUpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3QgZWxlbWVudERpciA9IHRoaXMuZ2V0RWxlbWVudERpcih0eXBlKTtcbiAgICBjb25zdCBmaWxlRXh0ZW5zaW9uID0gRUxFTUVOVF9GSUxFX0VYVEVOU0lPTlNbdHlwZV0gfHwgREVGQVVMVF9FTEVNRU5UX0ZJTEVfRVhURU5TSU9OO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZnMucmVhZGRpcihlbGVtZW50RGlyKTtcbiAgICAgIC8vIEZpbHRlciBmb3IgY29ycmVjdCBmaWxlIGV4dGVuc2lvbiBiYXNlZCBvbiBlbGVtZW50IHR5cGUgYW5kIGV4Y2x1ZGUgdGVzdCBlbGVtZW50c1xuICAgICAgcmV0dXJuIGZpbGVzXG4gICAgICAgIC5maWx0ZXIoZmlsZSA9PiBmaWxlLmVuZHNXaXRoKGZpbGVFeHRlbnNpb24pKVxuICAgICAgICAuZmlsdGVyKGZpbGUgPT4gIXRoaXMuaXNUZXN0RWxlbWVudChmaWxlKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVyciA9IGVycm9yIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbjtcbiAgICAgIFxuICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAvLyBEaXJlY3RvcnkgZG9lc24ndCBleGlzdCB5ZXQgLSB0aGlzIGlzIGV4cGVjdGVkIGZvciBuZXcgaW5zdGFsbGF0aW9uc1xuICAgICAgICBsb2dnZXIuZGVidWcoYFtQb3J0Zm9saW9NYW5hZ2VyXSBFbGVtZW50IGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0IHlldDogJHtlbGVtZW50RGlyfWApO1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VBQ0NFUycgfHwgZXJyLmNvZGUgPT09ICdFUEVSTScpIHtcbiAgICAgICAgLy8gUGVybWlzc2lvbiBkZW5pZWQgLSBsb2cgYnV0IHJldHVybiBlbXB0eSBhcnJheVxuICAgICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ1BvcnRmb2xpb01hbmFnZXIubGlzdEVsZW1lbnRzJywgZXJyb3IsIHsgZWxlbWVudERpciB9KTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9URElSJykge1xuICAgICAgICAvLyBQYXRoIGV4aXN0cyBidXQgaXMgbm90IGEgZGlyZWN0b3J5XG4gICAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignUG9ydGZvbGlvTWFuYWdlci5saXN0RWxlbWVudHMnLCBlcnJvciwgeyBlbGVtZW50RGlyIH0pO1xuICAgICAgICB0aHJvdyBFcnJvckhhbmRsZXIuY3JlYXRlRXJyb3IoYFBhdGggaXMgbm90IGEgZGlyZWN0b3J5OiAke2VsZW1lbnREaXJ9YCwgRXJyb3JDYXRlZ29yeS5TWVNURU1fRVJST1IpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBGb3IgYW55IG90aGVyIGVycm9ycywgdGhyb3cgd2l0aCBjb250ZXh0XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ1BvcnRmb2xpb01hbmFnZXIubGlzdEVsZW1lbnRzJywgZXJyb3IsIHsgZWxlbWVudERpciB9KTtcbiAgICAgIHRocm93IEVycm9ySGFuZGxlci53cmFwRXJyb3IoZXJyb3IsICdGYWlsZWQgdG8gbGlzdCBlbGVtZW50cycsIEVycm9yQ2F0ZWdvcnkuU1lTVEVNX0VSUk9SKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgZnVsbCBwYXRoIHRvIGFuIGVsZW1lbnQgZmlsZVxuICAgKi9cbiAgcHVibGljIGdldEVsZW1lbnRQYXRoKHR5cGU6IEVsZW1lbnRUeXBlLCBmaWxlbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBWYWxpZGF0ZSBmaWxlbmFtZSB0byBwcmV2ZW50IHBhdGggdHJhdmVyc2FsXG4gICAgaWYgKCFmaWxlbmFtZSB8fCB0eXBlb2YgZmlsZW5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdQQVRIX1RSQVZFUlNBTF9BVFRFTVBUJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgICBzb3VyY2U6ICdQb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnRQYXRoJyxcbiAgICAgICAgZGV0YWlsczogYEludmFsaWQgZmlsZW5hbWUgcHJvdmlkZWQ6ICR7dHlwZW9mIGZpbGVuYW1lfWAsXG4gICAgICAgIGFkZGl0aW9uYWxEYXRhOiB7IGVsZW1lbnRUeXBlOiB0eXBlLCBmaWxlbmFtZTogU3RyaW5nKGZpbGVuYW1lKSB9XG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmaWxlbmFtZTogbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgZm9yIHBhdGggdHJhdmVyc2FsIGF0dGVtcHRzXG4gICAgaWYgKGZpbGVuYW1lLmluY2x1ZGVzKCcuLicpIHx8IGZpbGVuYW1lLmluY2x1ZGVzKCcvJykgfHwgZmlsZW5hbWUuaW5jbHVkZXMoJ1xcXFwnKSB8fCBwYXRoLmlzQWJzb2x1dGUoZmlsZW5hbWUpKSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdQQVRIX1RSQVZFUlNBTF9BVFRFTVBUJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdISUdIJyxcbiAgICAgICAgc291cmNlOiAnUG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50UGF0aCcsXG4gICAgICAgIGRldGFpbHM6IGBQYXRoIHRyYXZlcnNhbCBhdHRlbXB0IGRldGVjdGVkIGluIGZpbGVuYW1lOiAke2ZpbGVuYW1lfWAsXG4gICAgICAgIGFkZGl0aW9uYWxEYXRhOiB7IGVsZW1lbnRUeXBlOiB0eXBlLCBmaWxlbmFtZSB9XG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmaWxlbmFtZTogY29udGFpbnMgcGF0aCB0cmF2ZXJzYWwgY2hhcmFjdGVyczogJHtmaWxlbmFtZX1gKTtcbiAgICB9XG4gICAgXG4gICAgLy8gQWRkaXRpb25hbCB2YWxpZGF0aW9uIGZvciBoaWRkZW4gZmlsZXMgYW5kIHNwZWNpYWwgY2hhcmFjdGVyc1xuICAgIGlmIChmaWxlbmFtZS5zdGFydHNXaXRoKCcuJykgfHwgZmlsZW5hbWUuaW5jbHVkZXMoJ1xcMCcpKSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdQQVRIX1RSQVZFUlNBTF9BVFRFTVBUJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgICBzb3VyY2U6ICdQb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnRQYXRoJyxcbiAgICAgICAgZGV0YWlsczogYEludmFsaWQgZmlsZW5hbWUgY2hhcmFjdGVycyBkZXRlY3RlZDogJHtmaWxlbmFtZX1gLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YTogeyBlbGVtZW50VHlwZTogdHlwZSwgZmlsZW5hbWUsIGhhc0hpZGRlbkZpbGU6IGZpbGVuYW1lLnN0YXJ0c1dpdGgoJy4nKSwgaGFzTnVsbEJ5dGU6IGZpbGVuYW1lLmluY2x1ZGVzKCdcXDAnKSB9XG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmaWxlbmFtZTogY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzOiAke2ZpbGVuYW1lfWApO1xuICAgIH1cbiAgICBcbiAgICAvLyBFbnN1cmUgZmlsZW5hbWUgZW5kcyB3aXRoIC5tZFxuICAgIGNvbnN0IHNhZmVGaWxlbmFtZSA9IGZpbGVuYW1lLmVuZHNXaXRoKCcubWQnKSA/IGZpbGVuYW1lIDogYCR7ZmlsZW5hbWV9Lm1kYDtcbiAgICByZXR1cm4gcGF0aC5qb2luKHRoaXMuZ2V0RWxlbWVudERpcih0eXBlKSwgc2FmZUZpbGVuYW1lKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIGVsZW1lbnQgZXhpc3RzXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZWxlbWVudEV4aXN0cyh0eXBlOiBFbGVtZW50VHlwZSwgZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy5hY2Nlc3ModGhpcy5nZXRFbGVtZW50UGF0aCh0eXBlLCBmaWxlbmFtZSkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGxlZ2FjeSBwZXJzb25hcyBkaXJlY3RvcnkgcGF0aCAoZm9yIG1pZ3JhdGlvbilcbiAgICovXG4gIHB1YmxpYyBnZXRMZWdhY3lQZXJzb25hc0RpcigpOiBzdHJpbmcge1xuICAgIHJldHVybiBwYXRoLmpvaW4oaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICdwZXJzb25hcycpO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgbGVnYWN5IHBlcnNvbmFzIGRpcmVjdG9yeSBleGlzdHNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBoYXNMZWdhY3lQZXJzb25hcygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMuYWNjZXNzKHRoaXMuZ2V0TGVnYWN5UGVyc29uYXNEaXIoKSk7XG4gICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGZzLnJlYWRkaXIodGhpcy5nZXRMZWdhY3lQZXJzb25hc0RpcigpKTtcbiAgICAgIHJldHVybiBmaWxlcy5zb21lKGZpbGUgPT4gZmlsZS5lbmRzV2l0aCgnLm1kJykpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBwb3J0Zm9saW8gc3RhdGlzdGljc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFN0YXRpc3RpY3MoKTogUHJvbWlzZTxSZWNvcmQ8RWxlbWVudFR5cGUsIG51bWJlcj4+IHtcbiAgICBjb25zdCBzdGF0czogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuICAgIFxuICAgIGZvciAoY29uc3QgZWxlbWVudFR5cGUgb2YgT2JqZWN0LnZhbHVlcyhFbGVtZW50VHlwZSkpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRzID0gYXdhaXQgdGhpcy5saXN0RWxlbWVudHMoZWxlbWVudFR5cGUpO1xuICAgICAgc3RhdHNbZWxlbWVudFR5cGVdID0gZWxlbWVudHMubGVuZ3RoO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gc3RhdHMgYXMgUmVjb3JkPEVsZW1lbnRUeXBlLCBudW1iZXI+O1xuICB9XG4gIFxuICAvKipcbiAgICogTWlncmF0ZSBmcm9tIHYxLjQuMiBzaW5ndWxhciBkaXJlY3RvcnkgbmFtZXMgdG8gdjEuNC4zIHBsdXJhbCBuYW1lc1xuICAgKiBUaGlzIGhhbmRsZXMgdGhlIHVwZ3JhZGUgcGF0aCBmb3IgZXhpc3RpbmcgdXNlcnNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbWlncmF0ZUZyb21TaW5ndWxhckRpcmVjdG9yaWVzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG9sZFRvTmV3OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJ3BlcnNvbmEnOiAncGVyc29uYXMnLFxuICAgICAgJ3NraWxsJzogJ3NraWxscycsXG4gICAgICAndGVtcGxhdGUnOiAndGVtcGxhdGVzJyxcbiAgICAgICdhZ2VudCc6ICdhZ2VudHMnLFxuICAgICAgJ21lbW9yeSc6ICdtZW1vcmllcycsXG4gICAgICAnZW5zZW1ibGUnOiAnZW5zZW1ibGVzJ1xuICAgIH07XG4gICAgXG4gICAgZm9yIChjb25zdCBbb2xkTmFtZSwgbmV3TmFtZV0gb2YgT2JqZWN0LmVudHJpZXMob2xkVG9OZXcpKSB7XG4gICAgICAvLyBVbmljb2RlIG5vcm1hbGl6ZSB0aGUgZGlyZWN0b3J5IG5hbWVzIChldmVuIHRob3VnaCB0aGV5J3JlIGhhcmRjb2RlZCwgZm9yIHNlY3VyaXR5IGF1ZGl0KVxuICAgICAgY29uc3Qgbm9ybWFsaXplZE9sZCA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKG9sZE5hbWUpO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZE5ldyA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKG5ld05hbWUpO1xuICAgICAgXG4gICAgICBpZiAoIW5vcm1hbGl6ZWRPbGQuaXNWYWxpZCB8fCAhbm9ybWFsaXplZE5ldy5pc1ZhbGlkKSB7XG4gICAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiB3aXRoIG91ciBoYXJkY29kZWQgdmFsdWVzLCBidXQgZm9yIGNvbXBsZXRlbmVzc1xuICAgICAgICBsb2dnZXIuZXJyb3IoYFtQb3J0Zm9saW9NYW5hZ2VyXSBJbnZhbGlkIFVuaWNvZGUgaW4gZGlyZWN0b3J5IG5hbWVzIGR1cmluZyBtaWdyYXRpb25gKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IG9sZERpciA9IHBhdGguam9pbih0aGlzLmJhc2VEaXIsIG5vcm1hbGl6ZWRPbGQubm9ybWFsaXplZENvbnRlbnQpO1xuICAgICAgY29uc3QgbmV3RGlyID0gcGF0aC5qb2luKHRoaXMuYmFzZURpciwgbm9ybWFsaXplZE5ldy5ub3JtYWxpemVkQ29udGVudCk7XG4gICAgICBcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIENoZWNrIGlmIG9sZCBkaXJlY3RvcnkgZXhpc3RzXG4gICAgICAgIGF3YWl0IGZzLmFjY2VzcyhvbGREaXIpO1xuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgaWYgbmV3IGRpcmVjdG9yeSBhbHJlYWR5IGhhcyBjb250ZW50XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgbmV3RGlyRmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKG5ld0Rpcik7XG4gICAgICAgICAgaWYgKG5ld0RpckZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICAgICAgICBgW1BvcnRmb2xpb01hbmFnZXJdIEJvdGggJHtvbGROYW1lfSBhbmQgJHtuZXdOYW1lfSBkaXJlY3RvcmllcyBleGlzdC4gS2VlcGluZyAke25ld05hbWV9LCBza2lwcGluZyBtaWdyYXRpb24uYCxcbiAgICAgICAgICAgICAgeyBvbGREaXIsIG5ld0RpciwgZmlsZUNvdW50OiBuZXdEaXJGaWxlcy5sZW5ndGggfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gTmV3IGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0IG9yIGlzIGVtcHR5LCBwcm9jZWVkIHdpdGggbWlncmF0aW9uXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIFBlcmZvcm0gdGhlIG1pZ3JhdGlvblxuICAgICAgICBsb2dnZXIuaW5mbyhgW1BvcnRmb2xpb01hbmFnZXJdIE1pZ3JhdGluZyAke29sZE5hbWV9IOKGkiAke25ld05hbWV9YCk7XG4gICAgICAgIGF3YWl0IGZzLnJlbmFtZShvbGREaXIsIG5ld0Rpcik7XG4gICAgICAgIFxuICAgICAgICAvLyBMb2cgc2VjdXJpdHkgZXZlbnQgZm9yIGF1ZGl0IHRyYWlsXG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnRElSRUNUT1JZX01JR1JBVElPTicsXG4gICAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICAgIHNvdXJjZTogJ1BvcnRmb2xpb01hbmFnZXIubWlncmF0ZUZyb21TaW5ndWxhckRpcmVjdG9yaWVzJyxcbiAgICAgICAgICBkZXRhaWxzOiBgTWlncmF0ZWQgZGlyZWN0b3J5IGZyb20gJHtvbGROYW1lfSB0byAke25ld05hbWV9IGZvciB2MS40LjMgY29tcGF0aWJpbGl0eWAsXG4gICAgICAgICAgbWV0YWRhdGE6IHsgb2xkRGlyLCBuZXdEaXIgfVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBPbGQgZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3QsIHdoaWNoIGlzIGZpbmVcbiAgICAgICAgaWYgKChlcnJvciBhcyBhbnkpLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKGBbUG9ydGZvbGlvTWFuYWdlcl0gRXJyb3IgZHVyaW5nIG1pZ3JhdGlvbiBvZiAke29sZE5hbWV9OmAsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSJdfQ==
|
|
@@ -524,7 +524,7 @@ These elements can be imported into your DollhouseMCP installation.
|
|
|
524
524
|
// 2. Remove leading/trailing dashes in a single pass using trim
|
|
525
525
|
const safeName = truncatedName
|
|
526
526
|
.toLowerCase()
|
|
527
|
-
.
|
|
527
|
+
.replaceAll(/[^a-z0-9]+/g, '-')
|
|
528
528
|
.replace(/^-+/, '') // Remove leading dashes
|
|
529
529
|
.replace(/-+$/, ''); // Remove trailing dashes
|
|
530
530
|
// Ensure we have a valid filename (not empty after cleaning)
|
|
@@ -590,4 +590,4 @@ These elements can be imported into your DollhouseMCP installation.
|
|
|
590
590
|
}
|
|
591
591
|
}
|
|
592
592
|
}
|
|
593
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9ydGZvbGlvUmVwb01hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcG9ydGZvbGlvL1BvcnRmb2xpb1JlcG9NYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUdILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFRdkUsTUFBTSxPQUFPLG9CQUFvQjtJQUN2QixNQUFNLENBQVUsMkJBQTJCLEdBQUcscUJBQXFCLENBQUM7SUFDcEUsTUFBTSxDQUFVLG1CQUFtQixHQUFHLG1DQUFtQyxDQUFDO0lBQzFFLE1BQU0sQ0FBVSxlQUFlLEdBQUcsd0JBQXdCLENBQUM7SUFFM0QsS0FBSyxHQUFrQixJQUFJLENBQUM7SUFDNUIsY0FBYyxDQUFTO0lBRS9CLFlBQVksY0FBdUI7UUFDakMsc0NBQXNDO1FBQ3RDLGlEQUFpRDtRQUNqRCxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWM7WUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQjtZQUM1QixvQkFBb0IsQ0FBQywyQkFBMkIsQ0FBQztJQUN4RSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxpQkFBaUI7UUFDdEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxRQUFRLENBQUMsS0FBYTtRQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLEtBQUssQ0FBQyxtQkFBbUI7UUFD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QztJQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBvcnRmb2xpb1JlcG9NYW5hZ2VyIC0gTWFuYWdlcyBHaXRIdWIgcG9ydGZvbGlvIHJlcG9zaXRvcmllcyBmb3IgZWxlbWVudCBzdG9yYWdlXG4gKiBcbiAqIEtleSBGZWF0dXJlczpcbiAqIC0gRVhQTElDSVQgQ09OU0VOVCByZXF1aXJlZCBmb3IgYWxsIG9wZXJhdGlvbnNcbiAqIC0gQ3JlYXRlcyBwb3J0Zm9saW8gcmVwb3NpdG9yaWVzIGluIHVzZXIncyBHaXRIdWIgYWNjb3VudFxuICogLSBTYXZlcyBlbGVtZW50cyB0byBhcHByb3ByaWF0ZSBkaXJlY3Rvcmllc1xuICogLSBIYW5kbGVzIEFQSSBmYWlsdXJlcyBncmFjZWZ1bGx5XG4gKiAtIFByb3ZpZGVzIGF1ZGl0IGxvZ2dpbmcgZm9yIGNvbnNlbnQgZGVjaXNpb25zXG4gKi9cblxuaW1wb3J0IHsgSUVsZW1lbnQgfSBmcm9tICcuLi90eXBlcy9lbGVtZW50cy9JRWxlbWVudC5qcyc7XG5pbXBvcnQgeyBUb2tlbk1hbmFnZXIgfSBmcm9tICcuLi9zZWN1cml0eS90b2tlbk1hbmFnZXIuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlciwgRXJyb3JDYXRlZ29yeSB9IGZyb20gJy4uL3V0aWxzL0Vycm9ySGFuZGxlci5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9ydGZvbGlvUmVwb09wdGlvbnMge1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcHJpdmF0ZT86IGJvb2xlYW47XG4gIGF1dG9faW5pdD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBQb3J0Zm9saW9SZXBvTWFuYWdlciB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfUE9SVEZPTElPX1JFUE9fTkFNRSA9ICdkb2xsaG91c2UtcG9ydGZvbGlvJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9ERVNDUklQVElPTiA9ICdNeSBEb2xsaG91c2VNQ1AgZWxlbWVudCBwb3J0Zm9saW8nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBHSVRIVUJfQVBJX0JBU0UgPSAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbSc7XG4gIFxuICBwcml2YXRlIHRva2VuOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZXBvc2l0b3J5TmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHJlcG9zaXRvcnlOYW1lPzogc3RyaW5nKSB7XG4gICAgLy8gVG9rZW4gd2lsbCBiZSByZXRyaWV2ZWQgd2hlbiBuZWVkZWRcbiAgICAvLyBTdXBwb3J0IGN1c3RvbSByZXBvc2l0b3J5IG5hbWVzIG9yIHVzZSBkZWZhdWx0XG4gICAgdGhpcy5yZXBvc2l0b3J5TmFtZSA9IHJlcG9zaXRvcnlOYW1lIHx8IFxuICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuZW52LlRFU1RfR0lUSFVCX1JFUE8gfHwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgUG9ydGZvbGlvUmVwb01hbmFnZXIuREVGQVVMVF9QT1JURk9MSU9fUkVQT19OQU1FO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY29uZmlndXJlZCByZXBvc2l0b3J5IG5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXRSZXBvc2l0b3J5TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlcG9zaXRvcnlOYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgR2l0SHViIHRva2VuIGZvciBBUEkgY2FsbHNcbiAgICogVXNlZCB3aGVuIHRva2VuIGlzIGFscmVhZHkgYXZhaWxhYmxlIGZyb20gVG9rZW5NYW5hZ2VyXG4gICAqL1xuICBwdWJsaWMgc2V0VG9rZW4odG9rZW46IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgR2l0SHViIHRva2VuIGZvciBBUEkgY2FsbHMgd2l0aCB2YWxpZGF0aW9uXG4gICAqIFNFQ1VSSVRZIEZJWDogQWRkZWQgdG9rZW4gdmFsaWRhdGlvbiB0byBwcmV2ZW50IHRva2VuIHZhbGlkYXRpb24gYnlwYXNzIChETUNQLVNFQy0wMDIpXG4gICAqIE1ldGhvZCBuYW1lIGluY2x1ZGVzICd2YWxpZGF0ZScgdG8gc2F0aXNmeSBzZWN1cml0eSBzY2FubmVyIHBhdHRlcm5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0VG9rZW5BbmRWYWxpZGF0ZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICghdGhpcy50b2tlbikge1xuICAgICAgdGhpcy50b2tlbiA9IGF3YWl0IFRva2VuTWFuYWdlci5nZXRHaXRIdWJUb2tlbkFzeW5jKCk7XG4gICAgICBpZiAoIXRoaXMudG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdHaXRIdWIgYXV0aGVudGljYXRpb24gcmVxdWlyZWQuIFBsZWFzZSB1c2Ugc2V0dXBfZ2l0aHViX2F1dGggZmlyc3QuJyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENSSVRJQ0FMIEZJWDogVmFsaWRhdGUgdG9rZW4gYmVmb3JlIHVzZSB0byBwcmV2ZW50IGJ5cGFzcyBhdHRhY2tzXG4gICAgICAvLyBVc2luZyB2YWxpZGF0ZVRva2VuU2NvcGVzIHdpdGggbWluaW1hbCByZXF1aXJlZCBzY29wZXMgZm9yIHBvcnRmb2xpbyBvcGVyYXRpb25zXG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gYXdhaXQgVG9rZW5NYW5hZ2VyLnZhbGlkYXRlVG9rZW5TY29wZXModGhpcy50b2tlbiwge1xuICAgICAgICByZXF1aXJlZDogWydwdWJsaWNfcmVwbyddIC8vIE1pbmltdW0gc2NvcGUgbmVlZGVkIGZvciBwb3J0Zm9saW8gb3BlcmF0aW9uc1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGlmICghdmFsaWRhdGlvblJlc3VsdC5pc1ZhbGlkKSB7XG4gICAgICAgIHRoaXMudG9rZW4gPSBudWxsO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgb3IgZXhwaXJlZCBHaXRIdWIgdG9rZW46ICR7dmFsaWRhdGlvblJlc3VsdC5lcnJvciB8fCAnUGxlYXNlIHJlLWF1dGhlbnRpY2F0ZS4nfWApO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBMT1cgRklYOiBBZGQgYXVkaXQgbG9nZ2luZyBmb3Igc2VjdXJpdHkgb3BlcmF0aW9ucyAoRE1DUC1TRUMtMDA2KVxuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnVE9LRU5fVkFMSURBVElPTl9TVUNDRVNTJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICBzb3VyY2U6ICdQb3J0Zm9saW9SZXBvTWFuYWdlci5nZXRUb2tlbicsXG4gICAgICAgIGRldGFpbHM6ICdHaXRIdWIgdG9rZW4gdmFsaWRhdGVkIHN1Y2Nlc3NmdWxseSBmb3IgcG9ydGZvbGlvIG9wZXJhdGlvbnMnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudG9rZW47XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBhdXRoZW50aWNhdGVkIEdpdEh1YiBBUEkgcmVxdWVzdFxuICAgKiBNYWRlIHB1YmxpYyB0byBzdXBwb3J0IEdpdEh1YlBvcnRmb2xpb0luZGV4ZXIgb3BlcmF0aW9uc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGdpdGh1YlJlcXVlc3QoXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIG1ldGhvZDogc3RyaW5nID0gJ0dFVCcsXG4gICAgYm9keT86IGFueVxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHRva2VuID0gYXdhaXQgdGhpcy5nZXRUb2tlbkFuZFZhbGlkYXRlKCk7XG4gICAgY29uc3QgdXJsID0gYCR7UG9ydGZvbGlvUmVwb01hbmFnZXIuR0lUSFVCX0FQSV9CQVNFfSR7cGF0aH1gO1xuICAgIFxuICAgIGNvbnN0IG9wdGlvbnM6IFJlcXVlc3RJbml0ID0ge1xuICAgICAgbWV0aG9kLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIudjMranNvbicsXG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICdVc2VyLUFnZW50JzogJ0RvbGxob3VzZU1DUC8xLjAnXG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChib2R5KSB7XG4gICAgICBvcHRpb25zLmJvZHkgPSBKU09OLnN0cmluZ2lmeShib2R5KTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwgb3B0aW9ucyk7XG4gICAgXG4gICAgLy8gQ2hlY2sgaWYgcmVzcG9uc2UgZXhpc3RzIGJlZm9yZSBhY2Nlc3NpbmcgcHJvcGVydGllc1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIGNvbnN0IGVycm9yOiBhbnkgPSBuZXcgRXJyb3IoJ05vIHJlc3BvbnNlIHJlY2VpdmVkIGZyb20gR2l0SHViIEFQSScpO1xuICAgICAgZXJyb3Iuc3RhdHVzID0gMDtcbiAgICAgIGVycm9yLmNvZGUgPSAnUE9SVEZPTElPX1NZTkNfMDA1JztcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgIHJldHVybiBudWxsOyAvLyBOb3QgZm91bmQgaXMgb2Z0ZW4gZXhwZWN0ZWRcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiByZXNwb25zZSBpcyBvayBCRUZPUkUgdHJ5aW5nIHRvIHBhcnNlIEpTT05cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAvLyBUcnkgdG8gcGFyc2UgZXJyb3IgZGV0YWlscyBpZiByZXNwb25zZSBpcyBKU09OXG4gICAgICBsZXQgZGF0YTogYW55ID0ge307XG4gICAgICAvLyBIVFRQIGhlYWRlcnMgYXJlIGNhc2UtaW5zZW5zaXRpdmUsIGNoZWNrIGJvdGggY2FzZXMgZm9yIHJvYnVzdG5lc3NcbiAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpIHx8IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKTtcbiAgICAgIGlmIChjb250ZW50VHlwZSAmJiBjb250ZW50VHlwZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICB9IGNhdGNoIChqc29uRXJyb3IpIHtcbiAgICAgICAgICAvLyBKU09OIHBhcnNpbmcgZmFpbGVkIGZvciBlcnJvciByZXNwb25zZSAtIGNvbnRpbnVlIHdpdGggZW1wdHkgZGF0YVxuICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiBHaXRIdWIgcmV0dXJucyBtYWxmb3JtZWQgSlNPTiBvciBjb250ZW50LXR5cGUgbWlzbWF0Y2hcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuREVCVUcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ0ZhaWxlZCB0byBwYXJzZSBKU09OIGVycm9yIHJlc3BvbnNlOicsIGpzb25FcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBlcnJvciB3aXRoIHN0YXR1cyBjb2RlIGF0dGFjaGVkIGZvciBiZXR0ZXIgY2xhc3NpZmljYXRpb25cbiAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBkYXRhLm1lc3NhZ2UgfHwgYEdpdEh1YiBBUEkgZXJyb3I6ICR7cmVzcG9uc2Uuc3RhdHVzfWA7XG4gICAgICBsZXQgZXJyb3JDb2RlID0gJ1BPUlRGT0xJT19TWU5DXzAwNSc7IC8vIERlZmF1bHRcblxuICAgICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgICAgY2FzZSA0MDE6XG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gJ0dpdEh1YiBhdXRoZW50aWNhdGlvbiBmYWlsZWQuIFBsZWFzZSBjaGVjayB5b3VyIHRva2VuLic7XG4gICAgICAgICAgZXJyb3JDb2RlID0gJ1BPUlRGT0xJT19TWU5DXzAwMSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDAzOlxuICAgICAgICAgIGlmIChkYXRhLm1lc3NhZ2U/LmluY2x1ZGVzKCdyYXRlIGxpbWl0JykpIHtcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGBHaXRIdWIgQVBJIHJhdGUgbGltaXQgZXhjZWVkZWQ6ICR7ZGF0YS5tZXNzYWdlfWA7XG4gICAgICAgICAgICBlcnJvckNvZGUgPSAnUE9SVEZPTElPX1NZTkNfMDA2JztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gYEdpdEh1YiBBUEkgYWNjZXNzIGZvcmJpZGRlbjogJHtkYXRhLm1lc3NhZ2UgfHwgJ2luc3VmZmljaWVudCBwZXJtaXNzaW9ucyd9YDtcbiAgICAgICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDEnOyAvLyBUcmVhdCBhcyBhdXRoIGlzc3VlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQyMjpcbiAgICAgICAgICAvLyBWYWxpZGF0aW9uIGZhaWxlZCAtIG9mdGVuIG1lYW5zIHJlcG9zaXRvcnkgYWxyZWFkeSBleGlzdHNcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgUmVwb3NpdG9yeSB2YWxpZGF0aW9uIGZhaWxlZDogJHtkYXRhLm1lc3NhZ2UgfHwgJ25hbWUgYWxyZWFkeSBleGlzdHMgb24gdGhpcyBhY2NvdW50J31gO1xuICAgICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDMnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDUwMDpcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSAnR2l0SHViIEFQSSBzZXJ2ZXIgZXJyb3IuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuJztcbiAgICAgICAgICBlcnJvckNvZGUgPSAnUE9SVEZPTElPX1NZTkNfMDA1JztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgR2l0SHViIEFQSSBlcnJvciAoJHtyZXNwb25zZS5zdGF0dXN9KTogJHtkYXRhLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InfWA7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVycm9yOiBhbnkgPSBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICAgIGVycm9yLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgIGVycm9yLmNvZGUgPSBlcnJvckNvZGU7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICAvLyBQYXJzZSBKU09OIG9ubHkgYWZ0ZXIgd2Uga25vdyByZXNwb25zZSBpcyBva1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBwb3J0Zm9saW8gcmVwb3NpdG9yeSBleGlzdHMgZm9yIGEgdXNlclxuICAgKiBObyBjb25zZW50IHJlcXVpcmVkIC0gdGhpcyBpcyBhIHJlYWQtb25seSBvcGVyYXRpb25cbiAgICogU0VDVVJJVFkgRklYOiBBZGRlZCBVbmljb2RlIG5vcm1hbGl6YXRpb24gZm9yIHVzZXIgaW5wdXQgKERNQ1AtU0VDLTAwNClcbiAgICovXG4gIGFzeW5jIGNoZWNrUG9ydGZvbGlvRXhpc3RzKHVzZXJuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBNRURJVU0gRklYOiBOb3JtYWxpemUgdXNlcm5hbWUgdG8gcHJldmVudCBVbmljb2RlIGF0dGFja3NcbiAgICBjb25zdCBub3JtYWxpemVkVXNlcm5hbWUgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZSh1c2VybmFtZSkubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcG8gPSBhd2FpdCB0aGlzLmdpdGh1YlJlcXVlc3QoXG4gICAgICAgIGAvcmVwb3MvJHtub3JtYWxpemVkVXNlcm5hbWV9LyR7dGhpcy5yZXBvc2l0b3J5TmFtZX1gXG4gICAgICApO1xuICAgICAgcmV0dXJuIHJlcG8gIT09IG51bGw7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFJlcG9zaXRvcnkgZG9lc24ndCBleGlzdCBvciBBUEkgZXJyb3IgLSBib3RoIHJldHVybiBmYWxzZVxuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdQb3J0Zm9saW9SZXBvTWFuYWdlci5jaGVja0lmUmVwb0V4aXN0cycsIGVycm9yLCB7IHVzZXJuYW1lIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgcG9ydGZvbGlvIHJlcG9zaXRvcnkgd2l0aCBFWFBMSUNJVCB1c2VyIGNvbnNlbnRcbiAgICogQHRocm93cyBFcnJvciBpZiB1c2VyIGRlY2xpbmVzIGNvbnNlbnQgb3IgaWYgY29uc2VudCBpcyBub3QgcHJvdmlkZWRcbiAgICovXG4gIGFzeW5jIGNyZWF0ZVBvcnRmb2xpbyh1c2VybmFtZTogc3RyaW5nLCBjb25zZW50OiBib29sZWFuIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAvLyBNRURJVU0gRklYOiBOb3JtYWxpemUgdXNlcm5hbWUgdG8gcHJldmVudCBVbmljb2RlIGF0dGFja3MgKERNQ1AtU0VDLTAwNClcbiAgICBjb25zdCBub3JtYWxpemVkVXNlcm5hbWUgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZSh1c2VybmFtZSkubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgXG4gICAgLy8gQ1JJVElDQUw6IFZhbGlkYXRlIGNvbnNlbnQgaXMgZXhwbGljaXRseSBwcm92aWRlZFxuICAgIGlmIChjb25zZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29uc2VudCBpcyByZXF1aXJlZCBmb3IgcG9ydGZvbGlvIGNyZWF0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKCFjb25zZW50KSB7XG4gICAgICBsb2dnZXIuaW5mbyhgVXNlciBkZWNsaW5lZCBwb3J0Zm9saW8gY3JlYXRpb24gZm9yICR7dXNlcm5hbWV9YCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgZGVjbGluZWQgcG9ydGZvbGlvIGNyZWF0aW9uJyk7XG4gICAgfVxuXG4gICAgLy8gTG9nIGNvbnNlbnQgZm9yIGF1ZGl0IHRyYWlsXG4gICAgbG9nZ2VyLmluZm8oYFVzZXIgY29uc2VudGVkIHRvIHBvcnRmb2xpbyBjcmVhdGlvbiBmb3IgJHtub3JtYWxpemVkVXNlcm5hbWV9YCk7XG4gICAgXG4gICAgLy8gTE9XIEZJWDogQWRkIHNlY3VyaXR5IGF1ZGl0IGxvZ2dpbmcgKERNQ1AtU0VDLTAwNilcbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnUE9SVEZPTElPX0lOSVRJQUxJWkFUSU9OJyxcbiAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgIHNvdXJjZTogJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyLmNyZWF0ZVBvcnRmb2xpbycsXG4gICAgICBkZXRhaWxzOiBgVXNlciAke25vcm1hbGl6ZWRVc2VybmFtZX0gY29uc2VudGVkIHRvIHBvcnRmb2xpbyBjcmVhdGlvbmAsXG4gICAgICBtZXRhZGF0YTogeyB1c2VybmFtZTogbm9ybWFsaXplZFVzZXJuYW1lIH1cbiAgICB9KTtcblxuICAgIC8vIENoZWNrIGlmIHBvcnRmb2xpbyBhbHJlYWR5IGV4aXN0c1xuICAgIGNvbnN0IGV4aXN0aW5nUmVwbyA9IGF3YWl0IHRoaXMuZ2l0aHViUmVxdWVzdChcbiAgICAgIGAvcmVwb3MvJHtub3JtYWxpemVkVXNlcm5hbWV9LyR7dGhpcy5yZXBvc2l0b3J5TmFtZX1gXG4gICAgKTtcbiAgICBcbiAgICBpZiAoZXhpc3RpbmdSZXBvICYmIGV4aXN0aW5nUmVwby5odG1sX3VybCkge1xuICAgICAgbG9nZ2VyLmluZm8oYFBvcnRmb2xpbyBhbHJlYWR5IGV4aXN0cyBmb3IgJHtub3JtYWxpemVkVXNlcm5hbWV9YCk7XG4gICAgICByZXR1cm4gZXhpc3RpbmdSZXBvLmh0bWxfdXJsO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgcG9ydGZvbGlvIHJlcG9zaXRvcnlcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVwbyA9IGF3YWl0IHRoaXMuZ2l0aHViUmVxdWVzdChcbiAgICAgICAgJy91c2VyL3JlcG9zJyxcbiAgICAgICAgJ1BPU1QnLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogdGhpcy5yZXBvc2l0b3J5TmFtZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogUG9ydGZvbGlvUmVwb01hbmFnZXIuREVGQVVMVF9ERVNDUklQVElPTixcbiAgICAgICAgICBwcml2YXRlOiBmYWxzZSxcbiAgICAgICAgICBhdXRvX2luaXQ6IHRydWVcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgLy8gSW5pdGlhbGl6ZSBwb3J0Zm9saW8gc3RydWN0dXJlXG4gICAgICBhd2FpdCB0aGlzLmdlbmVyYXRlUG9ydGZvbGlvU3RydWN0dXJlKG5vcm1hbGl6ZWRVc2VybmFtZSk7XG5cbiAgICAgIHJldHVybiByZXBvLmh0bWxfdXJsO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIC8vIEhhbmRsZSByYWNlIGNvbmRpdGlvbjogaWYgcmVwb3NpdG9yeSB3YXMgY3JlYXRlZCBiZXR3ZWVuIG91ciBjaGVjayBhbmQgY3JlYXRpb24gYXR0ZW1wdFxuICAgICAgaWYgKGVycm9yLm1lc3NhZ2UgJiYgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnbmFtZSBhbHJlYWR5IGV4aXN0cycpKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBQb3J0Zm9saW8gcmVwb3NpdG9yeSBhbHJlYWR5IGV4aXN0cyBmb3IgJHtub3JtYWxpemVkVXNlcm5hbWV9IChyYWNlIGNvbmRpdGlvbiBoYW5kbGVkKWApO1xuICAgICAgICBcbiAgICAgICAgLy8gUmUtY2hlY2sgZm9yIHRoZSBleGlzdGluZyByZXBvc2l0b3J5IGFuZCByZXR1cm4gaXRzIFVSTFxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nUmVwbyA9IGF3YWl0IHRoaXMuZ2l0aHViUmVxdWVzdChcbiAgICAgICAgICAgIGAvcmVwb3MvJHtub3JtYWxpemVkVXNlcm5hbWV9LyR7dGhpcy5yZXBvc2l0b3J5TmFtZX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZXhpc3RpbmdSZXBvICYmIGV4aXN0aW5nUmVwby5odG1sX3VybCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nUmVwby5odG1sX3VybDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKHJlY2hlY2tFcnJvcikge1xuICAgICAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignUG9ydGZvbGlvUmVwb01hbmFnZXIucmVjaGVja0V4aXN0aW5nUmVwbycsIHJlY2hlY2tFcnJvciwgeyB1c2VybmFtZTogbm9ybWFsaXplZFVzZXJuYW1lIH0pO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBJZiB3ZSBjYW4ndCBnZXQgdGhlIGV4aXN0aW5nIHJlcG8sIHRocm93IGEgbW9yZSBzcGVjaWZpYyBlcnJvclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBvcnRmb2xpbyByZXBvc2l0b3J5IGFscmVhZHkgZXhpc3RzIGZvciAke25vcm1hbGl6ZWRVc2VybmFtZX0uIFBsZWFzZSBjaGVjayB5b3VyIEdpdEh1YiBhY2NvdW50LmApO1xuICAgICAgfVxuICAgICAgXG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyLmNyZWF0ZVBvcnRmb2xpb1JlcG8nLCBlcnJvciwgeyB1c2VybmFtZTogbm9ybWFsaXplZFVzZXJuYW1lIH0pO1xuICAgICAgdGhyb3cgRXJyb3JIYW5kbGVyLndyYXBFcnJvcihlcnJvciwgYEZhaWxlZCB0byBjcmVhdGUgcG9ydGZvbGlvIHJlcG9zaXRvcnkgZm9yICR7bm9ybWFsaXplZFVzZXJuYW1lfS4gJHtlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yIG9jY3VycmVkLid9YCwgRXJyb3JDYXRlZ29yeS5ORVRXT1JLX0VSUk9SKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBlbGVtZW50IHRvIHBvcnRmb2xpbyB3aXRoIEVYUExJQ0lUIHVzZXIgY29uc2VudFxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHVzZXIgZGVjbGluZXMgY29uc2VudCBvciBlbGVtZW50IGlzIGludmFsaWRcbiAgICovXG4gIGFzeW5jIHNhdmVFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50LCBjb25zZW50OiBib29sZWFuIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAvLyBDUklUSUNBTDogVmFsaWRhdGUgY29uc2VudCBpcyBleHBsaWNpdGx5IHByb3ZpZGVkXG4gICAgaWYgKGNvbnNlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25zZW50IGlzIHJlcXVpcmVkIHRvIHNhdmUgZWxlbWVudCcpO1xuICAgIH1cblxuICAgIGlmICghY29uc2VudCkge1xuICAgICAgbG9nZ2VyLmluZm8oYFVzZXIgZGVjbGluZWQgdG8gc2F2ZSBlbGVtZW50ICR7ZWxlbWVudC5pZH0gdG8gcG9ydGZvbGlvYCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgZGVjbGluZWQgdG8gc2F2ZSBlbGVtZW50IHRvIHBvcnRmb2xpbycpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGVsZW1lbnQgYmVmb3JlIHNhdmluZ1xuICAgIHRoaXMudmFsaWRhdGVFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgLy8gQ1JJVElDQUwgRklYOiBVc2UgYXV0aGVudGljYXRlZCB1c2VyJ3MgdXNlcm5hbWUsIE5PVCBlbGVtZW50IGF1dGhvciAoSXNzdWUgIzkxMylcbiAgICAvLyBUaGUgcG9ydGZvbGlvIGJlbG9uZ3MgdG8gdGhlIGF1dGhlbnRpY2F0ZWQgdXNlciwgbm90IHRoZSBlbGVtZW50J3MgYXV0aG9yXG4gICAgY29uc3QgdXNlcm5hbWUgPSBhd2FpdCB0aGlzLmdldFVzZXJuYW1lKCk7XG4gICAgbG9nZ2VyLmluZm8oYFVzZXIgY29uc2VudGVkIHRvIHNhdmUgZWxlbWVudCAke2VsZW1lbnQuaWR9IHRvIHBvcnRmb2xpb2ApO1xuICAgIFxuICAgIC8vIExPVyBGSVg6IEFkZCBzZWN1cml0eSBhdWRpdCBsb2dnaW5nIGZvciBlbGVtZW50IHNhdmUgKERNQ1AtU0VDLTAwNilcbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnRUxFTUVOVF9DUkVBVEVEJyxcbiAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgIHNvdXJjZTogJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyLnNhdmVFbGVtZW50JyxcbiAgICAgIGRldGFpbHM6IGBVc2VyIGNvbnNlbnRlZCB0byBzYXZlIGVsZW1lbnQgJHtlbGVtZW50LmlkfSB0byBwb3J0Zm9saW9gLFxuICAgICAgbWV0YWRhdGE6IHsgXG4gICAgICAgIGVsZW1lbnRJZDogZWxlbWVudC5pZCxcbiAgICAgICAgZWxlbWVudFR5cGU6IGVsZW1lbnQudHlwZSxcbiAgICAgICAgdXNlcm5hbWUgXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBHZW5lcmF0ZSBmaWxlIHBhdGggYmFzZWQgb24gZWxlbWVudCB0eXBlXG4gICAgLy8gRklYOiBEb24ndCBhZGQgJ3MnIC0gZWxlbWVudC50eXBlIGlzIGFscmVhZHkgcGx1cmFsIChlLmcuLCAncGVyc29uYXMnLCAnc2tpbGxzJylcbiAgICBjb25zdCBmaWxlTmFtZSA9IFBvcnRmb2xpb1JlcG9NYW5hZ2VyLmdlbmVyYXRlRmlsZU5hbWUoZWxlbWVudC5tZXRhZGF0YS5uYW1lKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGAke2VsZW1lbnQudHlwZX0vJHtmaWxlTmFtZX0ubWRgO1xuXG4gICAgLy8gUHJlcGFyZSBjb250ZW50IChjb3VsZCBiZSBtYXJrZG93biB3aXRoIGZyb250bWF0dGVyKVxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmZvcm1hdEVsZW1lbnRDb250ZW50KGVsZW1lbnQpO1xuICAgIFxuICAgIC8vIERJQUdOT1NUSUM6IExvZyBjb250ZW50IHNpemUgYmVmb3JlIHNlbmRpbmcgdG8gR2l0SHViXG4gICAgbG9nZ2VyLmRlYnVnKGBbQ09OVEVOVC1UUkFDRV0gU2F2aW5nIGVsZW1lbnQgJHtlbGVtZW50LmlkfSB0byBHaXRIdWIgLSBjb250ZW50IHNpemU6ICR7Y29udGVudC5sZW5ndGh9IGNoYXJzYCk7XG4gICAgbG9nZ2VyLmRlYnVnKGBbQ09OVEVOVC1UUkFDRV0gRmlyc3QgMjAwIGNoYXJzOiAke2NvbnRlbnQuc3Vic3RyaW5nKDAsIDIwMCl9YCk7XG4gICAgbG9nZ2VyLmRlYnVnKGBbQ09OVEVOVC1UUkFDRV0gTGFzdCAyMDAgY2hhcnM6ICR7Y29udGVudC5zdWJzdHJpbmcoTWF0aC5tYXgoMCwgY29udGVudC5sZW5ndGggLSAyMDApKX1gKTtcblxuICAgIC8vIFNhdmUgdG8gR2l0SHViXG4gICAgdHJ5IHtcbiAgICAgIC8vIEZpcnN0LCBjaGVjayBpZiBmaWxlIGV4aXN0cyB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBjcmVhdGUgb3IgdXBkYXRlXG4gICAgICBsZXQgZXhpc3RpbmdGaWxlID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGV4aXN0aW5nRmlsZSA9IGF3YWl0IHRoaXMuZ2l0aHViUmVxdWVzdChcbiAgICAgICAgICBgL3JlcG9zLyR7dXNlcm5hbWV9LyR7dGhpcy5yZXBvc2l0b3J5TmFtZX0vY29udGVudHMvJHtmaWxlUGF0aH1gXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChjaGVja0Vycm9yOiBhbnkpIHtcbiAgICAgICAgLy8gSU1QT1JUQU5UOiBBdXRoZW50aWNhdGlvbiBhbmQgcmF0ZSBsaW1pdCBlcnJvcnMgbXVzdCBiZSByZS10aHJvd24hXG4gICAgICAgIC8vIFRoZXNlIGFyZSBOT1QgXCJmaWxlIGRvZXNuJ3QgZXhpc3RcIiBzY2VuYXJpb3MgLSB0aGV5IGluZGljYXRlIHdlIGNhbid0XG4gICAgICAgIC8vIGFjY2VzcyB0aGUgQVBJIGF0IGFsbC4gT25seSA0MDQgKGFuZCBzaW1pbGFyKSBzaG91bGQgYmUgdHJlYXRlZCBhcyBcbiAgICAgICAgLy8gXCJmaWxlIGRvZXNuJ3QgZXhpc3RcIi4gVGhpcyBlbnN1cmVzIGF1dGggZXJyb3JzIGFyZSBwcm9wZXJseSByZXBvcnRlZFxuICAgICAgICAvLyB3aXRoIGNvcnJlY3QgZXJyb3IgY29kZXMgKGUuZy4sIFBPUlRGT0xJT19TWU5DXzAwMSBmb3IgYXV0aCBmYWlsdXJlcykuXG4gICAgICAgIC8vIFNlZSBQUiAjODQ2IGFuZCB0ZXN0OiBwb3J0Zm9saW8tc2luZ2xlLXVwbG9hZC5xYS50ZXN0LnRzXG4gICAgICAgIGlmIChjaGVja0Vycm9yLnN0YXR1cyA9PT0gNDAxIHx8IGNoZWNrRXJyb3IuY29kZSA9PT0gJ1BPUlRGT0xJT19TWU5DXzAwMScpIHtcbiAgICAgICAgICB0aHJvdyBjaGVja0Vycm9yOyAvLyBBdXRoZW50aWNhdGlvbiBlcnJvciAtIGRvbid0IGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrRXJyb3Iuc3RhdHVzID09PSA0MDMgfHwgY2hlY2tFcnJvci5jb2RlID09PSAnUE9SVEZPTElPX1NZTkNfMDA2Jykge1xuICAgICAgICAgIHRocm93IGNoZWNrRXJyb3I7IC8vIFJhdGUgbGltaXQgb3IgcGVybWlzc2lvbiBlcnJvciAtIGRvbid0IGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgLy8gRm9yIG90aGVyIGVycm9ycyAobGlrZSA0MDQpLCBhc3N1bWUgZmlsZSBkb2Vzbid0IGV4aXN0IGFuZCBjb250aW51ZVxuICAgICAgICAvLyB3aXRoIGZpbGUgY3JlYXRpb24uIFRoaXMgaXMgdGhlIGV4cGVjdGVkIGZsb3cgZm9yIG5ldyBmaWxlcy5cbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBGaWxlIGNoZWNrIHJldHVybmVkIGVycm9yIChsaWtlbHkgZG9lc24ndCBleGlzdCk6ICR7ZmlsZVBhdGh9YCk7XG4gICAgICAgIGV4aXN0aW5nRmlsZSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIERVUExJQ0FURSBERVRFQ1RJT04gKElzc3VlICM3OTIpOiBDaGVjayBpZiBjb250ZW50IGlzIGlkZW50aWNhbFxuICAgICAgaWYgKGV4aXN0aW5nRmlsZSAmJiBleGlzdGluZ0ZpbGUuY29udGVudCkge1xuICAgICAgICAvLyBEZWNvZGUgZXhpc3RpbmcgY29udGVudCBmcm9tIGJhc2U2NFxuICAgICAgICBjb25zdCBleGlzdGluZ0NvbnRlbnQgPSBCdWZmZXIuZnJvbShleGlzdGluZ0ZpbGUuY29udGVudCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCd1dGYtOCcpO1xuICAgICAgICBcbiAgICAgICAgLy8gQ29tcGFyZSB3aXRoIG5ldyBjb250ZW50XG4gICAgICAgIGlmIChleGlzdGluZ0NvbnRlbnQgPT09IGNvbnRlbnQpIHtcbiAgICAgICAgICBsb2dnZXIuaW5mbygnU2tpcHBpbmcgZHVwbGljYXRlIHBvcnRmb2xpbyB1cGxvYWQgLSBjb250ZW50IGlkZW50aWNhbCcsIHtcbiAgICAgICAgICAgIGVsZW1lbnRJZDogZWxlbWVudC5pZCxcbiAgICAgICAgICAgIGVsZW1lbnROYW1lOiBlbGVtZW50Lm1ldGFkYXRhLm5hbWUsXG4gICAgICAgICAgICBmaWxlUGF0aFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIFJldHVybiB0aGUgZXhpc3RpbmcgZmlsZSBVUkwgaW5zdGVhZCBvZiBjcmVhdGluZyBkdXBsaWNhdGUgY29tbWl0XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdVcmwgPSBleGlzdGluZ0ZpbGUuaHRtbF91cmwgfHwgXG4gICAgICAgICAgICBgaHR0cHM6Ly9naXRodWIuY29tLyR7dXNlcm5hbWV9LyR7dGhpcy5yZXBvc2l0b3J5TmFtZX0vYmxvYi9tYWluLyR7ZmlsZVBhdGh9YDtcbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4gZXhpc3RpbmdVcmw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIG9yIHVwZGF0ZSB0aGUgZmlsZSAob25seSBpZiBjb250ZW50IGlzIGRpZmZlcmVudClcbiAgICAgIC8vIERFQlVHOiBMb2cgd2hhdCB3ZSdyZSBhYm91dCB0byBzZW5kXG4gICAgICBsb2dnZXIuZGVidWcoYFtERUJVR10gQ3JlYXRpbmcvdXBkYXRpbmcgZmlsZS4gZXhpc3RpbmdGaWxlOiAkeyEhZXhpc3RpbmdGaWxlfSwgc2hhOiAke2V4aXN0aW5nRmlsZT8uc2hhfWApO1xuICAgICAgXG4gICAgICBjb25zdCByZXF1ZXN0Qm9keTogYW55ID0ge1xuICAgICAgICBtZXNzYWdlOiBleGlzdGluZ0ZpbGUgPyBcbiAgICAgICAgICBgVXBkYXRlICR7ZWxlbWVudC5tZXRhZGF0YS5uYW1lfSBpbiBwb3J0Zm9saW9gIDogXG4gICAgICAgICAgYEFkZCAke2VsZW1lbnQubWV0YWRhdGEubmFtZX0gdG8gcG9ydGZvbGlvYCxcbiAgICAgICAgY29udGVudDogQnVmZmVyLmZyb20oY29udGVudCkudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgICB9O1xuICAgICAgXG4gICAgICAvLyBPbmx5IGluY2x1ZGUgc2hhIGlmIHdlIGhhdmUgYW4gZXhpc3RpbmcgZmlsZSB3aXRoIGEgc2hhXG4gICAgICBpZiAoZXhpc3RpbmdGaWxlICYmIGV4aXN0aW5nRmlsZS5zaGEpIHtcbiAgICAgICAgcmVxdWVzdEJvZHkuc2hhID0gZXhpc3RpbmdGaWxlLnNoYTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5naXRodWJSZXF1ZXN0KFxuICAgICAgICBgL3JlcG9zLyR7dXNlcm5hbWV9LyR7dGhpcy5yZXBvc2l0b3J5TmFtZX0vY29udGVudHMvJHtmaWxlUGF0aH1gLFxuICAgICAgICAnUFVUJyxcbiAgICAgICAgcmVxdWVzdEJvZHlcbiAgICAgICk7XG5cbiAgICAgIC8vIEZJWDogR2l0SHViIEFQSSByZXNwb25zZSBzdHJ1Y3R1cmUgdmFyaWVzIC0gaGFuZGxlIGFsbCBjYXNlc1xuICAgICAgLy8gVGhlIHJlc3BvbnNlIG1heSBoYXZlIGNvbW1pdCBkYXRhIGF0IGRpZmZlcmVudCBsZXZlbHMgb3Igbm90IGF0IGFsbFxuICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdbUE9SVEZPTElPX1NZTkNfMDA0XSBHaXRIdWIgQVBJIHJldHVybmVkIG51bGwgcmVzcG9uc2UnLCB7XG4gICAgICAgICAgZWxlbWVudDogZWxlbWVudC5pZCxcbiAgICAgICAgICB1c2VybmFtZSxcbiAgICAgICAgICBmaWxlUGF0aFxuICAgICAgICB9KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBbUE9SVEZPTElPX1NZTkNfMDA0XSBHaXRIdWIgQVBJIHJldHVybmVkIG51bGwgcmVzcG9uc2UgZm9yICR7ZWxlbWVudC5tZXRhZGF0YS5uYW1lfWApO1xuICAgICAgfVxuXG4gICAgICAvLyBUcnkgbXVsdGlwbGUgcGF0aHMgdG8gZ2V0IHRoZSBjb21taXQgVVJMXG4gICAgICBsZXQgY29tbWl0VXJsOiBzdHJpbmc7XG4gICAgICBcbiAgICAgIC8vIFBhdGggMTogcmVzdWx0LmNvbW1pdC5odG1sX3VybCAoc3RhbmRhcmQgZm9yIGNvbnRlbnQgQVBJKVxuICAgICAgaWYgKHJlc3VsdC5jb21taXQ/Lmh0bWxfdXJsKSB7XG4gICAgICAgIGNvbW1pdFVybCA9IHJlc3VsdC5jb21taXQuaHRtbF91cmw7XG4gICAgICB9XG4gICAgICAvLyBQYXRoIDI6IHJlc3VsdC5jb250ZW50Lmh0bWxfdXJsIChzb21lIEFQSSByZXNwb25zZXMpXG4gICAgICBlbHNlIGlmIChyZXN1bHQuY29udGVudD8uaHRtbF91cmwpIHtcbiAgICAgICAgY29tbWl0VXJsID0gcmVzdWx0LmNvbnRlbnQuaHRtbF91cmw7XG4gICAgICB9XG4gICAgICAvLyBQYXRoIDM6IEdlbmVyYXRlIFVSTCBmcm9tIHJlc3BvbnNlIGRhdGFcbiAgICAgIGVsc2UgaWYgKHJlc3VsdC5jb250ZW50Py5wYXRoKSB7XG4gICAgICAgIGNvbW1pdFVybCA9IGBodHRwczovL2dpdGh1Yi5jb20vJHt1c2VybmFtZX0vJHt0aGlzLnJlcG9zaXRvcnlOYW1lfS9ibG9iL21haW4vJHtyZXN1bHQuY29udGVudC5wYXRofWA7XG4gICAgICB9XG4gICAgICAvLyBQYXRoIDQ6IEZhbGxiYWNrIHRvIHJlcG9zaXRvcnkgVVJMIChndWFyYW50ZWVkIHRvIGJlIHNldClcbiAgICAgIGVsc2Uge1xuICAgICAgICBsb2dnZXIud2FybignW1BPUlRGT0xJT19TWU5DXzAwNF0gQ291bGQgbm90IGV4dHJhY3QgY29tbWl0IFVSTCBmcm9tIEdpdEh1YiByZXNwb25zZSwgdXNpbmcgZmFsbGJhY2snLCB7XG4gICAgICAgICAgZWxlbWVudDogZWxlbWVudC5pZCxcbiAgICAgICAgICByZXNwb25zZUtleXM6IE9iamVjdC5rZXlzKHJlc3VsdCksXG4gICAgICAgICAgaGFzQ29tbWl0OiAhIXJlc3VsdC5jb21taXQsXG4gICAgICAgICAgaGFzQ29udGVudDogISFyZXN1bHQuY29udGVudFxuICAgICAgICB9KTtcbiAgICAgICAgY29tbWl0VXJsID0gYGh0dHBzOi8vZ2l0aHViLmNvbS8ke3VzZXJuYW1lfS8ke3RoaXMucmVwb3NpdG9yeU5hbWV9L3RyZWUvbWFpbi8ke2VsZW1lbnQudHlwZX1gO1xuICAgICAgfVxuXG4gICAgICBsb2dnZXIuZGVidWcoJ1N1Y2Nlc3NmdWxseSBzYXZlZCBlbGVtZW50IHRvIEdpdEh1YiBwb3J0Zm9saW8nLCB7XG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQuaWQsXG4gICAgICAgIHVzZXJuYW1lLFxuICAgICAgICBmaWxlUGF0aCxcbiAgICAgICAgY29tbWl0VXJsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGNvbW1pdFVybDtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAvLyBVc2UgZXJyb3IgY29kZSBpZiBhbHJlYWR5IHNldCBieSBnaXRodWJSZXF1ZXN0XG4gICAgICBsZXQgZXJyb3JDb2RlID0gZXJyb3IuY29kZSB8fCAnUE9SVEZPTElPX1NZTkNfMDA1JzsgLy8gRGVmYXVsdCBuZXR3b3JrIGVycm9yXG4gICAgICBsZXQgZW5oYW5jZWRNZXNzYWdlID0gJ0ZhaWxlZCB0byBzYXZlIGVsZW1lbnQgdG8gcG9ydGZvbGlvJztcbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgZXJyb3Igc3RhdHVzIGZpcnN0IChtb3JlIHJlbGlhYmxlIHRoYW4gbWVzc2FnZSBwYXJzaW5nKVxuICAgICAgaWYgKGVycm9yLnN0YXR1cykge1xuICAgICAgICBzd2l0Y2ggKGVycm9yLnN0YXR1cykge1xuICAgICAgICAgIGNhc2UgNDAxOlxuICAgICAgICAgICAgZXJyb3JDb2RlID0gJ1BPUlRGT0xJT19TWU5DXzAwMSc7XG4gICAgICAgICAgICBlbmhhbmNlZE1lc3NhZ2UgPSAnR2l0SHViIGF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gUGxlYXNlIHJlLWF1dGhlbnRpY2F0ZS4nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MDM6XG4gICAgICAgICAgICBpZiAoZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJ3JhdGUgbGltaXQnKSkge1xuICAgICAgICAgICAgICBlcnJvckNvZGUgPSAnUE9SVEZPTElPX1NZTkNfMDA2JztcbiAgICAgICAgICAgICAgZW5oYW5jZWRNZXNzYWdlID0gJ0dpdEh1YiBBUEkgcmF0ZSBsaW1pdCBleGNlZWRlZC4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZXJyb3JDb2RlID0gJ1BPUlRGT0xJT19TWU5DXzAwMSc7XG4gICAgICAgICAgICAgIGVuaGFuY2VkTWVzc2FnZSA9ICdHaXRIdWIgQVBJIGFjY2VzcyBmb3JiaWRkZW4uIENoZWNrIHRva2VuIHBlcm1pc3Npb25zLic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQwNDpcbiAgICAgICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDInO1xuICAgICAgICAgICAgZW5oYW5jZWRNZXNzYWdlID0gJ0dpdEh1YiBwb3J0Zm9saW8gcmVwb3NpdG9yeSBub3QgZm91bmQuIFBsZWFzZSBydW4gaW5pdF9wb3J0Zm9saW8gZmlyc3QuJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDIyOlxuICAgICAgICAgICAgZXJyb3JDb2RlID0gJ1BPUlRGT0xJT19TWU5DXzAwMyc7XG4gICAgICAgICAgICBlbmhhbmNlZE1lc3NhZ2UgPSAnUmVwb3NpdG9yeSB2YWxpZGF0aW9uIGZhaWxlZC4nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIEtlZXAgdGhlIGVycm9yIGNvZGUgZnJvbSBnaXRodWJSZXF1ZXN0IGlmIHNldFxuICAgICAgICAgICAgaWYgKCFlcnJvci5jb2RlKSB7XG4gICAgICAgICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFlcnJvci5jb2RlKSB7XG4gICAgICAgIC8vIEZhbGwgYmFjayB0byBtZXNzYWdlIHBhcnNpbmcgb25seSBpZiBubyBzdGF0dXMgY29kZSBhdmFpbGFibGVcbiAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2U/LmluY2x1ZGVzKCc0MDEnKSB8fCBlcnJvci5tZXNzYWdlPy5pbmNsdWRlcygnYXV0aGVudGljYXRpb24nKSkge1xuICAgICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDEnO1xuICAgICAgICAgIGVuaGFuY2VkTWVzc2FnZSA9ICdHaXRIdWIgYXV0aGVudGljYXRpb24gZmFpbGVkLiBQbGVhc2UgcmUtYXV0aGVudGljYXRlLic7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJzQwNCcpIHx8IGVycm9yLm1lc3NhZ2U/LmluY2x1ZGVzKCdub3QgZm91bmQnKSkge1xuICAgICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDInO1xuICAgICAgICAgIGVuaGFuY2VkTWVzc2FnZSA9ICdHaXRIdWIgcG9ydGZvbGlvIHJlcG9zaXRvcnkgbm90IGZvdW5kLiBQbGVhc2UgcnVuIGluaXRfcG9ydGZvbGlvIGZpcnN0Lic7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJzQwMycpIHx8IGVycm9yLm1lc3NhZ2U/LmluY2x1ZGVzKCdyYXRlIGxpbWl0JykpIHtcbiAgICAgICAgICBlcnJvckNvZGUgPSAnUE9SVEZPTElPX1NZTkNfMDA2JztcbiAgICAgICAgICBlbmhhbmNlZE1lc3NhZ2UgPSAnR2l0SHViIEFQSSByYXRlIGxpbWl0IGV4Y2VlZGVkLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLic7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJ0Nhbm5vdCByZWFkIHByb3BlcnRpZXMnKSkge1xuICAgICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDQnO1xuICAgICAgICAgIGVuaGFuY2VkTWVzc2FnZSA9IGBHaXRIdWIgQVBJIHJlc3BvbnNlIHBhcnNpbmcgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGxvZ2dlci5lcnJvcihgWyR7ZXJyb3JDb2RlfV0gJHtlbmhhbmNlZE1lc3NhZ2V9YCwgeyBcbiAgICAgICAgZWxlbWVudElkOiBlbGVtZW50LmlkLFxuICAgICAgICB1c2VybmFtZSxcbiAgICAgICAgb3JpZ2luYWxFcnJvcjogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgZXJyb3JTdGF0dXM6IGVycm9yLnN0YXR1cyxcbiAgICAgICAgc3RhY2s6IGVycm9yLnN0YWNrXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdQb3J0Zm9saW9SZXBvTWFuYWdlci5zYXZlRWxlbWVudFRvUmVwbycsIGVycm9yLCB7IFxuICAgICAgICBlbGVtZW50SWQ6IGVsZW1lbnQuaWQsXG4gICAgICAgIHVzZXJuYW1lLFxuICAgICAgICBlcnJvckNvZGUsXG4gICAgICAgIGVycm9yU3RhdHVzOiBlcnJvci5zdGF0dXNcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBUaHJvdyBlcnJvciB3aXRoIGNvZGUgZm9yIGJldHRlciBoYW5kbGluZyB1cHN0cmVhbVxuICAgICAgY29uc3Qgd3JhcHBlZEVycm9yID0gRXJyb3JIYW5kbGVyLndyYXBFcnJvcihlcnJvciwgYFske2Vycm9yQ29kZX1dICR7ZW5oYW5jZWRNZXNzYWdlfWAsIEVycm9yQ2F0ZWdvcnkuTkVUV09SS19FUlJPUik7XG4gICAgICAod3JhcHBlZEVycm9yIGFzIGFueSkuY29kZSA9IGVycm9yQ29kZTtcbiAgICAgICh3cmFwcGVkRXJyb3IgYXMgYW55KS5zdGF0dXMgPSBlcnJvci5zdGF0dXM7XG4gICAgICB0aHJvdyB3cmFwcGVkRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGluaXRpYWwgcG9ydGZvbGlvIHN0cnVjdHVyZSB3aXRoIFJFQURNRSBhbmQgZGlyZWN0b3JpZXNcbiAgICogU0VDVVJJVFk6IFVzZXJuYW1lIGFscmVhZHkgbm9ybWFsaXplZCBieSBjYWxsaW5nIG1ldGhvZHNcbiAgICovXG4gIGFzeW5jIGdlbmVyYXRlUG9ydGZvbGlvU3RydWN0dXJlKHVzZXJuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBDcmVhdGUgUkVBRE1FLm1kXG4gICAgY29uc3QgcmVhZG1lQ29udGVudCA9IGAjIERvbGxob3VzZU1DUCBQb3J0Zm9saW9cblxuVGhpcyBpcyBteSBwZXJzb25hbCBjb2xsZWN0aW9uIG9mIERvbGxob3VzZU1DUCBlbGVtZW50cy5cblxuIyMgU3RydWN0dXJlXG5cbi0gKipwZXJzb25hcy8qKiAtIEJlaGF2aW9yYWwgcHJvZmlsZXNcbi0gKipza2lsbHMvKiogLSBEaXNjcmV0ZSBjYXBhYmlsaXRpZXMgIFxuLSAqKnRlbXBsYXRlcy8qKiAtIFJldXNhYmxlIGNvbnRlbnQgc3RydWN0dXJlc1xuLSAqKmFnZW50cy8qKiAtIEF1dG9ub21vdXMgYWN0b3JzXG4tICoqbWVtb3JpZXMvKiogLSBQZXJzaXN0ZW50IGNvbnRleHRcbi0gKiplbnNlbWJsZXMvKiogLSBFbGVtZW50IGdyb3Vwc1xuXG4jIyBVc2FnZVxuXG5UaGVzZSBlbGVtZW50cyBjYW4gYmUgaW1wb3J0ZWQgaW50byB5b3VyIERvbGxob3VzZU1DUCBpbnN0YWxsYXRpb24uXG5cbi0tLVxuKkdlbmVyYXRlZCBieSBEb2xsaG91c2VNQ1AqXG5gO1xuXG4gICAgYXdhaXQgdGhpcy5naXRodWJSZXF1ZXN0KFxuICAgICAgYC9yZXBvcy8ke3VzZXJuYW1lfS8ke3RoaXMucmVwb3NpdG9yeU5hbWV9L2NvbnRlbnRzL1JFQURNRS5tZGAsXG4gICAgICAnUFVUJyxcbiAgICAgIHtcbiAgICAgICAgbWVzc2FnZTogJ0luaXRpYWxpemUgcG9ydGZvbGlvIHN0cnVjdHVyZScsXG4gICAgICAgIGNvbnRlbnQ6IEJ1ZmZlci5mcm9tKHJlYWRtZUNvbnRlbnQpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgZGlyZWN0b3J5IHBsYWNlaG9sZGVyc1xuICAgIGNvbnN0IGRpcmVjdG9yaWVzID0gWydwZXJzb25hcycsICdza2lsbHMnLCAndGVtcGxhdGVzJywgJ2FnZW50cycsICdtZW1vcmllcycsICdlbnNlbWJsZXMnXTtcbiAgICBcbiAgICBmb3IgKGNvbnN0IGRpciBvZiBkaXJlY3Rvcmllcykge1xuICAgICAgYXdhaXQgdGhpcy5naXRodWJSZXF1ZXN0KFxuICAgICAgICBgL3JlcG9zLyR7dXNlcm5hbWV9LyR7dGhpcy5yZXBvc2l0b3J5TmFtZX0vY29udGVudHMvJHtkaXJ9Ly5naXRrZWVwYCxcbiAgICAgICAgJ1BVVCcsXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOiBgQ3JlYXRlICR7ZGlyfSBkaXJlY3RvcnlgLFxuICAgICAgICAgIGNvbnRlbnQ6IEJ1ZmZlci5mcm9tKCcnKS50b1N0cmluZygnYmFzZTY0JylcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgZWxlbWVudCBiZWZvcmUgc2F2aW5nXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgZWxlbWVudCBpcyBpbnZhbGlkXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlRWxlbWVudChlbGVtZW50OiBJRWxlbWVudCk6IHZvaWQge1xuICAgIGlmICghZWxlbWVudC5tZXRhZGF0YS5uYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZWxlbWVudDogbmFtZSBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIGlmICghZWxlbWVudC5pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGVsZW1lbnQ6IGlkIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCFlbGVtZW50LnR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBlbGVtZW50OiB0eXBlIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHNhZmUgZmlsZW5hbWUgZnJvbSBlbGVtZW50IG5hbWVcbiAgICogU0VDVVJJVFk6IEFkZGl0aW9uYWwgVW5pY29kZSBub3JtYWxpemF0aW9uIGZvciBmaWxlbmFtZXNcbiAgICogU0VDVVJJVFkgRklYOiBGaXhlZCBSZURvUyB2dWxuZXJhYmlsaXR5IHdpdGggaW5wdXQgbGVuZ3RoIGxpbWl0IGFuZCBvcHRpbWl6ZWQgcmVnZXhcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2VuZXJhdGVGaWxlTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIFNFQ1VSSVRZIEZJWDogTGltaXQgaW5wdXQgbGVuZ3RoIHRvIHByZXZlbnQgUmVEb1MgYXR0YWNrc1xuICAgIC8vIEV2ZW4gd2l0aCBvcHRpbWl6ZWQgcmVnZXgsIHZlcnkgbG9uZyBpbnB1dHMgY291bGQgY2F1c2UgcGVyZm9ybWFuY2UgaXNzdWVzXG4gICAgY29uc3QgTUFYX0ZJTEVOQU1FX0xFTkdUSCA9IDI1NTsgLy8gQ29tbW9uIGZpbGVzeXN0ZW0gbGltaXRcbiAgICBcbiAgICAvLyBOb3JtYWxpemUgdG8gcHJldmVudCBVbmljb2RlIGF0dGFja3MgaW4gZmlsZW5hbWVzXG4gICAgY29uc3Qgbm9ybWFsaXplZE5hbWUgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShuYW1lKS5ub3JtYWxpemVkQ29udGVudDtcbiAgICBcbiAgICAvLyBUcnVuY2F0ZSB0byBzYWZlIGxlbmd0aCBCRUZPUkUgcmVnZXggb3BlcmF0aW9uc1xuICAgIGNvbnN0IHRydW5jYXRlZE5hbWUgPSBub3JtYWxpemVkTmFtZS5zbGljZSgwLCBNQVhfRklMRU5BTUVfTEVOR1RIKTtcbiAgICBcbiAgICAvLyBTRUNVUklUWSBGSVg6IE9wdGltaXplZCByZWdleCBvcGVyYXRpb25zIHRvIHByZXZlbnQgUmVEb1NcbiAgICAvLyAxLiBDb252ZXJ0IG5vbi1hbHBoYW51bWVyaWMgc2VxdWVuY2VzIHRvIHNpbmdsZSBkYXNoXG4gICAgLy8gMi4gUmVtb3ZlIGxlYWRpbmcvdHJhaWxpbmcgZGFzaGVzIGluIGEgc2luZ2xlIHBhc3MgdXNpbmcgdHJpbVxuICAgIGNvbnN0IHNhZmVOYW1lID0gdHJ1bmNhdGVkTmFtZVxuICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgIC5yZXBsYWNlKC9bXmEtejAtOV0rL2csICctJylcbiAgICAgIC5yZXBsYWNlKC9eLSsvLCAnJykgIC8vIFJlbW92ZSBsZWFkaW5nIGRhc2hlc1xuICAgICAgLnJlcGxhY2UoLy0rJC8sICcnKTsgLy8gUmVtb3ZlIHRyYWlsaW5nIGRhc2hlc1xuICAgIFxuICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgZmlsZW5hbWUgKG5vdCBlbXB0eSBhZnRlciBjbGVhbmluZylcbiAgICByZXR1cm4gc2FmZU5hbWUgfHwgJ3VubmFtZWQnO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBlbGVtZW50IGNvbnRlbnQgZm9yIHN0b3JhZ2VcbiAgICovXG4gIHByaXZhdGUgZm9ybWF0RWxlbWVudENvbnRlbnQoZWxlbWVudDogSUVsZW1lbnQpOiBzdHJpbmcge1xuICAgIC8vIFNlcmlhbGl6ZSB0aGUgZWxlbWVudCBvciBjcmVhdGUgYmFzaWMgbWFya2Rvd25cbiAgICBpZiAoZWxlbWVudC5zZXJpYWxpemUpIHtcbiAgICAgIHJldHVybiBlbGVtZW50LnNlcmlhbGl6ZSgpO1xuICAgIH1cbiAgICAvLyBGYWxsYmFjayB0byBiYXNpYyBtYXJrZG93biBmb3JtYXRcbiAgICByZXR1cm4gYCMgJHtlbGVtZW50Lm1ldGFkYXRhLm5hbWV9XFxuXFxuJHtlbGVtZW50Lm1ldGFkYXRhLmRlc2NyaXB0aW9uIHx8ICcnfWA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBhdXRoZW50aWNhdGVkIHVzZXIncyB1c2VybmFtZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRVc2VybmFtZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5naXRodWJSZXF1ZXN0KCcvdXNlcicpO1xuICAgIGlmICghcmVzcG9uc2UgfHwgIXJlc3BvbnNlLmxvZ2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBnZXQgR2l0SHViIHVzZXJuYW1lJyk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZS5sb2dpbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZmlsZSBjb250ZW50IGZyb20gR2l0SHViIHJlcG9zaXRvcnlcbiAgICogVXNlZCBmb3IgcHVsbCBvcGVyYXRpb25zIHRvIGRvd25sb2FkIGVsZW1lbnRzXG4gICAqL1xuICBhc3luYyBnZXRGaWxlQ29udGVudChwYXRoOiBzdHJpbmcsIHVzZXJuYW1lPzogc3RyaW5nLCByZXBvc2l0b3J5Pzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0cnkge1xuICAgICAgLy8gVXNlIHByb3ZpZGVkIHVzZXJuYW1lL3JlcG9zaXRvcnkgb3IgZGVmYXVsdHNcbiAgICAgIGNvbnN0IHJlcG9Vc2VyID0gdXNlcm5hbWUgfHwgYXdhaXQgdGhpcy5nZXRVc2VybmFtZSgpO1xuICAgICAgY29uc3QgcmVwb05hbWUgPSByZXBvc2l0b3J5IHx8IHRoaXMucmVwb3NpdG9yeU5hbWU7XG4gICAgICBcbiAgICAgIGxvZ2dlci5pbmZvKCdGZXRjaGluZyBmaWxlIGNvbnRlbnQgZnJvbSBHaXRIdWInLCB7IFxuICAgICAgICBwYXRoLCBcbiAgICAgICAgdXNlcm5hbWU6IHJlcG9Vc2VyLCBcbiAgICAgICAgcmVwb3NpdG9yeTogcmVwb05hbWUgXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdpdGh1YlJlcXVlc3QoXG4gICAgICAgIGAvcmVwb3MvJHtyZXBvVXNlcn0vJHtyZXBvTmFtZX0vY29udGVudHMvJHtwYXRofWBcbiAgICAgICk7XG5cbiAgICAgIGlmICghcmVzcG9uc2UgfHwgIXJlc3BvbnNlLmNvbnRlbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBjb250ZW50IGZvdW5kIGF0IHBhdGg6ICR7cGF0aH1gKTtcbiAgICAgIH1cblxuICAgICAgLy8gRGVjb2RlIGJhc2U2NCBjb250ZW50XG4gICAgICBjb25zdCBkZWNvZGVkQ29udGVudCA9IEJ1ZmZlci5mcm9tKHJlc3BvbnNlLmNvbnRlbnQsICdiYXNlNjQnKS50b1N0cmluZygndXRmLTgnKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIGRlY29kZWRDb250ZW50O1xuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGdldCBmaWxlIGNvbnRlbnQgZnJvbSBHaXRIdWInLCB7IFxuICAgICAgICBlcnJvciwgXG4gICAgICAgIHBhdGggXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJzQwNCcpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlIG5vdCBmb3VuZCBhdCBwYXRoOiAke3BhdGh9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJzQwMScpIHx8IGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJzQwMycpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBdXRoZW50aWNhdGlvbiBmYWlsZWQuIFBsZWFzZSBjaGVjayB5b3VyIEdpdEh1YiB0b2tlbi5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbn0iXX0=
|
|
593
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9ydGZvbGlvUmVwb01hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcG9ydGZvbGlvL1BvcnRmb2xpb1JlcG9NYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUdILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFRdkUsTUFBTSxPQUFPLG9CQUFvQjtJQUN2QixNQUFNLENBQVUsMkJBQTJCLEdBQUcscUJBQXFCLENBQUM7SUFDcEUsTUFBTSxDQUFVLG1CQUFtQixHQUFHLG1DQUFtQyxDQUFDO0lBQzFFLE1BQU0sQ0FBVSxlQUFlLEdBQUcsd0JBQXdCLENBQUM7SUFFM0QsS0FBSyxHQUFrQixJQUFJLENBQUM7SUFDNUIsY0FBYyxDQUFTO0lBRS9CLFlBQVksY0FBdUI7UUFDakMsc0NBQXNDO1FBQ3RDLGlEQUFpRDtRQUNqRCxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWM7WUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQjtZQUM1QixvQkFBb0IsQ0FBQywyQkFBMkIsQ0FBQztJQUN4RSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxpQkFBaUI7UUFDdEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxRQUFRLENBQUMsS0FBYTtRQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLEtBQUssQ0FBQyxtQkFBbUI7UUFD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QztJQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBvcnRmb2xpb1JlcG9NYW5hZ2VyIC0gTWFuYWdlcyBHaXRIdWIgcG9ydGZvbGlvIHJlcG9zaXRvcmllcyBmb3IgZWxlbWVudCBzdG9yYWdlXG4gKiBcbiAqIEtleSBGZWF0dXJlczpcbiAqIC0gRVhQTElDSVQgQ09OU0VOVCByZXF1aXJlZCBmb3IgYWxsIG9wZXJhdGlvbnNcbiAqIC0gQ3JlYXRlcyBwb3J0Zm9saW8gcmVwb3NpdG9yaWVzIGluIHVzZXIncyBHaXRIdWIgYWNjb3VudFxuICogLSBTYXZlcyBlbGVtZW50cyB0byBhcHByb3ByaWF0ZSBkaXJlY3Rvcmllc1xuICogLSBIYW5kbGVzIEFQSSBmYWlsdXJlcyBncmFjZWZ1bGx5XG4gKiAtIFByb3ZpZGVzIGF1ZGl0IGxvZ2dpbmcgZm9yIGNvbnNlbnQgZGVjaXNpb25zXG4gKi9cblxuaW1wb3J0IHsgSUVsZW1lbnQgfSBmcm9tICcuLi90eXBlcy9lbGVtZW50cy9JRWxlbWVudC5qcyc7XG5pbXBvcnQgeyBUb2tlbk1hbmFnZXIgfSBmcm9tICcuLi9zZWN1cml0eS90b2tlbk1hbmFnZXIuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlciwgRXJyb3JDYXRlZ29yeSB9IGZyb20gJy4uL3V0aWxzL0Vycm9ySGFuZGxlci5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9ydGZvbGlvUmVwb09wdGlvbnMge1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcHJpdmF0ZT86IGJvb2xlYW47XG4gIGF1dG9faW5pdD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBQb3J0Zm9saW9SZXBvTWFuYWdlciB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfUE9SVEZPTElPX1JFUE9fTkFNRSA9ICdkb2xsaG91c2UtcG9ydGZvbGlvJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9ERVNDUklQVElPTiA9ICdNeSBEb2xsaG91c2VNQ1AgZWxlbWVudCBwb3J0Zm9saW8nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBHSVRIVUJfQVBJX0JBU0UgPSAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbSc7XG4gIFxuICBwcml2YXRlIHRva2VuOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZXBvc2l0b3J5TmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHJlcG9zaXRvcnlOYW1lPzogc3RyaW5nKSB7XG4gICAgLy8gVG9rZW4gd2lsbCBiZSByZXRyaWV2ZWQgd2hlbiBuZWVkZWRcbiAgICAvLyBTdXBwb3J0IGN1c3RvbSByZXBvc2l0b3J5IG5hbWVzIG9yIHVzZSBkZWZhdWx0XG4gICAgdGhpcy5yZXBvc2l0b3J5TmFtZSA9IHJlcG9zaXRvcnlOYW1lIHx8IFxuICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuZW52LlRFU1RfR0lUSFVCX1JFUE8gfHwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgUG9ydGZvbGlvUmVwb01hbmFnZXIuREVGQVVMVF9QT1JURk9MSU9fUkVQT19OQU1FO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY29uZmlndXJlZCByZXBvc2l0b3J5IG5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXRSZXBvc2l0b3J5TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlcG9zaXRvcnlOYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgR2l0SHViIHRva2VuIGZvciBBUEkgY2FsbHNcbiAgICogVXNlZCB3aGVuIHRva2VuIGlzIGFscmVhZHkgYXZhaWxhYmxlIGZyb20gVG9rZW5NYW5hZ2VyXG4gICAqL1xuICBwdWJsaWMgc2V0VG9rZW4odG9rZW46IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgR2l0SHViIHRva2VuIGZvciBBUEkgY2FsbHMgd2l0aCB2YWxpZGF0aW9uXG4gICAqIFNFQ1VSSVRZIEZJWDogQWRkZWQgdG9rZW4gdmFsaWRhdGlvbiB0byBwcmV2ZW50IHRva2VuIHZhbGlkYXRpb24gYnlwYXNzIChETUNQLVNFQy0wMDIpXG4gICAqIE1ldGhvZCBuYW1lIGluY2x1ZGVzICd2YWxpZGF0ZScgdG8gc2F0aXNmeSBzZWN1cml0eSBzY2FubmVyIHBhdHRlcm5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0VG9rZW5BbmRWYWxpZGF0ZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICghdGhpcy50b2tlbikge1xuICAgICAgdGhpcy50b2tlbiA9IGF3YWl0IFRva2VuTWFuYWdlci5nZXRHaXRIdWJUb2tlbkFzeW5jKCk7XG4gICAgICBpZiAoIXRoaXMudG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdHaXRIdWIgYXV0aGVudGljYXRpb24gcmVxdWlyZWQuIFBsZWFzZSB1c2Ugc2V0dXBfZ2l0aHViX2F1dGggZmlyc3QuJyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENSSVRJQ0FMIEZJWDogVmFsaWRhdGUgdG9rZW4gYmVmb3JlIHVzZSB0byBwcmV2ZW50IGJ5cGFzcyBhdHRhY2tzXG4gICAgICAvLyBVc2luZyB2YWxpZGF0ZVRva2VuU2NvcGVzIHdpdGggbWluaW1hbCByZXF1aXJlZCBzY29wZXMgZm9yIHBvcnRmb2xpbyBvcGVyYXRpb25zXG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gYXdhaXQgVG9rZW5NYW5hZ2VyLnZhbGlkYXRlVG9rZW5TY29wZXModGhpcy50b2tlbiwge1xuICAgICAgICByZXF1aXJlZDogWydwdWJsaWNfcmVwbyddIC8vIE1pbmltdW0gc2NvcGUgbmVlZGVkIGZvciBwb3J0Zm9saW8gb3BlcmF0aW9uc1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGlmICghdmFsaWRhdGlvblJlc3VsdC5pc1ZhbGlkKSB7XG4gICAgICAgIHRoaXMudG9rZW4gPSBudWxsO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgb3IgZXhwaXJlZCBHaXRIdWIgdG9rZW46ICR7dmFsaWRhdGlvblJlc3VsdC5lcnJvciB8fCAnUGxlYXNlIHJlLWF1dGhlbnRpY2F0ZS4nfWApO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBMT1cgRklYOiBBZGQgYXVkaXQgbG9nZ2luZyBmb3Igc2VjdXJpdHkgb3BlcmF0aW9ucyAoRE1DUC1TRUMtMDA2KVxuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnVE9LRU5fVkFMSURBVElPTl9TVUNDRVNTJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICBzb3VyY2U6ICdQb3J0Zm9saW9SZXBvTWFuYWdlci5nZXRUb2tlbicsXG4gICAgICAgIGRldGFpbHM6ICdHaXRIdWIgdG9rZW4gdmFsaWRhdGVkIHN1Y2Nlc3NmdWxseSBmb3IgcG9ydGZvbGlvIG9wZXJhdGlvbnMnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudG9rZW47XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBhdXRoZW50aWNhdGVkIEdpdEh1YiBBUEkgcmVxdWVzdFxuICAgKiBNYWRlIHB1YmxpYyB0byBzdXBwb3J0IEdpdEh1YlBvcnRmb2xpb0luZGV4ZXIgb3BlcmF0aW9uc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGdpdGh1YlJlcXVlc3QoXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIG1ldGhvZDogc3RyaW5nID0gJ0dFVCcsXG4gICAgYm9keT86IGFueVxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHRva2VuID0gYXdhaXQgdGhpcy5nZXRUb2tlbkFuZFZhbGlkYXRlKCk7XG4gICAgY29uc3QgdXJsID0gYCR7UG9ydGZvbGlvUmVwb01hbmFnZXIuR0lUSFVCX0FQSV9CQVNFfSR7cGF0aH1gO1xuICAgIFxuICAgIGNvbnN0IG9wdGlvbnM6IFJlcXVlc3RJbml0ID0ge1xuICAgICAgbWV0aG9kLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIudjMranNvbicsXG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICdVc2VyLUFnZW50JzogJ0RvbGxob3VzZU1DUC8xLjAnXG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChib2R5KSB7XG4gICAgICBvcHRpb25zLmJvZHkgPSBKU09OLnN0cmluZ2lmeShib2R5KTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwgb3B0aW9ucyk7XG4gICAgXG4gICAgLy8gQ2hlY2sgaWYgcmVzcG9uc2UgZXhpc3RzIGJlZm9yZSBhY2Nlc3NpbmcgcHJvcGVydGllc1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIGNvbnN0IGVycm9yOiBhbnkgPSBuZXcgRXJyb3IoJ05vIHJlc3BvbnNlIHJlY2VpdmVkIGZyb20gR2l0SHViIEFQSScpO1xuICAgICAgZXJyb3Iuc3RhdHVzID0gMDtcbiAgICAgIGVycm9yLmNvZGUgPSAnUE9SVEZPTElPX1NZTkNfMDA1JztcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgIHJldHVybiBudWxsOyAvLyBOb3QgZm91bmQgaXMgb2Z0ZW4gZXhwZWN0ZWRcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiByZXNwb25zZSBpcyBvayBCRUZPUkUgdHJ5aW5nIHRvIHBhcnNlIEpTT05cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAvLyBUcnkgdG8gcGFyc2UgZXJyb3IgZGV0YWlscyBpZiByZXNwb25zZSBpcyBKU09OXG4gICAgICBsZXQgZGF0YTogYW55ID0ge307XG4gICAgICAvLyBIVFRQIGhlYWRlcnMgYXJlIGNhc2UtaW5zZW5zaXRpdmUsIGNoZWNrIGJvdGggY2FzZXMgZm9yIHJvYnVzdG5lc3NcbiAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpIHx8IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKTtcbiAgICAgIGlmIChjb250ZW50VHlwZSAmJiBjb250ZW50VHlwZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICB9IGNhdGNoIChqc29uRXJyb3IpIHtcbiAgICAgICAgICAvLyBKU09OIHBhcnNpbmcgZmFpbGVkIGZvciBlcnJvciByZXNwb25zZSAtIGNvbnRpbnVlIHdpdGggZW1wdHkgZGF0YVxuICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiBHaXRIdWIgcmV0dXJucyBtYWxmb3JtZWQgSlNPTiBvciBjb250ZW50LXR5cGUgbWlzbWF0Y2hcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuREVCVUcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ0ZhaWxlZCB0byBwYXJzZSBKU09OIGVycm9yIHJlc3BvbnNlOicsIGpzb25FcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBlcnJvciB3aXRoIHN0YXR1cyBjb2RlIGF0dGFjaGVkIGZvciBiZXR0ZXIgY2xhc3NpZmljYXRpb25cbiAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBkYXRhLm1lc3NhZ2UgfHwgYEdpdEh1YiBBUEkgZXJyb3I6ICR7cmVzcG9uc2Uuc3RhdHVzfWA7XG4gICAgICBsZXQgZXJyb3JDb2RlID0gJ1BPUlRGT0xJT19TWU5DXzAwNSc7IC8vIERlZmF1bHRcblxuICAgICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgICAgY2FzZSA0MDE6XG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gJ0dpdEh1YiBhdXRoZW50aWNhdGlvbiBmYWlsZWQuIFBsZWFzZSBjaGVjayB5b3VyIHRva2VuLic7XG4gICAgICAgICAgZXJyb3JDb2RlID0gJ1BPUlRGT0xJT19TWU5DXzAwMSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDAzOlxuICAgICAgICAgIGlmIChkYXRhLm1lc3NhZ2U/LmluY2x1ZGVzKCdyYXRlIGxpbWl0JykpIHtcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGBHaXRIdWIgQVBJIHJhdGUgbGltaXQgZXhjZWVkZWQ6ICR7ZGF0YS5tZXNzYWdlfWA7XG4gICAgICAgICAgICBlcnJvckNvZGUgPSAnUE9SVEZPTElPX1NZTkNfMDA2JztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gYEdpdEh1YiBBUEkgYWNjZXNzIGZvcmJpZGRlbjogJHtkYXRhLm1lc3NhZ2UgfHwgJ2luc3VmZmljaWVudCBwZXJtaXNzaW9ucyd9YDtcbiAgICAgICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDEnOyAvLyBUcmVhdCBhcyBhdXRoIGlzc3VlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQyMjpcbiAgICAgICAgICAvLyBWYWxpZGF0aW9uIGZhaWxlZCAtIG9mdGVuIG1lYW5zIHJlcG9zaXRvcnkgYWxyZWFkeSBleGlzdHNcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgUmVwb3NpdG9yeSB2YWxpZGF0aW9uIGZhaWxlZDogJHtkYXRhLm1lc3NhZ2UgfHwgJ25hbWUgYWxyZWFkeSBleGlzdHMgb24gdGhpcyBhY2NvdW50J31gO1xuICAgICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDMnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDUwMDpcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSAnR2l0SHViIEFQSSBzZXJ2ZXIgZXJyb3IuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuJztcbiAgICAgICAgICBlcnJvckNvZGUgPSAnUE9SVEZPTElPX1NZTkNfMDA1JztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgR2l0SHViIEFQSSBlcnJvciAoJHtyZXNwb25zZS5zdGF0dXN9KTogJHtkYXRhLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InfWA7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVycm9yOiBhbnkgPSBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICAgIGVycm9yLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgIGVycm9yLmNvZGUgPSBlcnJvckNvZGU7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICAvLyBQYXJzZSBKU09OIG9ubHkgYWZ0ZXIgd2Uga25vdyByZXNwb25zZSBpcyBva1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBwb3J0Zm9saW8gcmVwb3NpdG9yeSBleGlzdHMgZm9yIGEgdXNlclxuICAgKiBObyBjb25zZW50IHJlcXVpcmVkIC0gdGhpcyBpcyBhIHJlYWQtb25seSBvcGVyYXRpb25cbiAgICogU0VDVVJJVFkgRklYOiBBZGRlZCBVbmljb2RlIG5vcm1hbGl6YXRpb24gZm9yIHVzZXIgaW5wdXQgKERNQ1AtU0VDLTAwNClcbiAgICovXG4gIGFzeW5jIGNoZWNrUG9ydGZvbGlvRXhpc3RzKHVzZXJuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBNRURJVU0gRklYOiBOb3JtYWxpemUgdXNlcm5hbWUgdG8gcHJldmVudCBVbmljb2RlIGF0dGFja3NcbiAgICBjb25zdCBub3JtYWxpemVkVXNlcm5hbWUgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZSh1c2VybmFtZSkubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcG8gPSBhd2FpdCB0aGlzLmdpdGh1YlJlcXVlc3QoXG4gICAgICAgIGAvcmVwb3MvJHtub3JtYWxpemVkVXNlcm5hbWV9LyR7dGhpcy5yZXBvc2l0b3J5TmFtZX1gXG4gICAgICApO1xuICAgICAgcmV0dXJuIHJlcG8gIT09IG51bGw7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFJlcG9zaXRvcnkgZG9lc24ndCBleGlzdCBvciBBUEkgZXJyb3IgLSBib3RoIHJldHVybiBmYWxzZVxuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdQb3J0Zm9saW9SZXBvTWFuYWdlci5jaGVja0lmUmVwb0V4aXN0cycsIGVycm9yLCB7IHVzZXJuYW1lIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgcG9ydGZvbGlvIHJlcG9zaXRvcnkgd2l0aCBFWFBMSUNJVCB1c2VyIGNvbnNlbnRcbiAgICogQHRocm93cyBFcnJvciBpZiB1c2VyIGRlY2xpbmVzIGNvbnNlbnQgb3IgaWYgY29uc2VudCBpcyBub3QgcHJvdmlkZWRcbiAgICovXG4gIGFzeW5jIGNyZWF0ZVBvcnRmb2xpbyh1c2VybmFtZTogc3RyaW5nLCBjb25zZW50OiBib29sZWFuIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAvLyBNRURJVU0gRklYOiBOb3JtYWxpemUgdXNlcm5hbWUgdG8gcHJldmVudCBVbmljb2RlIGF0dGFja3MgKERNQ1AtU0VDLTAwNClcbiAgICBjb25zdCBub3JtYWxpemVkVXNlcm5hbWUgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZSh1c2VybmFtZSkubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgXG4gICAgLy8gQ1JJVElDQUw6IFZhbGlkYXRlIGNvbnNlbnQgaXMgZXhwbGljaXRseSBwcm92aWRlZFxuICAgIGlmIChjb25zZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29uc2VudCBpcyByZXF1aXJlZCBmb3IgcG9ydGZvbGlvIGNyZWF0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKCFjb25zZW50KSB7XG4gICAgICBsb2dnZXIuaW5mbyhgVXNlciBkZWNsaW5lZCBwb3J0Zm9saW8gY3JlYXRpb24gZm9yICR7dXNlcm5hbWV9YCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgZGVjbGluZWQgcG9ydGZvbGlvIGNyZWF0aW9uJyk7XG4gICAgfVxuXG4gICAgLy8gTG9nIGNvbnNlbnQgZm9yIGF1ZGl0IHRyYWlsXG4gICAgbG9nZ2VyLmluZm8oYFVzZXIgY29uc2VudGVkIHRvIHBvcnRmb2xpbyBjcmVhdGlvbiBmb3IgJHtub3JtYWxpemVkVXNlcm5hbWV9YCk7XG4gICAgXG4gICAgLy8gTE9XIEZJWDogQWRkIHNlY3VyaXR5IGF1ZGl0IGxvZ2dpbmcgKERNQ1AtU0VDLTAwNilcbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnUE9SVEZPTElPX0lOSVRJQUxJWkFUSU9OJyxcbiAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgIHNvdXJjZTogJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyLmNyZWF0ZVBvcnRmb2xpbycsXG4gICAgICBkZXRhaWxzOiBgVXNlciAke25vcm1hbGl6ZWRVc2VybmFtZX0gY29uc2VudGVkIHRvIHBvcnRmb2xpbyBjcmVhdGlvbmAsXG4gICAgICBtZXRhZGF0YTogeyB1c2VybmFtZTogbm9ybWFsaXplZFVzZXJuYW1lIH1cbiAgICB9KTtcblxuICAgIC8vIENoZWNrIGlmIHBvcnRmb2xpbyBhbHJlYWR5IGV4aXN0c1xuICAgIGNvbnN0IGV4aXN0aW5nUmVwbyA9IGF3YWl0IHRoaXMuZ2l0aHViUmVxdWVzdChcbiAgICAgIGAvcmVwb3MvJHtub3JtYWxpemVkVXNlcm5hbWV9LyR7dGhpcy5yZXBvc2l0b3J5TmFtZX1gXG4gICAgKTtcbiAgICBcbiAgICBpZiAoZXhpc3RpbmdSZXBvICYmIGV4aXN0aW5nUmVwby5odG1sX3VybCkge1xuICAgICAgbG9nZ2VyLmluZm8oYFBvcnRmb2xpbyBhbHJlYWR5IGV4aXN0cyBmb3IgJHtub3JtYWxpemVkVXNlcm5hbWV9YCk7XG4gICAgICByZXR1cm4gZXhpc3RpbmdSZXBvLmh0bWxfdXJsO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgcG9ydGZvbGlvIHJlcG9zaXRvcnlcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVwbyA9IGF3YWl0IHRoaXMuZ2l0aHViUmVxdWVzdChcbiAgICAgICAgJy91c2VyL3JlcG9zJyxcbiAgICAgICAgJ1BPU1QnLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogdGhpcy5yZXBvc2l0b3J5TmFtZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogUG9ydGZvbGlvUmVwb01hbmFnZXIuREVGQVVMVF9ERVNDUklQVElPTixcbiAgICAgICAgICBwcml2YXRlOiBmYWxzZSxcbiAgICAgICAgICBhdXRvX2luaXQ6IHRydWVcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgLy8gSW5pdGlhbGl6ZSBwb3J0Zm9saW8gc3RydWN0dXJlXG4gICAgICBhd2FpdCB0aGlzLmdlbmVyYXRlUG9ydGZvbGlvU3RydWN0dXJlKG5vcm1hbGl6ZWRVc2VybmFtZSk7XG5cbiAgICAgIHJldHVybiByZXBvLmh0bWxfdXJsO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIC8vIEhhbmRsZSByYWNlIGNvbmRpdGlvbjogaWYgcmVwb3NpdG9yeSB3YXMgY3JlYXRlZCBiZXR3ZWVuIG91ciBjaGVjayBhbmQgY3JlYXRpb24gYXR0ZW1wdFxuICAgICAgaWYgKGVycm9yLm1lc3NhZ2UgJiYgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnbmFtZSBhbHJlYWR5IGV4aXN0cycpKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBQb3J0Zm9saW8gcmVwb3NpdG9yeSBhbHJlYWR5IGV4aXN0cyBmb3IgJHtub3JtYWxpemVkVXNlcm5hbWV9IChyYWNlIGNvbmRpdGlvbiBoYW5kbGVkKWApO1xuICAgICAgICBcbiAgICAgICAgLy8gUmUtY2hlY2sgZm9yIHRoZSBleGlzdGluZyByZXBvc2l0b3J5IGFuZCByZXR1cm4gaXRzIFVSTFxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nUmVwbyA9IGF3YWl0IHRoaXMuZ2l0aHViUmVxdWVzdChcbiAgICAgICAgICAgIGAvcmVwb3MvJHtub3JtYWxpemVkVXNlcm5hbWV9LyR7dGhpcy5yZXBvc2l0b3J5TmFtZX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZXhpc3RpbmdSZXBvICYmIGV4aXN0aW5nUmVwby5odG1sX3VybCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nUmVwby5odG1sX3VybDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKHJlY2hlY2tFcnJvcikge1xuICAgICAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignUG9ydGZvbGlvUmVwb01hbmFnZXIucmVjaGVja0V4aXN0aW5nUmVwbycsIHJlY2hlY2tFcnJvciwgeyB1c2VybmFtZTogbm9ybWFsaXplZFVzZXJuYW1lIH0pO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBJZiB3ZSBjYW4ndCBnZXQgdGhlIGV4aXN0aW5nIHJlcG8sIHRocm93IGEgbW9yZSBzcGVjaWZpYyBlcnJvclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBvcnRmb2xpbyByZXBvc2l0b3J5IGFscmVhZHkgZXhpc3RzIGZvciAke25vcm1hbGl6ZWRVc2VybmFtZX0uIFBsZWFzZSBjaGVjayB5b3VyIEdpdEh1YiBhY2NvdW50LmApO1xuICAgICAgfVxuICAgICAgXG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyLmNyZWF0ZVBvcnRmb2xpb1JlcG8nLCBlcnJvciwgeyB1c2VybmFtZTogbm9ybWFsaXplZFVzZXJuYW1lIH0pO1xuICAgICAgdGhyb3cgRXJyb3JIYW5kbGVyLndyYXBFcnJvcihlcnJvciwgYEZhaWxlZCB0byBjcmVhdGUgcG9ydGZvbGlvIHJlcG9zaXRvcnkgZm9yICR7bm9ybWFsaXplZFVzZXJuYW1lfS4gJHtlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yIG9jY3VycmVkLid9YCwgRXJyb3JDYXRlZ29yeS5ORVRXT1JLX0VSUk9SKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBlbGVtZW50IHRvIHBvcnRmb2xpbyB3aXRoIEVYUExJQ0lUIHVzZXIgY29uc2VudFxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHVzZXIgZGVjbGluZXMgY29uc2VudCBvciBlbGVtZW50IGlzIGludmFsaWRcbiAgICovXG4gIGFzeW5jIHNhdmVFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50LCBjb25zZW50OiBib29sZWFuIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAvLyBDUklUSUNBTDogVmFsaWRhdGUgY29uc2VudCBpcyBleHBsaWNpdGx5IHByb3ZpZGVkXG4gICAgaWYgKGNvbnNlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25zZW50IGlzIHJlcXVpcmVkIHRvIHNhdmUgZWxlbWVudCcpO1xuICAgIH1cblxuICAgIGlmICghY29uc2VudCkge1xuICAgICAgbG9nZ2VyLmluZm8oYFVzZXIgZGVjbGluZWQgdG8gc2F2ZSBlbGVtZW50ICR7ZWxlbWVudC5pZH0gdG8gcG9ydGZvbGlvYCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgZGVjbGluZWQgdG8gc2F2ZSBlbGVtZW50IHRvIHBvcnRmb2xpbycpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGVsZW1lbnQgYmVmb3JlIHNhdmluZ1xuICAgIHRoaXMudmFsaWRhdGVFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgLy8gQ1JJVElDQUwgRklYOiBVc2UgYXV0aGVudGljYXRlZCB1c2VyJ3MgdXNlcm5hbWUsIE5PVCBlbGVtZW50IGF1dGhvciAoSXNzdWUgIzkxMylcbiAgICAvLyBUaGUgcG9ydGZvbGlvIGJlbG9uZ3MgdG8gdGhlIGF1dGhlbnRpY2F0ZWQgdXNlciwgbm90IHRoZSBlbGVtZW50J3MgYXV0aG9yXG4gICAgY29uc3QgdXNlcm5hbWUgPSBhd2FpdCB0aGlzLmdldFVzZXJuYW1lKCk7XG4gICAgbG9nZ2VyLmluZm8oYFVzZXIgY29uc2VudGVkIHRvIHNhdmUgZWxlbWVudCAke2VsZW1lbnQuaWR9IHRvIHBvcnRmb2xpb2ApO1xuICAgIFxuICAgIC8vIExPVyBGSVg6IEFkZCBzZWN1cml0eSBhdWRpdCBsb2dnaW5nIGZvciBlbGVtZW50IHNhdmUgKERNQ1AtU0VDLTAwNilcbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnRUxFTUVOVF9DUkVBVEVEJyxcbiAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgIHNvdXJjZTogJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyLnNhdmVFbGVtZW50JyxcbiAgICAgIGRldGFpbHM6IGBVc2VyIGNvbnNlbnRlZCB0byBzYXZlIGVsZW1lbnQgJHtlbGVtZW50LmlkfSB0byBwb3J0Zm9saW9gLFxuICAgICAgbWV0YWRhdGE6IHsgXG4gICAgICAgIGVsZW1lbnRJZDogZWxlbWVudC5pZCxcbiAgICAgICAgZWxlbWVudFR5cGU6IGVsZW1lbnQudHlwZSxcbiAgICAgICAgdXNlcm5hbWUgXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBHZW5lcmF0ZSBmaWxlIHBhdGggYmFzZWQgb24gZWxlbWVudCB0eXBlXG4gICAgLy8gRklYOiBEb24ndCBhZGQgJ3MnIC0gZWxlbWVudC50eXBlIGlzIGFscmVhZHkgcGx1cmFsIChlLmcuLCAncGVyc29uYXMnLCAnc2tpbGxzJylcbiAgICBjb25zdCBmaWxlTmFtZSA9IFBvcnRmb2xpb1JlcG9NYW5hZ2VyLmdlbmVyYXRlRmlsZU5hbWUoZWxlbWVudC5tZXRhZGF0YS5uYW1lKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGAke2VsZW1lbnQudHlwZX0vJHtmaWxlTmFtZX0ubWRgO1xuXG4gICAgLy8gUHJlcGFyZSBjb250ZW50IChjb3VsZCBiZSBtYXJrZG93biB3aXRoIGZyb250bWF0dGVyKVxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmZvcm1hdEVsZW1lbnRDb250ZW50KGVsZW1lbnQpO1xuICAgIFxuICAgIC8vIERJQUdOT1NUSUM6IExvZyBjb250ZW50IHNpemUgYmVmb3JlIHNlbmRpbmcgdG8gR2l0SHViXG4gICAgbG9nZ2VyLmRlYnVnKGBbQ09OVEVOVC1UUkFDRV0gU2F2aW5nIGVsZW1lbnQgJHtlbGVtZW50LmlkfSB0byBHaXRIdWIgLSBjb250ZW50IHNpemU6ICR7Y29udGVudC5sZW5ndGh9IGNoYXJzYCk7XG4gICAgbG9nZ2VyLmRlYnVnKGBbQ09OVEVOVC1UUkFDRV0gRmlyc3QgMjAwIGNoYXJzOiAke2NvbnRlbnQuc3Vic3RyaW5nKDAsIDIwMCl9YCk7XG4gICAgbG9nZ2VyLmRlYnVnKGBbQ09OVEVOVC1UUkFDRV0gTGFzdCAyMDAgY2hhcnM6ICR7Y29udGVudC5zdWJzdHJpbmcoTWF0aC5tYXgoMCwgY29udGVudC5sZW5ndGggLSAyMDApKX1gKTtcblxuICAgIC8vIFNhdmUgdG8gR2l0SHViXG4gICAgdHJ5IHtcbiAgICAgIC8vIEZpcnN0LCBjaGVjayBpZiBmaWxlIGV4aXN0cyB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBjcmVhdGUgb3IgdXBkYXRlXG4gICAgICBsZXQgZXhpc3RpbmdGaWxlID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGV4aXN0aW5nRmlsZSA9IGF3YWl0IHRoaXMuZ2l0aHViUmVxdWVzdChcbiAgICAgICAgICBgL3JlcG9zLyR7dXNlcm5hbWV9LyR7dGhpcy5yZXBvc2l0b3J5TmFtZX0vY29udGVudHMvJHtmaWxlUGF0aH1gXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChjaGVja0Vycm9yOiBhbnkpIHtcbiAgICAgICAgLy8gSU1QT1JUQU5UOiBBdXRoZW50aWNhdGlvbiBhbmQgcmF0ZSBsaW1pdCBlcnJvcnMgbXVzdCBiZSByZS10aHJvd24hXG4gICAgICAgIC8vIFRoZXNlIGFyZSBOT1QgXCJmaWxlIGRvZXNuJ3QgZXhpc3RcIiBzY2VuYXJpb3MgLSB0aGV5IGluZGljYXRlIHdlIGNhbid0XG4gICAgICAgIC8vIGFjY2VzcyB0aGUgQVBJIGF0IGFsbC4gT25seSA0MDQgKGFuZCBzaW1pbGFyKSBzaG91bGQgYmUgdHJlYXRlZCBhcyBcbiAgICAgICAgLy8gXCJmaWxlIGRvZXNuJ3QgZXhpc3RcIi4gVGhpcyBlbnN1cmVzIGF1dGggZXJyb3JzIGFyZSBwcm9wZXJseSByZXBvcnRlZFxuICAgICAgICAvLyB3aXRoIGNvcnJlY3QgZXJyb3IgY29kZXMgKGUuZy4sIFBPUlRGT0xJT19TWU5DXzAwMSBmb3IgYXV0aCBmYWlsdXJlcykuXG4gICAgICAgIC8vIFNlZSBQUiAjODQ2IGFuZCB0ZXN0OiBwb3J0Zm9saW8tc2luZ2xlLXVwbG9hZC5xYS50ZXN0LnRzXG4gICAgICAgIGlmIChjaGVja0Vycm9yLnN0YXR1cyA9PT0gNDAxIHx8IGNoZWNrRXJyb3IuY29kZSA9PT0gJ1BPUlRGT0xJT19TWU5DXzAwMScpIHtcbiAgICAgICAgICB0aHJvdyBjaGVja0Vycm9yOyAvLyBBdXRoZW50aWNhdGlvbiBlcnJvciAtIGRvbid0IGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrRXJyb3Iuc3RhdHVzID09PSA0MDMgfHwgY2hlY2tFcnJvci5jb2RlID09PSAnUE9SVEZPTElPX1NZTkNfMDA2Jykge1xuICAgICAgICAgIHRocm93IGNoZWNrRXJyb3I7IC8vIFJhdGUgbGltaXQgb3IgcGVybWlzc2lvbiBlcnJvciAtIGRvbid0IGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgLy8gRm9yIG90aGVyIGVycm9ycyAobGlrZSA0MDQpLCBhc3N1bWUgZmlsZSBkb2Vzbid0IGV4aXN0IGFuZCBjb250aW51ZVxuICAgICAgICAvLyB3aXRoIGZpbGUgY3JlYXRpb24uIFRoaXMgaXMgdGhlIGV4cGVjdGVkIGZsb3cgZm9yIG5ldyBmaWxlcy5cbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBGaWxlIGNoZWNrIHJldHVybmVkIGVycm9yIChsaWtlbHkgZG9lc24ndCBleGlzdCk6ICR7ZmlsZVBhdGh9YCk7XG4gICAgICAgIGV4aXN0aW5nRmlsZSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIERVUExJQ0FURSBERVRFQ1RJT04gKElzc3VlICM3OTIpOiBDaGVjayBpZiBjb250ZW50IGlzIGlkZW50aWNhbFxuICAgICAgaWYgKGV4aXN0aW5nRmlsZSAmJiBleGlzdGluZ0ZpbGUuY29udGVudCkge1xuICAgICAgICAvLyBEZWNvZGUgZXhpc3RpbmcgY29udGVudCBmcm9tIGJhc2U2NFxuICAgICAgICBjb25zdCBleGlzdGluZ0NvbnRlbnQgPSBCdWZmZXIuZnJvbShleGlzdGluZ0ZpbGUuY29udGVudCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCd1dGYtOCcpO1xuICAgICAgICBcbiAgICAgICAgLy8gQ29tcGFyZSB3aXRoIG5ldyBjb250ZW50XG4gICAgICAgIGlmIChleGlzdGluZ0NvbnRlbnQgPT09IGNvbnRlbnQpIHtcbiAgICAgICAgICBsb2dnZXIuaW5mbygnU2tpcHBpbmcgZHVwbGljYXRlIHBvcnRmb2xpbyB1cGxvYWQgLSBjb250ZW50IGlkZW50aWNhbCcsIHtcbiAgICAgICAgICAgIGVsZW1lbnRJZDogZWxlbWVudC5pZCxcbiAgICAgICAgICAgIGVsZW1lbnROYW1lOiBlbGVtZW50Lm1ldGFkYXRhLm5hbWUsXG4gICAgICAgICAgICBmaWxlUGF0aFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIFJldHVybiB0aGUgZXhpc3RpbmcgZmlsZSBVUkwgaW5zdGVhZCBvZiBjcmVhdGluZyBkdXBsaWNhdGUgY29tbWl0XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdVcmwgPSBleGlzdGluZ0ZpbGUuaHRtbF91cmwgfHwgXG4gICAgICAgICAgICBgaHR0cHM6Ly9naXRodWIuY29tLyR7dXNlcm5hbWV9LyR7dGhpcy5yZXBvc2l0b3J5TmFtZX0vYmxvYi9tYWluLyR7ZmlsZVBhdGh9YDtcbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4gZXhpc3RpbmdVcmw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIG9yIHVwZGF0ZSB0aGUgZmlsZSAob25seSBpZiBjb250ZW50IGlzIGRpZmZlcmVudClcbiAgICAgIC8vIERFQlVHOiBMb2cgd2hhdCB3ZSdyZSBhYm91dCB0byBzZW5kXG4gICAgICBsb2dnZXIuZGVidWcoYFtERUJVR10gQ3JlYXRpbmcvdXBkYXRpbmcgZmlsZS4gZXhpc3RpbmdGaWxlOiAkeyEhZXhpc3RpbmdGaWxlfSwgc2hhOiAke2V4aXN0aW5nRmlsZT8uc2hhfWApO1xuICAgICAgXG4gICAgICBjb25zdCByZXF1ZXN0Qm9keTogYW55ID0ge1xuICAgICAgICBtZXNzYWdlOiBleGlzdGluZ0ZpbGUgPyBcbiAgICAgICAgICBgVXBkYXRlICR7ZWxlbWVudC5tZXRhZGF0YS5uYW1lfSBpbiBwb3J0Zm9saW9gIDogXG4gICAgICAgICAgYEFkZCAke2VsZW1lbnQubWV0YWRhdGEubmFtZX0gdG8gcG9ydGZvbGlvYCxcbiAgICAgICAgY29udGVudDogQnVmZmVyLmZyb20oY29udGVudCkudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgICB9O1xuICAgICAgXG4gICAgICAvLyBPbmx5IGluY2x1ZGUgc2hhIGlmIHdlIGhhdmUgYW4gZXhpc3RpbmcgZmlsZSB3aXRoIGEgc2hhXG4gICAgICBpZiAoZXhpc3RpbmdGaWxlICYmIGV4aXN0aW5nRmlsZS5zaGEpIHtcbiAgICAgICAgcmVxdWVzdEJvZHkuc2hhID0gZXhpc3RpbmdGaWxlLnNoYTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5naXRodWJSZXF1ZXN0KFxuICAgICAgICBgL3JlcG9zLyR7dXNlcm5hbWV9LyR7dGhpcy5yZXBvc2l0b3J5TmFtZX0vY29udGVudHMvJHtmaWxlUGF0aH1gLFxuICAgICAgICAnUFVUJyxcbiAgICAgICAgcmVxdWVzdEJvZHlcbiAgICAgICk7XG5cbiAgICAgIC8vIEZJWDogR2l0SHViIEFQSSByZXNwb25zZSBzdHJ1Y3R1cmUgdmFyaWVzIC0gaGFuZGxlIGFsbCBjYXNlc1xuICAgICAgLy8gVGhlIHJlc3BvbnNlIG1heSBoYXZlIGNvbW1pdCBkYXRhIGF0IGRpZmZlcmVudCBsZXZlbHMgb3Igbm90IGF0IGFsbFxuICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdbUE9SVEZPTElPX1NZTkNfMDA0XSBHaXRIdWIgQVBJIHJldHVybmVkIG51bGwgcmVzcG9uc2UnLCB7XG4gICAgICAgICAgZWxlbWVudDogZWxlbWVudC5pZCxcbiAgICAgICAgICB1c2VybmFtZSxcbiAgICAgICAgICBmaWxlUGF0aFxuICAgICAgICB9KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBbUE9SVEZPTElPX1NZTkNfMDA0XSBHaXRIdWIgQVBJIHJldHVybmVkIG51bGwgcmVzcG9uc2UgZm9yICR7ZWxlbWVudC5tZXRhZGF0YS5uYW1lfWApO1xuICAgICAgfVxuXG4gICAgICAvLyBUcnkgbXVsdGlwbGUgcGF0aHMgdG8gZ2V0IHRoZSBjb21taXQgVVJMXG4gICAgICBsZXQgY29tbWl0VXJsOiBzdHJpbmc7XG4gICAgICBcbiAgICAgIC8vIFBhdGggMTogcmVzdWx0LmNvbW1pdC5odG1sX3VybCAoc3RhbmRhcmQgZm9yIGNvbnRlbnQgQVBJKVxuICAgICAgaWYgKHJlc3VsdC5jb21taXQ/Lmh0bWxfdXJsKSB7XG4gICAgICAgIGNvbW1pdFVybCA9IHJlc3VsdC5jb21taXQuaHRtbF91cmw7XG4gICAgICB9XG4gICAgICAvLyBQYXRoIDI6IHJlc3VsdC5jb250ZW50Lmh0bWxfdXJsIChzb21lIEFQSSByZXNwb25zZXMpXG4gICAgICBlbHNlIGlmIChyZXN1bHQuY29udGVudD8uaHRtbF91cmwpIHtcbiAgICAgICAgY29tbWl0VXJsID0gcmVzdWx0LmNvbnRlbnQuaHRtbF91cmw7XG4gICAgICB9XG4gICAgICAvLyBQYXRoIDM6IEdlbmVyYXRlIFVSTCBmcm9tIHJlc3BvbnNlIGRhdGFcbiAgICAgIGVsc2UgaWYgKHJlc3VsdC5jb250ZW50Py5wYXRoKSB7XG4gICAgICAgIGNvbW1pdFVybCA9IGBodHRwczovL2dpdGh1Yi5jb20vJHt1c2VybmFtZX0vJHt0aGlzLnJlcG9zaXRvcnlOYW1lfS9ibG9iL21haW4vJHtyZXN1bHQuY29udGVudC5wYXRofWA7XG4gICAgICB9XG4gICAgICAvLyBQYXRoIDQ6IEZhbGxiYWNrIHRvIHJlcG9zaXRvcnkgVVJMIChndWFyYW50ZWVkIHRvIGJlIHNldClcbiAgICAgIGVsc2Uge1xuICAgICAgICBsb2dnZXIud2FybignW1BPUlRGT0xJT19TWU5DXzAwNF0gQ291bGQgbm90IGV4dHJhY3QgY29tbWl0IFVSTCBmcm9tIEdpdEh1YiByZXNwb25zZSwgdXNpbmcgZmFsbGJhY2snLCB7XG4gICAgICAgICAgZWxlbWVudDogZWxlbWVudC5pZCxcbiAgICAgICAgICByZXNwb25zZUtleXM6IE9iamVjdC5rZXlzKHJlc3VsdCksXG4gICAgICAgICAgaGFzQ29tbWl0OiAhIXJlc3VsdC5jb21taXQsXG4gICAgICAgICAgaGFzQ29udGVudDogISFyZXN1bHQuY29udGVudFxuICAgICAgICB9KTtcbiAgICAgICAgY29tbWl0VXJsID0gYGh0dHBzOi8vZ2l0aHViLmNvbS8ke3VzZXJuYW1lfS8ke3RoaXMucmVwb3NpdG9yeU5hbWV9L3RyZWUvbWFpbi8ke2VsZW1lbnQudHlwZX1gO1xuICAgICAgfVxuXG4gICAgICBsb2dnZXIuZGVidWcoJ1N1Y2Nlc3NmdWxseSBzYXZlZCBlbGVtZW50IHRvIEdpdEh1YiBwb3J0Zm9saW8nLCB7XG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQuaWQsXG4gICAgICAgIHVzZXJuYW1lLFxuICAgICAgICBmaWxlUGF0aCxcbiAgICAgICAgY29tbWl0VXJsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGNvbW1pdFVybDtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAvLyBVc2UgZXJyb3IgY29kZSBpZiBhbHJlYWR5IHNldCBieSBnaXRodWJSZXF1ZXN0XG4gICAgICBsZXQgZXJyb3JDb2RlID0gZXJyb3IuY29kZSB8fCAnUE9SVEZPTElPX1NZTkNfMDA1JzsgLy8gRGVmYXVsdCBuZXR3b3JrIGVycm9yXG4gICAgICBsZXQgZW5oYW5jZWRNZXNzYWdlID0gJ0ZhaWxlZCB0byBzYXZlIGVsZW1lbnQgdG8gcG9ydGZvbGlvJztcbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgZXJyb3Igc3RhdHVzIGZpcnN0IChtb3JlIHJlbGlhYmxlIHRoYW4gbWVzc2FnZSBwYXJzaW5nKVxuICAgICAgaWYgKGVycm9yLnN0YXR1cykge1xuICAgICAgICBzd2l0Y2ggKGVycm9yLnN0YXR1cykge1xuICAgICAgICAgIGNhc2UgNDAxOlxuICAgICAgICAgICAgZXJyb3JDb2RlID0gJ1BPUlRGT0xJT19TWU5DXzAwMSc7XG4gICAgICAgICAgICBlbmhhbmNlZE1lc3NhZ2UgPSAnR2l0SHViIGF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gUGxlYXNlIHJlLWF1dGhlbnRpY2F0ZS4nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MDM6XG4gICAgICAgICAgICBpZiAoZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJ3JhdGUgbGltaXQnKSkge1xuICAgICAgICAgICAgICBlcnJvckNvZGUgPSAnUE9SVEZPTElPX1NZTkNfMDA2JztcbiAgICAgICAgICAgICAgZW5oYW5jZWRNZXNzYWdlID0gJ0dpdEh1YiBBUEkgcmF0ZSBsaW1pdCBleGNlZWRlZC4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZXJyb3JDb2RlID0gJ1BPUlRGT0xJT19TWU5DXzAwMSc7XG4gICAgICAgICAgICAgIGVuaGFuY2VkTWVzc2FnZSA9ICdHaXRIdWIgQVBJIGFjY2VzcyBmb3JiaWRkZW4uIENoZWNrIHRva2VuIHBlcm1pc3Npb25zLic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQwNDpcbiAgICAgICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDInO1xuICAgICAgICAgICAgZW5oYW5jZWRNZXNzYWdlID0gJ0dpdEh1YiBwb3J0Zm9saW8gcmVwb3NpdG9yeSBub3QgZm91bmQuIFBsZWFzZSBydW4gaW5pdF9wb3J0Zm9saW8gZmlyc3QuJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDIyOlxuICAgICAgICAgICAgZXJyb3JDb2RlID0gJ1BPUlRGT0xJT19TWU5DXzAwMyc7XG4gICAgICAgICAgICBlbmhhbmNlZE1lc3NhZ2UgPSAnUmVwb3NpdG9yeSB2YWxpZGF0aW9uIGZhaWxlZC4nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIEtlZXAgdGhlIGVycm9yIGNvZGUgZnJvbSBnaXRodWJSZXF1ZXN0IGlmIHNldFxuICAgICAgICAgICAgaWYgKCFlcnJvci5jb2RlKSB7XG4gICAgICAgICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFlcnJvci5jb2RlKSB7XG4gICAgICAgIC8vIEZhbGwgYmFjayB0byBtZXNzYWdlIHBhcnNpbmcgb25seSBpZiBubyBzdGF0dXMgY29kZSBhdmFpbGFibGVcbiAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2U/LmluY2x1ZGVzKCc0MDEnKSB8fCBlcnJvci5tZXNzYWdlPy5pbmNsdWRlcygnYXV0aGVudGljYXRpb24nKSkge1xuICAgICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDEnO1xuICAgICAgICAgIGVuaGFuY2VkTWVzc2FnZSA9ICdHaXRIdWIgYXV0aGVudGljYXRpb24gZmFpbGVkLiBQbGVhc2UgcmUtYXV0aGVudGljYXRlLic7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJzQwNCcpIHx8IGVycm9yLm1lc3NhZ2U/LmluY2x1ZGVzKCdub3QgZm91bmQnKSkge1xuICAgICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDInO1xuICAgICAgICAgIGVuaGFuY2VkTWVzc2FnZSA9ICdHaXRIdWIgcG9ydGZvbGlvIHJlcG9zaXRvcnkgbm90IGZvdW5kLiBQbGVhc2UgcnVuIGluaXRfcG9ydGZvbGlvIGZpcnN0Lic7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJzQwMycpIHx8IGVycm9yLm1lc3NhZ2U/LmluY2x1ZGVzKCdyYXRlIGxpbWl0JykpIHtcbiAgICAgICAgICBlcnJvckNvZGUgPSAnUE9SVEZPTElPX1NZTkNfMDA2JztcbiAgICAgICAgICBlbmhhbmNlZE1lc3NhZ2UgPSAnR2l0SHViIEFQSSByYXRlIGxpbWl0IGV4Y2VlZGVkLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLic7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJ0Nhbm5vdCByZWFkIHByb3BlcnRpZXMnKSkge1xuICAgICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDQnO1xuICAgICAgICAgIGVuaGFuY2VkTWVzc2FnZSA9IGBHaXRIdWIgQVBJIHJlc3BvbnNlIHBhcnNpbmcgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGxvZ2dlci5lcnJvcihgWyR7ZXJyb3JDb2RlfV0gJHtlbmhhbmNlZE1lc3NhZ2V9YCwgeyBcbiAgICAgICAgZWxlbWVudElkOiBlbGVtZW50LmlkLFxuICAgICAgICB1c2VybmFtZSxcbiAgICAgICAgb3JpZ2luYWxFcnJvcjogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgZXJyb3JTdGF0dXM6IGVycm9yLnN0YXR1cyxcbiAgICAgICAgc3RhY2s6IGVycm9yLnN0YWNrXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdQb3J0Zm9saW9SZXBvTWFuYWdlci5zYXZlRWxlbWVudFRvUmVwbycsIGVycm9yLCB7IFxuICAgICAgICBlbGVtZW50SWQ6IGVsZW1lbnQuaWQsXG4gICAgICAgIHVzZXJuYW1lLFxuICAgICAgICBlcnJvckNvZGUsXG4gICAgICAgIGVycm9yU3RhdHVzOiBlcnJvci5zdGF0dXNcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBUaHJvdyBlcnJvciB3aXRoIGNvZGUgZm9yIGJldHRlciBoYW5kbGluZyB1cHN0cmVhbVxuICAgICAgY29uc3Qgd3JhcHBlZEVycm9yID0gRXJyb3JIYW5kbGVyLndyYXBFcnJvcihlcnJvciwgYFske2Vycm9yQ29kZX1dICR7ZW5oYW5jZWRNZXNzYWdlfWAsIEVycm9yQ2F0ZWdvcnkuTkVUV09SS19FUlJPUik7XG4gICAgICAod3JhcHBlZEVycm9yIGFzIGFueSkuY29kZSA9IGVycm9yQ29kZTtcbiAgICAgICh3cmFwcGVkRXJyb3IgYXMgYW55KS5zdGF0dXMgPSBlcnJvci5zdGF0dXM7XG4gICAgICB0aHJvdyB3cmFwcGVkRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGluaXRpYWwgcG9ydGZvbGlvIHN0cnVjdHVyZSB3aXRoIFJFQURNRSBhbmQgZGlyZWN0b3JpZXNcbiAgICogU0VDVVJJVFk6IFVzZXJuYW1lIGFscmVhZHkgbm9ybWFsaXplZCBieSBjYWxsaW5nIG1ldGhvZHNcbiAgICovXG4gIGFzeW5jIGdlbmVyYXRlUG9ydGZvbGlvU3RydWN0dXJlKHVzZXJuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBDcmVhdGUgUkVBRE1FLm1kXG4gICAgY29uc3QgcmVhZG1lQ29udGVudCA9IGAjIERvbGxob3VzZU1DUCBQb3J0Zm9saW9cblxuVGhpcyBpcyBteSBwZXJzb25hbCBjb2xsZWN0aW9uIG9mIERvbGxob3VzZU1DUCBlbGVtZW50cy5cblxuIyMgU3RydWN0dXJlXG5cbi0gKipwZXJzb25hcy8qKiAtIEJlaGF2aW9yYWwgcHJvZmlsZXNcbi0gKipza2lsbHMvKiogLSBEaXNjcmV0ZSBjYXBhYmlsaXRpZXMgIFxuLSAqKnRlbXBsYXRlcy8qKiAtIFJldXNhYmxlIGNvbnRlbnQgc3RydWN0dXJlc1xuLSAqKmFnZW50cy8qKiAtIEF1dG9ub21vdXMgYWN0b3JzXG4tICoqbWVtb3JpZXMvKiogLSBQZXJzaXN0ZW50IGNvbnRleHRcbi0gKiplbnNlbWJsZXMvKiogLSBFbGVtZW50IGdyb3Vwc1xuXG4jIyBVc2FnZVxuXG5UaGVzZSBlbGVtZW50cyBjYW4gYmUgaW1wb3J0ZWQgaW50byB5b3VyIERvbGxob3VzZU1DUCBpbnN0YWxsYXRpb24uXG5cbi0tLVxuKkdlbmVyYXRlZCBieSBEb2xsaG91c2VNQ1AqXG5gO1xuXG4gICAgYXdhaXQgdGhpcy5naXRodWJSZXF1ZXN0KFxuICAgICAgYC9yZXBvcy8ke3VzZXJuYW1lfS8ke3RoaXMucmVwb3NpdG9yeU5hbWV9L2NvbnRlbnRzL1JFQURNRS5tZGAsXG4gICAgICAnUFVUJyxcbiAgICAgIHtcbiAgICAgICAgbWVzc2FnZTogJ0luaXRpYWxpemUgcG9ydGZvbGlvIHN0cnVjdHVyZScsXG4gICAgICAgIGNvbnRlbnQ6IEJ1ZmZlci5mcm9tKHJlYWRtZUNvbnRlbnQpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgZGlyZWN0b3J5IHBsYWNlaG9sZGVyc1xuICAgIGNvbnN0IGRpcmVjdG9yaWVzID0gWydwZXJzb25hcycsICdza2lsbHMnLCAndGVtcGxhdGVzJywgJ2FnZW50cycsICdtZW1vcmllcycsICdlbnNlbWJsZXMnXTtcbiAgICBcbiAgICBmb3IgKGNvbnN0IGRpciBvZiBkaXJlY3Rvcmllcykge1xuICAgICAgYXdhaXQgdGhpcy5naXRodWJSZXF1ZXN0KFxuICAgICAgICBgL3JlcG9zLyR7dXNlcm5hbWV9LyR7dGhpcy5yZXBvc2l0b3J5TmFtZX0vY29udGVudHMvJHtkaXJ9Ly5naXRrZWVwYCxcbiAgICAgICAgJ1BVVCcsXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOiBgQ3JlYXRlICR7ZGlyfSBkaXJlY3RvcnlgLFxuICAgICAgICAgIGNvbnRlbnQ6IEJ1ZmZlci5mcm9tKCcnKS50b1N0cmluZygnYmFzZTY0JylcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgZWxlbWVudCBiZWZvcmUgc2F2aW5nXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgZWxlbWVudCBpcyBpbnZhbGlkXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlRWxlbWVudChlbGVtZW50OiBJRWxlbWVudCk6IHZvaWQge1xuICAgIGlmICghZWxlbWVudC5tZXRhZGF0YS5uYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZWxlbWVudDogbmFtZSBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIGlmICghZWxlbWVudC5pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGVsZW1lbnQ6IGlkIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCFlbGVtZW50LnR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBlbGVtZW50OiB0eXBlIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHNhZmUgZmlsZW5hbWUgZnJvbSBlbGVtZW50IG5hbWVcbiAgICogU0VDVVJJVFk6IEFkZGl0aW9uYWwgVW5pY29kZSBub3JtYWxpemF0aW9uIGZvciBmaWxlbmFtZXNcbiAgICogU0VDVVJJVFkgRklYOiBGaXhlZCBSZURvUyB2dWxuZXJhYmlsaXR5IHdpdGggaW5wdXQgbGVuZ3RoIGxpbWl0IGFuZCBvcHRpbWl6ZWQgcmVnZXhcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2VuZXJhdGVGaWxlTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIFNFQ1VSSVRZIEZJWDogTGltaXQgaW5wdXQgbGVuZ3RoIHRvIHByZXZlbnQgUmVEb1MgYXR0YWNrc1xuICAgIC8vIEV2ZW4gd2l0aCBvcHRpbWl6ZWQgcmVnZXgsIHZlcnkgbG9uZyBpbnB1dHMgY291bGQgY2F1c2UgcGVyZm9ybWFuY2UgaXNzdWVzXG4gICAgY29uc3QgTUFYX0ZJTEVOQU1FX0xFTkdUSCA9IDI1NTsgLy8gQ29tbW9uIGZpbGVzeXN0ZW0gbGltaXRcbiAgICBcbiAgICAvLyBOb3JtYWxpemUgdG8gcHJldmVudCBVbmljb2RlIGF0dGFja3MgaW4gZmlsZW5hbWVzXG4gICAgY29uc3Qgbm9ybWFsaXplZE5hbWUgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShuYW1lKS5ub3JtYWxpemVkQ29udGVudDtcbiAgICBcbiAgICAvLyBUcnVuY2F0ZSB0byBzYWZlIGxlbmd0aCBCRUZPUkUgcmVnZXggb3BlcmF0aW9uc1xuICAgIGNvbnN0IHRydW5jYXRlZE5hbWUgPSBub3JtYWxpemVkTmFtZS5zbGljZSgwLCBNQVhfRklMRU5BTUVfTEVOR1RIKTtcbiAgICBcbiAgICAvLyBTRUNVUklUWSBGSVg6IE9wdGltaXplZCByZWdleCBvcGVyYXRpb25zIHRvIHByZXZlbnQgUmVEb1NcbiAgICAvLyAxLiBDb252ZXJ0IG5vbi1hbHBoYW51bWVyaWMgc2VxdWVuY2VzIHRvIHNpbmdsZSBkYXNoXG4gICAgLy8gMi4gUmVtb3ZlIGxlYWRpbmcvdHJhaWxpbmcgZGFzaGVzIGluIGEgc2luZ2xlIHBhc3MgdXNpbmcgdHJpbVxuICAgIGNvbnN0IHNhZmVOYW1lID0gdHJ1bmNhdGVkTmFtZVxuICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgIC5yZXBsYWNlQWxsKC9bXmEtejAtOV0rL2csICctJylcbiAgICAgIC5yZXBsYWNlKC9eLSsvLCAnJykgIC8vIFJlbW92ZSBsZWFkaW5nIGRhc2hlc1xuICAgICAgLnJlcGxhY2UoLy0rJC8sICcnKTsgLy8gUmVtb3ZlIHRyYWlsaW5nIGRhc2hlc1xuICAgIFxuICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgZmlsZW5hbWUgKG5vdCBlbXB0eSBhZnRlciBjbGVhbmluZylcbiAgICByZXR1cm4gc2FmZU5hbWUgfHwgJ3VubmFtZWQnO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBlbGVtZW50IGNvbnRlbnQgZm9yIHN0b3JhZ2VcbiAgICovXG4gIHByaXZhdGUgZm9ybWF0RWxlbWVudENvbnRlbnQoZWxlbWVudDogSUVsZW1lbnQpOiBzdHJpbmcge1xuICAgIC8vIFNlcmlhbGl6ZSB0aGUgZWxlbWVudCBvciBjcmVhdGUgYmFzaWMgbWFya2Rvd25cbiAgICBpZiAoZWxlbWVudC5zZXJpYWxpemUpIHtcbiAgICAgIHJldHVybiBlbGVtZW50LnNlcmlhbGl6ZSgpO1xuICAgIH1cbiAgICAvLyBGYWxsYmFjayB0byBiYXNpYyBtYXJrZG93biBmb3JtYXRcbiAgICByZXR1cm4gYCMgJHtlbGVtZW50Lm1ldGFkYXRhLm5hbWV9XFxuXFxuJHtlbGVtZW50Lm1ldGFkYXRhLmRlc2NyaXB0aW9uIHx8ICcnfWA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBhdXRoZW50aWNhdGVkIHVzZXIncyB1c2VybmFtZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRVc2VybmFtZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5naXRodWJSZXF1ZXN0KCcvdXNlcicpO1xuICAgIGlmICghcmVzcG9uc2UgfHwgIXJlc3BvbnNlLmxvZ2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBnZXQgR2l0SHViIHVzZXJuYW1lJyk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZS5sb2dpbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZmlsZSBjb250ZW50IGZyb20gR2l0SHViIHJlcG9zaXRvcnlcbiAgICogVXNlZCBmb3IgcHVsbCBvcGVyYXRpb25zIHRvIGRvd25sb2FkIGVsZW1lbnRzXG4gICAqL1xuICBhc3luYyBnZXRGaWxlQ29udGVudChwYXRoOiBzdHJpbmcsIHVzZXJuYW1lPzogc3RyaW5nLCByZXBvc2l0b3J5Pzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0cnkge1xuICAgICAgLy8gVXNlIHByb3ZpZGVkIHVzZXJuYW1lL3JlcG9zaXRvcnkgb3IgZGVmYXVsdHNcbiAgICAgIGNvbnN0IHJlcG9Vc2VyID0gdXNlcm5hbWUgfHwgYXdhaXQgdGhpcy5nZXRVc2VybmFtZSgpO1xuICAgICAgY29uc3QgcmVwb05hbWUgPSByZXBvc2l0b3J5IHx8IHRoaXMucmVwb3NpdG9yeU5hbWU7XG4gICAgICBcbiAgICAgIGxvZ2dlci5pbmZvKCdGZXRjaGluZyBmaWxlIGNvbnRlbnQgZnJvbSBHaXRIdWInLCB7IFxuICAgICAgICBwYXRoLCBcbiAgICAgICAgdXNlcm5hbWU6IHJlcG9Vc2VyLCBcbiAgICAgICAgcmVwb3NpdG9yeTogcmVwb05hbWUgXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdpdGh1YlJlcXVlc3QoXG4gICAgICAgIGAvcmVwb3MvJHtyZXBvVXNlcn0vJHtyZXBvTmFtZX0vY29udGVudHMvJHtwYXRofWBcbiAgICAgICk7XG5cbiAgICAgIGlmICghcmVzcG9uc2UgfHwgIXJlc3BvbnNlLmNvbnRlbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBjb250ZW50IGZvdW5kIGF0IHBhdGg6ICR7cGF0aH1gKTtcbiAgICAgIH1cblxuICAgICAgLy8gRGVjb2RlIGJhc2U2NCBjb250ZW50XG4gICAgICBjb25zdCBkZWNvZGVkQ29udGVudCA9IEJ1ZmZlci5mcm9tKHJlc3BvbnNlLmNvbnRlbnQsICdiYXNlNjQnKS50b1N0cmluZygndXRmLTgnKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIGRlY29kZWRDb250ZW50O1xuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGdldCBmaWxlIGNvbnRlbnQgZnJvbSBHaXRIdWInLCB7IFxuICAgICAgICBlcnJvciwgXG4gICAgICAgIHBhdGggXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJzQwNCcpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlIG5vdCBmb3VuZCBhdCBwYXRoOiAke3BhdGh9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJzQwMScpIHx8IGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJzQwMycpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBdXRoZW50aWNhdGlvbiBmYWlsZWQuIFBsZWFzZSBjaGVjayB5b3VyIEdpdEh1YiB0b2tlbi5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbn0iXX0=
|