sentinel-agentos 0.3.7 → 0.3.8
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/package.json +1 -1
- package/LICENSE +0 -21
- package/README.md +0 -1797
- package/dist/adapters/evaluation-bridge.d.ts +0 -78
- package/dist/adapters/evaluation-bridge.d.ts.map +0 -1
- package/dist/adapters/evaluation-bridge.js +0 -273
- package/dist/adapters/evaluation-bridge.js.map +0 -1
- package/dist/adapters/memory-bridge.d.ts +0 -110
- package/dist/adapters/memory-bridge.d.ts.map +0 -1
- package/dist/adapters/memory-bridge.js +0 -316
- package/dist/adapters/memory-bridge.js.map +0 -1
- package/dist/adapters/migrate.d.ts +0 -2
- package/dist/adapters/migrate.d.ts.map +0 -1
- package/dist/adapters/migrate.js +0 -63
- package/dist/adapters/migrate.js.map +0 -1
- package/dist/api.d.ts +0 -151
- package/dist/api.d.ts.map +0 -1
- package/dist/api.js +0 -179
- package/dist/api.js.map +0 -1
- package/dist/cli.d.ts +0 -16
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -350
- package/dist/cli.js.map +0 -1
- package/dist/core.d.ts +0 -156
- package/dist/core.d.ts.map +0 -1
- package/dist/core.js +0 -400
- package/dist/core.js.map +0 -1
- package/dist/dashboard.html +0 -175
- package/dist/evaluator/exec-evaluator.d.ts +0 -102
- package/dist/evaluator/exec-evaluator.d.ts.map +0 -1
- package/dist/evaluator/exec-evaluator.js +0 -266
- package/dist/evaluator/exec-evaluator.js.map +0 -1
- package/dist/evaluator/feedback.d.ts +0 -96
- package/dist/evaluator/feedback.d.ts.map +0 -1
- package/dist/evaluator/feedback.js +0 -419
- package/dist/evaluator/feedback.js.map +0 -1
- package/dist/evaluator/profiler.d.ts +0 -55
- package/dist/evaluator/profiler.d.ts.map +0 -1
- package/dist/evaluator/profiler.js +0 -130
- package/dist/evaluator/profiler.js.map +0 -1
- package/dist/guard/audit-log.d.ts +0 -47
- package/dist/guard/audit-log.d.ts.map +0 -1
- package/dist/guard/audit-log.js +0 -199
- package/dist/guard/audit-log.js.map +0 -1
- package/dist/guard/container-sandbox.d.ts +0 -25
- package/dist/guard/container-sandbox.d.ts.map +0 -1
- package/dist/guard/container-sandbox.js +0 -145
- package/dist/guard/container-sandbox.js.map +0 -1
- package/dist/guard/risk-gate.d.ts +0 -101
- package/dist/guard/risk-gate.d.ts.map +0 -1
- package/dist/guard/risk-gate.js +0 -200
- package/dist/guard/risk-gate.js.map +0 -1
- package/dist/guard/sandbox.d.ts +0 -112
- package/dist/guard/sandbox.d.ts.map +0 -1
- package/dist/guard/sandbox.js +0 -379
- package/dist/guard/sandbox.js.map +0 -1
- package/dist/guard/schema-gate.d.ts +0 -90
- package/dist/guard/schema-gate.d.ts.map +0 -1
- package/dist/guard/schema-gate.js +0 -452
- package/dist/guard/schema-gate.js.map +0 -1
- package/dist/guard/snapshot-verify.d.ts +0 -111
- package/dist/guard/snapshot-verify.d.ts.map +0 -1
- package/dist/guard/snapshot-verify.js +0 -571
- package/dist/guard/snapshot-verify.js.map +0 -1
- package/dist/index.d.ts +0 -28
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -59
- package/dist/index.js.map +0 -1
- package/dist/memory/episodic.d.ts +0 -76
- package/dist/memory/episodic.d.ts.map +0 -1
- package/dist/memory/episodic.js +0 -289
- package/dist/memory/episodic.js.map +0 -1
- package/dist/memory/semantic.d.ts +0 -68
- package/dist/memory/semantic.d.ts.map +0 -1
- package/dist/memory/semantic.js +0 -299
- package/dist/memory/semantic.js.map +0 -1
- package/dist/memory/working.d.ts +0 -53
- package/dist/memory/working.d.ts.map +0 -1
- package/dist/memory/working.js +0 -166
- package/dist/memory/working.js.map +0 -1
- package/dist/middleware/openclaw.d.ts +0 -45
- package/dist/middleware/openclaw.d.ts.map +0 -1
- package/dist/middleware/openclaw.js +0 -95
- package/dist/middleware/openclaw.js.map +0 -1
- package/dist/middleware/wrapper.d.ts +0 -54
- package/dist/middleware/wrapper.d.ts.map +0 -1
- package/dist/middleware/wrapper.js +0 -155
- package/dist/middleware/wrapper.js.map +0 -1
- package/dist/server.d.ts +0 -45
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -256
- package/dist/server.js.map +0 -1
- package/dist/types/index.d.ts +0 -228
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -23
- package/dist/types/index.js.map +0 -1
- package/scripts/sentinel-light.js +0 -234
package/dist/guard/risk-gate.js
DELETED
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RiskGate = exports.DEFAULT_RISK_THRESHOLDS = void 0;
|
|
4
|
-
const IMPACT_VALUES = {
|
|
5
|
-
local: 1,
|
|
6
|
-
workspace: 3,
|
|
7
|
-
project: 6,
|
|
8
|
-
system: 10,
|
|
9
|
-
};
|
|
10
|
-
const SENSITIVITY_VALUES = {
|
|
11
|
-
none: 0.0,
|
|
12
|
-
low: 0.3,
|
|
13
|
-
medium: 0.6,
|
|
14
|
-
high: 0.9,
|
|
15
|
-
critical: 1.0,
|
|
16
|
-
};
|
|
17
|
-
/**
|
|
18
|
-
* Default error rates by tool category (cold start).
|
|
19
|
-
*/
|
|
20
|
-
const DEFAULT_ERROR_RATES = {
|
|
21
|
-
read: 0.01,
|
|
22
|
-
write: 0.05,
|
|
23
|
-
delete: 0.10,
|
|
24
|
-
network: 0.08,
|
|
25
|
-
compute: 0.02,
|
|
26
|
-
};
|
|
27
|
-
// Danger patterns for content-based fallback (used when no profile registered)
|
|
28
|
-
const DANGER_PATTERNS = [
|
|
29
|
-
{ regex: new RegExp('rm\\s+-rf\\s+(?:[/~]|\\*)', 'i'), impact: 'system', reversibility: 0.0, sensitivity: 'critical' },
|
|
30
|
-
{ regex: new RegExp('sudo\\s+rm\\s+-rf', 'i'), impact: 'system', reversibility: 0.0, sensitivity: 'critical' },
|
|
31
|
-
{ regex: new RegExp('del\\s+[/][fsq]\\s+[a-z]:[\\\\]?', 'i'), impact: 'system', reversibility: 0.0, sensitivity: 'critical' },
|
|
32
|
-
{ regex: new RegExp('\\bmkfs\\b', 'i'), impact: 'system', reversibility: 0.0, sensitivity: 'critical' },
|
|
33
|
-
{ regex: new RegExp('\\bdd\\s+if=', 'i'), impact: 'system', reversibility: 0.0, sensitivity: 'critical' },
|
|
34
|
-
{ regex: new RegExp('chmod\\s+777\\s+-R', 'i'), impact: 'system', reversibility: 0.1, sensitivity: 'high' },
|
|
35
|
-
{ regex: /drop\s+(table|database|schema)/i, impact: 'project', reversibility: 0.0, sensitivity: 'critical' },
|
|
36
|
-
{ regex: /truncate\s+(table\s+)?/i, impact: 'project', reversibility: 0.0, sensitivity: 'high' },
|
|
37
|
-
{ regex: /git\s+push\s+[\w\s-]*--force/i, impact: 'project', reversibility: 0.2, sensitivity: 'high' },
|
|
38
|
-
{ regex: /git\s+reset\s+--hard/i, impact: 'project', reversibility: 0.3, sensitivity: 'high' },
|
|
39
|
-
{ regex: /npm\s+unpublish\b/i, impact: 'project', reversibility: 0.0, sensitivity: 'high' },
|
|
40
|
-
{ regex: /\.(?:env|key|pem|p12|pfx|jks|keystore)/i, impact: 'workspace', reversibility: 0.5, sensitivity: 'critical' },
|
|
41
|
-
];
|
|
42
|
-
/**
|
|
43
|
-
* Default thresholds — conservative but workable.
|
|
44
|
-
*/
|
|
45
|
-
exports.DEFAULT_RISK_THRESHOLDS = {
|
|
46
|
-
autoApprove: 0.5,
|
|
47
|
-
notify: 1.0,
|
|
48
|
-
confirm: 3.0,
|
|
49
|
-
deny: 8.0,
|
|
50
|
-
};
|
|
51
|
-
/**
|
|
52
|
-
* Risk Gate — deterministic, pure-math risk scoring.
|
|
53
|
-
*
|
|
54
|
-
* Formula: RiskScore = Impact × (1 - Reversibility) × Sensitivity × (1 + ErrorRate)
|
|
55
|
-
*
|
|
56
|
-
* Zero LLM dependency. The formula, thresholds, and mappings are all
|
|
57
|
-
* explicit and auditable.
|
|
58
|
-
*/
|
|
59
|
-
class RiskGate {
|
|
60
|
-
profiles = new Map();
|
|
61
|
-
stats = new Map();
|
|
62
|
-
thresholds;
|
|
63
|
-
constructor(thresholds = exports.DEFAULT_RISK_THRESHOLDS) {
|
|
64
|
-
this.thresholds = thresholds;
|
|
65
|
-
}
|
|
66
|
-
/** Register a risk profile for a tool */
|
|
67
|
-
registerProfile(profile) {
|
|
68
|
-
this.profiles.set(profile.tool, profile);
|
|
69
|
-
// Initialize stats if not already tracked
|
|
70
|
-
if (!this.stats.has(profile.tool)) {
|
|
71
|
-
const errorRate = profile.initialErrorRate ??
|
|
72
|
-
(profile.category ? (DEFAULT_ERROR_RATES[profile.category] ?? 0.05) : 0.05);
|
|
73
|
-
this.stats.set(profile.tool, {
|
|
74
|
-
totalCalls: 0,
|
|
75
|
-
failures: 0,
|
|
76
|
-
errorRate,
|
|
77
|
-
lastUpdated: Date.now(),
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
/** Register multiple profiles at once */
|
|
82
|
-
registerProfiles(profiles) {
|
|
83
|
-
profiles.forEach((p) => this.registerProfile(p));
|
|
84
|
-
}
|
|
85
|
-
/** Get all registered profiles */
|
|
86
|
-
getProfiles() {
|
|
87
|
-
return Array.from(this.profiles.values());
|
|
88
|
-
}
|
|
89
|
-
/** Check if a tool has a registered profile */
|
|
90
|
-
hasProfile(tool) {
|
|
91
|
-
return this.profiles.has(tool);
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Compute the risk score for a tool call.
|
|
95
|
-
*
|
|
96
|
-
* If no profile is registered, returns a default moderate-risk score
|
|
97
|
-
* (auto-approve with notification).
|
|
98
|
-
*/
|
|
99
|
-
evaluate(tool, _params) {
|
|
100
|
-
const profile = this.profiles.get(tool);
|
|
101
|
-
// Fallback for unregistered tools — content-based danger analysis
|
|
102
|
-
if (!profile) {
|
|
103
|
-
return this.evaluateUntracked(_params ?? {});
|
|
104
|
-
}
|
|
105
|
-
const impact = IMPACT_VALUES[profile.impact];
|
|
106
|
-
const reversibility = Math.min(1, Math.max(0, profile.reversibility));
|
|
107
|
-
const sensitivity = SENSITIVITY_VALUES[profile.sensitivity];
|
|
108
|
-
const stats = this.stats.get(profile.tool);
|
|
109
|
-
const errorRate = stats?.errorRate ?? 0.05;
|
|
110
|
-
const score = impact * (1 - reversibility) * sensitivity * (1 + errorRate);
|
|
111
|
-
const action = this.scoreToAction(score);
|
|
112
|
-
return {
|
|
113
|
-
score: Math.round(score * 100) / 100, // round to 2 decimal places
|
|
114
|
-
action,
|
|
115
|
-
dimensions: {
|
|
116
|
-
impact,
|
|
117
|
-
reversibility,
|
|
118
|
-
sensitivity,
|
|
119
|
-
errorRate: Math.round(errorRate * 1000) / 1000,
|
|
120
|
-
},
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Evaluate risk for an unregistered tool by scanning params for danger patterns.
|
|
125
|
-
*/
|
|
126
|
-
evaluateUntracked(params) {
|
|
127
|
-
const paramText = Object.values(params).join(' ');
|
|
128
|
-
for (const pattern of DANGER_PATTERNS) {
|
|
129
|
-
if (pattern.regex.test(paramText)) {
|
|
130
|
-
const impact = IMPACT_VALUES[pattern.impact];
|
|
131
|
-
const reversibility = Math.min(1, Math.max(0, pattern.reversibility));
|
|
132
|
-
const sensitivity = SENSITIVITY_VALUES[pattern.sensitivity];
|
|
133
|
-
const errorRate = DEFAULT_ERROR_RATES['write'] ?? 0.05;
|
|
134
|
-
const score = impact * (1 - reversibility) * sensitivity * (1 + errorRate);
|
|
135
|
-
let action;
|
|
136
|
-
if (score >= this.thresholds.deny)
|
|
137
|
-
action = 'deny';
|
|
138
|
-
else if (score >= this.thresholds.confirm)
|
|
139
|
-
action = 'confirm';
|
|
140
|
-
else if (score >= this.thresholds.notify)
|
|
141
|
-
action = 'notify';
|
|
142
|
-
else
|
|
143
|
-
action = 'auto';
|
|
144
|
-
return {
|
|
145
|
-
score: Math.round(score * 100) / 100,
|
|
146
|
-
action,
|
|
147
|
-
dimensions: { impact, reversibility, sensitivity, errorRate: Math.round(errorRate * 1000) / 1000 },
|
|
148
|
-
};
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
// No danger pattern matched — low risk
|
|
152
|
-
return {
|
|
153
|
-
score: 0.2,
|
|
154
|
-
action: 'auto',
|
|
155
|
-
dimensions: { impact: 1, reversibility: 1, sensitivity: 0, errorRate: 0 },
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
/** Record the outcome of a tool call to update stats */
|
|
159
|
-
recordOutcome(tool, success) {
|
|
160
|
-
const stats = this.stats.get(tool);
|
|
161
|
-
if (!stats)
|
|
162
|
-
return;
|
|
163
|
-
stats.totalCalls++;
|
|
164
|
-
if (!success)
|
|
165
|
-
stats.failures++;
|
|
166
|
-
stats.errorRate =
|
|
167
|
-
stats.totalCalls > 0 ? stats.failures / stats.totalCalls : 0;
|
|
168
|
-
stats.lastUpdated = Date.now();
|
|
169
|
-
}
|
|
170
|
-
/** Get tool statistics */
|
|
171
|
-
getStats(tool) {
|
|
172
|
-
return this.stats.get(tool);
|
|
173
|
-
}
|
|
174
|
-
/** Get all tool statistics */
|
|
175
|
-
getAllStats() {
|
|
176
|
-
return new Map(this.stats);
|
|
177
|
-
}
|
|
178
|
-
/** Update thresholds at runtime */
|
|
179
|
-
setThresholds(thresholds) {
|
|
180
|
-
this.thresholds = { ...this.thresholds, ...thresholds };
|
|
181
|
-
}
|
|
182
|
-
/** Get current thresholds */
|
|
183
|
-
getThresholds() {
|
|
184
|
-
return { ...this.thresholds };
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* Map a numeric risk score to the appropriate action.
|
|
188
|
-
*/
|
|
189
|
-
scoreToAction(score) {
|
|
190
|
-
if (score <= this.thresholds.autoApprove)
|
|
191
|
-
return 'auto';
|
|
192
|
-
if (score <= this.thresholds.notify)
|
|
193
|
-
return 'notify';
|
|
194
|
-
if (score <= this.thresholds.confirm)
|
|
195
|
-
return 'confirm';
|
|
196
|
-
return 'deny';
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
exports.RiskGate = RiskGate;
|
|
200
|
-
//# sourceMappingURL=risk-gate.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"risk-gate.js","sourceRoot":"","sources":["../../src/guard/risk-gate.ts"],"names":[],"mappings":"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"}
|
package/dist/guard/sandbox.d.ts
DELETED
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Execution mode — from DESIGN.md §4.5
|
|
3
|
-
*/
|
|
4
|
-
export type ExecutionMode = 'direct' | 'sandbox' | 'dry-run';
|
|
5
|
-
/**
|
|
6
|
-
* Network access policy for sandbox mode.
|
|
7
|
-
*/
|
|
8
|
-
export type NetworkPolicy = 'none' | 'localhost' | 'whitelist';
|
|
9
|
-
/**
|
|
10
|
-
* Execution context configuration — full DESIGN.md §4.5 interface.
|
|
11
|
-
*/
|
|
12
|
-
export interface ExecutionContext {
|
|
13
|
-
/** Execution mode */
|
|
14
|
-
mode: ExecutionMode;
|
|
15
|
-
/** Timeout in milliseconds */
|
|
16
|
-
timeoutMs: number;
|
|
17
|
-
/** Network policy (sandbox mode only) */
|
|
18
|
-
networkAccess?: NetworkPolicy;
|
|
19
|
-
/** Allowed network hosts (sandbox + whitelist mode only) */
|
|
20
|
-
networkWhitelist?: string[];
|
|
21
|
-
/** Writable paths (sandbox mode) */
|
|
22
|
-
writablePaths?: string[];
|
|
23
|
-
/** Read-only paths (sandbox mode) */
|
|
24
|
-
readonlyPaths?: string[];
|
|
25
|
-
/** Workspace root */
|
|
26
|
-
workspaceRoot: string;
|
|
27
|
-
/** Max output size before truncation */
|
|
28
|
-
maxOutputSize?: number;
|
|
29
|
-
/** Allowed tools in sandbox mode */
|
|
30
|
-
allowedTools?: string[];
|
|
31
|
-
/** Forbidden tools in any mode */
|
|
32
|
-
forbiddenTools?: string[];
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Sandbox execution result.
|
|
36
|
-
*/
|
|
37
|
-
export interface SandboxResult {
|
|
38
|
-
/** Execution outcome */
|
|
39
|
-
success: boolean;
|
|
40
|
-
/** Exit code (0 = success) */
|
|
41
|
-
exitCode: number;
|
|
42
|
-
/** stdout */
|
|
43
|
-
stdout: string;
|
|
44
|
-
/** stderr */
|
|
45
|
-
stderr: string;
|
|
46
|
-
/** Truncated flag */
|
|
47
|
-
truncated: boolean;
|
|
48
|
-
/** Error message if sandbox rejected */
|
|
49
|
-
sandboxRejectReason?: string;
|
|
50
|
-
/** Dry-run: what would have happened */
|
|
51
|
-
dryRunSummary?: string;
|
|
52
|
-
/** Execution time in ms */
|
|
53
|
-
durationMs: number;
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Sandbox Violation types.
|
|
57
|
-
*/
|
|
58
|
-
export declare enum SandboxViolation {
|
|
59
|
-
NETWORK_FORBIDDEN = "NETWORK_FORBIDDEN",
|
|
60
|
-
PATH_NOT_WRITABLE = "PATH_NOT_WRITABLE",
|
|
61
|
-
PATH_READONLY = "PATH_READONLY",
|
|
62
|
-
TOOL_FORBIDDEN = "TOOL_FORBIDDEN",
|
|
63
|
-
TOOL_NOT_ALLOWED = "TOOL_NOT_ALLOWED",
|
|
64
|
-
COMMAND_FORBIDDEN = "COMMAND_FORBIDDEN"
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Sandbox Executor — controlled execution environment.
|
|
68
|
-
*
|
|
69
|
-
* Implements three execution modes from DESIGN.md §4.5:
|
|
70
|
-
* - direct: Execute in shared environment (default, no sandboxing)
|
|
71
|
-
* - sandbox: Restricted execution with network + filesystem policies
|
|
72
|
-
* - dry-run: Preview only, no actual execution
|
|
73
|
-
*/
|
|
74
|
-
export declare class SandboxExecutor {
|
|
75
|
-
private config;
|
|
76
|
-
/** Forbidden shell commands (dangerous patterns) */
|
|
77
|
-
private static FORBIDDEN_COMMANDS;
|
|
78
|
-
constructor(config: ExecutionContext);
|
|
79
|
-
/**
|
|
80
|
-
* Validate and possibly reject a tool call before execution.
|
|
81
|
-
*
|
|
82
|
-
* @returns {SandboxResult} with sandboxRejectReason if rejected
|
|
83
|
-
*/
|
|
84
|
-
validate(toolName: string, params: Record<string, unknown>): SandboxResult | null;
|
|
85
|
-
/**
|
|
86
|
-
* Execute a shell command in the configured mode.
|
|
87
|
-
*/
|
|
88
|
-
execute(toolName: string, params: Record<string, unknown>): Promise<SandboxResult>;
|
|
89
|
-
/**
|
|
90
|
-
* Dry-run: return a summary of what would happen.
|
|
91
|
-
*/
|
|
92
|
-
private dryRun;
|
|
93
|
-
/**
|
|
94
|
-
* Execute shell commands with sandbox policies.
|
|
95
|
-
*/
|
|
96
|
-
private executeShell;
|
|
97
|
-
/**
|
|
98
|
-
* Build environment with sandbox network restrictions.
|
|
99
|
-
*/
|
|
100
|
-
private buildSandboxEnv;
|
|
101
|
-
/**
|
|
102
|
-
* Validate a filesystem path against sandbox policies.
|
|
103
|
-
*/
|
|
104
|
-
private validatePath;
|
|
105
|
-
/**
|
|
106
|
-
* Validate a shell command against forbidden patterns.
|
|
107
|
-
*/
|
|
108
|
-
private validateCommand;
|
|
109
|
-
private isShellTool;
|
|
110
|
-
private isWriteTool;
|
|
111
|
-
}
|
|
112
|
-
//# sourceMappingURL=sandbox.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../src/guard/sandbox.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAE7D;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,WAAW,GAAG,WAAW,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,qBAAqB;IACrB,IAAI,EAAE,aAAa,CAAC;IACpB,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,oCAAoC;IACpC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,qCAAqC;IACrC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,qBAAqB;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,wCAAwC;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,kCAAkC;IAClC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,wBAAwB;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa;IACb,MAAM,EAAE,MAAM,CAAC;IACf,aAAa;IACb,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,wCAAwC;IACxC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,wCAAwC;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,oBAAY,gBAAgB;IAC1B,iBAAiB,sBAAsB;IACvC,iBAAiB,sBAAsB;IACvC,aAAa,kBAAkB;IAC/B,cAAc,mBAAmB;IACjC,gBAAgB,qBAAqB;IACrC,iBAAiB,sBAAsB;CACxC;AAED;;;;;;;GAOG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAmB;IAEjC,oDAAoD;IACpD,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAU/B;gBAEU,MAAM,EAAE,gBAAgB;IAOpC;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa,GAAG,IAAI;IA6DjF;;OAEG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;IA6BxF;;OAEG;IACH,OAAO,CAAC,MAAM;IAiCd;;OAEG;YACW,YAAY;IAuD1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAsCvB;;OAEG;IACH,OAAO,CAAC,YAAY;IA0DpB;;OAEG;IACH,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,WAAW;CAQpB"}
|