From 2bd8ca0fbaf67366bff73abc524ff6b9f164f527 Mon Sep 17 00:00:00 2001
From: openclaw-bot
-
+
-
-
+
+
- 7 款终端 / 桌面 AI 编程助手,同口径对比:功能、安全、生态、定价。
- 从大厂旗舰到社区极客,从 CLI 到 GUI,谁才是你的最佳搭档?
-
同一套评价标准,逐项打分。绿色 = 支持,黄色 = 部分支持,红色 = 不支持。小狸(紫)vs TG-HELPER(橙)为国产双雄高亮列。
-| 对比维度 | -Claude Code | -Codex CLI | -Gemini CLI | -Aider | -Copilot CLI | -小狸 Pro-CLI | -TG HELPER | -
|---|---|---|---|---|---|---|---|
| 基础信息 | |||||||
| 首发时间 | -2025.02 | -2025.04 | -2025.06 | -2023.05 | -2025.09 | -2025 | -2025 | -
| 开源协议 | -闭源 | -Apache 2.0 | -Apache 2.0 | -Apache 2.0 | -闭源 | -MIT | -MIT | -
| 界面形态 | -CLI | -CLI | -CLI | -CLI | -CLI | -CLI + TUI + Web | -桌面 GUI (tkinter) | -
| 运行平台 | -Mac/Linux/Win | -Mac/Linux/Win | -Mac/Linux/Win | -Mac/Linux/Win | -Mac/Linux/Win | -Mac/Linux/Win | -Windows 为主 | -
| 编程语言 | -TypeScript | -TypeScript | -TypeScript | -Python | -Go | -Python | -Python | -
| 默认模型 | -Claude Sonnet 4 | -o3 / o4-mini | -Gemini 2.5 Pro | -自选(多模型) | -GPT-4.1 | -Ollama / DeepSeek | -Ollama / DeepSeek | -
| 本地模型 | -✗ | -✗ | -✗ | -✓ Ollama/vLLM | -✗ | -✓ Ollama | -✓ Ollama + GGUF | -
| ✏️ 代码编辑能力 | |||||||
| 精准替换 | -✓ | -✓ | -✓ | -✓ | -✓ | -✓ edit/multi | -✓ write_file | -
| 批量编辑 | -✓ | -◑ | -◑ | -✓ 多文件 | -◑ | -✓ multi | -◐ | -
| 语法自动检查 | -◑ Lint | -✗ | -✗ | -◑ Lint | -✗ | -✓ 编辑后自动 | -✗ | -
| 代码搜索 | -✓ Grep | -◑ | -✓ | -✓ AST | -◑ | -✓ 11 种 | -◐ grep | -
| AST 分析 | -◑ | -✗ | -◑ | -✓ tree-sitter | -✗ | -✓ | -✗ | -
| 版本控制 | |||||||
| Git 操作 | -✓ 完整 | -✓ 完整 | -✓ 完整 | -✓ 深度集成 | -✓ 基础 | -✓ 20 操作 | -✓ git_tools | -
| Smart Commit | -✓ | -◑ | -◑ | -✓ | -✗ | -✓ | -✗ | -
| Agent 能力 | |||||||
| 子 Agent / 多代理 | -✓ 子代理 | -✗ | -✗ | -✗ | -✗ | -✓ 多 Agent | -◐ 预留 | -
| 工具调用协议 | -FC 原生 | -FC 原生 | -FC 原生 | -Editor | -FC 原生 | -JSON + FC | -JSON 解析 | -
| MCP 协议 | -✓ 内建 | -◐ 实验 | -✓ | -✗ | -◐ | -◐ Skill | -◐ 适配器 | -
| 上下文压缩 | -✓ | -◑ | -✓ 1M | -✓ Repo Map | -✗ | -✓ 自动 | -✓ 自动摘要 | -
| 记忆系统 | |||||||
| 短期记忆 | -◐ | -✗ | -◐ | -✗ | -✗ | -◐ 对话历史 | -✓ 独立模块 | -
| 长期记忆 | -✓ 企业级 | -✗ | -◐ | -✗ | -✗ | -◐ 文件级 | -✓ SQLite + 向量 | -
| 反思 / 自省 | -✗ | -✗ | -✗ | -✗ | -✗ | -✗ | -✓ 后台反思线程 | -
| 全文检索 | -✗ | -✗ | -✗ | -✗ | -✗ | -✗ | -✓ FTS5 | -
| 向量检索 | -✗ | -✗ | -✗ | -✗ | -✗ | -✗ | -✓ ChromaDB | -
| 安全机制 | |||||||
| 安全模式 | -◐ 权限 | -✓ 三模式 | -✗ | -✗ | -✗ | -✓ 三模式 | -✓ 弹窗确认 | -
| AI 风险分析 | -✓ | -◐ | -✗ | -✗ | -✗ | -✓ AI 分析 | -✗ | -
| 代码沙箱 | -✓ | -✓ Docker | -✗ | -✗ | -✗ | -✓ AST+子进程 | -✗ | -
| 浏览器 & IoT & 多模态 | |||||||
| 浏览器自动化 | -✗ | -✗ | -✗ | -✗ | -✗ | -✓ 31 操作 | -✓ 22+ 反爬 | -
| 反反爬虫 | -✗ | -✗ | -✗ | -✗ | -✗ | -✗ | -✓ 随机UA/代理 | -
| 物联网 (IoT) | -✗ | -✗ | -✗ | -✗ | -✗ | -✗ | -✓ MQTT/TCP/UDP | -
| 智能家居控制 | -✗ | -✗ | -✗ | -✗ | -✗ | -✗ | -✓ 主动巡检 | -
| QQ 机器人 | -✗ | -✗ | -✗ | -✗ | -✗ | -✗ | -✓ OneBot | -
| 语音识别 | -✗ | -✗ | -✗ | -✗ | -✗ | -✓ | -✓ TTS | -
| 图像/视频分析 | -✓ | -◐ | -✓ | -◐ | -✗ | -✓ | -✓ 多模态 | -
| 多媒体编辑 | -✗ | -✗ | -✗ | -✗ | -✗ | -✗ | -✓ 图片/音频/视频 | -
| 办公自动化 | -✗ | -✗ | -✗ | -✗ | -✗ | -✗ | -✓ Excel/PDF/Word | -
| Arduino 嵌入式 | -✗ | -✗ | -✗ | -✗ | -✗ | -✗ | -✓ 全流程 | -
| 键鼠模拟 | -✗ | -✗ | -✗ | -✗ | -✗ | -✗ | -✓ pyautogui | -
| 人格 & 社交 | |||||||
| AI 人格系统 | -✗ | -✗ | -✗ | -✗ | -✗ | -✗ | -✓ 3 人格 + 群聊 | -
| 多人格互喷 | -✗ | -✗ | -✗ | -✗ | -✗ | -✗ | -✓ 热闹模式 | -
| 皮肤/主题 | -✗ | -✗ | -✗ | -✗ | -✗ | -✗ | -✓ 17 种 | -
| 界面体验 | |||||||
| CLI 模式 | -✓ | -✓ | -✓ | -✓ | -✓ | -✓ | -✗ GUI | -
| TUI 图形化 | -✗ | -✗ | -✗ | -✗ | -✗ | -✓ Textual | -✗ | -
| 桌面 GUI | -✗ | -✗ | -✗ | -✗ | -✗ | -✗ | -✓ tkinter | -
| Web UI | -✗ | -✗ | -✗ | -✗ | -✗ | -✓ 纯静态 | -◐ Flask API | -
| 插件 & 扩展 | |||||||
| 插件系统 | -✓ MCP | -◐ MCP | -✓ MCP | -✗ | -◐ | -✓ 15 插件 | -✓ V2 + 适配器 | -
| 跨平台插件兼容 | -✗ | -✗ | -✗ | -✗ | -✗ | -✗ | -✓ OpenClaw/小狸 | -
| AI 插件翻译器 | -✗ | -✗ | -✗ | -✗ | -✗ | -✗ | -✓ 一键转换 | -
| 定价 & 生态 | |||||||
| 免费使用 | -◐ 有限 | -◐ Plus | -✓ 个人 | -✓ 完全 | -◐ Free | -✓ 完全 | -✓ 完全 | -
| 国内可用性 | -◐ 需代理 | -◐ 需代理 | -◐ 需代理 | -✓ | -◐ 需代理 | -✓ 原生 | -✓ 原生 | -
| 插件/工具数 | -MCP 生态 | -MCP 生态 | -MCP 生态 | -— | -— | -15 / 141 操作 | -70+ 工具 | -
基于功能完整度、易用性、生态成熟度的综合评分(满分 10)
-没有最好的工具,只有最合适的场景。
-小狸 Pro-CLI vs TG HELPER — 同为国产开源,风格截然不同。
- -小狸和 TG-HELPER 各有所长,和国际大厂工具形成互补。
-| 能力维度 | -Claude Code | -小狸 Pro-CLI | -TG HELPER | -
|---|---|---|---|
| 核心定位 | -企业级编程 Agent | -全栈编程 CLI 助手 | -桌面级全能 AI 智能体 | -
| 最强项 | -子代理协作 + MCP 生态 | -代码编辑 + 安全沙箱 + 浏览器 | -IoT + QQ + 记忆系统 + 人格 | -
| 最弱项 | -价格高、闭源 | -生态孤立、无记忆系统 | -代码编辑弱、无沙箱 | -
| 适合场景 | -企业大型项目、复杂流程 | -日常编码、快速原型、爬虫 | -智能家居、社交机器人、办公自动化 | -
| 学习曲线 | -中等 | -低 | -中等 | -
| 社区活跃度 | -高(Anthropic 官方) | -低(个人项目) | -低(个人项目) | -
| 互补关系 | -— | -小狸补编码能力 → TG 补 IoT/社交 | -TG 补 IoT/社交 → 小狸补编码能力 | -
Claude Code 是当前综合最强的 CLI 编程助手,子代理 + MCP + 企业级安全,但价格不菲且闭源。
-Aider 是开源社区的标杆,Git 深度集成 + 多模型支持,极客首选。
-Gemini CLI 靠免费 + 1M 上下文杀出一条路,适合预算有限的个人开发者。
-小狸 Pro-CLI 是"编码特化型" — 一个人做出了大厂级的代码编辑和安全能力,三界面切换、浏览器自动化在同类工具中独一无二。适合以编码为核心的开发者。
-TG HELPER 是"桌面全能型" — 功能广度碾压所有竞品,IoT 控制、QQ 机器人、人格系统、记忆系统、Arduino 全流程这些特性在 AI 助手领域前无古人。适合想要一个"真正的生活/工作管家"的用户。
-- 彩蛋:TG HELPER 已经内置了小狸和 OpenClaw 的插件适配器,理论上可以互相导入插件。国产 AI 工具生态正在形成自己的联盟。 -
-新增自动语法检查 · Diff 弹窗 · Web UI 后,与同类产品的实力对比
- -v5.1.2 新增 3 大功能,补齐了编辑后自动验证和可视化界面的短板。
- -编辑操作完成后自动触发,覆盖 11 种语言:Python (ast.parse + py_compile 双重验证)、JavaScript、TypeScript、JSON、YAML、TOML、HTML/XML、CSS、Shell (bash -n)、SQL。通过显示 ✓,失败显示精确的行号/列号/错误描述。AI 也可主动调用 syntax_check。
每次编辑后自动弹出新终端窗口,显示修改前/后的完整内容(带行号)、unified diff 差异、+N/-M 行数统计。兼容 Windows (cmd) / macOS (Terminal) / Linux (gnome-terminal 等 6 种)。异步不阻塞,diff_popup on/off 一键开关。
纯静态 HTML 界面,零依赖、零后端,浏览器直接打开。三栏布局:左侧文件树、中间对话/编辑器(Tab 切换)、右侧状态面板。暗色主题、动画效果、快捷芯片、行号编辑器、Ctrl+S 保存。
-v5.1.2 新增功能后,小狸在语法验证和界面维度补齐了关键差距。绿色高亮 = 本次新增优势。
- -| 维度 | 小狸 v5.1.2 | Claude Code | OpenClaw | Aider | Cursor |
|---|---|---|---|---|---|
| 开源 | ✅ MIT | ❌ | ✅ | ✅ Apache | ❌ |
| 本地模型 | ✅ Ollama 原生 | ❌ | ⚠️ 有限 | ⚠️ 需配置 | ❌ |
| 代码编辑 | ✅ 24 操作 | ✅ | ✅ | ✅ | ✅ |
| 自动语法检查 | ✅ 11 语言 · 自动+主动 | ❌ | ❌ | ❌ | ⚠️ 有限 |
| Diff 弹窗 | ✅ 自动弹窗 · 可开关 | ❌ | ❌ | ❌ | ⚠️ 内置 diff |
| Web UI | ✅ 纯静态 HTML | ❌ | ⚠️ Canvas | ❌ | ✅ GUI IDE |
| Git 集成 | ✅ 20 操作 | ✅ | ✅ GitHub | ✅ | ✅ |
| 浏览器自动化 | ✅ 31 操作 | ❌ | ✅ | ❌ | ❌ |
| 子 Agent | ✅ 多 Agent 并行 | ❌ | ✅ 强大 | ❌ | ❌ |
| 安全沙箱 | ✅ AST+子进程+三模式 | ⚠️ 权限 | ✅ 多层 | ⚠️ 基础 | ⚠️ 沙箱 |
| 持久化记忆 | ✅ MEMORY+日记+检索 | ⚠️ CLAUDE.md | ✅ 完整 | ⚠️ 有限 | ⚠️ 有限 |
| TUI 界面 | ✅ Textual 动画 | ❌ 纯 CLI | ⚠️ | ❌ | ✅ GUI |
| 工程化工具 | ✅ lint/format/test/build | ⚠️ | ⚠️ | ⚠️ | ✅ |
| 语音识别 | ✅ STT | ❌ | ⚠️ TTS | ❌ | ❌ |
| 远程控制 | ✅ Clawli+WebSocket | ❌ | ✅ 多渠道 | ❌ | ❌ |
| 测试覆盖 | ✅ 113 用例 | ❌ | ⚠️ | ✅ | ❌ |
| 中文原生 | ✅ | ⚠️ | ✅ | ⚠️ | ⚠️ |
| 价格 | 免费 | $20/月 | 免费 | $20/月 | $20/月 |
满分 10 分,基于代码审查和功能实测。
- -这三项功能在同类产品中均无直接竞品。
- -Claude Code:不做语法检查,依赖模型自身判断。
- Aider:不做语法检查。
- Cursor:有 lint 集成但非自动触发。
- 小狸:编辑后 自动 触发,11 种语言,AST 级精确错误定位。AI 修改代码后立刻知道对不对,不用等运行时才发现。这是编程 CLI 赛道的首创。
Claude Code:终端内显示 diff 文本。
- Aider:终端内显示 diff。
- Cursor:IDE 内置 diff 视图。
- 小狸:每次编辑后 弹出独立窗口,完整显示修改前后内容 + 行号 + unified diff + 统计。不挤在终端里,一目了然。diff_popup off 一键关闭。
Claude Code:纯 CLI,无 UI。
- Aider:纯 CLI,无 UI。
- OpenClaw:Canvas 组件,非完整 UI。
- 小狸:纯静态 HTML 文件,双击打开。暗色主题三栏布局,对话 + 编辑器 + 文件树 + 状态面板。不需要 npm、不需要 Flask、不需要任何后端。
功能维度:能。16 插件 142 操作 + 自动语法检查 + Diff 弹窗 + 三模式界面,功能广度已经超过 Claude Code 和 Aider,在语法验证维度甚至领先全行业。
-体验维度:接近。Web UI 补齐了可视化短板,TUI 动画体验独特。但底层模型能力差距决定了对话质量和代码生成精度仍有代差。
-生态维度:差距大。社区、插件市场、贡献者体系是最大的结构性劣势。功能做得再好,一个人扛不住长期迭代。
-一句话:功能够打,体验能看,生态要追。v5.1.2 是一次关键的能力补齐。
-L zRa;IlOT)g*u(h=6{NH3vzGG7QEkHVl}BEYE;*{M>=}k{$8?|l{BpR_CRkB zOZ8u_M21_C?y&Is|Cb>Y&=-1-1;T`81j2j;MuD^_=Ma>;2gWl9?G}Xk-^E)bIE8^B z=obkeQzB>xi{ueu^?^vz?aBVGGv1$<32k&hXn{!zWVBdbcRA)8W#9*Xo xEdbhqgbrjvJ15-)^r4+%qZ zIx@CKBvX|CJm$!wmw(jih`T3+Ps(Tx17M_iNopT=FwCsK@WIrGX`o4e@A#5A(q -Zso^Qx2`UWS=(*oV?|VEV*^Xb=nQ`8d35(3)##j0%jXgL{x31~{6|Wo z|CjM2zn4fM0omTHn9!Y#pi35xOpJjG4i2~g-##KR{E-bH=s$1htr#A@Q$9|?VKK^; z7&+pD1hwN s)@+L @= $_6LqbH z3B1~Ja|^6-MHxVXkWkDrb0{O>(A DWWZAndQThqx-ch7AG!PDthvf doPL=*6^bg64d z5}m`;OU_WjX&VI4niJ?jQ!eO&yn|jY$uBETE+1s5du%NwP>DGN<_S$;O7#I84#-?q z%+NcNL-VZ+d|{v4`MORN `tpv3`M+*rLoz*< z(S*=@u2;2~Zb?Q-MFNU3Tqxp3;V7-7Y;7>VYvE_zPyPg@@(a$AX&K3|DLX`!OfVnR>YaM<;`XqJ`JvQ)~?#K zDevoG8_@5|(f-9wI&|F>?z W4ZHXNB;&cXc5H!yD^bne)?)s8(7UGPeoOt%Uv@h7*Q|*7IfHfxp?o zj)&F_T|`R(+_?;S{F5~0Dm+G|vGsw>ICUPWyE?uTwaK<@nQV4G@M;QtZ$6Ej-^ $f2 z$(;-d-p$IE{r%xw*G>2-lJ~K{U=PY}axd6iTO%DOrHee^s9K$isc=#jWn^%ueR~<7 z8xZ&3C?{1#yTS~guEd;lkOV3$AQUH)9rKbDv5FA$qI0Y4*fQ?iOK2s#N|iBHc^RLb z%eb{tS`)D_LlF^IoUubqsb&JAe|Hyq_Sd`#(b>d*&w5>BSr5e8B)Z g zl<8q@QfI+H(MU}T>h53aA$}X(AE;~z-^a|r7N4%oMkT$_XqNN*{ZG3$2GDpFuGe)L zogMNWQ@T!GqVem;eS0uj=! Oj@)~s9afCAEnu-3QPz`8I-jzwkSPmpN+kizK^)iANh*%Ys^?Q?Y_Lk z-4o*wkDHr6IA*HH3&I>j*brJTR&nQsyYlD8uz&iU{Qf=g1%6el0bglEWsqA(HEY3H zK3b;)f0PsuSwd`_x1}mliy$S&r{2)S?4j&f%E25=V;6-!*9VVgxsN-21L{5vxeDKj zR &~~2DcdPkl(40-=dVdK^t@A` zKzQkLQ}fED17+aH^56c()EiBHyd!Q!Vla(2E<(qsTEz%Dk%*!5#%C#m3){s6Odt*9 z0=$;mh9d%EnM^~vA>jZ5ep6%KM*13s8TQbM`V{ILH_HO=GP`h-a7_x^2ovQ}FB_!; zAdTQWQQ>_=ppMpiNDylji(Nbz^s@A_>*U%n);MN=2;W32>OvS8Dqai=TAfVq*Z=kZ zQ1(wjx<*^KCYrWw+r~`WcIHgmwyl}AZQHhO+qNs$IdxJ0ioJJKU5xAg#rMXD(a~Ce zZnOW`oY=L}Dia+OW+ibQiY5JkKfn2OMF35i{4x=qDUOs b0th`2*)G5=}x( zl0*vY#EYI4%tGH*|4CdIhFBBKlC)m #8=E>{+Soes|C} z!HuCMdBAAHwmTRLdLpAgAwLkRo%y?H&g(i;pC~#?safvFA5>m~2iHme-K0>HUKniN z@ojHIJDDJ5x8Q3O*j7@gFqlXPzL`CmJunaLYw(IE-Jw)jr2a?MY{6Q?yogU*%(gG0 z7OjagbJTYXSS$^yV$mU}4?pI|>_g_G6L?L`yHSd57bW+*bM|gbsdp}2Yi+JA&Q(;b zk1t!8qv?m{Lpcz_9y-8_nmgI{ZE5i(M%TXIMx71+v|O*`R7)jLe)&r2c>!&(I4iTz zA5i WD=YLC7SPD9cBmdasBpSE8)Dd(Bk*jJwbkC7-2Ir8$e(^zQ56c>s z%mP-gufu=|X>D|Qo~p#uO_&K@70W8s s6 zDS_yjq7E;2&{Qekc)2Oa@rGQaP(kn(zQ+`g`Kx-jf$P9qLGrbkN)l*fdEiJJK ?TB8FlPWcdNoBS7K%qs4$Nv$tFT^*mW3(%`JEPZm~0YWzw3)Pyaaaj_-i_Dbp zVuf+-3Nk@BQTSy3oWw`#r(Q2Z@hDpadOk{CuRm7>-N; zVJbxv>eIP)L3bsts2yAAgb$ML;2Z$-r)!6$boz6?zb_0yHlOUt( M%s$Mzv4U_Q z(s`&u_Dp;NbCJUqH>o9fJqCGc+-`G+Naz+RmT4v&H0)qxFVF5hWpqxdzfiilQLxq2 zfklx*MBGEIru6xj^ ZMLGfqXGCW=4u-^Sc=~x`Z zMRG=-m@C`6iV_+bD~h1ju1!bPD(El&KmpS;MsC<#(jKw+35+ls#`CRQBZev0j^m3r zxO&^!z)2Ni;BPxxXk*xy+9+Y)O?Pe)_8s#`=Pl|+l?t8))?&`rzE{HIUXi3x^pvYs zB+h{}CQV-c!5)jSWYCJ2(HggJ|l-aXxqQCpfsWJ#WsB94sB;NiL_1;WDSdc@nPyc9wEocTwS7W43G8V6n zus3o(v>;1(_wN#a51Z!sj47{r%XUOMT|ac3s0Ka6nvFkKNH{JvG;YQf+()R~`L5%D zYWbGZZsx8W6v_i) XktB5LL HCr=AgwU8%`F@Z!CF@TY*8+=K2g;J~#Iyek1D+OuAkcHdClo9GneCFu6I`;N52 zX$e<)Zhl`W=a8g$I1%@wBwheR`3=ooGe{oCXxaz}AC|51!%ZX_(RGC+t+q`WA}b*B z_1US@X>xklF%kPx>NbIR;onM3K4xUG7>!vry-~!S_5nJuu&~7H?%cSAV*8sR@1oiD zue6m6WFsGx(HK}Y6%`q5xNW9JbI?^%04hP0EjTn37t~Ib$M>Zbp@4yeu#!VD0DPme zkh(MW)rN5tfjZYhVuW%$zg;0$r5S}BnPw@v8^c1hm@)HsHSoV~#ls_rl_Z!x7o3eP z6g^6QeA+ $%;5)e1M6d NqaA@ht5HT(fse9)!TPR^bcr_&4 -?ODC?{EWd2dgv0$7i3|w_FS0{}LEE1zP~rR{0#1fU4fz+w`WtWU8ub5(N8^=JL(*dZpy!R&yQAE{2m7OCB}~}tRfg_MC8IUjG3c^ z?3;7&-$p1PEZib}o7vA?m{>e%#^EV{Ywa?{gFuitfO@JyQ>;LNlUn^#zdKZNSxcLi zTX<@4c5r+Zz|I2<{Y#P;M(e$$x&4RKK3!5T*?YR<=@i#wv8lug+oj}e^ruj1*ASzO zySzHE^AxSSe>&`1JAg?jz4ntwmivL@jGQcQQBwa1*HoTC8YI9s40>}eG5bQP&MP5I z7#@ZKe~AaL995*3fi3IBO7jsrnW**U7 CJ4zx RKpE~O0tNO&y#N9H{myXzZJGf{2K9jg&=50whdc9~Um0EE=M#_c z%@a|N-eXBmvW*c#^{OHMz~;=}RJ>;27k^^7P^Xa6`ntAnE?icP%^IKQvY>4awlP${ z0cdqHS^t3k&jfR^o$qxF;5Whib+!EOz*^3x<~EMH|F^rv&fPgyzyj#k#PyPG(CgTG z>f~#xxlx|i0cOb7bPp6DHcAz?D=?S@5x*f!+7gx^0<_g$Ci3O+`D3ZB4Y#o|a@M}( zofWflld*B)!vK($0>G++EZr!>T5i;&^L@p2qOqZe7M5mYDtiaD0eLdNx-&8vTP78O zi!z-uTXWAKd?gahS-45Y1UXtpAh9PL%Q D>NY-_K!+#jfW<%Q7788o(BzY3r0 zsCA^;ZfUf0we_0IhItt{STXppYZkJ~lGcr4(eD4s6{P@IQ7n6HjSmSj$0G%_BNW?& zM-aa^uQaE-2N3eAI;Nn=FJ`R)d>cz!xE?ZEoVvqxMoB5(0m@%P8}Jvdljxw1RL~5G zzEF~nUvz=JSNVXvt4jl`57PIO9=ZFZa=@v8fMM;cC2G6@ly(CXneiS@OPiDqDwAUa zxuuLByRcB6l!#0U4b3>v*S)+ldPjMZ@gGYhx^+^o;CyltU?aOIHfEOPK}{FkQy`>h z4Oyxs6`rZnvA+E5tVvYqiul4{>hTKIo2f}nOQZ4#DKBa?wm07sV61Qt0*g)g7XYcD z0a=TY3Jl8JUn)ap?}rhHiix?hsuH$Em0#JIS!B{gGfKM|sWs_DE#haF)>{9UX}Oi% zb)z<-2ZZksrH>$3Yi|0bc|g_IqmG^pJbw*(#|v?)d-clrHR;sW#85dKcW7-AYX9W` z*$Ky3Mklm*tPLC2{(Jve^}sNxCbehlH9HAcm@<#7j1a0#uGXm-Nu+id!P%>&QJ5i} z$C>r@eAmpw1x=~Q74O9`Mx0I#d?F!GcJ;H_%@uDkK_LoN8`lO2P}vxQWLG^I*YfVs zgRBH_aO7dEPhwJiMjXqbvXhlrP#xBLIF@SWT_XGQC3-leWN+eUmjWq)Iq@YnYywj~ z6lKEo+Y)}ECTD1)%J+tF=|POm=f6lr>@ah#V!!t{{r3?4-eos)eOoJY+Ft@7tqUt1 zBOMdHgR#A{xr4E_v5k}Ce-@biVufY<`7wfD9#9fmZIlpgBV7(620?!nr$Sk~gU!tI zL@uyckOr2WG@ZKYwL}<(f(U0547loVP%dWZHZwn2H!~W3o%mtP0BF?8YpXQ9W3Tq_ z&J&?(dVsR|csGsiZiLrZpPxaYS37fShvY~r+M^JGohzB$CHBZ9UY|_63OuX;37U-o zRz|1k>1t{K#;XE@v*;=^OZ=ets&yA_A=yffmJ 6_kHGzcahEfsRw+qJAiwU7;ARyYCeMxV 9JU(T&vnoK_*?uR%Y;Jss{C@r#A_EVl?}-)+l(Zh<`I)1-7HM> zSrgI+hGsxRh}c_6AV|m{kPIhC48C1o^ONa+d{4T+m3kX9o>F^7b#RdPjr*44%v+Y@ z469&_#q!?-uL_gEm+tR)j4fzO $UXk)$pdw!ixQMiAdv74X^@lmBuz*tSJ?ut`jHF@%*`J6tjxd2(3ayLOUm@ zJc5(=#7J!=6=m2jM43Ts7f#Qt@h}r*IMtd-Okw>hl<89!xkMN+4#+n?5@x1Le{~Qv zCrBIKH#PK!VaC!5 +yP;TTjht0(W{ONl=O`d@M#&$eJy=Rt}{B-pAGwWJOI-PB9)b zwxY1Yq+iKf*2~6o^1LcE+rBO(N|MEqf*j=^br~$3FV6{%>@@1+iBwl8J+yCX?15P- z3X)~RBV^&LL&K7E2~9qE)YJ<2q`Qm%Q;p2-Zge?!@lK&njcM_`h-~yC8Z<%<@5Zov zSpDmE*1l7Ox(+HfT(Meo^amVbL6MBUhz{9<7U}RB7jr72NzHls-EWuu-fwow(Xj(W z_j0(dt(hP16%XX?WS(yq5~Q;j1nAJCrVFf{7r^E<5TRBIJl4p?FeG{BQHSPnS@&l? zjlG5Hb*obOYPjspMv(*7*rN(8?Qfz6B>?(i!`$|jjI*Z}=*JRBWa2#~CjNLVAYe5; zuFYeU##)2xu|UsUWjZ|+0tWw#H(}+T#okB|brbOUfHybg}wqPIuvu(!(93o#E=N zYl5ihLCSQ k6oXM+As9S%E>10Xd zXka>n>G8Iv?eXPs;~b~MrYcy2`2(tUYF-n*`N5 w=NIHCsDd2w@-`) oH2UuA9c16N^wfxQ!h@L=*YA3YE8bGG)!I%xxJ;K#wk+r~ EDjaz~y``5MVhE{b}qAASnyI3lyeJl-dI# ooZYXvXsVYl!!=S{oxJ84D$_DXS`)^}Bp6bs zMk$vWHrvO_EFwiM(FtW W4)qRWmKFX(w_F0)7+f}4(PQ5=d`trlPz zSQQa+gdVLzuxOEBkP;aL6?7?UYAQYvSnN40YxzZ#0{g*AVd{fz6FhG>^6-hAV1lG0 z!}hX@Ay3G1P|ZXpnVPuAZGKE__4wSC)bzadbBc {t&a z`A6yv!<|Zq|4<>MoS#JXN#>`R9s4Lh5|%TKl9%`R^G9|L6CpPpi`YKuBlB8S1O6~i z+|)O=3uRdcyIQ|gt$e Vn&V>L1rYdAZPq)l-jYfLZ)HRSul5q@7Jqilfh5hVlYtzYw}XF z6E{uFSY0QDO{J^S118WcmbAoS#0;xKt^xwNtQ0X*_;HdlPQ9GkJkvy=oQ=c2oQ @kj9ZvJ18KR57^?=Xl-|UR5ELqXAYb#}xl^R&ssw%Q8FSZ= zkV8hwEMRcKZ+%4V;;eur?enWn^t^aQ17Z@CCFZ`&a*j29nd~{m478HU1M3o~V#UMs zRzZ9B&7drH1mD%MR4!)m$_a#`IjhWxdURRBLIM37$PPm{!EieOgk d< pb;8(Q)x69`Ld zWgz!qNi$7FCiQBZT_@++24sE(H$6=2QE7i&7|nOP0E%tXJ7vWFDCn4|C~a*yWsSgR z^H`{xaP${ia{at6d-JfR?S}PGQB&9ebV8>xwN(C6(GWy55@5k9mo;v$>!5TR<5r$2 zA_5wouejwC!11am^OccX!L^)$Lp=$^Vf53RLET%C(w)FCu`y@X9B~*@#n@KgPyRtC zRT-(k#tmGvtTZ3Qk@VGOdNjh-$(LIXb#4wbm&HFi7GlI-kI!WwITBQrzIplk7 zo+dW@;KDRjglVn5L>KE_X`Wwqk<32(!xCk^?`Xn_j>~8>XUyoro(&ry0YK)59wsNC ztV!D@N3rFM+5-w=41lGt?*R^aaYnLJi#lr3ggPn=EP$<3WmzEqgg&~-1D8;7NVJjV zqTs#Ew(SyY%0HN#I XDg1wMaqO69Pjpln >&Ndm!($f#bu0)9=wPPt>crX~B3?y$Ap?y5wup!}ArCrsQlI%Dn=Cfi z83^ma-)y>kI_mQo&z4bbbwd)h^*PR5&@=)THM0i%8X>VA`nOt1DOeuF*k8?&8DL7) zGwa$Wm-quU<0-6T!HVt!5&6I*4dI~KM_tT^PFj!LWSUOsC^+YNnzyRjK CUh z>sckcturn=hzR)UKx-p&Z(H4mao1eEv*YD(^j5WWML%Q1`{i{py|y=0(|n_|-Tu~h zJAeNCF;i}cn(IOH_i{u+bYJ;X66o&22up0=)rAQ1Qx=0Z4Dh)IeR{&5;tKrA3dT%_ z N8;l1ILpV?bkP)_L&8&G5 z{MR-(=YuvJw^I?9#xP}Zn4*vUEh{3$dM^vYY-nhR!sxys=aow&Zj$ouA9`9I#Rvp1 zPTcd}u@@Ce(Ea&*6WU^H!~2~r9lM8ra|q8jO3zJVi_7N`gkzfnf#!{ZOZSJ@^Kv$h zeT<|Gz?UBmo5#t><$dbRkON0lqZWb0>T{GU6uw@6)kWtY9=C^+iN`qv+{}nQ{Vg#Y zuk+>VVh6`Ld3ev@a5SEm<$II{&c746fJOm-!y2hFd$ck_ab8ka>8pPuUSG$@uIQlX zi2Q62cKkc BtUMzeN1HZ$9~*X8 zH5oBEr541Ol@Q%``V{&r#+<^81V5;|2+if_NM$+Co`Jc=fmB3@)QN sJIaX~(I(fH_4q zB7S%1sY$tSbwdL2gW>t2shJCE#=Jr$mQZ@9Z_lmnjqSVG`$p#Vz 1LXGQPvks~?FA1&qBx^{X%>CJVUG$w6n(7E!k}sPPxKDR(=pBi>u+tz{ z0%-DutoP&8CEE`P!HM}TnE_F#jD-RrUiL7zk#wSX*s|AqHPL#22u8aSnzsS(ptP6M z+PdzEx?dpN5(qN5`!-ls SNDrRG)EEihUB2_j3>XE4X`Wl z1uU>%2A<^@Hz@rNi;gstxz?Ybja*}8UcfO=`mE2mG&irSti`0Ln<|VDuGYZ~F^bGF zp%eIQ{*L1Nj>SKo=<06!*gcQHPWhOjpoi;2&(9(3JI^W#Mr y?0vVyI zr`NCi8faQ0KT142Gfke}3S2>xL_ZXMsvgoQLDb@K`p6TY4~FO;fF1vVl7-a*tfv|7 z8l+*SeXL-*HBvE!hnxy1As=yuT#Xq|(p3#F{&x2>--I547#P&O<4xcl%*yhE)JtfE zX-l;)Tc_RCkWi2cR8kg5#@E!y4nS~(FeI_4R)|>CyR`z<26;7}NuR;F%GCleOE6{m zPRx32iXsTB;FCV^MJKxmz(G xVU37z#Cf zf}=$Q{a T52br|6e{-TW71UvNz16avwC}2^lv(lHYm)G}2TpKglN51VbQH~y0eGTaDb#Xs? z^$xCiIuZY_5dddco)nmYCTl0B6##>&lIcZX0%S@dLAprwU{lkx^XIY~kwP#-bT)Z| ziwUnq&PPo229=ofy3mC?sGZbOjAPcf&dJJY7B}pD$C&T0WmB6C#a}hYLyGPbrb+^^ zq%R%=lXbt$F2)D;hL-lKB0czGBnIWy$!XFSbSkQmSvC3wwKT%bMgO5II7@?H=tBkS zFzPy^(N}Ye+uf8GF)H+dfVuQNIvt`xNGU1t6PNDmD^->%5Ok%o&4*lx{j7fPeJ&5( zgj}SA KXx&20rrv}JlTt_FN74* z|9j1nhAg@dt3MF$tm3OVnXx(DR8VO~<0_UetnCek5Js(-$fZ`RE}KuUOdZVcMdspc zrDUO*Z!z98Lo}@l^NReWP?!N5{Uy?NQWGzcrLS7Dr_QHJv*hNEB&mTz1>Kgl<7}dI zUZ-W581DCG_ABMY7u%88Q`4mJ7OV=nq9VZ0=aL%r^91W8o{_d+XFi%qS5OW`mmW5r zX3(5n7A!)zjg2OF2JDgReF-c^&(+9A!`ELA&M1^qp0(3rLmQTUou5W@&6UK(ndww# zxI{#U5id_K4-N)hIF*6=o*n0|sIGDb$~Z=2B1OXuXb^)}HW2NRj}3mKZz|C~A9hax z!$x~nN1wUwT!K+8wbx6|HpJkVwW3GIHnlW$r|W(jUF?H;hqv0!6Vvcs3B>m{(>g7j zvqp0IQmH%0Xpvgc{{wogj}SjM??E@&ezhe^QKSs@#uB!xN-(6N!yDsh?KpIL*Nv1V zYx(Ri*>Jt#>-osCq^^syNgf;m(9MH_!cBOe_SC&kZ*KgHh9G0yWKY>V&@73~Pf&na z2BcPnxX!#zjM;AvHOHcBIk{%hZ%VJ}=HtzyyETf>(ZsNgA=Z|sop|cm`0LMm+7I&t zwJ_R63}D8~b!G0IB{XUvTxo|da61KuHc+VB;jQmEL`fMBdXPm-u7J3FiG**i_8zTF zEkTm$5k0mnylO^6tutAX!IN5(Ml?PdpWHHPch{^H_wF@U#>%q1ww1ojL59l(`yc=W zYR!~3_uKrYWFr6VsVL%a@$TM4$8N%7fltR})Y1Gc#J>$G6GqgDa;i3K(A22z1q%lQ zuej{rsn|hBv_1I+5>1s1Jo%o5C7Dyx`DHH>sXFT#`xKYarBYk-S#-3otiR!BY$M~+ zO9r;}RN&3mGtUUd6f=~y?bzc4{LWqREa5B|6u*|rw;&b&z=QoU29rv)A2IMj)~7iv zXbsbmX;rO{gfb+=rrG$XYlva_N %WSzR+J!$##R+Da<)mEHa08S)AJejc?c|bY zQP@(^yH4QfE{o>gh|7=??xE15wyIw$?eI|L(Zynn6Mnie&_}fRjL*tjNYaL*%?C*| zZKcV=|1;9I<;Ok7Z6f|V$s&*joH|5~aY0j~^wFSa;2fnX>zCimuDZdo+CB@Nyw#*y zJJRQ&X35Tm?|XG>KYLXRhRg%k&c4C{Lrs_=^RVm>899JP(-q#Rf41j@;;gS$V5&&z z6m 6^EvlfW=mHw^;ads0Q{}RVhA44()ip=5@QTy0bxredjM6 zxSewZ&vx(lBHYK@>C65zQNnig1%TalUvTtJ0PX3FW4$*rNNbVQ)q2&i+^{GSl_&w3 zGt|m_3d*L#HqCH=hxc8Va$wdawo&>>)-|;3ewhP%gV1-|;5iVvW0~W#(JiF2JM=)# zD0@fWG&hI_{0YZ-q_upgoH{RS>#l-We5RM(@8;JuOtG5 w~cc0Tzm9p3W*IAi14>S;|T z6{EJiwDewj+240bEoFg|nYV`e4Rck^Z^l76SoQAOR{mE{Qdc7dTj#V?U(g5ZE |_PSacuHU*S i!mXD*wMR7)r?R7>wLlA*>KE zg^W%eOG cms4@Ej3QWg{rchPH2uujKdihqOW~JsyexYe9Oj6>4|8iPT zPu8%*|2i%1kN^P4{!ib*(ALOU*U?G;cOq%$UZtjGyD5y~^E**bhgyTfZYbjyOl}t3 zC(}W&m{@QzZo9BI*l$AjY?f)%qzo2Jq_755P)>phLr{ra1P}~pHs9;vcVTzmr?;Da zW$U)WqWY}mO0k{xI{Cw#I6vI?{nBt#J^9?jv$;WfqN+VZ97%GGcg36T-GvSe=jvL_ z?)&X|F#cFE75KH2%i~$QluOWi1s@QbKw!b4KTD1n5%w6VIw;OWTF7?L(?Eme!F|?g z8myXQkH#jk%-zGQ7bRM7qM;zH18?OLt;LOGr}Akb8rTc2HL+N-fgOs^H&qIJGq#Wc z4v#-+qnlL%(Cpjg+Sta^(G5ACOD9-Ag=3IjedDm8Onl5a7X2zR00^xjGjrVJ1r^&4 zFB!|0$3tKvI+}?F$QJ35$F*y-OI&SnS}=wE!`()kF!^d4bntxnZRn2BNO9#H9;{G5 z6TdyLRb*~CsuqA?`eDOIA>&}l8Biu`V6-mXW J5awdo(ZvP ieP~bB+2LceaUsxt*uSa zRv-g^L)Hf(fDAsncf%+1-KyE3Fv^Pq1mEG!i&NiUx$Fg(g|lLK+`A8O_v6~MubzI% z{pbB~{c-#H5E5i{`tVxJNC1BklX2mSb|O+e%Wfn9$405nC;NVjJ8c!~0+th*ah3!c zx+0~@j&pu=AG3|@urJOX1BhYxeBxh4{R!lfdA3LWo1|q#GAW~JRUEA|?moDBmlHtM zsSQX*>6)nG;BYdc0(G2ffqu zCK2fb!hR^$@*bm)mWA%7^X4P$o+H4sFka2 zeai92^4AzWJ9& 1mG~1B?0ZAK8FbhobcmgIup?g0qync-2I92n%i&5$JG#RV|=sXj;RlzSGlPAHL z0y8F?4m=9I?VRKs>0o59fFoiN-IoqU5-9jm&V03@{HPzroa#3kU8pAMtHD&~y8WW> zF}??XOMyvQV1PL0