@jeffusion/bungee-core 5.23.3 → 5.24.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/dist/main.js
CHANGED
|
@@ -201027,7 +201027,7 @@ var package_default;
|
|
|
201027
201027
|
var init_package = __esm(() => {
|
|
201028
201028
|
package_default = {
|
|
201029
201029
|
name: "@jeffusion/bungee-core",
|
|
201030
|
-
version: "5.
|
|
201030
|
+
version: "5.24.0",
|
|
201031
201031
|
description: "Bungee reverse proxy core engine",
|
|
201032
201032
|
main: "./dist/main.js",
|
|
201033
201033
|
types: "./dist/main.d.ts",
|
|
@@ -1439,10 +1439,12 @@ var CODEX_RESPONSES_ORIGINATOR = "codex-tui";
|
|
|
1439
1439
|
// plugins/chatgpt-oauth/server/adapter.ts
|
|
1440
1440
|
var CHAT_COMPLETIONS_PATH = "/v1/chat/completions";
|
|
1441
1441
|
var RESPONSES_PATH = "/responses";
|
|
1442
|
+
var SEARCH_PATH = "/alpha/search";
|
|
1442
1443
|
var SIWC_RESPONSES_PATH = "/v1/responses";
|
|
1443
1444
|
var MODELS_PATH = "/v1/models";
|
|
1444
1445
|
var CODEX_RESPONSES_PATH = "/backend-api/codex/responses";
|
|
1445
1446
|
var CODEX_MODELS_PATH = "/backend-api/codex/models";
|
|
1447
|
+
var CODEX_SEARCH_PATH = "/backend-api/codex/alpha/search";
|
|
1446
1448
|
function isResponsesRequest(url) {
|
|
1447
1449
|
return url.pathname === RESPONSES_PATH;
|
|
1448
1450
|
}
|
|
@@ -1879,6 +1881,10 @@ class ChatgptOauthAdapter {
|
|
|
1879
1881
|
}));
|
|
1880
1882
|
return context;
|
|
1881
1883
|
}
|
|
1884
|
+
if (context.method.toUpperCase() === "POST" && context.url.pathname === SEARCH_PATH) {
|
|
1885
|
+
context.url.pathname = CODEX_SEARCH_PATH;
|
|
1886
|
+
return context;
|
|
1887
|
+
}
|
|
1882
1888
|
if (context.url.pathname === CODEX_RESPONSES_PATH) {
|
|
1883
1889
|
setCodexRoutingHint(context.headers, context.body);
|
|
1884
1890
|
enforceCodexResponsesLite(context);
|
|
@@ -2128,4 +2134,4 @@ export {
|
|
|
2128
2134
|
server_default as default
|
|
2129
2135
|
};
|
|
2130
2136
|
|
|
2131
|
-
//# debugId=
|
|
2137
|
+
//# debugId=76D0FF2CAF8435B164756E2164756E21
|
|
@@ -21,10 +21,10 @@
|
|
|
21
21
|
"import type { BodyEvent } from '@jeffusion/bungee-core/plugin';\nimport type { RawResponseError } from '@jeffusion/bungee-core/plugin';\nimport { upstreamErrorDiagnostic } from './error-diagnostics';\n\nexport type JsonObject = Record<string, any>;\n\nexport type ProtocolErrorKind = 'cancelled' | 'body_limit' | 'invalid_sse' | 'failed' | 'incomplete' | 'unexpected_eof' | 'invalid_response';\n\nexport class CodexProtocolError extends Error {\n readonly kind: ProtocolErrorKind;\n readonly reason?: string;\n readonly diagnostic?: RawResponseError;\n constructor(kind: ProtocolErrorKind, message: string, reason?: string, diagnostic?: RawResponseError) {\n super(message);\n this.name = 'CodexProtocolError';\n this.kind = kind;\n this.reason = reason;\n this.diagnostic = diagnostic;\n }\n}\n\nconst UNSUPPORTED_RESPONSES_FIELDS = [\n 'max_output_tokens', 'max_completion_tokens', 'temperature', 'top_p',\n 'truncation', 'prompt_cache_options', 'prompt_cache_retention', 'user', 'context_management'\n];\n\nfunction clone<T>(value: T): T {\n return structuredClone(value);\n}\n\nfunction responseContentPart(part: any, role: string): any | undefined {\n if (!part || typeof part !== 'object') return undefined;\n if (part.type === 'text' || part.type === 'input_text' || part.type === 'output_text') {\n return { type: role === 'assistant' ? 'output_text' : 'input_text', text: String(part.text ?? '') };\n }\n if ((part.type === 'image_url' || part.type === 'input_image') && role === 'user') {\n const image = part.type === 'input_image'\n ? { url: part.image_url, file_id: part.file_id, detail: part.detail }\n : (typeof part.image_url === 'string' ? { url: part.image_url } : part.image_url ?? {});\n if (image.url || image.file_id) return { type: 'input_image', ...(image.url ? { image_url: image.url } : {}), ...(image.file_id ? { file_id: image.file_id } : {}), ...(image.detail ? { detail: image.detail } : {}) };\n }\n if ((part.type === 'file' || part.type === 'input_file') && role === 'user') {\n const file = part.type === 'input_file' ? part : part.file;\n if (file.file_id || file.file_data || file.file_url) return { type: 'input_file', ...file };\n }\n if (part.type === 'input_audio' && role === 'user' && part.input_audio?.data) {\n return { type: 'input_audio', data: part.input_audio.data, ...(part.input_audio.format ? { format: part.input_audio.format } : {}) };\n }\n return { type: 'input_text', text: typeof part === 'string' ? part : JSON.stringify(part) };\n}\n\nfunction messageToResponseItems(message: any, customToolNames: Set<string>): any[] {\n const role = message.role === 'system' ? 'developer' : message.role;\n const content = message.content;\n const parts: any[] = [];\n if (typeof content === 'string' && content.length > 0) parts.push({ type: role === 'assistant' ? 'output_text' : 'input_text', text: content });\n else if (Array.isArray(content)) {\n for (const part of content) {\n const converted = responseContentPart(part, role);\n if (converted) parts.push(converted);\n }\n }\n const items: any[] = [];\n if (role !== 'assistant' || parts.length > 0) items.push({ type: 'message', role, content: parts });\n if (role === 'assistant' && Array.isArray(message.tool_calls)) {\n for (let i = 0; i < message.tool_calls.length; i++) {\n const call = message.tool_calls[i];\n if (!call || typeof call !== 'object') continue;\n const fn = call.type === 'custom' ? call.custom ?? {} : call.function ?? {};\n const name = typeof fn.name === 'string' ? fn.name : '';\n if (!name) continue;\n validateCodexToolName(name);\n const callId = typeof call.id === 'string' && call.id ? call.id : undefined;\n if (call.type === 'custom' || customToolNames.has(name)) items.push({ type: 'custom_tool_call', ...(callId ? { call_id: callId } : {}), name, input: String(fn.input ?? fn.arguments ?? '') });\n else items.push({ type: 'function_call', ...(callId ? { call_id: callId } : {}), name, arguments: String(fn.arguments ?? '') });\n }\n }\n return items;\n}\n\nfunction toolOutputContent(content: any): string | any[] {\n if (typeof content === 'string') return content;\n if (Array.isArray(content)) {\n const supported = new Set(['text', 'input_text', 'output_text', 'image_url', 'input_image', 'file', 'input_file', 'input_audio']);\n const converted = content.map((part) => supported.has(part?.type) ? responseContentPart(part, 'user') : undefined);\n if (converted.some((part) => part === undefined || part === null)) {\n throw new CodexProtocolError('invalid_response', 'Chat tool output contains an unsupported content part');\n }\n return converted as any[];\n }\n return content;\n}\n\nfunction validateCodexToolName(name: unknown): string {\n if (typeof name !== 'string' || !name || name.length > 64 || !/^[A-Za-z0-9_-]+$/.test(name)) {\n throw new CodexProtocolError('invalid_response', 'Codex tool names must be 1-64 ASCII letters, digits, underscores or hyphens');\n }\n return name;\n}\n\nexport function convertChatCompletionsRequestToCodex(input: JsonObject, model = String(input.model ?? '')): JsonObject {\n const out: JsonObject = {\n instructions: '', stream: true, store: false, parallel_tool_calls: true,\n include: ['reasoning.encrypted_content'], model, input: []\n };\n const pending = new Map<string, any>();\n const explicitCallIds = new Set<string>();\n const usedCallIds = new Set<string>();\n let missingCallNumber = 0;\n const messages = Array.isArray(input.messages) ? input.messages : [];\n for (const message of messages) {\n for (const call of message?.role === 'assistant' && Array.isArray(message.tool_calls) ? message.tool_calls : []) {\n if (typeof call?.id !== 'string' || !call.id) continue;\n if (explicitCallIds.has(call.id)) throw new CodexProtocolError('invalid_response', 'Chat request contains a duplicate tool call id');\n explicitCallIds.add(call.id);\n }\n }\n const customToolNames = new Set<string>((input.tools ?? []).filter((tool: any) => tool?.type === 'custom').map((tool: any) => validateCodexToolName(tool.name ?? tool.custom?.name)));\n for (const message of messages) {\n if (!message || typeof message !== 'object') continue;\n if (message.role === 'tool') {\n const requestedCallId = String(message.tool_call_id ?? '');\n let pendingKey = requestedCallId;\n let pendingCall = pending.get(requestedCallId);\n if (!pendingCall && !requestedCallId && pending.size === 1) {\n pendingKey = pending.keys().next().value as string;\n pendingCall = pending.get(pendingKey);\n }\n if (!pendingCall) throw new CodexProtocolError('invalid_response', 'Chat tool result has no matching tool call');\n out.input.push({ type: pendingCall.type === 'custom_tool_call' ? 'custom_tool_call_output' : 'function_call_output', call_id: pendingCall.call_id, output: toolOutputContent(message.content) });\n pending.delete(pendingKey);\n continue;\n }\n if (pending.size > 0) throw new CodexProtocolError('invalid_response', 'Chat request contains an unresolved pending tool call before a new message');\n const items = messageToResponseItems(message, customToolNames);\n out.input.push(...items);\n for (const item of items) {\n if (item.type !== 'function_call' && item.type !== 'custom_tool_call') continue;\n if (!item.call_id) {\n do item.call_id = `call_missing_${missingCallNumber++}`;\n while (explicitCallIds.has(item.call_id) || usedCallIds.has(item.call_id));\n } else if (usedCallIds.has(item.call_id)) {\n throw new CodexProtocolError('invalid_response', 'Chat request contains a duplicate tool call id');\n }\n usedCallIds.add(item.call_id);\n pending.set(item.call_id, item);\n }\n }\n if (input.reasoning_effort !== undefined) out.reasoning = { effort: input.reasoning_effort };\n else out.reasoning = { effort: 'medium' };\n if (Array.isArray(input.tools)) {\n out.tools = input.tools.map((tool: any) => {\n if (tool?.type === 'function') return { type: 'function', name: validateCodexToolName(tool.function?.name), description: tool.function?.description ?? '', parameters: tool.function?.parameters ?? { type: 'object', properties: {} }, strict: tool.function?.strict ?? false };\n return clone(tool);\n }).filter((tool: any) => tool && (tool.type !== 'function' || tool.name));\n }\n if (input.tool_choice !== undefined) {\n if (typeof input.tool_choice === 'string' && ['auto', 'none', 'required'].includes(input.tool_choice)) out.tool_choice = input.tool_choice;\n else if (input.tool_choice?.type === 'function') out.tool_choice = { type: 'function', name: validateCodexToolName(input.tool_choice.function?.name ?? input.tool_choice.name) };\n else if (input.tool_choice?.type === 'custom') out.tool_choice = { type: 'custom', name: validateCodexToolName(input.tool_choice.custom?.name ?? input.tool_choice.name) };\n else throw new CodexProtocolError('invalid_response', 'Chat tool_choice is not representable by Codex');\n }\n if (input.text) out.text = clone(input.text);\n if (input.response_format?.type === 'json_object') throw new CodexProtocolError('invalid_response', 'Codex Responses does not support response_format json_object');\n if (input.response_format?.type === 'text') {\n out.text ??= {};\n out.text.format = { type: 'text' };\n } else if (input.response_format?.type === 'json_schema') {\n out.text ??= {};\n out.text.format = { type: 'json_schema', ...clone(input.response_format.json_schema) };\n }\n if (input.service_tier === 'priority') out.service_tier = input.service_tier;\n if (isCodexResponsesLite(input)) out.client_metadata = clone(input.client_metadata);\n return normalizeCodexResponsesRequest(out);\n}\n\n/** Convert an OpenAI Responses request into the Chat Completions request shape.\n * This is intentionally a data conversion only; it does not claim a model catalog.\n */\nexport function convertResponsesRequestToChatCompletions(input: JsonObject): JsonObject {\n const messages: any[] = [];\n if (typeof input.instructions === 'string' && input.instructions) messages.push({ role: 'system', content: input.instructions });\n const inputItems = typeof input.input === 'string' ? [{ type: 'message', role: 'user', content: [{ type: 'input_text', text: input.input }] }] : (Array.isArray(input.input) ? input.input : []);\n for (const item of inputItems) {\n if (!item || typeof item !== 'object') throw new CodexProtocolError('invalid_response', 'Responses input item is not representable by Chat Completions');\n if (item.type === 'message' || (!item.type && typeof item.role === 'string')) {\n const role = item.role === 'developer' ? 'system' : item.role;\n const content = Array.isArray(item.content) ? item.content.map((part: any) => {\n if (part?.type === 'input_text' || part?.type === 'output_text') return { type: 'text', text: String(part.text ?? '') };\n if (part?.type === 'input_image') return { type: 'image_url', image_url: { ...(part.image_url ? { url: part.image_url } : {}), ...(part.file_id ? { file_id: part.file_id } : {}), ...(part.detail ? { detail: part.detail } : {}) } };\n if (part?.type === 'input_file') {\n const { type: _type, ...file } = part;\n return { type: 'file', file };\n }\n if (part?.type === 'input_audio') return { type: 'input_audio', input_audio: { data: part.data, format: part.format } };\n throw new CodexProtocolError('invalid_response', 'Responses input message contains an unsupported content part');\n }) : item.content === undefined || item.content === null || typeof item.content === 'string' ? item.content : (() => { throw new CodexProtocolError('invalid_response', 'Responses input message has an unsupported content structure'); })();\n messages.push({ role, content });\n } else if (item.type === 'function_call' || item.type === 'custom_tool_call') {\n const call = { id: item.call_id, type: 'function', function: { name: validateCodexToolName(item.name), arguments: String(item.arguments ?? item.input ?? '') } };\n const previous = messages.at(-1);\n if (previous?.role === 'assistant' && Array.isArray(previous.tool_calls)) previous.tool_calls.push(call);\n else messages.push({ role: 'assistant', content: null, tool_calls: [call] });\n } else if (item.type === 'function_call_output' || item.type === 'custom_tool_call_output') {\n messages.push({ role: 'tool', tool_call_id: item.call_id, content: typeof item.output === 'string' ? item.output : JSON.stringify(item.output ?? '') });\n } else throw new CodexProtocolError('invalid_response', 'Responses input item is not representable by Chat Completions');\n }\n const output: JsonObject = { model: input.model, messages };\n if (input.reasoning?.effort) output.reasoning_effort = input.reasoning.effort;\n if (Array.isArray(input.tools)) {\n if (input.tools.some((tool: any) => tool?.type !== 'function')) throw new CodexProtocolError('invalid_response', 'Responses built-in tools are not representable in Chat Completions');\n output.tools = input.tools.map((tool: any) => ({ type: 'function', function: { name: validateCodexToolName(tool.name), description: tool.description, parameters: tool.parameters, ...(tool.strict !== undefined ? { strict: tool.strict } : {}) } }));\n }\n if (input.tool_choice !== undefined) {\n if (typeof input.tool_choice === 'string' && ['auto', 'none', 'required'].includes(input.tool_choice)) output.tool_choice = input.tool_choice;\n else if (input.tool_choice?.type === 'function') output.tool_choice = { type: 'function', function: { name: validateCodexToolName(input.tool_choice.name ?? input.tool_choice.function?.name) } };\n else throw new CodexProtocolError('invalid_response', 'Responses tool_choice is not representable by Chat Completions');\n }\n const format = input.text?.format ?? input.response_format;\n if (format !== undefined) {\n if (format.type === 'text' || format.type === 'json_object') output.response_format = { type: format.type };\n else if (format.type === 'json_schema') {\n const { type: _type, json_schema: nested, ...rest } = format;\n const json_schema = nested ?? rest;\n output.response_format = { type: 'json_schema', json_schema };\n } else throw new CodexProtocolError('invalid_response', 'Responses text format is not representable by Chat Completions');\n }\n if (input.stream !== undefined) output.stream = input.stream;\n return output;\n}\n\nexport function isCodexResponsesLite(input: unknown, headers?: Record<string, string>): boolean {\n if (Object.entries(headers ?? {}).some(([name, value]) =>\n name.toLowerCase() === 'x-openai-internal-codex-responses-lite' && value.trim().toLowerCase() === 'true')) return true;\n if (typeof input !== 'object' || input === null || Array.isArray(input)) return false;\n const metadataValue = (input as JsonObject).client_metadata?.ws_request_header_x_openai_internal_codex_responses_lite;\n return metadataValue === true || typeof metadataValue === 'string' && metadataValue.trim().toLowerCase() === 'true';\n}\n\nexport function normalizeCodexResponsesRequest(input: JsonObject): JsonObject {\n const out = clone(input);\n if (out.instructions === undefined || out.instructions === null) out.instructions = '';\n if (out.response_format?.type === 'json_object') throw new CodexProtocolError('invalid_response', 'Codex Responses does not support response_format json_object');\n out.stream = true;\n out.store = false;\n out.parallel_tool_calls = isCodexResponsesLite(out) ? false : true;\n out.include = ['reasoning.encrypted_content'];\n if (typeof out.input === 'string') out.input = [{ type: 'message', role: 'user', content: [{ type: 'input_text', text: out.input }] }];\n if (Array.isArray(out.input)) {\n for (const item of out.input) {\n if ((!item?.type || item.type === 'message') && item.role === 'system') item.role = 'developer';\n if (Array.isArray(item?.content)) item.content = item.content.map((part: any) => {\n if (part?.prompt_cache_breakpoint !== undefined) {\n const cleaned = { ...part };\n delete cleaned.prompt_cache_breakpoint;\n return cleaned;\n }\n return part;\n });\n }\n }\n for (const field of UNSUPPORTED_RESPONSES_FIELDS) delete out[field];\n if (out.service_tier !== 'priority') delete out.service_tier;\n const normalizeTool = (tool: any): any => {\n if (tool?.type === 'web_search_preview' || tool?.type === 'web_search_preview_2025_03_11') return { ...tool, type: 'web_search' };\n if (tool?.type === 'function' || tool?.type === 'custom') validateCodexToolName(tool.name ?? tool.function?.name ?? tool.custom?.name);\n return tool;\n };\n if (Array.isArray(out.tools)) out.tools = out.tools.map(normalizeTool);\n if (out.tool_choice?.type === 'web_search_preview' || out.tool_choice?.type === 'web_search_preview_2025_03_11') out.tool_choice.type = 'web_search';\n if (out.tool_choice?.type === 'function' || out.tool_choice?.type === 'custom') validateCodexToolName(out.tool_choice.name ?? out.tool_choice.function?.name ?? out.tool_choice.custom?.name);\n if (Array.isArray(out.tool_choice?.tools)) out.tool_choice.tools = out.tool_choice.tools.map(normalizeTool);\n return out;\n}\n\nexport interface CodexSSEEvent {\n /** Codex payload discriminator, independent of the SSE event field. */\n type?: string;\n data: JsonObject;\n id?: string;\n envelope?: BodyEvent;\n}\n\n/** Transport framing and JSON decoding belong to the host body service. */\nexport type SSESource = AsyncIterable<BodyEvent>;\n\nfunction protocolAbort(): CodexProtocolError {\n return new CodexProtocolError('cancelled', 'Codex response processing was cancelled');\n}\n\nexport interface CodexSSEOptions {\n signal?: AbortSignal;\n}\n\n/** Validate only Codex payload semantics; never parse or read wire bytes here. */\nexport async function* parseCodexSSE(source: SSESource, options: CodexSSEOptions = {}): AsyncGenerator<CodexSSEEvent> {\n const iterator = source[Symbol.asyncIterator]();\n let finished = false;\n let abortListener: (() => void) | undefined;\n const abort = new Promise<never>((_, reject) => {\n if (!options.signal) return;\n abortListener = () => reject(protocolAbort());\n options.signal.addEventListener('abort', abortListener, { once: true });\n });\n try {\n for (;;) {\n if (options.signal?.aborted) throw protocolAbort();\n const next = await (options.signal ? Promise.race([iterator.next(), abort]) : iterator.next());\n if (next.done) { finished = true; return; }\n const frame = next.value;\n if (frame.hasData === false) continue;\n if (frame.truncated) throw new CodexProtocolError('invalid_sse', 'Codex response contained an unfinished SSE frame');\n if (frame.data.trim() === '[DONE]') {\n yield { type: 'done', data: {}, id: frame.id, envelope: frame };\n continue;\n }\n const parsed = frame.json;\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) throw new CodexProtocolError('invalid_sse', 'Codex response contained invalid SSE JSON');\n const object = parsed as JsonObject;\n if (typeof object.type !== 'string' || !object.type) throw new CodexProtocolError('invalid_sse', 'Codex SSE event has no type');\n yield { type: object.type, data: object, id: frame.id, envelope: frame };\n }\n } catch (error) {\n if (options.signal?.aborted || (error as { code?: string })?.code === 'body_consumer_cancelled') throw protocolAbort();\n const code = (error as { code?: string })?.code;\n if (['body_sse_frame_too_large', 'decoded_body_too_large', 'request_body_too_large'].includes(code ?? '')) {\n throw new CodexProtocolError('body_limit', 'Codex response exceeded the host body limit');\n }\n throw error;\n } finally {\n if (abortListener) options.signal?.removeEventListener('abort', abortListener);\n if (!finished) void Promise.resolve(iterator.return?.()).catch(() => undefined);\n }\n}\n\ninterface ToolState {\n index: number;\n id: string;\n name: string;\n kind: 'function_call' | 'custom_tool_call';\n arguments: string;\n emittedArguments: boolean;\n done: boolean;\n}\n\nfunction chatToolCall(state: ToolState, value: string, includeIdentity: boolean, preserveCustomTools: boolean): JsonObject {\n const custom = preserveCustomTools && state.kind === 'custom_tool_call';\n return {\n index: state.index,\n ...(includeIdentity ? { id: state.id, type: custom ? 'custom' : 'function' } : {}),\n [custom ? 'custom' : 'function']: { ...(includeIdentity ? { name: state.name } : {}), [custom ? 'input' : 'arguments']: value },\n };\n}\n\ninterface OutputRecord {\n item: JsonObject;\n index?: number;\n order: number;\n id?: string;\n callId?: string;\n contentIndex?: number;\n}\n\nexport interface CodexResponseState {\n response: JsonObject;\n terminal: 'completed' | 'incomplete';\n output: any[];\n chunks: JsonObject[];\n}\n\nexport interface CodexConversionOptions extends CodexSSEOptions {\n preserveCustomTools?: boolean;\n includeUsage?: boolean;\n request?: JsonObject;\n target?: 'chat' | 'responses';\n redactDiagnostic?: (message: string) => string;\n}\n\nexport function streamIncludesUsage(request: JsonObject): boolean {\n return request?.stream_options?.include_usage === true;\n}\n\nfunction eventObject(event: CodexSSEEvent): JsonObject {\n return event.data;\n}\n\nfunction usageFrom(response: any): any | undefined {\n return response?.usage ? clone(response.usage) : undefined;\n}\n\nfunction responsesUsageToChat(usage: any): any {\n if (!usage) return undefined;\n const mapped: any = {};\n if (usage.input_tokens !== undefined) mapped.prompt_tokens = usage.input_tokens;\n if (usage.output_tokens !== undefined) mapped.completion_tokens = usage.output_tokens;\n if (usage.total_tokens !== undefined) mapped.total_tokens = usage.total_tokens;\n if (usage.input_tokens_details) {\n mapped.prompt_tokens_details = {};\n if (usage.input_tokens_details.cached_tokens !== undefined) mapped.prompt_tokens_details.cached_tokens = usage.input_tokens_details.cached_tokens;\n if (usage.input_tokens_details.cache_write_tokens !== undefined) {\n mapped.prompt_tokens_details.cache_write_tokens = usage.input_tokens_details.cache_write_tokens;\n mapped.prompt_tokens_details.cached_creation_tokens = usage.input_tokens_details.cache_write_tokens;\n }\n }\n if (usage.output_tokens_details?.reasoning_tokens !== undefined) {\n mapped.completion_tokens_details = { reasoning_tokens: usage.output_tokens_details.reasoning_tokens };\n }\n return mapped;\n}\n\nfunction chatUsageToResponses(usage: any): any {\n if (!usage) return undefined;\n const mapped: any = {};\n if (usage.prompt_tokens !== undefined) mapped.input_tokens = usage.prompt_tokens;\n if (usage.completion_tokens !== undefined) mapped.output_tokens = usage.completion_tokens;\n if (usage.total_tokens !== undefined) mapped.total_tokens = usage.total_tokens;\n if (usage.prompt_tokens_details) {\n mapped.input_tokens_details = {};\n if (usage.prompt_tokens_details.cached_tokens !== undefined) mapped.input_tokens_details.cached_tokens = usage.prompt_tokens_details.cached_tokens;\n if (usage.prompt_tokens_details.cache_write_tokens !== undefined) mapped.input_tokens_details.cache_write_tokens = usage.prompt_tokens_details.cache_write_tokens;\n else if (usage.prompt_tokens_details.cached_creation_tokens !== undefined) mapped.input_tokens_details.cache_write_tokens = usage.prompt_tokens_details.cached_creation_tokens;\n }\n if (usage.completion_tokens_details?.reasoning_tokens !== undefined) mapped.output_tokens_details = { reasoning_tokens: usage.completion_tokens_details.reasoning_tokens };\n return mapped;\n}\n\nfunction textFromItem(item: any): string {\n if (!Array.isArray(item?.content)) return '';\n return item.content.filter((part: any) => part?.type === 'output_text' || part?.type === 'text').map((part: any) => String(part.text ?? '')).join('');\n}\n\nfunction imageMime(format: unknown): string {\n const value = String(format ?? '').toLowerCase();\n if (value === 'jpeg' || value === 'jpg' || value === 'image/jpeg') return 'image/jpeg';\n if (value === 'webp' || value === 'image/webp') return 'image/webp';\n if (value === 'gif' || value === 'image/gif') return 'image/gif';\n return 'image/png';\n}\n\nconst CHAT_OUTPUT_ITEM_TYPES = new Set(['message', 'reasoning', 'function_call', 'custom_tool_call', 'image_generation_call']);\n\nfunction validateChatOutputItem(item: any): void {\n if (!item || typeof item.type !== 'string' || !CHAT_OUTPUT_ITEM_TYPES.has(item.type)) {\n throw new CodexProtocolError('invalid_response', 'Codex response contains an output item that Chat Completions cannot represent');\n }\n if (item.type === 'function_call' || item.type === 'custom_tool_call') validateCodexToolName(item.name);\n if (item.type === 'message' && item.content !== undefined && !Array.isArray(item.content)) {\n throw new CodexProtocolError('invalid_response', 'Codex message output has an unsupported content structure');\n }\n if (item.type === 'message' && Array.isArray(item.content) && item.content.some((part: any) => !part || !['output_text', 'text'].includes(part.type))) {\n throw new CodexProtocolError('invalid_response', 'Codex message output contains an unsupported content part');\n }\n const reasoningParts = [...(Array.isArray(item.summary) ? item.summary : []), ...(Array.isArray(item.content) ? item.content : [])];\n if (item.type === 'reasoning' && (item.summary !== undefined && !Array.isArray(item.summary) || item.content !== undefined && !Array.isArray(item.content) || reasoningParts.some((part: any) => !part || !['summary_text', 'reasoning_text'].includes(part.type)))) {\n throw new CodexProtocolError('invalid_response', 'Codex reasoning output contains an unsupported content part');\n }\n}\n\nfunction validateResponsesOutputItem(item: any): void {\n if (!item || typeof item !== 'object' || Array.isArray(item) || typeof item.type !== 'string' || !item.type) {\n throw new CodexProtocolError('invalid_response', 'Codex response contains an invalid Responses output item');\n }\n}\n\nfunction incompleteFinishReason(reason: string): 'length' | 'content_filter' {\n if (reason === 'content_filter') return 'content_filter';\n if (reason === 'max_tokens' || reason === 'max_output_tokens') return 'length';\n throw new CodexProtocolError('incomplete', `Codex response has an unsupported incomplete reason: ${reason || 'missing'}`, reason);\n}\n\nexport class CodexResponseProcessor {\n private readonly tools = new Map<string, ToolState>();\n private readonly output: OutputRecord[] = [];\n private readonly includeUsage: boolean;\n private readonly target: 'chat' | 'responses';\n private readonly preserveCustomTools: boolean;\n private text = '';\n private reasoning = '';\n private readonly messageText = new Map<string, Map<string, string>>();\n private readonly messageOwners = new Map<string, string>();\n private readonly completedText = new Map<string, string>();\n private readonly imageParts = new Map<string, string>();\n private model = '';\n private responseId = '';\n private created = 0;\n private serviceTier?: string;\n private terminal?: 'completed' | 'incomplete';\n private terminalResponse: JsonObject = {};\n private toolIndex = 0;\n private outputOrder = 0;\n private sawDone = false;\n private readonly redactDiagnostic?: (message: string) => string;\n\n constructor(options: Pick<CodexConversionOptions, 'includeUsage' | 'request' | 'target' | 'redactDiagnostic' | 'preserveCustomTools'> = {}) {\n this.includeUsage = options.includeUsage ?? (options.request ? streamIncludesUsage(options.request) : false);\n this.target = options.target ?? 'chat';\n this.preserveCustomTools = options.preserveCustomTools ?? false;\n this.redactDiagnostic = options.redactDiagnostic;\n }\n\n private validateOutputItem(item: any): void {\n if (this.target === 'responses') validateResponsesOutputItem(item);\n else validateChatOutputItem(item);\n }\n\n private upsertOutput(item: JsonObject, index?: number, terminal = false, contentIndex?: number, itemId?: string): OutputRecord {\n const identity = {\n id: typeof item.id === 'string' && item.id ? item.id : itemId,\n callId: typeof item.call_id === 'string' && item.call_id ? item.call_id : undefined,\n outputIndex: index,\n contentIndex: contentIndex ?? (typeof item.content_index === 'number' ? item.content_index : undefined)\n };\n const hasIdentity = Object.values(identity).some((value) => value !== undefined);\n const sameIdentity = (record: OutputRecord): boolean => {\n const primaryPairs: [keyof typeof identity, keyof OutputRecord][] = [['id', 'id'], ['callId', 'callId'], ['outputIndex', 'index']];\n const shared = primaryPairs.filter(([incomingKey, recordKey]) => identity[incomingKey] !== undefined && record[recordKey] !== undefined);\n if (shared.length > 0) return shared.every(([incomingKey, recordKey]) => identity[incomingKey] === record[recordKey]);\n const contentPair: [keyof typeof identity, keyof OutputRecord] = ['contentIndex', 'contentIndex'];\n if (identity.contentIndex !== undefined && record.contentIndex !== undefined) return identity[contentPair[0]] === record[contentPair[1]];\n return false;\n };\n const matches = this.output.filter((record) => hasIdentity ? sameIdentity(record) : !record.id && !record.callId && record.index === undefined && record.contentIndex === undefined);\n if (!hasIdentity && matches.length > 1) throw new CodexProtocolError('invalid_response', 'Codex output item has ambiguous identity');\n const found = matches[0];\n if (found) {\n if (index !== undefined) found.index = index;\n if (identity.id !== undefined) found.id = identity.id;\n if (identity.callId !== undefined) found.callId = identity.callId;\n if (identity.contentIndex !== undefined) found.contentIndex = identity.contentIndex;\n if (terminal) found.item = clone(item);\n return found;\n }\n const record = { item: clone(item), index, order: this.outputOrder++, id: identity.id, callId: identity.callId, contentIndex: identity.contentIndex };\n this.output.push(record);\n return record;\n }\n\n private orderedOutput(): JsonObject[] {\n return this.output.slice().sort((a, b) => {\n if (a.index !== undefined && b.index !== undefined) return a.index - b.index;\n if (a.index !== undefined) return -1;\n if (b.index !== undefined) return 1;\n return a.order - b.order;\n }).map((record) => clone(record.item));\n }\n\n private messageKeys(data: any, item?: any): string[] {\n const keys: string[] = [];\n const id = data.item_id ?? item?.id;\n if (id !== undefined && id !== null && id !== '') keys.push(`message:id:${String(id)}`);\n if (data.output_index !== undefined && data.output_index !== null) keys.push(`message:output:${String(data.output_index)}`);\n return keys.length > 0 ? keys : ['message:unkeyed'];\n }\n\n private messageOwner(data: any, item?: any): string {\n const keys = this.messageKeys(data, item);\n const owners = new Set(keys.map((key) => this.messageOwners.get(key)).filter((owner): owner is string => owner !== undefined));\n if (owners.size > 1) throw new CodexProtocolError('invalid_response', 'Codex message event identifiers point to different messages');\n const owner = owners.values().next().value as string | undefined ?? keys[0];\n for (const key of keys) this.messageOwners.set(key, owner);\n return owner;\n }\n\n private messageContentIndex(data: any, item?: any): string {\n const contentIndex = data.content_index ?? item?.content_index;\n return contentIndex === undefined || contentIndex === null ? 'default' : String(contentIndex);\n }\n\n private messageTextValue(data: any, item?: any): string {\n const owner = this.messageOwner(data, item);\n const blocks = this.messageText.get(owner);\n if (!blocks) return '';\n const contentIndex = this.messageContentIndex(data, item);\n if (contentIndex !== 'default') return blocks.get(contentIndex) ?? '';\n return [...blocks.values()].join('');\n }\n\n private setMessageText(data: any, item: any, value: string): void {\n const owner = this.messageOwner(data, item);\n const blocks = this.messageText.get(owner) ?? new Map<string, string>();\n blocks.set(this.messageContentIndex(data, item), value);\n this.messageText.set(owner, blocks);\n }\n\n process(event: CodexSSEEvent): JsonObject[] {\n const data = eventObject(event);\n const type = event.type;\n if (type === 'done') { this.sawDone = true; return []; }\n if (type === 'response.failed' || data.response?.status === 'failed') throw new CodexProtocolError(\n 'failed', 'Codex response failed', undefined, upstreamErrorDiagnostic(data, 'Codex response failed', this.redactDiagnostic));\n if (this.sawDone && !this.terminal) throw new CodexProtocolError('incomplete', 'Codex emitted an event after [DONE] without a terminal response');\n if (this.terminal) {\n if (type === 'error' || type === 'response.failed') throw new CodexProtocolError(\n 'failed', 'Codex response failed after terminal event', undefined, upstreamErrorDiagnostic(data, 'Codex response failed after terminal event', this.redactDiagnostic));\n if (type === 'response.completed' || type === 'response.incomplete') return [];\n return [];\n }\n if (type === 'error') throw new CodexProtocolError(\n 'failed', 'Codex response contained an error event', undefined, upstreamErrorDiagnostic(data, 'Codex response contained an error event', this.redactDiagnostic));\n if (type === 'response.created' || type === 'response.in_progress') {\n const response = data.response ?? {};\n this.responseId ||= String(response.id ?? '');\n this.model ||= String(response.model ?? '');\n this.created ||= Number(response.created_at ?? 0);\n if (response.service_tier) this.serviceTier = String(response.service_tier);\n return [];\n }\n const output: JsonObject[] = [];\n const base = (): any => ({ id: this.responseId, object: 'chat.completion.chunk', created: this.created, model: this.model, choices: [{ index: 0, delta: {}, finish_reason: null }], ...(this.serviceTier ? { service_tier: this.serviceTier } : {}) });\n if (type === 'response.output_text.delta' || type === 'response.reasoning_text.delta' || type === 'response.reasoning_summary_text.delta') {\n const value = String(data.delta ?? '');\n if (type === 'response.output_text.delta') {\n const previous = this.messageTextValue(data);\n this.setMessageText(data, undefined, previous + value);\n this.text += value;\n }\n else this.reasoning += value;\n const chunk = base();\n chunk.choices[0].delta.role = 'assistant';\n chunk.choices[0].delta[type.includes('reasoning') ? 'reasoning_content' : 'content'] = value;\n output.push(chunk);\n } else if (type === 'response.image_generation_call.partial_image') {\n const itemKey = String(data.item_id ?? data.output_index ?? 'image:unkeyed');\n const image = String(data.partial_image_b64 ?? '');\n if (!image || this.imageParts.get(itemKey) === image) return output;\n this.imageParts.set(itemKey, image);\n const chunk = base();\n chunk.choices[0].delta.role = 'assistant';\n chunk.choices[0].delta.images = [{ type: 'image_url', image_url: { url: `data:${imageMime(data.output_format)};base64,${image}` } }];\n output.push(chunk);\n } else if (type === 'response.output_item.added') {\n const item = data.item;\n this.validateOutputItem(item);\n if (!['function_call', 'custom_tool_call'].includes(item.type)) {\n if (this.target === 'responses') this.upsertOutput(item, data.output_index === undefined ? undefined : Number(data.output_index), false, data.content_index === undefined ? undefined : Number(data.content_index), typeof data.item_id === 'string' ? data.item_id : undefined);\n return output;\n }\n const existing = this.findTool({ item_id: item.id, output_index: data.output_index }, true);\n if (existing) return [];\n const key = String(item.id ?? data.item_id ?? data.output_index ?? this.toolIndex);\n const state: ToolState = { index: this.toolIndex++, id: String(item.call_id ?? ''), name: String(item.name ?? ''), kind: item.type, arguments: String(item.arguments ?? item.input ?? ''), emittedArguments: false, done: false };\n this.tools.set(`item:${key}`, state);\n if (item.id !== undefined) this.tools.set(`item:${String(item.id)}`, state);\n if (data.output_index !== undefined) this.tools.set(`output:${String(data.output_index)}`, state);\n const chunk = base();\n chunk.choices[0].delta.role = 'assistant';\n chunk.choices[0].delta.tool_calls = [chatToolCall(state, '', true, this.preserveCustomTools)];\n output.push(chunk);\n } else if (type === 'response.function_call_arguments.delta' || type === 'response.custom_tool_call_input.delta') {\n const state = this.findTool(data);\n const delta = String(data.delta ?? '');\n if (state && delta && !state.done) {\n state.arguments += delta;\n state.emittedArguments = true;\n const chunk = base();\n chunk.choices[0].delta.tool_calls = [chatToolCall(state, delta, false, this.preserveCustomTools)];\n output.push(chunk);\n }\n } else if (type === 'response.function_call_arguments.done' || type === 'response.custom_tool_call_input.done') {\n const state = this.findTool(data);\n const full = String(data.arguments ?? data.input ?? '');\n if (state && full) state.arguments = full;\n if (state && !state.emittedArguments && state.arguments) {\n state.emittedArguments = true;\n const chunk = base();\n chunk.choices[0].delta.tool_calls = [chatToolCall(state, state.arguments, false, this.preserveCustomTools)];\n output.push(chunk);\n }\n } else if (type === 'response.output_item.done') {\n const item = data.item;\n this.validateOutputItem(item);\n if (item?.type === 'function_call' || item?.type === 'custom_tool_call') {\n const state = this.findTool({ ...data, item_id: data.item_id ?? item.id }, true);\n if (state) {\n state.done = true;\n state.arguments = String(item.arguments ?? item.input ?? state.arguments);\n if (!state.emittedArguments && state.arguments) {\n state.emittedArguments = true;\n const chunk = base();\n chunk.choices[0].delta.tool_calls = [chatToolCall(state, state.arguments, false, this.preserveCustomTools)];\n output.push(chunk);\n }\n } else {\n const state2: ToolState = { index: this.toolIndex++, id: String(item.call_id ?? ''), name: String(item.name ?? ''), kind: item.type, arguments: String(item.arguments ?? item.input ?? ''), emittedArguments: true, done: true };\n if (item.id !== undefined) this.tools.set(`item:${String(item.id)}`, state2);\n if (data.output_index !== undefined) this.tools.set(`output:${String(data.output_index)}`, state2);\n const chunk = base();\n chunk.choices[0].delta.tool_calls = [chatToolCall(state2, state2.arguments, true, this.preserveCustomTools)];\n output.push(chunk);\n }\n this.upsertOutput(item, data.output_index === undefined ? undefined : Number(data.output_index), this.target === 'responses', data.content_index === undefined ? undefined : Number(data.content_index), typeof data.item_id === 'string' ? data.item_id : undefined);\n } else if (item) {\n this.upsertOutput(item, data.output_index === undefined ? undefined : Number(data.output_index), this.target === 'responses', data.content_index === undefined ? undefined : Number(data.content_index), typeof data.item_id === 'string' ? data.item_id : undefined);\n if (item.type === 'image_generation_call' && item.result) {\n const itemKey = String(item.id ?? data.output_index ?? 'image:unkeyed');\n if (this.imageParts.get(itemKey) !== item.result) {\n this.imageParts.set(itemKey, item.result);\n const chunk = base();\n chunk.choices[0].delta.role = 'assistant';\n chunk.choices[0].delta.images = [{ type: 'image_url', image_url: { url: `data:${imageMime(item.output_format)};base64,${item.result}` } }];\n output.push(chunk);\n }\n }\n if (item.type === 'message' && textFromItem(item)) {\n const fullText = textFromItem(item);\n const owner = this.messageOwner(data, item);\n const contentIndex = this.messageContentIndex(data, item);\n if (contentIndex === 'default') {\n const completed = this.completedText.get(owner);\n if (completed !== undefined) {\n if (completed !== fullText) throw new CodexProtocolError('invalid_response', 'Codex repeated message completion changed its text');\n return output;\n }\n const previous = this.messageTextValue(data, item);\n const delta = fullText === previous ? '' : fullText.startsWith(previous) ? fullText.slice(previous.length) : fullText;\n this.completedText.set(owner, fullText);\n if (!delta) return output;\n const chunk = base();\n chunk.choices[0].delta.role = 'assistant';\n chunk.choices[0].delta.content = delta;\n output.push(chunk);\n return output;\n }\n const previous = this.messageTextValue(data, item);\n const delta = fullText === previous ? '' : fullText.startsWith(previous) ? fullText.slice(previous.length) : fullText;\n this.setMessageText(data, item, fullText);\n if (!delta) return output;\n const chunk = base();\n chunk.choices[0].delta.role = 'assistant';\n chunk.choices[0].delta.content = delta;\n output.push(chunk);\n }\n }\n } else if (type === 'response.completed' || type === 'response.incomplete') {\n const response = data.response ?? {};\n const incomplete = type === 'response.incomplete' || response.status === 'incomplete';\n if (response.status && !['completed', 'incomplete'].includes(response.status)) throw new CodexProtocolError('invalid_response', 'Codex response has an unsupported terminal status');\n const incompleteReason = incomplete ? String(response.incomplete_details?.reason ?? '') : '';\n const incompleteFinish = incomplete ? incompleteFinishReason(incompleteReason) : undefined;\n this.terminal = incomplete ? 'incomplete' : 'completed';\n this.terminalResponse = clone(response);\n this.model ||= String(response.model ?? '');\n this.responseId ||= String(response.id ?? '');\n this.created ||= Number(response.created_at ?? 0);\n if (response.service_tier) this.serviceTier = String(response.service_tier);\n if (response.output !== undefined && !Array.isArray(response.output)) throw new CodexProtocolError('invalid_response', 'Codex response output is not an array');\n if (Array.isArray(response.output)) response.output.forEach((item: JsonObject, index: number) => {\n this.validateOutputItem(item);\n this.upsertOutput(item, index, true, typeof item.content_index === 'number' ? item.content_index : undefined);\n });\n const chunk = base();\n chunk.choices[0].finish_reason = this.terminal === 'incomplete' ? incompleteFinish : (this.output.some((record) => record.item.type === 'function_call' || record.item.type === 'custom_tool_call') ? 'tool_calls' : 'stop');\n chunk.choices[0].native_finish_reason = this.terminal === 'incomplete' ? incompleteReason : chunk.choices[0].finish_reason;\n output.push(chunk);\n const usage = this.includeUsage ? usageFrom(response) : undefined;\n if (usage) {\n const usageChunk = base();\n usageChunk.choices = [];\n usageChunk.usage = responsesUsageToChat(usage);\n output.push(usageChunk);\n }\n }\n return output;\n }\n\n private findTool(data: any, allowUnknown = false): ToolState | undefined {\n const keys = [data.item_id ? `item:${String(data.item_id)}` : '', data.output_index !== undefined ? `output:${String(data.output_index)}` : '', data.item?.id ? `item:${String(data.item.id)}` : ''].filter(Boolean);\n const matches = [...new Set(keys.map((key) => this.tools.get(key)).filter((state): state is ToolState => Boolean(state)))];\n if (matches.length > 1) throw new CodexProtocolError('invalid_response', 'Codex tool event identifiers point to different tool calls');\n if (matches.length === 1) return matches[0];\n if (keys.length > 0) {\n if (allowUnknown) return undefined;\n throw new CodexProtocolError('invalid_response', 'Codex tool event referenced an unknown item or output index');\n }\n const active = [...new Set(this.tools.values())].filter((state) => !state.done);\n if (active.length === 1) return active[0];\n if (active.length > 1) throw new CodexProtocolError('invalid_response', 'Codex tool event without an id is ambiguous');\n return undefined;\n }\n\n finish(): CodexResponseState {\n if (!this.terminal) throw new CodexProtocolError(this.sawDone ? 'incomplete' : 'unexpected_eof', this.sawDone ? 'Codex stream sent [DONE] before a terminal response event' : 'Codex response ended before a terminal event');\n const response = clone(this.terminalResponse);\n response.id ||= this.responseId;\n response.model ||= this.model;\n response.created_at ||= this.created;\n response.status ||= this.terminal;\n response.output = this.orderedOutput();\n if (!response.output.some((item: any) => item.type === 'message') && this.text) response.output.unshift({ type: 'message', role: 'assistant', content: [{ type: 'output_text', text: this.text }] });\n if (!response.output.some((item: any) => item.type === 'reasoning') && this.reasoning) response.output.unshift({ type: 'reasoning', summary: [{ type: 'summary_text', text: this.reasoning }] });\n return { response, terminal: this.terminal, output: clone(response.output), chunks: [] };\n }\n}\n\n/**\n * The caller owns HTTP preconditions: it must reject non-2xx responses and\n * validate the upstream content type before handing the body to this module.\n * This module intentionally provides no transport or response-status policy.\n */\nexport async function consumeCodexResponse(source: SSESource, options: CodexConversionOptions = {}): Promise<CodexResponseState> {\n const processor = new CodexResponseProcessor(options);\n for await (const event of parseCodexSSE(source, options)) processor.process(event);\n return processor.finish();\n}\n\nexport async function* convertCodexSSEToChatCompletions(source: SSESource, options: CodexConversionOptions = {}): AsyncGenerator<string> {\n const processor = new CodexResponseProcessor(options);\n for await (const event of parseCodexSSE(source, options)) {\n for (const chunk of processor.process(event)) yield `data: ${JSON.stringify(chunk)}\\n\\n`;\n }\n processor.finish();\n yield 'data: [DONE]\\n\\n';\n}\n\nexport async function convertCodexSSEToChatCompletion(source: SSESource, options: CodexConversionOptions = {}): Promise<JsonObject> {\n const state = await consumeCodexResponse(source, options);\n return responsesToChatCompletion(state.response);\n}\n\nexport async function convertCodexSSEToResponses(source: SSESource, options: CodexConversionOptions = {}): Promise<JsonObject> {\n return (await consumeCodexResponse(source, { ...options, target: 'responses' })).response;\n}\n\nexport function responsesToChatCompletion(response: JsonObject, preserveCustomTools = false): JsonObject {\n let content = '';\n let reasoning = '';\n const tool_calls: any[] = [];\n const images: any[] = [];\n if (response.output !== undefined && !Array.isArray(response.output)) throw new CodexProtocolError('invalid_response', 'Codex response output is not an array');\n for (const item of Array.isArray(response.output) ? response.output : []) {\n validateChatOutputItem(item);\n if (item.type === 'message') content += textFromItem(item);\n if (item.type === 'reasoning') reasoning += (item.summary ?? []).filter((part: any) => part.type === 'summary_text').map((part: any) => String(part.text ?? '')).join('') + (item.content ?? []).filter((part: any) => part.type === 'reasoning_text').map((part: any) => String(part.text ?? '')).join('');\n if (item.type === 'custom_tool_call' && preserveCustomTools) tool_calls.push({ id: item.call_id, type: 'custom', custom: { name: item.name, input: String(item.input ?? '') } });\n else if (item.type === 'function_call' || item.type === 'custom_tool_call') tool_calls.push({ id: item.call_id, type: 'function', function: { name: item.name, arguments: String(item.arguments ?? item.input ?? '') } });\n if (item.type === 'image_generation_call' && item.result) images.push({ type: 'image_url', image_url: { url: `data:${imageMime(item.output_format)};base64,${item.result}` } });\n }\n const incompleteReason = String(response.incomplete_details?.reason ?? 'incomplete');\n if (response.status && !['completed', 'incomplete'].includes(response.status)) throw new CodexProtocolError('invalid_response', 'Codex response has an unsupported terminal status');\n const finishReason = response.status === 'incomplete' ? incompleteFinishReason(incompleteReason) : tool_calls.length ? 'tool_calls' : 'stop';\n const message: any = { role: 'assistant', content: content || null };\n if (reasoning) message.reasoning_content = reasoning;\n if (tool_calls.length) message.tool_calls = tool_calls;\n if (images.length) message.images = images;\n return { id: response.id ?? '', object: 'chat.completion', created: response.created_at ?? Math.floor(Date.now() / 1000), model: response.model ?? '', choices: [{ index: 0, message, finish_reason: finishReason, native_finish_reason: response.status === 'incomplete' ? incompleteReason : finishReason }], ...(response.usage ? { usage: responsesUsageToChat(response.usage) } : {}) };\n}\n\nexport const convertResponsesResponseToChatCompletions = responsesToChatCompletion;\n\nexport function chatCompletionToResponses(response: JsonObject): JsonObject {\n const message = response.choices?.[0]?.message ?? {};\n const finishReason = response.choices?.[0]?.finish_reason;\n let status: 'completed' | 'incomplete';\n let incomplete_details: JsonObject | undefined;\n if (finishReason === 'stop' || finishReason === 'tool_calls') status = 'completed';\n else if (finishReason === 'length') {\n status = 'incomplete';\n incomplete_details = { reason: 'max_output_tokens' };\n } else if (finishReason === 'content_filter') {\n status = 'incomplete';\n incomplete_details = { reason: 'content_filter' };\n } else throw new CodexProtocolError('invalid_response', `Chat Completion has an unsupported finish_reason: ${String(finishReason)}`);\n const output: any[] = [];\n if (message.reasoning_content) output.push({ type: 'reasoning', summary: [{ type: 'summary_text', text: String(message.reasoning_content) }] });\n if (message.content) output.push({ type: 'message', role: 'assistant', content: [{ type: 'output_text', text: String(message.content) }] });\n for (const call of message.tool_calls ?? []) {\n if (call?.type === 'custom') output.push({ type: 'custom_tool_call', call_id: call.id, name: validateCodexToolName(call.custom?.name), input: String(call.custom?.input ?? call.custom?.arguments ?? '') });\n else output.push({ type: 'function_call', call_id: call.id, name: validateCodexToolName(call.function?.name), arguments: String(call.function?.arguments ?? '') });\n }\n return { id: response.id, object: 'response', created_at: response.created, model: response.model, status, output, ...(incomplete_details ? { incomplete_details } : {}), ...(response.usage ? { usage: chatUsageToResponses(response.usage) } : {}) };\n}\n\nexport const convertChatCompletionsResponseToResponses = chatCompletionToResponses;\n",
|
|
22
22
|
"const CODEX_MODELS_URL = 'https://chatgpt.com/backend-api/codex/models';\nconst CODEX_ORIGINATOR = 'codex_cli_rs';\nconst DEFAULT_TTL_MS = 5 * 60 * 1000;\nconst DEFAULT_TIMEOUT_MS = 10_000;\nconst DEFAULT_MAX_BODY_BYTES = 256 * 1024;\nconst DEFAULT_MAX_MODELS = 256;\nconst DEFAULT_MAX_CACHE_ENTRIES = 32;\n\nexport type CodexModelsErrorKind =\n | 'invalid_identity'\n | 'aborted'\n | 'timeout'\n | 'network'\n | 'http'\n | 'invalid_content_type'\n | 'body_limit'\n | 'invalid_json'\n | 'invalid_structure';\n\nexport class CodexModelsError extends Error {\n readonly name = 'CodexModelsError';\n\n constructor(readonly kind: CodexModelsErrorKind, readonly status?: number) {\n super(status === undefined ? kind : `${kind}:${status}`);\n }\n}\n\nexport interface CodexModelDescriptor {\n readonly id: string;\n readonly source: 'static' | 'upstream';\n readonly sourceRef: string;\n readonly displayName?: string;\n readonly capabilities?: readonly string[];\n readonly metadata?: Readonly<Record<string, unknown>>;\n}\n\nexport interface CodexModelSource {\n readonly kind: 'static' | 'upstream';\n readonly sourceRef: string;\n load(signal?: AbortSignal): Promise<readonly CodexModelDescriptor[]>;\n}\n\nexport interface CodexModelIdentity {\n readonly accountId: string;\n readonly generation: number;\n /** Must be the real client version supplied by the caller. */\n readonly clientVersion: string;\n}\n\nexport interface CodexModelsRequestOptions {\n readonly etag?: string;\n}\n\nexport interface CodexModelsRequest {\n readonly url: string;\n readonly init: RequestInit;\n}\n\nexport type CodexModelsExecute = (request: CodexModelsRequest, signal: AbortSignal) => Promise<Response>;\n\nexport interface CodexModelSnapshot {\n readonly models: readonly CodexModelDescriptor[];\n readonly source: 'upstream';\n readonly etag?: string;\n readonly fetchedAt: number;\n readonly stale: false;\n}\n\nexport interface CodexModelSourceOptions {\n readonly identity: CodexModelIdentity;\n readonly execute: CodexModelsExecute;\n readonly cache?: CodexModelCache;\n readonly now?: () => number;\n readonly ttlMs?: number;\n readonly timeoutMs?: number;\n readonly maxBodyBytes?: number;\n readonly maxModels?: number;\n}\n\nfunction text(value: unknown, max = 512): value is string {\n return typeof value === 'string' && value.length > 0 && value.length <= max && value.trim() === value\n && !/[\\r\\n\\u0000]/.test(value);\n}\n\nfunction assertIdentity(identity: CodexModelIdentity): void {\n if (!text(identity.accountId) || !text(identity.clientVersion)\n || !Number.isSafeInteger(identity.generation) || identity.generation < 1) {\n throw new CodexModelsError('invalid_identity');\n }\n}\n\n/** Pure request builder. Credentials are deliberately supplied by the injected executor, not this interface. */\nexport function buildCodexModelsRequest(\n clientVersion: string,\n options: CodexModelsRequestOptions = {},\n): CodexModelsRequest {\n if (!text(clientVersion)) throw new CodexModelsError('invalid_identity');\n const headers = new Headers({ Accept: 'application/json', Originator: CODEX_ORIGINATOR });\n if (text(options.etag)) headers.set('If-None-Match', options.etag);\n return {\n url: `${CODEX_MODELS_URL}?client_version=${encodeURIComponent(clientVersion)}`,\n init: { method: 'GET', headers, redirect: 'manual' },\n };\n}\n\nfunction object(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction optionalString(value: unknown): string | undefined {\n if (value === undefined || value === null) return undefined;\n if (!text(value)) throw new CodexModelsError('invalid_structure');\n return value;\n}\n\n/** Parses the official envelope without inventing OpenAI metadata. */\nexport function parseCodexModelsPayload(value: unknown, maxModels = DEFAULT_MAX_MODELS): readonly CodexModelDescriptor[] {\n if (!object(value) || !Array.isArray(value.models) || value.models.length > maxModels) {\n throw new CodexModelsError('invalid_structure');\n }\n\n const models: CodexModelDescriptor[] = [];\n for (const item of value.models) {\n if (!object(item) || !text(item.slug)) throw new CodexModelsError('invalid_structure');\n const visibility = item.visibility === undefined ? 'list' : item.visibility;\n const supportedInApi = item.supported_in_api === undefined ? false : item.supported_in_api;\n if (typeof visibility !== 'string' || typeof supportedInApi !== 'boolean') {\n throw new CodexModelsError('invalid_structure');\n }\n const displayName = optionalString(item.display_name);\n optionalString(item.minimal_client_version);\n if (visibility !== 'list' || supportedInApi !== true) continue;\n models.push({\n id: item.slug,\n source: 'upstream',\n sourceRef: CODEX_MODELS_URL,\n ...(displayName === undefined ? {} : { displayName }),\n metadata: item,\n });\n }\n return models;\n}\n\nexport function parseCodexModelsBody(\n body: string,\n maxBodyBytes = DEFAULT_MAX_BODY_BYTES,\n maxModels = DEFAULT_MAX_MODELS,\n): readonly CodexModelDescriptor[] {\n if (new TextEncoder().encode(body).byteLength > maxBodyBytes) throw new CodexModelsError('body_limit');\n let value: unknown;\n try {\n value = JSON.parse(body) as unknown;\n } catch {\n throw new CodexModelsError('invalid_json');\n }\n return parseCodexModelsPayload(value, maxModels);\n}\n\nexport function codexModelsCacheKey(identity: CodexModelIdentity): string {\n assertIdentity(identity);\n return [identity.accountId, identity.generation, identity.clientVersion, CODEX_ORIGINATOR]\n .map((part) => encodeURIComponent(String(part))).join('|');\n}\n\ninterface CacheEntry {\n readonly snapshot: CodexModelSnapshot;\n readonly expiresAt: number;\n readonly touchedAt: number;\n}\n\nexport class CodexModelCache {\n private readonly entries = new Map<string, CacheEntry>();\n private readonly epochs = new Map<string, number>();\n\n constructor(private readonly maxEntries = DEFAULT_MAX_CACHE_ENTRIES) {\n if (!Number.isSafeInteger(maxEntries) || maxEntries < 1 || maxEntries > DEFAULT_MAX_CACHE_ENTRIES) {\n throw new RangeError('invalid Codex model cache size');\n }\n }\n\n get(key: string): CacheEntry | undefined { return this.entries.get(key); }\n\n epoch(key: string): number { return this.epochs.get(key) ?? 0; }\n\n set(key: string, snapshot: CodexModelSnapshot, expiresAt: number, touchedAt: number, expectedEpoch = this.epoch(key)): boolean {\n if (this.epoch(key) !== expectedEpoch) return false;\n if (!this.entries.has(key) && this.entries.size >= this.maxEntries) {\n const oldest = [...this.entries.entries()].sort((a, b) => a[1].touchedAt - b[1].touchedAt)[0];\n if (oldest) this.entries.delete(oldest[0]);\n }\n this.entries.set(key, { snapshot, expiresAt, touchedAt });\n return true;\n }\n\n invalidate(key: string, etag?: string): boolean {\n const entry = this.entries.get(key);\n const invalidated = entry !== undefined && (etag === undefined || entry.snapshot.etag === etag);\n if (invalidated) this.entries.delete(key);\n this.epochs.set(key, this.epoch(key) + 1);\n return invalidated;\n }\n}\n\nfunction cancelResponseBody(response: Response): void {\n if (response.body !== null) void response.body.cancel().catch(() => undefined);\n}\n\nfunction isJsonContentType(response: Response): boolean {\n const contentType = response.headers.get('content-type')?.split(';', 1)[0].trim().toLowerCase();\n return contentType === 'application/json' || contentType?.endsWith('+json') === true;\n}\n\n/** Auxiliary models catalog fetch owned by this cache, not adapter rawResponse. */\nasync function readBoundedBody(response: Response, maxBodyBytes: number, timeoutMs: number, signal: AbortSignal): Promise<string> {\n if (signal.aborted) throw new CodexModelsError('aborted');\n if (response.body === null) return '';\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n const deadline = Date.now() + timeoutMs;\n let bytes = 0;\n let body = '';\n let releaseReader = true;\n try {\n for (;;) {\n const remaining = deadline - Date.now();\n if (remaining <= 0) throw new CodexModelsError('timeout');\n const part = await new Promise<Awaited<ReturnType<typeof reader.read>>>((resolve, reject) => {\n const timer = setTimeout(() => reject(new CodexModelsError('timeout')), remaining);\n const onAbort = () => reject(new CodexModelsError('aborted'));\n signal.addEventListener('abort', onAbort, { once: true });\n reader.read().then(resolve, reject).finally(() => {\n clearTimeout(timer);\n signal.removeEventListener('abort', onAbort);\n });\n });\n if (part.done) return body + decoder.decode();\n bytes += part.value.byteLength;\n if (bytes > maxBodyBytes) throw new CodexModelsError('body_limit');\n body += decoder.decode(part.value, { stream: true });\n }\n } catch (error) {\n releaseReader = false;\n void reader.cancel().catch(() => undefined);\n throw error;\n } finally {\n if (releaseReader) reader.releaseLock();\n }\n}\n\nasync function executeWithDeadline(\n execute: CodexModelsExecute,\n request: CodexModelsRequest,\n timeoutMs: number,\n parentSignal: AbortSignal,\n): Promise<Response> {\n if (parentSignal.aborted) throw new CodexModelsError('aborted');\n const controller = new AbortController();\n let rejectAbort: (() => void) | undefined;\n const abortPromise = new Promise<Response>((_, reject) => {\n rejectAbort = () => reject(new CodexModelsError('aborted'));\n });\n const onAbort = () => {\n controller.abort();\n rejectAbort?.();\n };\n parentSignal.addEventListener('abort', onAbort, { once: true });\n let timeoutHandle: ReturnType<typeof setTimeout> | undefined;\n let settled = false;\n const responsePromise = Promise.resolve().then(() => execute(request, controller.signal));\n responsePromise.then((response) => {\n if (settled) cancelResponseBody(response);\n }, () => undefined);\n try {\n const timeoutPromise = new Promise<Response>((_, reject) => {\n timeoutHandle = setTimeout(() => {\n controller.abort();\n reject(new CodexModelsError('timeout'));\n }, timeoutMs);\n });\n return await Promise.race([responsePromise, timeoutPromise, abortPromise]);\n } catch (error) {\n if (error instanceof CodexModelsError) throw error;\n if (parentSignal.aborted) throw new CodexModelsError('aborted');\n throw new CodexModelsError('network');\n } finally {\n settled = true;\n if (timeoutHandle !== undefined) clearTimeout(timeoutHandle);\n parentSignal.removeEventListener('abort', onAbort);\n }\n}\n\nexport class DynamicCodexModelSource implements CodexModelSource {\n readonly kind = 'upstream' as const;\n readonly sourceRef = CODEX_MODELS_URL;\n private readonly cache: CodexModelCache;\n private readonly now: () => number;\n private readonly ttlMs: number;\n private readonly timeoutMs: number;\n private readonly maxBodyBytes: number;\n private readonly maxModels: number;\n constructor(private readonly identity: CodexModelIdentity, private readonly options: Omit<CodexModelSourceOptions, 'identity'>) {\n assertIdentity(identity);\n this.cache = options.cache ?? new CodexModelCache();\n this.now = options.now ?? Date.now;\n this.ttlMs = Math.min(options.ttlMs ?? DEFAULT_TTL_MS, DEFAULT_TTL_MS);\n this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n this.maxBodyBytes = Math.min(options.maxBodyBytes ?? DEFAULT_MAX_BODY_BYTES, DEFAULT_MAX_BODY_BYTES);\n this.maxModels = Math.min(options.maxModels ?? DEFAULT_MAX_MODELS, DEFAULT_MAX_MODELS);\n if (![this.ttlMs, this.timeoutMs, this.maxBodyBytes, this.maxModels].every((value) => Number.isFinite(value) && value > 0)) {\n throw new RangeError('invalid Codex model source limits');\n }\n }\n\n async load(signal?: AbortSignal): Promise<readonly CodexModelDescriptor[]> {\n return (await this.loadSnapshot(signal)).models;\n }\n\n async loadSnapshot(signal?: AbortSignal): Promise<CodexModelSnapshot> {\n if (signal?.aborted) throw new CodexModelsError('aborted');\n const key = codexModelsCacheKey(this.identity);\n const cached = this.cache.get(key);\n const now = this.now();\n if (cached !== undefined && cached.expiresAt > now) return cached.snapshot;\n\n const epoch = this.cache.epoch(key);\n const request = buildCodexModelsRequest(this.identity.clientVersion, { etag: cached?.snapshot.etag });\n try {\n const response = await executeWithDeadline(this.options.execute, request, this.timeoutMs, signal ?? new AbortController().signal);\n if (response.status === 304) {\n if (cached === undefined) {\n cancelResponseBody(response);\n throw new CodexModelsError('http', 304);\n }\n const snapshot: CodexModelSnapshot = { ...cached.snapshot, fetchedAt: now, stale: false };\n this.cache.set(key, snapshot, now + this.ttlMs, now, epoch);\n return snapshot;\n }\n if (!response.ok) {\n cancelResponseBody(response);\n if (response.status === 401 || response.status === 403) {\n this.cache.invalidate(key);\n throw new CodexModelsError('network', response.status);\n }\n throw new CodexModelsError('http', response.status);\n }\n if (!isJsonContentType(response)) {\n cancelResponseBody(response);\n throw new CodexModelsError('invalid_content_type');\n }\n const models = parseCodexModelsBody(await readBoundedBody(response, this.maxBodyBytes, this.timeoutMs, signal ?? new AbortController().signal), this.maxBodyBytes, this.maxModels);\n const etag = response.headers.get('etag') ?? undefined;\n const snapshot: CodexModelSnapshot = { models, source: 'upstream', ...(etag === undefined ? {} : { etag }), fetchedAt: now, stale: false };\n this.cache.set(key, snapshot, now + this.ttlMs, now, epoch);\n return snapshot;\n } catch (error) {\n if (error instanceof CodexModelsError) throw error;\n throw new CodexModelsError('network');\n }\n }\n\n invalidate(etag?: string): void {\n this.cache.invalidate(codexModelsCacheKey(this.identity), etag);\n }\n\n}\n\nexport function createCodexModelSource(options: CodexModelSourceOptions): DynamicCodexModelSource {\n return new DynamicCodexModelSource(options.identity, options);\n}\n\nexport class CodexModelCatalog {\n constructor(private readonly source: CodexModelSource) {}\n\n async list(signal?: AbortSignal): Promise<readonly CodexModelDescriptor[]> {\n const models = await this.source.load(signal);\n return models.map((model) => ({ ...model, source: this.source.kind, sourceRef: this.source.sourceRef }));\n }\n}\n",
|
|
23
23
|
"/** Pinned Codex compatibility target used by both runtime and control requests. */\nexport const CODEX_COMPATIBILITY_VERSION = '0.153.3';\nexport const CODEX_MODELS_USER_AGENT = `codex_cli_rs/${CODEX_COMPATIBILITY_VERSION} (Mac OS 26.3.1; arm64) iTerm.app/3.6.9`;\nexport const CODEX_RESPONSES_USER_AGENT = 'codex-tui/0.154.0 (Mac OS 26.5.2; arm64) iTerm.app/3.6.11 (codex-tui; 0.154.0)';\nexport const CODEX_MODELS_ORIGINATOR = 'codex_cli_rs';\nexport const CODEX_RESPONSES_ORIGINATOR = 'codex-tui';\n",
|
|
24
|
-
"import type { BodyHandle, MutableRequestContext, RawResponseContext } from '@jeffusion/bungee-core/plugin';\nimport type { RawResponseCompletion, RawResponseError, RawResponseResult } from '@jeffusion/bungee-core/plugin';\nimport { errorDiagnostic } from './error-diagnostics';\nimport {\n CodexProtocolError,\n CodexResponseProcessor,\n consumeCodexResponse,\n convertChatCompletionsRequestToCodex,\n isCodexResponsesLite,\n normalizeCodexResponsesRequest,\n parseCodexSSE,\n responsesToChatCompletion,\n streamIncludesUsage,\n type CodexSSEEvent,\n type JsonObject,\n} from './codex-protocol';\nimport { CodexModelsError, parseCodexModelsPayload } from './codex-models';\nimport {\n CODEX_COMPATIBILITY_VERSION,\n CODEX_MODELS_ORIGINATOR,\n CODEX_MODELS_USER_AGENT,\n CODEX_RESPONSES_ORIGINATOR,\n CODEX_RESPONSES_USER_AGENT,\n} from './constants';\n\nexport {\n CODEX_COMPATIBILITY_VERSION,\n CODEX_MODELS_USER_AGENT,\n CODEX_RESPONSES_USER_AGENT,\n} from './constants';\n\nexport const CHAT_COMPLETIONS_PATH = '/v1/chat/completions';\nexport const RESPONSES_PATH = '/responses';\nconst SIWC_RESPONSES_PATH = '/v1/responses';\nexport const MODELS_PATH = '/v1/models';\nexport const CODEX_RESPONSES_PATH = '/backend-api/codex/responses';\nexport const CODEX_MODELS_PATH = '/backend-api/codex/models';\nexport function isResponsesRequest(url: URL): boolean {\n return url.pathname === RESPONSES_PATH;\n}\nexport function assertResponsesEntryPath(path: string): void {\n if (path === SIWC_RESPONSES_PATH) {\n throw new CodexProtocolError('invalid_response', 'Responses requests must use /responses; the plugin supplies the upstream prefix');\n }\n}\nconst MAX_PROFILE_HEADER_VALUE_BYTES = 8192;\nconst CHATGPT_ORIGIN = 'https://chatgpt.com';\nconst SIWC_ORIGIN = 'https://api.openai.com';\nconst CODEX_ROUTING_HINT_HEADER = 'X-Codex-Routing-Hint';\n// The host refreshes Response views between scopes but retains completion\n// identity. Do not parse an already converted representation as native Codex.\nconst convertedCompletions = new WeakSet<Promise<RawResponseCompletion>>();\nconst SIWC_FORBIDDEN_FIELDS = [\n 'background', 'conversation', 'max_output_tokens', 'max_completion_tokens', 'max_tool_calls',\n 'metadata', 'moderation', 'multi_agent', 'prompt', 'prompt_cache_retention', 'safety_identifier',\n 'temperature', 'top_logprobs', 'top_p', 'truncation', 'user', 'previous_response_id',\n 'client_metadata', 'context_management', 'prompt_cache_options',\n];\n\ntype AdaptationTarget = 'chat' | 'responses' | 'models';\ntype AdaptedRequest = Readonly<{\n target: AdaptationTarget;\n stream: boolean;\n includeUsage: boolean;\n allowMissingContentType: boolean;\n siwc?: boolean;\n attemptId?: string;\n adaptedResponses: WeakSet<Response>;\n preserveModels?: boolean;\n native?: boolean;\n}>;\n\nfunction record(value: unknown): JsonObject {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n throw new CodexProtocolError('invalid_response', 'Request must be a JSON object');\n }\n return value as JsonObject;\n}\n\nfunction siwcTool(tool: unknown): JsonObject {\n const value = record(tool);\n if (value.type !== 'function' && value.type !== 'custom') {\n throw new CodexProtocolError('invalid_response', 'SIWC supports only function and custom tools');\n }\n const nested = value.type === 'function' ? value.function : value.custom;\n const definition = nested === undefined ? value : record(nested);\n if (typeof definition.name !== 'string' || !/^[A-Za-z0-9_-]{1,64}$/.test(definition.name)) {\n throw new CodexProtocolError('invalid_response', 'SIWC tool names must be 1-64 ASCII letters, digits, underscores or hyphens');\n }\n const normalized: JsonObject = { ...definition, type: value.type };\n if (value.type === 'custom' && normalized.format?.type === 'grammar' && normalized.format.grammar !== undefined) {\n const grammar = record(normalized.format.grammar);\n if (!['lark', 'regex'].includes(grammar.syntax) || typeof grammar.definition !== 'string') {\n throw new CodexProtocolError('invalid_response', 'SIWC custom tool grammar is invalid');\n }\n normalized.format = { type: 'grammar', syntax: grammar.syntax, definition: grammar.definition };\n }\n return normalized;\n}\n\nfunction normalizeSiwcRequest(input: JsonObject, target: 'chat' | 'responses'): JsonObject {\n if (input.previous_response_id !== undefined) {\n throw new CodexProtocolError('invalid_response', 'SIWC requires the full conversation in input; previous_response_id is unsupported');\n }\n if (input.tools !== undefined && !Array.isArray(input.tools)) {\n throw new CodexProtocolError('invalid_response', 'SIWC tools must be an array');\n }\n // Validate before conversion, which can otherwise preserve hosted tools.\n input.tools?.forEach(siwcTool);\n if (target === 'chat' && !Array.isArray(input.messages)) {\n throw new CodexProtocolError('invalid_response', 'Chat messages must be an array');\n }\n const out = target === 'chat' ? convertChatCompletionsRequestToCodex(input) : JSON.parse(JSON.stringify(input));\n out.store = false;\n out.stream = true;\n if (out.instructions === undefined || out.instructions === null) out.instructions = '';\n if (typeof out.instructions !== 'string') throw new CodexProtocolError('invalid_response', 'SIWC instructions must be text');\n if (typeof out.input === 'string') out.input = [{ type: 'message', role: 'user', content: [{ type: 'input_text', text: out.input }] }];\n if (out.input === undefined) out.input = [];\n if (!Array.isArray(out.input)) throw new CodexProtocolError('invalid_response', 'SIWC input must contain the full conversation as an array');\n const inputTypes = new Set(['message', 'function_call', 'function_call_output', 'custom_tool_call', 'custom_tool_call_output', 'reasoning', 'compaction']);\n for (const item of out.input) {\n const value = record(item);\n if (value.type === undefined && typeof value.role === 'string') value.type = 'message';\n if (!inputTypes.has(value.type)) throw new CodexProtocolError('invalid_response', 'SIWC input contains an unsupported item');\n if (value.type === 'message') {\n if (!['system', 'developer', 'user', 'assistant'].includes(value.role)) throw new CodexProtocolError('invalid_response', 'SIWC input contains an unsupported role');\n if (value.role === 'system') value.role = 'developer';\n }\n }\n if (Array.isArray(out.tools)) out.tools = out.tools.map(siwcTool);\n if (out.tool_choice !== undefined) {\n if (typeof out.tool_choice === 'string') {\n if (!['auto', 'none', 'required'].includes(out.tool_choice)) throw new CodexProtocolError('invalid_response', 'SIWC tool choice is unsupported');\n } else out.tool_choice = siwcTool(out.tool_choice);\n }\n for (const field of SIWC_FORBIDDEN_FIELDS) delete out[field];\n return out;\n}\n\nfunction setSiwcHeaders(context: MutableRequestContext, target: AdaptationTarget): void {\n for (const name of Object.keys(context.headers)) {\n if (/^(chatgpt-account-id|session-id|thread-id|version|x-codex-.*|x-openai-internal-codex-.*)$/i.test(name)) delete context.headers[name];\n }\n setHeader(context.headers, 'User-Agent', 'Bungee/5.11.0');\n setHeader(context.headers, 'Originator', 'Bungee');\n setHeader(context.headers, 'Accept', target === 'models' ? 'application/json' : 'text/event-stream');\n if (target !== 'models') setHeader(context.headers, 'Content-Type', 'application/json');\n}\n\nfunction parseSiwcModelsBody(payload: unknown): readonly { id: string }[] {\n if (typeof payload !== 'object' || payload === null || Array.isArray(payload)) throw new CodexModelsError('invalid_structure');\n const models = (payload as JsonObject).models;\n if (!Array.isArray(models) || models.length > 512) throw new CodexModelsError('invalid_structure');\n const text = (value: unknown) => typeof value === 'string' && value.length > 0 && value.length <= 512 && value === value.trim() && !/[\\r\\n\\0]/.test(value);\n const listed: { id: string }[] = [];\n for (const model of models) {\n if (!model || typeof model !== 'object' || Array.isArray(model) || !text(model.slug)\n || typeof model.visibility !== 'string' || (model.display_name !== undefined && !text(model.display_name))) throw new CodexModelsError('invalid_structure');\n if (model.visibility === 'list') listed.push({ id: model.slug });\n }\n return listed;\n}\n\nfunction validHeaderValue(value: unknown): value is string {\n return typeof value === 'string'\n && new TextEncoder().encode(value).byteLength <= MAX_PROFILE_HEADER_VALUE_BYTES\n && value.trim().length > 0\n && !/[\\r\\n\\0]/.test(value);\n}\n\nfunction validRoutingHintPart(value: unknown): value is string {\n return validHeaderValue(value) && !/[\\x00-\\x1F\\x7F;]/.test(value);\n}\n\nfunction setCodexRoutingHint(headers: Record<string, string>, body: unknown): void {\n for (const key of Object.keys(headers)) {\n if (key.toLowerCase() === CODEX_ROUTING_HINT_HEADER.toLowerCase()) delete headers[key];\n }\n if (typeof body !== 'object' || body === null || Array.isArray(body)) return;\n const requestBody = body as Record<string, unknown>;\n if (!validRoutingHintPart(requestBody.model)) return;\n const hint = requestBody.service_tier === 'priority'\n ? `model=${requestBody.model};tier=priority`\n : `model=${requestBody.model}`;\n if (validHeaderValue(hint)) setHeader(headers, CODEX_ROUTING_HINT_HEADER, hint);\n}\n\nfunction enforceCodexResponsesLite(context: MutableRequestContext): void {\n if (context.url.pathname !== CODEX_RESPONSES_PATH || !isCodexResponsesLite(context.body, context.headers)) return;\n if (typeof context.body === 'object' && context.body !== null && !Array.isArray(context.body)) {\n context.body = { ...context.body, parallel_tool_calls: false };\n }\n}\n\nfunction headerValue(headers: Record<string, string>, name: string): string | undefined {\n const lowerName = name.toLowerCase();\n const entry = Object.entries(headers).find(([key]) => key.toLowerCase() === lowerName);\n return entry && validHeaderValue(entry[1]) ? entry[1] : undefined;\n}\n\nfunction setHeader(headers: Record<string, string>, name: string, value: string): void {\n const lowerName = name.toLowerCase();\n for (const key of Object.keys(headers)) {\n if (key.toLowerCase() === lowerName) delete headers[key];\n }\n headers[lowerName] = value;\n}\n\nfunction responseHeaders(response: Response, contentType: string): Headers {\n const headers = new Headers();\n const retryAfter = response.headers.get('retry-after');\n if (retryAfter !== null) headers.set('retry-after', retryAfter);\n headers.set('content-type', contentType);\n return headers;\n}\n\nfunction nativeResponseHeaders(response: Response): Headers {\n const headers = new Headers(response.headers);\n // The shared event view supplies decoded frames, so wire entity headers no longer apply.\n for (const name of ['content-encoding', 'content-length', 'transfer-encoding']) headers.delete(name);\n headers.set('content-type', 'text/event-stream');\n return headers;\n}\n\nfunction errorBody(error?: RawResponseError, fallbackCode = 'upstream_error') {\n return { message: error?.message ?? 'Upstream response could not be adapted', type: error?.type ?? 'upstream_error', code: error?.code ?? fallbackCode };\n}\n\nfunction completionFromError(error: unknown, redact?: RawResponseContext['redactDiagnostic']): RawResponseCompletion {\n if (error instanceof CodexProtocolError) {\n if (error.kind === 'cancelled') return { status: 'cancelled' };\n if (error.kind === 'incomplete') return { status: 'incomplete', code: 'incomplete' };\n if (error.kind === 'unexpected_eof') return { status: 'failed', code: 'unexpected_eof' };\n return { status: 'failed', code: error.kind, ...(error.diagnostic ? {\n error: errorDiagnostic(error.diagnostic, error.diagnostic.source, error.message, redact),\n } : {}) };\n }\n if (error instanceof CodexModelsError) {\n return error.kind === 'aborted' ? { status: 'cancelled' } : { status: 'failed', code: error.kind };\n }\n const hostCode = (error as { code?: string })?.code;\n if (hostCode === 'body_consumer_cancelled') return { status: 'cancelled' };\n if (hostCode?.includes('too_large')) return { status: 'failed', code: 'body_limit' };\n if (hostCode === 'invalid_json_body' || hostCode?.startsWith('body_sse_')) return { status: 'failed', code: 'invalid_response' };\n return { status: 'failed', code: 'body_error', error: errorDiagnostic(error, 'transport', 'Upstream response body could not be read', redact) };\n}\n\nfunction bodyConsumer(signal: AbortSignal) {\n return { id: 'chatgpt-oauth', mandatory: true, signal } as const;\n}\n\nasync function readHttpError(context: RawResponseContext): Promise<RawResponseCompletion> {\n try {\n const signal = AbortSignal.any([context.signal, AbortSignal.timeout(1000)]);\n const body = await context.bodyHandle!.json(bodyConsumer(signal));\n const error = body && typeof body === 'object' ? (body as JsonObject).error : undefined;\n if (error && typeof error === 'object' && !Array.isArray(error)) {\n return { status: 'failed', code: 'upstream_http_error', error: errorDiagnostic(error, 'upstream', 'Upstream returned an HTTP error', context.redactDiagnostic) };\n }\n } catch {\n if (context.signal.aborted) return { status: 'cancelled' };\n // Malformed JSON and body limits must never expose the upstream body.\n }\n return { status: 'failed', code: 'upstream_http_error' };\n}\n\nfunction joinCompletion(\n upstream: Promise<RawResponseCompletion>,\n body: Promise<RawResponseCompletion>,\n signal?: AbortSignal,\n): Promise<RawResponseCompletion> {\n const safe = (promise: Promise<RawResponseCompletion>): Promise<RawResponseCompletion> =>\n promise.catch(() => ({ status: 'failed', code: 'upstream_completion' }));\n const wait = (promise: Promise<RawResponseCompletion>): Promise<RawResponseCompletion> => {\n const pending = safe(promise);\n if (signal === undefined) return pending;\n if (signal.aborted) return Promise.resolve({ status: 'cancelled' });\n return new Promise((resolve) => {\n let settled = false;\n const finish = (result: RawResponseCompletion) => {\n if (settled) return;\n settled = true;\n signal.removeEventListener('abort', onAbort);\n resolve(result);\n };\n const onAbort = () => finish({ status: 'cancelled' });\n signal.addEventListener('abort', onAbort, { once: true });\n pending.then(finish, () => finish({ status: 'failed', code: 'upstream_completion' }));\n });\n };\n return wait(body).then((bodyResult) => bodyResult.status === 'completed' ? wait(upstream) : bodyResult);\n}\n\nasync function discardBody(handle: BodyHandle, signal: AbortSignal): Promise<RawResponseCompletion> {\n try {\n const deadline = AbortSignal.any([signal, AbortSignal.timeout(1000)]);\n await handle.decoded(bodyConsumer(deadline));\n return { status: 'completed' };\n } catch (error) {\n if (signal.aborted) return { status: 'cancelled' };\n const code = (error as { code?: string })?.code;\n return { status: 'failed', code: code?.includes('too_large') ? 'body_limit' : 'body_error' };\n }\n}\n\nfunction isJsonContentType(response: Response): boolean {\n const contentType = response.headers.get('content-type')?.split(';', 1)[0].trim().toLowerCase();\n return contentType === 'application/json' || contentType?.endsWith('+json') === true;\n}\n\n\nfunction serialize(event: CodexSSEEvent): string {\n const envelope = event.envelope;\n if (envelope?.raw) return envelope.raw;\n const lines = (envelope?.comments ?? []).map(comment => `:${comment}`);\n if (envelope?.event !== undefined) lines.push(`event: ${envelope.event}`);\n if (envelope?.id !== undefined) lines.push(`id: ${envelope.id}`);\n if (envelope?.retry !== undefined) lines.push(`retry: ${envelope.retry}`);\n const data = event.type === 'done' ? '[DONE]' : envelope?.data ?? JSON.stringify(event.data);\n if (envelope?.hasData !== false) lines.push(...data.split('\\n').map(line => `data: ${line}`));\n return `${lines.join('\\n')}\\n\\n`;\n}\n\n/** Native payloads stay opaque; only the explicit protocol terminal is inspected. */\nasync function* nativeCodexEvents(handle: BodyHandle, signal: AbortSignal): AsyncGenerator<CodexSSEEvent> {\n for await (const envelope of handle.events(bodyConsumer(signal))) {\n const data = envelope.json && typeof envelope.json === 'object' && !Array.isArray(envelope.json)\n ? envelope.json as JsonObject : {};\n yield { type: typeof data.type === 'string' ? data.type : undefined, data, envelope };\n }\n}\n\nfunction nativeTerminal(event: CodexSSEEvent): RawResponseCompletion | undefined {\n if (event.envelope?.truncated || event.envelope?.hasData === false) return;\n if (event.type === 'error') return { status: 'failed', code: 'upstream_error' };\n const status = event.type === 'response.completed' ? 'completed'\n : event.type === 'response.incomplete' ? 'incomplete'\n : event.type === 'response.failed' ? 'failed' : undefined;\n if (!status) return;\n const response = event.data.response;\n if (!response || typeof response !== 'object' || Array.isArray(response)\n || response.status !== status || !Array.isArray(response.output)\n || (status === 'completed' && response.error != null))\n return { status: 'failed', code: 'invalid_response' };\n return status === 'completed' ? { status } : { status, code: status === 'failed' ? 'upstream_error' : 'incomplete' };\n}\n\nfunction protocolStreamBody(\n handle: BodyHandle,\n target: Exclude<AdaptationTarget, 'models'>,\n includeUsage: boolean,\n signal: AbortSignal,\n redact?: RawResponseContext['redactDiagnostic'],\n preserveCustomTools = false,\n native = false,\n): { body: ReadableStream<Uint8Array>; completion: Promise<RawResponseCompletion> } {\n const protocolController = new AbortController();\n const onAbort = () => protocolController.abort(signal.reason ?? 'cancelled');\n if (signal.aborted) protocolController.abort(signal.reason ?? 'cancelled');\n else signal.addEventListener('abort', onAbort, { once: true });\n let resolveCompletion!: (result: RawResponseCompletion) => void;\n let settled = false;\n const settle = (result: RawResponseCompletion) => {\n if (settled) return;\n settled = true;\n resolveCompletion(result);\n };\n const completion = new Promise<RawResponseCompletion>((resolve) => { resolveCompletion = resolve; });\n const processor = native ? undefined : new CodexResponseProcessor({ target, includeUsage, redactDiagnostic: redact, preserveCustomTools });\n let terminalOutcome: RawResponseCompletion | undefined;\n const events = native ? nativeCodexEvents(handle, protocolController.signal)\n : parseCodexSSE(handle.events(bodyConsumer(protocolController.signal)), { signal: protocolController.signal });\n const iterator = (async function* (): AsyncGenerator<string> {\n try {\n for await (const event of events) {\n const output = processor?.process(event) ?? [];\n if (native) {\n const outcome = nativeTerminal(event);\n if (outcome) { terminalOutcome = outcome; settle(outcome); }\n } else if (event.type === 'response.completed' || event.type === 'response.incomplete') {\n const final = processor!.finish();\n terminalOutcome = final.terminal === 'completed'\n ? { status: 'completed' }\n : { status: 'incomplete', code: 'incomplete' };\n // A complete, validated protocol terminal is proof even if the client\n // closes the transport immediately after receiving this event.\n settle(terminalOutcome);\n }\n if (target === 'responses') yield serialize(event);\n else for (const chunk of output) yield `data: ${JSON.stringify(chunk)}\\n\\n`;\n }\n const final = processor?.finish();\n const outcome = native ? terminalOutcome ?? { status: 'failed' as const, code: 'unexpected_eof' }\n : final!.terminal === 'completed' ? { status: 'completed' as const } : { status: 'incomplete' as const, code: 'incomplete' };\n if (target === 'chat') yield 'data: [DONE]\\n\\n';\n settle(outcome);\n } catch (error) {\n const outcome = completionFromError(error, redact);\n settle(outcome.status === 'cancelled' ? terminalOutcome ?? outcome : outcome);\n if (!native && outcome.status === 'failed' && outcome.error) {\n // A terminal error frame makes the reason observable to clients and the\n // response capture. Completion stays failed, even though HTTP is 200.\n const safe = errorBody(outcome.error, outcome.code);\n yield target === 'responses'\n ? `event: error\\ndata: ${JSON.stringify({ type: 'error', code: safe.code, message: safe.message, param: null, error: safe })}\\n\\n`\n : `data: ${JSON.stringify({ error: safe })}\\n\\n`;\n return;\n }\n throw error;\n } finally {\n signal.removeEventListener('abort', onAbort);\n }\n })()[Symbol.asyncIterator]();\n const body = new ReadableStream<Uint8Array>({\n async pull(controller) {\n try {\n const next = await iterator.next();\n if (next.done) controller.close();\n else if (next.value !== undefined) controller.enqueue(new TextEncoder().encode(next.value));\n } catch (error) {\n controller.error(error);\n }\n },\n cancel(reason) {\n settle(terminalOutcome ?? { status: 'cancelled' });\n protocolController.abort(reason ?? 'cancelled');\n void Promise.resolve(iterator.return?.(reason)).catch(() => undefined);\n },\n }, { highWaterMark: 0 });\n return { body, completion };\n}\n\nexport class ChatgptOauthAdapter {\n private readonly requests = new Map<string, AdaptedRequest>();\n private readonly nativeResponses = new WeakSet<Response>();\n\n constructor() {}\n\n beforeRequest(context: MutableRequestContext): MutableRequestContext {\n assertResponsesEntryPath(context.url.pathname);\n const target = (context.url.pathname === MODELS_PATH || (context.originalUrl.searchParams.has('client_version') && context.url.pathname === '/models'))\n ? 'models'\n : context.url.pathname === CHAT_COMPLETIONS_PATH\n ? 'chat'\n : isResponsesRequest(context.url) ? 'responses' : undefined;\n if (context.url.origin === SIWC_ORIGIN) {\n if (target === undefined) return context;\n const input = target === 'models' ? undefined : record(context.body);\n const stream = input?.stream === true;\n const includeUsage = input ? streamIncludesUsage(input) : false;\n context.body = input ? normalizeSiwcRequest(input, target as 'chat' | 'responses') : undefined;\n if (target !== 'models') context.url.pathname = SIWC_RESPONSES_PATH;\n setSiwcHeaders(context, target);\n this.requests.set(context.requestId, Object.freeze({\n // SIWC Responses can return a valid SSE body without Content-Type.\n // The protocol parser still requires valid events and a terminal response.\n target, stream, includeUsage, siwc: true, allowMissingContentType: target !== 'models',\n adaptedResponses: new WeakSet<Response>(),\n }));\n return context;\n }\n if (context.url.pathname === CODEX_RESPONSES_PATH) {\n setCodexRoutingHint(context.headers, context.body);\n enforceCodexResponsesLite(context);\n return context;\n }\n if (target === undefined) return context;\n if (target === 'models') {\n context.body = undefined;\n context.url.pathname = CODEX_MODELS_PATH;\n context.url.search = `?client_version=${encodeURIComponent(CODEX_COMPATIBILITY_VERSION)}`;\n setHeader(context.headers, 'Accept', 'application/json');\n setHeader(context.headers, 'User-Agent', CODEX_MODELS_USER_AGENT);\n setHeader(context.headers, 'Originator', CODEX_MODELS_ORIGINATOR);\n this.requests.set(context.requestId, Object.freeze({\n target, stream: false, includeUsage: false, allowMissingContentType: false,\n preserveModels: context.originalUrl.searchParams.has('client_version'),\n adaptedResponses: new WeakSet<Response>(),\n }));\n return context;\n }\n const input = record(context.body);\n const stream = input.stream === true;\n const includeUsage = streamIncludesUsage(input);\n const promptCacheKey = validHeaderValue(input.prompt_cache_key) ? input.prompt_cache_key : undefined;\n const inboundSessionId = headerValue(context.headers, 'Session-Id');\n const sessionId = inboundSessionId ?? promptCacheKey;\n context.body = target === 'chat'\n ? convertChatCompletionsRequestToCodex(input)\n : normalizeCodexResponsesRequest(input);\n if (target === 'chat' && promptCacheKey !== undefined) context.body.prompt_cache_key = promptCacheKey;\n context.url.pathname = CODEX_RESPONSES_PATH;\n enforceCodexResponsesLite(context);\n setHeader(context.headers, 'Accept', 'text/event-stream');\n setHeader(context.headers, 'Content-Type', 'application/json');\n setHeader(context.headers, 'User-Agent', CODEX_RESPONSES_USER_AGENT);\n setHeader(context.headers, 'Originator', CODEX_RESPONSES_ORIGINATOR);\n setCodexRoutingHint(context.headers, context.body);\n for (const key of Object.keys(context.headers)) {\n if (key.toLowerCase() === 'session-id') delete context.headers[key];\n }\n if (sessionId !== undefined) setHeader(context.headers, 'Session-Id', sessionId);\n this.requests.set(context.requestId, Object.freeze({\n target,\n stream,\n includeUsage,\n allowMissingContentType: context.url.origin === CHATGPT_ORIGIN\n && context.url.pathname === CODEX_RESPONSES_PATH,\n adaptedResponses: new WeakSet<Response>(),\n }));\n return context;\n }\n\n reconcileOutboundRequest(context: MutableRequestContext): MutableRequestContext {\n if (context.url.origin === SIWC_ORIGIN) {\n if (context.url.pathname === SIWC_RESPONSES_PATH) {\n context.body = normalizeSiwcRequest(record(context.body), 'responses');\n setSiwcHeaders(context, 'responses');\n } else if (context.url.pathname === MODELS_PATH) setSiwcHeaders(context, 'models');\n return context;\n }\n if (context.url.pathname === CODEX_RESPONSES_PATH) {\n setCodexRoutingHint(context.headers, context.body);\n enforceCodexResponsesLite(context);\n }\n return context;\n }\n\n async rawResponse(result: RawResponseResult, context: RawResponseContext): Promise<RawResponseResult> {\n if (convertedCompletions.has(result.completion)) {\n const pending = this.requests.get(context.requestId);\n const cleanup = () => {\n if (this.requests.get(context.requestId) === pending) this.requests.delete(context.requestId);\n };\n void result.completion.then(cleanup, cleanup);\n return result;\n }\n if (this.nativeResponses.has(result.response)) return result;\n const upstreamUrl = context.upstreamUrl ? new URL(context.upstreamUrl) : undefined;\n const current: AdaptedRequest | undefined = this.requests.get(context.requestId) ?? (upstreamUrl?.origin === CHATGPT_ORIGIN\n && upstreamUrl.pathname === CODEX_RESPONSES_PATH && context.method.toUpperCase() === 'POST'\n ? Object.freeze({ target: 'responses' as const, stream: true, includeUsage: false,\n allowMissingContentType: true, native: true, adaptedResponses: new WeakSet<Response>() }) : undefined);\n if (current === undefined || current.adaptedResponses.has(result.response)) return result;\n current.adaptedResponses.add(result.response);\n if (current.native) this.nativeResponses.add(result.response);\n const state = current.attemptId === undefined\n ? Object.freeze({ ...current, attemptId: context.attemptId })\n : current;\n if (state !== current && this.requests.get(context.requestId) === current) this.requests.set(context.requestId, state);\n const cleanup = () => { if (this.requests.get(context.requestId) === state) this.requests.delete(context.requestId); };\n const trackCompletion = (completion: Promise<RawResponseCompletion>) => {\n if (!state.native) convertedCompletions.add(completion);\n void completion.then(cleanup, cleanup);\n };\n const mark = (response: Response): Response => {\n current.adaptedResponses.add(response);\n if (current.native) this.nativeResponses.add(response);\n return response;\n };\n const errorResponse = (status: number, completion: Promise<RawResponseCompletion>, error?: RawResponseError): RawResponseResult => {\n const response = mark(new Response(JSON.stringify({ error: errorBody(error) }), {\n status,\n statusText: result.response.statusText,\n headers: responseHeaders(result.response, 'application/json; charset=utf-8'),\n }));\n trackCompletion(completion);\n return { response, completion };\n };\n\n if (state.native && !result.response.ok) {\n // Native clients consume provider-specific quota/error fields and headers.\n // HTTP failure handling remains with the host; only successful SSE needs terminal proof.\n void result.completion.then(cleanup, cleanup);\n return result;\n }\n\n // The host owns wire reading, decompression, framing and JSON caching.\n // Adaptation requires that explicit shared view; there is no private reader fallback.\n if (!context.bodyHandle) {\n return errorResponse(502, Promise.resolve({ status: 'failed', code: 'body_view_missing' }));\n }\n\n if (!result.response.ok) {\n const failure = await readHttpError(context);\n return errorResponse(result.response.status, joinCompletion(result.completion, Promise.resolve(failure), context.signal), 'error' in failure ? failure.error : undefined);\n }\n\n if (state.target === 'models') {\n if (!isJsonContentType(result.response)) {\n const bodyCompletion = discardBody(context.bodyHandle, context.signal).then((outcome): RawResponseCompletion =>\n outcome.status === 'completed' ? { status: 'failed', code: 'invalid_content_type' } : outcome);\n return errorResponse(502, joinCompletion(result.completion, bodyCompletion, context.signal));\n }\n if (!result.response.body) {\n return errorResponse(502, joinCompletion(result.completion, Promise.resolve({ status: 'failed', code: 'invalid_response' }), context.signal));\n }\n try {\n const payload = await context.bodyHandle.json(bodyConsumer(context.signal));\n const models = state.preserveModels ? [] : state.siwc ? parseSiwcModelsBody(payload) : parseCodexModelsPayload(payload);\n if (state.preserveModels && (!payload || typeof payload !== 'object' || !Array.isArray((payload as JsonObject).models))) throw new CodexModelsError('invalid_structure');\n const body = state.preserveModels ? payload : {\n object: 'list',\n data: models.map(({ id }) => ({ id, object: 'model', owned_by: 'openai' })),\n };\n const completion = joinCompletion(result.completion, Promise.resolve({ status: 'completed' as const }), context.signal);\n const response = mark(new Response(JSON.stringify(body), {\n status: result.response.status,\n statusText: result.response.statusText,\n headers: responseHeaders(result.response, 'application/json; charset=utf-8'),\n }));\n trackCompletion(completion);\n return { response, completion };\n } catch (error) {\n const failure = completionFromError(error, context.redactDiagnostic);\n return errorResponse(502, joinCompletion(result.completion, Promise.resolve(failure), context.signal), 'error' in failure ? failure.error : undefined);\n }\n }\n\n const contentType = result.response.headers.get('content-type');\n const media = contentType?.split(';', 1)[0].trim().toLowerCase();\n const hasEventStream = media === 'text/event-stream' || (state.native === true && media === 'application/octet-stream');\n const allowMissingContentType = state.allowMissingContentType && contentType === null;\n if ((!hasEventStream && !allowMissingContentType) || !result.response.body) {\n const bodyCompletion = !hasEventStream && !allowMissingContentType\n ? discardBody(context.bodyHandle, context.signal).then((outcome): RawResponseCompletion =>\n outcome.status === 'completed' ? { status: 'failed', code: 'invalid_content_type' } : outcome)\n : Promise.resolve({ status: 'failed' as const, code: 'invalid_response' });\n return errorResponse(502, joinCompletion(result.completion, bodyCompletion, context.signal));\n }\n if (state.stream) {\n const converted = protocolStreamBody(context.bodyHandle, state.target, state.includeUsage, context.signal, context.redactDiagnostic, state.siwc, state.native);\n // A validated terminal is proof before transport EOF. An already failed\n // upstream must still settle even if its body never reaches a terminal.\n const streamCompletion = Promise.race([\n converted.completion,\n result.completion.then(upstream => upstream.status === 'failed' ? upstream : converted.completion,\n () => ({ status: 'failed' as const, code: 'upstream_completion' })),\n ]);\n trackCompletion(streamCompletion);\n return {\n response: mark(new Response(converted.body, { status: result.response.status, statusText: result.response.statusText,\n headers: state.native ? nativeResponseHeaders(result.response) : responseHeaders(result.response, 'text/event-stream') })),\n completion: streamCompletion,\n };\n }\n try {\n const stateResult = await consumeCodexResponse(context.bodyHandle.events(bodyConsumer(context.signal)), {\n signal: context.signal,\n request: { stream_options: { include_usage: state.includeUsage } },\n target: state.target,\n redactDiagnostic: context.redactDiagnostic,\n });\n const body = state.target === 'chat' ? responsesToChatCompletion(stateResult.response, state.siwc) : stateResult.response;\n const protocolCompletion: Promise<RawResponseCompletion> = Promise.resolve(\n stateResult.terminal === 'completed' ? { status: 'completed' } : { status: 'incomplete', code: 'incomplete' },\n );\n const nonStreamCompletion = joinCompletion(result.completion, protocolCompletion, context.signal);\n trackCompletion(nonStreamCompletion);\n return { response: mark(new Response(JSON.stringify(body), { status: result.response.status, statusText: result.response.statusText, headers: responseHeaders(result.response, 'application/json; charset=utf-8') })), completion: nonStreamCompletion };\n } catch (error) {\n const failure = completionFromError(error, context.redactDiagnostic);\n const failedCompletion = joinCompletion(result.completion, Promise.resolve(failure), context.signal);\n return errorResponse(502, failedCompletion, 'error' in failure ? failure.error : undefined);\n }\n }\n\n}\n",
|
|
24
|
+
"import type { BodyHandle, MutableRequestContext, RawResponseContext } from '@jeffusion/bungee-core/plugin';\nimport type { RawResponseCompletion, RawResponseError, RawResponseResult } from '@jeffusion/bungee-core/plugin';\nimport { errorDiagnostic } from './error-diagnostics';\nimport {\n CodexProtocolError,\n CodexResponseProcessor,\n consumeCodexResponse,\n convertChatCompletionsRequestToCodex,\n isCodexResponsesLite,\n normalizeCodexResponsesRequest,\n parseCodexSSE,\n responsesToChatCompletion,\n streamIncludesUsage,\n type CodexSSEEvent,\n type JsonObject,\n} from './codex-protocol';\nimport { CodexModelsError, parseCodexModelsPayload } from './codex-models';\nimport {\n CODEX_COMPATIBILITY_VERSION,\n CODEX_MODELS_ORIGINATOR,\n CODEX_MODELS_USER_AGENT,\n CODEX_RESPONSES_ORIGINATOR,\n CODEX_RESPONSES_USER_AGENT,\n} from './constants';\n\nexport {\n CODEX_COMPATIBILITY_VERSION,\n CODEX_MODELS_USER_AGENT,\n CODEX_RESPONSES_USER_AGENT,\n} from './constants';\n\nexport const CHAT_COMPLETIONS_PATH = '/v1/chat/completions';\nexport const RESPONSES_PATH = '/responses';\nexport const SEARCH_PATH = '/alpha/search';\nconst SIWC_RESPONSES_PATH = '/v1/responses';\nexport const MODELS_PATH = '/v1/models';\nexport const CODEX_RESPONSES_PATH = '/backend-api/codex/responses';\nexport const CODEX_MODELS_PATH = '/backend-api/codex/models';\nexport const CODEX_SEARCH_PATH = '/backend-api/codex/alpha/search';\nexport function isResponsesRequest(url: URL): boolean {\n return url.pathname === RESPONSES_PATH;\n}\nexport function assertResponsesEntryPath(path: string): void {\n if (path === SIWC_RESPONSES_PATH) {\n throw new CodexProtocolError('invalid_response', 'Responses requests must use /responses; the plugin supplies the upstream prefix');\n }\n}\nconst MAX_PROFILE_HEADER_VALUE_BYTES = 8192;\nconst CHATGPT_ORIGIN = 'https://chatgpt.com';\nconst SIWC_ORIGIN = 'https://api.openai.com';\nconst CODEX_ROUTING_HINT_HEADER = 'X-Codex-Routing-Hint';\n// The host refreshes Response views between scopes but retains completion\n// identity. Do not parse an already converted representation as native Codex.\nconst convertedCompletions = new WeakSet<Promise<RawResponseCompletion>>();\nconst SIWC_FORBIDDEN_FIELDS = [\n 'background', 'conversation', 'max_output_tokens', 'max_completion_tokens', 'max_tool_calls',\n 'metadata', 'moderation', 'multi_agent', 'prompt', 'prompt_cache_retention', 'safety_identifier',\n 'temperature', 'top_logprobs', 'top_p', 'truncation', 'user', 'previous_response_id',\n 'client_metadata', 'context_management', 'prompt_cache_options',\n];\n\ntype AdaptationTarget = 'chat' | 'responses' | 'models';\ntype AdaptedRequest = Readonly<{\n target: AdaptationTarget;\n stream: boolean;\n includeUsage: boolean;\n allowMissingContentType: boolean;\n siwc?: boolean;\n attemptId?: string;\n adaptedResponses: WeakSet<Response>;\n preserveModels?: boolean;\n native?: boolean;\n}>;\n\nfunction record(value: unknown): JsonObject {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n throw new CodexProtocolError('invalid_response', 'Request must be a JSON object');\n }\n return value as JsonObject;\n}\n\nfunction siwcTool(tool: unknown): JsonObject {\n const value = record(tool);\n if (value.type !== 'function' && value.type !== 'custom') {\n throw new CodexProtocolError('invalid_response', 'SIWC supports only function and custom tools');\n }\n const nested = value.type === 'function' ? value.function : value.custom;\n const definition = nested === undefined ? value : record(nested);\n if (typeof definition.name !== 'string' || !/^[A-Za-z0-9_-]{1,64}$/.test(definition.name)) {\n throw new CodexProtocolError('invalid_response', 'SIWC tool names must be 1-64 ASCII letters, digits, underscores or hyphens');\n }\n const normalized: JsonObject = { ...definition, type: value.type };\n if (value.type === 'custom' && normalized.format?.type === 'grammar' && normalized.format.grammar !== undefined) {\n const grammar = record(normalized.format.grammar);\n if (!['lark', 'regex'].includes(grammar.syntax) || typeof grammar.definition !== 'string') {\n throw new CodexProtocolError('invalid_response', 'SIWC custom tool grammar is invalid');\n }\n normalized.format = { type: 'grammar', syntax: grammar.syntax, definition: grammar.definition };\n }\n return normalized;\n}\n\nfunction normalizeSiwcRequest(input: JsonObject, target: 'chat' | 'responses'): JsonObject {\n if (input.previous_response_id !== undefined) {\n throw new CodexProtocolError('invalid_response', 'SIWC requires the full conversation in input; previous_response_id is unsupported');\n }\n if (input.tools !== undefined && !Array.isArray(input.tools)) {\n throw new CodexProtocolError('invalid_response', 'SIWC tools must be an array');\n }\n // Validate before conversion, which can otherwise preserve hosted tools.\n input.tools?.forEach(siwcTool);\n if (target === 'chat' && !Array.isArray(input.messages)) {\n throw new CodexProtocolError('invalid_response', 'Chat messages must be an array');\n }\n const out = target === 'chat' ? convertChatCompletionsRequestToCodex(input) : JSON.parse(JSON.stringify(input));\n out.store = false;\n out.stream = true;\n if (out.instructions === undefined || out.instructions === null) out.instructions = '';\n if (typeof out.instructions !== 'string') throw new CodexProtocolError('invalid_response', 'SIWC instructions must be text');\n if (typeof out.input === 'string') out.input = [{ type: 'message', role: 'user', content: [{ type: 'input_text', text: out.input }] }];\n if (out.input === undefined) out.input = [];\n if (!Array.isArray(out.input)) throw new CodexProtocolError('invalid_response', 'SIWC input must contain the full conversation as an array');\n const inputTypes = new Set(['message', 'function_call', 'function_call_output', 'custom_tool_call', 'custom_tool_call_output', 'reasoning', 'compaction']);\n for (const item of out.input) {\n const value = record(item);\n if (value.type === undefined && typeof value.role === 'string') value.type = 'message';\n if (!inputTypes.has(value.type)) throw new CodexProtocolError('invalid_response', 'SIWC input contains an unsupported item');\n if (value.type === 'message') {\n if (!['system', 'developer', 'user', 'assistant'].includes(value.role)) throw new CodexProtocolError('invalid_response', 'SIWC input contains an unsupported role');\n if (value.role === 'system') value.role = 'developer';\n }\n }\n if (Array.isArray(out.tools)) out.tools = out.tools.map(siwcTool);\n if (out.tool_choice !== undefined) {\n if (typeof out.tool_choice === 'string') {\n if (!['auto', 'none', 'required'].includes(out.tool_choice)) throw new CodexProtocolError('invalid_response', 'SIWC tool choice is unsupported');\n } else out.tool_choice = siwcTool(out.tool_choice);\n }\n for (const field of SIWC_FORBIDDEN_FIELDS) delete out[field];\n return out;\n}\n\nfunction setSiwcHeaders(context: MutableRequestContext, target: AdaptationTarget): void {\n for (const name of Object.keys(context.headers)) {\n if (/^(chatgpt-account-id|session-id|thread-id|version|x-codex-.*|x-openai-internal-codex-.*)$/i.test(name)) delete context.headers[name];\n }\n setHeader(context.headers, 'User-Agent', 'Bungee/5.11.0');\n setHeader(context.headers, 'Originator', 'Bungee');\n setHeader(context.headers, 'Accept', target === 'models' ? 'application/json' : 'text/event-stream');\n if (target !== 'models') setHeader(context.headers, 'Content-Type', 'application/json');\n}\n\nfunction parseSiwcModelsBody(payload: unknown): readonly { id: string }[] {\n if (typeof payload !== 'object' || payload === null || Array.isArray(payload)) throw new CodexModelsError('invalid_structure');\n const models = (payload as JsonObject).models;\n if (!Array.isArray(models) || models.length > 512) throw new CodexModelsError('invalid_structure');\n const text = (value: unknown) => typeof value === 'string' && value.length > 0 && value.length <= 512 && value === value.trim() && !/[\\r\\n\\0]/.test(value);\n const listed: { id: string }[] = [];\n for (const model of models) {\n if (!model || typeof model !== 'object' || Array.isArray(model) || !text(model.slug)\n || typeof model.visibility !== 'string' || (model.display_name !== undefined && !text(model.display_name))) throw new CodexModelsError('invalid_structure');\n if (model.visibility === 'list') listed.push({ id: model.slug });\n }\n return listed;\n}\n\nfunction validHeaderValue(value: unknown): value is string {\n return typeof value === 'string'\n && new TextEncoder().encode(value).byteLength <= MAX_PROFILE_HEADER_VALUE_BYTES\n && value.trim().length > 0\n && !/[\\r\\n\\0]/.test(value);\n}\n\nfunction validRoutingHintPart(value: unknown): value is string {\n return validHeaderValue(value) && !/[\\x00-\\x1F\\x7F;]/.test(value);\n}\n\nfunction setCodexRoutingHint(headers: Record<string, string>, body: unknown): void {\n for (const key of Object.keys(headers)) {\n if (key.toLowerCase() === CODEX_ROUTING_HINT_HEADER.toLowerCase()) delete headers[key];\n }\n if (typeof body !== 'object' || body === null || Array.isArray(body)) return;\n const requestBody = body as Record<string, unknown>;\n if (!validRoutingHintPart(requestBody.model)) return;\n const hint = requestBody.service_tier === 'priority'\n ? `model=${requestBody.model};tier=priority`\n : `model=${requestBody.model}`;\n if (validHeaderValue(hint)) setHeader(headers, CODEX_ROUTING_HINT_HEADER, hint);\n}\n\nfunction enforceCodexResponsesLite(context: MutableRequestContext): void {\n if (context.url.pathname !== CODEX_RESPONSES_PATH || !isCodexResponsesLite(context.body, context.headers)) return;\n if (typeof context.body === 'object' && context.body !== null && !Array.isArray(context.body)) {\n context.body = { ...context.body, parallel_tool_calls: false };\n }\n}\n\nfunction headerValue(headers: Record<string, string>, name: string): string | undefined {\n const lowerName = name.toLowerCase();\n const entry = Object.entries(headers).find(([key]) => key.toLowerCase() === lowerName);\n return entry && validHeaderValue(entry[1]) ? entry[1] : undefined;\n}\n\nfunction setHeader(headers: Record<string, string>, name: string, value: string): void {\n const lowerName = name.toLowerCase();\n for (const key of Object.keys(headers)) {\n if (key.toLowerCase() === lowerName) delete headers[key];\n }\n headers[lowerName] = value;\n}\n\nfunction responseHeaders(response: Response, contentType: string): Headers {\n const headers = new Headers();\n const retryAfter = response.headers.get('retry-after');\n if (retryAfter !== null) headers.set('retry-after', retryAfter);\n headers.set('content-type', contentType);\n return headers;\n}\n\nfunction nativeResponseHeaders(response: Response): Headers {\n const headers = new Headers(response.headers);\n // The shared event view supplies decoded frames, so wire entity headers no longer apply.\n for (const name of ['content-encoding', 'content-length', 'transfer-encoding']) headers.delete(name);\n headers.set('content-type', 'text/event-stream');\n return headers;\n}\n\nfunction errorBody(error?: RawResponseError, fallbackCode = 'upstream_error') {\n return { message: error?.message ?? 'Upstream response could not be adapted', type: error?.type ?? 'upstream_error', code: error?.code ?? fallbackCode };\n}\n\nfunction completionFromError(error: unknown, redact?: RawResponseContext['redactDiagnostic']): RawResponseCompletion {\n if (error instanceof CodexProtocolError) {\n if (error.kind === 'cancelled') return { status: 'cancelled' };\n if (error.kind === 'incomplete') return { status: 'incomplete', code: 'incomplete' };\n if (error.kind === 'unexpected_eof') return { status: 'failed', code: 'unexpected_eof' };\n return { status: 'failed', code: error.kind, ...(error.diagnostic ? {\n error: errorDiagnostic(error.diagnostic, error.diagnostic.source, error.message, redact),\n } : {}) };\n }\n if (error instanceof CodexModelsError) {\n return error.kind === 'aborted' ? { status: 'cancelled' } : { status: 'failed', code: error.kind };\n }\n const hostCode = (error as { code?: string })?.code;\n if (hostCode === 'body_consumer_cancelled') return { status: 'cancelled' };\n if (hostCode?.includes('too_large')) return { status: 'failed', code: 'body_limit' };\n if (hostCode === 'invalid_json_body' || hostCode?.startsWith('body_sse_')) return { status: 'failed', code: 'invalid_response' };\n return { status: 'failed', code: 'body_error', error: errorDiagnostic(error, 'transport', 'Upstream response body could not be read', redact) };\n}\n\nfunction bodyConsumer(signal: AbortSignal) {\n return { id: 'chatgpt-oauth', mandatory: true, signal } as const;\n}\n\nasync function readHttpError(context: RawResponseContext): Promise<RawResponseCompletion> {\n try {\n const signal = AbortSignal.any([context.signal, AbortSignal.timeout(1000)]);\n const body = await context.bodyHandle!.json(bodyConsumer(signal));\n const error = body && typeof body === 'object' ? (body as JsonObject).error : undefined;\n if (error && typeof error === 'object' && !Array.isArray(error)) {\n return { status: 'failed', code: 'upstream_http_error', error: errorDiagnostic(error, 'upstream', 'Upstream returned an HTTP error', context.redactDiagnostic) };\n }\n } catch {\n if (context.signal.aborted) return { status: 'cancelled' };\n // Malformed JSON and body limits must never expose the upstream body.\n }\n return { status: 'failed', code: 'upstream_http_error' };\n}\n\nfunction joinCompletion(\n upstream: Promise<RawResponseCompletion>,\n body: Promise<RawResponseCompletion>,\n signal?: AbortSignal,\n): Promise<RawResponseCompletion> {\n const safe = (promise: Promise<RawResponseCompletion>): Promise<RawResponseCompletion> =>\n promise.catch(() => ({ status: 'failed', code: 'upstream_completion' }));\n const wait = (promise: Promise<RawResponseCompletion>): Promise<RawResponseCompletion> => {\n const pending = safe(promise);\n if (signal === undefined) return pending;\n if (signal.aborted) return Promise.resolve({ status: 'cancelled' });\n return new Promise((resolve) => {\n let settled = false;\n const finish = (result: RawResponseCompletion) => {\n if (settled) return;\n settled = true;\n signal.removeEventListener('abort', onAbort);\n resolve(result);\n };\n const onAbort = () => finish({ status: 'cancelled' });\n signal.addEventListener('abort', onAbort, { once: true });\n pending.then(finish, () => finish({ status: 'failed', code: 'upstream_completion' }));\n });\n };\n return wait(body).then((bodyResult) => bodyResult.status === 'completed' ? wait(upstream) : bodyResult);\n}\n\nasync function discardBody(handle: BodyHandle, signal: AbortSignal): Promise<RawResponseCompletion> {\n try {\n const deadline = AbortSignal.any([signal, AbortSignal.timeout(1000)]);\n await handle.decoded(bodyConsumer(deadline));\n return { status: 'completed' };\n } catch (error) {\n if (signal.aborted) return { status: 'cancelled' };\n const code = (error as { code?: string })?.code;\n return { status: 'failed', code: code?.includes('too_large') ? 'body_limit' : 'body_error' };\n }\n}\n\nfunction isJsonContentType(response: Response): boolean {\n const contentType = response.headers.get('content-type')?.split(';', 1)[0].trim().toLowerCase();\n return contentType === 'application/json' || contentType?.endsWith('+json') === true;\n}\n\n\nfunction serialize(event: CodexSSEEvent): string {\n const envelope = event.envelope;\n if (envelope?.raw) return envelope.raw;\n const lines = (envelope?.comments ?? []).map(comment => `:${comment}`);\n if (envelope?.event !== undefined) lines.push(`event: ${envelope.event}`);\n if (envelope?.id !== undefined) lines.push(`id: ${envelope.id}`);\n if (envelope?.retry !== undefined) lines.push(`retry: ${envelope.retry}`);\n const data = event.type === 'done' ? '[DONE]' : envelope?.data ?? JSON.stringify(event.data);\n if (envelope?.hasData !== false) lines.push(...data.split('\\n').map(line => `data: ${line}`));\n return `${lines.join('\\n')}\\n\\n`;\n}\n\n/** Native payloads stay opaque; only the explicit protocol terminal is inspected. */\nasync function* nativeCodexEvents(handle: BodyHandle, signal: AbortSignal): AsyncGenerator<CodexSSEEvent> {\n for await (const envelope of handle.events(bodyConsumer(signal))) {\n const data = envelope.json && typeof envelope.json === 'object' && !Array.isArray(envelope.json)\n ? envelope.json as JsonObject : {};\n yield { type: typeof data.type === 'string' ? data.type : undefined, data, envelope };\n }\n}\n\nfunction nativeTerminal(event: CodexSSEEvent): RawResponseCompletion | undefined {\n if (event.envelope?.truncated || event.envelope?.hasData === false) return;\n if (event.type === 'error') return { status: 'failed', code: 'upstream_error' };\n const status = event.type === 'response.completed' ? 'completed'\n : event.type === 'response.incomplete' ? 'incomplete'\n : event.type === 'response.failed' ? 'failed' : undefined;\n if (!status) return;\n const response = event.data.response;\n if (!response || typeof response !== 'object' || Array.isArray(response)\n || response.status !== status || !Array.isArray(response.output)\n || (status === 'completed' && response.error != null))\n return { status: 'failed', code: 'invalid_response' };\n return status === 'completed' ? { status } : { status, code: status === 'failed' ? 'upstream_error' : 'incomplete' };\n}\n\nfunction protocolStreamBody(\n handle: BodyHandle,\n target: Exclude<AdaptationTarget, 'models'>,\n includeUsage: boolean,\n signal: AbortSignal,\n redact?: RawResponseContext['redactDiagnostic'],\n preserveCustomTools = false,\n native = false,\n): { body: ReadableStream<Uint8Array>; completion: Promise<RawResponseCompletion> } {\n const protocolController = new AbortController();\n const onAbort = () => protocolController.abort(signal.reason ?? 'cancelled');\n if (signal.aborted) protocolController.abort(signal.reason ?? 'cancelled');\n else signal.addEventListener('abort', onAbort, { once: true });\n let resolveCompletion!: (result: RawResponseCompletion) => void;\n let settled = false;\n const settle = (result: RawResponseCompletion) => {\n if (settled) return;\n settled = true;\n resolveCompletion(result);\n };\n const completion = new Promise<RawResponseCompletion>((resolve) => { resolveCompletion = resolve; });\n const processor = native ? undefined : new CodexResponseProcessor({ target, includeUsage, redactDiagnostic: redact, preserveCustomTools });\n let terminalOutcome: RawResponseCompletion | undefined;\n const events = native ? nativeCodexEvents(handle, protocolController.signal)\n : parseCodexSSE(handle.events(bodyConsumer(protocolController.signal)), { signal: protocolController.signal });\n const iterator = (async function* (): AsyncGenerator<string> {\n try {\n for await (const event of events) {\n const output = processor?.process(event) ?? [];\n if (native) {\n const outcome = nativeTerminal(event);\n if (outcome) { terminalOutcome = outcome; settle(outcome); }\n } else if (event.type === 'response.completed' || event.type === 'response.incomplete') {\n const final = processor!.finish();\n terminalOutcome = final.terminal === 'completed'\n ? { status: 'completed' }\n : { status: 'incomplete', code: 'incomplete' };\n // A complete, validated protocol terminal is proof even if the client\n // closes the transport immediately after receiving this event.\n settle(terminalOutcome);\n }\n if (target === 'responses') yield serialize(event);\n else for (const chunk of output) yield `data: ${JSON.stringify(chunk)}\\n\\n`;\n }\n const final = processor?.finish();\n const outcome = native ? terminalOutcome ?? { status: 'failed' as const, code: 'unexpected_eof' }\n : final!.terminal === 'completed' ? { status: 'completed' as const } : { status: 'incomplete' as const, code: 'incomplete' };\n if (target === 'chat') yield 'data: [DONE]\\n\\n';\n settle(outcome);\n } catch (error) {\n const outcome = completionFromError(error, redact);\n settle(outcome.status === 'cancelled' ? terminalOutcome ?? outcome : outcome);\n if (!native && outcome.status === 'failed' && outcome.error) {\n // A terminal error frame makes the reason observable to clients and the\n // response capture. Completion stays failed, even though HTTP is 200.\n const safe = errorBody(outcome.error, outcome.code);\n yield target === 'responses'\n ? `event: error\\ndata: ${JSON.stringify({ type: 'error', code: safe.code, message: safe.message, param: null, error: safe })}\\n\\n`\n : `data: ${JSON.stringify({ error: safe })}\\n\\n`;\n return;\n }\n throw error;\n } finally {\n signal.removeEventListener('abort', onAbort);\n }\n })()[Symbol.asyncIterator]();\n const body = new ReadableStream<Uint8Array>({\n async pull(controller) {\n try {\n const next = await iterator.next();\n if (next.done) controller.close();\n else if (next.value !== undefined) controller.enqueue(new TextEncoder().encode(next.value));\n } catch (error) {\n controller.error(error);\n }\n },\n cancel(reason) {\n settle(terminalOutcome ?? { status: 'cancelled' });\n protocolController.abort(reason ?? 'cancelled');\n void Promise.resolve(iterator.return?.(reason)).catch(() => undefined);\n },\n }, { highWaterMark: 0 });\n return { body, completion };\n}\n\nexport class ChatgptOauthAdapter {\n private readonly requests = new Map<string, AdaptedRequest>();\n private readonly nativeResponses = new WeakSet<Response>();\n\n constructor() {}\n\n beforeRequest(context: MutableRequestContext): MutableRequestContext {\n assertResponsesEntryPath(context.url.pathname);\n const target = (context.url.pathname === MODELS_PATH || (context.originalUrl.searchParams.has('client_version') && context.url.pathname === '/models'))\n ? 'models'\n : context.url.pathname === CHAT_COMPLETIONS_PATH\n ? 'chat'\n : isResponsesRequest(context.url) ? 'responses' : undefined;\n if (context.url.origin === SIWC_ORIGIN) {\n if (target === undefined) return context;\n const input = target === 'models' ? undefined : record(context.body);\n const stream = input?.stream === true;\n const includeUsage = input ? streamIncludesUsage(input) : false;\n context.body = input ? normalizeSiwcRequest(input, target as 'chat' | 'responses') : undefined;\n if (target !== 'models') context.url.pathname = SIWC_RESPONSES_PATH;\n setSiwcHeaders(context, target);\n this.requests.set(context.requestId, Object.freeze({\n // SIWC Responses can return a valid SSE body without Content-Type.\n // The protocol parser still requires valid events and a terminal response.\n target, stream, includeUsage, siwc: true, allowMissingContentType: target !== 'models',\n adaptedResponses: new WeakSet<Response>(),\n }));\n return context;\n }\n if (context.method.toUpperCase() === 'POST' && context.url.pathname === SEARCH_PATH) {\n context.url.pathname = CODEX_SEARCH_PATH;\n return context;\n }\n if (context.url.pathname === CODEX_RESPONSES_PATH) {\n setCodexRoutingHint(context.headers, context.body);\n enforceCodexResponsesLite(context);\n return context;\n }\n if (target === undefined) return context;\n if (target === 'models') {\n context.body = undefined;\n context.url.pathname = CODEX_MODELS_PATH;\n context.url.search = `?client_version=${encodeURIComponent(CODEX_COMPATIBILITY_VERSION)}`;\n setHeader(context.headers, 'Accept', 'application/json');\n setHeader(context.headers, 'User-Agent', CODEX_MODELS_USER_AGENT);\n setHeader(context.headers, 'Originator', CODEX_MODELS_ORIGINATOR);\n this.requests.set(context.requestId, Object.freeze({\n target, stream: false, includeUsage: false, allowMissingContentType: false,\n preserveModels: context.originalUrl.searchParams.has('client_version'),\n adaptedResponses: new WeakSet<Response>(),\n }));\n return context;\n }\n const input = record(context.body);\n const stream = input.stream === true;\n const includeUsage = streamIncludesUsage(input);\n const promptCacheKey = validHeaderValue(input.prompt_cache_key) ? input.prompt_cache_key : undefined;\n const inboundSessionId = headerValue(context.headers, 'Session-Id');\n const sessionId = inboundSessionId ?? promptCacheKey;\n context.body = target === 'chat'\n ? convertChatCompletionsRequestToCodex(input)\n : normalizeCodexResponsesRequest(input);\n if (target === 'chat' && promptCacheKey !== undefined) context.body.prompt_cache_key = promptCacheKey;\n context.url.pathname = CODEX_RESPONSES_PATH;\n enforceCodexResponsesLite(context);\n setHeader(context.headers, 'Accept', 'text/event-stream');\n setHeader(context.headers, 'Content-Type', 'application/json');\n setHeader(context.headers, 'User-Agent', CODEX_RESPONSES_USER_AGENT);\n setHeader(context.headers, 'Originator', CODEX_RESPONSES_ORIGINATOR);\n setCodexRoutingHint(context.headers, context.body);\n for (const key of Object.keys(context.headers)) {\n if (key.toLowerCase() === 'session-id') delete context.headers[key];\n }\n if (sessionId !== undefined) setHeader(context.headers, 'Session-Id', sessionId);\n this.requests.set(context.requestId, Object.freeze({\n target,\n stream,\n includeUsage,\n allowMissingContentType: context.url.origin === CHATGPT_ORIGIN\n && context.url.pathname === CODEX_RESPONSES_PATH,\n adaptedResponses: new WeakSet<Response>(),\n }));\n return context;\n }\n\n reconcileOutboundRequest(context: MutableRequestContext): MutableRequestContext {\n if (context.url.origin === SIWC_ORIGIN) {\n if (context.url.pathname === SIWC_RESPONSES_PATH) {\n context.body = normalizeSiwcRequest(record(context.body), 'responses');\n setSiwcHeaders(context, 'responses');\n } else if (context.url.pathname === MODELS_PATH) setSiwcHeaders(context, 'models');\n return context;\n }\n if (context.url.pathname === CODEX_RESPONSES_PATH) {\n setCodexRoutingHint(context.headers, context.body);\n enforceCodexResponsesLite(context);\n }\n return context;\n }\n\n async rawResponse(result: RawResponseResult, context: RawResponseContext): Promise<RawResponseResult> {\n if (convertedCompletions.has(result.completion)) {\n const pending = this.requests.get(context.requestId);\n const cleanup = () => {\n if (this.requests.get(context.requestId) === pending) this.requests.delete(context.requestId);\n };\n void result.completion.then(cleanup, cleanup);\n return result;\n }\n if (this.nativeResponses.has(result.response)) return result;\n const upstreamUrl = context.upstreamUrl ? new URL(context.upstreamUrl) : undefined;\n const current: AdaptedRequest | undefined = this.requests.get(context.requestId) ?? (upstreamUrl?.origin === CHATGPT_ORIGIN\n && upstreamUrl.pathname === CODEX_RESPONSES_PATH && context.method.toUpperCase() === 'POST'\n ? Object.freeze({ target: 'responses' as const, stream: true, includeUsage: false,\n allowMissingContentType: true, native: true, adaptedResponses: new WeakSet<Response>() }) : undefined);\n if (current === undefined || current.adaptedResponses.has(result.response)) return result;\n current.adaptedResponses.add(result.response);\n if (current.native) this.nativeResponses.add(result.response);\n const state = current.attemptId === undefined\n ? Object.freeze({ ...current, attemptId: context.attemptId })\n : current;\n if (state !== current && this.requests.get(context.requestId) === current) this.requests.set(context.requestId, state);\n const cleanup = () => { if (this.requests.get(context.requestId) === state) this.requests.delete(context.requestId); };\n const trackCompletion = (completion: Promise<RawResponseCompletion>) => {\n if (!state.native) convertedCompletions.add(completion);\n void completion.then(cleanup, cleanup);\n };\n const mark = (response: Response): Response => {\n current.adaptedResponses.add(response);\n if (current.native) this.nativeResponses.add(response);\n return response;\n };\n const errorResponse = (status: number, completion: Promise<RawResponseCompletion>, error?: RawResponseError): RawResponseResult => {\n const response = mark(new Response(JSON.stringify({ error: errorBody(error) }), {\n status,\n statusText: result.response.statusText,\n headers: responseHeaders(result.response, 'application/json; charset=utf-8'),\n }));\n trackCompletion(completion);\n return { response, completion };\n };\n\n if (state.native && !result.response.ok) {\n // Native clients consume provider-specific quota/error fields and headers.\n // HTTP failure handling remains with the host; only successful SSE needs terminal proof.\n void result.completion.then(cleanup, cleanup);\n return result;\n }\n\n // The host owns wire reading, decompression, framing and JSON caching.\n // Adaptation requires that explicit shared view; there is no private reader fallback.\n if (!context.bodyHandle) {\n return errorResponse(502, Promise.resolve({ status: 'failed', code: 'body_view_missing' }));\n }\n\n if (!result.response.ok) {\n const failure = await readHttpError(context);\n return errorResponse(result.response.status, joinCompletion(result.completion, Promise.resolve(failure), context.signal), 'error' in failure ? failure.error : undefined);\n }\n\n if (state.target === 'models') {\n if (!isJsonContentType(result.response)) {\n const bodyCompletion = discardBody(context.bodyHandle, context.signal).then((outcome): RawResponseCompletion =>\n outcome.status === 'completed' ? { status: 'failed', code: 'invalid_content_type' } : outcome);\n return errorResponse(502, joinCompletion(result.completion, bodyCompletion, context.signal));\n }\n if (!result.response.body) {\n return errorResponse(502, joinCompletion(result.completion, Promise.resolve({ status: 'failed', code: 'invalid_response' }), context.signal));\n }\n try {\n const payload = await context.bodyHandle.json(bodyConsumer(context.signal));\n const models = state.preserveModels ? [] : state.siwc ? parseSiwcModelsBody(payload) : parseCodexModelsPayload(payload);\n if (state.preserveModels && (!payload || typeof payload !== 'object' || !Array.isArray((payload as JsonObject).models))) throw new CodexModelsError('invalid_structure');\n const body = state.preserveModels ? payload : {\n object: 'list',\n data: models.map(({ id }) => ({ id, object: 'model', owned_by: 'openai' })),\n };\n const completion = joinCompletion(result.completion, Promise.resolve({ status: 'completed' as const }), context.signal);\n const response = mark(new Response(JSON.stringify(body), {\n status: result.response.status,\n statusText: result.response.statusText,\n headers: responseHeaders(result.response, 'application/json; charset=utf-8'),\n }));\n trackCompletion(completion);\n return { response, completion };\n } catch (error) {\n const failure = completionFromError(error, context.redactDiagnostic);\n return errorResponse(502, joinCompletion(result.completion, Promise.resolve(failure), context.signal), 'error' in failure ? failure.error : undefined);\n }\n }\n\n const contentType = result.response.headers.get('content-type');\n const media = contentType?.split(';', 1)[0].trim().toLowerCase();\n const hasEventStream = media === 'text/event-stream' || (state.native === true && media === 'application/octet-stream');\n const allowMissingContentType = state.allowMissingContentType && contentType === null;\n if ((!hasEventStream && !allowMissingContentType) || !result.response.body) {\n const bodyCompletion = !hasEventStream && !allowMissingContentType\n ? discardBody(context.bodyHandle, context.signal).then((outcome): RawResponseCompletion =>\n outcome.status === 'completed' ? { status: 'failed', code: 'invalid_content_type' } : outcome)\n : Promise.resolve({ status: 'failed' as const, code: 'invalid_response' });\n return errorResponse(502, joinCompletion(result.completion, bodyCompletion, context.signal));\n }\n if (state.stream) {\n const converted = protocolStreamBody(context.bodyHandle, state.target, state.includeUsage, context.signal, context.redactDiagnostic, state.siwc, state.native);\n // A validated terminal is proof before transport EOF. An already failed\n // upstream must still settle even if its body never reaches a terminal.\n const streamCompletion = Promise.race([\n converted.completion,\n result.completion.then(upstream => upstream.status === 'failed' ? upstream : converted.completion,\n () => ({ status: 'failed' as const, code: 'upstream_completion' })),\n ]);\n trackCompletion(streamCompletion);\n return {\n response: mark(new Response(converted.body, { status: result.response.status, statusText: result.response.statusText,\n headers: state.native ? nativeResponseHeaders(result.response) : responseHeaders(result.response, 'text/event-stream') })),\n completion: streamCompletion,\n };\n }\n try {\n const stateResult = await consumeCodexResponse(context.bodyHandle.events(bodyConsumer(context.signal)), {\n signal: context.signal,\n request: { stream_options: { include_usage: state.includeUsage } },\n target: state.target,\n redactDiagnostic: context.redactDiagnostic,\n });\n const body = state.target === 'chat' ? responsesToChatCompletion(stateResult.response, state.siwc) : stateResult.response;\n const protocolCompletion: Promise<RawResponseCompletion> = Promise.resolve(\n stateResult.terminal === 'completed' ? { status: 'completed' } : { status: 'incomplete', code: 'incomplete' },\n );\n const nonStreamCompletion = joinCompletion(result.completion, protocolCompletion, context.signal);\n trackCompletion(nonStreamCompletion);\n return { response: mark(new Response(JSON.stringify(body), { status: result.response.status, statusText: result.response.statusText, headers: responseHeaders(result.response, 'application/json; charset=utf-8') })), completion: nonStreamCompletion };\n } catch (error) {\n const failure = completionFromError(error, context.redactDiagnostic);\n const failedCompletion = joinCompletion(result.completion, Promise.resolve(failure), context.signal);\n return errorResponse(502, failedCompletion, 'error' in failure ? failure.error : undefined);\n }\n }\n\n}\n",
|
|
25
25
|
"import { businessRpc } from './rpc';\nimport type { Plugin } from '@jeffusion/bungee-core/plugin';\nimport type { PluginHooks, RawResponseContext } from '@jeffusion/bungee-core/plugin';\nimport { definePlugin } from '@jeffusion/bungee-core/plugin';\nimport { ChatgptOauthAdapter, assertResponsesEntryPath, isResponsesRequest } from './adapter';\n\nfunction validAccountRef(value: unknown): value is string {\n return typeof value === 'string'\n && value.length >= 1\n && value.length <= 128\n && value.trim() === value;\n}\n\nexport const ChatgptOauthPlugin = definePlugin(\n class implements Plugin {\n static readonly controlRpcContract = businessRpc;\n static readonly name = 'chatgpt-oauth';\n static readonly version = '1.0.0';\n\n private readonly adapter: ChatgptOauthAdapter;\n\n constructor(config: Record<string, unknown> = {}) {\n if (config.accountRef !== undefined && !validAccountRef(config.accountRef)) {\n throw new Error('accountRef must be a trimmed non-empty string of at most 128 characters');\n }\n this.adapter = new ChatgptOauthAdapter();\n }\n\n bodyRequirements(context: import('@jeffusion/bungee-core/plugin').PluginBodyRequirementContext): import('@jeffusion/bungee-core/plugin').PluginBodyRequirements {\n const path = context.url.pathname;\n if (path === '/v1/models' && context.method.toUpperCase() === 'GET') return { request: 'none', response: ['json'] };\n return context.method.toUpperCase() === 'POST' && (isResponsesRequest(context.url) || ['/v1/chat/completions', '/backend-api/codex/responses'].includes(path)) ? { request: 'json-write', response: ['json', 'sse-json'] } : { request: 'none' };\n }\n\n register(hooks: PluginHooks): void {\n hooks.onWebSocketHandshake.tap('chatgpt-oauth', context => {\n assertResponsesEntryPath(context.url.pathname);\n if (context.url.origin === 'https://chatgpt.com' && isResponsesRequest(context.url))\n context.url.pathname = '/backend-api/codex/responses';\n else if (context.url.origin === 'https://api.openai.com' && isResponsesRequest(context.url))\n context.url.pathname = '/v1/responses';\n return context;\n });\n hooks.onBeforeRequest.tap(\n { name: 'chatgpt-oauth', stage: -10 },\n (context) => this.adapter.beforeRequest(context),\n );\n // Reconcile after the currently registered request-transform stages; higher stages/scopes may still run later.\n hooks.onBeforeRequest.tap(\n { name: 'chatgpt-oauth-outbound-reconciliation', stage: 1000 },\n (context) => this.adapter.reconcileOutboundRequest(context),\n );\n hooks.onRawResponse.tapPromise(\n { name: 'chatgpt-oauth', stage: -10 },\n (result, context: RawResponseContext) => this.adapter.rawResponse(result, context),\n );\n }\n },\n);\n\nexport default ChatgptOauthPlugin;\n"
|
|
26
26
|
],
|
|
27
|
-
"mappings": ";;AAOA,IAAM,UAAU,OAAO,IAAI,mCAAmC;AAI9D,SAAS,YAAY,CAAC,WAAoB,CAAC,GAAkB;AAAA,EAC3D,MAAM,SAAS,CAAC,UACd,CAAC,OAAyB,YAAqB;AAAA,IAC7C,MAAM,OAAQ,WAAuC;AAAA,IACrD,IAAI,MAAM;AAAA,MACR,IAAI,OAAO,UAAU;AAAA,QAAU,KAAK,OAAO,UAAU,KAAK;AAAA,MACrD;AAAA,aAAK,OAAO,KAAI,aAAa,MAAK,GAAG,OAAO;AAAA,IACnD,EAAO,SAAI,UAAU,WAAW,QAAQ,IAAI,cAAc,SAAS;AAAA,MACjE,MAAM,QAAQ,UAAU,UAAU,QAAQ,QAAQ,QAAQ;AAAA,MAC1D,MAAM,YAAY,OAAO,UAAU,WAAW,QAAQ,KAAK,OAAO,UAAU,WAAW,WAAW,KAAI,aAAa,MAAK,CAAC;AAAA,IAC3H;AAAA;AAAA,EAEJ,OAAO;AAAA,IAAC,MAAM,OAAO,MAAM;AAAA,IAAG,MAAM,OAAO,MAAM;AAAA,IAAG,OAAO,OAAO,OAAO;AAAA,IAAG,OAAO,OAAO,OAAO;AAAA,IAC/F,OAAO,OAAO,OAAO;AAAA,IAAG,OAAO,WAAS,aAAa,KAAI,aAAa,MAAK,CAAC;AAAA,EAAC;AAAA;AAE1E,IAAM,SAAS,aAAa;;;ACd5B,IAAM,2BAA2B,OAAO,0BAA0B;;AC+jClE,SAAS,YAA8B,CAC5C,QACe;AAAA,EACf,OAAO;AAAA;;AC1kCF,IAAM,sBAAqC,OAAO,OAAO,EAAC,QAAQ,aAAa,OAAO,IAAI,mBAAmB,EAAC,CAAC;;ACgCtH,IAAM,YAAY,OAAO;;ACZzB;;;ACTA;AAwGO,IAAM,qBAAqB,KAAK;AAEhC,IAAM,yBAAyB,MAAM;AAE5C,IAAM,iBAAiB;AACvB,IAAM,mBAAmB;AACzB,IAAM,qBAAqB;AAC3B,IAAM,kBAAkB;AACxB,IAAM,iBAAiB;AACvB,IAAM,kBAAkB;AACxB,IAAM,oBAAoB,IAAI,IAAoB,CAAC,aAAa,cAAc,cAAc,WAAW,SAAS,CAAC;AACjH,IAAM,4BAA4B,IAAI,IAA6B,CAAC,qBAAqB,qBAAqB,MAAM,CAAC;AACrH,IAAM,0BAA0B,IAAI,IAAI,CAAC,iBAAiB,qBAAqB,cAAc,gBAAgB,CAAC;AAC9G,IAAM,gBAAgB,CAAC,MAAM,WAAW,SAAS;AACjD,IAAM,cAAc;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAAA;AAKO,MAAM,yBAAyB,MAAM;AAAA,EAI/B;AAAA,EAHF,OAAO;AAAA,EAEhB,WAAW,CACA,MACT,SACA;AAAA,IACA,MAAM,OAAO;AAAA,IAHJ;AAAA;AAKb;AAGA,SAAS,QAAQ,CAAC,UAAyB;AAAA,EACzC,MAAM,IAAI,iBAAiB,gBAAgB,mBAAmB,UAAU;AAAA;AAG1E,SAAS,QAAQ,GAAU;AAAA,EACzB,MAAM,IAAI,iBAAiB,cAAc,+CAA+C;AAAA;AAG1F,SAAS,YAAY,CAAC,QAAuB;AAAA,EAC3C,MAAM,IAAI,iBAAiB,oBAAoB,qBAAqB,QAAQ;AAAA;AAG9E,SAAS,aAAa,CAAC,OAAkD;AAAA,EACvE,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK;AAAA,IAAG,OAAO;AAAA,EAChF,IAAI,QAAQ,KAAK;AAAA,IAAG,OAAO;AAAA,EAC3B,MAAM,YAAY,OAAO,eAAe,KAAK;AAAA,EAC7C,OAAO,cAAc,OAAO,aAAa,cAAc;AAAA;AAGzD,SAAS,qBAAqB,CAAC,OAAiC;AAAA,EAC9D,OAAO,OAAO,UAAU,YAAY,OAAO,cAAc,KAAK,KAAK,QAAQ;AAAA;AAG7E,SAAS,wBAAwB,CAAC,OAAiC;AAAA,EACjE,OAAO,OAAO,UAAU,YAAY,OAAO,cAAc,KAAK,KAAK,SAAS;AAAA;AAG9E,SAAS,gBAAgB,CAAC,OAAwB;AAAA,EAChD,SAAS,QAAQ,EAAG,QAAQ,MAAM,QAAQ,SAAS,GAAG;AAAA,IACpD,MAAM,OAAO,MAAM,WAAW,KAAK;AAAA,IACnC,IAAI,QAAQ,SAAU,QAAQ,OAAQ;AAAA,MACpC,IAAI,QAAQ,KAAK,MAAM;AAAA,QAAQ,OAAO;AAAA,MACtC,MAAM,OAAO,MAAM,WAAW,QAAQ,CAAC;AAAA,MACvC,IAAI,OAAO,SAAU,OAAO;AAAA,QAAQ,OAAO;AAAA,MAC3C,SAAS;AAAA,IACX,EAAO,SAAI,QAAQ,SAAU,QAAQ,OAAQ;AAAA,MAC3C,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,YAAY,CAAC,KAAa,QAAyB;AAAA,EAC1D,IAAI,CAAC,mBAAmB,KAAK,GAAG;AAAA,IAAG,OAAO;AAAA,EAC1C,MAAM,QAAQ,OAAO,GAAG;AAAA,EACxB,OAAO,OAAO,cAAc,KAAK,KAAK,SAAS,KAAK,QAAQ;AAAA;AAG9D,SAAS,eAAe,CAAC,OAAgC,SAA4B,UAAwB;AAAA,EAC3G,WAAW,OAAO,OAAO,KAAK,KAAK,GAAG;AAAA,IACpC,IAAI,CAAC,QAAQ,SAAS,GAAG;AAAA,MAAG,aAAa,WAAW,gBAAgB;AAAA,EACtE;AAAA;AAaF,SAAS,KAAK,CAAC,QAAwB,OAAqB;AAAA,EAC1D,OAAO,QAAQ;AAAA,EACf,IAAI,OAAO,OAAO;AAAA,IAAG,SAAS;AAAA;AAUhC,SAAS,QAAQ,CAAC,OAAgB,OAAe,WAAwB,QAAiC;AAAA,EACxG,IAAI,UAAU,MAAM;AAAA,IAClB,MAAM,QAAQ,CAAC;AAAA,IACf,OAAO;AAAA,EACT;AAAA,EACA,IAAI,OAAO,UAAU,WAAW;AAAA,IAC9B,MAAM,QAAQ,QAAQ,IAAI,CAAC;AAAA,IAC3B,OAAO;AAAA,EACT;AAAA,EACA,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,IAAI,iBAAiB,KAAK;AAAA,MAAG,SAAS,QAAQ;AAAA,IAC9C,MAAM,QAAQ,OAAO,WAAW,OAAO,MAAM,IAAI,CAAC;AAAA,IAClD,OAAO;AAAA,EACT;AAAA,EACA,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,IAAI,CAAC,OAAO,SAAS,KAAK;AAAA,MAAG,SAAS,QAAQ;AAAA,IAC9C,MAAM,QAAQ,CAAC;AAAA,IACf,OAAO;AAAA,EACT;AAAA,EACA,IAAI,OAAO,UAAU;AAAA,IAAU,SAAS,MAAM;AAAA,EAC9C,MAAM,SAAS;AAAA,EACf,IAAI,QAAQ,MAAM;AAAA,IAAG,SAAS,MAAM;AAAA,EACpC,IAAI,UAAU,IAAI,MAAM;AAAA,IAAG,SAAS,MAAM;AAAA,EAC1C,MAAM,YAAY,QAAQ;AAAA,EAC1B,IAAI,YAAY;AAAA,IAAgB,SAAS,MAAM;AAAA,EAC/C,IAAI,MAAM,QAAQ,MAAM,GAAG;AAAA,IACzB,IAAI,OAAO,eAAe,MAAM,MAAM,MAAM;AAAA,MAAW,SAAS,OAAO;AAAA,IACvE,MAAM,mBAAmB,OAAO,yBAAyB,QAAQ,QAAQ;AAAA,IACzE,IAAI,CAAC,oBAAoB,EAAE,WAAW,qBAAqB,OAAO,iBAAiB,UAAU,UAAU;AAAA,MACrG,SAAS,OAAO;AAAA,IAClB;AAAA,IACA,MAAM,SAAS,iBAAiB;AAAA,IAChC,IAAI,CAAC,OAAO,cAAc,MAAM,KAAK,SAAS;AAAA,MAAG,SAAS,OAAO;AAAA,IACjE,IAAI,SAAS,OAAO;AAAA,MAAM,SAAS;AAAA,IACnC,MAAM,QAAQ,CAAC;AAAA,IACf,IAAI,SAAS;AAAA,MAAG,MAAM,QAAQ,SAAS,CAAC;AAAA,IACxC,UAAU,IAAI,MAAM;AAAA,IACpB,MAAM,QAAmB,IAAI,MAAM,MAAM;AAAA,IACzC,IAAI,QAAQ;AAAA,IACZ,WAAW,OAAO,QAAQ,QAAQ,MAAM,GAAG;AAAA,MACzC,IAAI,QAAQ;AAAA,QAAU;AAAA,MACtB,IAAI,OAAO,QAAQ,YAAY,CAAC,aAAa,KAAK,MAAM;AAAA,QAAG,SAAS,OAAO;AAAA,MAC3E,MAAM,aAAa,OAAO,yBAAyB,QAAQ,GAAG;AAAA,MAC9D,IAAI,CAAC,cAAc,CAAC,WAAW,cAAc,EAAE,WAAW;AAAA,QAAa,SAAS,OAAO;AAAA,MACvF,MAAM,OAAO,GAAG,KAAK,SAAS,WAAW,OAAO,WAAW,WAAW,MAAM;AAAA,MAC5E,SAAS;AAAA,IACX;AAAA,IACA,IAAI,UAAU;AAAA,MAAQ,SAAS,OAAO;AAAA,IACtC,UAAU,OAAO,MAAM;AAAA,IACvB,OAAO;AAAA,EACT;AAAA,EACA,MAAM,YAAY,OAAO,eAAe,MAAM;AAAA,EAC9C,IAAI,cAAc,OAAO,aAAa,cAAc;AAAA,IAAM,SAAS,QAAQ;AAAA,EAC3E,MAAM,OAAO,QAAQ,QAAQ,MAAM;AAAA,EACnC,IAAI,KAAK,SAAS,OAAO;AAAA,IAAM,SAAS;AAAA,EACxC,MAAM,QAAQ,CAAC;AAAA,EACf,IAAI,KAAK,SAAS;AAAA,IAAG,MAAM,QAAQ,KAAK,SAAS,CAAC;AAAA,EAClD,UAAU,IAAI,MAAM;AAAA,EACpB,MAAM,SAAkC,CAAC;AAAA,EACzC,WAAW,OAAO,MAAM;AAAA,IACtB,IAAI,OAAO,QAAQ;AAAA,MAAU,SAAS,QAAQ;AAAA,IAC9C,IAAI,iBAAiB,GAAG;AAAA,MAAG,SAAS,QAAQ;AAAA,IAC5C,MAAM,aAAa,OAAO,yBAAyB,QAAQ,GAAG;AAAA,IAC9D,IAAI,CAAC,cAAc,CAAC,WAAW,cAAc,EAAE,WAAW;AAAA,MAAa,SAAS,QAAQ;AAAA,IACxF,MAAM,QAAQ,OAAO,WAAW,KAAK,MAAM,IAAI,CAAC;AAAA,IAEhD,OAAO,eAAe,QAAQ,KAAK;AAAA,MACjC,OAAO,SAAS,WAAW,OAAO,WAAW,WAAW,MAAM;AAAA,MAC9D,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,cAAc;AAAA,IAChB,CAAC;AAAA,EACH;AAAA,EACA,UAAU,OAAO,MAAM;AAAA,EACvB,OAAO;AAAA;AAIT,SAAS,iBAAiB,CAAC,OAAyB;AAAA,EAClD,IAAI;AAAA,IACF,MAAM,OAAO,SAAS,OAAO,GAAG,IAAI,KAAO,EAAE,MAAM,uBAAuB,CAAC;AAAA,IAC3E,IAAI,OAAO,WAAW,KAAK,UAAU,IAAI,GAAG,MAAM,IAAI;AAAA,MAAwB,aAAa,sCAAsC;AAAA,IACjI,OAAO;AAAA,IACP,OAAO,OAAO;AAAA,IACd,IAAI,iBAAiB,qBAAqB,MAAM,SAAS,kBAAkB,MAAM,SAAS,eAAe;AAAA,MACvG,aAAa,sCAAsC;AAAA,IACrD;AAAA,IACA,MAAM;AAAA;AAAA;AAiOV,SAAS,wBAAwB,CAAC,OAAgB,OAAmC;AAAA,EACnF,IAAI,UAAU;AAAA,IAAW;AAAA,EACzB,IAAI,CAAC,yBAAyB,KAAK;AAAA,IAAG,aAAa,GAAG,2CAA2C;AAAA,EACjG,OAAO;AAAA;AAGT,SAAS,mBAAmB,CAAC,OAAgB,OAAmC;AAAA,EAC9E,IAAI,UAAU;AAAA,IAAW;AAAA,EACzB,IAAI,OAAO,UAAU,YAAY,CAAC,OAAO,SAAS,KAAK;AAAA,IAAG,aAAa,GAAG,+BAA+B;AAAA,EACzG,OAAO;AAAA;AAGT,SAAS,WAAW,CAAC,OAAgB,OAAe,MAAyB;AAAA,EAC3E,IAAI,QAAQ;AAAA,IAAkB,aAAa,kCAAkC;AAAA,EAC7E,IAAI,CAAC,cAAc,KAAK;AAAA,IAAG,aAAa,+BAA+B;AAAA,EACvE,IAAI,KAAK,IAAI,KAAK;AAAA,IAAG,aAAa,gCAAgC;AAAA,EAClE,KAAK,IAAI,KAAK;AAAA,EACd,MAAM,OAAO,MAAM;AAAA,EACnB,IAAI,SAAS,UAAU;AAAA,IACrB,gBAAgB,OAAO,CAAC,QAAQ,aAAa,WAAW,GAAG,QAAQ;AAAA,IACnE,MAAM,MAAM,yBAAyB,MAAM,WAAW,WAAW;AAAA,IACjE,MAAM,MAAM,yBAAyB,MAAM,WAAW,WAAW;AAAA,IACjE,IAAI,QAAQ,aAAa,QAAQ,aAAa,MAAM;AAAA,MAAK,aAAa,4CAA4C;AAAA,EACpH,EAAO,SAAI,SAAS,UAAU;AAAA,IAC5B,gBAAgB,OAAO,CAAC,QAAQ,WAAW,WAAW,SAAS,GAAG,QAAQ;AAAA,IAC1E,IAAI,MAAM,YAAY,aAAa,OAAO,MAAM,YAAY;AAAA,MAAW,aAAa,qCAAqC;AAAA,IACzH,MAAM,MAAM,oBAAoB,MAAM,SAAS,SAAS;AAAA,IACxD,MAAM,MAAM,oBAAoB,MAAM,SAAS,SAAS;AAAA,IACxD,IAAI,QAAQ,aAAa,QAAQ,aAAa,MAAM;AAAA,MAAK,aAAa,wCAAwC;AAAA,EAChH,EAAO,SAAI,SAAS,WAAW;AAAA,IAC7B,gBAAgB,OAAO,CAAC,MAAM,GAAG,QAAQ;AAAA,EAC3C,EAAO,SAAI,SAAS,QAAQ;AAAA,IAC1B,gBAAgB,OAAO,CAAC,MAAM,GAAG,QAAQ;AAAA,EAC3C,EAAO,SAAI,SAAS,WAAW;AAAA,IAC7B,gBAAgB,OAAO,CAAC,QAAQ,OAAO,GAAG,QAAQ;AAAA,IAClD,IAAI,CAAC,OAAO,UAAU,eAAe,KAAK,OAAO,OAAO;AAAA,MAAG,aAAa,iCAAiC;AAAA,IACzG,IAAI;AAAA,MACF,SAAS,MAAM,OAAO,GAAG,IAAI,KAAO,EAAE,MAAM,SAAS,CAAC;AAAA,MACtD,OAAO,OAAO;AAAA,MACd,IAAI,iBAAiB,oBAAoB,MAAM,SAAS,gBAAgB;AAAA,QACtE,aAAa,iCAAiC;AAAA,MAChD;AAAA,MACA,MAAM;AAAA;AAAA,EAEV,EAAO,SAAI,SAAS,SAAS;AAAA,IAC3B,gBAAgB,OAAO,CAAC,QAAQ,SAAS,UAAU,GAAG,QAAQ;AAAA,IAC9D,IAAI,CAAC,OAAO,UAAU,eAAe,KAAK,OAAO,OAAO;AAAA,MAAG,aAAa,6BAA6B;AAAA,IACrG,YAAY,MAAM,OAAO,QAAQ,GAAG,IAAI;AAAA,IACxC,yBAAyB,MAAM,UAAU,UAAU;AAAA,EACrD,EAAO,SAAI,SAAS,UAAU;AAAA,IAC5B,gBAAgB,OAAO,CAAC,QAAQ,cAAc,UAAU,GAAG,QAAQ;AAAA,IACnE,MAAM,aAAa,MAAM;AAAA,IACzB,IAAI,CAAC,cAAc,UAAU;AAAA,MAAG,aAAa,4CAA4C;AAAA,IACzF,WAAW,OAAO,OAAO,KAAK,UAAU;AAAA,MAAG,YAAY,WAAW,MAAM,QAAQ,GAAG,IAAI;AAAA,IACvF,MAAM,WAAW,MAAM;AAAA,IACvB,IAAI,aAAa,WAAW;AAAA,MAC1B,IAAI,CAAC,MAAM,QAAQ,QAAQ;AAAA,QAAG,aAAa,iDAAiD;AAAA,MAC5F,MAAM,QAAQ,IAAI;AAAA,MAClB,WAAW,QAAQ,UAAU;AAAA,QAC3B,IAAI,OAAO,SAAS;AAAA,UAAU,aAAa,yCAAyC;AAAA,QACpF,IAAI,MAAM,IAAI,IAAI;AAAA,UAAG,aAAa,wCAAwC;AAAA,QAC1E,MAAM,IAAI,IAAI;AAAA,QACd,IAAI,CAAC,OAAO,UAAU,eAAe,KAAK,YAAY,IAAI,GAAG;AAAA,UAC3D,aAAa,gDAAgD;AAAA,QAC/D;AAAA,MACF;AAAA,IACF;AAAA,EACF,EAAO,SAAI,SAAS,UAAU;AAAA,IAC5B,gBAAgB,OAAO,CAAC,QAAQ,UAAU,YAAY,GAAG,QAAQ;AAAA,IACjE,IAAI,CAAC,OAAO,UAAU,eAAe,KAAK,OAAO,QAAQ;AAAA,MAAG,aAAa,+BAA+B;AAAA,IACxG,YAAY,MAAM,QAAQ,QAAQ,GAAG,IAAI;AAAA,IACzC,yBAAyB,MAAM,YAAY,YAAY;AAAA,EACzD,EAAO,SAAI,SAAS,SAAS;AAAA,IAC3B,gBAAgB,OAAO,CAAC,QAAQ,UAAU,GAAG,QAAQ;AAAA,IACrD,MAAM,WAAW,MAAM;AAAA,IACvB,IAAI,CAAC,MAAM,QAAQ,QAAQ,KAAK,SAAS,WAAW,GAAG;AAAA,MACrD,aAAa,kDAAkD;AAAA,IACjE;AAAA,IACA,WAAW,WAAW;AAAA,MAAU,YAAY,SAAS,QAAQ,GAAG,IAAI;AAAA,EACtE,EAAO,SAAI,SAAS,QAAQ;AAAA,IAC1B,gBAAgB,OAAO,CAAC,QAAQ,UAAU,GAAG,QAAQ;AAAA,IACrD,IAAI,MAAM,aAAa,aAAa,CAAC,sBAAsB,MAAM,QAAQ,GAAG;AAAA,MAC1E,aAAa,sDAAsD;AAAA,IACrE;AAAA,EACF,EAAO;AAAA,IACL,aAAa,qBAAqB;AAAA;AAAA,EAEpC,KAAK,OAAO,KAAK;AAAA;AAiHnB,SAAS,cAAc,CAAC,OAAgB,OAAmC;AAAA,EACzE,IAAI,UAAU;AAAA,IAAW;AAAA,EACzB,IAAI,CAAC,sBAAsB,KAAK,KAAK,QAAQ,oBAAoB;AAAA,IAC/D,aAAa,GAAG,kEAAkE;AAAA,EACpF;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,kBAAkB,CAAC,QAAiC,gBAA8B;AAAA,EACzF,MAAM,OAAO,OAAO,KAAK,MAAM;AAAA,EAC/B,IAAI,KAAK,WAAW,wBAAwB,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC,wBAAwB,IAAI,GAAG,CAAC,GAAG;AAAA,IACzG,aAAa,iCAAiC;AAAA,EAChD;AAAA,EACA,MAAM,gBAAgB,OAAO;AAAA,EAC7B,IAAI,OAAO,kBAAkB,YAAY,CAAC,0BAA0B,IAAI,aAAwC,GAAG;AAAA,IACjH,aAAa,+BAA+B;AAAA,EAC9C;AAAA,EACA,MAAM,YAAY,OAAO;AAAA,EACzB,IAAI,cAAc,QAAQ,CAAC,sBAAsB,SAAS,GAAG;AAAA,IAC3D,aAAa,sDAAsD;AAAA,EACrE;AAAA,EACA,MAAM,iBAAiB,OAAO;AAAA,EAC9B,IAAI,CAAC,sBAAsB,cAAc;AAAA,IAAG,aAAa,gDAAgD;AAAA,EACzG,IAAI,iBAAiB;AAAA,IAAgB,aAAa,+CAA+C;AAAA,EACjG,MAAM,aAAa,OAAO;AAAA,EAC1B,IAAI,CAAC,sBAAsB,UAAU;AAAA,IAAG,aAAa,4CAA4C;AAAA,EACjG,IAAI,aAAa;AAAA,IAAgB,aAAa,gDAAgD;AAAA;AAGhG,SAAS,WAAW,CAAC,YAA2C;AAAA,EAC9D,gBAAgB,YAAY,aAAa,QAAQ;AAAA,EACjD,MAAM,OAAO,WAAW;AAAA,EACxB,IAAI,SAAS,WAAW,SAAS;AAAA,IAAW,aAAa,sCAAsC;AAAA,EAC/F,YAAY,WAAW,OAAO,GAAG,IAAI,GAAK;AAAA,EAC1C,YAAY,WAAW,QAAQ,GAAG,IAAI,GAAK;AAAA,EAC3C,MAAM,WAAW,WAAW;AAAA,EAC5B,IAAI,CAAC,MAAM,QAAQ,QAAQ,KAAK,SAAS,WAAW;AAAA,IAAG,aAAa,oCAAoC;AAAA,EACxG,MAAM,eAAe,IAAI;AAAA,EACzB,WAAW,WAAW,UAAU;AAAA,IAC9B,IAAI,OAAO,YAAY,YAAY,CAAC,kBAAkB,IAAI,OAAyB;AAAA,MAAG,aAAa,iBAAiB;AAAA,IACpH,IAAI,aAAa,IAAI,OAAO;AAAA,MAAG,aAAa,yBAAyB;AAAA,IACrE,aAAa,IAAI,OAAO;AAAA,EAC1B;AAAA,EACA,IAAI,WAAW,cAAc,WAAW;AAAA,IACtC,IAAI,CAAC,sBAAsB,WAAW,SAAS,KAAK,WAAW,YAAY,oBAAoB;AAAA,MAC7F,aAAa,uEAAuE;AAAA,IACtF;AAAA,EACF;AAAA,EACA,eAAe,WAAW,eAAe,eAAe;AAAA,EACxD,MAAM,iBAAiB,eAAe,WAAW,gBAAgB,gBAAgB;AAAA,EACjF,MAAM,UAAU,WAAW;AAAA,EAC3B,IAAI,SAAS,WAAW;AAAA,IACtB,IAAI,CAAC,cAAc,OAAO;AAAA,MAAG,aAAa,oDAAoD;AAAA,IAC9F,mBAAmB,SAAS,kBAAkB,kBAAkB;AAAA,EAClE,EAAO,SAAI,YAAY,WAAW;AAAA,IAChC,aAAa,iDAAiD;AAAA,EAChE;AAAA;AAGF,SAAS,aAAa,CAAC,UAAyB;AAAA,EAC9C,IAAI,CAAC,cAAc,QAAQ;AAAA,IAAG,aAAa,iCAAiC;AAAA,EAC5E,gBAAgB,UAAU,eAAe,UAAU;AAAA,EACnD,IAAI,OAAO,SAAS,OAAO,YAAY,CAAC,eAAe,KAAK,SAAS,EAAE;AAAA,IAAG,aAAa,oBAAoB;AAAA,EAC3G,IAAI,CAAC,sBAAsB,SAAS,OAAO;AAAA,IAAG,aAAa,iDAAiD;AAAA,EAC5G,MAAM,UAAU,SAAS;AAAA,EACzB,IAAI,CAAC,cAAc,OAAO;AAAA,IAAG,aAAa,gCAAgC;AAAA,EAC1E,MAAM,QAAQ,OAAO,KAAK,OAAO;AAAA,EACjC,IAAI,MAAM,WAAW;AAAA,IAAG,aAAa,0CAA0C;AAAA,EAC/E,IAAI,MAAM,SAAS;AAAA,IAAiB,aAAa,mCAAmC;AAAA,EACpF,WAAW,QAAQ,OAAO;AAAA,IACxB,IAAI,CAAC,gBAAgB,KAAK,IAAI;AAAA,MAAG,aAAa,qBAAqB;AAAA,IACnE,MAAM,aAAa,QAAQ;AAAA,IAC3B,IAAI,CAAC,cAAc,UAAU;AAAA,MAAG,aAAa,0CAA0C;AAAA,IACvF,YAAY,UAAU;AAAA,EACxB;AAAA;AAGF,SAAS,UAAU,CAAC,OAAyB;AAAA,EAC3C,IAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,IACxB,WAAW,QAAQ;AAAA,MAAO,WAAW,IAAI;AAAA,IACzC,OAAO,OAAO,OAAO,KAAK;AAAA,EAC5B;AAAA,EACA,IAAI,cAAc,KAAK,GAAG;AAAA,IACxB,WAAW,OAAO,OAAO,KAAK,KAAK;AAAA,MAAG,WAAW,MAAM,IAAI;AAAA,IAC3D,OAAO,OAAO,OAAO,KAAK;AAAA,EAC5B;AAAA,EACA,OAAO;AAAA;AAQF,SAAS,gBAAqE,CAAC,UAI5D;AAAA,EACxB,MAAM,OAAO,kBAAkB,QAAQ;AAAA,EACvC,cAAc,IAAI;AAAA,EAClB,OAAO,WAAW,IAAI;AAAA;;;ACryBxB,IAAM,YAAY,IAAI,IAAY,CAAC,WAAW,UAAU,SAAS,CAAC;AAClE,IAAM,SAAS,IAAI,IAAY,CAAC,UAAU,SAAS,CAAC;AACpD,IAAM,WAAW,IAAI,IAAY,CAAC,aAAa,cAAc,cAAc,WAAW,SAAS,CAAC;AAqQhG,IAAM,YAAY,IAAI;AAEtB,IAAM,UAAU,IAAI;;;AFnOpB,IAAM,yBAA8D;AAAA,EAClE,cAAc;AAAA,EACd,WAAW;AAAA,EACX,SAAS;AAAA,EACT,SAAS;AAAA,EACT,oBAAoB;AAAA,EACpB,eAAe;AAAA,EACf,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,sBAAsB;AAAA,EACtB,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,SAAS;AAAA,EACT,SAAS;AAAA,EACT,wBAAwB;AAAA,EACxB,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU;AAAA,EACV,SAAS;AAAA,EACT,iBAAiB;AAAA,EACjB,UAAU;AAAA,EACV,qBAAqB;AAAA,EACrB,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,qBAAqB;AAAA,EACrB,sBAAsB;AACxB;AAEA,IAAM,sBAAsB,IAAI,IAAyB,OAAO,KAAK,sBAAsB,CAA0B;AAqSrH,IAAM,gBAAgC,OAAO,OAAO,CAAC,CAAC;AAWtD,IAAM,cAAc,IAAI;AA8CxB,IAAM,cAAc,IAAI;;AGhbjB,IAAM,4BAA4B,IAAI;AAEtC,IAAM,2BAA2B,KAAK;AAEtC,IAAM,0BAA0B,KAAK;AAiDrC,IAAM,uBAAqD,OAAO,OAAO,CAAC,SAAS,YAAY,QAAQ,CAAC;AA4F/G,IAAM,cAAc,IAAI,IAA4B;AAAA,EAClD;AAAA,EAAe;AAAA,EAAa;AAAA,EAAgB;AAAA,EAAW;AAAA,EAAc;AAAA,EACrE;AAAA,EAAY;AAAA,EAAO;AAAA,EAAa;AAAA,EAAY;AAAA,EAAa;AAAA,EAAU;AAAA,EAAW;AAChF,CAAC;AAuCD,IAAM,qBAAoB,IAAI,IAAoB,CAAC,aAAa,cAAc,cAAc,WAAW,SAAS,CAAC;;;ACtI1G,IAAM,oCAAoC,IAAI;AAE9C,IAAM,iCAAiC,KAAK;AAE5C,IAAM,iCAAiC,KAAK,OAAO;AAEnD,IAAM,kCAAkC,IAAI;AAG5C,IAAM,sCAAsC,IAAI;AAchD,IAAM,6BAA6B,KAAK,OAAO;AAQ/C,IAAM,kCAAkC,KAAK;AAGpD,IAAM,QAAQ,IAAI,WAAW,CAAC;AAqgB9B,IAAM,uBAAuB,IAAI;;;AC1lBjC,IAAM,sBAAsB,KAAK;AAQjC,IAAM,uBAAuB,IAAI;;;AClBjC,IAAM,gBAAgB,IAAI,IAAI,CAAC,UAAU,YAAY,QAAQ,CAAC;;ACrB9D,IAAM,mBAAiB,OAAO,IAAI,wCAAwC;;ACC1E,IAAM,OAAO;AACN,IAAM,2BAA2B,KAAK,KAAK;;ACDlD,IAAM,UAAU,EAAE,eAAe,QAAQ,mBAAmB,MAAM,YAAY,OAAO,gBAAgB,MAAM;AACpG,IAAM,cAAc,iBAAiB,EAAC,IAAI,gCAAgC,SAAS,GAAG,SAAS;AAAA,EACpG,eAAe,EAAC,MAAM,WAAW,OAAO,EAAC,MAAM,UAAU,YAAY,CAAC,EAAC,GAAG,QAAQ,EAAC,MAAM,UAAU,YAAY,EAAC,SAAS,EAAC,MAAM,UAAU,SAAS,MAAM,SAAS,EAAC,GAAG,WAAW,EAAC,MAAM,SAAQ,GAAG,SAAS,EAAC,MAAM,UAAU,QAAQ,EAAC,MAAM,SAAQ,GAAG,YAAY,GAAE,EAAC,EAAC,GAAG,UAAU,CAAC,SAAS,GAAG,SAAS,WAAW,MAAK;AAAA,EAC1T,cAAc,EAAC,MAAM,WAAW,OAAO,EAAC,MAAM,UAAU,YAAY,EAAC,SAAS,EAAC,MAAM,UAAU,SAAS,MAAM,SAAS,EAAC,EAAC,EAAC,GAAG,QAAQ,EAAC,MAAM,UAAU,YAAY,EAAC,UAAU,EAAC,MAAM,UAAS,EAAC,EAAC,GAAG,UAAU,CAAC,SAAS,GAAG,SAAS,WAAW,MAAK;AACpP,EAAC,CAAC;;;ACJF,IAAM,oBAAoB;AAInB,SAAS,eAAe,CAC7B,OACA,QACA,UACA,QACkB;AAAA,EAClB,MAAM,SAAS,UAAU,QAAQ,OAAO,UAAU,WAAW,QAAmC,CAAC;AAAA,EACjG,MAAM,QAAQ,CAAC,UAA0B;AAAA,IAEvC,IAAI,OAAO,MAAM,MAAM,GAAG,KAAM;AAAA,IAChC,OAAO,SAAS,IAAI,KAAK;AAAA,IACzB,OAAO,KACJ,QAAQ,6BAA6B,mBAAmB,EACxD,QAAQ,8CAA8C,YAAY,EAClE,QAAQ,iHAAiH,cAAc,EACvI,QAAQ,qBAAqB,GAAG;AAAA,IACnC,OAAO,KAAK,MAAM,GAAG,iBAAiB,EAAE,KAAK;AAAA;AAAA,EAE/C,MAAM,aAAa,CAAC,UAAuC;AAAA,IACzD,IAAI,OAAO,UAAU;AAAA,MAAU;AAAA,IAC/B,MAAM,OAAO,MAAM,KAAK;AAAA,IACxB,OAAO,0BAA0B,KAAK,IAAI,IAAI,OAAO;AAAA;AAAA,EAEvD,MAAM,QAAQ,WAAW,eAAe,OAAO,UAAU,QAAQ,OAAO,OAAO,UAAU,WACrF,OAAO,QAAmC,CAAC;AAAA,EAC/C,MAAM,UAAU,MAAM;AAAA,IACpB,OAAO,OAAO,YAAY,WAAW,OAAO,UAAU;AAAA,IACtD,OAAO,MAAM,YAAY,WAAW,MAAM,UAAU;AAAA,EACtD,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA,EAC5B,MAAM,OAAO,WAAW,OAAO,QAAQ,MAAM,IAAI;AAAA,EACjD,MAAM,OAAO,WAAW,WAAW,cAAc,OAAO,QAAQ,OAAO,OAAO,OAAO,IAAI;AAAA,EACzF,OAAO,EAAE,QAAQ,SAAS,WAAW,aAAc,OAAO,EAAE,KAAK,IAAI,CAAC,MAAQ,OAAO,EAAE,KAAK,IAAI,CAAC,EAAG;AAAA;AAG/F,SAAS,uBAAuB,CAAC,OAAgB,UAAkB,QAAqC;AAAA,EAC7G,MAAM,SAAS,UAAU,QAAQ,OAAO,UAAU,WAAW,QAA+B,CAAC;AAAA,EAC7F,OAAO,gBAAgB,OAAO,UAAU,SAAS,OAAO,SAAS,QAAQ,YAAY,UAAU,MAAM;AAAA;;;AClChG,MAAM,2BAA2B,MAAM;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACT,WAAW,CAAC,MAAyB,SAAiB,QAAiB,YAA+B;AAAA,IACpG,MAAM,OAAO;AAAA,IACb,KAAK,OAAO;AAAA,IACZ,KAAK,OAAO;AAAA,IACZ,KAAK,SAAS;AAAA,IACd,KAAK,aAAa;AAAA;AAEtB;AAEA,IAAM,+BAA+B;AAAA,EACnC;AAAA,EAAqB;AAAA,EAAyB;AAAA,EAAe;AAAA,EAC7D;AAAA,EAAc;AAAA,EAAwB;AAAA,EAA0B;AAAA,EAAQ;AAC1E;AAEA,SAAS,KAAQ,CAAC,OAAa;AAAA,EAC7B,OAAO,gBAAgB,KAAK;AAAA;AAG9B,SAAS,mBAAmB,CAAC,MAAW,MAA+B;AAAA,EACrE,IAAI,CAAC,QAAQ,OAAO,SAAS;AAAA,IAAU;AAAA,EACvC,IAAI,KAAK,SAAS,UAAU,KAAK,SAAS,gBAAgB,KAAK,SAAS,eAAe;AAAA,IACrF,OAAO,EAAE,MAAM,SAAS,cAAc,gBAAgB,cAAc,MAAM,OAAO,KAAK,QAAQ,EAAE,EAAE;AAAA,EACpG;AAAA,EACA,KAAK,KAAK,SAAS,eAAe,KAAK,SAAS,kBAAkB,SAAS,QAAQ;AAAA,IACjF,MAAM,QAAQ,KAAK,SAAS,gBACxB,EAAE,KAAK,KAAK,WAAW,SAAS,KAAK,SAAS,QAAQ,KAAK,OAAO,IACjE,OAAO,KAAK,cAAc,WAAW,EAAE,KAAK,KAAK,UAAU,IAAI,KAAK,aAAa,CAAC;AAAA,IACvF,IAAI,MAAM,OAAO,MAAM;AAAA,MAAS,OAAO,EAAE,MAAM,kBAAmB,MAAM,MAAM,EAAE,WAAW,MAAM,IAAI,IAAI,CAAC,MAAQ,MAAM,UAAU,EAAE,SAAS,MAAM,QAAQ,IAAI,CAAC,MAAQ,MAAM,SAAS,EAAE,QAAQ,MAAM,OAAO,IAAI,CAAC,EAAG;AAAA,EACxN;AAAA,EACA,KAAK,KAAK,SAAS,UAAU,KAAK,SAAS,iBAAiB,SAAS,QAAQ;AAAA,IAC3E,MAAM,OAAO,KAAK,SAAS,eAAe,OAAO,KAAK;AAAA,IACtD,IAAI,KAAK,WAAW,KAAK,aAAa,KAAK;AAAA,MAAU,OAAO,EAAE,MAAM,iBAAiB,KAAK;AAAA,EAC5F;AAAA,EACA,IAAI,KAAK,SAAS,iBAAiB,SAAS,UAAU,KAAK,aAAa,MAAM;AAAA,IAC5E,OAAO,EAAE,MAAM,eAAe,MAAM,KAAK,YAAY,SAAU,KAAK,YAAY,SAAS,EAAE,QAAQ,KAAK,YAAY,OAAO,IAAI,CAAC,EAAG;AAAA,EACrI;AAAA,EACA,OAAO,EAAE,MAAM,cAAc,MAAM,OAAO,SAAS,WAAW,OAAO,KAAK,UAAU,IAAI,EAAE;AAAA;AAG5F,SAAS,sBAAsB,CAAC,SAAc,iBAAqC;AAAA,EACjF,MAAM,OAAO,QAAQ,SAAS,WAAW,cAAc,QAAQ;AAAA,EAC/D,MAAM,UAAU,QAAQ;AAAA,EACxB,MAAM,QAAe,CAAC;AAAA,EACtB,IAAI,OAAO,YAAY,YAAY,QAAQ,SAAS;AAAA,IAAG,MAAM,KAAK,EAAE,MAAM,SAAS,cAAc,gBAAgB,cAAc,MAAM,QAAQ,CAAC;AAAA,EACzI,SAAI,MAAM,QAAQ,OAAO,GAAG;AAAA,IAC/B,WAAW,QAAQ,SAAS;AAAA,MAC1B,MAAM,YAAY,oBAAoB,MAAM,IAAI;AAAA,MAChD,IAAI;AAAA,QAAW,MAAM,KAAK,SAAS;AAAA,IACrC;AAAA,EACF;AAAA,EACA,MAAM,QAAe,CAAC;AAAA,EACtB,IAAI,SAAS,eAAe,MAAM,SAAS;AAAA,IAAG,MAAM,KAAK,EAAE,MAAM,WAAW,MAAM,SAAS,MAAM,CAAC;AAAA,EAClG,IAAI,SAAS,eAAe,MAAM,QAAQ,QAAQ,UAAU,GAAG;AAAA,IAC7D,SAAS,IAAI,EAAG,IAAI,QAAQ,WAAW,QAAQ,KAAK;AAAA,MAClD,MAAM,OAAO,QAAQ,WAAW;AAAA,MAChC,IAAI,CAAC,QAAQ,OAAO,SAAS;AAAA,QAAU;AAAA,MACvC,MAAM,KAAK,KAAK,SAAS,WAAW,KAAK,UAAU,CAAC,IAAI,KAAK,YAAY,CAAC;AAAA,MAC1E,MAAM,OAAO,OAAO,GAAG,SAAS,WAAW,GAAG,OAAO;AAAA,MACrD,IAAI,CAAC;AAAA,QAAM;AAAA,MACX,sBAAsB,IAAI;AAAA,MAC1B,MAAM,SAAS,OAAO,KAAK,OAAO,YAAY,KAAK,KAAK,KAAK,KAAK;AAAA,MAClE,IAAI,KAAK,SAAS,YAAY,gBAAgB,IAAI,IAAI;AAAA,QAAG,MAAM,KAAK,EAAE,MAAM,uBAAwB,SAAS,EAAE,SAAS,OAAO,IAAI,CAAC,GAAI,MAAM,OAAO,OAAO,GAAG,SAAS,GAAG,aAAa,EAAE,EAAE,CAAC;AAAA,MACxL;AAAA,cAAM,KAAK,EAAE,MAAM,oBAAqB,SAAS,EAAE,SAAS,OAAO,IAAI,CAAC,GAAI,MAAM,WAAW,OAAO,GAAG,aAAa,EAAE,EAAE,CAAC;AAAA,IAChI;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,iBAAiB,CAAC,SAA8B;AAAA,EACvD,IAAI,OAAO,YAAY;AAAA,IAAU,OAAO;AAAA,EACxC,IAAI,MAAM,QAAQ,OAAO,GAAG;AAAA,IAC1B,MAAM,YAAY,IAAI,IAAI,CAAC,QAAQ,cAAc,eAAe,aAAa,eAAe,QAAQ,cAAc,aAAa,CAAC;AAAA,IAChI,MAAM,YAAY,QAAQ,IAAI,CAAC,SAAS,UAAU,IAAI,MAAM,IAAI,IAAI,oBAAoB,MAAM,MAAM,IAAI,SAAS;AAAA,IACjH,IAAI,UAAU,KAAK,CAAC,SAAS,SAAS,aAAa,SAAS,IAAI,GAAG;AAAA,MACjE,MAAM,IAAI,mBAAmB,oBAAoB,uDAAuD;AAAA,IAC1G;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,qBAAqB,CAAC,MAAuB;AAAA,EACpD,IAAI,OAAO,SAAS,YAAY,CAAC,QAAQ,KAAK,SAAS,MAAM,CAAC,mBAAmB,KAAK,IAAI,GAAG;AAAA,IAC3F,MAAM,IAAI,mBAAmB,oBAAoB,6EAA6E;AAAA,EAChI;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,oCAAoC,CAAC,OAAmB,QAAQ,OAAO,MAAM,SAAS,EAAE,GAAe;AAAA,EACrH,MAAM,MAAkB;AAAA,IACtB,cAAc;AAAA,IAAI,QAAQ;AAAA,IAAM,OAAO;AAAA,IAAO,qBAAqB;AAAA,IACnE,SAAS,CAAC,6BAA6B;AAAA,IAAG;AAAA,IAAO,OAAO,CAAC;AAAA,EAC3D;AAAA,EACA,MAAM,UAAU,IAAI;AAAA,EACpB,MAAM,kBAAkB,IAAI;AAAA,EAC5B,MAAM,cAAc,IAAI;AAAA,EACxB,IAAI,oBAAoB;AAAA,EACxB,MAAM,WAAW,MAAM,QAAQ,MAAM,QAAQ,IAAI,MAAM,WAAW,CAAC;AAAA,EACnE,WAAW,WAAW,UAAU;AAAA,IAC9B,WAAW,QAAQ,SAAS,SAAS,eAAe,MAAM,QAAQ,QAAQ,UAAU,IAAI,QAAQ,aAAa,CAAC,GAAG;AAAA,MAC/G,IAAI,OAAO,MAAM,OAAO,YAAY,CAAC,KAAK;AAAA,QAAI;AAAA,MAC9C,IAAI,gBAAgB,IAAI,KAAK,EAAE;AAAA,QAAG,MAAM,IAAI,mBAAmB,oBAAoB,gDAAgD;AAAA,MACnI,gBAAgB,IAAI,KAAK,EAAE;AAAA,IAC7B;AAAA,EACF;AAAA,EACA,MAAM,kBAAkB,IAAI,KAAa,MAAM,SAAS,CAAC,GAAG,OAAO,CAAC,SAAc,MAAM,SAAS,QAAQ,EAAE,IAAI,CAAC,SAAc,sBAAsB,KAAK,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC;AAAA,EACpL,WAAW,WAAW,UAAU;AAAA,IAC9B,IAAI,CAAC,WAAW,OAAO,YAAY;AAAA,MAAU;AAAA,IAC7C,IAAI,QAAQ,SAAS,QAAQ;AAAA,MAC3B,MAAM,kBAAkB,OAAO,QAAQ,gBAAgB,EAAE;AAAA,MACzD,IAAI,aAAa;AAAA,MACjB,IAAI,cAAc,QAAQ,IAAI,eAAe;AAAA,MAC7C,IAAI,CAAC,eAAe,CAAC,mBAAmB,QAAQ,SAAS,GAAG;AAAA,QAC1D,aAAa,QAAQ,KAAK,EAAE,KAAK,EAAE;AAAA,QACnC,cAAc,QAAQ,IAAI,UAAU;AAAA,MACtC;AAAA,MACA,IAAI,CAAC;AAAA,QAAa,MAAM,IAAI,mBAAmB,oBAAoB,4CAA4C;AAAA,MAC/G,IAAI,MAAM,KAAK,EAAE,MAAM,YAAY,SAAS,qBAAqB,4BAA4B,wBAAwB,SAAS,YAAY,SAAS,QAAQ,kBAAkB,QAAQ,OAAO,EAAE,CAAC;AAAA,MAC/L,QAAQ,OAAO,UAAU;AAAA,MACzB;AAAA,IACF;AAAA,IACA,IAAI,QAAQ,OAAO;AAAA,MAAG,MAAM,IAAI,mBAAmB,oBAAoB,4EAA4E;AAAA,IACnJ,MAAM,QAAQ,uBAAuB,SAAS,eAAe;AAAA,IAC7D,IAAI,MAAM,KAAK,GAAG,KAAK;AAAA,IACvB,WAAW,QAAQ,OAAO;AAAA,MACxB,IAAI,KAAK,SAAS,mBAAmB,KAAK,SAAS;AAAA,QAAoB;AAAA,MACvE,IAAI,CAAC,KAAK,SAAS;AAAA,QACjB;AAAA,UAAG,KAAK,UAAU,gBAAgB;AAAA,eAC3B,gBAAgB,IAAI,KAAK,OAAO,KAAK,YAAY,IAAI,KAAK,OAAO;AAAA,MAC1E,EAAO,SAAI,YAAY,IAAI,KAAK,OAAO,GAAG;AAAA,QACxC,MAAM,IAAI,mBAAmB,oBAAoB,gDAAgD;AAAA,MACnG;AAAA,MACA,YAAY,IAAI,KAAK,OAAO;AAAA,MAC5B,QAAQ,IAAI,KAAK,SAAS,IAAI;AAAA,IAChC;AAAA,EACF;AAAA,EACA,IAAI,MAAM,qBAAqB;AAAA,IAAW,IAAI,YAAY,EAAE,QAAQ,MAAM,iBAAiB;AAAA,EACtF;AAAA,QAAI,YAAY,EAAE,QAAQ,SAAS;AAAA,EACxC,IAAI,MAAM,QAAQ,MAAM,KAAK,GAAG;AAAA,IAC9B,IAAI,QAAQ,MAAM,MAAM,IAAI,CAAC,SAAc;AAAA,MACzC,IAAI,MAAM,SAAS;AAAA,QAAY,OAAO,EAAE,MAAM,YAAY,MAAM,sBAAsB,KAAK,UAAU,IAAI,GAAG,aAAa,KAAK,UAAU,eAAe,IAAI,YAAY,KAAK,UAAU,cAAc,EAAE,MAAM,UAAU,YAAY,CAAC,EAAE,GAAG,QAAQ,KAAK,UAAU,UAAU,MAAM;AAAA,MAC/Q,OAAO,MAAM,IAAI;AAAA,KAClB,EAAE,OAAO,CAAC,SAAc,SAAS,KAAK,SAAS,cAAc,KAAK,KAAK;AAAA,EAC1E;AAAA,EACA,IAAI,MAAM,gBAAgB,WAAW;AAAA,IACnC,IAAI,OAAO,MAAM,gBAAgB,YAAY,CAAC,QAAQ,QAAQ,UAAU,EAAE,SAAS,MAAM,WAAW;AAAA,MAAG,IAAI,cAAc,MAAM;AAAA,IAC1H,SAAI,MAAM,aAAa,SAAS;AAAA,MAAY,IAAI,cAAc,EAAE,MAAM,YAAY,MAAM,sBAAsB,MAAM,YAAY,UAAU,QAAQ,MAAM,YAAY,IAAI,EAAE;AAAA,IAC1K,SAAI,MAAM,aAAa,SAAS;AAAA,MAAU,IAAI,cAAc,EAAE,MAAM,UAAU,MAAM,sBAAsB,MAAM,YAAY,QAAQ,QAAQ,MAAM,YAAY,IAAI,EAAE;AAAA,IACpK;AAAA,YAAM,IAAI,mBAAmB,oBAAoB,gDAAgD;AAAA,EACxG;AAAA,EACA,IAAI,MAAM;AAAA,IAAM,IAAI,OAAO,MAAM,MAAM,IAAI;AAAA,EAC3C,IAAI,MAAM,iBAAiB,SAAS;AAAA,IAAe,MAAM,IAAI,mBAAmB,oBAAoB,8DAA8D;AAAA,EAClK,IAAI,MAAM,iBAAiB,SAAS,QAAQ;AAAA,IAC1C,IAAI,SAAS,CAAC;AAAA,IACd,IAAI,KAAK,SAAS,EAAE,MAAM,OAAO;AAAA,EACnC,EAAO,SAAI,MAAM,iBAAiB,SAAS,eAAe;AAAA,IACxD,IAAI,SAAS,CAAC;AAAA,IACd,IAAI,KAAK,SAAS,EAAE,MAAM,kBAAkB,MAAM,MAAM,gBAAgB,WAAW,EAAE;AAAA,EACvF;AAAA,EACA,IAAI,MAAM,iBAAiB;AAAA,IAAY,IAAI,eAAe,MAAM;AAAA,EAChE,IAAI,qBAAqB,KAAK;AAAA,IAAG,IAAI,kBAAkB,MAAM,MAAM,eAAe;AAAA,EAClF,OAAO,+BAA+B,GAAG;AAAA;AA0DpC,SAAS,oBAAoB,CAAC,OAAgB,SAA2C;AAAA,EAC9F,IAAI,OAAO,QAAQ,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,WAC7C,KAAK,YAAY,MAAM,4CAA4C,MAAM,KAAK,EAAE,YAAY,MAAM,MAAM;AAAA,IAAG,OAAO;AAAA,EACpH,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK;AAAA,IAAG,OAAO;AAAA,EAChF,MAAM,gBAAiB,MAAqB,iBAAiB;AAAA,EAC7D,OAAO,kBAAkB,QAAQ,OAAO,kBAAkB,YAAY,cAAc,KAAK,EAAE,YAAY,MAAM;AAAA;AAGxG,SAAS,8BAA8B,CAAC,OAA+B;AAAA,EAC5E,MAAM,MAAM,MAAM,KAAK;AAAA,EACvB,IAAI,IAAI,iBAAiB,aAAa,IAAI,iBAAiB;AAAA,IAAM,IAAI,eAAe;AAAA,EACpF,IAAI,IAAI,iBAAiB,SAAS;AAAA,IAAe,MAAM,IAAI,mBAAmB,oBAAoB,8DAA8D;AAAA,EAChK,IAAI,SAAS;AAAA,EACb,IAAI,QAAQ;AAAA,EACZ,IAAI,sBAAsB,qBAAqB,GAAG,IAAI,QAAQ;AAAA,EAC9D,IAAI,UAAU,CAAC,6BAA6B;AAAA,EAC5C,IAAI,OAAO,IAAI,UAAU;AAAA,IAAU,IAAI,QAAQ,CAAC,EAAE,MAAM,WAAW,MAAM,QAAQ,SAAS,CAAC,EAAE,MAAM,cAAc,MAAM,IAAI,MAAM,CAAC,EAAE,CAAC;AAAA,EACrI,IAAI,MAAM,QAAQ,IAAI,KAAK,GAAG;AAAA,IAC5B,WAAW,QAAQ,IAAI,OAAO;AAAA,MAC5B,KAAK,CAAC,MAAM,QAAQ,KAAK,SAAS,cAAc,KAAK,SAAS;AAAA,QAAU,KAAK,OAAO;AAAA,MACpF,IAAI,MAAM,QAAQ,MAAM,OAAO;AAAA,QAAG,KAAK,UAAU,KAAK,QAAQ,IAAI,CAAC,SAAc;AAAA,UAC/E,IAAI,MAAM,4BAA4B,WAAW;AAAA,YAC/C,MAAM,UAAU,KAAK,KAAK;AAAA,YAC1B,OAAO,QAAQ;AAAA,YACf,OAAO;AAAA,UACT;AAAA,UACA,OAAO;AAAA,SACR;AAAA,IACH;AAAA,EACF;AAAA,EACA,WAAW,SAAS;AAAA,IAA8B,OAAO,IAAI;AAAA,EAC7D,IAAI,IAAI,iBAAiB;AAAA,IAAY,OAAO,IAAI;AAAA,EAChD,MAAM,gBAAgB,CAAC,SAAmB;AAAA,IACxC,IAAI,MAAM,SAAS,wBAAwB,MAAM,SAAS;AAAA,MAAiC,OAAO,KAAK,MAAM,MAAM,aAAa;AAAA,IAChI,IAAI,MAAM,SAAS,cAAc,MAAM,SAAS;AAAA,MAAU,sBAAsB,KAAK,QAAQ,KAAK,UAAU,QAAQ,KAAK,QAAQ,IAAI;AAAA,IACrI,OAAO;AAAA;AAAA,EAET,IAAI,MAAM,QAAQ,IAAI,KAAK;AAAA,IAAG,IAAI,QAAQ,IAAI,MAAM,IAAI,aAAa;AAAA,EACrE,IAAI,IAAI,aAAa,SAAS,wBAAwB,IAAI,aAAa,SAAS;AAAA,IAAiC,IAAI,YAAY,OAAO;AAAA,EACxI,IAAI,IAAI,aAAa,SAAS,cAAc,IAAI,aAAa,SAAS;AAAA,IAAU,sBAAsB,IAAI,YAAY,QAAQ,IAAI,YAAY,UAAU,QAAQ,IAAI,YAAY,QAAQ,IAAI;AAAA,EAC5L,IAAI,MAAM,QAAQ,IAAI,aAAa,KAAK;AAAA,IAAG,IAAI,YAAY,QAAQ,IAAI,YAAY,MAAM,IAAI,aAAa;AAAA,EAC1G,OAAO;AAAA;AAcT,SAAS,aAAa,GAAuB;AAAA,EAC3C,OAAO,IAAI,mBAAmB,aAAa,yCAAyC;AAAA;AAQtF,gBAAuB,aAAa,CAAC,QAAmB,UAA2B,CAAC,GAAkC;AAAA,EACpH,MAAM,WAAW,OAAO,OAAO,eAAe;AAAA,EAC9C,IAAI,WAAW;AAAA,EACf,IAAI;AAAA,EACJ,MAAM,QAAQ,IAAI,QAAe,CAAC,GAAG,WAAW;AAAA,IAC9C,IAAI,CAAC,QAAQ;AAAA,MAAQ;AAAA,IACrB,gBAAgB,MAAM,OAAO,cAAc,CAAC;AAAA,IAC5C,QAAQ,OAAO,iBAAiB,SAAS,eAAe,EAAE,MAAM,KAAK,CAAC;AAAA,GACvE;AAAA,EACD,IAAI;AAAA,IACF,UAAS;AAAA,MACP,IAAI,QAAQ,QAAQ;AAAA,QAAS,MAAM,cAAc;AAAA,MACjD,MAAM,OAAO,OAAO,QAAQ,SAAS,QAAQ,KAAK,CAAC,SAAS,KAAK,GAAG,KAAK,CAAC,IAAI,SAAS,KAAK;AAAA,MAC5F,IAAI,KAAK,MAAM;AAAA,QAAE,WAAW;AAAA,QAAM;AAAA,MAAQ;AAAA,MAC1C,MAAM,QAAQ,KAAK;AAAA,MACnB,IAAI,MAAM,YAAY;AAAA,QAAO;AAAA,MAC7B,IAAI,MAAM;AAAA,QAAW,MAAM,IAAI,mBAAmB,eAAe,kDAAkD;AAAA,MACnH,IAAI,MAAM,KAAK,KAAK,MAAM,UAAU;AAAA,QAClC,MAAM,EAAE,MAAM,QAAQ,MAAM,CAAC,GAAG,IAAI,MAAM,IAAI,UAAU,MAAM;AAAA,QAC9D;AAAA,MACF;AAAA,MACA,MAAM,SAAS,MAAM;AAAA,MACrB,IAAI,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,MAAM;AAAA,QAAG,MAAM,IAAI,mBAAmB,eAAe,2CAA2C;AAAA,MAC3J,MAAM,SAAS;AAAA,MACf,IAAI,OAAO,OAAO,SAAS,YAAY,CAAC,OAAO;AAAA,QAAM,MAAM,IAAI,mBAAmB,eAAe,6BAA6B;AAAA,MAC9H,MAAM,EAAE,MAAM,OAAO,MAAM,MAAM,QAAQ,IAAI,MAAM,IAAI,UAAU,MAAM;AAAA,IACzE;AAAA,IACA,OAAO,OAAO;AAAA,IACd,IAAI,QAAQ,QAAQ,WAAY,OAA6B,SAAS;AAAA,MAA2B,MAAM,cAAc;AAAA,IACrH,MAAM,OAAQ,OAA6B;AAAA,IAC3C,IAAI,CAAC,4BAA4B,0BAA0B,wBAAwB,EAAE,SAAS,QAAQ,EAAE,GAAG;AAAA,MACzG,MAAM,IAAI,mBAAmB,cAAc,6CAA6C;AAAA,IAC1F;AAAA,IACA,MAAM;AAAA,YACN;AAAA,IACA,IAAI;AAAA,MAAe,QAAQ,QAAQ,oBAAoB,SAAS,aAAa;AAAA,IAC7E,IAAI,CAAC;AAAA,MAAe,QAAQ,QAAQ,SAAS,SAAS,CAAC,EAAE,MAAM,MAAG;AAAA,QAAG;AAAA,OAAS;AAAA;AAAA;AAclF,SAAS,YAAY,CAAC,OAAkB,OAAe,iBAA0B,qBAA0C;AAAA,EACzH,MAAM,SAAS,uBAAuB,MAAM,SAAS;AAAA,EACrD,OAAO;AAAA,IACL,OAAO,MAAM;AAAA,OACT,kBAAkB,EAAE,IAAI,MAAM,IAAI,MAAM,SAAS,WAAW,WAAW,IAAI,CAAC;AAAA,KAC/E,SAAS,WAAW,aAAa,KAAM,kBAAkB,EAAE,MAAM,MAAM,KAAK,IAAI,CAAC,IAAK,SAAS,UAAU,cAAc,MAAM;AAAA,EAChI;AAAA;AA2BK,SAAS,mBAAmB,CAAC,SAA8B;AAAA,EAChE,OAAO,SAAS,gBAAgB,kBAAkB;AAAA;AAGpD,SAAS,WAAW,CAAC,OAAkC;AAAA,EACrD,OAAO,MAAM;AAAA;AAGf,SAAS,SAAS,CAAC,UAAgC;AAAA,EACjD,OAAO,UAAU,QAAQ,MAAM,SAAS,KAAK,IAAI;AAAA;AAGnD,SAAS,oBAAoB,CAAC,OAAiB;AAAA,EAC7C,IAAI,CAAC;AAAA,IAAO;AAAA,EACZ,MAAM,SAAc,CAAC;AAAA,EACrB,IAAI,MAAM,iBAAiB;AAAA,IAAW,OAAO,gBAAgB,MAAM;AAAA,EACnE,IAAI,MAAM,kBAAkB;AAAA,IAAW,OAAO,oBAAoB,MAAM;AAAA,EACxE,IAAI,MAAM,iBAAiB;AAAA,IAAW,OAAO,eAAe,MAAM;AAAA,EAClE,IAAI,MAAM,sBAAsB;AAAA,IAC9B,OAAO,wBAAwB,CAAC;AAAA,IAChC,IAAI,MAAM,qBAAqB,kBAAkB;AAAA,MAAW,OAAO,sBAAsB,gBAAgB,MAAM,qBAAqB;AAAA,IACpI,IAAI,MAAM,qBAAqB,uBAAuB,WAAW;AAAA,MAC/D,OAAO,sBAAsB,qBAAqB,MAAM,qBAAqB;AAAA,MAC7E,OAAO,sBAAsB,yBAAyB,MAAM,qBAAqB;AAAA,IACnF;AAAA,EACF;AAAA,EACA,IAAI,MAAM,uBAAuB,qBAAqB,WAAW;AAAA,IAC/D,OAAO,4BAA4B,EAAE,kBAAkB,MAAM,sBAAsB,iBAAiB;AAAA,EACtG;AAAA,EACA,OAAO;AAAA;AAmBT,SAAS,YAAY,CAAC,MAAmB;AAAA,EACvC,IAAI,CAAC,MAAM,QAAQ,MAAM,OAAO;AAAA,IAAG,OAAO;AAAA,EAC1C,OAAO,KAAK,QAAQ,OAAO,CAAC,SAAc,MAAM,SAAS,iBAAiB,MAAM,SAAS,MAAM,EAAE,IAAI,CAAC,SAAc,OAAO,KAAK,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE;AAAA;AAGtJ,SAAS,SAAS,CAAC,QAAyB;AAAA,EAC1C,MAAM,QAAQ,OAAO,UAAU,EAAE,EAAE,YAAY;AAAA,EAC/C,IAAI,UAAU,UAAU,UAAU,SAAS,UAAU;AAAA,IAAc,OAAO;AAAA,EAC1E,IAAI,UAAU,UAAU,UAAU;AAAA,IAAc,OAAO;AAAA,EACvD,IAAI,UAAU,SAAS,UAAU;AAAA,IAAa,OAAO;AAAA,EACrD,OAAO;AAAA;AAGT,IAAM,yBAAyB,IAAI,IAAI,CAAC,WAAW,aAAa,iBAAiB,oBAAoB,uBAAuB,CAAC;AAE7H,SAAS,sBAAsB,CAAC,MAAiB;AAAA,EAC/C,IAAI,CAAC,QAAQ,OAAO,KAAK,SAAS,YAAY,CAAC,uBAAuB,IAAI,KAAK,IAAI,GAAG;AAAA,IACpF,MAAM,IAAI,mBAAmB,oBAAoB,+EAA+E;AAAA,EAClI;AAAA,EACA,IAAI,KAAK,SAAS,mBAAmB,KAAK,SAAS;AAAA,IAAoB,sBAAsB,KAAK,IAAI;AAAA,EACtG,IAAI,KAAK,SAAS,aAAa,KAAK,YAAY,aAAa,CAAC,MAAM,QAAQ,KAAK,OAAO,GAAG;AAAA,IACzF,MAAM,IAAI,mBAAmB,oBAAoB,2DAA2D;AAAA,EAC9G;AAAA,EACA,IAAI,KAAK,SAAS,aAAa,MAAM,QAAQ,KAAK,OAAO,KAAK,KAAK,QAAQ,KAAK,CAAC,SAAc,CAAC,QAAQ,CAAC,CAAC,eAAe,MAAM,EAAE,SAAS,KAAK,IAAI,CAAC,GAAG;AAAA,IACrJ,MAAM,IAAI,mBAAmB,oBAAoB,2DAA2D;AAAA,EAC9G;AAAA,EACA,MAAM,iBAAiB,CAAC,GAAI,MAAM,QAAQ,KAAK,OAAO,IAAI,KAAK,UAAU,CAAC,GAAI,GAAI,MAAM,QAAQ,KAAK,OAAO,IAAI,KAAK,UAAU,CAAC,CAAE;AAAA,EAClI,IAAI,KAAK,SAAS,gBAAgB,KAAK,YAAY,aAAa,CAAC,MAAM,QAAQ,KAAK,OAAO,KAAK,KAAK,YAAY,aAAa,CAAC,MAAM,QAAQ,KAAK,OAAO,KAAK,eAAe,KAAK,CAAC,SAAc,CAAC,QAAQ,CAAC,CAAC,gBAAgB,gBAAgB,EAAE,SAAS,KAAK,IAAI,CAAC,IAAI;AAAA,IACnQ,MAAM,IAAI,mBAAmB,oBAAoB,6DAA6D;AAAA,EAChH;AAAA;AAGF,SAAS,2BAA2B,CAAC,MAAiB;AAAA,EACpD,IAAI,CAAC,QAAQ,OAAO,SAAS,YAAY,MAAM,QAAQ,IAAI,KAAK,OAAO,KAAK,SAAS,YAAY,CAAC,KAAK,MAAM;AAAA,IAC3G,MAAM,IAAI,mBAAmB,oBAAoB,0DAA0D;AAAA,EAC7G;AAAA;AAGF,SAAS,sBAAsB,CAAC,QAA6C;AAAA,EAC3E,IAAI,WAAW;AAAA,IAAkB,OAAO;AAAA,EACxC,IAAI,WAAW,gBAAgB,WAAW;AAAA,IAAqB,OAAO;AAAA,EACtE,MAAM,IAAI,mBAAmB,cAAc,wDAAwD,UAAU,aAAa,MAAM;AAAA;AAAA;AAG3H,MAAM,uBAAuB;AAAA,EACjB,QAAQ,IAAI;AAAA,EACZ,SAAyB,CAAC;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACT,OAAO;AAAA,EACP,YAAY;AAAA,EACH,cAAc,IAAI;AAAA,EAClB,gBAAgB,IAAI;AAAA,EACpB,gBAAgB,IAAI;AAAA,EACpB,aAAa,IAAI;AAAA,EAC1B,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA,mBAA+B,CAAC;AAAA,EAChC,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,UAAU;AAAA,EACD;AAAA,EAEjB,WAAW,CAAC,UAA4H,CAAC,GAAG;AAAA,IAC1I,KAAK,eAAe,QAAQ,iBAAiB,QAAQ,UAAU,oBAAoB,QAAQ,OAAO,IAAI;AAAA,IACtG,KAAK,SAAS,QAAQ,UAAU;AAAA,IAChC,KAAK,sBAAsB,QAAQ,uBAAuB;AAAA,IAC1D,KAAK,mBAAmB,QAAQ;AAAA;AAAA,EAG1B,kBAAkB,CAAC,MAAiB;AAAA,IAC1C,IAAI,KAAK,WAAW;AAAA,MAAa,4BAA4B,IAAI;AAAA,IAC5D;AAAA,6BAAuB,IAAI;AAAA;AAAA,EAG1B,YAAY,CAAC,MAAkB,OAAgB,WAAW,OAAO,cAAuB,QAA+B;AAAA,IAC7H,MAAM,WAAW;AAAA,MACf,IAAI,OAAO,KAAK,OAAO,YAAY,KAAK,KAAK,KAAK,KAAK;AAAA,MACvD,QAAQ,OAAO,KAAK,YAAY,YAAY,KAAK,UAAU,KAAK,UAAU;AAAA,MAC1E,aAAa;AAAA,MACb,cAAc,iBAAiB,OAAO,KAAK,kBAAkB,WAAW,KAAK,gBAAgB;AAAA,IAC/F;AAAA,IACA,MAAM,cAAc,OAAO,OAAO,QAAQ,EAAE,KAAK,CAAC,UAAU,UAAU,SAAS;AAAA,IAC/E,MAAM,eAAe,CAAC,WAAkC;AAAA,MACtD,MAAM,eAA8D,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,QAAQ,GAAG,CAAC,eAAe,OAAO,CAAC;AAAA,MACjI,MAAM,SAAS,aAAa,OAAO,EAAE,aAAa,eAAe,SAAS,iBAAiB,aAAa,OAAO,eAAe,SAAS;AAAA,MACvI,IAAI,OAAO,SAAS;AAAA,QAAG,OAAO,OAAO,MAAM,EAAE,aAAa,eAAe,SAAS,iBAAiB,OAAO,UAAU;AAAA,MACpH,MAAM,cAA2D,CAAC,gBAAgB,cAAc;AAAA,MAChG,IAAI,SAAS,iBAAiB,aAAa,OAAO,iBAAiB;AAAA,QAAW,OAAO,SAAS,YAAY,QAAQ,OAAO,YAAY;AAAA,MACrI,OAAO;AAAA;AAAA,IAET,MAAM,UAAU,KAAK,OAAO,OAAO,CAAC,WAAW,cAAc,aAAa,MAAM,IAAI,CAAC,OAAO,MAAM,CAAC,OAAO,UAAU,OAAO,UAAU,aAAa,OAAO,iBAAiB,SAAS;AAAA,IACnL,IAAI,CAAC,eAAe,QAAQ,SAAS;AAAA,MAAG,MAAM,IAAI,mBAAmB,oBAAoB,0CAA0C;AAAA,IACnI,MAAM,QAAQ,QAAQ;AAAA,IACtB,IAAI,OAAO;AAAA,MACT,IAAI,UAAU;AAAA,QAAW,MAAM,QAAQ;AAAA,MACvC,IAAI,SAAS,OAAO;AAAA,QAAW,MAAM,KAAK,SAAS;AAAA,MACnD,IAAI,SAAS,WAAW;AAAA,QAAW,MAAM,SAAS,SAAS;AAAA,MAC3D,IAAI,SAAS,iBAAiB;AAAA,QAAW,MAAM,eAAe,SAAS;AAAA,MACvE,IAAI;AAAA,QAAU,MAAM,OAAO,MAAM,IAAI;AAAA,MACrC,OAAO;AAAA,IACT;AAAA,IACA,MAAM,SAAS,EAAE,MAAM,MAAM,IAAI,GAAG,OAAO,OAAO,KAAK,eAAe,IAAI,SAAS,IAAI,QAAQ,SAAS,QAAQ,cAAc,SAAS,aAAa;AAAA,IACpJ,KAAK,OAAO,KAAK,MAAM;AAAA,IACvB,OAAO;AAAA;AAAA,EAGD,aAAa,GAAiB;AAAA,IACpC,OAAO,KAAK,OAAO,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM;AAAA,MACxC,IAAI,EAAE,UAAU,aAAa,EAAE,UAAU;AAAA,QAAW,OAAO,EAAE,QAAQ,EAAE;AAAA,MACvE,IAAI,EAAE,UAAU;AAAA,QAAW,OAAO;AAAA,MAClC,IAAI,EAAE,UAAU;AAAA,QAAW,OAAO;AAAA,MAClC,OAAO,EAAE,QAAQ,EAAE;AAAA,KACpB,EAAE,IAAI,CAAC,WAAW,MAAM,OAAO,IAAI,CAAC;AAAA;AAAA,EAG/B,WAAW,CAAC,MAAW,MAAsB;AAAA,IACnD,MAAM,OAAiB,CAAC;AAAA,IACxB,MAAM,KAAK,KAAK,WAAW,MAAM;AAAA,IACjC,IAAI,OAAO,aAAa,OAAO,QAAQ,OAAO;AAAA,MAAI,KAAK,KAAK,cAAc,OAAO,EAAE,GAAG;AAAA,IACtF,IAAI,KAAK,iBAAiB,aAAa,KAAK,iBAAiB;AAAA,MAAM,KAAK,KAAK,kBAAkB,OAAO,KAAK,YAAY,GAAG;AAAA,IAC1H,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,iBAAiB;AAAA;AAAA,EAG5C,YAAY,CAAC,MAAW,MAAoB;AAAA,IAClD,MAAM,OAAO,KAAK,YAAY,MAAM,IAAI;AAAA,IACxC,MAAM,SAAS,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,KAAK,cAAc,IAAI,GAAG,CAAC,EAAE,OAAO,CAAC,UAA2B,UAAU,SAAS,CAAC;AAAA,IAC7H,IAAI,OAAO,OAAO;AAAA,MAAG,MAAM,IAAI,mBAAmB,oBAAoB,6DAA6D;AAAA,IACnI,MAAM,QAAQ,OAAO,OAAO,EAAE,KAAK,EAAE,SAA+B,KAAK;AAAA,IACzE,WAAW,OAAO;AAAA,MAAM,KAAK,cAAc,IAAI,KAAK,KAAK;AAAA,IACzD,OAAO;AAAA;AAAA,EAGD,mBAAmB,CAAC,MAAW,MAAoB;AAAA,IACzD,MAAM,eAAe,KAAK,iBAAiB,MAAM;AAAA,IACjD,OAAO,iBAAiB,aAAa,iBAAiB,OAAO,YAAY,OAAO,YAAY;AAAA;AAAA,EAGtF,gBAAgB,CAAC,MAAW,MAAoB;AAAA,IACtD,MAAM,QAAQ,KAAK,aAAa,MAAM,IAAI;AAAA,IAC1C,MAAM,SAAS,KAAK,YAAY,IAAI,KAAK;AAAA,IACzC,IAAI,CAAC;AAAA,MAAQ,OAAO;AAAA,IACpB,MAAM,eAAe,KAAK,oBAAoB,MAAM,IAAI;AAAA,IACxD,IAAI,iBAAiB;AAAA,MAAW,OAAO,OAAO,IAAI,YAAY,KAAK;AAAA,IACnE,OAAO,CAAC,GAAG,OAAO,OAAO,CAAC,EAAE,KAAK,EAAE;AAAA;AAAA,EAG7B,cAAc,CAAC,MAAW,MAAW,OAAqB;AAAA,IAChE,MAAM,QAAQ,KAAK,aAAa,MAAM,IAAI;AAAA,IAC1C,MAAM,SAAS,KAAK,YAAY,IAAI,KAAK,KAAK,IAAI;AAAA,IAClD,OAAO,IAAI,KAAK,oBAAoB,MAAM,IAAI,GAAG,KAAK;AAAA,IACtD,KAAK,YAAY,IAAI,OAAO,MAAM;AAAA;AAAA,EAGpC,OAAO,CAAC,OAAoC;AAAA,IAC1C,MAAM,OAAO,YAAY,KAAK;AAAA,IAC9B,MAAM,OAAO,MAAM;AAAA,IACnB,IAAI,SAAS,QAAQ;AAAA,MAAE,KAAK,UAAU;AAAA,MAAM,OAAO,CAAC;AAAA,IAAG;AAAA,IACvD,IAAI,SAAS,qBAAqB,KAAK,UAAU,WAAW;AAAA,MAAU,MAAM,IAAI,mBAC9E,UAAU,yBAAyB,WAAW,wBAAwB,MAAM,yBAAyB,KAAK,gBAAgB,CAAC;AAAA,IAC7H,IAAI,KAAK,WAAW,CAAC,KAAK;AAAA,MAAU,MAAM,IAAI,mBAAmB,cAAc,iEAAiE;AAAA,IAChJ,IAAI,KAAK,UAAU;AAAA,MACjB,IAAI,SAAS,WAAW,SAAS;AAAA,QAAmB,MAAM,IAAI,mBAC5D,UAAU,8CAA8C,WAAW,wBAAwB,MAAM,8CAA8C,KAAK,gBAAgB,CAAC;AAAA,MACvK,IAAI,SAAS,wBAAwB,SAAS;AAAA,QAAuB,OAAO,CAAC;AAAA,MAC7E,OAAO,CAAC;AAAA,IACV;AAAA,IACA,IAAI,SAAS;AAAA,MAAS,MAAM,IAAI,mBAC9B,UAAU,2CAA2C,WAAW,wBAAwB,MAAM,2CAA2C,KAAK,gBAAgB,CAAC;AAAA,IACjK,IAAI,SAAS,sBAAsB,SAAS,wBAAwB;AAAA,MAClE,MAAM,WAAW,KAAK,YAAY,CAAC;AAAA,MACnC,KAAK,eAAe,OAAO,SAAS,MAAM,EAAE;AAAA,MAC5C,KAAK,UAAU,OAAO,SAAS,SAAS,EAAE;AAAA,MAC1C,KAAK,YAAY,OAAO,SAAS,cAAc,CAAC;AAAA,MAChD,IAAI,SAAS;AAAA,QAAc,KAAK,cAAc,OAAO,SAAS,YAAY;AAAA,MAC1E,OAAO,CAAC;AAAA,IACV;AAAA,IACA,MAAM,SAAuB,CAAC;AAAA,IAC9B,MAAM,OAAO,OAAY,EAAE,IAAI,KAAK,YAAY,QAAQ,yBAAyB,SAAS,KAAK,SAAS,OAAO,KAAK,OAAO,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,eAAe,KAAK,CAAC,MAAO,KAAK,cAAc,EAAE,cAAc,KAAK,YAAY,IAAI,CAAC,EAAG;AAAA,IACpP,IAAI,SAAS,gCAAgC,SAAS,mCAAmC,SAAS,yCAAyC;AAAA,MACzI,MAAM,QAAQ,OAAO,KAAK,SAAS,EAAE;AAAA,MACrC,IAAI,SAAS,8BAA8B;AAAA,QACzC,MAAM,WAAW,KAAK,iBAAiB,IAAI;AAAA,QAC3C,KAAK,eAAe,MAAM,WAAW,WAAW,KAAK;AAAA,QACrD,KAAK,QAAQ;AAAA,MACf,EACK;AAAA,aAAK,aAAa;AAAA,MACvB,MAAM,QAAQ,KAAK;AAAA,MACnB,MAAM,QAAQ,GAAG,MAAM,OAAO;AAAA,MAC9B,MAAM,QAAQ,GAAG,MAAM,KAAK,SAAS,WAAW,IAAI,sBAAsB,aAAa;AAAA,MACvF,OAAO,KAAK,KAAK;AAAA,IACnB,EAAO,SAAI,SAAS,gDAAgD;AAAA,MAClE,MAAM,UAAU,OAAO,KAAK,WAAW,KAAK,gBAAgB,eAAe;AAAA,MAC3E,MAAM,QAAQ,OAAO,KAAK,qBAAqB,EAAE;AAAA,MACjD,IAAI,CAAC,SAAS,KAAK,WAAW,IAAI,OAAO,MAAM;AAAA,QAAO,OAAO;AAAA,MAC7D,KAAK,WAAW,IAAI,SAAS,KAAK;AAAA,MAClC,MAAM,QAAQ,KAAK;AAAA,MACnB,MAAM,QAAQ,GAAG,MAAM,OAAO;AAAA,MAC9B,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,EAAE,MAAM,aAAa,WAAW,EAAE,KAAK,QAAQ,UAAU,KAAK,aAAa,YAAY,QAAQ,EAAE,CAAC;AAAA,MACnI,OAAO,KAAK,KAAK;AAAA,IACnB,EAAO,SAAI,SAAS,8BAA8B;AAAA,MAChD,MAAM,OAAO,KAAK;AAAA,MAClB,KAAK,mBAAmB,IAAI;AAAA,MAC5B,IAAI,CAAC,CAAC,iBAAiB,kBAAkB,EAAE,SAAS,KAAK,IAAI,GAAG;AAAA,QAC9D,IAAI,KAAK,WAAW;AAAA,UAAa,KAAK,aAAa,MAAM,KAAK,iBAAiB,YAAY,YAAY,OAAO,KAAK,YAAY,GAAG,OAAO,KAAK,kBAAkB,YAAY,YAAY,OAAO,KAAK,aAAa,GAAG,OAAO,KAAK,YAAY,WAAW,KAAK,UAAU,SAAS;AAAA,QAC/Q,OAAO;AAAA,MACT;AAAA,MACA,MAAM,WAAW,KAAK,SAAS,EAAE,SAAS,KAAK,IAAI,cAAc,KAAK,aAAa,GAAG,IAAI;AAAA,MAC1F,IAAI;AAAA,QAAU,OAAO,CAAC;AAAA,MACtB,MAAM,MAAM,OAAO,KAAK,MAAM,KAAK,WAAW,KAAK,gBAAgB,KAAK,SAAS;AAAA,MACjF,MAAM,QAAmB,EAAE,OAAO,KAAK,aAAa,IAAI,OAAO,KAAK,WAAW,EAAE,GAAG,MAAM,OAAO,KAAK,QAAQ,EAAE,GAAG,MAAM,KAAK,MAAM,WAAW,OAAO,KAAK,aAAa,KAAK,SAAS,EAAE,GAAG,kBAAkB,OAAO,MAAM,MAAM;AAAA,MAChO,KAAK,MAAM,IAAI,QAAQ,OAAO,KAAK;AAAA,MACnC,IAAI,KAAK,OAAO;AAAA,QAAW,KAAK,MAAM,IAAI,QAAQ,OAAO,KAAK,EAAE,KAAK,KAAK;AAAA,MAC1E,IAAI,KAAK,iBAAiB;AAAA,QAAW,KAAK,MAAM,IAAI,UAAU,OAAO,KAAK,YAAY,KAAK,KAAK;AAAA,MAChG,MAAM,QAAQ,KAAK;AAAA,MACnB,MAAM,QAAQ,GAAG,MAAM,OAAO;AAAA,MAC9B,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,aAAa,OAAO,IAAI,MAAM,KAAK,mBAAmB,CAAC;AAAA,MAC5F,OAAO,KAAK,KAAK;AAAA,IACnB,EAAO,SAAI,SAAS,4CAA4C,SAAS,yCAAyC;AAAA,MAChH,MAAM,QAAQ,KAAK,SAAS,IAAI;AAAA,MAChC,MAAM,QAAQ,OAAO,KAAK,SAAS,EAAE;AAAA,MACrC,IAAI,SAAS,SAAS,CAAC,MAAM,MAAM;AAAA,QACjC,MAAM,aAAa;AAAA,QACnB,MAAM,mBAAmB;AAAA,QACzB,MAAM,QAAQ,KAAK;AAAA,QACnB,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,aAAa,OAAO,OAAO,OAAO,KAAK,mBAAmB,CAAC;AAAA,QAChG,OAAO,KAAK,KAAK;AAAA,MACnB;AAAA,IACF,EAAO,SAAI,SAAS,2CAA2C,SAAS,wCAAwC;AAAA,MAC9G,MAAM,QAAQ,KAAK,SAAS,IAAI;AAAA,MAChC,MAAM,OAAO,OAAO,KAAK,aAAa,KAAK,SAAS,EAAE;AAAA,MACtD,IAAI,SAAS;AAAA,QAAM,MAAM,YAAY;AAAA,MACrC,IAAI,SAAS,CAAC,MAAM,oBAAoB,MAAM,WAAW;AAAA,QACvD,MAAM,mBAAmB;AAAA,QACzB,MAAM,QAAQ,KAAK;AAAA,QACnB,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,aAAa,OAAO,MAAM,WAAW,OAAO,KAAK,mBAAmB,CAAC;AAAA,QAC1G,OAAO,KAAK,KAAK;AAAA,MACnB;AAAA,IACF,EAAO,SAAI,SAAS,6BAA6B;AAAA,MAC/C,MAAM,OAAO,KAAK;AAAA,MAClB,KAAK,mBAAmB,IAAI;AAAA,MAC5B,IAAI,MAAM,SAAS,mBAAmB,MAAM,SAAS,oBAAoB;AAAA,QACvE,MAAM,QAAQ,KAAK,SAAS,KAAK,MAAM,SAAS,KAAK,WAAW,KAAK,GAAG,GAAG,IAAI;AAAA,QAC/E,IAAI,OAAO;AAAA,UACT,MAAM,OAAO;AAAA,UACb,MAAM,YAAY,OAAO,KAAK,aAAa,KAAK,SAAS,MAAM,SAAS;AAAA,UACxE,IAAI,CAAC,MAAM,oBAAoB,MAAM,WAAW;AAAA,YAC9C,MAAM,mBAAmB;AAAA,YACzB,MAAM,QAAQ,KAAK;AAAA,YACnB,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,aAAa,OAAO,MAAM,WAAW,OAAO,KAAK,mBAAmB,CAAC;AAAA,YAC1G,OAAO,KAAK,KAAK;AAAA,UACnB;AAAA,QACF,EAAO;AAAA,UACL,MAAM,SAAoB,EAAE,OAAO,KAAK,aAAa,IAAI,OAAO,KAAK,WAAW,EAAE,GAAG,MAAM,OAAO,KAAK,QAAQ,EAAE,GAAG,MAAM,KAAK,MAAM,WAAW,OAAO,KAAK,aAAa,KAAK,SAAS,EAAE,GAAG,kBAAkB,MAAM,MAAM,KAAK;AAAA,UAC/N,IAAI,KAAK,OAAO;AAAA,YAAW,KAAK,MAAM,IAAI,QAAQ,OAAO,KAAK,EAAE,KAAK,MAAM;AAAA,UAC3E,IAAI,KAAK,iBAAiB;AAAA,YAAW,KAAK,MAAM,IAAI,UAAU,OAAO,KAAK,YAAY,KAAK,MAAM;AAAA,UACjG,MAAM,QAAQ,KAAK;AAAA,UACnB,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,aAAa,QAAQ,OAAO,WAAW,MAAM,KAAK,mBAAmB,CAAC;AAAA,UAC3G,OAAO,KAAK,KAAK;AAAA;AAAA,QAEnB,KAAK,aAAa,MAAM,KAAK,iBAAiB,YAAY,YAAY,OAAO,KAAK,YAAY,GAAG,KAAK,WAAW,aAAa,KAAK,kBAAkB,YAAY,YAAY,OAAO,KAAK,aAAa,GAAG,OAAO,KAAK,YAAY,WAAW,KAAK,UAAU,SAAS;AAAA,MACtQ,EAAO,SAAI,MAAM;AAAA,QACf,KAAK,aAAa,MAAM,KAAK,iBAAiB,YAAY,YAAY,OAAO,KAAK,YAAY,GAAG,KAAK,WAAW,aAAa,KAAK,kBAAkB,YAAY,YAAY,OAAO,KAAK,aAAa,GAAG,OAAO,KAAK,YAAY,WAAW,KAAK,UAAU,SAAS;AAAA,QACpQ,IAAI,KAAK,SAAS,2BAA2B,KAAK,QAAQ;AAAA,UACxD,MAAM,UAAU,OAAO,KAAK,MAAM,KAAK,gBAAgB,eAAe;AAAA,UACtE,IAAI,KAAK,WAAW,IAAI,OAAO,MAAM,KAAK,QAAQ;AAAA,YAChD,KAAK,WAAW,IAAI,SAAS,KAAK,MAAM;AAAA,YACxC,MAAM,QAAQ,KAAK;AAAA,YACnB,MAAM,QAAQ,GAAG,MAAM,OAAO;AAAA,YAC9B,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,EAAE,MAAM,aAAa,WAAW,EAAE,KAAK,QAAQ,UAAU,KAAK,aAAa,YAAY,KAAK,SAAS,EAAE,CAAC;AAAA,YACzI,OAAO,KAAK,KAAK;AAAA,UACnB;AAAA,QACF;AAAA,QACA,IAAI,KAAK,SAAS,aAAa,aAAa,IAAI,GAAG;AAAA,UACjD,MAAM,WAAW,aAAa,IAAI;AAAA,UAClC,MAAM,QAAQ,KAAK,aAAa,MAAM,IAAI;AAAA,UAC1C,MAAM,eAAe,KAAK,oBAAoB,MAAM,IAAI;AAAA,UACxD,IAAI,iBAAiB,WAAW;AAAA,YAC9B,MAAM,YAAY,KAAK,cAAc,IAAI,KAAK;AAAA,YAC9C,IAAI,cAAc,WAAW;AAAA,cAC3B,IAAI,cAAc;AAAA,gBAAU,MAAM,IAAI,mBAAmB,oBAAoB,oDAAoD;AAAA,cACjI,OAAO;AAAA,YACT;AAAA,YACA,MAAM,WAAW,KAAK,iBAAiB,MAAM,IAAI;AAAA,YACjD,MAAM,QAAQ,aAAa,WAAW,KAAK,SAAS,WAAW,QAAQ,IAAI,SAAS,MAAM,SAAS,MAAM,IAAI;AAAA,YAC7G,KAAK,cAAc,IAAI,OAAO,QAAQ;AAAA,YACtC,IAAI,CAAC;AAAA,cAAO,OAAO;AAAA,YACnB,MAAM,QAAQ,KAAK;AAAA,YACnB,MAAM,QAAQ,GAAG,MAAM,OAAO;AAAA,YAC9B,MAAM,QAAQ,GAAG,MAAM,UAAU;AAAA,YACjC,OAAO,KAAK,KAAK;AAAA,YACjB,OAAO;AAAA,UACT;AAAA,UACA,MAAM,WAAW,KAAK,iBAAiB,MAAM,IAAI;AAAA,UACjD,MAAM,QAAQ,aAAa,WAAW,KAAK,SAAS,WAAW,QAAQ,IAAI,SAAS,MAAM,SAAS,MAAM,IAAI;AAAA,UAC7G,KAAK,eAAe,MAAM,MAAM,QAAQ;AAAA,UACxC,IAAI,CAAC;AAAA,YAAO,OAAO;AAAA,UACnB,MAAM,QAAQ,KAAK;AAAA,UACnB,MAAM,QAAQ,GAAG,MAAM,OAAO;AAAA,UAC9B,MAAM,QAAQ,GAAG,MAAM,UAAU;AAAA,UACjC,OAAO,KAAK,KAAK;AAAA,QACnB;AAAA,MACF;AAAA,IACF,EAAO,SAAI,SAAS,wBAAwB,SAAS,uBAAuB;AAAA,MAC1E,MAAM,WAAW,KAAK,YAAY,CAAC;AAAA,MACnC,MAAM,aAAa,SAAS,yBAAyB,SAAS,WAAW;AAAA,MACzE,IAAI,SAAS,UAAU,CAAC,CAAC,aAAa,YAAY,EAAE,SAAS,SAAS,MAAM;AAAA,QAAG,MAAM,IAAI,mBAAmB,oBAAoB,mDAAmD;AAAA,MACnL,MAAM,mBAAmB,aAAa,OAAO,SAAS,oBAAoB,UAAU,EAAE,IAAI;AAAA,MAC1F,MAAM,mBAAmB,aAAa,uBAAuB,gBAAgB,IAAI;AAAA,MACjF,KAAK,WAAW,aAAa,eAAe;AAAA,MAC5C,KAAK,mBAAmB,MAAM,QAAQ;AAAA,MACtC,KAAK,UAAU,OAAO,SAAS,SAAS,EAAE;AAAA,MAC1C,KAAK,eAAe,OAAO,SAAS,MAAM,EAAE;AAAA,MAC5C,KAAK,YAAY,OAAO,SAAS,cAAc,CAAC;AAAA,MAChD,IAAI,SAAS;AAAA,QAAc,KAAK,cAAc,OAAO,SAAS,YAAY;AAAA,MAC1E,IAAI,SAAS,WAAW,aAAa,CAAC,MAAM,QAAQ,SAAS,MAAM;AAAA,QAAG,MAAM,IAAI,mBAAmB,oBAAoB,uCAAuC;AAAA,MAC9J,IAAI,MAAM,QAAQ,SAAS,MAAM;AAAA,QAAG,SAAS,OAAO,QAAQ,CAAC,MAAkB,UAAkB;AAAA,UAC/F,KAAK,mBAAmB,IAAI;AAAA,UAC5B,KAAK,aAAa,MAAM,OAAO,MAAM,OAAO,KAAK,kBAAkB,WAAW,KAAK,gBAAgB,SAAS;AAAA,SAC7G;AAAA,MACD,MAAM,QAAQ,KAAK;AAAA,MACnB,MAAM,QAAQ,GAAG,gBAAgB,KAAK,aAAa,eAAe,mBAAoB,KAAK,OAAO,KAAK,CAAC,WAAW,OAAO,KAAK,SAAS,mBAAmB,OAAO,KAAK,SAAS,kBAAkB,IAAI,eAAe;AAAA,MACrN,MAAM,QAAQ,GAAG,uBAAuB,KAAK,aAAa,eAAe,mBAAmB,MAAM,QAAQ,GAAG;AAAA,MAC7G,OAAO,KAAK,KAAK;AAAA,MACjB,MAAM,QAAQ,KAAK,eAAe,UAAU,QAAQ,IAAI;AAAA,MACxD,IAAI,OAAO;AAAA,QACT,MAAM,aAAa,KAAK;AAAA,QACxB,WAAW,UAAU,CAAC;AAAA,QACtB,WAAW,QAAQ,qBAAqB,KAAK;AAAA,QAC7C,OAAO,KAAK,UAAU;AAAA,MACxB;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAAA,EAGD,QAAQ,CAAC,MAAW,eAAe,OAA8B;AAAA,IACvE,MAAM,OAAO,CAAC,KAAK,UAAU,QAAQ,OAAO,KAAK,OAAO,MAAM,IAAI,KAAK,iBAAiB,YAAY,UAAU,OAAO,KAAK,YAAY,MAAM,IAAI,KAAK,MAAM,KAAK,QAAQ,OAAO,KAAK,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,OAAO;AAAA,IACnN,MAAM,UAAU,CAAC,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,GAAG,CAAC,EAAE,OAAO,CAAC,UAA8B,QAAQ,KAAK,CAAC,CAAC,CAAC;AAAA,IACzH,IAAI,QAAQ,SAAS;AAAA,MAAG,MAAM,IAAI,mBAAmB,oBAAoB,4DAA4D;AAAA,IACrI,IAAI,QAAQ,WAAW;AAAA,MAAG,OAAO,QAAQ;AAAA,IACzC,IAAI,KAAK,SAAS,GAAG;AAAA,MACnB,IAAI;AAAA,QAAc;AAAA,MAClB,MAAM,IAAI,mBAAmB,oBAAoB,6DAA6D;AAAA,IAChH;AAAA,IACA,MAAM,SAAS,CAAC,GAAG,IAAI,IAAI,KAAK,MAAM,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,MAAM,IAAI;AAAA,IAC9E,IAAI,OAAO,WAAW;AAAA,MAAG,OAAO,OAAO;AAAA,IACvC,IAAI,OAAO,SAAS;AAAA,MAAG,MAAM,IAAI,mBAAmB,oBAAoB,6CAA6C;AAAA,IACrH;AAAA;AAAA,EAGF,MAAM,GAAuB;AAAA,IAC3B,IAAI,CAAC,KAAK;AAAA,MAAU,MAAM,IAAI,mBAAmB,KAAK,UAAU,eAAe,kBAAkB,KAAK,UAAU,8DAA8D,8CAA8C;AAAA,IAC5N,MAAM,WAAW,MAAM,KAAK,gBAAgB;AAAA,IAC5C,SAAS,OAAO,KAAK;AAAA,IACrB,SAAS,UAAU,KAAK;AAAA,IACxB,SAAS,eAAe,KAAK;AAAA,IAC7B,SAAS,WAAW,KAAK;AAAA,IACzB,SAAS,SAAS,KAAK,cAAc;AAAA,IACrC,IAAI,CAAC,SAAS,OAAO,KAAK,CAAC,SAAc,KAAK,SAAS,SAAS,KAAK,KAAK;AAAA,MAAM,SAAS,OAAO,QAAQ,EAAE,MAAM,WAAW,MAAM,aAAa,SAAS,CAAC,EAAE,MAAM,eAAe,MAAM,KAAK,KAAK,CAAC,EAAE,CAAC;AAAA,IACnM,IAAI,CAAC,SAAS,OAAO,KAAK,CAAC,SAAc,KAAK,SAAS,WAAW,KAAK,KAAK;AAAA,MAAW,SAAS,OAAO,QAAQ,EAAE,MAAM,aAAa,SAAS,CAAC,EAAE,MAAM,gBAAgB,MAAM,KAAK,UAAU,CAAC,EAAE,CAAC;AAAA,IAC/L,OAAO,EAAE,UAAU,UAAU,KAAK,UAAU,QAAQ,MAAM,SAAS,MAAM,GAAG,QAAQ,CAAC,EAAE;AAAA;AAE3F;AAOA,eAAsB,oBAAoB,CAAC,QAAmB,UAAkC,CAAC,GAAgC;AAAA,EAC/H,MAAM,YAAY,IAAI,uBAAuB,OAAO;AAAA,EACpD,iBAAiB,SAAS,cAAc,QAAQ,OAAO;AAAA,IAAG,UAAU,QAAQ,KAAK;AAAA,EACjF,OAAO,UAAU,OAAO;AAAA;AAqBnB,SAAS,yBAAyB,CAAC,UAAsB,sBAAsB,OAAmB;AAAA,EACvG,IAAI,UAAU;AAAA,EACd,IAAI,YAAY;AAAA,EAChB,MAAM,aAAoB,CAAC;AAAA,EAC3B,MAAM,SAAgB,CAAC;AAAA,EACvB,IAAI,SAAS,WAAW,aAAa,CAAC,MAAM,QAAQ,SAAS,MAAM;AAAA,IAAG,MAAM,IAAI,mBAAmB,oBAAoB,uCAAuC;AAAA,EAC9J,WAAW,QAAQ,MAAM,QAAQ,SAAS,MAAM,IAAI,SAAS,SAAS,CAAC,GAAG;AAAA,IACxE,uBAAuB,IAAI;AAAA,IAC3B,IAAI,KAAK,SAAS;AAAA,MAAW,WAAW,aAAa,IAAI;AAAA,IACzD,IAAI,KAAK,SAAS;AAAA,MAAa,cAAc,KAAK,WAAW,CAAC,GAAG,OAAO,CAAC,SAAc,KAAK,SAAS,cAAc,EAAE,IAAI,CAAC,SAAc,OAAO,KAAK,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,WAAW,CAAC,GAAG,OAAO,CAAC,SAAc,KAAK,SAAS,gBAAgB,EAAE,IAAI,CAAC,SAAc,OAAO,KAAK,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE;AAAA,IAC1S,IAAI,KAAK,SAAS,sBAAsB;AAAA,MAAqB,WAAW,KAAK,EAAE,IAAI,KAAK,SAAS,MAAM,UAAU,QAAQ,EAAE,MAAM,KAAK,MAAM,OAAO,OAAO,KAAK,SAAS,EAAE,EAAE,EAAE,CAAC;AAAA,IAC1K,SAAI,KAAK,SAAS,mBAAmB,KAAK,SAAS;AAAA,MAAoB,WAAW,KAAK,EAAE,IAAI,KAAK,SAAS,MAAM,YAAY,UAAU,EAAE,MAAM,KAAK,MAAM,WAAW,OAAO,KAAK,aAAa,KAAK,SAAS,EAAE,EAAE,EAAE,CAAC;AAAA,IACxN,IAAI,KAAK,SAAS,2BAA2B,KAAK;AAAA,MAAQ,OAAO,KAAK,EAAE,MAAM,aAAa,WAAW,EAAE,KAAK,QAAQ,UAAU,KAAK,aAAa,YAAY,KAAK,SAAS,EAAE,CAAC;AAAA,EAChL;AAAA,EACA,MAAM,mBAAmB,OAAO,SAAS,oBAAoB,UAAU,YAAY;AAAA,EACnF,IAAI,SAAS,UAAU,CAAC,CAAC,aAAa,YAAY,EAAE,SAAS,SAAS,MAAM;AAAA,IAAG,MAAM,IAAI,mBAAmB,oBAAoB,mDAAmD;AAAA,EACnL,MAAM,eAAe,SAAS,WAAW,eAAe,uBAAuB,gBAAgB,IAAI,WAAW,SAAS,eAAe;AAAA,EACtI,MAAM,UAAe,EAAE,MAAM,aAAa,SAAS,WAAW,KAAK;AAAA,EACnE,IAAI;AAAA,IAAW,QAAQ,oBAAoB;AAAA,EAC3C,IAAI,WAAW;AAAA,IAAQ,QAAQ,aAAa;AAAA,EAC5C,IAAI,OAAO;AAAA,IAAQ,QAAQ,SAAS;AAAA,EACpC,OAAO,EAAE,IAAI,SAAS,MAAM,IAAI,QAAQ,mBAAmB,SAAS,SAAS,cAAc,KAAK,MAAM,KAAK,IAAI,IAAI,IAAI,GAAG,OAAO,SAAS,SAAS,IAAI,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,eAAe,cAAc,sBAAsB,SAAS,WAAW,eAAe,mBAAmB,aAAa,CAAC,MAAO,SAAS,QAAQ,EAAE,OAAO,qBAAqB,SAAS,KAAK,EAAE,IAAI,CAAC,EAAG;AAAA;;;AC50B7X,IAAM,mBAAmB;AAEzB,IAAM,iBAAiB,IAAI,KAAK;AAEhC,IAAM,yBAAyB,MAAM;AACrC,IAAM,qBAAqB;AAcpB,MAAM,yBAAyB,MAAM;AAAA,EAGrB;AAAA,EAAqC;AAAA,EAFjD,OAAO;AAAA,EAEhB,WAAW,CAAU,MAAqC,QAAiB;AAAA,IACzE,MAAM,WAAW,YAAY,OAAO,GAAG,QAAQ,QAAQ;AAAA,IADpC;AAAA,IAAqC;AAAA;AAG5D;AAsDA,SAAS,IAAI,CAAC,OAAgB,MAAM,KAAsB;AAAA,EACxD,OAAO,OAAO,UAAU,YAAY,MAAM,SAAS,KAAK,MAAM,UAAU,OAAO,MAAM,KAAK,MAAM,SAC3F,CAAC,eAAe,KAAK,KAAK;AAAA;AAwBjC,SAAS,MAAM,CAAC,OAAkD;AAAA,EAChE,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAAA;AAG5E,SAAS,cAAc,CAAC,OAAoC;AAAA,EAC1D,IAAI,UAAU,aAAa,UAAU;AAAA,IAAM;AAAA,EAC3C,IAAI,CAAC,KAAK,KAAK;AAAA,IAAG,MAAM,IAAI,iBAAiB,mBAAmB;AAAA,EAChE,OAAO;AAAA;AAIF,SAAS,uBAAuB,CAAC,OAAgB,YAAY,oBAAqD;AAAA,EACvH,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,MAAM,QAAQ,MAAM,MAAM,KAAK,MAAM,OAAO,SAAS,WAAW;AAAA,IACrF,MAAM,IAAI,iBAAiB,mBAAmB;AAAA,EAChD;AAAA,EAEA,MAAM,SAAiC,CAAC;AAAA,EACxC,WAAW,QAAQ,MAAM,QAAQ;AAAA,IAC/B,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI;AAAA,MAAG,MAAM,IAAI,iBAAiB,mBAAmB;AAAA,IACrF,MAAM,aAAa,KAAK,eAAe,YAAY,SAAS,KAAK;AAAA,IACjE,MAAM,iBAAiB,KAAK,qBAAqB,YAAY,QAAQ,KAAK;AAAA,IAC1E,IAAI,OAAO,eAAe,YAAY,OAAO,mBAAmB,WAAW;AAAA,MACzE,MAAM,IAAI,iBAAiB,mBAAmB;AAAA,IAChD;AAAA,IACA,MAAM,cAAc,eAAe,KAAK,YAAY;AAAA,IACpD,eAAe,KAAK,sBAAsB;AAAA,IAC1C,IAAI,eAAe,UAAU,mBAAmB;AAAA,MAAM;AAAA,IACtD,OAAO,KAAK;AAAA,MACV,IAAI,KAAK;AAAA,MACT,QAAQ;AAAA,MACR,WAAW;AAAA,SACP,gBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY;AAAA,MACnD,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AAAA,EACA,OAAO;AAAA;;;AC3IF,IAAM,8BAA8B;AACpC,IAAM,0BAA0B,gBAAgB;AAChD,IAAM,6BAA6B;AACnC,IAAM,0BAA0B;AAChC,IAAM,6BAA6B;;;AC0BnC,IAAM,wBAAwB;AAC9B,IAAM,iBAAiB;AAC9B,IAAM,sBAAsB;AACrB,IAAM,cAAc;AACpB,IAAM,uBAAuB;AAC7B,IAAM,oBAAoB;AAC1B,SAAS,kBAAkB,CAAC,KAAmB;AAAA,EACpD,OAAO,IAAI,aAAa;AAAA;AAEnB,SAAS,wBAAwB,CAAC,MAAoB;AAAA,EAC3D,IAAI,SAAS,qBAAqB;AAAA,IAChC,MAAM,IAAI,mBAAmB,oBAAoB,iFAAiF;AAAA,EACpI;AAAA;AAEF,IAAM,iCAAiC;AACvC,IAAM,iBAAiB;AACvB,IAAM,cAAc;AACpB,IAAM,4BAA4B;AAGlC,IAAM,uBAAuB,IAAI;AACjC,IAAM,wBAAwB;AAAA,EAC5B;AAAA,EAAc;AAAA,EAAgB;AAAA,EAAqB;AAAA,EAAyB;AAAA,EAC5E;AAAA,EAAY;AAAA,EAAc;AAAA,EAAe;AAAA,EAAU;AAAA,EAA0B;AAAA,EAC7E;AAAA,EAAe;AAAA,EAAgB;AAAA,EAAS;AAAA,EAAc;AAAA,EAAQ;AAAA,EAC9D;AAAA,EAAmB;AAAA,EAAsB;AAC3C;AAeA,SAAS,MAAM,CAAC,OAA4B;AAAA,EAC1C,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,GAAG;AAAA,IACvE,MAAM,IAAI,mBAAmB,oBAAoB,+BAA+B;AAAA,EAClF;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,QAAQ,CAAC,MAA2B;AAAA,EAC3C,MAAM,QAAQ,OAAO,IAAI;AAAA,EACzB,IAAI,MAAM,SAAS,cAAc,MAAM,SAAS,UAAU;AAAA,IACxD,MAAM,IAAI,mBAAmB,oBAAoB,8CAA8C;AAAA,EACjG;AAAA,EACA,MAAM,SAAS,MAAM,SAAS,aAAa,MAAM,WAAW,MAAM;AAAA,EAClE,MAAM,aAAa,WAAW,YAAY,QAAQ,OAAO,MAAM;AAAA,EAC/D,IAAI,OAAO,WAAW,SAAS,YAAY,CAAC,wBAAwB,KAAK,WAAW,IAAI,GAAG;AAAA,IACzF,MAAM,IAAI,mBAAmB,oBAAoB,4EAA4E;AAAA,EAC/H;AAAA,EACA,MAAM,aAAyB,KAAK,YAAY,MAAM,MAAM,KAAK;AAAA,EACjE,IAAI,MAAM,SAAS,YAAY,WAAW,QAAQ,SAAS,aAAa,WAAW,OAAO,YAAY,WAAW;AAAA,IAC/G,MAAM,UAAU,OAAO,WAAW,OAAO,OAAO;AAAA,IAChD,IAAI,CAAC,CAAC,QAAQ,OAAO,EAAE,SAAS,QAAQ,MAAM,KAAK,OAAO,QAAQ,eAAe,UAAU;AAAA,MACzF,MAAM,IAAI,mBAAmB,oBAAoB,qCAAqC;AAAA,IACxF;AAAA,IACA,WAAW,SAAS,EAAE,MAAM,WAAW,QAAQ,QAAQ,QAAQ,YAAY,QAAQ,WAAW;AAAA,EAChG;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,oBAAoB,CAAC,OAAmB,QAA0C;AAAA,EACzF,IAAI,MAAM,yBAAyB,WAAW;AAAA,IAC5C,MAAM,IAAI,mBAAmB,oBAAoB,mFAAmF;AAAA,EACtI;AAAA,EACA,IAAI,MAAM,UAAU,aAAa,CAAC,MAAM,QAAQ,MAAM,KAAK,GAAG;AAAA,IAC5D,MAAM,IAAI,mBAAmB,oBAAoB,6BAA6B;AAAA,EAChF;AAAA,EAEA,MAAM,OAAO,QAAQ,QAAQ;AAAA,EAC7B,IAAI,WAAW,UAAU,CAAC,MAAM,QAAQ,MAAM,QAAQ,GAAG;AAAA,IACvD,MAAM,IAAI,mBAAmB,oBAAoB,gCAAgC;AAAA,EACnF;AAAA,EACA,MAAM,MAAM,WAAW,SAAS,qCAAqC,KAAK,IAAI,KAAK,MAAM,KAAK,UAAU,KAAK,CAAC;AAAA,EAC9G,IAAI,QAAQ;AAAA,EACZ,IAAI,SAAS;AAAA,EACb,IAAI,IAAI,iBAAiB,aAAa,IAAI,iBAAiB;AAAA,IAAM,IAAI,eAAe;AAAA,EACpF,IAAI,OAAO,IAAI,iBAAiB;AAAA,IAAU,MAAM,IAAI,mBAAmB,oBAAoB,gCAAgC;AAAA,EAC3H,IAAI,OAAO,IAAI,UAAU;AAAA,IAAU,IAAI,QAAQ,CAAC,EAAE,MAAM,WAAW,MAAM,QAAQ,SAAS,CAAC,EAAE,MAAM,cAAc,MAAM,IAAI,MAAM,CAAC,EAAE,CAAC;AAAA,EACrI,IAAI,IAAI,UAAU;AAAA,IAAW,IAAI,QAAQ,CAAC;AAAA,EAC1C,IAAI,CAAC,MAAM,QAAQ,IAAI,KAAK;AAAA,IAAG,MAAM,IAAI,mBAAmB,oBAAoB,2DAA2D;AAAA,EAC3I,MAAM,aAAa,IAAI,IAAI,CAAC,WAAW,iBAAiB,wBAAwB,oBAAoB,2BAA2B,aAAa,YAAY,CAAC;AAAA,EACzJ,WAAW,QAAQ,IAAI,OAAO;AAAA,IAC5B,MAAM,QAAQ,OAAO,IAAI;AAAA,IACzB,IAAI,MAAM,SAAS,aAAa,OAAO,MAAM,SAAS;AAAA,MAAU,MAAM,OAAO;AAAA,IAC7E,IAAI,CAAC,WAAW,IAAI,MAAM,IAAI;AAAA,MAAG,MAAM,IAAI,mBAAmB,oBAAoB,yCAAyC;AAAA,IAC3H,IAAI,MAAM,SAAS,WAAW;AAAA,MAC5B,IAAI,CAAC,CAAC,UAAU,aAAa,QAAQ,WAAW,EAAE,SAAS,MAAM,IAAI;AAAA,QAAG,MAAM,IAAI,mBAAmB,oBAAoB,yCAAyC;AAAA,MAClK,IAAI,MAAM,SAAS;AAAA,QAAU,MAAM,OAAO;AAAA,IAC5C;AAAA,EACF;AAAA,EACA,IAAI,MAAM,QAAQ,IAAI,KAAK;AAAA,IAAG,IAAI,QAAQ,IAAI,MAAM,IAAI,QAAQ;AAAA,EAChE,IAAI,IAAI,gBAAgB,WAAW;AAAA,IACjC,IAAI,OAAO,IAAI,gBAAgB,UAAU;AAAA,MACvC,IAAI,CAAC,CAAC,QAAQ,QAAQ,UAAU,EAAE,SAAS,IAAI,WAAW;AAAA,QAAG,MAAM,IAAI,mBAAmB,oBAAoB,iCAAiC;AAAA,IACjJ,EAAO;AAAA,UAAI,cAAc,SAAS,IAAI,WAAW;AAAA,EACnD;AAAA,EACA,WAAW,SAAS;AAAA,IAAuB,OAAO,IAAI;AAAA,EACtD,OAAO;AAAA;AAGT,SAAS,cAAc,CAAC,SAAgC,QAAgC;AAAA,EACtF,WAAW,QAAQ,OAAO,KAAK,QAAQ,OAAO,GAAG;AAAA,IAC/C,IAAI,6FAA6F,KAAK,IAAI;AAAA,MAAG,OAAO,QAAQ,QAAQ;AAAA,EACtI;AAAA,EACA,UAAU,QAAQ,SAAS,cAAc,eAAe;AAAA,EACxD,UAAU,QAAQ,SAAS,cAAc,QAAQ;AAAA,EACjD,UAAU,QAAQ,SAAS,UAAU,WAAW,WAAW,qBAAqB,mBAAmB;AAAA,EACnG,IAAI,WAAW;AAAA,IAAU,UAAU,QAAQ,SAAS,gBAAgB,kBAAkB;AAAA;AAGxF,SAAS,mBAAmB,CAAC,SAA6C;AAAA,EACxE,IAAI,OAAO,YAAY,YAAY,YAAY,QAAQ,MAAM,QAAQ,OAAO;AAAA,IAAG,MAAM,IAAI,iBAAiB,mBAAmB;AAAA,EAC7H,MAAM,SAAU,QAAuB;AAAA,EACvC,IAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,OAAO,SAAS;AAAA,IAAK,MAAM,IAAI,iBAAiB,mBAAmB;AAAA,EACjG,MAAM,OAAO,CAAC,UAAmB,OAAO,UAAU,YAAY,MAAM,SAAS,KAAK,MAAM,UAAU,OAAO,UAAU,MAAM,KAAK,KAAK,CAAC,WAAW,KAAK,KAAK;AAAA,EACzJ,MAAM,SAA2B,CAAC;AAAA,EAClC,WAAW,SAAS,QAAQ;AAAA,IAC1B,IAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,KAAK,CAAC,KAAK,MAAM,IAAI,KAC9E,OAAO,MAAM,eAAe,YAAa,MAAM,iBAAiB,aAAa,CAAC,KAAK,MAAM,YAAY;AAAA,MAAI,MAAM,IAAI,iBAAiB,mBAAmB;AAAA,IAC5J,IAAI,MAAM,eAAe;AAAA,MAAQ,OAAO,KAAK,EAAE,IAAI,MAAM,KAAK,CAAC;AAAA,EACjE;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,gBAAgB,CAAC,OAAiC;AAAA,EACzD,OAAO,OAAO,UAAU,YACnB,IAAI,YAAY,EAAE,OAAO,KAAK,EAAE,cAAc,kCAC9C,MAAM,KAAK,EAAE,SAAS,KACtB,CAAC,WAAW,KAAK,KAAK;AAAA;AAG7B,SAAS,oBAAoB,CAAC,OAAiC;AAAA,EAC7D,OAAO,iBAAiB,KAAK,KAAK,CAAC,mBAAmB,KAAK,KAAK;AAAA;AAGlE,SAAS,mBAAmB,CAAC,SAAiC,MAAqB;AAAA,EACjF,WAAW,OAAO,OAAO,KAAK,OAAO,GAAG;AAAA,IACtC,IAAI,IAAI,YAAY,MAAM,0BAA0B,YAAY;AAAA,MAAG,OAAO,QAAQ;AAAA,EACpF;AAAA,EACA,IAAI,OAAO,SAAS,YAAY,SAAS,QAAQ,MAAM,QAAQ,IAAI;AAAA,IAAG;AAAA,EACtE,MAAM,cAAc;AAAA,EACpB,IAAI,CAAC,qBAAqB,YAAY,KAAK;AAAA,IAAG;AAAA,EAC9C,MAAM,OAAO,YAAY,iBAAiB,aACtC,SAAS,YAAY,wBACrB,SAAS,YAAY;AAAA,EACzB,IAAI,iBAAiB,IAAI;AAAA,IAAG,UAAU,SAAS,2BAA2B,IAAI;AAAA;AAGhF,SAAS,yBAAyB,CAAC,SAAsC;AAAA,EACvE,IAAI,QAAQ,IAAI,aAAa,wBAAwB,CAAC,qBAAqB,QAAQ,MAAM,QAAQ,OAAO;AAAA,IAAG;AAAA,EAC3G,IAAI,OAAO,QAAQ,SAAS,YAAY,QAAQ,SAAS,QAAQ,CAAC,MAAM,QAAQ,QAAQ,IAAI,GAAG;AAAA,IAC7F,QAAQ,OAAO,KAAK,QAAQ,MAAM,qBAAqB,MAAM;AAAA,EAC/D;AAAA;AAGF,SAAS,WAAW,CAAC,SAAiC,MAAkC;AAAA,EACtF,MAAM,YAAY,KAAK,YAAY;AAAA,EACnC,MAAM,QAAQ,OAAO,QAAQ,OAAO,EAAE,KAAK,EAAE,SAAS,IAAI,YAAY,MAAM,SAAS;AAAA,EACrF,OAAO,SAAS,iBAAiB,MAAM,EAAE,IAAI,MAAM,KAAK;AAAA;AAG1D,SAAS,SAAS,CAAC,SAAiC,MAAc,OAAqB;AAAA,EACrF,MAAM,YAAY,KAAK,YAAY;AAAA,EACnC,WAAW,OAAO,OAAO,KAAK,OAAO,GAAG;AAAA,IACtC,IAAI,IAAI,YAAY,MAAM;AAAA,MAAW,OAAO,QAAQ;AAAA,EACtD;AAAA,EACA,QAAQ,aAAa;AAAA;AAGvB,SAAS,eAAe,CAAC,UAAoB,aAA8B;AAAA,EACzE,MAAM,UAAU,IAAI;AAAA,EACpB,MAAM,aAAa,SAAS,QAAQ,IAAI,aAAa;AAAA,EACrD,IAAI,eAAe;AAAA,IAAM,QAAQ,IAAI,eAAe,UAAU;AAAA,EAC9D,QAAQ,IAAI,gBAAgB,WAAW;AAAA,EACvC,OAAO;AAAA;AAGT,SAAS,qBAAqB,CAAC,UAA6B;AAAA,EAC1D,MAAM,UAAU,IAAI,QAAQ,SAAS,OAAO;AAAA,EAE5C,WAAW,QAAQ,CAAC,oBAAoB,kBAAkB,mBAAmB;AAAA,IAAG,QAAQ,OAAO,IAAI;AAAA,EACnG,QAAQ,IAAI,gBAAgB,mBAAmB;AAAA,EAC/C,OAAO;AAAA;AAGT,SAAS,UAAS,CAAC,OAA0B,eAAe,kBAAkB;AAAA,EAC5E,OAAO,EAAE,SAAS,OAAO,WAAW,0CAA0C,MAAM,OAAO,QAAQ,kBAAkB,MAAM,OAAO,QAAQ,aAAa;AAAA;AAGzJ,SAAS,mBAAmB,CAAC,OAAgB,QAAwE;AAAA,EACnH,IAAI,iBAAiB,oBAAoB;AAAA,IACvC,IAAI,MAAM,SAAS;AAAA,MAAa,OAAO,EAAE,QAAQ,YAAY;AAAA,IAC7D,IAAI,MAAM,SAAS;AAAA,MAAc,OAAO,EAAE,QAAQ,cAAc,MAAM,aAAa;AAAA,IACnF,IAAI,MAAM,SAAS;AAAA,MAAkB,OAAO,EAAE,QAAQ,UAAU,MAAM,iBAAiB;AAAA,IACvF,OAAO,EAAE,QAAQ,UAAU,MAAM,MAAM,SAAU,MAAM,aAAa;AAAA,MAClE,OAAO,gBAAgB,MAAM,YAAY,MAAM,WAAW,QAAQ,MAAM,SAAS,MAAM;AAAA,IACzF,IAAI,CAAC,EAAG;AAAA,EACV;AAAA,EACA,IAAI,iBAAiB,kBAAkB;AAAA,IACrC,OAAO,MAAM,SAAS,YAAY,EAAE,QAAQ,YAAY,IAAI,EAAE,QAAQ,UAAU,MAAM,MAAM,KAAK;AAAA,EACnG;AAAA,EACA,MAAM,WAAY,OAA6B;AAAA,EAC/C,IAAI,aAAa;AAAA,IAA2B,OAAO,EAAE,QAAQ,YAAY;AAAA,EACzE,IAAI,UAAU,SAAS,WAAW;AAAA,IAAG,OAAO,EAAE,QAAQ,UAAU,MAAM,aAAa;AAAA,EACnF,IAAI,aAAa,uBAAuB,UAAU,WAAW,WAAW;AAAA,IAAG,OAAO,EAAE,QAAQ,UAAU,MAAM,mBAAmB;AAAA,EAC/H,OAAO,EAAE,QAAQ,UAAU,MAAM,cAAc,OAAO,gBAAgB,OAAO,aAAa,4CAA4C,MAAM,EAAE;AAAA;AAGhJ,SAAS,YAAY,CAAC,QAAqB;AAAA,EACzC,OAAO,EAAE,IAAI,iBAAiB,WAAW,MAAM,OAAO;AAAA;AAGxD,eAAe,aAAa,CAAC,SAA6D;AAAA,EACxF,IAAI;AAAA,IACF,MAAM,SAAS,YAAY,IAAI,CAAC,QAAQ,QAAQ,YAAY,QAAQ,IAAI,CAAC,CAAC;AAAA,IAC1E,MAAM,OAAO,MAAM,QAAQ,WAAY,KAAK,aAAa,MAAM,CAAC;AAAA,IAChE,MAAM,QAAQ,QAAQ,OAAO,SAAS,WAAY,KAAoB,QAAQ;AAAA,IAC9E,IAAI,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,GAAG;AAAA,MAC/D,OAAO,EAAE,QAAQ,UAAU,MAAM,uBAAuB,OAAO,gBAAgB,OAAO,YAAY,mCAAmC,QAAQ,gBAAgB,EAAE;AAAA,IACjK;AAAA,IACA,MAAM;AAAA,IACN,IAAI,QAAQ,OAAO;AAAA,MAAS,OAAO,EAAE,QAAQ,YAAY;AAAA;AAAA,EAG3D,OAAO,EAAE,QAAQ,UAAU,MAAM,sBAAsB;AAAA;AAGzD,SAAS,cAAc,CACrB,UACA,MACA,QACgC;AAAA,EAChC,MAAM,OAAO,CAAC,YACZ,QAAQ,MAAM,OAAO,EAAE,QAAQ,UAAU,MAAM,sBAAsB,EAAE;AAAA,EACzE,MAAM,OAAO,CAAC,YAA4E;AAAA,IACxF,MAAM,UAAU,KAAK,OAAO;AAAA,IAC5B,IAAI,WAAW;AAAA,MAAW,OAAO;AAAA,IACjC,IAAI,OAAO;AAAA,MAAS,OAAO,QAAQ,QAAQ,EAAE,QAAQ,YAAY,CAAC;AAAA,IAClE,OAAO,IAAI,QAAQ,CAAC,YAAY;AAAA,MAC9B,IAAI,UAAU;AAAA,MACd,MAAM,SAAS,CAAC,WAAkC;AAAA,QAChD,IAAI;AAAA,UAAS;AAAA,QACb,UAAU;AAAA,QACV,OAAO,oBAAoB,SAAS,OAAO;AAAA,QAC3C,QAAQ,MAAM;AAAA;AAAA,MAEhB,MAAM,UAAU,MAAM,OAAO,EAAE,QAAQ,YAAY,CAAC;AAAA,MACpD,OAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AAAA,MACxD,QAAQ,KAAK,QAAQ,MAAM,OAAO,EAAE,QAAQ,UAAU,MAAM,sBAAsB,CAAC,CAAC;AAAA,KACrF;AAAA;AAAA,EAEH,OAAO,KAAK,IAAI,EAAE,KAAK,CAAC,eAAe,WAAW,WAAW,cAAc,KAAK,QAAQ,IAAI,UAAU;AAAA;AAGxG,eAAe,WAAW,CAAC,QAAoB,QAAqD;AAAA,EAClG,IAAI;AAAA,IACF,MAAM,WAAW,YAAY,IAAI,CAAC,QAAQ,YAAY,QAAQ,IAAI,CAAC,CAAC;AAAA,IACpE,MAAM,OAAO,QAAQ,aAAa,QAAQ,CAAC;AAAA,IAC3C,OAAO,EAAE,QAAQ,YAAY;AAAA,IAC7B,OAAO,OAAO;AAAA,IACd,IAAI,OAAO;AAAA,MAAS,OAAO,EAAE,QAAQ,YAAY;AAAA,IACjD,MAAM,OAAQ,OAA6B;AAAA,IAC3C,OAAO,EAAE,QAAQ,UAAU,MAAM,MAAM,SAAS,WAAW,IAAI,eAAe,aAAa;AAAA;AAAA;AAI/F,SAAS,iBAAiB,CAAC,UAA6B;AAAA,EACtD,MAAM,cAAc,SAAS,QAAQ,IAAI,cAAc,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,YAAY;AAAA,EAC9F,OAAO,gBAAgB,sBAAsB,aAAa,SAAS,OAAO,MAAM;AAAA;AAIlF,SAAS,SAAS,CAAC,OAA8B;AAAA,EAC/C,MAAM,WAAW,MAAM;AAAA,EACvB,IAAI,UAAU;AAAA,IAAK,OAAO,SAAS;AAAA,EACnC,MAAM,SAAS,UAAU,YAAY,CAAC,GAAG,IAAI,aAAW,IAAI,SAAS;AAAA,EACrE,IAAI,UAAU,UAAU;AAAA,IAAW,MAAM,KAAK,UAAU,SAAS,OAAO;AAAA,EACxE,IAAI,UAAU,OAAO;AAAA,IAAW,MAAM,KAAK,OAAO,SAAS,IAAI;AAAA,EAC/D,IAAI,UAAU,UAAU;AAAA,IAAW,MAAM,KAAK,UAAU,SAAS,OAAO;AAAA,EACxE,MAAM,OAAO,MAAM,SAAS,SAAS,WAAW,UAAU,QAAQ,KAAK,UAAU,MAAM,IAAI;AAAA,EAC3F,IAAI,UAAU,YAAY;AAAA,IAAO,MAAM,KAAK,GAAG,KAAK,MAAM;AAAA,CAAI,EAAE,IAAI,UAAQ,SAAS,MAAM,CAAC;AAAA,EAC5F,OAAO,GAAG,MAAM,KAAK;AAAA,CAAI;AAAA;AAAA;AAAA;AAI3B,gBAAgB,iBAAiB,CAAC,QAAoB,QAAoD;AAAA,EACxG,iBAAiB,YAAY,OAAO,OAAO,aAAa,MAAM,CAAC,GAAG;AAAA,IAChE,MAAM,OAAO,SAAS,QAAQ,OAAO,SAAS,SAAS,YAAY,CAAC,MAAM,QAAQ,SAAS,IAAI,IAC3F,SAAS,OAAqB,CAAC;AAAA,IACnC,MAAM,EAAE,MAAM,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO,WAAW,MAAM,SAAS;AAAA,EACtF;AAAA;AAGF,SAAS,cAAc,CAAC,OAAyD;AAAA,EAC/E,IAAI,MAAM,UAAU,aAAa,MAAM,UAAU,YAAY;AAAA,IAAO;AAAA,EACpE,IAAI,MAAM,SAAS;AAAA,IAAS,OAAO,EAAE,QAAQ,UAAU,MAAM,iBAAiB;AAAA,EAC9E,MAAM,SAAS,MAAM,SAAS,uBAAuB,cACjD,MAAM,SAAS,wBAAwB,eACvC,MAAM,SAAS,oBAAoB,WAAW;AAAA,EAClD,IAAI,CAAC;AAAA,IAAQ;AAAA,EACb,MAAM,WAAW,MAAM,KAAK;AAAA,EAC5B,IAAI,CAAC,YAAY,OAAO,aAAa,YAAY,MAAM,QAAQ,QAAQ,KAClE,SAAS,WAAW,UAAU,CAAC,MAAM,QAAQ,SAAS,MAAM,KAC3D,WAAW,eAAe,SAAS,SAAS;AAAA,IAChD,OAAO,EAAE,QAAQ,UAAU,MAAM,mBAAmB;AAAA,EACtD,OAAO,WAAW,cAAc,EAAE,OAAO,IAAI,EAAE,QAAQ,MAAM,WAAW,WAAW,mBAAmB,aAAa;AAAA;AAGrH,SAAS,kBAAkB,CACzB,QACA,QACA,cACA,QACA,QACA,sBAAsB,OACtB,SAAS,OACyE;AAAA,EAClF,MAAM,qBAAqB,IAAI;AAAA,EAC/B,MAAM,UAAU,MAAM,mBAAmB,MAAM,OAAO,UAAU,WAAW;AAAA,EAC3E,IAAI,OAAO;AAAA,IAAS,mBAAmB,MAAM,OAAO,UAAU,WAAW;AAAA,EACpE;AAAA,WAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AAAA,EAC7D,IAAI;AAAA,EACJ,IAAI,UAAU;AAAA,EACd,MAAM,SAAS,CAAC,WAAkC;AAAA,IAChD,IAAI;AAAA,MAAS;AAAA,IACb,UAAU;AAAA,IACV,kBAAkB,MAAM;AAAA;AAAA,EAE1B,MAAM,aAAa,IAAI,QAA+B,CAAC,YAAY;AAAA,IAAE,oBAAoB;AAAA,GAAU;AAAA,EACnG,MAAM,YAAY,SAAS,YAAY,IAAI,uBAAuB,EAAE,QAAQ,cAAc,kBAAkB,QAAQ,oBAAoB,CAAC;AAAA,EACzI,IAAI;AAAA,EACJ,MAAM,SAAS,SAAS,kBAAkB,QAAQ,mBAAmB,MAAM,IACvE,cAAc,OAAO,OAAO,aAAa,mBAAmB,MAAM,CAAC,GAAG,EAAE,QAAQ,mBAAmB,OAAO,CAAC;AAAA,EAC/G,MAAM,WAAY,gBAAgB,GAA2B;AAAA,IAC3D,IAAI;AAAA,MACF,iBAAiB,SAAS,QAAQ;AAAA,QAChC,MAAM,SAAS,WAAW,QAAQ,KAAK,KAAK,CAAC;AAAA,QAC7C,IAAI,QAAQ;AAAA,UACV,MAAM,UAAU,eAAe,KAAK;AAAA,UACpC,IAAI,SAAS;AAAA,YAAE,kBAAkB;AAAA,YAAS,OAAO,OAAO;AAAA,UAAG;AAAA,QAC7D,EAAO,SAAI,MAAM,SAAS,wBAAwB,MAAM,SAAS,uBAAuB;AAAA,UACtF,MAAM,QAAQ,UAAW,OAAO;AAAA,UAChC,kBAAkB,MAAM,aAAa,cACjC,EAAE,QAAQ,YAAY,IACtB,EAAE,QAAQ,cAAc,MAAM,aAAa;AAAA,UAG/C,OAAO,eAAe;AAAA,QACxB;AAAA,QACA,IAAI,WAAW;AAAA,UAAa,MAAM,UAAU,KAAK;AAAA,QAC5C;AAAA,qBAAW,SAAS;AAAA,YAAQ,MAAM,SAAS,KAAK,UAAU,KAAK;AAAA;AAAA;AAAA,MACtE;AAAA,MACA,MAAM,QAAQ,WAAW,OAAO;AAAA,MAChC,MAAM,UAAU,SAAS,mBAAmB,EAAE,QAAQ,UAAmB,MAAM,iBAAiB,IAC5F,MAAO,aAAa,cAAc,EAAE,QAAQ,YAAqB,IAAI,EAAE,QAAQ,cAAuB,MAAM,aAAa;AAAA,MAC7H,IAAI,WAAW;AAAA,QAAQ,MAAM;AAAA;AAAA;AAAA,MAC7B,OAAO,OAAO;AAAA,MACd,OAAO,OAAO;AAAA,MACd,MAAM,UAAU,oBAAoB,OAAO,MAAM;AAAA,MACjD,OAAO,QAAQ,WAAW,cAAc,mBAAmB,UAAU,OAAO;AAAA,MAC5E,IAAI,CAAC,UAAU,QAAQ,WAAW,YAAY,QAAQ,OAAO;AAAA,QAG3D,MAAM,OAAO,WAAU,QAAQ,OAAO,QAAQ,IAAI;AAAA,QAClD,MAAM,WAAW,cACb;AAAA,QAAuB,KAAK,UAAU,EAAE,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS,KAAK,SAAS,OAAO,MAAM,OAAO,KAAK,CAAC;AAAA;AAAA,IACzH,SAAS,KAAK,UAAU,EAAE,OAAO,KAAK,CAAC;AAAA;AAAA;AAAA,QAC3C;AAAA,MACF;AAAA,MACA,MAAM;AAAA,cACN;AAAA,MACA,OAAO,oBAAoB,SAAS,OAAO;AAAA;AAAA,IAE5C,EAAE,OAAO,eAAe;AAAA,EAC3B,MAAM,OAAO,IAAI,eAA2B;AAAA,SACpC,KAAI,CAAC,YAAY;AAAA,MACrB,IAAI;AAAA,QACF,MAAM,OAAO,MAAM,SAAS,KAAK;AAAA,QACjC,IAAI,KAAK;AAAA,UAAM,WAAW,MAAM;AAAA,QAC3B,SAAI,KAAK,UAAU;AAAA,UAAW,WAAW,QAAQ,IAAI,YAAY,EAAE,OAAO,KAAK,KAAK,CAAC;AAAA,QAC1F,OAAO,OAAO;AAAA,QACd,WAAW,MAAM,KAAK;AAAA;AAAA;AAAA,IAG1B,MAAM,CAAC,QAAQ;AAAA,MACb,OAAO,mBAAmB,EAAE,QAAQ,YAAY,CAAC;AAAA,MACjD,mBAAmB,MAAM,UAAU,WAAW;AAAA,MACzC,QAAQ,QAAQ,SAAS,SAAS,MAAM,CAAC,EAAE,MAAM,MAAG;AAAA,QAAG;AAAA,OAAS;AAAA;AAAA,EAEzE,GAAG,EAAE,eAAe,EAAE,CAAC;AAAA,EACvB,OAAO,EAAE,MAAM,WAAW;AAAA;AAAA;AAGrB,MAAM,oBAAoB;AAAA,EACd,WAAW,IAAI;AAAA,EACf,kBAAkB,IAAI;AAAA,EAEvC,WAAW,GAAG;AAAA,EAEd,aAAa,CAAC,SAAuD;AAAA,IACnE,yBAAyB,QAAQ,IAAI,QAAQ;AAAA,IAC7C,MAAM,SAAU,QAAQ,IAAI,aAAa,eAAgB,QAAQ,YAAY,aAAa,IAAI,gBAAgB,KAAK,QAAQ,IAAI,aAAa,YACxI,WACA,QAAQ,IAAI,aAAa,wBACzB,SACA,mBAAmB,QAAQ,GAAG,IAAI,cAAc;AAAA,IACpD,IAAI,QAAQ,IAAI,WAAW,aAAa;AAAA,MACtC,IAAI,WAAW;AAAA,QAAW,OAAO;AAAA,MACjC,MAAM,QAAQ,WAAW,WAAW,YAAY,OAAO,QAAQ,IAAI;AAAA,MACnE,MAAM,SAAS,OAAO,WAAW;AAAA,MACjC,MAAM,eAAe,QAAQ,oBAAoB,KAAK,IAAI;AAAA,MAC1D,QAAQ,OAAO,QAAQ,qBAAqB,OAAO,MAA8B,IAAI;AAAA,MACrF,IAAI,WAAW;AAAA,QAAU,QAAQ,IAAI,WAAW;AAAA,MAChD,eAAe,SAAS,MAAM;AAAA,MAC9B,KAAK,SAAS,IAAI,QAAQ,WAAW,OAAO,OAAO;AAAA,QAGjD;AAAA,QAAQ;AAAA,QAAQ;AAAA,QAAc,MAAM;AAAA,QAAM,yBAAyB,WAAW;AAAA,QAC9E,kBAAkB,IAAI;AAAA,MACxB,CAAC,CAAC;AAAA,MACF,OAAO;AAAA,IACT;AAAA,IACA,IAAI,QAAQ,IAAI,aAAa,sBAAsB;AAAA,MACjD,oBAAoB,QAAQ,SAAS,QAAQ,IAAI;AAAA,MACjD,0BAA0B,OAAO;AAAA,MACjC,OAAO;AAAA,IACT;AAAA,IACA,IAAI,WAAW;AAAA,MAAW,OAAO;AAAA,IACjC,IAAI,WAAW,UAAU;AAAA,MACvB,QAAQ,OAAO;AAAA,MACf,QAAQ,IAAI,WAAW;AAAA,MACvB,QAAQ,IAAI,SAAS,mBAAmB,mBAAmB,2BAA2B;AAAA,MACtF,UAAU,QAAQ,SAAS,UAAU,kBAAkB;AAAA,MACvD,UAAU,QAAQ,SAAS,cAAc,uBAAuB;AAAA,MAChE,UAAU,QAAQ,SAAS,cAAc,uBAAuB;AAAA,MAChE,KAAK,SAAS,IAAI,QAAQ,WAAW,OAAO,OAAO;AAAA,QACjD;AAAA,QAAQ,QAAQ;AAAA,QAAO,cAAc;AAAA,QAAO,yBAAyB;AAAA,QACrE,gBAAgB,QAAQ,YAAY,aAAa,IAAI,gBAAgB;AAAA,QACrE,kBAAkB,IAAI;AAAA,MACxB,CAAC,CAAC;AAAA,MACF,OAAO;AAAA,IACT;AAAA,IACA,MAAM,QAAQ,OAAO,QAAQ,IAAI;AAAA,IACjC,MAAM,SAAS,MAAM,WAAW;AAAA,IAChC,MAAM,eAAe,oBAAoB,KAAK;AAAA,IAC9C,MAAM,iBAAiB,iBAAiB,MAAM,gBAAgB,IAAI,MAAM,mBAAmB;AAAA,IAC3F,MAAM,mBAAmB,YAAY,QAAQ,SAAS,YAAY;AAAA,IAClE,MAAM,YAAY,oBAAoB;AAAA,IACtC,QAAQ,OAAO,WAAW,SACtB,qCAAqC,KAAK,IAC1C,+BAA+B,KAAK;AAAA,IACxC,IAAI,WAAW,UAAU,mBAAmB;AAAA,MAAW,QAAQ,KAAK,mBAAmB;AAAA,IACvF,QAAQ,IAAI,WAAW;AAAA,IACvB,0BAA0B,OAAO;AAAA,IACjC,UAAU,QAAQ,SAAS,UAAU,mBAAmB;AAAA,IACxD,UAAU,QAAQ,SAAS,gBAAgB,kBAAkB;AAAA,IAC7D,UAAU,QAAQ,SAAS,cAAc,0BAA0B;AAAA,IACnE,UAAU,QAAQ,SAAS,cAAc,0BAA0B;AAAA,IACnE,oBAAoB,QAAQ,SAAS,QAAQ,IAAI;AAAA,IACjD,WAAW,OAAO,OAAO,KAAK,QAAQ,OAAO,GAAG;AAAA,MAC9C,IAAI,IAAI,YAAY,MAAM;AAAA,QAAc,OAAO,QAAQ,QAAQ;AAAA,IACjE;AAAA,IACA,IAAI,cAAc;AAAA,MAAW,UAAU,QAAQ,SAAS,cAAc,SAAS;AAAA,IAC/E,KAAK,SAAS,IAAI,QAAQ,WAAW,OAAO,OAAO;AAAA,MACjD;AAAA,MACA;AAAA,MACA;AAAA,MACA,yBAAyB,QAAQ,IAAI,WAAW,kBAC3C,QAAQ,IAAI,aAAa;AAAA,MAC9B,kBAAkB,IAAI;AAAA,IACxB,CAAC,CAAC;AAAA,IACF,OAAO;AAAA;AAAA,EAGT,wBAAwB,CAAC,SAAuD;AAAA,IAC9E,IAAI,QAAQ,IAAI,WAAW,aAAa;AAAA,MACtC,IAAI,QAAQ,IAAI,aAAa,qBAAqB;AAAA,QAChD,QAAQ,OAAO,qBAAqB,OAAO,QAAQ,IAAI,GAAG,WAAW;AAAA,QACrE,eAAe,SAAS,WAAW;AAAA,MACrC,EAAO,SAAI,QAAQ,IAAI,aAAa;AAAA,QAAa,eAAe,SAAS,QAAQ;AAAA,MACjF,OAAO;AAAA,IACT;AAAA,IACA,IAAI,QAAQ,IAAI,aAAa,sBAAsB;AAAA,MACjD,oBAAoB,QAAQ,SAAS,QAAQ,IAAI;AAAA,MACjD,0BAA0B,OAAO;AAAA,IACnC;AAAA,IACA,OAAO;AAAA;AAAA,OAGH,YAAW,CAAC,QAA2B,SAAyD;AAAA,IACpG,IAAI,qBAAqB,IAAI,OAAO,UAAU,GAAG;AAAA,MAC/C,MAAM,UAAU,KAAK,SAAS,IAAI,QAAQ,SAAS;AAAA,MACnD,MAAM,UAAU,MAAM;AAAA,QACpB,IAAI,KAAK,SAAS,IAAI,QAAQ,SAAS,MAAM;AAAA,UAAS,KAAK,SAAS,OAAO,QAAQ,SAAS;AAAA;AAAA,MAEzF,OAAO,WAAW,KAAK,SAAS,OAAO;AAAA,MAC5C,OAAO;AAAA,IACT;AAAA,IACA,IAAI,KAAK,gBAAgB,IAAI,OAAO,QAAQ;AAAA,MAAG,OAAO;AAAA,IACtD,MAAM,cAAc,QAAQ,cAAc,IAAI,IAAI,QAAQ,WAAW,IAAI;AAAA,IACzE,MAAM,UAAsC,KAAK,SAAS,IAAI,QAAQ,SAAS,MAAM,aAAa,WAAW,kBACxG,YAAY,aAAa,wBAAwB,QAAQ,OAAO,YAAY,MAAM,SACnF,OAAO,OAAO;AAAA,MAAE,QAAQ;AAAA,MAAsB,QAAQ;AAAA,MAAM,cAAc;AAAA,MACxE,yBAAyB;AAAA,MAAM,QAAQ;AAAA,MAAM,kBAAkB,IAAI;AAAA,IAAoB,CAAC,IAAI;AAAA,IAClG,IAAI,YAAY,aAAa,QAAQ,iBAAiB,IAAI,OAAO,QAAQ;AAAA,MAAG,OAAO;AAAA,IACnF,QAAQ,iBAAiB,IAAI,OAAO,QAAQ;AAAA,IAC5C,IAAI,QAAQ;AAAA,MAAQ,KAAK,gBAAgB,IAAI,OAAO,QAAQ;AAAA,IAC5D,MAAM,QAAQ,QAAQ,cAAc,YAChC,OAAO,OAAO,KAAK,SAAS,WAAW,QAAQ,UAAU,CAAC,IAC1D;AAAA,IACJ,IAAI,UAAU,WAAW,KAAK,SAAS,IAAI,QAAQ,SAAS,MAAM;AAAA,MAAS,KAAK,SAAS,IAAI,QAAQ,WAAW,KAAK;AAAA,IACrH,MAAM,UAAU,MAAM;AAAA,MAAE,IAAI,KAAK,SAAS,IAAI,QAAQ,SAAS,MAAM;AAAA,QAAO,KAAK,SAAS,OAAO,QAAQ,SAAS;AAAA;AAAA,IAClH,MAAM,kBAAkB,CAAC,eAA+C;AAAA,MACtE,IAAI,CAAC,MAAM;AAAA,QAAQ,qBAAqB,IAAI,UAAU;AAAA,MACjD,WAAW,KAAK,SAAS,OAAO;AAAA;AAAA,IAEvC,MAAM,OAAO,CAAC,aAAiC;AAAA,MAC7C,QAAQ,iBAAiB,IAAI,QAAQ;AAAA,MACrC,IAAI,QAAQ;AAAA,QAAQ,KAAK,gBAAgB,IAAI,QAAQ;AAAA,MACrD,OAAO;AAAA;AAAA,IAET,MAAM,gBAAgB,CAAC,QAAgB,YAA4C,UAAgD;AAAA,MACjI,MAAM,WAAW,KAAK,IAAI,SAAS,KAAK,UAAU,EAAE,OAAO,WAAU,KAAK,EAAE,CAAC,GAAG;AAAA,QAC9E;AAAA,QACA,YAAY,OAAO,SAAS;AAAA,QAC5B,SAAS,gBAAgB,OAAO,UAAU,iCAAiC;AAAA,MAC7E,CAAC,CAAC;AAAA,MACF,gBAAgB,UAAU;AAAA,MAC1B,OAAO,EAAE,UAAU,WAAW;AAAA;AAAA,IAGhC,IAAI,MAAM,UAAU,CAAC,OAAO,SAAS,IAAI;AAAA,MAGlC,OAAO,WAAW,KAAK,SAAS,OAAO;AAAA,MAC5C,OAAO;AAAA,IACT;AAAA,IAIA,IAAI,CAAC,QAAQ,YAAY;AAAA,MACvB,OAAO,cAAc,KAAK,QAAQ,QAAQ,EAAE,QAAQ,UAAU,MAAM,oBAAoB,CAAC,CAAC;AAAA,IAC5F;AAAA,IAEA,IAAI,CAAC,OAAO,SAAS,IAAI;AAAA,MACvB,MAAM,UAAU,MAAM,cAAc,OAAO;AAAA,MAC3C,OAAO,cAAc,OAAO,SAAS,QAAQ,eAAe,OAAO,YAAY,QAAQ,QAAQ,OAAO,GAAG,QAAQ,MAAM,GAAG,WAAW,UAAU,QAAQ,QAAQ,SAAS;AAAA,IAC1K;AAAA,IAEA,IAAI,MAAM,WAAW,UAAU;AAAA,MAC7B,IAAI,CAAC,kBAAkB,OAAO,QAAQ,GAAG;AAAA,QACvC,MAAM,iBAAiB,YAAY,QAAQ,YAAY,QAAQ,MAAM,EAAE,KAAK,CAAC,YAC3E,QAAQ,WAAW,cAAc,EAAE,QAAQ,UAAU,MAAM,uBAAuB,IAAI,OAAO;AAAA,QAC/F,OAAO,cAAc,KAAK,eAAe,OAAO,YAAY,gBAAgB,QAAQ,MAAM,CAAC;AAAA,MAC7F;AAAA,MACA,IAAI,CAAC,OAAO,SAAS,MAAM;AAAA,QACzB,OAAO,cAAc,KAAK,eAAe,OAAO,YAAY,QAAQ,QAAQ,EAAE,QAAQ,UAAU,MAAM,mBAAmB,CAAC,GAAG,QAAQ,MAAM,CAAC;AAAA,MAC9I;AAAA,MACA,IAAI;AAAA,QACF,MAAM,UAAU,MAAM,QAAQ,WAAW,KAAK,aAAa,QAAQ,MAAM,CAAC;AAAA,QAC1E,MAAM,SAAS,MAAM,iBAAiB,CAAC,IAAI,MAAM,OAAO,oBAAoB,OAAO,IAAI,wBAAwB,OAAO;AAAA,QACtH,IAAI,MAAM,mBAAmB,CAAC,WAAW,OAAO,YAAY,YAAY,CAAC,MAAM,QAAS,QAAuB,MAAM;AAAA,UAAI,MAAM,IAAI,iBAAiB,mBAAmB;AAAA,QACvK,MAAM,OAAO,MAAM,iBAAiB,UAAU;AAAA,UAC5C,QAAQ;AAAA,UACR,MAAM,OAAO,IAAI,GAAG,UAAU,EAAE,IAAI,QAAQ,SAAS,UAAU,SAAS,EAAE;AAAA,QAC5E;AAAA,QACA,MAAM,aAAa,eAAe,OAAO,YAAY,QAAQ,QAAQ,EAAE,QAAQ,YAAqB,CAAC,GAAG,QAAQ,MAAM;AAAA,QACtH,MAAM,WAAW,KAAK,IAAI,SAAS,KAAK,UAAU,IAAI,GAAG;AAAA,UACvD,QAAQ,OAAO,SAAS;AAAA,UACxB,YAAY,OAAO,SAAS;AAAA,UAC5B,SAAS,gBAAgB,OAAO,UAAU,iCAAiC;AAAA,QAC7E,CAAC,CAAC;AAAA,QACF,gBAAgB,UAAU;AAAA,QAC1B,OAAO,EAAE,UAAU,WAAW;AAAA,QAC9B,OAAO,OAAO;AAAA,QACd,MAAM,UAAU,oBAAoB,OAAO,QAAQ,gBAAgB;AAAA,QACnE,OAAO,cAAc,KAAK,eAAe,OAAO,YAAY,QAAQ,QAAQ,OAAO,GAAG,QAAQ,MAAM,GAAG,WAAW,UAAU,QAAQ,QAAQ,SAAS;AAAA;AAAA,IAEzJ;AAAA,IAEA,MAAM,cAAc,OAAO,SAAS,QAAQ,IAAI,cAAc;AAAA,IAC9D,MAAM,QAAQ,aAAa,MAAM,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,YAAY;AAAA,IAC/D,MAAM,iBAAiB,UAAU,uBAAwB,MAAM,WAAW,QAAQ,UAAU;AAAA,IAC5F,MAAM,0BAA0B,MAAM,2BAA2B,gBAAgB;AAAA,IACjF,IAAK,CAAC,kBAAkB,CAAC,2BAA4B,CAAC,OAAO,SAAS,MAAM;AAAA,MAC1E,MAAM,iBAAiB,CAAC,kBAAkB,CAAC,0BACvC,YAAY,QAAQ,YAAY,QAAQ,MAAM,EAAE,KAAK,CAAC,YACtD,QAAQ,WAAW,cAAc,EAAE,QAAQ,UAAU,MAAM,uBAAuB,IAAI,OAAO,IAC7F,QAAQ,QAAQ,EAAE,QAAQ,UAAmB,MAAM,mBAAmB,CAAC;AAAA,MAC3E,OAAO,cAAc,KAAK,eAAe,OAAO,YAAY,gBAAgB,QAAQ,MAAM,CAAC;AAAA,IAC7F;AAAA,IACA,IAAI,MAAM,QAAQ;AAAA,MAChB,MAAM,YAAY,mBAAmB,QAAQ,YAAY,MAAM,QAAQ,MAAM,cAAc,QAAQ,QAAQ,QAAQ,kBAAkB,MAAM,MAAM,MAAM,MAAM;AAAA,MAG7J,MAAM,mBAAmB,QAAQ,KAAK;AAAA,QACpC,UAAU;AAAA,QACV,OAAO,WAAW,KAAK,cAAY,SAAS,WAAW,WAAW,WAAW,UAAU,YACrF,OAAO,EAAE,QAAQ,UAAmB,MAAM,sBAAsB,EAAE;AAAA,MACtE,CAAC;AAAA,MACD,gBAAgB,gBAAgB;AAAA,MAChC,OAAO;AAAA,QACL,UAAU,KAAK,IAAI,SAAS,UAAU,MAAM;AAAA,UAAE,QAAQ,OAAO,SAAS;AAAA,UAAQ,YAAY,OAAO,SAAS;AAAA,UACxG,SAAS,MAAM,SAAS,sBAAsB,OAAO,QAAQ,IAAI,gBAAgB,OAAO,UAAU,mBAAmB;AAAA,QAAE,CAAC,CAAC;AAAA,QAC3H,YAAY;AAAA,MACd;AAAA,IACF;AAAA,IACA,IAAI;AAAA,MACF,MAAM,cAAc,MAAM,qBAAqB,QAAQ,WAAW,OAAO,aAAa,QAAQ,MAAM,CAAC,GAAG;AAAA,QACtG,QAAQ,QAAQ;AAAA,QAChB,SAAS,EAAE,gBAAgB,EAAE,eAAe,MAAM,aAAa,EAAE;AAAA,QACjE,QAAQ,MAAM;AAAA,QACd,kBAAkB,QAAQ;AAAA,MAC5B,CAAC;AAAA,MACD,MAAM,OAAO,MAAM,WAAW,SAAS,0BAA0B,YAAY,UAAU,MAAM,IAAI,IAAI,YAAY;AAAA,MACjH,MAAM,qBAAqD,QAAQ,QACjE,YAAY,aAAa,cAAc,EAAE,QAAQ,YAAY,IAAI,EAAE,QAAQ,cAAc,MAAM,aAAa,CAC9G;AAAA,MACA,MAAM,sBAAsB,eAAe,OAAO,YAAY,oBAAoB,QAAQ,MAAM;AAAA,MAChG,gBAAgB,mBAAmB;AAAA,MACnC,OAAO,EAAE,UAAU,KAAK,IAAI,SAAS,KAAK,UAAU,IAAI,GAAG,EAAE,QAAQ,OAAO,SAAS,QAAQ,YAAY,OAAO,SAAS,YAAY,SAAS,gBAAgB,OAAO,UAAU,iCAAiC,EAAE,CAAC,CAAC,GAAG,YAAY,oBAAoB;AAAA,MACvP,OAAO,OAAO;AAAA,MACd,MAAM,UAAU,oBAAoB,OAAO,QAAQ,gBAAgB;AAAA,MACnE,MAAM,mBAAmB,eAAe,OAAO,YAAY,QAAQ,QAAQ,OAAO,GAAG,QAAQ,MAAM;AAAA,MACnG,OAAO,cAAc,KAAK,kBAAkB,WAAW,UAAU,QAAQ,QAAQ,SAAS;AAAA;AAAA;AAIhG;;;ACtpBA,SAAS,eAAe,CAAC,OAAiC;AAAA,EACxD,OAAO,OAAO,UAAU,YACnB,MAAM,UAAU,KAChB,MAAM,UAAU,OAChB,MAAM,KAAK,MAAM;AAAA;AAGjB,IAAM,qBAAqB,aAChC,MAAwB;AAAA,SACN,qBAAqB;AAAA,SACrB,OAAO;AAAA,SACP,UAAU;AAAA,EAET;AAAA,EAEjB,WAAW,CAAC,SAAkC,CAAC,GAAG;AAAA,IAChD,IAAI,OAAO,eAAe,aAAa,CAAC,gBAAgB,OAAO,UAAU,GAAG;AAAA,MAC1E,MAAM,IAAI,MAAM,yEAAyE;AAAA,IAC3F;AAAA,IACA,KAAK,UAAU,IAAI;AAAA;AAAA,EAGrB,gBAAgB,CAAC,SAA+I;AAAA,IAC9J,MAAM,OAAO,QAAQ,IAAI;AAAA,IACzB,IAAI,SAAS,gBAAgB,QAAQ,OAAO,YAAY,MAAM;AAAA,MAAO,OAAO,EAAE,SAAS,QAAQ,UAAU,CAAC,MAAM,EAAE;AAAA,IAClH,OAAO,QAAQ,OAAO,YAAY,MAAM,WAAW,mBAAmB,QAAQ,GAAG,KAAK,CAAC,wBAAwB,8BAA8B,EAAE,SAAS,IAAI,KAAK,EAAE,SAAS,cAAc,UAAU,CAAC,QAAQ,UAAU,EAAE,IAAI,EAAE,SAAS,OAAO;AAAA;AAAA,EAGjP,QAAQ,CAAC,OAA0B;AAAA,IACjC,MAAM,qBAAqB,IAAI,iBAAiB,aAAW;AAAA,MACzD,yBAAyB,QAAQ,IAAI,QAAQ;AAAA,MAC7C,IAAI,QAAQ,IAAI,WAAW,yBAAyB,mBAAmB,QAAQ,GAAG;AAAA,QAChF,QAAQ,IAAI,WAAW;AAAA,MACpB,SAAI,QAAQ,IAAI,WAAW,4BAA4B,mBAAmB,QAAQ,GAAG;AAAA,QACxF,QAAQ,IAAI,WAAW;AAAA,MACzB,OAAO;AAAA,KACR;AAAA,IACD,MAAM,gBAAgB,IACpB,EAAE,MAAM,iBAAiB,OAAO,IAAI,GACpC,CAAC,YAAY,KAAK,QAAQ,cAAc,OAAO,CACjD;AAAA,IAEA,MAAM,gBAAgB,IACpB,EAAE,MAAM,yCAAyC,OAAO,KAAK,GAC7D,CAAC,YAAY,KAAK,QAAQ,yBAAyB,OAAO,CAC5D;AAAA,IACA,MAAM,cAAc,WAClB,EAAE,MAAM,iBAAiB,OAAO,IAAI,GACpC,CAAC,QAAQ,YAAgC,KAAK,QAAQ,YAAY,QAAQ,OAAO,CACnF;AAAA;AAEJ,CACF;AAEA,IAAe;",
|
|
28
|
-
"debugId": "
|
|
27
|
+
"mappings": "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",
|
|
28
|
+
"debugId": "76D0FF2CAF8435B164756E2164756E21",
|
|
29
29
|
"names": []
|
|
30
30
|
}
|
|
@@ -253,6 +253,23 @@
|
|
|
253
253
|
"https://chatgpt.com"
|
|
254
254
|
],
|
|
255
255
|
"allowedRequests": [
|
|
256
|
+
{
|
|
257
|
+
"pathname": "/backend-api/codex/alpha/search",
|
|
258
|
+
"methods": [
|
|
259
|
+
"POST"
|
|
260
|
+
],
|
|
261
|
+
"outboundHeaders": {
|
|
262
|
+
"passthrough": [
|
|
263
|
+
"X-Codex-Turn-Metadata"
|
|
264
|
+
],
|
|
265
|
+
"set": {
|
|
266
|
+
"Accept": "application/json",
|
|
267
|
+
"Content-Type": "application/json",
|
|
268
|
+
"User-Agent": "codex-tui/0.154.0 (Mac OS 26.5.2; arm64) iTerm.app/3.6.11 (codex-tui; 0.154.0)",
|
|
269
|
+
"Originator": "codex-tui"
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
},
|
|
256
273
|
{
|
|
257
274
|
"pathname": "/backend-api/codex/responses",
|
|
258
275
|
"methods": [
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jeffusion/bungee-core",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.24.0",
|
|
4
4
|
"description": "Bungee reverse proxy core engine",
|
|
5
5
|
"main": "./dist/main.js",
|
|
6
6
|
"types": "./dist/main.d.ts",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"@bungee/ws-client": "npm:ws@8.22.0",
|
|
15
15
|
"@types/ws": "^8.18.1",
|
|
16
|
-
"@jeffusion/bungee-types": "^5.
|
|
16
|
+
"@jeffusion/bungee-types": "^5.24.0",
|
|
17
17
|
"@types/lodash-es": "^4.17.12",
|
|
18
18
|
"acorn": "^8.15.0",
|
|
19
19
|
"canonicalize": "3.0.0",
|