@indemn/cli 1.0.0 → 1.1.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.
Files changed (106) hide show
  1. package/.claude-plugin/marketplace.json +28 -0
  2. package/README.md +29 -23
  3. package/dist/cli/agents.d.ts.map +1 -1
  4. package/dist/cli/agents.js +20 -0
  5. package/dist/cli/agents.js.map +1 -1
  6. package/dist/cli/eval.d.ts.map +1 -1
  7. package/dist/cli/eval.js +38 -0
  8. package/dist/cli/eval.js.map +1 -1
  9. package/dist/cli/index.js +1 -1
  10. package/dist/mcp/tools.d.ts.map +1 -1
  11. package/dist/mcp/tools.js +40 -0
  12. package/dist/mcp/tools.js.map +1 -1
  13. package/dist/report/agent-card/cover.d.ts +20 -0
  14. package/dist/report/agent-card/cover.d.ts.map +1 -0
  15. package/dist/report/agent-card/cover.js +58 -0
  16. package/dist/report/agent-card/cover.js.map +1 -0
  17. package/dist/report/agent-card/document.d.ts +7 -0
  18. package/dist/report/agent-card/document.d.ts.map +1 -0
  19. package/dist/report/agent-card/document.js +144 -0
  20. package/dist/report/agent-card/document.js.map +1 -0
  21. package/dist/report/agent-card/types.d.ts +77 -0
  22. package/dist/report/agent-card/types.d.ts.map +1 -0
  23. package/dist/report/agent-card/types.js +3 -0
  24. package/dist/report/agent-card/types.js.map +1 -0
  25. package/dist/report/assets/Indemn_PrimaryLogo_Iris.png +0 -0
  26. package/dist/report/assets/assets/Indemn_PrimaryLogo_Iris.png +0 -0
  27. package/dist/report/assets/assets/fonts/Barlow-Bold.ttf +0 -0
  28. package/dist/report/assets/assets/fonts/Barlow-Medium.ttf +0 -0
  29. package/dist/report/assets/assets/fonts/Barlow-Regular.ttf +0 -0
  30. package/dist/report/assets/assets/fonts/Barlow-SemiBold.ttf +0 -0
  31. package/dist/report/assets/fonts/Barlow-Bold.ttf +0 -0
  32. package/dist/report/assets/fonts/Barlow-Medium.ttf +0 -0
  33. package/dist/report/assets/fonts/Barlow-Regular.ttf +0 -0
  34. package/dist/report/assets/fonts/Barlow-SemiBold.ttf +0 -0
  35. package/dist/report/eval-report/cover.d.ts +16 -0
  36. package/dist/report/eval-report/cover.d.ts.map +1 -0
  37. package/dist/report/eval-report/cover.js +8 -0
  38. package/dist/report/eval-report/cover.js.map +1 -0
  39. package/dist/report/eval-report/document.d.ts +19 -0
  40. package/dist/report/eval-report/document.d.ts.map +1 -0
  41. package/dist/report/eval-report/document.js +32 -0
  42. package/dist/report/eval-report/document.js.map +1 -0
  43. package/dist/report/eval-report/example-page.d.ts +11 -0
  44. package/dist/report/eval-report/example-page.d.ts.map +1 -0
  45. package/dist/report/eval-report/example-page.js +18 -0
  46. package/dist/report/eval-report/example-page.js.map +1 -0
  47. package/dist/report/eval-report/item-page.d.ts +9 -0
  48. package/dist/report/eval-report/item-page.d.ts.map +1 -0
  49. package/dist/report/eval-report/item-page.js +72 -0
  50. package/dist/report/eval-report/item-page.js.map +1 -0
  51. package/dist/report/eval-report/matrix-page.d.ts +8 -0
  52. package/dist/report/eval-report/matrix-page.d.ts.map +1 -0
  53. package/dist/report/eval-report/matrix-page.js +31 -0
  54. package/dist/report/eval-report/matrix-page.js.map +1 -0
  55. package/dist/report/eval-report/types.d.ts +69 -0
  56. package/dist/report/eval-report/types.d.ts.map +1 -0
  57. package/dist/report/eval-report/types.js +7 -0
  58. package/dist/report/eval-report/types.js.map +1 -0
  59. package/dist/report/eval-report/v2-cover.d.ts +9 -0
  60. package/dist/report/eval-report/v2-cover.d.ts.map +1 -0
  61. package/dist/report/eval-report/v2-cover.js +32 -0
  62. package/dist/report/eval-report/v2-cover.js.map +1 -0
  63. package/dist/report/export.d.ts +17 -0
  64. package/dist/report/export.d.ts.map +1 -0
  65. package/dist/report/export.js +327 -0
  66. package/dist/report/export.js.map +1 -0
  67. package/dist/report/generate.d.ts +7 -0
  68. package/dist/report/generate.d.ts.map +1 -0
  69. package/dist/report/generate.js +30 -0
  70. package/dist/report/generate.js.map +1 -0
  71. package/dist/report/scoring.d.ts +90 -0
  72. package/dist/report/scoring.d.ts.map +1 -0
  73. package/dist/report/scoring.js +174 -0
  74. package/dist/report/scoring.js.map +1 -0
  75. package/dist/report/styles.d.ts +111 -0
  76. package/dist/report/styles.d.ts.map +1 -0
  77. package/dist/report/styles.js +134 -0
  78. package/dist/report/styles.js.map +1 -0
  79. package/docs/plans/2026-03-13-cli-exports.md +819 -0
  80. package/package.json +14 -4
  81. package/skills/eval-analysis/SKILL.md +178 -0
  82. package/skills/eval-analysis/references/data-shapes.md +279 -0
  83. package/src/cli/agents.ts +22 -0
  84. package/src/cli/eval.ts +42 -0
  85. package/src/cli/index.ts +1 -1
  86. package/src/mcp/tools.ts +50 -0
  87. package/src/report/agent-card/cover.tsx +232 -0
  88. package/src/report/agent-card/document.tsx +582 -0
  89. package/src/report/agent-card/types.ts +86 -0
  90. package/src/report/assets/Indemn_PrimaryLogo_Iris.png +0 -0
  91. package/src/report/assets/fonts/Barlow-Bold.ttf +0 -0
  92. package/src/report/assets/fonts/Barlow-Medium.ttf +0 -0
  93. package/src/report/assets/fonts/Barlow-Regular.ttf +0 -0
  94. package/src/report/assets/fonts/Barlow-SemiBold.ttf +0 -0
  95. package/src/report/eval-report/cover.tsx +69 -0
  96. package/src/report/eval-report/document.tsx +105 -0
  97. package/src/report/eval-report/example-page.tsx +121 -0
  98. package/src/report/eval-report/item-page.tsx +211 -0
  99. package/src/report/eval-report/matrix-page.tsx +124 -0
  100. package/src/report/eval-report/types.ts +77 -0
  101. package/src/report/eval-report/v2-cover.tsx +102 -0
  102. package/src/report/export.ts +394 -0
  103. package/src/report/generate.tsx +37 -0
  104. package/src/report/scoring.ts +281 -0
  105. package/src/report/styles.ts +138 -0
  106. package/tsconfig.json +2 -1
@@ -0,0 +1,174 @@
1
+ // src/report/scoring.ts — Scoring utilities ported from dashboard
2
+ // Pure arithmetic, no browser dependencies
3
+ // ---------------------------------------------------------------------------
4
+ // Thresholds
5
+ // ---------------------------------------------------------------------------
6
+ export const SCORE_THRESHOLDS = {
7
+ SUCCESS: 0.70,
8
+ WARNING: 0.50,
9
+ };
10
+ export const DEFAULT_WEIGHTS = {
11
+ High: 2,
12
+ Medium: 1,
13
+ Low: 0.5,
14
+ };
15
+ // ---------------------------------------------------------------------------
16
+ // Helpers
17
+ // ---------------------------------------------------------------------------
18
+ function sumComponentScores(cs) {
19
+ const scopes = ['prompt', 'knowledge_base', 'function', 'general'];
20
+ let passed = 0;
21
+ let total = 0;
22
+ for (const scope of scopes) {
23
+ passed += cs[scope]?.passed ?? 0;
24
+ total += cs[scope]?.total ?? 0;
25
+ }
26
+ return { passed, total };
27
+ }
28
+ // ---------------------------------------------------------------------------
29
+ // Run-level scoring
30
+ // ---------------------------------------------------------------------------
31
+ export function getRunScoreMetrics(run) {
32
+ let criteriaPassed;
33
+ let criteriaTotal;
34
+ let rubricRulesPassed;
35
+ let rubricRulesTotal;
36
+ if (run.criteria_total !== undefined && run.criteria_total > 0) {
37
+ criteriaPassed = run.criteria_passed ?? 0;
38
+ criteriaTotal = run.criteria_total;
39
+ }
40
+ else {
41
+ criteriaPassed = run.passed ?? 0;
42
+ criteriaTotal = run.completed ?? 0;
43
+ }
44
+ const hasNewRubricFields = run.rubric_rules_total !== undefined;
45
+ if (hasNewRubricFields) {
46
+ rubricRulesPassed = run.rubric_rules_passed ?? 0;
47
+ rubricRulesTotal = run.rubric_rules_total ?? 0;
48
+ }
49
+ else {
50
+ const cs = run.component_scores;
51
+ if (cs) {
52
+ const sums = sumComponentScores(cs);
53
+ rubricRulesPassed = sums.passed;
54
+ rubricRulesTotal = sums.total;
55
+ }
56
+ else {
57
+ rubricRulesPassed = 0;
58
+ rubricRulesTotal = 0;
59
+ }
60
+ }
61
+ const criteriaRate = criteriaTotal > 0 ? criteriaPassed / criteriaTotal : null;
62
+ const rubricRate = rubricRulesTotal > 0 ? rubricRulesPassed / rubricRulesTotal : null;
63
+ return { criteriaRate, rubricRate, criteriaPassed, criteriaTotal, rubricRulesPassed, rubricRulesTotal };
64
+ }
65
+ export function getRunCriteriaScore(run) {
66
+ const { criteriaRate } = getRunScoreMetrics(run);
67
+ return criteriaRate !== null ? Math.round(criteriaRate * 100) : null;
68
+ }
69
+ export function getRunRubricScore(run) {
70
+ const { rubricRate } = getRunScoreMetrics(run);
71
+ return rubricRate !== null ? Math.round(rubricRate * 100) : null;
72
+ }
73
+ // ---------------------------------------------------------------------------
74
+ // Result-level scoring
75
+ // ---------------------------------------------------------------------------
76
+ export function getResultsScoreMetrics(results) {
77
+ if (results.length === 0) {
78
+ return { criteriaRate: null, rubricRate: null, criteriaPassed: 0, criteriaTotal: 0, rubricRulesPassed: 0, rubricRulesTotal: 0 };
79
+ }
80
+ const allCriteria = results.flatMap((r) => r.criteria_scores || []);
81
+ const criteriaTotal = allCriteria.length;
82
+ const criteriaPassed = allCriteria.filter((c) => c.passed).length;
83
+ const criteriaRate = criteriaTotal > 0 ? criteriaPassed / criteriaTotal : null;
84
+ const allRubricScores = results.flatMap((r) => r.rubric_scores || []);
85
+ const rubricRulesTotal = allRubricScores.length;
86
+ const rubricRulesPassed = allRubricScores.filter((r) => r.passed).length;
87
+ const rubricRate = rubricRulesTotal > 0 ? rubricRulesPassed / rubricRulesTotal : null;
88
+ return { criteriaRate, rubricRate, criteriaPassed, criteriaTotal, rubricRulesPassed, rubricRulesTotal };
89
+ }
90
+ // ---------------------------------------------------------------------------
91
+ // Aggregate pass rate
92
+ // ---------------------------------------------------------------------------
93
+ export function getAggregatePassRate(runs) {
94
+ const completed = runs.filter((r) => r.status === 'completed');
95
+ if (completed.length === 0)
96
+ return null;
97
+ let totalPassed = 0;
98
+ let totalChecks = 0;
99
+ for (const run of completed) {
100
+ if (run.criteria_total !== undefined && run.criteria_total > 0) {
101
+ totalPassed += run.criteria_passed ?? 0;
102
+ totalChecks += run.criteria_total;
103
+ }
104
+ else {
105
+ totalPassed += run.passed ?? 0;
106
+ totalChecks += run.completed ?? 0;
107
+ }
108
+ }
109
+ return totalChecks > 0 ? totalPassed / totalChecks : null;
110
+ }
111
+ // ---------------------------------------------------------------------------
112
+ // Color utilities
113
+ // ---------------------------------------------------------------------------
114
+ export function getScoreColor(rate) {
115
+ if (rate === null || rate === undefined)
116
+ return 'error';
117
+ if (rate >= SCORE_THRESHOLDS.SUCCESS)
118
+ return 'success';
119
+ if (rate >= SCORE_THRESHOLDS.WARNING)
120
+ return 'warning';
121
+ return 'error';
122
+ }
123
+ export function getScoreColorClasses(rate) {
124
+ const color = getScoreColor(rate);
125
+ switch (color) {
126
+ case 'success':
127
+ return { text: 'text-success', bg: 'bg-success/10', bar: 'bg-success', hex: '#22c55e' };
128
+ case 'warning':
129
+ return { text: 'text-warning', bg: 'bg-warning/10', bar: 'bg-warning', hex: '#f59e0b' };
130
+ case 'error':
131
+ return { text: 'text-error', bg: 'bg-error/10', bar: 'bg-error', hex: '#ef4444' };
132
+ }
133
+ }
134
+ export function getScoreHexColor(rate) {
135
+ return getScoreColorClasses(rate).hex;
136
+ }
137
+ // ---------------------------------------------------------------------------
138
+ // Weighted score calculation (V1 reports)
139
+ // ---------------------------------------------------------------------------
140
+ export function calculateWeightedScores(matrixData, weights) {
141
+ const bySeverity = {
142
+ High: { total: 0, weight: 0, count: 0 },
143
+ Medium: { total: 0, weight: 0, count: 0 },
144
+ Low: { total: 0, weight: 0, count: 0 },
145
+ };
146
+ for (const evaluator of matrixData.evaluators) {
147
+ const avg = matrixData.columnAverages[evaluator.key] || 0;
148
+ const weight = weights[evaluator.severity];
149
+ bySeverity[evaluator.severity].total += avg * weight;
150
+ bySeverity[evaluator.severity].weight += weight;
151
+ bySeverity[evaluator.severity].count++;
152
+ }
153
+ let overallTotal = 0;
154
+ let overallWeight = 0;
155
+ const result = {
156
+ High: { score: 0, count: 0 },
157
+ Medium: { score: 0, count: 0 },
158
+ Low: { score: 0, count: 0 },
159
+ };
160
+ for (const severity of ['High', 'Medium', 'Low']) {
161
+ const data = bySeverity[severity];
162
+ result[severity] = {
163
+ score: data.weight > 0 ? data.total / data.weight : 0,
164
+ count: data.count,
165
+ };
166
+ overallTotal += data.total;
167
+ overallWeight += data.weight;
168
+ }
169
+ return {
170
+ overall: overallWeight > 0 ? overallTotal / overallWeight : 0,
171
+ bySeverity: result,
172
+ };
173
+ }
174
+ //# sourceMappingURL=scoring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoring.js","sourceRoot":"","sources":["../../src/report/scoring.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ export declare const logoPath: string;
2
+ export declare const colors: {
3
+ iris: string;
4
+ lilac: string;
5
+ eggplant: string;
6
+ white: string;
7
+ lime: string;
8
+ olive: string;
9
+ background: string;
10
+ muted: string;
11
+ border: string;
12
+ success: string;
13
+ error: string;
14
+ warning: string;
15
+ };
16
+ export declare const styles: {
17
+ page: {
18
+ fontFamily: string;
19
+ fontSize: number;
20
+ color: string;
21
+ backgroundColor: string;
22
+ padding: number;
23
+ };
24
+ pageHeader: {
25
+ flexDirection: "row";
26
+ justifyContent: "space-between";
27
+ alignItems: "center";
28
+ marginBottom: number;
29
+ paddingBottom: number;
30
+ borderBottomWidth: number;
31
+ borderBottomColor: string;
32
+ };
33
+ pageTitle: {
34
+ fontSize: number;
35
+ fontWeight: number;
36
+ color: string;
37
+ };
38
+ pageNumber: {
39
+ fontSize: number;
40
+ color: string;
41
+ };
42
+ sectionTitle: {
43
+ fontSize: number;
44
+ fontWeight: number;
45
+ color: string;
46
+ marginBottom: number;
47
+ };
48
+ bodyText: {
49
+ fontSize: number;
50
+ fontWeight: number;
51
+ color: string;
52
+ lineHeight: number;
53
+ marginBottom: number;
54
+ };
55
+ caption: {
56
+ fontSize: number;
57
+ fontWeight: number;
58
+ color: string;
59
+ };
60
+ card: {
61
+ backgroundColor: string;
62
+ borderRadius: number;
63
+ padding: number;
64
+ marginBottom: number;
65
+ };
66
+ metricValue: {
67
+ fontSize: number;
68
+ fontWeight: number;
69
+ color: string;
70
+ };
71
+ metricLabel: {
72
+ fontSize: number;
73
+ fontWeight: number;
74
+ color: string;
75
+ marginTop: number;
76
+ };
77
+ row: {
78
+ flexDirection: "row";
79
+ };
80
+ col: {
81
+ flex: number;
82
+ };
83
+ footer: {
84
+ position: "absolute";
85
+ bottom: number;
86
+ left: number;
87
+ right: number;
88
+ flexDirection: "row";
89
+ justifyContent: "space-between";
90
+ alignItems: "center";
91
+ paddingTop: number;
92
+ borderTopWidth: number;
93
+ borderTopColor: string;
94
+ };
95
+ scorePass: {
96
+ color: string;
97
+ };
98
+ scoreFail: {
99
+ color: string;
100
+ };
101
+ severityHigh: {
102
+ color: string;
103
+ };
104
+ severityMedium: {
105
+ color: string;
106
+ };
107
+ severityLow: {
108
+ color: string;
109
+ };
110
+ };
111
+ //# sourceMappingURL=styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/report/styles.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,QAAQ,QAAiD,CAAC;AAGvE,eAAO,MAAM,MAAM;;;;;;;;;;;;;CAiBlB,CAAC;AAGF,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+FjB,CAAC"}
@@ -0,0 +1,134 @@
1
+ // src/report/styles.ts — Brand styles and font registration for PDF reports
2
+ import { Font, StyleSheet } from '@react-pdf/renderer';
3
+ import { fileURLToPath } from 'url';
4
+ import { dirname, join } from 'path';
5
+ const __dirname = dirname(fileURLToPath(import.meta.url));
6
+ const assetsDir = join(__dirname, 'assets');
7
+ // Register Barlow font family from bundled files
8
+ Font.register({
9
+ family: 'Barlow',
10
+ fonts: [
11
+ { src: join(assetsDir, 'fonts', 'Barlow-Regular.ttf'), fontWeight: 400 },
12
+ { src: join(assetsDir, 'fonts', 'Barlow-Medium.ttf'), fontWeight: 500 },
13
+ { src: join(assetsDir, 'fonts', 'Barlow-SemiBold.ttf'), fontWeight: 600 },
14
+ { src: join(assetsDir, 'fonts', 'Barlow-Bold.ttf'), fontWeight: 700 },
15
+ ],
16
+ });
17
+ export const logoPath = join(assetsDir, 'Indemn_PrimaryLogo_Iris.png');
18
+ // Brand colors from Indemn Brand Guide
19
+ export const colors = {
20
+ // Primary brand colors
21
+ iris: '#4752a3',
22
+ lilac: '#a67cb7',
23
+ eggplant: '#1e2553',
24
+ white: '#ffffff',
25
+ // Supporting brand colors
26
+ lime: '#e0da67',
27
+ olive: '#2a2b1a',
28
+ // Derived UI colors
29
+ background: '#f4f3f8',
30
+ muted: '#6b7094',
31
+ border: '#d4d7e3',
32
+ // Semantic colors
33
+ success: '#22c55e',
34
+ error: '#ef4444',
35
+ warning: '#f59e0b',
36
+ };
37
+ // Shared styles
38
+ export const styles = StyleSheet.create({
39
+ page: {
40
+ fontFamily: 'Barlow',
41
+ fontSize: 11,
42
+ color: colors.eggplant,
43
+ backgroundColor: colors.white,
44
+ padding: 40,
45
+ },
46
+ pageHeader: {
47
+ flexDirection: 'row',
48
+ justifyContent: 'space-between',
49
+ alignItems: 'center',
50
+ marginBottom: 24,
51
+ paddingBottom: 12,
52
+ borderBottomWidth: 1,
53
+ borderBottomColor: colors.border,
54
+ },
55
+ pageTitle: {
56
+ fontSize: 18,
57
+ fontWeight: 600,
58
+ color: colors.iris,
59
+ },
60
+ pageNumber: {
61
+ fontSize: 9,
62
+ color: colors.muted,
63
+ },
64
+ sectionTitle: {
65
+ fontSize: 14,
66
+ fontWeight: 600,
67
+ color: colors.iris,
68
+ marginBottom: 12,
69
+ },
70
+ bodyText: {
71
+ fontSize: 11,
72
+ fontWeight: 400,
73
+ color: colors.eggplant,
74
+ lineHeight: 1.5,
75
+ marginBottom: 8,
76
+ },
77
+ caption: {
78
+ fontSize: 9,
79
+ fontWeight: 500,
80
+ color: colors.muted,
81
+ },
82
+ card: {
83
+ backgroundColor: colors.background,
84
+ borderRadius: 6,
85
+ padding: 16,
86
+ marginBottom: 12,
87
+ },
88
+ metricValue: {
89
+ fontSize: 28,
90
+ fontWeight: 700,
91
+ color: colors.eggplant,
92
+ },
93
+ metricLabel: {
94
+ fontSize: 10,
95
+ fontWeight: 500,
96
+ color: colors.muted,
97
+ marginTop: 4,
98
+ },
99
+ row: {
100
+ flexDirection: 'row',
101
+ },
102
+ col: {
103
+ flex: 1,
104
+ },
105
+ footer: {
106
+ position: 'absolute',
107
+ bottom: 30,
108
+ left: 40,
109
+ right: 40,
110
+ flexDirection: 'row',
111
+ justifyContent: 'space-between',
112
+ alignItems: 'center',
113
+ paddingTop: 12,
114
+ borderTopWidth: 1,
115
+ borderTopColor: colors.border,
116
+ },
117
+ // Evaluation-specific styles
118
+ scorePass: {
119
+ color: colors.success,
120
+ },
121
+ scoreFail: {
122
+ color: colors.error,
123
+ },
124
+ severityHigh: {
125
+ color: '#3a4389', // Dark iris
126
+ },
127
+ severityMedium: {
128
+ color: colors.iris, // Standard iris
129
+ },
130
+ severityLow: {
131
+ color: '#7c85c0', // Light iris
132
+ },
133
+ });
134
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/report/styles.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAErC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAE5C,iDAAiD;AACjD,IAAI,CAAC,QAAQ,CAAC;IACZ,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE;QACL,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,oBAAoB,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE;QACxE,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,mBAAmB,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE;QACvE,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,qBAAqB,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE;QACzE,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,iBAAiB,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE;KACtE;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC;AAEvE,uCAAuC;AACvC,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,uBAAuB;IACvB,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,SAAS;IACnB,KAAK,EAAE,SAAS;IAChB,0BAA0B;IAC1B,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;IAChB,oBAAoB;IACpB,UAAU,EAAE,SAAS;IACrB,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,SAAS;IACjB,kBAAkB;IAClB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,gBAAgB;AAChB,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE;QACJ,UAAU,EAAE,QAAQ;QACpB,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,MAAM,CAAC,QAAQ;QACtB,eAAe,EAAE,MAAM,CAAC,KAAK;QAC7B,OAAO,EAAE,EAAE;KACZ;IACD,UAAU,EAAE;QACV,aAAa,EAAE,KAAK;QACpB,cAAc,EAAE,eAAe;QAC/B,UAAU,EAAE,QAAQ;QACpB,YAAY,EAAE,EAAE;QAChB,aAAa,EAAE,EAAE;QACjB,iBAAiB,EAAE,CAAC;QACpB,iBAAiB,EAAE,MAAM,CAAC,MAAM;KACjC;IACD,SAAS,EAAE;QACT,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,GAAG;QACf,KAAK,EAAE,MAAM,CAAC,IAAI;KACnB;IACD,UAAU,EAAE;QACV,QAAQ,EAAE,CAAC;QACX,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB;IACD,YAAY,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,GAAG;QACf,KAAK,EAAE,MAAM,CAAC,IAAI;QAClB,YAAY,EAAE,EAAE;KACjB;IACD,QAAQ,EAAE;QACR,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,GAAG;QACf,KAAK,EAAE,MAAM,CAAC,QAAQ;QACtB,UAAU,EAAE,GAAG;QACf,YAAY,EAAE,CAAC;KAChB;IACD,OAAO,EAAE;QACP,QAAQ,EAAE,CAAC;QACX,UAAU,EAAE,GAAG;QACf,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB;IACD,IAAI,EAAE;QACJ,eAAe,EAAE,MAAM,CAAC,UAAU;QAClC,YAAY,EAAE,CAAC;QACf,OAAO,EAAE,EAAE;QACX,YAAY,EAAE,EAAE;KACjB;IACD,WAAW,EAAE;QACX,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,GAAG;QACf,KAAK,EAAE,MAAM,CAAC,QAAQ;KACvB;IACD,WAAW,EAAE;QACX,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,GAAG;QACf,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,SAAS,EAAE,CAAC;KACb;IACD,GAAG,EAAE;QACH,aAAa,EAAE,KAAK;KACrB;IACD,GAAG,EAAE;QACH,IAAI,EAAE,CAAC;KACR;IACD,MAAM,EAAE;QACN,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,EAAE;QACR,KAAK,EAAE,EAAE;QACT,aAAa,EAAE,KAAK;QACpB,cAAc,EAAE,eAAe;QAC/B,UAAU,EAAE,QAAQ;QACpB,UAAU,EAAE,EAAE;QACd,cAAc,EAAE,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC,MAAM;KAC9B;IACD,6BAA6B;IAC7B,SAAS,EAAE;QACT,KAAK,EAAE,MAAM,CAAC,OAAO;KACtB;IACD,SAAS,EAAE;QACT,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB;IACD,YAAY,EAAE;QACZ,KAAK,EAAE,SAAS,EAAE,YAAY;KAC/B;IACD,cAAc,EAAE;QACd,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,gBAAgB;KACrC;IACD,WAAW,EAAE;QACX,KAAK,EAAE,SAAS,EAAE,aAAa;KAChC;CACF,CAAC,CAAC"}