bidcraft-evaluate-mcp 0.2.0

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 ADDED
@@ -0,0 +1,79 @@
1
+ # bidcraft-evaluate-mcp
2
+
3
+ Bid/no-bid evaluation engine for RFP opportunities. Scores opportunities on 8 dimensions — strategic fit, customer relationship, technical capability, past performance, price competitiveness, resource availability, competitive landscape, and risk profile — to make data-driven pursuit decisions.
4
+
5
+ ## Tools
6
+
7
+ ### evaluate_opportunity
8
+ Score an RFP/bid opportunity across 8 weighted dimensions and get a clear BID / NO_BID / CONDITIONAL_BID recommendation with confidence level, risk factors, and mitigation strategies.
9
+
10
+ ### compare_opportunities
11
+ Rank multiple bid opportunities by expected value, ROI, strategic importance, and urgency. Outputs a prioritized pipeline with pursue/defer/conflict recommendations within your capacity constraints.
12
+
13
+ ### analyze_competitive_position
14
+ Assess your competitive strengths and vulnerabilities against known competitors criterion-by-criterion. Generates ghost strategies and identifies where to emphasize differentiators.
15
+
16
+ ### estimate_bid_cost
17
+ Calculate the full cost of pursuing an opportunity — labor, review cycles, graphics, travel, subcontractor coordination, and materials. Includes ROI analysis and break-even win rate.
18
+
19
+ ### generate_pursuit_plan
20
+ Create a structured capture plan with milestone timeline, team assignments, win themes, discriminators, competitive ghost strategies, risk register, and pre-submission checklist.
21
+
22
+ ## Installation
23
+
24
+ ```bash
25
+ npx bidcraft-evaluate-mcp
26
+ ```
27
+
28
+ ### Claude Desktop
29
+
30
+ Add to `claude_desktop_config.json`:
31
+
32
+ ```json
33
+ {
34
+ "mcpServers": {
35
+ "bidcraft-evaluate": {
36
+ "command": "npx",
37
+ "args": ["-y", "bidcraft-evaluate-mcp"]
38
+ }
39
+ }
40
+ }
41
+ ```
42
+
43
+ ## Example Usage
44
+
45
+ **Evaluate a bid opportunity:**
46
+ ```
47
+ Use evaluate_opportunity with opportunity_name "DOD Cyber Program", customer "US Army", contract_value 5000000, contract_type "firm_fixed_price", customer_relationship "existing_customer", pct_requirements_met 85, has_key_personnel true, win_probability 45
48
+ ```
49
+
50
+ **Compare pipeline opportunities:**
51
+ ```
52
+ Use compare_opportunities with 3-5 opportunities including contract_value, win_probability, strategic_value, and bid_cost for each
53
+ ```
54
+
55
+ **Analyze competitive position:**
56
+ ```
57
+ Use analyze_competitive_position with evaluation_criteria, your_scores, and competitor scores to see where you lead and where you're vulnerable
58
+ ```
59
+
60
+ ## Scoring Dimensions
61
+
62
+ | Dimension | Weight | What It Measures |
63
+ |-----------|--------|------------------|
64
+ | Strategic Fit | 15% | Alignment with strategy, market growth, new market entry |
65
+ | Customer Relationship | 15% | Incumbent status, existing rapport, access |
66
+ | Technical Capability | 20% | Requirements coverage, key personnel, solution maturity |
67
+ | Past Performance | 10% | Relevant experience, ratings, references |
68
+ | Price Competitiveness | 15% | Price vs market rate, margin adequacy, contract type risk |
69
+ | Resource Availability | 10% | Staff availability, hiring needs |
70
+ | Competitive Landscape | 10% | Number of competitors, incumbent advantage |
71
+ | Risk Profile | 5% | Contract risk, regulatory, protest likelihood |
72
+
73
+ ## Part of BidCraft
74
+
75
+ This MCP server is part of [BidCraft](https://bidcraft.site) — AI-powered RFP proposal generation and bid management platform.
76
+
77
+ ## License
78
+
79
+ MIT
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,778 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { z } from "zod";
5
+ // ── Scoring Constants ─────────────────────────────────────────────────
6
+ const DIMENSION_WEIGHTS = {
7
+ strategic_fit: 15,
8
+ customer_relationship: 15,
9
+ technical_capability: 20,
10
+ past_performance: 10,
11
+ price_competitiveness: 15,
12
+ resource_availability: 10,
13
+ competitive_landscape: 10,
14
+ risk_profile: 5,
15
+ };
16
+ const CONTRACT_TYPE_RISK = {
17
+ firm_fixed_price: 30,
18
+ cost_plus: 10,
19
+ time_and_materials: 15,
20
+ idiq: 20,
21
+ blanket_purchase: 15,
22
+ competitive_bid: 35,
23
+ sole_source: 5,
24
+ };
25
+ const RELATIONSHIP_SCORE = {
26
+ incumbent: 90,
27
+ existing_customer: 75,
28
+ known_prospect: 50,
29
+ cold: 25,
30
+ competitor_incumbent: 15,
31
+ };
32
+ // ── Scoring Functions ─────────────────────────────────────────────────
33
+ function scoreStrategicFit(aligns_with_strategy, market_growth, revenue_significance, // % of annual revenue
34
+ opens_new_market, referenceable) {
35
+ let score = 0;
36
+ const risks = [];
37
+ if (aligns_with_strategy)
38
+ score += 30;
39
+ else
40
+ risks.push("Opportunity does not align with strategic direction");
41
+ if (market_growth)
42
+ score += 20;
43
+ if (opens_new_market)
44
+ score += 20;
45
+ if (referenceable)
46
+ score += 15;
47
+ // Revenue significance: sweet spot is 5-20% of annual revenue
48
+ if (revenue_significance >= 5 && revenue_significance <= 20)
49
+ score += 15;
50
+ else if (revenue_significance > 20) {
51
+ score += 10;
52
+ risks.push(`Contract at ${revenue_significance}% of revenue creates concentration risk`);
53
+ }
54
+ else {
55
+ score += 5;
56
+ }
57
+ const rationale = `Strategic fit score based on alignment (${aligns_with_strategy ? "yes" : "no"}), market growth (${market_growth ? "yes" : "no"}), new market (${opens_new_market ? "yes" : "no"}), revenue significance (${revenue_significance}%)`;
58
+ return { score: Math.min(score, 100), rationale, risks };
59
+ }
60
+ function scoreTechnicalCapability(pct_requirements_met, has_key_personnel, has_past_similar_work, needs_teaming, tech_solution_maturity) {
61
+ let score = 0;
62
+ const risks = [];
63
+ score += pct_requirements_met * 0.4; // 0-40 points
64
+ if (has_key_personnel)
65
+ score += 20;
66
+ else
67
+ risks.push("Key personnel not identified or not available");
68
+ if (has_past_similar_work)
69
+ score += 15;
70
+ else
71
+ risks.push("No directly comparable past work");
72
+ if (needs_teaming) {
73
+ score += 5; // Some credit for recognizing the gap
74
+ risks.push("Teaming partner required — adds coordination risk and margin sharing");
75
+ }
76
+ else {
77
+ score += 15;
78
+ }
79
+ score += (tech_solution_maturity / 5) * 10;
80
+ const rationale = `Technical capability: ${pct_requirements_met}% requirements met, solution maturity ${tech_solution_maturity}/5, ${needs_teaming ? "teaming required" : "self-perform capable"}`;
81
+ return { score: Math.min(Math.round(score), 100), rationale, risks };
82
+ }
83
+ function scorePriceCompetitiveness(estimated_price, market_rate, contract_type, margin_target) {
84
+ const risks = [];
85
+ const priceRatio = estimated_price / market_rate;
86
+ let score;
87
+ if (priceRatio <= 0.85) {
88
+ score = 95;
89
+ if (margin_target < 10)
90
+ risks.push("Price is aggressive — margin may be insufficient to cover risk");
91
+ }
92
+ else if (priceRatio <= 0.95) {
93
+ score = 80;
94
+ }
95
+ else if (priceRatio <= 1.05) {
96
+ score = 60;
97
+ }
98
+ else if (priceRatio <= 1.15) {
99
+ score = 35;
100
+ risks.push("Price above market rate — need strong technical/value differentiators");
101
+ }
102
+ else {
103
+ score = 15;
104
+ risks.push("Price significantly above market — low probability of price competitiveness");
105
+ }
106
+ // Adjust for contract type risk
107
+ const typeRisk = CONTRACT_TYPE_RISK[contract_type];
108
+ if (contract_type === "firm_fixed_price" && margin_target < 15) {
109
+ risks.push("FFP contract with thin margin — cost overruns have no recovery mechanism");
110
+ }
111
+ const rationale = `Price competitiveness: estimated ${priceRatio.toFixed(2)}x market rate, ${contract_type.replace(/_/g, " ")} contract, ${margin_target}% target margin`;
112
+ return { score: Math.min(score, 100), rationale, risks };
113
+ }
114
+ function scoreRiskProfile(contract_type, contract_duration_months, protest_likely, regulatory_complexity, // 1-5
115
+ subcontracting_required, security_clearance_needed) {
116
+ const risks = [];
117
+ let riskScore = 0; // Lower is riskier, then we invert
118
+ // Contract type risk
119
+ riskScore += (100 - CONTRACT_TYPE_RISK[contract_type]) * 0.2;
120
+ // Duration risk
121
+ if (contract_duration_months <= 12)
122
+ riskScore += 20;
123
+ else if (contract_duration_months <= 36)
124
+ riskScore += 15;
125
+ else if (contract_duration_months <= 60)
126
+ riskScore += 10;
127
+ else {
128
+ riskScore += 5;
129
+ risks.push(`Long-term contract (${contract_duration_months} months) — forecasting accuracy decreases`);
130
+ }
131
+ // Protest risk
132
+ if (protest_likely) {
133
+ riskScore += 0;
134
+ risks.push("Protest likely — adds 3-6 months delay and legal costs");
135
+ }
136
+ else {
137
+ riskScore += 15;
138
+ }
139
+ // Regulatory complexity
140
+ riskScore += (5 - regulatory_complexity) * 5;
141
+ if (regulatory_complexity >= 4)
142
+ risks.push("High regulatory complexity increases compliance costs");
143
+ // Subcontracting
144
+ if (subcontracting_required) {
145
+ riskScore += 5;
146
+ risks.push("Subcontracting required — supply chain and coordination risk");
147
+ }
148
+ else {
149
+ riskScore += 15;
150
+ }
151
+ // Security clearance
152
+ if (security_clearance_needed) {
153
+ riskScore += 0;
154
+ risks.push("Security clearance requirements may limit available personnel");
155
+ }
156
+ else {
157
+ riskScore += 10;
158
+ }
159
+ const rationale = `Risk profile assessment: ${contract_type.replace(/_/g, " ")}, ${contract_duration_months} months, ${risks.length} risk factors identified`;
160
+ return { score: Math.min(Math.round(riskScore), 100), rationale, risks };
161
+ }
162
+ // ── Server Setup ──────────────────────────────────────────────────────
163
+ const server = new McpServer({
164
+ name: "bidcraft-evaluate-mcp",
165
+ version: "0.2.0",
166
+ });
167
+ // ── Tool: Evaluate Opportunity ────────────────────────────────────────
168
+ server.tool("evaluate_opportunity", "Score an RFP/bid opportunity on 8 dimensions and get a bid/no-bid recommendation with confidence level", {
169
+ opportunity_name: z.string().describe("Name/title of the opportunity"),
170
+ customer: z.string().describe("Customer/agency name"),
171
+ contract_value: z.number().positive().describe("Estimated contract value in USD"),
172
+ contract_type: z.enum(["firm_fixed_price", "cost_plus", "time_and_materials", "idiq", "blanket_purchase", "competitive_bid", "sole_source"]).describe("Contract type"),
173
+ contract_duration_months: z.number().min(1).describe("Contract duration in months"),
174
+ customer_relationship: z.enum(["incumbent", "existing_customer", "known_prospect", "cold", "competitor_incumbent"]).describe("Relationship with the customer"),
175
+ annual_revenue: z.number().positive().describe("Your company's annual revenue for concentration analysis"),
176
+ aligns_with_strategy: z.boolean().describe("Does this align with your strategic direction?"),
177
+ market_growth: z.boolean().describe("Is this in a growing market segment?"),
178
+ opens_new_market: z.boolean().describe("Does this open a new market or capability?"),
179
+ referenceable: z.boolean().describe("Would this be a good reference for future bids?"),
180
+ pct_requirements_met: z.number().min(0).max(100).describe("Percentage of technical requirements you can meet today"),
181
+ has_key_personnel: z.boolean().describe("Do you have the key personnel identified and available?"),
182
+ has_past_similar_work: z.boolean().describe("Do you have directly comparable past performance?"),
183
+ needs_teaming: z.boolean().describe("Do you need a teaming partner to be competitive?"),
184
+ tech_solution_maturity: z.number().min(1).max(5).describe("Solution maturity (1=concept, 5=production-ready)"),
185
+ estimated_price: z.number().positive().describe("Your estimated price"),
186
+ market_rate: z.number().positive().describe("Estimated market rate or government estimate"),
187
+ margin_target: z.number().min(0).max(100).describe("Target margin percentage"),
188
+ known_competitors: z.number().min(0).describe("Number of known competitors"),
189
+ competitor_incumbent: z.boolean().describe("Is there an incumbent competitor?"),
190
+ resource_availability_pct: z.number().min(0).max(100).describe("Percentage of needed resources currently available"),
191
+ protest_likely: z.boolean().describe("Is a bid protest likely?"),
192
+ regulatory_complexity: z.number().min(1).max(5).describe("Regulatory complexity (1=simple, 5=very complex)"),
193
+ subcontracting_required: z.boolean().describe("Is subcontracting required?"),
194
+ security_clearance_needed: z.boolean().describe("Are security clearances needed?"),
195
+ past_performance_rating: z.number().min(0).max(100).optional().describe("Past performance rating (0-100) from similar contracts"),
196
+ must_haves: z.array(z.object({
197
+ requirement: z.string(),
198
+ met: z.boolean(),
199
+ })).optional().describe("Must-have requirements with met/unmet status"),
200
+ }, async (params) => {
201
+ const dimensions = [];
202
+ // 1. Strategic Fit
203
+ const revSignificance = (params.contract_value / (params.contract_duration_months / 12)) / params.annual_revenue * 100;
204
+ const sf = scoreStrategicFit(params.aligns_with_strategy, params.market_growth, revSignificance, params.opens_new_market, params.referenceable);
205
+ dimensions.push({
206
+ dimension: "Strategic Fit",
207
+ score: sf.score,
208
+ weight: DIMENSION_WEIGHTS.strategic_fit,
209
+ weightedScore: (sf.score * DIMENSION_WEIGHTS.strategic_fit) / 100,
210
+ rationale: sf.rationale,
211
+ risks: sf.risks,
212
+ mitigations: sf.risks.map(r => r.includes("concentration") ? "Diversify pipeline to reduce dependency" : "Re-evaluate strategic alignment before committing resources"),
213
+ });
214
+ // 2. Customer Relationship
215
+ const relScore = RELATIONSHIP_SCORE[params.customer_relationship];
216
+ const relRisks = [];
217
+ if (params.customer_relationship === "cold")
218
+ relRisks.push("No existing relationship — requires significant pre-proposal engagement");
219
+ if (params.customer_relationship === "competitor_incumbent")
220
+ relRisks.push("Competitor is incumbent — must demonstrate clear superiority to unseat");
221
+ dimensions.push({
222
+ dimension: "Customer Relationship",
223
+ score: relScore,
224
+ weight: DIMENSION_WEIGHTS.customer_relationship,
225
+ weightedScore: (relScore * DIMENSION_WEIGHTS.customer_relationship) / 100,
226
+ rationale: `Customer relationship: ${params.customer_relationship.replace(/_/g, " ")} with ${params.customer}`,
227
+ risks: relRisks,
228
+ mitigations: relRisks.map(() => "Schedule pre-proposal meeting, attend industry days, leverage existing contacts"),
229
+ });
230
+ // 3. Technical Capability
231
+ const tc = scoreTechnicalCapability(params.pct_requirements_met, params.has_key_personnel, params.has_past_similar_work, params.needs_teaming, params.tech_solution_maturity);
232
+ dimensions.push({
233
+ dimension: "Technical Capability",
234
+ score: tc.score,
235
+ weight: DIMENSION_WEIGHTS.technical_capability,
236
+ weightedScore: (tc.score * DIMENSION_WEIGHTS.technical_capability) / 100,
237
+ rationale: tc.rationale,
238
+ risks: tc.risks,
239
+ mitigations: tc.risks.map(r => r.includes("personnel") ? "Recruit or reallocate key staff immediately" : r.includes("teaming") ? "Identify and engage teaming partners early" : "Build comparable experience through smaller contracts"),
240
+ });
241
+ // 4. Past Performance
242
+ const ppScore = params.past_performance_rating ?? (params.has_past_similar_work ? 70 : 30);
243
+ const ppRisks = [];
244
+ if (ppScore < 50)
245
+ ppRisks.push("Weak or no relevant past performance — significant evaluation weakness");
246
+ dimensions.push({
247
+ dimension: "Past Performance",
248
+ score: ppScore,
249
+ weight: DIMENSION_WEIGHTS.past_performance,
250
+ weightedScore: (ppScore * DIMENSION_WEIGHTS.past_performance) / 100,
251
+ rationale: `Past performance rating: ${ppScore}/100${params.has_past_similar_work ? " (similar work exists)" : " (no similar work)"}`,
252
+ risks: ppRisks,
253
+ mitigations: ppRisks.map(() => "Highlight adjacent relevant experience, use teaming partner's past performance"),
254
+ });
255
+ // 5. Price Competitiveness
256
+ const pc = scorePriceCompetitiveness(params.estimated_price, params.market_rate, params.contract_type, params.margin_target);
257
+ dimensions.push({
258
+ dimension: "Price Competitiveness",
259
+ score: pc.score,
260
+ weight: DIMENSION_WEIGHTS.price_competitiveness,
261
+ weightedScore: (pc.score * DIMENSION_WEIGHTS.price_competitiveness) / 100,
262
+ rationale: pc.rationale,
263
+ risks: pc.risks,
264
+ mitigations: pc.risks.map(r => r.includes("aggressive") ? "Validate cost model, add management reserve" : "Explore value engineering, subcontractor negotiations, or scope clarifications"),
265
+ });
266
+ // 6. Resource Availability
267
+ const raScore = params.resource_availability_pct;
268
+ const raRisks = [];
269
+ if (raScore < 50)
270
+ raRisks.push(`Only ${raScore}% of resources available — significant hiring/allocation needed`);
271
+ else if (raScore < 80)
272
+ raRisks.push(`${raScore}% resource availability — some hiring or reallocation needed`);
273
+ dimensions.push({
274
+ dimension: "Resource Availability",
275
+ score: raScore,
276
+ weight: DIMENSION_WEIGHTS.resource_availability,
277
+ weightedScore: (raScore * DIMENSION_WEIGHTS.resource_availability) / 100,
278
+ rationale: `${raScore}% of needed resources currently available`,
279
+ risks: raRisks,
280
+ mitigations: raRisks.map(() => "Begin recruiting immediately, identify internal transfers, engage staffing partners"),
281
+ });
282
+ // 7. Competitive Landscape
283
+ let compScore;
284
+ const compRisks = [];
285
+ if (params.known_competitors === 0) {
286
+ compScore = 85;
287
+ }
288
+ else if (params.known_competitors <= 2) {
289
+ compScore = 70;
290
+ }
291
+ else if (params.known_competitors <= 5) {
292
+ compScore = 50;
293
+ }
294
+ else {
295
+ compScore = 25;
296
+ compRisks.push(`${params.known_competitors} known competitors — highly competitive field`);
297
+ }
298
+ if (params.competitor_incumbent) {
299
+ compScore = Math.max(compScore - 20, 5);
300
+ compRisks.push("Incumbent competitor has significant advantage in evaluation");
301
+ }
302
+ dimensions.push({
303
+ dimension: "Competitive Landscape",
304
+ score: compScore,
305
+ weight: DIMENSION_WEIGHTS.competitive_landscape,
306
+ weightedScore: (compScore * DIMENSION_WEIGHTS.competitive_landscape) / 100,
307
+ rationale: `${params.known_competitors} known competitors, ${params.competitor_incumbent ? "incumbent present" : "no incumbent"}`,
308
+ risks: compRisks,
309
+ mitigations: compRisks.map(r => r.includes("incumbent") ? "Develop compelling ghost strategy against incumbent weaknesses" : "Focus on unique differentiators and win themes"),
310
+ });
311
+ // 8. Risk Profile
312
+ const rp = scoreRiskProfile(params.contract_type, params.contract_duration_months, params.protest_likely, params.regulatory_complexity, params.subcontracting_required, params.security_clearance_needed);
313
+ dimensions.push({
314
+ dimension: "Risk Profile",
315
+ score: rp.score,
316
+ weight: DIMENSION_WEIGHTS.risk_profile,
317
+ weightedScore: (rp.score * DIMENSION_WEIGHTS.risk_profile) / 100,
318
+ rationale: rp.rationale,
319
+ risks: rp.risks,
320
+ mitigations: rp.risks.map(() => "Develop detailed risk mitigation plan, allocate management reserve"),
321
+ });
322
+ // Calculate overall
323
+ const overallScore = Math.round(dimensions.reduce((a, d) => a + d.weightedScore, 0));
324
+ // Must-haves check
325
+ const mustHaves = {
326
+ met: (params.must_haves ?? []).filter(m => m.met).map(m => m.requirement),
327
+ unmet: (params.must_haves ?? []).filter(m => !m.met).map(m => m.requirement),
328
+ };
329
+ // Decision
330
+ let recommendation;
331
+ let confidence;
332
+ if (mustHaves.unmet.length > 0) {
333
+ recommendation = "NO_BID";
334
+ confidence = "high";
335
+ }
336
+ else if (overallScore >= 70) {
337
+ recommendation = "BID";
338
+ confidence = overallScore >= 80 ? "high" : "medium";
339
+ }
340
+ else if (overallScore >= 50) {
341
+ recommendation = "CONDITIONAL_BID";
342
+ confidence = "medium";
343
+ }
344
+ else {
345
+ recommendation = "NO_BID";
346
+ confidence = overallScore < 35 ? "high" : "medium";
347
+ }
348
+ // Collect top risks and strengths
349
+ const allRisks = dimensions.flatMap(d => d.risks);
350
+ const topStrengths = dimensions.filter(d => d.score >= 70).sort((a, b) => b.score - a.score).map(d => `${d.dimension}: ${d.score}/100`);
351
+ // Build output
352
+ let output = `# Bid/No-Bid Evaluation: ${params.opportunity_name}\n\n`;
353
+ output += `**Customer:** ${params.customer}\n`;
354
+ output += `**Contract Value:** $${params.contract_value.toLocaleString()}\n`;
355
+ output += `**Contract Type:** ${params.contract_type.replace(/_/g, " ")}\n`;
356
+ output += `**Duration:** ${params.contract_duration_months} months\n\n`;
357
+ // Decision box
358
+ output += `## RECOMMENDATION: ${recommendation.replace(/_/g, " ")}\n`;
359
+ output += `**Overall Score:** ${overallScore}/100 | **Confidence:** ${confidence}\n\n`;
360
+ if (recommendation === "CONDITIONAL_BID") {
361
+ output += `> Conditions for proceeding:\n`;
362
+ for (const d of dimensions.filter(d => d.score < 50)) {
363
+ output += `> - Address ${d.dimension} weakness (currently ${d.score}/100)\n`;
364
+ }
365
+ output += `\n`;
366
+ }
367
+ // Dimension scores
368
+ output += `## Scoring Breakdown\n\n`;
369
+ output += `| Dimension | Score | Weight | Weighted | Assessment |\n`;
370
+ output += `|-----------|-------|--------|----------|------------|\n`;
371
+ for (const d of dimensions.sort((a, b) => b.weightedScore - a.weightedScore)) {
372
+ const assessment = d.score >= 80 ? "Strong" : d.score >= 60 ? "Adequate" : d.score >= 40 ? "Weak" : "Critical";
373
+ output += `| ${d.dimension} | ${d.score}/100 | ${d.weight}% | ${d.weightedScore.toFixed(1)} | ${assessment} |\n`;
374
+ }
375
+ output += `| **TOTAL** | **${overallScore}/100** | **100%** | **${overallScore}** | |\n`;
376
+ // Strengths & Risks
377
+ if (topStrengths.length > 0) {
378
+ output += `\n## Strengths\n`;
379
+ for (const s of topStrengths)
380
+ output += `- ${s}\n`;
381
+ }
382
+ if (allRisks.length > 0) {
383
+ output += `\n## Risk Factors\n`;
384
+ for (const r of allRisks)
385
+ output += `- ${r}\n`;
386
+ }
387
+ // Must-haves
388
+ if (mustHaves.met.length > 0 || mustHaves.unmet.length > 0) {
389
+ output += `\n## Must-Have Requirements\n`;
390
+ for (const m of mustHaves.met)
391
+ output += `- [x] ${m}\n`;
392
+ for (const m of mustHaves.unmet)
393
+ output += `- [ ] **UNMET:** ${m}\n`;
394
+ }
395
+ // Detailed dimension analysis
396
+ output += `\n## Detailed Analysis\n`;
397
+ for (const d of dimensions) {
398
+ output += `\n### ${d.dimension} (${d.score}/100)\n`;
399
+ output += `${d.rationale}\n`;
400
+ if (d.risks.length > 0) {
401
+ output += `\n**Risks:**\n`;
402
+ for (let i = 0; i < d.risks.length; i++) {
403
+ output += `- ${d.risks[i]}\n`;
404
+ if (d.mitigations[i])
405
+ output += ` - *Mitigation:* ${d.mitigations[i]}\n`;
406
+ }
407
+ }
408
+ }
409
+ output += `\n---\n*Generated by BidCraft Evaluate MCP — https://bidcraft.site*`;
410
+ return { content: [{ type: "text", text: output }] };
411
+ });
412
+ // ── Tool: Compare Opportunities ───────────────────────────────────────
413
+ server.tool("compare_opportunities", "Rank multiple bid opportunities by win probability and strategic value to prioritize your pipeline", {
414
+ opportunities: z.array(z.object({
415
+ name: z.string(),
416
+ contract_value: z.number().positive(),
417
+ win_probability: z.number().min(0).max(100).describe("Estimated win probability (0-100)"),
418
+ strategic_value: z.number().min(1).max(10).describe("Strategic value (1-10)"),
419
+ bid_cost: z.number().positive().describe("Estimated cost to bid"),
420
+ margin_pct: z.number().min(0).describe("Expected margin percentage"),
421
+ deadline_days: z.number().min(0).describe("Days until proposal deadline"),
422
+ resource_conflict: z.boolean().describe("Does this conflict with other pursuits?"),
423
+ })).min(2).max(20).describe("Opportunities to compare"),
424
+ max_concurrent_bids: z.number().min(1).max(20).default(5).describe("Maximum concurrent bids your team can handle"),
425
+ annual_bid_budget: z.number().positive().optional().describe("Annual budget for bid/proposal activities"),
426
+ }, async ({ opportunities, max_concurrent_bids, annual_bid_budget }) => {
427
+ // Calculate expected value and ROI for each
428
+ const scored = opportunities.map(o => {
429
+ const expectedValue = (o.contract_value * o.margin_pct / 100) * (o.win_probability / 100);
430
+ const bidROI = o.bid_cost > 0 ? expectedValue / o.bid_cost : 0;
431
+ const urgency = o.deadline_days <= 7 ? "URGENT" : o.deadline_days <= 14 ? "Soon" : o.deadline_days <= 30 ? "Normal" : "Flexible";
432
+ // Composite score: weighted combination
433
+ const compositeScore = (o.win_probability * 0.35) + (o.strategic_value * 8 * 0.25) + (Math.min(bidROI * 10, 100) * 0.25) + ((1 - (o.resource_conflict ? 0.5 : 0)) * 100 * 0.15);
434
+ return { ...o, expectedValue, bidROI, urgency, compositeScore: Math.round(compositeScore) };
435
+ });
436
+ // Sort by composite score
437
+ scored.sort((a, b) => b.compositeScore - a.compositeScore);
438
+ let output = `# Pipeline Opportunity Ranking\n\n`;
439
+ output += `**Opportunities Evaluated:** ${scored.length}\n`;
440
+ output += `**Max Concurrent Bids:** ${max_concurrent_bids}\n`;
441
+ if (annual_bid_budget)
442
+ output += `**Annual Bid Budget:** $${annual_bid_budget.toLocaleString()}\n`;
443
+ // Summary table
444
+ output += `\n## Ranked Opportunities\n\n`;
445
+ output += `| Rank | Opportunity | Value | Win% | EV | Bid Cost | ROI | Strategic | Score | Action |\n`;
446
+ output += `|------|-------------|-------|------|-----|----------|-----|-----------|-------|--------|\n`;
447
+ let totalBidCost = 0;
448
+ for (let i = 0; i < scored.length; i++) {
449
+ const o = scored[i];
450
+ totalBidCost += o.bid_cost;
451
+ const withinCapacity = i < max_concurrent_bids;
452
+ const withinBudget = !annual_bid_budget || totalBidCost <= annual_bid_budget;
453
+ const action = (withinCapacity && withinBudget && !o.resource_conflict) ? "PURSUE" : o.resource_conflict ? "CONFLICT" : !withinCapacity ? "DEFER" : "OVER BUDGET";
454
+ output += `| ${i + 1} | ${o.name} | $${(o.contract_value / 1000).toFixed(0)}K | ${o.win_probability}% | $${(o.expectedValue / 1000).toFixed(0)}K | $${(o.bid_cost / 1000).toFixed(0)}K | ${o.bidROI.toFixed(1)}x | ${o.strategic_value}/10 | ${o.compositeScore} | ${action} |\n`;
455
+ }
456
+ // Portfolio analysis
457
+ const pursued = scored.slice(0, max_concurrent_bids).filter(o => !o.resource_conflict);
458
+ const totalPipelineValue = scored.reduce((a, o) => a + o.contract_value, 0);
459
+ const totalExpectedValue = pursued.reduce((a, o) => a + o.expectedValue, 0);
460
+ const totalBidInvestment = pursued.reduce((a, o) => a + o.bid_cost, 0);
461
+ output += `\n## Portfolio Summary\n\n`;
462
+ output += `| Metric | Value |\n`;
463
+ output += `|--------|-------|\n`;
464
+ output += `| Total Pipeline | $${(totalPipelineValue / 1000).toFixed(0)}K |\n`;
465
+ output += `| Pursued (${pursued.length} bids) | $${(pursued.reduce((a, o) => a + o.contract_value, 0) / 1000).toFixed(0)}K |\n`;
466
+ output += `| Total Expected Value | $${(totalExpectedValue / 1000).toFixed(0)}K |\n`;
467
+ output += `| Total Bid Investment | $${(totalBidInvestment / 1000).toFixed(0)}K |\n`;
468
+ output += `| Portfolio ROI | ${totalBidInvestment > 0 ? (totalExpectedValue / totalBidInvestment).toFixed(1) : 0}x |\n`;
469
+ output += `| Avg Win Probability | ${(pursued.reduce((a, o) => a + o.win_probability, 0) / Math.max(pursued.length, 1)).toFixed(0)}% |\n`;
470
+ // Urgency calendar
471
+ const urgent = scored.filter(o => o.deadline_days <= 14);
472
+ if (urgent.length > 0) {
473
+ output += `\n## Urgent Deadlines\n`;
474
+ for (const o of urgent.sort((a, b) => a.deadline_days - b.deadline_days)) {
475
+ output += `- **${o.name}** — ${o.deadline_days} days (${o.urgency})\n`;
476
+ }
477
+ }
478
+ // Resource conflicts
479
+ const conflicts = scored.filter(o => o.resource_conflict);
480
+ if (conflicts.length > 0) {
481
+ output += `\n## Resource Conflicts\n`;
482
+ for (const o of conflicts) {
483
+ output += `- ${o.name} — resolve conflict before pursuing (EV: $${(o.expectedValue / 1000).toFixed(0)}K at risk)\n`;
484
+ }
485
+ }
486
+ output += `\n---\n*Generated by BidCraft Evaluate MCP — https://bidcraft.site*`;
487
+ return { content: [{ type: "text", text: output }] };
488
+ });
489
+ // ── Tool: Competitive Position ────────────────────────────────────────
490
+ server.tool("analyze_competitive_position", "Assess your competitive advantages and weaknesses against known competitors for a specific opportunity", {
491
+ opportunity_name: z.string(),
492
+ evaluation_criteria: z.array(z.object({
493
+ criterion: z.string().describe("Evaluation criterion name"),
494
+ weight: z.number().min(1).max(100).describe("Weight in evaluation (must sum to 100)"),
495
+ })).min(3).describe("Evaluation criteria with weights"),
496
+ your_scores: z.record(z.string(), z.number().min(0).max(100)).describe("Your scores per criterion (0-100)"),
497
+ competitors: z.array(z.object({
498
+ name: z.string(),
499
+ scores: z.record(z.string(), z.number().min(0).max(100)).describe("Competitor scores per criterion"),
500
+ known_strengths: z.array(z.string()).optional(),
501
+ known_weaknesses: z.array(z.string()).optional(),
502
+ })).min(1).max(10).describe("Competitors with scores"),
503
+ }, async ({ opportunity_name, evaluation_criteria, your_scores, competitors }) => {
504
+ const criteria = evaluation_criteria.map(c => c.criterion);
505
+ // Calculate weighted scores
506
+ const yourWeighted = criteria.reduce((sum, c) => {
507
+ const weight = evaluation_criteria.find(e => e.criterion === c)?.weight ?? 0;
508
+ return sum + ((your_scores[c] ?? 0) * weight) / 100;
509
+ }, 0);
510
+ const compResults = competitors.map(comp => {
511
+ const weighted = criteria.reduce((sum, c) => {
512
+ const weight = evaluation_criteria.find(e => e.criterion === c)?.weight ?? 0;
513
+ return sum + ((comp.scores[c] ?? 0) * weight) / 100;
514
+ }, 0);
515
+ return { ...comp, weightedScore: Math.round(weighted) };
516
+ });
517
+ // Sort all by score
518
+ const allEntities = [
519
+ { name: "YOUR BID", weightedScore: Math.round(yourWeighted), isYou: true },
520
+ ...compResults.map(c => ({ name: c.name, weightedScore: c.weightedScore, isYou: false })),
521
+ ].sort((a, b) => b.weightedScore - a.weightedScore);
522
+ const yourRank = allEntities.findIndex(e => e.isYou) + 1;
523
+ let output = `# Competitive Position Analysis: ${opportunity_name}\n\n`;
524
+ output += `**Your Position:** Rank ${yourRank} of ${allEntities.length} | Score: ${Math.round(yourWeighted)}/100\n\n`;
525
+ // Ranking table
526
+ output += `## Overall Ranking\n\n`;
527
+ output += `| Rank | Bidder | Weighted Score | Gap |\n`;
528
+ output += `|------|--------|---------------|-----|\n`;
529
+ for (let i = 0; i < allEntities.length; i++) {
530
+ const e = allEntities[i];
531
+ const gap = e.weightedScore - Math.round(yourWeighted);
532
+ output += `| ${i + 1} | ${e.isYou ? "**" + e.name + "**" : e.name} | ${e.weightedScore}/100 | ${gap > 0 ? "+" : ""}${gap} |\n`;
533
+ }
534
+ // Criterion-by-criterion breakdown
535
+ output += `\n## Criterion Breakdown\n\n`;
536
+ output += `| Criterion | Weight | Your Score | ${competitors.map(c => c.name).join(" | ")} | Your Rank |\n`;
537
+ output += `|-----------|--------|------------|${competitors.map(() => "--------").join("|")}|-----------|\n`;
538
+ for (const c of criteria) {
539
+ const weight = evaluation_criteria.find(e => e.criterion === c)?.weight ?? 0;
540
+ const yours = your_scores[c] ?? 0;
541
+ const compScores = competitors.map(comp => comp.scores[c] ?? 0);
542
+ const allScores = [yours, ...compScores].sort((a, b) => b - a);
543
+ const rank = allScores.indexOf(yours) + 1;
544
+ output += `| ${c} | ${weight}% | ${yours} | ${compScores.join(" | ")} | ${rank} |\n`;
545
+ }
546
+ // Strengths and vulnerabilities
547
+ output += `\n## Your Competitive Advantages\n`;
548
+ for (const c of criteria) {
549
+ const yours = your_scores[c] ?? 0;
550
+ const bestComp = Math.max(...competitors.map(comp => comp.scores[c] ?? 0));
551
+ if (yours > bestComp) {
552
+ output += `- **${c}** — you lead by ${yours - bestComp} points. Emphasize this in your proposal.\n`;
553
+ }
554
+ }
555
+ output += `\n## Vulnerabilities\n`;
556
+ for (const c of criteria) {
557
+ const yours = your_scores[c] ?? 0;
558
+ const bestComp = Math.max(...competitors.map(comp => comp.scores[c] ?? 0));
559
+ if (yours < bestComp) {
560
+ const leader = competitors.find(comp => (comp.scores[c] ?? 0) === bestComp)?.name ?? "Unknown";
561
+ output += `- **${c}** — ${leader} leads by ${bestComp - yours} points. Develop ghost strategy or mitigation.\n`;
562
+ }
563
+ }
564
+ // Ghost strategies per competitor
565
+ output += `\n## Ghost Strategies\n`;
566
+ for (const comp of compResults) {
567
+ output += `\n### vs ${comp.name} (Score: ${comp.weightedScore})\n`;
568
+ if (comp.known_weaknesses && comp.known_weaknesses.length > 0) {
569
+ output += `**Known weaknesses to exploit:**\n`;
570
+ for (const w of comp.known_weaknesses)
571
+ output += `- ${w}\n`;
572
+ }
573
+ // Find criteria where you beat them
574
+ const yourAdvantages = criteria.filter(c => (your_scores[c] ?? 0) > (comp.scores[c] ?? 0));
575
+ if (yourAdvantages.length > 0) {
576
+ output += `**Your advantages:** ${yourAdvantages.join(", ")}\n`;
577
+ }
578
+ // Find criteria where they beat you
579
+ const theirAdvantages = criteria.filter(c => (comp.scores[c] ?? 0) > (your_scores[c] ?? 0));
580
+ if (theirAdvantages.length > 0) {
581
+ output += `**Their advantages:** ${theirAdvantages.join(", ")}\n`;
582
+ }
583
+ }
584
+ output += `\n---\n*Generated by BidCraft Evaluate MCP — https://bidcraft.site*`;
585
+ return { content: [{ type: "text", text: output }] };
586
+ });
587
+ // ── Tool: Estimate Bid Cost ───────────────────────────────────────────
588
+ server.tool("estimate_bid_cost", "Calculate the cost of pursuing an opportunity — labor, materials, travel, subcontractors, and opportunity cost", {
589
+ opportunity_name: z.string(),
590
+ proposal_complexity: z.enum(["simple", "moderate", "complex", "very_complex"]).describe("Overall proposal complexity"),
591
+ page_limit: z.number().min(1).optional().describe("Proposal page limit"),
592
+ volumes_required: z.array(z.string()).default(["technical", "management", "past_performance", "cost"]).describe("Proposal volumes required"),
593
+ proposal_team_size: z.number().min(1).describe("Number of people on the proposal team"),
594
+ avg_hourly_rate: z.number().positive().describe("Average loaded hourly rate for proposal team"),
595
+ estimated_weeks: z.number().min(1).describe("Weeks to complete the proposal"),
596
+ travel_trips: z.number().min(0).default(0).describe("Number of customer visits/site surveys"),
597
+ travel_cost_per_trip: z.number().min(0).default(2000).describe("Average cost per trip"),
598
+ subcontractor_coordination: z.number().min(0).default(0).describe("Number of subcontractors to coordinate"),
599
+ graphic_design_hours: z.number().min(0).default(0).describe("Hours of graphic design support"),
600
+ graphic_hourly_rate: z.number().min(0).default(95).describe("Graphic designer hourly rate"),
601
+ review_cycles: z.number().min(1).default(3).describe("Number of formal review cycles (pink/red/gold)"),
602
+ contract_value: z.number().positive().describe("Expected contract value for ROI calculation"),
603
+ win_probability: z.number().min(0).max(100).describe("Estimated win probability"),
604
+ }, async (params) => {
605
+ // Complexity multiplier
606
+ const complexityMult = { simple: 0.7, moderate: 1.0, complex: 1.4, very_complex: 1.8 }[params.proposal_complexity];
607
+ // Labor cost
608
+ const weeklyHours = 40;
609
+ const proposalHours = params.proposal_team_size * weeklyHours * params.estimated_weeks * complexityMult;
610
+ const laborCost = proposalHours * params.avg_hourly_rate;
611
+ // Review overhead (each review cycle adds ~15% overhead)
612
+ const reviewOverhead = laborCost * (params.review_cycles * 0.15);
613
+ // Graphics
614
+ const graphicsCost = params.graphic_design_hours * params.graphic_hourly_rate;
615
+ // Travel
616
+ const travelCost = params.travel_trips * params.travel_cost_per_trip;
617
+ // Subcontractor coordination (~20 hours per sub)
618
+ const subCost = params.subcontractor_coordination * 20 * params.avg_hourly_rate;
619
+ // Materials & printing
620
+ const materialsCost = (params.page_limit ?? 100) * params.volumes_required.length * 2; // ~$2 per page per volume for printing
621
+ // Total
622
+ const totalCost = laborCost + reviewOverhead + graphicsCost + travelCost + subCost + materialsCost;
623
+ // ROI analysis
624
+ const expectedProfit = (params.contract_value * 0.10) * (params.win_probability / 100); // assume 10% profit margin
625
+ const bidROI = totalCost > 0 ? expectedProfit / totalCost : 0;
626
+ let output = `# Bid Cost Estimate: ${params.opportunity_name}\n\n`;
627
+ output += `**Proposal Complexity:** ${params.proposal_complexity}\n`;
628
+ output += `**Team Size:** ${params.proposal_team_size} | **Duration:** ${params.estimated_weeks} weeks\n`;
629
+ output += `**Volumes:** ${params.volumes_required.join(", ")}\n\n`;
630
+ output += `## Cost Breakdown\n\n`;
631
+ output += `| Category | Hours | Rate | Cost |\n`;
632
+ output += `|----------|-------|------|------|\n`;
633
+ output += `| Proposal Labor | ${Math.round(proposalHours)} | $${params.avg_hourly_rate}/hr | $${Math.round(laborCost).toLocaleString()} |\n`;
634
+ output += `| Review Cycles (${params.review_cycles}) | — | — | $${Math.round(reviewOverhead).toLocaleString()} |\n`;
635
+ output += `| Graphic Design | ${params.graphic_design_hours} | $${params.graphic_hourly_rate}/hr | $${Math.round(graphicsCost).toLocaleString()} |\n`;
636
+ output += `| Travel (${params.travel_trips} trips) | — | $${params.travel_cost_per_trip}/trip | $${Math.round(travelCost).toLocaleString()} |\n`;
637
+ output += `| Subcontractor Coordination (${params.subcontractor_coordination}) | ${params.subcontractor_coordination * 20} | $${params.avg_hourly_rate}/hr | $${Math.round(subCost).toLocaleString()} |\n`;
638
+ output += `| Materials & Printing | — | — | $${Math.round(materialsCost).toLocaleString()} |\n`;
639
+ output += `| **TOTAL** | | | **$${Math.round(totalCost).toLocaleString()}** |\n`;
640
+ output += `\n## ROI Analysis\n\n`;
641
+ output += `| Metric | Value |\n`;
642
+ output += `|--------|-------|\n`;
643
+ output += `| Contract Value | $${params.contract_value.toLocaleString()} |\n`;
644
+ output += `| Win Probability | ${params.win_probability}% |\n`;
645
+ output += `| Expected Profit (10% margin) | $${Math.round(expectedProfit).toLocaleString()} |\n`;
646
+ output += `| Bid Investment | $${Math.round(totalCost).toLocaleString()} |\n`;
647
+ output += `| Bid ROI | ${bidROI.toFixed(1)}x |\n`;
648
+ output += `| Bid-to-Win Ratio | ${params.win_probability > 0 ? `1:${(100 / params.win_probability).toFixed(1)}` : "N/A"} |\n`;
649
+ output += `| Break-even Win Rate | ${(totalCost / (params.contract_value * 0.10) * 100).toFixed(1)}% |\n`;
650
+ // Verdict
651
+ output += `\n## Investment Verdict\n\n`;
652
+ if (bidROI >= 3) {
653
+ output += `**Strong investment.** Expected return is ${bidROI.toFixed(1)}x the bid cost. Proceed.\n`;
654
+ }
655
+ else if (bidROI >= 1.5) {
656
+ output += `**Acceptable investment.** ${bidROI.toFixed(1)}x return justifies the pursuit if strategic value is present.\n`;
657
+ }
658
+ else if (bidROI >= 1) {
659
+ output += `**Marginal investment.** ${bidROI.toFixed(1)}x return barely covers bid costs. Only pursue for strategic reasons.\n`;
660
+ }
661
+ else {
662
+ output += `**Poor investment.** ${bidROI.toFixed(1)}x return — bid costs exceed expected returns. Reconsider pursuing.\n`;
663
+ }
664
+ output += `\n---\n*Generated by BidCraft Evaluate MCP — https://bidcraft.site*`;
665
+ return { content: [{ type: "text", text: output }] };
666
+ });
667
+ // ── Tool: Generate Pursuit Plan ───────────────────────────────────────
668
+ server.tool("generate_pursuit_plan", "Create a structured pursuit plan with milestones, team assignments, win themes, and discriminators", {
669
+ opportunity_name: z.string(),
670
+ customer: z.string(),
671
+ contract_value: z.number().positive(),
672
+ proposal_due_date: z.string().describe("Proposal submission deadline (YYYY-MM-DD)"),
673
+ win_themes: z.array(z.string()).min(1).max(5).describe("Core win themes (e.g., 'Proven delivery at scale', 'Cost efficiency through automation')"),
674
+ discriminators: z.array(z.string()).min(1).max(5).describe("Key discriminators that differentiate you from competitors"),
675
+ team_members: z.array(z.object({
676
+ name: z.string(),
677
+ role: z.string().describe("Role (e.g., 'Capture Manager', 'Technical Lead', 'Volume Lead')"),
678
+ availability_pct: z.number().min(0).max(100).describe("Availability percentage"),
679
+ })).min(1).describe("Pursuit team members"),
680
+ key_risks: z.array(z.string()).optional().describe("Key risks to address"),
681
+ customer_hot_buttons: z.array(z.string()).optional().describe("Customer's known priorities/hot buttons"),
682
+ competitor_names: z.array(z.string()).optional().describe("Known competitors"),
683
+ }, async (params) => {
684
+ const dueDate = new Date(params.proposal_due_date);
685
+ const today = new Date();
686
+ const daysUntilDue = Math.ceil((dueDate.getTime() - today.getTime()) / 86400000);
687
+ let output = `# Pursuit Plan: ${params.opportunity_name}\n\n`;
688
+ output += `**Customer:** ${params.customer}\n`;
689
+ output += `**Contract Value:** $${params.contract_value.toLocaleString()}\n`;
690
+ output += `**Proposal Due:** ${params.proposal_due_date} (${daysUntilDue} days)\n\n`;
691
+ // Win Strategy
692
+ output += `## Win Strategy\n\n`;
693
+ output += `### Win Themes\n`;
694
+ for (let i = 0; i < params.win_themes.length; i++) {
695
+ output += `${i + 1}. **${params.win_themes[i]}**\n`;
696
+ }
697
+ output += `\n### Discriminators\n`;
698
+ for (const d of params.discriminators) {
699
+ output += `- ${d}\n`;
700
+ }
701
+ if (params.customer_hot_buttons && params.customer_hot_buttons.length > 0) {
702
+ output += `\n### Customer Hot Buttons\n`;
703
+ for (const h of params.customer_hot_buttons) {
704
+ output += `- ${h}\n`;
705
+ }
706
+ }
707
+ // Ghost strategy
708
+ if (params.competitor_names && params.competitor_names.length > 0) {
709
+ output += `\n### Competitive Ghost Strategy\n`;
710
+ for (const c of params.competitor_names) {
711
+ output += `- **vs ${c}:** Emphasize differentiators without naming. Highlight areas where they typically underperform.\n`;
712
+ }
713
+ }
714
+ // Team assignments
715
+ output += `\n## Pursuit Team\n\n`;
716
+ output += `| Name | Role | Availability |\n`;
717
+ output += `|------|------|--------------|\n`;
718
+ for (const m of params.team_members) {
719
+ output += `| ${m.name} | ${m.role} | ${m.availability_pct}% |\n`;
720
+ }
721
+ // Low availability warning
722
+ const lowAvail = params.team_members.filter(m => m.availability_pct < 50);
723
+ if (lowAvail.length > 0) {
724
+ output += `\n> **Warning:** ${lowAvail.map(m => m.name).join(", ")} ha${lowAvail.length === 1 ? "s" : "ve"} <50% availability. Consider backfills.\n`;
725
+ }
726
+ // Milestone timeline
727
+ output += `\n## Pursuit Milestones\n\n`;
728
+ const milestones = [
729
+ { name: "Kickoff Meeting", daysBefore: Math.min(daysUntilDue, Math.max(daysUntilDue - 2, 0)), owner: "Capture Manager" },
730
+ { name: "Solution Architecture Review", daysBefore: Math.max(Math.floor(daysUntilDue * 0.75), 1), owner: "Technical Lead" },
731
+ { name: "Win Theme Validation", daysBefore: Math.max(Math.floor(daysUntilDue * 0.70), 1), owner: "Capture Manager" },
732
+ { name: "Pink Team Review (Outline)", daysBefore: Math.max(Math.floor(daysUntilDue * 0.60), 1), owner: "All Volume Leads" },
733
+ { name: "First Draft Complete", daysBefore: Math.max(Math.floor(daysUntilDue * 0.45), 1), owner: "Volume Leads" },
734
+ { name: "Red Team Review (Full Draft)", daysBefore: Math.max(Math.floor(daysUntilDue * 0.35), 1), owner: "Review Board" },
735
+ { name: "Red Team Comment Resolution", daysBefore: Math.max(Math.floor(daysUntilDue * 0.25), 1), owner: "Volume Leads" },
736
+ { name: "Gold Team Review (Final)", daysBefore: Math.max(Math.floor(daysUntilDue * 0.15), 1), owner: "Executive Sponsor" },
737
+ { name: "Final Production & QC", daysBefore: Math.max(Math.floor(daysUntilDue * 0.08), 1), owner: "Proposal Manager" },
738
+ { name: "Submission", daysBefore: 0, owner: "Proposal Manager" },
739
+ ];
740
+ output += `| Milestone | Target Date | Days Left | Owner |\n`;
741
+ output += `|-----------|-------------|-----------|-------|\n`;
742
+ for (const m of milestones) {
743
+ const targetDate = new Date(dueDate.getTime() - m.daysBefore * 86400000);
744
+ const daysLeft = Math.ceil((targetDate.getTime() - today.getTime()) / 86400000);
745
+ const status = daysLeft < 0 ? "OVERDUE" : daysLeft === 0 ? "TODAY" : `${daysLeft}d`;
746
+ output += `| ${m.name} | ${targetDate.toISOString().split("T")[0]} | ${status} | ${m.owner} |\n`;
747
+ }
748
+ // Risk register
749
+ if (params.key_risks && params.key_risks.length > 0) {
750
+ output += `\n## Risk Register\n\n`;
751
+ output += `| Risk | Severity | Mitigation |\n`;
752
+ output += `|------|----------|------------|\n`;
753
+ for (const r of params.key_risks) {
754
+ output += `| ${r} | Medium | Develop mitigation plan by Pink Team |\n`;
755
+ }
756
+ }
757
+ // Checklist
758
+ output += `\n## Pre-Submission Checklist\n\n`;
759
+ output += `- [ ] All RFP requirements cross-referenced and addressed\n`;
760
+ output += `- [ ] Win themes woven into every section\n`;
761
+ output += `- [ ] Compliance matrix completed\n`;
762
+ output += `- [ ] Cost volume reviewed by pricing team\n`;
763
+ output += `- [ ] Past performance references confirmed\n`;
764
+ output += `- [ ] Executive summary reviewed by leadership\n`;
765
+ output += `- [ ] Graphics and visuals finalized\n`;
766
+ output += `- [ ] Page count and formatting verified\n`;
767
+ output += `- [ ] All required certifications/representations signed\n`;
768
+ output += `- [ ] Submission method confirmed and tested\n`;
769
+ output += `\n---\n*Generated by BidCraft Evaluate MCP — https://bidcraft.site*`;
770
+ return { content: [{ type: "text", text: output }] };
771
+ });
772
+ // ── Start Server ──────────────────────────────────────────────────────
773
+ async function main() {
774
+ const transport = new StdioServerTransport();
775
+ await server.connect(transport);
776
+ }
777
+ main().catch(console.error);
778
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA2BxB,yEAAyE;AAEzE,MAAM,iBAAiB,GAA2B;IAChD,aAAa,EAAE,EAAE;IACjB,qBAAqB,EAAE,EAAE;IACzB,oBAAoB,EAAE,EAAE;IACxB,gBAAgB,EAAE,EAAE;IACpB,qBAAqB,EAAE,EAAE;IACzB,qBAAqB,EAAE,EAAE;IACzB,qBAAqB,EAAE,EAAE;IACzB,YAAY,EAAE,CAAC;CAChB,CAAC;AAEF,MAAM,kBAAkB,GAAiC;IACvD,gBAAgB,EAAE,EAAE;IACpB,SAAS,EAAE,EAAE;IACb,kBAAkB,EAAE,EAAE;IACtB,IAAI,EAAE,EAAE;IACR,gBAAgB,EAAE,EAAE;IACpB,eAAe,EAAE,EAAE;IACnB,WAAW,EAAE,CAAC;CACf,CAAC;AAEF,MAAM,kBAAkB,GAAyC;IAC/D,SAAS,EAAE,EAAE;IACb,iBAAiB,EAAE,EAAE;IACrB,cAAc,EAAE,EAAE;IAClB,IAAI,EAAE,EAAE;IACR,oBAAoB,EAAE,EAAE;CACzB,CAAC;AAEF,yEAAyE;AAEzE,SAAS,iBAAiB,CACxB,oBAA6B,EAC7B,aAAsB,EACtB,oBAA4B,EAAE,sBAAsB;AACpD,gBAAyB,EACzB,aAAsB;IAEtB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,oBAAoB;QAAE,KAAK,IAAI,EAAE,CAAC;;QACjC,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;IAEvE,IAAI,aAAa;QAAE,KAAK,IAAI,EAAE,CAAC;IAC/B,IAAI,gBAAgB;QAAE,KAAK,IAAI,EAAE,CAAC;IAClC,IAAI,aAAa;QAAE,KAAK,IAAI,EAAE,CAAC;IAE/B,8DAA8D;IAC9D,IAAI,oBAAoB,IAAI,CAAC,IAAI,oBAAoB,IAAI,EAAE;QAAE,KAAK,IAAI,EAAE,CAAC;SACpE,IAAI,oBAAoB,GAAG,EAAE,EAAE,CAAC;QACnC,KAAK,IAAI,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC,eAAe,oBAAoB,yCAAyC,CAAC,CAAC;IAC3F,CAAC;SAAM,CAAC;QACN,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IAED,MAAM,SAAS,GAAG,2CAA2C,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,qBAAqB,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,kBAAkB,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,4BAA4B,oBAAoB,IAAI,CAAC;IACvP,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,wBAAwB,CAC/B,oBAA4B,EAC5B,iBAA0B,EAC1B,qBAA8B,EAC9B,aAAsB,EACtB,sBAA8B;IAE9B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,IAAI,oBAAoB,GAAG,GAAG,CAAC,CAAC,cAAc;IACnD,IAAI,iBAAiB;QAAE,KAAK,IAAI,EAAE,CAAC;;QAC9B,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;IAEjE,IAAI,qBAAqB;QAAE,KAAK,IAAI,EAAE,CAAC;;QAClC,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAEpD,IAAI,aAAa,EAAE,CAAC;QAClB,KAAK,IAAI,CAAC,CAAC,CAAC,sCAAsC;QAClD,KAAK,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;IACrF,CAAC;SAAM,CAAC;QACN,KAAK,IAAI,EAAE,CAAC;IACd,CAAC;IAED,KAAK,IAAI,CAAC,sBAAsB,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IAE3C,MAAM,SAAS,GAAG,yBAAyB,oBAAoB,yCAAyC,sBAAsB,OAAO,aAAa,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,sBAAsB,EAAE,CAAC;IACnM,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACvE,CAAC;AAED,SAAS,yBAAyB,CAChC,eAAuB,EACvB,WAAmB,EACnB,aAA2B,EAC3B,aAAqB;IAErB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,UAAU,GAAG,eAAe,GAAG,WAAW,CAAC;IAEjD,IAAI,KAAa,CAAC;IAClB,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;QACvB,KAAK,GAAG,EAAE,CAAC;QACX,IAAI,aAAa,GAAG,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;IACvG,CAAC;SAAM,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;QAC9B,KAAK,GAAG,EAAE,CAAC;IACb,CAAC;SAAM,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;QAC9B,KAAK,GAAG,EAAE,CAAC;IACb,CAAC;SAAM,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;QAC9B,KAAK,GAAG,EAAE,CAAC;QACX,KAAK,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;IACtF,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,EAAE,CAAC;QACX,KAAK,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;IAC5F,CAAC;IAED,gCAAgC;IAChC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;IACnD,IAAI,aAAa,KAAK,kBAAkB,IAAI,aAAa,GAAG,EAAE,EAAE,CAAC;QAC/D,KAAK,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;IACzF,CAAC;IAED,MAAM,SAAS,GAAG,oCAAoC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,cAAc,aAAa,iBAAiB,CAAC;IAC1K,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,gBAAgB,CACvB,aAA2B,EAC3B,wBAAgC,EAChC,cAAuB,EACvB,qBAA6B,EAAE,MAAM;AACrC,uBAAgC,EAChC,yBAAkC;IAElC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,mCAAmC;IAEtD,qBAAqB;IACrB,SAAS,IAAI,CAAC,GAAG,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC,GAAG,GAAG,CAAC;IAE7D,gBAAgB;IAChB,IAAI,wBAAwB,IAAI,EAAE;QAAE,SAAS,IAAI,EAAE,CAAC;SAC/C,IAAI,wBAAwB,IAAI,EAAE;QAAE,SAAS,IAAI,EAAE,CAAC;SACpD,IAAI,wBAAwB,IAAI,EAAE;QAAE,SAAS,IAAI,EAAE,CAAC;SACpD,CAAC;QACJ,SAAS,IAAI,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,uBAAuB,wBAAwB,2CAA2C,CAAC,CAAC;IACzG,CAAC;IAED,eAAe;IACf,IAAI,cAAc,EAAE,CAAC;QACnB,SAAS,IAAI,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;IACvE,CAAC;SAAM,CAAC;QACN,SAAS,IAAI,EAAE,CAAC;IAClB,CAAC;IAED,wBAAwB;IACxB,SAAS,IAAI,CAAC,CAAC,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,qBAAqB,IAAI,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;IAEpG,iBAAiB;IACjB,IAAI,uBAAuB,EAAE,CAAC;QAC5B,SAAS,IAAI,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;IAC7E,CAAC;SAAM,CAAC;QACN,SAAS,IAAI,EAAE,CAAC;IAClB,CAAC;IAED,qBAAqB;IACrB,IAAI,yBAAyB,EAAE,CAAC;QAC9B,SAAS,IAAI,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;IAC9E,CAAC;SAAM,CAAC;QACN,SAAS,IAAI,EAAE,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,4BAA4B,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,wBAAwB,YAAY,KAAK,CAAC,MAAM,0BAA0B,CAAC;IAC9J,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC3E,CAAC;AAED,yEAAyE;AAEzE,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,uBAAuB;IAC7B,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,yEAAyE;AAEzE,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,wGAAwG,EACxG;IACE,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IACtE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACrD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACjF,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,kBAAkB,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;IACtK,wBAAwB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IACnF,qBAAqB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC9J,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;IAC1G,oBAAoB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;IAC5F,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IAC3E,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;IACpF,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;IACtF,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,yDAAyD,CAAC;IACpH,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;IAClG,qBAAqB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;IAChG,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;IACvF,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,mDAAmD,CAAC;IAC9G,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACvE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IAC3F,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAC9E,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC5E,oBAAoB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IAC/E,yBAAyB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,oDAAoD,CAAC;IACpH,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAChE,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,kDAAkD,CAAC;IAC5G,uBAAuB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC5E,yBAAyB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAClF,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;IACjI,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;QACvB,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE;KACjB,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;CACxE,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;IACf,MAAM,UAAU,GAAqB,EAAE,CAAC;IAExC,mBAAmB;IACnB,MAAM,eAAe,GAAG,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC,MAAM,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,cAAc,GAAG,GAAG,CAAC;IACvH,MAAM,EAAE,GAAG,iBAAiB,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,aAAa,EAAE,eAAe,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAChJ,UAAU,CAAC,IAAI,CAAC;QACd,SAAS,EAAE,eAAe;QAC1B,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,MAAM,EAAE,iBAAiB,CAAC,aAAa;QACvC,aAAa,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,iBAAiB,CAAC,aAAa,CAAC,GAAG,GAAG;QACjE,SAAS,EAAE,EAAE,CAAC,SAAS;QACvB,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,yCAAyC,CAAC,CAAC,CAAC,6DAA6D,CAAC;KACxK,CAAC,CAAC;IAEH,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,MAAM,CAAC,qBAAqB,KAAK,MAAM;QAAE,QAAQ,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;IACtI,IAAI,MAAM,CAAC,qBAAqB,KAAK,sBAAsB;QAAE,QAAQ,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;IACrJ,UAAU,CAAC,IAAI,CAAC;QACd,SAAS,EAAE,uBAAuB;QAClC,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,iBAAiB,CAAC,qBAAqB;QAC/C,aAAa,EAAE,CAAC,QAAQ,GAAG,iBAAiB,CAAC,qBAAqB,CAAC,GAAG,GAAG;QACzE,SAAS,EAAE,0BAA0B,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,MAAM,CAAC,QAAQ,EAAE;QAC9G,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,iFAAiF,CAAC;KACnH,CAAC,CAAC;IAEH,0BAA0B;IAC1B,MAAM,EAAE,GAAG,wBAAwB,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAC9K,UAAU,CAAC,IAAI,CAAC;QACd,SAAS,EAAE,sBAAsB;QACjC,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,MAAM,EAAE,iBAAiB,CAAC,oBAAoB;QAC9C,aAAa,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,GAAG,GAAG;QACxE,SAAS,EAAE,EAAE,CAAC,SAAS;QACvB,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,6CAA6C,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,4CAA4C,CAAC,CAAC,CAAC,uDAAuD,CAAC;KACzO,CAAC,CAAC;IAEH,sBAAsB;IACtB,MAAM,OAAO,GAAG,MAAM,CAAC,uBAAuB,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3F,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;IACzG,UAAU,CAAC,IAAI,CAAC;QACd,SAAS,EAAE,kBAAkB;QAC7B,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,iBAAiB,CAAC,gBAAgB;QAC1C,aAAa,EAAE,CAAC,OAAO,GAAG,iBAAiB,CAAC,gBAAgB,CAAC,GAAG,GAAG;QACnE,SAAS,EAAE,4BAA4B,OAAO,OAAO,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,oBAAoB,EAAE;QACrI,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,gFAAgF,CAAC;KACjH,CAAC,CAAC;IAEH,2BAA2B;IAC3B,MAAM,EAAE,GAAG,yBAAyB,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAC7H,UAAU,CAAC,IAAI,CAAC;QACd,SAAS,EAAE,uBAAuB;QAClC,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,MAAM,EAAE,iBAAiB,CAAC,qBAAqB;QAC/C,aAAa,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,iBAAiB,CAAC,qBAAqB,CAAC,GAAG,GAAG;QACzE,SAAS,EAAE,EAAE,CAAC,SAAS;QACvB,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,6CAA6C,CAAC,CAAC,CAAC,gFAAgF,CAAC;KAC5L,CAAC,CAAC;IAEH,2BAA2B;IAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,yBAAyB,CAAC;IACjD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,OAAO,iEAAiE,CAAC,CAAC;SAC5G,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,8DAA8D,CAAC,CAAC;IAC9G,UAAU,CAAC,IAAI,CAAC;QACd,SAAS,EAAE,uBAAuB;QAClC,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,iBAAiB,CAAC,qBAAqB;QAC/C,aAAa,EAAE,CAAC,OAAO,GAAG,iBAAiB,CAAC,qBAAqB,CAAC,GAAG,GAAG;QACxE,SAAS,EAAE,GAAG,OAAO,2CAA2C;QAChE,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,qFAAqF,CAAC;KACtH,CAAC,CAAC;IAEH,2BAA2B;IAC3B,IAAI,SAAiB,CAAC;IACtB,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,MAAM,CAAC,iBAAiB,KAAK,CAAC,EAAE,CAAC;QACnC,SAAS,GAAG,EAAE,CAAC;IACjB,CAAC;SAAM,IAAI,MAAM,CAAC,iBAAiB,IAAI,CAAC,EAAE,CAAC;QACzC,SAAS,GAAG,EAAE,CAAC;IACjB,CAAC;SAAM,IAAI,MAAM,CAAC,iBAAiB,IAAI,CAAC,EAAE,CAAC;QACzC,SAAS,GAAG,EAAE,CAAC;IACjB,CAAC;SAAM,CAAC;QACN,SAAS,GAAG,EAAE,CAAC;QACf,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,iBAAiB,+CAA+C,CAAC,CAAC;IAC7F,CAAC;IACD,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;QAChC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QACxC,SAAS,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;IACjF,CAAC;IACD,UAAU,CAAC,IAAI,CAAC;QACd,SAAS,EAAE,uBAAuB;QAClC,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,iBAAiB,CAAC,qBAAqB;QAC/C,aAAa,EAAE,CAAC,SAAS,GAAG,iBAAiB,CAAC,qBAAqB,CAAC,GAAG,GAAG;QAC1E,SAAS,EAAE,GAAG,MAAM,CAAC,iBAAiB,uBAAuB,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,cAAc,EAAE;QACjI,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,gEAAgE,CAAC,CAAC,CAAC,gDAAgD,CAAC;KAC/K,CAAC,CAAC;IAEH,kBAAkB;IAClB,MAAM,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,wBAAwB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC,uBAAuB,EAAE,MAAM,CAAC,yBAAyB,CAAC,CAAC;IAC1M,UAAU,CAAC,IAAI,CAAC;QACd,SAAS,EAAE,cAAc;QACzB,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,MAAM,EAAE,iBAAiB,CAAC,YAAY;QACtC,aAAa,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,iBAAiB,CAAC,YAAY,CAAC,GAAG,GAAG;QAChE,SAAS,EAAE,EAAE,CAAC,SAAS;QACvB,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,oEAAoE,CAAC;KACtG,CAAC,CAAC;IAEH,oBAAoB;IACpB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;IAErF,mBAAmB;IACnB,MAAM,SAAS,GAAG;QAChB,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;QACzE,KAAK,EAAE,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;KAC7E,CAAC;IAEF,WAAW;IACX,IAAI,cAA6C,CAAC;IAClD,IAAI,UAAqC,CAAC;IAE1C,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,cAAc,GAAG,QAAQ,CAAC;QAC1B,UAAU,GAAG,MAAM,CAAC;IACtB,CAAC;SAAM,IAAI,YAAY,IAAI,EAAE,EAAE,CAAC;QAC9B,cAAc,GAAG,KAAK,CAAC;QACvB,UAAU,GAAG,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;IACtD,CAAC;SAAM,IAAI,YAAY,IAAI,EAAE,EAAE,CAAC;QAC9B,cAAc,GAAG,iBAAiB,CAAC;QACnC,UAAU,GAAG,QAAQ,CAAC;IACxB,CAAC;SAAM,CAAC;QACN,cAAc,GAAG,QAAQ,CAAC;QAC1B,UAAU,GAAG,YAAY,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;IACrD,CAAC;IAED,kCAAkC;IAClC,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;IAExI,eAAe;IACf,IAAI,MAAM,GAAG,4BAA4B,MAAM,CAAC,gBAAgB,MAAM,CAAC;IACvE,MAAM,IAAI,iBAAiB,MAAM,CAAC,QAAQ,IAAI,CAAC;IAC/C,MAAM,IAAI,wBAAwB,MAAM,CAAC,cAAc,CAAC,cAAc,EAAE,IAAI,CAAC;IAC7E,MAAM,IAAI,sBAAsB,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC;IAC5E,MAAM,IAAI,iBAAiB,MAAM,CAAC,wBAAwB,aAAa,CAAC;IAExE,eAAe;IACf,MAAM,IAAI,sBAAsB,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC;IACtE,MAAM,IAAI,sBAAsB,YAAY,0BAA0B,UAAU,MAAM,CAAC;IAEvF,IAAI,cAAc,KAAK,iBAAiB,EAAE,CAAC;QACzC,MAAM,IAAI,gCAAgC,CAAC;QAC3C,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC;YACrD,MAAM,IAAI,eAAe,CAAC,CAAC,SAAS,wBAAwB,CAAC,CAAC,KAAK,SAAS,CAAC;QAC/E,CAAC;QACD,MAAM,IAAI,IAAI,CAAC;IACjB,CAAC;IAED,mBAAmB;IACnB,MAAM,IAAI,0BAA0B,CAAC;IACrC,MAAM,IAAI,0DAA0D,CAAC;IACrE,MAAM,IAAI,0DAA0D,CAAC;IACrE,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC;QAC7E,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;QAC/G,MAAM,IAAI,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,UAAU,MAAM,CAAC;IACnH,CAAC;IACD,MAAM,IAAI,mBAAmB,YAAY,yBAAyB,YAAY,UAAU,CAAC;IAEzF,oBAAoB;IACpB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,kBAAkB,CAAC;QAC7B,KAAK,MAAM,CAAC,IAAI,YAAY;YAAE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC;IACrD,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,qBAAqB,CAAC;QAChC,KAAK,MAAM,CAAC,IAAI,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC;IACjD,CAAC;IAED,aAAa;IACb,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,+BAA+B,CAAC;QAC1C,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,GAAG;YAAE,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC;QACxD,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,KAAK;YAAE,MAAM,IAAI,oBAAoB,CAAC,IAAI,CAAC;IACvE,CAAC;IAED,8BAA8B;IAC9B,MAAM,IAAI,0BAA0B,CAAC;IACrC,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,MAAM,IAAI,SAAS,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,KAAK,SAAS,CAAC;QACpD,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC;QAC7B,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,gBAAgB,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC9B,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;oBAAE,MAAM,IAAI,qBAAqB,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5E,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,IAAI,qEAAqE,CAAC;IAEhF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAChE,CAAC,CACF,CAAC;AAEF,yEAAyE;AAEzE,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,oGAAoG,EACpG;IACE,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACrC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QACzF,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QAC7E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACjE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACpE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACzE,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;KACnF,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACvD,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IAClH,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;CAC1G,EACD,KAAK,EAAE,EAAE,aAAa,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,EAAE,EAAE;IAClE,4CAA4C;IAC5C,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QACnC,MAAM,aAAa,GAAG,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,GAAG,GAAG,CAAC,CAAC;QAC1F,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;QAEjI,wCAAwC;QACxC,MAAM,cAAc,GAAG,CAAC,CAAC,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;QAEhL,OAAO,EAAE,GAAG,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;IAC9F,CAAC,CAAC,CAAC;IAEH,0BAA0B;IAC1B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC;IAE3D,IAAI,MAAM,GAAG,oCAAoC,CAAC;IAClD,MAAM,IAAI,gCAAgC,MAAM,CAAC,MAAM,IAAI,CAAC;IAC5D,MAAM,IAAI,4BAA4B,mBAAmB,IAAI,CAAC;IAC9D,IAAI,iBAAiB;QAAE,MAAM,IAAI,2BAA2B,iBAAiB,CAAC,cAAc,EAAE,IAAI,CAAC;IAEnG,gBAAgB;IAChB,MAAM,IAAI,+BAA+B,CAAC;IAC1C,MAAM,IAAI,4FAA4F,CAAC;IACvG,MAAM,IAAI,6FAA6F,CAAC;IAExG,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,YAAY,IAAI,CAAC,CAAC,QAAQ,CAAC;QAC3B,MAAM,cAAc,GAAG,CAAC,GAAG,mBAAmB,CAAC;QAC/C,MAAM,YAAY,GAAG,CAAC,iBAAiB,IAAI,YAAY,IAAI,iBAAiB,CAAC;QAC7E,MAAM,MAAM,GAAG,CAAC,cAAc,IAAI,YAAY,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;QAElK,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,eAAe,QAAQ,CAAC,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,eAAe,SAAS,CAAC,CAAC,cAAc,MAAM,MAAM,MAAM,CAAC;IACpR,CAAC;IAED,qBAAqB;IACrB,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;IACvF,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IAC5E,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAC5E,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAEvE,MAAM,IAAI,4BAA4B,CAAC;IACvC,MAAM,IAAI,sBAAsB,CAAC;IACjC,MAAM,IAAI,sBAAsB,CAAC;IACjC,MAAM,IAAI,uBAAuB,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAC/E,MAAM,IAAI,cAAc,OAAO,CAAC,MAAM,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAChI,MAAM,IAAI,6BAA6B,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IACrF,MAAM,IAAI,6BAA6B,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IACrF,MAAM,IAAI,qBAAqB,kBAAkB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,GAAG,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACxH,MAAM,IAAI,2BAA2B,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAE1I,mBAAmB;IACnB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;IACzD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,yBAAyB,CAAC;QACpC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC;YACzE,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,aAAa,UAAU,CAAC,CAAC,OAAO,KAAK,CAAC;QACzE,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAC1D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,2BAA2B,CAAC;QACtC,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,CAAC,IAAI,6CAA6C,CAAC,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;QACtH,CAAC;IACH,CAAC;IAED,MAAM,IAAI,qEAAqE,CAAC;IAEhF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAChE,CAAC,CACF,CAAC;AAEF,yEAAyE;AAEzE,MAAM,CAAC,IAAI,CACT,8BAA8B,EAC9B,wGAAwG,EACxG;IACE,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC5B,mBAAmB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACpC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QAC3D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KACtF,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IACvD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IAC3G,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QAC5B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QACpG,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QAC/C,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KACjD,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;CACvD,EACD,KAAK,EAAE,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE;IAC5E,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAE3D,4BAA4B;IAC5B,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QAC9C,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;QAC7E,OAAO,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC;IACtD,CAAC,EAAE,CAAC,CAAC,CAAC;IAEN,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACzC,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;YAC1C,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;YAC7E,OAAO,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC;QACtD,CAAC,EAAE,CAAC,CAAC,CAAC;QACN,OAAO,EAAE,GAAG,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,oBAAoB;IACpB,MAAM,WAAW,GAAG;QAClB,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;QAC1E,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;KAC1F,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC;IAEpD,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEzD,IAAI,MAAM,GAAG,oCAAoC,gBAAgB,MAAM,CAAC;IACxE,MAAM,IAAI,2BAA2B,QAAQ,OAAO,WAAW,CAAC,MAAM,aAAa,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC;IAEtH,gBAAgB;IAChB,MAAM,IAAI,wBAAwB,CAAC;IACnC,MAAM,IAAI,4CAA4C,CAAC;IACvD,MAAM,IAAI,2CAA2C,CAAC;IACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,aAAa,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC;IACjI,CAAC;IAED,mCAAmC;IACnC,MAAM,IAAI,8BAA8B,CAAC;IACzC,MAAM,IAAI,uCAAuC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;IAC5G,MAAM,IAAI,sCAAsC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAE7G,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;QAC7E,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE1C,MAAM,IAAI,KAAK,CAAC,MAAM,MAAM,OAAO,KAAK,MAAM,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC;IACvF,CAAC;IAED,gCAAgC;IAChC,MAAM,IAAI,oCAAoC,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3E,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;YACrB,MAAM,IAAI,OAAO,CAAC,oBAAoB,KAAK,GAAG,QAAQ,6CAA6C,CAAC;QACtG,CAAC;IACH,CAAC;IAED,MAAM,IAAI,wBAAwB,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3E,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,QAAQ,CAAC,EAAE,IAAI,IAAI,SAAS,CAAC;YAC/F,MAAM,IAAI,OAAO,CAAC,QAAQ,MAAM,aAAa,QAAQ,GAAG,KAAK,kDAAkD,CAAC;QAClH,CAAC;IACH,CAAC;IAED,kCAAkC;IAClC,MAAM,IAAI,yBAAyB,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,IAAI,YAAY,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,aAAa,KAAK,CAAC;QACnE,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,oCAAoC,CAAC;YAC/C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,gBAAgB;gBAAE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC;QAC9D,CAAC;QACD,oCAAoC;QACpC,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3F,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,wBAAwB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAClE,CAAC;QACD,oCAAoC;QACpC,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5F,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,yBAAyB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QACpE,CAAC;IACH,CAAC;IAED,MAAM,IAAI,qEAAqE,CAAC;IAEhF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAChE,CAAC,CACF,CAAC;AAEF,yEAAyE;AAEzE,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,gHAAgH,EAChH;IACE,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC5B,mBAAmB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IACtH,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACxE,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IAC5I,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IACvF,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IAC/F,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC7E,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IAC7F,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACvF,0BAA0B,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IAC3G,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAC9F,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IAC3F,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,gDAAgD,CAAC;IACtG,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;IAC7F,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;CAClF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;IACf,wBAAwB;IACxB,MAAM,cAAc,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAEnH,aAAa;IACb,MAAM,WAAW,GAAG,EAAE,CAAC;IACvB,MAAM,aAAa,GAAG,MAAM,CAAC,kBAAkB,GAAG,WAAW,GAAG,MAAM,CAAC,eAAe,GAAG,cAAc,CAAC;IACxG,MAAM,SAAS,GAAG,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC;IAEzD,yDAAyD;IACzD,MAAM,cAAc,GAAG,SAAS,GAAG,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAEjE,WAAW;IACX,MAAM,YAAY,GAAG,MAAM,CAAC,oBAAoB,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAE9E,SAAS;IACT,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,oBAAoB,CAAC;IAErE,iDAAiD;IACjD,MAAM,OAAO,GAAG,MAAM,CAAC,0BAA0B,GAAG,EAAE,GAAG,MAAM,CAAC,eAAe,CAAC;IAEhF,uBAAuB;IACvB,MAAM,aAAa,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,uCAAuC;IAE9H,QAAQ;IACR,MAAM,SAAS,GAAG,SAAS,GAAG,cAAc,GAAG,YAAY,GAAG,UAAU,GAAG,OAAO,GAAG,aAAa,CAAC;IAEnG,eAAe;IACf,MAAM,cAAc,GAAG,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG,GAAG,CAAC,CAAC,CAAC,2BAA2B;IACnH,MAAM,MAAM,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9D,IAAI,MAAM,GAAG,wBAAwB,MAAM,CAAC,gBAAgB,MAAM,CAAC;IACnE,MAAM,IAAI,4BAA4B,MAAM,CAAC,mBAAmB,IAAI,CAAC;IACrE,MAAM,IAAI,kBAAkB,MAAM,CAAC,kBAAkB,oBAAoB,MAAM,CAAC,eAAe,UAAU,CAAC;IAC1G,MAAM,IAAI,gBAAgB,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IAEnE,MAAM,IAAI,uBAAuB,CAAC;IAClC,MAAM,IAAI,sCAAsC,CAAC;IACjD,MAAM,IAAI,sCAAsC,CAAC;IACjD,MAAM,IAAI,sBAAsB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,MAAM,CAAC,eAAe,UAAU,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,MAAM,CAAC;IAC7I,MAAM,IAAI,oBAAoB,MAAM,CAAC,aAAa,gBAAgB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,cAAc,EAAE,MAAM,CAAC;IACpH,MAAM,IAAI,sBAAsB,MAAM,CAAC,oBAAoB,OAAO,MAAM,CAAC,mBAAmB,UAAU,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,cAAc,EAAE,MAAM,CAAC;IACtJ,MAAM,IAAI,aAAa,MAAM,CAAC,YAAY,kBAAkB,MAAM,CAAC,oBAAoB,YAAY,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,cAAc,EAAE,MAAM,CAAC;IACjJ,MAAM,IAAI,iCAAiC,MAAM,CAAC,0BAA0B,OAAO,MAAM,CAAC,0BAA0B,GAAG,EAAE,OAAO,MAAM,CAAC,eAAe,UAAU,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,MAAM,CAAC;IAC3M,MAAM,IAAI,qCAAqC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,cAAc,EAAE,MAAM,CAAC;IAChG,MAAM,IAAI,wBAAwB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,QAAQ,CAAC;IAEjF,MAAM,IAAI,uBAAuB,CAAC;IAClC,MAAM,IAAI,sBAAsB,CAAC;IACjC,MAAM,IAAI,sBAAsB,CAAC;IACjC,MAAM,IAAI,uBAAuB,MAAM,CAAC,cAAc,CAAC,cAAc,EAAE,MAAM,CAAC;IAC9E,MAAM,IAAI,uBAAuB,MAAM,CAAC,eAAe,OAAO,CAAC;IAC/D,MAAM,IAAI,qCAAqC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,cAAc,EAAE,MAAM,CAAC;IACjG,MAAM,IAAI,uBAAuB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,MAAM,CAAC;IAC9E,MAAM,IAAI,eAAe,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAClD,MAAM,IAAI,wBAAwB,MAAM,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC;IAC9H,MAAM,IAAI,2BAA2B,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAE1G,UAAU;IACV,MAAM,IAAI,6BAA6B,CAAC;IACxC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAChB,MAAM,IAAI,6CAA6C,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B,CAAC;IACvG,CAAC;SAAM,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;QACzB,MAAM,IAAI,8BAA8B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,iEAAiE,CAAC;IAC7H,CAAC;SAAM,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,4BAA4B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,wEAAwE,CAAC;IAClI,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,wBAAwB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,sEAAsE,CAAC;IAC5H,CAAC;IAED,MAAM,IAAI,qEAAqE,CAAC;IAEhF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAChE,CAAC,CACF,CAAC;AAEF,yEAAyE;AAEzE,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,oGAAoG,EACpG;IACE,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC5B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IACnF,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0FAA0F,CAAC;IAClJ,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,4DAA4D,CAAC;IACxH,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QAC7B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iEAAiE,CAAC;QAC5F,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;KACjF,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IAC3C,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IAC1E,oBAAoB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IACxG,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;CAC/E,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;IACf,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;IACzB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC;IAEjF,IAAI,MAAM,GAAG,mBAAmB,MAAM,CAAC,gBAAgB,MAAM,CAAC;IAC9D,MAAM,IAAI,iBAAiB,MAAM,CAAC,QAAQ,IAAI,CAAC;IAC/C,MAAM,IAAI,wBAAwB,MAAM,CAAC,cAAc,CAAC,cAAc,EAAE,IAAI,CAAC;IAC7E,MAAM,IAAI,qBAAqB,MAAM,CAAC,iBAAiB,KAAK,YAAY,YAAY,CAAC;IAErF,eAAe;IACf,MAAM,IAAI,qBAAqB,CAAC;IAChC,MAAM,IAAI,kBAAkB,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;IACtD,CAAC;IAED,MAAM,IAAI,wBAAwB,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,IAAI,MAAM,CAAC,oBAAoB,IAAI,MAAM,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1E,MAAM,IAAI,8BAA8B,CAAC;QACzC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC;QACvB,CAAC;IACH,CAAC;IAED,iBAAiB;IACjB,IAAI,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClE,MAAM,IAAI,oCAAoC,CAAC;QAC/C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YACxC,MAAM,IAAI,UAAU,CAAC,oGAAoG,CAAC;QAC5H,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,MAAM,IAAI,uBAAuB,CAAC;IAClC,MAAM,IAAI,kCAAkC,CAAC;IAC7C,MAAM,IAAI,kCAAkC,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,gBAAgB,OAAO,CAAC;IACnE,CAAC;IAED,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;IAC1E,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,oBAAoB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,2CAA2C,CAAC;IACxJ,CAAC;IAED,qBAAqB;IACrB,MAAM,IAAI,6BAA6B,CAAC;IAExC,MAAM,UAAU,GAAG;QACjB,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE;QACxH,EAAE,IAAI,EAAE,8BAA8B,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE;QAC3H,EAAE,IAAI,EAAE,sBAAsB,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE;QACpH,EAAE,IAAI,EAAE,4BAA4B,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE;QAC3H,EAAE,IAAI,EAAE,sBAAsB,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE;QACjH,EAAE,IAAI,EAAE,8BAA8B,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE;QACzH,EAAE,IAAI,EAAE,6BAA6B,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE;QACxH,EAAE,IAAI,EAAE,0BAA0B,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE;QAC1H,EAAE,IAAI,EAAE,uBAAuB,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE;QACtH,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE;KACjE,CAAC;IAEF,MAAM,IAAI,mDAAmD,CAAC;IAC9D,MAAM,IAAI,mDAAmD,CAAC;IAC9D,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC;QACzE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC;QAChF,MAAM,MAAM,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC;QACpF,MAAM,IAAI,KAAK,CAAC,CAAC,IAAI,MAAM,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC;IACnG,CAAC;IAED,gBAAgB;IAChB,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,wBAAwB,CAAC;QACnC,MAAM,IAAI,oCAAoC,CAAC;QAC/C,MAAM,IAAI,oCAAoC,CAAC;QAC/C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC;QACzE,CAAC;IACH,CAAC;IAED,YAAY;IACZ,MAAM,IAAI,mCAAmC,CAAC;IAC9C,MAAM,IAAI,6DAA6D,CAAC;IACxE,MAAM,IAAI,6CAA6C,CAAC;IACxD,MAAM,IAAI,qCAAqC,CAAC;IAChD,MAAM,IAAI,8CAA8C,CAAC;IACzD,MAAM,IAAI,+CAA+C,CAAC;IAC1D,MAAM,IAAI,kDAAkD,CAAC;IAC7D,MAAM,IAAI,wCAAwC,CAAC;IACnD,MAAM,IAAI,4CAA4C,CAAC;IACvD,MAAM,IAAI,4DAA4D,CAAC;IACvE,MAAM,IAAI,gDAAgD,CAAC;IAE3D,MAAM,IAAI,qEAAqE,CAAC;IAEhF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAChE,CAAC,CACF,CAAC;AAEF,yEAAyE;AAEzE,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "bidcraft-evaluate-mcp",
3
+ "version": "0.2.0",
4
+ "description": "MCP server for bid/no-bid evaluation — scores RFP opportunities on win probability, strategic fit, resource requirements, competitive positioning, and risk factors to make data-driven pursuit decisions",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "bidcraft-evaluate-mcp": "dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "README.md"
13
+ ],
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "start": "node dist/index.js",
17
+ "prepublishOnly": "npm run build"
18
+ },
19
+ "keywords": [
20
+ "mcp",
21
+ "model-context-protocol",
22
+ "bid-no-bid",
23
+ "rfp",
24
+ "proposal",
25
+ "bid-evaluation",
26
+ "win-probability",
27
+ "pursuit-decision",
28
+ "government-contracting",
29
+ "bidcraft",
30
+ "competitive-analysis",
31
+ "capture-management",
32
+ "pipeline-scoring",
33
+ "opportunity-assessment",
34
+ "go-no-go"
35
+ ],
36
+ "author": "Crawde",
37
+ "license": "MIT",
38
+ "dependencies": {
39
+ "@modelcontextprotocol/sdk": "^1.12.1",
40
+ "zod": "^3.24.4"
41
+ },
42
+ "devDependencies": {
43
+ "@types/node": "^25.6.2",
44
+ "typescript": "^5.8.3"
45
+ }
46
+ }