@dollhousemcp/mcp-server 2.0.32 → 2.0.35
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 +13 -0
- package/dist/cli/convert.js +9 -8
- package/dist/converters/DollhouseToAnthropicConverter.js +8 -8
- package/dist/elements/agents/AgentManager.js +2 -2
- package/dist/elements/skills/Skill.d.ts.map +1 -1
- package/dist/elements/skills/Skill.js +2 -2
- package/dist/elements/templates/Template.d.ts.map +1 -1
- package/dist/elements/templates/Template.js +15 -2
- package/dist/elements/templates/TemplateManager.js +3 -3
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/handlers/element-crud/createElement.d.ts.map +1 -1
- package/dist/handlers/element-crud/createElement.js +10 -2
- package/dist/handlers/element-crud/editElement.d.ts.map +1 -1
- package/dist/handlers/element-crud/editElement.js +61 -5
- package/dist/security/constants.d.ts +1 -0
- package/dist/security/constants.d.ts.map +1 -1
- package/dist/security/constants.js +2 -1
- package/dist/security/secureYamlParser.js +2 -2
- package/dist/services/validation/AgentElementValidator.d.ts.map +1 -1
- package/dist/services/validation/AgentElementValidator.js +3 -2
- package/dist/services/validation/GenericElementValidator.d.ts +1 -0
- package/dist/services/validation/GenericElementValidator.d.ts.map +1 -1
- package/dist/services/validation/GenericElementValidator.js +14 -6
- package/dist/utils/pathSecurity.d.ts +7 -0
- package/dist/utils/pathSecurity.d.ts.map +1 -0
- package/dist/utils/pathSecurity.js +30 -0
- package/dist/web/public/index.html +1 -1
- package/dist/web/routes/permissionRoutes.d.ts.map +1 -1
- package/dist/web/routes/permissionRoutes.js +48 -11
- package/package.json +21 -5
- package/scripts/pretooluse-dollhouse.sh +23 -4
- package/server.json +2 -2
|
@@ -49,7 +49,7 @@ export class SecureYamlParser {
|
|
|
49
49
|
// Additional validation for specific persona fields
|
|
50
50
|
static FIELD_VALIDATORS = {
|
|
51
51
|
name: (v) => typeof v === 'string' && v.length <= 100,
|
|
52
|
-
description: (v) => typeof v === 'string'
|
|
52
|
+
description: (v) => typeof v === 'string',
|
|
53
53
|
author: (v) => typeof v === 'string' && v.length <= 100,
|
|
54
54
|
version: (v) => typeof v === 'string' && /^\d+\.\d+(\.\d+)?(-[a-zA-Z0-9.-]+)?$/.test(v),
|
|
55
55
|
category: (v) => typeof v === 'string' && v.length <= 50,
|
|
@@ -313,4 +313,4 @@ export class SecureYamlParser {
|
|
|
313
313
|
return parsed;
|
|
314
314
|
}
|
|
315
315
|
}
|
|
316
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJlWWFtbFBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZWN1cml0eS9zZWN1cmVZYW1sUGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQ0c7QUFFSCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQWtCdkQsTUFBTSxPQUFPLGdCQUFnQjtJQUNuQixNQUFNLENBQVUsZUFBZSxHQUF1QjtRQUM1RCxXQUFXLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBTyxnQkFBZ0I7UUFDN0MsY0FBYyxFQUFFLElBQUksR0FBRyxJQUFJLEVBQUcsa0JBQWtCO1FBQ2hELGVBQWUsRUFBRSxJQUFJO1FBQ3JCLGNBQWMsRUFBRSxJQUFJLENBQVMscUNBQXFDO0tBQ25FLENBQUM7SUFFRixtR0FBbUc7SUFDM0YsTUFBTSxDQUFVLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBRXZELG9EQUFvRDtJQUM1QyxNQUFNLENBQVUsZ0JBQWdCLEdBQTRDO1FBQ2xGLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksR0FBRztRQUNyRCxXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLEdBQUc7UUFDNUQsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxHQUFHO1FBQ3ZELE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLHNDQUFzQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdkYsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFO1FBQ3hELFVBQVUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDcEQsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLEtBQUssTUFBTSxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRixZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLEtBQUssTUFBTSxJQUFJLENBQUMsS0FBSyxPQUFPO1FBQzVFLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDOUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDbEIsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBRXhDLHdEQUF3RDtZQUN4RCxvREFBb0Q7WUFDcEQsTUFBTSxZQUFZLEdBQUc7Z0JBQ25CLHFCQUFxQixFQUFFLGFBQWE7Z0JBQ3BDLHNDQUFzQyxFQUFFLG9CQUFvQjtnQkFDNUQsMkJBQTJCLEVBQUUseUJBQXlCO2dCQUN0RCx5QkFBeUIsRUFBRSx5QkFBeUI7Z0JBQ3BELDJCQUEyQixFQUFFLHdCQUF3QjtnQkFDckQsMEVBQTBFLENBQUMsaUJBQWlCO2FBQzdGLENBQUM7WUFFRiw0Q0FBNEM7WUFDNUMsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM1RSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3BCLGlFQUFpRTtnQkFDakUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLHlDQUF5QztZQUN2RixDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDMUYsYUFBYSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7S0FDaEcsQ0FBQztJQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQW9CRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBYSxFQUFFLFVBQThCLEVBQUU7UUFDMUQsTUFBTSxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQztRQUVyRCxxQkFBcUI7UUFDckIsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWUsQ0FBQyxFQUFFLENBQUM7WUFDakYsTUFBTSxJQUFJLGFBQWEsQ0FBQyxzQ0FBc0MsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBRUQsb0NBQW9DO1FBQ3BDLDhEQUE4RDtRQUM5RCxNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN0QixvQ0FBb0M7WUFDcEMsT0FBTztnQkFDTCxJQUFJLEVBQUUsRUFBRTtnQkFDUixPQUFPLEVBQUUsS0FBSzthQUNmLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEMsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVwRSx3QkFBd0I7UUFDeEIsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVksQ0FBQyxFQUFFLENBQUM7WUFDakYsTUFBTSxJQUFJLGFBQWEsQ0FBQywrQ0FBK0MsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNyRixDQUFDO1FBRUQsbUNBQW1DO1FBQ25DLDZFQUE2RTtRQUM3RSxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQy9FLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDL0IsSUFBSSxFQUFFLHdCQUF3QjtnQkFDOUIsUUFBUSxFQUFFLFVBQVU7Z0JBQ3BCLE1BQU0sRUFBRSxrQkFBa0I7Z0JBQzFCLE9BQU8sRUFBRSxnREFBZ0Q7YUFDMUQsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxJQUFJLGFBQWEsQ0FBQyxpQ0FBaUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBRUQsNEJBQTRCO1FBQzVCLElBQUksSUFBUyxDQUFDO1FBQ2QsSUFBSSxDQUFDO1lBQ0gsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUM1QixNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQ3hCLElBQUksRUFBRSxLQUFLLEVBQUcsa0NBQWtDO2dCQUNoRCxTQUFTLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtvQkFDckIsZUFBZSxDQUFDLGdCQUFnQixDQUFDO3dCQUMvQixJQUFJLEVBQUUsc0JBQXNCO3dCQUM1QixRQUFRLEVBQUUsS0FBSzt3QkFDZixNQUFNLEVBQUUsa0JBQWtCO3dCQUMxQixPQUFPLEVBQUUsaUJBQWlCLE9BQU8sQ0FBQyxPQUFPLEVBQUU7cUJBQzVDLENBQUMsQ0FBQztnQkFDTCxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksYUFBYSxDQUFDLHdCQUF3QixLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN0SCxDQUFDO1FBRUQsOEJBQThCO1FBQzlCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3JFLE1BQU0sSUFBSSxhQUFhLENBQUMsMkNBQTJDLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDakYsQ0FBQztRQUVELHdDQUF3QztRQUN4QyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN0RixJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLE1BQU0sSUFBSSxhQUFhLENBQUMsK0JBQStCLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM3RixDQUFDO1FBQ0gsQ0FBQztRQUVELHNDQUFzQztRQUN0QyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2hELE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMzRixNQUFNLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFFbEYsc0VBQXNFO1lBQ3RFLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxPQUFPLGNBQWMsS0FBSyxVQUFVLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDMUYsTUFBTSxJQUFJLGFBQWEsQ0FBQyw0QkFBNEIsR0FBRyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDeEUsQ0FBQztZQUVELGdEQUFnRDtZQUNoRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3RELE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRTtvQkFDN0QsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO2lCQUNwQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLFFBQVEsS0FBSyxVQUFVLEVBQUUsQ0FBQztvQkFDOUQsTUFBTSxJQUFJLGFBQWEsQ0FBQyxzQ0FBc0MsR0FBRyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQ3BGLENBQUM7Z0JBQ0QsaUNBQWlDO2dCQUNqQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLGdCQUFnQixDQUFDO1lBQzFDLENBQUM7UUFDSCxDQUFDO1FBRUQsNENBQTRDO1FBQzVDLElBQUksWUFBWSxHQUFHLGVBQWUsQ0FBQztRQUNuQyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixNQUFNLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLGVBQWUsRUFBRTtnQkFDOUUsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO2FBQ3BDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLElBQUksaUJBQWlCLENBQUMsUUFBUSxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUM1RSxNQUFNLElBQUksYUFBYSxDQUFDLHFDQUFxQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzdFLENBQUM7WUFDRCxZQUFZLEdBQUcsaUJBQWlCLENBQUMsZ0JBQWdCLElBQUksZUFBZSxDQUFDO1FBQ3ZFLENBQUM7UUFFRCxPQUFPO1lBQ0wsSUFBSTtZQUNKLE9BQU8sRUFBRSxZQUFZO1NBQ3RCLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsd0JBQXdCO1FBQzdCLE9BQU87WUFDTCxLQUFLLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBRTtnQkFDdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDakMsT0FBTztvQkFDTCxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7b0JBQ2pCLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztvQkFDdkIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO29CQUN2QixJQUFJLEVBQUUsS0FBSztpQkFDWixDQUFDO1lBQ0osQ0FBQztZQUNELFNBQVMsRUFBRSxDQUFDLE9BQWUsRUFBRSxJQUFTLEVBQUUsRUFBRTtnQkFDeEMsb0NBQW9DO2dCQUNwQyxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDeEIsTUFBTSxJQUFJLGFBQWEsQ0FBQyxnREFBZ0QsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDcEYsQ0FBQztnQkFFRCxxQkFBcUI7Z0JBQ3JCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO29CQUM5QixNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVc7b0JBQ3hCLFdBQVcsRUFBRSxJQUFJO29CQUNqQixNQUFNLEVBQUUsSUFBSTtvQkFDWixZQUFZLEVBQUUsSUFBSTtpQkFDbkIsQ0FBQyxDQUFDO2dCQUVILE9BQU8sUUFBUSxPQUFPLFFBQVEsT0FBTyxFQUFFLENBQUM7WUFDMUMsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQWEsRUFBRSxPQUE4QyxFQUFFLGFBQWtDO1FBQ2pILGdEQUFnRDtRQUNoRCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztRQUVqQywyQ0FBMkM7UUFDM0MsT0FBTyxNQUFNLENBQUMsS0FBSyxFQUFFO1lBQ25CLEdBQUcsT0FBTztZQUNWLE9BQU8sRUFBRTtnQkFDUCxJQUFJLEVBQUU7b0JBQ0osS0FBSyxFQUFFLENBQUMsR0FBVyxFQUFFLEVBQUU7d0JBQ3JCLDhCQUE4Qjt3QkFDOUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7NEJBQzVCLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVzs0QkFDeEIsSUFBSSxFQUFFLEtBQUs7eUJBQ1osQ0FBQyxDQUFDO3dCQUNILHdCQUF3Qjt3QkFDeEIsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxLQUFLLElBQUksRUFBRSxDQUFDOzRCQUNsRCxPQUFPLEVBQUUsQ0FBQzt3QkFDWixDQUFDO3dCQUNELE9BQU8sTUFBZ0IsQ0FBQztvQkFDMUIsQ0FBQztvQkFDRCxTQUFTLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTt3QkFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTs0QkFDcEIsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXOzRCQUN4QixXQUFXLEVBQUUsSUFBSTs0QkFDakIsTUFBTSxFQUFFLElBQUk7eUJBQ2IsQ0FBQyxDQUFDO29CQUNMLENBQUM7aUJBQ0Y7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FpQkc7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLFdBQW1CLEVBQUUsVUFBa0IsRUFBRSxHQUFHLElBQUk7UUFDbEUsa0JBQWtCO1FBQ2xCLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxPQUFPLEVBQUUsQ0FBQztZQUNqQyxNQUFNLElBQUksYUFBYSxDQUFDLDJDQUEyQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2pGLENBQUM7UUFFRCw2RUFBNkU7UUFDN0UsNEVBQTRFO1FBQzVFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3ZELGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDL0IsSUFBSSxFQUFFLHdCQUF3QjtnQkFDOUIsUUFBUSxFQUFFLFVBQVU7Z0JBQ3BCLE1BQU0sRUFBRSwrQkFBK0I7Z0JBQ3ZDLE9BQU8sRUFBRSxxREFBcUQ7YUFDL0QsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxJQUFJLGFBQWEsQ0FBQyxpQ0FBaUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBRUQseUJBQXlCO1FBQ3pCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFHLHNDQUFzQztZQUNqRSxJQUFJLEVBQUUsS0FBSztTQUNaLENBQUMsQ0FBQztRQUVILDZCQUE2QjtRQUM3QixJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDbEQsTUFBTSxJQUFJLGFBQWEsQ0FBQyxzQ0FBc0MsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBRUQsT0FBTyxNQUFpQyxDQUFDO0lBQzNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlY3VyZSBZQU1MIFBhcnNlciBmb3IgRG9sbGhvdXNlTUNQIC0gRm9yIE1hcmtkb3duIEZpbGVzIHdpdGggWUFNTCBGcm9udG1hdHRlclxuICogXG4gKiBJTVBPUlRBTlQ6IFRoaXMgcGFyc2VyIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgTWFya2Rvd24gZmlsZXMgd2l0aCBZQU1MIGZyb250bWF0dGVyXG4gKiAodGhlIGZvcm1hdCB1c2VkIGJ5IHBlcnNvbmFzLCBza2lsbHMsIHRlbXBsYXRlcywgYW5kIG90aGVyIGVsZW1lbnRzKS5cbiAqIFxuICogVVNFIFRISVMgRk9SOlxuICogLSBQZXJzb25hIGZpbGVzIChlLmcuLCBjcmVhdGl2ZS13cml0ZXIubWQpXG4gKiAtIFNraWxsIGZpbGVzIChlLmcuLCBjb2RlLXJldmlldy5tZClcbiAqIC0gVGVtcGxhdGUgZmlsZXMgKGUuZy4sIG1lZXRpbmctbm90ZXMubWQpXG4gKiAtIEFueSBNYXJrZG93biBmaWxlIHdpdGggWUFNTCBmcm9udG1hdHRlciBiZXR3ZWVuIC0tLSBtYXJrZXJzXG4gKiBcbiAqIERPIE5PVCBVU0UgVEhJUyBGT1I6XG4gKiAtIFB1cmUgWUFNTCBjb25maWd1cmF0aW9uIGZpbGVzICh1c2UganMteWFtbCBkaXJlY3RseSB3aXRoIEZBSUxTQUZFX1NDSEVNQSlcbiAqIC0gSlNPTiBmaWxlc1xuICogLSBQbGFpbiB0ZXh0IGZpbGVzIHdpdGhvdXQgZnJvbnRtYXR0ZXJcbiAqIFxuICogRklMRSBGT1JNQVQgRVhQRUNURUQ6XG4gKiBgYGBcbiAqIC0tLVxuICogbmFtZTogRWxlbWVudCBOYW1lXG4gKiBkZXNjcmlwdGlvbjogRWxlbWVudCBkZXNjcmlwdGlvblxuICogdmVyc2lvbjogMS4wLjBcbiAqIC0tLVxuICogXG4gKiAjIE1hcmtkb3duIGNvbnRlbnQgaGVyZVxuICogVGhlIGFjdHVhbCBjb250ZW50L2luc3RydWN0aW9ucyBnbyBoZXJlLi4uXG4gKiBgYGBcbiAqIFxuICogUHJvdmlkZXMgc2FmZSBZQU1MIHBhcnNpbmcgdGhhdCBwcmV2ZW50cyBkZXNlcmlhbGl6YXRpb24gYXR0YWNrc1xuICogYnkgdXNpbmcgYSByZXN0cmljdGVkIHNjaGVtYSBhbmQgcHJlLXZhbGlkYXRpb24uXG4gKiBcbiAqIFNlY3VyaXR5OiBTRUMtMDAzIC0gWUFNTCBwYXJzaW5nIHZ1bG5lcmFiaWxpdHkgcHJvdGVjdGlvblxuICovXG5cbmltcG9ydCAqIGFzIHlhbWwgZnJvbSAnanMteWFtbCc7XG5pbXBvcnQgbWF0dGVyIGZyb20gJ2dyYXktbWF0dGVyJztcbmltcG9ydCB7IFNlY3VyaXR5RXJyb3IgfSBmcm9tICcuLi9lcnJvcnMvU2VjdXJpdHlFcnJvci5qcyc7XG5pbXBvcnQgeyBDb250ZW50VmFsaWRhdG9yIH0gZnJvbSAnLi9jb250ZW50VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5TW9uaXRvciB9IGZyb20gJy4vc2VjdXJpdHlNb25pdG9yLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBTZWN1cmVQYXJzZU9wdGlvbnMge1xuICBtYXhZYW1sU2l6ZT86IG51bWJlcjtcbiAgbWF4Q29udGVudFNpemU/OiBudW1iZXI7XG4gIGFsbG93ZWRLZXlzPzogc3RyaW5nW107XG4gIHZhbGlkYXRlQ29udGVudD86IGJvb2xlYW47XG4gIHZhbGlkYXRlRmllbGRzPzogYm9vbGVhbjsgLy8gV2hldGhlciB0byBhcHBseSBmaWVsZC1zcGVjaWZpYyB2YWxpZGF0b3JzIChmb3IgcGVyc29uYSBtZXRhZGF0YSlcbiAgLyoqIENvbnRlbnQgY29udGV4dCBmb3IgQ29udGVudFZhbGlkYXRvciDigJQgZXhlbXB0cyBsZWdpdGltYXRlIHBhdHRlcm5zIChlLmcuLCA8c2NyaXB0PiBpbiB0ZW1wbGF0ZXMpICovXG4gIGNvbnRlbnRDb250ZXh0PzogJ3BlcnNvbmEnIHwgJ3NraWxsJyB8ICd0ZW1wbGF0ZScgfCAnYWdlbnQnIHwgJ21lbW9yeSc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkQ29udGVudCB7XG4gIGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgZXhjZXJwdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFNlY3VyZVlhbWxQYXJzZXIge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX09QVElPTlM6IFNlY3VyZVBhcnNlT3B0aW9ucyA9IHtcbiAgICBtYXhZYW1sU2l6ZTogNjQgKiAxMDI0LCAgICAgIC8vIDY0S0IgZm9yIFlBTUxcbiAgICBtYXhDb250ZW50U2l6ZTogMTAyNCAqIDEwMjQsICAvLyAxTUIgZm9yIGNvbnRlbnRcbiAgICB2YWxpZGF0ZUNvbnRlbnQ6IHRydWUsXG4gICAgdmFsaWRhdGVGaWVsZHM6IHRydWUgICAgICAgICAvLyBCeSBkZWZhdWx0LCBhcHBseSBmaWVsZCB2YWxpZGF0b3JzXG4gIH07XG5cbiAgLy8gQWxsb3dlZCBZQU1MIHR5cGVzIC0gdXNpbmcgQ09SRV9TQ0hFTUEgKHNhZmUgc3Vic2V0IHdpdGggYmFzaWMgdHlwZXMgbGlrZSBib29sZWFucyBhbmQgaW50ZWdlcnMpXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFNBRkVfU0NIRU1BID0geWFtbC5DT1JFX1NDSEVNQTtcblxuICAvLyBBZGRpdGlvbmFsIHZhbGlkYXRpb24gZm9yIHNwZWNpZmljIHBlcnNvbmEgZmllbGRzXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEZJRUxEX1ZBTElEQVRPUlM6IFJlY29yZDxzdHJpbmcsICh2YWx1ZTogYW55KSA9PiBib29sZWFuPiA9IHtcbiAgICBuYW1lOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYubGVuZ3RoIDw9IDEwMCxcbiAgICBkZXNjcmlwdGlvbjogKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2Lmxlbmd0aCA8PSA1MDAsXG4gICAgYXV0aG9yOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYubGVuZ3RoIDw9IDEwMCxcbiAgICB2ZXJzaW9uOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIC9eXFxkK1xcLlxcZCsoXFwuXFxkKyk/KC1bYS16QS1aMC05Li1dKyk/JC8udGVzdCh2KSxcbiAgICBjYXRlZ29yeTogKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2Lmxlbmd0aCA8PSA1MCxcbiAgICBhZ2VfcmF0aW5nOiAodikgPT4gWydhbGwnLCAnMTMrJywgJzE4KyddLmluY2x1ZGVzKHYpLFxuICAgIHByaWNlOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmICh2ID09PSAnZnJlZScgfHwgL15cXCRcXGQrXFwuXFxkezJ9JC8udGVzdCh2KSksXG4gICAgYWlfZ2VuZXJhdGVkOiAodikgPT4gdHlwZW9mIHYgPT09ICdib29sZWFuJyB8fCB2ID09PSAndHJ1ZScgfHwgdiA9PT0gJ2ZhbHNlJyxcbiAgICBnZW5lcmF0aW9uX21ldGhvZDogKHYpID0+IFsnaHVtYW4nLCAnQ2hhdEdQVCcsICdDbGF1ZGUnLCAnaHlicmlkJ10uaW5jbHVkZXModiksXG4gICAgY3JlYXRlZF9kYXRlOiAodikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2ICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xuICAgICAgXG4gICAgICAvLyBNb3JlIGZsZXhpYmxlIGRhdGUgdmFsaWRhdGlvbiAtIGFjY2VwdCBjb21tb24gZm9ybWF0c1xuICAgICAgLy8gSVNPODYwMSwgVVMgZm9ybWF0LCBFdXJvcGVhbiBmb3JtYXQsIHNpbXBsZSBkYXRlc1xuICAgICAgY29uc3QgZGF0ZVBhdHRlcm5zID0gW1xuICAgICAgICAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC8sIC8vIFlZWVktTU0tRERcbiAgICAgICAgL15cXGR7NH0tXFxkezJ9LVxcZHsyfVRcXGR7Mn06XFxkezJ9OlxcZHsyfS8sIC8vIElTTzg2MDEgd2l0aCB0aW1lXG4gICAgICAgIC9eXFxkezEsMn1cXC9cXGR7MSwyfVxcL1xcZHs0fSQvLCAvLyBNTS9ERC9ZWVlZIG9yIE0vRC9ZWVlZXG4gICAgICAgIC9eXFxkezEsMn0tXFxkezEsMn0tXFxkezR9JC8sIC8vIE1NLURELVlZWVkgb3IgTS1ELVlZWVlcbiAgICAgICAgL15cXGR7MSwyfVxcLlxcZHsxLDJ9XFwuXFxkezR9JC8sIC8vIERELk1NLllZWVkgKEV1cm9wZWFuKVxuICAgICAgICAvXihKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylcXHMrXFxkezEsMn0sP1xccytcXGR7NH0kL2kgLy8gTW9udGggREQsIFlZWVlcbiAgICAgIF07XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGl0IG1hdGNoZXMgY29tbW9uIHBhdHRlcm5zIGZpcnN0XG4gICAgICBjb25zdCBtYXRjaGVzUGF0dGVybiA9IGRhdGVQYXR0ZXJucy5zb21lKHBhdHRlcm4gPT4gcGF0dGVybi50ZXN0KHYudHJpbSgpKSk7XG4gICAgICBpZiAoIW1hdGNoZXNQYXR0ZXJuKSB7XG4gICAgICAgIC8vIEZhbGwgYmFjayB0byBEYXRlLnBhcnNlIGZvciBvdGhlciBmb3JtYXRzLCBidXQgYmUgbW9yZSBsZW5pZW50XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IERhdGUucGFyc2Uodik7XG4gICAgICAgIHJldHVybiAhTnVtYmVyLmlzTmFOKHBhcnNlZCkgJiYgcGFyc2VkID4gMDsgLy8gRW5zdXJlIGl0J3MgYSB2YWxpZCBwb3NpdGl2ZSB0aW1lc3RhbXBcbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICB0cmlnZ2VyczogKHYpID0+IEFycmF5LmlzQXJyYXkodikgJiYgdi5ldmVyeSh0ID0+IHR5cGVvZiB0ID09PSAnc3RyaW5nJyAmJiB0Lmxlbmd0aCA8PSA1MCksXG4gICAgY29udGVudF9mbGFnczogKHYpID0+IEFycmF5LmlzQXJyYXkodikgJiYgdi5ldmVyeShmID0+IHR5cGVvZiBmID09PSAnc3RyaW5nJyAmJiBmLmxlbmd0aCA8PSA1MClcbiAgfTtcblxuICAvKipcbiAgICogUGFyc2UgYSBNYXJrZG93biBmaWxlIHdpdGggWUFNTCBmcm9udG1hdHRlciAoU2VjdXJlbHkpXG4gICAqIFxuICAgKiBAcGFyYW0gaW5wdXQgLSBUaGUgZnVsbCBjb250ZW50IG9mIGEgTWFya2Rvd24gZmlsZSB3aXRoIFlBTUwgZnJvbnRtYXR0ZXJcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBQYXJzaW5nIG9wdGlvbnMgZm9yIHNlY3VyaXR5IGFuZCB2YWxpZGF0aW9uXG4gICAqIEByZXR1cm5zIFBhcnNlZENvbnRlbnQgd2l0aCBzZXBhcmF0ZWQgWUFNTCBkYXRhIGFuZCBNYXJrZG93biBjb250ZW50XG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIEZvciBhIHBlcnNvbmEgZmlsZTpcbiAgICogY29uc3QgcGVyc29uYUZpbGUgPSBgLS0tXG4gICAqIG5hbWU6IENyZWF0aXZlIFdyaXRlclxuICAgKiBkZXNjcmlwdGlvbjogQSBjcmVhdGl2ZSB3cml0aW5nIGFzc2lzdGFudFxuICAgKiAtLS1cbiAgICogWW91IGFyZSBhIGNyZWF0aXZlIHdyaXRlci4uLmA7XG4gICAqIFxuICAgKiBjb25zdCByZXN1bHQgPSBTZWN1cmVZYW1sUGFyc2VyLnBhcnNlKHBlcnNvbmFGaWxlKTtcbiAgICogLy8gcmVzdWx0LmRhdGEgPSB7IG5hbWU6ICdDcmVhdGl2ZSBXcml0ZXInLCBkZXNjcmlwdGlvbjogJy4uLicgfVxuICAgKiAvLyByZXN1bHQuY29udGVudCA9ICdZb3UgYXJlIGEgY3JlYXRpdmUgd3JpdGVyLi4uJ1xuICAgKiBgYGBcbiAgICovXG4gIHN0YXRpYyBwYXJzZShpbnB1dDogc3RyaW5nLCBvcHRpb25zOiBTZWN1cmVQYXJzZU9wdGlvbnMgPSB7fSk6IFBhcnNlZENvbnRlbnQge1xuICAgIGNvbnN0IG9wdHMgPSB7IC4uLnRoaXMuREVGQVVMVF9PUFRJT05TLCAuLi5vcHRpb25zIH07XG5cbiAgICAvLyAxLiBTaXplIHZhbGlkYXRpb25cbiAgICBpZiAoaW5wdXQubGVuZ3RoID4gKG9wdHMubWF4Q29udGVudFNpemUgfHwgdGhpcy5ERUZBVUxUX09QVElPTlMubWF4Q29udGVudFNpemUhKSkge1xuICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoJ0NvbnRlbnQgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgc2l6ZScsICdtZWRpdW0nKTtcbiAgICB9XG5cbiAgICAvLyAyLiBFeHRyYWN0IGZyb250bWF0dGVyIGJvdW5kYXJpZXNcbiAgICAvLyBGSVg6IFN1cHBvcnQgYm90aCBVbml4IChcXG4pIGFuZCBXaW5kb3dzIChcXHJcXG4pIGxpbmUgZW5kaW5nc1xuICAgIGNvbnN0IGZyb250bWF0dGVyTWF0Y2ggPSBpbnB1dC5tYXRjaCgvXi0tLVxccj9cXG4oW1xcc1xcU10qPylcXHI/XFxuLS0tLyk7XG4gICAgaWYgKCFmcm9udG1hdHRlck1hdGNoKSB7XG4gICAgICAvLyBObyBmcm9udG1hdHRlciwgcmV0dXJuIGVtcHR5IGRhdGFcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHt9LFxuICAgICAgICBjb250ZW50OiBpbnB1dFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCB5YW1sQ29udGVudCA9IGZyb250bWF0dGVyTWF0Y2hbMV07XG4gICAgY29uc3QgbWFya2Rvd25Db250ZW50ID0gaW5wdXQuc3Vic3RyaW5nKGZyb250bWF0dGVyTWF0Y2hbMF0ubGVuZ3RoKTtcblxuICAgIC8vIDMuIFZhbGlkYXRlIFlBTUwgc2l6ZVxuICAgIGlmICh5YW1sQ29udGVudC5sZW5ndGggPiAob3B0cy5tYXhZYW1sU2l6ZSB8fCB0aGlzLkRFRkFVTFRfT1BUSU9OUy5tYXhZYW1sU2l6ZSEpKSB7XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcignWUFNTCBmcm9udG1hdHRlciBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplJywgJ21lZGl1bScpO1xuICAgIH1cblxuICAgIC8vIDQuIFByZS1wYXJzZSBzZWN1cml0eSB2YWxpZGF0aW9uXG4gICAgLy8gRklYIChJc3N1ZSAjMTIxMSk6IE9ubHkgdmFsaWRhdGUgY29udGVudCBpZiB2YWxpZGF0ZUNvbnRlbnQgb3B0aW9uIGlzIHRydWVcbiAgICBpZiAob3B0cy52YWxpZGF0ZUNvbnRlbnQgJiYgIUNvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVZYW1sQ29udGVudCh5YW1sQ29udGVudCkpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1lBTUxfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICBzZXZlcml0eTogJ0NSSVRJQ0FMJyxcbiAgICAgICAgc291cmNlOiAnU2VjdXJlWWFtbFBhcnNlcicsXG4gICAgICAgIGRldGFpbHM6ICdNYWxpY2lvdXMgWUFNTCBwYXR0ZXJuIGRldGVjdGVkIGR1cmluZyBwYXJzaW5nJ1xuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcignTWFsaWNpb3VzIFlBTUwgY29udGVudCBkZXRlY3RlZCcsICdjcml0aWNhbCcpO1xuICAgIH1cblxuICAgIC8vIDUuIFBhcnNlIHdpdGggc2FmZSBzY2hlbWFcbiAgICBsZXQgZGF0YTogYW55O1xuICAgIHRyeSB7XG4gICAgICBkYXRhID0geWFtbC5sb2FkKHlhbWxDb250ZW50LCB7XG4gICAgICAgIHNjaGVtYTogdGhpcy5TQUZFX1NDSEVNQSxcbiAgICAgICAganNvbjogZmFsc2UsICAvLyBEb24ndCBhbGxvdyBKU09OLXNwZWNpZmljIHR5cGVzXG4gICAgICAgIG9uV2FybmluZzogKHdhcm5pbmcpID0+IHtcbiAgICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgICB0eXBlOiAnWUFNTF9QQVJTSU5HX1dBUk5JTkcnLFxuICAgICAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICAgICAgc291cmNlOiAnU2VjdXJlWWFtbFBhcnNlcicsXG4gICAgICAgICAgICBkZXRhaWxzOiBgWUFNTCB3YXJuaW5nOiAke3dhcm5pbmcubWVzc2FnZX1gXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcihgWUFNTCBwYXJzaW5nIGZhaWxlZDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gLCAnaGlnaCcpO1xuICAgIH1cblxuICAgIC8vIDYuIEVuc3VyZSBkYXRhIGlzIGFuIG9iamVjdFxuICAgIGlmICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcgfHwgZGF0YSA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcignWUFNTCBtdXN0IGNvbnRhaW4gYW4gb2JqZWN0IGF0IHJvb3QgbGV2ZWwnLCAnbWVkaXVtJyk7XG4gICAgfVxuXG4gICAgLy8gNy4gVmFsaWRhdGUgYWxsb3dlZCBrZXlzIGlmIHNwZWNpZmllZFxuICAgIGlmIChvcHRzLmFsbG93ZWRLZXlzKSB7XG4gICAgICBjb25zdCBpbnZhbGlkS2V5cyA9IE9iamVjdC5rZXlzKGRhdGEpLmZpbHRlcihrZXkgPT4gIW9wdHMuYWxsb3dlZEtleXMhLmluY2x1ZGVzKGtleSkpO1xuICAgICAgaWYgKGludmFsaWRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoYEludmFsaWQgWUFNTCBrZXlzIGRldGVjdGVkOiAke2ludmFsaWRLZXlzLmpvaW4oJywgJyl9YCwgJ21lZGl1bScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDguIFZhbGlkYXRlIGZpZWxkIHR5cGVzIGFuZCBjb250ZW50XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgIGNvbnN0IGhhc0ZpZWxkVmFsaWRhdG9yID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuRklFTERfVkFMSURBVE9SUywga2V5KTtcbiAgICAgIGNvbnN0IGZpZWxkVmFsaWRhdG9yID0gaGFzRmllbGRWYWxpZGF0b3IgPyB0aGlzLkZJRUxEX1ZBTElEQVRPUlNba2V5XSA6IHVuZGVmaW5lZDtcblxuICAgICAgLy8gQ2hlY2sgZmllbGQtc3BlY2lmaWMgdmFsaWRhdG9ycyBvbmx5IGlmIGZpZWxkIHZhbGlkYXRpb24gaXMgZW5hYmxlZFxuICAgICAgaWYgKG9wdHMudmFsaWRhdGVGaWVsZHMgJiYgdHlwZW9mIGZpZWxkVmFsaWRhdG9yID09PSAnZnVuY3Rpb24nICYmICFmaWVsZFZhbGlkYXRvcih2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoYEludmFsaWQgdmFsdWUgZm9yIGZpZWxkICcke2tleX0nYCwgJ21lZGl1bScpO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSBzdHJpbmcgZmllbGRzIGZvciBpbmplY3Rpb24gcGF0dGVybnNcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIG9wdHMudmFsaWRhdGVDb250ZW50KSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSBDb250ZW50VmFsaWRhdG9yLnZhbGlkYXRlQW5kU2FuaXRpemUodmFsdWUsIHtcbiAgICAgICAgICBjb250ZW50Q29udGV4dDogb3B0cy5jb250ZW50Q29udGV4dCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdmFsaWRhdGlvbi5pc1ZhbGlkICYmIHZhbGlkYXRpb24uc2V2ZXJpdHkgPT09ICdjcml0aWNhbCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcihgU2VjdXJpdHkgdGhyZWF0IGRldGVjdGVkIGluIGZpZWxkICcke2tleX0nYCwgJ2NyaXRpY2FsJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVwbGFjZSB3aXRoIHNhbml0aXplZCBjb250ZW50XG4gICAgICAgIGRhdGFba2V5XSA9IHZhbGlkYXRpb24uc2FuaXRpemVkQ29udGVudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA5LiBWYWxpZGF0ZSBtYXJrZG93biBjb250ZW50IGlmIHJlcXVlc3RlZFxuICAgIGxldCBmaW5hbENvbnRlbnQgPSBtYXJrZG93bkNvbnRlbnQ7XG4gICAgaWYgKG9wdHMudmFsaWRhdGVDb250ZW50KSB7XG4gICAgICBjb25zdCBjb250ZW50VmFsaWRhdGlvbiA9IENvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVBbmRTYW5pdGl6ZShtYXJrZG93bkNvbnRlbnQsIHtcbiAgICAgICAgY29udGVudENvbnRleHQ6IG9wdHMuY29udGVudENvbnRleHQsXG4gICAgICB9KTtcbiAgICAgIGlmICghY29udGVudFZhbGlkYXRpb24uaXNWYWxpZCAmJiBjb250ZW50VmFsaWRhdGlvbi5zZXZlcml0eSA9PT0gJ2NyaXRpY2FsJykge1xuICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcignU2VjdXJpdHkgdGhyZWF0IGRldGVjdGVkIGluIGNvbnRlbnQnLCAnY3JpdGljYWwnKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsQ29udGVudCA9IGNvbnRlbnRWYWxpZGF0aW9uLnNhbml0aXplZENvbnRlbnQgfHwgbWFya2Rvd25Db250ZW50O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkYXRhLFxuICAgICAgY29udGVudDogZmluYWxDb250ZW50XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBzZWN1cmUgZ3JheS1tYXR0ZXIgY29tcGF0aWJsZSBwYXJzZXJcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVTZWN1cmVNYXR0ZXJQYXJzZXIoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlOiAoaW5wdXQ6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnBhcnNlKGlucHV0KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiByZXN1bHQuZGF0YSxcbiAgICAgICAgICBjb250ZW50OiByZXN1bHQuY29udGVudCxcbiAgICAgICAgICBleGNlcnB0OiByZXN1bHQuZXhjZXJwdCxcbiAgICAgICAgICBvcmlnOiBpbnB1dFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHN0cmluZ2lmeTogKGNvbnRlbnQ6IHN0cmluZywgZGF0YTogYW55KSA9PiB7XG4gICAgICAgIC8vIFZhbGlkYXRlIGRhdGEgYmVmb3JlIHN0cmluZ2lmeWluZ1xuICAgICAgICBjb25zdCB2YWxpZGF0aW9uID0gQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZU1ldGFkYXRhKGRhdGEpO1xuICAgICAgICBpZiAoIXZhbGlkYXRpb24uaXNWYWxpZCkge1xuICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKCdDYW5ub3Qgc3RyaW5naWZ5IGNvbnRlbnQgd2l0aCBzZWN1cml0eSB0aHJlYXRzJywgJ2hpZ2gnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVzZSBzYWZlIFlBTUwgZHVtcFxuICAgICAgICBjb25zdCB5YW1sU3RyID0geWFtbC5kdW1wKGRhdGEsIHtcbiAgICAgICAgICBzY2hlbWE6IHRoaXMuU0FGRV9TQ0hFTUEsXG4gICAgICAgICAgc2tpcEludmFsaWQ6IHRydWUsXG4gICAgICAgICAgbm9SZWZzOiB0cnVlLFxuICAgICAgICAgIG5vQ29tcGF0TW9kZTogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gYC0tLVxcbiR7eWFtbFN0cn0tLS1cXG4ke2NvbnRlbnR9YDtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNhZmUgd3JhcHBlciBmb3IgZ3JheS1tYXR0ZXIgd2l0aCBzZWN1cml0eSB2YWxpZGF0aW9uc1xuICAgKi9cbiAgc3RhdGljIHNhZmVNYXR0ZXIoaW5wdXQ6IHN0cmluZywgb3B0aW9ucz86IG1hdHRlci5HcmF5TWF0dGVyT3B0aW9uPHN0cmluZywgYW55Piwgc2VjdXJlT3B0aW9ucz86IFNlY3VyZVBhcnNlT3B0aW9ucyk6IG1hdHRlci5HcmF5TWF0dGVyRmlsZTxzdHJpbmc+IHtcbiAgICAvLyBGaXJzdCwgdXNlIG91ciBzZWN1cmUgcGFyc2VyIChmb3IgdmFsaWRhdGlvbilcbiAgICB0aGlzLnBhcnNlKGlucHV0LCBzZWN1cmVPcHRpb25zKTtcblxuICAgIC8vIFRoZW4gdXNlIGdyYXktbWF0dGVyIHdpdGggY3VzdG9tIGVuZ2luZXNcbiAgICByZXR1cm4gbWF0dGVyKGlucHV0LCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgZW5naW5lczoge1xuICAgICAgICB5YW1sOiB7XG4gICAgICAgICAgcGFyc2U6IChzdHI6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgLy8gVXNlIG91ciBzZWN1cmUgWUFNTCBwYXJzaW5nXG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSB5YW1sLmxvYWQoc3RyLCB7XG4gICAgICAgICAgICAgIHNjaGVtYTogdGhpcy5TQUZFX1NDSEVNQSxcbiAgICAgICAgICAgICAganNvbjogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gRW5zdXJlIGl0J3MgYW4gb2JqZWN0XG4gICAgICAgICAgICBpZiAodHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcgfHwgcGFyc2VkID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwYXJzZWQgYXMgb2JqZWN0O1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RyaW5naWZ5OiAob2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB5YW1sLmR1bXAob2JqLCB7XG4gICAgICAgICAgICAgIHNjaGVtYTogdGhpcy5TQUZFX1NDSEVNQSxcbiAgICAgICAgICAgICAgc2tpcEludmFsaWQ6IHRydWUsXG4gICAgICAgICAgICAgIG5vUmVmczogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgcmF3IFlBTUwgY29udGVudCBzYWZlbHkgKG5vdCBmcm9udG1hdHRlciwganVzdCBwbGFpbiBZQU1MKVxuICAgKlxuICAgKiBVU0UgVEhJUyBGT1I6XG4gICAqIC0gRXhwb3J0IHBhY2thZ2UgZGF0YSBmaWVsZHNcbiAgICogLSBDb25maWd1cmF0aW9uIHNuaXBwZXRzXG4gICAqIC0gQW55IHB1cmUgWUFNTCBzdHJpbmcgdGhhdCBuZWVkcyBwYXJzaW5nXG4gICAqXG4gICAqIFRoaXMgdXNlcyBDT1JFX1NDSEVNQSB3aGljaCBvbmx5IGFsbG93cyBzYWZlIGJhc2ljIHR5cGVzOlxuICAgKiAtIHN0cmluZ3MsIG51bWJlcnMsIGJvb2xlYW5zLCBudWxsXG4gICAqIC0gYXJyYXlzIGFuZCBvYmplY3RzXG4gICAqIC0gTk8gY3VzdG9tIHR5cGVzLCBmdW5jdGlvbnMsIG9yIGNvZGUgZXhlY3V0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB5YW1sQ29udGVudCAtIFJhdyBZQU1MIHN0cmluZyB0byBwYXJzZVxuICAgKiBAcGFyYW0gbWF4U2l6ZSAtIE1heGltdW0gYWxsb3dlZCBzaXplIChkZWZhdWx0IDY0S0IpXG4gICAqIEByZXR1cm5zIFBhcnNlZCBvYmplY3RcbiAgICogQHRocm93cyBTZWN1cml0eUVycm9yIGlmIGNvbnRlbnQgaXMgdG9vIGxhcmdlIG9yIGNvbnRhaW5zIHRocmVhdHNcbiAgICovXG4gIHN0YXRpYyBwYXJzZVJhd1lhbWwoeWFtbENvbnRlbnQ6IHN0cmluZywgbWF4U2l6ZTogbnVtYmVyID0gNjQgKiAxMDI0KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIC8vIFNpemUgdmFsaWRhdGlvblxuICAgIGlmICh5YW1sQ29udGVudC5sZW5ndGggPiBtYXhTaXplKSB7XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcignWUFNTCBjb250ZW50IGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkIHNpemUnLCAnbWVkaXVtJyk7XG4gICAgfVxuXG4gICAgLy8gRml4ICM5MDg6IFlBTUwgYm9tYiBkZXRlY3Rpb24g4oCUIHByZXZpb3VzbHkgc2tpcHBlZCwgYWxsb3dpbmcgYm9tYiBwYXlsb2Fkc1xuICAgIC8vIHRocm91Z2ggTUNQLUFRTCBjcmVhdGUgZGlzcGF0Y2hlciBhbmQgd2ViIHJvdXRlcyB0aGF0IHVzZSBwYXJzZVJhd1lhbWwoKS5cbiAgICBpZiAoIUNvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVZYW1sQ29udGVudCh5YW1sQ29udGVudCkpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1lBTUxfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICBzZXZlcml0eTogJ0NSSVRJQ0FMJyxcbiAgICAgICAgc291cmNlOiAnU2VjdXJlWWFtbFBhcnNlci5wYXJzZVJhd1lhbWwnLFxuICAgICAgICBkZXRhaWxzOiAnTWFsaWNpb3VzIFlBTUwgcGF0dGVybiBkZXRlY3RlZCBpbiByYXcgWUFNTCBjb250ZW50J1xuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcignTWFsaWNpb3VzIFlBTUwgY29udGVudCBkZXRlY3RlZCcsICdjcml0aWNhbCcpO1xuICAgIH1cblxuICAgIC8vIFBhcnNlIHdpdGggc2FmZSBzY2hlbWFcbiAgICBjb25zdCBwYXJzZWQgPSB5YW1sLmxvYWQoeWFtbENvbnRlbnQsIHtcbiAgICAgIHNjaGVtYTogdGhpcy5TQUZFX1NDSEVNQSwgIC8vIENPUkVfU0NIRU1BIC0gc2FmZSBiYXNpYyB0eXBlcyBvbmx5XG4gICAgICBqc29uOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgLy8gRW5zdXJlIHJlc3VsdCBpcyBhbiBvYmplY3RcbiAgICBpZiAodHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcgfHwgcGFyc2VkID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcignWUFNTCBjb250ZW50IG11c3QgcGFyc2UgdG8gYW4gb2JqZWN0JywgJ21lZGl1bScpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH1cbn1cbiJdfQ==
|
|
316
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJlWWFtbFBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZWN1cml0eS9zZWN1cmVZYW1sUGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQ0c7QUFFSCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQWtCdkQsTUFBTSxPQUFPLGdCQUFnQjtJQUNuQixNQUFNLENBQVUsZUFBZSxHQUF1QjtRQUM1RCxXQUFXLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBTyxnQkFBZ0I7UUFDN0MsY0FBYyxFQUFFLElBQUksR0FBRyxJQUFJLEVBQUcsa0JBQWtCO1FBQ2hELGVBQWUsRUFBRSxJQUFJO1FBQ3JCLGNBQWMsRUFBRSxJQUFJLENBQVMscUNBQXFDO0tBQ25FLENBQUM7SUFFRixtR0FBbUc7SUFDM0YsTUFBTSxDQUFVLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBRXZELG9EQUFvRDtJQUM1QyxNQUFNLENBQVUsZ0JBQWdCLEdBQTRDO1FBQ2xGLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksR0FBRztRQUNyRCxXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVE7UUFDekMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxD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RUQseUJBQXlCO1FBQ3pCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFHLHNDQUFzQztZQUNqRSxJQUFJLEVBQUUsS0FBSztTQUNaLENBQUMsQ0FBQztRQUVILDZCQUE2QjtRQUM3QixJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDbEQsTUFBTSxJQUFJLGFBQWEsQ0FBQyxzQ0FBc0MsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBRUQsT0FBTyxNQUFpQyxDQUFDO0lBQzNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlY3VyZSBZQU1MIFBhcnNlciBmb3IgRG9sbGhvdXNlTUNQIC0gRm9yIE1hcmtkb3duIEZpbGVzIHdpdGggWUFNTCBGcm9udG1hdHRlclxuICogXG4gKiBJTVBPUlRBTlQ6IFRoaXMgcGFyc2VyIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgTWFya2Rvd24gZmlsZXMgd2l0aCBZQU1MIGZyb250bWF0dGVyXG4gKiAodGhlIGZvcm1hdCB1c2VkIGJ5IHBlcnNvbmFzLCBza2lsbHMsIHRlbXBsYXRlcywgYW5kIG90aGVyIGVsZW1lbnRzKS5cbiAqIFxuICogVVNFIFRISVMgRk9SOlxuICogLSBQZXJzb25hIGZpbGVzIChlLmcuLCBjcmVhdGl2ZS13cml0ZXIubWQpXG4gKiAtIFNraWxsIGZpbGVzIChlLmcuLCBjb2RlLXJldmlldy5tZClcbiAqIC0gVGVtcGxhdGUgZmlsZXMgKGUuZy4sIG1lZXRpbmctbm90ZXMubWQpXG4gKiAtIEFueSBNYXJrZG93biBmaWxlIHdpdGggWUFNTCBmcm9udG1hdHRlciBiZXR3ZWVuIC0tLSBtYXJrZXJzXG4gKiBcbiAqIERPIE5PVCBVU0UgVEhJUyBGT1I6XG4gKiAtIFB1cmUgWUFNTCBjb25maWd1cmF0aW9uIGZpbGVzICh1c2UganMteWFtbCBkaXJlY3RseSB3aXRoIEZBSUxTQUZFX1NDSEVNQSlcbiAqIC0gSlNPTiBmaWxlc1xuICogLSBQbGFpbiB0ZXh0IGZpbGVzIHdpdGhvdXQgZnJvbnRtYXR0ZXJcbiAqIFxuICogRklMRSBGT1JNQVQgRVhQRUNURUQ6XG4gKiBgYGBcbiAqIC0tLVxuICogbmFtZTogRWxlbWVudCBOYW1lXG4gKiBkZXNjcmlwdGlvbjogRWxlbWVudCBkZXNjcmlwdGlvblxuICogdmVyc2lvbjogMS4wLjBcbiAqIC0tLVxuICogXG4gKiAjIE1hcmtkb3duIGNvbnRlbnQgaGVyZVxuICogVGhlIGFjdHVhbCBjb250ZW50L2luc3RydWN0aW9ucyBnbyBoZXJlLi4uXG4gKiBgYGBcbiAqIFxuICogUHJvdmlkZXMgc2FmZSBZQU1MIHBhcnNpbmcgdGhhdCBwcmV2ZW50cyBkZXNlcmlhbGl6YXRpb24gYXR0YWNrc1xuICogYnkgdXNpbmcgYSByZXN0cmljdGVkIHNjaGVtYSBhbmQgcHJlLXZhbGlkYXRpb24uXG4gKiBcbiAqIFNlY3VyaXR5OiBTRUMtMDAzIC0gWUFNTCBwYXJzaW5nIHZ1bG5lcmFiaWxpdHkgcHJvdGVjdGlvblxuICovXG5cbmltcG9ydCAqIGFzIHlhbWwgZnJvbSAnanMteWFtbCc7XG5pbXBvcnQgbWF0dGVyIGZyb20gJ2dyYXktbWF0dGVyJztcbmltcG9ydCB7IFNlY3VyaXR5RXJyb3IgfSBmcm9tICcuLi9lcnJvcnMvU2VjdXJpdHlFcnJvci5qcyc7XG5pbXBvcnQgeyBDb250ZW50VmFsaWRhdG9yIH0gZnJvbSAnLi9jb250ZW50VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5TW9uaXRvciB9IGZyb20gJy4vc2VjdXJpdHlNb25pdG9yLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBTZWN1cmVQYXJzZU9wdGlvbnMge1xuICBtYXhZYW1sU2l6ZT86IG51bWJlcjtcbiAgbWF4Q29udGVudFNpemU/OiBudW1iZXI7XG4gIGFsbG93ZWRLZXlzPzogc3RyaW5nW107XG4gIHZhbGlkYXRlQ29udGVudD86IGJvb2xlYW47XG4gIHZhbGlkYXRlRmllbGRzPzogYm9vbGVhbjsgLy8gV2hldGhlciB0byBhcHBseSBmaWVsZC1zcGVjaWZpYyB2YWxpZGF0b3JzIChmb3IgcGVyc29uYSBtZXRhZGF0YSlcbiAgLyoqIENvbnRlbnQgY29udGV4dCBmb3IgQ29udGVudFZhbGlkYXRvciDigJQgZXhlbXB0cyBsZWdpdGltYXRlIHBhdHRlcm5zIChlLmcuLCA8c2NyaXB0PiBpbiB0ZW1wbGF0ZXMpICovXG4gIGNvbnRlbnRDb250ZXh0PzogJ3BlcnNvbmEnIHwgJ3NraWxsJyB8ICd0ZW1wbGF0ZScgfCAnYWdlbnQnIHwgJ21lbW9yeSc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkQ29udGVudCB7XG4gIGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgZXhjZXJwdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFNlY3VyZVlhbWxQYXJzZXIge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX09QVElPTlM6IFNlY3VyZVBhcnNlT3B0aW9ucyA9IHtcbiAgICBtYXhZYW1sU2l6ZTogNjQgKiAxMDI0LCAgICAgIC8vIDY0S0IgZm9yIFlBTUxcbiAgICBtYXhDb250ZW50U2l6ZTogMTAyNCAqIDEwMjQsICAvLyAxTUIgZm9yIGNvbnRlbnRcbiAgICB2YWxpZGF0ZUNvbnRlbnQ6IHRydWUsXG4gICAgdmFsaWRhdGVGaWVsZHM6IHRydWUgICAgICAgICAvLyBCeSBkZWZhdWx0LCBhcHBseSBmaWVsZCB2YWxpZGF0b3JzXG4gIH07XG5cbiAgLy8gQWxsb3dlZCBZQU1MIHR5cGVzIC0gdXNpbmcgQ09SRV9TQ0hFTUEgKHNhZmUgc3Vic2V0IHdpdGggYmFzaWMgdHlwZXMgbGlrZSBib29sZWFucyBhbmQgaW50ZWdlcnMpXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFNBRkVfU0NIRU1BID0geWFtbC5DT1JFX1NDSEVNQTtcblxuICAvLyBBZGRpdGlvbmFsIHZhbGlkYXRpb24gZm9yIHNwZWNpZmljIHBlcnNvbmEgZmllbGRzXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEZJRUxEX1ZBTElEQVRPUlM6IFJlY29yZDxzdHJpbmcsICh2YWx1ZTogYW55KSA9PiBib29sZWFuPiA9IHtcbiAgICBuYW1lOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYubGVuZ3RoIDw9IDEwMCxcbiAgICBkZXNjcmlwdGlvbjogKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyxcbiAgICBhdXRob3I6ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ3N0cmluZycgJiYgdi5sZW5ndGggPD0gMTAwLFxuICAgIHZlcnNpb246ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ3N0cmluZycgJiYgL15cXGQrXFwuXFxkKyhcXC5cXGQrKT8oLVthLXpBLVowLTkuLV0rKT8kLy50ZXN0KHYpLFxuICAgIGNhdGVnb3J5OiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYubGVuZ3RoIDw9IDUwLFxuICAgIGFnZV9yYXRpbmc6ICh2KSA9PiBbJ2FsbCcsICcxMysnLCAnMTgrJ10uaW5jbHVkZXModiksXG4gICAgcHJpY2U6ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ3N0cmluZycgJiYgKHYgPT09ICdmcmVlJyB8fCAvXlxcJFxcZCtcXC5cXGR7Mn0kLy50ZXN0KHYpKSxcbiAgICBhaV9nZW5lcmF0ZWQ6ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nIHx8IHYgPT09ICd0cnVlJyB8fCB2ID09PSAnZmFsc2UnLFxuICAgIGdlbmVyYXRpb25fbWV0aG9kOiAodikgPT4gWydodW1hbicsICdDaGF0R1BUJywgJ0NsYXVkZScsICdoeWJyaWQnXS5pbmNsdWRlcyh2KSxcbiAgICBjcmVhdGVkX2RhdGU6ICh2KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHYgIT09ICdzdHJpbmcnKSByZXR1cm4gZmFsc2U7XG4gICAgICBcbiAgICAgIC8vIE1vcmUgZmxleGlibGUgZGF0ZSB2YWxpZGF0aW9uIC0gYWNjZXB0IGNvbW1vbiBmb3JtYXRzXG4gICAgICAvLyBJU084NjAxLCBVUyBmb3JtYXQsIEV1cm9wZWFuIGZvcm1hdCwgc2ltcGxlIGRhdGVzXG4gICAgICBjb25zdCBkYXRlUGF0dGVybnMgPSBbXG4gICAgICAgIC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0kLywgLy8gWVlZWS1NTS1ERFxuICAgICAgICAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9VFxcZHsyfTpcXGR7Mn06XFxkezJ9LywgLy8gSVNPODYwMSB3aXRoIHRpbWVcbiAgICAgICAgL15cXGR7MSwyfVxcL1xcZHsxLDJ9XFwvXFxkezR9JC8sIC8vIE1NL0REL1lZWVkgb3IgTS9EL1lZWVlcbiAgICAgICAgL15cXGR7MSwyfS1cXGR7MSwyfS1cXGR7NH0kLywgLy8gTU0tREQtWVlZWSBvciBNLUQtWVlZWVxuICAgICAgICAvXlxcZHsxLDJ9XFwuXFxkezEsMn1cXC5cXGR7NH0kLywgLy8gREQuTU0uWVlZWSAoRXVyb3BlYW4pXG4gICAgICAgIC9eKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKVxccytcXGR7MSwyfSw/XFxzK1xcZHs0fSQvaSAvLyBNb250aCBERCwgWVlZWVxuICAgICAgXTtcbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgaWYgaXQgbWF0Y2hlcyBjb21tb24gcGF0dGVybnMgZmlyc3RcbiAgICAgIGNvbnN0IG1hdGNoZXNQYXR0ZXJuID0gZGF0ZVBhdHRlcm5zLnNvbWUocGF0dGVybiA9PiBwYXR0ZXJuLnRlc3Qodi50cmltKCkpKTtcbiAgICAgIGlmICghbWF0Y2hlc1BhdHRlcm4pIHtcbiAgICAgICAgLy8gRmFsbCBiYWNrIHRvIERhdGUucGFyc2UgZm9yIG90aGVyIGZvcm1hdHMsIGJ1dCBiZSBtb3JlIGxlbmllbnRcbiAgICAgICAgY29uc3QgcGFyc2VkID0gRGF0ZS5wYXJzZSh2KTtcbiAgICAgICAgcmV0dXJuICFOdW1iZXIuaXNOYU4ocGFyc2VkKSAmJiBwYXJzZWQgPiAwOyAvLyBFbnN1cmUgaXQncyBhIHZhbGlkIHBvc2l0aXZlIHRpbWVzdGFtcFxuICAgICAgfVxuICAgICAgXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIHRyaWdnZXJzOiAodikgPT4gQXJyYXkuaXNBcnJheSh2KSAmJiB2LmV2ZXJ5KHQgPT4gdHlwZW9mIHQgPT09ICdzdHJpbmcnICYmIHQubGVuZ3RoIDw9IDUwKSxcbiAgICBjb250ZW50X2ZsYWdzOiAodikgPT4gQXJyYXkuaXNBcnJheSh2KSAmJiB2LmV2ZXJ5KGYgPT4gdHlwZW9mIGYgPT09ICdzdHJpbmcnICYmIGYubGVuZ3RoIDw9IDUwKVxuICB9O1xuXG4gIC8qKlxuICAgKiBQYXJzZSBhIE1hcmtkb3duIGZpbGUgd2l0aCBZQU1MIGZyb250bWF0dGVyIChTZWN1cmVseSlcbiAgICogXG4gICAqIEBwYXJhbSBpbnB1dCAtIFRoZSBmdWxsIGNvbnRlbnQgb2YgYSBNYXJrZG93biBmaWxlIHdpdGggWUFNTCBmcm9udG1hdHRlclxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFBhcnNpbmcgb3B0aW9ucyBmb3Igc2VjdXJpdHkgYW5kIHZhbGlkYXRpb25cbiAgICogQHJldHVybnMgUGFyc2VkQ29udGVudCB3aXRoIHNlcGFyYXRlZCBZQU1MIGRhdGEgYW5kIE1hcmtkb3duIGNvbnRlbnRcbiAgICogXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gRm9yIGEgcGVyc29uYSBmaWxlOlxuICAgKiBjb25zdCBwZXJzb25hRmlsZSA9IGAtLS1cbiAgICogbmFtZTogQ3JlYXRpdmUgV3JpdGVyXG4gICAqIGRlc2NyaXB0aW9uOiBBIGNyZWF0aXZlIHdyaXRpbmcgYXNzaXN0YW50XG4gICAqIC0tLVxuICAgKiBZb3UgYXJlIGEgY3JlYXRpdmUgd3JpdGVyLi4uYDtcbiAgICogXG4gICAqIGNvbnN0IHJlc3VsdCA9IFNlY3VyZVlhbWxQYXJzZXIucGFyc2UocGVyc29uYUZpbGUpO1xuICAgKiAvLyByZXN1bHQuZGF0YSA9IHsgbmFtZTogJ0NyZWF0aXZlIFdyaXRlcicsIGRlc2NyaXB0aW9uOiAnLi4uJyB9XG4gICAqIC8vIHJlc3VsdC5jb250ZW50ID0gJ1lvdSBhcmUgYSBjcmVhdGl2ZSB3cml0ZXIuLi4nXG4gICAqIGBgYFxuICAgKi9cbiAgc3RhdGljIHBhcnNlKGlucHV0OiBzdHJpbmcsIG9wdGlvbnM6IFNlY3VyZVBhcnNlT3B0aW9ucyA9IHt9KTogUGFyc2VkQ29udGVudCB7XG4gICAgY29uc3Qgb3B0cyA9IHsgLi4udGhpcy5ERUZBVUxUX09QVElPTlMsIC4uLm9wdGlvbnMgfTtcblxuICAgIC8vIDEuIFNpemUgdmFsaWRhdGlvblxuICAgIGlmIChpbnB1dC5sZW5ndGggPiAob3B0cy5tYXhDb250ZW50U2l6ZSB8fCB0aGlzLkRFRkFVTFRfT1BUSU9OUy5tYXhDb250ZW50U2l6ZSEpKSB7XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcignQ29udGVudCBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplJywgJ21lZGl1bScpO1xuICAgIH1cblxuICAgIC8vIDIuIEV4dHJhY3QgZnJvbnRtYXR0ZXIgYm91bmRhcmllc1xuICAgIC8vIEZJWDogU3VwcG9ydCBib3RoIFVuaXggKFxcbikgYW5kIFdpbmRvd3MgKFxcclxcbikgbGluZSBlbmRpbmdzXG4gICAgY29uc3QgZnJvbnRtYXR0ZXJNYXRjaCA9IGlucHV0Lm1hdGNoKC9eLS0tXFxyP1xcbihbXFxzXFxTXSo/KVxccj9cXG4tLS0vKTtcbiAgICBpZiAoIWZyb250bWF0dGVyTWF0Y2gpIHtcbiAgICAgIC8vIE5vIGZyb250bWF0dGVyLCByZXR1cm4gZW1wdHkgZGF0YVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YToge30sXG4gICAgICAgIGNvbnRlbnQ6IGlucHV0XG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHlhbWxDb250ZW50ID0gZnJvbnRtYXR0ZXJNYXRjaFsxXTtcbiAgICBjb25zdCBtYXJrZG93bkNvbnRlbnQgPSBpbnB1dC5zdWJzdHJpbmcoZnJvbnRtYXR0ZXJNYXRjaFswXS5sZW5ndGgpO1xuXG4gICAgLy8gMy4gVmFsaWRhdGUgWUFNTCBzaXplXG4gICAgaWYgKHlhbWxDb250ZW50Lmxlbmd0aCA+IChvcHRzLm1heFlhbWxTaXplIHx8IHRoaXMuREVGQVVMVF9PUFRJT05TLm1heFlhbWxTaXplISkpIHtcbiAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKCdZQU1MIGZyb250bWF0dGVyIGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkIHNpemUnLCAnbWVkaXVtJyk7XG4gICAgfVxuXG4gICAgLy8gNC4gUHJlLXBhcnNlIHNlY3VyaXR5IHZhbGlkYXRpb25cbiAgICAvLyBGSVggKElzc3VlICMxMjExKTogT25seSB2YWxpZGF0ZSBjb250ZW50IGlmIHZhbGlkYXRlQ29udGVudCBvcHRpb24gaXMgdHJ1ZVxuICAgIGlmIChvcHRzLnZhbGlkYXRlQ29udGVudCAmJiAhQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZVlhbWxDb250ZW50KHlhbWxDb250ZW50KSkge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnWUFNTF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgIHNldmVyaXR5OiAnQ1JJVElDQUwnLFxuICAgICAgICBzb3VyY2U6ICdTZWN1cmVZYW1sUGFyc2VyJyxcbiAgICAgICAgZGV0YWlsczogJ01hbGljaW91cyBZQU1MIHBhdHRlcm4gZGV0ZWN0ZWQgZHVyaW5nIHBhcnNpbmcnXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKCdNYWxpY2lvdXMgWUFNTCBjb250ZW50IGRldGVjdGVkJywgJ2NyaXRpY2FsJyk7XG4gICAgfVxuXG4gICAgLy8gNS4gUGFyc2Ugd2l0aCBzYWZlIHNjaGVtYVxuICAgIGxldCBkYXRhOiBhbnk7XG4gICAgdHJ5IHtcbiAgICAgIGRhdGEgPSB5YW1sLmxvYWQoeWFtbENvbnRlbnQsIHtcbiAgICAgICAgc2NoZW1hOiB0aGlzLlNBRkVfU0NIRU1BLFxuICAgICAgICBqc29uOiBmYWxzZSwgIC8vIERvbid0IGFsbG93IEpTT04tc3BlY2lmaWMgdHlwZXNcbiAgICAgICAgb25XYXJuaW5nOiAod2FybmluZykgPT4ge1xuICAgICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICAgIHR5cGU6ICdZQU1MX1BBUlNJTkdfV0FSTklORycsXG4gICAgICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgICAgICBzb3VyY2U6ICdTZWN1cmVZYW1sUGFyc2VyJyxcbiAgICAgICAgICAgIGRldGFpbHM6IGBZQU1MIHdhcm5pbmc6ICR7d2FybmluZy5tZXNzYWdlfWBcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKGBZQU1MIHBhcnNpbmcgZmFpbGVkOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWAsICdoaWdoJyk7XG4gICAgfVxuXG4gICAgLy8gNi4gRW5zdXJlIGRhdGEgaXMgYW4gb2JqZWN0XG4gICAgaWYgKHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0JyB8fCBkYXRhID09PSBudWxsIHx8IEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKCdZQU1MIG11c3QgY29udGFpbiBhbiBvYmplY3QgYXQgcm9vdCBsZXZlbCcsICdtZWRpdW0nKTtcbiAgICB9XG5cbiAgICAvLyA3LiBWYWxpZGF0ZSBhbGxvd2VkIGtleXMgaWYgc3BlY2lmaWVkXG4gICAgaWYgKG9wdHMuYWxsb3dlZEtleXMpIHtcbiAgICAgIGNvbnN0IGludmFsaWRLZXlzID0gT2JqZWN0LmtleXMoZGF0YSkuZmlsdGVyKGtleSA9PiAhb3B0cy5hbGxvd2VkS2V5cyEuaW5jbHVkZXMoa2V5KSk7XG4gICAgICBpZiAoaW52YWxpZEtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcihgSW52YWxpZCBZQU1MIGtleXMgZGV0ZWN0ZWQ6ICR7aW52YWxpZEtleXMuam9pbignLCAnKX1gLCAnbWVkaXVtJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gOC4gVmFsaWRhdGUgZmllbGQgdHlwZXMgYW5kIGNvbnRlbnRcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSkge1xuICAgICAgY29uc3QgaGFzRmllbGRWYWxpZGF0b3IgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5GSUVMRF9WQUxJREFUT1JTLCBrZXkpO1xuICAgICAgY29uc3QgZmllbGRWYWxpZGF0b3IgPSBoYXNGaWVsZFZhbGlkYXRvciA/IHRoaXMuRklFTERfVkFMSURBVE9SU1trZXldIDogdW5kZWZpbmVkO1xuXG4gICAgICAvLyBDaGVjayBmaWVsZC1zcGVjaWZpYyB2YWxpZGF0b3JzIG9ubHkgaWYgZmllbGQgdmFsaWRhdGlvbiBpcyBlbmFibGVkXG4gICAgICBpZiAob3B0cy52YWxpZGF0ZUZpZWxkcyAmJiB0eXBlb2YgZmllbGRWYWxpZGF0b3IgPT09ICdmdW5jdGlvbicgJiYgIWZpZWxkVmFsaWRhdG9yKHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcihgSW52YWxpZCB2YWx1ZSBmb3IgZmllbGQgJyR7a2V5fSdgLCAnbWVkaXVtJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIHN0cmluZyBmaWVsZHMgZm9yIGluamVjdGlvbiBwYXR0ZXJuc1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgb3B0cy52YWxpZGF0ZUNvbnRlbnQpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IENvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVBbmRTYW5pdGl6ZSh2YWx1ZSwge1xuICAgICAgICAgIGNvbnRlbnRDb250ZXh0OiBvcHRzLmNvbnRlbnRDb250ZXh0LFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF2YWxpZGF0aW9uLmlzVmFsaWQgJiYgdmFsaWRhdGlvbi5zZXZlcml0eSA9PT0gJ2NyaXRpY2FsJykge1xuICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKGBTZWN1cml0eSB0aHJlYXQgZGV0ZWN0ZWQgaW4gZmllbGQgJyR7a2V5fSdgLCAnY3JpdGljYWwnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZXBsYWNlIHdpdGggc2FuaXRpemVkIGNvbnRlbnRcbiAgICAgICAgZGF0YVtrZXldID0gdmFsaWRhdGlvbi5zYW5pdGl6ZWRDb250ZW50O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDkuIFZhbGlkYXRlIG1hcmtkb3duIGNvbnRlbnQgaWYgcmVxdWVzdGVkXG4gICAgbGV0IGZpbmFsQ29udGVudCA9IG1hcmtkb3duQ29udGVudDtcbiAgICBpZiAob3B0cy52YWxpZGF0ZUNvbnRlbnQpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnRWYWxpZGF0aW9uID0gQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZUFuZFNhbml0aXplKG1hcmtkb3duQ29udGVudCwge1xuICAgICAgICBjb250ZW50Q29udGV4dDogb3B0cy5jb250ZW50Q29udGV4dCxcbiAgICAgIH0pO1xuICAgICAgaWYgKCFjb250ZW50VmFsaWRhdGlvbi5pc1ZhbGlkICYmIGNvbnRlbnRWYWxpZGF0aW9uLnNldmVyaXR5ID09PSAnY3JpdGljYWwnKSB7XG4gICAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKCdTZWN1cml0eSB0aHJlYXQgZGV0ZWN0ZWQgaW4gY29udGVudCcsICdjcml0aWNhbCcpO1xuICAgICAgfVxuICAgICAgZmluYWxDb250ZW50ID0gY29udGVudFZhbGlkYXRpb24uc2FuaXRpemVkQ29udGVudCB8fCBtYXJrZG93bkNvbnRlbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGEsXG4gICAgICBjb250ZW50OiBmaW5hbENvbnRlbnRcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHNlY3VyZSBncmF5LW1hdHRlciBjb21wYXRpYmxlIHBhcnNlclxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVNlY3VyZU1hdHRlclBhcnNlcigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyc2U6IChpbnB1dDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucGFyc2UoaW5wdXQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhLFxuICAgICAgICAgIGNvbnRlbnQ6IHJlc3VsdC5jb250ZW50LFxuICAgICAgICAgIGV4Y2VycHQ6IHJlc3VsdC5leGNlcnB0LFxuICAgICAgICAgIG9yaWc6IGlucHV0XG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgc3RyaW5naWZ5OiAoY29udGVudDogc3RyaW5nLCBkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgLy8gVmFsaWRhdGUgZGF0YSBiZWZvcmUgc3RyaW5naWZ5aW5nXG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSBDb250ZW50VmFsaWRhdG9yLnZhbGlkYXRlTWV0YWRhdGEoZGF0YSk7XG4gICAgICAgIGlmICghdmFsaWRhdGlvbi5pc1ZhbGlkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoJ0Nhbm5vdCBzdHJpbmdpZnkgY29udGVudCB3aXRoIHNlY3VyaXR5IHRocmVhdHMnLCAnaGlnaCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXNlIHNhZmUgWUFNTCBkdW1wXG4gICAgICAgIGNvbnN0IHlhbWxTdHIgPSB5YW1sLmR1bXAoZGF0YSwge1xuICAgICAgICAgIHNjaGVtYTogdGhpcy5TQUZFX1NDSEVNQSxcbiAgICAgICAgICBza2lwSW52YWxpZDogdHJ1ZSxcbiAgICAgICAgICBub1JlZnM6IHRydWUsXG4gICAgICAgICAgbm9Db21wYXRNb2RlOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBgLS0tXFxuJHt5YW1sU3RyfS0tLVxcbiR7Y29udGVudH1gO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU2FmZSB3cmFwcGVyIGZvciBncmF5LW1hdHRlciB3aXRoIHNlY3VyaXR5IHZhbGlkYXRpb25zXG4gICAqL1xuICBzdGF0aWMgc2FmZU1hdHRlcihpbnB1dDogc3RyaW5nLCBvcHRpb25zPzogbWF0dGVyLkdyYXlNYXR0ZXJPcHRpb248c3RyaW5nLCBhbnk+LCBzZWN1cmVPcHRpb25zPzogU2VjdXJlUGFyc2VPcHRpb25zKTogbWF0dGVyLkdyYXlNYXR0ZXJGaWxlPHN0cmluZz4ge1xuICAgIC8vIEZpcnN0LCB1c2Ugb3VyIHNlY3VyZSBwYXJzZXIgKGZvciB2YWxpZGF0aW9uKVxuICAgIHRoaXMucGFyc2UoaW5wdXQsIHNlY3VyZU9wdGlvbnMpO1xuXG4gICAgLy8gVGhlbiB1c2UgZ3JheS1tYXR0ZXIgd2l0aCBjdXN0b20gZW5naW5lc1xuICAgIHJldHVybiBtYXR0ZXIoaW5wdXQsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBlbmdpbmVzOiB7XG4gICAgICAgIHlhbWw6IHtcbiAgICAgICAgICBwYXJzZTogKHN0cjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAvLyBVc2Ugb3VyIHNlY3VyZSBZQU1MIHBhcnNpbmdcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHlhbWwubG9hZChzdHIsIHtcbiAgICAgICAgICAgICAgc2NoZW1hOiB0aGlzLlNBRkVfU0NIRU1BLFxuICAgICAgICAgICAgICBqc29uOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBFbnN1cmUgaXQncyBhbiBvYmplY3RcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0JyB8fCBwYXJzZWQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlZCBhcyBvYmplY3Q7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdHJpbmdpZnk6IChvYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHlhbWwuZHVtcChvYmosIHtcbiAgICAgICAgICAgICAgc2NoZW1hOiB0aGlzLlNBRkVfU0NIRU1BLFxuICAgICAgICAgICAgICBza2lwSW52YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgbm9SZWZzOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSByYXcgWUFNTCBjb250ZW50IHNhZmVseSAobm90IGZyb250bWF0dGVyLCBqdXN0IHBsYWluIFlBTUwpXG4gICAqXG4gICAqIFVTRSBUSElTIEZPUjpcbiAgICogLSBFeHBvcnQgcGFja2FnZSBkYXRhIGZpZWxkc1xuICAgKiAtIENvbmZpZ3VyYXRpb24gc25pcHBldHNcbiAgICogLSBBbnkgcHVyZSBZQU1MIHN0cmluZyB0aGF0IG5lZWRzIHBhcnNpbmdcbiAgICpcbiAgICogVGhpcyB1c2VzIENPUkVfU0NIRU1BIHdoaWNoIG9ubHkgYWxsb3dzIHNhZmUgYmFzaWMgdHlwZXM6XG4gICAqIC0gc3RyaW5ncywgbnVtYmVycywgYm9vbGVhbnMsIG51bGxcbiAgICogLSBhcnJheXMgYW5kIG9iamVjdHNcbiAgICogLSBOTyBjdXN0b20gdHlwZXMsIGZ1bmN0aW9ucywgb3IgY29kZSBleGVjdXRpb25cbiAgICpcbiAgICogQHBhcmFtIHlhbWxDb250ZW50IC0gUmF3IFlBTUwgc3RyaW5nIHRvIHBhcnNlXG4gICAqIEBwYXJhbSBtYXhTaXplIC0gTWF4aW11bSBhbGxvd2VkIHNpemUgKGRlZmF1bHQgNjRLQilcbiAgICogQHJldHVybnMgUGFyc2VkIG9iamVjdFxuICAgKiBAdGhyb3dzIFNlY3VyaXR5RXJyb3IgaWYgY29udGVudCBpcyB0b28gbGFyZ2Ugb3IgY29udGFpbnMgdGhyZWF0c1xuICAgKi9cbiAgc3RhdGljIHBhcnNlUmF3WWFtbCh5YW1sQ29udGVudDogc3RyaW5nLCBtYXhTaXplOiBudW1iZXIgPSA2NCAqIDEwMjQpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgLy8gU2l6ZSB2YWxpZGF0aW9uXG4gICAgaWYgKHlhbWxDb250ZW50Lmxlbmd0aCA+IG1heFNpemUpIHtcbiAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKCdZQU1MIGNvbnRlbnQgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgc2l6ZScsICdtZWRpdW0nKTtcbiAgICB9XG5cbiAgICAvLyBGaXggIzkwODogWUFNTCBib21iIGRldGVjdGlvbiDigJQgcHJldmlvdXNseSBza2lwcGVkLCBhbGxvd2luZyBib21iIHBheWxvYWRzXG4gICAgLy8gdGhyb3VnaCBNQ1AtQVFMIGNyZWF0ZSBkaXNwYXRjaGVyIGFuZCB3ZWIgcm91dGVzIHRoYXQgdXNlIHBhcnNlUmF3WWFtbCgpLlxuICAgIGlmICghQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZVlhbWxDb250ZW50KHlhbWxDb250ZW50KSkge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnWUFNTF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgIHNldmVyaXR5OiAnQ1JJVElDQUwnLFxuICAgICAgICBzb3VyY2U6ICdTZWN1cmVZYW1sUGFyc2VyLnBhcnNlUmF3WWFtbCcsXG4gICAgICAgIGRldGFpbHM6ICdNYWxpY2lvdXMgWUFNTCBwYXR0ZXJuIGRldGVjdGVkIGluIHJhdyBZQU1MIGNvbnRlbnQnXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKCdNYWxpY2lvdXMgWUFNTCBjb250ZW50IGRldGVjdGVkJywgJ2NyaXRpY2FsJyk7XG4gICAgfVxuXG4gICAgLy8gUGFyc2Ugd2l0aCBzYWZlIHNjaGVtYVxuICAgIGNvbnN0IHBhcnNlZCA9IHlhbWwubG9hZCh5YW1sQ29udGVudCwge1xuICAgICAgc2NoZW1hOiB0aGlzLlNBRkVfU0NIRU1BLCAgLy8gQ09SRV9TQ0hFTUEgLSBzYWZlIGJhc2ljIHR5cGVzIG9ubHlcbiAgICAgIGpzb246IGZhbHNlXG4gICAgfSk7XG5cbiAgICAvLyBFbnN1cmUgcmVzdWx0IGlzIGFuIG9iamVjdFxuICAgIGlmICh0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0JyB8fCBwYXJzZWQgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKCdZQU1MIGNvbnRlbnQgbXVzdCBwYXJzZSB0byBhbiBvYmplY3QnLCAnbWVkaXVtJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfVxufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentElementValidator.d.ts","sourceRoot":"","sources":["../../../src/services/validation/AgentElementValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAoB,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACrG,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"AgentElementValidator.d.ts","sourceRoot":"","sources":["../../../src/services/validation/AgentElementValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAoB,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACrG,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAuCxD;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,uBAAuB;gBAE9D,iBAAiB,EAAE,iBAAiB,EACpC,wBAAwB,EAAE,wBAAwB,EAClD,eAAe,EAAE,eAAe;IAKlC;;OAEG;IACY,cAAc,CAC3B,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,gBAAgB,CAAC;IA4K5B;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,YAAY;IA6EpB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA6H9B;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAYnC;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IA6CzB;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;IA8ErB;;;;;;;;OAQG;IACH,OAAO,CAAC,oBAAoB;IAiC5B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,gBAAgB;IAgGxB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,kBAAkB;IA6D1B;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAwBjC;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IA2B/B;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAwB7B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAgBlC;;;OAGG;IACH,OAAO,CAAC,SAAS;CAWlB"}
|
|
@@ -15,6 +15,7 @@ import { ValidatorHelpers } from './ElementValidator.js';
|
|
|
15
15
|
import { DECISION_FRAMEWORKS, RISK_TOLERANCE_LEVELS, STEP_LIMIT_ACTIONS, EXECUTION_FAILURE_ACTIONS, BACKOFF_STRATEGIES, AGENT_LIMITS, isOneOf } from '../../elements/agents/constants.js';
|
|
16
16
|
import { findPatternConflicts } from '../../utils/patternMatcher.js';
|
|
17
17
|
import { parseElementPolicy } from '../../handlers/mcp-aql/policies/ElementPolicies.js';
|
|
18
|
+
import { SECURITY_LIMITS } from '../../security/constants.js';
|
|
18
19
|
/**
|
|
19
20
|
* Valid parameter types for goal templates
|
|
20
21
|
*/
|
|
@@ -342,7 +343,7 @@ export class AgentElementValidator extends GenericElementValidator {
|
|
|
342
343
|
}
|
|
343
344
|
else {
|
|
344
345
|
const descResult = this.validationService.validateContent(paramObj.description, {
|
|
345
|
-
maxLength:
|
|
346
|
+
maxLength: SECURITY_LIMITS.MAX_DOCUMENTATION_FIELD_LENGTH
|
|
346
347
|
});
|
|
347
348
|
if (!descResult.isValid) {
|
|
348
349
|
warnings.push(`Parameter '${paramName}' description failed validation: ${descResult.detectedPatterns?.join(', ') || 'invalid content'}`);
|
|
@@ -818,4 +819,4 @@ export class AgentElementValidator extends GenericElementValidator {
|
|
|
818
819
|
return hasV1Fields && !hasV2Goal;
|
|
819
820
|
}
|
|
820
821
|
}
|
|
821
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWdlbnRFbGVtZW50VmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3ZhbGlkYXRpb24vQWdlbnRFbGVtZW50VmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkUsT0FBTyxFQUFvQixnQkFBZ0IsRUFBNEIsTUFBTSx1QkFBdUIsQ0FBQztBQUlyRyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQixrQkFBa0IsRUFDbEIseUJBQXlCLEVBQ3pCLGtCQUFrQixFQUNsQixZQUFZLEVBQ1osT0FBTyxFQUdSLE1BQU0sb0NBQW9DLENBQUM7QUFDNUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDckUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFFeEY7O0dBRUc7QUFDSCxNQUFNLHFCQUFxQixHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQVUsQ0FBQztBQUd2RTs7R0FFRztBQUNILE1BQU0scUJBQXFCLEdBQUc7SUFDNUIsVUFBVTtJQUNWLFFBQVE7SUFDUixVQUFVO0lBQ1YsV0FBVztJQUNYLFdBQVc7Q0FDSCxDQUFDO0FBRVg7O0dBRUc7QUFDSCxNQUFNLHdCQUF3QixHQUFHLENBQUMsQ0FBQztBQUNuQyxNQUFNLHdCQUF3QixHQUFHLEtBQUssQ0FBQztBQUV2Qzs7R0FFRztBQUNILE1BQU0sT0FBTyxxQkFBc0IsU0FBUSx1QkFBdUI7SUFDaEUsWUFDRSxpQkFBb0MsRUFDcEMsd0JBQWtELEVBQ2xELGVBQWdDO1FBRWhDLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLGlCQUFpQixFQUFF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LFdBQVcsR0FBRyxDQUNsQixNQUFNLENBQUMsaUJBQWlCLEtBQUssU0FBUztZQUN0QyxNQUFNLENBQUMsZUFBZSxLQUFLLFNBQVM7WUFDcEMsTUFBTSxDQUFDLGdCQUFnQixLQUFLLFNBQVMsQ0FDdEMsQ0FBQztRQUVGLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDO1FBRTVDLE9BQU8sV0FBVyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ25DLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQWdlbnRFbGVtZW50VmFsaWRhdG9yIC0gU3BlY2lhbGl6ZWQgdmFsaWRhdG9yIGZvciBBZ2VudCBlbGVtZW50c1xuICpcbiAqIEV4dGVuZHMgR2VuZXJpY0VsZW1lbnRWYWxpZGF0b3IgdG8gYWRkIEFnZW50LXNwZWNpZmljIHZhbGlkYXRpb246XG4gKiAtIFYyLjAgZmllbGRzOiBnb2FsICh0ZW1wbGF0ZS9wYXJhbWV0ZXJzKSwgYWN0aXZhdGVzLCB0b29scywgc3lzdGVtUHJvbXB0LCBhdXRvbm9teVxuICogLSBWMS54IGxlZ2FjeSBmaWVsZHMgd2l0aCBkZXByZWNhdGlvbiB3YXJuaW5nc1xuICogLSBDb21wbGV4IHZhbGlkYXRpb25zOiBnb2FsIHRlbXBsYXRlL3BhcmFtZXRlciBjb25zaXN0ZW5jeSwgYXV0b25vbXkgY29uZmxpY3QgZGV0ZWN0aW9uXG4gKiAtIE1pZ3JhdGlvbiBzdWdnZXN0aW9ucyBmb3IgVjEgYWdlbnRzXG4gKlxuICogQHNpbmNlIHYyLjAuMCAtIEFnZW50aWMgTG9vcCBSZWRlc2lnblxuICovXG5cbmltcG9ydCB7IEVsZW1lbnRUeXBlIH0gZnJvbSAnLi4vLi4vcG9ydGZvbGlvL3R5cGVzLmpzJztcbmltcG9ydCB7IEdlbmVyaWNFbGVtZW50VmFsaWRhdG9yIH0gZnJvbSAnLi9HZW5lcmljRWxlbWVudFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uUmVzdWx0LCBWYWxpZGF0b3JIZWxwZXJzLCBFbGVtZW50VmFsaWRhdGlvbk9wdGlvbnMgfSBmcm9tICcuL0VsZW1lbnRWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuL1ZhbGlkYXRpb25TZXJ2aWNlLmpzJztcbmltcG9ydCB7IFRyaWdnZXJWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4vVHJpZ2dlclZhbGlkYXRpb25TZXJ2aWNlLmpzJztcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4uL01ldGFkYXRhU2VydmljZS5qcyc7XG5pbXBvcnQge1xuICBERUNJU0lPTl9GUkFNRVdPUktTLFxuICBSSVNLX1RPTEVSQU5DRV9MRVZFTFMsXG4gIFNURVBfTElNSVRfQUNUSU9OUyxcbiAgRVhFQ1VUSU9OX0ZBSUxVUkVfQUNUSU9OUyxcbiAgQkFDS09GRl9TVFJBVEVHSUVTLFxuICBBR0VOVF9MSU1JVFMsXG4gIGlzT25lT2YsXG4gIERlY2lzaW9uRnJhbWV3b3JrLFxuICBSaXNrVG9sZXJhbmNlXG59IGZyb20gJy4uLy4uL2VsZW1lbnRzL2FnZW50cy9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgZmluZFBhdHRlcm5Db25mbGljdHMgfSBmcm9tICcuLi8uLi91dGlscy9wYXR0ZXJuTWF0Y2hlci5qcyc7XG5pbXBvcnQgeyBwYXJzZUVsZW1lbnRQb2xpY3kgfSBmcm9tICcuLi8uLi9oYW5kbGVycy9tY3AtYXFsL3BvbGljaWVzL0VsZW1lbnRQb2xpY2llcy5qcyc7XG5cbi8qKlxuICogVmFsaWQgcGFyYW1ldGVyIHR5cGVzIGZvciBnb2FsIHRlbXBsYXRlc1xuICovXG5jb25zdCBWQUxJRF9QQVJBTUVURVJfVFlQRVMgPSBbJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbiddIGFzIGNvbnN0O1xudHlwZSBQYXJhbWV0ZXJUeXBlID0gdHlwZW9mIFZBTElEX1BBUkFNRVRFUl9UWVBFU1tudW1iZXJdO1xuXG4vKipcbiAqIFZhbGlkIGVsZW1lbnQgdHlwZXMgZm9yIGFjdGl2YXRlcyBjb25maWd1cmF0aW9uXG4gKi9cbmNvbnN0IFZBTElEX0FDVElWQVRFU19UWVBFUyA9IFtcbiAgJ3BlcnNvbmFzJyxcbiAgJ3NraWxscycsXG4gICdtZW1vcmllcycsXG4gICd0ZW1wbGF0ZXMnLFxuICAnZW5zZW1ibGVzJ1xuXSBhcyBjb25zdDtcblxuLyoqXG4gKiBTeXN0ZW0gcHJvbXB0IGxlbmd0aCBsaW1pdHNcbiAqL1xuY29uc3QgU1lTVEVNX1BST01QVF9NSU5fTEVOR1RIID0gMTtcbmNvbnN0IFNZU1RFTV9QUk9NUFRfTUFYX0xFTkdUSCA9IDEwMDAwO1xuXG4vKipcbiAqIFNwZWNpYWxpemVkIHZhbGlkYXRvciBmb3IgQWdlbnQgZWxlbWVudHNcbiAqL1xuZXhwb3J0IGNsYXNzIEFnZW50RWxlbWVudFZhbGlkYXRvciBleHRlbmRzIEdlbmVyaWNFbGVtZW50VmFsaWRhdG9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgdmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlLFxuICAgIHRyaWdnZXJWYWxpZGF0aW9uU2VydmljZTogVHJpZ2dlclZhbGlkYXRpb25TZXJ2aWNlLFxuICAgIG1ldGFkYXRhU2VydmljZTogTWV0YWRhdGFTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKEVsZW1lbnRUeXBlLkFHRU5ULCB2YWxpZGF0aW9uU2VydmljZSwgdHJpZ2dlclZhbGlkYXRpb25TZXJ2aWNlLCBtZXRhZGF0YVNlcnZpY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHZhbGlkYXRlQ3JlYXRlIHRvIGFkZCBhZ2VudC1zcGVjaWZpYyB2YWxpZGF0aW9uXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyB2YWxpZGF0ZUNyZWF0ZShcbiAgICBkYXRhOiB1bmtub3duLFxuICAgIG9wdGlvbnM/OiBFbGVtZW50VmFsaWRhdGlvbk9wdGlvbnNcbiAgKTogUHJvbWlzZTxWYWxpZGF0aW9uUmVzdWx0PiB7XG4gICAgLy8gRmlyc3QgcnVuIGdlbmVyaWMgdmFsaWRhdGlvblxuICAgIGNvbnN0IGJhc2VSZXN1bHQgPSBhd2FpdCBzdXBlci52YWxpZGF0ZUNyZWF0ZShkYXRhLCBvcHRpb25zKTtcbiAgICBjb25zdCBlcnJvcnMgPSBbLi4uYmFzZVJlc3VsdC5lcnJvcnNdO1xuICAgIGNvbnN0IHdhcm5pbmdzID0gWy4uLmJhc2VSZXN1bHQud2FybmluZ3NdO1xuICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gWy4uLihiYXNlUmVzdWx0LnN1Z2dlc3Rpb25zIHx8IFtdKV07XG5cbiAgICBpZiAoIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gYmFzZVJlc3VsdDtcbiAgICB9XG5cbiAgICBjb25zdCByZWNvcmQgPSBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gICAgLy8gVjIuMCBPUFRJT05BTCBGSUVMRDogZ29hbFxuICAgIC8vIE5vdGU6IFYxIGFnZW50cyBkb24ndCBoYXZlIGdvYWwgLSB0aGV5IHVzZSBkZWNpc2lvbkZyYW1ld29yay9zcGVjaWFsaXphdGlvbnNcbiAgICAvLyBWMiBhZ2VudHMgc2hvdWxkIGRlZmluZSBnb2FsLCBidXQgd2UgZG9uJ3QgcmVxdWlyZSBpdCB0byBtYWludGFpbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgaWYgKHJlY29yZC5nb2FsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGdvYWxSZXN1bHQgPSB0aGlzLnZhbGlkYXRlR29hbChyZWNvcmQuZ29hbCk7XG4gICAgICBpZiAoIWdvYWxSZXN1bHQuaXNWYWxpZCkge1xuICAgICAgICBlcnJvcnMucHVzaCguLi5nb2FsUmVzdWx0LmVycm9ycyk7XG4gICAgICB9XG4gICAgICB3YXJuaW5ncy5wdXNoKC4uLmdvYWxSZXN1bHQud2FybmluZ3MpO1xuICAgIH1cblxuICAgIC8vIFYyLjAgT1BUSU9OQUwgRklFTERTXG5cbiAgICAvLyBWYWxpZGF0ZSBhY3RpdmF0ZXMgY29uZmlndXJhdGlvblxuICAgIGlmIChyZWNvcmQuYWN0aXZhdGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGFjdGl2YXRlc1Jlc3VsdCA9IHRoaXMudmFsaWRhdGVBY3RpdmF0ZXMocmVjb3JkLmFjdGl2YXRlcyk7XG4gICAgICBpZiAoIWFjdGl2YXRlc1Jlc3VsdC5pc1ZhbGlkKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKC4uLmFjdGl2YXRlc1Jlc3VsdC5lcnJvcnMpO1xuICAgICAgfVxuICAgICAgd2FybmluZ3MucHVzaCguLi5hY3RpdmF0ZXNSZXN1bHQud2FybmluZ3MpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHRvb2xzIGNvbmZpZ3VyYXRpb25cbiAgICBpZiAocmVjb3JkLnRvb2xzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHRvb2xzUmVzdWx0ID0gdGhpcy52YWxpZGF0ZVRvb2xzKHJlY29yZC50b29scyk7XG4gICAgICBpZiAoIXRvb2xzUmVzdWx0LmlzVmFsaWQpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goLi4udG9vbHNSZXN1bHQuZXJyb3JzKTtcbiAgICAgIH1cbiAgICAgIHdhcm5pbmdzLnB1c2goLi4udG9vbHNSZXN1bHQud2FybmluZ3MpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHN5c3RlbSBwcm9tcHRcbiAgICBpZiAocmVjb3JkLnN5c3RlbVByb21wdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBwcm9tcHRSZXN1bHQgPSB0aGlzLnZhbGlkYXRlU3lzdGVtUHJvbXB0KHJlY29yZC5zeXN0ZW1Qcm9tcHQpO1xuICAgICAgaWYgKCFwcm9tcHRSZXN1bHQuaXNWYWxpZCkge1xuICAgICAgICBlcnJvcnMucHVzaCguLi5wcm9tcHRSZXN1bHQuZXJyb3JzKTtcbiAgICAgIH1cbiAgICAgIHdhcm5pbmdzLnB1c2goLi4ucHJvbXB0UmVzdWx0Lndhcm5pbmdzKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBhdXRvbm9teSBjb25maWd1cmF0aW9uXG4gICAgaWYgKHJlY29yZC5hdXRvbm9teSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBhdXRvbm9teVJlc3VsdCA9IHRoaXMudmFsaWRhdGVBdXRvbm9teShyZWNvcmQuYXV0b25vbXkpO1xuICAgICAgaWYgKCFhdXRvbm9teVJlc3VsdC5pc1ZhbGlkKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKC4uLmF1dG9ub215UmVzdWx0LmVycm9ycyk7XG4gICAgICB9XG4gICAgICB3YXJuaW5ncy5wdXNoKC4uLmF1dG9ub215UmVzdWx0Lndhcm5pbmdzKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSByZXNpbGllbmNlIGNvbmZpZ3VyYXRpb24gKElzc3VlICM1MjYpXG4gICAgaWYgKHJlY29yZC5yZXNpbGllbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHJlc2lsaWVuY2VSZXN1bHQgPSB0aGlzLnZhbGlkYXRlUmVzaWxpZW5jZShyZWNvcmQucmVzaWxpZW5jZSk7XG4gICAgICBpZiAoIXJlc2lsaWVuY2VSZXN1bHQuaXNWYWxpZCkge1xuICAgICAgICBlcnJvcnMucHVzaCguLi5yZXNpbGllbmNlUmVzdWx0LmVycm9ycyk7XG4gICAgICB9XG4gICAgICB3YXJuaW5ncy5wdXNoKC4uLnJlc2lsaWVuY2VSZXN1bHQud2FybmluZ3MpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGdhdGVrZWVwZXIgcG9saWN5IHN0cnVjdHVyZSAoSXNzdWUgIzQ0OSlcbiAgICAvLyBVc2VzIHBhcnNlRWxlbWVudFBvbGljeSgpIHdoaWNoIHZhbGlkYXRlczogb2JqZWN0IHR5cGUsIGFsbG93L2NvbmZpcm0vZGVueVxuICAgIC8vIGFyZSBzdHJpbmcgYXJyYXlzLCBhbmQgc2NvcGVSZXN0cmljdGlvbnMgc3RydWN0dXJlIGlmIHByZXNlbnQuXG4gICAgaWYgKHJlY29yZC5nYXRla2VlcGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBvbGljeSA9IHBhcnNlRWxlbWVudFBvbGljeSh7IGdhdGVrZWVwZXI6IHJlY29yZC5nYXRla2VlcGVyIH0pO1xuICAgICAgICBpZiAoIXBvbGljeSkge1xuICAgICAgICAgIGVycm9ycy5wdXNoKCdJbnZhbGlkIGdhdGVrZWVwZXIgcG9saWN5OiBtdXN0IGJlIGEgbm9uLW51bGwgb2JqZWN0IHdpdGggYWxsb3csIGNvbmZpcm0sIG9yIGRlbnkgYXJyYXlzJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICAgIGVycm9ycy5wdXNoKGBJbnZhbGlkIGdhdGVrZWVwZXIgcG9saWN5OiAke21lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVjEuWCBMRUdBQ1kgRklFTERTIC0gVmFsaWRhdGUgYnV0IGVtaXQgd2FybmluZ3MgZm9yIGRlcHJlY2F0aW9uXG5cbiAgICAvLyBkZWNpc2lvbkZyYW1ld29yayAoVjEueClcbiAgICBpZiAocmVjb3JkLmRlY2lzaW9uRnJhbWV3b3JrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGZyYW1ld29ya1Jlc3VsdCA9IHRoaXMudmFsaWRhdGVEZWNpc2lvbkZyYW1ld29yayhyZWNvcmQuZGVjaXNpb25GcmFtZXdvcmspO1xuICAgICAgaWYgKCFmcmFtZXdvcmtSZXN1bHQuaXNWYWxpZCkge1xuICAgICAgICBlcnJvcnMucHVzaCguLi5mcmFtZXdvcmtSZXN1bHQuZXJyb3JzKTtcbiAgICAgIH1cbiAgICAgIHdhcm5pbmdzLnB1c2goLi4uZnJhbWV3b3JrUmVzdWx0Lndhcm5pbmdzKTtcbiAgICAgIHdhcm5pbmdzLnB1c2goXCJGaWVsZCAnZGVjaXNpb25GcmFtZXdvcmsnIGlzIGRlcHJlY2F0ZWQgaW4gVjIuMC4gTExNIGp1ZGdtZW50IGlzIG5vdyB1c2VkIGluc3RlYWQuXCIpO1xuICAgIH1cblxuICAgIC8vIHNwZWNpYWxpemF0aW9ucyAoVjEueClcbiAgICBpZiAocmVjb3JkLnNwZWNpYWxpemF0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBzcGVjaWFsaXphdGlvbnNSZXN1bHQgPSB0aGlzLnZhbGlkYXRlU3BlY2lhbGl6YXRpb25zKHJlY29yZC5zcGVjaWFsaXphdGlvbnMpO1xuICAgICAgaWYgKCFzcGVjaWFsaXphdGlvbnNSZXN1bHQuaXNWYWxpZCkge1xuICAgICAgICB3YXJuaW5ncy5wdXNoKC4uLnNwZWNpYWxpemF0aW9uc1Jlc3VsdC5lcnJvcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJpc2tUb2xlcmFuY2UgKFYxLngpXG4gICAgaWYgKHJlY29yZC5yaXNrVG9sZXJhbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHJpc2tSZXN1bHQgPSB0aGlzLnZhbGlkYXRlUmlza1RvbGVyYW5jZShyZWNvcmQucmlza1RvbGVyYW5jZSk7XG4gICAgICBpZiAoIXJpc2tSZXN1bHQuaXNWYWxpZCkge1xuICAgICAgICBlcnJvcnMucHVzaCguLi5yaXNrUmVzdWx0LmVycm9ycyk7XG4gICAgICB9XG4gICAgICAvLyBOb3RlOiByaXNrVG9sZXJhbmNlIGlzIGFsc28gdXNlZCBpbiBWMi4wIGF1dG9ub215IGNvbmZpZywgc28gb25seSB3YXJuIGlmIE5PVCBpbiBhdXRvbm9teVxuICAgICAgaWYgKCFyZWNvcmQuYXV0b25vbXkgfHwgIShyZWNvcmQuYXV0b25vbXkgYXMgYW55KT8ucmlza1RvbGVyYW5jZSkge1xuICAgICAgICB3YXJuaW5ncy5wdXNoKFwiRmllbGQgJ3Jpc2tUb2xlcmFuY2UnIGF0IHJvb3QgbGV2ZWwgaXMgZGVwcmVjYXRlZCBpbiBWMi4wLiBVc2UgJ2F1dG9ub215LnJpc2tUb2xlcmFuY2UnIGluc3RlYWQuXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGxlYXJuaW5nRW5hYmxlZCAoVjEueClcbiAgICBpZiAocmVjb3JkLmxlYXJuaW5nRW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHJlY29yZC5sZWFybmluZ0VuYWJsZWQgIT09ICdib29sZWFuJykge1xuICAgICAgICB3YXJuaW5ncy5wdXNoKFwiRmllbGQgJ2xlYXJuaW5nRW5hYmxlZCcgbXVzdCBiZSBhIGJvb2xlYW5cIik7XG4gICAgICB9XG4gICAgICB3YXJuaW5ncy5wdXNoKFwiRmllbGQgJ2xlYXJuaW5nRW5hYmxlZCcgaXMgZGVwcmVjYXRlZCBpbiBWMi4wLiBMTE0gaGFuZGxlcyBsZWFybmluZyBuYXR1cmFsbHkuXCIpO1xuICAgIH1cblxuICAgIC8vIG1heENvbmN1cnJlbnRHb2FscyAoVjEueClcbiAgICBpZiAocmVjb3JkLm1heENvbmN1cnJlbnRHb2FscyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBjb25jdXJyZW50UmVzdWx0ID0gdGhpcy52YWxpZGF0ZU1heENvbmN1cnJlbnRHb2FscyhyZWNvcmQubWF4Q29uY3VycmVudEdvYWxzKTtcbiAgICAgIGlmICghY29uY3VycmVudFJlc3VsdC5pc1ZhbGlkKSB7XG4gICAgICAgIHdhcm5pbmdzLnB1c2goLi4uY29uY3VycmVudFJlc3VsdC5lcnJvcnMpO1xuICAgICAgfVxuICAgICAgd2FybmluZ3MucHVzaChcIkZpZWxkICdtYXhDb25jdXJyZW50R29hbHMnIGlzIGRlcHJlY2F0ZWQgaW4gVjIuMC5cIik7XG4gICAgfVxuXG4gICAgLy8gcnVsZUVuZ2luZUNvbmZpZyAoVjEueClcbiAgICBpZiAocmVjb3JkLnJ1bGVFbmdpbmVDb25maWcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd2FybmluZ3MucHVzaChcIkZpZWxkICdydWxlRW5naW5lQ29uZmlnJyBpcyBkZXByZWNhdGVkIGluIFYyLjAuIENvbnN0cmFpbnRzIGFyZSBoYW5kbGVkIGJ5IGV2YWx1YXRlQ29uc3RyYWludHMoKS5cIik7XG4gICAgfVxuXG4gICAgLy8gU1VHR0VTVElPTlNcblxuICAgIC8vIFN1Z2dlc3QgbWlncmF0aW9uIGZvciBWMSBhZ2VudHNcbiAgICBpZiAodGhpcy5pc1YxQWdlbnQocmVjb3JkKSkge1xuICAgICAgc3VnZ2VzdGlvbnMucHVzaCgnVGhpcyBhcHBlYXJzIHRvIGJlIGEgVjEueCBhZ2VudC4gQ29uc2lkZXIgbWlncmF0aW5nIHRvIFYyLjAgZm9ybWF0IHdpdGggZ29hbCB0ZW1wbGF0ZXMuJyk7XG4gICAgfVxuXG4gICAgLy8gU3VnZ2VzdCBvcHRpb25hbCBmaWVsZHMgaWYgbWlzc2luZ1xuICAgIGlmICghcmVjb3JkLmFjdGl2YXRlcykge1xuICAgICAgc3VnZ2VzdGlvbnMucHVzaChcIkNvbnNpZGVyIGFkZGluZyAnYWN0aXZhdGVzJyBjb25maWd1cmF0aW9uIHRvIHNwZWNpZnkgd2hpY2ggZWxlbWVudHMgc2hvdWxkIGJlIGFjdGl2YXRlZC5cIik7XG4gICAgfVxuXG4gICAgaWYgKCFyZWNvcmQudG9vbHMpIHtcbiAgICAgIHN1Z2dlc3Rpb25zLnB1c2goXCJDb25zaWRlciBhZGRpbmcgJ3Rvb2xzJyBjb25maWd1cmF0aW9uIHRvIGd1aWRlIExMTSBvbiBhcHByb3ByaWF0ZSB0b29sIHVzYWdlLlwiKTtcbiAgICB9XG5cbiAgICBpZiAoIXJlY29yZC5zeXN0ZW1Qcm9tcHQpIHtcbiAgICAgIHN1Z2dlc3Rpb25zLnB1c2goXCJDb25zaWRlciBhZGRpbmcgJ3N5c3RlbVByb21wdCcgdG8gcHJvdmlkZSBjdXN0b20gTExNIGNvbnRleHQgZm9yIHRoaXMgYWdlbnQuXCIpO1xuICAgIH1cblxuICAgIGlmICghcmVjb3JkLmF1dG9ub215KSB7XG4gICAgICBzdWdnZXN0aW9ucy5wdXNoKFwiQ29uc2lkZXIgYWRkaW5nICdhdXRvbm9teScgY29uZmlndXJhdGlvbiB0byBjb250cm9sIGNvbnRpbnVlL3BhdXNlIGJlaGF2aW9yLlwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXNWYWxpZDogZXJyb3JzLmxlbmd0aCA9PT0gMCxcbiAgICAgIGVycm9ycyxcbiAgICAgIHdhcm5pbmdzLFxuICAgICAgc3VnZ2VzdGlvbnM6IHN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyBzdWdnZXN0aW9ucyA6IHVuZGVmaW5lZFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgVjIuMCBnb2FsIGNvbmZpZ3VyYXRpb24gKFJFUVVJUkVEKVxuICAgKlxuICAgKiBNdXN0IGhhdmU6XG4gICAqIC0gdGVtcGxhdGUgKHN0cmluZyB3aXRoIHtwYXJhbWV0ZXJ9IHBsYWNlaG9sZGVycylcbiAgICogLSBwYXJhbWV0ZXJzIChhcnJheSBvZiBwYXJhbWV0ZXIgZGVmaW5pdGlvbnMpXG4gICAqIC0gc3VjY2Vzc0NyaXRlcmlhIChvcHRpb25hbCBzdHJpbmdbXSlcbiAgICpcbiAgICogQWxzbyB2YWxpZGF0ZXMgdGVtcGxhdGUvcGFyYW1ldGVyIGNvbnNpc3RlbmN5LlxuICAgKlxuICAgKiBBcmNoaXRlY3R1cmU6IElucHV0IG5vcm1hbGl6YXRpb24gaGFwcGVucyBhdCBHZW5lcmljRWxlbWVudFZhbGlkYXRvciBib3VuZGFyeS5cbiAgICogVGhpcyB2YWxpZGF0b3IgcmVjZWl2ZXMgcHJlLW5vcm1hbGl6ZWQgZGF0YSBhbmQgdmFsaWRhdGVzIGJ1c2luZXNzIHJ1bGVzLlxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUdvYWwoZ29hbDogdW5rbm93bik6IFZhbGlkYXRpb25SZXN1bHQge1xuICAgIGlmICghZ29hbCB8fCB0eXBlb2YgZ29hbCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShnb2FsKSkge1xuICAgICAgcmV0dXJuIFZhbGlkYXRvckhlbHBlcnMuZmFpbChbJ0dvYWwgbXVzdCBiZSBhbiBvYmplY3Qgd2l0aCB0ZW1wbGF0ZSBhbmQgcGFyYW1ldGVycyddKTtcbiAgICB9XG5cbiAgICBjb25zdCBnb2FsT2JqID0gZ29hbCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBWYWxpZGF0ZSB0ZW1wbGF0ZVxuICAgIC8vIE5vdGU6IElucHV0IGlzIGFscmVhZHkgbm9ybWFsaXplZCBieSBHZW5lcmljRWxlbWVudFZhbGlkYXRvclxuICAgIGlmIChnb2FsT2JqLnRlbXBsYXRlID09PSB1bmRlZmluZWQgfHwgZ29hbE9iai50ZW1wbGF0ZSA9PT0gbnVsbCkge1xuICAgICAgZXJyb3JzLnB1c2goXCJHb2FsIGlzIG1pc3NpbmcgcmVxdWlyZWQgJ3RlbXBsYXRlJyBmaWVsZFwiKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBnb2FsT2JqLnRlbXBsYXRlICE9PSAnc3RyaW5nJykge1xuICAgICAgZXJyb3JzLnB1c2goXCJHb2FsIHRlbXBsYXRlIG11c3QgYmUgYSBzdHJpbmdcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFZhbGlkYXRlIGxlbmd0aCBhbmQgY29udGVudCBwYXR0ZXJucyAoZGF0YSBpcyBhbHJlYWR5IG5vcm1hbGl6ZWQpXG4gICAgICBjb25zdCBjb250ZW50UmVzdWx0ID0gdGhpcy52YWxpZGF0aW9uU2VydmljZS52YWxpZGF0ZUNvbnRlbnQoZ29hbE9iai50ZW1wbGF0ZSwge1xuICAgICAgICBtYXhMZW5ndGg6IEFHRU5UX0xJTUlUUy5NQVhfR09BTF9MRU5HVEhcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIWNvbnRlbnRSZXN1bHQuaXNWYWxpZCkge1xuICAgICAgICBlcnJvcnMucHVzaCguLi4oY29udGVudFJlc3VsdC5kZXRlY3RlZFBhdHRlcm5zIHx8IFsnR29hbCB0ZW1wbGF0ZSBmYWlsZWQgY29udGVudCB2YWxpZGF0aW9uJ10pKTtcbiAgICAgIH0gZWxzZSBpZiAoZ29hbE9iai50ZW1wbGF0ZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKFwiR29hbCB0ZW1wbGF0ZSBjYW5ub3QgYmUgZW1wdHlcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgcGFyYW1ldGVyc1xuICAgIGlmICghZ29hbE9iai5wYXJhbWV0ZXJzKSB7XG4gICAgICBlcnJvcnMucHVzaChcIkdvYWwgaXMgbWlzc2luZyByZXF1aXJlZCAncGFyYW1ldGVycycgZmllbGRcIik7XG4gICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShnb2FsT2JqLnBhcmFtZXRlcnMpKSB7XG4gICAgICBlcnJvcnMucHVzaChcIkdvYWwgcGFyYW1ldGVycyBtdXN0IGJlIGFuIGFycmF5XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBWYWxpZGF0ZSBlYWNoIHBhcmFtZXRlclxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBTdHJpbmcoZ29hbE9iai50ZW1wbGF0ZSB8fCAnJyk7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJzUmVzdWx0ID0gdGhpcy52YWxpZGF0ZUdvYWxQYXJhbWV0ZXJzKFxuICAgICAgICBnb2FsT2JqLnBhcmFtZXRlcnMsXG4gICAgICAgIHRlbXBsYXRlXG4gICAgICApO1xuICAgICAgaWYgKCFwYXJhbWV0ZXJzUmVzdWx0LmlzVmFsaWQpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goLi4ucGFyYW1ldGVyc1Jlc3VsdC5lcnJvcnMpO1xuICAgICAgfVxuICAgICAgd2FybmluZ3MucHVzaCguLi5wYXJhbWV0ZXJzUmVzdWx0Lndhcm5pbmdzKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBzdWNjZXNzQ3JpdGVyaWEgKG9wdGlvbmFsKVxuICAgIGlmIChnb2FsT2JqLnN1Y2Nlc3NDcml0ZXJpYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZ29hbE9iai5zdWNjZXNzQ3JpdGVyaWEpKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKFwiR29hbCBzdWNjZXNzQ3JpdGVyaWEgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBnb2FsT2JqLnN1Y2Nlc3NDcml0ZXJpYS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGNyaXRlcmlvbiA9IGdvYWxPYmouc3VjY2Vzc0NyaXRlcmlhW2ldO1xuICAgICAgICAgIGlmICh0eXBlb2YgY3JpdGVyaW9uICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2goYFN1Y2Nlc3MgY3JpdGVyaW9uIGF0IGluZGV4ICR7aX0gbXVzdCBiZSBhIHN0cmluZ2ApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBWYWxpZGF0ZSBsZW5ndGggYW5kIHBhdHRlcm5zIChkYXRhIGlzIGFscmVhZHkgbm9ybWFsaXplZClcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRSZXN1bHQgPSB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnZhbGlkYXRlQ29udGVudChjcml0ZXJpb24sIHtcbiAgICAgICAgICAgICAgbWF4TGVuZ3RoOiBBR0VOVF9MSU1JVFMuTUFYX0dPQUxfTEVOR1RIXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghY29udGVudFJlc3VsdC5pc1ZhbGlkKSB7XG4gICAgICAgICAgICAgIGVycm9ycy5wdXNoKGBTdWNjZXNzIGNyaXRlcmlvbiBhdCBpbmRleCAke2l9IGZhaWxlZCB2YWxpZGF0aW9uOiAke2NvbnRlbnRSZXN1bHQuZGV0ZWN0ZWRQYXR0ZXJucz8uam9pbignLCAnKSB8fCAnaW52YWxpZCBjb250ZW50J31gKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3JpdGVyaW9uLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgd2FybmluZ3MucHVzaChgU3VjY2VzcyBjcml0ZXJpb24gYXQgaW5kZXggJHtpfSBpcyBlbXB0eWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOiBlcnJvcnMubGVuZ3RoID09PSAwLFxuICAgICAgZXJyb3JzLFxuICAgICAgd2FybmluZ3NcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGdvYWwgcGFyYW1ldGVycyBhbmQgY2hlY2sgY29uc2lzdGVuY3kgd2l0aCB0ZW1wbGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUdvYWxQYXJhbWV0ZXJzKFxuICAgIHBhcmFtZXRlcnM6IHVua25vd25bXSxcbiAgICB0ZW1wbGF0ZTogc3RyaW5nXG4gICk6IFZhbGlkYXRpb25SZXN1bHQge1xuICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCB3YXJuaW5nczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBwYXJhbWV0ZXJOYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IHRlbXBsYXRlUGxhY2Vob2xkZXJzID0gdGhpcy5leHRyYWN0VGVtcGxhdGVQbGFjZWhvbGRlcnModGVtcGxhdGUpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBwYXJhbSA9IHBhcmFtZXRlcnNbaV07XG5cbiAgICAgIGlmICghcGFyYW0gfHwgdHlwZW9mIHBhcmFtICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBlcnJvcnMucHVzaChgUGFyYW1ldGVyIGF0IGluZGV4ICR7aX0gbXVzdCBiZSBhbiBvYmplY3RgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhcmFtT2JqID0gcGFyYW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICAgIC8vIFZhbGlkYXRlIG5hbWVcbiAgICAgIGlmICghcGFyYW1PYmoubmFtZSkge1xuICAgICAgICBlcnJvcnMucHVzaChgUGFyYW1ldGVyIGF0IGluZGV4ICR7aX0gaXMgbWlzc2luZyByZXF1aXJlZCAnbmFtZScgZmllbGRgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgcGFyYW1PYmoubmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYFBhcmFtZXRlciBuYW1lIGF0IGluZGV4ICR7aX0gbXVzdCBiZSBhIHN0cmluZ2ApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgcGFyYW1ldGVyIG5hbWUgKGRhdGEgaXMgYWxyZWFkeSBub3JtYWxpemVkKVxuICAgICAgY29uc3QgbmFtZVJlc3VsdCA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UudmFsaWRhdGVDb250ZW50KHBhcmFtT2JqLm5hbWUsIHtcbiAgICAgICAgbWF4TGVuZ3RoOiBBR0VOVF9MSU1JVFMuTUFYX0FHRU5UX05BTUVfTEVOR1RIXG4gICAgICB9KTtcbiAgICAgIGlmICghbmFtZVJlc3VsdC5pc1ZhbGlkKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKGBQYXJhbWV0ZXIgbmFtZSBhdCBpbmRleCAke2l9IGZhaWxlZCB2YWxpZGF0aW9uOiAke25hbWVSZXN1bHQuZGV0ZWN0ZWRQYXR0ZXJucz8uam9pbignLCAnKSB8fCAnaW52YWxpZCBjb250ZW50J31gKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXJhbU5hbWUgPSBwYXJhbU9iai5uYW1lIGFzIHN0cmluZztcblxuICAgICAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXNcbiAgICAgIGlmIChwYXJhbWV0ZXJOYW1lcy5oYXMocGFyYW1OYW1lKSkge1xuICAgICAgICBlcnJvcnMucHVzaChgRHVwbGljYXRlIHBhcmFtZXRlciBuYW1lICcke3BhcmFtTmFtZX0nIGF0IGluZGV4ICR7aX1gKTtcbiAgICAgIH1cbiAgICAgIHBhcmFtZXRlck5hbWVzLmFkZChwYXJhbU5hbWUpO1xuXG4gICAgICAvLyBWYWxpZGF0ZSB0eXBlXG4gICAgICBpZiAoIXBhcmFtT2JqLnR5cGUpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYFBhcmFtZXRlciAnJHtwYXJhbU5hbWV9JyBpcyBtaXNzaW5nIHJlcXVpcmVkICd0eXBlJyBmaWVsZGApO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcGFyYW1PYmoudHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYFBhcmFtZXRlciAnJHtwYXJhbU5hbWV9JyB0eXBlIG11c3QgYmUgYSBzdHJpbmdgKTtcbiAgICAgIH0gZWxzZSBpZiAoIVZBTElEX1BBUkFNRVRFUl9UWVBFUy5pbmNsdWRlcyhwYXJhbU9iai50eXBlIGFzIFBhcmFtZXRlclR5cGUpKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICAgIGBQYXJhbWV0ZXIgJyR7cGFyYW1OYW1lfScgaGFzIGludmFsaWQgdHlwZSAnJHtwYXJhbU9iai50eXBlfScuIFZhbGlkIHR5cGVzOiAke1ZBTElEX1BBUkFNRVRFUl9UWVBFUy5qb2luKCcsICcpfWBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgcmVxdWlyZWRcbiAgICAgIGlmICghKCdyZXF1aXJlZCcgaW4gcGFyYW1PYmopKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKGBQYXJhbWV0ZXIgJyR7cGFyYW1OYW1lfScgaXMgbWlzc2luZyByZXF1aXJlZCAncmVxdWlyZWQnIGZpZWxkYCk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwYXJhbU9iai5yZXF1aXJlZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKGBQYXJhbWV0ZXIgJyR7cGFyYW1OYW1lfScgcmVxdWlyZWQgZmllbGQgbXVzdCBiZSBhIGJvb2xlYW5gKTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGRhdGEgaXMgYWxyZWFkeSBub3JtYWxpemVkXG4gICAgICBpZiAocGFyYW1PYmouZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIHBhcmFtT2JqLmRlc2NyaXB0aW9uICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHdhcm5pbmdzLnB1c2goYFBhcmFtZXRlciAnJHtwYXJhbU5hbWV9JyBkZXNjcmlwdGlvbiBtdXN0IGJlIGEgc3RyaW5nYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZGVzY1Jlc3VsdCA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UudmFsaWRhdGVDb250ZW50KHBhcmFtT2JqLmRlc2NyaXB0aW9uLCB7XG4gICAgICAgICAgICBtYXhMZW5ndGg6IEFHRU5UX0xJTUlUUy5NQVhfR09BTF9MRU5HVEhcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoIWRlc2NSZXN1bHQuaXNWYWxpZCkge1xuICAgICAgICAgICAgd2FybmluZ3MucHVzaChgUGFyYW1ldGVyICcke3BhcmFtTmFtZX0nIGRlc2NyaXB0aW9uIGZhaWxlZCB2YWxpZGF0aW9uOiAke2Rlc2NSZXN1bHQuZGV0ZWN0ZWRQYXR0ZXJucz8uam9pbignLCAnKSB8fCAnaW52YWxpZCBjb250ZW50J31gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgZGVmYXVsdCAob3B0aW9uYWwpIC0gZGF0YSBpcyBhbHJlYWR5IG5vcm1hbGl6ZWRcbiAgICAgIGlmIChwYXJhbU9iai5kZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdFR5cGUgPSB0eXBlb2YgcGFyYW1PYmouZGVmYXVsdDtcbiAgICAgICAgaWYgKHBhcmFtT2JqLnR5cGUgPT09ICdzdHJpbmcnICYmIGRlZmF1bHRUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHdhcm5pbmdzLnB1c2goYFBhcmFtZXRlciAnJHtwYXJhbU5hbWV9JyBkZWZhdWx0IHZhbHVlIHR5cGUgbWlzbWF0Y2ggKGV4cGVjdGVkIHN0cmluZylgKTtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJhbU9iai50eXBlID09PSAnc3RyaW5nJyAmJiBkZWZhdWx0VHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAvLyBWYWxpZGF0ZSBzdHJpbmcgZGVmYXVsdCB2YWx1ZXMgKGFscmVhZHkgbm9ybWFsaXplZClcbiAgICAgICAgICBjb25zdCBkZWZhdWx0UmVzdWx0ID0gdGhpcy52YWxpZGF0aW9uU2VydmljZS52YWxpZGF0ZUNvbnRlbnQocGFyYW1PYmouZGVmYXVsdCBhcyBzdHJpbmcsIHtcbiAgICAgICAgICAgIG1heExlbmd0aDogQUdFTlRfTElNSVRTLk1BWF9HT0FMX0xFTkdUSFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICghZGVmYXVsdFJlc3VsdC5pc1ZhbGlkKSB7XG4gICAgICAgICAgICB3YXJuaW5ncy5wdXNoKGBQYXJhbWV0ZXIgJyR7cGFyYW1OYW1lfScgZGVmYXVsdCB2YWx1ZSBmYWlsZWQgdmFsaWRhdGlvbjogJHtkZWZhdWx0UmVzdWx0LmRldGVjdGVkUGF0dGVybnM/LmpvaW4oJywgJykgfHwgJ2ludmFsaWQgY29udGVudCd9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcmFtT2JqLnR5cGUgPT09ICdudW1iZXInICYmIGRlZmF1bHRUeXBlICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIHdhcm5pbmdzLnB1c2goYFBhcmFtZXRlciAnJHtwYXJhbU5hbWV9JyBkZWZhdWx0IHZhbHVlIHR5cGUgbWlzbWF0Y2ggKGV4cGVjdGVkIG51bWJlcilgKTtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJhbU9iai50eXBlID09PSAnYm9vbGVhbicgJiYgZGVmYXVsdFR5cGUgIT09ICdib29sZWFuJykge1xuICAgICAgICAgIHdhcm5pbmdzLnB1c2goYFBhcmFtZXRlciAnJHtwYXJhbU5hbWV9JyBkZWZhdWx0IHZhbHVlIHR5cGUgbWlzbWF0Y2ggKGV4cGVjdGVkIGJvb2xlYW4pYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayB0ZW1wbGF0ZS9wYXJhbWV0ZXIgY29uc2lzdGVuY3lcbiAgICAvLyBXYXJuIGlmIHRlbXBsYXRlIGhhcyBwbGFjZWhvbGRlcnMgbm90IGRlZmluZWQgaW4gcGFyYW1ldGVyc1xuICAgIGZvciAoY29uc3QgcGxhY2Vob2xkZXIgb2YgdGVtcGxhdGVQbGFjZWhvbGRlcnMpIHtcbiAgICAgIGlmICghcGFyYW1ldGVyTmFtZXMuaGFzKHBsYWNlaG9sZGVyKSkge1xuICAgICAgICB3YXJuaW5ncy5wdXNoKFxuICAgICAgICAgIGBUZW1wbGF0ZSByZWZlcmVuY2VzIHBhcmFtZXRlciAneyR7cGxhY2Vob2xkZXJ9fScgd2hpY2ggaXMgbm90IGRlZmluZWQgaW4gcGFyYW1ldGVycyBhcnJheWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBXYXJuIGlmIHBhcmFtZXRlcnMgYXJlIGRlZmluZWQgYnV0IG5vdCB1c2VkIGluIHRlbXBsYXRlXG4gICAgZm9yIChjb25zdCBwYXJhbU5hbWUgb2YgcGFyYW1ldGVyTmFtZXMpIHtcbiAgICAgIGlmICghdGVtcGxhdGVQbGFjZWhvbGRlcnMuaGFzKHBhcmFtTmFtZSkpIHtcbiAgICAgICAgd2FybmluZ3MucHVzaChcbiAgICAgICAgICBgUGFyYW1ldGVyICcke3BhcmFtTmFtZX0nIGlzIGRlZmluZWQgYnV0IG5vdCB1c2VkIGluIHRlbXBsYXRlYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOiBlcnJvcnMubGVuZ3RoID09PSAwLFxuICAgICAgZXJyb3JzLFxuICAgICAgd2FybmluZ3NcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgcGFyYW1ldGVyIHBsYWNlaG9sZGVycyBmcm9tIHRlbXBsYXRlXG4gICAqIEZpbmRzIGFsbCB7cGFyYW1ldGVyTmFtZX0gcGF0dGVybnNcbiAgICovXG4gIHByaXZhdGUgZXh0cmFjdFRlbXBsYXRlUGxhY2Vob2xkZXJzKHRlbXBsYXRlOiBzdHJpbmcpOiBTZXQ8c3RyaW5nPiB7XG4gICAgY29uc3QgcGxhY2Vob2xkZXJzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgcmVnZXggPSAvXFx7KFthLXpBLVpfXVthLXpBLVowLTlfXSopXFx9L2c7XG4gICAgbGV0IG1hdGNoO1xuXG4gICAgd2hpbGUgKChtYXRjaCA9IHJlZ2V4LmV4ZWModGVtcGxhdGUpKSAhPT0gbnVsbCkge1xuICAgICAgcGxhY2Vob2xkZXJzLmFkZChtYXRjaFsxXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBsYWNlaG9sZGVycztcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBWMi4wIGFjdGl2YXRlcyBjb25maWd1cmF0aW9uIChPUFRJT05BTClcbiAgICpcbiAgICogTXVzdCBiZSBhbiBvYmplY3Qgd2hlcmUgZWFjaCBwcm9wZXJ0eSBpcyBhIHN0cmluZyBhcnJheS5cbiAgICogU3VwcG9ydHM6IHBlcnNvbmFzLCBza2lsbHMsIG1lbW9yaWVzLCB0ZW1wbGF0ZXMsIGVuc2VtYmxlc1xuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUFjdGl2YXRlcyhhY3RpdmF0ZXM6IHVua25vd24pOiBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICBpZiAoIWFjdGl2YXRlcyB8fCB0eXBlb2YgYWN0aXZhdGVzICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGFjdGl2YXRlcykpIHtcbiAgICAgIHJldHVybiBWYWxpZGF0b3JIZWxwZXJzLmZhaWwoWydBY3RpdmF0ZXMgbXVzdCBiZSBhbiBvYmplY3QnXSk7XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZhdGVzT2JqID0gYWN0aXZhdGVzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYWN0aXZhdGVzT2JqKSkge1xuICAgICAgLy8gQ2hlY2sgaWYga2V5IGlzIGEga25vd24gZWxlbWVudCB0eXBlICh3YXJuaW5nIG9ubHkpXG4gICAgICBpZiAoIVZBTElEX0FDVElWQVRFU19UWVBFUy5pbmNsdWRlcyhrZXkgYXMgYW55KSkge1xuICAgICAgICB3YXJuaW5ncy5wdXNoKFxuICAgICAgICAgIGBVbmtub3duIGVsZW1lbnQgdHlwZSAnJHtrZXl9JyBpbiBhY3RpdmF0ZXMuIEtub3duIHR5cGVzOiAke1ZBTElEX0FDVElWQVRFU19UWVBFUy5qb2luKCcsICcpfWBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgdmFsdWUgaXMgc3RyaW5nIGFycmF5XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBWYWxpZGF0b3JIZWxwZXJzLmZhaWwoW2BBY3RpdmF0ZXMuJHtrZXl9IG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5nc2BdKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlW2ldICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiBWYWxpZGF0b3JIZWxwZXJzLmZhaWwoW2BBY3RpdmF0ZXMuJHtrZXl9WyR7aX1dIG11c3QgYmUgYSBzdHJpbmdgXSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVmFsaWRhdGUgbGVuZ3RoIGFuZCBwYXR0ZXJucyAoZGF0YSBpcyBhbHJlYWR5IG5vcm1hbGl6ZWQpXG4gICAgICAgIGNvbnN0IGNvbnRlbnRSZXN1bHQgPSB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnZhbGlkYXRlQ29udGVudCh2YWx1ZVtpXSwge1xuICAgICAgICAgIG1heExlbmd0aDogQUdFTlRfTElNSVRTLk1BWF9BR0VOVF9OQU1FX0xFTkdUSFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjb250ZW50UmVzdWx0LmlzVmFsaWQpIHtcbiAgICAgICAgICByZXR1cm4gVmFsaWRhdG9ySGVscGVycy5mYWlsKFtgQWN0aXZhdGVzLiR7a2V5fVske2l9XSBmYWlsZWQgdmFsaWRhdGlvbjogJHtjb250ZW50UmVzdWx0LmRldGVjdGVkUGF0dGVybnM/LmpvaW4oJywgJykgfHwgJ2ludmFsaWQgY29udGVudCd9YF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZVtpXS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgd2FybmluZ3MucHVzaChgQWN0aXZhdGVzLiR7a2V5fVske2l9XSBpcyBlbXB0eWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVmFsaWQ6IHRydWUsXG4gICAgICBlcnJvcnM6IFtdLFxuICAgICAgd2FybmluZ3NcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIFYyLjAgdG9vbHMgY29uZmlndXJhdGlvbiAoT1BUSU9OQUwpXG4gICAqXG4gICAqIE11c3QgaGF2ZTpcbiAgICogLSBhbGxvd2VkIChzdHJpbmdbXSwgcmVxdWlyZWQgaWYgdG9vbHMgZGVmaW5lZClcbiAgICogLSBkZW5pZWQgKHN0cmluZ1tdLCBvcHRpb25hbClcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVUb29scyh0b29sczogdW5rbm93bik6IFZhbGlkYXRpb25SZXN1bHQge1xuICAgIGlmICghdG9vbHMgfHwgdHlwZW9mIHRvb2xzICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHRvb2xzKSkge1xuICAgICAgcmV0dXJuIFZhbGlkYXRvckhlbHBlcnMuZmFpbChbJ1Rvb2xzIG11c3QgYmUgYW4gb2JqZWN0J10pO1xuICAgIH1cblxuICAgIGNvbnN0IHRvb2xzT2JqID0gdG9vbHMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBWYWxpZGF0ZSBhbGxvd2VkIChyZXF1aXJlZClcbiAgICBpZiAoIXRvb2xzT2JqLmFsbG93ZWQpIHtcbiAgICAgIHJldHVybiBWYWxpZGF0b3JIZWxwZXJzLmZhaWwoW1wiVG9vbHMgY29uZmlndXJhdGlvbiBtdXN0IGluY2x1ZGUgJ2FsbG93ZWQnIGFycmF5XCJdKTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodG9vbHNPYmouYWxsb3dlZCkpIHtcbiAgICAgIHJldHVybiBWYWxpZGF0b3JIZWxwZXJzLmZhaWwoW1wiVG9vbHMuYWxsb3dlZCBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3NcIl0pO1xuICAgIH1cblxuICAgIGNvbnN0IGFsbG93ZWRTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvb2xzT2JqLmFsbG93ZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHRvb2wgPSB0b29sc09iai5hbGxvd2VkW2ldO1xuICAgICAgaWYgKHR5cGVvZiB0b29sICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gVmFsaWRhdG9ySGVscGVycy5mYWlsKFtgVG9vbHMuYWxsb3dlZFske2l9XSBtdXN0IGJlIGEgc3RyaW5nYF0pO1xuICAgICAgfVxuICAgICAgLy8gVmFsaWRhdGUgbGVuZ3RoIGFuZCBwYXR0ZXJucyAoZGF0YSBpcyBhbHJlYWR5IG5vcm1hbGl6ZWQpXG4gICAgICBjb25zdCBjb250ZW50UmVzdWx0ID0gdGhpcy52YWxpZGF0aW9uU2VydmljZS52YWxpZGF0ZUNvbnRlbnQodG9vbCwge1xuICAgICAgICBtYXhMZW5ndGg6IEFHRU5UX0xJTUlUUy5NQVhfQUdFTlRfTkFNRV9MRU5HVEhcbiAgICAgIH0pO1xuICAgICAgaWYgKCFjb250ZW50UmVzdWx0LmlzVmFsaWQpIHtcbiAgICAgICAgcmV0dXJuIFZhbGlkYXRvckhlbHBlcnMuZmFpbChbYFRvb2xzLmFsbG93ZWRbJHtpfV0gZmFpbGVkIHZhbGlkYXRpb246ICR7Y29udGVudFJlc3VsdC5kZXRlY3RlZFBhdHRlcm5zPy5qb2luKCcsICcpIHx8ICdpbnZhbGlkIGNvbnRlbnQnfWBdKTtcbiAgICAgIH1cbiAgICAgIGlmICh0b29sLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgd2FybmluZ3MucHVzaChgVG9vbHMuYWxsb3dlZFske2l9XSBpcyBlbXB0eWApO1xuICAgICAgfVxuICAgICAgYWxsb3dlZFNldC5hZGQodG9vbCk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZGVuaWVkIChvcHRpb25hbClcbiAgICBpZiAodG9vbHNPYmouZGVuaWVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0b29sc09iai5kZW5pZWQpKSB7XG4gICAgICAgIHJldHVybiBWYWxpZGF0b3JIZWxwZXJzLmZhaWwoW1wiVG9vbHMuZGVuaWVkIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5nc1wiXSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlbmllZFNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b29sc09iai5kZW5pZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgdG9vbCA9IHRvb2xzT2JqLmRlbmllZFtpXTtcbiAgICAgICAgaWYgKHR5cGVvZiB0b29sICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiBWYWxpZGF0b3JIZWxwZXJzLmZhaWwoW2BUb29scy5kZW5pZWRbJHtpfV0gbXVzdCBiZSBhIHN0cmluZ2BdKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBWYWxpZGF0ZSBsZW5ndGggYW5kIHBhdHRlcm5zIChkYXRhIGlzIGFscmVhZHkgbm9ybWFsaXplZClcbiAgICAgICAgY29uc3QgY29udGVudFJlc3VsdCA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UudmFsaWRhdGVDb250ZW50KHRvb2wsIHtcbiAgICAgICAgICBtYXhMZW5ndGg6IEFHRU5UX0xJTUlUUy5NQVhfQUdFTlRfTkFNRV9MRU5HVEhcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY29udGVudFJlc3VsdC5pc1ZhbGlkKSB7XG4gICAgICAgICAgcmV0dXJuIFZhbGlkYXRvckhlbHBlcnMuZmFpbChbYFRvb2xzLmRlbmllZFske2l9XSBmYWlsZWQgdmFsaWRhdGlvbjogJHtjb250ZW50UmVzdWx0LmRldGVjdGVkUGF0dGVybnM/LmpvaW4oJywgJykgfHwgJ2ludmFsaWQgY29udGVudCd9YF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b29sLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB3YXJuaW5ncy5wdXNoKGBUb29scy5kZW5pZWRbJHtpfV0gaXMgZW1wdHlgKTtcbiAgICAgICAgfVxuICAgICAgICBkZW5pZWRTZXQuYWRkKHRvb2wpO1xuICAgICAgfVxuXG4gICAgICAvLyBXYXJuIGlmIHNhbWUgdG9vbCBpcyBpbiBib3RoIGFsbG93ZWQgYW5kIGRlbmllZFxuICAgICAgZm9yIChjb25zdCB0b29sIG9mIGRlbmllZFNldCkge1xuICAgICAgICBpZiAoYWxsb3dlZFNldC5oYXModG9vbCkpIHtcbiAgICAgICAgICB3YXJuaW5ncy5wdXNoKFxuICAgICAgICAgICAgYFRvb2wgJyR7dG9vbH0nIGFwcGVhcnMgaW4gYm90aCBhbGxvd2VkIGFuZCBkZW5pZWQgbGlzdHMuIERlbmllZCB0YWtlcyBwcmVjZWRlbmNlLmBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVmFsaWQ6IHRydWUsXG4gICAgICBlcnJvcnM6IFtdLFxuICAgICAgd2FybmluZ3NcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIFYyLjAgc3lzdGVtIHByb21wdCAoT1BUSU9OQUwpXG4gICAqXG4gICAqIE11c3QgYmUgYSBzdHJpbmcsIGxlbmd0aCAxLTEwMDAwIGNoYXJhY3RlcnMuXG4gICAqIFVzZXMgdmFsaWRhdGlvblNlcnZpY2UgZm9yIGNvbnRlbnQgc2VjdXJpdHkuXG4gICAqXG4gICAqIEFyY2hpdGVjdHVyZTogSW5wdXQgaXMgYWxyZWFkeSBub3JtYWxpemVkIGJ5IEdlbmVyaWNFbGVtZW50VmFsaWRhdG9yLlxuICAgKiBUaGlzIHZhbGlkYXRvciBjaGVja3MgYnVzaW5lc3MgcnVsZXMgKGxlbmd0aCwgcGF0dGVybnMpIG9uIG5vcm1hbGl6ZWQgZGF0YS5cbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVTeXN0ZW1Qcm9tcHQoc3lzdGVtUHJvbXB0OiB1bmtub3duKTogVmFsaWRhdGlvblJlc3VsdCB7XG4gICAgLy8gVHlwZSBjaGVjayBtdXN0IGhhcHBlbiBmaXJzdFxuICAgIGlmICh0eXBlb2Ygc3lzdGVtUHJvbXB0ICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIFZhbGlkYXRvckhlbHBlcnMuZmFpbChbJ1N5c3RlbSBwcm9tcHQgbXVzdCBiZSBhIHN0cmluZyddKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBsZW5ndGggYW5kIHBhdHRlcm5zIChkYXRhIGlzIGFscmVhZHkgbm9ybWFsaXplZClcbiAgICBjb25zdCBjb250ZW50UmVzdWx0ID0gdGhpcy52YWxpZGF0aW9uU2VydmljZS52YWxpZGF0ZUNvbnRlbnQoc3lzdGVtUHJvbXB0LCB7XG4gICAgICBtYXhMZW5ndGg6IFNZU1RFTV9QUk9NUFRfTUFYX0xFTkdUSFxuICAgIH0pO1xuXG4gICAgaWYgKCFjb250ZW50UmVzdWx0LmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBWYWxpZGF0b3JIZWxwZXJzLmZhaWwoXG4gICAgICAgIGNvbnRlbnRSZXN1bHQuZGV0ZWN0ZWRQYXR0ZXJucyB8fCBbJ1N5c3RlbSBwcm9tcHQgZmFpbGVkIGNvbnRlbnQgdmFsaWRhdGlvbiddXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChzeXN0ZW1Qcm9tcHQubGVuZ3RoIDwgU1lTVEVNX1BST01QVF9NSU5fTEVOR1RIKSB7XG4gICAgICByZXR1cm4gVmFsaWRhdG9ySGVscGVycy5mYWlsKFsnU3lzdGVtIHByb21wdCBjYW5ub3QgYmUgZW1wdHknXSk7XG4gICAgfVxuXG4gICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHN5c3RlbVByb21wdC5sZW5ndGggPiA1MDAwKSB7XG4gICAgICB3YXJuaW5ncy5wdXNoKCdTeXN0ZW0gcHJvbXB0IGlzIHZlcnkgbG9uZyAtIGNvbnNpZGVyIGtlZXBpbmcgaXQgY29uY2lzZSBmb3IgYmV0dGVyIExMTSBwZXJmb3JtYW5jZScpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOiB0cnVlLFxuICAgICAgZXJyb3JzOiBbXSxcbiAgICAgIHdhcm5pbmdzXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBWMi4wIGF1dG9ub215IGNvbmZpZ3VyYXRpb24gKE9QVElPTkFMKVxuICAgKlxuICAgKiBGaWVsZHM6XG4gICAqIC0gcmlza1RvbGVyYW5jZSAoZW51bSlcbiAgICogLSBtYXhBdXRvbm9tb3VzU3RlcHMgKHBvc2l0aXZlIGludGVnZXIsIDAgPSB1bmxpbWl0ZWQpXG4gICAqIC0gcmVxdWlyZXNBcHByb3ZhbCAoc3RyaW5nW10gZ2xvYiBwYXR0ZXJucylcbiAgICogLSBhdXRvQXBwcm92ZSAoc3RyaW5nW10gZ2xvYiBwYXR0ZXJucylcbiAgICpcbiAgICogQWxzbyBkZXRlY3RzIGNvbmZsaWN0cyBiZXR3ZWVuIHJlcXVpcmVzQXBwcm92YWwgYW5kIGF1dG9BcHByb3ZlLlxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUF1dG9ub215KGF1dG9ub215OiB1bmtub3duKTogVmFsaWRhdGlvblJlc3VsdCB7XG4gICAgaWYgKCFhdXRvbm9teSB8fCB0eXBlb2YgYXV0b25vbXkgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoYXV0b25vbXkpKSB7XG4gICAgICByZXR1cm4gVmFsaWRhdG9ySGVscGVycy5mYWlsKFsnQXV0b25vbXkgbXVzdCBiZSBhbiBvYmplY3QnXSk7XG4gICAgfVxuXG4gICAgY29uc3QgYXV0b25vbXlPYmogPSBhdXRvbm9teSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBWYWxpZGF0ZSByaXNrVG9sZXJhbmNlIChvcHRpb25hbClcbiAgICBpZiAoYXV0b25vbXlPYmoucmlza1RvbGVyYW5jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCByaXNrUmVzdWx0ID0gdGhpcy52YWxpZGF0ZVJpc2tUb2xlcmFuY2UoYXV0b25vbXlPYmoucmlza1RvbGVyYW5jZSk7XG4gICAgICBpZiAoIXJpc2tSZXN1bHQuaXNWYWxpZCkge1xuICAgICAgICBlcnJvcnMucHVzaCguLi5yaXNrUmVzdWx0LmVycm9ycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbWF4QXV0b25vbW91c1N0ZXBzIChvcHRpb25hbClcbiAgICBpZiAoYXV0b25vbXlPYmoubWF4QXV0b25vbW91c1N0ZXBzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgYXV0b25vbXlPYmoubWF4QXV0b25vbW91c1N0ZXBzICE9PSAnbnVtYmVyJykge1xuICAgICAgICBlcnJvcnMucHVzaCgnQXV0b25vbXkubWF4QXV0b25vbW91c1N0ZXBzIG11c3QgYmUgYSBudW1iZXInKTtcbiAgICAgIH0gZWxzZSBpZiAoYXV0b25vbXlPYmoubWF4QXV0b25vbW91c1N0ZXBzIDwgMCkge1xuICAgICAgICBlcnJvcnMucHVzaCgnQXV0b25vbXkubWF4QXV0b25vbW91c1N0ZXBzIG11c3QgYmUgbm9uLW5lZ2F0aXZlICgwID0gdW5saW1pdGVkKScpO1xuICAgICAgfSBlbHNlIGlmICghTnVtYmVyLmlzSW50ZWdlcihhdXRvbm9teU9iai5tYXhBdXRvbm9tb3VzU3RlcHMpKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCdBdXRvbm9teS5tYXhBdXRvbm9tb3VzU3RlcHMgbXVzdCBiZSBhbiBpbnRlZ2VyJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgcmVxdWlyZXNBcHByb3ZhbCAob3B0aW9uYWwpIC0gZGF0YSBpcyBhbHJlYWR5IG5vcm1hbGl6ZWRcbiAgICBjb25zdCByZXF1aXJlc0FwcHJvdmFsU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgaWYgKGF1dG9ub215T2JqLnJlcXVpcmVzQXBwcm92YWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGF1dG9ub215T2JqLnJlcXVpcmVzQXBwcm92YWwpKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCdBdXRvbm9teS5yZXF1aXJlc0FwcHJvdmFsIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdXRvbm9teU9iai5yZXF1aXJlc0FwcHJvdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgcGF0dGVybiA9IGF1dG9ub215T2JqLnJlcXVpcmVzQXBwcm92YWxbaV07XG4gICAgICAgICAgaWYgKHR5cGVvZiBwYXR0ZXJuICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2goYEF1dG9ub215LnJlcXVpcmVzQXBwcm92YWxbJHtpfV0gbXVzdCBiZSBhIHN0cmluZ2ApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50UmVzdWx0ID0gdGhpcy52YWxpZGF0aW9uU2VydmljZS52YWxpZGF0ZUNvbnRlbnQocGF0dGVybiwge1xuICAgICAgICAgICAgICBtYXhMZW5ndGg6IEFHRU5UX0xJTUlUUy5NQVhfR09BTF9MRU5HVEhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFjb250ZW50UmVzdWx0LmlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgZXJyb3JzLnB1c2goYEF1dG9ub215LnJlcXVpcmVzQXBwcm92YWxbJHtpfV0gZmFpbGVkIHZhbGlkYXRpb246ICR7Y29udGVudFJlc3VsdC5kZXRlY3RlZFBhdHRlcm5zPy5qb2luKCcsICcpIHx8ICdpbnZhbGlkIGNvbnRlbnQnfWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVxdWlyZXNBcHByb3ZhbFNldC5hZGQocGF0dGVybik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgYXV0b0FwcHJvdmUgKG9wdGlvbmFsKSAtIGRhdGEgaXMgYWxyZWFkeSBub3JtYWxpemVkXG4gICAgY29uc3QgYXV0b0FwcHJvdmVTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBpZiAoYXV0b25vbXlPYmouYXV0b0FwcHJvdmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGF1dG9ub215T2JqLmF1dG9BcHByb3ZlKSkge1xuICAgICAgICBlcnJvcnMucHVzaCgnQXV0b25vbXkuYXV0b0FwcHJvdmUgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF1dG9ub215T2JqLmF1dG9BcHByb3ZlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgcGF0dGVybiA9IGF1dG9ub215T2JqLmF1dG9BcHByb3ZlW2ldO1xuICAgICAgICAgIGlmICh0eXBlb2YgcGF0dGVybiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKGBBdXRvbm9teS5hdXRvQXBwcm92ZVske2l9XSBtdXN0IGJlIGEgc3RyaW5nYCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRSZXN1bHQgPSB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnZhbGlkYXRlQ29udGVudChwYXR0ZXJuLCB7XG4gICAgICAgICAgICAgIG1heExlbmd0aDogQUdFTlRfTElNSVRTLk1BWF9HT0FMX0xFTkdUSFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWNvbnRlbnRSZXN1bHQuaXNWYWxpZCkge1xuICAgICAgICAgICAgICBlcnJvcnMucHVzaChgQXV0b25vbXkuYXV0b0FwcHJvdmVbJHtpfV0gZmFpbGVkIHZhbGlkYXRpb246ICR7Y29udGVudFJlc3VsdC5kZXRlY3RlZFBhdHRlcm5zPy5qb2luKCcsICcpIHx8ICdpbnZhbGlkIGNvbnRlbnQnfWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYXV0b0FwcHJvdmVTZXQuYWRkKHBhdHRlcm4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERldGVjdCBjb25mbGljdHMgYmV0d2VlbiByZXF1aXJlc0FwcHJvdmFsIGFuZCBhdXRvQXBwcm92ZSAoaW5jbHVkaW5nIGdsb2IgcGF0dGVybiBjb25mbGljdHMpXG4gICAgaWYgKHJlcXVpcmVzQXBwcm92YWxTZXQuc2l6ZSA+IDAgJiYgYXV0b0FwcHJvdmVTZXQuc2l6ZSA+IDApIHtcbiAgICAgIGNvbnN0IGNvbmZsaWN0TWVzc2FnZXMgPSBmaW5kUGF0dGVybkNvbmZsaWN0cyhcbiAgICAgICAgQXJyYXkuZnJvbShyZXF1aXJlc0FwcHJvdmFsU2V0KSxcbiAgICAgICAgQXJyYXkuZnJvbShhdXRvQXBwcm92ZVNldClcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGNvbmZsaWN0IG9mIGNvbmZsaWN0TWVzc2FnZXMpIHtcbiAgICAgICAgd2FybmluZ3MucHVzaChcbiAgICAgICAgICBgJHtjb25mbGljdH0uIHJlcXVpcmVzQXBwcm92YWwgdGFrZXMgcHJlY2VkZW5jZS5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVmFsaWQ6IGVycm9ycy5sZW5ndGggPT09IDAsXG4gICAgICBlcnJvcnMsXG4gICAgICB3YXJuaW5nc1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgVjIuMSByZXNpbGllbmNlIGNvbmZpZ3VyYXRpb24gKE9QVElPTkFMLCBuZXN0ZWQgdW5kZXIgYXV0b25vbXkpXG4gICAqXG4gICAqIEZpZWxkczpcbiAgICogLSBvblN0ZXBMaW1pdFJlYWNoZWQgKCdwYXVzZScgfCAnY29udGludWUnIHwgJ3Jlc3RhcnQnKVxuICAgKiAtIG9uRXhlY3V0aW9uRmFpbHVyZSAoJ3BhdXNlJyB8ICdyZXRyeScgfCAncmVzdGFydC1mcmVzaCcpXG4gICAqIC0gbWF4UmV0cmllcyAobm9uLW5lZ2F0aXZlIGludGVnZXIsIGRlZmF1bHQgMylcbiAgICogLSBtYXhDb250aW51YXRpb25zIChub24tbmVnYXRpdmUgaW50ZWdlciwgMCA9IHVubGltaXRlZCwgZGVmYXVsdCAxMClcbiAgICogLSByZXRyeUJhY2tvZmYgKCdub25lJyB8ICdsaW5lYXInIHwgJ2V4cG9uZW50aWFsJylcbiAgICogLSBwcmVzZXJ2ZVN0YXRlIChib29sZWFuKVxuICAgKlxuICAgKiBAc2luY2UgdjIuMS4wIC0gQWdlbnQgRXhlY3V0aW9uIFJlc2lsaWVuY2UgKElzc3VlICM1MjYpXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlUmVzaWxpZW5jZShyZXNpbGllbmNlOiB1bmtub3duKTogVmFsaWRhdGlvblJlc3VsdCB7XG4gICAgaWYgKCFyZXNpbGllbmNlIHx8IHR5cGVvZiByZXNpbGllbmNlICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHJlc2lsaWVuY2UpKSB7XG4gICAgICByZXR1cm4gVmFsaWRhdG9ySGVscGVycy5mYWlsKFsnUmVzaWxpZW5jZSBtdXN0IGJlIGFuIG9iamVjdCddKTtcbiAgICB9XG5cbiAgICBjb25zdCBvYmogPSByZXNpbGllbmNlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCB3YXJuaW5nczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIElzc3VlICM3MzA6IFVzZSBzaGFyZWQgY29uc3RhbnRzIGZyb20gY29uc3RhbnRzLnRzIChzaW5nbGUgc291cmNlIG9mIHRydXRoKVxuICAgIGlmIChvYmoub25TdGVwTGltaXRSZWFjaGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghaXNPbmVPZihvYmoub25TdGVwTGltaXRSZWFjaGVkLCBTVEVQX0xJTUlUX0FDVElPTlMpKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICAgIGBSZXNpbGllbmNlLm9uU3RlcExpbWl0UmVhY2hlZCBtdXN0IGJlIG9uZSBvZjogJHtTVEVQX0xJTUlUX0FDVElPTlMuam9pbignLCAnKX1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9iai5vbkV4ZWN1dGlvbkZhaWx1cmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFpc09uZU9mKG9iai5vbkV4ZWN1dGlvbkZhaWx1cmUsIEVYRUNVVElPTl9GQUlMVVJFX0FDVElPTlMpKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICAgIGBSZXNpbGllbmNlLm9uRXhlY3V0aW9uRmFpbHVyZSBtdXN0IGJlIG9uZSBvZjogJHtFWEVDVVRJT05fRkFJTFVSRV9BQ1RJT05TLmpvaW4oJywgJyl9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvYmoubWF4UmV0cmllcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIG9iai5tYXhSZXRyaWVzICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzSW50ZWdlcihvYmoubWF4UmV0cmllcykgfHwgb2JqLm1heFJldHJpZXMgPCAwKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCdSZXNpbGllbmNlLm1heFJldHJpZXMgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9iai5tYXhDb250aW51YXRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygb2JqLm1heENvbnRpbnVhdGlvbnMgIT09ICdudW1iZXInIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG9iai5tYXhDb250aW51YXRpb25zKSB8fCBvYmoubWF4Q29udGludWF0aW9ucyA8IDApIHtcbiAgICAgICAgZXJyb3JzLnB1c2goJ1Jlc2lsaWVuY2UubWF4Q29udGludWF0aW9ucyBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXInKTtcbiAgICAgIH0gZWxzZSBpZiAob2JqLm1heENvbnRpbnVhdGlvbnMgPT09IDApIHtcbiAgICAgICAgd2FybmluZ3MucHVzaCgnUmVzaWxpZW5jZS5tYXhDb250aW51YXRpb25zPTAgbWVhbnMgdW5saW1pdGVkIGF1dG8tY29udGludWF0aW9ucy4gQ29uc2lkZXIgc2V0dGluZyBhIHNhZmV0eSBsaW1pdC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob2JqLnJldHJ5QmFja29mZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIWlzT25lT2Yob2JqLnJldHJ5QmFja29mZiwgQkFDS09GRl9TVFJBVEVHSUVTKSkge1xuICAgICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgICBgUmVzaWxpZW5jZS5yZXRyeUJhY2tvZmYgbXVzdCBiZSBvbmUgb2Y6ICR7QkFDS09GRl9TVFJBVEVHSUVTLmpvaW4oJywgJyl9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvYmoucHJlc2VydmVTdGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIG9iai5wcmVzZXJ2ZVN0YXRlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goJ1Jlc2lsaWVuY2UucHJlc2VydmVTdGF0ZSBtdXN0IGJlIGEgYm9vbGVhbicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOiBlcnJvcnMubGVuZ3RoID09PSAwLFxuICAgICAgZXJyb3JzLFxuICAgICAgd2FybmluZ3NcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIFYxLnggZGVjaXNpb25GcmFtZXdvcmsgKERFUFJFQ0FURUQpXG4gICAqIERhdGEgaXMgYWxyZWFkeSBub3JtYWxpemVkIGJ5IEdlbmVyaWNFbGVtZW50VmFsaWRhdG9yXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlRGVjaXNpb25GcmFtZXdvcmsoZnJhbWV3b3JrOiB1bmtub3duKTogVmFsaWRhdGlvblJlc3VsdCB7XG4gICAgaWYgKHR5cGVvZiBmcmFtZXdvcmsgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gVmFsaWRhdG9ySGVscGVycy5mYWlsKFsnRGVjaXNpb24gZnJhbWV3b3JrIG11c3QgYmUgYSBzdHJpbmcnXSk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbGVuZ3RoIGFuZCBwYXR0ZXJucyAoZGF0YSBpcyBhbHJlYWR5IG5vcm1hbGl6ZWQpXG4gICAgY29uc3QgY29udGVudFJlc3VsdCA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UudmFsaWRhdGVDb250ZW50KGZyYW1ld29yaywge1xuICAgICAgbWF4TGVuZ3RoOiBBR0VOVF9MSU1JVFMuTUFYX1NQRUNJQUxJWkFUSU9OX0xFTkdUSFxuICAgIH0pO1xuICAgIGlmICghY29udGVudFJlc3VsdC5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gVmFsaWRhdG9ySGVscGVycy5mYWlsKFtcbiAgICAgICAgYERlY2lzaW9uIGZyYW1ld29yayBmYWlsZWQgdmFsaWRhdGlvbjogJHtjb250ZW50UmVzdWx0LmRldGVjdGVkUGF0dGVybnM/LmpvaW4oJywgJykgfHwgJ2ludmFsaWQgY29udGVudCd9YFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgaWYgKCFERUNJU0lPTl9GUkFNRVdPUktTLmluY2x1ZGVzKGZyYW1ld29yayBhcyBEZWNpc2lvbkZyYW1ld29yaykpIHtcbiAgICAgIHJldHVybiBWYWxpZGF0b3JIZWxwZXJzLmZhaWwoW1xuICAgICAgICBgSW52YWxpZCBkZWNpc2lvbiBmcmFtZXdvcmsgJyR7ZnJhbWV3b3JrfScuIFZhbGlkIG9wdGlvbnM6ICR7REVDSVNJT05fRlJBTUVXT1JLUy5qb2luKCcsICcpfWBcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIHJldHVybiBWYWxpZGF0b3JIZWxwZXJzLnBhc3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBWMS54IHNwZWNpYWxpemF0aW9ucyAoREVQUkVDQVRFRClcbiAgICogRGF0YSBpcyBhbHJlYWR5IG5vcm1hbGl6ZWQgYnkgR2VuZXJpY0VsZW1lbnRWYWxpZGF0b3JcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVTcGVjaWFsaXphdGlvbnMoc3BlY2lhbGl6YXRpb25zOiB1bmtub3duKTogVmFsaWRhdGlvblJlc3VsdCB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNwZWNpYWxpemF0aW9ucykpIHtcbiAgICAgIHJldHVybiBWYWxpZGF0b3JIZWxwZXJzLmZhaWwoWydTcGVjaWFsaXphdGlvbnMgbXVzdCBiZSBhbiBhcnJheSddKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNwZWNpYWxpemF0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHR5cGVvZiBzcGVjaWFsaXphdGlvbnNbaV0gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBWYWxpZGF0b3JIZWxwZXJzLmZhaWwoW2BTcGVjaWFsaXphdGlvbiBhdCBpbmRleCAke2l9IG11c3QgYmUgYSBzdHJpbmdgXSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNwZWMgPSBzcGVjaWFsaXphdGlvbnNbaV0gYXMgc3RyaW5nO1xuXG4gICAgICAvLyBWYWxpZGF0ZSBsZW5ndGggYW5kIHBhdHRlcm5zIChkYXRhIGlzIGFscmVhZHkgbm9ybWFsaXplZClcbiAgICAgIGNvbnN0IGNvbnRlbnRSZXN1bHQgPSB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnZhbGlkYXRlQ29udGVudChzcGVjLCB7XG4gICAgICAgIG1heExlbmd0aDogQUdFTlRfTElNSVRTLk1BWF9TUEVDSUFMSVpBVElPTl9MRU5HVEhcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIWNvbnRlbnRSZXN1bHQuaXNWYWxpZCkge1xuICAgICAgICByZXR1cm4gVmFsaWRhdG9ySGVscGVycy5mYWlsKFtcbiAgICAgICAgICBgU3BlY2lhbGl6YXRpb24gYXQgaW5kZXggJHtpfSBmYWlsZWQgdmFsaWRhdGlvbjogJHtjb250ZW50UmVzdWx0LmRldGVjdGVkUGF0dGVybnM/LmpvaW4oJywgJykgfHwgJ2ludmFsaWQgY29udGVudCd9YFxuICAgICAgICBdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gVmFsaWRhdG9ySGVscGVycy5wYXNzKCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgcmlza1RvbGVyYW5jZSBlbnVtXG4gICAqIFVzZWQgaW4gYm90aCBWMS54IChkZXByZWNhdGVkKSBhbmQgVjIuMCBhdXRvbm9teSBjb25maWdcbiAgICogRGF0YSBpcyBhbHJlYWR5IG5vcm1hbGl6ZWQgYnkgR2VuZXJpY0VsZW1lbnRWYWxpZGF0b3JcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVSaXNrVG9sZXJhbmNlKHJpc2tUb2xlcmFuY2U6IHVua25vd24pOiBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICBpZiAodHlwZW9mIHJpc2tUb2xlcmFuY2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gVmFsaWRhdG9ySGVscGVycy5mYWlsKFsnUmlzayB0b2xlcmFuY2UgbXVzdCBiZSBhIHN0cmluZyddKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBsZW5ndGggYW5kIHBhdHRlcm5zIChkYXRhIGlzIGFscmVhZHkgbm9ybWFsaXplZClcbiAgICBjb25zdCBjb250ZW50UmVzdWx0ID0gdGhpcy52YWxpZGF0aW9uU2VydmljZS52YWxpZGF0ZUNvbnRlbnQocmlza1RvbGVyYW5jZSwge1xuICAgICAgbWF4TGVuZ3RoOiBBR0VOVF9MSU1JVFMuTUFYX1NQRUNJQUxJWkFUSU9OX0xFTkdUSFxuICAgIH0pO1xuICAgIGlmICghY29udGVudFJlc3VsdC5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gVmFsaWRhdG9ySGVscGVycy5mYWlsKFtcbiAgICAgICAgYFJpc2sgdG9sZXJhbmNlIGZhaWxlZCB2YWxpZGF0aW9uOiAke2NvbnRlbnRSZXN1bHQuZGV0ZWN0ZWRQYXR0ZXJucz8uam9pbignLCAnKSB8fCAnaW52YWxpZCBjb250ZW50J31gXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICBpZiAoIVJJU0tfVE9MRVJBTkNFX0xFVkVMUy5pbmNsdWRlcyhyaXNrVG9sZXJhbmNlIGFzIFJpc2tUb2xlcmFuY2UpKSB7XG4gICAgICByZXR1cm4gVmFsaWRhdG9ySGVscGVycy5mYWlsKFtcbiAgICAgICAgYEludmFsaWQgcmlzayB0b2xlcmFuY2UgJyR7cmlza1RvbGVyYW5jZX0nLiBWYWxpZCBvcHRpb25zOiAke1JJU0tfVE9MRVJBTkNFX0xFVkVMUy5qb2luKCcsICcpfWBcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIHJldHVybiBWYWxpZGF0b3JIZWxwZXJzLnBhc3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBWMS54IG1heENvbmN1cnJlbnRHb2FscyAoREVQUkVDQVRFRClcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVNYXhDb25jdXJyZW50R29hbHMobWF4Q29uY3VycmVudEdvYWxzOiB1bmtub3duKTogVmFsaWRhdGlvblJlc3VsdCB7XG4gICAgaWYgKHR5cGVvZiBtYXhDb25jdXJyZW50R29hbHMgIT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gVmFsaWRhdG9ySGVscGVycy5mYWlsKFsnTWF4IGNvbmN1cnJlbnQgZ29hbHMgbXVzdCBiZSBhIG51bWJlciddKTtcbiAgICB9XG5cbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobWF4Q29uY3VycmVudEdvYWxzKSkge1xuICAgICAgcmV0dXJuIFZhbGlkYXRvckhlbHBlcnMuZmFpbChbJ01heCBjb25jdXJyZW50IGdvYWxzIG11c3QgYmUgYW4gaW50ZWdlciddKTtcbiAgICB9XG5cbiAgICBpZiAobWF4Q29uY3VycmVudEdvYWxzIDwgMSB8fCBtYXhDb25jdXJyZW50R29hbHMgPiAxMDApIHtcbiAgICAgIHJldHVybiBWYWxpZGF0b3JIZWxwZXJzLmZhaWwoWydNYXggY29uY3VycmVudCBnb2FscyBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMTAwJ10pO1xuICAgIH1cblxuICAgIHJldHVybiBWYWxpZGF0b3JIZWxwZXJzLnBhc3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhZ2VudCBhcHBlYXJzIHRvIGJlIFYxLnggZm9ybWF0XG4gICAqIFYxIGFnZW50cyBoYXZlIGRlY2lzaW9uRnJhbWV3b3JrIG9yIHNwZWNpYWxpemF0aW9ucyBidXQgbm8gZ29hbCBjb25maWdcbiAgICovXG4gIHByaXZhdGUgaXNWMUFnZW50KHJlY29yZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBib29sZWFuIHtcbiAgICBjb25zdCBoYXNWMUZpZWxkcyA9IChcbiAgICAgIHJlY29yZC5kZWNpc2lvbkZyYW1ld29yayAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICByZWNvcmQuc3BlY2lhbGl6YXRpb25zICE9PSB1bmRlZmluZWQgfHxcbiAgICAgIHJlY29yZC5ydWxlRW5naW5lQ29uZmlnICE9PSB1bmRlZmluZWRcbiAgICApO1xuXG4gICAgY29uc3QgaGFzVjJHb2FsID0gcmVjb3JkLmdvYWwgIT09IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBoYXNWMUZpZWxkcyAmJiAhaGFzVjJHb2FsO1xuICB9XG59XG4iXX0=
|
|
822
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWdlbnRFbGVtZW50VmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3ZhbGlkYXRpb24vQWdlbnRFbGVtZW50VmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkUsT0FBTyxFQUFvQixnQkFBZ0IsRUFBNEIsTUFBTSx1QkFBdUIsQ0FBQztBQUlyRyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQixrQkFBa0IsRUFDbEIseUJBQXlCLEVBQ3pCLGtCQUFrQixFQUNsQixZQUFZLEVBQ1osT0FBTyxFQUdSLE1BQU0sb0NBQW9DLENBQUM7QUFDNUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDckUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDeEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTlEOztHQUVHO0FBQ0gsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFVLENBQUM7QUFHdkU7O0dBRUc7QUFDSCxNQUFNLHFCQUFxQixHQUFHO0lBQzVCLFVBQVU7SUFDVixRQUFRO0lBQ1IsVUFBVTtJQUNWLFdBQVc7SUFDWCxXQUFXO0NBQ0gsQ0FBQztBQUVYOztHQUVHO0FBQ0gsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLENBQUM7QUFDbkMsTUFBTSx3QkFBd0IsR0FBRyxLQUFLLENBQUM7QUFFdkM7O0dBRUc7QUFDSCxNQUFNLE9BQU8scUJBQXNCLFNBQVEsdUJBQXVCO0lBQ2hFLFlBQ0UsaUJBQW9DLEVBQ3BDLHdCQUFrRCxFQUNsRCxlQUFnQztRQUVo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QztJQUVEOzs7T0FHRztJQUNLLFNBQVMsQ0FBQyxNQUErQjtRQUMvQyxNQUFNLFdBQVcsR0FBRyxDQUNsQixNQUFNLENBQUMsaUJBQWlCLEtBQUssU0FBUztZQUN0QyxNQUFNLENBQUMsZUFBZSxLQUFLLFNBQVM7WUFDcEMsTUFBTSxDQUFDLGdCQUFnQixLQUFLLFNBQVMsQ0FDdEMsQ0FBQztRQUVGLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDO1FBRTVDLE9BQU8sV0FBVyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ25DLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQWdlbnRFbGVtZW50VmFsaWRhdG9yIC0gU3BlY2lhbGl6ZWQgdmFsaWRhdG9yIGZvciBBZ2VudCBlbGVtZW50c1xuICpcbiAqIEV4dGVuZHMgR2VuZXJpY0VsZW1lbnRWYWxpZGF0b3IgdG8gYWRkIEFnZW50LXNwZWNpZmljIHZhbGlkYXRpb246XG4gKiAtIFYyLjAgZmllbGRzOiBnb2FsICh0ZW1wbGF0ZS9wYXJhbWV0ZXJzKSwgYWN0aXZhdGVzLCB0b29scywgc3lzdGVtUHJvbXB0LCBhdXRvbm9teVxuICogLSBWMS54IGxlZ2FjeSBmaWVsZHMgd2l0aCBkZXByZWNhdGlvbiB3YXJuaW5nc1xuICogLSBDb21wbGV4IHZhbGlkYXRpb25zOiBnb2FsIHRlbXBsYXRlL3BhcmFtZXRlciBjb25zaXN0ZW5jeSwgYXV0b25vbXkgY29uZmxpY3QgZGV0ZWN0aW9uXG4gKiAtIE1pZ3JhdGlvbiBzdWdnZXN0aW9ucyBmb3IgVjEgYWdlbnRzXG4gKlxuICogQHNpbmNlIHYyLjAuMCAtIEFnZW50aWMgTG9vcCBSZWRlc2lnblxuICovXG5cbmltcG9ydCB7IEVsZW1lbnRUeXBlIH0gZnJvbSAnLi4vLi4vcG9ydGZvbGlvL3R5cGVzLmpzJztcbmltcG9ydCB7IEdlbmVyaWNFbGVtZW50VmFsaWRhdG9yIH0gZnJvbSAnLi9HZW5lcmljRWxlbWVudFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uUmVzdWx0LCBWYWxpZGF0b3JIZWxwZXJzLCBFbGVtZW50VmFsaWRhdGlvbk9wdGlvbnMgfSBmcm9tICcuL0VsZW1lbnRWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuL1ZhbGlkYXRpb25TZXJ2aWNlLmpzJztcbmltcG9ydCB7IFRyaWdnZXJWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4vVHJpZ2dlclZhbGlkYXRpb25TZXJ2aWNlLmpzJztcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4uL01ldGFkYXRhU2VydmljZS5qcyc7XG5pbXBvcnQge1xuICBERUNJU0lPTl9GUkFNRVdPUktTLFxuICBSSVNLX1RPTEVSQU5DRV9MRVZFTFMsXG4gIFNURVBfTElNSVRfQUNUSU9OUyxcbiAgRVhFQ1VUSU9OX0ZBSUxVUkVfQUNUSU9OUyxcbiAgQkFDS09GRl9TVFJBVEVHSUVTLFxuICBBR0VOVF9MSU1JVFMsXG4gIGlzT25lT2YsXG4gIERlY2lzaW9uRnJhbWV3b3JrLFxuICBSaXNrVG9sZXJhbmNlXG59IGZyb20gJy4uLy4uL2VsZW1lbnRzL2FnZW50cy9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgZmluZFBhdHRlcm5Db25mbGljdHMgfSBmcm9tICcuLi8uLi91dGlscy9wYXR0ZXJuTWF0Y2hlci5qcyc7XG5pbXBvcnQgeyBwYXJzZUVsZW1lbnRQb2xpY3kgfSBmcm9tICcuLi8uLi9oYW5kbGVycy9tY3AtYXFsL3BvbGljaWVzL0VsZW1lbnRQb2xpY2llcy5qcyc7XG5pbXBvcnQgeyBTRUNVUklUWV9MSU1JVFMgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9jb25zdGFudHMuanMnO1xuXG4vKipcbiAqIFZhbGlkIHBhcmFtZXRlciB0eXBlcyBmb3IgZ29hbCB0ZW1wbGF0ZXNcbiAqL1xuY29uc3QgVkFMSURfUEFSQU1FVEVSX1RZUEVTID0gWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nXSBhcyBjb25zdDtcbnR5cGUgUGFyYW1ldGVyVHlwZSA9IHR5cGVvZiBWQUxJRF9QQVJBTUVURVJfVFlQRVNbbnVtYmVyXTtcblxuLyoqXG4gKiBWYWxpZCBlbGVtZW50IHR5cGVzIGZvciBhY3RpdmF0ZXMgY29uZmlndXJhdGlvblxuICovXG5jb25zdCBWQUxJRF9BQ1RJVkFURVNfVFlQRVMgPSBbXG4gICdwZXJzb25hcycsXG4gICdza2lsbHMnLFxuICAnbWVtb3JpZXMnLFxuICAndGVtcGxhdGVzJyxcbiAgJ2Vuc2VtYmxlcydcbl0gYXMgY29uc3Q7XG5cbi8qKlxuICogU3lzdGVtIHByb21wdCBsZW5ndGggbGltaXRzXG4gKi9cbmNvbnN0IFNZU1RFTV9QUk9NUFRfTUlOX0xFTkdUSCA9IDE7XG5jb25zdCBTWVNURU1fUFJPTVBUX01BWF9MRU5HVEggPSAxMDAwMDtcblxuLyoqXG4gKiBTcGVjaWFsaXplZCB2YWxpZGF0b3IgZm9yIEFnZW50IGVsZW1lbnRzXG4gKi9cbmV4cG9ydCBjbGFzcyBBZ2VudEVsZW1lbnRWYWxpZGF0b3IgZXh0ZW5kcyBHZW5lcmljRWxlbWVudFZhbGlkYXRvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHZhbGlkYXRpb25TZXJ2aWNlOiBWYWxpZGF0aW9uU2VydmljZSxcbiAgICB0cmlnZ2VyVmFsaWRhdGlvblNlcnZpY2U6IFRyaWdnZXJWYWxpZGF0aW9uU2VydmljZSxcbiAgICBtZXRhZGF0YVNlcnZpY2U6IE1ldGFkYXRhU2VydmljZVxuICApIHtcbiAgICBzdXBlcihFbGVtZW50VHlwZS5BR0VOVCwgdmFsaWRhdGlvblNlcnZpY2UsIHRyaWdnZXJWYWxpZGF0aW9uU2VydmljZSwgbWV0YWRhdGFTZXJ2aWNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB2YWxpZGF0ZUNyZWF0ZSB0byBhZGQgYWdlbnQtc3BlY2lmaWMgdmFsaWRhdGlvblxuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgdmFsaWRhdGVDcmVhdGUoXG4gICAgZGF0YTogdW5rbm93bixcbiAgICBvcHRpb25zPzogRWxlbWVudFZhbGlkYXRpb25PcHRpb25zXG4gICk6IFByb21pc2U8VmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIC8vIEZpcnN0IHJ1biBnZW5lcmljIHZhbGlkYXRpb25cbiAgICBjb25zdCBiYXNlUmVzdWx0ID0gYXdhaXQgc3VwZXIudmFsaWRhdGVDcmVhdGUoZGF0YSwgb3B0aW9ucyk7XG4gICAgY29uc3QgZXJyb3JzID0gWy4uLmJhc2VSZXN1bHQuZXJyb3JzXTtcbiAgICBjb25zdCB3YXJuaW5ncyA9IFsuLi5iYXNlUmVzdWx0Lndhcm5pbmdzXTtcbiAgICBjb25zdCBzdWdnZXN0aW9ucyA9IFsuLi4oYmFzZVJlc3VsdC5zdWdnZXN0aW9ucyB8fCBbXSldO1xuXG4gICAgaWYgKCFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIGJhc2VSZXN1bHQ7XG4gICAgfVxuXG4gICAgY29uc3QgcmVjb3JkID0gZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAgIC8vIFYyLjAgT1BUSU9OQUwgRklFTEQ6IGdvYWxcbiAgICAvLyBOb3RlOiBWMSBhZ2VudHMgZG9uJ3QgaGF2ZSBnb2FsIC0gdGhleSB1c2UgZGVjaXNpb25GcmFtZXdvcmsvc3BlY2lhbGl6YXRpb25zXG4gICAgLy8gVjIgYWdlbnRzIHNob3VsZCBkZWZpbmUgZ29hbCwgYnV0IHdlIGRvbid0IHJlcXVpcmUgaXQgdG8gbWFpbnRhaW4gYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgIGlmIChyZWNvcmQuZ29hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBnb2FsUmVzdWx0ID0gdGhpcy52YWxpZGF0ZUdvYWwocmVjb3JkLmdvYWwpO1xuICAgICAgaWYgKCFnb2FsUmVzdWx0LmlzVmFsaWQpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goLi4uZ29hbFJlc3VsdC5lcnJvcnMpO1xuICAgICAgfVxuICAgICAgd2FybmluZ3MucHVzaCguLi5nb2FsUmVzdWx0Lndhcm5pbmdzKTtcbiAgICB9XG5cbiAgICAvLyBWMi4wIE9QVElPTkFMIEZJRUxEU1xuXG4gICAgLy8gVmFsaWRhdGUgYWN0aXZhdGVzIGNvbmZpZ3VyYXRpb25cbiAgICBpZiAocmVjb3JkLmFjdGl2YXRlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBhY3RpdmF0ZXNSZXN1bHQgPSB0aGlzLnZhbGlkYXRlQWN0aXZhdGVzKHJlY29yZC5hY3RpdmF0ZXMpO1xuICAgICAgaWYgKCFhY3RpdmF0ZXNSZXN1bHQuaXNWYWxpZCkge1xuICAgICAgICBlcnJvcnMucHVzaCguLi5hY3RpdmF0ZXNSZXN1bHQuZXJyb3JzKTtcbiAgICAgIH1cbiAgICAgIHdhcm5pbmdzLnB1c2goLi4uYWN0aXZhdGVzUmVzdWx0Lndhcm5pbmdzKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSB0b29scyBjb25maWd1cmF0aW9uXG4gICAgaWYgKHJlY29yZC50b29scyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB0b29sc1Jlc3VsdCA9IHRoaXMudmFsaWRhdGVUb29scyhyZWNvcmQudG9vbHMpO1xuICAgICAgaWYgKCF0b29sc1Jlc3VsdC5pc1ZhbGlkKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKC4uLnRvb2xzUmVzdWx0LmVycm9ycyk7XG4gICAgICB9XG4gICAgICB3YXJuaW5ncy5wdXNoKC4uLnRvb2xzUmVzdWx0Lndhcm5pbmdzKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBzeXN0ZW0gcHJvbXB0XG4gICAgaWYgKHJlY29yZC5zeXN0ZW1Qcm9tcHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcHJvbXB0UmVzdWx0ID0gdGhpcy52YWxpZGF0ZVN5c3RlbVByb21wdChyZWNvcmQuc3lzdGVtUHJvbXB0KTtcbiAgICAgIGlmICghcHJvbXB0UmVzdWx0LmlzVmFsaWQpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goLi4ucHJvbXB0UmVzdWx0LmVycm9ycyk7XG4gICAgICB9XG4gICAgICB3YXJuaW5ncy5wdXNoKC4uLnByb21wdFJlc3VsdC53YXJuaW5ncyk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgYXV0b25vbXkgY29uZmlndXJhdGlvblxuICAgIGlmIChyZWNvcmQuYXV0b25vbXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgYXV0b25vbXlSZXN1bHQgPSB0aGlzLnZhbGlkYXRlQXV0b25vbXkocmVjb3JkLmF1dG9ub215KTtcbiAgICAgIGlmICghYXV0b25vbXlSZXN1bHQuaXNWYWxpZCkge1xuICAgICAgICBlcnJvcnMucHVzaCguLi5hdXRvbm9teVJlc3VsdC5lcnJvcnMpO1xuICAgICAgfVxuICAgICAgd2FybmluZ3MucHVzaCguLi5hdXRvbm9teVJlc3VsdC53YXJuaW5ncyk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgcmVzaWxpZW5jZSBjb25maWd1cmF0aW9uIChJc3N1ZSAjNTI2KVxuICAgIGlmIChyZWNvcmQucmVzaWxpZW5jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCByZXNpbGllbmNlUmVzdWx0ID0gdGhpcy52YWxpZGF0ZVJlc2lsaWVuY2UocmVjb3JkLnJlc2lsaWVuY2UpO1xuICAgICAgaWYgKCFyZXNpbGllbmNlUmVzdWx0LmlzVmFsaWQpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goLi4ucmVzaWxpZW5jZVJlc3VsdC5lcnJvcnMpO1xuICAgICAgfVxuICAgICAgd2FybmluZ3MucHVzaCguLi5yZXNpbGllbmNlUmVzdWx0Lndhcm5pbmdzKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBnYXRla2VlcGVyIHBvbGljeSBzdHJ1Y3R1cmUgKElzc3VlICM0NDkpXG4gICAgLy8gVXNlcyBwYXJzZUVsZW1lbnRQb2xpY3koKSB3aGljaCB2YWxpZGF0ZXM6IG9iamVjdCB0eXBlLCBhbGxvdy9jb25maXJtL2RlbnlcbiAgICAvLyBhcmUgc3RyaW5nIGFycmF5cywgYW5kIHNjb3BlUmVzdHJpY3Rpb25zIHN0cnVjdHVyZSBpZiBwcmVzZW50LlxuICAgIGlmIChyZWNvcmQuZ2F0ZWtlZXBlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwb2xpY3kgPSBwYXJzZUVsZW1lbnRQb2xpY3koeyBnYXRla2VlcGVyOiByZWNvcmQuZ2F0ZWtlZXBlciB9KTtcbiAgICAgICAgaWYgKCFwb2xpY3kpIHtcbiAgICAgICAgICBlcnJvcnMucHVzaCgnSW52YWxpZCBnYXRla2VlcGVyIHBvbGljeTogbXVzdCBiZSBhIG5vbi1udWxsIG9iamVjdCB3aXRoIGFsbG93LCBjb25maXJtLCBvciBkZW55IGFycmF5cycpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgICBlcnJvcnMucHVzaChgSW52YWxpZCBnYXRla2VlcGVyIHBvbGljeTogJHttZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFYxLlggTEVHQUNZIEZJRUxEUyAtIFZhbGlkYXRlIGJ1dCBlbWl0IHdhcm5pbmdzIGZvciBkZXByZWNhdGlvblxuXG4gICAgLy8gZGVjaXNpb25GcmFtZXdvcmsgKFYxLngpXG4gICAgaWYgKHJlY29yZC5kZWNpc2lvbkZyYW1ld29yayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBmcmFtZXdvcmtSZXN1bHQgPSB0aGlzLnZhbGlkYXRlRGVjaXNpb25GcmFtZXdvcmsocmVjb3JkLmRlY2lzaW9uRnJhbWV3b3JrKTtcbiAgICAgIGlmICghZnJhbWV3b3JrUmVzdWx0LmlzVmFsaWQpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goLi4uZnJhbWV3b3JrUmVzdWx0LmVycm9ycyk7XG4gICAgICB9XG4gICAgICB3YXJuaW5ncy5wdXNoKC4uLmZyYW1ld29ya1Jlc3VsdC53YXJuaW5ncyk7XG4gICAgICB3YXJuaW5ncy5wdXNoKFwiRmllbGQgJ2RlY2lzaW9uRnJhbWV3b3JrJyBpcyBkZXByZWNhdGVkIGluIFYyLjAuIExMTSBqdWRnbWVudCBpcyBub3cgdXNlZCBpbnN0ZWFkLlwiKTtcbiAgICB9XG5cbiAgICAvLyBzcGVjaWFsaXphdGlvbnMgKFYxLngpXG4gICAgaWYgKHJlY29yZC5zcGVjaWFsaXphdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgc3BlY2lhbGl6YXRpb25zUmVzdWx0ID0gdGhpcy52YWxpZGF0ZVNwZWNpYWxpemF0aW9ucyhyZWNvcmQuc3BlY2lhbGl6YXRpb25zKTtcbiAgICAgIGlmICghc3BlY2lhbGl6YXRpb25zUmVzdWx0LmlzVmFsaWQpIHtcbiAgICAgICAgd2FybmluZ3MucHVzaCguLi5zcGVjaWFsaXphdGlvbnNSZXN1bHQuZXJyb3JzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyByaXNrVG9sZXJhbmNlIChWMS54KVxuICAgIGlmIChyZWNvcmQucmlza1RvbGVyYW5jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCByaXNrUmVzdWx0ID0gdGhpcy52YWxpZGF0ZVJpc2tUb2xlcmFuY2UocmVjb3JkLnJpc2tUb2xlcmFuY2UpO1xuICAgICAgaWYgKCFyaXNrUmVzdWx0LmlzVmFsaWQpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goLi4ucmlza1Jlc3VsdC5lcnJvcnMpO1xuICAgICAgfVxuICAgICAgLy8gTm90ZTogcmlza1RvbGVyYW5jZSBpcyBhbHNvIHVzZWQgaW4gVjIuMCBhdXRvbm9teSBjb25maWcsIHNvIG9ubHkgd2FybiBpZiBOT1QgaW4gYXV0b25vbXlcbiAgICAgIGlmICghcmVjb3JkLmF1dG9ub215IHx8ICEocmVjb3JkLmF1dG9ub215IGFzIGFueSk/LnJpc2tUb2xlcmFuY2UpIHtcbiAgICAgICAgd2FybmluZ3MucHVzaChcIkZpZWxkICdyaXNrVG9sZXJhbmNlJyBhdCByb290IGxldmVsIGlzIGRlcHJlY2F0ZWQgaW4gVjIuMC4gVXNlICdhdXRvbm9teS5yaXNrVG9sZXJhbmNlJyBpbnN0ZWFkLlwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBsZWFybmluZ0VuYWJsZWQgKFYxLngpXG4gICAgaWYgKHJlY29yZC5sZWFybmluZ0VuYWJsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiByZWNvcmQubGVhcm5pbmdFbmFibGVkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgd2FybmluZ3MucHVzaChcIkZpZWxkICdsZWFybmluZ0VuYWJsZWQnIG11c3QgYmUgYSBib29sZWFuXCIpO1xuICAgICAgfVxuICAgICAgd2FybmluZ3MucHVzaChcIkZpZWxkICdsZWFybmluZ0VuYWJsZWQnIGlzIGRlcHJlY2F0ZWQgaW4gVjIuMC4gTExNIGhhbmRsZXMgbGVhcm5pbmcgbmF0dXJhbGx5LlwiKTtcbiAgICB9XG5cbiAgICAvLyBtYXhDb25jdXJyZW50R29hbHMgKFYxLngpXG4gICAgaWYgKHJlY29yZC5tYXhDb25jdXJyZW50R29hbHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgY29uY3VycmVudFJlc3VsdCA9IHRoaXMudmFsaWRhdGVNYXhDb25jdXJyZW50R29hbHMocmVjb3JkLm1heENvbmN1cnJlbnRHb2Fscyk7XG4gICAgICBpZiAoIWNvbmN1cnJlbnRSZXN1bHQuaXNWYWxpZCkge1xuICAgICAgICB3YXJuaW5ncy5wdXNoKC4uLmNvbmN1cnJlbnRSZXN1bHQuZXJyb3JzKTtcbiAgICAgIH1cbiAgICAgIHdhcm5pbmdzLnB1c2goXCJGaWVsZCAnbWF4Q29uY3VycmVudEdvYWxzJyBpcyBkZXByZWNhdGVkIGluIFYyLjAuXCIpO1xuICAgIH1cblxuICAgIC8vIHJ1bGVFbmdpbmVDb25maWcgKFYxLngpXG4gICAgaWYgKHJlY29yZC5ydWxlRW5naW5lQ29uZmlnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdhcm5pbmdzLnB1c2goXCJGaWVsZCAncnVsZUVuZ2luZUNvbmZpZycgaXMgZGVwcmVjYXRlZCBpbiBWMi4wLiBDb25zdHJhaW50cyBhcmUgaGFuZGxlZCBieSBldmFsdWF0ZUNvbnN0cmFpbnRzKCkuXCIpO1xuICAgIH1cblxuICAgIC8vIFNVR0dFU1RJT05TXG5cbiAgICAvLyBTdWdnZXN0IG1pZ3JhdGlvbiBmb3IgVjEgYWdlbnRzXG4gICAgaWYgKHRoaXMuaXNWMUFnZW50KHJlY29yZCkpIHtcbiAgICAgIHN1Z2dlc3Rpb25zLnB1c2goJ1RoaXMgYXBwZWFycyB0byBiZSBhIFYxLnggYWdlbnQuIENvbnNpZGVyIG1pZ3JhdGluZyB0byBWMi4wIGZvcm1hdCB3aXRoIGdvYWwgdGVtcGxhdGVzLicpO1xuICAgIH1cblxuICAgIC8vIFN1Z2dlc3Qgb3B0aW9uYWwgZmllbGRzIGlmIG1pc3NpbmdcbiAgICBpZiAoIXJlY29yZC5hY3RpdmF0ZXMpIHtcbiAgICAgIHN1Z2dlc3Rpb25zLnB1c2goXCJDb25zaWRlciBhZGRpbmcgJ2FjdGl2YXRlcycgY29uZmlndXJhdGlvbiB0byBzcGVjaWZ5IHdoaWNoIGVsZW1lbnRzIHNob3VsZCBiZSBhY3RpdmF0ZWQuXCIpO1xuICAgIH1cblxuICAgIGlmICghcmVjb3JkLnRvb2xzKSB7XG4gICAgICBzdWdnZXN0aW9ucy5wdXNoKFwiQ29uc2lkZXIgYWRkaW5nICd0b29scycgY29uZmlndXJhdGlvbiB0byBndWlkZSBMTE0gb24gYXBwcm9wcmlhdGUgdG9vbCB1c2FnZS5cIik7XG4gICAgfVxuXG4gICAgaWYgKCFyZWNvcmQuc3lzdGVtUHJvbXB0KSB7XG4gICAgICBzdWdnZXN0aW9ucy5wdXNoKFwiQ29uc2lkZXIgYWRkaW5nICdzeXN0ZW1Qcm9tcHQnIHRvIHByb3ZpZGUgY3VzdG9tIExMTSBjb250ZXh0IGZvciB0aGlzIGFnZW50LlwiKTtcbiAgICB9XG5cbiAgICBpZiAoIXJlY29yZC5hdXRvbm9teSkge1xuICAgICAgc3VnZ2VzdGlvbnMucHVzaChcIkNvbnNpZGVyIGFkZGluZyAnYXV0b25vbXknIGNvbmZpZ3VyYXRpb24gdG8gY29udHJvbCBjb250aW51ZS9wYXVzZSBiZWhhdmlvci5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVmFsaWQ6IGVycm9ycy5sZW5ndGggPT09IDAsXG4gICAgICBlcnJvcnMsXG4gICAgICB3YXJuaW5ncyxcbiAgICAgIHN1Z2dlc3Rpb25zOiBzdWdnZXN0aW9ucy5sZW5ndGggPiAwID8gc3VnZ2VzdGlvbnMgOiB1bmRlZmluZWRcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIFYyLjAgZ29hbCBjb25maWd1cmF0aW9uIChSRVFVSVJFRClcbiAgICpcbiAgICogTXVzdCBoYXZlOlxuICAgKiAtIHRlbXBsYXRlIChzdHJpbmcgd2l0aCB7cGFyYW1ldGVyfSBwbGFjZWhvbGRlcnMpXG4gICAqIC0gcGFyYW1ldGVycyAoYXJyYXkgb2YgcGFyYW1ldGVyIGRlZmluaXRpb25zKVxuICAgKiAtIHN1Y2Nlc3NDcml0ZXJpYSAob3B0aW9uYWwgc3RyaW5nW10pXG4gICAqXG4gICAqIEFsc28gdmFsaWRhdGVzIHRlbXBsYXRlL3BhcmFtZXRlciBjb25zaXN0ZW5jeS5cbiAgICpcbiAgICogQXJjaGl0ZWN0dXJlOiBJbnB1dCBub3JtYWxpemF0aW9uIGhhcHBlbnMgYXQgR2VuZXJpY0VsZW1lbnRWYWxpZGF0b3IgYm91bmRhcnkuXG4gICAqIFRoaXMgdmFsaWRhdG9yIHJlY2VpdmVzIHByZS1ub3JtYWxpemVkIGRhdGEgYW5kIHZhbGlkYXRlcyBidXNpbmVzcyBydWxlcy5cbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVHb2FsKGdvYWw6IHVua25vd24pOiBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICBpZiAoIWdvYWwgfHwgdHlwZW9mIGdvYWwgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoZ29hbCkpIHtcbiAgICAgIHJldHVybiBWYWxpZGF0b3JIZWxwZXJzLmZhaWwoWydHb2FsIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggdGVtcGxhdGUgYW5kIHBhcmFtZXRlcnMnXSk7XG4gICAgfVxuXG4gICAgY29uc3QgZ29hbE9iaiA9IGdvYWwgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gVmFsaWRhdGUgdGVtcGxhdGVcbiAgICAvLyBOb3RlOiBJbnB1dCBpcyBhbHJlYWR5IG5vcm1hbGl6ZWQgYnkgR2VuZXJpY0VsZW1lbnRWYWxpZGF0b3JcbiAgICBpZiAoZ29hbE9iai50ZW1wbGF0ZSA9PT0gdW5kZWZpbmVkIHx8IGdvYWxPYmoudGVtcGxhdGUgPT09IG51bGwpIHtcbiAgICAgIGVycm9ycy5wdXNoKFwiR29hbCBpcyBtaXNzaW5nIHJlcXVpcmVkICd0ZW1wbGF0ZScgZmllbGRcIik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZ29hbE9iai50ZW1wbGF0ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVycm9ycy5wdXNoKFwiR29hbCB0ZW1wbGF0ZSBtdXN0IGJlIGEgc3RyaW5nXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBWYWxpZGF0ZSBsZW5ndGggYW5kIGNvbnRlbnQgcGF0dGVybnMgKGRhdGEgaXMgYWxyZWFkeSBub3JtYWxpemVkKVxuICAgICAgY29uc3QgY29udGVudFJlc3VsdCA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UudmFsaWRhdGVDb250ZW50KGdvYWxPYmoudGVtcGxhdGUsIHtcbiAgICAgICAgbWF4TGVuZ3RoOiBBR0VOVF9MSU1JVFMuTUFYX0dPQUxfTEVOR1RIXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFjb250ZW50UmVzdWx0LmlzVmFsaWQpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goLi4uKGNvbnRlbnRSZXN1bHQuZGV0ZWN0ZWRQYXR0ZXJucyB8fCBbJ0dvYWwgdGVtcGxhdGUgZmFpbGVkIGNvbnRlbnQgdmFsaWRhdGlvbiddKSk7XG4gICAgICB9IGVsc2UgaWYgKGdvYWxPYmoudGVtcGxhdGUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBlcnJvcnMucHVzaChcIkdvYWwgdGVtcGxhdGUgY2Fubm90IGJlIGVtcHR5XCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHBhcmFtZXRlcnNcbiAgICBpZiAoIWdvYWxPYmoucGFyYW1ldGVycykge1xuICAgICAgZXJyb3JzLnB1c2goXCJHb2FsIGlzIG1pc3NpbmcgcmVxdWlyZWQgJ3BhcmFtZXRlcnMnIGZpZWxkXCIpO1xuICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoZ29hbE9iai5wYXJhbWV0ZXJzKSkge1xuICAgICAgZXJyb3JzLnB1c2goXCJHb2FsIHBhcmFtZXRlcnMgbXVzdCBiZSBhbiBhcnJheVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVmFsaWRhdGUgZWFjaCBwYXJhbWV0ZXJcbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gU3RyaW5nKGdvYWxPYmoudGVtcGxhdGUgfHwgJycpO1xuICAgICAgY29uc3QgcGFyYW1ldGVyc1Jlc3VsdCA9IHRoaXMudmFsaWRhdGVHb2FsUGFyYW1ldGVycyhcbiAgICAgICAgZ29hbE9iai5wYXJhbWV0ZXJzLFxuICAgICAgICB0ZW1wbGF0ZVxuICAgICAgKTtcbiAgICAgIGlmICghcGFyYW1ldGVyc1Jlc3VsdC5pc1ZhbGlkKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKC4uLnBhcmFtZXRlcnNSZXN1bHQuZXJyb3JzKTtcbiAgICAgIH1cbiAgICAgIHdhcm5pbmdzLnB1c2goLi4ucGFyYW1ldGVyc1Jlc3VsdC53YXJuaW5ncyk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgc3VjY2Vzc0NyaXRlcmlhIChvcHRpb25hbClcbiAgICBpZiAoZ29hbE9iai5zdWNjZXNzQ3JpdGVyaWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGdvYWxPYmouc3VjY2Vzc0NyaXRlcmlhKSkge1xuICAgICAgICBlcnJvcnMucHVzaChcIkdvYWwgc3VjY2Vzc0NyaXRlcmlhIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5nc1wiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ29hbE9iai5zdWNjZXNzQ3JpdGVyaWEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBjcml0ZXJpb24gPSBnb2FsT2JqLnN1Y2Nlc3NDcml0ZXJpYVtpXTtcbiAgICAgICAgICBpZiAodHlwZW9mIGNyaXRlcmlvbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKGBTdWNjZXNzIGNyaXRlcmlvbiBhdCBpbmRleCAke2l9IG11c3QgYmUgYSBzdHJpbmdgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVmFsaWRhdGUgbGVuZ3RoIGFuZCBwYXR0ZXJucyAoZGF0YSBpcyBhbHJlYWR5IG5vcm1hbGl6ZWQpXG4gICAgICAgICAgICBjb25zdCBjb250ZW50UmVzdWx0ID0gdGhpcy52YWxpZGF0aW9uU2VydmljZS52YWxpZGF0ZUNvbnRlbnQoY3JpdGVyaW9uLCB7XG4gICAgICAgICAgICAgIG1heExlbmd0aDogQUdFTlRfTElNSVRTLk1BWF9HT0FMX0xFTkdUSFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWNvbnRlbnRSZXN1bHQuaXNWYWxpZCkge1xuICAgICAgICAgICAgICBlcnJvcnMucHVzaChgU3VjY2VzcyBjcml0ZXJpb24gYXQgaW5kZXggJHtpfSBmYWlsZWQgdmFsaWRhdGlvbjogJHtjb250ZW50UmVzdWx0LmRldGVjdGVkUGF0dGVybnM/LmpvaW4oJywgJykgfHwgJ2ludmFsaWQgY29udGVudCd9YCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNyaXRlcmlvbi50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goYFN1Y2Nlc3MgY3JpdGVyaW9uIGF0IGluZGV4ICR7aX0gaXMgZW1wdHlgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXNWYWxpZDogZXJyb3JzLmxlbmd0aCA9PT0gMCxcbiAgICAgIGVycm9ycyxcbiAgICAgIHdhcm5pbmdzXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBnb2FsIHBhcmFtZXRlcnMgYW5kIGNoZWNrIGNvbnNpc3RlbmN5IHdpdGggdGVtcGxhdGVcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVHb2FsUGFyYW1ldGVycyhcbiAgICBwYXJhbWV0ZXJzOiB1bmtub3duW10sXG4gICAgdGVtcGxhdGU6IHN0cmluZ1xuICApOiBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgcGFyYW1ldGVyTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCB0ZW1wbGF0ZVBsYWNlaG9sZGVycyA9IHRoaXMuZXh0cmFjdFRlbXBsYXRlUGxhY2Vob2xkZXJzKHRlbXBsYXRlKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcGFyYW0gPSBwYXJhbWV0ZXJzW2ldO1xuXG4gICAgICBpZiAoIXBhcmFtIHx8IHR5cGVvZiBwYXJhbSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYFBhcmFtZXRlciBhdCBpbmRleCAke2l9IG11c3QgYmUgYW4gb2JqZWN0YCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXJhbU9iaiA9IHBhcmFtIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gICAgICAvLyBWYWxpZGF0ZSBuYW1lXG4gICAgICBpZiAoIXBhcmFtT2JqLm5hbWUpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYFBhcmFtZXRlciBhdCBpbmRleCAke2l9IGlzIG1pc3NpbmcgcmVxdWlyZWQgJ25hbWUnIGZpZWxkYCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHBhcmFtT2JqLm5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKGBQYXJhbWV0ZXIgbmFtZSBhdCBpbmRleCAke2l9IG11c3QgYmUgYSBzdHJpbmdgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIHBhcmFtZXRlciBuYW1lIChkYXRhIGlzIGFscmVhZHkgbm9ybWFsaXplZClcbiAgICAgIGNvbnN0IG5hbWVSZXN1bHQgPSB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnZhbGlkYXRlQ29udGVudChwYXJhbU9iai5uYW1lLCB7XG4gICAgICAgIG1heExlbmd0aDogQUdFTlRfTElNSVRTLk1BWF9BR0VOVF9OQU1FX0xFTkdUSFxuICAgICAgfSk7XG4gICAgICBpZiAoIW5hbWVSZXN1bHQuaXNWYWxpZCkge1xuICAgICAgICBlcnJvcnMucHVzaChgUGFyYW1ldGVyIG5hbWUgYXQgaW5kZXggJHtpfSBmYWlsZWQgdmFsaWRhdGlvbjogJHtuYW1lUmVzdWx0LmRldGVjdGVkUGF0dGVybnM/LmpvaW4oJywgJykgfHwgJ2ludmFsaWQgY29udGVudCd9YCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcGFyYW1OYW1lID0gcGFyYW1PYmoubmFtZSBhcyBzdHJpbmc7XG5cbiAgICAgIC8vIENoZWNrIGZvciBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzXG4gICAgICBpZiAocGFyYW1ldGVyTmFtZXMuaGFzKHBhcmFtTmFtZSkpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYER1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZSAnJHtwYXJhbU5hbWV9JyBhdCBpbmRleCAke2l9YCk7XG4gICAgICB9XG4gICAgICBwYXJhbWV0ZXJOYW1lcy5hZGQocGFyYW1OYW1lKTtcblxuICAgICAgLy8gVmFsaWRhdGUgdHlwZVxuICAgICAgaWYgKCFwYXJhbU9iai50eXBlKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKGBQYXJhbWV0ZXIgJyR7cGFyYW1OYW1lfScgaXMgbWlzc2luZyByZXF1aXJlZCAndHlwZScgZmllbGRgKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBhcmFtT2JqLnR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKGBQYXJhbWV0ZXIgJyR7cGFyYW1OYW1lfScgdHlwZSBtdXN0IGJlIGEgc3RyaW5nYCk7XG4gICAgICB9IGVsc2UgaWYgKCFWQUxJRF9QQVJBTUVURVJfVFlQRVMuaW5jbHVkZXMocGFyYW1PYmoudHlwZSBhcyBQYXJhbWV0ZXJUeXBlKSkge1xuICAgICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgICBgUGFyYW1ldGVyICcke3BhcmFtTmFtZX0nIGhhcyBpbnZhbGlkIHR5cGUgJyR7cGFyYW1PYmoudHlwZX0nLiBWYWxpZCB0eXBlczogJHtWQUxJRF9QQVJBTUVURVJfVFlQRVMuam9pbignLCAnKX1gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIHJlcXVpcmVkXG4gICAgICBpZiAoISgncmVxdWlyZWQnIGluIHBhcmFtT2JqKSkge1xuICAgICAgICBlcnJvcnMucHVzaChgUGFyYW1ldGVyICcke3BhcmFtTmFtZX0nIGlzIG1pc3NpbmcgcmVxdWlyZWQgJ3JlcXVpcmVkJyBmaWVsZGApO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcGFyYW1PYmoucmVxdWlyZWQgIT09ICdib29sZWFuJykge1xuICAgICAgICBlcnJvcnMucHVzaChgUGFyYW1ldGVyICcke3BhcmFtTmFtZX0nIHJlcXVpcmVkIGZpZWxkIG11c3QgYmUgYSBib29sZWFuYCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIGRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBkYXRhIGlzIGFscmVhZHkgbm9ybWFsaXplZFxuICAgICAgaWYgKHBhcmFtT2JqLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJhbU9iai5kZXNjcmlwdGlvbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB3YXJuaW5ncy5wdXNoKGBQYXJhbWV0ZXIgJyR7cGFyYW1OYW1lfScgZGVzY3JpcHRpb24gbXVzdCBiZSBhIHN0cmluZ2ApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGRlc2NSZXN1bHQgPSB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnZhbGlkYXRlQ29udGVudChwYXJhbU9iai5kZXNjcmlwdGlvbiwge1xuICAgICAgICAgICAgbWF4TGVuZ3RoOiBTRUNVUklUWV9MSU1JVFMuTUFYX0RPQ1VNRU5UQVRJT05fRklFTERfTEVOR1RIXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKCFkZXNjUmVzdWx0LmlzVmFsaWQpIHtcbiAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goYFBhcmFtZXRlciAnJHtwYXJhbU5hbWV9JyBkZXNjcmlwdGlvbiBmYWlsZWQgdmFsaWRhdGlvbjogJHtkZXNjUmVzdWx0LmRldGVjdGVkUGF0dGVybnM/LmpvaW4oJywgJykgfHwgJ2ludmFsaWQgY29udGVudCd9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIGRlZmF1bHQgKG9wdGlvbmFsKSAtIGRhdGEgaXMgYWxyZWFkeSBub3JtYWxpemVkXG4gICAgICBpZiAocGFyYW1PYmouZGVmYXVsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRUeXBlID0gdHlwZW9mIHBhcmFtT2JqLmRlZmF1bHQ7XG4gICAgICAgIGlmIChwYXJhbU9iai50eXBlID09PSAnc3RyaW5nJyAmJiBkZWZhdWx0VHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB3YXJuaW5ncy5wdXNoKGBQYXJhbWV0ZXIgJyR7cGFyYW1OYW1lfScgZGVmYXVsdCB2YWx1ZSB0eXBlIG1pc21hdGNoIChleHBlY3RlZCBzdHJpbmcpYCk7XG4gICAgICAgIH0gZWxzZSBpZiAocGFyYW1PYmoudHlwZSA9PT0gJ3N0cmluZycgJiYgZGVmYXVsdFR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgLy8gVmFsaWRhdGUgc3RyaW5nIGRlZmF1bHQgdmFsdWVzIChhbHJlYWR5IG5vcm1hbGl6ZWQpXG4gICAgICAgICAgY29uc3QgZGVmYXVsdFJlc3VsdCA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UudmFsaWRhdGVDb250ZW50KHBhcmFtT2JqLmRlZmF1bHQgYXMgc3RyaW5nLCB7XG4gICAgICAgICAgICBtYXhMZW5ndGg6IEFHRU5UX0xJTUlUUy5NQVhfR09BTF9MRU5HVEhcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoIWRlZmF1bHRSZXN1bHQuaXNWYWxpZCkge1xuICAgICAgICAgICAgd2FybmluZ3MucHVzaChgUGFyYW1ldGVyICcke3BhcmFtTmFtZX0nIGRlZmF1bHQgdmFsdWUgZmFpbGVkIHZhbGlkYXRpb246ICR7ZGVmYXVsdFJlc3VsdC5kZXRlY3RlZFBhdHRlcm5zPy5qb2luKCcsICcpIHx8ICdpbnZhbGlkIGNvbnRlbnQnfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJhbU9iai50eXBlID09PSAnbnVtYmVyJyAmJiBkZWZhdWx0VHlwZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICB3YXJuaW5ncy5wdXNoKGBQYXJhbWV0ZXIgJyR7cGFyYW1OYW1lfScgZGVmYXVsdCB2YWx1ZSB0eXBlIG1pc21hdGNoIChleHBlY3RlZCBudW1iZXIpYCk7XG4gICAgICAgIH0gZWxzZSBpZiAocGFyYW1PYmoudHlwZSA9PT0gJ2Jvb2xlYW4nICYmIGRlZmF1bHRUeXBlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICB3YXJuaW5ncy5wdXNoKGBQYXJhbWV0ZXIgJyR7cGFyYW1OYW1lfScgZGVmYXVsdCB2YWx1ZSB0eXBlIG1pc21hdGNoIChleHBlY3RlZCBib29sZWFuKWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgdGVtcGxhdGUvcGFyYW1ldGVyIGNvbnNpc3RlbmN5XG4gICAgLy8gV2FybiBpZiB0ZW1wbGF0ZSBoYXMgcGxhY2Vob2xkZXJzIG5vdCBkZWZpbmVkIGluIHBhcmFtZXRlcnNcbiAgICBmb3IgKGNvbnN0IHBsYWNlaG9sZGVyIG9mIHRlbXBsYXRlUGxhY2Vob2xkZXJzKSB7XG4gICAgICBpZiAoIXBhcmFtZXRlck5hbWVzLmhhcyhwbGFjZWhvbGRlcikpIHtcbiAgICAgICAgd2FybmluZ3MucHVzaChcbiAgICAgICAgICBgVGVtcGxhdGUgcmVmZXJlbmNlcyBwYXJhbWV0ZXIgJ3ske3BsYWNlaG9sZGVyfX0nIHdoaWNoIGlzIG5vdCBkZWZpbmVkIGluIHBhcmFtZXRlcnMgYXJyYXlgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gV2FybiBpZiBwYXJhbWV0ZXJzIGFyZSBkZWZpbmVkIGJ1dCBub3QgdXNlZCBpbiB0ZW1wbGF0ZVxuICAgIGZvciAoY29uc3QgcGFyYW1OYW1lIG9mIHBhcmFtZXRlck5hbWVzKSB7XG4gICAgICBpZiAoIXRlbXBsYXRlUGxhY2Vob2xkZXJzLmhhcyhwYXJhbU5hbWUpKSB7XG4gICAgICAgIHdhcm5pbmdzLnB1c2goXG4gICAgICAgICAgYFBhcmFtZXRlciAnJHtwYXJhbU5hbWV9JyBpcyBkZWZpbmVkIGJ1dCBub3QgdXNlZCBpbiB0ZW1wbGF0ZWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXNWYWxpZDogZXJyb3JzLmxlbmd0aCA9PT0gMCxcbiAgICAgIGVycm9ycyxcbiAgICAgIHdhcm5pbmdzXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IHBhcmFtZXRlciBwbGFjZWhvbGRlcnMgZnJvbSB0ZW1wbGF0ZVxuICAgKiBGaW5kcyBhbGwge3BhcmFtZXRlck5hbWV9IHBhdHRlcm5zXG4gICAqL1xuICBwcml2YXRlIGV4dHJhY3RUZW1wbGF0ZVBsYWNlaG9sZGVycyh0ZW1wbGF0ZTogc3RyaW5nKTogU2V0PHN0cmluZz4ge1xuICAgIGNvbnN0IHBsYWNlaG9sZGVycyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IHJlZ2V4ID0gL1xceyhbYS16QS1aX11bYS16QS1aMC05X10qKVxcfS9nO1xuICAgIGxldCBtYXRjaDtcblxuICAgIHdoaWxlICgobWF0Y2ggPSByZWdleC5leGVjKHRlbXBsYXRlKSkgIT09IG51bGwpIHtcbiAgICAgIHBsYWNlaG9sZGVycy5hZGQobWF0Y2hbMV0pO1xuICAgIH1cblxuICAgIHJldHVybiBwbGFjZWhvbGRlcnM7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgVjIuMCBhY3RpdmF0ZXMgY29uZmlndXJhdGlvbiAoT1BUSU9OQUwpXG4gICAqXG4gICAqIE11c3QgYmUgYW4gb2JqZWN0IHdoZXJlIGVhY2ggcHJvcGVydHkgaXMgYSBzdHJpbmcgYXJyYXkuXG4gICAqIFN1cHBvcnRzOiBwZXJzb25hcywgc2tpbGxzLCBtZW1vcmllcywgdGVtcGxhdGVzLCBlbnNlbWJsZXNcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVBY3RpdmF0ZXMoYWN0aXZhdGVzOiB1bmtub3duKTogVmFsaWRhdGlvblJlc3VsdCB7XG4gICAgaWYgKCFhY3RpdmF0ZXMgfHwgdHlwZW9mIGFjdGl2YXRlcyAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShhY3RpdmF0ZXMpKSB7XG4gICAgICByZXR1cm4gVmFsaWRhdG9ySGVscGVycy5mYWlsKFsnQWN0aXZhdGVzIG11c3QgYmUgYW4gb2JqZWN0J10pO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdGl2YXRlc09iaiA9IGFjdGl2YXRlcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCB3YXJuaW5nczogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGFjdGl2YXRlc09iaikpIHtcbiAgICAgIC8vIENoZWNrIGlmIGtleSBpcyBhIGtub3duIGVsZW1lbnQgdHlwZSAod2FybmluZyBvbmx5KVxuICAgICAgaWYgKCFWQUxJRF9BQ1RJVkFURVNfVFlQRVMuaW5jbHVkZXMoa2V5IGFzIGFueSkpIHtcbiAgICAgICAgd2FybmluZ3MucHVzaChcbiAgICAgICAgICBgVW5rbm93biBlbGVtZW50IHR5cGUgJyR7a2V5fScgaW4gYWN0aXZhdGVzLiBLbm93biB0eXBlczogJHtWQUxJRF9BQ1RJVkFURVNfVFlQRVMuam9pbignLCAnKX1gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIHZhbHVlIGlzIHN0cmluZyBhcnJheVxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gVmFsaWRhdG9ySGVscGVycy5mYWlsKFtgQWN0aXZhdGVzLiR7a2V5fSBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3NgXSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZVtpXSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gVmFsaWRhdG9ySGVscGVycy5mYWlsKFtgQWN0aXZhdGVzLiR7a2V5fVske2l9XSBtdXN0IGJlIGEgc3RyaW5nYF0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFZhbGlkYXRlIGxlbmd0aCBhbmQgcGF0dGVybnMgKGRhdGEgaXMgYWxyZWFkeSBub3JtYWxpemVkKVxuICAgICAgICBjb25zdCBjb250ZW50UmVzdWx0ID0gdGhpcy52YWxpZGF0aW9uU2VydmljZS52YWxpZGF0ZUNvbnRlbnQodmFsdWVbaV0sIHtcbiAgICAgICAgICBtYXhMZW5ndGg6IEFHRU5UX0xJTUlUUy5NQVhfQUdFTlRfTkFNRV9MRU5HVEhcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY29udGVudFJlc3VsdC5pc1ZhbGlkKSB7XG4gICAgICAgICAgcmV0dXJuIFZhbGlkYXRvckhlbHBlcnMuZmFpbChbYEFjdGl2YXRlcy4ke2tleX1bJHtpfV0gZmFpbGVkIHZhbGlkYXRpb246ICR7Y29udGVudFJlc3VsdC5kZXRlY3RlZFBhdHRlcm5zPy5qb2luKCcsICcpIHx8ICdpbnZhbGlkIGNvbnRlbnQnfWBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWVbaV0udHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHdhcm5pbmdzLnB1c2goYEFjdGl2YXRlcy4ke2tleX1bJHtpfV0gaXMgZW1wdHlgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOiB0cnVlLFxuICAgICAgZXJyb3JzOiBbXSxcbiAgICAgIHdhcm5pbmdzXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBWMi4wIHRvb2xzIGNvbmZpZ3VyYXRpb24gKE9QVElPTkFMKVxuICAgKlxuICAgKiBNdXN0IGhhdmU6XG4gICAqIC0gYWxsb3dlZCAoc3RyaW5nW10sIHJlcXVpcmVkIGlmIHRvb2xzIGRlZmluZWQpXG4gICAqIC0gZGVuaWVkIChzdHJpbmdbXSwgb3B0aW9uYWwpXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlVG9vbHModG9vbHM6IHVua25vd24pOiBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICBpZiAoIXRvb2xzIHx8IHR5cGVvZiB0b29scyAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheSh0b29scykpIHtcbiAgICAgIHJldHVybiBWYWxpZGF0b3JIZWxwZXJzLmZhaWwoWydUb29scyBtdXN0IGJlIGFuIG9iamVjdCddKTtcbiAgICB9XG5cbiAgICBjb25zdCB0b29sc09iaiA9IHRvb2xzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gVmFsaWRhdGUgYWxsb3dlZCAocmVxdWlyZWQpXG4gICAgaWYgKCF0b29sc09iai5hbGxvd2VkKSB7XG4gICAgICByZXR1cm4gVmFsaWRhdG9ySGVscGVycy5mYWlsKFtcIlRvb2xzIGNvbmZpZ3VyYXRpb24gbXVzdCBpbmNsdWRlICdhbGxvd2VkJyBhcnJheVwiXSk7XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHRvb2xzT2JqLmFsbG93ZWQpKSB7XG4gICAgICByZXR1cm4gVmFsaWRhdG9ySGVscGVycy5mYWlsKFtcIlRvb2xzLmFsbG93ZWQgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzXCJdKTtcbiAgICB9XG5cbiAgICBjb25zdCBhbGxvd2VkU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b29sc09iai5hbGxvd2VkLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB0b29sID0gdG9vbHNPYmouYWxsb3dlZFtpXTtcbiAgICAgIGlmICh0eXBlb2YgdG9vbCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIFZhbGlkYXRvckhlbHBlcnMuZmFpbChbYFRvb2xzLmFsbG93ZWRbJHtpfV0gbXVzdCBiZSBhIHN0cmluZ2BdKTtcbiAgICAgIH1cbiAgICAgIC8vIFZhbGlkYXRlIGxlbmd0aCBhbmQgcGF0dGVybnMgKGRhdGEgaXMgYWxyZWFkeSBub3JtYWxpemVkKVxuICAgICAgY29uc3QgY29udGVudFJlc3VsdCA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UudmFsaWRhdGVDb250ZW50KHRvb2wsIHtcbiAgICAgICAgbWF4TGVuZ3RoOiBBR0VOVF9MSU1JVFMuTUFYX0FHRU5UX05BTUVfTEVOR1RIXG4gICAgICB9KTtcbiAgICAgIGlmICghY29udGVudFJlc3VsdC5pc1ZhbGlkKSB7XG4gICAgICAgIHJldHVybiBWYWxpZGF0b3JIZWxwZXJzLmZhaWwoW2BUb29scy5hbGxvd2VkWyR7aX1dIGZhaWxlZCB2YWxpZGF0aW9uOiAke2NvbnRlbnRSZXN1bHQuZGV0ZWN0ZWRQYXR0ZXJucz8uam9pbignLCAnKSB8fCAnaW52YWxpZCBjb250ZW50J31gXSk7XG4gICAgICB9XG4gICAgICBpZiAodG9vbC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHdhcm5pbmdzLnB1c2goYFRvb2xzLmFsbG93ZWRbJHtpfV0gaXMgZW1wdHlgKTtcbiAgICAgIH1cbiAgICAgIGFsbG93ZWRTZXQuYWRkKHRvb2wpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGRlbmllZCAob3B0aW9uYWwpXG4gICAgaWYgKHRvb2xzT2JqLmRlbmllZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodG9vbHNPYmouZGVuaWVkKSkge1xuICAgICAgICByZXR1cm4gVmFsaWRhdG9ySGVscGVycy5mYWlsKFtcIlRvb2xzLmRlbmllZCBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3NcIl0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkZW5pZWRTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9vbHNPYmouZGVuaWVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHRvb2wgPSB0b29sc09iai5kZW5pZWRbaV07XG4gICAgICAgIGlmICh0eXBlb2YgdG9vbCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gVmFsaWRhdG9ySGVscGVycy5mYWlsKFtgVG9vbHMuZGVuaWVkWyR7aX1dIG11c3QgYmUgYSBzdHJpbmdgXSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVmFsaWRhdGUgbGVuZ3RoIGFuZCBwYXR0ZXJucyAoZGF0YSBpcyBhbHJlYWR5IG5vcm1hbGl6ZWQpXG4gICAgICAgIGNvbnN0IGNvbnRlbnRSZXN1bHQgPSB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnZhbGlkYXRlQ29udGVudCh0b29sLCB7XG4gICAgICAgICAgbWF4TGVuZ3RoOiBBR0VOVF9MSU1JVFMuTUFYX0FHRU5UX05BTUVfTEVOR1RIXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWNvbnRlbnRSZXN1bHQuaXNWYWxpZCkge1xuICAgICAgICAgIHJldHVybiBWYWxpZGF0b3JIZWxwZXJzLmZhaWwoW2BUb29scy5kZW5pZWRbJHtpfV0gZmFpbGVkIHZhbGlkYXRpb246ICR7Y29udGVudFJlc3VsdC5kZXRlY3RlZFBhdHRlcm5zPy5qb2luKCcsICcpIHx8ICdpbnZhbGlkIGNvbnRlbnQnfWBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9vbC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgd2FybmluZ3MucHVzaChgVG9vbHMuZGVuaWVkWyR7aX1dIGlzIGVtcHR5YCk7XG4gICAgICAgIH1cbiAgICAgICAgZGVuaWVkU2V0LmFkZCh0b29sKTtcbiAgICAgIH1cblxuICAgICAgLy8gV2FybiBpZiBzYW1lIHRvb2wgaXMgaW4gYm90aCBhbGxvd2VkIGFuZCBkZW5pZWRcbiAgICAgIGZvciAoY29uc3QgdG9vbCBvZiBkZW5pZWRTZXQpIHtcbiAgICAgICAgaWYgKGFsbG93ZWRTZXQuaGFzKHRvb2wpKSB7XG4gICAgICAgICAgd2FybmluZ3MucHVzaChcbiAgICAgICAgICAgIGBUb29sICcke3Rvb2x9JyBhcHBlYXJzIGluIGJvdGggYWxsb3dlZCBhbmQgZGVuaWVkIGxpc3RzLiBEZW5pZWQgdGFrZXMgcHJlY2VkZW5jZS5gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOiB0cnVlLFxuICAgICAgZXJyb3JzOiBbXSxcbiAgICAgIHdhcm5pbmdzXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBWMi4wIHN5c3RlbSBwcm9tcHQgKE9QVElPTkFMKVxuICAgKlxuICAgKiBNdXN0IGJlIGEgc3RyaW5nLCBsZW5ndGggMS0xMDAwMCBjaGFyYWN0ZXJzLlxuICAgKiBVc2VzIHZhbGlkYXRpb25TZXJ2aWNlIGZvciBjb250ZW50IHNlY3VyaXR5LlxuICAgKlxuICAgKiBBcmNoaXRlY3R1cmU6IElucHV0IGlzIGFscmVhZHkgbm9ybWFsaXplZCBieSBHZW5lcmljRWxlbWVudFZhbGlkYXRvci5cbiAgICogVGhpcyB2YWxpZGF0b3IgY2hlY2tzIGJ1c2luZXNzIHJ1bGVzIChsZW5ndGgsIHBhdHRlcm5zKSBvbiBub3JtYWxpemVkIGRhdGEuXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlU3lzdGVtUHJvbXB0KHN5c3RlbVByb21wdDogdW5rbm93bik6IFZhbGlkYXRpb25SZXN1bHQge1xuICAgIC8vIFR5cGUgY2hlY2sgbXVzdCBoYXBwZW4gZmlyc3RcbiAgICBpZiAodHlwZW9mIHN5c3RlbVByb21wdCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBWYWxpZGF0b3JIZWxwZXJzLmZhaWwoWydTeXN0ZW0gcHJvbXB0IG11c3QgYmUgYSBzdHJpbmcnXSk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbGVuZ3RoIGFuZCBwYXR0ZXJucyAoZGF0YSBpcyBhbHJlYWR5IG5vcm1hbGl6ZWQpXG4gICAgY29uc3QgY29udGVudFJlc3VsdCA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UudmFsaWRhdGVDb250ZW50KHN5c3RlbVByb21wdCwge1xuICAgICAgbWF4TGVuZ3RoOiBTWVNURU1fUFJPTVBUX01BWF9MRU5HVEhcbiAgICB9KTtcblxuICAgIGlmICghY29udGVudFJlc3VsdC5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gVmFsaWRhdG9ySGVscGVycy5mYWlsKFxuICAgICAgICBjb250ZW50UmVzdWx0LmRldGVjdGVkUGF0dGVybnMgfHwgWydTeXN0ZW0gcHJvbXB0IGZhaWxlZCBjb250ZW50IHZhbGlkYXRpb24nXVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoc3lzdGVtUHJvbXB0Lmxlbmd0aCA8IFNZU1RFTV9QUk9NUFRfTUlOX0xFTkdUSCkge1xuICAgICAgcmV0dXJuIFZhbGlkYXRvckhlbHBlcnMuZmFpbChbJ1N5c3RlbSBwcm9tcHQgY2Fubm90IGJlIGVtcHR5J10pO1xuICAgIH1cblxuICAgIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmIChzeXN0ZW1Qcm9tcHQubGVuZ3RoID4gNTAwMCkge1xuICAgICAgd2FybmluZ3MucHVzaCgnU3lzdGVtIHByb21wdCBpcyB2ZXJ5IGxvbmcgLSBjb25zaWRlciBrZWVwaW5nIGl0IGNvbmNpc2UgZm9yIGJldHRlciBMTE0gcGVyZm9ybWFuY2UnKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXNWYWxpZDogdHJ1ZSxcbiAgICAgIGVycm9yczogW10sXG4gICAgICB3YXJuaW5nc1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgVjIuMCBhdXRvbm9teSBjb25maWd1cmF0aW9uIChPUFRJT05BTClcbiAgICpcbiAgICogRmllbGRzOlxuICAgKiAtIHJpc2tUb2xlcmFuY2UgKGVudW0pXG4gICAqIC0gbWF4QXV0b25vbW91c1N0ZXBzIChwb3NpdGl2ZSBpbnRlZ2VyLCAwID0gdW5saW1pdGVkKVxuICAgKiAtIHJlcXVpcmVzQXBwcm92YWwgKHN0cmluZ1tdIGdsb2IgcGF0dGVybnMpXG4gICAqIC0gYXV0b0FwcHJvdmUgKHN0cmluZ1tdIGdsb2IgcGF0dGVybnMpXG4gICAqXG4gICAqIEFsc28gZGV0ZWN0cyBjb25mbGljdHMgYmV0d2VlbiByZXF1aXJlc0FwcHJvdmFsIGFuZCBhdXRvQXBwcm92ZS5cbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVBdXRvbm9teShhdXRvbm9teTogdW5rbm93bik6IFZhbGlkYXRpb25SZXN1bHQge1xuICAgIGlmICghYXV0b25vbXkgfHwgdHlwZW9mIGF1dG9ub215ICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGF1dG9ub215KSkge1xuICAgICAgcmV0dXJuIFZhbGlkYXRvckhlbHBlcnMuZmFpbChbJ0F1dG9ub215IG11c3QgYmUgYW4gb2JqZWN0J10pO1xuICAgIH1cblxuICAgIGNvbnN0IGF1dG9ub215T2JqID0gYXV0b25vbXkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gVmFsaWRhdGUgcmlza1RvbGVyYW5jZSAob3B0aW9uYWwpXG4gICAgaWYgKGF1dG9ub215T2JqLnJpc2tUb2xlcmFuY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgcmlza1Jlc3VsdCA9IHRoaXMudmFsaWRhdGVSaXNrVG9sZXJhbmNlKGF1dG9ub215T2JqLnJpc2tUb2xlcmFuY2UpO1xuICAgICAgaWYgKCFyaXNrUmVzdWx0LmlzVmFsaWQpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goLi4ucmlza1Jlc3VsdC5lcnJvcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIG1heEF1dG9ub21vdXNTdGVwcyAob3B0aW9uYWwpXG4gICAgaWYgKGF1dG9ub215T2JqLm1heEF1dG9ub21vdXNTdGVwcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIGF1dG9ub215T2JqLm1heEF1dG9ub21vdXNTdGVwcyAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goJ0F1dG9ub215Lm1heEF1dG9ub21vdXNTdGVwcyBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gICAgICB9IGVsc2UgaWYgKGF1dG9ub215T2JqLm1heEF1dG9ub21vdXNTdGVwcyA8IDApIHtcbiAgICAgICAgZXJyb3JzLnB1c2goJ0F1dG9ub215Lm1heEF1dG9ub21vdXNTdGVwcyBtdXN0IGJlIG5vbi1uZWdhdGl2ZSAoMCA9IHVubGltaXRlZCknKTtcbiAgICAgIH0gZWxzZSBpZiAoIU51bWJlci5pc0ludGVnZXIoYXV0b25vbXlPYmoubWF4QXV0b25vbW91c1N0ZXBzKSkge1xuICAgICAgICBlcnJvcnMucHVzaCgnQXV0b25vbXkubWF4QXV0b25vbW91c1N0ZXBzIG11c3QgYmUgYW4gaW50ZWdlcicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHJlcXVpcmVzQXBwcm92YWwgKG9wdGlvbmFsKSAtIGRhdGEgaXMgYWxyZWFkeSBub3JtYWxpemVkXG4gICAgY29uc3QgcmVxdWlyZXNBcHByb3ZhbFNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGlmIChhdXRvbm9teU9iai5yZXF1aXJlc0FwcHJvdmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhdXRvbm9teU9iai5yZXF1aXJlc0FwcHJvdmFsKSkge1xuICAgICAgICBlcnJvcnMucHVzaCgnQXV0b25vbXkucmVxdWlyZXNBcHByb3ZhbCBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXV0b25vbXlPYmoucmVxdWlyZXNBcHByb3ZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHBhdHRlcm4gPSBhdXRvbm9teU9iai5yZXF1aXJlc0FwcHJvdmFsW2ldO1xuICAgICAgICAgIGlmICh0eXBlb2YgcGF0dGVybiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKGBBdXRvbm9teS5yZXF1aXJlc0FwcHJvdmFsWyR7aX1dIG11c3QgYmUgYSBzdHJpbmdgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY29udGVudFJlc3VsdCA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UudmFsaWRhdGVDb250ZW50KHBhdHRlcm4sIHtcbiAgICAgICAgICAgICAgbWF4TGVuZ3RoOiBBR0VOVF9MSU1JVFMuTUFYX0dPQUxfTEVOR1RIXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghY29udGVudFJlc3VsdC5pc1ZhbGlkKSB7XG4gICAgICAgICAgICAgIGVycm9ycy5wdXNoKGBBdXRvbm9teS5yZXF1aXJlc0FwcHJvdmFsWyR7aX1dIGZhaWxlZCB2YWxpZGF0aW9uOiAke2NvbnRlbnRSZXN1bHQuZGV0ZWN0ZWRQYXR0ZXJucz8uam9pbignLCAnKSB8fCAnaW52YWxpZCBjb250ZW50J31gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlcXVpcmVzQXBwcm92YWxTZXQuYWRkKHBhdHRlcm4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGF1dG9BcHByb3ZlIChvcHRpb25hbCkgLSBkYXRhIGlzIGFscmVhZHkgbm9ybWFsaXplZFxuICAgIGNvbnN0IGF1dG9BcHByb3ZlU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgaWYgKGF1dG9ub215T2JqLmF1dG9BcHByb3ZlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhdXRvbm9teU9iai5hdXRvQXBwcm92ZSkpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goJ0F1dG9ub215LmF1dG9BcHByb3ZlIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdXRvbm9teU9iai5hdXRvQXBwcm92ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHBhdHRlcm4gPSBhdXRvbm9teU9iai5hdXRvQXBwcm92ZVtpXTtcbiAgICAgICAgICBpZiAodHlwZW9mIHBhdHRlcm4gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChgQXV0b25vbXkuYXV0b0FwcHJvdmVbJHtpfV0gbXVzdCBiZSBhIHN0cmluZ2ApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50UmVzdWx0ID0gdGhpcy52YWxpZGF0aW9uU2VydmljZS52YWxpZGF0ZUNvbnRlbnQocGF0dGVybiwge1xuICAgICAgICAgICAgICBtYXhMZW5ndGg6IEFHRU5UX0xJTUlUUy5NQVhfR09BTF9MRU5HVEhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFjb250ZW50UmVzdWx0LmlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgZXJyb3JzLnB1c2goYEF1dG9ub215LmF1dG9BcHByb3ZlWyR7aX1dIGZhaWxlZCB2YWxpZGF0aW9uOiAke2NvbnRlbnRSZXN1bHQuZGV0ZWN0ZWRQYXR0ZXJucz8uam9pbignLCAnKSB8fCAnaW52YWxpZCBjb250ZW50J31gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGF1dG9BcHByb3ZlU2V0LmFkZChwYXR0ZXJuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEZXRlY3QgY29uZmxpY3RzIGJldHdlZW4gcmVxdWlyZXNBcHByb3ZhbCBhbmQgYXV0b0FwcHJvdmUgKGluY2x1ZGluZyBnbG9iIHBhdHRlcm4gY29uZmxpY3RzKVxuICAgIGlmIChyZXF1aXJlc0FwcHJvdmFsU2V0LnNpemUgPiAwICYmIGF1dG9BcHByb3ZlU2V0LnNpemUgPiAwKSB7XG4gICAgICBjb25zdCBjb25mbGljdE1lc3NhZ2VzID0gZmluZFBhdHRlcm5Db25mbGljdHMoXG4gICAgICAgIEFycmF5LmZyb20ocmVxdWlyZXNBcHByb3ZhbFNldCksXG4gICAgICAgIEFycmF5LmZyb20oYXV0b0FwcHJvdmVTZXQpXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBjb25mbGljdCBvZiBjb25mbGljdE1lc3NhZ2VzKSB7XG4gICAgICAgIHdhcm5pbmdzLnB1c2goXG4gICAgICAgICAgYCR7Y29uZmxpY3R9LiByZXF1aXJlc0FwcHJvdmFsIHRha2VzIHByZWNlZGVuY2UuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOiBlcnJvcnMubGVuZ3RoID09PSAwLFxuICAgICAgZXJyb3JzLFxuICAgICAgd2FybmluZ3NcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIFYyLjEgcmVzaWxpZW5jZSBjb25maWd1cmF0aW9uIChPUFRJT05BTCwgbmVzdGVkIHVuZGVyIGF1dG9ub215KVxuICAgKlxuICAgKiBGaWVsZHM6XG4gICAqIC0gb25TdGVwTGltaXRSZWFjaGVkICgncGF1c2UnIHwgJ2NvbnRpbnVlJyB8ICdyZXN0YXJ0JylcbiAgICogLSBvbkV4ZWN1dGlvbkZhaWx1cmUgKCdwYXVzZScgfCAncmV0cnknIHwgJ3Jlc3RhcnQtZnJlc2gnKVxuICAgKiAtIG1heFJldHJpZXMgKG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCBkZWZhdWx0IDMpXG4gICAqIC0gbWF4Q29udGludWF0aW9ucyAobm9uLW5lZ2F0aXZlIGludGVnZXIsIDAgPSB1bmxpbWl0ZWQsIGRlZmF1bHQgMTApXG4gICAqIC0gcmV0cnlCYWNrb2ZmICgnbm9uZScgfCAnbGluZWFyJyB8ICdleHBvbmVudGlhbCcpXG4gICAqIC0gcHJlc2VydmVTdGF0ZSAoYm9vbGVhbilcbiAgICpcbiAgICogQHNpbmNlIHYyLjEuMCAtIEFnZW50IEV4ZWN1dGlvbiBSZXNpbGllbmNlIChJc3N1ZSAjNTI2KVxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVJlc2lsaWVuY2UocmVzaWxpZW5jZTogdW5rbm93bik6IFZhbGlkYXRpb25SZXN1bHQge1xuICAgIGlmICghcmVzaWxpZW5jZSB8fCB0eXBlb2YgcmVzaWxpZW5jZSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShyZXNpbGllbmNlKSkge1xuICAgICAgcmV0dXJuIFZhbGlkYXRvckhlbHBlcnMuZmFpbChbJ1Jlc2lsaWVuY2UgbXVzdCBiZSBhbiBvYmplY3QnXSk7XG4gICAgfVxuXG4gICAgY29uc3Qgb2JqID0gcmVzaWxpZW5jZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBJc3N1ZSAjNzMwOiBVc2Ugc2hhcmVkIGNvbnN0YW50cyBmcm9tIGNvbnN0YW50cy50cyAoc2luZ2xlIHNvdXJjZSBvZiB0cnV0aClcbiAgICBpZiAob2JqLm9uU3RlcExpbWl0UmVhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIWlzT25lT2Yob2JqLm9uU3RlcExpbWl0UmVhY2hlZCwgU1RFUF9MSU1JVF9BQ1RJT05TKSkge1xuICAgICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgICBgUmVzaWxpZW5jZS5vblN0ZXBMaW1pdFJlYWNoZWQgbXVzdCBiZSBvbmUgb2Y6ICR7U1RFUF9MSU1JVF9BQ1RJT05TLmpvaW4oJywgJyl9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvYmoub25FeGVjdXRpb25GYWlsdXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghaXNPbmVPZihvYmoub25FeGVjdXRpb25GYWlsdXJlLCBFWEVDVVRJT05fRkFJTFVSRV9BQ1RJT05TKSkge1xuICAgICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgICBgUmVzaWxpZW5jZS5vbkV4ZWN1dGlvbkZhaWx1cmUgbXVzdCBiZSBvbmUgb2Y6ICR7RVhFQ1VUSU9OX0ZBSUxVUkVfQUNUSU9OUy5qb2luKCcsICcpfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob2JqLm1heFJldHJpZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBvYmoubWF4UmV0cmllcyAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0ludGVnZXIob2JqLm1heFJldHJpZXMpIHx8IG9iai5tYXhSZXRyaWVzIDwgMCkge1xuICAgICAgICBlcnJvcnMucHVzaCgnUmVzaWxpZW5jZS5tYXhSZXRyaWVzIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlcicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvYmoubWF4Q29udGludWF0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIG9iai5tYXhDb250aW51YXRpb25zICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzSW50ZWdlcihvYmoubWF4Q29udGludWF0aW9ucykgfHwgb2JqLm1heENvbnRpbnVhdGlvbnMgPCAwKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCdSZXNpbGllbmNlLm1heENvbnRpbnVhdGlvbnMgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICB9IGVsc2UgaWYgKG9iai5tYXhDb250aW51YXRpb25zID09PSAwKSB7XG4gICAgICAgIHdhcm5pbmdzLnB1c2goJ1Jlc2lsaWVuY2UubWF4Q29udGludWF0aW9ucz0wIG1lYW5zIHVubGltaXRlZCBhdXRvLWNvbnRpbnVhdGlvbnMuIENvbnNpZGVyIHNldHRpbmcgYSBzYWZldHkgbGltaXQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9iai5yZXRyeUJhY2tvZmYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFpc09uZU9mKG9iai5yZXRyeUJhY2tvZmYsIEJBQ0tPRkZfU1RSQVRFR0lFUykpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgICAgYFJlc2lsaWVuY2UucmV0cnlCYWNrb2ZmIG11c3QgYmUgb25lIG9mOiAke0JBQ0tPRkZfU1RSQVRFR0lFUy5qb2luKCcsICcpfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob2JqLnByZXNlcnZlU3RhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBvYmoucHJlc2VydmVTdGF0ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCdSZXNpbGllbmNlLnByZXNlcnZlU3RhdGUgbXVzdCBiZSBhIGJvb2xlYW4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXNWYWxpZDogZXJyb3JzLmxlbmd0aCA9PT0gMCxcbiAgICAgIGVycm9ycyxcbiAgICAgIHdhcm5pbmdzXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBWMS54IGRlY2lzaW9uRnJhbWV3b3JrIChERVBSRUNBVEVEKVxuICAgKiBEYXRhIGlzIGFscmVhZHkgbm9ybWFsaXplZCBieSBHZW5lcmljRWxlbWVudFZhbGlkYXRvclxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZURlY2lzaW9uRnJhbWV3b3JrKGZyYW1ld29yazogdW5rbm93bik6IFZhbGlkYXRpb25SZXN1bHQge1xuICAgIGlmICh0eXBlb2YgZnJhbWV3b3JrICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIFZhbGlkYXRvckhlbHBlcnMuZmFpbChbJ0RlY2lzaW9uIGZyYW1ld29yayBtdXN0IGJlIGEgc3RyaW5nJ10pO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGxlbmd0aCBhbmQgcGF0dGVybnMgKGRhdGEgaXMgYWxyZWFkeSBub3JtYWxpemVkKVxuICAgIGNvbnN0IGNvbnRlbnRSZXN1bHQgPSB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnZhbGlkYXRlQ29udGVudChmcmFtZXdvcmssIHtcbiAgICAgIG1heExlbmd0aDogQUdFTlRfTElNSVRTLk1BWF9TUEVDSUFMSVpBVElPTl9MRU5HVEhcbiAgICB9KTtcbiAgICBpZiAoIWNvbnRlbnRSZXN1bHQuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIFZhbGlkYXRvckhlbHBlcnMuZmFpbChbXG4gICAgICAgIGBEZWNpc2lvbiBmcmFtZXdvcmsgZmFpbGVkIHZhbGlkYXRpb246ICR7Y29udGVudFJlc3VsdC5kZXRlY3RlZFBhdHRlcm5zPy5qb2luKCcsICcpIHx8ICdpbnZhbGlkIGNvbnRlbnQnfWBcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIGlmICghREVDSVNJT05fRlJBTUVXT1JLUy5pbmNsdWRlcyhmcmFtZXdvcmsgYXMgRGVjaXNpb25GcmFtZXdvcmspKSB7XG4gICAgICByZXR1cm4gVmFsaWRhdG9ySGVscGVycy5mYWlsKFtcbiAgICAgICAgYEludmFsaWQgZGVjaXNpb24gZnJhbWV3b3JrICcke2ZyYW1ld29ya30nLiBWYWxpZCBvcHRpb25zOiAke0RFQ0lTSU9OX0ZSQU1FV09SS1Muam9pbignLCAnKX1gXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gVmFsaWRhdG9ySGVscGVycy5wYXNzKCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgVjEueCBzcGVjaWFsaXphdGlvbnMgKERFUFJFQ0FURUQpXG4gICAqIERhdGEgaXMgYWxyZWFkeSBub3JtYWxpemVkIGJ5IEdlbmVyaWNFbGVtZW50VmFsaWRhdG9yXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlU3BlY2lhbGl6YXRpb25zKHNwZWNpYWxpemF0aW9uczogdW5rbm93bik6IFZhbGlkYXRpb25SZXN1bHQge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShzcGVjaWFsaXphdGlvbnMpKSB7XG4gICAgICByZXR1cm4gVmFsaWRhdG9ySGVscGVycy5mYWlsKFsnU3BlY2lhbGl6YXRpb25zIG11c3QgYmUgYW4gYXJyYXknXSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGVjaWFsaXphdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0eXBlb2Ygc3BlY2lhbGl6YXRpb25zW2ldICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gVmFsaWRhdG9ySGVscGVycy5mYWlsKFtgU3BlY2lhbGl6YXRpb24gYXQgaW5kZXggJHtpfSBtdXN0IGJlIGEgc3RyaW5nYF0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzcGVjID0gc3BlY2lhbGl6YXRpb25zW2ldIGFzIHN0cmluZztcblxuICAgICAgLy8gVmFsaWRhdGUgbGVuZ3RoIGFuZCBwYXR0ZXJucyAoZGF0YSBpcyBhbHJlYWR5IG5vcm1hbGl6ZWQpXG4gICAgICBjb25zdCBjb250ZW50UmVzdWx0ID0gdGhpcy52YWxpZGF0aW9uU2VydmljZS52YWxpZGF0ZUNvbnRlbnQoc3BlYywge1xuICAgICAgICBtYXhMZW5ndGg6IEFHRU5UX0xJTUlUUy5NQVhfU1BFQ0lBTElaQVRJT05fTEVOR1RIXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFjb250ZW50UmVzdWx0LmlzVmFsaWQpIHtcbiAgICAgICAgcmV0dXJuIFZhbGlkYXRvckhlbHBlcnMuZmFpbChbXG4gICAgICAgICAgYFNwZWNpYWxpemF0aW9uIGF0IGluZGV4ICR7aX0gZmFpbGVkIHZhbGlkYXRpb246ICR7Y29udGVudFJlc3VsdC5kZXRlY3RlZFBhdHRlcm5zPy5qb2luKCcsICcpIHx8ICdpbnZhbGlkIGNvbnRlbnQnfWBcbiAgICAgICAgXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFZhbGlkYXRvckhlbHBlcnMucGFzcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHJpc2tUb2xlcmFuY2UgZW51bVxuICAgKiBVc2VkIGluIGJvdGggVjEueCAoZGVwcmVjYXRlZCkgYW5kIFYyLjAgYXV0b25vbXkgY29uZmlnXG4gICAqIERhdGEgaXMgYWxyZWFkeSBub3JtYWxpemVkIGJ5IEdlbmVyaWNFbGVtZW50VmFsaWRhdG9yXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlUmlza1RvbGVyYW5jZShyaXNrVG9sZXJhbmNlOiB1bmtub3duKTogVmFsaWRhdGlvblJlc3VsdCB7XG4gICAgaWYgKHR5cGVvZiByaXNrVG9sZXJhbmNlICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIFZhbGlkYXRvckhlbHBlcnMuZmFpbChbJ1Jpc2sgdG9sZXJhbmNlIG11c3QgYmUgYSBzdHJpbmcnXSk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbGVuZ3RoIGFuZCBwYXR0ZXJucyAoZGF0YSBpcyBhbHJlYWR5IG5vcm1hbGl6ZWQpXG4gICAgY29uc3QgY29udGVudFJlc3VsdCA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UudmFsaWRhdGVDb250ZW50KHJpc2tUb2xlcmFuY2UsIHtcbiAgICAgIG1heExlbmd0aDogQUdFTlRfTElNSVRTLk1BWF9TUEVDSUFMSVpBVElPTl9MRU5HVEhcbiAgICB9KTtcbiAgICBpZiAoIWNvbnRlbnRSZXN1bHQuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIFZhbGlkYXRvckhlbHBlcnMuZmFpbChbXG4gICAgICAgIGBSaXNrIHRvbGVyYW5jZSBmYWlsZWQgdmFsaWRhdGlvbjogJHtjb250ZW50UmVzdWx0LmRldGVjdGVkUGF0dGVybnM/LmpvaW4oJywgJykgfHwgJ2ludmFsaWQgY29udGVudCd9YFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgaWYgKCFSSVNLX1RPTEVSQU5DRV9MRVZFTFMuaW5jbHVkZXMocmlza1RvbGVyYW5jZSBhcyBSaXNrVG9sZXJhbmNlKSkge1xuICAgICAgcmV0dXJuIFZhbGlkYXRvckhlbHBlcnMuZmFpbChbXG4gICAgICAgIGBJbnZhbGlkIHJpc2sgdG9sZXJhbmNlICcke3Jpc2tUb2xlcmFuY2V9Jy4gVmFsaWQgb3B0aW9uczogJHtSSVNLX1RPTEVSQU5DRV9MRVZFTFMuam9pbignLCAnKX1gXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gVmFsaWRhdG9ySGVscGVycy5wYXNzKCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgVjEueCBtYXhDb25jdXJyZW50R29hbHMgKERFUFJFQ0FURUQpXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlTWF4Q29uY3VycmVudEdvYWxzKG1heENvbmN1cnJlbnRHb2FsczogdW5rbm93bik6IFZhbGlkYXRpb25SZXN1bHQge1xuICAgIGlmICh0eXBlb2YgbWF4Q29uY3VycmVudEdvYWxzICE9PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIFZhbGlkYXRvckhlbHBlcnMuZmFpbChbJ01heCBjb25jdXJyZW50IGdvYWxzIG11c3QgYmUgYSBudW1iZXInXSk7XG4gICAgfVxuXG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heENvbmN1cnJlbnRHb2FscykpIHtcbiAgICAgIHJldHVybiBWYWxpZGF0b3JIZWxwZXJzLmZhaWwoWydNYXggY29uY3VycmVudCBnb2FscyBtdXN0IGJlIGFuIGludGVnZXInXSk7XG4gICAgfVxuXG4gICAgaWYgKG1heENvbmN1cnJlbnRHb2FscyA8IDEgfHwgbWF4Q29uY3VycmVudEdvYWxzID4gMTAwKSB7XG4gICAgICByZXR1cm4gVmFsaWRhdG9ySGVscGVycy5mYWlsKFsnTWF4IGNvbmN1cnJlbnQgZ29hbHMgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDEwMCddKTtcbiAgICB9XG5cbiAgICByZXR1cm4gVmFsaWRhdG9ySGVscGVycy5wYXNzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYWdlbnQgYXBwZWFycyB0byBiZSBWMS54IGZvcm1hdFxuICAgKiBWMSBhZ2VudHMgaGF2ZSBkZWNpc2lvbkZyYW1ld29yayBvciBzcGVjaWFsaXphdGlvbnMgYnV0IG5vIGdvYWwgY29uZmlnXG4gICAqL1xuICBwcml2YXRlIGlzVjFBZ2VudChyZWNvcmQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGFzVjFGaWVsZHMgPSAoXG4gICAgICByZWNvcmQuZGVjaXNpb25GcmFtZXdvcmsgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgcmVjb3JkLnNwZWNpYWxpemF0aW9ucyAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICByZWNvcmQucnVsZUVuZ2luZUNvbmZpZyAhPT0gdW5kZWZpbmVkXG4gICAgKTtcblxuICAgIGNvbnN0IGhhc1YyR29hbCA9IHJlY29yZC5nb2FsICE9PSB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gaGFzVjFGaWVsZHMgJiYgIWhhc1YyR29hbDtcbiAgfVxufVxuIl19
|
|
@@ -56,6 +56,7 @@ export declare class GenericElementValidator implements ElementValidator {
|
|
|
56
56
|
* Validate element description
|
|
57
57
|
*/
|
|
58
58
|
protected validateDescription(description: unknown): ValidationResult;
|
|
59
|
+
private sanitizeDescriptionInput;
|
|
59
60
|
/**
|
|
60
61
|
* Validate element content
|
|
61
62
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenericElementValidator.d.ts","sourceRoot":"","sources":["../../../src/services/validation/GenericElementValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"GenericElementValidator.d.ts","sourceRoot":"","sources":["../../../src/services/validation/GenericElementValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAkD,MAAM,wBAAwB,CAAC;AAC3G,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,wBAAwB,EACxB,yBAAyB,EAE1B,MAAM,uBAAuB,CAAC;AAE/B;;GAEG;AACH,qBAAa,uBAAwB,YAAW,gBAAgB;IAK5D,SAAS,CAAC,iBAAiB,EAAE,iBAAiB;IAC9C,SAAS,CAAC,wBAAwB,EAAE,wBAAwB;IAC5D,SAAS,CAAC,eAAe,EAAE,eAAe;IAN5C,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;gBAGhC,WAAW,EAAE,WAAW,EACd,iBAAiB,EAAE,iBAAiB,EACpC,wBAAwB,EAAE,wBAAwB,EAClD,eAAe,EAAE,eAAe;IAK5C;;;;;;;;OAQG;IACG,cAAc,CAClB,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,gBAAgB,CAAC;IA6F5B;;;;;;OAMG;IACG,YAAY,CAChB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,gBAAgB,CAAC;IAqF5B;;OAEG;IACG,gBAAgB,CACpB,QAAQ,EAAE,OAAO,EACjB,OAAO,CAAC,EAAE,yBAAyB,GAClC,OAAO,CAAC,gBAAgB,CAAC;IAsD5B;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAgFjE;;OAEG;IACH,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB;IA2BvD;;OAEG;IACH,SAAS,CAAC,mBAAmB,CAAC,WAAW,EAAE,OAAO,GAAG,gBAAgB;IAkCrE,OAAO,CAAC,wBAAwB;IAQhC;;OAEG;cACa,eAAe,CAC7B,OAAO,EAAE,OAAO,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,CAAC;IAwC5B;;OAEG;IACH,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,gBAAgB;IA2BpF;;OAEG;IACH,SAAS,CAAC,qBAAqB,CAC7B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,OAAO,EAAE,MAAM,GACd,MAAM;IAgDT;;OAEG;IACH,SAAS,CAAC,eAAe,IAAI,MAAM;CAWpC"}
|