@dollhousemcp/mcp-server
Version:
DollhouseMCP - A Model Context Protocol (MCP) server that enables dynamic AI persona management from markdown files, allowing Claude and other compatible AI assistants to activate and switch between different behavioral personas.
230 lines • 24.9 kB
JavaScript
/**
* Collection seeder for anonymous/offline browsing
* Provides basic collection data that doesn't require GitHub authentication
*/
/**
* Basic collection data that can be used without GitHub API access
* This provides a minimal set of well-known collection items
*/
export class CollectionSeeder {
// Cache the seed data as a static property for memory efficiency
static cachedSeedData = null;
/**
* Get seed data for the collection cache
* This includes popular/essential items that are commonly requested
* Data is cached as a static property to avoid recreation on every call
*/
static getSeedData() {
// Return cached data if available
if (CollectionSeeder.cachedSeedData) {
return CollectionSeeder.cachedSeedData;
}
// Create and cache the seed data
CollectionSeeder.cachedSeedData = [
// Popular Personas
{
name: 'creative-writer.md',
path: 'library/personas/creative-writer.md',
sha: 'seed-data',
last_modified: new Date().toISOString()
},
{
name: 'eli5-explainer.md',
path: 'library/personas/eli5-explainer.md',
sha: 'seed-data',
last_modified: new Date().toISOString()
},
{
name: 'debug-detective.md',
path: 'library/personas/debug-detective.md',
sha: 'seed-data',
last_modified: new Date().toISOString()
},
{
name: 'technical-analyst.md',
path: 'library/personas/technical-analyst.md',
sha: 'seed-data',
last_modified: new Date().toISOString()
},
{
name: 'business-consultant.md',
path: 'library/personas/business-consultant.md',
sha: 'seed-data',
last_modified: new Date().toISOString()
},
{
name: 'security-analyst.md',
path: 'library/personas/security-analyst.md',
sha: 'seed-data',
last_modified: new Date().toISOString()
},
// Popular Skills
{
name: 'code-review.md',
path: 'library/skills/code-review.md',
sha: 'seed-data',
last_modified: new Date().toISOString()
},
{
name: 'creative-writing.md',
path: 'library/skills/creative-writing.md',
sha: 'seed-data',
last_modified: new Date().toISOString()
},
{
name: 'data-analysis.md',
path: 'library/skills/data-analysis.md',
sha: 'seed-data',
last_modified: new Date().toISOString()
},
{
name: 'research.md',
path: 'library/skills/research.md',
sha: 'seed-data',
last_modified: new Date().toISOString()
},
{
name: 'translation.md',
path: 'library/skills/translation.md',
sha: 'seed-data',
last_modified: new Date().toISOString()
},
{
name: 'threat-modeling.md',
path: 'library/skills/threat-modeling.md',
sha: 'seed-data',
last_modified: new Date().toISOString()
},
{
name: 'penetration-testing.md',
path: 'library/skills/penetration-testing.md',
sha: 'seed-data',
last_modified: new Date().toISOString()
},
// Popular Agents
{
name: 'code-reviewer.md',
path: 'library/agents/code-reviewer.md',
sha: 'seed-data',
last_modified: new Date().toISOString()
},
{
name: 'research-assistant.md',
path: 'library/agents/research-assistant.md',
sha: 'seed-data',
last_modified: new Date().toISOString()
},
{
name: 'task-manager.md',
path: 'library/agents/task-manager.md',
sha: 'seed-data',
last_modified: new Date().toISOString()
},
// Popular Templates
{
name: 'code-documentation.md',
path: 'library/templates/code-documentation.md',
sha: 'seed-data',
last_modified: new Date().toISOString()
},
{
name: 'email-professional.md',
path: 'library/templates/email-professional.md',
sha: 'seed-data',
last_modified: new Date().toISOString()
},
{
name: 'meeting-notes.md',
path: 'library/templates/meeting-notes.md',
sha: 'seed-data',
last_modified: new Date().toISOString()
},
{
name: 'project-brief.md',
path: 'library/templates/project-brief.md',
sha: 'seed-data',
last_modified: new Date().toISOString()
},
{
name: 'report-executive.md',
path: 'library/templates/report-executive.md',
sha: 'seed-data',
last_modified: new Date().toISOString()
},
{
name: 'penetration-test-report.md',
path: 'library/templates/penetration-test-report.md',
sha: 'seed-data',
last_modified: new Date().toISOString()
},
{
name: 'security-vulnerability-report.md',
path: 'library/templates/security-vulnerability-report.md',
sha: 'seed-data',
last_modified: new Date().toISOString()
},
{
name: 'threat-assessment-report.md',
path: 'library/templates/threat-assessment-report.md',
sha: 'seed-data',
last_modified: new Date().toISOString()
},
// Popular Ensembles
{
name: 'business-advisor.md',
path: 'library/ensembles/business-advisor.md',
sha: 'seed-data',
last_modified: new Date().toISOString()
},
{
name: 'creative-studio.md',
path: 'library/ensembles/creative-studio.md',
sha: 'seed-data',
last_modified: new Date().toISOString()
},
{
name: 'development-team.md',
path: 'library/ensembles/development-team.md',
sha: 'seed-data',
last_modified: new Date().toISOString()
},
{
name: 'security-analysis-team.md',
path: 'library/ensembles/security-analysis-team.md',
sha: 'seed-data',
last_modified: new Date().toISOString()
}
];
return CollectionSeeder.cachedSeedData;
}
/**
* Get collection statistics from seed data
*/
static getSeedStats() {
const seedData = this.getSeedData();
const typeCount = new Map();
seedData.forEach(item => {
// Extract type from path (library/personas/name.md -> personas)
const pathParts = item.path.split('/');
const type = pathParts[1] || 'unknown';
typeCount.set(type, (typeCount.get(type) || 0) + 1);
});
return {
total: seedData.length,
byType: Object.fromEntries(typeCount)
};
}
/**
* Check if an item is available in seed data
*/
static isItemInSeedData(path) {
return this.getSeedData().some(item => item.path === path);
}
/**
* Get seed item by path
*/
static getSeedItem(path) {
return this.getSeedData().find(item => item.path === path);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvblNlZWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2xsZWN0aW9uL0NvbGxlY3Rpb25TZWVkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBSUg7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixpRUFBaUU7SUFDekQsTUFBTSxDQUFDLGNBQWMsR0FBNEIsSUFBSSxDQUFDO0lBRTlEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsV0FBVztRQUNoQixrQ0FBa0M7UUFDbEMsSUFBSSxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQyxPQUFPLGdCQUFnQixDQUFDLGNBQWMsQ0FBQztRQUN6QyxDQUFDO1FBRUQsaUNBQWlDO1FBQ2pDLGdCQUFnQixDQUFDLGNBQWMsR0FBRztZQUNoQyxtQkFBbUI7WUFDbkI7Z0JBQ0UsSUFBSSxFQUFFLG9CQUFvQjtnQkFDMUIsSUFBSSxFQUFFLHFDQUFxQztnQkFDM0MsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUN4QztZQUNEO2dCQUNFLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLElBQUksRUFBRSxvQ0FBb0M7Z0JBQzFDLEdBQUcsRUFBRSxXQUFXO2dCQUNoQixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDeEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsb0JBQW9CO2dCQUMxQixJQUFJLEVBQUUscUNBQXFDO2dCQUMzQyxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLHNCQUFzQjtnQkFDNUIsSUFBSSxFQUFFLHVDQUF1QztnQkFDN0MsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUN4QztZQUNEO2dCQUNFLElBQUksRUFBRSx3QkFBd0I7Z0JBQzlCLElBQUksRUFBRSx5Q0FBeUM7Z0JBQy9DLEdBQUcsRUFBRSxXQUFXO2dCQUNoQixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDeEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUscUJBQXFCO2dCQUMzQixJQUFJLEVBQUUsc0NBQXNDO2dCQUM1QyxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBRUQsaUJBQWlCO1lBQ2pCO2dCQUNFLElBQUksRUFBRSxnQkFBZ0I7Z0JBQ3RCLElBQUksRUFBRSwrQkFBK0I7Z0JBQ3JDLEdBQUcsRUFBRSxXQUFXO2dCQUNoQixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDeEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUscUJBQXFCO2dCQUMzQixJQUFJLEVBQUUsb0NBQW9DO2dCQUMxQyxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLGtCQUFrQjtnQkFDeEIsSUFBSSxFQUFFLGlDQUFpQztnQkFDdkMsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUN4QztZQUNEO2dCQUNFLElBQUksRUFBRSxhQUFhO2dCQUNuQixJQUFJLEVBQUUsNEJBQTRCO2dCQUNsQyxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLGdCQUFnQjtnQkFDdEIsSUFBSSxFQUFFLCtCQUErQjtnQkFDckMsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUN4QztZQUNEO2dCQUNFLElBQUksRUFBRSxvQkFBb0I7Z0JBQzFCLElBQUksRUFBRSxtQ0FBbUM7Z0JBQ3pDLEdBQUcsRUFBRSxXQUFXO2dCQUNoQixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDeEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsd0JBQXdCO2dCQUM5QixJQUFJLEVBQUUsdUNBQXVDO2dCQUM3QyxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBRUQsaUJBQWlCO1lBQ2pCO2dCQUNFLElBQUksRUFBRSxrQkFBa0I7Z0JBQ3hCLElBQUksRUFBRSxpQ0FBaUM7Z0JBQ3ZDLEdBQUcsRUFBRSxXQUFXO2dCQUNoQixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDeEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsdUJBQXVCO2dCQUM3QixJQUFJLEVBQUUsc0NBQXNDO2dCQUM1QyxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLGlCQUFpQjtnQkFDdkIsSUFBSSxFQUFFLGdDQUFnQztnQkFDdEMsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUN4QztZQUVELG9CQUFvQjtZQUNwQjtnQkFDRSxJQUFJLEVBQUUsdUJBQXVCO2dCQUM3QixJQUFJLEVBQUUseUNBQXlDO2dCQUMvQyxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLHVCQUF1QjtnQkFDN0IsSUFBSSxFQUFFLHlDQUF5QztnQkFDL0MsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUN4QztZQUNEO2dCQUNFLElBQUksRUFBRSxrQkFBa0I7Z0JBQ3hCLElBQUksRUFBRSxvQ0FBb0M7Z0JBQzFDLEdBQUcsRUFBRSxXQUFXO2dCQUNoQixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDeEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsa0JBQWtCO2dCQUN4QixJQUFJLEVBQUUsb0NBQW9DO2dCQUMxQyxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLHFCQUFxQjtnQkFDM0IsSUFBSSxFQUFFLHVDQUF1QztnQkFDN0MsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUN4QztZQUNEO2dCQUNFLElBQUksRUFBRSw0QkFBNEI7Z0JBQ2xDLElBQUksRUFBRSw4Q0FBOEM7Z0JBQ3BELEdBQUcsRUFBRSxXQUFXO2dCQUNoQixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDeEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsa0NBQWtDO2dCQUN4QyxJQUFJLEVBQUUsb0RBQW9EO2dCQUMxRCxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLDZCQUE2QjtnQkFDbkMsSUFBSSxFQUFFLCtDQUErQztnQkFDckQsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUN4QztZQUVELG9CQUFvQjtZQUNwQjtnQkFDRSxJQUFJLEVBQUUscUJBQXFCO2dCQUMzQixJQUFJLEVBQUUsdUNBQXVDO2dCQUM3QyxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLG9CQUFvQjtnQkFDMUIsSUFBSSxFQUFFLHNDQUFzQztnQkFDNUMsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUN4QztZQUNEO2dCQUNFLElBQUksRUFBRSxxQkFBcUI7Z0JBQzNCLElBQUksRUFBRSx1Q0FBdUM7Z0JBQzdDLEdBQUcsRUFBRSxXQUFXO2dCQUNoQixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDeEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsMkJBQTJCO2dCQUNqQyxJQUFJLEVBQUUsNkNBQTZDO2dCQUNuRCxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1NBQ0YsQ0FBQztRQUVGLE9BQU8sZ0JBQWdCLENBQUMsY0FBYyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxZQUFZO1FBQ2pCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQyxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUU1QyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RCLGdFQUFnRTtZQUNoRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QyxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO1lBQ3ZDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU87WUFDTCxLQUFLLEVBQUUsUUFBUSxDQUFDLE1BQU07WUFDdEIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDO1NBQ3RDLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBWTtRQUNsQyxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBWTtRQUM3QixPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQzdELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbGxlY3Rpb24gc2VlZGVyIGZvciBhbm9ueW1vdXMvb2ZmbGluZSBicm93c2luZ1xuICogUHJvdmlkZXMgYmFzaWMgY29sbGVjdGlvbiBkYXRhIHRoYXQgZG9lc24ndCByZXF1aXJlIEdpdEh1YiBhdXRoZW50aWNhdGlvblxuICovXG5cbmltcG9ydCB7IENvbGxlY3Rpb25JdGVtIH0gZnJvbSAnLi4vY2FjaGUvQ29sbGVjdGlvbkNhY2hlLmpzJztcblxuLyoqXG4gKiBCYXNpYyBjb2xsZWN0aW9uIGRhdGEgdGhhdCBjYW4gYmUgdXNlZCB3aXRob3V0IEdpdEh1YiBBUEkgYWNjZXNzXG4gKiBUaGlzIHByb3ZpZGVzIGEgbWluaW1hbCBzZXQgb2Ygd2VsbC1rbm93biBjb2xsZWN0aW9uIGl0ZW1zXG4gKi9cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uU2VlZGVyIHtcbiAgLy8gQ2FjaGUgdGhlIHNlZWQgZGF0YSBhcyBhIHN0YXRpYyBwcm9wZXJ0eSBmb3IgbWVtb3J5IGVmZmljaWVuY3lcbiAgcHJpdmF0ZSBzdGF0aWMgY2FjaGVkU2VlZERhdGE6IENvbGxlY3Rpb25JdGVtW10gfCBudWxsID0gbnVsbDtcbiAgXG4gIC8qKlxuICAgKiBHZXQgc2VlZCBkYXRhIGZvciB0aGUgY29sbGVjdGlvbiBjYWNoZVxuICAgKiBUaGlzIGluY2x1ZGVzIHBvcHVsYXIvZXNzZW50aWFsIGl0ZW1zIHRoYXQgYXJlIGNvbW1vbmx5IHJlcXVlc3RlZFxuICAgKiBEYXRhIGlzIGNhY2hlZCBhcyBhIHN0YXRpYyBwcm9wZXJ0eSB0byBhdm9pZCByZWNyZWF0aW9uIG9uIGV2ZXJ5IGNhbGxcbiAgICovXG4gIHN0YXRpYyBnZXRTZWVkRGF0YSgpOiBDb2xsZWN0aW9uSXRlbVtdIHtcbiAgICAvLyBSZXR1cm4gY2FjaGVkIGRhdGEgaWYgYXZhaWxhYmxlXG4gICAgaWYgKENvbGxlY3Rpb25TZWVkZXIuY2FjaGVkU2VlZERhdGEpIHtcbiAgICAgIHJldHVybiBDb2xsZWN0aW9uU2VlZGVyLmNhY2hlZFNlZWREYXRhO1xuICAgIH1cbiAgICBcbiAgICAvLyBDcmVhdGUgYW5kIGNhY2hlIHRoZSBzZWVkIGRhdGFcbiAgICBDb2xsZWN0aW9uU2VlZGVyLmNhY2hlZFNlZWREYXRhID0gW1xuICAgICAgLy8gUG9wdWxhciBQZXJzb25hc1xuICAgICAge1xuICAgICAgICBuYW1lOiAnY3JlYXRpdmUtd3JpdGVyLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvcGVyc29uYXMvY3JlYXRpdmUtd3JpdGVyLm1kJyxcbiAgICAgICAgc2hhOiAnc2VlZC1kYXRhJyxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnZWxpNS1leHBsYWluZXIubWQnLFxuICAgICAgICBwYXRoOiAnbGlicmFyeS9wZXJzb25hcy9lbGk1LWV4cGxhaW5lci5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2RlYnVnLWRldGVjdGl2ZS5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L3BlcnNvbmFzL2RlYnVnLWRldGVjdGl2ZS5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3RlY2huaWNhbC1hbmFseXN0Lm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvcGVyc29uYXMvdGVjaG5pY2FsLWFuYWx5c3QubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdidXNpbmVzcy1jb25zdWx0YW50Lm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvcGVyc29uYXMvYnVzaW5lc3MtY29uc3VsdGFudC5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3NlY3VyaXR5LWFuYWx5c3QubWQnLFxuICAgICAgICBwYXRoOiAnbGlicmFyeS9wZXJzb25hcy9zZWN1cml0eS1hbmFseXN0Lm1kJyxcbiAgICAgICAgc2hhOiAnc2VlZC1kYXRhJyxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAgXG4gICAgICAvLyBQb3B1bGFyIFNraWxsc1xuICAgICAge1xuICAgICAgICBuYW1lOiAnY29kZS1yZXZpZXcubWQnLFxuICAgICAgICBwYXRoOiAnbGlicmFyeS9za2lsbHMvY29kZS1yZXZpZXcubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdjcmVhdGl2ZS13cml0aW5nLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvc2tpbGxzL2NyZWF0aXZlLXdyaXRpbmcubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdkYXRhLWFuYWx5c2lzLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvc2tpbGxzL2RhdGEtYW5hbHlzaXMubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdyZXNlYXJjaC5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L3NraWxscy9yZXNlYXJjaC5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3RyYW5zbGF0aW9uLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvc2tpbGxzL3RyYW5zbGF0aW9uLm1kJyxcbiAgICAgICAgc2hhOiAnc2VlZC1kYXRhJyxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAndGhyZWF0LW1vZGVsaW5nLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvc2tpbGxzL3RocmVhdC1tb2RlbGluZy5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3BlbmV0cmF0aW9uLXRlc3RpbmcubWQnLFxuICAgICAgICBwYXRoOiAnbGlicmFyeS9za2lsbHMvcGVuZXRyYXRpb24tdGVzdGluZy5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIFxuICAgICAgLy8gUG9wdWxhciBBZ2VudHNcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2NvZGUtcmV2aWV3ZXIubWQnLFxuICAgICAgICBwYXRoOiAnbGlicmFyeS9hZ2VudHMvY29kZS1yZXZpZXdlci5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3Jlc2VhcmNoLWFzc2lzdGFudC5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L2FnZW50cy9yZXNlYXJjaC1hc3Npc3RhbnQubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICd0YXNrLW1hbmFnZXIubWQnLFxuICAgICAgICBwYXRoOiAnbGlicmFyeS9hZ2VudHMvdGFzay1tYW5hZ2VyLm1kJyxcbiAgICAgICAgc2hhOiAnc2VlZC1kYXRhJyxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAgXG4gICAgICAvLyBQb3B1bGFyIFRlbXBsYXRlc1xuICAgICAge1xuICAgICAgICBuYW1lOiAnY29kZS1kb2N1bWVudGF0aW9uLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvdGVtcGxhdGVzL2NvZGUtZG9jdW1lbnRhdGlvbi5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2VtYWlsLXByb2Zlc3Npb25hbC5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L3RlbXBsYXRlcy9lbWFpbC1wcm9mZXNzaW9uYWwubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdtZWV0aW5nLW5vdGVzLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvdGVtcGxhdGVzL21lZXRpbmctbm90ZXMubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdwcm9qZWN0LWJyaWVmLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvdGVtcGxhdGVzL3Byb2plY3QtYnJpZWYubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdyZXBvcnQtZXhlY3V0aXZlLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvdGVtcGxhdGVzL3JlcG9ydC1leGVjdXRpdmUubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdwZW5ldHJhdGlvbi10ZXN0LXJlcG9ydC5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L3RlbXBsYXRlcy9wZW5ldHJhdGlvbi10ZXN0LXJlcG9ydC5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3NlY3VyaXR5LXZ1bG5lcmFiaWxpdHktcmVwb3J0Lm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvdGVtcGxhdGVzL3NlY3VyaXR5LXZ1bG5lcmFiaWxpdHktcmVwb3J0Lm1kJyxcbiAgICAgICAgc2hhOiAnc2VlZC1kYXRhJyxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAndGhyZWF0LWFzc2Vzc21lbnQtcmVwb3J0Lm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvdGVtcGxhdGVzL3RocmVhdC1hc3Nlc3NtZW50LXJlcG9ydC5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIFxuICAgICAgLy8gUG9wdWxhciBFbnNlbWJsZXNcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2J1c2luZXNzLWFkdmlzb3IubWQnLFxuICAgICAgICBwYXRoOiAnbGlicmFyeS9lbnNlbWJsZXMvYnVzaW5lc3MtYWR2aXNvci5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2NyZWF0aXZlLXN0dWRpby5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L2Vuc2VtYmxlcy9jcmVhdGl2ZS1zdHVkaW8ubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdkZXZlbG9wbWVudC10ZWFtLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvZW5zZW1ibGVzL2RldmVsb3BtZW50LXRlYW0ubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdzZWN1cml0eS1hbmFseXNpcy10ZWFtLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvZW5zZW1ibGVzL3NlY3VyaXR5LWFuYWx5c2lzLXRlYW0ubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH1cbiAgICBdO1xuICAgIFxuICAgIHJldHVybiBDb2xsZWN0aW9uU2VlZGVyLmNhY2hlZFNlZWREYXRhO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGNvbGxlY3Rpb24gc3RhdGlzdGljcyBmcm9tIHNlZWQgZGF0YVxuICAgKi9cbiAgc3RhdGljIGdldFNlZWRTdGF0cygpIHtcbiAgICBjb25zdCBzZWVkRGF0YSA9IHRoaXMuZ2V0U2VlZERhdGEoKTtcbiAgICBjb25zdCB0eXBlQ291bnQgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIFxuICAgIHNlZWREYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAvLyBFeHRyYWN0IHR5cGUgZnJvbSBwYXRoIChsaWJyYXJ5L3BlcnNvbmFzL25hbWUubWQgLT4gcGVyc29uYXMpXG4gICAgICBjb25zdCBwYXRoUGFydHMgPSBpdGVtLnBhdGguc3BsaXQoJy8nKTtcbiAgICAgIGNvbnN0IHR5cGUgPSBwYXRoUGFydHNbMV0gfHwgJ3Vua25vd24nO1xuICAgICAgdHlwZUNvdW50LnNldCh0eXBlLCAodHlwZUNvdW50LmdldCh0eXBlKSB8fCAwKSArIDEpO1xuICAgIH0pO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICB0b3RhbDogc2VlZERhdGEubGVuZ3RoLFxuICAgICAgYnlUeXBlOiBPYmplY3QuZnJvbUVudHJpZXModHlwZUNvdW50KVxuICAgIH07XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBpdGVtIGlzIGF2YWlsYWJsZSBpbiBzZWVkIGRhdGFcbiAgICovXG4gIHN0YXRpYyBpc0l0ZW1JblNlZWREYXRhKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFNlZWREYXRhKCkuc29tZShpdGVtID0+IGl0ZW0ucGF0aCA9PT0gcGF0aCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgc2VlZCBpdGVtIGJ5IHBhdGhcbiAgICovXG4gIHN0YXRpYyBnZXRTZWVkSXRlbShwYXRoOiBzdHJpbmcpOiBDb2xsZWN0aW9uSXRlbSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2VlZERhdGEoKS5maW5kKGl0ZW0gPT4gaXRlbS5wYXRoID09PSBwYXRoKTtcbiAgfVxufSJdfQ==