hazo_llm_api 1.0.4 → 1.0.5

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 (145) hide show
  1. package/dist/components/index.d.ts +7 -0
  2. package/dist/components/index.d.ts.map +1 -0
  3. package/dist/components/index.js +7 -0
  4. package/dist/components/index.js.map +1 -0
  5. package/dist/components/layout/index.d.ts +7 -0
  6. package/dist/components/layout/index.d.ts.map +1 -0
  7. package/dist/components/layout/index.js +7 -0
  8. package/dist/components/layout/index.js.map +1 -0
  9. package/dist/components/layout/layout.d.ts +21 -0
  10. package/dist/components/layout/layout.d.ts.map +1 -0
  11. package/dist/components/layout/layout.js +18 -0
  12. package/dist/components/layout/layout.js.map +1 -0
  13. package/dist/index.d.ts +15 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +21 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/lib/config/config_parser.d.ts +131 -0
  18. package/dist/lib/config/config_parser.d.ts.map +1 -0
  19. package/dist/lib/config/config_parser.js +297 -0
  20. package/dist/lib/config/config_parser.js.map +1 -0
  21. package/dist/lib/config/index.d.ts +8 -0
  22. package/dist/lib/config/index.d.ts.map +1 -0
  23. package/dist/lib/config/index.js +22 -0
  24. package/dist/lib/config/index.js.map +1 -0
  25. package/dist/lib/config/provider_loader.d.ts +113 -0
  26. package/dist/lib/config/provider_loader.d.ts.map +1 -0
  27. package/dist/lib/config/provider_loader.js +169 -0
  28. package/dist/lib/config/provider_loader.js.map +1 -0
  29. package/dist/lib/database/index.d.ts +8 -0
  30. package/dist/lib/database/index.d.ts.map +1 -0
  31. package/dist/lib/database/index.js +10 -0
  32. package/dist/lib/database/index.js.map +1 -0
  33. package/dist/lib/database/init_database.d.ts +118 -0
  34. package/dist/lib/database/init_database.d.ts.map +1 -0
  35. package/dist/lib/database/init_database.js +591 -0
  36. package/dist/lib/database/init_database.js.map +1 -0
  37. package/dist/lib/database/utils.d.ts +53 -0
  38. package/dist/lib/database/utils.d.ts.map +1 -0
  39. package/dist/lib/database/utils.js +87 -0
  40. package/dist/lib/database/utils.js.map +1 -0
  41. package/dist/lib/index.d.ts +14 -0
  42. package/dist/lib/index.d.ts.map +1 -0
  43. package/dist/lib/index.js +17 -0
  44. package/dist/lib/index.js.map +1 -0
  45. package/dist/lib/llm_api/chain_helpers.d.ts +117 -0
  46. package/dist/lib/llm_api/chain_helpers.d.ts.map +1 -0
  47. package/dist/lib/llm_api/chain_helpers.js +445 -0
  48. package/dist/lib/llm_api/chain_helpers.js.map +1 -0
  49. package/dist/lib/llm_api/hazo_llm_image_image.d.ts +26 -0
  50. package/dist/lib/llm_api/hazo_llm_image_image.d.ts.map +1 -0
  51. package/dist/lib/llm_api/hazo_llm_image_image.js +94 -0
  52. package/dist/lib/llm_api/hazo_llm_image_image.js.map +1 -0
  53. package/dist/lib/llm_api/hazo_llm_image_image_text.d.ts +26 -0
  54. package/dist/lib/llm_api/hazo_llm_image_image_text.d.ts.map +1 -0
  55. package/dist/lib/llm_api/hazo_llm_image_image_text.js +222 -0
  56. package/dist/lib/llm_api/hazo_llm_image_image_text.js.map +1 -0
  57. package/dist/lib/llm_api/hazo_llm_image_text.d.ts +20 -0
  58. package/dist/lib/llm_api/hazo_llm_image_text.d.ts.map +1 -0
  59. package/dist/lib/llm_api/hazo_llm_image_text.js +78 -0
  60. package/dist/lib/llm_api/hazo_llm_image_text.js.map +1 -0
  61. package/dist/lib/llm_api/hazo_llm_prompt_chain.d.ts +20 -0
  62. package/dist/lib/llm_api/hazo_llm_prompt_chain.d.ts.map +1 -0
  63. package/dist/lib/llm_api/hazo_llm_prompt_chain.js +368 -0
  64. package/dist/lib/llm_api/hazo_llm_prompt_chain.js.map +1 -0
  65. package/dist/lib/llm_api/hazo_llm_text_image.d.ts +20 -0
  66. package/dist/lib/llm_api/hazo_llm_text_image.d.ts.map +1 -0
  67. package/dist/lib/llm_api/hazo_llm_text_image.js +69 -0
  68. package/dist/lib/llm_api/hazo_llm_text_image.js.map +1 -0
  69. package/dist/lib/llm_api/hazo_llm_text_image_text.d.ts +26 -0
  70. package/dist/lib/llm_api/hazo_llm_text_image_text.d.ts.map +1 -0
  71. package/dist/lib/llm_api/hazo_llm_text_image_text.js +154 -0
  72. package/dist/lib/llm_api/hazo_llm_text_image_text.js.map +1 -0
  73. package/dist/lib/llm_api/hazo_llm_text_text.d.ts +20 -0
  74. package/dist/lib/llm_api/hazo_llm_text_text.d.ts.map +1 -0
  75. package/dist/lib/llm_api/hazo_llm_text_text.js +91 -0
  76. package/dist/lib/llm_api/hazo_llm_text_text.js.map +1 -0
  77. package/dist/lib/llm_api/index.d.ts +223 -0
  78. package/dist/lib/llm_api/index.d.ts.map +1 -0
  79. package/dist/lib/llm_api/index.js +1220 -0
  80. package/dist/lib/llm_api/index.js.map +1 -0
  81. package/dist/lib/llm_api/provider_helper.d.ts +163 -0
  82. package/dist/lib/llm_api/provider_helper.d.ts.map +1 -0
  83. package/dist/lib/llm_api/provider_helper.js +346 -0
  84. package/dist/lib/llm_api/provider_helper.js.map +1 -0
  85. package/dist/lib/llm_api/types.d.ts +667 -0
  86. package/dist/lib/llm_api/types.d.ts.map +1 -0
  87. package/dist/lib/llm_api/types.js +49 -0
  88. package/dist/lib/llm_api/types.js.map +1 -0
  89. package/dist/lib/prompts/get_prompt.d.ts +76 -0
  90. package/dist/lib/prompts/get_prompt.d.ts.map +1 -0
  91. package/dist/lib/prompts/get_prompt.js +342 -0
  92. package/dist/lib/prompts/get_prompt.js.map +1 -0
  93. package/dist/lib/prompts/index.d.ts +9 -0
  94. package/dist/lib/prompts/index.d.ts.map +1 -0
  95. package/dist/lib/prompts/index.js +9 -0
  96. package/dist/lib/prompts/index.js.map +1 -0
  97. package/dist/lib/prompts/prompt_cache.d.ts +151 -0
  98. package/dist/lib/prompts/prompt_cache.d.ts.map +1 -0
  99. package/dist/lib/prompts/prompt_cache.js +276 -0
  100. package/dist/lib/prompts/prompt_cache.js.map +1 -0
  101. package/dist/lib/prompts/substitute_variables.d.ts +38 -0
  102. package/dist/lib/prompts/substitute_variables.d.ts.map +1 -0
  103. package/dist/lib/prompts/substitute_variables.js +171 -0
  104. package/dist/lib/prompts/substitute_variables.js.map +1 -0
  105. package/dist/lib/providers/gemini/gemini_client.d.ts +25 -0
  106. package/dist/lib/providers/gemini/gemini_client.d.ts.map +1 -0
  107. package/dist/lib/providers/gemini/gemini_client.js +235 -0
  108. package/dist/lib/providers/gemini/gemini_client.js.map +1 -0
  109. package/dist/lib/providers/gemini/gemini_provider.d.ts +111 -0
  110. package/dist/lib/providers/gemini/gemini_provider.d.ts.map +1 -0
  111. package/dist/lib/providers/gemini/gemini_provider.js +431 -0
  112. package/dist/lib/providers/gemini/gemini_provider.js.map +1 -0
  113. package/dist/lib/providers/gemini/index.d.ts +8 -0
  114. package/dist/lib/providers/gemini/index.d.ts.map +1 -0
  115. package/dist/lib/providers/gemini/index.js +8 -0
  116. package/dist/lib/providers/gemini/index.js.map +1 -0
  117. package/dist/lib/providers/index.d.ts +8 -0
  118. package/dist/lib/providers/index.d.ts.map +1 -0
  119. package/dist/lib/providers/index.js +8 -0
  120. package/dist/lib/providers/index.js.map +1 -0
  121. package/dist/lib/providers/qwen/index.d.ts +8 -0
  122. package/dist/lib/providers/qwen/index.d.ts.map +1 -0
  123. package/dist/lib/providers/qwen/index.js +8 -0
  124. package/dist/lib/providers/qwen/index.js.map +1 -0
  125. package/dist/lib/providers/qwen/qwen_client.d.ts +154 -0
  126. package/dist/lib/providers/qwen/qwen_client.d.ts.map +1 -0
  127. package/dist/lib/providers/qwen/qwen_client.js +1002 -0
  128. package/dist/lib/providers/qwen/qwen_client.js.map +1 -0
  129. package/dist/lib/providers/qwen/qwen_provider.d.ts +139 -0
  130. package/dist/lib/providers/qwen/qwen_provider.d.ts.map +1 -0
  131. package/dist/lib/providers/qwen/qwen_provider.js +304 -0
  132. package/dist/lib/providers/qwen/qwen_provider.js.map +1 -0
  133. package/dist/lib/providers/registry.d.ts +66 -0
  134. package/dist/lib/providers/registry.d.ts.map +1 -0
  135. package/dist/lib/providers/registry.js +158 -0
  136. package/dist/lib/providers/registry.js.map +1 -0
  137. package/dist/lib/providers/types.d.ts +145 -0
  138. package/dist/lib/providers/types.d.ts.map +1 -0
  139. package/dist/lib/providers/types.js +37 -0
  140. package/dist/lib/providers/types.js.map +1 -0
  141. package/dist/server.d.ts +27 -0
  142. package/dist/server.d.ts.map +1 -0
  143. package/dist/server.js +50 -0
  144. package/dist/server.js.map +1 -0
  145. package/package.json +12 -1
@@ -0,0 +1,235 @@
1
+ /**
2
+ * Gemini API Client Module
3
+ *
4
+ * Handles communication with the Google Gemini API.
5
+ * Formats requests according to Gemini API specification and parses responses.
6
+ */
7
+ // =============================================================================
8
+ // Gemini API Client
9
+ // =============================================================================
10
+ /**
11
+ * Call the Gemini API with the given prompt and optional image data
12
+ * @param api_url - The Gemini API endpoint URL
13
+ * @param api_key - The API key for authentication
14
+ * @param prompt_text - The text prompt to send
15
+ * @param b64_data - Optional array of base64 encoded images
16
+ * @param logger - Logger instance
17
+ * @param generation_config - Optional generation configuration parameters
18
+ * @returns LLM response with generated text or error
19
+ */
20
+ export async function call_gemini_api(api_url, api_key, prompt_text, b64_data, logger, generation_config) {
21
+ const file_name = 'gemini_client.ts';
22
+ try {
23
+ // Build the request body with optional generation config
24
+ const request_body = build_gemini_request(prompt_text, b64_data, generation_config);
25
+ // Convert generation config to API format for logging
26
+ const api_generation_config = build_api_generation_config(generation_config);
27
+ // Log the Gemini API call with generation config
28
+ logger.debug('Calling Gemini API', {
29
+ file: file_name,
30
+ line: 42,
31
+ data: {
32
+ api_url,
33
+ prompt_text,
34
+ has_image_data: b64_data && b64_data.length > 0,
35
+ image_count: b64_data?.length || 0,
36
+ generation_config: api_generation_config || 'none (using defaults)',
37
+ },
38
+ });
39
+ // Make the API request
40
+ const response = await fetch(api_url, {
41
+ method: 'POST',
42
+ headers: {
43
+ 'Content-Type': 'application/json',
44
+ 'x-goog-api-key': api_key,
45
+ },
46
+ body: JSON.stringify(request_body),
47
+ });
48
+ // Parse the response
49
+ const response_data = await response.json();
50
+ // Check for errors
51
+ if (!response.ok || response_data.error) {
52
+ const error_message = response_data.error?.message || `HTTP ${response.status}`;
53
+ logger.error('Gemini API returned error', {
54
+ file: file_name,
55
+ line: 59,
56
+ data: {
57
+ status: response.status,
58
+ error: response_data.error,
59
+ },
60
+ });
61
+ return {
62
+ success: false,
63
+ error: error_message,
64
+ raw_response: response_data,
65
+ };
66
+ }
67
+ // Extract the generated text from response
68
+ const generated_text = extract_text_from_response(response_data, logger);
69
+ if (generated_text) {
70
+ return {
71
+ success: true,
72
+ text: generated_text,
73
+ raw_response: response_data,
74
+ };
75
+ }
76
+ else {
77
+ logger.warn('No text content in Gemini response', {
78
+ file: file_name,
79
+ line: 84,
80
+ data: { raw_response: response_data },
81
+ });
82
+ return {
83
+ success: false,
84
+ error: 'No text content in response',
85
+ raw_response: response_data,
86
+ };
87
+ }
88
+ }
89
+ catch (error) {
90
+ const error_message = error instanceof Error ? error.message : String(error);
91
+ logger.error('Failed to call Gemini API', {
92
+ file: file_name,
93
+ line: 97,
94
+ data: { error: error_message },
95
+ });
96
+ return {
97
+ success: false,
98
+ error: error_message,
99
+ };
100
+ }
101
+ }
102
+ // =============================================================================
103
+ // Request Building Functions
104
+ // =============================================================================
105
+ /**
106
+ * Convert snake_case GeminiGenerationConfig to camelCase API format
107
+ * Only includes parameters that are explicitly set (not undefined)
108
+ * @param config - Generation config in snake_case format
109
+ * @returns API-formatted generation config or undefined if no params set
110
+ */
111
+ function build_api_generation_config(config) {
112
+ if (!config) {
113
+ return undefined;
114
+ }
115
+ const api_config = {};
116
+ let has_params = false;
117
+ if (config.temperature !== undefined) {
118
+ api_config.temperature = config.temperature;
119
+ has_params = true;
120
+ }
121
+ if (config.max_output_tokens !== undefined) {
122
+ api_config.maxOutputTokens = config.max_output_tokens;
123
+ has_params = true;
124
+ }
125
+ if (config.top_p !== undefined) {
126
+ api_config.topP = config.top_p;
127
+ has_params = true;
128
+ }
129
+ if (config.top_k !== undefined) {
130
+ api_config.topK = config.top_k;
131
+ has_params = true;
132
+ }
133
+ if (config.candidate_count !== undefined) {
134
+ api_config.candidateCount = config.candidate_count;
135
+ has_params = true;
136
+ }
137
+ if (config.stop_sequences !== undefined && config.stop_sequences.length > 0) {
138
+ api_config.stopSequences = config.stop_sequences;
139
+ has_params = true;
140
+ }
141
+ if (config.response_mime_type !== undefined) {
142
+ api_config.responseMimeType = config.response_mime_type;
143
+ has_params = true;
144
+ }
145
+ return has_params ? api_config : undefined;
146
+ }
147
+ /**
148
+ * Build the Gemini API request body
149
+ * @param prompt_text - The text prompt
150
+ * @param b64_data - Optional base64 encoded images
151
+ * @param generation_config - Optional generation configuration parameters
152
+ * @returns Formatted request body for Gemini API
153
+ */
154
+ function build_gemini_request(prompt_text, b64_data, generation_config) {
155
+ const parts = [];
156
+ // Add image parts first (if any)
157
+ if (b64_data && b64_data.length > 0) {
158
+ for (const img of b64_data) {
159
+ parts.push({
160
+ inline_data: {
161
+ mime_type: img.mime_type,
162
+ data: img.data,
163
+ },
164
+ });
165
+ }
166
+ }
167
+ // Add the text prompt
168
+ parts.push({
169
+ text: prompt_text,
170
+ });
171
+ const request_body = {
172
+ contents: [
173
+ {
174
+ parts,
175
+ },
176
+ ],
177
+ };
178
+ // Add generation config if any parameters are set
179
+ const api_generation_config = build_api_generation_config(generation_config);
180
+ if (api_generation_config) {
181
+ request_body.generationConfig = api_generation_config;
182
+ }
183
+ return request_body;
184
+ }
185
+ // =============================================================================
186
+ // Response Parsing Functions
187
+ // =============================================================================
188
+ /**
189
+ * Extract text content from Gemini API response
190
+ * @param response - The Gemini API response
191
+ * @param logger - Logger instance
192
+ * @returns The generated text or null if not found
193
+ */
194
+ function extract_text_from_response(response, logger) {
195
+ const file_name = 'gemini_client.ts';
196
+ if (!response.candidates || response.candidates.length === 0) {
197
+ logger.debug('No candidates in response', {
198
+ file: file_name,
199
+ line: 195,
200
+ });
201
+ return null;
202
+ }
203
+ const first_candidate = response.candidates[0];
204
+ if (!first_candidate.content || !first_candidate.content.parts) {
205
+ logger.debug('No content parts in first candidate', {
206
+ file: file_name,
207
+ line: 204,
208
+ });
209
+ return null;
210
+ }
211
+ // Concatenate all text parts
212
+ const text_parts = [];
213
+ for (const part of first_candidate.content.parts) {
214
+ if ('text' in part && part.text) {
215
+ text_parts.push(part.text);
216
+ }
217
+ }
218
+ if (text_parts.length === 0) {
219
+ logger.debug('No text parts found in candidate', {
220
+ file: file_name,
221
+ line: 219,
222
+ });
223
+ return null;
224
+ }
225
+ return text_parts.join('');
226
+ }
227
+ /**
228
+ * Get the default Gemini API URL
229
+ * @param model - The model name (default: gemini-2.5-flash)
230
+ * @returns The API URL
231
+ */
232
+ export function get_gemini_api_url(model = 'gemini-2.5-flash') {
233
+ return `https://generativelanguage.googleapis.com/v1/models/${model}:generateContent`;
234
+ }
235
+ //# sourceMappingURL=gemini_client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini_client.js","sourceRoot":"","sources":["../../../../src/lib/providers/gemini/gemini_client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Gemini Provider Implementation
3
+ *
4
+ * Implements the LLMProvider interface for Google's Gemini API.
5
+ * Handles all Gemini-specific logic including API calls, configuration, and capabilities.
6
+ */
7
+ import type { LLMProvider, LLMCapabilities, ServiceType } from '../types.js';
8
+ import type { TextTextParams, ImageTextParams, TextImageParams, ImageImageParams, LLMResponse, Logger, GeminiGenerationConfig } from '../../llm_api/types.js';
9
+ /**
10
+ * Configuration for Gemini provider
11
+ */
12
+ export interface GeminiProviderConfig {
13
+ /** API key from .env.local (GEMINI_API_KEY) */
14
+ api_key: string;
15
+ /** Base API URL for text generation */
16
+ api_url?: string;
17
+ /** API URL for image generation (optional) */
18
+ api_url_image?: string;
19
+ /** Model for text_text service (e.g., gemini-2.5-flash) */
20
+ model_text_text?: string;
21
+ /** Model for image_text service */
22
+ model_image_text?: string;
23
+ /** Model for text_image service */
24
+ model_text_image?: string;
25
+ /** Model for image_image service */
26
+ model_image_image?: string;
27
+ /** Generation config for text API calls */
28
+ text_config?: GeminiGenerationConfig;
29
+ /** Generation config for image API calls */
30
+ image_config?: GeminiGenerationConfig;
31
+ /** Capabilities this provider supports */
32
+ capabilities?: ServiceType[];
33
+ /** Logger instance */
34
+ logger: Logger;
35
+ }
36
+ /**
37
+ * Gemini LLM Provider
38
+ * Implements the LLMProvider interface for Google Gemini API
39
+ */
40
+ export declare class GeminiProvider implements LLMProvider {
41
+ private readonly name;
42
+ private readonly api_key;
43
+ private readonly api_url;
44
+ private readonly api_url_image;
45
+ private readonly model_text_text;
46
+ private readonly model_image_text;
47
+ private readonly model_text_image;
48
+ private readonly model_image_image;
49
+ private readonly text_config;
50
+ private readonly image_config;
51
+ private readonly capabilities;
52
+ private readonly logger;
53
+ /**
54
+ * Create a new Gemini provider instance
55
+ * @param config - Gemini provider configuration
56
+ */
57
+ constructor(config: GeminiProviderConfig);
58
+ /**
59
+ * Get the provider name
60
+ * @returns Provider name
61
+ */
62
+ get_name(): string;
63
+ /**
64
+ * Get the capabilities this provider supports
65
+ * @returns Set of supported service types
66
+ */
67
+ get_capabilities(): LLMCapabilities;
68
+ /**
69
+ * Get the model name configured for a specific service type
70
+ * @param service_type - The service type to get the model for
71
+ * @returns Model name or undefined if not configured
72
+ */
73
+ get_model_for_service(service_type: ServiceType): string | undefined;
74
+ /**
75
+ * Text input → Text output
76
+ * Generate text from a text prompt
77
+ *
78
+ * @param params - Text input parameters
79
+ * @param logger - Logger instance
80
+ * @returns LLM response with generated text
81
+ */
82
+ text_text(params: TextTextParams, logger: Logger): Promise<LLMResponse>;
83
+ /**
84
+ * Image input → Text output
85
+ * Analyze an image and generate text description
86
+ *
87
+ * @param params - Image input parameters
88
+ * @param logger - Logger instance
89
+ * @returns LLM response with generated text
90
+ */
91
+ image_text(params: ImageTextParams, logger: Logger): Promise<LLMResponse>;
92
+ /**
93
+ * Text input → Image output
94
+ * Generate an image from a text prompt
95
+ *
96
+ * @param params - Text input parameters for image generation
97
+ * @param logger - Logger instance
98
+ * @returns LLM response with generated image
99
+ */
100
+ text_image(params: TextImageParams, logger: Logger): Promise<LLMResponse>;
101
+ /**
102
+ * Image input → Image output
103
+ * Transform/edit an image based on instructions
104
+ *
105
+ * @param params - Image input parameters with transformation instructions
106
+ * @param logger - Logger instance
107
+ * @returns LLM response with transformed image
108
+ */
109
+ image_image(params: ImageImageParams, logger: Logger): Promise<LLMResponse>;
110
+ }
111
+ //# sourceMappingURL=gemini_provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini_provider.d.ts","sourceRoot":"","sources":["../../../../src/lib/providers/gemini/gemini_provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,WAAW,EACZ,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,MAAM,EAEN,sBAAsB,EACvB,MAAM,wBAAwB,CAAC;AAShC;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAEhB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,2DAA2D;IAC3D,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,mCAAmC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,mCAAmC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,oCAAoC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,2CAA2C;IAC3C,WAAW,CAAC,EAAE,sBAAsB,CAAC;IAErC,4CAA4C;IAC5C,YAAY,CAAC,EAAE,sBAAsB,CAAC;IAEtC,0CAA0C;IAC1C,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAE7B,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD;;;GAGG;AACH,qBAAa,cAAe,YAAW,WAAW;IAChD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqB;IACrD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqB;IACtD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqB;IACtD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAqB;IACvD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqC;IACjE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqC;IAClE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkB;IAC/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC;;;OAGG;gBACS,MAAM,EAAE,oBAAoB;IA0BxC;;;OAGG;IACH,QAAQ,IAAI,MAAM;IAIlB;;;OAGG;IACH,gBAAgB,IAAI,eAAe;IAInC;;;;OAIG;IACH,qBAAqB,CAAC,YAAY,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS;IAepE;;;;;;;OAOG;IACG,SAAS,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA+B7E;;;;;;;OAOG;IACG,UAAU,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAwC/E;;;;;;;OAOG;IACG,UAAU,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAqI/E;;;;;;;OAOG;IACG,WAAW,CAAC,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAyKlF"}