@nahisaho/musubix-security 1.8.0 → 1.8.1
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/README.md +27 -0
- package/dist/analyzers/ai/index.d.ts +6 -0
- package/dist/analyzers/ai/index.d.ts.map +1 -0
- package/dist/analyzers/ai/index.js +6 -0
- package/dist/analyzers/ai/index.js.map +1 -0
- package/dist/analyzers/ai/prompt-injection-detector.d.ts +152 -0
- package/dist/analyzers/ai/prompt-injection-detector.d.ts.map +1 -0
- package/dist/analyzers/ai/prompt-injection-detector.js +468 -0
- package/dist/analyzers/ai/prompt-injection-detector.js.map +1 -0
- package/dist/analyzers/api/api-security-analyzer.d.ts +263 -0
- package/dist/analyzers/api/api-security-analyzer.d.ts.map +1 -0
- package/dist/analyzers/api/api-security-analyzer.js +581 -0
- package/dist/analyzers/api/api-security-analyzer.js.map +1 -0
- package/dist/analyzers/compliance/compliance-checker.d.ts +201 -0
- package/dist/analyzers/compliance/compliance-checker.d.ts.map +1 -0
- package/dist/analyzers/compliance/compliance-checker.js +772 -0
- package/dist/analyzers/compliance/compliance-checker.js.map +1 -0
- package/dist/analyzers/container/image-scanner.d.ts +163 -0
- package/dist/analyzers/container/image-scanner.d.ts.map +1 -0
- package/dist/analyzers/container/image-scanner.js +459 -0
- package/dist/analyzers/container/image-scanner.js.map +1 -0
- package/dist/analyzers/container/index.d.ts +6 -0
- package/dist/analyzers/container/index.d.ts.map +1 -0
- package/dist/analyzers/container/index.js +6 -0
- package/dist/analyzers/container/index.js.map +1 -0
- package/dist/analyzers/dashboard/security-dashboard.d.ts +286 -0
- package/dist/analyzers/dashboard/security-dashboard.d.ts.map +1 -0
- package/dist/analyzers/dashboard/security-dashboard.js +796 -0
- package/dist/analyzers/dashboard/security-dashboard.js.map +1 -0
- package/dist/analyzers/iac/iac-checker.d.ts +124 -0
- package/dist/analyzers/iac/iac-checker.d.ts.map +1 -0
- package/dist/analyzers/iac/iac-checker.js +755 -0
- package/dist/analyzers/iac/iac-checker.js.map +1 -0
- package/dist/analyzers/iac/index.d.ts +6 -0
- package/dist/analyzers/iac/index.d.ts.map +1 -0
- package/dist/analyzers/iac/index.js +6 -0
- package/dist/analyzers/iac/index.js.map +1 -0
- package/dist/analyzers/index.d.ts +9 -0
- package/dist/analyzers/index.d.ts.map +1 -0
- package/dist/analyzers/index.js +13 -0
- package/dist/analyzers/index.js.map +1 -0
- package/dist/analyzers/monitor/realtime-monitor.d.ts +216 -0
- package/dist/analyzers/monitor/realtime-monitor.d.ts.map +1 -0
- package/dist/analyzers/monitor/realtime-monitor.js +601 -0
- package/dist/analyzers/monitor/realtime-monitor.js.map +1 -0
- package/dist/analyzers/sast/index.d.ts +7 -0
- package/dist/analyzers/sast/index.d.ts.map +1 -0
- package/dist/analyzers/sast/index.js +7 -0
- package/dist/analyzers/sast/index.js.map +1 -0
- package/dist/analyzers/sast/interprocedural-analyzer.d.ts +276 -0
- package/dist/analyzers/sast/interprocedural-analyzer.d.ts.map +1 -0
- package/dist/analyzers/sast/interprocedural-analyzer.js +635 -0
- package/dist/analyzers/sast/interprocedural-analyzer.js.map +1 -0
- package/dist/analyzers/sast/zero-day-detector.d.ts +183 -0
- package/dist/analyzers/sast/zero-day-detector.d.ts.map +1 -0
- package/dist/analyzers/sast/zero-day-detector.js +593 -0
- package/dist/analyzers/sast/zero-day-detector.js.map +1 -0
- package/dist/analyzers/sca/dependency-scanner.d.ts +275 -0
- package/dist/analyzers/sca/dependency-scanner.d.ts.map +1 -0
- package/dist/analyzers/sca/dependency-scanner.js +642 -0
- package/dist/analyzers/sca/dependency-scanner.js.map +1 -0
- package/dist/core/index.d.ts +8 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +10 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/pipeline-manager.d.ts +105 -0
- package/dist/core/pipeline-manager.d.ts.map +1 -0
- package/dist/core/pipeline-manager.js +449 -0
- package/dist/core/pipeline-manager.js.map +1 -0
- package/dist/core/result-aggregator.d.ts +96 -0
- package/dist/core/result-aggregator.d.ts.map +1 -0
- package/dist/core/result-aggregator.js +462 -0
- package/dist/core/result-aggregator.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +68 -0
- package/dist/index.js.map +1 -1
- package/dist/integrations/ci-integration.d.ts +227 -0
- package/dist/integrations/ci-integration.d.ts.map +1 -0
- package/dist/integrations/ci-integration.js +472 -0
- package/dist/integrations/ci-integration.js.map +1 -0
- package/dist/integrations/git-hooks.d.ts +155 -0
- package/dist/integrations/git-hooks.d.ts.map +1 -0
- package/dist/integrations/git-hooks.js +425 -0
- package/dist/integrations/git-hooks.js.map +1 -0
- package/dist/integrations/index.d.ts +9 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +9 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/report-aggregator.d.ts +250 -0
- package/dist/integrations/report-aggregator.d.ts.map +1 -0
- package/dist/integrations/report-aggregator.js +488 -0
- package/dist/integrations/report-aggregator.js.map +1 -0
- package/dist/integrations/vscode-integration.d.ts +245 -0
- package/dist/integrations/vscode-integration.d.ts.map +1 -0
- package/dist/integrations/vscode-integration.js +449 -0
- package/dist/integrations/vscode-integration.js.map +1 -0
- package/dist/intelligence/attack-pattern-matcher.d.ts +217 -0
- package/dist/intelligence/attack-pattern-matcher.d.ts.map +1 -0
- package/dist/intelligence/attack-pattern-matcher.js +887 -0
- package/dist/intelligence/attack-pattern-matcher.js.map +1 -0
- package/dist/intelligence/index.d.ts +12 -0
- package/dist/intelligence/index.d.ts.map +1 -0
- package/dist/intelligence/index.js +18 -0
- package/dist/intelligence/index.js.map +1 -0
- package/dist/intelligence/neuro-symbolic-core.d.ts +88 -0
- package/dist/intelligence/neuro-symbolic-core.d.ts.map +1 -0
- package/dist/intelligence/neuro-symbolic-core.js +403 -0
- package/dist/intelligence/neuro-symbolic-core.js.map +1 -0
- package/dist/intelligence/predictive-analyzer.d.ts +317 -0
- package/dist/intelligence/predictive-analyzer.d.ts.map +1 -0
- package/dist/intelligence/predictive-analyzer.js +714 -0
- package/dist/intelligence/predictive-analyzer.js.map +1 -0
- package/dist/intelligence/risk-scorer.d.ts +333 -0
- package/dist/intelligence/risk-scorer.d.ts.map +1 -0
- package/dist/intelligence/risk-scorer.js +824 -0
- package/dist/intelligence/risk-scorer.js.map +1 -0
- package/dist/intelligence/security-analytics.d.ts +349 -0
- package/dist/intelligence/security-analytics.d.ts.map +1 -0
- package/dist/intelligence/security-analytics.js +813 -0
- package/dist/intelligence/security-analytics.js.map +1 -0
- package/dist/intelligence/threat-intelligence.d.ts +288 -0
- package/dist/intelligence/threat-intelligence.d.ts.map +1 -0
- package/dist/intelligence/threat-intelligence.js +639 -0
- package/dist/intelligence/threat-intelligence.js.map +1 -0
- package/dist/policy/index.d.ts +6 -0
- package/dist/policy/index.d.ts.map +1 -0
- package/dist/policy/index.js +6 -0
- package/dist/policy/index.js.map +1 -0
- package/dist/policy/policy-engine.d.ts +254 -0
- package/dist/policy/policy-engine.d.ts.map +1 -0
- package/dist/policy/policy-engine.js +651 -0
- package/dist/policy/policy-engine.js.map +1 -0
- package/dist/remediation/auto-fixer.d.ts +179 -0
- package/dist/remediation/auto-fixer.d.ts.map +1 -0
- package/dist/remediation/auto-fixer.js +540 -0
- package/dist/remediation/auto-fixer.js.map +1 -0
- package/dist/remediation/fix-validator.d.ts +195 -0
- package/dist/remediation/fix-validator.d.ts.map +1 -0
- package/dist/remediation/fix-validator.js +462 -0
- package/dist/remediation/fix-validator.js.map +1 -0
- package/dist/remediation/index.d.ts +10 -0
- package/dist/remediation/index.d.ts.map +1 -0
- package/dist/remediation/index.js +15 -0
- package/dist/remediation/index.js.map +1 -0
- package/dist/remediation/patch-generator.d.ts +203 -0
- package/dist/remediation/patch-generator.d.ts.map +1 -0
- package/dist/remediation/patch-generator.js +533 -0
- package/dist/remediation/patch-generator.js.map +1 -0
- package/dist/remediation/remediation-planner.d.ts +262 -0
- package/dist/remediation/remediation-planner.d.ts.map +1 -0
- package/dist/remediation/remediation-planner.js +531 -0
- package/dist/remediation/remediation-planner.js.map +1 -0
- package/dist/remediation/secure-code-transformer.d.ts +222 -0
- package/dist/remediation/secure-code-transformer.d.ts.map +1 -0
- package/dist/remediation/secure-code-transformer.js +625 -0
- package/dist/remediation/secure-code-transformer.js.map +1 -0
- package/dist/types/fix.d.ts +3 -1
- package/dist/types/fix.d.ts.map +1 -1
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/interprocedural.d.ts +203 -0
- package/dist/types/interprocedural.d.ts.map +1 -0
- package/dist/types/interprocedural.js +7 -0
- package/dist/types/interprocedural.js.map +1 -0
- package/dist/types/neuro-symbolic.d.ts +179 -0
- package/dist/types/neuro-symbolic.d.ts.map +1 -0
- package/dist/types/neuro-symbolic.js +7 -0
- package/dist/types/neuro-symbolic.js.map +1 -0
- package/dist/types/pipeline.d.ts +173 -0
- package/dist/types/pipeline.d.ts.map +1 -0
- package/dist/types/pipeline.js +7 -0
- package/dist/types/pipeline.js.map +1 -0
- package/dist/types/result.d.ts +134 -0
- package/dist/types/result.d.ts.map +1 -0
- package/dist/types/result.js +25 -0
- package/dist/types/result.js.map +1 -0
- package/dist/types/vulnerability.d.ts +2 -2
- package/dist/types/vulnerability.d.ts.map +1 -1
- package/dist/types/zero-day.d.ts +146 -0
- package/dist/types/zero-day.d.ts.map +1 -0
- package/dist/types/zero-day.js +7 -0
- package/dist/types/zero-day.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,593 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Zero-Day Vulnerability Detector using Knowledge Graph Pattern Deviation
|
|
3
|
+
* @module @nahisaho/musubix-security/analyzers/sast/zero-day-detector
|
|
4
|
+
* @trace DES-SEC2-SAST-003, REQ-SEC2-SAST-003
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Built-in suspicious patterns to detect
|
|
8
|
+
*/
|
|
9
|
+
const SUSPICIOUS_PATTERNS = [
|
|
10
|
+
{
|
|
11
|
+
id: 'ZD-001',
|
|
12
|
+
name: 'Unusual Prototype Access',
|
|
13
|
+
regex: /\[['"`]__proto__['"`]\]|\[['"`]constructor['"`]\]\.prototype/,
|
|
14
|
+
severity: 'high',
|
|
15
|
+
description: 'Unusual prototype chain manipulation detected',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
id: 'ZD-002',
|
|
19
|
+
name: 'Dynamic Function Construction',
|
|
20
|
+
regex: /new\s+Function\s*\([^)]*\+|Function\s*\(\s*[^)]*\+/,
|
|
21
|
+
severity: 'critical',
|
|
22
|
+
description: 'Dynamic function construction with concatenation',
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: 'ZD-003',
|
|
26
|
+
name: 'Unusual Serialization',
|
|
27
|
+
regex: /serialize.*deserialize|pickle\.loads|yaml\.load\s*\(/,
|
|
28
|
+
severity: 'high',
|
|
29
|
+
description: 'Potentially unsafe serialization/deserialization',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
id: 'ZD-004',
|
|
33
|
+
name: 'Reflection Abuse',
|
|
34
|
+
regex: /getattr\s*\([^)]*,\s*[^'"]|__getattribute__|__class__\.__bases__/,
|
|
35
|
+
severity: 'medium',
|
|
36
|
+
description: 'Dynamic attribute access with variable input',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
id: 'ZD-005',
|
|
40
|
+
name: 'Memory Manipulation',
|
|
41
|
+
regex: /ctypes\.memmove|struct\.pack.*\*|buffer\.write\s*\([^)]*\+/,
|
|
42
|
+
severity: 'critical',
|
|
43
|
+
description: 'Direct memory manipulation detected',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
id: 'ZD-006',
|
|
47
|
+
name: 'Unusual Process Creation',
|
|
48
|
+
regex: /subprocess\.Popen\s*\([^)]*shell\s*=\s*True|os\.system\s*\([^)]*\+/,
|
|
49
|
+
severity: 'high',
|
|
50
|
+
description: 'Dynamic command execution detected',
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
id: 'ZD-007',
|
|
54
|
+
name: 'Type Confusion Pattern',
|
|
55
|
+
regex: /type\s*\([^)]+\)\s*!=|isinstance.*not|__class__\s*=\s*/,
|
|
56
|
+
severity: 'medium',
|
|
57
|
+
description: 'Potential type confusion vulnerability',
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
id: 'ZD-008',
|
|
61
|
+
name: 'Race Condition Pattern',
|
|
62
|
+
regex: /if\s+os\.path\.exists.*open\(|check.*then.*use|toctou/i,
|
|
63
|
+
severity: 'medium',
|
|
64
|
+
description: 'Time-of-check to time-of-use (TOCTOU) pattern',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
id: 'ZD-009',
|
|
68
|
+
name: 'Integer Overflow Pattern',
|
|
69
|
+
regex: /<<\s*\d{2,}|\*\s*\d{10,}|parseInt.*\*.*parseInt/,
|
|
70
|
+
severity: 'medium',
|
|
71
|
+
description: 'Potential integer overflow vulnerability',
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
id: 'ZD-010',
|
|
75
|
+
name: 'Cryptographic Weakness',
|
|
76
|
+
regex: /MD5|SHA1\s*\(|DES|RC4|ECB|random\.random\s*\(\)|Math\.random\s*\(\).*key/i,
|
|
77
|
+
severity: 'high',
|
|
78
|
+
description: 'Weak cryptographic primitive detected',
|
|
79
|
+
},
|
|
80
|
+
];
|
|
81
|
+
/**
|
|
82
|
+
* Zero-Day Detector implementation
|
|
83
|
+
* @trace DES-SEC2-SAST-003
|
|
84
|
+
*/
|
|
85
|
+
export class ZeroDayDetector {
|
|
86
|
+
options;
|
|
87
|
+
knowledgeGraph;
|
|
88
|
+
// Reserved for future use with custom baseline patterns
|
|
89
|
+
// private baselinePatterns: CodePattern[];
|
|
90
|
+
constructor(options = {}) {
|
|
91
|
+
this.options = {
|
|
92
|
+
minDeviationScore: options.minDeviationScore ?? 0.6,
|
|
93
|
+
enableKGAnalysis: options.enableKGAnalysis ?? true,
|
|
94
|
+
enableHeuristics: options.enableHeuristics ?? true,
|
|
95
|
+
enableLLMAnalysis: options.enableLLMAnalysis ?? false,
|
|
96
|
+
};
|
|
97
|
+
this.knowledgeGraph = new Map();
|
|
98
|
+
// Reserved for custom baseline patterns
|
|
99
|
+
// this.baselinePatterns = options.customBaseline ?? [];
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Detect potential zero-day vulnerabilities
|
|
103
|
+
* @trace REQ-SEC2-SAST-003
|
|
104
|
+
*/
|
|
105
|
+
async detect(code, filePath) {
|
|
106
|
+
const results = [];
|
|
107
|
+
const lines = code.split('\n');
|
|
108
|
+
// Build local knowledge graph
|
|
109
|
+
this.buildLocalKnowledgeGraph(code, filePath);
|
|
110
|
+
// Pattern-based detection
|
|
111
|
+
if (this.options.enableHeuristics) {
|
|
112
|
+
const heuristicResults = this.detectSuspiciousPatterns(code, lines, filePath);
|
|
113
|
+
results.push(...heuristicResults);
|
|
114
|
+
}
|
|
115
|
+
// Knowledge graph deviation analysis
|
|
116
|
+
if (this.options.enableKGAnalysis) {
|
|
117
|
+
const deviationResults = this.analyzePatternDeviation(code, lines, filePath);
|
|
118
|
+
results.push(...deviationResults);
|
|
119
|
+
}
|
|
120
|
+
// LLM-assisted analysis (if enabled)
|
|
121
|
+
if (this.options.enableLLMAnalysis) {
|
|
122
|
+
const llmResults = await this.analyzeWithLLM(code, filePath);
|
|
123
|
+
results.push(...llmResults);
|
|
124
|
+
}
|
|
125
|
+
// Filter by minimum deviation score
|
|
126
|
+
return results.filter(r => r.deviation.deviationScore >= (this.options.minDeviationScore ?? 0.6));
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Build local knowledge graph from code
|
|
130
|
+
*/
|
|
131
|
+
buildLocalKnowledgeGraph(code, filePath) {
|
|
132
|
+
// Extract functions
|
|
133
|
+
const functionPattern = /(?:function\s+(\w+)|const\s+(\w+)\s*=\s*(?:async\s*)?\(|(\w+)\s*\([^)]*\)\s*{)/g;
|
|
134
|
+
let match;
|
|
135
|
+
while ((match = functionPattern.exec(code)) !== null) {
|
|
136
|
+
const name = match[1] ?? match[2] ?? match[3];
|
|
137
|
+
const lineNum = code.substring(0, match.index).split('\n').length;
|
|
138
|
+
const node = {
|
|
139
|
+
id: `${filePath}:${name}`,
|
|
140
|
+
type: 'function',
|
|
141
|
+
name,
|
|
142
|
+
properties: { line: lineNum, file: filePath },
|
|
143
|
+
edges: [],
|
|
144
|
+
};
|
|
145
|
+
// Find function calls within this function
|
|
146
|
+
const functionBody = this.extractFunctionBody(code, match.index);
|
|
147
|
+
const callPattern = /(\w+)\s*\(/g;
|
|
148
|
+
let callMatch;
|
|
149
|
+
while ((callMatch = callPattern.exec(functionBody)) !== null) {
|
|
150
|
+
if (!['if', 'while', 'for', 'switch', 'function', 'catch'].includes(callMatch[1])) {
|
|
151
|
+
node.edges.push({
|
|
152
|
+
target: callMatch[1],
|
|
153
|
+
relation: 'calls',
|
|
154
|
+
weight: 1,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
this.knowledgeGraph.set(node.id, node);
|
|
159
|
+
}
|
|
160
|
+
// Extract classes
|
|
161
|
+
const classPattern = /class\s+(\w+)(?:\s+extends\s+(\w+))?/g;
|
|
162
|
+
while ((match = classPattern.exec(code)) !== null) {
|
|
163
|
+
const className = match[1];
|
|
164
|
+
const parentClass = match[2];
|
|
165
|
+
const node = {
|
|
166
|
+
id: `${filePath}:${className}`,
|
|
167
|
+
type: 'class',
|
|
168
|
+
name: className,
|
|
169
|
+
properties: { file: filePath },
|
|
170
|
+
edges: [],
|
|
171
|
+
};
|
|
172
|
+
if (parentClass) {
|
|
173
|
+
node.edges.push({
|
|
174
|
+
target: parentClass,
|
|
175
|
+
relation: 'inherits',
|
|
176
|
+
weight: 1,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
this.knowledgeGraph.set(node.id, node);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Extract function body from code
|
|
184
|
+
*/
|
|
185
|
+
extractFunctionBody(code, startIndex) {
|
|
186
|
+
let depth = 0;
|
|
187
|
+
let inString = false;
|
|
188
|
+
let stringChar = '';
|
|
189
|
+
let bodyStart = -1;
|
|
190
|
+
for (let i = startIndex; i < code.length; i++) {
|
|
191
|
+
const char = code[i];
|
|
192
|
+
const prevChar = code[i - 1];
|
|
193
|
+
if (!inString) {
|
|
194
|
+
if (char === '"' || char === "'" || char === '`') {
|
|
195
|
+
inString = true;
|
|
196
|
+
stringChar = char;
|
|
197
|
+
}
|
|
198
|
+
else if (char === '{') {
|
|
199
|
+
if (depth === 0)
|
|
200
|
+
bodyStart = i;
|
|
201
|
+
depth++;
|
|
202
|
+
}
|
|
203
|
+
else if (char === '}') {
|
|
204
|
+
depth--;
|
|
205
|
+
if (depth === 0) {
|
|
206
|
+
return code.substring(bodyStart, i + 1);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
if (char === stringChar && prevChar !== '\\') {
|
|
212
|
+
inString = false;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return code.substring(startIndex, Math.min(startIndex + 500, code.length));
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Detect suspicious patterns using heuristics
|
|
220
|
+
*/
|
|
221
|
+
detectSuspiciousPatterns(code, lines, filePath) {
|
|
222
|
+
const results = [];
|
|
223
|
+
for (const pattern of SUSPICIOUS_PATTERNS) {
|
|
224
|
+
const globalPattern = new RegExp(pattern.regex.source, 'gm');
|
|
225
|
+
let match;
|
|
226
|
+
while ((match = globalPattern.exec(code)) !== null) {
|
|
227
|
+
const lineNum = code.substring(0, match.index).split('\n').length;
|
|
228
|
+
const lineContent = lines[lineNum - 1] ?? '';
|
|
229
|
+
// Calculate deviation score based on context
|
|
230
|
+
const deviationScore = this.calculateDeviationScore(code, match.index, pattern);
|
|
231
|
+
const result = {
|
|
232
|
+
vulnerability: {
|
|
233
|
+
id: `${pattern.id}-${lineNum}`,
|
|
234
|
+
type: 'suspicious-construct',
|
|
235
|
+
severity: pattern.severity,
|
|
236
|
+
location: {
|
|
237
|
+
file: filePath,
|
|
238
|
+
startLine: lineNum,
|
|
239
|
+
endLine: lineNum,
|
|
240
|
+
startColumn: 0,
|
|
241
|
+
endColumn: lineContent.length,
|
|
242
|
+
},
|
|
243
|
+
description: pattern.description,
|
|
244
|
+
recommendation: this.generateRecommendation(pattern),
|
|
245
|
+
codeSnippet: this.extractCodeSnippet(lines, lineNum),
|
|
246
|
+
},
|
|
247
|
+
deviation: {
|
|
248
|
+
patternId: pattern.id,
|
|
249
|
+
expectedPattern: 'standard/safe implementation',
|
|
250
|
+
observedPattern: match[0],
|
|
251
|
+
deviationScore,
|
|
252
|
+
deviationType: 'structural',
|
|
253
|
+
context: {
|
|
254
|
+
surroundingCode: this.extractCodeSnippet(lines, lineNum),
|
|
255
|
+
callStack: this.extractCallStack(code, match.index),
|
|
256
|
+
dataFlowPath: this.extractDataFlowPath(code, match.index),
|
|
257
|
+
relatedPatterns: [],
|
|
258
|
+
},
|
|
259
|
+
},
|
|
260
|
+
riskAssessment: this.assessRisk(pattern, deviationScore),
|
|
261
|
+
confidence: deviationScore,
|
|
262
|
+
};
|
|
263
|
+
results.push(result);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return results;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Analyze pattern deviation using knowledge graph
|
|
270
|
+
*/
|
|
271
|
+
analyzePatternDeviation(code, lines, filePath) {
|
|
272
|
+
const results = [];
|
|
273
|
+
// Analyze API usage patterns
|
|
274
|
+
const apiUsageDeviations = this.detectAPIUsageDeviations(code, lines, filePath);
|
|
275
|
+
results.push(...apiUsageDeviations);
|
|
276
|
+
// Analyze data flow anomalies
|
|
277
|
+
const dataFlowDeviations = this.detectDataFlowAnomalies(code, lines, filePath);
|
|
278
|
+
results.push(...dataFlowDeviations);
|
|
279
|
+
return results;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Detect unusual API usage patterns
|
|
283
|
+
*/
|
|
284
|
+
detectAPIUsageDeviations(code, lines, filePath) {
|
|
285
|
+
const results = [];
|
|
286
|
+
// Check for unusual API combinations
|
|
287
|
+
const dangerousAPICombinations = [
|
|
288
|
+
{ apis: ['eval', 'JSON.parse'], description: 'eval with JSON parsing' },
|
|
289
|
+
{ apis: ['innerHTML', 'fetch'], description: 'fetch result to innerHTML' },
|
|
290
|
+
{ apis: ['exec', 'req.body'], description: 'user input to command execution' },
|
|
291
|
+
{ apis: ['query', 'req.params'], description: 'user params to database query' },
|
|
292
|
+
];
|
|
293
|
+
for (const combo of dangerousAPICombinations) {
|
|
294
|
+
const hasAllAPIs = combo.apis.every(api => code.includes(api));
|
|
295
|
+
if (hasAllAPIs) {
|
|
296
|
+
// Find the location of the first API
|
|
297
|
+
const firstApiIndex = code.indexOf(combo.apis[0]);
|
|
298
|
+
const lineNum = code.substring(0, firstApiIndex).split('\n').length;
|
|
299
|
+
results.push({
|
|
300
|
+
vulnerability: {
|
|
301
|
+
id: `ZD-API-${lineNum}`,
|
|
302
|
+
type: 'unusual-api-usage',
|
|
303
|
+
severity: 'high',
|
|
304
|
+
location: {
|
|
305
|
+
file: filePath,
|
|
306
|
+
startLine: lineNum,
|
|
307
|
+
endLine: lineNum,
|
|
308
|
+
startColumn: 0,
|
|
309
|
+
endColumn: lines[lineNum - 1]?.length ?? 0,
|
|
310
|
+
},
|
|
311
|
+
description: `Dangerous API combination detected: ${combo.description}`,
|
|
312
|
+
recommendation: 'Review the data flow between these APIs and add appropriate validation',
|
|
313
|
+
codeSnippet: this.extractCodeSnippet(lines, lineNum),
|
|
314
|
+
},
|
|
315
|
+
deviation: {
|
|
316
|
+
patternId: 'ZD-API-COMBO',
|
|
317
|
+
expectedPattern: 'Validated data flow between APIs',
|
|
318
|
+
observedPattern: combo.apis.join(' -> '),
|
|
319
|
+
deviationScore: 0.8,
|
|
320
|
+
deviationType: 'behavioral',
|
|
321
|
+
context: {
|
|
322
|
+
surroundingCode: this.extractCodeSnippet(lines, lineNum),
|
|
323
|
+
callStack: [],
|
|
324
|
+
dataFlowPath: combo.apis,
|
|
325
|
+
relatedPatterns: [],
|
|
326
|
+
},
|
|
327
|
+
},
|
|
328
|
+
riskAssessment: {
|
|
329
|
+
overallRisk: 'high',
|
|
330
|
+
exploitability: 0.7,
|
|
331
|
+
impact: 0.8,
|
|
332
|
+
attackVector: 'Network',
|
|
333
|
+
mitigationComplexity: 'medium',
|
|
334
|
+
businessImpact: 'Data compromise or code execution',
|
|
335
|
+
},
|
|
336
|
+
confidence: 0.75,
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
return results;
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Detect data flow anomalies
|
|
344
|
+
*/
|
|
345
|
+
detectDataFlowAnomalies(code, lines, filePath) {
|
|
346
|
+
const results = [];
|
|
347
|
+
// Detect unusual data flow patterns
|
|
348
|
+
const anomalousPatterns = [
|
|
349
|
+
{
|
|
350
|
+
pattern: /(\w+)\s*=\s*req\.(body|query|params)\s*[^;]*;\s*[^]*?\1\s*\+/,
|
|
351
|
+
type: 'anomalous-flow',
|
|
352
|
+
description: 'User input used in string concatenation',
|
|
353
|
+
},
|
|
354
|
+
{
|
|
355
|
+
pattern: /return\s+\{[^}]*password[^}]*\}/i,
|
|
356
|
+
type: 'anomalous-flow',
|
|
357
|
+
description: 'Potential credential leakage in return value',
|
|
358
|
+
},
|
|
359
|
+
{
|
|
360
|
+
pattern: /catch\s*\([^)]*\)\s*{\s*}/,
|
|
361
|
+
type: 'suspicious-construct',
|
|
362
|
+
description: 'Empty catch block suppressing errors',
|
|
363
|
+
},
|
|
364
|
+
];
|
|
365
|
+
for (const anomaly of anomalousPatterns) {
|
|
366
|
+
const match = code.match(anomaly.pattern);
|
|
367
|
+
if (match) {
|
|
368
|
+
const lineNum = code.substring(0, match.index ?? 0).split('\n').length;
|
|
369
|
+
results.push({
|
|
370
|
+
vulnerability: {
|
|
371
|
+
id: `ZD-FLOW-${lineNum}`,
|
|
372
|
+
type: anomaly.type,
|
|
373
|
+
severity: 'medium',
|
|
374
|
+
location: {
|
|
375
|
+
file: filePath,
|
|
376
|
+
startLine: lineNum,
|
|
377
|
+
endLine: lineNum,
|
|
378
|
+
startColumn: 0,
|
|
379
|
+
endColumn: lines[lineNum - 1]?.length ?? 0,
|
|
380
|
+
},
|
|
381
|
+
description: anomaly.description,
|
|
382
|
+
recommendation: 'Review data flow and add appropriate validation',
|
|
383
|
+
codeSnippet: this.extractCodeSnippet(lines, lineNum),
|
|
384
|
+
},
|
|
385
|
+
deviation: {
|
|
386
|
+
patternId: 'ZD-FLOW',
|
|
387
|
+
expectedPattern: 'Validated data transformation',
|
|
388
|
+
observedPattern: match[0].substring(0, 100),
|
|
389
|
+
deviationScore: 0.65,
|
|
390
|
+
deviationType: 'behavioral',
|
|
391
|
+
context: {
|
|
392
|
+
surroundingCode: this.extractCodeSnippet(lines, lineNum),
|
|
393
|
+
callStack: [],
|
|
394
|
+
dataFlowPath: [],
|
|
395
|
+
relatedPatterns: [],
|
|
396
|
+
},
|
|
397
|
+
},
|
|
398
|
+
riskAssessment: {
|
|
399
|
+
overallRisk: 'medium',
|
|
400
|
+
exploitability: 0.5,
|
|
401
|
+
impact: 0.6,
|
|
402
|
+
attackVector: 'Network',
|
|
403
|
+
mitigationComplexity: 'low',
|
|
404
|
+
businessImpact: 'Potential data exposure',
|
|
405
|
+
},
|
|
406
|
+
confidence: 0.6,
|
|
407
|
+
});
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
return results;
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* LLM-assisted analysis (placeholder for future implementation)
|
|
414
|
+
*/
|
|
415
|
+
async analyzeWithLLM(_code, _filePath) {
|
|
416
|
+
// This would integrate with LLM APIs for advanced analysis
|
|
417
|
+
// Currently returns empty array as placeholder
|
|
418
|
+
return [];
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* Assess risk for a detected pattern
|
|
422
|
+
*/
|
|
423
|
+
assessRisk(pattern, deviationScore) {
|
|
424
|
+
const severityToExploitability = {
|
|
425
|
+
critical: 0.9,
|
|
426
|
+
high: 0.7,
|
|
427
|
+
medium: 0.5,
|
|
428
|
+
low: 0.3,
|
|
429
|
+
info: 0.1,
|
|
430
|
+
};
|
|
431
|
+
const severityToImpact = {
|
|
432
|
+
critical: 0.95,
|
|
433
|
+
high: 0.8,
|
|
434
|
+
medium: 0.6,
|
|
435
|
+
low: 0.4,
|
|
436
|
+
info: 0.2,
|
|
437
|
+
};
|
|
438
|
+
return {
|
|
439
|
+
overallRisk: pattern.severity,
|
|
440
|
+
exploitability: severityToExploitability[pattern.severity] * deviationScore,
|
|
441
|
+
impact: severityToImpact[pattern.severity],
|
|
442
|
+
attackVector: this.determineAttackVector(pattern.description),
|
|
443
|
+
mitigationComplexity: this.determineMitigationComplexity(pattern.severity),
|
|
444
|
+
businessImpact: this.determineBusinessImpact(pattern.severity),
|
|
445
|
+
};
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* Calculate deviation score based on context
|
|
449
|
+
*/
|
|
450
|
+
calculateDeviationScore(code, matchIndex, pattern) {
|
|
451
|
+
let score = 0.5;
|
|
452
|
+
// Increase score based on severity
|
|
453
|
+
const severityBonus = {
|
|
454
|
+
critical: 0.3,
|
|
455
|
+
high: 0.2,
|
|
456
|
+
medium: 0.1,
|
|
457
|
+
low: 0.05,
|
|
458
|
+
info: 0,
|
|
459
|
+
};
|
|
460
|
+
score += severityBonus[pattern.severity];
|
|
461
|
+
// Check if in sensitive context
|
|
462
|
+
const beforeContext = code.substring(Math.max(0, matchIndex - 200), matchIndex).toLowerCase();
|
|
463
|
+
if (beforeContext.includes('user') || beforeContext.includes('input') || beforeContext.includes('req.')) {
|
|
464
|
+
score += 0.15;
|
|
465
|
+
}
|
|
466
|
+
// Check if near network operations
|
|
467
|
+
if (beforeContext.includes('fetch') || beforeContext.includes('http') || beforeContext.includes('request')) {
|
|
468
|
+
score += 0.1;
|
|
469
|
+
}
|
|
470
|
+
return Math.min(score, 1);
|
|
471
|
+
}
|
|
472
|
+
/**
|
|
473
|
+
* Generate recommendation for pattern
|
|
474
|
+
*/
|
|
475
|
+
generateRecommendation(pattern) {
|
|
476
|
+
const recommendations = {
|
|
477
|
+
'ZD-001': 'Avoid direct prototype manipulation. Use Object.create() or class inheritance.',
|
|
478
|
+
'ZD-002': 'Use static function definitions instead of dynamic construction.',
|
|
479
|
+
'ZD-003': 'Use safe serialization methods with type validation.',
|
|
480
|
+
'ZD-004': 'Use explicit attribute access with whitelist validation.',
|
|
481
|
+
'ZD-005': 'Avoid direct memory manipulation. Use safe buffer APIs.',
|
|
482
|
+
'ZD-006': 'Use parameterized commands and avoid shell=True.',
|
|
483
|
+
'ZD-007': 'Use strict type checking with TypeScript or runtime validation.',
|
|
484
|
+
'ZD-008': 'Use atomic file operations or implement proper locking.',
|
|
485
|
+
'ZD-009': 'Use BigInt for large numbers and validate numeric inputs.',
|
|
486
|
+
'ZD-010': 'Use strong cryptographic primitives (SHA-256+, AES-256-GCM).',
|
|
487
|
+
};
|
|
488
|
+
return recommendations[pattern.id] ?? 'Review and refactor this code pattern.';
|
|
489
|
+
}
|
|
490
|
+
/**
|
|
491
|
+
* Extract code snippet around line
|
|
492
|
+
*/
|
|
493
|
+
extractCodeSnippet(lines, lineNum) {
|
|
494
|
+
const start = Math.max(0, lineNum - 3);
|
|
495
|
+
const end = Math.min(lines.length, lineNum + 3);
|
|
496
|
+
return lines.slice(start, end).join('\n');
|
|
497
|
+
}
|
|
498
|
+
/**
|
|
499
|
+
* Extract call stack from context
|
|
500
|
+
*/
|
|
501
|
+
extractCallStack(code, index) {
|
|
502
|
+
const stack = [];
|
|
503
|
+
const beforeCode = code.substring(0, index);
|
|
504
|
+
// Find enclosing function
|
|
505
|
+
const functionMatch = beforeCode.match(/function\s+(\w+)|const\s+(\w+)\s*=\s*(?:async\s*)?\(/g);
|
|
506
|
+
if (functionMatch) {
|
|
507
|
+
const lastMatch = functionMatch[functionMatch.length - 1];
|
|
508
|
+
const nameMatch = lastMatch.match(/function\s+(\w+)|const\s+(\w+)/);
|
|
509
|
+
if (nameMatch) {
|
|
510
|
+
stack.push(nameMatch[1] ?? nameMatch[2]);
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
return stack;
|
|
514
|
+
}
|
|
515
|
+
/**
|
|
516
|
+
* Extract data flow path
|
|
517
|
+
*/
|
|
518
|
+
extractDataFlowPath(code, index) {
|
|
519
|
+
const path = [];
|
|
520
|
+
const context = code.substring(Math.max(0, index - 300), Math.min(code.length, index + 100));
|
|
521
|
+
// Look for variable assignments leading to this point
|
|
522
|
+
const assignments = context.match(/(\w+)\s*=\s*[^;]+/g) ?? [];
|
|
523
|
+
for (const assignment of assignments) {
|
|
524
|
+
const varName = assignment.split('=')[0].trim();
|
|
525
|
+
if (varName && varName.length < 30) {
|
|
526
|
+
path.push(varName);
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
return path.slice(-5); // Last 5 assignments
|
|
530
|
+
}
|
|
531
|
+
/**
|
|
532
|
+
* Determine attack vector
|
|
533
|
+
*/
|
|
534
|
+
determineAttackVector(description) {
|
|
535
|
+
const desc = description.toLowerCase();
|
|
536
|
+
if (desc.includes('network') || desc.includes('request'))
|
|
537
|
+
return 'Network';
|
|
538
|
+
if (desc.includes('file') || desc.includes('path'))
|
|
539
|
+
return 'Local';
|
|
540
|
+
if (desc.includes('user') || desc.includes('input'))
|
|
541
|
+
return 'Adjacent';
|
|
542
|
+
return 'Network';
|
|
543
|
+
}
|
|
544
|
+
/**
|
|
545
|
+
* Determine mitigation complexity
|
|
546
|
+
*/
|
|
547
|
+
determineMitigationComplexity(severity) {
|
|
548
|
+
if (severity === 'critical')
|
|
549
|
+
return 'high';
|
|
550
|
+
if (severity === 'high')
|
|
551
|
+
return 'medium';
|
|
552
|
+
return 'low';
|
|
553
|
+
}
|
|
554
|
+
/**
|
|
555
|
+
* Determine business impact
|
|
556
|
+
*/
|
|
557
|
+
determineBusinessImpact(severity) {
|
|
558
|
+
const impacts = {
|
|
559
|
+
critical: 'Complete system compromise, data breach, or service disruption',
|
|
560
|
+
high: 'Significant data exposure or system access',
|
|
561
|
+
medium: 'Limited data exposure or service degradation',
|
|
562
|
+
low: 'Minor security weakness',
|
|
563
|
+
info: 'Informational finding',
|
|
564
|
+
};
|
|
565
|
+
return impacts[severity];
|
|
566
|
+
}
|
|
567
|
+
/**
|
|
568
|
+
* Convert results to standard vulnerability format
|
|
569
|
+
*/
|
|
570
|
+
toVulnerabilities(results) {
|
|
571
|
+
return results.map(result => ({
|
|
572
|
+
id: result.vulnerability.id,
|
|
573
|
+
type: 'zero-day',
|
|
574
|
+
severity: result.vulnerability.severity,
|
|
575
|
+
cwes: ['CWE-Unknown'],
|
|
576
|
+
owasp: ['A00:Unknown'],
|
|
577
|
+
location: result.vulnerability.location,
|
|
578
|
+
description: result.vulnerability.description,
|
|
579
|
+
recommendation: result.vulnerability.recommendation,
|
|
580
|
+
confidence: result.confidence,
|
|
581
|
+
ruleId: result.deviation.patternId,
|
|
582
|
+
codeSnippet: result.vulnerability.codeSnippet,
|
|
583
|
+
detectedAt: new Date(),
|
|
584
|
+
}));
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
/**
|
|
588
|
+
* Create zero-day detector instance
|
|
589
|
+
*/
|
|
590
|
+
export function createZeroDayDetector(options) {
|
|
591
|
+
return new ZeroDayDetector(options);
|
|
592
|
+
}
|
|
593
|
+
//# sourceMappingURL=zero-day-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zero-day-detector.js","sourceRoot":"","sources":["../../../src/analyzers/sast/zero-day-detector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAuHH;;GAEG;AACH,MAAM,mBAAmB,GAMpB;IACH;QACE,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,0BAA0B;QAChC,KAAK,EAAE,8DAA8D;QACrE,QAAQ,EAAE,MAAM;QAChB,WAAW,EAAE,+CAA+C;KAC7D;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,+BAA+B;QACrC,KAAK,EAAE,oDAAoD;QAC3D,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,kDAAkD;KAChE;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,uBAAuB;QAC7B,KAAK,EAAE,sDAAsD;QAC7D,QAAQ,EAAE,MAAM;QAChB,WAAW,EAAE,kDAAkD;KAChE;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,kEAAkE;QACzE,QAAQ,EAAE,QAAQ;QAClB,WAAW,EAAE,8CAA8C;KAC5D;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,qBAAqB;QAC3B,KAAK,EAAE,4DAA4D;QACnE,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,qCAAqC;KACnD;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,0BAA0B;QAChC,KAAK,EAAE,oEAAoE;QAC3E,QAAQ,EAAE,MAAM;QAChB,WAAW,EAAE,oCAAoC;KAClD;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,wBAAwB;QAC9B,KAAK,EAAE,wDAAwD;QAC/D,QAAQ,EAAE,QAAQ;QAClB,WAAW,EAAE,wCAAwC;KACtD;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,wBAAwB;QAC9B,KAAK,EAAE,wDAAwD;QAC/D,QAAQ,EAAE,QAAQ;QAClB,WAAW,EAAE,+CAA+C;KAC7D;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,0BAA0B;QAChC,KAAK,EAAE,iDAAiD;QACxD,QAAQ,EAAE,QAAQ;QAClB,WAAW,EAAE,0CAA0C;KACxD;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,wBAAwB;QAC9B,KAAK,EAAE,2EAA2E;QAClF,QAAQ,EAAE,MAAM;QAChB,WAAW,EAAE,uCAAuC;KACrD;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,OAAO,eAAe;IAClB,OAAO,CAAiB;IACxB,cAAc,CAAsB;IAC5C,wDAAwD;IACxD,2CAA2C;IAE3C,YAAY,UAA0B,EAAE;QACtC,IAAI,CAAC,OAAO,GAAG;YACb,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,IAAI,GAAG;YACnD,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,IAAI;YAClD,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,IAAI;YAClD,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,IAAI,KAAK;SACtD,CAAC;QAEF,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;QAChC,wCAAwC;QACxC,wDAAwD;IAC1D,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,QAAgB;QACzC,MAAM,OAAO,GAAoB,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE/B,8BAA8B;QAC9B,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAE9C,0BAA0B;QAC1B,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAClC,MAAM,gBAAgB,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC9E,OAAO,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAC;QACpC,CAAC;QAED,qCAAqC;QACrC,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAClC,MAAM,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC7E,OAAO,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAC;QACpC,CAAC;QAED,qCAAqC;QACrC,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;QAC9B,CAAC;QAED,oCAAoC;QACpC,OAAO,OAAO,CAAC,MAAM,CACnB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,IAAI,GAAG,CAAC,CAC3E,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,wBAAwB,CAAC,IAAY,EAAE,QAAgB;QAC7D,oBAAoB;QACpB,MAAM,eAAe,GAAG,iFAAiF,CAAC;QAC1G,IAAI,KAA6B,CAAC;QAElC,OAAO,CAAC,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACrD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;YAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YAElE,MAAM,IAAI,GAAW;gBACnB,EAAE,EAAE,GAAG,QAAQ,IAAI,IAAI,EAAE;gBACzB,IAAI,EAAE,UAAU;gBAChB,IAAI;gBACJ,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC7C,KAAK,EAAE,EAAE;aACV,CAAC;YAEF,2CAA2C;YAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACjE,MAAM,WAAW,GAAG,aAAa,CAAC;YAClC,IAAI,SAAiC,CAAC;YAEtC,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC7D,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAClF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;wBACd,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;wBACpB,QAAQ,EAAE,OAAO;wBACjB,MAAM,EAAE,CAAC;qBACV,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC;QAED,kBAAkB;QAClB,MAAM,YAAY,GAAG,uCAAuC,CAAC;QAE7D,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAClD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAE7B,MAAM,IAAI,GAAW;gBACnB,EAAE,EAAE,GAAG,QAAQ,IAAI,SAAS,EAAE;gBAC9B,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,SAAS;gBACf,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC9B,KAAK,EAAE,EAAE;aACV,CAAC;YAEF,IAAI,WAAW,EAAE,CAAC;gBAChB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;oBACd,MAAM,EAAE,WAAW;oBACnB,QAAQ,EAAE,UAAU;oBACpB,MAAM,EAAE,CAAC;iBACV,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,IAAY,EAAE,UAAkB;QAC1D,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;QAEnB,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAE7B,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;oBACjD,QAAQ,GAAG,IAAI,CAAC;oBAChB,UAAU,GAAG,IAAI,CAAC;gBACpB,CAAC;qBAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;oBACxB,IAAI,KAAK,KAAK,CAAC;wBAAE,SAAS,GAAG,CAAC,CAAC;oBAC/B,KAAK,EAAE,CAAC;gBACV,CAAC;qBAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;oBACxB,KAAK,EAAE,CAAC;oBACR,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;wBAChB,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC1C,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,IAAI,KAAK,UAAU,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;oBAC7C,QAAQ,GAAG,KAAK,CAAC;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED;;OAEG;IACK,wBAAwB,CAC9B,IAAY,EACZ,KAAe,EACf,QAAgB;QAEhB,MAAM,OAAO,GAAoB,EAAE,CAAC;QAEpC,KAAK,MAAM,OAAO,IAAI,mBAAmB,EAAE,CAAC;YAC1C,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC7D,IAAI,KAA6B,CAAC;YAElC,OAAO,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACnD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;gBAClE,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;gBAE7C,6CAA6C;gBAC7C,MAAM,cAAc,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAEhF,MAAM,MAAM,GAAkB;oBAC5B,aAAa,EAAE;wBACb,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,OAAO,EAAE;wBAC9B,IAAI,EAAE,sBAAsB;wBAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;wBAC1B,QAAQ,EAAE;4BACR,IAAI,EAAE,QAAQ;4BACd,SAAS,EAAE,OAAO;4BAClB,OAAO,EAAE,OAAO;4BAChB,WAAW,EAAE,CAAC;4BACd,SAAS,EAAE,WAAW,CAAC,MAAM;yBAC9B;wBACD,WAAW,EAAE,OAAO,CAAC,WAAW;wBAChC,cAAc,EAAE,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;wBACpD,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC;qBACrD;oBACD,SAAS,EAAE;wBACT,SAAS,EAAE,OAAO,CAAC,EAAE;wBACrB,eAAe,EAAE,8BAA8B;wBAC/C,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC;wBACzB,cAAc;wBACd,aAAa,EAAE,YAAY;wBAC3B,OAAO,EAAE;4BACP,eAAe,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC;4BACxD,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC;4BACnD,YAAY,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC;4BACzD,eAAe,EAAE,EAAE;yBACpB;qBACF;oBACD,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC;oBACxD,UAAU,EAAE,cAAc;iBAC3B,CAAC;gBAEF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,uBAAuB,CAC7B,IAAY,EACZ,KAAe,EACf,QAAgB;QAEhB,MAAM,OAAO,GAAoB,EAAE,CAAC;QAEpC,6BAA6B;QAC7B,MAAM,kBAAkB,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAChF,OAAO,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,CAAC;QAEpC,8BAA8B;QAC9B,MAAM,kBAAkB,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC/E,OAAO,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,CAAC;QAEpC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,wBAAwB,CAC9B,IAAY,EACZ,KAAe,EACf,QAAgB;QAEhB,MAAM,OAAO,GAAoB,EAAE,CAAC;QAEpC,qCAAqC;QACrC,MAAM,wBAAwB,GAAG;YAC/B,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,WAAW,EAAE,wBAAwB,EAAE;YACvE,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,2BAA2B,EAAE;YAC1E,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,WAAW,EAAE,iCAAiC,EAAE;YAC9E,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,WAAW,EAAE,+BAA+B,EAAE;SAChF,CAAC;QAEF,KAAK,MAAM,KAAK,IAAI,wBAAwB,EAAE,CAAC;YAC7C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YAE/D,IAAI,UAAU,EAAE,CAAC;gBACf,qCAAqC;gBACrC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;gBAEpE,OAAO,CAAC,IAAI,CAAC;oBACX,aAAa,EAAE;wBACb,EAAE,EAAE,UAAU,OAAO,EAAE;wBACvB,IAAI,EAAE,mBAAmB;wBACzB,QAAQ,EAAE,MAAM;wBAChB,QAAQ,EAAE;4BACR,IAAI,EAAE,QAAQ;4BACd,SAAS,EAAE,OAAO;4BAClB,OAAO,EAAE,OAAO;4BAChB,WAAW,EAAE,CAAC;4BACd,SAAS,EAAE,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC;yBAC3C;wBACD,WAAW,EAAE,uCAAuC,KAAK,CAAC,WAAW,EAAE;wBACvE,cAAc,EAAE,wEAAwE;wBACxF,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC;qBACrD;oBACD,SAAS,EAAE;wBACT,SAAS,EAAE,cAAc;wBACzB,eAAe,EAAE,kCAAkC;wBACnD,eAAe,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;wBACxC,cAAc,EAAE,GAAG;wBACnB,aAAa,EAAE,YAAY;wBAC3B,OAAO,EAAE;4BACP,eAAe,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC;4BACxD,SAAS,EAAE,EAAE;4BACb,YAAY,EAAE,KAAK,CAAC,IAAI;4BACxB,eAAe,EAAE,EAAE;yBACpB;qBACF;oBACD,cAAc,EAAE;wBACd,WAAW,EAAE,MAAM;wBACnB,cAAc,EAAE,GAAG;wBACnB,MAAM,EAAE,GAAG;wBACX,YAAY,EAAE,SAAS;wBACvB,oBAAoB,EAAE,QAAQ;wBAC9B,cAAc,EAAE,mCAAmC;qBACpD;oBACD,UAAU,EAAE,IAAI;iBACjB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,uBAAuB,CAC7B,IAAY,EACZ,KAAe,EACf,QAAgB;QAEhB,MAAM,OAAO,GAAoB,EAAE,CAAC;QAEpC,oCAAoC;QACpC,MAAM,iBAAiB,GAAG;YACxB;gBACE,OAAO,EAAE,8DAA8D;gBACvE,IAAI,EAAE,gBAAyB;gBAC/B,WAAW,EAAE,yCAAyC;aACvD;YACD;gBACE,OAAO,EAAE,kCAAkC;gBAC3C,IAAI,EAAE,gBAAyB;gBAC/B,WAAW,EAAE,8CAA8C;aAC5D;YACD;gBACE,OAAO,EAAE,2BAA2B;gBACpC,IAAI,EAAE,sBAA+B;gBACrC,WAAW,EAAE,sCAAsC;aACpD;SACF,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC1C,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;gBAEvE,OAAO,CAAC,IAAI,CAAC;oBACX,aAAa,EAAE;wBACb,EAAE,EAAE,WAAW,OAAO,EAAE;wBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;wBAClB,QAAQ,EAAE,QAAQ;wBAClB,QAAQ,EAAE;4BACR,IAAI,EAAE,QAAQ;4BACd,SAAS,EAAE,OAAO;4BAClB,OAAO,EAAE,OAAO;4BAChB,WAAW,EAAE,CAAC;4BACd,SAAS,EAAE,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC;yBAC3C;wBACD,WAAW,EAAE,OAAO,CAAC,WAAW;wBAChC,cAAc,EAAE,iDAAiD;wBACjE,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC;qBACrD;oBACD,SAAS,EAAE;wBACT,SAAS,EAAE,SAAS;wBACpB,eAAe,EAAE,+BAA+B;wBAChD,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC;wBAC3C,cAAc,EAAE,IAAI;wBACpB,aAAa,EAAE,YAAY;wBAC3B,OAAO,EAAE;4BACP,eAAe,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC;4BACxD,SAAS,EAAE,EAAE;4BACb,YAAY,EAAE,EAAE;4BAChB,eAAe,EAAE,EAAE;yBACpB;qBACF;oBACD,cAAc,EAAE;wBACd,WAAW,EAAE,QAAQ;wBACrB,cAAc,EAAE,GAAG;wBACnB,MAAM,EAAE,GAAG;wBACX,YAAY,EAAE,SAAS;wBACvB,oBAAoB,EAAE,KAAK;wBAC3B,cAAc,EAAE,yBAAyB;qBAC1C;oBACD,UAAU,EAAE,GAAG;iBAChB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,KAAa,EAAE,SAAiB;QACnD,2DAA2D;QAC3D,+CAA+C;QAC/C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACH,UAAU,CACR,OAAoD,EACpD,cAAsB;QAEtB,MAAM,wBAAwB,GAA6B;YACzD,QAAQ,EAAE,GAAG;YACb,IAAI,EAAE,GAAG;YACT,MAAM,EAAE,GAAG;YACX,GAAG,EAAE,GAAG;YACR,IAAI,EAAE,GAAG;SACV,CAAC;QAEF,MAAM,gBAAgB,GAA6B;YACjD,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,GAAG;YACT,MAAM,EAAE,GAAG;YACX,GAAG,EAAE,GAAG;YACR,IAAI,EAAE,GAAG;SACV,CAAC;QAEF,OAAO;YACL,WAAW,EAAE,OAAO,CAAC,QAAQ;YAC7B,cAAc,EAAE,wBAAwB,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,cAAc;YAC3E,MAAM,EAAE,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC1C,YAAY,EAAE,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,WAAW,CAAC;YAC7D,oBAAoB,EAAE,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC1E,cAAc,EAAE,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,QAAQ,CAAC;SAC/D,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,uBAAuB,CAC7B,IAAY,EACZ,UAAkB,EAClB,OAA+B;QAE/B,IAAI,KAAK,GAAG,GAAG,CAAC;QAEhB,mCAAmC;QACnC,MAAM,aAAa,GAA6B;YAC9C,QAAQ,EAAE,GAAG;YACb,IAAI,EAAE,GAAG;YACT,MAAM,EAAE,GAAG;YACX,GAAG,EAAE,IAAI;YACT,IAAI,EAAE,CAAC;SACR,CAAC;QACF,KAAK,IAAI,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEzC,gCAAgC;QAChC,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9F,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACxG,KAAK,IAAI,IAAI,CAAC;QAChB,CAAC;QAED,mCAAmC;QACnC,IAAI,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3G,KAAK,IAAI,GAAG,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACK,sBAAsB,CAAC,OAA4C;QACzE,MAAM,eAAe,GAA2B;YAC9C,QAAQ,EAAE,gFAAgF;YAC1F,QAAQ,EAAE,kEAAkE;YAC5E,QAAQ,EAAE,sDAAsD;YAChE,QAAQ,EAAE,0DAA0D;YACpE,QAAQ,EAAE,yDAAyD;YACnE,QAAQ,EAAE,kDAAkD;YAC5D,QAAQ,EAAE,iEAAiE;YAC3E,QAAQ,EAAE,yDAAyD;YACnE,QAAQ,EAAE,2DAA2D;YACrE,QAAQ,EAAE,8DAA8D;SACzE,CAAC;QAEF,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,wCAAwC,CAAC;IACjF,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,KAAe,EAAE,OAAe;QACzD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;QAChD,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,IAAY,EAAE,KAAa;QAClD,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAE5C,0BAA0B;QAC1B,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAChG,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,SAAS,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC1D,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YACpE,IAAI,SAAS,EAAE,CAAC;gBACd,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,IAAY,EAAE,KAAa;QACrD,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;QAE7F,sDAAsD;QACtD,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;QAC9D,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAChD,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;gBACnC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB;IAC9C,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,WAAmB;QAC/C,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QACvC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;QAC3E,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,OAAO,CAAC;QACnE,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,UAAU,CAAC;QACvE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,6BAA6B,CAAC,QAAkB;QACtD,IAAI,QAAQ,KAAK,UAAU;YAAE,OAAO,MAAM,CAAC;QAC3C,IAAI,QAAQ,KAAK,MAAM;YAAE,OAAO,QAAQ,CAAC;QACzC,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,uBAAuB,CAAC,QAAkB;QAChD,MAAM,OAAO,GAA6B;YACxC,QAAQ,EAAE,gEAAgE;YAC1E,IAAI,EAAE,4CAA4C;YAClD,MAAM,EAAE,8CAA8C;YACtD,GAAG,EAAE,yBAAyB;YAC9B,IAAI,EAAE,uBAAuB;SAC9B,CAAC;QACF,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,OAAwB;QACxC,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC5B,EAAE,EAAE,MAAM,CAAC,aAAa,CAAC,EAAE;YAC3B,IAAI,EAAE,UAAmB;YACzB,QAAQ,EAAE,MAAM,CAAC,aAAa,CAAC,QAAQ;YACvC,IAAI,EAAE,CAAC,aAAa,CAAC;YACrB,KAAK,EAAE,CAAC,aAAa,CAAC;YACtB,QAAQ,EAAE,MAAM,CAAC,aAAa,CAAC,QAAQ;YACvC,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC,WAAW;YAC7C,cAAc,EAAE,MAAM,CAAC,aAAa,CAAC,cAAc;YACnD,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,SAAS;YAClC,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC,WAAW;YAC7C,UAAU,EAAE,IAAI,IAAI,EAAE;SACvB,CAAC,CAAC,CAAC;IACN,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAwB;IAC5D,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC"}
|