diff --git a/extensions/openbmb-clawxmemory/agent-skills/memory-dream-review/SKILL.md b/extensions/openbmb-clawxmemory/agent-skills/memory-dream-review/SKILL.md new file mode 100644 index 0000000000000..65db488cf9464 --- /dev/null +++ b/extensions/openbmb-clawxmemory/agent-skills/memory-dream-review/SKILL.md @@ -0,0 +1,45 @@ +--- +name: memory-dream-review +description: Review ClawXMemory memory quality with a read-only Dream pass over recent L1, linked project memories, and the global profile. +homepage: https://github.com/OpenBMB/ClawXMemory/tree/main/clawxmemory +metadata: + { + "openclaw": + { + "skillKey": "openbmb-clawxmemory", + "requires": { "config": ["plugins.entries.openbmb-clawxmemory.enabled"] }, + }, + } +--- + +# Memory Dream Review + +Use this skill when the user asks to audit memory quality, clean up duplicate project memories, inspect profile drift, or decide what should be promoted into longer-term memory. + +## Primary Path + +1. Call `memory_dream_review`, usually with `focus: "all"`. +2. Report findings in this order: + - `projectRebuild` + - `cleanup` + - `profileSuggestions` + - `ambiguous` + - `noAction` + - `timeLayerNotes` +3. State clearly that Dream review is read-only and no memory records were modified. +4. Only call `memory_get` if the user asks to inspect one specific finding in detail. + +## Focus Guidance + +- Project cleanup or duplicate project summaries: + use `memory_dream_review({ focus: "projects" })` +- Profile drift or promotion questions: + use `memory_dream_review({ focus: "profile" })` +- Mixed governance review: + use `memory_dream_review({ focus: "all" })` + +## Guardrails + +- Do not imply that Dream already rewrote L2 or profile memory. +- Treat `timeLayerNotes` as integrity observations only, not rewrite instructions. +- Prefer citing the returned `evidenceRefs` instead of guessing where a finding came from. diff --git a/extensions/openbmb-clawxmemory/package.json b/extensions/openbmb-clawxmemory/package.json index 2755d6e07e438..48e2f838c06e3 100644 --- a/extensions/openbmb-clawxmemory/package.json +++ b/extensions/openbmb-clawxmemory/package.json @@ -57,7 +57,7 @@ "@sinclair/typebox": "^0.34.41" }, "devDependencies": { - "openclaw": "^2026.3.31", + "openclaw": "^2026.3.28", "vitest": "^4.0.5" }, "peerDependencies": { diff --git a/extensions/openbmb-clawxmemory/skills/context-template.md b/extensions/openbmb-clawxmemory/skills/context-template.md index b2b017b49a2c3..ad100abd0ce97 100644 --- a/extensions/openbmb-clawxmemory/skills/context-template.md +++ b/extensions/openbmb-clawxmemory/skills/context-template.md @@ -5,6 +5,8 @@ enoughAt={{enoughAt}} {{profileBlock}} +{{evidenceNoteBlock}} + {{l2Block}} {{l1Block}} diff --git a/extensions/openbmb-clawxmemory/src/config.ts b/extensions/openbmb-clawxmemory/src/config.ts index d83104dd76d9b..543a6ddc89434 100644 --- a/extensions/openbmb-clawxmemory/src/config.ts +++ b/extensions/openbmb-clawxmemory/src/config.ts @@ -11,6 +11,8 @@ export interface PluginRuntimeConfig { maxMessageChars: number; heartbeatBatchSize: number; autoIndexIntervalMinutes: number; + autoDreamIntervalMinutes: number; + autoDreamMinNewL1: number; indexIdleDebounceMs: number; defaultIndexingSettings: IndexingSettings; recallEnabled: boolean; @@ -58,11 +60,23 @@ export const pluginConfigJsonSchema = { type: "integer", default: 60, }, + autoDreamIntervalMinutes: { + type: "integer", + default: 360, + }, + autoDreamMinNewL1: { + type: "integer", + default: 10, + }, reasoningMode: { type: "string", enum: ["answer_first", "accuracy_first"], default: "answer_first", }, + recallTopK: { + type: "integer", + default: 10, + }, maxAutoReplyLatencyMs: { type: "integer", default: 1800, @@ -127,12 +141,24 @@ export const pluginConfigUiHints = { label: "Auto Index Interval", placeholder: "60", }, + autoDreamIntervalMinutes: { + label: "Auto Dream Interval", + placeholder: "360", + }, + autoDreamMinNewL1: { + label: "Auto Dream L1 Threshold", + placeholder: "10", + }, reasoningMode: { label: "Reasoning Mode", - help: "answer_first stops when reply latency budget is about to run out; accuracy_first prefers full recursive memory retrieval.", + help: "answer_first stops at L2 evidence notes; accuracy_first can continue down to L1 and L0.", + }, + recallTopK: { + label: "Recall Top K", + placeholder: "10", }, maxAutoReplyLatencyMs: { - label: "Max Auto Reply Latency (ms)", + label: "Legacy Max Auto Reply Latency (ms)", placeholder: "1800", }, uiEnabled: { @@ -186,16 +212,12 @@ export function buildPluginConfig(raw: unknown): PluginRuntimeConfig { const skillsDir = typeof cfg.skillsDir === "string" && cfg.skillsDir.trim() ? cfg.skillsDir : undefined; - const configuredLatency = - typeof cfg.maxAutoReplyLatencyMs === "number" && Number.isFinite(cfg.maxAutoReplyLatencyMs) - ? Math.floor(cfg.maxAutoReplyLatencyMs) - : typeof cfg.maxAutoReplyLatencyMs === "string" && cfg.maxAutoReplyLatencyMs.trim() - ? Number.parseInt(cfg.maxAutoReplyLatencyMs, 10) - : typeof cfg.recallBudgetMs === "number" && Number.isFinite(cfg.recallBudgetMs) - ? Math.floor(cfg.recallBudgetMs) - : typeof cfg.recallBudgetMs === "string" && cfg.recallBudgetMs.trim() - ? Number.parseInt(cfg.recallBudgetMs, 10) - : 1800; + const configuredRecallTopK = + typeof cfg.recallTopK === "number" && Number.isFinite(cfg.recallTopK) + ? Math.floor(cfg.recallTopK) + : typeof cfg.recallTopK === "string" && cfg.recallTopK.trim() + ? Number.parseInt(cfg.recallTopK, 10) + : 10; const captureStrategy = cfg.captureStrategy === "last_turn" ? "last_turn" : "full_session"; const runtime: PluginRuntimeConfig = { dataDir, @@ -205,13 +227,18 @@ export function buildPluginConfig(raw: unknown): PluginRuntimeConfig { maxMessageChars: toInteger(cfg.maxMessageChars, 6000), heartbeatBatchSize: Math.max(1, toInteger(cfg.heartbeatBatchSize, 30)), autoIndexIntervalMinutes: Math.max(0, toInteger(cfg.autoIndexIntervalMinutes, 60)), + autoDreamIntervalMinutes: Math.max(0, toInteger(cfg.autoDreamIntervalMinutes, 360)), + autoDreamMinNewL1: Math.max(0, toInteger(cfg.autoDreamMinNewL1, 10)), indexIdleDebounceMs: Math.max(200, toInteger(cfg.indexIdleDebounceMs, 2500)), defaultIndexingSettings: { reasoningMode: cfg.reasoningMode === "accuracy_first" ? "accuracy_first" : "answer_first", - maxAutoReplyLatencyMs: Math.max( - 300, - Number.isFinite(configuredLatency) ? configuredLatency : 1800, + recallTopK: Math.max( + 1, + Math.min(50, Number.isFinite(configuredRecallTopK) ? configuredRecallTopK : 10), ), + autoIndexIntervalMinutes: Math.max(0, toInteger(cfg.autoIndexIntervalMinutes, 60)), + autoDreamIntervalMinutes: Math.max(0, toInteger(cfg.autoDreamIntervalMinutes, 360)), + autoDreamMinNewL1: Math.max(0, toInteger(cfg.autoDreamMinNewL1, 10)), }, recallEnabled: toBoolean(cfg.recallEnabled, true), addEnabled: toBoolean(cfg.addEnabled, true), diff --git a/extensions/openbmb-clawxmemory/src/hooks.ts b/extensions/openbmb-clawxmemory/src/hooks.ts index e71f105a3230e..3580c512addda 100644 --- a/extensions/openbmb-clawxmemory/src/hooks.ts +++ b/extensions/openbmb-clawxmemory/src/hooks.ts @@ -50,6 +50,8 @@ export function registerMemoryHooks(api: OpenClawPluginApi, runtime: MemoryPlugi if (!api.on) return; api.on("before_prompt_build", runtime.handleBeforePromptBuild, { priority: 60 }); + api.on("before_tool_call", runtime.handleBeforeToolCall, { priority: 60 }); + api.on("after_tool_call", runtime.handleAfterToolCall); api.on("before_message_write", runtime.handleBeforeMessageWrite, { priority: 80 }); api.on("agent_end", runtime.handleAgentEnd); api.on("before_reset", runtime.handleBeforeReset); diff --git a/extensions/openbmb-clawxmemory/src/runtime.ts b/extensions/openbmb-clawxmemory/src/runtime.ts index 781e5ffa52fed..a0c74d553d825 100644 --- a/extensions/openbmb-clawxmemory/src/runtime.ts +++ b/extensions/openbmb-clawxmemory/src/runtime.ts @@ -10,24 +10,34 @@ import type { PluginHookBeforePromptBuildEvent, PluginHookBeforePromptBuildResult, PluginHookBeforeResetEvent, + PluginHookBeforeToolCallEvent, + PluginHookAfterToolCallEvent, PluginLogger, PluginRuntime, + PluginHookToolContext, } from "openclaw/plugin-sdk/plugin-runtime"; import { buildPluginConfig, type PluginRuntimeConfig } from "./config.js"; import { + type CaseToolEvent, + type CaseTraceRecord, type DashboardOverview, + DreamRewriteRunner, HeartbeatIndexer, LlmMemoryExtractor, MemoryRepository, ReasoningRetriever, loadSkillsRuntime, + type DreamRunResult, type HeartbeatStats, type IndexingSettings, type MemoryMessage, type MemoryExportBundle, type MemoryImportResult, type MemoryUiSnapshot, + type RetrievalResult, + type RetrievalTrace, type StartupRepairStatus, + hashText, nowIso, } from "./core/index.js"; import { @@ -42,15 +52,20 @@ import { buildPluginTools } from "./tools.js"; import { LocalUiServer } from "./ui-server.js"; const MEMORY_REPAIR_VERSION = "2026-03-24-recall-injection-cleanup-v15"; -const INDEXING_SETTINGS_MIGRATION_VERSION = "2026-03-16-reasoning-mode-settings-v1"; +const INDEXING_SETTINGS_MIGRATION_VERSION = "2026-04-02-auto-dream-settings-v3"; const PLUGIN_ID = "openbmb-clawxmemory"; const NATIVE_MEMORY_PLUGIN_ID = "memory-core"; +const LAST_DREAM_AT_STATE_KEY = "lastDreamAt"; +const LAST_DREAM_STATUS_STATE_KEY = "lastDreamStatus"; +const LAST_DREAM_SUMMARY_STATE_KEY = "lastDreamSummary"; +const LAST_DREAM_L1_ENDED_AT_STATE_KEY = "lastDreamL1EndedAt"; const CHAT_FACING_MEMORY_TOOLS = ["memory_overview", "memory_list", "memory_flush"] as const; const MANAGED_BOUNDARY_RESTART_TIMEOUT_MS = process.platform === "win32" ? 15_000 : 8_000; const RECENT_INBOUND_TTL_MS = 30_000; const COMMAND_REPLY_TTL_MS = 10_000; const NON_MEMORY_TURN_TTL_MS = 15_000; const STARTUP_REPAIR_SNAPSHOT_LIMIT = 200; +const RECENT_CASE_LIMIT = 30; const STARTUP_FALLBACK_GREETING = "I'm ready. What would you like to do?"; const STARTUP_BOUNDARY_RUNNING_MESSAGE = "Applying managed OpenClaw memory config and requesting a gateway restart."; @@ -283,6 +298,109 @@ function truncateMessageText(text: string, maxMessageChars: number): string { return `${text.slice(0, maxMessageChars)}...`; } +function previewText(text: string, maxChars = 280): string { + const trimmed = text.trim(); + if (trimmed.length <= maxChars) return trimmed; + return `${trimmed.slice(0, maxChars)}...`; +} + +function previewJson(value: unknown, maxChars = 280): string { + try { + const rendered = typeof value === "string" ? value : JSON.stringify(value); + return previewText(rendered || "", maxChars); + } catch { + return previewText(String(value), maxChars); + } +} + +function canonicalizeUserQuery(text: string): string { + const info = inspectTranscriptMessage({ + role: "user", + content: text, + }); + const normalized = info.role === "user" ? info.content.trim() : ""; + return normalized || text.trim(); +} + +function buildCaseId(sessionKey: string, query: string): string { + return `case_${hashText(`${sessionKey}:${query}:${Date.now()}:${Math.random().toString(36).slice(2, 10)}`)}`; +} + +function buildToolEventId(sessionKey: string, toolName: string, occurredAt: string): string { + return `tool_${hashText(`${sessionKey}:${toolName}:${occurredAt}:${Math.random().toString(36).slice(2, 10)}`)}`; +} + +function buildRecallSkippedTrace(query: string, reason: string): RetrievalTrace { + const startedAt = nowIso(); + const traceId = `trace_${hashText(`${reason}:${query}:${startedAt}`)}`; + return { + traceId, + query, + mode: "auto", + startedAt, + finishedAt: startedAt, + steps: [ + { + stepId: `${traceId}:step:1`, + kind: "recall_start", + title: "Recall Started", + status: "info", + inputSummary: previewText(query, 220), + outputSummary: "Runtime inspected this turn before attempting retrieval.", + details: [ + { + key: "recall-query", + label: "Recall Query", + kind: "kv", + entries: [{ label: "query", value: query }], + }, + ], + }, + { + stepId: `${traceId}:step:2`, + kind: "recall_skipped", + title: "Recall Skipped", + status: "skipped", + inputSummary: `reason=${reason}`, + outputSummary: `Automatic recall did not run because ${reason}.`, + refs: { reason }, + details: [ + { + key: "skip-reason", + label: "Skip Reason", + kind: "kv", + entries: [{ label: "reason", value: reason }], + }, + ], + }, + ], + }; +} + +function deriveCasePathSummary( + trace: RetrievalTrace | null | undefined, + enoughAt: RetrievalResult["enoughAt"] | undefined, +): string { + if (enoughAt === "profile") return "profile"; + if (!trace?.steps?.length) return enoughAt ?? "none"; + const stepKinds = new Set(trace.steps.map((step) => step.kind)); + if (stepKinds.has("hop4_decision") || stepKinds.has("l0_candidates")) return "l2->l1->l0"; + if (stepKinds.has("hop3_decision") || stepKinds.has("l1_candidates")) return "l2->l1"; + if (stepKinds.has("hop2_decision") || stepKinds.has("l2_candidates")) return "l2"; + if (stepKinds.has("recall_skipped")) return "none"; + return enoughAt ?? "none"; +} + +function extractAssistantReply(messages: MemoryMessage[]): string { + for (let index = messages.length - 1; index >= 0; index -= 1) { + const message = messages[index]; + if (message?.role === "assistant" && message.content.trim()) { + return message.content.trim(); + } + } + return ""; +} + function sanitizeStoredMessages(messages: MemoryMessage[]): MemoryMessage[] { const cleaned: MemoryMessage[] = []; for (let index = 0; index < messages.length; index += 1) { @@ -325,6 +443,32 @@ function sanitizeL0Record( }); } +function buildRecentMessagesForRecall( + rawMessages: unknown[], + currentPrompt: string, + config: { includeAssistant: boolean; maxMessageChars: number }, +): MemoryMessage[] { + const normalizedPrompt = canonicalizeUserQuery(currentPrompt); + const normalized = sanitizeStoredMessages( + normalizeMessages(rawMessages, { + captureStrategy: "full_session", + includeAssistant: config.includeAssistant, + maxMessageChars: config.maxMessageChars, + }), + ); + + if (normalizedPrompt) { + while (normalized.length > 0) { + const last = normalized[normalized.length - 1]; + if (last?.role !== "user") break; + if (canonicalizeUserQuery(last.content) !== normalizedPrompt) break; + normalized.pop(); + } + } + + return normalized.slice(-4); +} + function shouldLogStats(stats: HeartbeatStats): boolean { return ( stats.l0Captured > 0 || @@ -424,6 +568,7 @@ export class MemoryPluginRuntime { readonly repository: MemoryRepository; readonly indexer: HeartbeatIndexer; readonly retriever: ReasoningRetriever; + readonly dreamRewriter: DreamRewriteRunner; private readonly pluginRuntime: PluginRuntime | undefined; private currentApiConfig: Record | undefined; @@ -437,8 +582,12 @@ export class MemoryPluginRuntime { private readonly startupGraceByRawSession = new Set(); private readonly nonMemoryTurnByRawSession = new Map(); private readonly pendingCommandReplyByRawSession = new Map(); + private readonly caseById = new Map(); + private readonly recentCaseIds: string[] = []; + private readonly activeCaseIdByRawSession = new Map(); - private heartbeatTimer: ReturnType | undefined; + private autoIndexTimer: ReturnType | undefined; + private autoDreamTimer: ReturnType | undefined; private uiServer: LocalUiServer | undefined; private queuePromise: Promise | undefined; private activeSessionKey: string | undefined; @@ -450,6 +599,8 @@ export class MemoryPluginRuntime { private startupRepairStatus: StartupRepairStatus = "idle"; private startupRepairMessage = ""; private startupRepairSnapshot: MemoryUiSnapshot | undefined; + private dreamRunPromise: Promise | undefined; + private dreamRunLocked = false; constructor(options: MemoryPluginRuntimeOptions) { this.logger = safeLog(options.logger); @@ -480,6 +631,9 @@ export class MemoryPluginRuntime { getSettings: () => this.indexer.getSettings(), isBackgroundBusy: () => this.indexingInProgress, }); + this.dreamRewriter = new DreamRewriteRunner(this.repository, extractor, { + logger: this.logger, + }); if (this.config.uiEnabled) { this.uiServer = new LocalUiServer( @@ -494,10 +648,13 @@ export class MemoryPluginRuntime { getSettings: () => this.indexer.getSettings(), saveSettings: (partial) => this.applyIndexingSettings(partial), runIndexNow: () => this.flushAllNow("manual"), + runDreamNow: () => this.runDreamNow("manual"), exportMemoryBundle: () => this.repository.exportMemoryBundle(), importMemoryBundle: (bundle) => this.replaceMemoryBundle(bundle), getRuntimeOverview: () => this.getRuntimeOverview(), getStartupRepairSnapshot: (limit) => this.getStartupRepairSnapshot(limit), + listCaseTraces: (limit) => this.listRecentCaseTraces(limit), + getCaseTrace: (caseId) => this.getCaseTrace(caseId), }, this.logger, ); @@ -537,6 +694,164 @@ export class MemoryPluginRuntime { return sliceUiSnapshot(this.startupRepairSnapshot, limit); } + private listRecentCaseTraces(limit: number): CaseTraceRecord[] { + return this.repository.listRecentCaseTraces(limit); + } + + private getCaseTrace(caseId: string): CaseTraceRecord | undefined { + return this.repository.getCaseTrace(caseId); + } + + private trimCaseBuffer(): void { + while (this.recentCaseIds.length > RECENT_CASE_LIMIT) { + const removedId = this.recentCaseIds.pop(); + if (!removedId) break; + this.caseById.delete(removedId); + for (const [sessionKey, activeCaseId] of this.activeCaseIdByRawSession.entries()) { + if (activeCaseId === removedId) { + this.activeCaseIdByRawSession.delete(sessionKey); + } + } + } + } + + private upsertCase(record: CaseTraceRecord): void { + this.caseById.set(record.caseId, record); + const existingIndex = this.recentCaseIds.indexOf(record.caseId); + if (existingIndex >= 0) this.recentCaseIds.splice(existingIndex, 1); + this.recentCaseIds.unshift(record.caseId); + this.trimCaseBuffer(); + this.repository.saveCaseTrace(record, RECENT_CASE_LIMIT); + } + + private ensureCase(rawSessionKey: string, query: string): CaseTraceRecord { + const trimmedSession = rawSessionKey.trim(); + const normalizedQuery = canonicalizeUserQuery(query); + const activeCaseId = this.activeCaseIdByRawSession.get(trimmedSession); + if (activeCaseId) { + const activeRecord = this.caseById.get(activeCaseId); + if (activeRecord && activeRecord.status === "running") return activeRecord; + } + + const startedAt = nowIso(); + const record: CaseTraceRecord = { + caseId: buildCaseId(trimmedSession, normalizedQuery || startedAt), + sessionKey: trimmedSession, + query: normalizedQuery, + startedAt, + status: "running", + toolEvents: [], + assistantReply: "", + }; + this.activeCaseIdByRawSession.set(trimmedSession, record.caseId); + this.upsertCase(record); + return record; + } + + private getActiveCase(rawSessionKey: string): CaseTraceRecord | undefined { + const trimmedSession = rawSessionKey.trim(); + if (!trimmedSession) return undefined; + const caseId = this.activeCaseIdByRawSession.get(trimmedSession); + if (!caseId) return undefined; + return this.caseById.get(caseId); + } + + private interruptActiveCase(rawSessionKey: string, reason = "interrupted_by_new_turn"): void { + const trimmedSession = rawSessionKey.trim(); + if (!trimmedSession) return; + const caseId = this.activeCaseIdByRawSession.get(trimmedSession); + if (!caseId) return; + const record = this.caseById.get(caseId); + if (!record || record.status !== "running") { + this.activeCaseIdByRawSession.delete(trimmedSession); + return; + } + record.status = "interrupted"; + record.finishedAt = nowIso(); + if ( + record.retrieval?.trace && + !record.retrieval.trace.steps.some((step) => step.kind === "recall_skipped") + ) { + record.retrieval.trace.steps.push({ + stepId: `${record.retrieval.trace.traceId}:step:${record.retrieval.trace.steps.length + 1}`, + kind: "recall_skipped", + title: "Recall Interrupted", + status: "warning", + inputSummary: `reason=${reason}`, + outputSummary: "A newer user turn interrupted this case before completion.", + }); + record.retrieval.trace.finishedAt = nowIso(); + } + this.upsertCase(record); + this.activeCaseIdByRawSession.delete(trimmedSession); + } + + private updateCaseRetrieval( + rawSessionKey: string, + query: string, + result: Pick, + ): void { + const record = this.ensureCase(rawSessionKey, query); + const trace = result.trace ? cloneJson(result.trace) : null; + record.retrieval = { + intent: result.intent, + enoughAt: result.enoughAt, + injected: Boolean(result.context.trim()), + contextPreview: previewText(result.context, 1200), + evidenceNotePreview: previewText(result.evidenceNote, 1200), + pathSummary: deriveCasePathSummary(trace, result.enoughAt), + trace, + }; + this.upsertCase(record); + } + + private updateCaseRecallSkipped(rawSessionKey: string, query: string, reason: string): void { + const record = this.ensureCase(rawSessionKey, query); + record.retrieval = { + intent: "general", + enoughAt: "none", + injected: false, + contextPreview: "", + evidenceNotePreview: "", + pathSummary: "none", + trace: buildRecallSkippedTrace(query, reason), + }; + this.upsertCase(record); + } + + private appendCaseToolEvent(rawSessionKey: string, query: string, event: CaseToolEvent): void { + const record = + this.getActiveCase(rawSessionKey) ?? + (query.trim() ? this.ensureCase(rawSessionKey, query) : undefined); + if (!record) return; + record.toolEvents.push(event); + this.upsertCase(record); + } + + private finalizeCase( + rawSessionKey: string, + query: string, + status: CaseTraceRecord["status"], + assistantReply = "", + ): void { + const trimmedSession = rawSessionKey.trim(); + if (!trimmedSession) return; + const record = + this.getActiveCase(trimmedSession) ?? + (query.trim() ? this.ensureCase(trimmedSession, query) : undefined); + if (!record) return; + if (assistantReply.trim()) { + record.assistantReply = previewText(assistantReply, 4000); + } + record.status = status; + record.finishedAt = nowIso(); + if (record.retrieval?.trace) { + record.retrieval.trace.finishedAt = record.finishedAt; + } + this.upsertCase(record); + this.activeCaseIdByRawSession.delete(trimmedSession); + } + private clearEphemeralMemoryState(): void { for (const sessionKey of Array.from(this.idleIndexTimers.keys())) { this.clearIdleTimer(sessionKey); @@ -553,6 +868,9 @@ export class MemoryPluginRuntime { this.startupGraceByRawSession.clear(); this.nonMemoryTurnByRawSession.clear(); this.pendingCommandReplyByRawSession.clear(); + this.caseById.clear(); + this.recentCaseIds.splice(0); + this.activeCaseIdByRawSession.clear(); this.retriever.resetTransientState(); } @@ -585,7 +903,7 @@ export class MemoryPluginRuntime { start(): void { if (this.started || this.stopped) return; this.started = true; - this.rescheduleHeartbeat(); + this.rescheduleBackgroundTasks(); this.uiServer?.start(); void this.runStartupInitialization(); } @@ -594,10 +912,7 @@ export class MemoryPluginRuntime { if (this.stopped) return; this.stopped = true; this.started = false; - if (this.heartbeatTimer) { - clearInterval(this.heartbeatTimer); - this.heartbeatTimer = undefined; - } + this.clearBackgroundTimers(); for (const sessionKey of Array.from(this.idleIndexTimers.keys())) { this.clearIdleTimer(sessionKey); } @@ -796,38 +1111,60 @@ export class MemoryPluginRuntime { handleBeforePromptBuild = async ( event: PluginHookBeforePromptBuildEvent, - _ctx: PluginHookAgentContext, + ctx: PluginHookAgentContext, ): Promise => { - if (!this.config.recallEnabled) return; const prompt = typeof event.prompt === "string" ? event.prompt : ""; - if (prompt.trim().length < 2) return; + const normalizedPrompt = canonicalizeUserQuery(prompt); + const rawSessionKey = + typeof ctx.sessionKey === "string" && ctx.sessionKey.trim() + ? ctx.sessionKey.trim() + : resolveSessionKey(ctx as Record); + if ( + !normalizedPrompt || + isSessionStartupMarkerText(normalizedPrompt) || + isControlCommandText(normalizedPrompt) + ) { + return; + } + if (!this.config.recallEnabled) { + if (normalizedPrompt) + this.updateCaseRecallSkipped(rawSessionKey, normalizedPrompt, "recall_disabled"); + return; + } + if (normalizedPrompt.length < 2) { + if (normalizedPrompt) + this.updateCaseRecallSkipped(rawSessionKey, normalizedPrompt, "prompt_too_short"); + return; + } try { const startedAt = Date.now(); const settings = this.indexer.getSettings(); - const retrieved = await this.retriever.retrieve(prompt, { + const recallTopK = Math.max(1, Math.min(50, settings.recallTopK || 10)); + const recentMessages = Array.isArray(event.messages) + ? buildRecentMessagesForRecall(event.messages, normalizedPrompt, { + includeAssistant: this.config.includeAssistant, + maxMessageChars: this.config.maxMessageChars, + }) + : []; + const retrieved = await this.retriever.retrieve(normalizedPrompt, { retrievalMode: "auto", - l2Limit: 4, - l1Limit: 2, - l0Limit: 1, + l2Limit: recallTopK, + l1Limit: recallTopK, + l0Limit: recallTopK, includeFacts: true, + recentMessages, }); const elapsedMs = Date.now() - startedAt; - if ( - settings.reasoningMode === "answer_first" && - elapsedMs > settings.maxAutoReplyLatencyMs + 300 - ) { - this.logger.warn?.( - `[clawxmemory] recall slow query_ms=${elapsedMs} prompt_chars=${prompt.length}`, - ); - } const injected = Boolean(retrieved.context?.trim()); + this.updateCaseRetrieval(rawSessionKey, normalizedPrompt, retrieved); this.logger.info?.( - `[clawxmemory] recall mode=${retrieved.debug?.mode ?? "none"} reasoning_mode=${settings.reasoningMode} latency_cap_ms=${settings.reasoningMode === "answer_first" ? settings.maxAutoReplyLatencyMs : "none"} enough_at=${retrieved.enoughAt} injected=${injected} elapsed_ms=${retrieved.debug?.elapsedMs ?? elapsedMs} cache_hit=${retrieved.debug?.cacheHit ? "1" : "0"}`, + `[clawxmemory] recall mode=${retrieved.debug?.mode ?? "none"} reasoning_mode=${settings.reasoningMode} recall_top_k=${recallTopK} enough_at=${retrieved.enoughAt} injected=${injected} elapsed_ms=${retrieved.debug?.elapsedMs ?? elapsedMs} cache_hit=${retrieved.debug?.cacheHit ? "1" : "0"}`, ); if (!retrieved.context.trim()) return; // Dynamic recall must stay in system prompt space; prependContext leaks into user-visible prompt displays. return { prependSystemContext: buildMemoryRecallSystemContext(retrieved.context) }; } catch (error) { + if (normalizedPrompt) this.updateCaseRecallSkipped(rawSessionKey, normalizedPrompt, "error"); this.logger.warn?.(`[clawxmemory] recall failed: ${String(error)}`); return; } @@ -855,6 +1192,17 @@ export class MemoryPluginRuntime { return; } + if (messageInfo.role === "user" && messageInfo.content.trim()) { + const normalizedQuery = canonicalizeUserQuery(messageInfo.content); + const activeCase = this.getActiveCase(rawSessionKey); + if (!activeCase || canonicalizeUserQuery(activeCase.query) !== normalizedQuery) { + if (activeCase?.status === "running") { + this.interruptActiveCase(rawSessionKey); + } + this.ensureCase(rawSessionKey, normalizedQuery); + } + } + if (messageInfo.role === "assistant" && !messageInfo.content && !messageInfo.hasToolCalls) { if (this.hasStartupGrace(rawSessionKey)) { this.clearStartupGrace(rawSessionKey); @@ -911,6 +1259,51 @@ export class MemoryPluginRuntime { this.appendPendingMessage(sessionKey, normalized); }; + handleBeforeToolCall = ( + event: PluginHookBeforeToolCallEvent, + ctx: PluginHookToolContext, + ): void => { + const rawSessionKey = typeof ctx.sessionKey === "string" ? ctx.sessionKey.trim() : ""; + if (!rawSessionKey || rawSessionKey.startsWith("temp:")) return; + const query = this.getActiveCase(rawSessionKey)?.query ?? ""; + if (!query) return; + const occurredAt = nowIso(); + this.appendCaseToolEvent(rawSessionKey, query, { + eventId: buildToolEventId(rawSessionKey, event.toolName, occurredAt), + phase: "start", + toolName: event.toolName, + ...(event.toolCallId ? { toolCallId: event.toolCallId } : {}), + occurredAt, + status: "running", + summary: `${event.toolName} started.`, + paramsPreview: previewJson(event.params, 360), + }); + }; + + handleAfterToolCall = (event: PluginHookAfterToolCallEvent, ctx: PluginHookToolContext): void => { + const rawSessionKey = typeof ctx.sessionKey === "string" ? ctx.sessionKey.trim() : ""; + if (!rawSessionKey || rawSessionKey.startsWith("temp:")) return; + const query = this.getActiveCase(rawSessionKey)?.query ?? ""; + if (!query) return; + const occurredAt = nowIso(); + const failed = typeof event.error === "string" && event.error.trim().length > 0; + const resultPreview = failed + ? previewText(event.error ?? "", 360) + : previewJson(event.result, 360); + this.appendCaseToolEvent(rawSessionKey, query, { + eventId: buildToolEventId(rawSessionKey, event.toolName, occurredAt), + phase: "result", + toolName: event.toolName, + ...(event.toolCallId ? { toolCallId: event.toolCallId } : {}), + occurredAt, + status: failed ? "error" : "success", + summary: failed ? `${event.toolName} failed.` : `${event.toolName} completed.`, + paramsPreview: previewJson(event.params, 240), + resultPreview, + ...(typeof event.durationMs === "number" ? { durationMs: event.durationMs } : {}), + }); + }; + handleAgentEnd = async ( event: PluginHookAgentEndEvent, ctx: PluginHookAgentContext, @@ -944,12 +1337,35 @@ export class MemoryPluginRuntime { this.pendingBySession.delete(sessionKey); this.recentInboundBySession.delete(sessionKey); let messages = sanitizeStoredMessages(pending); + const rawMessages = Array.isArray(event.messages) + ? sanitizeL0Record({ sessionKey, messages: event.messages }, this.config) + : []; if (messages.length === 0) { - const rawMessages = Array.isArray(event.messages) ? event.messages : []; - messages = sanitizeL0Record({ sessionKey, messages: rawMessages }, this.config); + messages = rawMessages; + } else if (!messages.some((message) => message.role === "assistant")) { + const assistantReply = extractAssistantReply(rawMessages); + if (assistantReply) { + messages = [...messages, { role: "assistant", content: assistantReply }]; + } } - if (messages.length === 0) return; - if (!messages.some((message) => message.role === "user")) return; + if (messages.length === 0) { + if (this.activeCaseIdByRawSession.has(rawSessionKey)) { + this.finalizeCase(rawSessionKey, "", "completed"); + } + return; + } + if (!messages.some((message) => message.role === "user")) { + if (this.activeCaseIdByRawSession.has(rawSessionKey)) { + this.finalizeCase(rawSessionKey, "", "completed", extractAssistantReply(messages)); + } + return; + } + const activeCase = this.getActiveCase(rawSessionKey); + const userQuery = messages.find((message) => message.role === "user")?.content ?? ""; + if (activeCase && !activeCase.retrieval) { + this.updateCaseRecallSkipped(rawSessionKey, userQuery || activeCase.query, "empty_context"); + } + this.finalizeCase(rawSessionKey, userQuery, "completed", extractAssistantReply(messages)); const captured = this.indexer.captureL0Session({ sessionKey, @@ -981,6 +1397,7 @@ export class MemoryPluginRuntime { if (!sessionKey || sessionKey.startsWith("temp:")) return; try { + this.interruptActiveCase(ctx.sessionKey ?? sessionKey, "before_reset"); const pending = this.pendingBySession.get(sessionKey) ?? []; this.pendingBySession.delete(sessionKey); this.recentInboundBySession.delete(sessionKey); @@ -1096,34 +1513,60 @@ export class MemoryPluginRuntime { return aggregate; } - private requestIndexRun(reason: string, sessionKeys?: string[]): Promise { + private requestIndexRun( + reason: string, + sessionKeys?: string[], + options?: { allowWhileDream?: boolean }, + ): Promise { if (sessionKeys && sessionKeys.length > 0) { sessionKeys.filter(Boolean).forEach((sessionKey) => this.queuedSessionKeys.add(sessionKey)); } else { this.queuedFullRun = true; } this.queuedReason = this.queuedReason ? `${this.queuedReason}+${reason}` : reason; - if (!this.queuePromise) { + if (!this.queuePromise && (!this.dreamRunLocked || options?.allowWhileDream)) { this.queuePromise = this.drainIndexQueue(); } + if (!this.queuePromise) { + return (async () => { + await this.dreamRunPromise; + return this.queuePromise ? await this.queuePromise : emptyStats(); + })(); + } return this.queuePromise; } - private rescheduleHeartbeat(): void { - if (this.heartbeatTimer) { - clearInterval(this.heartbeatTimer); - this.heartbeatTimer = undefined; + private clearBackgroundTimers(): void { + if (this.autoIndexTimer) { + clearInterval(this.autoIndexTimer); + this.autoIndexTimer = undefined; + } + if (this.autoDreamTimer) { + clearInterval(this.autoDreamTimer); + this.autoDreamTimer = undefined; + } + } + + private rescheduleBackgroundTasks(): void { + this.clearBackgroundTimers(); + const settings = this.indexer.getSettings(); + if (settings.autoIndexIntervalMinutes > 0) { + this.autoIndexTimer = setInterval(() => { + for (const sessionKey of Array.from(this.debouncedSessions)) { + this.clearIdleTimer(sessionKey); + } + void this.requestIndexRun("scheduled").catch((error) => { + this.logger.warn?.(`[clawxmemory] scheduled index failed: ${String(error)}`); + }); + }, settings.autoIndexIntervalMinutes * 60_000); + } + if (settings.autoDreamIntervalMinutes > 0) { + this.autoDreamTimer = setInterval(() => { + void this.runDreamNow("scheduled").catch((error) => { + this.logger.warn?.(`[clawxmemory] scheduled dream failed: ${String(error)}`); + }); + }, settings.autoDreamIntervalMinutes * 60_000); } - const intervalMinutes = this.config.autoIndexIntervalMinutes; - if (intervalMinutes <= 0) return; - this.heartbeatTimer = setInterval(() => { - for (const sessionKey of Array.from(this.debouncedSessions)) { - this.clearIdleTimer(sessionKey); - } - void this.requestIndexRun("scheduled").catch((error) => { - this.logger.warn?.(`[clawxmemory] scheduled index failed: ${String(error)}`); - }); - }, intervalMinutes * 60_000); } private applyIndexingSettings(partial: Partial): IndexingSettings { @@ -1135,10 +1578,73 @@ export class MemoryPluginRuntime { this.config.defaultIndexingSettings, ); this.indexer.setSettings(merged); - this.rescheduleHeartbeat(); + this.rescheduleBackgroundTasks(); return merged; } + private getLatestL1EndedAt(): string | undefined { + const windows = this.repository.listAllL1(); + if (windows.length === 0) return undefined; + return windows[windows.length - 1]?.endedAt || undefined; + } + + private getNewL1CountSinceLastSuccessfulDream(): { count: number; latestEndedAt?: string } { + const cutoff = this.repository.getPipelineState(LAST_DREAM_L1_ENDED_AT_STATE_KEY)?.trim() || ""; + const windows = this.repository.listAllL1(); + let latestEndedAt: string | undefined; + let count = 0; + for (const window of windows) { + if (!latestEndedAt || window.endedAt > latestEndedAt) { + latestEndedAt = window.endedAt; + } + if (!cutoff || window.endedAt > cutoff) { + count += 1; + } + } + return { + count, + ...(latestEndedAt ? { latestEndedAt } : {}), + }; + } + + private recordDreamLifecycle( + status: "running" | "success" | "skipped" | "failed", + summary: string, + options?: { completedAt?: string; latestL1EndedAt?: string }, + ): void { + this.repository.setPipelineState(LAST_DREAM_STATUS_STATE_KEY, status); + this.repository.setPipelineState(LAST_DREAM_SUMMARY_STATE_KEY, summary.trim()); + if (options?.completedAt) { + this.repository.setPipelineState(LAST_DREAM_AT_STATE_KEY, options.completedAt); + } + if (options?.latestL1EndedAt) { + this.repository.setPipelineState(LAST_DREAM_L1_ENDED_AT_STATE_KEY, options.latestL1EndedAt); + } + } + + private buildSkippedDreamResult( + trigger: "manual" | "scheduled", + prepFlush: HeartbeatStats, + summary: string, + skipReason: string, + ): DreamRunResult { + return { + prepFlush, + reviewedL1: 0, + rewrittenProjects: 0, + deletedProjects: 0, + profileUpdated: false, + duplicateTopicCount: 0, + conflictTopicCount: 0, + prunedProjectL1Refs: 0, + prunedProfileL1Refs: 0, + summary, + trigger, + status: "skipped", + skipReason, + }; + } + private scheduleIdleIndex(sessionKey: string): void { this.clearIdleTimer(sessionKey); this.debouncedSessions.add(sessionKey); @@ -1158,11 +1664,86 @@ export class MemoryPluginRuntime { return this.requestIndexRun(reason, [sessionKey]); } - private flushAllNow(reason: string): Promise { + private flushAllNow( + reason: string, + options?: { allowWhileDream?: boolean }, + ): Promise { for (const sessionKey of Array.from(this.debouncedSessions)) { this.clearIdleTimer(sessionKey); } - return this.requestIndexRun(reason); + return this.requestIndexRun(reason, undefined, options); + } + + private async runDreamNow(trigger: "manual" | "scheduled"): Promise { + if (this.dreamRunLocked || this.dreamRunPromise) { + if (trigger === "scheduled") { + return this.buildSkippedDreamResult( + trigger, + emptyStats(), + "Skipped automatic Dream because another Dream reconstruction is already running.", + "already_running", + ); + } + throw new Error("Dream reconstruction is already running"); + } + + this.dreamRunLocked = true; + const promise = (async () => { + this.recordDreamLifecycle( + "running", + trigger === "scheduled" ? "Automatic Dream is running." : "Manual Dream is running.", + ); + if (this.queuePromise) { + await this.queuePromise; + } + const prepFlush = await this.flushAllNow("dream_prep", { allowWhileDream: true }); + if (trigger === "scheduled") { + const settings = this.indexer.getSettings(); + const { count: newL1Count } = this.getNewL1CountSinceLastSuccessfulDream(); + if (newL1Count < settings.autoDreamMinNewL1) { + const summary = `Skipped automatic Dream: ${newL1Count} new L1 windows since the last successful Dream, below threshold ${settings.autoDreamMinNewL1}.`; + this.recordDreamLifecycle("skipped", summary, { completedAt: nowIso() }); + return this.buildSkippedDreamResult( + trigger, + prepFlush, + summary, + "new_l1_below_threshold", + ); + } + } + const outcome = await this.dreamRewriter.run(); + const latestL1EndedAt = this.getLatestL1EndedAt(); + this.recordDreamLifecycle("success", outcome.summary, { + completedAt: nowIso(), + ...(latestL1EndedAt ? { latestL1EndedAt } : {}), + }); + this.logger.info?.( + `[clawxmemory] dream run(${trigger}) reviewed_l1=${outcome.reviewedL1} rewritten_projects=${outcome.rewrittenProjects} deleted_projects=${outcome.deletedProjects} profile_updated=${outcome.profileUpdated}`, + ); + const result: DreamRunResult = { + prepFlush, + ...outcome, + trigger, + status: "success" as const, + }; + return result; + })() + .catch((error) => { + this.recordDreamLifecycle("failed", `Dream ${trigger} failed: ${String(error)}`, { + completedAt: nowIso(), + }); + throw error; + }) + .finally(() => { + this.dreamRunPromise = undefined; + this.dreamRunLocked = false; + if ((this.queuedFullRun || this.queuedSessionKeys.size > 0) && !this.queuePromise) { + this.queuePromise = this.drainIndexQueue(); + } + }); + + this.dreamRunPromise = promise; + return promise; } private startBackgroundRepair(): void { diff --git a/extensions/openbmb-clawxmemory/src/tools.ts b/extensions/openbmb-clawxmemory/src/tools.ts index 84f02fcca5d19..fdecb8b572dbb 100644 --- a/extensions/openbmb-clawxmemory/src/tools.ts +++ b/extensions/openbmb-clawxmemory/src/tools.ts @@ -258,13 +258,14 @@ export function buildPluginTools( retrievalMode: "explicit", l2Limit: limit, l1Limit: limit, - l0Limit: Math.max(3, Math.floor(limit / 2)), + l0Limit: limit, }); return jsonResult({ ok: true, query: result.query, intent: result.intent, enoughAt: result.enoughAt, + evidenceNote: result.evidenceNote, context: result.context, profile: result.profile, refs: buildMemoryRefs(result), diff --git a/extensions/openbmb-clawxmemory/src/ui-server.ts b/extensions/openbmb-clawxmemory/src/ui-server.ts index 33c646b81280f..5291b1e1826ff 100644 --- a/extensions/openbmb-clawxmemory/src/ui-server.ts +++ b/extensions/openbmb-clawxmemory/src/ui-server.ts @@ -3,7 +3,9 @@ import { createServer, type IncomingMessage, type ServerResponse } from "node:ht import { join } from "node:path"; import { fileURLToPath } from "node:url"; import { + type CaseTraceRecord, type DashboardOverview, + type DreamRunResult, type HeartbeatStats, type IndexingSettings, MemoryRepository, @@ -30,6 +32,7 @@ export interface UiServerControls { getSettings: () => IndexingSettings; saveSettings: (partial: Partial) => IndexingSettings; runIndexNow: () => Promise; + runDreamNow: () => Promise; exportMemoryBundle: () => MemoryExportBundle; importMemoryBundle: (bundle: MemoryExportBundle) => Promise; getRuntimeOverview: () => Pick< @@ -54,6 +57,8 @@ export interface UiServerControls { | "startupRepairMessage" >; getStartupRepairSnapshot: (limit: number) => MemoryUiSnapshot | undefined; + listCaseTraces: (limit: number) => CaseTraceRecord[]; + getCaseTrace: (caseId: string) => CaseTraceRecord | undefined; } const CONTENT_TYPES: Record = { @@ -313,6 +318,10 @@ export class LocalUiServer { if (upperMethod !== "POST") return sendMethodNotAllowed(res, "POST"); return sendJson(res, await this.controls.runIndexNow()); } + if (relativePath === "/api/dream/run") { + if (upperMethod !== "POST") return sendMethodNotAllowed(res, "POST"); + return sendJson(res, await this.controls.runDreamNow()); + } if (relativePath === "/api/snapshot") { const cached = cachedSnapshot(); if (cached) { @@ -355,17 +364,21 @@ export class LocalUiServer { if (relativePath === "/api/profile" || relativePath === "/api/facts") { return sendJson(res, this.repository.searchGlobalProfile(query, limit)); } - if (relativePath === "/api/retrieve") { + if (relativePath === "/api/cases") { + if (upperMethod !== "GET") return sendMethodNotAllowed(res, "GET"); return sendJson( res, - await this.retriever.retrieve(query, { - retrievalMode: "explicit", - l2Limit: limit, - l1Limit: limit, - l0Limit: Math.max(3, Math.floor(limit / 2)), - }), + this.controls.listCaseTraces(parseLimit(url.searchParams.get("limit"), 5)), ); } + if (relativePath.startsWith("/api/cases/")) { + if (upperMethod !== "GET") return sendMethodNotAllowed(res, "GET"); + const caseId = decodeURIComponent(relativePath.slice("/api/cases/".length)); + if (!caseId.trim()) return sendNotFound(res); + const record = this.controls.getCaseTrace(caseId); + if (!record) return sendNotFound(res); + return sendJson(res, record); + } return sendNotFound(res); } diff --git a/extensions/openbmb-clawxmemory/tests/config.test.ts b/extensions/openbmb-clawxmemory/tests/config.test.ts index 31f638f8dc4e5..9329f53c7108a 100644 --- a/extensions/openbmb-clawxmemory/tests/config.test.ts +++ b/extensions/openbmb-clawxmemory/tests/config.test.ts @@ -7,6 +7,13 @@ describe("buildPluginConfig", () => { expect(config.uiHost).toBe("127.0.0.1"); expect(config.uiPort).toBe(39393); expect(config.uiPathPrefix).toBe("/clawxmemory"); + expect(config.defaultIndexingSettings).toEqual({ + reasoningMode: "answer_first", + recallTopK: 10, + autoIndexIntervalMinutes: 60, + autoDreamIntervalMinutes: 360, + autoDreamMinNewL1: 10, + }); }); it("parses uiPort from string input", () => { diff --git a/extensions/openbmb-clawxmemory/tests/dream-review.test.ts b/extensions/openbmb-clawxmemory/tests/dream-review.test.ts new file mode 100644 index 0000000000000..7360a19c94290 --- /dev/null +++ b/extensions/openbmb-clawxmemory/tests/dream-review.test.ts @@ -0,0 +1,437 @@ +import { describe, expect, it, vi } from "vitest"; +import type { + DreamReviewResult, + GlobalProfileRecord, + L0SessionRecord, + LlmMemoryExtractor, + L1WindowRecord, + L2ProjectIndexRecord, +} from "../src/core/index.js"; +import { DreamReviewRunner, DreamRewriteRunner } from "../src/core/index.js"; + +function asDreamReviewExtractor( + extractor: Pick, +): LlmMemoryExtractor { + return extractor as LlmMemoryExtractor; +} + +function asDreamRewriteExtractor( + extractor: Pick, +): LlmMemoryExtractor { + return extractor as LlmMemoryExtractor; +} + +function createL1(overrides: Partial = {}): L1WindowRecord { + return { + l1IndexId: "l1-1", + sessionKey: "session-1", + timePeriod: "2026-04-01 morning", + startedAt: "2026-04-01T08:00:00.000Z", + endedAt: "2026-04-01T09:00:00.000Z", + summary: "Discussed Dream review and project status.", + facts: [], + situationTimeInfo: "Project state changed.", + projectTags: ["dream-review"], + projectDetails: [ + { + key: "dream-review", + name: "Dream Review", + status: "in_progress", + summary: "Reviewing how Dream should govern project memories.", + latestProgress: "Narrowed Dream to L1 -> L2Project governance.", + confidence: 0.88, + }, + ], + l0Source: ["l0-1"], + createdAt: "2026-04-01T09:00:00.000Z", + ...overrides, + }; +} + +function createSecondL1(overrides: Partial = {}): L1WindowRecord { + return createL1({ + l1IndexId: "l1-2", + sessionKey: "session-2", + timePeriod: "2026-04-02 morning", + startedAt: "2026-04-02T08:00:00.000Z", + endedAt: "2026-04-02T09:00:00.000Z", + summary: "Merged Dream rebuild direction around project memory reconstruction.", + situationTimeInfo: "Project summaries should be rebuilt from L1.", + projectDetails: [ + { + key: "dream-review", + name: "Dream Review", + status: "in_progress", + summary: "Rebuilding L2 project memory from all L1 windows.", + latestProgress: "Confirmed exact L1 source pruning for rebuilt projects.", + confidence: 0.93, + }, + ], + createdAt: "2026-04-02T09:00:00.000Z", + ...overrides, + }); +} + +function createProfile(): GlobalProfileRecord { + return { + recordId: "global_profile_record", + profileText: "User prefers Chinese planning docs and iterative architecture reviews.", + sourceL1Ids: ["l1-profile"], + createdAt: "2026-04-01T00:00:00.000Z", + updatedAt: "2026-04-01T00:00:00.000Z", + }; +} + +function createProject(): L2ProjectIndexRecord { + return { + l2IndexId: "l2-project-1", + projectKey: "dream-review", + projectName: "Dream Review", + summary: "Dream governance work is underway.", + currentStatus: "in_progress", + latestProgress: "Still deciding which layer should be governed.", + l1Source: ["l1-1"], + createdAt: "2026-04-01T00:00:00.000Z", + updatedAt: "2026-04-01T10:00:00.000Z", + }; +} + +function createL0(): L0SessionRecord { + return { + l0IndexId: "l0-1", + sessionKey: "session-1", + timestamp: "2026-04-01T08:30:00.000Z", + messages: [ + { role: "user", content: "dream 应该重新看 l1" }, + { role: "assistant", content: "可以把 Dream 收敛到项目层治理。" }, + ], + source: "openclaw", + indexed: true, + createdAt: "2026-04-01T08:30:00.000Z", + }; +} + +describe("DreamReviewRunner", () => { + it("returns a no-signal review when indexed memory is empty", async () => { + const extractor = { + reviewDream: vi.fn(), + }; + const runner = new DreamReviewRunner( + { + listRecentL1: () => [], + getL2ProjectByKey: () => undefined, + getGlobalProfileRecord: () => ({ + recordId: "global_profile_record", + profileText: "", + sourceL1Ids: [], + createdAt: "2026-04-01T00:00:00.000Z", + updatedAt: "2026-04-01T00:00:00.000Z", + }), + getL0ByL1Ids: () => [], + getL2TimeByDate: () => undefined, + }, + asDreamReviewExtractor(extractor), + ); + + const result = await runner.review("all"); + expect(result.summary).toContain("Not enough indexed memory evidence"); + expect(result.projectRebuild).toEqual([]); + expect(result.timeLayerNotes).toEqual([]); + expect(extractor.reviewDream).not.toHaveBeenCalled(); + }); + + it("adds deterministic time integrity notes but leaves semantic review to the extractor", async () => { + const extractorResult: Omit = { + summary: "Recent L1 windows suggest one project summary should be rebuilt.", + projectRebuild: [ + { + title: "Project summary lags recent L1", + rationale: + "The latest L1 shows a clearer project stage transition than the current L2Project summary.", + confidence: 0.83, + target: "l2_project", + evidenceRefs: ["l1:l1-1", "l2_project:l2-project-1"], + }, + ], + profileSuggestions: [], + cleanup: [], + ambiguous: [], + noAction: [], + }; + const extractor = { + reviewDream: vi.fn().mockResolvedValue(extractorResult), + }; + const runner = new DreamReviewRunner( + { + listRecentL1: () => [createL1()], + getL2ProjectByKey: () => createProject(), + getGlobalProfileRecord: () => createProfile(), + getL0ByL1Ids: () => [createL0()], + getL2TimeByDate: () => undefined, + }, + asDreamReviewExtractor(extractor), + ); + + const result = await runner.review("all"); + + expect(extractor.reviewDream).toHaveBeenCalledTimes(1); + expect(result.projectRebuild).toHaveLength(1); + expect(result.timeLayerNotes).toEqual([ + expect.objectContaining({ + target: "time_note", + title: "Missing L2Time summary for 2026-04-01", + }), + ]); + expect(result.evidenceRefs).toEqual( + expect.arrayContaining([ + expect.objectContaining({ refId: "l1:l1-1", level: "l1" }), + expect.objectContaining({ refId: "l2_project:l2-project-1", level: "l2_project" }), + expect.objectContaining({ refId: "profile:global_profile_record", level: "profile" }), + ]), + ); + }); +}); + +describe("DreamRewriteRunner", () => { + it("rewrites project memory and profile using exact retained L1 sources", async () => { + const applyDreamRewrite = vi.fn(); + const extractor = { + planDreamProjectRebuild: vi.fn().mockResolvedValue({ + summary: "Merged duplicate Dream project summaries into one canonical project.", + duplicateTopicCount: 1, + conflictTopicCount: 0, + projects: [ + { + projectKey: "dream-review", + projectName: "Dream Review", + currentStatus: "in_progress", + summary: "Dream now rebuilds L2 project memory from validated L1 windows.", + latestProgress: "Exact L1 references were pruned for the rebuilt project.", + retainedL1Ids: ["l1-2"], + }, + ], + deletedProjectKeys: ["old-dream-review"], + l1Issues: [ + { + issueType: "duplicate", + title: "Two L1 windows described the same Dream topic cluster", + l1Ids: ["l1-1", "l1-2"], + relatedProjectKeys: ["dream-review", "old-dream-review"], + }, + ], + }), + rewriteDreamGlobalProfile: vi.fn().mockResolvedValue({ + profileText: "用户偏好用中文做规划,并且会迭代式地整理 memory 架构。", + sourceL1Ids: ["l1-1", "l1-2"], + conflictWithExisting: false, + }), + }; + + const currentProject: L2ProjectIndexRecord = { + ...createProject(), + l1Source: ["l1-1", "l1-2", "l1-stale"], + }; + const duplicateProject: L2ProjectIndexRecord = { + ...createProject(), + l2IndexId: "l2-project-2", + projectKey: "old-dream-review", + projectName: "Dream Review Old", + l1Source: ["l1-1"], + updatedAt: "2026-04-01T11:00:00.000Z", + }; + const runner = new DreamRewriteRunner( + { + listAllL1: () => [createL1(), createSecondL1()], + listAllL2Projects: () => [currentProject, duplicateProject], + getGlobalProfileRecord: () => ({ + ...createProfile(), + sourceL1Ids: ["l1-profile", "l1-1", "l1-stale"], + }), + getL0ByL1Ids: () => [createL0()], + applyDreamRewrite, + }, + asDreamRewriteExtractor(extractor), + ); + + const result = await runner.run(); + + expect(extractor.planDreamProjectRebuild).toHaveBeenCalledTimes(1); + expect(extractor.rewriteDreamGlobalProfile).toHaveBeenCalledTimes(1); + expect(applyDreamRewrite).toHaveBeenCalledWith({ + projects: [ + expect.objectContaining({ + projectKey: "dream-review", + l1Source: ["l1-2"], + }), + ], + profileText: "用户偏好用中文做规划,并且会迭代式地整理 memory 架构。", + profileSourceL1Ids: ["l1-2", "l1-1"], + }); + expect(result).toMatchObject({ + reviewedL1: 2, + rewrittenProjects: 1, + deletedProjects: 1, + profileUpdated: true, + duplicateTopicCount: 1, + conflictTopicCount: 0, + prunedProjectL1Refs: 3, + prunedProfileL1Refs: 1, + }); + }); + + it("fails closed when project rebuild planning fails", async () => { + const applyDreamRewrite = vi.fn(); + const extractor = { + planDreamProjectRebuild: vi.fn().mockRejectedValue(new Error("project rebuild failed")), + rewriteDreamGlobalProfile: vi.fn(), + }; + const runner = new DreamRewriteRunner( + { + listAllL1: () => [createL1(), createSecondL1()], + listAllL2Projects: () => [createProject()], + getGlobalProfileRecord: () => createProfile(), + getL0ByL1Ids: () => [createL0()], + applyDreamRewrite, + }, + asDreamRewriteExtractor(extractor), + ); + + await expect(runner.run()).rejects.toThrow("project rebuild failed"); + expect(extractor.rewriteDreamGlobalProfile).not.toHaveBeenCalled(); + expect(applyDreamRewrite).not.toHaveBeenCalled(); + }); + + it("fails closed when profile rewrite fails or does not meet the source gate", async () => { + const applyDreamRewrite = vi.fn(); + const projectPlan = { + summary: "ok", + duplicateTopicCount: 0, + conflictTopicCount: 0, + projects: [ + { + projectKey: "dream-review", + projectName: "Dream Review", + currentStatus: "in_progress" as const, + summary: "Dream project summary", + latestProgress: "Dream latest progress", + retainedL1Ids: ["l1-1", "l1-2"], + }, + ], + deletedProjectKeys: [], + l1Issues: [], + }; + + const extractorFail = { + planDreamProjectRebuild: vi.fn().mockResolvedValue(projectPlan), + rewriteDreamGlobalProfile: vi.fn().mockRejectedValue(new Error("profile rewrite failed")), + }; + const runnerFail = new DreamRewriteRunner( + { + listAllL1: () => [createL1(), createSecondL1()], + listAllL2Projects: () => [createProject()], + getGlobalProfileRecord: () => createProfile(), + getL0ByL1Ids: () => [createL0()], + applyDreamRewrite, + }, + asDreamRewriteExtractor(extractorFail), + ); + + await expect(runnerFail.run()).rejects.toThrow("profile rewrite failed"); + expect(applyDreamRewrite).not.toHaveBeenCalled(); + + const extractorGate = { + planDreamProjectRebuild: vi.fn().mockResolvedValue(projectPlan), + rewriteDreamGlobalProfile: vi.fn().mockResolvedValue({ + profileText: "Too weak", + sourceL1Ids: [], + conflictWithExisting: false, + }), + }; + const runnerGate = new DreamRewriteRunner( + { + listAllL1: () => [createL1(), createSecondL1()], + listAllL2Projects: () => [createProject()], + getGlobalProfileRecord: () => createProfile(), + getL0ByL1Ids: () => [createL0()], + applyDreamRewrite, + }, + asDreamRewriteExtractor(extractorGate), + ); + + await expect(runnerGate.run()).rejects.toThrow("source support gate"); + expect(applyDreamRewrite).not.toHaveBeenCalled(); + }); + + it("fails closed when the project rebuild result is empty", async () => { + const applyDreamRewrite = vi.fn(); + const extractor = { + planDreamProjectRebuild: vi.fn().mockResolvedValue({ + summary: "empty", + duplicateTopicCount: 0, + conflictTopicCount: 0, + projects: [], + deletedProjectKeys: [], + l1Issues: [], + }), + rewriteDreamGlobalProfile: vi.fn(), + }; + const runner = new DreamRewriteRunner( + { + listAllL1: () => [createL1(), createSecondL1()], + listAllL2Projects: () => [createProject()], + getGlobalProfileRecord: () => createProfile(), + getL0ByL1Ids: () => [createL0()], + applyDreamRewrite, + }, + asDreamRewriteExtractor(extractor), + ); + + await expect(runner.run()).rejects.toThrow("no valid projects"); + expect(applyDreamRewrite).not.toHaveBeenCalled(); + }); + + it("fails closed when the rebuild plan does not explain current project rows", async () => { + const applyDreamRewrite = vi.fn(); + const extractor = { + planDreamProjectRebuild: vi.fn().mockResolvedValue({ + summary: "missing explanation", + duplicateTopicCount: 0, + conflictTopicCount: 0, + projects: [ + { + projectKey: "dream-review", + projectName: "Dream Review", + currentStatus: "in_progress", + summary: "Only kept one project", + latestProgress: "No deletion explanation", + retainedL1Ids: ["l1-1", "l1-2"], + }, + ], + deletedProjectKeys: [], + l1Issues: [], + }), + rewriteDreamGlobalProfile: vi.fn(), + }; + const runner = new DreamRewriteRunner( + { + listAllL1: () => [createL1(), createSecondL1()], + listAllL2Projects: () => [ + createProject(), + { + ...createProject(), + l2IndexId: "l2-project-old", + projectKey: "old-dream-review", + projectName: "Old Dream Review", + }, + ], + getGlobalProfileRecord: () => createProfile(), + getL0ByL1Ids: () => [createL0()], + applyDreamRewrite, + }, + asDreamRewriteExtractor(extractor), + ); + + await expect(runner.run()).rejects.toThrow("did not explain current projects"); + expect(applyDreamRewrite).not.toHaveBeenCalled(); + }); +}); diff --git a/extensions/openbmb-clawxmemory/tests/index.test.ts b/extensions/openbmb-clawxmemory/tests/index.test.ts index f4a433175ef82..4636a2c02d944 100644 --- a/extensions/openbmb-clawxmemory/tests/index.test.ts +++ b/extensions/openbmb-clawxmemory/tests/index.test.ts @@ -68,7 +68,17 @@ describe("plugin entry", () => { expect(registerMemoryPromptSection).toHaveBeenCalledTimes(1); expect(registerTool).toHaveBeenCalledTimes(1); expect(registerHook).toHaveBeenCalledTimes(2); - expect(on).toHaveBeenCalledTimes(4); + expect(on).toHaveBeenCalledTimes(6); + expect(on.mock.calls.map((call) => call[0])).toEqual( + expect.arrayContaining([ + "before_prompt_build", + "before_tool_call", + "after_tool_call", + "before_message_write", + "agent_end", + "before_reset", + ]), + ); expect(registerService).toHaveBeenCalledTimes(1); const toolFactory = registerTool.mock.calls[0]![0] as () => Array<{ name: string }>; diff --git a/extensions/openbmb-clawxmemory/tests/indexing-settings.test.ts b/extensions/openbmb-clawxmemory/tests/indexing-settings.test.ts new file mode 100644 index 0000000000000..aa403d4745394 --- /dev/null +++ b/extensions/openbmb-clawxmemory/tests/indexing-settings.test.ts @@ -0,0 +1,49 @@ +import { mkdtempSync } from "node:fs"; +import { tmpdir } from "node:os"; +import { join } from "node:path"; +import { afterEach, describe, expect, it } from "vitest"; +import { MemoryRepository } from "../src/core/index.js"; + +const repositories: MemoryRepository[] = []; + +function createRepository(): MemoryRepository { + const dir = mkdtempSync(join(tmpdir(), "clawxmemory-settings-")); + const repository = new MemoryRepository(join(dir, "memory.sqlite")); + repositories.push(repository); + return repository; +} + +afterEach(() => { + while (repositories.length > 0) { + repositories.pop()?.close(); + } +}); + +describe("MemoryRepository indexing settings", () => { + it("fills in new auto scheduling defaults when reading legacy settings", () => { + const repository = createRepository(); + const defaults = { + reasoningMode: "answer_first" as const, + recallTopK: 10, + autoIndexIntervalMinutes: 60, + autoDreamIntervalMinutes: 360, + autoDreamMinNewL1: 10, + }; + + repository.saveIndexingSettings( + { + reasoningMode: "accuracy_first", + recallTopK: 7, + }, + defaults, + ); + + expect(repository.getIndexingSettings(defaults)).toEqual({ + reasoningMode: "accuracy_first", + recallTopK: 7, + autoIndexIntervalMinutes: 60, + autoDreamIntervalMinutes: 360, + autoDreamMinNewL1: 10, + }); + }); +}); diff --git a/extensions/openbmb-clawxmemory/tests/llm-extraction.test.ts b/extensions/openbmb-clawxmemory/tests/llm-extraction.test.ts new file mode 100644 index 0000000000000..3f1845d071bb6 --- /dev/null +++ b/extensions/openbmb-clawxmemory/tests/llm-extraction.test.ts @@ -0,0 +1,558 @@ +import { afterEach, describe, expect, it, vi } from "vitest"; +import type { + GlobalProfileRecord, + L0SessionRecord, + L1WindowRecord, + L2ProjectIndexRecord, +} from "../src/core/index.js"; +import { LlmMemoryExtractor } from "../src/core/index.js"; + +function createExtractor() { + return new LlmMemoryExtractor({}, undefined, undefined); +} + +function createProfile(): GlobalProfileRecord { + return { + recordId: "global_profile_record", + profileText: "User likes spicy food and speaks Chinese.", + sourceL1Ids: ["l1-profile"], + createdAt: "2026-04-01T00:00:00.000Z", + updatedAt: "2026-04-01T00:00:00.000Z", + }; +} + +function createL1(): L1WindowRecord { + return { + l1IndexId: "l1-1", + sessionKey: "session-1", + timePeriod: "2026-04-01 morning", + startedAt: "2026-04-01T08:00:00.000Z", + endedAt: "2026-04-01T09:00:00.000Z", + summary: "Discussed travel and retrieval debugging.", + facts: [], + situationTimeInfo: "Confirmed the project plan.", + projectTags: ["travel"], + projectDetails: [], + l0Source: ["l0-1"], + createdAt: "2026-04-01T09:00:00.000Z", + }; +} + +function createL0(): L0SessionRecord { + return { + l0IndexId: "l0-1", + sessionKey: "session-1", + timestamp: "2026-04-01T09:30:00.000Z", + messages: [ + { role: "user", content: "我对于天津旅游的规划是什么" }, + { role: "assistant", content: "你在推进清明假期天津穷游攻略。" }, + ], + source: "openclaw", + indexed: true, + createdAt: "2026-04-01T09:30:00.000Z", + }; +} + +function createProject(): L2ProjectIndexRecord { + return { + l2IndexId: "l2-project-1", + projectKey: "travel", + projectName: "Travel", + summary: "Travel planning is underway.", + currentStatus: "in_progress", + latestProgress: "Budget route planning.", + l1Source: ["l1-1", "l1-stale"], + createdAt: "2026-04-01T00:00:00.000Z", + updatedAt: "2026-04-01T10:00:00.000Z", + }; +} + +afterEach(() => { + vi.restoreAllMocks(); +}); + +describe("LlmMemoryExtractor hop debug trace", () => { + it("emits full prompt debug on successful hop1 parsing", async () => { + const extractor = createExtractor(); + const debugTrace = vi.fn(); + vi.spyOn( + extractor as never as { callStructuredJson: (input: unknown) => Promise }, + "callStructuredJson", + ).mockResolvedValue( + JSON.stringify({ + query_scope: "continuation", + effective_query: "更详细地回忆我对于天津旅游的规划是什么", + memory_relevant: true, + base_only: false, + lookup_queries: [ + { + target_types: ["time", "project"], + lookup_query: "天津旅游规划", + time_range: { start_date: "2026-04-01", end_date: "2026-04-01" }, + }, + ], + }), + ); + + const result = await extractor.decideMemoryLookup({ + query: "我对于天津旅游的规划是什么", + profile: createProfile(), + recentMessages: [ + { role: "user", content: "我对于天津旅游的规划是什么" }, + { role: "assistant", content: "你在推进清明假期天津穷游攻略。" }, + ], + debugTrace, + }); + + expect(result.queryScope).toBe("continuation"); + expect(result.effectiveQuery).toBe("更详细地回忆我对于天津旅游的规划是什么"); + expect(result.lookupQueries[0]?.lookupQuery).toBe("天津旅游规划"); + const hop1Debug = debugTrace.mock.calls[0]?.[0]; + expect(debugTrace).toHaveBeenCalledWith( + expect.objectContaining({ + requestLabel: "Hop1 lookup", + systemPrompt: expect.stringContaining("first-hop planner"), + userPrompt: expect.any(String), + rawResponse: expect.stringContaining("lookup_queries"), + parsedResult: expect.objectContaining({ + base_only: false, + }), + }), + ); + expect(hop1Debug?.userPrompt).toContain("current_local_date"); + expect(hop1Debug?.userPrompt).toContain("recent_messages"); + expect(hop1Debug?.userPrompt).toContain("global_profile"); + }); + + it("falls back to standalone query metadata when hop1 omits new fields", async () => { + const extractor = createExtractor(); + vi.spyOn( + extractor as never as { callStructuredJson: (input: unknown) => Promise }, + "callStructuredJson", + ).mockResolvedValue( + JSON.stringify({ + memory_relevant: true, + base_only: false, + lookup_queries: [ + { + target_types: ["project"], + lookup_query: "天津旅游规划", + }, + ], + }), + ); + + const result = await extractor.decideMemoryLookup({ + query: "我对于天津旅游的规划是什么", + profile: createProfile(), + recentMessages: [], + }); + + expect(result.queryScope).toBe("standalone"); + expect(result.effectiveQuery).toBe("我对于天津旅游的规划是什么"); + expect(result.lookupQueries[0]?.lookupQuery).toBe("天津旅游规划"); + }); + + it("emits full prompt debug on successful hop2 parsing with english scaffolding", async () => { + const extractor = createExtractor(); + const debugTrace = vi.fn(); + vi.spyOn( + extractor as never as { callStructuredJson: (input: unknown) => Promise }, + "callStructuredJson", + ).mockResolvedValue( + JSON.stringify({ + intent: "project", + evidence_note: + "The user is actively planning a budget Tianjin trip for the Qingming holiday.", + enough_at: "l2", + }), + ); + + const result = await extractor.selectL2FromCatalog({ + query: "我对于天津旅游的规划是什么", + profile: createProfile(), + lookupQueries: [ + { + targetTypes: ["project"], + lookupQuery: "天津旅游规划", + timeRange: null, + }, + ], + l2Entries: [ + { + id: "l2-project-1", + type: "project", + label: "天津穷游攻略", + lookupKeys: ["天津", "穷游"], + compressedContent: "正在推进天津穷游路线和预算整理。", + }, + ], + debugTrace, + }); + + expect(result.enoughAt).toBe("l2"); + expect(debugTrace).toHaveBeenCalledWith( + expect.objectContaining({ + requestLabel: "Hop2 L2 selection", + systemPrompt: expect.stringContaining("second-hop planner"), + rawResponse: expect.stringContaining("evidence_note"), + }), + ); + expect(debugTrace.mock.calls[0]?.[0]?.systemPrompt).not.toContain("第二跳规划器"); + }); + + it("emits errored prompt debug when raw hop output cannot be parsed", async () => { + const extractor = createExtractor(); + const debugTrace = vi.fn(); + vi.spyOn( + extractor as never as { callStructuredJson: (input: unknown) => Promise }, + "callStructuredJson", + ).mockResolvedValue("not-json-at-all"); + + const result = await extractor.selectL1FromEvidence({ + query: "我对于天津旅游的规划是什么", + evidenceNote: "L2 note", + selectedL2Entries: [ + { + id: "l2-project-1", + type: "project", + label: "天津穷游攻略", + lookupKeys: ["天津", "穷游"], + compressedContent: "正在推进天津穷游路线和预算整理。", + }, + ], + l1Windows: [createL1()], + debugTrace, + }); + + expect(result.enoughAt).toBe("none"); + expect(debugTrace).toHaveBeenCalledWith( + expect.objectContaining({ + requestLabel: "Hop3 L1 selection", + errored: true, + rawResponse: "not-json-at-all", + errorMessage: expect.any(String), + }), + ); + }); + + it("marks timeout in hop debug when the model call times out", async () => { + const extractor = createExtractor(); + const debugTrace = vi.fn(); + vi.spyOn( + extractor as never as { callStructuredJson: (input: unknown) => Promise }, + "callStructuredJson", + ).mockRejectedValue(new Error("Hop4 L0 selection request timed out after 5000ms")); + + const result = await extractor.selectL0FromEvidence({ + query: "你上次推荐我的店叫什么", + evidenceNote: "Need exact venue name", + selectedL2Entries: [ + { + id: "l2-project-1", + type: "project", + label: "北京烧烤推荐", + lookupKeys: ["北京", "烧烤"], + compressedContent: "之前讨论过几家烧烤店。", + }, + ], + selectedL1Windows: [createL1()], + l0Sessions: [createL0()], + debugTrace, + }); + + expect(result.enoughAt).toBe("none"); + expect(debugTrace).toHaveBeenCalledWith( + expect.objectContaining({ + requestLabel: "Hop4 L0 selection", + errored: true, + timedOut: true, + }), + ); + }); + + it("parses Dream review output into grouped findings", async () => { + const extractor = createExtractor(); + vi.spyOn( + extractor as never as { callStructuredJson: (input: unknown) => Promise }, + "callStructuredJson", + ).mockResolvedValue( + JSON.stringify({ + summary: "Recent L1 windows suggest one project summary should be rebuilt.", + project_rebuild: [ + { + title: "Project summary lags recent L1", + rationale: + "The newest L1 windows carry a clearer project stage than the current L2 project summary.", + confidence: 0.84, + target: "l2_project", + evidence_refs: ["l1:l1-1", "l2_project:l2-project-1"], + }, + ], + profile_suggestions: [ + { + title: "Promote stable preference into profile", + rationale: "Two recent L1 windows reinforce the same planning preference.", + confidence: 0.71, + target: "global_profile", + evidence_refs: ["profile:global_profile_record", "l1:l1-1"], + }, + ], + cleanup: [], + ambiguous: [], + no_action: [], + }), + ); + + const result = await extractor.reviewDream({ + focus: "all", + profile: createProfile(), + l2Projects: [ + { + l2IndexId: "l2-project-1", + projectKey: "travel", + projectName: "Travel", + summary: "Travel planning is underway.", + currentStatus: "in_progress", + latestProgress: "Budget route planning.", + l1Source: ["l1-1"], + createdAt: "2026-04-01T00:00:00.000Z", + updatedAt: "2026-04-01T10:00:00.000Z", + }, + ], + l1Windows: [createL1()], + l0Sessions: [createL0()], + timeLayerNotes: [], + evidenceRefs: [ + { + refId: "profile:global_profile_record", + level: "profile", + id: "global_profile_record", + label: "Global Profile", + summary: "User likes spicy food.", + }, + { + refId: "l2_project:l2-project-1", + level: "l2_project", + id: "l2-project-1", + label: "Travel", + summary: "Travel planning is underway.", + }, + { + refId: "l1:l1-1", + level: "l1", + id: "l1-1", + label: "2026-04-01 morning", + summary: "Discussed travel and retrieval debugging.", + }, + ], + }); + + expect(result.summary).toContain("project summary"); + expect(result.projectRebuild).toEqual([ + expect.objectContaining({ + title: "Project summary lags recent L1", + target: "l2_project", + evidenceRefs: ["l1:l1-1", "l2_project:l2-project-1"], + }), + ]); + expect(result.profileSuggestions).toEqual([ + expect.objectContaining({ + target: "global_profile", + }), + ]); + }); + + it("falls back to an empty Dream review when the model output is malformed", async () => { + const extractor = createExtractor(); + vi.spyOn( + extractor as never as { callStructuredJson: (input: unknown) => Promise }, + "callStructuredJson", + ).mockResolvedValue("not-json"); + + const result = await extractor.reviewDream({ + focus: "projects", + profile: createProfile(), + l2Projects: [], + l1Windows: [createL1()], + l0Sessions: [], + timeLayerNotes: [], + evidenceRefs: [ + { + refId: "l1:l1-1", + level: "l1", + id: "l1-1", + label: "2026-04-01 morning", + summary: "Discussed travel and retrieval debugging.", + }, + ], + }); + + expect(result.summary).toContain("No reliable Dream findings"); + expect(result.projectRebuild).toEqual([]); + expect(result.profileSuggestions).toEqual([]); + }); + + it("parses Dream project rebuild output into exact retained project sources", async () => { + const extractor = createExtractor(); + vi.spyOn( + extractor as never as { callStructuredJson: (input: unknown) => Promise }, + "callStructuredJson", + ).mockResolvedValue( + JSON.stringify({ + summary: "Merged duplicate travel topics into one project.", + duplicate_topic_count: 1, + conflict_topic_count: 0, + projects: [ + { + project_key: "travel-plan", + project_name: "Travel Plan", + current_status: "in_progress", + summary: "The travel project was consolidated from recent L1 windows.", + latest_progress: "Kept only the strongest recent L1 window.", + retained_l1_ids: ["l1-1"], + }, + ], + deleted_project_keys: ["travel"], + l1_issues: [ + { + issue_type: "duplicate", + title: "Recent L1 windows describe the same travel topic", + l1_ids: ["l1-1"], + related_project_keys: ["travel", "travel-plan"], + }, + ], + }), + ); + + const result = await extractor.planDreamProjectRebuild({ + currentProjects: [createProject()], + profile: createProfile(), + l1Windows: [createL1()], + l0Sessions: [createL0()], + clusters: [ + { + clusterId: "cluster-1", + label: "Travel Plan", + candidateKeys: ["travel"], + candidateNames: ["Travel"], + currentProjectKeys: ["travel"], + l1Ids: ["l1-1"], + statuses: ["in_progress"], + summaries: ["Travel planning is underway."], + latestProgresses: ["Budget route planning."], + issueHints: ["duplicate"], + representativeWindows: [ + { + l1IndexId: "l1-1", + endedAt: "2026-04-01T09:00:00.000Z", + summary: "Discussed travel and retrieval debugging.", + }, + ], + }, + ], + }); + + expect(result).toEqual( + expect.objectContaining({ + duplicateTopicCount: 1, + conflictTopicCount: 0, + deletedProjectKeys: ["travel"], + projects: [ + expect.objectContaining({ + projectKey: "travel-plan", + retainedL1Ids: ["l1-1"], + }), + ], + l1Issues: [ + expect.objectContaining({ + issueType: "duplicate", + l1Ids: ["l1-1"], + }), + ], + }), + ); + }); + + it("parses Dream global profile rewrites with exact supporting L1 ids", async () => { + const extractor = createExtractor(); + vi.spyOn( + extractor as never as { callStructuredJson: (input: unknown) => Promise }, + "callStructuredJson", + ).mockResolvedValue( + JSON.stringify({ + profile_text: "用户偏好中文沟通,并会反复打磨检索与记忆架构。", + source_l1_ids: ["l1-1"], + conflict_with_existing: true, + }), + ); + + const result = await extractor.rewriteDreamGlobalProfile({ + existingProfile: createProfile(), + l1Windows: [createL1()], + currentProjects: [createProject()], + plannedProjects: [ + { + projectKey: "travel-plan", + projectName: "Travel Plan", + currentStatus: "in_progress", + summary: "Consolidated travel project memory.", + latestProgress: "Kept one retained L1.", + retainedL1Ids: ["l1-1"], + }, + ], + l1Issues: [], + }); + + expect(result).toEqual({ + profileText: "用户偏好中文沟通,并会反复打磨检索与记忆架构。", + sourceL1Ids: ["l1-1"], + conflictWithExisting: true, + }); + }); + + it("throws when Dream project rebuild output is malformed or empty", async () => { + const extractor = createExtractor(); + vi.spyOn( + extractor as never as { callStructuredJson: (input: unknown) => Promise }, + "callStructuredJson", + ).mockResolvedValue("not-json"); + + await expect( + extractor.planDreamProjectRebuild({ + currentProjects: [createProject()], + profile: createProfile(), + l1Windows: [createL1()], + l0Sessions: [createL0()], + clusters: [], + }), + ).rejects.toThrow(); + }); + + it("throws when Dream global profile rewrite output is malformed", async () => { + const extractor = createExtractor(); + vi.spyOn( + extractor as never as { callStructuredJson: (input: unknown) => Promise }, + "callStructuredJson", + ).mockResolvedValue("not-json"); + + await expect( + extractor.rewriteDreamGlobalProfile({ + existingProfile: createProfile(), + l1Windows: [createL1()], + currentProjects: [createProject()], + plannedProjects: [ + { + projectKey: "travel-plan", + projectName: "Travel Plan", + currentStatus: "in_progress", + summary: "Consolidated travel project memory.", + latestProgress: "Kept one retained L1.", + retainedL1Ids: ["l1-1"], + }, + ], + l1Issues: [], + }), + ).rejects.toThrow(); + }); +}); diff --git a/extensions/openbmb-clawxmemory/tests/retriever.test.ts b/extensions/openbmb-clawxmemory/tests/retriever.test.ts new file mode 100644 index 0000000000000..807f41d773f80 --- /dev/null +++ b/extensions/openbmb-clawxmemory/tests/retriever.test.ts @@ -0,0 +1,778 @@ +import { afterEach, describe, expect, it, vi } from "vitest"; +import type { + GlobalProfileRecord, + IndexingSettings, + L0SessionRecord, + L1WindowRecord, + L2ProjectIndexRecord, + L2SearchResult, + L2TimeIndexRecord, +} from "../src/core/index.js"; +import { ReasoningRetriever } from "../src/core/index.js"; + +function createSettings(overrides: Partial = {}): IndexingSettings { + return { + reasoningMode: "accuracy_first", + recallTopK: 10, + autoIndexIntervalMinutes: 60, + autoDreamIntervalMinutes: 360, + autoDreamMinNewL1: 10, + ...overrides, + }; +} + +function createSkillsRuntime() { + return { + intentRules: { timeKeywords: [], projectKeywords: [], factKeywords: [] }, + extractionRules: { + projectPatterns: [], + factRules: [], + maxProjectTags: 8, + maxFacts: 16, + projectTagMinLength: 2, + projectTagMaxLength: 50, + summaryLimits: { head: 80, tail: 80, assistant: 80 }, + }, + projectStatusRules: { defaultStatus: "in_progress", rules: [] }, + contextTemplate: [ + "intent={{intent}}", + "enoughAt={{enoughAt}}", + "{{profileBlock}}", + "{{evidenceNoteBlock}}", + "{{l2Block}}", + "{{l1Block}}", + "{{l0Block}}", + ].join("\n"), + metadata: { + source: "fallback" as const, + skillsDir: "", + errors: [], + }, + }; +} + +function createProfile(text = "User prefers Chinese."): GlobalProfileRecord { + return { + recordId: "global_profile_record", + profileText: text, + sourceL1Ids: ["l1-profile"], + createdAt: "2026-03-30T00:00:00.000Z", + updatedAt: "2026-03-30T00:00:00.000Z", + }; +} + +function createL2Time(overrides: Partial = {}): L2TimeIndexRecord { + return { + l2IndexId: "l2-time-1", + dateKey: "2026-03-31", + summary: "Worked on retrieval pipeline.", + l1Source: ["l1-1"], + createdAt: "2026-03-31T00:00:00.000Z", + updatedAt: "2026-03-31T08:00:00.000Z", + ...overrides, + }; +} + +function createL2Project(overrides: Partial = {}): L2ProjectIndexRecord { + return { + l2IndexId: "l2-project-1", + projectKey: "clawxmemory", + projectName: "ClawXMemory", + summary: "Refactoring retrieval pipeline.", + currentStatus: "in_progress", + latestProgress: "Implemented deterministic L2 routing.", + l1Source: ["l1-1"], + createdAt: "2026-03-31T00:00:00.000Z", + updatedAt: "2026-03-31T09:00:00.000Z", + ...overrides, + }; +} + +function createL1(overrides: Partial = {}): L1WindowRecord { + return { + l1IndexId: "l1-1", + sessionKey: "session-main", + timePeriod: "2026-03-31 morning", + startedAt: "2026-03-31T08:00:00.000Z", + endedAt: "2026-03-31T09:00:00.000Z", + summary: "Discussed retrieval refactor.", + facts: [], + situationTimeInfo: "Validated new retrieval hops.", + projectTags: ["ClawXMemory"], + projectDetails: [], + l0Source: ["l0-1"], + createdAt: "2026-03-31T09:00:00.000Z", + ...overrides, + }; +} + +function createL0(overrides: Partial = {}): L0SessionRecord { + return { + l0IndexId: "l0-1", + sessionKey: "session-main", + timestamp: "2026-03-31T09:30:00.000Z", + messages: [ + { role: "user", content: "What changed in the retrieval flow?" }, + { + role: "assistant", + content: "We switched to deterministic candidates plus evidence notes.", + }, + ], + source: "openclaw", + indexed: true, + createdAt: "2026-03-31T09:30:00.000Z", + ...overrides, + }; +} + +function createRepository(overrides: Record = {}) { + return { + getSnapshotVersion: vi.fn().mockReturnValue("snapshot-1"), + getGlobalProfileRecord: vi.fn().mockReturnValue(createProfile()), + getL2TimeByDate: vi.fn().mockReturnValue(undefined), + searchL2TimeIndexes: vi.fn().mockReturnValue([]), + searchL2ProjectIndexes: vi.fn().mockReturnValue([]), + getL1ByIds: vi.fn().mockReturnValue([]), + getL0ByIds: vi.fn().mockReturnValue([]), + ...overrides, + }; +} + +function createExtractor(overrides: Record = {}) { + return { + decideMemoryLookup: vi.fn().mockResolvedValue({ + queryScope: "standalone", + effectiveQuery: "default", + memoryRelevant: true, + baseOnly: false, + lookupQueries: [ + { targetTypes: ["time", "project"], lookupQuery: "default", timeRange: null }, + ], + }), + selectL2FromCatalog: vi.fn().mockResolvedValue({ + intent: "general", + evidenceNote: "L2 note", + enoughAt: "l2", + }), + selectL1FromEvidence: vi.fn().mockResolvedValue({ + evidenceNote: "L1 note", + enoughAt: "l1", + }), + selectL0FromEvidence: vi.fn().mockResolvedValue({ + evidenceNote: "L0 note", + enoughAt: "l0", + }), + ...overrides, + }; +} + +function emitPromptDebug( + input: { debugTrace?: (debug: Record) => void } | undefined, + requestLabel: string, + parsedResult: unknown, +) { + input?.debugTrace?.({ + requestLabel, + systemPrompt: `${requestLabel} system prompt`, + userPrompt: `${requestLabel} user prompt`, + rawResponse: JSON.stringify(parsedResult), + parsedResult, + }); +} + +afterEach(() => { + vi.restoreAllMocks(); +}); + +describe("ReasoningRetriever", () => { + it("returns no memory when hop1 says memory is not relevant", async () => { + const repository = createRepository({ + getGlobalProfileRecord: vi.fn().mockReturnValue(createProfile("")), + }); + const extractor = createExtractor({ + decideMemoryLookup: vi.fn().mockResolvedValue({ + memoryRelevant: false, + baseOnly: false, + lookupQueries: [], + }), + }); + + const retriever = new ReasoningRetriever( + repository as never, + createSkillsRuntime() as never, + extractor as never, + { getSettings: () => createSettings() }, + ); + + const result = await retriever.retrieve("hello", { retrievalMode: "explicit" }); + + expect(result.enoughAt).toBe("none"); + expect(result.context).toBe(""); + expect(result.evidenceNote).toBe(""); + expect(result.trace?.steps.map((step) => step.kind)).toEqual([ + "recall_start", + "hop1_decision", + "recall_skipped", + "context_rendered", + ]); + }); + + it("returns profile-only context for base_only queries", async () => { + const repository = createRepository(); + const extractor = createExtractor({ + decideMemoryLookup: vi.fn().mockResolvedValue({ + memoryRelevant: true, + baseOnly: true, + lookupQueries: [], + }), + }); + + const retriever = new ReasoningRetriever( + repository as never, + createSkillsRuntime() as never, + extractor as never, + { getSettings: () => createSettings() }, + ); + + const result = await retriever.retrieve("介绍一下我", { retrievalMode: "explicit" }); + + expect(result.enoughAt).toBe("profile"); + expect(result.profile?.profileText).toContain("Chinese"); + expect(result.l2Results).toEqual([]); + expect(result.context).toContain("Global Profile"); + }); + + it("passes recent messages into hop1 and uses effectiveQuery after hop1", async () => { + const time = createL2Time({ + dateKey: "2026-04-02", + summary: "Handled several work items in Xibeiwang.", + }); + const repository = createRepository({ + searchL2TimeIndexes: vi.fn().mockReturnValue([{ level: "l2_time", score: 0.9, item: time }]), + }); + const selectL2FromCatalog = vi.fn().mockResolvedValue({ + intent: "time", + evidenceNote: "Expanded Xibeiwang activity details.", + enoughAt: "l2", + }); + const extractor = createExtractor({ + decideMemoryLookup: vi + .fn() + .mockImplementation( + async (input: { recentMessages?: Array<{ role: string; content: string }> }) => { + expect(input.recentMessages).toEqual([ + { role: "user", content: "我在西北旺都做了什么" }, + { role: "assistant", content: "你主要在西北旺处理了几个工作点。" }, + ]); + return { + queryScope: "continuation", + effectiveQuery: "更详细地回忆我在西北旺都做了什么", + memoryRelevant: true, + baseOnly: false, + lookupQueries: [ + { targetTypes: ["time"], lookupQuery: "西北旺 做了什么", timeRange: null }, + ], + }; + }, + ), + selectL2FromCatalog, + }); + + const retriever = new ReasoningRetriever( + repository as never, + createSkillsRuntime() as never, + extractor as never, + { getSettings: () => createSettings() }, + ); + + const result = await retriever.retrieve("不够详细", { + retrievalMode: "explicit", + recentMessages: [ + { role: "user", content: "我在西北旺都做了什么" }, + { role: "assistant", content: "你主要在西北旺处理了几个工作点。" }, + ], + }); + + expect(result.query).toBe("不够详细"); + expect(repository.searchL2TimeIndexes as ReturnType).toHaveBeenCalledWith( + "西北旺 做了什么", + 10, + ); + expect(selectL2FromCatalog).toHaveBeenCalledWith( + expect.objectContaining({ + query: "更详细地回忆我在西北旺都做了什么", + }), + ); + expect(result.debug).toMatchObject({ + hop1QueryScope: "continuation", + hop1EffectiveQuery: "更详细地回忆我在西北旺都做了什么", + }); + }); + + it("uses direct date-key reads for time-range retrieval", async () => { + const time = createL2Time(); + const repository = createRepository({ + getL2TimeByDate: vi + .fn() + .mockImplementation((dateKey: string) => (dateKey === "2026-03-31" ? time : undefined)), + searchL2TimeIndexes: vi.fn().mockReturnValue([]), + }); + const extractor = createExtractor({ + decideMemoryLookup: vi.fn().mockResolvedValue({ + memoryRelevant: true, + baseOnly: false, + lookupQueries: [ + { + targetTypes: ["time"], + lookupQuery: "今天做了什么", + timeRange: { startDate: "2026-03-31", endDate: "2026-03-31" }, + }, + ], + }), + selectL2FromCatalog: vi.fn().mockResolvedValue({ + intent: "time", + evidenceNote: "2026-03-31 focused on retrieval pipeline work.", + enoughAt: "l2", + }), + }); + + const retriever = new ReasoningRetriever( + repository as never, + createSkillsRuntime() as never, + extractor as never, + { getSettings: () => createSettings() }, + ); + + const result = await retriever.retrieve("我今天都在忙什么", { retrievalMode: "explicit" }); + + expect(result.intent).toBe("time"); + expect(result.l2Results.map((item) => item.item.l2IndexId)).toEqual(["l2-time-1"]); + expect(result.evidenceNote).toContain("2026-03-31"); + expect(repository.getL2TimeByDate as ReturnType).toHaveBeenCalledWith( + "2026-03-31", + ); + expect(repository.searchL2TimeIndexes as ReturnType).not.toHaveBeenCalled(); + }); + + it("uses BM25-style project retrieval for project-only queries", async () => { + const project = createL2Project(); + const projectHits: L2SearchResult[] = [{ level: "l2_project", score: 0.9, item: project }]; + const repository = createRepository({ + searchL2ProjectIndexes: vi.fn().mockReturnValue(projectHits), + }); + const extractor = createExtractor({ + decideMemoryLookup: vi.fn().mockResolvedValue({ + memoryRelevant: true, + baseOnly: false, + lookupQueries: [ + { targetTypes: ["project"], lookupQuery: "ClawXMemory 进展", timeRange: null }, + ], + }), + selectL2FromCatalog: vi.fn().mockResolvedValue({ + intent: "project", + evidenceNote: + "ClawXMemory is currently refactoring retrieval and has implemented deterministic L2 routing.", + enoughAt: "l2", + }), + }); + + const retriever = new ReasoningRetriever( + repository as never, + createSkillsRuntime() as never, + extractor as never, + { getSettings: () => createSettings() }, + ); + + const result = await retriever.retrieve("ClawXMemory 项目进展", { retrievalMode: "explicit" }); + + expect(result.intent).toBe("project"); + expect(result.l2Results).toHaveLength(1); + expect(result.l2Results[0]?.level).toBe("l2_project"); + expect(repository.searchL2ProjectIndexes as ReturnType).toHaveBeenCalledWith( + "ClawXMemory 进展", + 10, + ); + }); + + it("keeps time hits ahead of project hits for mixed queries", async () => { + const time = createL2Time(); + const project = createL2Project(); + const repository = createRepository({ + getL2TimeByDate: vi + .fn() + .mockImplementation((dateKey: string) => (dateKey === "2026-03-31" ? time : undefined)), + searchL2ProjectIndexes: vi + .fn() + .mockReturnValue([{ level: "l2_project", score: 0.9, item: project }]), + }); + const extractor = createExtractor({ + decideMemoryLookup: vi.fn().mockResolvedValue({ + memoryRelevant: true, + baseOnly: false, + lookupQueries: [ + { + targetTypes: ["time", "project"], + lookupQuery: "今天 ClawXMemory 进展", + timeRange: { startDate: "2026-03-31", endDate: "2026-03-31" }, + }, + ], + }), + selectL2FromCatalog: vi.fn().mockResolvedValue({ + intent: "general", + evidenceNote: "Today the project work focused on retrieval routing.", + enoughAt: "l2", + }), + }); + + const retriever = new ReasoningRetriever( + repository as never, + createSkillsRuntime() as never, + extractor as never, + { getSettings: () => createSettings({ recallTopK: 4 }) }, + ); + + const result = await retriever.retrieve("我今天这个项目进展如何", { + retrievalMode: "explicit", + l2Limit: 4, + }); + + expect(result.l2Results.map((item) => item.level)).toEqual(["l2_time", "l2_project"]); + }); + + it("descends to L1 and L0 in accuracy_first mode and dedupes/sorts candidates", async () => { + const time = createL2Time({ l1Source: ["l1-1", "l1-2"] }); + const project = createL2Project({ l2IndexId: "l2-project-2", l1Source: ["l1-2", "l1-3"] }); + const l1A = createL1({ + l1IndexId: "l1-1", + endedAt: "2026-03-31T09:00:00.000Z", + l0Source: ["l0-1", "l0-2"], + }); + const l1B = createL1({ + l1IndexId: "l1-2", + endedAt: "2026-03-31T10:00:00.000Z", + l0Source: ["l0-2", "l0-3"], + }); + const l1C = createL1({ + l1IndexId: "l1-3", + endedAt: "2026-03-31T08:00:00.000Z", + l0Source: ["l0-4"], + }); + const l0A = createL0({ l0IndexId: "l0-1", timestamp: "2026-03-31T09:30:00.000Z" }); + const l0B = createL0({ l0IndexId: "l0-2", timestamp: "2026-03-31T10:30:00.000Z" }); + const l0C = createL0({ l0IndexId: "l0-3", timestamp: "2026-03-31T10:45:00.000Z" }); + + const repository = createRepository({ + getL2TimeByDate: vi + .fn() + .mockImplementation((dateKey: string) => (dateKey === "2026-03-31" ? time : undefined)), + searchL2ProjectIndexes: vi + .fn() + .mockReturnValue([{ level: "l2_project", score: 0.9, item: project }]), + getL1ByIds: vi + .fn() + .mockImplementation((ids: string[]) => + [l1A, l1B, l1C].filter((item) => ids.includes(item.l1IndexId)), + ), + getL0ByIds: vi + .fn() + .mockImplementation((ids: string[]) => + [l0A, l0B, l0C].filter((item) => ids.includes(item.l0IndexId)), + ), + }); + const extractor = createExtractor({ + decideMemoryLookup: vi + .fn() + .mockImplementation( + async (input: { debugTrace?: (debug: Record) => void }) => { + const parsed = { + memoryRelevant: true, + baseOnly: false, + lookupQueries: [ + { + targetTypes: ["time", "project"], + lookupQuery: "最近一周 ClawXMemory 进展", + timeRange: { startDate: "2026-03-31", endDate: "2026-03-31" }, + }, + ], + }; + emitPromptDebug(input, "Hop1 lookup", parsed); + return parsed; + }, + ), + selectL2FromCatalog: vi + .fn() + .mockImplementation( + async (input: { debugTrace?: (debug: Record) => void }) => { + const parsed = { + intent: "general", + evidenceNote: "L2 note", + enoughAt: "descend_l1", + }; + emitPromptDebug(input, "Hop2 L2 selection", parsed); + return parsed; + }, + ), + selectL1FromEvidence: vi + .fn() + .mockImplementation( + async (input: { debugTrace?: (debug: Record) => void }) => { + const parsed = { + evidenceNote: "L1 note", + enoughAt: "descend_l0", + }; + emitPromptDebug(input, "Hop3 L1 selection", parsed); + return parsed; + }, + ), + selectL0FromEvidence: vi + .fn() + .mockImplementation( + async (input: { debugTrace?: (debug: Record) => void }) => { + const parsed = { + evidenceNote: "Final note with exact conversation details.", + enoughAt: "l0", + }; + emitPromptDebug(input, "Hop4 L0 selection", parsed); + return parsed; + }, + ), + }); + + const retriever = new ReasoningRetriever( + repository as never, + createSkillsRuntime() as never, + extractor as never, + { getSettings: () => createSettings({ recallTopK: 2 }) }, + ); + + const result = await retriever.retrieve("最近一周 ClawXMemory 进展", { retrievalMode: "auto" }); + + expect(result.enoughAt).toBe("l0"); + expect(result.l1Results.map((item) => item.item.l1IndexId)).toEqual(["l1-2", "l1-1"]); + expect(result.l0Results.map((item) => item.item.l0IndexId)).toEqual(["l0-3", "l0-2"]); + expect(result.evidenceNote).toContain("exact conversation details"); + expect(result.context).toContain("Evidence Note"); + expect(result.trace?.steps.map((step) => step.kind)).toEqual([ + "recall_start", + "hop1_decision", + "l2_candidates", + "hop2_decision", + "l1_candidates", + "hop3_decision", + "l0_candidates", + "hop4_decision", + "context_rendered", + ]); + expect( + result.trace?.steps.find((step) => step.kind === "hop2_decision")?.details?.length, + ).toBeGreaterThan(0); + expect( + result.trace?.steps.find((step) => step.kind === "hop4_decision")?.promptDebug, + ).toMatchObject({ + requestLabel: "Hop4 L0 selection", + systemPrompt: expect.stringContaining("Hop4 L0 selection"), + userPrompt: expect.stringContaining("Hop4 L0 selection"), + parsedResult: expect.objectContaining({ + enoughAt: "l0", + }), + }); + }); + + it("continues descending when hop2 and hop3 return none in accuracy_first mode", async () => { + const time = createL2Time(); + const l1 = createL1(); + const l0 = createL0(); + const repository = createRepository({ + getL2TimeByDate: vi + .fn() + .mockImplementation((dateKey: string) => (dateKey === "2026-03-31" ? time : undefined)), + getL1ByIds: vi + .fn() + .mockImplementation((ids: string[]) => [l1].filter((item) => ids.includes(item.l1IndexId))), + getL0ByIds: vi + .fn() + .mockImplementation((ids: string[]) => [l0].filter((item) => ids.includes(item.l0IndexId))), + }); + const extractor = createExtractor({ + decideMemoryLookup: vi.fn().mockResolvedValue({ + memoryRelevant: true, + baseOnly: false, + lookupQueries: [ + { + targetTypes: ["time"], + lookupQuery: "今天做了什么", + timeRange: { startDate: "2026-03-31", endDate: "2026-03-31" }, + }, + ], + }), + selectL2FromCatalog: vi.fn().mockResolvedValue({ + intent: "time", + evidenceNote: "L2 note", + enoughAt: "none", + }), + selectL1FromEvidence: vi.fn().mockResolvedValue({ + evidenceNote: "L1 note", + enoughAt: "none", + }), + selectL0FromEvidence: vi.fn().mockResolvedValue({ + evidenceNote: "L0 note with direct session evidence.", + enoughAt: "l0", + }), + }); + + const retriever = new ReasoningRetriever( + repository as never, + createSkillsRuntime() as never, + extractor as never, + { getSettings: () => createSettings() }, + ); + + const result = await retriever.retrieve("我今天都在忙什么", { retrievalMode: "auto" }); + + expect(result.enoughAt).toBe("l0"); + expect(result.l1Results.map((item) => item.item.l1IndexId)).toEqual(["l1-1"]); + expect(result.l0Results.map((item) => item.item.l0IndexId)).toEqual(["l0-1"]); + expect(extractor.selectL1FromEvidence as ReturnType).toHaveBeenCalled(); + expect(extractor.selectL0FromEvidence as ReturnType).toHaveBeenCalled(); + }); + + it("marks missing L1 candidates instead of pretending L2 was model-confirmed", async () => { + const time = createL2Time({ l1Source: [] }); + const repository = createRepository({ + getL2TimeByDate: vi + .fn() + .mockImplementation((dateKey: string) => (dateKey === "2026-03-31" ? time : undefined)), + getL1ByIds: vi.fn().mockReturnValue([]), + }); + const extractor = createExtractor({ + decideMemoryLookup: vi.fn().mockResolvedValue({ + memoryRelevant: true, + baseOnly: false, + lookupQueries: [ + { + targetTypes: ["time"], + lookupQuery: "今天做了什么", + timeRange: { startDate: "2026-03-31", endDate: "2026-03-31" }, + }, + ], + }), + selectL2FromCatalog: vi.fn().mockResolvedValue({ + intent: "time", + evidenceNote: "Need deeper evidence before confirming the answer.", + enoughAt: "none", + }), + }); + + const retriever = new ReasoningRetriever( + repository as never, + createSkillsRuntime() as never, + extractor as never, + { getSettings: () => createSettings() }, + ); + + const result = await retriever.retrieve("我今天都在忙什么", { retrievalMode: "auto" }); + + expect(result.enoughAt).toBe("l2"); + expect(result.debug?.corrections).toContain("missing_l1_candidates"); + expect(extractor.selectL1FromEvidence as ReturnType).not.toHaveBeenCalled(); + }); + + it("marks missing L0 candidates when hop3 cannot descend further", async () => { + const time = createL2Time(); + const l1 = createL1({ l0Source: [] }); + const repository = createRepository({ + getL2TimeByDate: vi + .fn() + .mockImplementation((dateKey: string) => (dateKey === "2026-03-31" ? time : undefined)), + getL1ByIds: vi + .fn() + .mockImplementation((ids: string[]) => [l1].filter((item) => ids.includes(item.l1IndexId))), + getL0ByIds: vi.fn().mockReturnValue([]), + }); + const extractor = createExtractor({ + decideMemoryLookup: vi.fn().mockResolvedValue({ + memoryRelevant: true, + baseOnly: false, + lookupQueries: [ + { + targetTypes: ["time"], + lookupQuery: "今天做了什么", + timeRange: { startDate: "2026-03-31", endDate: "2026-03-31" }, + }, + ], + }), + selectL2FromCatalog: vi.fn().mockResolvedValue({ + intent: "time", + evidenceNote: "L2 note", + enoughAt: "descend_l1", + }), + selectL1FromEvidence: vi.fn().mockResolvedValue({ + evidenceNote: "L1 note", + enoughAt: "none", + }), + }); + + const retriever = new ReasoningRetriever( + repository as never, + createSkillsRuntime() as never, + extractor as never, + { getSettings: () => createSettings() }, + ); + + const result = await retriever.retrieve("我今天都在忙什么", { retrievalMode: "auto" }); + + expect(result.enoughAt).toBe("l1"); + expect(result.debug?.corrections).toContain("missing_l0_candidates"); + expect(extractor.selectL0FromEvidence as ReturnType).not.toHaveBeenCalled(); + }); + + it("stays at L2 in answer_first auto mode even when hop2 wants deeper evidence", async () => { + const time = createL2Time(); + const repository = createRepository({ + getL2TimeByDate: vi + .fn() + .mockImplementation((dateKey: string) => (dateKey === "2026-03-31" ? time : undefined)), + }); + const extractor = createExtractor({ + decideMemoryLookup: vi.fn().mockResolvedValue({ + memoryRelevant: true, + baseOnly: false, + lookupQueries: [ + { + targetTypes: ["time"], + lookupQuery: "今天做了什么", + timeRange: { startDate: "2026-03-31", endDate: "2026-03-31" }, + }, + ], + }), + selectL2FromCatalog: vi.fn().mockResolvedValue({ + intent: "time", + evidenceNote: "L2 note only.", + enoughAt: "descend_l1", + }), + }); + + const retriever = new ReasoningRetriever( + repository as never, + createSkillsRuntime() as never, + extractor as never, + { getSettings: () => createSettings({ reasoningMode: "answer_first" }) }, + ); + + const result = await retriever.retrieve("我今天都在忙什么", { retrievalMode: "auto" }); + + expect(result.enoughAt).toBe("l2"); + expect(result.l1Results).toEqual([]); + expect(result.l0Results).toEqual([]); + expect(result.debug?.corrections).toContain("hop2_unverified_shallow_stop"); + expect(extractor.selectL1FromEvidence as ReturnType).not.toHaveBeenCalled(); + expect(result.trace?.steps.map((step) => step.kind)).toEqual([ + "recall_start", + "hop1_decision", + "l2_candidates", + "hop2_decision", + "fallback_applied", + "context_rendered", + ]); + }); +}); diff --git a/extensions/openbmb-clawxmemory/tests/runtime.test.ts b/extensions/openbmb-clawxmemory/tests/runtime.test.ts index fec989e9ee554..a4a5777083232 100644 --- a/extensions/openbmb-clawxmemory/tests/runtime.test.ts +++ b/extensions/openbmb-clawxmemory/tests/runtime.test.ts @@ -4,12 +4,34 @@ import { join } from "node:path"; import { afterEach, describe, expect, it, vi } from "vitest"; import { MemoryPluginRuntime, applyManagedMemoryBoundaryConfig } from "../src/runtime.js"; +function deferred() { + let resolve!: (value: T | PromiseLike) => void; + let reject!: (reason?: unknown) => void; + const promise = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + return { promise, resolve, reject }; +} + +function setRuntimeRetriever( + runtime: MemoryPluginRuntime, + retrieve: MemoryPluginRuntime["retriever"]["retrieve"], +): void { + Object.defineProperty(runtime, "retriever", { + value: { retrieve }, + configurable: true, + writable: true, + }); +} + describe("MemoryPluginRuntime", () => { const cleanupPaths: string[] = []; const runtimes: MemoryPluginRuntime[] = []; afterEach(async () => { vi.restoreAllMocks(); + vi.useRealTimers(); for (const runtime of runtimes.splice(0)) { runtime.stop(); } @@ -179,12 +201,14 @@ describe("MemoryPluginRuntime", () => { }); runtimes.push(runtime); - (runtime as { retriever: { retrieve: ReturnType } }).retriever = { - retrieve: vi.fn().mockResolvedValue({ + setRuntimeRetriever( + runtime, + vi.fn().mockResolvedValue({ query: "What happened yesterday?", intent: "time", enoughAt: "l2", profile: null, + evidenceNote: "2026-03-23: OpenClaw plugin SDK migration started.", l2Results: [], l1Results: [], l0Results: [], @@ -195,7 +219,7 @@ describe("MemoryPluginRuntime", () => { cacheHit: false, }, }), - }; + ); const result = await runtime.handleBeforePromptBuild( { prompt: "What happened yesterday?", messages: [] }, @@ -210,6 +234,465 @@ describe("MemoryPluginRuntime", () => { runtime.stop(); }); + it("passes cleaned recent messages into retrieval without duplicating the current prompt", async () => { + const dir = await mkdtemp(join(tmpdir(), "clawxmemory-runtime-")); + cleanupPaths.push(dir); + + const runtime = new MemoryPluginRuntime({ + apiConfig: {}, + pluginRuntime: undefined, + pluginConfig: { + dbPath: join(dir, "memory.sqlite"), + uiEnabled: false, + }, + logger: undefined, + }); + runtimes.push(runtime); + + const retrieve = vi.fn().mockResolvedValue({ + query: "不够详细", + intent: "time", + enoughAt: "l2", + profile: null, + evidenceNote: "expanded note", + l2Results: [], + l1Results: [], + l0Results: [], + context: "expanded note", + debug: { + mode: "llm", + elapsedMs: 20, + cacheHit: false, + }, + }); + setRuntimeRetriever(runtime, retrieve); + + await runtime.handleBeforePromptBuild( + { + prompt: "不够详细", + messages: [ + { role: "user", content: "我在西北旺都做了什么" }, + { role: "assistant", content: "你主要在西北旺处理了几个工作点。" }, + { role: "user", content: "不够详细" }, + ], + } as never, + { sessionKey: "session-followup" } as never, + ); + + expect(retrieve).toHaveBeenCalledWith( + "不够详细", + expect.objectContaining({ + retrievalMode: "auto", + recentMessages: [ + { role: "user", content: "我在西北旺都做了什么" }, + { role: "assistant", content: "你主要在西北旺处理了几个工作点。" }, + ], + }), + ); + + runtime.stop(); + }); + + it("records real-turn case traces with retrieval, tool summaries, and final answer", async () => { + const dir = await mkdtemp(join(tmpdir(), "clawxmemory-runtime-")); + cleanupPaths.push(dir); + + const runtime = new MemoryPluginRuntime({ + apiConfig: {}, + pluginRuntime: undefined, + pluginConfig: { + dbPath: join(dir, "memory.sqlite"), + uiEnabled: false, + }, + logger: undefined, + }); + runtimes.push(runtime); + + setRuntimeRetriever( + runtime, + vi.fn().mockResolvedValue({ + query: "我上周项目进展如何", + intent: "project", + enoughAt: "l1", + profile: null, + evidenceNote: "上周主要在推进检索链路改造。", + l2Results: [], + l1Results: [], + l0Results: [], + context: "## Evidence Note\n上周主要在推进检索链路改造。", + trace: { + traceId: "trace-1", + query: "我上周项目进展如何", + mode: "auto", + startedAt: "2026-04-01T00:00:00.000Z", + finishedAt: "2026-04-01T00:00:01.000Z", + steps: [ + { + stepId: "trace-1:1", + kind: "recall_start", + title: "Recall Started", + status: "info", + inputSummary: "我上周项目进展如何", + outputSummary: "mode=auto", + }, + { + stepId: "trace-1:2", + kind: "hop1_decision", + title: "Hop 1 Decision", + status: "success", + inputSummary: "query", + outputSummary: "memoryRelevant=yes", + }, + { + stepId: "trace-1:3", + kind: "l2_candidates", + title: "L2 Candidates", + status: "success", + inputSummary: "lookup", + outputSummary: "project candidates", + }, + { + stepId: "trace-1:4", + kind: "hop2_decision", + title: "Hop 2 Decision", + status: "success", + inputSummary: "l2", + outputSummary: "descend_l1", + }, + { + stepId: "trace-1:5", + kind: "l1_candidates", + title: "L1 Candidates", + status: "success", + inputSummary: "l1 lookup", + outputSummary: "l1-1", + }, + { + stepId: "trace-1:6", + kind: "hop3_decision", + title: "Hop 3 Decision", + status: "success", + inputSummary: "evidence", + outputSummary: "enoughAt=l1", + }, + ], + }, + debug: { + mode: "llm", + elapsedMs: 12, + cacheHit: false, + path: "auto", + }, + }), + ); + + runtime.handleInternalMessageReceived({ + type: "message", + action: "received", + sessionKey: "session-case", + context: { + content: "我上周项目进展如何", + }, + } as never); + + await runtime.handleBeforePromptBuild( + { prompt: "我上周项目进展如何", messages: [] } as never, + { sessionKey: "session-case" } as never, + ); + + runtime.handleBeforeToolCall( + { + toolName: "memory_search", + params: { query: "上周项目进展" }, + toolCallId: "tool-1", + }, + { sessionKey: "session-case" } as never, + ); + runtime.handleAfterToolCall( + { + toolName: "memory_search", + params: { query: "上周项目进展" }, + toolCallId: "tool-1", + result: { evidenceNote: "note" }, + durationMs: 32, + }, + { sessionKey: "session-case" } as never, + ); + + await runtime.handleAgentEnd( + { + success: true, + messages: [ + { role: "user", content: "我上周项目进展如何" }, + { role: "assistant", content: "上周主要在推进检索链路改造。" }, + ], + } as never, + { sessionKey: "session-case" } as never, + ); + + const records = ( + runtime as never as { + listRecentCaseTraces: (limit: number) => Array>; + } + ).listRecentCaseTraces(10); + expect(records).toHaveLength(1); + expect(records[0]).toMatchObject({ + sessionKey: "session-case", + query: "我上周项目进展如何", + status: "completed", + assistantReply: "上周主要在推进检索链路改造。", + retrieval: { + intent: "project", + enoughAt: "l1", + injected: true, + pathSummary: "l2->l1", + evidenceNotePreview: "上周主要在推进检索链路改造。", + }, + }); + expect( + (records[0]?.retrieval as { trace?: { steps?: Array<{ kind: string }> } })?.trace?.steps?.map( + (step) => step.kind, + ), + ).toEqual([ + "recall_start", + "hop1_decision", + "l2_candidates", + "hop2_decision", + "l1_candidates", + "hop3_decision", + ]); + expect( + (records[0]?.toolEvents as Array>)?.map((event) => event.phase), + ).toEqual(["start", "result"]); + + runtime.stop(); + }); + + it("marks the previous case interrupted when a new user turn arrives in the same session", async () => { + const dir = await mkdtemp(join(tmpdir(), "clawxmemory-runtime-")); + cleanupPaths.push(dir); + + const runtime = new MemoryPluginRuntime({ + apiConfig: {}, + pluginRuntime: undefined, + pluginConfig: { + dbPath: join(dir, "memory.sqlite"), + uiEnabled: false, + }, + logger: undefined, + }); + runtimes.push(runtime); + + runtime.handleBeforeMessageWrite( + { + message: { + role: "user", + content: "第一个问题", + }, + } as never, + { sessionKey: "session-interrupt" } as never, + ); + runtime.handleBeforeMessageWrite( + { + message: { + role: "user", + content: "第二个问题", + }, + } as never, + { sessionKey: "session-interrupt" } as never, + ); + + const records = ( + runtime as never as { + listRecentCaseTraces: (limit: number) => Array>; + } + ).listRecentCaseTraces(10); + expect(records).toHaveLength(2); + expect(records[0]).toMatchObject({ query: "第二个问题", status: "running" }); + expect(records[1]).toMatchObject({ query: "第一个问题", status: "interrupted" }); + + runtime.stop(); + }); + + it("merges control-ui metadata prompts and cleaned user messages into one case", async () => { + const dir = await mkdtemp(join(tmpdir(), "clawxmemory-runtime-")); + cleanupPaths.push(dir); + + const runtime = new MemoryPluginRuntime({ + apiConfig: {}, + pluginRuntime: undefined, + pluginConfig: { + dbPath: join(dir, "memory.sqlite"), + uiEnabled: false, + }, + logger: undefined, + }); + runtimes.push(runtime); + + const retrieve = vi.fn().mockResolvedValue({ + query: "我对于天津旅游的规划是什么", + intent: "time", + enoughAt: "l1", + profile: null, + evidenceNote: "4月1日未制定新的天津旅游规划,但已有相关天津项目在推进。", + l2Results: [], + l1Results: [], + l0Results: [], + context: "## Evidence Note\n4月1日未制定新的天津旅游规划,但已有相关天津项目在推进。", + trace: { + traceId: "trace-merge", + query: "我对于天津旅游的规划是什么", + mode: "auto", + startedAt: "2026-04-01T00:00:00.000Z", + finishedAt: "2026-04-01T00:00:01.000Z", + steps: [ + { + stepId: "trace-merge:1", + kind: "recall_start", + title: "Recall Started", + status: "info", + inputSummary: "我对于天津旅游的规划是什么", + outputSummary: "mode=auto", + }, + ], + }, + debug: { + mode: "llm", + elapsedMs: 12, + cacheHit: false, + }, + }); + setRuntimeRetriever(runtime, retrieve); + + await runtime.handleBeforePromptBuild( + { + prompt: [ + "Sender (untrusted metadata):", + "```json", + "{", + ' "label": "openclaw-control-ui",', + ' "id": "openclaw-control-ui"', + "}", + "```", + "", + "[Wed 2026-04-01 15:20 GMT+8] 我对于天津旅游的规划是什么", + ].join("\n"), + messages: [], + } as never, + { sessionKey: "session-merge" } as never, + ); + + runtime.handleBeforeMessageWrite( + { + message: { + role: "user", + content: "我对于天津旅游的规划是什么", + }, + } as never, + { sessionKey: "session-merge" } as never, + ); + + await runtime.handleAgentEnd( + { + success: true, + messages: [ + { role: "user", content: "我对于天津旅游的规划是什么" }, + { role: "assistant", content: "你目前主要在推进清明假期天津穷游攻略。" }, + ], + } as never, + { sessionKey: "session-merge" } as never, + ); + + const records = ( + runtime as never as { + listRecentCaseTraces: (limit: number) => Array>; + } + ).listRecentCaseTraces(10); + expect(records).toHaveLength(1); + expect(retrieve).toHaveBeenCalledWith( + "我对于天津旅游的规划是什么", + expect.objectContaining({ retrievalMode: "auto" }), + ); + expect(records[0]).toMatchObject({ + sessionKey: "session-merge", + query: "我对于天津旅游的规划是什么", + status: "completed", + retrieval: { + intent: "time", + enoughAt: "l1", + injected: true, + }, + }); + expect( + (records[0]?.retrieval as { trace?: { steps?: Array<{ kind: string }> } })?.trace?.steps?.map( + (step) => step.kind, + ), + ).toEqual(["recall_start"]); + + runtime.stop(); + }); + + it("creates a case from user message write even when retrieval data is absent", async () => { + const dir = await mkdtemp(join(tmpdir(), "clawxmemory-runtime-")); + cleanupPaths.push(dir); + + const runtime = new MemoryPluginRuntime({ + apiConfig: {}, + pluginRuntime: undefined, + pluginConfig: { + dbPath: join(dir, "memory.sqlite"), + uiEnabled: false, + }, + logger: undefined, + }); + runtimes.push(runtime); + + runtime.handleBeforeMessageWrite( + { + message: { + role: "user", + content: "这是一个没有触发 recall 记录的测试问题", + }, + } as never, + { sessionKey: "session-write-only" } as never, + ); + + await runtime.handleAgentEnd( + { + success: true, + messages: [ + { role: "user", content: "这是一个没有触发 recall 记录的测试问题" }, + { role: "assistant", content: "这是最终回答。" }, + ], + } as never, + { sessionKey: "session-write-only" } as never, + ); + + const records = ( + runtime as never as { + listRecentCaseTraces: (limit: number) => Array>; + } + ).listRecentCaseTraces(10); + expect(records).toHaveLength(1); + expect(records[0]).toMatchObject({ + sessionKey: "session-write-only", + query: "这是一个没有触发 recall 记录的测试问题", + status: "completed", + assistantReply: "这是最终回答。", + retrieval: { + enoughAt: "none", + injected: false, + }, + }); + expect( + (records[0]?.retrieval as { trace?: { steps?: Array<{ kind: string }> } })?.trace?.steps?.map( + (step) => step.kind, + ), + ).toEqual(["recall_start", "recall_skipped"]); + + runtime.stop(); + }); + it("sanitizes recall scaffolding when agent_end falls back to raw event messages", async () => { const dir = await mkdtemp(join(tmpdir(), "clawxmemory-runtime-")); cleanupPaths.push(dir); @@ -728,4 +1211,545 @@ describe("MemoryPluginRuntime", () => { expect(runCommandWithTimeout).toHaveBeenCalledTimes(1); expect(startBackgroundRepair).not.toHaveBeenCalled(); }); + + it("runs Dream after pending queue work and prep-flushes before reconstruction", async () => { + const dir = await mkdtemp(join(tmpdir(), "clawxmemory-runtime-")); + cleanupPaths.push(dir); + + const runtime = new MemoryPluginRuntime({ + apiConfig: {}, + pluginRuntime: undefined, + pluginConfig: { + dbPath: join(dir, "memory.sqlite"), + uiEnabled: false, + }, + logger: undefined, + }); + runtimes.push(runtime); + + const pendingQueue = deferred<{ + l0Captured: number; + l1Created: number; + l2TimeUpdated: number; + l2ProjectUpdated: number; + profileUpdated: number; + failed: number; + }>(); + (runtime as never as { queuePromise: Promise }).queuePromise = pendingQueue.promise; + + const prepFlush = { + l0Captured: 1, + l1Created: 1, + l2TimeUpdated: 0, + l2ProjectUpdated: 0, + profileUpdated: 0, + failed: 0, + }; + const flushSpy = vi + .spyOn( + runtime as never as { + flushAllNow: ( + reason: string, + options?: { allowWhileDream?: boolean }, + ) => Promise; + }, + "flushAllNow", + ) + .mockResolvedValue(prepFlush); + const dreamOutcome = { + reviewedL1: 3, + rewrittenProjects: 1, + deletedProjects: 0, + profileUpdated: true, + duplicateTopicCount: 0, + conflictTopicCount: 0, + prunedProjectL1Refs: 1, + prunedProfileL1Refs: 1, + summary: "ok", + }; + const dreamSpy = vi + .spyOn( + ( + runtime as never as { + dreamRewriter: { run: () => Promise }; + } + ).dreamRewriter, + "run", + ) + .mockResolvedValue(dreamOutcome); + + const dreamPromise = ( + runtime as never as { + runDreamNow: (trigger: "manual") => Promise>; + } + ).runDreamNow("manual"); + expect(flushSpy).not.toHaveBeenCalled(); + expect(dreamSpy).not.toHaveBeenCalled(); + + pendingQueue.resolve({ + l0Captured: 0, + l1Created: 0, + l2TimeUpdated: 0, + l2ProjectUpdated: 0, + profileUpdated: 0, + failed: 0, + }); + + await vi.waitFor(() => { + expect(flushSpy).toHaveBeenCalledWith("dream_prep", { allowWhileDream: true }); + }); + await vi.waitFor(() => { + expect(dreamSpy).toHaveBeenCalledTimes(1); + }); + + const result = await dreamPromise; + expect(flushSpy.mock.invocationCallOrder[0]).toBeLessThan(dreamSpy.mock.invocationCallOrder[0]); + expect(result).toMatchObject({ + prepFlush, + reviewedL1: 3, + rewrittenProjects: 1, + }); + }); + + it("queues heartbeat work while Dream is running and rejects concurrent Dream runs", async () => { + const dir = await mkdtemp(join(tmpdir(), "clawxmemory-runtime-")); + cleanupPaths.push(dir); + + const runtime = new MemoryPluginRuntime({ + apiConfig: {}, + pluginRuntime: undefined, + pluginConfig: { + dbPath: join(dir, "memory.sqlite"), + uiEnabled: false, + }, + logger: undefined, + }); + runtimes.push(runtime); + + const prepFlush = { + l0Captured: 0, + l1Created: 0, + l2TimeUpdated: 0, + l2ProjectUpdated: 0, + profileUpdated: 0, + failed: 0, + }; + vi.spyOn( + runtime as never as { + flushAllNow: ( + reason: string, + options?: { allowWhileDream?: boolean }, + ) => Promise; + }, + "flushAllNow", + ).mockResolvedValue(prepFlush); + + const dreamDeferred = deferred<{ + reviewedL1: number; + rewrittenProjects: number; + deletedProjects: number; + profileUpdated: boolean; + duplicateTopicCount: number; + conflictTopicCount: number; + prunedProjectL1Refs: number; + prunedProfileL1Refs: number; + summary: string; + }>(); + vi.spyOn( + ( + runtime as never as { + dreamRewriter: { run: () => Promise }; + } + ).dreamRewriter, + "run", + ).mockImplementation(() => dreamDeferred.promise); + + const drainSpy = vi + .spyOn( + runtime as never as { + drainIndexQueue: () => Promise; + }, + "drainIndexQueue", + ) + .mockResolvedValue(prepFlush); + + const dreamPromise = ( + runtime as never as { + runDreamNow: (trigger: "manual") => Promise; + } + ).runDreamNow("manual"); + await vi.waitFor(() => { + expect((runtime as never as { dreamRunLocked: boolean }).dreamRunLocked).toBe(true); + }); + + await expect( + ( + runtime as never as { + runDreamNow: (trigger: "manual") => Promise; + } + ).runDreamNow("manual"), + ).rejects.toThrow("already running"); + + const queuedIndexPromise = ( + runtime as never as { + requestIndexRun: (reason: string, sessionKeys?: string[]) => Promise; + } + ).requestIndexRun("scheduled", ["session-a"]); + expect(drainSpy).not.toHaveBeenCalled(); + + dreamDeferred.resolve({ + reviewedL1: 2, + rewrittenProjects: 1, + deletedProjects: 0, + profileUpdated: true, + duplicateTopicCount: 0, + conflictTopicCount: 0, + prunedProjectL1Refs: 0, + prunedProfileL1Refs: 0, + summary: "done", + }); + + await queuedIndexPromise; + await dreamPromise; + expect(drainSpy).toHaveBeenCalledTimes(1); + }); + + it("schedules auto index and auto Dream timers and rebuilds them after settings changes", async () => { + vi.useFakeTimers(); + const dir = await mkdtemp(join(tmpdir(), "clawxmemory-runtime-")); + cleanupPaths.push(dir); + + const runtime = new MemoryPluginRuntime({ + apiConfig: {}, + pluginRuntime: undefined, + pluginConfig: { + dbPath: join(dir, "memory.sqlite"), + uiEnabled: false, + autoIndexIntervalMinutes: 60, + autoDreamIntervalMinutes: 360, + autoDreamMinNewL1: 10, + }, + logger: undefined, + }); + runtimes.push(runtime); + + vi.spyOn( + runtime as never as { + runStartupInitialization: () => Promise; + }, + "runStartupInitialization", + ).mockResolvedValue(undefined); + const indexSpy = vi + .spyOn( + runtime as never as { + requestIndexRun: (reason: string, sessionKeys?: string[]) => Promise; + }, + "requestIndexRun", + ) + .mockResolvedValue({ + l0Captured: 0, + l1Created: 0, + l2TimeUpdated: 0, + l2ProjectUpdated: 0, + profileUpdated: 0, + failed: 0, + }); + const dreamSpy = vi + .spyOn( + runtime as never as { + runDreamNow: (trigger: "manual" | "scheduled") => Promise; + }, + "runDreamNow", + ) + .mockResolvedValue({ + prepFlush: { + l0Captured: 0, + l1Created: 0, + l2TimeUpdated: 0, + l2ProjectUpdated: 0, + profileUpdated: 0, + failed: 0, + }, + reviewedL1: 0, + rewrittenProjects: 0, + deletedProjects: 0, + profileUpdated: false, + duplicateTopicCount: 0, + conflictTopicCount: 0, + prunedProjectL1Refs: 0, + prunedProfileL1Refs: 0, + summary: "noop", + status: "skipped", + trigger: "scheduled", + skipReason: "new_l1_below_threshold", + }); + + runtime.start(); + + await vi.advanceTimersByTimeAsync(60 * 60 * 1000); + expect(indexSpy).toHaveBeenCalledWith("scheduled"); + expect(dreamSpy).not.toHaveBeenCalled(); + + await vi.advanceTimersByTimeAsync(5 * 60 * 60 * 1000); + expect(dreamSpy).toHaveBeenCalledWith("scheduled"); + + indexSpy.mockClear(); + dreamSpy.mockClear(); + + ( + runtime as never as { + applyIndexingSettings: (partial: Record) => unknown; + } + ).applyIndexingSettings({ + autoIndexIntervalMinutes: 120, + autoDreamIntervalMinutes: 60, + }); + + await vi.advanceTimersByTimeAsync(60 * 60 * 1000); + expect(indexSpy).not.toHaveBeenCalled(); + expect(dreamSpy).toHaveBeenCalledWith("scheduled"); + + await vi.advanceTimersByTimeAsync(60 * 60 * 1000); + expect(indexSpy).toHaveBeenCalledWith("scheduled"); + }); + + it("skips scheduled Dream when new L1 count is below the configured threshold", async () => { + const dir = await mkdtemp(join(tmpdir(), "clawxmemory-runtime-")); + cleanupPaths.push(dir); + + const runtime = new MemoryPluginRuntime({ + apiConfig: {}, + pluginRuntime: undefined, + pluginConfig: { + dbPath: join(dir, "memory.sqlite"), + uiEnabled: false, + }, + logger: undefined, + }); + runtimes.push(runtime); + + const prepFlush = { + l0Captured: 0, + l1Created: 0, + l2TimeUpdated: 0, + l2ProjectUpdated: 0, + profileUpdated: 0, + failed: 0, + }; + vi.spyOn( + runtime as never as { + flushAllNow: ( + reason: string, + options?: { allowWhileDream?: boolean }, + ) => Promise; + }, + "flushAllNow", + ).mockResolvedValue(prepFlush); + const dreamSpy = vi + .spyOn( + ( + runtime as never as { + dreamRewriter: { run: () => Promise }; + } + ).dreamRewriter, + "run", + ) + .mockResolvedValue({ + reviewedL1: 1, + rewrittenProjects: 1, + deletedProjects: 0, + profileUpdated: true, + duplicateTopicCount: 0, + conflictTopicCount: 0, + prunedProjectL1Refs: 0, + prunedProfileL1Refs: 0, + summary: "should not run", + }); + + const result = await ( + runtime as never as { + runDreamNow: (trigger: "scheduled") => Promise>; + } + ).runDreamNow("scheduled"); + + expect(dreamSpy).not.toHaveBeenCalled(); + expect(result).toMatchObject({ + status: "skipped", + skipReason: "new_l1_below_threshold", + prepFlush, + }); + expect(runtime.repository.getPipelineState("lastDreamStatus")).toBe("skipped"); + }); + + it("runs scheduled Dream after 10 new L1 windows and records the latest successful cutoff", async () => { + const dir = await mkdtemp(join(tmpdir(), "clawxmemory-runtime-")); + cleanupPaths.push(dir); + + const runtime = new MemoryPluginRuntime({ + apiConfig: {}, + pluginRuntime: undefined, + pluginConfig: { + dbPath: join(dir, "memory.sqlite"), + uiEnabled: false, + }, + logger: undefined, + }); + runtimes.push(runtime); + + for (let index = 0; index < 10; index += 1) { + const minutes = String(index).padStart(2, "0"); + runtime.repository.insertL1Window({ + l1IndexId: `l1-${index}`, + sessionKey: `session-${index}`, + timePeriod: `2026-04-01 ${minutes}:00`, + startedAt: `2026-04-01T00:${minutes}:00.000Z`, + endedAt: `2026-04-01T00:${minutes}:30.000Z`, + summary: `summary-${index}`, + facts: [], + situationTimeInfo: "", + projectTags: [], + projectDetails: [], + l0Source: [], + createdAt: `2026-04-01T00:${minutes}:30.000Z`, + }); + } + + const prepFlush = { + l0Captured: 0, + l1Created: 0, + l2TimeUpdated: 0, + l2ProjectUpdated: 0, + profileUpdated: 0, + failed: 0, + }; + vi.spyOn( + runtime as never as { + flushAllNow: ( + reason: string, + options?: { allowWhileDream?: boolean }, + ) => Promise; + }, + "flushAllNow", + ).mockResolvedValue(prepFlush); + const dreamSpy = vi + .spyOn( + ( + runtime as never as { + dreamRewriter: { run: () => Promise }; + } + ).dreamRewriter, + "run", + ) + .mockResolvedValue({ + reviewedL1: 10, + rewrittenProjects: 2, + deletedProjects: 1, + profileUpdated: true, + duplicateTopicCount: 1, + conflictTopicCount: 0, + prunedProjectL1Refs: 3, + prunedProfileL1Refs: 1, + summary: "scheduled ok", + }); + + const result = await ( + runtime as never as { + runDreamNow: (trigger: "scheduled") => Promise>; + } + ).runDreamNow("scheduled"); + + expect(dreamSpy).toHaveBeenCalledTimes(1); + expect(result).toMatchObject({ + status: "success", + trigger: "scheduled", + reviewedL1: 10, + rewrittenProjects: 2, + }); + expect(runtime.repository.getPipelineState("lastDreamStatus")).toBe("success"); + expect(runtime.repository.getPipelineState("lastDreamL1EndedAt")).toBe( + "2026-04-01T00:09:30.000Z", + ); + }); + + it("does not apply the auto Dream threshold to manual Dream runs", async () => { + const dir = await mkdtemp(join(tmpdir(), "clawxmemory-runtime-")); + cleanupPaths.push(dir); + + const runtime = new MemoryPluginRuntime({ + apiConfig: {}, + pluginRuntime: undefined, + pluginConfig: { + dbPath: join(dir, "memory.sqlite"), + uiEnabled: false, + }, + logger: undefined, + }); + runtimes.push(runtime); + + runtime.repository.insertL1Window({ + l1IndexId: "l1-only", + sessionKey: "session-only", + timePeriod: "2026-04-01", + startedAt: "2026-04-01T00:00:00.000Z", + endedAt: "2026-04-01T00:05:00.000Z", + summary: "single l1", + facts: [], + situationTimeInfo: "", + projectTags: [], + projectDetails: [], + l0Source: [], + createdAt: "2026-04-01T00:05:00.000Z", + }); + + const prepFlush = { + l0Captured: 0, + l1Created: 0, + l2TimeUpdated: 0, + l2ProjectUpdated: 0, + profileUpdated: 0, + failed: 0, + }; + vi.spyOn( + runtime as never as { + flushAllNow: ( + reason: string, + options?: { allowWhileDream?: boolean }, + ) => Promise; + }, + "flushAllNow", + ).mockResolvedValue(prepFlush); + const dreamSpy = vi + .spyOn( + ( + runtime as never as { + dreamRewriter: { run: () => Promise }; + } + ).dreamRewriter, + "run", + ) + .mockResolvedValue({ + reviewedL1: 1, + rewrittenProjects: 1, + deletedProjects: 0, + profileUpdated: true, + duplicateTopicCount: 0, + conflictTopicCount: 0, + prunedProjectL1Refs: 0, + prunedProfileL1Refs: 0, + summary: "manual ok", + }); + + const result = await ( + runtime as never as { + runDreamNow: (trigger: "manual") => Promise>; + } + ).runDreamNow("manual"); + + expect(dreamSpy).toHaveBeenCalledTimes(1); + expect(result).toMatchObject({ + status: "success", + trigger: "manual", + reviewedL1: 1, + }); + }); }); diff --git a/extensions/openbmb-clawxmemory/tests/sqlite-dream.test.ts b/extensions/openbmb-clawxmemory/tests/sqlite-dream.test.ts new file mode 100644 index 0000000000000..ef83117ef923c --- /dev/null +++ b/extensions/openbmb-clawxmemory/tests/sqlite-dream.test.ts @@ -0,0 +1,125 @@ +import { mkdtempSync } from "node:fs"; +import { tmpdir } from "node:os"; +import { join } from "node:path"; +import { afterEach, describe, expect, it } from "vitest"; +import { MemoryRepository } from "../src/core/index.js"; + +const repositories: MemoryRepository[] = []; + +function createRepository(): MemoryRepository { + const dir = mkdtempSync(join(tmpdir(), "clawxmemory-dream-sqlite-")); + const repository = new MemoryRepository(join(dir, "memory.sqlite")); + repositories.push(repository); + return repository; +} + +afterEach(() => { + while (repositories.length > 0) { + repositories.pop()?.close(); + } +}); + +describe("MemoryRepository.applyDreamRewrite", () => { + it("replaces L2 project sources and global profile sources without touching L2Time", () => { + const repository = createRepository(); + + repository.insertL1Window({ + l1IndexId: "l1-1", + sessionKey: "session-1", + timePeriod: "2026-04-01 morning", + startedAt: "2026-04-01T08:00:00.000Z", + endedAt: "2026-04-01T09:00:00.000Z", + summary: "First L1", + facts: [], + situationTimeInfo: "First situation", + projectTags: ["dream"], + projectDetails: [], + l0Source: [], + createdAt: "2026-04-01T09:00:00.000Z", + }); + repository.insertL1Window({ + l1IndexId: "l1-2", + sessionKey: "session-2", + timePeriod: "2026-04-02 morning", + startedAt: "2026-04-02T08:00:00.000Z", + endedAt: "2026-04-02T09:00:00.000Z", + summary: "Second L1", + facts: [], + situationTimeInfo: "Second situation", + projectTags: ["dream"], + projectDetails: [], + l0Source: [], + createdAt: "2026-04-02T09:00:00.000Z", + }); + + repository.upsertL2TimeIndex({ + l2IndexId: "l2-time-1", + dateKey: "2026-04-02", + summary: "Timeline summary", + l1Source: ["l1-1"], + createdAt: "2026-04-02T10:00:00.000Z", + updatedAt: "2026-04-02T10:00:00.000Z", + }); + repository.upsertL2ProjectIndex({ + l2IndexId: "l2-project-1", + projectKey: "dream-review", + projectName: "Dream Review", + summary: "Old summary", + currentStatus: "in_progress", + latestProgress: "Old progress", + l1Source: ["l1-1", "l1-stale"], + createdAt: "2026-04-01T10:00:00.000Z", + updatedAt: "2026-04-01T10:00:00.000Z", + }); + repository.upsertGlobalProfile("Old profile", ["l1-1", "l1-stale"]); + repository.insertLink("l2", "l2-project-1", "l1", "l1-1"); + repository.insertLink("l2", "l2-time-1", "l1", "l1-1"); + + repository.applyDreamRewrite({ + projects: [ + { + l2IndexId: "l2-project-1", + projectKey: "dream-review", + projectName: "Dream Review", + summary: "New summary", + currentStatus: "in_progress", + latestProgress: "New progress", + l1Source: ["l1-2"], + createdAt: "2026-04-01T10:00:00.000Z", + updatedAt: "2026-04-02T10:00:00.000Z", + }, + ], + profileText: "New profile", + profileSourceL1Ids: ["l1-2"], + }); + + expect(repository.listAllL2Projects()).toEqual([ + expect.objectContaining({ + projectKey: "dream-review", + summary: "New summary", + l1Source: ["l1-2"], + }), + ]); + expect(repository.getGlobalProfileRecord()).toEqual( + expect.objectContaining({ + profileText: "New profile", + sourceL1Ids: ["l1-2"], + }), + ); + expect(repository.listAllL2Time()).toEqual([ + expect.objectContaining({ + l2IndexId: "l2-time-1", + l1Source: ["l1-1"], + }), + ]); + expect(repository.listAllIndexLinks()).toEqual( + expect.arrayContaining([ + expect.objectContaining({ fromId: "l2-project-1", toId: "l1-2" }), + expect.objectContaining({ fromId: "l2-time-1", toId: "l1-1" }), + ]), + ); + expect(repository.listAllIndexLinks()).not.toEqual( + expect.arrayContaining([expect.objectContaining({ fromId: "l2-project-1", toId: "l1-1" })]), + ); + }); +}); diff --git a/extensions/openbmb-clawxmemory/tests/sqlite-search.test.ts b/extensions/openbmb-clawxmemory/tests/sqlite-search.test.ts new file mode 100644 index 0000000000000..5fd0ab97cd49d --- /dev/null +++ b/extensions/openbmb-clawxmemory/tests/sqlite-search.test.ts @@ -0,0 +1,129 @@ +import { mkdtemp, rm } from "node:fs/promises"; +import { tmpdir } from "node:os"; +import { join } from "node:path"; +import { afterEach, describe, expect, it } from "vitest"; +import { + MemoryRepository, + type L2ProjectIndexRecord, + type L2TimeIndexRecord, +} from "../src/core/index.js"; + +function createTimeIndex(overrides: Partial = {}): L2TimeIndexRecord { + return { + l2IndexId: "l2-time-1", + dateKey: "2026-03-31", + summary: "Alpha retrieval work happened today.", + l1Source: ["l1-1"], + createdAt: "2026-03-31T00:00:00.000Z", + updatedAt: "2026-03-31T08:00:00.000Z", + ...overrides, + }; +} + +function createProjectIndex(overrides: Partial = {}): L2ProjectIndexRecord { + return { + l2IndexId: "l2-project-1", + projectKey: "alpha-project", + projectName: "Alpha Project", + summary: "Alpha retrieval project summary.", + currentStatus: "in_progress", + latestProgress: "Alpha project is refactoring search ranking.", + l1Source: ["l1-1"], + createdAt: "2026-03-31T00:00:00.000Z", + updatedAt: "2026-03-31T09:00:00.000Z", + ...overrides, + }; +} + +describe("MemoryRepository L2 search", () => { + const cleanupPaths: string[] = []; + const repositories: MemoryRepository[] = []; + + afterEach(async () => { + for (const repository of repositories.splice(0)) { + repository.close(); + } + await Promise.all( + cleanupPaths.splice(0).map((target) => rm(target, { recursive: true, force: true })), + ); + }); + + async function createRepository(): Promise { + const dir = await mkdtemp(join(tmpdir(), "clawxmemory-sqlite-")); + cleanupPaths.push(dir); + const repository = new MemoryRepository(join(dir, "memory.sqlite")); + repositories.push(repository); + return repository; + } + + it("keeps project-only search from being displaced by time hits", async () => { + const repository = await createRepository(); + repository.upsertL2TimeIndex( + createTimeIndex({ l2IndexId: "l2-time-1", dateKey: "2026-03-31" }), + ); + repository.upsertL2TimeIndex( + createTimeIndex({ + l2IndexId: "l2-time-2", + dateKey: "2026-03-30", + summary: "Alpha work continued yesterday.", + }), + ); + repository.upsertL2ProjectIndex(createProjectIndex()); + + const hits = repository.searchL2ProjectIndexes("Alpha", 1); + + expect(hits).toHaveLength(1); + expect(hits[0]?.level).toBe("l2_project"); + expect(hits[0]?.item.l2IndexId).toBe("l2-project-1"); + }); + + it("keeps time-only search from being displaced by project hits", async () => { + const repository = await createRepository(); + repository.upsertL2ProjectIndex( + createProjectIndex({ l2IndexId: "l2-project-1", projectName: "Release Board" }), + ); + repository.upsertL2ProjectIndex( + createProjectIndex({ + l2IndexId: "l2-project-2", + projectKey: "release-api", + projectName: "Release API", + summary: "Release planning summary.", + latestProgress: "Release tasks are blocked on QA.", + }), + ); + repository.upsertL2TimeIndex( + createTimeIndex({ + l2IndexId: "l2-time-3", + dateKey: "2026-03-29", + summary: "Release day notes and testing timeline.", + }), + ); + + const hits = repository.searchL2TimeIndexes("Release", 1); + + expect(hits).toHaveLength(1); + expect(hits[0]?.level).toBe("l2_time"); + expect(hits[0]?.item.l2IndexId).toBe("l2-time-3"); + }); + + it("merges per-type top-k results for mixed L2 search", async () => { + const repository = await createRepository(); + repository.upsertL2TimeIndex( + createTimeIndex({ l2IndexId: "l2-time-mixed", summary: "Beta work happened today." }), + ); + repository.upsertL2ProjectIndex( + createProjectIndex({ + l2IndexId: "l2-project-mixed", + projectKey: "beta-project", + projectName: "Beta Project", + summary: "Beta project summary.", + latestProgress: "Beta project shipped the retrieval patch.", + }), + ); + + const hits = repository.searchL2Hits("Beta", 2); + + expect(hits).toHaveLength(2); + expect(hits.map((hit) => hit.level)).toEqual(expect.arrayContaining(["l2_time", "l2_project"])); + }); +}); diff --git a/extensions/openbmb-clawxmemory/tests/tools.test.ts b/extensions/openbmb-clawxmemory/tests/tools.test.ts index 8e450fb8fca67..2f1f38c3d62c2 100644 --- a/extensions/openbmb-clawxmemory/tests/tools.test.ts +++ b/extensions/openbmb-clawxmemory/tests/tools.test.ts @@ -8,11 +8,16 @@ import type { } from "../src/core/index.js"; import { buildPluginTools } from "../src/tools.js"; +function readDetails(result: { details?: unknown }): T { + return result.details as T; +} + const retrievalResult: RetrievalResult = { query: "project status", intent: "project", enoughAt: "l2", profile: null, + evidenceNote: "ClawXMemory is in SDK migration and the latest progress is plugin-sdk migration.", l2Results: [ { level: "l2_project", @@ -196,7 +201,6 @@ describe("buildPluginTools", () => { profileUpdated: 0, failed: 0, } satisfies HeartbeatStats); - const tools = buildPluginTools(repository, retriever, { getOverview, flushAll }); expect(tools.map((tool) => tool.name)).toEqual([ "memory_search", @@ -212,6 +216,7 @@ describe("buildPluginTools", () => { ok: true, intent: "project", enoughAt: "l2", + evidenceNote: retrievalResult.evidenceNote, refs: { l2: [{ id: "l2-project-1", level: "l2_project" }], }, @@ -263,7 +268,11 @@ describe("buildPluginTools", () => { offset: 0, count: 2, }); - expect(defaultList.details.items).toEqual([ + expect( + readDetails<{ + items: Array>; + }>(defaultList).items, + ).toEqual([ { level: "l2_time", id: "l2-time-1", @@ -384,4 +393,21 @@ describe("buildPluginTools", () => { const missingIds = await memoryGet!.execute("call-9", { level: "l1", ids: [] }); expect(missingIds.details).toMatchObject({ ok: false }); }); + + it("does not expose the legacy memory_dream_review tool", async () => { + const repository = createRepository(); + const tools = buildPluginTools(repository, createRetriever(), { + getOverview: () => baseOverview, + flushAll: async () => ({ + l0Captured: 0, + l1Created: 0, + l2TimeUpdated: 0, + l2ProjectUpdated: 0, + profileUpdated: 0, + failed: 0, + }), + }); + + expect(tools.find((tool) => tool.name === "memory_dream_review")).toBeUndefined(); + }); }); diff --git a/extensions/openbmb-clawxmemory/tests/ui-server.test.ts b/extensions/openbmb-clawxmemory/tests/ui-server.test.ts index 14f7e68956ee8..73b7395ad220c 100644 --- a/extensions/openbmb-clawxmemory/tests/ui-server.test.ts +++ b/extensions/openbmb-clawxmemory/tests/ui-server.test.ts @@ -4,12 +4,67 @@ import { LocalUiServer } from "../src/ui-server.js"; const activeServers: LocalUiServer[] = []; -async function startUiServer(): Promise { +async function startUiServer(controls: Record = {}): Promise { const uiServer = new LocalUiServer( {} as never, {} as never, { host: "127.0.0.1", port: 0, prefix: "/clawxmemory" }, - {} as never, + { + getSettings: () => ({ + reasoningMode: "answer_first", + recallTopK: 10, + autoIndexIntervalMinutes: 60, + autoDreamIntervalMinutes: 360, + autoDreamMinNewL1: 10, + }), + saveSettings: () => ({ + reasoningMode: "answer_first", + recallTopK: 10, + autoIndexIntervalMinutes: 60, + autoDreamIntervalMinutes: 360, + autoDreamMinNewL1: 10, + }), + runIndexNow: async () => ({ + l0Captured: 0, + l1Created: 0, + l2TimeUpdated: 0, + l2ProjectUpdated: 0, + profileUpdated: 0, + failed: 0, + }), + runDreamNow: async () => ({ + prepFlush: { + l0Captured: 0, + l1Created: 0, + l2TimeUpdated: 0, + l2ProjectUpdated: 0, + profileUpdated: 0, + failed: 0, + }, + reviewedL1: 0, + rewrittenProjects: 0, + deletedProjects: 0, + profileUpdated: false, + duplicateTopicCount: 0, + conflictTopicCount: 0, + prunedProjectL1Refs: 0, + prunedProfileL1Refs: 0, + summary: "noop", + }), + exportMemoryBundle: () => ({ exportedAt: "2026-04-01T00:00:00.000Z" }), + importMemoryBundle: async () => ({ imported: {} }), + getRuntimeOverview: () => ({ + queuedSessions: 0, + lastRecallMs: 0, + recallTimeouts: 0, + lastRecallMode: "none", + currentReasoningMode: "answer_first", + }), + getStartupRepairSnapshot: () => undefined, + listCaseTraces: () => [], + getCaseTrace: () => undefined, + ...controls, + } as never, {}, ); activeServers.push(uiServer); @@ -58,6 +113,20 @@ describe("LocalUiServer static assets", () => { const html = await response.text(); expect(html).toContain('rel="icon"'); expect(html).toContain("./assets/brand/logo.png"); + expect(html).toContain('data-board="memory_trace"'); + expect(html).toContain('id="memoryTraceBoard"'); + expect(html).toContain('data-level="memory_trace"'); + expect(html).toContain('id="dreamRunBtn"'); + expect(html).toContain('id="autoIndexIntervalHoursInput"'); + expect(html).toContain('id="autoDreamIntervalHoursInput"'); + expect(html).toContain('id="autoDreamMinL1Input"'); + expect(html.indexOf('data-board="profile"')).toBeLessThan( + html.indexOf('data-board="memory_trace"'), + ); + expect(html.indexOf('data-level="profile"')).toBeLessThan( + html.indexOf('data-level="memory_trace"'), + ); + expect(html).not.toContain('id="retrievePanel"'); expect(html).not.toContain(">CX<"); expect(html).not.toContain(">Memory<"); }); @@ -100,4 +169,143 @@ describe("LocalUiServer static assets", () => { expect(warn).toHaveBeenCalledWith(expect.stringContaining("~/.openclaw/openclaw.json")); expect(warn).toHaveBeenCalledWith(expect.stringContaining("OPENCLAW_CONFIG_PATH")); }); + + it("serves recent case traces and removes the old retrieve endpoint", async () => { + const caseRecord = { + caseId: "case-1", + sessionKey: "session-a", + query: "我上周项目进展如何", + startedAt: "2026-04-01T00:00:00.000Z", + finishedAt: "2026-04-01T00:00:02.000Z", + status: "completed", + toolEvents: [], + assistantReply: "上周主要在推进检索链路改造。", + retrieval: { + intent: "project", + enoughAt: "l1", + injected: true, + contextPreview: "## Evidence Note", + evidenceNotePreview: "上周主要在推进检索链路改造。", + pathSummary: "l2->l1", + trace: { + traceId: "trace-1", + query: "我上周项目进展如何", + mode: "auto", + startedAt: "2026-04-01T00:00:00.000Z", + finishedAt: "2026-04-01T00:00:01.000Z", + steps: [], + }, + }, + }; + const baseUrl = await startUiServer({ + listCaseTraces: () => [caseRecord], + getCaseTrace: (caseId: string) => (caseId === "case-1" ? caseRecord : undefined), + }); + + const listResponse = await fetch(`${baseUrl}/api/cases`); + expect(listResponse.status).toBe(200); + await expect(listResponse.json()).resolves.toEqual([caseRecord]); + + const detailResponse = await fetch(`${baseUrl}/api/cases/case-1`); + expect(detailResponse.status).toBe(200); + await expect(detailResponse.json()).resolves.toEqual(caseRecord); + + const removedResponse = await fetch(`${baseUrl}/api/retrieve?q=test`); + expect(removedResponse.status).toBe(404); + }); + + it("routes manual Dream runs through POST /api/dream/run", async () => { + const runDreamNow = vi.fn().mockResolvedValue({ + prepFlush: { + l0Captured: 1, + l1Created: 1, + l2TimeUpdated: 0, + l2ProjectUpdated: 1, + profileUpdated: 1, + failed: 0, + }, + reviewedL1: 12, + rewrittenProjects: 3, + deletedProjects: 1, + profileUpdated: true, + duplicateTopicCount: 2, + conflictTopicCount: 1, + prunedProjectL1Refs: 4, + prunedProfileL1Refs: 2, + summary: "Dream finished", + }); + const baseUrl = await startUiServer({ runDreamNow }); + + const postResponse = await fetch(`${baseUrl}/api/dream/run`, { method: "POST" }); + expect(postResponse.status).toBe(200); + await expect(postResponse.json()).resolves.toMatchObject({ + reviewedL1: 12, + rewrittenProjects: 3, + deletedProjects: 1, + profileUpdated: true, + }); + expect(runDreamNow).toHaveBeenCalledTimes(1); + + const getResponse = await fetch(`${baseUrl}/api/dream/run`); + expect(getResponse.status).toBe(405); + }); + + it("round-trips expanded indexing settings through /api/settings", async () => { + const saveSettings = vi.fn().mockImplementation((partial: Record) => ({ + reasoningMode: partial.reasoningMode ?? "accuracy_first", + recallTopK: partial.recallTopK ?? 12, + autoIndexIntervalMinutes: partial.autoIndexIntervalMinutes ?? 120, + autoDreamIntervalMinutes: partial.autoDreamIntervalMinutes ?? 360, + autoDreamMinNewL1: partial.autoDreamMinNewL1 ?? 10, + })); + const baseUrl = await startUiServer({ + getSettings: () => ({ + reasoningMode: "answer_first", + recallTopK: 10, + autoIndexIntervalMinutes: 60, + autoDreamIntervalMinutes: 360, + autoDreamMinNewL1: 10, + }), + saveSettings, + }); + + const getResponse = await fetch(`${baseUrl}/api/settings`); + expect(getResponse.status).toBe(200); + await expect(getResponse.json()).resolves.toMatchObject({ + reasoningMode: "answer_first", + recallTopK: 10, + autoIndexIntervalMinutes: 60, + autoDreamIntervalMinutes: 360, + autoDreamMinNewL1: 10, + }); + + const postResponse = await fetch(`${baseUrl}/api/settings`, { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ + reasoningMode: "accuracy_first", + recallTopK: 12, + autoIndexIntervalMinutes: 120, + autoDreamIntervalMinutes: 180, + autoDreamMinNewL1: 15, + }), + }); + expect(postResponse.status).toBe(200); + await expect(postResponse.json()).resolves.toMatchObject({ + reasoningMode: "accuracy_first", + recallTopK: 12, + autoIndexIntervalMinutes: 120, + autoDreamIntervalMinutes: 180, + autoDreamMinNewL1: 15, + }); + expect(saveSettings).toHaveBeenCalledWith( + expect.objectContaining({ + reasoningMode: "accuracy_first", + recallTopK: 12, + autoIndexIntervalMinutes: 120, + autoDreamIntervalMinutes: 180, + autoDreamMinNewL1: 15, + }), + ); + }); }); diff --git a/extensions/openbmb-clawxmemory/tsconfig.tsbuildinfo b/extensions/openbmb-clawxmemory/tsconfig.tsbuildinfo index 58da489f3654f..9357e60e30d75 100644 --- a/extensions/openbmb-clawxmemory/tsconfig.tsbuildinfo +++ b/extensions/openbmb-clawxmemory/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/typescript/lib/lib.es2025.float16.d.ts","../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","./src/core/types.ts","./src/config.ts","./src/core/utils/id.ts","./src/core/utils/text.ts","./src/core/skills/types.ts","./src/core/skills/defaults.ts","./src/core/skills/loader.ts","./src/core/skills/llm-extraction.ts","./src/core/skills/intent-skill.ts","./src/core/indexers/l1-extractor.ts","./src/core/indexers/l2-builder.ts","./src/core/storage/sqlite.ts","./src/core/pipeline/heartbeat.ts","./src/core/retrieval/reasoning-loop.ts","./src/core/index.ts","./src/message-utils.ts","./node_modules/@sinclair/typebox/build/esm/type/symbols/symbols.d.mts","./node_modules/@sinclair/typebox/build/esm/type/symbols/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/any/any.d.mts","./node_modules/@sinclair/typebox/build/esm/type/any/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/mapped/mapped-key.d.mts","./node_modules/@sinclair/typebox/build/esm/type/mapped/mapped-result.d.mts","./node_modules/@sinclair/typebox/build/esm/type/async-iterator/async-iterator.d.mts","./node_modules/@sinclair/typebox/build/esm/type/async-iterator/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/readonly/readonly.d.mts","./node_modules/@sinclair/typebox/build/esm/type/readonly/readonly-from-mapped-result.d.mts","./node_modules/@sinclair/typebox/build/esm/type/readonly/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/readonly-optional/readonly-optional.d.mts","./node_modules/@sinclair/typebox/build/esm/type/readonly-optional/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/constructor/constructor.d.mts","./node_modules/@sinclair/typebox/build/esm/type/constructor/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/literal/literal.d.mts","./node_modules/@sinclair/typebox/build/esm/type/literal/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/enum/enum.d.mts","./node_modules/@sinclair/typebox/build/esm/type/enum/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/function/function.d.mts","./node_modules/@sinclair/typebox/build/esm/type/function/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/computed/computed.d.mts","./node_modules/@sinclair/typebox/build/esm/type/computed/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/never/never.d.mts","./node_modules/@sinclair/typebox/build/esm/type/never/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-type.d.mts","./node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-evaluated.d.mts","./node_modules/@sinclair/typebox/build/esm/type/intersect/intersect.d.mts","./node_modules/@sinclair/typebox/build/esm/type/intersect/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/union/union-type.d.mts","./node_modules/@sinclair/typebox/build/esm/type/union/union-evaluated.d.mts","./node_modules/@sinclair/typebox/build/esm/type/union/union.d.mts","./node_modules/@sinclair/typebox/build/esm/type/union/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/recursive/recursive.d.mts","./node_modules/@sinclair/typebox/build/esm/type/recursive/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/unsafe/unsafe.d.mts","./node_modules/@sinclair/typebox/build/esm/type/unsafe/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/ref/ref.d.mts","./node_modules/@sinclair/typebox/build/esm/type/ref/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/tuple/tuple.d.mts","./node_modules/@sinclair/typebox/build/esm/type/tuple/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/error/error.d.mts","./node_modules/@sinclair/typebox/build/esm/type/error/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/string/string.d.mts","./node_modules/@sinclair/typebox/build/esm/type/string/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/boolean/boolean.d.mts","./node_modules/@sinclair/typebox/build/esm/type/boolean/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/number/number.d.mts","./node_modules/@sinclair/typebox/build/esm/type/number/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/integer/integer.d.mts","./node_modules/@sinclair/typebox/build/esm/type/integer/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/bigint/bigint.d.mts","./node_modules/@sinclair/typebox/build/esm/type/bigint/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/template-literal/parse.d.mts","./node_modules/@sinclair/typebox/build/esm/type/template-literal/finite.d.mts","./node_modules/@sinclair/typebox/build/esm/type/template-literal/generate.d.mts","./node_modules/@sinclair/typebox/build/esm/type/template-literal/syntax.d.mts","./node_modules/@sinclair/typebox/build/esm/type/template-literal/pattern.d.mts","./node_modules/@sinclair/typebox/build/esm/type/template-literal/template-literal.d.mts","./node_modules/@sinclair/typebox/build/esm/type/template-literal/union.d.mts","./node_modules/@sinclair/typebox/build/esm/type/template-literal/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-property-keys.d.mts","./node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-from-mapped-result.d.mts","./node_modules/@sinclair/typebox/build/esm/type/indexed/indexed.d.mts","./node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-from-mapped-key.d.mts","./node_modules/@sinclair/typebox/build/esm/type/indexed/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/iterator/iterator.d.mts","./node_modules/@sinclair/typebox/build/esm/type/iterator/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/promise/promise.d.mts","./node_modules/@sinclair/typebox/build/esm/type/promise/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/sets/set.d.mts","./node_modules/@sinclair/typebox/build/esm/type/sets/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/mapped/mapped.d.mts","./node_modules/@sinclair/typebox/build/esm/type/mapped/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/optional/optional.d.mts","./node_modules/@sinclair/typebox/build/esm/type/optional/optional-from-mapped-result.d.mts","./node_modules/@sinclair/typebox/build/esm/type/optional/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/awaited/awaited.d.mts","./node_modules/@sinclair/typebox/build/esm/type/awaited/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-property-keys.d.mts","./node_modules/@sinclair/typebox/build/esm/type/keyof/keyof.d.mts","./node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-from-mapped-result.d.mts","./node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-property-entries.d.mts","./node_modules/@sinclair/typebox/build/esm/type/keyof/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/omit/omit-from-mapped-result.d.mts","./node_modules/@sinclair/typebox/build/esm/type/omit/omit.d.mts","./node_modules/@sinclair/typebox/build/esm/type/omit/omit-from-mapped-key.d.mts","./node_modules/@sinclair/typebox/build/esm/type/omit/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/pick/pick-from-mapped-result.d.mts","./node_modules/@sinclair/typebox/build/esm/type/pick/pick.d.mts","./node_modules/@sinclair/typebox/build/esm/type/pick/pick-from-mapped-key.d.mts","./node_modules/@sinclair/typebox/build/esm/type/pick/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/null/null.d.mts","./node_modules/@sinclair/typebox/build/esm/type/null/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/symbol/symbol.d.mts","./node_modules/@sinclair/typebox/build/esm/type/symbol/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/undefined/undefined.d.mts","./node_modules/@sinclair/typebox/build/esm/type/undefined/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/partial/partial.d.mts","./node_modules/@sinclair/typebox/build/esm/type/partial/partial-from-mapped-result.d.mts","./node_modules/@sinclair/typebox/build/esm/type/partial/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/regexp/regexp.d.mts","./node_modules/@sinclair/typebox/build/esm/type/regexp/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/record/record.d.mts","./node_modules/@sinclair/typebox/build/esm/type/record/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/required/required.d.mts","./node_modules/@sinclair/typebox/build/esm/type/required/required-from-mapped-result.d.mts","./node_modules/@sinclair/typebox/build/esm/type/required/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/transform/transform.d.mts","./node_modules/@sinclair/typebox/build/esm/type/transform/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/module/compute.d.mts","./node_modules/@sinclair/typebox/build/esm/type/module/infer.d.mts","./node_modules/@sinclair/typebox/build/esm/type/module/module.d.mts","./node_modules/@sinclair/typebox/build/esm/type/module/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/not/not.d.mts","./node_modules/@sinclair/typebox/build/esm/type/not/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/static/static.d.mts","./node_modules/@sinclair/typebox/build/esm/type/static/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/object/object.d.mts","./node_modules/@sinclair/typebox/build/esm/type/object/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/helpers/helpers.d.mts","./node_modules/@sinclair/typebox/build/esm/type/helpers/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/array/array.d.mts","./node_modules/@sinclair/typebox/build/esm/type/array/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/date/date.d.mts","./node_modules/@sinclair/typebox/build/esm/type/date/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/uint8array/uint8array.d.mts","./node_modules/@sinclair/typebox/build/esm/type/uint8array/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/unknown/unknown.d.mts","./node_modules/@sinclair/typebox/build/esm/type/unknown/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/void/void.d.mts","./node_modules/@sinclair/typebox/build/esm/type/void/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/schema/schema.d.mts","./node_modules/@sinclair/typebox/build/esm/type/schema/anyschema.d.mts","./node_modules/@sinclair/typebox/build/esm/type/schema/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/clone/type.d.mts","./node_modules/@sinclair/typebox/build/esm/type/clone/value.d.mts","./node_modules/@sinclair/typebox/build/esm/type/clone/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/create/type.d.mts","./node_modules/@sinclair/typebox/build/esm/type/create/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/argument/argument.d.mts","./node_modules/@sinclair/typebox/build/esm/type/argument/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/guard/kind.d.mts","./node_modules/@sinclair/typebox/build/esm/type/guard/type.d.mts","./node_modules/@sinclair/typebox/build/esm/type/guard/value.d.mts","./node_modules/@sinclair/typebox/build/esm/type/guard/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/patterns/patterns.d.mts","./node_modules/@sinclair/typebox/build/esm/type/patterns/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/registry/format.d.mts","./node_modules/@sinclair/typebox/build/esm/type/registry/type.d.mts","./node_modules/@sinclair/typebox/build/esm/type/registry/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/composite/composite.d.mts","./node_modules/@sinclair/typebox/build/esm/type/composite/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/const/const.d.mts","./node_modules/@sinclair/typebox/build/esm/type/const/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/constructor-parameters/constructor-parameters.d.mts","./node_modules/@sinclair/typebox/build/esm/type/constructor-parameters/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/exclude/exclude-from-template-literal.d.mts","./node_modules/@sinclair/typebox/build/esm/type/exclude/exclude.d.mts","./node_modules/@sinclair/typebox/build/esm/type/exclude/exclude-from-mapped-result.d.mts","./node_modules/@sinclair/typebox/build/esm/type/exclude/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/extends/extends-check.d.mts","./node_modules/@sinclair/typebox/build/esm/type/extends/extends-from-mapped-result.d.mts","./node_modules/@sinclair/typebox/build/esm/type/extends/extends.d.mts","./node_modules/@sinclair/typebox/build/esm/type/extends/extends-from-mapped-key.d.mts","./node_modules/@sinclair/typebox/build/esm/type/extends/extends-undefined.d.mts","./node_modules/@sinclair/typebox/build/esm/type/extends/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/extract/extract-from-template-literal.d.mts","./node_modules/@sinclair/typebox/build/esm/type/extract/extract.d.mts","./node_modules/@sinclair/typebox/build/esm/type/extract/extract-from-mapped-result.d.mts","./node_modules/@sinclair/typebox/build/esm/type/extract/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/instance-type/instance-type.d.mts","./node_modules/@sinclair/typebox/build/esm/type/instance-type/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/instantiate/instantiate.d.mts","./node_modules/@sinclair/typebox/build/esm/type/instantiate/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/intrinsic/intrinsic-from-mapped-key.d.mts","./node_modules/@sinclair/typebox/build/esm/type/intrinsic/intrinsic.d.mts","./node_modules/@sinclair/typebox/build/esm/type/intrinsic/capitalize.d.mts","./node_modules/@sinclair/typebox/build/esm/type/intrinsic/lowercase.d.mts","./node_modules/@sinclair/typebox/build/esm/type/intrinsic/uncapitalize.d.mts","./node_modules/@sinclair/typebox/build/esm/type/intrinsic/uppercase.d.mts","./node_modules/@sinclair/typebox/build/esm/type/intrinsic/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/parameters/parameters.d.mts","./node_modules/@sinclair/typebox/build/esm/type/parameters/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/rest/rest.d.mts","./node_modules/@sinclair/typebox/build/esm/type/rest/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/return-type/return-type.d.mts","./node_modules/@sinclair/typebox/build/esm/type/return-type/index.d.mts","./node_modules/@sinclair/typebox/build/esm/type/type/json.d.mts","./node_modules/@sinclair/typebox/build/esm/type/type/javascript.d.mts","./node_modules/@sinclair/typebox/build/esm/type/type/index.d.mts","./node_modules/@sinclair/typebox/build/esm/index.d.mts","./src/tools.ts","./src/ui-server.ts","./src/runtime.ts","./src/hooks.ts","./src/prompt-section.ts","./src/index.ts","./src/core/skills/extraction-skill.ts","../../node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../node_modules/@types/node/web-globals/blob.d.ts","../../node_modules/@types/node/web-globals/console.d.ts","../../node_modules/@types/node/web-globals/crypto.d.ts","../../node_modules/@types/node/web-globals/domexception.d.ts","../../node_modules/@types/node/web-globals/encoding.d.ts","../../node_modules/@types/node/web-globals/events.d.ts","../../node_modules/@types/node/node_modules/undici-types/utility.d.ts","../../node_modules/@types/node/node_modules/undici-types/header.d.ts","../../node_modules/@types/node/node_modules/undici-types/readable.d.ts","../../node_modules/@types/node/node_modules/undici-types/fetch.d.ts","../../node_modules/@types/node/node_modules/undici-types/formdata.d.ts","../../node_modules/@types/node/node_modules/undici-types/connector.d.ts","../../node_modules/@types/node/node_modules/undici-types/client-stats.d.ts","../../node_modules/@types/node/node_modules/undici-types/client.d.ts","../../node_modules/@types/node/node_modules/undici-types/errors.d.ts","../../node_modules/@types/node/node_modules/undici-types/dispatcher.d.ts","../../node_modules/@types/node/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/@types/node/node_modules/undici-types/global-origin.d.ts","../../node_modules/@types/node/node_modules/undici-types/pool-stats.d.ts","../../node_modules/@types/node/node_modules/undici-types/pool.d.ts","../../node_modules/@types/node/node_modules/undici-types/handlers.d.ts","../../node_modules/@types/node/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/@types/node/node_modules/undici-types/round-robin-pool.d.ts","../../node_modules/@types/node/node_modules/undici-types/h2c-client.d.ts","../../node_modules/@types/node/node_modules/undici-types/agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-call-history.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-client.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-pool.d.ts","../../node_modules/@types/node/node_modules/undici-types/snapshot-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-errors.d.ts","../../node_modules/@types/node/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/retry-handler.d.ts","../../node_modules/@types/node/node_modules/undici-types/retry-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/api.d.ts","../../node_modules/@types/node/node_modules/undici-types/cache-interceptor.d.ts","../../node_modules/@types/node/node_modules/undici-types/interceptors.d.ts","../../node_modules/@types/node/node_modules/undici-types/util.d.ts","../../node_modules/@types/node/node_modules/undici-types/cookies.d.ts","../../node_modules/@types/node/node_modules/undici-types/patch.d.ts","../../node_modules/@types/node/node_modules/undici-types/websocket.d.ts","../../node_modules/@types/node/node_modules/undici-types/eventsource.d.ts","../../node_modules/@types/node/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/@types/node/node_modules/undici-types/content-type.d.ts","../../node_modules/@types/node/node_modules/undici-types/cache.d.ts","../../node_modules/@types/node/node_modules/undici-types/index.d.ts","../../node_modules/@types/node/web-globals/fetch.d.ts","../../node_modules/@types/node/web-globals/importmeta.d.ts","../../node_modules/@types/node/web-globals/messaging.d.ts","../../node_modules/@types/node/web-globals/navigator.d.ts","../../node_modules/@types/node/web-globals/performance.d.ts","../../node_modules/@types/node/web-globals/storage.d.ts","../../node_modules/@types/node/web-globals/streams.d.ts","../../node_modules/@types/node/web-globals/timers.d.ts","../../node_modules/@types/node/web-globals/url.d.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.d.ts","../../node_modules/@types/node/inspector.generated.d.ts","../../node_modules/@types/node/inspector/promises.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/path/posix.d.ts","../../node_modules/@types/node/path/win32.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/events/index.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/quic.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/readline/promises.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/sea.d.ts","../../node_modules/@types/node/sqlite.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/test.d.ts","../../node_modules/@types/node/test/reporters.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/util/types.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/index.d.ts"],"fileIdsList":[[77,79,83,86,88,90,92,94,96,100,104,108,110,112,114,116,118,120,122,124,126,128,136,141,143,145,147,149,152,154,159,163,167,169,171,173,176,178,180,183,185,189,191,193,195,197,199,201,203,205,207,210,213,215,217,221,223,226,228,230,232,236,242,246,248,250,257,259,261,263,266,277,340,348,352,355,357,358,359,372],[77,210,277,340,348,352,355,357,358,359,372],[78,277,340,348,352,355,357,358,359,372],[216,277,340,348,352,355,357,358,359,372],[77,193,197,210,277,340,348,352,355,357,358,359,372],[198,277,340,348,352,355,357,358,359,372],[77,193,210,277,340,348,352,355,357,358,359,372],[82,277,340,348,352,355,357,358,359,372],[98,104,108,114,145,197,210,277,340,348,352,355,357,358,359,372],[153,277,340,348,352,355,357,358,359,372],[127,277,340,348,352,355,357,358,359,372],[121,277,340,348,352,355,357,358,359,372],[211,212,277,340,348,352,355,357,358,359,372],[210,277,340,348,352,355,357,358,359,372],[277,340,348,352,355,357,358,359,372],[100,104,141,147,159,195,197,210,277,340,348,352,355,357,358,359,372],[227,277,340,348,352,355,357,358,359,372],[76,210,277,340,348,352,355,357,358,359,372],[97,277,340,348,352,355,357,358,359,372],[79,86,92,96,100,116,128,169,171,173,195,197,201,203,205,210,277,340,348,352,355,357,358,359,372],[229,277,340,348,352,355,357,358,359,372],[90,100,116,210,277,340,348,352,355,357,358,359,372],[231,277,340,348,352,355,357,358,359,372],[77,86,88,152,193,197,210,277,340,348,352,355,357,358,359,372],[89,277,340,348,352,355,357,358,359,372],[214,277,340,348,352,355,357,358,359,372],[208,277,340,348,352,355,357,358,359,372],[200,277,340,348,352,355,357,358,359,372],[77,92,210,277,340,348,352,355,357,358,359,372],[93,277,340,348,352,355,357,358,359,372],[117,277,340,348,352,355,357,358,359,372],[149,195,210,234,277,340,348,352,355,357,358,359,372],[136,210,234,277,340,348,352,355,357,358,359,372],[100,108,136,149,193,197,210,233,235,277,340,348,352,355,357,358,359,372],[233,234,235,277,340,348,352,355,357,358,359,372],[118,210,277,340,348,352,355,357,358,359,372],[92,149,195,197,210,239,277,340,348,352,355,357,358,359,372],[149,195,210,239,277,340,348,352,355,357,358,359,372],[108,149,193,197,210,238,240,277,340,348,352,355,357,358,359,372],[237,238,239,240,241,277,340,348,352,355,357,358,359,372],[149,195,210,244,277,340,348,352,355,357,358,359,372],[136,210,244,277,340,348,352,355,357,358,359,372],[100,108,136,149,193,197,210,243,245,277,340,348,352,355,357,358,359,372],[243,244,245,277,340,348,352,355,357,358,359,372],[95,277,340,348,352,355,357,358,359,372],[218,219,220,277,340,348,352,355,357,358,359,372],[77,79,83,86,90,92,96,98,100,104,108,110,112,114,116,120,122,124,126,128,136,143,145,149,152,169,171,173,178,180,185,189,191,195,199,201,203,205,207,210,217,277,340,348,352,355,357,358,359,372],[77,79,83,86,90,92,96,98,100,104,108,110,112,114,116,118,120,122,124,126,128,136,143,145,149,152,169,171,173,178,180,185,189,191,195,199,201,203,205,207,210,217,277,340,348,352,355,357,358,359,372],[100,195,210,277,340,348,352,355,357,358,359,372],[196,277,340,348,352,355,357,358,359,372],[137,138,139,140,277,340,348,352,355,357,358,359,372],[139,149,195,197,210,277,340,348,352,355,357,358,359,372],[137,141,149,195,210,277,340,348,352,355,357,358,359,372],[92,108,124,126,136,210,277,340,348,352,355,357,358,359,372],[98,100,104,108,110,114,116,137,138,140,149,195,197,199,210,277,340,348,352,355,357,358,359,372],[247,277,340,348,352,355,357,358,359,372],[90,100,210,277,340,348,352,355,357,358,359,372],[249,277,340,348,352,355,357,358,359,372],[83,86,88,90,96,104,108,116,143,145,152,180,195,199,205,210,217,277,340,348,352,355,357,358,359,372],[125,277,340,348,352,355,357,358,359,372],[101,102,103,277,340,348,352,355,357,358,359,372],[86,100,101,152,210,277,340,348,352,355,357,358,359,372],[100,101,210,277,340,348,352,355,357,358,359,372],[210,252,277,340,348,352,355,357,358,359,372],[251,252,253,254,255,256,277,340,348,352,355,357,358,359,372],[92,149,195,197,210,252,277,340,348,352,355,357,358,359,372],[92,108,136,149,210,251,277,340,348,352,355,357,358,359,372],[142,277,340,348,352,355,357,358,359,372],[155,156,157,158,277,340,348,352,355,357,358,359,372],[149,156,195,197,210,277,340,348,352,355,357,358,359,372],[104,108,110,116,147,195,197,199,210,277,340,348,352,355,357,358,359,372],[92,98,108,114,124,149,155,157,197,210,277,340,348,352,355,357,358,359,372],[91,277,340,348,352,355,357,358,359,372],[80,81,148,277,340,348,352,355,357,358,359,372],[77,195,210,277,340,348,352,355,357,358,359,372],[80,81,83,86,90,92,94,96,104,108,116,141,143,145,147,152,195,197,199,210,277,340,348,352,355,357,358,359,372],[83,86,90,94,96,98,100,104,108,114,116,141,143,152,154,159,163,167,176,180,183,185,195,197,199,210,277,340,348,352,355,357,358,359,372],[188,277,340,348,352,355,357,358,359,372],[83,86,90,94,96,104,108,110,114,116,143,152,180,193,195,197,199,210,277,340,348,352,355,357,358,359,372],[77,186,187,193,195,210,277,340,348,352,355,357,358,359,372],[99,277,340,348,352,355,357,358,359,372],[190,277,340,348,352,355,357,358,359,372],[168,277,340,348,352,355,357,358,359,372],[123,277,340,348,352,355,357,358,359,372],[194,277,340,348,352,355,357,358,359,372],[77,86,152,193,197,210,277,340,348,352,355,357,358,359,372],[160,161,162,277,340,348,352,355,357,358,359,372],[149,161,195,210,277,340,348,352,355,357,358,359,372],[149,161,195,197,210,277,340,348,352,355,357,358,359,372],[92,98,104,108,110,114,141,149,160,162,195,197,210,277,340,348,352,355,357,358,359,372],[150,151,277,340,348,352,355,357,358,359,372],[149,150,195,277,340,348,352,355,357,358,359,372],[77,149,151,197,210,277,340,348,352,355,357,358,359,372],[258,277,340,348,352,355,357,358,359,372],[96,100,116,210,277,340,348,352,355,357,358,359,372],[174,175,277,340,348,352,355,357,358,359,372],[149,174,195,197,210,277,340,348,352,355,357,358,359,372],[86,88,92,98,104,108,110,114,120,122,124,126,128,149,152,169,171,173,175,195,197,210,277,340,348,352,355,357,358,359,372],[222,277,340,348,352,355,357,358,359,372],[164,165,166,277,340,348,352,355,357,358,359,372],[149,165,195,210,277,340,348,352,355,357,358,359,372],[149,165,195,197,210,277,340,348,352,355,357,358,359,372],[92,98,104,108,110,114,141,149,164,166,195,197,210,277,340,348,352,355,357,358,359,372],[144,277,340,348,352,355,357,358,359,372],[87,277,340,348,352,355,357,358,359,372],[86,152,210,277,340,348,352,355,357,358,359,372],[84,85,277,340,348,352,355,357,358,359,372],[84,149,195,277,340,348,352,355,357,358,359,372],[77,85,149,197,210,277,340,348,352,355,357,358,359,372],[179,277,340,348,352,355,357,358,359,372],[77,79,92,94,100,108,120,122,124,126,136,178,193,195,197,210,277,340,348,352,355,357,358,359,372],[109,277,340,348,352,355,357,358,359,372],[113,277,340,348,352,355,357,358,359,372],[77,112,193,210,277,340,348,352,355,357,358,359,372],[177,277,340,348,352,355,357,358,359,372],[224,225,277,340,348,352,355,357,358,359,372],[181,182,277,340,348,352,355,357,358,359,372],[149,181,195,197,210,277,340,348,352,355,357,358,359,372],[86,88,92,98,104,108,110,114,120,122,124,126,128,149,152,169,171,173,182,195,197,210,277,340,348,352,355,357,358,359,372],[260,277,340,348,352,355,357,358,359,372],[104,108,116,210,277,340,348,352,355,357,358,359,372],[262,277,340,348,352,355,357,358,359,372],[96,100,210,277,340,348,352,355,357,358,359,372],[79,83,90,92,94,96,104,108,110,114,116,120,122,124,126,128,136,143,145,169,171,173,178,180,191,195,199,201,203,205,207,208,277,340,348,352,355,357,358,359,372],[208,209,277,340,348,352,355,357,358,359,372],[77,277,340,348,352,355,357,358,359,372],[146,277,340,348,352,355,357,358,359,372],[192,277,340,348,352,355,357,358,359,372],[83,86,90,94,96,100,104,108,110,112,114,116,143,145,152,180,185,189,191,195,197,199,210,277,340,348,352,355,357,358,359,372],[119,277,340,348,352,355,357,358,359,372],[170,277,340,348,352,355,357,358,359,372],[76,277,340,348,352,355,357,358,359,372],[92,108,118,120,122,124,126,128,129,136,277,340,348,352,355,357,358,359,372],[92,108,118,122,129,130,136,197,277,340,348,352,355,357,358,359,372],[129,130,131,132,133,134,135,277,340,348,352,355,357,358,359,372],[118,277,340,348,352,355,357,358,359,372],[118,136,277,340,348,352,355,357,358,359,372],[92,108,120,122,124,128,136,197,277,340,348,352,355,357,358,359,372],[77,92,100,108,120,122,124,126,128,132,193,197,210,277,340,348,352,355,357,358,359,372],[92,108,134,193,197,277,340,348,352,355,357,358,359,372],[184,277,340,348,352,355,357,358,359,372],[115,277,340,348,352,355,357,358,359,372],[264,265,277,340,348,352,355,357,358,359,372],[83,90,96,128,143,145,154,171,173,178,201,203,207,210,217,232,248,250,259,263,264,277,340,348,352,355,357,358,359,372],[79,86,88,92,94,100,104,108,110,112,114,116,120,122,124,126,136,141,149,152,159,163,167,169,176,180,183,185,189,191,195,199,205,210,228,230,236,242,246,257,261,277,340,348,352,355,357,358,359,372],[202,277,340,348,352,355,357,358,359,372],[172,277,340,348,352,355,357,358,359,372],[105,106,107,277,340,348,352,355,357,358,359,372],[86,100,105,152,210,277,340,348,352,355,357,358,359,372],[100,105,210,277,340,348,352,355,357,358,359,372],[204,277,340,348,352,355,357,358,359,372],[111,277,340,348,352,355,357,358,359,372],[206,277,340,348,352,355,357,358,359,372],[60,277,340,348,352,355,357,358,359,362,363,372],[60,62,63,64,65,66,67,68,69,70,71,72,73,277,340,348,352,355,357,358,359,372],[60,62,67,277,340,348,352,355,357,358,359,372],[60,62,277,340,348,352,355,357,358,359,372],[60,62,67,69,70,71,277,340,348,352,355,357,358,359,372],[60,63,64,67,71,277,340,348,352,355,357,358,359,372],[64,277,340,348,352,355,357,358,359,372],[60,63,64,277,340,348,352,355,357,358,359,372],[60,64,277,340,348,352,355,357,358,359,372],[60,277,340,348,352,355,357,358,359,372],[64,65,277,340,348,352,355,357,358,359,363,372,389],[60,62,63,277,340,348,352,355,357,358,359,363,372,376],[277,340,345,348,352,355,357,358,359,372],[270,277,340,348,352,355,357,358,359,372],[61,270,271,272,277,340,348,352,355,357,358,359,372],[61,74,75,268,269,277,340,348,352,355,357,358,359,362,363,372],[74,267,277,340,348,352,355,357,358,359,372],[74,277,340,348,352,354,355,357,358,359,363,372,389],[277,337,338,340,348,352,355,357,358,359,372],[277,339,340,348,352,355,357,358,359,372],[340,348,352,355,357,358,359,372],[277,340,348,352,355,357,358,359,372,380],[277,340,341,346,348,351,352,355,357,358,359,361,372,377,389],[277,340,341,342,348,351,352,355,357,358,359,372],[277,340,343,348,352,355,357,358,359,372,390],[277,340,344,345,348,352,355,357,358,359,362,372],[277,340,345,348,352,355,357,358,359,372,377,386],[277,340,346,348,351,352,355,357,358,359,361,372],[277,339,340,347,348,352,355,357,358,359,372],[277,340,348,349,352,355,357,358,359,372],[277,340,348,350,351,352,355,357,358,359,372],[277,339,340,348,351,352,355,357,358,359,372],[277,340,348,351,352,353,355,357,358,359,372,377,389],[277,340,348,351,352,353,355,357,358,359,372,377,380],[277,327,340,348,351,352,354,355,357,358,359,361,372,377,389],[277,340,348,351,352,354,355,357,358,359,361,372,377,386,389],[277,340,348,352,354,355,356,357,358,359,372,377,386,389],[275,276,277,278,279,280,281,282,283,284,285,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396],[277,340,348,351,352,355,357,358,359,372],[277,340,348,352,355,357,359,372],[277,340,348,352,355,357,358,359,360,372,389],[277,340,348,351,352,355,357,358,359,361,372,377],[277,292,295,298,299,340,348,352,355,357,358,359,372,389],[277,295,340,348,352,355,357,358,359,372,377,389],[277,295,299,340,348,352,355,357,358,359,372,389],[277,340,348,352,355,357,358,359,372,377],[277,289,340,348,352,355,357,358,359,372],[277,293,340,348,352,355,357,358,359,372],[277,291,292,295,340,348,352,355,357,358,359,372,389],[277,340,348,352,355,357,358,359,361,372,386],[277,340,348,352,355,357,358,359,372,397],[277,289,340,348,352,355,357,358,359,372,397],[277,291,295,340,348,352,355,357,358,359,361,372,389],[277,286,287,288,290,294,340,348,351,352,355,357,358,359,372,377,389],[277,295,304,312,340,348,352,355,357,358,359,372],[277,287,293,340,348,352,355,357,358,359,372],[277,295,321,322,340,348,352,355,357,358,359,372],[277,287,290,295,340,348,352,355,357,358,359,372,380,389,397],[277,295,340,348,352,355,357,358,359,372],[277,291,295,340,348,352,355,357,358,359,372,389],[277,286,340,348,352,355,357,358,359,372],[277,289,290,291,293,294,295,296,297,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,322,323,324,325,326,340,348,352,355,357,358,359,372],[277,295,314,317,340,348,352,355,357,358,359,372],[277,295,304,305,306,340,348,352,355,357,358,359,372],[277,293,295,305,307,340,348,352,355,357,358,359,372],[277,294,340,348,352,355,357,358,359,372],[277,287,289,295,340,348,352,355,357,358,359,372],[277,295,299,305,307,340,348,352,355,357,358,359,372],[277,299,340,348,352,355,357,358,359,372],[277,293,295,298,340,348,352,355,357,358,359,372,389],[277,287,291,295,304,340,348,352,355,357,358,359,372],[277,295,314,340,348,352,355,357,358,359,372],[277,307,340,348,352,355,357,358,359,372],[277,289,295,321,340,348,352,355,357,358,359,372,380,395,397],[277,340,348,352,355,357,358,359,362,372],[277,340,348,352,355,357,358,359,363,372],[277,340,348,351,352,355,357,358,359,366,372],[277,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396],[277,340,348,352,355,357,358,359,369,372],[277,340,348,352,355,357,358,359,370,372],[277,340,345,348,352,355,357,358,359,361,372,380],[277,340,348,351,352,355,357,358,359,372,373],[277,340,348,352,355,357,358,359,372,374,390,393],[277,340,348,351,352,355,357,358,359,372,377,379,380],[277,340,348,352,355,357,358,359,372,378,380],[277,340,348,352,355,357,358,359,372,380,390],[277,340,348,352,355,357,358,359,372,381],[277,337,340,348,352,355,357,358,359,372,377,383,389],[277,340,348,352,355,357,358,359,372,377,382],[277,340,348,351,352,355,357,358,359,372,384,385],[277,340,348,352,355,357,358,359,372,384,385],[277,340,345,348,352,355,357,358,359,361,372,377,386],[277,340,348,352,355,357,358,359,372,387],[277,340,348,352,355,357,358,359,361,372,388],[277,340,348,352,354,355,357,358,359,370,372,389],[277,340,348,352,355,357,358,359,372,390,391],[277,340,345,348,352,355,357,358,359,372,391],[277,340,348,352,355,357,358,359,372,377,392],[277,340,348,352,355,357,358,359,360,372,393],[277,340,348,352,355,357,358,359,372,394],[277,340,343,348,352,355,357,358,359,372],[277,340,348,352,355,357,358,359,372,390],[277,327,340,348,352,355,357,358,359,372],[277,340,348,352,355,357,358,359,372,389],[277,340,348,352,355,357,358,359,372,395],[277,340,348,352,355,357,358,359,366,372],[277,340,348,352,355,357,358,359,372,385],[277,327,340,348,351,352,353,355,357,358,359,366,372,377,380,389,392,393,395],[277,340,348,352,355,357,358,359,372,377,396]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e07b30a18a3791a6830f0326262ee16b97c842c154c1ac19b86427e5f428ef8","signature":"03cd10800cf1699b26ff89c8bcae15c64e2607d5ce297d3fa97ec1f3614212c5","impliedFormat":99},{"version":"cd06b8bd03f0b72e99f952d074b56bcc0264ef4bf9abc7a4543b175527994bea","signature":"63efdee3392cd26980d020f8e7fae259c9db2117140018a5589c7806d5c9ac28","impliedFormat":99},{"version":"5d8f83f1a5d56b696829ffe8a26dff2505b6bb6317acd4e4ca9772219e0bd1f9","signature":"c737a5d1d1478a8522d277cbd5482d8512c70d62232cfd1b80d4cbaaf99052ea","impliedFormat":99},{"version":"80b253260ccb1c7049796dc40cf74dbd5ef05c52f8a339c323b156602ee54ff0","signature":"b6c6be16ee17db1116e4d452541d3db861a6c4959b83d979e0d81d97028dc6e1","impliedFormat":99},{"version":"21e5f5ed4bde9792abe0fa6a46e5f1493af2bede44d6b470310efdf885a1576a","signature":"4183bc1159d9968f7af618cb93f7d2d6c393820495dcf3aa4a103e8e2504df79","impliedFormat":99},{"version":"12e41294d2acd66b47eb3542626dd8280e6a98b130f026518a2d0d954b6d460a","signature":"64bb49a9c34d2cfa749275e22ad41c06d1f866956904deb4bd4a72a1c90df928","impliedFormat":99},{"version":"aeb105613abca96fcd782d26190c49e3adbe7cc0c8508e64e3f5824d440bf32b","signature":"b9e78f3b7b86e10e328332a96df7b69eb0ba9b7ba3ff7d9dafccfb1aafe51ae6","impliedFormat":99},{"version":"c49aeea01acfd9baf3f6052a820b7ead39309671576c50fb2e40cd8f7f488628","signature":"40cbc20e1d2c83b3e7fb12f9fb83728c362baccf612acae4ce9940dc828ec76b","impliedFormat":99},{"version":"40b41bc08f1a2ba2471ae692cc938c7e150909a23debd819b81cb208ab1c6c2d","signature":"f458a2ab2d8d93ae83bd00e169583d3152ec4623fb41fe5157617a2b876c6e16","impliedFormat":99},{"version":"fefbb5072f380efe94baef8bf1d583be8d97b13406a0a223b2d13029c53d5d52","signature":"9022bad05027736cf2fff8ba21304c284a81f2555c35a153fac1285710e55258","impliedFormat":99},{"version":"4358cb634560d11afa53a7ab9c57ecc331f83e676d5219c6ffc372ef95711c86","signature":"7a830e01db5c978c71fd264713f5682b6ab7bafeac13584d193cac63c2c10d3d","impliedFormat":99},{"version":"c5484e0b6be6b98bd80b1f3914146ffd2ae12c6132c77b3107bb9e07f3106e16","signature":"fb0bf8cc22593c64a9d40a247105a59f78c0d62d7348f5503cfbfb8eb4c6cc3f","impliedFormat":99},{"version":"74960c136c0b94ffcd0d4e4ac090e291723d2fac9cb2bf4800364082adae7b40","signature":"f1c302c93962961358a96d506394ce254673a9000da9b1f7b208e0ccbff04060","impliedFormat":99},{"version":"42955fef61a7b764f1f76aa8669419de056d84c36118d3d384a476b052c25cd5","signature":"6884cfb88208509b73568e1e41820211f389dcb996057bd4a1ab6d85326ee6c4","impliedFormat":99},{"version":"56b1f12eba666714aab33161b7b36366346911015c50d6e236f6bca0d2ddf360","impliedFormat":99},{"version":"5a120d6a343f0927d13fe5ad72fbddacc97ea766513ebf9994ef82a5cb16f633","signature":"dccf44d3fd1b7b11478b42d87683af7bcc5453187c61c297157917df47b3649a","impliedFormat":99},{"version":"b104e2da53231a529373174880dc0abfbc80184bb473b6bf2a9a0746bebb663d","impliedFormat":99},{"version":"3d4bb4d84af5f0b348f01c85537da1c7afabc174e48806c8b20901377c57b8e4","impliedFormat":99},{"version":"a2500b15294325d9784a342145d16ef13d9efb1c3c6cb4d89934b2c0d521b4ab","impliedFormat":99},{"version":"79d5c409e84764fabdd276976a31928576dcf9aea37be3b5a81f74943f01f3ff","impliedFormat":99},{"version":"8ea020ea63ecc981b9318fc532323e31270c911a7ade4ba74ab902fcf8281c45","impliedFormat":99},{"version":"c81e1a9b03e4de1225b33ac84aaf50a876837057828e0806d025daf919bf2d51","impliedFormat":99},{"version":"bb7264d8bd6152524f2ef5dae5c260ae60d459bf406202258bd0ce57c79e5a6d","impliedFormat":99},{"version":"fb66165c4976bc21a4fde14101e36c43d46f907489b7b6a5f2a2679108335d4a","impliedFormat":99},{"version":"628c2e0a0b61be3e44f296083e6af9b5a9b6881037dd43e7685ee473930a4404","impliedFormat":99},{"version":"4776f1e810184f538d55c5da92da77f491999054a1a1ee69a2d995ab2e8d1bc0","impliedFormat":99},{"version":"11544c4e626eab113df9432e97a371693c98c17ae4291d2ad425af5ef00e580b","impliedFormat":99},{"version":"e1847b81166d25f29213d37115253c5b82ec9ee78f19037592aa173e017636d5","impliedFormat":99},{"version":"fe0bd60f36509711c4a69c0e00c0111f5ecdc685e6c1a2ae99bd4d56c76c07fc","impliedFormat":99},{"version":"b8f3f4ee9aae88a9cec9797d166209eb2a7e4beb8a15e0fc3c8b90c9682c337d","impliedFormat":99},{"version":"ea3c4f5121fe2e86101c155ebe60b435c729027ae50025b2a4e1d12a476002ae","impliedFormat":99},{"version":"372db10bea0dbe1f8588f82b339152b11847e6a4535d57310292660c8a9acfc5","impliedFormat":99},{"version":"6f9fba6349c16eed21d139d5562295e8d5aafa5abe6e8ebcde43615a80c69ac1","impliedFormat":99},{"version":"1474533e27d0e3e45a417ea153d4612f0adbff055f244a29606a1fae6db56cda","impliedFormat":99},{"version":"c7fd8a79d0495955d55bfea34bbdb85235b0f27b417a81afc395655ef43d091d","impliedFormat":99},{"version":"987405949bfafbb1c93d976c3352fe33bfb85303a79fc5d9588b681e4af6c3b3","impliedFormat":99},{"version":"867bc1f5a168fd86d12d828dfafd77c557f13b4326588615b19e301f6856f70c","impliedFormat":99},{"version":"6beddab08d635b4c16409a748dcd8de38a8e444a501b8e79d89f458ae88579d1","impliedFormat":99},{"version":"1dea5c7bf28569228ffcc83e69e1c759e7f0133c232708e09cfa4d7ed3ec7079","impliedFormat":99},{"version":"6114545678bb75e581982c990597ca3ba7eeef185256a14c906edfc949db2cd1","impliedFormat":99},{"version":"5c8625f8dbbd94ab6ca171d621049c810cce4fce6ec1fd1c24c331d9858dce17","impliedFormat":99},{"version":"af36e5f207299ba2013f981dffacd4a04cdce2dd4bd255fff084e7257bf8b947","impliedFormat":99},{"version":"c69c720b733cdaa3b4542f4c1206d9f0fcf3696f87a6e88adb15db6882fbcd69","impliedFormat":99},{"version":"9c37e66916cbbe7d96301934b665ec712679c3cb99081ccaae4034b987533a59","impliedFormat":99},{"version":"2e1a163ab5b5c2640d7f5a100446bbcaeda953a06439c901b2ae307f7088dc30","impliedFormat":99},{"version":"f0b3406d2bc2c262f218c42a125832e026997278a890ef3549fa49e62177ce86","impliedFormat":99},{"version":"756cf223ca25eb36c413b2a286fa108f19a5ac39dc6d65f2c590dc118f6150df","impliedFormat":99},{"version":"70ce03da8740ca786a1a78b8a61394ecf812dd1acf2564d0ce6be5caf29e58d9","impliedFormat":99},{"version":"e0f5707d91bb950edb6338e83dd31b6902b6620018f6aa5fd0f504c2b0ea61f5","impliedFormat":99},{"version":"0dc7ae20eab8097b0c7a48b5833f6329e976f88af26055cdae6337141ff2c12e","impliedFormat":99},{"version":"76b6db79c0f5b326ff98b15829505efd25d36ce436b47fe59781ac9aec0d7f1b","impliedFormat":99},{"version":"786f3f186af874ea3e34c2aeef56a0beab90926350f3375781c0a3aa844cd76e","impliedFormat":99},{"version":"63dbc8fa1dcbfb8af6c48f004a1d31988f42af171596c5cca57e4c9d5000d291","impliedFormat":99},{"version":"aa235b26568b02c10d74007f577e0fa21a266745029f912e4fba2c38705b3abe","impliedFormat":99},{"version":"3d6d570b5f36cf08d9ad8d93db7ddc90fa7ccc0c177de2e9948bb23cde805d32","impliedFormat":99},{"version":"9a60faaa0d582db70f85a94a3439bd83720a9468928b76b4db561a1a0137fa90","impliedFormat":99},{"version":"627e2ac450dcd71bdd8c1614b5d3a02b214ad92a1621ebeb2642dffb9be93715","impliedFormat":99},{"version":"813514ef625cb8fc3befeec97afddfb3b80b80ced859959339d99f3ad538d8fe","impliedFormat":99},{"version":"624f8a7a76f26b9b0af9524e6b7fa50f492655ab7489c3f5f0ddd2de5461b0c3","impliedFormat":99},{"version":"d6b6fa535b18062680e96b2f9336e301312a2f7bdaeb47c4a5b3114c3de0c08b","impliedFormat":99},{"version":"818e8f95d3851073e92bcad7815367dd8337863aaf50d79e703ac479cca0b6a4","impliedFormat":99},{"version":"29b716ff24d0db64060c9a90287f9de2863adf0ef1efef71dbaba33ebc20b390","impliedFormat":99},{"version":"2530c36527a988debd39fed6504d8c51a3e0f356aaf2d270edd492f4223bdeff","impliedFormat":99},{"version":"2553cfd0ec0164f3ea228c5badd1ba78607d034fc2dec96c781026a28095204b","impliedFormat":99},{"version":"6e943693dbc91aa2c6c520e7814316469c8482d5d93df51178d8ded531bb29ee","impliedFormat":99},{"version":"e74e1249b69d9f49a6d9bfa5305f2a9f501e18de6ab0829ab342abf6d55d958b","impliedFormat":99},{"version":"16f60d6924a9e0b4b9961e42b5e586b28ffd57cdfa236ae4408f7bed9855a816","impliedFormat":99},{"version":"493c2d42f1b6cfe3b13358ff3085b90fa9a65d4858ea4d02d43772c0795006ec","impliedFormat":99},{"version":"3702c7cbcd937d7b96e5376fe562fd77b4598fe93c7595ee696ebbfefddac70f","impliedFormat":99},{"version":"848621f6b65b3963f86c51c8b533aea13eadb045da52515e6e1407dea19b8457","impliedFormat":99},{"version":"c15b679c261ce17551e17a40a42934aeba007580357f1a286c79e8e091ee3a76","impliedFormat":99},{"version":"156108cedad653a6277b1cb292b18017195881f5fe837fb7f9678642da8fa8f2","impliedFormat":99},{"version":"0a0bb42c33e9faf63e0b49a429e60533ab392f4f02528732ecbd62cfc2d54c10","impliedFormat":99},{"version":"70fa95cd7cb511e55c9262246de1f35f3966c50e8795a147a93c538db824cdc8","impliedFormat":99},{"version":"bc28d8cec56b5f91c8a2ec131444744b13f63c53ce670cb31d4dffdfc246ba34","impliedFormat":99},{"version":"7bd87c0667376e7d6325ada642ec29bf28e940cb146d21d270cac46b127e5313","impliedFormat":99},{"version":"0318969deede7190dd3567433a24133f709874c5414713aac8b706a5cb0fe347","impliedFormat":99},{"version":"3770586d5263348c664379f748428e6f17e275638f8620a60490548d1fada8b4","impliedFormat":99},{"version":"ff65e6f720ba4bf3da5815ca1c2e0df2ece2911579f307c72f320d692410e03d","impliedFormat":99},{"version":"edb4f17f49580ebcec71e1b7217ad1139a52c575e83f4f126db58438a549b6df","impliedFormat":99},{"version":"353c0cbb6e39e73e12c605f010fddc912c8212158ee0c49a6b2e16ede22cdaab","impliedFormat":99},{"version":"e125fdbea060b339306c30c33597b3c677e00c9e78cd4bf9a15b3fb9474ebb5d","impliedFormat":99},{"version":"ee141f547382d979d56c3b059fc12b01a88b7700d96f085e74268bc79f48c40a","impliedFormat":99},{"version":"1d64132735556e2a1823044b321c929ad4ede45b81f3e04e0e23cf76f4cbf638","impliedFormat":99},{"version":"8b4a3550a3cac035fe928701bc046f5fac76cca32c7851376424b37312f4b4ca","impliedFormat":99},{"version":"5fd7f9b36f48d6308feba95d98817496274be1939a9faa5cd9ed0f8adf3adf3a","impliedFormat":99},{"version":"15a8f79b1557978d752c0be488ee5a70daa389638d79570507a3d4cfc620d49d","impliedFormat":99},{"version":"d4c14ea7d76619ef4244e2c220c2caeec78d10f28e1490eeac89df7d2556b79f","impliedFormat":99},{"version":"8096207a00346207d9baf7bc8f436ef45a20818bf306236a4061d6ccc45b0372","impliedFormat":99},{"version":"040f2531989793c4846be366c100455789834ba420dfd6f36464fe73b68e35b6","impliedFormat":99},{"version":"c5c7020a1d11b7129eb8ddffb7087f59c83161a3792b3560dcd43e7528780ab0","impliedFormat":99},{"version":"d1f97ea020060753089059e9b6de1ab05be4cb73649b595c475e2ec197cbce0f","impliedFormat":99},{"version":"b5ddca6fd676daf45113412aa2b8242b8ee2588e99d68c231ab7cd3d88b392fa","impliedFormat":99},{"version":"77404ec69978995e3278f4a2d42940acbf221da672ae9aba95ffa485d0611859","impliedFormat":99},{"version":"4e6672fb142798b69bcb8d6cd5cc2ec9628dbea9744840ee3599b3dcd7b74b09","impliedFormat":99},{"version":"609653f5b74ef61422271a28dea232207e7ab8ad1446de2d57922e3678160f01","impliedFormat":99},{"version":"9f96251a94fbff4038b464ee2d99614bca48e086e1731ae7a2b5b334826d3a86","impliedFormat":99},{"version":"cacbb7f3e679bdea680c6c609f4403574a5de8b66167b8867967083a40821e2a","impliedFormat":99},{"version":"ee4cf97e8bad27c9e13a17a9f9cbd86b32e9fbc969a5c3f479dafb219209848c","impliedFormat":99},{"version":"3a4e35b6e99ed398e77583ffc17f8774cb4253f8796c0e04ce07c26636fed4a9","impliedFormat":99},{"version":"08d323cb848564baef1ecbe29df14f7ad84e5b2eaf2e02ea8cb422f069dcb2fa","impliedFormat":99},{"version":"a05b53646fa669b87d8b97c1fb7c0183d771680fdd1276b12e68bed4e84cf556","impliedFormat":99},{"version":"c3b9c02a31b36dd3a4067f420316c550f93d463e46b2704391100428e145fd7f","impliedFormat":99},{"version":"b2a4d01fcf005530c3f8689ac0197e5fd6b75eb031e73ca39e5a27d41793a5d8","impliedFormat":99},{"version":"e99d9167596f997dd2da0de0751a9f0e2f4100f07bddf049378719191aee87f6","impliedFormat":99},{"version":"40cc853264e24e0578580194c76e25628acdd1111b54ec8abf59b834c4942839","impliedFormat":99},{"version":"403971c465292dedc8dff308f430c6b69ec5e19ea98d650dae40c70f2399dc14","impliedFormat":99},{"version":"fd3774aa27a30b17935ad360d34570820b26ec70fa5fcfd44c7e884247354d37","impliedFormat":99},{"version":"7b149b38e54fe0149fe500c5d5a049654ce17b1705f6a1f72dd50d84c6a678b9","impliedFormat":99},{"version":"3eb76327823b6288eb4ed4648ebf4e75cf47c6fbc466ed920706b801399f7dc3","impliedFormat":99},{"version":"c6a219d0d39552594a4cc75970768004f99684f28890fc36a42b853af04997b7","impliedFormat":99},{"version":"2110d74b178b022ca8c5ae8dcc46e759c34cf3b7e61cb2f8891fd8d24cb614ef","impliedFormat":99},{"version":"38f5e025404a3108f5bb41e52cead694a86d16ad0005e0ef7718a2a31e959d1e","impliedFormat":99},{"version":"8db133d270ebb1ba3fa8e2c4ab48df2cc79cb03a705d47ca9f959b0756113d3d","impliedFormat":99},{"version":"fc9294185089a62f8287130bc100fa5ab11f3e6af8874127bbdf7600f19913ee","impliedFormat":99},{"version":"f06e5783d10123b74b14e141426a80234b9d6e5ad94bfc4850ea912719f4987c","impliedFormat":99},{"version":"de9466be4b561ad0079ac95ca7445c99fdf45ef115a93af8e2e933194b3cdf4c","impliedFormat":99},{"version":"0c1eed961c15e1242389b0497628709f59d7afd50d5a1955daa10b5bd3b68fc2","impliedFormat":99},{"version":"5e07a9f7f130e5404c202bf7b0625a624c9d266b980576f5d62608ef21d96eab","impliedFormat":99},{"version":"2f97d5063ab69bf32d6417d71765fc154dc6ff7c16700db7c4af5341a965c277","impliedFormat":99},{"version":"a8a9459dd76ef5eeef768da4ce466c5539d73b26334131bd1dd6cbd74ce48fa2","impliedFormat":99},{"version":"123ff203ffba727213e5095b9a59091cdbc9d1d94bae0d6adb98060ef410016c","impliedFormat":99},{"version":"9e4d81dd52d5a8b6c159c0b2f2b5fbe2566f12fcc81f7ba7ebb46ca604657b45","impliedFormat":99},{"version":"9ee245e7c6aa2d81ee0d7f30ff6897334842c469b0e20da24b3cddc6f635cc06","impliedFormat":99},{"version":"e7d5132674ddcd01673b0517eebc44c17f478126284c3eabd0a552514cb992bb","impliedFormat":99},{"version":"a820710a917f66fa88a27564465a033c393e1322a61eb581d1f20e0680b498f1","impliedFormat":99},{"version":"19086752f80202e6a993e2e45c0e7fc7c7fc4315c4805f3464625f54d919fa2e","impliedFormat":99},{"version":"141aebe2ee4fecd417d44cf0dabf6b80592c43164e1fbd9bfaf03a4ec377c18e","impliedFormat":99},{"version":"72c35a5291e2e913387583717521a25d15f1e77d889191440dc855c7e821b451","impliedFormat":99},{"version":"ec1c67b32d477ceeebf18bdeb364646d6572e9dd63bb736f461d7ea8510aca4f","impliedFormat":99},{"version":"fb555843022b96141c2bfaf9adcc3e5e5c2d3f10e2bcbd1b2b666bd701cf9303","impliedFormat":99},{"version":"f851083fc20ecc00ff8aaf91ba9584e924385768940654518705423822de09e8","impliedFormat":99},{"version":"c8d53cdb22eedf9fc0c8e41a1d9a147d7ad8997ed1e306f1216ed4e8daedb6b3","impliedFormat":99},{"version":"6c052f137bab4ba9ed6fd76f88a8d00484df9d5cb921614bb4abe60f51970447","impliedFormat":99},{"version":"d888e70d2e4a05f47573548bf836cab96575aab3b1c264693100f279514ac8ca","impliedFormat":99},{"version":"7d5c2df0c3706f45b77970232aa3a38952561311ccc8fcb7591e1b7a469ad761","impliedFormat":99},{"version":"2c41502b030205006ea3849c83063c4327342fbf925d8ed93b18309428fdd832","impliedFormat":99},{"version":"d12eecede214f8807a719178d7d7e2fc32f227d4705d123c3f45d8a3b5765f38","impliedFormat":99},{"version":"c8893abd114f341b860622b92c9ffc8c9eb9f21f6541bd3cbc9a4aa9b1097e42","impliedFormat":99},{"version":"825674da70d892b7e32c53f844c5dfce5b15ea67ceda4768f752eed2f02d8077","impliedFormat":99},{"version":"2c676d27ef1afbc8f8e514bb46f38550adf177ae9b0102951111116fa7ea2e10","impliedFormat":99},{"version":"a6072f5111ea2058cb4d592a4ee241f88b198498340d9ad036499184f7798ae2","impliedFormat":99},{"version":"ab87c99f96d9b1bf93684b114b27191944fef9a164476f2c6c052b93eaac0a4f","impliedFormat":99},{"version":"13e48eaca1087e1268f172607ae2f39c72c831a482cab597076c6073c97a15e7","impliedFormat":99},{"version":"19597dbe4500c782a4252755510be8324451847354cd8e204079ae81ab8d0ef6","impliedFormat":99},{"version":"f7d487e5f0104f0737951510ea361bc919f5b5f3ebc51807f81ce54934a3556f","impliedFormat":99},{"version":"efa8c5897e0239017e5b53e3f465d106b00d01ee94c9ead378a33284a2998356","impliedFormat":99},{"version":"fe3c53940b26832930246d4c39d6e507c26a86027817882702cf03bff314fa1d","impliedFormat":99},{"version":"53ee33b91d4dc2787eccebdbd396291e063db1405514bb3ab446e1ca3fd81a90","impliedFormat":99},{"version":"c4a97da118b4e6dde7c1daa93c4da17f0c4eedece638fc6dcc84f4eb1d370808","impliedFormat":99},{"version":"71666363fbdb0946bfc38a8056c6010060d1a526c0584145a9560151c6962b4f","impliedFormat":99},{"version":"1326f3630d26716257e09424f33074a945940afd64f2482e2bbc885258fca6bb","impliedFormat":99},{"version":"cc2eb5b23140bbceadf000ef2b71d27ac011d1c325b0fc5ecd42a3221db5fb2e","impliedFormat":99},{"version":"d04f5f3e90755ed40b25ed4c6095b6ad13fc9ce98b34a69c8da5ed38e2dbab5a","impliedFormat":99},{"version":"280b04a2238c0636dad2f25bbbbac18cf7bb933c80e8ec0a44a1d6a9f9d69537","impliedFormat":99},{"version":"0e9a2d784877b62ad97ed31816b1f9992563fdda58380cd696e796022a46bfdf","impliedFormat":99},{"version":"1b1411e7a3729bc632d8c0a4d265de9c6cbba4dc36d679c26dad87507faedee3","impliedFormat":99},{"version":"c478cfb0a2474672343b932ea69da64005bbfc23af5e661b907b0df8eb87bcb7","impliedFormat":99},{"version":"1a7bff494148b6e66642db236832784b8b2c9f5ad9bff82de14bcdb863dadcd9","impliedFormat":99},{"version":"65e6ad2d939dd38d03b157450ba887d2e9c7fd0f8f9d3008c0d1e59a0d8a73b4","impliedFormat":99},{"version":"f72b400dbf8f27adbda4c39a673884cb05daf8e0a1d8152eec2480f5700db36c","impliedFormat":99},{"version":"347f6fe4308288802eb123596ad9caf06755e80cfc7f79bbe56f4141a8ee4c50","impliedFormat":99},{"version":"5f5baa59149d3d6d6cef2c09d46bb4d19beb10d6bee8c05b7850c33535b3c438","impliedFormat":99},{"version":"a8f0c99380c9e91a73ecfc0a8582fbdefde3a1351e748079dc8c0439ea97b6db","impliedFormat":99},{"version":"be02e3c3cb4e187fd252e7ae12f6383f274e82288c8772bb0daf1a4e4af571ad","impliedFormat":99},{"version":"82ca40fb541799273571b011cd9de6ee9b577ef68acc8408135504ae69365b74","impliedFormat":99},{"version":"e671e3fc9b6b2290338352606f6c92e6ecf1a56459c3f885a11080301ca7f8de","impliedFormat":99},{"version":"a2e4b90260194318b1fa1e6b0554d257a0862c10e982c8907d30d1e7f3d463af","impliedFormat":99},{"version":"5559ab4aa1ba9fac7225398231a179d63a4c4dccd982a17f09404b536980dae8","impliedFormat":99},{"version":"2d7b9e1626f44684252d826a8b35770b77ce7c322734a5d3236b629a301efdcf","impliedFormat":99},{"version":"5b8dafbb90924201f655931d429a4eceb055f11c836a6e9cbc7c3aecf735912d","impliedFormat":99},{"version":"0b9be1f90e5e154b61924a28ed2de133fd1115b79c682b1e3988ac810674a5c4","impliedFormat":99},{"version":"7a9477ba5fc17786ee74340780083f39f437904229a0cd57fc9a468fd6567eb8","impliedFormat":99},{"version":"3da1dd252145e279f23d85294399ed2120bf8124ed574d34354a0a313c8554b6","impliedFormat":99},{"version":"e5c4080de46b1a486e25a54ddbb6b859312359f9967a7dc3c9d5cf4676378201","impliedFormat":99},{"version":"cfe1cdf673d2db391fd1a1f123e0e69c7ca06c31d9ac8b35460130c5817c8d29","impliedFormat":99},{"version":"b9701f688042f44529f99fd312c49fea853e66538c19cfcbb9ef024fdb5470cc","impliedFormat":99},{"version":"6daa62c5836cc12561d12220d385a4a243a4a5a89afd6f2e48009a8dd8f0ad83","impliedFormat":99},{"version":"c74550758053cf21f7fea90c7f84fa66c27c5f5ac1eca77ce6c2877dbfdec4d1","impliedFormat":99},{"version":"bd8310114a3a5283faac25bfbfc0d75b685a3a3e0d827ee35d166286bdd4f82e","impliedFormat":99},{"version":"1459ae97d13aeb6e457ccffac1fbb5c5b6d469339729d9ef8aeb8f0355e1e2c9","impliedFormat":99},{"version":"1bf03857edaebf4beba27459edf97f9407467dc5c30195425cb8a5d5a573ea52","impliedFormat":99},{"version":"f6b4833d66c12c9106a3299e520ed46f9a4c443cefc22c993315c4bb97a28db1","impliedFormat":99},{"version":"746c02f8b99bd90c4d135badaab575c6cfce0d030528cf90190c8914b0934ea3","impliedFormat":99},{"version":"a858ba8df5e703977dee467b10af084398919e99c9e42559180e75953a1f6ef6","impliedFormat":99},{"version":"d2dcd6105c195d0409abd475b41363789c63ae633282f04465e291a68a151685","impliedFormat":99},{"version":"0b569ed836f0431c2efaef9b6017e8b700a7fed319866d7667f1189957275045","impliedFormat":99},{"version":"9371612fd8638d7f6a249a14843132e7adb0b5c84edba9ed7905e835b644c013","impliedFormat":99},{"version":"0c72189b6ec67331476a36ec70a2b8ce6468dc4db5d3eb52deb9fefbd6981ebb","impliedFormat":99},{"version":"af8dd6bb70bfcb2c6b2de0d42240c2c952b9040af259a287e78eaf883ef1ce0d","impliedFormat":99},{"version":"7e4a27fd17dbb256314c2513784236f2ae2023573e83d0e65ebddfda336701db","impliedFormat":99},{"version":"131ecac1c7c961041df80a1dc353223af4e658d56ba1516317f79bd5400cffeb","impliedFormat":99},{"version":"f3a55347fb874828e442c2916716d56552ac3478204c29c0d47e698c00eb5d28","impliedFormat":99},{"version":"49ebbdfe7427d784ccdc8325bdecc8dda1719a7881086f14751879b4f8d70c21","impliedFormat":99},{"version":"c1692845412646f17177eb62feb9588c8b5d5013602383f02ae9d38f3915020c","impliedFormat":99},{"version":"b1b440e6c973d920935591a3d360d79090b8cf58947c0230259225b02cf98a83","impliedFormat":99},{"version":"defc2ae12099f46649d12aa4872ce23ba43fba275920c00c398487eaf091bbae","impliedFormat":99},{"version":"620390fbef44884902e4911e7473531e9be4db37eeef2da52a34449d456b4617","impliedFormat":99},{"version":"e60440cbd3ec916bc5f25ada3a6c174619745c38bfca58d3554f7d62905dc376","impliedFormat":99},{"version":"86388eda63dcb65b4982786eec9f80c3ef21ca9fb2808ff58634e712f1f39a27","impliedFormat":99},{"version":"022cd098956e78c9644e4b3ad1fe460fac6914ca9349d6213f518386baf7c96b","impliedFormat":99},{"version":"dfc67e73325643e92f71f94276b5fb3be09c59a1eeee022e76c61ae99f3eda4b","impliedFormat":99},{"version":"8c3d6c9abaa0b383f43cac0c227f063dc4018d851a14b6c2142745a78553c426","impliedFormat":99},{"version":"ee551dc83df0963c1ee03dc32ce36d83b3db9793f50b1686dc57ec2bbffc98af","impliedFormat":99},{"version":"968832c4ffd675a0883e3d208b039f205e881ae0489cc13060274cf12e0e4370","impliedFormat":99},{"version":"c593ca754961cfd13820add8b34da35a114cda7215d214e4177a1b0e1a7f3377","impliedFormat":99},{"version":"ed88c51aa3b33bb2b6a8f2434c34f125946ba7b91ed36973169813fdad57f1ec","impliedFormat":99},{"version":"a9ea477d5607129269848510c2af8bcfd8e262ebfbd6cd33a6c451f0cd8f5257","impliedFormat":99},{"version":"cc08eeb544371bd1bd65f2abeb362d61eda8af26d6146a72494436726cd7570c","signature":"e8b286cf582396e80a8fef5cc18e5cc0b24a57f7ff18e29f06a14a2fabc79b31","impliedFormat":99},{"version":"484f211a54e1c54707a1eea2176497b4d5c841aed7f6f3cbee20e53e433f2652","signature":"848a1458bb72bbfcd889e8bbeb47dac71af37a4a7dfdf9db904497251520bc63","impliedFormat":99},{"version":"47d054852dde009729b823c4f215983c2ac31c8e24874cc527552243d7560b35","signature":"f5bc3bf0c70b647801158a77008d58fe080586a148a605abcde7164b1abe7704","impliedFormat":99},{"version":"2226f0240f155531a82f8a6a80325af863f95c5df17ff39b3be4c6ce6084791e","signature":"081d49e4c65368bb1683593442fe1bc8a3c28b603c0c4143b3f18074ab40baf7","impliedFormat":99},{"version":"02fbcf4f0e9e98926398c19d55507b87e02e3ec7ad376077cfd6cbd399ec9801","signature":"c965d9aa559860629ce6053fc7cefdcd838c1ebc9fc07c395d5374a2762f8f18","impliedFormat":99},{"version":"7f0ee2c53a66e8aa32501de1e7039bc83488596058b6340af51c5c724ff2fe2e","signature":"7c7bd14d390e9b8cbc3166581aa8e8523848a4136cabfe0529f6209fc3bddaab","impliedFormat":99},{"version":"c20801a7d94a6fa3b05e0e9861ef5565e3e20de8ee8ade00501ee49cd5580a29","signature":"cf97c9129cd1a1813580a7b3177ed4f6a4776a2acd58998b5e75468071cfc796","impliedFormat":99},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"438b41419b1df9f1fbe33b5e1b18f5853432be205991d1b19f5b7f351675541e","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"074de5b2fdead0165a2757e3aaef20f27a6347b1c36adea27d51456795b37682","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"24371e69a38fc33e268d4a8716dbcda430d6c2c414a99ff9669239c4b8f40dea","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"3e11fce78ad8c0e1d1db4ba5f0652285509be3acdd519529bc8fcef85f7dafd9","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"c63b9ada8c72f95aac5db92aea07e5e87ec810353cdf63b2d78f49a58662cf6c","impliedFormat":1},{"version":"1cc2a09e1a61a5222d4174ab358a9f9de5e906afe79dbf7363d871a7edda3955","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"b64d4d1c5f877f9c666e98e833f0205edb9384acc46e98a1fef344f64d6aba44","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"c9381908473a1c92cb8c516b184e75f4d226dad95c3a85a5af35f670064d9a2f","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"3fad5618174d74a34ee006406d4eb37e8d07dd62eb1315dbf52f48d31a337547","impliedFormat":1},{"version":"7e49f52a159435fc8df4de9dc377ef5860732ca2dc9efec1640531d3cf5da7a3","impliedFormat":1},{"version":"dd4bde4bdc2e5394aed6855e98cf135dfdf5dd6468cad842e03116d31bbcc9bc","impliedFormat":1},{"version":"4d4e879009a84a47c05350b8dca823036ba3a29a3038efed1be76c9f81e45edf","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b50a819485ffe0d237bf0d131e92178d14d11e2aa873d73615a9ec578b341f5","impliedFormat":1},{"version":"9ba13b47cb450a438e3076c4a3f6afb9dc85e17eae50f26d4b2d72c0688c9251","impliedFormat":1},{"version":"b64cd4401633ea4ecadfd700ddc8323a13b63b106ac7127c1d2726f32424622c","impliedFormat":1},{"version":"37c6e5fe5715814412b43cc9b50b24c67a63c4e04e753e0d1305970d65417a60","impliedFormat":1},{"version":"1d024184fb57c58c5c91823f9d10b4915a4867b7934e89115fd0d861a9df27c8","impliedFormat":1},{"version":"ee0e4946247f842c6dd483cbb60a5e6b484fee07996e3a7bc7343dfb68a04c5d","impliedFormat":1},{"version":"ef051f42b7e0ef5ca04552f54c4552eac84099d64b6c5ad0ef4033574b6035b8","impliedFormat":1},{"version":"853a43154f1d01b0173d9cbd74063507ece57170bad7a3b68f3fa1229ad0a92f","impliedFormat":1},{"version":"56231e3c39a031bfb0afb797690b20ed4537670c93c0318b72d5180833d98b72","impliedFormat":1},{"version":"5cc7c39031bfd8b00ad58f32143d59eb6ffc24f5d41a20931269011dccd36c5e","impliedFormat":1},{"version":"12d602a8fe4c2f2ba4f7804f5eda8ba07e0c83bf5cf0cda8baffa2e9967bfb77","affectsGlobalScope":true,"impliedFormat":1},{"version":"a856ab781967b62b288dfd85b860bef0e62f005ed4b1b8fa25c53ce17856acaf","impliedFormat":1},{"version":"cc25940cfb27aa538e60d465f98bb5068d4d7d33131861ace43f04fe6947d68f","impliedFormat":1},{"version":"8db46b61a690f15b245cf16270db044dc047dce9f93b103a59f50262f677ea1f","impliedFormat":1},{"version":"01ff95aa1443e3f7248974e5a771f513cb2ac158c8898f470a1792f817bee497","impliedFormat":1},{"version":"757227c8b345c57d76f7f0e3bbad7a91ffca23f1b2547cbed9e10025816c9cb7","impliedFormat":1},{"version":"959d0327c96dd9bb5521f3ed6af0c435996504cc8dd46baa8e12cb3b3518cef1","impliedFormat":1},{"version":"e1c1a0b4d1ead0de9eca52203aeb1f771f21e6238d6fcd15aa56ac2a02f1b7bf","impliedFormat":1},{"version":"101f482fd48cb4c7c0468dcc6d62c843d842977aea6235644b1edd05e81fbf22","impliedFormat":1},{"version":"266bee0a41e9c3ba335583e21e9277ae03822402cf5e8e1d99f5196853613b98","affectsGlobalScope":true,"impliedFormat":1},{"version":"386606f8a297988535cb1401959041cfa7f59d54b8a9ed09738e65c98684c976","impliedFormat":1},{"version":"3ef397f12387eff17f550bc484ea7c27d21d43816bbe609d495107f44b97e933","impliedFormat":1},{"version":"1023282e2ba810bc07905d3668349fbd37a26411f0c8f94a70ef3c05fe523fcf","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"e236b5eba291f51bdf32c231673e6cab81b5410850e61f51a7a524dddadc0f95","impliedFormat":1},{"version":"93d28b4eb12c68fccc1f2fc04a4ef83ea3b2a03b18055d3bf29cab267aa7042e","impliedFormat":1},{"version":"ce8653341224f8b45ff46d2a06f2cacb96f841f768a886c9d8dd8ec0878b11bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f2c62938251b45715fd2a9887060ec4fbc8724727029d1cbce373747252bdd7","impliedFormat":1},{"version":"e3ace08b6bbd84655d41e244677b474fd995923ffef7149ddb68af8848b60b05","impliedFormat":1},{"version":"132580b0e86c48fab152bab850fc57a4b74fe915c8958d2ccb052b809a44b61c","impliedFormat":1},{"version":"90a278f5fab7557e69e97056c0841adf269c42697194f0bd5c5e69152637d4b3","impliedFormat":1},{"version":"69c9a5a9392e8564bd81116e1ed93b13205201fb44cb35a7fde8c9f9e21c4b23","impliedFormat":1},{"version":"5f8fc37f8434691ffac1bfd8fc2634647da2c0e84253ab5d2dd19a7718915b35","impliedFormat":1},{"version":"5981c2340fd8b076cae8efbae818d42c11ffc615994cb060b1cd390795f1be2b","impliedFormat":1},{"version":"f263485c9ca90df9fe7bb3a906db9701997dc6cae86ace1f8106ac8d2f7f677b","impliedFormat":1},{"version":"1edcf2f36fc332615846bde6dcc71a8fe526065505bc5e3dcfd65a14becdf698","affectsGlobalScope":true,"impliedFormat":1},{"version":"0250da3eb85c99624f974e77ef355cdf86f43980251bc371475c2b397ba55bcd","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"3d3a5f27ffbc06c885dd4d5f9ee20de61faf877fe2c3a7051c4825903d9a7fdc","impliedFormat":1},{"version":"12806f9f085598ef930edaf2467a5fa1789a878fba077cd27e85dc5851e11834","impliedFormat":1},{"version":"1dbca38aa4b0db1f4f9e6edacc2780af7e028b733d2a98dd3598cd235ca0c97d","impliedFormat":1},{"version":"a43fe41c33d0a192a0ecaf9b92e87bef3709c9972e6d53c42c49251ccb962d69","impliedFormat":1},{"version":"a177959203c017fad3ecc4f3d96c8757a840957a4959a3ae00dab9d35961ca6c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc727ccf9b36e257ff982ea0badeffbfc2c151802f741bddff00c6af3b784cf","impliedFormat":1},{"version":"19143c930aef7ccf248549f3e78992f2f1049118ec5d4622e95025057d8e392b","impliedFormat":1},{"version":"4844a4c9b4b1e812b257676ed8a80b3f3be0e29bf05e742cc2ea9c3c6865e6c6","impliedFormat":1},{"version":"064878a60367e0407c42fb7ba02a2ea4d83257357dc20088e549bd4d89433e9c","impliedFormat":1},{"version":"cca8917838a876e2d7016c9b6af57cbf11fdf903c5fdd8e613fa31840b2957bf","impliedFormat":1},{"version":"d91ae55e4282c22b9c21bc26bd3ef637d3fe132507b10529ae68bf76f5de785b","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"7e8a671604329e178bb479c8f387715ebd40a091fc4a7552a0a75c2f3a21c65c","impliedFormat":1},{"version":"41ef7992c555671a8fe54db302788adefa191ded810a50329b79d20a6772d14c","impliedFormat":1},{"version":"041a7781b9127ab568d2cdcce62c58fdea7c7407f40b8c50045d7866a2727130","impliedFormat":1},{"version":"4c5e90ddbcd177ad3f2ffc909ae217c87820f1e968f6959e4b6ba38a8cec935e","impliedFormat":1},{"version":"b70dd9a44e1ac42f030bb12e7d79117eac7cb74170d72d381a1e7913320af23a","impliedFormat":1},{"version":"55cdbeebe76a1fa18bbd7e7bf73350a2173926bd3085bb050cf5a5397025ee4e","impliedFormat":1}],"root":[[60,75],[268,274]],"options":{"composite":true,"declaration":true,"esModuleInterop":true,"exactOptionalPropertyTypes":true,"module":199,"noImplicitReturns":true,"noUncheckedIndexedAccess":true,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9,"verbatimModuleSyntax":true},"referencedMap":[[267,1],[78,2],[79,3],[216,2],[217,4],[198,5],[199,6],[82,7],[83,8],[153,9],[154,10],[127,2],[128,11],[121,2],[122,12],[213,13],[211,14],[212,15],[227,16],[228,17],[97,18],[98,19],[229,20],[230,21],[231,22],[232,23],[89,24],[90,25],[215,26],[214,27],[200,2],[201,28],[93,29],[94,30],[117,15],[118,31],[235,32],[233,33],[234,34],[236,35],[237,36],[240,37],[238,38],[241,14],[239,39],[242,40],[245,41],[243,42],[244,43],[246,44],[95,24],[96,45],[221,46],[218,47],[219,48],[220,15],[196,49],[197,50],[141,51],[140,52],[138,53],[137,54],[139,55],[248,56],[247,57],[250,58],[249,59],[126,60],[125,2],[104,61],[102,62],[101,7],[103,63],[253,64],[257,65],[251,66],[252,67],[254,64],[255,64],[256,64],[143,68],[142,7],[159,69],[157,70],[158,14],[155,71],[156,72],[92,73],[91,2],[149,74],[80,2],[81,75],[148,76],[186,77],[189,78],[187,79],[188,80],[100,81],[99,2],[191,82],[190,7],[169,83],[168,2],[124,84],[123,2],[195,85],[194,86],[163,87],[162,88],[160,89],[161,90],[152,91],[151,92],[150,93],[259,94],[258,95],[176,96],[175,97],[174,98],[223,99],[222,15],[167,100],[166,101],[164,102],[165,103],[145,104],[144,7],[88,105],[87,106],[86,107],[85,108],[84,109],[180,110],[179,111],[110,112],[109,7],[114,113],[113,114],[178,115],[177,2],[224,15],[226,116],[225,15],[183,117],[182,118],[181,119],[261,120],[260,121],[263,122],[262,123],[209,124],[210,125],[208,126],[147,127],[146,15],[193,128],[192,129],[120,130],[119,2],[171,131],[170,2],[77,132],[76,15],[130,133],[131,134],[136,135],[129,136],[133,137],[132,138],[134,139],[135,140],[185,141],[184,7],[116,142],[115,7],[266,143],[265,144],[264,145],[203,146],[202,2],[173,147],[172,2],[108,148],[106,149],[105,7],[107,150],[205,151],[204,2],[112,152],[111,2],[207,153],[206,2],[61,154],[74,155],[69,156],[70,157],[72,158],[73,159],[65,160],[274,161],[68,162],[67,163],[66,164],[64,15],[71,165],[60,15],[62,166],[63,15],[271,167],[273,168],[75,163],[272,15],[270,169],[268,170],[269,171],[367,15],[337,172],[338,172],[339,173],[277,174],[340,175],[341,176],[342,177],[275,15],[343,178],[344,179],[345,180],[346,181],[347,182],[348,183],[349,183],[350,184],[351,185],[352,186],[353,187],[278,15],[276,15],[354,188],[355,189],[356,190],[397,191],[357,192],[358,193],[359,192],[360,194],[361,195],[304,196],[316,197],[301,198],[317,199],[326,200],[292,201],[293,202],[291,203],[325,204],[320,205],[324,206],[295,207],[313,208],[294,209],[323,210],[289,211],[290,205],[296,212],[297,15],[303,213],[300,212],[287,214],[327,215],[318,216],[307,217],[306,212],[308,218],[311,219],[305,220],[309,221],[321,204],[298,222],[299,223],[312,224],[288,199],[315,225],[314,212],[302,223],[310,226],[319,15],[286,15],[322,227],[362,228],[363,229],[364,229],[365,229],[366,230],[368,231],[369,232],[370,233],[371,234],[372,235],[373,235],[374,236],[375,15],[376,15],[377,237],[378,238],[379,237],[380,239],[381,240],[382,241],[383,242],[384,243],[385,244],[386,245],[387,246],[388,247],[389,248],[390,249],[391,250],[392,251],[393,252],[394,253],[279,192],[280,15],[281,254],[282,166],[283,15],[284,255],[285,15],[328,256],[329,257],[330,258],[331,258],[332,259],[333,15],[334,175],[335,260],[336,257],[395,261],[396,262],[58,15],[59,15],[11,15],[10,15],[2,15],[12,15],[13,15],[14,15],[15,15],[16,15],[17,15],[18,15],[19,15],[3,15],[20,15],[21,15],[4,15],[22,15],[26,15],[23,15],[24,15],[25,15],[27,15],[28,15],[29,15],[5,15],[30,15],[31,15],[32,15],[33,15],[6,15],[37,15],[34,15],[35,15],[36,15],[38,15],[7,15],[39,15],[44,15],[45,15],[40,15],[41,15],[42,15],[43,15],[8,15],[49,15],[46,15],[47,15],[48,15],[50,15],[9,15],[51,15],[52,15],[53,15],[55,15],[54,15],[56,15],[1,15],[57,15]],"semanticDiagnosticsPerFile":[[268,[{"start":88,"length":35,"messageText":"Cannot find module 'openclaw/plugin-sdk/agent-runtime' or its corresponding type declarations.","category":1,"code":2307},{"start":7135,"length":3,"messageText":"Parameter '_id' implicitly has an 'any' type.","category":1,"code":7006},{"start":7140,"length":6,"messageText":"Parameter 'params' implicitly has an 'any' type.","category":1,"code":7006},{"start":8640,"length":3,"messageText":"Parameter '_id' implicitly has an 'any' type.","category":1,"code":7006},{"start":8645,"length":6,"messageText":"Parameter 'params' implicitly has an 'any' type.","category":1,"code":7006},{"start":11685,"length":3,"messageText":"Parameter '_id' implicitly has an 'any' type.","category":1,"code":7006},{"start":11690,"length":6,"messageText":"Parameter 'params' implicitly has an 'any' type.","category":1,"code":7006}]],[270,[{"start":392,"length":34,"messageText":"Cannot find module 'openclaw/plugin-sdk/hook-runtime' or its corresponding type declarations.","category":1,"code":2307},{"start":713,"length":36,"messageText":"Cannot find module 'openclaw/plugin-sdk/plugin-runtime' or its corresponding type declarations.","category":1,"code":2307}]],[271,[{"start":39,"length":34,"messageText":"Cannot find module 'openclaw/plugin-sdk/plugin-entry' or its corresponding type declarations.","category":1,"code":2307}]],[272,[{"start":48,"length":33,"messageText":"Cannot find module 'openclaw/plugin-sdk/memory-core' or its corresponding type declarations.","category":1,"code":2307},{"start":155,"length":14,"messageText":"Binding element 'availableTools' implicitly has an 'any' type.","category":1,"code":7031},{"start":171,"length":13,"messageText":"Binding element 'citationsMode' implicitly has an 'any' type.","category":1,"code":7031}]],[273,[{"start":34,"length":34,"messageText":"Cannot find module 'openclaw/plugin-sdk/plugin-entry' or its corresponding type declarations.","category":1,"code":2307},{"start":740,"length":3,"messageText":"Parameter 'api' implicitly has an 'any' type.","category":1,"code":7006}]]],"latestChangedDtsFile":"./dist/core/skills/extraction-skill.d.ts","version":"6.0.2"} \ No newline at end of file +{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/typescript/lib/lib.es2025.float16.d.ts","../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","./src/core/types.ts","./src/config.ts","../../node_modules/json5/lib/parse.d.ts","../../node_modules/json5/lib/stringify.d.ts","../../node_modules/json5/lib/index.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/plugins/message-action-names.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/plugins/message-capabilities.d.ts","../../node_modules/@sinclair/typebox/build/esm/type/symbols/symbols.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/symbols/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/any/any.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/any/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/mapped/mapped-key.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/mapped/mapped-result.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/async-iterator/async-iterator.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/async-iterator/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/readonly/readonly.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/readonly/readonly-from-mapped-result.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/readonly/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/readonly-optional/readonly-optional.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/readonly-optional/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/constructor/constructor.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/constructor/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/literal/literal.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/literal/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/enum/enum.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/enum/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/function/function.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/function/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/computed/computed.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/computed/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/never/never.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/never/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-type.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-evaluated.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/intersect/intersect.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/intersect/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/union/union-type.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/union/union-evaluated.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/union/union.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/union/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/recursive/recursive.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/recursive/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/unsafe/unsafe.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/unsafe/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/ref/ref.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/ref/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/tuple/tuple.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/tuple/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/error/error.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/error/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/string/string.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/string/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/boolean/boolean.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/boolean/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/number/number.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/number/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/integer/integer.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/integer/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/bigint/bigint.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/bigint/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/template-literal/parse.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/template-literal/finite.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/template-literal/generate.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/template-literal/syntax.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/template-literal/pattern.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/template-literal/template-literal.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/template-literal/union.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/template-literal/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-property-keys.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-from-mapped-result.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/indexed/indexed.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-from-mapped-key.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/indexed/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/iterator/iterator.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/iterator/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/promise/promise.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/promise/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/sets/set.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/sets/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/mapped/mapped.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/mapped/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/optional/optional.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/optional/optional-from-mapped-result.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/optional/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/awaited/awaited.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/awaited/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-property-keys.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/keyof/keyof.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-from-mapped-result.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-property-entries.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/keyof/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/omit/omit-from-mapped-result.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/omit/omit.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/omit/omit-from-mapped-key.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/omit/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/pick/pick-from-mapped-result.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/pick/pick.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/pick/pick-from-mapped-key.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/pick/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/null/null.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/null/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/symbol/symbol.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/symbol/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/undefined/undefined.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/undefined/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/partial/partial.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/partial/partial-from-mapped-result.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/partial/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/regexp/regexp.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/regexp/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/record/record.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/record/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/required/required.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/required/required-from-mapped-result.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/required/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/transform/transform.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/transform/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/module/compute.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/module/infer.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/module/module.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/module/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/not/not.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/not/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/static/static.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/static/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/object/object.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/object/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/helpers/helpers.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/helpers/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/array/array.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/array/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/date/date.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/date/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/uint8array/uint8array.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/uint8array/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/unknown/unknown.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/unknown/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/void/void.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/void/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/schema/schema.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/schema/anyschema.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/schema/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/clone/type.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/clone/value.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/clone/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/create/type.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/create/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/argument/argument.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/argument/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/guard/kind.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/guard/type.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/guard/value.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/guard/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/patterns/patterns.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/patterns/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/registry/format.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/registry/type.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/registry/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/composite/composite.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/composite/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/const/const.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/const/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/constructor-parameters/constructor-parameters.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/constructor-parameters/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/exclude/exclude-from-template-literal.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/exclude/exclude.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/exclude/exclude-from-mapped-result.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/exclude/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/extends/extends-check.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/extends/extends-from-mapped-result.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/extends/extends.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/extends/extends-from-mapped-key.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/extends/extends-undefined.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/extends/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/extract/extract-from-template-literal.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/extract/extract.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/extract/extract-from-mapped-result.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/extract/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/instance-type/instance-type.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/instance-type/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/instantiate/instantiate.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/instantiate/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/intrinsic/intrinsic-from-mapped-key.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/intrinsic/intrinsic.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/intrinsic/capitalize.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/intrinsic/lowercase.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/intrinsic/uncapitalize.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/intrinsic/uppercase.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/intrinsic/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/parameters/parameters.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/parameters/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/rest/rest.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/rest/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/return-type/return-type.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/return-type/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/type/json.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/type/javascript.d.mts","../../node_modules/@sinclair/typebox/build/esm/type/type/index.d.mts","../../node_modules/@sinclair/typebox/build/esm/index.d.mts","../../node_modules/@mariozechner/pi-ai/dist/utils/event-stream.d.ts","../../node_modules/@mariozechner/pi-ai/dist/types.d.ts","../../node_modules/@mariozechner/pi-ai/dist/api-registry.d.ts","../../node_modules/@mariozechner/pi-ai/dist/env-api-keys.d.ts","../../node_modules/@mariozechner/pi-ai/dist/models.generated.d.ts","../../node_modules/@mariozechner/pi-ai/dist/models.d.ts","../../node_modules/@mariozechner/pi-ai/dist/providers/amazon-bedrock.d.ts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/internal/builtin-types.d.mts","../../node_modules/@types/events/index.d.ts","../../node_modules/undici-types/utility.d.ts","../../node_modules/undici-types/header.d.ts","../../node_modules/undici-types/readable.d.ts","../../node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../node_modules/@types/node/web-globals/blob.d.ts","../../node_modules/@types/node/web-globals/console.d.ts","../../node_modules/@types/node/web-globals/crypto.d.ts","../../node_modules/@types/node/web-globals/domexception.d.ts","../../node_modules/@types/node/web-globals/encoding.d.ts","../../node_modules/@types/node/web-globals/events.d.ts","../../node_modules/@types/node/node_modules/undici-types/utility.d.ts","../../node_modules/@types/node/node_modules/undici-types/header.d.ts","../../node_modules/@types/node/node_modules/undici-types/readable.d.ts","../../node_modules/@types/node/node_modules/undici-types/fetch.d.ts","../../node_modules/@types/node/node_modules/undici-types/formdata.d.ts","../../node_modules/@types/node/node_modules/undici-types/connector.d.ts","../../node_modules/@types/node/node_modules/undici-types/client-stats.d.ts","../../node_modules/@types/node/node_modules/undici-types/client.d.ts","../../node_modules/@types/node/node_modules/undici-types/errors.d.ts","../../node_modules/@types/node/node_modules/undici-types/dispatcher.d.ts","../../node_modules/@types/node/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/@types/node/node_modules/undici-types/global-origin.d.ts","../../node_modules/@types/node/node_modules/undici-types/pool-stats.d.ts","../../node_modules/@types/node/node_modules/undici-types/pool.d.ts","../../node_modules/@types/node/node_modules/undici-types/handlers.d.ts","../../node_modules/@types/node/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/@types/node/node_modules/undici-types/round-robin-pool.d.ts","../../node_modules/@types/node/node_modules/undici-types/h2c-client.d.ts","../../node_modules/@types/node/node_modules/undici-types/agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-call-history.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-client.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-pool.d.ts","../../node_modules/@types/node/node_modules/undici-types/snapshot-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-errors.d.ts","../../node_modules/@types/node/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/retry-handler.d.ts","../../node_modules/@types/node/node_modules/undici-types/retry-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/api.d.ts","../../node_modules/@types/node/node_modules/undici-types/cache-interceptor.d.ts","../../node_modules/@types/node/node_modules/undici-types/interceptors.d.ts","../../node_modules/@types/node/node_modules/undici-types/util.d.ts","../../node_modules/@types/node/node_modules/undici-types/cookies.d.ts","../../node_modules/@types/node/node_modules/undici-types/patch.d.ts","../../node_modules/@types/node/node_modules/undici-types/websocket.d.ts","../../node_modules/@types/node/node_modules/undici-types/eventsource.d.ts","../../node_modules/@types/node/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/@types/node/node_modules/undici-types/content-type.d.ts","../../node_modules/@types/node/node_modules/undici-types/cache.d.ts","../../node_modules/@types/node/node_modules/undici-types/index.d.ts","../../node_modules/@types/node/web-globals/fetch.d.ts","../../node_modules/@types/node/web-globals/importmeta.d.ts","../../node_modules/@types/node/web-globals/messaging.d.ts","../../node_modules/@types/node/web-globals/navigator.d.ts","../../node_modules/@types/node/web-globals/performance.d.ts","../../node_modules/@types/node/web-globals/storage.d.ts","../../node_modules/@types/node/web-globals/streams.d.ts","../../node_modules/@types/node/web-globals/timers.d.ts","../../node_modules/@types/node/web-globals/url.d.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.d.ts","../../node_modules/@types/node/inspector.generated.d.ts","../../node_modules/@types/node/inspector/promises.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/path/posix.d.ts","../../node_modules/@types/node/path/win32.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/quic.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/readline/promises.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/sea.d.ts","../../node_modules/@types/node/sqlite.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/test.d.ts","../../node_modules/@types/node/test/reporters.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/util/types.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/index.d.ts","../../node_modules/undici-types/fetch.d.ts","../../node_modules/undici-types/formdata.d.ts","../../node_modules/undici-types/connector.d.ts","../../node_modules/undici-types/client-stats.d.ts","../../node_modules/undici-types/client.d.ts","../../node_modules/undici-types/errors.d.ts","../../node_modules/undici-types/dispatcher.d.ts","../../node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/undici-types/global-origin.d.ts","../../node_modules/undici-types/pool-stats.d.ts","../../node_modules/undici-types/pool.d.ts","../../node_modules/undici-types/handlers.d.ts","../../node_modules/undici-types/balanced-pool.d.ts","../../node_modules/undici-types/h2c-client.d.ts","../../node_modules/undici-types/agent.d.ts","../../node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/undici-types/mock-call-history.d.ts","../../node_modules/undici-types/mock-agent.d.ts","../../node_modules/undici-types/mock-client.d.ts","../../node_modules/undici-types/mock-pool.d.ts","../../node_modules/undici-types/snapshot-agent.d.ts","../../node_modules/undici-types/mock-errors.d.ts","../../node_modules/undici-types/proxy-agent.d.ts","../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/undici-types/retry-handler.d.ts","../../node_modules/undici-types/retry-agent.d.ts","../../node_modules/undici-types/api.d.ts","../../node_modules/undici-types/cache-interceptor.d.ts","../../node_modules/undici-types/interceptors.d.ts","../../node_modules/undici-types/util.d.ts","../../node_modules/undici-types/cookies.d.ts","../../node_modules/undici-types/patch.d.ts","../../node_modules/undici-types/websocket.d.ts","../../node_modules/undici-types/eventsource.d.ts","../../node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/undici-types/content-type.d.ts","../../node_modules/undici-types/cache.d.ts","../../node_modules/undici-types/index.d.ts","../../node_modules/undici/types/utility.d.ts","../../node_modules/undici/types/header.d.ts","../../node_modules/undici/types/readable.d.ts","../../node_modules/undici/types/fetch.d.ts","../../node_modules/undici/types/formdata.d.ts","../../node_modules/undici/types/connector.d.ts","../../node_modules/undici/types/client-stats.d.ts","../../node_modules/undici/types/client.d.ts","../../node_modules/undici/types/errors.d.ts","../../node_modules/undici/types/dispatcher.d.ts","../../node_modules/undici/types/global-dispatcher.d.ts","../../node_modules/undici/types/global-origin.d.ts","../../node_modules/undici/types/pool-stats.d.ts","../../node_modules/undici/types/pool.d.ts","../../node_modules/undici/types/handlers.d.ts","../../node_modules/undici/types/balanced-pool.d.ts","../../node_modules/undici/types/round-robin-pool.d.ts","../../node_modules/undici/types/h2c-client.d.ts","../../node_modules/undici/types/agent.d.ts","../../node_modules/undici/types/mock-interceptor.d.ts","../../node_modules/undici/types/mock-call-history.d.ts","../../node_modules/undici/types/mock-agent.d.ts","../../node_modules/undici/types/mock-client.d.ts","../../node_modules/undici/types/mock-pool.d.ts","../../node_modules/undici/types/snapshot-agent.d.ts","../../node_modules/undici/types/mock-errors.d.ts","../../node_modules/undici/types/proxy-agent.d.ts","../../node_modules/undici/types/socks5-proxy-agent.d.ts","../../node_modules/undici/types/env-http-proxy-agent.d.ts","../../node_modules/undici/types/retry-handler.d.ts","../../node_modules/undici/types/retry-agent.d.ts","../../node_modules/undici/types/api.d.ts","../../node_modules/undici/types/cache-interceptor.d.ts","../../node_modules/undici/types/interceptors.d.ts","../../node_modules/undici/types/util.d.ts","../../node_modules/undici/types/cookies.d.ts","../../node_modules/undici/types/patch.d.ts","../../node_modules/undici/types/websocket.d.ts","../../node_modules/undici/types/eventsource.d.ts","../../node_modules/undici/types/diagnostics-channel.d.ts","../../node_modules/undici/types/content-type.d.ts","../../node_modules/undici/types/cache.d.ts","../../node_modules/undici/types/index.d.ts","../../node_modules/undici/index.d.ts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/internal/types.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/internal/headers.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/internal/shim-types.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/core/streaming.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/internal/request-options.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/internal/utils/log.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/core/error.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/internal/parse.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/core/api-promise.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/core/pagination.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/internal/uploads.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/internal/to-file.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/core/uploads.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/resources/shared.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/core/resource.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/resources/beta/files.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/resources/beta/models.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/lib/beta-parser.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/error.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/lib/betamessagestream.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/internal/decoders/line.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/internal/decoders/jsonl.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/resources/messages/batches.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/resources/messages/index.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/resources/messages.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/lib/parser.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/lib/messagestream.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/resources/messages/messages.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/resources/beta/messages/batches.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/resources/beta/messages/index.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/resources/beta/skills/versions.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/resources/beta/skills/skills.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/resources/beta/skills/index.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/resources/beta/index.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/resources/beta.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/lib/tools/betarunnabletool.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/resources.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/lib/tools/compactioncontrol.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/lib/tools/betatoolrunner.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/lib/tools/toolerror.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/resources/beta/messages/messages.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/resources/beta/beta.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/resources/completions.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/resources/models.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/resources/index.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/client.d.mts","../../node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk/index.d.mts","../../node_modules/@mariozechner/pi-ai/dist/providers/anthropic.d.ts","../../node_modules/@mariozechner/pi-ai/dist/providers/azure-openai-responses.d.ts","../../node_modules/@mariozechner/pi-ai/dist/providers/faux.d.ts","../../node_modules/zod/v3/helpers/typealiases.d.cts","../../node_modules/zod/v3/helpers/util.d.cts","../../node_modules/zod/v3/zoderror.d.cts","../../node_modules/zod/v3/locales/en.d.cts","../../node_modules/zod/v3/errors.d.cts","../../node_modules/zod/v3/helpers/parseutil.d.cts","../../node_modules/zod/v3/helpers/enumutil.d.cts","../../node_modules/zod/v3/helpers/errorutil.d.cts","../../node_modules/zod/v3/helpers/partialutil.d.cts","../../node_modules/zod/v3/standard-schema.d.cts","../../node_modules/zod/v3/types.d.cts","../../node_modules/zod/v3/external.d.cts","../../node_modules/zod/v3/index.d.cts","../../node_modules/zod/v4/core/json-schema.d.cts","../../node_modules/zod/v4/core/standard-schema.d.cts","../../node_modules/zod/v4/core/registries.d.cts","../../node_modules/zod/v4/core/to-json-schema.d.cts","../../node_modules/zod/v4/core/util.d.cts","../../node_modules/zod/v4/core/versions.d.cts","../../node_modules/zod/v4/core/schemas.d.cts","../../node_modules/zod/v4/core/checks.d.cts","../../node_modules/zod/v4/core/errors.d.cts","../../node_modules/zod/v4/core/core.d.cts","../../node_modules/zod/v4/core/parse.d.cts","../../node_modules/zod/v4/core/regexes.d.cts","../../node_modules/zod/v4/locales/ar.d.cts","../../node_modules/zod/v4/locales/az.d.cts","../../node_modules/zod/v4/locales/be.d.cts","../../node_modules/zod/v4/locales/bg.d.cts","../../node_modules/zod/v4/locales/ca.d.cts","../../node_modules/zod/v4/locales/cs.d.cts","../../node_modules/zod/v4/locales/da.d.cts","../../node_modules/zod/v4/locales/de.d.cts","../../node_modules/zod/v4/locales/en.d.cts","../../node_modules/zod/v4/locales/eo.d.cts","../../node_modules/zod/v4/locales/es.d.cts","../../node_modules/zod/v4/locales/fa.d.cts","../../node_modules/zod/v4/locales/fi.d.cts","../../node_modules/zod/v4/locales/fr.d.cts","../../node_modules/zod/v4/locales/fr-ca.d.cts","../../node_modules/zod/v4/locales/he.d.cts","../../node_modules/zod/v4/locales/hu.d.cts","../../node_modules/zod/v4/locales/hy.d.cts","../../node_modules/zod/v4/locales/id.d.cts","../../node_modules/zod/v4/locales/is.d.cts","../../node_modules/zod/v4/locales/it.d.cts","../../node_modules/zod/v4/locales/ja.d.cts","../../node_modules/zod/v4/locales/ka.d.cts","../../node_modules/zod/v4/locales/kh.d.cts","../../node_modules/zod/v4/locales/km.d.cts","../../node_modules/zod/v4/locales/ko.d.cts","../../node_modules/zod/v4/locales/lt.d.cts","../../node_modules/zod/v4/locales/mk.d.cts","../../node_modules/zod/v4/locales/ms.d.cts","../../node_modules/zod/v4/locales/nl.d.cts","../../node_modules/zod/v4/locales/no.d.cts","../../node_modules/zod/v4/locales/ota.d.cts","../../node_modules/zod/v4/locales/ps.d.cts","../../node_modules/zod/v4/locales/pl.d.cts","../../node_modules/zod/v4/locales/pt.d.cts","../../node_modules/zod/v4/locales/ru.d.cts","../../node_modules/zod/v4/locales/sl.d.cts","../../node_modules/zod/v4/locales/sv.d.cts","../../node_modules/zod/v4/locales/ta.d.cts","../../node_modules/zod/v4/locales/th.d.cts","../../node_modules/zod/v4/locales/tr.d.cts","../../node_modules/zod/v4/locales/ua.d.cts","../../node_modules/zod/v4/locales/uk.d.cts","../../node_modules/zod/v4/locales/ur.d.cts","../../node_modules/zod/v4/locales/uz.d.cts","../../node_modules/zod/v4/locales/vi.d.cts","../../node_modules/zod/v4/locales/zh-cn.d.cts","../../node_modules/zod/v4/locales/zh-tw.d.cts","../../node_modules/zod/v4/locales/yo.d.cts","../../node_modules/zod/v4/locales/index.d.cts","../../node_modules/zod/v4/core/doc.d.cts","../../node_modules/zod/v4/core/api.d.cts","../../node_modules/zod/v4/core/json-schema-processors.d.cts","../../node_modules/zod/v4/core/json-schema-generator.d.cts","../../node_modules/zod/v4/core/index.d.cts","../../node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.d.ts","../../node_modules/zod/v4/classic/errors.d.cts","../../node_modules/zod/v4/classic/parse.d.cts","../../node_modules/zod/v4/classic/schemas.d.cts","../../node_modules/zod/v4/classic/checks.d.cts","../../node_modules/zod/v4/classic/compat.d.cts","../../node_modules/zod/v4/classic/from-json-schema.d.cts","../../node_modules/zod/v4/classic/iso.d.cts","../../node_modules/zod/v4/classic/coerce.d.cts","../../node_modules/zod/v4/classic/external.d.cts","../../node_modules/zod/v4/classic/index.d.cts","../../node_modules/zod/v4/index.d.cts","../../node_modules/@modelcontextprotocol/sdk/dist/esm/server/auth/types.d.ts","../../node_modules/@modelcontextprotocol/sdk/dist/esm/types.d.ts","../../node_modules/@modelcontextprotocol/sdk/dist/esm/shared/transport.d.ts","../../node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/types.d.ts","../../node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/interfaces.d.ts","../../node_modules/@modelcontextprotocol/sdk/dist/esm/shared/responsemessage.d.ts","../../node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.d.ts","../../node_modules/json-schema-typed/draft_2020_12.d.ts","../../node_modules/@modelcontextprotocol/sdk/dist/esm/validation/types.d.ts","../../node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/client.d.ts","../../node_modules/@modelcontextprotocol/sdk/dist/esm/client/index.d.ts","../../node_modules/gaxios/build/cjs/src/common.d.ts","../../node_modules/gaxios/build/cjs/src/interceptor.d.ts","../../node_modules/gaxios/build/cjs/src/gaxios.d.ts","../../node_modules/gaxios/build/cjs/src/index.d.ts","../../node_modules/google-auth-library/build/src/auth/credentials.d.ts","../../node_modules/google-auth-library/build/src/crypto/shared.d.ts","../../node_modules/google-auth-library/build/src/crypto/crypto.d.ts","../../node_modules/google-auth-library/build/src/util.d.ts","../../node_modules/google-logging-utils/build/src/logging-utils.d.ts","../../node_modules/google-logging-utils/build/src/index.d.ts","../../node_modules/google-auth-library/build/src/auth/authclient.d.ts","../../node_modules/google-auth-library/build/src/auth/loginticket.d.ts","../../node_modules/google-auth-library/build/src/auth/oauth2client.d.ts","../../node_modules/google-auth-library/build/src/auth/idtokenclient.d.ts","../../node_modules/google-auth-library/build/src/auth/envdetect.d.ts","../../node_modules/google-auth-library/build/src/gtoken/tokenoptions.d.ts","../../node_modules/google-auth-library/build/src/gtoken/gettoken.d.ts","../../node_modules/google-auth-library/build/src/gtoken/googletoken.d.ts","../../node_modules/google-auth-library/build/src/auth/jwtclient.d.ts","../../node_modules/google-auth-library/build/src/auth/refreshclient.d.ts","../../node_modules/google-auth-library/build/src/auth/impersonated.d.ts","../../node_modules/google-auth-library/build/src/auth/oauth2common.d.ts","../../node_modules/google-auth-library/build/src/auth/stscredentials.d.ts","../../node_modules/google-auth-library/build/src/auth/baseexternalclient.d.ts","../../node_modules/google-auth-library/build/src/auth/identitypoolclient.d.ts","../../node_modules/google-auth-library/build/src/auth/awsrequestsigner.d.ts","../../node_modules/google-auth-library/build/src/auth/awsclient.d.ts","../../node_modules/google-auth-library/build/src/auth/executable-response.d.ts","../../node_modules/google-auth-library/build/src/auth/pluggable-auth-handler.d.ts","../../node_modules/google-auth-library/build/src/auth/pluggable-auth-client.d.ts","../../node_modules/google-auth-library/build/src/auth/externalclient.d.ts","../../node_modules/google-auth-library/build/src/auth/externalaccountauthorizeduserclient.d.ts","../../node_modules/google-auth-library/build/src/auth/googleauth.d.ts","../../node_modules/google-auth-library/node_modules/gcp-metadata/build/src/gcp-residency.d.ts","../../node_modules/google-auth-library/node_modules/gcp-metadata/build/src/index.d.ts","../../node_modules/google-auth-library/build/src/auth/computeclient.d.ts","../../node_modules/google-auth-library/build/src/auth/iam.d.ts","../../node_modules/google-auth-library/build/src/auth/jwtaccess.d.ts","../../node_modules/google-auth-library/build/src/auth/downscopedclient.d.ts","../../node_modules/google-auth-library/build/src/auth/passthrough.d.ts","../../node_modules/google-auth-library/build/src/index.d.ts","../../node_modules/@google/genai/dist/node/node.d.ts","../../node_modules/@mariozechner/pi-ai/dist/providers/google-shared.d.ts","../../node_modules/@mariozechner/pi-ai/dist/providers/google-gemini-cli.d.ts","../../node_modules/@mariozechner/pi-ai/dist/providers/google.d.ts","../../node_modules/@mariozechner/pi-ai/dist/providers/google-vertex.d.ts","../../node_modules/@mariozechner/pi-ai/dist/providers/mistral.d.ts","../../node_modules/@mariozechner/pi-ai/dist/providers/openai-codex-responses.d.ts","../../node_modules/openai/internal/builtin-types.d.ts","../../node_modules/openai/internal/types.d.ts","../../node_modules/openai/internal/headers.d.ts","../../node_modules/openai/internal/shim-types.d.ts","../../node_modules/openai/core/streaming.d.ts","../../node_modules/openai/internal/request-options.d.ts","../../node_modules/openai/internal/utils/log.d.ts","../../node_modules/openai/core/error.d.ts","../../node_modules/openai/pagination.d.ts","../../node_modules/openai/internal/parse.d.ts","../../node_modules/openai/core/api-promise.d.ts","../../node_modules/openai/core/pagination.d.ts","../../node_modules/openai/internal/uploads.d.ts","../../node_modules/openai/internal/to-file.d.ts","../../node_modules/openai/core/uploads.d.ts","../../node_modules/openai/resources/shared.d.ts","../../node_modules/openai/resources/chat/chat.d.ts","../../node_modules/openai/resources/chat/index.d.ts","../../node_modules/openai/resources/audio/speech.d.ts","../../node_modules/openai/resources/audio/transcriptions.d.ts","../../node_modules/openai/resources/audio/translations.d.ts","../../node_modules/openai/resources/audio/audio.d.ts","../../node_modules/openai/resources/batches.d.ts","../../node_modules/openai/resources/beta/threads/messages.d.ts","../../node_modules/openai/resources/beta/threads/runs/steps.d.ts","../../node_modules/openai/error.d.ts","../../node_modules/openai/lib/eventstream.d.ts","../../node_modules/openai/lib/assistantstream.d.ts","../../node_modules/openai/resources/beta/threads/runs/runs.d.ts","../../node_modules/openai/resources/beta/threads/threads.d.ts","../../node_modules/openai/resources/beta/assistants.d.ts","../../node_modules/openai/resources/beta/realtime/sessions.d.ts","../../node_modules/openai/resources/beta/realtime/transcription-sessions.d.ts","../../node_modules/openai/resources/beta/realtime/realtime.d.ts","../../node_modules/openai/resources/beta/chatkit/threads.d.ts","../../node_modules/openai/resources/beta/chatkit/sessions.d.ts","../../node_modules/openai/resources/beta/chatkit/chatkit.d.ts","../../node_modules/openai/resources/beta/beta.d.ts","../../node_modules/openai/resources/completions.d.ts","../../node_modules/openai/lib/parser.d.ts","../../node_modules/openai/lib/responsesparser.d.ts","../../node_modules/openai/azure.d.ts","../../node_modules/openai/index.d.ts","../../node_modules/openai/lib/responses/eventtypes.d.ts","../../node_modules/openai/lib/responses/responsestream.d.ts","../../node_modules/openai/resources/responses/input-items.d.ts","../../node_modules/openai/resources/responses/input-tokens.d.ts","../../node_modules/openai/resources/responses/responses.d.ts","../../node_modules/openai/resources/containers/files/content.d.ts","../../node_modules/openai/resources/containers/files/files.d.ts","../../node_modules/openai/resources/containers/containers.d.ts","../../node_modules/openai/resources/conversations/items.d.ts","../../node_modules/openai/resources/conversations/conversations.d.ts","../../node_modules/openai/resources/embeddings.d.ts","../../node_modules/openai/resources/graders/grader-models.d.ts","../../node_modules/openai/resources/evals/runs/output-items.d.ts","../../node_modules/openai/resources/evals/runs/runs.d.ts","../../node_modules/openai/resources/evals/evals.d.ts","../../node_modules/openai/resources/files.d.ts","../../node_modules/openai/resources/fine-tuning/methods.d.ts","../../node_modules/openai/resources/fine-tuning/alpha/graders.d.ts","../../node_modules/openai/resources/fine-tuning/alpha/alpha.d.ts","../../node_modules/openai/resources/fine-tuning/checkpoints/permissions.d.ts","../../node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.d.ts","../../node_modules/openai/resources/fine-tuning/jobs/checkpoints.d.ts","../../node_modules/openai/resources/fine-tuning/jobs/jobs.d.ts","../../node_modules/openai/resources/fine-tuning/fine-tuning.d.ts","../../node_modules/openai/resources/graders/graders.d.ts","../../node_modules/openai/resources/images.d.ts","../../node_modules/openai/resources/models.d.ts","../../node_modules/openai/resources/moderations.d.ts","../../node_modules/openai/resources/realtime/calls.d.ts","../../node_modules/openai/resources/realtime/client-secrets.d.ts","../../node_modules/openai/resources/realtime/realtime.d.ts","../../node_modules/openai/resources/skills/content.d.ts","../../node_modules/openai/resources/skills/versions/content.d.ts","../../node_modules/openai/resources/skills/versions/versions.d.ts","../../node_modules/openai/resources/skills/skills.d.ts","../../node_modules/openai/resources/uploads/parts.d.ts","../../node_modules/openai/resources/uploads/uploads.d.ts","../../node_modules/openai/uploads.d.ts","../../node_modules/openai/resources/vector-stores/files.d.ts","../../node_modules/openai/resources/vector-stores/file-batches.d.ts","../../node_modules/openai/resources/vector-stores/vector-stores.d.ts","../../node_modules/openai/resources/videos.d.ts","../../node_modules/openai/resources/webhooks/webhooks.d.ts","../../node_modules/openai/resources/webhooks/index.d.ts","../../node_modules/openai/resources/webhooks.d.ts","../../node_modules/openai/resources/index.d.ts","../../node_modules/openai/client.d.ts","../../node_modules/openai/core/resource.d.ts","../../node_modules/openai/resources/chat/completions/messages.d.ts","../../node_modules/openai/lib/abstractchatcompletionrunner.d.ts","../../node_modules/openai/lib/chatcompletionstream.d.ts","../../node_modules/openai/lib/chatcompletionstreamingrunner.d.ts","../../node_modules/openai/lib/jsonschema.d.ts","../../node_modules/openai/lib/runnablefunction.d.ts","../../node_modules/openai/lib/chatcompletionrunner.d.ts","../../node_modules/openai/resources/chat/completions/completions.d.ts","../../node_modules/openai/resources/chat/completions/index.d.ts","../../node_modules/openai/resources/chat/completions.d.ts","../../node_modules/@mariozechner/pi-ai/dist/providers/openai-completions.d.ts","../../node_modules/@mariozechner/pi-ai/dist/providers/openai-responses.d.ts","../../node_modules/@mariozechner/pi-ai/dist/providers/register-builtins.d.ts","../../node_modules/@mariozechner/pi-ai/dist/stream.d.ts","../../node_modules/@mariozechner/pi-ai/dist/utils/json-parse.d.ts","../../node_modules/@mariozechner/pi-ai/dist/utils/oauth/types.d.ts","../../node_modules/@mariozechner/pi-ai/dist/utils/overflow.d.ts","../../node_modules/@mariozechner/pi-ai/dist/utils/typebox-helpers.d.ts","../../node_modules/@mariozechner/pi-ai/dist/utils/validation.d.ts","../../node_modules/@mariozechner/pi-ai/dist/index.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/interactive/payload.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/media/prompt-image-order.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply/typing.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/chat-type.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.secrets.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.sandbox.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.agents-shared.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.base.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.queue.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.tts.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.messages.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/exec-safe-bin-policy-profiles.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/exec-safe-bin-policy-validator.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/exec-safe-bin-policy.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.memory.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.tools.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.agents.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/bindings.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/exec-command-resolution.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/exec-approvals-analysis.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/exec-safe-bin-trust.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/exec-approvals-allowlist.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/exec-approvals.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/outbound/identity.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/outbound/mirror.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/outbound/payloads.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/outbound/send-deps.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/outbound/session-context.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/media-understanding/types.d.ts","../../node_modules/@mariozechner/pi-agent-core/dist/types.d.ts","../../node_modules/@mariozechner/pi-agent-core/dist/agent.d.ts","../../node_modules/@mariozechner/pi-agent-core/dist/agent-loop.d.ts","../../node_modules/@mariozechner/pi-agent-core/dist/proxy.d.ts","../../node_modules/@mariozechner/pi-agent-core/dist/index.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/sessions/input-provenance.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/protocol/client-info.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/utils/message-channel.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/commands-registry.types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/templating.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/config.d.ts","../../node_modules/@mariozechner/pi-tui/dist/autocomplete.d.ts","../../node_modules/@mariozechner/pi-tui/dist/terminal.d.ts","../../node_modules/@mariozechner/pi-tui/dist/utils.d.ts","../../node_modules/@mariozechner/pi-tui/dist/tui.d.ts","../../node_modules/@mariozechner/pi-tui/dist/components/box.d.ts","../../node_modules/@mariozechner/pi-tui/dist/components/text.d.ts","../../node_modules/@mariozechner/pi-tui/dist/components/loader.d.ts","../../node_modules/@mariozechner/pi-tui/dist/components/cancellable-loader.d.ts","../../node_modules/@mariozechner/pi-tui/dist/components/select-list.d.ts","../../node_modules/@mariozechner/pi-tui/dist/components/editor.d.ts","../../node_modules/@mariozechner/pi-tui/dist/terminal-image.d.ts","../../node_modules/@mariozechner/pi-tui/dist/components/image.d.ts","../../node_modules/@mariozechner/pi-tui/dist/components/input.d.ts","../../node_modules/@mariozechner/pi-tui/dist/components/markdown.d.ts","../../node_modules/@mariozechner/pi-tui/dist/components/settings-list.d.ts","../../node_modules/@mariozechner/pi-tui/dist/components/spacer.d.ts","../../node_modules/@mariozechner/pi-tui/dist/components/truncated-text.d.ts","../../node_modules/@mariozechner/pi-tui/dist/editor-component.d.ts","../../node_modules/@mariozechner/pi-tui/dist/fuzzy.d.ts","../../node_modules/@mariozechner/pi-tui/dist/keys.d.ts","../../node_modules/@mariozechner/pi-tui/dist/keybindings.d.ts","../../node_modules/@mariozechner/pi-tui/dist/stdin-buffer.d.ts","../../node_modules/@mariozechner/pi-tui/dist/index.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/settings-manager.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/package-manager.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/source-info.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/messages.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/session-manager.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/compaction/utils.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/compaction/branch-summarization.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/compaction/compaction.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/compaction/index.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/event-bus.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/exec.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/footer-data-provider.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/keybindings.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/auth-storage.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/resolve-config-value.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/model-registry.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/slash-commands.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/tools/edit.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/tools/file-mutation-queue.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/tools/truncate.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/tools/find.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/tools/grep.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/tools/ls.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/tools/read.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/tools/write.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/tools/index.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/extensions/types.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/tools/bash.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/bash-executor.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/extensions/loader.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/diagnostics.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/extensions/runner.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/extensions/wrapper.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/extensions/index.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/prompt-templates.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/skills.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/resource-loader.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/agent-session.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/core/sdk.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/main.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/print-mode.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/index.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/armin.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/bash-execution.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/bordered-loader.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/branch-summary-message.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/compaction-summary-message.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/custom-editor.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/custom-message.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/daxnuts.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/diff.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/dynamic-border.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/extension-editor.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/extension-input.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/extension-selector.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/footer.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/keybinding-hints.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/login-dialog.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/oauth-selector.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/scoped-models-selector.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/session-selector.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/show-images-selector.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/theme-selector.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/thinking-selector.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/tree-selector.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/user-message-selector.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/visual-truncate.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/index.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/utils/clipboard.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/utils/frontmatter.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/utils/shell.d.ts","../../node_modules/@mariozechner/pi-coding-agent/dist/index.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/utils/delivery-context.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/sessions/types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/sessions/group.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/sessions/artifacts.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/sessions/metadata.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/sessions/session-key-utils.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/routing/account-id.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/routing/session-key.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/sessions/main-session.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/sessions/main-session.runtime.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/sessions/paths.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/sessions/reset.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/sessions/session-key.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/session-write-lock.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/sessions/disk-budget.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/sessions/store-maintenance.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/sessions/store.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/sessions/transcript.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/sessions/session-file.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/sessions/delivery-info.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/acp/runtime/types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.acp.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.approvals.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.auth.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.browser.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.channels.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.cli.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.cron.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.gateway.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.installs.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.hooks.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.mcp.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.models.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.node-host.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.plugins.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.skills.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.openclaw.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/sessions/targets.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/sessions.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/outbound/targets.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/outbound/deliver.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/plugin-approvals.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/media/load-options.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/pairing/pairing-store.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/outbound/session-binding-service.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/chunk.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/skills/types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/shared/config-eval.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/skills/config.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/skills/env-overrides.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/skills/workspace.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/skills.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/commands-registry.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/command-detection.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/markdown-tables.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/markdown/tables.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/typing.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply/response-prefix-template.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply/normalize-reply.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply/reply-dispatcher.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/thinking.shared.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/thinking.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply/exec/directive.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply/directives.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply/get-reply.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply/exec.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/sandbox/types.docker.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/sandbox/types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/sandbox/fs-bridge.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/sandbox/registry.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/sandbox/backend.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/bash-tools.shared.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/bash-tools.exec-types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/bash-tools.exec.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/bash-tools.process.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/bash-tools.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply/queue/types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply/queue/directive.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-messaging.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/process/command-queue.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/compaction-real-conversation.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/image-sanitization.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/tools/common.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/method-scopes.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-model-discovery.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/model-catalog.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/cli/deps.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/heartbeat-summary.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/runtime.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/commands/health.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/workspace.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-helpers/types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-helpers/bootstrap.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/shared/assistant-error-format.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-helpers/failover-matches.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-helpers/errors.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-helpers/google.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-helpers/openai.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/tool-call-id.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-helpers/images.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-helpers/messaging-dedupe.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-helpers/thinking.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-helpers/turns.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-helpers.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/security/external-content.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/cron/types-shared.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/cron/types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/heartbeat-wake.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/cron/service/state.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/cron/service/ops.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/cron/service.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/logging/levels.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/logging/subsystem.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/wizard/prompts.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/wizard/session.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/chat-abort.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/exec-approval-manager.d.ts","../../node_modules/@types/ws/index.d.mts","../../node_modules/fast-uri/types/index.d.ts","../../node_modules/ajv/dist/compile/codegen/code.d.ts","../../node_modules/ajv/dist/compile/codegen/scope.d.ts","../../node_modules/ajv/dist/compile/codegen/index.d.ts","../../node_modules/ajv/dist/compile/rules.d.ts","../../node_modules/ajv/dist/compile/util.d.ts","../../node_modules/ajv/dist/compile/validate/subschema.d.ts","../../node_modules/ajv/dist/compile/errors.d.ts","../../node_modules/ajv/dist/compile/validate/index.d.ts","../../node_modules/ajv/dist/compile/validate/datatype.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/additionalitems.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/items2020.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/contains.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/dependencies.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/propertynames.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/additionalproperties.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/not.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/anyof.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/oneof.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/if.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/index.d.ts","../../node_modules/ajv/dist/vocabularies/validation/limitnumber.d.ts","../../node_modules/ajv/dist/vocabularies/validation/multipleof.d.ts","../../node_modules/ajv/dist/vocabularies/validation/pattern.d.ts","../../node_modules/ajv/dist/vocabularies/validation/required.d.ts","../../node_modules/ajv/dist/vocabularies/validation/uniqueitems.d.ts","../../node_modules/ajv/dist/vocabularies/validation/const.d.ts","../../node_modules/ajv/dist/vocabularies/validation/enum.d.ts","../../node_modules/ajv/dist/vocabularies/validation/index.d.ts","../../node_modules/ajv/dist/vocabularies/format/format.d.ts","../../node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedproperties.d.ts","../../node_modules/ajv/dist/vocabularies/unevaluated/unevaluateditems.d.ts","../../node_modules/ajv/dist/vocabularies/validation/dependentrequired.d.ts","../../node_modules/ajv/dist/vocabularies/discriminator/types.d.ts","../../node_modules/ajv/dist/vocabularies/discriminator/index.d.ts","../../node_modules/ajv/dist/vocabularies/errors.d.ts","../../node_modules/ajv/dist/types/json-schema.d.ts","../../node_modules/ajv/dist/types/jtd-schema.d.ts","../../node_modules/ajv/dist/runtime/validation_error.d.ts","../../node_modules/ajv/dist/compile/ref_error.d.ts","../../node_modules/ajv/dist/core.d.ts","../../node_modules/ajv/dist/compile/resolve.d.ts","../../node_modules/ajv/dist/compile/index.d.ts","../../node_modules/ajv/dist/types/index.d.ts","../../node_modules/ajv/dist/ajv.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/shared/session-types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/session-utils.types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/protocol/schema/agent.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/protocol/schema/agents-models-skills.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/protocol/schema/channels.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/protocol/schema/config.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/protocol/schema/cron.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/protocol/schema/protocol-schemas.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/protocol/schema/types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/protocol/schema/error-codes.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/protocol/schema/exec-approvals.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/protocol/schema/devices.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/protocol/schema/frames.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/protocol/schema/logs-chat.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/protocol/schema/nodes.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/protocol/schema/push.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/protocol/schema/secrets.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/protocol/schema/sessions.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/protocol/schema/snapshot.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/protocol/schema/plugin-approvals.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/protocol/schema/wizard.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/protocol/schema.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/protocol/index.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/server/ws-types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/node-registry.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/server-broadcast.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/plugins/registry.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/channel-config.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/plugins/channel-config.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/allowlist-match.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/plugins/allowlist-match.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/plugins/approvals.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/plugins/index.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/server-channels.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/server-shared.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugins/provider-auth-types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/commands/daemon-runtime.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/commands/onboard-types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/server-methods/types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/hooks/internal-hooks.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/hooks/types.d.ts","../../node_modules/commander/typings/index.d.ts","../../node_modules/commander/typings/esm.d.mts","./node_modules/openclaw/dist/plugin-sdk/src/agents/auth-profiles/types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/provider-usage.types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugins/provider-runtime.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/provider-capabilities.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/auth-profiles/constants.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/auth-profiles/credential-state.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/auth-profiles/order.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/auth-profiles/display.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/auth-profiles/doctor.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/auth-profiles/oauth.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/auth-profiles/paths.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/auth-profiles/profiles.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/auth-profiles/repair.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/auth-profiles/store.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/auth-profiles/usage.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/auth-profiles.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/image-generation/types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/secrets/runtime-web-tools.types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/tts/provider-types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugins/provider-oauth-flow.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/context-engine/types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/context-engine/registry.d.ts","./node_modules/openclaw/dist/plugin-sdk/packages/memory-host-sdk/src/host/embedding-inputs.d.ts","./node_modules/openclaw/dist/plugin-sdk/packages/memory-host-sdk/src/host/multimodal.d.ts","./node_modules/openclaw/dist/plugin-sdk/packages/memory-host-sdk/src/host/internal.d.ts","./node_modules/openclaw/dist/plugin-sdk/packages/memory-host-sdk/src/host/read-file.d.ts","./node_modules/openclaw/dist/plugin-sdk/packages/memory-host-sdk/src/host/backend-config.d.ts","./node_modules/openclaw/dist/plugin-sdk/packages/memory-host-sdk/src/host/types.d.ts","./node_modules/openclaw/dist/plugin-sdk/packages/memory-host-sdk/src/host/memory-schema.d.ts","./node_modules/openclaw/dist/plugin-sdk/packages/memory-host-sdk/src/host/sqlite-vec.d.ts","./node_modules/openclaw/dist/plugin-sdk/packages/memory-host-sdk/src/host/sqlite.d.ts","./node_modules/openclaw/dist/plugin-sdk/packages/memory-host-sdk/src/host/fs-utils.d.ts","./node_modules/openclaw/dist/plugin-sdk/packages/memory-host-sdk/src/engine-storage.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/memory-core-host-engine-storage.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugins/memory-state.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugins/memory-embedding-providers.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugins/types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugins/registry-empty.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugins/registry.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugins/hooks.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugins/hook-runner-global.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-runner/compaction-hooks.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-runner/types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-runner/compact.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-runner/extra-params.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/transcript-policy.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-runner/google.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-runner/history.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-runner/lanes.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/internal-events.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/spawned-context.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/command/types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-payloads.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-block-chunker.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-subscribe.types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-subscribe.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-runner/run/params.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-runner/run.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-runner/runs.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/sandbox/config.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/sandbox/constants.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/sandbox/context.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/sandbox/sanitize-env-vars.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/sandbox/docker.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/sandbox/manage.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/sandbox/runtime-status.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/sandbox/tool-policy.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/sandbox/ssh.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/sandbox/remote-fs-bridge.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/sandbox/fs-bridge-rename-targets.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/sandbox.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-runner/sandbox-info.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/date-time.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/system-prompt.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-runner/utils.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-runner/system-prompt.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/plain-object.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/terminal/terminal-link.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/utils.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-tools.before-tool-call.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-tool-definition-adapter.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-runner/tool-split.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-runner.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply/queue/cleanup.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply/queue/drain.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply/queue/enqueue.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply/queue/settings.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply/queue/state.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply/queue.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply/reply-tags.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply/get-reply-from-config.runtime.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply/dispatch-from-config.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/dispatch.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply/provider-dispatcher.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/identity.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply/inbound-context.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/sender-label.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/envelope.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/routing/resolve-route.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/pairing/pairing-messages.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/net/ssrf.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/media/fetch.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/media/store.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/channel-activity.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/session.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply/mentions.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/ack-reactions.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/group-policy.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/inbound-debounce.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/command-gating.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/plugins/outbound/load.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.discord.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/generated/plugin-sdk-facade-type-map.generated.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/discord-surface.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/discord-thread-bindings.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/plugins/setup-group-access.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/plugins/setup-wizard-types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/polls.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/ids.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/chat-meta.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/registry.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/plugins/types.core.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/plugins/setup-wizard.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/plugins/types.plugin.d.ts","../../node_modules/zod/index.d.cts","./node_modules/openclaw/dist/plugin-sdk/src/plugins/config-schema.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/plugins/setup-helpers.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/plugins/config-schema.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/plugins/config-helpers.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/plugins/helpers.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/plugins/pairing-message.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/channel-plugin-common.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/terminal/links.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/account-snapshot-fields.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/runtime-group-policy.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/zod-schema.providers-core.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/plugins/status-issues/shared.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/status-helpers.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/media/constants.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/media/image-ops.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/media/local-media-access.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/media/web-media.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/web-media.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/outbound-media.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/discord-runtime-surface.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/discord-timeouts.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/discord-session-key.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/discord.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.slack.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/slack-surface.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/plugins/normalize/slack.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/slack-target-parser.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/slack-targets.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/slack-runtime-surface.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/slack.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/allowlists/resolve-utils.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/location.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/logging.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/plugins/account-helpers.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/text-chunking.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/plugins/setup-wizard-helpers.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/reply-prefix.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/thread-bindings-messages.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/thread-bindings-policy.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/matrix-thread-bindings.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/channel-reply-pipeline.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/utils/normalize-secret-input.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/secret-input-schema.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/secret-input.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/zod-schema.agent-model.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/zod-schema.agent-runtime.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/zod-schema.core.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/format-time/format-datetime.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/net/fetch-guard.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/net.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/media/local-roots.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/shared/string-normalization.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/logging/redact.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/group-access.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/plugins/pairing-adapters.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/pairing/pairing-challenge.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/pairing-access.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/channel-pairing.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/json-file.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/json-store.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/resolution-notes.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/run-command.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/global-state.d.ts","../../node_modules/chalk/source/vendor/ansi-styles/index.d.ts","../../node_modules/chalk/source/vendor/supports-color/index.d.ts","../../node_modules/chalk/source/index.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/globals.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/logging/console.d.ts","../../node_modules/tslog/types/internal/inspectoptions.interface.d.ts","../../node_modules/tslog/types/interfaces.d.ts","../../node_modules/tslog/types/baselogger.d.ts","../../node_modules/tslog/types/index.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/logging/config.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/logging/logger.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/logging.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/abort-signal.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/unhandled-rejections.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/runtime.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/matrix-helper.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/matrix-runtime-surface.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/matrix-surface.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/cli/command-format.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/detect-binary.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugins/setup-binary.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugins/signal-cli-install.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/plugins/setup-wizard-proxy.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/plugins/setup-wizard-binary.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/setup.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/optional-channel-setup.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/channel-setup.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/matrix.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/signal-surface.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/plugins/normalize/signal.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/plugins/media-limits.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/signal.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/line-surface.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/line.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/line-runtime.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugins/runtime/types-channel.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/defaults.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/agent-scope.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/provider-id.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/model-selection.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/timeout.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/system-events.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/process/exec.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugins/runtime/native-deps.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/media/mime.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/media/audio.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/speech-runtime.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/media-understanding-runtime.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/image-generation-runtime.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/web-search/runtime.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/media-understanding/runtime.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/media-understanding/transcribe-audio.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/agent-events.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/sessions/transcript-events.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/paths.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/model-auth-runtime-shared.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/model-auth-env.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/model-auth.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugins/runtime/types-core.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugins/runtime/types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/plugins/config-writes.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/plugins/types.adapters.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/plugins/types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.agent-defaults.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.googlechat.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.imessage.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.channel-messaging-common.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.irc.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.msteams.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.signal.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.telegram.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.whatsapp.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/includes.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/env-substitution.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/io.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/legacy-migrate.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/mutate.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/runtime-overrides.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/validation.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/config.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/plugin-entry.d.ts","./node_modules/openclaw/dist/plugin-sdk/plugin-entry.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/hooks/fire-and-forget.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/hooks/message-hook-mappers.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/hook-runtime.d.ts","./node_modules/openclaw/dist/plugin-sdk/hook-runtime.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugins/command-registry-state.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugins/command-registration.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugins/commands.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugins/http-path.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugins/http-registry.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugins/interactive-dispatch-adapters.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugins/interactive.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugins/lazy-service-module.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/plugin-runtime.d.ts","./node_modules/openclaw/dist/plugin-sdk/plugin-runtime.d.ts","./src/core/utils/id.ts","./src/core/utils/text.ts","./src/core/skills/types.ts","./src/core/skills/defaults.ts","./src/core/skills/loader.ts","./src/core/skills/llm-extraction.ts","./src/core/skills/intent-skill.ts","./src/core/indexers/l1-extractor.ts","./src/core/indexers/l2-builder.ts","./src/core/storage/sqlite.ts","./src/core/pipeline/heartbeat.ts","./src/core/review/dream-review.ts","./src/core/retrieval/reasoning-loop.ts","./src/core/index.ts","./src/message-utils.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/current-time.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/identity-avatar.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/model-auth-markers.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/simple-completion-runtime.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-utils.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/sandbox-paths.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/schema/typebox.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/tools/web-guarded-fetch.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/tools/web-shared.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/tools/web-fetch-utils.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/agent-command.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/logging.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/commands/models/shared.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/channels/model-overrides.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/commands.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/telegram-custom-commands.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/discord-preview-streaming.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/talk.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/agent-limits.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/cron/store.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/sessions/model-overrides.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/resolve-configured-secret-input-string.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/dangerous-name-matching.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/config-runtime.d.ts","./node_modules/openclaw/dist/plugin-sdk/config-runtime.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/group-activation.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/heartbeat.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/heartbeat-reply-payload.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/tokens.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/acp/runtime/errors.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/acp/runtime/registry.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/acp/runtime/session-meta.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/acp/control-plane/manager.types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/acp/control-plane/manager.core.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/acp/control-plane/manager.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/context-engine/init.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/device-identity.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/tls/gateway.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/client.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/connection-details.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/credential-planner.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/credentials.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/gateway/call.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/runtime-plugins.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/subagent-announce-output.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/subagent-attachments.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/subagent-spawn.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/subagent-announce.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/subagent-lifecycle-events.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/subagent-registry.types.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/subagent-registry-state.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/subagent-registry-helpers.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/subagent-registry.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply/abort-primitives.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply/abort-cutoff.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply/abort.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply/btw-command.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/dedupe.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply/inbound-dedupe.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply/reply-reference.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply/auto-topic-label-config.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/auto-reply/reply/auto-topic-label.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/reply-runtime.d.ts","./node_modules/openclaw/dist/plugin-sdk/reply-runtime.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/model-alias-lines.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-embedded-runner/model.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/simple-completion-transport.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/tts/tts-core.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/tts/directives.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/tts/provider-registry.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/tts/tts-auto-mode.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/speech-core.d.ts","./node_modules/openclaw/dist/plugin-sdk/speech-core.d.ts","./node_modules/openclaw/dist/plugin-sdk/extensions/speech-core/api.d.ts","./node_modules/openclaw/dist/plugin-sdk/extensions/speech-core/src/tts.d.ts","./node_modules/openclaw/dist/plugin-sdk/extensions/speech-core/runtime-api.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/tts/tts.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/agent-runtime.d.ts","./node_modules/openclaw/dist/plugin-sdk/agent-runtime.d.ts","./src/tools.ts","./src/ui-server.ts","./src/runtime.ts","./src/hooks.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/memory-core-engine-runtime.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/pi-settings.d.ts","./node_modules/openclaw/dist/plugin-sdk/packages/memory-host-sdk/src/multimodal.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/memory-core-host-multimodal.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/agents/memory-search.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/config/byte-size.d.ts","./node_modules/openclaw/dist/plugin-sdk/packages/memory-host-sdk/src/runtime-core.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/memory-core-host-runtime-core.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/infra/errors.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/cli/cli-utils.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/cli/help-format.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/cli/command-secret-gateway.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/cli/progress.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/terminal/theme.d.ts","./node_modules/openclaw/dist/plugin-sdk/packages/memory-host-sdk/src/runtime-cli.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/memory-core-host-runtime-cli.d.ts","./node_modules/openclaw/dist/plugin-sdk/packages/memory-host-sdk/src/runtime-files.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/memory-core-host-runtime-files.d.ts","./node_modules/openclaw/dist/plugin-sdk/src/plugin-sdk/memory-core.d.ts","./node_modules/openclaw/dist/plugin-sdk/memory-core.d.ts","./src/prompt-section.ts","./src/index.ts","./src/core/skills/extraction-skill.ts"],"fileIdsList":[[273,336,344,348,351,353,354,355,367,1520],[273,336,344,348,351,353,354,355,367,1466],[273,336,344,348,351,353,354,355,367,1515],[273,336,344,348,351,353,354,355,367,1517],[273,336,344,348,351,353,354,355,367,1467,1506,1516],[273,336,344,348,351,353,354,355,367,1416],[273,336,344,348,351,353,354,355,367,1544],[273,336,344,348,351,353,354,355,367,1165,1166,1167,1168,1169,1170,1171,1172],[273,336,344,348,351,353,354,355,367,795,802,1411],[273,336,344,348,351,353,354,355,367],[273,336,344,348,351,353,354,355,367,1163,1164],[273,336,344,348,351,353,354,355,367,371],[273,336,344,348,351,353,354,355,367,1411],[273,336,344,348,351,353,354,355,367,1164],[273,336,344,348,351,353,354,355,367,1023,1219,1275,1334,1535,1536,1537,1538,1539],[273,336,344,348,351,353,354,355,367,802,942,945,1017,1175,1177,1268,1368,1385,1411,1443,1471,1527,1530,1531],[273,336,344,348,351,353,354,355,367,1165,1166,1167,1168],[273,336,344,348,351,353,354,355,367,1412],[273,336,344,348,351,353,354,355,367,1426],[273,336,344,348,351,353,354,355,367,1505],[273,336,344,348,351,353,354,355,367,1514],[273,336,344,348,351,353,354,355,367,955,1411,1475],[273,336,344,348,351,353,354,355,367,1475,1476],[273,336,344,348,351,353,354,355,367,936,955,1411,1472,1473,1474],[273,336,344,348,351,353,354,355,367,955],[273,336,344,348,351,353,354,355,367,936,1411],[273,336,344,348,351,353,354,355,367,813,1021,1023,1192,1224],[273,336,344,348,351,353,354,355,367,942,1411],[273,336,344,348,351,353,354,355,367,1141,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155],[273,336,344,348,351,353,354,355,367,1047],[273,336,344,348,351,353,354,355,367,1141],[273,336,344,348,351,353,354,355,367,1141,1411],[273,336,344,348,351,353,354,355,367,1141,1146,1411],[273,336,344,348,351,353,354,355,367,792,1411],[273,336,344,348,351,353,354,355,367,1141,1154,1411],[273,336,344,348,351,353,354,355,367,1008,1009],[273,336,344,348,351,353,354,355,367,801,810,1006],[273,336,344,348,351,353,354,355,367,821,855,1006,1007],[273,336,344,348,351,353,354,355,367,821,855],[273,336,344,348,351,353,354,355,367,1005],[273,336,344,348,351,353,354,355,367,788,822,1190,1191,1197,1393],[273,336,344,348,351,353,354,355,367,1213],[273,336,344,348,351,353,354,355,367,792,1411,1529],[273,336,344,348,351,353,354,355,367,792],[273,336,344,348,351,353,354,355,367,786,1156,1386,1387,1411],[273,336,344,348,351,353,354,355,367,1019,1411],[273,336,344,348,351,353,354,355,367,1020,1369,1411],[273,336,344,348,351,353,354,355,367,1026,1027,1030,1031,1032,1033,1034,1035,1036,1037],[273,336,344,348,351,353,354,355,367,821,855,1025,1026,1411],[273,336,344,348,351,353,354,355,367,786,1026,1028,1029,1411],[273,336,344,348,351,353,354,355,367,1027],[273,336,344,348,351,353,354,355,367,821,855,1016,1033],[273,336,344,348,351,353,354,355,367,996],[273,336,344,348,351,353,354,355,367,1013,1183,1184,1185,1187,1188,1189,1198,1199,1212,1216,1222],[273,336,344,348,351,353,354,355,367,821,855,986,996,1010,1014,1015,1182,1183,1411],[273,336,344,348,351,353,354,355,367,821,855,1181,1411],[273,336,344,348,351,353,354,355,367,786,821,855,934,996,1143,1177,1411],[258,273,336,344,348,351,353,354,355,367,821,855,934,1186,1411],[273,336,344,348,351,353,354,355,367,821,855,1411],[273,336,344,348,351,353,354,355,367,786,934,1143,1403,1411,1507],[273,336,344,348,351,353,354,355,367,1183,1197],[273,336,344,348,351,353,354,355,367,786,788,790,822,986,996,1010,1014,1192,1193,1196,1411],[273,336,344,348,351,353,354,355,367,1010,1183,1211],[273,336,344,348,351,353,354,355,367,802,821,855,934,1038,1183,1213,1214,1215],[273,336,344,348,351,353,354,355,367,821,855,1221],[273,336,344,348,351,353,354,355,367,936,1013],[273,336,344,348,351,353,354,355,367,821,855,996],[273,336,344,348,351,353,354,355,367,1013,1195],[273,336,344,348,351,353,354,355,367,790,934,971,996,1180,1193,1194],[273,336,344,348,351,353,354,355,367,786,821,855],[273,336,344,348,351,353,354,355,367,1223],[273,336,344,348,351,353,354,355,367,934],[273,336,344,348,351,353,354,355,367,1161,1411],[273,336,344,348,351,353,354,355,367,821,855,934,1197,1220],[273,336,344,348,351,353,354,355,367,803,1017,1219],[273,336,344,348,351,353,354,355,367,1143,1411],[273,336,344,348,351,353,354,355,367,1002,1003,1005,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210],[273,336,344,348,351,353,354,355,367,1002,1003,1004,1411],[273,336,344,348,351,353,354,355,367,793,1002,1411],[273,336,344,348,351,353,354,355,367,1002,1411],[273,336,344,348,351,353,354,355,367,1002,1203],[273,336,344,348,351,353,354,355,367,1002],[273,336,344,348,351,353,354,355,367,1004],[273,336,344,348,351,353,354,355,367,1002,1003,1005],[273,336,344,348,351,353,354,355,367,1001,1003,1005],[273,336,344,348,351,353,354,355,367,793],[258,273,336,344,348,351,353,354,355,367],[273,336,344,348,351,353,354,355,367,786,1388,1411],[273,336,344,348,351,353,354,355,367,786,1411],[273,336,344,348,351,353,354,355,367,981,983,984,985,1411],[273,336,344,348,351,353,354,355,367,981,982,1411],[273,336,344,348,351,353,354,355,367,981,1411],[273,336,344,348,351,353,354,355,367,934,981,1411],[273,336,344,348,351,353,354,355,367,1411,1485],[273,336,344,348,351,353,354,355,367,935,1411,1485,1487,1489],[273,336,344,348,351,353,354,355,367,973,1411,1492],[273,336,344,348,351,353,354,355,367,1492],[273,336,344,348,351,353,354,355,367,935,1162,1371,1383,1411,1478,1485,1486,1490,1492,1493,1494],[273,336,344,348,351,353,354,355,367,935,1489,1490,1491],[273,336,344,348,351,353,354,355,367,973,1180,1411,1485,1488],[273,336,344,348,351,353,354,355,367,802,996,1038,1183,1213],[273,336,344,348,351,353,354,355,367,821,855,1016],[273,336,344,348,351,353,354,355,367,1316],[273,336,344,348,351,353,354,355,367,1033],[273,336,344,348,351,353,354,355,367,824,1393,1411],[273,336,344,348,351,353,354,355,367,987,1403],[273,336,344,348,351,353,354,355,367,825,986,1403],[273,336,344,348,351,353,354,355,367,1403],[273,336,344,348,351,353,354,355,367,790,826,994,1232,1234,1411],[273,336,344,348,351,353,354,355,367,1239,1411],[273,336,344,348,351,353,354,355,367,790],[273,336,344,348,351,353,354,355,367,790,998,999,1000,1230,1231],[273,336,344,348,351,353,354,355,367,826,936],[273,336,344,348,351,353,354,355,367,987],[273,336,344,348,351,353,354,355,367,826,973,1224,1411,1477,1495,1496,1497],[273,336,344,348,351,353,354,355,367,1401],[273,336,344,348,351,353,354,355,367,1401,1411,1503],[273,336,344,348,351,353,354,355,367,996,997],[273,336,344,348,351,353,354,355,367,790,826,994,1233,1411],[273,336,344,348,351,353,354,355,367,997],[273,336,344,348,351,353,354,355,367,810],[273,336,344,348,351,353,354,355,367,1232],[273,336,344,348,351,353,354,355,367,790,826,1411],[273,336,344,348,351,353,354,355,367,826],[273,336,344,348,351,353,354,355,367,826,1500],[273,336,344,348,351,353,354,355,367,826,1411],[273,336,344,348,351,353,354,355,367,790,992],[273,336,344,348,351,353,354,355,367,790,826,994,1232,1235,1411],[273,336,344,348,351,353,354,355,367,1011,1012,1225,1226,1227,1228,1229],[273,336,344,348,351,353,354,355,367,1014,1224],[273,336,344,348,351,353,354,355,367,1011],[273,336,344,348,351,353,354,355,367,822,826,973,986,998,1010,1411],[273,336,344,348,351,353,354,355,367,790,991,992,993,1403],[273,336,344,348,351,353,354,355,367,816,822,824,825,1393],[273,336,344,348,351,353,354,355,367,995],[273,336,344,348,351,353,354,355,367,786,787,788,789],[273,336,344,348,351,353,354,355,367,1264],[273,336,344,348,351,353,354,355,367,1023],[273,336,344,348,351,353,354,355,367,1261,1393],[273,336,344,348,351,353,354,355,367,1125,1411],[273,336,344,348,351,353,354,355,367,1264,1411],[273,336,344,348,351,353,354,355,367,1127],[273,336,344,348,351,353,354,355,367,1393],[273,336,344,348,351,353,354,355,367,1125],[273,336,344,348,351,353,354,355,367,1266,1267],[273,336,344,348,351,353,354,355,367,1393,1411],[273,336,344,348,351,353,354,355,367,1264,1393,1411],[273,336,344,348,351,353,354,355,367,1124,1126,1128,1129,1393],[273,336,344,348,351,353,354,355,367,1392],[273,336,344,348,351,353,354,355,367,1048],[273,336,344,348,351,353,354,355,367,1264,1267,1392,1411],[273,336,344,348,351,353,354,355,367,1265,1411],[273,336,344,348,351,353,354,355,367,792,1048,1259,1265,1403,1411],[273,336,344,348,351,353,354,355,367,1259,1265,1411],[273,336,344,348,351,353,354,355,367,1023,1048,1393,1403,1411],[273,336,344,348,351,353,354,355,367,1048,1258,1259,1264,1393,1411],[273,336,344,348,351,353,354,355,367,1219,1393],[273,336,344,348,351,353,354,355,367,790,803,805,810,811,975,976,977,1023,1264,1390,1391,1411],[65,66,258,273,336,344,348,351,353,354,355,367,790,791,821,824,826,855,977,1260,1263,1411],[65,66,273,336,344,348,351,353,354,355,367,1264,1266,1392],[273,336,344,348,351,353,354,355,367,1264,1265,1392],[273,336,344,348,351,353,354,355,367,1261,1262,1393],[273,336,344,348,351,353,354,355,367,790,992,1411],[273,336,344,348,351,353,354,355,367,1140,1534],[273,336,344,348,351,353,354,355,367,814],[273,336,344,348,351,353,354,355,367,1022,1023,1411],[273,336,344,348,351,353,354,355,367,1367,1370,1394,1411],[273,336,344,348,351,353,354,355,367,1133,1134,1393],[273,336,344,348,351,353,354,355,367,804,1411],[273,336,344,348,351,353,354,355,367,1393,1403],[273,336,344,348,351,353,354,355,367,1385,1403,1406,1407,1408,1409,1410],[273,336,344,348,351,353,354,355,367,803,1393,1411],[64,273,336,344,348,351,353,354,355,367,1403,1404,1405],[273,336,344,348,351,353,354,355,367,795,1411],[273,336,344,348,351,353,354,355,367,1403,1406],[273,336,344,348,351,353,354,355,367,795],[273,336,344,348,351,353,354,355,367,936,937,938,939,943,944,945,946,947,949,951,952,953,954,972],[273,336,344,348,351,353,354,355,367,936],[273,336,344,348,351,353,354,355,367,936,942],[273,336,344,348,351,353,354,355,367,795,936],[273,336,344,348,351,353,354,355,367,826,935,936,948,949,950],[273,336,344,348,351,353,354,355,367,971],[273,336,344,348,351,353,354,355,367,791,797,934,935,1393],[273,336,344,348,351,353,354,355,358,359,367,963,1403],[273,336,344,348,351,353,354,355,367,794,795,803,1393],[273,336,344,348,351,353,354,355,367,791,794,795,798,803,1394],[273,336,344,348,351,353,354,355,367,791],[273,336,344,348,351,353,354,355,367,795,798,960,1254,1291,1395,1396,1398,1399,1400,1401,1402],[273,336,344,348,351,353,354,355,367,792,793,795,796,797,798,802,803,804,956,957,958,959,960,961,962,963,965,966,967,968,969,970,971,1254,1291,1394,1395,1396,1398,1399,1400,1401,1402],[273,336,344,348,351,353,354,355,367,792,795,797,798,803,960,1254,1291,1395,1396,1398,1399,1400,1401,1402],[273,336,344,348,351,353,354,355,367,792,795,798,960,1254,1291,1395,1396,1398,1399,1400,1401,1402],[273,336,344,348,351,353,354,355,367,964],[273,336,344,348,351,353,354,355,367,795,798,803,960,1254,1291,1395,1396,1398,1399,1400,1401,1402],[273,336,344,348,351,353,354,355,367,803,960,1254,1291,1395,1396,1397,1399,1400,1401,1402],[273,336,344,348,351,353,354,355,367,796,797],[273,336,344,348,351,353,354,355,367,786,792],[273,336,344,348,351,353,354,355,367,792,795,798,803,960,1254,1291,1395,1396,1398,1399,1400,1401,1402],[273,336,344,348,351,353,354,355,367,792,795,798,802,803,804,956,957,958,959,960,961,962,963,965,966,967,968,969,970,1254,1291,1395,1396,1398,1399,1400,1401,1402],[273,336,344,348,351,353,354,355,367,803,960,1254,1291,1395,1396,1397,1398,1399,1401,1402],[273,336,344,348,351,353,354,355,367,791,792,795,801,802],[273,336,344,348,351,353,354,355,367,1267],[273,336,344,348,351,353,354,355,367,1267,1312],[273,336,344,348,351,353,354,355,367,1041,1043,1044],[273,336,344,348,351,353,354,355,367,1041,1043],[273,336,344,348,351,353,354,355,367,962,1041,1042],[273,336,344,348,351,353,354,355,367,1041],[273,336,344,348,351,353,354,355,367,1038,1039,1040,1393],[273,336,344,348,351,353,354,355,367,824,1018,1411,1479,1480,1481,1482,1484],[273,336,344,348,351,353,354,355,367,824,1120,1479],[273,336,344,348,351,353,354,355,367,1411,1483],[273,336,344,348,350,351,353,354,355,367,1411],[273,336,344,348,351,353,354,355,367,1121],[273,336,344,348,351,353,354,355,367,1097,1099,1119],[273,336,344,348,351,353,354,355,367,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118],[273,336,344,348,351,353,354,355,367,1106],[258,273,336,344,348,351,353,354,355,367,1105],[273,336,344,348,351,353,354,355,367,1023,1047,1130,1390,1393,1411],[273,336,344,348,351,353,354,355,367,976,1020,1021,1023,1024,1045,1047,1048,1049,1050,1051,1120,1122,1123,1131,1132,1135,1393],[273,336,344,348,351,353,354,355,367,1120],[273,336,344,348,351,353,354,355,367,1052,1120],[273,336,344,348,351,353,354,355,367,791,935,973,1098],[273,336,344,348,351,353,354,355,367,1330,1333],[273,336,344,348,351,353,354,355,367,973,1021,1025,1120,1411],[273,336,344,348,351,353,354,355,367,826,1137,1177,1411],[273,336,344,348,351,353,354,355,367,1156,1411],[273,336,344,348,351,353,354,355,367,801,807,808,810],[273,336,344,348,351,353,354,355,367,801,806],[273,336,344,348,351,353,354,355,367,807,809],[273,336,344,348,351,353,354,355,367,799],[273,336,344,348,351,353,354,355,367,799,800],[273,336,344,348,351,353,354,355,367,1394,1411],[273,336,344,348,351,353,354,355,367,1243],[273,336,344,345,348,351,353,354,355,367,474],[273,336,344,348,351,353,354,355,367,790,811,812,813,814,815,974,1411],[273,336,344,348,351,353,354,355,367,787,790],[273,336,344,348,351,353,354,355,367,824,935,973,1393,1394,1411],[273,336,344,348,351,353,354,355,367,935],[273,336,344,348,351,353,354,355,367,381,963],[273,336,344,348,351,353,354,355,367,1046,1047,1335,1341],[273,336,344,348,351,353,354,355,367,1046,1403],[273,336,344,348,351,353,354,355,367,1046,1335,1339,1340],[273,336,344,348,351,353,354,355,367,1023,1046],[273,336,344,348,351,353,354,355,367,1378],[273,336,344,348,351,353,354,355,367,1381],[273,336,344,348,351,353,354,355,367,1281],[273,336,344,348,350,351,353,354,355,367,1243],[273,336,344,348,351,353,354,355,367,1243,1281,1282,1283],[273,336,344,348,351,353,354,355,367,978],[273,336,344,348,351,353,354,355,367,1017,1020,1156,1194,1213,1237,1367,1368,1369,1370,1388,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1519],[273,336,344,348,351,353,354,355,367,1322,1323,1324,1390,1393],[273,336,344,348,351,353,354,355,367,942,1177,1262,1266,1268,1269,1270,1271,1272,1273,1390,1393],[273,336,344,348,351,353,354,355,367,991,1304],[273,336,344,348,351,353,354,355,367,1264,1265,1355,1356,1392],[273,336,344,348,351,353,354,355,367,792,937,943,946,951,973,989,1250,1277,1368,1403,1406,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465],[273,336,344,348,351,353,354,355,367,1255],[273,336,344,348,351,353,354,355,367,1254,1256,1257,1274,1275,1276,1277,1278,1280,1286,1287,1288,1289,1392,1393,1403,1411],[273,336,344,348,351,353,354,355,367,1137,1414,1415],[273,336,344,348,351,353,354,355,367,1326],[273,336,344,348,351,353,354,355,367,790,1266,1271,1274,1277,1280,1363,1392,1393,1411],[273,336,344,348,351,353,354,355,367,790,814,942,979,991,1017,1023,1048,1126,1127,1128,1177,1237,1252,1258,1260,1266,1268,1269,1270,1271,1272,1273,1274,1275,1277,1280,1286,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1311,1313,1314,1315,1316,1317,1318,1319,1320,1321,1325,1327,1328,1329,1345,1346,1347,1348,1357,1390,1393,1403,1411],[273,336,344,348,351,353,354,355,367,1173],[273,336,344,348,351,353,354,355,367,1528],[273,336,344,348,351,353,354,355,367,1540],[273,336,344,348,351,353,354,355,367,1532],[273,336,344,348,351,353,354,355,367,1542],[273,336,344,348,351,353,354,355,367,1526,1533,1541,1543],[273,336,344,348,351,353,354,355,367,1265,1392],[273,336,344,348,351,353,354,355,367,977,1285],[273,336,344,348,351,353,354,355,367,1390,1393],[273,336,344,348,351,353,354,355,367,1177,1268,1411],[273,336,344,348,351,353,354,355,367,1177,1181,1390,1420,1421,1422,1424,1425],[273,336,344,348,351,353,354,355,367,790,826,980,994,1232,1235,1236,1238,1251,1468,1469,1470,1471,1498,1499,1501,1502,1504],[273,336,344,348,351,353,354,355,367,1023,1334,1342,1343,1344],[273,336,344,348,351,353,354,355,367,792,1267,1309,1310],[273,336,344,348,351,353,354,355,367,792,942,1048,1219,1259,1264,1265,1269,1275,1303,1328,1349,1351,1352,1353,1354,1392,1403,1411],[273,336,344,348,351,353,354,355,367,980,1219,1265,1269,1274,1275,1277,1278,1280,1303,1349,1351,1352,1353,1354,1359,1360,1361,1392,1393,1403,1411],[273,336,344,348,351,353,354,355,367,1293,1294],[273,336,344,348,351,353,354,355,367,1274,1275,1276,1277,1278,1280,1286,1291,1292,1293,1295,1296,1411],[273,336,344,348,351,353,354,355,367,1159,1177,1510,1511,1512,1513],[273,336,344,348,351,353,354,355,367,1264,1279,1392,1393,1411],[273,336,344,348,351,353,354,355,367,1284],[273,336,344,348,351,353,354,355,367,1177,1418],[273,336,344,348,351,353,354,355,367,1177],[273,336,344,348,351,353,354,355,367,1177,1411,1418,1419],[273,336,344,348,351,353,354,355,367,1177,1267],[273,336,344,348,351,353,354,355,367,1177,1179,1180],[273,336,344,348,351,353,354,355,367,1177,1179],[273,336,344,348,350,351,353,354,355,367,1179],[273,336,344,348,351,353,354,355,367,1177,1423],[273,336,344,348,351,353,354,355,367,792,1163,1411],[273,336,344,348,351,353,354,355,367,802,1174,1411],[273,336,344,348,351,353,354,355,367,1023,1048],[273,336,344,348,351,353,354,355,367,821,855,1020,1141,1142,1144,1177,1403,1411],[273,336,344,348,351,353,354,355,367,1179],[273,336,344,348,351,353,354,355,367,1017,1018,1136,1137,1138,1177,1178,1390,1393],[273,336,344,348,351,353,354,355,367,973,978,979,980,987,988,989,990,994,1234,1235,1236,1237,1238,1240,1241,1242,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1290,1297,1358,1362,1364,1365,1411],[273,336,344,348,351,353,354,355,367,786,973,1025,1042,1046,1224,1237,1281,1282,1284,1334,1367,1368,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1382,1383,1384,1385,1388,1411],[273,336,344,348,351,353,354,355,367,1366,1389],[273,336,344,348,351,353,354,355,367,1350],[273,336,344,348,350,351,353,354,355,367,786,790,816,821,855,934,935,967,996,1017,1018,1020,1023,1048,1133,1136,1137,1138,1140,1141,1142,1144,1157,1158,1159,1160,1162,1175,1176,1390,1393,1403,1411],[273,336,344,348,351,353,354,355,367,791,942,1411],[273,336,344,348,351,353,354,355,367,791,940,941],[273,336,344,348,351,353,354,355,367,973],[273,336,344,348,351,353,354,355,367,1333],[273,336,344,348,351,353,354,355,367,1159,1177,1411],[273,336,344,348,351,353,354,355,367,963,1411],[273,336,344,348,351,353,354,355,367,797],[273,336,344,348,351,353,354,355,367,786,1388,1411,1508,1509,1519],[273,336,344,348,351,353,354,355,367,797,1377,1518],[273,336,344,348,351,353,354,355,367,1217,1218],[273,336,344,348,351,353,354,355,367,823,1393],[273,336,344,348,351,353,354,355,367,1158,1177,1411],[60,273,336,344,348,351,353,354,355,358,359,367],[60,273,336,344,348,351,353,354,355,367,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440],[60,273,336,344,348,351,353,354,355,367,1428,1433],[60,273,336,344,348,351,353,354,355,367,1428],[60,273,336,344,348,351,353,354,355,367,1428,1433,1435,1436,1437],[60,273,336,344,348,351,353,354,355,367,1428,1429,1430,1433,1437],[60,273,336,344,348,351,353,354,355,367,1428,1433,1438],[273,336,344,348,351,353,354,355,367,1430],[60,273,336,344,348,351,353,354,355,367,1429,1430],[60,273,336,344,348,351,353,354,355,367,1430],[60,273,336,344,348,351,353,354,355,367],[273,336,344,348,351,353,354,355,359,367,384,1430,1431],[60,273,336,344,348,351,353,354,355,359,367,371,1428,1429],[273,336,341,344,348,351,353,354,355,367],[273,336,344,348,351,353,354,355,367,1413,1524],[61,273,336,344,348,351,353,354,355,367,1413,1524,1525,1546],[273,336,344,348,351,353,354,355,367,1545],[61,273,336,344,348,351,353,354,355,358,359,367,1417,1427,1441,1442,1522,1523],[258,273,336,344,348,351,353,354,355,367,1441,1521],[273,336,344,348,350,351,353,354,355,359,367,384,1441],[273,336,344,348,351,353,354,355,367,375,392,430,474,627,668],[273,336,344,348,351,353,354,355,367,786,817],[273,336,344,348,351,353,354,355,367,817,818,819,820],[273,336,344,348,351,353,354,355,367,786],[258,273,336,344,348,351,353,354,355,367,786],[260,273,336,344,348,351,353,354,355,367],[258,259,260,261,262,264,265,273,336,344,348,351,353,354,355,367,522,523,524,671,672,673,674,675,777,778,779,780,781,782,783,784,785],[260,263,273,336,344,348,351,353,354,355,367],[260,273,336,344,348,351,353,354,355,367,521],[260,273,336,344,348,351,353,354,355,367,669,670],[260,273,336,344,348,351,353,354,355,367,669],[260,273,336,344,348,351,353,354,355,367,671],[260,273,336,344,348,351,353,354,355,367,776],[260,273,336,344,348,351,353,354,355,367,723],[260,265,273,336,344,348,351,353,354,355,367,522,523,671,672,673,674,675,777,778],[260,262,273,336,344,348,351,353,354,355,367,779],[258,259,273,336,344,348,351,353,354,355,367],[266,273,336,344,348,351,353,354,355,367,475,476,479,480,481,483,484,487,502,516,517,518,519],[273,336,344,348,351,353,354,355,367,475,482,520],[273,336,344,348,351,353,354,355,367,479,482,483,520],[273,336,344,348,351,353,354,355,367,520],[273,336,344,348,351,353,354,355,367,477,520],[273,336,344,348,351,353,354,355,367,485,486],[273,336,344,348,351,353,354,355,367,481],[273,336,344,348,351,353,354,355,367,481,483,484,487,500,520],[273,336,344,348,351,353,354,355,367,495],[273,336,344,348,351,353,354,355,367,479,484,520],[266,273,336,344,348,351,353,354,355,367,475,476,478],[273,336,344,348,351,353,354,355,367,375],[266,273,336,344,348,351,353,354,355,367],[273,336,344,348,351,353,354,355,367,430,474],[266,273,336,344,348,351,353,354,355,367,479,520],[273,336,344,348,351,353,354,355,367,479,520],[273,336,344,348,351,353,354,355,367,515,520],[273,336,344,348,351,353,354,355,367,479,492,493,515,520],[273,336,344,348,351,353,354,355,367,479,493,499,500,520],[273,336,344,348,351,353,354,355,367,502,520],[273,336,344,348,351,353,354,355,367,509],[273,336,344,348,351,353,354,355,367,479,494,509,510,512,521],[273,336,344,348,351,353,354,355,367,511],[273,336,344,348,351,353,354,355,367,519],[273,336,344,348,351,353,354,355,367,508],[273,336,344,348,351,353,354,355,367,489,490,491,506,515],[273,336,344,348,351,353,354,355,367,479,483,484,487,489,516],[273,336,344,348,351,353,354,355,367,490,491,504,507,516],[273,336,344,348,351,353,354,355,367,479,483,484,489,496,502,515,516],[273,336,344,348,351,353,354,355,367,503,515],[273,336,344,348,351,353,354,355,367,478,479,483,489,492,494,502,503,513,514,515,516],[273,336,344,348,351,353,354,355,367,479,483,484,489,516],[273,336,344,348,351,353,354,355,367,505,506],[273,336,344,348,351,353,354,355,367,479,483,484,487,489,505,516],[273,336,344,348,351,353,354,355,367,478,479,483,489,502,516,517],[273,336,344,348,351,353,354,355,367,488,502,516,517,518],[273,336,344,348,351,353,354,355,367,498],[273,336,344,348,351,353,354,355,367,479,483,484,488,489,496,502],[273,336,344,348,351,353,354,355,367,497,502],[273,336,344,348,351,353,354,355,367,478,479,483,489,497,500,501,502],[273,336,344,348,351,353,354,355,367,786,821,851,855,856,860,867,879,880,885,886,888],[273,336,344,348,351,353,354,355,367,879],[273,336,344,348,351,353,354,355,367,786,821,855,856,857],[273,336,344,348,351,353,354,355,367,857,858,859],[273,336,344,348,351,353,354,355,367,853,868,878,881,883,884],[273,336,344,348,351,353,354,355,367,861,878],[273,336,344,348,351,353,354,355,367,786,821,850,855,856,864,867,878,882],[258,273,336,344,348,351,353,354,355,367,786,821,850,853,854,855,856,860,861,862,863,864,867,868,869,877,879,880],[273,336,344,348,351,353,354,355,367,821,855,878,883],[273,336,344,348,351,353,354,355,367,850,864],[273,336,344,348,351,353,354,355,367,786,865,866],[273,336,344,348,351,353,354,355,367,851],[273,336,344,348,351,353,354,355,367,853],[273,336,344,348,351,353,354,355,367,851,852,854,861,878,882,886,887],[273,336,344,348,351,353,354,355,367,786,821,851,855,856,865,867,877,885,886,887,888,889],[273,336,344,348,351,353,354,355,367,853,882],[273,336,344,348,351,353,354,355,367,852],[258,273,336,344,348,351,353,354,355,367,821,855,871,878],[258,273,336,344,348,351,353,354,355,367,821,855,878],[258,273,336,344,348,351,353,354,355,367,821,855,869,870,871,872,873,874,875,876,878,879],[273,336,344,348,351,353,354,355,367,827,851,852,853,854,855,856,860,861,863,865,867,877,885,887,888,889,890,891,897,930,931,932,933],[273,336,344,348,351,353,354,355,367,892,893,894,895,896],[273,336,344,348,351,353,354,355,367,786,850,864],[273,336,344,348,351,353,354,355,367,850,864,871],[273,336,344,348,351,353,354,355,367,850,854,864],[273,336,344,348,351,353,354,355,367,850,855,864],[273,336,344,348,351,353,354,355,367,850,855,864,878],[273,336,344,348,351,353,354,355,367,850,863,864,889],[273,336,344,348,351,353,354,355,367,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,919,920,921,922,923,924,925,926,927,928,929],[273,336,344,348,351,353,354,355,367,786,850,851,864,867],[273,336,344,348,351,353,354,355,367,850,864,865],[273,336,344,348,351,353,354,355,367,856],[273,336,344,348,351,353,354,355,367,850,856,864,918],[273,336,344,348,351,353,354,355,367,786,821,850,855,864],[273,336,344,348,351,353,354,355,367,850,864,889],[273,336,344,348,351,353,354,355,367,821,850,855,864],[273,336,344,348,351,353,354,355,367,850,864,878],[273,336,344,348,351,353,354,355,367,850,856,864],[273,336,344,348,351,353,354,355,367,786,889],[273,336,344,348,351,353,354,355,367,850,853,864],[273,336,344,348,351,353,354,355,367,786,821,855,860,880,889,894],[273,336,344,348,351,353,354,355,367,889,894],[273,336,344,348,351,353,354,355,367,786,821,853,855,860,880,889],[273,336,344,348,351,353,354,355,367,831],[273,336,344,348,351,353,354,355,367,834],[273,336,344,348,351,353,354,355,367,828,831,836],[273,336,344,348,351,353,354,355,367,831,838],[273,336,344,348,351,353,354,355,367,831,833],[273,336,344,348,351,353,354,355,367,828,831],[273,336,344,348,351,353,354,355,367,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849],[273,336,344,348,351,353,354,355,367,847],[273,336,344,347,348,351,353,354,355,367],[273,336,344,348,351,353,354,355,367,829,830],[273,336,344,348,351,353,354,355,367,605,618,619,623,625,626],[273,336,344,348,351,353,354,355,367,605,618,620,622,623,627],[273,336,344,348,351,353,354,355,367,605,618,620,623],[273,336,344,348,351,353,354,355,367,618],[273,336,344,348,351,353,354,355,367,537,604],[273,336,344,348,351,353,354,355,367,605,617,618,619,621,622],[273,336,344,348,351,353,354,355,367,616,617],[273,336,344,348,351,353,354,355,367,624],[68,70,74,77,79,81,83,85,87,91,95,99,101,103,105,107,109,111,113,115,117,119,127,132,134,136,138,140,143,145,150,154,158,160,162,164,167,169,171,174,176,180,182,184,186,188,190,192,194,196,198,201,204,206,208,212,214,217,219,221,223,227,233,237,239,241,248,250,252,254,257,273,336,344,348,351,353,354,355,367],[68,201,273,336,344,348,351,353,354,355,367],[69,273,336,344,348,351,353,354,355,367],[207,273,336,344,348,351,353,354,355,367],[68,184,188,201,273,336,344,348,351,353,354,355,367],[189,273,336,344,348,351,353,354,355,367],[68,184,201,273,336,344,348,351,353,354,355,367],[73,273,336,344,348,351,353,354,355,367],[89,95,99,105,136,188,201,273,336,344,348,351,353,354,355,367],[144,273,336,344,348,351,353,354,355,367],[118,273,336,344,348,351,353,354,355,367],[112,273,336,344,348,351,353,354,355,367],[202,203,273,336,344,348,351,353,354,355,367],[201,273,336,344,348,351,353,354,355,367],[91,95,132,138,150,186,188,201,273,336,344,348,351,353,354,355,367],[218,273,336,344,348,351,353,354,355,367],[67,201,273,336,344,348,351,353,354,355,367],[88,273,336,344,348,351,353,354,355,367],[70,77,83,87,91,107,119,160,162,164,186,188,192,194,196,201,273,336,344,348,351,353,354,355,367],[220,273,336,344,348,351,353,354,355,367],[81,91,107,201,273,336,344,348,351,353,354,355,367],[222,273,336,344,348,351,353,354,355,367],[68,77,79,143,184,188,201,273,336,344,348,351,353,354,355,367],[80,273,336,344,348,351,353,354,355,367],[205,273,336,344,348,351,353,354,355,367],[199,273,336,344,348,351,353,354,355,367],[191,273,336,344,348,351,353,354,355,367],[68,83,201,273,336,344,348,351,353,354,355,367],[84,273,336,344,348,351,353,354,355,367],[108,273,336,344,348,351,353,354,355,367],[140,186,201,225,273,336,344,348,351,353,354,355,367],[127,201,225,273,336,344,348,351,353,354,355,367],[91,99,127,140,184,188,201,224,226,273,336,344,348,351,353,354,355,367],[224,225,226,273,336,344,348,351,353,354,355,367],[109,201,273,336,344,348,351,353,354,355,367],[83,140,186,188,201,230,273,336,344,348,351,353,354,355,367],[140,186,201,230,273,336,344,348,351,353,354,355,367],[99,140,184,188,201,229,231,273,336,344,348,351,353,354,355,367],[228,229,230,231,232,273,336,344,348,351,353,354,355,367],[140,186,201,235,273,336,344,348,351,353,354,355,367],[127,201,235,273,336,344,348,351,353,354,355,367],[91,99,127,140,184,188,201,234,236,273,336,344,348,351,353,354,355,367],[234,235,236,273,336,344,348,351,353,354,355,367],[86,273,336,344,348,351,353,354,355,367],[209,210,211,273,336,344,348,351,353,354,355,367],[68,70,74,77,81,83,87,89,91,95,99,101,103,105,107,111,113,115,117,119,127,134,136,140,143,160,162,164,169,171,176,180,182,186,190,192,194,196,198,201,208,273,336,344,348,351,353,354,355,367],[68,70,74,77,81,83,87,89,91,95,99,101,103,105,107,109,111,113,115,117,119,127,134,136,140,143,160,162,164,169,171,176,180,182,186,190,192,194,196,198,201,208,273,336,344,348,351,353,354,355,367],[91,186,201,273,336,344,348,351,353,354,355,367],[187,273,336,344,348,351,353,354,355,367],[128,129,130,131,273,336,344,348,351,353,354,355,367],[130,140,186,188,201,273,336,344,348,351,353,354,355,367],[128,132,140,186,201,273,336,344,348,351,353,354,355,367],[83,99,115,117,127,201,273,336,344,348,351,353,354,355,367],[89,91,95,99,101,105,107,128,129,131,140,186,188,190,201,273,336,344,348,351,353,354,355,367],[238,273,336,344,348,351,353,354,355,367],[81,91,201,273,336,344,348,351,353,354,355,367],[240,273,336,344,348,351,353,354,355,367],[74,77,79,81,87,95,99,107,134,136,143,171,186,190,196,201,208,273,336,344,348,351,353,354,355,367],[116,273,336,344,348,351,353,354,355,367],[92,93,94,273,336,344,348,351,353,354,355,367],[77,91,92,143,201,273,336,344,348,351,353,354,355,367],[91,92,201,273,336,344,348,351,353,354,355,367],[201,243,273,336,344,348,351,353,354,355,367],[242,243,244,245,246,247,273,336,344,348,351,353,354,355,367],[83,140,186,188,201,243,273,336,344,348,351,353,354,355,367],[83,99,127,140,201,242,273,336,344,348,351,353,354,355,367],[133,273,336,344,348,351,353,354,355,367],[146,147,148,149,273,336,344,348,351,353,354,355,367],[140,147,186,188,201,273,336,344,348,351,353,354,355,367],[95,99,101,107,138,186,188,190,201,273,336,344,348,351,353,354,355,367],[83,89,99,105,115,140,146,148,188,201,273,336,344,348,351,353,354,355,367],[82,273,336,344,348,351,353,354,355,367],[71,72,139,273,336,344,348,351,353,354,355,367],[68,186,201,273,336,344,348,351,353,354,355,367],[71,72,74,77,81,83,85,87,95,99,107,132,134,136,138,143,186,188,190,201,273,336,344,348,351,353,354,355,367],[74,77,81,85,87,89,91,95,99,105,107,132,134,143,145,150,154,158,167,171,174,176,186,188,190,201,273,336,344,348,351,353,354,355,367],[179,273,336,344,348,351,353,354,355,367],[74,77,81,85,87,95,99,101,105,107,134,143,171,184,186,188,190,201,273,336,344,348,351,353,354,355,367],[68,177,178,184,186,201,273,336,344,348,351,353,354,355,367],[90,273,336,344,348,351,353,354,355,367],[181,273,336,344,348,351,353,354,355,367],[159,273,336,344,348,351,353,354,355,367],[114,273,336,344,348,351,353,354,355,367],[185,273,336,344,348,351,353,354,355,367],[68,77,143,184,188,201,273,336,344,348,351,353,354,355,367],[151,152,153,273,336,344,348,351,353,354,355,367],[140,152,186,201,273,336,344,348,351,353,354,355,367],[140,152,186,188,201,273,336,344,348,351,353,354,355,367],[83,89,95,99,101,105,132,140,151,153,186,188,201,273,336,344,348,351,353,354,355,367],[141,142,273,336,344,348,351,353,354,355,367],[140,141,186,273,336,344,348,351,353,354,355,367],[68,140,142,188,201,273,336,344,348,351,353,354,355,367],[249,273,336,344,348,351,353,354,355,367],[87,91,107,201,273,336,344,348,351,353,354,355,367],[165,166,273,336,344,348,351,353,354,355,367],[140,165,186,188,201,273,336,344,348,351,353,354,355,367],[77,79,83,89,95,99,101,105,111,113,115,117,119,140,143,160,162,164,166,186,188,201,273,336,344,348,351,353,354,355,367],[213,273,336,344,348,351,353,354,355,367],[155,156,157,273,336,344,348,351,353,354,355,367],[140,156,186,201,273,336,344,348,351,353,354,355,367],[140,156,186,188,201,273,336,344,348,351,353,354,355,367],[83,89,95,99,101,105,132,140,155,157,186,188,201,273,336,344,348,351,353,354,355,367],[135,273,336,344,348,351,353,354,355,367],[78,273,336,344,348,351,353,354,355,367],[77,143,201,273,336,344,348,351,353,354,355,367],[75,76,273,336,344,348,351,353,354,355,367],[75,140,186,273,336,344,348,351,353,354,355,367],[68,76,140,188,201,273,336,344,348,351,353,354,355,367],[170,273,336,344,348,351,353,354,355,367],[68,70,83,85,91,99,111,113,115,117,127,169,184,186,188,201,273,336,344,348,351,353,354,355,367],[100,273,336,344,348,351,353,354,355,367],[104,273,336,344,348,351,353,354,355,367],[68,103,184,201,273,336,344,348,351,353,354,355,367],[168,273,336,344,348,351,353,354,355,367],[215,216,273,336,344,348,351,353,354,355,367],[172,173,273,336,344,348,351,353,354,355,367],[140,172,186,188,201,273,336,344,348,351,353,354,355,367],[77,79,83,89,95,99,101,105,111,113,115,117,119,140,143,160,162,164,173,186,188,201,273,336,344,348,351,353,354,355,367],[251,273,336,344,348,351,353,354,355,367],[95,99,107,201,273,336,344,348,351,353,354,355,367],[253,273,336,344,348,351,353,354,355,367],[87,91,201,273,336,344,348,351,353,354,355,367],[70,74,81,83,85,87,95,99,101,105,107,111,113,115,117,119,127,134,136,160,162,164,169,171,182,186,190,192,194,196,198,199,273,336,344,348,351,353,354,355,367],[199,200,273,336,344,348,351,353,354,355,367],[68,273,336,344,348,351,353,354,355,367],[137,273,336,344,348,351,353,354,355,367],[183,273,336,344,348,351,353,354,355,367],[74,77,81,85,87,91,95,99,101,103,105,107,134,136,143,171,176,180,182,186,188,190,201,273,336,344,348,351,353,354,355,367],[110,273,336,344,348,351,353,354,355,367],[161,273,336,344,348,351,353,354,355,367],[67,273,336,344,348,351,353,354,355,367],[83,99,109,111,113,115,117,119,120,127,273,336,344,348,351,353,354,355,367],[83,99,109,113,120,121,127,188,273,336,344,348,351,353,354,355,367],[120,121,122,123,124,125,126,273,336,344,348,351,353,354,355,367],[109,273,336,344,348,351,353,354,355,367],[109,127,273,336,344,348,351,353,354,355,367],[83,99,111,113,115,119,127,188,273,336,344,348,351,353,354,355,367],[68,83,91,99,111,113,115,117,119,123,184,188,201,273,336,344,348,351,353,354,355,367],[83,99,125,184,188,273,336,344,348,351,353,354,355,367],[175,273,336,344,348,351,353,354,355,367],[106,273,336,344,348,351,353,354,355,367],[255,256,273,336,344,348,351,353,354,355,367],[74,81,87,119,134,136,145,162,164,169,192,194,198,201,208,223,239,241,250,254,255,273,336,344,348,351,353,354,355,367],[70,77,79,83,85,91,95,99,101,103,105,107,111,113,115,117,127,132,140,143,150,154,158,160,167,171,174,176,180,182,186,190,196,201,219,221,227,233,237,248,252,273,336,344,348,351,353,354,355,367],[193,273,336,344,348,351,353,354,355,367],[163,273,336,344,348,351,353,354,355,367],[96,97,98,273,336,344,348,351,353,354,355,367],[77,91,96,143,201,273,336,344,348,351,353,354,355,367],[91,96,201,273,336,344,348,351,353,354,355,367],[195,273,336,344,348,351,353,354,355,367],[102,273,336,344,348,351,353,354,355,367],[197,273,336,344,348,351,353,354,355,367],[273,333,334,336,344,348,351,353,354,355,367],[273,335,336,344,348,351,353,354,355,367],[336,344,348,351,353,354,355,367],[273,336,337,342,344,347,348,351,353,354,355,357,367,372,384],[273,336,337,338,344,347,348,351,353,354,355,367],[273,336,339,344,348,351,353,354,355,367,385],[273,336,340,341,344,348,351,353,354,355,358,367],[273,336,341,344,348,351,353,354,355,367,372,381],[273,336,342,344,347,348,351,353,354,355,357,367],[273,335,336,343,344,348,351,353,354,355,367],[273,336,344,345,348,351,353,354,355,367],[273,336,344,346,347,348,351,353,354,355,367],[273,335,336,344,347,348,351,353,354,355,367],[273,336,344,347,348,349,351,353,354,355,367,372,384],[273,336,344,347,348,349,351,353,354,355,367,372,375],[273,323,336,344,347,348,350,351,353,354,355,357,367,372,384],[273,336,344,347,348,350,351,353,354,355,357,367,372,381,384],[273,336,344,348,350,351,352,353,354,355,367,372,381,384],[271,272,273,274,275,276,277,278,279,280,281,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391],[273,336,344,348,351,353,355,367],[273,336,344,348,351,353,354,355,356,367,384],[273,336,344,347,348,351,353,354,355,357,367,372],[273,288,291,294,295,336,344,348,351,353,354,355,367,384],[273,291,336,344,348,351,353,354,355,367,372,384],[273,291,295,336,344,348,351,353,354,355,367,384],[273,336,344,348,351,353,354,355,367,372],[273,285,336,344,348,351,353,354,355,367],[273,289,336,344,348,351,353,354,355,367],[273,287,288,291,336,344,348,351,353,354,355,367,384],[273,336,344,348,351,353,354,355,357,367,381],[273,336,344,348,351,353,354,355,367,392],[273,285,336,344,348,351,353,354,355,367,392],[273,287,291,336,344,348,351,353,354,355,357,367,384],[273,282,283,284,286,290,336,344,347,348,351,353,354,355,367,372,384],[273,291,300,308,336,344,348,351,353,354,355,367],[273,283,289,336,344,348,351,353,354,355,367],[273,291,317,318,336,344,348,351,353,354,355,367],[273,283,286,291,336,344,348,351,353,354,355,367,375,384,392],[273,291,336,344,348,351,353,354,355,367],[273,287,291,336,344,348,351,353,354,355,367,384],[273,282,336,344,348,351,353,354,355,367],[273,285,286,287,289,290,291,292,293,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,318,319,320,321,322,336,344,348,351,353,354,355,367],[273,291,310,313,336,344,348,351,353,354,355,367],[273,291,300,301,302,336,344,348,351,353,354,355,367],[273,289,291,301,303,336,344,348,351,353,354,355,367],[273,290,336,344,348,351,353,354,355,367],[273,283,285,291,336,344,348,351,353,354,355,367],[273,291,295,301,303,336,344,348,351,353,354,355,367],[273,295,336,344,348,351,353,354,355,367],[273,289,291,294,336,344,348,351,353,354,355,367,384],[273,283,287,291,300,336,344,348,351,353,354,355,367],[273,291,310,336,344,348,351,353,354,355,367],[273,303,336,344,348,351,353,354,355,367],[273,285,291,317,336,344,348,351,353,354,355,367,375,390,392],[273,336,344,348,351,353,354,355,358,367],[273,336,344,348,351,353,354,355,359,367],[273,336,344,347,348,351,353,354,355,362,367],[273,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391],[273,336,344,348,351,353,354,355,364,367],[273,336,344,348,351,353,354,355,365,367],[273,336,341,344,348,351,353,354,355,357,367,375],[273,336,344,347,348,351,353,354,355,367,368],[273,336,344,348,351,353,354,355,367,369,385,388],[273,336,344,347,348,351,353,354,355,367,372,374,375],[273,336,344,348,351,353,354,355,367,373,375],[273,336,344,348,351,353,354,355,367,375,385],[273,336,344,348,351,353,354,355,367,376],[273,333,336,344,348,351,353,354,355,367,372,378,384],[273,336,344,348,351,353,354,355,367,372,377],[273,336,344,347,348,351,353,354,355,367,379,380],[273,336,344,348,351,353,354,355,367,379,380],[273,336,341,344,348,351,353,354,355,357,367,372,381],[273,336,344,348,351,353,354,355,367,382],[273,336,344,348,351,353,354,355,357,367,383],[273,336,344,348,350,351,353,354,355,365,367,384],[273,336,344,348,351,353,354,355,367,385,386],[273,336,341,344,348,351,353,354,355,367,386],[273,336,344,348,351,353,354,355,367,372,387],[273,336,344,348,351,353,354,355,356,367,388],[273,336,344,348,351,353,354,355,367,389],[273,336,339,344,348,351,353,354,355,367],[273,336,344,348,351,353,354,355,367,385],[273,323,336,344,348,351,353,354,355,367],[273,336,344,348,351,353,354,355,367,384],[273,336,344,348,351,353,354,355,367,390],[273,336,344,348,351,353,354,355,362,367],[273,336,344,348,351,353,354,355,367,380],[273,323,336,344,347,348,349,351,353,354,355,362,367,372,375,384,387,388,390],[273,336,344,348,351,353,354,355,367,372,391],[273,336,344,347,348,350,351,352,353,354,355,357,367,372,381,384,391,392],[273,336,344,348,351,353,354,355,367,1056,1057,1061,1088,1089,1091,1092,1093,1095,1096],[273,336,344,348,351,353,354,355,367,1054,1055],[273,336,344,348,351,353,354,355,367,1054],[273,336,344,348,351,353,354,355,367,1056,1096],[273,336,344,348,351,353,354,355,367,1056,1057,1093,1094,1096],[273,336,344,348,351,353,354,355,367,1096],[273,336,344,348,351,353,354,355,367,1053,1096,1097],[273,336,344,348,351,353,354,355,367,1056,1057,1095,1096],[273,336,344,348,351,353,354,355,367,1056,1057,1059,1060,1095,1096],[273,336,344,348,351,353,354,355,367,1056,1057,1058,1095,1096],[273,336,344,348,351,353,354,355,367,1056,1057,1061,1088,1089,1090,1091,1092,1095,1096],[273,336,344,348,351,353,354,355,367,1053,1056,1057,1061,1093,1095],[273,336,344,348,351,353,354,355,367,1061,1096],[273,336,344,348,351,353,354,355,367,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1096],[273,336,344,348,351,353,354,355,367,1086,1096],[273,336,344,348,351,353,354,355,367,1062,1073,1081,1082,1083,1084,1085,1087],[273,336,344,348,351,353,354,355,367,1066,1096],[273,336,344,348,351,353,354,355,367,1074,1075,1076,1077,1078,1079,1080,1096],[273,336,344,348,351,353,354,355,367,1331,1332],[273,336,344,348,351,353,354,355,367,383],[273,336,344,348,351,353,354,355,367,1139],[273,336,344,348,350,351,353,354,355,367,372,430],[273,336,344,348,350,351,353,354,355,367,628,629],[273,336,344,348,351,353,354,355,367,628,629,630],[273,336,344,348,351,353,354,355,367,628],[273,336,344,347,348,351,353,354,355,367,631,632,635,637],[273,336,344,348,351,353,354,355,367,635,651,653],[273,336,344,348,351,353,354,355,367,631],[273,336,344,348,351,353,354,355,367,631,632,635,638,649,650],[273,336,344,348,351,353,354,355,367,631,640],[273,336,344,348,351,353,354,355,367,631,632,638],[273,336,344,348,351,353,354,355,367,631,632,638,651],[273,336,344,348,351,353,354,355,367,651,652,654,657],[273,336,344,348,351,353,354,355,367,372,631,632,638,641,642,646,647,648,651,658,659,668],[273,336,344,348,351,353,354,355,367,635,651],[273,336,344,348,351,353,354,355,367,640],[273,336,344,348,351,353,354,355,367,638,640,641,660],[273,336,344,348,351,353,354,355,367,372,632],[273,336,344,348,351,353,354,355,367,372,632,640,641,645],[273,336,344,348,351,353,354,355,365,367,631,632,634,638,639],[273,336,344,348,351,353,354,355,367,631,638],[273,336,344,348,351,353,354,355,367,651,656],[273,336,344,348,351,353,354,355,367,655],[273,336,344,348,351,353,354,355,367,372,632,640],[273,336,344,348,351,353,354,355,367,631,638,649],[273,336,344,348,351,353,354,355,367,633],[273,336,344,348,351,353,354,355,367,643],[273,336,344,348,351,353,354,355,367,643,644],[273,336,344,348,351,353,354,355,367,631,632,638,639,640,641,642,645,646,647,648,651,652,653,654,657,658,659,660,662,663,664,665,666,667,668],[273,336,344,348,351,353,354,355,367,661],[273,336,344,348,351,353,354,355,367,636],[62,63,273,336,344,348,351,353,354,355,367],[273,336,344,348,351,353,354,355,367,676,678,681,765],[273,336,344,348,351,353,354,355,367,676,677,678,681,682,683,686,687,690,692,697,698,713,714,723,726,728,729,733,734,742,743,744,745,746,749,753,755,759,760,761,764,774],[273,336,344,348,351,353,354,355,367,677,685,765],[273,336,344,348,351,353,354,355,367,681,685,686,765],[273,336,344,348,351,353,354,355,367,765],[273,336,344,348,351,353,354,355,367,679,765],[273,336,344,348,351,353,354,355,367,688,689],[273,336,344,348,351,353,354,355,367,683],[273,336,344,348,351,353,354,355,367,683,686,687,690,717,765],[273,336,344,348,351,353,354,355,367,681,684,765],[273,336,344,348,351,353,354,355,367,676,677,678,680],[273,336,344,348,351,353,354,355,367,676],[273,336,344,348,351,353,354,355,367,676,681,765],[273,336,344,348,351,353,354,355,367,681,765],[273,336,344,348,351,353,354,355,367,681,702,714,718,770,772,773,776],[273,336,344,348,351,353,354,355,367,679,681,699,700,702,704,705,706],[273,336,344,348,351,353,354,355,367,715,718,768,772,776],[273,336,344,348,351,353,354,355,367,679,681,718,768,774,776],[273,336,344,348,351,353,354,355,367,679,715,718,768,769,772,776],[273,336,344,348,351,353,354,355,367,701],[273,336,344,348,351,353,354,355,367,691,723,776],[273,336,344,348,351,353,354,355,367,723],[273,336,344,348,351,353,354,355,367,681,702,716,718,719,723],[273,336,344,348,351,353,354,355,367,715,723,776],[273,336,344,348,351,353,354,355,367,770,771,773],[273,336,344,348,351,353,354,355,367,687],[273,336,344,348,351,353,354,355,367,694,695,696,766],[273,336,344,348,351,353,354,355,367,681,686,766],[273,336,344,348,351,353,354,355,367,680,681,686,690,695,697,766],[273,336,344,348,351,353,354,355,367,681,686,690,695,697,766],[273,336,344,348,351,353,354,355,367,681,686,687,691,698,766],[273,336,344,348,351,353,354,355,367,681,686,687,691,699,700,703,704,705,766],[273,336,344,348,351,353,354,355,367,705,706,709,712,766],[273,336,344,348,351,353,354,355,367,710,711,766],[273,336,344,348,351,353,354,355,367,681,686,710,766],[273,336,344,348,351,353,354,355,367,681,686,687,712,766],[273,336,344,348,351,353,354,355,367,691,707,708,709,766],[273,336,344,348,351,353,354,355,367,681,686,687,691,706,766],[273,336,344,348,351,353,354,355,367,680,681,686,687,691,699,700,703,704,705,706,766],[273,336,344,348,351,353,354,355,367,681,686,687,691,700,766],[273,336,344,348,351,353,354,355,367,680,681,686,691,699,703,704,705,706,766],[273,336,344,348,351,353,354,355,367,691,766,774],[273,336,344,348,351,353,354,355,367,775],[273,336,344,348,351,353,354,355,367,680,681,686,687,691,714,715,766,767,768,769,770,772,773,774],[273,336,344,348,351,353,354,355,367,767,774],[273,336,344,348,351,353,354,355,367,681,687,766,774],[273,336,344,348,351,353,354,355,367,692,775],[273,336,344,348,351,353,354,355,367,680,681,686,714,766,774],[273,336,344,348,351,353,354,355,367,681,686,687,723,725,766],[273,336,344,348,351,353,354,355,367,681,686,687,690,724,766],[273,336,344,348,351,353,354,355,367,681,686,691,723,727,766],[273,336,344,348,351,353,354,355,367,681,686,687,723,728,766],[273,336,344,348,351,353,354,355,367,681,686,687,691,723,730,732,766],[273,336,344,348,351,353,354,355,367,681,686,687,732,766],[273,336,344,348,351,353,354,355,367,681,686,687,691,723,730,731,766,774],[273,336,344,348,351,353,354,355,367,681,686,687,690,766],[273,336,344,348,351,353,354,355,367,736,766],[273,336,344,348,351,353,354,355,367,681,686,730,766],[273,336,344,348,351,353,354,355,367,738,766],[273,336,344,348,351,353,354,355,367,681,686,687,766],[273,336,344,348,351,353,354,355,367,735,737,739,741,766],[273,336,344,348,351,353,354,355,367,681,687,766],[273,336,344,348,351,353,354,355,367,681,686,687,691,735,740,766],[273,336,344,348,351,353,354,355,367,730,766],[273,336,344,348,351,353,354,355,367,691,723,730,766],[273,336,344,348,351,353,354,355,367,680,681,686,690,744,766],[273,336,344,348,351,353,354,355,367,691,693,697,698,713,714,723,726,728,729,733,734,742,743,744,745,746,749,753,755,759,760,763],[273,336,344,348,351,353,354,355,367,681,686,723,749,766],[273,336,344,348,351,353,354,355,367,681,686,723,748,749,766],[273,336,344,348,351,353,354,355,367,691,723,747,748,749,766],[273,336,344,348,351,353,354,355,367,681,687,723,766],[273,336,344,348,351,353,354,355,367,681,686,691,723,766],[273,336,344,348,351,353,354,355,367,680,681,686,687,691,716,720,721,722,723,766],[273,336,344,348,351,353,354,355,367,681,686,687,690,750,752,766],[273,336,344,348,351,353,354,355,367,681,686,687,690,751,766],[273,336,344,348,351,353,354,355,367,681,686,690,766],[273,336,344,348,351,353,354,355,367,681,686,734,754,766],[273,336,344,348,351,353,354,355,367,681,686,687,756,757,759,766],[273,336,344,348,351,353,354,355,367,681,686,687,756,759,766],[273,336,344,348,351,353,354,355,367,681,686,687,691,757,758,766],[273,336,344,348,351,353,354,355,367,762],[273,336,344,348,351,353,354,355,367,761],[273,336,344,348,351,353,354,355,367,678,766],[273,336,344,348,351,353,354,355,367,690],[273,336,344,348,351,353,354,355,367,1337],[273,336,344,348,351,353,354,355,367,1337,1338],[273,336,344,348,351,353,354,355,367,1336],[273,336,344,348,351,353,354,355,367,384,396,399,402,403],[273,336,344,348,351,353,354,355,367,372,384,399],[273,336,344,348,351,353,354,355,367,384,399,403],[273,336,344,348,351,353,354,355,367,393],[273,336,344,348,351,353,354,355,367,397],[273,336,344,348,351,353,354,355,367,384,395,396,399],[273,336,344,348,351,353,354,355,367,392,393],[273,336,344,348,351,353,354,355,357,367,384,395,399],[268,269,270,273,336,344,347,348,351,353,354,355,367,372,384,394,398],[273,336,344,348,351,353,354,355,367,399,407,415],[269,273,336,344,348,351,353,354,355,367,397],[273,336,344,348,351,353,354,355,367,399,424,425],[269,273,336,344,348,351,353,354,355,367,375,384,392,394,399],[273,336,344,348,351,353,354,355,367,399],[273,336,344,348,351,353,354,355,367,384,395,399],[268,273,336,344,348,351,353,354,355,367],[273,336,344,348,351,353,354,355,367,393,394,395,397,398,399,400,401,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,425,426,427,428,429],[273,336,344,348,351,353,354,355,367,399,417,420],[273,336,344,348,351,353,354,355,367,399,407,408,409],[273,336,344,348,351,353,354,355,367,397,399,408,410],[273,336,344,348,351,353,354,355,367,398],[269,273,336,344,348,351,353,354,355,367,393,399],[273,336,344,348,351,353,354,355,367,399,403,408,410],[273,336,344,348,351,353,354,355,367,403],[273,336,344,348,351,353,354,355,367,384,397,399,402],[269,273,336,344,348,351,353,354,355,367,395,399,407],[273,336,344,348,351,353,354,355,367,399,417],[273,336,344,348,351,353,354,355,367,410],[273,336,344,348,351,353,354,355,367,375,390,392,393,399,424],[273,336,344,348,351,353,354,355,367,473],[273,336,344,348,351,353,354,355,367,384,437,440,443,444],[273,336,344,348,351,353,354,355,367,372,384,440],[273,336,344,348,351,353,354,355,367,384,440,444],[273,336,344,348,351,353,354,355,367,434],[273,336,344,348,351,353,354,355,367,438],[273,336,344,348,351,353,354,355,367,384,436,437,440],[273,336,344,348,351,353,354,355,367,392,434],[273,336,344,348,351,353,354,355,357,367,384,436,440],[273,336,344,347,348,351,353,354,355,367,372,384,431,432,433,435,439],[273,336,344,348,351,353,354,355,367,440,449,457],[273,336,344,348,351,353,354,355,367,432,438],[273,336,344,348,351,353,354,355,367,440,467,468],[273,336,344,348,351,353,354,355,367,375,384,392,432,435,440],[273,336,344,348,351,353,354,355,367,440],[273,336,344,348,351,353,354,355,367,384,436,440],[273,336,344,348,351,353,354,355,367,431],[273,336,344,348,351,353,354,355,367,434,435,436,438,439,440,441,442,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,468,469,470,471,472],[273,336,344,348,351,353,354,355,367,440,460,463],[273,336,344,348,351,353,354,355,367,440,449,450,451],[273,336,344,348,351,353,354,355,367,438,440,450,452],[273,336,344,348,351,353,354,355,367,439],[273,336,344,348,351,353,354,355,367,432,434,440],[273,336,344,348,351,353,354,355,367,440,444,450,452],[273,336,344,348,351,353,354,355,367,444],[273,336,344,348,351,353,354,355,367,384,438,440,443],[273,336,344,348,351,353,354,355,367,432,436,440,449],[273,336,344,348,351,353,354,355,367,440,460],[273,336,344,348,351,353,354,355,367,452],[273,336,344,348,351,353,354,355,367,432,436,440,444],[273,336,344,348,351,353,354,355,367,375,390,392,434,440,467],[273,336,344,348,351,353,354,355,367,614],[273,336,344,348,351,353,354,355,367,527,528],[273,336,344,348,351,353,354,355,367,525,526,527,529,530,535],[273,336,344,348,351,353,354,355,367,526,527],[273,336,344,348,351,353,354,355,367,535],[273,336,344,348,351,353,354,355,367,536],[273,336,344,348,351,353,354,355,367,527],[273,336,344,348,351,353,354,355,367,525,526,527,530,531,532,533,534],[273,336,344,348,351,353,354,355,367,525,526,537],[273,336,344,348,351,353,354,355,367,604],[273,336,344,348,351,353,354,355,367,604,608],[273,336,344,348,351,353,354,355,367,599,602,604,606,607,608,609,610,611,612,613],[273,336,344,348,351,353,354,355,367,538,540,608],[273,336,344,348,351,353,354,355,367,604,606],[273,336,344,348,351,353,354,355,367,539,604,607],[273,336,344,348,351,353,354,355,367,540,542,544,545,546,547],[273,336,344,348,351,353,354,355,367,542,544,546,547],[273,336,344,348,351,353,354,355,367,542,544,546],[273,336,344,348,351,353,354,355,367,539,542,544,545,547],[273,336,344,348,351,353,354,355,367,538,540,541,542,543,544,545,546,547,548,549,599,600,601,602,603],[273,336,344,348,351,353,354,355,367,538,540,541,544],[273,336,344,348,351,353,354,355,367,540,541,544],[273,336,344,348,351,353,354,355,367,544,547],[273,336,344,348,351,353,354,355,367,538,539,541,542,543,545,546,547],[273,336,344,348,351,353,354,355,367,538,539,540,544,604],[273,336,344,348,351,353,354,355,367,544,545,546,547],[273,336,344,348,351,353,354,355,367,615],[273,336,344,348,351,353,354,355,367,546],[273,336,344,348,351,353,354,355,367,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"00f8e4373a1e16ac481113d0344f1307c4160a27725c00ce7d8c22a3fd690e87","impliedFormat":99},{"version":"bc38a3dc493173316d8c8a729d0906805c9a13e21df45720398732f8e6ccb7fd","impliedFormat":99},{"version":"88a3a6f8c2a1640d8d5fd30d8d86462f8babd86a1e52fab0e8b7f7c141fb348e","impliedFormat":1},{"version":"345f76c854da724803c96f727a3f9c75e26cf95c6e7b8c1064dbc4e7727b74e6","impliedFormat":1},{"version":"ab7b7a15a5d73eb0cfc2b973e580f357f07492bff6608669d7e899e2d49ac9a3","impliedFormat":1},{"version":"3a951f7e78aa0ac206666c255574aaa9465afb20522d86fc93475df6946fca88","impliedFormat":99},{"version":"328b784e011682e234f51573faa09d8c4d51bc0b81f72e6a97f92f804e3b6d7d","impliedFormat":99},{"version":"b104e2da53231a529373174880dc0abfbc80184bb473b6bf2a9a0746bebb663d","impliedFormat":99},{"version":"3d4bb4d84af5f0b348f01c85537da1c7afabc174e48806c8b20901377c57b8e4","impliedFormat":99},{"version":"a2500b15294325d9784a342145d16ef13d9efb1c3c6cb4d89934b2c0d521b4ab","impliedFormat":99},{"version":"79d5c409e84764fabdd276976a31928576dcf9aea37be3b5a81f74943f01f3ff","impliedFormat":99},{"version":"8ea020ea63ecc981b9318fc532323e31270c911a7ade4ba74ab902fcf8281c45","impliedFormat":99},{"version":"c81e1a9b03e4de1225b33ac84aaf50a876837057828e0806d025daf919bf2d51","impliedFormat":99},{"version":"bb7264d8bd6152524f2ef5dae5c260ae60d459bf406202258bd0ce57c79e5a6d","impliedFormat":99},{"version":"fb66165c4976bc21a4fde14101e36c43d46f907489b7b6a5f2a2679108335d4a","impliedFormat":99},{"version":"628c2e0a0b61be3e44f296083e6af9b5a9b6881037dd43e7685ee473930a4404","impliedFormat":99},{"version":"4776f1e810184f538d55c5da92da77f491999054a1a1ee69a2d995ab2e8d1bc0","impliedFormat":99},{"version":"11544c4e626eab113df9432e97a371693c98c17ae4291d2ad425af5ef00e580b","impliedFormat":99},{"version":"e1847b81166d25f29213d37115253c5b82ec9ee78f19037592aa173e017636d5","impliedFormat":99},{"version":"fe0bd60f36509711c4a69c0e00c0111f5ecdc685e6c1a2ae99bd4d56c76c07fc","impliedFormat":99},{"version":"b8f3f4ee9aae88a9cec9797d166209eb2a7e4beb8a15e0fc3c8b90c9682c337d","impliedFormat":99},{"version":"ea3c4f5121fe2e86101c155ebe60b435c729027ae50025b2a4e1d12a476002ae","impliedFormat":99},{"version":"372db10bea0dbe1f8588f82b339152b11847e6a4535d57310292660c8a9acfc5","impliedFormat":99},{"version":"6f9fba6349c16eed21d139d5562295e8d5aafa5abe6e8ebcde43615a80c69ac1","impliedFormat":99},{"version":"1474533e27d0e3e45a417ea153d4612f0adbff055f244a29606a1fae6db56cda","impliedFormat":99},{"version":"c7fd8a79d0495955d55bfea34bbdb85235b0f27b417a81afc395655ef43d091d","impliedFormat":99},{"version":"987405949bfafbb1c93d976c3352fe33bfb85303a79fc5d9588b681e4af6c3b3","impliedFormat":99},{"version":"867bc1f5a168fd86d12d828dfafd77c557f13b4326588615b19e301f6856f70c","impliedFormat":99},{"version":"6beddab08d635b4c16409a748dcd8de38a8e444a501b8e79d89f458ae88579d1","impliedFormat":99},{"version":"1dea5c7bf28569228ffcc83e69e1c759e7f0133c232708e09cfa4d7ed3ec7079","impliedFormat":99},{"version":"6114545678bb75e581982c990597ca3ba7eeef185256a14c906edfc949db2cd1","impliedFormat":99},{"version":"5c8625f8dbbd94ab6ca171d621049c810cce4fce6ec1fd1c24c331d9858dce17","impliedFormat":99},{"version":"af36e5f207299ba2013f981dffacd4a04cdce2dd4bd255fff084e7257bf8b947","impliedFormat":99},{"version":"c69c720b733cdaa3b4542f4c1206d9f0fcf3696f87a6e88adb15db6882fbcd69","impliedFormat":99},{"version":"9c37e66916cbbe7d96301934b665ec712679c3cb99081ccaae4034b987533a59","impliedFormat":99},{"version":"2e1a163ab5b5c2640d7f5a100446bbcaeda953a06439c901b2ae307f7088dc30","impliedFormat":99},{"version":"f0b3406d2bc2c262f218c42a125832e026997278a890ef3549fa49e62177ce86","impliedFormat":99},{"version":"756cf223ca25eb36c413b2a286fa108f19a5ac39dc6d65f2c590dc118f6150df","impliedFormat":99},{"version":"70ce03da8740ca786a1a78b8a61394ecf812dd1acf2564d0ce6be5caf29e58d9","impliedFormat":99},{"version":"e0f5707d91bb950edb6338e83dd31b6902b6620018f6aa5fd0f504c2b0ea61f5","impliedFormat":99},{"version":"0dc7ae20eab8097b0c7a48b5833f6329e976f88af26055cdae6337141ff2c12e","impliedFormat":99},{"version":"76b6db79c0f5b326ff98b15829505efd25d36ce436b47fe59781ac9aec0d7f1b","impliedFormat":99},{"version":"786f3f186af874ea3e34c2aeef56a0beab90926350f3375781c0a3aa844cd76e","impliedFormat":99},{"version":"63dbc8fa1dcbfb8af6c48f004a1d31988f42af171596c5cca57e4c9d5000d291","impliedFormat":99},{"version":"aa235b26568b02c10d74007f577e0fa21a266745029f912e4fba2c38705b3abe","impliedFormat":99},{"version":"3d6d570b5f36cf08d9ad8d93db7ddc90fa7ccc0c177de2e9948bb23cde805d32","impliedFormat":99},{"version":"9a60faaa0d582db70f85a94a3439bd83720a9468928b76b4db561a1a0137fa90","impliedFormat":99},{"version":"627e2ac450dcd71bdd8c1614b5d3a02b214ad92a1621ebeb2642dffb9be93715","impliedFormat":99},{"version":"813514ef625cb8fc3befeec97afddfb3b80b80ced859959339d99f3ad538d8fe","impliedFormat":99},{"version":"624f8a7a76f26b9b0af9524e6b7fa50f492655ab7489c3f5f0ddd2de5461b0c3","impliedFormat":99},{"version":"d6b6fa535b18062680e96b2f9336e301312a2f7bdaeb47c4a5b3114c3de0c08b","impliedFormat":99},{"version":"818e8f95d3851073e92bcad7815367dd8337863aaf50d79e703ac479cca0b6a4","impliedFormat":99},{"version":"29b716ff24d0db64060c9a90287f9de2863adf0ef1efef71dbaba33ebc20b390","impliedFormat":99},{"version":"2530c36527a988debd39fed6504d8c51a3e0f356aaf2d270edd492f4223bdeff","impliedFormat":99},{"version":"2553cfd0ec0164f3ea228c5badd1ba78607d034fc2dec96c781026a28095204b","impliedFormat":99},{"version":"6e943693dbc91aa2c6c520e7814316469c8482d5d93df51178d8ded531bb29ee","impliedFormat":99},{"version":"e74e1249b69d9f49a6d9bfa5305f2a9f501e18de6ab0829ab342abf6d55d958b","impliedFormat":99},{"version":"16f60d6924a9e0b4b9961e42b5e586b28ffd57cdfa236ae4408f7bed9855a816","impliedFormat":99},{"version":"493c2d42f1b6cfe3b13358ff3085b90fa9a65d4858ea4d02d43772c0795006ec","impliedFormat":99},{"version":"3702c7cbcd937d7b96e5376fe562fd77b4598fe93c7595ee696ebbfefddac70f","impliedFormat":99},{"version":"848621f6b65b3963f86c51c8b533aea13eadb045da52515e6e1407dea19b8457","impliedFormat":99},{"version":"c15b679c261ce17551e17a40a42934aeba007580357f1a286c79e8e091ee3a76","impliedFormat":99},{"version":"156108cedad653a6277b1cb292b18017195881f5fe837fb7f9678642da8fa8f2","impliedFormat":99},{"version":"0a0bb42c33e9faf63e0b49a429e60533ab392f4f02528732ecbd62cfc2d54c10","impliedFormat":99},{"version":"70fa95cd7cb511e55c9262246de1f35f3966c50e8795a147a93c538db824cdc8","impliedFormat":99},{"version":"bc28d8cec56b5f91c8a2ec131444744b13f63c53ce670cb31d4dffdfc246ba34","impliedFormat":99},{"version":"7bd87c0667376e7d6325ada642ec29bf28e940cb146d21d270cac46b127e5313","impliedFormat":99},{"version":"0318969deede7190dd3567433a24133f709874c5414713aac8b706a5cb0fe347","impliedFormat":99},{"version":"3770586d5263348c664379f748428e6f17e275638f8620a60490548d1fada8b4","impliedFormat":99},{"version":"ff65e6f720ba4bf3da5815ca1c2e0df2ece2911579f307c72f320d692410e03d","impliedFormat":99},{"version":"edb4f17f49580ebcec71e1b7217ad1139a52c575e83f4f126db58438a549b6df","impliedFormat":99},{"version":"353c0cbb6e39e73e12c605f010fddc912c8212158ee0c49a6b2e16ede22cdaab","impliedFormat":99},{"version":"e125fdbea060b339306c30c33597b3c677e00c9e78cd4bf9a15b3fb9474ebb5d","impliedFormat":99},{"version":"ee141f547382d979d56c3b059fc12b01a88b7700d96f085e74268bc79f48c40a","impliedFormat":99},{"version":"1d64132735556e2a1823044b321c929ad4ede45b81f3e04e0e23cf76f4cbf638","impliedFormat":99},{"version":"8b4a3550a3cac035fe928701bc046f5fac76cca32c7851376424b37312f4b4ca","impliedFormat":99},{"version":"5fd7f9b36f48d6308feba95d98817496274be1939a9faa5cd9ed0f8adf3adf3a","impliedFormat":99},{"version":"15a8f79b1557978d752c0be488ee5a70daa389638d79570507a3d4cfc620d49d","impliedFormat":99},{"version":"d4c14ea7d76619ef4244e2c220c2caeec78d10f28e1490eeac89df7d2556b79f","impliedFormat":99},{"version":"8096207a00346207d9baf7bc8f436ef45a20818bf306236a4061d6ccc45b0372","impliedFormat":99},{"version":"040f2531989793c4846be366c100455789834ba420dfd6f36464fe73b68e35b6","impliedFormat":99},{"version":"c5c7020a1d11b7129eb8ddffb7087f59c83161a3792b3560dcd43e7528780ab0","impliedFormat":99},{"version":"d1f97ea020060753089059e9b6de1ab05be4cb73649b595c475e2ec197cbce0f","impliedFormat":99},{"version":"b5ddca6fd676daf45113412aa2b8242b8ee2588e99d68c231ab7cd3d88b392fa","impliedFormat":99},{"version":"77404ec69978995e3278f4a2d42940acbf221da672ae9aba95ffa485d0611859","impliedFormat":99},{"version":"4e6672fb142798b69bcb8d6cd5cc2ec9628dbea9744840ee3599b3dcd7b74b09","impliedFormat":99},{"version":"609653f5b74ef61422271a28dea232207e7ab8ad1446de2d57922e3678160f01","impliedFormat":99},{"version":"9f96251a94fbff4038b464ee2d99614bca48e086e1731ae7a2b5b334826d3a86","impliedFormat":99},{"version":"cacbb7f3e679bdea680c6c609f4403574a5de8b66167b8867967083a40821e2a","impliedFormat":99},{"version":"ee4cf97e8bad27c9e13a17a9f9cbd86b32e9fbc969a5c3f479dafb219209848c","impliedFormat":99},{"version":"3a4e35b6e99ed398e77583ffc17f8774cb4253f8796c0e04ce07c26636fed4a9","impliedFormat":99},{"version":"08d323cb848564baef1ecbe29df14f7ad84e5b2eaf2e02ea8cb422f069dcb2fa","impliedFormat":99},{"version":"a05b53646fa669b87d8b97c1fb7c0183d771680fdd1276b12e68bed4e84cf556","impliedFormat":99},{"version":"c3b9c02a31b36dd3a4067f420316c550f93d463e46b2704391100428e145fd7f","impliedFormat":99},{"version":"b2a4d01fcf005530c3f8689ac0197e5fd6b75eb031e73ca39e5a27d41793a5d8","impliedFormat":99},{"version":"e99d9167596f997dd2da0de0751a9f0e2f4100f07bddf049378719191aee87f6","impliedFormat":99},{"version":"40cc853264e24e0578580194c76e25628acdd1111b54ec8abf59b834c4942839","impliedFormat":99},{"version":"403971c465292dedc8dff308f430c6b69ec5e19ea98d650dae40c70f2399dc14","impliedFormat":99},{"version":"fd3774aa27a30b17935ad360d34570820b26ec70fa5fcfd44c7e884247354d37","impliedFormat":99},{"version":"7b149b38e54fe0149fe500c5d5a049654ce17b1705f6a1f72dd50d84c6a678b9","impliedFormat":99},{"version":"3eb76327823b6288eb4ed4648ebf4e75cf47c6fbc466ed920706b801399f7dc3","impliedFormat":99},{"version":"c6a219d0d39552594a4cc75970768004f99684f28890fc36a42b853af04997b7","impliedFormat":99},{"version":"2110d74b178b022ca8c5ae8dcc46e759c34cf3b7e61cb2f8891fd8d24cb614ef","impliedFormat":99},{"version":"38f5e025404a3108f5bb41e52cead694a86d16ad0005e0ef7718a2a31e959d1e","impliedFormat":99},{"version":"8db133d270ebb1ba3fa8e2c4ab48df2cc79cb03a705d47ca9f959b0756113d3d","impliedFormat":99},{"version":"fc9294185089a62f8287130bc100fa5ab11f3e6af8874127bbdf7600f19913ee","impliedFormat":99},{"version":"f06e5783d10123b74b14e141426a80234b9d6e5ad94bfc4850ea912719f4987c","impliedFormat":99},{"version":"de9466be4b561ad0079ac95ca7445c99fdf45ef115a93af8e2e933194b3cdf4c","impliedFormat":99},{"version":"0c1eed961c15e1242389b0497628709f59d7afd50d5a1955daa10b5bd3b68fc2","impliedFormat":99},{"version":"5e07a9f7f130e5404c202bf7b0625a624c9d266b980576f5d62608ef21d96eab","impliedFormat":99},{"version":"2f97d5063ab69bf32d6417d71765fc154dc6ff7c16700db7c4af5341a965c277","impliedFormat":99},{"version":"a8a9459dd76ef5eeef768da4ce466c5539d73b26334131bd1dd6cbd74ce48fa2","impliedFormat":99},{"version":"123ff203ffba727213e5095b9a59091cdbc9d1d94bae0d6adb98060ef410016c","impliedFormat":99},{"version":"9e4d81dd52d5a8b6c159c0b2f2b5fbe2566f12fcc81f7ba7ebb46ca604657b45","impliedFormat":99},{"version":"9ee245e7c6aa2d81ee0d7f30ff6897334842c469b0e20da24b3cddc6f635cc06","impliedFormat":99},{"version":"e7d5132674ddcd01673b0517eebc44c17f478126284c3eabd0a552514cb992bb","impliedFormat":99},{"version":"a820710a917f66fa88a27564465a033c393e1322a61eb581d1f20e0680b498f1","impliedFormat":99},{"version":"19086752f80202e6a993e2e45c0e7fc7c7fc4315c4805f3464625f54d919fa2e","impliedFormat":99},{"version":"141aebe2ee4fecd417d44cf0dabf6b80592c43164e1fbd9bfaf03a4ec377c18e","impliedFormat":99},{"version":"72c35a5291e2e913387583717521a25d15f1e77d889191440dc855c7e821b451","impliedFormat":99},{"version":"ec1c67b32d477ceeebf18bdeb364646d6572e9dd63bb736f461d7ea8510aca4f","impliedFormat":99},{"version":"fb555843022b96141c2bfaf9adcc3e5e5c2d3f10e2bcbd1b2b666bd701cf9303","impliedFormat":99},{"version":"f851083fc20ecc00ff8aaf91ba9584e924385768940654518705423822de09e8","impliedFormat":99},{"version":"c8d53cdb22eedf9fc0c8e41a1d9a147d7ad8997ed1e306f1216ed4e8daedb6b3","impliedFormat":99},{"version":"6c052f137bab4ba9ed6fd76f88a8d00484df9d5cb921614bb4abe60f51970447","impliedFormat":99},{"version":"d888e70d2e4a05f47573548bf836cab96575aab3b1c264693100f279514ac8ca","impliedFormat":99},{"version":"7d5c2df0c3706f45b77970232aa3a38952561311ccc8fcb7591e1b7a469ad761","impliedFormat":99},{"version":"2c41502b030205006ea3849c83063c4327342fbf925d8ed93b18309428fdd832","impliedFormat":99},{"version":"d12eecede214f8807a719178d7d7e2fc32f227d4705d123c3f45d8a3b5765f38","impliedFormat":99},{"version":"c8893abd114f341b860622b92c9ffc8c9eb9f21f6541bd3cbc9a4aa9b1097e42","impliedFormat":99},{"version":"825674da70d892b7e32c53f844c5dfce5b15ea67ceda4768f752eed2f02d8077","impliedFormat":99},{"version":"2c676d27ef1afbc8f8e514bb46f38550adf177ae9b0102951111116fa7ea2e10","impliedFormat":99},{"version":"a6072f5111ea2058cb4d592a4ee241f88b198498340d9ad036499184f7798ae2","impliedFormat":99},{"version":"ab87c99f96d9b1bf93684b114b27191944fef9a164476f2c6c052b93eaac0a4f","impliedFormat":99},{"version":"13e48eaca1087e1268f172607ae2f39c72c831a482cab597076c6073c97a15e7","impliedFormat":99},{"version":"19597dbe4500c782a4252755510be8324451847354cd8e204079ae81ab8d0ef6","impliedFormat":99},{"version":"f7d487e5f0104f0737951510ea361bc919f5b5f3ebc51807f81ce54934a3556f","impliedFormat":99},{"version":"efa8c5897e0239017e5b53e3f465d106b00d01ee94c9ead378a33284a2998356","impliedFormat":99},{"version":"fe3c53940b26832930246d4c39d6e507c26a86027817882702cf03bff314fa1d","impliedFormat":99},{"version":"53ee33b91d4dc2787eccebdbd396291e063db1405514bb3ab446e1ca3fd81a90","impliedFormat":99},{"version":"c4a97da118b4e6dde7c1daa93c4da17f0c4eedece638fc6dcc84f4eb1d370808","impliedFormat":99},{"version":"71666363fbdb0946bfc38a8056c6010060d1a526c0584145a9560151c6962b4f","impliedFormat":99},{"version":"1326f3630d26716257e09424f33074a945940afd64f2482e2bbc885258fca6bb","impliedFormat":99},{"version":"cc2eb5b23140bbceadf000ef2b71d27ac011d1c325b0fc5ecd42a3221db5fb2e","impliedFormat":99},{"version":"d04f5f3e90755ed40b25ed4c6095b6ad13fc9ce98b34a69c8da5ed38e2dbab5a","impliedFormat":99},{"version":"280b04a2238c0636dad2f25bbbbac18cf7bb933c80e8ec0a44a1d6a9f9d69537","impliedFormat":99},{"version":"0e9a2d784877b62ad97ed31816b1f9992563fdda58380cd696e796022a46bfdf","impliedFormat":99},{"version":"1b1411e7a3729bc632d8c0a4d265de9c6cbba4dc36d679c26dad87507faedee3","impliedFormat":99},{"version":"c478cfb0a2474672343b932ea69da64005bbfc23af5e661b907b0df8eb87bcb7","impliedFormat":99},{"version":"1a7bff494148b6e66642db236832784b8b2c9f5ad9bff82de14bcdb863dadcd9","impliedFormat":99},{"version":"65e6ad2d939dd38d03b157450ba887d2e9c7fd0f8f9d3008c0d1e59a0d8a73b4","impliedFormat":99},{"version":"f72b400dbf8f27adbda4c39a673884cb05daf8e0a1d8152eec2480f5700db36c","impliedFormat":99},{"version":"347f6fe4308288802eb123596ad9caf06755e80cfc7f79bbe56f4141a8ee4c50","impliedFormat":99},{"version":"5f5baa59149d3d6d6cef2c09d46bb4d19beb10d6bee8c05b7850c33535b3c438","impliedFormat":99},{"version":"a8f0c99380c9e91a73ecfc0a8582fbdefde3a1351e748079dc8c0439ea97b6db","impliedFormat":99},{"version":"be02e3c3cb4e187fd252e7ae12f6383f274e82288c8772bb0daf1a4e4af571ad","impliedFormat":99},{"version":"82ca40fb541799273571b011cd9de6ee9b577ef68acc8408135504ae69365b74","impliedFormat":99},{"version":"e671e3fc9b6b2290338352606f6c92e6ecf1a56459c3f885a11080301ca7f8de","impliedFormat":99},{"version":"a2e4b90260194318b1fa1e6b0554d257a0862c10e982c8907d30d1e7f3d463af","impliedFormat":99},{"version":"5559ab4aa1ba9fac7225398231a179d63a4c4dccd982a17f09404b536980dae8","impliedFormat":99},{"version":"2d7b9e1626f44684252d826a8b35770b77ce7c322734a5d3236b629a301efdcf","impliedFormat":99},{"version":"5b8dafbb90924201f655931d429a4eceb055f11c836a6e9cbc7c3aecf735912d","impliedFormat":99},{"version":"0b9be1f90e5e154b61924a28ed2de133fd1115b79c682b1e3988ac810674a5c4","impliedFormat":99},{"version":"7a9477ba5fc17786ee74340780083f39f437904229a0cd57fc9a468fd6567eb8","impliedFormat":99},{"version":"3da1dd252145e279f23d85294399ed2120bf8124ed574d34354a0a313c8554b6","impliedFormat":99},{"version":"e5c4080de46b1a486e25a54ddbb6b859312359f9967a7dc3c9d5cf4676378201","impliedFormat":99},{"version":"cfe1cdf673d2db391fd1a1f123e0e69c7ca06c31d9ac8b35460130c5817c8d29","impliedFormat":99},{"version":"b9701f688042f44529f99fd312c49fea853e66538c19cfcbb9ef024fdb5470cc","impliedFormat":99},{"version":"6daa62c5836cc12561d12220d385a4a243a4a5a89afd6f2e48009a8dd8f0ad83","impliedFormat":99},{"version":"c74550758053cf21f7fea90c7f84fa66c27c5f5ac1eca77ce6c2877dbfdec4d1","impliedFormat":99},{"version":"bd8310114a3a5283faac25bfbfc0d75b685a3a3e0d827ee35d166286bdd4f82e","impliedFormat":99},{"version":"1459ae97d13aeb6e457ccffac1fbb5c5b6d469339729d9ef8aeb8f0355e1e2c9","impliedFormat":99},{"version":"1bf03857edaebf4beba27459edf97f9407467dc5c30195425cb8a5d5a573ea52","impliedFormat":99},{"version":"f6b4833d66c12c9106a3299e520ed46f9a4c443cefc22c993315c4bb97a28db1","impliedFormat":99},{"version":"746c02f8b99bd90c4d135badaab575c6cfce0d030528cf90190c8914b0934ea3","impliedFormat":99},{"version":"a858ba8df5e703977dee467b10af084398919e99c9e42559180e75953a1f6ef6","impliedFormat":99},{"version":"d2dcd6105c195d0409abd475b41363789c63ae633282f04465e291a68a151685","impliedFormat":99},{"version":"0b569ed836f0431c2efaef9b6017e8b700a7fed319866d7667f1189957275045","impliedFormat":99},{"version":"9371612fd8638d7f6a249a14843132e7adb0b5c84edba9ed7905e835b644c013","impliedFormat":99},{"version":"0c72189b6ec67331476a36ec70a2b8ce6468dc4db5d3eb52deb9fefbd6981ebb","impliedFormat":99},{"version":"af8dd6bb70bfcb2c6b2de0d42240c2c952b9040af259a287e78eaf883ef1ce0d","impliedFormat":99},{"version":"7e4a27fd17dbb256314c2513784236f2ae2023573e83d0e65ebddfda336701db","impliedFormat":99},{"version":"131ecac1c7c961041df80a1dc353223af4e658d56ba1516317f79bd5400cffeb","impliedFormat":99},{"version":"f3a55347fb874828e442c2916716d56552ac3478204c29c0d47e698c00eb5d28","impliedFormat":99},{"version":"49ebbdfe7427d784ccdc8325bdecc8dda1719a7881086f14751879b4f8d70c21","impliedFormat":99},{"version":"c1692845412646f17177eb62feb9588c8b5d5013602383f02ae9d38f3915020c","impliedFormat":99},{"version":"b1b440e6c973d920935591a3d360d79090b8cf58947c0230259225b02cf98a83","impliedFormat":99},{"version":"defc2ae12099f46649d12aa4872ce23ba43fba275920c00c398487eaf091bbae","impliedFormat":99},{"version":"620390fbef44884902e4911e7473531e9be4db37eeef2da52a34449d456b4617","impliedFormat":99},{"version":"e60440cbd3ec916bc5f25ada3a6c174619745c38bfca58d3554f7d62905dc376","impliedFormat":99},{"version":"86388eda63dcb65b4982786eec9f80c3ef21ca9fb2808ff58634e712f1f39a27","impliedFormat":99},{"version":"022cd098956e78c9644e4b3ad1fe460fac6914ca9349d6213f518386baf7c96b","impliedFormat":99},{"version":"dfc67e73325643e92f71f94276b5fb3be09c59a1eeee022e76c61ae99f3eda4b","impliedFormat":99},{"version":"8c3d6c9abaa0b383f43cac0c227f063dc4018d851a14b6c2142745a78553c426","impliedFormat":99},{"version":"ee551dc83df0963c1ee03dc32ce36d83b3db9793f50b1686dc57ec2bbffc98af","impliedFormat":99},{"version":"968832c4ffd675a0883e3d208b039f205e881ae0489cc13060274cf12e0e4370","impliedFormat":99},{"version":"c593ca754961cfd13820add8b34da35a114cda7215d214e4177a1b0e1a7f3377","impliedFormat":99},{"version":"ed88c51aa3b33bb2b6a8f2434c34f125946ba7b91ed36973169813fdad57f1ec","impliedFormat":99},{"version":"a9ea477d5607129269848510c2af8bcfd8e262ebfbd6cd33a6c451f0cd8f5257","impliedFormat":99},{"version":"de108d09c8d2ecafe735b13700233a9cdd71062173db76e3727d83adea2dd5eb","impliedFormat":99},{"version":"724301575c20610960dfc1718c3e1fff06a98f7eb43880ac5a6ac5a4a7c5fc1e","impliedFormat":99},{"version":"744db84874c9d61a10b535ad656101162f8c05ab8730a779787f12fe688fda12","impliedFormat":99},{"version":"20fe9894375c7498810253156f4ed11facd79b76d9b4ade2d185316f72c36d74","impliedFormat":99},{"version":"6e3b69c24394371c37105fa80c38b328a43d04b502f73c6ea2ed4399030a57e0","impliedFormat":99},{"version":"b5a3334ef22a8bffff6fd455cb0fc787bda006ec252d6ae7c78cbb20a29f7fb6","impliedFormat":99},{"version":"3a11327286ba416ff2adde5f2e223839d6eea54920e30abd56e3e40ff555169d","impliedFormat":99},{"version":"86d4ff8ba66b5ea1df375fe6092d2b167682ccd5dd0d9b003a7d30d95a0cda32","impliedFormat":99},{"version":"93d28b4eb12c68fccc1f2fc04a4ef83ea3b2a03b18055d3bf29cab267aa7042e","impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"438b41419b1df9f1fbe33b5e1b18f5853432be205991d1b19f5b7f351675541e","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"074de5b2fdead0165a2757e3aaef20f27a6347b1c36adea27d51456795b37682","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"24371e69a38fc33e268d4a8716dbcda430d6c2c414a99ff9669239c4b8f40dea","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"3e11fce78ad8c0e1d1db4ba5f0652285509be3acdd519529bc8fcef85f7dafd9","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"c63b9ada8c72f95aac5db92aea07e5e87ec810353cdf63b2d78f49a58662cf6c","impliedFormat":1},{"version":"1cc2a09e1a61a5222d4174ab358a9f9de5e906afe79dbf7363d871a7edda3955","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"b64d4d1c5f877f9c666e98e833f0205edb9384acc46e98a1fef344f64d6aba44","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"c9381908473a1c92cb8c516b184e75f4d226dad95c3a85a5af35f670064d9a2f","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"3fad5618174d74a34ee006406d4eb37e8d07dd62eb1315dbf52f48d31a337547","impliedFormat":1},{"version":"7e49f52a159435fc8df4de9dc377ef5860732ca2dc9efec1640531d3cf5da7a3","impliedFormat":1},{"version":"dd4bde4bdc2e5394aed6855e98cf135dfdf5dd6468cad842e03116d31bbcc9bc","impliedFormat":1},{"version":"4d4e879009a84a47c05350b8dca823036ba3a29a3038efed1be76c9f81e45edf","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b50a819485ffe0d237bf0d131e92178d14d11e2aa873d73615a9ec578b341f5","impliedFormat":1},{"version":"9ba13b47cb450a438e3076c4a3f6afb9dc85e17eae50f26d4b2d72c0688c9251","impliedFormat":1},{"version":"b64cd4401633ea4ecadfd700ddc8323a13b63b106ac7127c1d2726f32424622c","impliedFormat":1},{"version":"37c6e5fe5715814412b43cc9b50b24c67a63c4e04e753e0d1305970d65417a60","impliedFormat":1},{"version":"1d024184fb57c58c5c91823f9d10b4915a4867b7934e89115fd0d861a9df27c8","impliedFormat":1},{"version":"ee0e4946247f842c6dd483cbb60a5e6b484fee07996e3a7bc7343dfb68a04c5d","impliedFormat":1},{"version":"ef051f42b7e0ef5ca04552f54c4552eac84099d64b6c5ad0ef4033574b6035b8","impliedFormat":1},{"version":"853a43154f1d01b0173d9cbd74063507ece57170bad7a3b68f3fa1229ad0a92f","impliedFormat":1},{"version":"56231e3c39a031bfb0afb797690b20ed4537670c93c0318b72d5180833d98b72","impliedFormat":1},{"version":"5cc7c39031bfd8b00ad58f32143d59eb6ffc24f5d41a20931269011dccd36c5e","impliedFormat":1},{"version":"12d602a8fe4c2f2ba4f7804f5eda8ba07e0c83bf5cf0cda8baffa2e9967bfb77","affectsGlobalScope":true,"impliedFormat":1},{"version":"a856ab781967b62b288dfd85b860bef0e62f005ed4b1b8fa25c53ce17856acaf","impliedFormat":1},{"version":"cc25940cfb27aa538e60d465f98bb5068d4d7d33131861ace43f04fe6947d68f","impliedFormat":1},{"version":"8db46b61a690f15b245cf16270db044dc047dce9f93b103a59f50262f677ea1f","impliedFormat":1},{"version":"01ff95aa1443e3f7248974e5a771f513cb2ac158c8898f470a1792f817bee497","impliedFormat":1},{"version":"757227c8b345c57d76f7f0e3bbad7a91ffca23f1b2547cbed9e10025816c9cb7","impliedFormat":1},{"version":"959d0327c96dd9bb5521f3ed6af0c435996504cc8dd46baa8e12cb3b3518cef1","impliedFormat":1},{"version":"e1c1a0b4d1ead0de9eca52203aeb1f771f21e6238d6fcd15aa56ac2a02f1b7bf","impliedFormat":1},{"version":"101f482fd48cb4c7c0468dcc6d62c843d842977aea6235644b1edd05e81fbf22","impliedFormat":1},{"version":"266bee0a41e9c3ba335583e21e9277ae03822402cf5e8e1d99f5196853613b98","affectsGlobalScope":true,"impliedFormat":1},{"version":"386606f8a297988535cb1401959041cfa7f59d54b8a9ed09738e65c98684c976","impliedFormat":1},{"version":"3ef397f12387eff17f550bc484ea7c27d21d43816bbe609d495107f44b97e933","impliedFormat":1},{"version":"1023282e2ba810bc07905d3668349fbd37a26411f0c8f94a70ef3c05fe523fcf","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"e236b5eba291f51bdf32c231673e6cab81b5410850e61f51a7a524dddadc0f95","impliedFormat":1},{"version":"ce8653341224f8b45ff46d2a06f2cacb96f841f768a886c9d8dd8ec0878b11bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f2c62938251b45715fd2a9887060ec4fbc8724727029d1cbce373747252bdd7","impliedFormat":1},{"version":"e3ace08b6bbd84655d41e244677b474fd995923ffef7149ddb68af8848b60b05","impliedFormat":1},{"version":"132580b0e86c48fab152bab850fc57a4b74fe915c8958d2ccb052b809a44b61c","impliedFormat":1},{"version":"90a278f5fab7557e69e97056c0841adf269c42697194f0bd5c5e69152637d4b3","impliedFormat":1},{"version":"69c9a5a9392e8564bd81116e1ed93b13205201fb44cb35a7fde8c9f9e21c4b23","impliedFormat":1},{"version":"5f8fc37f8434691ffac1bfd8fc2634647da2c0e84253ab5d2dd19a7718915b35","impliedFormat":1},{"version":"5981c2340fd8b076cae8efbae818d42c11ffc615994cb060b1cd390795f1be2b","impliedFormat":1},{"version":"f263485c9ca90df9fe7bb3a906db9701997dc6cae86ace1f8106ac8d2f7f677b","impliedFormat":1},{"version":"1edcf2f36fc332615846bde6dcc71a8fe526065505bc5e3dcfd65a14becdf698","affectsGlobalScope":true,"impliedFormat":1},{"version":"0250da3eb85c99624f974e77ef355cdf86f43980251bc371475c2b397ba55bcd","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"3d3a5f27ffbc06c885dd4d5f9ee20de61faf877fe2c3a7051c4825903d9a7fdc","impliedFormat":1},{"version":"12806f9f085598ef930edaf2467a5fa1789a878fba077cd27e85dc5851e11834","impliedFormat":1},{"version":"1dbca38aa4b0db1f4f9e6edacc2780af7e028b733d2a98dd3598cd235ca0c97d","impliedFormat":1},{"version":"a43fe41c33d0a192a0ecaf9b92e87bef3709c9972e6d53c42c49251ccb962d69","impliedFormat":1},{"version":"a177959203c017fad3ecc4f3d96c8757a840957a4959a3ae00dab9d35961ca6c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc727ccf9b36e257ff982ea0badeffbfc2c151802f741bddff00c6af3b784cf","impliedFormat":1},{"version":"19143c930aef7ccf248549f3e78992f2f1049118ec5d4622e95025057d8e392b","impliedFormat":1},{"version":"4844a4c9b4b1e812b257676ed8a80b3f3be0e29bf05e742cc2ea9c3c6865e6c6","impliedFormat":1},{"version":"064878a60367e0407c42fb7ba02a2ea4d83257357dc20088e549bd4d89433e9c","impliedFormat":1},{"version":"cca8917838a876e2d7016c9b6af57cbf11fdf903c5fdd8e613fa31840b2957bf","impliedFormat":1},{"version":"d91ae55e4282c22b9c21bc26bd3ef637d3fe132507b10529ae68bf76f5de785b","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"7e8a671604329e178bb479c8f387715ebd40a091fc4a7552a0a75c2f3a21c65c","impliedFormat":1},{"version":"41ef7992c555671a8fe54db302788adefa191ded810a50329b79d20a6772d14c","impliedFormat":1},{"version":"041a7781b9127ab568d2cdcce62c58fdea7c7407f40b8c50045d7866a2727130","impliedFormat":1},{"version":"4c5e90ddbcd177ad3f2ffc909ae217c87820f1e968f6959e4b6ba38a8cec935e","impliedFormat":1},{"version":"b70dd9a44e1ac42f030bb12e7d79117eac7cb74170d72d381a1e7913320af23a","impliedFormat":1},{"version":"55cdbeebe76a1fa18bbd7e7bf73350a2173926bd3085bb050cf5a5397025ee4e","impliedFormat":1},{"version":"3a80bc85f38526ca3b08007ee80712e7bb0601df178b23fbf0bf87036fce40ce","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"2931540c47ee0ff8a62860e61782eb17b155615db61e36986e54645ec67f67c2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"f6faf5f74e4c4cc309a6c6a6c4da02dbb840be5d3e92905a23dcd7b2b0bd1986","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"33e981bf6376e939f99bd7f89abec757c64897d33c005036b9a10d9587d80187","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"3bacf516d686d08682751a3bd2519ea3b8041a164bfb4f1d35728993e70a2426","impliedFormat":1},{"version":"7fb266686238369442bd1719bc0d7edd0199da4fb8540354e1ff7f16669b4323","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"c183b931b68ad184bc8e8372bf663f3d33304772fb482f29fb91b3c391031f3e","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"48cc3ec153b50985fb95153258a710782b25975b10dd4ac8a4f3920632d10790","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"e1528ca65ac90f6fa0e4a247eb656b4263c470bb22d9033e466463e13395e599","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"866078923a56d026e39243b4392e282c1c63159723996fa89243140e1388a98d","impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"14e9acf826baba0ef4b5665704084896e7bcc06f65a9ab13af7e93d27d6b7069","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"21adf13435b9b748529c8cedf80f884e5130b9684188120a686cd2b26a2059c7","impliedFormat":1},{"version":"eec76bf6b9346f3f95fa402621b889489e96930e72295b0369022f332e9b4a6a","impliedFormat":1},{"version":"0ecd58f413f9bc3b7d4383eae31b0c8fc576985cd7404d6f99f8c643543ade74","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"d33ce35e3f9cfcc1d94eca415bdd3bde94d5b153ffdd33e6c4455c029986c630","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"98498b101803bb3dde9f76a56e65c14b75db1cc8bec5f4db72be541570f74fc5","impliedFormat":1},{"version":"4dc59f6e1dbf3d5f66660fceabe6c174d3261b37b696ae1854f0dbaf255fc753","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"436d7b4543b340b0f3eef4310d524242e41369b9652aa9c70428767c4dcac455","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"114f493b30f364255290472111b5a4791d5902c308645670cd0401429cbc6930","impliedFormat":1},{"version":"b3fb72492a07a76f7bfa29ecadd029eea081df11512e4dfe6f930a5a9cb1fb75","impliedFormat":1},{"version":"2948774a5104c8ee235318dfdd3c8e2402c053b8fabc59e0cad1de8302d91cbd","impliedFormat":99},{"version":"014ba72e2add59d6d2d2e82166647982c824639e2902ccd7b3103cf720a0cb65","impliedFormat":99},{"version":"e22273698b7aad4352f0eb3c981d510b5cf6b17fde2eeaa5c018bb065d15558f","impliedFormat":99},{"version":"b78c801c3c21015ee487f6494448bcff55bb6b61f41172dfc2c26f2218d99138","impliedFormat":99},{"version":"de97e016d8dd4869febd5bccce02eb96957089d04b74ea5d1dc0e66112493b64","impliedFormat":99},{"version":"671ccab2e6a253d2516c0e4699b3077fc30cdb70b4436d8c79d76c91266a1a94","impliedFormat":99},{"version":"9b40cdceea5bb43a6e998cc6f8d47480741de5f336d9147653a5d9004175f6c1","impliedFormat":99},{"version":"e760f7860d08e9d42b6ecd7dd341602fbc0c13d60eb30beaf1153f1c7c44d66d","impliedFormat":99},{"version":"fb04e1ca667399e7302c033656cc285e6c1cff9c29f264cf229dd25e3962a762","impliedFormat":99},{"version":"8e9587d80cf4523b1655a74c5ff445313514b5de82af24bd9c2b2de764b8aa08","impliedFormat":99},{"version":"c0cc44b0ad2fd65c933d187c4faad6157efbed33c3c21023802aa6a89d9b9d13","impliedFormat":99},{"version":"ddaf5d3ddc45282b19fb0fecec91c87fc9b4d1f45c2ee611677345c81383c5c5","impliedFormat":99},{"version":"5668033966c8247576fc316629df131d6175d24ccf22940324c19c159671e1c1","impliedFormat":99},{"version":"8db9325466c3c367e83b41ce5045757ad87a5468001b8bd3021bc406ac526bbe","impliedFormat":99},{"version":"d76df1670eeb97afbab6c87b8cd31bbd09dbf9026ff0ca533b5d7d3fc0291f79","impliedFormat":99},{"version":"13902404b0a9593a2c2f9c78ac7464820129fe7e5a660ef53a5cc8f3701f8350","impliedFormat":99},{"version":"2484f21803a2f6d8e34230c1c4354288da5d842182d7102a49a004c819c4b8b3","impliedFormat":99},{"version":"49af73d71b88a99b1a211ec02bacd321c21397062d253c605bb8d140082eb7b0","impliedFormat":99},{"version":"50cf14b8f0fc2722c11794ca2a06565b1f29e266491da75c745894960ebbce06","impliedFormat":99},{"version":"a50de7f1a7eadab7732d80dcf9c8a0c0d7d00e33315425316757006b5bec6e46","impliedFormat":99},{"version":"cd8a4297d0ab56dc571dadd2845e558c9d979fe1e120a0dec537935bc8a36dd2","impliedFormat":99},{"version":"079a12cb0e0c42655d77da5185e882b4cc94bd5c6c2131171a9289fc1f4287fc","impliedFormat":99},{"version":"d4ce52c42c23981d958206037138e05f7b48d41faa1cfaba7e9eecce8c2e5489","impliedFormat":99},{"version":"13e89d7ea0a835050a528bcdc3ec35355fa380b6aec3342c4ce188641e87b308","impliedFormat":99},{"version":"167edfac7664bec77aa2efb2ce9d515c41b5cc4269091a946b3fa6ec4e7e8738","impliedFormat":99},{"version":"218997a627f0efc4b8be5e6bc0b58e0c9edf250baa3674b661d3f7e6a7ef21e8","impliedFormat":99},{"version":"c3f1acbd39f587a7539d435d6c78ce8647b3bfdc5435df153a70cb2656b52b80","impliedFormat":99},{"version":"4300d9580defd0f6d94f82a491160f843e63221c88abb4c23f44cc56483fbebc","impliedFormat":99},{"version":"4fd4ce53e88ab3bc2e70fd0ec7c22f22ff8516e297f06aa3f7aeb18d34950a17","impliedFormat":99},{"version":"9c923a5cbd56e60b5543f61cd584b6d9bc298934dc576dced03df76c31c6c29c","impliedFormat":99},{"version":"4d4551dcb3fd19a4f22aaa63c6c391d42ce44a15602a6f6a19d582709edb24d9","impliedFormat":99},{"version":"a76075b5aba8187b1fc5c8f565745daed6e4341e64b44e6ec41412a16d575d62","impliedFormat":99},{"version":"f836bf3653e31c3bba120071196c95d416b83c5d860ce27549975f8785cd670a","impliedFormat":99},{"version":"5351b68f49cea8a4e61c2e45326039c2c4b66698867518114311b905a9fdd318","impliedFormat":99},{"version":"f687f35c2206a319dc7d8f0b751e182638c912838ff54034fb782beae50f7cac","impliedFormat":99},{"version":"2a39191702909b50e5170eebcb9a76a6b2ddc849fd45bb9f605c20f5f10d7782","impliedFormat":99},{"version":"7a81f15892b1c8d0cbfb35605038ce5c6d0cf93542946aa0b8c415dbefdea1cd","impliedFormat":99},{"version":"d6fc46b15a18da0aaf99dba1fc1109b1b4ade3f978c55772d99f6b8cc47f4753","impliedFormat":99},{"version":"80f5787c393fd302ab7047b2c098fc9fd7a08982569112ad38c30da590d526a3","impliedFormat":99},{"version":"9fd7d60e314f01c950ba31932c150dcec5db2c82de3c7fe0d0d24ee8b54f1fca","impliedFormat":99},{"version":"e70f1e3fa1f4510a185791ef5a412ca2805a3b767e3741a04d5d8bb5eb8fef8c","impliedFormat":99},{"version":"810a438b2b9b621c7dc6bca83cf06819e5ed3a201843c31cfd6064de7af6132c","impliedFormat":99},{"version":"2ab8a1dd5c345b745f323c0b971d42bfde34fb948bba274160105a5a757d8ca8","impliedFormat":99},{"version":"647e1d0a723a7caa54487d50dbfd952f184a110899ce3f331f3c451f6fbd083f","impliedFormat":99},{"version":"d9f668532f6de0ee1e2ef2ac79bab9d924118f4286a879ab23cecfbad759df85","impliedFormat":99},{"version":"ce05bfaa5ae3619a08d18873f8f6407a58aa686914dd22ba57d1537a496fbf2d","impliedFormat":99},{"version":"41bf8c3193b575946682ca243de53370f61917035c3ff3fb747067bc680f2509","impliedFormat":99},{"version":"b46e00743b35707b18a9cdbcbfe121591995dea94a9484659b47fc37b902422a","impliedFormat":99},{"version":"ef2e52be34d23614795540931903a7312193c7b9902e61909b7977126d64dfea","impliedFormat":99},{"version":"90fa9e58693818b05cc5409cabb4cfec618826b96a30cff6f69f4eb692bff067","impliedFormat":99},{"version":"d3cfde44f8089768ebb08098c96d01ca260b88bccf238d55eee93f1c620ff5a5","impliedFormat":1},{"version":"293eadad9dead44c6fd1db6de552663c33f215c55a1bfa2802a1bceed88ff0ec","impliedFormat":1},{"version":"36eb5babc665b890786550d4a8cb20ef7105673a6d5551fbdd7012877bb26942","impliedFormat":1},{"version":"fec412ded391a7239ef58f455278154b62939370309c1fed322293d98c8796a6","impliedFormat":1},{"version":"e3498cf5e428e6c6b9e97bd88736f26d6cf147dedbfa5a8ad3ed8e05e059af8a","impliedFormat":1},{"version":"dba3f34531fd9b1b6e072928b6f885aa4d28dd6789cbd0e93563d43f4b62da53","impliedFormat":1},{"version":"f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","impliedFormat":1},{"version":"e4b03ddcf8563b1c0aee782a185286ed85a255ce8a30df8453aade2188bbc904","impliedFormat":1},{"version":"2329d90062487e1eaca87b5e06abcbbeeecf80a82f65f949fd332cfcf824b87b","impliedFormat":1},{"version":"25b3f581e12ede11e5739f57a86e8668fbc0124f6649506def306cad2c59d262","impliedFormat":1},{"version":"93c3e73824ad57f98fd23b39335dbdae2db0bd98199b0dc0b9ccc60bf3c5134a","impliedFormat":1},{"version":"a9ebb67d6bbead6044b43714b50dcb77b8f7541ffe803046fdec1714c1eba206","impliedFormat":1},{"version":"833e92c058d033cde3f29a6c7603f517001d1ddd8020bc94d2067a3bc69b2a8e","impliedFormat":1},{"version":"c1a2e05eb6d7ca8d7e4a7f4c93ccf0c2857e842a64c98eaee4d85841ee9855e6","impliedFormat":1},{"version":"835fb2909ce458740fb4a49fc61709896c6864f5ce3db7f0a88f06c720d74d02","impliedFormat":1},{"version":"6e5857f38aa297a859cab4ec891408659218a5a2610cd317b6dcbef9979459cc","impliedFormat":1},{"version":"ead8e39c2e11891f286b06ae2aa71f208b1802661fcdb2425cffa4f494a68854","impliedFormat":1},{"version":"82919acbb38870fcf5786ec1292f0f5afe490f9b3060123e48675831bd947192","impliedFormat":1},{"version":"e222701788ec77bd57c28facbbd142eadf5c749a74d586bc2f317db7e33544b1","impliedFormat":1},{"version":"09154713fae0ed7befacdad783e5bd1970c06fc41a5f866f7f933b96312ce764","impliedFormat":1},{"version":"8d67b13da77316a8a2fabc21d340866ddf8a4b99e76a6c951cc45189142df652","impliedFormat":1},{"version":"a91c8d28d10fee7fe717ddf3743f287b68770c813c98f796b6e38d5d164bd459","impliedFormat":1},{"version":"68add36d9632bc096d7245d24d6b0b8ad5f125183016102a3dad4c9c2438ccb0","impliedFormat":1},{"version":"3a819c2928ee06bbcc84e2797fd3558ae2ebb7e0ed8d87f71732fb2e2acc87b4","impliedFormat":1},{"version":"f6f827cd43e92685f194002d6b52a9408309cda1cec46fb7ca8489a95cbd2fd4","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"a270a1a893d1aee5a3c1c8c276cd2778aa970a2741ee2ccf29cc3210d7da80f5","impliedFormat":1},{"version":"add0ce7b77ba5b308492fa68f77f24d1ed1d9148534bdf05ac17c30763fc1a79","impliedFormat":1},{"version":"8926594ee895917e90701d8cbb5fdf77fc238b266ac540f929c7253f8ad6233d","impliedFormat":1},{"version":"2f67911e4bf4e0717dc2ded248ce2d5e4398d945ee13889a6852c1233ea41508","impliedFormat":1},{"version":"d8430c275b0f59417ea8e173cfb888a4477b430ec35b595bf734f3ec7a7d729f","impliedFormat":1},{"version":"69364df1c776372d7df1fb46a6cb3a6bf7f55e700f533a104e3f9d70a32bec18","impliedFormat":1},{"version":"0648a8c200b5544e30677f7f7059b1e384d6cab716c82659716457e3f317ebae","impliedFormat":99},{"version":"6042774c61ece4ba77b3bf375f15942eb054675b7957882a00c22c0e4fe5865c","impliedFormat":1},{"version":"5a3bd57ed7a9d9afef74c75f77fce79ba3c786401af9810cdf45907c4e93f30e","impliedFormat":1},{"version":"ed8763205f02fb65e84eff7432155258df7f93b7d938f01785cb447d043d53f3","impliedFormat":1},{"version":"30db853bb2e60170ba11e39ab48bacecb32d06d4def89eedf17e58ebab762a65","impliedFormat":1},{"version":"e27451b24234dfed45f6cf22112a04955183a99c42a2691fb4936d63cfe42761","impliedFormat":1},{"version":"2316301dd223d31962d917999acf8e543e0119c5d24ec984c9f22cb23247160c","impliedFormat":1},{"version":"58d65a2803c3b6629b0e18c8bf1bc883a686fcf0333230dd0151ab6e85b74307","impliedFormat":1},{"version":"e818471014c77c103330aee11f00a7a00b37b35500b53ea6f337aefacd6174c9","impliedFormat":1},{"version":"d4a5b1d2ff02c37643e18db302488cd64c342b00e2786e65caac4e12bda9219b","impliedFormat":1},{"version":"d8bc0c5487582c6d887c32c92d8b4ffb23310146fcb1d82adf4b15c77f57c4ac","impliedFormat":1},{"version":"8cb31102790372bebfd78dd56d6752913b0f3e2cefbeb08375acd9f5ba737155","impliedFormat":1},{"version":"f17ed72d1b1882ab6dc66d45e699f757d15bba0807af2fc9c3ec98fe367611c1","impliedFormat":99},{"version":"b1067ccb56b38af060dc3299ea7c4c6362cad4f07d0d454325a74808204fc801","impliedFormat":99},{"version":"7bb43a0f0180ad87b0a944ef95be8615d4c1d621a93ae503a8fcdee2027243ef","impliedFormat":99},{"version":"ba678532514244768286bdfdc82b33f072d5de4e9d281a75bcccdba9970788d7","impliedFormat":99},{"version":"0b79f95a79497386c50f38bafbbf59154619e51d7bbe5acf61cd376d3c9d77b9","impliedFormat":99},{"version":"5993793a23b298afd20c2e1cd2bf8468cc7e9415d314d0771e93dd8b2e389d28","impliedFormat":99},{"version":"05267740a5cff4399995b08326a2e250f229e9926f453162192b9b96b853a12b","impliedFormat":99},{"version":"104fae9b53b5eaa040d9ce626e1bf0b3e6e27d269a899a98a4a28358cdcbc155","impliedFormat":99},{"version":"50a6aa665f3a2e769a4d683f9f74cd15164d0947fb957d8016331b170ab8b643","impliedFormat":99},{"version":"af1c82452583c91ff01be5c5c9809e7bb10859ff7027fadc4f0f85f79f807b57","impliedFormat":99},{"version":"4abbcac9096680e4c509bcb3b629338bb71a153ca6d84d0b764dd697209f6147","impliedFormat":99},{"version":"6efc68a04c4246e8094b2cedc3ff0362692400ac584c55adb61b1b600e87f35b","impliedFormat":1},{"version":"9c050864eda338f75b7686cf2a73b5fbc26f413da865bf6d634704e67d094f02","impliedFormat":1},{"version":"7b77539db0683e287a0424a8a9eb2255a52054b2a7ba6ec477a67f594293abe0","impliedFormat":1},{"version":"b0c3718c44ae65a562cfb3e8715de949579b41ae663c489528e1554a445ab327","impliedFormat":1},{"version":"5ceebe6f150a5c73e95165f82ebb2f4c9b6b0e29bf3c7c0d37a6b17c4bb95d00","impliedFormat":1},{"version":"b2d82eec62cd8dc67e76f48202c6f7f960bf2da43330049433b3789f9629aa17","impliedFormat":1},{"version":"e32e40fc15d990701d0aec5c6d45fffae084227cadded964cc63650ba25db7cc","impliedFormat":1},{"version":"25c198a6003c507687ed1350a403df82332e6651a1586c7da08cfa74ead291f6","impliedFormat":1},{"version":"543aa245d5822952f0530c19cb290a99bc337844a677b30987a23a1727688784","impliedFormat":1},{"version":"8473fdf1a96071669e4455ee3ab547239e06ac6590e7bdb1dc3369e772c897a0","impliedFormat":1},{"version":"707c3921c82c82944699adbe1d2f0f69ccbc9f51074ca15d8206676a9f9199ab","impliedFormat":1},{"version":"f025aff69699033567ebb4925578dedb18f63b4aa185f85005451cfd5fc53343","impliedFormat":1},{"version":"2aa6d7fd0402e9039708183ccfd6f9a8fdbc69a3097058920fefbd0b60c67c74","impliedFormat":1},{"version":"393afda5b6d31c5baf8470d9cf208262769b10a89f9492c196d0f015ce3c512f","impliedFormat":1},{"version":"eaaa7930f984d65240620f05884873cadebc12ffb45fa19e633bf0161d135e78","impliedFormat":1},{"version":"f2d4dca61c8b5095d8fadd4e68bc48304b8902fb5f4ea8f2b2a034cfad7e7eb9","impliedFormat":1},{"version":"fab3efc839bc543cf28dd875c3b07bb9bf7de73e0316fc2dd1ebceff11132e44","impliedFormat":1},{"version":"c1968716d0d10dbc5aa39be55432466aa29cf28e3c9b13056d95993bf46f0a7f","impliedFormat":1},{"version":"907320c9b4ed9b8fc59876cc8bd25cf629aeec43617642ad90dfa83c1f430feb","impliedFormat":1},{"version":"a627ecdf6b6639db9e372d8bc1623aa6a36613eac561d5191e141b297d804a16","impliedFormat":1},{"version":"69b114a88e19f56e5d953a0340986946b10494a67aeb77772e5cd8e4cb626f0b","impliedFormat":1},{"version":"f36e814b27a7f71c366abd6a1cac0ebbca07d1e51aba06febfcc17104ee07b01","impliedFormat":1},{"version":"089dccda8343ebd9b71f789e3d34d05ca9ffd83ae8a9257e32acffae36db3762","impliedFormat":1},{"version":"8d6953f02a278bda583b1c6f90293008805f16d08a39f27b3141927b4314df4f","impliedFormat":1},{"version":"7b85e3ea140603b621e92f36f4d2ab9c6cb657d3c79d038724f0d6df02b59554","impliedFormat":1},{"version":"c2fa79fd37e4b0e4040de9d8db1b79accb1f8f63b3458cd0e5dac9d4f9e6f3f1","impliedFormat":1},{"version":"94ed2e4dc0a5a2c6cadd26cde5e961aa4d4431f0aa72f3c3ad62ba19f65e5218","impliedFormat":1},{"version":"6f90d00ac7797a8212bbb2f8940697fe3fa7b7f9e9af94bee929fd6ff24c21ba","impliedFormat":1},{"version":"4a6ae4ef1ec5f5e76ab3a48c9f118a9bac170aba1a73e02d9c151b1a6ac84fb3","impliedFormat":1},{"version":"474bd6a05b43eca468895c62e2efb5fa878e0a29f7bf2ba973409366a0a23886","impliedFormat":1},{"version":"1506d52b1eb12c2ea7bff492e4244dad7f50ec8a7a1851af5bd5519e77824fcd","impliedFormat":1},{"version":"30734b36d7c1b1024526d77c716ad88427edaf8929c4566b9c629b09939dc1fe","impliedFormat":1},{"version":"eb7d73710dc2dfa5a40a7229cfafca77d499fd7b0cf228d032ab011d8bf82153","impliedFormat":1},{"version":"8f62905f50830a638fd1a5ff68d9c8f2c1347ff046908eeb9119d257e8e8ae4a","impliedFormat":1},{"version":"3768c97dc254a0ceb20c80ebc9eb42e754b7a742ce85157db3fe93fd5a97b8fe","impliedFormat":1},{"version":"02376ade86f370c27a3c2cc20f44d135cb2289660ddb83f80227bd4da5f4079f","impliedFormat":1},{"version":"71725ba9235f9d2aa02839162b1df2df59fd9dd91c110a54ea02112243d7a4d9","impliedFormat":1},{"version":"1ab86e02e3aa2a02e178927a5a2804b5d45448b2e9c0d4e79899f204cfea5715","impliedFormat":1},{"version":"5da8b746f1ab44970cf5fb0eafe81c1e862a804e46699af5d1f8a19791943bb2","impliedFormat":1},{"version":"5e098f7d1ad823de488ed1d2c917a2a2a2ecf0b8539f0ce21bd00dc680d56aad","impliedFormat":1},{"version":"4ec97e7811ecfd42368c1a8b07975f6e4267763510c6d0f69ea9cf46a37d0a38","impliedFormat":1},{"version":"05d21c60997d20eff765d10c970cceebeb910205f057bf80d612a33d252cff88","impliedFormat":99},{"version":"8b2750bb1f39885f651c9ce2507a3b635712ef43643810dcd5c543e8bb21ac53","impliedFormat":99},{"version":"77b4f7c1b61c75f1fa5bcd42cd80926429e7e35b2b5eafb2a9de2d3b12f90d50","impliedFormat":99},{"version":"5a6cc23f599d6212e76f7b0eb2242df2605c07da543f16bd40f9164fbf1f158f","impliedFormat":99},{"version":"9a4dc72b86926970560cd9ed0bad66d6ee7f70a12452202730c3a6793eea124d","impliedFormat":99},{"version":"a12b8c4001f6ce47fae0b9e49e4441177fc135f06bde4d88867ca7b5bbc84794","impliedFormat":99},{"version":"fb0530cdb7583386ec5209c28a7eb918ab310713face18d34cf8b689beacdf24","impliedFormat":99},{"version":"86d4ff8ba66b5ea1df375fe6092d2b167682ccd5dd0d9b003a7d30d95a0cda32","impliedFormat":1},{"version":"dbab1950ef4bf06f44795b144026a352a7b4a3a68a969bbf32eb55addd0fb95a","impliedFormat":1},{"version":"2b5368217b57528a60433558585186a925d9842fe64c1262adde8eac5cb8de33","impliedFormat":1},{"version":"e22273698b7aad4352f0eb3c981d510b5cf6b17fde2eeaa5c018bb065d15558f","impliedFormat":1},{"version":"2060ffc3703b06232830353ebf159f0c308fa0f223f064af161983a0c8a376b6","impliedFormat":1},{"version":"9bc6c23143bb52331df863b503648cbce79a4c53cfa51de1c9e64ae99410e0fc","impliedFormat":1},{"version":"6d8913dc1b42dce4da3a48e3a57b1cee51afcde894da43bed1e19f4303a38a8e","impliedFormat":1},{"version":"dbf1009687760b708258fef934385cf29eada0feb170521f7b03cb874786bcf5","impliedFormat":1},{"version":"b898e82350ebf0bad51e0dd49405d79b1243166691944a71d752fb9fc7a0e805","impliedFormat":1},{"version":"02c9bb32c1845dc58c58b68dbdacb200eeb188711a4a9a720b36a2298462b617","impliedFormat":1},{"version":"15bf0d97593eda42b97953a987747614d02e05ab3db6457119955bc176659e79","impliedFormat":1},{"version":"71b1ba33785c50d943a01de9278c3196ed76dea06812d1402dc48e9b630ad91c","impliedFormat":1},{"version":"5c7f19d8c5cf23c20fd68e9f1ca8545b56c32941dc11d4f4252c8c8ea67f16d6","impliedFormat":1},{"version":"6e547f10c7e5e56e61a37ca07f2c3e3b15d6fcf0b7b663ac0026618c9ba42513","impliedFormat":1},{"version":"2cc3b2743504a647011a477bfa732c80f8c50c435ea14df0e4f45cb04098c65d","impliedFormat":1},{"version":"d86e5f707bcd047c43461280b60be09c9ae6d663d97fa93f0fbda3032f21ced9","impliedFormat":1},{"version":"72aac8e64d64a544a5f181dc68790b2ae5f1a51b276716ea4b9b96f6a0143ca9","impliedFormat":1},{"version":"0da8d515c8c149936e51bb210c3a724c0598290c352d969831c361a60c9fbe7b","impliedFormat":1},{"version":"05a16b21ddd5f4c27c4c3077e37c71ecde42cdadefed97c4e871dda8074cc5da","impliedFormat":1},{"version":"550cb8aea10dbe9e90119f311050199e9f36f21e2bdc2fb3956e52bb659d6742","impliedFormat":1},{"version":"d8b53fdfd06f71df4f410a1dbd9a464c9c22ce3b1d0b0be45b28634df5862707","impliedFormat":1},{"version":"8992f384ccf1e78f84a12b3d0785e7ffd497fbbec984e064f76c8b66126e9cef","impliedFormat":1},{"version":"80c35fba608cabeb7b7d9c463813af8050751886b1b279eeee8825da84047ef1","impliedFormat":1},{"version":"493f079841256322b86641bfcb77d0c02644cbcd194689155a209d1f9cece00c","impliedFormat":1},{"version":"a6193796fd0c1bcf52c945f96e5f3a0c97200b2cc74ccd2b9427dd22cdd93530","impliedFormat":1},{"version":"e2d9abf824ec4d2376fdfdefa60b154fa3147c1153326e61140c454e93cdc8ba","impliedFormat":1},{"version":"83c89ec38a9147f452cc207300e8e63af9364cc6887cf9e65f385ca98fa2d1ba","impliedFormat":1},{"version":"fb94137ca73b638df354f7e25092c187df9046b7a8fb07945cd7e9177c993409","impliedFormat":1},{"version":"3375dcae32c0c390a1f1cc70820cc3692af65accf58dea95fe568df4eeacb04d","impliedFormat":1},{"version":"c6ef69fa5b4746514bad421060b41ab72d396fac22fc50e9e64c0d06d9a2dbb9","impliedFormat":1},{"version":"a79e04199c5e81c94ed97a9ec8e76e47d8a606d351e8f6f395d447d445798645","impliedFormat":1},{"version":"f74fc755d0c4cd5fc5eb7d994f9ced2205e4e7c8f73b8c5fd60beb02661ddcc9","impliedFormat":1},{"version":"7dece556972229956aee9c48a3ce069cca85ff234bc224819aaf60ad65b33630","impliedFormat":1},{"version":"4cb4165e8d7b216690bc33821737555a3ce3e5030b602527044b5f413cb21114","impliedFormat":1},{"version":"4ba02440f6552dd4e964792f3f74527eec40e369585b88b48d2c136a9d78d141","impliedFormat":1},{"version":"36d95a2674e6068bc29340a0ba00fc3cfef9e043adcee4fb3b73fdca940820dd","impliedFormat":1},{"version":"be58f5155d41295b2bd034654b58c0002a2c86777ff3f59b3a6e7a35a14e0959","impliedFormat":1},{"version":"bcaa1b1e9f220c0763a19758aa604ac3697fdbfc514d133a207989208e3d9247","impliedFormat":1},{"version":"05f2acd7d3f39b33d924624917e978134acb2887a0a8206252b40657f94ef57f","impliedFormat":1},{"version":"253aa976e58e0083e8a7c985cc83cb8bbfdf7bbc01f256159a25df02fc005ac5","impliedFormat":1},{"version":"067670de65606b4aa07964b0269b788a7fe48026864326cd3ab5db9fc5e93120","impliedFormat":1},{"version":"4d654a689ac217bf09cba3e2e65dafc12b2f5f52233d2515184a8b855ee25bdb","impliedFormat":1},{"version":"fd4fcc71d7975421f36c4a7c4d2b80fac2c4a2d5f700317ffcd5b2341a2b8413","impliedFormat":1},{"version":"21290aaea56895f836a0f1da5e1ef89285f8c0e85dc85fd59e2b887255484a6f","impliedFormat":1},{"version":"b77e10408795c272920abd5d537be7017d411bebfbd915d96e3acbca71cc46b6","impliedFormat":1},{"version":"7c9964d78bea28381f46490a422dd64fa4a85011ead17702d72b175c9f168052","impliedFormat":1},{"version":"e5d8ae2b23a54bcfd4524e16d5c155558401da36656df5747e1fea49c8d784f8","impliedFormat":1},{"version":"25abe2ce2c150ecf8f2b868b08a21149b8f717ea9a7483f01bd7ef8e24a92c77","impliedFormat":1},{"version":"83a902704e00227f51a366aa3acc8e95331c59204a15e269287c304daf114724","impliedFormat":1},{"version":"f22f55420b02537aec818b630a151aa399ea52a3381dacd47b39bb3dcf5aa042","impliedFormat":1},{"version":"5a8bcc9b85516e9ee3f747eaf12e3d5dd6387de0f586efa96a470bc0412f1951","impliedFormat":1},{"version":"e7e2f20be151184c19a40fb1f9aaa17abe10ec8a0276c927b064ed5590eed6db","impliedFormat":1},{"version":"51d8297e69a17a2bf0eba75de98fe548b9d7d3e00bb785e9c9ea64152bbf7d77","impliedFormat":1},{"version":"2be8c567f647a6b09baacd7a3829dc487187fb935eb5733fc33c3cc77e1b538f","impliedFormat":1},{"version":"ab73b5711fdb36b06ba91df236274aae642cc3dc12e07a195db23d3871542a15","impliedFormat":1},{"version":"604a20744e67d5072b84556cd6cfb36fff9bbd80c14fb8f2395c4bcbea3cc412","impliedFormat":1},{"version":"3ebb187d1195f0165c7b0ce9688a8d195e2404d512856665648ce5dba1b044c1","impliedFormat":1},{"version":"f0c18355925b10676a5a55c17c9389933e3630b27aaaa37cd7977a8bee3527fb","impliedFormat":1},{"version":"0059cee84fd27d2cb7bb29c1a7a64900b5485509f83e70d80a3bb180f9722727","impliedFormat":1},{"version":"73608d79cc12093fa52d5da2c57945646b01363ce664255c70e757405eacdbb7","impliedFormat":1},{"version":"3e2c7e0e0c567faf667956d91618cf271f9163e3d6fb34a4991b378263b8b2c5","impliedFormat":1},{"version":"7acfcd0cb1cec76704a7db87a19b7dda6b8b16c43489234d006bc16f62c8fd40","impliedFormat":1},{"version":"ea9f2b6894d88763f74a942c6b253a3cd0000e3ae5ae839a8695a93917031193","impliedFormat":1},{"version":"8f60cb2eae0b65d11dad3c216d611ffee2fef0039e073aa80e8c37eeebcad0fd","impliedFormat":1},{"version":"a41f0117d9296f7c83b5b248b3265362acee40f867883458040cc2985276cb18","impliedFormat":1},{"version":"897c71b6a7be7264b48a0595179b0b64b8f87a2ca5311cd84f862a3ac24410ac","impliedFormat":1},{"version":"93298628862ea99a097839c6da20136a09746c7a8e94da32efe4976e0b27d676","impliedFormat":1},{"version":"0e96037b122acaf7cd1f411dc0210cfc03e3987ba1ede66b53227612c9675d37","impliedFormat":1},{"version":"511fe0926ce9e5d90481a8a7395d942eaee858fbce4cc1ac1ad1e88c444369a8","impliedFormat":1},{"version":"f204ad4a0e2166d24c7f399d1fe43de42e59e2b44ca94c2a0fece6cf8a4a0f16","impliedFormat":1},{"version":"e9ba05981eb9b48e1777943dc4222c99c75abfb75c367f0773f1d969fbf7e7f7","impliedFormat":1},{"version":"b2464eed8081d75952c5155d8f43f87bc4368f9eb27d5a973de3a3dce902ca35","impliedFormat":1},{"version":"6460a6452a529ad8e483c1467c0a284c7077072b06ee5989e5bdf9b41309c883","impliedFormat":1},{"version":"5962e51378b607d5666d66133c00a7e3e7c9242a7e9fa660fa7a608d40d3be70","impliedFormat":1},{"version":"e9e9fa3edb791d09ae41c8594a5f3150e8a4b34d2f6649a52da82f523e01a978","impliedFormat":1},{"version":"5b8be08947ec708d4b87c4c8a94d2395a7efaeb6cdf4fd49a1ce10a5429c8864","impliedFormat":1},{"version":"fbe2b6f7447be848f31dcbbf83eeba01354d4391b4d5dca5f5444d9d3d346625","impliedFormat":1},{"version":"aa3e6db0db0170de42dea67883727d7a5ddbeb4a2fdb8fe298aa706036fccd65","impliedFormat":1},{"version":"760c1ebbba9e8379a07b1ade6e125fe5fa693f1a875d92f86578f37d0b67ae1a","impliedFormat":1},{"version":"b4ba8ad868da27567dc41540028bdf3bd8ed67b1a85db25aa75cbc948ce76d32","impliedFormat":1},{"version":"2df644564c547b56b2f44a8646846c2aa1abf9ca66e6025d1aef853b5c84cfd0","impliedFormat":1},{"version":"c076a6231158c7638f6583f39d5f2318e91141080f924565fefe47d51ce45e18","impliedFormat":1},{"version":"7ffc2fbeffa145657ba81ae0736b157685fe7b85bc21e462d79faace2ac07575","impliedFormat":1},{"version":"a3b4b8eb0415f2e3150ba2117521794a67b9ee531821b9f9eea13948bcd6fe1a","impliedFormat":1},{"version":"8f18ac39bfa17c3a9c5f7e70d0512087e332dbe1366050e2e1484e8f2381e148","impliedFormat":1},{"version":"c19fc245d2023d018d10afd88a385e8726d1d136894f9406b43926a931232d07","impliedFormat":1},{"version":"7d324d7495d9b776fd39c3ff664eafedc4ab414dcae143e46533d24d8c8fca9e","impliedFormat":1},{"version":"49b0e267a442279aff8628e245dd5c94b3d26514f6feacaa574f661a8e2f778e","impliedFormat":1},{"version":"4ad9b4cb2dc2d7913e016b3da23b49aeaf37a3588bea6a72910a9a0bccd2b991","impliedFormat":1},{"version":"00221a02192bf56868ecc5ba8ee3b3c0e61fbf71429a3e6a40a94cccdfe21c28","impliedFormat":1},{"version":"627136c2fa71fe35ef61e87ceabfe3de8003494bdf15532aabe95d8556ce03f5","impliedFormat":1},{"version":"a01e2b10772d2e6d323fd30fd56387435321b98b2fcebcb419771dbff0611227","impliedFormat":1},{"version":"0ee215cf947dc7565c590656f1f0204059c2ae1fe3dbd5cb20ee0b99976d0ab4","impliedFormat":1},{"version":"a65afc49c733cd202f627174209da12fd1fb7a2e524e2964e50cbce1f6ba9194","impliedFormat":1},{"version":"2cf94327abec7b8954aec9735d9609610392edee14bb90323cb3dd30f3f54b90","impliedFormat":1},{"version":"8575340c8560a52c3309956add745660ad319dbd67309fa268f5af9b1c7551f5","impliedFormat":1},{"version":"72882f8809fd8c16374e6034f8ca5341e7705c7c9d3dc1817866409474b50f11","impliedFormat":1},{"version":"c33d3ecc050e239dd88589bf565c55446bfd2adf24ce260aa5ea8f6c4c11e883","impliedFormat":1},{"version":"85cb933439494e532dd8c4a31c2db76e3444d4a1a3073c1bcca03a3da793be94","impliedFormat":1},{"version":"0703cff1383701487b7e847bb4cb77d512c15b15eb06675d95899ae88bd5d841","impliedFormat":1},{"version":"140cfa512cdaf55533cfd9afedc48bf72cce371d75d60c54cc09f56c6341fb68","impliedFormat":1},{"version":"4807ad9cfc4987f853a395a4cfc92158599e0d07788a307dc5a5172708b78fff","impliedFormat":99},{"version":"c63a1a3f02d2fb7ece65d22897889a0b14bd9dadc192a41c0794f11680e258c1","impliedFormat":99},{"version":"87c96b39b5165cd3c5a31de1ba389d1c8136bb6bac7545d06ada98129d2ed055","impliedFormat":99},{"version":"a7dd1640640f2dea5a78ffad7420e2c3ddcd009cbfb5a961fecae000d629313d","impliedFormat":99},{"version":"e49751f62851710f430faa0890e05774216e9a8ae6222bd974ee888fa3e8af30","impliedFormat":99},{"version":"259c3379f443de81c3801376c7f704207f587dffd895b0c0b3915c420f0d0be9","impliedFormat":99},{"version":"b2b63b56921ba19339b81252ebbab66ce59c0f5acadd30862c8539e7b6c9e92c","impliedFormat":99},{"version":"b3a387d2ebfc1849bc980ac7d8c16a9f0033787168f28f4321017c39d393ca39","impliedFormat":99},{"version":"881b414e329afa44651f426f0862069de2a1cf4318caec425a4080f0da4d24f2","impliedFormat":99},{"version":"89d40f603fd1c1943036b0463fec78cfeb62e114dabdd28d92b48bdf958b12c8","impliedFormat":99},{"version":"14ec3e3ea301efa0a751fe5264f56d149f0309d2fc77bbca816612fd357e4df6","impliedFormat":99},{"version":"8a31103be4e37668bf4ba5199bacdd2cc77a207e10bcb1f108fd369936134d42","impliedFormat":99},{"version":"25e2f10451a76e61a11cad96c44e31dd28557b9af72ecdfc26ab83f48148f7b7","impliedFormat":99},{"version":"98253548911bc71993c8e2c4491d85382e08159bdc083e771987c709f9850db8","impliedFormat":99},{"version":"9205ea26ced53797d3864c61fc73f5848f4cab2a0f9612a51724f0a269e4b460","impliedFormat":99},{"version":"b3aa1ad78cf17e1f0bfb69c736be81e8c135b3d8976cc3b2d0a5e89cf83fb881","impliedFormat":99},{"version":"493862feb1ec28e06f472ad71ba547ba8a51c729d0acbf73c2ab0cb680ace235","impliedFormat":99},{"version":"1b647789f702128965a9f0c566d9939f76182fc5dd0ceac0438373e702ce9a06","impliedFormat":99},{"version":"d9577a2087450ba04d5f1ab7a3b08dbab8455326410003cba70e8f19569c43ab","impliedFormat":99},{"version":"69bed285fb57383644b3614570c4441c2ffbf9d8ddb8bf20158fcbdeb6952246","impliedFormat":99},{"version":"1054ed418fc8e7093803638e3b6b89a4132b22a2276ab01766e53c4d462173b8","impliedFormat":99},{"version":"d80b56b7556c05cfc12b86110fa9d1a26e98e2d18aa78dd10b95aa0230e7cc00","impliedFormat":99},{"version":"ad22ec875db3607fc2d1e5dcefe99a0682e476bbce75098b8446fdb03769d031","impliedFormat":99},{"version":"85c0feee3cec2bc8a9d38d6258946c8e0252723eed70004adb0c38218d34c8f4","impliedFormat":99},{"version":"771001a9cb9c41ec0ce8be6fd906a0b8459c89f8bd42167beeed2f6bde592ff4","impliedFormat":99},{"version":"02ed9491355b4b883362a6e778c8de3b4f491e016463b108e25b59b03e586e05","impliedFormat":99},{"version":"1b712f634eff80ec3547dfb687d5b3b593a59aac1cbb52b3d4aa0ba3432a38d6","impliedFormat":99},{"version":"e3dcfd8858bb73f709e1d13f0bbc4999c08c9de48102d18456e1ab54efa0bf39","impliedFormat":99},{"version":"6394262cf2e8f65bf90890ee1a714437923a8e13628a1bc756c4ee829044885b","impliedFormat":99},{"version":"b150e9d22698d7d4720f45c4c6bb7cbbcc6b0cb03260e8063cdfed92d3669199","impliedFormat":99},{"version":"d143eefb0257d113de4a8ac52cd7cb5ea58b80880a9b8f91c2d0c1d31ed4f073","impliedFormat":99},{"version":"c3c11d3acf7f83cad99e20274b70321d18a4630188f906ccfa8878ae4c66465b","impliedFormat":99},{"version":"cb1cfeaab436ddf051275b5dfffe8c71f0861d8aab1e7edacc0370d8997b8255","impliedFormat":99},{"version":"98e594ed2a23732cdd1dad864a40bf0dd74b1e34a41539fa969aa985230110d1","impliedFormat":99},{"version":"dc5f98c5bbfc0914cc679dc058cd5728f25573ac124a5651751b0870562899af","impliedFormat":99},{"version":"890643791f6a6edf6b2233ecc3f390e9ddba9e8f5cb46a8f1a2784f9eeaddbf5","impliedFormat":99},{"version":"40656e2f9a4b1d96888236e733e7de182fe61cabc3a7032833ccffa2139f05ce","impliedFormat":99},{"version":"b9ac94403788d02300216b28fa4a11f2bdc8c023f85517c4cc58323b942fa17e","impliedFormat":99},{"version":"d5f728c05ddbd1d93ef018bef1ec1622857d24a9d4fdf2073bbaf036d49ab6ec","impliedFormat":99},{"version":"198379655d876e84bd96f8622631f0b291fb8b276f7c9183be1a8d9e3291fa8a","impliedFormat":99},{"version":"33d440e35e5273086496e8cc9167d5ca2322f73d50bfea45bac48065157ae53a","impliedFormat":99},{"version":"5a33a68df9bcd5729391c8a635615f7266b0971b4d77595f9fc8939484a22171","impliedFormat":99},{"version":"786fa15bfac826a6c2dc1598c314bbc40f23b833fb45ec7615560c42b08f5803","impliedFormat":99},{"version":"f4cf9588777fcfa4cbbc7d0389a29d6a44e99799b88edb4dc40e71c5aa8eaba2","impliedFormat":99},{"version":"f1bdc8b5cf172bf10de12864cb3fe0505b4d79c5c715bc907e15b7e0eb58ef16","impliedFormat":99},{"version":"5f7a133f89e1fcf81a7bf2e59321c2a9865fde2a6fa3e60ed73e6200e4249af4","impliedFormat":99},{"version":"7fa847fd2f136b308b71c4c7c58bcf816befa96776a2c37805b0c131af3e27c5","impliedFormat":99},{"version":"a84080766c60aae76716e310830bcf937aeea5ee170211276503593b7476ee79","impliedFormat":99},{"version":"421c0527a8fabde5b6c00d38adc36935133bd82a568465c0536f9337bd70e0ab","impliedFormat":99},{"version":"538a7f2b67df4390219aa087725778a9e82263e3100c87d0dbb7dd0f53dddef4","impliedFormat":99},{"version":"33aaf1658908fdf68dffdaeae875e3d5797f094bea225a7e7d4b98b7d047ab92","impliedFormat":99},{"version":"8578f919785b567d096a47fa741eee2efc2b52c325c2605c3d97e91f71eea6d2","impliedFormat":99},{"version":"88ac849a6eb45bc0e3bb565b37f370a093e71b29bd0d275ac9eb699bd91873f6","impliedFormat":99},{"version":"68bccd7feea06afab40ee9e662084a208cc8a95440bb3510922ae5ac70a32b62","impliedFormat":99},{"version":"c65aaf37943d3132019595c960b96d79166d2706a9ce3de4fd2128852b2e04c5","impliedFormat":99},{"version":"13c10718f36d4e21179034eb810a172a08cd613f890e9987408d2baae76c8103","impliedFormat":99},{"version":"e3153233ef438ffcf1fc3af6c58c77601ad79dff3abc872656a39efa21186a7c","impliedFormat":99},{"version":"ff7647fe4116660e9eeb9442d0f8e440cacc8ce138e2a3d0743e314eb3b3c385","impliedFormat":99},{"version":"041e07206893c07b4089edb9b5e259acc8127bb1bd104dae3b9aa4469c7cee31","impliedFormat":99},{"version":"b08be4b2ca40abe8d476f17878c1c20925792921eeb258e789932c083e6ceec4","impliedFormat":99},{"version":"4f57beae4f9409df8a7d97024cf0ae5bb282baa6f5b93095884fa42259fa9f11","impliedFormat":99},{"version":"fc9dbc106797e476a7010adb3e520008a12bbe81b19d01dc4ef12053589056f9","impliedFormat":99},{"version":"9c7dd8b9c560b392a8d4b116e0576d5f3da179e3fd0b64b88827ccfc3a0b68c2","impliedFormat":99},{"version":"efad3c35ee446853871473ef6e409fc99c0b8b254165bf099525fbe07d36ac68","impliedFormat":99},{"version":"5031698031acc600b378bb3f622fc0e30aadcb0dddf16bae764ed72a30c3a9be","impliedFormat":99},{"version":"eeac5497c348ef227c25d34ff0682f92710374a6007acb6876bf6e39e8bced2f","impliedFormat":99},{"version":"ad5632bed298ec3e27d192326ff34002eb762e6ee8d9332b6a274600d5255130","impliedFormat":99},{"version":"3ddd66fa1e3dff4020a324ddbc3b3e192b51f952407a8fe9f0b2c856f0a8fccd","impliedFormat":99},{"version":"aa96b3ac1a4d867acdd98cc96fb0f9342100792867700caca88c8c3b88ea772c","impliedFormat":99},{"version":"cfdfbbfe75b2d805061ab2ecd829cb04f4c6c3a370fbf36232861057b48db5c9","impliedFormat":99},{"version":"6f54391f971f3b5b806dbf135b4415cab22e786fe73a6eee4edec2c655f0a1e1","impliedFormat":99},{"version":"654dfac1df82ea3efb903ddf9a6d1c07a992a9ec068a82a298d19559293e9f76","impliedFormat":99},{"version":"35c47c87278673231b47ee2abbf2495c280ceaafb606bffac870e65e28cc87cb","impliedFormat":99},{"version":"f95f5d0b160d2b1e31e9a5b1a484161a1047f98f5a13c707ca6d95fe55d4d628","impliedFormat":99},{"version":"6bb185a04ad2a2713dc2dd8e0540efc19fa5bb3a51132f6b95c99d6da70da0c2","impliedFormat":99},{"version":"f9a6549cea96c53de08f60bb30a2893c1886202db92723875eaf8cc6fc11bc2c","impliedFormat":99},{"version":"63c741c6cafd00b90b32e221839ed86c7e938b6ea84627c714f06c8fe21f734f","impliedFormat":99},{"version":"9b24424a32ac5468fa4c26eb90aaeb59ab9881f90bb473ebf4988c6bcfbeba31","impliedFormat":99},{"version":"885072d7e26815110030ee3bed267796ad64c300047b751262c7ef9e4dd2ad31","impliedFormat":99},{"version":"d70c019efba635ea30122ce288e5b2e983b732b02c208e22fab92895b2b12286","impliedFormat":99},{"version":"b51bff8d7410111350e7cdb3af517c0a38abca01101fa9d176ab9d452e873d28","impliedFormat":99},{"version":"3e47df5007afd59ceb40d5ec847f88bfeadbd80f1fda3cc72f4ff5fbeb64554e","impliedFormat":99},{"version":"0fda0c017ba524c040eacb881e681e04fa903507021435fb4d693ed0e28e1c38","impliedFormat":99},{"version":"f0cc0515930292b5f14066355df6be9b7ff366b92e6bb16f09983a810a167aa8","impliedFormat":99},{"version":"93077ce7fb08a0373b58c31659e7740e3ea593560ae492f81980b39c584aa661","impliedFormat":99},{"version":"5b01ad19b0b51f1b36c43137342b8f991dd70d42aca6b4017879e5fb7bed15cb","impliedFormat":99},{"version":"9592a264c462a34af00f61356f80a83d5ed00c4b8dcd952383576fa9a7058782","impliedFormat":99},{"version":"0f4d10b76c4166df5cfa1c500dc2b1f2b21772e19d563574b06e36dd616e4f87","impliedFormat":99},{"version":"ed4a79699f1ed83e5e0739a4fb2cfe083f87688f62685c154e43c146a8b39497","impliedFormat":99},{"version":"eae429dd6620c3973390d985f827c593c678dafbf6ac4af1dbe444a176022ef1","impliedFormat":99},{"version":"e8120ad235d0a8987ec15b906efc0f591d1e41b645ae9556e7dfeb01868567da","impliedFormat":99},{"version":"384924110c1af48eb9a12a21d0dedfa3d3e28568c80342864f0142ccf100be43","impliedFormat":99},{"version":"7838b195b2f1e40bdf48d85bc7e8e78c758ada53f8da0409d5e0be38e5cc2b01","impliedFormat":99},{"version":"44bbe1fb8a0cf21c7275fe50524a5dfd0f05e18096bec2184a610f8dccfd16cb","impliedFormat":99},{"version":"7ddfe71a6213dcc5c3ebe5eafc0cad3d610053be9830ee552ffa13da90ce3731","impliedFormat":99},{"version":"608c82473943fc494bd9f7e309cab0285768e82e4becd9e661f198a301a1da5c","impliedFormat":99},{"version":"3140e268643f9771260906bbd072351a45a9e646afd3328c10fe1e90b35acebc","impliedFormat":99},{"version":"1ff33556b7a062f07cff0e94789e73eb9dc23c658aac2834ec91cadcedcc5499","impliedFormat":99},{"version":"b6d6902e79f47d50c72177d5d36f6e7b7e1955fae716d6b1b85dd791399516bd","impliedFormat":99},{"version":"84b89a0699494984546dac063af47e04c9602d5430ae8288a6ba8ae85debf039","impliedFormat":99},{"version":"00535c6641fdea64e28fb20ac75849e1193b04c5d457ec260ed4472078a715d3","impliedFormat":99},{"version":"91cd710070e8db68fd54b0f6e0dd591acb3f2d1493cd7be25448d307a1ff887a","impliedFormat":99},{"version":"4e36cfcd53306c72efca5af1e4f626a73f939f9f85f58a372cae533dbbb32617","impliedFormat":99},{"version":"7cf6820e7357504e12a47d56a3cb2e46041d810e06617c48fc959273784cb816","impliedFormat":99},{"version":"ff2a2943abfc2f330b68ef99b0f6b41dec22cfc741e6fe4e1b2c63bc94608268","impliedFormat":99},{"version":"74e9ce93ef8e47b7e53894fbbf13465cc756e0a4ba8d7b63b4812184268495f4","impliedFormat":99},{"version":"b4272ff176a6caa46d481023b5306fd9429ff9b715b7d696c6b69b95e7b591d0","impliedFormat":99},{"version":"3bc58e9ddd3ba499e6b6230a8a539c49f64d87696c1fe59bb8b5b7b8beadc3bf","impliedFormat":99},{"version":"7d4b2cac0c3adf7b8498b221d57dc1b4c5c5adf917dcf3b8368eedc118ba372c","impliedFormat":99},{"version":"0050d8586c3e90fc731b1870e1e4447a443142fffdd280b958317d9404c5012c","impliedFormat":99},{"version":"837224cd717b52536dc2e288c4774cc37f318ef79ff5c6788be24a4fbcf96561","impliedFormat":99},{"version":"c694aaae5ae1ba7d9d099c230608a16f4ec732affc260e78fe3a813e84931cbc","impliedFormat":99},{"version":"799371cddbc8a321b647ba93cc64ba4febc5dfdd2a33f566ca293a51cb45208a","impliedFormat":99},{"version":"9167d6767194fe529778812c92e6a8fb7e8da0e4cf9e5bb29eeff6c71d06285b","impliedFormat":99},{"version":"5c657cc41da97d9c608dfa160d23638e1e662630fe440427635ba7af83c0ca35","impliedFormat":99},{"version":"b6210c7c0634f21c3003a4dcea6d3471885fdca159a03fd1a2dec3e33d1859bc","impliedFormat":99},{"version":"73224fd0865c7bcf6dca343f7879e6d88375ed13f27efce30a898787d15f2a28","impliedFormat":99},{"version":"57316bcf356506bce32bd8c44765f9a6aba9982736324fcc631b541d6291a157","impliedFormat":99},{"version":"a9d3c1fe9535f2210648b1edecf009e9f6f8426bdd577583eb193ec4001b0ff8","impliedFormat":99},{"version":"449b721feb87cb1658bcbe8e2b1262a58d7eb403d0e4d673b0b02260b1cf6589","impliedFormat":99},{"version":"207ab64b55427a96bb5586290245efd1aa67afc62a5993ffcc50e97b61b0ffde","impliedFormat":99},{"version":"7ba11cad1b5724f25991695c9f7a321443988925a7b967f48b646146efe21981","impliedFormat":99},{"version":"43da8b69cd3b0565bd2dd6750e06ed518a8b35509500bb164f37e8cebe3a0af7","impliedFormat":99},{"version":"a59467e6956d95d2e8f33f1841dc102e295e08f1366e5caa1375a5df042bb920","impliedFormat":99},{"version":"ffc4ca576b68ed95d13cc7d492288659bde37c64e50bc363083ecc49c3d652e9","impliedFormat":99},{"version":"158643e4fb2b5b5f08406f70405c670a4aa703d251d0fae3175334ecb772c07c","impliedFormat":99},{"version":"aa6d24b9c3330e37760f06013d372aabb84c256414ed2a1577a1f6805442bee2","impliedFormat":99},{"version":"24eec7b1bc7f6150c9eedea8b87e31c36e5560fe299bb9c784d7a4725a6f9a99","impliedFormat":99},{"version":"62d7084151872e502ad28f9e8a7b51bde263c5f5a0093e6ae83f55cd45df0191","impliedFormat":99},{"version":"bcc7969217f3f46271b04bdd6b4a899e1cda3361dfb1605862b4915e42b8583e","impliedFormat":99},{"version":"81f370759a82f8078a6ef1c9e7ad84305db6f9d7cc4cc5fd650e370cb6fbb73d","impliedFormat":99},{"version":"6500274a3d307311bc2ce721bdadcdd8bfef711a0b8c662384779db33f46d350","impliedFormat":99},{"version":"00e98ef9d782bc3b9b171e02408f22eab7727a39207a5e38884e5ac589cc677c","impliedFormat":99},{"version":"634b5f9c4bf93653a4902d2774a187a9a94ce93d70eb973e64b92411bb242001","impliedFormat":99},{"version":"741a58d8c41e9a61db208af351eecc2f2c98fe8b82159b386d8d679cbb4b8d0b","impliedFormat":99},{"version":"601e3d8ae057f0638137655e7b7f3b3ca40fab1f2130be9f3f376d64612d646d","impliedFormat":99},{"version":"44a95baa604a086092deb23d2ab9df5445bdf61864892a6c0b35ee5a9c858e83","impliedFormat":99},{"version":"2ebf78142242c033dddcb91ce2c1b4630240d49677b383177342542d3f1d6dfc","impliedFormat":99},{"version":"08e057f98607212173f96a76e0d4a9a1099bbac6ca9db71c764a4625f3ea1d04","impliedFormat":99},{"version":"c48cd84fe25b95110578d4217ef6ada7b6f0816268b28ce79a4b99ab51b9f1dc","impliedFormat":99},{"version":"e588ae154fc0f7068790b18c7ef6c565ff840de711c62b4e5ef9029f01f4de08","impliedFormat":99},{"version":"4f64ce927caa215cdcee809590c1ac2d5cb533cfac7878ab3e59f3fa9cc9f48f","impliedFormat":99},{"version":"dd167c8f6f9885bafad82e4e55069ee66e5032ec56a4e1cce4690ff0b6e7d1d6","impliedFormat":99},{"version":"1449c20bf7b615f828f44319428f9672ee0adfa1ec83ab4b0266703d5189de3a","impliedFormat":99},{"version":"e68b6c8a67dc039b91fa53de8acc2ca3a73842346b244d755d32e6421484e3f9","impliedFormat":99},{"version":"f9cc840f709dbc2ad20a4980e0147663711cd89deba16f1de522f52712d41e02","impliedFormat":99},{"version":"83a796754be461834ea66c067adb4e88f5cf988cdee2c05940e1b80d7a2b0323","impliedFormat":99},{"version":"110d7f8daf7f4bb3d0d512990260a9b20eaa973756010852e51764909ace74e1","impliedFormat":99},{"version":"3ba29c51a581eca6e0d2a6f47c8effa42d6ab7592d9e9f400f3b7f0b1339257e","impliedFormat":99},{"version":"091abe44b43d5bdca9e9b80695040d9d55b3c95a947f34ab84bfd908cee8f18b","impliedFormat":99},{"version":"01dcee9034f18420b2e9efba40aa4eda160d3b251f810d9ba69e45689c647417","impliedFormat":99},{"version":"15e5f31bbef857469d1e940106aab3ce8d1c9660846380816b1adc0fea46874e","impliedFormat":99},{"version":"13556286c3dc6b73397a204ef8e63bcc76c3598c385b8f4e814b33855a209ce0","impliedFormat":99},{"version":"723e513f8014a654bbae5eab77683e158147259ca80d2f5253db5038ae040cab","impliedFormat":99},{"version":"baf92b910db1c7cad3a9dae0b62ff7780b0ea608b565076642ccab43d188c6eb","impliedFormat":99},{"version":"599ff78bf8a4d676996b207807ce0f060b841bacd6f8357fbbae6c636d841a27","impliedFormat":99},{"version":"be68b29bcec011f6b3d8d51ea0e8db5129d0515c6a7724d1055c6308a66a11ed","impliedFormat":99},{"version":"f43f14c8de72bec79b9c906c7b161a9a04a6b6ae703db4898eae15f3a0874901","impliedFormat":99},{"version":"63b1cb3ee523149a45b83ecea703d4b3a554e753851397b5f2a9f362efda5919","impliedFormat":99},{"version":"dee02a9f0c3c4427b70b0ecd36e6fd452440faef8a7cab3241d1453887fe1175","impliedFormat":99},{"version":"1bb9185fcf2796379c04d33b2d448e96d07f20e81b4f54d914da0d6a9075437d","impliedFormat":99},{"version":"17fa98d6b377f21cce87ad5ca2391da4bfd593203a5fb367f661d088c7b06dd7","impliedFormat":99},{"version":"dcd27529a21e49c5dd6727b757b6f900c3a2e83841e7d26432e23ab7cd5cfbee","impliedFormat":99},{"version":"94e6d8aecf38ff7aaed47c62a8072810a14751ab4824cdeb25eb7d8cc865b56f","impliedFormat":99},{"version":"55865626cbdc1b93a3eaa5c2138471d580fc05c06ef3882d061104adef403192","impliedFormat":99},{"version":"f4eb9603795dd673d84529b82262ec972f47ffb74fe646730cf0ce94e0f1b238","impliedFormat":99},{"version":"599492aab3cad27dbbc15371f3bcc247bdc760b38594a19937519197c9a15f01","impliedFormat":99},{"version":"a28ea75c02e4dcaa8d2cbf04fd828054e5c9b85af46513ffc3e863dddf052a78","impliedFormat":99},{"version":"d49912206a856d7998c3e2d4bb5715b99b751ebb3c85ddbc39ade4759571282b","impliedFormat":99},{"version":"70cec793719a7f1142b4b276c77c5d2b2d1bc777b230efc6d73d5c160818bc37","impliedFormat":99},{"version":"7a1a55170e451eb58f66eab1227c720afcebaaa61e4bc300245f564e67b9b960","impliedFormat":99},{"version":"dd4cda588e9e27e37c7d67b99c12722b8fd2bd33f5ff2f9ffc2af275255f724a","impliedFormat":99},{"version":"334dfe531632fe5cf24ccd242bb25d12b56a73792af2fb984e3ddc4b4a1c968b","impliedFormat":99},{"version":"e9368a96052aac8111d45bc05627b69b4d2c07418e333b60bf7e11e8c3abcf0e","impliedFormat":99},{"version":"581bee0dc44ed68ce4aecd5f10cfb596fd31a1717171d4d35764ef231cb7fb60","impliedFormat":99},{"version":"914aec6791f99ae1bf10a7ae232f046b3f632b553e3bdb7ce4693c4fd898be76","impliedFormat":99},{"version":"eb7fdeb5c1349ec59ed9b3a43b9b00d2172e2447c036264ebd3a477717728fba","impliedFormat":99},{"version":"84badf92ce92cb8589d4f5c849af70a274fed65f3e8d934056d220c5eebc0bf7","impliedFormat":99},{"version":"10e3ad1abb6c42c2da7ccbdc4ed6fb2d186828e1aaa4751d614906737b5cf61a","impliedFormat":99},{"version":"1ddaef8274bac4342ac00760992a9cb79b9943f08c547d49824780c9bdb2e9ce","impliedFormat":99},{"version":"e5b9744e47fc4797029fb255959c16d4db7f2a2269bd5db06a3e09b4d5ceb2d2","impliedFormat":99},{"version":"4e558af251b158481a9e147dd5e08d3a63409477817e7a7c0f115cd0e4b264b8","impliedFormat":99},{"version":"1873537b8f7b6ab35e0d708cbd095aa1478b63770372f45109dacd73ad663a56","impliedFormat":99},{"version":"b43a45e42b3ddf1205d528e29b4ea6736352c8be8836aee2a3c7198fca02e075","impliedFormat":99},{"version":"ea5e3f734b58b30d4e002ef2d541ebbaf34f5d4f04c28efe31f87ff1ded150a4","impliedFormat":99},{"version":"5078ed139e9684e3c3ac23fbc8dccd6ba04f1927c55050c503cc1d914355aa45","impliedFormat":99},{"version":"87d68357c86d995e4204b065998307d972e837962e725b20103f6ad85e657bbd","impliedFormat":99},{"version":"727e4d8b48badbda8b10ce7888881f8c09f01f472c9101a0fcdb03782a0e6c23","impliedFormat":99},{"version":"bd9fb2de1f3b71ee53fc2be2d4c9243b887e9a28f1e6418792b6c13720311ee8","impliedFormat":99},{"version":"cd1e4afb548601fd9f77749c3695a118746a34e6aa74e7802c826d6bcd612a34","impliedFormat":99},{"version":"e2b7b418ceb47dac7f2d3b2ac6a24c2432b2cabddbdbc229135bdb4efecdd58f","impliedFormat":99},{"version":"889457f9bb8fcf808f7a0aa3e1fa5ce9ca96aaf9d343130b8d2d61b848c6bf29","impliedFormat":99},{"version":"7f96b09d09c40dd2c8cfde9ea58ce76aee2551830097d61a8da232f3fbb7b29b","impliedFormat":99},{"version":"3f96a752ddd4f17d0ca4b0ad209e664b45f5375d17b9e5a8865f91a52ce5d949","impliedFormat":99},{"version":"9ecedb2c6b9f747e98946678184b3e243fcc1d7d09de8ca395b5a0179c99f127","impliedFormat":99},{"version":"689097536b27ea739724d9a0b758fb20ec87faf677b7f0bea381a48200996ea7","impliedFormat":99},{"version":"700d1b6af9c29467f888a9162aa80ec2cf48354fe64d3c203dc5bc018f674e2a","impliedFormat":99},{"version":"cf7501b01f36e41442b790bcfa35ac71e4450f2f1f6913b37b161d520e7aad18","impliedFormat":99},{"version":"24ef877ce9edff5d3e3d94af2e86fdf57438076aaf84d39589a17908a5491fc6","impliedFormat":99},{"version":"cdd1ba5ecc89ff1d5075292156a1478b2a77ba6b2acb2764bcae47a094e892b9","impliedFormat":99},{"version":"3dfaf3e72bbf37104af0063ef475c65bf91f07b0538217364efcec5bc866b8ee","impliedFormat":99},{"version":"d84e881c255674d4019d7a03f1c3fb89755f97cc7a2c3cb21bd4b89fdd992aed","impliedFormat":99},{"version":"99f45fd8ab384e5b7ca3fae0c1cd680a158224f3444bbba30bbf17c676697405","impliedFormat":99},{"version":"65838383c2ac678b3971d1db65137dce6e7369b9fac13216220fde13ee427646","impliedFormat":99},{"version":"ad50ece4610d6b452c094d6b89f52e5dae68800ff502912f4284591dd468d3c2","impliedFormat":99},{"version":"08eae6ce500e9ac7a5307ca4bc39ef765225bac7592c22d725ded1b2d0cb049c","impliedFormat":99},{"version":"2b2ce837d735fcfca99611772cf9fa7e939ca7864b493f26a384432add7b0e5a","impliedFormat":99},{"version":"11a39efe6c7787e76e6b134c6259d3ec67fbaaad6de58159b959a1c368631711","impliedFormat":99},{"version":"e00a81d8860d2a9a17fbc1cd5bc7844e39dd38362a45a340962893f39c81b1f6","impliedFormat":99},{"version":"0b1c0c6f6eae47357e40e2d2dc08ee72f6a36b52784a7338749034c6605f7265","impliedFormat":99},{"version":"1d1de1b5b60217fb50226887167ba256d97d829540d572b299249fb483b17e50","impliedFormat":99},{"version":"138db006cbaa8b3f1f56bf72137f07749328d9d94518409d5ed4972a2136262b","impliedFormat":99},{"version":"787eb91ba13c9542367599ab96b3ef5b518d2366013550d50cdc11e2e56cdaf6","impliedFormat":99},{"version":"5009fda70f9665f2b794095684ec01da2ae4effae6c2b1e3ede9fc6213d65602","impliedFormat":99},{"version":"a5a93ca146fdab4bbbb619a69a321ed53d51b87f7386c1a033073cde2c246414","impliedFormat":99},{"version":"1e161c915c62c276665e91271d8ad20437dab6e858a2fa6e15a99384e8eceee6","impliedFormat":99},{"version":"0cb3ffbcf0ca551ef44c30b9c760cecce52077e4b2f181dd8014b16ce422beed","impliedFormat":99},{"version":"bb2ef1933892870342745db3dc4bd623f043f853c49fc5613cdad59595f50187","impliedFormat":99},{"version":"b448c207179c6117d897bea6df1c9746139fc6872ca6592e2b3179429c4748a2","impliedFormat":99},{"version":"c391bb9258e2aa84e81235415a41b65d002f9e86f77b3ace3b9cfe5557c9434e","impliedFormat":99},{"version":"cf23df32d86171be532999dcbd57630d0c1e11cb103bd31da61d6f397d9f03b7","impliedFormat":99},{"version":"7b0ea2d9d99651ea22bcddbdfa019ca838d213ad63c9070c145e429fbed34460","impliedFormat":99},{"version":"899663d0fdc7e8bf169fa7a5402a3305202ac38891233aa32fffa7ff54ab625e","impliedFormat":99},{"version":"863bf766f9f3892a2d8b6079e79d4f554d35d0f3720fa2f9f0005b3f970834c9","impliedFormat":99},{"version":"7b44bb91de82fe1c40469bea448bb86b7a1918c35e651af833ce800144e23c4e","impliedFormat":99},{"version":"618aaf23c09aebcd179fcf26a2d2baff9505c6ceb667fec4b261406785129653","impliedFormat":99},{"version":"7f0a29220cc813eee6232a10504d3f67b4b9c0b6f6ecbfe00d503ad873b0e88f","impliedFormat":99},{"version":"46ed2b99b6997a49372266448416b10e6e72604dcc0b4d80092e563b205f970d","impliedFormat":99},{"version":"a5aa014d3adcbb93b76cc8476b4dd8cdb3b7ec90a45a92fe31221bc2d1d9620b","impliedFormat":99},{"version":"fd089c5fcc0f15f97d6c4d54c89558d9b934296b50307ffc2eee69786cc98f12","impliedFormat":99},{"version":"5ff435fee78361bbd85bbf12c8948bb6edddb1e5a60c816a5748d01a2e32524b","impliedFormat":99},{"version":"924d818ca4ba95d290449121d73ef5d066b88cf82d0126e6bc5b5379560688da","impliedFormat":99},{"version":"13c343645c7cb1cf01025f25649c0de32dc8871f68c9eab3cb9005573e812e1c","impliedFormat":99},{"version":"8a36f7d987bbc2497df179aef7ca2539643860f80ea616c29a3d2e7e00b7a739","impliedFormat":99},{"version":"daa01ffddd97688660553cfd7d7647e74f9802eb0d5e9fac242e4096c4402e4c","impliedFormat":99},{"version":"ce9635cd7a74863945b5bec47af9dd1129ba5f538a0ec80654a9ceabe184de40","impliedFormat":99},{"version":"c84ed2d6fdafbb9d0a344c124cc190ddb9b7dff43bbcd294da03beae44a42060","impliedFormat":99},{"version":"a5f8b0257bc9391c67a345d2963332685852bedc0bb676c16f0029b68fed81e5","impliedFormat":99},{"version":"57914207af74c51a479232e930e592f457b27842afb0a236170581946ae3d357","impliedFormat":99},{"version":"e8187031001c9b766128a0c056fc7403f8294be03a62bd0083fdca5d7018c78a","impliedFormat":99},{"version":"c648a6419f8e9ef83eed1b4299a3108229952185a5c22f9239f3ee6e5283a18e","impliedFormat":99},{"version":"08e2f09c5ef79bdfb35a3af73d6710f7cda21f86c8bba0b04814d44dcf1a6c62","impliedFormat":99},{"version":"eecbdb605df24144325cfe065f718d2dfb8ccdc9c91e289548aa13198bf5d6eb","impliedFormat":99},{"version":"31df17f0a737ca0e74c07133d0d779e23d93cd7e05acfec6b416a35b333e6625","impliedFormat":99},{"version":"2ff9820d05a8a18e11db77ea9897a87d1c6389791f9b33b4c19baf586a02e2b9","impliedFormat":99},{"version":"f99c1b29f38b7d738c1eebd301d96b0317858612632bc51705e8af14b9bcb7e9","impliedFormat":99},{"version":"a65ce9a52bf9f9fec511e9990ebfbcf5a10aca184f81567df151b22949dc5d8d","impliedFormat":99},{"version":"164990ca79639a2dd196e50a3f3d304407fb9e31ccebd2d4f0f057adc8b37689","impliedFormat":99},{"version":"7f4c90fd83c67266076098ebe3af2c9a45a582129cfa6c7913611576a76df509","impliedFormat":99},{"version":"c9eeed1bb9dbadb192e261c5933d3f1a7fce78f16f804c0aaefa06eb878b90be","impliedFormat":99},{"version":"539816edba56268382e7e7f248056ba08509ccc89859bf10863760b74d154d15","impliedFormat":99},{"version":"872101fed61b1abde2d686e42c86415ac85e5af6ce40986633b9d1a36db0e7c0","impliedFormat":99},{"version":"f295fec8d4bc4bce43ec3ef03da9529b97a21b4534665df76c5dc0cf7ce54494","impliedFormat":99},{"version":"2a8dcabf81aaf860d4e0d93330b98c875412fdfefdc2492fa9b2ce1ee2f08350","impliedFormat":99},{"version":"9da621a71d2317c10579088346cab7022d30b05fc95e38bc888e76ad2213a6f3","impliedFormat":99},{"version":"a0779db5f757094c16595f8d56ad0d517ff992622a3f5e22a2474ebdf85a4512","impliedFormat":99},{"version":"4f6447e4e41d50c26911d9a9c7a559f29a14e905537889df22bcf7d365ba7e07","impliedFormat":99},{"version":"d4b7f40a57341de047970dbc163106bcaa019b622591eb00ece97b2c618eec8c","impliedFormat":99},{"version":"a1b7f728f193d8623310fb28361f4122c34243e9624b6f4bdb83c9cf51564c34","impliedFormat":99},{"version":"4b5c3160139ecbfe833f51c1939017053305b6de16c69286322e8d964a4f1205","impliedFormat":99},{"version":"49813c7a876b3cc38e605e1d095970aa7165748c91fe031f6d4288725391b71e","impliedFormat":99},{"version":"8ebb6746daa3a77a090b5d5d196512559a1fa0eed59f944abce17636b5a852a0","impliedFormat":99},{"version":"17b62ad1ea92e397f40335c1786f817c83a468a632586a24dd988898800db777","impliedFormat":99},{"version":"fa0f05310f77795223270dd7c59c80d8e1161a03ab4f8a78e2e172e6b842acf7","impliedFormat":99},{"version":"9498dfe9df01a17e8ff164f4a791c638f26e1bed15495ee85cc46c92f31fd9a9","impliedFormat":99},{"version":"a1cbd2469fca29b7c78fbbb2ce226dcb2f384c8311b260eb426080c3404c8196","impliedFormat":99},{"version":"900957f312eff0cf20a6051ac87820b50d94e19f62d2b38da022b282833c479d","impliedFormat":99},{"version":"1cb37da20172520b9defb7bf9946c56a9e6fb807a1d5e4ebe3755e8ecf00236c","impliedFormat":99},{"version":"3b65d1410c30135f0e2ec1f6706d1c6993e9e6b9142af5b39c635dfded9ff68b","impliedFormat":99},{"version":"6349965de89ba427160755c9b4871646bd3c40789b7346aad290aaf08d7f3218","impliedFormat":99},{"version":"49d8d249abe55f8064d8ca3c08bf4d17e2481200fdbca2de8ee27f51dcd20a78","impliedFormat":99},{"version":"f213c306503869130b99be78ccbc9f9ded5cd4c2ecb6d7e27643da1e028fa802","impliedFormat":99},{"version":"431d49e8d1f58db1c13fbdf37f5292e1da3e6432014b6d22865d0bd0640853d3","impliedFormat":99},{"version":"3ac1a36d93530387ad8fb949e01d2163fa3f3f8849410bb042568ddcfb241c55","impliedFormat":99},{"version":"04d905c7987bac95e79cec949c995ec6a8fe736d24d846c4d583061854979451","impliedFormat":99},{"version":"316f1486e15cbf7896425f0a16dfe12d447dd57cfb3244b8b119c77df870858f","impliedFormat":99},{"version":"84bcc7c6b06f4d643a55dc63b56be0c81d990f8d549b66ea615c553268774dc3","impliedFormat":1},{"version":"2d225e7bda2871c066a7079c88174340950fb604f624f2586d3ea27bb9e5f4ff","impliedFormat":1},{"version":"6a785f84e63234035e511817dd48ada756d984dd8f9344e56eb8b2bdcd8fd001","impliedFormat":1},{"version":"c1422d016f7df2ccd3594c06f2923199acd09898f2c42f50ea8159f1f856f618","impliedFormat":1},{"version":"2973b1b7857ca144251375b97f98474e9847a890331e27132d5a8b3aea9350a8","impliedFormat":1},{"version":"0eb6152d37c84d6119295493dfcc20c331c6fda1304a513d159cdaa599dcb78b","impliedFormat":1},{"version":"237df26f8c326ca00cd9d2deb40214a079749062156386b6d75bdcecc6988a6b","impliedFormat":1},{"version":"cd44995ee13d5d23df17a10213fed7b483fabfd5ea08f267ab52c07ce0b6b4da","impliedFormat":1},{"version":"58ce1486f851942bd2d3056b399079bc9cb978ec933fe9833ea417e33eab676e","impliedFormat":1},{"version":"7557d4d7f19f94341f4413575a3453ba7f6039c9591015bcf4282a8e75414043","impliedFormat":1},{"version":"a3b2cc16f3ce2d882eca44e1066f57a24751545f2a5e4a153d4de31b4cac9bb5","impliedFormat":1},{"version":"ac2b3b377d3068bfb6e1cb8889c99098f2c875955e2325315991882a74d92cc8","impliedFormat":1},{"version":"8deb39d89095469957f73bd194d11f01d9894b8c1f1e27fbf3f6e8122576b336","impliedFormat":1},{"version":"a38a9c41f433b608a0d37e645a31eecf7233ef3d3fffeb626988d3219f80e32f","impliedFormat":1},{"version":"8e1428dcba6a984489863935049893631170a37f9584c0479f06e1a5b1f04332","impliedFormat":1},{"version":"1fce9ecb87a2d3898941c60df617e52e50fb0c03c9b7b2ba8381972448327285","impliedFormat":1},{"version":"5ef0597b8238443908b2c4bf69149ed3894ac0ddd0515ac583d38c7595b151f1","impliedFormat":1},{"version":"ac52b775a80badff5f4ac329c5725a26bd5aaadd57afa7ad9e98b4844767312a","impliedFormat":1},{"version":"6ae5b4a63010c82bf2522b4ecfc29ffe6a8b0c5eea6b2b35120077e9ac54d7a1","impliedFormat":1},{"version":"dd7109c49f416f218915921d44f0f28975df78e04e437c62e1e1eb3be5e18a35","impliedFormat":1},{"version":"eee181112e420b345fc78422a6cc32385ede3d27e2eaf8b8c4ad8b2c29e3e52e","impliedFormat":1},{"version":"25fbe57c8ee3079e2201fe580578fab4f3a78881c98865b7c96233af00bf9624","impliedFormat":1},{"version":"62cc8477858487b4c4de7d7ae5e745a8ce0015c1592f398b63ee05d6e64ca295","impliedFormat":1},{"version":"cc2a9ec3cb10e4c0b8738b02c31798fad312d21ef20b6a2f5be1d077e9f5409d","impliedFormat":1},{"version":"4b4fadcda7d34034737598c07e2dca5d7e1e633cb3ba8dd4d2e6a7782b30b296","impliedFormat":1},{"version":"360fdc8829a51c5428636f1f83e7db36fef6c5a15ed4411b582d00a1c2bd6e97","impliedFormat":1},{"version":"1cf0d15e6ab1ecabbf329b906ae8543e6b8955133b7f6655f04d433e3a0597ab","impliedFormat":1},{"version":"7c9f98fe812643141502b30fb2b5ec56d16aaf94f98580276ae37b7924dd44a4","impliedFormat":1},{"version":"b3547893f24f59d0a644c52f55901b15a3fa1a115bc5ea9a582911469b9348b7","impliedFormat":1},{"version":"596e5b88b6ca8399076afcc22af6e6e0c4700c7cd1f420a78d637c3fb44a885e","impliedFormat":1},{"version":"adddf736e08132c7059ee572b128fdacb1c2650ace80d0f582e93d097ed4fbaf","impliedFormat":1},{"version":"d4cad9dc13e9c5348637170ddd5d95f7ed5fdfc856ddca40234fa55518bc99a6","impliedFormat":1},{"version":"d70675ba7ba7d02e52b7070a369957a70827e4b2bca2c1680c38a832e87b61fd","impliedFormat":1},{"version":"3be71f4ce8988a01e2f5368bdd58e1d60236baf511e4510ee9291c7b3729a27e","impliedFormat":1},{"version":"423d2ccc38e369a7527988d682fafc40267bcd6688a7473e59c5eea20a29b64f","impliedFormat":1},{"version":"2f9fde0868ed030277c678b435f63fcf03d27c04301299580a4017963cc04ce6","impliedFormat":1},{"version":"feeb73d48cc41c6dd23d17473521b0af877751504c30c18dc84267c8eeea429a","impliedFormat":1},{"version":"25f1159094dc0bf3a71313a74e0885426af21c5d6564a254004f2cadf9c5b052","impliedFormat":1},{"version":"cde493e09daad4bb29922fe633f760be9f0e8e2f39cdca999cce3b8690b5e13a","impliedFormat":1},{"version":"3d7f9eb12aface876f7b535cc89dcd416daf77f0b3573333f16ec0a70bcf902a","impliedFormat":1},{"version":"4304f640f7cb4724ea82441accb7c7607fa7207541182470d625adda99b2900b","impliedFormat":1},{"version":"e0205f04611bea8b5b82168065b8ef1476a8e96236201494eb8c785331c43118","impliedFormat":1},{"version":"62d26d8ba4fa15ab425c1b57a050ed76c5b0ecbffaa53f182110aa3a02405a07","impliedFormat":1},{"version":"9941cbf7ca695e95d588f5f1692ab040b078d44a95d231fa9a8f828186b7b77d","impliedFormat":1},{"version":"41b8775befd7ded7245a627e9f4de6110236688ce4c124d2d40c37bc1a3bfe05","impliedFormat":1},{"version":"dfa3496c52a75bd7584ce3714878175e6ebe76a2f17023a8baf63eef40f7ab3c","impliedFormat":99},{"version":"c1c447585ef70b93ba6d26bf8c3be88ae1ba4cdef0fd29f66222b87351d9d698","impliedFormat":99},{"version":"70c9b51184a0be8c566fc5a0906f16399ab4d78fd7e1200767c4f318aa48d928","impliedFormat":99},{"version":"e3d340455c7b922046b6416368d66695d17be755ed2ccb3cbf2714906d3b4ab9","impliedFormat":99},{"version":"97b445ad15d71078ea487d40e09a4c163f964dcea678fba7aebf74b7ff9ec8ea","impliedFormat":99},{"version":"26acbc2173c33aa19a4999867599e967b37089d0b4f5bc0825b3ff42fb715052","impliedFormat":99},{"version":"9d634f9a36188519cae8de61dc8ed1b4580b010403a51b5784ae3c8a95e12089","impliedFormat":99},{"version":"f5186773fa2a1d4bee9755b6ae530b3594d214bf85a0b7fdc90908ed467f6dc0","impliedFormat":99},{"version":"dd80b69ea25e81bb33467c84c95d1d19a2f2424b0759dbac7441cb6e39afff42","impliedFormat":99},{"version":"6237f682dcaa0c885383d2aabcac6b554824f1203efe1609839f785e62b5ae37","impliedFormat":99},{"version":"11ebd3d7f07e30b9e321e2be41dfe95e353fb7cbbfc7563edf901d5cdaf861be","impliedFormat":99},{"version":"50762b9635cb566c3981f0cf9d0cfd7469203d0cc821073d9d5e3f02bfc58471","impliedFormat":99},{"version":"7ebf07dc42b451959366bfa5af80973560556ad289b8fbf2b58defffc04aefa5","impliedFormat":99},{"version":"0596257bb2bd08bf1bce1fdce0cd425e99d4ef1bf0dec3d93813ca301c750e87","impliedFormat":99},{"version":"2dd4bfcc9dd60707e34b947648eb1747c9896ccf5d71dee8a77956e6da7fdff1","impliedFormat":99},{"version":"7f1dcc2868f014a60b81ad1a068de351a1dbe4b2d56538d8f321128b1d54af20","impliedFormat":99},{"version":"98fcdc1c785d6b3e748a8ce1c0d28ec9d526c19b4f8bee75cd5b83a145133df7","impliedFormat":99},{"version":"4cf46d0bf6fad6db2d012fed7b5fd898893be49049d3c482e8041616fb4a49c0","impliedFormat":99},{"version":"0cd18d20c1ba73a0151eeb0ca0cc34ef7e2a23fc8658e465e8988f266ff468d3","impliedFormat":99},{"version":"aeab3c5d96df280a42e3b3e6686b8ed50768291c49a49b8bf160e625aa419696","impliedFormat":99},{"version":"47388ff42bce8161e02e5f32ee3424baa9d05982faadc729a4180083f0c7e281","impliedFormat":99},{"version":"e334653b945a3945193b747c235af6e6511491843f2335bf149145fab898f217","impliedFormat":99},{"version":"02fc8485509623b4f6902d8bc121a14bd18efa5484fe53d8791af860dc147583","impliedFormat":99},{"version":"989852b8b6ae84622dfc7e6b2b87706d7535881767d3a9c2d1002321cca9bd36","impliedFormat":99},{"version":"42f504393062a5ad941d0b1fad9c1c04d4be2c8c19b68516edd71d7b623cff5e","impliedFormat":99},{"version":"70cd38286ccae0c91484d50904a1cc409edce9acfb132260e8056ce7da6ebef1","impliedFormat":99},{"version":"584752d2e25819c86ca41d772077023964607179034b04c107860c5310259265","impliedFormat":99},{"version":"c2c691d184645937896dea39e2721f28efd8dd88f4f426039af32566dcdc897b","impliedFormat":99},{"version":"5d918b5c5b5ea99c077957823d5709920067cd7767efdd4bda1e1bec8d905854","impliedFormat":99},{"version":"acbc3c0b001e5864f7f5e9e4d48c5c1e0bb6b7a4f83aa6e1bc7c997945511903","impliedFormat":99},{"version":"4bd0f984e8746502234d6f7712c4ed726dda8000bb473f3235798fed6aa40bc2","impliedFormat":99},{"version":"173359753c3fb5003f56b91c0677acd3491af556e4129c89e6ac8653070ca9ee","impliedFormat":99},{"version":"2402873ecc591933e2182df3bf4c4e3b840eae81aaeb3ee2bf51ac5649a11085","impliedFormat":99},{"version":"409a0af019c3f2a89f56bc92ee71ecfb86e1237be5eb0320b87cd9f58ff02899","impliedFormat":99},{"version":"6a3aef923aca4e84bc112d550ae157d89e8fe0ad96a36b19029573965db46374","impliedFormat":99},{"version":"416a04824d12c1eef3694921d66d1f06ae8822fd0161c9bfeac1791a6f10141d","impliedFormat":99},{"version":"12bf6c4b8beabe584bbce4623dda3f31d3567f2dfdcecbfd38533076c8f4dae7","impliedFormat":99},{"version":"8b44dd355385edd3f9cc51495d84ab54c94c0851eedc2929df0cf84e9cc052cc","impliedFormat":99},{"version":"dc96f5550ef4a4d5bdc94169cf225651e9d49e20b39697f0ab7abc5645f092ea","impliedFormat":99},{"version":"239a59335b7bcbbe1f940788164c7254dde1966f89e8c3fdc875a4c2e0370d5b","impliedFormat":99},{"version":"285decfc280fc41f9c9366cef1ff3690cd5c43283264dded309935b11de56efb","impliedFormat":99},{"version":"0237580177f1a858ab125992af8a6dfc29268fe7d4bac5308b9f462f88b0cd31","impliedFormat":1},{"version":"b124c0624b15412ace7d54644ade38d7a69db7e25488a1a4d2a8df6e11696538","impliedFormat":99},{"version":"372c2b43f33e8c2f1700322575550285045355b233d101367b8e1f6435fcd0bb","impliedFormat":99},{"version":"7ce85286905ea5df31526a72fed52ac60abf626f931e45da03195b84c6568bb4","impliedFormat":99},{"version":"5c92d8c6250b17ba6b51312494303d9a37a59b0babde25da032200ff9dd3025f","impliedFormat":99},{"version":"59a70076074e6de88ad6cf313ea951f53da55b701b881ac3ab89e66542cfa8e9","impliedFormat":99},{"version":"4f1ff2f1dae9a380392cd22e0cb7f45b29fcab9d43441bf251bb4cb0b4987d2b","impliedFormat":99},{"version":"426571750265b04002095fb7818ce3d62d91d4fb68bf0d57525c39046f49b998","impliedFormat":99},{"version":"9f5e60c1beb1892f99480c5163224821d6c0c250800af222556a067164440937","impliedFormat":99},{"version":"56fe16c6cf2ddbec7a0cddea7beeea120691f09667627cf0b660a1f7de57b09d","impliedFormat":99},{"version":"43912606e953cc2a0d6c54e00ac7eb53919e856d36adbacb5aa2a3f92f1c7948","impliedFormat":99},{"version":"30e705a92551b686e56c6134d03361be88b9e6661ca5c7ab3d0379df875f5beb","impliedFormat":99},{"version":"adbd81adbbf1e110e311d5c400d10356e46c78a162df916034c205907b206500","impliedFormat":99},{"version":"bbc504c0e1a75b23a69d4aa9e879daa0e8ac78875e417101c5249fcb4e9649cb","impliedFormat":99},{"version":"e0589732c91d21ae7ca572b4be654ea3f368ab07cb14be6e03327187039a7da3","impliedFormat":99},{"version":"2b25ac1d261cde802b7bc3e848249718de949474c548ce5e2aba175519ee81e9","impliedFormat":99},{"version":"c392097b6c54c254052cb05ad74addd3602f5c5576fbed253d8c6bbe4afb2e3d","impliedFormat":99},{"version":"fe18518da67fc2a8f089d946c0461a76be409185033295eaa6dd4dd25974ef60","impliedFormat":99},{"version":"da6eaaef1793a461517381d22b8c838f89aa77e5cc6ce01bf8cb6f254cbb29fb","impliedFormat":99},{"version":"838e8ab336e6ad14da5da488aa377119275ddf36cfc9cc375ec193a5396f1971","impliedFormat":99},{"version":"ca18a1def47a6a6665bf19530c833a19de87778bf0ac6219060752500dc59f73","impliedFormat":99},{"version":"cb74d8c7bd6f12c1ad204d18270bb6efa437754b68261fdf677b81751b270a53","impliedFormat":99},{"version":"33ca1e7c8e745ac79b8493bc88f06928d2e57d67798ea142d9eeeb05327b1398","impliedFormat":99},{"version":"1dbd6f3d8fa4edc5605a30fe334561a6a7e1c4cd370267b39239f8bab5978cb7","impliedFormat":99},{"version":"a308a78ed1d0c6e81ad6e573432feb2f834b50b5b23222ede8d446c51b80e5da","impliedFormat":99},{"version":"07fe68e994a8b37755a4cd523363d98c11fd3ca3d5a7b8be4c858b3a21b70628","impliedFormat":99},{"version":"42001f5498ebd540f089ef96daead2dd9f4d7d34c8e800cdb2b8bb27c9f1725c","impliedFormat":99},{"version":"e7a78330dad544c5ea4519b248cab3d19bdc7c7030a915b392e23e56275eaf2d","impliedFormat":99},{"version":"8990c138f4b98b1982f1e2a8cff2f88c03e462a539b1e221d4df425db2763079","impliedFormat":99},{"version":"6bd3f8ef14ca7e37de922118125c0af3feab394cf9e6dab8a39b20f74fbbdb5d","impliedFormat":99},{"version":"90f41e50fc3570e0baf90c856efbf4ce5191be031c7d981aa98c0a92d81d2cb2","impliedFormat":99},{"version":"4e1eb3432907b573b81d1d7bc568e8ff926d5d6189c4d63d0ad23ba412b05afa","impliedFormat":99},{"version":"d3fed3be43c5371b30718b9ca7dfddaebd2652515a036db9e1ad041a400f0c48","impliedFormat":99},{"version":"92552c139797de256fd27e61c28b50361863620dc649bb35f16682fc83c06394","impliedFormat":99},{"version":"675f36b1cc848905f8ccd119de9bb8c2c6741ffbce3978313b56fc9d9aa7e15d","impliedFormat":99},{"version":"4815eeebb772c78345b720dcdc58182715cb94a46a882a866a17d7c9d489e79f","impliedFormat":99},{"version":"2db367c471f2796e5790609ea89b18260254898e494e98f217fbcf6c95e74a14","impliedFormat":99},{"version":"ebe387653b357ffac7daae9c821a986eadc9d98af93693b53c9280ef31617e9f","impliedFormat":99},{"version":"f4d72e5efeb6d93ae8c96479ec865da2d62f40045e7f64ff5a4dc6e1a280bbd3","impliedFormat":99},{"version":"b8a68bd2bc829ec2c7aa54e6c59d0b9779ec6dc2b76f002ecd547ca2b6475e2f","impliedFormat":99},{"version":"c8c51a95fb695ed84565f8136ec51b91c15a7fcd3dfeb1919b15a0c36cf97f5e","impliedFormat":99},{"version":"4c78fa63f40c792cd57cfe8be9e879cc945e8cbb1adf8d96441c0c5e9e312b1a","impliedFormat":99},{"version":"e275aea6b83be0f3f21ebb4705878ad734ac3083e4ccbf9e1ca2ed7b705280de","impliedFormat":99},{"version":"41da230719d7fc369f5dc8365163eb772da04bc49954168c0ca8d63a9dc708cf","impliedFormat":99},{"version":"15056ca56f373e5dfa2b299cb2de8cfb3dabc469b1ea57b665cefc22c629bdf1","impliedFormat":99},{"version":"2402c4f5fd8476843cb4674d9bd6d22a931650bce2bf7f7215fa93fb1b57435f","impliedFormat":99},{"version":"4b8950fe18ce51b07315b4fa332e1617e8cd25724b82542cc381e891b33fbbd5","impliedFormat":99},{"version":"0081c79bc96bc642bd221790aa298c60dd00d5b82e7f412b9c3269722dc01e6e","impliedFormat":99},{"version":"1c41fa5eec39cd46e72152a521b50b64a85e3fac7d7af7787e742b36e9505cf2","impliedFormat":99},{"version":"a049eb2c6716e3a289540260fd134fa0d46e7921b87481773843d05d3c4ccc41","impliedFormat":99},{"version":"29f42d3decd31d285c2799509e1f050854bf18ac0fba075636a3e60684bacaa2","impliedFormat":99},{"version":"f13d66aa654759183465e70899bb465f96e11aa7b37ebfae205352d2b782141a","impliedFormat":99},{"version":"60e02a92c059abe9cb3a2eb9c0020ac3fb2045a0b8edf9e1908f0e92fe158b58","impliedFormat":99},{"version":"c0df9d4624e33f7078d500ae0ef98dd5360663495ed7b6948ffed5794b33c148","impliedFormat":99},{"version":"e1892d8223885519f0ad315c1c63faacaf1bb21a0ff31fbc90233361d601e6e1","impliedFormat":99},{"version":"819b64253f28d7688d0547a652524fbbc2fdc3676a0f668e244eba78f0accf29","impliedFormat":99},{"version":"66b8e8386b43152959f94a96d2129cb4bf1eb09e4c533aafc60e04a825549002","impliedFormat":99},{"version":"2b5da8c3a06da6f79a90b0157358bacfb59b9b509f117df36b4f0b412ea5ecff","impliedFormat":99},{"version":"53c08c5ad34d42f0808609a7f9e24b6da69336f10b789a0f799c4decefbc96eb","impliedFormat":99},{"version":"75fa95c043b0094fa54309731937e51c5ca4e3c45ec7f50c2bbd6d8a5ce03924","impliedFormat":99},{"version":"e53ec171edd45f7d3a1f71185a44e7d14b0cd5151f9cb3fe61022ffa0bcfd55e","impliedFormat":99},{"version":"33ed086cd25469664b42f0c8dca442a9174aa4d80e6da42aa994d604523a6ee9","impliedFormat":99},{"version":"c74e3a36cc6963d6f12ec279106dcf93920e702aa6744e3902133e2c77f645e5","impliedFormat":99},{"version":"2eec92c573547c517ecf81b4f5dcc545b51b869bcc90010517131e9723c90ee8","impliedFormat":99},{"version":"e884a9b6e779ac708627318203488851f7481f46bae7fdf1b8170f65a95457ab","impliedFormat":99},{"version":"31fd3a744c9176f702640d9c86f5f89b36907751dc949ac551f1edaf27ed21b1","impliedFormat":99},{"version":"95dbc39d71be58fa2a1c10b1ee9ce808ba27c98d4ba4d3d374a1049bb10d9bb5","impliedFormat":99},{"version":"6c6349c58213146a0f7d55b073b01595b2f4efdfd6fb1fd7017f41986165e3d7","impliedFormat":99},{"version":"d38e799192186313b1b79c27a5a190f6e2dd3faea3283d67354b5c38b9e8e5c3","impliedFormat":99},{"version":"46266695879f6e1402f27dfd4d7cf88f4c5d3165566d14418c99378bf741d7be","impliedFormat":99},{"version":"6defd3957b17889f712eb17724d096f4eca2181ff13bf5cc92b36fadc6a60c81","impliedFormat":99},{"version":"f7a1d239b4d1202753cc51f9b365b1941bd8c988a27f4052c8a22e99bdb3f95b","impliedFormat":99},{"version":"af4cfd93f027a4eae79edbca6dfd7c04e02f04a7f969e1975757f3c4c606f707","impliedFormat":99},{"version":"fcef727203a5ae6cc2b5dc72f6abd631f358bba57fa2f6a7ab4f03c6dff0dbee","impliedFormat":99},{"version":"bf79797cca920d50bc8481f322247d3db044de413706e2f8e541cc4ae5632fcf","impliedFormat":99},{"version":"9fd1646b7902fb9ff16155d0d3189d494fde677b950b2fa6ddfc130d192c32aa","impliedFormat":99},{"version":"745bf738ce5953190b37fd8c2081b0c7582407a384e5ab271c223827ff20495b","impliedFormat":99},{"version":"4ca745805cd5082f1b8365c8b23ce98b8beccd37bc6ca89b6f4afe4774e44f9b","impliedFormat":99},{"version":"62d5f9565c486b509d0e80086335efe15508f2d2d6e25fd2f9cdb59ccbb3f9aa","impliedFormat":99},{"version":"180997ff4fcb22095ad3b3d02da8a914a91afc882a6aba492363e19a40b51029","impliedFormat":99},{"version":"020ae25d899f36613ebc6cd8e2f9c75ff62be012a0f53bc9a00278fcba9eb2bb","impliedFormat":99},{"version":"b90267f15b8396beaeff2eca8b6dc859c2c576eceefe356cdb73a3d5e1812b06","impliedFormat":99},{"version":"59034bb5fdca9f89cd92da99c8e7bdb89d0fe81a9ed62bce4d0b8317a5016ff8","impliedFormat":99},{"version":"bff451404f7357db2c801cc89215d77c1469bd62cc981c61f36f54881a8f0621","impliedFormat":99},{"version":"9375ad4b909623c05aa8309ae7366c2ffa19fd02a172bdcc7489d0f13c9e91f9","impliedFormat":99},{"version":"9fe52544d088fc28cc59c67c83e406200e8d88514d71da525ca1209f995f419e","impliedFormat":99},{"version":"88a4111ac241ababe19821ac6df1b36034d77678ef9eb071236fc68a93feb0bf","impliedFormat":99},{"version":"ae1319cfd861c461365e0f19a2bae01ba1f7d64f7e2ad1d69c79197af5c4408c","impliedFormat":99},{"version":"7680930cfe5c89ebe913a0b10da2de9aef0f317a4a3eeda21671976d383653a1","impliedFormat":99},{"version":"2ab2057600d65b45350c25c1bec4934656f2d39f1ff70959a9643c35677324df","impliedFormat":99},{"version":"a83fc32d83892cb980a85ea2eb9c59130c9b00085e99c03a34729961d7090e99","impliedFormat":99},{"version":"9d22687f18683034d75d336a08c243f0828e348f86ec0094589c7a376e1ac993","impliedFormat":99},{"version":"ef2723535f426bd3d35fae7dac6fc44285734808e63e162850028f7c8f64eab5","impliedFormat":99},{"version":"ba475326bc84ed5cdecce0547b809e40f8e3b3b69567daccce2da709f6657e4d","impliedFormat":99},{"version":"1232105ebfa658b90b0358c3f6b055c1c3b2105b22d3b53a48392e6baa38510a","impliedFormat":99},{"version":"801025f85308edcbc11f51f2f7b970c2994c1dfba67475ca7a6845f157d65690","impliedFormat":99},{"version":"d52e1934a56b1b86858c5fbf1ee74424e3d3e475d71cf3d4ff17466d8b6ee2b5","impliedFormat":99},{"version":"e121ebe3428d09b966f23085b30e67eea66dee356e2cd7de6fb341e48dcb8c39","impliedFormat":99},{"version":"9f7fabfb8a4cca76a24fe78bf582a36f68a8121e23503d11c08680ecc17c49ae","impliedFormat":99},{"version":"6491802b91f0c7064ef88fa1754e3b5fe9c58ae6e3f60a665e1c30d61d179f2c","impliedFormat":99},{"version":"f6d4174b8563dee87c79a847093f6f95d54929aa9cc9017554570b823e123d30","impliedFormat":99},{"version":"1d9807915746d557153bd40c385d3e9d27ba86973ad9e6a51cab7bcdf0ea7d68","impliedFormat":99},{"version":"61af4ef5b8bbd94587a1d9686bb8969ae2d0f1f9b372ba387b78033bf6d454b7","impliedFormat":99},{"version":"662596d21e9bf7b925f8aa6e47d6c33e69b56770572cc7f74e8fbcb87ff2fe57","impliedFormat":99},{"version":"006bc51ab2ad216949b6e269218ab104bea5bf5a6bdc176e29fd80fdc64b6a2a","impliedFormat":99},{"version":"044de581d473e3e7bbf54d53bac8b5ea661d8fd75fc5a00b6ea118ca7320fdcb","impliedFormat":99},{"version":"e60d69f60573a73631b4e88023b0cc9075db33557edb8c5304c6fa98848e6594","impliedFormat":99},{"version":"00b62f3be192ec5d8a231fc081a87cc28f9f5480217436405bb4b17802f12596","impliedFormat":99},{"version":"90bac9951033b4ff5bf5f91b0e115064983c8548e986df1c7d4848bf2b227713","impliedFormat":99},{"version":"6caf45b4756059c469b4d2bec3606723dc5024935003bfe82d29dfa8a61ee6f3","impliedFormat":99},{"version":"7cf5a00c911c146544ba51c5bff8a269490fd26443dc4caca734a20a3081196d","impliedFormat":99},{"version":"07e1b1f08546f48be2bc0b4deca54839f358ca34cb3d36ce3fd42f7bfcd651b9","impliedFormat":99},{"version":"f9580d002285dee1fe796daf7917eb318b6c34f1b5d9e2f145e939ff909c135c","impliedFormat":99},{"version":"ebcb1dd87e70c66d1b3bf24a1314395602a63e025dff0b45821e21717693bcbe","impliedFormat":99},{"version":"427546f5e903bec19bd8b569b8ac84b54bcde43d4f83c926bd7f481dfabd4233","impliedFormat":99},{"version":"f2c41f080ef6ff94d345d1eef1e722a9e14e237dff60e4d751034d34d3f8abf6","impliedFormat":99},{"version":"01c4b53229be29e2e89b049eef9ea8bf2c4e5cbf22196de4751c291840f08738","impliedFormat":99},{"version":"648bac6b4cbd7f71b7240b38381eb0e89f8574857c3e89465b7d6ed0ac7a911a","impliedFormat":99},{"version":"0973d2d071f665cf3752e57f2ae48741af13c7487aa680f1e115344fae666dd0","impliedFormat":99},{"version":"3e7a057af1e95a10f6c14faeb3a79956c7538e5779476276c079489dfd40041e","impliedFormat":99},{"version":"c144b0c827c61488f259117419703b9ee122c44cc9692a50d72e0b1bac99f272","impliedFormat":99},{"version":"6b34135383a761875160f2877e421993141b0d4062511ab8e33c175d52189850","impliedFormat":99},{"version":"fc7c737e08e1366d03054fe09e83f3bb7209130fd0c73e85376518b1978fea70","impliedFormat":99},{"version":"ab8ae523f47de4cc04937d39b58bbffec495a050e7f711a87cd18c2306612a59","impliedFormat":99},{"version":"a77cfcfcd19cdf9640d5d03311768e88f51448c3267daa97ff99a1797911b8f7","impliedFormat":99},{"version":"be33ffdd7b29dbd6698f65e2b390e464287f653e6edefb8e39b4052b5106c295","impliedFormat":99},{"version":"1c7a87fc3b4cc27b8da2ce44064a535c7d974025285cc00b32b8156017ba1e5f","impliedFormat":99},{"version":"c5476702d0692ec055043626c2deecb012ac4972ff179ec96b780177f802cd4d","impliedFormat":99},{"version":"29f823cbe0166e10e7176a94afe609a24b9e5af3858628c541ff8ce1727023cd","impliedFormat":1},{"version":"228ceb7e1dda76bff94f02c5f8b701ff455744820c7727572675f0eefd9ab9da","impliedFormat":99},{"version":"0ea4143dcff370d3684e760355ef8bb1636fe34bb8e73dad8e58d2f8685ff77b","impliedFormat":99},{"version":"3ce8b096f40d5bc0abaf42a8e173ac90af95a3cbd99b5b93ae112a3a31c7ad10","impliedFormat":99},{"version":"eb52b5aea3c433e0134825df9dca5df5d3769dc80172d0b9d188d340d0e37005","impliedFormat":99},{"version":"064ecfbd156e6b75ef76357e70351cd244084f247e8cc5574c7329866e9876dc","impliedFormat":99},{"version":"0b63b3d1de0e82b1b099a10594444f2daa1e7db934187456ec70ebf334b3ba31","impliedFormat":99},{"version":"a94716b7d76814016463d61e9e2c326966ab1c33cfcc79162264b98b5c88346a","impliedFormat":99},{"version":"09a97280d3978aca7b2cce3b4c04926506a8513d1bd5bb668d6180c96baa5b7f","impliedFormat":99},{"version":"df76cbb9387bd7feb74bf0eda9fd9f51ff64ab180bed400c454069e8c7bcef03","impliedFormat":99},{"version":"6ead7d10dc47aff616d66c870b8edd22c4459029c21a13f4c1a10be41249cb7c","impliedFormat":99},{"version":"32eba5b5e407fa8d4e582ab45a04dcf30abcaeafb259eed2e6b98be957b95d5f","impliedFormat":99},{"version":"bb739c316e9bce9476a5d75c7144e358c30e29503ffb164c92e2b408f96a4f8c","impliedFormat":99},{"version":"b4200506de3a4df445fe0090dcee9590b92baa263d812945309af705378bbeb2","impliedFormat":99},{"version":"d3f0c1babd17a474416bd28b598781d80e0867181152f580fd98c1f103f5ca47","impliedFormat":99},{"version":"00d53e7020681656b783d7935e997f5ab84666e85015594f62e5a2d8436b36bf","impliedFormat":99},{"version":"2dfedbc411cb94d7ee9ddcd702f6dcc72efa32e9d7b1f0fe11709ebbd1c69ff6","impliedFormat":99},{"version":"efa9e9b6dd2f713081d8b77ea79a7dd396399fd53646b0dae7125b4fa1ee0ae0","impliedFormat":99},{"version":"e2e16ce7f64f3422a214cc7b4a34857f30ceb3ba93282b8dc4b5ad963c0e6233","impliedFormat":99},{"version":"6320d4d480881ecee41555bfa10112999a50fa3ba72d7c248ed9e856a98611a2","impliedFormat":99},{"version":"392292fde855e73c426f948b3fec409cb22d64b5409f76ea3c931296be822b0e","impliedFormat":99},{"version":"4135a812a6236966a66e514376b337c8e08ff3340c22c49983ff6b51c5523310","impliedFormat":99},{"version":"47c2d50369f78b76784f6f3f517aefd21d14e2ee98b44145897f2d47ba56cdc2","impliedFormat":99},{"version":"035931c7779e0ecccc20d226a7922167cba28960f662dd090126fbe634f17243","impliedFormat":99},{"version":"2e28bdb13d21cb71f7570272b5c6fdfff72aa69f67527d78d83b4ad728c699bd","impliedFormat":99},{"version":"d5c85ce394ed05ce348e9acfba82a6cf9cb5f71e2b4f41a94776f3cf1db394ce","impliedFormat":99},{"version":"dfa287375bf0ed920b3a8a1299d81a9477cc954bb9a42eaaced0460dd2f30052","impliedFormat":99},{"version":"876580fa845ff76c94b8821aa4ace0cc957116db73eab034dd521d1e56c0217a","impliedFormat":99},{"version":"8f41a87cf8a676e32123dabc9bfa23484c3eb95d4ae3296c7ea516bd196181ef","impliedFormat":99},{"version":"2285d348fead98be5e315b6fb296ed2422c6ca8f1c01d272932dbf98526dcb3b","impliedFormat":99},{"version":"e4d63a75c723e60933d5fadba912dca9b9cea9d95ba19034a6a09ca102cf22ae","impliedFormat":99},{"version":"6945e5a70d4b75a3143bd46456403c6bc530d7e1b01bc213e42384a959b159d8","impliedFormat":99},{"version":"ee2b55f8bb7ef6ded0cbc9c8a0223fb6221872c15b6a138cdb7f22319d46ef24","impliedFormat":99},{"version":"a38395d606f91c6bb03f4256e68b6d9d284e0f254891f06c49fb5decb5b70d5d","impliedFormat":99},{"version":"19b43dc78187cd415968ecefe18be9321989a22e2e4c30a37092368708aaef00","impliedFormat":99},{"version":"054275fe65f7099f8a3f49f965606bd7df3e4d69073c3ff4bedb43c12854a29a","impliedFormat":99},{"version":"c434426d2e9950bae6ec203af953e3154b0a63a0c840d4440ddc0f9153966fae","impliedFormat":99},{"version":"a137742befa920359913aabbc4ff215e5ad7e3f420538331e6f13fcc2602db5e","impliedFormat":99},{"version":"4ab4240d4034cfee9c0934ddee46d194776e6f0ea98ee1d4f6f049cd0563856f","impliedFormat":99},{"version":"0af472bb5617b71b8cc49fec94acbf19d978cea766334e559c4595134eae98a5","impliedFormat":99},{"version":"213a131d904058c91894fdd8a92e3bc90099df0efc37ba966bfefbc94414c031","impliedFormat":99},{"version":"adb7a3c5e22810386a310556ccc2c56839126751fbb0f1781bcb79298a45ad3b","impliedFormat":99},{"version":"8fbb89119298c69dd6208ad015d11e006969ee8e80029c520cde1e580ba8bcda","impliedFormat":99},{"version":"ada291abf7eb977f4b2d944f05209e9658196c6a7f6b068c5ccc2a29c682d474","impliedFormat":99},{"version":"4b2be28443d5c4b1df4f142b055e52bebaf9fa2cb4370befc27fc55093c50bfe","impliedFormat":99},{"version":"6fed8576472f83d405203c6024a42d581339953ef13bdf87aec116a43c58cbb0","impliedFormat":99},{"version":"e22f3b9889cc6adf445e8eea72b4f7c533816f15d966ea6131cad7c49cd309bd","impliedFormat":99},{"version":"d8878dfb0b3a429de5be48f0a34f0cf651e63a80ba2e708d838ac0f66e8f8cbb","impliedFormat":99},{"version":"aa5fdd0da1ab240f20123ccd18a2792d2a39fc6c97ac14ce9159600c699ae890","impliedFormat":99},{"version":"90488d23e66a59da7ff58f4135dc94ff99f8fb39ce42b5d1c4dca1e4c28bcc09","impliedFormat":99},{"version":"fd4a063820373d8e22afa8dd9bf6a2c6178f8296060dbae03c24e45566173745","impliedFormat":99},{"version":"07a1b60636713f1efb1a3c96cbb0b90b6d29ae5b1cc26e164fa6d9dd8afeeb06","impliedFormat":99},{"version":"e630e20a3bf05a29ebe41434dd472ed2290074fba5c5175ce224f9dd849bb06e","impliedFormat":99},{"version":"f504648317ced19c97698540659f580e5ff3eaa146a7f4258e1a3c71e629015d","impliedFormat":99},{"version":"9123785e823e0c8f451dff794a5792e1dd2c3aa1f85b4de60cadb19166807a88","impliedFormat":99},{"version":"5f280e935f1e66af56308d6ab4699396bc826635622e808f3e44479533e619d8","impliedFormat":99},{"version":"ae13b49bbf0dba7ae0f97c8dded04d447b4a5f2bd701d5e84e41c2c8729fdf69","impliedFormat":99},{"version":"65b6719fa49ad67c7ec3c1703ff0bc0db15437d911c14837797d6e869b0a4e28","impliedFormat":99},{"version":"c37f46fc909ec2894fd23315d746ef0d71d5e270e4e3d39d9357f57ff604fe7e","impliedFormat":99},{"version":"47c0002c04c8db488b2d905120ea33a64f88fd6d39ff86057b9d16f0ef676496","impliedFormat":99},{"version":"39d82ff8a26697b0a9b615e1662ff1d00ed020ed2058b72ebc71c2061f956c43","impliedFormat":99},{"version":"e90bd8b2732fb5521bb8ef2cb9d5225836d2c5722068270ffea57e922802e4df","impliedFormat":99},{"version":"6c238c41bea73616ad067e4621c81f69b221e13d44a283466792f8a7a50c5e41","impliedFormat":99},{"version":"06cb7fe0b9f8bf5a446207209c61dd06105b1a3c5ea28be26aa1f32bc7ccd013","impliedFormat":99},{"version":"acfed6cc001e7f7f26d2ba42222a180ba669bb966d4dd9cb4ad5596516061b13","impliedFormat":99},{"version":"f61a4dc92450609c353738f0a2daebf8cae71b24716dbd952456d80b1e1a48b6","impliedFormat":99},{"version":"f3f76db6e76bc76d13cc4bfa10e1f74390b8ebe279535f62243e8d8acd919314","impliedFormat":99},{"version":"1ce1adda1ef4803a5bcc01be0432555d1a0b3d7f7c04fa3aac05cf617f8c30ce","impliedFormat":99},{"version":"950629f774befb79b9cd1b486c713479da4d3d4b2cafddcf73d1f738d2636c3d","impliedFormat":99},{"version":"a0ea0ebb80cc84ee69c710fb2facb1aaa928bbba76e4cf2d6986d227e201d8da","impliedFormat":99},{"version":"cbd1648336bab35437b9e62253aeb73d651485818fc42235ebe38bd4e2a54e93","impliedFormat":99},{"version":"39bfe11e90de3ae44067734a74de05ca478d9c8aaaf5b035ae3b07f12c15ba66","impliedFormat":99},{"version":"91da497254ee49742e2c2610ba6718b98118652a1c04da086bfd2d0894ea3dff","affectsGlobalScope":true,"impliedFormat":99},{"version":"315110ed4d8ca5888aff4207e63482a62cbb1f83aad4c37e04667d33e2d73db3","impliedFormat":99},{"version":"05166d6aa2c98b88c0d44bc0d36e5269443c1252e01e51c5a208d73f736c4aa9","impliedFormat":99},{"version":"c736eeea836a77a4f8e6f9a3b3768bf2180f27e7bbdb3c6c3869fb0a62efccaf","impliedFormat":99},{"version":"698dc54c8a0f51a3d8823f3451ea79eee82cfec196ea440399a2520071d004fa","impliedFormat":99},{"version":"25db8776e66d770904dfc0e46929eb83b3341e3027e13367d40a389dc6daa185","impliedFormat":99},{"version":"ab09a3a140720fe51b127cef458f47d36e5da0e8ba9c01daf908f2ea1ff51e33","impliedFormat":99},{"version":"74bb67b45616e027976343955522f617f22f4349c2207a8501af9b6431b78258","impliedFormat":99},{"version":"35777c2c12d82291ad77fa52465a929ef72d4a320183374ad08b28e913baf5f6","impliedFormat":99},{"version":"e8bf537655c2eea593883776df7fa797b97fcf907a3e8e0fedb06f53e49bcab9","impliedFormat":99},{"version":"ef36f57bdb59b53bfb51df88c929498af65bd5dcc8c85f4c6b51538a14728bb5","impliedFormat":99},{"version":"a04d682941640ab52b11858b12e3dd1fcc47d7d46e36b4a6a06f23ffe46c61aa","impliedFormat":99},{"version":"1d0ffa243a01e87aa477ebaec6fc22cb75f69470390ed3f35960c46f0c26c4f5","impliedFormat":99},{"version":"3b0333cad16544858f602e0b43383f355d50315bf68de10c80686fc2d64addf8","impliedFormat":99},{"version":"6882dd73833e7639fd8923b689170a35fb5ed94f4a9541c2c3c84d9bddaf2cd1","impliedFormat":99},{"version":"ff6abb987e10d7ab10b72ec1c61c39b3c53b9e087f9ce63c66b36dc084bf4213","impliedFormat":99},{"version":"2cdd6397eec82e364482a25afe03b4512dd8480646a2bca62c9cc8c5a6ddab08","impliedFormat":99},{"version":"23db95cd3ac5ec46157fc6a89537763ee52e9b6010c9bf4e3d0e4ba4f004b277","impliedFormat":99},{"version":"16d7ff32d6cdca58e885176c2158ba38abc048ebe384a25a1f9d642ed1f3b029","impliedFormat":99},{"version":"ddca685988f12f42c891b89cc9a5d144e6ff36018ed8ae18b71296d3b9015d5c","impliedFormat":99},{"version":"5c0b4f910cd8299711de20725a05fbedebba8d244f2f79abe523ec67be5c6926","impliedFormat":99},{"version":"82c7c7acde3fb6d65745f7a13f735a57915acaf204ef594b5df04a657ba73c5c","impliedFormat":99},{"version":"574415f263d0cb25997c4ad7c2abceebb10a8a48db919c306b328137f2e6a0f7","impliedFormat":99},{"version":"982c5fb122fb8e15707e355c8a285d63dcbc3714838316cbed8d5fe1747ed94d","impliedFormat":99},{"version":"9479ca735acc6ff50fa77b8c05139367a5286f998e7d5498433d5b2705b6a191","impliedFormat":99},{"version":"bd9fd848dcedf92241e39da31ccc77672f07fd669c9d26b82a3bb8433f03e1e7","impliedFormat":99},{"version":"389a1b4447b745031dc7b2302db14d84dfa707d29fe171f42353ec7cd200e9cb","impliedFormat":99},{"version":"52a9da84f9da1268de3793eea954d59a7f65cb6a6ca028c983dbba5177cff314","impliedFormat":99},{"version":"c42f98e9b815a50f972087ec56017a5390b519cbc6a412c222666120b991e735","impliedFormat":99},{"version":"86e08e804f94f1b8e58d9a424a175a77d412a85ad27cebe144a8747b1ed6bf27","impliedFormat":99},{"version":"dbcbd1f1e589f473ea9257f549447e14f3d28ce8d1461663d84b72b151ca7623","impliedFormat":99},{"version":"945db4a6240eca319705ddceba74e7c1f1aea23ba0de2ae6f78128a5b768c25a","impliedFormat":99},{"version":"579b4eacf4a6dad490d79fac4fcc3072bf33386016aba8302e53295c529bdeec","impliedFormat":99},{"version":"63904b21c9f2f4b8ea99416d9c1c7f6ff2a7b2ca6f95ea3a7d20aaa47ccbbf93","impliedFormat":99},{"version":"48b050ba3d61ab21fddf2a33e6bcb2a60e8611fcf8f8e8841567fc2c13a2f43d","impliedFormat":99},{"version":"17244f1f48bca94e56a774044bde49a231e5c1708af6ff46b08e8606bdfa9ef5","impliedFormat":99},{"version":"1a0dafb18634becfe580bd0df166ae732b29a581fb9c017abd962fc1db5a4b06","impliedFormat":99},{"version":"fa86cc5ecf59cfb3c3ecdec0fe63ebf3432cfbba9341adbeac7897ac5290526f","impliedFormat":99},{"version":"29cf64f56307f4a1c8ed31f1ae3613b29ba6677474b2b6d3531d28eba064c758","impliedFormat":99},{"version":"84c509db4baea80e828776a78f43d0059dd00c340933b49785609262b0b841bb","impliedFormat":99},{"version":"4b11c59fbf5da9fbfb33619eaf7b3fbed0c8e05c1c59ff83f246d0890ef3a46c","impliedFormat":99},{"version":"f3244e4ecd8c7dd5cf0a8abee16c2120fca4eb6b1e3468696ed20bf0e2cb5e94","impliedFormat":99},{"version":"6bf4ec1775c947bc4701463ab236c765be3b17f16521897790f49240c7ae32da","impliedFormat":99},{"version":"3c9b178e6a4bbb84eecd35566218b3bbc65e370d957d54239bcf0bce23919136","impliedFormat":99},{"version":"01cebbb3844c784c7f4a9baf7152355e5c3e4a4c4d9d0c73b3d26e84aac97605","impliedFormat":99},{"version":"b95267a73cb850839815bb8c27bcfbc30a8fd3bf2ca43b2ae47d25e6d8bd23e4","impliedFormat":99},{"version":"77d4c17d528ec2937a36db24328706acb1a401c625a91368fb8808dde195eb1f","impliedFormat":99},{"version":"fcf00d9aba1373a6da3bbe2b717e5554bc961713624294566c7a539b522cf6f1","impliedFormat":99},{"version":"606d978489bc5c8f574166488d57198beea616f5592d46a724185efb2d824d9e","impliedFormat":99},{"version":"f61dabd022b4ea947b895d2ae450c70ad7631c9291ce640dcdf0c4749bbdaf88","impliedFormat":99},{"version":"3ce66e86077c2c1c4acf288feb26363c6ed8cf926e82cb3d4f6965f8651235ba","impliedFormat":99},{"version":"30be54d2d77b6750ca9778e97c32fa04031363f92cc3ae42f704384b7c817a27","impliedFormat":99},{"version":"345abb7644b6020472d08a70af503146ff59e0120e1b066e25d5ae2ed62e1530","impliedFormat":99},{"version":"cd2e4b092e50a2fe23d26963361973222ff722371bff5431b1443eb159fbfcdc","impliedFormat":99},{"version":"a529b081e40e2a02a27f27f8880f38c07c1682787bc57e61eab5298c6fe1ef2c","impliedFormat":99},{"version":"9a8cf13863154b0b4b2c98e6ffd9ce44beb3a167d576247f35c016628ee0ee8a","impliedFormat":99},{"version":"c4a4e6554cf275be1d4b2088e5b22fd0474cb7383a8f6d40ea5092aa7ee89f11","impliedFormat":99},{"version":"0ecee0caa35385545f829a41ec36f9c30f03e8377670505d580e6223b3772c05","impliedFormat":99},{"version":"ff3d808e85161911af6482955f91a7b927e8896686d6c7bc02f30a1e3bccc79a","impliedFormat":99},{"version":"93083866f898849ea557d7757d995607e14a93e478008b31d64807b19f5b43f4","impliedFormat":99},{"version":"942b2ba4b90a4fe7ecbd3c7b6e10b5babad8988ce7586c8f59c3e8098b48d666","impliedFormat":99},{"version":"b3875615a0b66ad17527b567fa23f45de72f31b4b71e35d565b445f1a5322c2d","impliedFormat":99},{"version":"7dfd4448a70de16349559978699efc5e4d0692f5f15ea665df6ea5ba4a316c5f","impliedFormat":99},{"version":"5df19c4e68570874534fcc22a97adf4d38f7ca7169c2d4948dd9601766172e00","impliedFormat":99},{"version":"50b05c00ccb065391fbf88942fd47a29fd5673f2611a075b027f2c9150ccdbc1","impliedFormat":99},{"version":"580d90fd1cfa0a1c8e40e904ebf80aa759e8ecb9ef7c1a5d8e3dbbbe1d4ab598","impliedFormat":99},{"version":"aeef2b9dc084eb0eb7274fe4f202f9761ae37f9fb1ccc06ca2876e4648766cfd","impliedFormat":99},{"version":"d2bb4d2283705a27a81735b8f2dafda8f88f8e84e2984e2f33bbe47a297b0f38","impliedFormat":99},{"version":"c3b5b25e480c194f84fbe93ae1cd6c6b9dc1dedc2ddde6e5763a116aeb6e1356","impliedFormat":99},{"version":"511a4d61d1931e3fc573d3c48a31811e71bfc560c3c72e4217555c780c9717b9","impliedFormat":99},{"version":"8bb19c87e06d1b1eb4abdd6f2cf689a610091782e6bbbc54f4ac2640dd68cbc6","impliedFormat":99},{"version":"6411ae48a17fffea70a409901fd0c0f65aa2ae632ef04f793dc037675c170ac3","impliedFormat":99},{"version":"85750701be2201aeae8e942aebc325623e796282eeb97d744d0095b658ef326a","impliedFormat":99},{"version":"734c59a2a1fcb0e8d9e52f4d79632daeadb59662d396d2c37f8e3e459ef0251f","impliedFormat":99},{"version":"cd7b5914faabaea4ccb10a667fe9eb868f810399794ac7f03bc806b297d1be85","impliedFormat":99},{"version":"3d792cff796ce5aebb76e8ab2379bc78b5c9f7330b689e039f9f148d1fe5d715","impliedFormat":99},{"version":"41cb729210a1308dfb9aa1be424211a55704a7ec1e6ed6cee9dcd1b29f7f4f7a","impliedFormat":99},{"version":"6634e46f68084f7b3b6978881df14b6391a589a8f94d8b461d98716abfc72c1c","impliedFormat":99},{"version":"aa815a63dc079520c10be59ae1467b3c5a4e89b90d0acb764d63d0547792fcf5","impliedFormat":99},{"version":"b0d249d1fb00f9e1c221073534cf3c9435cc1e550235be401f77f9bb92d51f91","impliedFormat":99},{"version":"224b9fc89ebef70467177babab559d35c17068c092c4473181928cda6f460528","impliedFormat":99},{"version":"cdbb785a8089b193a50ff5baf3d1a3f7775e534ef929bed3fbab8779b1484b7a","impliedFormat":99},{"version":"fd78e36bb843e97aed0b43bd39e53aa196d972f1be72962c05e746ec05efd56c","impliedFormat":99},{"version":"a6013f81816dfa93c836bc5d7c37a731789f7ace8b67067cc90276261e700ce6","impliedFormat":99},{"version":"a5fa825937ce924b2a71b402751dec0129984af1027cf54f6427ac124722d140","impliedFormat":99},{"version":"794402b0bad18eb65ee4e9da237fdc9087c903929113f592c7c7f30c5e9afa10","impliedFormat":99},{"version":"d91e173dd09648ed1c583d76e8319da6b2995744c57142f14c11333ce0b6a004","impliedFormat":99},{"version":"8e20ce4d814ddd735f4fa06adcab52f45d35a317fdb1cb179ab2566329bb1d85","impliedFormat":99},{"version":"33603933b9551e6dfb514f27c65d6f380603ea630965be1647be6cbf689b1ad8","impliedFormat":99},{"version":"5d8f83f1a5d56b696829ffe8a26dff2505b6bb6317acd4e4ca9772219e0bd1f9","impliedFormat":99},{"version":"80b253260ccb1c7049796dc40cf74dbd5ef05c52f8a339c323b156602ee54ff0","impliedFormat":99},{"version":"21e5f5ed4bde9792abe0fa6a46e5f1493af2bede44d6b470310efdf885a1576a","impliedFormat":99},{"version":"5a21251c2b54f33633904aca8826af04e8784b60ce589767e19d5b505679ccbe","impliedFormat":99},{"version":"aeb105613abca96fcd782d26190c49e3adbe7cc0c8508e64e3f5824d440bf32b","impliedFormat":99},{"version":"6c9c5290f9df283ac680cc60c8d51509c882ba60f385658b821a57d1c0ae6d73","impliedFormat":99},{"version":"40b41bc08f1a2ba2471ae692cc938c7e150909a23debd819b81cb208ab1c6c2d","impliedFormat":99},{"version":"fefbb5072f380efe94baef8bf1d583be8d97b13406a0a223b2d13029c53d5d52","impliedFormat":99},{"version":"4358cb634560d11afa53a7ab9c57ecc331f83e676d5219c6ffc372ef95711c86","impliedFormat":99},{"version":"c867f633a2bfb1e1e5b50367cc318320339d105c97ab19e2e984b0d623726625","impliedFormat":99},{"version":"74960c136c0b94ffcd0d4e4ac090e291723d2fac9cb2bf4800364082adae7b40","impliedFormat":99},{"version":"6cf0d4e968adfeceb955c063525ecdff4984b63a352641bf31294e0ba528d03d","impliedFormat":99},{"version":"bb81ec0461c5b4d61812169cfec4dbf22ae34c378c03015d8651c4684bc2cb58","impliedFormat":99},{"version":"6b8864d2723a2235231045a562403c1ca48bbe188c0c2efd0ee264ef058a3a00","impliedFormat":99},{"version":"140a9faf0657ea73ea5cd999b1a124a3026d5a717eb93ffcd77598d49c877b26","impliedFormat":99},{"version":"5990fc9d9db0e4119c574929e374c1c16607a4c7878991171db8b0f9d4d9b281","impliedFormat":99},{"version":"9deb11535172350e1503e8d1e738a4abb86728f98dbdb798cc2cfc2a5760d567","impliedFormat":99},{"version":"766d4a8bcadbd612d898032ac0eaaf8eeff6133401e3c717db82d36025b47dda","impliedFormat":99},{"version":"232eb45911fadac44a22df06f326bd38a021eb56812d8cc40c39d6ee342b749f","impliedFormat":99},{"version":"7d37475c1d66f90f612fbfe17b76c5db8af89c81b678eed8767845ba70b5596d","impliedFormat":99},{"version":"8b865bc7c5eac3fc3e04f598fa24051af10b930d0d2b236455a2406a8461dfb5","impliedFormat":99},{"version":"0a4c35db44a40179f363dbf5e4957f27ebd22b8d2bddfa8bd7aa18dd2e7d8b95","impliedFormat":99},{"version":"8fcc04a9658c4831e1bc51d141e8f2107225b67b58f5f97fee64d05b4ca8e4ef","impliedFormat":99},{"version":"6fff253bd3a618f9afc3061b92a64fed78a91dcc9f546333869ad8a90df235a9","impliedFormat":99},{"version":"d32a99fdb970cac21ea1f293efd2cac285f2f79b75c2210e3e553a749eb363fc","impliedFormat":99},{"version":"be1da1d2a3b6ced6f92229818951f1b9d02058ed804081fd72cdce97044dc8f3","impliedFormat":99},{"version":"ab4571d26c542c8c1874e945e088c086435ab1a7b0db5280f4c82c433730460b","impliedFormat":99},{"version":"230482934c2176589ee58e456bc0c9d460196b8a847ce033939bfea452be0f02","impliedFormat":99},{"version":"4904c027b7c738751e09f844db69a5a7f7766f62a57f7a767db979b41a0f1aa8","impliedFormat":99},{"version":"6e9bbf0db5c6bdc4cce0f1322869c79ada9817408f323d2b4837fab5150c591c","impliedFormat":99},{"version":"ef52a27b4594b6984d38c6be3bc2e9733249c137a82a462a5a419f01fce182bd","impliedFormat":99},{"version":"df9134fd3797b67b67004050015c9e2df319fcaa641ac01c90c339db52879bb8","impliedFormat":99},{"version":"4427147efe08e756f6f734d517a8df0612af43d06a3aff9fc1669da470f0fc3b","impliedFormat":99},{"version":"d9e89c635a6fd051544f4bb7766bfd84f71834f211f6a7aaa43d33672584a33d","impliedFormat":99},{"version":"7d391aa460aaf0345f16c5c15966eb879d0c19a40e9cb154b0ba5b8add2d8a77","impliedFormat":99},{"version":"8b39313b37396a49f78ec24739ebb5ba58f73fe574b64ae7831964fe6f9ffbe8","impliedFormat":99},{"version":"bd09ac8d235b530ff65f83894030692b5742b938ad583151129bd6d40b0ac3b0","impliedFormat":99},{"version":"e874c212528b3649efc0c2372f8d97c6a3533d6bdf805dace973c8862ca21b9c","impliedFormat":99},{"version":"041378bc2b79fd773b61ca31bc19b51b1481efe89b3cbb10e5185831d02a234c","impliedFormat":99},{"version":"55af0e3f4dfc7859f09bef81f7eadffcc38e0b219045c92816ea1c15ade7d5dd","impliedFormat":99},{"version":"418711fe7c49b5bf07a84e3ec8e1334c6350b27b3c454fa3e221bc1d8d301cf7","impliedFormat":99},{"version":"007f9f63ce39053e1584c55eee702749e597cf931674a792ff9aa5079a6ab852","impliedFormat":99},{"version":"af7729b79e4794677603b04f16cb6caf1cdcafaf680166b94aad138c4b2152f3","impliedFormat":99},{"version":"dc8cf04600e102d319d5c840234814a8724496d0565d189666dd824c423d0dc8","impliedFormat":99},{"version":"a0f979369bd818564a3cd6b3703b41040f7dbd9598d071cc9c5151559b4c222e","impliedFormat":99},{"version":"944ee9b0f6976e5a43ee828dbd2ff3d55f5158273d5d96f223695862abd22a92","impliedFormat":99},{"version":"71b8f8ed1f5d71649035676d4d8276f65468ef8905064ac0c5a1571d19409a72","impliedFormat":99},{"version":"6a6c7ea7779b1609b2c63d5bcdf19f5b598492ac2e098f77ebfaa3d06722ba19","impliedFormat":99},{"version":"7e3a08120d6819a45f6d7d83646cc873208eb3eca01276f651d81a3a268535e5","impliedFormat":99},{"version":"5ea6f29f7e96f15f23f1305590754ac64e7482c6c7fd3e4082398ba948ea6a72","impliedFormat":99},{"version":"201645fa38de4aeea5415415e22c0a12b15a0a7b51cee6dbe7ec78a606a74331","impliedFormat":99},{"version":"5b33c327d6507140cdfe1bd4f95d542931a00e03da62b30f859128ac7feb9944","impliedFormat":99},{"version":"f29983465ce61e79aed52118bc1ba2e5ca8825959a93491534fc178ca81b2e2c","impliedFormat":99},{"version":"34f49b5c4fdbcb844b88c3cafd5b69914e015b02b58a7df76398edb525a43b85","impliedFormat":99},{"version":"70458052e5dcc4ccba028468f5b1c9cc3905076c3e6c588a0cd11aa5a9be3bba","impliedFormat":99},{"version":"985e3a954d6658c883b4420e4369349d92ad16e51b4df0f9e850cbdf54bf01d7","impliedFormat":99},{"version":"4db56c9a830bbf699f9d11084b2f8168e882e756cd25538193cb20b1e310e60e","impliedFormat":99},{"version":"0bb67edb942fb3702826a01db266ad9cb8f2e14f7105c9d93f7055e7f7786b60","impliedFormat":99},{"version":"c48d0066cf7357f64450ba50c5a1a40591ed42a71c899642fbc3daf8e72aa8ac","impliedFormat":99},{"version":"6537d8c254af3b5dd0f250e8e095f1e1833238dcfa87af3d908f14b06752c456","impliedFormat":99},{"version":"d11582eb83f5506f7328a1bc7f502b4ca355531d9b74d6deb36cf6417a6313cb","impliedFormat":99},{"version":"bc886821ea837f3988a3b5ef08db2f18a3c3e6bc1b958a2fa4c5eb8f4d3f9829","impliedFormat":99},{"version":"3a8bd84399568d5c708c28a5d107cdff2096898f205289d5aa6790610990fc67","impliedFormat":99},{"version":"180bc2af031ea15334ef3ce7990e2256f13dcc235fa9b0d0804ed72c68bba229","impliedFormat":99},{"version":"4c3dbe8b25aa1d431d249a612e21378877675a9975705999080f309e4dffcd8f","impliedFormat":99},{"version":"ac5e913b73162398cf864c2a2df1c8b1b5aa9a76909d448d4637ccb90fb74b86","impliedFormat":99},{"version":"f9a30d25be01cd5388e2ef4eef7031968c6d11c534eb641dc804036d995c040b","impliedFormat":99},{"version":"1c4323fa53896ef0d4bd17da6fe3fb49a41c5de86cf3b34e99a3f14ddc7fc07c","impliedFormat":99},{"version":"1680f296ba705010160cd69d1a4c2c8178888cedfd4bf2383104de9c702e48b2","impliedFormat":99},{"version":"51b92d5ffb9b9701e4ac9d877e3e1f27dea463c478e288ab177fa911f6b758e0","impliedFormat":99},{"version":"95475bfd24aac76ccd972a29f68f520cdb09bd0c6d8ba492e3d14b1a9cda4bf5","impliedFormat":99},{"version":"f59f5501c85b62f907bb7505bb1235739031c5aa1bb8dfc2f21be6291cfbdf36","impliedFormat":99},{"version":"f7acc8c172c607529459d57eb5a3f6614a5b24bd285ee96c746c31c328b25e4b","impliedFormat":99},{"version":"339c41e0f5f965d8100d249b832ee34181f68f1c286e1819b92dc93bc9b0d47b","impliedFormat":99},{"version":"a23a1514e4f6ca45699f1b723dd078d4229ba5cdfd7d0f687021306edd13aba9","impliedFormat":99},{"version":"11046d4682e76f99076c182adc8bbb147fd6cf948cbb9b3b66b6031493f790b2","impliedFormat":99},{"version":"cccdd0ed46f68d1b6f4e175e53936cbed9a92a3c28171586fa26466e7ebc57c5","impliedFormat":99},{"version":"2472b1bfa0e39203604a80c105cc3b2fcea84419e3c592c1096eed23a36d06a9","impliedFormat":99},{"version":"e15bcfa8d1ac6b2ca5dcb23b47b5cced176390243758a9548b337b7ba7384c78","impliedFormat":99},{"version":"0184918705a13930f5c4a3714a3ea6b5bdf215cb266b08df67a8f25681c09d50","impliedFormat":99},{"version":"12cb27c87755fe3e9f1089344eb804b533c9b2d4c90480fa6ecb3ffa2b84e5bd","impliedFormat":99},{"version":"31557d3c9ac8137d1e10123cb1dffd91f9446b102d91aa56e217517bc663d966","impliedFormat":99},{"version":"513f612329c89f477335f0a4a50bc986867ef39661ae40da076582d5620537af","impliedFormat":99},{"version":"6a4511e79f3d300342695843da2d646e1a0c0e2157f9a2cd39f3852600fbd76d","impliedFormat":99},{"version":"07e6c6cd0d07375f121286dc724dcf1aac6d19c8530a0f48dd60dc0f2d2f0f1c","impliedFormat":99},{"version":"66bd05696fa7194b54ddb64fab596a8a15e055b88a4bb54ed4b03d639babe898","impliedFormat":99},{"version":"1230f4b68b8fb90fe2718df7b7ed3270ecdbf8978fd7bf26814b5b582d8ccb11","impliedFormat":99},{"version":"d3597ecfed4b2f9e3f026ae5968866784eb7a334145f2d3d1e5c5ac77e59d912","impliedFormat":99},{"version":"85517803b89d716bffdbecadc09317fdaa3c2ebb5af3d6cf9d5e76da15e85910","impliedFormat":99},{"version":"e93961a1122c2b1efeed4c22e73a5fad90b639e15d8694851dd5f51336af69bb","impliedFormat":99},{"version":"f3658d6b93e66037e4f62c34fc74206d49ca928ceac49720ee3beff0afdda18b","impliedFormat":99},{"version":"e60e47e061874e4fb72d8bfe0a93d10c267efe9b59fc6a5e6c13ddc77f2aee86","impliedFormat":99},{"version":"268c7e3682a2da60dd2d0a2fbf9b6344c686e31ed3a74dfa0bf3d0e304da4d85","impliedFormat":99},{"version":"465a48defb85a5602a14d1aa0b49440e7e9fb6621e05df04448401a422523031","impliedFormat":99},{"version":"e7a64c4a22917ab98bc45336267960354f8218edbc26ef8bc4f8840d62b6cdaf","impliedFormat":99},{"version":"4a98c875071e057ec0b1e92d8b3ac1d7ed87253438265eda0fac594c1e805ec6","impliedFormat":99},{"version":"c2cf9c780cb6b3d183c70f9fcf3b30409f932ff21285174897ebcd98344bd223","impliedFormat":99},{"version":"49be52c8d0fa5b810275f11e575ce2c2ef0b64bb010b18647ec4fd3ff36997b9","impliedFormat":99},{"version":"c91b2571924dcb45703dd8a11cf427a47dfe67f227d2629e12998061a5c633f5","impliedFormat":99},{"version":"35566cb746cb16c3633ededcf43b71c0e98d1444d074a151fd83490b372d98b7","impliedFormat":99},{"version":"56bccce05e6f78dd02294b7184947a60c7a26b0c365b0c88c77a959e28fffa77","impliedFormat":99},{"version":"25dd8bd038bcac6eecb1170aade51bb24179f9a0be7ab37fdd5fd9e33bc55a8b","impliedFormat":99},{"version":"e6ff31b8910c7a53ba3c91a445ec69a647259162f85e97194aa5f630006c1231","impliedFormat":99},{"version":"5f353f54d0f7ad6b7a2da47a4c5e2af400db5d08188e5db7076ba6331aff2759","impliedFormat":99},{"version":"443681e6943f0cbf2b16a0e3bbba137f11728a80e7f24a0de5abbcbea3f747fa","impliedFormat":99},{"version":"8117be424783cb26c22bf29b7b098bc2fdab983242e9a403604479924bab6eb3","impliedFormat":99},{"version":"5a08a01e8a13aef4a61b304f4376d1a4224dcdeebb93d718fec12e083b217061","impliedFormat":99},{"version":"ab00f1ad069719ca6e074c289ac6d0f41b768fe239660147ddf401bd594a91f3","impliedFormat":99},{"version":"3141b728492111412d9b7104819d1ff12af3f21d47320a0d602020ad385c7d50","impliedFormat":99},{"version":"8b54cd6a21c88ffba2b012493a0d7c0754727c548c6680cfc722bf20b9ebf8fe","impliedFormat":99},{"version":"9280e00775019be1dd775e5e3394ffda891ed32a7d774f0766e3776483fd5c43","impliedFormat":99},{"version":"b765cd742c948ea9d3c962dd527ff221bfa81b584f93b84d7b8534715d951996","impliedFormat":99},{"version":"58ada2b4ed1cfea260d80f727cae3a40cf86c0706d7c6d768305a552ecb98166","impliedFormat":99},{"version":"bd6459aec0129c26aa597c140208832601bde327dc52377a34dd13767c8e770c","impliedFormat":99},{"version":"94577d3fc2355d1e639694d185fc1452dc117f346513139ddcf3550ca9566c94","impliedFormat":99},{"version":"f08b3fec3bd51c24263c13c1e901535b6a2153e20ec09b02dfb4e495b7714769","impliedFormat":99},{"version":"36f010a79ebc35b743cb54f67962c8018487a148ff8efbf3c46d5bf3a06924e2","impliedFormat":99},{"version":"70435099e8d537d6b2069087827d6dc15db2690cfc706347b68f55f9539e7037","impliedFormat":99},{"version":"7905823b55dd80e611b74ceb3edf20ceae5f08daaba41a41bc967d3d697a857d","impliedFormat":99},{"version":"1e7700b8e5a1bf64bf58a3f8c1064aed93cbb177b81e40a29f4e1a2acc84bdef","impliedFormat":99},{"version":"c20801a7d94a6fa3b05e0e9861ef5565e3e20de8ee8ade00501ee49cd5580a29","impliedFormat":99}],"root":[60,61,[1428,1442],[1522,1525],[1546,1548]],"options":{"composite":true,"declaration":true,"esModuleInterop":true,"exactOptionalPropertyTypes":true,"module":199,"noImplicitReturns":true,"noUncheckedIndexedAccess":true,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9,"verbatimModuleSyntax":true},"referencedMap":[[1521,1],[1467,2],[1516,3],[1518,4],[1517,5],[1417,6],[1545,7],[1173,8],[1167,9],[1163,10],[1172,10],[1165,11],[1169,12],[1164,10],[1166,13],[1170,12],[1171,12],[1168,10],[1528,14],[1540,15],[1532,16],[1542,17],[1413,18],[1427,19],[1506,20],[1515,21],[1476,22],[1477,23],[1475,24],[1472,10],[1473,25],[1474,26],[955,10],[1453,27],[1368,28],[1156,29],[1145,30],[1146,31],[1148,32],[1149,32],[1150,32],[1147,33],[1151,10],[1152,31],[1153,32],[1154,31],[1141,34],[1155,35],[1010,36],[1007,37],[1008,38],[1009,39],[1006,40],[1192,41],[1015,39],[1443,42],[1213,10],[1367,10],[1444,13],[1237,13],[1016,13],[1190,10],[1530,43],[1507,13],[1387,10],[1445,44],[1386,10],[1388,45],[1020,46],[1370,47],[1194,10],[1038,48],[1027,49],[1030,50],[1029,10],[1031,51],[1034,52],[1035,10],[1032,39],[1036,53],[1037,39],[1026,10],[1013,10],[1193,10],[1223,54],[1184,55],[1182,56],[1185,57],[1187,58],[1188,59],[1189,10],[1508,60],[1198,61],[1197,62],[1199,10],[1212,63],[1216,64],[1222,65],[1183,66],[1215,67],[1196,68],[1195,69],[1447,70],[1224,71],[1019,72],[1527,73],[1221,74],[1220,75],[1144,76],[1369,10],[1486,13],[1448,10],[1211,77],[1005,78],[1200,79],[1201,10],[1202,80],[1204,81],[1210,10],[1003,82],[1205,83],[1004,10],[1209,84],[1206,80],[1203,10],[1208,40],[1207,80],[1002,85],[1001,86],[1449,87],[948,10],[1446,88],[1509,89],[986,90],[983,91],[984,92],[981,72],[985,93],[1191,13],[1487,94],[1490,95],[1488,13],[1491,10],[1494,96],[1493,97],[1495,98],[1492,99],[1489,100],[1214,101],[1371,13],[1033,39],[1017,102],[1452,10],[1450,103],[1451,10],[1186,104],[1025,10],[980,105],[988,106],[987,107],[825,108],[1235,109],[1240,110],[1468,10],[1470,111],[1469,10],[1251,13],[1232,112],[1497,113],[1496,114],[1498,115],[1503,116],[1504,117],[1499,114],[998,118],[1234,119],[1000,120],[997,121],[1233,122],[999,123],[1238,124],[1501,125],[1248,126],[993,127],[1236,128],[1230,129],[1225,130],[1012,131],[1226,131],[1227,131],[1228,131],[1229,131],[1011,132],[994,133],[1502,108],[1231,10],[992,10],[789,10],[826,134],[996,135],[995,10],[1471,10],[790,136],[1276,137],[1249,10],[1127,10],[1298,138],[1125,10],[1262,139],[791,10],[1252,10],[1261,10],[1299,10],[1300,10],[1456,140],[1301,141],[1128,142],[1129,143],[1126,144],[1271,13],[1270,145],[1391,146],[1272,147],[1130,148],[1361,13],[65,10],[66,10],[1360,10],[1293,10],[1253,143],[1322,149],[1273,10],[1124,143],[1258,150],[1269,151],[1354,152],[1303,153],[1353,154],[1259,155],[1265,156],[1279,157],[1392,158],[1264,159],[1393,160],[1266,161],[1263,162],[1304,163],[1239,10],[1247,113],[1305,10],[1306,13],[991,10],[1535,164],[1349,10],[1537,13],[1021,165],[1536,10],[1538,10],[1134,10],[1024,166],[1455,167],[1135,168],[1461,108],[805,169],[1531,10],[1457,170],[1411,171],[1465,13],[1459,10],[1405,10],[1250,172],[1404,10],[1406,173],[1407,108],[1454,138],[989,174],[1408,175],[1385,108],[1277,176],[1409,108],[973,177],[938,10],[954,10],[949,178],[937,113],[943,179],[944,10],[939,113],[945,10],[946,176],[953,178],[947,113],[950,180],[951,181],[972,182],[952,178],[936,183],[1460,184],[1458,10],[956,25],[1394,185],[794,86],[804,186],[957,10],[958,10],[795,187],[959,10],[1397,188],[960,176],[961,10],[962,44],[1403,189],[1254,190],[963,44],[1395,191],[965,192],[1396,193],[964,10],[1398,194],[966,10],[802,176],[798,195],[967,196],[1399,197],[968,10],[971,198],[969,192],[796,10],[793,44],[792,10],[1400,199],[970,44],[1291,193],[1401,193],[803,200],[797,44],[1402,193],[1410,108],[1312,201],[1313,202],[1314,201],[1278,201],[1478,10],[1162,73],[1161,39],[1045,203],[1044,204],[1043,205],[1462,206],[1040,10],[1041,207],[1485,208],[1050,10],[1481,209],[1482,108],[1483,13],[1484,210],[1051,121],[1018,10],[1317,211],[1122,212],[823,10],[1120,213],[1119,214],[1100,87],[1101,87],[1102,87],[1103,87],[1104,87],[1109,87],[1107,215],[1108,87],[1110,87],[1111,87],[1112,87],[1117,87],[1105,87],[1113,87],[1114,87],[1115,87],[1116,87],[1106,216],[1118,87],[1464,108],[1123,212],[1131,217],[1136,218],[1132,219],[1121,220],[1099,221],[1255,10],[1330,10],[1334,222],[1414,10],[1137,223],[1415,224],[1138,10],[1157,225],[1343,10],[1383,53],[1246,143],[1500,10],[1350,10],[1479,10],[1534,10],[809,226],[807,227],[810,228],[806,121],[799,10],[800,229],[801,230],[808,10],[1315,10],[1022,231],[1042,10],[1326,10],[1316,232],[1243,233],[975,234],[811,13],[812,10],[813,235],[814,10],[979,10],[815,13],[974,236],[1217,10],[976,121],[1142,10],[1372,237],[1480,238],[1344,10],[787,10],[1342,239],[1340,13],[1335,240],[1046,10],[1341,241],[1320,10],[1047,242],[990,176],[1381,243],[1382,244],[816,13],[1376,10],[1281,10],[1244,232],[1282,10],[977,10],[1283,10],[1318,13],[1375,245],[788,10],[1245,246],[1284,247],[1323,10],[1242,248],[978,143],[1520,249],[1325,250],[1274,251],[1308,252],[1357,253],[1466,254],[1287,255],[1289,255],[1256,255],[1257,255],[1288,255],[1290,256],[1321,176],[1416,257],[1379,255],[1327,258],[1365,255],[1363,255],[1364,259],[1346,255],[1347,255],[1348,255],[1307,255],[1358,260],[1378,255],[1526,255],[1174,261],[1529,262],[1541,263],[1533,264],[1543,265],[1544,266],[1356,267],[1286,268],[1324,269],[1412,270],[1426,271],[1505,272],[1328,10],[1329,10],[1345,273],[1310,201],[1311,274],[1355,275],[1359,255],[1362,276],[1296,255],[1292,255],[1294,255],[1295,277],[1297,278],[1514,279],[1377,255],[1280,280],[1302,10],[1285,281],[1419,282],[1418,283],[1420,284],[1268,285],[1181,286],[1180,287],[1421,10],[1422,288],[1423,283],[1424,289],[1425,10],[1176,290],[1175,291],[1133,10],[1160,292],[1143,293],[1178,294],[1179,295],[1374,10],[1366,296],[1389,297],[1390,298],[1351,299],[1352,138],[1177,300],[1260,10],[1014,10],[1373,10],[941,10],[1241,301],[942,302],[1023,10],[1158,10],[1039,10],[822,39],[1463,303],[940,10],[1384,10],[1028,10],[982,10],[1098,10],[1319,10],[1275,10],[1218,10],[1539,304],[1511,305],[1512,305],[1159,306],[1513,307],[1510,308],[1519,309],[1219,310],[935,10],[824,311],[1309,10],[1380,312],[1048,10],[1049,150],[61,313],[1441,314],[1435,315],[1436,316],[1438,317],[1440,318],[1439,319],[1431,320],[1548,321],[1434,322],[1433,323],[1432,324],[1430,10],[1437,325],[60,10],[1428,326],[1429,10],[1525,327],[1547,328],[1442,323],[1546,329],[1524,330],[1522,331],[1523,332],[669,333],[819,334],[818,334],[821,335],[820,336],[817,337],[261,338],[262,338],[786,339],[264,340],[263,10],[265,338],[522,341],[523,338],[524,338],[671,342],[670,343],[673,344],[672,344],[674,338],[675,338],[777,345],[778,346],[779,347],[780,348],[260,349],[259,338],[781,10],[782,338],[783,338],[784,87],[785,338],[520,350],[483,351],[481,10],[484,352],[489,353],[478,354],[487,355],[493,356],[521,357],[266,10],[496,358],[495,10],[476,10],[482,359],[479,360],[477,361],[486,362],[475,363],[485,364],[480,365],[492,366],[494,367],[501,368],[500,369],[510,370],[513,371],[512,372],[514,370],[511,373],[509,374],[516,375],[490,376],[508,377],[503,378],[504,379],[515,380],[491,381],[507,382],[506,383],[505,376],[517,384],[519,385],[499,386],[497,387],[498,388],[502,389],[518,381],[488,10],[827,10],[889,390],[865,336],[880,391],[858,392],[859,392],[860,393],[857,70],[882,10],[861,10],[862,10],[885,394],[881,395],[883,396],[878,397],[884,398],[863,10],[864,399],[855,70],[867,400],[852,401],[886,402],[866,10],[888,403],[890,404],[856,70],[851,336],[887,405],[868,402],[853,406],[879,407],[869,408],[870,10],[872,407],[873,407],[877,409],[874,407],[875,407],[871,10],[876,408],[934,410],[891,10],[897,411],[898,399],[899,412],[900,413],[901,414],[902,415],[903,415],[904,399],[905,416],[906,399],[907,10],[908,399],[909,399],[910,399],[911,399],[912,417],[930,418],[913,399],[914,399],[915,419],[916,420],[917,412],[918,421],[919,422],[920,423],[921,399],[922,424],[923,399],[924,425],[925,426],[926,427],[928,399],[927,399],[929,10],[892,428],[854,429],[893,428],[895,430],[896,431],[894,432],[931,10],[932,10],[933,10],[828,10],[832,433],[835,434],[837,435],[839,436],[840,433],[834,437],[841,433],[836,433],[842,433],[843,433],[833,433],[844,433],[845,438],[846,10],[850,439],[848,440],[847,10],[849,441],[838,10],[829,10],[831,442],[830,10],[627,443],[626,444],[621,445],[620,446],[617,10],[605,447],[623,448],[622,446],[619,446],[618,449],[625,450],[258,451],[69,452],[70,453],[207,452],[208,454],[189,455],[190,456],[73,457],[74,458],[144,459],[145,460],[118,452],[119,461],[112,452],[113,462],[204,463],[202,464],[203,10],[218,465],[219,466],[88,467],[89,468],[220,469],[221,470],[222,471],[223,472],[80,473],[81,474],[206,475],[205,476],[191,452],[192,477],[84,478],[85,479],[108,10],[109,480],[226,481],[224,482],[225,483],[227,484],[228,485],[231,486],[229,487],[232,464],[230,488],[233,489],[236,490],[234,491],[235,492],[237,493],[86,473],[87,494],[212,495],[209,496],[210,497],[211,10],[187,498],[188,499],[132,500],[131,501],[129,502],[128,503],[130,504],[239,505],[238,506],[241,507],[240,508],[117,509],[116,452],[95,510],[93,511],[92,457],[94,512],[244,513],[248,514],[242,515],[243,516],[245,513],[246,513],[247,513],[134,517],[133,457],[150,518],[148,519],[149,464],[146,520],[147,521],[83,522],[82,452],[140,523],[71,452],[72,524],[139,525],[177,526],[180,527],[178,528],[179,529],[91,530],[90,452],[182,531],[181,457],[160,532],[159,452],[115,533],[114,452],[186,534],[185,535],[154,536],[153,537],[151,538],[152,539],[143,540],[142,541],[141,542],[250,543],[249,544],[167,545],[166,546],[165,547],[214,548],[213,10],[158,549],[157,550],[155,551],[156,552],[136,553],[135,457],[79,554],[78,555],[77,556],[76,557],[75,558],[171,559],[170,560],[101,561],[100,457],[105,562],[104,563],[169,564],[168,452],[215,10],[217,565],[216,10],[174,566],[173,567],[172,568],[252,569],[251,570],[254,571],[253,572],[200,573],[201,574],[199,575],[138,576],[137,10],[184,577],[183,578],[111,579],[110,452],[162,580],[161,452],[68,581],[67,10],[121,582],[122,583],[127,584],[120,585],[124,586],[123,587],[125,588],[126,589],[176,590],[175,457],[107,591],[106,457],[257,592],[256,593],[255,594],[194,595],[193,452],[164,596],[163,452],[99,597],[97,598],[96,457],[98,599],[196,600],[195,452],[103,601],[102,452],[198,602],[197,452],[267,10],[333,603],[334,603],[335,604],[273,605],[336,361],[337,606],[338,607],[271,10],[339,608],[340,609],[341,610],[342,611],[343,612],[344,613],[345,613],[346,614],[347,615],[348,616],[349,617],[274,10],[272,10],[350,618],[351,619],[352,620],[392,621],[353,441],[354,622],[355,441],[356,623],[357,624],[300,625],[312,626],[297,627],[313,628],[322,629],[288,630],[289,631],[287,632],[321,633],[316,634],[320,635],[291,636],[309,637],[290,638],[319,639],[285,640],[286,634],[292,641],[293,10],[299,642],[296,641],[283,643],[323,644],[314,645],[303,646],[302,641],[304,647],[307,648],[301,649],[305,650],[317,633],[294,651],[295,652],[308,653],[284,628],[311,654],[310,641],[298,652],[306,655],[315,10],[282,10],[318,656],[358,657],[359,658],[360,658],[361,658],[362,659],[363,660],[364,661],[365,662],[366,663],[367,664],[368,664],[369,665],[370,10],[371,10],[372,666],[373,667],[374,666],[375,668],[376,669],[377,670],[378,671],[379,672],[380,673],[381,674],[382,675],[383,676],[384,677],[385,678],[386,679],[387,680],[388,681],[389,682],[275,441],[276,10],[277,683],[278,326],[279,10],[280,684],[281,10],[324,685],[325,686],[326,687],[327,687],[328,688],[329,10],[330,361],[331,689],[332,686],[390,690],[391,691],[1052,692],[1097,693],[1054,10],[1056,694],[1055,695],[1060,696],[1095,697],[1092,698],[1094,699],[1057,698],[1058,700],[1062,700],[1061,701],[1059,702],[1093,703],[1091,698],[1096,704],[1089,10],[1090,10],[1063,705],[1068,698],[1070,698],[1065,698],[1066,705],[1072,698],[1073,706],[1064,698],[1069,698],[1071,698],[1067,698],[1087,707],[1086,698],[1088,708],[1082,698],[1084,698],[1083,698],[1079,698],[1085,709],[1080,698],[1081,710],[1074,698],[1075,698],[1076,698],[1077,698],[1078,698],[1333,711],[1331,10],[1332,712],[1140,713],[1139,10],[1053,10],[628,714],[630,715],[631,716],[629,717],[638,718],[654,719],[653,720],[651,721],[663,722],[632,10],[666,723],[642,10],[655,10],[659,724],[658,725],[660,726],[664,10],[652,727],[641,728],[648,729],[665,730],[646,731],[639,10],[640,732],[649,720],[667,733],[657,734],[656,735],[647,736],[650,737],[634,738],[633,10],[644,739],[645,740],[643,720],[668,741],[635,10],[661,10],[662,742],[637,743],[636,441],[624,10],[64,744],[62,10],[63,10],[717,745],[765,746],[686,747],[683,10],[687,748],[766,749],[680,750],[690,751],[701,752],[718,753],[676,10],[678,10],[685,754],[681,755],[679,361],[689,756],[677,363],[688,757],[682,758],[768,759],[703,760],[773,761],[769,762],[770,763],[702,764],[771,10],[715,765],[719,766],[720,767],[716,768],[772,769],[684,770],[697,771],[694,772],[695,773],[696,774],[698,775],[706,776],[713,777],[712,778],[711,779],[710,780],[709,781],[707,772],[708,772],[699,782],[704,783],[700,784],[705,785],[692,786],[776,787],[774,788],[775,789],[767,790],[693,791],[714,792],[726,793],[724,772],[725,794],[728,795],[727,796],[729,772],[733,797],[731,798],[732,799],[734,800],[737,801],[736,802],[739,803],[738,804],[742,805],[740,806],[741,807],[735,808],[730,809],[743,808],[744,810],[764,811],[745,804],[746,772],[747,812],[748,813],[749,814],[721,815],[722,816],[723,817],[691,10],[750,772],[753,818],[751,772],[752,819],[754,820],[755,821],[758,822],[757,823],[759,824],[760,800],[763,825],[762,826],[761,827],[756,828],[1338,829],[1339,830],[1337,831],[1336,10],[58,10],[59,10],[11,10],[10,10],[2,10],[12,10],[13,10],[14,10],[15,10],[16,10],[17,10],[18,10],[19,10],[3,10],[20,10],[21,10],[4,10],[22,10],[26,10],[23,10],[24,10],[25,10],[27,10],[28,10],[29,10],[5,10],[30,10],[31,10],[32,10],[33,10],[6,10],[37,10],[34,10],[35,10],[36,10],[38,10],[7,10],[39,10],[44,10],[45,10],[40,10],[41,10],[42,10],[43,10],[8,10],[49,10],[46,10],[47,10],[48,10],[50,10],[9,10],[51,10],[52,10],[53,10],[55,10],[54,10],[56,10],[1,10],[57,10],[407,832],[419,833],[405,834],[420,628],[429,835],[396,836],[397,837],[395,632],[428,633],[423,838],[427,839],[399,840],[416,841],[398,842],[426,843],[393,844],[394,838],[400,845],[401,10],[406,846],[404,845],[269,847],[430,848],[421,849],[410,850],[409,845],[411,851],[414,852],[408,853],[412,854],[424,633],[402,855],[403,856],[415,857],[270,628],[418,858],[417,845],[413,859],[422,10],[268,10],[425,860],[474,861],[449,862],[462,863],[446,864],[463,628],[472,865],[437,866],[438,867],[436,632],[471,633],[466,868],[470,869],[440,870],[459,871],[439,872],[469,873],[434,874],[435,868],[441,875],[442,10],[448,876],[445,875],[432,877],[473,878],[464,879],[452,880],[451,875],[453,881],[456,882],[450,883],[454,884],[467,633],[443,885],[444,886],[457,887],[433,628],[461,888],[460,875],[447,886],[455,889],[458,890],[465,10],[431,10],[468,891],[1267,892],[529,893],[536,894],[531,10],[532,10],[530,895],[533,896],[525,10],[526,10],[537,897],[528,898],[534,10],[535,899],[527,900],[609,901],[613,902],[610,902],[606,901],[614,903],[611,904],[615,892],[612,902],[607,905],[608,906],[601,907],[545,908],[547,909],[600,10],[546,910],[604,911],[603,912],[602,913],[538,10],[548,908],[549,10],[540,914],[544,915],[539,10],[541,916],[542,917],[543,10],[616,918],[550,919],[551,919],[552,919],[553,919],[554,919],[555,919],[556,919],[557,919],[558,919],[559,919],[560,919],[561,919],[562,919],[564,919],[563,919],[565,919],[566,919],[567,919],[568,919],[599,920],[569,919],[570,919],[571,919],[572,919],[573,919],[574,919],[575,919],[576,919],[577,919],[578,919],[579,919],[580,919],[581,919],[583,919],[582,919],[584,919],[585,919],[586,919],[587,919],[588,919],[589,919],[590,919],[591,919],[592,919],[593,919],[594,919],[595,919],[598,919],[596,919],[597,919]],"affectedFilesPendingEmit":[[61,19],[1441,19],[1435,19],[1436,19],[1438,19],[1440,19],[1439,19],[1431,19],[1548,19],[1434,19],[1433,19],[1432,19],[1430,19],[1437,19],[60,19],[1428,19],[1429,19],[1525,19],[1547,19],[1442,19],[1546,19],[1524,19],[1522,19],[1523,19]],"emitSignatures":[60,61,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1522,1523,1524,1525,1546,1547,1548],"version":"6.0.2"} \ No newline at end of file diff --git a/extensions/openbmb-clawxmemory/ui-source/app.css b/extensions/openbmb-clawxmemory/ui-source/app.css index bfa9daf2e8a46..46b20f1e7c98f 100644 --- a/extensions/openbmb-clawxmemory/ui-source/app.css +++ b/extensions/openbmb-clawxmemory/ui-source/app.css @@ -590,6 +590,12 @@ body[data-nav="open"] .app-scrim { box-shadow: 0 0 0 2px var(--accent-soft); } +.popover-note { + font-size: 11px; + line-height: 1.45; + color: var(--text-dim); +} + /* ── Accent color picker ─────────────────────────── */ .accent-picker { @@ -2011,6 +2017,7 @@ body[data-panel="retrieve"] #retrievePanel { @media (max-width: 1080px) { .topbar { flex-direction: column; align-items: stretch; } .toolbar { justify-content: flex-start; } + .case-board-shell { grid-template-columns: 1fr; } } @media (max-width: 960px) { @@ -2474,6 +2481,655 @@ body[data-panel="retrieve"] #retrievePanel { color: var(--text-3); } +/* ═══════════════════════════════════════════════════════════ + Memory Trace + ═══════════════════════════════════════════════════════════ */ + +.entry-stream--memory-trace { + display: block; + padding: 0; + overflow: auto; +} + +.memory-trace-list-host { + display: block; + list-style: none; + min-height: 100%; +} + +.memory-trace-page { + width: min(1180px, 100%); + margin: 0 auto; + display: flex; + flex-direction: column; + gap: 16px; + padding: 4px 0 24px; +} + +/* ── Hero & Flow containers — unified card language ───── */ + +.memory-trace-hero, +.memory-trace-flow { + border: 1px solid var(--border); + border-radius: 12px; + background: var(--card); +} + +.memory-trace-flow { + padding: 20px; +} + +/* ── Shared text styles ──────────────────────────────── */ + +.memory-trace-section-meta, +.memory-trace-selector-option-meta, +.memory-trace-step-line { + font-size: 12px; + color: var(--text-3); +} + +.memory-trace-section-head { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; +} + +.memory-trace-section-head h4 { + margin: 0; + font-size: 12px; + line-height: 1; + font-weight: 700; + letter-spacing: 0.06em; + text-transform: uppercase; + color: var(--text-3); +} + +/* ── Selector — compact, timeline-card aligned ───────── */ + +.memory-trace-selector { + position: relative; + width: min(620px, 100%); + display: flex; + flex-direction: column; + z-index: 6; +} + +.memory-trace-selector-trigger { + width: 100%; + padding: 8px 12px; + border-radius: 8px; + border: 1px solid var(--border); + background: var(--bg-raised); + display: flex; + align-items: center; + justify-content: space-between; + gap: 10px; + text-align: left; + transition: background 0.15s ease, border-color 0.15s ease; +} + +.memory-trace-selector-trigger:hover { + background: var(--bg-hover); + border-color: var(--border-strong); +} + +.memory-trace-selector-title { + font-size: 13px; + line-height: 1.4; + color: var(--text); + font-weight: 600; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.memory-trace-selector-chevron { + flex-shrink: 0; + color: var(--text-3); + font-size: 11px; + transition: color 0.15s ease; +} + +.memory-trace-selector-trigger:hover .memory-trace-selector-chevron { + color: var(--text-2); +} + +.memory-trace-selector-list { + position: absolute; + top: calc(100% + 6px); + left: 0; + width: 100%; + display: flex; + flex-direction: column; + gap: 4px; + max-height: 280px; + overflow-y: auto; + padding: 6px; + border-radius: 12px; + border: 1px solid var(--border); + background: var(--card); + box-shadow: var(--shadow-md); +} + +.memory-trace-selector-option { + width: 100%; + text-align: left; + padding: 10px 12px; + border-radius: 8px; + border: 1px solid transparent; + background: transparent; + display: flex; + flex-direction: column; + gap: 3px; + transition: border-color 0.15s ease, background 0.15s ease; +} + +.memory-trace-selector-option:hover { + background: var(--bg-hover); +} + +.memory-trace-selector-option.active { + background: var(--accent-soft); + border-color: var(--accent); +} + +.memory-trace-header { + display: flex; + justify-content: flex-start; + align-items: center; +} + +.memory-trace-selector-option-title { + font-size: 13px; + line-height: 1.4; + font-weight: 600; + color: var(--text); +} + +.memory-trace-step-line.is-output, +.memory-trace-tool-summary { + color: var(--text-2); +} + +/* ── Hero section — compact card ─────────────────────── */ + +.memory-trace-hero { + display: flex; + flex-direction: column; + gap: 16px; + padding: 20px; +} + +/* ── Meta chips — flat, borderless ───────────────────── */ + +.memory-trace-meta-grid, +.memory-trace-summary-grid, +.memory-trace-expanded-meta { + display: grid; + gap: 10px; +} + +.memory-trace-meta-grid { + grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); + gap: 6px; +} + +.memory-trace-meta-chip { + min-height: 0; + padding: 8px 10px; + border-radius: 8px; + background: var(--bg-inset); + border: none; + display: flex; + flex-direction: column; + gap: 2px; +} + +.memory-trace-meta-label { + font-size: 11px; + color: var(--text-3); + text-transform: uppercase; + letter-spacing: 0.06em; + font-weight: 600; +} + +.memory-trace-meta-value { + font-size: 13px; + font-weight: 600; + color: var(--text); + line-height: 1.4; + word-break: break-word; +} + +/* ── Summary grid ────────────────────────────────────── */ + +.memory-trace-summary-grid { + grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); + align-items: stretch; + gap: 10px; +} + +.memory-trace-summary-card { + padding: 14px; + border-radius: 12px; + border: 1px solid var(--border); + background: var(--bg-raised); + display: flex; + flex-direction: column; +} + +.memory-trace-summary-card--path { + grid-column: 1 / -1; +} + +.memory-trace-summary-card--artifact { + width: 100%; + min-width: 0; + overflow: hidden; +} + +.memory-trace-summary-card h4 { + margin: 0 0 8px; + font-size: 11px; + line-height: 1; + font-weight: 700; + letter-spacing: 0.06em; + text-transform: uppercase; + color: var(--text-3); +} + +/* ── Code & note blocks — consistent bg-inset ────────── */ + +.memory-trace-note, +.memory-trace-code { + margin: 0; + padding: 10px 12px; + border-radius: 8px; + font-size: 12px; + line-height: 1.6; + white-space: pre-wrap; + word-break: break-word; +} + +.memory-trace-summary-card:not(.memory-trace-summary-card--path) .memory-trace-note { + flex: 1 1 auto; + min-height: 0; + max-height: 176px; + overflow: auto; +} + +.memory-trace-summary-card .memory-trace-note, +.memory-trace-summary-card .memory-trace-code, +.memory-trace-artifact-body .memory-trace-code { + padding: 0; + border: 0; + border-radius: 0; + background: transparent; + color: var(--text); + font-family: inherit; + font-size: 13px; + line-height: 1.72; +} + +.memory-trace-summary-card--path .memory-trace-code { + line-height: 1.35; + font-weight: 600; +} + +.memory-trace-note { + background: var(--accent-soft); + border: 1px solid var(--border); + color: var(--text); +} + +.memory-trace-code { + background: var(--bg-inset); + border: 1px solid var(--border); + color: var(--text); + font-family: "SF Mono", ui-monospace, monospace; +} + +/* ── Flow list — timeline-track aligned ──────────────── */ + +.memory-trace-flow-list { + position: relative; + margin-top: 14px; + padding-left: 48px; + display: flex; + flex-direction: column; + gap: 0; +} + +.memory-trace-flow-list::before { + content: ""; + position: absolute; + left: 19px; + top: 0; + bottom: 0; + width: 2px; + background: var(--border); + border-radius: 1px; +} + +.memory-trace-step-item { + position: relative; + padding: 6px 0; +} + +/* ── Step toggle — board-card aligned ────────────────── */ + +.memory-trace-step-toggle { + width: 100%; + text-align: left; + padding: 14px 16px; + border-radius: 12px; + border: 1px solid var(--border); + background: var(--bg-raised); + display: grid; + grid-template-columns: 28px minmax(0, 1fr); + gap: 12px; + align-items: start; + cursor: pointer; + transition: transform 0.2s cubic-bezier(0.16,1,0.3,1), + box-shadow 0.2s cubic-bezier(0.16,1,0.3,1), + border-color 0.15s ease; +} + +.memory-trace-step-toggle:hover { + transform: translateY(-1px); + box-shadow: var(--shadow-md); + border-color: var(--border-strong); +} + +.memory-trace-step-item.active .memory-trace-step-toggle { + border-color: var(--accent); + box-shadow: 0 0 0 1px var(--accent), var(--shadow-md); +} + +/* ── Step marker — timeline-marker aligned ───────────── */ + +.memory-trace-step-marker { + position: relative; + width: 28px; + height: 28px; + border-radius: 50%; + display: inline-flex; + align-items: center; + justify-content: center; + background: var(--accent); + color: var(--accent-on); + font-size: 11px; + font-weight: 700; + line-height: 1; + flex-shrink: 0; +} + +.memory-trace-step-item::before { + content: ""; + position: absolute; + left: -37px; + top: 20px; + width: 12px; + height: 12px; + border-radius: 50%; + background: var(--accent); + border: 3px solid var(--bg); + box-shadow: 0 0 0 2px var(--accent); + z-index: 1; + transition: transform 0.2s ease, box-shadow 0.2s ease; +} + +.memory-trace-step-item:hover::before { + transform: scale(1.3); + box-shadow: 0 0 0 3px var(--accent), 0 0 12px var(--accent-soft); +} + +.memory-trace-step-item.active::before { + background: var(--accent-on); + box-shadow: 0 0 0 3px var(--accent), 0 0 16px var(--accent-soft); +} + +.memory-trace-step-summary { + display: flex; + flex-direction: column; + gap: 6px; + min-width: 0; +} + +.memory-trace-step-head, +.memory-trace-tool-head { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; +} + +.memory-trace-step-head strong { + font-size: 14px; + font-weight: 600; + letter-spacing: -0.01em; + color: var(--text); +} + +/* ── Step expanded — accent left border ──────────────── */ + +.memory-trace-step-expanded { + margin-top: 10px; + padding: 14px 14px 14px 18px; + border-left: 2px solid var(--accent); + display: flex; + flex-direction: column; + gap: 10px; +} + +.memory-trace-expanded-meta { + grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); +} + +/* ── Detail & debug blocks — flat bg-inset ───────────── */ + +.memory-trace-detail-block, +.memory-trace-debug-block { + border: 1px solid var(--border); + border-radius: 10px; + background: var(--bg-inset); + padding: 14px; +} + +.memory-trace-detail-block.is-note { + background: var(--accent-soft); +} + +.memory-trace-debug-block summary { + cursor: pointer; + font-size: 13px; + font-weight: 700; + color: var(--text); + padding: 2px 0; + transition: color 0.15s ease; +} + +.memory-trace-debug-block summary:hover { + color: var(--accent); +} + +.memory-trace-debug-title { + margin: 0 0 8px; + font-size: 12px; + font-weight: 700; + color: var(--text-2); +} + +.memory-trace-detail-list, +.memory-trace-tool-list { + margin: 0; + padding-left: 18px; +} + +.memory-trace-detail-list li, +.memory-trace-tool-list li { + font-size: 12px; + line-height: 1.7; + color: var(--text); +} + +.memory-trace-kv-grid { + display: flex; + flex-direction: column; + gap: 6px; +} + +.memory-trace-kv-row { + display: flex; + justify-content: space-between; + gap: 12px; + font-size: 12px; +} + +.memory-trace-kv-key { + color: var(--text-3); +} + +.memory-trace-kv-value { + color: var(--text); + text-align: right; + word-break: break-word; +} + +/* ── Artifact tabs — board-tabs aligned ──────────────── */ + +.memory-trace-artifact-tabs { + display: inline-flex; + width: fit-content; + margin-top: 4px; + padding: 3px; + border-radius: 10px; + background: var(--bg-inset); + gap: 2px; +} + +.memory-trace-artifact-tab { + height: 30px; + min-width: 72px; + padding: 0 14px; + border-radius: 8px; + color: var(--text-2); + font-size: 12px; + font-weight: 500; + background: transparent; + transition: all 0.18s ease; + white-space: nowrap; +} + +.memory-trace-artifact-tab:hover { + color: var(--text); + background: var(--bg-hover); +} + +.memory-trace-artifact-tab.active { + color: var(--text); + background: var(--bg-raised); + font-weight: 600; + box-shadow: var(--shadow-sm); +} + +[data-theme="dark"] .memory-trace-artifact-tab.active { + background: var(--bg-hover); + box-shadow: none; +} + +.memory-trace-artifact-body { + margin-top: 10px; + flex: 1 1 auto; + min-height: 0; + max-height: 176px; + overflow: auto; +} + +/* ── Tool list ───────────────────────────────────────── */ + +.memory-trace-tool-list { + margin: 0; + padding: 0; + list-style: none; + display: flex; + flex-direction: column; + gap: 8px; +} + +.memory-trace-tool-item { + padding: 12px; + border-radius: 10px; + background: var(--bg-inset); + border: 1px solid var(--border); + display: flex; + flex-direction: column; + gap: 6px; +} + +/* ── Step kind badge — entry-badge aligned ───────────── */ + +.memory-trace-kind-badge { + padding: 2px 7px; + border-radius: 4px; + background: var(--bg-inset); + color: var(--text-3); + font-size: 10px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.04em; + flex-shrink: 0; +} + +/* ── Responsive ──────────────────────────────────────── */ + +@media (max-width: 820px) { + .memory-trace-page { + width: 100%; + } + + .memory-trace-selector { + width: 100%; + } + + .memory-trace-hero { + padding: 16px; + } + + .memory-trace-meta-grid, + .memory-trace-summary-grid { + grid-template-columns: 1fr; + } + + .memory-trace-summary-side { + grid-template-columns: 1fr; + } + + .memory-trace-flow-list { + padding-left: 36px; + } + + .memory-trace-flow-list::before { + left: 15px; + } + + .memory-trace-step-item::before { + left: -25px; + } + + .memory-trace-step-toggle { + grid-template-columns: 24px minmax(0, 1fr); + } + + .memory-trace-step-marker { + width: 24px; + height: 24px; + font-size: 10px; + } +} + /* ═══════════════════════════════════════════════════════════ Profile Board ═══════════════════════════════════════════════════════════ */ diff --git a/extensions/openbmb-clawxmemory/ui-source/app.js b/extensions/openbmb-clawxmemory/ui-source/app.js index 02d5da851b05f..849bf9563ec94 100644 --- a/extensions/openbmb-clawxmemory/ui-source/app.js +++ b/extensions/openbmb-clawxmemory/ui-source/app.js @@ -7,12 +7,14 @@ const LOCALES = { "nav.l2_time": "时间记忆(L2)", "nav.l0": "原始对话(L0)", "nav.profile": "个人画像", + "nav.memory_trace": "记忆追踪", "nav.lastIndexed": "最近索引", "nav.waiting": "等待索引", "topbar.title": "ClawXMemory", "topbar.idle": "等待操作", "topbar.refresh": "刷新", "topbar.build": "索引同步", + "topbar.dream": "记忆 Dream", "topbar.overview": "仪表盘", "topbar.settings": "设置", "topbar.retrieve": "检索", @@ -29,10 +31,16 @@ const LOCALES = { "detail.empty": "选择左侧记录查看详情", "settings.title": "设置", "settings.mode": "推理模式", - "settings.mode.help": "效率优先遵守最大可接受时延;准确优先不受时延限制。", + "settings.mode.help": "效率优先停在 L2 知识笔记;准确优先允许继续下钻到 L1/L0。", "settings.mode.answer_first": "效率优先", "settings.mode.accuracy_first": "准确优先", - "settings.maxLatency": "最大可接受时延(毫秒)", + "settings.maxLatency": "召回数量", + "settings.autoIndexInterval": "自动索引间隔(小时)", + "settings.autoDreamInterval": "自动 Dream 间隔(小时)", + "settings.autoDreamMinL1": "自动 Dream 最小新增 L1", + "settings.scheduleHint": "0 表示关闭自动任务", + "settings.autoDreamHint": "只有新增 L1 达到门槛时,自动 Dream 才会真正执行。", + "settings.off": "已关闭", "settings.save": "保存设置", "settings.theme": "主题", "settings.theme.light": "浅色", @@ -54,6 +62,10 @@ const LOCALES = { "confirm.sync.title": "索引同步", "confirm.sync.body": "将扫描最近对话并更新记忆索引,这可能需要一些时间。", "confirm.sync.ok": "开始同步", + "confirm.dream.title": "记忆 Dream", + "confirm.dream.body": + "记忆准备开始睡觉了。它会安静整理你留下的记忆线索,重构更清晰的项目记忆与全局画像。", + "confirm.dream.ok": "开始 Dream", "confirm.clear.title": "清除记忆", "confirm.clear.body": "此操作将删除所有已索引的记忆数据,且不可撤销。确定继续吗?", "confirm.clear.ok": "确认清除", @@ -64,6 +76,10 @@ const LOCALES = { "confirm.cancel": "取消", "status.building": "同步中…", "status.built": "已构建 · L0 {0} / L1 {1} / L2T {2} / L2P {3} / 画像 {4}", + "status.dreaming": "Dream 重构中…", + "status.dreamed": + "Dream 完成 · 审查 L1 {0} / 重构项目 {1} / 删除项目 {2} / 画像 {3} / 重复 {4} / 冲突 {5}", + "status.dreamFailed": "Dream 失败:{0}", "status.clearing": "清空中…", "status.cleared": "已清空本地记忆", "status.exporting": "导出中…", @@ -93,11 +109,13 @@ const LOCALES = { "level.l2_time.label": "时间记忆(L2)", "level.l0.label": "原始对话(L0)", "level.profile.label": "个人画像", + "level.memory_trace.label": "记忆追踪", "level.l1.empty": "暂无 L1 记录", "level.l2_project.empty": "暂无 L2 项目索引", "level.l2_time.empty": "暂无 L2 时间索引", "level.l0.empty": "暂无 L0 会话", "level.profile.empty": "暂无个人画像", + "level.memory_trace.empty": "暂无记忆追踪案例", "detail.summary": "摘要", "detail.situation": "时间情景", "detail.projects": "项目", @@ -143,6 +161,10 @@ const LOCALES = { "overview.recallMs": "最近召回", "overview.recallMode": "召回模式", "overview.reasoningMode": "推理模式", + "overview.autoIndexSchedule": "自动索引", + "overview.autoDreamSchedule": "自动 Dream", + "overview.lastDreamAt": "最近 Dream", + "overview.lastDreamStatus": "Dream 状态", "overview.recallPath": "回答路径", "overview.budgetStop": "预算截停", "overview.shadowDeep": "后台备案", @@ -158,6 +180,11 @@ const LOCALES = { "overview.group.reasoning": "推理与预算", "overview.group.health": "系统健康", "overview.pending": "待索引", + "dream.status.never": "尚未运行", + "dream.status.running": "运行中", + "dream.status.success": "成功", + "dream.status.skipped": "已跳过", + "dream.status.failed": "失败", "recall.llm": "LLM 快选", "recall.local_fallback": "本地降级", "recall.none": "无注入", @@ -202,6 +229,41 @@ const LOCALES = { "topbar.listView": "列表视图", "board.project": "项目记忆", "board.timeline": "记忆时间线", + "board.memoryTrace": "记忆追踪", + "board.memoryTrace.empty": "暂无真实对话案例", + "board.memoryTrace.noDetail": "选择案例查看记忆推理链路", + "board.memoryTrace.timeline": "推理时间轴", + "board.memoryTrace.context": "注入上下文", + "board.memoryTrace.finalNote": "最终记忆笔记", + "board.memoryTrace.path": "推理路径", + "board.memoryTrace.tools": "工具活动", + "board.memoryTrace.answer": "最终回答", + "board.memoryTrace.stepDetail": "步骤 Inspector", + "board.memoryTrace.noStep": "展开步骤查看结构化细节与完整 prompt", + "board.memoryTrace.promptDebug": "完整 Prompt 调试", + "board.memoryTrace.systemPrompt": "System Prompt", + "board.memoryTrace.userPrompt": "User Prompt", + "board.memoryTrace.rawOutput": "模型原始输出", + "board.memoryTrace.parsedResult": "解析结果", + "board.memoryTrace.detail.empty": "暂无结构化详情", + "board.memoryTrace.selectCase": "选择案例", + "board.memoryTrace.flow": "推理过程", + "board.memoryTrace.query": "问题", + "board.memoryTrace.session": "Session", + "board.memoryTrace.mode": "模式", + "board.memoryTrace.injected": "注入", + "board.memoryTrace.status": "状态", + "board.memoryTrace.started": "开始", + "board.memoryTrace.finished": "结束", + "board.memoryTrace.enoughAt": "足够层级", + "board.memoryTrace.rail": "案例轨道", + "board.memoryTrace.artifacts": "补充信息", + "board.memoryTrace.artifacts.context": "Context", + "board.memoryTrace.artifacts.tools": "Tools", + "board.memoryTrace.artifacts.answer": "Answer", + "board.memoryTrace.observed": + "开发者调试视图:展示 ClawXMemory 的可观测记忆推理链路与 hop prompt,不展示模型隐藏思维链。", + "board.memoryTrace.none": "无", "board.profile": "个人画像", "board.profile.empty": "暂无画像数据", "board.profile.topics": "关联话题", @@ -216,6 +278,10 @@ const LOCALES = { "connection.l0": "L0 会话", "connection.noData": "暂无关联数据", "connection.notLoaded": "未加载", + "case.status.running": "运行中", + "case.status.completed": "已完成", + "case.status.interrupted": "已中断", + "case.status.error": "错误", }, en: { "nav.l1": "Memory Snippets (L1)", @@ -223,12 +289,14 @@ const LOCALES = { "nav.l2_time": "Time Memory (L2)", "nav.l0": "Raw Dialogues (L0)", "nav.profile": "Personal Profile", + "nav.memory_trace": "Memory Trace", "nav.lastIndexed": "Last indexed", "nav.waiting": "Waiting", "topbar.title": "ClawXMemory", "topbar.idle": "Idle", "topbar.refresh": "Refresh", "topbar.build": "Sync Index", + "topbar.dream": "Dream", "topbar.overview": "Dashboard", "topbar.settings": "Settings", "topbar.retrieve": "Retrieve", @@ -246,10 +314,17 @@ const LOCALES = { "settings.title": "Settings", "settings.mode": "Reasoning mode", "settings.mode.help": - "Speed first obeys the max acceptable latency; accuracy first ignores that latency cap.", + "Speed first stops at the L2 evidence note; accuracy first can continue into L1/L0.", "settings.mode.answer_first": "Speed first", "settings.mode.accuracy_first": "Accuracy first", - "settings.maxLatency": "Max acceptable latency (ms)", + "settings.maxLatency": "Recall Top K", + "settings.autoIndexInterval": "Auto index interval (hours)", + "settings.autoDreamInterval": "Auto Dream interval (hours)", + "settings.autoDreamMinL1": "Auto Dream min new L1", + "settings.scheduleHint": "0 disables the automatic job", + "settings.autoDreamHint": + "Automatic Dream only runs when new L1 windows reach the configured threshold.", + "settings.off": "Off", "settings.save": "Save", "settings.theme": "Theme", "settings.theme.light": "Light", @@ -272,6 +347,10 @@ const LOCALES = { "confirm.sync.body": "This will scan recent conversations and update the memory index. It may take a moment.", "confirm.sync.ok": "Start Sync", + "confirm.dream.title": "Memory Dream", + "confirm.dream.body": + "Memory is about to drift off. It will quietly reorganize the memory traces you've left behind, rebuilding clearer project memory and a sharper global profile without touching raw L1 or time-layer memory.", + "confirm.dream.ok": "Run Dream", "confirm.clear.title": "Clear Memory", "confirm.clear.body": "This will permanently delete all indexed memory data. This action cannot be undone. Continue?", @@ -283,6 +362,10 @@ const LOCALES = { "confirm.cancel": "Cancel", "status.building": "Syncing…", "status.built": "Built · L0 {0} / L1 {1} / L2T {2} / L2P {3} / Profile {4}", + "status.dreaming": "Dream rebuilding…", + "status.dreamed": + "Dream complete · Reviewed L1 {0} / Rebuilt projects {1} / Deleted projects {2} / Profile {3} / Duplicates {4} / Conflicts {5}", + "status.dreamFailed": "Dream failed: {0}", "status.clearing": "Clearing…", "status.cleared": "Local memory cleared", "status.exporting": "Exporting…", @@ -312,11 +395,13 @@ const LOCALES = { "level.l2_time.label": "Time Memory (L2)", "level.l0.label": "Raw Dialogues (L0)", "level.profile.label": "Personal Profile", + "level.memory_trace.label": "Memory Trace", "level.l1.empty": "No L1 records", "level.l2_project.empty": "No L2 project indexes", "level.l2_time.empty": "No L2 time indexes", "level.l0.empty": "No L0 sessions", "level.profile.empty": "No profile data", + "level.memory_trace.empty": "No traced conversations yet", "detail.summary": "Summary", "detail.situation": "Situation", "detail.projects": "Projects", @@ -362,6 +447,10 @@ const LOCALES = { "overview.recallMs": "Last Recall", "overview.recallMode": "Recall Mode", "overview.reasoningMode": "Reasoning Mode", + "overview.autoIndexSchedule": "Auto Index", + "overview.autoDreamSchedule": "Auto Dream", + "overview.lastDreamAt": "Last Dream", + "overview.lastDreamStatus": "Dream Status", "overview.recallPath": "Reply Path", "overview.budgetStop": "Budget Stop", "overview.shadowDeep": "Shadow Deep", @@ -377,6 +466,11 @@ const LOCALES = { "overview.group.reasoning": "Reasoning & Budget", "overview.group.health": "System Health", "overview.pending": "Pending", + "dream.status.never": "Never run", + "dream.status.running": "Running", + "dream.status.success": "Success", + "dream.status.skipped": "Skipped", + "dream.status.failed": "Failed", "recall.llm": "LLM Fast Path", "recall.local_fallback": "Local Fallback", "recall.none": "No Memory", @@ -421,6 +515,41 @@ const LOCALES = { "topbar.listView": "List View", "board.project": "Project Memory", "board.timeline": "Memory Timeline", + "board.memoryTrace": "Memory Trace", + "board.memoryTrace.empty": "No real chat cases yet", + "board.memoryTrace.noDetail": "Select a case to inspect the memory reasoning flow", + "board.memoryTrace.timeline": "Reasoning Timeline", + "board.memoryTrace.context": "Injected Context", + "board.memoryTrace.finalNote": "Final Evidence Note", + "board.memoryTrace.path": "Trace Path", + "board.memoryTrace.tools": "Tool Activity", + "board.memoryTrace.answer": "Final Answer", + "board.memoryTrace.stepDetail": "Step Inspector", + "board.memoryTrace.noStep": "Expand a step to inspect structured details and full prompt data", + "board.memoryTrace.promptDebug": "Full Prompt Debug", + "board.memoryTrace.systemPrompt": "System Prompt", + "board.memoryTrace.userPrompt": "User Prompt", + "board.memoryTrace.rawOutput": "Raw Model Output", + "board.memoryTrace.parsedResult": "Parsed Result", + "board.memoryTrace.detail.empty": "No structured details", + "board.memoryTrace.selectCase": "Choose Case", + "board.memoryTrace.flow": "Reasoning Flow", + "board.memoryTrace.query": "Query", + "board.memoryTrace.session": "Session", + "board.memoryTrace.mode": "Mode", + "board.memoryTrace.injected": "Injected", + "board.memoryTrace.status": "Status", + "board.memoryTrace.started": "Started", + "board.memoryTrace.finished": "Finished", + "board.memoryTrace.enoughAt": "Enough At", + "board.memoryTrace.rail": "Trace Rail", + "board.memoryTrace.artifacts": "Supplemental", + "board.memoryTrace.artifacts.context": "Context", + "board.memoryTrace.artifacts.tools": "Tools", + "board.memoryTrace.artifacts.answer": "Answer", + "board.memoryTrace.observed": + "Developer debug view: shows observable ClawXMemory memory-reasoning steps and hop prompts, not the model's hidden chain-of-thought.", + "board.memoryTrace.none": "None", "board.profile": "Personal Profile", "board.profile.empty": "No profile data yet", "board.profile.topics": "Related Topics", @@ -435,6 +564,10 @@ const LOCALES = { "connection.l0": "L0 Sessions", "connection.noData": "No linked data", "connection.notLoaded": "Not loaded", + "case.status.running": "Running", + "case.status.completed": "Completed", + "case.status.interrupted": "Interrupted", + "case.status.error": "Error", }, }; @@ -538,14 +671,15 @@ const overviewCards = $("#overviewCards"); const overviewScroll = $("#overviewScroll"); const browserTitle = $("#browserTitle"); const browserMeta = $("#browserMeta"); +const listSearchRow = $("#listSearchRow"); const listQueryInput = $("#listQueryInput"); const listSearchBtn = $("#listSearchBtn"); const entryList = $("#entryList"); const refreshBtn = $("#refreshBtn"); const buildNowBtn = $("#buildNowBtn"); +const dreamRunBtn = $("#dreamRunBtn"); const settingsToggleBtn = document.getElementById("settingsToggleBtn"); -const retrieveToggleBtn = document.getElementById("retrieveToggleBtn"); const detailToggleBtn = document.getElementById("detailToggleBtn"); const detailPanel = $("#detailPanel"); @@ -563,17 +697,12 @@ const clearMemoryBtn = $("#clearMemoryBtn"); const importMemoryInput = $("#importMemoryInput"); const reasoningModeToggle = document.getElementById("reasoningModeToggle"); const maxAutoReplyLatencyInput = $("#maxAutoReplyLatencyInput"); +const autoIndexIntervalHoursInput = $("#autoIndexIntervalHoursInput"); +const autoDreamIntervalHoursInput = $("#autoDreamIntervalHoursInput"); +const autoDreamMinL1Input = $("#autoDreamMinL1Input"); const latencyFieldWrap = $("#latencyFieldWrap"); const langToggle = document.getElementById("langToggle"); -const retrievePanel = $("#retrievePanel"); -const retrieveCloseBtn = $("#retrieveCloseBtn"); -const queryInput = $("#queryInput"); -const retrieveBtn = $("#retrieveBtn"); -const retrieveSummary = $("#retrieveSummary"); -const retrieveTimeline = $("#retrieveTimeline"); -const retrieveResult = $("#retrieveResult"); - const themeToggle = $("#themeToggle"); const langDropdown = $("#langDropdown"); const langTrigger = $("#langTrigger"); @@ -586,6 +715,7 @@ const boardTabs = document.getElementById("boardTabs"); const boardScroll = $("#boardScroll"); const projectBoard = $("#projectBoard"); const timelineBoard = $("#timelineBoard"); +const memoryTraceBoard = $("#memoryTraceBoard"); const connectionPanel = $("#connectionPanel"); const connectionGraph = $("#connectionGraph"); const connectionSvg = $("#connectionSvg"); @@ -595,7 +725,7 @@ const viewToggleBtn = $("#viewToggleBtn"); /* ── Level config ────────────────────────────────────────── */ -const LEVEL_KEYS = ["profile", "l2_project", "l2_time", "l1", "l0"]; +const LEVEL_KEYS = ["profile", "l2_project", "l2_time", "l1", "l0", "memory_trace"]; function getLevelConfig(level) { const endpoints = { @@ -604,6 +734,7 @@ function getLevelConfig(level) { l2_time: "./api/l2/time", l0: "./api/l0", profile: "./api/profile", + memory_trace: "", }; return { label: t(`level.${level}.label`), @@ -618,6 +749,7 @@ const OVERVIEW_KEYS = { l2_time: "totalL2Time", l0: "totalL0", profile: "totalProfiles", + memory_trace: "", }; function formatStatus(value) { @@ -641,7 +773,10 @@ const state = { overview: {}, settings: { reasoningMode: "answer_first", - maxAutoReplyLatencyMs: 1800, + recallTopK: 10, + autoIndexIntervalMinutes: 60, + autoDreamIntervalMinutes: 360, + autoDreamMinNewL1: 10, }, globalProfile: { recordId: "global_profile_record", @@ -656,6 +791,14 @@ const state = { selectedIndex: -1, viewMode: "command_center", activeBoard: "project", + cases: [], + selectedCaseId: "", + selectedCase: null, + selectedCaseStepId: "", + selectedCaseArtifactTab: "context", + selectedCaseSelectorOpen: false, + promptDebugOpenByKey: {}, + caseLoading: false, connectionTarget: null, connectionType: null, l1ById: {}, @@ -692,6 +835,14 @@ function getOverviewCount(level) { return Number(state.overview?.[OVERVIEW_KEYS[level]] ?? 0); } +function formatCaseStatus(status) { + return t(`case.status.${status || "running"}`); +} + +function formatInjectedFlag(value) { + return value ? t("boundary.injected") : t("boundary.notInjected"); +} + /* ── Panel / nav state ───────────────────────────────────── */ function setPanel(name) { @@ -897,6 +1048,11 @@ function renderOverview(overview = {}) { const lastRecallPath = overview.lastRecallPath || "explicit"; const currentReasoningMode = overview.currentReasoningMode || state.settings.reasoningMode || "answer_first"; + const autoIndexSchedule = formatScheduleHours(state.settings.autoIndexIntervalMinutes); + const autoDreamSchedule = formatScheduleHours(state.settings.autoDreamIntervalMinutes); + const lastDreamAt = overview.lastDreamAt ? formatTime(overview.lastDreamAt) : t("nav.waiting"); + const lastDreamStatus = t(`dream.status.${overview.lastDreamStatus || "never"}`); + const lastDreamSummary = String(overview.lastDreamSummary || "").trim(); const lastRecallBudgetLimited = Boolean(overview.lastRecallBudgetLimited); const lastShadowDeepQueued = Boolean(overview.lastShadowDeepQueued); const primaryConflict = formatConflictSummary(runtimeIssues[0]); @@ -968,6 +1124,15 @@ function renderOverview(overview = {}) { "default", ), createMetricCell(t("overview.queued"), overview.queuedSessions ?? 0, "default"), + createMetricCell(t("overview.autoIndexSchedule"), autoIndexSchedule, "default"), + createMetricCell( + t("overview.autoDreamSchedule"), + autoDreamSchedule, + "default", + `L1 >= ${state.settings.autoDreamMinNewL1 ?? 10}`, + ), + createMetricCell(t("overview.lastDreamAt"), lastDreamAt, "default"), + createMetricCell(t("overview.lastDreamStatus"), lastDreamStatus, "default", lastDreamSummary), createMetricCell( t("overview.budgetStop"), lastRecallBudgetLimited ? t("boundary.budgetStopped") : t("boundary.budgetNotStopped"), @@ -1022,10 +1187,33 @@ function renderOverview(overview = {}) { /* ── Settings ────────────────────────────────────────────── */ +function minutesToHoursValue(value, fallback) { + const numeric = Number(value); + if (!Number.isFinite(numeric)) return String(fallback); + return String(Math.max(0, Math.round(numeric / 60))); +} + +function parseHoursToMinutes(value, fallbackMinutes) { + const parsed = Number.parseFloat(String(value || "").trim()); + if (!Number.isFinite(parsed)) return fallbackMinutes; + return Math.max(0, Math.round(parsed * 60)); +} + +function formatScheduleHours(minutes) { + const numeric = Number(minutes); + if (!Number.isFinite(numeric) || numeric <= 0) return t("settings.off"); + const hours = numeric / 60; + const rendered = Number.isInteger(hours) ? String(hours) : hours.toFixed(1).replace(/\.0$/, ""); + return `${rendered}h`; +} + function applySettings(settings = {}) { state.settings = { reasoningMode: "answer_first", - maxAutoReplyLatencyMs: 1800, + recallTopK: 10, + autoIndexIntervalMinutes: 60, + autoDreamIntervalMinutes: 360, + autoDreamMinNewL1: 10, ...(settings || {}), }; const activeMode = state.settings.reasoningMode || "answer_first"; @@ -1034,34 +1222,58 @@ function applySettings(settings = {}) { btn.classList.toggle("active", btn.dataset.mode === activeMode); }); } - maxAutoReplyLatencyInput.value = String(state.settings.maxAutoReplyLatencyMs ?? 1800); + maxAutoReplyLatencyInput.value = String(state.settings.recallTopK ?? 10); + if (autoIndexIntervalHoursInput) { + autoIndexIntervalHoursInput.value = minutesToHoursValue( + state.settings.autoIndexIntervalMinutes, + 1, + ); + } + if (autoDreamIntervalHoursInput) { + autoDreamIntervalHoursInput.value = minutesToHoursValue( + state.settings.autoDreamIntervalMinutes, + 6, + ); + } + if (autoDreamMinL1Input) { + autoDreamMinL1Input.value = String(Math.max(0, Number(state.settings.autoDreamMinNewL1 ?? 10))); + } updateSettingsVisibility(); } function readSettingsForm() { - const parsedLatency = Number.parseInt(String(maxAutoReplyLatencyInput.value || "").trim(), 10); + const parsedRecallTopK = Number.parseInt(String(maxAutoReplyLatencyInput.value || "").trim(), 10); + const parsedDreamMinL1 = Number.parseInt(String(autoDreamMinL1Input?.value || "").trim(), 10); const activeBtn = reasoningModeToggle?.querySelector(".popover-seg-btn.active"); const reasoningMode = activeBtn?.dataset.mode === "accuracy_first" ? "accuracy_first" : "answer_first"; - const next = { reasoningMode }; - if (reasoningMode === "answer_first") { - next.maxAutoReplyLatencyMs = Number.isFinite(parsedLatency) - ? Math.max(300, parsedLatency) - : state.settings.maxAutoReplyLatencyMs; - } - return next; + return { + reasoningMode, + recallTopK: Number.isFinite(parsedRecallTopK) + ? Math.max(1, Math.min(50, parsedRecallTopK)) + : state.settings.recallTopK, + autoIndexIntervalMinutes: parseHoursToMinutes( + autoIndexIntervalHoursInput?.value, + state.settings.autoIndexIntervalMinutes ?? 60, + ), + autoDreamIntervalMinutes: parseHoursToMinutes( + autoDreamIntervalHoursInput?.value, + state.settings.autoDreamIntervalMinutes ?? 360, + ), + autoDreamMinNewL1: Number.isFinite(parsedDreamMinL1) + ? Math.max(0, parsedDreamMinL1) + : state.settings.autoDreamMinNewL1, + }; } function updateSettingsVisibility() { - const activeBtn = reasoningModeToggle?.querySelector(".popover-seg-btn.active"); - const answerFirst = (activeBtn?.dataset.mode || state.settings.reasoningMode) === "answer_first"; if (latencyFieldWrap) { - latencyFieldWrap.hidden = !answerFirst; - latencyFieldWrap.style.display = answerFirst ? "" : "none"; - latencyFieldWrap.setAttribute("aria-hidden", answerFirst ? "false" : "true"); + latencyFieldWrap.hidden = false; + latencyFieldWrap.style.display = ""; + latencyFieldWrap.setAttribute("aria-hidden", "false"); } if (maxAutoReplyLatencyInput) { - maxAutoReplyLatencyInput.disabled = !answerFirst; + maxAutoReplyLatencyInput.disabled = false; } } @@ -1070,7 +1282,12 @@ function updateSettingsVisibility() { function renderNavCounts() { levelTabs.querySelectorAll("[data-count-for]").forEach((node) => { const level = node.getAttribute("data-count-for"); - if (level) node.textContent = String(getOverviewCount(level)); + if (!level) return; + if (level === "memory_trace") { + node.textContent = String(state.cases.length || 0); + return; + } + node.textContent = String(getOverviewCount(level)); }); } @@ -1178,6 +1395,7 @@ function createEmptyState(text) { /* ── Entry list render ───────────────────────────────────── */ function renderEntryList() { + entryList.classList.remove("entry-stream--memory-trace"); entryList.innerHTML = ""; const config = getLevelConfig(state.activeLevel); if (state.visibleItems.length === 0) { @@ -1537,6 +1755,11 @@ function buildDataIndexes() { } function switchView(mode) { + if (mode === "list" && state.activeBoard === "memory_trace") { + state.activeLevel = "memory_trace"; + } else if (mode === "command_center" && state.activeLevel === "memory_trace") { + state.activeBoard = "memory_trace"; + } state.viewMode = mode; const workspace = $(".workspace"); const shell = $(".app-shell"); @@ -1555,7 +1778,7 @@ function switchView(mode) { if (isCmd) { h2.dataset.i18n = "topbar.commandCenter"; h2.textContent = t("topbar.commandCenter"); - renderCommandCenter(); + switchBoard(state.activeBoard); } else { h2.dataset.i18n = "topbar.listView"; h2.textContent = t("topbar.listView"); @@ -1571,10 +1794,12 @@ function switchBoard(board) { }); projectBoard.classList.toggle("board-active", board === "project"); timelineBoard.classList.toggle("board-active", board === "timeline"); + if (memoryTraceBoard) memoryTraceBoard.classList.toggle("board-active", board === "memory_trace"); const pb = document.getElementById("profileBoard"); if (pb) pb.classList.toggle("board-active", board === "profile"); if (board === "project") renderProjectBoard(); else if (board === "timeline") renderTimelineBoard(); + else if (board === "memory_trace") void loadCases({ silent: false, preserveScroll: false }); else if (board === "profile") renderProfileBoard(); closeConnection(); } @@ -1582,6 +1807,7 @@ function switchBoard(board) { function renderCommandCenter() { if (state.activeBoard === "project") renderProjectBoard(); else if (state.activeBoard === "timeline") renderTimelineBoard(); + else if (state.activeBoard === "memory_trace") renderMemoryTraceBoard(); else if (state.activeBoard === "profile") renderProfileBoard(); } @@ -2301,8 +2527,8 @@ function syncBaseItems() { async function loadSnapshot() { const snap = await fetchJson("./api/snapshot?limit=24"); - renderOverview(snap.overview || {}); applySettings(snap.settings || {}); + renderOverview(snap.overview || {}); state.globalProfile = snap.globalProfile || state.globalProfile; state.baseRaw.l2_time = snap.recentTimeIndexes || []; state.baseRaw.l2_project = snap.recentProjectIndexes || []; @@ -2313,10 +2539,34 @@ async function loadSnapshot() { buildDataIndexes(); } +function updateListLevelChrome(level) { + const isMemoryTrace = level === "memory_trace"; + if (listSearchRow) listSearchRow.hidden = isMemoryTrace; + if (!isMemoryTrace) return; + if (state.activePanel === "detail") setPanel(null); + listQueryInput.value = ""; + state.isSearching = false; + const listClearBtn = document.getElementById("listClearBtn"); + if (listClearBtn) listClearBtn.style.display = "none"; + const pager = document.getElementById("listPagination"); + if (pager) pager.style.display = "none"; +} + async function loadLevel(level, query = "") { const config = getLevelConfig(level); browserTitle.textContent = config.label; renderActiveNav(); + updateListLevelChrome(level); + + if (level === "memory_trace") { + browserMeta.textContent = t("stream.items", state.cases.length); + if (!state.cases.length || !state.selectedCaseId) { + await loadCases({ silent: false, preserveScroll: false }); + } else { + renderMemoryTraceListView({ preserveScroll: false }); + } + return; + } state.isSearching = !!query.trim(); if (state.isSearching) { @@ -2335,6 +2585,12 @@ async function loadLevel(level, query = "") { async function refreshDashboard(msgKey = "status.refreshed", tone = "success", ...args) { setActivity("status.refreshing"); await loadSnapshot(); + const memoryTraceVisible = + (state.viewMode === "command_center" && state.activeBoard === "memory_trace") || + (state.viewMode === "list" && state.activeLevel === "memory_trace"); + if (memoryTraceVisible) { + await loadCases({ silent: false, preserveScroll: true }); + } await loadLevel(state.activeLevel, listQueryInput.value || ""); if ( state.overview.startupRepairStatus === "running" || @@ -2353,107 +2609,600 @@ function refreshRenderedContent() { if (state.viewMode === "command_center") { renderCommandCenter(); } else { - loadLevel(state.activeLevel, listQueryInput.value || ""); + void loadLevel(state.activeLevel, listQueryInput.value || ""); } } -/* ── Retrieve ────────────────────────────────────────────── */ +/* ── Memory Trace ────────────────────────────────────────── */ -function renderRetrieveBlock(title, count, items) { - const block = document.createElement("section"); - block.className = "retrieval-block"; - const head = document.createElement("div"); - head.className = "retrieval-head"; - const strong = document.createElement("strong"); - strong.textContent = title; - const countEl = document.createElement("span"); - countEl.className = "retrieval-count"; - countEl.textContent = count; - head.append(strong, countEl); - block.append(head); - if (!items.length) { - block.append(createEmptyState(t("retrieve.noResult"))); - return block; - } - const list = document.createElement("ul"); - list.className = "mini-list"; - items.forEach((text) => { - const li = document.createElement("li"); - li.textContent = text; - list.append(li); +function createTraceMetaChip(label, value) { + const chip = document.createElement("div"); + chip.className = "memory-trace-meta-chip"; + const head = document.createElement("span"); + head.className = "memory-trace-meta-label"; + head.textContent = label; + const body = document.createElement("strong"); + body.className = "memory-trace-meta-value"; + body.textContent = value || "-"; + chip.append(head, body); + return chip; +} + +function getSelectedCaseStep() { + const steps = state.selectedCase?.retrieval?.trace?.steps || []; + return steps.find((step) => step.stepId === state.selectedCaseStepId) || steps[0] || null; +} + +function renderDebugValue(value) { + if (value == null) return ""; + if (typeof value === "string") return value; + try { + return JSON.stringify(value, null, 2); + } catch { + return String(value); + } +} + +function getCurrentMemoryTraceRoot() { + if (state.viewMode === "list" && state.activeLevel === "memory_trace") return entryList; + if (state.viewMode === "command_center" && state.activeBoard === "memory_trace") + return memoryTraceBoard; + return null; +} + +function captureMemoryTraceScrollState(root) { + if (!root) return null; + return { + pageScrollTop: root.scrollTop ?? 0, + selectorScrollTop: root.querySelector(".memory-trace-selector-list")?.scrollTop ?? 0, + artifactScrollTop: root.querySelector(".memory-trace-artifact-body")?.scrollTop ?? 0, + }; +} + +function restoreMemoryTraceScrollState(root, scrollState) { + if (!root || !scrollState) return; + const selectorList = root.querySelector(".memory-trace-selector-list"); + const artifact = root.querySelector(".memory-trace-artifact-body"); + root.scrollTop = scrollState.pageScrollTop ?? 0; + if (selectorList) selectorList.scrollTop = scrollState.selectorScrollTop ?? 0; + if (artifact) artifact.scrollTop = scrollState.artifactScrollTop ?? 0; +} + +function getPromptDebugStateKey(step, promptDebug) { + return [state.selectedCaseId || "", step?.stepId || "", promptDebug?.requestLabel || ""].join( + "::", + ); +} + +function createPromptDebugBlock(promptDebug, step) { + const stateKey = getPromptDebugStateKey(step, promptDebug); + const block = document.createElement("details"); + block.className = "memory-trace-debug-block"; + block.open = Boolean(state.promptDebugOpenByKey[stateKey]); + + block.addEventListener("toggle", () => { + if (block.open) state.promptDebugOpenByKey[stateKey] = true; + else delete state.promptDebugOpenByKey[stateKey]; }); - block.append(list); + + const summary = document.createElement("summary"); + summary.textContent = `${t("board.memoryTrace.promptDebug")} · ${promptDebug.requestLabel || "-"}`; + block.append(summary); + + const sections = [ + { title: t("board.memoryTrace.systemPrompt"), value: promptDebug.systemPrompt || "" }, + { title: t("board.memoryTrace.userPrompt"), value: promptDebug.userPrompt || "" }, + { + title: t("board.memoryTrace.rawOutput"), + value: promptDebug.rawResponse || promptDebug.errorMessage || "", + }, + ]; + if (promptDebug.parsedResult !== undefined) { + sections.push({ + title: t("board.memoryTrace.parsedResult"), + value: renderDebugValue(promptDebug.parsedResult), + }); + } + + sections.forEach((section) => { + const title = document.createElement("h5"); + title.className = "memory-trace-debug-title"; + title.textContent = section.title; + const code = document.createElement("pre"); + code.className = "memory-trace-code"; + code.textContent = section.value || t("board.memoryTrace.none"); + block.append(title, code); + }); + return block; } -function renderRetrieveResult(data) { - retrieveTimeline.innerHTML = ""; - const debugBits = data.debug - ? ` · mode=${data.debug.mode} · path=${data.debug.path || "explicit"} · ${data.debug.elapsedMs}ms${data.debug.cacheHit ? " · cache" : ""}${data.debug.budgetLimited ? " · budget" : ""}` - : ""; - retrieveSummary.textContent = `intent=${data.intent || "general"} · enoughAt=${data.enoughAt || "none"}${debugBits}`; - retrieveResult.textContent = data.context || ""; +function createDetailBlock(detail) { + const wrap = document.createElement("div"); + wrap.className = `memory-trace-detail-block${detail.kind === "note" ? " is-note" : ""}`; - if (data.profile?.profileText) { - retrieveTimeline.append( - renderRetrieveBlock(t("nav.profile"), 1, [shortText(data.profile.profileText, 180)]), - ); + const title = document.createElement("h5"); + title.className = "memory-trace-debug-title"; + title.textContent = detail.label || detail.key; + wrap.append(title); + + if (detail.kind === "text" || detail.kind === "note") { + const body = document.createElement("pre"); + body.className = detail.kind === "note" ? "memory-trace-note" : "memory-trace-code"; + body.textContent = detail.text || t("board.memoryTrace.none"); + wrap.append(body); + return wrap; } - retrieveTimeline.append( - renderRetrieveBlock( - "L2", - data.l2Results?.length ?? 0, - (data.l2Results || []).map((r) => - r.level === "l2_time" - ? `${r.item.dateKey} · ${shortText(r.item.summary, 120)}` - : `${r.item.projectName} · ${shortText(r.item.latestProgress || r.item.summary, 120)}`, - ), + if (detail.kind === "list") { + if (!detail.items?.length) { + wrap.append(createEmptyState(t("board.memoryTrace.none"))); + return wrap; + } + const list = document.createElement("ul"); + list.className = "memory-trace-detail-list"; + detail.items.forEach((item) => { + const li = document.createElement("li"); + li.textContent = item; + list.append(li); + }); + wrap.append(list); + return wrap; + } + + if (detail.kind === "kv") { + const grid = document.createElement("div"); + grid.className = "memory-trace-kv-grid"; + (detail.entries || []).forEach((entry) => { + const row = document.createElement("div"); + row.className = "memory-trace-kv-row"; + const key = document.createElement("span"); + key.className = "memory-trace-kv-key"; + key.textContent = entry.label; + const value = document.createElement("span"); + value.className = "memory-trace-kv-value"; + value.textContent = entry.value || "-"; + row.append(key, value); + grid.append(row); + }); + wrap.append(grid); + return wrap; + } + + const body = document.createElement("pre"); + body.className = "memory-trace-code"; + body.textContent = renderDebugValue(detail.json) || t("board.memoryTrace.none"); + wrap.append(body); + return wrap; +} + +function createMemoryTraceStep(step, stepIndex = 0) { + const card = document.createElement("button"); + card.type = "button"; + card.className = "memory-trace-step-toggle"; + card.dataset.status = step.status || "info"; + card.dataset.stepId = step.stepId || ""; + + const marker = document.createElement("span"); + marker.className = "memory-trace-step-marker"; + marker.textContent = String(stepIndex + 1); + + const body = document.createElement("div"); + body.className = "memory-trace-step-summary"; + + const head = document.createElement("div"); + head.className = "memory-trace-step-head"; + const title = document.createElement("strong"); + title.textContent = step.title || step.kind; + const kind = document.createElement("span"); + kind.className = "memory-trace-kind-badge"; + kind.textContent = step.kind; + head.append(title, kind); + + const input = document.createElement("div"); + input.className = "memory-trace-step-line"; + input.textContent = step.inputSummary || ""; + + const output = document.createElement("div"); + output.className = "memory-trace-step-line is-output"; + output.textContent = step.outputSummary || ""; + + body.append(head, input, output); + card.append(marker, body); + return card; +} + +function createToolEventItem(event) { + const item = document.createElement("li"); + item.className = "memory-trace-tool-item"; + + const head = document.createElement("div"); + head.className = "memory-trace-tool-head"; + const title = document.createElement("strong"); + title.textContent = `${event.toolName} · ${event.phase}`; + const meta = document.createElement("span"); + meta.className = "memory-trace-kind-badge"; + meta.textContent = formatCaseStatus( + event.status === "running" ? "running" : event.status === "error" ? "error" : "completed", + ); + head.append(title, meta); + + const summary = document.createElement("div"); + summary.className = "memory-trace-tool-summary"; + summary.textContent = event.summary || ""; + + item.append(head, summary); + if (event.paramsPreview) { + const params = document.createElement("pre"); + params.className = "memory-trace-code"; + params.textContent = event.paramsPreview; + item.append(params); + } + if (event.resultPreview) { + const result = document.createElement("pre"); + result.className = "memory-trace-code"; + result.textContent = event.resultPreview; + item.append(result); + } + return item; +} + +function createTraceArtifactTabs() { + const tabs = document.createElement("div"); + tabs.className = "memory-trace-artifact-tabs"; + [ + ["context", t("board.memoryTrace.artifacts.context")], + ["tools", t("board.memoryTrace.artifacts.tools")], + ["answer", t("board.memoryTrace.artifacts.answer")], + ].forEach(([id, label]) => { + const button = document.createElement("button"); + button.type = "button"; + button.className = "memory-trace-artifact-tab"; + if (state.selectedCaseArtifactTab === id) button.classList.add("active"); + button.textContent = label; + button.addEventListener("click", () => { + state.selectedCaseArtifactTab = id; + renderVisibleMemoryTrace({ preserveScroll: true }); + }); + tabs.append(button); + }); + return tabs; +} + +function createArtifactBody(record) { + const body = document.createElement("div"); + body.className = "memory-trace-artifact-body"; + + if (state.selectedCaseArtifactTab === "tools") { + if (!record.toolEvents?.length) { + body.append(createEmptyState(t("board.memoryTrace.none"))); + return body; + } + const list = document.createElement("ul"); + list.className = "memory-trace-tool-list"; + record.toolEvents.forEach((event) => list.append(createToolEventItem(event))); + body.append(list); + return body; + } + + const pre = document.createElement("pre"); + pre.className = "memory-trace-code"; + if (state.selectedCaseArtifactTab === "answer") { + pre.textContent = record.assistantReply || t("board.memoryTrace.none"); + } else { + pre.textContent = record.retrieval?.contextPreview || t("board.memoryTrace.none"); + } + body.append(pre); + return body; +} + +function createMemoryTraceSelector() { + const wrap = document.createElement("div"); + wrap.className = "memory-trace-selector"; + + if (!state.cases.length) { + wrap.append(createEmptyState(t("board.memoryTrace.empty"))); + return wrap; + } + + const active = + state.cases.find((record) => record.caseId === state.selectedCaseId) || state.cases[0]; + const trigger = document.createElement("button"); + trigger.type = "button"; + trigger.className = "memory-trace-selector-trigger"; + trigger.setAttribute("aria-expanded", String(state.selectedCaseSelectorOpen)); + trigger.addEventListener("click", () => { + state.selectedCaseSelectorOpen = !state.selectedCaseSelectorOpen; + renderVisibleMemoryTrace({ preserveScroll: true }); + }); + + const triggerTitle = document.createElement("span"); + triggerTitle.className = "memory-trace-selector-title"; + triggerTitle.textContent = shortText(active?.query || t("board.memoryTrace.none"), 96); + + const chevron = document.createElement("span"); + chevron.className = "memory-trace-selector-chevron"; + chevron.textContent = state.selectedCaseSelectorOpen ? "▴" : "▾"; + + trigger.append(triggerTitle, chevron); + wrap.append(trigger); + + if (!state.selectedCaseSelectorOpen) return wrap; + + const list = document.createElement("div"); + list.className = "memory-trace-selector-list"; + state.cases.forEach((record) => { + const option = document.createElement("button"); + option.type = "button"; + option.className = "memory-trace-selector-option"; + if (record.caseId === state.selectedCaseId) option.classList.add("active"); + + const optionTitle = document.createElement("div"); + optionTitle.className = "memory-trace-selector-option-title"; + optionTitle.textContent = shortText(record.query || t("board.memoryTrace.none"), 120); + + const optionMeta = document.createElement("div"); + optionMeta.className = "memory-trace-selector-option-meta"; + const pathSummary = record.retrieval?.pathSummary ? ` · ${record.retrieval.pathSummary}` : ""; + optionMeta.textContent = `${formatCaseStatus(record.status)}${pathSummary} · ${formatTime(record.startedAt)}`; + + option.append(optionTitle, optionMeta); + option.addEventListener("click", () => { + state.selectedCaseSelectorOpen = false; + void selectCase(record.caseId, { preserveScroll: true }); + }); + list.append(option); + }); + wrap.append(list); + return wrap; +} + +function createMemoryTraceTimeline(record) { + const wrap = document.createElement("section"); + wrap.className = "memory-trace-flow"; + + const head = document.createElement("div"); + head.className = "memory-trace-section-head"; + const title = document.createElement("h4"); + title.textContent = t("board.memoryTrace.flow"); + head.append(title); + wrap.append(head); + + const list = document.createElement("div"); + list.className = "memory-trace-flow-list"; + const traceSteps = record.retrieval?.trace?.steps || []; + if (!traceSteps.length) { + list.append(createEmptyState(t("board.memoryTrace.none"))); + } else { + traceSteps.forEach((step, index) => { + const item = document.createElement("div"); + item.className = "memory-trace-step-item"; + const isActive = step.stepId === state.selectedCaseStepId; + if (isActive) item.classList.add("active"); + + const stepCard = createMemoryTraceStep(step, index); + stepCard.addEventListener("click", () => { + state.selectedCaseStepId = state.selectedCaseStepId === step.stepId ? "" : step.stepId; + renderVisibleMemoryTrace({ preserveScroll: true }); + }); + item.append(stepCard); + + if (isActive) { + const expanded = document.createElement("div"); + expanded.className = "memory-trace-step-expanded"; + + const metaGrid = document.createElement("div"); + metaGrid.className = "memory-trace-expanded-meta"; + metaGrid.append( + createTraceMetaChip(t("board.memoryTrace.status"), step.status || "-"), + createTraceMetaChip("kind", step.kind || "-"), + ); + expanded.append(metaGrid); + + if (!step.details?.length) { + expanded.append(createEmptyState(t("board.memoryTrace.detail.empty"))); + } else { + step.details.forEach((detailItem) => expanded.append(createDetailBlock(detailItem))); + } + if (step.promptDebug) { + expanded.append(createPromptDebugBlock(step.promptDebug, step)); + } + item.append(expanded); + } + + list.append(item); + }); + } + wrap.append(list); + return wrap; +} + +function createMemoryTraceArtifacts(record) { + const wrap = document.createElement("section"); + wrap.className = "memory-trace-summary-card memory-trace-summary-card--artifact"; + + const title = document.createElement("h4"); + title.textContent = t("board.memoryTrace.artifacts"); + wrap.append(title, createTraceArtifactTabs(), createArtifactBody(record)); + return wrap; +} + +function createMemoryTraceHero(record) { + const hero = document.createElement("section"); + hero.className = "memory-trace-hero"; + + const header = document.createElement("div"); + header.className = "memory-trace-header"; + header.append(createMemoryTraceSelector()); + + const chips = document.createElement("div"); + chips.className = "memory-trace-meta-grid"; + chips.append( + createTraceMetaChip(t("board.memoryTrace.status"), formatCaseStatus(record.status)), + createTraceMetaChip( + t("board.memoryTrace.mode"), + record.retrieval?.trace?.mode || t("board.memoryTrace.none"), ), - renderRetrieveBlock( - "L1", - data.l1Results?.length ?? 0, - (data.l1Results || []).map((r) => `${r.item.timePeriod} · ${shortText(r.item.summary, 120)}`), + createTraceMetaChip( + t("board.memoryTrace.enoughAt"), + t(`enough.${record.retrieval?.enoughAt || "none"}`), ), - renderRetrieveBlock( - "L0", - data.l0Results?.length ?? 0, - (data.l0Results || []).map((r) => { - const users = (r.item.messages || []) - .filter((m) => m.role === "user") - .map((m) => m.content); - return `${formatTime(r.item.timestamp)} · ${shortText(users[users.length - 1] || "", 120)}`; - }), + createTraceMetaChip( + t("board.memoryTrace.injected"), + formatInjectedFlag(Boolean(record.retrieval?.injected)), ), + createTraceMetaChip(t("board.memoryTrace.session"), record.sessionKey || "-"), + createTraceMetaChip(t("board.memoryTrace.started"), formatTime(record.startedAt)), + createTraceMetaChip(t("board.memoryTrace.finished"), formatTime(record.finishedAt || "")), ); + + const summary = document.createElement("div"); + summary.className = "memory-trace-summary-grid"; + + const path = document.createElement("section"); + path.className = "memory-trace-summary-card memory-trace-summary-card--path"; + const pathHead = document.createElement("h4"); + pathHead.textContent = t("board.memoryTrace.path"); + const pathBody = document.createElement("pre"); + pathBody.className = "memory-trace-code"; + pathBody.textContent = record.retrieval?.pathSummary || t("board.memoryTrace.none"); + path.append(pathHead, pathBody); + + const finalNote = document.createElement("section"); + finalNote.className = "memory-trace-summary-card"; + const noteHead = document.createElement("h4"); + noteHead.textContent = t("board.memoryTrace.finalNote"); + const noteBody = document.createElement("pre"); + noteBody.className = "memory-trace-note"; + noteBody.textContent = record.retrieval?.evidenceNotePreview || t("board.memoryTrace.none"); + finalNote.append(noteHead, noteBody); + + summary.append(path, finalNote, createMemoryTraceArtifacts(record)); + + hero.append(header, chips, summary); + return hero; +} + +function renderMemoryTraceWorkspace(target, options = {}) { + if (!target) return; + const { preserveScroll = false, forceLoading = false, listMode = false } = options; + const scrollState = preserveScroll ? captureMemoryTraceScrollState(target) : null; + + target.innerHTML = ""; + if (listMode) { + entryList.classList.add("entry-stream--memory-trace"); + const host = document.createElement("li"); + host.className = "memory-trace-list-host"; + target.append(host); + target = host; + } else { + entryList.classList.remove("entry-stream--memory-trace"); + } + + const page = document.createElement("div"); + page.className = "memory-trace-page"; + + if (forceLoading) { + page.append(createEmptyState(t("status.loading"))); + target.append(page); + restoreMemoryTraceScrollState(listMode ? entryList : target, scrollState); + return; + } + + if (!state.selectedCase) { + page.append(createEmptyState(t("board.memoryTrace.noDetail"))); + target.append(page); + restoreMemoryTraceScrollState(listMode ? entryList : target, scrollState); + return; + } + + const record = state.selectedCase; + page.append(createMemoryTraceHero(record), createMemoryTraceTimeline(record)); + + target.append(page); + restoreMemoryTraceScrollState(listMode ? entryList : target, scrollState); } -/* ── Actions ─────────────────────────────────────────────── */ +function renderMemoryTraceBoard(options = {}) { + renderMemoryTraceWorkspace(memoryTraceBoard, { ...options, listMode: false }); +} + +function renderMemoryTraceListView(options = {}) { + renderMemoryTraceWorkspace(entryList, { ...options, listMode: true }); +} -async function runRetrieve() { - const query = String(queryInput.value || "").trim(); - if (!query) { - setActivity("status.queryRequired", "warning"); +function renderVisibleMemoryTrace(options = {}) { + if (state.viewMode === "list" && state.activeLevel === "memory_trace") { + renderMemoryTraceListView(options); return; } - setActivity("status.retrieving"); - retrieveSummary.textContent = "…"; - retrieveTimeline.innerHTML = ""; - retrieveResult.textContent = ""; - const data = await fetchJson(`./api/retrieve?q=${encodeURIComponent(query)}&limit=6`); - renderRetrieveResult(data); - setActivity("status.retrieved", "success"); + if (state.viewMode === "command_center" && state.activeBoard === "memory_trace") { + renderMemoryTraceBoard(options); + } +} + +async function selectCase(caseId, options = {}) { + if (!caseId) return; + const { preserveScroll = false } = options; + state.selectedCaseId = caseId; + state.selectedCaseSelectorOpen = false; + state.caseLoading = true; + if (preserveScroll) { + renderVisibleMemoryTrace({ preserveScroll, forceLoading: false }); + } + state.selectedCase = await fetchJson(`./api/cases/${encodeURIComponent(caseId)}`); + const steps = state.selectedCase?.retrieval?.trace?.steps || []; + if (state.selectedCaseStepId && !steps.some((step) => step.stepId === state.selectedCaseStepId)) { + state.selectedCaseStepId = steps[0]?.stepId || ""; + } + state.caseLoading = false; + renderVisibleMemoryTrace({ preserveScroll }); +} + +async function loadCases(options = {}) { + const { silent = false, preserveScroll = silent } = options; + state.caseLoading = true; + if (!silent) { + renderVisibleMemoryTrace({ + preserveScroll, + forceLoading: !state.cases.length && !state.selectedCase, + }); + } + state.cases = await fetchJson("./api/cases?limit=5"); + if (!Array.isArray(state.cases)) state.cases = []; + if ( + !state.selectedCaseId || + !state.cases.some((record) => record.caseId === state.selectedCaseId) + ) { + state.selectedCaseId = state.cases[0]?.caseId || ""; + } + if (state.selectedCaseId) { + state.selectedCase = await fetchJson(`./api/cases/${encodeURIComponent(state.selectedCaseId)}`); + const steps = state.selectedCase?.retrieval?.trace?.steps || []; + if ( + state.selectedCaseStepId && + !steps.some((step) => step.stepId === state.selectedCaseStepId) + ) { + state.selectedCaseStepId = steps[0]?.stepId || ""; + } + } else { + state.selectedCase = null; + state.selectedCaseStepId = ""; + } + browserMeta.textContent = t("stream.items", state.cases.length); + renderNavCounts(); + state.caseLoading = false; + renderVisibleMemoryTrace({ preserveScroll }); } +/* ── Actions ─────────────────────────────────────────────── */ + async function saveSettings() { const payload = readSettingsForm(); const settings = await postJson("./api/settings", payload); applySettings(settings); const modeLabel = t(`reasoning.${settings.reasoningMode || "answer_first"}`); - const summary = - settings.reasoningMode === "answer_first" - ? `${modeLabel} · ${settings.maxAutoReplyLatencyMs}ms` - : modeLabel; + const summary = `${modeLabel} · topK=${settings.recallTopK ?? 10} · index=${formatScheduleHours(settings.autoIndexIntervalMinutes)} · dream=${formatScheduleHours(settings.autoDreamIntervalMinutes)} / L1>=${settings.autoDreamMinNewL1 ?? 10}`; setActivity("status.settingsSaved", "success", summary); } @@ -2521,6 +3270,40 @@ async function buildNow() { ); } +async function dreamRun() { + const ok = await showModal({ + icon: "✦", + iconClass: "icon-sync", + title: t("confirm.dream.title"), + body: t("confirm.dream.body"), + confirmText: t("confirm.dream.ok"), + }); + if (!ok) return; + setActivity("status.dreaming"); + try { + const result = await postJson("./api/dream/run"); + await refreshDashboard( + "status.dreamed", + "success", + result.reviewedL1 ?? 0, + result.rewrittenProjects ?? 0, + result.deletedProjects ?? 0, + result.profileUpdated ? 1 : 0, + result.duplicateTopicCount ?? 0, + result.conflictTopicCount ?? 0, + ); + } catch (error) { + try { + await refreshDashboard(); + } catch {} + setActivity( + "status.dreamFailed", + "danger", + error instanceof Error ? error.message : String(error), + ); + } +} + async function clearMemory() { const ok = await showModal({ icon: "⚠", @@ -2638,6 +3421,7 @@ levelTabs.addEventListener("click", async (e) => { refreshBtn.addEventListener("click", () => void refreshDashboard()); buildNowBtn.addEventListener("click", () => void buildNow()); +dreamRunBtn?.addEventListener("click", () => void dreamRun()); overviewToggleBtn.addEventListener("click", () => togglePanel("overview")); saveSettingsBtn.addEventListener("click", () => void saveSettings()); if (exportMemoryBtn) exportMemoryBtn.addEventListener("click", () => void exportMemory()); @@ -2666,13 +3450,6 @@ if (listClearBtn) if (listClearBtn) listClearBtn.style.display = "none"; void loadLevel(state.activeLevel, ""); }); -retrieveBtn.addEventListener("click", () => void runRetrieve()); -queryInput.addEventListener("keydown", (e) => { - if ((e.metaKey || e.ctrlKey) && e.key === "Enter") { - e.preventDefault(); - void runRetrieve(); - } -}); const settingsPopover = document.getElementById("settingsPopover"); const navMenuTrigger = document.getElementById("navMenuTrigger"); @@ -2718,7 +3495,6 @@ document.addEventListener("click", (e) => { } }); -if (retrieveToggleBtn) retrieveToggleBtn.addEventListener("click", () => togglePanel("retrieve")); if (detailToggleBtn) detailToggleBtn.addEventListener("click", () => togglePanel("detail")); if (reasoningModeToggle) reasoningModeToggle.addEventListener("click", (e) => { @@ -2732,7 +3508,6 @@ if (reasoningModeToggle) }); overviewCloseBtn.addEventListener("click", () => setPanel(null)); if (settingsCloseBtn) settingsCloseBtn.addEventListener("click", () => setPanel(null)); -retrieveCloseBtn.addEventListener("click", () => setPanel(null)); detailCloseBtn.addEventListener("click", () => setPanel(null)); navToggleBtn.addEventListener("click", () => setNavOpen(true)); navCloseBtn.addEventListener("click", () => setNavOpen(false)); @@ -2774,7 +3549,10 @@ boardNavTabs.addEventListener("click", (e) => { const btn = e.target instanceof Element ? e.target.closest("[data-board]") : null; if (!btn) return; const board = btn.dataset.board; - if (board && (board === "project" || board === "timeline" || board === "profile")) + if ( + board && + (board === "project" || board === "timeline" || board === "memory_trace" || board === "profile") + ) switchBoard(board); }); @@ -2815,6 +3593,15 @@ async function bootstrap() { updateActivityFromOverview(); } +window.setInterval(() => { + if (document.visibilityState !== "visible") return; + const traceVisible = + (state.viewMode === "command_center" && state.activeBoard === "memory_trace") || + (state.viewMode === "list" && state.activeLevel === "memory_trace"); + if (!traceVisible || state.caseLoading) return; + void loadCases({ silent: true, preserveScroll: true }); +}, 4000); + bootstrap().catch((err) => { console.error(err); setActivity("status.loadFail", "danger", String(err)); diff --git a/extensions/openbmb-clawxmemory/ui-source/assets/brand/logo.png b/extensions/openbmb-clawxmemory/ui-source/assets/brand/logo.png index dfd7ddb0e1531..0617d9a9da648 100644 Binary files a/extensions/openbmb-clawxmemory/ui-source/assets/brand/logo.png and b/extensions/openbmb-clawxmemory/ui-source/assets/brand/logo.png differ diff --git a/extensions/openbmb-clawxmemory/ui-source/index.html b/extensions/openbmb-clawxmemory/ui-source/index.html index e125c5ff29d6c..eed2bf0a8b18f 100644 --- a/extensions/openbmb-clawxmemory/ui-source/index.html +++ b/extensions/openbmb-clawxmemory/ui-source/index.html @@ -44,6 +44,9 @@

ClawXMemory

+ @@ -95,8 +102,25 @@

ClawXMemory

- 最大可接受时延(毫秒) - + 召回数量 + +
+ +
+ 自动索引间隔(小时) + + 0 表示关闭自动任务 +
+ +
+ 自动 Dream 间隔(小时) + + 只有新增 L1 达到门槛时,自动 Dream 才会真正执行。 +
+ +
+ 自动 Dream 最小新增 L1 +
+ 最近索引 @@ -192,6 +220,7 @@

记忆看板

+
@@ -212,7 +241,7 @@

记忆片段(L1)

0
-
+
记录详情 - -