From 18b2c0400639adb739a970ec2d1bc4ee5400c00c Mon Sep 17 00:00:00 2001 From: nyoungo Date: Wed, 7 Oct 2026 15:42:52 +0800 Subject: [PATCH] initial import - Go service bridging deepseek.de/es/fr V4 models behind an OpenAI-compatible API - /v1/chat/completions, /v1/responses, /v1/messages (Anthropic) with tool calling - web admin console: dashboard, models/sites, keys, proxies, Turnstile, playground, live logs - Turnstile solvers: solver API / local browser via CDP / manual cookie import - MIT license, README with screenshots, Dockerfile and Makefile --- .dockerignore | 6 + .gitignore | 7 + Dockerfile | 22 + LICENSE | 21 + Makefile | 43 ++ README.md | 366 +++++++++- cmd/dsfree2api/main.go | 159 ++++ config.example.toml | 137 ++++ docker-compose.yml | 23 + docs/screenshots/dashboard.png | Bin 0 -> 274768 bytes docs/screenshots/logs.png | Bin 0 -> 221354 bytes docs/screenshots/playground.png | Bin 0 -> 180308 bytes docs/screenshots/turnstile.png | Bin 0 -> 272742 bytes go.mod | 26 + go.sum | 52 ++ internal/admin/actions.go | 596 +++++++++++++++ internal/admin/logs.go | 101 +++ internal/admin/server.go | 278 +++++++ internal/admin/web/app.js | 777 ++++++++++++++++++++ internal/admin/web/index.html | 58 ++ internal/admin/web/style.css | 125 ++++ internal/anthropic/convert.go | 213 ++++++ internal/anthropic/convert_test.go | 157 ++++ internal/anthropic/types.go | 105 +++ internal/api/api_test.go | 236 ++++++ internal/api/chat.go | 413 +++++++++++ internal/api/messages.go | 289 ++++++++ internal/api/ratelimit.go | 39 + internal/api/responses.go | 326 +++++++++ internal/api/server.go | 240 ++++++ internal/config/config.go | 525 +++++++++++++ internal/config/config_test.go | 236 ++++++ internal/httpx/client.go | 259 +++++++ internal/logbuf/logbuf.go | 238 ++++++ internal/metrics/metrics.go | 399 ++++++++++ internal/openai/prompt.go | 292 ++++++++ internal/openai/prompt_test.go | 185 +++++ internal/openai/toolcalls.go | 117 +++ internal/openai/types.go | 210 ++++++ internal/turnstile/browser.go | 1098 ++++++++++++++++++++++++++++ internal/turnstile/browser_test.go | 898 +++++++++++++++++++++++ internal/turnstile/cdp.go | 230 ++++++ internal/turnstile/probe_test.go | 139 ++++ internal/turnstile/solver.go | 527 +++++++++++++ internal/turnstile/solver_test.go | 194 +++++ internal/upstream/client.go | 868 ++++++++++++++++++++++ internal/upstream/client_test.go | 270 +++++++ internal/upstream/errors.go | 169 +++++ internal/upstream/serveinfo.go | 32 + internal/upstream/sse.go | 182 +++++ 50 files changed, 11882 insertions(+), 1 deletion(-) create mode 100644 .dockerignore create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 cmd/dsfree2api/main.go create mode 100644 config.example.toml create mode 100644 docker-compose.yml create mode 100644 docs/screenshots/dashboard.png create mode 100644 docs/screenshots/logs.png create mode 100644 docs/screenshots/playground.png create mode 100644 docs/screenshots/turnstile.png create mode 100644 go.mod create mode 100644 go.sum create mode 100644 internal/admin/actions.go create mode 100644 internal/admin/logs.go create mode 100644 internal/admin/server.go create mode 100644 internal/admin/web/app.js create mode 100644 internal/admin/web/index.html create mode 100644 internal/admin/web/style.css create mode 100644 internal/anthropic/convert.go create mode 100644 internal/anthropic/convert_test.go create mode 100644 internal/anthropic/types.go create mode 100644 internal/api/api_test.go create mode 100644 internal/api/chat.go create mode 100644 internal/api/messages.go create mode 100644 internal/api/ratelimit.go create mode 100644 internal/api/responses.go create mode 100644 internal/api/server.go create mode 100644 internal/config/config.go create mode 100644 internal/config/config_test.go create mode 100644 internal/httpx/client.go create mode 100644 internal/logbuf/logbuf.go create mode 100644 internal/metrics/metrics.go create mode 100644 internal/openai/prompt.go create mode 100644 internal/openai/prompt_test.go create mode 100644 internal/openai/toolcalls.go create mode 100644 internal/openai/types.go create mode 100644 internal/turnstile/browser.go create mode 100644 internal/turnstile/browser_test.go create mode 100644 internal/turnstile/cdp.go create mode 100644 internal/turnstile/probe_test.go create mode 100644 internal/turnstile/solver.go create mode 100644 internal/turnstile/solver_test.go create mode 100644 internal/upstream/client.go create mode 100644 internal/upstream/client_test.go create mode 100644 internal/upstream/errors.go create mode 100644 internal/upstream/serveinfo.go create mode 100644 internal/upstream/sse.go diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..cb32d74 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ +.git +bin/ +data/ +*.log +*.exe +config.toml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e07dd3c --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +bin/ +data/ +*.log +*.exe +config.toml +config.toml.bak +.freebuff/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..435bdcb --- /dev/null +++ b/Dockerfile @@ -0,0 +1,22 @@ +# syntax=docker/dockerfile:1 + +FROM golang:1.27-alpine AS build +WORKDIR /src +ENV CGO_ENABLED=0 GOOS=linux GOPROXY=https://goproxy.cn,https://proxy.golang.org,direct +COPY go.mod go.sum ./ +RUN go mod download +COPY . . +RUN go build -trimpath -ldflags "-s -w" -o /out/dsfree2api ./cmd/dsfree2api + +FROM alpine:3.21 +RUN apk add --no-cache ca-certificates tzdata \ + && adduser -D -H -u 10001 app +WORKDIR /app +COPY --from=build /out/dsfree2api /usr/local/bin/dsfree2api +COPY config.example.toml /app/config.toml +USER app +EXPOSE 8000 8001 +ENV HOST=0.0.0.0 PORT=8000 ADMIN_ENABLED=true DATA_DIR=/app/data +VOLUME ["/app/data"] +ENTRYPOINT ["dsfree2api"] +CMD ["-config", "/app/config.toml"] diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..c1ff432 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 nyoungo + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..512c3ac --- /dev/null +++ b/Makefile @@ -0,0 +1,43 @@ +# dsfree2api — build / test helpers +GO ?= go +VERSION ?= 0.3.0 +LDFLAGS := -s -w -X dsfree2api/internal/admin.Version=$(VERSION) +BIN := bin/dsfree2api +IMAGE ?= dsfree2api:latest + +.PHONY: build run test vet fmt tidy check linux docker clean + +build: + CGO_ENABLED=0 $(GO) build -trimpath -ldflags "$(LDFLAGS)" -o $(BIN) ./cmd/dsfree2api + +run: build + ./$(BIN) + +test: + $(GO) test ./... + +vet: + $(GO) vet ./... + +fmt: + gofmt -w . + +tidy: + $(GO) go mod tidy + +check: fmt vet test + +# Static linux/amd64 binary for servers (scp it over and run it). +linux: + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 $(GO) build -trimpath \ + -ldflags "$(LDFLAGS)" -o bin/dsfree2api-linux-amd64 ./cmd/dsfree2api + +linux-arm: + CGO_ENABLED=0 GOOS=linux GOARCH=arm64 $(GO) build -trimpath \ + -ldflags "$(LDFLAGS)" -o bin/dsfree2api-linux-arm64 ./cmd/dsfree2api + +docker: + docker build -t $(IMAGE) . + +clean: + rm -rf bin diff --git a/README.md b/README.md index 2a6fb32..eb32bca 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,366 @@ # dsfree2api -deepseek.de,deepseek.es,deepseek.fr 转为api + +[![Go](https://img.shields.io/badge/Go-1.27-00ADD8?logo=go&logoColor=white)](https://go.dev) +[![MIT License](https://img.shields.io/badge/license-MIT-green)](./LICENSE) +[![Docker](https://img.shields.io/badge/docker-supported-2496ED?logo=docker&logoColor=white)](./docker-compose.yml) + +逆向 **deepseek.de / deepseek.es / deepseek.fr** 三个站点的 V4-Flash / V4-Pro 模型,提供 **OpenAI API 完全兼容** 的中转服务。 + +Go 实现,编译为**单个静态二进制**,无运行时依赖;内置 **Web 管理控制台**(模型 / Key / 代理 / Turnstile / 日志 / 调试)。 + +> ⚠️ 这些站点并非 DeepSeek 官方网站,请谨慎使用。 + +--- + +## 目录 + +- [功能特性](#功能特性) +- [界面预览](#界面预览) +- [模型映射](#模型映射) +- [快速开始](#快速开始) +- [配置](#配置) +- [API 用法](#api-用法) +- [Web 管理台](#web-管理台) +- [环境变量](#环境变量) +- [与 Python 版的差异](#与-python-版的差异) +- [架构](#架构) +- [开发](#开发) +- [免责声明](#免责声明) + +--- + +## 功能特性 + +- **多格式对话接口**:`POST /v1/chat/completions`(OpenAI,流式 / 非流式)、`POST /v1/responses`(OpenAI Responses)、`POST /v1/messages`(Anthropic Messages)、`GET /v1/models`、`GET /health` +- **Tool Calling**:三个对话端点均支持 `tools` / `tool_choice`,模型以 JSON 输出 tool_calls,自动回填到响应(`tool_calls` / `function_call` / `tool_use`) +- **三站点聚合**:单站点配额耗尽自动切换到其他站点的同款模型 +- **代理线路**:主线路 + 多条备用线路,支持 `http://` `https://` `socks5://`;slow-start 检测 + 失败降级 + 流中失败不重放 +- **Turnstile 自动突破**:三种 Token 获取方式 — 求解服务 API(`provider="api"`)、本地浏览器自动求解(`provider="browser"`,CDP 直连 Chrome/Edge,无需 Playwright/Docker)、手动导入 Cookie(`provider="manual"`);结果按「代理线路 × 站点」缓存,TTL 过期自动重解 +- **会话自愈**:nonce / data-config 缓存 + 配额耗尽 / 验证失败时自动刷新重试 +- **Web 管理台**:仪表盘、模型与站点、API Key、代理线路、Turnstile、对话调试、实时日志、设置 +- **可观测**:按模型 / 站点 / 按日统计、P50/P95 延迟、最近请求、实时日志(SSE),数据持久化到 `data/` +- **安全**:下游 Bearer / `X-Api-Key` 鉴权、每 Key 每分钟限流、每站点并发闸门、管理台独立口令 + +--- + +## 界面预览 + +| 仪表盘 | Turnstile | +|--------|-----------| +| ![仪表盘](docs/screenshots/dashboard.png) | ![Turnstile 求解配置](docs/screenshots/turnstile.png) | +| **对话调试** | **实时日志** | +| ![对话调试](docs/screenshots/playground.png) | ![实时日志](docs/screenshots/logs.png) | + +--- + +## 模型映射 + +共 **6 个模型**,分布在三个欧洲站点: + +| 模型 ID | 站点 | 对应模型 | bot_id | post_id | +|---------|------|---------|--------|---------| +| `deepseek-v4-flash-de` | deepseek.de | V4-Flash | 27487 | 106 | +| `deepseek-v4-pro-de` | deepseek.de | V4-Pro | 27533 | 27177 | +| `deepseek-v4-flash-es` | deepseek.es | V4-Flash | 27623 | 27568 | +| `deepseek-v4-pro-es` | deepseek.es | V4-Pro | 27637 | 27615 | +| `deepseek-v4-flash-fr` | deepseek.fr | V4-Flash | 27645 | 27569 | +| `deepseek-v4-pro-fr` | deepseek.fr | V4-Pro | 27647 | 27616 | + +> 三个站点各自有独立配额,聚合后每日可用 token 约 3 倍。 + +--- + +## 快速开始 + +### 方式一:源码运行 + +需要 Go ≥ 1.27。 + +```bash +cp config.example.toml config.toml +$EDITOR config.toml # Turnstile 默认关闭;启用时按 provider 填 api_key 或 browser_path + +go run ./cmd/dsfree2api -config config.toml +``` + +### 方式二:编译单文件二进制 + +```bash +make build # 本机 → bin/dsfree2api +make linux # linux/amd64 静态二进制 → bin/dsfree2api-linux-amd64 +``` + +部署到服务器: + +```bash +scp bin/dsfree2api-linux-amd64 user@host:/opt/dsfree2api/dsfree2api +ssh user@host '/opt/dsfree2api/dsfree2api -config /opt/dsfree2api/config.toml' +``` + +> 二进制不带任何运行时依赖(`CGO_ENABLED=0`),无需安装 Python / glibc / libcurl。 + +### 方式三:Docker + +```bash +cp config.example.toml config.toml +docker compose up -d --build +``` + +容器内监听 `8000`(API)与 `8001`(管理台),数据卷挂在 `./data`。 + +### 验证 + +```bash +curl http://127.0.0.1:8000/health +curl http://127.0.0.1:8000/v1/models -H "Authorization: Bearer sk-你的key" +``` + +--- + +## 配置 + +配置文件是 TOML,结构见 [`config.example.toml`](./config.example.toml)(含全部字段注释)。 + +- 不存在该文件时按内置默认值启动 +- **环境变量优先级高于配置文件** +- 通过管理台或 `PUT /api/config` 修改会**自动写回** `config.toml`(旧文件备份为 `config.toml.bak`) +- 启动时可用 `-check` 只校验配置: + +```bash +dsfree2api -config config.toml -check +``` + +### 常用字段 + +| 字段 | 说明 | +|------|------| +| `[server]` | API 监听 `host` / `port` / `log_level` | +| `[security].api_keys` | 下游鉴权,空数组 = 不鉴权 | +| `[admin]` | 管理台 `enabled` / `host` / `port` / `password`(留空启动时生成随机密码) | +| `[limits]` | `max_concurrent_per_site` 每站点并发、`rate_per_minute` 每 Key 每分钟限流(0 = 不限) | +| `[proxy]` | `url` 主线路、`fallback_urls` 备用线路、`slow_start_seconds` 首事件超时 | +| `[upstream]` | 超时、配置缓存 TTL、会话自动刷新、`cross_site_failover` 跨站切换 | +| `[turnstile]` | **默认 `enabled = false` 且不内置任何求解服务**;`provider` 三选一:`api`(填 `api_url` / `api_key`)、`browser`(填 `browser_path` 指向本机 Chrome/Edge)、`manual`(只用控制台导入的 Cookie),另有 Cookie TTL、重试次数 | +| `[sites.*]` | 三个站点的 `base_url` / `ajax_url` / `sitekey` / `language` | +| `[models.*]` | 模型到 `site` + `upstream_id` + `bot_id` / `post_id` 的映射 | + +### Turnstile 说明 + +站点在发消息前会校验 Turnstile(`ts_required`),`[turnstile]` 默认关闭时不会自动求解。`provider` 决定 Token / Cookie 的获取方式,三选一: + +| provider | 方式 | 需要配置 | 说明 | +|----------|------|----------|------| +| `api`(默认) | 1 · 求解服务 API | `api_url` + `api_key` | 把站点 + sitekey 交给你的求解服务,返回 Token 后由本程序完成站点验证(**默认不预置任何求解地址**,空地址开启会被拒绝) | +| `browser` | 2 · 本地浏览器自动获取 | `browser_path` | CDP 直连你配置的 Chrome / Edge:打开站点 → 注入 Turnstile widget → 可信点击 → 轮询拿到 Token;等价于 heartmore/cloudflare-solver 的做法,但**无需 Playwright / FlareSolverr / Docker**,单二进制即可。可选 `browser_user_data_dir`(真实 profile)、`browser_timezone` / `browser_locale`(对齐代理出口) | +| `manual` | 3 · 手动导入 Cookie | — | 不自动求解,只使用控制台导入的 Cookie | + +- **手动导入 Cookie**:在走同一条出口线路的浏览器里过一次验证,把 `document.cookie` 粘到控制台 **Turnstile → 手动导入 Cookie**,在 `cookie_ttl_seconds` 内免求解(Cookie 与出口 IP / UA 绑定,换线路需重新导入); +- **浏览器模式提示**:求解期间会短暂弹出浏览器窗口(`browser_headless = true` 可关闭,但过验证率更低);带账号密码的代理暂不支持 Chrome,请用 IP 白名单代理;浏览器被系统策略锁定时会报 `browser launch failed` 并附 stderr。 + +> `deepseek.fr` / `deepseek.es` 对中国 IP 会 302 到 `deepseek.com`,需给 `[proxy].url` 配一条境外线路(如本机 `http://127.0.0.1:7897`),`deepseek.de` 不受影响。 + +--- + +## API 用法 + +### 非流式 + +```bash +curl http://127.0.0.1:8000/v1/chat/completions \ + -H "Authorization: Bearer sk-你的key" \ + -H "Content-Type: application/json" \ + -d '{ + "model": "deepseek-v4-flash-fr", + "messages": [{"role": "user", "content": "你好"}], + "stream": false + }' +``` + +### 流式 + +```bash +curl -N http://127.0.0.1:8000/v1/chat/completions \ + -H "Authorization: Bearer sk-你的key" \ + -H "Content-Type: application/json" \ + -d '{"model":"deepseek-v4-flash-fr","messages":[{"role":"user","content":"你好"}],"stream":true}' +``` + +### OpenAI SDK + +```python +from openai import OpenAI + +client = OpenAI(base_url="http://127.0.0.1:8000/v1", api_key="sk-你的key") + +stream = client.chat.completions.create( + model="deepseek-v4-flash-fr", + messages=[{"role": "user", "content": "写一首五言绝句"}], + stream=True, +) +for chunk in stream: + print(chunk.choices[0].delta.content or "", end="") +``` + +### Tool Calling + +请求里带 `tools` 即可,模型会返回 `tool_calls`: + +```json +{ + "model": "deepseek-v4-pro-fr", + "messages": [{"role": "user", "content": "北京天气怎么样?"}], + "tools": [{ + "type": "function", + "function": { + "name": "get_weather", + "description": "获取城市天气", + "parameters": { + "type": "object", + "properties": {"city": {"type": "string"}}, + "required": ["city"] + } + } + }] +} +``` + +> 只有请求带 `tools` 时才会缓冲并输出 `tool_calls`,普通对话不受影响。 + +### Anthropic Messages(Claude Code 等) + +`POST /v1/messages` 接受 Anthropic Messages 格式(`system`、content blocks、`tools.input_schema`、`tool_choice`、流式 SSE `message_start` → `content_block_*` → `message_stop`),错误返回 `{"type":"error","error":{...}}` Anthropic 格式: + +```bash +curl http://127.0.0.1:8000/v1/messages \ + -H "x-api-key: sk-你的key" \ + -H "anthropic-version: 2023-06-01" \ + -H "Content-Type: application/json" \ + -d '{ + "model": "deepseek-v4-flash-fr", + "max_tokens": 1024, + "messages": [{"role": "user", "content": "你好"}] + }' +``` + +带 `tools` 时返回 `tool_use` content block(`stop_reason: "tool_use"`),多轮 `tool_result` 会回填为工具结果。 + +### 其它端点 + +| 端点 | 说明 | +|------|------| +| `POST /v1/messages` | Anthropic Messages API(流式 / 非流式、tool_use;错误为 Anthropic 格式) | +| `POST /v1/responses` | OpenAI Responses API(流式错误会发 `response.failed`,支持 `tools` → `function_call`) | +| `GET /v1/models` | 模型列表(需鉴权) | +| `GET /health` | 存活状态 + 模型/站点/Turnstile 概况(免鉴权) | +| `GET /` | 服务信息(免鉴权) | + +--- + +## Web 管理台 + +默认监听 `http://127.0.0.1:8001`。 + +| 页面 | 功能 | +|------|------| +| 仪表盘 | 请求数 / 错误 / Token / P50·P95、模型用量、站点状态(含 Cookie TTL 进度条)、最近请求 | +| 模型与站点 | 编辑标签、路径、bot_id/post_id,启停模型与站点,修改站点 URL / 语言 | +| API Key | 生成 / 删除 / 复制下游 key,立即写回配置 | +| 代理线路 | 主线路、备用线路增删、连通性测试、slow-start / 并发 / 限流 / 跨站切换 | +| Turnstile | 三种 Token 获取方式的模式面板(求解服务 API / 本地浏览器自动获取 / 手动导入 Cookie)、各站 Cookie 状态与 TTL、强制刷新、求解历史 | +| 对话调试 | 选模型 / 系统提示 / tools JSON,流式或非流式,带连接计时与取消 | +| 实时日志 | 级别过滤 + SSE 实时推送 | +| 设置 | 服务与上游参数、数据目录、危险操作 | + +- 登录口令取自 `[admin].password`;未配置时启动日志会打印**一次性随机密码** +- 鉴权通过 Cookie `dsfr_admin`,也可用 `X-Admin-Token` / `Authorization: Bearer ` +- 生产环境请将管理台置于反向代理后(默认只绑定 `127.0.0.1`) + +--- + +## 环境变量 + +| 变量 | 说明 | 默认 | +|------|------|------| +| `HOST` / `PORT` | API 监听地址 | `0.0.0.0` / `8000` | +| `LOG_LEVEL` | `DEBUG` `INFO` `WARN` `ERROR` | `INFO` | +| `API_KEYS` | 下游 key,逗号分隔 | —(不鉴权) | +| `PROXY_URL` | 主代理 | —(直连) | +| `PROXY_FALLBACK_URLS` | 备用代理,逗号分隔 | — | +| `PROXY_SLOW_START_SECONDS` | 首事件超时秒数 | `8` | +| `TURNSTILE_ENABLED` | Turnstile 开关(`true`/`false`) | `false` | +| `TURNSTILE_API_KEY` | Turnstile 求解服务 key(仅在 `provider=api` 且开启时校验) | 配置文件 | +| `TURNSTILE_PROVIDER` | Token 获取方式:`api` / `browser` / `manual` | `api` | +| `TURNSTILE_BROWSER_PATH` | 浏览器模式的 Chrome / Edge 可执行文件路径 | — | +| `ADMIN_ENABLED` / `ADMIN_HOST` / `ADMIN_PORT` / `ADMIN_PASSWORD` | 管理台 | `true` / `127.0.0.1` / `8001` | +| `DATA_DIR` | 统计等运行时数据目录 | `./data` | + +--- + +## 与 Python 版的差异 + +功能对齐 `deepseek-fr-2api-main`(Python/FastAPI 版),并做了以下修复与增强: + +**修复** + +- 流式 `tool_calls` 仅在请求带 `tools` 时缓冲后再下发,避免内容重复 +- `/v1/responses` 流式错误发 `response.failed`,不再假报 `completed` +- 会话标记识别只匹配明确 marker,不再误判裸 `"nonce"` 字段 +- `temperature` / `max_tokens` / `stop` / `response_format` 以 prompt 尾部约束下发 +- 空 role 不再导致 prompt 构建 panic + +**增强** + +- 站点配额耗尽跨站切换(`cross_site_failover`) +- 每站点并发闸门 + 每 Key 每分钟限流 +- 启动期配置校验(`-check`),按 provider 检查 `api_url` / `api_key` 或 `browser_path`,缺失直接报错而非运行时失败 +- 统计持久化(`data/metrics.json`)、实时日志 SSE、对话调试页 +- `POST /v1/messages` Anthropic Messages 格式(流式 / 非流式 / `tool_use`),`/v1/responses` 支持 `tools` → `function_call`,多轮 tool 结果回填 +- `Chat` / `Responses` / `Messages` / `Models` / 代理与 Turnstile 的单元测试 +- 单二进制部署,无 Python / uv / libcurl 依赖 + +--- + +## 架构 + +``` +cmd/dsfree2api 入口:配置加载、日志、双 HTTP server、优雅退出 +internal/config TOML 结构 + 默认值 + env 覆盖 + 校验 + 写回 +internal/httpx TLS 指纹会话封装(bogdanfinn/tls-client, Chrome_120) +internal/openai OpenAI 协议类型、prompt 拼接、tool_calls 解析 +internal/anthropic Anthropic Messages 协议类型 + 与 OpenAI 消息的互转 +internal/turnstile Turnstile 三种求解方式(API / 浏览器 CDP / 手动)+ 按线路/站点的 Cookie 缓存 +internal/upstream 上游逆向核心:data-config/nonce → SSE → 事件翻译, + 线路降级、慢启动、会话刷新、跨站切换 +internal/api OpenAI / Anthropic 路由、鉴权、限流、流式写出 +internal/admin 管理台后端 + go:embed 前端 +internal/metrics 计数/分模型/分站点/按日/延迟分位数,JSON 持久化 +internal/logbuf 环形日志 + 订阅广播(供 SSE 日志页) +``` + +--- + +## 开发 + +```bash +make fmt # gofmt -w . +make vet # go vet ./... +make test # go test ./... +make check # 以上全部 +make linux # 交叉编译静态 linux 二进制 +``` + +命令行参数: + +``` +-config 配置文件路径(默认 config.toml) +-host 覆盖监听地址 +-port 覆盖监听端口 +-check 只校验配置后退出 +-version 打印版本 +``` + +--- + +## 免责声明 + +本项目仅供学习与研究网络协议使用,所对接站点与 DeepSeek 官方无关。使用者需自行承担因使用本项目产生的一切责任与后果。 diff --git a/cmd/dsfree2api/main.go b/cmd/dsfree2api/main.go new file mode 100644 index 0000000..127a38e --- /dev/null +++ b/cmd/dsfree2api/main.go @@ -0,0 +1,159 @@ +package main + +import ( + "context" + "errors" + "flag" + "fmt" + "log/slog" + "net/http" + "os" + "os/signal" + "strings" + "syscall" + "time" + + "github.com/nyoungo/dsfree2api/internal/admin" + "github.com/nyoungo/dsfree2api/internal/api" + "github.com/nyoungo/dsfree2api/internal/config" + "github.com/nyoungo/dsfree2api/internal/logbuf" + "github.com/nyoungo/dsfree2api/internal/metrics" + "github.com/nyoungo/dsfree2api/internal/turnstile" + "github.com/nyoungo/dsfree2api/internal/upstream" +) + +func main() { + var ( + configPath = flag.String("config", "config.toml", "path to config.toml") + host = flag.String("host", "", "override bind host") + port = flag.Int("port", 0, "override bind port") + checkOnly = flag.Bool("check", false, "validate the config and exit") + showVer = flag.Bool("version", false, "print version and exit") + ) + flag.Parse() + + if *showVer { + fmt.Printf("dsfree2api %s\n", admin.Version) + return + } + + cfg, err := config.Load(*configPath) + if err != nil { + fmt.Fprintf(os.Stderr, "config error: %v\n", err) + os.Exit(1) + } + if *host != "" { + cfg.Server.Host = *host + } + if *port != 0 { + cfg.Server.Port = *port + } + if err := cfg.Validate(); err != nil { + fmt.Fprintf(os.Stderr, "config invalid: %v\n", err) + os.Exit(1) + } + if *checkOnly { + fmt.Println("config OK") + return + } + + level := parseLevel(cfg.Server.LogLevel) + logs := logbuf.New(500) + logger := slog.New(logbuf.NewHandler( + slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{Level: level}), + logs, + )) + + dataDir, err := cfg.DataDir() + if err != nil { + logger.Error("cannot create data dir", "error", err) + os.Exit(1) + } + + met := metrics.New(dataDir) + met.Start() + defer met.Close() + + ts := turnstile.New(cfg.Turnstile, cfg.Upstream.UserAgent) + up := upstream.New(cfg, ts, logger) + apiSrv := api.New(cfg, up, met, logs, ts, logger) + adminSrv := admin.New(cfg, up, met, logs, ts, logger) + + mainAddr := fmt.Sprintf("%s:%d", cfg.Server.Host, cfg.Server.Port) + mainHTTP := &http.Server{ + Addr: mainAddr, + Handler: apiSrv.Handler(), + ReadHeaderTimeout: 15 * time.Second, + ErrorLog: nil, + } + + errCh := make(chan error, 2) + go func() { + logger.Info("OpenAI-compatible API listening", + "addr", mainAddr, "models", countModels(cfg), "admin", cfg.Admin.Enabled) + if err := mainHTTP.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) { + errCh <- fmt.Errorf("api server: %w", err) + } + }() + + var adminHTTP *http.Server + if cfg.Admin.Enabled { + adminAddr := fmt.Sprintf("%s:%d", cfg.Admin.Host, cfg.Admin.Port) + adminHTTP = &http.Server{ + Addr: adminAddr, + Handler: adminSrv.Handler(), + ReadHeaderTimeout: 15 * time.Second, + } + go func() { + logger.Info("web console listening", "addr", adminAddr) + if err := adminHTTP.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) { + errCh <- fmt.Errorf("admin server: %w", err) + } + }() + } + + sig := make(chan os.Signal, 1) + signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM) + + select { + case err := <-errCh: + logger.Error("server failed", "error", err) + os.Exit(1) + case s := <-sig: + logger.Info("shutting down", "signal", s.String()) + } + + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + _ = mainHTTP.Shutdown(ctx) + if adminHTTP != nil { + _ = adminHTTP.Shutdown(ctx) + } + met.Close() + logger.Info("bye") +} + +func countModels(cfg *config.Config) int { + cfg.RLock() + defer cfg.RUnlock() + n := 0 + for _, m := range cfg.Models { + if m.Enabled { + n++ + } + } + return n +} + +func parseLevel(s string) slog.Level { + switch strings.ToUpper(strings.TrimSpace(s)) { + case "DEBUG": + return slog.LevelDebug + case "WARN", "WARNING": + return slog.LevelWarn + case "ERROR": + return slog.LevelError + default: + return slog.LevelInfo + } +} diff --git a/config.example.toml b/config.example.toml new file mode 100644 index 0000000..5b27c5d --- /dev/null +++ b/config.example.toml @@ -0,0 +1,137 @@ +# dsfree2api 示例配置。 +# 复制为 config.toml 后按需修改;运行 `dsfree2api -check -config config.toml` 可校验。 +# 环境变量优先级高于本文件:HOST PORT LOG_LEVEL API_KEYS PROXY_URL PROXY_FALLBACK_URLS +# PROXY_SLOW_START_SECONDS TURNSTILE_ENABLED TURNSTILE_API_KEY TURNSTILE_PROVIDER +# TURNSTILE_BROWSER_PATH ADMIN_ENABLED ADMIN_HOST ADMIN_PORT ADMIN_PASSWORD DATA_DIR + +[server] +host = "0.0.0.0" +port = 8000 +log_level = "INFO" + +[security] +# 下游鉴权。空数组 = 不鉴权;建议部署时换成自己的 key。 +api_keys = ["sk-dsfr-local-change-me"] + +[admin] +enabled = true +host = "127.0.0.1" +port = 8001 +# 留空时启动会生成一次性随机密码并打印到日志。 +password = "admin123" + +[limits] +# 同一站点的并发上游请求数;rate_per_minute = 0 表示不限流。 +max_concurrent_per_site = 4 +rate_per_minute = 0 + +[proxy] +# 主线路,支持 http:// / https:// / socks5://,留空则直连。 +url = "" +# 主线路失败或 slow-start 超时后依次尝试的备用线路。 +fallback_urls = [] +# 主线路允许的首事件等待秒数(>0 且存在备用线路时生效)。 +slow_start_seconds = 8 + +[upstream] +timeout = 60.0 +stream_timeout = 300.0 +config_ttl_seconds = 60 +auto_refresh = true +refresh_retries = 4 +retry_backoff_seconds = 1.0 +user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36" +# 本站点配额耗尽时自动切换到其他站点的同款模型。 +cross_site_failover = true + +[turnstile] +# 默认关闭,且不内置任何求解服务。Token 获取方式三选一(provider): +# api —— 调用你自己的求解服务 API(需 api_url / api_key,方式 1) +# browser —— 用本机浏览器自动求解(需 browser_path,方式 2) +# manual —— 只用控制台手动导入的 Cookie(方式 3) +enabled = false +provider = "api" +# 方式 1:求解服务 API +# api_url = "https://your-solver.example.com/turnstile/sync" +# api_key = "REPLACE_ME" +# 方式 2:本地浏览器自动获取(CDP 直连,无需 Playwright / Docker) +# browser_path = "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe" +# browser_headless = false # 默认有头窗口,过验证率更高 +# browser_user_data_dir = "" # 可选:指向已有 profile(需先关掉正在运行的浏览器) +# browser_timezone = "" # 可选:时区,与代理出口对齐,如 "Asia/Tokyo" +# browser_locale = "" # 可选:如 "ja-JP",留空取站点语言 +sitekey = "0x4AAAAAADlLZ3ljqZP6cQwq" +action = "chat" +timeout_seconds = 90 +cookie_ttl_seconds = 10800 +retries = 5 +retry_backoff_seconds = 1.5 + +[runtime] +data_dir = "./data" + +[sites.de] +base_url = "https://deepseek.de" +ajax_url = "https://deepseek.de/wp-admin/admin-ajax.php" +sitekey = "0x4AAAAAADlLZ3ljqZP6cQwq" +language = "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7" + +[sites.es] +base_url = "https://deepseek.es" +ajax_url = "https://deepseek.es/wp-admin/admin-ajax.php" +sitekey = "0x4AAAAAADlLZ3ljqZP6cQwq" +language = "es-ES,es;q=0.9,en-US;q=0.8,en;q=0.7" + +[sites.fr] +base_url = "https://deepseek.fr" +ajax_url = "https://deepseek.fr/wp-admin/admin-ajax.php" +sitekey = "0x4AAAAAADlLZ3ljqZP6cQwq" +language = "fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7" + +[models.deepseek-v4-flash-de] +site = "de" +upstream_id = "deepseek-v4-flash" +label = "DeepSeek V4-Flash DE" +page_path = "/" +bot_id = 27487 +post_id = 106 + +[models.deepseek-v4-pro-de] +site = "de" +upstream_id = "deepseek-v4-pro" +label = "DeepSeek V4-Pro DE" +page_path = "/pro/" +bot_id = 27533 +post_id = 27177 + +[models.deepseek-v4-flash-es] +site = "es" +upstream_id = "deepseek-v4-flash" +label = "DeepSeek V4-Flash ES" +page_path = "/" +bot_id = 27623 +post_id = 27568 + +[models.deepseek-v4-pro-es] +site = "es" +upstream_id = "deepseek-v4-pro" +label = "DeepSeek V4-Pro ES" +page_path = "/pro/" +bot_id = 27637 +post_id = 27615 + +[models.deepseek-v4-flash-fr] +site = "fr" +upstream_id = "deepseek-v4-flash" +label = "DeepSeek V4-Flash FR" +page_path = "/" +bot_id = 27645 +post_id = 27569 + +[models.deepseek-v4-pro-fr] +site = "fr" +upstream_id = "deepseek-v4-pro" +label = "DeepSeek V4-Pro FR" +page_path = "/pro/" +bot_id = 27647 +post_id = 27616 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..65d4bc6 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,23 @@ +services: + dsfree2api: + build: . + ports: + - "8000:8000" + - "8001:8001" + environment: + HOST: 0.0.0.0 + PORT: 8000 + # Web console listens on 127.0.0.1 by default; expose it to reach it + # from outside the container (put a reverse proxy in front of it). + ADMIN_HOST: 0.0.0.0 + ADMIN_PASSWORD: ${ADMIN_PASSWORD:-} + TURNSTILE_API_KEY: ${TURNSTILE_API_KEY:-} + API_KEYS: ${API_KEYS:-} + PROXY_URL: ${PROXY_URL:-} + PROXY_FALLBACK_URLS: ${PROXY_FALLBACK_URLS:-} + PROXY_SLOW_START_SECONDS: ${PROXY_SLOW_START_SECONDS:-8} + volumes: + - ./data:/app/data + # 先执行: cp config.example.toml config.toml + - ./config.toml:/app/config.toml + restart: unless-stopped diff --git a/docs/screenshots/dashboard.png b/docs/screenshots/dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..d8a392fb8f78a3fa5c2b1b459645dd341594a2e3 GIT binary patch literal 274768 zcmeFYbyr;7w={|c5;Vaz5Zv9}gS$%z?(QCfJHg%E-Jx;UCb+wMV~yQ@&Uv5TIronH z5#Ie5>@lEs?=@G=npL&Jl@z|CAmSrJK|!HNONpyMK_Ll4K_Ptn2m`r860#@?1@#$9 zT3kfUBlBz>;isDV3fGl$iMfm!&>QXBCumVL#E|qxBzxV#{JAnHCuLF!P z|EpYn)R>A^x!>Nc!8&x4!xL; zuPh?lj&M*vO^}dc^T$udRQ}ml|9u5U|M^%X?d14dkC5~mGj1gcwsqO8o{b5E8|xZe z6ti$%+=megbQ)+V1A6R+viT(|X6~hJA+uSk=TD$LvB{d4j*b5+b#(53|07gL5VJ7( zxSI5L8vPQNRc-6Q(FGgFqe{1eXbwKD&_F&Wy!PJDk|aM1Ve<6ImBJZL#KfCVp{!*4T_fF=MCxBw%5B7}mH+WOC9;rc)u!@v%eKQZUs8C4XG zNu_*5L4^qk>xU(ub!y*ZtS`K4ZN4)>YHL)ZZDLjGuhC^lT(;uCfVz^PPnIE9sT)wg z7Tp9^&RLEY1q&_%a;b>D-W=BMVE_5*aXrxgeh_o2xJdjj8WA5yKiQ^Py~>8uN;voo zC5mLqGIC|79s0pduiViElW$^*q{-#%B0g!p6@xacc<1-yWxN7C4qp(1S=02+_}wfD z^%mDm+Q@sIK%;NS0#8Z=)w|W3LC}aC&``L`n26QPiEmC)9kBm??v-;qdGJX(bDrMO zjBfOBhDBjq6Zc1CXmFp7weGo2By}9!2$Q_>3W}Te?aYuV?B3Ycj6dwtu@B{PF4|H7?w2^H-6Vll_nFHr8*UxFxh1D=9lI09 zY(f_s0%3~(Ssz9`e40eXzcWb-&N|L@F+CLh=)0qo9kbYR#Rr=(bIZN{ua*-`N<;(a zYZlCDx}Ttsf6bP_*+FIsz(vlY-$>sn5eM!?P7w8iV9Bu+sWky^ZS=aV?Di0 zVUpZcaR~_~z0Q$@9>?JuEY0cGlcm|+P5*~1ckRe!XEPzNP%Od-Ogq56NoU{p`Xo)W zX0x^IIb-Q;p()4jZS*9TukpL2+2z=qKo4il`-eayw?`k z2PiSd56~WE zwg0sU{*&zo>6LZb*^yPn8d*O8_Z3WYl10)*z{?ijmZuDRi|2<;U#q&Wqs_OUaWBlvuYv<}NyNkP9zq*^UkdTnY_t%y0#D2o96H&R1$_1E+AC4nSOOHxR zzc$zD&>L=V!~F{pl2N}{0(L%!i`jEzTaj)d91(m2N*!g0Zl*6JFqr&=;GQ^X)9Sh8 zdj%VsgJ~{8iV}G-0=~eS3oip6E@)H}9#ZwT4zV2~5y*SADJKsKOIQfg{q0$WxNZg9O$)vEua;Y}hNJo zmeup;hkg5{+Fr9JZ+ko(g6E!ov};9_e;@xPnqGAf>!gNL=TyEh7LIhtkRTJPK#Im~ zi4Zj*>lcPE-%$o>c>EmKh(qbS`8J(;z}g1AS;eFb)X$L_v8b;WM&XHHU36^8j%xxy zqg(bbwNyACaf4ZBa_t?t!JIw_2%#3bjcyr}9m>?`Wr?&2%O+N~6v$*hr3~EpgacjI zP#DP_pr9Vhidr`C32;u^Jg$w-o2ztT=L428>hVJI7y@YLm+E$(;9~9!d_7OkTTEj{ z_qY_~Wb|qsl%*{#m1>6?5V{onK_iBKzMC5_huOXw^yu#IxRAwNdE#2zYHNj5W4HT; zKGzxQbDC<2v?4t=hVO*Ses#y?c1bv-UCq_B^V+(A%iT9#r*-YUnhO!f@IRSmlK6;O+IL!$&rlrk$aXaIOO$+ zz=VIJPY0Z^Li#hvsVJg4RcRUL=g}-|G<^KANQw0<@6sD#1MG1^uh5gO;#Uj;fXDGU z3W}?>hQCR}JtvWP!KZfHr>x5Lx8?NMjPw=w*PzFs50NQfh1^_LlP58#1{PM}xw5*tFys1^ zqiOzqy|r#Ql*RQ#?K09UD|@;fSDe`Is#}iId#e{A@OR+RU|d{W&g;&h%agzVo56qh z*_(ViITdo<51Xb_u#Za3Q@%7cmiQ+6qE2~BvjZ0zVS%(4b@U$>uBVQ&F|Ef3RnEXg znoi{KAD^idm6|iHIMoS)oeXaZj)79zTzqAEnk$Vp*&xlM%CIFZsIEDY#zJ{hV4a3wFsI+FP8LJ7Ci-Nil&_%cYC8LL5fvM}FjGtHn*qkTPvB7`Z_t_; zm<|dGnFO%J3f4|9R$iE~m8tQ*p5PhR4}IXKvasX8S0of__FhC)M0sDm(E1aXx_8^m z&bcg)Da6V627cm#4-NW!(b$rlwc3)y>$(%4#mb2EvGwkLKb>SU#agI>nu$si8(h8K zy<=CW)p$^Vh79jdQ!3`aZ)T8^5f?{|iFl6seSL6+N$6dzX3>2k-fzDfvhz4Q&J)l! z?QLvGd`-5^oa1K1YWxHCAaF*bXi^HC*VjKK^PCb2!_42yF_RK2l(5e}|NecQpuY51 zD_;T;<#Vuq*0EW`Rz=_Lg;eE+lB1(6R+ltr2X4PqI6%B-g{TUvD(O@P{CX8q(I!Xi z|F0H6g%%suX*DF5SIUs}%TP*9t+Bs%h>D!C?KS4Y-tX;f+4zH=x<{}mi<=MUIW1BQ z;Z0kSWdD4;y_J>D>ny_JbjLRa0X9m;i@qo4^-KTH&)d*n-2@Vs zYz*_JD}Zy~?N?qmI8bd{@42E#)5R8fg>gHn%USjSkYEOFlmVvdCYD;!=w~ z88(nvX4daFYLH-!U?kGKC;YgvGt4RR`tnH&!J2-4E_Bbb0B4k9po_yTxmzAIS>JNc za6^k3MvhK1UawI>OyLj|50f zXy)pwX2Eyr&_PW@ZRV#>sBU<0{!wb`f`+je&g_G9LW!QUZT0#EH6249PC>r$;o&+x z(noF|2cZDy$nbEKPpE=^XQl5Z_E(qOiF=pf8*c2%W zPGcbqqNDAhdYN`-FQ^qFUw$)$1uB9Fm&$dl7wifO=sG9ou2DVf9bI0k>1eom3mzgP zHDmTDrCh#(b34@#IC;e4F5mGw%0Hrsk3H0ur4w3awHfCiBjL=>oZYZFhr2zQ;NOye z#EpnO|ID(~32f+{GB&fAopDD~T0B%|tsESnuHr_)XLOz8&1OGkyxZ}+T=fh_3ShS4 zulae946iF)oeqTUeH@&SHf$s&hY5Mi5whcL;%+-Pn#D=u5|V|d-;ELCZ}2fQvniF? z@pD%2k8cB^!NF4=!~i;<_M%5=!R7dLw?a?5uuPZaP;V!12w%gZPo1v#T#iNxr4yb& zsA+PXrel9wHoYPNV+ma%3|g(!l$=A(b$NN)S9xUrVSqp5K9X6!#A^}A6#_&ALX)Z< zE4l4Fot#Bfh1}5D8QAT#(fgUPAiE6*>s0PfKH}6THua_-kBgRz1B}Lj=$DGoKR%n& z1MiN{oCD;f0zLPMvD2&=m5DrvwJuQ5Aw7g^{Kr~LZsLIUT8pB@P3X#wZc0&M@yhvq z`OQsf>e1I0dmD?9&0Av$PdtC+Jf*dE8&6RqVCihZbmm^YkKbBT!EIIXfn02OB%jls z)S(tx(Sk*>+_)A5hywqo+n( zxR)Bt8TIqhFDNLACQ>;{+RBc{n{vRJuf4i@HhMBA)Za@ga|QDdh+f}vzW%Bj>fZN8 zsa33A*4oxSq>2D$0l};EXSUK{XNDwe*+=XZhMZ@>uE|I8SCd9wx)DQT6dacb zanlC^gn=>Goy3rQY*pI|DMnz{{11=2#-`VUffBqTp~ z_Go&0zn$cgL`#yTj2Ee-{V36WoqcA|A@*bwn?-wgZY4nU%j&sKSp}M?eCz)_B*?1L zUjNne@Q%t^l#f%kXrRWF!E>j&Q#*lGwNEYE3mUuNV(0ipKBx0>T0UujnExKg)#0ImmZJvAkTk4y6?^Lo7G_31g8QGch*<_`y_^#aG@+1l)N!VsiE z9;F_(d2IU_N{=QnZxZ|qQ;(k%YbZmrPWvozHX_p{tD-4K>{-}?Hn+U#M#j*Ee@ePF_mo77Qq0>;CKS>^v7<(5)Cskd>XMRPJ{E7!ZrE;#jEF)mS0S65$MTjT}mHQ#SVT~pgOIoiN~-uOPmdACAWS6;_9Ql^OXRRWEdF^)bN z#Bpn_1d&N_J~N<&B@sk~n3N~R5YnIDR&XWCikV8I6}bXzXZDl=)Mi>+Vrumir1uYt zHWr&RfjamTJ0x{l6r2xa0sTT=H~xI;pft4a@@bsmtw-G%TaA?*`Qs!q2TcX()+WyUpM;3%Cw;WJr{to%eYB5 zdPqYtjjv3N)@eG_v}JYDjP3PIhWMLpiT@(-yA*-%Md%l1=z6Hj!#;bcrh;D!vj_%4yuw1O#@JB^3#oXkFWXemA=dm+DKJY*`Hjq;?Lc zoC@x0vakCEu0(4D&d#2*?a02)wdP(v@!?W_V;MDKaZl|k>TERGDIBf4zBajxg@Y$y z5YW$4I$M1<)-=E|FoLvAgmH+a+P*R3)p&o9|FA1y5% z6d%0Xy|lNrh3Bl5BZ$rYH-fxn^js&bc?A5b=oZ0E#)JOAZIq)gSRr;FGHFvc(=rl! zYCn<2H?Daff@679Nu}9kukAHmZm5t{X^~e`v?x}^-xUq@m{*dm%_HdT6Pt0q+~wXk zAgyBV`!zr~E`d#eg=Ms(NAhB=ZF~DmcI3SJ{A#leMan`REW&|-P>KQI^upWk8l;*H z7ZVW?5lZY4C%9!$spt9r`hY|eur;zR_WrmkgowyX*<90ldyxdtqd|+i#o_Yn%6pI| z|F@1lZG(yQ)bNlZj z$kiuo!=dY-qlACj)~ordAC$dA>dHcDdc*3pSjTS*R~{&4iSpzMY8zlsL=D^RhGxSi z7!&OLS~|R-bPU4^l-DadnG*d0T3IuEBhb3q${rdTI-p#*U}FXd+*w!1Ng1?Kr%htj{x$ly<+jCmcL#g3y|Vjar=&vY zCP?DAzt!(e9tUySx9P&UJGh&^g$cmM%?-NcAf8`X*l-(01nc!~Q;4@f&7 zuGikJ+A}Wv{lR7bwJSn$DIK2xu-RVJ+PW@>@GZ}&k^=OHos->W`Nd$mk$ZHM1__%2D536au_1|Q!7w){_I4BG0^{ewJYJ*&}$tk%-sOS297!kp(!+J7h>9ykCJ zs3$m&escYXi*%Tg!}z_wc!*r)`1yJ`gD;B2>j|qQ% z8Z)>lIsVGyQhT+=1Mascfy{@-gX`=bCd^0PNnI@LugrKo|8x@efZg|f3Mz?lJi8dm zybv}%gE&X=xKrbiDFi#4@&Y~m&=0{U!Q*?mn`P^F`ng2Z>IMa84&!# zWyuZ{q2DpZ-#xJIU!HDO?YWqA>bYrn!U4DhI2{o2&A{(i;?2m&NCg5KMs;+GGusY( zhnIH>mmZ+m;S29AzdCW?E|IGTvuDeiPrp3Zy$4;zVEsv!`=-aP>zk3)N$F||!>!5B z8KHVbLOx02X^6PJXdo2pkL$woT3*pG6!U!4ANzLQ0uTgUk#TL-|8kxBi-U!?-Nx`Q zo;;%EMIjZ|9lV7GTX27;##z}DZC7c?>%0iH>ef%g$92}tSGT6|ZkbtFp~*L<(x_TC zG$ookL&0x}OvRDtH&ZuA4(HfWR*e2a<1HANJoI9*S0h$HE>4^H(V{c1aT^oI5nQlJ!;j2g`;m_WhEyimF{l*L)BO;bh0|l_q?!dPAfDE{(z2-)}k@{ zZLRaCvYy^cbJZrQ1}eg9GaH3#;=B<9&Aq^~i_-~p6XnscKA&&OW-h>{9x6?51DJo# zOdL=*Z^4d>TV2k7ToKvC0ZPi-M7CxZK|!g8BLQ=NfT5)4*DF&yzFXsYMJ!@vR$5=u zQgm&qSZZz6Zm6*>t)b)gp^k`%Y4e=jfoKhlYgrd@th5Z52f;?+t^3QX zwTAxH0@fa{XJ==LzPcGX-N6)FQmz~F)p-_>ZyB9_!8pN zv2lnmrMGg?lHlEoR4i?5I;jH4_(?MvpUy(V6N)Fg85eC>vjlvB+ds+33PeT4K8WHs zSb9?k>@%ik=v!h#_&8F^8s(p`3c8B&iVD(#d?TY>>`kwZhXm58&P)ggZMMizBoaza zO~fR?@gL8pIGoPOV0Gp7%?F*wC`uJ_6-MXy-PD!Mdm@9u`<)Q%CGz7TBQ2OPi~O+} z-}2K?Mg|{6LU$q=DfkfZZWlTGoDyVc_Jd9Lo2JjhxtZXwDam7Cj1bhb$(HZURy>?6 z*}-rahu+6uU%dQAQ%gTwmxF}YkFhhVc^sl7v#`khJY2Sg6#3-bz!kX8)}lw1Qq~DY zhVEG;!nsl^qxr2cxGv%rJVi-CGL|`t&nAMJ1u1yA<;bpmzGb4}N(M_n9W$jUl@Dg+ zuzuN|+c_nc#0v0X-+Jfz3C%*MKXt;X;EHemye_#U0sDi2#WEC zP`)!~YOo>euU$LpM`M`pPN^@&mVctmPcW0YLpu7FW^})c)3Phy|M+9Qxf=Aj*IO z*fhC?jLAx)x`8fJ2+F+sUcak+FY>CkowaJ=A)ba9QWssP7Y1+O6z3X1wm&l{p(hYc zaLa)k|Ab%%-H7kdc19?sqN4oce_#eykp6GYt(WXuf0i#@bX>HT74oJLTdR!GNAW1| z!cYA3iub%BrTh|xcqKgR2JflqdrDMHs$%1AWNx=97qsNM!Pcg8dI26`!{?ZB_?lHpiR4j{}9kd?fWG!H5u~;64^@W6PJz zv$BNs%TXIv&&BAgI66!aoxG->aLuf~x~4{mVpvpE%nk;3qKvwhhli|lgGwGU8rmTS zcYeOnQA#_NBH^i--5=!wN&EGi$#CQ0$3s5%4U}aJO0#H!=|kR`jOp%s-uC*p$foR+ z#En^qwD386#VPy9Y;iJ+3O%BG8FV+gJNzVxuhQkWfnq!qlfm)40%0PhW#ybr_ytBr zSVbpz-*gSx z4r2!EGwyc&ZS}VxKTRJ9?OE?|^QfmN*5@!jsI-GKkWn4_eyQ*W1!f)Bs%D`N!O`Z!u0LUqZRRWy%7P`vgseM`#n`2y(Tb^=FS)xG<4uR7;_< zV>ZovKk_Xp6PiwxaArYWxUg8$HE8Odusia1Of)%Z&uB zS+PL)@}q5j%Q3Y}-6Tw`S=4C8V>I8-NZ1U9aD6Yt?#G>DW;0@P)oL?>4BXr%v+)o& z3_ndyW>+>FB?g<2M`P<*8O2UW4&G@E1=?S3>v10?oc6;*53U_A2{c_UU|G`#CN!~; zZ+snCPLTqux}K-*|1v3i?j%2U-}NxgZ#nUYin2-m4IQ5^I&NEj3#yeL6FZwLZPF+_ zC`KzfI@-|CP~Z0H)qQia>kT}kqt4wxQovwDlZ71-xGigSk0P>4+$ zx6SP30+#iET|ELddpUxx&z2hw0R;L)qVl$P)Bg7jMJ?;#kpiLc*w_MwP*h^C!>SfY zGZ?pOj#KzV*o4D$vC)Mi1k~J+j?+O9ywk->TU&#wxP!wh5J9~zfS1@?QJ@6Q{VJtU+=A^)#VXR0x3hK zL<{wN{Rm`XUH6H-gPriu{q)uT{%%bj{8UxsWi6|_G^%E5wRY+?0s6#AY^hXO9#sS$ z(&xyQ^fg4XEi~-&BX>Y9V43oGiRE+mfY}3K6++)BTUvgZDr4kEPT)w+Q1hC;$l93G zowrUFr%2qyU-slrj>_=o| zn^`N4bQ1jKs`5%3OUpl_ChYXI*pWxFB5O=cIjK7$fdjL3b@G$)IM&wu(V(uS`X|6f zhI(>}4t?@g+~><7aC>{gaIDwYlQy;zqum{=@`{+RJbRXv)J#Ru+h4X{bhma>5+oyI z31y~7u3nrFgGm1ctKIruP-BTeNcIH z0f7|BL(o_p%BGg&+t4pQjM>$PTw?LElHlIXFkHhtr$;k%yS%3=kjg# z9bQS3nS9d>{SY&s=+6S#qhvZ9-qyk~^bnFVbpH3lT&wE|Q=7aBKMp2TYoQz#Z6xZim zcL;k!f$x$j;?;5ZYsBH6&{O9;9OLW#u#uWFyqJ`~yY@n0x7J~PxkDifVS@Y_vqFhn zHjnAZ2@U4co$qfQid8Rtbe>3cf4gn&wXm=Q zrpr+_Epmby9JMW%E8fAHBE4V!$K&m}AR)!K!l=C$K}!B;(ii5*!p^RAEB_&nT4qc zm>`(48N*YTbPicYKg}vB^?&5lLU^x3LoNJ?YHkWZ-ffgdyEFc~b;qe0BO-O;!=WYX z6lr(i<>eQYz}Z|rO@=N57EAo{l56jRS*=s7*u$@3>wb033m9Z2dA|5Zi^s0no?QGE zaML!dmhAXx^gSjg@9YSm11=^#%$zunx3y*a_l~*>JjVK=n1Z^eh7!fQRxxPJ{G4OL za(j;E^og$YnY_SA9HtW#@YR(RIDht+sh*FIb;b3>aY6x55+Zth#YIJiRrhooCpTK^ z`TAS#?(R0yczwVhd^x0Q{CPZ45oB}Hsip&e@V5#H@la6E@OW-+2xw%uE@YmP8yzQS zZMtyWDi~aEK0TOEMSeRp$$3++Sl{P-6G;KgwIDjqf&82lr%@j1THY?;ZftZeIRn~H(&?x(ouh?)i7vDS_ zS1#k@p!T9q^P1gg>fz-SlICn{r=n6nZ}kOHzXavoz27Um@SN~1b!lnM^VU+R)>E~E z?di@-vnaau>I%ZzaPQjBH|=-5u~aKY%^K7-)fe2Z1pp$9OGF1 zC83!JxR1v9aq^U`J)ZMwxlvh%w@q6%@G7Gl)t;P=#J8#a_JXrE=)Jl508&#g(JgoK zb3NIs$*f>_{*mss>7CX5_uQZ6F#Cn??FN`|o1nf1O9v(;yL@uv3vW9PH`iE;PxzAO zwB9jUSy98^W_>pf(DzMuDe`YQ36EWCiW(F$5OfCyO(?SjIF%iC)3<}?LOK0jfOJ{r zao2ZRn^`+Nxn8yq;1XOl*c3{$?!Se$wn&8aq zkb&>reB<$)fCRUwsA%@nehn!p8Na`S3$^?9^|b#>*4yLS;omYIz;pkls*0-54_zG< zaKd-ueJZQ#?$Mf@SNWBr#%O}>xBaVaJz=NXsOD7PB+*7vfF~yHK#i%A=;p6(cq?U z$Fi#PAe;YW8=HCOWkQHw%9>XPt&;riFlc#RP2H+Vr`trf17~It!`($-QI5%RzH_gT;6hu+Bini>sDBu08Hr-qLPYuxDf!fjS?2gKTUuWmG~=JG5Vy9=~( z$z@m30CWv?RI8YWi0Z$hH9_>J-^C#s{`v}FJ1wu9%wx^i4CdLNGndnwe5d%DSzo(; zDB@(>wjQf#88s~96Zm3=sZe8bt#|&qzcE+H$z2d6v%Vpt=n=QKfP37}jBDQyH2Mgmt@#fp@lP;TD){mdzdRXb1Spwm4 zOe0Y1&u`w{@j{sg{I65?DTm_C?{uo<>JpTPYv8pN9?#2Hw?m$ZzW+RW#IY}b6U>wqhkzo9JN<+K=J^D@UUie7^){nJA7f{aNa zE9td@f(dkz2lJR!@I5Az&)x1YhDd=e50SMPO~<-T5ph>VQ-$q$?YAcr+(#`SxD_iK5pVERug37Kxef=uR*5~C9?!Xdq! zb`<|hJ2n1o#k$@oPRnPhU?UXw1^eCX_K^(Z0-V9y+t?Y4%seTk1*u2_zJe)K%D{mY z3&&K#9pO5uZ}pyoNNwTD!{EnIxz8ZqjZ?7cVmt zmqc+=tjGZg9L6|k3tJASGUlu?O*ra3m>L{FTN@7};}7~j;I;7e?OLt2!qDO&_;w24 z;A0#>c=)JG*C<|h5uGv%OMsQDhlh!=vA}+Nk@J0Ke<&(sWS?wfOxf7G$8z^?KG>B! zgwM;o8jH9wvu!x+4iepVbw2z6H^TMqzI$!_{b?^_Yi1^Df}WMR>t(;tAlAAG#3Nar zSS~q@;aK3UM4MQ^#`L-Y9yA00gH!R~yU{?V&G+P=7;MqXT zz=2*!;OxRtRyFBQ6E|2>DjZo=(T+2t68koJa?lioiz$gfNkhL@c+d#Sd&go7K zMUv$9UO^?@eT>GWPH6BpZFfOu_LNgR^yt?afHw~LJ5MYtn;z5S2f(xbC70iGRST6u zW@cRK%oAZo~7f1)%S>Y76NMbE2U@eLi>FrK>x8|7Ts^n=j_jQPwpb z7l(>fFV6-BQ&ZWsH)-aSifLz01e&x-jCze*Grh2U?q?+bPR|ZS4P2|@+v2(C3E;Ox zx=Z1&HBw$KjZzF>vVM_; z-M&T*@$|ogRw3Dz>b51n;;1Q=IY}PEnEd;u(C}C))2ix9^hHriSqQxi3}?gitAlIixF7G-6Q?_ zIvl3PGVp|PffYu?NoH)B?c6NEQQ;@L46%tSnWk8JH>N4YS|v4TTS8nC;^;;BXUIe_ znkZ&Mrhr^E8l>r*Cik%CdK(GP<Gqw*y>ja3sR zIeTSWTiWxWLrZ9Ih-?vTG@uCxRr`Y&8+-PZiAr5VCmjL}7z7Z?bavPC7qmQkRIjk8 zr=voi^ucAxUtGLUjutXy|0Qt2j!XmnnMqSLK7Fov-MSwYghVmjBK0fLk@iIuMUd(w zX;J>fiwyE=o&S+s4=;wOn!s6+>{1(^W#{-H#bkIkvY%>}CnAblaUo-Bcvi+~y;_y0 zj>f!|%;+MAJf>cjkltwg;rmpMK*i!|e1fVJ;P2vMj-aP#g)J=;9VA@{(iW2{v9`3a z_=tp-12aGP4v-m?w|4$-=I$#%Paez)-bVt1`q`Hn1;q_LQ zdU1ME12`V_>oi}xMyw`eZ#@slD!NtM8?xxyh?8D+6QnoaB->oh_Ny4UJZ_c2 zAAT!~7?o3qxzwHKeHi z=Wre((w`8M!#xit!QaIK;Nj9pj8FDIVJH)k2ysrS=K&+YAG>QSdywYY7X<+~Z^?B_8lC0&bmlhD=3!NG@% zes53jFCfRu0i>Nw{{5|9So`jKFMGH6EP?ICX(2AZwN}*QAq3R3_rU~3{HTzMVuL1! zYf^APD0c(9##$Sx?cY+Gx#Ds)B0lLd@niu*(*HSYCJAF*5bVc52b2O6=78E-%p&{c z$Y3A|7{fUo`bq4JsTCbV5;r6I`Bfd;coNG#0h(S_u?#ehqv_dmyP1ZDul{*(pD55^a^)Zd+&)u#)g$a`D=#mL z^dKvm!p@IJgfafPxVX4oqJjceNl%U2(@J5X^&0diC8a|lM;KE$CC@=; z3e-4@XKG6E5(Pi-G$cQoR;@&Rf5|r_WL@5wD7%HrXV)o3UOcPOU02`fv$JQ3m!^$O zM$PDygq*j@K$j?UA${#WP!Hb~uu<0U=`yokTwFBI#h#dy>>>0Mp)1{0>ezi#Wl{W- z%lNUT0mEm+(VnIA`@Y-5Bc#*UacNvL@I2eEqC7$l8R6g!v#1L`hN9vA1Uj^bf5>X|MpsxjZ3c*Ue2}Po*F8_#v)FF#eT5(#l3-F z1do%iue`}3mg|onUUGKkR~j$h={B16-0v3)_JD5!>$1|y%6dM1sg;hClk%qkt?zuc z(UeCq9T$*1(DVMvG~XgBUW8xk=07>n6u6kqi5Y8EQKD{2FEZ@p43`j!De0-B_saQv zPrp}2*2ZE1N7W8;WT2DR9dWitK+a#X(?5&vcSn^Y)j)2uK}ipT%C&aV%QQw>X&dnQ zjrs3iz^bDsXjk zKD46}oVv7EZQ6P6U%r=?RZ*_zlR@-vJ^i>k<6){2a`!nYp}3dF-B`#d)$yNmwl6_l zA(3_AVkT4e7t%Q_^%XnqKhKi=TJo>hgr=Hf<^sLLl?U_r<%`3QKx%*lL z7cOC5HV#AY88bSzm?J^#R|m{m6#&M|&-tg>O0-d(G@K@q9@eIGD4OG>u;jfe5LfkO z&Pb4H58W`+KJFP3?1>EL3pXIgPI%*WYy1h}vJfjBHkMyQ#i!SXm8zr=c;sy?OWx0Y! zsu-dScGHtCG(i4Df*h)p2kdbtCRx#Zy=rcsqhD0Bd7X`koWOb5 zX9WCuMGHhL zFi}s!l8;6K`5ixt8eAbAwx!d#=o6I+x?Bl|K3S(XO(tPsSr*J`t~qZ8-yV{y(7fuG zS61fQW8*Pz0y1GlMuThCDMkO)0{Vgm$fwQNIXhpUFOMo5hqK&gH7AUkLV`nR)dS3@ zGX;IYn0WXvBE!VLd|77%+i+~)bzfs$St56LF6B|O@a)RjY1!IN)~m229hKgn5z!oL z+3yb1P$T=5N*kKAk}Lym;3URrs;Dj})l3@+&dcfLZ{72;L6l9p<;TVf zUeuFXR?K=cv);<&biu6O^r>DcKC=WEvvX!m&d_`iFT@;Vl#OVoh`D^1KvWja%v_Ql zY)1$GloCR=RurTTB2{)#106+84D6ZIX}uf|6JH<8>p3m`J)Wyh7s*`yYEbo>c`27j zTckx_w|XvU?)Sg(Ny}7&oA1mIkZ^NpA zQ)}QGx}(Rhre^zZ7y+r_04jC1Zv%$SkTW|pu|+9F_Tx_;*whWn$QIjE40>pI62muGYIVC4!DrWd4^+OJ1&|I@? zs3mGwX{>0eD=WZH+>SuZ>?1{0<6VC)AKNCaP7Ll+q{C@nP;dG2;y%!wjNOKHyxv6? z>_#Z$HL#szAOXNDHvGG_^%-pD`McPwtNLO`0-Qcq0dct)88Neo`RsgFj$FXSsd80^ zQ<+b19So9z0nEs+cePrT<_fM6`E_Rp@&pjtd^C$^JZzpZQEUv6T6jHQn)xosVHf6^ z4hw1Kcx|K&qFr-p(h~T%XepE56prt}L_$99M?Hd}#!@QeN86GHq+XD7gK?l)VesBY z#pVx&&*&>+v~zzW)RO9!lUUUljU(*!$|YsMhvh#2_RDq(KA;>68v>Bvrawq#L9`O1h*=y1N+|K)SoTbI74# z<}CJm_Wo|)bDi@Sob?M_471j~p6BlPJjsx-=49L)Sm552oyS0Qhc|Zv|ECXpPKy2+ z?)Eu{7Vx6Eo*1RmZ{laG683p0=1CD8V{RD{EG(jO1O{Aljx@(**Fa0OxDQ43ZZ(ZtgJ1N&;|)a0*cyCsR0ZVv^ttE z9n56Jo!t8t-2JauKW7}-P{=%y+lp+$1e>y=+dhh+Q6X~~pvV2?+0D*QHb3DR^Dvb% zL!YJw72g^hJ}qMPTBvrk&HI>@Q?PSf>j-yoQwB%)1%%^rpTey*0#QjW!7WFoN3_~> zb%K$%MtKK*G^%8-MolTuvE57dc$jXB^``OAcoE!Y`O4|+JC@8~IG5+mOtN-vNyi4i z&9Z>K9h+q5lfG>1<(lwda8Hlhl1D~6y&liamY;E1^)k2}r(pTIUp?Zas&1i*4z8+$ z1FAl7GoAA|!a|5Iw_#$=XsrBs6>}+c_u8a!KL(97Firhh))V&X2;K7{B<~QsZRIaA zI{B(TNC|@kn76`zjvD^0&c1-SKfb%O+cCYd0w~v|-w&1v;P1+%X*7JsonZp0Pmi7M zwdiFlfknO(_6aC{JP)9(a-q!h10{*OdyL=Lb!J@_`TJ=sxJ25$pZqb%2B#& zu`mE#VpWRl3#uOF_w2y2uQo+B3pT4YRT--O{>v}ue~r?X>#5zNufRHCiez7Kow1K+g7lXs#9s?~Q6s(e<|`DO!v~ET+#t`c?6PntfC# zWiSdk$EgYbf(7q}F2m=$N`Kq4#>BlYFntU_bz)vqLcuVG&{iMEFTuf}C z@n8tZZZWr9HN~TFsB-#Kd}N5K{+f(-10!*`-;c>4TRV~-l|^H6g&aiU`LCh7DWs*O zRO+3KRhcMAii!CL_@AGuNMevq>^rcV46jCW($Nj4@wjA^k4(%-x66*(mG<@YMSn1M z0^O^%MQQVSz8-1_q@c(OMjf_ZhTYdp4~B(=JWP;MT*}Idnt20Lw`U=!B=7}o39ly2 zCCwBbR*`WR8Ib7tSgE0CTC=ctb-F-7=~tZH=DuyAc~xy?5xIyHCa;E1&aX`bHN%v!jon;nQ*1R<$>rZ`RogPPM)}h~fgdhuf!l zZqIJ=uxbwqkJEp#-xkf!@z_dK!WKg)m71N!QTfl@Cuq3!*R*^h?`93xvfB9&2=1~k zr*J!CYq*ZH#%CcL*bDTiCnOL=^>mL!#@J8pK%scrG5`{U>xpX1^?7Dzh!AY2eOU1R z=ijW+DrLaL*+=vBtKNrv?0GlstnW444tYtPK5Lm?=@m6<=HP;fRLh_yS_xKZ(u7`* zX%g;Q(2*15ndbSlz!O*}ovo5i@q0RGwc4H>RHsKuWclS`lVzM+vQ$eo5gNyVWV?n) zOr)om)HBhqU%!5ok}@xe;g_n1EG<6!q=0cip@Xk3wtutoT8YSHkxCBj}>As>OR-koxz@e*B zk02GOH1BrGx}5`t`@mOI^NJEVqhxC-G&z-(aPb6J>xXITvv^u1-meuJAMyy5NyOZ< zhiX?HSQ|DR8g-OcOwVA3^n2;B`(cmGw?CA6>-g*FJ~u+sl;hXpt?~!2*Y`;)xfss* zmcMOOOoKjrY&c5AKkPq&oy~u#Rbya$=g8Q_Yrjz)`jJg)AdVW*#vjn6Eo#>j-^D|A zj;B`XVtS$XwU+EAgL{#NSlHO76XW#O^}AgFOu|u#X6;Da<6De@Go8YPo1=VMhLrQFt_lA%YDcIV zBbA8m^9 z)+H%k%%AR!rAw5xVu4-{9Qk!*|D5;)(4o%>+Pjd+8JnHnqI($(B(?X>?|EWLN-3e2 zBY&<}FH2(W@D3%S8? zhpXAV790xUC?qF@6_DRkjOU^-)W=$%F$L~=f`jnP9rlnH;ajm*-_?9hP1*w{xe<@es|#vSJ;W= z``|3@#k=q+q;~TXe&pQZdBH`PNVtUQTRP6yY`pqA8J~fL0Bv7T*KKQ{AZ2&_+Whh3 z`7ybjn-Jy}G1cGgZ$Q>)$jEB7?z3w-Ax*^M6r<;7r7f<{xU%{h?6-FnssH917I)b^ zhp|u6AAT-q7*|gvySmUbJ<+Riv@dCx2AR#NDtPf8wi%I`R^>Rn#)t*b5y}@Ha52iv zGxUWj#OQ$Ze=Rt5g!v_Mmx%&_kiLkVV@;=74*r|WOry{0#^Tpt0T4>)HxAz0HV~YA zg%U4l*GD1+iImVAcHTQe6XwP=M#cuc%b>~YlaX0=hv*tbzQoskt^L#7hI=MU5@Vdq zt^jSyma87vW6@URnF|yW42ko$-LbJP!R>RX;-}Pb%DPVCb(-Q7QO~W^`0}eI6jp(w zEhv83-9d;da!{|!O0Nmokc^cKGjdp}Y|ly_ehPR-EP8(IjRBiVS7bbW;Fb#Ig{p$i z`aQ*iZJ+fxiaoa}>ZDz&qn&ddrq{7=<4?r?;QAq!-;q`Q++Vf7I9=h#`BEmBKOI4f zC++Tfm|8Yv#eV1~P;7f}^~G&cOG~@oa&rpZ zRSfzN1Vn!x04~gqxT_`5#9N?f{{&GuBEkp`yW=~m&ngmm4aHJXQu4gm&AVLmf&)lB zyvzLj6q)v*;jZ^JHvz=f2P1D|r2!nd&FQntL*aiQky?){>*h2f%pZ3ZJeDXbL8tz1 z`r_`9=+3+_JjXh$+3~%jo}$1iTzQr%VxOGlGz-NJzGD6rPd##u9cm0dRT8e zPX}HjdU}Jgpb#a8>Z-qU0f0L7Fz@l+b%PA6Z3Wy(n+!Q+ zJ9+uIOP9UaJg%6G<0ZFiXW7(wl^-I}?&JNM+ocSJHYQ)6NKghovzugdLWioj5S~B| zc`xEhXspS>xFy8)G3F|9itidbEj#5zOzu6G>n^9%cRT{9yDw}>K83X$b;|X_#jF>u zn7^rA#%pTCd!rsGGcqR%xq&>6pCA+Zz9@j-kU znaCu=8kLZ;aVt0SSSmRWTd)WS|oA>o;+Yoy@}g?7{MDG0bsR@WNgMbSC^+>V|#_$lqG z>*vd@$mM>AmmIKx&%O4FpWO89);ui{PR4*>aH$w>wq}JC_(vNra#Z`C6B``VIq(*3TrvQAs z8gkylXCccfD=S~*S5-+fS6WCGC77B8hJ`MOclY7R@dsH;0S!ALdCx1C)kvgnGGHTx z+ehlk!U26lCTD3D8u#69m7*XQH%JFRLET=&WxCt?9CKP);huy4Aym@5rfwl#)K$FB zYrS`)iG+-OHX#J;39B%1#`f;lGBqV6mApRB?Q+fXxqZAJHodH;?sR!b)|@A}D*<#o zmwBD{tHNLrz2mtScQ^ZoTucB1PU7o^rn3M}SDD*FeHGwZPu#8naBsha{y{d7cqUWP z_7(TOdBI_|Knaj%7mNr+0BtBmWoGENs|U?D#)pT(DuPpY=Co+;*~t8M(e z-WT)Nr>Ewe%r0wDR9td>$f`Ay`Q-$ITe+DrZk(`fi1M|sLlL;h{V1)|vBmXpRMRfn zm%q#m);JA=j^*wzH{@L2^4zxurz!~D?nI{;;ielIj!vfc>s~H}z!#K0ATW8gcpNqi zg#l@>be)E1=qEW#M`j#09XH7GKg;w>SJtEffgGP%R`K~J#d-ntZ|wS)1Qf$)YkLqr zL(e;6)*ZAPyvFP(A)*^>WPgd4P`5`~OdEDoLcWi~D9(_ke~G5MCkiVFLYdlZxol)V zej_;%@=A^6O`T-HwvB!5&^v|x#5)pb+1u8x6Rm^iq`0YIdAGg5dnFz}8JqJD9SF}P zqO(8BKhO1f8@M#*s$yQkg+(B}_EEj{Yt4Jw+zj=5aF?)iIIg$TFJlo`xz7FYz@0z;QZ}n0YB?y zN6Hmts@~~IM{$PNcu@d=>JsWnz?~-|}eJajI!xa?B<%82uRi6~Abv zZ2FxNyFetTR%3uVCMo~{1p(^!EW((rLGAZsUY*)N;}&(uq-+4ezX1|GlUm!j32gJt z?EMe*wExk6014jxNa%vQwG+=mQP2pAa)oJc44Y@n3fRV|P_Hom4R5H*sP`{fc>P;lGXN0>1kgq9nq^SA%>!A z^%AG#Nvpb9QjEA9p>NLmlm^_08Sh`e4ECd_kYdP*&pp9~)YhtI33I8N4wk z916bVAjqBM+|#IjgzC@mekgtCfM=Qzf&YI%O7#UEKuU1{p&nES2Z2w=AAlPFx$4#@RP*%dw4*{S4x1cW)3MQWp~ z`eZ=Z<#ZzX2}W+n zv*i!OvSrTW>$nIk23JEBdW{K`IUbwnx$Efe3#k8f_myc^;Dy|^_fqWI913e!*%=?R zDk1C$bg4@I9)r)RF6qrL`d!JczyGgyys9b1=5|$gY^S%*T7PCSFFw`1wYZ3nfUv7& z(7sqy&&*cJdD%j0HNqO^yIZaM2cZaFtL#2mT*_PoWnYfU-}Y;7h!&xPYbd+D&VRg&0-wWU?@6&E~sK=d$ zNpx)A(F<@QwBqL6-l60!P8O?55Ui)Bw4HiH6g{^qb%^R}bLyM@KVBvt1BIlye`zP7 zvCU@iFl_dMm@U;=Mhf4)0HGCm)Dp9`5>om_s~3;KOEiv(l$S==lmw#48QK0PN5Y2q ze6s8>0)~GRA4bxq*R2L8oNhNeGqkP7=C88r^g}Dr5lT5Mrb|e1nzT@e(DobRhPU;! z3SKS6aI=N4Xk}!?-?*%7Bzv&1=0uiAXE ztHJn;`G{Qq;c zvY4m0j`Fy*vszcUFgn+OYcA$CYLZn{|4_G@QfeIz{htW|0Xc4g8W-P}}UP_A>% zezoLl+{DhKw%zgekOL#GTt}UZ!8tZ!SBYTbPc!AMi&f+Qk#9I z`jYTfYk}Km+(+b)Tvc+&5jKJZgKo1o4d}NbdAqugukD3+X*GtAeeFvVBBb={(YUVF zy*dIx58rdylrf&bc5@BfX+vT0e|s7T2n3uzg&Ez)m<2E@~EEEk4W`&fL znwf-DN@A##K0`#L9Kn5TcRVMDjwW|6Azvl==G>+a%lRyLLEyPLt*=&ZS(J}xIJ5Zr zeTO$}>aAD$aP4&*jIA8{R*#{M#btv3q@w@YyOq!O)Hc=3p{w8xb~n*h)o~l`4bLYF zyrN=#PmKF0T*kuC7IPU5_L899%OLw+*G{R?aHs05W@kv~`?sH-`%Xl!IEa6KMUEkQ z;&qM>uHKctRzly-WoVDzx0%{oF|k?Wt90Ta(ec2swf?v32AGv50HVCc88MK4Y&QwP zU(--~@?FX-aVU+O=!)#(isx6OcPwW!(>(hhmIQul7uiT{Uez%T(RJ!svOyAlIuuQU2tJk= z$4;XTqPEp<_w+q1Z$ z`~9b4VJY@|Bwa&e-JY7hn#A7;FeV|=rh=V`Rt?uz8zmwR>Ww`(F0BDF0Pc^~Ct_4l zRg9i@kn7r|EbznJ+4-vt%p)^B803MJ14iYX_C>Cd%n_7W5{ZoNNmz3xv+vUaB?w?ZMnnQ#3 z(JX~tXOk->ue_@C!)GmWg)Z~0ms9G2Z;a-S{DKLN3Xsb?uw@tm&1qjqcP1$rUgND< ztR^iu0tgKxErk14E7p<=GMOLWqR{;*nXSiI-0|)J+F5LfHCx9!m*A=z%hE>*7te4K zJR`)|=bE3&%o${;b@NVD2=ebo{~E0}r$9@$?~2Di&CWf6pVEiYM?Dt*FEe6&jLY5B zXU+XM1t9s!&@)vCx`~m}Yn4tUIrlCXdpsG2ijFa_xabuI#YrYmjsMBZ`Qy9x6O`JJjvqJ1U;}MmE4_+>exZcGL-->l-|`A>C{Zt z0vO4HhB$IhsocV3BLnEObTgVk_XW$ z4!#OVe-X@iyy=@_%zNdfE~xGc3kgO4(E}x3!O+&u9 zrk92PB|@+YrqOKf1V|bGm_yn6~ zHr#K1{rvc9mEU90v69cLi*Kp|xZ~|`22~?AM?*B@Xw8!v85^wR){?rBpI^S#GQ`<^%HGfZZzX_l}?X9o1vF^Ywb9`9nua|jF3h|o<9Ry>X zqCan4FU6ga{(J`(_XS*Tf;9|p*Kht}0zzo*mG0%^_Yu>)a}NslRtA)Z7`WZ-I9kJ# z-XTm-3yGcvLcf1s05{t2N&|;tlpQ*LX=HExFqf-ndlGJMK)SEi-KbkyH~3h5?%eKh zX~4sGsKH!t`cL`;B0-3OXZ+AwWSVu_hPK8Sezj?%Ck*}R?cr2$Y6iP?GR~IhQ z=X?7-#&WM;O6NSnt`K{R7ve|Z^Rbl$5zu%m&--~voB{`}sx(XRfU`2J9A_XKr+!$# z<6Ivbk^zyjECFx=fnIilL6_jCd9!Yu@x*W$&&OT#^1*+xuxG>JUZvWReCTdML7U}@ z^t#@neW{iNQ1J2AB7E^0UnUzcVZWSr;Fz?sry&9#F1O~!QUdQN9o$3A$&wCD<%@9Mu|7h{Ch{? z7jIAg^e$AxOJ1h?fq;AOKM0sIOy@FrijiAne$76somXN{lMgb;3gt`nb+q>VOAWv# z<@p%4bx%Ug*{2+9=zV>yh8oL`dep<)b%hY~5htZ%19a;&-d0VTJ=7zc+wFEPwVeQL z`hk+_ha*qw71*$ECJF9G_mdnMHP*ZyHsd{9@8B_lcNEH-*TA}S#2?K}3(vo#lg-0T z-#K#%5W1e(+N>{iJ@s@!t4JRz({(hnx!|E^cKAM3ZWUj#X6GSS9)3=5xfoMwOO^3B zRD*N?AFcW!yEf`MI|Q7yfdKRM#FFsxqt1}+ip|N?#6e&7OYzrb_<(!eX0ze?Vr%c4^Q#iIS<6)Q_!Gw?Rx`D=&=Iv z+iyux#jY)BLkiHMM%?HdDSyk`ID*OeEOkn6WOe*G5MNVRxwG!zHPG#8|;nhf|IC!sFo_B-H=Y9VRP(Nhf zowj9Z({xIc9nf>{m+nGD2nq5rGU@TEdcRHp=}+$r{TlTWMmf8N&lIty-$kAv`Uo$J z1Yk1mr^Ct zDc0eEfCLd}+?- z+q}W9@Di6%;ykIjnx4)Khh063hhA`q1-ussO)N_5){;M2ds`HOnfJEMbr9aR((S$tNx0LQd} zp~m%e-x@7mRXiEzBbIIJ>KB{_=jMABwD$U!v&pKq(}!+~nk<4GnsiBy+TRWi=j<*^ zPD`g4f+%FFpIzYNCZ{kas{6R?B8~w?ykfeBc}52lS+AR}k(1E?>1abr!CE|I1CQD> z&{$Bwj$=DuKs=bVL!6MB?R%s9Wq>nSFv&|KdwJ> z=7D)_g7p6_Jne!P=TZ~#VT4_zk4X=Vd!jiGqY{{RU>&gw#}lwZ=8+V zg?7bzYJmHi+i%l;BoK_Ak+V?t6ibI&ZBhf8ff%$>N z(Tu?GLg1_$3<=KUPP2+gnWqn;j`lp%15kTx`cIw!(*K2^8@yygWm68$N)wz@b2?Vg zi_k6|h#T`N;cF>yJ_P5;lSyod<-Bw|w1VK>Hyd)$BAzU0exHp&AL2Ak2)>n^wm7wj zgUiWzVqW4kM9Hk!Xz{C`1IM#j7jH9dOA7Mp6jEUAcOjK(D4wqgnqMYAZl!9qStMG| zDiN4!!4aI;(_2fq#EN|ksC~7OM^b>@$Y$fEoSdHgn_m1s=&kPpFC8PmRu}u&0XOSqkXc)M!zm*bCkT z_vL~Y%F4FKfMVZuZF2vi`l4N%6q#kKM+Bwyy^EC7v<;;Hfp=@kLs+!O6VSwssMA zBu!T@JvWGBqeC;G&eo{+DSrMXgs1B2v2MgN4*7+dP;&{zQNqo2x)@Ug4Q^iYbG5SW zb(hg+w~nHK;abuLF%N-#zumk@f5&s@_x`O?A%`FRs~-={!7{L;m;JF|w-rExBz58= zlzx!PRGZQv<%65L$VoK2v+LUV#nMseO^Yk7%)%Hcw?#>tp3n@I>{Vrfp9=0o1}Bfu-V`Bm!t`@*K#>l1B56DQy? z)TjfNrL{cM7mGByUdbUx13RUnvOnA^K?Hd37SwD>V3R% zbJ0gM2bV#G?{*u9eERBB_H6e-anI*k)!u!OM=_oa0b3EXGREEJqI97u$Qh!68 zrKU5vN>HWAFYXkE7C`<`KdRBbrlOZVq)C&HTvVS%>cmLUo@HJsyL~l12hsGr1_!7a z1R3M^_s70}9Z9e3&}qc>kZl!uA4qw_8i1j|t6kN;`dakygG63o{z2_nsE5axA&}v` zEJH;U9xBm|Ym0{)Q*2|H zo5kT14C*(0EaLJG#*BP)3vSqBlB1jb_ew)&Qw!}B;6lA2A&uT?rHqr>d2KvW7n$MnUBO}oH?yT(s3 zm@Sprp4BVepVYRhJtC);@fTf7G3%%?_e^%aBsd!W=r6rFUG}2oBr50L5?3KS))sCS zM%;4l%KxD-Inys2NyKyOWuinXS9748ww0KLG!w#ii!f- zyiGxqfL=7M0;5_UbHVhwsRELr>Mf@wu18J};U>x2<|h4X@BJ5ycGZBRNP#aC?(|ghJv=x$V=F^J#(SG|!2nb|5qq($racbH}f&^Q4!A zI8Bu9w7D#aFbSvaUemVGv&8wfCW?9ZXS5F1m*p49i{ldbPVbJsCWnci+ojR{JXU{m zSj%CW5Gf^!dnv$ccKCCT1~&Pva1n!&4G^#$0pO^+I4SkG8jX`jK+JWAOq!sk@&SpK zSBWQJg@pFOvaDGD+bv4Ucy)VIIE+H#pk~}8Z*z3XOTV@CjwSxxox{7^-?Epb>PMDP zFQKUJm=J8PQLqudu1=ap?X_>vkxZczDn2T5sasG;`*|XnIreU4L?%`C(Md=jZY1 zS*Qt{vK+wR560Af0N{={bM4177jSqpS*p-KtT?;FH*6V7hkUbld%b$?559;e^1q#W z!m*07vYV9F)$q{DP`B9C-??etrq=V99{Tl>`s%l4%2X)(P3SE;*Pq(M3o54b6H%(N ztnV{B)Gd6&G)ZjjU)HI36|Y9rK*)w~{nwXiI`%!)%RIW45}=(BXQtkAF;NAC}%m7IF(ZxI$OyBL;3%@7FY%&X; zb$7SSi~Z^*uffhL?q$r$*(CZu|C-Zjr7__7LzsHf^y$=`?7pp0@-9zIFJx9Y;tBo%b&u4E%!!$w~ji zgLgcKT0bWUnMhk38!D$#Jy%CfZ~K_dIAx_Zi26I^!@OGRfio=fNlI&}@tY^6^V3B36YpTyVU(zquK`?3O82$KwP2GT>|RFzC@G3mypBG*SCh`c3Wr zFnMt3oxd5pgQ zaO1Y4-7GdrgVpSz%|rMq)Q+ie_wn7%|81W9K5df`i92W zAnSX&SN(M$SFy8T^l=r5`s#T9_&cJhUw0TZwMA51gZ2qYEYofFsx^3IQpodhC<`H|HGTa;Lyg%zdk&q2q_-pm8=H zHK{ok{ZR%@V8E^2*VEAp8Y~<1(*{>z02sw}T7X}`wXWR0-juQVYh47Co}ZOTr!S7} z-Sc}e2Q?puMVn|7`+FUK(US(nU0K&Z2_KqwxI6%o82#kxK#JjCmzLm7jQDS~w#t10 zB>q~q{mK2uh`UcgRUdNd;d$zCb%GVQ+w916p+wtb=AcWyDz1U^M(5>XL4%71uYQmh zle*?+@puku0vFBNP&SNz2v(yPL=`9642a9WuKG}D17i0J-00&aM@_fSGcB(o8U%kQ z8XMGDT-SfKmN+fT{g7>N@=j(9Je+@f%NI**HecIv?p5i@r%bU~1Y|()FH{7e653CL zu2yu&Zif?a?_(Ms;SRs_x)WIoexk2uF=7qZT?u~UcvM<;(^Nm-JqyF#v6R_134Cz; zH~*~SuCP7$4t%n0AA1Msu{~ppP;vN}P0^3Q_7`vroJxq8`27w%wG0^t)qwpC?8ZyD z&Z_8UusaNQs6Gy$ot6bJqk*Puc(Zs+fvw!p*k`57Th)GWsiS3!;d$b`^cvhlS1mW?MFr({K*y1Z znANPxy_Y$0zq#2VtOK0cbhu7Ic8l3hbUuh4{8O(?-7wUN)VXXcLRYBa{_DXJp1%$b zBc+J2UiIFV=8nREzvcF;1sY)P+vZU6?WR?Gei=sNY>mmMytvX@^3RSVgR1t7aT4uy zc>})pL`3#)Yi=$tqiVwj3>2KWV4?%xn~t??rG81*Zv*1y4ASjBi)ZZXt_tQ(v>@t^b*v zu9xEFjegd&ApNU3#V8j!sDhoSJ$8qWhyhcH+t*nArK;JMzL&1e2xI$XGL7IxnXzQN zRllZel%bk9MO;n!NsJ5g9}nhu(bc49?@zM5wo+S1i*TmZr-Zdk8mb`HGB=AujY(=M zbitcdTn87=-3mS7;)6?br5EEs%j`RkZ^{dBO%hH%jjyGJw}buo>bkef=H;NdgYZVW z`wQ*KGRq0&YBv_k`Sb;y6QOx}-s#Ip>{shWwHM*pv@rfwc8N%5IiF5}WJeO^{kz6pG;1b4Fpf8zp`v|z^Z zqUMu&U1V;Zs;X5!#6<|#t&eO@G0jCztuL_=q78w!nCSNRH7ctf#bSswdhq{rIl6r3 zmTFGCB-reOR@3Go@Q|E!&Wca|^RZf=O93@{StCf1%Fxe-=KKsq-|VY)yvrDADnQ8d;48j9{PUPp9%d|1?0x(rcSo# zzW>SIw=8KlKAZO>P5iSRf@J{6))%WnV=T!~&QUEJOKm4tR+1kQ^oENH)7Q@q5oP97 zw~up@i~eMdfRxteF`jR|wW-}h+P!SZHi)g8zNY>2He6TUR)11*_dVY_nVq4ZH^ug& z!bFU1o@@DkQlrcew0&?#Un){|F16bGO{eLo(y~A6HUy{?&K*^cYu9=!NTftddQZ?y^`KmIAa&@zNGLfB}O0=J)UCceI_Oyxry=u@-j4RL78SZreCs$*W~z#*$vh40a|lVm0AKG2SD zEmrX}54x_2h1HD5l2?&^bJwpdxzft(~&y*oba8DFH=HMtZJT z3(D(Mw@69;FgT5N`$AhZq_j&47#=1@b?+3k!5=OtlJ5rxKxD(o6lDTh6DOudjQ6{w zT)9YE+!|{`>JbSZm%cLHZgt2Y#n72=b|GcvTiB zLVc+{V5FB!eJBh(THIfO718^ljb%ty{b|^9$IB{_$bgAo)o{;78QRoM)(p8}==2xG zcMv%6_muTq8(R3#_6})?!|~PV6ZPkwC&!Fc5`3r_s%j{J-ba1&EBUSG(3t zd#Qye*Ts444^5WTBmtUSc7}N;0U74mFkA{_iskQr)i45O0xP~dsVq#;x-Y&i9o3fo z0f7#pih74jx>CgUzOg$>)4ko=Ds*ze>O+*EK}gYFN!v)2XFouUXag=;y!Cvga~M>G3h83E%QyVG-fq91r#mnifX;4v&7@IGt^M z_X!2+wk#r!S4?BLI}Q>Ysd4d=`tx zS&*>idTBef(m~zdqO^UdiJ<4C$F9CUPdG;&H2*3gywQI5w34t%3x`6?m=(+ zRU}1XiigxFU&-qBLTnDAz6Yi4T~@)1dW2(SOday0HqB$E<^Qoj1B{vs_N) z=+nUk_l|=|La+gc_UeyTRmH{%CXS7^yIb*Bl2p>EUckvMpDRl|xPe&XnRv%RpcQf1 z;Y2Z`+F82&I$4WbbZ)mmzONyQttY8Q(@9Z#5Ir@u6Ze@MR#ZaDLc3@6ASy2>@KtZY zwHAR5il0NXipb8cyzM6DFQ%1?*(v(Uhl-GkK=0LfB~W;~WD}VT3jR{Lo*(8(F|;%6 z`(94Xc5U00cZ|@J;eHrBbgxPIc}IWmM`y}%~R!b>Cyq2u*18l85++Sm(NUFfP? zDps@EMr&sRPWVQ6zibpL{}Ma-!%Hq>vy`efC6`Q*xL6_))i({}dD-NIhegPr{H1rt z#trC%Jd2}cbbhrjBk9tx&$6v!T zt9869#1-dQq2PGw7HPtG?Wlr3?eg75{dropJ|(kpGW>iKC7Q#ncS1@vgn}*6)1AYN z&00Hd){~i3o}pi@nvE;XL0lH@oS(PQVi!DIbbb32!CM$x;OGPw2ZYHSYjJxfDcKWC zVFe3r2oh-zax`~$*FYPR$IM;7PV~*Y)&a z(P+)Gp$$=UG6S-mBu;K<$L80d85A3?)>GJ&JVC9kEwo2Hy8wy zCT5F#*8HsB^ZF*q)ia^|o$6OnyIjg1vom-VxK)-IDtCjSYgwCmU0V!pZ!l5@=`4O5 zn|?!3wX>SYnk|WQHBVKov@bAa4qf>?zuw(Bfi(mKy66Vqj{@d2Q%RZ=jB3XUY_smT6y)k zHpBj2-xWi(lbZACvzAAMKJH5WYNu5wq;LP0s<`dUfx6!V{XMeRz8T=Ac!Pw?~bO&JN z)i81z?^)|p3BBaCUoxs`bvguQ!w!5KtF4|3+gb0Y0-nOBhq6|?F%>!^#w)v93I`Jf3Z^_Vleh?W{- z8)`nl8`7DqD+5DIwxjKSpLW~hh+T}`H7|5Gl)7i~tgik_xt zEEa3V==$la9}#!;9xwy3eD>vuv6HNl-ROZ?bRc&r1{o4Gxqca5i|2fg-sm7Hg<@_# z!@LTd>}b*$XikJEc;0UQ&~n2!7nrfA(z2WwzbdWko`B*-4}Od`msYU~e6K4n!nbmvahYqW{jG z1Eg++As6sFbGLbMPmG_2=69|bKRsjQQiP~NBa;^A-P6$ococVo_E}) zrOh-n7|qYW!)Z7Oo4XsCKmP0U9v3vO%CcXCLq8B%W~Rk!cLLaBi&Z)Z8t8bK04Z7jI1MFg_01XItQ<*7geM zJmpp-Y1W)$PnlWFsQ>A@Kq@3h14a>Ny9p!S4T(JX`NBZR>z9Hsskp{c<#k{CQ8CZj zwd-fr>kA~4nG4U;Ntgy7p%wIu3bpewLhH)&!NdW%pDGS|b!As67Jb-}> zlbL~pmVL1y$htw7+;f3rQ3YW(K12%49~HmVVL1JF{G82}Z9T=WQi(WYQndEi)pD%`rjI$uxG3(WNb9keK7U1~?Uh#J z@nfYy!;^a2GE<8|6&;H9?bpofljl(wv?L5ZKBj_T)4>xbMgh5uHS!MwQdWWyB$_W>edQ`z_5;fYkkHGf4hM*b}hUTDh4tdHyd9`0YEk%LxVCL_)VkdP@~#+%4Al zCDnDSjkQ&2xYB#9Z}aDE4BUj#cN5uMT;<)TRpV3XI70g|>TEGFyCwHSu9^jMEiNi*3XPti{JJLP|m?hb+V^7HC(ckUY3J=!TaXC&gvP?_9nZ z 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 %Lo@epdhfOpSCX+- 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 literal 0 HcmV?d00001 diff --git a/docs/screenshots/logs.png b/docs/screenshots/logs.png new file mode 100644 index 0000000000000000000000000000000000000000..70a2c59e1bb0fc60ed0f5b330a4ba4158b5dbc05 GIT binary patch literal 221354 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∋C#{*5msbiy1xKaOLTRi*J<+$a`f=H70G#Z8v%7WZ)AvS zq7dVVmk^iurH_hwd;Go29^pnK!^LmJUOJ9f22E(Ae*iXq!?-p@2 z4(;g7HDVw67D@N;YX(P1CGjkF!E4H)D!coF&wqewl-CPT9}mZU;Nu(&)m`)1C4lnS zFlVJ=tz~i^%4W6hRT<(h!Md$Zf7kuf_m3Cf`ecop^Th9YyldoL6t8PBTL|q=-0YbT zvvZXn_eoYMp9?kv3STf?bS`)`JEj(k4-yR5m{ozqgl;G*rJ7L&V!5pjdA;3B`j~G{ zi29vz%AGvrA1Q8W%u{#bJIZ{3!WLMK54>;bbtSlL@R6(7?4~n*&er;sVV#}rvwSln zG{pBnK`3!;!x!IPLS5V((e30pW*`h*K3=8L{#ANUr95@j?cE!v+ag}~_k(DJ-#_Ka zde%nr#k01_%c*XU(RxtQ;jD^<8FAcvfdk2r5NEeOA^W~^v$n;~Z95gy#JVzg3C+q` zx=0x@9yPj$5ZpK#HOYe?eyua(^YKu^tP+pzOMC5j)~&AU%(txExFPw5(MCh=HD-D+ zP<^too)sXL*e^8%$jZt_XQ`+>eX4a3HvsT!TsKC>f7p9W)W|61%l4q~Y+*VEJUI_f zB@PFIly1h=?l0#7hsL>$qTk6Hq>q=nsi~=JxtHP#<36R&nFbi!lZ(g=&a}g*i0EYf zy`(0~BE*A9k51lnxdZf%+GFe$Y#LCr-RIhyt{^<_Rh+5BpkgN9uDBn&dN>yiRFYW> zq*^CA-ptC9uSEiCRp9dDZFl~WnfRhN^G=Pk3iO?gpHhGf0mMjJbNm8Cd#CL3QJ)hr z_gT}Rf#S`Cizo@!`&42Njj2}4bg1|HES>L^x3AEQ5udPUI5v0a@tb$%N;@>n?zMfJ z>j&I1ASp-Lu28%QNeS(eI>AU2mh@!w`ZAbSS(oLeB zRQ6%4SlG;>(__wYtFyqJkYgh`*5`D9)&mQh^uoeq(kaK!!dhy*!0W@iZ~a3nWkS6? zzNKn*-amNd@dTGH-`mt}EpNdVxdokkKIY6)V&^#%jz86LPRY;-->7=lRDEz=uxi!h4LPO$65yl%*E69{5kw+Qoya`;U=EQaLt$<>rm9-HE7s zOfDSY+sR*xcHD6&RYb~5k_)k455>DBtM2ES43nRg&2QyZ+d4IVI~XJc2s%ItskyoD z!~%Np-M0%@Zb$&i&Pnf8X)zA#n$6>#^6{GOOd30{r2tAA8k%<~XX@wb>JE1Mfpc3G z5YIjMG(1xZm%<4WpLaZf6|A^amwVTMlOo2x3h5@A)F-J}NCV;!eBJ4av#t?-0YHBM zDIP#y<+|^Dzufd|Q)ze{-AT*j88^H&Rsxv46dmxhMaGDasDJbz_7K}E`lvAa3ZH_TQA(Z83g#@AMall59>?Nmn&xQm0YR1+_kZ@c5I4=`<{)S;o)Z;tx!t=U?q4Vuh@J6}WwbO+^HZf$YM~;`_|-dUT@=l>?HSGb{62 ziLLdCf#~_y3W85Roz-h@Of0;!y@Ac%%>NYy*gXv0ZcrGq}3&yEk>`5}v5*QdW ziyL_i4e8k|uOpw-bHfhHkd2IyOM4!)$+KH`nOZ(!Szvw=lxy~ieq95j+_t>mOD$aE zId!?GIvAFfzqlBSeSxyY4$m+XhWJ$2o}jWMw*^TZ`7a-d8mBl+&aUX3J>m9Rf3&6b z%46B=oS`2;8!`e8%_kLPSPOjQZ<73j*n~oXo(^~l3v-R8BHVuo(bAKRAZ%1 zE&RT|`biPpD<>=PGu$s|(X&4?9{8U7PvpbQ)>))9SiX&`a;_K1KT;5V4T1#*1_IUT zOI@!%MR_y*UZGzY+*c?zcP|o};IX;$Z!Vy5(G@q=A{9_g-NOP7*Q38mZ4r4zHk2f> zR8)#hHm~o>u@9_TnSe^v0~}LR@dO{hEO*s*JK!gSE3DaBSfknUygUyHnMIWvVeVej zKnii`h3qw+FQ=QMrI?fTxUqGsbNY`h6oWbkt%c+ds)L7i6#|x`Jra#aYv*+hnz9c! zX{5c))-Eov5+*;ki_pxXbGvn;C#9;V zU2nDEIsWiK&g$lcG-zLQ*veo*HBe2_XDKkv>r;0&hsGfc%A}4kb#bwDbghcO3voY+ zh6zvCg1n};GjxG+8g2SKueAZ+z^u4cj>?0bgWamBpKL1MF1os%XjT3EvY42D`dJ_` zfGFJq5C~^IH+_cU32r$!D%EaJH5#4G1G^v}GcT{VfRM;p2oPTn4Q+18Gu-rQ`N!H* zhPCDq-UiV*tlaFfOYDfze3%=%0)-f8Zg5gYOGKf0&)t{*(*6eLsi zJ~+^=*|tnQN+K+K++EY}*yt^5{P5K%hQ1Y5kPSTk%O2aqTd00HP3G$Q#N|L$U*_PkkzP&^aMT09z|?-iz_fs+ zHLnh-i2wb?>rD39#wNaX$eO`h@!q<{>*AP=(cL}yjp_^@;d@o6{lIS9ypf&t;t1c3 z_{Y)^493wW8+loBWXu6xww~IM4yh+>w{|K@u@D7=)R+kcIFg{CKT2Deoi5RjrxvuAqo21 zU<2PE7k-?$+Is93UV*Z;2?j;K0DOZpcw6JSe7&7esG&#p!pE}% zw-?tArtYS-PKVfh?_oB20WcFMv+T!-;rE5u zG(#oNs#!OpKFg*K^s|xLxgQXpyXvr^Ia)Qi_SM$+%VG-4C7#>2qh-e5CS^-<|605e z5D-NOwOA%Fuv}0-S6#klA5#8}i6=pT5C=qd#b~)e^R>|gx#RFP`Y%MxO0Q}xHx7oe zC7#}pb1!%VtivW=0E(9{s4GD|1?K>M+M~|^KMf85CTLB7^G)XL+uuGnm>z8)Mt{@m z2nZ@3wtm&j8=wIYZKO!SE``k``>KfHW1)s)Mpd)HMaPbjezlFp2|3kKmQG+6Qkn5B zVh=nzf(^+&B!g#g^p^6}o1Bz<}3$m&*A6Kfj4O8^XF@T8!6 z`e*fMu%Ary3!m!dve{h#p7s0UrsX>{^;|IRk6FyN;^kvy@&)o963!||PtTp*`b?6L z&T5`{8RJsYo8(2~(k|dR{X9 z$TM%i+~yXXVq~uHJwRHM1%Q!7yb1Nw``4<4ag|8nj?ep>U;*4?nRrTB$#aKmzhE4ySFxnfcjw7}%26@sXZvZBo zXw=WKGgPx4_#%|qUZM!4^VuyxT$1u6=yq3+>0$U^D+4lllMi;l}U8^EQ z-=#d&seyg_8W+cGV51b%lMRrips&|!Fw_rOB3jn0oytUM-@JH&)B_CS|1;i1uGoDA z;>{nJ?BT1Asce{+iO1@)IofPu%1JtA>KsJYu@E*b#Z;0-RUR_PPWAamS>4b*_e6

;oqNpf06zF#x5ooA^6+~-`NKUWqefSp|3ygy(bAZl2&h=~0dS&YwvM54 zX?=l?A|;oj^-hOubqs7msCKl}o2eWe6sU{@_@x=u1(LtIH@)XESMBaC6A<@0Umt+B zB+@SaI@UJ#!M7|!a^9Z zd+yC{Y~cVCD%I%lhwFOnD;clPxg}+Ym5Uin_#y+HNl~L}3*AzAqS1bvTKmq`Ew*zo_It53u|Aa{n)8 zGVwv4F;9Y7e&+(+o050xU&u@XeB^wB)eJOd`orlp&lhUW&l{A)Uq>c$H-D}Wy`-=W z^WMl@8@qZFNaic|0GpDd@3St$`iYM-;D7E;K;%bMfF?;KDnT#sEiylb8s}?-@HVK4 zFfr~{7n$beIi+j7_d9l8J(*diZs*g!6ar(8shPBQx#vB&`TrAXujdbb=74WV@ z##r0Id41a69>t$@F654umbVQ!y;|?pmSr1neqs^OkSi6b_8OD>WkS~s1TMFOX%o~> zp(8#5Z~f>y_I1UW?Oz95e^)el-)|BrOx2hw9E8#il{8^`!|3xZR88N1qjdtjjoGEC z^PVM(uG;Qo$RECyusni0o%rHu@#*$FcjD=(6H~I1vYzAY_N#j;wz##8$(sxE-&Mgi zuM5lwK-t~g*SJP*u7oe6vV=1;s)^^uwal8;UuS0_F0YB{D2W3StOV!9{$ z9=A^&P7V|3c>eKo8%Gk9b$Ff#WX4N9;#)4{$}BIiK6&WV=gw~5QDf~b4qOQ$4W;uf?bCa_DrH*m-&Co>YRfJC2TTc1N?EC-DAZSvsAfX=n=l`yv~e z-`QQew|hB_sBx)&CF9>*z>ya{vW2lZsxY#i*ZZ4RG|3wr9RsZmLxG(odBgpV9tDfr zB2Q)qZDRvCiU#6k+a1eL^eJ2%Qrx@kBU+eBX5E1TTkVs&=hKJ#7sHz`7?ckL-}+cP zGZ+vZX1pDGsT$%wU#fAPZ@{JzDPg>6BPrT#?gt-!cgA$Z|n;2%Z3%E1S)~kraUTvbKjry zU1qm`1{M?U_YU?x8;t65C>3-zcBy^ZN{b{Dzd*;>Zsa|4R>l1ZM!Ky3P#`IPv9@6; zuhv`JZW5VgxAC%xZ>PW)etXd=v(5DsAA6hk;b|43`)p<^)S#~9{-mzw+$SS~`me0o z?9rkz_4D`tJ5sFph=83*>&K+Vmp2bv6hBJO5YooCBR`EniW(MHs#L?ZFd@feX7d$j zp6=9!Vy-~BT$!o2IfGM{V`H^Zc2DY<>xrD)V5l0o9l&=xb?p7r3W zE_N^?d}stPK?3maXKW*3AD`WGJ2uIDPWs0Ho79Z&9QYn&^;ny^b-jd=n>@ToD)P)p zhg%hfgd&kQ)6<_EBpFtpyqF!kw3WHElU1jq*K6{{=XC5??FuXL71!5@FR6lh&lbGp zJ(L&K5fO#YN4og)Fm}!&c?T45^eu(wQakLo+U^Y3SQ#8T$Hun%LTAD9WGIKF%#+U}Wk_#4^?(wa$^Wo0=UohUue2l=cc+KaGxc*RM* zm5P}V6xodBP(_ycw_c*X!^-QsOa@>u3lnEb{4E@~+QP&Hv(*RnJ{+Oty_?Ba?qkz- zWS;A_bH%1>zu7p!3H-8VF-7n;%v$}rxBhe+QUy7_JI9~6>^T8Kk`eIO0~^A$flKcm zAz}a7j=Ug4e>CK=jG7juPQM=dX8ABOuRc{f&wmqEyWi$hcpMB_u(us`FjbJNWuNWE zx*HgAtk5FiPPU%+12$U2XYAbR8v5oPt8nhhVGyKPwEDDbWzE7$Q!`c+FL5#g;_9~U z78x!%eKq*Baeu+rA$_U}uhUhM4su_NJU)PXWWH=`Q}{CD4^|Pxl9jR~ROqW-C!it# z7Bo`08pz*a^&$pcpCp$T`>0AN3;aa?`)v`!CMImL>MQr0C+|C?EZFtxOkSQIU+jx9 zQ!0-^O-2eumK(p!ejQ}V3Gw|be_0N_bEeySpk$74JKPDNn06Wp=t*~pl{#q0MC|b; zY9Mv1t1|6cQ8B1hrM!9l@A0A0cIO9sF}|nmj2t@STC9q$1J%9rS<3Jz;geOO6h?8^ zJ($jUg5;7r2(MlIe>Z?~$wVDiCHmCqHl&eR!FK>A1R zUmxsqF|`;z>RIf|l6Sw8m?$I7q9|Om*WfAN(vW)jhj3aCC&OA9#Vsp2rxJaHOZCY4 zH#-Br+SU9sr+6f;1;_w7<+tC2vK~LtpQ}=fynH*E)1W-{)poFib6XUM3yE_cUKKa@ zzxMJ_anilgtNxqv?5?&^&C4Qnw&U296n!AA6>iJMRa1D^Y`U#MQWd%(a&;u;sNBcS zDkaDJ#eUJ3FjexP>*+(TwYZ*8D0ivWtMTVc?Hq<5T_-S3^m+ML4 z$s4O;tBEORCy#U=ujg(cTPYr!jO!_%zv8!}nJdGk&hzwdc7uRtx#3Nv{YUPZW}ovx zBwgTcqyn+4-)-aZ(+(x33;I9!+?&Sp%)bX*$-g3GCvC9xz4j!-mDzW1BxyIVc0Wwk zBki6*0jxiapO%n8yF>LA776hW%bLrc0%#J(EaUk+-Fl3quaei2qi|Ihhv%qs zpMS_OOkWB;wemJ&wR%i0>^>dUK!*75Z4Y1O{T291o`4IX9o+;8G{oTgko#m?w}H#>e+E= zubNK~FZ77Ac4skH_Gl~J;Xl9Sr-~U`lW79pNE=O;R+Ht(UfbjdDVNI0kub6Fgwx8a z5Dhq=>p-LCife(l%gMKJ+OTHC%FT|`nIucywE_&p6aQK8$EZgs;jBeB+(<-x^!_Bi zaIc|uCxB)7`bHH#*DI}8zy}SUr98^lu6Ci=7&Fq_*!+!w`1K%uJwgC)M$76tfbw#9 z^j1n@QRHw$6S=zF(QF@6yFWUqg{(PfertJem(9uUWboNaB$o}wTk9qHo8>(lpYrn3 z+FIE6>!oIG!P*#A26*}gEw+4=c1`t8`PnQ?o*9IC*>wCWS}m7rI6w&-u^C&3o9t%b z)gzi7-b>iuTb$*L3n%}y*G6xGOJQj?wz6TEF3|`7U8EBbe2)H^UVid?ejDlQ5Z?4_ zU9iCgh^uuHepkuQW*p>E&cpriDCq{;Z!!ep%;7eOe~ zziGHzRyj+vb7`fOkN&Yxe%L2O_bc=?eALOl;~ z&enLR#0Y1)Nblj?FX=uM*&IIZPT0z{J#`P%qs7v{gZKTfJ~ze-VgMA|TzcbGb4|cb z^PZ%r&-|g=J?jH9;ouUi5z3}aHVM{(EizU8L9wxuM9q&~zQiWe57n#Yi0Oa%tgEY2 zvfHCyK438pAm7I&!Unp}=kncS$3ng5JFId%FdroGx&N6l?*)D~*D+qOlh{S?kL+~C zQHYnrFNWuT$#H1VEnImeN{m@55=+e6dX8cgh~Ycg&T$AoL7td2qCe*~jo5TO!4=6~ z%6<5FYsFxM@|H7A%F(RLz09#=YKB|Be!u8@rV~swX`c!96Io>dAF|mXEJOK zKLkRp;i}er=rLj3PM5hrdjydYh?K|)lxTOWwg{1Ur>po{DP$6Vu`fRnmcfRo#?*o- zuQE9q@`E0^u}gccz1k1dA2!?1X*X}Vu5M5>{prum38ZL#nJL-FuqVplLQ*;GEoG$= zr8)X0X!gvC zZF@~pxgwtxq~&AcX*AXQ+CFhw=Pd9Ww`rgjJD3>;L6V=&ZXm|ZZmJHfe37Y}*~x6F)69(H z|2G#d#C1(mqS+ycm{gCXwr+ulpYG-ffuc@A#2lkovJ=DU` zVL$w{CC&DNSchObfrf^0FCzfRKAR#TKv@5YHlWCU&4KPOvrU}k1&PV!_kr?>W zh`VBtACC%m!mbWB^&xhCfkRxbs}|prbn$E{fg39+-0(|wxNlNwdBr<$>Z;kRq0XPH($9^KA_LUxHPl(o0y80s7g-rA7(_%$7b&H8cf5#*x!B2nkC37&r#F)z>h&W;MAIF26fH`PyaO5}>VrnmV z8mk~A$)2iGE@1kXZy=hAwbj?w86rKxU&-4qvW4Dvza|dY-`~T$Z>ZxQ|uLBPgegZl%Q92o(W)t>3DpGqC zR<&2>KC?R>!QGwhHhYE|8%IGL4yEnE1oq1kMoSn@9vONw0$|4nqwK(`J%BI5SA?yhbWvO}`UPi|O^<9x0>S z@Zmc+Rf+=Pk73)yX!dFGqMYt7wO#ZFk9+#Bvi_X76WHJT<%+F&i#I%9yD;>f$4hhT zMTvV(I~N~F)V13sIgP$0>nU0Y>kKpgs-<5#sj1_s|LhJdGLe~Gte1P2ck4?=kMsI5 z?t2ZPCKngOx@t-Sm;cJpo1)FbOkxoEg5>jyGxTORCS5taK-Ae-tfkNcA08>#p=2^vuK&b$pSG;zz>5Wr%Z}D z)m9p~sX80BzwJPgv#&3}J|-@SYk0ay+a2-cmoydoQRJxc#?t`{~5@ z&P(aGqZxywxrf14hPVNddkOpGy3YAM0!wiqZkj9#dYBSIcz$xXo>BwiF^^(b?bc0s zz1LuxVZS=*kiCJh87|((O8#|{RE)m@SF8$1`oin2=y`G##V!S&1kI>W57fQg%8x<| znF2>E70!t4P^F^RURv2Ej+x{!{jjnm;h@LV`uA;yb&F$UF0PVqAjiE&?kF}aE=DtL zB#6)JAcm)(s=U9|Fko!Ujx3|3K8ej>s&-lBfZ7LOq_Kn0g}eZyBc?3y$7dl=^tfw> zl1_-9^TGAHBQ^K&6W5MV1#bPlfh1Lkk7J{Q(LxA~#iVzbA&<0ei`~jS zzuf>A(rp(VJl#SLR!fyXP=-lB_v)1Gd{d+8MHiG^!SRUOwYjeFaTr9)^cEM3(u#h7 z)XVjvOK6!x6&=?Ynh#3o{b~dq2=>(;l6j1Es{A`yNpAg&Hcbm^!;wn6Rn37TBRI_# z4jRN@T-W!2VOQw{yR9P)?xSN$3#Mi4Ro%TnO3097FC&b-vyQKyNpWy>Wv(0DS?A^v zf`Y}0x3jC@9HUi$zE%e_xcvtau0~_Yo|E~*2i|%TM=g71Ht=zhog*fzN~MAu%Ek23 z#*!A~XeB9E=Qy4BIAV}*eu_)GFtQ8Uebs7WXJisX?~oL~vK!}noN0~*mv<@k&^W<3 zO%E`+%Qm$^W2#5O11=j zYy91^6BFB540bbXj`B(QE6?=^kS%o61>OTij1{BCqHm8LH}4qSp$luv*K?n#S2}Ym z=8TD)u`Cq7lbC$29F=oq+H{Iofw*tjFN6#eQ9JQHlR|=yXDvC$w`Vx;w11~AB{|R( zH#F>d>d$R9@cOxU*|eon0FBmtE6xV%YZd=J(1g|vVoFRv~h zn6TeTh`sa>`fgr-??*+Y^y)1YO`*)sUFGZP!g3;JXT}aQz+MlvxE2 z+u!jAyqNpJ|H%vg|4!xdQ|YlNld5JZpkFGNrj@JBo+0xnmqE(*+l%^*n-|YZ!F9JU zzI*g1B5mr)1DlD@?-Vn7m(qatr3CjCQ`K?@6pwTj4`1!N8QSS4PHs^C8Lx2gPa%=a zmoK3J3+Ax0WzEsk5E9X{uyg7BxpQ7sF@PWmF=$yThJfVt*_5U-l;oMW=<^5V&V_0NW#5Io6)7PtdvsGiIiz~PVLfb85g7fH=U@ZNV&WP$MW6Z` zhHb~PWZ_ayE`gAWWtTO?oewZwfCryB>_R7@IwerU;NLxH%HVkX2rlR;moT=wjPlH7 z{JKC8Dye?CNZ9^fBulQWzoW=pj!n7VrLOnE*PMAtedsr@c)fY?gW==NZy`lfKp(*v zApf1A#X%1Aiq0EoXDENQG(u~M;#T-4Woub(MtwO>z|!N{_eCcQT*3_{<&m38e@Esm`{!j%oK zlZFzqO$6c~b(($iMsKd)+ z$zTw&vvB=z2RfNg!Dxreg&M_juwzapm6%YLLr3ME&AEtY|ASbP1!`4O_ zMaG@sK2Gcn_(!w`XK8h7WRJfLcI}vNoJg}<%XZ9D(Pu`x1H^A1O~cNv97`Q-5ND_bu{z^eWA*#y zOTr**;UXE1g^%Fb*PIPBSFH1_Y@Bf1%VNBb?$vzr!_ZjndE_PAUM^*4WM>C62!gYe zwey4lCHBleGp_!UY~siGTQq42np*b8CQDh)AyGnz#W>m7QpA-BuVPsK)wPOzk<@K? zKHby(!1P`@t38=f%$#2*lFvHYqEj_{WURj2_11R$iVTz466HE~36bSs@Se2isUJyd zFGU-7ELVxT$2$lWF85)|9a1_Rc`zXn+yYbfPN_I6v51mWd9pA({Tcy0!5(^j`vW4D z?{Y@AWhfjqKrx=(rWDKS_Wf>-bgkS`&U{je^U&<~$jUpNxn-;4}fq}IiucFrd|1S zZ0#V?y^a>=ah5xobIjML5uy;rz$Y1kR59btwBq`LOrqjxcUkOOKCBx#df0N;?j37| zHeI~YzDfggP3azaQ0ygu1sT|i8l>JA)0X(+c|Cuuvb34aUxp?FvwypIe_!w9i|Tq*M482yR*Z<<^mY|ykU|pf11ifas9AnT~?q!Znq}IOi(MX zW6PpN520?1JocVB5v)666}WG1MtR zQbb-maU4!;YW)fw(J4D@_HuTao;jpjkq)yX;tV+Os@wG9C(c7s5SSzZKx_f*?#kz!EfnZM)`B( zG$ZP3qO^{flfL!et#0e7UMjY=DvC}%bD++wWgga7`abMPB{-Tg`rO0(^NSuZ%0ej# zmUY}nr&msvnb8p+ZQwnprL28;DqtcLCkv7w*3QDS-TpyRbzOrdk@ubs3;cS-Okd!((ZsXe8Gw9enko|1>-KsKbqTQB+^N*hA7tizlJj9r zfsrkQ;b_{Jmu!&E_jE0B0Ng@5RBMy^2wdYcn-z(=cgc$zNzxi|Pcm~F1t{__cD-iVMWFjGn z*%~8WweJA)29AN%3kyG3myW$@;MDT8JN*F){wg7oyXpKv(ZYtz?%lx#E?p zw%IK5a+s@fP1a^D1L(^*vXxYZF7tt6a-kgJr6lRBXbD(OgnnmzhnQjQjMI3qM#Ty8;@v@t^2 z!}_xZ64d-lf839_n~;dk5rHUI)f@h`sJ=JTe5PHWQie0kRd!O|$-qTDeasg=1s2UP zqOeZsU0`qBiORHxW85h8WAj}_F!lJ!yG23Tr z<=TUuLT(PzykmAvP(enD|Cn_ku49Y^LP8byE;NeKMO-qANb#$8R%hY!xf>EQTRoA# zm50qFbuCz;Se}UFS}*<0ANv=y3kr;k0{D5l(6XCEn=5jqD#(p$M)C|rnspKx%aUO3 z+3_o7&~-6*#tZ!_jS@P^u|nc_Sq>2TE1e-;Q2`Xor=RP(_O)Dhs`Zm7lX5?7HOC>D zE4RnR%cv=4_bpnN8|rR*vc*4HVY374REP`Fp%s}Jv^CQY8$0#G%u@Gb^0sZ!Los%n zlC6eb_hI$CKSS@@pr9Hq3MyHXeiHAD*G#6q+{wg%>dSZ4c5OG$9>blA%Nsi1S~O#k zs*>FJA}{;#k%PYMaj+7Sy<}IokJo5}kQR4Xa}22hYcRxyTqU5Q%HZoiZ12`NXZW>& z#s1K=cF4b2*sIo0`e9f7XLK^NYcjAHtL|C)8ZsSEffEkOb}lXTK%Ia0z%^mac?ri_ zNh2%SZ>YKUBzO)|XLf*wim zD_*LZB-1JIEhxeeu6gGVDNcHMj~<1bFe`JsC;hTyY4whZK-H=9&Hl`t51DM5z5b<{ z#}CV4mJ?;zhqzKrB?D{Zk0jitr-Pu=u_pvoVG9kCUyjzt zbH;5p!)|09%8PJh)QR3<$5Z)EB`2dEgbS!!U#`EKt)5{d}5K#EZ{Ji|kr} z4h@d+t&&^oT!Cg@siSb2DBZWIAJH#Lu0>8leq?9b+WV@0iT-V5X`KqmImUlh_IGFQ zxImXUUr!^3PP_XA`(R|s!R?=X*VgzGZ`k=D=S<;7mxW?#%QLh>vt!=2XQmMPT*q(O zdgi`bQ{}qkovLl@-^AGEtXGb^2Zcr9$fns#edaX#v@bR|8ob32DhUq#3%zTC1_6YkHJ>;-_23;a%u})F8iZ?6R;(>N?~Fv*)+oyejQI zlE9=R$>yuxETKLjZv50j>4v0!9Uy~_yQjEkBE8ZL*4y>g zw&-t3dJZu5;q`~AR?u}mJl{v|6L6DVlVzQ!`wWrfHvMfifrKA$sdLi0n?KNC7T3=j z88PBcBH+zX%{+1$0Z)|5qXJAOL4lVE3Y$;j| z?zVF$Cy`|krgTo&mk0#k)3i2mqI^c;Sq9rP;;WB}iA@Pzud1izuq2I62YM?iT2x;MOTPf*PyStZ*DP#eU zC63ov8W{6DOS6&YTm$F5mQYPBer^5MlGWW8^MOCQbC#03Rj7hJL^#fsEP#-_>M6+u zSo{x&U!yscqA~p$>vIv`z*O8(xl&hnr~$6N@%k?D72%rA?FnXHE#T;K(#ZX0hCWp7 z0QFT4*n1Z$jzhM;$uF=qGP-^~J_sF)Z&a9i+UI|&(7%|v5%DrooJS`uQat+K9eXJC zhd!8*!Dn%BZLyoHnP$DV_O{)?t?1!_2^OcjthgCc*TBfRGgDeesFN-?&?vC zW@1&CGOch^uc1dtEY0A3_Mfsx%^glU)dA6+>)xYfu58Mw{fU6Kz$b1!^8F8cQ-jCy z=UWaFDca@b2lj0(Y`~`a*8qTU*p)In@kH_{w#(f~Ym#rS)I{&eW4fqYNbUGqcw=03J%>RrY9%joY21<#oib?iMd!+M1bmLn+>ut=i z@j>2F6il8uv~`%$XZ%q@c~4LqAt|>^ z+Dl4wI!L;Q80V8oQU+fU)DM%98@gVAN_+S|Gr5!;Y%yrwog&RI8=voueRqNW&HE3p z&&#i`zU3#pGu*!3se@|{F+vXeWa>QI1#~mX+<_0{r3H0U&T5z2cJ{S2P+LoIs3z`} zG0D$WA_edBSou|pD+%FR`jkxujyv1m-xP&Auu)s3A`4WLSt%PAoJyY~-YHykxaCbi z@S;OAXQcY!HH|kW&l|*fYWRaV_1Vr4j3bNEW^TVe_{RtN@qY8fEzVPhFBfNmYD(^k z+BIZgvYKj-n%Bdhg)CYYdzF;mxJxqn+O2)Qm;b`0ko5%L%=X*eTaxlw7GzW`o$ZpF z<^j4y!Fkpzak(jsEnKxM-=^}1k078uA%PF1<`l|Ql%$B2iZJ%6l0iE05rj0E8LmW+ zt}@vkE+3V+;MlL!0V6)XUn(GVcO+qP!W<#bDCM+rWl3buOhOrC8s5!mYalqHE0I z&0nGwH0RC%O~ByusCPhhY(_6ye@bRqlce=P`Apcs22qM>gwa9&=m#T|5DR`;e4c@m zuyaZjtY1@F1{dt;loo!|sNuFT?!>h{I<Ck_s*9%S_W>p2L1@qG? zMrB+QTP59NhaBGRo~$r<6b)vSeJsn`TIJ^F_W@a7<`#GR32{kpOH`LvzWZ5qcqoI? zMmY?#1uqxZ%1cK0jbg1OYAxiKwt6-9E0%-}#VbwT?rCY;wv1Z^ehV^sk*iH^jFkm%t9Qjr?hqun1b5fL2G`*3?(Xiv z9R|1H?mjSZCM$cbmA%h@`Cpvpd>7vX1JhmIU0q%ER#g{=UEh$7g)aYu_jeDa$eC)e z#9&syv1-)EFwbz>XauS~i(RrLFgFBac;E+tIDp z)XuPmc2i?(i6^5CxOO(!^XR8Pn?#duHQM%aS|qj1vCimp%HLRktC^(gjnl?ilSW$8 zixZ1-4x>eAv0m2RC8djjIG&vrjozr_?R%{n z*K4Mx=MTb$)NGs&z&9wtsAy(0H=HYgL;Yg0AeoVVbgrRIuF*FJhAEtKD-LP?Q8!Mh zyLzpKOyx-gbl|M;^r~+jc~}iG{7y*!xO!n=(ovCexkg7M*(Ku{+?9g0YNii4zRW5w z_}zm%(HKh{43rqe$~Nxn7F{R|BI#``Elcvta&me(8jgZeZRR(zPzyLT7HSm|=I;Ce za$QPI)g?xQ!UvsfTKEDat%lvjEYDw{R=$Kvl=!fCI<4x9?AHvr<%w#NS^zMF$^G#^ zw)iwI@M6+y6gzJPd>VBuj&L2N>|yt13wkw^YHG3L*v!HuI?8H$*T=BZr-@ZZe^IXb z^1FG*3Cz|W-M509mFh=rOfN=|c({BD%Q#34g$|}J(Os& zE&Mj_rGNI*s-;1p?SGz~9dFP)RZm6&fBSJD~S*k&wBIloMNd@Z=eq4{-IJ|d36Y3pbznF{4_1^6?@sw;~M zG0X4h=e9+uZp{xFZNS!h&1F$Kt3rgGKw~D_W&<7n`=5*DDHJbtDO5Z*hE>!D)XVYk zmXez)gsHu{x6a^oR-1Lq2r2j$XCDeg*9F=b)ZmQl+@r6|$tLsoo@VpxFs^QyF+x-+ zTrkm&(Zx!`t5t-wM`w1#+Sl7$x378ho}l34?9`&LZaSTPLy?EDRxl~CHXSoI#kqZ^7d#ljj=&DMkOfJz&!Li*{RvFvq0XihT2P2QtG$@c9mc&#E<~ z`%v7fE{uIj$F_9s5JPNxtc6KQaRqTRaU;U}9qe#(ZrcUg)vAnrk)ZzX`5 zXX>OQx*!rm!{k_r$jE4_B8kPm&22*yzwvG9VM>ZJgi!jOEizw^&@pjtXUlZzbWK#r zpTouv#No$nLjZA8qb$ans$CKuboufrnY7FN2W=h(Db1%%T~eiRaPBKv2BSB;bIOEoiRs2& z?14cu#%V0HBGYZ8MKu66O@ey8v9#OP1{aWCO7 zoH-CYSvax3a<8g&n0Zy`ezEg(m4_7;<9kgtv9X`~D}UhXh-#K@7{$R~-l;@G3yDn9 zu%=1=P3)wT?O0PN>{wpN?vxSTXl41T?dD-Z&I3mXM#A-jh5P*c7E~`M)s9rCHp-Fk z{CD0u{6x^vlQ~K2KbUEFt1hm*lIT!s*6R*HFI}U><1A9zMavtbNlHW28%PCO952;1 zO)k4$<69gplm>6u3qwl}dU=08hR0L0%UU_%oXYejvmD%HzFR!tSnTosOD@ZVp=NFE zx*mk*(X>0BUvAaQ*387<7Z-5OfJm?LtQU(yw9Qx#ggZ+3@`ql950Sn9_<>C-9mgt0 zecB*NzPMh0Gb}wS6%BJ)E2hJ)sOEN~JFTYCk7+9U0+V`7`==?VmV8TX7Jy!p@6Bhs z0V=u}`^Dj;kugVELUwoSBL&zV;a^6d{K-5&`r?YJ_KKbUdJL6ezAxL%to66C)*hs?mdr@Y!^Th{Zn@v&Ui3TaDMO7ki-Hu|fV=|LIsB4?D^r9zojExS5R7N$8h z*OXtVBh<~X!l*@6GN{+Css4vl`}r}7QD@@8o1|JUe;;pJmXD&$KZ*u=!2mSrQHzm> zjg``3(7Q(5PWD*iX)Tg$&7!ERh$Z#dWyj6kj z3m%$zrL_t-N*1MRr7DVF^yS{Z6b6e)~BEGecd&~7L5oaAjx1>DTj$@#|tj9$0bqnC1hmyFGUKhE{ssX+OU0 z)8n(FOS9(z2Gczz)7$WPVcCyH9I34~Ok1Z8cO~DH)4$z#m$x-9eI|gj^hsRNP(-q@ zs_Q(5&-O<_N3pwjdk)}MGULHx4KHiUR$yagjy$$Wy>|Z4+8`pFd3NzrcV-LQme4f_ zm|*7OohcN=$;3gffwTJoIcYb^c8OjpIog_40OOeQG95FumZA;Q#TIHlc*4pLudXCd z+S{y#FOF(_Z1o4vFytIc83M?&MSDxW|HPYXk>&58~%-{7w0P}1pvrQ{${?qJLd|H0&* z!Q{LbgTO{N%>yw$Jr4G>B&f2aH8Luf;2%^>Yot9hldnC66_?Xu3%;kacZfjsX`mLJ z_$D~=z1d8DQyGo4T&;L}lJ2U$JjX~QGYv#xxerNAK4D%iqojjuoo`hkYj!Z3S)r5m zVphJ?iWcbOjMx5r-RsT>gT_7#zcq28>%;9VhcwFFz{Lyf zxVc$l_jsdu=nqoVFv0J|#b%(HEG?C;mMJZ1%WSaacK$j5A5-K=JxrydahQ~@~sKEhL#l|AB$46s*xa}Xgl zS3eyXqw0ef9|^2-2Xae!E)Y-ch{oXoGEZ0L2iq^;U75d#mF@kCP5sX^ZWnsjhfE=+ zpc!2|fH2}9g%d!Nf2RdcXhBT^sL5|l^JrZD;66noyh5`t&alTRyl{NozOW+0_aN<3 z{g@WLf3VApJc;fA;CuQa)}QL~oQK{Tja{XTSny*u`FGo``L|iL(qQm`6j=1oe;De< z>!nUVIKf~(`3f}9IiI*4&N8iC<6+iah$gbUNuV>LPxr7!@o>qU}Wm4#zEk7xag(u2p^6kgQl>g*?L(`{xnpq+DD~Zrxr~I6XpM!Kge#(?M z_Nk-loMuO>hLL49aN2nM@h3mSvDK9O5nSQGQuBcAwg1hgXl~fC2U^ba zZBnDa9c!ZaQ%&w$yfA!7S%ElUr!szV2bvH_mHTKqg*!DlwrJemUAZPdIE zYl7Oo#2-%!S79YNI_U_c7Vj5=q68+*wncbvy2<4$UW4rrj(iti5WMzSx@B) zS8wz3u1K>p>UQ?S<#`LA&9}lPkusLAX{x^+>oLn2YQ?E6NFP2)?Z~u?gkDy24Oc**3cQ@{gaw6fAU}S#%-#~ zZ`dJUAW30ef(tjw>&+agE_~)@MN7fz-$Cc*HPUKXW(DN(+5)yCz0_F5xrW6w?8(eF z+u33G`NRFgq34&ixEvc}lC*@CG3;5TBhvlU#3+6_7XfXUbXxQxyLjgyBf)6imBe#* zCRO^4p7`fnW38ttX)TUTxu}D~My(& z-h>z39@S0T=ZUwz3Z!vO;&R*2TcXbsME2gqGFCt`<{$B?m}`Z zb|t#M^gRrx6xHbzRqqYBId+~QvPm5Pp~Y8Y3AvTal!^d~zVc8Ko62dAT7TwhW2d1Y z0+>IOTqF}P5`FmQ8#uHbOwN7t$ada|80TTY5U^p%LeFVN5gwTOu-nqG3$M$o{{DPW zw45;cLaUrKFfjf8FgZRyc(*^ltc{)NY)4NV;HS!$kN8p7ARA&RDg%Fsc~KZb8U8sQ zdLQ!6{mIR0_57E!aa@E=v=vc2Wc;*Qv)UUmwAr{ElCAez+)lBye)**>&d^No)KYGI z#w1y>DLU-*5%;^4f%v!GE+ zrGyy0_VQv~?<~;v3VAl63)kH~4<`!)Ge9>Uj+2jJyL>RH(b-BL+t+x5m;T$+a z9<8OMuBKrh5cAbxC2LQ9tbZuo2+*l9mzC0nf(Pv4P?r zTR-yc!CakGr$0G7T&OUt^%HBoZ?DgD3bqz9zwL@>&202ITvk>(Vx+MDL47%H^d$Nt zy!|YE=f}&YZxAkAvhRc^y!N}~gzj$fh8un1t95$!qJ-}DH-_VgE1DROv_$J$>W(yL zwNu+3t;X|4`WhfCqp&(w^1YP1#a(G|cpW9=J+UVxSkMcIzn(<+k#O%u-pwvXo6s8H*2RBLak~~$3KlX_g zQsB$5s2{1MrF4oMXZN;&==Lmr6fB!;JA-FdCljti(>a>TBd?jMtS$vC&is=CXat_a z+|2i+7H3I3*<5Y_h#QtrtF=`x(sPhn=V!$y(r~q#blz z$;EaXych8#u^f? zC=w0VwXM#*)){RYPbVbT9SSc>zq#6sN@_{3rsNteYFm=mWJwiq?Q?^xO=gK>T4ArF zKEm(j*R?r3CH&`ZG#Jk|zg3-QFd0C%IQ0jKij?F1O;v$MNtdA8SU;kV`<1K*a{)O! z0(pbGji^1jC*T~3e!*R+ghOj0Mjzt9!>DE(P2-WwC|~|WLBZ-iViViMRVC)LuI3=A z-~Q-=L?lm;DxXL~ky zi|?FdKCLPaqma6r^Kz#*$Wc0AjQb3vVtdhbY!z-{8TEKEaF&*n*%I{cdVVJ4|CK_0 z86C_?xiCcTHX$~N`-A9W1A|uec2|scg3{w*cCuWI4$cP3|NHM%jo>chMs3+gbJK;d zMcU`jw;yQo%8~BSkm9dt8HXwp?$ThV2nWMnmDj{IsNT-Y(!p}X< z=3I(wtek zY<;4#6>fH-W%j}#SpZ~GYRRwpf8uXjVw>*T_ozT*vLVrJ?@u}VCiTfqOLLPM9- z_m_`um;CALl7=Al>Nh^!m8~wo5$sHEE9MdrO}3!qNUR=VTit$fNRDy?Lc-62s(mc4 z6@7*Pz3HN_c@`0^HtB$u!neq4SlVw0D6-l~Y=zJs&j#KU1`-St<*L`uIX8ci9rD{$%aw%T>!8E8ZOC@vr&^W6k#~odgCvAoMK$lJ_`p zul!`ddHpnR_Oa&T-5x1tXx2stk|-@75fhS0R()i`map#e4*6E`NLzz8ZVLn#pPrkJ;!DL2$3EKbisqh9@cZjj zdl$4JJ>f6EX3oQ@!magee-mV?1+0XC3GQ)kll5;Xtp z87f0{-hIej)m*!U-NvZuL#+4ZYvnUL-%E*f>TgAw$f8ux5gBon$F+WnH$50CKG=)D ziuE&)5PTF8JiZQf4KC1u)}HN(wDP!OTn0*PPXJ?A?b6U@X;OCuq?Mh2ese#3a!Cr8 z0=u}6@FTN~<=CaR2`~4hKF%j9XbTX?^X<3+OC>n-@;2`cHzGa^%=Imo?x}1mO*Cnn zQitO(-IrodUcU(7zS=o;^qD)>kz7Gw!k0ha056~XYhlCeqCul}VLTsE*XazwvV}#1 zA6nNZg9JhCnok&f^^kyB^3yxCwEF`zZO9r|HLJ$`TYpvLYR(_;&0OtrIA}&TY$Penj5H_mreUnh?7OR71~`K}-?OcUd&-mzK(4 zSsT$(eq{!>+e`Ua$+S&|xF3HA~mOQn;T6i)yCG6yDyi48pN%1c>e1UR2=q@Ai zc%_5`aN$4rT!tSoHKHYVi|1xyU|gO{4w-bmVGV0f#@YwW(iWAG(J*po0ks;oZDi%+ z8jU6Z)k>*Ie~5Wr@6|4-m?sQO2QuhlL4+c&r^9pVHD`?zM5FCPQ-k;0QH{C?amE4g zVLLx8F9l<}^dCk`Bty2c=k+hM35Cs7Vudnfv25Aj2jljy>;i#{Hja+!;p7ucJ8kB? zye``kAyct<;Je{fX{~%+|AHQO=o-t(Q$A@F!*VPT+E@V=`QRDAvYKwd!;bYQGkr6D^z<-X(4fVL^e z(z-0c=(40w^uDxKv)lE^_mwIPRyhfQTZs8lHE3~pF05UmpLvWeHwjE}ogpV&veHj| zim0ffEp0lslSv9M!Tv-6FJ2?GDit5uLWM>5K6_1z6o1COKgyMLlmsDK)ZmkT5=j?3 zm>goOP~9+WMf{;FlMq@0Zjyqv(D>cQJLabJiB z-UVNB-W>qHe{(S^q~x8B!;h*Xmpn^Qk@^wdb~iC4T-tONts&X#k*&>rBo0O?&DP2x+53A@3^G15|>C@gUa>kE^f~8 zc^{^CcsahM1am8H5Bg6MMoY8N)=}woZ9CSpVGCyYk4{@XhOH(d?=*7KclV91>ZIX( z#FBctf-{{>V}4KIN_0TPMey%vZeIPmNHk+Ch+OK%2@T*U3$)ku9FA>d(NK@Q?DXby zn@@JyRgg@?8@Z>@t-faiZOUg?LeApB8UK^9XqwPJR>;%5H|I zadPSIX91oztcEG>_D}8?MsC2$VFS67y18jw+|*nYB{ADCXfEtsNH@GFNp$e=>{{ImqF)l~?`PNjFL~8Q1P5rX z_~{_2#|%Yzo>agqL8JNj3@5g0+=$%=lPic?;IEi!GujJx3lGvqlY(t7jbxQcfy_vqD?83<}01LWO8oV48CNYc|-fZDjlSI;GD|>xLpH z<_92M@hd-UZ0jZFb@Pyw2VJd2;EF$SBpCAw>mP=o668F9fNlLuxMdas*RTH`9?a+T zU-|1WOPHLYd1d>9bgJTfZdaX7cRAs^%vb2~QH~bipF_-&L0I`KuAC3!>%g`%ecy1! zA6A7hpGym+1Eo1%CTW|!MbUIHGcvXwu^R3D!L2m&j_}TlW zJ$9&-+f?t6aPO8rW4bt>^`!rsWeju4^s7_o^9HZ$1N@Y@#C+`telN>=LT&rY-sODl zzo3zkCRH0kCXesLL?djBQzI^Xs*krdk$3|3q!fiLe~bW(`}}R!sA#z)+J_XUrp}usX9B|_g~{GvL8Tu~plrb}L7zGh;x{+IXrzNLiZ{r8%Qg>-aLeszhZf7v5j! z(4DhC_iBrn8ae#YU)wc10WbowTbkmR@nxRXPaCGQGGSpeACQc+7o}M+>tiL!dia-p zIy^mphkMa0M`NaI&Ggg}pb=a-5Y14ve<=-(rp17XNqvl+KSmJ^&lY~^usU6dv6u`tLC`_aI52)+sqqF|_H>jrV+z|A7YHNSU zN`n|O;$A?0r3@%ex+Gou0KPsBwte-?Iij&KM0~Yf`!!DYy>jm4yIpKo*QT+!v=qK} zr>voXl#-&4<4g)dANNl%>v8|JmOlgOAFg@d>iV(%F%!R*8>$1N|K_FNzx{rLvHvf8 zR&q^safAAtM|aMv{SSlpm)Pj&-kH@-E^KFIZFt%7V%YjQuFQ5ouue1~|IFtxEXQvs zV}wWL_A}4!QQhLM19f0=9RCyZ1|_dU5V@WG1q`?Sr3Aw0uQ1JMR0(+<9FTh4Tf@jX(uw}k=4?KKfFlStRjn3}!qvD0D^JC0% zrX8{dyT)^#Z*yM$ssBoY(+I&|vmm%LicfPD-@TQIiSGPaE}z!nd30R#U8e4wK5kqn zQriy)%-RF<1Oz-NHD!DD?e7@-XJ!am3+$mE7vSGgRWtqDWQQP1JLDHp9*`^LQYC4g zN~fP_p0E*Xpj;WfeSI>N#F-nqcNI+|6$dUJkH$b!KPe=X%2a$WONK*EQ#Mn=rh3MI zSitkuufxk3%LF71(sp%)g;u15A@~FmmrQNS*<$v9!)8qxsnf|MMn90_3SDr>i62eZ zU`g#@h%q9ss3rYIYML+C99DBE@=t>>zgJzXd=}R`-pwllhWpDKavF!{3i%9xPql48 z3yx1+IxO8X2c;MJb&VXNf;ZialM|@(%t`>?c@q$tDXe^RRGA}y0|iN>mi;yM%}gWbrz#cJ{`drh zTjzwn-g-U@;^Zh)07bO&r`DiY>`>&Xt+rFgA%zJQht; z+O{*Zu^k*6t5T~6r?&bah2+j2B%#XrJo6bbo*MDxIiUW_e)((96U}F4Odl{zn!w^Zgn%kKhc_^0vs*)zt|PBm(jD?$3m4NvCg=5ywCGy&aPr|cSOIvFC%AP`8bBW3SCekAW2H(zzN z#O(1(*`4WXXH9C`c@tIlqMtat!hDW3e6HgA^!9Q0oxWFsI1hhPBEXS#XHW3>muR6fo6P4{yVc7f9VV`p$HbH zwWgG>hjj$DOXci5Jw#Iz6)*9Z^OpSf?q~fCx^+->hdy>RjQz!J1=Dxu=AsJ=$hwcH z-yS5y)>63|_qldiU;Wc=2Gd_UBQa%1p{cpCJj=p@?Oa_QE2}xi&~~J#Ia~+i>Y#kY zg=d*3@EBS6K4K=a;@wJnDH!rlXkjTMZz4}P;aoLOP)BWq8`rUoI!YYQEkHmE^2opT z(7Y(G9RXKyfz3EmF{}*!>C&_LFRLOU(;J#a;SUyt`N{8dbJCFsiG8pY6@?K0^N%nv znm+eMf9#IG{_=n2X!xU#|L?b#{D!2ZVnKL~)w2ZSTmZj~&8>m)Q$GlfeH?~Cb$H4#kk%ujV z()!eU^Idm!<|8WY4+-P<+1rh2CyR3K=Bp?CHhw-mE_SYS%`N_D;$D~2z>8b*^fK`6 zL3L;j8&YZ`x0=Ket>(bQ$k`wF;rwp;vlaGdbassg(WbXqbX;~`w3cg}WaiHC2Aujmd2?jK{ZZ?Cp4 zI1=amTmi=YH+;xwbb(f z<&1h_qN1)4VPB15nh8{0I+SZ-B{SOc!fe7j@6H@$_AnrL?@RzUi;kn^3a*One`v|L zsT}C|iAKGHI;rB^mf$jxVpsV|i8Yue_C7KNZ<5Aznr70DHEMUqP@KaTl(t;CVXn7> zq)MPu$$$pj+3&B)oYBr#iqm30>ppYKwW%??BvkTkd}~Xr(>?Rvp>H6U0qC-@8u@9R z&BMTi`F}cp$V2*$fXC{gCsF}#@~O#rn*PIyTU*lGxY=9y>mQt9-2n)DeJ%#*dlY>c z!ecMx>=dBRm%TOIkyI8vNuxG!@5My+>#2EMm(sAg3czSL`LL@)&r?7C8|k9xD)h^Z zaXBw;M7vW&ybUp)r3N>GKW<3)O$kcoGdV9GOhzq{9jo`-nkLwa_H7xRRwda#$Rpy@ zmaa-(_hmGqT7vZKOtfU}h@AOl%Y);pg04*;l${1vJ_s6>xNxe71(to>Xg&$wrYekM zZOL2aMRQg!8!lm)gTag zk@*~!PK-8_ASQk+z6Pl!Ng4E+r{PYx!QOxXPqaQVI^Atc)_(965u1!#blFFqk70r5 z>!?|6Zl?#s{-enpGGTeuY+^k@(%SesRcxO|_HpyumTa`d;nXo^svdX7Fb@h~*-nsI z*u5V_tKdvp5~5}SN&jlbzo+HFAITE|uMAa>yC7iSyE-?|N0RX(_Ho0n?EGiu*%=$P z^e4RbORJ4V6muozoWr>!+xV1_vO-!K2LjryQxV}29GAu^1Ux}<*v9#{lh%(yw)dnf zVgrTnDTnKvw%_gCQC4=L15qMd(g+2fsdtq3@`$uu!FD zO%{gK0)F^kK~J$iz)vWV2M}n2(81LRCj`G$E5F$;z!Ms%*1=%kl2Rror!MiTv z@{C7_ozmDj-Z00afI@=fbiTcfQ%=G~CbivcR<$Y1-})g-cmtoBZC#va_Z&CWFRxZm z4Ky=5g(857vf&vOlY+CaQ^DOot&icQ7a$M2X6Rwa@(c#+gSoj1Hy5l|bai%ibZV*( zO@LmvF7bbhqoz;_tpZbDdqx+$+g}qI#U_0QvkMG|RzP#U)+jrRmUP+)Q(MlN zE;!k(;Y>ZAHMGC_FSBQvzbEsTT9MqncJ9p0RaXjC!om3y1=FVJ>tAx7sH~k|xp1u% zBe`y3@lDdJ;dBnnlD@p?{zm7E?fjg3}_J z)UUkx{ST483JQKTP!$Fgo-5T#Ok0Z<_k8_N-oKC0K^{+WJed0jmH8vH10r z2a$b#P8+3o1@?1B+X8XCmWLd@-tbJruc_%aK2Vn(@xFlZ(Aus;Q_)~muRrI1oj%rt zazvDrUxfXN3o@p=Q@SU@;qh8NH2QidYV<2QtVlRK+G0a?8BM(r_xO;EoQ^n)&B=V3 zxWSDo6!`|Xu^R)V_QIi+l8=|0n~}7o-SCT@7Mni+#kvr#;r+qHkZE7`uml`NZ{hyX z!yFvwyjUF`;v>!DPEVubNVi{p{a0gz&J7CJUxd8jz*B??;f|ThX>SnuewIOKrNIlF z^~~ht+1Y14vtHlFWc>Jeiau%e@8;6^IYqZy=i!z>i_~RbvEHmN?THbbF=^~CDY?uXlV)BK0siad`tVv(*wFy-tgpuW|oBNDgIog@$dp`bo82c zNM{+(Ra{zS?oXFpm#om){lns?&{>is>5Nv*^3(aWOR@>@T6^D+Ly8zS4)C!hz=^+w z(Hp^J$ql~8_VTbTMNrX|y%nAPwZB%WQrs4a`^7{(HpX@~FVIW;@x%Uu9bn`oOoleM zuAZKeC@^Zds8r+#=}%gAouFKTpeZL?K#zew{1GKl^fgl4+lDbba=x2EX0~L1M6So_ zbQWQl3_s%vuB-ZoUY5z#r2rRsU~GMn_-b{v)21x|YE(j5@xSE7w{O;{NR`!g>IVJi@q8A5peNT!O<5!i$xe$1cmX9foU6%jyHYj3 zCCYyDXJOQ9D06D7P=mX*OD#YC^Tl63ym*H`Y+F;C`&?b@r{~I7n}?11FsM*`<~33U zjoXv+__HIJ*OZ(IJ(yp-XpjIZmXacWp&}0h^Jc1?}yuZ2u*5J)aG{9cFx4NAM0st`haX zNQXKWz2JZ2pMQQ1dGr6T&*(qgiHxRUlM&IMI{OQc1;s?KBBYqWpzvVGelz;V*ahSN z&c=AdJmhHDirq^t6x|FE83s>YXRn5~b83qOUn2wUM_RXQh}KL~hV4IV?(_B1t_XB= z>_gBVEg#}93^W9^_?pNrds;W2IfXMF@o%&2+92?CM~*bBzIoHi&f|S+{Mfkw9gZiK;sRj`GK}U%qbgC+9(n}SCskv_SoNmg7v`E+?Hn$q=8!Dw5=Xq0O8$93yIEPF4DMaX zD#^JFK{(PRTe}nH!zWrBmvueBRF8+3+`;ldJl0n~^!JlRj&y}d?RAeJU14#K@ zYF=B@Cxer1CsqP1YX;Et>Q*U&ew{jMyYuAW=JiJWQCkI>(D=X)O$kQlPd{3lZ-7Sq zjhJj<+RkH_LBf%Gx5H><`D6A1E>V_pYKn>_OxzCdTtgZ*9}(|2FGr0TAX3p+L1Rld zi=lPakH*YbUjY>N^|h{CmpzGwSC5J4pO~0!FAzv_`rz?&irLCTaOny|2+<*&jZZFT zQa-K+y|wpRDqWrxCSKjJ^LD!jfm((ALt@gDjnYjgUMk|Qm2PgnCvZl*7o{TQUn$UE zVGj)C79rEje>^$ed!(VMtqp##6USCIbFGSMy<0Z?{1y=UjaS*Cf#CRf6AY2mTW<)E zL5_9>r7t>C2Ye=+QlyY5W2cwp5D03n&_*b$NL?0v1>2tsV$%*=n{A-oock>&I=Wx~ z+NI;t)NT1r#+xq-J*R6Q8!pvCm5g}Brk9NaTeU$Ca1`MYhLnbx6V;85$fGN3cK#vJ zZ5&Bc15!r@k!w%|L~G+6gF(qp%Z)yoQ22Kh2^Ln9l^oaCwAlhX-%lm@PNgl88c`1W zhV3vdDNhW;zGFMiMFt`Eaa1n&S2W0s>Jfxv@$jBp^aa~BMRpTu)j{rA);@v@WwJAM zW$DyN)%Kj{cZu0bG`~*r=L{X3^EDgeo-k&1+31I5 zFPd)def2uIiTzFQPY1!wF*``9v%Dd$fP)4So z-D3#C&D^>O;S9N5@7Vq7rO16Xt!hOIg&snfM)n~W^JyRxGeO}T-h)m4Nju(W8?8c` zJajJFbZI8mD6Gew7u$DSQ?esv%k4w#ZXas%6765~Q5kkB$|9$VWSGdKB8OAOfQ6AR zD0%Dd^@EDI?A$&mO_J)a;PDYf8&2e8wW%>^(~GkhXb#tqGz`P(kC`^&*IVzPAfkgDIyd~%WgZ+MVERCRQ4$Z8DJ0mMxi}c@I<2M4m+T0Vg()P)o&_(5n!8GN zC8E~TIu{nh(^lcuCo?J7?G!-0mm?2rRxwt!jASKUQe*21t)p;a%IPYo(DGzeUbYe~ zi*)`*9dZpj^ieqLl+UA)h|WbC0sE5{;??$Ky`>UrWFXa9v{zUdqB# z&O42QI~whT-lW=Plyf_sisgCB=<9}%b2IcgMYNimf~N6dB}-(`+&?JE}OBEhRNFKT~dvt8JX zit?qxF;lkv>{h?`Vj;_iYa;gbC281fO2a3Hd{qSi0|zNj`!@1_)PP;7S<57-17@Lt1+uV{e8Bn zrb9iWCZ~IIQQD2Xdz6n0QJc|z7$+%qaj*bexWabpA6RP{1-9!zO5?1wH|OvX?}{~3 zT-RSs@Pk*?+;&C7;!;N5f0om(=sFA zBS^>eu&9yzT^VkD3fJV#fO61RZf$jrp%BTV^i7~BH0t!ztUN0(my;+ji*gzDb~shP zXC>6WQlwtI0=WBJ{I)GbJDynzIfP;~ z*|e8sP5Zlu3i{w<`!4 z1|rQ(ch9Lw$3$MwDV$}t5U!Xz5w`1g-y~ja>A1O;j~i?%Y`lyC5{!FW)vzez%(CspYL)F5%HrE>|VM+$UzVx6Cf2l7U=r)Xx$&8BQ9`kCw1? z-}bn+WYy6u+;$Qgxtt}YecGoQeX3a7a)3oYGBi2l%O$bf5P5f}n~_2j*QdHGoEt8t zt95^IanUUj{D#T|5EAHooeTt;C`Am9%;ksY)qQe!>N|L}$$%D>GH9kNfiL8Gf2X`9 zN=SQ+{)LMkxHH7?1X+&fdc>mGei!@k?1|^G?=B3 zcY1O-;|el7*x>?RRaZ`A>isAiwqYpInL$~6dYB1|W6=-G7$EVkU{NkFW5E8>;^eH3 z1m8Wup!w20=UD!O*Zg&Jc@E2_-1vq;7n^At!Klhot7w^;o`tRDMbwvbY0&MxLc ztw!a?6|yFOfBsFH{MlD8@3e#=e5u#o$oM7Wn3gK{*47p+vvR8mKJI4dDre?uqApV`{r&EWd)!U zTyk|}eR8+@VyI`)$=-7o&ZvziFH>3G z2>n8vT^1}98LeQ(+QQhJ(M#UZqjX40maF8@Yp_9{A5Ek9N_AT^zmUnc{QJ$RZlhT1 z5u-wKNy3Jws(4yvI=l4NykI~T7wDmaXjrFuMi5~SKS<69v&VaFrL<(ld?bUU=Tl=n=({>5@A2| zZt#Ub??3>8nwn`K;KaELst3PfPJ3JrG_}!kmn04UgsKcOb#v%XQQqV~YY+892{AF^}P zg$;OQkM{RU&F9NdVP?6NawxH77cf4+KMD;hrzS6lZ~Hi8p~fZ4fv&xz>fiSb6(6&t z(Po($3u=}~B^Y6j{l>An8&`0K;0Gt6*V>&U(6CpvO9L7&HnmzZPcZU?H-Mb zNv>*fJu=}+jX47JxX)ZPw)Z_aL~lIw@d=m}P8yN@uy_d!aew8H|0%sue<~mPO~|Ac z-W|xy5SJ8-RgaBH-Kb0_4a5%z={7pUl?q2xt-Ge9+V+(T$qNq&=3oZl_)`NG_0x+J zS=ho1jMV}XQ1bVf2WQqeZRxnru1`)Hqcla2PFtSF}P*QRjyqWN$-%xjc=t1vrA zeISEfU>DN!Py!{=k?b$uwjQhtwA_Lz_s8E;?KeD+bQ^7Ig+CE-RB8DJ8U?i;7`oQG zYXtVv0Cwyy!V!x{nXi9}fi*>ptZLeNvXoC2+J;Ne?H+#&7S;==T#LIRbfrx z;B3(#*c%@0m||qnBMrWGH);>^un}V3f>zktEC=Xp7z7G*3@Y`^ep%y3qAD+ zj+M&vSKaDSUyr1r?~$X=S9|2j_LJ=|ZNZZ~n@am0V$JZ>=zYRuwdQT|DF18+m1kML z)aa~%8j;V0{Y@Gc8jnQA>^}VB3fHG`F5A(UY;|c#)vfowoNe9{52s7?L)Q}H7qr?zWR zWU*RfhVZ$W)p~->vs53TR?V85i|oD?)WFoBDkcZP4&}T88b5VTI>-oi=gHn|qk$E= z2B_x9ze$)^1eA&t6FU-gqO~m28shEgA!3faAy_jvVh{B1=CR!F@(UMtHmp88Un8U4 zh@(wF+dt|mEpJe=6_&FLpo)1dM5l&xD9{wNgW0OznIkvqhRon5BY!YZxr5+06F-~@ zpCfP7Up?E3o z?vNCBDDF^PgL{A!C%C(uwD)sA-*etG&Oh+xhma9QU?*_xy{@_DXRbmx86?#p_}mRp zp|86|C!V=1PV1b#n;zfWJ40l+A0#d&e@--U1Lc4fiRQ&DYuv-t#S_?Z#~eZl1x>Xs z2AX@(B>@rF)>-p04Ez{vmv7FuKd^4v#iZ@-TUqP1_@rBY6n0t-Yi<)XLRJN2wFy*A zb

sa;rRLr*OU?&n+7aG|_uEu9kOjwWZTk9Pss`_pyz=FMOAz*<+f>fs7z6z~<^M zI*Wq7A+gHvpp!9Z3KNzHZTDfE;Bk1-)G-)?Dp!7d|JrN2aB^Tx zFxd=AOPJYtn|6{tWv5_0e=coQ?od2$=W}ssD&)2GQ@o_Bu0@X712|mh5`;L5>fvmO z@2GIO>eTtgl#R;ITY6a*=6^hpASU!VOx!Cr4I)w4kH^n8P~@;hcgi1FUA{e8yxO|N z+Wk{rF)Ij)30h0HT(ui!JuCN`kU1Hry-eepU}02VKi6)hENQ`AJ54$+T2XSPIXE1h zL@H-;S(^-(w^Wl7q39`dceX+DxOUyK#)(<=&slg=SyS(I+k9$zRykkIwi7AVwP+-C zb<(PpYW)xdNzEF%OsT`W4oYpIEc9>ioFrzQ<+qN7LuZQFA5tuCliMAV-V8PNJ_qaAQ=T4+e6=j5d&#v#gJt7m6Rh_CFhwSS0qUR`J zsSelzT5)4zI#3q+ zhUoPxZMQ6v4-7@q6WT6k?Dr(H=a_Fss0OH&jiNY=Ix;@duEooQ0`?p>UyRW!P}fU@ zh>Lj4N1m5y+Sc`ZTFTA6zMbg=+P#umdF3U=&7 zK*d_ckhu{44r_PhjgIk^(2wBa3ixJF57J!s*F7lHIt8 z?jsqyDkWoZn~M#XzJFShs@+ss_r^-9KYRY++2dRvefvYv)XfMs^@=lG$VPf%*_fBc z<&ze1HBLMescqPl{|ItB(2f!V#5w{M{oG&PEDQgS!2h)$VJ|>5N_blr*6T!W6!^=> zx;#}D54R$#y=Y4=CStF`YtM_D;<~}xtINP&m(ek*hA;PPOZ6t3wiq)D^mt}Y;tyKC zRAWWqPEA=QXvSeV0un>G_XYA!=id$bO~H!UO2zH>4)I5FDTxPO4w1=?!&T;Z}uodn~0t54b9qjm!NH*e*UM_AK0`Ws6pf00iwT4N^&`qC9b+2f0V3|)C9JaFHml(@9Pjohvz-R^1x>m5Nt_`Pz|NID# zO(@w4 zK(YmU=0gc==815C>IbRMZYWmY+gp?HP;vb7kJ&6vc-|-1j5=nuAo<9N&Uk*mZ&h%aPl(~?@;Hw; z?`WqwQsw2A7qto87EsArM2YFv_#RefdyuT49*67K?97X^Z;YJbM|3q`)Z@NdvrpOe zSz`2X+IA#V6srC_@!B&>eCl6Ld<)S2kmG)Li+SL)9&^yu@(Gh)xBbt6P=?8cQ;F8Hkushb+_| zI?FZy6BB__?cBkrv2_vVh^c_CKiAHG6l2Ao{k#-wbAWSNT;onXpA`jExhlkcB+Eh@ z$0v#AmKL*Z@}kPTQLA=H8Y%;@Px1xJhMpzw8^E6rRGB8`k!FoZFviD2R^M^!u`zus zFIGwNIC9pV`L3VpuwL+N$3Kwz{M?lVb@yh)6(QlNAl1;E#tdkBdz&sC-$^u0gm}HE z1bqoX@ury7q#IUcIMX?WL|6Z-1=PZWEt4_o?J?t>R`-OB(;iun9Mj7^RCMwvi21~= zJ6ev~$_EfD5>TennPOh8VdJmgSa`@`5~|$mUA@!Y3GdG7J(5 zLN`(a3XGM@bxMkdP5ZG?9D96^iKOY;RT1*BthTV;iDE2eA5|Z zJS%_Wb8u^(G28NVxx3e-+&Gej|ZZp2tLc-vWyr>lxR>-cQv zs2LW%;ZiMlsLz{I@9asU%wwGH{4`M;=S#`U zjdYqF0=^83@X4)i-z3qdFv#2f@3iu#ZUv)u^gF&MTe&K@ZxvpXFPU{Y5RhPVj>jvS zj~2>|5DU16zPY@Smaa$pmT1j1D%^B_aF~`K*14Lt@*t|Erq|AC{@sS$FtEo3IV8;% zP@wEf&HEshq#|ho64V;FJz2`H%8x>2_wE~{a-N7O{?IO~{n>OYUQWSL-p4E{=}gP} zLHhJCp0G*dO+6>SU(89w5}9dCo3b>mV2X91L|4n_d9B;{sCxXRK!v^o0gl8(7cszZ z41z)OjhVyp;!@{$(H#2zmZ{39%mOhva9Q3p!Ty$kzP*KDAOOIzSoiW7ZaK7TDqD+s*3gBe9^UuXXN{D}9RJZ!{&B$nZfjQ6x3_KwE_Qy#PqI$9TR#T{Ug%L6kzV30 zV4BYOOzI*-`4q2ti|Re-SzSSn)W=hao_E8RSMp$CGY^jQY;DndqjdZ74gD_3l<-3m z7v^rPgZ)W{q9KXVcM`L8pa+F(V6kb9bBZH=6cZ&sDiK|SXRE`|$<@6DGtA3+EL-+gqGqR%Vj>YwBvemJYuBmH?v4w8}>u@rQ#MeJPbF{qiup@DPA~ zAg%UfrsFfc@^3@?W7>XW<9EG!c2Auo%`C=yn@5J_KPqatO^SS7ZJtOkc}8vW^D6;4 zW9YL5iTGv15DD-4XY`gXw7RtKaAf=a>So(w89-OykB!l}8^0XHE@?gewJPH-H%$t0 z-iO}s3bow7GmCoGIE_qK6#FY#^S<=fXR$V7v zYI}&RTV=qAS=XHLW}5#AP@*~t^EqDH-teucU>b~oRUhx$EZsKXzgs4@jqV}KG!p6! z9Z1D|-BJ`7*ER)Do!M*-AC5gwZDV!q+j-6iEEFRW7DbP@HRg4fp;8GARvj{b0h?~| z3rD$+Dyb-Hn$1`Q!lh`HHQWR<6(^^d=yJK>(9yV%=^7orXO_%h)_9+3!gKSVDMQ)% zR=~Rndvjp|JicIfM;<4qpV_eSm_=#EhX2nvj;OOro_w-5mO;q0r?sMefq}2277_h5 zX{bjmi(2~o149SrnW%@0+5|8<{s&!;?4PWq`Z?+h^T9BixeF#EyHKsw1xJT0#mBq`E=nsm;s&P=8J0gop9p0Y9qzM# zr5qe?x;2)0Sd>V2tNP-!Gsq!0B9+U0n4_s8UY2*hQ9F@-;`zok{H0mzpDI~(k?USFcXNm+Ir(S72f(|73ZzqI(IdQVl$JGHf3*jJM}h7 z`a0RZ$1bQ}LKq>eSHIi>mFUJ%u~l-(2|l(RBYU{MsWI)c4&CpUq+YslXvhkCbHXm{ z+l=aztDhD{#9q4Lb__*(nLDI{BPSMdctB|Z4_*!!{haTgn4Xv3%)zb>tb@yX#tuVw z99J`0FTg72L(1`UM_I=Bvl8-e-&XueG&*Veu4Qw&S_y>KkjB-BdAj7f745R?g2M2< zt2`lc4j5sbm$>nXHR!O(a7B+$#5z;)dhm|Vg0i6`4{Zc6N9##&rBDCx&TH z+fPlgbGkGhLe#mbw-=eah!zDo)-SX9N=E1YkyZQsZQY9oJ%(qmtnnsOde#M1VU_x>FkxgSOvW#&(9B{ekam zbSe)4U+R|@3#q5$?-cT^kn+XaCdxqad~6qB5iwORU~5xR*B9;I^vLcx$w||G$C-v2 z!d>6_Xfn(WIU3dqkNs2qxN&u*nH^SHVZ^&uy3dYEgiNZqIr2gcd~U9}Jtrf&{u*c2 z+i+LjUusG3PUW?+yB=@lYQDQwBo}MjvmCEN&v|J~ksQmY+iy2h`i0MOR+3~b-GR10)4(AuV*m6ZLlUkpj=d(BCIDXxCEFnaz?}zfM zFz(7p&K);p2IeUjamZ&zYY+&hadOskbov)}d0X@yk@T5Pq1#J42^m<-YZIT8~+$hKQ~=^7-I#jDuntzeY%->8>Z@hUeW zz$`U3Wa2O<`mJo$CmK5uhOL06b|a}I88*{lKHyPP?b+^P_@M$h_Ox3UcB!|^e3 zTWgZ5DYw3hA|+c9noKc^LaM3rt|jYjaPi$4{_UHl1$H$}c;d_Xfhpn6RZov#3Hf)1 z%*5D&#~xN&(LkZa$ok#%(D2CT24h0nY&2q$Ch^j}qfLJ* zsH7avwcs%Fz~YK2%W)A~v=BDjjKAJ+wN#rXE#$o7UA|Xzf1bu|YeK!fpPgaWO0;Pn zajkCVW2vr0!MS2IEms+`&wd}@kH&y4-z#S8K@kIj*AA1owHq!?rT}AoZPN{ZMU`fA zuJ|ox2{CjIr0K)u{%n`Gnqc8F_|_154?(~$eN3KR&Vi&$etB$Z06lP%((qQS4Zm*1 zW%59|+bW-RLlhwf$an;I{}gq0PlZN`CIz~Whbv|1-R|Aec!!5HW(G#19-DJj@V|sK zH^%{8e@L+!(BMUc>L~~vCIX%!%JaP?zD_U?q8 z2Yo69C!C!}t2E>kPq$E;EoNAsPh2AKVUkPoQYR_2J^}7W`#7c8lYi{SRkFli+H}E1 zK2l0lPYEYIZK$R-B%$O}30 z(=s=Ds)P-Qr>|kZ&ncIW?CBw?Smzo!fuGVyHLhzYclv>4pe~!)5JrsvkC0F?(qX#6 zFT1TBz3jh|nRHYxWNrIw-y^nXW`Z8B)B=>%gmt-5{ zJDdM3C9uz-Flt2b7+yhllP56Tm5CZZxyr z&st=La}wB5%lVj>U8&(7+%U(dN|XS-xQFO-2`)fEsPEJpk=lNiLm9d*<gCXHM|L!}XVgEl}9X;;7`f{>^)rl$# z71kl+loUN~2-5~S_M}~9K2gty_W#&v@_kSOWu89y-O=fY91<2Dqf{BA%S)FGxSJa! z5M=j=V2A0ykMtUz?dT-dspcM3@HJ-j%(>-xsyx{WywY0<3Hi_tO2AZF-<&9-brq^M zyQxWNuTKu_3Gz^yU9LhQNbI&WZUf(FtE1lAEo~<~xf*+9MJ)<*zx3=Ip;0SmW}*`O zSxr?m_Eiz!mhwpEI+~4FZ{a33#bPWHa^k#8YC{x5oQW9RB%_siayisrzDLJazoUxBvf81QZ>V*h*?P+}g z`#%C@OKT{)$9x9|IJ<&9cZtmyNgk~>n$TQ^A<}WJ8=sCI z&bPX{T3OhS{xl_OyImh;WR8ak_wGq+4Sy?6^Cby_``2b{gfoA7=+Pc#R_C43%p)-^x2h=Ie4JW{M1fYA zBbbOmeYGPN*<3=sWLkLnBq=Nz=sPS+1t_~iewYNbM+Q!=fazdtY!{z6`r&9t2 z(FKYTn=k2Zg|}4 zZ|p1VDcAhbyJN%X29OxxIo!ZFMJV(zjDwg)sIV&fsHCx+TR&)gm!K@jq?^~0m+O|_ ze8}V0^<*aIXui^?^Wt*vOBmBcBimhNbxvPHwVV&8(Q$Vb@?^{HPh;G*)ZVxtNhJ3= zrZoN056nB=s%Ck(M5>BSJ`EKc2HDGR0n+Q=S&FJHG_Z#TR7nXA5IX35k7&0=J#23S zi-uBRKC={mEeJYL@UpoEt(J(>>DhVexL#u7_!6k+pL*^$_Z!?lj%QDR%N-!{>qFq{ zO>N)>sEnX@fnYg4NetD>qO)qlG394_odCmweN_+9h}PnauHU>Kia6!sJw;34*=QRe zS{elmo-*`OYoSqsC1O>5IfZjFayL7r z7RCcM9hU)J-?9aTqAMshpv`yZzjDAm?oQ(5L)_F%zLI$sOBt(mF4>p4cek}!Bia4x z{FJ^GBoDC{%i1mHi&*)a+B#cHtNz@Y?y;GE=}J7TM}SDe zIjsJAI(GoPKcxOygQ2fp{^zw+v2<4qh=(v$I_m8STbaWO7Pr=Wz|md~3XUf)k{v`i20E+nAEgP}g-ua0i8>Lf-fFy61>iwP!D3m$mL_{rXoUL59&9PiUO|ab65d z8#JLFL*F~S#-_Qhyk=YE4y3pYvs#M0PPqG?Ed`fK8VU#;eWir|wn-L;Z@ox^^WJhf z`lGSsU|_7%vlpZ*C}0xB*2)y2&Z$`i(qeQ z$|mEJnBPIt;;<#(=(HPh;AaT@-aH8a+s9m%QtPY98r`AiSIF@j=@{iA`ggl9n}lQ( zt7qSV!~!|Vr9bNPOoL}(Ge?=j<&+y119_AbR0{glDMT%7IOKMgml zYx*HWtd{~bk3NPeh9BXnHo}Q9Lau^>IfGW;L#RXbZtlc9M%n*v?yYR(gElkvWY?&K zE;_%tkKTN#fmrjChHvkjFk7tWK*El{R8ZYz;Bya2zDEXMTJww-r(me9H7X}B<;C$W zO*`hJ5#XO%e`^c9(X--RU0{$#lD`q%yIIjNBb6bjdM^iv8P)n=$JIi)U5*7ujo7q8 z4lP4#_G#$pV3j*ah|(4nS4x5(7VmIOF|Vn4C6`o`3<}=B zhpLU16>7%xB@wQjVW=z(wu72_PiVS9q>r=wckTEI5@v-^Pb)he<5Pd zrpNcIzn1B=T0TMpT)+!YCG$kr`^@EOGUg;#^r}4Pn?CXB=v=^%4M`{EQhbA%#8io{ z0-olSg>yFxgFH~(=Z==l*JxsAVYA1{;F<$8A0HHmCGUMauwNnk_TGa6k#P-!gfDNE z>sfNs*t(ncMsQ=v_Z@oM&O?z-7`CAu@Qo@&ewKUivi3V{nD#VAPmngVbp$u>c91X4 zC%#F+0ZtP_UE4;R+nIRnFuuqKeFo{THt}u(e9tBWX>C*Zcc-JHHq-a)cWMBFZfBFT zVEvXvElTSLt^CXIQZQiV8J#yjHTdBP&h>DHV(B=NxlZyW#%!nG7ZM6*Ypbu-xrH?v zIpa0*A{>l|2fkW6RHlbcr;kmHwJFQ{nZ$%~S0mW0%)VG)U3D0r?v9sgM)cz-5emK? z<;?C$>WnG!ap-JHE?K5T&cxWEgqg(&oxIoDg{+Y_U;lX~uP$EDe%)exUd2>lV&_|5 zq$t=x+xSB!k9N3jZhN{3>BqGs^vONyta|99CR#D4Ope(~h@3JsxL@+@P!p-acT{+3Vz`b!2o z_4qa_;&qvOb-i|x1MHo8wK|Py&3lzDyXByO5(hRFgsb>$_r*cD+gim)a%^^M7a36W z$q$BZEA+`})9p@j1ZHD#E3$%pc>$YcLR-gHNj#F-K6(B>RAwnTDcASKin;lZA-LIp zJN%r2f1)0KbK9urW|S|)w!=6){p0E{_oG$lx6K9mI{xRizsvuf3o(X5B{T$0<lC#lEDuKZyrj@QsJ7BRXl1l6C@Mg1i{wp)ckHD~mn zU-Qpxafs6YmF%DF9(j(r%o|;wHA1-Efv8|n`=IW0E;BMxqlz!?Y{kFu%ikA$^OF&< ze$i-9S?!0(P(%LjkNWrPSjE5Z^WSF>nAGV1U!HrV@+=r_)X&_IMezd;A4;GA+k4a` z)O~09IrNdU;u8<|f|H=An4=hr|ARY4VO6eQ zzb8iok6goJRl441l_+VKQQd#zUOC<>2$eRz7{S26bA3nj?sft|r@XblVE-colSukZ zb~K_m3U&;cPcxhF7A@#uB4oBM7dq{cl;-}Q(4&7o{<{m*j2Gz3bIMpZpLEr;+jN_= z*!6*Y`g1A1pLZ{}5@)C-t{~nvNj2d%yCVlTt6#-$O%+kFR58%R@lp7}aa-?ANS7qh zH!4Y5%jljqcaqJ*1UB7z+2xm$~^ zS>;qK!r)m(FWVa_knY@MMMJM|C3|%qH!fauU-cnCw5!~-d-|%~H*=oN`JX%<`CD^x zQS&k_u4NIzklh-4W=l6Z_BDQ4Rtps?c`Tj}3nhK+bIz1z*LuE^K2oX%|7rm)ON_Gd z2{hg<%oY22279uTL3ORp8CNNW@^iKi<4Hp<3EThIsyX^W^bQ%3EJLWD;D_=S3kO!ML%p`DX5tgXV(kI$5PrJ!UMy28&e8MQD zYbv)E&MH$9SPYbee3bm3wf*EcsGCb!>u z1s`C9Ka;+Q9>C2VMML~y!sOE!;-Xn_MXaelt=z4ydzm^RT*d(+q;@|GrV_WdnMj76 z>`7_XD+kV>6J4%5TZD2^8W#+u+Um^>hV!@EaL3MKGkd@sLQ~YxTKJi|Z=CU>O zk}5I-c76i%8WS-D;QaT05AL74BveH9V|wh$L-|w=pD?wmsiBuSC(Ri(l90DBC{JTI zRDDjs+|UYx&I`R2$(q+I%V~&(7G!fP9RW=JF#7m4s3>Oz^Wv*>E)jCO$K4Rw8)yHZ zC}%g5DvkhRk5cE&rdoD>?S_y2Idut(>7y;Q-o(h`J7>gofF0!dp2INRc=5gG;Eb)U zj}?f?1Ves^gSrc9CGvG?i@@0@dDtd=mIQ#No}0acIZGXrRuppg-+$)eqd^!pBY+JX zOsX}dWi)Q55h>>w9_W2l2skeQrLb%OhJ||?4O2l6_B>KOz02IGy0nHAwtC9`?Kg=z zoK)ZU{BQsAfbGW@=*j(G_*DHcYwHG#{4J>`gTn;D3Rx_utH^;DV%y|otNnOk)FM&8 zdaiF`qcM_W%45V@&MX72-y^ltYF@eUJslNJIv5m72RkQ(lFVI+2RAE6M_vbZzN{$6 z)JeE(Rz)~p#wk=d?2;?YaG^lU-;zcn=!v^uY}wYK1xya&$wLXXq`fK zs`N_Bu&IffdZ&wh1(i74%C}O_^5u_Q@K3fK#s6>K+AwbaABJ0Si_H+8@#N`!X}nD( z5uOmQ*a7)^l{JDsE2e9+r)SK`XDIR_iM;mNk&P$jC-S^K3+3LNa1UZ1>AoA4>S9r! zxd|BMuH|yj)8KH)z@9#v=+kf4;~+6oUTMUqNlHh5_y3}<^=OYi7OLam;;?Qptc0{s zjjRhbDIh?tDQOC)wPmO82#y-Hkw#Au3=gm-7v%8m0;#j#HQ+yT`Zz>ynYL2LI(9{E z$#{`cny~u`^*SQI4kzBCUagYa8lVO?ME&WSm|w-zmolU>WR_;Jytmf*ee~(VS*TH= zLT%kNmnLzMW@$EZ$VhXhn!&SbcdzH<_-z|y#`SQm)_<94lGCgIFEh;uSWXihSd|s+ zqPdcOrQH0wQS9IK#DaP5_AL1RY8z8C+*m70L@0QRf`r^`1@g2JFg*QA91cm> zD{LT#zj2WtKc9I*H0si=M6O!_U@WqgCR;&GLdULJm|%WOlsxf(fKP!mgTKH zZIz0-Ei*N5k28(2Y<$XY>+FAGC;lXNkX2rRma}3JL!S6JvrrI(b{$ZeTHS3;=E6t$ zlrnefJS#Qq;metId8U80+f~NOYOY<>rZbzWr?yE$fT%~jY_Z5I8vAgAV4Rl{6cZUn&?xiijdzGy&LJa7w( z)h-GgBVGMPMcLqW%Ft@aw=YG2+vYNY{A6*E!PNJeoE*wJy{PIrVUH}gmC9DyH*(Pm znwM12d2h9=Ze);%?te>AmY8#=XTjDU0aMnvixfVO)-lz205l@5(YCT8{k*mutHK8D z5_2}%soFq%Y5YXU7(>0zBMDlP z-sc_khITm%^|hh7(^Ql02z2zRe}UG1G=m0V8V%)am1>q8jGkx%>47waE32W1e4ho6{y26Xz_Gbysu$Qv+xjgmN&Fhw z<}7d4in>b-FNuf3Oe5yobSZ*K^gMZk%~f|9u8&E+5<(*;p5T){MPz|{X~eH`an*T3 z!Y_@11|zA;jh7)Q?GPGrusl~5JU*hHt>44hU(x<8( zY*5M?f4@E#=gv-)KefhIw0)kk)An9uZ+5_;58FE9J8pBSql6!E-dlrZ8HTf$CbOYk zW;X}{ud1f?cwW6%fn|PVSs8^!`sG8`Q(j@STI>4%1GXk3nTd%JufBijN?9P!L?_)a z;h1>119Ao*tqU0JOu$Nu8oih#x42D*@8t~sTO9usX{WJA4UfDqrtjcZHDu}f5%$VP z_CmsnnF>uHpGu-@gRBm$RCvhof#~)I#DmRAJv(hELV8}3B^bT!?9rL;#4{Lok-5*| z*V&PJ<6Ry9hFCxnRQE~V+(K>X1N~Hd*cq@-HiYWN7mR^LU+rca);>PLCfsgQ91ing z@;b&)T_WB#AS61u@WP3{&3O6)rf!O>CIj>h6^^g?V(E%;L3Bf0gN!6KX^&O9# zyjR@$uHm~9f-og#4~9Mt*cg`9FTDppv6vXZGRh2hQf&GBwQkkzu$&08uDW>jDZ%~B z7Mu5$+4;tGYoC9ew0uwCYMCK3BAvt8Frl&@4RXF$0c(g&{868|{_eJ;yU@^C@!eu< zn_`=e#e^mb;{SULe;xlCYRMjl6`ts^%DKhFSk@Mmvf>dP4^;*q;g2Tj7%YllZBy1{ z&AjJbj&b@pPB(#(+XO&9|NZsV6<@N6&b%V>U*3BOJhTGVDN*16E|W3qa6$X@5yW?# z``F<5-VJDvEo->T&*KC07s&FDZA%m;oR_k#`vO#?R3+UkN_-=3nB;Ca=I96vefzvf z4w}yPRXYVqmXIULm%0%|u&^Ph4f1W2*-=SI$xtq$=tTDUZ?W?E$4>hTbfSUMN90@- z;G#fcd78i{OX7@HJ5^RmO#|rIMKkDreM>)mQ=%s#0e7(ZF~ve(z@H+s(RN>MGxcO| z=226;DQo-J*5jdlj*7hSrN`<^PZ@wf_32hdzo8O}0bdUvhH$xpvWNMS zltsS}2sT9MzQg`4w-b(a@u*gOQ2KWAU;aEv`^)dW-F=Y?bJwJ6k0kT;>90u5KXWNt zq@|z2Ws6@$wo)eZL=kaXsoY=`NY^902;pd>96iljdZR{FuMab9=kT3-i@wmSrgZsq zQ%P184fSL#|4q>;#?p-T^=Z#L4r1cMk;GT@V4dcX67W1XNa_n5SW1EByQJM%(Rn_= zU|hs%T50+Mw~+RB4qCZQxq{>vKJlG{b|xR%SZA;UoK5p-^7T$`5u?n~<8hNOF^l5d znRdiK0MTqo8jnHO9@~NV?kzu^~%Yns+`b4*?pqZlxV5^zCUSV`Ui>y4*VW*y~ zz4c*?bD}ecJR zacaw+%E z=>ooVm7}QDFHzBN{99XgnZK9)fbp7umW=*43s8A`ns7pTR?SuPyMI?7I+@9+;WDRA zB4|1*(!O)T{pt6Kfauk5tKE~N@{#ALNS11xOx9Batt^&Yx))=P zK3C=`UX}kmj-MRBEB+2RjnbJSXw>ZW{937(yX=};BtJ8(@*!CnpE$dJfc3Fm#nkmv zq~f>mvN>5fnKH=Z!41f|hy6?@r%1qaTgf$8&{#AD`xi*DwRKlMh@WRp*>`$pMm{O> zBv*$EH-mu-`lt^?_Wee95qUlYHVFNn zuRMdR(WRm7)BMA%in@4YSi?MjQ`1|=O9Rq#%UT(mtIYW^I^^*Qb%8IIF0xJjo=1}? zy1xBejT6)#uk^4Av%anabc0k zGs*cgd{{~`U_e2JH&JzBED~1t^vNp@{`R5=3cj%}GThZ!vvWOk?BN#g5}=du z7G1rg!UX5~q56wua%aaF_EzgZ)OGfRQ&QaH{|;Vza~AypuS-oRV~xoaFeN7>UD8&$&WJ(=8_2TO-{hY&@j88F=jzzkRQeS238rMENzJ1=cka!^ z=%BB+m+2|Jgt)jmn~pD6$ArD`4$t(?(r_k7Vu_-B@V0D*2gV8u{rfifJjIzji+0G6 zW@_qA^d2_2eIuNW(=0d$1y>fFu5E>?VGm4Hcd*lBJ1*JW&lphxUOZ|{Uv#C-E4HVb z>q>@250wvleFY56Qu4xhzfEN$=7lOZ$1%s+kv!N}>Wwvh=|ZJU_Qu2^yxJ+P#|k|c zNVbDDbE%1KVJ6@$PE}=ggDC!z;Jyx8)4i_X|q-JaW*7 z6~}7|WoWASK4#+a;?_bvNhTM4^`-r~r?4;9mU!)?8V)XuhB!7kfH%Yu{FiAo5OA}f zibfLkx(af~vK)A(eP+d9Z}l9{&Q{k)G*hC7Q`c_6O=wGf z^eg4Gb4g^dgsQrpj^wte@to{%bB=He#QkW{Da6hIk&8V&A}Ll(*CvZ>m3#@o2~ z=8JTn!DH`DNb0%*8A)cFbe^$}&f*8pOKFE{uNO9_CQkc%+L??7+Z6GUDO{#6l2gk- z#-ms=qUL=IKDR(i!Nv+cM3TLg>4*051hB?fWYaf)F_9f%I=8_;^mJ7~j(MPTDv-+Y z^nGrMmSG4=Yl#)kCNjoF)$bxle6vmerKJIvT_^ccDrA)81=Z+9^0hwcYK){BBA~9r zX%rc3X5KE_0HHA@pzL@Mih&U%kQL)?*I&4LX|Fny8Z`xLXJGHWIfh%D?i8)(f7kX8 z*tzbrU{KL&$?zP$um6jsoc(je1Zp+U)m7HGn9gR-Ql5wD+dec!|D@9JBt+s4np`7_ z|M9Q^D1255{}iqz5-KNkV7oo+?%W%Cvgc>aNS@L$3G%e9(xv4lnP{X$8zic&l@Yf< z1Or%2qnVkCzlO>4sYoQCC)phuH%Fj`r@bY|W>+Tmp*D25(QN-7Lf{vP-|@Op1SVmWE*XA%eFLELcOi&cDm@ zCj>HJ3+^%^D)O3d`eDjeI(!!su*wz>n#_VizVyhk&~h9_LLyx|x;i4fx17^e{$7A-UP zv(HaSB1-AmX9Qj^9l@rZMI;bFSs9#Ah{5$xhlJv__jxs^BpK{;lHz-Gw1VuzKm6~f z*{!39rJ9YUdA7f4J~O#qGKi*e-K{7MBJ7E<-Dd*@irRxqMLwiiieAcYQMajz_(o0$ z?5I;lwDuLk(v<$t2Ke|s%){co3SyQ@aG{^&nBC~=+*OS4wvM&h?06V8`|QQ{U)mM1 zjED6jr)8S(Jv8}aKVfFip4?adiY5v3^u0Dd(F4ncLklPM)4g#-Lg7NU*77we%m!7P ztykT%We`1N=+QM99LEn~H9)+fHimlNd!0h3xgEt>()8N4+d#nsi(MzxIzq53z`&6H zV1L8;Lc(US*Bs9$4a%oQOvqWfullJ7Ar z7T_~uVr_;reX%-c2l7tcdWS#7SExAWO-hPHa|WRgCu_S{DW7^pMXy|FpPQA@F8wH{ zml6U4?aSIWPLrrnBYi05{3+3q@$hNu_Y^MStccLiHh{a`T~Cre%N)p1v9}*G3FZ|- zJTKt{d>Fr{o7G+ZP}jkp9O$8?Bjmd`Ovja5baZtYdMyue4$W~_yh0XlYda{Slbi7y z^X&k%H}5r1utR<5$pvQzTyjZ_uOo{~QD4G?K0WiWD^e?Kq;t0HG+t3Dn8Ex0X$DBT zcs*QG9FzoGh}nM-Cdy(4C(*ye%aD$f&F&_)=>E>@ zuh2`Ih^0NZ#=bFCY=K)4rz@)x8gPbgS!&n1{8M~c)woll#`MWClJcQnvCv%nzmm_B z`wAEqj|>wYec*;}wCl#DuZwtX+SjA6wpiqJd&i3QdD3KuR%PG!x!kYyg!_6k?CL@E zRsH-kdE!X8bO0GGfC11WW-pmq>Xl6)l zSn)O%u|M??a+VctDX*7HYR0-%d9WNJW# zxD|+rr7BG3Q(Ng~<*ODCzVPoqj0Sx;jUpCUQu&xo!`R-*JnX+qju-1_rma`Lw6v3a zA5kgug;ho{!O$i^YhadU3yRMb|f&>yU+IBuBA#14uov-my%n zwUx!Qo>4QSHiZU>MZd*NzdZ)G4JJ_1MNK}}BScZ4(MA9!bzdHrH~Wn8J&uE~#FNtnTOPj^*(18k+9@(_u17#_7$4#mEBX`5D!lG>m++Xm&?Z2_d z8%95WJ>I)Uk%B`VsF67DF_D5EH5*afeBx~ZBfszOH4)ux_OgJLA9=TAjX7nSGj%3G zA296huXrpp>P^EC0}axo;YuJFzHjDF;y{Y%x1g>dS(ip6p}8NnEcg2}j0><)@eepE zZ^|skP5H#J)eS6XQ z_u%dh!3l0HQe1;eaCg^0i@SS};#Q!z!%n-_{MTIn*oXUY=Lo*R-~hhYp7*)#i&uqS zxLy@cL@l-L3}!khP87X2u~AH$+kUPp5-P1O4&0$b*i&EfC}ZMn=*R;*!lC(iN)oyw zncY$K_bKm;+EBFh5`5OBdN26ai9Q{rf$zf1ucKUZ$V-$cde0vo=JZ_4+U!u!f4!1> z1}Q@!mKN^sV@ir?lo@bh6Kpy%N9S-FMJA;-%y4svz7Y_jqxWI@mKFlVd3V}A;LyWX z>xmusQyxw|he^H1`zc?BeXIJ8__=C^uxT9BC|hg#I9Y8}pru-G|KoZTk$7E`iD`!R z0Jq#u@?w8Fz#KYgBg>>uxIc_7{`jy7$s#5cUW_xRV=;1xiFoAFh`-d&xq15^5Vnko zE>G4RK-%^5H2lqFYV>uHR5hQX1f@RUT}|wHYrv~89(W`T3$Huq*Ci9F{Zg8wr>XQi zXOiv0b~6$$g#pI$v_rZd;V(psDa_b&&iiYDa$u{tgXCyZ=D8FQz-O^L zZK)tzgmaSWE8;z0fHd*6>Ks8S9o_&X=mJ?y=@A;|7RZjqhuzY49Tx^tGPBmXd@Y}A zq+g{yi5kDB(;-LWQ&M{%0yXLzY*?;9Gt4dpNA!nPmtzO79`-t|OT2 z%?bLpvXkWU#gHMIwI9qx+O4#rZwzR7K{&l{pql##^Zt!=E{bsgT zU*37lBLZr+Q~N`s2v$|`PKnc-e^x6xa6`xlOc&b~mI9Rjt%Z(Sc>1wH-$gYSW4dtaaqo@z4FlXKF>9FB6V>kwu)vTJno_qGl-AX1GGp2 zcPVT%chil|O@P+VN0R%prZkg6b7v-fR_BK-hVu;Ssgc+OBGP6QS&|d0VUkc4m?*#-S#WM+BvbIWL8RswC5Q#$@H3(l)@eE zU%JT5JJ_rM?ZafufZw-|a0%e5zxUILi6#DeKfN^PGB`~a(=~Z9U0{u4ZNp#3xj%Mh z3+WQKkv>7KwqBuvQGfjAKf8+hTG9hnH(fb9L`hf^qo!&FIyVxNU%D^IIV2rp)^?|% zvgrX9Q#7-zStTO1?E~y62*li`#%NQ^i`rcMj5Ov%DCrqYS1lcndtq?XfNS&m@s5 z`eCwSo??2L(nrE?NPH)ABrRp&j#%ZHmm$9p|A zFXmPvX)@6=SukH#JU*VT1M^+FrGL`pr~s^0xE}W~Cz*(%t=KrWI{&&~eZCf$fA;)k zMzluyy^UWZrqGcSvDFwarRHFc5X5QhD(hat!~~Pfl~@_mGC=IyPb&4`pmo+wGhADZ z;*4y$thmiEjk zw<|$EgB5&St*XY?Y5!d4*OM0gxm3-c&N-_=A`Y6N!rn>219y-R}ARs*Z7BI8|31#MXV`-2BhPRj< z!Q3iDr$=IZ`~D!Gyx)E!pG|y8K+%?n5o3Z{ciq+~3R_JgFY`|V1>QckwwUM(u`Tyg z@L749rs>VHtb~e|wEfJh=3st5=0OOz4H5PdAvLjl%f?{+Ymq{`cZDYqvaZufZA^?{ zUU`yZOLuKGO|QOGk0X{6Py4Wt3fYs?B<>_ty`_evkUsg?hzwGKo|h|jYQ!9MA0Y3; zL}S7Fhvrf%p?%(~#g+9f`u@FDpb0^1&7}{U2XDn{`9bO!^n`Mm@9Mc*m!Xo6vyG6| zTbv6qlB>l*v+!K#s~pE6jgDra6Vl;bK65zD5x}p&>&wdVtH79{I?S;Y-r|XIBSVM3 zD}&blwEw9Ejaa(>6uUI3I|9>L(4x$n!?n-pprpL6NY=;V=la;d=lY))`0QN89qM@` zn^bXZTJota>znq%zFrU6N6=4j6e^m7G%u(RP=GaEq?7YQ-x(5((a1T47iKyS<5&FR z3?8ukd1y0YQIv1-y{2(T#h_3=_>5;6U_NP?s_IsppLJy17(u+e!Drm7=^H@nQcD-u)fB(!#AEXdR0t5>KrosUQMV@D6A1MMi4F1vy4o8mXnfRaJv%q?ig zKPJA_fVgj;?9xXn5m23tqLES8w(^tnf!AXOn1|Vn(o0Z=^3Kz40kQ{RrgpiyOaIxA zU%OdR3d_|oP;J`?u>{H^Ml!vELArL{5!N5ZoBRO3Tzsw=~q?a z)~}V61}&GP8A87vW6<{rvIV}=f!WFXowNcu!QQ%Wi95Wl{h-^Cgjxumt+a(&$6s&o zfdZ;mzeU)MfR=yQw& z3kme>2vg0n*~Ke~NUhm@=~dPtD<0tljFEmQm+yy0KS#i+J7m;OClx z6HG|p&}=Ff3QK4z&E7a>ZU_kG0Z-13*%My(z0ON(Dv{W(kxJ%Y@kbHLACCHKx+ zSG&)KdbNanR$kI2Ez!&H{8F)Mee$z(4#&MpkhI&`q;dnuu;CA!AjBw<-odHQEqJoz)qK-XApp(6ijl{I zGPg_=@Zl>+noyQE;RDXlH7PuAmSxLm+Jj4ud1q@gt!zH#Bd-scG8PuTt779N<==&q zZ_g}xeEJ^B_~_C?(~wahT+=pz@Bp=H1m!1O#8OH^rVMMnY)&z|aV_T&b~UYITW!-yB=v z<21+~S4e}0oO}@Qu>}yDCL7Fr=xsi7Zq=+kKh$X~x~FNi5ELO}T+g-&cqpU)`q*d( zl6~j7`-JyZwWsY4YGQ#&KZlDOM>4M!2QP(MZ=#+(bscF2fz?M7pMi#QLl z*(vYO{rr~R?U)el;@{1#b%=%SI&4k=T4LX^`t=;hlKYIjmNwoVTHdAMmi1#tmGOPj z6ndbJ>+$}zwO^IUd9HP`dW<{J3=#}ow%61XH`$mtn;sat41--S>y)R7+AC=;9X#<~ zuhyG>e5=#oX$A_Jw@E%8RK(AyS2mbo6K2StcA&*Q(p>{Oex>7&3op_eK)cx(7)uQH zY>14JEMKa+Yn7KBc=ki=Dp5qNW(PLf3$ZpY(fB2HR9?)~aI`X!hlZLi_boNPyj zf0fKXg^q0$z8NjdAudyQ=)W21A%4D-_KjO0+5Won^~D4(_t>g*WqpYPfVB3MZ&KTL z;~pvu&0jN8W)5$eM>$O;VmxBiR*C5{eeWLFD;J0VwEFRIIHh(IorQ z!0rSRI;`jqTqd<1c^2*>#Ywu`oRhNjj_7!oY3yg6Ye?lNJa(AI>(o(BTlM$k#g*;a zlb7LKV#W#9YLTQ*n@n$Cj z&4#vEjr?pq)bHVePs<@yO-qS|HWfiR=tsWjs?(8nyKGi#XJEbv7Px7qC|?<0&u9pE zs2ZfLHu>UW;SSKEG$HRvm6?$>u|H4bh2yj1Xrgpq9dYNS^XvZ(IXbue8*-cpE7=c` zd+(I{JO|f})r(c3SG2_DiB*gbue|j2mY}JKUJwI9tfv!id=0FYp8??M$@*c0 zLEFaNMDypFO;^4VcfyepfTphs{vfsDG{~Vkad_4|?oOqzBk_dQhp$sTO}aV7JS{sH zvrg~BP#7MWo_uYKYH6KjM*HCrD|QRK@C;KH7OvvAe}G9N@(mYK&+EsM zJ@B$V=xkB`3v4AXO8m$Am9K8wO4IXRCi;2NmbE9};j{xY?@{Azinlr$ZXTQ*Kg4qA$n&X6GWet$@E(o9*UsZC>HV#76 zP}5mL5i7ZZaKq;6Fp??NiyJ)!Yysh*VnS7!n*=5_zQ|;dfRz} z6URw?elvi52^;3O{ITsb6+5`8-~1lw{ko*6i;OypQDS4_kFaRLzwHDgd*n5CjM63-P^XwLHn+oM0tBJUIS` z16gKN{$9OHK5iVq44a!1e0R8B@VqB4>uA-?2WpfyHsPE(kQsIQjt{@a`e>=Wn5VJ! z*Edi3#-ox|Wlv|6W&D?PBMT5~y!bZ3yG3LKy_>9kbBOd55T-6+&b(OVdUF20`ZG|9 z-zKEx?^*!G__P}KPUh0tnk4lN0<6IvyGH>jF8rl8H%mKVb|>rtTRbILSpO>eg}P+D z4pkdEaYoJdVUqE4D)PTDhb+v~YTV8W4^w-#ln!_(zJ=RMQD&)E|JqDCSY3@P*q!yS z#KqP?amD?0h=TC)+=;V3e<#{@waQ$l-Kqh@TvGO>!U)W_@K^|22#+FmY(B?_`DzZ;G|v{|7IxEYiw`~*w=r3i8T#r#)owK1 z(I0b>J*MsPxybN_yF~}w_0atsm9xbBx7+-@c7qHxdMQq?B{)%#i8 z#6QExaOi${!M6~BdR8XA=$FMtZ`>BlF*FKi)70V}?=`@aFP7E7i=qgRkDShWkdtW@|RP@$B6*C+OAYuF@%}O!@_mXHq zW%>1%jQ%HIg%g+j)KKWj*Vhtq;lD_!P4VsK)HO^WoA`w?5xMwYGkI`o4;IXxokpj1 zjHzQ((&+mxj(tk|E~wB(KU#FO@~m%Zzw{K>vO4Lh#jPksX%+XW{q;3yRqs$Y z4}(l6rP)m79_9HnK}rHS+%T4o3I4w#AP%H5eHFh&iUt^{Il}%}bCof7fj!k0K(!)M z)Mw)yjt2Sd+~Q($>KpLzWltR3>-?`qAv>Za%{V|ITl&-X)DWMUXz*S6QlTK!rmgC%neSS# zxpQnXB(Ceg%{1SGuC#Va2h0_*M9rf2!PfGCDPezqsPK|Rs?@TXu8hpNZ?1wxkdzWc zgnhQZh;J>JRv}T|;S}1A+3+KbeMzlIjhlXmfqqc7!T_qStgZ&jYOF(S`%YmN@VnL` zSE;rKzv?+3&PjgXa;mE~*hdYoX2UN48KQf)AHD|`Pn6TCxtOI?+Y*ZJ?*tuBQ`$ zXV`}U;F0_jQa@Gbj|EE>$xgO&Dqqeu$%4vV!eHTtKBLL{+Z#^YjanwGH)}(kU3r&( zdO1m$1AMtT!-!;9@z1M*O)`)c@%ydG^d*5hdhhRO&%c58tGs(&`L?9pu4v z!y_qnBjDldS$y+ep%Z3 zu#SmI9{9dMVn#GM#by4*5c$aP811z^`}Ak$GlcMQ=V*%8YC~{qVUHcQ7?HtWdobWb z9jc9f*i*vW=IGbsYQO5M`gw{CNGA8mP2CJ=qWot}dj{Y7YFuW#il7+r*yBzt8sq7Skf^S1d zG6+qU$MZJ++nR__xORiSjz*#z^Oml!k2AMMjjVvVKnKtKfOoROl%m(hX){M?($KUy z#dDko$CkQUUOmCf=;KvFh&XtNss)N2fXKcQWtRKzx!*~k9N(J^$Jk7(C{&p7k zSGBp+-=!158vTI-8xp8ao9wHcAU6VQxNtW^wpDX-ZmpwgCT*@KGHJRex<#Y2?;gcV zedO1M{{7r_k52!K=wnbE`zxs{T|`?=&+L11#2Flu zkC5l{a|1Ulq3?vy?A)Ckw-mi$n+T*rew&8F;~gUibq0Cnle1887H@LlYrY=l9XPp6 zP|~0k_w@zTaJM*A*Vg@fwu;U;sSC;UTCL^wENS>T$O&C54oCyNO+wa$`V}|^UrPqx zgd9u>%kOT08jos|ZUCrPg!DfYX-sR|i?^+3i}UX36M_d+mO*b7#k zc!WxGj=)2D?aGkm9DjxU(4z3CK=Qjjehep=B(#}F4OqG_6cS!M*xg>nUrs69D6#^K zospVyMcB$#TA#mVF>1w%S=qs4U6G}H?{Z~_kHw=fd@R%Trt@9OlITZY!dR}tAG^HS z7?1_lD8UB_FtTwYTKd7c{GqT`h|Cmwo>r-{)nfaxvb`wkS)%H}IsCf%J&!&cQh}$F zO)`KBd+k?~NU^~*YvsC0Dlaz+B$@EfFm|2Mwb6aP`P>WEEk3z8Kc12yJw@+|fq3I{Td z*u)o#Sv-rSgk%Xw6vQb~D=0~YV)IRnEB_@G;GGO9ns_D2TtCKF)Zt##cvOWOm9c#+ zSC_#1+qsYu@*3D*$6M{R_Pzt(sD~eny{ta~alpF~1^_f3uaf=GNsd^pU$93dy*ro> z>B1d3>zEsOHckgIILFM!Kqcc-lhzjT{9fhMNnpXhuGV}%ijTx@C20I4m!VyHl^SFfYspMiRtY9W?`s6LT}lzYV*4+)~<=@ zb9hDBim{)CY}x3cXEbnL<47)~<2PKieHd+%eZ)| z6uzmuTOn{8^3@Mbc&eyQ3br3@bKK*#>Ho4NG8u^f`u_J6#cKHecYth5{%;@R{;lkN zinq8*tyh(BbM!eC!rfF~DB>h+U-P#Ok?r)#h@`t~3Z6f!ZFXm;WPT(#KvF7@w5V+( zYT$8yPPJe|T9F|}O^IlhS!p`3=H{kbKw?Xr0qxAq4G>K3yc{*Lc$sm>ewOF~yA(`Y z0z$Y1XpZrnNl7>4RxOWqKZFp7maU)6w;?c1$jgiOu4Tr_+H)zgQ8eU^YhnB(rEeE~ zcGRgaBnSFwyDSXq8K?yXGM>Hz4exk;(n<`$0vUKMKy^ko8-5u za3^l~O+{%`JJrcW14SMqMROcT7QpN}`O*H32-XfqOS8>0*&{4UA_r6w5Ls^hJiN*8 zduVM993Hn>%I}i;1gt3orL(vYcl=vtxO>cK<)!kP1?kLCI-vKYl9I3myYoM9>bKu= z>1Vr;#h(v4Ql!=YBuH}dJI~+(!$SsZ%fI;%O3FN%tJ&87W=44Q)zTr0c8X>m*eB?i zG#0p1;#XTTlSdz>_4!&_>wF)>RVcZp6`a9$2pnFT>RDPocgiB_{mE7Vdm4Pe)|6@l z)L4E3$V&UKizG=Hz5gyjJU0s!QLC7z2uAH?`I8U(w92>q_72Pau;}}{nHktA%Elk; zBEo)B6UVKdc68H4Z}4k1(w@pCG&6j?O-|yi$ZDJRdBMQvbwPb4d%T^NyUx^ipH5cR zCVt}+JF>C4;@;L1eDHLd3BRYc1md}ngr$JY)Ez(my&=q0>FTMrH`V8jDO1B_pzSh4 zG_Oh3M91?!)!Hccd2%g9_s`Lq{n-Xq2f#{*aH4V3)?!r(hq`=hYMt9@+LeFi9=R;0 zP>teEul}|$?-GFVM^z|%F--N`%o`BU!965qA92g;uY#vA<+nLKn$}dO%e5w+%S5^2 zo@$;C{dVic9pPgT{P-kTbn3@GvVx}>h?zKwWGV2_gFds_R22JMy|(1N(be98LVNUB z!Bny87Jl&6)@-tzp{Uy<`}e*K`!QqJcN3+YB{lGYYsQJruy8#fS+yI6sbUpe@Ov+D7Dqe&9iZL@SmJs1Mw#d8*dtR zFZMqQ#Gw_}D0ip!%sm$|jQaf>TJYR3Ow4L=9`rWg#`|4NT%K!&V0GYMMpMs&8`~U{ z+cOEm*BcAmSegr|IdglxLoRzqVBKAzzq7PsPg;X*uv}ip75F>%m=|Wz3-2txL<1y- z7fzG$HdaRqY5u*4XQllKTX+$bv8w8aPOQHcjd(J|+`p@>@I0xjJHmc-UkNclba(T; zh3A5TKBl*L{!U2?J9_XCV@vxHB>X5N;lqr>w(bPwfYhzO(0o^T4DuuFqP^mJGUSJc-nV1HsP2YiUttk4dwUuI5Xh#App45~!cYY*1Sktm*I zt(NMnw{T@&9yYz@i)8baMbW^|)V3?O&g5ZrpB}x28nH7&u_D7DVaLRGmsjL=Z2eij{@$X3w*!x*16&n=qP#xy6}RQG^i?7?x4gq z@p?%z;vJ=&k0_ZW%U8~R!1s@~sUWU@81XD$WIU0WVWT`CU}KpC^qUvh78GDeQQ&kt zxE+mgHGf~E0=e4!de?=l#s@`#MOhrP(|fPHJwAW2nrueH^J>hSe7fu1YxN2KxULN+ z8>uT~e7f3P5^F>!ufn0+_6=5d{x%y$Hezf5F@ zS9%3`>>y9?Z|Um&cE6mDZl3DBoJKHn`3Qo`i z^hn7d1H9aMmEbiWQ*eKlKVse`i&VJ}ZPO%Kaq^XLh3?^1T+y;YvF8vM<&7U|`UZM3 zT$YVl;sKd!8>31G7Xn8y@BMfkQ8^$A&yS_EgQ)rs2PgRF zl)po)WA*GIal3oUp4r)9_bi-6Y0F+-fnTe=a^P5Ctze(4e2$f3q?S5-gy^Z7nyp$c zfoCUQ`RU8|;TIF$e`OMEtx-8R)c3Hk_PFoTg`{K`uXS%!1(A!ikus|gSuJ)ly+T}H z&H}qf=N+Y(iqG_6LzHp46k3`GIlYp7#O6yT%Y&S5m+?-II3A9E zy%Z55<515CI+RAKzKn`M+!J8CFlfvd{IQWtHLMLz>mJ4>Pl>Oq8{O{yd-L&3CHVJJ z*#wZNFwOU8ZXhuk3bht(q}WWg>+5$)GO1zW-Yk~k!&_a(C%69$m$+Rpnhz-iL$AKB z$;pRT)12q`iUy$4TlNKJE{meF)1_~kB0zl$o6`b2z(%c$z5#g?=#m)x(TKLMUJ97h z8hFs~JGdA$#y=ZGIlc!4JU#D=%r!I9D8%c)q8dJ1X_?sfv6&6`)5|;8>Ct{_HJH_YC)Z%z%0Tix1P%!4g@gm0FcGdB^XU@NbB z{4lLW{q8`wtDbfbCOtD2D$)ka!c32kf|zXA_TUwyxzJ^(K;w!tkbw7yPhxOG%-aZmI@6;t>KIGRZ@dA zxC6h4XjPF-{S37wjBd9-U)rK0G;FQ9szn&AqGhk|UYJpAZ!HE3A#^k7(~n?<)GwUK zC$uM5d!m4$Yaiwg1?PV-HGh|#vCZr3ic8OVKGm-xM!6>g$HzZ&A}|O&ZAI=0bnL_{ zezLUvd3`sn4?Up0DB)e_xqXS>WK+6;hU`c68+;EiU3(*waSc&%r%QVB8vPyJiTM$Zdgc7to8=P6%Mk zL@9Wem_oxy3rCbP&o@a%dXv+Co*+<9&38fm2!Jz{49;U(qa{_x$oPX7xp_e)H{r3Y+a${F#ViR>10w-zLd5% zJ=WA-T?^`6N&qh$E=qZfl(8 ze;E@f4mGpB_9(4+Y1&k2Ha2>z(BVkjV-ln@B^sMlXgI~++*;#dcn%Kf*^a8<=!u6>~|5-5&2mh>?wRY$1TIXJWHFwk8OyE}cq)e@>&}&-04B5wJK?lrUYpng&wRQbWftVlL8BT_9P z4uv71tOBey;$zB=kvSYYMZBvsO3=A9U`5~>o3c$n6cLf))I`nIJ13lf@H)jYYSzc^ zY!L0r^Lh0)+7sX~oMD#E9Z{Z+Y|Aw9V&>rhX|)hj((=}A^`@(3V|7lEY+fEw8Az_e z<#0l)_n+v*ZSY##6hA-6#060bV3Dsoamuj)Ili-Qn4OJg+71BxyCC4Dhk%DIYMBT$Rknl zE>>YR!VC(cE$Scpc*iY&2!Ew9+CO{dui+@9Sjs7!UcXdfR#KrDESn3KdduFp>-Aws z?EZtiw@;r`)GNPFh9uOA&RCM}bmrub)D{w=9YTzY)%Kq1`;k_Swf*+RDS_>yT&XQnk z)L)FbsBuC==*}Hr7}Eh}{UmmeUn%wFI`SKs&pv)6$%f(kTI4qrREOsv$1PwQJZp> zbIc|9de4cVhXI_-Z0NcX`XX_2q(!VVEUS^X6!Y(*!ZSJS-$ez(*+_lr19U32O0CSy zPE2Mdy{Q`r4F*xaUCF|QI7$j-Ls^kKFE&3YElLgl#Rl1I!I&H8%>xOYG9!~Vn98Uy z!mGG?N>j^@5{#V&ZC4b31uWm8C-j8B+`)>bW$eeT_T7GG_Fid)@0d3nEKa(b|4yer?lF94TERK*bGeV(MIke16UmyoNvtn>ir*DegCNDBKf?g*W;@hyT^d}5x zp5-e~Dg^JFA>OY0!WvCxk!L4 zH6H*txwDic`{%yM9`vs7hHj>&%Kqw7x5$$~cLRnSrGr5~j5Aj3o$Axe@zXwjQ>UH? zMTeH({^-W@0_wmWmPS1^Z$rNzwjg0{fqtx(%>h0bjSY4ib7_4An<_~MjU`NL%;7N# zu5H^!?6T`MTJ)ZD%W~UCR1}xbxd9q*=CE8;DpP+AFxEC`-PU*FDP3~tcyP{KXz(p% z(+qEit$qMI{K~r_bfyH6PluY^vK^CzQ;gCxo+eIJ=@l3AELpn5PUo?ur6h#D`uo69 zfc(4S>#&OAf=54;+h{X{Q>%M0182pfv6)oz>Epnx8{QA#Ilh*Y653Hvo+kE)Qf)F)+tjbriH*>>#1 z4URe&^R@8Mw{ccuNhwQPR*$32v+M31%{BHs&*{y0nv{CN!iHYRB*w@EOmTvJED8oT zjXU$&=5HvGQG@*gZTrz{)S|Bzt)wN4V)=fN2!T7lt&L>7FB7Ujpl@&=GSqDCL$#9J zk>`&+NiMkq)qnOdHXqSho7KZ>wUE;Vk7Qqd^D6d)eRqQ;6LzL2aajZnVz8?FIk2`B z?bJ2BSm6$KPX8)93a4Ab8_RSke-v)oNe#I0AI>s-{aU~W=1j+HoI1-3ZO)fdi;LA{ z9P#pL8)6%n1$q_gp2j z$awqeZVftua3ZshQ9crMyzpze*Zm`bP%V2k4`FFLPD0t-TN5ydN}4YT=6YAMCMOzR z&G1t$YIN~b`@6XwIgRhc;-olmIlw0|d_HqY3+KZX zK3}T}e})MxyIJJcj9FBlvpuAwfc@}5>GWDNQNHEQ0xN(=n&0ba4GVkYziR>9=rScR z5sSr%tq<)B_P<61VuvHvKS}Kv3&v1T=PCji>>_#s?-n7JYQ+_W7OK-4=w0x_*Q-2Mp}(ZgRGkgou)bQ z#pZYTeU8~>tJc&`4;+mlXjq`0bG1ffF?4`utY)@1gYx5jR@3O@F0Zdc4a#sZC(G^I zB!S3NTcvghVF_{B=7h)!IZ_&u!6gc8W+z&E>nXckPG~kb4-33MQCUQdduebAw-gur zGNJ%OgHjrF-2&}m2~dRu!FeSe{enzy)U1v*l7}x>C?YPsIgDzlV*S{(HK#?wvuAHE zXX}Dgyh74S7_=%=9>V0aFSt~_muOYDt?PMbc?}31pwI+;o)85r=bLT)cHsEwtk2{@AiR zkB`H|r^$nnMkNp)qS~ZyYjnPbK>EA&O&PWja4=+H6Pj>v^caS-@dW! zfINR3>&Ll^QsjEIWWHXOIOT=%#SA|O8v#TULYSB$n{HgY*EoDg6w1<9$uy8u6ADxA zc)Gp;av5lZht@EdcTz@=g}kko7@_DQzD@K}2V2^+otJ)Ko19jS`ktjqRl8e*kBe;T ziG>d$??1n*;vpK|F_A;AumAF`b)Fo3nIpe(jsr1S8HrIp;yvwIs9?d?IHLk%mrq7g zNwF}cKZU};)RxtHv$CGi(M;w3YpLWVbx{?Ri{Pqj>HVe7bS#L2(#hauOvc<%WG*vY z{AAZi!mDfhv*zyg@Jn7y%;zt@ak z?;Yw1_*5l&fH0Be5tYq^eP!}iz+q_%7TG$>>*o!z0?>B^`Jo@3m(Ixz5KScQ>^QNK9sLKkHf zrs@_eM;H!nD!VQgUx|7PZA^aosx~1^lzj_xn+4X=aCWvI-l&Vdqm5XBK8hZWM|c9~i;KW>hNk1nbO#?piOL`68txPmNC&fD0t3_7Y`}y|xE^*rq4c z&u%h!h3At;PlWCM?9JrY*G3b$oGauMuu^SYfnB?sn6dE*p8&u_d!0@?g?DkP8FE3s z!NcY4+u|bm=?Vl@=_S@}+fR(?C!%z+efj9xH^!Mp6EB4Y$@nxh=pzM5QO7g9l%l_gPr-F z()Yy8@l&V*M%@S3L94Eai7!d}O#c?X!1~q12hOcZ2u1fkYwY{AbJXQOotC-AY#14j;TNT}g zmHBaM;BX4-i^;8U&pF(K2WZev@^0jIuq-qlAY(c$q7@sK4-KL;;5f0!uduSKg9?le zG103Ic0z4In*N7>90AF%pwHRiNv0Dfp|yyOShPio3y0f_;bbBdKZ6d!aYL^KzBpZ| z;Iol6u*TsT@jl+fV^C;%yIdAbBGVflx4Evz^G+AkB8E>J3rQv`D;A+(e?2j?*JL3| zHofdsb#o&BU4S{SEEe{==&ikJ{~2ine3*OVC31Mk07-aw^kxCx+qR!=G(uSJM|F=U z({Q1my6i6`juSf2JBQ=AALF#oI-dM0lNd2PAU?awBaZfXCvs+@(cJOabW=hP55iB? z7PVt6sj^34z&ZCWX;{7Rom%KU1UQ?zD@8&BgjH~J^ylSw+)S`&4DF52PoQ;B*7n}m z*2WU(S1-n0EEqp6V#f+pm%O+5Ios!r;;LP z0wbx%=HV0}XM=m@tBM?Y?J}9q2g|(iqqV+aFfX>%D=MU~ak^$n)U1isrz}znJD)Y= zFgjv+bUSvRobG06pwj^oroNcN4w>1_P(?W~of5VZHw$Z^gz=WM_T!2wW*uw8b>P=+ zMUAa7%oIkpLW0_eJ~Fo0fNX{MZZvm@A4>kcCgW*GJq%A^pG2`*D2lUK`iq7EXh zTVV~aXtnlvLlguib>;TZ6}3AjZTGZVcrrZITpv;-R^5{CIRCSzQfB=QZx57AeYoEq&YFBR=s&kgYiM`D>C@ch z)>Fmj=k+Pa9$OtNm~IHrLrlPMITskATP4Ag8@U-6@bXl1w(yvGnT1^&2XbgqF@JVJGk|GJ)0hvdk z-bN|~yWh7$9@jT0s5*2h){3|u?@l5+Ks*9}4MP?UHal8440{BHVRtmmmHEzMEu@Fg z+Z_rNg2i?zmK(39i)#koNzXkd@JRvKVTWPM+gi7&W#9K=FdEp;=(HbA9FLT#j)dtf zYcS-(Ppp8eS0S7#+xJ(w#regjgR41C-BEf469f)f1FcOG2Tv8d#pn*dd-@ato#n?a z1RbQU39DCQ#i!{3%#Ft$%Yq|!rRTYYQO&o3Y#x!yS4hU0PaC zQh&DqPDYsubguFQd@;FoRA%ESr+jkBy_dA%rD6j`^|dKle8a&*T}Ua!peL}WO)%P< z$k5E5ASNMxDw;Hsd>>3K4*A5rzuW9!CtM;ug zL0Exj413dv!)&07Jr=$XNH5L|*OP2%^L9j!Ckones(9r*!&=Wa2O3yMwI*uR_T>EO zbV|G)ZI|aWDm@!Jo#VfvNM2HgWKJM%OcOSg7EL9(cLXQ_e6nW!UZ8U$7@AcSoOl&p042?Hx8v zyWehlAf>pp8u%oh)n<0wFH=cBN9{{O*+f**TRleuJb4`ZJ?_5J+ZXuDViVD6C0PKQ zezO;yc3SS+@Pq}Q&t})tg$6&(6uPNrdg5SB2E1F^AK8pCbEunTZ>msjb=>GXPgosGvr8fSoExb2**)YGO8ktyu|m?i?+5K7TeO^q*~-_Rs&{l$_Vwz25RuXBNWj_W@cMdVXWp_?AO z$zb@m&g-9=Cg6O3CNW zh!=FpYkG&KvltZ&9s$2jNv18nu&~luUSWCT0!%9E7P#FS=h&Yq$PGquJTPEE&Zy)F zFmXDC@2wAG2IeMN>rz`xHL7qP;4c*XwXz{V46*pxeJKrXsqI!9n@*)q)8Z??Px$Pb6wdDf)Ng zyA^>amEj4qhV#7Mku5Q2Xy(PyC$Gj6-NWLq3j7GN(fLqG9+t0?w&Q0J)5zmfMm#zk zD}7gi6eI9DxA^g5de88Qk&4&6g*C61R|NoSCg&OzTwZY>zVcJo9Q7Q^%#IZ!IqPBU z7F26FLvHn1iEgzcDkoYcNtXeO-qVccerszbjjM4<;Tff&1@)zbAkHk(GGyR~o{;eGXFLBUMT+3ApP4|c`EX+!}@!=?Rnt84&d*(k8r>7w!bHS zy+XzP1?&F%AZGg2?)BdX--kbYtNcCh-u8QA{`Umz)$zywD9Zh>KfnsfXIDaNft>Y> zI6RC;j~8W5uFD$@ z$%`NWb}j-r{AymVRd3^~zke)$oYV>`z3O4m-WH=y5CYy0Z=v6f7XEp@pZO|Y6HcSv z?{2}}HnO>1X?ad{Dw&+1t*Kb?e%$ZW&j(EvnC~T zA?rIziF~;?Vpac;tp9#r8|H7#*}r|}fBto1OA%u!Si7IqZVDUyKDjcu#r$^~Q5##>7n8VWV(_L@c{c^yYgdavy%Sd~W#BqTUO zhkdKk8#iYkwui=fodRW_Rm+4*q!%Ae)dSp)xIH@M{_QMaErXcPw<+xX4}y{XZu=ZF z^Cu)lRgV$n7mgvW5dHkn3UVpY9L2)BC4#XK13zy_#4^Ve^f-4@c-W?XyvsZwgRcCG_I@4!Bm43nMEXoio3)ApChNEcKLn8sX?22{}0L>X6eAkXkX z@N7J~>F|JE+Nj90J}Yj3#&Ad`rTRr(cNOCt`zY2c?nWATvYm3c=HqBsBuOcS__N} zd4v@5gUTE1`?0(Myf)*A9R;*lyuJorK2f*)%Bj$S&^ z_iCral43a)YQ;9(d1(_A?+vG#R@#Kwtt9@_-l~wwCW-SFq`Z|pq;Z_)_(K@Qr%Y>%%8@5_C z1RkCzGO(u$cr0?k`rcL3_hb2BAyP?SyI9si8V@tK=Dn24UEnAbqK)Bf+T|iT6cN(_5x$-WO z_$8|z7%SC_A?(RUjp(;wH!v?K=D3Ur>K9?9n%xak-Nk^>e+mFEV{{VN%yeE_@&GXy z(MNy9?`7QNNvBcfvG>?T@ot@aBa{7%JRBoKt3)PYes{SzdDFT6_(YjiW78tzO-12T z?tS9z);aeQ?PXKcN??v?n#MONpGU)S5VzOB?f4|Jh6qxxgt5_|PX+e{{!0Wx1cd?q z=Jn~j@*q0hc8t^TJ3r`7q3_XA*6e(RFc-%2H1z0Z z9tr9XVzQP#_2a8Z(z(?^FyZ#P1!4xhqT|l@fbm0n3CApB(cK?oCLR}Ca4BCn@ktfS z=Bj{ChhytkiJg&{Fbes9bgMe+ax+TgN1sq>J4y56#Y+w?+)&RFC|7A1JakHIZV{PK ziHdgrq%;w@xfPylU-q4PGsLmQpn2B;8EE)u8m)9*hMiyFFGT&8m66}7QJU(xNR30|uZI~`cF+3k;OMuiLO zlK}qnLO;-}mT{`;l5noCs&{^h-bY@(HDlDNPC!I(W5Dt-dMGUNi@GuMxzrW7IMS+4 z=BpG<5J>QRJr3?$nTUE&$#11srTZ$YWYrsR28-lsk1bie4-0H9^Qq`jT;3kiEe=jw zL5nv&8di+?dl`U;499S5Ms%zks;`@E65Y<= zBj*B*L%FH}I>vi0qMl;x=x`VtAB6j_VT~otfOkTq?hX;frXpzuO(6E@g*YSjy^?uU z!s%CQkb&S=&)XUr=GM#{v8;u4UDv@yo}KIjdX8VZu=`>sWmt^5DRdI8To<#kKiAqW z16;B}o;=bs4EsLLyh2}JOK-m|ZazC-dTuu0j4z$Tx0N&&#-+a-8=&EK$S&X+{H&S| zwn>%sN#fWJryx{$tT-bd9{E}TQo_|ndhsDov`}L=X6C1D$&%NG5e`3sDEx#NBZO8f z1TbAZ-+zC~k~5pKy^m~WX57`9Ebn=1@|%vxd&^^UK$Bg$8*)?(Plf%jr`5-xZrGjN zq2JxYeu4LHj&Tvc`dA$20`*py3{!=)aqs+@RduUQz4XAi_Yq^A8c6|{$BnxCw6(%J zwIR``gM$~OWe!b?enE4kl3;JrS_#f_GwJD(~H=tsk zh@7g#ZE*fhdH~0R7fo3R?iw{`&{6v#4JLz5)3_e7Bga@c5uBGMDGdegX4|N9Vj)qn zR>rEBEIdZ?GAapXLqb$Ny1Hgr@+w-)PnvS`1-YDf?H5;us4#3;KNA$|U$x}p1aBh_ zZgqDnT}4qx^Vf3s;4C^Xn9n@Qh3`O!Xn>g98t;@%%piS1@NN9ZY+^5APor_~jq%gE zQKzYc8hzFY0}))^N(wz(p+QD=tn|0EU8ZHrDuAVQT4R8z>DMqb;zo6%YMJQF2&$iB zisMopENQ5`zjj3zix1W!iNnZm`l2!|Bj52J>UK(2hOY{AuBsH4L;A>a`b3RzrQ+2X z`o9bG1PuT#y{b6h9S+4dTWx{zVk^JNB%G8_xX-;d{CnlN^TBSBb-Y*C^?9pcwSiU_ zbFl++wvuQ}vBWdZOaDuF}>CkHS5cu8il;$-ZtmAaFOnft5 zl|>F+S+!?7%epFqnqj^AnMr$%vtEbms3;NYFB}#tmwsrfc|^+wWo-cb9&v^@sSvm( zu5cs_=0Ew}tVRlqdL4S%Xsj!^c!T0p>UC`v*RH$_4j8fRvV-;+9}V`fWtrx3-evMt!>~QHx(W&x7b-=xoumVW|y#f zW+obBQOXmsd1xA_C3|>_Jj+6iSHVVj-&8gal9bJ%aIw%=hn0SLeonu(>ZK(Yx{e1P zNqbBB+2=Zf>diOErH?AfMN7y^H-QPsjWi0hI2Gi<^Rs3}y!JosQpgob^(#5Z<<>kb zVRFtE$4klZ`c&DG0MatF1bJQ&xTBezm29(NYnXcGA}+1vfv5 z{>(t{c&ZTSFEmXH+0Z_vpB}QqZaGOP8JA;X;yH52kh|BEQHoU}E zq0e2iCsuLN>c$}};hYcOcjK2b4fdrBB3Q#e7$<&MH~ZA?DCV~FK#oP>*Vt)YenBTk z$jb6-(4J=d^U1E*qj-l@~#M>Ukm@Ef(p8M|FmCh)U=sPO7>4~_lpl@BIw1{H&>jsSMLJy;x zKH`5eX|r#l{{TOCF*xmLB1PvA!;+Vm>lgpmz4QtE`1-Q2srb3U+}RSNLQa{cPJ=Ev z1R-uV<(o`MISKS2B3TDkLj$#IF2S-0FbO)NW~L1bn=Aw1Qzy`z*?Ac{SJmdG__L z+~fKc`p}ro>Q5Krj1jED3GaHRuNB5>vpZTvU9h|bl>AT(`u-uM3?iHI&PiN|s~h2no~N%EQvi}Zp`Er{AKtHp`&di5>bFBCwGAoG zW(;?go|(2!p%0avQh{357y!CVzp>lRF103hk z(dK&lzN(SX^#y{0x3(qQMfUv2m=Lio^O;6`0S9S2)4@mk%ZUBb|chDZ|f<9 z#3c!mnlyufT{6kCpUeaol?YwK*s3>74L5_b<**A@&d0(DsjAFk{t5I4??8-Pr5)lOtE zphiG{4?A5^rG`PTkJ!1nG4(n(37>4tBPjNLT87uGd+!~Jgd{6R+qUU;7NYWL zc0PE!^K@?dYFF*}^(cpAOILYb=3LbQh=TDL*=P@(LmsJZv;L)RgS+Vy-7-`Fkws zaB8E+QUag_+k_g!POM;&_i1e^7_ORQ|?pu*hBjQebGsf%;166 z#f^n?n`lt!@u_|6xtwg%>$m-To;wnvCg6P#sMR>)k#4b!;EE6sdS#nvy+I04%*U`Y z*3#k!&(?8^6iiBe4SxN+-f9YzOdG2374Y+CNzbrn%+OLp>GIWNraVZJDYX9tl>w2p z-ge}5w;#`VutF=dvf%m)XOAb%J{#8~l{5LL-?Dqu-`IMP6jH@<@uozos;2Ba)5E!p zhTcfWJDTd>$BASsE$Ta|#AVK!69-#L00h*k^t&R*Aq5Jaj*&oPS^3NB7qMpM+fpYT zjm#>xUZI%=xxr|K>|<1q%2LcS+a-uboHerbdJ6YO>=#cb{yVA0V|gF~|7WUkN)RLQ z|CVYTUAPJ8^jFRLk=n}{o$J-BB)=ycj@dm6T{6DHl7}hnduCUlWr1tRJogzHj(I}V z8Ed@tD6mlsnULL!F$14#xl+P6>7Fz|8KEcQyN$0jNTdYgqb_bK3k}J5q<_D0UtQ2B};>4XWP26 zVU8;_Xm@3nX8i7R=jJz5cEMej>?BICYQLjWWI96iRu99@PCz-KuH`+Aej=&$>w1HT zaqs&x$1g|U_65A!W0GjsrNoW8N9XocIrO-{uf6}`Lg8#_SG=eKSV*T0l^d2W5g3za zG%ijU72z?LTSNI_o;H%tABizY;Fr*lu0g-nH6lp(B^yfqt=O+(OfY9h?&6qyc)rd@ zY~=D^Jgy!zaQ*z8(nW=lFQkiQnlO`b&24O1BfEjzL90?z6gs_VbBM%8F;Rkh%o|k3 z!1NI7;U!tYJ-}0+gf8G)sp)o9J0~6LD8r!l0p`pAJZ(RP?QepC;Vd$QKT{_Z6r!0rN(H9D1UCtOG2QoCUE^|%LxG9axQ7kq+Q z_7yxRZ_G>-(05L5c4wclbA341Fzw7DB%ar_%H+i3?um-*HhEZhessU-8YcBUF+5m| z%;+`$Lfwmt4|r8UDIn5doN>Ft(tf@-Q4-s(fy-Kjr90*;&ongp5xxLJ14+medA|fO zb)!>!-I>E}Nt=ESQf>JB+SA^Bf{*(FsGI6_KdARDIzN+m@5dMy&)lpv$aU6d{={gvYKoxbj zA3w^H$Qmg_W_J1nC7s{R$E5?KgEFAM*e$gQmK#Eh16w1WqEeGqQ(O7R{xUMt&aGR) zFW{~xppRnl3KRBQ{HgC-?y|Ufisgxh?5McRK`ou z?8KMMn;Vtnt`?)(`al7cy(Bv*^hbN1+BB|DZwkr zUafWmEHCzeu8~6t5^vgxFuEd5#3Wt?9eHG~->`xm>*kKsc+bu7MOq24Rp6wet5n5? z#f~E<*2lQo7c^53UV6!CxVz0w)F||mi6EBtGo7jQko~rJ@jX%rJ z*LogUIwToRb~uII$pzSH>*8ry-mv7>VdePru~aq-gWOZ+qCJ@Ta;lCYO|~OM;SKt8 zEN2|5zMVFZR(XbbM|xavmvt2q0Gt)`I)k>byo_1Xvtw``cht1Wb~tQ3IKg%aS5HN! z{3zX;zKj}X4Pjr6)dJd7pIZemXYHHSomv*{l{+_xC?pPIfh=I1xTVfGA(Gpo1sFZ& z#!LLz5~*sM8}#{x&B`hc4Wqkcu-@q$thE1-8P1YV2ydP?_PdR-ZdHwOwAAcg;;`ol z?HaVsoQ)yY^QCc5ACQ%3c~K)2*X{J~?5ZR*`#e(g`537!J!|@Sbn#I&Cc>6h>2X-$8ZOT5vnPBefjmfY zo1;2)rlDGeh-?yb7bZMEUs5U*2cZ3&(>$~>Ci$6V$MnjdqaFOjQpo$ z@aih|&Pz2Ic#(xo3L1!s0N~UQEZfC^O0RBjA0wv%{$u^3CD-Fc4oKkdt$k+Ii?B%& zLL|mrZu-NISA(mB`KvK7;}mp_eh(Yrn!1rd*>O?6`647Uvv9}+8PI)j&Szm{ORW-T zLV+!FrcZL@=s$Z4KEOX)oWuY^2C>3^5Y8OaPOkCV)hviL-rmKe545-(Mz_G0I$8|s+C=(V-7L~#^P|z% z1?}@CR6HSE^19M_2a#59J3xTldU5?~`WWVA=$h5Ms4XyQ5ywr*p_LkIT&SDZKsLkI z4%0I~SlU^u-gByZi~H z&D&4Q>hQ}9>JAtzoGsrPgOQqF=|z*9Hk8JKT(O?47)~3r%vN{tp);2%kg4C#jmhCt zF=v&O2ylh$+cTX6%~Y1om%A)y8DWXy(jtQ(k4Og_=ac|1M5T-6-Befqu7d`Thmq;N z4IA0lL0q4B-uogDMn_-KWi2gl-D!TKG0g!B6T4k5rI@%@uI2P`ogRM;Gs*&~9L|vs z`uei6=A3*=4gC`f=w6lU*lu!3iQ-z5dE>!1!)xj4?W|rlq?siZ8*1#n_EM`0u`2bz zWfP9Ty7l;=VTW2DLJp$N$I!aHgM$wy#t6;rlG;A%=;WB+n3I=VeTftSv^yT>Oep(S zb>zhw04638JPDmN5^lN(zcLRuZ1SEgRjyQKnXvxSE`_k zJDE5tG{=`AC49S)7x$l9*lkuPh}ZIVrKhZbAR`s?7Gx|E&ew5`_%=nBtsm)Q%*x`; zAQwBR`(?FZ8#(5o%kLD!K*&1AvpDSrq?#wR`U{C*6FcwPFNXtI*Cia5^L&qv_~bdl zz$Y`eiPd*PvVU(g(J~#fACYdyGaho-m-fMO|iIIeY~HzSo74YiqabQVGZ-!X>x*$8`M~Y zglbsCok6O|68Dj}K7eYWV}-_(a_>M-pG2Y(M>all<+`UWm%t$ZZKXszB-*Y6<_?H6C-OAtzA)J@InUFoy(G>iuK8@eHhMmr#TszmZ3OY~w$i-}fSP?gE~Y0eA= zdhVhwzNcZ&|Bx%*AwNJrq0eAl|vy zWwmsTl#l(CR8ir6^+h>uAgdp!%M`VvWHJ)`cKoPwZBQsIIJ1u9jXRDGMV8=CPcQ!L zkJPnoYhCc4Su$pfwNVDwezGh~dlV+$ijZ-wedE(hr%I=t#DeHUi)=sogKgN^CKdhQ zLo;%Q=m(@$5pb}|tx;z^4wkrfg{i#OUH76pC%YM%?b>9cSeYxo_DWq@IqHP7*G`b^ zPWDzgzIKeOd^V`^G7lAW0)07bm=6J;kl4As@G*v|nj3DD`+9(Oinf}ivd@BUoF}{5 zcIlX<@%Rm#wfN#n5BL5q05RO%(Ya)?9#5{YFv>Q6C>dNHCSuP_y@|BBzTR4&E^hE$ z(GV15T1v|ofM(?1`;k}+)@^+;Hc{5?HYNdax-RbBE#GC_fpe}#ipsBr1y9;xS{#3e z|0UNzIL23&6uM5Ss&`3b>52E{{=j^i?I~1O8LzLO&#X;H1LLICr@4(kBcsy zGI-k(Prb_S`IgPR05H*x?U-9>B4ehl7!^+I#r^%4posc~A0iUijY?Msv_YNY5ub>% z$#Y!M_naCkO+wT`1-aG0CI-R<31H}^CyrF~aqPH1fVU*pqwPOf24rSbiH;}kDJ^-7 z^M_|3+zz*}-rJ%b=zwTwVC0YYA*lT}+#Y!>GH%v?EuT)6ZYeZtb!K-`^C zL3SzRjMvGxf;ny7Z=pmktSPU?u7Bo-J>+h76&4PbA|WBE;~{4cY0%L@!XQL(3T>6B zmZi9pf8`}9#BcJd4_HynqO8d}8We!!yny>Q%Unvksi2H>B~~#<|NU?^$GYh-o@a4> zf_Cq(+7Wc!-0)o#fG`L728d@u;%(AFJ=im|na_!cr|5;ZARphX(;L?~q@WZW`NQN% z%*8FsH#Q;dIpn$>=`#*_tRw;B1E3xAL&0Kpr|C!Jg0}iEc8G6^-ZH!!NMuR^+f=iu z`iT9;U6M%{$*7J}thgS)8?iy|W8QgAA=Sk&fR%ocblRcDcRn*#N-9gd(`M=pDKW5f3!2wwD^{!_dsPad`_e`*Ejyv9^5*mre0=z5b0YyEZ66)NhT{=V_H zFf8$n4z5&K1>xhpelQwLkE>2o);V6n@FvoGO$>fQ0n%4sK);3G{c3kcD?rSWIfGo5 z`rU;5Uh*mUaN`>_=Z~{-P~OA+B*8G`u8K3T^umAyDS8(@1sY;z3KCrI$M;J)y1y>n zLIkl+H=jeq>_(1tT1LG#?fjXlH^MPy#wK3>R)9dOd(B=5!7iz?}>QPWKtxI%vW5YWB0jDE7xn?mXZHHVcIUoT zNZww#u>xk}E}=j8g|je1IRvw@nm&7#$a)why{OYTEOgS^!H21kzQ8vc-^3lb(XyL)E`76T zd|H^^(Z7$n*`H5pSKtpwOD)SJxG?b3H>P6kci3D>m|U`@j_4LtEm)d~>Oihss;GVF zuPP?bls;=$xDsuxpjJ6waTN7CIf;%jD2ujNC3u8hcN_2!rau8H959|5EaFwHrDq&K zV;82!xXBhHFZH2k(XWtg4000gTOK{{u>>tz&f~%E<5CT0agGA)47z$QAkWPnb`xyw ziyoA|0N9QV=GQIXY)XSsJq*(%gSqP;r&w=SKAS*YkQ1sy#x*+z#x$@S;Zm2rrChEb zk$|N0y4C9+?K`G~J)E`Mor?IjzV{z^>ANYMJK)nMt%B{6Q%{rMmdxy{Xx?)bmsJ za!`^_bM`z0ctXj-94Q9aQ$4z{x;JTYZseuaA&gc10hPPmyk5f8DgQ!3U|E;i&dg2u z%W^6;J!a2QrwfiNq+p?mA!)Mi-Voe>cZ$@cBrzP|#L7Z`RkL3n-=g^at5WG~o;J)L zfpWKGt6?yn-qIbdQu*J_N${bS!#$GYqW0sU;g|}{gs4y#;4l;tUn*^eE<3BdcxJcP zeds;ejFq0vX3bRv5V{Xj$IV}=&=X6m`*}wc=DGX4_JMW8`X4LJ^q27V<81fp3D+n& z2${PCJG=EEr?uMd2OJU`iLEsK;I|6v1bGgH>fXB#PLo3@F8WHq5Xsa;(U%tsQ2y?` zSOEU~E8$lZw|fz3Qq;d?3qJjwZ=MimSXC?op_ks1;MnemB*e0Yz*l!oIt0a$9C%Pv zC@jtNaW;oRx7krC%e@TH)3sUQ>OF5?v%4|a_BDU~beaUJ)A^abIHB+xnQzWkaiH;v zyj@Rj_c&l!r?+Gtx?7!^0lnWmVvs_&=W4ZntMPUBHqX!fcG&CjOoDM+c?*GyTqEkN zd!ta1lr!ReCh!?BLSTG{oaCV#G{>D3@pgQ@Mm7Fm!YUreWa_LA)O- zX6I?#np_Apio`~BQ5=-v@*%h`j=A4rEVgZL?_>Kk~#$Ap@06o&zzFF|FdIF9By** z>xW7oyYxqD$To|Pr}8=k*7tg8*z@Xp%e;HprK(7NntyK3*b;dvPG>g9wuiXotL+`8 z)KUxUgV$P1W*yN$o~G(7Hyc=AitCC({(aWk)Dr&b{3RAD-kwf%jR!G1R|ZzNTYVh7 z*S+L>e3i`|S~Zr@Y{_#l(FNyxd z0_1sj?K-o!YKMoQ?g4GCr(0UXkMU3V(rdcxFyDQ>>9y;d@6C=(t9{tyOS;qUl7NN$ zH(NiEfS#kCZXVWsIU-{IJFz+)yyj9_UdVtZtF5n93WoS{cj(>l!>VD zmy(JiugHy78(e}8`BB3y^TCSlF01v+ldvO!a4`HuvPOtMf586j&d38O=VW<+v`=W}f-NZ3!le;QwsxjT2L!W; z1kyRg+ro@w{+(n#at4Ry+ex3&e&EbDO@lIs2pR@98^)cWV>=iUj9RarANKy{``2xD zEH?%3TOAf`VhlC>j!NwaKxG0xott{!pe=4wl;fNw7oatSp9i<$Iwis!0xmIk0ABCQhEAq~Hn5dl}@fI(KUMTt&HIDI`nwN<=~; zzP?WPQttyP?=06VEqxOBe_n|wd12^hwH*XTUbVd2(5&OORZ=Av&=_2c&J%V0Y} z_?vecHd@smx4`rEs64L%lK^h9_9G6PKM2#ryHm^usSivv$+(@i@=fd{!TLTos3dV2 zZc#~Z(C{!4qHZ?!5Y^!P?zBX>=2M$L93ZB!u0M+x6CZ8XPR&ApmHTnv$9c&nP4LHa zxgU@*%KnXeaLKjgSB1&m7aJ#EYr23q2@slwr~Na0JVerHICz9yZjErC&9IH!uH%t- z4_te;uk?1=Ojz?bzW4LHZc4n+QLDNDQ*f}Kpm4w1_aEGZkDKcdRnyrtlL&J?J$BdZ z&XKH^lpciIY!P&(xaZ#*ZbfEfMvJ}qm4hTs1-hbW(}<`WYjnm zAY`H;N%{|$Ak^dlV#apva`1&e@K)RnqAj=oBC>+e%P%lwqxzeNhbo)ViuB+^XSh1m zC4S3y=YAORrKQ*~V!x8*H}#aUcDsvR8XIqaY+7~NV8i${XL=GAT1@XtrO{6H)08v4 zq=-|udX$n=(>jw+tA&CbC|ecK2%P4(B-Pxz^ik%#EzZyOKj>JJsK@Xx`0kHV)x@iC z#Bbj%o1ZD#=af!8_;o#3K+D}_OMg8(;T==|TJ>0$|2e_AIC?~(-^@+4nYpO{3^M(z zXG|(t6SOW;)<&G_NBoYJq3JKkUi=X_*cH1sd0^`6fj71<2a^m}S63Pt$N~6$s@61q zG%%~YNvm^>8`X5_x>9@b7gNzD^88nv$D8;vaglt-rFtv?%&BQ;;Y!sQxzJs7dTWX< z0yQTJ{Uig2KL$&DK+}pz)+G#wRH=0pf1?}oD>b^(AAg&~Q7^QdjJIiBATS4XQEC6c zg2Brz)(w4ZI77c+wJej2)6h+&H-0@Iie0YbdHaR6{`oZWp*71W2YEx~uFJBQXY|+B z5pP>-LKoB|^jVb@C+|_Yp722E@QMfp8;5h%NVJC@8?0NTX8vdSt#m9j46mfvOVppnH@Sv|1V9TIId$=r;Iw`(p; zhs>TvK{tL=0gILEd1E9n{|4gp+@HmyV2->mf_Iup+1j{a*#25|x45wizK|svS3Jfv z4wl9@d_sB_3{Brh{^d?SoVzLCF`?TWGrgx}Pp=bB{44T^nE3Z@;rN^_&QB63<y=?&w&dJH95 z-Bi)3oiJbD^&n0+*v7ny7q2Xnmmde!7g)uAXJ&BtSBxU5c=4_ zJ!}RE-ijVI9@XlF3r?Ou)#Vo*Yh6N@k9=xDnm@vct3daDr8=sUbNk-RAu+K+D=KiXHjsbDI^lME41T(Bib|UQDT9(8R0`wB1nR zA+L6qE511a56IlO$7#~0(JolIQ-}{8Q;P7 z)N01I;CA2L%es4C7D9lPl0X=l3rBq z!`U3kx|3~Y#L=`-whNtha@1@$uR+V^gy3b!Z#x=M@UOjzDVe9>B9w?e2!&1anGQfS zB&R6s+&NCR*I2?sUnXO7ZD(%WGsSLUXe|-xIWO%O9wU)yZKS7Sk$l4%kN-Y4%ZhBRrMRt*rO3J@2yO7fI@9ILiCu#U;3S6b|O6CyF%(kpONP zt0RZ&Pl;$XI|8g+@QU0aKA8~H`GaD)AR6Q;<{*IZn{ur}9oP=eYnl)j7_d|uOcl>0 zI{rlhgK?#T-w#CSh=k8VaC3c@#zKD6+xl{L%)O?!L zpg)?j@~2c^VsiY0R`Or#?ycKSk8P-h*{ zxw9tPU*$AmCNaNfUmKvavwLOh6$!R>a$3hkAaiM-+Q``*M)mBpJ{0Qt2)M=t2j}TO zR?KtbM!6f45X7WuRCv^?U+ms5^mmIaxp4_6R~E7X(tVwhzKCQPcn8z?Svk&u zPkrQkw-7kh>MdFV@hsBWwX7l6k?g_2rbR!w8RKqIk$}WsA&A!#?@$>(eSuX6pQyV< z6odwlQWnC|iLBfdt<9WAbCjz$Hfiigp33>VX z$x8x?@CdG$84p!++P5osDbPON*-yoHO}Q@=ZQZx>3GQ*YYzgUUn|ZpfmyFGJ|HJ}v z-x;P~O@*r;8CUDy?~&y$(@fniLz}vVJHBgXl1G$fKc4jM9qE6M*s#htcszOiN%U$V zvNz#Tda-4FlAV{2_5pk}1f|e;KX=LS?jc2y;C4QL{Bg=@kA${NAVvCi_rc=i>L}@J z`|!w#lz~oT{YntzK(E<1XFb%J@uB&!6I4Q}f>k_re3#rhH~M}`pk9o8U;t~Gon%(c zR(i3C-vFIaEhaQwfb>@_6*Xyb9$Iu-)1`xm+4mVa38-K_?|$x+y~Us~`(!?#B|}az zP%OHTa;PlubWtwN*d#icLEOECmLR2Ri*_~^jY zG)&=qVxlo+{zFUfnz0pYX9i1&LuX#{2w478-4P&#gURLy|mh-`(ZPXts19=!+? zJ1_~7y1Ig6oz2i2OBZybtd6#WSi7)^VXmio#BH`D+yc&YmxX+r+m%@UI!h8oV2Yt32szdy6|Y{u zklwjbYfP?g5{}>Ih`DP0^n$9XIY+WY*4${YLR^W)$$Aavjz_un8Zbyzc>tYf?=!4$9k-dr0BOqkJaO405P7wYwPU$EvE)+0 z?E#&?2?le^XbspK?bRii8=*sbqU5QLgesH4OZKi453RaK)QxDQiY0XP@;E=s-}Tup zkFKPhcqEg-$nd&MBZFM9hSKM_)|)tQixpM{OQR%w-=!kDr+9}}v(?qD<950dCz`8M z=ZYJf)HCPuhh^5pxKIkC%Es(HS%;hpH~k_jTkDm2WOc}bKB~&GPU=i5_E#ijt8VAv$mIL@GRDyz$sa-q`)biHhe(;<<;m8VK zu#inZPFA6bKW$n9TWb3S+L&E4>uDJJMJ#0#=8~i#wr{F`)PG5YwJF;*MVRq3Un3g_ zQc{si+kW1%;%^*E9Q^z zo4X_>=cpE*D*X4oXLU9PXf-W=P&+^k&?*Vx&>!0K3F?=yjTN8&3!?dIDCc z*o5EWB4nsdM0hadDadJi_u0B&Qhm^il+F^T6zbJ=oKTl5{o>M^cl8@%FJE=g`=P&~ zBROPEHJ^G{{gc@-;H&d3kZvzmL`cl{)f~ve(vMd#`uODpEpokmA1qEdrU#Jd7@Ul+ z1Z)uy6^?2YTh7*^TFbXs+v62?q`O8`-mU@JiuAMXk%<$d^znVI&`{$nx8;>CY5%sl5IBv)ZW1$7m9@61x<6vWqi%X08RWi(JXDs~85iE2 z9xWM@Khtc#BkdxSWGE}-oL^bBAPHP(;Jr}{2~&gkT!mlTJ=oZtVRo1j9@6=iGZEp! zG{F<+%o5R^XwkDk-kUv`XgKf&gakRV+7KmUBs1C7Q*FZED-VAFa;7%oW=(~XiOKg2 zm%X}juy=LV3RcCXjjIf1FZpCrL=^swRma2;1tx;`k4=>%QJLS2ANr0?_l3Tjppga7 zs#R5bZbz|2R>)w%?#^`}xt#}Jz{~A)(dRyNxuW4y63GIy(!Hd*vx)t6Iu1{|U@Vw7}o8Gxpl8;KNVltm&eHvQz<-C-g$M)T*QtH8OAvDK(f zJOpesk^EC6Z7Gsep$o-`+s`wZ{lm;|*u=XvTN~yurx+C7lJPsaviNFtV+{D2J_;V@ zta>$)R9s^_o4qkGMalIGQf5UVH^Zz{l>3y6+hD4Ftt8C>s($+zI-0`c#+ch({4cqH zg&*N)dU<=716=9uJCN{E_S%cvL-5pEa+d9`8iqiU=@f?yNFA5F&lgBrp4aps9mIR? zKdXC^0z^kiXY(_T@R#@JagY^+EE+q&q#0sMj`(%7>{vkrr3^92Y(Q36^6{T&YTLKp zVCrFWCW?ru$9cTXtdaWev%zRr{v;F!A@I1R;fqR+c(3^xxXNvUu&1j%hqu|DF2R8S zwY)c-l#YV34YA{GtJju&s577U;?94=p0V$)n8!2%x{^RlM_$W=IpqA&%UbC;^SYBV zRC~bsIEvSW1eKL%1&PEh1rA#vwlP65F}s!+N{aCn=RuR@Bny_tL?&uRR{?}CovS2< z1djgJlj|+6+A&I+IVeAZhI5$g-JJmN#gSH@L+F=SaHkF{Cou`rI1fa-jf)P)C!axr zli2M7bleR0)0rLQID+P$ALZ`az%APt+rm5P&!u9~$h5(@`u5|j^zk(m_hrH%2Yd!@ zM&cR9r7GL#j~Ow|q?FSKH9F>7{;9@Wy(r=2O0+4#w*tQyo9SlL*Z zTj}JPkx?>35g=R`)pd*Betp*K^Py}}r-yM+&7Ly3V-PA?bY zS8c%2jI_?fV-^aaw~>Q3N*r{0=enjO%sEbYU|mLac29No3sLQ+=`DEc$t}U*D2e;> zTU9f zBo%KadHCEuZ?>W*=cb-p<9v;|Zr3@bc`0_R0k3`^g2M@9nI$kd_|EI}QlL0|j$;^< z+6`YAh4-XR0J87<<}WbwNf_MkY~ugH-dh00we9P^#38r`4<6itTY@_Y?gV#tYXZRu z?jGDdxHRtW-nhHdK=-O(-PTavDR9_n?%$9IdJk_On6rF#?v_d1Ji|lJoGEZK ztQQ8^kD6l~F$4hOsKk7Ai=Rg(f^B7{YW~qc!2jp zrtk$0lNeg;T^I4By(tcL{95aX^z;-7Mmu``=HB`HGp)ih=9_(0r)Ly0*2S5H0bpUZ z2MQ-^JvrFry};GTqi@9Grsp#*tS9Rw_z{SL|^S!z(|QDm0Rwqg?D2h5AgZ z>&LRXx9(QC(rPZx{<&EINA>j=fz1`IUIUqk7A79B$~@ktIhXqF(z{mHeoX{07z|0w zqksV}VA`A>1d$}!_%#akSQ&JA8HlP-wIa6T!K8;)shipidJ3Pw7Bc~l*_&U;0?awUQ%NfE!LfyP-oM|ML8y~?zV3U&5^k6H|vNYn(62Jk{B!@X2)fi47PS& z2==4aNu;zaLUA>RV6dlEPMTO=q;mb2gQ`u5e1mdIkQ!^hZY{>!hG6TmoxKZseM8L`d5_Vr3&xO}0PJl05PpMO#?Xe-U4ol3q_VEVD6o^n>TgVZuTDa~N` zD^^4IL0junR?KrNhXG9KHvvS;rGeL1)wNa%;?fv~em|r3>=(=S=v<!M@= z@;|g5mBeI%7`{`8sfBw3%DdoA45aC>XV=VBaD&7J&S2X<)DA{dIYj^dLMc=<5F?KmB+4>2HP0T9mOMkejW* z(Wh$lit}}%<}W$IsWwZ=2uLS#SJNN6TW{c8(JrtjZ95QLyyRdb8 zGBFpY!$%Qiu)E$TjjwMn=IhwLWw^iQ<<|cHIKrCxKZmd;?hiJOxPWt8sXe0ejlcR; zntDynuiq0Kok5?w)33+r^`?K9S3>qq_3l3&e1(91;9!3qFl8JT3rwdU7D~A{iAn%x%47KQth4_;L zMvVSu;KOC~k@=|KzIVu(l7(~(X2r7Yx}lnrz~(%qj0t9f&D`zFlW$htI zamP!vb66HPfo8(3qhz=|N0E-XcWgQzxI0FVH1sW4x7O!wVU>SjYW68dprpK=OFG{? zP7gPoMlEfcB(ssU(+68^L`=f6nOMQ z^}k@^|5)N069o2dh(tVaY*uJ|2ZLk4Bduq|%wwMQG&R3>mwD#-hRII84J-5VPQiBR zXvpmJF|el`Zf@SB$fcWF62Rj{?w0d9Q{_@fi&&OkF`x>=xq6nh15&OQFO;d}@$XF- z>(}w|4-c%ZN(2@RF9k1M7>^((F^#rI1ERs}4e5lq37rdPR-NNTF`UoH)58aKy)SK$ z5obzt@)SaDqteUq!+m&Lh!XJSGx%&stF3Q}N9_UE7YV>73Q5=!yUIt4wCErOvbHC9 z@;FM;@|JE*V$>a zR3kGAf!p!Wt#8Ha?l3A@tTl;H_Q0YzDRvmiCTrOuIg&Gl@tuJtTguR@nsDY4wSIuxyAN4$cecqBNF( ze_hpUX)$xqB4wA_;nOBoE_b{9NY{&sD>(XgP1oaT%XPb}>b zVXK1_vG8LDuMqD?ey441US$oPp<4!mc=F!vNXSYJcWBZ^XWn(i=#+icwN{4vVB#Sm zs;2fGZp(bb5aF(ew&AjARHIKBF``V*8)#wI<@}p zHH@ayE6bX}=)G+Bi0?L*BTs?eNPok?n&M}7Q2sSSCAfb$F(miln~dt-h1r0NOb)udowLenBjt4o)} zKPydeU&Q(_75g4T()f`og_Kr*>A|<17fhh|ig0kZ*}bD~wImHJq&D7I*tO9uV;U#Y+B=_)ns9#1n_3la*3R zR56p`K$0o6-_QSjjJ=?@fBy21JEtEqe-o(D;P*OraJ?nqh;4q`?*Dq+DcXk@e*m%n z`rCgKk6IMNRU~NAkro~AXDa`!z+a8}$C<3MobRfve!_xwj{?qJ1U*Q3Z&BjyI~^#K z-(XP9Xk~t)P#V~N!5FTDW35I@!Da@D?jE3_7<;FRRn9=G(;y+V3|Q~qnW2sH{1062 z(?r+9XgJs;*xk-ert3T*KoA1d)pfeZaqt(ievUry{>*_Nk<8!TKT;MHf=>Cm;Sz&! z^u%;71$ettzTgSW1>67y^S7cc5$>*fO^$EV&97<+@sdJ#6Ht!1XN5ufxt8Eb+<16N zAJ3hp`>-+^EB_q+3$65kV(F+qNos$!HtZg;9V)9&XN(eyKtkzGc#2F^W#fL8@uY7< z2PG49@ATCP5wlym`QA1OjtuL({v12kE?HS$gO-qIi_}8VwXT$#ar@HddYuk&{~8)~ zUM_9Fl3MBbCZWTi72o1aonhgp`rGb0?Tm+_EHB!WhKFff_6yx1Y1j4sI;g_+^ebJC z8yJlFZ#P#z{~nyAoQ`Q18?{zfdKn~d)7l0iwKbU zKhWI=g+$OwD0o)^5HuC3r`YX%ggYro+L6oD>^WG@J!q&V@Acq)LN945=s`43@VB;v z0qpBvCAQgRgCBL30-H_l4g}Tn-+IkxQm~4>=cK*tyi32P`^=a5sf*rrrE=vg*Ynn% zoI>^5bD7YZxKHiq-i0u>xwT8F_G0R75<+VZ+Hn}27_TJgVMBkb{y@xb5Bi!-_aUms z+wRO=pTGJ-u-N9WPlZ3u#8m{=o#A%;ED`e13TJI<>D@BQ8y&YRRFKy266-Ovp`7;R z(MX{@^orhYL<<({30&Lowt3U!s_R(8W){eRLm?|p;|=1dP+i1uf`)4iSEO!&@#mvYm3lquQo&B=_m*N>NTf#B`m9Zx2!#wpzS~OLR;s750z~n8%{8pddG10 zj<+&P^7;>nADUV9)`>P~_8T|QCBBhw*xlY|UE* zJM);C`1bx;XG#d}5Rtn5&IIJqq&H7Gb@}38a7Bd)!9sVTBy7(D@<<)n?1txT?&S|% zC}|LC_09??zYDz&zamb0!{YK1VGV`bYKC~z;y;`sp9-<*)80F#)|rQ+ycZq0pk+tM ztVbCt8=|P0{gbN=l^twWWdwQ1JfgH80I^Kz;Q|-8?`Ic9PEL_nommZWHiXTXK@}>Y zAbPoqb_H7ds5x3c|0W4^ulJ!P{Kq!aO_!1QzYXrGob> zvohpySpJFN@|u?6V{LI*?->eRoS>#qE#Zd_Zk^Wy5VMkW<-EXxy^;}qfII4g7=#9m zGeJQC;hy%#-IkckQ9otxbN-{Hv0`}tC3p~1rB)-B`11rNjPOk_q-6v(VAG>L!Q`?( zFVhyn+SJO^vJd}u0XRGVipkYydvOBPxgEKA-$AL#sSVEOFEuQrO46{jvbw$`(KD-i z+;f>!>on^wg;=QwH38;QEZ2?0u|GJ2NFa0LH<|U3B9gC%1QY}`N zt&sJa0lVYsbk8z7=sS4n$0T57?W8W)P}19K7GT;o%+D7R>iOBu)g zhOs>Tg^9Q#dj7@p#!N=6V76Hy7JquO!a_ABY{?{~gELgQ)UgbHd3!`p5tNl(ICMZ?o zVZlDr_HI&s1`6t|>l5yEw>~Lzz%0prM}_q9tg+-swJ~kTmzU^~ll)%N z9w~+38?3JCS|AdF6^dxjy4CTHRVTI&GYe6VXZ#1e51ECPT!2!a(Pv=8e-qH&T;9n0 zB+bduhhD!Fx?FBSpP61zx0VeeyySgZqBb3psysNczHOg)g8xfIn zEDn5}kKYPu4S9h{>B)B=$^_EM-%5q%Z-JnZeCM|s%gOZ0v34h_5u$$VutY}ns1^|- zm@+bnbo1wp6TTd0>a@#!l_S3y87T>WGB4RLmMa4^UHt+hWZl^^_c?l(5f%gn;WY#+wryPC-^!3>Wwr;hW*vP0xYz?s2?HJ4W zvZf0YYp@AUaGfP}H##c5<%@{TlTK6p6~y}zkcmq7LICTnUL`B&P7yq} zK9KfzS%84bLZXVu5fpg7kfJG+ukk#Ab3NUS4O*J!mU@!r!HHmwFNkp!&6Gt^zEGRff*gOvJV?Q0wj_8`+jC}LM;7g*LJtx8|BGr+> zaWli_;F;73xd6&&HWz@@bwKRlbOQAB^PStPBn0#*7CVF_`PSA?PN#Jl?0(h54Tv+X z72Ir$U(^k;T8g`AX!Sn5?i-RG)hLUGmjHEHFltxHjARUjMEKn*g~@y%j*!r_bha}q zBdhSlOA*f(rdcQZ_H2jorY%vx#W~QXzhctb;gVZW(Mvq7?1PumYn6a1ZVvsB6u zfR}W6Lgyfz+tBTx2pi1JseC_;0Xe}~h%sHB=getxPqJ`hE!Ek15Gv+UO@pOwWU8|E zH$rCGTDHv*>%u*;?V{eHXi|*QujI9AHQd{_6?hu{YfpDZwSD9U=9^1uR7NjkXqL*h z8*wla7K})0rl3Vds#a|d<(p8aprMNtYHG$3?uWbWiFWTjkuEWjQIuYV%^6j7254{y2C?Gd&N0tP+;R|Qa0TscM3mPd1F!_ zAt0TUATCP&vTW*5aLLq2zx@B6aL=6d@;Bjr&sw+3*s`Q0>Ql2256nfN&0+@f%IpJw z&P^I3lq0)(ijRWVKPA$4p|h0AJ^lsm4X&!@gG`yPY|x-JpSrS5y>T|1n)?4f55^R( zi*Tq9+)(VhD=BS^l)12Jj|i>9ENUNkpT^y8PfF>tO?M}cBwd|=_a2yOEo+CCC3C8i zlJXfPx7bY9Ls%mDrP@aCRkY8%u-pG+t(=aznqqJT8K#d_vt3lpG6~-G7XqNXCxpdZ zO_#Zrq|#-wxT*YXX%GY35>8~I;@(mxGvL|<4iC=W=QS5f9_;3FFeXYT zteR58VujRHvojUBPZmQk-7nfI-t)#RiCY^eyFIc7X99kPcemv}LpFoaID+UUWf{Z8 z9OjGGm8Ed@fGU+9}s-Qry@^_FP2!-zL7E3r_S%IhmyGHWC6s6u?x>b zLaU8r^gPDbouuWxZMU6Q8{5-lsTPcX?QtD@$TMM#<0g-Wg=HU;Dw27aJA^Ye?$wW1 zKvVE1hk2ET-r1LZ%IO;!ibF;J>al7T@){Ngkbl>gzh#xZQ?h8*Vq5?WV6NAfY-ILL z)-|W)`=}B!s0GZIYvxz&ksBC5!yDzZFXb^#AQL8%4a&{Ti}5q!A#whrSYkrZ;c5N# zQvi~(hseC$4!&53719kJN`{mdEOV4pnF^y*qN>DR{pA(6fT2JoD5m8jtW>w8%?o8u z`<|=S_}v@kp;m$av+B^+xuGYy8r1LMUKk0kqo#EfQ5#s7od?SkJay02608R<;JK|; ztnif55itY9J|AKTR6o}8pbOQLIVmdX(PGh zsS68R-XA~a5vWwDF>?w;NiUeZg-3v6=I58)B8gVVART7>!(2`~7!g3rC%81O079?t z)7v{FXMGYJnw@6?s<|SQjZcNK0DJQzTS#?kOMh4Rl(#^BuCZq+Oy6S`#|&LqwS-;V z8Hpc;3_Y$#XWo$&e2f1v{(4lVx}@#&%Sm@p4|eFxNWQm&Y|WsI$o1=CtIxo?(KaEM<_GeRI6u7#X+3+Jrhl7&e^|NLpPke~_q~BN z?wNk_{56Am7QDAi-e6VU@+g|MHE;SaJF({}VOOl(8?_Omv9@n?NsbJtd9 zot7cGPGppY(ic?|TSBm_-Y>torBUflw8iM47HoEv3j$Xz4BMDKW=tquSqBYpHct&H zyJ<9hC6Zhk5l~$AAqOlHx|v^v)Zm$6j4C#zIUmGTi<>uZ8T!uTxY)xoLf6Ph1)u&FVvM6s#YfB$sG%HW-j+W<58*bL!8}bRXQ8G z7aAUf;q_8bl<`XpP~`pI>QpP#ajEy+lyNf;y>79}T%6k<-1xx+$fB?8R-@G|A zzZGuC%01W<=eRL9a+;MqkNepchXoy2+23L_Tj1%jVhQ zUC8p?NuLILhrfFb0 zYm_&Rv+Rzq80~a`^U{WuBJbj(RZd(Yrd~|JQ#=cpw0a^uR%X*0PcE$=923jJ&hS|M z{!b;@heYD==iv>->6&RD9)G4kW&t2<-N8`<9mCR0UYbB`7c2NuOSg}cw4SC4wFA@Y=^obojb`=KQSlL6B`q77wRSz=p zj&_9f=$yUon0OG<8rN*=xe3GH)?Av9oWF8_Zc1q~{g)a{k$ZqN-URR|Yt#y-6J6;N+BxdaHnIDJxe5dHBIOv<(X= za`lafN;TcTLTyU>_9U3|x{`F>?L~^Jg@4qLL13XcLQdCV)IVzhu`e{Gxta!29vCZd zcC43TiB9H!EN_JeecwLsLOkclFF3gIB#ul&OKE{5X(dr3S>~fsz;dg^BTu{XbHx+| z8<81^HrH_2yp4k0ecHHpjqTj_bEU2GOdT+SCMD~Hm-u>Z&-L<@_7FErpaWO?!2s}K(QGA$ax{tq=lVQ8GGN^?#>mh1H-QMX>N z1e>%DjtYQl!O#cX+UU3uK<`de7lY?IRj@I!M>9%8xz$w6-ymMiPSx4*&q^`PDPr~B zxpJLUcXT29LjY9@l%MeGDfc678J^7KL-??6UR1c-r8~`-NxAqFi*sIinBYqGfPF~fqNHD+ zt=GFmQifiUa>T80%KHoR#fSI0ZTVtut_Xx$R%eJZEX3}w^^Hx^m$O}EF)IVR@`RB)W|C$H8LfmDR2Sa|q@X&%r!^FlU=(RLqWKtg*;n`Cj$IhWGVjoYlJ~OvxTfR2Agh>p~A!jPs*QH zSvZ;H&d9dRcK|1=r&l&&F3EH#`-`p)xR2cd)N}p*AWZ;GLDYbwAA!W1DCUUP94_Pb zqHaINjn8)T%0F@-*eBb_yh*KzhY3(eZPrk=9Z3W{AYY$TwLiV&1{KV-V?SR#gLweB z%`!h#I6CG>W{Z`03dd|AR%V#%%UDZnFc@quTt~i{Y~9;upI}hMz`0o{#q$QVyoXy5 zNj26UD!}_08;j|)M>$fSFXv47c1&RMg0RyjKE5N8hamfsFbZp@(9z~kZ7bl%iQORb z;52dn+NV#`E9c9bV~FY-%QdCowgOxLjqTn(8$IJyRmF(oPiprt>?=D0od9$z zY>yAP6Z`3-sny}_{gh72!Mm#>?sYEkbG&-Js;I!!4{35GVMaz*6ef$?NSP|sq*Sy> zOJ(X%^D=q?(sVS;YGT0yNgkLx1OQSEaby6nskL2KGns_{?M$f{uD-kVhu|`(c}g+_6{4GNgu6C7jGnq97q%yXyVnvTS&4rhLl7LRB`&| zyR2Y1n)PT9ZiIx+7vHd7iRJ6JDSH--pxO5T1+!+_q;y9Q9&somO(v#@1kh?TD@Y<3 z+>fFC+9rn?QBY1uV%G9sCAg>pJ{!STDG97C5{!qBMPcBb2HyOEaE8Z0YE0OSdwB4Q zS8kbflHH{pe1a?D`RHvEc{;3Jqjuaf4{G$@*~!0^hq~;8P?wKDVBL@$EogN{3AG{> z9Y7kdKMOJPA#)$hKih1XrSFK)ffW~|b@RAEE1h`S^{ds9AhXv2XGnTvV&nGdQ>ytcEAG zTGb6|53Yr36r(!O=zT}^`6QOnW6P4FSWC4+L#MP7^J8*0+D*BUuX?yiW@YW|eTg)I z7WxLBkBW_X7n!^$;s>ojx2-@Aejl}qKxqDTH}(M*pMPF#q&@2(%+Pk_e=-?N{{FG) znQun|#0sPl?NUcOgm& zXt91YEWSTci!0HM$mS=zc0Fj99O12FeVP`%Y{I0*>R`mzFEPZWk&-r$NB2sJ(DaR! zw#k1U?7vqzFfFLIM>27l=YAXYM})e^5iC3k5I0l?=(KYOM>iJY5_jt-S%i<_p7HK| zb;5Fii6(JE3!sfn!)ZQ&e#zL+06SyTFM7OLZBP+70@Zgo6gzsEa1M@JR5Z;#TleQ8 zBKf7%5dI(k&Hpq1O=uwtck#bmWv8FXt)lI;K=e7%TJ@}MJtI!e^B~E~)Hp3I_JB=H zf6at_K`yp5ER@W=+j*0CDiMtASQ+YgigmUGkA^Z5$S4teorGVlE&3Iz7vo0m*Oi_w zZmu_26>kWeX9cxbp@w2}GS@wYs4Kj0u%3l%O4V=|hET`Sgxqx`reF&~a~h7e7yRxn zaOjg%wM7$_5~*_{bfBfozT$9jH>0~oRm7hau9C0rX!zD9CfL(X+{oH}4)c<=b*CaF z^#?;j5)>-N;*#s!JjgE_gHl2KGS@IAz+4CO0b)+XZi<5@cseRt&yj2fbb>g`<4 zGqLcBhwhIF&Oi@~E88@FgIr7M4?220%+W3F1$zeJWP#*l)x*x`voHc9(uFtP5NNh9 zSVTvpZ>p)lk$py&;BnZR%Yj9t6jwAPH9SKb`FLaXaJLGhkXeP+0MkP4S-%o5K8;Cj z-zMSruI~uc+))B~wSx?4A1T#dYJTUmH)5UfER6j*ndzS7+gcC0K1yW&=Jek4`gpVH z{uURgXZMUvu-+i+HmYQ|Z}pU)$&t^SN_|A-zQsHcB4g0!(y71ymPR4IXtx0#QrXyp zqPfcyFastcnTqKT`4Wm7j}_jde?#0LAv#hc#Y#kU^&}Ui;HG9+e-Pv1#rkT8Ks!&< zy+qbmnNFAsEu^4ZUc z#L$1iTvB5kSM}3YZ0u`NOYu@Zw5d>y2cx%?f>*oVcvxsA$WiJ2Qs4T#ZbZb~a$E($ zLR#PJjSh6_bEpTz7=D)YAB~$*oqa>kzqW1leV0|c&ZOt8OPbT>ds$)Wtc!dt&McOb zVtMjuKYewrI=H6e&F5=2O*i)GD^;GQOzNTS5YYP=+tZvo0tX65vZ-JLFv|&XDESC2 z{dxRkg?3>f*OIAI)Km^j3Je7Q;-6b=d50gVZ2wq~y#|BO!eHB~r}7``m9?EM+X)5( z<%rDjnLNnJJm>dzM`~AomxL}hjtQir`NWGeCj3$aVB)4@>7dM%RFbl+5-s7~)6+AOt?z!B z)sqIDkbq)gw_HiZN6LJgWRLMO$?Md&ZB8hvBl4V8Jd#PgnAk4) zr2e#L9~C74_bL^~rR{#(Hhj{y-|egoa2D?r`urhw37MwBI)B-{du&X}q$&V&!`VIk zJxg6|p%g1dXs%m%gbR0v<>RJv7y_+F$53;FZ&ckkoPNx~>DLYV=}eUYM7Y9vX4}Q^ zpQ#5}8}X!I+3|!XFH8&uXmqu~yJ-6*_`oJfoLhE@I1Aen6?m0|Z|H<~!peC~n1xE188ih;gKpvXeqAHg5WrcoY!|6$Fj9*6Ci@KwP4n0G@k3+)czYsF z;o8e4k9mG$gBnn&A>*Yz%ej)x9`MJyU#kC8HS$a9&pE}}!pixHRktOMXEK+14X-#t zA%}#{feEB68x?863J8#|N%pa;I&cV^!qKNl(H8|4s@dP+FjR9A31&@T*kVgA{&4U=2XbGCT zkD^`BY0X0J^9+voBOkHDi$mL6RhW-xF$po#i-J=w|=WyGZmA zq~xFJ zTs(Ng{y)t@;9jscL;Y--;|ub7Yb**%=kWTjpK~W ztpB(BKFdn26EYeMfPM0*VW1N$>KkLS=+A^GNqMa)Y0hM8!MMf)WYkJ$_>vA8ZKf|AIS!wFK79;=(o zXA+8Zd)$keg4ePs&|UzAMd~G@4KHj#*6-08@lfxEp5w7u>|6hX*`ULas&07V(-rpb zT9-MXIViE&rflt&I!2y&UGgGngl41+%%4%`7^u}d4z>!EqoNGPN3K&pnboEQ1P4Gc z3^{(f%SGOE|1}~+h_#-+xiF{2jcpZ83k3SXXayNVaiX8lga5_))|jCCsenCP zheXgRX1Sk6@i%_RHy&B@04VTgom;58ccH4iz2A{`lpW@TG);Y?7O8aqo%{lqpJWeW& zQ+A4M{_wvkcK+#qbIL26gBjq|59}Jz;iT&eep1LwrCN8SUpnnU0+6YT*h7T41syIp zJ`T5&hh;N8M0KI}N+0rXKY^;E)5yn7`WP=BF|rz=2s>DWYjwwO#czUEJW}^4(P_p@ z7Jmej=74OC7bKtQOf70lBt%tkWDqm>uQ#C6h3;TrUX;dntD5kuN74{cTMIbAmX;#P zq6&@iVuM|4wtuWEsT8p>cxLs$Mr^lu`1=<|AH1DkO7%H%aJZP+Q}_-c%fmFkMk!(3 ze&|oP_9qC)7xoy)01hX+iIZ6}}wXHdM--_!EU=C7L zblXEdsJeUz#!~StiY-K+V7mhz-=PN^(Ju}&=6m-eq>HuZWUDpx<~YmpO=vmpMZwE? z`UW{NU#LD8FJWZVO6o#wd8VDFZH>_zy;Y*B%fLA&TndY7AfkGJH|t?7^x3n7g~MtB zKhhE2&swx<4eU3V)!d(`ITo>|j~Pi@2gZoAMYoK9zMpPMo*JXEYnV`~6{#!Sy-puM z0sqW3+0$>V%GLJH8&8P01OBPWflKszmDI*UdCWUg_;@fg=grn)zZ*)2$seLs3c1{W zUc6*3;1DWfIwrMaq2^&8W~ic8PPoW+HuwZCk^gr@{L47TPdLpGu_rK(?cN|!D_y|! z-6En`$h*ocE*W(I?eUmeC6H=!X#~IJJ4ZBT){(E0=8wE4b@X_8@5O^VgJVuu#{8Iv zc2i+(Pomn7@00PZS^LMkRSm8}{vr}q)xespD$*|O+|OEaUAtxBEg1#BkjAeVF$@Ln zosCZw<@KoZEq28oXESCK`-kkcxNnVWZk~;f-v+*(CLmC#C!Havo$*$Oxnc}vJx?e3 zqnIoQutXzYZQ+uT(A;g|BZ$|Wfg)@kay!=$lCP#9WYFofCv?Ym^DBb=UJPmE6OX1R z(}EX{2st`exwsud#|E#_gJZK5-CPoWyP;|7@BJ3BPo4TLiarLWh-NHL@pz=bVkEaH z=tpMGA06tf)fj{2`srl*FIrC}IibV1wr;GK zi5kH)wgOP5Y4~sllnFeF1{&*qS&O+fB1kMpUdfjAV))`PcM0lP{@0X;eb0*A#vRa1 z*zz5W5?`M>y)Uj~R_JOLOkz|hW> zPwukMMi`~IyP#aK@Px3gzWc+)THe%z48oxEp5ev&&}LK))uY2tJJ?2fL0!R;N}ooT zK?asQZdsL9Zw)_W0gvaBVx#HND{E%z_>i8go;AF@x0OzjADV_vw48FAYFDSDC2j)YYZv?$BeHoq7 zzjj_MkN&Tmc682uqh^Kli-oiFOnskv&KqPNq6NG(u8@&mN(Z^q<#m!Ifauj~U@{LA zQE~V3#vOlU_|AEa)`NH|i*D9o%%>dH2>GQu`}3VO0VpnQU#jbrj~x#<%9KL08VJ{O zP~?VL_BW+yC@063FYl-mww^GhhHNaj^J-qKl53>~ZqivpOD(ij;=YP^ zTkxNBRip?+?-UWhXvDVii^tbtE&Bhg1%Qc~c+O$Mm_9#3o@+kClUC1b3EAvv(Y#Js zHP7Hwrp$=i();AK%kjMHHuVLSx|_j|%L|mWED-?iDRXVrlyG8>u2PbinQiuO2KMJz zc#cPr{j(FyHOb3G6z2Ia88cF>=aIHBoRCOil<{OIJ~1Q?RnLj2#`jDXFg;MNpyaZg z$4y*yuiSIo{JsCnz=w;cCd2SJi#OYM8T#Rj)w$H{uwDG*gU1pV)P<(79dmhh#|23> zclsm#4mTD)^Ka=UImTbpQ99?7duGZabG4`l&GNE&>D*_x>5aotQx-Y}6bJhk9K7}! z45}RXESo&mb=RYJfB*+}qk0qz>l3wa9@$Cb* zukTfQ0{{PJx?8S$P3Qm*_krse1Mcgq&HttKu3iwEE3)MYoL=Yizp^EM)vF_bNu_N* zTy$_l0cYDdSUdl$VgLU5wYTdMlPfRrrw<`2T;g}hE#sl2{r})`BbJ+#Sxsc?H;QRM zh5Is<>Op1bSMPvg4~xY3m)q(%d+zgaZpCJjJ$yK{+DOd4<*&Raa<^zXj{ou~IJmZK zy>kRY2P!*iRt~r?Dlg<%(`kuZPFe*1Xkl$vqg2GR%;uggAA*T zY5ZA-|9xa)*%(RK`HlFFNfJ0vwIm^&zaN$V3=$}B3s^qSl>^iu1`nw zFSm8MoNXdi0nR!+fs3r91~Dhzc*ak;rD;^tb;X4mC6qfiR}9k)_wB z(p&A4@v)dXho`D16(RlUxYAcaV+S$FhSMw*1?cbafYI4Q;lMmOLNUPwUu5^UjA$gdeTz{A9q>bhTdlM|c?jly;sUxFgiqPXNVS_~yK&8b zyWPWOM(EPJY56wr@7+wy_z`wmgDdcI%Zb8F*QK7Ew%yzYoYH+ z9j9-|*47`mtu8lFnA*RN>p@Sf@*(`Y>C<)Yj@tJ7@Cv-TYbP%2)uxpzd0zU#$~S4- zTS{}k@3SLGo2+oIOG`xFX12ZwoF5HFmZLoQ?+6{53yC4JsoSoTT#0dy(ssA6UH|PQ zrO06?*|%~EftJ-(^$?D-pA1cKJBVFyG`FjQys1GXFO0b1Ag-=#?Z*Kc__4|?y-j_Z zpkBpWllM-YDYG9Rs1usf`6AGAxgtCN3Tye*u&9*sPsRI2XjXI|G_YNLa~;GK-XFij zT0R|IOvD@meaYe>#9Vm+7eQll5c4TC7^LlzWKTeDrsr}3-nV5=A{;t`HP1O`v*Ju@ zQ~Le~m&dvQ9ooP3*y(97k`9_JUX%A?Y!hIxxsbp?Y?58fz0j4;{=4O1(*q*{?cT>e z{tGc!d$%o*0YS)Wo5cex)UL=tneZlxw_yhFnY!4ZOKHMlQg(iaxqlz$r(a)C{c83% zW-0cw#k$otpJ+o~=fxuikmjGR+SHX?wJRV7&DCjblP6 z?D#SUSi1PV+V-&?7voyK80fhF20dGIG}n>((Ss-ln$|mKRDr zCw+1RLp>@!Z6hiDRNW@w+%4gcl=rlk(3tT&&q;)NSt0Q~iu^>6DSn{KO7eyzsGfI% z%g7QXP*)TCr1b~ctG~YN+Sz(bZ;D^NhsTV$4P}g2HBi1 z_sV5>Q#O>69JkMaJ0A801IH{k9j|5b9`nYNS`=qDnN@6H+0A>Y6Q|3B>zU^^U4mD% zShiJdwtEr@!=oCGtqZvS=BQkSnw$XOl3Pz6&VVr=p0@i%zF{$Y`h+$6BO2Bq$>*P} z6&iLWa|;VK2Mbs3i|%y?%cXT*F5cHoO-Hp&%g3$DR`vGkkE-#Ax@}DvULTpd=96s-EY_;;qJDl@3p5#wc!rz+&bHE zQ()0;e9w6GWZfQFXWqN1)PBl7PImf>Mq{EQYRAm}TS5+C=N9pPe@f@aWsFt{%Q z_mWp}M`k%zE>e3p@G{~Hc{?1Y5*}Bf%B6-XlJ*$|eK?xnmy0!l3 zpS!IA+D*yyhT(;wK;@#XtMmnBx5kJe7OT6-Zd&~!x4SQFNmWA=CZSUhL~zPYv$6rz zpPkDbn&oTl@BlG!;C@=gId_QSK41ixWK(ifDuD)=_M_CY*l|D3>~!#LvqapfCsKFB zGE7BmO=vy~P@Vsn40{VvD}MVXIsQeFdnt}^d#b3~z6p=}87V5MA3PUx@TKV&8$43MKkBSfumtSU3Bt z5NFC~243*7j$IxfAbYV@L}7lmb_ZKi$}}0e0z!?fObV#?ZCtN7Up-zwVbV!S zXtKWgAGEzySX*lsw%gSfC~bk_#fv)>cW9B~P~4%oyE~NP?(XjHlA^&aI0Se1U?DsG z)?S~S?0x+Qe=ZJk5W<}EWzKiV^Nc(07sAWk_JRGuldjwF$YQxHwlSBx>h=4zXS2u7 zL;teEc(^<5I^H#VIf0fNat84^!FHI(G{&(Socor3+XZP2sc}H4o9W0%Y!j{Zn;;Z+ zIr`Fkq1=lnau(8#oKA&tIn}j-Za&qEW*kQ4Ro2cj^^1ClX`zLc@~gyIhC*=bmRD~m zzLHR?-tHL7(7bVhLiTqe#9pU5uAYApb{6qU`8SVQ8%Eu42b^x4b-NCKm~P=%Vjvi; zrrndv#-yld##GhKz{)(}gdH+!nGsF36!+*9d7>CO;Pr3eGGE5qS&i0=Q+@S)aW_8R zGv1VRLR|llNm}&#BS#JcVy=o?)b=q!{FXs{Nvc<}DH>1TW2u5rH5V#5#S=bp%9YVG z$Scftc-Qc_6>8U-fNxQx1Fcqr3>P^23h*_FC@`F~TR%5{sm792xQDOSp( zrRX@P_W&wS+_N&GvdiDZz%d0wu31mI*Scmu4DsSJfbY!2RE2-nm6&-bNh>wRYc0LoT^11fkm7c}5^Z73b9 z?buT+l?tKN84|Gbv#uDHRF(o(cI@KJ*AF-a>N!KR>QnHKs+gI^lt%l$ z$*HZxRr6~a_}qL)O6B=UafrZ9$QfI@QTCRkd@$`8Zb4I%F*yjhw-6-FR|O3ndTgn@ z({Ts@CYLBW(X(yB?Ve6Er)fDjKkxgxxa96^>d2+k$Im)F#ec@&Bu;%*6^E2|BFVW< zn$swhtssrCVf-?OVC%U%Rv(;7W2G2}E*`K7BSs=(hW5?Cm#l>KT2Z)S0Ehgq6xyja z4ul~u1CH5a0f*e+)7LEqIzxt*9Q-%l>CW@FcRR*34oy>w1h=OHW!{ZoC&-ZWsHc@> z61U6HfHRfSjq!vUy3@aTvRB^{_}BuVJDE2V%XabtwGBDE66?whl_SmO9-Ij;a1kF{Ld5Vlp zan=XCMT}2f7^G!AfgPmdmaa{`D_H88o+hMJTF`APMX*))rxsuUDpO+4?!sQ+bTf({ znj4A?owt5Cd^J*d9k}~$6SKr~FoEW*dho`JqejPe0j6*L7`Y7ho>};dmW>Y$t3`hB zLw<8ZDF&w{b#4uk&@FrIRrK0)SyTYRKDT%nxBZg7VQy5hib-T$Qh+@pFK*pS`8c=) z%{V<&5tJFal(IS1{&M1+afuI++3S_7SHu;U0Hy}L$tL)efNps6IGypU9%a>lVEnHw z@$3R`a=jrHv$&9{bcS+`%&*>2(N2VG6L1(iA(+~Ap3$T1%MhqSld(;E1eN~Rzwe$O z&*!S^>uyD-Z;D6a8@qSy?7YZ}Cl?8R^(GoYv8grt=2m~)1%G3Sb{{qLk=x^$GLW2e z^|Z)#MW>GM{pzYg7zNrfA1ttJ;r=W7Mvj!#TQ;#eMx#e%J0aP0$UP}MnC_3W?CjX0 z^z5y+(a|ySCn*+5iI@+YtxdXR6RH;>`6mllbzDZ}u1Utyp@ofYm%SgNS-tO~Xgjb2 z+hb$#Tfwdy>slvC!Ova+X%8X0Omn7Ea`N>RevU0LVQ0hD%gFG3t$ZaSxR{hl+P)Nt=-dYQK7|Kg#rMBFd>l3i!c3WLarGi2C0M6EeWb{@WCoD5$ZZ*-{{Sy^EEdfnc`O^n&&eOZ)0Qjhz5t2+%3*>2S{1PR%E>CqW?I{xZi{9L`HTz6E(AB z^1}tZ4Z_OD7`&S#z-t|QmH1kU8*Lpjg$b*2z#nQO8?R6@{Y9unC9#*_V4_MzvTgDD zYU7-%p3*iY#PB`1wak$9<Vo&3byn78Gu~9J zo^?B0_#)A!w$kCmJ~SYhqo~f)3aH>(u-FQ{Q>t z93mGQ5MQMLpE6U6c`3^*@mucjb8Q`TnCK3BA~J>L_mc=A5!8<4EpLKNad!O|Mjz|8 zo!rD4*qQ5x7Cz|8{q&pYi+HrXPXit(8YzD~kSY)TMGv2mMMn!=xma3x@BUay3XPT@s~~1^zNfTqaXxNS8RQSLC=_$zf+9;GECWbQgY}!x*;-dm$$~mkP8qDJ|tIPJ^nn?g>EjhAw;iHlO0&D{E z1V+XRiP>2I%;k%Vu-Eu5(p93>#|5b~37-hR3CdVW?Km81=pjdwQ|vvX%~TpISh3c7 zp*tM?P_?onHZ8S1W#Qx(v-0+?DS^;=-*IbL#tF6t@-;)F?|$I*I97;}!J%K8!x#3i zOu4rw5~iMCCX?Tu+tN;c{%Uh?KuKzCbhx?m&_R8zVc^0?H1*OagRK1cC{CpM4pAfL zC#by1W~gYH`*_q}oXDBQ$z!+|-+kv4pA%x%6g3nQ@+WA+W6dx}BjhiKPGbkFjwl^o z=LJ!P!vtP}6|vzCGW_LYj#W75sQjkvBFF|^>Y6fr8v98~oJGR|`TR6@g{&OtAJ%^f3NwZ^(Wi)VTviC?fD27H@u zm`bN{in;TQga|_G3+p30q={zmC#R~vRw(+221Z~JV0Y$5M(_$v_yB=>$f6rYH&4VY zHg$6|TOdZ=0knsQ^JNQ)IDg_-Lzp|Hf&GHbXM(Fp6`QSfM=GKW%EkqicBF7-)4+WrZi&`u`u}lU1KcB zWoOB`?iZYybQkzHGb#IO`yG$}m_UBv>q#s3jbN=O+=VIiU#|2webycRfm z%;&gTn%zhC?T=YqeHI@`k%2D$3H{2820efCW43^`g`IOknH zPX`D+26(ZUFSj>bd*-TML(mFf0(=lq89iEItUo5KYts^w${>XGt*B8><+RSZ2yCTF zX972*03jOc+D-4PAznnMTaJsu-U;z|wRm^#(n&$Dw|mH4S6(Mz4cxNa34M#w`a23U zZ*cJ&lEw)Yprq_`y_0yXrcwiCc|fFfdQ_K@!I{AbB0T8zwv1zCIINH{I5RI<0nf+= za~ZqKCzysBr}Bi#2J^ERf)S}adspoZ&bkp@hfwr2yH(+!qzOh^3y2^BS8GlL9F$}x z=@x1U=;F}Xhh#X=y~*V1uJN3=a3LzxZTyn-CHs@e{4%3a7Ut1(Xsi81mPcHBJ()=2Za8eT9ZKrF?GMtnYj(&%fOsT=wWE2MUZM)sF z^)k!zp$<8?e4$$I3Y)B5cznmv> z^l5)QVwDAOkJ#)2D|o{LLv6nVEk{?xaPUPZua0=;QadVVv6YXFwW8E19kC<##XDkV z5Rg$9OS~<$1L?-&&t+4A0Ht1OIRwzFR?{-e;!^J>ZfkpXc7wOx-B7|E8H|RrT_Pu0 zVHh3PVbt?1CQ$Z`*0RHH&-GYYxQ`xx-YmB9(>GzFc$lBik7nPv$3K zM8@XM37UDZnraN)HI4~7C47=%>e#=7;TJ^_a_i@bYdZfNdxnW6tW~dlUn9BL9~9sE6?Y>CznzaCL-|)Pi37Ju z${DLhk8Ukv42`p8^AW4u*`gy|U*PTSJEStB9fVSa&TOv*jMe`3yb3aJ!kfYJNXD-9 zcnW{yyCGKTaAdsNTNmBNh)dDXx2ejB_4mjpr2?LE(e5suhBu`5NgVjP6GMl)@M@v3 z&Gvh{sJK*4UVcJst{ppBuME?tgsdZ@fkjP-_t_9&X#~-LPxn5%4S2~}8ff9oLz-xm zgpzSLArAOP9X0u$x$C@G7T8r(EL^iZQ&5#Dvp5-;?{woy3mv$~bI;^J+TRdP>7XQD zW4jA6aYn?BB5L*6j#=ZlnA;_%PU6=sh+!OwVHe}ojq2Q5SWf&lLA&U=>t(9irAPxA zh%jVxoW66~@hf|UVq&{Lv!n`nMjqO_AHKUjE=VJv-#7LGTRg;|T1XQ5<5prmG~m89 z2;8z&eE(Qh*u(vhY`wtc^UDOvX89zNcB+gfRMwLjy@ybFwp5!Or9)b8Iq4R0+J%LB z7$|<_M%4HRyL1A_F7XZ!Bqt6P%*;$JPZ709m*}#rH~CdDeSVH_1;(tuOW|xz!4UMR zRTqcNwuxk>o!mS5`%8>uzkWTE`D$Qm%tN+`L9Q?<&PG1kxXX>ZWN>1#5iPw+pqVo? zq;G~kvcYcH2xye@NS$I*7{!~%`#$Ic@>e3pAVH`_sadFCZP!S;A*p7XR5A1hU#mz1 z*S{Qe^s8^t_+xdm>n%GRyL6)95q#z5(#ygdEvjGah?D=?Y9p-WDT9*VL^M|bu^!_8 z>ICRAPsy*6gJo)TfG=nuhvafhYAO$Y41N-Sc32po_&)j#NS4eRNNnSb7}?Eg5XtT< zl0}ohrYJ2B{QiYFx0m>SP|8|X{1tA*Z37|KVe^rg{U*Y{xJwrXcsd06fXDjZ%-H!~ z5d>Zfmt_kf^0UZIN1abgzQ0r*gk3Wpl;#;dmxj zXy#ik8WJjf0Nd~?o0GBGtVCuc=WTKX>bY}X^um^w`2+1zKT(B^rro|;Jx2L<@}eFW z;U#UVby7Uw+QjxVuaD{R9UUhY>p!)CG+nXnG7RA&!7wR#L#WCcWBJ8(;D<)tnNm7l z9~VkDLL^VM=u{eti?@{7DdfB{OGjR@4knQ@mEe=rWx>;8Y+On#Z zFL7wGw(*I|)XEOR9~rZw%<(G9H!5*^Nx(qB9SSqm=PNkm8A~V(mjIiv3pXfgZ=ztF zjl-vU$%GsH@e;gmbw*bDHmhk{ziNLAGg2pM65ZMndc-^*Z)bmBXKdWx^)H%J$)I~t zkc_yR_m|RFhu+pl4MroP1{!wy*+0OYuP7vCiuCK?>bgguY>rmeD0x(qBiy(p9iHo` zlFKSrEYG`g^8C?&-X&(-vA9U%RZ#VaL^xH{9L^Ru^}%EyCL&`+;P(NMk)Zoe+pExztkCr?;KZDQr zNH(^7erOIGO-uZgP+7Ksucf7CyN}WgcW&Ll*@Pj33~bHLs3uaI1w3e{ALiy}^iCaq zoqkR)_W{X}kt$b!)98yabEAB%K3<((yskUm#Bk+78QEDXgBRuUDHz>HEldjklPJ-K zUv67`5au^5sxc?%Q}XGp#zG42#U4~sP&(r{|JCY41kaE7clSp4L9!@%LgUJFKa|)P zNc7NA0mmpfKmjpcUMp&S&E}9c6Ef zX4O~Je;5Ml_uEEHD~wrg{Clva zSOZoKNgWjUbsl3h1<(X)tnLawJ+vu=l*_g51 zh-M5;>8NQ?SJ6mdP%y2jcX{O-y5(F6J1R*VLaqgc+%JYK8oyOWKq!8O;>7VxDl|iW zmGJ8kkc$58NH&3}V4p?^6?XZjI5)BFKb|J?VrEKX7Ctt&de0?voZypz)?N}bMHg0D z!n*z$)IXl4u(XiG?w4qs7;hO;nCknE7x)7TA8~XOj|uRVkROHFl3#dz&%Yi zMB+Y5lGJtYQBlz`_^5ECrDH&NigMwU9r}MjQbBNjNZxhWCCA(6478#Tr_UGhEyC2~ z1@n{K-IE_rlB>8IG<7Y4qHNihLV0y?3Cei;6DUoJM@$R|laSBduT6_V=o&$N5v~lk zMYSTM}V0M=(ymsn@HeZFmkUo5!b2^YS)HbBRr1Rxz$rGsZ^!hkngz^-}! zc@kZS)~Z!ut|e?`ZMp4&LkUk638ya1k2wzi)uXs_98NBnswZUf4j-HQlvOnv-?2gL z9e8lW%>QwHuh(n)K!=q8b0qsmsgx0jj4Ot-$p;9l57N-7dK%gESL4*J^kMZyk@koG4r zYTDHjz-*2{A>KEdF=<2*i?>H zxco5lc!%=h_M$E4a*XrOr*eJQFOAJ-IGCm<{EhP;7fSofa6#l>wa+qI`)CETeMSgf zY`u8w4Hq>LvblMWAS8UQvzvIc26e|_sULQqFE$Uac}eYE@HD9^sO&5Ixl3k&wA0hC zzvX{R@5vuA$>54RP%xbg{RAQj?#~SPh$~)cO>@o!XDa%J+(7EZ|5CE>r;flxG8Vi5 zzUN^NCkl7Wc{D(|5ovj;VWIyuSCHkK!uJf{olZ;<3Srdx+R~&4QhtRxCIB~=3XO(t z+pgwd>^v3KBsLqIL8Te(rEGXu>w%gg=|DvVjC||aK^45HtR)VGGpJHCwGygBagWZJ zEqr%+U0h$KCmvD*eLH4xt|R;7J6U)qm3iQu5eKl92?jT>oQmF?igAo$g=wgmJhj%M zh1`D?BwiEb=x-%B`J+U6@&K2AqS{Q0piZKH_jr%3Pp0J`fMWHh=an+vOv{x-1oGQD z=<-^`w{ivQo9_3aB)7jZ@+CJnWa>9MJot`>U2Xl&x%s<}x^4{q?Bh_^VR&w@t(P$} z8%=2bqtQ-Rk^M^rqLa*VBjX0eOo=6E^{?IH(t})*ip+Uotc*QNsiumla}POH6)vqJ zTwzp8a&jv55?vMTwr>Ozx+rUFPMa@NIkP^QJ0Cztz~p4tYepDYyras5akSYrW;aoh zVB2}^7M|fhJr=szc5&O*siEztYfe0mOPrz7){=zHGyb~$^$kNtE*ns6f6BgjqGsw_ z0zSf5LREe-ZJ(Fk8Eg(=Rr)f-kEb2*_}Y=AGG=Dq#3;AY7>8~fCG%t;ai@kDHGKI} zWWN5bIdL$s&Ui7dD9x`Jr*dWrkMC6x=WQR}=QW29Jn~KIA|bXPFuR(bMn--%Jh!Pad1J@(aO03B}u>`Rt1xV-*eYuqf{r>#V{hnR+|Hfx%%}RMmJBkCT%8&|K3ta<4l^5{i_gr6nB-U?3h|LAa$#=O#N<{TiHPFU z>%}n%O#LBO%`z4~YJ?wPcm}N=9~I+VV&F=Lz{ypr%Br8xH1`ttlHPDzcUA^NP%d3; zK>fqG^vLGqpq(0R4nmLk1OcU-ZAL|!!N%X?`j_Og#kr4G=^I;U%TGeL`EFYUdM&|@ zn^WZ(=iXS94BK(KXKDx<3ibm9Lo%q+rXn|GFc6&x&dS>FUlI`NNs@9RMAp==o{oD~>y2xk zqoiQ-Yq(t8l5t?uwa;q1l8T!B0$4d7IFw4z%vAt{$eH@^J3`SjfvZ_GEIq3W(^CD; zzaDPH;0o1^ABO2nt%nbwMjH!9JdRWDINxB_}zIufZ#fLt`sojy~C^)r*eC& zr^pDqwasGEVlvM5-ZnU4as7C4of{jiv*wlYHM^atEqm2R{2=rA0<9uYSYTBw2dAXxLU zklsmIKE6|x)(GdEVuaoWt2{)Y&Y!4+e9^6=C_uBArrf|(vWX#WW#@IBsEXBOd5B_R z>He4c9aXec*7Vv`lgL(j+Lj$k%Rtz;^+zsj~G0zL(q}VH@>uMDeRw=>|`ozQkQqd1u>_S4o@m& zGm8wcv3(aVYOhTd{MM(Tbt;eP?n0_o(OS))eE8y6?T7&0j}gh%JuRA8y#Bd!$|7tK zFGWW@nh=2)UCX)?Mfu(hakSxg7>Bc?bE%#{uPiyA zf=Jdv@z+B!m_b-cH29G#S@jiY`HYFaZB^;@J ziefh9rN;#dXofu!V|)&K`}iT*7Y9iuk!&wEtRiO`AuX>so6%qwF>Tcw?ATvpbFw8S znMKuM_Lovpb{HSK>Pa;UUhDcjQ+_1IuaI>*)^H~bUT42z?e?pKM!0=vw!>@ETgTH= zr;@f*B0fgrxuB`J9LP$SP_lzzkr_~_5{xgbt$|_t;WN{zm?$!N- zbFv6{bjatAgxuPj0!A5@cLL7lTEwMmIi5?U9*>h|Qa+qy>^`_cv@e3__)woWpe5qX z#*(eua`!`);=?{oUzsLtpl60!z9#jxe~osvWmiB4(*HtPgH5g4?g}L`#o+J*Aj8d_ zuh<(p<8^PNpHD>Hh0HqdGF?C@e4!cz3ZW%i1`T_C%vn!9jHzNSy+9k^BFt1$0Dp?Lub}*Fr%Gjw=auU&-eZ1qz9pc-*cRWg8cl z85s4d$Nfk?8N0lYXsjXKYzZL@=(Qt>cJo!dI1~Hl!d@OK-gz7Aw#h$Zt ze%kJhq=QS@4BV*QE&DVjKiMP@O*%A4zTgY ztSPa)6o^`a?rlrd$#UghEFFRGUva1HdqWuje8AF0yfT=ORubTmlO+r z-&=b%ruv^7RtaYZ+2}!xD_}t0o_VJxkmu=DW|lkd-=!^nEjd>Wrer>($X@%_1sOC~ z%pya_H7E2G=a;$PKOA*(7_hmfy}zMG0l(T3_)&77U(|5Pz%$`+@wfYjOAWACNY5}N zl{g$1SDKS$2&W-AUAh@Ae;@SgTMvzvFaBFB(Pb?7+7HOZ%WuZw>rwTvEeTp5MNs=D z9)#qfMPM1lnfl}kJqd4z&dLY5X4VP{lGdGWfO7!^J$Hj#Y!ta$ev2d}wRgx^AGrqUyevqNE0y!pPh$77^)nIEoPzda)q zTp4r~bk$v%@5MZ4sr=bgv+ZU*N|o!)YSZZqoWge zba^cm>K7#tt?tR3$)mVzMobCX_yoVXDC0n$%hR5-Zii-|#^1V24hCoKy$A$q7RJI4 zJKx7Vs@RF3gDExcGMeej?}_6#luRcZMS7|Wr&gCXCaIJNIGhfSokmQ|R1Y`b9DM#* zqyg-;Y-v4=tZGmRTpYoQ`}hz)qu+e1D|mHrF|Zoz7u0!UdrCm3m7X7Wj!-*8Y9Gr( z(I>`ZsETI;>Zxe&0;g3+2B9qb=VORIkhiM02f;|r?nEUI_TW_Qw(6n)^W zzLCTkKrY3un~=D9;jJ^k))-kSKsxd$<5AE^;$2_nYk2zB1a@A^NN8ruqv7iErP*7? z1$D$B?=tf_!>b7Gx`T-oBSw7A+siev(+KP!#?Uyf5WF~}4zsszuhRxFn5oP!dltMC z8-3PSU9VXlr83+aTHh!AOtmsSb$WlJZO-jA$h}+o-@=8`O$pp$ zHw^9;Cf?1V+#~DnY)-Q%OdQVk`?MS9`?Sf;C2qKIbLyIn@>#*N@QDLYXn2-`wwy=S zXQj3u!SS@S8wSJOAfg;EeX^VK@~g6H*5I}3)`Ax5)Jfx3_&^p4Np%TXzA7Cm$3MKT z#Y#A@%Qd@rmG=?KU%Rs%T~Bh)_}87+@E_fZEN|3PQC;K;^lmX7pj+akUFqR$`>36a z@?oFY&7^X8%H>>5T;@MW8k1jiw27lC#}!BQ<=b+GN9pa%8jysAb3jHWp5Je{O7z8V za1R$M7V`cMe`hK+A9;!CRsU*Oe*XV1~4IZan(5rP=X+q|q5pI>c}ey=bdYi9s;V|_xJIb{5PEE@4OL(Uj8fI@ycQ-4!8RNkc-$#h1jn9M2u+V zzIyR{fG2w+0XRj%U##O&;M_C!b|h?pk_rNrJbJK2f*#$47LAU z^7emzd6Z@C16>9S8)@r4I#P$d(iuO{*5_NYr6}3}T8FF4+}s&lc+1X2?=Mn8PLe^C zbu-U#;Ly1p?EaF)UYpzfN+sZE+!hVq2mv>)1Y*Hqz5n%UNq58KPWeF%6xtpd5ar2w zH_O9hvD$yp-n)|qzAq8)%6%Hq?i#G~b8K>)I2JlfZl-uXQDkZrJnvrIX!VHPnph)W zNn^%BFYf5vQ+d^TwH)9+x~6jVt83_jf$9{2)NVlIf1Nv@i}OPG1`e>D7I~@Nl4!fX z^0Q1VW-Rf&5$~g<5Ikk>B452SfLRIU2U~W`->s`*w<1$uG;KguJ5)$+lUhQ2Cl|$R zrxJ+6;pGMoJ8r_{k>wHD?@6yx3IFS~Uc9iQ7L#?N4qnk90XS^=0-Pq2apMB%jbNE; zuw-f~-@#YW)B@=PM0;|NUB1Upz7!4`^kQfXRIxReOz;QAiyu)k32_^~Yni79|MRsk z2ISY*BQQbRZedEVfkNad6UzyAITjs8@3@vD(U*J79y!uw0e7Yk_UR~2*RYYV^o`?z z;diBwh<3R|*CP?@=*Ob!7r>N{%$~iR9`{9Tqw_Q&d*wKvEpIBE${xe+I8706d3IS~ zfvF^*KzBsdf5caRA4N)VUeR<4TelfK`sfi`9~wg@g?|90M40C%^E||)@Frg#vm0w& z*d$UA`WpD1L03jMu1u3ahJ6y!5rNk_Nmcwg|9!LGgVrtwVg*1{2UhbPYwm4JE7}ng zKfgVJDU>f;(0$O=6LF1v)bP0~>wnEFEm|#@+}gSMS)@q_$pPota`vs^ofDi(E+9!V zY(Na)`)?~;`};ZbM(Bxc^1o_>QP^`sv1IanKoQfK#}h<(p_*&vmaxs^3?_H&aWIrTn|&OD zi7pPmEpTPo|5oh$>mYxurc8gJV^1FGC$;KELgky- zMHj8%H_O}}k-R~BXFZST1O2vFMgP|c3An1Dp1p1K5uYz$eoNz(WyXmUGdZd$V630y ztWnJIwYG2uQ@ZOlb~^nJ0Uvs_tD6U*pEB04*FtK2k9hD46yCy*Mb#NFreFvvU-@^v z|L-ex+G3BvopNV7*p0B@`BZE)8uvLF;AKy4-MqF2%4B)A3PlK~>0_4svCy!El zjxxu6-nmuL3NrtRM3L-r@8H|bf4xQx;XCzuO}^6yR7Y?dp9wGcplhD#>`E{o{OLi6 zX%4IWxszW|c2I#a9{LzfIg!Rb9{B+GgPI)gj*2oSLkbE2Jf;n;#qR$pqDCT;oOlvw32z|JPCdIpv8N zOl}kHw8KS)u9S0ELCUfP6R>N|Rq$-@w$$3%Q^^EKxZ}HMQ4kRQe4xF0FF;j8*CfF$ z^}4?zeF8pyR~icjWHVs(=C9%&$kbqsHH-S>v7!rpIdlvU416|!6H8Cl2xHKaPxIE48@7gVXlW56XRK_?IYmu1bMbqtqtlw2r zvT$a;&pgX&g+|a8=@roa&$<5w8xJEBW@x1NxYQj@$hjQM(*YpZ=BvU{>ZEid;g5@w z?ZvVY+7c5B-;OsbB6pp<>{gCD#iTHwyL}(q`5-!R`^gut&8Go+%Wyj0OA@||G+HjW z4Y(@c*WM5S1gMGNI!FsBdSIr8tp)dArZ+!tp7C0km}VP>9qf7j?`Cc18k+MmI6gFH z{E6dgPw3Qbb1SPdx~waGYw0FjHyN@zHs$b;N+fW?RP=M8@94tHj$$qIuRAK0^w?@j@# zpl#2NPJ{6bJqsH4b*MKyPQ#>JW86M*KQjRyci^TNctGU;cO6ful;qZbwEWy#OgWfI z0^(GLq9awNX!giB>vnMV+4D@vJ%jcrd0FHS$819*^A38{WL%JN}jL=p+c|R?a_97QCN)_Z{Z@#J8U^%NBubv9y?^? z3YB)%2}CxW$k9TH;k3Es>lH*4^J<^kvcyq3$x}@1MFZ)rEZ4*KH^1+8_fxhHIr%l> zaKQ6_Xmf$1EY26rQjHy}O6_#=kXW7~M&CAdF&PeK5-TdDB#j5F*tEL?+tn-8$p3_Q zzZt^dOBlY@J_+8D%}sf5SbXP8CH)Q->dvACV=zBzapjYH-dGtz)7i2rUQ?X7)br)9 zasI1#7aEn#IjPl;HG9rMVEQNkd8jmvn?Hh#Qq*+P$>-#qer&>vQl#I0^NaB7dvwwE zg&RVsEHF!1Ht=UMBxhHTkNG*93UJeW%YHjp7vH*=uJk4kBk@fUfbRv}Ek4nzZ544iKVR^A6v1QC}Gvn+m~2?e~vw z`0>?|JRV_;xmmV3?CU)*aG&yqIy%+Bc8eoPW-{6Y4|Nl+W^p+SC)su%)?jr_Y%`cQ zTpbVT0X~m@xYc7LI?W!EJum;d(lK<}cF}w6A5fy6NHyVmQagXL^=*La-h7#z9>NeL zei&+>upY+Bc!YQYZr`>Zg|fcmG_uT>^;~<@7FBPBcf@qZrF8Ptf19F`wmau6yOnK3 z3hBWMN1ha}^3eJL4%-|(9Tr2I=xK9PH<0ZW-_FWsIk)_$A%vZZ9 z+efU^CGsVx0s6d)1o~bJfgY#F5z54Wx_G<%o`!7?yv%yeHTCx49HB4&c8y7l(lJV? zX&m~h2#g%quziAygQv(iva?X2{Zvv_@Ty5(7woh3u{TkW5(kQ!FiDKQck@5@nBO8h z{2>{2mONq`Yk4@L)1+SJZiB`#Ji-lbD-JhQQp^`?F<-xJ);v{ z27%^4w|MSlRALz*sl^P8i2gldU?P(G}+(Mfxsz|KX?DoUP%&Rs@eiySgN$rNIzU zWE=*mvBkKw`se9v-AaD0`(g|376p6c@cL6vkJQ_B+ck?2qs(_nHeL;6^rSyDl-WB= z3rjU6{|44|snO%c`wwYVX|`%ozAfI+A!U)R#)`kk>4}#4|91&`uNBIP2*QbV(Yynk zUDD@`#(byJyGlf7A=ZOZcPuYMsp`2UmtFQN$*Jg5g?2|+XlI$#zI*#Fw+;;Qu9o^N z++!N=Cu(n+S+k5w6blveYN9$f)YLCs7GtXXZT~FOO=7@|y?5e`6i;dDih<7-V1z68 zgCXUEG@&@>g=H1fnQhX+F238Y%0V#jzoQ)!4GL`T6uoC`TC#Lo*f7_!_lStBN_wNO zhp4FD$*j;h4C-s$ZW|N2jG0`#8%S@*C%~dpWH->VjPp?IW6f`=kN*qeq4Ra(*gBqO zqAR#7{{$rWfT~vs-(wHVK@KP4jrIV>?W~F;o?-s2ae#VT<}$$2cK&oE8>&@#*GypW zy6l&)+vOY-P%m@V`5PX#xL$om+9seUo&n7_qCxPE2#7QYZZ6{a^RBj%P2gBNc_noT zG4dd$`BPZQ)M%fsVRDkKUiGFWd@4B}n)dkw?}ws9{-&?Jru zHp}>Zp77Gz(}&Gz{(c#&ZKr<5`{8`bT{Sf4m{f9!Jl!w7`k1NsRb}V3VHHEDh<^6{ zaP>lpJdj+xvM7G`W}qCWZ5uI~S)p)W)ub;{vT45r%<+}+^;M|1ZN@p+NIan?W6cv1 z^_rBC4lZgY1Q*{DbA!JY=Zcm(kT6V0d?*5|dF_mK7PT`g{7CvE%XovwjxR%jp#-bB z${(JTMy|!zig^74=e)7dvc#4fs&k?p$SYb&DmKo^3zrsy)f=mu(oY55L*1jT$1s3Q zi!I|uWnH5_*vPPUlz(E1(KcFYyU+I@t`nl-$2a)_R`6wG2DTm<0K;K7rm1V6(_8_* zP?Z4hIG|#|CK}8-)iympzkk&_`?_|k`2yhkwwiK=SB3K3HNP;SNMtbdl(IWo;J&?S z?D6CTe7bWmtlmj?tA{Io_Wa!Vu;%R|k=?`*o383Mv33HuvjywhqQMhDv6Nt*Ns!s` z9K%z?VN0&zVCmoxnd6{-Sycsm&fDDMq569r{>hr{)R&YBR7ZmddhE$z))n~%1OaO0 zE@##xRG{6@_?q>3Cny}^%cH3OBHxi04>rJxZFLKL#F=9(-bqV4Ccw#e2Vt`1a-Cie zsy~+3V`ZtdsJWMFAy zwf(-V_L;6{{V?$WgJ~8pqxxsC=~UDMM1GKXLhUlXo~@t=^zrJGAFl|mw1laMHCO1M zli)Esy|eukX0xH$B6G-dA_jRNk|A>JupM>Jgy6P#@n_wu?(MpIbyycgxRDC*AzJfHzm4A0N`_^hoP} zl@HP~PsCj@;G(Gzqo}y8F3u{hVYdvz%>96eUaQDbnO& zs?n67u31hm^!|bd6nvJ_qovS7fL9v3?2U`sHEZL(KfzVfIwPl5F_DmwWuo!do*gXk zaG+y{0C%eSTQTqOdoF5ufM4c`(Bskwk~j9(Z?@^S+9iTc{xZRB$4Ia{T(mvvaD*8M z?(&yq|7_UomF>rc$E>BfAYPZg3^55GxMXhgn8q;z}5N4fOv^x*L?0gn8$lEqAe_Iby!6*{$0#Cc{jOMnz z6IgYnvIaR4u=|{BvC(IZUHcB-9^#59ccB*64fV*{_GJ@pj5r!Uw6; zijE65_S$gh2|5Bv!)PstHreF=dUz9pbo;}a?y&ZTW8}iO0^E_XW zMyfb!!evIk%1|}D(E?WWoATEr$`#kSa2&6JrjH;mm;~;mZQ6t>w%w5&>RhsxJWK3D zWYD>kvWN5OdD#(Bd)Zee9qx4tlc+)a2J+b{n-*-+*^G)1t~2-Yfh6S?CT1nt!e$W5 z!mPvH7ZKC-PZ$b{ft=(5I^_v(?x&6|@%B6H%1#ryH+gJKFH$022=N6h8Ir4MMf@ce zJ=4ENH+w0u2M3LDzV_{_G1mN6rP|rnoav*0?z@2OG!pM_7;KX}&uqO2l`3yDP>Lc; zvOIb=TI(wEx$)Swb9ny|?Mx8oGZw0Rot5F&AkJ8Ky%L{Aha)M_hRC<86mTy#_2E2L zg+y$~3S)3a$7DLE1`xwv{b7BIIt;<YHo ztVyTSj|oW#^@wsbdzMUcErV7%opW~RXqMG|%fRH;;_`G}Fv;*Wj8Fkr2;x+`X1&YK z^2l|o*Yo26iG^kMHOg(@-$C0Zk9|sQHlkL!Zgn(&D-dq7Z@u^~!aRgLOJ+^${5pP&bH7g*A@27VOF$2Hva_bj?`#4^oNhgdm8Ldax}6?vQ%mr z9W^`Jz$2On>`^=Ofb1bS@H+RJIKFxP(q8jES{EH<&-Y4a7th+HJQ7aG^N(2^a$*Aj z(H2(L-k1E}H#Gv!i2e^ujpZw!M%LOGsbh6=ooBiu!y?g#lWg{5c>9eFK&>6Nitta+Y@f!G4cu5YABLvR<IXC##rb2I9V6w|Z<-)h| z4!iY!aR7~<#j}dc)Kg6LrGWIw|HIo`g~heCVYU$nfnW*2s~~uQAi*7iJ0ZBcTjB1( zEx5ZwaCdiy!ri@ax2`06@BiQ3=k(L(;xrdjifWTsTVYRCFHLv1P#Cvk1t~PLuelpCFd= zME;zsCrLD4FQtdWvjumJ?vkUJY(zJh%q(QivXK%I_K#B5>GpzhI6=ohFU1r9%2ZPM z6G1o$pB}GX+la}X7uFh^rcODifUQfW3cGRZ1wM|νnM`vF6-zN{5|;ta>AMIkFQ zH+v+R(7IwDl+!h(9FfRcR@L7gCC^KO&QVdHiSU1s-HsJ5R%;;A>+6H!M{e69;>vB+ zLrz=5Ix45vgOB)>!J&Eux^+@fclcQ1+^CfACUmp}V_M%vD&2mR3HF0{#o;BeC4GO< z%rEMH*P$0Eq^u8ZWvUm1t>9(1JnHj;lL1eb$W_r%TFn*7-9HV^jVtTn4O#YSoF>#k)s|YH6eX=9*G%|7@ZKwjtDMYB}(ip%RPc__2EMtdiWb-aN zHyVj9BeqWw6Q(cV)M~w4)%Qf!G2S`rJeXagDBosml*?|RC`nFVmxO}c=OR{=^sU(WGX+srf$2$`)S*QJY2jB>h`xEm*Fe+D*UmA*5R z-W5&0>(``k(193pIo9sZ@%T>$BhKfcJSV+Bz$y#J#xN$zJ?yXA*M$dK5}&-uAC>26 zrRUo2!}Ka1xCoAU2W^D%!8bqA&}?wC8A+jpy7xpeX>3N+ENr=%?#f!I$F3PaPd`1z zRwWa^*lT>Dz0Z2CHZSD^YqGD_AvdSUk_e!H{YM%#R$A~$6N^0W7cE=I2iJNm2U zoaOrv7rnJLe%`rwyNrW7==M~6U5|i}%OIFDZJ5V4J&~zUs`#~&)Z&M0T>ON*Wq572 z#A)LT2tFHzvwM1XjYU^@%$4*`g@04Sjj)_VLv-3=3JS`Rjk=m;5#~NTe4Z`GlYe-W0AW}7Tc*_hQr-XJl6S7cd>}AlR%_9 zmKJe*@kD{%LF8-Atnt`kfNv9~7IxSP7u$0B+(60blzWk8D8^dErn33#gJ5&{;lhyn zol?&jbdf;YWZxenG99^Pa~@xEHUVpGvh0G2*Sw{{=jO86dR5((L^Aq4d0qNt;^78V zCBLl|vwXcGBkH&65GIJ@v4dJ$(ZI&Yw4u_3CtN&BSIy+KLDRkTw%J>>CSb_$Y%Ln z-{HiE+l=j!krUl(F^AOlP`BTg8eq0V!Y|rl*=VS4F!bE17M0W@pyw(IaRNF`YcC^G z2m_opkS@)+Y;;ES1idfU!;Z)i?inbv2RJv3@34|Mk0c!p_A4N4F2z}z>PzCJ76ZQ8 zrnMa)At}%AEpZb#a%fEB0sDv9igN2d^~a1_(FmA|Nh?)}4L zP9&jS8Rw{_RgRQJQ1CF3^vrHj*T?57wS?5%2Jm6n(uQGe&eiO2b76lQ;0@Qj4oC|x1INo}lI7W}Y9MXa<*)b`h=^h6# zew?S_(Q^r*uc)yOjabdW7Slm%oo@(fzQ271MK_c0mzN)uR$>Fk(!B6q5KKyiwj@Y< zUTHv{d*=oRjTj6Ed8(X$7M|WESBo4Bexc6@Mq%~@g{D5ch)0l3}klp=k+0AYd{d|vb{s~H0r=D#- zSM8iGLajy(J1V2abcyXN&p@w7N}SF?ASvu;ws{H+fq^Tpo`yK(#(WPb`9$6n8wg~Z z<1S{p>EWB<$!W^n&EyNo;j$nOpt_`1suG+o?_nV&8TsEKq52qn(B9C-S=`{c=lV1V zFyH9rKasib4lQZg+z-#3Fg6AD%8`5*cYPn7(tTUltRla@`-Z@{DNjbuM)Ohhm<9Q= z7>{0Bcnw{Y!U=QC6Rf@+6h&{MYlYnSS%*+qB;zW7^P8CcsLx^tRnGp6D2YWl@0a4S zbf@fu=Gx`c-ME;xdYmPv&-Y`l_d(0Y+Arw2yF&voyMjUx9#4q@NAuvpT@IP`s{%9M zi4cP2kl{<}h=LU(F}$rnF0Qc|J$T?4({#(D6(>AqERBl1{6SC`gwx71Fv-BU*T!ZN zE{ZK}X}VfctXiBn1{U)Yerl1OC!$jqhm@T(x7K|Drhc=J19~PfZ;Q$*vDg&QDb{Un zvpNAsH}o!yb-A+<#Obw5b*?CvyUQT|MWZ2a)-cI z*2X=tJ~w(zEK4NC!Z3b=G0~E&d^~_?u5!0BR-dwnk2Lxj8=36>0@t{h>+yu~p+2kS zu3%>ia*2#=AUc2C-@+tM6{$PWs6ftUphXepOodVCrfn4!c+2S7FDp8RTrh&Z8N9EBZ$G`F890?IYKnXE@#^z z=N3kN_9=rgKa5JlhBs>IC%|0&-$i^*f`nmAnVzn9{HZp+azadUH?g}&>RX-p#Sy%D zYBeKDZ)-{OXV$2_wID!ToXY%8beWwQwaHinhy>3Ma~XYeW0i^S#0|=>YZ(unBLv*`eP$!g z8}yC$dDFQB_41KK<=YrXJEfDA`KF=@{q5y5cA|~?lG(-}`O;ZuVACZ#CRZtgXnKYX zqdtnIo=qUgGGX07c#3%obsL2J9?nELgjZ(NNP zoyhRt=*UCIk2)7{ot~)vximJT+2HWysmG^W&8N; zt84hN1Dw>&a-VVbf9O%kk^iDcj|-CiUczbxSdoE1yvw+RCS%He4aD<5`5mtC9_zmLG&x^^z~NHxn^-0 zaE?U{e=wx^(#|AQTsTLeIWe}j%q1~JBzUI6U@$w62^S4LSPF|Cqjz#CQ5H1{`dka2 zzE4dLNotOY>N*%)8G;xI0(WWGLahC`N3#xezp>~BEHuI?auzf37?LB}C6 z+9OW2pL)dAwL5wDJ^_Z#onL@{Y?(Z4E)yD-=Ea)Ty(-zhQ|B1;17=MG^~R;tZnF7t z4?CJ#C)+JR6oV{^YKU4b!K}qD<5bhT3#}Q*%-L16-fKaz%OBI$M!>7x)2VF)Z^g#f zZ&WsD!!yNpFtCK0tq@freM|(*CedDn;ByC1+R*VjA%&nJhK#xG2J#hdX6x@<3uY$g zP1u&D7s!Z1-=2{XyB&~cw1QUCLjN-4ywzWC(P%3A1VK} zT8aA(J&||cBG0KvI-_seAjb$Z;O3j$l#`tNs>f<8q+ZfOQdEDpLSXM?TFYqROwu)$ zm`G)aOqW6Os+IncmBocLQl<_Pp9~8=^4w~&sENCy0@wRI+B!A9f4B9l6mjtQ>pyYf zw5~D;iFHJo-;=HK6v_WIclJ2eQoi;XL@yogEor@Ot@^cwhEQOel`1o zpv@N3@P*O~*SQ3X3-JXyCWo|0>BLE<_nZ)!2rc`)x9lsg>x445n53Bfxk?n-gD=1+ zoF1~u=3_WbNvTm9NsjsDeHF{5)dc%6Hwqn)UK5LDDpJqPGqAdjW-dmdx_B6jWs~*R zyWDG+TPo|BrjyOi5Iqxgm$jXr%kBpYazO^NL4DJwbm(bQs2$CUjO|tf$H2 z=L(CVVTItBA%syUS}qCa2qk|Z^AdLlVAvyTs{*R3(_0&^zmY!>Of8S#!HVa@rqD_P zqHa3z={H6{*?k)Jgak2yQC1Oj^L=1_Zac9AzF0m+Ur8c{zh)im&Qad;JBH>0->)sm zrt3QHCYTTisVBzqC=BXaEEsd1N{8h4?6GQ+_Ql5mm?;iU5&-%#X21)+CLBFGbLnPM z^`9**c@NPj^NUEP^3e2-rxW>02hE9GUL>Hv>IrO_3$MafMxq*XVmwS}sLUkhi^7Ud zqbM8qu?f~N3YEW~CLZ$+@BnK2KL5`HyZiH;u{C#dwfCapn!od{mv1%?khqIc2Ua8l z`@j?FbQJ3I7<=aF^`(s;7z?fDQ)$TAL826r}BQ=HyzQ zoDec$Wi_WKt1JK456tl}KFIXwe!Bf+pOl+)bgt$ZG0j7*bk=MWMK2&@D&{tHbwo`P zzA23YR>ss6+1Ko0pV%C(6$e7*ZFE1AIw@z%=d^bt_q2vle#oK@zVwQ7pcB}~AIPfE zcN)fD5YiXhHsB+ba)1v zwyKP5*yAR~yVtS23y0UmJMOq@Q$ro25}lLks0GYRYQS7wiT-gsBk~PIZqRY7KM8Bs zxX|^EX*<4X_r=qLzPXdLf(#Z)O--fk2BjQ-(a35I)Ab%I2)gRFGxs7nwVMB1(g$K6 zY9EA$P@768-p2ncfT(uZ&%B>Jc$LHC_MhH@=A2Yej&L^)7jlB4Y2@FH3+4=H)fuy# zlaf2<@bsxHOth|gI|5)ejs$xEz$x)+3w6#U|qfYD5}^?(zH~9 zP@b_CED{+Hh#B_XyXxJt*r3eBBoP&9xEo@`bJjWCAo!hE5~g-gYz0<-(2k~woS3>b zQtzbSiVq0PTtRzoHl z4CSCIzgYs)-CV;5RnAf=rxs&NvdryL%&>6t)(tRYcXSCoiL3Hhtd*yu{2Ib#a%NB4 zQJxZRZy*&YMHjjjEJGLg0L1XUcd2K@^D{@=g|q7=XFf;n+u>_8R3Mrr%QhgxJy_Ff znqpP7yg%hZtYCBbacDwsAp4*qO!X({7BW!^7kG3V8M-b)kAFQ^(=t+g8NT_Z7vR_d zN`A~6uWT`+zUI*2|eP$ zpYYHhE;(#apm`&OOuLKElj!_UfT`9OrofSUWL7% z#zl6(&r_@phjXVx>y~BDPQP5)9v<3O6QWQ%wzdT#glX~YOT~J#px50R2;s4f#0acKH)QJ7K_rXvW`d9HFcd! zaaf`9O^3JAI$?hq3ZLQ@9I#ybU1j1e#*l1Auy2x;0LkxWU)Aw6T(pFlJ;V=nzoNa{ zb1T2ZwRpwg@+9Qk68|Jy&!c>NzeKrwi99-bDd{xJeOrUJ`H*(8WTZe%gkwl$g3<8ibjVo!X1Dt; zg}Cs(Z!?sjfqir9PjHxw4r|#{W*2*)T$xxP-W0|hH0L~J+xDFCsD$ZSGAT4+JtqnY zr>yvZ{IGPWEpx=YU}#C-=*9^>z#mGdJ$V6DAkjTJ7%{mR^%@TE*{OLx{s|_d!Zj>j zn127osWUh-XF);oDpC@z2{+&fm{p%v-|c@|U+h}jauRTAT1M=8wk~GMM|4h$&9P@w zaRtU_0RtV!J&Zdhmiy}_CrzN7rB$|gZ)T*e@#QVjy>7EZJ~O)zMy%@XbLE+5=Tdjj#6E1XtoBiUxj?iLEDj6a|cjOn{NpoD>zjqhWu1R z?;0r9|G+-&B#0THy`&-SG`r4L&3D1w^?fd6a}bLSS^o|EiD}k^F^3yn#yyOjBsP6{ zU*2}<3BdFc0`;`%_(-^AVFwrOGm1HsFCj}cdMI)2A3$` zU0cJZObgtqT(-EkKLjQXNnpwsPWVI|1d>hUzZ&EM0BKcAcVl6<+K7vn+Fi^*M`rqI zXr!E7W3H#V^FKq;HyQ98-OCQz#6`T!2iBGMDoG$mnqV3Hyt5Q%2(qh8!rhk}nHtE!d zFktUV;nc%*JGXv46Ou66RI*ChT+}cB8i#0jk!U6hPS+PoYr-}TelZUCgDww`5Xs`jkjZF_LFr^_jLK9 zh6eH&W~X-2%{UOL`(_3ZE1g)kKjE7>NoD~f$YB=C<#5r06JxH}qFfjrm@!j=Q=LBl z01d~HO6Hgr(O-mEa1dXQg|$3JNB3!awnic`;AGUh-L-HWA3kbuKN)_R<1K4-hOGmM zry!tPq4`g;_c0`*EgTkSrwREh>AJwJ~>&WHH!^4yj4PqQz1K{kT1!r8v8#VG^_i;;OZcI_h!? zLD(|wO$k6+YMj%V3iOd}jBzDPLUxi$DKet9K@@PByPRriE-VD8rKpp?9WC2_YjTuL zFJz26l&Q-G_)Zp4$ZzFjq2g46BLy_8$CwdQkvwpRt)hK%X=vBKv71;&&;8fH;!ZpDc_AT7v3^&6>DCiq|UW_UdBY)8o=4i_vmhyej=k--W};PxaEPe z(L~Q3br*Z=6=ubzs1!QC?E`G%BtkCmr>iLkE(W~hZJU~e>c4g#;OoOeofW2ZOesIj z=!KMjespPKbY42>g=#kX?6#nejge^I4!>aQWANXvE!4N6QFv~Nd{3a-a};!hP1>{X z1FOfX;O~47yFopx<;-;%2ktt2S+Yd2WU7JC=y<%dGvlT4>lZz{Hgy1MGW0;puk?Vu zn4nu3#)|=wnR38+aAe;qh$@OE2XA)PadLwBcH3>xD8g?oMVB{rvspwxl30s?@vzn| ze(){D2AW>Y@K-H&57u+Aia|>%S#{FAIaf7b$jcOU2vS1{*os~0J}r88uRd;RyZe8!`j(H)>!@3oz;N#+Od z$p#d6MYh0Q1~clz|1}6ugq*^dEkrY^cJ{b0Rd{s3+x{ZJ7Sx~%lH>%?C%fGb*4V$& zvSuXy+3qvKPT3WZ&*0iIKVQ?;_yy~0OGOdzix8u~wyCexTlqnV9>6VaPI=8TVQ4^`D|d zp<_W}1{rFxO5|DRL#?2JctMZ!KU zGQf~dp}3(|+z{Lqvz=xhw$u!u(pWcvJbnFj-NmKCoyjt9_D!eV(veL>JLNR+?%>pRj(#=JYn}Yx|I^>UT9Z3TQl60xZNBlV z#~h7jRfSLhsH=TUDzDIRl230qxP1T<0gU`#Ge}kd4+Zp#;vyDi|J)B3O7T?}}MTY7qv@plt zN>kAFm(?gBjHj##Qhl%=sJek>r0s6o?*W?3j`D1#XO5$1)6j-ho5#K_45^80Y&m}X z*Pgc~_sFjt^V9DtNqwDgM|^Q5v21%NTM0Hgf-1Ww7@ZP-2}opxbQ?}dC&}NgO-o42 zw1^|ex@*I+^GUHlsD~rVwqn7a=l{N_}@+B#{}08GKV8I+c_6KpItGm-FC z-()C0_3O~FvVa?PYEAME?Y*4)9W48(r9ME9F!Xkz&K+(mtRA_nKWGBPPHajtX0oW6 z-XPV(-|;OZe2Y|H(5gJVdO9v}v7Mpxz(&N5#uS`{BS5Nkb*L$JiDRX1b`J#07&f8U? zk*!eF;TK{(G7-fhWIh#^Fj8xJUP|sZi%aeF9-Y+L8&b-#&QrIrh{HLe#m|tqtU;MQTje_+BwjUX>4Z`alG+SG(U$>_V|CuB-OqOwBA8XG>xuou=f|?|Ia^;t> z$TeMq8S>=rFG+(AQl>rVs&3vAqSj>IX*>V$0>2OSAc`q0a_n-|Ap>&550R`*+6>!8>EDqdtZ}ws(;^L zac>|5vR;88)HRLo-gU8cLHRXpdN{1{B&wu^9k}?L^?5%Ef;zOQ-(>z8^zTyw$@(}V?oS9f?}c6ZjJOk57zvsQMzX(-D$4m1md#7E;)FMBTehl1 z7Fqu#*UACGqI4Gb!2Q6wK6Mz4Wz&J|+3^j!>J4EUKFA=%5w~u8wg7i20U)_XRk~VO z*#lgza(}vZhN^vS^tvt{ zZJRy51RK1D?gtkVsmRixt61g zC?^Ab$M2Ukm0v-PUwe+V_ph|HasX08AD+krxBtE4_OemS9Q4Kr^ja^I09Sa$bitPZxZ(e7log0!%GAVeA+-P=dT9){A=v&bSEsDiWI-fDc zNh`Bpk-|PRO!*YzK~1Q+H!y#!ujNo+UK`8q>ccz}F7tZcvdq?tBRSEcin#RtRr$X! zt(DM|lGfFt##QpZ1u2|Xp^bxqD~lWE)XQhJ zFScI#%2*nhf;f@|dG>sBX9RgJec9~?p{G$Mfe1YD`v4B2NVh9C>+~8E{k?<7uFaau@+R>8%iY(3rFFwsaLbbL>i6IKR5Rd(Nz z`7{EkB}l$1LW$(pdaH`*?`0#*=W$$rq2ho9k)&d> z1g;nl<|cIsWTJj^mo|VK2|e6+e8@^l5?=M)sRkXKt3Iufw17a)cd-LZlqO5C@ZY<+ z5=2aqx8~c!&kE>-W}f)*X`mc67bn-vEGqo)cIXjLm+w4Ly&I;s93hH)`ONT(BW_aK zH-NbN+PTT9f|Yl$$l?c6ig@SJXv=bD;gwJ2%sFKLkd$b@)sAN~q^2`0P@Ho8KRBh( zq7~w071I?SaU~)!QWu`9#+E0@)h2{~r z=ig4eIx__E)x#;u#ic|0KuUqn%2bMC5`F7mlGVp2>SR{y1iR;q=#+{46<^dt@~i#K z?s7d6si{L(eU zx%fP%MJvwgtivQQS2j49(uiit3CtO=9Q>q_AwRlorr#-hnMEu?v`VLvrud1VyP;kT zC6S@1lvrhe{&0~|X7S*DSF!zr`26_=63*5-`G)=Oaf_5-pREsx5_npT%XMIBT8l+) z0<>v} zabi9&-y^G%#svk5MN2iMjfZ2vNf)t?=f<0L@%fd*A%S9wNw&)q1C?;@ck+D1`>Lfj z>zPnh&+~zdj9m#TiAhnfZ#??yPM1x}b#aK|OIDNplN8b{NJj_(Mo!sr=aC};Z=u0% z^c}zZ>%Y-6XXWfm$wN#|gM4~)F^)7PKeOR>Y^AA;6Hs5!9fsFjRo`rW^dG0}pZ<8Q zI?~r$EdMczgi4*~bz9x zKz(st;6UZo29Uw#26UlkCm(($EFjMjk1aDBxfLTgL04c6jh$*a@9JGj%c~sNjKF^2 zPoV*dVO`ISGbWrgAQcnlW)O;rj=XY7z5mwncqMgy>rU&)jj@Z;ApMSNMNCd9o82}R z`S7uqrRDbT^bRZy+2a?n2CZmMWwI`;*v;PnrovGjtJm3<*LZ_Wmm4N9TV}zog0d^m zu6eB`Do0i1J8D=y#Cs>(*TI1haF~47uV#J_<+d{PGRt%1VM^0?xOU$P3QY+<=za+u z4%0|TC*0tW&?30l-c289i`XteG=rrRGBY=70MME)A=h|EkD{Zyt zst45@1UM$XsaMa}L8H#|m||iR-`p|b`l>WBl%;gcAHU!HEea#HQA@IZUd=^G?0?gmasj+9gVe+7Yc~^>UkLzYU8zZNkGBGFLbl0m#`iWxj z)1q|N)_`?T(A;ue17+2quhCTN3RRJV73V|1%FdA?iyNn}RLzc1CdoZpmTTaNNMcSHzD)f5P8mu4h@%8Am@SG^^EX>-N{o{ zMNv5+^Zlq;HYHOL+r{awil>>k5L3Kq@~#mHwG#O;+AKE_<1nemK2knClBz6z2z$UWWp+<4hg!TkEcwY*&P z5jl0Na>Pdq_ht4rOQ-oRE@=5lA^6buWWwjeEf1!9Tm!9`af$fXE!XXQg2GDVl-2k6^ z^OvD)yE$#woQ-n^ngV;|D~&w!L6v69x2`5O1(|~&>(lc$GqaBsB~31)3U77Kt8cn} z_V_S+ZSn@(j>FtfKyKxVJg)9#NR`0r8x77UU(cqae6()?z`owL**9s&KvH=@mszYShFMJAPrE-MNtKm0jc?wrSY)day@3N9;7kXVZaR;t%48a!LIFMmKkU!gm7SR_sb-k3w zaqFN}ZY_$|u$cpX9(_d(=LSY0(v6c@MzISg){DX`(<1Ub@6sg0=9r2v>td1b0?2?6 z!x;WkyL|+)a)y%(EPE=~zlg-Xe9Y-^{T*E!8Za1Z=8Y|5($VB*uS0??@H2K_l<+Tg zqKq!oII-f`R~~`HN?y+5#D3_iuwQtI^RmZxB_N{e7TxJkTO`S&2U%SQLibDZye5%= zP0!_%v$JaubZ?Hr&~)d-2MR?RxdKb}j9#4KD@<3a^dV}RXrAM!+*^PAYtS1xtV082 z!FM@fbG~F%Mrl$WIuOY{=~a_l7j;x8 zc)sTAqO6vBy)w@JVsFe`81B4pV{UNu{jRpr07OA~5FHPPJnbr^HNx_BKruisMsQiV@y}S!SM3^SxX|UI!jNu%757`A->P`{(2v@y1$P8 z!3rSe$MMrJ_p2f4K@+|Z5NDOuu>eJ(0X}YC7ioQhk$c|kp^CN%s=dd7iCQ?8yI*y9 zWAR;h@k3sdC3C<~BaN8klcnl^nJYsME|*Uk!zQx7x?kee{a=GT;dS2r7vz~PZCp3W ziCdq|$YN$NHm)Yu@Maw5ykh3(c_x3o+0(gDo#y1Qa75hN5&6flJ$~f7*Q-4y*5egb zlvYuIL|0kV!oj}D~7OjrJYmVse;py@162 zd9_=^@VTauc)kcHDW6|ZV;7`XmMUUGYh`Jq_(te7PjhcCVi3kDCbm|QH#ppezuei1 z8C~Dd;lS=)vj>fY`rR>F2IpfRM&JQl{|pwzWVa-W0w1G{UNi*E0GVAMHpR^z?j#_U z91Ox3eXhf%e1Pv#J?kaZ_|8}?rC$_%lq&xWnv~%epUwVVuEceQtEjBZ5Q2lXEeWfd z4q>QPpN*^jo(nF)NJeRNNKP%vEQz*{QzjCfJ0|)I7$rR~T%oX{pxAl-{&g~tkwF|E zi?Gh_@L>v)wnMi{rTWmx=ClCVLe*YQ@UuH!o|{~&*^Q7>snHGEm8hX_g0qe58kN5E zV?6C&WHc3&CI$ux?QrgrP!@d5y~Dp$I*{C(NxO>~Pv3v+KtEx;vY;93rkkbUo07f~ zEM97qSyrx^=dStozrv`W(C7W2eo^81pcr!Z*_m*gTmAas@Bip=VLs>rEk7(%Mn z)6X2GJ;iqV3bjgu`_d>-|eeGX+I3D)4U?+U5aY~ca3nWiI04BPp&zSR}P)V za^}-8J1G611)J`5@}F{^5;*@DHtYGzJet>H>eMT4Hdb>?(s}EMI?gpN2)u=|(*B@KQ77A6@O3j~KD?4WJ z@==$bXpU%Jl4^YV@j4%5`8k+Sj?%rT*FUe}zDSo)Mdz(kUb{dRxRyKr6Ui z=$lpCaP*H~^Xg)uz0#{F@dEz;g#vxpSMQ~-jyC8HYmxXR*i5EH7?!Y0WuKNfmyqVL z4tHv~k@v5*6KjFCTejE2iqBZ?s7g%GQTX@Dl(?^*1W);{Uvv*Q=VQbMsMcCAOJk19 zo#)p$U#077ggmFjuvaoE_kul}xT{jQ%AIS=5RE-!=1x8&HgRA)S^h2OcnM3%pv3yD;&>geY(|< z+XA4R5f+`jn^pC=$)kM%MMi&xcG2zu}V6cOczP#1I=N6|g4?u~@ZhaX)<~(4cjr**A(MJM$ zg>5{Ck6xi&W^2ZTV3q2SKD>Q;S$EKk44V(xH~sxiHv&89M+~Uc)8(=CaUBwY%ON7U zt8f-=Ik$EZ-++AEO)3LLS1Wv#Bg${;szk`^3LW&>Vn%2j8pZKz9Haremz1n&s>QiZ zEjfEHkp@$O|IC?F6H+4$^AfE>+dtWiZK2&Qv9t}>O9lRDKgv)FnESL=L+>-29rm?J zqWn?pMPyAeqC!oMa2HwVWv0a|;(7u28)Dvnp}o$|j-Ov>ptx*ys42{_R%3PZ3@nw| z+BfRw>cEc-+KnN$w8=R2ID7DR{v2|eKg$_)bVy|W`NJ8FMBp4`uLhQx$Y;_WwVFR0 z{a6QSF87j6XTFh+`jC5x^4H_V!_ndZHlp}z%?sXi>Z28ybBm|4ud2=XS89^T$>VMJ zwMk3(Yj>8baNO5zC}-;sjQcwT3pid|Qa51Gw%_`++?WaIiVOOv@r$GU%E@haYjO21 z+x+m-fI^;jGzNQUF6-Qae(MK6-wCd)hl_oc|4PbSLySfN>2kGga!2TE?Ss?kTHT z)`v#?G#Ly}U^DXGWUyR4l*O|exv}%aNmn5v)iYt67-)rP zIlrtT+xovEr6yHvM|oleS56&>dAD-7Y$HLart+c)co@0v+DWOGywoXr; zcvf6`zTN(Cv7m{cVCfz^zc$ozO#yAU6kn&zSIQI`C1+x6Hj2eKl8m84FVivy zj;8CqH;0S6^>3f~t7QdWnCLV+)TUQ;JOP09ms)7_Fy6wSNG9mVQnJ(~hK=hzzO-l^ zrF6KxT>hFmjD&>gYN>azXNqn6$u?!id5~E%uwwzV!nclUJ7q{`W9dd|`^ziJE|SB% za&q9SV?*+)A$j;Q_#I5ss`%0L%4{Sbrb)ssvqIj~_eUnW@Y($gGBh{LLjkfX2m72V z%fSFX;7X95&1B#sWaLH5O|bG|xLenczMYP~-v-rJJ)q9nvWm&F?^?bMhVNJ$`maX@ z3=ql?&*?O9bs__+xgPnAs*|Kl7eo9ChCf?iFbA6T+U&lp*@@xkD=+tJY1T0-_`z(< zIC+q-BMHK@FXp=ZYsjzZ#QTWrCJsb?$B={ok0tG6w$a=((K^jV>(ozx#)qNzCKNUp zvsL_%Qvx4o%y3g&7rV(NokA7!OBAYAGL5Lo3@l&>$7Y5I4vR^jB(#@sBwnw&ADZDI zKS_JVDFq`{;yav{T;8gstFyNr2zYANKkw;Nl6*Whfpor=?>PzvYGh{AS;@f@$lwcP z=awxU89V$|gpPf(EeND0b??G@4_9S>5f{MwuH@@!0Bgp}{HEgZozxZ08v5K3~R3c7I9!~|y;4BJNy6j5=wQ4A1nx47T78cWu zhtnmwcJq~B<);`7xw0x7nKE!{erF?EmQ_)5wG^z#=Y73@n3GWDu0JG-+Al9>8d6kL z$b9Zg&Bf5gDbh5)KzLO(*C8v_`yTHHM)+yKJiLtv4JNmWZP;yjqI9}J`{ zxTU2)X1CzfIsII_oK_kX{eB@Foi!XRS6^#2R)Ii8HQ)N`%w)BgxMb=~dSb+hp>DLD z7_u|}%tKY3-U?Pr5u9Y_F~{aI=At1h+U$s*%&I&AaxdJFPT-JggI%I%>!j5xjLL^8iFMDF!!`nz{P7KK;V%3SzSb*C z8u!5;ul>MwEHa)K^H4CE<>GmXIrP%@uPd^qm3c=tv(5dZ67WRE2VNu zt8ji2&`mvXAj_5D*7GhV9+J`IoqKN~akSCE7DyvGpw#eL>`RN@W$_l#lgflSNyI|q zXDY`RN_Lha>AtfBF#}a{;`v#Xx_@^k*@vIJpwf9qO)9$n;dwlu`R;*^o<(Q+paq5% z@JvHjryf=#LvVE5BMXVnJoHt8`JgkAS~p*G*}VN$uY-};g-|heuT5`YKeVyAwsS#I zY0?;JENx;`6T!diVhW#er~jPShcp_CCZdjZS5VTMXC;4`Qy0EiVSM>`&jQ)^t>*cE zfKXbUK_S=OrS|KsJ-2toxJ~*I{2I0Z{FYHpVwd$qZi_5;F|p<|-OEa9;p%^QP#DC& zdCAODPN*Y@0N@VcJ)xZQ7Vk>7(G@B;{# z2onIGVg?Fxr8ak691$~id8Jo@@voZORl21p$B#EBZb3c=lXuDT@~Q+aj`?ojOdIWp zMv$3F)XWhL^vx^6hO}Mx2sjVTMlj#S-HX{>w@fok#MtPx89I*e$<(~^PFZmYsn!z) ze3C>k8?a@RTWrKVv!O7zQZ%d7_;yX!24n67QGO}($PUQ@L!zEf_$_)uNPc}3sa0qmxmsfAirz^z0rZ4! z=TrS0<+s0i&$W8#5oR7oNCq%G4pw@rySO-9ApU7t$eOgwO9`>{NntJO=g*mb2YvrR zBMR~0L#TOV1+K>Y-*8Yu0nlGKXnQbA1yHC0Sm!c{r5WHf3CUDSJbYaKx--ymTXD$K|IJZIp`nxL8kMj&3rpy1a(n9H z<7q~e-HdITDB6$7lsUG8PEYCJMeCi2f>-cB(j_3=vo57(&9Kdw<7Qhhp`KNPgp z*jsfIsm)1OLFZ!Z)I5B+&9k&FQp}I$%VyoA zlv%>iF404W+)HJroY=uy7FvtgskR@&;iXyvdF(5>>@W%2tdyNok=I81Tn0QbJMuWU z#!#OSn>w9B`72=dZ^wQm0%L&66^q-T*1g^^;^zW}ymxxH{=?|J`e~vEegY3oscNqxmAf0R2!7`lRKwH(q?P8oO(ZklF1qka=Zt zts)-I6~@WEdYU1gDf@`_*^gUsYE^GuJy7}m=p;E51(LYWhy1^Z(J1ZzBt{>;@Um=F ztx4igcnswOPx?z{v?xpDAFm}9F$>J^Gul;b?6E6*E(r_o3CsH3n+VacN*a&gfMR(kcZs5?i{jXw6{>G>^b>b&4Fp0wLNiUwA( z9~lf^6ToTV3_-Iq9~Ci=aCyv$z_irYacrChjzgjoAAfp|Elmr)Tdy=}vt#4({Q9Ui zMnWz~M49)jXtDNwU}*+nS(m?qNS`IbQs`WD04V{}CXD?i0BW0vtm(J>R51sm3QE{E zj<;Yz%Vw+P2bhTj{99p7HqwLj&NW z2>^UQz8|&z3ght8DA{Rs?1@0*`Wq*^w-h}_`09QA3-i)u-@j1Gc5#bs?Ds-5LnFR) zS{IdO`xMZ;{|~Du35!)wWyWP@5KM7^T{k=NB=$Izms3MPSvdLAln6OZdfGEXss2Hy zQT>k7_%IS&$V3)`mh8iFw{>&9^*fdqh>Z@;EaW&WRRIDzRgZaAIQ3j^BMZ z2KV*jl~h(H#(X+xB7fP}{%;g1nDD$pfXB%H+pb1;u2s#^{kZSl zdZXjV*NW^W_Y9gHhBAS_Volc>1!#BABmt)1bWT%^n;mv`yNZ8TLw|_~NuGo~PbdzQ z2FFx^9>g`tJh4K) zc>bU^rG=xZ+6Snf57bW^psL@!ef9A8!b>VotLgJEIo+T9T#ZyP)UKmRNDU{x++=@K z@~hPLY114TQn|f%YZVok8}eg&#wkRdCYKD)$kJP8F65opG_d((Vbd}}ioGX0OxLj4Q}?s(ko zobfOyw>tAuyy}AL;@7rJu-cdeX62J?UbZ?IpG9*Q$l`{r?y3Z#PTT(jI zJn|Q4%3TM2uV0wodgAg_4^%4fPl@kfi3J7B`2uriS$6x$4YQFX_}%m&gHYxHjwQpK zylc2uaRXfH`+(uafIuQgVn~3|(B&2Hs#HmP>eEs8{exf<`u%YB(uW@Vhd8q+f|*9E z1j-4NU)&d)=Mos{f^l$+_P@I&Z>ehk;M?OD|Lg^9)^Nx@bj6)z{}Cm3&5t};1kvj5 z^)K0_>`4keecAMX1E%6aSNZp1p_=&ryJb`$#3_~rwn(iUsb(f|SPS-r7#z?KP(%qI z2d;=<6q}FaT3@9K-BX`d!E5+Wz%(NM`F{hZ+KPVxrr3=pRjK5dMO3{KvtP|jKg@?{Gvz!piv*(sLhxf?Q3*|H2+$f#4Shn&R z)smMkc*&*)`BXdMVdL?(!_jU6G0gq5P0E~EXG^(rBB)vRsKOXV?sjNE{wubjT-3^l zX{UaKA-6=K63Z4|_sBO7{u7B*Px|dQBDzV94=Z={1o9QdS(R941bh$_j}2c!nW^)} z^Tmv-!m8}Y?|chHSTK$~vGHz7^8rh7yDtBTe7ez0m7r37zw6^S)!UufFuMpJia5nz zPVx**K}t$EBK1X=rFHTv=Qf|rXqr?%R?Zp2yx8-H#<(G)RYXrJFX8~Q79Y&Lq_N{r zCtmH`z~ywsC7MuimNPWc^)4#@VqUR|u_Zg5S#5Lu{E`pnNww`6f09t9u<0%VEu^=x zs!R~c8VqNi&r8(XnKj!LmBsbg5%zmt*}+Pa2BR_nzkkI_J!I-%vP{!QF%}tpwN!mq zIQG%WKalZVcvOU~2Oj?Eo&ZzeFjGo+L~ec}4WmkdUiyw9b1hXpg@sX1UD^?c2ySgY zBt96s2+TySr}i+#$CYM6peKX)V4$sF-A`z!4dVlp;t$Cv`D z5{ST>BLq(%3KZ`NGL}6z<~0Evs`H{drr7Oel{nPbsnBH$!NrQ$B$;RN-$giNJyp=F z{fOxp9TPz>uMdpwZe)acWiVAz7MiSpeu|k&eUo5O@ zq?fOqP@WWw-%VeJObir8n%glbs&7Ph1DAhfLVqwj7OpXeaITMvnl~+RDjg-00d@w( zr-wQNI8_-HcAQfHTAIK!vo++?aBm&=F>RavwSF0C`V49b%UZ$*GMNs?eYKZ?G&W^v z`G(l8aVu+SxV`wj6jaM1Pip6Ufcovu(1#J^uf|9=6nK`Tc@!b0OYbDJ_CxX)g&nEo zeAIVXh2xXbRVYfh>Xg#t*Z!nBOT^Sk5}RCl>!%{PM1#ZyaD}aDFV#)|4UFaOa7@y< zw8=XEKNmsB&XE*ox+jRq#f7}l{ErOEj6qeD;3Ewj8gb&U7q~1F#A%Nt--L$a0@5z!aVZ&nJZ69B zUhz(wGs6Ewf-AwRZw3md_J?$R{C)PuJsK536u{!y4LA&xZMKlHH6JP*U5BnU2Co+!2kR!R$lUta;J|k!-9xo$) zBYUJ(;iAd{u%S@!=*{ADV&p$X@8ev!aN4q95+11@HR10Sx86L>ThRCcPKNy_>Do(u z?e*`L(rnkxp-HgI4z9vOEw?JiSsBfl>; z`zD+2!E`-#;Px^ci#&-W&tZQ;&?G%d(7Rsvq5YYkcB%2IWu4!dx}4#~7NSKso8CXb z1R++lrTq1JDT`3K=~W>9%t$_cC5 ze=_p9qvc^|@?6gpP3x@}-ixKw&5G+C+XdP%Jtdh}%m?2#^?_Tp68#-QbV%811SJ{M z{vOZ0)-;yNI%>3U^MHatNzOz3%X9k=;1Qioq7;?L6^4fyZ?cr~1|+%gOa^*`!Z*Lz z)bKSo_i9$rG0TuM|1esA2(3k}CPzjJDhNo_)0w2jhkVe4SCw%5(#ebJx-X`6Kyarz z6^~q#h>$kF61m&M=W*j%>Jd6lZsC5`@Q5mHX!=%@sbbF`j!*ut9AM)>&D|y830px* zD!`QN@sYW3C2DcSKb*CehtAtFQiM%hD<#6mL}^BhNpO@M7lQo2vkEn_2lh%yhjOU1 zQk)oXBko14;6PS&Wd7}rfo5bmf@fp>N!fe(M`NHn-Y%~EzG~w}yQwPfw7suZLUSx1 z8^i|gj!St{e$SF1FuFYueRvLc6Q;Y_?Pb;yN`Aj-F%IM?RZj>FeVDr8;Th>fH>uk7 z6Uep*;0e-66|ORna67S#)L|t*zPnF827Xx^4YGPhNR8|DtY}*>hAME8OXV$3lyn$4 zXi&D-NV3&4(h*lsQx)Km=pK=oG4%%yyU-Cd{#A>gz`$wd4;dye- zq)4tJs9SaCN#%QpkhHkgww6f-(&leS@C#*^ymk%~@4ZR>8=p9aw8sLy9+SDfFn|~^ zx~AZWS4+zl=h#6e`3@<|Ir{^iWO}g{u3xsbkH0{N)WPW(pNtuYMWBuRQ zz>sa_f5D4M?nOBtd9*64FCMX`nca9()e)w-E=~i3%LhL{9 zxdD;p)$=pH)wlBJGhf`>mfU{l$~u6YCNS6CBFFCb%>ViUBMZ2i-~ageVsB4EUf54v z_o*^QAJK&4VBwE0Uf$(DxZHo;F#ZI^pss#Wnrb2-PeQIX9$}S;|F7?F^U76FV00uC zO(m}E5T=qceXj33It~O@o1d>P0kM_BLP5rpYm%=gl}^pa{e02Vok_VU>x(IM6fTh@ z3D9~RS_J!VqW7QrVyJ(Aj<@flItTMG z+rGaianY$5R8IQOb^rbNW!8C%M2LsArB=8bQFn35+FEcK#%72*&EA{f#tA1oZSa7l z4V0IodBldLx`(wdO~VjJw{Hh@J^IgvphLKetso}Sn_YdT$}P2QrY|{;*2xeF_r#n+ ze1OhJXFrKum&7nZz_f>k9+*h%s1j4p!%QB#&Ge(d5C8e^Nz!xW@XNkP$2x84E?jL( zo`-unT*bN??v8b751zdW{>XFTv0pz_FW1WvA+OsYMOpMBNLz(-V<2&ptU#(XlCU0P zV@WJ*`yU$28*SD<9r2%&ejivsPc(mCx8+j0@P zm|M!(|FbCn=gTJXp78i}a*J70yL5FO{tTE23X+qq4>6-s>T~){iye8>(H&7H_0OyS zdEA_6Qu_VV=iC)*udRMoA8E#Jr@w@SAOwQUt1C`nEgCQAvzeq%?pTG8D=?^$l$|G; z|L1MSHN9zi3$OFz^g^n}3q7@uH5Cn;W+Um`#RAK$**?n!#gkLLaJ4V))%OUoZ0R+0&(`L|rDblc1 z4Wm&gTeVub)dz_nP^e=wc=H{jFo`(x-AwcHZr&BGMJz~UHf*S2}4M8wf19VRhrIWL+H^sq|N&QW|(-e|* zs-4Uc@Idi+X0{axw(8T_m;5_I$Em*rZk>cOpn^lJD|78(qDTXiqM7Vz-{3zoQ)8zU za5c_0>sui&x1vKz+{SQ0X_F@OAxq9~G5fd~mO6u!51*rFm%xN(^&t?fM z4a)Hhv(EQE^z~~VMt!4Jw{0R6H|af_i}CIvo!#2sCoEO;e=Y7mz21C#3ont&H!Zrv z?Gru5^Zas$_}Xc%)ld6fU=Y4NNKfdN zjao^r(B(ijJST5! zC@QwfNzhJV_kFP-XoAFqtc?I`^Sc*M?gto;xz?8`8AtYZ&&3A}%G~O;e#~GNPo7iE zhHNd$Xn#|#ph#@~9$6e5O7WP)qdWz_1dOYo)D9=AcuFDAP~(vQFH z(D-qN^sA(?{H^+kwVvQMq0UY0x^HCM1SH1&HG$4rm|(pU`L5|eXySjNd6Oe@W+4p9 z(%lm*Ufo9c+{2~<4F66^(jsKKnaIip##tF}(bT5XPc79|(?YDbscAszyeQ5@QKdMY z3OYS1o4Ko{#i*=jfue3Xe-0RJ6us$y-``oaog+a$6}7wR;?C3J?Se}kjP8u{AvJLA z$=~6rP2UKN$xG3@t~^7DRu7+_&+yGk#s`A+FWJyfDSe}vLn^}?zF9ryvI>BCvOsv+)YeoQBY7E8iOlO zI*%lmmrf<&vk(k;&xPIZf>Hd+uvA~^0a*41^v_$jA+3Mv%K`>Rmf!g|say(E1nFf*CG+EizKJQJe^pF zhH;YdQw8oFW(bw*@ArT1D}3S15QVhSJ?7OC7a0O!&v$)ppTKBs2gNV57CPb;Dcp-~ z^+g)D(l3WqGpc^9W{&aM$Gw9djkeBgZ$rl>K1`1|Su_=smkI8BfF4K}{58qO4SoS{ zTPj!IihFk-*g+~=Mx$$0X(jvVMI?PJ0?Vk@EFKW>bN^M*`D{o@?fw4P@xh*km$K>+ z&zc{>^=%S@aRr)ePGV{}_r%l$5bhw_`lieI^2N|2^Pa7JOE-kp zif?zu%@}koYnPZOKpp9Kug+gJ?lr3YIP8x7)MofWtK`Cg?KCd;CW`;YokqM2o#L0x z;?#8Tu>OTNLE(6FvM2ZG{wJS;SZY|6s$)=C0tT!_z1K z195ayz9=-+(+qZ3vC>1r=@XLy+@H;MB5*rT8G8B?*Ac!JA(Yreg29>wiN8kY-=W*X z%ywQbb})VwkaR5=8gH!;{=O;xpRT{cBW7b~QX5duej?i#;_| ziz9+g%;HxO$!^f2t3zaLYbo%2NG%-H>?Lv`t&YZQO~=~VXK(j@*OEXBChy-mN!Id3 zjXL9|YsN^vXHb3u$x;#9?WYc}9jf}CJ0umc?r9B#BU_B9q$!B`*xd8p$j9}IIJBb# z`CICosF8vr?Zp~UR2^|_^2n4Lm7VAIT;}D#oEkfTN$c^d^6#i(MCKZ0`aSU3z2=Ps z0+6m&F|PVXS0*g6e*(9nm4j6|E?1j=;ysxH*b8YIOW%9kut;AidHvNncix3D>ybU zkRlr{OZZLq-WoR>dB?(pk3Yd2yd@$~D52L)A5mwleoj?jjU2ABW~r>v)be?{na!5) zR?0u5NA58brRq~o`FXN)!=6K%L6b-4Q&&kH&pRe+3Hmr~V`pQpXMC@H0c5$wxr0flY=MEHsq9ww zm2yMklJqG3!--e`cL%dH4!%?LQiJ<{4;yS1x?D<)!+@kVd z{>bQMydG!5Keg)b#h*rE^fVPMV=p^L0y zmvgSIm{oTYe6#dx0w%Z0{`nRxVA=iEvLpJ=Q=ubH))w*=iBIM??b=}}OE zgkBEQN*S{NH*>z7jDmj@tZCY%*jU7veMZkp*PqgrbAW9aN8MQxx>-7kft?u9Ft3h>|x z#2IG4;yg5;4Cro$f>@J?^B^mY1C=wL~I^%u~?1Al}Nn@Dl?A*t~_uG5SdJ<*ar(v`4`jt3R+qSV|F^00TW6s?Yk=gSBBsea! zmD9KC*0uAr(dT+?H|5NNP>sx1vj0!-qzNxf5xnvSqNaaPBwYj?S3Qb@mg1| zp>Y9}+4=U3-8L4^KN>Z;Jfv2CI+Q~xLWzk?% z6gZuJ4Xg)~|LG<*5wYz31UWiyX&kuSzIW?bjq!+~FE(+b@(dB?_U6@sH^l{tUF-~{=*DwMZiT@?aq2Ix{X_DH7; zH)F8$A&UBJ-_hl{dqWkGyu+U>RoAcXQEe;ZhDhk^eq)wRz^*0CfHI8%V^o9EpQIhu zh)()uf!gE{IKU3dOU$2~7D)R3vlkHCcdd)d0y|N#-t^XSxGcBM%5_gx?g>2X2)iXg zI=9ohVMUX#n0ft4#36U`T?biWt8ILo58TbhHn0iv5gU2Od^>k}CtXmYaph9aw@7qQJKkfjw%4{36E_gW5G-P%VK_^D6dp zmtdc*dC4VIb6cMMUa<>B4*rb6yH-2rB|+?gR*uC$B*uY0<0`+^k@=MykiV8$5rS2Y zpF44o{lmq10Ts6gOIE|Y?^#FFDDL?>916}m!_x>+95I&DlF0N7Uw7=)lIBY5VqAgD z9tr`Q4qYt&4k)iUy^usN?e;_5R$b*q&P*|(o;aY`WSBkCkM*snZY5<>Xh z4XM2k!?0>Gtru5|l6{HeoH_ZW-e0YZ6LUOZ_J-^@dcHO1xVVp=1i;sW(W7YrT z)0uXP!(80irH@q27V;kAK|@HG%|=78H6ct^27xoHN9#jf9~^KBOOOA+*hM)upjslGPa% zFs68=L(=Wsyi*Z?2qdTR0=J|GWFXbFt>q`=LPtrG1wUiq{S&)!`X8^}n5iix~SL}d+KI*(JwB+kLIC4N(7Ah4?T0L}5y#-g8u-Y*k~|Wl71@u znvfDQHb66d;k&6XdNx+cY7)W|TF*OcHmGOJ4EL$}-TuURL?VB91BXuHpR&!zED;t} zDk*v23X}hR=rsCq0&@8y>~Ys?UPagY#fDcE;xS*$XD|%4(PU&g6QB8cM%*tF#1-NS z;)=AuONBON3kKs<7HpbXbJ~q60NS?GYPq9tV)B-wo%5t;=fqo&hnXW>>6sT}aa1O& z=e9;22w66?!y0b{r-m2db7xiN#!8>{9yBLt`W5c{lRJ}{B8w`FZDcA7^@%ikd zaVyt{z2^_#!>aD(MZBB4Qhx6Ofai4(5=9<7c;8p9QQ~HiRZ{R1cWB@JJb|NVK5>BDG-}d&d|L)R-@?sp#+dy!gcT;OP z?gYhatNBjaWo&FNY{H?bXNKyMxb`9Ni`#_2&J3+>5g!q??ZLrWXv!;cb>F*;w>7ia zUmFxEJ|Wm9cwQ*Ek_=4&(AYK#JTl^^?-XGE910SW?YI=>0lND}1YSBi_x1;V`J(J; zU;_<&a8Mv1)<~audBZus@kf(eLsD5TP<>GX&sPF^QOru+t+tDBu39yvin;bZgWqc@ zIv%FLJQHAGNP0v<&!qe!YQj9~J>QeJTrZzj2(6At)fyMq&f&83Jz&D(j`_xjG*Mnu znjXkwtHu$oB${5g)Us2^UKb|R()Q!a%lEZQeJ{qJ`=0bmzjqxA%`S%TrM@uS zsdH&rCZ@eF%8HBqG|T{*Vtx1AU2GS8^S!vEK zos-{Tad5COvz!E_hA_&TS#ua%4s^v*v`p~d>zvR-Tuot}0rHlctCE+O;>(i46YZIe zMb3LZm)SvDs0EC^)3l_QD52#OHY_?3K7V)s@6NkE5=0P;QypAoG-3y^EA8;BOOV%w z7IrU`5hJJ8u$2k^b`g9gUhKK{Ot{|bB*?cm>xJ*6pijjbJ*o_Dco+!A)@yrY=dSu; zPgup*Lo8`OB>qnZ(LuMX(3uO)VCH-zF{4ZZFH3WamgoY{s~2RSQsZ}`fw6_ zzUe5b9UZHEIx3ltMRKO6oo?AJmgP@j${}SwZdR^@Mw{u&*TX=LA^E}9ivb`yR(UyC z;&=_lfwrGUNub6PTLlF9XR6PRbA3tDs?$7u&LoX@!p|C=f!Hw$AGJv&O*v+PqSe6} zqHZq)6}?|<;TU>p4M_&-Vt&&m=HwZApU~nFqm_TQ&2-hMX9?f-=l5>GYz=_W?x@7& z^Td=gu8~ignC`8PQ`vbqoZ`fGHuHkXx=of9IV z7ZSX9AR+)7?$sJhixaUjls5&WOP~U^*-O`cPXS8{cN=et=-z3x?H;2nj4d}%Yn0TC zHD5ZL0n~MqM=s)va0?yoqwXziiM*VIVR9O;2K)roP_bOb?%MHUqiV>Bl+tGQgP&uj zsKFsPbfG44sq#1BmYm|oT###ei-vq3i~w@b+;bcB!0wc=^=LOjUDk1z7q2ThM0yei z=J;ih78|AIaup&^HEmNyaJ+@_DY-MFirr7xI%^}21bfii6=Ss z{z|s!KH>S=XnxnjceDyNJe1*OQRDm&w!w|tOw_24xU{i?yhgNWhzR>Gv5z7L)2eey z%1{zJ-0EBG#9tp{62dfzDZDllDEl#n!p+w1+Pixtd+LWOjb7bFR1OYceeUW^z!3O* zU<(x1slcQJ^l{XFX1$|M5T?{}rd~g&knX%EM|F?u>>aj(dI53=o0EI2SA+qNf```KZ)#S_!FFZpryYsQ3u)fgZ1yQ?Aae;E zUS1?pfJ+WM1>HZZezxZMsdcGxgRhGeWZuKTz|72q^kj$`k?i8i+MbRMoUYT*+!t~C zxivwRD(pC0Bs?3v(BQ~Cowg9n!YCM+{MEIH=4xY{$Xm@e`Y8A-;hnL`cdgf_aNuR*+Q{UaD zx2qc1qr78e*Ds@Jq>K`s+@sN37A=!D>G=hvFhLq{*i0P=Qsie`BX={f{kSY&t{i1T z=G6xg&v(M_Fe!{0m#dv1uFH>LoS|OERa1FR8C{dHgfjtwYFi{!)MPPU! zY(qSaSomO|qqm$|rJQm+x-sxTjfo7#BIeHY(3z2{Xjw?@BOjf2kA|>l{pm$5U*;=G zYt6YL*YJu4+#H{yiTmb_G*G2yg~zp10PSX;DFuf%@*=*v`kq0{+9dN-vqM2`X|Bt7 zEHr{}hf&Qe{+n}Egf|&f#fKz~oa!lk-z&q$pF)DU)yTG%xn`uY+}D89v@uiH(k8PC zEkwagMN4C0ZL>RKlPEqPlg4LpnbobBActjx9)!AbaK4w&uU=V+?X-3h)og&T6o;Kcdw_CKKhrznw)BIX&V*tp4ba8pN&v z45%_9ovm6bDwvxeU!%SumQlf2J70uR=iDOqfv1nX!`1%fnV>PPHuL6_#WCao9{g3Z zK~L16lbFdXuq{ACV7%zFE2OhDkl*cdZKP!o^(QThqph zI}aRxUrg#@uKs1@(vptK2t5}H>@eS|AemyKGc9e7ux!; zEd0Wsceg;N+QVCU@94#6hodoo_XQll&Z-be&c{lN1?KZzVVsCtM{A0kR`f|c<%%Go zrJq5k@;x#yk@Etwo>37qJ#l*cKyzPILPzu78}@xnK(M)3on z)XILDl6))U*WqjWngECLjA#L-?GpD!aFFw9Epwe5@d@{ijLcWpWf0H$qBo5uPxE$4 z;VApW>8i0e4_-PErXhJYxM>u7o3V*u+z2-6BXip|7o!imeCYWpXTUhfi&7 zWeb*%Je|5%gmX|K&|{pc_sj+jq*nk3%oPKJ`T5m3SocMry*2#2^m98I3f6+$85;ql z(FxaFY%OD;v`&}{8Pl0}v}Im7sOTBU<8QFD{e_P{72tfICj04=$(0kp`{n|e1LX># z(p!+aw>0)^@d=;w+W_TLUX4XhwD!jEbZ0jcV3;7#rVr;&-jCTCr9b#^LF#SW8+rCH zwJ4$|A{71DH_I{0bUIsd?vWz+&PwLl=~;8-Ly#pvk|&J@^iz-LArp)}c&Y-xXY1|c zy{scFG7sqAWnjvvtb8W9z`9$;eM@gSID9uT4d}7Ah0rF?6U@T&HRcy}bUG-Za(L-4 za2;SzK!1F%R__?qTcOt)8>}mr45nMoM9wT`HvjAeWbvN*tcyK$*b_t#1Xk;7BAwB= z!Cj)M+EXRDPMmW(z%Ny?y83Ih(B*F4VKdt5yd&B^`u2RrcSA0xE?d>_3~7W91zXRY z+?BnThYz-|nO%EcqF4%dzKS7qG^>2HG|ofq)K&&tw2<;LGP9#7&!2g_XyO~VLZq++ z)a?D|H_#j+?!=mj_B!7P64{e7(p-i@z7Z``T7UXp*T_zc@lxb^hd-;B;KLyPe0Ft~ zs1_s39D!LJ{dtm%B&!Ybko+-}zw8hTh->S#@-gQZ8(z2VKvw)3>*3J4Wo3r}g3byVs}1$#1&XxM z^l5$aYxUX#*p>49V{7lqvWVH0$dEWnjz8iDS~`&2WCJuNAG`xNIa zh6oUSKANJqz8?3Tc75H@*=t0L$DEgOz>KZDE|nxw^FOhIGneB_D%g7NRF+$dj2m?> zEh6_27rS{912&>0#Rbevh9qf{>LkM-nuTe?nsg_1YmdHN`sC(dYVrIF8;sSMWeC`U z`~#W_SDG6}BY)#%4BGH}KHD+{WjqfQj~F|y?o16QhPxxJyVq0rC7;gzd@)*us*?F! z$f7Ibb3{m_XXGRQSxv~y?V@evrN`En^F%u3H+H8((lxlDWzq*` z6e{;amp9_KoW5T8B?_SWeQUIuwe1zk2LyS6CsY$H62EO1&jJGzUNG~U9tV;5f9)hFAaZw&yjF0*@#fEq z+-=%g3M5A!y;J;30a7Niygb9ht4C3Nq;C}Pd{~oUl9LlCvkTucFS)XrFOl!3oGxi% zv>2E=&`?Gg{EiQ!@fY6-r{~|(l++P)ODnKzPdCjcH^duORJ&3`Mi6!1J!Fhw>}UX=S>@XSMU06{;I2GV`k*{*E^@Qb)Rv)f|^gsEOh_5SvZ#|BHanq|vNBM8jYWGmSdle@7@&f)jCOK3oDdOS2^dFuhj%@bN0)S?41 zL-W4quLtehREa5~`PM5M$t%_$db3(n#Z+5b8Q*j6)enC6aimP)YH+B4c_JQ=o-T~> zhxwSC5;Y^K;HI6k9L1OB~Zjm&zyO5tSlSA5eplbkIgVOE`ic?q9> z{YXTBfc;Yj8hB;N5OG`Gw}v0I=8@VSD?y#<^QV_(LO@#FNm(ad+s(GSsHOH@q*aXO zqH4A|Qe6 z?{yH=ICh+a<+TByAmX@co(ZrkXmE7i@vS&v9dKWS7~yG)X-tV|N}e9#>?e?0>m%sx zY~`{DLF_NOz{muZ@$pU!j6YdJ*4}?{N=^(#s}ZteFYf^UTiR^B(Zm_R4$MyEcoh<{D zkCa~yka@3yI@=-({gl|`i)hhSp_5UB6VWyIi6XE`U?J+jvrgh^*hKK! zZAHVygZ_ZH&<+LZW0}hIvtiMEpF7J(X2w=g$voWRYhpvDd`=YkK|%199>-@ct4c8^ zi3<{(%xPRkYuTWZm-#@w6pEz=!^&ol-@HykH;+~?GsBi3QK(T3#RoAxcS=3$t!K0+ zk1}UZHWSv($T%?{4I%AIczv%ks13S*SZpOYrg0U+(v04^HoN^eU7tBb4=LxnupSVB zYwynXv&8az!1li~Y&k!^UQT`_dY@V8eFTkj`-L5D^ya1$ zDC-Jn+DibyTR(N=*ulT&;NSMB8eYrauN|JD@2B{tZt5&PR^dD}H4%S;Q*pOAjE1mM zIMY}OA6jk<8;}v%P?#}(t%=bfV3LijN=T1P=V*Q`foKy}Fj7fQWM~3I&0Rctf1H#f`x`#bw;91^C<5n2#8 zG2=;Pt-L%Xi08>^Lprt1kZ19Lt8K9r4V$l>C8_v1LD1JbX~*W+&s2d6DoidmW$QcB z?EU-L^njY}xiER9_)MRDzN8oxApd^^9wD^z=<_<~AYHZUwB{u?`zC zxue)Lb8vy1M`wii;^WHY(1T@E1ky?c)(PhLTXHW1W2wJk6joJQk zKpH_@Bm6Y;%t!jLdD!x%+mKj(Y^C2#Btzr_uer;;>KBOnUMG9&}WbAY?qTxfJTo*SMk!t zM`w-pka>!&ocI!LH@lHcIa%P=8n()JR9wC1?i$CHYePJ}d!Q>7v7DgMxkgXic78hI z46_uk?jfNjj)s4OXt;Nr2V4^`9Okz+VKa((<*s&_OfB0lXnw5T(m~fw0S}&g0Ax3g5$z9kWin zU8hedpOpM`J)&HdW*7B6TJv*WUBagq*%iz%y%*bsjvRcCA0#oO!T)<0Su@M{xq|*Z zE}l)aOz6VSM88BgnHL)&T2AEAi~l~^(=lmjyJUWZ_e$d+!MT>Rn<)eE=OW(cbiMF# zc!0kZNS3M>wadC@z)2~}p~){{FZML}z3%Wt&8N7qPp-uMBU(K6$EStu4HlwPpt?}f zprVX(LucKUK~}{F90N*JkQ6;0$;U@8t*VCAU~#R|G=3K6sj(_SO$f)} z#|Ai5diP2XI6u!PDo&qmx4F))N97T?fDk?G#HBurv>!t-2JVlD*G_O775O61{Oi8z z`Jg)!9Ug!T4V-jTdIHwN1{4zv4aX{d=Tq{3>B%LuJUg0^0&&ragD<0&V6TLx?9U3_ z?(NtQcP50z)(E?nvI%z{nj)!Mp=JOsLK}ojB0}_`rY$;g$eY;?pNILIRuZDlIUPi? zDwwz;TJK}B9XN6st}DqCFi=GB(zNFn*|aHR*zUxXGqfm@{0Za66SCZo`_@EbA;-KO znSCxA5XcDQjT?3u_w8;xqU|@RXU^!%_hTNX;*>b<`{Y&Oj}Zpc6&iPZh9uL#e8QGK1B zzPie zVP_Kc?Gm(#;nBJhyVYmd(W?? zxAxsvmm*6MP!SL*QE4I_#L%N6O`3{;lz{Y3=z)YJ3J8lXARt|-(xtbANS79*_s|It zAk@&4o%KBXx5qhWjQs~3US=>dl8pJC^S-b9`doAUO5RRG=&UU5M&3e#hfADOJiYM1@=U1H3x3MMS!CVH_|lh4-uv-y z?QqJQZ8Pe=+KnZsK(LqH<75xc^Y+lk<~u#xh1EufcP2+<31Lt%WZ3cOf`#sTP$f zxLY}q>o%slo`F?n0l0ofbq9#TPt@m+Us!e%rvt#|IXjpKKZr|mg zU8u8}n<++Jhn|QSJ@yTt<_CD|EzaUUbJ*ynCUGj7jP0#5(x$xmc1%Y%r~@e{dP{^H zbN^OCAWCsDK)7+%>AIawbf4%tr{33-`b^4!4liJHp_5exB~`{Jcd(vHl|B53EnvXS zl&H?9M{Tk)pHmRjKZN<@uzZe*ER67rI0;Mh8!n8vz93ea!#=FM2r;tZF+*p-h+kM&3U~g7zr3Y&du$_-F z+q>KEoJ$ZGR2RX|Xh-~3;xcYX4i=ubvMO&A*=XYldo|V=XI=3UlCJRHVSg@45CG%7 zQ%F-pdaR`LxeAPHPp-45d9U#xd4He^(DPp)8Fps-TXCA3D*(lj{8y7c78{Pj2C=_| zu)03XSdWGG$7Oo(A2EfAwRa~2dzT`GUk>`ZZ9y;On1THq>z;0Al;TQruN;2?|Bn`M zoQ}IE9p~X_e&a3Kc%GHI6@IZ~HscaaYwyv;3ICqNKYj^?GymtQbtzT)W0;m0po!ma zTTi)}{?KNmI~JJ&|n})#n~^dMZqqp|)3L3N($6kFO>Ww~ULicIrMnaRIsI}+(R=fuzE`r>-j8sqUyBgP zVZ(hjp_pY7Lw0hd8Ct&0bCw+{%4W@)skQz&jm38gf)xd1Iqvp6G*#StoE*eb?$=S* zHng?*y%yQp;Bu$;Lr>w+%buRA)^hYn%y%n`*?0wyX*r}W{KtAiP_C^phbn(O^NT#4 zzXN$k4612W+IF*4p~}IjoyQN@ov}D02AdZp#3TS)x-X~0OT)Wma={L8A z@{&Zwcn16QV!yNunkKOcghKKIApO~Wq{pF|jspE=XuiXx%iFP4!Vn=wkgOuub2+l~ zY$R&d)r^O7+#?LL6FdF`@KzeEJ1ax^46Gr49uwi_%(!Ni>QoC-ldy>GZdGTVj_Qk-fhB1%J*Syd+&sR=K*XsYP58z>oTG zAqaP^qi3Go)l}O>C-To`Blt-3JSqlq!MHN-)|-c~)8<~kXApL5I04xc=A`gZm#DcoX4{)oG) zS+B4K$hstU(gP9gzls|GHj=Hax(KL)A&|mx_yEG2Do&Yi!nf0AK8uc48%%q>XK=mR zH8rBoOZNV*>!j3xe?i78jI0Ueo6^LUn3eqf;Rl^LD>HQu%zj$WlEW`?!uC2F8+UeOm1rV3w2*cIDQt0Ro6|ty5w3h; zV)}L?yIiireBfCQ9%7USL=A`J1Xe^i{MBhqx-vG4`o zpyxTz0(uxlMsUNSZ^^eUh~_9>vjTJ+-2|BaMU|0>|LH>7H|t-b%bPM~!3Q~CirkE0 zwuU+VWs$Kva>rh5tkIKgkAh^Gh3m`KM^=%MOL+HFGfhw@KUw-eJYVFcO zi$iiry{CHSn&+T&g)~bClbICIkU=?l1${x-zu0poJ7GX8Iv8DHpcUTlSXeNbRG6*W zw}f_HA>;uXBJ%x6YcE8Ld<65(B&UIYec$CI|HGZvRznZJ|nP z(`#Mz2x;Uea<*J_ycJPu@%Z@p%p320Ae^(s*RumH+{hf6Bcx@BM9Xd-(S3y#BaK{& z1p4ayCn7Uir5ZXRO3R0_H_uk2UWVXf_Rpf@WxRZ$mA8`>sfnf$L%OxXoOfF>>1K6v zlW9Z2KX4^sJQb@jF>ZHbRtqrWM%zZ0((Ao(@q|q5a<>=8iueOxEjSsc{oB+X@vLgk zsjyHMLQmt=+?(!vy!0Wq>(RN*e$WafW;tQz^i##S5km03n3=o%#Fq@!2aC6?7eCW; z(+iI(HQD|#J$xWY8n~M(`}^BX<96Fmj`N)BhM)q{Di~DmP-{q>!zDe7Mmx z_>cF`@&i9l6E{1PeYu$7Vp9uc4G-7pqc%xFqk~~meqY1+igI(b#&av9^SnLxz7X}( zNONSC=c4rSK%jn0PD?J7&6mfSB%aQn~WGRV`N4%gX+(d zSi3Mu$i*$7^7!57&xz7q%G8JV8Ua=&tBq5fcgOB6J$N?qEJ-E zJn*h?w|MV1r)0?#4{Bx5Atv72c*2!#uQh>7`iWyeU37ZrBf#t{A5U%~5M-g?YH98? zzYD(>T@6)h;gM_To$TIc1@8Aa`fSW>i#Hn0DDuicDcv-hi`&)m(x0KA+KmlqHu$Vt zdE;zvGO9Cu%vY&`T2E2}PIKnb#`#aMN8_V3&8tUKv|%keiv@gIp0BT54r$H1==`~I z8!w*NBM>)Yrthy8oE7Q+FG*J01jA;^t9+i zg|oU&S4Cj3rfTi9>9Eh6U@`>hF!WOpM*A$@HdCWX;-;_TQk1CCji6hbwbp_g&rhdYqpiaq9g(*&k12;uAc&v z2Bc`(*NbJGkv##Yp&P;TTsli#)unt<)S#?}9V|Ki%S*i`0c&2dU!gHs%nG%b73U@~6vB{{gf7SU zEUMgo2QieURnG;feYo^tPgGJ)PO{(-MXCk@ew0j7o*T3}5?Yl_j(c%utd&x{C1sdb zavOK8QJs%~ihe)cDRIU_L(+NLeg7b@`7gcN#Ia|TjY}U%EUMQioi6Mz^RGQ~?jwVP zW&)DGejT-BkInFU6(-V z8wkG5EalnB?UCFf-&tz4-t5~qp9c+gAP~m@#3FMO1;~v4laH<<5iL&Q=lZF&Q!BbU zo3ISBip&(xDFsM$L#+0%98evQLx{tGgK_E}>g<`O-BIwSD7@zEj6_`^#vs-#wm9n& zQ@5z&ePsd5)T3!yb|!m1S%7E#QH^rV2?;wP2z_-J1D%fDW}ZFiZ8_VQzz>|PZ0XFN zucIhC=u9z2Tyx&3n+f`$pHc>DI8I5+Fp6n9P?|#SoI~hajZjo}?A^0=0K#gktFO*} z3Uoe~de8$no17DhAIUs_v0#Bbmqxk!c*hHnmkOf=qqkL-SCM872Tj}4Z@U0%m? ziOwn0+2Vvi#PHLbvJ0D$?9~a*IOqrO;9=M%nLmBDiuphOBp{v zD#TRFj5MJS#+DgfFR^X$AhWacvet`RgCh&^Jc82$l^EesQG~Y@ec~527K+RquQ=zpp&l%vA>~7%PZ)* zzQ<9bb6N;>nXE@W?L@5pqNq5s>uE%17=j_YeuM!P`XYT_HWu76&HyIE z7ZGKS(utxZzopns-s^y>rlvASUzn^>>&NxN!*MDo37N^<^AA|sL`3z`6?9#lF;(aVywFQa0wx)a0F-94W3FS;70oDZdgM=i zNK3<)`{6LNjh`;lwS;AER(St?TTjIXRsG8R&>589)227|2cN=MF1Cg+R(Enx5~rz4 ztymFS#b_`j;FEd#`wnkI(;ZKi;i~iI&S)`!p z`iVeaH&`BQutGoZS?lO4gCUr$Nb*~YgC^%*8ryXL2&0*lHd~%~5l@w(r7PMg9Zeyg zp=}Wl(*(XBr`HDU3Aqlo4`69Nb4IbxtDQt^g-Nlc4=fi5eT7uW6p+m>gts`raxIg| zgN2q>@!vZIUDgq@hm-y1YZm88x%w$U z(QC`ZIBwEp=XZZ?rV8Z}zJIXC?ev95_k6cHvgVkJM0fNp1-%;0s;c?SbR?VE#V701 zg>8lV_TBq)&qr{0=IWMzolX|%gPgxek$R$70j>vV58~{hCgjBkX8T-R$$;gFuQiLh zyeq9FPKziW(Tn4K_iJenGbo`-KX8(r5B^* zhsI!Xo2)vsLG@G!PXv`OOhsDYKJ8?3e5e(zcm2ZLUmDulFL~bN$8%l%z!L^$_o2b`Z{7DK}|DRnB#%t}?2 zGI#P8axEVAFs=iU(7ueh^ZU`JyVKs)+D>j=S#r{qgB|KwRHCBik36eA zveCMNZlxcet<$`LS43WZKA-x7a&@)b$yiB3DJxj@%Mdy#M`*7MTk}vsR8mUdZ`$TH zxwl&>{sqX*5F&b-2M2-W%c<6#Q?p9@Q)9l0*tP0Q=b7b8`czv@{949Z)B*L}h&3O9 zn`_(Q4V|Uvw1Xh{ot2%f(3c?cNNV0Ei^mY^+AKs)Vw{0nj5-g^l=t4{j18k3!__0n zw((*wBf-vGDAJ6IPnp4n-#iVAF`c*`=x=dMu_!&!aO-L4>1R7SYCFds?dr6Lm7ReA z$NQI>>CIp6pg-}`Ejo=+Jok?AZG@46K2<__&B`U21T4NHzus$Z@Y3W*Yf*ahney}Y z!j;8K?AJ{{IIr~grhb)bD!TZ${N$v`Z0Y1lTTRF~N>B8kj4WG%IMNLH@aS7u&Qf1G zFkcq>WDDx@gTC9B+`4AJ zq8{`4q_EI3ABdyf#f{9aJn02?Gd2Y zi9ltM$G%n7&}bd)l+Wg}sP-xvVgoXe+t#GXSzxTw{BjrAb_!>`scxN{QiGc_v;889 zUe{)wjhukewsaXov!%=LK$n-f_i+};OwRcYwzDIe!N`Y}p;&eC=H~%m_7X2$ za>28ni6r#O`h=X2it+X(OHbr$Unh6jBkmpZ(}6=Pi%5>t$I5cnu$`7Q>2ULRd*e7| z+m)U62uMuzCCj_n7-=)9VxDF5*FSgWtKlcXDR1nG%{;({EnhR(vWbq_gvBpf;@1L8 zFR1^)Bda!-c6c=ZY5yB$l|4@58#?E+|N7J@-;d6*XoV5`!udj2KsU8 zzkBvE_s)(jA-!I$lT^VwslWZ`Y44D4qKS7vcfW*9wEoAl2F@H(I4{Ixm;1~7V% z@u>q_!!z^>bxH&BV)?dNa`KbHB*rd%v7R1nrs&Hg zeHAR8C*GjJbGdkby9cR-tUKFLua!C2RDz#wZOg^bFWzDq^s*DhWN#lF6lE45QPrZf z{qDxUgQ`f4m8=AS_{%V)$HuDzayZU7A{=K3`j-_@a||G9;LnZ+^pG)IGrLF9GlyP+ z;3lgPM!Bp0wh?7NkP9PCw%B*vlH#|xoQo$b{7>;g>DdN>QOLKLI$2k3`x%N#y}p#* zIkIJc8E6rIS8kxjzI8ncZVfmTWEaO^M1c3ba0?X;nK3I8S6RePgFt43XRQa>#-CoM z-J0oM)*HLhDlK47$yY1;+J-eKDO2?I)c8=I{0S&#A)(~ITivt59q``SXzl^*FZ^A@ z5Aw_g%H?)mDk63_HHDfe%-y?!+F(CtV||iPqIr$WGsEY9CVnpN2tFboI9_~k)lo2J zcqN?~RJFHs&71M^AVfy_eZ|Ujji+5zl=1+6e=@pzv7MnzQD@S{Y~E)tPvEj^b?TT~ zK(%C|o2IDQZULQt>@;T*>lSLsMoARoavU|lZ|Ym(?+#ai{w4PPefwsF7Y#!&e@k^Y z(39eIB^OFyc63Lqu>lR=6>5{xP($`?E6XBgZ%k@y(2y{(lj}un1U{NM#n1M?);PMf zX1VB(H|qnIXMi@U*i}U{3(8q)d{V*+(|M?1Qt$8ojx3r<9}d?X9susq8soF2b9sl$ z+19ILQ(^uQM#2Bu>Nt_dHm;_b{DMhh=sa>PH%7@3Iy*D)s(hN5y(re@dfnZBNq0bOxq-S{h*0n_QO!lkM8>Y1|*O|Ws#N;rM6I!&2Pu{84rML_0 z)m<>FC*B}nvUc6X0-2?Nxj8~>?z*%{b=4A%gOPFQK2GPLn+1roGC+Xn38^k(kYPm} zY?6|G2aYLnYq0BNHV??BR$Q`wA~)p~%>gRk&WkyxB&^NFQ3s_4e>G>A!w! znvpjVzpwU|=9icfr=A6-^~MdR6^fQ$pZMAmw=nE*>D9Rz&G%mD+AlqI4I~XxI4vCP zTAmR~`w_hG$yV;_0Eq_Ec1#{ILw1_RWUi>0jzr&#{y1=aQmVvnJq1<7VDiePADYXj zW%i{Tf4!{~-(CCoGWHVAN2>*UQKbp5n+%pxx~2P=d=!siJRTSuE$%@RXh@A?d!?6! z*_6`j*Z7U(fu>W;2>~!WIP}c>3Hm3D$bZ<|6TJkMRZ`r!C{?_m(Opn_Kr^_gzap3N?pSYMe%h4F~Y&b)m`b2Fxz z-x)TfCoEu~%$Sqm{&f@34uEYXI?Sy~D^S zy;iNt?t}0@S_YiY6~yxfa-nLEON@ZUC>dGy`W`HqK%H{+%Fh!}E3=q1B`fZLD0@c# z@?ID?PvKFezYu~AXK|p`SEx*dOu(oH(BRMwASKt%;8`Xl2X|fxbfOgZUxFiF|2!(1 z=|8DVA~ino>0fu$Lcs{N6cVUmKD^gGF?4aWgeEWms1%S=o%o%+@pp%zK*c&t}EIW~S&MlXQ)9cXTXt#NAxwK2DH>TQqD>s!EIZY{1rV z(KRa=ao6cV1oPGh{?-I^7JTw_4nvN{R zf>_gip3AVOJDT|BO?=SNovtmhG^~vwzU|A-Or@!JRdp?f(#9(uY2%(g$_}6$-(Yv0 zG*o{7CO>+%$w&5g#+@8n8#)-fY(U%8taZ5-u_v}2()uV z!UpSpiaO)5wlg8!qZD2VRVkX^>h&85B_)2jTTQi#=_Mp|IdP)TAWBI%-rRReF#Pn1 zNPPr0fV7}Y1(_ZH?$>qo<#jX?F@7g6YWHaE+zj}LROWm=GH)G>kiKnw zjUA8SLz%hH(bVX2_*@?mtn#F` z$GM)ScbYJv8!}y-{tqKyO^hzYr^~jCmi2ryt(d*G?>wqIbwO=v@OTXOJBr&5EL`v0 zQ^^XCCi6Jb32%YZnw$?V$t+u!YAXiqxeOea;XKlP88^sn(&-4j29($_FwEGG>xKc{$1nB-KXTtjaoDJ-$6`WJuOieX>#P zmhw7IQY`S$69V3(r211>9qUcxXO#@KQq2h)tW5<#fTXZzx+nQ|s;X zEfwq$U{9)bm3Bq5y_J=f6D1rQaBq2hy8rwEIefFvb+i21>(5`g6mGS&pPU6~!J#9P zCw``fNkQThPu%m(J&#q0hW$Ny*DZ1}qGttPT1=@6M#*7g(~@yFhT53>Oy9ivIykXo z{#l~@o41-~vqA0zb`0;KC@IwFtvjzJ*vUsq7Hq2Ad<8~06OJ_Nlk(UTXOvynyXpzq zK6%;TgOYzoD_KUJ<;dpL8vTfT_M{T@cUf1L4ST&8s7Eqo8|39M=8}nt{Ovf&!$eap zK|yc5*RyhVE`vujYb346Hm^G$2!$SqlJ!KukK6yQRm%;?P9P{Uf72RQ$ZP zVtUJ!M}aT<^s$`eeNiP7HU_b(;L-($y?OlLOxu?sK1+EfZuz@50y=5q;NDb;`;Oam zQ>l1I<_eY}0oyCjjD}KDl9G7vOXnx`xf8mviIom(2deWO0phU0NF9yn93AmS*O46c zlRmHk+RwmP_M?VN5VVbH=1Xs&KOi%)abBI+(7`J=FfclbKRA7}-#B36Vz2H!d*Gj2 zqhGY%MW?luETbe@EUeC%yEDKIM(>lCd_b^@tu(>yb)HL$3EbyfuRyQCdmUM4Jr5>S zEA@R3vHnWmb0oO#6;{@)nAN&>_hxNKHV+ggT|u!AxOpshyZ`m+UQJ)jCv}Lowb+q^ zY3r{KT1yKPP%r=|&ZdB4p*08jVn=P8S3z(Gqf7(6#+AfWtrksG7N?@iLKdOr=w~<5 z)O;mnB(>2>kJs@WcD;!oZu_Og?B?#@q5GulqQu*L?Sqfh zr=p={OB=S(+atxMGr$WeX@*rxc^t-9JLMHR1$CS33}1g%ChZPKTc^kF6ntV>X)-_c z&fIvm&aWC_$i|x6&Qz1#*-`^+w3*ms$wc}gMl__jvT4J8IU(ANy;1*m5TxV&A@6HV zz$36EYII3stmC>~T5n5xZOrWU++>pwrc^Gqg^7UK@`>hqG1WC(waP#C`!B8m73fH} zaXCX}sqekN$D}3sd1WREP!`oBkE6T)&5MA8&wMmuR^MY={c`zBS|u5)yOrt!`FwTAJK zJ86azzfXeuA*F72&(!cZGQKmWmf5E}D(wuteQ7x_L>X|+9())1YI>0E_7_o1gS)4b zm7lcphT-pS_6&SI>gSs+cxMZ9pY<{UcX-7Dqa2@~MowI>3S((OMRUnb?r98usb~kX z>G90&QNM&C)UL@1LN-v+bt1ly)wYQ2%s+?14tgS()1usSc2crvZYDYvdtwhfM0`8% z(}_{s?T{eSuO*pJpO2)<%z#XH3#b)*W&ICm49v-)Dbr=%&+tw3H;l&+6@G|8)haYJ zl8z@955cJ^a-^EF%h)5k{V5P-qXhsJJ*v-aI;*ZPXwIlk5t1(nLDLnbgDu$ zhxzg1?)w4PqVPexzP_WelPKnrf*$NSjxIUAayQVZ@nwn9UfWoPNF`m@z)N>yH}i?U z%Js%ww(8U-8b?!7n(AQ+Ejynu4zcV?H{kMqoLFXzk$!Sht)m)R@--plwVAv>;biM% z>}$)X@t*H47zz|{&woU%Na!*iHLpN+IhqAmwj&{gS zxl{I=QgGr@EK??z>f?k;>^s_ z-rWFitP=I8PWlFQlmXZ}_W;bPxmWlWu_3hc&YG^``JFpHjYTo$hF`wKT6}HFMfc-0 zA6?UDZ;o9roSd6p>J_AsFjWpxHV&2+ws6HwD8H<-jI??{);yiTG#YXzl`gz;JLIQk4ead9YSNwh=$49 zU`$_M#;c!4Aq$}y@^Zu%TahiR1>6Xm$qI4tuTri!nb?(|iJ1~4+_EZ*7{=!LpFj4$ zKW+#|Wa;eV81=q%*4PX#3meXSj+a2Vtt}OnwBjD7g(8=hGzXOC`sN}SF@QCx`uB!^ z?5zcoM9yuhG}BD>=i4Un9=08~&Dn8v!^X91%}7UddDqqEzjMD#-^l~w3t$^bi2Q(S z4;ESUd|4oh$A37%7Cww20~OAjF+F+;7sqx+5eb~A%IunQ!9ytl8EA8Ou2D`N*avLc z&RcG|d>5*8f&rI9d?BqTqRi=Tx8vvQ?w$WG7@IN{Dz|rr*V^X?`!Cxvlyz_Dc;y9q z?Q%ypdEcqN8eP>iwU=!z%>Xe|hQK@_&!v}bT4?!J7bu(Z%s`F5o}$WA72y9O^bz_0 zSA<@LOGD1q(0CwtRd1_k+-Fz%ph~m6;knw*V0(MLP=goDcS6U10g@SMCJ#eyI+RN^u{*BN=R+WLAp3`%)uU1gceIeGiQw{8L*B% zhSTo3*lOE(U&Rgbb=e56djC~GcQqN5yVLi6xOz;HEC`6m1!k=Sj>w}8tJto3RpG$B zGTSL2)!nh*Thst`ID!gCBq%J7PQT}iZfX!pD_^i^aQqDUU)=hSwB`%@)}g7x5Q`8NVp^3wA#XRH7B8?E)tFJnG`kZ# z91$4njIUprw=Zlsq&d~o%Rn#?1f>jr|-Z> zZ!Ku~SzB{>_s?wY2EInpFVVg-C9t{vZ0&uy25MJ&xzL?AZ-#=ryz)dj5VRDB){EDf zj7ktoYsxIMFU0S6_gE+x8{yKyaW|FF%r2&<(_J~Q?Y)j!^b7$}Je&T~41)XqgDg?Y z<<24R;#tGI-zu?3xBVHosrI&0fN6ZbT%ZAMuf>CK^|Gz=iuc;Pg0+#4-y4fb>!X>R z%`JcALal2I(mWSlFmG!~x4af+0-n`SmnU{=qGQeJZEb=>_5Z`Z+pj8)@-j!!5Eufbb>M@y;rAS0PKZMB)m41b_i0SrJM31% zIBvarlb^3m3}K4DniQD>Ef)y- zY|RYkTWkmPT!u=G%YV)*a2{r!u(TkYz&6RB}3<>KNZTZOrx{ zNE3yf^zdGp|4zyH3mnJHjOvPrhQE>WPGe;SN`1ly+8J*e*TRN$GX}@%hNtChXAbZ2 zM3ky+giP*N%po8fZRlgv_NOjA%I0MEcXYp7*kb>pkLnByluD>ZxKZ$fx2Al;!U!fk z3XT5(x@VeW#SW+zKIi$_p9Xu=_@7Cf8NavO^rNnwTi4m@3cC(mX^WkwK}m}rcNKCj`6>w9m)hVp`^styjojF$>iJAG+N z1yG?8Dzbl10VwjYhO+X7pI-hQr4q|Ix}hv&g!fc8D!@2vP`5{z-N4d=nh$lk3eBlc zeX5r0w>ky`_j5ev&92u=6Gq*PE9a|KnvZ32X1Kw{TeYs00{r%7mAi>KqNcS*GKGy4 zS{})NeF2QhM}L0SE^YJMi`Lod+PzanQYMi4Pac!rVWlC<#hP*q$_MSqkWnCj;ntv7 zdK#Oqh?G13n9&LXEh}2K5#6Z8G>jR#$(L`NpC1L{uX-ZzkJ9kOtDXHk_99a_!w(Ky z;cQTbxfCg!TMsQCC*|b4e6q=S9%5Wjgc5%E`!(e= zV|BcU7J1&OFne0d@@hnwUaO}fjy6$qD<~tvTs*rXBPH&?t|oFZ@3yrF=c@(cl*-;- zpIp*z5&`v^bB%)s9)Gb{sKd;TUzoAXbFe*Jie$|n_%nPBxYIaYRae(?0azvfo|R2Fvv0;;)eHJ{ zrYl3059qYqIOBIWYQlp`2=;z?EKxe4LDON){=WFr*dcRBXoo<~N|M;S$HKzXwzLBV zNa~CZ$_obW>!$g69J&x$nJF>h+q3)pC~s(& z+zfHbBVafW0)qN%+IQJc7hc$_6X${Ecr)`6 zLgK>s(hJS}(}{?1Vd2AQQLx#ULEjwctFv#8d%PfsNcw+<&~Vs050Zn@+f%1@&P6+M zwA8_B?8T_==EBX9b2VRw$+PLAPqn=oy%~mg(DGT1bd-ZH>d~F+6b0!tV?u0)$_dZpfq+Rb@{`sLgh}J zfUU1=Y3CZjvfkmjOItz6EYqfsuCzO@phLiZ>GsOXlKHfkvY>X#jkLx}m##1&TBau2 zXS){@aA>6y^tk0T1H^vp!f@YT@F6CToPt*iW0|It$Z0eWfj_mKk_4K62;o;kP{PgUmUMQ$FI~+C=uwx`3N3-IJT3*`l!6}6bgvVs9MmWEb@wp&^8Ae)tL8=u%VHnISL_PVkpR}6 z?cE<+GpYrP_Tz=^)8|(fC;LEtg%;^e|8=pP*G~*ivR#oK6vzEdPV*c>y@A2%5<{8O z?PNdTMkhsyWFt2GegU2SgZfJQ{1F%Bq0iUZd&5)=^a9G{OWaoy`00{t^P=?nM3VvM zLucJA&b1qBLR2QW7L&ToZgpmZt)U2Jrw5P(WNeD7o*El=BT?s;h1u1pNMau{=o(k) zBUGW&FCF}+9yV1f^7MWGXTD9a?dGul)M`kFgMpm$&(YIqE~4zjotXa2+5qE$V?Ybx zHt%?tJ;xS4a3(W~+xJ;8zbC2V>f}#4HZ8!>iEss_n;gNjU;Jgx-ex z_M>Nsg@T3JzfI@8YJ4^g4fxDs_INvy=zx*9 z@4H8lAPQSI+Fko6QjcqClqwk;y!1}z!4s%o=XVwLpx&Hsx$E^58Uyybk4fEC7WU28 zyD&};*w?pqvhFv7PkH~AFLD!w*j_OW4RV~fKWATNGvgY@&YVVVY;0|4xF2n9S02v} zHyQXk9+Bh3u;i2o zGl_4}abG2c6w#@(j*5G6nv3+qrO~yu)c|hxw9#@)wU}rw2L}eJxcEvh{h+*$!gBnA z#a)0B(4vrUR_@6`5JTS5WtJgnHQ)nxH~G{es9PB2>H{Ht27*|Iw36Irckb9GDc#Ab zs&+|}meR5)sxX!&fRU_Q%Iax>7cg%qn7(=+;E2?fjZ}9fRT--@sS~p~tOas%n5OAx zLjTD1$NUk#FG&vWoPXy^U0>hbSc=^H=`CZ(`*m)yil#j@-4njQs`&GKhhRQ2 zHYv^cVlu7KFfncF_9Oe*xX#vEX#pAD^IjGGs!$cC$kfkLzyD@S%4=6kb#imMuBK__ zayJ$?pE&~vM%rAKPj#+!iK2u(iJ##2>RwsV(H1>%FrK-jH%iAl@_*xzEkmyg^qbP8 z2YIGM&_Qo0koiD+*R!U#Z9=u>^5&nEw$~(eoG)euzpo4boPMXu5LAoMqkesD={pXp z0{kFN&On|3JOAQ3PIhoNhYNoWp;6okF19Xq4gPmQ6VUdY`oqV0V zxioz&yrKh`+9!5CK|k@k%733`JmDkYLfA(YYxW)|gq<{863nxU>A|IQ4If~jviCv2 zw3F|fzbMbv>96{0xiyK24<5BNFeaQsnu^U1XPVty#c8M6LfYKFzB-~8fZALLjK0mL zqam6mS$$TIK;Zq>dIMKEA@IcmM6=vWwCrI@yH=U-*Kwbi-TCw>b4HvopGWsbE&x*j zPdjOabpCbips%DHE*vx$H&H9@M?0Pemv$CrnYu;rU77++`G3<>kreQpoVRH>DGLq`z9+l*LxQFC;v*O* zf#w4v5H8zGKRW;Ys8VJZL^dBtJ8pAg==?pr55k1&!O2(G ze+}???PqCj0rtXobo|?#GJhTbB(Yt+7wDmM~ z`x@u7rRh_5n+}JTF7+z~O#bV{XfI8{ZC}~>FU0G>z0*-YAaCV9x4f(GEPItdBI&kW z4qu**xT#ry81!V66h2dy_IQ!TmBTt#^>CR`;+h5Q$F3V?J@Y(iHIuskNl#=|6O!hD zr}XPFzN!EE4h9`-K~MsUm-hRQM@}iL@e!ba*N52vS$x~#bJz2bLaTGJa zPdx-RL5~yGz-1J?vuOtL(I52r!pW}6%*cNEL_3zcCO$KEP?d?^&6@k`SaT$G9#kJe z*){FyH^Yycu#d*v(%SM{jgStypSsfyKrV)){k&ej_R-=pL8lY)$T{0KGOWEPDZy?Z zqwnkDsrGCltw)-k@>Iq8-GnBMXmr)(lNDqXHhX@#zOteZ7tW{#$Mq1Lp?$EhK;SNM>^+ z!LnMcz~QxHN0&Oy1o*$&`|hZwwr<~eJc^3IIX0B4!hxeyrPq8mL}^N|K}CvELJtri zcu+Y?lP>*81OyC`UPBd75Rejj5_$_sB%v5WlDiQ&_ug;3_s1RM-Z9?yF6)nsjJ?-h zYp%KGTzk#mnsaVNae)G4QC6Taxg|=s&cXln<%J^`*u~T<4kUjpKr@zv2I!TECK#7n8vm@oAb~Au0W*>13(|WJvDfR9nOg z$RR1|myko4lA0{V(}g_O-Fzm2Pv>o80pQC=FQ`~N`n=y%@&Xv@`3racN|$yoV>_{{+~* zQM1lzUxfbQe1L0V|FxC;%_!j13&0foGsqP0@!PAz+g${t!lkB}Sf66b zt60mz8wJ;;m1h`14wS;t>TKWJ7WlW5CteiiA)N1xDTm}g>^roC~GR7Q}KnaFF*o5;^AHlFu2yflq21Z!04AzgmowO zLY57PN9x>ZD_7bN-1nX4jjrvn%F9PAA~aOjc%bPCLiG{zOz=qMCO@a#aZWdSW;c!+ zxwcj)+4u&vF7tgUlzA#}MP@MAjjSPetZy#Jp2TnanE3e^iB6B0LEvFk@y_+8v=Lz} zwhsGiM7^kt_-_H$0?@HFR1IbHSlUfNlWxs~xKmPTy2&+@89-{Ro@>8b(oUzI=r}K5 zZ(bJEK>eqPJpWRpnrF#Yu;jXyton9*CZLp}Hm1H-jhj(+ZEA2x1?|qv6o05bB@Y-OIag|#rZn^thjZD09# za9v&nK26iLk@_K9wdYJ-%+R%%rymQCnJIr_4y=E6C#ht2*vY{JD8n$j<8cpKs^>?C zHM2g)9886tcbwp@tCd|dac&U-6NCy{v%BkpwOopxzW2`r!ds0pa^0ELWR8wWyUUZblLKh4FeT-1Xz^xrN~iR}4}K@_*%H5HuRxi&x(ueRWypl%k-E6G``V ze4NIGV`)yKCBdXW!@RUFSop7>l;YyRFC2>P^Ss=bWkvPt=(;&LkfH8dknimFsYWvP z(i{MWHN_P$1O=VdHqf7Mh3ZM)sX%7s{UtAQ&apAwHUst^gCs@@;8(vRN4tn8)UTb{ zk2EtENKZ-ttH`M-uQE3&-TWmA7l^&xQqGQg?-SJsW5yT{zA`ObQ#= z;PTNSBdE)~6w6?}$Gt0biQH~V1c_Lvg)Ez_mH-FKz|-a^EPudiN6q&OVI31L7XELM+5s8 zmlHc^U!&h{1)FF1Ij`Frc5SMWYkkLKw~{owQI}GA!!&f(`BjEr!xU>}i$Cgal=7Rc z5YGmrz86ujlF-M!kgDPPr`{h(2HcKe zcrOy*Kh7H`K0@@ZPgb;h%r^h@Ze0X$fz~V~E_V(i%oF*EH*X`Ya^|w5>*|7=$(lxo zeHD0xW%N^x{b=b2dOC%?*^pmwFAQ8T4Mt30EoxvS03h6))dNq@2Zj_j-WjTS$Eu9^ zEdP05mt=4$H94Iw;b5<2X$yZt6_Bv|r|{Fr#4OclfqWdji3a#wac@|#V_duIl!N?l z1$?zE2^v(1qTtHs@(?c74?Z^)*?~sP@)TyIq`V%AJE*Gp z>Gd}sHgmn+`@3)*HH=1;(bv-@(}SrOR1%y7MK38-$eI>EhUSeHEk9weWeTbD(9Dm1 z^|;3r;W0fK^wz~;%j>VmQrmB%-#8)3O!)Nl>`b*|aOo_nn23HU1dVxHgfpQ{|BBPX z-7T4YQxSf1xq}>T{Sb+O)GDgUtC!^MEF&$ zDHnaHt3GN3$hsr@!P*pzqi^@aokp%pXOvzL%-vyH&bZC;1D==DP|dnTdX!3 zvBcwR90v>37E=zU`-=t~()fzgcbJ{F*W#g;=U}iiR^|O=2Si}%)kpG%`;6=gMm)z8 z+EFsb^1_q~ZCnn=pddtkE>m2Gr zpNo9r(feXCB`BQQ{GxiK0LBAvjojzycuI>f`^3z*G{dJSr!#ug%^O#ClLq_3T>{1{+&hsk+^X&2! z;yGs6>t)nbbU%xWa?ecC4k>7A$ez$Xe;Bt)Jv*;7`E`C>!a?)qjl4-7%}IZ zgGvf7F(>B_V84@<_!Vc1nq3TNpA_ja73&I$yl=(CMSW5CD~}^3=+s$i{zjt=b`4Db zCZjWFElgf{iYLjkrVl>C(Z7k1bWSDecf9^3<51734+~{U89{aDU3-#vx%tKqag!`* zcZdK+D^XnCoqp%RgUk~yZDee8TBZN;Sl)fRlMCu2=0>cQjm1keXzHbJd6UD@0tMFV zabzMXekk$9+NT5=b&MDL0@J0m%I`y6E`{454H*f2N_j^Q>Koj0cCTgP-|Beo4?&Dx zmU$7JBP_5)|6M+fYH>T9CJn^Z^My@K?;H2`YZtc6bZVL_62?&qy2F4En9tt zP70(l_I(4Ku*si3FW=Cd7n7;ByK&dhsHNKsssexc!27p&NyeAWrLG`iaAmpM%H=;i zj<*3h%YckJ{`Vn-OFyCk56$Q%3t7J#8D_jOb^4hb)K$?HrKp76*YNGA-O-4i#LFeW z!*$(D7qbb^R{}j- z-Kr|9z7?AZqR0uJ1W?8Ee@1Vhz|0y{Bju%^+pVn%r!#=i&z<723XhZi%mre(cGQYW zY^*mD$efc>#A`-Kgi<}t*IhGPuUdHn#$;_peQuRn+kc{d`|`hf@Z#1e{uP5R_vro? zjFjD*w7p5&k^#_vebu~e6ieI10)8|B{Oqk;+no5Xb90Y_d*bu2muO*2YWH-0TX*+# zewz<_0vx>%cKqog`+V~Z57gl{K5_lH z(mt)J(!LJ)sVKE61giUT+|9z&TT_arkInQi7f(HneQ+`Uy3yO8!+-wsz^S1YY0pn5 zU2$i1j=br<%n0c0nwVS?640EaG_H3N0He0)=PhgbN4fvg-??~X_icG4ZIyq#4%zbI z+bU;u8+HxnU&O|LTmpU$9S8CZZI`Eqm3RN{H4AWJj|qEB*j9)=N!XKwJxTcQeLIK+ z1~vQ>7O?jM0)*_pg$b`!;cz(CBgbJURo}g7Mep!Fj)wj-+&8gB!%io+Z@t!@x z5-t4Jb9#Q+p}=Ij+S#{!Wq66Ei-#dg(Dy%wB;c+ zIOkN@%QCg}QDQ|twrIQWhAWTDEyEJIVXCwla-30)FD3F4umgk{cTBifTA`w*22Cq! zs{G-O7c->~{&=L}N@}`mceikgmH9h7g+y8nNM+__>H-@;znf*hb01{-!V4{B3R;Q- zNZbcUM=@%1Fh)&H4IFuQXZ8);a!j4&`8u@<6h_@D)FK_c0)rhL0Umb<hhnJ1d!q(JG)wLL)3O{ zU{(2TeE0AF;Qm(k6$W$HCoMVo!ggm3`}lcgTd!3s1G4n<8LqZ{VTiPC+Qu6qIlQLM z*`%F0*YNYOAlbAnpcCA+{gnH7YiQN-E9tI?U+(>Jlp}P}9Idp&C-;W!Tl#>AT-gW> z_IaVf_mEdJ_(x1q4+RgE#eYDciLr+(TMLs+RrSjsY_%rUNao5==#zVjwcR!+iJL z1FKy)#^0^?6EM_=XCk$%aFL68H5z8yHA42w3bmSqRy|fX6AKO5e{a&od$1#2PuU?g z(qV@Na>3)HgSCv!_~mN{t!DZ+HaZuFQd}z>)pnZsezQOeiUk4Ww(6Y# z$bHJU!f>v@OT&EKQ!=r;ErInFytnG5K0a#3HP!y~SD?c}yy^Pd25M2y(G9<=z2EXo zrpmi;0Z6_E6T8aG{(J{Q4wnyOYy^3v1l_tj2NzdSFRXvK?t?)0VmmvfA~MrF;miR) zkkS)?y>W$>SGABm)CnXu%MdDGQBfU=yRyTQ;A98naE8^pLE@GYi+TM};)eZyS!(;j z7&dsJCE2CpXSl|Dm1?KCVPVJ~JY;o5V!LZuK?m|XtaDia<}Os8ztdrr_8o~Lw`#$H zRzh4{WX3^$4aS^b0E!|b%euy{=E}ifN>Kydj4RuZzxD(s6J3EFU5wH~QpbTAR)3Y> z;!pyw3BWF{4iD=W4CgDQMg|~F(VbuVcZk*v!(e)xlt%=~+#I2-zv@f+;CIT${Dgsd z4MkZ72Uy{DR|BDYtR%(lp7xC3Ek5ia0eei?)`vYw*pq}kN!Wu(K_UOI;Kc1b=o|kD z3;1s_g12RS58>Y8!~dWew8Q4TDFYbs{{<5w?b-}>03Z;^bLrntjRwqvhynXvyRDty zvCE79!%eaA9YNTWwJk>cPbr*p{L{6$jJoeFoVkg_GD9sjelT+aR?nVXW!<#(T*{MC zXBIee!z@=9Q|`0ZtddyN8Zc|2Ri@rzu18!(GiYL>MU9txgE+|A=&olsr|z1`pnF&Q z)o401B|g)fZ2EAxgboTb3WdN6tWvG4)r+YgkKe37c-s3^5)?Xk5tQNX%rw-h8^(VM zMgE`yhRuJ?Yh$$_%baCw37el%Z35Sv4ZzjvYF-Rdfl`3IhsVNvvq2iTY#9c&;6D{o zM5nhb4&lsqAO+CjOggtf2X8%<-eSq#SZB{$CBb3cUm)KX5tV)cGYc}An9XzvhHLYs zTKXiLwPssetr0LcH&W!t!quzPuQ+#G`_Xx1NU82=ev3-dlGw087C|_8PJ9ZZs_KX! z)(85}^tZ^^R<7kHZR`L8ptERGO(T?-ZS{vc&&@Jw%%H};(m``o1xQ0M@FC&>Jf*s9 zj=e;;?dMPES@cT6zhhZz`UkR8HI}o*c@laO=Ezw71bhOUHkNQD4`r>aWV@>YVvUac z?)_cqDi-bIs}g1eIBQV?&2`(~X(q;${{1-|#?5T3vsK1;W^FV9xu1i(hkIru&^$U8 z!G1GwV@G$I8E+V?2$@YrcFi?LkYDrV3mkukJSb~DvQ4sPBN@^h9brngJE9gx1H}7ZhEeE^?uH+qm~gg z2n#lJG7KHLMz?hJc;hwapmbBXc9^ti4G-SIBtanE5Una(d?3B7(`$|gm1ZLiwq~>} z*hQy5O7di8^Hyg|O5wTWH6^R&-P{t2hpLX7xGZ^va@sOmTly%q!oIf5<;*|^ogY(- zzSaRVjO}s%eol#KqGUDy#RO4A+F61?zxWb-$A6#M$ga1NuwORo$_yC%oKO<&+djS+ zp2QHIGb^0whQq+66htyUvcXrL)B&Mut6Cnfe2>5@ts^C&{5)mFMz%2?OkZQo2TX~U~{Y!rn#XRpU4Nk=2b7I@ZcylVwp zo#yOZ`#t7Tp_=Uaj2hK^pDuQXOgVUkKa^Eh?_7@kKEJCepup#3=Z3o*W-L~xp=z{x zo##5tR++7h0j6ysouu6E3qz_(OG+WWwP!ywy}+*oO)wZ=#Hy)z3aA8ZUIXLC=A-gc zrKE$tA%9FUfQ0Ri{`ffSpg=Z)-Xam&8@&0VFT1o$Be>eMuzuz0`kXMjE~rFRNF#Wf zIhd~IpB3NOZ93R4t~iEsw2D?TEl9-*sjfXqP1mH~@flvU$|QgOn+NN|LEOsi^VEb) zZXMc};qJ07P2a4D!g^1-4bR2l+Rcql!&6;pYRmWnQz67#3oURE$&xN=YN~J2hOICK zZ%#!Hq6-sx{g+-Otfv*GtHE<1Thfi(rCaw8hM;@AC#iRaWQdqvCa4D$M?m28_IaFe zA!c)mi0oBi6YD)Z*YH)toVGy@*@~9%3A8jp&1dp6I*3MOuda7V)zWCmGAweH2nxo| z8tFA+=U3;iKv+G|42Cr}Xt}rS$|JDHvW~dgdLc25+3DD&*wHDhfpFbH>p>u~E66ce zL6YsLI)W9G(3ibV&F-KuJ|Je)2=EnfFg?bro|)NIh^{MwB!XdqMW*}^MhVnrgN`&! z6b4sVGd(7oraF=k-g9{uSF;mr5o`4tI0_20T0$m|_2$iF4+orCMKjq@=6Gii`XW;Y z!NMdE5Dqh&^{mhmXDGp3LMJy`T0w`sxXzk}YPK|6?lOq`I!3PEm|Q{*pcNrl?loh9 z3st;@s|5A}d87bA8yTP$0jCGT7LXL@qi(j0#tQa4+O3ut&J1S6(8N=qY|?sgWdIQ6 zpPDMic{7oBmX}9HN~*g|ORb`?ZiNYEPSpn^*MBuLdG3s^{l0jQJk*2i2utMYF7s6? zWQ`+&8NgdX3REu(20q16!%y5Dcd*|OL>BkO@pnpmG%wB) zlK#H$@eYs6k}aLfhf~sJ!qrAGov6Zy9q*s-;tT)yDase_w*2+YaxniW22x+Iar&qh z99djp2GYz)P9D)k4ZD%r@^JfNx5rxdoz= zf+CZ?Ry$Q({}kIp)EgMRVxd1W^HBQs7&l3J(&mVCSgA!``2HlUbZUT7XpV-HTinAV zNv`sjvOoVc%jeqlsTd{d<4!b*bNlPipYFE7Ll?6g)xOm}@l$(Eu6oV=~Q zlv_GFL=xuoj{G~ky1?x&Y5u`U663M_V0{L!v+v%;qg*zm1v+yaE1{G4Ry_R6*RQX3 zG5!YK*i$)OWBxQP1N|60DCb7;2hk24s+h&&*aPA_ZGJgnbY|SV*6G$EuMKJ2M4;BK z;#$#g-Qxa;Q#;2nA!i=6|0Liw*BLHt{<^lxJ5L;>n_6@}PEt8#*X2sCHU5BdR?LCV z&V-qcYuC*7HtfJN(POtD90xakYLMrbP_X-t_x2x}?Mlt8 zg;aU|2GT7lGL$p*-5qtv1y1+3*`2o_Vb8<<4^M(_9zqh{a`SM6EGR-A1Np0dl#ny$ z|9%_3GW-#W_2c>lvA@lLR}cQLmrI87vpV@NH_2c0C!0?#+c9o8o%m#JyD=8C*f|*a zk=DK@JeF{Lhrsb`P{=)BOEaHMwP!ExlumYTw%gXKRjcU1g+L&#saw~t7!%vjCkrc? zO)$%XLDvEv*!j8#_UB_ZJ;c2RlT00P=k+}EFcZm{2sgW1ZVrE%EvePkNId<*MJT+$ z9KG%Wsbq7Icr-j#S`W}oWZZ1xgz#ZxBMwDV#oZmCHrKwW;l-KOKIp8tsTfrvKZSPD zs`Vza=SGkAq5T+Uob*e{m(Lpy^c+TJUMT$jU{*uqQuxS#yLho8*u;-LNiG5VuYIc- zjxm^U^<6{k{bHzjKb2XE|cPL4<9a{czG5df6%1c3Qag^h# z`I8JNxh$sc}{?;m=f*qIW?N-%D&c6T?1ZGF8lO4ai$t~NeS@#G94 zo<30tXFc`0i(Z88L^A}clx2O0$BabCILXNrY|C#axS~8B4nC=O``wD4(f=H!k~>Pv z#HZ9ewh&dp<9e)Z2R)g=qicffrk83AY|l*i)p@R+u3ugKNub2qtTSqJ!^G3MHoo9%!%Lv*A#P$kv&hI z6b>Q`tyYa~7*Cm#62~Nt@0{C#G(~?_cEB87h6C{blb*|dy}Mqvi4zweeSe<)tl3udV8j9ozvvvm(`k#z${rc5x#@)5rlEsRB~(A9mc2d3Dd>;G01XydzMMj$LiR{ z`Vnh-Jt@~RB|6R4X!+U63FZrFVY(fe;QqeIeWhw{(1Z*bQJ7dO8RMAC{B6 ze;i|VaV&MzO!D^hiNIHJhUdexD9)QH3idLBW3>VDcRVM&n>lY<5snmaQq98HZ412l zs;1MYG%`}n`6BHfwjwz!r=Gn?5MGK%GT*e!%AQM~*_{uvG@#Y*Xb-*S=JkAUt%{;+ z421DEFyB~S6|2my$n}+HWfseEuIUtR;R{`w$Ha_$YB93Es`6c?NkC7_jIcc|)_TcL z3hbhDNAXMe&40{)?+%(#LmHHum=Fqk+9Fk>G`}T}ElF9`mzT4(Z|EG7;xUdm+BWFW zq7P(RPqX=F8LTYQLpCp44Li)=va)c z|M?x^Xuyd#G)|i$78?B|MZAnwmwlf35O5~KLh$0Zzr&W&Vj43(tTZlt?Nz0|vR$1V zP*}j_BFv5bm!e=Y@A4Uop+(z^X{35|wh|u8Z0(}9k5WG5mHVhSc$APUy4S@o54hk* zE6F-OHA+}r?UauLrzp0zHK_Y56BEVPPTm+kgXCy;k<3%~klm%pCh63@%V>&JJN}zX z9~yrCj793YBHIOei`+icU`6U=ThfQbON4?R*b={goDsH7)_!ljyqryOT+d$q_$mK8 zRhCP?-^C({y;KyH(dZQDy38uCF2){rknHd;_N4`#@i!234XX1K#a#M|4RCT^JGHR8 zN*G?_;C3VF+K?u$vzsLbW*@eQoIC1`@pKxD;vH=+4R1X{rMZFa{a4D-HH)y>`Vm7@ zX5{4cn_f)fxv`{#bWK+N>cfDwk@v+pvponlt1Hf@+iXBSopW~;y7-fT?rh!rPFtKM zkb$sB-dm_6Xu5;P1W_OlwbycM=^2nwATyGv8*=wm?WcolRFyW1R8t?nWYyRQ-JeiO z9VtFu#3}w5A$NI<4Nl;&jB@F&QsO%(Q>tEZfAme^PB)+nzcn=a49M^=7{+9n48$v} zp)Y+ig)`8T6S_A3jS}cUWX@)Xb0X>s!6cJ8A7gU^Zq?+y@R&u;`vr{Kw8h0?IzLHS z_pKJdk0=$sz8yb(6vRbN9mF5%%ktGRbv@J)Hqu_)=Vf+XqJreIRD1ub{;*C$Re{|EzEv>!M(6RQ z=s889?;neY{M?Z2rsM%2i`BQ7Yp&@cqqETl0-xQ}(BJj#d-Bb*?hQt>9h~7EJ=LKM zzMP7ZUGjAGL+ldU{fi3&I?Or3=NF|SvC#N_{8R=L7{q*u?qJ5!6o~4-~UEhpRP9LPq$!#NO!ZkX4Q13xS)KdS zo=wX$8Wrz~h#;+whgWC(F$ zNL+*h4Z)6XiOTzp4OY3_ilx(z@BJ89BzvuSWWZ}mZ4SpzT5xhviHpH#%sp8-jJRpm zmob^6k<6cwHh$2XAP(y}&nff0QxTt#!UQVx|b#b$q0aUbIwg=C29Rs<|Ut z>=~D-hJRa<_q`g}e#SV7UZ#Kfl;u>3^07sfySTbgVJg`sD#xE+9yBvX*FSpD{W)b; zFFRUsOxe;LV)N?PtE+I4xh_RL>k$as_%74v%y2Y#t;#;vH*BFgI=_vHZ)by*%G53a8zh8zxwrS1gST?8gbB1-?7@6Q}vT%UDhXsa;2thLx0(6(m9^ zr->RJEa|VoUZecfu#!5GB3C|2smAYud3mpPtTqrx`@+9R?VU(%0=0enWZ#trlEt;^ zbnaRPuYb*vY`7#ZPt|)oA|Ry^@<_?_acldI|762aS$qHRf>5*AK{{=YBjgbfJo2Az z?u&Zz>Ldj` ze_nVn1gvj4GS(7qhr}o~Wru5gHvF4}EsIWcbqylG$M-TjSG@kQUNB&W37wv=@tkS@ z`t8nXA#M=NsVl8iVJJNo*mh#N{*Pm>qOfTgxw95V8F+@JPn3YZ<_I3;6w%;tl; zWb3aWmNGLaNoEz|?YZM|BrBq)6C!ef{+lywoieuuiO@QA{d`OnZ8kT%^YDFrP^D4x zwQJ309O$D*kFM~nyl~rTUv9|zfO4y7y*o*;c8FNHy9o-h(%F34{R`qvAu-uvU<09l|$ Ag#Z8m literal 0 HcmV?d00001 diff --git a/docs/screenshots/playground.png b/docs/screenshots/playground.png new file mode 100644 index 0000000000000000000000000000000000000000..0d3bdd053a599d415134c0181e147af019af0077 GIT binary patch literal 180308 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üV%5>O!W+B5;E@95f2LK%`XD?Z635t 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 BHJAVZ literal 0 HcmV?d00001 diff --git a/docs/screenshots/turnstile.png b/docs/screenshots/turnstile.png new file mode 100644 index 0000000000000000000000000000000000000000..e65c715afe3fba4b1f9670ec7376d24039055601 GIT binary patch literal 272742 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

VOUA{D^RZjzg;7i?7{$Ntph1jjcxk_ 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�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 literal 0 HcmV?d00001 diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..f7b9101 --- /dev/null +++ b/go.mod @@ -0,0 +1,26 @@ +module github.com/nyoungo/dsfree2api + +go 1.27.0 + +require ( + github.com/BurntSushi/toml v1.6.0 + github.com/bogdanfinn/fhttp v0.6.9 + github.com/bogdanfinn/tls-client v1.16.0 + golang.org/x/net v0.48.0 +) + +require ( + github.com/andybalholm/brotli v1.2.0 // indirect + github.com/bdandy/go-errors v1.2.2 // indirect + github.com/bdandy/go-socks4 v1.2.3 // indirect + github.com/bogdanfinn/quic-go-utls v1.0.10-utls // indirect + github.com/bogdanfinn/utls v1.7.8-barnius // indirect + github.com/bogdanfinn/websocket v1.5.6-barnius // indirect + github.com/cloudflare/circl v1.6.2 // indirect + github.com/klauspost/compress v1.18.2 // indirect + github.com/quic-go/qpack v0.6.0 // indirect + github.com/tam7t/hpkp v0.0.0-20160821193359-2b70b4024ed5 // indirect + golang.org/x/crypto v0.46.0 // indirect + golang.org/x/sys v0.39.0 // indirect + golang.org/x/text v0.32.0 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..bb1959c --- /dev/null +++ b/go.sum @@ -0,0 +1,52 @@ +github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk= +github.com/BurntSushi/toml v1.6.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= +github.com/andybalholm/brotli v1.2.0 h1:ukwgCxwYrmACq68yiUqwIWnGY0cTPox/M94sVwToPjQ= +github.com/andybalholm/brotli v1.2.0/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= +github.com/bdandy/go-errors v1.2.2 h1:WdFv/oukjTJCLa79UfkGmwX7ZxONAihKu4V0mLIs11Q= +github.com/bdandy/go-errors v1.2.2/go.mod h1:NkYHl4Fey9oRRdbB1CoC6e84tuqQHiqrOcZpqFEkBxM= +github.com/bdandy/go-socks4 v1.2.3 h1:Q6Y2heY1GRjCtHbmlKfnwrKVU/k81LS8mRGLRlmDlic= +github.com/bdandy/go-socks4 v1.2.3/go.mod h1:98kiVFgpdogR8aIGLWLvjDVZ8XcKPsSI/ypGrO+bqHI= +github.com/bogdanfinn/fhttp v0.6.9 h1:F9MsWR1K6JMRlXN4Q/MfjYmptr29nCdycQo+OPBG5U0= +github.com/bogdanfinn/fhttp v0.6.9/go.mod h1:7phoj3f/q54WuiTnCTlAhEoaVcdlruKkSzCSD47LzHk= +github.com/bogdanfinn/quic-go-utls v1.0.10-utls h1:oZN+J3OKMmWaVbI/sx4ULvHiAXbWJKVcvEFW4fkybMU= +github.com/bogdanfinn/quic-go-utls v1.0.10-utls/go.mod h1:bBLJ2Vy68Q7y6VfbG9czd825rTcQua7n+y12RM9Q588= +github.com/bogdanfinn/tls-client v1.16.0 h1:km3YLI6CMRLZnfrC+hGStePPryIicd3hoxFQvHB1itY= +github.com/bogdanfinn/tls-client v1.16.0/go.mod h1:TxbiXlpZhNN5xmxzsr3KhNAeqoEEPJafwgBbyp26Phc= +github.com/bogdanfinn/utls v1.7.8-barnius h1:wRT83mP4hmuMM1/lIpLKKhzaEuyEKjux7VSj7XHFXdg= +github.com/bogdanfinn/utls v1.7.8-barnius/go.mod h1:o5v09jf+9ayMEfcP+8sssNdSMm278cyhBV25H8jb5Lw= +github.com/bogdanfinn/websocket v1.5.6-barnius h1:QpdWVEZ9rKtcT7C2pU19uE2KQw2XevuKTDTzLxfDi/I= +github.com/bogdanfinn/websocket v1.5.6-barnius/go.mod h1:41/rXLDWpqJ5A4gOKSY/z4NLbW/hHZHneRcYM0kbpxA= +github.com/cloudflare/circl v1.6.2 h1:hL7VBpHHKzrV5WTfHCaBsgx/HGbBYlgrwvNXEVDYYsQ= +github.com/cloudflare/circl v1.6.2/go.mod h1:2eXP6Qfat4O/Yhh8BznvKnJ+uzEoTQ6jVKJRn81BiS4= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/klauspost/compress v1.18.2 h1:iiPHWW0YrcFgpBYhsA6D1+fqHssJscY/Tm/y2Uqnapk= +github.com/klauspost/compress v1.18.2/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/quic-go/qpack v0.6.0 h1:g7W+BMYynC1LbYLSqRt8PBg5Tgwxn214ZZR34VIOjz8= +github.com/quic-go/qpack v0.6.0/go.mod h1:lUpLKChi8njB4ty2bFLX2x4gzDqXwUpaO1DP9qMDZII= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +github.com/tam7t/hpkp v0.0.0-20160821193359-2b70b4024ed5 h1:YqAladjX7xpA6BM04leXMWAEjS0mTZ5kUU9KRBriQJc= +github.com/tam7t/hpkp v0.0.0-20160821193359-2b70b4024ed5/go.mod h1:2JjD2zLQYH5HO74y5+aE3remJQvl6q4Sn6aWA2wD1Ng= +github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= +github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= +go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko= +go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o= +golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU= +golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0= +golang.org/x/net v0.0.0-20211104170005-ce137452f963/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU= +golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= +golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= +golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/internal/admin/actions.go b/internal/admin/actions.go new file mode 100644 index 0000000..0369aa5 --- /dev/null +++ b/internal/admin/actions.go @@ -0,0 +1,596 @@ +package admin + +import ( + "bytes" + "context" + "crypto/rand" + "encoding/hex" + "encoding/json" + "fmt" + "io" + "net/http" + "strings" + "time" + + "github.com/nyoungo/dsfree2api/internal/config" + "github.com/nyoungo/dsfree2api/internal/httpx" + "github.com/nyoungo/dsfree2api/internal/openai" + "github.com/nyoungo/dsfree2api/internal/upstream" +) + +func (s *Server) handleActions(w http.ResponseWriter, r *http.Request) { + body, err := readBody(r, 1<<20) + if err != nil { + fail(w, err.Error()) + return + } + var req struct { + Action string `json:"action"` + } + if err := json.Unmarshal(body, &req); err != nil || req.Action == "" { + fail(w, "action is required") + return + } + + switch req.Action { + case "create_key": + key := "sk-" + randomToken(24) + s.cfg.Lock() + s.cfg.Security.APIKeys = append(s.cfg.Security.APIKeys, key) + s.cfg.Unlock() + s.save(w) + case "delete_key": + var p struct { + Key string `json:"key"` + } + _ = json.Unmarshal(body, &p) + s.cfg.Lock() + out := s.cfg.Security.APIKeys[:0] + for _, k := range s.cfg.Security.APIKeys { + if k != p.Key { + out = append(out, k) + } + } + s.cfg.Security.APIKeys = out + s.cfg.Unlock() + s.save(w) + + case "toggle_model", "toggle_site": + var p struct { + ID string `json:"id"` + Enabled bool `json:"enabled"` + } + _ = json.Unmarshal(body, &p) + s.cfg.Lock() + var e error + if req.Action == "toggle_model" { + if m, ok := s.cfg.Models[p.ID]; ok { + m.Enabled = p.Enabled + } else { + e = fmt.Errorf("model %q not found", p.ID) + } + } else { + if st, ok := s.cfg.Sites[p.ID]; ok { + st.Enabled = p.Enabled + } else { + e = fmt.Errorf("site %q not found", p.ID) + } + } + s.cfg.Unlock() + if e != nil { + fail(w, e.Error()) + return + } + s.save(w) + + case "update_model": + var p struct { + ID string `json:"id"` + Label string `json:"label"` + PagePath string `json:"page_path"` + BotID int `json:"bot_id"` + PostID int `json:"post_id"` + } + _ = json.Unmarshal(body, &p) + s.cfg.Lock() + m, ok := s.cfg.Models[p.ID] + if ok { + if p.Label != "" { + m.Label = p.Label + } + if p.PagePath != "" { + m.PagePath = p.PagePath + } + m.BotID, m.PostID = p.BotID, p.PostID + } + s.cfg.Unlock() + if !ok { + fail(w, "model not found") + return + } + s.up.InvalidateAll() + s.save(w) + + case "update_site": + var p struct { + Code string `json:"code"` + BaseURL string `json:"base_url"` + AJAXURL string `json:"ajax_url"` + Language string `json:"language"` + SiteKey string `json:"sitekey"` + } + _ = json.Unmarshal(body, &p) + s.cfg.Lock() + st, ok := s.cfg.Sites[p.Code] + if ok { + if p.BaseURL != "" { + st.BaseURL = strings.TrimRight(p.BaseURL, "/") + if p.AJAXURL == "" { + st.AJAXURL = st.BaseURL + "/wp-admin/admin-ajax.php" + } + } + if p.AJAXURL != "" { + st.AJAXURL = p.AJAXURL + } + if p.Language != "" { + st.Language = p.Language + } + if p.SiteKey != "" { + st.SiteKey = p.SiteKey + } + } + s.cfg.Unlock() + if !ok { + fail(w, "site not found") + return + } + s.up.InvalidateAll() + s.save(w) + + case "set_primary": + var p struct { + URL string `json:"url"` + } + _ = json.Unmarshal(body, &p) + s.cfg.Lock() + s.cfg.Proxy.URL = strings.TrimSpace(p.URL) + s.cfg.Unlock() + s.save(w) + + case "add_fallback": + var p struct { + URL string `json:"url"` + } + _ = json.Unmarshal(body, &p) + p.URL = strings.TrimSpace(p.URL) + if p.URL == "" { + fail(w, "url is required") + return + } + s.cfg.Lock() + for _, u := range s.cfg.Proxy.FallbackURLs { + if u == p.URL { + s.cfg.Unlock() + fail(w, "fallback already exists") + return + } + } + s.cfg.Proxy.FallbackURLs = append(s.cfg.Proxy.FallbackURLs, p.URL) + s.cfg.Unlock() + s.save(w) + + case "remove_fallback": + var p struct { + URL string `json:"url"` + } + _ = json.Unmarshal(body, &p) + s.cfg.Lock() + out := s.cfg.Proxy.FallbackURLs[:0] + for _, u := range s.cfg.Proxy.FallbackURLs { + if u != p.URL { + out = append(out, u) + } + } + s.cfg.Proxy.FallbackURLs = out + s.cfg.Unlock() + s.save(w) + + case "set_limits": + var p struct { + SlowStart float64 `json:"slow_start"` + MaxConcurrent int `json:"max_concurrent"` + RatePerMinute float64 `json:"rate_per_minute"` + CrossSite *bool `json:"cross_site_failover"` + AutoRefresh *bool `json:"auto_refresh"` + RefreshRetries *int `json:"refresh_retries"` + } + _ = json.Unmarshal(body, &p) + s.cfg.Lock() + if p.SlowStart >= 0 { + s.cfg.Proxy.SlowStartSeconds = p.SlowStart + } + s.cfg.Limits.MaxConcurrentPerSite = p.MaxConcurrent + s.cfg.Limits.RatePerMinute = p.RatePerMinute + if p.CrossSite != nil { + s.cfg.Upstream.CrossSiteFailover = *p.CrossSite + } + if p.AutoRefresh != nil { + s.cfg.Upstream.AutoRefresh = *p.AutoRefresh + } + if p.RefreshRetries != nil { + s.cfg.Upstream.RefreshRetries = *p.RefreshRetries + } + s.cfg.Unlock() + s.save(w) + + case "set_turnstile": + var p struct { + Enabled bool `json:"enabled"` + Provider *string `json:"provider"` + APIURL string `json:"api_url"` + APIKey string `json:"api_key"` + SiteKey string `json:"sitekey"` + Challenge string `json:"challenge_action"` + Legacy string `json:"ts_action"` + CookieTT int `json:"cookie_ttl_seconds"` + + BrowserPath *string `json:"browser_path"` + BrowserHeadless *bool `json:"browser_headless"` + BrowserUserDataDir *string `json:"browser_user_data_dir"` + BrowserTimezone *string `json:"browser_timezone"` + BrowserLocale *string `json:"browser_locale"` + } + _ = json.Unmarshal(body, &p) + // Build the candidate config first: a rejected save must not leave + // half-applied fields behind in memory. + s.cfg.Lock() + tc := s.cfg.Turnstile + if p.Provider != nil { + tc.Provider = strings.ToLower(strings.TrimSpace(*p.Provider)) + } + if p.BrowserPath != nil { + tc.BrowserPath = strings.TrimSpace(*p.BrowserPath) + } + if p.BrowserHeadless != nil { + tc.BrowserHeadless = *p.BrowserHeadless + } + if p.BrowserUserDataDir != nil { + tc.BrowserUserDataDir = strings.TrimSpace(*p.BrowserUserDataDir) + } + if p.BrowserTimezone != nil { + tc.BrowserTimezone = strings.TrimSpace(*p.BrowserTimezone) + } + if p.BrowserLocale != nil { + tc.BrowserLocale = strings.TrimSpace(*p.BrowserLocale) + } + if strings.TrimSpace(p.APIURL) != "" { + tc.APIURL = strings.TrimSpace(p.APIURL) + } + if p.APIKey != "" { + tc.APIKey = p.APIKey + } + if p.SiteKey != "" { + tc.SiteKey = p.SiteKey + } + if act := firstNonEmpty(p.Challenge, p.Legacy); act != "" { + tc.Action = act + } + if p.CookieTT > 0 { + tc.CookieTTLSeconds = p.CookieTT + } + tc.Enabled = p.Enabled + if tc.Enabled { + // provider-specific requirements mirror config.Validate() + switch tc.ProviderValue() { + case config.ProviderAPI: + if strings.TrimSpace(tc.APIURL) == "" { + s.cfg.Unlock() + fail(w, "turnstile.api_url is empty — enter your solver endpoint, or switch provider to browser/manual") + return + } + case config.ProviderBrowser: + if tc.BrowserPath == "" { + s.cfg.Unlock() + fail(w, "turnstile.browser_path is empty — point it at Chrome/Edge, or switch provider") + return + } + case config.ProviderManual: + default: + prov := tc.Provider + s.cfg.Unlock() + fail(w, fmt.Sprintf("unknown provider %q (api|browser|manual)", prov)) + return + } + } + s.cfg.Turnstile = tc + s.cfg.Unlock() + s.ts.SetConfig(tc) + s.save(w) + + case "refresh_cookies": + var p struct { + Site string `json:"site"` + } + _ = json.Unmarshal(body, &p) + if !s.ts.Enabled() { + fail(w, "turnstile solver is disabled — enable it first, or import cookies manually") + return + } + if s.ts.Config().ProviderValue() == config.ProviderManual { + fail(w, `provider is "manual" — re-import cookies below instead of forcing a refresh`) + return + } + for _, code := range s.siteCodes(p.Site) { + s.ts.Invalidate(code) + } + writeJSON(w, http.StatusOK, map[string]any{"ok": true}) + + case "clear_cookies": + var p struct { + Site string `json:"site"` + } + _ = json.Unmarshal(body, &p) + for _, code := range s.siteCodes(p.Site) { + s.ts.Invalidate(code) + } + writeJSON(w, http.StatusOK, map[string]any{"ok": true}) + + case "import_cookies": + var p struct { + Site string `json:"site"` + Cookies string `json:"cookies"` + } + _ = json.Unmarshal(body, &p) + s.cfg.RLock() + site, ok := s.cfg.Sites[p.Site] + proxy := s.cfg.Proxy.URL + s.cfg.RUnlock() + if !ok || site == nil { + fail(w, "unknown site: "+p.Site) + return + } + exp, n, err := s.ts.ImportCookies(site.Code, p.Cookies, proxy) + if err != nil { + fail(w, err.Error()) + return + } + s.log.Info("turnstile cookies imported", "site", site.Code, "count", n, "expires_at", exp) + writeJSON(w, http.StatusOK, map[string]any{ + "ok": true, "site": site.Code, "cookie_count": n, "expires_at": exp.Unix(), + }) + + case "invalidate": + s.up.InvalidateAll() + writeJSON(w, http.StatusOK, map[string]any{"ok": true}) + + case "reset_metrics": + s.met.Reset() + writeJSON(w, http.StatusOK, map[string]any{"ok": true}) + + case "test_proxy": + var p struct { + URL string `json:"url"` + } + _ = json.Unmarshal(body, &p) + result := s.testProxy(p.URL) + writeJSON(w, http.StatusOK, result) + + case "probe_site": + var p struct { + Site string `json:"site"` + } + _ = json.Unmarshal(body, &p) + writeJSON(w, http.StatusOK, s.probeSite(p.Site)) + + default: + fail(w, "unknown action: "+req.Action) + } +} + +func (s *Server) save(w http.ResponseWriter) { + if err := s.cfg.Save(); err != nil { + fail(w, err.Error()) + return + } + writeJSON(w, http.StatusOK, map[string]any{"ok": true}) +} + +func (s *Server) testProxy(url string) map[string]any { + url = strings.TrimSpace(url) + target := "https://deepseek.fr/" + start := time.Now() + cli, err := httpx.StdClient(url, 20*time.Second) + if err != nil { + return map[string]any{"ok": false, "error": err.Error()} + } + req, _ := http.NewRequest(http.MethodGet, target, nil) + req.Header.Set("User-Agent", httpx.DefaultUserAgent) + resp, err := cli.Do(req) + if err != nil { + return map[string]any{"ok": false, "error": err.Error(), "ms": time.Since(start).Milliseconds()} + } + defer resp.Body.Close() + io.Copy(io.Discard, io.LimitReader(resp.Body, 4096)) + return map[string]any{"ok": resp.StatusCode < 400, "status": resp.StatusCode, "ms": time.Since(start).Milliseconds()} +} + +func (s *Server) probeSite(code string) map[string]any { + s.cfg.RLock() + st, ok := s.cfg.Sites[code] + proxy := s.cfg.Proxy.URL + var site config.Site + if ok { + site = *st + } + s.cfg.RUnlock() + if !ok { + return map[string]any{"ok": false, "error": "site not found"} + } + + start := time.Now() + sess, err := httpx.NewSession(httpx.Options{ProxyURL: proxy, Timeout: 20 * time.Second}) + if err != nil { + return map[string]any{"ok": false, "error": err.Error()} + } + defer sess.Close() + resp, err := sess.Do(nil, httpx.Request{ + Method: "GET", URL: site.BaseURL + "/", + Header: map[string]string{ + "User-Agent": httpx.DefaultUserAgent, + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", + "Accept-Language": site.Language, + }, + Timeout: 20 * time.Second, + }) + if err != nil { + return map[string]any{"ok": false, "error": err.Error(), "ms": time.Since(start).Milliseconds()} + } + hasContainer := bytes.Contains(resp.Body, []byte("aipkit_chat_container")) + return map[string]any{ + "ok": resp.Status < 400, "status": resp.Status, + "ms": time.Since(start).Milliseconds(), "chat_container": hasContainer, + "bytes": len(resp.Body), + } +} + +// ── playground ─────────────────────────────────────────────────── + +func (s *Server) handlePlayground(w http.ResponseWriter, r *http.Request) { + body, err := readBody(r, 4<<20) + if err != nil { + fail(w, err.Error()) + return + } + var req struct { + Model string `json:"model"` + Messages []openai.ChatMessage `json:"messages"` + Stream bool `json:"stream"` + Tools []openai.ToolDef `json:"tools"` + } + if err := json.Unmarshal(body, &req); err != nil { + fail(w, "invalid request: "+err.Error()) + return + } + if req.Model == "" || len(req.Messages) == 0 { + fail(w, "model and messages are required") + return + } + s.cfg.RLock() + _, ok := s.cfg.Models[req.Model] + s.cfg.RUnlock() + if !ok { + fail(w, "unknown model") + return + } + prompt := openai.BuildPrompt(req.Messages, openai.PromptOptions{Tools: req.Tools}) + + start := time.Now() + info := &upstream.ServeInfo{} + + s.cfg.RLock() + deadline := time.Duration(s.cfg.Upstream.StreamTimeout * float64(time.Second)) + s.cfg.RUnlock() + if deadline <= 0 { + deadline = 5 * time.Minute + } + ctx, cancel := context.WithTimeout(r.Context(), deadline) + defer cancel() + + if !req.Stream { + var sb strings.Builder + err := s.up.Chat(ctx, req.Model, prompt, info, func(ev upstream.Event) error { + if ev.Kind == upstream.KindDelta { + sb.WriteString(ev.Value) + } + return nil + }) + if err != nil { + writeJSON(w, http.StatusBadGateway, map[string]any{"error": err.Error()}) + return + } + _, site, route := info.Get() + writeJSON(w, http.StatusOK, map[string]any{ + "text": sb.String(), "ms": time.Since(start).Milliseconds(), + "site": site, "route": route, "prompt_chars": len(prompt), + }) + return + } + + flusher, _ := w.(http.Flusher) + w.Header().Set("Content-Type", "text/event-stream; charset=utf-8") + w.Header().Set("Cache-Control", "no-cache") + w.Header().Set("X-Accel-Buffering", "no") + send := func(v any) { + raw, _ := json.Marshal(v) + fmt.Fprintf(w, "data: %s\n\n", raw) + if flusher != nil { + flusher.Flush() + } + } + send(map[string]any{"status": "connecting"}) + err = s.up.Chat(ctx, req.Model, prompt, info, func(ev upstream.Event) error { + if ev.Kind == upstream.KindDelta { + send(map[string]any{"delta": ev.Value}) + } + return nil + }) + _, site, route := info.Get() + if err != nil { + send(map[string]any{"error": err.Error()}) + } else { + send(map[string]any{"done": true, "ms": time.Since(start).Milliseconds(), "site": site, "route": route}) + } + fmt.Fprint(w, "data: [DONE]\n\n") + if flusher != nil { + flusher.Flush() + } +} + +// ── helpers ────────────────────────────────────────────────────── + +func readBody(r *http.Request, max int64) ([]byte, error) { + defer r.Body.Close() + return io.ReadAll(io.LimitReader(r.Body, max)) +} + +func writeJSON(w http.ResponseWriter, code int, v any) { + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(code) + _ = json.NewEncoder(w).Encode(v) +} + +func fail(w http.ResponseWriter, msg string) { + writeJSON(w, http.StatusBadRequest, map[string]any{"error": msg}) +} + +func firstNonEmpty(vals ...string) string { + for _, v := range vals { + if strings.TrimSpace(v) != "" { + return v + } + } + return "" +} + +// siteCodes resolves a requested site code to a list; an empty request means +// every configured site. +func (s *Server) siteCodes(want string) []string { + s.cfg.RLock() + defer s.cfg.RUnlock() + if want != "" { + return []string{want} + } + out := make([]string, 0, len(s.cfg.Sites)) + for code := range s.cfg.Sites { + out = append(out, code) + } + return out +} + +func randomToken(n int) string { + b := make([]byte, n) + if _, err := rand.Read(b); err != nil { + return fmt.Sprintf("%x", time.Now().UnixNano()) + } + return hex.EncodeToString(b) +} diff --git a/internal/admin/logs.go b/internal/admin/logs.go new file mode 100644 index 0000000..1292f30 --- /dev/null +++ b/internal/admin/logs.go @@ -0,0 +1,101 @@ +package admin + +import ( + "crypto/rand" + "encoding/json" + "fmt" + "net/http" + "strconv" + "time" + + "github.com/nyoungo/dsfree2api/internal/logbuf" +) + +// handleLogs serves the ring buffer either as a one-shot JSON payload or as a +// live SSE stream (?stream=1). +func (s *Server) handleLogs(w http.ResponseWriter, r *http.Request) { + q := r.URL.Query() + level := q.Get("level") + if level == "" { + level = "INFO" + } + limit := 200 + if v := q.Get("limit"); v != "" { + if n, err := strconv.Atoi(v); err == nil && n > 0 && n <= 500 { + limit = n + } + } + + if q.Get("stream") != "1" { + writeJSON(w, http.StatusOK, map[string]any{"entries": s.logs.Recent(level, limit)}) + return + } + + flusher, ok := w.(http.Flusher) + if !ok { + writeJSON(w, http.StatusInternalServerError, map[string]any{"error": "streaming unsupported"}) + return + } + w.Header().Set("Content-Type", "text/event-stream; charset=utf-8") + w.Header().Set("Cache-Control", "no-cache") + w.Header().Set("X-Accel-Buffering", "no") + + for _, e := range s.logs.Recent(level, limit) { + writeLog(w, e) + } + flusher.Flush() + + ch, unsub := s.logs.Subscribe() + defer unsub() + minLevel := level + ticker := time.NewTicker(15 * time.Second) + defer ticker.Stop() + + for { + select { + case <-r.Context().Done(): + return + case e, ok := <-ch: + if !ok { + return + } + if !levelOK(e.Level, minLevel) { + continue + } + writeLog(w, e) + flusher.Flush() + case <-ticker.C: + fmt.Fprint(w, ": ping\n\n") + flusher.Flush() + } + } +} + +func writeLog(w http.ResponseWriter, e logbuf.Entry) { + raw, err := json.Marshal(e) + if err != nil { + return + } + fmt.Fprintf(w, "data: %s\n\n", raw) +} + +func levelOK(actual, min string) bool { + return levelVal(actual) >= levelVal(min) +} + +func levelVal(l string) int { + switch l { + case "DEBUG": + return -4 + case "INFO": + return 0 + case "WARN": + return 4 + case "ERROR": + return 8 + default: + return -100 + } +} + +func randRead(b []byte) (int, error) { return rand.Read(b) } diff --git a/internal/admin/server.go b/internal/admin/server.go new file mode 100644 index 0000000..269eaa2 --- /dev/null +++ b/internal/admin/server.go @@ -0,0 +1,278 @@ +package admin + +import ( + "embed" + "encoding/json" + "io/fs" + "log/slog" + "net/http" + "os" + "runtime" + "strings" + "sync" + "time" + + "github.com/nyoungo/dsfree2api/internal/config" + "github.com/nyoungo/dsfree2api/internal/logbuf" + "github.com/nyoungo/dsfree2api/internal/metrics" + "github.com/nyoungo/dsfree2api/internal/turnstile" + "github.com/nyoungo/dsfree2api/internal/upstream" +) + +// Version is reported by the console and /api/overview. +var Version = "0.3.0" + +//go:embed web/* +var webFS embed.FS + +type Server struct { + cfg *config.Config + up *upstream.Client + met *metrics.Recorder + logs *logbuf.Buffer + ts *turnstile.Solver + log *slog.Logger + start time.Time + + mu sync.Mutex + tokens map[string]time.Time + password string +} + +func New(cfg *config.Config, up *upstream.Client, met *metrics.Recorder, logs *logbuf.Buffer, ts *turnstile.Solver, log *slog.Logger) *Server { + if log == nil { + log = slog.Default() + } + pw := cfg.Admin.Password + generated := false + if pw == "" { + pw = randomToken(12) + generated = true + } + s := &Server{ + cfg: cfg, up: up, met: met, logs: logs, ts: ts, log: log, + start: time.Now(), tokens: map[string]time.Time{}, password: pw, + } + if generated { + s.log.Warn("admin password was not configured — generated a one-time password", + "password", pw, "hint", "set admin.password in config.toml or ADMIN_PASSWORD to make it stable") + } + return s +} + +func (s *Server) Handler() http.Handler { + sub, _ := fs.Sub(webFS, "web") + static := http.FileServer(http.FS(sub)) + + mux := http.NewServeMux() + mux.HandleFunc("POST /api/login", s.handleLogin) + mux.HandleFunc("GET /api/session", s.handleSession) + mux.HandleFunc("POST /api/logout", s.handleLogout) + mux.HandleFunc("GET /api/overview", s.authed(s.handleOverview)) + mux.HandleFunc("GET /api/config", s.authed(s.handleGetConfig)) + mux.HandleFunc("PUT /api/config", s.authed(s.handlePutConfig)) + mux.HandleFunc("POST /api/actions", s.authed(s.handleActions)) + mux.HandleFunc("GET /api/logs", s.authed(s.handleLogs)) + mux.HandleFunc("POST /api/playground", s.authed(s.handlePlayground)) + mux.Handle("GET /", static) + return mux +} + +// ── auth ───────────────────────────────────────────────────────── + +func (s *Server) authed(next http.HandlerFunc) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + tok := r.Header.Get("X-Admin-Token") + if tok == "" { + if c, err := r.Cookie("dsfr_admin"); err == nil { + tok = c.Value + } + } + if tok == "" { + if scheme, value, ok := strings.Cut(r.Header.Get("Authorization"), " "); ok && + strings.EqualFold(strings.TrimSpace(scheme), "bearer") { + tok = strings.TrimSpace(value) + } + } + if !s.validToken(tok) { + writeJSON(w, http.StatusUnauthorized, map[string]any{"error": "unauthorized"}) + return + } + next(w, r) + } +} + +func (s *Server) validToken(tok string) bool { + if tok == "" { + return false + } + s.mu.Lock() + defer s.mu.Unlock() + exp, ok := s.tokens[tok] + if !ok { + return false + } + if time.Now().After(exp) { + delete(s.tokens, tok) + return false + } + return true +} + +func (s *Server) handleLogin(w http.ResponseWriter, r *http.Request) { + var body struct { + Password string `json:"password"` + } + _ = json.NewDecoder(r.Body).Decode(&body) + if body.Password != s.password { + time.Sleep(300 * time.Millisecond) + writeJSON(w, http.StatusUnauthorized, map[string]any{"error": "invalid password"}) + return + } + tok := randomToken(24) + s.mu.Lock() + for k, exp := range s.tokens { + if time.Now().After(exp) { + delete(s.tokens, k) + } + } + s.tokens[tok] = time.Now().Add(24 * time.Hour) + s.mu.Unlock() + + http.SetCookie(w, &http.Cookie{ + Name: "dsfr_admin", Value: tok, Path: "/", HttpOnly: true, + SameSite: http.SameSiteStrictMode, MaxAge: 86400, + }) + writeJSON(w, http.StatusOK, map[string]any{"ok": true, "token": tok}) +} + +func (s *Server) handleLogout(w http.ResponseWriter, r *http.Request) { + if c, err := r.Cookie("dsfr_admin"); err == nil { + s.mu.Lock() + delete(s.tokens, c.Value) + s.mu.Unlock() + } + http.SetCookie(w, &http.Cookie{Name: "dsfr_admin", Value: "", Path: "/", MaxAge: -1}) + writeJSON(w, http.StatusOK, map[string]any{"ok": true}) +} + +func (s *Server) handleSession(w http.ResponseWriter, r *http.Request) { + tok := "" + if c, err := r.Cookie("dsfr_admin"); err == nil { + tok = c.Value + } + if h := r.Header.Get("X-Admin-Token"); h != "" { + tok = h + } + writeJSON(w, http.StatusOK, map[string]any{"authenticated": s.validToken(tok)}) +} + +// ── overview ───────────────────────────────────────────────────── + +func (s *Server) handleOverview(w http.ResponseWriter, _ *http.Request) { + s.cfg.RLock() + models := make([]map[string]any, 0, len(s.cfg.Models)) + for id, m := range s.cfg.Models { + models = append(models, map[string]any{ + "id": id, "site": m.Site, "label": m.Label, "upstream_id": m.UpstreamID, + "page_path": m.PagePath, "bot_id": m.BotID, "post_id": m.PostID, "enabled": m.Enabled, + }) + } + sites := make([]map[string]any, 0, len(s.cfg.Sites)) + siteCodes := make([]string, 0, len(s.cfg.Sites)) + for code, st := range s.cfg.Sites { + siteCodes = append(siteCodes, code) + sites = append(sites, map[string]any{ + "code": code, "base_url": st.BaseURL, "ajax_url": st.AJAXURL, + "language": st.Language, "sitekey": st.SiteKey, "enabled": st.Enabled, + "verify_action": st.VerifyAction, + }) + } + proxyCfg := struct { + URL string `json:"url"` + Fallbacks []string `json:"fallbacks"` + SlowStart float64 `json:"slow_start"` + MaxConc int `json:"max_concurrent"` + Rate float64 `json:"rate_per_minute"` + CrossSite bool `json:"cross_site_failover"` + }{s.cfg.Proxy.URL, s.cfg.Proxy.FallbackURLs, s.cfg.Proxy.SlowStartSeconds, + s.cfg.Limits.MaxConcurrentPerSite, s.cfg.Limits.RatePerMinute, s.cfg.Upstream.CrossSiteFailover} + turnstileCfg := s.cfg.Turnstile + keys := append([]string(nil), s.cfg.Security.APIKeys...) + s.cfg.RUnlock() + + writeJSON(w, http.StatusOK, map[string]any{ + "metrics": s.met.Snapshot(), + "models": models, + "sites": sites, + "proxy": proxyCfg, + "turnstile": map[string]any{"config": turnstileCfg, "status": s.ts.Status(siteCodes), "history": s.ts.History()}, + "keys": keys, + "cache": map[string]any{"chat_config_entries": s.up.ConfigCacheSize(), "routes": routeList(s.up)}, + "system": map[string]any{ + "version": Version, "go": runtime.Version(), "os": runtime.GOOS, "arch": runtime.GOARCH, + "uptime_s": int(time.Since(s.start).Seconds()), "pid": os.Getpid(), + "config_path": s.cfg.Path(), + }, + }) +} + +func routeList(c *upstream.Client) []map[string]string { + routes := c.Routes() + out := make([]map[string]string, 0, len(routes)) + for _, r := range routes { + label := r.Proxy + if label == "" { + label = "direct" + } + out = append(out, map[string]string{"name": r.Name, "proxy": label}) + } + return out +} + +// ── config get/put ─────────────────────────────────────────────── + +func (s *Server) handleGetConfig(w http.ResponseWriter, _ *http.Request) { + s.cfg.RLock() + defer s.cfg.RUnlock() + writeJSON(w, http.StatusOK, s.cfg) +} + +func (s *Server) handlePutConfig(w http.ResponseWriter, r *http.Request) { + body, err := readBody(r, 1<<20) + if err != nil { + writeJSON(w, http.StatusBadRequest, map[string]any{"error": err.Error()}) + return + } + s.cfg.Lock() + err = json.Unmarshal(body, s.cfg) + if err == nil { + err = s.cfg.Reindex() + } + s.cfg.Unlock() + if err != nil { + writeJSON(w, http.StatusBadRequest, map[string]any{"error": err.Error()}) + return + } + if err := s.cfg.Validate(); err != nil { + writeJSON(w, http.StatusBadRequest, map[string]any{"error": err.Error()}) + return + } + s.applyRuntime() + if err := s.cfg.Save(); err != nil { + writeJSON(w, http.StatusInternalServerError, map[string]any{"error": err.Error()}) + return + } + writeJSON(w, http.StatusOK, map[string]any{"ok": true}) +} + +// applyRuntime pushes a freshly edited config into the live subsystems. +func (s *Server) applyRuntime() { + s.ts.SetConfig(s.currentTurnstile()) +} + +func (s *Server) currentTurnstile() config.Turnstile { + s.cfg.RLock() + defer s.cfg.RUnlock() + return s.cfg.Turnstile +} diff --git a/internal/admin/web/app.js b/internal/admin/web/app.js new file mode 100644 index 0000000..d049e23 --- /dev/null +++ b/internal/admin/web/app.js @@ -0,0 +1,777 @@ +/* dsfree2api web console */ +(function () { +"use strict"; + +const $ = (s, r) => (r || document).querySelector(s); +const $$ = (s, r) => Array.from((r || document).querySelectorAll(s)); +const view = $("#view"); +const TITLES = { + dashboard: "仪表盘", models: "模型与站点", keys: "API Key", proxy: "代理线路", + turnstile: "Turnstile", playground: "对话调试", logs: "实时日志", settings: "设置" +}; + +let overviewTimer = null; +let logStop = null; +let lastOverview = null; + +/* ── helpers ─────────────────────────────────────────────── */ +function toast(msg, kind) { + const t = $("#toast"); + t.textContent = msg; + t.className = "toast " + (kind || ""); + clearTimeout(t._h); + t._h = setTimeout(() => t.classList.add("hidden"), 3200); +} + +async function api(path, opts) { + opts = opts || {}; + const init = { method: opts.method || (opts.body !== undefined ? "POST" : "GET"), headers: {} }; + if (opts.signal) init.signal = opts.signal; + if (opts.body !== undefined) { + init.headers["Content-Type"] = "application/json"; + init.body = typeof opts.body === "string" ? opts.body : JSON.stringify(opts.body); + } + const res = await fetch(path, init); + let data = null; + try { data = await res.json(); } catch (e) { data = null; } + if (res.status === 401 && !path.endsWith("/login")) { + showLogin(); + throw new Error("unauthorized"); + } + if (!res.ok) { + const msg = (data && (data.error || data.detail)) || res.statusText; + throw new Error(typeof msg === "string" ? msg : JSON.stringify(msg)); + } + return data; +} + +function esc(s) { + return String(s == null ? "" : s).replace(/[&<>"']/g, c => + ({ "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }[c])); +} +const fmtInt = n => (n || 0).toLocaleString("en-US"); +const fmtPct = (a, b) => b ? (a * 100 / b).toFixed(1) + "%" : "0%"; +const fmtMs = ms => ms >= 1000 ? (ms / 1000).toFixed(2) + "s" : Math.round(ms) + "ms"; +const fmtBytes = n => n > 1048576 ? (n / 1048576).toFixed(1) + "MB" : n > 1024 ? (n / 1024).toFixed(1) + "KB" : n + "B"; +const timeStr = t => new Date(t).toLocaleTimeString("zh-CN", { hour12: false }); + +function switchHTML(id, checked) { + return ``; +} + +/* ── auth ────────────────────────────────────────────────── */ +async function ensureSession() { + try { + const s = await api("/api/session"); + if (s.authenticated) { $("#login").classList.add("hidden"); return true; } + } catch (e) { /* ignore */ } + showLogin(); + return false; +} +function showLogin() { + $("#login").classList.remove("hidden"); + setTimeout(() => $("#login-password").focus(), 50); +} +async function doLogin() { + const pw = $("#login-password").value; + if (!pw) return; + try { + await api("/api/login", { method: "POST", body: { password: pw } }); + $("#login-error").textContent = ""; + $("#login").classList.add("hidden"); + $("#login-password").value = ""; + route(); + } catch (e) { + $("#login-error").textContent = e.message === "invalid password" ? "密码错误" : e.message; + } +} + +/* ── router ──────────────────────────────────────────────── */ +function route() { + if (overviewTimer) { clearInterval(overviewTimer); overviewTimer = null; } + if (logStop) { logStop(); logStop = null; } + const hash = location.hash.replace(/^#\/?/, "") || "dashboard"; + const page = (hash.split("?")[0] || "dashboard"); + $$("#nav a").forEach(a => a.classList.toggle("active", a.dataset.page === page)); + $("#page-title").textContent = TITLES[page] || page; + view.innerHTML = '

'; + const fn = PAGES[page] || PAGES.dashboard; + fn().catch(e => { view.innerHTML = `
加载失败:${esc(e.message)}
`; }); +} + +/* ── overview poll ───────────────────────────────────────── */ +async function fetchOverview() { + const ov = await api("/api/overview"); + lastOverview = ov; + renderBadges(ov); + return ov; +} +function renderBadges(ov) { + const st = (ov.turnstile.status || []).filter(s => s.valid).length; + const total = (ov.sites || []).filter(s => s.enabled).length; + $("#sys-version").textContent = "v" + (ov.system.version || "?"); + $("#sys-badges").innerHTML = ` + 运行 ${Math.floor(ov.system.uptime_s / 3600)}h${Math.floor(ov.system.uptime_s % 3600 / 60)}m + ${esc(ov.system.go)} · ${esc(ov.system.os)}/${esc(ov.system.arch)} + Turnstile ${st}/${total} + 在线 ${fmtInt(ov.metrics.in_flight)}`; +} + +/* ── pages ───────────────────────────────────────────────── */ +const PAGES = {}; + +PAGES.dashboard = async () => { + view.innerHTML = ` +
+
总请求
–
+
错误 / 空响应
–
+
Token(估算)
–
+
延迟 P50 / P95
–
+
+
+

模型用量

+ + +
模型请求错误Token平均耗时
暂无数据
+

站点状态

+
+

最近请求

+
+
+
+ + +
时间模型站点线路类型耗时Token状态
暂无请求
+
`; + + $("#btn-invalidate").onclick = async () => { await api("/api/actions", { body: { action: "invalidate" } }); toast("已清除 nonce 与 cookie 缓存", "ok"); }; + $("#btn-reset").onclick = async () => { await api("/api/actions", { body: { action: "reset_metrics" } }); toast("统计已清空", "ok"); refresh(); }; + + async function refresh() { + let ov; + try { ov = await fetchOverview(); } catch (e) { return; } + const m = ov.metrics; + $("#s-req").textContent = fmtInt(m.requests); + $("#s-rps").textContent = `${m.rps.toFixed(2)} req/s · 流式 ${fmtInt(m.streams)} · 运行中 ${fmtInt(m.in_flight)}`; + $("#s-err").textContent = fmtInt(m.errors); + $("#s-err").className = "stat-value " + (m.errors ? "err" : "ok"); + $("#s-errpct").textContent = `错误率 ${fmtPct(m.errors, m.requests)} · 空响应 ${fmtInt(m.empty)} · 拒绝 ${fmtInt(m.unauthorized)} · 限流 ${fmtInt(m.rate_limited)}`; + $("#s-tok").textContent = fmtInt(m.prompt_tokens + m.completion_tokens); + $("#s-toksub").textContent = `输入 ${fmtInt(m.prompt_tokens)} · 输出 ${fmtInt(m.completion_tokens)}`; + $("#s-lat").textContent = m.latency.count ? `${fmtMs(m.latency.p50)} / ${fmtMs(m.latency.p95)}` : "–"; + $("#s-latsub").textContent = m.latency.count ? `样本 ${m.latency.count} · 最大 ${fmtMs(m.latency.max)}` : "尚无样本"; + + const rows = Object.entries(m.models || {}); + $("#tb-models").innerHTML = rows.length ? rows.map(([id, v]) => ` + ${esc(id)} + ${fmtInt(v.requests)} + ${fmtInt(v.errors)} + ${fmtInt(v.prompt_tokens + v.completion_tokens)} + ${v.requests ? fmtMs(v.sum_ms / v.requests) : "–"}`).join("") + : '暂无数据'; + + $("#site-cards").innerHTML = (ov.sites || []).map(s => { + const ts = (ov.turnstile.status || []).find(x => x.site === s.code) || {}; + const ms = m.sites && m.sites[s.code]; + const pct = ts.remaining_s > 0 ? Math.max(0, Math.min(100, ts.remaining_s / (ov.turnstile.config.cookie_ttl_seconds || 10800) * 100)) : 0; + return `
+
+
${esc(s.code.toUpperCase())} ${s.enabled ? "启用" : "停用"} +
${esc(s.base_url)}
+
+
+
请求 ${fmtInt(ms ? ms.requests : 0)} · 错误 ${fmtInt(ms ? ms.errors : 0)} · Cookie ${ts.valid ? "有效 " + Math.round(ts.remaining_s / 60) + " 分钟" : "未建立"}
+
`; + }).join("") || '
无站点
'; + + $$("[data-probe]").forEach(b => b.onclick = async () => { + b.disabled = true; b.textContent = "…"; + try { + const r = await api("/api/actions", { body: { action: "probe_site", site: b.dataset.probe } }); + toast(r.ok ? `${b.dataset.probe}: HTTP ${r.status} · ${r.ms}ms · 对话容器 ${r.chat_container ? "有" : "无"}` : `${b.dataset.probe}: ${r.error || "失败"}`, r.ok ? "ok" : "err"); + } catch (e) { toast(e.message, "err"); } + b.disabled = false; b.textContent = "探测"; + }); + + const rec = (m.recent || []).slice(0, 30); + $("#tb-recent").innerHTML = rec.length ? rec.map(r => ` + ${timeStr(r.at)} + ${esc(r.served_by || r.model)} + ${esc(r.site)}${esc(r.route || "–")} + ${r.stream ? "流式" : "同步"} + ${fmtMs(r.duration_ms)} + ${fmtInt((r.prompt_tokens || 0) + (r.completion_tokens || 0))} + ${esc(r.status)}${r.error ? ` ${esc(r.error.slice(0, 60))}` : ""}`).join("") + : '暂无请求'; + } + await refresh(); + overviewTimer = setInterval(refresh, 5000); +}; + +PAGES.models = async () => { + const ov = await fetchOverview(); + view.innerHTML = ` +

模型

+
bot_id / post_id 修改后会自动清除该模型的 nonce 缓存
+
+ +
ID标签站点上游模型路径botpost启用
+

站点

+ +
代码Base URLAJAX URL语言启用
`; + + $("#tb").innerHTML = ov.models.map(m => ` + + ${esc(m.id)} + + ${esc(m.site)}${esc(m.upstream_id)} + + + + ${switchHTML("sw-" + m.id, m.enabled)} + + `).join(""); + + $("#tb-sites").innerHTML = ov.sites.map(s => ` + + ${esc(s.code.toUpperCase())} + + + + ${switchHTML("sws-" + s.code, s.enabled)} +
+ `).join(""); + + $$("[data-save]").forEach(b => b.onclick = async () => { + const tr = b.closest("tr"), id = b.dataset.save; + const g = f => $(`[data-f="${f}"]`, tr).value; + try { + await api("/api/actions", { body: { action: "update_model", id, label: g("label"), page_path: g("page_path"), bot_id: +g("bot_id"), post_id: +g("post_id") } }); + toast("模型已保存", "ok"); + } catch (e) { toast(e.message, "err"); } + }); + $$("[data-savesite]").forEach(b => b.onclick = async () => { + const tr = b.closest("tr"), code = b.dataset.savesite; + const g = f => $(`[data-f="${f}"]`, tr).value; + try { + await api("/api/actions", { body: { action: "update_site", code, base_url: g("base_url"), ajax_url: g("ajax_url"), language: g("language") } }); + toast("站点已保存", "ok"); + } catch (e) { toast(e.message, "err"); } + }); + ov.models.forEach(m => { + $("#sw-" + CSS.escape(m.id)).onchange = async ev => { + try { await api("/api/actions", { body: { action: "toggle_model", id: m.id, enabled: ev.target.checked } }); toast("已更新", "ok"); } + catch (e) { toast(e.message, "err"); ev.target.checked = !ev.target.checked; } + }; + }); + ov.sites.forEach(s => { + $("#sws-" + CSS.escape(s.code)).onchange = async ev => { + try { await api("/api/actions", { body: { action: "toggle_site", id: s.code, enabled: ev.target.checked } }); toast("已更新", "ok"); } + catch (e) { toast(e.message, "err"); ev.target.checked = !ev.target.checked; } + }; + }); +}; + +PAGES.keys = async () => { + const ov = await fetchOverview(); + view.innerHTML = ` +
+

下游 API Key

留空表示不鉴权;请求时使用 Authorization: Bearer <key> 或 X-Api-Key
+
+
+
Key状态
+
修改会立即生效并写入 config.toml(自动备份为 .bak)
`; + const render = keys => { + $("#tb").innerHTML = keys.length ? keys.map(k => ` + ${esc(mask(k))}启用 + + `).join("") + : '未配置任何 Key —— 当前不鉴权'; + $$("[data-copy]").forEach(b => b.onclick = () => { navigator.clipboard && navigator.clipboard.writeText(b.dataset.copy); toast("已复制", "ok"); }); + $$("[data-del]").forEach(b => b.onclick = async () => { + if (!confirm("删除该 Key?")) return; + try { await api("/api/actions", { body: { action: "delete_key", key: b.dataset.del } }); toast("已删除", "ok"); PAGES.keys(); } + catch (e) { toast(e.message, "err"); } + }); + }; + render(ov.keys || []); + $("#btn-gen").onclick = async () => { + try { + const r = await api("/api/actions", { body: { action: "create_key" } }); + if (r.ok) { toast("已生成", "ok"); PAGES.keys(); } + } catch (e) { toast(e.message, "err"); } + }; +}; +const mask = k => k.length > 16 ? k.slice(0, 7) + "…" + k.slice(-6) : k; + +PAGES.proxy = async () => { + const ov = await fetchOverview(); + const p = ov.proxy; + view.innerHTML = ` +
+

主线路

+
+
+ + +
+
支持 http:// · https:// · socks5://
+
+

降级策略

+
+
+
+
+
+
+
${switchHTML("px-cross", p.cross_site_failover)}
+ +
+
主线路在 slow-start 内无首事件,或输出内容前失败时,自动切换到备用线路。
+
+
+

备用线路

+
+
#地址
+
当前生效顺序:${ov.cache.routes.map(r => `${esc(r.name)} → ${esc(r.proxy)}`).join(" ")}
+
`; + + const renderFb = list => { + $("#tb-fb").innerHTML = list.length ? list.map((u, i) => ` + ${i + 1}${esc(u)} + `).join("") + : '无备用线路'; + $$("[data-rm]").forEach(b => b.onclick = async () => { + try { await api("/api/actions", { body: { action: "remove_fallback", url: b.dataset.rm } }); PAGES.proxy(); } + catch (e) { toast(e.message, "err"); } + }); + }; + renderFb(p.fallbacks || []); + + $("#px-save").onclick = async () => { + try { + await api("/api/config", { method: "PUT", body: await merged(c => { c.proxy.url = $("#px-primary").value.trim(); }) }); + toast("主线路已保存", "ok"); PAGES.proxy(); + } catch (e) { toast(e.message, "err"); } + }; + $("#px-test").onclick = async () => { + const b = $("#px-test"); b.disabled = true; b.textContent = "测试中…"; + try { + const r = await api("/api/actions", { body: { action: "test_proxy", url: $("#px-primary").value.trim() } }); + toast(r.ok ? `连通 · HTTP ${r.status} · ${r.ms}ms` : (r.error || "失败"), r.ok ? "ok" : "err"); + } catch (e) { toast(e.message, "err"); } + b.disabled = false; b.textContent = "连通性测试"; + }; + $("#px-savelim").onclick = async () => { + try { + await api("/api/actions", { body: { + action: "set_limits", slow_start: +$("#px-slow").value, + max_concurrent: +$("#px-conc").value, rate_per_minute: +$("#px-rate").value, + cross_site_failover: $("#px-cross").checked } }); + toast("已保存", "ok"); + } catch (e) { toast(e.message, "err"); } + }; + $("#px-add").onclick = async () => { + const v = $("#px-fb").value.trim(); if (!v) return; + try { await api("/api/actions", { body: { action: "add_fallback", url: v } }); $("#px-fb").value = ""; PAGES.proxy(); } + catch (e) { toast(e.message, "err"); } + }; +}; + +async function merged(mutate) { + const cfg = await api("/api/config"); + mutate(cfg); + return cfg; +} + +PAGES.turnstile = async () => { + const ov = await fetchOverview(); + const t = ov.turnstile.config; + view.innerHTML = ` +
+

求解器配置

+
+
+
${switchHTML("ts-en", t.enabled)}
+
+
+
方式 1 · 求解服务 API
+
+
+
+
+
+
+
+ + +
+ +
+

已验证 Cookie

+
+
+ + +
+
缓存 TTL ${t.cookie_ttl_seconds}s · 求解失败重试 ${t.retries} 次 · 退避 ${t.retry_backoff_seconds}s
+
+
+

求解历史

+ +
时间站点线路耗时结果
`; + + $("#ts-status").innerHTML = (ov.turnstile.status || []).map(s => ` +
+
${esc(s.site.toUpperCase())} ${s.valid ? "有效" : "未建立"}
+
+
${s.valid ? "剩余 " + Math.round(s.remaining_s / 60) + " 分钟 · " + s.cookie_count + " 个 Cookie" : "下次请求时自动求解"}
+
`).join(""); + + const hist = ov.turnstile.history || []; + $("#ts-hist").innerHTML = hist.length ? hist.slice().reverse().slice(0, 40).map(h => ` + ${timeStr(h.at)}${esc(h.site)}${esc(h.proxy)} + ${fmtMs(h.elapsed_ms)} + ${h.ok ? "成功" : "失败"}${h.error ? ` ${esc(h.error.slice(0, 70))}` : ""}`).join("") + : '尚无记录'; + + $$("[data-rf]").forEach(b => b.onclick = async () => { + b.disabled = true; + try { await api("/api/actions", { body: { action: "refresh_cookies", site: b.dataset.rf } }); toast("已作废,将在下次请求时重新求解", "ok"); PAGES.turnstile(); } + catch (e) { toast(e.message, "err"); } + b.disabled = false; + }); + $("#ts-provider").value = t.provider || "api"; + const TS_HINTS = { + api: ["已开启:调用求解服务 API 获取 Turnstile Token", "已关闭:跳过 Turnstile 求解,直接请求上游站点"], + browser: ["已开启:用下方配置的本地浏览器自动求解 Token", "已关闭:跳过 Turnstile 求解,直接请求上游站点"], + manual: ["手动方式:不自动求解,导入已通过验证的 Cookie 即可(TTL 内免求解)", "已关闭:跳过 Turnstile 求解,直接请求上游站点"], + }; + const syncProvider = () => { + const p = $("#ts-provider").value; + $("#ts-api").style.display = p === "api" ? "" : "none"; + $("#ts-browser").style.display = p === "browser" ? "" : "none"; + $("#ts-manual").style.display = p === "manual" ? "" : "none"; + $("#ts-refresh").style.display = p === "manual" ? "none" : ""; + const hints = TS_HINTS[p] || TS_HINTS.api; + $("#ts-hint").textContent = $("#ts-en").checked ? hints[0] : hints[1]; + }; + $("#ts-provider").onchange = syncProvider; + $("#ts-en").onchange = syncProvider; + syncProvider(); + $("#ts-save").onclick = async () => { + try { + await api("/api/actions", { body: { + action: "set_turnstile", enabled: $("#ts-en").checked, + provider: $("#ts-provider").value, + api_url: $("#ts-url").value.trim(), + api_key: $("#ts-key").value.trim(), sitekey: $("#ts-sitekey").value.trim(), + challenge_action: $("#ts-action").value.trim(), cookie_ttl_seconds: +$("#ts-ttl").value, + browser_path: $("#ts-bpath").value.trim(), + browser_headless: $("#ts-bhead").checked, + browser_user_data_dir: $("#ts-bprof").value.trim(), + browser_timezone: $("#ts-btz").value.trim(), + browser_locale: $("#ts-bloc").value.trim() } }); + toast("已保存", "ok"); PAGES.turnstile(); + } catch (e) { toast(e.message, "err"); } + }; + $("#ts-refresh").onclick = async () => { + try { await api("/api/actions", { body: { action: "invalidate" } }); toast("已作废全部 cookie", "ok"); PAGES.turnstile(); } + catch (e) { toast(e.message, "err"); } + }; + $("#ts-clear").onclick = async () => { + try { await api("/api/actions", { body: { action: "clear_cookies" } }); toast("已清空 Cookie", "ok"); PAGES.turnstile(); } + catch (e) { toast(e.message, "err"); } + }; + $("#im-save").onclick = async () => { + try { + const r = await api("/api/actions", { body: { + action: "import_cookies", site: $("#im-site").value, cookies: $("#im-cookies").value } }); + toast(`已导入 ${r.cookie_count} 个 Cookie,${timeStr(r.expires_at * 1000)} 到期`, "ok"); + PAGES.turnstile(); + } catch (e) { toast(e.message, "err"); } + }; +}; + +PAGES.playground = async () => { + const ov = await fetchOverview(); + const enabled = ov.models.filter(m => m.enabled); + view.innerHTML = ` +
+

请求

+
+
+
${switchHTML("pg-stream", true)}
+
+
+
+
+
+ + +
+
+

响应

尚未发送请求
+
`; + + let ac = null, timer = null; + const stopTimer = () => { if (timer) { clearInterval(timer); timer = null; } }; + + $("#pg-clear").onclick = () => { stopTimer(); ac = null; $("#pg-out").innerHTML = '尚未发送请求'; $("#pg-meta").textContent = ""; }; + $("#pg-cancel").onclick = () => { if (ac) ac.abort(); }; + $("#pg-send").onclick = async () => { + const input = $("#pg-input").value.trim(); + if (!input) { toast("请输入内容", "err"); return; } + let tools = null; + const raw = $("#pg-tools").value.trim(); + if (raw) { try { tools = JSON.parse(raw); } catch (e) { toast("Tools JSON 解析失败", "err"); return; } } + + const messages = [{ role: "system", content: $("#pg-system").value }, { role: "user", content: input }]; + const model = $("#pg-model").value; + const stream = $("#pg-stream").checked; + const out = $("#pg-out"); + out.innerHTML = ""; + + const status = document.createElement("span"); + status.className = "dim"; + status.textContent = "连接中… 0.0s"; + const caret = document.createElement("span"); caret.className = "caret"; + out.appendChild(status); out.appendChild(caret); + + ac = new AbortController(); + const btn = $("#pg-send"), cancel = $("#pg-cancel"); + btn.disabled = true; btn.textContent = "请求中…"; + cancel.disabled = false; + $("#pg-meta").textContent = ""; + const t0 = Date.now(); + const tick = () => { status.textContent = `连接中… ${((Date.now() - t0) / 1000).toFixed(1)}s`; }; + stopTimer(); timer = setInterval(tick, 100); + + const finish = () => { + stopTimer(); ac = null; + btn.disabled = false; btn.textContent = "发送"; + cancel.disabled = true; + if (!$("#pg-meta").textContent) $("#pg-meta").textContent = `${fmtMs(Date.now() - t0)}`; + }; + const firstText = () => { if (status.parentNode) status.remove(); }; + + try { + if (stream) { + const res = await fetch("/api/playground", { method: "POST", headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ model, messages, stream: true, tools }), signal: ac.signal }); + if (!res.ok) { const j = await res.json().catch(() => ({})); throw new Error(j.error || res.statusText); } + out.appendChild(caret); + const reader = res.body.getReader(), dec = new TextDecoder(); + let buf = "", first = null; + for (;;) { + const { done, value } = await reader.read(); if (done) break; + buf += dec.decode(value, { stream: true }); + let idx; + while ((idx = buf.indexOf("\n\n")) >= 0) { + const frame = buf.slice(0, idx); buf = buf.slice(idx + 2); + if (!frame.startsWith("data: ")) continue; + const payload = frame.slice(6); + if (payload === "[DONE]") continue; + let j; try { j = JSON.parse(payload); } catch (e) { continue; } + if (j.error) { firstText(); out.insertBefore(document.createTextNode("\n[错误] " + j.error), caret); continue; } + if (j.delta) { if (!first) first = Date.now(); firstText(); out.insertBefore(document.createTextNode(j.delta), caret); } + if (j.done) { $("#pg-meta").textContent = `${j.ms}ms · ${j.site} · ${j.route}`; } + } + } + caret.remove(); + } else { + const j = await api("/api/playground", { body: { model, messages, stream: false, tools }, signal: ac.signal }); + out.textContent = j.text; + $("#pg-meta").textContent = `${j.ms}ms · ${j.site} · ${j.route} · prompt ${j.prompt_chars} 字符`; + } + } catch (e) { + caret.remove(); + if (e && e.name === "AbortError") { + out.innerHTML = '已取消'; + } else { + out.innerHTML = `请求失败:${esc(e.message)}`; + } + } + finish(); + }; +}; + +PAGES.logs = async () => { + view.innerHTML = ` +
+
+
+
+ + +
+
实时连接中…
+
+
`; + + const box = $("#lg-box"); + let paused = false, es = null, gen = 0; + const minVal = { DEBUG: -4, INFO: 0, WARN: 4, ERROR: 8 }; + + function append(e) { + if (paused) return; + const sel = $("#lg-level"); + if (sel && minVal[e.level] < minVal[sel.value]) return; + const line = document.createElement("div"); + line.className = "log-line"; + const attrs = e.attrs ? Object.entries(e.attrs).map(([k, v]) => `${k}=${v}`).join(" ") : ""; + line.innerHTML = `${timeStr(e.ts)} ${e.level} ${esc(e.msg)}${attrs ? ' ' + esc(attrs) + "" : ""}`; + box.appendChild(line); + while (box.children.length > 600) box.removeChild(box.firstChild); + box.scrollTop = box.scrollHeight; + } + + function stopES() { if (es) { es.close(); es = null; } } + + // (Re)load history and reopen the SSE stream with the currently selected + // minimum level. Never re-render the page here: rebuilding the select would + // reset it to INFO before the value is read, and would leak the old stream. + // History comes solely from the server replay on connect (and on every + // automatic reconnect), so the box is cleared in onopen instead of fetching + // the JSON endpoint separately — otherwise entries show up twice. + async function load() { + const my = ++gen; + const level = $("#lg-level").value; + stopES(); + box.innerHTML = ""; + es = new EventSource("/api/logs?stream=1&level=" + level); + es.onmessage = ev => { if (my !== gen) return; try { append(JSON.parse(ev.data)); } catch (e) {} }; + es.onerror = () => { if (my !== gen) return; const st = $("#lg-state"); if (st) st.textContent = "连接中断,自动重连中…"; }; + es.onopen = () => { + if (my !== gen) return; + box.innerHTML = ""; + const st = $("#lg-state"); if (st) st.textContent = "实时连接中…"; + }; + logStop = () => { gen++; stopES(); }; + } + + $("#lg-toggle").onclick = e => { paused = !paused; e.target.textContent = paused ? "继续" : "暂停"; }; + $("#lg-clear").onclick = () => { box.innerHTML = ""; }; + $("#lg-level").onchange = load; + await load(); +}; + +PAGES.settings = async () => { + const cfg = await api("/api/config"); + view.innerHTML = ` +
+

服务

+
+
+
+
+
+
+
+
+
+
+ +
+

上游

+
+
+
+
+
+
+
+
+
+
+
${switchHTML("st-ar", cfg.upstream.auto_refresh)}
+
+
+
+ +
+
+

危险操作

+
+ + +
+
配置保存会自动备份原文件为 config.toml.bak;修改端口/密码需重启服务生效。
+
`; + + const put = async mutate => { + try { + const c = await api("/api/config"); + mutate(c); + await api("/api/config", { method: "PUT", body: c }); + toast("已保存并写入 config.toml", "ok"); + return true; + } catch (e) { toast(e.message, "err"); return false; } + }; + $("#st-save").onclick = () => put(c => { + c.server.host = $("#st-host").value; + c.server.port = +$("#st-port").value; + c.server.log_level = $("#st-log").value; + c.admin.host = $("#st-ah").value; + c.admin.port = +$("#st-ap").value; + if ($("#st-pw").value) c.admin.password = $("#st-pw").value; + }); + $("#st-save2").onclick = () => put(c => { + c.upstream.timeout = +$("#st-to").value; + c.upstream.stream_timeout = +$("#st-sto").value; + c.upstream.config_ttl_seconds = +$("#st-ttl").value; + c.upstream.refresh_retries = +$("#st-retry").value; + c.upstream.retry_backoff_seconds = +$("#st-back").value; + c.upstream.auto_refresh = $("#st-ar").checked; + c.upstream.user_agent = $("#st-ua").value; + c.runtime.data_dir = $("#st-dir").value; + }); + $("#st-reset").onclick = async () => { try { await api("/api/actions", { body: { action: "reset_metrics" } }); toast("已清空", "ok"); } catch (e) { toast(e.message, "err"); } }; + $("#st-inv").onclick = async () => { try { await api("/api/actions", { body: { action: "invalidate" } }); toast("已作废", "ok"); } catch (e) { toast(e.message, "err"); } }; +}; + +/* ── boot ────────────────────────────────────────────────── */ +window.addEventListener("hashchange", route); +$("#login-btn").onclick = doLogin; +$("#login-password").addEventListener("keydown", e => { if (e.key === "Enter") doLogin(); }); +$("#logout-btn").onclick = async () => { try { await api("/api/logout", { method: "POST" }); } catch (e) {} location.hash = "#/dashboard"; showLogin(); }; + +(async function init() { + if (await ensureSession()) route(); +})(); +})(); diff --git a/internal/admin/web/index.html b/internal/admin/web/index.html new file mode 100644 index 0000000..e3c34cc --- /dev/null +++ b/internal/admin/web/index.html @@ -0,0 +1,58 @@ + + + + + +dsfree2api 控制台 + + + + + + + +
+ + +
+
+
仪表盘
+
+
+
+
+
+ + + + + + diff --git a/internal/admin/web/style.css b/internal/admin/web/style.css new file mode 100644 index 0000000..6b368ff --- /dev/null +++ b/internal/admin/web/style.css @@ -0,0 +1,125 @@ +:root{ + --bg:#0d1117;--bg2:#11161d;--panel:#161b22;--panel2:#1c2230; + --line:#262c36;--text:#e6edf3;--muted:#8b949e;--dim:#6e7681; + --accent:#4c8dff;--accent2:#2f6feb;--ok:#3fb950;--warn:#d29922;--err:#f85149; + --mono:ui-monospace,SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace; +} +*{box-sizing:border-box} +html,body{height:100%} +body{margin:0;background:var(--bg);color:var(--text);font:14px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif} +code,pre,.mono{font-family:var(--mono)} +a{color:inherit;text-decoration:none} +button{font:inherit} +.hidden{display:none!important} + +/* layout */ +.app{display:flex;min-height:100vh} +.sidebar{width:216px;flex:0 0 216px;background:var(--bg2);border-right:1px solid var(--line);display:flex;flex-direction:column;position:sticky;top:0;height:100vh} +.brand{display:flex;align-items:center;gap:8px;padding:18px 16px;font-weight:700;font-size:16px;letter-spacing:.3px} +.brand-mark{filter:grayscale(.2)} +nav{display:flex;flex-direction:column;padding:6px 8px;gap:2px;flex:1} +nav a{padding:9px 12px;border-radius:8px;color:var(--muted);transition:.12s} +nav a:hover{background:#1b2230;color:var(--text)} +nav a.active{background:linear-gradient(180deg,var(--accent2),#1f4fbb);color:#fff;box-shadow:0 2px 10px rgba(47,111,235,.35)} +.sidebar-foot{padding:12px;border-top:1px solid var(--line);color:var(--dim);font-size:12px;display:flex;flex-direction:column;gap:8px} +main{flex:1;min-width:0;display:flex;flex-direction:column} +.topbar{display:flex;align-items:center;justify-content:space-between;padding:14px 22px;border-bottom:1px solid var(--line);background:rgba(13,17,23,.85);backdrop-filter:blur(8px);position:sticky;top:0;z-index:5} +.page-title{font-size:17px;font-weight:650} +.badges{display:flex;gap:8px;flex-wrap:wrap} +.badge{font-size:11px;padding:3px 9px;border-radius:20px;background:var(--panel);border:1px solid var(--line);color:var(--muted)} +.badge.ok{color:var(--ok);border-color:#1f6a34;background:#0f2318} +.badge.err{color:var(--err);border-color:#6e2220;background:#2a1315} +.badge.warn{color:var(--warn);border-color:#6b5417;background:#2a2210} +.view{padding:22px;display:flex;flex-direction:column;gap:18px;max-width:1400px;width:100%} + +/* cards */ +.grid{display:grid;gap:14px} +.g4{grid-template-columns:repeat(auto-fit,minmax(190px,1fr))} +.g2{grid-template-columns:repeat(auto-fit,minmax(340px,1fr))} +.card{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:16px} +.card h3{margin:0 0 12px;font-size:13px;color:var(--muted);font-weight:600;text-transform:uppercase;letter-spacing:.6px} +.stat-label{font-size:12px;color:var(--muted);margin-bottom:6px} +.stat-value{font-size:26px;font-weight:700;letter-spacing:-.5px} +.stat-sub{font-size:11px;color:var(--dim);margin-top:4px} +.stat-value.ok{color:var(--ok)}.stat-value.err{color:var(--err)}.stat-value.warn{color:var(--warn)} + +/* turnstile mode panel */ +.ts-panel{background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:13px 14px;margin-top:12px} +.ts-panel-title{font-size:12px;font-weight:650;color:var(--muted);margin-bottom:10px;letter-spacing:.3px} + +/* table */ +table{width:100%;border-collapse:collapse;font-size:13px} +th{text-align:left;color:var(--muted);font-weight:600;padding:8px 10px;border-bottom:1px solid var(--line);font-size:12px} +td{padding:9px 10px;border-bottom:1px solid #1c222b;vertical-align:middle} +tr:last-child td{border-bottom:none} +tbody tr:hover{background:#191f29} +td.num,th.num{text-align:right;font-family:var(--mono)} +.table-wrap{overflow-x:auto} + +/* controls */ +.btn{border:1px solid var(--line);background:var(--panel2);color:var(--text);padding:7px 13px;border-radius:8px;cursor:pointer;transition:.12s;white-space:nowrap} +.btn:hover{border-color:#3a4454;background:#232b3a} +.btn.primary{background:var(--accent2);border-color:#3a72e0;color:#fff} +.btn.primary:hover{background:#3a78f0} +.btn.danger{background:#3b1519;border-color:#7c2a2e;color:#ff8f92} +.btn.ghost{background:transparent} +.btn.small{padding:4px 9px;font-size:12px;border-radius:6px} +.btn.block{width:100%} +.btn:disabled{opacity:.5;cursor:not-allowed} +input,select,textarea{background:#0e131a;border:1px solid var(--line);color:var(--text);padding:8px 10px;border-radius:8px;font:inherit;width:100%;outline:none} +input:focus,select:focus,textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(76,141,255,.15)} +textarea{resize:vertical;min-height:96px;font-family:var(--mono);font-size:13px} +label{display:block;font-size:12px;color:var(--muted);margin-bottom:5px} +.field{margin-bottom:12px} +.row{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap} +.row>.field{flex:1;min-width:150px;margin-bottom:0} +.toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;justify-content:space-between} +.switch{position:relative;display:inline-block;width:38px;height:21px;flex:0 0 38px} +.switch input{opacity:0;width:0;height:0} +.slider{position:absolute;inset:0;background:#2a3140;border-radius:20px;transition:.15s;cursor:pointer} +.slider:before{content:"";position:absolute;width:15px;height:15px;left:3px;top:3px;background:#8b949e;border-radius:50%;transition:.15s} +.switch input:checked+.slider{background:var(--accent2)} +.switch input:checked+.slider:before{transform:translateX(17px);background:#fff} +.pill{display:inline-block;padding:2px 8px;border-radius:20px;font-size:11px;border:1px solid var(--line);color:var(--muted)} +.pill.on{color:var(--ok);border-color:#1f6a34;background:#0f2318} +.pill.off{color:var(--dim)} + +/* console / logs */ +.log-box{background:#0a0e14;border:1px solid var(--line);border-radius:10px;padding:10px;height:56vh;overflow:auto;font-family:var(--mono);font-size:12.5px;line-height:1.55} +.log-line{white-space:pre-wrap;word-break:break-word;padding:1px 0} +.log-line .t{color:var(--dim)} +.log-line .lv{font-weight:700} +.lv-DEBUG{color:#7d8590}.lv-INFO{color:#58a6ff}.lv-WARN{color:#d29922}.lv-ERROR{color:#f85149} +.out-box{background:#0a0e14;border:1px solid var(--line);border-radius:10px;padding:14px;min-height:220px;white-space:pre-wrap;word-break:break-word;font-family:var(--mono);font-size:13px} +.caret{display:inline-block;width:7px;height:15px;background:var(--accent);animation:blink 1s steps(2) infinite;vertical-align:-2px} +@keyframes blink{50%{opacity:0}} + +/* misc */ +.section-title{font-size:14px;font-weight:650;margin:4px 0 2px;display:flex;justify-content:space-between;align-items:center} +.muted{color:var(--muted)} +.dim{color:var(--dim);font-size:12px} +.right{margin-left:auto} +.mt{margin-top:12px} +.tag{font-family:var(--mono);font-size:12px;background:#1b2230;border:1px solid var(--line);padding:2px 7px;border-radius:6px} +.empty{padding:34px;text-align:center;color:var(--dim)} +.bar{height:6px;background:#1b2230;border-radius:6px;overflow:hidden;margin-top:8px} +.bar>i{display:block;height:100%;background:linear-gradient(90deg,var(--accent2),#63a4ff)} +.toast{position:fixed;right:20px;bottom:20px;background:#1b2432;border:1px solid #33405a;color:var(--text);padding:11px 16px;border-radius:10px;z-index:50;box-shadow:0 8px 30px rgba(0,0,0,.5);max-width:420px} +.toast.err{border-color:#7c2a2e;background:#2a1315;color:#ffb3b6} +.toast.ok{border-color:#1f6a34;background:#0f2318;color:#9be8ac} + +/* login */ +.overlay{position:fixed;inset:0;background:rgba(5,8,12,.9);display:flex;align-items:center;justify-content:center;z-index:100;backdrop-filter:blur(6px)} +.login-card{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:32px;width:360px;box-shadow:0 20px 70px rgba(0,0,0,.6)} +.login-brand{font-size:22px;font-weight:750;letter-spacing:-.4px} +.login-sub{color:var(--muted);margin-bottom:22px;font-size:13px} +.login-card input{margin-bottom:12px} +.login-error{color:var(--err);font-size:12.5px;min-height:18px;margin-top:8px} +.login-hint{color:var(--dim);font-size:11.5px;margin-top:16px;line-height:1.6} +.login-hint code{color:var(--muted);background:#0e131a;padding:1px 5px;border-radius:4px} + +@media(max-width:860px){ + .sidebar{position:fixed;z-index:20;transform:translateX(-100%);transition:.2s} + .app{padding-bottom:60px} + .view{padding:14px} +} diff --git a/internal/anthropic/convert.go b/internal/anthropic/convert.go new file mode 100644 index 0000000..4404e5f --- /dev/null +++ b/internal/anthropic/convert.go @@ -0,0 +1,213 @@ +package anthropic + +import ( + "bytes" + "crypto/rand" + "encoding/hex" + "encoding/json" + "strings" + + "github.com/nyoungo/dsfree2api/internal/openai" +) + +// ToOpenAI converts an Anthropic Messages request into OpenAI-style chat +// messages, function tools and a tool_choice value usable by BuildPrompt. +func ToOpenAI(req *Request) ([]openai.ChatMessage, []openai.ToolDef, json.RawMessage, error) { + var out []openai.ChatMessage + if len(req.System) > 0 { + if s := systemText(req.System); s != "" { + out = append(out, openai.ChatMessage{Role: "system", Content: openai.MessageContent{Text: s}}) + } + } + for _, m := range req.Messages { + role := m.Role + if role == "" { + role = "user" + } + if len(m.Content.Blocks) == 0 { + out = append(out, openai.ChatMessage{Role: role, Content: openai.MessageContent{Text: m.Content.Text}}) + continue + } + if role == "assistant" { + text, calls := splitAssistant(m.Content.Blocks) + out = append(out, openai.ChatMessage{ + Role: "assistant", Content: openai.MessageContent{Text: text}, ToolCalls: calls, + }) + continue + } + // user (or unknown): tool_result blocks become tool messages, text + // runs become user messages, preserving block order. + var run []string + flush := func() { + if len(run) > 0 { + out = append(out, openai.ChatMessage{Role: "user", Content: openai.MessageContent{Text: strings.Join(run, "\n")}}) + run = nil + } + } + for _, b := range m.Content.Blocks { + switch b.Type { + case "text": + if b.Text != "" { + run = append(run, b.Text) + } + case "tool_result": + flush() + out = append(out, openai.ChatMessage{ + Role: "tool", + ToolCallID: b.ToolUseID, + Content: openai.MessageContent{Text: rawToText(b.Content)}, + }) + default: + // image / thinking / unknown block types are not representable + // upstream as plain text — dropped. + } + } + flush() + } + tools := make([]openai.ToolDef, 0, len(req.Tools)) + for _, t := range req.Tools { + if t.Name == "" { + continue + } + schema := t.InputSchema + if len(schema) == 0 { + schema = json.RawMessage(`{"type":"object","properties":{}}`) + } + tools = append(tools, openai.ToolDef{ + Type: "function", + Function: openai.Function{Name: t.Name, Description: t.Description, Parameters: schema}, + }) + } + var tc json.RawMessage + if req.ToolChoice != nil { + tc = toolChoiceToOpenAI(req.ToolChoice) + } + return out, tools, tc, nil +} + +// ContentFrom builds response content blocks from plain prose plus tool calls +// parsed out of the model output. +func ContentFrom(text string, calls []openai.ToolCall) []Block { + blocks := make([]Block, 0, len(calls)+1) + if text != "" { + blocks = append(blocks, Block{Type: "text", Text: text}) + } + for _, c := range calls { + id := c.ID + if id == "" { + id = NewID("toolu_") + } + input := json.RawMessage("{}") + if s := strings.TrimSpace(c.Function.Arguments); s != "" && json.Valid([]byte(s)) { + input = json.RawMessage(s) + } + blocks = append(blocks, Block{Type: "tool_use", ID: id, Name: c.Function.Name, Input: input}) + } + return blocks +} + +// StopReasonFor maps the presence of tool calls onto Anthropic stop reasons. +func StopReasonFor(calls []openai.ToolCall) string { + if len(calls) > 0 { + return "tool_use" + } + return "end_turn" +} + +// NewID returns a random hex id with the given prefix (e.g. "toolu_"). +func NewID(prefix string) string { + b := make([]byte, 12) + _, _ = rand.Read(b) + return prefix + hex.EncodeToString(b) +} + +func splitAssistant(blocks []Block) (string, []openai.ToolCall) { + var texts []string + var calls []openai.ToolCall + for _, b := range blocks { + switch b.Type { + case "text": + if b.Text != "" { + texts = append(texts, b.Text) + } + case "tool_use": + args := "{}" + if len(b.Input) > 0 && string(b.Input) != "null" { + args = string(b.Input) + } + id := b.ID + if id == "" { + id = NewID("toolu_") + } + calls = append(calls, openai.ToolCall{ + ID: id, Type: "function", + Function: openai.FunctionCall{Name: b.Name, Arguments: args}, + }) + } + } + return strings.Join(texts, "\n"), calls +} + +// systemText accepts either a plain string or an array of text blocks. +func systemText(raw json.RawMessage) string { + raw = trimSpace(raw) + if len(raw) == 0 || string(raw) == "null" { + return "" + } + if raw[0] == '"' { + var s string + if json.Unmarshal(raw, &s) == nil { + return s + } + return "" + } + return rawToText(raw) +} + +// rawToText flattens a string or an array of text blocks into plain text. +func rawToText(raw json.RawMessage) string { + raw = trimSpace(raw) + if len(raw) == 0 || string(raw) == "null" { + return "" + } + if raw[0] == '"' { + var s string + if json.Unmarshal(raw, &s) == nil { + return s + } + return "" + } + if raw[0] == '[' { + var blocks []Block + if json.Unmarshal(raw, &blocks) == nil { + var parts []string + for _, b := range blocks { + if b.Type == "text" && b.Text != "" { + parts = append(parts, b.Text) + } + } + return strings.Join(parts, "\n") + } + return "" + } + return string(raw) +} + +func toolChoiceToOpenAI(tc *ToolChoice) json.RawMessage { + switch tc.Type { + case "tool": + if tc.Name == "" { + return nil + } + raw, _ := json.Marshal(map[string]any{"type": "function", "function": map[string]string{"name": tc.Name}}) + return raw + case "any": + return json.RawMessage(`"required"`) + case "none": + return json.RawMessage(`"none"`) + default: + return json.RawMessage(`"auto"`) + } +} + +func trimSpace(b []byte) []byte { return bytes.TrimSpace(b) } diff --git a/internal/anthropic/convert_test.go b/internal/anthropic/convert_test.go new file mode 100644 index 0000000..039c708 --- /dev/null +++ b/internal/anthropic/convert_test.go @@ -0,0 +1,157 @@ +package anthropic + +import ( + "encoding/json" + "strings" + "testing" + + "github.com/nyoungo/dsfree2api/internal/openai" +) + +func TestToOpenAIFullRequest(t *testing.T) { + var req Request + body := `{ + "model": "deepseek-v4-flash-de", + "max_tokens": 1024, + "system": "Be terse.", + "messages": [ + {"role": "user", "content": "What is the weather in Beijing?"}, + {"role": "assistant", "content": [ + {"type": "text", "text": "Let me check."}, + {"type": "tool_use", "id": "toolu_1", "name": "get_weather", + "input": {"city": "Beijing"}} + ]}, + {"role": "user", "content": [ + {"type": "tool_result", "tool_use_id": "toolu_1", "content": "Sunny, 25C"} + ]} + ], + "tools": [ + {"name": "get_weather", "description": "Get weather", + "input_schema": {"type": "object", "properties": {"city": {"type": "string"}}}} + ], + "tool_choice": {"type": "tool", "name": "get_weather"} + }` + if err := json.Unmarshal([]byte(body), &req); err != nil { + t.Fatalf("decode: %v", err) + } + msgs, tools, tc, err := ToOpenAI(&req) + if err != nil { + t.Fatalf("to_openai: %v", err) + } + if len(msgs) != 4 { + t.Fatalf("len(msgs) = %d, want 4: %+v", len(msgs), msgs) + } + roles := []string{msgs[0].Role, msgs[1].Role, msgs[2].Role, msgs[3].Role} + want := []string{"system", "user", "assistant", "tool"} + for i, r := range want { + if roles[i] != r { + t.Errorf("msgs[%d].Role = %q, want %q", i, roles[i], r) + } + } + if msgs[0].Content.Text != "Be terse." { + t.Errorf("system = %q", msgs[0].Content.Text) + } + asst := msgs[2] + if len(asst.ToolCalls) != 1 || asst.ToolCalls[0].Function.Name != "get_weather" { + t.Fatalf("assistant tool_calls = %+v", asst.ToolCalls) + } + if asst.ToolCalls[0].ID != "toolu_1" { + t.Errorf("tool call id = %q", asst.ToolCalls[0].ID) + } + if !strings.Contains(asst.ToolCalls[0].Function.Arguments, `"city"`) || + !strings.Contains(asst.ToolCalls[0].Function.Arguments, "Beijing") { + t.Errorf("arguments = %q", asst.ToolCalls[0].Function.Arguments) + } + if msgs[3].ToolCallID != "toolu_1" || msgs[3].Content.Text != "Sunny, 25C" { + t.Errorf("tool result = %+v", msgs[3]) + } + if len(tools) != 1 || tools[0].Function.Name != "get_weather" { + t.Fatalf("tools = %+v", tools) + } + if !strings.Contains(string(tools[0].Function.Parameters), "city") { + t.Errorf("parameters = %s", tools[0].Function.Parameters) + } + var forced map[string]any + if err := json.Unmarshal(tc, &forced); err != nil { + t.Fatalf("tool_choice: %v", err) + } + if forced["type"] != "function" { + t.Errorf("tool_choice = %s", tc) + } +} + +func TestToOpenAIStringContentAndSystemArray(t *testing.T) { + var req Request + body := `{ + "model": "m", + "system": [{"type": "text", "text": "Rule A"}, {"type": "text", "text": "Rule B"}], + "messages": [{"role": "user", "content": "Hi"}] + }` + if err := json.Unmarshal([]byte(body), &req); err != nil { + t.Fatalf("decode: %v", err) + } + msgs, _, _, err := ToOpenAI(&req) + if err != nil { + t.Fatalf("to_openai: %v", err) + } + if len(msgs) != 2 { + t.Fatalf("len(msgs) = %d, want 2", len(msgs)) + } + if !strings.Contains(msgs[0].Content.Text, "Rule A") || !strings.Contains(msgs[0].Content.Text, "Rule B") { + t.Errorf("system = %q", msgs[0].Content.Text) + } + if msgs[1].Role != "user" || msgs[1].Content.Text != "Hi" { + t.Errorf("user = %+v", msgs[1]) + } +} + +func TestToOpenAIToolChoiceVariants(t *testing.T) { + for _, tc := range []struct { + in string + want string + }{ + {`{"type":"auto"}`, `"auto"`}, + {`{"type":"any"}`, `"required"`}, + {`{"type":"none"}`, `"none"`}, + } { + choice := &ToolChoice{} + if err := json.Unmarshal([]byte(tc.in), choice); err != nil { + t.Fatalf("decode %s: %v", tc.in, err) + } + raw := toolChoiceToOpenAI(choice) + if string(raw) != tc.want { + t.Errorf("%s -> %s, want %s", tc.in, raw, tc.want) + } + } +} + +func TestContentFrom(t *testing.T) { + calls := []openai.ToolCall{{ + ID: "call_1", Type: "function", + Function: openai.FunctionCall{Name: "get_weather", Arguments: `{"city":"Paris"}`}, + }} + blocks := ContentFrom("Checking now.", calls) + if len(blocks) != 2 || blocks[0].Type != "text" || blocks[1].Type != "tool_use" { + t.Fatalf("blocks = %+v", blocks) + } + if blocks[1].ID != "call_1" || blocks[1].Name != "get_weather" { + t.Errorf("tool_use = %+v", blocks[1]) + } + if string(blocks[1].Input) != `{"city":"Paris"}` { + t.Errorf("input = %s", blocks[1].Input) + } + if StopReasonFor(calls) != "tool_use" || StopReasonFor(nil) != "end_turn" { + t.Errorf("stop reasons wrong") + } +} + +func TestContentFromInvalidArgumentsFallBackToEmptyObject(t *testing.T) { + calls := []openai.ToolCall{{ + ID: "c", Type: "function", + Function: openai.FunctionCall{Name: "x", Arguments: `not json`}, + }} + blocks := ContentFrom("", calls) + if len(blocks) != 1 || string(blocks[0].Input) != "{}" { + t.Fatalf("blocks = %+v", blocks) + } +} diff --git a/internal/anthropic/types.go b/internal/anthropic/types.go new file mode 100644 index 0000000..b23da3f --- /dev/null +++ b/internal/anthropic/types.go @@ -0,0 +1,105 @@ +package anthropic + +import ( + "encoding/json" +) + +// Request is the body of POST /v1/messages (Anthropic Messages API). +type Request struct { + Model string `json:"model"` + MaxTokens int `json:"max_tokens"` + System json.RawMessage `json:"system,omitempty"` + Messages []Message `json:"messages"` + Tools []ToolDef `json:"tools,omitempty"` + ToolChoice *ToolChoice `json:"tool_choice,omitempty"` + Temperature *float64 `json:"temperature,omitempty"` + TopP *float64 `json:"top_p,omitempty"` + TopK *int `json:"top_k,omitempty"` + StopSequences []string `json:"stop_sequences,omitempty"` + Stream bool `json:"stream,omitempty"` + Metadata *Metadata `json:"metadata,omitempty"` +} + +type Metadata struct { + UserID string `json:"user_id,omitempty"` +} + +type Message struct { + Role string `json:"role"` + Content Content `json:"content"` +} + +// Content is either a plain string or an array of content blocks. +type Content struct { + Text string + Blocks []Block +} + +func (c *Content) UnmarshalJSON(data []byte) error { + data = trimSpace(data) + if len(data) == 0 || string(data) == "null" { + c.Text, c.Blocks = "", nil + return nil + } + if data[0] == '"' { + var s string + if err := json.Unmarshal(data, &s); err != nil { + return err + } + c.Text, c.Blocks = s, nil + return nil + } + var blocks []Block + if err := json.Unmarshal(data, &blocks); err != nil { + return err + } + c.Blocks, c.Text = blocks, "" + return nil +} + +func (c Content) MarshalJSON() ([]byte, error) { + if c.Blocks != nil { + return json.Marshal(c.Blocks) + } + return json.Marshal(c.Text) +} + +// Block is one content block of a message, request or response side. +type Block struct { + Type string `json:"type"` + Text string `json:"text,omitempty"` + ID string `json:"id,omitempty"` + Name string `json:"name,omitempty"` + Input json.RawMessage `json:"input,omitempty"` + ToolUseID string `json:"tool_use_id,omitempty"` + Content json.RawMessage `json:"content,omitempty"` + IsError bool `json:"is_error,omitempty"` +} + +type ToolDef struct { + Name string `json:"name"` + Description string `json:"description,omitempty"` + InputSchema json.RawMessage `json:"input_schema,omitempty"` +} + +type ToolChoice struct { + Type string `json:"type"` // "auto" | "any" | "tool" | "none" + Name string `json:"name,omitempty"` +} + +// Response is the body of a completed non-streaming /v1/messages call. +type Response struct { + ID string `json:"id"` + Type string `json:"type"` + Role string `json:"role"` + Model string `json:"model"` + Content []Block `json:"content"` + StopReason string `json:"stop_reason"` + StopSequence *string `json:"stop_sequence"` + Usage Usage `json:"usage"` +} + +type Usage struct { + InputTokens int `json:"input_tokens"` + OutputTokens int `json:"output_tokens"` +} diff --git a/internal/api/api_test.go b/internal/api/api_test.go new file mode 100644 index 0000000..6561029 --- /dev/null +++ b/internal/api/api_test.go @@ -0,0 +1,236 @@ +package api + +import ( + "encoding/json" + "io" + "log/slog" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/nyoungo/dsfree2api/internal/config" + "github.com/nyoungo/dsfree2api/internal/logbuf" + "github.com/nyoungo/dsfree2api/internal/metrics" + "github.com/nyoungo/dsfree2api/internal/turnstile" +) + +const examplePath = "../../config.example.toml" +const testKey = "sk-dsfr-local-change-me" + +func newTestServer(t *testing.T, mutate func(*config.Config)) *httptest.Server { + t.Helper() + cfg, err := config.Load(examplePath) + if err != nil { + t.Fatalf("load config: %v", err) + } + cfg.Security.APIKeys = []string{testKey} + if mutate != nil { + mutate(cfg) + } + met := metrics.New(t.TempDir()) + met.Start() + t.Cleanup(met.Close) + logs := logbuf.New(50) + ts := turnstile.New(cfg.Turnstile, "") + srv := New(cfg, nil, met, logs, ts, slog.New(slog.NewTextHandler(io.Discard, nil))) + tsrv := httptest.NewServer(srv.Handler()) + t.Cleanup(tsrv.Close) + return tsrv +} + +func get(t *testing.T, url string, headers map[string]string) (*http.Response, string) { + t.Helper() + req, err := http.NewRequest(http.MethodGet, url, nil) + if err != nil { + t.Fatalf("new request: %v", err) + } + for k, v := range headers { + req.Header.Set(k, v) + } + resp, err := http.DefaultClient.Do(req) + if err != nil { + t.Fatalf("do: %v", err) + } + body, _ := io.ReadAll(resp.Body) + resp.Body.Close() + return resp, string(body) +} + +func TestModelsRequiresAuth(t *testing.T) { + srv := newTestServer(t, nil) + resp, _ := get(t, srv.URL+"/v1/models", nil) + if resp.StatusCode != http.StatusUnauthorized { + t.Fatalf("status = %d, want 401", resp.StatusCode) + } +} + +func TestModelsRejectsWrongKey(t *testing.T) { + srv := newTestServer(t, nil) + resp, _ := get(t, srv.URL+"/v1/models", map[string]string{"Authorization": "Bearer sk-wrong"}) + if resp.StatusCode != http.StatusUnauthorized { + t.Fatalf("status = %d, want 401", resp.StatusCode) + } +} + +func TestModelsListsWithAuth(t *testing.T) { + srv := newTestServer(t, nil) + resp, body := get(t, srv.URL+"/v1/models", map[string]string{"Authorization": "Bearer " + testKey}) + if resp.StatusCode != http.StatusOK { + t.Fatalf("status = %d body=%s", resp.StatusCode, body) + } + var out struct { + Data []struct { + ID string `json:"id"` + } `json:"data"` + } + if err := json.Unmarshal([]byte(body), &out); err != nil { + t.Fatalf("decode: %v", err) + } + if len(out.Data) != 6 { + t.Fatalf("len(data) = %d, want 6", len(out.Data)) + } + ids := map[string]bool{} + for _, m := range out.Data { + ids[m.ID] = true + } + for _, want := range []string{"deepseek-v4-flash-es", "deepseek-v4-pro-de"} { + if !ids[want] { + t.Errorf("missing model %q", want) + } + } +} + +func TestModelsWithXApiKeyHeader(t *testing.T) { + srv := newTestServer(t, nil) + resp, _ := get(t, srv.URL+"/v1/models", map[string]string{"X-Api-Key": testKey}) + if resp.StatusCode != http.StatusOK { + t.Fatalf("status = %d, want 200", resp.StatusCode) + } +} + +func TestNoKeysMeansNoAuth(t *testing.T) { + srv := newTestServer(t, func(c *config.Config) { c.Security.APIKeys = nil }) + resp, _ := get(t, srv.URL+"/v1/models", nil) + if resp.StatusCode != http.StatusOK { + t.Fatalf("status = %d, want 200", resp.StatusCode) + } +} + +func TestRateLimit(t *testing.T) { + srv := newTestServer(t, func(c *config.Config) { c.Limits.RatePerMinute = 1 }) + h := map[string]string{"Authorization": "Bearer " + testKey} + if resp, _ := get(t, srv.URL+"/v1/models", h); resp.StatusCode != http.StatusOK { + t.Fatalf("first status = %d, want 200", resp.StatusCode) + } + if resp, _ := get(t, srv.URL+"/v1/models", h); resp.StatusCode != http.StatusTooManyRequests { + t.Fatalf("second status = %d, want 429", resp.StatusCode) + } +} + +func TestHealthAndRoot(t *testing.T) { + srv := newTestServer(t, nil) + resp, body := get(t, srv.URL+"/health", nil) + if resp.StatusCode != http.StatusOK { + t.Fatalf("health status = %d", resp.StatusCode) + } + var health map[string]any + if err := json.Unmarshal([]byte(body), &health); err != nil { + t.Fatalf("decode: %v", err) + } + if health["status"] != "ok" { + t.Errorf("health = %v", health) + } + if _, ok := health["models"]; !ok { + t.Errorf("health missing models: %v", health) + } +} + +func TestUnknownRouteIs404(t *testing.T) { + srv := newTestServer(t, nil) + resp, _ := get(t, srv.URL+"/v1/nope", map[string]string{"Authorization": "Bearer " + testKey}) + if resp.StatusCode != http.StatusNotFound { + t.Fatalf("status = %d, want 404", resp.StatusCode) + } +} + +func post(t *testing.T, url string, headers map[string]string, body string) (*http.Response, string) { + t.Helper() + req, err := http.NewRequest(http.MethodPost, url, strings.NewReader(body)) + if err != nil { + t.Fatalf("new request: %v", err) + } + for k, v := range headers { + req.Header.Set(k, v) + } + resp, err := http.DefaultClient.Do(req) + if err != nil { + t.Fatalf("do: %v", err) + } + raw, _ := io.ReadAll(resp.Body) + resp.Body.Close() + return resp, string(raw) +} + +func anthropicErrType(body string) string { + var out struct { + Type string `json:"type"` + Error struct { + Type string `json:"type"` + } `json:"error"` + } + _ = json.Unmarshal([]byte(body), &out) + if out.Type == "error" { + return out.Error.Type + } + return "" +} + +func TestMessagesRequiresAuthInAnthropicFormat(t *testing.T) { + srv := newTestServer(t, nil) + resp, body := post(t, srv.URL+"/v1/messages", nil, `{}`) + if resp.StatusCode != http.StatusUnauthorized { + t.Fatalf("status = %d body=%s, want 401", resp.StatusCode, body) + } + if got := anthropicErrType(body); got != "authentication_error" { + t.Errorf("error type = %q, want authentication_error; body=%s", got, body) + } +} + +func TestMessagesValidation(t *testing.T) { + srv := newTestServer(t, nil) + h := map[string]string{"Authorization": "Bearer " + testKey, "Content-Type": "application/json"} + + resp, body := post(t, srv.URL+"/v1/messages", h, `{}`) + if resp.StatusCode != http.StatusBadRequest { + t.Fatalf("empty body status = %d body=%s, want 400", resp.StatusCode, body) + } + if got := anthropicErrType(body); got != "invalid_request_error" { + t.Errorf("error type = %q, want invalid_request_error", got) + } + + resp, body = post(t, srv.URL+"/v1/messages", h, + `{"model":"no-such-model","messages":[{"role":"user","content":"hi"}]}`) + if resp.StatusCode != http.StatusNotFound { + t.Fatalf("unknown model status = %d body=%s, want 404", resp.StatusCode, body) + } + if got := anthropicErrType(body); got != "not_found_error" { + t.Errorf("error type = %q, want not_found_error", got) + } +} + +func TestResponsesValidation(t *testing.T) { + srv := newTestServer(t, nil) + h := map[string]string{"Authorization": "Bearer " + testKey, "Content-Type": "application/json"} + + resp, body := post(t, srv.URL+"/v1/responses", h, `{"model":"deepseek-v4-flash-de"}`) + if resp.StatusCode != http.StatusBadRequest { + t.Fatalf("missing input status = %d body=%s, want 400", resp.StatusCode, body) + } + + resp, body = post(t, srv.URL+"/v1/responses", h, + `{"model":"no-such-model","input":"hi"}`) + if resp.StatusCode != http.StatusNotFound { + t.Fatalf("unknown model status = %d body=%s, want 404", resp.StatusCode, body) + } +} diff --git a/internal/api/chat.go b/internal/api/chat.go new file mode 100644 index 0000000..1f3a933 --- /dev/null +++ b/internal/api/chat.go @@ -0,0 +1,413 @@ +package api + +import ( + "context" + "crypto/rand" + "encoding/hex" + "encoding/json" + "fmt" + "net/http" + "strings" + "time" + "unicode/utf8" + + "github.com/nyoungo/dsfree2api/internal/metrics" + "github.com/nyoungo/dsfree2api/internal/openai" + "github.com/nyoungo/dsfree2api/internal/upstream" +) + +func (s *Server) handleChat(w http.ResponseWriter, r *http.Request) { + var req openai.ChatCompletionRequest + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + writeError(w, http.StatusBadRequest, "invalid JSON body: "+err.Error(), "invalid_request_error") + return + } + if req.Model == "" { + writeError(w, http.StatusBadRequest, "model is required", "invalid_request_error") + return + } + if len(req.Messages) == 0 { + writeError(w, http.StatusBadRequest, "messages is required", "invalid_request_error") + return + } + s.cfg.RLock() + m, ok := s.cfg.Models[req.Model] + site := "" + enabled := false + if ok { + site = m.Site + enabled = m.Enabled + } + s.cfg.RUnlock() + if !ok || !enabled { + writeError(w, http.StatusNotFound, "model not found: "+req.Model, "invalid_request_error") + return + } + + maxTokens := req.MaxTokens + if maxTokens == nil { + maxTokens = req.MaxCompletionTok + } + prompt := openai.BuildPrompt(req.Messages, openai.PromptOptions{ + Tools: req.Tools, + ToolChoice: req.ToolChoice, + Temperature: req.Temperature, + TopP: req.TopP, + MaxTokens: maxTokens, + Stop: req.Stop, + ResponseFormat: req.ResponseFormat, + }) + + ctx, cancel := s.upstreamCtx(r) + defer cancel() + + s.met.IncInFlight(1) + defer s.met.IncInFlight(-1) + + if req.Stream { + s.streamChat(ctx, w, req, prompt, site) + return + } + s.completeChat(ctx, w, req, prompt, site) +} + +// chatOutcome is the result of replaying one upstream conversation. +type chatOutcome struct { + body string + usage openai.Usage + servedBy string + servedSite string + duration time.Duration + ttft time.Duration + status metrics.Status + err error +} + +// collect runs a full (non-streaming) conversation against the upstream site +// and records metrics for it. +func (s *Server) collect(ctx context.Context, modelID, prompt, site string) chatOutcome { + start := time.Now() + info := &upstream.ServeInfo{} + var text strings.Builder + var firstDelta time.Time + + err := s.up.Chat(ctx, modelID, prompt, info, func(ev upstream.Event) error { + if ev.Kind == upstream.KindDelta && ev.Value != "" { + if firstDelta.IsZero() { + firstDelta = time.Now() + } + text.WriteString(ev.Value) + } + return nil + }) + + body := text.String() + servedBy, servedSite, _ := info.Get() + if servedSite == "" { + servedSite = site + } + status := metrics.StatusOK + switch { + case err != nil: + status = metrics.StatusError + case strings.TrimSpace(body) == "": + status = metrics.StatusEmpty + } + usage := estimateUsage(prompt, body) + s.met.Record(metrics.Record{ + Model: modelID, + ServedBy: servedBy, + Site: servedSite, + Stream: false, + DurationMs: time.Since(start).Milliseconds(), + TTFTMs: msSince(firstDelta, start), + PromptTokens: usage.PromptTokens, + CompletionTokens: usage.CompletionTokens, + Status: status, + Error: errString(err), + }) + return chatOutcome{ + body: body, usage: usage, servedBy: servedBy, servedSite: servedSite, + duration: time.Since(start), ttft: firstDelta.Sub(start), status: status, err: err, + } +} + +func (s *Server) completeChat(ctx context.Context, w http.ResponseWriter, req openai.ChatCompletionRequest, prompt, site string) { + out := s.collect(ctx, req.Model, prompt, site) + if out.err != nil { + writeUpstreamError(w, out.err) + return + } + if out.status == metrics.StatusEmpty { + writeError(w, http.StatusBadGateway, emptyResponseMessage, "upstream_empty_response") + return + } + writeJSON(w, http.StatusOK, buildCompletion(req, prompt, out.body)) +} + +func buildCompletion(req openai.ChatCompletionRequest, prompt, body string) *openai.ChatCompletionResponse { + message := openai.ChoiceMessage{Content: body} + if len(req.Tools) > 0 { + remaining, calls, ok := openai.TryParseToolCalls(body) + if ok { + message.Content = remaining + message.ToolCalls = calls + } + } + return &openai.ChatCompletionResponse{ + ID: "chatcmpl-" + randHex(16), + Object: "chat.completion", + Created: time.Now().Unix(), + Model: req.Model, + Choices: []openai.Choice{{ + Index: 0, + Message: message, + FinishReason: finishReason(message.ToolCalls), + }}, + Usage: estimateUsage(prompt, body), + } +} + +func finishReason(calls []openai.ToolCall) string { + if len(calls) > 0 { + return "tool_calls" + } + return "stop" +} + +func (s *Server) streamChat(ctx context.Context, w http.ResponseWriter, req openai.ChatCompletionRequest, prompt, site string) { + flusher, _ := w.(http.Flusher) + w.Header().Set("Content-Type", "text/event-stream; charset=utf-8") + w.Header().Set("Cache-Control", "no-cache") + w.Header().Set("Connection", "keep-alive") + w.Header().Set("X-Accel-Buffering", "no") + + start := time.Now() + id := "chatcmpl-" + randHex(16) + created := time.Now().Unix() + info := &upstream.ServeInfo{} + var text strings.Builder + var firstDelta time.Time + + // When tools are requested the whole reply is buffered so the raw + // tool-call JSON is never streamed to the client twice. + buffered := len(req.Tools) > 0 + + write := func(v any) error { + raw, err := json.Marshal(v) + if err != nil { + return err + } + if _, err := fmt.Fprintf(w, "data: %s\n\n", raw); err != nil { + return err + } + if flusher != nil { + flusher.Flush() + } + return nil + } + chunk := func(delta openai.ChoiceDelta, finish *string) openai.ChatCompletionChunk { + return openai.ChatCompletionChunk{ + ID: id, + Object: "chat.completion.chunk", + Created: created, + Model: req.Model, + Choices: []openai.StreamChoice{{Delta: delta, FinishReason: finish}}, + } + } + + _ = write(chunk(openai.ChoiceDelta{Role: "assistant"}, nil)) + + s.met.IncInFlight(1) + defer s.met.IncInFlight(-1) + + err := s.up.Chat(ctx, req.Model, prompt, info, func(ev upstream.Event) error { + if ev.Kind != upstream.KindDelta || ev.Value == "" { + return nil + } + if firstDelta.IsZero() { + firstDelta = time.Now() + } + text.WriteString(ev.Value) + if buffered { + return nil + } + return write(chunk(openai.ChoiceDelta{Content: ev.Value}, nil)) + }) + + duration := time.Since(start) + body := text.String() + servedBy, servedSite, _ := info.Get() + if servedSite == "" { + servedSite = site + } + + if err != nil { + s.met.Record(metrics.Record{ + Model: req.Model, ServedBy: servedBy, Site: servedSite, Stream: true, + DurationMs: duration.Milliseconds(), TTFTMs: msSince(firstDelta, start), + PromptTokens: estimateUsage(prompt, "").PromptTokens, + Status: metrics.StatusError, Error: err.Error(), + }) + s.log.Warn("stream error", "model", req.Model, "error", err) + _ = write(map[string]any{ + "error": map[string]any{"message": err.Error(), "type": "upstream_error"}, + }) + _, _ = fmt.Fprint(w, "data: [DONE]\n\n") + if flusher != nil { + flusher.Flush() + } + return + } + + if strings.TrimSpace(body) == "" { + s.met.Record(metrics.Record{ + Model: req.Model, ServedBy: servedBy, Site: servedSite, Stream: true, + DurationMs: duration.Milliseconds(), + Status: metrics.StatusEmpty, Error: "empty response", + }) + _ = write(map[string]any{ + "error": map[string]any{"message": emptyResponseMessage, "type": "upstream_empty_response"}, + }) + _, _ = fmt.Fprint(w, "data: [DONE]\n\n") + if flusher != nil { + flusher.Flush() + } + return + } + + usage := estimateUsage(prompt, body) + var toolCalls []openai.ToolCall + content := body + if buffered { + remaining, calls, ok := openai.TryParseToolCalls(body) + if ok { + content = remaining + toolCalls = calls + } + } + stop := finishReason(toolCalls) + + // Final chunk: content + tool_calls (or plain stop marker). + final := map[string]any{ + "id": id, + "object": "chat.completion.chunk", + "created": created, + "model": req.Model, + "choices": []map[string]any{{ + "index": 0, + "delta": map[string]any{}, + "finish_reason": stop, + }}, + } + deltaPayload := map[string]any{} + if content != "" { + deltaPayload["content"] = content + } + if len(toolCalls) > 0 { + deltaPayload["tool_calls"] = toolCalls + } + if len(deltaPayload) > 0 { + final["choices"] = []map[string]any{{ + "index": 0, + "delta": deltaPayload, + "finish_reason": stop, + }} + } + _ = write(final) + + includeUsage := req.StreamOptions != nil && req.StreamOptions.IncludeUsage + if includeUsage { + _ = write(map[string]any{ + "id": id, "object": "chat.completion.chunk", "created": created, "model": req.Model, + "choices": []map[string]any{}, + "usage": usage, + }) + } + _, _ = fmt.Fprint(w, "data: [DONE]\n\n") + if flusher != nil { + flusher.Flush() + } + + s.met.Record(metrics.Record{ + Model: req.Model, ServedBy: servedBy, Site: servedSite, Stream: true, + DurationMs: duration.Milliseconds(), TTFTMs: msSince(firstDelta, start), + PromptTokens: usage.PromptTokens, CompletionTokens: usage.CompletionTokens, + Status: metrics.StatusOK, + }) +} + +const emptyResponseMessage = "upstream returned empty response — the server may be rate-limiting, overloaded, or the session/nonce expired. Retry in a few seconds." + +// upstreamCtx bounds one conversation with the configured stream timeout so a +// hung upstream can never wedge a request forever. +func (s *Server) upstreamCtx(r *http.Request) (context.Context, context.CancelFunc) { + s.cfg.RLock() + d := time.Duration(s.cfg.Upstream.StreamTimeout * float64(time.Second)) + s.cfg.RUnlock() + if d <= 0 { + d = 5 * time.Minute + } + return context.WithTimeout(r.Context(), d) +} + +func writeUpstreamError(w http.ResponseWriter, err error) { + code := http.StatusBadGateway + typ := "upstream_error" + if isTimeout(err) { + code = http.StatusGatewayTimeout + typ = "upstream_timeout" + } + writeError(w, code, err.Error(), typ) +} + +func isTimeout(err error) bool { + if err == nil { + return false + } + msg := strings.ToLower(err.Error()) + return strings.Contains(msg, "timeout") || strings.Contains(msg, "deadline exceeded") +} + +func errString(err error) string { + if err == nil { + return "" + } + return err.Error() +} + +func estimateUsage(prompt, text string) openai.Usage { + var pt, ct int + if prompt != "" { + pt = utf8.RuneCountInString(prompt) / 4 + if pt < 1 { + pt = 1 + } + } + if text != "" { + ct = utf8.RuneCountInString(text) / 4 + if ct < 1 { + ct = 1 + } + } + return openai.Usage{PromptTokens: pt, CompletionTokens: ct, TotalTokens: pt + ct} +} + +func msSince(t, fallback time.Time) int64 { + if t.IsZero() { + return 0 + } + d := t.Sub(fallback) + if d < 0 { + return 0 + } + return d.Milliseconds() +} + +func randHex(n int) string { + b := make([]byte, n) + if _, err := rand.Read(b); err != nil { + return strings.Repeat("0", n*2) + } + return hex.EncodeToString(b) +} diff --git a/internal/api/messages.go b/internal/api/messages.go new file mode 100644 index 0000000..4330183 --- /dev/null +++ b/internal/api/messages.go @@ -0,0 +1,289 @@ +package api + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "strings" + "time" + + "github.com/nyoungo/dsfree2api/internal/anthropic" + "github.com/nyoungo/dsfree2api/internal/metrics" + "github.com/nyoungo/dsfree2api/internal/openai" + "github.com/nyoungo/dsfree2api/internal/upstream" +) + +func (s *Server) handleMessages(w http.ResponseWriter, r *http.Request) { + var req anthropic.Request + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + writeAnthropicError(w, http.StatusBadRequest, "invalid JSON body: "+err.Error(), "invalid_request_error") + return + } + if req.Model == "" { + writeAnthropicError(w, http.StatusBadRequest, "model is required", "invalid_request_error") + return + } + if len(req.Messages) == 0 { + writeAnthropicError(w, http.StatusBadRequest, "messages is required", "invalid_request_error") + return + } + s.cfg.RLock() + m, ok := s.cfg.Models[req.Model] + site := "" + enabled := false + if ok { + site = m.Site + enabled = m.Enabled + } + s.cfg.RUnlock() + if !ok || !enabled { + writeAnthropicError(w, http.StatusNotFound, "model not found: "+req.Model, "not_found_error") + return + } + + messages, tools, toolChoice, err := anthropic.ToOpenAI(&req) + if err != nil { + writeAnthropicError(w, http.StatusBadRequest, err.Error(), "invalid_request_error") + return + } + var maxTokens *int + if req.MaxTokens > 0 { + maxTokens = &req.MaxTokens + } + prompt := openai.BuildPrompt(messages, openai.PromptOptions{ + Tools: tools, + ToolChoice: toolChoice, + Temperature: req.Temperature, + TopP: req.TopP, + MaxTokens: maxTokens, + Stop: req.StopSequences, + }) + + ctx, cancel := s.upstreamCtx(r) + defer cancel() + + s.met.IncInFlight(1) + defer s.met.IncInFlight(-1) + + if req.Stream { + s.streamMessages(ctx, w, req, prompt, site, tools) + return + } + s.completeMessages(ctx, w, req, prompt, site, tools) +} + +func (s *Server) completeMessages(ctx context.Context, w http.ResponseWriter, req anthropic.Request, prompt, site string, tools []openai.ToolDef) { + out := s.collect(ctx, req.Model, prompt, site) + if out.err != nil { + writeAnthropicUpstreamError(w, out.err) + return + } + if out.status == metrics.StatusEmpty { + writeAnthropicError(w, http.StatusInternalServerError, emptyResponseMessage, "api_error") + return + } + text, calls := splitToolOutput(out.body, tools) + resp := anthropic.Response{ + ID: anthropic.NewID("msg_"), + Type: "message", + Role: "assistant", + Model: req.Model, + Content: anthropic.ContentFrom(text, calls), + StopReason: anthropic.StopReasonFor(calls), + Usage: anthropic.Usage{ + InputTokens: out.usage.PromptTokens, + OutputTokens: out.usage.CompletionTokens, + }, + } + writeJSON(w, http.StatusOK, resp) +} + +func (s *Server) streamMessages(ctx context.Context, w http.ResponseWriter, req anthropic.Request, prompt, site string, tools []openai.ToolDef) { + flusher, _ := w.(http.Flusher) + w.Header().Set("Content-Type", "text/event-stream; charset=utf-8") + w.Header().Set("Cache-Control", "no-cache") + w.Header().Set("Connection", "keep-alive") + w.Header().Set("X-Accel-Buffering", "no") + + writeEvent := func(ev string, v any) error { + raw, err := json.Marshal(v) + if err != nil { + return err + } + if _, err := fmt.Fprintf(w, "event: %s\ndata: %s\n\n", ev, raw); err != nil { + return err + } + if flusher != nil { + flusher.Flush() + } + return nil + } + writeErr := func(typ, msg string) { + _ = writeEvent("error", map[string]any{ + "type": "error", + "error": map[string]any{"type": typ, "message": msg}, + }) + } + + msgID := anthropic.NewID("msg_") + _ = writeEvent("message_start", map[string]any{ + "type": "message_start", + "message": map[string]any{ + "id": msgID, "type": "message", "role": "assistant", "model": req.Model, + "content": []any{}, "stop_reason": nil, "stop_sequence": nil, + "usage": map[string]any{ + "input_tokens": estimateUsage(prompt, "").PromptTokens, + "output_tokens": 0, + }, + }, + }) + + // When tools are requested the reply is buffered so the raw tool-call + // JSON is parsed once and emitted as proper tool_use blocks instead of + // being streamed to the client as prose. + buffered := len(tools) > 0 + if !buffered { + _ = writeEvent("content_block_start", map[string]any{ + "type": "content_block_start", "index": 0, + "content_block": map[string]any{"type": "text", "text": ""}, + }) + } + + start := time.Now() + info := &upstream.ServeInfo{} + var text strings.Builder + var firstDelta time.Time + + err := s.up.Chat(ctx, req.Model, prompt, info, func(ev upstream.Event) error { + if ev.Kind != upstream.KindDelta || ev.Value == "" { + return nil + } + if firstDelta.IsZero() { + firstDelta = time.Now() + } + text.WriteString(ev.Value) + if buffered { + return nil + } + return writeEvent("content_block_delta", map[string]any{ + "type": "content_block_delta", "index": 0, + "delta": map[string]any{"type": "text_delta", "text": ev.Value}, + }) + }) + + duration := time.Since(start) + body := text.String() + servedBy, servedSite, _ := info.Get() + if servedSite == "" { + servedSite = site + } + + if err != nil { + s.met.Record(metrics.Record{ + Model: req.Model, ServedBy: servedBy, Site: servedSite, Stream: true, + DurationMs: duration.Milliseconds(), TTFTMs: msSince(firstDelta, start), + PromptTokens: estimateUsage(prompt, "").PromptTokens, + Status: metrics.StatusError, Error: err.Error(), + }) + s.log.Warn("messages stream error", "model", req.Model, "error", err) + writeErr("api_error", err.Error()) + return + } + if strings.TrimSpace(body) == "" { + s.met.Record(metrics.Record{ + Model: req.Model, ServedBy: servedBy, Site: servedSite, Stream: true, + DurationMs: duration.Milliseconds(), Status: metrics.StatusEmpty, Error: "empty response", + }) + writeErr("api_error", emptyResponseMessage) + return + } + + usage := estimateUsage(prompt, body) + outText, calls := splitToolOutput(body, tools) + + index := 0 + if !buffered { + _ = writeEvent("content_block_stop", map[string]any{"type": "content_block_stop", "index": 0}) + index = 1 + } else if outText != "" { + _ = writeEvent("content_block_start", map[string]any{ + "type": "content_block_start", "index": 0, + "content_block": map[string]any{"type": "text", "text": ""}, + }) + _ = writeEvent("content_block_delta", map[string]any{ + "type": "content_block_delta", "index": 0, + "delta": map[string]any{"type": "text_delta", "text": outText}, + }) + _ = writeEvent("content_block_stop", map[string]any{"type": "content_block_stop", "index": 0}) + index = 1 + } + for _, c := range calls { + id := c.ID + if id == "" { + id = anthropic.NewID("toolu_") + } + _ = writeEvent("content_block_start", map[string]any{ + "type": "content_block_start", "index": index, + "content_block": map[string]any{ + "type": "tool_use", "id": id, "name": c.Function.Name, + "input": json.RawMessage("{}"), + }, + }) + _ = writeEvent("content_block_delta", map[string]any{ + "type": "content_block_delta", "index": index, + "delta": map[string]any{"type": "input_json_delta", "partial_json": c.Function.Arguments}, + }) + _ = writeEvent("content_block_stop", map[string]any{"type": "content_block_stop", "index": index}) + index++ + } + _ = writeEvent("message_delta", map[string]any{ + "type": "message_delta", + "delta": map[string]any{"stop_reason": anthropic.StopReasonFor(calls), "stop_sequence": nil}, + "usage": map[string]any{"output_tokens": usage.CompletionTokens}, + }) + _ = writeEvent("message_stop", map[string]any{"type": "message_stop"}) + + s.met.Record(metrics.Record{ + Model: req.Model, ServedBy: servedBy, Site: servedSite, Stream: true, + DurationMs: duration.Milliseconds(), TTFTMs: msSince(firstDelta, start), + PromptTokens: usage.PromptTokens, CompletionTokens: usage.CompletionTokens, + Status: metrics.StatusOK, + }) +} + +// splitToolOutput peels tool calls off a raw model reply when tools were +// offered; plain replies pass through unchanged. +func splitToolOutput(body string, tools []openai.ToolDef) (string, []openai.ToolCall) { + if len(tools) == 0 { + return body, nil + } + remaining, calls, ok := openai.TryParseToolCalls(body) + if !ok { + return body, nil + } + return remaining, calls +} + +func writeAnthropicError(w http.ResponseWriter, code int, msg, typ string) { + switch code { + case http.StatusUnauthorized: + typ = "authentication_error" + case http.StatusNotFound: + typ = "not_found_error" + case http.StatusTooManyRequests: + typ = "rate_limit_error" + } + writeJSON(w, code, map[string]any{ + "type": "error", + "error": map[string]any{"type": typ, "message": msg}, + }) +} + +func writeAnthropicUpstreamError(w http.ResponseWriter, err error) { + if isTimeout(err) { + writeAnthropicError(w, http.StatusGatewayTimeout, err.Error(), "api_error") + return + } + writeAnthropicError(w, http.StatusBadGateway, err.Error(), "api_error") +} diff --git a/internal/api/ratelimit.go b/internal/api/ratelimit.go new file mode 100644 index 0000000..89d9014 --- /dev/null +++ b/internal/api/ratelimit.go @@ -0,0 +1,39 @@ +package api + +import ( + "sync" + "time" +) + +// limiter is a simple fixed one-minute window counter per API key. +type limiter struct { + mu sync.Mutex + window time.Time + counts map[string]int +} + +func newLimiter() *limiter { + return &limiter{counts: map[string]int{}, window: time.Now().Truncate(time.Minute)} +} + +func (l *limiter) allow(key string) bool { + return l.allowWithLimit(key, 0) +} + +func (l *limiter) allowWithLimit(key string, limit int) bool { + if limit <= 0 { + return true + } + l.mu.Lock() + defer l.mu.Unlock() + now := time.Now().Truncate(time.Minute) + if now.After(l.window) { + l.window = now + l.counts = map[string]int{} + } + if l.counts[key] >= limit { + return false + } + l.counts[key]++ + return true +} diff --git a/internal/api/responses.go b/internal/api/responses.go new file mode 100644 index 0000000..bd10ff3 --- /dev/null +++ b/internal/api/responses.go @@ -0,0 +1,326 @@ +package api + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "strings" + "time" + + "github.com/nyoungo/dsfree2api/internal/metrics" + "github.com/nyoungo/dsfree2api/internal/openai" + "github.com/nyoungo/dsfree2api/internal/upstream" +) + +func (s *Server) handleResponses(w http.ResponseWriter, r *http.Request) { + var req openai.ResponsesRequest + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + writeError(w, http.StatusBadRequest, "invalid JSON body: "+err.Error(), "invalid_request_error") + return + } + messages, err := openai.ResponsesToMessages(&req) + if err != nil { + writeError(w, http.StatusBadRequest, err.Error(), "invalid_request_error") + return + } + tools := make([]openai.ToolDef, 0, len(req.Tools)) + for _, t := range req.Tools { + if def, ok := t.ToToolDef(); ok { + tools = append(tools, def) + } + } + s.cfg.RLock() + m, ok := s.cfg.Models[req.Model] + site := "" + enabled := false + if ok { + site, enabled = m.Site, m.Enabled + } + s.cfg.RUnlock() + if !ok || !enabled { + writeError(w, http.StatusNotFound, "model not found: "+req.Model, "invalid_request_error") + return + } + + prompt := openai.BuildPrompt(messages, openai.PromptOptions{ + Tools: tools, + ToolChoice: req.ToolChoice, + Temperature: req.Temperature, + TopP: req.TopP, + MaxTokens: req.MaxOutputTokens, + }) + + s.met.IncInFlight(1) + defer s.met.IncInFlight(-1) + + ctx, cancel := s.upstreamCtx(r) + defer cancel() + + if req.Stream { + s.streamResponses(ctx, w, req, prompt, site, tools) + return + } + + out := s.collect(ctx, req.Model, prompt, site) + if out.err != nil { + writeUpstreamError(w, out.err) + return + } + if out.status == metrics.StatusEmpty { + writeError(w, http.StatusBadGateway, emptyResponseMessage, "upstream_empty_response") + return + } + text, calls := splitToolOutput(out.body, tools) + output := responseOutputItems(text, calls) + stopReason := "stop" + if len(calls) > 0 { + stopReason = "tool_use" + } + writeJSON(w, http.StatusOK, map[string]any{ + "id": "resp_" + randHex(16), + "object": "response", + "created_at": time.Now().Unix(), + "status": "completed", + "model": req.Model, + "output": output, + "output_text": text, + "stop_reason": stopReason, + "usage": out.usage, + }) +} + +// responseOutputItems renders a plain-text reply plus parsed tool calls as +// Responses API output items. +func responseOutputItems(text string, calls []openai.ToolCall) []map[string]any { + output := make([]map[string]any, 0, len(calls)+1) + if text != "" { + output = append(output, map[string]any{ + "id": "msg_" + randHex(12), + "type": "message", + "status": "completed", + "role": "assistant", + "content": []map[string]any{{ + "type": "output_text", + "text": text, + "annotations": []any{}, + }}, + }) + } + for _, c := range calls { + output = append(output, map[string]any{ + "id": "fc_" + randHex(12), + "type": "function_call", + "status": "completed", + "call_id": c.ID, + "name": c.Function.Name, + "arguments": c.Function.Arguments, + }) + } + return output +} + +func (s *Server) streamResponses(ctx context.Context, w http.ResponseWriter, req openai.ResponsesRequest, prompt, site string, tools []openai.ToolDef) { + flusher, _ := w.(http.Flusher) + w.Header().Set("Content-Type", "text/event-stream; charset=utf-8") + w.Header().Set("Cache-Control", "no-cache") + w.Header().Set("Connection", "keep-alive") + w.Header().Set("X-Accel-Buffering", "no") + + id := "resp_" + randHex(16) + write := func(v any) error { + raw, err := json.Marshal(v) + if err != nil { + return err + } + if _, err := fmt.Fprintf(w, "data: %s\n\n", raw); err != nil { + return err + } + if flusher != nil { + flusher.Flush() + } + return nil + } + + _ = write(map[string]any{ + "type": "response.created", + "response": map[string]any{ + "id": id, "model": req.Model, "status": "in_progress", "created_at": time.Now().Unix(), + }, + }) + + // When tools are requested the reply is buffered so the raw tool-call + // JSON is parsed once and emitted as proper function_call output items. + buffered := len(tools) > 0 + + start := time.Now() + info := &upstream.ServeInfo{} + var text strings.Builder + var firstDelta time.Time + + err := s.up.Chat(ctx, req.Model, prompt, info, func(ev upstream.Event) error { + if ev.Kind != upstream.KindDelta || ev.Value == "" { + return nil + } + if firstDelta.IsZero() { + firstDelta = time.Now() + } + text.WriteString(ev.Value) + if buffered { + return nil + } + return write(map[string]any{"type": "response.output_text.delta", "delta": ev.Value}) + }) + + duration := time.Since(start) + body := text.String() + servedBy, servedSite, _ := info.Get() + if servedSite == "" { + servedSite = site + } + + if err != nil { + s.met.Record(metrics.Record{ + Model: req.Model, ServedBy: servedBy, Site: servedSite, Stream: true, + DurationMs: duration.Milliseconds(), TTFTMs: msSince(firstDelta, start), + Status: metrics.StatusError, Error: err.Error(), + }) + // Never report a failed stream as completed. + _ = write(map[string]any{ + "type": "response.failed", + "response": map[string]any{ + "id": id, "model": req.Model, "status": "failed", "created_at": time.Now().Unix(), + "error": map[string]any{"code": "upstream_error", "message": err.Error()}, + }, + }) + _, _ = fmt.Fprint(w, "data: [DONE]\n\n") + if flusher != nil { + flusher.Flush() + } + return + } + if strings.TrimSpace(body) == "" { + s.met.Record(metrics.Record{ + Model: req.Model, ServedBy: servedBy, Site: servedSite, Stream: true, + DurationMs: duration.Milliseconds(), Status: metrics.StatusEmpty, Error: "empty response", + }) + _ = write(map[string]any{ + "type": "response.failed", + "response": map[string]any{ + "id": id, "model": req.Model, "status": "failed", "created_at": time.Now().Unix(), + "error": map[string]any{"code": "upstream_empty_response", "message": emptyResponseMessage}, + }, + }) + _, _ = fmt.Fprint(w, "data: [DONE]\n\n") + if flusher != nil { + flusher.Flush() + } + return + } + + usage := estimateUsage(prompt, body) + outText, calls := splitToolOutput(body, tools) + + stopReason := "stop" + if len(calls) > 0 { + stopReason = "tool_use" + } + + var output []map[string]any + if buffered { + // Replay the buffered reply as a proper item stream: message block + // first (when there is prose), then one function_call item per call. + // The final completed.response.output reuses the same item ids. + output = make([]map[string]any, 0, len(calls)+1) + seq := 0 + outIdx := 0 + if outText != "" { + itemID := "msg_" + randHex(12) + item := map[string]any{ + "id": itemID, "type": "message", "status": "completed", "role": "assistant", + "content": []map[string]any{{ + "type": "output_text", "text": outText, "annotations": []any{}, + }}, + } + _ = write(map[string]any{ + "type": "response.output_item.added", "output_index": outIdx, "sequence_number": seq, + "item": map[string]any{ + "id": itemID, "type": "message", "status": "in_progress", "role": "assistant", + "content": []any{}, + }, + }) + seq++ + _ = write(map[string]any{ + "type": "response.output_text.delta", "item_id": itemID, + "output_index": outIdx, "delta": outText, "content_index": 0, + }) + _ = write(map[string]any{ + "type": "response.output_text.done", "item_id": itemID, + "output_index": outIdx, "text": outText, "content_index": 0, + }) + _ = write(map[string]any{ + "type": "response.output_item.done", "output_index": outIdx, + "sequence_number": seq, "item": item, + }) + seq++ + outIdx++ + output = append(output, item) + } + for _, c := range calls { + itemID := "fc_" + randHex(12) + item := map[string]any{ + "id": itemID, "type": "function_call", "status": "completed", + "call_id": c.ID, "name": c.Function.Name, "arguments": c.Function.Arguments, + } + _ = write(map[string]any{ + "type": "response.output_item.added", "output_index": outIdx, "sequence_number": seq, + "item": map[string]any{ + "id": itemID, "type": "function_call", "status": "in_progress", + "call_id": c.ID, "name": c.Function.Name, "arguments": "", + }, + }) + seq++ + _ = write(map[string]any{ + "type": "response.function_call_arguments.delta", "item_id": itemID, + "output_index": outIdx, "delta": c.Function.Arguments, "sequence_number": seq, + }) + seq++ + _ = write(map[string]any{ + "type": "response.function_call_arguments.done", "item_id": itemID, + "output_index": outIdx, "arguments": c.Function.Arguments, "sequence_number": seq, + }) + seq++ + _ = write(map[string]any{ + "type": "response.output_item.done", "output_index": outIdx, + "sequence_number": seq, "item": item, + }) + seq++ + outIdx++ + output = append(output, item) + } + } else { + output = responseOutputItems(outText, calls) + _ = write(map[string]any{ + "type": "response.output_text.done", + "text": body, + }) + } + _ = write(map[string]any{ + "type": "response.completed", + "response": map[string]any{ + "id": id, "model": req.Model, "status": "completed", "created_at": time.Now().Unix(), + "output": output, "stop_reason": stopReason, "usage": usage, + }, + }) + _, _ = fmt.Fprint(w, "data: [DONE]\n\n") + if flusher != nil { + flusher.Flush() + } + + s.met.Record(metrics.Record{ + Model: req.Model, ServedBy: servedBy, Site: servedSite, Stream: true, + DurationMs: duration.Milliseconds(), TTFTMs: msSince(firstDelta, start), + PromptTokens: usage.PromptTokens, CompletionTokens: usage.CompletionTokens, + Status: metrics.StatusOK, + }) +} diff --git a/internal/api/server.go b/internal/api/server.go new file mode 100644 index 0000000..4e94b41 --- /dev/null +++ b/internal/api/server.go @@ -0,0 +1,240 @@ +package api + +import ( + "crypto/subtle" + "encoding/json" + "log/slog" + "net/http" + "runtime/debug" + "strings" + "time" + + "github.com/nyoungo/dsfree2api/internal/config" + "github.com/nyoungo/dsfree2api/internal/logbuf" + "github.com/nyoungo/dsfree2api/internal/metrics" + "github.com/nyoungo/dsfree2api/internal/turnstile" + "github.com/nyoungo/dsfree2api/internal/upstream" +) + +type Server struct { + cfg *config.Config + up *upstream.Client + met *metrics.Recorder + logs *logbuf.Buffer + ts *turnstile.Solver + log *slog.Logger + lim *limiter + start time.Time +} + +func New(cfg *config.Config, up *upstream.Client, met *metrics.Recorder, logs *logbuf.Buffer, ts *turnstile.Solver, log *slog.Logger) *Server { + if log == nil { + log = slog.Default() + } + return &Server{ + cfg: cfg, up: up, met: met, logs: logs, ts: ts, log: log, + lim: newLimiter(), + start: time.Now(), + } +} + +func (s *Server) Handler() http.Handler { + mux := http.NewServeMux() + mux.HandleFunc("GET /health", s.handleHealth) + mux.HandleFunc("GET /{$}", s.handleRoot) + mux.HandleFunc("GET /v1/models", s.authed(s.handleModels)) + mux.HandleFunc("POST /v1/chat/completions", s.authed(s.handleChat)) + mux.HandleFunc("POST /v1/responses", s.authed(s.handleResponses)) + mux.HandleFunc("POST /v1/messages", s.authedAnthropic(s.handleMessages)) + return s.recoverPanic(s.logRequest(mux)) +} + +func (s *Server) handleRoot(w http.ResponseWriter, _ *http.Request) { + writeJSON(w, http.StatusOK, map[string]any{"status": "ok", "service": "dsfree2api"}) +} + +func (s *Server) handleHealth(w http.ResponseWriter, _ *http.Request) { + s.cfg.RLock() + models, sites := 0, []string{} + for id, m := range s.cfg.Models { + if m.Enabled { + models++ + } + _ = id + } + for code, site := range s.cfg.Sites { + if site.Enabled { + sites = append(sites, code) + } + } + turnstileOn := s.cfg.Turnstile.Enabled + s.cfg.RUnlock() + writeJSON(w, http.StatusOK, map[string]any{ + "status": "ok", + "models": models, + "sites": sites, + "turnstile": turnstileOn, + "uptime_s": int(time.Since(s.start).Seconds()), + }) +} + +func (s *Server) handleModels(w http.ResponseWriter, _ *http.Request) { + s.cfg.RLock() + now := time.Now().Unix() + data := make([]map[string]any, 0, len(s.cfg.Models)) + for id, m := range s.cfg.Models { + if !m.Enabled { + continue + } + data = append(data, map[string]any{ + "id": id, "object": "model", "created": now, "owned_by": "deepseek-" + m.Site, + }) + } + s.cfg.RUnlock() + sortModelInfo(data) + writeJSON(w, http.StatusOK, map[string]any{"object": "list", "data": data}) +} + +// ── middleware ─────────────────────────────────────────────────── + +// errWriter writes an auth/rate-limit failure in the wire format of the +// endpoint family it guards. +type errWriter func(w http.ResponseWriter, code int, msg, typ string) + +func (s *Server) authed(next http.HandlerFunc) http.HandlerFunc { + return s.authedWith(next, writeError) +} + +// authedAnthropic guards Anthropic-format endpoints, so failures come back as +// {"type":"error","error":{...}} instead of the OpenAI error shape. +func (s *Server) authedAnthropic(next http.HandlerFunc) http.HandlerFunc { + return s.authedWith(next, writeAnthropicError) +} + +func (s *Server) authedWith(next http.HandlerFunc, fail errWriter) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + s.cfg.RLock() + keys := append([]string(nil), s.cfg.Security.APIKeys...) + s.cfg.RUnlock() + + if len(keys) > 0 { + token := extractKey(r) + if token == "" || !matchesAny(keys, token) { + s.met.Record(metrics.Record{Status: metrics.StatusDenied}) + fail(w, http.StatusUnauthorized, "invalid api key", "invalid_request_error") + return + } + s.cfg.RLock() + rate := int(s.cfg.Limits.RatePerMinute) + s.cfg.RUnlock() + if !s.lim.allowWithLimit(token, rate) { + s.met.Record(metrics.Record{Status: metrics.StatusRateLimit}) + fail(w, http.StatusTooManyRequests, "rate limit exceeded", "rate_limit_error") + return + } + } + next(w, r) + } +} + +func extractKey(r *http.Request) string { + if v := r.Header.Get("X-Api-Key"); v != "" { + return strings.TrimSpace(v) + } + auth := r.Header.Get("Authorization") + if auth == "" { + return "" + } + scheme, value, ok := strings.Cut(auth, " ") + if !ok || !strings.EqualFold(strings.TrimSpace(scheme), "bearer") { + return "" + } + return strings.TrimSpace(value) +} + +func matchesAny(keys []string, token string) bool { + ok := false + for _, k := range keys { + if subtle.ConstantTimeCompare([]byte(k), []byte(token)) == 1 { + ok = true + } + } + return ok +} + +func (s *Server) logRequest(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.URL.Path == "/health" { + next.ServeHTTP(w, r) + return + } + start := time.Now() + sw := &statusWriter{ResponseWriter: w, status: http.StatusOK} + defer func() { + if r.URL.Path != "/" { + s.log.Debug("http", + "method", r.Method, "path", r.URL.Path, + "status", sw.status, "ms", time.Since(start).Milliseconds()) + } + }() + next.ServeHTTP(sw, r) + }) +} + +func (s *Server) recoverPanic(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + defer func() { + if rec := recover(); rec != nil { + s.log.Error("panic", "err", rec, "stack", string(debug.Stack())) + writeJSON(w, http.StatusInternalServerError, map[string]any{ + "error": map[string]any{"message": "internal server error", "type": "server_error"}, + }) + } + }() + next.ServeHTTP(w, r) + }) +} + +type statusWriter struct { + http.ResponseWriter + status int +} + +func (w *statusWriter) WriteHeader(code int) { + w.status = code + w.ResponseWriter.WriteHeader(code) +} + +func (w *statusWriter) Flush() { + if f, ok := w.ResponseWriter.(http.Flusher); ok { + f.Flush() + } +} + +// ── helpers ────────────────────────────────────────────────────── + +func writeJSON(w http.ResponseWriter, code int, v any) { + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(code) + _ = json.NewEncoder(w).Encode(v) +} + +func writeError(w http.ResponseWriter, code int, msg, typ string) { + writeJSON(w, code, map[string]any{ + "error": map[string]any{"message": msg, "type": typ}, + }) +} + +func sortModelInfo(data []map[string]any) { + for i := 1; i < len(data); i++ { + for j := i; j > 0; j-- { + a, _ := data[j]["id"].(string) + b, _ := data[j-1]["id"].(string) + if a < b { + data[j], data[j-1] = data[j-1], data[j] + } else { + break + } + } + } +} diff --git a/internal/config/config.go b/internal/config/config.go new file mode 100644 index 0000000..da31e5a --- /dev/null +++ b/internal/config/config.go @@ -0,0 +1,525 @@ +package config + +import ( + "errors" + "fmt" + "os" + "path/filepath" + "strconv" + "strings" + "sync" + + "github.com/BurntSushi/toml" +) + +const DefaultUserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36" + +// Turnstile token providers: api calls a hosted solver, browser drives a +// local Chrome/Edge over CDP, manual only ever uses imported cookies. +const ( + ProviderAPI = "api" + ProviderBrowser = "browser" + ProviderManual = "manual" +) + +type Turnstile struct { + Enabled bool `toml:"enabled" json:"enabled"` + Provider string `toml:"provider" json:"provider"` + APIURL string `toml:"api_url" json:"api_url"` + APIKey string `toml:"api_key" json:"api_key"` + SiteKey string `toml:"sitekey" json:"sitekey"` + Action string `toml:"action" json:"action"` + TimeoutSeconds int `toml:"timeout_seconds" json:"timeout_seconds"` + CookieTTLSeconds int `toml:"cookie_ttl_seconds" json:"cookie_ttl_seconds"` + Retries int `toml:"retries" json:"retries"` + RetryBackoffSeconds float64 `toml:"retry_backoff_seconds" json:"retry_backoff_seconds"` + + // provider = "browser" + BrowserPath string `toml:"browser_path" json:"browser_path"` + BrowserHeadless bool `toml:"browser_headless" json:"browser_headless"` + BrowserUserDataDir string `toml:"browser_user_data_dir" json:"browser_user_data_dir"` + BrowserTimezone string `toml:"browser_timezone" json:"browser_timezone"` + BrowserLocale string `toml:"browser_locale" json:"browser_locale"` +} + +// ProviderValue normalizes the token provider ("api" when unset). +func (t Turnstile) ProviderValue() string { + p := strings.ToLower(strings.TrimSpace(t.Provider)) + if p == "" { + return ProviderAPI + } + return p +} + +type Site struct { + Code string `toml:"-"` + BaseURL string `toml:"base_url" json:"base_url"` + AJAXURL string `toml:"ajax_url" json:"ajax_url"` + SiteKey string `toml:"sitekey" json:"sitekey"` + VerifyAction string `toml:"verify_action" json:"verify_action"` + Language string `toml:"language" json:"language"` + Enabled bool `toml:"enabled" json:"enabled"` +} + +type Model struct { + ID string `toml:"-"` + Site string `toml:"site" json:"site"` + UpstreamID string `toml:"upstream_id" json:"upstream_id"` + Label string `toml:"label" json:"label"` + PagePath string `toml:"page_path" json:"page_path"` + BotID int `toml:"bot_id" json:"bot_id"` + PostID int `toml:"post_id" json:"post_id"` + Enabled bool `toml:"enabled" json:"enabled"` +} + +type Config struct { + Server struct { + Host string `toml:"host" json:"host"` + Port int `toml:"port" json:"port"` + LogLevel string `toml:"log_level" json:"log_level"` + } `toml:"server" json:"server"` + + Security struct { + APIKeys []string `toml:"api_keys" json:"api_keys"` + } `toml:"security" json:"security"` + + Admin struct { + Enabled bool `toml:"enabled" json:"enabled"` + Host string `toml:"host" json:"host"` + Port int `toml:"port" json:"port"` + Password string `toml:"password" json:"password"` + } `toml:"admin" json:"admin"` + + Limits struct { + MaxConcurrentPerSite int `toml:"max_concurrent_per_site" json:"max_concurrent_per_site"` + RatePerMinute float64 `toml:"rate_per_minute" json:"rate_per_minute"` + } `toml:"limits" json:"limits"` + + Proxy struct { + URL string `toml:"url" json:"url"` + FallbackURLs []string `toml:"fallback_urls" json:"fallback_urls"` + SlowStartSeconds float64 `toml:"slow_start_seconds" json:"slow_start_seconds"` + } `toml:"proxy" json:"proxy"` + + Upstream struct { + Timeout float64 `toml:"timeout" json:"timeout"` + StreamTimeout float64 `toml:"stream_timeout" json:"stream_timeout"` + ConfigTTLSeconds int `toml:"config_ttl_seconds" json:"config_ttl_seconds"` + AutoRefresh bool `toml:"auto_refresh" json:"auto_refresh"` + RefreshRetries int `toml:"refresh_retries" json:"refresh_retries"` + RetryBackoffSeconds float64 `toml:"retry_backoff_seconds" json:"retry_backoff_seconds"` + UserAgent string `toml:"user_agent" json:"user_agent"` + CrossSiteFailover bool `toml:"cross_site_failover" json:"cross_site_failover"` + } `toml:"upstream" json:"upstream"` + + Runtime struct { + DataDir string `toml:"data_dir" json:"data_dir"` + } `toml:"runtime" json:"runtime"` + + Turnstile Turnstile `toml:"turnstile" json:"turnstile"` + Sites map[string]*Site `toml:"sites" json:"sites"` + Models map[string]*Model `toml:"models" json:"models"` + + mu sync.RWMutex `toml:"-"` + path string `toml:"-"` +} + +func DefaultTurnstile() Turnstile { + return Turnstile{ + Enabled: false, + Provider: ProviderAPI, + APIURL: "", + APIKey: "", + SiteKey: "0x4AAAAAADlLZ3ljqZP6cQwq", + Action: "chat", + TimeoutSeconds: 90, + CookieTTLSeconds: 10800, + Retries: 5, + RetryBackoffSeconds: 1.5, + } +} + +func DefaultSites(sitekey string) map[string]*Site { + return map[string]*Site{ + "de": { + Code: "de", BaseURL: "https://deepseek.de", AJAXURL: "https://deepseek.de/wp-admin/admin-ajax.php", + SiteKey: sitekey, VerifyAction: "deepseek_ts_verify", + Language: "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7", Enabled: true, + }, + "es": { + Code: "es", BaseURL: "https://deepseek.es", AJAXURL: "https://deepseek.es/wp-admin/admin-ajax.php", + SiteKey: sitekey, VerifyAction: "deepseek_ts_verify", + Language: "es-ES,es;q=0.9,en-US;q=0.8,en;q=0.7", Enabled: true, + }, + "fr": { + Code: "fr", BaseURL: "https://deepseek.fr", AJAXURL: "https://deepseek.fr/wp-admin/admin-ajax.php", + SiteKey: sitekey, VerifyAction: "deepseek_ts_verify", + Language: "fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7", Enabled: true, + }, + } +} + +func DefaultModels() map[string]*Model { + rows := [][7]any{ + {"deepseek-v4-flash-de", "de", "deepseek-v4-flash", "DeepSeek V4-Flash DE", "/", 27487, 106}, + {"deepseek-v4-pro-de", "de", "deepseek-v4-pro", "DeepSeek V4-Pro DE", "/pro/", 27533, 27177}, + {"deepseek-v4-flash-es", "es", "deepseek-v4-flash", "DeepSeek V4-Flash ES", "/", 27623, 27568}, + {"deepseek-v4-pro-es", "es", "deepseek-v4-pro", "DeepSeek V4-Pro ES", "/pro/", 27637, 27615}, + {"deepseek-v4-flash-fr", "fr", "deepseek-v4-flash", "DeepSeek V4-Flash FR", "/", 27645, 27569}, + {"deepseek-v4-pro-fr", "fr", "deepseek-v4-pro", "DeepSeek V4-Pro FR", "/pro/", 27647, 27616}, + } + out := make(map[string]*Model, len(rows)) + for _, r := range rows { + id := r[0].(string) + out[id] = &Model{ + ID: id, Site: r[1].(string), UpstreamID: r[2].(string), Label: r[3].(string), + PagePath: r[4].(string), BotID: r[5].(int), PostID: r[6].(int), Enabled: true, + } + } + return out +} + +func newConfig() *Config { + c := &Config{} + c.Server.Host = "0.0.0.0" + c.Server.Port = 8000 + c.Server.LogLevel = "INFO" + c.Admin.Enabled = true + c.Admin.Host = "127.0.0.1" + c.Admin.Port = 8001 + c.Limits.MaxConcurrentPerSite = 4 + c.Limits.RatePerMinute = 0 + c.Proxy.SlowStartSeconds = 8 + c.Upstream.Timeout = 60 + c.Upstream.StreamTimeout = 300 + c.Upstream.ConfigTTLSeconds = 60 + c.Upstream.AutoRefresh = true + c.Upstream.RefreshRetries = 4 + c.Upstream.RetryBackoffSeconds = 1 + c.Upstream.UserAgent = DefaultUserAgent + c.Upstream.CrossSiteFailover = true + c.Runtime.DataDir = "./data" + c.Turnstile = DefaultTurnstile() + c.Sites = DefaultSites(c.Turnstile.SiteKey) + c.Models = DefaultModels() + return c +} + +// Load reads the TOML config (if present), applies defaults, then env overrides. +func Load(path string) (*Config, error) { + cfg := newConfig() + if path == "" { + path = "config.toml" + } + cfg.path = path + + var md toml.MetaData + if raw, err := os.ReadFile(path); err == nil { + md, err = toml.Decode(string(raw), cfg) + if err != nil { + return nil, fmt.Errorf("parse %s: %w", path, err) + } + cfg.applyDefaults(&md) + } else if !errors.Is(err, os.ErrNotExist) { + return nil, fmt.Errorf("read %s: %w", path, err) + } else { + cfg.applyDefaults(nil) + } + + if err := cfg.applyEnv(); err != nil { + return nil, err + } + if cfg.Sites == nil { + cfg.Sites = DefaultSites(cfg.Turnstile.SiteKey) + } + if cfg.Models == nil { + cfg.Models = DefaultModels() + } + if err := cfg.Reindex(); err != nil { + return nil, err + } + return cfg, nil +} + +// Reindex restores derived fields (site codes / model ids) and validates the +// site-model wiring. It is safe to call after mutating the config at runtime. +func (c *Config) Reindex() error { + if c.Sites == nil { + c.Sites = DefaultSites(c.Turnstile.SiteKey) + } + if c.Models == nil { + c.Models = DefaultModels() + } + for code, s := range c.Sites { + if s == nil { + return fmt.Errorf("site %q is null", code) + } + s.Code = code + if s.SiteKey == "" { + s.SiteKey = c.Turnstile.SiteKey + } + if s.VerifyAction == "" { + s.VerifyAction = "deepseek_ts_verify" + } + if s.AJAXURL == "" { + s.AJAXURL = strings.TrimRight(s.BaseURL, "/") + "/wp-admin/admin-ajax.php" + } + if s.BaseURL == "" { + return fmt.Errorf("site %q: base_url is required", code) + } + } + for id, m := range c.Models { + if m == nil { + return fmt.Errorf("model %q is null", id) + } + m.ID = id + if m.Site == "" { + return fmt.Errorf("model %q: site is required", id) + } + if _, ok := c.Sites[m.Site]; !ok { + return fmt.Errorf("model %q: unknown site %q", id, m.Site) + } + if m.PagePath == "" { + m.PagePath = "/" + } + } + return nil +} + +// applyDefaults fills booleans that were absent from the file (TOML decodes +// missing bools as false, but the project defaults are true). +func (c *Config) applyDefaults(md *toml.MetaData) { + def := func(defined bool, dst *bool, want bool) { + if !defined { + *dst = want + } + } + if md == nil { + c.Turnstile.Enabled = true + c.Upstream.AutoRefresh = true + for _, s := range c.Sites { + s.Enabled = true + } + for _, m := range c.Models { + m.Enabled = true + } + return + } + def(md.IsDefined("turnstile", "enabled"), &c.Turnstile.Enabled, true) + def(md.IsDefined("upstream", "auto_refresh"), &c.Upstream.AutoRefresh, true) + for code, s := range c.Sites { + def(md.IsDefined("sites", code, "enabled"), &s.Enabled, true) + } + for id, m := range c.Models { + def(md.IsDefined("models", id, "enabled"), &m.Enabled, true) + } +} + +func (c *Config) applyEnv() error { + str := func(key string) *string { + if v, ok := os.LookupEnv(key); ok { + return &v + } + return nil + } + if v := str("HOST"); v != nil { + c.Server.Host = *v + } + if v := str("LOG_LEVEL"); v != nil { + c.Server.LogLevel = *v + } + if v := str("PORT"); v != nil { + n, err := strconv.Atoi(strings.TrimSpace(*v)) + if err != nil || n < 1 || n > 65535 { + return fmt.Errorf("invalid PORT %q (expected 1-65535)", *v) + } + c.Server.Port = n + } + if v := str("API_KEYS"); v != nil { + c.Security.APIKeys = splitList(*v) + } + if v := str("PROXY_URL"); v != nil { + c.Proxy.URL = strings.TrimSpace(*v) + } + if v := str("PROXY_FALLBACK_URLS"); v != nil { + c.Proxy.FallbackURLs = splitList(*v) + } + if v := str("PROXY_SLOW_START_SECONDS"); v != nil { + f, err := strconv.ParseFloat(strings.TrimSpace(*v), 64) + if err != nil || f < 0 { + return fmt.Errorf("invalid PROXY_SLOW_START_SECONDS %q", *v) + } + c.Proxy.SlowStartSeconds = f + } + if v := str("TURNSTILE_API_KEY"); v != nil && strings.TrimSpace(*v) != "" { + c.Turnstile.APIKey = strings.TrimSpace(*v) + } + if v := str("TURNSTILE_PROVIDER"); v != nil && strings.TrimSpace(*v) != "" { + c.Turnstile.Provider = strings.ToLower(strings.TrimSpace(*v)) + } + if v := str("TURNSTILE_BROWSER_PATH"); v != nil && strings.TrimSpace(*v) != "" { + c.Turnstile.BrowserPath = strings.TrimSpace(*v) + } + if v := str("TURNSTILE_ENABLED"); v != nil { + b, err := strconv.ParseBool(strings.TrimSpace(*v)) + if err != nil { + return fmt.Errorf("invalid TURNSTILE_ENABLED %q", *v) + } + c.Turnstile.Enabled = b + } + if v := str("ADMIN_PASSWORD"); v != nil { + c.Admin.Password = *v + } + if v := str("ADMIN_HOST"); v != nil { + c.Admin.Host = *v + } + if v := str("ADMIN_PORT"); v != nil { + n, err := strconv.Atoi(strings.TrimSpace(*v)) + if err != nil || n < 1 || n > 65535 { + return fmt.Errorf("invalid ADMIN_PORT %q", *v) + } + c.Admin.Port = n + } + if v := str("DATA_DIR"); v != nil && strings.TrimSpace(*v) != "" { + c.Runtime.DataDir = strings.TrimSpace(*v) + } + if v := str("ADMIN_ENABLED"); v != nil { + b, err := strconv.ParseBool(strings.TrimSpace(*v)) + if err != nil { + return fmt.Errorf("invalid ADMIN_ENABLED %q", *v) + } + c.Admin.Enabled = b + } + return nil +} + +func splitList(v string) []string { + out := []string{} + for _, p := range strings.Split(v, ",") { + if p = strings.TrimSpace(p); p != "" { + out = append(out, p) + } + } + return out +} + +func (c *Config) Validate() error { + if c.Server.Port < 1 || c.Server.Port > 65535 { + return fmt.Errorf("server.port out of range: %d", c.Server.Port) + } + if c.Admin.Enabled && (c.Admin.Port < 1 || c.Admin.Port > 65535) { + return fmt.Errorf("admin.port out of range: %d", c.Admin.Port) + } + if c.Admin.Enabled && c.Admin.Port == c.Server.Port { + return errors.New("admin.port must differ from server.port") + } + if c.Upstream.Timeout <= 0 { + return errors.New("upstream.timeout must be > 0") + } + if c.Upstream.StreamTimeout <= 0 { + return errors.New("upstream.stream_timeout must be > 0") + } + if err := c.validateTurnstile(); err != nil { + return err + } + if len(c.Models) == 0 { + return errors.New("no models configured") + } + seen := map[string]bool{} + for _, k := range c.Security.APIKeys { + if seen[k] { + return fmt.Errorf("duplicate api key %q", k) + } + seen[k] = true + } + return nil +} + +// validateTurnstile checks the token provider settings while the solver is on. +// provider = "manual" needs no credentials — cookies are imported by hand. +func (c *Config) validateTurnstile() error { + if !c.Turnstile.Enabled { + return nil + } + switch c.Turnstile.ProviderValue() { + case ProviderAPI: + if c.Turnstile.APIURL == "" { + return errors.New("turnstile.api_url is empty (set config to your solver endpoint, or use provider = \"manual\")") + } + if c.Turnstile.APIKey == "" { + return errors.New("turnstile.api_key is empty (set config, or TURNSTILE_API_KEY)") + } + case ProviderBrowser: + path := strings.TrimSpace(c.Turnstile.BrowserPath) + if path == "" { + return errors.New("turnstile.browser_path is empty (path to Chrome/Edge, or use provider = \"manual\")") + } + if _, err := os.Stat(path); err != nil { + return fmt.Errorf("turnstile.browser_path %q: %w", path, err) + } + case ProviderManual: + // nothing to check — cookies arrive via the console import box + default: + return fmt.Errorf("turnstile.provider %q is invalid (api|browser|manual)", c.Turnstile.Provider) + } + return nil +} + +func (c *Config) RLock() { c.mu.RLock() } +func (c *Config) RUnlock() { c.mu.RUnlock() } +func (c *Config) Lock() { c.mu.Lock() } +func (c *Config) Unlock() { c.mu.Unlock() } + +func (c *Config) Path() string { return c.path } + +// Site returns a site by code (must hold at least a read lock). +func (c *Config) Site(code string) (*Site, bool) { + s, ok := c.Sites[code] + return s, ok +} + +// Model returns a model by id (must hold at least a read lock). +func (c *Config) Model(id string) (*Model, bool) { + m, ok := c.Models[id] + return m, ok +} + +// Save writes the config back to its file after taking a timestamped backup. +func (c *Config) Save() error { + return c.SaveTo(c.path) +} + +func (c *Config) SaveTo(path string) error { + if path == "" { + return errors.New("config path is empty") + } + if _, err := os.Stat(path); err == nil { + backup := path + ".bak" + if raw, err := os.ReadFile(path); err == nil { + _ = os.WriteFile(backup, raw, 0o644) + } + } + if dir := filepath.Dir(path); dir != "" && dir != "." { + _ = os.MkdirAll(dir, 0o755) + } + var sb strings.Builder + enc := toml.NewEncoder(&sb) + enc.Indent = "" + if err := enc.Encode(c); err != nil { + return fmt.Errorf("encode config: %w", err) + } + header := "# dsfree2api configuration\n# Managed by the web console; a .bak copy is kept next to this file.\n\n" + return os.WriteFile(path, []byte(header+sb.String()), 0o644) +} + +// DataDir resolves (and creates) the runtime data directory. +func (c *Config) DataDir() (string, error) { + dir := c.Runtime.DataDir + if dir == "" { + dir = "./data" + } + if err := os.MkdirAll(dir, 0o755); err != nil { + return "", err + } + return dir, nil +} diff --git a/internal/config/config_test.go b/internal/config/config_test.go new file mode 100644 index 0000000..26dae15 --- /dev/null +++ b/internal/config/config_test.go @@ -0,0 +1,236 @@ +package config + +import ( + "os" + "path/filepath" + "strings" + "testing" +) + +const examplePath = "../../config.example.toml" + +func TestLoadSixModelsFromExample(t *testing.T) { + cfg, err := Load(examplePath) + if err != nil { + t.Fatalf("load: %v", err) + } + if len(cfg.Models) != 6 { + t.Fatalf("want 6 models, got %d", len(cfg.Models)) + } + for _, id := range []string{"deepseek-v4-flash-de", "deepseek-v4-pro-fr", "deepseek-v4-pro-es"} { + if _, ok := cfg.Models[id]; !ok { + t.Errorf("missing model %q", id) + } + } + if cfg.Sites["de"].SiteKey != "0x4AAAAAADlLZ3ljqZP6cQwq" { + t.Errorf("unexpected de sitekey %q", cfg.Sites["de"].SiteKey) + } + if err := cfg.Validate(); err != nil { + t.Errorf("validate: %v", err) + } +} + +func TestSecurityKeyConfigured(t *testing.T) { + cfg, err := Load(examplePath) + if err != nil { + t.Fatalf("load: %v", err) + } + if len(cfg.Security.APIKeys) != 1 || cfg.Security.APIKeys[0] != "sk-dsfr-local-change-me" { + t.Fatalf("unexpected api_keys %v", cfg.Security.APIKeys) + } +} + +func TestProxyFallbackEnvConfig(t *testing.T) { + t.Setenv("PROXY_URL", "") + t.Setenv("PROXY_FALLBACK_URLS", "socks5://one:1, socks5://two:2") + t.Setenv("PROXY_SLOW_START_SECONDS", "5") + cfg, err := Load(examplePath) + if err != nil { + t.Fatalf("load: %v", err) + } + if cfg.Proxy.URL != "" { + t.Errorf("proxy url = %q, want empty", cfg.Proxy.URL) + } + want := []string{"socks5://one:1", "socks5://two:2"} + if len(cfg.Proxy.FallbackURLs) != len(want) { + t.Fatalf("fallbacks = %v", cfg.Proxy.FallbackURLs) + } + for i, u := range want { + if cfg.Proxy.FallbackURLs[i] != u { + t.Errorf("fallback[%d] = %q, want %q", i, cfg.Proxy.FallbackURLs[i], u) + } + } + if cfg.Proxy.SlowStartSeconds != 5 { + t.Errorf("slow_start = %v, want 5", cfg.Proxy.SlowStartSeconds) + } +} + +func TestServerEnvOverrides(t *testing.T) { + t.Setenv("HOST", "127.0.0.1") + t.Setenv("PORT", "9999") + t.Setenv("API_KEYS", "sk-one, sk-two") + cfg, err := Load(examplePath) + if err != nil { + t.Fatalf("load: %v", err) + } + if cfg.Server.Host != "127.0.0.1" { + t.Errorf("host = %q", cfg.Server.Host) + } + if cfg.Server.Port != 9999 { + t.Errorf("port = %d", cfg.Server.Port) + } + if len(cfg.Security.APIKeys) != 2 || cfg.Security.APIKeys[1] != "sk-two" { + t.Errorf("api_keys = %v", cfg.Security.APIKeys) + } +} + +func TestValidateRejectsBadValues(t *testing.T) { + cfg, err := Load(examplePath) + if err != nil { + t.Fatalf("load: %v", err) + } + cfg.Turnstile.Enabled = true + cfg.Turnstile.APIURL = "" + cfg.Turnstile.APIKey = "k" + if err := cfg.Validate(); err == nil { + t.Error("expected error for empty turnstile api_url") + } + cfg.Turnstile.APIURL = "https://solver.example.com/turnstile/sync" + cfg.Turnstile.APIKey = "" + if err := cfg.Validate(); err == nil { + t.Error("expected error for empty turnstile api_key") + } + cfg.Turnstile.APIKey = "k" + cfg.Turnstile.Enabled = false + cfg.Admin.Port = cfg.Server.Port + if err := cfg.Validate(); err == nil { + t.Error("expected error for admin.port == server.port") + } +} + +func TestTurnstileDisabledByDefault(t *testing.T) { + if DefaultTurnstile().Enabled { + t.Error("turnstile should be disabled by default") + } + if DefaultTurnstile().APIURL != "" || DefaultTurnstile().APIKey != "" { + t.Error("no solver endpoint/key should be baked in by default") + } + cfg, err := Load(examplePath) + if err != nil { + t.Fatalf("load: %v", err) + } + if cfg.Turnstile.Enabled { + t.Error("example config should ship with turnstile disabled") + } + t.Setenv("TURNSTILE_ENABLED", "true") + cfg, err = Load(examplePath) + if err != nil { + t.Fatalf("load: %v", err) + } + if !cfg.Turnstile.Enabled { + t.Error("TURNSTILE_ENABLED=true should enable the solver") + } +} + +func TestTurnstileProviderValidation(t *testing.T) { + load := func(t *testing.T) *Config { + t.Helper() + cfg, err := Load(examplePath) + if err != nil { + t.Fatalf("load: %v", err) + } + cfg.Turnstile.Enabled = true + return cfg + } + + // provider unset behaves like "api": credentials are mandatory + cfg := load(t) + if p := cfg.Turnstile.ProviderValue(); p != ProviderAPI { + t.Fatalf("ProviderValue() = %q, want api", p) + } + if err := cfg.Validate(); err == nil { + t.Error("api provider without api_url should fail") + } + cfg.Turnstile.APIURL = "https://solver.example.com/turnstile/sync" + cfg.Turnstile.APIKey = "k" + if err := cfg.Validate(); err != nil { + t.Errorf("api provider configured: %v", err) + } + + // browser provider needs an existing executable instead of credentials + cfg = load(t) + cfg.Turnstile.Provider = ProviderBrowser + if err := cfg.Validate(); err == nil || !strings.Contains(err.Error(), "browser_path") { + t.Errorf("browser provider without browser_path: %v", err) + } + cfg.Turnstile.BrowserPath = filepath.Join(t.TempDir(), "msedge.exe") + if err := cfg.Validate(); err == nil { + t.Error("browser_path pointing at a missing file should fail") + } + browser := filepath.Join(t.TempDir(), "msedge.exe") + if err := os.WriteFile(browser, []byte("stub"), 0o755); err != nil { + t.Fatalf("write stub browser: %v", err) + } + cfg.Turnstile.BrowserPath = browser + if err := cfg.Validate(); err != nil { + t.Errorf("browser provider configured: %v", err) + } + + // manual provider never validates credentials + cfg = load(t) + cfg.Turnstile.Provider = ProviderManual + if err := cfg.Validate(); err != nil { + t.Errorf("manual provider: %v", err) + } + + cfg.Turnstile.Provider = "captcha" + if err := cfg.Validate(); err == nil { + t.Error("unknown provider should fail") + } +} + +func TestTurnstileProviderEnv(t *testing.T) { + t.Setenv("TURNSTILE_PROVIDER", " Manual ") + t.Setenv("TURNSTILE_BROWSER_PATH", `C:\browsers\chrome.exe`) + cfg, err := Load(examplePath) + if err != nil { + t.Fatalf("load: %v", err) + } + if cfg.Turnstile.ProviderValue() != ProviderManual { + t.Errorf("provider = %q, want manual", cfg.Turnstile.Provider) + } + if cfg.Turnstile.BrowserPath != `C:\browsers\chrome.exe` { + t.Errorf("browser_path = %q", cfg.Turnstile.BrowserPath) + } +} + +func TestSaveRoundTrip(t *testing.T) { + cfg, err := Load(examplePath) + if err != nil { + t.Fatalf("load: %v", err) + } + cfg.Security.APIKeys = []string{"sk-rotated"} + cfg.Server.Port = 8123 + dst := filepath.Join(t.TempDir(), "config.toml") + if err := cfg.SaveTo(dst); err != nil { + t.Fatalf("save: %v", err) + } + got, err := Load(dst) + if err != nil { + t.Fatalf("reload: %v", err) + } + if got.Server.Port != 8123 { + t.Errorf("port = %d", got.Server.Port) + } + if len(got.Security.APIKeys) != 1 || got.Security.APIKeys[0] != "sk-rotated" { + t.Errorf("api_keys = %v", got.Security.APIKeys) + } + if len(got.Models) != 6 { + t.Errorf("models = %d", len(got.Models)) + } + for id, m := range got.Models { + if m.ID != id { + t.Errorf("model %q has id %q", id, m.ID) + } + } +} diff --git a/internal/httpx/client.go b/internal/httpx/client.go new file mode 100644 index 0000000..1570220 --- /dev/null +++ b/internal/httpx/client.go @@ -0,0 +1,259 @@ +// Package httpx wraps a TLS-fingerprint-impersonating HTTP client behind a +// small stdlib-shaped interface, so the rest of the code base never has to +// depend on the forked net/http types used by the fingerprinting library. +package httpx + +import ( + "bytes" + "context" + "fmt" + "io" + "net/http" + "net/url" + "sort" + "sync" + "time" + + fhttp "github.com/bogdanfinn/fhttp" + tls_client "github.com/bogdanfinn/tls-client" + "github.com/bogdanfinn/tls-client/profiles" +) + +// DefaultUserAgent mirrors config.DefaultUserAgent without an import cycle. +const DefaultUserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36" + +type Request struct { + Method string + URL string + Header map[string]string + Body []byte + Timeout time.Duration // 0 = session-level timeout only +} + +type Response struct { + Status int + Header http.Header + Body []byte +} + +// Session is a browser-like cookie jar plus connection pool, bound to one +// site/proxy route. +type Session interface { + Do(ctx context.Context, r Request) (*Response, error) + Stream(ctx context.Context, r Request) (io.ReadCloser, int, error) + Cookies() map[string]string + SetCookies(map[string]string) + Close() +} + +type Options struct { + ProxyURL string + Timeout time.Duration +} + +type tlsSession struct { + inner tls_client.HttpClient + + mu sync.Mutex + cookies map[string]string + closed bool +} + +// NewSession builds a Chrome-impersonating session. +func NewSession(opts Options) (Session, error) { + timeout := opts.Timeout + if timeout <= 0 { + timeout = 60 * time.Second + } + tlsOpts := []tls_client.HttpClientOption{ + tls_client.WithClientProfile(profiles.Chrome_120), + tls_client.WithTimeoutSeconds(int(timeout.Seconds()) + 1), + tls_client.WithRandomTLSExtensionOrder(), + } + if p := opts.ProxyURL; p != "" { + tlsOpts = append(tlsOpts, tls_client.WithProxyUrl(p)) + } + inner, err := tls_client.NewHttpClient(tls_client.NewNoopLogger(), tlsOpts...) + if err != nil { + return nil, fmt.Errorf("create tls session: %w", err) + } + return &tlsSession{ + inner: inner, + cookies: map[string]string{}, + }, nil +} + +func (s *tlsSession) Cookies() map[string]string { + s.mu.Lock() + defer s.mu.Unlock() + out := make(map[string]string, len(s.cookies)) + for k, v := range s.cookies { + out[k] = v + } + return out +} + +func (s *tlsSession) SetCookies(in map[string]string) { + s.mu.Lock() + defer s.mu.Unlock() + for k, v := range in { + s.cookies[k] = v + } +} + +func (s *tlsSession) Close() { + s.mu.Lock() + if s.closed { + s.mu.Unlock() + return + } + s.closed = true + s.mu.Unlock() + s.inner.CloseIdleConnections() +} + +func (s *tlsSession) newRequest(r Request) (*fhttp.Request, error) { + method := r.Method + if method == "" { + method = http.MethodGet + } + var body io.Reader + if len(r.Body) > 0 { + body = bytes.NewReader(r.Body) + } + req, err := fhttp.NewRequest(method, r.URL, body) + if err != nil { + return nil, fmt.Errorf("build request: %w", err) + } + req.Header = fhttp.Header{} + req.Header.Set("User-Agent", DefaultUserAgent) + req.Header.Set("Accept", "*/*") + if len(r.Body) > 0 && r.Header["Content-Type"] == "" { + req.Header.Set("Content-Type", "application/x-www-form-urlencoded") + } + for k, v := range r.Header { + req.Header.Set(k, v) + } + + u, err := url.Parse(r.URL) + if err != nil { + return nil, fmt.Errorf("parse url: %w", err) + } + s.mu.Lock() + names := make([]string, 0, len(s.cookies)) + for k := range s.cookies { + names = append(names, k) + } + sort.Strings(names) + for _, n := range names { + if n == "" { + continue + } + req.AddCookie(&fhttp.Cookie{Name: n, Value: s.cookies[n], Path: "/"}) + } + s.mu.Unlock() + _ = u + return req, nil +} + +func (s *tlsSession) capture(resp *fhttp.Response) { + cookies := (&http.Response{Header: http.Header(resp.Header)}).Cookies() + if len(cookies) == 0 { + for _, line := range http.Header(resp.Header).Values("Set-Cookie") { + if c, err := http.ParseSetCookie(line); err == nil && c.Name != "" { + cookies = append(cookies, c) + } + } + } + if len(cookies) == 0 { + return + } + s.mu.Lock() + defer s.mu.Unlock() + for _, c := range cookies { + if c.Name == "" { + continue + } + if c.MaxAge < 0 { + delete(s.cookies, c.Name) + continue + } + if c.Value == "" { + continue + } + s.cookies[c.Name] = c.Value + } +} + +func (s *tlsSession) Do(ctx context.Context, r Request) (*Response, error) { + req, err := s.newRequest(r) + if err != nil { + return nil, err + } + if ctx == nil { + ctx = context.Background() + } + if r.Timeout > 0 { + var cancel context.CancelFunc + ctx, cancel = context.WithTimeout(ctx, r.Timeout) + defer cancel() + } + resp, err := s.inner.Do(req.WithContext(ctx)) + if err != nil { + return nil, err + } + defer resp.Body.Close() + s.capture(resp) + body, err := io.ReadAll(resp.Body) + if err != nil { + return nil, fmt.Errorf("read body: %w", err) + } + return &Response{Status: resp.StatusCode, Header: http.Header(resp.Header), Body: body}, nil +} + +// Stream performs the request and returns the still-open body. The caller +// must Close it; closing also releases the underlying connection. +func (s *tlsSession) Stream(ctx context.Context, r Request) (io.ReadCloser, int, error) { + req, err := s.newRequest(r) + if err != nil { + return nil, 0, err + } + if ctx == nil { + ctx = context.Background() + } + resp, err := s.inner.Do(req.WithContext(ctx)) + if err != nil { + return nil, 0, err + } + s.capture(resp) + if resp.StatusCode >= 400 { + body, _ := io.ReadAll(resp.Body) + resp.Body.Close() + return nil, resp.StatusCode, fmt.Errorf("upstream status %d: %s", resp.StatusCode, truncate(string(body), 400)) + } + return resp.Body, resp.StatusCode, nil +} + +func truncate(s string, n int) string { + if len(s) <= n { + return s + } + return s[:n] + "..." +} + +// StdClient is a plain net/http client used for non-fingerprinted calls +// (Turnstile solver API, proxy health checks). +func StdClient(proxyURL string, timeout time.Duration) (*http.Client, error) { + transport := &http.Transport{Proxy: http.ProxyFromEnvironment} + if proxyURL != "" { + u, err := url.Parse(proxyURL) + if err != nil { + return nil, fmt.Errorf("invalid proxy url: %w", err) + } + transport.Proxy = http.ProxyURL(u) + } + if timeout <= 0 { + timeout = 60 * time.Second + } + return &http.Client{Transport: transport, Timeout: timeout}, nil +} diff --git a/internal/logbuf/logbuf.go b/internal/logbuf/logbuf.go new file mode 100644 index 0000000..df2354b --- /dev/null +++ b/internal/logbuf/logbuf.go @@ -0,0 +1,238 @@ +// Package logbuf keeps a ring buffer of log entries and fans them out to +// live subscribers for the web console. +package logbuf + +import ( + "context" + "fmt" + "log/slog" + "sync" + "time" +) + +type Entry struct { + TS time.Time `json:"ts"` + Level string `json:"level"` + Msg string `json:"msg"` + Attrs map[string]string `json:"attrs,omitempty"` +} + +type Buffer struct { + mu sync.Mutex + entries []Entry + subs map[int]chan Entry + nextID int + limit int +} + +func New(limit int) *Buffer { + if limit <= 0 { + limit = 500 + } + return &Buffer{subs: map[int]chan Entry{}, limit: limit} +} + +func (b *Buffer) Add(e Entry) { + b.mu.Lock() + b.entries = append(b.entries, e) + if len(b.entries) > b.limit { + b.entries = b.entries[len(b.entries)-b.limit:] + } + chans := make([]chan Entry, 0, len(b.subs)) + for _, ch := range b.subs { + chans = append(chans, ch) + } + b.mu.Unlock() + + for _, ch := range chans { + select { + case ch <- e: + default: + // slow consumer: drop rather than block the logger + } + } +} + +// Recent returns up to n entries, optionally filtered by minimum level. +func (b *Buffer) Recent(minLevel string, n int) []Entry { + min := levelValue(minLevel) + b.mu.Lock() + defer b.mu.Unlock() + out := make([]Entry, 0, n) + for i := len(b.entries) - 1; i >= 0 && len(out) < n; i-- { + if levelValue(b.entries[i].Level) >= min { + out = append(out, b.entries[i]) + } + } + // reverse to chronological order + for i, j := 0, len(out)-1; i < j; i, j = i+1, j-1 { + out[i], out[j] = out[j], out[i] + } + return out +} + +// Subscribe returns a channel of new entries plus an unsubscribe func. +func (b *Buffer) Subscribe() (<-chan Entry, func()) { + b.mu.Lock() + defer b.mu.Unlock() + id := b.nextID + b.nextID++ + ch := make(chan Entry, 128) + b.subs[id] = ch + return ch, func() { + b.mu.Lock() + if c, ok := b.subs[id]; ok { + delete(b.subs, id) + close(c) + } + b.mu.Unlock() + } +} + +func levelValue(l string) int { + switch l { + case "DEBUG", "debug": + return -4 + case "INFO", "info": + return 0 + case "WARN", "WARNING", "warn", "warning": + return 4 + case "ERROR", "error": + return 8 + default: + return -100 + } +} + +// Handler is an slog.Handler that mirrors records into the buffer. +type Handler struct { + parent slog.Handler + buf *Buffer + attrs []slog.Attr + group string +} + +func NewHandler(parent slog.Handler, buf *Buffer) *Handler { + return &Handler{parent: parent, buf: buf} +} + +func (h *Handler) Enabled(_ context.Context, l slog.Level) bool { + return h.parent.Enabled(context.Background(), l) +} + +func (h *Handler) Handle(_ context.Context, r slog.Record) error { + attrs := map[string]string{} + for _, a := range h.attrs { + attrs[a.Key] = fmtValue(a.Value) + } + r.Attrs(func(a slog.Attr) bool { + attrs[a.Key] = fmtValue(a.Value) + return true + }) + if h.group != "" { + grouped := map[string]string{} + for k, v := range attrs { + grouped[h.group+"."+k] = v + } + attrs = grouped + } + level := "INFO" + switch { + case r.Level >= slog.LevelError: + level = "ERROR" + case r.Level >= slog.LevelWarn: + level = "WARN" + case r.Level >= slog.LevelInfo: + level = "INFO" + default: + level = "DEBUG" + } + h.buf.Add(Entry{TS: r.Time, Level: level, Msg: r.Message, Attrs: attrs}) + return h.parent.Handle(context.Background(), r) +} + +func (h *Handler) WithAttrs(attrs []slog.Attr) slog.Handler { + cp := *h + cp.attrs = append(append([]slog.Attr{}, h.attrs...), attrs...) + return &cp +} + +func (h *Handler) WithGroup(name string) slog.Handler { + cp := *h + if h.group == "" { + cp.group = name + } else { + cp.group = h.group + "." + name + } + return &cp +} + +func fmtValue(v slog.Value) string { + switch v.Kind() { + case slog.KindString: + return v.String() + case slog.KindInt64: + return itoa(v.Int64()) + case slog.KindUint64: + return utoa(v.Uint64()) + case slog.KindFloat64: + return ftoa(v.Float64()) + case slog.KindBool: + if v.Bool() { + return "true" + } + return "false" + case slog.KindTime: + return v.Time().Format(time.RFC3339) + case slog.KindDuration: + return v.Duration().String() + case slog.KindAny: + return anyString(v.Any()) + default: + return v.String() + } +} + +func anyString(v any) string { + switch t := v.(type) { + case error: + if t == nil { + return "" + } + return t.Error() + case string: + return t + case nil: + return "" + default: + return fmt.Sprintf("%v", t) + } +} + +func itoa(v int64) string { + if v == 0 { + return "0" + } + neg := v < 0 + if neg { + v = -v + } + var buf [24]byte + i := len(buf) + for v > 0 { + i-- + buf[i] = byte('0' + v%10) + v /= 10 + } + if neg { + i-- + buf[i] = '-' + } + return string(buf[i:]) +} + +func utoa(v uint64) string { return itoa(int64(v)) } + +func ftoa(f float64) string { + return fmt.Sprintf("%g", f) +} diff --git a/internal/metrics/metrics.go b/internal/metrics/metrics.go new file mode 100644 index 0000000..a3d8d00 --- /dev/null +++ b/internal/metrics/metrics.go @@ -0,0 +1,399 @@ +// Package metrics collects runtime counters for the web console. +package metrics + +import ( + "encoding/json" + "os" + "path/filepath" + "sort" + "sync" + "time" +) + +type Status string + +const ( + StatusOK Status = "ok" + StatusEmpty Status = "empty" + StatusError Status = "error" + StatusDenied Status = "unauthorized" + StatusRateLimit Status = "rate_limited" +) + +type Record struct { + At time.Time `json:"at"` + Model string `json:"model"` + ServedBy string `json:"served_by,omitempty"` + Site string `json:"site"` + Stream bool `json:"stream"` + DurationMs int64 `json:"duration_ms"` + TTFTMs int64 `json:"ttft_ms,omitempty"` + PromptTokens int `json:"prompt_tokens"` + CompletionTokens int `json:"completion_tokens"` + Status Status `json:"status"` + Error string `json:"error,omitempty"` + Route string `json:"route,omitempty"` +} + +type modelStats struct { + Requests int64 `json:"requests"` + Errors int64 `json:"errors"` + Empty int64 `json:"empty"` + Prompt int64 `json:"prompt_tokens"` + Completed int64 `json:"completion_tokens"` + LastMs int64 `json:"last_ms"` + SumMs int64 `json:"sum_ms"` +} + +type siteStats struct { + Requests int64 `json:"requests"` + Errors int64 `json:"errors"` + Quota int64 `json:"quota_exhausted"` +} + +type dayStats struct { + Date string `json:"date"` + Requests int64 `json:"requests"` + Prompt int64 `json:"prompt_tokens"` + Complete int64 `json:"completion_tokens"` +} + +type snapshot struct { + StartedAt time.Time `json:"started_at"` + Requests int64 `json:"requests"` + Errors int64 `json:"errors"` + Empty int64 `json:"empty"` + Denied int64 `json:"unauthorized"` + RateLimit int64 `json:"rate_limited"` + Streams int64 `json:"streams"` + InFlight int64 `json:"in_flight"` + Prompt int64 `json:"prompt_tokens"` + Complete int64 `json:"completion_tokens"` + Models map[string]*modelStats `json:"models"` + Sites map[string]*siteStats `json:"sites"` + Days []*dayStats `json:"days"` + Recent []*Record `json:"recent"` + Latency latencyStats `json:"latency"` + RPS float64 `json:"rps"` +} + +type latencyStats struct { + Count int `json:"count"` + P50 int64 `json:"p50"` + P95 int64 `json:"p95"` + Max int64 `json:"max"` +} + +type Recorder struct { + mu sync.Mutex + started time.Time + total int64 + errs int64 + empty int64 + denied int64 + limited int64 + streams int64 + inflight int64 + prompt int64 + complete int64 + models map[string]*modelStats + sites map[string]*siteStats + days map[string]*dayStats + recent []*Record + latency []int64 + path string + stop chan struct{} + once sync.Once +} + +const ( + maxRecent = 200 + maxLatency = 500 +) + +type persisted struct { + Total int64 `json:"total"` + Errors int64 `json:"errors"` + Empty int64 `json:"empty"` + Denied int64 `json:"denied"` + Limited int64 `json:"limited"` + Streams int64 `json:"streams"` + Prompt int64 `json:"prompt"` + Complete int64 `json:"complete"` + Models map[string]*modelStats `json:"models"` + Sites map[string]*siteStats `json:"sites"` + Days map[string]*dayStats `json:"days"` + Recent []*Record `json:"recent"` +} + +func New(dataDir string) *Recorder { + r := &Recorder{ + started: time.Now(), + models: map[string]*modelStats{}, + sites: map[string]*siteStats{}, + days: map[string]*dayStats{}, + path: filepath.Join(dataDir, "metrics.json"), + stop: make(chan struct{}), + } + r.load() + return r +} + +func (r *Recorder) Start() { + go func() { + t := time.NewTicker(20 * time.Second) + defer t.Stop() + for { + select { + case <-t.C: + r.Save() + case <-r.stop: + return + } + } + }() +} + +func (r *Recorder) Close() { + r.once.Do(func() { close(r.stop) }) + r.Save() +} + +func (r *Recorder) IncInFlight(delta int64) { + r.mu.Lock() + r.inflight += delta + if r.inflight < 0 { + r.inflight = 0 + } + r.mu.Unlock() +} + +// Record stores one completed request. +func (r *Recorder) Record(rec Record) { + if rec.At.IsZero() { + rec.At = time.Now() + } + if rec.Model == "" && rec.ServedBy == "" { + rec.Model = "unknown" + } + if rec.Site == "" { + rec.Site = "unknown" + } + r.mu.Lock() + defer r.mu.Unlock() + + r.total++ + r.prompt += int64(rec.PromptTokens) + r.complete += int64(rec.CompletionTokens) + if rec.Stream { + r.streams++ + } + switch rec.Status { + case StatusError: + r.errs++ + case StatusEmpty: + r.empty++ + r.errs++ + case StatusDenied: + r.denied++ + case StatusRateLimit: + r.limited++ + } + + ms := rec.Model + if rec.ServedBy != "" { + ms = rec.ServedBy + } + m := r.models[ms] + if m == nil { + m = &modelStats{} + r.models[ms] = m + } + m.Requests++ + if rec.Status == StatusError || rec.Status == StatusEmpty { + m.Errors++ + } + if rec.Status == StatusEmpty { + m.Empty++ + } + m.Prompt += int64(rec.PromptTokens) + m.Completed += int64(rec.CompletionTokens) + m.LastMs = rec.DurationMs + m.SumMs += rec.DurationMs + + if rec.Site != "" { + s := r.sites[rec.Site] + if s == nil { + s = &siteStats{} + r.sites[rec.Site] = s + } + s.Requests++ + if rec.Status == StatusError || rec.Status == StatusEmpty { + s.Errors++ + } + } + + day := rec.At.Local().Format("2006-01-02") + d := r.days[day] + if d == nil { + d = &dayStats{Date: day} + r.days[day] = d + } + d.Requests++ + d.Prompt += int64(rec.PromptTokens) + d.Complete += int64(rec.CompletionTokens) + for len(r.days) > 31 { + keys := make([]string, 0, len(r.days)) + for k := range r.days { + keys = append(keys, k) + } + sort.Strings(keys) + delete(r.days, keys[0]) + } + + cp := rec + r.recent = append(r.recent, &cp) + if len(r.recent) > maxRecent { + r.recent = r.recent[len(r.recent)-maxRecent:] + } + if rec.DurationMs > 0 { + r.latency = append(r.latency, rec.DurationMs) + if len(r.latency) > maxLatency { + r.latency = r.latency[len(r.latency)-maxLatency:] + } + } +} + +func (r *Recorder) Snapshot() any { + r.mu.Lock() + defer r.mu.Unlock() + + var lat []int64 + lat = append(lat, r.latency...) + var p50, p95, max int64 + if n := len(lat); n > 0 { + sorted := append([]int64(nil), lat...) + sort.Slice(sorted, func(i, j int) bool { return sorted[i] < sorted[j] }) + p50 = sorted[n*50/100] + p95 = sorted[n*95/100] + if p95 == 0 { + p95 = sorted[n-1] + } + max = sorted[n-1] + } + + models := make(map[string]*modelStats, len(r.models)) + for k, v := range r.models { + cp := *v + if cp.Requests > 0 { + cp.SumMs = v.SumMs + } + models[k] = &cp + } + sites := make(map[string]*siteStats, len(r.sites)) + for k, v := range r.sites { + cp := *v + sites[k] = &cp + } + days := make([]*dayStats, 0, len(r.days)) + for _, v := range r.days { + cp := *v + days = append(days, &cp) + } + sort.Slice(days, func(i, j int) bool { return days[i].Date < days[j].Date }) + + recent := make([]*Record, 0, len(r.recent)) + for i := len(r.recent) - 1; i >= 0; i-- { + recent = append(recent, r.recent[i]) + } + + var window int64 + cutoff := time.Now().Add(-time.Minute) + for i := len(r.recent) - 1; i >= 0; i-- { + if r.recent[i].At.After(cutoff) { + window++ + } + } + + return &snapshot{ + StartedAt: r.started, + Requests: r.total, + Errors: r.errs, + Empty: r.empty, + Denied: r.denied, + RateLimit: r.limited, + Streams: r.streams, + InFlight: r.inflight, + Prompt: r.prompt, + Complete: r.complete, + Models: models, + Sites: sites, + Days: days, + Recent: recent, + Latency: latencyStats{Count: len(lat), P50: p50, P95: p95, Max: max}, + RPS: float64(window) / 60.0, + } +} + +// Reset clears all counters (web console action). +func (r *Recorder) Reset() { + r.mu.Lock() + defer r.mu.Unlock() + r.total, r.errs, r.empty, r.denied, r.limited, r.streams = 0, 0, 0, 0, 0, 0 + r.prompt, r.complete = 0, 0 + r.models = map[string]*modelStats{} + r.sites = map[string]*siteStats{} + r.days = map[string]*dayStats{} + r.recent = nil + r.latency = nil +} + +func (r *Recorder) Save() { + r.mu.Lock() + p := persisted{ + Total: r.total, Errors: r.errs, Empty: r.empty, Denied: r.denied, + Limited: r.limited, Streams: r.streams, Prompt: r.prompt, Complete: r.complete, + Models: r.models, Sites: r.sites, Days: r.days, Recent: r.recent, + } + path := r.path + r.mu.Unlock() + + if path == "" { + return + } + if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil { + return + } + raw, err := json.MarshalIndent(p, "", " ") + if err != nil { + return + } + tmp := path + ".tmp" + if err := os.WriteFile(tmp, raw, 0o644); err != nil { + return + } + _ = os.Rename(tmp, path) +} + +func (r *Recorder) load() { + raw, err := os.ReadFile(r.path) + if err != nil { + return + } + var p persisted + if err := json.Unmarshal(raw, &p); err != nil { + return + } + r.total, r.errs, r.empty, r.denied, r.limited = p.Total, p.Errors, p.Empty, p.Denied, p.Limited + r.streams, r.prompt, r.complete = p.Streams, p.Prompt, p.Complete + if p.Models != nil { + r.models = p.Models + } + if p.Sites != nil { + r.sites = p.Sites + } + if p.Days != nil { + r.days = p.Days + } + r.recent = p.Recent +} diff --git a/internal/openai/prompt.go b/internal/openai/prompt.go new file mode 100644 index 0000000..a71d2b7 --- /dev/null +++ b/internal/openai/prompt.go @@ -0,0 +1,292 @@ +package openai + +import ( + "bytes" + "encoding/json" + "fmt" + "strings" +) + +// ContentToText flattens OpenAI content parts into plain text. +func ContentToText(parts []map[string]any) string { + var out []string + for _, p := range parts { + t, _ := p["type"].(string) + switch t { + case "text", "input_text", "output_text": + if v, ok := p["text"].(string); ok && v != "" { + out = append(out, v) + } + } + } + return strings.Join(out, "\n") +} + +type PromptOptions struct { + Tools []ToolDef + ToolChoice json.RawMessage + Temperature *float64 + TopP *float64 + MaxTokens *int + Stop []string + ResponseFormat *ResponseFormat + SystemHint string +} + +// BuildPrompt flattens a chat transcript into the single prompt string the +// upstream AIPKit endpoint expects. +func BuildPrompt(messages []ChatMessage, opts PromptOptions) string { + parts := make([]string, 0, len(messages)+4) + for _, msg := range messages { + content := msg.Content.String() + switch msg.Role { + case "system", "developer": + tag := "System" + if msg.Role == "developer" { + tag = "Developer" + } + if opts.SystemHint != "" { + content = strings.TrimSpace(content + "\n\n" + opts.SystemHint) + } + parts = append(parts, fmt.Sprintf("[%s]\n%s", tag, content)) + case "user": + parts = append(parts, "[User]\n"+content) + case "assistant": + if len(msg.ToolCalls) > 0 { + raw, _ := json.Marshal(msg.ToolCalls) + parts = append(parts, fmt.Sprintf("[Assistant]\n%s\n[Tool Calls]\n%s", content, raw)) + } else { + parts = append(parts, "[Assistant]\n"+content) + } + case "tool": + parts = append(parts, fmt.Sprintf("[Tool Result (id=%s)]\n%s", msg.ToolCallID, content)) + default: + title := "Message" + if msg.Role != "" { + title = strings.ToUpper(msg.Role[:1]) + msg.Role[1:] + } + parts = append(parts, fmt.Sprintf("[%s]\n%s", title, content)) + } + } + if len(opts.Tools) > 0 { + parts = append(parts, toolsPrompt(opts.Tools, opts.ToolChoice)) + } + if tail := samplingPrompt(opts); tail != "" { + parts = append(parts, tail) + } + return strings.Join(parts, "\n\n") +} + +func samplingPrompt(opts PromptOptions) string { + var lines []string + add := func(format string, a ...any) { + lines = append(lines, fmt.Sprintf(format, a...)) + } + if opts.Temperature != nil { + add("- Temperature: %.3g (0 = most deterministic, 2 = most creative).", *opts.Temperature) + } + if opts.TopP != nil { + add("- Top-p nucleus sampling: %.3g.", *opts.TopP) + } + if opts.MaxTokens != nil { + add("- Hard limit: produce at most %d tokens of output, then stop.", *opts.MaxTokens) + } + if len(opts.Stop) > 0 { + add("- Stop sequences (do not emit them): %s", strings.Join(opts.Stop, " | ")) + } + if opts.ResponseFormat != nil && opts.ResponseFormat.Type == "json_object" { + add("- Respond with a single valid JSON object only, no prose, no markdown fences.") + } + if len(lines) == 0 { + return "" + } + return "=== GENERATION CONSTRAINTS ===\n" + strings.Join(lines, "\n") + "\n=== END GENERATION CONSTRAINTS ===" +} + +// ResponsesToMessages converts an OpenAI Responses API request into chat +// messages. Besides plain message items it understands function_call and +// function_call_output items so multi-turn tool loops round-trip. +func ResponsesToMessages(req *ResponsesRequest) ([]ChatMessage, error) { + var out []ChatMessage + if req.Instructions != "" { + out = append(out, ChatMessage{Role: "system", Content: MessageContent{Text: req.Instructions}}) + } + trimmed := strings.TrimSpace(string(req.Input)) + if trimmed == "" { + return nil, fmt.Errorf("input is required") + } + if trimmed[0] == '"' { + var s string + if err := json.Unmarshal(req.Input, &s); err != nil { + return nil, fmt.Errorf("invalid input: %w", err) + } + out = append(out, ChatMessage{Role: "user", Content: MessageContent{Text: s}}) + return out, nil + } + var items []json.RawMessage + if err := json.Unmarshal(req.Input, &items); err != nil { + return nil, fmt.Errorf("invalid input: %w", err) + } + for _, raw := range items { + var probe struct { + Type string `json:"type"` + Role string `json:"role"` + } + if err := json.Unmarshal(raw, &probe); err != nil { + continue + } + switch probe.Type { + case "function_call": + var fc struct { + CallID string `json:"call_id"` + ID string `json:"id"` + Name string `json:"name"` + Arguments json.RawMessage `json:"arguments"` + } + _ = json.Unmarshal(raw, &fc) + id := fc.CallID + if id == "" { + id = fc.ID + } + if id == "" { + id = "call_" + randomHex(8) + } + out = append(out, ChatMessage{Role: "assistant", ToolCalls: []ToolCall{{ + ID: id, Type: "function", + Function: FunctionCall{Name: fc.Name, Arguments: rawArgText(fc.Arguments)}, + }}}) + case "function_call_output": + var fco struct { + CallID string `json:"call_id"` + Output json.RawMessage `json:"output"` + } + _ = json.Unmarshal(raw, &fco) + out = append(out, ChatMessage{ + Role: "tool", + ToolCallID: fco.CallID, + Content: MessageContent{Text: rawArgText(fco.Output)}, + }) + case "message", "": + role := probe.Role + if role == "" { + role = "user" + } + var it struct { + Content json.RawMessage `json:"content"` + } + _ = json.Unmarshal(raw, &it) + content := MessageContent{} + _ = json.Unmarshal(it.Content, &content) + out = append(out, ChatMessage{Role: role, Content: content}) + default: + // reasoning and other item types have no chat representation + } + } + return out, nil +} + +// rawArgText renders a Responses field that may arrive either as a JSON string +// or as a bare JSON value into plain text. +func rawArgText(raw json.RawMessage) string { + trim := bytes.TrimSpace(raw) + if len(trim) == 0 || string(trim) == "null" { + return "" + } + if trim[0] == '"' { + var s string + if json.Unmarshal(trim, &s) == nil { + return s + } + return "" + } + return string(trim) +} + +func toolsPrompt(tools []ToolDef, toolChoice json.RawMessage) string { + lines := []string{ + "", + "=== TOOL INSTRUCTIONS ===", + "You have access to the following tools. When you need to use a tool, " + + "you MUST output ONLY a single JSON object in this exact format " + + "(no markdown, no explanations, no extra text before or after the JSON):", + "", + `{"tool_calls": [{"id": "call_xxx", "type": "function", "function": {"name": "tool_name", "arguments": "{\"param\": \"value\"}"}}]}`, + "", + "Available tools:", + } + for i, tool := range tools { + fn := tool.Function + desc := strings.TrimSpace(fn.Description) + if desc == "" { + desc = "No description" + } + paramDesc := "" + if len(fn.Parameters) > 0 { + var schema struct { + Properties map[string]struct { + Type string `json:"type"` + } `json:"properties"` + Required []string `json:"required"` + } + if err := json.Unmarshal(fn.Parameters, &schema); err == nil && len(schema.Properties) > 0 { + required := map[string]bool{} + for _, r := range schema.Required { + required[r] = true + } + var pl []string + for name, p := range schema.Properties { + ptype := p.Type + if ptype == "" { + ptype = "any" + } + mark := "" + if required[name] { + mark = " (required)" + } + pl = append(pl, fmt.Sprintf(" - %s: %s%s", name, ptype, mark)) + } + // Keep the schema order stable across runs. + sortStrings(pl) + paramDesc = "\n" + strings.Join(pl, "\n") + } + } + lines = append(lines, fmt.Sprintf("%d. %s: %s%s", i+1, fn.Name, desc, paramDesc)) + } + + forced := "" + if len(toolChoice) > 0 { + var tc struct { + Function struct { + Name string `json:"name"` + } `json:"function"` + Type string `json:"type"` + Name string `json:"name"` + } + if err := json.Unmarshal(toolChoice, &tc); err == nil && (tc.Type == "function" || tc.Function.Name != "") { + forced = tc.Function.Name + if forced == "" { + forced = tc.Name + } + } else if s := strings.Trim(string(toolChoice), `"`); s != "auto" && s != "none" && s != "" && s != "required" && !strings.HasPrefix(s, "{") { + forced = s + } + } + lines = append(lines, "") + if forced != "" { + lines = append(lines, + fmt.Sprintf("IMPORTANT: You MUST use the tool '%s' for this request. Output ONLY the JSON object above, nothing else.", forced)) + } else { + lines = append(lines, + "If no tool is needed, reply normally. If a tool is needed, output ONLY the JSON object above.") + } + lines = append(lines, "=== END TOOL INSTRUCTIONS ===", "") + return strings.Join(lines, "\n") +} + +func sortStrings(s []string) { + for i := 1; i < len(s); i++ { + for j := i; j > 0 && s[j] < s[j-1]; j-- { + s[j], s[j-1] = s[j-1], s[j] + } + } +} diff --git a/internal/openai/prompt_test.go b/internal/openai/prompt_test.go new file mode 100644 index 0000000..f629609 --- /dev/null +++ b/internal/openai/prompt_test.go @@ -0,0 +1,185 @@ +package openai + +import ( + "encoding/json" + "strings" + "testing" +) + +func TestBuildPromptKeepsRolesAndTextParts(t *testing.T) { + msgs := []ChatMessage{ + {Role: "system", Content: MessageContent{Text: "Rules"}}, + {Role: "user", Content: MessageContent{Parts: []map[string]any{ + {"type": "text", "text": "Hello"}, + }}}, + } + prompt := BuildPrompt(msgs, PromptOptions{}) + for _, want := range []string{"[System]", "Rules", "[User]", "Hello"} { + if !strings.Contains(prompt, want) { + t.Errorf("prompt missing %q:\n%s", want, prompt) + } + } +} + +func TestBuildPromptWithTools(t *testing.T) { + prompt := BuildPrompt([]ChatMessage{ + {Role: "user", Content: MessageContent{Text: "Hi"}}, + }, PromptOptions{Tools: []ToolDef{{ + Type: "function", + Function: Function{Name: "search", Description: "Search the web"}, + }}}) + if !strings.Contains(prompt, "=== TOOL INSTRUCTIONS ===") { + t.Error("missing tool instructions marker") + } + if !strings.Contains(prompt, "search") { + t.Error("missing tool name") + } +} + +func TestBuildPromptAppendsSamplingConstraints(t *testing.T) { + temp := 0.4 + max := 512 + prompt := BuildPrompt([]ChatMessage{ + {Role: "user", Content: MessageContent{Text: "Hi"}}, + }, PromptOptions{Temperature: &temp, MaxTokens: &max, Stop: []string{"###"}}) + if !strings.Contains(prompt, "=== GENERATION CONSTRAINTS ===") { + t.Error("missing constraints marker") + } + if !strings.Contains(prompt, "0.4") || !strings.Contains(prompt, "512") || !strings.Contains(prompt, "###") { + t.Errorf("constraints missing values:\n%s", prompt) + } +} + +func TestResponsesRequestToMessages(t *testing.T) { + req := &ResponsesRequest{ + Model: "deepseek-v4-flash-de", + Instructions: "Be terse", + Input: json.RawMessage(`"Hi"`), + } + msgs, err := ResponsesToMessages(req) + if err != nil { + t.Fatalf("responses_to_messages: %v", err) + } + if len(msgs) != 2 || msgs[0].Role != "system" || msgs[1].Role != "user" { + t.Fatalf("roles = %v", []string{msgs[0].Role, msgs[1].Role}) + } +} + +func TestResponsesRequestMessageArrayInput(t *testing.T) { + req := &ResponsesRequest{Input: json.RawMessage(`[ + {"role":"user","content":"a"}, + {"role":"assistant","content":"b"} + ]`)} + msgs, err := ResponsesToMessages(req) + if err != nil { + t.Fatalf("responses_to_messages: %v", err) + } + if len(msgs) != 2 || msgs[0].Content.Text != "a" || msgs[1].Content.Text != "b" { + t.Fatalf("msgs = %+v", msgs) + } +} + +func TestResponsesRequestFunctionCallRoundTrip(t *testing.T) { + req := &ResponsesRequest{Input: json.RawMessage(`[ + {"type":"message","role":"user","content":"weather in Paris?"}, + {"type":"function_call","call_id":"call_1","name":"get_weather", + "arguments":"{\"city\":\"Paris\"}"}, + {"type":"function_call_output","call_id":"call_1","output":"Sunny"}, + {"type":"message","role":"assistant","content":[{"type":"output_text","text":"It is sunny."}]} + ]`)} + msgs, err := ResponsesToMessages(req) + if err != nil { + t.Fatalf("responses_to_messages: %v", err) + } + if len(msgs) != 4 { + t.Fatalf("len(msgs) = %d, want 4: %+v", len(msgs), msgs) + } + if msgs[1].Role != "assistant" || len(msgs[1].ToolCalls) != 1 { + t.Fatalf("assistant = %+v", msgs[1]) + } + if msgs[1].ToolCalls[0].ID != "call_1" || msgs[1].ToolCalls[0].Function.Name != "get_weather" { + t.Errorf("tool_call = %+v", msgs[1].ToolCalls[0]) + } + if msgs[1].ToolCalls[0].Function.Arguments != `{"city":"Paris"}` { + t.Errorf("arguments = %q", msgs[1].ToolCalls[0].Function.Arguments) + } + if msgs[2].Role != "tool" || msgs[2].ToolCallID != "call_1" || msgs[2].Content.Text != "Sunny" { + t.Errorf("tool = %+v", msgs[2]) + } + if msgs[3].Role != "assistant" || msgs[3].Content.String() != "It is sunny." { + t.Errorf("final assistant = %+v", msgs[3]) + } +} + +func TestResponsesToolToToolDef(t *testing.T) { + flat := ResponsesTool{Type: "function", Name: "f", Description: "d", + Parameters: json.RawMessage(`{"type":"object"}`)} + def, ok := flat.ToToolDef() + if !ok || def.Function.Name != "f" || def.Type != "function" { + t.Fatalf("flat = %+v ok=%v", def, ok) + } + nested := ResponsesTool{Type: "function", Function: &Function{Name: "g"}} + def, ok = nested.ToToolDef() + if !ok || def.Function.Name != "g" { + t.Fatalf("nested = %+v ok=%v", def, ok) + } + if _, ok := (ResponsesTool{Type: "web_search_preview"}).ToToolDef(); ok { + t.Error("non-function tool should be dropped") + } +} + +func TestToolsPromptForcesFlatToolChoiceName(t *testing.T) { + prompt := BuildPrompt([]ChatMessage{ + {Role: "user", Content: MessageContent{Text: "Hi"}}, + }, PromptOptions{ + Tools: []ToolDef{{Type: "function", Function: Function{Name: "get_weather"}}}, + ToolChoice: json.RawMessage(`{"type":"function","name":"get_weather"}`), + }) + if !strings.Contains(prompt, "MUST use the tool 'get_weather'") { + t.Errorf("forced tool missing:\n%s", prompt) + } +} + +func TestTryParseToolCallsPlainJSON(t *testing.T) { + text := `{"tool_calls":[{"id":"call_001","type":"function","function":{"name":"get_weather","arguments":"{\"city\":\"Beijing\"}"}}]}` + remaining, calls, ok := TryParseToolCalls(text) + if !ok || calls == nil { + t.Fatalf("expected tool calls, got ok=%v calls=%v", ok, calls) + } + if remaining != "" { + t.Errorf("remaining = %q", remaining) + } + if len(calls) != 1 || calls[0].Function.Name != "get_weather" { + t.Fatalf("calls = %+v", calls) + } + if calls[0].Function.Arguments != `{"city":"Beijing"}` { + t.Errorf("arguments = %q", calls[0].Function.Arguments) + } +} + +func TestTryParseToolCallsMarkdownJSONBlock(t *testing.T) { + text := "Sure, here you go:\n```json\n" + + `{"tool_calls":[{"id":"c1","type":"function","function":{"name":"search","arguments":"{\"q\":\"hello\"}"}}]}` + + "\n```\nDone." + remaining, calls, ok := TryParseToolCalls(text) + if !ok || calls == nil { + t.Fatalf("expected tool calls, got ok=%v", ok) + } + if !strings.Contains(remaining, "Sure") { + t.Errorf("remaining = %q", remaining) + } + if calls[0].Function.Name != "search" { + t.Errorf("name = %q", calls[0].Function.Name) + } +} + +func TestTryParseToolCallsNoToolCall(t *testing.T) { + text := "The weather in Beijing is sunny." + remaining, calls, ok := TryParseToolCalls(text) + if ok || calls != nil { + t.Fatalf("expected no tool calls, got ok=%v calls=%v", ok, calls) + } + if remaining != text { + t.Errorf("remaining = %q", remaining) + } +} diff --git a/internal/openai/toolcalls.go b/internal/openai/toolcalls.go new file mode 100644 index 0000000..8885980 --- /dev/null +++ b/internal/openai/toolcalls.go @@ -0,0 +1,117 @@ +package openai + +import ( + "crypto/rand" + "encoding/json" + "strings" +) + +// TryParseToolCalls extracts an OpenAI-style tool_calls object from raw model +// output. It mirrors the Python implementation: plain JSON, ```json fences and +// generic ``` fences are all candidates. +// +// Returns the remaining prose plus the parsed tool calls (ok=false when the +// text is ordinary chat). +func TryParseToolCalls(text string) (string, []ToolCall, bool) { + trimmed := strings.TrimSpace(text) + var candidates []string + if strings.HasPrefix(trimmed, "{") { + candidates = append(candidates, trimmed) + } + if strings.Contains(trimmed, "```json") { + for _, part := range strings.Split(trimmed, "```json")[1:] { + code := strings.TrimSpace(firstBlock(part)) + if strings.HasPrefix(code, "{") { + candidates = append(candidates, code) + } + } + } else if strings.Contains(trimmed, "```") { + for _, part := range strings.Split(trimmed, "```")[1:] { + code := strings.TrimSpace(firstBlock(part)) + if strings.HasPrefix(code, "{") { + candidates = append(candidates, code) + } + } + } + + for _, cand := range candidates { + var payload struct { + ToolCalls []struct { + ID string `json:"id"` + Type string `json:"type"` + Function json.RawMessage `json:"function"` + } `json:"tool_calls"` + } + if err := json.Unmarshal([]byte(cand), &payload); err != nil { + continue + } + if payload.ToolCalls == nil { + continue + } + calls := make([]ToolCall, 0, len(payload.ToolCalls)) + for i, tc := range payload.ToolCalls { + var fn struct { + Name string `json:"name"` + Arguments json.RawMessage `json:"arguments"` + } + _ = json.Unmarshal(tc.Function, &fn) + args := "{}" + if len(fn.Arguments) > 0 { + var s string + if err := json.Unmarshal(fn.Arguments, &s); err == nil { + args = s + } else { + // arguments already delivered as an object + var obj any + if json.Unmarshal(fn.Arguments, &obj) == nil { + raw, _ := json.Marshal(obj) + args = string(raw) + } + } + } + id := tc.ID + if id == "" { + id = "call_" + randomHex(8) + } + typ := tc.Type + if typ == "" { + typ = "function" + } + _ = i + calls = append(calls, ToolCall{ + ID: id, + Type: typ, + Function: FunctionCall{ + Name: fn.Name, + Arguments: args, + }, + }) + } + remaining := strings.ReplaceAll(text, cand, "") + remaining = strings.ReplaceAll(remaining, "```json", "") + remaining = strings.ReplaceAll(remaining, "```", "") + return strings.TrimSpace(remaining), calls, true + } + return text, nil, false +} + +func firstBlock(s string) string { + if i := strings.Index(s, "```"); i >= 0 { + return s[:i] + } + return s +} + +func randomHex(n int) string { + b := make([]byte, n) + if _, err := rand.Read(b); err != nil { + return "00000000"[:n] + } + const hexdigits = "0123456789abcdef" + out := make([]byte, n*2) + for i, v := range b { + out[i*2] = hexdigits[v>>4] + out[i*2+1] = hexdigits[v&0x0f] + } + return string(out) +} diff --git a/internal/openai/types.go b/internal/openai/types.go new file mode 100644 index 0000000..87adc2e --- /dev/null +++ b/internal/openai/types.go @@ -0,0 +1,210 @@ +package openai + +import "encoding/json" + +type ChatMessage struct { + Role string `json:"role"` + Content MessageContent `json:"content,omitempty"` + Name string `json:"name,omitempty"` + ToolCalls []ToolCall `json:"tool_calls,omitempty"` + ToolCallID string `json:"tool_call_id,omitempty"` +} + +// MessageContent accepts either a plain string or the OpenAI content-part +// array, unmarshalling into whichever shape arrives on the wire. +type MessageContent struct { + Text string + Parts []map[string]any + IsRaw bool +} + +func (m *MessageContent) UnmarshalJSON(data []byte) error { + if len(data) > 0 && data[0] == '"' { + var s string + if err := json.Unmarshal(data, &s); err != nil { + return err + } + m.Text = s + m.Parts = nil + m.IsRaw = false + return nil + } + if string(data) == "null" { + m.Text = "" + m.Parts = nil + return nil + } + var parts []map[string]any + if err := json.Unmarshal(data, &parts); err != nil { + return err + } + m.Parts = parts + m.Text = "" + m.IsRaw = true + return nil +} + +func (m MessageContent) MarshalJSON() ([]byte, error) { + if m.IsRaw && m.Parts != nil { + return json.Marshal(m.Parts) + } + return json.Marshal(m.Text) +} + +func (m MessageContent) String() string { + if m.IsRaw || (m.Text == "" && len(m.Parts) > 0) { + return ContentToText(m.Parts) + } + return m.Text +} + +type ResponseFormat struct { + Type string `json:"type,omitempty"` + JSONSchema json.RawMessage `json:"json_schema,omitempty"` +} + +type StreamOptions struct { + IncludeUsage bool `json:"include_usage,omitempty"` +} + +type ChatCompletionRequest struct { + Model string `json:"model"` + Messages []ChatMessage `json:"messages"` + Stream bool `json:"stream,omitempty"` + Temperature *float64 `json:"temperature,omitempty"` + TopP *float64 `json:"top_p,omitempty"` + MaxTokens *int `json:"max_tokens,omitempty"` + MaxCompletionTok *int `json:"max_completion_tokens,omitempty"` + Tools []ToolDef `json:"tools,omitempty"` + ToolChoice json.RawMessage `json:"tool_choice,omitempty"` + User string `json:"user,omitempty"` + Stop []string `json:"stop,omitempty"` + ResponseFormat *ResponseFormat `json:"response_format,omitempty"` + StreamOptions *StreamOptions `json:"stream_options,omitempty"` + N *int `json:"n,omitempty"` + Seed *int `json:"seed,omitempty"` +} + +type ToolDef struct { + Type string `json:"type,omitempty"` + Function Function `json:"function"` +} + +type Function struct { + Name string `json:"name"` + Description string `json:"description,omitempty"` + Parameters json.RawMessage `json:"parameters,omitempty"` +} + +type ToolCall struct { + ID string `json:"id"` + Type string `json:"type"` + Function FunctionCall `json:"function"` +} + +type FunctionCall struct { + Name string `json:"name"` + Arguments string `json:"arguments"` +} + +type ResponsesRequest struct { + Model string `json:"model"` + Input json.RawMessage `json:"input"` + Stream bool `json:"stream,omitempty"` + Instructions string `json:"instructions,omitempty"` + Temperature *float64 `json:"temperature,omitempty"` + TopP *float64 `json:"top_p,omitempty"` + MaxOutputTokens *int `json:"max_output_tokens,omitempty"` + Tools []ResponsesTool `json:"tools,omitempty"` + ToolChoice json.RawMessage `json:"tool_choice,omitempty"` +} + +// ResponsesTool is a function tool in the flat Responses API shape; the nested +// Chat Completions shape is tolerated as well. Non-function tools (web search +// etc.) are dropped because the upstream cannot execute them. +type ResponsesTool struct { + Type string `json:"type"` + Name string `json:"name,omitempty"` + Description string `json:"description,omitempty"` + Parameters json.RawMessage `json:"parameters,omitempty"` + Strict bool `json:"strict,omitempty"` + Function *Function `json:"function,omitempty"` +} + +// ToToolDef normalizes the tool onto the Chat Completions function shape. +func (t ResponsesTool) ToToolDef() (ToolDef, bool) { + if t.Function != nil && t.Function.Name != "" { + return ToolDef{Type: "function", Function: *t.Function}, true + } + if t.Name == "" || (t.Type != "" && t.Type != "function") { + return ToolDef{}, false + } + return ToolDef{Type: "function", Function: Function{ + Name: t.Name, Description: t.Description, Parameters: t.Parameters, + }}, true +} + +type ChoiceMessage struct { + Role string `json:"role"` + Content string `json:"content"` + ToolCalls []ToolCall `json:"tool_calls,omitempty"` +} + +type Choice struct { + Index int `json:"index"` + Message ChoiceMessage `json:"message"` + FinishReason string `json:"finish_reason"` +} + +type Usage struct { + PromptTokens int `json:"prompt_tokens"` + CompletionTokens int `json:"completion_tokens"` + TotalTokens int `json:"total_tokens"` +} + +type ChatCompletionResponse struct { + ID string `json:"id"` + Object string `json:"object"` + Created int64 `json:"created"` + Model string `json:"model"` + Choices []Choice `json:"choices"` + Usage Usage `json:"usage"` +} + +type ChoiceDelta struct { + Role string `json:"role,omitempty"` + Content string `json:"content,omitempty"` + ToolCalls []ToolCall `json:"tool_calls,omitempty"` +} + +type StreamChoice struct { + Index int `json:"index"` + Delta ChoiceDelta `json:"delta"` + FinishReason *string `json:"finish_reason"` +} + +type ChatCompletionChunk struct { + ID string `json:"id"` + Object string `json:"object"` + Created int64 `json:"created"` + Model string `json:"model"` + Choices []StreamChoice `json:"choices"` + Usage *Usage `json:"usage,omitempty"` +} + +type ModelInfo struct { + ID string `json:"id"` + Object string `json:"object"` + Created int64 `json:"created"` + OwnedBy string `json:"owned_by"` +} + +type ErrorBody struct { + Message string `json:"message"` + Type string `json:"type"` + Code any `json:"code,omitempty"` +} + +type ErrorResponse struct { + Error ErrorBody `json:"error"` +} diff --git a/internal/turnstile/browser.go b/internal/turnstile/browser.go new file mode 100644 index 0000000..88c4994 --- /dev/null +++ b/internal/turnstile/browser.go @@ -0,0 +1,1098 @@ +package turnstile + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "fmt" + "io" + "net" + "net/http" + "net/url" + "os" + "os/exec" + "path/filepath" + "strconv" + "strings" + "sync" + "time" + + "github.com/nyoungo/dsfree2api/internal/config" +) + +// browserDebugHook, when set (tests / troubleshooting), receives a trace of +// every solver step. Production leaves it nil. +var browserDebug func(format string, args ...any) + +// browserDiagHook, when set (tests / troubleshooting), receives the CDP +// connection and page session once a browser attempt is attached. +// Production leaves it nil. +var browserDiagHook func(conn *cdp, sid string) + +// browserSetupHook, when set (tests / troubleshooting), runs after setup and +// before the target navigation — a place to inject extra test scripts. +// Production leaves it nil. +var browserSetupHook func(conn *cdp, sid string) + +func debugf(format string, args ...any) { + if browserDebug != nil { + browserDebug(format, args...) + } +} + +// solveTokenBrowser gets a Turnstile token by driving the local browser named +// in [turnstile].browser_path over the Chrome DevTools Protocol — the same +// recipe as heartmore/cloudflare-solver (FlareSolverr): open the site, inject +// the widget, click it with trusted input and poll the callback. No Playwright +// driver, no Python, no Docker — the binary talks CDP directly. +func (s *Solver) solveTokenBrowser(ctx context.Context, site *config.Site, sitekey string, c *core) (string, error) { + cfg := s.Config() + if strings.TrimSpace(cfg.BrowserPath) == "" { + return "", &Error{ + Msg: `turnstile.browser_path is empty — point it at Chrome/Edge (provider = "browser")`, + Retryable: false, + } + } + if _, err := os.Stat(cfg.BrowserPath); err != nil { + return "", &Error{Msg: "turnstile.browser_path: " + err.Error(), Retryable: false} + } + + // one browser window at a time, whatever the sites do + s.browserMu.Lock() + defer s.browserMu.Unlock() + + attempts := cfg.Retries + if attempts < 1 { + attempts = 1 + } + var last error + for attempt := 0; attempt < attempts; attempt++ { + token, err := s.browserAttempt(ctx, site, sitekey, cfg, c) + if err == nil { + return token, nil + } + if ctx.Err() != nil { + return "", ctx.Err() + } + last = err + if !Retryable(last) { + return "", last + } + backoff := time.Duration(cfg.RetryBackoffSeconds*float64(attempt+1)) * time.Second + if backoff <= 0 { + backoff = time.Second + } + if !sleepCtx(ctx, backoff) { + return "", ctx.Err() + } + } + return "", last +} + +func (s *Solver) browserAttempt(ctx context.Context, site *config.Site, sitekey string, cfg config.Turnstile, c *core) (string, error) { + proxy := "" + if c.proxy != "" && c.proxy != "direct" { + if u, err := url.Parse(c.proxy); err == nil && u.User != nil { + return "", &Error{ + Msg: "browser solver: proxy credentials are not supported by Chrome — use an IP allow-list proxy", + Retryable: false, + } + } + proxy = c.proxy + } + locale := strings.TrimSpace(cfg.BrowserLocale) + if locale == "" { + locale = firstLocale(site.Language) + } + + br, err := launchBrowser(ctx, strings.TrimSpace(cfg.BrowserPath), cfg, locale, proxy) + if err != nil { + return "", &Error{Msg: "browser launch failed: " + err.Error(), Retryable: true} + } + conn, err := dialCDP(ctx, br.wsURL, fmt.Sprintf("http://127.0.0.1:%d", br.port)) + if err != nil { + br.Close() + return "", &Error{Msg: "cdp dial failed: " + err.Error(), Retryable: true} + } + defer func() { + shutCtx, cancel := context.WithTimeout(context.Background(), 3*time.Second) + _, _ = conn.call(shutCtx, "", "Browser.close", nil) + cancel() + conn.Close() + br.Close() + }() + + sid, err := attachPage(ctx, conn) + if err != nil { + return "", &Error{Msg: "cdp attach failed: " + err.Error(), Retryable: true} + } + if h := browserDiagHook; h != nil { + h(conn, sid) + } + + // Everything below runs before Page.navigate so the stealth script is in + // place before the site's own scripts execute. + metrics := map[string]any{ + "width": 1280, "height": 900, "deviceScaleFactor": 1, "mobile": false, + } + if cfg.BrowserHeadless { + // headless reports a 800x600 screen — smaller than our own viewport, + // an instant bot tell; present a normal desktop screen instead. + metrics["screenWidth"] = 1920 + metrics["screenHeight"] = 1080 + } + setup := []struct { + method string + params any + fatal bool + }{ + {"Page.enable", nil, false}, + {"Runtime.enable", nil, false}, + {"Network.enable", nil, false}, + {"Emulation.setDeviceMetricsOverride", metrics, false}, + {"Page.addScriptToEvaluateOnNewDocument", map[string]any{"source": stealthJS}, false}, + } + if tz := strings.TrimSpace(cfg.BrowserTimezone); tz != "" { + setup = append(setup, struct { + method string + params any + fatal bool + }{"Emulation.setTimezoneOverride", map[string]any{"timezoneId": tz}, true}) + } + for _, step := range setup { + if _, err := conn.call(ctx, sid, step.method, step.params); err != nil && step.fatal { + return "", &Error{Msg: step.method + ": " + err.Error(), Retryable: false} + } + } + if h := browserSetupHook; h != nil { + h(conn, sid) + } + var uaParams map[string]any + if cfg.BrowserHeadless { + // Chromium reports "HeadlessChrome" (bot tell). Fix it via CDP before + // the real navigation: UA-CH metadata is only readable in a secure + // context, so hop to a neutral non-Cloudflare HTTPS endpoint first. + var uerr error + uaParams, uerr = fixHeadlessUA(ctx, conn, sid) + if uerr != nil { + debugf("headless UA fix skipped: %v", uerr) + } + // The Turnstile challenge runs inside a cross-origin iframe (OOPIF) + // whose renderer does NOT inherit the main frame's device emulation — + // the headless screen stays at 800x600 in there, an instant bot tell + // (600010). Auto-attach to child frames and equip each one before it + // is allowed to run. + stopSub := watchSubTargets(ctx, conn, sid, uaParams, strings.TrimSpace(cfg.BrowserTimezone)) + defer stopSub() + } + navCtx, cancelNav := context.WithTimeout(ctx, 30*time.Second) + target := strings.TrimRight(site.BaseURL, "/") + "/" + _, err = conn.call(navCtx, sid, "Page.navigate", map[string]any{"url": target}) + cancelNav() + if err != nil { + return "", &Error{Msg: "navigate to " + target + ": " + err.Error(), Retryable: true} + } + return s.pollForToken(ctx, conn, sid, sitekey, cfg) +} + +// fixHeadlessUA applies the UA rewrite only when the browser actually +// reports HeadlessChrome, bootstrapping via a neutral HTTPS origin first so +// navigator.userAgentData (secure-context only) becomes readable. It returns +// the Network.setUserAgentOverride params that were applied (nil when no +// rewrite was needed) so sub-frames can reuse them. +func fixHeadlessUA(ctx context.Context, conn *cdp, sid string) (map[string]any, error) { + raw, err := conn.evaluate(ctx, sid, `navigator.userAgent`) + if err != nil { + return nil, err + } + var ua string + if json.Unmarshal(raw, &ua) != nil { + return nil, fmt.Errorf("bad userAgent probe: %s", raw) + } + if !strings.Contains(ua, "HeadlessChrome") { + return nil, nil + } + // Read UA-CH metadata in a SEPARATE bootstrap tab: a secure context is + // required for navigator.userAgentData, but the main tab must stay on + // about:blank so the real navigation gets history.length=2 (headed + // parity) and an empty document.referrer. + for _, boot := range []string{ + "https://www.baidu.com/", + "https://www.microsoft.com/", + } { + bootSid, closeBoot, err := openBootstrap(ctx, conn, boot, 8*time.Second) + if err != nil { + debugf("ua bootstrap %s: %v", boot, err) + continue + } + params, err := overrideHeadlessUA(ctx, conn, sid, bootSid) + closeBoot() + if err != nil { + return nil, err + } + return params, nil + } + return nil, errors.New("no secure bootstrap origin reachable") +} + +// openBootstrap opens url in a throwaway tab, waits for its https document +// to commit and returns the attached session id plus a closer func. +func openBootstrap(ctx context.Context, conn *cdp, url string, wait time.Duration) (string, func(), error) { + tctx, cancel := context.WithTimeout(ctx, 15*time.Second) + defer cancel() + raw, err := conn.call(tctx, "", "Target.createTarget", map[string]any{"url": url}) + if err != nil { + return "", nil, err + } + var ct struct { + TargetID string `json:"targetId"` + } + if json.Unmarshal(raw, &ct) != nil || ct.TargetID == "" { + return "", nil, fmt.Errorf("bad createTarget reply: %s", raw) + } + closeBoot := func() { + cctx, ccancel := context.WithTimeout(context.Background(), 5*time.Second) + conn.call(cctx, "", "Target.closeTarget", map[string]any{"targetId": ct.TargetID}) + ccancel() + } + raw, err = conn.call(tctx, "", "Target.attachToTarget", map[string]any{ + "targetId": ct.TargetID, "flatten": true, + }) + if err != nil { + closeBoot() + return "", nil, err + } + var at struct { + SessionID string `json:"sessionId"` + } + if json.Unmarshal(raw, &at) != nil || at.SessionID == "" { + closeBoot() + return "", nil, fmt.Errorf("bad attachToTarget reply: %s", raw) + } + deadline := time.Now().Add(wait) + for time.Now().Before(deadline) { + if raw, err := conn.evaluate(ctx, at.SessionID, `location.href`); err == nil { + var href string + if json.Unmarshal(raw, &href) == nil && strings.HasPrefix(href, "https://") { + return at.SessionID, closeBoot, nil + } + } + if !sleepCtx(ctx, 200*time.Millisecond) { + closeBoot() + return "", nil, ctx.Err() + } + } + closeBoot() + return "", nil, errors.New("document did not commit") +} + +// overrideHeadlessUA rewrites "HeadlessChrome" to "Chrome" in the page's +// navigator.userAgent and in outgoing HTTP headers (via CDP), because +// Cloudflare treats the headless token as a bot signal. The Client-Hint +// metadata must be carried over explicitly: a bare UA override makes Chrome +// drop the sec-ch-ua* headers entirely, which is itself a bot tell. +// The applied override params are returned (nil when no rewrite happened). +func overrideHeadlessUA(ctx context.Context, conn *cdp, sid, bootSid string) (map[string]any, error) { + raw, err := conn.evaluate(ctx, sid, `navigator.userAgent`) + if err != nil { + return nil, err + } + var ua string + if json.Unmarshal(raw, &ua) != nil { + return nil, fmt.Errorf("bad userAgent probe: %s", raw) + } + if !strings.Contains(ua, "HeadlessChrome") { + return nil, nil + } + fixed := strings.Replace(ua, "HeadlessChrome", "Chrome", 1) + params := map[string]any{"userAgent": fixed} + if mraw, err := conn.evaluate(ctx, bootSid, uaMetadataExpr); err == nil { + debugf("ua metadata raw: %s", mraw) + var s string + if json.Unmarshal(mraw, &s) == nil { + var meta map[string]any + if json.Unmarshal([]byte(s), &meta) == nil { + params["userAgentMetadata"] = meta + } + } + } else { + debugf("ua metadata expr failed: %v", err) + } + if _, err := conn.call(ctx, sid, "Network.setUserAgentOverride", params); err != nil { + delete(params, "userAgentMetadata") + if _, err2 := conn.call(ctx, sid, "Network.setUserAgentOverride", params); err2 != nil { + return nil, err + } + debugf("headless UA metadata override rejected (%v), plain override applied", err) + } + debugf("headless UA rewritten: %s", fixed) + return params, nil +} + +// screenPatchJS gives the challenge iframe a desktop-sized screen. CDP's +// device-metrics override is top-level-only ("Command can only be executed +// on top-level targets"), so the cross-origin OOPIF keeps the headless +// native 800x600 — an instant bot tell (600010). Values mirror what the same +// iframe reads headed: 1920x1080 with a 48px taskbar. +const screenPatchJS = `(() => { + const fix = (name, val) => { + try { + const d = Object.getOwnPropertyDescriptor(Screen.prototype, name); + if (d && d.get) { + Object.defineProperty(Screen.prototype, name, { + get: function() { return val; }, + configurable: true + }); + } + } catch (e) {} + }; + fix("width", 1920); + fix("height", 1080); + fix("availWidth", 1920); + fix("availHeight", 1032); + try { window.__dsSp = 1; } catch (e) {} +})()` + +// watchSubTargets auto-attaches to targets related to the page session — +// chiefly the cross-origin Turnstile challenge iframe — with +// waitForDebuggerOnStart so each child pauses BEFORE its first document +// script runs. The handler then applies what the main frame setup gives the +// top-level document (screen, UA, TZ — the OOPIF's own renderer never sees +// the main frame's emulation) and resumes it via runIfWaitingForDebugger. +// Returns a stop func. +func watchSubTargets(ctx context.Context, conn *cdp, sid string, uaParams map[string]any, tz string) func() { + ch := make(chan subTargetEvent, 64) + conn.setSubTargets(ch) + if _, err := conn.call(ctx, sid, "Target.setAutoAttach", map[string]any{ + "autoAttach": true, "waitForDebuggerOnStart": true, "flatten": true, + }); err != nil { + debugf("sub-target auto-attach: %v", err) + conn.setSubTargets(nil) + return func() {} + } + done := make(chan struct{}) + go func() { + for { + select { + case <-done: + return + case ev := <-ch: + if ev.method != "Target.attachedToTarget" { + continue + } + var p struct { + SessionID string `json:"sessionId"` + WaitingForDebugger bool `json:"waitingForDebugger"` + TargetInfo struct { + Type string `json:"type"` + URL string `json:"url"` + } `json:"targetInfo"` + } + if json.Unmarshal(ev.params, &p) != nil || p.SessionID == "" { + continue + } + cctx, cancel := context.WithTimeout(context.Background(), 6*time.Second) + if p.TargetInfo.Type == "iframe" { + steps := []struct { + method string + params any + }{ + {"Runtime.enable", nil}, + {"Network.enable", nil}, + {"Page.enable", nil}, + {"Page.addScriptToEvaluateOnNewDocument", map[string]any{"source": screenPatchJS, "runImmediately": true}}, + } + if uaParams != nil { + steps = append(steps, struct { + method string + params any + }{"Network.setUserAgentOverride", uaParams}) + } + if tz != "" { + steps = append(steps, struct { + method string + params any + }{"Emulation.setTimezoneOverride", map[string]any{"timezoneId": tz}}) + } + for _, st := range steps { + if _, err := conn.call(cctx, p.SessionID, st.method, st.params); err != nil { + debugf("sub-frame %s: %v", st.method, err) + } + } + debugf("sub-frame patched (url=%.64s)", p.TargetInfo.URL) + } + if p.WaitingForDebugger { + if _, err := conn.call(cctx, p.SessionID, "Runtime.runIfWaitingForDebugger", nil); err != nil { + debugf("sub-target resume: %v", err) + } else { + debugf("sub-target resumed (type=%s)", p.TargetInfo.Type) + } + } + cancel() + } + } + }() + return func() { + conn.setSubTargets(nil) + close(done) + } +} + +// uaMetadataExpr snapshots navigator.userAgentData (incl. high-entropy +// values) in the shape CDP expects for Emulation.UserAgentMetadata. +const uaMetadataExpr = `(() => { + const base = {brands: [], fullVersionList: [], platform: "", platformVersion: "", + architecture: "", bitness: "", model: "", mobile: false, wow64: false}; + const pick = h => JSON.stringify({ + brands: (h.brands || []).map(b => ({brand: String(b.brand), version: String(b.version)})), + fullVersionList: (h.fullVersionList || []).map(b => ({brand: String(b.brand), version: String(b.version)})), + platform: String(h.platform || ""), platformVersion: String(h.platformVersion || ""), + architecture: String(h.architecture || ""), bitness: String(h.bitness || ""), + model: String(h.model || ""), mobile: !!h.mobile, wow64: !!h.wow64}); + try { + const uad = navigator.userAgentData; + if (!uad) return JSON.stringify(base); + if (!uad.getHighEntropyValues) { + return JSON.stringify(Object.assign({}, base, {brands: uad.brands || [], mobile: !!uad.mobile})); + } + return uad.getHighEntropyValues(["architecture", "bitness", "model", "platform", + "platformVersion", "fullVersionList", "wow64"]) + .then(h => pick(Object.assign({}, h, {brands: h.brands || uad.brands || [], mobile: !!uad.mobile}))) + .catch(() => JSON.stringify(Object.assign({}, base, {brands: uad.brands || [], mobile: !!uad.mobile}))); + } catch (e) { return JSON.stringify(base); } +})()` + +// pollForToken waits for page load, deals with a Cloudflare interstitial, +// warms the page like a human, renders the widget and clicks until a token +// lands or the deadline passes. +func (s *Solver) pollForToken(ctx context.Context, conn *cdp, sid, sitekey string, cfg config.Turnstile) (string, error) { + timeout := time.Duration(cfg.TimeoutSeconds) * time.Second + if timeout <= 0 { + timeout = 90 * time.Second + } + deadline := time.Now().Add(timeout) + + var preDone, inited bool + var clicks, reinitsUsed int + var lastClick, lastReinit, loadingSince time.Time + var lastState, lastTitle string + var lastErr error // last poll/evaluate failure, surfaced on timeout + + const ( + firstClickDelay = 3500 * time.Millisecond + clickSpacing = 2500 * time.Millisecond + maxClicks = 6 + maxReinits = 3 + ) + + for { + if err := ctx.Err(); err != nil { + return "", err + } + if time.Now().After(deadline) { + return "", &Error{ + Msg: fmt.Sprintf("browser solver timed out after %s (state=%q title=%q clicks=%d last_err=%v)", + timeout, lastState, lastTitle, clicks, lastErr), + Retryable: true, + } + } + + raw, err := conn.evaluate(ctx, sid, pollExpr) + if err != nil { + // frame detach / navigation races are normal — keep polling + lastErr = err + if !sleepCtx(ctx, 400*time.Millisecond) { + return "", ctx.Err() + } + continue + } + var st widgetState + if json.Unmarshal(raw, &st) != nil { + if !sleepCtx(ctx, 400*time.Millisecond) { + return "", ctx.Err() + } + continue + } + lastState, lastTitle = st.State, st.Title + debugf("poll state=%q ready=%q url=%q challenge=%v hasInit=%v renderedAt=%d clicks=%d focus=%v vw=%d vh=%d rect=%+v err=%v lastErr=%v gl=%q", + st.State, st.Ready, st.URL, st.Challenge, st.HasInit, st.RenderedAt, clicks, st.Focus, st.VW, st.VH, st.Rect, st.Error, lastErr, st.GL) + + // a token is definitive — check it before any other gate + if st.Token != "" { + return st.Token, nil + } + + // Cloudflare interstitial: a clean browser walks through it alone. + if st.Challenge { + if !sleepCtx(ctx, 500*time.Millisecond) { + return "", ctx.Err() + } + continue + } + // about:blank (the launch tab) is not the target page yet + if !strings.HasPrefix(st.URL, "http") { + if !sleepCtx(ctx, 300*time.Millisecond) { + return "", ctx.Err() + } + continue + } + // A document stuck on "loading" (slow proxy resources) should not + // stall the solve forever — proceed once the DOM had 20s. + if st.Ready != "interactive" && st.Ready != "complete" { + if loadingSince.IsZero() { + loadingSince = time.Now() + } + if time.Since(loadingSince) < 20*time.Second { + if !sleepCtx(ctx, 300*time.Millisecond) { + return "", ctx.Err() + } + continue + } + } else { + loadingSince = time.Time{} + } + if !preDone { + debugf("pre-interaction warm-up") + preInteraction(ctx, conn, sid) + preDone = true + continue + } + if !inited || !st.HasInit { + if _, err := conn.evaluate(ctx, sid, initExpr(sitekey, cfg.Action)); err == nil { + if !inited { + inited = true + lastErr = nil + } else { + lastErr = errors.New("init evaluated but window.__tsInitDone is not visible in poll") + } + } else { + lastErr = fmt.Errorf("init: %w", err) + } + if !sleepCtx(ctx, 500*time.Millisecond) { + return "", ctx.Err() + } + continue + } + + // Widget rejected the challenge — render a fresh one a few times. + if st.State == "error" || st.State == "render_failed" { + if time.Since(lastReinit) < 1500*time.Millisecond { + if !sleepCtx(ctx, 400*time.Millisecond) { + return "", ctx.Err() + } + continue + } + ok, rerr := conn.evaluate(ctx, sid, `window.__tsReinit ? window.__tsReinit() : false`) + if rerr == nil && string(ok) == "true" { + reinitsUsed++ + lastReinit = time.Now() + } else if st.State == "render_failed" || reinitsUsed >= maxReinits { + return "", &Error{ + Msg: fmt.Sprintf("turnstile widget failed (state=%q error=%q)", st.State, st.Error), + Retryable: true, + } + } else { + lastReinit = time.Now() + } + if !sleepCtx(ctx, 500*time.Millisecond) { + return "", ctx.Err() + } + continue + } + + // Trusted click on the checkbox, throttled so we never fight the widget. + if st.Rect != nil && clicks < maxClicks && st.RenderedAt > 0 { + sinceRender := time.Since(time.UnixMilli(st.RenderedAt)) + visible := st.Rect.X >= 0 && st.Rect.Y >= 0 && st.VW > 0 && + st.Rect.X+st.Rect.Width <= float64(st.VW)+2 && + st.Rect.Y+st.Rect.Height <= float64(st.VH)+2 + if visible && sinceRender >= firstClickDelay && time.Since(lastClick) >= clickSpacing { + if err := trustedClick(ctx, conn, sid, st.Rect.X+30, st.Rect.Y+st.Rect.Height/2); err == nil { + clicks++ + lastClick = time.Now() + } + } + } + if !sleepCtx(ctx, 400*time.Millisecond) { + return "", ctx.Err() + } + } +} + +type widgetState struct { + Challenge bool `json:"challenge"` + Ready string `json:"ready"` + HasInit bool `json:"hasInit"` + State string `json:"state"` + Token string `json:"token"` + Error string `json:"error"` + Title string `json:"title"` + URL string `json:"url"` + VW int `json:"vw"` + VH int `json:"vh"` + Focus bool `json:"focus"` + GL string `json:"gl"` + RenderedAt int64 `json:"renderedAt"` + Rect *struct { + X float64 `json:"x"` + Y float64 `json:"y"` + Width float64 `json:"width"` + Height float64 `json:"height"` + } `json:"rect"` +} + +// pollExpr reads widget state; it also drives __tsEnsure so the widget is +// (re)created after a challenge redirect wiped the document body. +const pollExpr = `(() => { + const o = {challenge:false, ready:"", hasInit:false, state:"", token:"", error:"", + title:document.title, url:location.href, vw:window.innerWidth|0, vh:window.innerHeight|0, + renderedAt:0, rect:null, focus:false}; + try { + // interstitial markers only — the widget's own DOM must not trip this + o.challenge = !!window._cf_chl_opt || !!document.querySelector('#challenge-form'); + o.ready = document.readyState; + o.focus = document.hasFocus(); + try { + const gc = document.createElement("canvas").getContext("webgl"); + if (gc) { + const dbg = gc.getExtension("WEBGL_debug_renderer_info"); + o.gl = dbg ? String(gc.getParameter(dbg.UNMASKED_RENDERER_WEBGL)) : ""; + } + } catch (e) { o.gl = "err"; } + o.hasInit = !!window.__tsInitDone; + if (o.hasInit) { + o.state = String(window.__tsState || ""); + o.token = String(window.__tsToken || ""); + o.error = String(window.__tsError || ""); + o.renderedAt = window.__tsRenderedAt || 0; + const el = document.getElementById("__ds_ts_widget"); + if (el) { + const r = el.getBoundingClientRect(); + o.rect = {x:r.x, y:r.y, width:r.width, height:r.height}; + } + if (!o.challenge && !o.token && o.state !== "error" && o.state !== "render_failed" && + o.ready !== "loading" && typeof window.__tsEnsure === "function") { + window.__tsEnsure(); + } + } + } catch (e) { o.state = "poll_failed"; o.error = String(e); } + return o; +})()` + +// initExpr defines __tsEnsure/__tsReinit and renders the widget once +// challenges.cloudflare.com is loaded. +func initExpr(sitekey, action string) string { + sk, _ := json.Marshal(sitekey) + act, _ := json.Marshal(action) + return strings.NewReplacer("__SITEKEY__", string(sk), "__ACTION__", string(act)).Replace(initTpl) +} + +const initTpl = `(() => { + if (window.__tsInitDone) return {ok:true, already:true}; + window.__tsInitDone = true; + window.__tsState = "init"; + window.__tsToken = ""; + window.__tsError = ""; + window.__tsReinits = 0; + window.__tsScript = null; + window.__tsWidget = null; + window.__tsWidgetReady = false; + window.__tsApiJsFailedAt = 0; + window.__tsRenderedAt = 0; + window.__tsEnsure = function() { + try { + if (!window.turnstile) { + const failedAt = window.__tsApiJsFailedAt || 0; + const retried = failedAt && (Date.now() - failedAt > 2000); + if (!window.__tsScript || retried) { + if (window.__tsScript && window.__tsScript.parentNode) { + window.__tsScript.parentNode.removeChild(window.__tsScript); + } + window.__tsScript = null; + window.__tsApiJsFailedAt = 0; + const s = document.createElement("script"); + s.src = "https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit"; + s.async = true; + s.onerror = function() { window.__tsApiJsFailedAt = Date.now(); window.__tsState = "apijs_failed"; }; + (document.head || document.documentElement).appendChild(s); + window.__tsScript = s; + window.__tsState = "loading_apijs"; + } + return; + } + if (window.__tsWidgetReady && !document.getElementById("__ds_ts_widget")) { + window.__tsWidgetReady = false; + window.__tsWidget = null; + window.__tsState = "init"; + } + if (window.__tsWidgetReady || !document.body) return; + const holder = document.createElement("div"); + holder.id = "__ds_ts_widget"; + holder.style.cssText = "position:fixed;top:12px;left:12px;z-index:2147483647;" + + "width:300px;height:65px;background:#fff;"; + document.body.appendChild(holder); + window.__tsWidget = window.turnstile.render(holder, { + sitekey: __SITEKEY__, + action: __ACTION__, + callback: function(t) { window.__tsToken = t; window.__tsState = "success"; }, + "error-callback": function(e) { window.__tsError = String(e); window.__tsState = "error"; }, + "expired-callback": function() { window.__tsToken = ""; window.__tsState = "expired"; } + }); + window.__tsWidgetReady = true; + window.__tsState = "rendered"; + window.__tsRenderedAt = Date.now(); + } catch (e) { + window.__tsError = String(e); + window.__tsState = "render_failed"; + } + }; + window.__tsReinit = function() { + if (window.__tsReinits >= 3) return false; + window.__tsReinits++; + try { + if (window.__tsWidget != null && window.turnstile) window.turnstile.remove(window.__tsWidget); + } catch (e) {} + const old = document.getElementById("__ds_ts_widget"); + if (old && old.parentNode) old.parentNode.removeChild(old); + window.__tsWidget = null; + window.__tsWidgetReady = false; + window.__tsToken = ""; + window.__tsError = ""; + window.__tsState = "init"; + window.__tsEnsure(); + return true; + }; + window.__tsEnsure(); + return {ok:true}; +})()` + +// stealthJS runs before any page script (Page.addScriptToEvaluateOnNewDocument). +const stealthJS = `(() => { + try { + Object.defineProperty(Navigator.prototype, "webdriver", + {get: function() { return undefined; }, configurable: true}); + } catch (e) {} + try { + if (!window.chrome) window.chrome = {}; + if (!window.chrome.runtime) window.chrome.runtime = {}; + } catch (e) {} + try { + const q = navigator.permissions && navigator.permissions.query; + if (q) { + navigator.permissions.query = function(desc) { + return q.call(navigator.permissions, desc).then(function(r) { + try { + if (r && r.state === "prompt" && desc && desc.name === "notifications") r.state = "granted"; + } catch (e) {} + return r; + }); + }; + } + } catch (e) {} + try { + // headless/screen-emulated environments report availHeight === height; + // a real desktop has a taskbar, so emulate one (no-op when present). + const avDesc = Object.getOwnPropertyDescriptor(Screen.prototype, "availHeight"); + if (avDesc && avDesc.get) { + Object.defineProperty(Screen.prototype, "availHeight", { + get: function() { + const av = avDesc.get.call(this); + const h = this.height; + return (h && av >= h) ? h - 48 : av; + }, + configurable: true + }); + } + } catch (e) {} + })()` + +// preInteraction moves the pointer and nudges the scroll wheel before the +// widget appears, so the page sees a real interaction history first. +func preInteraction(ctx context.Context, conn *cdp, sid string) { + for _, p := range [][2]float64{{640, 320}, {420, 470}, {790, 255}} { + if ctx.Err() != nil { + return + } + _ = dispatchMouse(conn.call, ctx, sid, "mouseMoved", p[0], p[1], "none", 0, 0) + if !sleepCtx(ctx, 150*time.Millisecond) { + return + } + } + _ = dispatchMouseWheelY(ctx, conn, sid, 640, 450, 200) + if !sleepCtx(ctx, 250*time.Millisecond) { + return + } + _ = dispatchMouseWheelY(ctx, conn, sid, 640, 450, -200) +} + +func trustedClick(ctx context.Context, conn *cdp, sid string, x, y float64) error { + if err := dispatchMouse(conn.call, ctx, sid, "mouseMoved", x, y, "none", 0, 0); err != nil { + return err + } + if !sleepCtx(ctx, 80*time.Millisecond) { + return ctx.Err() + } + if err := dispatchMouse(conn.call, ctx, sid, "mousePressed", x, y, "left", 1, 1); err != nil { + return err + } + if !sleepCtx(ctx, 60*time.Millisecond) { + return ctx.Err() + } + return dispatchMouse(conn.call, ctx, sid, "mouseReleased", x, y, "left", 0, 1) +} + +type cdpCaller func(context.Context, string, string, any) (json.RawMessage, error) + +func dispatchMouse(call cdpCaller, ctx context.Context, sid, kind string, x, y float64, button string, buttons, clickCount int) error { + params := map[string]any{"type": kind, "x": x, "y": y, "pointerType": "mouse"} + if kind != "mouseWheel" { + params["button"] = button + params["buttons"] = buttons + params["clickCount"] = clickCount + } + _, err := call(ctx, sid, "Input.dispatchMouseEvent", params) + return err +} + +func dispatchMouseWheelY(ctx context.Context, conn *cdp, sid string, x, y float64, deltaY float64) error { + _, err := conn.call(ctx, sid, "Input.dispatchMouseEvent", map[string]any{ + "type": "mouseWheel", "x": x, "y": y, "deltaX": 0, "deltaY": deltaY, "pointerType": "mouse", + }) + return err +} + +// attachPage finds the browser's page target and attaches a flattened session. +func attachPage(ctx context.Context, conn *cdp) (string, error) { + deadline := time.Now().Add(15 * time.Second) + var lastErr error + for time.Now().Before(deadline) { + raw, err := conn.call(ctx, "", "Target.getTargets", nil) + if err != nil { + return "", err + } + var out struct { + TargetInfos []struct { + TargetID string `json:"targetId"` + Type string `json:"type"` + } `json:"targetInfos"` + } + if err := json.Unmarshal(raw, &out); err == nil { + for _, t := range out.TargetInfos { + if t.Type != "page" { + continue + } + attached, err := conn.call(ctx, "", "Target.attachToTarget", map[string]any{ + "targetId": t.TargetID, "flatten": true, + }) + if err != nil { + return "", err + } + var res struct { + SessionID string `json:"sessionId"` + } + if json.Unmarshal(attached, &res) == nil && res.SessionID != "" { + return res.SessionID, nil + } + } + } + lastErr = errors.New("no page target yet") + if !sleepCtx(ctx, 300*time.Millisecond) { + return "", ctx.Err() + } + } + if lastErr == nil { + lastErr = errors.New("no page target appeared") + } + return "", lastErr +} + +// ── browser process ──────────────────────────────────────────────── + +type browserProc struct { + cmd *exec.Cmd + port int + wsURL string + tempDir string + exited chan struct{} + waitErr error + stderr *tailBuffer +} + +func launchBrowser(ctx context.Context, exe string, cfg config.Turnstile, locale, proxy string) (*browserProc, error) { + port, err := freePort() + if err != nil { + return nil, err + } + profile := strings.TrimSpace(cfg.BrowserUserDataDir) + tempDir := "" + if profile == "" { + tempDir = filepath.Join(os.TempDir(), fmt.Sprintf("dsfree2api-ts-%d-%d", os.Getpid(), time.Now().UnixNano())) + if err := os.MkdirAll(tempDir, 0o700); err != nil { + return nil, err + } + profile = tempDir + } + args := []string{ + "--remote-debugging-port=" + strconv.Itoa(port), + // Chrome ≥ 136 rejects the DevTools WebSocket handshake unless the + // caller's origin is allow-listed (otherwise: "bad status" 403). + "--remote-allow-origins=http://127.0.0.1:" + strconv.Itoa(port), + "--user-data-dir=" + profile, + "--no-first-run", + "--no-default-browser-check", + "--disable-blink-features=AutomationControlled", + "--disable-background-networking", + "--disable-sync", + // IsolateOrigins/site-per-process: without site isolation the + // cross-origin Turnstile iframe may share the top-level renderer, + // inheriting its device emulation (headless OOPIFs otherwise keep a + // native 800x600 screen that Cloudflare reads as a bot tell). + "--disable-features=Translate,MediaRouter,OptimizationHints,IsolateOrigins,site-per-process", + "--disable-session-crashed-bubble", + "--disable-restore-session-state", + "--window-size=1280,900", + } + if locale != "" { + args = append(args, "--lang="+locale) + } + if cfg.BrowserHeadless { + args = append(args, "--headless=new") + } + if proxy != "" { + args = append(args, "--proxy-server="+proxy) + } + args = append(args, "about:blank") + + cmd := exec.Command(exe, args...) + stderr := &tailBuffer{max: 4096} + cmd.Stdout = io.Discard + cmd.Stderr = stderr + if err := cmd.Start(); err != nil { + if tempDir != "" { + _ = os.RemoveAll(tempDir) + } + return nil, fmt.Errorf("start %q: %w", exe, err) + } + b := &browserProc{cmd: cmd, port: port, tempDir: tempDir, exited: make(chan struct{}), stderr: stderr} + go func() { + b.waitErr = cmd.Wait() + close(b.exited) + }() + if err := b.waitDevTools(ctx); err != nil { + b.Close() + return nil, err + } + return b, nil +} + +func (b *browserProc) waitDevTools(ctx context.Context) error { + endpoint := fmt.Sprintf("http://127.0.0.1:%d/json/version", b.port) + client := &http.Client{Timeout: 2 * time.Second} + deadline := time.Now().Add(30 * time.Second) + var lastErr error + for time.Now().Before(deadline) { + select { + case <-b.exited: + return fmt.Errorf("browser exited early (%v): %s", b.waitErr, b.stderr.String()) + case <-ctx.Done(): + return ctx.Err() + default: + } + resp, err := client.Get(endpoint) + if err == nil { + body, _ := io.ReadAll(resp.Body) + resp.Body.Close() + var info struct { + WebSocketDebuggerURL string `json:"webSocketDebuggerUrl"` + } + if resp.StatusCode == http.StatusOK && json.Unmarshal(body, &info) == nil && info.WebSocketDebuggerURL != "" { + b.wsURL = info.WebSocketDebuggerURL + return nil + } + lastErr = fmt.Errorf("devtools http %d", resp.StatusCode) + } else { + lastErr = err + } + if !sleepCtx(ctx, 300*time.Millisecond) { + return ctx.Err() + } + } + return fmt.Errorf("devtools never came up: %v; stderr: %s", lastErr, b.stderr.String()) +} + +// Close kills the browser if it is still alive and drops the temp profile. +func (b *browserProc) Close() { + select { + case <-b.exited: + default: + if b.cmd.Process != nil { + _ = b.cmd.Process.Kill() + } + select { + case <-b.exited: + case <-time.After(3 * time.Second): + } + } + if b.tempDir != "" { + for i := 0; i < 3; i++ { + if err := os.RemoveAll(b.tempDir); err == nil { + break + } + time.Sleep(300 * time.Millisecond) + } + } +} + +func freePort() (int, error) { + l, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + return 0, err + } + defer l.Close() + return l.Addr().(*net.TCPAddr).Port, nil +} + +func firstLocale(acceptLanguage string) string { + lang := strings.TrimSpace(strings.SplitN(acceptLanguage, ",", 2)[0]) + return lang +} + +func sleepCtx(ctx context.Context, d time.Duration) bool { + select { + case <-ctx.Done(): + return false + case <-time.After(d): + return true + } +} + +// tailBuffer keeps the browser's stderr bounded for error messages. +type tailBuffer struct { + mu sync.Mutex + buf bytes.Buffer + max int +} + +func (t *tailBuffer) Write(p []byte) (int, error) { + t.mu.Lock() + defer t.mu.Unlock() + if room := t.max - t.buf.Len(); room > 0 { + if len(p) > room { + t.buf.Write(p[:room]) + } else { + t.buf.Write(p) + } + } + return len(p), nil +} + +func (t *tailBuffer) String() string { + t.mu.Lock() + defer t.mu.Unlock() + s := strings.Join(strings.Fields(t.buf.String()), " ") + if len(s) > 600 { + s = "..." + s[len(s)-600:] + } + return s +} diff --git a/internal/turnstile/browser_test.go b/internal/turnstile/browser_test.go new file mode 100644 index 0000000..d5aedfd --- /dev/null +++ b/internal/turnstile/browser_test.go @@ -0,0 +1,898 @@ +package turnstile + +import ( + "context" + "encoding/json" + "fmt" + "os" + "path/filepath" + "sort" + "strings" + "sync" + "testing" + "time" + + "github.com/nyoungo/dsfree2api/internal/config" + "github.com/nyoungo/dsfree2api/internal/httpx" +) + +// fpExpr dumps an exhaustive JS-environment fingerprint (main world) so +// headless vs headed runs can be diffed field by field. +const fpExpr = `(() => { + if (!location.href.startsWith("https://deepseek.")) return ""; + const out = {}; + const j = (v) => { try { const s = JSON.stringify(v); return s === undefined ? "undef" : s; } catch (e) { return "ERR"; } }; + const n = navigator; + out.nav = {}; + ["appCodeName","appName","platform","vendor","vendorSub","product","productSub","language","webdriver","hardwareConcurrency","deviceMemory","maxTouchPoints","cookieEnabled","doNotTrack","pdfViewerEnabled","onLine","userAgent"].forEach(function(k){ + try { out.nav[k] = j(n[k]); } catch (e) { out.nav[k] = "ERR"; } + }); + try { out.nav.languages = j(Array.from(n.languages || [])); } catch (e) {} + try { out.nav.plugins = Array.from(n.plugins || []).map(function(p){ return p.name + "|" + p.filename; }).join(";"); } catch (e) { out.nav.plugins = "ERR"; } + try { out.nav.mimeTypes = Array.from(n.mimeTypes || []).map(function(m){ return m.type + "|" + m.suffixes; }).join(";"); } catch (e) { out.nav.mimeTypes = "ERR"; } + try { out.nav.connection = j(n.connection ? {e:n.connection.effectiveType, rtt:n.connection.rtt, dl:n.connection.downlink} : null); } catch (e) {} + try { out.nav.getBattery = typeof n.getBattery; } catch (e) {} + out.screen = {}; + ["width","height","availWidth","availHeight","colorDepth","pixelDepth"].forEach(function(k){ + try { out.screen[k] = j(screen[k]); } catch (e) {} + }); + try { out.screen.orientation = j(screen.orientation && screen.orientation.type); } catch (e) {} + out.win = { + dpr: j(window.devicePixelRatio), iw: j(innerWidth), ih: j(innerHeight), ow: j(outerWidth), oh: j(outerHeight), + sx: j(screenX), sy: j(screenY), chrome: j(typeof window.chrome), + chromeRuntime: j(window.chrome ? typeof window.chrome.runtime : "none"), + notif: (typeof Notification !== "undefined") ? Notification.permission : "none", + histo: j(history.length), ref: j(document.referrer.slice(0,60)), + vis: j(document.visibilityState), isTop: j(window.top === window), + docMode: j(document.documentMode), compat: j(document.compatMode) + }; + try { out.intl = j(Intl.DateTimeFormat().resolvedOptions()); } catch (e) { out.intl = "ERR"; } + try { out.tzOffset = j(new Date().getTimezoneOffset()); } catch (e) {} + try { + const c = document.createElement("canvas"); + c.width = 32; c.height = 32; + const g = c.getContext("2d"); + g.fillStyle = "#f0f"; g.fillRect(0,0,32,32); + g.font = "14px Arial"; g.fillText("fp", 2, 20); + out.canvas = c.toDataURL(); + } catch (e) { out.canvas = "ERR"; } + try { + const gc = document.createElement("canvas").getContext("webgl"); + const dbg = gc.getExtension("WEBGL_debug_renderer_info"); + out.gl = { + vendor: String(gc.getParameter(dbg.UNMASKED_VENDOR_WEBGL)), + rend: String(gc.getParameter(dbg.UNMASKED_RENDERER_WEBGL)), + ver: String(gc.getParameter(gc.VERSION)), + rendStr: String(gc.getParameter(gc.RENDERER)), + maxTex: j(gc.getParameter(gc.MAX_TEXTURE_SIZE)), + maxVB: j(gc.getParameter(gc.MAX_VERTEX_ATTRIBS)), + exts: j((gc.getSupportedExtensions() || []).length) + }; + } catch (e) { out.gl = "ERR"; } + try { + const ac = new (window.AudioContext || window.webkitAudioContext)(); + out.audio = { sr: j(ac.sampleRate), base: j(ac.baseLatency), out: j(ac.outputLatency) }; + ac.close(); + } catch (e) { out.audio = "ERR"; } + try { out.fonts = j(document.fonts.size); } catch (e) {} + try { out.voices = j((window.speechSynthesis.getVoices() || []).length); } catch (e) {} + try { + out.mm = { + coarse: matchMedia("(pointer: coarse)").matches, + anyCoarse: matchMedia("(any-pointer: coarse)").matches, + dark: matchMedia("(prefers-color-scheme: dark)").matches, + reduce: matchMedia("(prefers-reduced-motion: reduce)").matches, + hover: matchMedia("(any-hover: hover)").matches + }; + } catch (e) { out.mm = "ERR"; } + try { + out.leaks = Object.getOwnPropertyNames(window).filter(function(k){ + return /_cdc_|cdc_|webdriver|selenium|puppeteer|phantom|playwright|__nightmare|callPhantom|domAutomation|__selenium/.test(k); + }); + } catch (e) { out.leaks = "ERR"; } + try { out.cookie = j(document.cookie.slice(0,80)); } catch (e) {} + try { out.lsLen = j(localStorage.length); } catch (e) { out.lsLen = "ERR"; } + return JSON.stringify(out); +})()` + +// netTapJS logs challenge-platform request/response bodies to the console so +// the TRACE hook can print the full rch conversation. +const netTapJS = `(() => { + const ok = u => /cdn-cgi|challenges\.cloudflare/.test(String(u)); + const log = (tag, u, extra) => { try { console.log("NET|" + tag + "|" + u + "|" + extra); } catch (e) {} }; + try { + const odce = Document.prototype.createElement; + Document.prototype.createElement = function(t) { + const r = odce.apply(this, arguments); + try { + const tt = String(t).toLowerCase(); + if (tt === "iframe" || tt === "object" || tt === "embed") { + const src = (typeof arguments[1] === "object" && arguments[1] && arguments[1].src) || ""; + log("create" + tt, src, new Error().stack ? String(new Error().stack).split("\n").slice(1,4).join(" <- ") : ""); + if (tt === "iframe") { + const d = Object.getOwnPropertyDescriptor(HTMLIFrameElement.prototype, "src"); + if (d && d.set) { + Object.defineProperty(r, "src", { + configurable: true, + get: function() { return d.get.call(this); }, + set: function(v) { try { log("iframesrc", String(v).slice(0,140), ""); } catch (e) {} d.set.call(this, v); } + }); + } + } + } + } catch (e) {} + return r; + }; + } catch (e) {} + try { + const oal = window.addEventListener; + window.addEventListener = function(type, fn, opts) { + if (String(type) === "message" && typeof fn === "function") { + const wrapped = function(ev) { + try { + const d = ev.data; + if (d && typeof d === "object") { + log("msg", (d.event || d.type || "obj") + "|" + JSON.stringify(d).slice(0, 600), String(ev.origin || "").slice(0, 80)); + } else if (typeof d === "string" && d.length < 400) { + log("msg", d.slice(0, 400), String(ev.origin || "").slice(0, 80)); + } + } catch (e) {} + return fn.apply(this, arguments); + }; + return oal.call(this, type, wrapped, opts); + } + return oal.apply(this, arguments); + }; + } catch (e) {} + try { + const of = window.fetch; + if (of) { + window.fetch = function(input, init) { + const u = (typeof input === "string") ? input : (input && input.url) || ""; + if (!ok(u)) return of.apply(this, arguments); + try { + let hdr = ""; + if (init && init.headers) { hdr = JSON.stringify(init.headers); } + let body = ""; + if (init && init.body) { body = String(init.body).slice(0, 700); } + log("freq", (init && init.method || "GET") + "|" + hdr.slice(0, 400) + "|" + body, u); + } catch (e) {} + const p = of.apply(this, arguments); + try { + p.then(resp => { + const c = resp.clone(); + c.text().then(t => log("fresp", resp.status + "|" + t.slice(0, 900)), () => {}); + try { log("fhdr", String(c.headers).slice(0, 300), u); } catch (e) {} + }, () => {}); + } catch (e) {} + return p; + }; + } + } catch (e) {} + try { + const XP = XMLHttpRequest.prototype; + const oopen = XP.open, osend = XP.send; + XP.open = function(m, u) { this.__tm = m; this.__tu = u; return oopen.apply(this, arguments); }; + XP.send = function(b) { + if (ok(this.__tu)) { + try { + this.setRequestHeader = function(k, v) { + try { log("xhdr", this.__tu, k + ": " + v); } catch (e) {} + return XMLHttpRequest.prototype.setRequestHeader.apply(this, arguments); + }; + } catch (e) {} + try { + this.addEventListener("load", () => { + try { + log("xresp", this.status + "|" + this.getAllResponseHeaders().replace(/\n/g, ";").slice(0, 300), this.__tu); + log("xbody", String(this.responseText).slice(0, 900), this.__tu); + } catch (e) {} + }); + log("xreq", this.__tm + "|" + (b ? String(b).slice(0, 700) : ""), this.__tu); + } catch (e) {} + } + return osend.apply(this, arguments); + }; + } catch (e) {} +})()` + +// domExpr reports the widget/iframe situation in the main document (shadow +// DOM included) so we can tell where the challenge actually executes. +const domExpr = `(() => { + if (!location.href.startsWith("https://deepseek.")) return ""; + const out = { winLen: window.length, iframes: [], shadowRoots: [], body: "" }; + const walkRoot = (root, depth) => { + if (depth > 6 || !root.querySelectorAll) return; + root.querySelectorAll("iframe").forEach(f => { + let u = f.src || ""; + if (!u) { try { u = f.contentWindow.location.href; } catch (e) { u = "no-src-xo"; } } + out.iframes.push(String(u).slice(0, 120)); + }); + root.querySelectorAll("*").forEach(el => { + if (el.shadowRoot) { + out.shadowRoots.push((el.tagName + (el.id ? "#" + el.id : "")) + ":open"); + walkRoot(el.shadowRoot, depth + 1); + } else if (el.attachShadow && Object.keys(el).some(k => k.indexOf("shadow") >= 0)) { + out.shadowRoots.push((el.tagName + (el.id ? "#" + el.id : "")) + ":closed?"); + } + }); + }; + walkRoot(document, 0); + try { + const w = document.getElementById("__ds_ts_widget"); + if (w) { + const own = Object.getOwnPropertyNames(w).filter(k => /shadow/i.test(k)); + out.widget = (w.shadowRoot ? "open" : (own.length ? own.join(",") : "none")); + } else { out.widget = "no-widget"; } + } catch (e) { out.widget = "err:" + e; } + try { out.body = Array.from(document.body.children).map(e => e.tagName + (e.id ? "#" + e.id : "")).join(","); } catch (e) {} + return JSON.stringify(out); +})()` + +func providerSite() *config.Site { + return &config.Site{ + Code: "de", BaseURL: "https://deepseek.de", + Language: "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7", + } +} + +func TestSolveTokenProviderManual(t *testing.T) { + solver := New(config.Turnstile{Enabled: true, Provider: "manual", Retries: 1}, httpx.DefaultUserAgent) + _, err := solver.solveToken(context.Background(), providerSite(), "0xdead", solver.coreFor("")) + if err == nil { + t.Fatal("manual provider must not solve") + } + if Retryable(err) { + t.Errorf("manual failure should be terminal, got: %v", err) + } + if !strings.Contains(err.Error(), "manual") { + t.Errorf("error should mention the provider: %v", err) + } +} + +func TestSolveTokenProviderBrowserNeedsPath(t *testing.T) { + solver := New(config.Turnstile{Enabled: true, Provider: "browser", Retries: 1}, httpx.DefaultUserAgent) + _, err := solver.solveToken(context.Background(), providerSite(), "0xdead", solver.coreFor("")) + if err == nil || Retryable(err) { + t.Fatalf("empty browser_path should fail fast, got: %v", err) + } + if !strings.Contains(err.Error(), "browser_path") { + t.Errorf("error should mention browser_path: %v", err) + } + + solver.SetConfig(config.Turnstile{ + Enabled: true, Provider: "browser", Retries: 1, + BrowserPath: filepath.Join(t.TempDir(), "missing.exe"), + }) + _, err = solver.solveToken(context.Background(), providerSite(), "0xdead", solver.coreFor("")) + if err == nil || Retryable(err) { + t.Fatalf("missing browser executable should fail fast, got: %v", err) + } +} + +func TestSolveTokenProviderUnknown(t *testing.T) { + solver := New(config.Turnstile{Enabled: true, Provider: "captcha", Retries: 1}, httpx.DefaultUserAgent) + _, err := solver.solveToken(context.Background(), providerSite(), "0xdead", solver.coreFor("")) + if err == nil || Retryable(err) { + t.Fatalf("unknown provider should fail fast, got: %v", err) + } + if !strings.Contains(err.Error(), "captcha") { + t.Errorf("error should echo the provider: %v", err) + } +} + +// TestBrowserSolveLive drives the real browser against deepseek.de. Opt in: +// +// DSFREE_BROWSER_E2E=1 go test ./internal/turnstile -run Live -v +// +// Optional: DSFREE_BROWSER_E2E_EXE (defaults to Edge, then Chrome) and the +// proxy/site come from ../../config.toml. +func TestBrowserSolveLive(t *testing.T) { + if os.Getenv("DSFREE_BROWSER_E2E") == "" { + t.Skip("set DSFREE_BROWSER_E2E=1 to run the live browser solve") + } + cfg, err := config.Load("../../config.toml") + if err != nil { + t.Fatalf("load config: %v", err) + } + exe := os.Getenv("DSFREE_BROWSER_E2E_EXE") + if exe == "" { + exe = cfg.Turnstile.BrowserPath + } + for _, candidate := range []string{ + exe, + `C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe`, + `C:\Program Files\Microsoft\Edge\Application\msedge.exe`, + `C:\Program Files\Google\Chrome\Application\chrome.exe`, + } { + if candidate != "" { + if _, err := os.Stat(candidate); err == nil { + exe = candidate + break + } + } + } + if exe == "" { + t.Skip("no browser executable found — set DSFREE_BROWSER_E2E_EXE") + } + + ts := cfg.Turnstile + ts.Enabled = true + ts.Provider = config.ProviderBrowser + ts.BrowserPath = exe + ts.Retries = 1 + ts.TimeoutSeconds = 30 // faster feedback while diagnosing + ts.BrowserHeadless = os.Getenv("DSFREE_BROWSER_E2E_HEADLESS") != "" + solver := New(ts, cfg.Upstream.UserAgent) + + browserDebug = func(format string, args ...any) { + t.Logf(format, args...) + } + defer func() { browserDebug = nil }() + + if os.Getenv("DSFREE_BROWSER_E2E_TRACE") != "" { + type diag struct { + c *cdp + sid string + } + var logMu sync.Mutex + finished := false + logf := func(format string, args ...any) { + logMu.Lock() + defer logMu.Unlock() + if finished { + return + } + t.Logf(format, args...) + } + defer func() { + logMu.Lock() + finished = true + logMu.Unlock() + }() + done := make(chan struct{}) + defer close(done) + type respRef struct{ id, url, sess string } + pendingResp := make(chan respRef, 16) + type fetchRef struct{ id, url, sess, method string } + pendingFetch := make(chan fetchRef, 32) + rchFrames := make(chan string, 8) + + diagCh := make(chan diag, 1) + browserDiagHook = func(c *cdp, s string) { + select { + case diagCh <- diag{c: c, sid: s}: + default: + } + } + defer func() { browserDiagHook = nil }() + browserSetupHook = func(c *cdp, s string) { + cctx, ccancel := context.WithTimeout(context.Background(), 5*time.Second) + c.call(cctx, s, "Page.addScriptToEvaluateOnNewDocument", map[string]any{"source": netTapJS}) + _, ferr := c.call(cctx, s, "Fetch.enable", map[string]any{ + "patterns": []any{ + map[string]any{"urlPattern": "*cdn-cgi/challenge-platform*", "requestStage": "Response"}, + }, + }) + if ferr != nil { + logf("Fetch.enable err=%v", ferr) + } + ccancel() + } + defer func() { browserSetupHook = nil }() + seenCtx := sync.Map{} + cfCtx := make(chan int64, 16) + cdpEventHook = func(session, method string, params json.RawMessage) { + switch method { + case "Network.requestWillBeSent": + var p struct { + Request struct { + URL string `json:"url"` + Method string `json:"method"` + Headers map[string]string `json:"headers"` + } `json:"request"` + Type string `json:"type"` + FrameID string `json:"frameId"` + DocumentURL string `json:"documentURL"` + Initiator struct { + Type string `json:"type"` + } `json:"initiator"` + } + if json.Unmarshal(params, &p) == nil { + ua := p.Request.Headers["User-Agent"] + if strings.Contains(p.Request.URL, "cdn-cgi/challenge-platform") || strings.Contains(ua, "HeadlessChrome") { + keys := make([]string, 0, len(p.Request.Headers)) + for k := range p.Request.Headers { + keys = append(keys, k) + } + sort.Strings(keys) + var b strings.Builder + for _, k := range keys { + fmt.Fprintf(&b, "%s=%q ", k, p.Request.Headers[k]) + } + logf("CHAL %s %s headlessUA=%v type=%s init=%s frame=%s doc=%s %s", + p.Request.Method, p.Request.URL, strings.Contains(ua, "HeadlessChrome"), + p.Type, p.Initiator.Type, p.FrameID, p.DocumentURL, b.String()) + if p.Type == "Document" && p.FrameID != "" && strings.Contains(p.Request.URL, "/rch/") { + select { + case rchFrames <- p.FrameID: + default: + } + } + } + } + case "Network.responseReceived": + var p struct { + RequestID string `json:"requestId"` + Response struct { + URL string `json:"url"` + Status int `json:"status"` + Protocol string `json:"protocol"` + ConnectionID any `json:"connectionId"` + Headers map[string]string `json:"headers"` + SetCookie string `json:"setCookie"` + } `json:"response"` + } + if json.Unmarshal(params, &p) == nil && (strings.Contains(p.Response.URL, "cdn-cgi") || strings.Contains(p.Response.URL, "challenges.cloudflare")) { + logf("RESP %d proto=%s conn=%v sess=%s setCookie=%q %s", p.Response.Status, p.Response.Protocol, p.Response.ConnectionID, session, p.Response.SetCookie, p.Response.URL) + keys := make([]string, 0, len(p.Response.Headers)) + for k := range p.Response.Headers { + if !strings.EqualFold(k, "Content-Security-Policy") && !strings.EqualFold(k, "Date") { + keys = append(keys, k) + } + } + sort.Strings(keys) + var b strings.Builder + for _, k := range keys { + v := p.Response.Headers[k] + if len(v) > 200 { + v = v[:200] + "..." + } + fmt.Fprintf(&b, "%s=%q ", k, v) + } + logf("RESPH %s %s", p.Response.URL, b.String()) + select { + case pendingResp <- respRef{id: p.RequestID, url: p.Response.URL, sess: session}: + default: + } + } + case "Runtime.executionContextCreated": + var p struct { + ExecutionContextID int64 `json:"executionContextId"` + Origin string `json:"origin"` + } + if json.Unmarshal(params, &p) == nil && strings.Contains(p.Origin, "cloudflare") { + if _, loaded := seenCtx.LoadOrStore(p.ExecutionContextID, true); !loaded { + logf("CFCTX id=%d origin=%s", p.ExecutionContextID, p.Origin) + select { + case cfCtx <- p.ExecutionContextID: + default: + } + } + } + case "Fetch.requestPaused": + var p struct { + RequestID string `json:"requestId"` + Request struct { + URL string `json:"url"` + Method string `json:"method"` + } `json:"request"` + ResponseStatusCode int `json:"responseStatusCode"` + } + if json.Unmarshal(params, &p) == nil && p.RequestID != "" { + select { + case pendingFetch <- fetchRef{id: p.RequestID, url: p.Request.URL, sess: session, method: p.Request.Method}: + default: + logf("FETCH channel full, dropping %s", p.Request.URL) + } + } + case "Runtime.consoleAPICalled": + var p struct { + Type string `json:"type"` + Args []struct { + Value json.RawMessage `json:"value"` + } `json:"args"` + } + if json.Unmarshal(params, &p) == nil && len(p.Args) > 0 { + var s string + if json.Unmarshal(p.Args[0].Value, &s) == nil && strings.HasPrefix(s, "NET|") { + logf("CONSOLE %s", s) + } + } + case "Target.attachedToTarget": + logf("ATTACH params=%s", params) + } + } + defer func() { cdpEventHook = nil }() + type frT struct { + Frame struct { + ID string `json:"id"` + URL string `json:"url"` + } `json:"frame"` + ChildFrames []frT `json:"childFrames"` + } + go func() { + var d diag + select { + case d = <-diagCh: + case <-done: + return + } + probed := map[string]bool{} + logf("MAINSID %s", d.sid) + ticker := time.NewTicker(time.Second) + defer ticker.Stop() + for { + select { + case <-done: + return + case f := <-pendingFetch: + func() { + fctx, fcancel := context.WithTimeout(context.Background(), 5*time.Second) + defer fcancel() + raw, err := d.c.call(fctx, f.sess, "Fetch.getResponseBody", map[string]any{"requestId": f.id}) + if err != nil { + logf("FCHBODY %s %s err=%v", f.method, f.url, err) + } else { + var bo struct { + Body string `json:"body"` + Base64 bool `json:"base64Encoded"` + MIMEType string `json:"mimeType"` + } + if json.Unmarshal(raw, &bo) == nil { + body := bo.Body + if bo.Base64 { + body = "(b64)" + body + } + if strings.Contains(f.url, "/rch/") && bo.Body != "" && !probed["rchjs:"+f.url] { + probed["rchjs:"+f.url] = true + n := 0 + for k := range probed { + if strings.HasPrefix(k, "rchfile:") { + n++ + } + } + probed[fmt.Sprintf("rchfile:%d", n)] = true + dst := filepath.Join(os.TempDir(), fmt.Sprintf("turnstile_rch_%s_%02d.txt", map[bool]string{true: "hl", false: "hd"}[os.Getenv("DSFREE_BROWSER_E2E_HEADLESS") != ""], n)) + if err := os.WriteFile(dst, []byte(bo.Body), 0o644); err == nil { + logf("RCHFILE %d bytes -> %s", len(bo.Body), dst) + } + } + logf("FCHBODY mime=%s %s %s %s", bo.MIMEType, f.method, f.url, body[:min(600, len(body))]) + } + } + rctx, rcancel := context.WithTimeout(context.Background(), 5*time.Second) + defer rcancel() + if _, err := d.c.call(rctx, f.sess, "Fetch.continueResponse", map[string]any{"requestId": f.id}); err != nil { + if _, err2 := d.c.call(rctx, f.sess, "Fetch.continueRequest", map[string]any{"requestId": f.id}); err2 != nil { + logf("FETCH continue failed id=%s: %v / %v", f.id, err, err2) + } + } + }() + case r := <-pendingResp: + time.Sleep(300 * time.Millisecond) + useSid := r.sess + if useSid == "" { + useSid = d.sid + } + bctx, bcancel := context.WithTimeout(context.Background(), 5*time.Second) + braw, berr := d.c.call(bctx, useSid, "Network.getResponseBody", map[string]any{"requestId": r.id}) + bcancel() + if berr != nil { + logf("RCHBODY %s err=%v", r.url, berr) + continue + } + var bo struct { + Body string `json:"body"` + Base64 bool `json:"base64Encoded"` + MIMEType string `json:"mimeType"` + } + if json.Unmarshal(braw, &bo) == nil { + if strings.Contains(r.url, "api.js") && !probed["apijs"] && bo.Body != "" { + probed["apijs"] = true + dst := filepath.Join(os.TempDir(), "turnstile_api_js.txt") + if err := os.WriteFile(dst, []byte(bo.Body), 0o644); err == nil { + logf("APIJS saved %d bytes -> %s", len(bo.Body), dst) + } + } + body := bo.Body + if bo.Base64 { + body = "(b64)" + body[:min(400, len(body))] + } + logf("RCHBODY mime=%s %s %s", bo.MIMEType, r.url, body[:min(900, len(body))]) + } + case fid := <-rchFrames: + go func() { + var last string + for i := 0; i < 15; i++ { + select { + case <-done: + return + default: + } + time.Sleep(700 * time.Millisecond) + func() { + wctx, wcancel := context.WithTimeout(context.Background(), 5*time.Second) + defer wcancel() + raw, err := d.c.call(wctx, d.sid, "Page.createIsolatedWorld", map[string]any{ + "frameId": fid, "worldName": "dsrchprobe", + }) + if err != nil { + if i == 0 { + logf("RCHFRAME %s world err=%v", fid, err) + } + return + } + var w struct { + ExecutionContextID int64 `json:"executionContextId"` + } + if json.Unmarshal(raw, &w) != nil || w.ExecutionContextID == 0 { + return + } + eraw, eerr := d.c.call(wctx, d.sid, "Runtime.evaluate", map[string]any{ + "expression": `JSON.stringify({href:(location.href||"").slice(0,95), rs:document.readyState, + focus:document.hasFocus(), vis:document.visibilityState, + inner:[innerWidth,innerHeight], win:[window.outerWidth,window.outerHeight], + wd:String(navigator.webdriver), ua:navigator.userAgent.slice(-24)})`, + "returnByValue": true, + "contextId": w.ExecutionContextID, + }) + if eerr != nil { + return + } + var out struct { + Result struct { + Value json.RawMessage `json:"value"` + } `json:"result"` + } + if json.Unmarshal(eraw, &out) == nil { + s := string(out.Result.Value) + if s != last { + last = s + logf("RCHFRAME i=%d %s -> %s", i, fid, s) + } + } + }() + } + }() + case id := <-cfCtx: + cctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + raw, err := d.c.call(cctx, d.sid, "Runtime.evaluate", map[string]any{ + "expression": `JSON.stringify({ua:navigator.userAgent, wd:String(navigator.webdriver), focus:document.hasFocus(), sl:screen.height+"x"+screen.availHeight, cw:document.documentElement.clientWidth, href:window.location.href.slice(0,70)})`, + "returnByValue": true, + "contextId": id, + }) + cancel() + if err != nil { + logf("CFCTX id=%d evaluate err=%v", id, err) + continue + } + var out struct { + Result struct { + Value json.RawMessage `json:"value"` + } `json:"result"` + } + if json.Unmarshal(raw, &out) == nil { + logf("CFCTX id=%d -> %s", id, out.Result.Value) + } + case <-ticker.C: + func() { + rctx2, rcancel2 := context.WithTimeout(context.Background(), 4*time.Second) + defer rcancel2() + traw, terr := d.c.call(rctx2, "", "Target.getTargets", nil) + if terr != nil { + return + } + var tl struct { + TargetInfos []struct { + TargetID string `json:"targetId"` + URL string `json:"url"` + Type string `json:"type"` + } `json:"targetInfos"` + } + if json.Unmarshal(traw, &tl) != nil { + return + } + for _, ti := range tl.TargetInfos { + if !strings.Contains(ti.URL, "challenges.cloudflare.com") || probed["tg:"+ti.TargetID] { + continue + } + if probed["tga:"+ti.TargetID] { + // already attached+probed once; only retry if still about:blank + } + alog, aerr := d.c.call(rctx2, "", "Target.attachToTarget", map[string]any{ + "targetId": ti.TargetID, "flatten": true, + }) + if aerr != nil { + probed["tg:"+ti.TargetID] = true + logf("RCHTGT attach err=%v", aerr) + continue + } + var atg struct { + SessionID string `json:"sessionId"` + } + if json.Unmarshal(alog, &atg) != nil || atg.SessionID == "" { + probed["tg:"+ti.TargetID] = true + continue + } + eraw, eerr := d.c.call(rctx2, atg.SessionID, "Runtime.evaluate", map[string]any{ + "expression": `JSON.stringify({href:(location.href||"").slice(0,95), rs:document.readyState, + focus:document.hasFocus(), vis:document.visibilityState, hist:history.length, + ref:(document.referrer||"").slice(0,60), + inner:[innerWidth,innerHeight], outer:[outerWidth,outerHeight], dpr:devicePixelRatio, + wd:String(navigator.webdriver), ua:navigator.userAgent, + tz:Intl.DateTimeFormat().resolvedOptions().timeZone, + dsp:String(window.__dsSp), + swd:String((Object.getOwnPropertyDescriptor(Screen.prototype,"width")||{}).get||"none"), + screen:[screen.width,screen.height,screen.availWidth,screen.availHeight], + chrome:typeof window.chrome, plugs:(navigator.plugins||[]).length, + topWin:(function(){try{return window.top===window}catch(e){return "xo"}})(), + leaks:Object.getOwnPropertyNames(window).filter(function(k){return /cdc_|webdriver|selenium|phantom/i.test(k)}).join(",")})`, + "returnByValue": true, + }) + if eerr != nil { + logf("RCHTGT eval err=%v", eerr) + continue + } + var out struct { + Result struct { + Value json.RawMessage `json:"value"` + } `json:"result"` + } + if json.Unmarshal(eraw, &out) == nil { + val := string(out.Result.Value) + if !strings.Contains(val, "about:blank") { + probed["tg:"+ti.TargetID] = true + } + logf("RCHTGT type=%s %s -> %s", ti.Type, ti.URL[:min(70, len(ti.URL))], val) + } + } + }() + rctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + raw, err := d.c.call(rctx, d.sid, "Page.getFrameTree", nil) + if err != nil { + cancel() + logf("FRAMETREE err=%v", err) + return + } + cancel() + var ftRes struct { + FrameTree frT `json:"frameTree"` + } + if json.Unmarshal(raw, &ftRes) != nil { + continue + } + if !probed["_log"] { + probed["_log"] = true + var n int + var collect func(f frT) + collect = func(f frT) { + n++ + for _, c := range f.ChildFrames { + collect(c) + } + } + collect(ftRes.FrameTree) + logf("FRAMETREE n=%d", n) + } + var walk func(f frT) + walk = func(f frT) { + if f.Frame.URL != "" { + ukey := "u:" + f.Frame.URL + if !probed[ukey] { + probed[ukey] = true + logf("FRAME %s", f.Frame.URL[:min(70, len(f.Frame.URL))]) + } + } + if strings.Contains(f.Frame.URL, "challenges.cloudflare") && f.Frame.ID != "" && !probed[f.Frame.ID] { + probed[f.Frame.ID] = true + wctx, wcancel := context.WithTimeout(context.Background(), 5*time.Second) + wraw, werr := d.c.call(wctx, d.sid, "Page.createIsolatedWorld", map[string]any{ + "frameId": f.Frame.ID, "worldName": "dsprobe", + }) + if werr == nil { + var w struct { + ExecutionContextID int64 `json:"executionContextId"` + } + if json.Unmarshal(wraw, &w) == nil && w.ExecutionContextID != 0 { + eraw, eerr := d.c.call(wctx, d.sid, "Runtime.evaluate", map[string]any{ + "expression": `JSON.stringify({ua:navigator.userAgent, wd:String(navigator.webdriver), focus:document.hasFocus(), sl:screen.height+"x"+screen.availHeight, cw:document.documentElement.clientWidth, href:location.href.slice(0,70)})`, + "returnByValue": true, + "contextId": w.ExecutionContextID, + }) + if eerr == nil { + var out struct { + Result struct { + Value json.RawMessage `json:"value"` + } `json:"result"` + } + if json.Unmarshal(eraw, &out) == nil { + logf("CFFRAME %s -> %s", f.Frame.URL[:min(60, len(f.Frame.URL))], out.Result.Value) + } + } else { + logf("CFFRAME eval err=%v", eerr) + } + } + } else { + logf("CFFRAME world err=%v", werr) + } + wcancel() + } + for _, c := range f.ChildFrames { + walk(c) + } + } + walk(ftRes.FrameTree) + dctx, dcancel := context.WithTimeout(context.Background(), 5*time.Second) + draw, derr := d.c.call(dctx, d.sid, "Runtime.evaluate", map[string]any{ + "expression": domExpr, "returnByValue": true, + }) + dcancel() + if derr == nil { + var dout struct { + Result struct { + Value json.RawMessage `json:"value"` + } `json:"result"` + } + if json.Unmarshal(draw, &dout) == nil { + var s string + if json.Unmarshal(dout.Result.Value, &s) == nil && s != "" && !probed["dom:"+s] { + probed["dom:"+s] = true + logf("DOM %s", s) + } + } + } + if !probed["fp"] { + fctx, fcancel := context.WithTimeout(context.Background(), 5*time.Second) + fraw, ferr := d.c.call(fctx, d.sid, "Runtime.evaluate", map[string]any{ + "expression": fpExpr, "returnByValue": true, + }) + fcancel() + if ferr == nil { + var fout struct { + Result struct { + Value json.RawMessage `json:"value"` + } `json:"result"` + } + if json.Unmarshal(fraw, &fout) == nil { + var s string + if json.Unmarshal(fout.Result.Value, &s) == nil && s != "" { + probed["fp"] = true + logf("FP %s", s) + } + } + } + } + } + } + }() + } + + site := cfg.Sites["de"] + c := solver.coreFor(cfg.Proxy.URL) + t.Logf("browser=%s proxy=%s site=%s", exe, cfg.Proxy.URL, site.BaseURL) + + ctx := context.Background() + token, err := solver.solveToken(ctx, site, site.SiteKey, c) + if err != nil { + t.Fatalf("solve: %v", err) + } + if len(token) < 20 { + t.Fatalf("token too short (%d chars): %q", len(token), token) + } + t.Logf("token ok: %d chars, prefix %q", len(token), token[:min(12, len(token))]) + + // the token is only worth something if the site accepts it + sess, err := httpx.NewSession(httpx.Options{ProxyURL: cfg.Proxy.URL, Timeout: 30 * time.Second}) + if err != nil { + t.Fatalf("session: %v", err) + } + defer sess.Close() + if err := solver.verifyToken(ctx, sess, site, token); err != nil { + t.Fatalf("verify: %v", err) + } + t.Logf("verify ok: %d cookies for %s", len(sess.Cookies()), site.Code) + for name := range sess.Cookies() { + t.Logf(" cookie: %s", name) + } +} diff --git a/internal/turnstile/cdp.go b/internal/turnstile/cdp.go new file mode 100644 index 0000000..abe48f4 --- /dev/null +++ b/internal/turnstile/cdp.go @@ -0,0 +1,230 @@ +package turnstile + +import ( + "context" + "encoding/json" + "fmt" + "sync" + "time" + + "golang.org/x/net/websocket" +) + +// cdpEventHook, when set (tests / troubleshooting), receives every protocol +// event. Production leaves it nil and events are dropped. +var cdpEventHook func(session, method string, params json.RawMessage) + +// subTargetEvent is a Target.attachedToTarget / Target.detachedFromTarget +// notification routed to a subscriber (the headless sub-frame screen fix). +type subTargetEvent struct { + session string + method string + params json.RawMessage +} + +// cdp is a minimal Chrome DevTools Protocol client: JSON request/response over +// a single WebSocket. The solver only issues calls and polls, which keeps the +// client small and race-free. +type cdp struct { + conn *websocket.Conn + writeMu sync.Mutex + + mu sync.Mutex + seq int64 + pending map[int64]chan cdpResult + err error + subCh chan subTargetEvent +} + +type cdpResult struct { + Result json.RawMessage + Error *cdpCallError +} + +type cdpCallError struct { + Code int `json:"code"` + Message string `json:"message"` +} + +func (e *cdpCallError) Error() string { + return fmt.Sprintf("cdp error %d: %s", e.Code, e.Message) +} + +// dialCDP opens the DevTools WebSocket (origin must match the browser host, +// otherwise Chrome rejects the handshake). +func dialCDP(ctx context.Context, wsURL, origin string) (*cdp, error) { + cfg, err := websocket.NewConfig(wsURL, origin) + if err != nil { + return nil, err + } + conn, err := cfg.DialContext(ctx) + if err != nil { + return nil, err + } + c := &cdp{conn: conn, pending: map[int64]chan cdpResult{}} + go c.readLoop() + return c, nil +} + +func (c *cdp) readLoop() { + for { + var raw string + if err := websocket.Message.Receive(c.conn, &raw); err != nil { + c.fail(fmt.Errorf("cdp connection lost: %w", err)) + return + } + var msg struct { + ID int64 `json:"id"` + Method string `json:"method"` + Params json.RawMessage `json:"params"` + SessionID string `json:"sessionId"` + Result json.RawMessage `json:"result"` + Error *cdpCallError `json:"error"` + } + if err := json.Unmarshal([]byte(raw), &msg); err != nil { + continue + } + if msg.ID == 0 { + if msg.Method != "" { + if h := cdpEventHook; h != nil { + h(msg.SessionID, msg.Method, msg.Params) + } + if msg.Method == "Target.attachedToTarget" || msg.Method == "Target.detachedFromTarget" { + c.mu.Lock() + ch := c.subCh + c.mu.Unlock() + if ch != nil { + select { + case ch <- subTargetEvent{msg.SessionID, msg.Method, msg.Params}: + default: // subscriber is behind; never block the read loop + } + } + } + } + continue // events and target-scoped notifications + } + c.mu.Lock() + ch, ok := c.pending[msg.ID] + delete(c.pending, msg.ID) + c.mu.Unlock() + if ok { + ch <- cdpResult{Result: msg.Result, Error: msg.Error} + } + } +} + +func (c *cdp) fail(err error) { + c.mu.Lock() + if c.err == nil { + c.err = err + } + pending := c.pending + c.pending = map[int64]chan cdpResult{} + c.mu.Unlock() + for _, ch := range pending { + ch <- cdpResult{Error: &cdpCallError{Message: err.Error()}} + } +} + +// call sends one CDP command, optionally scoped to an attached target session. +func (c *cdp) call(ctx context.Context, session, method string, params any) (json.RawMessage, error) { + c.mu.Lock() + if c.err != nil { + err := c.err + c.mu.Unlock() + return nil, err + } + c.seq++ + id := c.seq + ch := make(chan cdpResult, 1) + c.pending[id] = ch + c.mu.Unlock() + + msg := map[string]any{"id": id, "method": method} + if params != nil { + msg["params"] = params + } + if session != "" { + msg["sessionId"] = session + } + buf, err := json.Marshal(msg) + if err != nil { + c.drop(id) + return nil, err + } + c.writeMu.Lock() + sendErr := websocket.Message.Send(c.conn, string(buf)) + c.writeMu.Unlock() + if sendErr != nil { + c.drop(id) + return nil, fmt.Errorf("cdp send %s: %w", method, sendErr) + } + + select { + case <-ctx.Done(): + c.drop(id) + return nil, ctx.Err() + case res := <-ch: + if res.Error != nil { + return nil, res.Error + } + return res.Result, nil + } +} + +func (c *cdp) drop(id int64) { + c.mu.Lock() + delete(c.pending, id) + c.mu.Unlock() +} + +// setSubTargets installs (nil clears) the sub-target event sink. Install it +// before Target.setAutoAttach so no attach notification can be lost. +func (c *cdp) setSubTargets(ch chan subTargetEvent) { + c.mu.Lock() + c.subCh = ch + c.mu.Unlock() +} + +func (c *cdp) Close() { _ = c.conn.Close() } + +type evalResult struct { + Result struct { + Type string `json:"type"` + Value json.RawMessage `json:"value"` + } `json:"result"` + ExceptionDetails *struct { + Text string `json:"text"` + Exception *struct { + Description string `json:"description"` + } `json:"exception"` + } `json:"exceptionDetails"` +} + +// evaluate runs an expression in the page and returns its JSON value. The +// 15s cap keeps a wedged browser from blocking a chat request forever. +func (c *cdp) evaluate(ctx context.Context, session, expr string) (json.RawMessage, error) { + ctx, cancel := context.WithTimeout(ctx, 15*time.Second) + defer cancel() + raw, err := c.call(ctx, session, "Runtime.evaluate", map[string]any{ + "expression": expr, + "returnByValue": true, + "awaitPromise": true, + "userGesture": true, + }) + if err != nil { + return nil, err + } + var out evalResult + if err := json.Unmarshal(raw, &out); err != nil { + return nil, fmt.Errorf("runtime.evaluate bad json: %w", err) + } + if d := out.ExceptionDetails; d != nil { + msg := d.Text + if d.Exception != nil && d.Exception.Description != "" { + msg = d.Exception.Description + } + return nil, fmt.Errorf("javascript error: %s", msg) + } + return out.Result.Value, nil +} diff --git a/internal/turnstile/probe_test.go b/internal/turnstile/probe_test.go new file mode 100644 index 0000000..a4958ca --- /dev/null +++ b/internal/turnstile/probe_test.go @@ -0,0 +1,139 @@ +package turnstile + +import ( + "context" + "encoding/json" + "fmt" + "os" + "strings" + "testing" + "time" + + "github.com/nyoungo/dsfree2api/internal/config" +) + +// TestHeadlessProbe prints the environment signals Cloudflare can use to +// detect a headless browser, mirroring the production setup path. +// Opt in: DSFREE_PROBE=1 go test ./internal/turnstile -run Probe -v +// (DSFREE_PROBE_HEADED=1 runs the headed baseline instead) +func TestHeadlessProbe(t *testing.T) { + if os.Getenv("DSFREE_PROBE") == "" { + t.Skip("set DSFREE_PROBE=1 to probe the headless environment") + } + cfg, err := config.Load("../../config.toml") + if err != nil { + t.Fatalf("load config: %v", err) + } + headless := os.Getenv("DSFREE_PROBE_HEADED") == "" + exe := `C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe` + + ctx, cancel := context.WithTimeout(context.Background(), 90*time.Second) + defer cancel() + + br, err := launchBrowser(ctx, exe, config.Turnstile{BrowserHeadless: headless}, "de-DE,de;q=0.9", cfg.Proxy.URL) + if err != nil { + t.Fatalf("launch: %v", err) + } + defer br.Close() + conn, err := dialCDP(ctx, br.wsURL, fmt.Sprintf("http://127.0.0.1:%d", br.port)) + if err != nil { + t.Fatalf("dial: %v", err) + } + defer conn.Close() + sid, err := attachPage(ctx, conn) + if err != nil { + t.Fatalf("attach: %v", err) + } + metrics := map[string]any{"width": 1280, "height": 900, "deviceScaleFactor": 1, "mobile": false} + if headless { + metrics["screenWidth"] = 1920 + metrics["screenHeight"] = 1080 + } + for _, step := range [][2]any{ + {"Page.enable", nil}, + {"Runtime.enable", nil}, + {"Emulation.setDeviceMetricsOverride", metrics}, + {"Page.addScriptToEvaluateOnNewDocument", map[string]any{"source": stealthJS}}, + } { + if _, err := conn.call(ctx, sid, step[0].(string), step[1]); err != nil { + t.Fatalf("%v: %v", step[0], err) + } + } + if headless { + bootSid, closeBoot, err := openBootstrap(ctx, conn, "https://www.baidu.com/", 8*time.Second) + if err != nil { + t.Logf("bootstrap: %v", err) + } else { + if _, err := overrideHeadlessUA(ctx, conn, sid, bootSid); err != nil { + t.Logf("overrideHeadlessUA: %v", err) + } + closeBoot() + } + } + if _, err := conn.call(ctx, sid, "Page.navigate", map[string]any{"url": "https://deepseek.de/"}); err != nil { + t.Fatalf("navigate: %v", err) + } + deadline := time.Now().Add(30 * time.Second) + for { + raw, err := conn.evaluate(ctx, sid, `document.readyState`) + if err == nil && string(raw) == `"complete"` { + break + } + if time.Now().After(deadline) { + t.Fatalf("page never completed: raw=%s err=%v", raw, err) + } + time.Sleep(500 * time.Millisecond) + } + probe := `(() => { + const o = {headless: %(HEADLESS)s, ua: navigator.userAgent, + screen: [screen.width, screen.height, screen.availWidth, screen.availHeight, screen.colorDepth, screen.pixelDepth], + inner: [window.innerWidth, window.innerHeight], + outer: [window.outerWidth, window.outerHeight, window.screenX, window.screenY], + docClientW: document.documentElement.clientWidth, + mq: {hover: matchMedia("(hover: hover)").matches, anyHover: matchMedia("(any-hover: hover)").matches, + pfine: matchMedia("(pointer: fine)").matches, pcoarse: matchMedia("(pointer: coarse)").matches, + pnone: matchMedia("(pointer: none)").matches, anyFine: matchMedia("(any-pointer: fine)").matches, + srgb: matchMedia("(color-gamut: srgb)").matches, dark: matchMedia("(prefers-color-scheme: dark)").matches}, + chrome: Object.keys(window.chrome || {}).sort(), + notif: (typeof Notification !== "undefined") ? Notification.permission : "no-Notification", + plugins: navigator.plugins.length, + conn: navigator.connection ? [navigator.connection.effectiveType, navigator.connection.downlink, navigator.connection.rtt] : null, + orient: screen.orientation ? [screen.orientation.type, screen.orientation.angle] : null, + vv: window.visualViewport ? [window.visualViewport.width, window.visualViewport.height, window.visualViewport.scale] : null, + audio: null, voices: null, kbd: null, raf: null, gamepads: null}; + return (async () => { + try { const ac = new AudioContext(); o.audio = [ac.sampleRate, ac.state, ac.baseLatency || 0]; } catch (e) { o.audio = "err:" + e; } + try { + o.voices = await new Promise(res => { + const ss = window.speechSynthesis; if (!ss) return res(-1); + const v = ss.getVoices(); if (v.length) return res(v.length); + const t = setTimeout(() => res(ss.getVoices().length), 1500); + ss.addEventListener("voiceschanged", () => { clearTimeout(t); res(ss.getVoices().length); }, {once:true}); + }); + } catch (e) { o.voices = "err:" + e; } + try { + const m = await navigator.keyboard.getLayoutMap(); + o.kbd = [m.size, Array.from(m.values()).slice(0, 8).join("")]; + } catch (e) { o.kbd = "err:" + e; } + try { + o.raf = await new Promise(res => { + let n = 0, t0 = 0; + const f = t => { if (!n) { t0 = t; } if (++n >= 5) { res(Math.round((t - t0) / 4)); } else requestAnimationFrame(f); }; + requestAnimationFrame(f); + setTimeout(() => res("timeout"), 2000); + }); + } catch (e) { o.raf = "err:" + e; } + try { o.gamepads = (navigator.getGamepads ? Array.from(navigator.getGamepads()).length : -1); } catch (e) { o.gamepads = "err"; } + return JSON.stringify(o); + })(); + })()` + raw, err := conn.evaluate(ctx, sid, strings.Replace(probe, "%(HEADLESS)s", map[bool]string{true: "true", false: "false"}[headless], 1)) + if err != nil { + t.Fatalf("evaluate: %v", err) + } + var payload string + if json.Unmarshal(raw, &payload) != nil { + payload = string(raw) + } + fmt.Printf("PROBE(headless=%v): %s\n", headless, payload) +} diff --git a/internal/turnstile/solver.go b/internal/turnstile/solver.go new file mode 100644 index 0000000..cd2e588 --- /dev/null +++ b/internal/turnstile/solver.go @@ -0,0 +1,527 @@ +// Package turnstile solves Cloudflare Turnstile challenges for the upstream +// sites and caches the resulting verified cookies per proxy route + site. +package turnstile + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "strings" + "sync" + "time" + + "github.com/nyoungo/dsfree2api/internal/config" + "github.com/nyoungo/dsfree2api/internal/httpx" +) + +// Error is a Turnstile solver failure. Retryable marks transient (network) +// failures; solver-side rejections such as a bad API key or exhausted quota +// return Retryable=false so callers fail fast instead of burning retries. +type Error struct { + Msg string + Retryable bool +} + +func (e *Error) Error() string { return e.Msg } + +// Retryable reports whether err is worth retrying. Non-solver errors are +// assumed transient. +func Retryable(err error) bool { + var e *Error + if errors.As(err, &e) { + return e.Retryable + } + return true +} + +type Record struct { + Site string `json:"site"` + Proxy string `json:"proxy"` + At time.Time `json:"at"` + ElapsedMs int64 `json:"elapsed_ms"` + OK bool `json:"ok"` + Error string `json:"error,omitempty"` +} + +type SiteStatus struct { + Site string `json:"site"` + Valid bool `json:"valid"` + ExpiresAt int64 `json:"expires_at"` + RemainingS int64 `json:"remaining_s"` + CookieNum int `json:"cookie_count"` +} + +type cookieState struct { + cookies map[string]string + expiresAt time.Time +} + +type core struct { + proxy string + client *http.Client + mu sync.Mutex + cache map[string]*cookieState + locks map[string]*sync.Mutex +} + +func (c *core) lockFor(site string) *sync.Mutex { + c.mu.Lock() + defer c.mu.Unlock() + l, ok := c.locks[site] + if !ok { + l = &sync.Mutex{} + c.locks[site] = l + } + return l +} + +type Solver struct { + cfg config.Turnstile + ua string + mu sync.Mutex + cores map[string]*core + history []Record + now func() time.Time + + // browserMu serializes browser solves: one Chrome window at a time. + browserMu sync.Mutex + + // refreshOverride is a test seam; nil in production. + refreshOverride func(ctx context.Context, sess httpx.Session, site *config.Site, c *core) error +} + +func New(cfg config.Turnstile, userAgent string) *Solver { + if userAgent == "" { + userAgent = httpx.DefaultUserAgent + } + return &Solver{ + cfg: cfg, + ua: userAgent, + cores: map[string]*core{}, + now: time.Now, + } +} + +func (s *Solver) Enabled() bool { return s.cfg.Enabled } + +func (s *Solver) Config() config.Turnstile { + s.mu.Lock() + defer s.mu.Unlock() + return s.cfg +} + +// SetConfig swaps the solver configuration (used by the web console). Cached +// cookies survive it, otherwise saving an unrelated field would throw away a +// cookie import. +func (s *Solver) SetConfig(cfg config.Turnstile) { + s.mu.Lock() + defer s.mu.Unlock() + s.cfg = cfg +} + +func (s *Solver) coreFor(proxy string) *core { + key := proxy + if key == "" { + key = "direct" + } + s.mu.Lock() + defer s.mu.Unlock() + c, ok := s.cores[key] + if !ok { + client, _ := httpx.StdClient(proxy, time.Duration(s.cfg.TimeoutSeconds+30)*time.Second) + c = &core{ + proxy: key, + client: client, + cache: map[string]*cookieState{}, + locks: map[string]*sync.Mutex{}, + } + s.cores[key] = c + } + return c +} + +func (s *Solver) Invalidate(siteCode string) { + s.mu.Lock() + cores := make([]*core, 0, len(s.cores)) + for _, c := range s.cores { + cores = append(cores, c) + } + s.mu.Unlock() + for _, c := range cores { + c.mu.Lock() + delete(c.cache, siteCode) + c.mu.Unlock() + } +} + +// ImportCookies stores cookies exported from a browser session that already +// passed the Turnstile check, so chat works while [turnstile] is off or the +// solver service is down. Cookies are bound to the IP/UA that obtained them, +// so they must be copied from a browser using the same proxy route. +func (s *Solver) ImportCookies(siteCode, raw, proxy string) (time.Time, int, error) { + pairs := ParseCookiePairs(raw) + if len(pairs) == 0 { + return time.Time{}, 0, errors.New("no cookies parsed — expected `name=value; name2=value2`") + } + exp := time.Now().Add(time.Duration(s.Config().CookieTTLSeconds) * time.Second) + c := s.coreFor(proxy) + c.mu.Lock() + c.cache[siteCode] = &cookieState{cookies: pairs, expiresAt: exp} + c.mu.Unlock() + return exp, len(pairs), nil +} + +// cookieAttrs are Set-Cookie attributes and never part of the session. +var cookieAttrs = map[string]bool{ + "path": true, "domain": true, "expires": true, "max-age": true, + "samesite": true, "httponly": true, "secure": true, "priority": true, + "partitioned": true, +} + +// ParseCookiePairs accepts `a=b; c=d`, `document.cookie` output or one pair +// per line. Values may themselves contain '='. +func ParseCookiePairs(raw string) map[string]string { + out := map[string]string{} + for _, chunk := range strings.Split(strings.ReplaceAll(raw, "\n", ";"), ";") { + chunk = strings.TrimSpace(chunk) + if chunk == "" { + continue + } + i := strings.Index(chunk, "=") + if i <= 0 { + continue + } + k := strings.ToLower(strings.Trim(strings.TrimSpace(chunk[:i]), `"`)) + v := strings.Trim(strings.TrimSpace(chunk[i+1:]), `"`) + if cookieAttrs[k] || v == "" { + continue + } + out[k] = v + } + return out +} + +// ApplyValidCookies ensures the session carries fresh verified cookies. +// Concurrent callers for the same site coalesce behind a per-site lock. +// Cached cookies (including a manual import) are applied even when the +// [turnstile] switch is off; only the solving step needs the switch. +func (s *Solver) ApplyValidCookies(ctx context.Context, sess httpx.Session, site *config.Site, proxy string) error { + c := s.coreFor(proxy) + if st := c.load(site.Code); st != nil { + sess.SetCookies(st.cookies) + return nil + } + if !s.Enabled() { + return nil + } + l := c.lockFor(site.Code) + l.Lock() + defer l.Unlock() + if st := c.load(site.Code); st != nil { + sess.SetCookies(st.cookies) + return nil + } + return s.refreshLocked(ctx, sess, site, c) +} + +// Refresh forces a fresh solve → verify cycle. +func (s *Solver) Refresh(ctx context.Context, sess httpx.Session, site *config.Site, proxy string) error { + if !s.cfg.Enabled { + return nil + } + c := s.coreFor(proxy) + l := c.lockFor(site.Code) + l.Lock() + defer l.Unlock() + return s.refreshLocked(ctx, sess, site, c) +} + +func (c *core) load(site string) *cookieState { + c.mu.Lock() + defer c.mu.Unlock() + st, ok := c.cache[site] + if !ok || time.Now().After(st.expiresAt) { + return nil + } + return st +} + +func (s *Solver) refreshLocked(ctx context.Context, sess httpx.Session, site *config.Site, c *core) error { + if s.refreshOverride != nil { + return s.refreshOverride(ctx, sess, site, c) + } + start := time.Now() + cfg := s.Config() + siteKey := site.SiteKey + if siteKey == "" { + siteKey = cfg.SiteKey + } + token, err := s.solveToken(ctx, site, siteKey, c) + if err != nil { + s.record(site.Code, c.proxy, start, err) + return err + } + // Warm the page the way a browser would before posting the verdict. + if _, err := sess.Do(ctx, httpx.Request{ + Method: "GET", + URL: site.BaseURL + "/", + Header: map[string]string{ + "User-Agent": s.ua, + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", + "Accept-Language": site.Language, + "Referer": site.BaseURL + "/", + }, + Timeout: 30 * time.Second, + }); err != nil { + s.record(site.Code, c.proxy, start, err) + return &Error{Msg: "turnstile warm-up failed: " + err.Error(), Retryable: true} + } + if err := s.verifyToken(ctx, sess, site, token); err != nil { + s.record(site.Code, c.proxy, start, err) + return err + } + c.mu.Lock() + c.cache[site.Code] = &cookieState{ + cookies: sess.Cookies(), + expiresAt: time.Now().Add(time.Duration(cfg.CookieTTLSeconds) * time.Second), + } + c.mu.Unlock() + s.record(site.Code, c.proxy, start, nil) + return nil +} + +// solveToken obtains a Turnstile token through the configured provider. +// 1: api — POST the site to a hosted solver service. +// 2: browser — drive the local Chrome/Edge from [turnstile].browser_path. +// 3: manual — never solves; cookies only arrive via the console import box. +func (s *Solver) solveToken(ctx context.Context, site *config.Site, sitekey string, c *core) (string, error) { + cfg := s.Config() + switch cfg.ProviderValue() { + case config.ProviderAPI: + return s.solveTokenAPI(ctx, site.BaseURL, sitekey, c) + case config.ProviderBrowser: + return s.solveTokenBrowser(ctx, site, sitekey, c) + case config.ProviderManual: + return "", &Error{ + Msg: `turnstile provider is "manual" — import cookies in the web console (Turnstile page)`, + Retryable: false, + } + default: + return "", &Error{ + Msg: fmt.Sprintf("turnstile provider %q is invalid (api|browser|manual)", cfg.Provider), + Retryable: false, + } + } +} + +func (s *Solver) solveTokenAPI(ctx context.Context, baseURL, sitekey string, c *core) (string, error) { + cfg := s.Config() + payload, _ := json.Marshal(map[string]any{ + "url": baseURL, + "sitekey": sitekey, + "action": cfg.Action, + "cdata": "", + "timeoutSeconds": cfg.TimeoutSeconds, + }) + var last error + for attempt := 0; attempt < cfg.Retries; attempt++ { + req, err := http.NewRequestWithContext(ctx, http.MethodPost, cfg.APIURL, bytes.NewReader(payload)) + if err != nil { + return "", err + } + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Authorization", "Bearer "+cfg.APIKey) + resp, err := c.client.Do(req) + if err != nil { + last = &Error{Msg: "turnstile solver request failed: " + err.Error(), Retryable: true} + } else { + body, _ := io.ReadAll(resp.Body) + resp.Body.Close() + if resp.StatusCode >= 400 { + last = &Error{ + Msg: fmt.Sprintf("turnstile solver http %d: %s (check [turnstile].api_key / api_url)", + resp.StatusCode, trim(body)), + Retryable: retryableStatus(resp.StatusCode), + } + } else { + var out struct { + ErrorID int `json:"errorId"` + Status string `json:"status"` + Solution struct { + Token string `json:"token"` + } `json:"solution"` + Elapsed float64 `json:"elapsedTime"` + } + if err := json.Unmarshal(body, &out); err != nil { + last = &Error{Msg: "turnstile solver bad json: " + err.Error()} + } else if out.ErrorID != 0 || (out.Status != "" && out.Status != "ready") { + last = &Error{Msg: fmt.Sprintf("turnstile solver error: %s", trim(body))} + } else if out.Solution.Token == "" { + last = &Error{Msg: "turnstile solver returned no token"} + } else { + return out.Solution.Token, nil + } + } + } + if !Retryable(last) { + return "", last + } + select { + case <-ctx.Done(): + return "", ctx.Err() + case <-time.After(time.Duration(cfg.RetryBackoffSeconds*float64(attempt+1)) * time.Second): + } + } + return "", last +} + +// retryableStatus decides which solver HTTP statuses are worth another attempt. +// Solver-side rejections (bad key, exhausted quota, challenge rejected) return +// the same answer every time, so they are not retried. +func retryableStatus(code int) bool { + switch code { + case http.StatusRequestTimeout, http.StatusTooManyRequests, + http.StatusBadGateway, http.StatusServiceUnavailable, http.StatusGatewayTimeout: + return true + } + return false +} + +func (s *Solver) verifyToken(ctx context.Context, sess httpx.Session, site *config.Site, token string) error { + cfg := s.Config() + body := fmt.Sprintf("action=%s&token=%s", urlQueryEscape(site.VerifyAction), urlQueryEscape(token)) + headers := map[string]string{ + "User-Agent": s.ua, + "Accept": "application/json, text/javascript, */*; q=0.01", + "Accept-Language": site.Language, + "X-Requested-With": "XMLHttpRequest", + "Origin": site.BaseURL, + "Referer": site.BaseURL + "/", + "Content-Type": "application/x-www-form-urlencoded", + } + var last error + for attempt := 0; attempt < cfg.Retries; attempt++ { + resp, err := sess.Do(ctx, httpx.Request{ + Method: "POST", + URL: site.AJAXURL, + Header: headers, + Body: []byte(body), + Timeout: 30 * time.Second, + }) + if err == nil { + var data map[string]any + if jerr := json.Unmarshal(resp.Body, &data); jerr != nil { + last = &Error{Msg: "turnstile verify bad json: " + jerr.Error()} + } else if ok, _ := data["ok"].(bool); ok { + return nil + } else { + last = &Error{Msg: fmt.Sprintf("turnstile verify failed: %s", trim(resp.Body))} + } + } else { + last = &Error{Msg: "turnstile verify request failed: " + err.Error(), Retryable: true} + } + if !Retryable(last) { + return last + } + select { + case <-ctx.Done(): + return ctx.Err() + case <-time.After(time.Duration(cfg.RetryBackoffSeconds*float64(attempt+1)) * time.Second): + } + } + return last +} + +func (s *Solver) record(site, proxy string, start time.Time, err error) { + rec := Record{ + Site: site, + Proxy: proxy, + At: start, + ElapsedMs: time.Since(start).Milliseconds(), + OK: err == nil, + } + if err != nil { + rec.Error = err.Error() + } + s.mu.Lock() + s.history = append(s.history, rec) + if len(s.history) > 100 { + s.history = s.history[len(s.history)-100:] + } + s.mu.Unlock() +} + +// Status reports the cached cookie lifetime for every configured site. +func (s *Solver) Status(codes []string) []SiteStatus { + s.mu.Lock() + cores := make([]*core, 0, len(s.cores)) + for _, c := range s.cores { + cores = append(cores, c) + } + s.mu.Unlock() + + out := make([]SiteStatus, 0, len(codes)) + now := time.Now() + for _, code := range codes { + st := SiteStatus{Site: code} + for _, c := range cores { + c.mu.Lock() + cs := c.cache[code] + c.mu.Unlock() + if cs != nil { + st.Valid = now.Before(cs.expiresAt) + st.ExpiresAt = cs.expiresAt.Unix() + st.RemainingS = int64(cs.expiresAt.Sub(now).Seconds()) + st.CookieNum = len(cs.cookies) + break + } + } + out = append(out, st) + } + sortStatus(out) + return out +} + +func (s *Solver) History() []Record { + s.mu.Lock() + defer s.mu.Unlock() + out := make([]Record, len(s.history)) + copy(out, s.history) + return out +} + +func sortStatus(s []SiteStatus) { + for i := 1; i < len(s); i++ { + for j := i; j > 0 && s[j].Site < s[j-1].Site; j-- { + s[j], s[j-1] = s[j-1], s[j] + } + } +} + +func urlQueryEscape(s string) string { + var b bytes.Buffer + for i := 0; i < len(s); i++ { + c := s[i] + switch { + case c >= 'a' && c <= 'z', c >= 'A' && c <= 'Z', c >= '0' && c <= '9', + c == '-', c == '_', c == '.', c == '~': + b.WriteByte(c) + default: + fmt.Fprintf(&b, "%%%02X", c) + } + } + return b.String() +} + +func trim(b []byte) string { + const max = 300 + s := string(b) + if len(s) > max { + return s[:max] + "..." + } + return s +} diff --git a/internal/turnstile/solver_test.go b/internal/turnstile/solver_test.go new file mode 100644 index 0000000..50b3b21 --- /dev/null +++ b/internal/turnstile/solver_test.go @@ -0,0 +1,194 @@ +package turnstile + +import ( + "context" + "io" + "reflect" + "strings" + "sync" + "sync/atomic" + "testing" + "time" + + "github.com/nyoungo/dsfree2api/internal/config" + "github.com/nyoungo/dsfree2api/internal/httpx" +) + +const examplePath = "../../config.example.toml" + +type fakeSession struct { + mu sync.Mutex + cookies map[string]string +} + +func (f *fakeSession) Do(context.Context, httpx.Request) (*httpx.Response, error) { + return &httpx.Response{Status: 200}, nil +} +func (f *fakeSession) Stream(context.Context, httpx.Request) (io.ReadCloser, int, error) { + return io.NopCloser(strings.NewReader("")), 200, nil +} +func (f *fakeSession) Cookies() map[string]string { + f.mu.Lock() + defer f.mu.Unlock() + out := map[string]string{} + for k, v := range f.cookies { + out[k] = v + } + return out +} +func (f *fakeSession) SetCookies(m map[string]string) { + f.mu.Lock() + defer f.mu.Unlock() + if f.cookies == nil { + f.cookies = map[string]string{} + } + for k, v := range m { + f.cookies[k] = v + } +} +func (f *fakeSession) Close() {} + +func TestApplyValidCookiesCoalescesConcurrentRefreshes(t *testing.T) { + cfg, err := config.Load(examplePath) + if err != nil { + t.Fatalf("load config: %v", err) + } + site := cfg.Sites["de"] + cfg.Turnstile.Enabled = true + solver := New(cfg.Turnstile, httpx.DefaultUserAgent) + + var calls int32 + solver.refreshOverride = func(_ context.Context, sess httpx.Session, s *config.Site, c *core) error { + atomic.AddInt32(&calls, 1) + time.Sleep(20 * time.Millisecond) + state := map[string]string{"dsts": "ok"} + sess.SetCookies(state) + c.mu.Lock() + c.cache[s.Code] = &cookieState{cookies: state, expiresAt: time.Now().Add(time.Hour)} + c.mu.Unlock() + return nil + } + + const n = 5 + sessions := make([]*fakeSession, n) + var wg sync.WaitGroup + errs := make([]error, n) + for i := 0; i < n; i++ { + sessions[i] = &fakeSession{} + wg.Add(1) + go func(i int) { + defer wg.Done() + errs[i] = solver.ApplyValidCookies(context.Background(), sessions[i], site, "") + }(i) + } + wg.Wait() + + if got := atomic.LoadInt32(&calls); got != 1 { + t.Errorf("refresh calls = %d, want 1", got) + } + for i, sess := range sessions { + if sess.Cookies()["dsts"] != "ok" { + t.Errorf("session %d missing dsts cookie: %v", i, sess.Cookies()) + } + if errs[i] != nil { + t.Errorf("session %d error: %v", i, errs[i]) + } + } +} + +func TestImportCookiesWorkWithSolverDisabled(t *testing.T) { + cfg, err := config.Load(examplePath) + if err != nil { + t.Fatalf("load config: %v", err) + } + if cfg.Turnstile.Enabled { + t.Fatal("example config should be disabled — this test depends on it") + } + solver := New(cfg.Turnstile, httpx.DefaultUserAgent) + + exp, n, err := solver.ImportCookies("de", "cf_clearance=abc123; deepseek_ts=xyz; Path=/; Secure", "") + if err != nil { + t.Fatalf("import: %v", err) + } + if n != 2 { + t.Errorf("imported %d cookies, want 2", n) + } + if exp.IsZero() || !time.Now().Before(exp) { + t.Errorf("expiry = %v, want in the future", exp) + } + + site := cfg.Sites["de"] + sess := &fakeSession{} + if err := solver.ApplyValidCookies(context.Background(), sess, site, ""); err != nil { + t.Fatalf("apply: %v", err) + } + if got := sess.Cookies()["deepseek_ts"]; got != "xyz" { + t.Errorf("deepseek_ts = %q, want xyz (imported cookies must apply while disabled)", got) + } + if _, ok := sess.Cookies()["cf_clearance"]; !ok { + t.Error("cf_clearance not applied") + } + + st := solver.Status([]string{"de"}) + if len(st) != 1 || !st[0].Valid { + t.Fatalf("status = %+v, want one valid entry", st) + } + if st[0].CookieNum != 2 { + t.Errorf("cookie_count = %d, want 2", st[0].CookieNum) + } + if len(solver.History()) != 0 { + t.Error("import must not show up as a solved record") + } +} + +func TestParseCookiePairs(t *testing.T) { + got := ParseCookiePairs("a=1; b=2=3\nPath=/\nExpires=Wed, 21 Oct 2015 07:28:00 GMT; \"c\"=4") + want := map[string]string{"a": "1", "b": "2=3", "c": "4"} + if !reflect.DeepEqual(got, want) { + t.Errorf("parsed = %v, want %v", got, want) + } + if len(ParseCookiePairs(" ;;; \n")) != 0 { + t.Error("empty input should parse to nothing") + } +} + +func TestStatusReportsEveryRequestedSite(t *testing.T) { + cfg, err := config.Load(examplePath) + if err != nil { + t.Fatalf("load config: %v", err) + } + solver := New(cfg.Turnstile, httpx.DefaultUserAgent) + st := solver.Status([]string{"de", "es", "fr"}) + if len(st) != 3 { + t.Fatalf("len(status) = %d", len(st)) + } + for _, s := range st { + if s.Valid { + t.Errorf("site %s should not be valid before any solve", s.Site) + } + if s.CookieNum != 0 { + t.Errorf("site %s cookie_count = %d", s.Site, s.CookieNum) + } + } +} + +func TestHistoryIsCappedAndRecorded(t *testing.T) { + cfg, err := config.Load(examplePath) + if err != nil { + t.Fatalf("load config: %v", err) + } + solver := New(cfg.Turnstile, httpx.DefaultUserAgent) + for i := 0; i < 250; i++ { + solver.record("de", "direct", time.Now().Add(-time.Second), nil) + } + h := solver.History() + if len(h) == 0 { + t.Fatal("history is empty") + } + if len(h) > 100 { + t.Errorf("history len = %d, want <= 100", len(h)) + } + if !h[len(h)-1].OK { + t.Error("last record should be OK") + } +} diff --git a/internal/upstream/client.go b/internal/upstream/client.go new file mode 100644 index 0000000..3bc0fe8 --- /dev/null +++ b/internal/upstream/client.go @@ -0,0 +1,868 @@ +package upstream + +import ( + "context" + "crypto/rand" + "encoding/hex" + "encoding/json" + "fmt" + "html" + "log/slog" + "regexp" + "strings" + "sync" + "time" + + "github.com/nyoungo/dsfree2api/internal/config" + "github.com/nyoungo/dsfree2api/internal/httpx" + "github.com/nyoungo/dsfree2api/internal/turnstile" +) + +type Route struct { + Name string + Proxy string // "" means direct +} + +func (r Route) Key() string { + if r.Proxy == "" { + return "direct" + } + return r.Proxy +} + +type chatConfig struct { + BotID int + PostID int + Nonce string + AJAXURL string + FetchedAt time.Time +} + +type Client struct { + cfg *config.Config + ts *turnstile.Solver + log *slog.Logger + + stateMu sync.Mutex + chatCfg map[string]chatConfig + cfgLocks map[string]*sync.Mutex + gates map[string]chan struct{} + + // chatOnceOverride is a test seam; nil in production. + chatOnceOverride func(ctx context.Context, site config.Site, modelID string, model config.Model, + prompt string, route Route, info *ServeInfo, yield func(Event) error) error +} + +func New(cfg *config.Config, ts *turnstile.Solver, log *slog.Logger) *Client { + if log == nil { + log = slog.Default() + } + return &Client{ + cfg: cfg, + ts: ts, + log: log, + chatCfg: map[string]chatConfig{}, + cfgLocks: map[string]*sync.Mutex{}, + gates: map[string]chan struct{}{}, + } +} + +// Routes returns the primary proxy followed by the fallbacks, deduplicated. +func (c *Client) Routes() []Route { + c.cfg.RLock() + primary := strings.TrimSpace(c.cfg.Proxy.URL) + fallbacks := append([]string(nil), c.cfg.Proxy.FallbackURLs...) + c.cfg.RUnlock() + + type cand struct { + name string + proxy string + } + list := []cand{{"primary", primary}} + for i, u := range fallbacks { + list = append(list, cand{fmt.Sprintf("fallback-%d", i+1), strings.TrimSpace(u)}) + } + seen := map[string]bool{} + out := make([]Route, 0, len(list)) + for _, it := range list { + key := it.proxy + if key == "" { + key = "direct" + } + if seen[key] { + continue + } + seen[key] = true + out = append(out, Route{Name: it.name, Proxy: it.proxy}) + } + return out +} + +// Chat streams the prompt through the upstream site, honouring route +// failover, slow-start detection, session refresh and cross-site failover. +func (c *Client) Chat(ctx context.Context, modelID string, prompt string, info *ServeInfo, yield func(Event) error) error { + model, ok := c.modelCopy(modelID) + if !ok { + return errf("unknown model %s", modelID) + } + if !model.Enabled { + return errf("model %s is disabled", modelID) + } + + candidates := []string{modelID} + if c.cfg.Upstream.CrossSiteFailover { + for _, alt := range c.alternates(modelID, model) { + candidates = append(candidates, alt) + } + } + + var last error + for i, id := range candidates { + m := model + if i > 0 { + mc, ok := c.modelCopy(id) + if !ok || !mc.Enabled { + continue + } + m = mc + c.log.Warn("cross-site failover", "from", modelID, "to", id) + } + err := c.chatWithRetries(ctx, id, m, prompt, info, yield) + if err == nil { + return nil + } + last = err + if contentStarted(err) || !isQuota(err) { + return AsUpstream(err) + } + } + return AsUpstream(last) +} + +// alternates lists other enabled sites hosting the same upstream model. +func (c *Client) alternates(modelID string, m config.Model) []string { + c.cfg.RLock() + defer c.cfg.RUnlock() + var out []string + for id, other := range c.cfg.Models { + if id == modelID || other.Site == m.Site { + continue + } + if other.UpstreamID != m.UpstreamID || !other.Enabled { + continue + } + if s, ok := c.cfg.Sites[other.Site]; !ok || !s.Enabled { + continue + } + out = append(out, id) + } + return out +} + +func (c *Client) modelCopy(id string) (config.Model, bool) { + c.cfg.RLock() + defer c.cfg.RUnlock() + m, ok := c.cfg.Models[id] + if !ok { + return config.Model{}, false + } + return *m, true +} + +func (c *Client) siteCopy(code string) (config.Site, bool) { + c.cfg.RLock() + defer c.cfg.RUnlock() + s, ok := c.cfg.Sites[code] + if !ok { + return config.Site{}, false + } + return *s, true +} + +func (c *Client) userAgent() string { + c.cfg.RLock() + defer c.cfg.RUnlock() + return c.cfg.Upstream.UserAgent +} + +func (c *Client) chatWithRetries(ctx context.Context, modelID string, model config.Model, prompt string, info *ServeInfo, yield func(Event) error) error { + site, ok := c.siteCopy(model.Site) + if !ok { + return errf("unknown site %s", model.Site) + } + if !site.Enabled { + return errf("site %s is disabled", model.Site) + } + routes := c.Routes() + + var lastErr error + for attempt := 0; ; attempt++ { + var failed []Route + for i, route := range routes { + allowSlow := i == 0 && len(routes) > 1 + err := c.chatOnceSlowStart(ctx, site, modelID, model, prompt, route, allowSlow, info, yield) + if err == nil { + return nil + } + lastErr = err + if contentStarted(err) { + return AsUpstream(err) + } + // A solver-side rejection (bad key, rejected challenge) will fail + // identically on every attempt — stop instead of burning retries. + if !turnstile.Retryable(err) { + return AsUpstream(err) + } + // The site demands Turnstile verification while the solver is + // switched off: refreshing cookies cannot help, say why instead. + if isSession(err) && (c.ts == nil || !c.ts.Enabled()) { + return &UpstreamError{ + Msg: "site requires Turnstile verification — import cookies on the console " + + "Turnstile page, or enable [turnstile] to solve automatically", + Cause: err, + } + } + if isConfigProblem(err) { + return AsUpstream(err) + } + failed = append(failed, route) + c.log.Warn("upstream error", + "model", modelID, "attempt", attempt+1, "route", route.Name, "error", err) + if i < len(routes)-1 { + continue + } + break + } + + c.cfg.RLock() + autoRefresh := c.cfg.Upstream.AutoRefresh + backoff := c.cfg.Upstream.RetryBackoffSeconds + retries := c.cfg.Upstream.RefreshRetries + c.cfg.RUnlock() + if !autoRefresh || attempt >= retries { + break + } + if len(failed) > 0 { + wait := time.Duration(float64(attempt+1) * backoff * float64(time.Second)) + select { + case <-ctx.Done(): + return AsUpstream(ctx.Err()) + case <-time.After(wait): + } + forceCookie := isQuota(lastErr) || isSession(lastErr) + for _, route := range failed { + if err := c.refreshSession(ctx, site, modelID, route, forceCookie); err != nil { + c.log.Warn("session refresh failed", "model", modelID, "error", err) + } + } + } + } + return AsUpstream(lastErr) +} + +// chatOnceSlowStart bounds the time the primary route may take to produce its +// first upstream event before a fallback route is tried instead. Errors that +// happen after the first event are marked ContentStarted so callers never +// restart a response the client already partially received. +func (c *Client) chatOnceSlowStart( + ctx context.Context, + site config.Site, + modelID string, + model config.Model, + prompt string, + route Route, + allowSlow bool, + info *ServeInfo, + yield func(Event) error, +) error { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + + events := make(chan Event, 16) + errCh := make(chan error, 1) + gotFirst := false + + go func() { + fn := c.chatOnce + if c.chatOnceOverride != nil { + fn = c.chatOnceOverride + } + err := fn(ctx, site, modelID, model, prompt, route, info, func(ev Event) error { + select { + case events <- ev: + return nil + case <-ctx.Done(): + return ctx.Err() + } + }) + close(events) + errCh <- err + }() + + mark := func(err error) error { + if err == nil || !gotFirst { + return err + } + ue := AsUpstream(err) + ue.ContentStarted = true + return ue + } + take := func(ev Event) error { + gotFirst = true + if err := yield(ev); err != nil { + return mark(err) + } + return nil + } + + if allowSlow { + var slow float64 + c.cfg.RLock() + slow = c.cfg.Proxy.SlowStartSeconds + c.cfg.RUnlock() + if slow > 0 { + timer := time.NewTimer(time.Duration(slow * float64(time.Second))) + defer timer.Stop() + select { + case ev, ok := <-events: + if !ok { + return mark(<-errCh) + } + if err := take(ev); err != nil { + return err + } + case err := <-errCh: + for ev := range events { + if e := take(ev); e != nil { + return e + } + } + return mark(err) + case <-timer.C: + cancel() + <-errCh + return errf("primary route produced no upstream event within %gs", slow) + } + } + } + + for { + ev, ok := <-events + if !ok { + return mark(<-errCh) + } + if err := take(ev); err != nil { + return err + } + } +} + +func (c *Client) chatOnce( + ctx context.Context, + site config.Site, + modelID string, + model config.Model, + prompt string, + route Route, + info *ServeInfo, + yield func(Event) error, +) error { + if err := c.acquire(ctx, site.Code); err != nil { + return AsUpstream(err) + } + defer c.release(site.Code) + + if info != nil { + info.Set(modelID, site.Code, route.Name) + } + + c.cfg.RLock() + streamTimeout := time.Duration(c.cfg.Upstream.StreamTimeout * float64(time.Second)) + timeout := time.Duration(c.cfg.Upstream.Timeout * float64(time.Second)) + ua := c.cfg.Upstream.UserAgent + c.cfg.RUnlock() + + sess, err := httpx.NewSession(httpx.Options{ProxyURL: route.Proxy, Timeout: streamTimeout}) + if err != nil { + return errf("create session: %v", err) + } + defer sess.Close() + + if err := c.ts.ApplyValidCookies(ctx, sess, &site, route.Proxy); err != nil { + return AsUpstream(err) + } + + cc, err := c.chatConfig(ctx, sess, site, modelID, model, route, ua) + if err != nil { + return err + } + + referer := site.BaseURL + model.PagePath + sessionID := newUUID() + convUUID := newUUID() + clientMsgID := fmt.Sprintf("aipkit-client-msg-%d-%d-%s", cc.BotID, time.Now().UnixMilli(), randHex(3)) + + resp, err := sess.Do(ctx, httpx.Request{ + Method: "POST", + URL: cc.AJAXURL, + Header: ajaxHeaders(site, referer, ua), + Body: []byte(encodeForm(map[string]string{ + "action": "aipkit_cache_sse_message", + "message": prompt, + "_ajax_nonce": cc.Nonce, + "bot_id": itoa(cc.BotID), + "session_id": sessionID, + "conversation_uuid": convUUID, + "user_client_message_id": clientMsgID, + })), + Timeout: timeout, + }) + if err != nil { + return errf("cache message request failed: %v", err) + } + if resp.Status >= 400 { + if resp.Status == 403 || resp.Status == 401 { + return newSession(fmt.Sprintf("cache message http %d", resp.Status)) + } + return errf("cache message http %d: %s", resp.Status, truncate(string(resp.Body), 400)) + } + + var init struct { + Success bool `json:"success"` + Data json.RawMessage `json:"data"` + } + if err := json.Unmarshal(resp.Body, &init); err != nil { + return errf("cache message bad json: %v", err) + } + if !init.Success { + if code := extractCode(init.Data); code != "" && strings.Contains(strings.ToLower(code), "nonce") { + c.dropChatCfg(modelID, route) + } + payload := map[string]any{} + _ = json.Unmarshal(resp.Body, &payload) + if isSessionPayload(payload) { + return newSession("cache message session failed: " + truncate(string(resp.Body), 400)) + } + return errf("cache message failed: %s", truncate(string(resp.Body), 400)) + } + var dataObj struct { + CacheKey string `json:"cache_key"` + } + if err := json.Unmarshal(init.Data, &dataObj); err != nil || dataObj.CacheKey == "" { + return errf("cache message missing cache_key: %s", truncate(string(resp.Body), 400)) + } + + params := encodeForm(map[string]string{ + "action": "aipkit_frontend_chat_stream", + "cache_key": dataObj.CacheKey, + "bot_id": itoa(cc.BotID), + "session_id": sessionID, + "conversation_uuid": convUUID, + "post_id": itoa(cc.PostID), + "_ts": itoa64(time.Now().UnixMilli()), + "_ajax_nonce": cc.Nonce, + }) + + streamCtx, streamCancel := context.WithTimeout(ctx, streamTimeout) + defer streamCancel() + + headers := ajaxHeaders(site, referer, ua) + headers["Accept"] = "text/event-stream" + + rc, _, err := sess.Stream(streamCtx, httpx.Request{ + Method: "GET", + URL: cc.AJAXURL + "?" + params, + Header: headers, + }) + if err != nil { + if streamCtx.Err() != nil && ctx.Err() == nil { + return errf("upstream stream timeout: %v", err) + } + return AsUpstream(err) + } + defer rc.Close() + + return readSSE(rc, func(event string, lines []string) error { + events, err := translateEvent(event, lines) + if err != nil { + return err + } + for _, ev := range events { + if err := yield(ev); err != nil { + return err + } + } + return nil + }) +} + +// chatConfig fetches (and caches) the page-embedded nonce for a model. +func (c *Client) chatConfig( + ctx context.Context, + sess httpx.Session, + site config.Site, + modelID string, + model config.Model, + route Route, + ua string, +) (chatConfig, error) { + key := modelID + "|" + route.Key() + if v, ok := c.loadChatCfg(key); ok { + return v, nil + } + lock := c.lockFor(key) + lock.Lock() + defer lock.Unlock() + if v, ok := c.loadChatCfg(key); ok { + return v, nil + } + + pageURL := site.BaseURL + model.PagePath + resp, err := sess.Do(ctx, httpx.Request{ + Method: "GET", + URL: pageURL, + Header: browserHeaders(site, ua), + Timeout: 60 * time.Second, + }) + if err != nil { + return chatConfig{}, errf("chat config fetch failed: %v", err) + } + if resp.Status >= 400 { + return chatConfig{}, errf("chat config http %d", resp.Status) + } + + parsed, found := parseChatConfig(string(resp.Body), site, model) + if !found { + if model.BotID <= 0 || model.PostID <= 0 { + return chatConfig{}, errf("no chat data-config found for %s", modelID) + } + nonce, err := c.fetchNonce(ctx, sess, site, model, ua) + if err != nil { + return chatConfig{}, err + } + parsed = chatConfig{ + BotID: model.BotID, PostID: model.PostID, Nonce: nonce, + AJAXURL: site.AJAXURL, FetchedAt: time.Now(), + } + } + parsed.FetchedAt = time.Now() + c.storeChatCfg(key, parsed) + c.log.Info("loaded chat config", "model", modelID, "route", route.Name, + "bot_id", parsed.BotID, "post_id", parsed.PostID) + return parsed, nil +} + +var containerRe = regexp.MustCompile(`id="aipkit_chat_container_(\d+)"[^>]*data-config='([^']+)'`) + +func parseChatConfig(page string, site config.Site, model config.Model) (chatConfig, bool) { + for _, m := range containerRe.FindAllStringSubmatch(page, -1) { + botID := atoi(m[1]) + raw := html.UnescapeString(m[2]) + var cfg struct { + BotID any `json:"botId"` + PostID any `json:"postId"` + Nonce string `json:"nonce"` + AjaxURL string `json:"ajaxUrl"` + } + if err := json.Unmarshal([]byte(raw), &cfg); err != nil { + continue + } + if model.BotID > 0 && botID != model.BotID { + continue + } + out := chatConfig{ + BotID: toInt(cfg.BotID, botID), + PostID: toInt(cfg.PostID, model.PostID), + Nonce: cfg.Nonce, + AJAXURL: cfg.AjaxURL, + FetchedAt: time.Now(), + } + if out.AJAXURL == "" { + out.AJAXURL = site.AJAXURL + } + if out.Nonce != "" { + return out, true + } + } + return chatConfig{}, false +} + +func (c *Client) fetchNonce(ctx context.Context, sess httpx.Session, site config.Site, model config.Model, ua string) (string, error) { + resp, err := sess.Do(ctx, httpx.Request{ + Method: "POST", + URL: site.AJAXURL, + Header: ajaxHeaders(site, site.BaseURL+model.PagePath, ua), + Body: []byte(encodeForm(map[string]string{"action": "aipkit_get_frontend_chat_nonce", "bot_id": itoa(model.BotID)})), + Timeout: 30 * time.Second, + }) + if err != nil { + return "", errf("nonce fetch failed: %v", err) + } + var out struct { + Success bool `json:"success"` + Data struct { + Nonce string `json:"nonce"` + } `json:"data"` + } + if err := json.Unmarshal(resp.Body, &out); err != nil || !out.Success || out.Data.Nonce == "" { + return "", errf("nonce fetch failed for %s: %s", model.ID, truncate(string(resp.Body), 400)) + } + return out.Data.Nonce, nil +} + +// refreshSession drops cached state for a route and optionally re-solves Turnstile. +func (c *Client) refreshSession( + ctx context.Context, + site config.Site, + modelID string, + route Route, + invalidateCookies bool, +) error { + c.dropChatCfg(modelID, route) + if !invalidateCookies { + return nil + } + c.log.Info("invalidate verified cookie cache", "site", site.Code, "route", route.Name) + c.ts.Invalidate(site.Code) + + sess, err := httpx.NewSession(httpx.Options{ProxyURL: route.Proxy, Timeout: 60 * time.Second}) + if err != nil { + return err + } + defer sess.Close() + return c.ts.Refresh(ctx, sess, &site, route.Proxy) +} + +// InvalidateAll clears cached nonces and cookies (web console action). +func (c *Client) InvalidateAll() { + c.stateMu.Lock() + c.chatCfg = map[string]chatConfig{} + c.stateMu.Unlock() + c.cfg.RLock() + codes := make([]string, 0, len(c.cfg.Sites)) + for code := range c.cfg.Sites { + codes = append(codes, code) + } + c.cfg.RUnlock() + for _, code := range codes { + c.ts.Invalidate(code) + } +} + +func (c *Client) ConfigCacheSize() int { + c.stateMu.Lock() + defer c.stateMu.Unlock() + return len(c.chatCfg) +} + +// ── cache helpers ──────────────────────────────────────────────── + +func (c *Client) loadChatCfg(key string) (chatConfig, bool) { + c.stateMu.Lock() + defer c.stateMu.Unlock() + v, ok := c.chatCfg[key] + if !ok { + return chatConfig{}, false + } + c.cfg.RLock() + ttl := time.Duration(c.cfg.Upstream.ConfigTTLSeconds) * time.Second + c.cfg.RUnlock() + if ttl <= 0 || time.Since(v.FetchedAt) > ttl { + return chatConfig{}, false + } + return v, true +} + +func (c *Client) storeChatCfg(key string, v chatConfig) { + c.stateMu.Lock() + defer c.stateMu.Unlock() + c.chatCfg[key] = v +} + +func (c *Client) dropChatCfg(modelID string, route Route) { + suffix := "|" + route.Key() + c.stateMu.Lock() + defer c.stateMu.Unlock() + for k := range c.chatCfg { + if strings.HasSuffix(k, suffix) && strings.TrimSuffix(k, suffix) == modelID { + delete(c.chatCfg, k) + } + } +} + +func (c *Client) lockFor(key string) *sync.Mutex { + c.stateMu.Lock() + defer c.stateMu.Unlock() + l, ok := c.cfgLocks[key] + if !ok { + l = &sync.Mutex{} + c.cfgLocks[key] = l + } + return l +} + +// ── concurrency gate ──────────────────────────────────────────── + +func (c *Client) acquire(ctx context.Context, site string) error { + c.cfg.RLock() + max := c.cfg.Limits.MaxConcurrentPerSite + c.cfg.RUnlock() + if max <= 0 { + return nil + } + c.stateMu.Lock() + g, ok := c.gates[site] + if !ok { + g = make(chan struct{}, max) + c.gates[site] = g + } + c.stateMu.Unlock() + select { + case g <- struct{}{}: + return nil + case <-ctx.Done(): + return fmt.Errorf("site %s busy: %w", site, ctx.Err()) + } +} + +func (c *Client) release(site string) { + c.stateMu.Lock() + g, ok := c.gates[site] + c.stateMu.Unlock() + if !ok { + return + } + select { + case <-g: + default: + } +} + +// ── helpers ───────────────────────────────────────────────────── + +func browserHeaders(site config.Site, ua string) map[string]string { + if ua == "" { + ua = httpx.DefaultUserAgent + } + return map[string]string{ + "User-Agent": ua, + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", + "Accept-Language": site.Language, + "Origin": site.BaseURL, + "Referer": site.BaseURL + "/", + } +} + +func ajaxHeaders(site config.Site, referer, ua string) map[string]string { + if ua == "" { + ua = httpx.DefaultUserAgent + } + return map[string]string{ + "User-Agent": ua, + "Accept": "application/json, text/javascript, */*; q=0.01", + "Accept-Language": site.Language, + "X-Requested-With": "XMLHttpRequest", + "Origin": site.BaseURL, + "Referer": referer, + } +} + +func encodeForm(v map[string]string) string { + keys := make([]string, 0, len(v)) + for k := range v { + keys = append(keys, k) + } + sortStrings(keys) + var b strings.Builder + for i, k := range keys { + if i > 0 { + b.WriteByte('&') + } + b.WriteString(urlEncode(k)) + b.WriteByte('=') + b.WriteString(urlEncode(v[k])) + } + return b.String() +} + +func urlEncode(s string) string { + var b strings.Builder + for i := 0; i < len(s); i++ { + ch := s[i] + switch { + case ch >= 'a' && ch <= 'z', ch >= 'A' && ch <= 'Z', ch >= '0' && ch <= '9', + ch == '-', ch == '_', ch == '.', ch == '~': + b.WriteByte(ch) + case ch == ' ': + b.WriteByte('+') + default: + fmt.Fprintf(&b, "%%%02X", ch) + } + } + return b.String() +} + +func sortStrings(s []string) { + for i := 1; i < len(s); i++ { + for j := i; j > 0 && s[j] < s[j-1]; j-- { + s[j], s[j-1] = s[j-1], s[j] + } + } +} + +func newUUID() string { return randHex(16) } + +func randHex(n int) string { + b := make([]byte, n) + if _, err := rand.Read(b); err != nil { + return strings.Repeat("0", n*2) + } + return hex.EncodeToString(b) +} + +func itoa(v int) string { return fmt.Sprintf("%d", v) } +func itoa64(v int64) string { return fmt.Sprintf("%d", v) } + +func truncate(s string, n int) string { + if len(s) <= n { + return s + } + return s[:n] + "..." +} + +func atoi(s string) int { + n := 0 + for _, ch := range s { + if ch < '0' || ch > '9' { + return n + } + n = n*10 + int(ch-'0') + } + return n +} + +func extractCode(data json.RawMessage) string { + var obj struct { + Code string `json:"code"` + } + if err := json.Unmarshal(data, &obj); err == nil { + return obj.Code + } + return "" +} + +func toInt(v any, def int) int { + switch t := v.(type) { + case float64: + return int(t) + case int: + return t + case string: + return atoi(t) + case json.Number: + if n, err := t.Int64(); err == nil { + return int(n) + } + } + return def +} diff --git a/internal/upstream/client_test.go b/internal/upstream/client_test.go new file mode 100644 index 0000000..e1f7d88 --- /dev/null +++ b/internal/upstream/client_test.go @@ -0,0 +1,270 @@ +package upstream + +import ( + "context" + "encoding/json" + "errors" + "reflect" + "strings" + "testing" + "time" + + "github.com/nyoungo/dsfree2api/internal/config" +) + +const examplePath = "../../config.example.toml" + +func testConfig(t *testing.T) *config.Config { + t.Helper() + cfg, err := config.Load(examplePath) + if err != nil { + t.Fatalf("load config: %v", err) + } + cfg.Upstream.AutoRefresh = false + cfg.Upstream.RefreshRetries = 0 + return cfg +} + +func TestRoutesKeepPrimaryFirstAndDedupe(t *testing.T) { + cfg := testConfig(t) + cfg.Proxy.URL = "" + cfg.Proxy.FallbackURLs = []string{"socks5://fallback:1", "socks5://fallback:1"} + + c := New(cfg, nil, nil) + got := c.Routes() + want := []Route{{Name: "primary", Proxy: ""}, {Name: "fallback-1", Proxy: "socks5://fallback:1"}} + if !reflect.DeepEqual(got, want) { + t.Fatalf("routes = %+v, want %+v", got, want) + } +} + +func TestSlowPrimarySwitchesToFallbackBeforeContent(t *testing.T) { + cfg := testConfig(t) + cfg.Proxy.URL = "" + cfg.Proxy.FallbackURLs = []string{"socks5://fallback:1"} + cfg.Proxy.SlowStartSeconds = 0.02 + + var calls []string + c := New(cfg, nil, nil) + c.chatOnceOverride = func(ctx context.Context, site config.Site, modelID string, model config.Model, + prompt string, route Route, info *ServeInfo, yield func(Event) error) error { + calls = append(calls, route.Name) + if route.Name == "primary" { + select { + case <-time.After(5 * time.Second): + case <-ctx.Done(): + return ctx.Err() + } + yield(Event{Kind: KindDelta, Value: "primary"}) + return nil + } + yield(Event{Kind: KindDelta, Value: "fallback"}) + return nil + } + + var got []string + if err := c.Chat(context.Background(), "deepseek-v4-flash-de", "hello", &ServeInfo{}, + func(ev Event) error { + got = append(got, ev.Value) + return nil + }); err != nil { + t.Fatalf("chat: %v", err) + } + if want := []string{"primary", "fallback-1"}; !reflect.DeepEqual(calls, want) { + t.Errorf("calls = %v, want %v", calls, want) + } + if want := []string{"fallback"}; !reflect.DeepEqual(got, want) { + t.Errorf("events = %v, want %v", got, want) + } +} + +func TestPrimaryErrorSwitchesToFallbackBeforeContent(t *testing.T) { + cfg := testConfig(t) + cfg.Proxy.URL = "" + cfg.Proxy.FallbackURLs = []string{"socks5://fallback:1"} + + var calls []string + c := New(cfg, nil, nil) + c.chatOnceOverride = func(ctx context.Context, site config.Site, modelID string, model config.Model, + prompt string, route Route, info *ServeInfo, yield func(Event) error) error { + calls = append(calls, route.Name) + if route.Name == "primary" { + return errors.New("primary failed") + } + yield(Event{Kind: KindDelta, Value: "fallback"}) + return nil + } + + var got []string + if err := c.Chat(context.Background(), "deepseek-v4-flash-de", "hello", &ServeInfo{}, + func(ev Event) error { + got = append(got, ev.Value) + return nil + }); err != nil { + t.Fatalf("chat: %v", err) + } + if want := []string{"primary", "fallback-1"}; !reflect.DeepEqual(calls, want) { + t.Errorf("calls = %v, want %v", calls, want) + } + if want := []string{"fallback"}; !reflect.DeepEqual(got, want) { + t.Errorf("events = %v, want %v", got, want) + } +} + +func TestNoFallbackAfterContentStarted(t *testing.T) { + cfg := testConfig(t) + cfg.Proxy.URL = "" + cfg.Proxy.FallbackURLs = []string{"socks5://fallback:1"} + + var calls []string + c := New(cfg, nil, nil) + c.chatOnceOverride = func(ctx context.Context, site config.Site, modelID string, model config.Model, + prompt string, route Route, info *ServeInfo, yield func(Event) error) error { + calls = append(calls, route.Name) + yield(Event{Kind: KindDelta, Value: "partial"}) + return errors.New("stream failed") + } + + err := c.Chat(context.Background(), "deepseek-v4-flash-de", "hello", &ServeInfo{}, + func(Event) error { return nil }) + if err == nil { + t.Fatal("expected an error") + } + var ue *UpstreamError + if !errors.As(err, &ue) { + t.Fatalf("error type = %T, want *UpstreamError", err) + } + if !ue.ContentStarted { + t.Error("expected ContentStarted to be set") + } + if want := []string{"primary"}; !reflect.DeepEqual(calls, want) { + t.Errorf("calls = %v, want %v", calls, want) + } +} + +func TestQuotaNoticeTriggersQuotaError(t *testing.T) { + payload := map[string]any{ + "error": "Dein heutiges Guthaben von 10.000 Token (V4-Pro) ist aufgebraucht.", + "quota_notice": map[string]any{ + "type": "quota_notice", + "message": "Dein heutiges Guthaben von 10.000 Token (V4-Pro) ist aufgebraucht.", + }, + } + raw, _ := json.Marshal(payload) + _, err := translateEvent("error", []string{string(raw)}) + if err == nil { + t.Fatal("expected error") + } + if !isQuota(err) { + t.Fatalf("want QuotaExhaustedError, got %T: %v", err, err) + } + if isSession(err) { + t.Error("quota error must not be a session error") + } +} + +func TestSessionErrorTriggersSessionError(t *testing.T) { + raw, _ := json.Marshal(map[string]any{"error": "deepseek_ts_required"}) + _, err := translateEvent("error", []string{string(raw)}) + if err == nil { + t.Fatal("expected error") + } + if !isSession(err) { + t.Fatalf("want SessionVerificationError, got %T: %v", err, err) + } + if isQuota(err) { + t.Error("session error must not be a quota error") + } +} + +func TestPlainSSEErrorDoesNotForceRefreshPath(t *testing.T) { + raw, _ := json.Marshal(map[string]any{"error": "temporary upstream failure"}) + _, err := translateEvent("error", []string{string(raw)}) + if err == nil { + t.Fatal("expected error") + } + if isQuota(err) || isSession(err) { + t.Fatalf("plain error must not be quota/session, got %T", err) + } +} + +func TestGermanTsRequiredPayloadIsSessionError(t *testing.T) { + raw, _ := json.Marshal(map[string]any{ + "error": "Sicherheitspruefung erforderlich.", + "ts_required": true, + }) + _, err := translateEvent("error", []string{string(raw)}) + if err == nil { + t.Fatal("expected error") + } + if !isSession(err) { + t.Fatalf("want SessionVerificationError, got %T: %v", err, err) + } +} + +func TestTurnstileRequiredWhileDisabledFailsFast(t *testing.T) { + cfg := testConfig(t) + cfg.Proxy.URL = "" + cfg.Upstream.AutoRefresh = true + cfg.Upstream.RefreshRetries = 4 + + var calls int + c := New(cfg, nil, nil) + c.chatOnceOverride = func(ctx context.Context, site config.Site, modelID string, model config.Model, + prompt string, route Route, info *ServeInfo, yield func(Event) error) error { + calls++ + return newSession(`sse error: {"error":"Sicherheitspruefung erforderlich.","ts_required":true}`) + } + + err := c.Chat(context.Background(), "deepseek-v4-flash-de", "hello", &ServeInfo{}, func(Event) error { return nil }) + if err == nil { + t.Fatal("expected an error") + } + if !strings.Contains(err.Error(), "requires Turnstile verification") { + t.Errorf("error = %q, want a Turnstile hint", err.Error()) + } + if calls != 1 { + t.Errorf("upstream calls = %d, want 1 (no blind refresh retries)", calls) + } +} + +func TestNonceFetchFailureFailsFast(t *testing.T) { + cfg := testConfig(t) + cfg.Proxy.URL = "" + cfg.Upstream.AutoRefresh = true + cfg.Upstream.RefreshRetries = 4 + + var calls int + c := New(cfg, nil, nil) + c.chatOnceOverride = func(ctx context.Context, site config.Site, modelID string, model config.Model, + prompt string, route Route, info *ServeInfo, yield func(Event) error) error { + calls++ + return errf("nonce fetch failed for %s: ", modelID) + } + + err := c.Chat(context.Background(), "deepseek-v4-flash-de", "hello", &ServeInfo{}, func(Event) error { return nil }) + if err == nil { + t.Fatal("expected an error") + } + if calls != 1 { + t.Errorf("upstream calls = %d, want 1 (config problems are not retried)", calls) + } + if !isConfigProblem(err) { + t.Errorf("err = %v, want isConfigProblem", err) + } +} + +func TestSSEDeltaAndDoneEvents(t *testing.T) { + raw, _ := json.Marshal(map[string]any{"delta": "hello world"}) + evs, err := translateEvent("message", []string{string(raw)}) + if err != nil { + t.Fatalf("translate: %v", err) + } + if len(evs) != 1 || evs[0].Kind != KindDelta || evs[0].Value != "hello world" { + t.Fatalf("events = %+v", evs) + } + evs, err = translateEvent("message", []string{"[DONE]"}) + if err != nil || len(evs) != 1 || evs[0].Kind != KindDone { + t.Fatalf("done event = %+v err=%v", evs, err) + } +} diff --git a/internal/upstream/errors.go b/internal/upstream/errors.go new file mode 100644 index 0000000..a15f2c3 --- /dev/null +++ b/internal/upstream/errors.go @@ -0,0 +1,169 @@ +package upstream + +import ( + "errors" + "fmt" + "strings" +) + +// UpstreamError is any failure talking to the deepseek.* sites. +type UpstreamError struct { + Msg string + ContentStarted bool + Cause error +} + +func (e *UpstreamError) Error() string { + if e.Msg != "" { + return e.Msg + } + if e.Cause != nil { + return e.Cause.Error() + } + return "upstream failed" +} + +func (e *UpstreamError) Unwrap() error { return e.Cause } + +// QuotaExhaustedError means the site ran out of free quota for this session. +type QuotaExhaustedError struct{ UpstreamError } + +// SessionVerificationError means Turnstile/nonce verification must redone. +type SessionVerificationError struct{ UpstreamError } + +func errf(format string, a ...any) *UpstreamError { + return &UpstreamError{Msg: fmt.Sprintf(format, a...)} +} + +func newQuota(msg string) *QuotaExhaustedError { + return &QuotaExhaustedError{UpstreamError: UpstreamError{Msg: msg}} +} + +func newSession(msg string) *SessionVerificationError { + return &SessionVerificationError{UpstreamError: UpstreamError{Msg: msg}} +} + +// AsUpstream unwraps any error into an *UpstreamError. +func AsUpstream(err error) *UpstreamError { + if err == nil { + return nil + } + var ue *UpstreamError + if errors.As(err, &ue) { + return ue + } + return &UpstreamError{Msg: err.Error(), Cause: err} +} + +func contentStarted(err error) bool { + var ue *UpstreamError + if errors.As(err, &ue) { + return ue.ContentStarted + } + return false +} + +func isQuota(err error) bool { + var q *QuotaExhaustedError + return errors.As(err, &q) +} + +func isSession(err error) bool { + var s *SessionVerificationError + return errors.As(err, &s) +} + +// isSessionPayload classifies upstream JSON payloads that indicate the +// Turnstile cookie / nonce has to be re-established. It deliberately matches +// only explicit markers so a randomly embedded "nonce" string in echoed +// request data cannot trigger a costly re-solve. +func isSessionPayload(payload map[string]any) bool { + var texts []string + for _, k := range []string{"error", "message", "code"} { + if v, ok := payload[k]; ok && v != nil { + texts = append(texts, stringify(v)) + } + } + if data, ok := payload["data"].(map[string]any); ok { + for _, k := range []string{"code", "message", "error"} { + if v, ok := data[k]; ok && v != nil { + texts = append(texts, stringify(v)) + } + } + } + if notice, ok := payload["quota_notice"].(map[string]any); ok { + if v, ok := notice["message"]; ok { + texts = append(texts, stringify(v)) + } + } + text := strings.ToLower(strings.Join(texts, " ")) + for _, m := range []string{ + "deepseek_ts_required", + "ts_required", + "nonce_failure", + "session_expired", + "forbidden", + "unauthorized", + "csrf", + "verification_required", + "sicherheitspruefung", + } { + if strings.Contains(text, m) { + return true + } + } + if v, ok := payload["ts_required"]; ok { + switch t := v.(type) { + case bool: + return t + case string: + return strings.TrimSpace(t) != "" && t != "0" && !strings.EqualFold(t, "false") + default: + return true + } + } + return false +} + +// isConfigProblem reports errors that retrying cannot fix: the site stopped +// serving the AIPKit chat page (it now answers with a redirect or HTML), or +// the config points at something that does not exist. +func isConfigProblem(err error) bool { + return strings.Contains(strings.ToLower(err.Error()), "nonce fetch failed") +} + +// isQuotaPayload mirrors the German/English quota notices used upstream. +func isQuotaPayload(payload map[string]any) bool { + if _, ok := payload["quota_notice"]; ok { + return true + } + var texts []string + for _, k := range []string{"error", "message"} { + if v, ok := payload[k]; ok && v != nil { + texts = append(texts, stringify(v)) + } + } + if notice, ok := payload["quota_notice"].(map[string]any); ok { + if v, ok := notice["message"]; ok { + texts = append(texts, stringify(v)) + } + } + text := strings.ToLower(strings.Join(texts, " ")) + if strings.Contains(text, "guthaben") || strings.Contains(text, "quota") { + return true + } + return strings.Contains(text, "token") && strings.Contains(text, "aufgebraucht") +} + +func stringify(v any) string { + switch t := v.(type) { + case string: + return t + case float64: + return fmt.Sprintf("%v", t) + case bool: + return fmt.Sprintf("%v", t) + default: + return fmt.Sprintf("%v", t) + } +} diff --git a/internal/upstream/serveinfo.go b/internal/upstream/serveinfo.go new file mode 100644 index 0000000..cfebd2b --- /dev/null +++ b/internal/upstream/serveinfo.go @@ -0,0 +1,32 @@ +package upstream + +import "sync" + +// ServeInfo records which model/site/proxy route actually answered a request. +// It is safe to read from the request goroutine while the producer goroutine +// is still writing. +type ServeInfo struct { + mu sync.Mutex + modelID string + site string + route string +} + +func (s *ServeInfo) Set(modelID, site, route string) { + if s == nil { + return + } + s.mu.Lock() + s.modelID, s.site, s.route = modelID, site, route + s.mu.Unlock() +} + +// Get returns a snapshot of the fields recorded so far. +func (s *ServeInfo) Get() (modelID, site, route string) { + if s == nil { + return "", "", "" + } + s.mu.Lock() + defer s.mu.Unlock() + return s.modelID, s.site, s.route +} diff --git a/internal/upstream/sse.go b/internal/upstream/sse.go new file mode 100644 index 0000000..fc5aba6 --- /dev/null +++ b/internal/upstream/sse.go @@ -0,0 +1,182 @@ +package upstream + +import ( + "bufio" + "encoding/json" + "fmt" + "io" + "strings" +) + +// Event is one translated upstream SSE message. +type Event struct { + Kind string // "start" | "delta" | "done" + Value string +} + +const ( + KindStart = "start" + KindDelta = "delta" + KindDone = "done" +) + +// readSSE parses a text/event-stream body. Blank lines dispatch the pending +// event, ":" comment lines are ignored. +func readSSE(r io.Reader, handle func(event string, dataLines []string) error) error { + sc := bufio.NewScanner(r) + sc.Buffer(make([]byte, 0, 64*1024), 4*1024*1024) + + eventType := "message" + var dataLines []string + flush := func() error { + if len(dataLines) == 0 { + return nil + } + ev, dl := eventType, dataLines + eventType, dataLines = "message", nil + return handle(ev, dl) + } + + for sc.Scan() { + line := strings.TrimSpace(sc.Text()) + if line == "" { + if err := flush(); err != nil { + return err + } + continue + } + if strings.HasPrefix(line, ":") { + continue + } + if strings.HasPrefix(line, "event:") { + eventType = strings.TrimSpace(line[len("event:"):]) + continue + } + if strings.HasPrefix(line, "data:") { + dataLines = append(dataLines, strings.TrimSpace(line[len("data:"):])) + } + } + if err := sc.Err(); err != nil { + return fmt.Errorf("sse read: %w", err) + } + return flush() +} + +// translateEvent converts one upstream SSE event into zero or more events for +// the downstream client. It returns an error for upstream failure payloads. +func translateEvent(eventType string, dataLines []string) ([]Event, error) { + var payload map[string]any + for _, line := range dataLines { + if line == "[DONE]" { + return []Event{{Kind: KindDone}}, nil + } + var p map[string]any + if err := json.Unmarshal([]byte(line), &p); err == nil { + payload = p + } + } + if payload == nil { + return nil, nil + } + + switch eventType { + case "message_start": + return []Event{{Kind: KindStart, Value: scalarString(payload["message_id"])}}, nil + case "done", "complete": + return []Event{{Kind: KindDone}}, nil + } + + if eventType == "error" || hasErrorValue(payload) { + if isQuotaPayload(payload) { + return nil, newQuota("sse quota exhausted: " + shortJSON(payload)) + } + if isSessionPayload(payload) { + return nil, newSession("sse session failed: " + shortJSON(payload)) + } + return nil, errf("sse error: %s", shortJSON(payload)) + } + + delta := firstTruthy(payload, "delta", "message", "content") + if delta == nil { + return nil, nil + } + text := deltaText(delta) + if text == "" { + return nil, nil + } + return []Event{{Kind: KindDelta, Value: text}}, nil +} + +func hasErrorValue(payload map[string]any) bool { + v, ok := payload["error"] + return ok && v != nil +} + +func firstTruthy(payload map[string]any, keys ...string) any { + for _, k := range keys { + if v, ok := payload[k]; ok && v != nil && !isFalsy(v) { + return v + } + } + return nil +} + +func isFalsy(v any) bool { + switch t := v.(type) { + case nil: + return true + case string: + return t == "" + case bool: + return !t + case float64: + return t == 0 + case map[string]any: + return len(t) == 0 + case []any: + return len(t) == 0 + } + return false +} + +func deltaText(v any) string { + switch t := v.(type) { + case string: + return t + case map[string]any: + for _, k := range []string{"text", "content", "message", "delta"} { + if s, ok := t[k].(string); ok && s != "" { + return s + } + } + raw, err := json.Marshal(t) + if err != nil { + return "" + } + return string(raw) + default: + return fmt.Sprintf("%v", t) + } +} + +func scalarString(v any) string { + if v == nil { + return "" + } + if s, ok := v.(string); ok { + return s + } + return fmt.Sprintf("%v", v) +} + +func shortJSON(payload map[string]any) string { + raw, err := json.Marshal(payload) + if err != nil { + return fmt.Sprintf("%v", payload) + } + s := string(raw) + if len(s) > 400 { + return s[:400] + "..." + } + return s +}