From 3751dffef94179a9b4c1e5f4667c8ff623795dcb Mon Sep 17 00:00:00 2001 From: wangchuanli Date: Fri, 18 Sep 2026 08:46:34 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E5=A4=87=E4=BB=BD?= =?UTF-8?q?=E6=81=A2=E5=A4=8D=E4=B8=8E=E5=85=AC=E7=BD=91=E5=8A=A0=E5=9B=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增备份管理页与 API:在线快照、自动周期备份、按份数清理、下载、一键恢复(恢复前自动兜底) - 新增 /profile/export,普通用户可导出本人全部数据(不含 Cookie 明文) - 修复 X-Forwarded-For 可伪造导致三道 IP 防线失效,统一走 client_ip() 取客户端地址 - 取消 admin123 硬编码默认口令,留空则生成随机初始口令并仅打印一次 - .dockerignore 排除 backups/ 并加构建期断言,防止密钥随镜像分发 - 新增会话版本号,改密/停用/删除及恢复备份后其他会话立即失效 - 新增容器资源上限、采集跨度硬顶 31 天、重操作最小间隔与并发 409 - 新增访问日志、HSTS 条件下发、口令黑名单、验证码抗模板匹配、instance.json 0600 - 版本号升至 1.4.0,同步更新 README、SECURITY、.env.example 与 compose 配置 --- .dockerignore | 12 + .env.example | 47 +- Dockerfile | 19 +- README.md | 120 ++-- SECURITY.md | 113 +++- docker-compose.hostdir.yml | 4 + docker-compose.yml | 48 ++ docker/entrypoint.sh | 9 +- docs/CHANGELOG.md | 188 ++++++ docs/DEPLOYMENT.md | 439 +++++++++++--- docs/USER-GUIDE.md | 111 +++- docs/images/11-backups.png | Bin 0 -> 705172 bytes manage.py | 155 ++++- tools/shots.py | 5 +- tools/smoke.py | 101 ++++ workbuddy_portal/__init__.py | 2 +- workbuddy_portal/backup.py | 637 ++++++++++++++++++++ workbuddy_portal/captcha.py | 145 ++++- workbuddy_portal/collect.py | 28 + workbuddy_portal/config.py | 128 +++- workbuddy_portal/db.py | 84 ++- workbuddy_portal/scheduler.py | 12 +- workbuddy_portal/schema.sql | 23 + workbuddy_portal/security.py | 225 ++++++- workbuddy_portal/web/api.py | 238 +++++++- workbuddy_portal/web/templates/backups.html | 236 ++++++++ workbuddy_portal/web/templates/base.html | 3 + workbuddy_portal/web/templates/profile.html | 26 +- workbuddy_portal/web/templates/tasks.html | 14 +- workbuddy_portal/web/views.py | 219 ++++++- 30 files changed, 3150 insertions(+), 241 deletions(-) create mode 100644 docs/images/11-backups.png create mode 100644 workbuddy_portal/backup.py create mode 100644 workbuddy_portal/web/templates/backups.html diff --git a/.dockerignore b/.dockerignore index a93f66b..2e08909 100644 --- a/.dockerignore +++ b/.dockerignore @@ -8,6 +8,18 @@ data/ logs/ +# ---- 备份归档:必须排除,这条是硬要求 ---- +# backups/ 里的 zip 含 data/instance.json,而那个文件躺着 SECRET_KEY 与 +# cookie_key。漏了这一行,`docker build` 会把整库密钥原样烤进镜像层 —— +# 推一次镜像就等于把密钥分发给所有能拉镜像的人,而 Dockerfile 里后续的 +# chown/chmod 都改不掉「镜像层里已经有一份」这个事实(层是只读叠加的, +# 想靠 COPY 之后再 RUN rm 抹掉也只会多留一个含内容的中间层)。 +# 换言之:这不是「少拷一个目录」,是**凭证泄露**,只能在这里挡。 +backups/ + +# 示例数据是 tools/demo_data.py 的产物,运行时不需要(镜像再小一点) +data/demo/ + # Python 缓存 # 注意:`__pycache__/` 只能匹配上下文**根目录**下的同名目录, # 嵌套的(如 tools/__pycache__)必须用 `**/` 前缀——否则会被原样打进镜像。 diff --git a/.env.example b/.env.example index 240b208..f3aca93 100644 --- a/.env.example +++ b/.env.example @@ -10,10 +10,50 @@ WB_PORT=8848 TZ=Asia/Shanghai # ---------- 首个管理员(只在数据库为空时生效)---------- -# 强烈建议:首次启动前就设好,避免用默认的 admin/admin123 暴露在局域网上 +# 强烈建议:首次启动前就设好。 +# 留空时程序会生成**随机**口令,并且只在启动日志里打印一次: +# docker compose logs portal | grep -A1 口令 +# 抄下来登录后立刻改掉。(1.4.0 起不再有 admin123 这类硬编码兜底。) WB_ADMIN_USER=admin WB_ADMIN_PASSWORD= +# ---------- 容器资源上限 ---------- +# 应用层已经有「采集频率 / 并发 / 采集跨度」三重业务刹车,这里是**进程**层面的 +# 兜底:一次异常(内存泄漏、超大导出、正则回溯)不能把整台机器带下去。 +# 单写者架构下不要靠加副本扛负载,限制单实例资源才是正解。 +# +# CPUS : CPU 上限,允许小数。SQLite 是单写者,1.0 已经够用; +# 压测后再调大,别一上来就给满宿主机的核。 +# MEM_LIMIT : 内存上限。500 条/页采集时的常驻内存在 100~200 MB 量级, +# 512m 留了充裕余量;内存与 swap 同时设成这个值 = 禁用 swap, +# 这样超限会「被 OOM 杀掉」而不是「越来越慢」——后者更难查。 +# PIDS_LIMIT : 进程/线程数上限,挡 fork 炸弹。tini + python + waitress +# 线程模型下 256 很宽松。 +WB_CPUS=1.0 +WB_MEM_LIMIT=512m +WB_PIDS_LIMIT=256 + +# ---------- waitress 线程数 ---------- +# 这是「单实例能同时吃进几个慢请求」的上限(采集 / 导出 / 备份恢复都算慢请求)。 +# 与 CPU 上限配套:1 核配 8 线程容易出现「都在等 CPU」的假并发,默认 4。 +WB_THREADS=4 + +# ---------- 反向代理与传输安全(三个必须一起决定)---------- +# WB_TRUST_PROXY:是否信任 X-Forwarded-For。**默认 0 = 不信任**。 +# 直接暴露给公网时必须留 0。置 1 的后果很严重:攻击者每次换一个伪造的 +# XFF,验证码限速、注册配额、登录锁定这三道 IP 防线会**同时失效**。 +# 置 1 的前提只有一个:**你自己的**反向代理会写这个头。 +# 开启后程序取 XFF 里**最右侧**的合法 IP,而最右侧是离你最近的那一跳 +# (由你的代理写入),客户端伪造不了。因此 nginx 侧两种写法都安全: +# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 保留链路,便于排查 +# proxy_set_header X-Forwarded-For $remote_addr; # 覆盖,最保守 +# 真正不能做的是:去信 XFF 里**最左边**那一段(那是客户端自己填的)。 +WB_TRUST_PROXY=0 +# 前面挂了 HTTPS 反代时置 1(读到 X-Forwarded-Proto: https 就不跳转) +WB_FORCE_HTTPS=0 +# 是否记录访问日志(写进 logs/app.log,静态资源与验证码图片除外) +WB_ACCESS_LOG=1 + # ---------- 调度 ---------- # 一个容器一份调度。只有跑多副本时才把除第一份之外的都设成 1。 WB_DISABLE_SCHEDULER=0 @@ -34,11 +74,12 @@ WB_IMPORT_XLSX= # ---------- 镜像名(推送 Gitea 注册表时用)---------- # WB_IMAGE=git.iwali.top/wangchuanli/workbuddy-portal:latest -# WB_IMAGE=git.iwali.top/wangchuanli/workbuddy-portal:1.2.0 +# WB_IMAGE=git.iwali.top/wangchuanli/workbuddy-portal:1.4.0 # ---------- 仅叠加 docker-compose.hostdir.yml 时有效 ---------- -# 把数据/日志放到宿主机目录而不是命名卷。**只建议 Linux 宿主机使用**: +# 把数据/日志/备份放到宿主机目录而不是命名卷。**只建议 Linux 宿主机使用**: # Windows + Docker Desktop 的 9p 挂载下,宿主进程访问过 WAL 库之后, # 容器侧会打不开数据库且不自愈(详见 docs/DEPLOYMENT.md)。 # WB_HOST_DATA_DIR=./data # WB_HOST_LOG_DIR=./logs +# WB_HOST_BACKUP_DIR=./backups diff --git a/Dockerfile b/Dockerfile index 2384f43..dfcfc26 100644 --- a/Dockerfile +++ b/Dockerfile @@ -26,7 +26,7 @@ FROM python:3.13-slim AS runtime LABEL org.opencontainers.image.title="WorkBuddy Portal" \ org.opencontainers.image.description="WorkBuddy 积分用量采集 / 存储 / 呈现一体化门户" \ - org.opencontainers.image.version="1.3.0" \ + org.opencontainers.image.version="1.4.0" \ org.opencontainers.image.source="https://git.iwali.top/wangchuanli/workbuddy-portal" ENV PYTHONUNBUFFERED=1 \ @@ -36,6 +36,7 @@ ENV PYTHONUNBUFFERED=1 \ PATH="/opt/venv/bin:$PATH" \ WB_DATA_DIR=/app/data \ WB_LOG_DIR=/app/logs \ + WB_BACKUP_DIR=/app/backups \ WB_HOST=0.0.0.0 \ WB_PORT=8848 @@ -55,16 +56,26 @@ WORKDIR /app # --chown 让非 root 用户能读写挂载卷之外的文件;.dockerignore 已挡掉数据与日志 COPY --chown=app:app . . +# 构建期断言:万一 .dockerignore 漏掉 backups/,在这里直接失败。 +# 只靠「记得改 .dockerignore」不可靠 —— 备份归档里有 instance.json(含 +# SECRET_KEY 与 cookie_key),进了镜像层就是整库密钥随镜像分发,且**无法** +# 用后续的 RUN rm 抹掉(只会多留一个含内容的只读层)。让构建自己拒绝。 +RUN set -eux; \ + if [ -n "$(ls -A /app/backups 2>/dev/null)" ]; then \ + echo "ERROR: /app/backups 里有内容被打进镜像层 —— .dockerignore 漏了 backups/" >&2; \ + exit 1; \ + fi + RUN set -eux; \ chmod +x /app/docker/entrypoint.sh /app/docker/healthcheck.py; \ - mkdir -p /app/data /app/logs; \ - chown -R app:app /app/data /app/logs; \ + mkdir -p /app/data /app/logs /app/backups; \ + chown -R app:app /app/data /app/logs /app/backups; \ python -c "import workbuddy_portal, flask, waitress; print('deps ok', flask.__version__)" USER app EXPOSE 8848 -VOLUME ["/app/data", "/app/logs"] +VOLUME ["/app/data", "/app/logs", "/app/backups"] HEALTHCHECK --interval=30s --timeout=6s --start-period=20s --retries=3 \ CMD ["python", "/app/docker/healthcheck.py"] diff --git a/README.md b/README.md index 0d5882a..c42aa06 100644 --- a/README.md +++ b/README.md @@ -13,10 +13,12 @@ | 前端 | 服务端渲染后台 + 独立 ECharts 大屏(离线自带的 `echarts.min.js`) | | 部署 | **三条路径**:裸机 / Docker 自打包 / compose 拉云端镜像;镜像可推 Gitea 容器注册表 | | 鉴权 | **多用户**(各自的数据与凭证严格隔离)+ 全站登录 + CSRF + 角色(管理员 / 普通) | -| 权限 | 普通账号**只能维护本人的 Cookie / User-Agent**;调度频率、采集参数、日志、用户管理都归管理员 | +| 权限 | 普通账号**只能维护本人的 Cookie / User-Agent**;调度频率、采集参数、日志、用户管理、备份都归管理员 | | 凭证 | Cookie **ChaCha20 + HMAC 静态加密**入库,页面与接口只回掩码 | -| 防攻击 | 登录 / 注册**图形验证码**(服务端出题 + 一次性)、失败限速、注册限额 | -| 版本 | v1.3.0 | +| 防攻击 | 登录 / 注册**图形验证码**(服务端出题 + 一次性)、双维度失败限速、注册限额、口令黑名单 | +| 备份 | **自动 + 手动**一致性快照、按份数清理、在线下载、**一键恢复**(恢复前自动再存一份);用户可导出本人全部数据 | +| 资源上限 | 容器层 `cpus` / `mem_limit` / `pids_limit`;实例层采集最小间隔、采集跨度硬顶 **31 天**、**有任务在跑不允许新建任务** | +| 版本 | v1.4.0 | | **许可证** | **MIT**(第三方组件与再分发资源见 [THIRD-PARTY-NOTICES.md](THIRD-PARTY-NOTICES.md)) | **目录**:[核心特性](#核心特性) · [架构](#架构一图) · [快速开始](#快速开始) · [命令一览](#命令一览) · @@ -38,8 +40,9 @@ | **单写者保证** | 文件锁 `data/collect.lock` 让「调度 / 页面手动触发 / CLI」三处不并发写 SQLite;僵尸锁 30 分钟可抢占 | | **全量存档** | 不随官网导出窗口过期而丢数据;官网 xlsx 丢失约 22% 的 `Prompt`,可用 `fill-prompt` 回补 | | **大屏去中间层** | 大屏直接走 `/api`,按当前筛选窗口实时聚合;左侧多取等长一段用于算环比,窗口不变不重复请求 | -| **可观测** | 每次采集落一条 `collect_runs`(含 `[warn]`/`[error]` 逐行原文);另有操作审计与登录审计,均带账号归属 | -| **一键备份** | 正本就是宿主机上的一个 `.sqlite` 文件,拷走即可;`manage.py vacuum` 回收空闲页 | +| **可观测** | 每次采集落一条 `collect_runs`(含 `[warn]`/`[error]` 逐行原文);另有操作审计与登录审计,均带账号归属;**访问日志**写进 `logs/app.log`(waitress 本身不记 access log) | +| **备份与恢复** | 备份走 SQLite **在线备份 API**(不是 `cp`,采集正在写也能拿到一致快照),归档成含所有 `*.sqlite` + `instance.json` 的 zip;可设**周期与保留份数**、管理员下载与**一键恢复**(恢复前自动再存一份当前库)、普通用户**导出本人全部数据**。归档不在 `data/` 卷里,`down -v` 不会连备份一起删 | +| **可安全对外** | 容器层限 `cpus`/`mem_limit`/`memswap`/`pids_limit`/`nofile`;实例层限采集最小间隔、每日时刻数、**采集跨度硬顶 31 天**;**有任务在跑时新建任务直接 409**;默认不信任 `X-Forwarded-For`(否则三道 IP 防线全废) | --- @@ -73,6 +76,7 @@ | 采集 | `workbuddy_portal/collect.py` + `scheduler.py` | 纯 `urllib` 调云端;断点、去重、锁、导入导出,全部按 `uid` 隔离 | | 存储 | `workbuddy_portal/db.py` + `schema.sql` | SQLite WAL,单写者;运行期配置也在库里(`settings` 表,主键 `(user_id, key)`) | | 加固 | `workbuddy_portal/crypto.py` + `captcha.py` | 凭证静态加密(零第三方依赖手写 ChaCha20);验证码用**自写 PNG 编码器**出图 | +| 备份 | `workbuddy_portal/backup.py` | 在线备份 API 出快照 → zip 归档 → 按份数清理 → 校验 → 整表恢复(含恢复前自动兜底) | | 聚合 | `workbuddy_portal/query.py` | `daily / dims / top / records / summary / bundle`,全部下推 SQL,`uid` 是第一个条件 | | 呈现 | `workbuddy_portal/web/` | Jinja 后台(`views.py`)+ JSON API(`api.py`)+ 静态大屏 | @@ -123,8 +127,10 @@ docker compose up -d 三条路径跑起来后都是:打开 `http://:8848` → 用管理员登录 → **先把密码改掉** → 去「配置管理」粘贴 Cookie。 -> 数据与日志放在 Docker **命名卷**(`workbuddy-portal_wb_data` / `_wb_logs`)里, -> `docker compose down` 不会删。要用 CLI 就 `docker compose exec portal python manage.py …`。 +> 数据、日志与备份放在 Docker **命名卷**(`workbuddy-portal_wb_data` / `_wb_logs` / +> `_wb_backups`)里,`docker compose down` 不会删。要用 CLI 就 `docker compose exec portal python manage.py …`。 +> **备份刻意独立成一个卷**:与正本同卷时,一次 `down -v` 会把两者一起带走 —— +> 那正好是最需要备份的时刻。 > **不要在宿主机上跑 `manage.py` 去连容器的库**——Windows + Docker Desktop 的 9p 挂载下, > 宿主进程碰一次 WAL 库就会让容器打不开数据库(纯读也会触发,且不自愈)。 > 想直接看到数据/日志,用 `docker-compose.hostdir.yml` 叠加层(**仅建议 Linux 宿主机**)。 @@ -132,23 +138,30 @@ docker compose up -d > **从旧版本升级不需要手工介入**:`init` 由 `PRAGMA user_version` 驱动,自动迁移且幂等。 > v1.1.0 → v1.2.0 是「单用户 → 多用户」(历史数据归到首个账号、明文 Cookie 就地加密); -> v1.2.0 → v1.3.0 是「配置作用域收敛」(调度与采集参数从个人级提升到实例级)。 -> 两次都带审计留痕,可重复执行。见 [CHANGELOG](docs/CHANGELOG.md)。 +> v1.2.0 → v1.3.0 是「配置作用域收敛」(调度与采集参数从个人级提升到实例级); +> v1.3.0 → v1.4.0 只加一列(`users.session_ver`)与一张新表(`backups`), +> **无数据搬运**。三次都带审计留痕,可重复执行。见 [CHANGELOG](docs/CHANGELOG.md)。 ### 第一次使用必做 **管理员:** -1. **改密码**——局域网可访问,默认密码等于没锁门(「个人中心」或「配置管理 → 修改密码」)。 -2. **确认调度时刻**——「任务管理」里把 `09:00,17:00` 改成你的习惯时刻,保存即生效 - (这是**实例级**的,对全站账号生效)。 -3. **填自己的 Cookie**——「配置管理 → 凭证」,否则采集只会记一条 `no_cookie`。 +1. **拿到并改掉初始密码**——`WB_ADMIN_PASSWORD` 留空时程序会生成**随机**口令, + 只在启动日志里打印一次(`docker compose logs portal | grep -A6 管理员初始口令`)。 + **没有 `admin123` 这类默认口令了**,拿不到就去查看日志。 +2. **填自己的 Cookie**——「配置管理 → 凭证」,否则采集只会记一条 `no_cookie`。 +3. **确认调度与限制**——「任务管理」里把 `09:00,17:00` 改成你的习惯时刻; + 同时确认「每日时刻上限」「采集最小间隔」「单次最长跨度」三个刹车(都是**实例级**的, + 对全站账号生效)。 +4. **确认自动备份**——「备份管理」页看状态与保留份数;建议点一次「立即备份」, + 并**把一份归档下载到容器之外**(备份留在同一台机器上只防「改错了」,不防「机器没了」)。 **普通账号(注册进来的默认身份):** -1. **改密码**——「个人中心 → 修改登录密码」。 +1. **改密码**——「个人中心 → 修改登录密码」(改完其他设备上的登录会立刻失效)。 2. **填自己的 Cookie**——这是你**唯一**需要动手的配置。 3. 想立刻看数据?点「任务管理 → 立即采集一次」,不用等调度时刻。 +4. 想把自己的数据带走?「个人中心 → 导出我的全部数据」。 ### 想给同事开账号? @@ -181,6 +194,9 @@ docker compose up -d | `fill-prompt [-u 账号]` | 回补缺失的 `User Prompt`(官网导出会丢约 22%) | | `export-csv [路径] [-u 账号]` | 导出 CSV(默认 `data/exports/usage_records_<账号>.csv`,文件名带归属) | | `vacuum` | `wal_checkpoint(TRUNCATE)` + `VACUUM`,回收空闲页、压缩 WAL | +| `backup [--note 说明]` | 立即打一份备份(所有 `data/*.sqlite` + `instance.json` → 一个 zip),并按保留份数清理最旧的 | +| `backups [--prune] [--keep N]` | 列出备份(大小 / 条数 / 积分 / 来源 / 时间),`--prune` 顺便按保留份数清理 | +| `restore <文件名> --yes` | **从备份恢复**(整表替换)。破坏性操作,必须显式 `--yes`;不加只打印将要发生什么。恢复前会自动把当前库另存一份 | | `stats [-u 账号]` | 先全库概览(每账号多少条 / 多少积分 / Cookie 状态),再给指定账号的维度明细 | | `users` | 列出所有账号:角色、状态、数据量、凭证状态、最近登录 IP | | `status` | 逐账号显示调度开关 / 下次执行 / Cookie 状态 / 最近采集 | @@ -227,9 +243,11 @@ python tools/shots.py --base http://127.0.0.1:8849 --full # 逐页截图( | `/records` | **数据明细**:快捷区间、日期/模型/客户端/关键词筛选、排序、分页、展开 Prompt、导出 CSV | ✅ | | `/tasks` | **任务管理**:手动采集与按区间补采、运行历史。**调度开关与时刻对普通账号是只读的** | ⚠️ 只读调度 | | `/config` | **配置管理**:自己的 Cookie / UA(**唯一可改**)+ 只读的采集参数 + 维护动作;底部实例级设置区 | ⚠️ 仅凭证可改 | -| `/profile` | **个人中心**:账号概况、我的凭证状态(密文入库)、改密码;点右上角用户名进入 | ✅ | +| `/profile` | **个人中心**:账号概况、我的凭证状态(密文入库)、改密码(其他设备会话立即失效)、**导出我的全部数据**;点右上角用户名进入 | ✅ | +| `/profile/export` | **导出本人全部数据**(zip:使用记录 / 采集历史 / 操作审计 / 我的账号与配置;**不含 Cookie 明文**),10 秒限速 | ✅ | | `/logs` | **日志管理**(**仅管理员**):全实例采集详情(含 `[warn]`/`[error]` 原文)、应用日志尾部、操作审计 | ❌ 403 | | `/users` | **用户管理**(**仅管理员**):新建账号、改显示名/权限/状态/密码、删除、账号操作审计 | ❌ 403 | +| `/backups` | **备份管理**(**仅管理员**):份数/占用/自动备份状态与下次时间、周期与保留份数设置、列表(下载 / 恢复 / 删除) | ❌ 403 | ![概览](docs/images/01-overview.png) @@ -264,6 +282,11 @@ python tools/shots.py --base http://127.0.0.1:8849 --full # 逐页截图( | GET | `/captcha.png?purpose=login\|register` | **图形验证码图片**(唯一无需登录的接口;每次都是新题,带 `no-store`) | 公开 | | GET | `/logs/tail` | 应用日志尾部 | **仅管理员** | | GET | `/records/export` | 按筛选流式导出 CSV | 登录(只导自己) | +| GET/POST | `/api/backups` | 列出备份(含大小/条数/来源/是否存在) / 立即打一份 | **仅管理员** | +| GET | `/api/backups/` | **下载**一份归档(zip) | **仅管理员** | +| POST | `/api/backups//restore` | **从该归档恢复**(整表替换;`include_instance` 决定是否连密钥一起回滚) | **仅管理员** | +| POST | `/api/backups//delete` · `/api/backups/prune` | 删除一份 / 按保留份数清理 | **仅管理员** | +| GET | `/profile/export` | 导出**本人**全部数据(zip,不含 Cookie 明文) | 登录 | --- @@ -274,16 +297,16 @@ workbuddy-portal/ ├── manage.py 统一 CLI(唯一入口) ├── requirements.txt 仅 Flask / waitress / openpyxl(零多余依赖) ├── Dockerfile 多阶段构建(依赖层 / 运行层) -├── docker-compose.yml 单服务编排(数据放 Docker 命名卷) +├── docker-compose.yml 单服务编排(数据 / 日志 / 备份各一个命名卷 + 容器资源上限) ├── docker-compose.hostdir.yml 可选叠加层:改用宿主机目录(仅建议 Linux) -├── .env.example 环境变量样例 +├── .env.example 环境变量样例(含资源上限与反代开关) ├── docker/ │ ├── entrypoint.sh 幂等初始化 → exec serve(LF 行尾) │ └── healthcheck.py 标准库健康检查(免登录页 /login) ├── docs/ 文档 + images/(手册配图,合成数据) ├── data/ 【运行时】正本 usage.sqlite / instance.json / exports/ / demo/ ├── logs/ 【运行时】app.log(滚动 2 MB × 3) -├── backups/ 数据库快照统一落点(整目录被 git 忽略) +├── backups/ 归档落点(**刻意不在 data/ 里**,整目录被 git 与 docker 忽略) ├── tools/ │ ├── smoke.py 离线回归(215 项断言) │ ├── check_live.py 真实 HTTP 验收(122 项断言,支持 --as 普通账号) @@ -300,13 +323,14 @@ workbuddy-portal/ ├── security.py 密码哈希、会话、CSRF、失败限速、验证码策略、角色、响应头 ├── client.py 云端接口(urllib)+ 编辑器凭证读取 ├── collect.py 增量采集 / 去重入库 / 互斥锁 / xlsx 导入 / CSV 导出 - ├── scheduler.py 进程内调度线程(实例级时刻表 + 槽位去重 + 启动补跑) + ├── scheduler.py 进程内调度线程(实例级时刻表 + 槽位去重 + 启动补跑 + 自动备份) ├── query.py SQL 聚合层(uid 必填) + ├── backup.py 备份 / 恢复(在线快照 → zip → 份数清理 → 校验 → 整表恢复) └── web/ - ├── views.py 页面路由(含 /login /register /captcha.png /profile) + ├── views.py 页面路由(含 /login /register /captcha.png /profile /backups) ├── api.py JSON API ├── templates/ base / login / register / profile / overview / tasks / - │ config / logs / records / users / error + │ config / logs / records / users / backups / error └── static/ ├── css/app.css 统一设计令牌 ├── js/app.js 带 CSRF 的请求、表单与维护动作绑定 @@ -316,6 +340,9 @@ workbuddy-portal/ > `backups/` **刻意不放在 `data/`**:`data/` 在 Docker 部署下是命名卷, > `docker compose down -v` 会把备份和正本一起删掉——那正好是最需要备份的时刻。 +> 容器里它挂的是独立的 `wb_backups` 卷;**绝不用绑定挂载**(Windows 9p 下会让容器 +> `unable to open database file`,且不自愈)。该目录同时被 `.gitignore` 与 `.dockerignore` 忽略: +> 归档里含 `instance.json`,进了镜像就等于把整库密钥分发给所有能拉镜像的人。 > > 工作区根下另有一个 `legacy-v1/`(v1.0 单文件版归档,仅作 `migrate-csv` 的来源,可安全删除), > 它**在仓库之外**,所以含真实数据的 CSV 不会被提交。 @@ -342,22 +369,27 @@ workbuddy-portal/ ## 安全须知 -局域网可访问 ⇒ 以下每一条都必要: +局域网甚至公网可访问 ⇒ 以下每一条都必要: -- **必须改默认密码**;给同事发**普通账号**(注册出来的默认身份),不要共用管理员 - ——管理员是能停用别人账号的角色。 +- **初始口令不是固定的**(v1.4.0 起):`WB_ADMIN_PASSWORD` 留空时程序生成**随机**口令, + 只在启动日志里打印一次、库里只存散列。**没有 `admin123` 这类默认口令可猜**, + 代价是「拿不到那行日志就进不去」——首次启动后请立刻 `docker compose logs portal | grep -A6 管理员初始口令`。 + 给同事发**普通账号**(注册出来的默认身份),不要共用管理员 —— 管理员是能停用别人账号的角色。 - **权限只有两档,且规则只有一条**:`config.writable_by(key, is_admin)`。 普通账号能写的只有 `USER_EDITABLE_KEYS = {cookie, user_agent}`(且只限本人这份); - 调度频率、采集参数、注册策略、日志、用户管理全部关死。 + 调度频率、采集参数、注册策略、日志、用户管理、**备份**全部关死。 **页面上的置灰/隐藏只是「不给误导性按钮」,真正的闸门在 `@admin_required` 与 `writable_by()` 这两个服务端判断上**——所以直接敲 URL 或构造请求也过不去。 - **数据按账号隔离**:`uid` 是所有查询的必填位置参数(漏传直接报错,不会静默返回全量); `/api/runs/`、`/api/records/` 这类按 id 取的单条接口也带 `user_id` 约束; - `/logs`、`/logs/tail`、`/users`、`/api/users*` 仅管理员。 + `/logs`、`/logs/tail`、`/users`、`/api/users*`、`/backups`、`/api/backups*` 仅管理员。 +- **不信任 `X-Forwarded-For`(默认)**:全站只有 `security.client_ip()` 一个取客户端地址的 + 入口。默认直接用 `remote_addr`;`WB_TRUST_PROXY=1` 时取**最右侧**合法 IP。 + 这一条不改就是**三道 IP 防线同时失效**:实测每次换一个伪造的 XFF,45 次验证码请求全部放行。 - **Cookie 静态加密**:ChaCha20 + HMAC-SHA256(encrypt-then-MAC)密文入库,主密钥在 - `data/instance.json` 的 `cookie_key`(**与 `SECRET_KEY` 分开**,轮换代价不同)。 - `get_settings()` 把加密键一律置空,要明文只有 `db.get_secret()` 一条路—— - 这样任何「顺手打印全部配置」的代码都带不出凭证。升级时历史明文会被自动加密。 + `data/instance.json` 的 `cookie_key`(**与 `SECRET_KEY` 分开**,轮换代价不同), + POSIX 上该文件权限收到 `0600`。`get_settings()` 把加密键一律置空,要明文只有 + `db.get_secret()` 一条路——这样任何「顺手打印全部配置」的代码都带不出凭证。 - **Cookie 不跨账号回落**:`NO_FALLBACK_KEYS`(`cookie` / `user_agent`)不参与实例级回落, 否则新账号会「继承」管理员的凭证,属于最严重的串号越权。 - **实例级也不存凭证**:`init_db()` 灌默认值时会跳过 `USER_EDITABLE_KEYS` 并显式删除 @@ -365,18 +397,38 @@ workbuddy-portal/ - **验证码先于口令校验**:登录时先验验证码再比密码,避免攻击者拿「密码对不对」当信号, 在解验证码之前就把字典跑完。答案存服务端 `captchas` 表,**一次性、5 分钟过期、按用途隔离**, 下发到浏览器的只有随机 id(Flask 会话是签名不加密的,放答案等于送答案)。 + 字模本身带**逐字符随机旋转 / 切变 / 缩放抖动 / 波浪偏移**,同一验证码两次渲染字节差异 **76.9%**。 - **注册受双重限制**:验证码 + 同 IP 每日配额(默认 3 个,可改;`allow_register=0` 可整体关闭)。 -- **停用账号立即失效**:`current_user()` 每个请求回查 `users.status`,不必等 12 小时会话过期。 +- **停用账号立即失效**:`current_user()` 每个请求回查 `users.status` **与 `users.session_ver`**, + 不必等 12 小时会话过期。改密码 / 管理员重置口令 / 停用 / 删除都会让该账号的**所有其他设备上的 + 会话立刻作废**(改自己密码时保留当前这次会话,否则改完立刻被自己踢下线); + **恢复备份**会让全站所有会话作废。 +- **口令有黑名单**:`WEAK_PASSWORDS`(34 个自动撞库字典的头几页)在**设置/修改**口令时拒绝, + 登录时不校验 —— 否则会把用老口令的存量用户挡在门外。 - **CSRF 全站校验**,退出登录也是 `POST`(GET 型退出能被 `` 静默触发)。 前端 `formData()` 会跳过 `disabled` 控件(含祖先 `fieldset[disabled]`)—— disabled 的 input 仍在 `form.elements` 里,一起提交会让服务端因「越权修改只读项」拒掉**整单**。 - **开放重定向防护**:登录跳转的 `next` 只接受站内相对路径,`//evil.com` 这类协议相对 URL 一律回落到 `/`。 -- **登录限速**:按 **IP 与用户名两个维度**分别计数,任一维度连续失败 5 次即锁 10 分钟; - 失败计数表有上限与 TTL;验证码出图另有 60 秒 40 张的限速(不设限就是一条廉价的 CPU 放大路径)。 +- **登录限速按两个维度、且强度刻意不同**:IP 维度连续失败 5 次**真锁** 10 分钟; + **用户名维度只做秒级递增退避**(封顶 60 秒)——因为「知道用户名就能把对方锁死 10 分钟」 + 本身就是攻击,而**管理员用户名在导航栏里是公开的**。另有**单来源登录尝试总量** + (40 次 / 5 分钟,**含成功**)挡住「慢慢撞、不触发失败阈值」的形态。 + 失败提示是「本来源连续失败 N 次」而不是「剩余 N 次」——不给攻击者倒计时。 + 验证码出图另有 60 秒 40 张的限速(不设限就是一条廉价的 CPU 放大路径)。 +- **重操作都有最小间隔**:手动采集 60 秒、CSV 导出 15 秒、导出本人数据 10 秒、 + `vacuum` 120 秒、补全 prompt 60 秒。**采集跨度硬顶 31 天**(代码层 `COLLECT_MAX_RANGE_DAYS_HARD`, + 改配置也突破不了);**有采集任务在跑时新建任务直接 `409`**。 - **安全响应头**:CSP(`frame-ancestors 'none'`)、`X-Frame-Options: DENY`、`nosniff`、 `Referrer-Policy: same-origin`、COOP;`/api/*` 与 `/captcha*` 带 `Cache-Control: no-store`。 -- **不进版本库的文件**:`data/instance.json`(含 `secret_key` 与 `cookie_key`)、 - `data/usage.sqlite`、`data/shots/`、`data/demo/`、`backups/`、`logs/`、`.env`(含明文密码)。 + **HSTS 只在真的走 HTTPS 时下发**(`COOKIE_SECURE or FORCE_HTTPS`)——纯 HTTP 部署下发会让 + 浏览器强升 https,表现成白屏,是个很难归因的故障。 +- **有访问日志**:waitress 自己不记 access log,本程序补上(写进 `logs/app.log`, + 跳过 `/static/` 与验证码图片)。出事无据可查时这一条很值。 +- **不进版本库、也绝不进镜像的文件**:`data/instance.json`(含 `secret_key` 与 `cookie_key`)、 + `data/usage.sqlite`、`data/shots/`、`data/demo/`、`backups/`(归档里**含 `instance.json`**)、 + `logs/`、`.env`(含明文密码)。`.dockerignore` 里 `backups/` 这条是**硬要求**, + Dockerfile 还有一条构建期断言兜底:万一漏了就直接构建失败 —— + 镜像层是只读叠加的,靠 `RUN rm` 补救只会多留一个含内容的中间层。 --- diff --git a/SECURITY.md b/SECURITY.md index 023374a..e70439a 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -2,14 +2,30 @@ ## 支持范围 -本项目按「自托管、局域网内使用」的定位开发。安全修复只针对当前主分支与最新发布版本。 +本项目按「自托管」定位开发,**1.4.0 起已按「可以暴露到公网」加固**(IP 来源、限速、 +资源上限、采集跨度硬顶都补上了),但仍然建议置于反向代理之后。安全修复只针对当前主分支与最新发布版本。 | 版本 | 是否接受安全修复 | |---|---| -| `1.3.x`(当前) | ✅ | +| `1.4.x`(当前) | ✅ | +| `1.3.x` | ⚠️ 可用,但**公网暴露前必须升级**(1.4.0 修掉了三道 IP 防线可被 XFF 伪造绕过的问题) | | `< 1.3` | ⚠️ 可用,但建议升级(1.3.0 收紧了普通账号的越权面,见下) | | `< 1.2` | ❌ 请先升级(1.2.0 修掉了单用户时代「Cookie 明文入库」与「人人都是管理员」两个根本问题) | +> **1.4.0 修掉了什么**(三条 P0): +> 1. **`X-Forwarded-For` 可伪造 ⇒ 三道 IP 防线(验证码限速 / 注册配额 / 登录锁定)同时失效**。 +> 实测:每次换一个伪造的 XFF,45 次验证码请求**全部放行**。现在默认不信任 XFF, +> 全站只有 `security.client_ip()` 一个取客户端地址的入口。 +> 2. **默认口令 `admin123` 硬编码兜底**:现在没有默认口令,留空则生成随机口令、 +> 只在启动日志打印一次、不写进数据库。 +> 3. **`.dockerignore` 漏了 `backups/` ⇒ 凭证密文被打进镜像**:`backups/` 里那份 +> 4.5 MB 的真实库快照含 `settings` 凭证密文与 `users` 口令散列, +> `docker build` 会把它烤进镜像层,推一次镜像等于把整库密钥分发出去。 +> +> 还收掉了一批 P1:采集/导出无跨度上限与频率限制、`WB_COOKIE_SECURE` 默认关且无 HSTS、 +> 账号锁定可被当武器(管理员用户名公开)、撞库不受限、验证码强度不足(可模板匹配)、 +> 改密码不失效其他会话、`instance.json` 未设 `0600`、无访问日志。 + > **1.3.0 修掉了什么**:此前「调度时刻 / 采集参数」是**个人级**配置,普通账号可以 > 自己改(等于让普通账号决定这台服务器怎么发请求、关不关 TLS 校验); > 且 `/logs` 对普通账号开放。现在这两块都收归管理员,普通账号只保留 @@ -43,19 +59,26 @@ | 项 | 做法 | 位置 | |---|---|---| | 全站鉴权 | 每个页面都有 `@login_required`,每个 `/api/*` 未登录返回 401 JSON | `security.login_required`、`web/views.py` | -| 角色(两档) | 管理员 / 普通。**仅管理员**:`/users`、`/api/users*`、`/logs`、`/logs/tail`、`vacuum` | `security.admin_required` | +| 角色(两档) | 管理员 / 普通。**仅管理员**:`/users`、`/api/users*`、`/logs`、`/logs/tail`、`vacuum`、`/backups`、`/api/backups*`(含下载与**恢复**) | `security.admin_required` | | **写权限只有一条规则** | `config.writable_by(key, is_admin)` —— 普通账号能写的只有 `USER_EDITABLE_KEYS = {cookie, user_agent}`(且只限本人那份)。页面与接口共用这一个判断,杜绝「界面置灰但接口还能写」 | `config.writable_by` | | **界面置灰 ≠ 安全边界** | 页面上的 disabled / hidden 只是「不给误导性按钮」;真正的闸门是服务端 `@admin_required` 与 `writable_by()`,所以直接敲 URL 或构造请求也过不去 | `web/views.py`、`web/api.py` | | 越权写整单拒绝 | 一次提交里只要含不可写的键,整个请求 `400` + `denied` 点名,不做「部分生效」 | `web/api.py:api_settings_post` | -| 停用即失效 | `current_user()` **每个请求**回查 `users.status`,不等 12 小时会话过期 | `security.current_user` | +| 停用即失效 | `current_user()` **每个请求**回查 `users.status` **与 `users.session_ver`**,不等 12 小时会话过期 | `security.current_user` | +| **会话版本号** | 改密码 / 管理员重置口令 / 停用 / **删除**账号 → `bump_session_ver()`,该账号所有其他设备上的会话**立刻作废**。改自己密码时把当前会话刷到新版本(否则改完立刻被自己踢下线)。**恢复备份**会让全站所有会话作废 | `db.session_ver_of` / `db.bump_session_ver` | | 自锁保护 | 管理员不能停用 / 降权 / 删除自己;也不能删掉最后一个启用的管理员 | `web/api.py` | | CSRF | 所有写请求必须带 `X-CSRF-Token`,页面注入 `window.WB_CSRF`,服务端统一拦截;退出登录也是 POST | `security.check_csrf` | | 会话签名 | Flask `secret_key` 由 `data/instance.json` 持有,首次启动随机生成 | `workbuddy_portal/config.py` | | 会话 cookie | `HttpOnly` + `SameSite=Lax` + `Path=/`;HTTPS 部署可设 `WB_COOKIE_SECURE=1` 打开 Secure | `workbuddy_portal/__init__.py` | -| 口令存储 | 加盐哈希(PBKDF2-SHA256),不存明文;强度校验(≥8 位、含两类字符、不得等于用户名) | `security.hash_password` / `password_problem` | +| **客户端 IP 唯一入口** | `security.client_ip()` —— 默认**不信任** `X-Forwarded-For`(直接用 `remote_addr`);`WB_TRUST_PROXY=1` 时取**最右侧**合法 IP(最近一跳由你自己的代理写入,客户端伪造不了)。含 `IPv4:port` 与 IPv6 处理。**所有** IP 相关判断(验证码限速 / 注册配额 / 登录限速 / 审计留痕)都走它 | `security.client_ip` | +| **强制 HTTPS** | `WB_FORCE_HTTPS=1` 时非 HTTPS 的 **GET/HEAD** 跳转(POST 不跳,否则会掉请求体);`WB_TRUST_PROXY` 关闭时不读 `X-Forwarded-Proto` | `security.needs_https_redirect` | +| 口令存储 | 加盐哈希(PBKDF2-SHA256),不存明文;强度校验(≥8 位、含两类字符、不得等于用户名)+ **黑名单** `WEAK_PASSWORDS`(34 个撞库字典头几页)。黑名单**只在设置/修改口令时生效**,登录不校验 —— 否则会把用老口令的存量用户挡在门外 | `security.hash_password` / `password_problem` | +| **初始口令不给默认值** | `WB_ADMIN_PASSWORD` 留空 → `secrets.token_urlsafe(12)` 随机生成,**只在启动日志打印一次、不写进数据库**(审计里出现口令等于永久留档) | `db._create_first_admin` | | 开放重定向 | 登录后的 `next` 只允许站内相对路径,`//evil.com` 一律回落到 `/` | `security.safe_next` | -| 失败限速 | **IP 与用户名两个维度**分别计数,任一维度连续失败 5 次锁 10 分钟;计数表有上限与 TTL | `security.auth_locked` / `note_auth_fail` | +| 失败限速(双维度、**强度刻意不同**) | **IP 维度**:连续失败 5 次**真锁** 10 分钟。**用户名维度**:只做秒级递增退避(封顶 60 秒)—— 「知道用户名就能把对方锁死 10 分钟」本身是攻击,而**管理员用户名在导航里是公开的**。另有**单来源登录尝试总量** 40 次 / 5 分钟(**含成功**),挡「慢慢撞、不触发失败阈值」。计数表有上限与 TTL | `security.auth_block_reason` / `note_try` / `try_window_left` | +| 失败提示不泄漏信息 | 提示是「本来源连续失败 N 次」而不是「剩余 N 次」——不给攻击者倒计时 | `web/views.py:login` | | 响应头 | CSP(`frame-ancestors 'none'`)、`X-Frame-Options: DENY`、`nosniff`、`Referrer-Policy: same-origin`、COOP;`/api/*` 与 `/captcha*` 带 `no-store` | `security.apply_security_headers` | +| **HSTS 只在真 HTTPS 时下发** | `COOKIE_SECURE or FORCE_HTTPS` 才发 `Strict-Transport-Security`。纯 HTTP 部署下发会让浏览器强升 https,表现成白屏 —— 很难归因的一类故障 | `security.apply_security_headers` | +| **访问日志** | waitress 自己不记 access log;本程序补上(跳过 `/static/` 与 `/captcha.png`),写进 `logs/app.log`,`WB_ACCESS_LOG` 控制 | `security._access_log` | ### 多用户数据隔离 @@ -89,17 +112,46 @@ | 项 | 做法 | 位置 | |---|---|---| | 图形验证码 | 手写 PNG 编码器 + 5×7 点阵字模 + 干扰线/噪点;**不用 SVG**(SVG 是文本,答案会明文出现在页面源码里) | `workbuddy_portal/captcha.py` | +| **抗模板匹配** | 让**同一字符两次渲染尽量不同**:逐字符随机旋转 ±22°、切变 ±0.32、缩放抖动、波浪偏移、粗刷笔画(旋转时不断裂)、两色斜向渐变背景、噪点 46 → 70、压线 2~3 条。实测同一验证码两次渲染**字节差异 76.9%**,字符仍可辨认 | `captcha._draw_char` / `captcha._brush_line` | | 答案不进会话 | 答案只写服务端 `captchas` 表;会话里仅存随机 id —— Flask 会话是「签名不加密」的,放答案等于送答案 | `security.issue_captcha` | | 一次性 | 校验后立即删除,且**先删后判**;5 分钟过期、按 `purpose` 隔离,不能拿注册的题去登登录 | `captcha.verify` | | 先验码后验密 | 登录先校验验证码再比对口令,避免攻击者拿「密码对不对」当提前信号跑完字典 | `web/views.py` | -| 出图限速 | 每来源 60 秒最多 40 张(不设限就是一条廉价的 CPU/带宽放大路径) | `security.captcha_fetch_allowed` | -| 注册配额 | 同 IP 每日最多注册 N 个(默认 3,可改);`allow_register=0` 可整体关闭 | `security.register_quota` | +| 出图限速 | 每来源 60 秒最多 40 张(不设限就是一条廉价的 CPU/带宽放大路径)。**来源按 `client_ip()` 判定**,伪造 XFF 无效 | `security.captcha_fetch_allowed` | +| 注册配额 | 同 IP 每日最多注册 N 个(默认 3,可改);`allow_register=0` 可整体关闭。**同样按 `client_ip()` 判定** | `security.register_quota` | + +### 资源与频率限制(对外提供服务时) + +单写者架构下**不加副本扛负载**,所以限制必须落在「单实例资源」与「单账号频率」两处。 + +| 项 | 做法 | 位置 | +|---|---|---| +| **采集三道闸门** | `POST /api/collect`:① 采集锁存在 → `409`(**有任务在跑就不能新建任务**);② `action_allowed("collect:uid", gap)` → `429`(默认最小间隔 60 秒);③ 跨度超上限 → `400` | `web/api.py:api_collect` | +| **采集跨度硬顶** | `COLLECT_MAX_RANGE_DAYS_HARD = 31`(= 1 个月)。`collect_max_range_days` 只是更严的旋钮,**改大也突破不了** —— 上限由代码兜底,不依赖写入校验。历史脏数据、手工改库都过不去 | `config.COLLECT_MAX_RANGE_DAYS_HARD`、`collect.max_range_days` | +| 调度时刻数硬顶 | `SCHEDULE_SLOTS_HARD_MAX = 12`,另有可配置的更严上限 `max_schedule_slots_per_day`(默认 6)。时刻数量直接决定采集频次,是「一个账号能不能把云端打满」的开关 | `config.normalize_setting` | +| 重操作最小间隔 | 采集 60s / CSV 导出 15s / **导出本人数据 10s** / `vacuum` 120s / 补全 prompt 60s / 重算 5s;超限 `429` 并给出剩余等待秒数 | `security.action_allowed` | +| 容器资源上限 | `cpus: 1.0` / `mem_limit: 512m` / `memswap_limit` **与 `mem_limit` 相等**(= 禁用 swap:超限会「被 OOM 杀掉」而不是「越来越慢」,后者更难查)/ `pids_limit: 256`(挡 fork 炸弹)/ `ulimits.nofile 4096:8192`(SQLite 除主库外还持有 `-wal` `-shm`,恢复期还要开临时库 + `ATTACH` 源库) | `docker-compose.yml` | +| 线程数受控 | `WB_THREADS`(容器默认 4,代码默认 8)决定单实例能同时吃进几个慢请求;1 核配 8 线程容易出现「都在等 CPU」的假并发 | `config.THREADS` | +| SSRF 收口 | `api_base` 拒绝云元数据地址(`169.254.169.254` / `metadata.google.internal` / `[fd00:ec2::254]`)—— SSRF 拿云上临时凭证最经典的一跳,且无任何合法采集场景需要它 | `config.normalize_setting` | + +### 备份与数据导出 + +| 项 | 做法 | 位置 | +|---|---|---| +| **归档含密钥,这是有意的取舍** | 归档里的 `instance.json` 带 `cookie_key` —— 没有它就永远解不开 `settings` 里的凭证密文,那样的「恢复」等于把所有人的 Cookie 弄丢。代价是**归档本身是最高机密**,因此它**永不入库、永不进镜像** | `backup.INSTANCE_NAME` | +| **不进镜像** | `.dockerignore` 排除 `backups/`;Dockerfile 在 `COPY` 之后有一条**构建期断言**,`/app/backups` 非空即构建失败。不能靠 `RUN rm` 补救:镜像层是只读叠加的,删掉只会多留一个含内容的中间层 | `.dockerignore`、`Dockerfile` | +| 文件名收口 | `safe_name()` 对下载与恢复接口吃进来的文件名做 basename 收敛 + 后缀 + 字符白名单(防 `../../etc/passwd`、绝对路径、`sub/..`) | `backup.safe_name` | +| 防 zip slip | `_extract_safely()` 只按**基名**解压 —— 归档可能是**外部给的**,`extractall` 会因为条目名里的 `..` 写到目录之外 | `backup._extract_safely` | +| 恢复前护栏 | 自动先给**当前**库打一份 `pre-restore` 快照;恢复错了还能回去 | `backup.restore` | +| **恢复后全站会话作废** | 所有账号 `session_ver` +1。光靠「从归档里搬 `session_ver`」不够:在打备份**之前**登录的那个人,Cookie 里的 `sv` 正好等于归档里的值,会话会「合法地」活下来,而它描述的账号与权限可能已经被换掉了 | `backup.restore` | +| 导出不含凭证 | `/profile/export` 给 4 份 CSV/JSON 与说明,**不含 Cookie 明文** —— 导出自己的数据不等于把凭证交出去。10 秒限速 | `web/views.py:profile_export` | +| 快照用在线备份 API | `Connection.backup` 而不是 `cp`:按页复制并持有读事务,采集正在写也能拿到一致快照。手工 `cp` 一个 WAL 库可能缺最近一段数据,**而且不报错** | `backup._snapshot` | ### 其它 | 项 | 做法 | 位置 | |---|---|---| -| 容器权限 | 运行层非 root(uid/gid 1000 `app`) | `Dockerfile` | +| 容器权限 | 运行层非 root(uid/gid 1000 `app`);`init: true` 让 tini 接管 PID 1,`docker stop` 能干净传到 python | `Dockerfile`、`docker-compose.yml` | +| **密钥文件权限** | `data/instance.json` 在 POSIX 上显式 `chmod 0600`(默认 umask 022 会留下 0644,同机其他用户可读)。恢复时写回也走同一处理,并先把原文件另存 `.pre-restore-` | `config._instance_init`、`backup._restore_instance` | | 上传体量 | `MAX_CONTENT_LENGTH = 4 MiB` | `workbuddy_portal/__init__.py` | | 不索引 | 页面带 `noindex, nofollow` | `web/templates/base.html` | @@ -110,8 +162,13 @@ `.gitignore` 已覆盖;改动忽略规则后请用 `git check-ignore -v ` 逐条复核。 注意 `.gitignore` **不支持行尾注释**(`path # 说明` 会让整行变成永不匹配的模式)。 +**也绝不进镜像**:`.dockerignore` 里 `backups/` 是**硬要求**,理由见上表(P0-3)。 +`Dockerfile` 里那条构建期断言就是防「以后有人又把它删了」。 + > `backups/` 同时也是一个**刻意不放在 `data/`** 的目录:`data/` 在 Docker 部署下是命名卷, > `docker compose down -v` 会把备份和正本一起删掉 —— 那正好是最需要备份的时刻。 +> 容器里它挂独立卷 `wb_backups`;**绝不用绑定挂载**(Windows 9p 下容器会 +> `unable to open database file`,且不自愈)。 ## 已知的**非**目标(部署方需自行处理) @@ -120,28 +177,48 @@ - **没有强制 HTTPS**:请由反向代理(nginx/Caddy)终止 TLS。纯 HTTP 部署时 **不要**设 `WB_COOKIE_SECURE=1`,否则浏览器不回传会话 cookie(表现为反复被弹回登录页)。 注意:纯 HTTP 下流量在网内是明文的,同一局域网内的中间人可以看到会话 Cookie 与 Prompt 内容。 + **反代配置有一个要点**:开启 `WB_TRUST_PROXY=1` 后,程序取 `X-Forwarded-For` 里 + **最右侧**的合法 IP —— 最右侧是离你最近的那一跳(由你自己的代理写入),客户端加不进去。 + 所以 nginx 写 `$proxy_add_x_forwarded_for`(保留链路,便于排查)或 `$remote_addr` + (覆盖)**都安全**;真正不能做的是去信最左边那一段(那是客户端自己填的)。 + 不设反代直接暴露时**必须保持 0**,否则三道 IP 防线全部失效(见 P0-1)。 - **没有 CSRF 之外的重放防护 / 没有 WAF**:公网暴露前请置于反向代理的 rate limit 之后。 -- **没有备份机制**:备份策略需要你自己定(见 `docs/DEPLOYMENT.md`)。 + 应用层已有采集/导出/恢复等重操作的最小间隔,但那只是「别自己把自己打满」, + 挡不住分布式来源。 +- **备份策略只做到「本机自动 + 手动下载」**:程序会按周期打快照、按份数清理、支持下载与恢复, + 但**不会**把归档推到异地。**备份留在同一台机器上只防「改错了」,不防「机器没了」** —— + 请自行把归档同步到别处(那是 3-2-1 原则里属于你的那一半)。 - **没有邮件/短信找回**:邮箱只是联系信息,不参与认证;密码忘掉由管理员重置。 -- **不建议直接暴露到公网**:设计前提是局域网或 VPN 内使用。 +- **不建议在没有任何前置防护时直接暴露到公网**:1.4.0 起 IP 来源、限速、资源上限、 + 采集跨度硬顶都补上了,但设计前提仍是「局域网或 VPN 内使用 + 前面有反代」。 - **Cookie 的获取方式由使用者负责**:手动从浏览器复制、**粘贴给自己的账号**。 它的权限等同于你的账号,请勿分享给他人;轮换后记得在「配置管理」页更新。 - **`cookie_key` 泄露 = 所有 Cookie 泄露**:`data/instance.json` 的权限应与数据库同级看待。 + **备份归档里也有一份 `instance.json`** —— 归档的保密等级与 `instance.json` 完全相同。 - **管理员在运维层面是可信角色**:能登录部署机器的人可以看到数据库文件、应用日志, 理论上也能改代码绕过界面限制。所以团队共用时请把「能登服务器」与「日常使用」分开 —— 界面层的隔离保护的是**使用者之间**,不是「使用者 vs 服务器管理员」。 + **管理员还能下载备份与执行恢复** —— 这等于对全库数据的完整读写权,授管理员前请想清楚。 ## 部署前的最小检查清单 -- [ ] 已修改默认管理员口令(`WB_ADMIN_PASSWORD`),不再是 `admin123` +- [ ] **未设 `WB_ADMIN_PASSWORD` 时已从启动日志抄下随机初始口令并改掉** + (`docker compose logs portal | grep -A6 管理员初始口令`)—— 现在**没有** `admin123` 兜底 - [ ] 已确认是否要开放自助注册;开放时按需调小 `register_max_per_ip` -- [ ] `data/` 与 `logs/` 目录的权限只对服务账号可读写(内含 `instance.json` 的两个密钥) +- [ ] `data/`、`logs/`、`backups/` 的权限只对服务账号可读写(前两者与 `instance.json` 同级机密) - [ ] 前面有反向代理并启用了 HTTPS;若是 HTTPS,已设 `WB_COOKIE_SECURE=1` +- [ ] **反代是否重写了 `X-Forwarded-For`**:是 → `WB_TRUST_PROXY=1` + (`$proxy_add_x_forwarded_for` 或 `$remote_addr` 均可,程序取最右侧); + 否(含直接暴露)→ **保持 `WB_TRUST_PROXY=0`**。这条搞错会让三道 IP 防线同时失效 +- [ ] 容器资源上限符合预期(`docker stats` 看 `MEM LIMIT` 是否为 512MiB;`docker inspect` 看 `PidsLimit`) - [ ] 确认 `data/instance.json` 没有被提交到任何仓库 -- [ ] `backups/` 也未被提交,且已确认 `.gitignore` 生效(`git check-ignore -v backups/x.sqlite`) -- [ ] 已规划备份(SQLite 库是唯一正本);备份文件同样受 `cookie_key` 保护,需按机密对待 -- [ ] 新增的账号一律用**普通角色**;只有确实需要维护实例的人才给管理员 +- [ ] `backups/` 也未被提交,且已确认 `.gitignore` 生效(`git check-ignore -v backups/x.zip`) +- [ ] **确认镜像里没有备份归档**:`docker run --rm <镜像> sh -c 'ls -A /app/backups'` 应为空 +- [ ] 已规划**异地**备份:程序只负责本机打快照,归档需自行同步到别的机器/对象存储 +- [ ] 新增的账号一律用**普通角色**;只有确实需要维护实例的人(含**下载备份与恢复**)才给管理员 +- [ ] 已把「采集最小间隔 / 单次最长跨度 / 每日时刻上限」三个刹车调到符合你的预期 + (「任务管理」页可改;跨度硬顶 31 天不可突破) - [ ] 升级后登录一次「配置管理」,确认 Cookie 状态为「已配置」而不是 「已保存但无法解密」 -- [ ] 升级到 1.3.0 后确认「任务管理」里调度时刻**对普通账号是只读的** - (用普通账号点一次「保存」应被拒并点名越权项) +- [ ] 升级到 1.4.0 后确认「任务管理」里调度时刻**对普通账号是只读的**, + 且访问 `/backups` 返回 403(用普通账号各试一次) diff --git a/docker-compose.hostdir.yml b/docker-compose.hostdir.yml index 484c4c4..8906c15 100644 --- a/docker-compose.hostdir.yml +++ b/docker-compose.hostdir.yml @@ -19,3 +19,7 @@ services: volumes: - ${WB_HOST_DATA_DIR:-./data}:/app/data - ${WB_HOST_LOG_DIR:-./logs}:/app/logs + # 备份同样落到宿主机目录(默认就是仓库里的 ./backups)。 + # 叠加后 `wb_backups` 那个命名卷变成没人用的空卷,可以随手删掉: + # docker volume rm workbuddy-portal_wb_backups + - ${WB_HOST_BACKUP_DIR:-./backups}:/app/backups diff --git a/docker-compose.yml b/docker-compose.yml index 785e20e..cdffb75 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -28,6 +28,28 @@ services: container_name: workbuddy-portal restart: unless-stopped init: true # tini 接管 PID 1:docker stop 能干净地传到 python + + # ---- 容器资源上限(对外提供服务时的第一道闸门)---- + # 应用层已经做了「采集频率 / 并发 / 跨度」三重限制,但那些是**业务**刹车; + # 这里限制的是**进程**本身能吃掉多少宿主机资源 —— 两者都要有: + # 业务刹车管「正常的重活别做太多」,容器上限管的是一次异常(内存泄漏、 + # 正则回溯、某次超大导出)能不能把整台机器带下去。 + # + # 单写者架构下**不要**靠加副本扛负载,所以「限制单实例资源 + 限制单账号 + # 频率」才是正解,而不是横向扩展(见文件头的设计取舍说明)。 + cpus: "${WB_CPUS:-1.0}" # 1 核:SQLite 单写者,多给核也并行不起来 + mem_limit: "${WB_MEM_LIMIT:-512m}" + memswap_limit: "${WB_MEM_LIMIT:-512m}" # 与 mem_limit 相等 = 禁用 swap, + # 否则内存超限会悄悄滑进 swap, + # 表现为「越来越慢」而不是「被 OOM 杀掉」 + pids_limit: ${WB_PIDS_LIMIT:-256} # 挡 fork 炸弹 + # 文件句柄:SQLite 会在主库之外再持有 -wal / -shm,备份快照与恢复期间 + # 还要同时开临时库 + ATTACH 源库,默认 1024 在高并发下偏紧。 + ulimits: + nofile: + soft: 4096 + hard: 8192 + ports: - "${WB_BIND:-0.0.0.0}:${WB_PORT:-8848}:8848" environment: @@ -35,16 +57,37 @@ services: WB_HOST: 0.0.0.0 WB_PORT: "8848" WB_ADMIN_USER: ${WB_ADMIN_USER:-admin} + # 留空时程序会生成**随机**口令并只在启动日志里打印一次(不再有 admin123 兜底), + # 所以首次部署要去 `docker compose logs portal | grep 口令` 抄一次。 WB_ADMIN_PASSWORD: ${WB_ADMIN_PASSWORD:-} WB_DISABLE_SCHEDULER: ${WB_DISABLE_SCHEDULER:-0} + # ---- 反向代理与传输安全(三个必须一起决定,别只改一个)---- + # WB_TRUST_PROXY:默认 0 = 不信任 X-Forwarded-For。 + # 直接暴露给公网时必须留 0 —— 否则攻击者每次换一个伪造的 XFF, + # 验证码限速 / 注册配额 / 登录锁定三道 IP 防线会同时失效。 + # 置 1 的前提:**你自己的**反代会写这个头。开启后程序取 XFF 里 + # **最右侧**的合法 IP(最近一跳由你的代理写入,客户端加不进去), + # 所以 nginx 写 $proxy_add_x_forwarded_for(保留链路,便于排查)或 + # 写 $remote_addr(覆盖)都可以 —— 关键是别去信最左边那段。 + WB_TRUST_PROXY: ${WB_TRUST_PROXY:-0} + # 前面挂了 HTTPS 反代时置 1:读到 X-Forwarded-Proto: https 就不跳转 + WB_FORCE_HTTPS: ${WB_FORCE_HTTPS:-0} # 会话 Cookie 是否只走 HTTPS。纯 HTTP 部署必须留 0:设成 1 时浏览器 # 不会回传会话 Cookie,表现为「登录成功又立刻跳回登录页」。改它要 up -d(环境变量)。 WB_COOKIE_SECURE: ${WB_COOKIE_SECURE:-0} + # 访问日志(waitress 自己不记 access log,出事无据可查时很要命) + WB_ACCESS_LOG: ${WB_ACCESS_LOG:-1} + # waitress 线程数 = 单实例能同时吃进几个慢请求(采集/导出/备份恢复) + WB_THREADS: ${WB_THREADS:-4} + WB_BACKUP_DIR: /app/backups WB_IMPORT_CREDS: ${WB_IMPORT_CREDS:-0} WB_IMPORT_XLSX: ${WB_IMPORT_XLSX:-} volumes: - wb_data:/app/data # 数据正本 + 导出 + secret_key - wb_logs:/app/logs # 应用日志(滚动 2 MB × 3) + # 备份**单独一个卷**:备份与正本同卷时,一次 `down -v` 或卷损坏会把 + # 两者一起带走 —— 那正是最需要备份的时刻。分开挂才有意义。 + - wb_backups:/app/backups # 可选:把编辑器配置挂进来,配合 WB_IMPORT_CREDS=1 自动接管 cookie # - ${WB_EDITOR_SETTINGS:-./nonexistent.json}:/mnt/editor-settings.json:ro healthcheck: @@ -62,3 +105,8 @@ services: volumes: wb_data: wb_logs: + # 备份卷。**必须与 wb_data 分开** —— 同卷时 `down -v` 会把正本与备份一起删。 + # 想让它跟着正本走(比如整套搬到别的机器)就先 `docker run --rm -v + # workbuddy-portal_wb_backups:/b -v $PWD/backups:/o alpine cp -a /b/. /o/` + # 把归档捞到宿主机目录里,再一起搬。 + wb_backups: diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index 6e708f5..705ddb0 100644 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -18,14 +18,19 @@ PORT="${WB_PORT:-8848}" log() { echo "[entrypoint] $*"; } -log "workbuddy-portal 启动:data=${WB_DATA_DIR:-/app/data} logs=${WB_LOG_DIR:-/app/logs} 监听 ${HOST}:${PORT} TZ=${TZ:-未设置}" +log "workbuddy-portal 启动:data=${WB_DATA_DIR:-/app/data} logs=${WB_LOG_DIR:-/app/logs} backups=${WB_BACKUP_DIR:-/app/backups} 监听 ${HOST}:${PORT} TZ=${TZ:-未设置}" # ---------- 1. 初始化(幂等:users 非空时不会重建管理员)---------- +# 口令策略(1.4.0 起):WB_ADMIN_PASSWORD 为空时**没有**默认口令, +# manage.py init 会生成一个随机口令并只打印一次 —— 抄下来,否则进不去。 if [ -n "${ADMIN_PASSWORD}" ]; then python manage.py init --user "${ADMIN_USER}" --password "${ADMIN_PASSWORD}" else + log "未设置 WB_ADMIN_PASSWORD。若这是首次初始化,下面「管理员初始口令」一行就是" + log " 唯一的获取机会(程序不保存明文,库里只有散列,找不回来):" + log " docker compose logs portal | grep -A2 '管理员初始口令'" + log " 已在运行过一次的实例上,这一行不会再出现(管理员早就建好了)。" python manage.py init --user "${ADMIN_USER}" - log "未设置 WB_ADMIN_PASSWORD —— 首次部署的默认密码是 admin123,请登录后立刻修改" fi # ---------- 2. 可选:从挂载进来的 VSCode/Cursor/Trae settings.json 接管 cookie 与 UA ---------- diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 6683c5a..8ef89a9 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -8,6 +8,194 @@ --- +## [1.4.0] — 2026-09-16 + +**主题:备份管理 · 对外提供服务的安全加固 · 资源与频率限制** + +三件事:① 补齐「备份 / 恢复 / 导出本人数据」这条数据安全链路;② 修掉三类 P0 与 +一批 P1;③ 让这个程序可以**安全地暴露到公网**——资源在容器层限制、任务频率在实例层 +限制、采集跨度有硬上限。 + +**数据不会丢**:`manage.py init` 检测到 `PRAGMA user_version` 3 → 4 时自动迁移, +只做一件事(`ALTER TABLE users ADD session_ver`,非空、默认 0)+建一张新表 +`backups`。**无数据搬运、无键位变动**,可重复执行。 + +--- + +### 备份管理(新功能) + +- **`workbuddy_portal/backup.py`(新模块)** —— 备份的全部逻辑 + - **快照走 SQLite 在线备份 API**(`Connection.backup`),不是 `cp`。 + 它按页复制并持有读事务,所以**采集正在写的时候拿到的也是「某一时刻的完整库」**。 + 手工 `cp data/usage.sqlite` 做不到这点:`-wal` 里可能还有没落盘的帧, + 拷出来的库会缺最近一段数据,而且**不报错**。 + - **归档 = 一个 zip**:所有 `data/*.sqlite` + `manifest.json` + `instance.json`。 + 单文件、可校验、可搬到别的机器恢复。 + - **`backup_keep` 保留份数**:超出后按时间删最旧的(只按**磁盘上真实存在**的算份数, + 已经被手工删掉的条目不占名额)。 +- **`backups` 表 + 磁盘双向对齐**:`sync_index()` 把磁盘上的归档登记进表、 + 把消失的标记 `missing=1`(不删行,保留「这里曾有过一份」的痕迹)。 + **磁盘是事实来源**,表只是缓存 —— 手工拷进来/手工删掉都能被正确呈现。 +- **管理员页面 `/backups`**(导航在「用户管理」前):KPI(份数 / 占用 / 自动备份状态 / + 上次与下次)、自动备份设置表单、归档内容说明、备份列表(下载 / 恢复 / 删除)。 +- **接口**(全部仅管理员): + `GET /api/backups`、`POST /api/backups`、`GET /api/backups/`(下载)、 + `POST /api/backups//restore`、`POST /api/backups//delete`、 + `POST /api/backups/prune`。 +- **恢复的三条设计决定**(每条都对应一个会真的踩到的坑) + 1. **SQL 级整表替换,不做文件 swap**。解包 → 临时库先迁移到当前 schema → + 一个 `BEGIN IMMEDIATE` 事务里整表搬过去。好处:不需要停机、不依赖「没有别人 + 持有文件句柄」(Windows 上文件 swap 会因句柄占用直接失败)、备份是旧版本 + (uv=2/3)也能恢复、中途失败就是一次回滚。 + 2. **列名交集而非 `SELECT *`**。老库的列是 `ALTER` 追加的,顺序与新库建表语句 + 不一定一致 —— `SELECT *` 会**静默错位**,字段整体串位而值都「合法」, + 是最难查的一类数据损坏。 + 3. **恢复前自动打一份 `pre-restore` 快照**。恢复错了还能回到恢复之前。 +- **恢复后让所有会话失效**:把所有账号的 `session_ver` +1。光靠「从归档里搬 + `session_ver`」是不够的 —— 在打备份**之前**登录的那个人,他那张 Cookie 里的 `sv` + 正好等于归档里的值,会话会「合法地」活下来,而它描述的账号与权限可能已经被 + 这次恢复整个换掉了。 +- **`instance.json` 在归档里是必要的,不是顺手加的**:没有 `cookie_key` 就永远 + 解不开 `settings` 里的凭证密文,那样的「恢复」等于把所有人的 Cookie 弄丢。 + 代价是归档本身含密钥 ⇒ 它**永不入库、永不进镜像**(见下方 P0-3)。 + 恢复时可以 `include_instance=false` 只搬数据、保留本机当前密钥。 +- **`safe_name()` 路径穿越收口**:下载与恢复接口都直接吃文件名, + 这里做 basename 收敛 + 后缀 + 字符白名单(实测拦住 `../../etc/passwd`、 + `x.txt`、`''`、`..`、`a b.zip`)。 +- **`_extract_safely()` 防 zip slip**:归档可能是**外部给的**, + `extractall` 会因为条目名里的 `..` / 绝对路径写到目录之外。 +- **普通用户导出本人全部数据**:`GET /profile/export`(任何登录用户,10 秒限速), + 用 `SpooledTemporaryFile(max_size=16MB)` 边生成边下发,含 4 份 CSV/JSON + (使用记录 / 采集历史 / 操作审计 / 我的账号与配置)+ 说明。 + **不含 Cookie 明文** —— 导出自己的数据不等于把凭证交出去。 +- **CLI**:`manage.py backup [--note]` / `backups [--prune] [--keep N]` / + `restore <文件名> --yes`(破坏性操作必须显式 `--yes`,不加只打印将要发生什么)。 +- **自动备份**:`backup_enabled` / `backup_interval_hours` / `backup_keep` 三个实例级键。 + 由 `scheduler.tick()` 每 20 秒检查一次(**有采集在跑就跳过**,不跟采集抢磁盘), + 到期就打一份并按份数清理。首次部署无需等待 —— 库里没有自动备份记录时第一轮 tick 即触发。 + +### P0 修复 + +- **P0-1 `X-Forwarded-For` 可伪造 → 三道 IP 防线全废** + - 实测:修改前每次换一个伪造的 `X-Forwarded-For`,45 次验证码请求**全部放行**; + 验证码限速、注册配额、登录锁定三道防线同时失效。 + - 新增 **`security.client_ip()`** —— 全站**唯一**取客户端地址的入口。 + 默认**不信任** XFF,直接用 `remote_addr`;`WB_TRUST_PROXY=1` 时取**最右侧**合法 IP + (最近的一跳由你自己的代理写入,客户端伪造不了),含 `IPv4:port` 与 IPv6 处理。 + - 原来散落在 `views.py` / `api.py` 的 6 处 `request.remote_addr` 全部改走它。 +- **P0-2 默认口令 `admin123` 硬编码兜底** + - 现在 `WB_ADMIN_PASSWORD` 为空时,程序用 `secrets.token_urlsafe(12)` 生成随机口令, + **只在启动日志里打印一次**,且**不写进数据库**(审计日志里出现口令等于永久留档)。 + `manage.py init` 会用醒目的方框打印它 —— 库里只有散列,日志一滚就再也拿不回来。 + - `docker/entrypoint.sh` 里那句「默认密码是 admin123」的提示同时删除(它会给出一个 + 永远登录不上的口令)。 +- **P0-3 `.dockerignore` 漏了 `backups/` → 凭证密文被打进镜像** + - `backups/` 里躺着 `usage.sqlite.bak-pre-v13`(4.5 MB 的**真实生产库**快照), + 含 `settings` 的凭证密文与 `users` 的口令散列。而 `.dockerignore` 里没有任何 + 规则能匹配 `backups/` ⇒ `docker build` 会把它原样烤进镜像层, + **推一次镜像等于把整库密钥分发给所有能拉镜像的人**。 + - 补 `backups/` 与 `data/demo/`;并在 Dockerfile 里加一条**构建期断言**: + `COPY` 之后若 `/app/backups` 非空就直接构建失败。 + 靠「记得改 .dockerignore」不可靠 —— 让构建自己拒绝。 + 注意这不能靠 `RUN rm` 补救:镜像层是只读叠加的,删掉只会多留一个含内容的中间层。 + +### P1 修复 + +- **采集与导出没有任何跨度上限与频率限制**:一个注册账号就能反复打 `/api/collect` + 把云端与线程池占满。现在 `/api/collect` 有**三道闸门**: + ① 采集锁存在 → `409`(**有任务在跑就不能新建任务**); + ② `action_allowed("collect:uid", gap)` → `429`(默认最小间隔 60 秒); + ③ 跨度超过上限 → `400`。 +- **`COLLECT_MAX_RANGE_DAYS_HARD = 31` / `SCHEDULE_SLOTS_HARD_MAX = 12`**: + 代码层**硬顶**。`collect_max_range_days` / `max_schedule_slots_per_day` 只是更严的 + 旋钮,**改大也突破不了** —— 上限必须由代码兜底,不能只靠写入校验。 + 历史脏数据、手工改库都过不去。(用户要求:「最长跨度的为 1 个月」) +- **`action_allowed(key, min_interval)` 通用重操作限速**:采集 / 导出 / 导出本人数据 / + `vacuum` / 补全 prompt / 重算 各有最小间隔(`{"fill-prompt":60, "export-csv":15, + "vacuum":120, "recount":5}`,采集与 CSV 导出见各自常量)。 +- **`WB_COOKIE_SECURE` 默认 0、无 HSTS**:`_env_flag()` 统一解析布尔环境变量; + `apply_security_headers()` 在 **`COOKIE_SECURE or FORCE_HTTPS`** 时下发 HSTS + (**只在真正走 HTTPS 时下发** —— 纯 HTTP 部署下发会让浏览器强升 https, + 表现成白屏,是个很难归因的故障)。 +- **账号锁定可以被当武器**:知道用户名就能把对方锁死 10 分钟,而**管理员用户名在导航栏里 + 是公开的**。改成双维度、强度刻意不同: + IP 维度真锁(`MAX_LOGIN_FAILS` + `LOGIN_LOCK_MINUTES`), + 用户名维度只做秒级递增退避(`USER_SOFT_THRESHOLD` / `USER_SOFT_CAP_SECONDS=60`)。 + 另外加**单 IP 登录尝试总量**(`LOGIN_ATTEMPTS_PER_IP=40` / `LOGIN_ATTEMPTS_WINDOW=300`, + **含成功**)挡住「慢慢撞、不触发失败阈值」的形态。 + 登录失败提示也从「剩余 N 次」改成「本来源连续失败 N 次」—— 不再给攻击者倒计时。 +- **改密码不失效其他会话**:新增 `users.session_ver`(`DB_SCHEMA_VERSION` 3 → 4), + `current_user()` 每个请求把会话里的 `sv` 与库里比对,不等就丢会话。 + 改自己密码时会**把当前会话刷新到新版本**(否则改完立刻被自己踢下线)。 + 管理员重置口令 / 停用账号 / 删除账号同样 `bump_session_ver()` —— 停用立即生效, + 不用等会话过期。 +- **验证码强度不足**(字模在源码里、只整体放大 5 倍、无扭曲,容易被模板匹配): + 改为让**同一字符两次渲染尽量不同** —— 逐字符随机旋转 ±22°、切变 ±0.32、缩放抖动、 + 波浪偏移、粗刷笔画(旋转时不断裂)、两色斜向渐变背景、噪点 46 → 70、压线 2~3 条。 + 实测同一验证码两次渲染字节差异 **76.9%**,字符仍可辨认。 +- **`instance.json` 未设权限**:POSIX 上显式 `chmod 0600`(默认 umask 022 会留下 0644, + 同机其他用户可读)。恢复时写回也走同一处理。 +- **无访问日志**:waitress 自己不记 access log,出事无据可查。 + 新增 `security._access_log()`(跳过 `/static/` 与 `/captcha.png`,写进 `logs/app.log`), + 由 `WB_ACCESS_LOG` 控制(默认开)。 +- **`api_base` 可指向云元数据地址**:拦截 `169.254.169.254` / + `metadata.google.internal` / `[fd00:ec2::254]` —— 这是 SSRF 拿云上临时凭证最经典的一跳, + 而没有任何合法采集场景需要它。 +- **口令黑名单**:`WEAK_PASSWORDS`(34 个自动撞库字典的头几页)。 + 只在**设置/修改**口令时校验,登录不校验 —— 否则会把用老口令的存量用户挡在门外。 + +### 新增(配置项) + +`GLOBAL_KEYS` 17 → **23** 键。新增的 6 个都是实例级: + +| 键 | 默认 | 范围 | 说明 | +|---|---|---|---| +| `max_schedule_slots_per_day` | 6 | 1~12 | 每日调度时刻数上限(挡住「填 200 个时刻」) | +| `collect_min_interval_seconds` | 60 | 0~3600 | 同一账号两次手动采集的最小间隔 | +| `collect_max_range_days` | 31 | 1~31 | 单次采集的最长跨度(硬顶 31 天 = 1 个月) | +| `backup_enabled` | 1 | 0/1 | 是否开启自动备份 | +| `backup_interval_hours` | 24 | 1~720 | 备份周期 | +| `backup_keep` | 7 | 1~100 | 保留最近几份 | + +新增环境变量:`WB_TRUST_PROXY`、`WB_FORCE_HTTPS`、`WB_ACCESS_LOG`、`WB_THREADS`、 +`WB_BACKUP_DIR`、`WB_CPUS` / `WB_MEM_LIMIT` / `WB_PIDS_LIMIT`(compose 用)、 +`WB_HOST_BACKUP_DIR`(叠加层用)。 + +### 部署与外网暴露 + +- **`BACKUP_DIR` 刻意不在 `data/` 里面**:容器里 `data/` 是数据卷, + `docker compose down -v` 会把正本与副本一起删 —— 那正好是最需要备份的时刻。 + 新增 `WB_BACKUP_DIR`(容器里 `/app/backups`)+ compose **命名卷 `wb_backups`**。 + **绝不退回绑定挂载**(Windows 9p 下容器会 `unable to open database file`)。 +- **容器资源上限**(用户要求「资源从容器上限制」): + `cpus: 1.0` / `mem_limit: 512m` / `memswap_limit` 与 `mem_limit` **相等**(= 禁用 swap, + 这样超限会「被 OOM 杀掉」而不是「越来越慢」,后者更难查)/ + `pids_limit: 256`(挡 fork 炸弹)/ `ulimits.nofile 4096:8192` + (SQLite 除主库外还持有 `-wal` `-shm`,恢复期还要开临时库 + `ATTACH` 源库)。 +- **`manage.py serve` 的线程数改为 `config.THREADS`**(原为硬编码 8): + 它决定单实例能同时吃进几个慢请求(采集 / 导出 / 备份恢复),是资源上限的一部分。 + 1 核配 8 线程容易出现「都在等 CPU」的假并发,容器默认给 4。 +- 新增 `docker-compose.yml` 里 `WB_TRUST_PROXY` / `WB_FORCE_HTTPS` / + `WB_COOKIE_SECURE` 三者相邻并写明「必须一起决定」—— 拆开写很容易出现 + 「开了强制 HTTPS 却忘了 Secure」这类半截配置。 + +### 其它 + +- `scheduler.py` 的 `tick()` 末尾增加自动备份检查(在账号循环**之外**,因为它是 + 实例级、与具体账号无关)。 +- `collect.py` 新增 `max_range_days(conn)` / `min_interval_seconds(conn)`: + 接口、页面、`sync()` 三处共用**唯一口径**(此前会出现「页面显示的限值」与 + 「接口实际校验的限值」不是同一个数的情况)。 +- `sync()` 因跨度上限收窄起点时打一条 `[warn] 请求跨度超过上限 %d 天,已自动收窄起点`。 +- `backup.sync_index()` 现在从 manifest 里读真实的 `trigger` / `actor` / `note`, + 不再一律标成 `external` —— 恢复前最需要判断的恰恰是「这份是自动备份、 + 还是我手工留的、还是恢复前系统自动存的那一份」。 +- **新增页**:`/backups`(仅管理员)、`/profile/export`(任何登录用户)。 +- **测试**:`tools/smoke.py` 与 `tools/check_live.py` 补备份链路、越权、 + 跨度上限、并发拒绝、会话失效断言。 + +--- + ## [1.3.0] — 2026-09-16 **主题:权限收敛 · 配置作用域统一 · 目录规范化** diff --git a/docs/DEPLOYMENT.md b/docs/DEPLOYMENT.md index 9c87f6a..7ec3f2b 100644 --- a/docs/DEPLOYMENT.md +++ b/docs/DEPLOYMENT.md @@ -90,17 +90,26 @@ workbuddy-portal/ **① 首个管理员账号。** 数据库为空时才会创建,之后改密码走「用户管理」或 `manage.py passwd`。 ```bash -# 默认是 admin / admin123 —— 局域网部署下必须改掉! python manage.py init --user admin --password '你的强密码' ``` +> **不设密码会怎样**(v1.4.0 起):程序用 `secrets.token_urlsafe(12)` 生成一个**随机**口令, +> 用醒目的方框打印在输出里,**只在这一次打印**。库里只有散列,日志一滚就再也拿不回来。 +> **没有 `admin123` 这类默认口令了** —— 硬编码一个默认口令等于把公网实例的钥匙挂在门上。 +> 所以要么现在就显式设 `WB_ADMIN_PASSWORD`,要么把打印出来的那行抄走。 +> 容器里的对应做法见 [11.10 拿不到管理员初始口令](#1110-拿不到管理员初始口令)。 + **② 访问方式。** 决定 `WB_BIND` 与 `WB_COOKIE_SECURE`: -| 场景 | `WB_BIND` | `WB_COOKIE_SECURE` | -|---|---|---| -| 只本机用 | `127.0.0.1` | `0` | -| 局域网 `http://IP:8848` | `0.0.0.0` | **`0`**(设成 1 会导致「登录成功又跳回登录页」) | -| 域名 + HTTPS 反代 | `127.0.0.1` | `1` | +| 场景 | `WB_BIND` | `WB_COOKIE_SECURE` | `WB_TRUST_PROXY` | +|---|---|---|---| +| 只本机用 | `127.0.0.1` | `0` | `0` | +| 局域网 `http://IP:8848` | `0.0.0.0` | **`0`**(设成 1 会导致「登录成功又跳回登录页」) | **`0`** | +| 域名 + HTTPS 反代 | `127.0.0.1` | `1` | **`1`**(前提:反代会写 XFF,见第六节) | + +> `WB_TRUST_PROXY` 是 v1.4.0 新增的,**默认 0**。直接暴露给公网时留 0; +> 设成 1 而反代又没写该头,攻击者每次换一个伪造的 `X-Forwarded-For` 就能让 +> 验证码限速 / 注册配额 / 登录锁定**三道防线同时失效**(实测 45 次请求全部放行)。 ### 2.4 从 v1.0 迁移历史数据(可选) @@ -157,16 +166,28 @@ WorkingDirectory=/opt/workbuddy-portal # TZ 直接决定调度时刻与所有日期口径,务必设对 Environment=TZ=Asia/Shanghai Environment=WB_COOKIE_SECURE=0 +# 备份落点默认就是 <仓库>/backups,显式写出来便于以后搬迁 +Environment=WB_BACKUP_DIR=/opt/workbuddy-portal/backups +# 直连(前面没有反代)时保持 0 —— 设成 1 会让三道 IP 防线可被伪造 XFF 绕过 +Environment=WB_TRUST_PROXY=0 ExecStart=/opt/workbuddy-portal/.venv/bin/python manage.py serve --host 0.0.0.0 --port 8848 Restart=always RestartSec=5 +# ---- 资源上限(与容器部署的 cpus / mem_limit 对应)---- +# 单写者架构下不靠加副本扛负载,所以「限制单实例吃多少」才是正解。 +# 数值按需调整:内存超限被 OOM 杀掉有明确日志,比「越来越慢」好查得多。 +CPUQuota=100% +MemoryMax=512M +MemorySwapMax=0 +TasksMax=64 + # ---- 加固(可选但建议)---- NoNewPrivileges=true PrivateTmp=true ProtectSystem=strict ProtectHome=true -ReadWritePaths=/opt/workbuddy-portal/data /opt/workbuddy-portal/logs +ReadWritePaths=/opt/workbuddy-portal/data /opt/workbuddy-portal/logs /opt/workbuddy-portal/backups [Install] WantedBy=multi-user.target @@ -179,11 +200,15 @@ sudo systemctl status workbuddy-portal journalctl -u workbuddy-portal -f ``` -> `User=workbuddy` 需要事先建号,并让 `data/`、`logs/` 归它所有: +> `User=workbuddy` 需要事先建号,并让 `data/`、`logs/`、`backups/` 归它所有: > ```bash > sudo useradd --system --home /opt/workbuddy-portal --shell /usr/sbin/nologin workbuddy -> sudo chown -R workbuddy:workbuddy /opt/workbuddy-portal/data /opt/workbuddy-portal/logs +> sudo chown -R workbuddy:workbuddy /opt/workbuddy-portal/data \ +> /opt/workbuddy-portal/logs \ +> /opt/workbuddy-portal/backups > ``` +> `backups/` 千万别漏 —— 漏了的表现是「备份管理」页能打开,但一备份就报错, +> 日志里是 `PermissionError`(服务以 `workbuddy` 身份跑,写不进 root 拥有的目录)。 ### 3.2 Windows @@ -266,20 +291,54 @@ docker compose logs -f ### 4.4 `.env` 主要变量 +#### 监听与调度 + | 变量 | 默认 | 说明 | |---|---|---| | `WB_BIND` | `0.0.0.0` | 宿主机绑定地址。只想本机访问就设 `127.0.0.1` | | `WB_PORT` | `8848` | 宿主机端口 | | `TZ` | `Asia/Shanghai` | **影响调度时刻与所有日期口径** | +| `WB_DISABLE_SCHEDULER` | `0` | `1` = 不启动调度线程(只跑手动采集)。多副本时除第一个外都要设 1 | | `WB_ADMIN_USER` | `admin` | 首个管理员用户名(只在库为空时生效) | -| `WB_ADMIN_PASSWORD` | 空 | 首个管理员密码。**留空会用 `admin123`**,务必显式设置 | -| `WB_COOKIE_SECURE` | `0` | `1` = 会话 Cookie 只走 HTTPS。**纯 HTTP 部署设成 `1` 会导致「登录成功又跳回登录页」** | -| `WB_DISABLE_SCHEDULER` | `0` | `1` = 不启动调度线程(只跑手动采集) | -| `WB_IMPORT_CREDS` | `0` | `1` = 启动时尝试从挂载的编辑器配置导入 Cookie | -| `WB_IMPORT_XLSX` | 空 | 启动时一次性导入这个路径的官网 xlsx | +| `WB_ADMIN_PASSWORD` | 空 | 首个管理员密码。**留空则随机生成并只在启动日志打印一次**(v1.4.0 起不再有 `admin123` 兜底) | +| `WB_THREADS` | `4`(compose)/ `8`(代码) | waitress 线程数 = 单实例能同时吃进几个慢请求(采集 / 导出 / 备份恢复) | | `WB_IMAGE` | `git.iwali.top/…:latest` | 镜像名(见 [第七节](#七把代码与镜像推到-gitea-注册表)) | -> `TZ`、`WB_COOKIE_SECURE`、`WB_DISABLE_SCHEDULER` 都是**进程环境变量**, +#### 容器资源上限(v1.4.0 起) + +| 变量 | 默认 | 说明 | +|---|---|---| +| `WB_CPUS` | `1.0` | CPU 上限(允许小数)。SQLite 是单写者,1 核够用,压测后再调 | +| `WB_MEM_LIMIT` | `512m` | 内存上限。**同时会设 `memswap_limit` 为同值 = 禁用 swap** | +| `WB_PIDS_LIMIT` | `256` | 进程/线程数上限,挡 fork 炸弹 | + +> **为什么 swap 要禁用**:不禁用的话内存超限会悄悄滑进 swap,表现为「越来越慢」 +> 而不是「被 OOM 杀掉」——后者有明确的日志和退出码,前者只会让人怀疑磁盘。 +> `nofile` 上限(4096:8192)在 compose 里写死,因为 SQLite 除主库外还持有 `-wal` `-shm`, +> 恢复期间还要开临时库 + `ATTACH` 源库,默认 1024 在高并发下偏紧。 + +#### 反向代理与传输安全(**三个必须一起决定**) + +| 变量 | 默认 | 说明 | +|---|---|---| +| `WB_TRUST_PROXY` | `0` | 是否信任 `X-Forwarded-For`。**默认不信任**。设 1 的前提是「你自己的反代会写这个头」(见第六节,两种 nginx 写法都安全) | +| `WB_FORCE_HTTPS` | `0` | `1` = 非 HTTPS 的 GET/HEAD 跳转到 https(POST 不跳,否则会掉请求体) | +| `WB_COOKIE_SECURE` | `0` | `1` = 会话 Cookie 只走 HTTPS。**纯 HTTP 部署设成 `1` 会导致「登录成功又跳回登录页」** | +| `WB_ACCESS_LOG` | `1` | 是否记访问日志(写进 `logs/app.log`,跳过静态资源与验证码图) | + +> **HSTS 的触发条件正是 `WB_COOKIE_SECURE` 或 `WB_FORCE_HTTPS` 为 1** —— +> 所以纯 HTTP 部署不会下发 HSTS(下发会让浏览器强升 https,表现成白屏)。 + +#### 可选:启动时自动导入 + +| 变量 | 默认 | 说明 | +|---|---|---| +| `WB_IMPORT_CREDS` | `0` | `1` = 启动时尝试从挂载的编辑器配置导入 Cookie | +| `WB_IMPORT_XLSX` | 空 | 启动时一次性导入这个路径的官网 xlsx | +| `WB_BACKUP_DIR` | `/app/backups` | 归档落点(相对**仓库目录**,不是 `data/`,理由见 [8.1](#81-备份什么)) | + +> `TZ`、`WB_COOKIE_SECURE`、`WB_TRUST_PROXY`、`WB_FORCE_HTTPS`、`WB_ACCESS_LOG`、 +> `WB_THREADS`、`WB_CPUS` / `WB_MEM_LIMIT` / `WB_PIDS_LIMIT` 都是**进程环境变量**, > `docker compose restart` **不生效**,必须 `docker compose up -d` 重建容器。 ### 4.5 数据落点:命名卷,不是绑定挂载 @@ -288,6 +347,13 @@ docker compose logs -f |---|---|---| | `/app/data` | 命名卷 `workbuddy-portal_wb_data` | `usage.sqlite`(正本)、`instance.json`(密钥)、`exports/` | | `/app/logs` | 命名卷 `workbuddy-portal_wb_logs` | `app.log`(滚动 2 MB × 3) | +| `/app/backups` | 命名卷 `workbuddy-portal_wb_backups` | 备份归档 `usage-<时间戳>.zip`(**含 `instance.json`,机密等级等同密钥**) | + +> **备份为什么必须单独一个卷**:如果和 `wb_data` 同卷,一次 `docker compose down -v` +> 或卷损坏会把正本与备份**一起**带走 —— 那正好是最需要备份的时刻。 +> 而且容器里的 `/app/backups` 若不挂卷,写进去的文件只存在于容器**可写层**: +> `docker restart` 还能留住,但 `docker compose up -d --build` 重建容器就没了 —— +> 「构建完发现备份全丢」是个会真的踩到的坑。现在挂的是独立命名卷。 **为什么是命名卷而不是脚本目录里的 `./data`**(这不是随手选的): @@ -308,33 +374,41 @@ docker compose exec portal python manage.py passwd admin 新密码 docker compose logs -f portal ``` -#### 想让宿主机直接看到数据 / 日志 +#### 想让宿主机直接看到数据 / 日志 / 备份 叠加 `docker-compose.hostdir.yml`: ```bash docker compose -f docker-compose.yml -f docker-compose.hostdir.yml up -d -# 可用 WB_HOST_DATA_DIR / WB_HOST_LOG_DIR 指定目标目录 +# 可用 WB_HOST_DATA_DIR / WB_HOST_LOG_DIR / WB_HOST_BACKUP_DIR 指定目标目录 +docker volume rm workbuddy-portal_wb_backups # 叠加后这个卷没人用,可删 ``` > ⚠️ **只建议 Linux 宿主机使用**(bind mount 与容器同一文件系统,WAL 语义正常)。 > Windows + Docker Desktop 下必然踩上面那个坑。 > > Linux 首次运行若报 `unable to open database file`,是宿主目录属主与容器内 uid 1000 -> 不一致:`sudo chown -R 1000:1000 ./data ./logs` +> 不一致:`sudo chown -R 1000:1000 ./data ./logs ./backups` ### 4.6 常用命令 ```bash docker compose ps docker compose logs -f --tail=100 +docker compose logs portal | grep -A6 '管理员初始口令' # 首次初始化时唯一一次机会 docker compose restart # 注意:环境变量改动 restart 不生效 docker compose down # 停并删容器,数据保留在卷里 +docker compose down -v # ⚠️ 连卷一起删(数据 + 日志 + 备份全没) docker compose up -d --build # 改完代码重新构建 docker compose exec portal python manage.py collect # 手动采集一次 docker compose exec portal python manage.py users # 账号 / 角色 / 凭证状态 -docker compose exec portal python manage.py status # 调度与最近采集 +docker compose exec portal python manage.py status # 调度与最近采集 +docker compose exec portal python manage.py backups # 现有备份清单 + +# 看容器实际吃到的资源上限(验证 compose 的 limits 生效了) +docker stats --no-stream workbuddy-portal +docker inspect -f 'CPU={{.HostConfig.NanoCpus}} MEM={{.HostConfig.Memory}} PIDS={{.HostConfig.PidsLimit}}' workbuddy-portal ``` --- @@ -363,10 +437,19 @@ name: workbuddy-portal services: portal: - image: git.iwali.top/wangchuanli/workbuddy-portal:1.3.0 + image: git.iwali.top/wangchuanli/workbuddy-portal:1.4.0 container_name: workbuddy-portal restart: unless-stopped init: true # tini 接管 PID 1,docker stop 能干净传到 python + + # ---- 容器资源上限(对外提供服务时的第一道闸门)---- + cpus: "${WB_CPUS:-1.0}" # SQLite 单写者,多给核也并行不起来 + mem_limit: "${WB_MEM_LIMIT:-512m}" + memswap_limit: "${WB_MEM_LIMIT:-512m}" # 与 mem_limit 相等 = 禁用 swap + pids_limit: ${WB_PIDS_LIMIT:-256} + ulimits: + nofile: {soft: 4096, hard: 8192} + ports: - "${WB_BIND:-0.0.0.0}:${WB_PORT:-8848}:8848" environment: @@ -378,10 +461,17 @@ services: WB_DISABLE_SCHEDULER: ${WB_DISABLE_SCHEDULER:-0} # 纯 HTTP 部署必须留 0,设成 1 会「登录成功又跳回登录页」 WB_COOKIE_SECURE: ${WB_COOKIE_SECURE:-0} + # 直接暴露公网必须留 0;只有自己的反代重写了 XFF 才置 1(见第六节) + WB_TRUST_PROXY: ${WB_TRUST_PROXY:-0} + WB_FORCE_HTTPS: ${WB_FORCE_HTTPS:-0} + WB_ACCESS_LOG: ${WB_ACCESS_LOG:-1} + WB_THREADS: ${WB_THREADS:-4} + WB_BACKUP_DIR: /app/backups WB_IMPORT_CREDS: ${WB_IMPORT_CREDS:-0} volumes: - wb_data:/app/data # 数据正本 + instance.json + exports - wb_logs:/app/logs + - wb_backups:/app/backups # 归档单独一个卷,别和正本同卷 healthcheck: test: ["CMD", "python", "/app/docker/healthcheck.py"] interval: 30s @@ -397,6 +487,7 @@ services: volumes: wb_data: wb_logs: + wb_backups: ``` **`.env`**: @@ -408,13 +499,22 @@ WB_BIND=0.0.0.0 WB_PORT=8848 TZ=Asia/Shanghai -# 首个管理员(只在数据库为空时生效)—— 务必改掉默认值 +# 首个管理员(只在数据库为空时生效)。 +# 留空 = 程序生成随机口令并只在启动日志打印一次(没有 admin123 兜底了)。 WB_ADMIN_USER=admin WB_ADMIN_PASSWORD=换成你的强密码 WB_DISABLE_SCHEDULER=0 WB_COOKIE_SECURE=0 -WB_IMPORT_CREDS=0 +WB_TRUST_PROXY=0 +WB_FORCE_HTTPS=0 +WB_ACCESS_LOG=1 +WB_THREADS=4 + +# 容器资源上限 +WB_CPUS=1.0 +WB_MEM_LIMIT=512m +WB_PIDS_LIMIT=256 EOF chmod 600 .env # 里面有密码 ``` @@ -434,12 +534,30 @@ docker compose logs -f --tail=50 首次启动时容器入口会依次做三件事(见 `docker/entrypoint.sh`): -1. `manage.py init` —— 建表 + 灌默认配置 + 创建首个管理员(**幂等**,库非空时不重建); +1. `manage.py init` —— 建表 + 灌默认配置 + 创建首个管理员(**幂等**,库非空时不重建)。 + 没设 `WB_ADMIN_PASSWORD` 时,这一步会打印一次随机口令,格式长这样: + + ``` + ================= 管理员初始口令 ================= + 用 户 名:admin + 初 始 口 令:xxxxxxxxxxxxxxxx + ================================================== + ``` + + **只有这一次机会**。之后想再看到,唯一的办法是删库重来或 + `docker compose exec portal python manage.py passwd admin 新密码`。 2. 可选导入 —— `WB_IMPORT_CREDS=1` / `WB_IMPORT_XLSX=…` 才触发; -3. `exec manage.py serve` —— 交接给 waitress,调度线程就在这个进程里。 +3. `exec manage.py serve` —— 交接给 waitress(线程数 `WB_THREADS`),调度线程就在这个进程里。 日志里看到 `[entrypoint] 启动 Web 服务(waitress)…` 就是起来了。 +> 口令提示行是被容器启动日志带出来的,所以**别忘了加 `--tail`** +> (默认 `docker compose logs` 只给最近若干行;容器重启多轮后提示会被挤出去): +> +> ```bash +> docker compose logs portal | grep -A6 '管理员初始口令' +> ``` + ### 5.4 完成后的检查清单 ```bash @@ -473,7 +591,10 @@ docker compose exec portal python manage.py status ## 六、反向代理与 HTTPS -前面挂 nginx / Caddy / Traefik 时,有两点必须注意,否则会踩坑: +前面挂 nginx / Caddy / Traefik 时有三个要点,**第 3 条是 v1.4.0 新增的**, +漏了会以「登录限速误伤所有人」的形式出现: + +**① nginx 侧透传真实 IP** ```nginx server { @@ -487,8 +608,7 @@ server { proxy_pass http://127.0.0.1:8848; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - # 必须透传:登录失败限速按真实 IP 计数,否则所有请求都算到代理头上, - # 一个人被锁 → 全站被锁 + # 透传真实 IP:登录失败限速、注册配额、验证码限速都按它计数 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; @@ -499,14 +619,47 @@ server { } ``` -| 现象 | 原因 | +**② 应用侧打开 `WB_TRUST_PROXY=1`(关键,别漏)** + +程序**默认不信任** `X-Forwarded-For` —— 这是为了「直接暴露公网」时的安全: +XFF 的第一段是客户端自己填的,信了它,攻击者每次换一个伪造值就能绕过全部 IP 限速。 + +开启后程序取 XFF 里**最右侧**的合法 IP。最右侧是离你最近的那一跳(由你自己的代理写入), +客户端加不进去,所以下面两种 nginx 写法**都安全**: + +| nginx 写法 | 效果 | |---|---| -| 登录限速「误伤」所有人 | 没透传 `X-Forwarded-For` | -| 导出 CSV 要等很久才出第一个字节 | 没关 `proxy_buffering` | -| 手动采集走到 504 | `proxy_read_timeout` 太短 | +| `$proxy_add_x_forwarded_for` | 在客户端传来的值后面**追加**你的 `$remote_addr` → 链路完整,便于排查 | +| `$remote_addr` | **覆盖**成最近一跳 → 最保守,丢掉链路 | + +真正不能做的是去信 XFF 里**最左边**那一段。 + +```bash +# .env +WB_TRUST_PROXY=1 +``` + +> ⚠️ **漏了这一步的症状**:所有请求都以 `127.0.0.1`(代理的地址)计入限速, +> 于是**一个人失败 5 次,全站被锁 10 分钟**。这与「没透传 XFF」的表现一模一样, +> 所以两件事要一起改。 +> +> 反过来,**不设反代却设了 `WB_TRUST_PROXY=1`** 是更危险的方向: +> 三道 IP 防线直接失效。拿不准就留 `0`。 + +**③ HTTPS 相关开关** 配好 HTTPS 后,把 `.env` 里的 `WB_COOKIE_SECURE` 改成 `1`(会话 Cookie 只走 HTTPS), -然后 `docker compose up -d` 重建容器。**只有真的能用 `https://` 访问时才这么做。** +需要强制跳转再加 `WB_FORCE_HTTPS=1`。这两个任一为 `1` 时程序才下发 HSTS +—— 纯 HTTP 部署**不会**下发(下发会让浏览器强升 https,表现成白屏)。 + +改完都要 `docker compose up -d` 重建容器(环境变量在启动期读取)。 + +| 现象 | 原因 | +|---|---| +| 登录限速「误伤」所有人 | 没透传 `X-Forwarded-For`,**或**忘了设 `WB_TRUST_PROXY=1` | +| 导出 CSV 要等很久才出第一个字节 | 没关 `proxy_buffering` | +| 手动采集走到 504 | `proxy_read_timeout` 太短 | +| 访问 http 时白屏 / 一直跳转 | `WB_FORCE_HTTPS=1` 但实际没有 HTTPS 可用 | --- @@ -522,7 +675,7 @@ server { ```bash export GITEA_TOKEN=<你的令牌> tools/push-all.sh # 推 main 分支 + 镜像 latest -tools/push-all.sh 1.3.0 # 同时打一个版本 tag 并推送 +tools/push-all.sh 1.4.0 # 同时打一个版本 tag 并推送 ``` 脚本做的事: @@ -560,15 +713,15 @@ docker login git.iwali.top -u wangchuanli docker compose build docker tag git.iwali.top/wangchuanli/workbuddy-portal:latest \ - git.iwali.top/wangchuanli/workbuddy-portal:1.3.0 + git.iwali.top/wangchuanli/workbuddy-portal:1.4.0 docker push git.iwali.top/wangchuanli/workbuddy-portal:latest -docker push git.iwali.top/wangchuanli/workbuddy-portal:1.3.0 +docker push git.iwali.top/wangchuanli/workbuddy-portal:1.4.0 ``` ### 7.4 验证远端 ```bash -docker manifest inspect git.iwali.top/wangchuanli/workbuddy-portal:1.3.0 +docker manifest inspect git.iwali.top/wangchuanli/workbuddy-portal:1.4.0 # 或 curl -s -u wangchuanli:TOKEN \ https://git.iwali.top/api/v1/packages/wangchuanli?type=container @@ -589,17 +742,47 @@ curl -s -u wangchuanli:TOKEN \ | `instance.json` | ★★★ | 含 `secret_key`(会话签名)**与 `cookie_key`(各账号 Cookie 的加密主密钥)**。丢了 / 被替换:所有人要重新登录,**且所有账号存的 Cookie 都会变成「无法解密」,需各自重填** | | `exports/*.csv` | ★ | 导出快照,可再生 | | `wb_logs` 卷 | ☆ | 排错用,可再生 | +| `wb_backups` 卷(`/app/backups`) | ★★★ | 备份归档 `usage-<时间戳>.zip`。**里面含一份 `instance.json`** —— 所以它的机密等级和密钥文件完全相同 | `.env` 不在里面 —— 它含密码,**单独用密码管理器保管**。 -工程目录下的 `backups/` 就是给这类快照准备的位置(**刻意不放在 `data/`**: -`data/` 是 Docker 卷,`docker compose down -v` 会把备份和正本一起删掉)。 +> **`instance.json` 为什么必须跟着备份走**:`cookie_key` 在里面,而各账号的 Cookie +> 是用它加密后入库的。只备库不备它,恢复出来的库能读,但**所有账号的 Cookie 都会 +> 显示「无法解密」,需要各自重填**。所以 v1.4.0 的归档里默认打包了它 +> (恢复时可以关掉,见 [8.3](#83-恢复))。 + +容器里归档落在**独立的命名卷** `workbuddy-portal_wb_backups`(对应 `/app/backups`), +**刻意不与 `data/` 同卷**:`docker compose down -v` 会把同卷的正本与副本一起删掉 —— +那正好是最需要备份的时刻。裸机部署下就是工程目录里的 `backups/`。 > **不要**在容器运行时用宿主机的 `manage.py` 去碰库(见 [4.5](#45-数据落点命名卷不是绑定挂载) 与 [11.5](#115-windows-绑定挂载的坑容器打不开数据库))。 ### 8.2 备份 -**方式 A:整体打包命名卷(最完整,升级前做)** +**方式 A:用内置备份(推荐,v1.4.0 起)** + +三种触发方式,产出的是同一种归档: + +| 方式 | 怎么做 | +|---|---| +| 自动 | 「备份管理」页开 `backup_enabled`,设周期(默认 24 小时)与保留份数(默认 7)。调度线程每 20 秒检查一次,**有采集在跑就跳过**(不跟采集抢磁盘),到期自动打一份并按份数清理最旧的 | +| 页面 | 「备份管理 → 立即备份」,列表里可**下载**(拿 zip)、**恢复**、**删除** | +| 命令行 | `docker compose exec portal python manage.py backup --note "升级前"` | + +```bash +# 列出已有备份(大小 / 条数 / 积分 / 来源 / 时间),--prune 顺便清理 +docker compose exec portal python manage.py backups +docker compose exec portal python manage.py backups --prune --keep 5 + +# 把归档拿到宿主机(备份留在容器里不算备份) +docker compose cp portal:/app/backups/. ./backups/ +``` + +> **归档里的快照不是 `cp` 出来的**:走的是 SQLite 在线备份 API(`Connection.backup`), +> 按页复制并持有读事务,所以**采集正在写的时候拿到的也是「某一时刻的完整库」**。 +> 直接 `cp data/usage.sqlite` 可能缺最近一段数据而**不报错**,这是最容易被忽略的差别。 + +**方式 B:整体打包命名卷(升级前做,最完整)** ```bash docker compose stop portal @@ -612,30 +795,6 @@ docker run --rm \ docker compose start portal ``` -**方式 B:只导数据库文件(最常用,每天做)** - -```bash -# 先 checkpoint 把 WAL 落进主库,再拷 —— 这样单独一个 .sqlite 就是完整的 -docker compose exec portal python -c " -from workbuddy_portal import db -db.connect().execute('PRAGMA wal_checkpoint(TRUNCATE)')" - -docker run --rm \ - -v workbuddy-portal_wb_data:/data:ro \ - -v "$PWD/backups":/backup \ - alpine:3.20 cp /data/usage.sqlite /backup/usage-$(date +%F).sqlite -``` - -> 也可以用 SQLite 官方的在线备份 API,**不用停服务、不用手工 checkpoint**: -> ```bash -> docker compose exec -T portal python -c " -> import sqlite3 -> s = sqlite3.connect('/app/data/usage.sqlite'); d = sqlite3.connect('/tmp/b.sqlite') -> s.backup(d); d.close(); s.close()" -> docker compose cp portal:/tmp/b.sqlite ./backups/usage-$(date +%F).sqlite -> docker compose exec -T portal rm -f /tmp/b.sqlite -> ``` - **方式 C:逻辑导出(跨版本最安全,可读性最好)** ```bash @@ -643,11 +802,53 @@ docker compose exec portal python manage.py export-csv /app/data/exports docker compose cp portal:/app/data/exports/. ./backups/exports/ ``` -建议:方式 B 每天跑(可用宿主机 cron)、方式 C 每季度跑一次、方式 A 在**升级前**跑。 -裸机部署把上面命令里的 `docker compose exec portal` 去掉即可,路径换成相对的 `data/`。 +建议:**方式 A 日常自动跑**(并定期把 zip 下载到容器之外/异地)、 +方式 B 在**升级前**跑、方式 C 每季度跑一次。 +裸机部署把上面命令里的 `docker compose exec portal` 去掉即可。 + +> ⚠️ **备份留在同一台机器上,只防「改错了」,不防「机器没了」**。 +> 内置备份负责「本机有历史版本可回滚」,**异地那一份要你自己安排** +> (同步 `backups/` 到 NAS / 对象存储 / 另一台机器)。 ### 8.3 恢复 +**方式 A:用内置恢复(推荐)** + +页面:「备份管理」→ 找到那一份 → 点「恢复」→ 先弹一次确认(是否连 `instance.json` +一起回滚)→ 再弹一次最终确认。 + +```bash +# 命令行:不加 --yes 只打印「将要发生什么」,不会动数据 +docker compose exec portal python manage.py restore usage-20260916-151043.zip +docker compose exec portal python manage.py restore usage-20260916-151043.zip --yes +``` + +它做的事,按顺序: + +1. **先校验**归档(格式版本 / 条目齐全 / `PRAGMA integrity_check` / 库结构版本不高过当前程序)。 + 验不过就**一个字节都不动**。 +2. **再给当前库自动打一份 `pre-restore` 快照**(`trigger=pre-restore`,在备份列表里能看到)。 + 恢复错了你还能回去 —— 这是恢复链路的兜底。 +3. 解包 → 在**临时库**上先把结构迁移到当前版本 → 在一个 `BEGIN IMMEDIATE` 事务里 + **整表替换** `users` / `settings` / `usage_records` / `collect_runs` / `audit_log` / `captchas`。 +4. 把归档里的 `instance.json` 覆盖回来(原文件先另存 `.pre-restore-<时间戳>`)。 +5. 让**所有账号的会话立即失效**(`session_ver` 全体 +1)—— 恢复是全局性事件, + 旧会话描述的账号与权限可能已经被整个换掉了。 + +> **为什么是「整表替换」而不是「换文件」**:换文件需要停机、且要求没人持有文件句柄 +> (Windows 上会直接失败);整表替换在一个事务里完成,中途出错就是一次回滚, +> 而且**老版本的备份(`user_version` 2 / 3)也能恢复** —— 迁移在临时库里先做完。 +> 另外它按**列名交集**搬数据,不是 `SELECT *`:老库的列是 `ALTER` 追加的, +> 顺序与新库建表语句不一定一致,`SELECT *` 会**静默错位**(字段整体串位而值都「合法」)。 + +不想连密钥一起回滚(例如只想把数据退回去、保留本机当前的 `cookie_key`): + +```bash +docker compose exec portal python manage.py restore <文件名> --yes --no-instance +``` + +**方式 B:整体换卷(容器起不来时的兜底)** + ```bash docker compose down @@ -665,9 +866,6 @@ docker compose exec portal python manage.py stats # 核对条数与积分 > **别把旧库和旧 WAL 混着用**:WAL 里记的是相对旧库的增量,配错会损坏数据。 > 恢复时目标目录里**只放一个 `.sqlite`**(外加 `instance.json`)最省心。 -> -> 只恢复了库、没恢复 `instance.json` 的话,所有账号的 Cookie 都会显示「无法解密」, -> 各自重新粘贴一次即可 —— 历史用量数据不受影响。 ### 8.4 迁移:从绑定挂载换到命名卷 @@ -745,8 +943,9 @@ sudo systemctl restart workbuddy-portal |---|---|---|---| | **1.1.0 → 1.2.0**(单用户 → 多用户) | 0 → 2 | 建 `users` 表并写入首个管理员;`settings` / `usage_records` / `collect_runs` / `audit_log` 改为 `(user_id, …)` 复合主键,**老数据整体归到第一个账号**;明文 Cookie **就地加密**;建 `captchas` 表 | 不需要 | | **1.2.0 → 1.3.0**(权限收敛) | 2 → 3 | **配置作用域收敛**:把管理员个人名下的调度与采集参数提升到实例级 `user_id=0`,再清掉个人残留;实例级不再保留 `cookie` / `user_agent` | 不需要 | +| **1.3.0 → 1.4.0**(备份 + 对外加固) | 3 → 4 | 只做两件事:`users` 加一列 `session_ver`(非空、默认 0)、建 `backups` 表(备份索引)。**没有数据搬运、没有键位变动** | 不需要 | -两次迁移都是**幂等**的(可重复启动、可重复执行),各自会写一条审计: +三次迁移都是**幂等**的(可重复启动、可重复执行),各自会写一条审计: ```bash docker compose logs portal | grep -iE "迁移|migrat|提升|promote" @@ -764,10 +963,10 @@ docker compose exec portal python manage.py stats # 各账号条数与积分 | 频率 | 做什么 | |---|---| -| 每天 | 打开「概览」看「采集健康」;确认今天有采集记录 | -| 每周 | 「日志管理」按 `warn` / `error` 筛一遍,看有没有 TLS 或解密类告警(**仅管理员**) | -| 每月 | 确认各账号 Cookie 没过期(「配置管理」看提示);跑一次备份恢复演练 | -| 每季度 | `manage.py vacuum`;出一份全量 CSV 归档;检查磁盘占用 | +| 每天 | 打开「概览」看「采集健康」;确认今天有采集记录;确认「备份管理」里今天/昨天有一份 `auto` 备份 | +| 每周 | 「日志管理」按 `warn` / `error` 筛一遍,看有没有 TLS 或解密类告警(**仅管理员**);`docker stats --no-stream` 看一眼内存有没有贴着 512m 上限 | +| 每月 | 确认各账号 Cookie 没过期(「配置管理」看提示);**把最新归档下载到容器之外**;跑一次备份恢复演练(见下) | +| 每季度 | `manage.py vacuum`;出一份全量 CSV 归档;检查磁盘占用与 `wb_backups` 卷的体积 | 一键体检: @@ -775,10 +974,30 @@ docker compose exec portal python manage.py stats # 各账号条数与积分 docker compose exec portal python manage.py status # 调度与最近采集 docker compose exec portal python manage.py stats # 存档概况 + 逐账号明细 docker compose exec portal python manage.py users # 账号 / 角色 / 凭证状态 +docker compose exec portal python manage.py backups # 备份份数 / 占用 / 来源 / 下次自动备份 +docker stats --no-stream workbuddy-portal # 实际 CPU / 内存占用 ``` -磁盘长这样:数据库每 1000 条记录约 1.5 MB,`app.log` 滚动上限 2 MB × 3。 -增长慢,但**年度归档后记得对旧数据做取舍**(本项目不做自动清理,数据只增不减)。 +**备份恢复演练(每月一次,五分钟)** + +不演练的备份等于没有备份 —— 只有在真的恢复过一次之后,你才知道那份 zip 是好的: + +```bash +# 1) 随便挑一份归档,先只看它校验是否通过(不加 --yes,不会动数据) +docker compose exec portal python manage.py restore <文件名> + +# 2) 真要演练恢复:确认当前库条数 → 恢复 → 再确认条数一致 +docker compose exec portal python manage.py stats | head -3 +docker compose exec portal python manage.py restore <文件名> --yes +docker compose exec portal python manage.py stats | head -3 +``` + +> 恢复是**幂等且可回退**的:它会在动手前自动给你当前库打一份 `pre-restore` 快照, +> 恢复错了就再恢复回那一份。演练完记得 `backups --prune --keep N` 把多出来的清掉。 + +磁盘长这样:数据库每 1000 条记录约 1.5 MB,`app.log` 滚动上限 2 MB × 3, +每份归档约为数据库体积的 1/5(zip 压缩后)。增长慢,但**年度归档后记得对旧数据做取舍** +(本项目不做自动清理,数据只增不减;备份会按 `backup_keep` 自动清理)。 ### 自检脚本(开发者向) @@ -837,9 +1056,11 @@ docker compose up -d # 环境变量,必须 up -d,restart 不生效 |---|---| | `/logs`、`/logs/tail` | 403(导航里不显示) | | `/users`、`/api/users` | 403(导航里不显示) | +| `/backups`、`/api/backups*`(含**下载**与**恢复**) | 403(导航里不显示) | | 任务管理页的调度表单 | 只读(时刻由管理员统一设定) | | 配置管理页的采集参数 | 只读 | | 本人的 Cookie / User-Agent | **可读写**(唯一可改的配置) | +| 「个人中心 → 导出我的全部数据」 | **可用**(只含本人数据,**不含 Cookie 明文**) | 改权限:`docker compose exec portal python manage.py passwd alice 密码 --role admin`。 @@ -934,6 +1155,50 @@ docker compose exec portal date # 应该输出 CST / +0800 echo "WB_DISABLE_SCHEDULER=1" >> .env && docker compose up -d ``` +> 注意这只关调度。手动采集、`manage.py collect`、**自动备份**都还在跑 +> (自动备份由调度线程触发,所以关掉调度后自动备份也停了 —— +> 停调度期间请手动点几次「立即备份」)。 + +### 11.10 拿不到管理员初始口令 + +**症状**:第一次 `docker compose up -d` 之后想登录,不知道密码;日志里也找不到那行提示。 + +原因通常是**没设 `WB_ADMIN_PASSWORD`**(v1.4.0 起没有默认口令),而提示只在 +「首次初始化那一刻」打印一次。依次试: + +```bash +# 1) 翻日志(默认只给最近若干行,容器重启多轮后提示可能已被挤出,加 --tail 或直接 grep) +docker compose logs portal | grep -A6 '管理员初始口令' +docker compose logs --tail=2000 portal | grep -A6 '口令' + +# 2) 如果管理员早就建好了,那行不会再出现 —— 直接重置: +docker compose exec portal python manage.py passwd admin '一个新的强密码' + +# 3) 或者看数据库里到底有没有账号 +docker compose exec portal python manage.py users +``` + +> **口令找不回来是有意的**:库里只有 PBKDF2 散列,明文只在生成时打印那一次、 +> 不落盘。所以别指望「再查一次」——重置是正道。 +> 下次部署记得在 `.env` 里显式写 `WB_ADMIN_PASSWORD`。 +> +> 如果 `manage.py users` 显示**一个账号都没有**,说明初始化那步失败了, +> 去 `docker compose logs portal | grep -iE "init|error|traceback"` 看真实原因 +> (最常见是数据卷权限,见 [4.5](#45-数据落点命名卷不是绑定挂载))。 + +### 11.11 备份相关 + +| 症状 | 原因 / 处理 | +|---|---| +| `/app/backups` 里是空的,但「备份管理」页说有 N 份 | 索引与实际磁盘不一致。页面每次打开都会 `sync_index()` 双向对齐,刷新一次即可;命令行用 `manage.py backups` 也会重建索引 | +| 列表里某一份标着「文件已不存在」 | 被手工删过(或恢复前的临时目录被清)。索引**故意保留这一行**,是为了留下「这里曾有过一份」的痕迹;用 `backups --prune` 或页面上的删除把它清掉 | +| 备份失败,日志里没有明显报错 | 自动备份的失败会记 `log.error`,看 `docker compose logs portal \| grep -i 备份`。常见原因是磁盘满或卷权限 | +| 恢复时提示「有采集任务正在运行」 | 设计如此:恢复要持采集锁。等当前采集结束(`manage.py status` 看互斥锁),或先停调度 | +| 恢复后所有人都被踢下线 | **设计如此**。恢复会让全体 `session_ver` +1 —— 归档里的会话版本与旧 Cookie 可能恰好相等,那样旧会话会带着「已被替换掉的账号与权限」继续用 | +| 恢复后所有 Cookie 显示「无法解密」 | 恢复时选了「不恢复 instance.json」,而两边的 `cookie_key` 不同。重新走一次恢复并带上 `instance.json`(默认会带),或让各账号重填 Cookie | +| 升级前想留一份最完整的 | 用 [8.2](#82-备份) 的方式 B(整体打包命名卷),它连 `exports/` 与 `instance.json` 一起包 | +| 想改保留份数 / 关掉自动备份 | 「备份管理 → 自动备份设置」里的 `backup_enabled` / `backup_interval_hours` / `backup_keep`(实例级,仅管理员) | + --- ## 十二、配置项速查 @@ -943,6 +1208,7 @@ echo "WB_DISABLE_SCHEDULER=1" >> .env && docker compose up -d 表主键是 `(user_id, key)`:`user_id=0` 表示**实例级**(所有账号共用),其余是**个人级**。 **v1.3.0 起只有两个键是个人级的**(`cookie` / `user_agent`)—— 普通账号唯一能改的东西。 +其余全部是**实例级**(`GLOBAL_KEYS`,v1.4.0 起共 **23** 个),只有管理员能改。 写权限判断统一走 `config.writable_by(key, is_admin)`,页面与接口用的是同一个函数。 | 键 | 默认 | 作用域 | 谁能改 | 说明 | @@ -959,6 +1225,12 @@ echo "WB_DISABLE_SCHEDULER=1" >> .env && docker compose up -d | `schedule_times` | `09:00,17:00` | 实例级 | 仅管理员 | 每日时刻,逗号分隔,本地时区 | | `catch_up` | `1` | 实例级 | 仅管理员 | 启动补跑开关 | | `catch_up_grace_hours` | `12` | 实例级 | 仅管理员 | 补跑宽限期(1~168 小时) | +| `max_schedule_slots_per_day` | `6` | 实例级 | 仅管理员 | **每日调度时刻数上限**(1~12,代码硬顶 12)。挡住「填 200 个时刻」 | +| `collect_min_interval_seconds` | `60` | 实例级 | 仅管理员 | **同一账号两次手动采集的最小间隔**(0~3600 秒);期间再点会 `429` | +| `collect_max_range_days` | `31` | 实例级 | 仅管理员 | **单次采集的最长跨度**(1~31 天,代码硬顶 31 = 1 个月)。改大也突破不了硬顶 | +| `backup_enabled` | `1` | 实例级 | 仅管理员 | 是否开启自动备份 | +| `backup_interval_hours` | `24` | 实例级 | 仅管理员 | 备份周期(1~720 小时) | +| `backup_keep` | `7` | 实例级 | 仅管理员 | 保留最近几份,超出的删最旧的(1~100) | | `page_size` | `200` | 实例级 | 仅管理员 | 采集单页条数(20~1000) | | `rewind_minutes` | `2` | 实例级 | 仅管理员 | 断点回退分钟数(0~120) | | `drift_tolerance_minutes` | `5` | 实例级 | 仅管理员 | 云端时间漂移告警阈值(0~720) | @@ -994,13 +1266,19 @@ echo "WB_DISABLE_SCHEDULER=1" >> .env && docker compose up -d | `WB_BIND` | `0.0.0.0` | 宿主机绑定地址(仅 compose 用) | | `WB_HOST` / `WB_PORT` | `0.0.0.0` / `8848` | 容器内监听地址 / 端口 | | `WB_DATA_DIR` / `WB_LOG_DIR` / `WB_DB` | `/app/data` / `/app/logs` / `<数据目录>/usage.sqlite` | 路径覆盖 | -| `WB_COOKIE_SECURE` | `0` | `1` = 会话 Cookie 只走 HTTPS(纯 HTTP 部署必须留 `0`) | -| `WB_DISABLE_SCHEDULER` | `0` | `1` = 不启动调度线程 | -| `WB_ADMIN_USER` / `WB_ADMIN_PASSWORD` | `admin` / 空 | 首个管理员(**仅库为空时生效**) | +| `WB_BACKUP_DIR` | `/app/backups` | 备份归档落点(**不要放进 `data/`**,见 [8.1](#81-备份什么)) | +| `WB_COOKIE_SECURE` | `0` | `1` = 会话 Cookie 只走 HTTPS(纯 HTTP 部署必须留 `0`)。**同时是下发 HSTS 的开关之一** | +| `WB_TRUST_PROXY` | `0` | `1` = 信任 `X-Forwarded-For`(取**最右侧**合法 IP)。**直接暴露公网必须留 0**,见 [第六节](#六反向代理与-https) | +| `WB_FORCE_HTTPS` | `0` | `1` = 非 HTTPS 的 GET/HEAD 跳转(POST 不跳) | +| `WB_ACCESS_LOG` | `1` | 记访问日志到 `logs/app.log`(跳过静态资源与验证码图) | +| `WB_THREADS` | `4`(compose)/ `8`(代码默认) | waitress 线程数 = 单实例并发处理慢请求的上限 | +| `WB_CPUS` / `WB_MEM_LIMIT` / `WB_PIDS_LIMIT` | `1.0` / `512m` / `256` | 容器资源上限(仅 compose 用,见 [4.4](#44-env-主要变量)) | +| `WB_DISABLE_SCHEDULER` | `0` | `1` = 不启动调度线程(**自动备份也会一起停**) | +| `WB_ADMIN_USER` / `WB_ADMIN_PASSWORD` | `admin` / 空 | 首个管理员(**仅库为空时生效**)。留空则随机生成、只在启动日志打印一次 | | `WB_IMPORT_CREDS` | `0` | 启动时从挂载的编辑器配置导入 Cookie | | `WB_IMPORT_XLSX` | 空 | 启动时导入指定路径的官网 xlsx | | `WB_IMAGE` | Gitea 地址 | 镜像名(仅 compose 用) | -| `WB_HOST_DATA_DIR` / `WB_HOST_LOG_DIR` | `./data` / `./logs` | 仅叠加 `hostdir` 时有效(**只建议 Linux**) | +| `WB_HOST_DATA_DIR` / `WB_HOST_LOG_DIR` / `WB_HOST_BACKUP_DIR` | `./data` / `./logs` / `./backups` | 仅叠加 `hostdir` 时有效(**只建议 Linux**) | ### 12.3 `manage.py` 子命令速查 @@ -1019,5 +1297,8 @@ echo "WB_DISABLE_SCHEDULER=1" >> .env && docker compose up -d | `passwd USER [PASSWORD] [--role admin\|user] [--activate]` | 重置 / 创建账号 | | `status` | 各账号的调度与最近采集状态 | | `vacuum` | 整理数据库(checkpoint + VACUUM) | +| `backup [--note 说明]` | 立即打一份备份(所有 `data/*.sqlite` + `instance.json` → zip),并按保留份数清理最旧的 | +| `backups [--prune] [--keep N]` | 列出备份(大小 / 条数 / 积分 / 来源 / 时间);`--prune` 顺便清理 | +| `restore <文件名> [--yes] [--no-instance]` | **从备份恢复**(整表替换)。**不加 `--yes` 只打印将要发生什么**;`--no-instance` = 不覆盖 `instance.json` | Docker 部署下前面加 `docker compose exec portal`。 diff --git a/docs/USER-GUIDE.md b/docs/USER-GUIDE.md index c9c8c81..f4c1c5c 100644 --- a/docs/USER-GUIDE.md +++ b/docs/USER-GUIDE.md @@ -139,7 +139,8 @@ | 查看概览、用量大屏 | ✅(只有你自己的数据) | | 查看 / 搜索数据明细、展开 Prompt | ✅(只有你自己的记录) | | 导出 CSV(当前筛选条件) | ✅(只有你自己的记录) | -| 手动「立即采集一次」、按区间补采 | ✅(只采你自己的) | +| **导出我的全部数据**(zip:记录 / 采集历史 / 审计 / 账号与配置) | ✅ **不含 Cookie 明文**,见 [10](#十个人中心) | +| 手动「立即采集一次」、按区间补采 | ✅(只采你自己的,且有频率与跨度限制,见 [8.2](#82-手动采集你可以用)) | | 「补全 Prompt」「导出我的 CSV」 | ✅(只动你自己的) | | 查看采集运行历史 | ✅(只有你自己的) | | **设置定时任务频率 / 开关 / 补跑策略** | ❌ **只读** | @@ -147,6 +148,7 @@ | **查看日志管理页 / 应用日志** | ❌ 403 | | **改实例级设置**(接口地址、开放注册、验证码策略) | ❌ | | **用户管理**(建号 / 停用 / 删号 / 改权限) | ❌ 403 | +| **备份管理**:下载数据库归档、从备份恢复 | ❌ 403(恢复等于对全库数据有完整读写权,只给管理员) | | **整理数据库**(`VACUUM`,整库操作) | ❌ | > **为什么调度不给你改**:采集策略是**整机一套**的(一台部署一个调度时刻表, @@ -160,9 +162,9 @@ | 是「你的」 | 是「共用的 / 管理员管」 | |---|---| | Cookie 与 User-Agent | 接口基址与路径 | -| 用量记录、采集历史、导出的 CSV | 采集调度时刻表与全部采集参数 | +| 用量记录、采集历史、导出的 CSV / zip | 采集调度时刻表与全部采集参数 | | 个人资料、登录密码 | 是否开放自助注册、注册限额、验证码策略 | -| — | 数据库文件本身、应用日志 | +| — | 数据库文件本身、应用日志、**数据库备份归档** | 三条值得记牢: @@ -172,6 +174,9 @@ **记录条数 / 积分合计 / 最后登录时间与 IP** —— 只给「有多少」,不给「是什么」。 - **采集只使用本人的凭证。** 系统不会拿别人的 Cookie 去替你采集(那会串号), 所以每个账号都必须各自配一次 Cookie。 +- **但备份是管理员的能力**:管理员能下载整个数据库的归档、也能用归档覆盖回来。 + 这是**运维必需**(不然数据丢了没人能救),代价是管理员对全库数据有完整的读写权。 + 介意这一点的话,就自己用「导出我的全部数据」留一份,见 [10](#十个人中心)。 --- @@ -371,9 +376,17 @@ python manage.py import-creds -u alice # 想导给谁就写谁的用户名 重扫**不会产生重复** —— 主键去重,已存在的记录按「更早的本地时间」保留。 > 这两个动作**只采集你自己的**数据,不会碰到别人的。 -> -> **同一时刻只能有一个采集在跑**。重复点击会返回「忙碌」提示,这是设计如此 -> (SQLite 是单写者,并发只会互相拖慢)。等它跑完再点。 + +**三条限制**(v1.4.0 起,页面上会写出来): + +| 限制 | 表现 | 为什么 | +|---|---|---| +| **有任务在跑时不能再发起** | 点「立即采集」返回「**正在采集**,请等它结束」 | SQLite 是单写者,并发采集只会互相拖慢,还可能把云端接口打得太密 | +| **两次手动采集之间有最小间隔**(默认 60 秒) | 返回「操作太频繁,请 N 秒后再试」 | 防止反复点按钮把请求刷爆 | +| **单次最长跨度 31 天**(约 1 个月) | 起始日期填得太早会被自动收窄,运行日志里出现一行 `[warn] 请求跨度超过上限 N 天,已自动收窄起点` | 避免一次拉取过长周期的数据(云端要分很多页,慢且容易失败) | + +> 想补更久以前的数据?**分几次做**:比如先补 1 月,再补 2 月。 +> 跨度过长的请求不是被拒就是跑到一半超时,分段的成功率反而更高。 ### 8.3 运行历史 @@ -459,14 +472,37 @@ python manage.py import-creds -u alice # 想导给谁就写谁的用户名 |---|---| | 四张卡片 | 我的记录数 / 我的积分 / 采集次数 / 我的 Cookie 状态 | | 修改资料 | 改显示名、邮箱(**用户名只读**) | -| 修改登录密码 | 需要原密码;改完当前会话仍然有效 | +| 修改登录密码 | 需要原密码。**改成功后其他设备上的登录会立刻失效**(本机这次会话保留,不然改完立刻被自己踢下线) | | 我的采集凭证 | 是否已配置、多少字符、结尾 4 位、最后更新时间、当前调度时刻(只读) | +| **导出我的全部数据** | 下载一个 zip,把**属于你的**东西一次带走(见下) | 顶栏右侧会有一个 **「普通账号」** 小标签(管理员则是「管理员」)—— 不确定自己是什么权限时看一眼这里。 > 卡片上的「我的积分」只统计**归属你本人的数据**,别人账号的记录不会算进来。 +#### 导出我的全部数据 + +页头有一个「**导出我的全部数据**」按钮(也有单独一张卡片说明它在打包什么)。 +点下去会下载一个 zip,里面是: + +| 文件 | 内容 | +|---|---| +| `使用记录.csv` | 你**全部**的用量明细(不受页面筛选条件影响) | +| `采集历史.csv` | 你的采集运行记录 | +| `操作审计.csv` | **你自己**的操作审计(别人的看不到) | +| `我的账号与配置.json` | 用户名 / 显示名 / 邮箱 / 角色 / 状态 / 本人的采集参数(只读项也在内) | +| `说明.txt` | 各文件的口径说明 | + +> **里面没有 Cookie 明文。** 导出自己的数据不等于把凭证交出去 —— 凭证是密文入库的, +> 导出接口不碰它。需要迁移凭证就在新环境重新粘一次。 +> +> 这个动作有 **10 秒的最小间隔**(防止连点生成一堆大文件)。数据量很大时 +> 服务端是**边生成边下发**的,浏览器会先等一下再开始下载。 + +> 想留在系统里、由运维统一保管的那种备份(含所有人的数据),那是「备份管理」页的事, +> 只有管理员能做。你的 zip 只包含你自己。 + --- ## 十一、管理员专属功能 @@ -479,14 +515,20 @@ python manage.py import-creds -u alice # 想导给谁就写谁的用户名 | 项 | 默认 | 说明 | |---|---|---| -| 启用调度 | 开 | 总开关。关掉后只有手动采集会跑 | +| 启用调度 | 开 | 总开关。关掉后只有手动采集会跑(**注意:自动备份也一起停**,见 [11.5](#115-备份管理页)) | | 每日时刻 | `09:00,17:00` | 逗号分隔的本地时刻。**保存即生效,不用重启** | +| 每日时刻上限 | 6 | 最多允许几个时刻(上限 12,代码硬顶)。时刻数直接决定采集频次 | | 启动补跑 | 开 | 启动时把今天已错过、且还在宽限期内的时刻补采一次 | | 补跑宽限期 | 12 小时 | 超过多少小时就不补了 | +| 采集最小间隔 | 60 秒 | 同一账号两次**手动**采集之间的最小间隔 | +| 单次最长跨度 | 31 天 | 一次采集最多覆盖多少天(硬顶 31 = 1 个月,改大也没用) | | 采集参数 | 见 9.2 | 分页 / 回退 / 超时 / 截断 / 证书校验等 | > ⚠️ **改 `schedule_times` 会清理槽位簿记**:系统只清掉「不再存在的时刻」对应的 > 槽位标记(所有账号一起清),**不做全清** —— 全清会让全部账号在宽限期内一起重采。 +> +> ⚠️ **把「每日时刻上限」调小**时,超出上限的那几个时刻会被一并清掉(这是有意的: +> 上限本身就是刹车,留着超限的配置只会让人以为它还生效)。 ### 11.2 实例级设置 @@ -506,6 +548,9 @@ python manage.py import-creds -u alice # 想导给谁就写谁的用户名 > 验证码的答案只存在服务端 `captchas` 表里,5 分钟过期、用一次就删 —— > 所以它不会随会话 Cookie 泄漏出去。 +> **自动备份的三个设置**(开关 / 周期 / 保留份数)不在这里,它们有自己的页面, +> 见 [11.5 备份管理页](#115-备份管理页)。 + ### 11.3 日志管理页 ![日志管理页](images/05-logs.png) @@ -535,7 +580,7 @@ python manage.py import-creds -u alice # 想导给谁就写谁的用户名 | 改显示名 | 行内直接改,点该行「保存」生效 | | 改权限 | 管理员 ↔ 普通 | | 改状态 | 启用 ↔ 停用(**停用立即生效**,不必等会话过期) | -| 改密码 | 给忘了密码的同事重置 | +| 改密码 | 给忘了密码的同事重置。**重置后他在所有设备上的登录立刻失效**,需重新登录 | | 删除 | **不可逆**,会连同该账号的用量数据与 Cookie 一起删除 | 列表还给出每个账号的**记录条数 / 积分合计 / 最后登录时间与 IP** —— 但**看不到内容**: @@ -553,6 +598,54 @@ python manage.py import-creds -u alice # 想导给谁就写谁的用户名 > **给同事开账号时默认选「普通」**:管理员是能停用别人账号的角色,没必要扩大。 +### 11.5 备份管理页 + +![备份管理页](images/11-backups.png) + +> 这一页**只有管理员能看到**(普通账号导航里没有,直接敲 `/backups` 返回 403)。 +> 理由很实际:**能下载或恢复整个数据库的人,等于对全库数据有完整的读写权。** + +**顶部四张 KPI**:现有份数 / 占用空间 / 自动备份开关 / 上次与下次自动备份时间。 + +**自动备份设置**(实例级,改完即生效): + +| 设置 | 默认 | 说明 | +|---|---|---| +| 开启自动备份 | 开 | 关掉后调度线程不再打新快照(已有的不会删) | +| 备份周期 | 24 小时 | 1 ~ 720 小时。到期就打一份,**有采集在跑时跳过**,等下轮 | +| 保留份数 | 7 | 超出的**按时间删最旧的**。只按磁盘上**真实存在**的文件算份数 | + +**备份列表**:每行给出文件名、大小、记录条数、积分、**来源**(自动 / 手动 / 命令行 / +恢复前的自动快照)、生成时间,以及三个按钮: + +| 按钮 | 做什么 | +|---|---| +| 下载 | 把 zip 存到本地。**归档里含 `instance.json`,也就是全库的加密主密钥**,所以它本身就是最高机密 —— 别放进公开网盘、别随手发人 | +| 恢复 | 把这份归档灌回数据库。**会先弹两次确认**(第二次专门问「是否连密钥一起回滚」) | +| 删除 | 删掉这一份(文件 + 索引行) | + +#### 「恢复」究竟做了什么(要点) + +1. **先校验**这份归档能不能用;验不过就**一个字节都不动**。 +2. **自动给当前库打一份快照**(来源标 `pre-restore`)—— 恢复错了还能回去。 +3. **整表替换**记录 / 配置 / 账号等数据(在一个事务里,中途失败自动回滚)。 +4. 可选把归档里的密钥文件一起覆盖回来。 +5. **让所有人的登录立即失效** —— 恢复是全局性事件,旧会话描述的账号与权限 + 可能已经整个被换掉了。 + +> **几个常见疑问** +> +> - **归档是怎么来的?** 不是 `cp` 出来的。走的是 SQLite 官方在线备份 API, +> 按页复制并持有读事务 —— **采集正在写的时候拿到的也是一个完整一致的库**。 +> 直接拷文件可能缺最近一段数据,而且**不报错**。 +> - **为什么归档里要带密钥?** 不带的话,恢复出来的库里所有账号的 Cookie 都会 +> 变成「无法解密」,等于把大家的凭证弄丢。所以默认带上;不想带就在恢复时选「否」。 +> - **备份留在同一台机器上算备份吗?** 只算一半 —— 它防的是「改错了」, +> 防不了「机器没了」。**请定期点「下载」把归档拿到别的地方去**, +> 异地那一份是这套机制替不了你的部分。 +> - **磁盘占用怎么办?** 「保留份数」会自动清理。也可以手动点删除, +> 或跑 `python manage.py backups --prune --keep 5`。 + --- ## 十二、信息安全与隐私安全 diff --git a/docs/images/11-backups.png b/docs/images/11-backups.png new file mode 100644 index 0000000000000000000000000000000000000000..57c982912c2984f103fde8e829231eae42a40ffb GIT binary patch literal 705172 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%0D`f$VpPJgN>>^&p_okNiqJ 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�>HZ3BziA9BwF(`N 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

Nk&y{rBsd7~EI^I;G%Kq9Z1#aFKUWIGv6zf% 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%0As-cU?mtEW z&*EpUk$;S+}qeN;e-G89){M(@Kh%L+d0hGt*Vmf-z%*oC*!F zjG?VCv=H=q5x)o!V?8~B{70tfolE=<&tg9kxl{H;PNOO-fMVfVMFZV zFNi%sPP&<@ zWtw3kTb{Qi`WAgr+u_UNK+6o>I_ug#fj2i8<#SY)QceQNe~e^4^pT0C+w^&I63*$v zyr9WjDk3O6;^s?E@7_B-f(}E-Ji?2}vFF-{2JN!fvIoqrc2ykP)*DY>g`@2r$~!?Z zq%=!b+sAJYrY%48Bghx6W|vD{)TQ85W9;KCDMH81;~^5hjcAT}rH7`LwW|yI20G)e z%vB(aDG#;hE6G59*phP#yjPc-CUaxs2I5@FGK@T968sMl2Qgd$_2S*9{%TuOb5?#7 z<+F1BsP!mvczLlDFlQ(6)Y+|eDpX73C$U*Z&IBGno=a^pCBH`1Y{L2O-hZ$F>Y62N z>&XMW>;P$xk^U}|GQBGj9J)FMR)$C+`WJ@$&Dr9s;GGfmx?rhKILV-70Mn!j@)y!j z?vx^4l?F{+bGz_Hb;BcoCbUj8%?ECPyOW)}BIdg)p==L`GL3b}LUJubLVy0ns5aJp zW!Qc`ol=}&NFN3Y`7N^-Mw_{q_aaENl708b1m`x4kQAhzt~R=fp@~r#HZ;Nn1Ph@q zG}{dNSkY(1WY6{Yo;A!VGsry7oe^nZL3@}^P_y*e>mUcQ+k$@WwwZe)r zZpr$)ys7^W^zMbZ{KlX-bQAL58sX1_1VaFm|G=3KQ+IN)Kzf;cTg1w~n}IWn;_qcx z7pfm52c|B>q`ogvc?Ul`niK*(k*Rt`)KDvf8qUTFk1q@RiMvfago8gw+f&N5Z=@u7titxQsgG82aLQOspJXey6l81&hxL2|R@ z+BK=NS6lSfIn}xDUsr-5v~t&;DShZ9o7~8AdHvwd?2sMAl%>J0N1I=7mJA`Iw4)Yqd+C5r zl~ceyvK5Qqeuwa~2T^!Z%qlSlOAVy@J8W>VgRh#?ZTvdrXYjQYtc`HJQ|+i)JzaJE zyo^=QWIo-WL)b+%2%Fc`G&f(=O2V-CrwTsy-&3=OR~4-{tTGp>%XVEcK`^e!in00M z$l8XGd|$@l4xN~aTXIR>ICP0BGm|7GDpJ`i@-dBXI!AlBFF@cM(E#HCLSkxq9&N^} zJx_6-*VhbAZ>VTjEp=w$i5nI?i1BAZUwv=*yXI*V$Q$s47y_2YoIaw*Z$ioWsX8f1 z7He={6+R2T+kZ-oRBcek`U1xlw1TbtvF5Og;EFSt_a~Q01ZW@KvxKJpI#39mp1cPR zy)GXi6k{i9Wmnvecu%uuN-122`)Rmb+xfw*d7sJ_XKBvH0X~*i5LbNWq_{)FAPwUA zs093>44LiODo(?1*fL-Vd(W3~o6A&l3!pjK_WV1zOzb^dI%V;W5lbX5vn0DE5nFJM z0@tVpoLhq z-%H0FGU&ib9G`1u7qTGz(v)EcKy=Sa#d+sPj2l>Hr>hbzvm(HjN%K>b(D6Z3jnDv? zRIi0!Q0F}`XMt97`0~lC8pCghPz2Bs^<}CG4bLZe&Ne492AmiyGWq3zuFo=X3%@_uHZQiz z_YLdp<-_T0^DLIDK?>Xg@>#1VVKGqGn3=rl(oS_&zFuJ8CKqr0!;y=1iFCDzr2$Aj zLvdO^q~928g%HMjiGZ1$Cgz`2PX9&RmcTzm{FT=b#@_M3B7UH5@*Yf+5koKCbH?+d z?}^_+Ui`TCh4qU)8+G_g(M2cmMc+`MU_@586hrNBtu`0D9tH=F8go3G^NU)wO93*v zZ<^(sMyhgpZ+qyk8d9EY*UU(~p|N8sbfHa=wdt;K^=|zF(2oam@RV#i7bYA49~6)P z%$Eo$%ZBl2Pk6K#*IZ;}SPy06e=~znI4T{ae7bWEmcrClgHHYQ0~y za?vU`Mr0$1;}LQ@(^*3yg*y=NFxQ|Vm1jzj~!)W4B+U>b5sfjzx7;JA?oz=$NI z(=pvKvgM6i9WYYT&-``$sTlgnh6aQ%d3oEr6XxE;&}WFe)$5cYc}$jZgU2n59m$*X36!)8{Po!WKS8yR0*O;(@GKdh zWo&drY2vxXw(%qBaP!L_IJqxd8w1g%VDd_`E_cp^q2R)89|Nz^7!ht^j`JL*{8B?f zlVcK$rDV3-i$%q|V3w!5J=lfy66lldH-KS(jZvlT@l)IxP#YLJxA#-SB|uL5Z3dgt z3EfJr2vR>Xm+Oym7wgo@vRNOZC;<#y^&A5b34PNF%lqaQm0$euYApT@48g_pSqMo8 zsO|e|hM%)sNWM28_=|@Q7;~oUd`CN1Wwuc|L7EJ2&K|6)|IA$mSXx!SEuslN59nXH zeJ{qAP>u2R9Fn&z^6SB++x+nhOEhtsPJ_bB`jX}Y3y`KTyM!KHpxWdRPp%WVec>_~ zt>G0fhF{6Abe%FE+o>^UX=DC+!Ipm`i=O@I4=X+TmrhT)d6x&GiX}o2ii}(+K>dG4 zvpq()VKle!jGqSS40?-9<7LqrqV@>0=98p;@No9B(BtK}qQsv+_jRC0q?7$h;tY&6 zPM(8(n^b5Hj>3lTz9i7->h063dQMawP_^k6&z}rn5)fkXNo&VVClM~W>5!sMTGO&dlwotZzTp;L35>?hfA0D;uFA{F%A{#mDD-`kmbdk8K5zOEy|=|v^TdOG7B%XpB4OQ}ZnF}m18Cjsb{{9=9evTv zk0D>fMRfkqkACTkt6nI$3*#_XZ|w;n?nyb&64u!>M&m1WCPT|yrWKqrO$>|>CUlZj z_~cCrf7Wp?>&rKZ%#)JIjhc-9Ii>0T0_~~{)apU#eSCfh|LciWj0-_|NIyNe1T|}N zbRVc(*6BeW+$jxTC;xnhvpO6n{_nP@{{t;)7@^-q?yUQM8pnftCW#QUNKlq+I{Xf= z`0WemT~@$-hi-oe&YK;4@&b(&C7WNYBp-eXu|@WhRn9a;SGX=svm`k{pe z+$$$ba@wf1n}vBy3v@ihzorqt4K4UBr zIf2_*X75U$8{gL4Fq#j`mO`pgL3GvD5bI#mgT85(=VF4zi|9swRMz9CgXAz(=RR^; z(DH&DfC6=K6-s77Nm(vN$NUfpByZiUy)K!rKHedJswr$_R%`c0#`J#%5{`~aG(Ioe zuXd8A`yBsPq$pzPd4~&vC?Bc(zlUa};H2-7X@SItWt5VG3jzn;kKm-_U;!39xku~w zDYf^PM3PEdgYG^a@47JO;d;ZUul0+!)MUk#`suPq>{7hq!DRm(Oqbs zN2q>`DNzP99)++D!GfeU7)qYGK2{U1i>YeR@v0V+SGf+xO8~^jSmrEwW}a_+O3kDA zU$7l>O#~5fL-*6YVP3kua~*x6zzObBJL+EXiF|FM%R> zT5`klLQT8^=BcY~Mm>4ZYX(3QftrHP)Ox45u|DJc2lgAbx`| zR#XORLSQ~?pKpK3FD_PU3lt(|+a4bGD}wv~YO#YQtkW)CPZhE*KiPO4Q6M$AlU>iy zk@G$OC?$??p^Aj=&z`Ac0!I4kPfqcD-!URTzzTIC_&!!Cdq+o~ie~x9kDg};>d-n_ z2Eyh0geJ==Sr3&Uf7CLJ0#sC=_TimUGW@2=_bKn838fQQIdpM;Kk5O<&9@AuaVu7yTIGsp>-6mRrFBwrQ ze_#{@dGAyb-YqcUR^p%gC7Z{!!u-55=u~SV;3D$7a~Hw&w`fvx^az`D={Docf?qw~ zwbhba9k$)T5YB8YJioCS*LRPOuKcaD$gU>G2I)w#)79B)AjPKD4nL+qc36HN{}~`# zb`vpb_$dkl@-0J3(b(NQcT^{kZ0I{u#URW~wPb?#?An~iGpznE=2 zj@s)}(5J(QNXRK{*KC;FhgKer&=_W^i%Ed-MW##Ece70n)|9%iY1z2Nn8Y1?BZ5kO z**LvLKcTbOd931a0*x&LJmeA_w6_*oB}H0GW}}fqka>HqvUtCrONhRQhvA^AzC!ZJZY)=Iv9}Foy_?S zH;I=kZ^h|nEL6dbMz)d869&PAAFYdLEIForY5XeZ?^f+#<;NH%E2PHEx_|7iruQ6& z@0buz;lUw_niFZ=WNs2ZSKa>J%W3*Sbq8fk-(otiN5B28a;XI!fy&;<<<+y~S^xpYH}ko9m|k zy+?Wo7Ow|WknNssy%i!;Y5p;1eMvy?L(=dRiN~GJQiawh44F_t3ZRJh_+4N@>-V!P z+^xOk|6DKPJ52_>=I#Bbq8~lV5#XGc-AJXYabBqmW=u(C?7OGP+&vD{V#~aqtla1x z6n~Y7(TxiJZHsK!QaIet;xP)MblDj*IBbXgO|>!x)@fJu)(g11!lZV@6IOF-86fHV zW+eG!hf=dqpHM0C3|7(V#vtv_CoW;9-(V4IoP^}mt54tEh{A&)CLJhgh%IO?Y2P&T zglrprf#~%E3*WTD6~U87O;TA;cM5(EnF%`>eKRHE@KCoS?OXG`qtxS=$zWt=D$ne> zV(*IbWlxd9mwUS);w@|9&E`fdF$0OWQ+g4ozn6jwH4sVgkv=trT)upEC4sJU{peMs1aPp_>M|Z#YpvgZYx|F| z7cu;1$b#7>4CK-ehfx+X@3Gyww@EId(Dn;M$Yu11<8kWmx1xj=v5XJ#mZ~Zm@!jQ$)kKwqEjTB3SNx;q?_&Uq5j zpeI9j?fyZ)eQpr-+9k1$d7jVMXTo6-C8f_|7DFw1PiaH;MIDN7@~xnZtMSR{RS^nf z!{&QAZx1l>$y7j2u=98=9h1pse3Di$eu+A0&Y$guKvV5fc0IJ!H@XE2lJm4R^no|% zM(lm70inVyZv$EBX_af|lv#rbzJ_Pt6gnv83e=RK(J1lemE6o%QVLw0629Dyo(r|D z0h7YSs>`b&f1$z%gl%rj>lCNxV&;OT)`+NrS}Q#cjKP0C8eTBYLKm--O2=K%v0c>2 zxV-k!Jeq*KJc-LnSpJyfnvMO#iTCd;uL2OO7X+>8y3vWXelSG4(b-&lNwz`8PC(8I zrD+%7?Fd$Q&P`v;(wal0QBryTD}JZjv+u&-bgNghDsMG7_bPm3j|humOR;J~0<Pu0)e~!!2Jj>brthTem z)8Jm5DWEl96ZpP!*E#hTkPJKceEgvlQ(a`qI_*ML$oq|dP?s5~8f5b`{xVR)+IlcL z_seAQuaOFP?z5Jy!R5bMxRzn3|Ag{xe+$Gd8w3<4LjdXVo{Ss`LiS6T%XgkC{O#at z;nmI5l-s&K@v zS)}nOs#JC=NJEP8l(dgdzmf zfANb&ToIkjU*?)zAFv(D`;j0(3Q39xZY5k;g$gJjvcdTLmTXy^w&j5NxU`5nW8gce^5g zhjx4Kt-2AnIHHh8dsTqz5{GQVn0Zx=ai~@P}^- zBFjA9>eh2m-E}^~}lwEAYpRvTlJ7Apz}I3x=)L z1{v>6XA)sHv6W1*LJ-%sT=92dKYh(JT$`J)xEu+^=WB_RlANndgmalMP6^p((vT|H z(1@KTV!vt$;tsrDV|o5W66_-5;sr_f)<)+la!zbT)+2c&EdDXIb3BDMs%Q}B`eWe0 zW#eae-#Dw=^!q+(!ef{!H7F=;u7yTceI;0a`5iLK2J&G7VHO7c>(!G*zx#}DeOi~Y zvA=(GX>gON{VFNEt51}wsS)%$ma=KVr$bYKX4e4~+svgvp`{_W*r(cAxW0=ch>0OLZ3*VaIP^*LBcGyAnYH&+MO-(1#n zUCLcC{ATc|yVE7>0ldEdAPDSqV8eqKwo&Ll9(4Nuz3xy$S<(a!YIr#AgodHE4)J*0 zL?YS=ZW)rGhLl8Ta=e!Hh$4B5X$~<&nnO`qib~(ej+#5##K5^H5f1A&kPEW(N+|=c z!ks6HAHXTSi+};BV384!xS2$eWNn0KLj#NKbc<(>q1Z`+8wsjm#_AxJl0KqJh&2kU zTtu$z9CdCM$@D?=b*^|x{Bo?P%htw5Q(-eGWFcuh$}f|?C9H4GLRuptU81x_D0DIx z0W~(3S~D%!c?NrsMhlSAhA-qz&bznT*nMy03#w0w>dOPo>q`h_bJhpgDE`;lmr(I! zTL>@&uHScp+J-=qHIt)GK(PiSO*s~jUVCB9BM41EP%2f)`z%i%8x=tzJT`V#t(tC{ z#xi<;5P$5o_4Im?pldbjvGOTkYLT3GKcbEL7>FetPVPICmsvBT2vfGquztK{6bx6t zA0Csd^cmM?fs^37B)7z-2|_kTY*L?+hdmjCOFK>-M}f!>p{9Nnli^<@lC(jNh-PC^ zE#>t#x?!)h@?RUq9wT>g$sAmzLG`O9fjjMd(MMKbO<ydE?1^|z(Qmsq>kEDA^5u{QhSo0ZT`m)6BZxjV zxT}zu^_1YBd{>Y*XaY1L1=qRU-HA7&Yb|k4(}mts=RHk)QLY!uo?GU?k~iQzN3}-x zTc;UHBFotP%yIIvxp`X}iZ0G4yxY5K-|DCv%Dme3T2>z$^q{#NqdYJV*OAiM(fx#I zmRI|ja*9S$zo8IOQTNq~!CKI{kjv){SfM$t$^IJ=Sij!`7S-Fu-^zhJmQ8ENiN4G+ zJTB&<;mj+)78ff+)8d!+o0p90Cy4*gIb+6!%f5EiS_F2A|&+9$IoC_K4Wf zd#9J-tmUXQu6x8^;A)0UGv{?R{4IIu!$^DvwgvQ><$JDh5FcgdL*QcJX#MjJoo;*Z zxn0H8SLmvQpq*iX(+33fQ@`)WLl)%(4NG0tgMe>OhP;nr0%;e+I|rN3LoCO;o)qe? z2iX|c{$V#g4c>1nR3`yezULRDejJqBMhoLpxnIyNhO9#IxKQ?7&nop#mTTQohx+0ne=X83d2KA8PkM2l0f$2^-~=oVJOn?%PaZy(Qg({Eew0km+i*JMizBmdg|P; zC%6n#Sy6@De#F6WRw9@>$J6P_?<2CT3OYuWT7dkCCemt7{xKgRGh9tS>&Pj)TIFpd!~8jN}Da;>44-u|afL;`50% z>agSS7lt^mlLyTaXoi^>oUl+PvHK0{+4$~6zA;PxTaF&JOD&* zoGqS}Ldojcz;v+2v>Jb_z}V2G$;)R+0%BhF)@}JMQSGYnMDb53T>rrWRP!CmQ~deq z%L<~@1vu)fEjd_*KH=hQnX1i}ryIZ4kE(Ez{g%^ui&YbgFSGvx^kr7^1h4q;rB~?qpoZZN}k(V151bT?r{pTPZ5{9&2*gTE5u{ z!q$1Y=nYzGMkXHt&7Io3RjcPfp=P$zaSA4o!|witosf02hM6E4QwZBdmB7x$Vi&FR zQ$t44JZ%#_!5@L*5`9g9>+BsOs<(M3Q5zZqX}BPEJ=Bam(Yyb@CUwhx=cRyozgD{hIJ|I$U2_^4|w34`!L)A^uR){Z7sLhSsFbZI+G=KgL zdLU3LobD>||6v2G@E&L%Z@d2Tpt?9J^7ZoIk+4EYIq|3Twz zb?A7l+sz(#YD3Wf&bsVT)xRUx-lWN_n8Y^-Fko}Z=uA;r<%R|$lw-QUSRsmi$Pyb6 zCtw&pp*36v7A!7oEOI%n02#4mfwR)|iM*U}E2HR)D0m4t1AZ}mNid~$D7HgcED?Fn zDju&;yOW03n6xqC3(}Rr!m0>1*>Fa%G}(8#`vFlJAs#EKJ!OK)AI&qcT%ECvNL5_q zSx==Pp7q+ac(%mGR!Wvi)=G-Wy}2b8NWT>)-#uF>cCxQZJ)hjpce`)YPl?v1kj1;4c=G13EVaf(3#ek7zfwSu6Y`46#2+>`+hK~GO4!l!V@B_vop0bKeMcsXW8Fy z1#8AWU8Z2#FA`=W1gAbw{?dtS+rdzJ@)=FVzj9Eud%oNmQ{QYIWx)gn)0j**oB%{} zW;u4k4>sqJmbV*SDVf09Y6u0)pY`!Z)hqBfMu>EW^< zKY%cd-ju@{iBuoRB-Vp{t>^~prik;WZy<8@76nfiz3##W*?r1vjNH>YO_t-HQ>#@C z%|?On^sSB9nIZBA=fG~aWcYu08eNH22=n8!WSv5Psn&otW(E7tW4=qgj$S zs@_{kwf9$YGY;KGk2yoMp`DdBj6uG)rWNPuL{eGZ%*4&=p%WQPg)k=khc5y zs#!u1a@Thz2uW|VmKL!NeL7K7814u~sDjU6GGxLqPP>9-@wZybW;o|A2t(A3}s`Ezlno7{KCDi z9$FoMnOaQp_hn^dxsPa3;iE?xN2Jx~!hU_2`x5&^ZQs1U4_EvP?A3aktgHid>GYj5 z2sd2je?R_*nqb5y)iTJe5cPkogeHErJQt)}M5%*@vCR8%5!{jEdnB=siX{+-WSC%w z9oIhzXqf4vrh%b0YZc%fXACdbo6$y!#8mjpX1c?ETGc^2+LN@}Re5_s4!0Dff6v7N zTA8R!0au|Jap;uj0VC-HXG6^D?2((fXt2p+F1a)EwBw2_$|U8qLS7#If%tXrj#@aVX_Ik_6;usa{JZiqEJ z7lZ|+7*v)geyZOI-n)fc9cDdOO8X`D#^lG3I9;I&>|#Ziw^#a63C(daR_gdDHhnAb zZRF9#|C|FC{gp>|-SdpTsRpz8Dw zC~~NBxO~vh#2`VxR7&`tffLm)l1gPJgrFu-CLsXg2U@4wac(hUffqUfgB`dWnnFgd zv4vXq6mf8IRBzu$61x0EE~3VnBd>03HLH@w@g^0kSF9?ssx|?L(q~OT#q!s*7i$uX zQ>2tQwM-p07G#4nqX(CHsD=g~`R^HQjuRnXo%<$(N5|*}w=%kF8vF_lGc z9V4#Ym2K8Rk!w|^QA7fXpHSX7y1e2vt}Qa^I0kw@60rB@0Vazoa}c`x}%VP(^o zQgEw12OmuUmd+8 zyETf_c-s12lLd=)l~9!+W<>kn`H6T6R4&M^AKTO)tWYTJtr6ngnAw3r#zxb{dw9-u1I|P9~#D7^(L={~wJ5$|oe-nH=@nxmo_CYHOy(JBN zGny53obs^QohOHzOsH(eBs7h6zu)`M?)*Oxw=tr=c(p}SYB}+;cw+U4(}GhPYl{t} zj18x)mqnzjEi@dfu1_^1l)AqBK{a^Q2RNpPHRk(FZ1)r-L^Nu+ zbhsJSg6Op*nDj5Cxw=8-)9%{R@6VPJlXqV~6MgvgHOouB7mPZTCsY3+ zwM%$DOK(K&S%}`}BpK^7TPM8DJblf>O}XnRJbzQi?L(iTa|n{Tf_x$Q<5o*M_o>m% zdilbQtpab?(cp+e|HH|rHJj9}Q6wkO)z6ylafd@Mh)afTEq}&}HBy4K1d4ZRUdH(@ zo^K-w=UL`~p4ZK{F!W>wcw6nuVL&&#EpSA|nZmq zaJ8d(%n+IYm{1+EtYZhEZ2yP-=0?@#-pin?<_Io-p5{9|#FWj~g@(Qd#`l(K7kyXf zRw2>K@AhUX^=@J=)KwsGkI&PwgYe%|`Oi-~fN_*uIk|Kj@GSrrCsbd9Wu7@zbMZ%p zMH4Ats)#YUChyr)*7DmG2aU}aFD$`DSqbz+UT$PuQ1YERC#Sbq!WSTG&}(ba^Ju7m zNl6)-melX5u`=l~IiJ#?HI@C+c0ae22yD?Ax97T$JszMxU*V^*;kv_u7jw;9_m(M1^~r~8xiZbCx?Kc7&@W_+UztYEJJK6-B= zi6crBmph(WZJwlELqJzA2YUXom&J0HdUZcFy2p9YC4?qKBdt0{N6%cW_3p+#1K6Cw zxs{bG^$U1yj#(}!di@vu=4241Wvx30DUjU>sI7#CkhHHcl2~({$|_G8VJa%eZ6>PB zKsDwZ$?3W6imB`3k?vn|8K`as0gPu@XV=@TL5hBkV~_e-c(P&L&3GQ?vnp2ImtugY z)6k3ziDUX4pMA5>BnG*@ujq^K+p@fqV53RyL&Rt5&NnJN2~SAQ!dr;6oCtori3e2F zwB4U>Mcr8cZH{IOF4GutvyNVs^_8_ZN;Ri&2HZ~c+h32J9he6l8vluLF38E4!Z!O! zrD7<_nt!{WUv3Oh;iVQG^Za7{5O+%5dq$ zAmME7&$vKAe@Nlwzzr0uq|1#D8UJGc2TUZ_bA9VR@o^01eicXIE5lf{vUgw+7|X$? ziyV+0vIHT00D>FOpq8?8kRo-eB8%(u&>xYWF@aJ|U2d!4<$h$XeCTJG2mRj{btmU0_k zp{{vLqFUHwbQsMVEWSiIFQCy;$9U;sxDW^c5PX&30cQD*#npK2PH|!sku_driBY*;dSi3jgk4Bmu$=fA=~A7 zDO4CPK!$&hnU}asWj<7{Hz|7$OU5)%E92Da)<2(;>>i>&i3ZQ^C~w5wB{(&u$UeSD zYc#<7XwifBdn%vihv)dx5`Ah?B1K_}GFoLmQKOln(jk%kv_vdk6&?Mcx^S&Vx9`$h zvORu|cdONQx&nlqe@-Hnpo{y@%*a&>&4>bc=B9+&EOda+}6GBy2o@w9%+L)r7`=a0`*41O$+DUE;gRGUx)SNp(sGBv-J-Y=9|!OYM_-v{O4 zrHY)jpvOlj3K-!(tr*GAxArrpYMvrZCef%@YpDm3>zwnU zBFga{8d#ZpT-pS*Y)2ebLMQ!RMj*<(FBF+96i;OAYG;#r2f{(fYp6`S3*QAG>0BjK zUo{s;?%SP;Qr_lbzU+4N@c`wTAajR>O+Oeshdno0b98ky@KW7Q%|P2rCireTa;YOI zNcOY-8>*8Op)v*TP3s0gFi0UGG|G)BD({n3ZG-C0ttmWez18mz7LXm0B%Z&uQ&Ip6 zaT^zvBJ6P)X55{#9s0ot5R~?H#35DawOZusf-{HMl?mToN;n17G?ElV@hw(3xcB0F zT~JASLfLh{0ueHXCkgzCQ>RD6dM|iMY&17V3*0@jT6D*h7-J?MfcjW5Vcq(!V?vAs zIvW2W1eL-r2y3F?cpBqi^&(Qs)$L+@o1`{E`H;VmBvoah=mC%T8|yuk0;$!UT+mHU z^8JTKGZO3ghI9ansM51F7VQ%c!~-hpk$DtWA!-HYfc%Jy=Ra7$LmKb(7WM zaPZe1Q9PH)c{|(?F8B#E{V`Sov0?|C*jc2ma$i`=yCoMEN4S)jc`&+leiAfafi^06 zq&0Yir?J-J)zJHP3nu~_O#3mn*8#_Q@qG{ihdd?I;OguHU;PK&r_9y2Bz#KWa_&sG zfUi4kgwL}pz_Kkp?v;T_E5;0j(rmZ3PgZ{}4ZuX%J2qU6^Zn=;|;=Sn2l@q$^(B|_$8T~*yNO!3pWJw(`*ssrJft!{{kiGxpe1$inwg#D}Vk07%L(DTt)bN9e6U z%cs14OC5wTRRGeRg}4tAUbUR3}^Vp&+!_yUwAP9Y1P zu^~BQp30hZ!OFN;5aO?xodL}WmYG!iX*gls^Wg5^qr;LOmOl`vGZ8!%H01xfk(;Gg zncXq7((rR}uG@E0XUds}UP8mIzz>ydenl`kMOyJG9^tWEP2uax*DXo6(z(YuE0*e$ z$A^m^o}9zMg6-&V5^ubEkH|_v^f}24x9>VgwmJMZQ(PU2&nzXvpBA+jMp^vGZIv{* z_qtz{wD0?z?K6N^kPT+_6rM-d1M*O-i|qF{z7n@K;ybt*4;9cLo;9jD8{^;rs$BAgtTyLYdG^;5ScFG~|!|0Q7mdAOU& zeQ{cWo*wzNu@mlpT{^9wxAq-}SG0V}@QRejrhWTX(KD+Nh@FT@Ui&O6qk& zR`ndfQw%O^Z4{p6G|;nl{D`t7rTU}4Wd#v*u@PoVI2b!8s57g!WtpMlu9EtwpqmX% z__EnUR%2szMpFm4@XLsPAphZilRv#-j}qVVJX4bU-8t0vDjwCLd#~3Cettn^a|0vXL+2u_ZU+xygriV;TWZ2WPmfOEra(GWJlS(75IQAK$LgUe!z@BM;JLmdA0s*_|#ik7os=4I-e3bzP+ z9VW{6FJvv})Q8(;%cZ(Tb}y#zrg3rXuScidFAx39t;G+~4-a;WY&n0R%3yVW3a3#( zht-`EVYc6XGSi2JWR~7S&58Nf4nNS7js8DNqr-(!b9riXn#s8az4e|-TQfxbNdLW7 zH-^8D7fLmQC^;b{f~6-k9c86qU(aRkf*g*7sY0du9)z)K!|IRX+Qo$t%9*n={mg|@ z5k*e#RlkAZSSCH_FxfxK#_NIfTTx$bD?g#3>97S7HImnJ%pBFW!Ko`Wd}w2~RU7>f z1Gq||Jv{KDdCtYY8v1Z%Se)m><|C|0~ujyElmheAZ@I#O%1XQyg)i3S0B~7+&YIku1&MR{bq6Y*<<@2^P;DkEJ1MCfYcABu>)q7M^42ilW*q&tp~~bn^|pb=`@;#n~V{ng`%nAj(=i*j_hhb*uIxGQh}Gk z4Jx?oUR{7kr;T@D``6gfSziGE!i?JUw*VBs4x^ZzTEn45ZJJei5+1K*+(kb#a-r+) zQp^N%9khz)hmj&b^Fu@=pP>Ei!VxG#MVVaoMy0b zbA(q}vJ1yFQa*_8J#qf;t~k`Wq1CdV>b*DK?>u=&aWL#p2u^id&7)RGpT28w6Ik=4 z{P#%k;1}iI{U&)XojdnFdTi`1Zf|`VWY40!cs5=U_U|rGSUT?vY9(1K!8#39yeX$DtY*~Cvk4}%AQMJ(@=k=mD{6ckUL&mK`KeOtb zQ=lv9^J?SR=rb(S4V=X0mF=luf;C_T5@#Kn#>FK{rBbhAE_8cE;*`{=?8TOmYY7x} z(GccKqN22^H$YD{U(hTCKHDOEv=}w4ZpYzbt=&EJ`TE=zU;)f%TnU0-V|Kaa9 zEhcw?CX0Nkimqx?y=wyOlo#Qq>@T;isyMG^s$oc%~6Fw-_^(xOY&40pwN@t>Gw+KoiLIpaKAdm{-V`dr&#Gg)MZu^P*Ln+>~ zxgCT`6V6oxqMv4cohh)gHc}jIz;(RCWrl0i6SRR{O5L~#T}+R>{Yulro(t)O(!eEt z-JY*kXZQZ4R(|h_J?{%e+MmLf(bei-5Cv-?MyvwW*-Re=*oQnmQEVR(Ie-P-))vxf zXPh3@PT#LC6WKPp4SYS-=&ilGM(dyV$Sx=&pcrb?a3hxQMPutJW1{5y)EBd_umxHgfBj3#_u-y?)zC8*o%hvu{-a3u^IWl*XVS_ zWA{L$j6GZ-ELDA)De%&PrXG$gg_5Hd4HJ~{6ldEgYjA|4x#EJSOi40b>cgaEjAMh7 zZJ=J)VI1yHLDK0=dmvn;B^;CuZ3Cn$Am&F80`a^#BxMgm9{r4?WcDaFeV_Yvi>2Bu z%!9?Pj95wR85eE?+vQ?eFjKtVFFZ5s7Or2eGw3H@Hm{qwwhb}udOk$;=`Fh4<>dMp zJYa*>NIqy}E_^slUS_7$A#e00N#uZOzJolTJlRc_rPRPZpVyxE=*_3M_>XI^36ic zyt$#AQ%u!`stA&l095|RZj-_(rCxf5Q9M(juU|4Oel^n>$4&xW%DxWzY$P82@(j;l zGG6C}>!mGR%D9n(F?iUJCh=67KH@JcQYnP`J}=&{S_?Nhm*L#{aVgDz-=(+Z@;F1w zoo+hXMexn(nPqe$X_95rh}<95S);dwA#r(ZdbfCDd?Zlud1lc@-C651>A}lW$EUMr zC_Bt7dIZQ}r&}snMilq-zU5kmJ(Zf79so;C*CH+zruBpR^LFAGvLhnJC5q@#>(HbXFab*of-8rI3zNPJv&m_)fE3{KIOsXTf8aUK?kQppF^J%9%M^Z z8qPZ}9lI1vm))zaKE25ozv+GS?`=iXXO9#fJ)qw2e=1)6+S?uzyXBPYuj;8e0x zj+f&`E+#C|T5@+Ee~eLeSNP;X_kr;eOZsij+z&AZQM2m}lDov(IGNj37Xr1$GR54U zi>&*SwV>e?$yXZnzP_lU6)l>&6=8bDI7lreaw`RF5~@67HsPAVJtjxA@S~m%2_5n1fyoHO=lht1yzy?JdE{Exa=ATp;E4W9 zeE`OyVs2h@*~w+{Vg6`%n}5?+xw1MpPq>@)jSEZRVFSFATb+^}C!D@g3Ux1zoE$ca zT*M^%to)clHhjLw5m8G~gCp_&m1Uh>z;T!pX2E31fP|AJI=^yR>5F~VKBPUYP>XQA zB%#liytGu2nqTR@<}vR5Pncu6Qf{(tfo0fN{IOSiwV(dW3N_3;L{>Yd-tB-^HzGQ? z;6GfzFq`|lY}nTJ;}WZzqCRJp(t2!v{hJOC{;Q44zg_uJmEzxyRN}RFbBMeK{DF6r zKEAmNyD2JuXQx?UmfJCMSrTfX`k^HJyUQ}9O0qea3Ya`YEc5mo3syk8lx3o?p=> zoQ>Q)Q$N(ye>>-F`vV6zPU%IjQ#njSfO(}E_i5eDo>9(-&}Qd@k!H1h(%SZ$`|=ld zTQ2pCf6#iTS}#L~pf?BFuZq`)oZ`Q9mo15C7a4d|uyBGLNYuV^;boz{`X@)wQnprN z<&PJSmd!hl=di}g=nL{DZHSQKy_OBuurJ{Gt9ph7Lftr;ZKU~>rY&S4bI-4efFV0JC*tI8fzVxvv{paXJ!7I&Awa9 zDo*}xx#^GBBNL&ky*d^5FB(nip^ko%6+^XzmrFO&m8Ea~Q)n5!uqd`aU*n;Q<3NuQaQaN1%GlpUjvVIo z^-7+l3o3o*Z=wxvGRpIFcdvO(Jc-q}7k!1eA$h+!MvjISIQ|<#;f;Cb7GrRUMz$`w zF5LbR&%2t>X3ZCMg!Xl!f&{(4@C0%l0aJ%DU%rB-z-;0_g?hdbfz1|o@0*|NOpEHo zDjI8F&$2&hIIg6T{HSWaNm{Tv4y{q${hFO{e7to=3Y#hLV-lOZbQ-99{#5(mLEXC< zn-?RjZdELzuW>eN-0Nw#4clv3+{n5v|iJ$6O^_dt}*;sXk>3;Xamd-J*8Ax#+oJu8wap!ne4(wnVo&navZyQg?+dcP?(+Kh91oUmj|ITS9$v|B-*QrhIA1&tuX7P~hhdG<#`*U;3q){A6X zMu-kS%s8ZX7&dxWR%!CemKzsg50naPM;IkkZJ%(2`*C+K9&52hd!er`5F1Z1uI*2t8lzg<`OE{QysO;#>;G+u0JUYIWf#U|+g zVq*avMjycCZNlOxD84Ju(y;0(rG^z?#zVJO-a5{Z<+s7Pq0lUjt>n(1#^+_9&OcB9 z5~4D5dF^&?XkHQ8xcK&aw@ZdzCF0mPXd&B_VKJ34h-n$~@JvaLq;L04`6CP8==yu^NT{Pu|z7;-H+;L2NdtZD`23Jr?@jT=1+AjB6kdney-5e@SKPeupag0! zg{sQ2leXAW-b&^jmJkMW!4FuqyoP_v(3_e}fml_aVymumyGM_T?H{?*Q8GPJDtzVK z+nN8|7{ja78M}!xK_`$uZ!P2XDUTj`Su{2LepSs!$L#FL3JmN4P zPFv8?Sa2x!AK%huHaHT$Il9rGu@ba!aZ$=}h-I^A9K%cW66eACw{JEy%=0zjG?4a# zARl36PPvEf0;DaILLPM1K~`0Ga4Qb0Kl}TqPGVK55M;}mcD&)8;MXzG*<9C%Cxk`Q z@ZdA9PBe&~`}#)yS$^F4c79yHSr?D+95!MrjznAEHT5*zg)t z?@4SqQvkHcwr=YuhNx0de9QK%aL>>bvdpaM&e!MMF}_?Pzjwpih&=22sC$GM{-SVR zTZkvoWB(-bXL^o~1TFsA*=4C{z}DZdQieYRSWKfnapav5~gZn1W@5l zM2wH8Y1^#|j4s?K{G$SedI%`-O75Ckq@P}sluHhh2(^D;@7B8$jP^X507s?;W}x@%pd$I!5zq$dqdE3-ujK z;NNLz&S-?a2-n_pdx#UB4Ok!2Xk_&;FD*t@HS!y7dg5uH0-qwnVrvrJ=tDQe7WYMK_gt43@ zV*1&xQ|9*LoxIcFFI;kdHLZlNHl1i@1Y_su@#Z}28ld~nq7s}oVZ6CX1cz&kc>!a8j?=`R0FSMqeGp^;LCcs3 zmQSk97RTI`Ms6z$ezFc^dl!6c-GwDfOD|wG*DT3r=P8}m)04)%vs5@s%dl_m2pjRG zFZ-I7=ma)W$6g zglwDs1z2M3Mr$szXs8(QaYG}Lf$K?OL()@7^6@ehtZSRU9hbCt8Sh8q#%>-P6dH@O zd6WqEpHCSy1Y5KIV-WY0#oV=JR`p(qfO%787`a|#_KrKPLq~5Q)3R)7hL$lR}qy6j_3a~O_1$%>zt_Ha2Wr_0qres3g(k1fe z>Aq7aN6S(?(aS|P`WrT+fKbBh@C-9`y(!3pR##JkV?q0>hDJ;8JFnS`f+W((CK9j^ z=;y9IN&Mxp`GH)roxFQN?xa_MQtc&Vx;YBv*&2qRjaUqcL<$!k+G`;7?uf=pCXQy` zthD$4pa-(mk)N5gcz%G}iO}~ff57JECDVH3MXl6u;J)sb-64~uY_`hI$I~gHpik-| zBaf(+JC3Itew+y!skm1?w3ZB>sz3R3l8UjZJDO8o<@%}Xxo6x-J}LCtp-)c|mbe!b zz6sGk>uKJ&LP2o}(P(>m(peu~2)sfkJp)2s&zTXdI=G_1m-kV><%g%_!n)T-;dYnF z1tKGDHTm<@oR{L-)OysP_1mZ=wcC9biT8hMz0M%Vl|VA9uKH9?B$7$q}9jj`e4 zr@zt+_ifOy`=cZA@WVR;c-_>6SR32?CTiW%!4WR{{Ago^PjyjKB6Y{IpH`|)`upkV z?;-D*Pc^FNfX>O~c$wr=ncl`NgS-nEd}5NZfV>mAsxh;hukhqVem;X8YkR!HpXsj% z%S$rG>t~Vog)cWr22O=CNh?leZ z-`KwYaOhVIb(AH|-ImB|4zsWf`MNs3qMcfeUzuE;Fa*#GJ8*V&L)M|-tStu0hPxr>=P`O>s(>tK|=*DXjjow4Zd@&Q=$Fz7h-g^pzwDWQ6v&VMds;nbhw^ufkx>S}Bqax|;Z0ss@UjfW zR))Is-o1s_EmjOzr=tF|+dZaJgd+6W=kw>x2pwF`=t$_F7|WG(nw}EjFMQ~8RwwXY zAkTP9+n3VJH(S2*hS5aVJ!|-HI=hFa-I`&tzi4)-r2a1aGP9}Sz#5v)!OnhA*?%nI zBG^nCcp1R#*daI`l%cAGj2V-CBU|JzK8jd<4{o_w7 zt`!NtW;*;fo4oq3+H|-R1_=dOFz2Vd*?TAQUaY}r{jX&Otsb-d!sd)cb>W*F5$A3ey0N zC>b6O>J#J#-~JTWz&5uXo^33sJQ)0aRQYK;pXktUQ7WhK%(K)5O#^&#XiU?g<{5u{PrsrFi?m8&jL>E6$P=I2`Lpr-gCiR=y*lHJ)k204rZ7+Fylfjqm)Tr;@; z2*<{_%dS9V3*$a~=uB};GayYo25?h-pwbpsFxv?J}>fP=FD2R%@#PErz>W3VuN?f=z??WLXji}%1I^R= z)nKv$-F*ocYo=v%)rvlp8^Dj3LOQISgmjzjFucyx4!6-FJlM>a-#lC&uBrRbi4RzF z$bti%MJm~w<({io7V5x^D?=-TboY3Z7l-?W1y-Rt#JZ;_k@YH54A)4@p0)hS-HJR& zQTE9VhpgZ`jGfCE;oE(VZn!xB?&d1`*TU*rMXqRHRc(uP%yMVXTyfl0n)@=ahx6Q8 zu`+WU80>fmp7N5N9S7Ha1Eueh9nQXC4nFwXj$D;TrY$qPmOYXHvX(b{?L}yy7@R|& zD$Yh%x)S61al_^=ae9bzO@9cWlGm*6vtJj^M{w25{hc`G4x5vHFLJ5T%t6nBZTQw; zN^hd;r!bPf5cPKcx}-R(Rd|E(=*~V$XP)!Vmnk0XkFTq5n-o+($<;|RUICJ{jSY5_ z(d#a$6&$YMn@MTx4{b8;2(P%(7p*=o3N$oHLB$uL8+E!E&0$vO`q}(8?nieg|)BB<_>B|{Su%557;iQW} zh;M%anJpZlzl8RcKRZRL)L6G^veOPwvMGa zD`n2=I7bdVc^(Oouf_l;V*(P?xUQ=MI@vjscb*SlJCRj2 zzw9W_pF@TRr9#>d!d-;tf1PK&?AZN59y*0Awq8ZtE?IW`i6i@&9xV~(b@QhYw~}S# zwsy`h0hjnrRS;BLCvKtek!#QQrxEU%1{mE~g;A1Bv7*sVnT^KKJKx(HUcT}vTt7Ek z0|@`A$F+3G5b+8!#q20h)OK-oX8@>Bo>`XTC0GBgf)`;wfS1f72?mSpa#kMe1|9Y` zcs&ZcrID5`q^Ydw$|peJ7Vp1B&9*``ZyeN`!Mw^l5%`yKds8?hj}1cfP@4}p*#we0 zwe}$o#W3$8?LpH-m5F2!*AdtP1W7DBG^rv)H^Fzh!^oO94s+UGZdE1iKMuwMrHucA zhH3-bX4vZNe982jb6{cO;$I!Cm^uXDLKZ>mnhqdp0Bfwe+W3{wb z&qKP`-pt=3y!w=^0Lk44k04*#D?nmR@w&NtUchAbhgOyq`$4@qG{MErH@|0C z-0iA1FXRZ3b%C}LtyY_5MHHqB=2*6>#v0I>YwC>&7~S)5IK$FB6_RzAP@WSM)DRW# z#`~w1e$LDme6bBQ%oj*We&!ts*ZnY3!Y@m)%4+NO01KZh)2(trWJO>NSr{^7LvC0w!F`+b6*kXkPoB)wjF z1-jT%MF6os#=Nn`XvO-Ad79!e>{|&|jFOws(?Glaqa*u!`I5>F{O~#d`mL)CvtG?& zTn*hD`bPx5DzIr zHtt)+mG>;`ySMPTDwevrx^e@WrVxI39A(X+tw|y2wBDm6W@1VGRstDT;bNVf-g>=9 zyKW+_OkDkIw#jmqRuHZ5d{qi6!v!2+m$+_=Zh#U{+GfuyPF)akS!S*=5kXP16??j0X)bB9? zfC`y_V$M2cL)}jOx!PDmM)QU>y4xf;nup_ATl^xeJ6OLIiDu$ zJ|&btB}ld6D|J+#+xC*D;iO@1;MC=8mYDPCx{mW^KZ>76c-B0zNkwkdH@j>glx4X2 zM9#o5H5;R}6#Pe{k4V#GymjZi{7UI0TiCkOkN7&+U09Ooll-7Uqtd`_0!$Lseq(hxr%|7b+Z8soqS_ z&*Zo+LBh;Z|E8LHxV$TP_vNSKw>8%$1!DuamZ4T?O8Dc~z_qWv;8}XZ>wtvbVn9ITLZ|NH{ z{kQJY5i0Wj74JO{6r7fE5Shq9o`7!q+tT)g_aYB%{%Ggp>R~`87A_5Zq>w9s4ti`CE!mJ5UHSEY?#-57|eHApw+`9qKyVnTN#V^o+Bwt8m4of}Mz}H*~ z$5kFnNKWB{mBvUQqmpWK#ABV-l$!4`u8O6dCv9X6W(-@WAQ35Xw4X3k>0Z(r_LVE= zqutW zeno>4rY{y6311r3TpW$#z;Ed3}^N(aZ}2A9!?g1tBbM?rZP|19i} zMX4)79*bIy zcg0HQ`i<1o-9)ZL`l+-Ew^|BR?)Ny2&3BCjWk_zpcGMgXKu*--;*m2L_yp;9RW| zBz@&(qqgh@Y4YknO9ZTmeQ~JcDiftv6A6>2(QCY$(9aJ!Vrc&+T{=W{d|lA5+Jea5 z_|4O`D(K?F{8X!w2;s# zt}Z+*i3iv7Vmu=KFr2-P8d*Y`M>7+$OUWnf1Ap;P8i*v?H&PlSo;!4vjYUGZW9z#!Q{28-<__Dan~2H^AXiEv z`0j~k`$^aPaXiN8d3z!{?*`r}mM-sKHnq2gtd4=vC}BD0+CG4{?8&M9kaFz%4BqC> zz``ba_)IpTGdf?%WE|uhPC~96CNv)WEfySb%zWitPHj#cM-4-dy9hV!Bk1Be5$rV4 zkW!di*~||f*RolS{v)`x8B%$C|MZ-Y*$mNa7!4BYc#c9k&&H22{YM8B=Y9P=k=kie zY9KyOUbviiM?OCHQ$H2EE120pQU&UcTHH7H12Ji*3>s|J2`_Hc2(f(Zh}NLHRupul z+zK_spo?JBPN{GPHeh_hC}0)(_3i{Cs|e64rNC@)Gf{WrK+|?RAH!7SIj7hK#^O&0 z>?CTk5-JqPZz(Ek=*(XBL}C0jb4)dm z&+ildyUg!ihBH*6EkBza?o?rxtnL;rnKR6}j0S47zo9uso{F^NYwrA2fnE-Ct~E8m z><5_}Cru6)-*Q(cZfJoZ#-KvSd7CW$?zlgMt~n3UVjl+2TH!0cwmkCNpWj~p?54t zDzN3me*@|2D6krqNbnO)&H~A57>+Jq#eprkx+u&EZIiu8s-= zXZO%>E1qOm;$@v+309)nf0y|P_Tt_}jy)mwuP?#s+LvnCo@FxcJF35wE$C6C5{m#;)JG*8NR=lHCQ-EO4UPUBxK_0P**IpBC4 z6d||=uGeang^z=n)Yo%HhZV!Sj+5?qO-lw;{kBU*A(Sy~rJ6sj-4@_=bB36f1|aJ` zx>{i)Z^iok^vZZR`(?QQ!tYUvTRn#=$e#N!ks^g(Yly$1_J+#`mW5s70!`JnFIN#t zMn%UNNDGhbF%}-Cc!Y9i`%BG)dx75xgi?R_7VQ+Asx@2zq951iu*oB78v1lnO8UH%!oLC z^(JG3zFZ`(vQfPtHi5CAe;>=c#j#|S2QH>^5z>FdEp0{H3b=E#Hp&GF{=y(wg8*7L zYEU~Agk5q|j-eg4mwA6Z2rASu~3nK(Qw;<0XQ_=wU1OcUN8-6oK0R6NiE3o16jzkhS$;a_21gn(} z&bxKEoid|z^`?-rRHL!p^oeefYKvy3Je_u5Lj>^zn z2qQw3u;) zO(rsYw!6s@9#rHNAWGVMw>ti?J||nFcLTo#kZUJ^xeoHu#sjBV4}oUgaNlTizI?AL zijDn9BA{NRa@D2=MPlC zaCf(EgZ{k9%ky@WP|ic=9BGG67*xA9N@SS|k8-KM=f}Q=3tN zRh$fZrKD!q{bz+O?_&k=0qKYOY4r!-Rpl{vUsvf7ZBbDhf;A1=3+c*vbF*U@tt$Uo z+02~!3(@9m9@%A4JflOhVDX z@=p%k`KqKMbApm|T&wu}l2%rZ*&wpiAc(^rG@*yFTy8G!M}y{rIm};D=O}#V_kQ(= zHHi0YIZOO5ZW!Vt1INlPz57#Z6}{xiZ~9lJGz+v^IoOXmEdE&u^vf!2doB2N?Kk4m zmYi)E>50w&NY7ce*YUp#c^&TEUR1d*5gus;`9wb_akmCW~Ou2rg z&d9YZY?4X`_IleqwVWw>yb8^T#XI?nl>oRNh^YUpm2x6;<7_t_+&fi!n@#ZVo3*2Hs5d&~$ghE7-h;Vd1p&idHwLrMGK?!3(Fu0wmfH!yKb zS2*i3&V9QK*HabG-aLnh*4VUW?HN?aY!1*xK>cTF6yxTH$cT}PycWk+!Q}RW-FCtZ zDLZXzH2O#QM3Qg_D7&{i?nS9PkqXP@aK2gKB04{7^&}llAm|MaI+g zR3vb4{?PtOg&+GyzjoGe<KO^uj6C6=1y&cKMuaicwvwp^+&@?AF3t}!^)fC*2`Gx8!tu)9#=B6#&8#7xySQc#IS186Q&LCP+tB6KJ{ zV~-E-E?yv68#4?xQLIsS8q=*XznyMQP$%uKFt|I7Epy1_Jw+UjMlI2U1)BY_@ zN0j&#nh&qK^%zV!&cz4j$Q;#>qu&Lv!225iY8(q{)_r4Tke%(CMJYGe;T54CFv6QV z=C;duq2YCRaYxJo|4U^kF6fq_zm&tL1@^#CWL+T->jtcTu{p&b>uM9FB?sdYY^lvC%ZAGC%2iEiOw2v+|2TrNa(kxh=MV&qREFU z&(?El=Y-U5&*mc2{Eb^6K&PBKvqA^Q;W5b&#eXo&z?Ag^3#I2}0>(MXxikz3-qO?HKRYM%WU zggsB2h^*(KJx@tbq!^h(j!iu^_>2F+Fk}B?Ua7AmjU^4 z;wrh~t+I@bDd(Yox5oo9FTiZ_2#3qr{CYr)rj*s>K9(}o(3R(~>UtWi?-Wd08Ca`0 zm}fc@U1(Kmt_y38={UOwB&#SnL;5E7KP>D&@_P3IKb_7qsU#<;w-9&b-A6(Zj8T#bOyN zhdni2RR*v-4_t4FEe1bZ!H`Nap1I00EnDB-pOQ<5Vl_MwWKnQ-eJh*1ySvW)k#EEp z%t-ZKxGuoeF?=44X9%?X{OUx7>m9Y5>5J2Japz4+c(^|I3ve&>X1nCELx*1|$mz_N z7F{Z9{*pvv8yfJbgWCLm=tPkyLJ1VqstY)2!-V2K4cLt6&$s+|o7tRQwc znyS!8TEXF{CzZBTy!b1$Hg&N6!(MO7G~h<{m2#vVZDWJ7{EurA9NWXV2~4N0@g2V`4GX#C(H}CYU|`Cy$VgSowERVpn-ne`Qc?fPECYa zM!7#0kNkc%nQ-CWT)(J)3>_J)u_G7o&Hz7KZ*~5}P8WCf;ZLiP-TuBB|3;N9czAWR zVgxlxij1u8K$%T7UjC1nC@4G(rwHHTpds{zM#(Q4ktM#bQ)LqZ)=5v|au-d&ew?n4 zV#0{r$@un4nVm`)DqL%5W%-;;ES;DUvM~0F zyP-jsK!6aXPl+7FuZ z&mc}}DAMMeJWF%0vt)OrM4Qlgv?@vu!Jzwp%=hMXQgD)XdBcMjKBa*iVpEt zc2fpFz#D=J&o7C}ZOWak$^oFRi=f}XQXO6Gp!wHHkb>Y zP5LkGLh*>gKFwvm7StNVs9v!v^EP7b)!p9ZWlv=|DwbtsQvQ8^R@>`9r_0EF6e}Gf@ym=wBqqQ=UNQr%@bEtUMOOtHo zO6oUE=0JG`_0CQK1;Y%4DB%9okQC}B)aA;`=Uo=9o#eYBSG-?ClbRW?u)QD!K5`If z2=KyOdL+NJx=Jch^ak2D^SV%_#JkFat+P7+d&brp8O8zFv48R2=w;SD1E#o-{epWH zvr13Cyac}kcoPY+^jk3>79)(28xnQvRzQrKjlr$61R*u`H@OFlFEET%-M!x-R*{jb zfpinJQ;2rVNYO!jHN%{-^)R|}kvNm9@U<_@=Ym+zB zSNrdA2%0;=hw)Us-{%MX7gnHqc8EFa~&r2*C7z`>0 zY1L091v8nu=#?P%dDFQ?2PBguU&0oUsp6PmH%JAYq!naU^|njZiNbvjwD`>OW4H$l zVj}(LmMfAZ`$L(FFE1sh#N&TGcUA;iU#%N{0qT_BDaa{Tl|{!^$CFZ2P<9Bjz^dlB z$Ew4##ck5f;$fhz(B0vI>D89SVxW8w;6&r05jX6J`yAp;V*_P}lrX zyawmE)qZnRb>8Soi9s;*Q9{r=({6gm@N!h3%!?ig9HPwbF3U|dWco{p3+Eux?SZJt zj!-P+%%?JySbY5eBhcO3;1%l*t|?w z{SO3OMiUNfCWz+$t79m>OABn+nM%T2q6WX%Zj26#w+8y}ma`7vYs#-y^dI@d4LK@j z`^ou9H()Z5NP-2oq3&PmdN?bC*f;wK!rMszCLYwwX9{aN5rxEJBR&qd$1aNhTwa`Y zpmRtr@|*OI1X%P2C5Gh-j6g`R%21yLrSrQK7z9hNfJJXl&6Mpn5)4p6Oa7GKU)u~I zC+W0i?KbJ(>?pn2x%^|v3eC3J&L?fHU*x|Z^nU{8w+c~8hcI(m;Gy{Px1ov`Sgm$s zPS==vSSNc$4xnuRgp@Hgrj8;N&YrkWU@Y*$z#s1dS_8I%%y8|{f|GrV?lmL9p{M+G(v;a|f?_3!#; z(_EDK2s5;4(4ADplzH%Y1`7|MNB+4{Gxh(YTyNID6B5p=B= zxx_BH*K%)(^?&X}5p=os_S?GkNYpyOJ%mZQfF6kbyJ$!T36Y1_@Y)%o7}tpkgdI>2 z!QhRtOg7XuwKRU^?$OV`$iZq=Ky_ve<5tSa%T|rg82JOGH6u^WW#65qUkx$BxWbJs zi%!hgnj9#uKB9h*;AJee_xT{3qu zVTMwHFQTdAQ~c*=FV&ugsQpIvwm#4Mb@Pu0J)*bQR_L+b^7R`d+}0RfAGR|A6L5cW znR(-#zuDb){#v2CMHsjQHLC2+6z9~3fkzY$|HB1j_ph&v-Q)#NimgZP{N>1nRn8(z z?npwR_HSA~5$vSpOm6B5b!exLR(6fC`>lZH6)J|)HZlxQ?3xX1=E=(S370>`DtRi~ zUiGHz*dR4?8n<^kcdbqm;y|7q5d{EjMo);0LA!LL-FP$$6kq4 z8Cz{vVNJB*(-EKjYP}N%CcDCdqJJiKD#c7 zag{-2WFuQ}K**&>R~_sq-bci;fPeu89mGO;7}U;D0;$3YP}q!JmVVr+qXfkG%hKel zu3&w5pfPnHv)vgpov|W=hDCAC=2%-zu6V3^_n}C#ot_ZVjq97qVNLd*B1uY&PjK}G+KV)|=R*hM}jf`Ko7o)7d$xO$Hw-_cB;79zZT7o~14kuPWOxkI=ETb0n-+mo5n*WCQ38PZ{EFwNyDTyYuO!n&-m?n_{+0orQ zwqXe@2VX2t0OsoB)#zc~!?|x>(l}0r~v*QeprW8GOya*M3F# zHpi#pV|cqU)q1w-QsfFH;b0u+PMyAqShe(>_tTmC(WOb9=SNlrOe(d<5+IJ<{pRCK zB0{u9eeSYNOr1J-LP~#Hvx|%M#@}NSKA@Dy!Pjr3RP*5#-e+etT!(S189ra`*ok%C z`7j+yL!+Un`4ZpXc6jDx`mztn?LrxSBfd;AAPe~Uzh0X)4l>*KRF@^eg*^`)VFw;5 z-=J@{?@UeM*EZLvDwJm(>JUsRX-uiOkcqiebu37RxS4A6MUXaz0wF< z^XyMn;QUU;>~oU4OKNez5-_bIbgTG-3zCDR?wBi^xss<|8xoUdl~BpfhePwa5XP>z zB4KorhsJ7V*~M1Y>RnIf2RYn-GbY_d42Gs|=B)tS5(z1W^CTH4C|~t1y2Z$#yLpvb zM&nk4^h8K-xjGq>bn!}`CNJ|bXK_)_fv1w_O_QdRIk%;L|JeQ%GwM04i|5=8=d+#D&JYP0 z$xI4$0L9L*Fb$A5!zeV>oHgwK&Q;tCOoK1eBfH>_M_3U{)S1Aj8VR>IG{}=M-?~Mc z!$nC!@kTgM)j!DN^xIMM_*f&T&%5Z(UA?FA*PjfrbhyvuakmFIOnO+^WbO4&ciTCL z!?9sPUiBx0d0z)NZ+9njeYpY46X(agdYe^l_r|wSP2Cl{xA#F<=BfL2t^0}0Qa_l6 z4-L}bo9h?u;lCuCKi@Sxx$+QqrS#xz`|e*p6#ipF*7WTPjbCu!)o25;$(3cJCF1GGaVCBK(2aT z9nW*F_4z$&^=Zwi$S#Wc*ED_E$dG4Lf3)Ps)hQsD7=F2DXX zTDN&yg9doAM;x^C81oQY3Q?pqwq;o0cXK2*Sc=o8zI$Ofo?N!_lU*lR$?m7=-1&z4 z6^K_AxO2Px*!hkgQjp(9GDA`_k5Bi&``8(8Y$hV0F{zlG6nNI%-V+{NsyaHF`pkR5 zOS60{Jxlbs1fHF5(>&PAkox+o7KbRI(~r+BL)~xxFEHAV-66{|x(MwF%*6SX@kIySV0Lf)p zdp1DHenTdv`Lp%xf+;k~Nf%F^@8*fEM(zz2P}@l1Uaiibo7u#cG=`Dl5(Is`E#`m6 zHKm*SxbDw4r*Cn^l9%DG+rGYoJ5*6cCpRa>)_x@t+;#C4*I4929ww>zRP$$d795N( zZ#49&*UjBo{X4`KQf3%XrtR$;@+5?Fk`1@jvFN_O#-H4>q;;aRJoouyCB7o1tlpnw zQd?ZO*ER6t=#!~FW)4+y>8ch5#rL&9P9&G3|-voQc(M@54; zlw8g?P2G-dTUcuKVn=e7<*_q&2gqvr_fAfV9VSVBR(8W@f5$>av5spCg^W|*U-)f= zAG}%~ecW2j${6kwvhbm){0wy`z96PE$5uuxJ^XutXZ92SUASJ?;&?R!t%J!TyM(Ci z+Ld(=nPZ~zlMY$+v&dyVjBZ>k+gUbBU#Y3?>s(BaMQFXtb-46lM4`2RtX*|dEq!0# z`}e(0cZZ}fOVy?g11F*~>p~tjd1B_$KPU3Rw6%}DGVdpiz_Ay(M;T?;O?=P!X ziNTItx+0ytPozo{LLQ6yXkSTG!kPsPkV^kBd26EQbAox?Oy#(mbyo$ zyzGgkOwb$3l>FHjh25&RGGrHcxVhfuuIbdh?-MXmhJP5|ud{R@ndL_6K)J3qpE7U3 z4&#RGbT^5tOn7Dflhznhr*6Kh{p;)5iYLUFPx!ek_XE%1=Azi@MLPNK14)l9pV~Nn z?S5+~ioa!Z6veiM@AFH1Z<`@WEV=GFTHAFqEZ{&mFWVCk)2^Cm*SmLhCr z1a@)PyJ%I%!({oJOG<5^iNPR`8wC#hLVg3+aNPRi003#*zTRMkm z+~P~>+K(||LY)~L!1TK-MBVkTsp{e@z8vP5{TZ{a)P{|B2LCF8T!9(4*bz4#`qfl7 z-?T$UJG#ws#_9~3$juU2_doUJ!92rA--UZVrbT@Q}=`Z4=5_@a(&&gZ)7J*T-Z&8G}WciiNk*%$Dgd~_Gu)MwEQ2xZ^$@3xi~ z<%q=)ANowpz7#rfnK7={EM3N@o*m)DP)>_L3f*dDY+&HyXs4nv&^;q9DYWpcpm{qM zjXImZ9%DC!;rH}%n>uaqa&I!CtzS7Sl`faYUeuVADBIqcyGosDeZG`4iexfrKHtx; zHYXu5XY6$@PodPHLC+tUhrZQh`Q=_%9j)=^(+0X|_E+pjVI?`(0!^Es{S ze*B+)cS2~p#;P&8RnvyrP1i0Pyp0D2zo>$#Vn^DR&hZW3zC&%H#N8h}plU{72;{}v zg-ZOx)X1RPHCrV?8JgQTu*dA~NT)SVfZ7DMDscNzUJG)FmDalUarKG`IeSN}T@H>F zkH0Ea4e@xpOsm6gpUnQYkraRTR_1#(t*BH1E6rZMj&pN##4cpK?#8NN5}ewlTR2j~ zhaA_wK7Udz7UJQAW`n_KfqKJKdwgV4%aH(wnSdojCuPYMZm4gSObyzPDfb3!|(c?)VP-l+p4VjL7g7p6Aoz zFA=h4^l5o7TjXi8Wo4t-+6_8UT0U(h9f+0zPh=9|D{5Z|^w*Lz?#p9oOuNggryeUUm1EM&h~%trh0cag z@bSRrfLl|MO3yNA=yH9GP0*rjEYmlx0YgWbB3U`3$`Q5-x2m51DTu@P9k|5OA?g4H zLBklw#eIi%IAaAdjj}v+Hf_xJw9GXFTwpu4XV;seucjihZwzgn&&s{<@>THM31jC7I?LkO!~Bv= z(X~Y_H)WI1oL15B-~#nx>xd8CPG*stQO#3y)aXgua#u(qum&eDS2 zTECfG)$D!ZR+Uz~#Ty{Zr-KcXAy7NCbiI&1ui49m>s|t?y=jbzf@y>6!O-ah^zF>> zh&v`Yx)b^AUiQvgW@dy&f}0e(*YGinXR!I`H_j1wxK+%N zOV8gSt&;?q@6ghPPEv(%CD#YXdd5#cQ9-X10thPvqTzC!6zKeLQ1rQmS}zqQcE->Z z{x#5uxT&g=ngGv^tK9SUn@aEO+*)s_?6?!Ca*yWEgy`!&g36myskOKX?M`%KkmSia z^;G*7@&04o?YI%QCQN)bi7YQI8h^ac_OxgdpU9#Z_|)pz^Pap`D2=w`;K#2gJ4*>5 zvL-sutv#D#sk%i`dINuTFeZ!-pITc+V0#=?lwOY7XTCnNDRA1gma zOooRBT8c~SYm`7vM2y)&U#W#t^SK_zGy3Gd-(d!}L~#l#t z>zqJx@6fTOZh*#rzJ1_;coN4sRcRG5nZF4u<^c!D2dphw4=BB9%1XAD%tXeViPt5g zk4-w@=imFtA-gGEK1fn257V6Mw{WZ6y8~wkVaX1ms!UANF$Y`w?!iiV+1nE_%7Ao3 zFn7^=A9;t_*k9JvpxIUzT)$Jf9RC5!ONKla79Rt{OPlGpN_?e|#8>_;IeEiPgh(6Yyr@-s>$W3_ENd+L z_#ZAHr9Ggxbwu0dP6D1jX>tS&2H5ZSGpDfv6HqfvkK5gJuzDlqR3DvWPLkbw z{pi%2yID!5RQ$4^Ot>m4=nA)%j-+2dmT4^Pu+MKS$X!w8Sd4Pg`|j@M6Mo4BFTn-b zYTdcQBo+3G(k}$g7fBOtCxN{R8M8Ho>9UB4WMPa${Q76^NDGj%>Jpwm* z^ki!%u8gfDHnvl)>gBrrkb3Q&M_yH8+uz}#>RfJm(9le%^29y3`Ncrn0DOJ#_h5L^ zT~!uM{#)<4dKgY~{vUg9*%s&0vgwvV&bBfu;ba)eG;rBpc9OCb z#hrDj+`khJZcRbBbjE=1r=gwz&lrVx0>;*5$sT4x(?KbzfPIPHCs*s+ZWAE|%StN$ zh38K|FCLMVR5xJlNT zZ#nW){@H)?yL>y96GK16V(YaL3&nsgJ%q&tuxEpg)jEFk-w9&#vgnFwCyXb|hkKr_ z<-0X_1m)Be2b^0KL6o&9&`EzznUxIzxvAE(LhJc8H`M~ilsenn@PTY5S!+w}X-sg? z@pzEQxP8fY2;Uh(n~cr`&&g9t^u4cPXmbv;-02dw?1*{cb?@nY`R5`xECcuYpDc5o zlzwH=_0oKVA8~pYT^vl|tM5cMYu94UM6Kxjd_P&sTe`b_dIG|3$i8moey&s^^ICEK zC86T%SYb_O=ti`e`r;>1;K=kLg+V`^;r{g`3W4HO1-3WuXMLs`F% z!gk>+^n8hzHYo!uQ_W4}GT7w}GjiIht#FM2-_ROjOUY|p*by-}!I*CO*k!rl3Zrt$ zNNOn;w0+h5@L8Ixza`u7J4F@iF_cOpSH9S43~Mqc*8u#Oov#*R%c*S= zm+?KAv!L3+D{l$tVZ>%G0i-A4(!H_3e*wK=tqdZ$`>So{V3Y4-*81ev$%62G?=g%O z0>Ntpgk4e6dj4Sp`QFv9D6D!mKFR^G{K)J4x}rI!i}W0Ln-}3t8YHx5J*hV`lj;ic z>aq|!(aUX&8WmnKvH9njGXvPfw9CFU;RHkY5~YhxO{m3%kB~mV66j~50Kwyj={Hm!`>U5Om3GXpnVTIp{NhB(u6h|)Ew-gnlQ)qh&#-<)?gE%&@H zwHPMs?2rG+B0MR4t;fR`Cc`Fh-tUH|+SVUPt{i!sd0KUuw|CK6t6`<^#Ou0lC~ivx0b(s&8o7C=Sd%P=iHFEIe7qEBcw-f-d{VL5G2ZaPm)*K*Pn@hM`mq29b0kNI@p3`is@@J#;;B%gE4`{>t zMzR#pf=?|TXNahO$5yp95#Aoq|fWOw)L$^u}#`>25M34Q$NDbLpBhza!ws3Q^sGECj7dze_rfs+LL_~F9~}+ zZDL)MycL=icibK21!N>{tTJ3zMWdK`AU!GW@7C)qIr}8aBYbk!7*t}(G(zey!fWf2 zg#7UhrmfO6(|c{Ml8tmx;Iwbpu1)NC`e0)MVxKYyOUzLmohwTX8h|_3zyHh<(%psz z~>4qPOb?a-oMlXNL+FCOtRkrtXclgJl#lqNv?pi-`e*26bCXJ~);m zyCgzEO+OYGOpCt25*n1063C$ANjZ)KR-g1`n&wqI7&-O!9^bwdGt6(Po4z&MJq-i0 zc4WS~JGM`4!7`TB#2e+N%rEL5A^o~OQ0T53{un(43g=7x zqVDmjF%uRCCM+yWvfIX_LoDzKGK#z&wFM`YIP zMrz@M(&3vVH@(ngu^yT{Z4V1mzcljmc9!GJ^V;F5T3;WP_N4o$;lqO|Xf&p-TpOKb zTUjQQ@7mJV10zGz7a!O{<7Y9YM9$GhTc%$BnnnR#wc&$GZIt7Lct_s|aB&GF&SSX0 z4%5hKC_rs+E>bEZW}4l;vM-*?n>!i3XhgQ`$lC45VW&KgiYm#;IJplA3ajVz?o9UW za`x=lD~j;#L2EhhNnI5O1))LB`P7{N2&k2pZ9}{}1;PllIr0bTumY$A;)5;_eH5vwp>x;8^}?N+fc2Z*U@X~{^0$X zsu|lJmxBcvYRoGBBa!6Kl3*?>Dt-cSom940P^wX}1#lH*psmHs79vcak2ZuSs=cvD zzvV|@T|^d9td`B30u8mLR8lT;bI7g6`B|(kx`=GQIUtf_d%b7&k+71t z*YcBm_l1WZ3WnLWd8fYzJzu$1iQ7O!{kf>s1F6Ks{8S0(6~&t@S-RQ_o5i^s&&$RH z&5@RuBka@*MN8URBDbGIQpo6}4odEv&nI=m#$wHkjA%LfIQaSXUG_odjG&S1!yTps z8#3`bUpDUrI*v`qIt>QBf^tvhwOBPTcmO+aP zvF_4LOE_*d!wN5;aFN%w%LQevZ*J|ZwrN?fk1kxcvfq=&U}4j&8<(2WdD)m0W>qLH zCtg*b*OG3Iwqm=$BXPnhQZlhTz-gglS6yFtdtm%IZ$#>A`Su^+LQevFm_vfwhLi2> zl-%uaINCImRkbv3M>P$*+kDpaZf0h<$QV^MrS!5uOSJc*tv@lnwoLD@K3NLO-o}Hy zKI6<{9<^T6JsJcpq+EKbC*Y9J(o%7Ogl(Fs*rEPGgdVt;r*Wuyehe8kVj4XA&|8JV zmu_E-m#;!Ao%GQb&LKr!*Fcvw*u97_9efR!Y(QQUfv>q)c`bK*7uft0+A3;tBof`y z$jh`Fx$>;kJ+hCFk_)1^76&ma6)|Yz0^uNvD6Eb+yKADOd&m&!x0CTrSGPCuaWDAj zD5<#kY(;t9wA1!+v#qzj(vWM`eIXUH`u5$^GJnE9KrWe2cZA;7b~uf(MN&+Ear+JP zt3}9U-`+Nms?5l$8;8zp>!7cC=P3OqTcbcthq_*gqO)m$@Rpvzy)j3l%u^?JkRfFI z`kHt&8#vN(dD^L0;J7a~%!7m5c3X@d?8pnVK3g}Pz8Wja+9nSP3*5sYio?xrH0sQ^ zG7sr9rCYF}V-IiJJ;T4JyY8?tQ#XF;pi;VMF*>JdCP;SN_dB$i7{y~}=lnC+bN9fE z!wEg;&BDe=@+eo+VKo6O3oUhMN`H!38RH7(r?iE;5w>YQc#oz7OdyHH5EBjIFEJRb zb+%}&4h*w4FJdbM$h38nVoqG+vze9IDE9I|)UCfLw|QG=VuG$@>P%4Gd`^BGlBt0r zzCLSEcE>l4wR(G>#gq~0lBe5wlJ%lhSJilEtmDVqPF+g*^0ZX-%DgVG`~}h5H^H!y z=fRf#n{|C0kuUrE&VtcO2W%OzPTs0iB3P^Udr`hRyRi1;Zf!VSqtbqi!(B1r!lwyj z;}mowOzmdICfb`Hk(MZzDfpI}o93-_zUvAW>;^zf0GoCdT7>({(D$lEq9$AjScS zxc9dpMl@PHz8>l4T3%*z9|-JAJaF^$T7@p6?9GGI;we;f}pT`4{85q4Gw1uNy2AqG3R%#=9q2y%p@~B zpfP&47+sjbOJh_6o-Szm`aa(74#3D-Y;X>AN6!9N{V8-Z72vD>q|#s>UEx0m zm>lbbObwCCNWJL8O?yVk`2`D?yIk(=#o;pymdSd~pJ{~eap(O{j65p5zO78rs$Uu` zvY21hx-4K=y^8Q-zgK~43V$}2_$u{9c({JzsV*I_;Jc+Q0*w7M4h@*7!@IkUu|`sK zW$m|I4uF-KiRTwc0nIx99zw~>;ffc?FJY#PklR z+^w07q0O>vHIZVhC1YG%nUsqJ_5$O|nsH=9+Fb}AdLOqZ@)rHoql%wBURj)Lm%0?f z4wkp`k@Lfv>C1AatY~XEp)RMBs8++$sM1N?e3$U<3BvctMVupA>NI(oSS$%>P1kj1 z$YPk_O~it5LfN}hO;vyjiF>pGF)!Wku~VsWxae6v$6_7t&)axyQyr3r`eUuzhpP+o zg-cU`bIRTmNC9Nw-e*CDOR+>#4k~U_I2Ia}U>)E%0)-cJ+!4Nw%OxirYUL21VcNC-Lz=55ACSeH+^ULh(S!C&-HJdfhW9TC%}dOdn6$Pw-v`%ik*9f`k)EO= zg5P_LxSF&o z+3EK8Rx5F*USVyyj!)Ngaj)K23YST}Tl^~CI_r2goX_by(rRLCzg$yNY4X*~V=nmw z71l@-maLw;hkML(YSlKeN$}n5(YxZ0ABjO;WyUGZ>*KCRG27bBD+o7My{v!;Liv+q zD~Uvu0QN%<#ApUd%!L-O=@OGG^-Zf=wXUweCP(NDjLpkle*nFjHY_}1C144vcIj>t zS68uLnWgB(h|SuXqT9!TW5)&-arc6V+RHaY(p&d=5pGz%4|ZcqC%blPreD996L6>I zn-*k${8|M_bDns!CFf2xk{T79ZfxfwkxTzJj|W_yvv$+5NZxO28FYx!@LqfQ&qkvK zd$%rS8_4y7-uKZ{IvDXsAX_VV)Rk^jNAud+C%n;gl`fN04U8?eldmZiTj+j75*>p_ z?w;4`t-6LcixyJ4pj=fiI_=&b$)cPa9KbMu9E7mh1Gf2gRBf`_`{p`&Yo7Assm$fsw9sG>&z^T z%^aQ51OcVjTGKd`n;o3=e+Zlir++5N=*C|_YvjJn%njE}{emC~+gY8AH!QfkE?!D% z^Nffys%<`pWpME)!L<(&6B3>73sgc{|h33Jdup^?A97_S$Gs zi3YS?EAKU0BWO;!s%4neEe{J6)$Q(DWwjAEL*)sOv(vFy795%Kd5JOrGI(`RYsEc?Z{R4XDe=p@CGd)Xib3aKk!jTK+|u+XZPt466^TEo@lw z`8q}nt_AnTINl_D+4X!>_!{7TGulPC)xlag1=wiLi_F*t-f0rnW!Wn`Y@v$__blSp zkFH2ir=g!aKu2jS>FM^>R`;w>B!V?LkFk^uyHN2j*q($wgTaU$u3ry8~A0-X2KFR5PuccHc1R;d8KtjaZ1u`iCRlc`eM5V+1+92nr0{S+`v(Z1j#t zM;9B^aQsMrL2lXCOv&r~fwHZXR=c2_&WT5E<2SU(za(*I>?$L7vem~Q6K#ON4VIRT z1HLP+OTNtTvPfAd&N^Debz7cSUcBmCT-TMiWbC^#r}j@$`_<4A807lladv;V*(c*H zZb9Mv4gj=sr(^*nY~_K0OfC)BF5{;(uFjopWLW3q0673rC+s${FMXyP%NG2ICH!*0 zQBQwE4zq+(IV`6lQF2gtF3V!JA4qsd2A>6e1@Ms|F;T2SzI7LNZ=dkE*kXjBLgUS@ ztWTO33T9*Jdk{xW?K|$0J99n#t|Uxt1}6FGBXdP38g>QGo5~x7#Dg<4|L*j{`CF5u zA|4jUoMja2F9w^HdBr!qJ+#GY#S)h@2I0;28Z#(X(5-vRh>-@rastuANq?An>+E4g z(9h?clVC(%-eWhX7`$zI>5-hc;C95%MGq5RI28~idQyW>RYni0KlRQ*wNGhVZh;yk z$eXa)!rH{zyc5!o-dj#WzFd-K@I|0qM{bsStregl%+vJT;_`nF(95K+x!Lc@n%s!; zGMMeZW$9T_t4|9vY7kbU7-zw^9W7~nOQF>8LThrDyf1nrINFG-cX$;;Blo|kps;Dd z@Va1O4z4@?INi0iZiYvIA^ok~$n;&P(wd_8y0XNH(f8aNxrh%siRB>QN^wYaDhA6}p zX!sg#7}_k{g!?Q=$VPKac!wsI922I{Gp3=O$n`H3!-&X0wg(mH{vzD&V!VNhr*c92 zX1U>H?c|d@M|;pMl#{PzeIf9I-&S!QfP3g(R9$tu*)8U`U+Caor^@3hOa}g~P-)<^ z?`ZMqB2sXwIX@@oe5>O?vP#TX>9DenqVB%BWqkuG%LPSD%~^}^FSkv6VTkx%Fn86r zPTa4)JUuOMik8M(Shyf(m%5+15-#oQ>cwAj5r8Zak|#eu5*|Ds(-D%G%0U_%#i!gb z<1X*8y9e_6YNj`u54{^T>)E97e}hT%886@&B#PdSK&;1x995BgDvAVrruK&1%1{y9 zv;&Q%9D&>+;g*ZB2MQ0SWfO$j(E`b;6NfEt%#y2vpMTxZ#3i-s@EF;vcY8&sb9hXH zKTxu>MJB>(ioYl99LKOHRl!OB)i_&^NP6C4yM+C|*@LY7^wb0?ptx@9#&kPw7A}=& z>tXuot}Oa7A$ZRI8+@rIh^m~hxzt!W;_c_@i2(~(ww`B^r2yCkRv9&m*2Z&r>H(|Y z4oXloE1SC;DHcH~!EI?^rJ@epfz+d5#9V$w?&8JZ26Xl8{o`H@J3acR-ie-35KFY@ zv|9sW{tB!xwe*ykic37%@LsU@f%scgHNZ>!EvA zhoz-04xcHzX$-%BZ@z=zZ@pd?wKndNs7|X?U2I;#^NhN?^rc&}9XFGss{sdStQ)!a z-nTqbt{B3^#mVlUqvg<>9Rw?6a8q*+2J}@O{4#hu}Ki zfo^nP6(&o0Hqjy@vi$(A#{3Sr)0Am3LuJ+x?`wC;z2l zp=D6p`}lk9K^_?ViK)ypJ)xUk+QxKP)RMMyRJdU_rB-E<6Qn<4sbHbSQ6y@_Kz_)f z4)yK>MSIi}t%vXmK{wJMj47RE-O#HOKy2^uxp2r;g|}tGx|pYe?f#^FFV?Ct1jKp8s#37 zvH@t2+&0qk>&6rFi;C8u-6RjrVhMXRz!SdklbPPbd}+dcbXZs!RLMd}CC{m(z_XBD z-pC&ZU!Kc$JB;fppr@b5uQNV9d!1JYoC&3l-k>4gUKZCQ z+&1xkjVP64 z3h4ZE;f@BU8jF-cna^Klq`6K|Dlb~wz)1zV>tb`DjL1a3cXn;vk`)gNhJPNiV!hW` zVrBLf8~q@cl_L)<3)Zk8)_eMx&(~tj|MF6c#o&_?qHD33QS;I8V8$UKc-A&WvxwpT zXRv#b-E35HbL_?rF7%~r+(}p$hSb(5l?kG3!gMwyh#7N6N=iDE%-w`_n(i_xi%EP# zJEyR&O6~r;4`O|<=8I`Lqst6p2OY60es_J(F_S4(psZpr{RC|OBQ900hP9Pj7v}8P zV}NbZ7VSmvQeZc8RnR&C{V!ip@Vw|%|p80~2SO8Qp%SgGd{ zn9w7LmtOGZ6VWsl--iE!|7EGC*WDKHs-Qz|Q<3Oa?kDsn7EtH7%M=&9%%)$%N$L;^ zFk9wT8!%`!89%CL#!Zb^PSmzoqQE2JVBC*iC>LKXhkb?5(b$IqK6X9!`t_lMp1h<+ zbdlbQ)SUlpGP0;5iMe!eP|Q4~?|z8LnPl*4T{J2B`MJLlpMDOlO(o)&Wt&A&R$+Ew zcC`s?CfYD1qJ-hD+4Sn@=5m?ubw)Qa(JNA%gg1BN`6;eh4_j0;rq^^$_a^du&i*yg}|e?-l0@fBF~k5fv^HhJV%Dd2g7bE5Y;VKQnz!i-AP!G%ES)7ZlQvd@yx?Kb_p zEXuDS4PLu^6MlOi^+bUL!zd6=o_j#;U{?xXy~8CJ4mMjBo0p>V3iHVqG^mF(;;C1a z#Njr%2lN^ti+gjy?lz`=j4jbUI>0Z+PZFTuxjX<2PDhb|eLO=qIC z^D2NGek-rBKFmx|FHCa9f;RF9U6)B~|JTQJj5GrMok>0|BIfu)ZZFPPpdS$L+vhGr>vc=z#q{q zytBXNJ>S&xEB+mw;qFDFe}(rE^x3HMdwmE;LLzz?Ve%vlN9VnS+AW9El7kv-py37^ z8FOWnT~N{P_x{H`IWX6;gG3m8`JP4skS6le$+Y11Oz#}=*q|%a7Gs6mt@&h!qKM;0 zz-z7>f?RvOAY200zU#r5=t(M#Tg8P=guEGFPf0ecZeX<-zR9?VeK z;JGooVr!e+5;bt5hojxVK~=YTROCgvp*|94?o6v^=xHi-A%KZiSbCEwPEatQOjJC7 zc0ik+`iuc{NE$V4d_QvHU51jjR@>vCj;?KI9-F)6NloR z)%v3VMc&rAi*|7XH}jq;lm>w(mX>Ww2M6T^*UC26qp<$a{^XklyYjm`>CjbRR;ANk z&p=kAZu`35?O|NUs>5!jm88C?PxrLN@zw=x*I8W69xX3NC$k=Z7ccFh?gs$p=H#}6 zw~!q9T19mCcS9>Xj|wZXG%`K_5avDIHgm1Z7ByDg_AsC9faPQ3f#YQPZMrMkptpC| zSXJj4i0rdB*B{lpL0p)m_I7GgGl!U%Wp@`-sxNjEVsY``hGNZC2oY&xIZeK6BY7nj z`$`LbHMkJi7K*C5~@q!@SQFFdQGhJ`O*DHBpz%p@}&lXBXVv8xRr_q3fp-*yvpj#n7v-;nsqxUyW{5gX zjz~SJO1;aSBm*ThorBZmcMb}fz)e|gaY0~0$-X)F;pR`7>xpKg%jVKuP_%0rV4prH z++QaLx`82pmTBu(EAzQY@Jn4)VqG{zu^C&ky07{gZI-ohU-_%rcb9 zA78~}GdMV@V?m*3C6c*e|Jf7vONtZ7Uwydc8x?G;U)pDT2*5Xf88`|h81CzCC3M1j zg|iGayz#Kfr#o<9@_>WU4}FvcAyqk zxa3E(A_GJht<5z&_e;d(p%LOzalsklI9pB2SKD=^>NBzMeE@5oy^bOlVnKS2M_sIK z4}H&`#=9tCqcb(GySwN7VtV>skb|F>lbcCUnrT8bP1-@*qhYmlxRxxmhD(X}p z>>&mKOD@WiDwGx@$s_{s-Ld`ggEuuqwq-h2Ew66Oi30!vE&`+vqK9=<>mp4wM!4excP#^iF&C#!NMc80ZcwJaz@K&V5mHWKybKb` zjHSbEmw60SW)Ysnjl21(@}4o7ra@b>B4KT&7qJ<|$(_uh3R>Nq051RbsdOkXbVHRAqF<8TSx zZ0UNyzC73bdfi~7v_gjqv0AqJQL(0e21Wy16_Oo4`H|(f9mQMa?PIQKGCqli^_0Qm zpoEVNKIftE*>|()g!U_U1mUNPu#oJYz3S3TEFZCxyVv1^8PvEmMl|1dttGt&B%^n?l%V%_KJABYPwccqmj=dU(f6iI%VMhAh@f8 z87H1p0vu8Qxh3K7c)0rWXm?fk@0O9}M#it!8`b8_tv4e;bUfARpg{0VtZW4N-5_Hbxa`)4eou#&sCc;UTv|gm z0D*3_Uj+EpKkJFKoR^uWr@8nRFx*KB;wt6EwAf@cd9poWP+=&UqSL_+g#)esm*||_ z`O2UO@?`bIak0Cu46E|j+GYY*yG$%0BXo&glVhKCPA*Ehz$1(x|LoN~H&j;LtVvOW zd;4u64M`v=*EPKErkqo)NqMiJiI1`>!q+n=X6pyU%;+%=3PWwo8O)q4 z7_cHZr#!1%E-TcHPvLPuOa`gt*Qy6zz&zEJWQv#=JA10Y>78=ZQdz@@1LQA_OgfSy?P=0T*6t7)#nUwFFFC(gBAcd(_j^qb)notZx<$ zeCb-(!a9~~&~pPa?M~dEmoc)FwDodjV?T%dsA_KFh&R^j%fPX3ZG$-LZM>H?@z9+f z%R{y~sfr0~KE&J7F4%qKs*1O>A@FG~SlrUY0}ju1TZZGt3tING8wL{V7Y0TeXx1e?1{rO?0!~F85;9pO)Gegb>!u`H}At_W-0AY@uUb`{t=4>%WgxR^7 zFh4>1-Su*vr0aDR*ULvkb14Q}KAN#W-tvAzQ55YwhZC1~Psn$UZMo(OFA{tPhKQs^ z`Hk(1Q}AD6qed#3sDC&`UEhW-0X6@pJp24H4UIxau@q_-q#f{zTPuzNgl=3R__Dq8 z1$jy7_h%)W8g!N)OOAA*c8a7J+MkrTXu(qEQoXx|s*O zq=`p(zNv4&FwEe0MepP(ntC|Ue^Rm*XxF{#pHv(SZ~*+Hi51!smHQ9Otl{e71Af^J z$pB@aC6hr8H}<=UEgF=Sb33@4+lR#gYLNLS6Xd3i5}78`?>lwGBNXaUwW(&5{l)&4 zON&vpV`Y8)UOdIiWuasWBszFejT`{W!#^7OFpINi_`awur~N5skr`cf;#)h`{@gy5 z5ew0(R5yZtTbahg&~fyE%fpahq9x@;Yy48ouBhdV=>fu%!7H2BGDx3}acFv=Y1jbq z!avFmGGma@9pAlUMpHW-^zf8w2r&AP)}jD;z3s20H{h_~*Ch)N!vKk)3!R7zE^QdS z4ghb3_tDR*Iy7kk7vKyRcW~2;P}91({QRVZ)#N1c-Wv$j|E;{Pc#pQe`(JAmU*xg# zA8TZq-V_9oM4keX!A;1Bz6+N4@ld?&<{(xCs3NjhD<-hWv+lOVROMf)BWOk|i#LC~410pP&^gm37Q;?xl(z}d-CQnR|%jwk~z zf^t=o>%@=aY;Ma5w_zHwQsPn;DCq9r? z|5Ld`3os0ycUTR=vYqjPjQT%>R7$p#Vj(h6rs!Gl9Y85aE(R>fyX1q7mS-T7|A_^R zrrr1LLt^^Wj4v%ll51m(z}&u_@NJev>5KWt0K3%L)3J$%gzK^WCr^*z#GXWY6oMA& zZfw95`@lT$6pm>w$@lPo`Q%eKEK-XdKj0YFyF8A9N?L{&9QIj1z9|H_X9#oy&hoDv zAWYwsDY-EeMdW9&@$y{1fz5nQ-xLz+xW7hkQ6A0K>>#T_>7rKP<>mYML%1L_oznBc zEgfrm^7K@b7P6Io`vDTdy>P3iV*KWzO{;OB{WNsxcC5@l!U5zVQj-p6VMS|si8QwU z{G3(6t7&xc+mzljK)*zL6&kl@@_Tya-)g1zq(JVdt%mGoHU$4WNfN-!*$rRL7OuIz z%~;anUy{%B@d`LI7ANisnqUULAR#5aZN-HPzx&f!s&qJ|CDcR4eV&}S?SYzLN2KxF zedcn{TKT9Kl*#+!0Gq@1)7316(6rAFH-QAP1cz>Fl|lt5<})7CWil5ovjZ_!6I!lA$CIBwzhR?zyPoiGEL?a4d{Q$svF}QGME?v#peF6a z))H{f!(C=;F!0Jx{M{dS0pZD$e}o_d2qBd(Nb4CAH}kXEFx^7{>*B8ZBu0a_N|Xn@ zRT3LxCL;P7n*kjZH#yUBz=la^(2Q>@IZvr=8EwK#p;F{<(&h9w4-#=`{KmX?a0zGx z(#mr@mW@H{XICK~`gpvAP%FRrbVH;8$}qW2!%IhP+Ya3k732Ds0Olay)*qm3AFt$aN^gOLOidSAi>8c|2Z>M~NcxfS>?C9vJ_x0>qq9SN2?9^O zs_B*Wc(^BIEX2MY@z^dW{6RvqyFXe2^Va|8xA^)hvR4(k{T>8nz2Z>QYu>ybj#-(o zMMx(dM))z!!{jrQOJ!W%WSlfWozc|yBOrU#(>*ius&`0N8U~x?f6bIR0fBV9%U{up zGk?cK3akTT#lHT2tZ1DUJK$k~>j$A^A$B6rmmg;8*$d6;`(I?mumX$Mz$2h6hRj*J z8{>K84?6MePDppLpJK0o2Wo$A3Hm* z?oie)$kkf3%mo7^kWPwpqdMPL8uV&)+5X;AT> zArWabXI|TQbOualm9B^ku0Vi@^DeapjH}uNR^aJMsul$|0Y^CkgNFbS9>8Ti46w(! z#hq3QGP1|!NH;eFl+Zo=Uy!ZY)7G6_KRW8<1O5J~{2X=N$)gLsB_mL_wQcY5|F+8O z=<$$x0u02QR#&0b7|_)ff$dd$Fg_*DFB7! zC9m=!=xX))aO*p(_xjLWH7O}6g&2kdboozx48FepzE1+IQ=9=rrY99tgrpq4wd1t; zpq2s}%23c)lzb`N>|r@_^(%vf81o{ABjO&${)li!?yZkO=~gb2vd1tL95H|QQs$=K`nQDH$awV%e$uTaLDp*~XOv>`#5C7x1!!=pNy3*1=Z zH;*}x$}!*pY=%(lOkE~s-Yv7GZVcEib!0-8Q^UaZ2GI~|tP~)7bc-&k($H3U)+=uj}HTpK-%Q>utM6@x|0B`PmZ#29Ae%DyHtNp-Ug5+8P zoe$x*I|$KhdeE(xfn7zff&nimzL~Sj0C-Y^$e6eZg3v-;z7O1a@{V;c@b7l3#)2>o(tSADNXB2%?pG8=ljDb4etIoa}f(a%t>H! z9S)Ey(f`<~iP_Y+F>0Xe%^{-SN4O)KF0!Vs z_G!SAfB?Uzq&&Y}v+4#f>Vf|LqW$6Hqo;dg19u8D8nK@XVy5iX>T+_>o}KoJXaOYR zolg1kg8VlXZHjDa4+3!SK8#{NbHg%fgWn9jeVFvAv;>H6Z8}R~aziB>@p(%TqEyt}#!@b6*ECnnN>O)f?S1rmMuPD?={$j{i^lHJ14JM_@qga(21 z#Edi4=NKj?7CfHKZZdk^fd2tB_v7xtBR)dApadp^dSExZ^F+h52-_W+TZFJwTVx~@ z;`JWi8jt(a@bEj28&O+6EunUy(s!kQrmm2}*;AcN9gX_#ARJmgKE6V}Z_Ge*KaBu8 z4%F(5{KxBgv31T7>%tsJDSLvN)pZw8H?P)<@L9y-a$InrO9+;9^Hy3}@eK&jv|sgW zZ*R9av_Q`%ZZf+>1*#}{_Toh_aNu3G*Pm(y{<^_jv==7fS&7gv;`g!Yk#kOFm@6^vfPp@V`S~LQc*!87(qHYXh8mKRlKT2j>T!Aw zk!ove9UQX|1b`@BW0w=)V`EP&jUzfSX`4LSQ2sRY9TScTG_yi@0PNd-T}!Jrwe!P- z9axQn38X zT0nCz+RAI4?!8%N-aKv4u`Hs)wv_+i?x9iivfek0jEww@jNIHR=7pePlW(f=e-Zx? zUL)$?gopI(O>1e*YIz?_z}L?|zz+olCFtFGK5+x-Go8!Kki1p*!e6Vu4vR%ZG+#Qj zKMhagv~(&3=lU(6?BPDY$Gr6bY_j)x%K94oFvce{Xh2=*q(0NwMgQ3^I!lg^Y@#Tn6ESO z!2*Gftu=~bW@c{c>SmItm*w3X2m#6q|9|iDft6Y9C7?C`C?D!Okp9LW_vbxt%m2f7 z7t#K`u>zJk!atW0{i8yAHnf$0yZ}7x82&pR0JtQ>|K9xqW+p}FU)y;=|G7H<-w*s> z2|gI<|1FEC|F;hbqpxeAr-#W0jWNGFx~(5STUT+3KB5W#Zx8Az& zob_eeznlofR)FMP2k|eiUtcEFI8?+fS1)JiF7Q2gJby30vLe4p1nPZVPm28J`KGsh zZzN3{#TXp85_v@T;=M=5ZsX8OhGrLl|3YM*7E9D2&>WCm-#zRS{$8GaAV$sjpI886 z8Y4$)E=;B}QwVoDASlETxr=3ay3*pi@<+-QWb0?yTpw@5*bYe#TCL`iV;Gs@fYtdQ zg>3&IrxBUgBm73}w38dT>nSNblWnZW`UwOne4o_^F2*MP?jXI>e4QtD@gH9V9>|R? zGh_1KG9?G?3FBYrVR+%I=wbh5hSXai`NPvu?u$A~)Ako5d4_)*kt+#xlxdEt<4P%e z@;q5?#SFBcEF?m>?>!x{V$yNDs?Ij${uasnZ>!5@rkUm8Rg99m;zFRNz)Wwf50AN- z$O(qJi*VBNM;~0#zZY-NRE9ys-I(~v2R|e%y2sqe=-)hTAJx`PwwXQNCt~~iXMz96 z1{J2OEJzPznN|WAzI=NY`-sE`=lU&=YjbsW%)dU1berGe(<(56pZGF>;mHs0#BfiK z-7JEoBJ;v)2LS1A6uAJ)9_$AvjXZY`--61kc zzJ5gVr>>8Wep+#pt1o~e$YwsX!ahThD>ZkD~ zxI`i8+R=LJ{l@b}ny@(N_PvFg<_E#}FDhrU$NgY0_2ontLWh8jRCqk2R&A!S{Iwf- zGYgxzo!dop7UqT3e2u|*QQRqXQ1&$++1%HgIh|weajH79Bo^BN$kXDw+f$#ra%R$U zrvSOr;6ZSq+VwUyTVALvEipD!e)xii(-0m@7^1}FWq=AQ4^A+McFHU9)JzUVx9fV| z^hTJ)ZM*!|yQ%Ot!^&J$ka>3Hts&E^*}b*6$%1?W#rIZoKU^kT(%g`=QqJ-%ASg%Y zAiQY&u6HAAyRP+{ z+MaB|aNle_LG8+A$gF;S;lC-lEt8YZXw@I%rKJ)XXKroRlM@i~YE*(|EP;PrmN*{7 zFTf@a>&dxIDz0m(&nKQu&`l6jAoyO3T3x)&9!GQepQYYcNU3xT~Jm2%H9zRm*2OyR^w#_@eUMNf+4 z7?`oFwvu)aPEp=0$G1|wtG}-Ej53kZMtncR$v*R;RBsz^m}5QsKFzSqwC(wHXiW2Y z{;Rvw^^;lcw`#Y)hHO+h+w{sa_^igOXs;u-8$1yMT%1FMX6_L=yMxQW ztG-G2r_c^;*ON~6G&ZFO^e4>@r&iY(e`l^c*K$91dE*8BAu{+%#RE(&a_d@aKz45b z2%OZX-cz~($#W^V$lGPm0Jt z?~YcWqoy~w0Y;wvj=9bM)dy|OIj0`^vOJ8Yr3Wn$av9fjG=4`oNZ zYsW>LRcfE3J(s8y*D=zJf})p4Zpm%j13Fo`U2jaAe5ye4(Ff=jdr6I zgPdI5p0{baLR|K*TrQVWvGHW&e6pA%FzziEZL+telMx$LDfKaUS4v$ zRBT$;YTG@&JP{yH4l1czy^fBjdiBgoAd9U|R6AtR0J*cV5M*>xkIu296eE06Du#wR zK@paPg_MZ<&ojA3+lIk|D_MiI2J&FjYg-Q~uG~FP*>SNl4X83{C%WS)>h?z0p|*>W zj?L$*r%|gNZfK}DwC3HnnPGg(YS%{tP7&iCNxO28($&hs)#VoLkH}Uu4l6%#DPqFc z=T*h`1l?|x?=?TQcHf;1i%+)X+U}#HYQ6R}9yz~Gnz|puVU8_^MSf{;73vA^J`I`L zCzxGkH#5ea8&g3HEMi(w-xC4`U|>aX11qiEkEi?~BT<4=p{&Vrp7JC>vS(YvTt_Q| z=W7D1%i2$ZmIVc?$o=QZoI^7mcBYVe-L2@b4cS!>xSxo>_86Dcw5cG@2+5q9TBdnq z9XB2j-59-{Zt(3p>X~0GkCfG5|F-f|#RkXmI$E_pT=qGcHoIr=S(wh}oA?T@3mG_C zk+hMhp_1OU<#x#4$P*|5Kx@BvrTu!+<*U+Jb203) zHvJuMAzTO7gz;*cFe0uJFM=eK(mUONBY@879CuONO5l3hjV~gmZ9~ItxNrPU48gdy zlEZU?zg3Xrl}vcvJ)j)yNS49t)srJ9=YUFEmRK3&`VRVKf9%Ryu!+uYqx*JNM&OU>gOnb-mgs1JGQM5>NdL4Je)4Uz$@lo2Z-9^R%sW9^Y(Lq-0p5QLUA!u;V$NlcQf8kxvdS~|Rnb}lw%0a>Q?Q}mLjHPTumNrZT zKz8_4xGWjoy6!r5{c*q=O7e7(24jD*592z`MXu+)Eabf*54o*7_0J}0gAId*nX5CHC+^pKWh<4wY58$e)*+ltO|p`~GzyP7k!Y;W31g ze1VN|=lE@q6|ykX;H+h@MzGnm8;AJn1ZV+6u@KTbOi3x+Z(Y9FF8-NLa|2F5;1kq^ z*erzHi1H%*aRK|?)!k&&Fge51gbW#fj*(CICZ#m)%H3gp*@id(clIe?<>p4UTfBio zz3|`%x2gjrxq;KI1pn5ZgS0@vlblU|V@dP24kAprt;rZ{<|TQ%8LQkX#7QASFWd#Z zu^`^Lb*ExA2q7YE8*h{$F`pQ3VvD;#gzgFwbNkl?7maMiFW{tj9qxvd78O$p` zBofB~5`8kG)8r$F^6T@4Ly^m|?Oim`4B&N}>OptL`|(3dfv!w2i@wO_!W=i;{$9Xm zDJEk}O&@#rF<_bl=$N+3aVyI>c6{y3*e=arFt7C-Q96_we3*9sC@nYQ0EM*{0gF+- zN>gnXv)jazvMV=OXc&Iiq4MZ8#CRU7VF@kv2A$S0U%|t$%Z8nw-5F^#;i?)vzluu# zrZ0F`gW?~Wrc}C^+^+4G-cnl`dHERVoKGBezkkglOW>?3rf~%><8AHWMrPo!bkgj+ zdbZixOze%Xyp4a*B2to@>KTjKFa7IW-ZWikx`MNLYj}hg4<5NQQ<0Wm?Mj?$2kGXf zDZI6w9*}&Tw^w@}1Hw8(mpAN50h%7c;NYdCHKESaui}&d=4>j@+IiHc{wj6HxvA}J zNjQ9zc!tB~?`C_dtrs7jQyxh6mbIhynH~Td;tqZ3&v8N7(Svf-bt--Sjscwr2kH-~>!gFiKN>_}vo@2B4IzN<7u>|CFX%N7?4HnE1f8lHXHeluW6zl+y(bKAGeSTaqEgYzumS=*;#yykG{vq$`1nI>q_8| z6!VFRqp@!BM3}#8Z*Y(c*L4xriv}}s$N61+{WnJO)5J8bmrj7fd5oWv()-lsck)Cj zW~U0>VUX7YulW+u0Voegu~hB#hju>^#JzA2fP!p%{v{sqW^Q`Z zk>U8~`qxgUk1S>@|F{q(y6rMOAbw)O_{ajgxu?nx0zNSORu418~Mb8moUa9eu0^ zuzeyTC$7LjH|W!}#O>R|4+AA3u|f3*6+O~7bdJC7v+U3Oc=Ooa^!J*)7XV?b#QEuL z57+SM^MA-rPT~E^Gvx`0(o7=X#H4J6>hH9rc<^qUOCGL*eS=MvRm`q7)Z;*Is>Aev z(3V_2|Bgur^S|b?yU&k+78;PcCQZVp#FLZGQ*S^?i*|`4LZ`-sVVgRKXEyzk6N+ zahihS)R$j8H|f+q&#am?US#0Z#I9pKRND4^Thn- z8BPdK1AIt;uKeunWpey2@S<_+>$S3~jROYy%KUld4u7~(s8&VZ8=9Hxg5#sbwWO8!g-{B7zzHsBRHF= zugM0k8kBKFFii;24zZR6Creyc7lxOd`T>@#WIB!Ra&m}dw2HVf6|yF|Oen-zf&g`= zhm=UDiu(&H;S(4TV7RVnI$xlc%u{4vVBf+_|H$BgwL(S9JND^KGjW7~O2nh7WIvpl3iABZ!%1(T!6*l&U;PV?oxDmM2^JHtcfJjnhVn z|4w|M5m=MXBaji4^N^djH}%B(^k(qa%GSfYZq`3#Ai)?8t(pQt{4o7k|Lr@%#o(TL za@523?YAhq;$4X0^xVyjxe_78Ghqt1U3VqUA=E=eXa}sD5%)S;5iiSVnJ^`d74Xk5 ztp9eIb@|7gmDws+6T+~V7qpTK=L@Sim%QQi4|%daE`c;RNoTB*RbKe`?e^v+_;{9X z?MBR+#N-@=o!z8t_|2qK0C_RQ?_`a7F&}fUmDPB-`{KBrgN=~S(Jittyo;{nbHgq2 z6U|t-ocHDI9-nw`C%TuHGv`lEDG2@Jt3B6wwd0|WqDV}{?HTD@zkmp} zyJ9cOGcdkGCg(_Rp6M&cw@#Y@thc+jAC=d9@Pi^N;$j^PbcLvs))&*coe&tlgN|3; zUGO90B^>I*>J*A6MApYZnKs*%rx#JCFUXkNY+o|0eP1b@*I^Bo*Ja+ZcPj9Gpah$Y zAO&{SFnheREp)BH_{T<7CNE(4hSA zj`L12ncak_ic3J1>Y@voi3fkRmHX-03;7Fq0`+SJ4bJ1@Ke(5>U(03_jijZF1qMEJ zA7V_0$K>&QD%#8?61K$3{k75?MY4J&lh2Cuy`a}~`_Pihe!|Nz^skpnwjL2N{fGlC z@N_{tJjgm5TU%KBgrhH+tIrA%t8m_vl;VLp1WtM;3l0gzL7LGY<(u6&pO(65=uw55X{*)Zn8>Q2zIA3-EA&?DFH zWx$8Btpa*>#684LER8(r%q|*{>pxA!WdnC;43LMfma6X+=;6yVfs&1^3SR=hNx|=5 z##>|Y8jN>g)$z7R{MK0=l(<$VTv$h@ou46!9>B5zIVQn0 zZKS;kTmk&+g7n*}gh{)?)3+=^;NOez)1pWI=nrXnJqxWExU*rT;VWD(5Mjj5KD%pQ z0)p!mtv}>BKh>knj|QEEdklYA&uHI^Od;mX8&iI_dmnw8dvQ!L7;A!6nND${*F?5< zIUhbs5B;KPBoOXZL#y1#Lm2bD`SN0_YWt@qT!DmORj<|Y3VU9Od@x)_qqf{1>_a}j zaL4!pneQo27PW-R{cx)`Dhfgmv66^`!Q(6>8-`A49?Y6~$t0CtHn?weew|pylwQ8y zQvVv8TUAzl^cusEhZl3461b#Z&#m+918^ILOa_;_KEy=@K4z6KH#8}nl!_qx;|!M% zc_4wpm|YI4-4;u<4t$p{^}o*}(#^@cSOP|#!56g|&62lkG$<8J+-STYM2O)wfpIq$ zN)7fOwMm!`>1Chx{bx)}G^`OH?~L7l{z3Vbt(cNmN0(w0*Az|_H^{H=#wQt0y6#i% z{A;_xDF0GW#ilWIi~$jJeBK!drnRyduvj_2Of*EpA|?&Yx-DtH8&|QjD;#~>)@F{p zIEAd}>bMmUL;X$efCkD#Bz`ybF8AWJC3^+~4)J*pF! zULyM?5MRll7!Lwc4vNGHZwSR_SBl7aLUV zoY~HDSLva(Kv$5}EFngdaw5Lc$nM-PGr>HZs3<~>aN8}T;wK63xv8&d%A<83L$L^Q zrU#s!A>651VTKhntcBDSC^iOaRK~2Lo0U-0>R*aSY933&GD0(KCQQgt-rb+)8?rAL z9|pDgl_b%lw_2KAw1q(CBDFFeXF3GSMB-H*;qmiH4uc=0TvJ3k?A3RZcn#gln>81O zE>jg8StFKLSb6j*F!KB#^2hQ@mw%@CvA(A5YF__MSJ$p;Z6uq^X%ZsTHMjW%TihS3 zCf-xewVD*M-~ojAm8D0RrT;gTaK0(*CT&DpNhiAnR;0$_6?f!n4!cRR{Crbr467$C zcH3Sh?q4Ykn>(Y&z$c8;a>=drSTvljCZ@t_PDkB9C!G`zon!pXN6qdwpL)%t;f5Xi zXEpe#>2V9uWWIy-`BKV&4EBQ!izu<_^B>=&Eu>o@eh5$e!#JMmRA~_x;pcc5bCGvLMVJLkG1Vs%JK^@DA=+x(yXN>IX9T4BWtNm*%a?|A%UGJm=(PXq{p z34d`t>XaY&Xnl()4uySYOH@>c*|I=!}9HX~+n zc7n3bexDe95B;3If)H?=tak}(vGv+^4=P{bGgEbZMY>#fMmV1rX?UL%3Lwaeyvqm< zVO8Gw%RA^zD^`3!Ko<+-9RPGgQId?UxEC$P>mshR7U?P ztv2a}F&;ld<*e_+54j#`mTN@lX$q0iBP_|afqi%dKkv|A@Hw78v|S{*@@u-h_fO*Vfze#HY_s=u9&R_J<+2jH=E zrLPCXj%2pmYet`C1^8+1)TsC45EU1*293IaOp67f_nQ-h(+&kf?h38EbQOY@506Q) z(a+rU4aVQLG6FNR63_1r8aioqhW6RQCoUAgf}NPrmNBzswoD%?Z0SH7{%`7d z+Yzhsii1yf+6;R#AVKwFuM^R++l)L?PlLQL;OmWA|242TgS@)@su!)Eeo*P-^>zl% zV_>^Cob0muWfK&B(f%sj&@4?zm(GhLQ2YGvco#7yoU|g)`(9-bX8#0B30e?2XPx@~ zCNTbZ79-Z{G)9>^hNyU@6yuHJ<56v!S9|x8Qn14z>M;M(^yE{*!ZC;S=1*QCfU;4U z;BQeT;mw6;>zDV7QZ!P0PD_UVJs5O*GXms28ux53V(F-T@3t2U@YKzWOO7UuD0VZt z^PcJWe5J2FZb-thj^ymRD$`Z|uPR;G<}Wg6WjsDWHCL9u=Pv620}p05RJa*o@T?!VkI8z>wS}u|GLb4v+OaOUPn7CVTk6(j1XT8u9^|AjCZx7vHb3A7B zI^71llFIep#Ei6d0Go38s;A2kYF?_0vitk-vZ_X770=P6%XCLe78un#zHjy_d8#CB z&-Jy9z28Y6FN}m6jr#}q-v7zk6H+Sxc^Dtn+h|`DGGacPrP`&$UEfz_8J4K&x#=le zJB@TqU-4BI#zn9ZPzwbhQg2B1JchX|c6w8vILVh#YvS8-l^(5k8yV-?QMclTf>Sb2 zY_rmVOBWBVDfw3ss1c`$#w@9RfkE3dZ1hmf^|`3Tk|J?6wLGVl+jbO}Mbb09^>SYN z1;W_T$6`EFTZf~aj_p45iUh=GQVGW52^bmaN2M?Zp6Fo-H7r=%CrMdI9W%`zwq)M^ zi8UzE+&a-NP6|;d7gw!UN+>ZdOtd4M*6L*V0I{b7ao>ps`WBJ3T++iUX?od7qU7!O z-!;EL9Q&V-n4 zyXfd7AAD~xPSUT^a>@^s*TTP0XC~|3><6iD`$mX)7``9L6?Bc*!s`E$$To-_1Iung zbw0QoDF&eR#>gsHrE?pxzpE_VxUIvvFY)ZBD(T~&|1}4e8W%3I7485FxA!@X7u_XQ z|03RzliWc)Zr*wfzu$CMGU7RJ;t%9oywO1hFiJV5ytQ>}U$5v&l#1VBCE3gNo21{m zi1muXrL_-e-S5^6eipIQsGO)H$P)Ito0?m!PFqeoGc!HU(MPCT$Xl^C`dIpCtIyrx z95b!4c`sSaW<9&e=yow$B&q4JYoN-P`^^B7QY*H`YCErR%NM9A^}e`CA7;O{@9Qwg@-*IacrqSh9Oo<) z`S6NXG4I8a^uOJK20=Px01xl!dh!8=foVFg(H-z-v}mb_G7WlBR3p9{;q-Hd<&t&X zx!h=(o(o<8{nzrh#YH?4HYkOYS_3 z{Le0L-(z4s04lh0{5ERr`pxW)<*HFCT^RHW+RKd`+XPdEy%xdd=d3sD<4>1!Mic7n z9Pr;lG295yZ@s~_F30+V`DCB>YsQRwPG`xX!FsnWU-}7M;_VaOI9FyN8L!}q$CHjh z3NPu>LrCpjTIcWV;psG|aRA~@7^=2#jt{&Z@L0iGV+(wFb=(+vIcpeARJqCAa3u5t*6)QziBh?osCoIhT$}4-Iq4bbJaXej z3wnzA&HU;a9D$X)2HEUEzYvy=Z67bW*GfB-&T&ZICpWT% z-+c5z6MgXJ$iaUKz>bVjL>eT#8qjx9!FCSf$TQ$Nnv|i*<0c4cH-wxT%wsz;#8%4s z5}3DklySR6d?M|X{g%n|Ri3vt@yW$Uy>?O&i&2Tp zS7PXxxIM+e&l|M(k}UM}=(<9Y(;m3j?`dswTw>2CEmFzN~oT?Peg z50sVnj{k$Hk2{YayAgkV)#|Q>#7EjiE&r)n;W`f%6gsd9yTXQ^VC+)dp(hooc@6nwm~ii zAt}oli%*EC!Bj_&R@}=g3;>)_0Snl1HQ5e;Rs?P>%A?mmxaDHSKSImfs*X?CsKif=L7LVrPP}H zb;aEsEj?xQ9mm^f^$4^-L~uhsvlmMuw-giCkR{XPmP*9{zCHEZzSZPE#^Ez0vVOeKA`Rv<-t8c=r^o=*Gva z?{pUjt@xQ-N5j4@t4{5+XWmt)){zOXA`5!f)jkJxQ$E+6g&dOk)*qx_bMd7`(Ugp& z3fOsA!wIicDt39p>{dfxTD+gm_byjA5N&Ny=WwhXc7GZqr?tkOQ{RWxso>WGa2+nA zRVn~lf&x83Lgkw0ZJ*@9>!dmkcY?=odm!L=eqJ7LvTxHWYSp!@uy=7ZpU=@`bm8vN;%)zkZESc; zb%!4k*ybt37<6)8YLoV&fcaVu5GQGSEq}iMqf2P6o~E#QQyPDKTfyf`8MIs8+G3z2 zNS_>soqvRl}W1eVDY~>W;2GfQ+X>hS4ISLwbm?lhbL{N=%U+LS6 zwy*jsFncN_^rWyCLLHq(9Yw;WhI(bPWQTnaJ9daK@Or5zUtW_K1A}~3wu{^1>d*_z z{%P~$mRhJtUU@4cd6o#5>v?fq+>i5Nw2Bbbsw=^0vZR|!2zkfpjz~tDLO|(B5_(|K z-vTR317O4{!KrmbyEkr27=PY*BC_Yec}@o*AOp*2F}-#m?AebkhSjGPV*w!y8RVg3 zH$1dZS5%DlhiDm6ePEF4{ck)oVvr%SbUrw~1dbP-PGbPl@a^24o1rh3(zfSneHHhN zCQ*bjZ>ubb>*L)mCq8x66kDNqL4hdPc3v&RtL7=7qps#8p^73WC#fQN^%WCcc4%!= zt$d_TwZS{As9Aj`l&waKg>He*=76zbpxIt?mV0mRuEh$R_sP>3qDZSdK`HX$Q2txq zg7sIX&1dQL-Fx>+|CX6gDcnKoE7vzXDQ9k|Qw3yq(#iZ}{nw$*b`kQ0^7D3>G z35^$3CACGB+v#q7pU7hB_$o*-Ptf!1`z<3Iy{&Oj7qIb4V)jQ(sCcgG!Ry4rTalfCQ%rwm5h02JkAL2l z#lg!WQ?Pv|rOdRiq^cZ)Oktewnvoaku-sWXUHtiEErN)<&>i|b5y@8LRRo3;aeoJnx*bLx4|u)c zgUZJpuYObyz%uYK!6S%??X>(|{HRg0@w--vT>eSQk0bP}d1f1dU33?AG!4!heWE>9 zI@uX6h4@SeTK95Hqgt8A@3zX{*k@d?-R;y5wO_sw*vZf-s{L|cj7q@h8m7H8RSry8qvmXd&TTgWnpqcgZ%!#S*?VU5LRG(1(PEPCL4)Gw_~8O=`oi@l zFN=S5wI02fmS%22;NZW$op_NhPQNS2 zzrn7SEH3ocLgxwLu4=uZNJd}UDSmA#$t-7AA3kV(E2g3>+roX@H5wgDTI$`9qB!N1 zAGyDJ(2&cW(Or>e(5HuFedx;mzIyI$Nh{^n?fP>6OMZ7SnvA9G-r*#`V(sSfCr)Pm zho6QQ>$eC*tN50bVzyG2ea+G8mw=Iaw40raPEoRr38~Q!Cp|fQD zg)J__`N0q=ZADyoF_lk4O*=BO{ps37MO%;;J0(GoL$e)2rOvJa$)BM9v1UEr>1ae& zjTD=VfP6-acOdjyUhanrb#$?V7A{DNN}twT{U5e4$mpg% zV5u3UNswvsG?lXH=gzbpALgW)6ug*76gq^o3Bs@)+1|kcMvP2Eh9c^jVP`Xp=izf! zyO=JI|FJPtRMUB_S1-MF#!XADE}nAw4K~&cgoS(<6d1e8t*CA+;J2D-3#nYmM{aDI z9~!mFYI;%FoQ#Cut{c<=J{Fwn@e1F^v~M|ATP@jyrwT+CH{iW(Ktq@)Z(8RfSb6TQ zz0I#M8ls)NPrE+T-(dip)>+7O6uphXz^F3Rr^81V|;{B$^ z=fkZaM!2T-YfU_r6=(}8`hE_2wtU|={vVWZNB%R{u}?ta;X;mfpYku2M}g|2uIQVN`!hcd_KXWLohm zjr8vy141hG+-#a`ob$D>K9B)GNhwIj`4YlEDwPUDUL<0_^>6WSa!9Co8$VL?@A{x8 z{&09((k^RP>@u1|*;1p1p^e$Yrp4h@nv$%Gn*%5)y~}@eC7)Ta1>J4q=fA@yCc*fR zY3>{SV>XX9%}LT)BU$|U#@nqmJi^GI*N40T_XyfkB64D>k~k6!(o*epShmTP;5z$q zF|I8u;WIXGJB{k^glcoWmd=H(N#b&O-7>5`8l&V-Neb_uhGU)?)nm@Xm9T~6 zBpQ}51$o0mwg~Z^%)VmjrFkh$ zxtO}ms33#BSj*DAcal+Bh6l<7p&gl7&kNBnM52@N;$?*xqDl*#FBG{`1I3V#LT|yJ zjXa5~QK#=+C1bZkip&OMMR?VtEzige_F4;tT=>AwQ)S`3EUSDS9+l6-PE-AIS_B^+ zU90LCKE9odnzG+=m(v_3=6+&Kq05U!rO5dL{%R%oUBr<(+2+@Z@wihi9xiCHxpM5O_SVcb5Vx}NF+~28;#Nh+Hu8nuflU`n zEi8M?NUcD(%D>pNmcv&J-|zbh?Ut^$UvfZ}D?ALMby%~$rVj`|E4r4*|$V z&CzVjhuSD;k2_K`xNzD@UyI9kX%3ZC5sqXb@@-uRCp+1PC_t2nW)!+N^7rDbgSstu zK`b6D+9%2JfB5}uX1P^09@+;VR{!po@!u}}ChVz$Wdo1(*iy-7yFtLv!&zT*j#ixA zn$I;;`9BAun2mCP?sq-?FYM#Rb*1BG;Xj~eg!itr&b3f(leaqa$WP0F%C+bF zm@`t==bVRYd2J!*`D@a*(zM~7el3AMWXA*Y_`5ob9UK8m-ht{mO##JOU4fGHh9>C| z_Y?B!dcJzQ;`|$=l73ebT5!33K$3rB~P;rAz7|NgeL?Mr1-2~Twt!9Nyu>k3tFE0 zC|)P@Rk4iDJGbrE4uV^>GJ7d$%Qkj)79Rkwam zo1{AU_?NAploFuy;CYhBk64bB9??v+THB(7PP#g;ir1Watv?jkoo7Ycku2Cj5v|3^OT&$3#{I} z$Flbh_?@1+f^tk4t@1C+`qv3QhF-HYb|vN-us%K8;$$FHh8(MaD-dB<3EZfP(p@TA z_A#$srl9gV{eDE(D?GdnWaQiWA&T3lBBk-^H9LRft7~+f0-9)+R0$f(pBA^4V)V8Y ztfq8Ye|NA}HzigJ3iJChXOm;I^#)KqU;^%|Wif`Z;Q6VH&*5dT03!#| zuS1!+6g;46z}Njcw%H&+)-6V{L^S-!D9;vCa~j#_zzL_7SQYRU+eV!C|8r08k2rDm^|tOtht zQS@2>?>dNd8I2|rio#?oR)q_As^~u|I@ji3C>}axYpmfW0(X?*?bj3051AXejOO1m8I<9^r4i3v`M zQ>l^at+S|pk&Jii+@xfOu^x&9rax&0rtUuT5=k>M@_SjrziCdW!Xnk3&S58O3p|03Jwpye7{D>sk1qb zF{LiS5G0 zzlNprp%&MivT!S!lR3`Glv$o5shKg(*0BmUVR>o$pM)J@ZxSvmmC&N`%IZfvvk)5S zLG&^e(b2X{AelHH(Th1vTJ-h`OdS7ZynYxebhX@{=Rn$yf{M=hdPIj5v3$x6;v=lh|(s^J3l+b{nvg{64ag*xSR@A z1)$*OpuAE7^0*2grTj^k^QFWzPHtOm0;}KDS3}1&)XOH%to!@>$)wNdR_63U;u6nq z3NS9DrXVqf54h7#JmVLY@J;jeYx_Z>4ik~5797C#e%zg0|J5Zhv)DZrhHZAk8;ud? zzoK~6Vu41L?2pYee18C@a!qqm)%b&bFLf$Up4Y*_W4Hy$RClK^O-%XIO&KA8mq0e` z;ei;uFl0(^(9}=bx1|g^vSas4#Ux|+&1x!_%iyBD`(@;xL8SfgR0x4xel!4w<)XD!B^z+dk|HP1>H=P8CJ?v*Z26#aOTh75xx0oW@nhXfphM z>@8PkbJtCIwRY$VgG@-Ics$tw!@}6YEsmQ)e(PBL8=2W_LvB^krOag2Pv50gG59Ca zcW3=qn1VnCh2Lw8;$pNx^zi>~OFtOTH1N7&k#|k>1n8NLHZV?(qZi_O{8zl^)$cSb zWWC*yw(Z9zs)g3q!@P~U{^hj?&ZRc2wA43cKnk=lSH#?}9Bc3HHD!;i%8}-EZrv15 zBP}FtIo`+lck2d%VE0n)^_f)Z<`%mLw+TMO7giw5YsN8!Q;p1}vq{hEF~P;5)jwM2 z%N1J-6(vP>&r|$A>blJMYuI>oS~8Mi_a?K&d=!&Y@6QWfmD&A{E(Q(hwY;g9(~3Q{ z+dSOzk5QEIh&uD)DcQ^VTCJ|RhZ%s5VaeXciTub~wP^a}TEe}hJJ~!@{&p9%YKH5&QuW4LF;a4mCACHq8m}L*^*(`r_l!<~y z{jNgUiHQH5@Mz7<6|gi$_|$IIDN~}CHKEEbm;YFg1J<;NuHpdoBlhq8YHy+ytH5rx5>XtWN`7D{7yBt z!X7f>;L4lEtjb~e9NvL?`XR`Uhpp_?_EkgPTa>p|_GSctD2s$kyfD3E+X0aPw<&)M<8Cz>iRv#?TS=Xug z7SsDgo1UCpGnWCH_@=AjQ}C*;Fw$aOPOG(nu-B{4mHWlkYq^coj=|w|v!5{RQ>ptp z#yr+L9H^@=t7URSQ^uYBh}A~eX~vYIctyl5k3~rjC&nVfnBU6^7avD!IZhj1vjSQC zMcMU}^o@ZI-M;J4F3%$%$Vo=fd{pC$`br$VBpA9CA6J-NnNzLYGgT%gFfYU?=hvPS zEBlbR>L6x8{lw%m22o<#K;F71E^5j0al6MGFasa;mjA=~s@#V~IIw;GtSi?>mbD~_ z^-mTtLQ-2ZdNz_+V+r3CBp*wnPc^=(zOOwe?*D0?Tj8VqP4QkF(?;91>+THNk;Ih# zoh3vqAlR$3VMRVosgwgBf~S^+^?&WwK&Z&E^5y~6Z{Ug6BP_AX0@8)egrUox*HpRuc(ip2E8XE zCc!Cb`Pw+bV!QLk?&C;plZ!qhpV)QXlBihwpXj?E*}QDN4at)~pSy%z6XzJmaN3js zM39oX(Q1WNiyGUl`0P5Q%y+ruTBzUciQC4dger9x+#zd?U=Q=(AAkrJO92AcJ4v6_%Q@i;0&* zETqo}jznKlJq9^}&JcxIn%<8n9*=^kXw6qH!}&uJ!F8|UwYyS)hGlB3Qp?v@E^~;g zq1_Q@9t(|%NK-l$>mrs&THC_;Jef0Bv6E-rM89v}l0YF($JXm)M1&-=$)zkQfy9ihb)oOIHhX1lRP$nW(x zDUC`G3^%+>v$_>EzZJhaCPmcGn=ha{*p~CppHWR^T>|lZq%mhk8JxY<7}acbO$Czj8VTbmTTKPE#%!3E!hd}=|_)C1(Hd~vtR+)HFYmn zjms9$Xz0QSN4V|tLKN+HY{#D%(IST*3=)4HOTmoVuAM2CUkc9IO#7$)QSLv7Z-gO# zYzVT3;fUK}S|tmPBR{DH3rj;I(uXge)K|0_lsy9{PZb*2^INjP?xpp0g?LvZ8oVUb zsZK*I!#+-q?CQ%rn|NT}?tUsWa=V*M?;YOVFb+ga@9e$k9G+NQ**{j7ubPh=(;+rR zl(&z8Z)~+}8hvnh_gQ}B;C0nwEiabb>$sL6+NPQLkHQyXqvghHNiCU4nAkqa?|i(# z)Y&Kf_HOm(4?=I5zFFSqO8#qE?@S-t?-lo}dlce1M*pV;z^*j8813oD@47-GKuBhK1Xfbz-7;)V&l5 zeM$mjV_@PR!OgVj&rwd=eGFapgP4D%bJ;fWoN~l5QYb2}Wi%VC^NtZ^3X+7m+`?7~ zb17t_3%^p8TH@>8Q-9V%3+;fUr;&Oeoqt4{&Dqz~=#h z+f8a7L$&7c1U6nH@z}azY0S#V3I3{yCIQEPw9oOU3w{cOk`B!oQ07TvHMGkr3n^|} zq=Is!Bsq%IOUf$a)o6d(VD!w2Y>}t}e(1|&o7Rn#uAB_TJc%mslLzcXH@Y-wPY8cG zQX^&HG>#z?uzVMj$r-uWVE*+Ib@}zi(?8ekPq>M${D-4Uy5Z5?VFqV5V*Z)uh&EaS zdy2eN_143-K(g_(xVSUT40;T4kyUZpPi|a`8tM?of$)$6fYi;kFr5wuC6epFXpDt# zvZ>d+w8K=x^LDu;q#)B4n?LUvui8k4^SZ8?nn4*#8vnbTQz&)1K#*1^&({Tm0x_HH zpmn4iG^}+wUA=wNILd-JvbFu?yR3etLx&To+1})Qo$$EWMpnL&7F*L%l5Tb@Njs|M z-Omkhl8FdJQ2&^fAwu6Y(;QG530?Rm-3Cr5pom^6hdz(`ttxn+O^)?3=79 zeu?Szg~uTN%e{yA()uA!v4qb@oHn@pv*+%V8EP%JiM0X3$e51)L}>>2@4jxFrbzoD zZnpJ-bukax_m{LH{#ayB2C%n_<(b)R{M7h6186{i`Z*%|>jjOl!7BeVFPW}sJ0>{6 zz*}!#7!#FS_N{;T)a-~wyY7d?wB zkMFY=L8=Ags-tFDY-@S61s~WXjK*lv4)tCL_>AKU$-w2OJsU0o^J-(7p3OGf@f)B% zQkDOm)#xOBwWl%XszoJUq#&SpuVxyBDD4;1Xui9u{htUG!F4*VGh2iD*J@TuFsC`7 zNwY5;QnHA?s(qA@_g^R(f^rS$98dvR96=hsG5lWaMC% z+lum!=?)(i3!(&i%ZfH_eZ8wHXo%$(lhYcqYJMifMhQw$dWD#YN0RBDR=XA*4l^=< zQ~9OddLCI|`8fX8(@84f{!x_baR6*vl9;qiY-iG$P@x2wW51Dw7yQI8|FE-7?w@Qnup6r{|PY5VLaI1ey*>deK3W4#Mb^Z1$Yjlgw*K>0@cK?A{z6MPzD=GJ+xQgUaHC#|R z+MBtjgek}v{$(kh;|%`X_O>nY$bPZrcV)s*v&jDf&W`_wf9IveQ@yn(6oCA0qX{E+ z`vIji{$Ka43?3sWkEO1x+-3+dKM=EK@h-g~VYyUvDnaVbJ+TD`&UU01!(oiL&DvgGb}m zMnep5@jn`>!kb^0q|T+Q$1nf%VVxrF>I2BbZZ6{G=k#5h1$c$(87NqWb`9>Oj?qSi z3&P$3^q*_l>pTABmV7xrbm&u6bG;X97{S+{&83fWtc)|UDZ?Dx)V4cqSl9HP(WR;? z0Ww-Db%|gK`Ic5MDYcYk~IXvtT*kSCYqSF z$^NUJ)bO!1-;X30r-|egXrP?q;Sr(MfLkjrdDm@Ah-wA_ShabHk4XTQxFd&qUv3+| z>@~8Prq%3H2>WPnxchj-2Es(`5`!cD<%L;VeUh~6fqe#?8gxhzvNe7DK;R{?H&Het zd7?{ZvcZ^oub(%Xm@?ABljOvk9Ch%nFeneBzXZ*bGBkDSXLi-9#=4ABr>DEsdLGn1 zW}Wp5K5H0j*1&F`%;*#j=Orz+ySQSX&-*CdFb0JER|i!G)jmvV&A0qVAgG!TUll#X z*`sSq#Lx}-JQgAuc6OU2&v_B%nd!CfO^MhkjGcwkGFu&;Tysm~v!qP@K zR*C%H+??8q1y!nANZmJ^Yvs@UW6%Kpf;Gk9!PX$J`VGFwm@G?5krd=G4CC^x=n>tR zP>6(xStzuG6gUR9I$eLNqaz{2+LvGb530wFC7IgpC@o_jW%XMPqCSlWK$c@S0 z6r}RZK1Ym&R4A5{_G6rxAuuv^VtsUF76t^4B;wu442|vg7G|HX{l!QF7q?$STV8jh zw~1Iq6O$B}ZeFfJ?@SH)=4x*xXCy4mTCAK@PR~Bu$EMnHX!ua%bc)J^yfrM^9&m^r zC+@-4=FH&A9rHV~d}7~m=;b-iV3yO*tW2Tl*VRwR>WY%E6GKh?h)NNN`2a&n+O_B_ zUNed&eC=trQ)Q<5mS&TWNyD@21%d6yYSz6dBPyj#3q#`ys$gx^&Coe_6ZnVV<+Ber zDbtpRis9779v|(kVNx=vSt_rHr8*hz#A!76h^4PaAMr)NqHP3sxcZ!g`Q+@UifPj; z65f`oY{M@Vz2+N#+u45HpAJNRBz!C;B|9xUxhosVP2?QQfvx>IWhA&cP+iA2gW+xx z59ik$y^pzNvyH3xMJt?gg^b&scWj^)wUmGF#+bquO7t>5g{co;q{)fo25g-YzeK9c zUx4Z??l}b3kzfSVIB+etzcvT(^{tsjUb~&afhGR0r^)HvnrsQjs^!}c_Tm&$Km{eg-fI_%?+$;8yMbEv5B3V; zAY4DtRz_AZ_3Yb1+ZdH1l~c`Ud~Q0h;^c^lUQ)jsNTt8;EVLm`28y(lGv&Yt+m3)i z2HsCt*V*JYSsC`sDjK5JUwY0wOjwR;A$7Myyd{m~oxRK&bfI-F{JjO)oDj z?-xG>mq%k!?~p7>(q0S97k3Qinr5ga9a*A%EgLavtLO5*ShA@fAm7Y-)4-cNj(at4 zu091)TZ2gTlNKAj5S1LC8=uI84Ua>H#NB=ANs%^V!50USMhc?~ zi_>?LK~oYG3gA`;ye3CgtK13>&vXW4xJ6nxHIx2AVsS@O?Wu3AA{;D>x zD7(_L^{dLgwD~6XO{Wl!ZFW^+*{L&;Z>e}&1PZiPOch2{F%PwfKOZzb=HS$WdXwMX z`kTjQ+(+Nusm#=Q0;<|tt3d&7>~#|v{1Q8^iJWa}kU@miaZh*OOwLim*dX3ul)zP3 z@NzZ~f3fT(KjY`ZkCN)`n}4DuJ1|({fV>lB44F}XvglRka{4n#YVCYyS$`XXPn-73 z-4mww&cOLhH75>sb0l9O!JWJzGuuz70k1E&QEm8|2q6h>6=3W;JWCly7dR@rZVqox zuVI|egWOGT8KpbM3);3i1eV-F4CXdOF18nAEtVs~eMiZQLxF1%PM?V9NFL@UDP4-4 zly?i%59@!r!#woRM9a(SIr8n?Kb+-32B?U6Bkx!I9>3U&`0F}$vu1vnnTtzI(EB!5{}7@~Txy@*34qM28IAyUq$Is&tv;y)6y|bIagtJGqY(3=;FtLo z)=oJ5Th@*%zQ8`Hp7!x3IDaKAU12R+wL(U3ty}i6-VM%UFlUawH9i@7fxu5uM)>%NN4eMjd($ zg4T!mqw%a5l`7(u4F1_=g;998Ff3V^zdSWB-Ub-gwf*_~v!_^Qyu;JkovLeu+D3kf zcl(6S=J&w9x)&_dc67hC!88OSPvX;NsZV6VAQ< zK_8%h{>f;dI=ViB$_~dxb=x^o&3O3ih;u`^SMEBuXxBCy;?WerW=CCgRs_J!WC3*|w>zek< zQblW{WUPX3vvNJ6wq^8WWXbe+Cc_lXX{cPGJj)u}Bahu@qg4AohQ=vv}j z0Ov0QMe0y+Da$6wcW=)D9c)TURbe;cqoh@C2TNee%?25ys-sWvcXzyjtm;EyZc^G7`w$`25uL-ZipX*QEBM6(jN|$b*xbIW^m|_>tD>2# z<-Ah5D5T**!v@hMFD|uR4XJWp!efRXtvt3^aBe@bTn>|O`4EAp>fj41H$jAl>)*#9?W5?>z9RLyP(mAh_IL#$JAokQ(C-ze(L+bgoPht z41e|VBPWR_pKRjQRdWa|dpX0c@7S^|0<=AntSgh7c~Qfn5`fn-t9aW~+4m9MrMmLb z`!cEkOvpaQ#Ajn-4th$1Crbw$P-E zit;C;foHBqwJ&WfeeQej5~~m1eC4ZKbvS5&goi)Advzp&yll-+HgXmKM4E52-D@`G z;PYr4I_dtA2s%VE>)q}JniUL1a8b=@&qtiy|MdtE32MrPwhmLqD)&Uus>$($w2oCZ zR32}WABXw^Ngh3oZr|yH>Q42I&9w9OBT;5%T)a2nLqCK&ky!W7Qcu_1Oix1OyPPy9 zVq-LbYc{zoU-BU4n>|F_?e+vpnVEX$J^4ZYMN`MKnsdERe>w*SJ+Eun@2CW<%O>Sf zG!=fEj{)S_mIHSy zUf~LLKJD^fO?okxWYNaP!rV)K_pvp(RqAn$!BsSEQ|W?1P;VoCmlM}>(F$%3UIya7 z^%gWarX~L@EGv4((wzw`WMgCQ)5kgF(FtpL6%O}uR(8q0E^y<%<4fv0rKF*5MHxD< zTWemj{nyLH&)~16C=3(t2WtcOQ*Tkb>6asFopUEY5Tplv=~T*sI<_KCpgiS zWYT<&M1;KxPT>M!r5+T&-Ek4M=OIX*`j<{K1oRdTx@j~A?CRN9y zo{dHz^KoyiO;%f`8gMOj_E#5d)ozo!OEGgnpFBmT3@8>ndi+QODa5WL8ZJUE9&T=+ zt#vM4tdy&J^9kQHT&%s*?n`nft8er(t3j><&CFz+?k)-J2O?`rG!*7yNv~2M8+RkS zilP}X2q=)aE*~EjkjGmMgA27Tp_CgzcBPEK9blT$PdBOG?$z2_p8H&86*#N46Rfjy zLcjPLtlFR!%q=VxY3cm#jjfGX(`P61U&)uF6M|)6$u;1kZc!dNcy_wvnnS9J9hpdF zhDg-rYWgAOxJz)Cmw!{~hkn;O?t2yEPEBG>h1M*nUYWF@5evl9;k zVqP=a;Y{R5>v?ATmqx*vrBpRdZoa;j+nDg#47fTc{g`P-SEu-fLdtlJQ$WXQcN?PY zf-3yfZQ~aFjsFagXH)2LHMNahjDvg0bs|4@8wW#1IOg^xM=kNzpM=7jT+F>5LGkAE zuyW#SGt{`Sy?PXVtnFz0dXX%}Qmqer=~(A=54G9d(toED<>aUo0VP10bqb%sY@w=2 zm;}Y$Lf0J5po)7XZyg+PhE#CktR6d_8NkPS^#s1>ghZl_lAnkYvxiFcqJM-C)5GlaB^Cd|6fK zq4F_;saF~nbv4~iFN3(9LU3kb)y7iZD7xS%goVQX?k@&GV~5SCIfmv#DAU5&%2oK+ zmPv(Y1*cRyRz$wV{2B(q!YB|UxqC03&blR?!hU2{mFFCefn;)L2B9`)Is!})u<5sj|+>k!E-)`_!`(TO?2i<p-F1Q8|xtu_*$%U>mS3HzdISqjKaby%<**&PNCLm9XYm$=R~<{B-y5RqFF8W!CGj zCti=E!=x&A7u!&ppgP+@gQohQTpB2X*Fhi2rEmiKjB3*Iy><9}?wsO`0b&c)IaD=9 zJpY(od~3!+IZK$X@+a%@v8h$jXFJ|Hp|FGVNA<_x-9OC@4v&v0Hgr=_-`;)SdRm_1 zXIG*1@RLrMNW=h~nnVp8#|KX%-94~=JwHdDiw(LWCRe=ng?!TB2A23y{?Sw&1Y!T2 zx#nIrmIkR2>)kCwYcgip@Pg8T;YWEzDL?Z7B?O(>o*%GiC&y4;i?niJDZjor=47q) z=j$?ov`^cwYy!lP!jjj(A+Q%3scR9g*BS5LM%5WNCw%dOD)uKDcrtRKfL}FN=K-;KEETug*cUREdb{_@vOl7199o{XsLaASRQc}NMUsFO^+Vu#Wx1;vuv!y{< z_Y`eKHB&+wB10OiNABDYDk_zF0|!p$Rli${o;#EeDlJ!}?D71Y))g668%8!`B1$2u z2=@Y`0>O~EM3Hz-cJf+XLAM@Qz}CuaQnW)TGSQcJwbqiMqO7`gx|}`579^bZ*X-zf zEmakTa29#s_mqrt;f%)!;WQNXOQ}iTG^Wk8KiIG{!F-*i?bwpfT5T_kT!uCtn%xo> z?Oz)Al_6QALdU7}bl`fakmDfh?C>M}nT_4Lzqq(qeB4W`GZ7Y|rS`jiU8IaaJ6}=k zR;#6lJ-2$py4>iq#u5Lsy71i0@{E$5M0{R#>6LPqL~^X$m@M}$QwJETa8VoE|PUT>Jk35gLTT}~J zH?m&zlJuOBDmqR~Uqyc;KF?KX@U&NMv}nS^sN9MMA(HMcB~b9i(RHQWSe5GF;^wu? z-Sq#^W6>v;vY}ye6Y?-khj~5c^Yyh5A}~>D{?p;qLTVdt+n1!4SRmY$H14>Q}z(MLl;n}15kYZcE;EY z1Ra`W)P5{~&BrDNSx6rp>4pG5j};OA_FV4ptWl;0A`bi1#`6SHp*pK~oa2$iwX#H{ zW-gpPW?zXWTOJ54kD;_Vij*;pg;Y4s|8N_nip)BhjECt(wmcWFLn|^aMqv+%8?4t- z9FNe0Ttw>YslZhZe}<=o@A8!d>&{bAOtR=UhK_8e#K8hU7Pc&n1~b z#VxX6VZ^RrhZ}Tq_vlBiai=r~kD^)@Z3FP&eZ-|JZH%s}96AS6Dz}f(f!;jj1^5*f zj0P6={8Jv;kPwlM;2*ZK2YUE^Ofplm%C>Md>{;}Pa)YRS!gxH~x$tqH-2WH?%F+fw zd!^;4t!a~uDLZqNM0RSc?Fg+Z;+6AERo1ozpWTD1jugIg0SeL@9PjGK8%dwj#4o?> zgz@|xV>kDrJlL+pwexOaz4H17#3QTtgf8ZZs>@I?J48dpNpR*&=Iw(k5P%Xtd_hsTK`$9wToQkD zqTE6E@y6LLN{-Pcb-*$go1`?mN&T|YgjK}6T*5jcoplmtNznXgP+=BOIutm^Ey})v zH-8bheN1)wq%N{>^tty98Nxg+|14aB-FWiCi*pc495#jrKt1sgbugIZum;ke5#{30 z4u>(kb9!S7%yvsbdjuq7?-U7{G-K$RxRY>$tA}`1PE?XpT&=54F_|nBfO(ZmM&e{Q zgIO@1D`Krt{#bCHEZ&nLZBqyo!Fs*41dBfjG?Om|HE_^d%m@qob|M^6`5r7U88EOKiWiu&R(IS!g#a#SjdscEEJTbVvt}9Ued1!8Qwwu`b zXEs6_5Nl_5n=`4emR(0N#zekA<*qJO&kdqR8Iz@V!CIMD_tI?eK$jX$8Ba#=+f*U7 z0`!Dc84Zpxx>filZ>qf5U9eqdkVw#(Q4!To~9`$|BhbOxYjSZ@F z)r200sC+_IQ#x+BfOPbsdCkY&wmbl{_B+JM`K2O*bw@%9xkeF+Z59 z1r}PnT>m`Z3J+;gSulRJfFn4#NwW(?<1L*E?%->Mhl^Y`$~Vkf>||l4`%g+RpenKn zhDNS4b{e?KsJa6qd8143av*gm18_!-Ms}?I?$k)QYd>LLc9@~R61kZLvb${ZT{SB@ zg%BK|UNB^ES@6Be97N}$S!HI(b-gu<0wjjQC)orD1;f?J^u~g9lM&ncOrc&o?Y$p) z1kQJ#x9)B+#K_F?-^nBnoc|v!;F=CYL+!Ia5j`kB_IXnei{4`HTbvFy@B>!XF(=+M zlMH-r=H&AVkQlHS$Cp_d?EBdw8w2Nb9{(Ddh|^iF9-TfXX4$R(y;%N8C~_1PAQ zi@Zmo!knP#oAkGcO#``9gKJeiE$Z@Ctzy5IZEgOgGJU8Pa6XT9yL>JUF;bD*%C}&7 zE-tc7D8uDjm7>=o(USm1ibAP7c^Jyz;K4!sn0luo*V8KhznXP&M@FZjP{+H$XMWAS z4GULmxw67vd|{MbuguT#{;172;SseH0CgdCBc-)eP!GT<@2B98xUz<(EN=GvBo4@G zaM{S@Ym|Vr-~mT|;<>Xg->fGIR&xMaB#>#qUdfxl1FmDbN6pt$zl9Qdba}anG=6W^ zM8ImHH8B#k)ttYO@!GSZIu$!-JM!e}c1uAo75n(x_6LyK^-8a6k$v=)kHdgpj<~&+ zhRR3*+b?|C|9AwQn?LsNf22dnH?w?xpiZqa_=p1H zn_QItvrYZa!tzW-h8kifb4vO8$c+U5)7@Uj7wQhVIZNF&#wppW(^ds=#x2O3K_+U2 zm%*%;B7dT&tdYcGuY@UPkpcC`ZM59|m__raB{)f{0ob}?r-3;h*^RMrIO4hmYa7eljT}%C*@g()oeH*3EFVr-RZtvx%~PN$z3Zc2@2RoSl0*M}mcB0FCz= zG)Yw$2V#>5)TiMV{vRS@F@~uE7?kcVUBtcWl1qI3zmy%AoIhVsPX1}`<`;Yr9J=f- z(jq?coCvEf;;bWFPB~96-MHhODZ|K)s;I&jhTSjblN_2JBisiYRu_`SnTRF z6~{FLr%Dv-^3IPZOZ`EWsvRs@mLQmaF$ZC|kurUG*jz~$-;)#8L2&9h=g-$^qber- zpAwv`{G9N77nGJ6D0AVVxmrzqeJkNNV*tz}W4WjhX&oM}4~>U;oB>P16OqBTi@Vaf zR71Q7$E9b<(9oq{df#Z!70$xuxU-PFWH~L4K=@3y%1Ir37MF^fASDI7L2lae_^-(k zc`R01$Qd-Nmj7pFD%ZA<3}OpIV}*#JwA8@*rg@JsZX2imj#O?Z^jEE+OBVCk(#GtD zfpmRsOFbF6VX9lz^)tnK&gTUYZBKOv`3B|RI_Z>(UZL)p;wxmUOB2{f$s8IQKvf1l zmE29M7;MqahX>nj&#E;X2c9x%jWXov$bP~kN5Ve;)8PP)S2&?*;7L0jxL2tDCkD#<9t^1Ma= z>)}10oYdg%1KTJjy(dL2c&olTbmmw_u8O^@Q~7OgBBbDSjqHg&xi(eVh%H2C0>*4t z=d5#d9Yg%~q%JCwfQ=Bvc~ahXh%Urm-WCHJPW4B$Z^RkmOB28`EYoKy&-`;Wi@=C? z?KW+#-Hg;Eiovz#fX3u>&Y85eZw!d`4$jdQj~Gf!+K<`Ab2Q!-BP4iMuN9Dq0`=^; zvmoDT>InGXHJS>v!nvx&iC?4dwrzZ8l%;sxl1V5nX2m<5c@XgQNET-B2qil~jYB{eZIX%|9KzPU(^1X64hp_^yG|!fd23W)1{00g@r{43P!-yJ`E(RhHEhwM8%<*gDLd z-nNTQZS|0Zm{C7PTy~{?nn{mHNz;;f!&N0SFG_xpW-fmNrQ_}Bf%HlgGnhicvPa)Nm@JrZ9c8?q52J8-; z0sEb_h_Pdie-anVhk$H-0)Rweg30#E4JOac+p^FIVIg_din5NW#hC`Un;^To4Q-dj zBMtBp%6kxp4`pp2zSEbM+f8|e`u`BjZS#iw99;V_ znU?}9SKAn4L7|@DO{Q#f?d&!-3KeoK9G0o|5b)sOqxSiR#k_Vg|7Lc=v-5RH*iZg| zApct-h~GIxJ@xPE;od=76(y^%mv|54oXN7BFYW`RtiG07T#k{y4{SU-bf_+POv%@s z<~i{mZKUp)VSbZ%a$#)Ovtw5|eAZCYQBFXUVEfqZ#}8)K9S@VVQ4xTD3Xi1|B!_Yi zcLJ|dvxw|UC2A6;L)S89dDq#S8K$O~7F}F-w{hG3mahR!II3pjeG}Lpezu*helGpG2TC}+9;9pfC**%Ao&U329kAl4 zT%^(!wShn1BLiwvI8)POL`7Q;u~SG)g#q&u*66c|8?>!U#hM$;hxTAgH`+|l>LeZ} zFj+@Yj&DM26ycgrM~lPg*KPxhesuGJ58JL ztXrt9NnhZ`t+mtIZMi&r6{tPiH5T??wc0YG5M7L*;QVdR+Drk%Zh*hkb%EV%YrZ;| zZ%PR+e;MpfmHYR#IRt-P5iUPTb&$4)(MLwD1NYR91!!4ig`iMP^GSS7hKM$K6I zCN^B9Cv$Mb_-_E)6n$w*aca8BK)&HLF~01ta>`uy4>uU8tAqMZz57A^`X3oj@0pz1 z@JYo&ceX-t6)DXL@G(y(7+#F`?$A$ea@V1)b;C@2X68P2x==@vxk}}b)S+tY$Ov;s z(_yw`s9r`SVp^=2j9?R$oq{jYVDvmUezifj8ql>m?>P3`ph`Q@t6w5VSX5YS11qL{ zUtAT4IsabGOt;~>gY_yf>C)BHR3G=qxG#+R$V*`Nx;Hyw$!Vs!k<4h9$*Wa2Cs8I) zlxTQLCytB!%_KXvfbS41>h6XFfK+ZBDK{Gtd&SsgvdwXW#NYMbg3-p7{k15+W+eNe zg>IZ{^Gd1}BIk#ui4!Lme}em%4_26qxer7;N4YjAmuFyO$`=48Y4+xouXc`~QlR7lIehAEQ3Iox;85Sqm9zpmrX?;F8Ao}x32;=$q%HE3{UQI zOT@*R6bJ&a=O`?<8uu*80ZlSil1 z*pa2Q?Yo-!bCUyyh{UAW?29RTHOtPl4t9mYy3`GGuovCUXkE5ShvpQY{H@+u1&-yH z(&@A%>E%qR0^*6Ua+y10gq{rRuVTTx)}HA26Uk}^7v&(m>eKoG-sKBChY(jaHSseY zx3tAKd8LS3S%=(~L)xM;wWf&JhtEO%o?;#H?LiX_THV0=!i<q4)ecf`HLBvXmwc+Gc?X&dpeTqZro zXd;^FH`sMcC@bd6!XmCfi238jQ6%FEXW~sHo!Cy)rnz z)hk4gXu>vxq#!81DG`GGhKu&x+t|#EF&iE&r4^Q%CfKG)G)0jZcqX9XVBU-+Q-ggf z4@~ruHrXFpkC~w25VT8g`Q`OqG_JoP@w$9BXT~AaF=KN^_wkrB3SzfS#eWlu%_Sjf zA8xhKYIl)I+N&L#btmuN7E7=AsCV1`cVP` zHwuHrG}XG<*h0^5!1iQ(#sBf$&+G?@aowa#lfT1ae!Flis?L`*Wr)Fd5ZW??weD{t zM}PmZxiXnz0+|k6^4%goaTZeDFXn}#9%i_=|2WXRCf3D^MZ;u}3jTl3yg?|DCv0hi>zKP?=5d#s?tn<0Nsv zAvi{Gs>douDWZP(el>|ZXjoYHgHez8^+CJqvFmaCb84HmiEOKeFwTVYj}`(mMURJ! z#w-3*h2q?*Mg~FNLM=_=lG}{x@`qEe2Im0nX7>Q_r=R}J6_({L7(w~w-h@jcQ5(9T zUbypwPTL%}E>8&zse(dDr|cM<50k{$=2Gf;^^2z$zipxPMll8obb}JnMU~{7ZH)$T_f6F^+#Xv|K$R3 z=LX&+)FSCYFfF9F<-h-V@ec3n2o@)p&F8lvtch;(kcDumCYm(rzJT7}9%EYMU2pD@ zL6>g0Jg&+KD|-R~6D&K#^&Kuv0z_%nkN4;Cq6y=E|2U6dzo$Yf)_{*O`Oi0Eyu?3s zl=H~fhIpeNA~#bdFYZfXxPm`2F%%DUXJ;bFs|W7Aln~UgOq0h_h>NkF6R?ahSAWl$ z<{yTRH&)@VOLnaXkN4|aIeaPRd)x&(70ayISPl75aC#}?s$R+%%$Q8nD@sD-VmKWm z|D%37rLAVPKUh)xO_a#;@bg6b_e9>*3?mjL{snpScKoM&Tc=1jg}eD_)mv?*U1)a} zk>`3{d;w23@&ga^lFq-e>Fvgk8*{6s%WJ_y(Z5C_1#jVmZjp)RJqJvl1gP`=&>$_M zzBaJxxdw0WW$PFpwBY)1kGidCcJu<qiYMNi#_7u4(dT9@=f`A%@NAz z5l`!~bO*^kCZbs)4rDC7#@GoHt1YYunj$dbk8I_VRS}y#Oxk1ShY00wLn{Z0NBR8F zK6Kgm8V^+)E@(!-cZ-W)E|VhF0#MBW%Y8n}6HWix*Q%i5==4OjvnkKIJ&w5Z&gDjX zi`qHPVobkEEvxnJemUQBaKcr24i?Nb3iUtnoZQLk>{?LJ{qD*7kcfAcA)*y?yv(s` z#p*OG9lAW^#S8I|42kH2&uFEL$|@L1cA(=euje^SthEZ?p8Lt%UOIo}`>qfw4i=V@ zb{0jDViTFzi-;`pMWWPluda-=?&CmJDZ? ziS`c2&{+kHa>DE^2xK?ijy&kbAAt%r-phqjJ);W-$pk&9gugb^ZNTg(b8&$7Af(wS zGxc%QT0JAJgL%CneOz5zdNmnc_fO}Xt>aKx_Z?Dnf^$O1CWpgJ;wDnIG5Ruh1UK!)RoPJJxJ?nP& zBxf|k%r@#TwUZDI_@l+m-xC&h2Af5T!ZmBMQ<$F7d&}Pme(6|B8?Zf(=Oy@DjM4`^ zHre!3xJ7UyS&q@R`{|f=_}dtOz>i>U{TE-pY;G4o*NwZ+mLphIL?fJVqcUr88S$Q& zlqEv~-}(DiPS0gl0{(-dix!!Gi1@C%2aFu?5U>D2|-ecCJM+_`wh+b{EI`y4rf(xbMzM5yD@AA(}@_l2ME9f_2Feb7ZuRrK+wj?F2*%-?2JdUzYse zZVbR;weOhjPf?WAb~J*`zUn?DlXyZ{53%=&%ttoj@AN0q{>x$r0x6QA#0%r0obFpA z9<|6(VXr?1)bDNokEJ|cd=b&vxxX$k3xn9LOS|n4gPl==PcD!SGM%K(G2a&6`?Eoi zDTJWlqfYL?wX8};LDn?pzSstp4xMM<= zW|ZG$W!pn?TZV|b?urS;E)c8VvFu%g=?+_l2N+FOb`oW74r+riew`JU!Cz{OX34n! z;YnL?NxKWG4F9F65l(Q!$9aWL`6DH+%qwL}w11f`%EJ7gi{MObVD9VuN+>4o>z)dZ zN)?gGai4*bB9>CntNdE}6nOXEb%MU}TZ@TKsP96t9dyoZ+3{sFX?>TpjVjSE;_}4^S(*(+GdogS{qr9@ z7iATAmp}PWMeMYFQ43^~A{g`;zF~pVe1jsV_oH^{7$O|!cCvD3J}KJje0uc95NAo@ zhRX!C**cj$(03U699pgbmhed@L(Uk*Gq)eTBCm*4G_a%+t%2Pdzdjp8^d1Q!t018g z^yiS@!FTg1)qrS5mU6TIKAg@Bph9{CS+t^NF5%;{a5JA(T_TYOX`k)j$T(c(>-%r= zB6c>Qf8()7CzK2Jg6;e>;sESwVFtEUCC!zo4SEReC*a9MF(7WnWn(3 zW>amT5?{i7co=?Iipdws^Q!ghgo9wRu2|L5=W~NZ0{*$ZL6XmnKevL z6LPst`&jZMS3Cak*b->cGVT9Y-)~=zGPs?x zQi^bOHe3H042mS5H54LpW@_=N^A6F!Kf1gIP@B4>mm@f+9w@xP48l7}(x6Stq=)wc|7Dkl-+zt6p;8G7YE z4egl(OSOrOhwI&G?nW_Q)I8oU5WjFu2Yk~wy-m-Q zQeau@-L8v+;g?n$dhvD$oa^c`__;wF-3Q%xx8M8E6__V43F?)_E3Vz%^XC=jU$2>-EWkH-{N45!t9qlImN`hpnk=7@c8FUe&c6>BlDOTu=n*xek7k%27 zn6Ig5zjJs~Kmw%tA$D7u2EC6P4cc1=#)f?bsKfgHjDbcdL3h**A8;;n#`~g-TyskJ z^n2IbnvYk1^2cUPLo||{^uo_H`~t z*eCzgq%>QaSJCcqMQ%P#WWT3kNjSdMxaizW?Vi^SF7nvlbB|66J#D}QEy-MKuz|SQ zd#t66S_VDmOJPUBS6iGJRjaN;GfXO02?naqpImF0iy7JH5PQFg31!(0#}wQ7iirjX zx0m!cBOGbZwMwhh+vyExK=HO`WyY4!2>1m#6wvt1%K134N@)r+#;B54O1xrCb6yOm zmKyuiw{40K-Zp2t-enjWRAr=W7^EZTFrpt&!cmB4bD#Pse=unmUUBO#^g-EqLmG6F zo7_z;U7g!cqy98&V&ra!l}?YgykS!_Y@GP8m@>G`0Uc~C`kRV}f92ftUPZ2@W9|+J z^o{?`ONC<1Uwoj*0s#nwMZ6cL(G81DN#f?Wc^l{wDy}S67Rmv)Ma-F!KQ6;$H#kji z%6Y8!({DEDK2m2vWfj$iH4HhN#Y(J*oLm31tp1T_p7HlWwCaRcZH}Bi8U=JmRjZI-VZFAL8)ZbxBrf&oVHP^w0aa+AUP~TU}!A33XjWD;+(*>gGTDeAhbSmww zd;me9Gzz;q?+jJP-2@3$K{I~mq&v9d$z+bP^Q{k)?t8WQGjWdZaU>-J$4j8PO!C?xgKQ~R5g0!{)MQHLGZxEZ3YB%!mk{=OYfT7p7~ z^S&bw+>ip+0Hr@sTJ!j-xwT3;4c&Hw0My8&>WC%!o^HSMc30XVfMdz5W9u=TbVF#| z9(X3tepa%e*5@lS)C*g_`0da!A^M;f6l0Bg8m*oo3)*8|qKyeUl&B$a)j>m!cHZ-v zP9E>53zq%o;e`(>Eb*$X68kCVCBwcLZ4KSQ0rAoF+bfwYdiCgM@cf_^9G`IS?@e>n zBOvNalQ6pq-iEQC!RvUb8Z2m+JQg&Rvap#;Jz#a<;``e%W6;cDeEudI*g+O*LNRM4 zf&HIKwJYqniH@Z^$L-CM6ZSN-s%pR4o&*;ljqjbYIG7MjEpvi`-#&2v9)Oz`%FB(EC&$a-sBC=cm^q=i>kj;D3DoU~I$|E-ZGM1cc;}D|c z!k+~~ucOvvx4}hxn}A-B`e0ZFAM`EHW2LY6I%?$ZsPO;M0<6z~Z6B`HOzcP6NO}%z z!pAfhhJgcRdX8~Gm8}_6ssD~tU3X1A1c$f1lVF0H*Exc0u;^*mJ~{R{fi*(MYddot zy86@Y*eJ|zeTYhh9wx7HDDd{Kp2ls`Tc#Txqcd$@JIB{hF5@h1x9q&CwIWBYJYBU~ ze|1x?qBr8yQ8rPps@sY?1r+{Eu`mrMzuUuqk#kO|ve|h!yMjGMeA%q%%aV7fE#1A) zz)Xn_ROvfOg;OBXs=)G842Q;`q%{SlQq3-m?B7f6>@g}B8RmV8-!{}ICnpI)LS%k+ ztrybw%uHz6rr0^Y&?b_BA@cFm)5s|b*51h=V83y9HumMkl&bKg&wtsSFp_Ld3ryG` zKJTF0f!Qx6ml3b|y_27_Q~Ns$u?UOCj#gy z@*fEw5*c6Ws8a&gA{h1Yd`SS~@EoIza1x;I9Smaktd6?1b;EyPri{0q3<{2SfLbUz zN$78J>ek4h#4t-p_$8*U31WP|3U9-MQ60)gQjh*Q5-}D3)W^|mXstiq0t*65G%=8T zSh_?#;#%Z|`LH!!?ADyA$}upKa4;Xt{(&yy?xbM)5U(Ff&6D}y8FNl{#>D#@*|S<{ znzzCgFKiZ>CoMkP*Eetxkwq@~ID#W(vdcusD&W^NykaH>HLKigw^{D`YfT?lYAbbn zIjQ)0ZNCXxI8@Lat*x*R=2~r0mrw4rL-~EsUsD#6f7wW5{O^Z-T4;Fg7`R}#b!#-9 z)g4S#T(1Q+5O6U%cRkRD!YrT4SPgbJR?TMsUnEiRY`3O|^`}2j1?(>nXkB*J90+nrqFM4Q*SR z%UECXpF4LQU{bM3mK#(%RBNM7f6^(YsK?{PXDKjSq26m}Hz(IDah4~_7!IV~Vowk} z2EZ02zK}KBXYGg_oXOC$2_q?=zUPPfbIEC9TGPFr8E~*)s?FqfHwD-l%l`91m(Q&w z{LDp2QGrFxU^F6p&jMq`)!(ltNU6MTkZvUnuyQID76DpG{o8b7DVD?;zjStMz}w%) zl6%FW#NtK^;C(%w-&1z-=MDV6Kgsr3k^eTwnT(Ok5Krm&uL!PHB|Z*He!@8^ zI}g^q_k0&zvVV!n(|iQ=Z6_NShK32A1er9DMNDpd|1d=8n~2HN426W$Eb0Hd3R?RQ z=D+DeK~Dt2UGtTNku|YpGB3XP##^kG-s@L&DCAis%`O}7#QpI!#t`xYaVTWy^!9#K zPG&tL8#kQ-_+vsQuU{)hC_q1lxjoh$-=vtGYOta4;aj-tZK}Jj!$MgkJ<`gL6K66L zvfJ0cc^B~IsQKNmky6Y|8sH|)DW=D}!Gs!uS9drF9Ncm!0DHU{1zHuC0rY+}ua+7m(tt&l7DN)(r|&z7WE`7}n7Zf9a!<>A%o7x2aoJ`8$! zNS=RF-Ec9a>7$IqlRnM0g{K32I+3=XE^gBKSB2LQxR zR@SW)&vb{gg@AYCiPu`Xf=U~#$&s{V$1L`8bgyBpSXX``n$rPP2$lW|Ys zp}<`ZYLc%B-+&;KXVmrZR|bA>iV*=fp)s3;82n*N=5N01-$9`Kj~6RlZ{#2)6jqJ{*bGV%wmjYZ6)b4XW&?gd^ll# z)^9Z4K5198O2iV=x&`3ez^r*JOPj&Q{2l3Gg*^70DsN6;*@8U*k`hjjTBIF3 zlxQCp_=JS4mtQ&^5JcfPg2!AN9H;oRi^avERenRlF8qORJifkY`$fjF*eEUFPus+v ziEoW~`?A?6(u>N~7b*_drbHqn!S!>=pF9!Yx_x^oDtd{HPF%9gj+%E8d)A4|^pLF+ zr3osSHIuUGUmogwdJd7O*jAm7g-5+|+5}%09Wc1(ECmF)yd-=JxT|+Zq{ab2Oo?Xd z;Hc6-jSdxfTm?zc|M0zOq5tX*EW2X_`Q`^dK;?=k&Q%R2CFH9QRay3;c~NU|Tq}25 zLTas(912BP?W`#&NJrX5^RlU2DYujN@{xXO=|!N&f#>)7BIPmiZ3RG}uvaobW$rFw z|IOW%0~kf(Wwp}G?ojQW2lJ3T_jgR(?62?Ra7b$8`>SMjYc$KK%XL7(abN7mVAt*My!1hDrb$V3haAzG$|$a6FGQtcxy?WZkc9 z)hvjcKbE=g9LtJ6fU7%KPDRlL%*&oeSy|}zwMEp?)-@rvbGGkw*WCRRPbRm*y`)oP zi6&)~Sv&KlbKfT|$_S?#=QN#=0_fC-+x6-1rC7|QcY|fxf0=0M2nceUx*;+c_w4vq6zU^=4;L2Isp~pP!~sWP%5!O0Lzv)yT@)518SO2{eaC6`T;s zesHkrnK`RSBqN*x)l5u8>_gF24K!9f{tV<`F6^} zvy&^}$%yRuWHkIPKDIxj{D$c*whrx$-KPG~{VzeZPIM%MRCkHE!Fc14`uo?wp;?Qw z@&-^>V@L{3PF1Ikg|6!3gUl#rdFH9286l~Qz8i)I!#cy1ywOvZY_)zKBKq)4GC0KJ zK5r-hpm`}isdJKtb|^e4t0^~XE|bKpS|Y*t=^@~2ZIJS4Fc5nKRd%nRDjMh|YF~hJb8!(>ub2JP7`8eL}Vw`=>)&y3URAg-Z zXq(xwq=W5H!JsjA0MI1B1q+4e(5XLA3`UL)0NMJlZew74VR-5PDHySXQy08DGa<`gY$s9lE)+GU0M84PNYm3TmFf~+yZ+q92?r92(jHaCY6q(qlmQRc}stsTH7|v zCfX+U^3@TpN}*Riop0MK^u@tmC)(;{9K;*F$l8yyciz}<_QZfMV`wWIS+QG0NcM_O z;<_gK%SPT(Uan!~-wju5NO+i6lI}1VIqV-LN=6xZtwmj2QruydE)ph1%$|53c_rvR zG*JN>RTiW|@gtg)q;(eV9?4W(K2_7#kF=~B(tS}5W#wR2?JN5VlD09G{rruaaE-`1i&)9Mei!+dY8D(DXOnVC^@~d2!bgRh(i@>sQmuiUYwITm@KdQVA>hjtWSwGbheyw4j z7wV_Pde_(K<3yiWyu3-bQeBfm#1(fXqT>r%j}eD7Yx=SWiKUudixz!|Yc4;|wb{BC z(O#G`6(b_QnRhM;(}!0!7dXeptv*_ob7Qq4h%dV5_ZgpTV;o|+HadvDMWRl8so9PQ z5cO~8Ivl-<#QZ_{Nj@$}!+X=2)y%i5jdx4NC$1$$Z#cCGv64G)EC)YRlWH3?aoc|D zdN;yso$^3Pbx~GJO!H}_3lU^aOB*E6!0EW%&KbjnU)4qbbX(3~UPZYCpQovoezujx z%DOJrOGP0_k#Fp7cp5ryBz8_^Y?!g(&fzQP#KW5nFE=x2v34C-Lwje3O)sC&0{?KzJo)(h zd>c_SvZptDW0`$}itWS|&J)%tT*Nq(dGD7d?S6izqdmk~9TODepD{33Br@osObb)l z#l%&w^^dOX1e?W@tPw=#x^)dB`J8($$I|4?Hi}a75w6^^&5+sI?*ftN@O8R;m+=fj z2ds0q;d^J1B_uHQuwetne8qPDINH=x<%<=S&U=8?rL<1ck1lSkANDc9 z+$+2ar67`S<- z+fC}fJh#;z37Wuenhb;ZgMxg(52_RP?K2q~(CLQ&4PxH0hd-*R3|1$ZoO0aZxP0i!MN0TP&p#i>P4Q_h5&yS6#K<6(_1*-#lCJ+^JGiuMIwcbU8Y7+C{y|ro; zPNG7XzB)patj;e6iv3Jhu$nF&BH@}&0%Pu^Grzp!;~e{>c}dmYK_Qx-5#vXQL% zF3p1fq~U!(CZlXv-8jFD4wbS%97Ua65*5R7UKF+ z6tH3!z;XaD(Xoa|BD2juL&IEc*o4w63zd$sbCCP&8-7H})Z^Ey!h+jjtyePAC=yrZ zG|G$6IvfCk;7JM}i;8n?y;4G6rbQ54@jSI>#{`zOUhDZ}Z=E$f?nmHv;D`QZPHU76 zrlUtQ+xTH$=q0B2)t9%=n1OE8$cF}EGg23YyU$lQ^&V%>o9XNO%$My&oZ^03Q>D+_ zi>~Q$-)O(>M5fvLe5>^Z0qhJWx2=3!ofR{>c6bF0lps zAdAo-r^@)@hF$vn-eX>L4ckT>bs1RZEhxuD_koX4Njk;XE zSZPVnNx112+5R+p!u2bZj;;=sAu!kDs<_*;sivXc%vxV3GTH7^0}z}{Tr7AopX@5I zNX0DtNvB8-x6*RB@?&fQi7FunAWUP`Dp;=S2B^VBB;RL{ItI{am(q=sC?_5)X}~Y2 z92`-Kt@6S98k;tw_r8+WYPr$}#5vv5kBnC)Ylfs}*e&mfjz`|incuTEcz2g%xuK_0 zZNjqbn97qzq|_#_YRNIv13i;>b2=Tcedgh$SHS;uyZZT-c>Gmp#7>q3X|ynu>EY4H z{>EvI67`-OltN3ww@3LwKA}xg_?vsq@NY(V@ zCl%X9z3*w_3Fyz?b6m#Pv&w~GZ)%>9s*-Xh(z<^uEtGPNvbtKtX-*Jt zUDDyA=Mi7q`-H^eM!Z1|>cF9S3xW9P=Q9b?8&X>1zSd32#r#!AuPhZB`nR7PZ>B$9 zhiJPnGR0p6uh9?ks)49&jv|Zanm*)LRct!nJ0ex5d{fiSWShRuZrko|01AO>2N96NC8F3;4nUdVb!>gRQkq-L&=KC1g zIbXqSS;ccXbH_k~YgQp##{NXeGa;jm^kt^vIq7@A%K*^>zW7yd#m3MLFDn;?HXA(I z5LGpMoQV14GU9AtaiLI=$7Ba|y~R6yimwOwByBjGT}x0$RAv7eajSDhT`Upz_hRLhP)c zXly^WPId_@B)@W0@ARP+BeCjI2bCRvnI!nD^cMixy{tC0Ztnt8~npsjE_f7{C9Q= ziR{+XzWGxMnv3v<8DqPk?{h}C?8x$aVn#`4Jm{fH6#BS1?IaKB`2NPlJ@o=UqjAqZ z0&AAId9~C+jX|`D#epCH?qqQOLl~YvdSC5FCMw= z#kH~3%ZrM4uF4u;9Zg;hU;OZ_xR45!AZe15ny}YKo_u8ybsk7+XcQ3T5=j%d*K=7t zQa<00>1pbMv*j`)sV&)DckP9}s8P77wW8%@R!WgV#-ann z9>QhK3emE+rF)QGZkbfiRCIOob)?;5n_1D!Aya0| z65@BzuzQ{9o2wDLAkm_#Md3;I=espK`UGB~aj#yo>Cg~d& z{XJ?}@hr`qq@~DQo2SpqSlGnAu~-}AIWk3uzG+QKlVz)94}OreY-djWp=iIEVk8nM z-_rV3dE`}%OTfF@bD_xL-v8JXZ-^zLo8YFEwT4oKn|!}fnaJSy+qUeCoW3ZTld|kq0+hQ z()CHbj$l(@Rm#a*SfED|Fi;dH#?S)`Gvt_WPC&)0RNlF?arO8ve#%H@-ZZK-8+_M* z%nD)OejYqz!=L;86}&YQ z=X4sK?r_a(HMZNbV{yZ^{t;~a3@?lQliN9b^)98nWx>%VSdZG`Sf4AU8XX}Z^K31g zlfR0#mS7aohUngNHMR}XD!wn1tB^Gw8t}mi!cDW7%cMU%%tt&yo_YywH;pl}PRJ4Q z)=fAW4KD2WzPns`JY>CGuPtIDaJa224R9iBEqE$Ew4H=!$*5zij88+DCQ@=5_L-hF zV}o8v&Q)!PwKA)iz2Ydnv9bfa*t;p;HyGPgT}&Nn%|0LXc#fy`oqNwDX6`d7t|9!H|NY0beB~pSS5p)oJ05Wwx)Rxqi(Fx#b`!jaLQk+g@w< zD?wb!QJ=!wY+t7~Yo}Ldt%~PhXT-zTC5ec~J8B%$Z0V(>0L%5Z>aMO!jU%m=^4Ml? zx(A);trIwGv#9SwI#G>>j+ zcI(TEZ_g~HG;iiXdfADgSEw&$`uAW+aW2rj-e2w$>dOq+Vr*V(f-GzIdxGgT0x|+x zDm6!`!xU8Q>#VQx1xx}ss%~w3@5_nb0;oGPa$P^>9R?^G5cHarsZqSI;nKKCJzD8N z0le(IdxuZ+#mk zq}uY`Of3d!x=+>^xT|Uz)_M(u@|yZ>41{7oaVYV;7fcaz!AHWeKnzn!F{}3o9g^xS zT(?4PPyp=Kxgv5{F#ASd%b{F&jTAjqqRjZi< zW0CWqi{5^O_Deim!*ZbcLWqx=s4V5@2U=0O_})bRhm+lFLiu+`$S$!|eXpFUHA^QB zcXG~c%mkKKNsh01&VI7f2GsH;tc%2MeN?LfJ9bm;F(p4)vzVUn3NM7pcV!*%Rw~un zs6PKRr^;dwMxaSP-^2je;5b$Ixz^es$b5T*O#w%frD!-Yj@;ZeZ5ni?n8pVi_~au? zydKJiyJqehk7^%)!0)Er0dtH+Z+A7|hU~VMJ7E8~n-yp%-0j!$bGhORBj2R(nS@Jq zq%0jofu_YPi8P%#3$iA@yS=*Kd*k|~uQX+h*z872lYpvNNG2qhisk7$UuDY)yN0Zs z-gMO==B0DdqC?188=^kk{}nCYsT7bzfT4RPUoS+&F!` zH3qU0RTdQkRl@15S@)}BloQhkBP-Ki0d^JF6pfY%j(w8k@+U2v=C8)Y-D<90F63Gx zAFg4&?e2NV-nwcFPf9D$5{v@RLw{(gDlp)ys*-H&`|tucn9U+=0=Sv11)*D zDfszWAJf%K*(PW%T{KBmS?iXxYYGTo*gWaNdCRNMN#ITHoW?bJvsVWM|WJVnmA1i)apzlij(dE@Lw3r782KGq2M^7ik-F!YbZsP@Si5TR}K-H z--ck`OpS*qfjDByemjJLUKUCtq$-cpsY|o3p!fZ9`s>C=6!$H^idk+Y)>iVBH~rZQ zkOk||c~u-P8=FG|1R9GIh~lrcw67P^3U!Wt0G)gp-@jBBIJX&-&CAgKIVzuG)h%85 zv*Tv>8H48=hT)j5oLO_#YlX^BXh|9==9YEzXv!MvK&93LeR0%Lfy=>j-I1Q6LrYx5U zsygbCw_=U4eEO_E8q~~Pl}}mZ;0Um3z7Ed>@0M~<%6hBJ7ohDp|MDtGxKR`hIuRCH%ZTJh$RJC^h*L}~D2}9< zN6aSRTVPw31)3C8%``+I`A9lVridL%B`AMt11^W@iq$aiQbWQP{I~kKS4?8*t%zQF z%Y%~03R$9RgvR{K>OI+c#6G~z`=KjSDZ98h2pPDX#3e_&YoJ}6x-#J=6JXXRc2*!I znTAYaBcv=q5LdOKFi8mU;zd6m$i`OCsw5tMcjl@pGM+1}DRA4QnuJ#|X{;p{=u_*O zl`ot1?ZbDkN5T$>;(A?A)h!eD(T14(Lsj%)e3DTqS3zuW1bq*J9Fie)s^j7Zxl^9o z(k#PfQeK$%oYwym@Dm9hX?6D2D~qZ)CI(t{C^qWi2`H>K*Y&?Jj@M$=JPq8-hRg?+ z&V&MnYt-iGX(2urJ4?rr;qUagzSkCk8QmCaauH-iJuTW*{wry^vFRsimoLom3@mhI zCk^lo29cV&+Kt1N>c{?4l`@Aex}FhtJd4Uc3r0kVb2M5>IVd{j;Lkjw+)JV6Sd@FM z=u`;m`QY7Ou6BhTz?|zK8%f87V=!z+qVc&YvOK$rXw!h1`7w%hD|~$Q*J($6L2*=;Yr&~w|3HZYL*wXJ}}|QQJF$Wu66eX zk&6*t`y3$?3+!~HIP<&6(%3m$G%Y|%>KoA~=Bw$_GpFdgh2S?t8~sqUs}84*@t|&c zhAdLrw;S%@F+5|M6cxJr;PPi5%-Av`T4JX2wQ2_<=4P$u=7?9boTcFlDvd*{N@y{e znpDeid8<>)H(%P#6VSXarkp=6EEh$A5n5e zaxJ*>I&X`8Q2F_OgGF&|eX;7pA8ur0(?17s#93(jgGtvM z*(P&03M0Ql!bSR2WEGBYDC$%+mF27+9aOAm*qBd?Wz@{)G?r{>XO~EPQ!@yVD6cuT z`3U6vKAaF&+^p1%<rtJ$3nMef#zT=MqNiT8I{QzC`=%;N)I9D$+c4yQ2Hf$$Gli3U;~PSr z<+w+@c$McWbOLmevhyj_G%Uz0Ro<8Q_^@%92ms+)lFS~vom`xMMav{0GMs|-j7ML< zuwJj&&gYiDi(sJkccDv6+?Fzkq||obEPLO(**t=tpTB%TTaN%L`aY?e-a8Pce!T~z zR5Z9gufKlmINq_-<3qd^`}&$r6kBpoIw3pO$wRBI#`FXWw_ZKUc(tRow2GF=bbVLC zR|v=y>CBX}>F*j;*+kQp5C7Kr-dXVrQKTRsI=%mUr;dGPTav2COjK@F&)}(2c`%b7zNek17m7A@nzSZccXHMM!J`>yDRY7T}+4^M;>({D2K)Ix7Htebq>77!MSPuQNDDDVQ1 zy5nIZ@94=@hCh8;#h`)AH}0g8ER&SJPqo#~eOY70zn^JX+%ZVWDf%Ih+~tLV9l}`x z02Nk15IiM1Dv6pP>dLn#A$C9L{8nZ{M#{CeTyc!s4B9FDCd$B@Mw!Mh*(BKH85|Za zDDM#{HSEkej^x|EXXV65rUN^r5yd4-BSexW=jndl?tKDVUn}sNf6>h#MCMri6YUz6 zFiAxFOx!m-U5kRj*_md|vD>PP)=a~g_~agk@TH5IXlOpIjXv&? zP@RIWV9H;2OI0u!LW8h(6=;e!u zlU=?1Qvv-6%A3dhzkdGuO394w_`iyXiOk}E{e|J)8`XvmE%UE(5Jm0(e}VAp*&?;% zZFGL@f0Z`LKumNdntv6)phsBb|N0001Me9DI?Lz33nkb83jpD?1Oj^t`KX1i&;K4C z9c%3=I$&K&^})zVFlIzk=`rd^9_zpApeKfVS8DYgHlALj%wqkEuPCbjf!smcLGqis ze3naJxAC#a!-viaP*fx3B>zoQ_viPH^HCWJ+U^L@o7+7nDaRg%Vdzd{B5 ztIX{&4d_EWM>ikx1EbS3(bbjMC&n&Vvu#1y5B_^nor~uoeZBdJI4nNBuM7w#EOL_a zc~n*M!PVm#>fXhFb&Pgmw=)sWAz6sKo|4aJiAw*PkM3JhvsxJ?Ze;U$ifuR#pix@lg3tA@t?s}%-Dn{gILWW8Y0 zF(>sJ@7b{WN!%e>j`RzAC9AD{ys91EZ@wIINBaEWy}Hv(dGvequi{>PvJ#DT3b{H2 z!FcDzL3!px2?#AL^0;E0vmmWgzWoJj#G*bw5Wi0k?P2h*GV+et45CW`I@=xJhMGAZ zJI~BfYN%!PphxCVIyv!_ym!jAzp!1{4srMH9hzCCoG$!Vdkl*8l) zqQ0+tP6A`lgtwcgiTo^0|33wd11#mgT4S_H2K;XqH2>=*;r|B^)w^?LmvFDCc=2OzW{8SeB0nzcT%Rt94)&)8y(d{ zVub&@0^X$YvoHiq^W_&2@Zh~ih{=pg1M$x?zn_9gnZGzT<>s!r${m&JtUCC=|GjL# ziadGRMMDX}#3dvo^ly_lG<)mat}lUnwkJbpYioPlEduYhWf&1jH2M;yzZ{abLEmBqyEY0Nq3Dj^Om#6NjKol|oRQf_?T5t0o zIVbv#s z*~z_7`6DVt$%q7=z07Pidb@DGF(jQE#qs!dHDq+K}p&=X`ei>-sAELC;?nZ}6Dg9a^J|%;}xD-M;zO6SClWcB# zJiH+~Iy!$un~2J^_RQXF^zqhQQ)D4iM$h(SE62$$#PduB`sttUj2H1kr5KM9n7CpY z(o*v7-tK=*CPA2vUESl~2)moS%N?urv=yO*PE1sz{Co&Pa!O0XkLiM?e%BCD1o^N^ zs6!PNGim7Il7UI!q}tk=c^exmNZ1hj?@E!)wQ#LPlV)upEOu7(zn>ob_?mY;(Uk$dQGJaucIWvYZa8q?wybzyD_U_o zD0gk~261DJ2^RQ5BJCaj7V^t`W`c%GO_IgpJCf` zY;0x?$D{S3+S>H@)qiHP5tA3$>Un0j(BggJx_fJHu1WeXX2CZMkH!DMJti{y{xhX0qkm^tSC>(y%>eeFCJb-U zZ{P$<^}{V@fmf8z|6%!bc{~>4uLgLsi;o`+7NCH(*738^|FDOV(pSHxQs;3kK7oU_ z|KMfhun&qBndtc3%{^q7O z!mx+fO6|9p-@Ll}P=;TU_0MEcny_{}MXRWvpexEKj`oD#8kZjf85z0Zox5`nEB=Vg z=XfuPKRi+$yL0?OKMby6`yxMoEMkx`A~gOX8-|Bp#RKExFPIVY z$JP$0`G4Lrz&B4@`H>vAGY0#A<`LsBP`^+{w~ZESa(vX|_}wc&gioOD-or+sf9U&) z((pI>E+{cq$e+O?;kAPz6MT*_1v2Z$g(_dk308pzcqU2zw>IkW%c|D!LPgqHF##uAw$ols{=c#JqZXko z2O5a^D`t)xfKFm$GZ5fR$RCUgo{qRJ5~f4iv-B~ya-aWhlS!iId1s1D&mZ)xkR(>5 z{T~A_)5NO7lS???K1=`M)?Mm9)g{qn8x_pOR_35TiHTu=#m-3NE>y;QUz@8K%npf; z98S@X!Sq2_6#BN7YnxP|Wl?)e4KK|ijxg2-baEGZeAVAfn+{io1LPD_%kVYV$&qQ! zaQhkj8eYANluJxZwbj*$zh~3$zTC({j30XN3sqK{5u(Ny#GJznZS!9)WK|X#7`x=6 zL((Oa%a6OCsdeDz(k2GenuMe{-vCSQQ_tajtpTgYMt8bd!0LnNUu-E%G zht=`kbI}%GV#eP9enN$O9{xg1MCIITVjf{MAvZlXCXp@!u(*Anh;wNOl#B!;vx=Pr z^zq!03IM0|0gaGjiD5F1?sR&+ZOaV5hUd}o?{RIeh~W8d~6>5vypE$&=$R5PcOUOw&F%TRB+6M@d) z{IuSE)5?j*@%EU7&Dp8+;=4S1XO&J?cm;zGHa~;25YWm;bBu_14=3-EUh;LacWde2 z+J127(268NZp_+(`4>Vhi(1uOZ59%(>xzSP($h#^T37FEyGk3!*^uPg`Yu!fZAbTp zDyWRFeo?tCyTomO-uqIdL5i>u3(cN%kbU$Tm@Wc9q=d}vXIlMlC< z@t&qZIA@(MFyqJnqCH-4nV{ z*VOSDrq()NE`5jM29f(73qbw4t(jY&QJs7CR|rsPQCYT=&OiyP`N7R#FZ;FQC3)}p zQI1kTu@|pbkmJz^CQ6H2nh*&t>8~af_|lNgsYd%ZjSrq~4Ujw@k$|uc)sa1LR;=rx zvEZJ}ZCx`{!;LwgsJ*a0BWr{`fCk|2w{osn9)*_QHn@BPXbA4>OQ~ylUNAWDEr;`6cGLL!3gLQ0Gr(({s(>p@C29o7W4jCNA zj)sAr?APuK6AjNYN|AK=O%LmTt!b~$xOk;b-_~X7zb`y~H!FYmxg`U1vR%G0GhB62 zt&T;0?c){plklbx*bUh)WSDTY1P+hBA9Ls=$=du~008FbS}ud6LyyDt;W2dHjoot*a`#^gX!@gTF{Df)g4?BF zGurws$<^xF5q>pNpQDs}xfX7AC!Ny1d|g{EcPrQIPF~E6G8q z67z!Yof;&u(eMHXz0>v$!QMIX0|+-%G)WGTK7TYOp3NzRy#g!+rB4q`#*X z>3KsucJj8l#T%JAD$;%CH52lhLjg%|F1+>kmX=72yn=!Z2}0Dc_i^8eb?It5!gjjc zcfWQ<#S+Tq@EYN~GOS5zq+jN-_#8+KlJq-S4|M(nnmsM_l0oqQ0*cP zPqePYuww$a+_TqhWQ&h+_ZvwHgnHQg6eN{zcA1^hajyL?wz9o9OajbVsxs0b2^Us+ z!&8YukPma=z8O}e?5US8eZn1l_{5WICOP1#l+ppv1w)wHzU4~u9}fQFQazA zuKT>dSU+`O8bYlYy8D>q(9PZq$at#Q%T%XcV3!r8*V7Q+QGW^UWWaos@#>4iW(4SV zPl}UB+^vYqSWncu##Cq{bm6C(Tw1i6S*iZ#9h|>JoS$?;$U71``v>2Vwpo%3IwZIx z3Gmp6rErI|QxdsY&q?2*>r%L(b|3`XWkuZQ;w$3g&POo~Nt?jqQSYE8ewMNYugr@l zdWRiip;2u=5gyxB-o7>2H)}dfW3-pTkVfEw9BEzbO^c`9F@Gpfy1DTp?Ce^);O-pQ zie($Pea@NZ#j<4Y6we=gT$^+hXyqb15ZV$2yG}j&ZepsGyK`=CgC9e2rP#`;43`Sn z;50vq<4B-_d9|%jd4YGq$776Bs=OHj=4m~e)`bYD@M*vIO9d$^Po~bd*lyR=Mp+KF zMR!kA_~^L|a5QJzy_}cx!Ur{7`v-RT`%kwYN#8a7MFxhzcl)27-qZWD7f_Z&k5blk zxJt&7^j?pEq7F;&10Gz0X0)Q&&x6i-(_LeF#?C)?Bynqjzw7dOjaP<3>xqQCWyUj5}i3ST(07la07E3 zQPXwey@|fU*XVVaXLshKEAy{4D>4eLcSS1_CT29)Z3vnSs!gV##PmFasx>)SuKIi{ zatJ9wc+bvK*G^V&c86*Z{8nFPo{Fl!(_zarJt5zN@Q8Zd zw8@CXJEq*B0e!8u99E9vw_Jc&+W025=&%BQ3qZ1p<9rR ziH{OqkS4yQ?nGu2GEjxXx1wTNPh-jJOd2x_s%tIWB+h%B+nmmWd{2*29zU=VDi7h`*gSmbtORXMT8X7Pu<_^0jaIuo-_QkzpmpQps4lMGPN zHVlEgac&x4&LgMUq?=pVYUc*Us$Vp*S#sfzI6NB=8B{u{Okc!(>NCr%##=k!xS6xQy0=$ei-Z#|EEMOB?gA36hO*e54?2yn1jg#96Ya9J-U2k1 zd`1nP=_0yJC=b%pNtJU*YY}98(xZ>xfSAlxZK5NjIo&`m2B+jTa&hW>H4noMO9c4M zyY30~6zRQWVi$Iapjo9BJ(5~1PCXHSROM|RkuN(iMektSLn(bf?=DwuO780M_ zYbMoYF@x_p9Z8Y6=Z2G*s4q~s&qtNNt)s}~TgDk@q}llv^h@FAVUrKaSkz|H3b>vL zecunjH_JJRH1J`Az-4hs&Qf?C29rXdXG~%~%YfZn1+9Bn<@`wA$jL|#uCevgGJk#X zlR1~$bGNa`^)_6m_^Sjx+pRpkJ(sT1@rs^U?A^~WYwGR9JTZ5rd+VDjN&J_x6G}w3 zj84q!)E$uw)VqYVpbADMVa2{Y>g$M^)1{-9jQ-O&Ya;oqKxiZ0?Kmu2Ut;en2~n@u z_yg~68#;%FMYUCYHXL~Hy;G1^x2}{aZhqZ(ZELBDPxi^#ip~V((Is1ac4%RAQLVgvD11^w#ngR zib&mce(3Wi`0jN6>586|FS56%xfXFX0f3u(*m0=oyD_+)4y-v7K}Wq=s>DM?%dV6M zrN6+RJy>F8wMyD(w1_|dRL$i%kPu;}cit>+E#an~zqDn^0{P~)CWqCZXx+6vGYM6m z^6IQhds<1i;~p{m`ROlQ+@0T%`G{*y8eQ++pK1($Vz19_m|6_Ql%upHLLQDo(YeVo zmdB9d3n?c%Kce?khgcrs8r-Os+68If>x;sQ%^y{GsLf6;);^fWnvr(aQ8f$5qJWYJ z-Nzyq?N2o&6Sc*e-;&v>UxirlDst>nkhJZ+UXsV@GY}RI-I-auFo$0TWPBU-r;y8k z0!gd9V55>UAUaY86wj5{6dtyTYm{B)$wRq4t`ruQNJ(%E>Wx3iicjWc*;WYi>}y-CeuvBr)Qlm%63g|vS@2>$`VMIV)8=o^gwaWoGbQ=9X|~Dvu(r9GFQo&^aQ(m zWLH{z?OI zat?!({C+&?b4Q)F%yg0lLmQ%!4?GR5@$m4lX+(Yb&`Db959kU?>)W1qF6o3*QsX^B zyFl{6#<0Y-uvo0?o*)PJ_6{cMeWxZz{S8no&kYTSl@FgQ+*l}NS}9=9BNE4kTTCYO zQbGwbbaKY5zMoR;p5OD}U0aj|unfs5sQY9!Y&5mrT$Zh~v3sL-W=}%*^O{jEv)g4` zc(iEtn6iPHkYu=Iv}QA!bVN;%Umn|<0Dp0YNP3Qu@)V3d9{U~u%+t4ZIz^aYywzYQ z{(agu2Oa>q|0VshBrM*N!?F1AyxhE4{i-h1cfo)$na`m)9s>9V3&`+cDNg9;51$o6 ztvG;sg3|`7u|Ab$2>OJEyq8Jo^HZK^^-Z5Mpc(VIeH?y8;QlHKt!dY9?9RH++J2-z zhk`8yV2fjEXr2Du)oOVflKiOK9=a)(9xI}kmf=duJ*x}dBTzjW<({9}!&gB`D`?p| zsdiVWP6i)GayN*x$eNzpq-QsXnl6dE74nVSUS5RN%rppf=w6sym;?5ebHGX39_+e= zBi~Ukr&Vb$a=5nJe&SiVv8Dl5Ur6R8o|aA8HN?~$^KJ_72g%oHHuy?Kx3skWq7Fvd z(FRo(DYi<_s^p;OjaFoZwhRo_)RbFoUn+Uqvb@$tZm7~*a)8s2 z;Wt`$7E&$bdQUn!HL?5}ITD~ZA1`~jFBV;;ZUZpEW^xP!Nu+db`3v5 zo7{Ftr7+lm$j0yj)3yMP53Ittqvy)L^$1k#YROUOwc?ODoYO zFRl6KP@hIlu_zKQ&d-r7qFXhLNG{iCxeT#-Z+s|SxUa}F**w%y9tHWOs2sd+RBuED zshotBpp3*nM{S$?mXEvSW9OggMR{8q@eU4|?;Ny1uo@=Se(Jnd?xaW)-=5FN_Yu`a zKLYL?wAVt1zj^0vZUH?~rzmq0cNSg~>Zk8ydDk!zxhj?1!mB>3B6}mW2d!LSF2f(e z!6J{mV;P(NxrCcYBZP&1E388XRU+bYEi*hnOPVMMl>eFhQXgmFT}R40UH??Zc2v`|FDbbZm}&8e%iMaC+$hN^I~I~rnuVRv{3ID6 z80Y+6^0**OQaM7P@9)ThG2SH8|B&7P*OY-%-CeW4AzdQ!;+glCwK}QkB>{ zemdMDVe})7r8NP^-jQsqwN9-h8uDR!zp(X-Q&oe95$bMUkF2#5a%g5c(vZ)--jNSB zY4sy2U#2H{f`HB*5r7#{mTmFa`ssqzguPS5%yX^GQZUFa&Tl;iJ`9V8X zpLsIt7gq*cClH*0O;trlx@VfD3Z(0R*2|wQedA}83%;3yBS;)qk*}%}Sl z`MAmfR2}WnUlJCeil6Wydbi{ES2I$>1~td%(S9<4W~9pr~P?q^m!x4o~LD;HsIN&t*IMP z{J;y-84X_pgV(@UQ&d;eK9^Ym!amxZ6~)Y7|F&$Mix(7Ad+XeX2Yl)$OA?#YTfwcU z_l_{VbucyjP9dswri2A)R3BesIdE~U>T+7SwrK99+jF=-nbz>KccpNY0ad_L^UUgX z=^X>{to@BMuqaF0Kv507xOlGenh`f;jg{A#k<`%p#0tt&_y&tf{QICtGHWR*9d^{@ zE0qT#%K8R7P{@)$Q1}Fv$iA!h>~Tu**{w&;BAd*y^C?OV6vSgT z!2DE0*K<7n;shOwv9zS|Te7U}a8WQdz_iSsXoEhG4fVFP2|t-2F|9;H`VDBaEeJ^K z`OBYj(E+aJQ6!&pC<;tM)_-koI!Tl(;@!3+sLI#<{)o%ANKlVjLl^EC9wm$uZxexB ztCUQH?HiejyG-}qn)DGrzN7iE8`^({Btfx`94MAJaZ02!ToIdOR+!3BlKyoOnD;{wwW%Ym8>Ahs*)(OaaDF`cr40Tii~oLeuF zd&lCjJ-t-bo1oklX=`R#FS}9Au5Xj$53@w0<^JY|Mi{RFVEDSO2KJ3VPjthSf5-B^ zDh)bFebUK`oQA@;lcG?AOQaX_Y-2C7(!7P20@=9nn5K~NvG~z)H9kjU;*K!z|FHL# zQEfF}+$b$=DWyOQrL<@%E$;3VcXu!D?iOgV;_mJmDDDJ`Yj6mX;O+zodU@#c{MWnI z{r=uBmk(jB$;ml$_UxJ2^84)(k@4HHDBW?ohbPlN8^UMz6~_y11-rP0KJmUjlHNV# z=S#YoY=1K8jUS3ey(bpwtYxA1R!d;9WkwKI>DRY7z`O|{J!)`sF7g=ZAS~X&cqPNb zC&&D5t$JI9msw9@xB>-kYRki+nj2Weqfi`o^zQhj(mrfZyq0slmOdO$_KxOi=9q-~ zXVXKiBES(LT4zYlt*(pgtpSjZVVs)Z%7dG0^Oe1a^=VM7tVpS==A)J1+bcA9#xy02 zF6G+vZY9$gfumN#^y!6M)uB+|Sx5-AF))uBJ-tu)iFvbYB>cepcF$Jj%s-6ayE&`; zstXy9F0q3gm9b$0ibfQG#zFs_Z=Z4K0~=YH6k*O`Tm6rr zA3wwkyFHt64R5BEvjr{VV8?&89RS>Y>Ge8cQX>1wV6cKOkVg@EH|`Sk%^rVyKWKE0 zw6N+tpYaQOZjWO$d8AWP!}d=`_W5f__SpQ4zZ*s&JA9TKhG-U*8KVpiGNH=hh^Z=@ zCA=b%v0YYuTp4{`N=rd04W8hwY-ALjSQNuR&DS{v3$7{j+bt7Qv#oIcs&Nz-p}>^7 zDV+3$V@J#MrGOdorU&Ba5A=AED?x%`GBUV-82#_Ml|>7yqSD*ysf{H~91|2# zy?mDe8z_iy_Srxj6XBT3&B>)%%mlGy+#dE{KO@5TGByiJHt=Dcq1D|C=d{or@$Pnf zb{#M5kxCz`#)7lohtFg?Z3c}ezMJ4Mo#^2dravWFSZ8lTd}$KT+LfJ1u=eUmxUJeA zitt~|=dzhmCb_q`2jf_J%?1KxOxxzDQ8j0A&bUJXK=Twjiuw1=oqSV8Y;^m%@vV$2 z&f#HEx;V(ag8#jf%jp>~Rdc*_}5%!Il{Q zl~dI|CM|hXX+b;2qU@ zC7=L!(@N7CcY4vKiHu1ZFCNahlzifzE-w4;T!75dmbO}YQauNs5RH_q$ zvAyMlF@5f>+9}2vjm0qIwp+#>`$fBFT+0vnzc+A^BT6>#bjGUhHfg2a1C|>}#qC8V zz?p9JlX~V#YV2BqZFh*v>R$eNT`9iLixDB;y-xYW&U@lfi2_$N4r0O@eNU02 zoc+L`_>U9gsECP}5%8t;CFKWZDDcb+(wIu6LGW}_f^=Bi()k#{@4T44pYX?hNz?3{hnM_->r-wh(>ley;>Jq6tE_clOa2;j<Hlvtt_1mN}2DV0)E>mTE@Q zHml}a=Qr$>+(ltT29q1ukIqqiba;c+gWua=uuf&1`_5a(sy+xLeS5!)_N!d4OJlu} zh0TfO8;95OgN2Q~3%dV)UO+Gd{%M3GI!xYne}=(_Q$b0}x67vnY5WWvy6gHrI9o8$ z%r~ba``R(>VmSxZ>|e`(po_J(NlgvmX9c{%9#>TJ^y3aY4pP6aid8{Bp}%h9u=xN^ z(j|{c5UjQN=*>gZ*RL8hHu{`Rg7`8gCrsn*$HMYOD?*Ng3NTkv^afgYA>D4GP*6i4w|2Ybf zi&XWRfQuDNUQCm0+y+ON-7u-W&dK!Kw_LkKdFw-*QCxIp!Frs&h(ez6xjcjP9eqLG zUh1z}F?7C?#@!rYwZ9wvD5@H^tL}PRkCWNL{KU4o>S;I(FaT2`0g~<;?l12%FZfSp zLV#P&4r-s{j}9Evu=ZBA)0W~+5pNkjA>={{F9$Fh}_!qZxXBOm}r7F zdR$72P;zA6q0E0=7)Y@FbJhuf_aC$Fch{Qx7~@Y+BrRuT$V6aYre%+o8&X1?#clCD zUK3?reETfTIcVbeeup9R@~&|l!!(8GjncGN{jv&qJVhw{57f9?r7nvg-1{1Tb8jXy zA>ZyH32@=At?%2x`!^4F^s8y+q_=p&CvAs!)VyrBp)hc^`4Ylizqo5Xo?4@v$yW|i z7dbtPY1vJ|9XIBD@%pm*YNo|9Z;=LwqJ%l`C3X7|S_T59jEzm^+-UfGWX_sNPg(g) z8e*}~sCqLf?*k?gq@S_$NqgX>eWU*;k5iBX8g%vlkW+0_xX*of85!ksx|u)G!kWs4 zVbs>BMErmGPwALpnfRuRCL2WJI6Utp&w@nh zN0q>#b>&?i&8fiN1Pd`Afa9$6K)t~O-j}@AJ)XV#o6z??7MfX?r)&Ka z%n8!dzeq2hwu40)>cNTzE|-*Rb;pMS>VNQA7F=fcOG;_2*Pd*zvUpLPMJBh-=;6hM z%i8GC_m`TjG;q$ZiFgzr-Jl!9HRFJAFw%M4^YT-{zjuQwBvH41Jd4OM`jfgVNJde3 z>POas(~rZm&9A@gwC-xm@AC)o{RLH_w&7x-o1B=2-vOC>4X9t=4wbw&nBKJU?uM*{ijC+|TNQk!X*B_Rm={ns zI+t_gCpU?J0vt_-h@@!CU{|z`dSl}EGvpW_Z~sV1kji;gUKq4Rqki>w*LVr%sXP2K z;;1;8SH>HwBFvRX;qDH{$*mKr0SBydUgJ9zI={Y9u5oPDalh$1=UT-LJ}VX)wjxEXLhd^q2?gsN_W-AeCWivc(w~WsKhJ^2*7?Yn=>@=Qz10Nf1ZBQ119To=SW`eGD*=5t(zO&kgO}z}t zR+9>+dMnuado9@iA;vQS+n(~i)@9mx06>foeKsALWWky;DdM7}R!{4fQP#D(ZmXtc z6jf3iEUmMEp4IKPci076>OW_HLgfs&E;^AQuEMwsQt z9SZf@%`eU%<*?~WJ=)05EO<}I9~0ZQe(iWg9L4W(GBoygJNh=Us2VKcIX)}nu6tgm z)XT|l&F|(*iCu19J`D4rX$;w>oA=`7bR=HJ)V}$dc<5hfMJ}z&)#0ey-AKxxv8V&a z31A?+TE?g6F`Smt)JpRD27F&q3-K-7HpB4FEeuj*mSjA2UiTy}%|GzuVYh}hJjpv7 zh(?|P0{0SL@Lq(e5RZGTu0ik1DjMXdFtkg3Y__F?1kS-CqI|c1mUAgh!>GFjT4|nn zq@f+*R4h|3-5xc_m~A0pU%a&=(D=Ux(xZUdDE z%63CRCjYVSWjr)>izaZ++X@+~SI^Vs*f3{F2c)Gcan-G}ua3VhBH4pgfa3Q*xlf@F zCp2$l=-Z=3`X4q3{#6!J3rkC8R%@{@+3aAe_V3)5_{(onJCJ9sg02;h;~h5v)XgHB z7RuVU)<^Q2!E%v!G#{4P6gZZrYfo`UGRzyiBU`V(dGd1~Od09kw@uz-V)5;=$DLkr zPk|DZYf_F5Y9)dnApYI!$oEXpjz)f;1 zX_bp`6L_LCMxRAo)7E=FVA-x{w|SHt=NZ$(p1lJO)0{+36Us$N=J|t_AhilUOs@7$UMXO+loDhn^R9K|tP^gG-Gj+4k8U_>2G+1uya!sARFst$ z6>&IvJs?auZODsx?);*0IBv)zMV~)%NqxzK)@&ZCo+26Am~UKer-CCksM!)~7E4;y zkCcuxUKN{2`mb#yqF{KtyS4M^9VTN3VOF`OS|0ACXC9Bp;e8cym)b;lswa!@f)AkH zcX>U24RR4)vR{!V+-`Yhlr%ZEDTx}j5Qe%P{*+n;;aR54;kXyxrxOvP5E5w-kyNT!cK-!9)1=4KYL>{SWO zC-%(=4X@zPF73wV&ZC46$HmsCGY90N_y?Q{^6=Bcki&Fn#vVM&vt{Up;mTPKNLSmk zobjYng8KpbXSuj5_8u@rE5Y`te52+-U=O+7QJ}|&y}M*G_t=~hupnp80_ag6SBF0{ zLe!#4CAIqDC@yyQ8?+)Q)P_mzycUmbjnbRnVChJIVP>I8MM04yiJ@18!t*KZ3V*+^ z{Q)@qi;sSDu27M_&%Hvl>+fe%Ij;*eio|2O4ymS{% z?}#EZd}H7i;nX_%mYLlrpRjX`y!Y)Qf6s!mLJsvNE2-{m z&GGYb0p!GdLT|$uO{JNf$t`gCWO>6~L}6^>d3Bs>djD8US>rZ$D`;u2QxwesMzf3d4E;p9)ZgNK&i5 z7|sTj44`VCKmXUu93u>NTSB5Xw1Idn8-?$hHBa;7m#bzpUczGdWq0Tm$2=@AFvVPm z4aYgiYSL*GO>7rhNu#0B(68fhi(+2MTs)Gg%VyGS)wS^h6l=n1G07uevbOy2rfE@Vru?1##Pji6 zjGNs{tysUNETket7yAq?*H6*E)+n!%B{gd>yMtT{TodA+jX0XVvOLS7_R$6v(2EFU z^f2xv2P0b;L-6A)MViAczU6c-S|*lX9EkallowG{6lRPQpXF*=Mk+5TBO3GhwW;$# zdy6we%B`HzyXhvtpt1^1?;TZsgzNaOk9H|&24`3<3HMwA?oVb{<5d@YbhVHK=ipH};nbLjbPzuU)0zHy z-W2B6vCy`ONl?XG=D_P_W@gt|7lR27fPC{_`?3{85MXI-RS=Q9P`h*HSsF~@Tx+V< zPn7l5_<}Fz+I;VF`#mGp*-v?Tv>&p&CF;VE!$b=kN^Fi40QBViA+R%fd%6irbdz3! zVvZ|2Uj0~We&-$K=yAneejDEGTq;a;ohGqkv77HzI!5{q<+CGsCQ=n)s>Ea0JaQiR z6N|0$bA^%ig9kE&fMH&duo;)tonpVdU2)4$fKn(Ai_R^AU(I>p5}Iye_~!}j%wSWC z4f$D&B0Y`!XWnd70{`GtCwr*qUspD)$sENp3IMW_-2NB47xGP;^EY1%>Znz5k-O*5 zxxk2mfi#fV7R+nHDZdK(>wOPT=~&%9WL5Fp{ql26-7VoxV(dRCg?$y2*;kn&rj{uM zm}=MI4zd2ej&xX$U7xpt*)BHSI5y3i%d8|ADkv9sb36SDp)Dqn6?KslK6joSH~x^vC-z9+uvW50hwuS)oocG%H)=6|In( ze-bz-Z@2SXspE%P+cekC;_sU27LF%Ef_p%%kvGieR~MpIUmO8vegW8%M5+!_G_8ww zb!A+^`TL9Rwd+pZE2y#r_78_u&>Of$p{#}idpE7p`LsQni?=nsC-!%7aL}FLN{Ws< zMk3hW$P%~zurBPNt|QYo4gIRpQKnMxfeIh;zw5M;#1||>Y>sx0Nh!$;WjAtXMeFY8 z?yPeKbGtpzU60{_0g|e|z=jPugO;j_L^=MuodP-JgFI2_F?#g+^EA7XQ z!o7~bvbb*UuzkYPx$3%~)$==#wyzOrpqAOce_5T=&2ecRXwea{pIKIB8mhY$EJHD6 zrO~F1(78KlML>KA)jdC7=xyt5H`xw@^?>W(Ve6ARcnURv?81rnsKdD(WK1zD}BS!pES-MS>so3 z-By(S6ff_F%DI~7tZl-`WuOy%JS>1k#XQI;0{50DnO}JQ=|fN>WFQCbZ|meQ(??hg zucHy3b&|3;ViUIF$a3RxM-29Z5szGD0~O|hpL2D- zE0skpPrre!1@Id$t@!@IeO7dC%v+#bui~%Nk&t+OHGBqtAeZ&U?r#9EHi8rYhJA0Y z;z8O|(IU31|KpSC{OVmj+n*1Jf0-%odLW)R9`rkQt)uI6*pFBL(Tq}3Y}pq;Ggn_` zmd)PX+wYFZ{0&YZA&F*9U>v~22qQ)sCLF{(F6i8={zu&M?F4eOe|6P*c1wGG!AdR{ zGw+(xRgXW)`TVblvveLmW5f-g_wQFQzDa8GXz`4-5z1F?yMHf1va_^~y`y{| zY|9Q`N4xaCI%8ZNyB0pc`^R~4lb2fZu zDikU4`r`0`!&zIWcwhV3S?J0C3R7Iw)Jde;va?|S`y`~!2W}*J{#)Pk9hv`{{`@H)xdDKi!eXO;XW$UF5h2;iDkW2RgtT<<#~+)y5?}(BPB)W2+C<$0hkwy z`bk|qK8}bHsH&B(q@f{U+_mn&Jqyv8S3gB046%8+2fWJvpR&z;e7NUmU=k^a&pYU;W>GEHDzUnVn6cpzgBpMb4;nDI}C$aw$mqYnj0JUc2sAem7=^xE6wA6l&@FyXPk zOO?G=P0aX5SFcg3CFK5-*r@J5LT2kA*r}~qE19wg5EOX)>PT3hZ8bUE-6WRimpK?_Y%eHhwJ$w zWo+XTU6_c5Bm+xCBHem>(ETAEW|YGpJq?D#8qBqTG|a}wL`vScoj zJ_N}{1L5s$AR@%7Y)HD!o`?Y;Pfz{Sj2hbjeB(uVy6HE#WxvMc0~Xm>C)DIEItIwi zX-dzY3z1F4d=T2V)cAZ#rz5HPH`X%xf(8}u_fc3HT$H#p)75I$GlGb7KI*u-g@!(z z^Y?}L+gc*?$%W-b3T}7fz32@m*VjqB{WEQsf65!YH>tLsXkexh&<*edXgCWSsyc)> z>=fO;gXi^p;&0jq|D88(4o(N`Ccl|yN=mA}=!sxpafiPC1JG9vTQYG`V|*Pw4sF*)=bLvdQh-fvBTe zlFNJbkGyU0N;8xsw7537P@Ff3G)tp+S8gJ9cUv9pan#JPo)VBL-+DC1UHxhid}XY-re1gJhOwZ(es)`WvRdlxYGaVN z+RH09cP>}wL=*DOyqTJ_WFGTx2uPmJM}%tm?e(vw5ERtdNZfy^+wBv>j7yn6%2kEe zyIbyTrMF{=Y&BPpb z!0{Wj9V+`nQCcJWqKBI}_C>-z;;Da_eORJQUQeE|>qUPZ0!;k8`)UF?z zvIMFMMOl^n}if;7rbl_thcATW)XMWDj)TW!dcq5>H z_l^Y+R!I1yCOrB+s_6~Rz`1n}`RqjH`$yr7z6QJbcDi;AeVP$12=#)cY+E`=j&u|~ z(`c=0nT&Kb#$)HacRuNB`#BER;clzQjAXaZTb0wdZDq~MRfx@Jb@UA^^SGfU+p#qY zT)Ek#R`jU=WR+7?P%yKXTWbvZy-mLsX_=DClo?~08yoM@bam>y3& z6HqLmyf3W23UwX_fj^8_XLj+A^5$1c{X`nt<+Hgt%8;G3hMxFQp341IrS{c6=b_2^ zYi>Jd?ztT;F+N?_wk~NoPgwM!f8|&H&zOyi!8pa`8C(vfO<#F6 z*cvuJnZibW9Wx1Ar~0HwWe~SHEd~~v0SLm2k{A=(>=bKGj3?jbld-69n0oh&^!D=q z4?z)p5DX}yIot~#x*k4&E>SXRAoXF&ZJn^^5I3>G?pYFug5c*$p1iquqJ zlZzTZ$B4>iV6AK}QoCb}dCc+8Hx-ycDl|`p%;ff|^i$Vcb!|lQLtdTsT zvYA+TG-q#KSt0feYZZ@6tzdsU+Ez#ihZ21UtM0+ z_Q{6p@fuoc4zDHUWp*ySt5P|wy081(Qtvw%P~~hZ3QhZMD$)?-OPgA`F&u2)Xp*Sv zw%=R97d|&GPBPXrBd8Fi(>kOpxR_ep;7(&BJDDIAn4WS&69!HASPgx3%BT)QgL&7Q zR0d}_-@HGVssIYsE${cqBtq(pgA+w1cf5bG5_6rpv=V%*uzlECYLuf=d7RW0kFGF3 z-<0rUC|L@e!FX$Pjs_w?W!f?y zei-_`dUF!T9_UiNs%X9eovj#`l;N$cg-_w`7w=T;KPo>=Tyb@+{j8qb|7LuSj2?R!48i9$>6+qLg}?j{XJt}GNhS5R=Z+cbfnym z>Ec*X0EBw@zMS3BUDWbzKv?qly?|&+0Qt}R7(e15$=B5wJW8Iu*a>CK5vFhCKJ5|K z*cA%%7{F7sEwaCsCI;Z?c8wH=>+~B8n&d+hV8-HX11PtHXOK>)!-Tnxu(Nr>y^83 zX46dheG&DMxDc*$zcH!q9y;@LYK;C^sjhVyY3l^Xv?j zklV%n&r_yOTbG|UMBWZx&wo_C!-z@B^O0J_(?Q#)7Qb>$5+JTJg0)f}E@)-eBt7a$ z#`~9cJW7)|>+3jII!d>{$ae-_sq9l)N?FdQgz7ddzL4>lsVI%-YmL?r{4#&}adYuk zmW{3) z;+D_4+|IpQtz%6xT+hb0b$X19`1U3$bIFr&PZ-tzK-S}O+(7wRH(g8CN)mdzw95M`&!Mnf6h?#*U-=0jZdbUwJdDG5<3JJN}Lq2nJx?Ch{nc$k?e<&KP!`(
}FY>j-%XcTq?(_kU?zU3yJ4^PUG{YVB#j=T|S47|&WQ99%gnZGl(1{bcQd%o~X3e3oCRd8Pbf3=#8i+64W%6btmXgno z)0iC0%8O49%z0%U4vM@hXC9aC5ssTaUo9d9N4_212SBW}hE#^}&Bt+3@D}Q#xSiHl zS0!s4#F~5^!qHCe6K&}S9+d(O)krH+YIZD|H;%gGNROCzKN5mdb~_$)G;P4$x8TfAWQmW! z?*SDK^kb7h$`fjIEV7M0PZpZMX=dS*7_7dQ;$;vKVrD82EgbBHw~K2e*YE2sgkl3d zHL{)C7Qsde%Pqtv(<SPxgjU`7tClfN3n~t^V9SPT$;>AtKMI3 zG|y6AdkH}wawy;;mD#KL16%E!f8wdWZe5kSLXUp;^VMR4>1JV5Hu%dY;+BR_5n}uN($yf_c2nNS&^_(lo9?cySA)Y8>6iC!>||n6oh*)D_o!8vsA5Y zI@NgXpoI&hq(9D`mcwHlZE3)okn9VuJcQ86Ba#t9*tbbnjuj^gj4xRCU+jDm>Vm>l zGQqKW^QkYhrQvXb;|^~iRgTFbd#OkmcZ!b4Ea^5jyrn+IDGZjd=^aAlyDiUsPUr1e ztnQu!Jm)i?J5BCLw|YEaKi@U zCv5wry>re{61}-LV-^Bhk*AI zy+d;y2t;BVfrd%OdKyWJm@9Mpl&cxz1U^(zH(1oPP#sAk3rsD{de1y_V_A@Y8r#9<%rFY;0{Jx6zi z05&QB+Z<$KIfl8!-lRz!X8fzCX!#Tc*|wb-5!bYd@5j4GjciHpP2I)E663(ZWt};C zSuKIJy_=$>vw&^mCWIz2(Al+o53ze_As6?7?^xKNU5Q5@KG`YEEyHY3f#1lyi}FgC zIg#mvXI2w4O)3(@WK_y3BLnw#dRj?iMGSU^mvGCn9;$%T8*z>1%O9zqX_7F+&aCvu zX=*MLIBXB|(-8w%2?R1@W*BT_o`T>l)Y!Y)NR2+sTV4Eei&JPzRiHIVZgTEo1HT)= zZN|If;t}_-?v5CmLYuBkm%?41K(3-n)og-wl6~;UzyKhalwQRP#^IF!6l!Ai>1 zkR3M{O-~Dcl!qm#Qw+VTG(Z8|RJ27d$_+w&ABOn2=I_bXI7h9l4gxC%({!B{yWte7 z5)=ri!Z<+u!cAI~nL9r6PcnWbvyTz2(CoNPu?(G2Tzc_&Z*6P%uB_aNKDv@yoC&6x4HBjxlB1`Rgk?{gxL_cZIr^;8oKB=0lZO+t#I4F zGO>3OxC>%Ix^NWGu zl|HsGs*TbRmP)Bt+~8LX_7)PVm3w44GX}klVQ%AY0)Qi#*(e47yj&6V`|@OHi+^18^l2;ujw6obQ6qtSu}Y#2H`N+VZBKTjv#KN4R7BRz zwj|u2t(CL+gn~8>jGNN;mr+%UzoI7QrxOYr+@_nIil8~8`N3#sZTqazw*iwHoLaux z?ZGI%ay8@?Nk!ieuOChpgFU!aLIlS8;}t1Cd<^bIa{OXcn8v%#`e}Vai!nC4|4W_8 zQ2W;X1xkBx4Cq+?fpk)g;4*pWK$wAaGyK(1dZbR<=6Q;_U1HfWLz~t1*3SL{UZa`Z=G4ov zO3GAS`H@&M1p}y}&En)&*7Q-+nuEN_DJ)^6ILs~NZVG0La2vaxuB=-eL2!Zg05(ts z1$|xYy18@UW;YY}lU0GtcpS_#^kD(0ihG-jI@t6ndwU>|*yPfYEx@^#mBc8c0Kr1r zUgSYvqm`~`+pmlWn?dIiuR}_}*}qNQKky^BPJ)t$5Y_zW=!T9d*TdjT9oz?EV>x^3 z$MVLer9mX4jl}r$OXNl3(0e6e&{ATHmYJRwAp=^1h(+$H`N4+`caGlG zOdz4dT*)Gm?E(LH&v8wh^O~!u%>;CMynNk3;%$jJ1mdBe)^yO7;1Uk8_;^h|=uw*au=(NDd1=LsC zSWku&Z;4meMSV)9o->rR>s8I{ll)mRHyH1Tr!qP}YmMAuG?A%&m-}jhGOwUC$FQkU z%w(uZ=Q#%Y8LaFSxrT}8vHX_29xPEXEa2HOLr@Mej3$%oUOfIfEs_2#zAxpK!7!$( zGyZK}+dcKwSd}WfxhG%yGWwvD|CoDwa#9@@>wRn0*@jw~t5dLzH4<`Wt7{fT+#9y) zz@HxE2mq6O=$=pg^*o#VVapO%XPo`{W`qf(esPM;1>9jDX-RC%WC*Iut%`f}=QcR= z73YLZ4&)ZgD}H`KTWRUJ+<{Z=)RhDC@trh;S?8m5C6T!{h4)~FKH;7nF8x0APngyc zIeG)KB^1Qe#yqpb@3I^Q@)e3&S)!v=7%|xl9)@$Gx~W{Gf3mS!Z<8XR=1k{O2J&Sx zF$q{zhc!Z&Wz1IlCf1puxtoe+cvVfAaiJwF+@`N)@~LEVNU=gRnY32DrL=J>o=J@7 zO{@twa1IsB%me8F>&-@@%W4<}DQZZF#H1DqF!7)WTES?7*F~XdvCX-3)xzujo2w)4s2lX@NLMg!?!&Z@>~Uj`AJ! zB%|qC8eOFINRMter_zPUNn?V#TN+JqIh+-rO6BxGoYmW28Bxs4&9{9JFHXQMCZ + + +
+
+ 归档份数{{ info.count }} + 保留上限 {{ info.keep }} 份 +
+
+ 备份占用{{ info.total }} + 当前库 {{ info.db_bytes }} +
+
+ 自动备份{{ '已开启' if info.enabled else '已关闭' }} + 每 {{ info.interval }} 小时一次 +
+
+ 上次 / 下次自动备份 + {{ info.last_auto[5:16] if info.last_auto != '—' else '还没有' }} + {% if info.never_auto %}等待调度线程首轮检查(约 20 秒) + {%- elif info.next_auto != '—' %}下次 {{ info.next_auto[5:16] }} + {%- else %}未开启{% endif %} +
+
+ +
+ 恢复会覆盖当前全部数据(账号、用量、配置一起换成归档里的那一份)。 + 系统会在恢复前自动先备份一次当前库并保留在列表里,恢复错了可以再恢复到那一份。 + 恢复完成后所有既有登录会话失效,需要重新登录。 +
+ +
+
+
+

自动备份设置

+ 实例级 +
+
+ {% set b = num_settings %} + + + + +

+ 自动备份在调度线程里执行,有采集任务在跑时会自动让路、下一轮再打。 + 备份使用 SQLite 的在线备份 API,采集写入期间也能拿到一致快照 —— + 这一点是手工 cp usage.sqlite 做不到的。 + 每份归档打完后按「保留份数」清理最旧的那些。 +

+
+
+ +
+
+

归档里有什么

+ 安全提示 +
+ + + + + + +
备份目录{{ info.dir }}
内容 + 所有 *.sqlite 的一致性快照
+ instance.json(含两把主密钥)
+ manifest.json(时间、行数、积分、逐文件校验值) +
为什么带上密钥 + 没有 instance.json 里的 cookie_key,归档里的凭证密文 + 就永远解不开 —— 那样的「恢复」等于把所有账号的 Cookie 弄丢。 +
因此 + 归档等于全库数据 + 密钥,下载后请当作机密文件保管; + 它不会进入代码仓库、也不会被打进镜像(见 .gitignore / + .dockerignore)。 +
目录独立 + 备份目录刻意不在 data/ 里面:容器里 data/ 是数据卷, + docker compose down -v 会把正本和副本一起删掉。 + 容器里它挂在独立卷 wb_backups 上。 +
+
+
+ +
+
+

备份列表

+ 新 → 旧,共 {{ rows|length }} 条(含已丢失的条目) +
+
+ + + + + + + + {% for r in rows %} + + + + + + + + + + + + {% else %} + + {% endfor %} + +
文件名生成时间来源大小记录积分账号库版本操作
+ {{ r.filename }} + {% if not r.exists %}
文件已丢失{% endif %} +
{{ r.created_at or '—' }} + + {{ r.trigger }} + {# CLI 造的备份 trigger 与 actor 都是 "cli",印两遍是纯噪音; + 只在两者不同时(auto/system、manual/张三)才补一行操作者 #} + {% if r.actor and r.actor != r.trigger %} +
{{ r.actor }}{% endif %} +
{{ r.size_h }}{% if r.records %}{{ '{:,}'.format(r.records) }}{% else %}—{% endif %}{% if r.credits %}{{ '%.2f'|format(r.credits) }}{% else %}—{% endif %}{% if r.users %}{{ r.users }}{% else %}—{% endif %}uv={{ r.schema_ver }} + {% if r.exists %} + 下载 + + + {% else %} + + {% endif %} +
还没有任何备份。点右上角「立即备份」生成第一份。
+
+

+ 列表里的「记录 / 积分 / 账号」是归档生成时的计数,用来挑一份合适的恢复 —— + 恢复前程序还会再校验一次归档的完整性与库结构版本,校验不过不会动你的数据。 + 档案文件名只能由本程序生成(服务端会拒绝任何带路径的文件名)。 +

+
+ +{% endblock %} + +{% block scripts %} + + +{% endblock %} diff --git a/workbuddy_portal/web/templates/base.html b/workbuddy_portal/web/templates/base.html index 5455641..93f2605 100644 --- a/workbuddy_portal/web/templates/base.html +++ b/workbuddy_portal/web/templates/base.html @@ -32,6 +32,9 @@ {# 日志管理里是实例运行信息(数据库路径 / 账号名 / 来源 IP),仅管理员可见; 服务端另有 @admin_required 兜底,这里隐藏只是不给出会 403 的死链。 #} {% if cur.is_admin %} +
备份管理 + {% endif %} + {% if cur.is_admin %} 日志管理 {% endif %} {% if cur.is_admin %} diff --git a/workbuddy_portal/web/templates/profile.html b/workbuddy_portal/web/templates/profile.html index 612930e..e41ea2e 100644 --- a/workbuddy_portal/web/templates/profile.html +++ b/workbuddy_portal/web/templates/profile.html @@ -10,6 +10,8 @@ @@ -57,12 +59,32 @@ -

至少 {{ pwd_min }} 位,且需包含大写字母、小写字母、数字、符号中的至少两类。 - 修改成功后当前会话仍有效,不必重新登录。

+

至少 {{ pwd_min }} 位,且需包含大写字母、小写字母、数字、符号中的至少两类, + 且不能是常见弱口令。 + 修改成功后其他设备上的登录会立刻失效(本机这次会话保留,不必重新登录)—— + 「怀疑被盗所以改密码」才能真正生效。

+
+
+

导出我的全部数据

+ 数据可携带 +
+

+ 打包下载属于你账号的所有内容:用量明细、采集历史、与你相关的操作审计、 + 以及账号信息与对你有效的配置。 +
不含 Cookie 明文(只写「配没配、多少字符、什么时候更新的」)、 + 也不含其他任何账号的数据与实例级运行日志。 +

+ +

导出动作按账号有最小间隔(10 秒)保护,避免脚本反复触发整表扫描。

+
+

我的采集凭证

diff --git a/workbuddy_portal/web/templates/tasks.html b/workbuddy_portal/web/templates/tasks.html index ae90277..2bb2cc5 100644 --- a/workbuddy_portal/web/templates/tasks.html +++ b/workbuddy_portal/web/templates/tasks.html @@ -31,7 +31,10 @@

本地时区,逗号分隔,支持 HH:MM(也可只写 9)。 - 保存后立即生效;已经过去且不再存在的时刻会被清掉,新的时刻当天就会接管。

+ 保存后立即生效;已经过去且不再存在的时刻会被清掉,新的时刻当天就会接管。 +
最多 {{ max_slots }} 个时刻(当前 {{ sch.times|length }} 个)—— 时刻数量直接决定 + 采集频次,是对外提供服务时控制云端压力的旋钮。需要更多请先到「配置管理」 + 把「每日调度时刻上限」调大。

+

指定区间重新拉取云端明细,已存在的记录按 RequestID 去重,不会重复计入。 - 区间越大耗时越长(云端按天分页拉取)。

+
单次最长 {{ max_days }} 天(超过会被服务端拒绝,请分批补), + 且同一账号两次采集之间需间隔 {{ min_gap }} 秒、有任务在跑时不能再发起 —— + 这三条是为了避免把云端接口与本站线程池打满。 + 手动点「立即采集一次」只走增量(从最后一条记录续拉),通常几秒完成。

diff --git a/workbuddy_portal/web/views.py b/workbuddy_portal/web/views.py index 0837d8f..a1f1898 100644 --- a/workbuddy_portal/web/views.py +++ b/workbuddy_portal/web/views.py @@ -28,13 +28,16 @@ """ import csv import io +import json import os import sqlite3 +import tempfile +import zipfile from flask import (Blueprint, current_app, flash, jsonify, redirect, render_template, request, send_from_directory, session, url_for) -from .. import collect, config, db, query, scheduler, security +from .. import backup, collect, config, db, query, scheduler, security from ..security import (admin_required, current_user, is_admin, login_required, safe_next) @@ -42,7 +45,13 @@ bp = Blueprint("views", __name__) def _ip(): - return request.headers.get("X-Forwarded-For", request.remote_addr or "").split(",")[0].strip() + """客户端地址。**全站统一走 security.client_ip()**。 + + 原来这里直接取 `X-Forwarded-For` 的第 0 段,等于把「来源 IP」交给请求方 + 自己申报:验证码出图限速、注册配额、登录锁定三道 IP 防线会一起失效。 + 具体取法与开关见 security.client_ip 的注释。 + """ + return security.client_ip() def _uid(): @@ -104,10 +113,15 @@ def login(): username = (request.form.get("username") or "").strip() pwd = request.form.get("password") or "" + # 先记一次「尝试」(含成功)。只按失败计数会被「慢慢撞」绕过: + # 攻击者只要把失败次数控制在阈值以下就能无限试。 + security.note_try(ip) left = security.auth_locked(ip, username) if left: - security.audit_login_fail(conn, username, "已锁定,剩余 %d 秒" % left, ip) - flash("登录失败次数过多,请 %d 秒后再试" % left, "error") + reason = security.auth_block_reason(ip, username) + security.audit_login_fail(conn, username, + "已限速(%s),剩余 %d 秒" % (reason, left), ip) + flash(security.auth_block_message(reason, left), "error") return render_template("login.html", **_login_ctx(conn, next_url=nxt, username=username, need_captcha=True)), 429 @@ -127,7 +141,9 @@ def login(): if user is None: n = security.note_auth_fail(ip, username) security.audit_login_fail(conn, username, err + "(第 %d 次)" % n, ip) - flash("%s(剩余尝试 %d 次)" % (err, max(0, config.MAX_LOGIN_FAILS - n)), "error") + # 不再报「剩余 N 次」:用户名维度的计数已经在攻击者手里了, + # 报出来的数字会变成「还差几次就能把这个人锁住」的倒计时。 + flash("%s(本来源连续失败 %d 次)" % (err, n), "error") # 必须把 next 显式回填:失败后 request.args 为空, # 若模板从 request.args 取值会导致跳转目标丢失(历史 bug)。 return render_template("login.html", @@ -176,9 +192,11 @@ def register(): ctx = _register_ctx(username=username, display_name=display, email=email, need_captcha=True) + security.note_try(ip) left = security.auth_locked(ip, username) if left: - flash("操作过于频繁,请 %d 秒后再试" % left, "error") + reason = security.auth_block_reason(ip, username) + flash(security.auth_block_message(reason, left), "error") return render_template("register.html", **ctx), 429 # 注册一律要验证码:这是唯一能让陌生人写库的入口 @@ -313,9 +331,14 @@ def tasks(): " LIMIT ? OFFSET ?", (uid, size, (page - 1) * size)).fetchall() s = db.get_settings(conn, uid=uid) pages = max(1, (total + size - 1) // size) + # 三道闸门的当前取值,直接交给页面:前端据此提前禁用/限位, + # 而不是让用户填完了再吃一个 400/409/429。 return render_template("tasks.html", runs=runs, sch=_sch_info(conn, uid), s_times=s.get("schedule_times") or "", s_grace=s.get("catch_up_grace_hours") or "12", + max_slots=s.get("max_schedule_slots_per_day") or "6", + max_days=collect.max_range_days(conn), + min_gap=collect.min_interval_seconds(conn), can_edit=is_admin(), page=page, pages=pages, total=total, page_window=_page_window(page, pages), @@ -572,6 +595,190 @@ def records_export(): return resp +# ---------------- 备份管理(仅管理员) ---------------- +@bp.get("/backups") +@admin_required +def backups_page(): + """备份管理 —— **仅管理员**。 + + 这一页能下载整库归档、也能把整库恢复回某个时刻,权限等价于 + 「拿到所有人的数据并覆盖它」,所以必须是管理员专属:页面用 + @admin_required,接口层另有同样的一层。 + """ + conn = db.get_db() + backup.sync_index(conn) # 磁盘才是事实来源,进页面对一次账 + rows = backup.listing(conn) + last_auto = backup.last_auto_at(conn) + nxt = backup.next_auto_at(conn) + info = { + "dir": config.BACKUP_DIR, + "count": len([r for r in rows if r["exists"]]), + "total": backup.human(backup.total_bytes(conn)), + "enabled": db.get_bool(conn, "backup_enabled", True), + "interval": db.get_int(conn, "backup_interval_hours", 24), + "keep": db.get_int(conn, "backup_keep", 7), + "last_auto": last_auto or "—", + # 从来没有跑过自动备份时,next_auto_at() 返回的是**当前时间** + # (语义是「马上就轮到它」)。直接印成时间会让人以为那是个已经过去的 + # 计划点,所以这里区分成「还没跑过」与「下次某时刻」两种显示。 + "next_auto": nxt.strftime("%Y-%m-%d %H:%M:%S") if (nxt and last_auto) else "—", + "never_auto": not last_auto, + "db_bytes": backup.human(os.path.getsize(config.SQLITE_PATH) + if os.path.exists(config.SQLITE_PATH) else 0), + } + s = db.get_settings(conn) + return render_template("backups.html", rows=rows, info=info, s=s, + num_settings=config.NUM_SETTINGS, active="backups") + + +# ---------------- 个人数据导出(每个账号都能导自己的) ---------------- +def _zip_stream(buf, filename, mimetype="application/zip"): + """把已生成好的临时缓冲流给浏览器,并在流结束后关掉它。""" + from flask import Response + + def gen(): + try: + buf.seek(0) + while True: + chunk = buf.read(65536) + if not chunk: + break + yield chunk + finally: + try: + buf.close() + except Exception: # noqa: BLE001 + pass + + resp = Response(gen(), mimetype=mimetype, + headers={"Content-Disposition": 'attachment; filename="%s"' % filename}) + resp.headers["X-Accel-Buffering"] = "no" + return resp + + +@bp.get("/profile/export") +@login_required +def profile_export(): + """导出「我的全部数据」。 + + 这是普通账号的数据可携带出口,所以**只含本人的数据**,且 + **绝不含 Cookie 明文**(只写「有没有配、多少字符、什么时候更新的」)。 + 归档里放使用记录、采集历史、本人审计与本人配置四份,另加一份说明。 + """ + u = current_user() + uid = u["id"] + ok, wait = security.action_allowed("export:%d" % uid, 10) + if not ok: + return render_template("error.html", code=429, + message="导出太频繁了,请 %d 秒后再试" % wait), 429 + + conn = db.get_db() + buf = tempfile.SpooledTemporaryFile(max_size=16 * 1024 * 1024) + with zipfile.ZipFile(buf, "w", zipfile.ZIP_DEFLATED) as z: + # ---- 1. 使用记录(与官网 xlsx、CSV 导出同构的列)---- + with z.open("使用记录.csv", "w") as f: + f.write("\ufeff".encode("utf-8")) + b = io.StringIO() + w = csv.writer(b, lineterminator="\r\n") + w.writerow(collect.FIELDS) + f.write(b.getvalue().encode("utf-8")) + for r in query.iter_records(conn, uid, None, None): + b.seek(0) + b.truncate(0) + w.writerow([r["request_id"], "%.2f" % r["credits"], r["prompt"] or "", + r["model"], r["client"], r["ts"]]) + f.write(b.getvalue().encode("utf-8")) + + # ---- 2. 采集历史 ---- + with z.open("采集历史.csv", "w") as f: + f.write("\ufeff".encode("utf-8")) + b = io.StringIO() + w = csv.writer(b, lineterminator="\r\n") + w.writerow(["id", "触发方式", "状态", "开始", "结束", "耗时ms", + "窗口起", "窗口止", "云端返回", "新增", "重复", "存档总数", + "冲突", "结论"]) + for r in conn.execute( + "SELECT id,trigger,status,started_at,finished_at,duration_ms,win_from," + "win_to,fetched,added,dup,total,conflicts,message FROM collect_runs" + " WHERE user_id=? ORDER BY id", (uid,)): + b.seek(0) + b.truncate(0) + w.writerow(list(r)) + f.write(b.getvalue().encode("utf-8")) + + # ---- 3. 本人相关的操作审计 ---- + with z.open("操作审计.csv", "w") as f: + f.write("\ufeff".encode("utf-8")) + b = io.StringIO() + w = csv.writer(b, lineterminator="\r\n") + w.writerow(["时间", "操作者", "动作", "说明", "来源 IP"]) + for r in conn.execute( + "SELECT at,actor,action,detail,ip FROM audit_log" + " WHERE user_id=? ORDER BY id", (uid,)): + b.seek(0) + b.truncate(0) + w.writerow(list(r)) + f.write(b.getvalue().encode("utf-8")) + + # ---- 4. 账号与有效配置(凭证只回状态)---- + row = db.user_by_id(conn, uid) + st = db.secret_state(conn, "cookie", uid) + cfg = db.get_settings(conn, uid=uid) + for k in [k for k in list(cfg) if config.is_internal_key(k)]: + cfg.pop(k, None) + cfg.pop("cookie", None) + snaps = {k: v for k, v in cfg.items() + if not (isinstance(v, str) and len(v) > 200)} + payload = { + "导出时间": db.now_str(), + "程序版本": _app_version(), + "账号": { + "id": row["id"], "用户名": row["username"], + "显示名": row["display_name"], "邮箱": row["email"], + "角色": "管理员" if row["is_admin"] else "普通账号", + "状态": row["status"], "注册时间": row["created_at"], + "注册来源 IP": row["register_ip"], + "最后登录": row["last_login_at"], "登录次数": row["login_count"], + }, + "数据量": { + "记录条数": conn.execute("SELECT COUNT(*) FROM usage_records" + " WHERE user_id=?", (uid,)).fetchone()[0], + "积分合计": round(conn.execute( + "SELECT COALESCE(SUM(credits),0) FROM usage_records" + " WHERE user_id=?", (uid,)).fetchone()[0], 2), + }, + "凭证状态": { + "Cookie": ("已配置 %d 字符,尾部 …%s" % (st["chars"], st["tail"])) if st["set"] + else ("无法解密" if st["broken"] else "未配置"), + "说明": "出于安全考虑,导出文件里不含 Cookie 明文;如需迁移请到「配置管理」重新粘贴。", + }, + "有效配置": snaps, + } + with z.open("我的账号与配置.json", "w") as f: + f.write(json.dumps(payload, ensure_ascii=False, indent=2).encode("utf-8")) + + with z.open("说明.txt", "w") as f: + f.write(("本归档是账号「%s」在本站的全部数据副本。\n\n" + "包含:\n" + " 使用记录.csv —— 你的全部用量明细(与官网导出同构)\n" + " 采集历史.csv —— 你的采集任务运行历史\n" + " 操作审计.csv —— 与你账号相关的操作记录\n" + " 我的账号与配置.json —— 账号信息与对你有有效的配置\n\n" + "不包含:Cookie 明文、任何他人的数据、实例级运行日志。\n" + "导出时间:%s\n程序版本:%s\n" + % (u["username"], db.now_str(), _app_version())).encode("utf-8")) + + name = "my-data_%s_%s.zip" % (u["username"], db.now_str()[:10]) + db.audit(conn, "export_self", u["username"], "导出个人全部数据(%s)" % name, + _ip(), uid) + return _zip_stream(buf, name) + + +def _app_version(): + from .. import __version__ + return __version__ + + # ---------------- 兼容旧地址 ---------------- @bp.get("/index.html") def legacy_index():

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 --role admin 新建或提权为管理员 python manage.py status 查看各账号的调度与最近采集状态 python manage.py vacuum 整理数据库(checkpoint + VACUUM) + python manage.py backup 立即打一份备份(所有 *.sqlite + instance.json) + python manage.py backups 列出备份;--prune 按保留份数清理最旧的 + python manage.py restore <文件名> --yes 从备份恢复(恢复前会自动再备份一份当前库) """ import argparse import os @@ -35,7 +38,7 @@ import sys sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) -from workbuddy_portal import client, collect, config, db, query, scheduler # noqa: E402 +from workbuddy_portal import backup, client, collect, config, db, query, scheduler # noqa: E402 from workbuddy_portal import security # noqa: E402 @@ -102,6 +105,19 @@ def cmd_init(args): _p(" 账号数:%d" % db.user_count(conn)) _p(" 主账号存档 %d 条 / %.2f 积分 / %d 个活跃日" % (n["records"], n["credits"], n["days"])) _p(" 操作账号:%s" % args.user) + # 随机口令只在「本次进程刚生成」时返回 —— 重跑 init 时管理员已存在,这里是 None。 + # 必须**明着打印**:库里只有散列,日志一旦滚掉就再也拿不回来了。 + pwd = db.generated_admin_password() + if pwd: + _p("") + _p(" ================= 管理员初始口令 =================") + _p(" 用 户 名:%s" % args.user) + _p(" 初 始 口 令:%s" % pwd) + _p("") + _p(" 这是随机生成的(1.4.0 起不再有 admin123 这类默认口令)。") + _p(" 程序只打印这一次、数据库里只存散列 —— 找不回来,") + _p(" 请立刻抄走,并在登录后到「个人设置」改掉。") + _p(" ==================================================") st = db.secret_state(conn, "cookie", uid) if st["broken"]: _p(" [warn] Cookie 密文无法解开(cookie_key 与写入时不一致),请登录后重新粘贴") @@ -119,8 +135,11 @@ def cmd_serve(args): return try: from waitress import serve - _p("生产模式(waitress)监听 http://%s:%d" % (host, port)) - serve(app, host=host, port=port, threads=8, ident="workbuddy-portal") + # 线程数是资源上限的一部分(见 config.THREADS 的注释): + # 它决定单实例能同时吃进几个慢请求(采集 / 导出 / 备份恢复)。 + _p("生产模式(waitress)监听 http://%s:%d,线程数 %d" + % (host, port, config.THREADS)) + serve(app, host=host, port=port, threads=config.THREADS, ident="workbuddy-portal") except ImportError: _p("[warn] 未安装 waitress,回退到 Flask 内置服务器(生产建议 pip install waitress)") app.run(host=host, port=port, threaded=True) @@ -474,6 +493,120 @@ def cmd_vacuum(args): return 0 +# ---------------- 备份 / 恢复 ---------------- +def cmd_backup(args): + """立即打一份备份。走 SQLite 在线备份 API,采集正在写也安全。""" + db.init_db(create_admin=False) + conn = db.connect() + try: + try: + r = backup.create(conn, trigger="cli", actor="cli", note=args.note or "") + except backup.BackupError as e: + _p("[error] %s" % e) + return 2 + _p(r["message"]) + _p(" 归档:%s" % backup.path_of(r["filename"])) + _p(" 大小:%s" % backup.human(r["bytes"])) + _p(" 校验:sha256 %s…" % r["sha256"][:16]) + _p(" 内容:%d 条记录 / %.2f 积分 / %d 个账号 / 库结构 uv=%s" + % (r["stats"]["records"], r["stats"]["credits"], + r["stats"]["users"], r["stats"]["schema_ver"])) + keep = db.get_int(conn, "backup_keep", 7) + removed = backup.prune(conn, keep=keep, actor="cli") + if removed: + _p(" 已按「保留 %d 份」清理 %d 份最旧的:%s" + % (keep, len(removed), ", ".join(removed))) + _p("") + _p("提示:归档里含 instance.json(SECRET_KEY 与 cookie_key),") + _p(" 权限等同管理员口令 —— 别随镜像 / 仓库分发,也别放进公开网盘。") + finally: + conn.close() + return 0 + + +def cmd_backups(args): + """列出备份(可选清理)。磁盘是事实来源,每次先重建索引。""" + db.init_db(create_admin=False) + conn = db.connect() + try: + n = backup.sync_index(conn) + rows = backup.listing(conn) + _p("备份目录:%s" % backup.backup_dir()) + if not rows: + _p("磁盘上还没有任何归档(%d 份 zip)。" % n) + _p("跑 manage.py backup 打一份;容器里这个目录挂的是独立的 wb_backups 卷。") + return 0 + _p("磁盘 %d 份 · 合计 %s" % (n, backup.human(backup.total_bytes(conn)))) + _p("") + _p("%-3s %-30s %10s %7s %11s %5s %-11s %s" + % ("#", "文件名", "大小", "条数", "积分", "账号", "来源", "生成时间")) + for i, r in enumerate(rows, 1): + _p("%-3d %-30s %10s %7d %11.2f %5d %-11s %s%s" + % (i, r["filename"], r["size_h"], r["records"], r["credits"], + r["users"], r["trigger"] or "-", r["created_at"], + "" if r["exists"] else " [文件已不存在]")) + enabled = db.get_bool(conn, "backup_enabled", True) + every = db.get_int(conn, "backup_interval_hours", 24) + keep = db.get_int(conn, "backup_keep", 7) + nxt = backup.next_auto_at(conn) + tail = (",下次约 %s" % nxt.strftime("%Y-%m-%d %H:%M")) if nxt else "" + _p("") + _p("自动备份:%s(周期 %d 小时,保留 %d 份)%s" + % ("启用" if enabled else "停用", every, keep, tail)) + if args.prune: + want = args.keep or keep + removed = backup.prune(conn, keep=want, actor="cli") + _p("已按保留 %d 份清理 %d 份:%s" + % (want, len(removed), ", ".join(removed) if removed else "无(本来就不够多)")) + finally: + conn.close() + return 0 + + +def cmd_restore(args): + """从归档恢复。**破坏性操作**:必须显式加 --yes。""" + db.init_db(create_admin=False) + conn = db.connect() + try: + try: + info = backup.verify(backup.path_of(args.filename)) + except backup.BackupError as e: + _p("[error] %s" % e) + return 2 + cn, cc = conn.execute("SELECT COUNT(*), COALESCE(SUM(credits),0)" + " FROM usage_records").fetchone() + cu = conn.execute("SELECT COUNT(*) FROM users").fetchone()[0] + _p("待恢复:%s" % args.filename) + _p(" 归档生成于 %s(程序 v%s,库结构 uv=%d)" + % (info["created_at"], info["version"], info["schema_ver"])) + _p(" 归档内容:%d 条 / %.2f 积分 / %d 个账号" + % (info["records"], info["credits"], info["users"])) + _p(" 当前正本:%d 条 / %.2f 积分 / %d 个账号" % (cn, cc, cu)) + if not args.yes: + _p("") + _p("这会**整表替换** usage_records / settings / users / collect_runs / " + "audit_log / captchas,") + _p("并且所有既有登录会话会立即失效(所有人需要重新登录)。") + _p("恢复前系统会自动把当前库另存一份备份,所以恢复错了还能回来。") + _p("") + _p("确认无误后,重跑并加上 --yes。") + return 1 + try: + r = backup.restore(conn, args.filename, + include_instance=not args.no_instance, actor="cli") + except backup.BackupError as e: + _p("[error] %s" % e) + return 2 + _p(r["message"]) + _p(" 搬运的表:%s" % ", ".join(r["moved"])) + _p(" instance.json:%s" + % ("已一并恢复(cookie_key 换成了归档里那把)" if r["restored_instance"] + else "未动(保留本机当前的密钥)")) + finally: + conn.close() + return 0 + + def _human(n): for unit in ("B", "KB", "MB", "GB"): if n < 1024 or unit == "GB": @@ -552,6 +685,22 @@ def main(): s = sub.add_parser("vacuum", help="整理数据库(checkpoint + VACUUM)") s.set_defaults(func=cmd_vacuum) + s = sub.add_parser("backup", help="立即打一份备份(所有 *.sqlite + instance.json)") + s.add_argument("--note", default="", help="给这份备份写一句备注(记进 manifest 与审计)") + s.set_defaults(func=cmd_backup) + + s = sub.add_parser("backups", help="列出备份;--prune 按保留份数清理最旧的") + s.add_argument("--prune", action="store_true", help="顺便清理超出保留份数的旧备份") + s.add_argument("--keep", type=int, default=None, help="保留几份(默认取配置里的值)") + s.set_defaults(func=cmd_backups) + + s = sub.add_parser("restore", help="从备份恢复(破坏性操作,必须加 --yes)") + s.add_argument("filename", help="备份文件名(如 usage-20260916-151043.zip,用 backups 查看)") + s.add_argument("--no-instance", action="store_true", + help="不恢复 instance.json(保留本机当前的 secret_key / cookie_key)") + s.add_argument("--yes", action="store_true", help="确认执行(不加只打印将要发生什么)") + s.set_defaults(func=cmd_restore) + args = ap.parse_args() if not getattr(args, "func", None): ap.print_help() diff --git a/tools/shots.py b/tools/shots.py index c7dd73d..30eaeaf 100644 --- a/tools/shots.py +++ b/tools/shots.py @@ -47,6 +47,7 @@ CAPTURES = [ ("06-users.png", "/users", "用户管理", True), ("07-dashboard.png", "/dashboard", "用量大屏", True), ("10-profile.png", "/profile", "个人中心", True), + ("11-backups.png", "/backups", "备份管理(仅管理员)", True), ] # v1.3.0 起「任务管理 / 配置管理」在普通账号下是**只读**形态, @@ -237,7 +238,9 @@ def main() -> int: for name, path, label in USER_CAPTURES: shoot(name, path, label, pg=page2) # 顺带把越权面再验一次:普通账号访问这些必须不是 200 - for probe in ("/logs", "/logs/tail", "/users"): + # /backups 与 /api/backups 是 v1.4.0 新增的:能下载或恢复整个数据库 + # 等于对全库数据有完整读写权,所以必须只给管理员。 + for probe in ("/logs", "/logs/tail", "/users", "/backups", "/api/backups"): r = page2.goto(a.base + probe, wait_until="domcontentloaded") code = r.status if r else 0 ok = code in (403, 401) diff --git a/tools/smoke.py b/tools/smoke.py index 515d864..d781edb 100644 --- a/tools/smoke.py +++ b/tools/smoke.py @@ -97,6 +97,11 @@ def run() -> None: from workbuddy_portal import captcha, config, create_app, crypto, db, query, security print("== 0. 构建应用 ==") + # 先把真实库迁到与代码同版本。init_db 是幂等的,顺带把迁移路径也验一遍。 + # 少了这一步,「库还停在旧 schema」会被 current_user() 判成「未登录」, + # 现场表现是下面所有页面断言集体变 302 —— 看起来像产品坏了, + # 其实只是前置条件没满足。 + db.init_db() app = create_app(start_scheduler=False, do_init_db=False) app.config["WTF_CSRF_ENABLED"] = False n_routes = len([r for r in app.url_map.iter_rules()]) @@ -105,6 +110,9 @@ def run() -> None: # 真实库里的账号:管理员必须有,普通账号按需临时造 conn = db.connect() + uv = conn.execute("PRAGMA user_version").fetchone()[0] + chk("库 schema 已与代码同版本", uv == db.DB_SCHEMA_VERSION, + "uv=%d 期望=%d" % (uv, db.DB_SCHEMA_VERSION)) admin_row = conn.execute("SELECT id FROM users WHERE is_admin=1 AND status='active'" " ORDER BY id LIMIT 1").fetchone() if admin_row is None: @@ -673,6 +681,99 @@ def run() -> None: missing = sorted(c for c in used - css_classes - allow) chk("无「用了但 CSS 里不存在」的类名", not missing, "缺失=%s" % missing if missing else "") + # ---------------- 8. 备份 ---------------- + # 这一节盯三件事: + # ① `safe_name` 是下载/恢复接口**唯一**吃文件名的收口点。漏检就是任意文件 + # 读取 —— `../../data/instance.json` 能直接把主密钥拿走; + # ② 归档里必须同时有 manifest / 主库 / instance.json。少了 instance.json, + # settings 里的凭证密文就永远解不开了(cookie_key 在里面); + # ③ 备份是管理员专属能力,普通账号连列表都不能看。 + # 「破坏 → 恢复 → 比对」的往返**不在这里做**:它要整库替换,不适合对真实库 + # 执行,由隔离环境里的专项验证覆盖(见 docs/DEPLOYMENT.md 8.3)。 + print("== 8. 备份:路径收口 / 归档完整 / 越权面 ==") + import shutil as _sh + import tempfile as _tf + import zipfile as _zf + from workbuddy_portal import backup + + for bad in ("../../etc/passwd", "x.txt", "", "..", "a b.zip", "a.zip/../../x.zip"): + try: + got = backup.safe_name(bad) + # `a.zip/../../x.zip` 这类会被 basename 收敛成合法的 `x.zip`。 + # 收敛不算漏检,但结果里**必须**不含任何路径成分。 + bad_ok = bool(got) and got == os.path.basename(got) \ + and "/" not in got and "\\" not in got and ".." not in got + except backup.BackupError: + bad_ok = True + chk("⑧ safe_name 收口 %r" % bad, bad_ok) + + real_dir = config.BACKUP_DIR + tmp_bk = _tf.mkdtemp(prefix="wb-smoke-bk-") + # 第 5 节末尾把 conn 关掉了(那是它自己的收尾动作),这里重新拿一个独立的。 + bconn = db.connect() + seen_before = {r["filename"] for r in bconn.execute("SELECT filename FROM backups")} + try: + config.BACKUP_DIR = tmp_bk # 别把真实 backups/ 搅乱 + res = backup.create(bconn, "manual", "smoke", "smoke 断言") + ap = backup.path_of(res["filename"]) + chk("⑧ 备份生成成功", bool(res["ok"]) and os.path.exists(ap), res["message"]) + with _zf.ZipFile(ap) as z: + names = set(z.namelist()) + chk("⑧ 归档含 manifest.json", backup.MANIFEST in names) + chk("⑧ 归档含主库快照", os.path.basename(config.SQLITE_PATH) in names) + chk("⑧ 归档含 instance.json(否则 cookie_key 丢失)", + backup.INSTANCE_NAME in names) + + v = backup.verify(ap) + chk("⑧ verify 通过", v["integrity"] == "ok", + "uv=%s 条数=%s 账号=%s" % (v["schema_ver"], v["records"], v["users"])) + chk("⑧ verify 报的条数与库一致", + v["records"] == bconn.execute("SELECT COUNT(*) FROM usage_records").fetchone()[0], + "records=%s" % v["records"]) + + backup.create(bconn, "manual", "smoke", "第二份") + backup.sync_index(bconn) + backup.prune(bconn, keep=1, actor="smoke") + left = [f for f in os.listdir(tmp_bk) if f.endswith(backup.SUFFIX)] + chk("⑧ prune keep=1 后只剩 1 份", len(left) == 1, "剩=%d" % len(left)) + + tmp_user = "smoke_b_%s" % _rand() + bconn.execute("INSERT INTO users(username,password_hash,display_name,is_admin," + "status,created_at) VALUES(?,?,'备份越权探针',0,'active',?)", + (tmp_user, security.hash_password("Smoke-Pass1"), db.now_str())) + bid = bconn.execute("SELECT id FROM users WHERE username=?", (tmp_user,)).fetchone()["id"] + try: + with app.test_client() as cb: + login(cb, bid) + for p in ("/backups", "/api/backups"): + st, _ = page(cb, p) + chk("⑧ 普通账号 GET %s 被拒" % p, st in (403, 401), "status=%s" % st) + # 导出是 zip,不能走 page()(它按文本解码,会炸在二进制上) + er = cb.get("/profile/export") + body = er.get_data() + try: + with _zf.ZipFile(io.BytesIO(body)) as z: + zn = z.namelist() + except Exception: # noqa: BLE001 + zn = [] + chk("⑧ 普通账号可导出本人数据(zip)", + er.status_code == 200 and len(zn) >= 4, + "状态=%s 条目=%s" % (er.status_code, zn)) + chk("⑧ 导出包里没有 cookie 明文", + not any("cookie" in n.lower() for n in zn)) + finally: + bconn.execute("DELETE FROM users WHERE id=?", (bid,)) + finally: + config.BACKUP_DIR = real_dir + _sh.rmtree(tmp_bk, ignore_errors=True) + # 归档文件已经随临时目录没了,登记行留着就是脏数据(列表里会显示「已丢失」) + fresh = [r["filename"] for r in bconn.execute("SELECT filename FROM backups") + if r["filename"] not in seen_before] + for n in fresh: + bconn.execute("DELETE FROM backups WHERE filename=?", (n,)) + bconn.commit() + bconn.close() + def main() -> int: print("工程目录:%s\n" % BASE) diff --git a/workbuddy_portal/__init__.py b/workbuddy_portal/__init__.py index dce1540..86f81d4 100644 --- a/workbuddy_portal/__init__.py +++ b/workbuddy_portal/__init__.py @@ -25,7 +25,7 @@ from flask import Flask, jsonify, render_template, request from . import config, db, security -__version__ = "1.3.0" +__version__ = "1.4.0" PROJECT_NAME = config.PROJECT_NAME diff --git a/workbuddy_portal/backup.py b/workbuddy_portal/backup.py new file mode 100644 index 0000000..8bf049b --- /dev/null +++ b/workbuddy_portal/backup.py @@ -0,0 +1,637 @@ +# -*- coding: utf-8 -*- +# SPDX-License-Identifier: MIT +# Copyright (c) 2026 Wang Chuanli + +"""备份管理:一致性快照、自动周期、保留份数、下载与恢复。 + +为什么需要它 +------------ +原来只有「手工把 data/usage.sqlite 拷一份」这一条路,问题有三个: + * 直接 cp 一个 WAL 库拿到的**不是**一致快照(-wal 里可能还有没落盘的帧) + * 备份躺在数据卷里,`docker compose down -v` 会把正本与副本一起删掉 + * 恢复没有任何护栏:覆盖上去就完了,恢复错了也没有退路 + +本模块的三条设计决定 +-------------------- +1. **快照用 SQLite 在线备份 API**(`Connection.backup`),不是文件拷贝。 + 它按页复制并在复制期间持有读事务,所以采集正在写的时候拿到的也是 + 一个「某一时刻的完整库」。手工 cp 做不到这一点。 +2. **归档是一个 zip**,内含所有 `*.sqlite` + `manifest.json`(+ 可选 + `instance.json`)。好处是单文件下载、可校验、可跨机器搬到别处恢复; + 而 `instance.json` 在里面是必要的 —— 没有 cookie_key 就解不开 + settings 里的凭证密文,那样的「恢复」等于把所有人的 Cookie 弄丢。 + 代价是归档本身含密钥,所以它**永不入库、永不进镜像**(见 .gitignore / + .dockerignore 与 docs/DEPLOYMENT.md)。 +3. **恢复走 SQL 级替换,不做文件 swap**。把归档解出来建一个临时库、先迁移 + 到当前 schema,然后在**一个写事务**里整表搬过去。这样: + * 不需要停机、不需要保证没有别的连接持有文件句柄(Windows 上文件 + swap 会因句柄占用直接失败); + * 备份是老版本(user_version=2)也能恢复,迁移在临时库里先做完; + * 中途失败就是一个事务回滚,不会留下半个库。 + +恢复前的护栏:先给**当前**库自动打一份 `pre-restore` 快照。恢复错了还能回去。 + +恢复后还会做一件事:把所有账号的 `session_ver` 都 +1,于是**所有既有登录会话 +立即失效**。理由见 `restore()` 里的注释 —— 归档里的 sv 可能与旧 Cookie 恰好 +相等,那样会话会带着「一整套已被替换掉的账号与权限」继续用下去。 +""" +import hashlib +import json +import logging +import os +import shutil +import sqlite3 +import tempfile +import zipfile +from datetime import datetime, timedelta + +from . import collect, config, db + +log = logging.getLogger("wb.backup") + +SUFFIX = ".zip" +MANIFEST = "manifest.json" +INSTANCE_NAME = "instance.json" +FORMAT_VERSION = 1 + +# 恢复时整表搬运的表清单。 +# 刻意**不含 backups 自己**:它记的是「本机备份目录里有什么」, +# 属于当前实例的运行索引,拿旧库里的那份覆盖会凭空丢掉期间新增的条目 +# (而按需重建索引是幂等的,见 sync_index)。 +RESTORE_TABLES = ("users", "settings", "usage_records", + "collect_runs", "audit_log", "captchas") + + +class BackupError(Exception): + """备份/恢复的业务性失败(归档损坏、文件缺失、跨度不符等)。""" + + +# ---------------- 路径与文件名 ---------------- +def backup_dir(): + config.ensure_dirs() + return config.BACKUP_DIR + + +def safe_name(name): + """把用户传来的文件名收敛成「备份目录下的一个 zip」。 + + 必须防住 `../../etc/passwd`、绝对路径、`sub/..` 这类穿越写法 —— + 下载与恢复接口都直接吃文件名,这里是唯一的收口点。 + """ + base = os.path.basename(str(name or "").strip().replace("\\", "/")) + if not base or base in (".", "..") or not base.endswith(SUFFIX): + raise BackupError("备份文件名不合法") + if any(c not in "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ._-" + for c in base): + raise BackupError("备份文件名含非法字符") + return base + + +def path_of(name): + return os.path.join(backup_dir(), safe_name(name)) + + +def human(n): + n = float(n or 0) + for unit in ("B", "KB", "MB", "GB"): + if n < 1024 or unit == "GB": + return ("%d B" % n) if unit == "B" else ("%.1f %s" % (n, unit)) + n /= 1024.0 + + +def _app_version(): + from . import __version__ # 延迟导入,避开包初始化顺序 + return __version__ + + +# ---------------- 元数据 ---------------- +def _db_files(): + """数据目录下所有 SQLite 库(不含 -wal / -shm 侧车)。""" + out = [] + d = config.DATA_DIR + if not os.path.isdir(d): + return out + for fn in sorted(os.listdir(d)): + if not fn.endswith(".sqlite"): + continue + p = os.path.join(d, fn) + if os.path.isfile(p): + out.append(p) + return out + + +def _sha256(path): + h = hashlib.sha256() + with open(path, "rb") as f: + for chunk in iter(lambda: f.read(1 << 20), b""): + h.update(chunk) + return h.hexdigest() + + +def _snapshot(src_path, dst_path): + """用在线备份 API 生成一致快照(src 有并发写也安全)。""" + src = sqlite3.connect(src_path, timeout=8.0) + try: + dst = sqlite3.connect(dst_path) + try: + src.backup(dst) + finally: + dst.close() + finally: + src.close() + + +def _stats(): + """归档时的关键计数,用于「挑一份恢复」与事后核对。""" + p = config.SQLITE_PATH + if not os.path.exists(p): + return {"records": 0, "credits": 0.0, "users": 0, "schema_ver": 0} + conn = sqlite3.connect("file:%s?mode=ro" % p.replace("\\", "/"), uri=True) + try: + n, cr = conn.execute("SELECT COUNT(*), COALESCE(SUM(credits),0)" + " FROM usage_records").fetchone() + u = conn.execute("SELECT COUNT(*) FROM users").fetchone()[0] + uv = conn.execute("PRAGMA user_version").fetchone()[0] + return {"records": n, "credits": round(cr or 0, 2), "users": u, "schema_ver": uv} + finally: + conn.close() + + +def _extract_safely(zf, dest, names): + """只按**基名**解压到 dest —— 归档可能是别人给的,挡掉 zip slip。 + + `ZipFile.extractall` 会因为条目名里的 `..` / 绝对路径写到目录之外, + 而恢复接口正好是「吃一个外部文件」的入口,必须在这一层挡住。 + """ + for n in names: + base = os.path.basename(n.replace("\\", "/")) + if not base or base in (".", ".."): + continue + with zf.open(n) as fsrc, open(os.path.join(dest, base), "wb") as fdst: + shutil.copyfileobj(fsrc, fdst) + + +# ---------------- 生成备份 ---------------- +def create(conn, trigger="manual", actor=None, note=""): + """打一份新备份,返回结果 dict。失败抛 BackupError。""" + dbs = _db_files() + if not dbs: + raise BackupError("数据目录里没有找到任何 *.sqlite,没什么可备份的") + + stamp = datetime.now().strftime("%Y%m%d-%H%M%S") + name = "usage-%s%s" % (stamp, SUFFIX) + dest = os.path.join(backup_dir(), name) + seq = 1 + while os.path.exists(dest): # 同一秒内连打两次也不能互相覆盖 + name = "usage-%s-%d%s" % (stamp, seq, SUFFIX) + dest = os.path.join(backup_dir(), name) + seq += 1 + + st = _stats() + tmpdir = tempfile.mkdtemp(prefix="wb-backup-") + files_meta = [] + try: + for i, src in enumerate(dbs): + fn = os.path.basename(src) + # 主库用在线备份 API;其余库(当前没有,但口径要留全)同理 + snap = os.path.join(tmpdir, fn) + _snapshot(src, snap) + files_meta.append({"name": fn, "bytes": os.path.getsize(snap), + "sha256": _sha256(snap), "primary": src == config.SQLITE_PATH}) + inst = config.INSTANCE_FILE + if os.path.exists(inst): + shutil.copy2(inst, os.path.join(tmpdir, INSTANCE_NAME)) + files_meta.append({"name": INSTANCE_NAME, + "bytes": os.path.getsize(os.path.join(tmpdir, INSTANCE_NAME)), + "sha256": _sha256(os.path.join(tmpdir, INSTANCE_NAME)), + "secret": True}) + manifest = { + "format": FORMAT_VERSION, + "app": config.PROJECT_NAME, + "version": _app_version(), + "created_at": db.now_str(), + "trigger": trigger, + "actor": actor or "", + "note": note or "", + "stats": st, + "files": files_meta, + "restore_note": ("恢复会整表替换 usage_records / settings / users 等;" + "恢复前系统会自动先备份当前库。"), + } + with zipfile.ZipFile(dest, "w", zipfile.ZIP_DEFLATED) as z: + z.writestr(MANIFEST, json.dumps(manifest, ensure_ascii=False, indent=2)) + for fn in [f["name"] for f in files_meta]: + z.write(os.path.join(tmpdir, fn), fn) + except Exception: + try: + os.remove(dest) # 半成品不留,否则「列表里有一份打不开的备份」 + except OSError: + pass + raise + finally: + shutil.rmtree(tmpdir, ignore_errors=True) + + size = os.path.getsize(dest) + digest = _sha256(dest) + db.audit(conn, "backup_create", actor or "system", + "生成备份 %s(%s,%d 条 / %.2f 积分)" % (name, human(size), st["records"], st["credits"]), + "127.0.0.1", 0) + return {"ok": True, "filename": name, "bytes": size, "sha256": digest, + "trigger": trigger, "stats": st, + "message": "已生成备份 %s(%s,%d 条记录)" % (name, human(size), st["records"])} + + +# ---------------- 索引(表 <- 磁盘) ---------------- +def _row_exists(conn, filename): + return conn.execute("SELECT 1 FROM backups WHERE filename=?", (filename,)).fetchone() is not None + + +def sync_index(conn): + """把磁盘上的归档登记进 backups 表,并把消失的标记 missing=1。 + + 手工拷进来 / 手工删掉的备份都能因此被正确呈现 —— 索引只是缓存, + **磁盘才是事实来源**,所以这里做双向对齐而不是只信表。 + """ + files = [f for f in os.listdir(backup_dir()) if f.endswith(SUFFIX)] + for fn in files: + if _row_exists(conn, fn): + continue + p = os.path.join(backup_dir(), fn) + meta = {"records": 0, "credits": 0.0, "users": 0, "schema_ver": 0} + created = "" + # 归档的 manifest 里记着它的真实来源(cli / manual / auto / pre-restore)。 + # 直接用它的,不要一律标成 external —— 恢复前最需要判断的恰恰是 + # 「这份是自动备份、还是我手工留的、还是恢复前系统自动存的那一份」。 + trig = "external" + actor = None + note = "从磁盘发现" + try: + info = read_manifest(p) + meta = dict(meta, **info.get("stats", {})) + created = info.get("created_at") or "" + trig = (info.get("trigger") or "").strip() or "external" + actor = (info.get("actor") or "").strip() or None + note = (info.get("note") or "").strip() or note + except BackupError: + pass + if not created: + # 读不出 manifest 就用文件时间,至少让排序有意义 + try: + created = datetime.fromtimestamp(os.path.getmtime(p)).strftime("%Y-%m-%d %H:%M:%S") + except OSError: + created = db.now_str() + conn.execute( + "INSERT OR IGNORE INTO backups(filename,bytes,sha256,created_at,trigger,actor," + " schema_ver,records,credits,users,note,missing)" + " VALUES(?,?,?,?,?,?,?,?,?,?,?,0)", + (fn, os.path.getsize(p), "", created, trig, actor, + meta.get("schema_ver", 0), meta.get("records", 0), + meta.get("credits", 0.0), meta.get("users", 0), note)) + # 磁盘上没了 -> 标记,不删行:保留「这里曾经有过一份」的记录更利于追责 + for r in conn.execute("SELECT id,filename,missing FROM backups").fetchall(): + gone = not os.path.exists(os.path.join(backup_dir(), r["filename"])) + want = 1 if gone else 0 + if r["missing"] != want: + conn.execute("UPDATE backups SET missing=? WHERE id=?", (want, r["id"])) + return len(files) + + +def listing(conn): + """备份清单(新→旧),附磁盘实际大小。""" + out = [] + for r in conn.execute("SELECT * FROM backups ORDER BY created_at DESC, id DESC"): + p = os.path.join(backup_dir(), r["filename"]) + exists = os.path.exists(p) + d = dict(r) + d["exists"] = exists + if exists: + d["bytes"] = os.path.getsize(p) + d["size_h"] = human(d["bytes"]) + out.append(d) + return out + + +def total_bytes(conn): + return conn.execute("SELECT COALESCE(SUM(bytes),0) FROM backups WHERE missing=0").fetchone()[0] + + +# ---------------- 校验 ---------------- +def _name_map(zf): + """归档条目名 -> 真实条目名(按基名索引,容忍归档里带目录前缀)。""" + m = {} + for n in zf.namelist(): + b = os.path.basename(n.replace("\\", "/")) + if b: + m[b] = n + return m + + +def read_manifest(path): + try: + with zipfile.ZipFile(path) as z: + entry = _name_map(z).get(MANIFEST) + if entry is None: + raise BackupError("归档里没有 %s,不是本程序生成的备份" % MANIFEST) + return json.loads(z.read(entry).decode("utf-8")) + except (zipfile.BadZipFile, KeyError, ValueError, OSError) as e: + raise BackupError("归档无法解析(%s):%s" % (os.path.basename(path), e)) + + +def verify(path): + """校验一份归档是否可用于恢复(不修改任何东西)。""" + if not os.path.exists(path): + raise BackupError("备份文件不存在或已被删除") + man = read_manifest(path) + if int(man.get("format") or 0) > FORMAT_VERSION: + raise BackupError("归档格式版本 %s 高于本程序支持的 %s,请先升级程序" + % (man.get("format"), FORMAT_VERSION)) + files = man.get("files") or [] + primary = [f for f in files if f.get("primary")] or (files[:1] if files else []) + if not primary: + raise BackupError("归档里没有数据库文件") + + tmpdir = tempfile.mkdtemp(prefix="wb-verify-") + try: + with zipfile.ZipFile(path) as z: + nm = _name_map(z) + for f in files: + fn = os.path.basename(str(f.get("name") or "")) + if not fn: + raise BackupError("归档条目名不合法:%s" % f.get("name")) + if fn not in nm: + raise BackupError("归档缺少文件:%s" % f.get("name")) + _extract_safely(z, tmpdir, [nm[fn]]) + db_path = os.path.join(tmpdir, os.path.basename(primary[0]["name"])) + if not os.path.exists(db_path): + raise BackupError("归档里的主数据库文件解不出来") + conn = sqlite3.connect("file:%s?mode=ro" % db_path.replace("\\", "/"), uri=True) + try: + integ = conn.execute("PRAGMA integrity_check").fetchone()[0] + uv = conn.execute("PRAGMA user_version").fetchone()[0] + n, cr = conn.execute("SELECT COUNT(*), COALESCE(SUM(credits),0)" + " FROM usage_records").fetchone() + users = conn.execute("SELECT COUNT(*) FROM users").fetchone()[0] + finally: + conn.close() + except sqlite3.Error as e: + raise BackupError("归档里的数据库打不开:%s" % e) + finally: + shutil.rmtree(tmpdir, ignore_errors=True) + + if integ != "ok": + raise BackupError("归档里的数据库完整性检查未通过:%s" % integ) + if uv > db.DB_SCHEMA_VERSION: + raise BackupError("归档的库结构版本 %d 比当前程序(%d)还新,无法恢复" + % (uv, db.DB_SCHEMA_VERSION)) + return {"manifest": man, "integrity": integ, "schema_ver": uv, + "records": n, "credits": round(cr or 0, 2), "users": users, + "created_at": man.get("created_at") or "", + "version": man.get("version") or ""} + + +# ---------------- 恢复 ---------------- +def _table_cols(conn, db_name, table): + return [r["name"] for r in conn.execute("PRAGMA %s.table_info(%s)" % (db_name, table))] + + +def _copy_tables(conn, src_path): + """把 src 库里的业务表整表搬到主库,一个事务内完成。 + + 用**列名交集**而不是 `SELECT *` 对齐:老库 ALTER 出来的列顺序与新库 + 建表语句的列顺序不一定一致(ALTER 追加在末尾),`SELECT *` 会静默 + 错位 —— 那是最难查的一类数据损坏(字段整体串位,值都「合法」)。 + """ + conn.execute("ATTACH DATABASE ? AS src", (src_path,)) + try: + plan = [] + for t in RESTORE_TABLES: + dst_cols = _table_cols(conn, "main", t) + src_cols = _table_cols(conn, "src", t) + if not src_cols: + continue # 归档里没有这张表(更老的版本) + common = [c for c in dst_cols if c in src_cols] + if not common: + continue + plan.append((t, common)) + conn.execute("BEGIN IMMEDIATE") + try: + for t, cols in plan: + cl = ",".join('"%s"' % c for c in cols) + conn.execute("DELETE FROM main.%s" % t) + conn.execute("INSERT INTO main.%s(%s) SELECT %s FROM src.%s" + % (t, cl, cl, t)) + conn.execute("COMMIT") + except Exception: + conn.execute("ROLLBACK") + raise + return [t for t, _ in plan] + finally: + conn.execute("DETACH DATABASE src") + + +def _restore_instance(src_file): + """把归档里的 instance.json 覆盖回来(含 cookie_key / secret_key)。 + + 必须先留一份当前文件:直接覆盖会让「本来就正常的那把钥匙」消失, + 而以旧钥匙加密不了新数据 —— 那才是真正不可逆的一步。 + """ + dst = config.INSTANCE_FILE + if os.path.exists(dst): + bak = "%s.pre-restore-%s" % (dst, datetime.now().strftime("%Y%m%d%H%M%S")) + try: + shutil.copy2(dst, bak) + except OSError as e: + raise BackupError("备份 instance.json 失败,已中止:%s" % e) + try: + shutil.copy2(src_file, dst) + if os.name == "posix": + os.chmod(dst, 0o600) + except OSError as e: + raise BackupError("写入 instance.json 失败:%s" % e) + return True + + +def restore(conn, filename, include_instance=True, actor=None): + """从归档恢复。整表替换,恢复前自动给当前库留一份 pre-restore 快照。 + + 副作用:所有账号的 `session_ver` 会被 +1,**所有既有登录会话立即失效** + (恢复是全局性事件,旧会话描述的账号与权限可能已经被换掉了)。 + + 返回结果 dict;失败抛 BackupError。 + """ + path = path_of(filename) + info = verify(path) # 先验,验不过就不动任何东西 + + # 1) 护栏:先把**当前**库完整备份一份。恢复错了还能回到恢复之前。 + try: + safety = create(conn, trigger="pre-restore", actor=actor or "system", + note="恢复 %s 之前的自动快照" % filename) + except Exception as e: # noqa: BLE001 + raise BackupError("恢复前的安全备份失败,已中止(不会动你的数据):%s" % e) + + tmpdir = tempfile.mkdtemp(prefix="wb-restore-") + try: + with zipfile.ZipFile(path) as z: + _extract_safely(z, tmpdir, z.namelist()) + primary = [f for f in info["manifest"]["files"] if f.get("primary")] + if not primary: + primary = [info["manifest"]["files"][0]] + src_path = os.path.join(tmpdir, os.path.basename(primary[0]["name"])) + if not os.path.exists(src_path): + raise BackupError("归档里缺少主数据库文件") + + # 2) 在临时库上先迁移到当前 schema —— 备份是旧版本(uv=2/3)也能恢复, + # 而且迁移失败时正本一个字节都没动。 + tmp_conn = sqlite3.connect(src_path) + try: + tmp_conn.row_factory = sqlite3.Row + db.init_db(conn=tmp_conn, create_admin=False) + finally: + tmp_conn.close() + # 迁移过程会把临时库带进 WAL 模式,侧车文件里可能还有未合并的帧。 + # 切回 DELETE 模式让**单文件自包含** —— 后面 ATTACH 时就不依赖 -wal 了。 + tmp_conn = sqlite3.connect(src_path) + try: + tmp_conn.execute("PRAGMA wal_checkpoint(TRUNCATE)") + tmp_conn.execute("PRAGMA journal_mode=DELETE") + finally: + tmp_conn.close() + + # 3) 搬数据。持采集锁:搬的过程中不能让采集往里写。 + with collect._Lock(): + moved = _copy_tables(conn, src_path) + # 数据整表换过了 —— 让**所有**会话立即失效。 + # + # 光靠「users.session_ver 从归档里搬过来」是不够的:如果某个人是在 + # 打这份备份**之前**登录的,他那张 Cookie 里的 sv 正好等于归档里的值, + # 于是会话会「合法地」活下来 —— 而它描述的账号、角色、权限可能已经 + # 被这次恢复整个替换过了。恢复是全局性事件,一律要求重新登录。 + conn.execute("UPDATE users SET session_ver=COALESCE(session_ver,0)+1") + inst = False + if include_instance: + inst_file = os.path.join(tmpdir, INSTANCE_NAME) + if os.path.exists(inst_file): + inst = _restore_instance(inst_file) + out = _stats() + out["moved"] = moved + out["instance"] = inst + except collect.Busy as e: + raise BackupError("有采集任务正在运行,请等它结束后再恢复(%s)" % e) + except sqlite3.Error as e: + raise BackupError("恢复过程中数据库报错,已回滚:%s" % e) + finally: + shutil.rmtree(tmpdir, ignore_errors=True) + + db.audit(conn, "backup_restore", actor or "system", + "从 %s 恢复:%d 条 / %.2f 积分 / %d 个账号%s(恢复前已自动备份 %s)" + % (filename, out["records"], out["credits"], out["users"], + ",含 instance.json" if out["instance"] else "", + safety.get("filename")), + "127.0.0.1", 0) + return { + "ok": True, "filename": filename, "safety_backup": safety.get("filename"), + "moved": out["moved"], "restored_instance": out["instance"], + "stats": out, "message": + "已从 %s 恢复:%d 条记录 / %.2f 积分 / %d 个账号。" + "恢复前的库已自动备份为 %s。所有既有登录会话已失效,请重新登录。" + % (filename, out["records"], out["credits"], out["users"], + safety.get("filename")), + } + + +# ---------------- 删除 / 清理 ---------------- +def delete(conn, filename, actor=None): + """删除一份备份(文件 + 索引行)。""" + name = safe_name(filename) + p = path_of(name) + if not os.path.exists(p): + conn.execute("UPDATE backups SET missing=1 WHERE filename=?", (name,)) + raise BackupError("备份文件不存在(可能已被手工删除)") + os.remove(p) + conn.execute("DELETE FROM backups WHERE filename=?", (name,)) + db.audit(conn, "backup_delete", actor or "system", "删除备份 %s" % name, "127.0.0.1", 0) + return {"ok": True, "filename": name, "message": "已删除备份 " + name} + + +def prune(conn, keep=None, actor=None): + """按「保留份数」清理最旧的备份。返回删除清单。""" + if keep is None: + keep = db.get_int(conn, "backup_keep", 7) + keep = max(1, min(100, int(keep or 1))) + rows = conn.execute("SELECT * FROM backups ORDER BY created_at DESC, id DESC").fetchall() + # 只按「磁盘上真实存在」的算份数:已经手工删掉的条目不该占名额 + alive = [r for r in rows if os.path.exists(os.path.join(backup_dir(), r["filename"]))] + victims = alive[keep:] + removed = [] + for r in victims: + try: + os.remove(os.path.join(backup_dir(), r["filename"])) + conn.execute("DELETE FROM backups WHERE id=?", (r["id"],)) + removed.append(r["filename"]) + except OSError as e: + log.warning("清理旧备份 %s 失败:%s", r["filename"], e) + if removed: + db.audit(conn, "backup_prune", actor or "system", + "按保留 %d 份清理旧备份:%s" % (keep, ", ".join(removed)), + "127.0.0.1", 0) + return removed + + +# ---------------- 自动备份 ---------------- +def last_auto_at(conn): + r = conn.execute("SELECT MAX(created_at) FROM backups WHERE trigger IN ('auto','startup')" + ).fetchone() + return (r[0] if r and r[0] else "") + + +def due(conn, now=None): + """自动备份是否到期。返回 (是否到期, 距离上次的小时数, 周期小时数)。""" + if not db.get_bool(conn, "backup_enabled", True): + return False, 0.0, 0 + every = max(1, min(720, db.get_int(conn, "backup_interval_hours", 24))) + last = last_auto_at(conn) + now = now or datetime.now() + if not last: + return True, -1.0, every + try: + dt = datetime.strptime(last, "%Y-%m-%d %H:%M:%S") + except ValueError: + return True, -1.0, every + hrs = (now - dt).total_seconds() / 3600.0 + return hrs >= every, hrs, every + + +def maybe_auto(conn, now=None): + """调度器每轮调用:到期就打一份 + 按份数清理。返回结果或 None。""" + ok, hrs, every = due(conn, now) + if not ok: + return None + try: + r = create(conn, trigger="auto", actor="system", + note="自动备份(周期 %d 小时)" % every) + except Exception as e: # noqa: BLE001 + log.error("自动备份失败:%s", e) + return None + removed = prune(conn, actor="system") + if removed: + log.info("自动备份后清理旧备份 %d 份", len(removed)) + log.info("自动备份完成:%s", r["message"]) + return r + + +def next_auto_at(conn, now=None): + """下一次自动备份时间(给界面显示)。""" + if not db.get_bool(conn, "backup_enabled", True): + return None + every = max(1, min(720, db.get_int(conn, "backup_interval_hours", 24))) + last = last_auto_at(conn) + now = now or datetime.now() + if not last: + return now + try: + dt = datetime.strptime(last, "%Y-%m-%d %H:%M:%S") + except ValueError: + return now + nxt = dt + timedelta(hours=every) + return nxt if nxt > now else now + diff --git a/workbuddy_portal/captcha.py b/workbuddy_portal/captcha.py index 0e65ee8..0b472b2 100644 --- a/workbuddy_portal/captcha.py +++ b/workbuddy_portal/captcha.py @@ -18,11 +18,20 @@ 字模 ---- -5×7 点阵,`#` 为前景。渲染时按整数倍放大并逐字符抖动, -再叠噪点与干扰线,普通 OCR 与「按色块切分」都会被破坏。 +5×7 点阵,`#` 为前景。渲染时**逐字符**随机放大、旋转、切变、加波浪偏移, +笔画用粗刷子画(旋转后不会出现断点),再叠背景纹理、噪点与压线干扰。 + +强度说明(为什么要这么多花样) +------------------------------ +字模是固定的,而且就在这份源码里 —— 也就是说攻击者**知道**每个字符长什么样。 +在这种情况下,提高自动识别成本的唯一手段就是让「同一字符的两次渲染」在像素上 +尽量不同:角度、切变、缩放、波形相位、笔画粗细、颜色、干扰线位置全部随机。 +纯模板匹配在这种变形下会失效,必须上带形变增强的模型,成本高一个数量级。 +反过来说,也**不要**指望它能挡住有充足算力、专门针对本站训练的对手 —— +验证码是「提高成本」而不是「杜绝」。 """ import hmac -import os +import math import random import secrets import struct @@ -140,54 +149,126 @@ class _Canvas: return bytes(self.buf) +def _brush_line(cv, x0, y0, x1, y1, color, r): + """用 r×r 方刷画一条线。 + + 旋转后的笔画如果只用点阵格逐个平移,会出现锯齿状断点 —— 一圈一圈的 + 缝隙正好给「连通域分析」留了把手。这里改成沿线段走样并盖方刷, + 笔画连续,旋转也不散架。 + """ + steps = int(max(abs(x1 - x0), abs(y1 - y0))) + 1 + o = r // 2 + for i in range(steps + 1): + t = i / float(steps) + x = int(round(x0 + (x1 - x0) * t)) + y = int(round(y0 + (y1 - y0) * t)) + cv.rect(x - o, y - o, r, r, color) + + +def _draw_char(cv, glyph, cx, cy, scale, color, rng): + """在 (cx, cy) 为中心画一个字符:随机旋转 + 切变 + 波浪 + 粗笔画。 + + 三段变换按「点阵坐标 -> 缩放居中 -> 切变 -> 旋转 -> 波浪纵向偏移」依次施加。 + 顺序不能乱:先切变再旋转,得到的才是「斜着写的手写体」而不是「被斜切的旋转体」。 + """ + ang = rng.uniform(-0.38, 0.38) # 弧度,约 ±22° + cos_a, sin_a = math.cos(ang), math.sin(ang) + shear = rng.uniform(-0.32, 0.32) + amp = rng.uniform(0.0, 2.6) # 波浪振幅(像素) + period = rng.uniform(18.0, 42.0) + phase = rng.uniform(0.0, 6.283) + half_w = GLYPH_W * scale / 2.0 + half_h = GLYPH_H * scale / 2.0 + r = max(2, scale) + + def place(col, row): + px = (col + 0.5) * scale - half_w + py = (row + 0.5) * scale - half_h + px += shear * py + x = cx + px * cos_a - py * sin_a + y = cy + px * sin_a + py * cos_a + return x, y + amp * math.sin(x / period + phase) + + for row, bits in enumerate(glyph): + col = 0 + while col < len(bits): + if bits[col] != "#": + col += 1 + continue + start = col + while col + 1 < len(bits) and bits[col + 1] == "#": + col += 1 # 连续的一段合起来画,笔画才连得上 + x0, y0 = place(start, row) + x1, y1 = place(col, row) + _brush_line(cv, x0, y0, x1, y1, color, r) + col += 1 + + def render(code, width=150, height=56, scale=5, rng=None): """把验证码渲染成 PNG 字节串。 - 刻意不做「清晰排版」而是加抖动/噪点/干扰线:这是防机器识别的核心, - 可读性靠放大字符(scale=5 即 25×35 像素)来补偿。 + 字体大小、角度、切变、波浪、颜色、干扰线全部逐次随机 —— + 目标不是「好看」,而是让同一串字符的两次渲染在像素上尽量不同, + 从而让「预存字模 + 模板匹配」这条最便宜的攻击路线失效。 """ rng = rng or random.SystemRandom() n = len(code) - gap = 7 - text_w = n * GLYPH_W * scale + (n - 1) * gap - if text_w + 16 > width: - width = text_w + 16 - x0 = max(4, (width - text_w) // 2) - y0 = max(3, (height - GLYPH_H * scale) // 2) + gap = 9 + # 宽度按最大可能字号算,且左右各留够旋转半径 —— + # 旋转后的字符会往两侧探出约半个字高,留窄了最外侧那个字会被裁掉一截, + # 而「被裁掉一角的字符」会直接变成一次没道理的输错(体验问题,不是安全问题)。 + text_w = n * GLYPH_W * (scale + 1) + (n - 1) * gap + need_w = text_w + int(GLYPH_H * (scale + 1) * 0.9) + 8 + if need_w > width: + width = need_w + # 高度同理:旋转后的字符比原始点阵高不少,切了顶就等于少一个笔画特征 + need_h = int(GLYPH_H * (scale + 1) * 1.7) + 8 + if need_h > height: + height = need_h + x0 = max(5, (width - text_w) // 2) + y0 = height // 2 - # 背景取浅色,前景取深色 —— 深色底+浅字在缩略图上更容易糊, - # 而且打印/截图后对比度更差。 - bg = tuple(rng.randint(238, 252) for _ in range(3)) - cv = _Canvas(width, height, bg) + # 背景不做纯色:纯色底可以用一个阈值把前景整片切出来。 + # 用「两色之间做斜向渐变」能让全局二值化的效果明显变差。 + c1 = tuple(rng.randint(236, 252) for _ in range(3)) + c2 = tuple(rng.randint(214, 240) for _ in range(3)) + slant = rng.uniform(-1.0, 1.0) + cv = _Canvas(width, height, c1) + for y in range(height): + for x in range(width): + t = (x / float(width - 1 or 1)) * 0.6 + (y / float(height - 1 or 1)) * 0.4 + t = min(1.0, max(0.0, t + slant * 0.15)) + cv.dot(x, y, tuple(int(c1[i] + (c2[i] - c1[i]) * t) for i in range(3))) - # 1) 干扰线(先画,压在字下面,不遮挡主体) - for _ in range(4): + # 1) 底层干扰线(先画,压在字下面) + for _ in range(3): cv.line(rng.randint(0, width - 1), rng.randint(0, height - 1), rng.randint(0, width - 1), rng.randint(0, height - 1), - tuple(rng.randint(150, 205) for _ in range(3))) + tuple(rng.randint(170, 215) for _ in range(3))) - # 2) 字符本体:逐字符随机取色 + 整数抖动,破坏固定网格切分 + # 2) 字符本体 + step = GLYPH_W * (scale + 1) + gap for i, ch in enumerate(code): glyph = _FONT.get(ch) if glyph is None: continue - color = tuple(rng.randint(20, 105) for _ in range(3)) - gx = x0 + i * (GLYPH_W * scale + gap) + rng.randint(-1, 1) - gy = y0 + rng.randint(-2, 2) - for row, bits in enumerate(glyph): - for col, bit in enumerate(bits): - if bit == "#": - cv.rect(gx + col * scale, gy + row * scale, scale, scale, color) + # 逐字符字号抖动:字符宽度不再一致,按列投影切分就失效了 + s = max(3, scale + rng.choice((-1, 0, 0, 1))) + cx = x0 + i * step + GLYPH_W * (scale + 1) / 2.0 + rng.uniform(-3.0, 3.0) + cy = y0 + rng.uniform(-3.0, 3.0) + color = tuple(rng.randint(15, 95) for _ in range(3)) + _draw_char(cv, glyph, cx, cy, s, color, rng) - # 3) 前景噪点:少量深色点会让「按连通域找字符」变得不可靠 - for _ in range(46): + # 3) 前景噪点:破坏「按连通域找字符」的假设 + for _ in range(70): cv.dot(rng.randint(0, width - 1), rng.randint(0, height - 1), - tuple(rng.randint(90, 190) for _ in range(3))) + tuple(rng.randint(90, 195) for _ in range(3))) - # 4) 压在字上的细斜线:这是最有效的反 OCR 手段,但别太密,否则人也认不出 - for _ in range(3): + # 4) 压在字上的干扰线:最有效的反 OCR 手段,但太密人也认不出, + # 所以刻意控制成 2~3 条细线。 + for _ in range(rng.randint(2, 3)): y = rng.randint(2, height - 3) - cv.line(0, y, width - 1, y + rng.randint(-9, 9), + cv.line(0, y, width - 1, y + rng.randint(-11, 11), tuple(rng.randint(120, 175) for _ in range(3))) return encode_png(width, height, cv.bytes()) diff --git a/workbuddy_portal/collect.py b/workbuddy_portal/collect.py index ebc2ae9..cb6afc2 100644 --- a/workbuddy_portal/collect.py +++ b/workbuddy_portal/collect.py @@ -205,6 +205,22 @@ def record_count(conn, uid): (uid or 0,)).fetchone()[0] +def max_range_days(conn): + """单次采集允许的最长跨度(天)。 + + 配置值是给管理员的旋钮,**代码层的硬顶**才是兜底:历史脏数据、直接改库、 + 或者某次误配置都不该让一次请求变成几千次云端调用。 + 接口校验、页面提示、sync() 里的实际收窄都读这一个函数,避免三处口径漂移。 + """ + n = db.get_int(conn, "collect_max_range_days", config.COLLECT_MAX_RANGE_DAYS_HARD) + return max(1, min(config.COLLECT_MAX_RANGE_DAYS_HARD, n)) + + +def min_interval_seconds(conn): + """同一账号两次手动采集之间的最小间隔(秒)。""" + return max(0, min(3600, db.get_int(conn, "collect_min_interval_seconds", 60))) + + def last_ts(conn, uid): return conn.execute("SELECT MAX(ts) FROM usage_records WHERE user_id=?", (uid or 0,)).fetchone()[0] @@ -285,6 +301,18 @@ def sync(conn, uid, trigger="manual", from_dt=None, to_dt=None, verify_days=None end = to_dt or now if start >= end: start = end - timedelta(minutes=rewind) + # 跨度上限(**代码层兜底**,不只是接口校验)。 + # 采集一次 = 对云端发 ceil(条数/page_size) 次请求,跨度越长请求越多。 + # 不设顶时,一个注册账号用 from=2000-01-01 就能让服务端替它打几千次云端, + # 同时独占全局采集锁与一个 waitress 线程 —— 最省力的资源耗尽方式。 + # 这里对「显式跨度」和「断点很旧导致的实际跨度」一视同仁地收窄。 + max_days = max_range_days(conn) + if end - start > timedelta(days=max_days): + original = start + start = end - timedelta(days=max_days) + _log("[warn] 请求跨度超过上限 %d 天,已自动收窄起点:%s -> %s" + % (max_days, original.strftime("%Y-%m-%d %H:%M:%S"), + start.strftime("%Y-%m-%d %H:%M:%S"))) _log("同步区间:%s ~ %s" % (start.strftime("%Y-%m-%d %H:%M:%S"), end.strftime("%Y-%m-%d %H:%M:%S"))) diff --git a/workbuddy_portal/config.py b/workbuddy_portal/config.py index 93f5a21..15b3c2b 100644 --- a/workbuddy_portal/config.py +++ b/workbuddy_portal/config.py @@ -28,6 +28,13 @@ EXPORT_DIR = os.path.join(DATA_DIR, "exports") APP_LOG = os.path.join(LOG_DIR, "app.log") INSTANCE_FILE = os.path.join(DATA_DIR, "instance.json") +# 备份落点。**刻意与 DATA_DIR 分开**: +# * 容器里 DATA_DIR 挂的是数据卷,`docker compose down -v` 会连卷一起删; +# 备份若躺在同一个卷里,就等于「正本与副本同时消失」—— 备份的意义没了。 +# * 备份里含 settings 的凭证密文与 users 的口令散列,必须能单独控制权限、 +# 单独挂卷、单独排除出镜像(见 .dockerignore 的 backups/)。 +BACKUP_DIR = os.environ.get("WB_BACKUP_DIR") or os.path.join(BASE_DIR, "backups") + # 旧版脚本项目的存档(迁移用;--migrate-csv 默认读这里)。 # v1.3.0 起旧版被收进工作区级的 legacy-v1/ 目录,所以第一个候选是新位置, # 后面两个保留以兼容「还没挪走」的部署。 @@ -58,6 +65,13 @@ DEFAULTS = { "schedule_times": "09:00,17:00", # 每天固定时刻(逗号分隔,本地时区) "catch_up": "1", # 启动时补跑当天已错过且未执行的槽位 "catch_up_grace_hours": "12", # 超过该小时数就不再补跑 + "max_schedule_slots_per_day": "6", # 每天最多几个时刻(挡住「填 200 个时刻」) + "collect_min_interval_seconds": "60", # 同一账号两次手动采集的最小间隔 + "collect_max_range_days": "31", # 单次采集的最长跨度(硬顶 31 天 = 1 个月) + # ---- 实例级:自动备份 ---- + "backup_enabled": "1", # 是否开启自动备份 + "backup_interval_hours": "24", # 备份周期(小时) + "backup_keep": "7", # 保留最近几份,超出的自动删除最旧的 # ---- 实例级:采集参数 ---- "page_size": "200", "rewind_minutes": "2", # 断点回退分钟数 @@ -91,6 +105,12 @@ GLOBAL_KEYS = { "allow_register", "register_max_per_ip", "captcha_policy", "captcha_length", # 采集调度(v1.3.0 起为实例级:普通用户只读,不能设置频率) "schedule_enabled", "schedule_times", "catch_up", "catch_up_grace_hours", + "max_schedule_slots_per_day", + # 任务频率与采集跨度(v1.4.0 起:对外提供服务时必须能限流, + # 否则一个注册账号就能拿 /api/collect 把云端与线程池打满) + "collect_min_interval_seconds", "collect_max_range_days", + # 自动备份(谁掌握备份谁就掌握全库数据,所以归管理员) + "backup_enabled", "backup_interval_hours", "backup_keep", # 采集参数(同理:允许普通用户调 page_size/关 ssl_verify 都是越权) "page_size", "rewind_minutes", "drift_tolerance_minutes", "max_prompt", "verify_days", "timeout", "ssl_verify", @@ -155,18 +175,33 @@ NUM_SETTINGS = { "catch_up_grace_hours": (1, 168, "小时"), "captcha_length": (4, 6, "个字符"), "register_max_per_ip": (1, 50, "个/天"), + "max_schedule_slots_per_day": (1, 12, "个/天"), + "collect_min_interval_seconds": (0, 3600, "秒"), + "collect_max_range_days": (1, 31, "天"), + "backup_interval_hours": (1, 720, "小时"), + "backup_keep": (1, 100, "份"), } -BOOL_SETTINGS = {"schedule_enabled", "catch_up", "allow_register"} +BOOL_SETTINGS = {"schedule_enabled", "catch_up", "allow_register", "backup_enabled"} + +# 采集跨度的**硬顶**:无论 settings 里被改成什么(含历史脏数据、手工改库), +# 代码层一律按这个上限夹一次。写进配置只是给管理员一个更严的旋钮, +# 不是「改大就能突破」——上限必须由代码兜底,不能只靠校验。 +COLLECT_MAX_RANGE_DAYS_HARD = 31 +# 每日调度时刻的硬顶(同上) +SCHEDULE_SLOTS_HARD_MAX = 12 _TRUE = ("1", "true", "yes", "on", "是", "启用") -def normalize_setting(key, raw): +def normalize_setting(key, raw, conn=None): """校验并规范化单个设置值。 返回 (value, error): * value 为可直接写入 settings 表的字符串;error 非空时 value 为 None。 * 未知键(不在 DEFAULTS 里)直接拒绝,避免接口被用来写任意键。 + * `conn` 可选:个别键的上限本身是可配置的(如每日时刻数受 + `max_schedule_slots_per_day` 约束),有连接时才查得到。 + 不传时只做代码层的硬顶校验,所以离线调用不会因此失败。 """ if key not in DEFAULTS: return None, "未知配置项:%s" % key @@ -196,6 +231,19 @@ def normalize_setting(key, raw): parsed = scheduler.parse_times(raw) if not parsed: return None, "每日时刻格式不对,正确写法如 09:00,17:00" + if len(parsed) > SCHEDULE_SLOTS_HARD_MAX: + return None, "每日时刻最多 %d 个(当前填了 %d 个)" % ( + SCHEDULE_SLOTS_HARD_MAX, len(parsed)) + # 可配置的更严上限:时刻数量直接决定调度器的采集频次, + # 是「一个账号能不能把云端与线程池打满」的开关,所以要有刹车。 + if conn is not None: + from . import db as _db + cap = _db.get_int(conn, "max_schedule_slots_per_day", 6) + cap = max(1, min(SCHEDULE_SLOTS_HARD_MAX, cap)) + if len(parsed) > cap: + return None, ("每日时刻最多 %d 个(当前填了 %d 个)。" + "如需更多,请先把「每日调度时刻上限」调大。" + % (cap, len(parsed))) return ",".join(parsed), None if key == "captcha_policy": @@ -208,8 +256,14 @@ def normalize_setting(key, raw): v = str(raw).strip() if not v: return None, "%s 不能为空" % key - if key == "api_base" and not v.startswith(("http://", "https://")): - return None, "接口基址需以 http:// 或 https:// 开头" + if key == "api_base": + if not v.startswith(("http://", "https://")): + return None, "接口基址需以 http:// 或 https:// 开头" + # 云元数据地址永远不该是「云端接口」:它是 SSRF 拿云上临时凭证 + # 最经典的一跳,而且没有任何合法的采集场景需要它。 + host = v.split("//", 1)[1].split("/", 1)[0].split(":")[0].lower() + if host in ("169.254.169.254", "metadata.google.internal", "[fd00:ec2::254]"): + return None, "接口基址不能指向云元数据地址" return v, None if key == "cookie": @@ -222,8 +276,57 @@ def normalize_setting(key, raw): DEFAULT_HOST = "0.0.0.0" # 局域网可访问 DEFAULT_PORT = 8848 SESSION_HOURS = 12 -MAX_LOGIN_FAILS = 5 # 同 IP / 同用户名连续失败次数 -LOGIN_LOCK_MINUTES = 10 +MAX_LOGIN_FAILS = 5 # 同 IP 连续失败次数(硬锁) +LOGIN_LOCK_MINUTES = 10 # 硬锁时长(仅 IP 维度) +# 用户名维度的**软退避**:对外提供服务后,「知道一个用户名就能把它锁死 10 分钟」 +# 本身就是一种攻击(拿管理员用户名当武器,别人也用不了)。所以用户名维度 +# 只产生秒级、递增、有封顶的等待,真正的重锁只按来源 IP 施加。 +USER_SOFT_THRESHOLD = 5 # 同一用户名失败超过这个次数才开始退避 +USER_SOFT_CAP_SECONDS = 60 # 退避封顶 +# 同一来源的登录尝试总量(含成功):挡住「慢慢撞、不触发失败阈值」的形态 +LOGIN_ATTEMPTS_PER_IP = 40 +LOGIN_ATTEMPTS_WINDOW = 300 # 秒 + +# ---------------- 反向代理与传输安全 ---------------- +def _env_flag(name, default="0"): + return os.environ.get(name, default).strip().lower() in ("1", "true", "yes", "on") + + +# 是否信任 X-Forwarded-For。**默认不信任**。 +# 直接暴露给公网(或前面只有一个「追加型」代理)时,XFF 的第 0 段是攻击者 +# 自己填的:一旦采信,验证码限速、注册配额、登录锁定三道 IP 防线会同时失效 +# (实测:每次换一个伪造 XFF,45 次验证码请求全部放行)。 +# 只有在**你自己的**反向代理会重写该头(nginx: `$remote_addr`)时才置 1。 +TRUST_PROXY = _env_flag("WB_TRUST_PROXY") +# 强制跳转 HTTPS(配合反代时用;读到 X-Forwarded-Proto: https 就不跳) +FORCE_HTTPS = _env_flag("WB_FORCE_HTTPS") +# 会话 Cookie 是否只走 HTTPS。纯局域网 HTTP 部署必须留 0,否则浏览器不发送, +# 表现为「登录成功但立刻又跳回登录页」,极难排查。 +COOKIE_SECURE = _env_flag("WB_COOKIE_SECURE") + +# 访问日志:waitress 自己不记 access log,上线后没有访问日志等于出事无据可查。 +# 只记非静态资源请求,写进 logs/app.log(滚动 2MB × 3)。 +ACCESS_LOG = _env_flag("WB_ACCESS_LOG", "1") + +# waitress 线程数。与容器 CPU 上限配套:线程越多,单实例能同时吃进的 +# 慢请求(如采集、导出)就越多 —— 对外提供服务时这是资源上限的一部分。 +THREADS = int(os.environ.get("WB_THREADS") or 8) + +# 首个管理员的初始口令。**不给默认值**:留空时 db.init_db 会生成一个随机口令 +# 并只在启动日志里打印一次 —— 硬编码一个 admin123 等于把公网实例的钥匙挂在门上。 +ADMIN_USER = os.environ.get("WB_ADMIN_USER") or "admin" +ADMIN_PASSWORD = os.environ.get("WB_ADMIN_PASSWORD") or "" + +# 口令黑名单:这些是自动撞库字典的头几页,命中即拒。 +# 只在「设置/修改口令」时校验(登录不校验),所以不会把用老口令的人挡在门外。 +WEAK_PASSWORDS = { + "12345678", "123456789", "1234567890", "password", "password1", "password123", + "passw0rd", "qwertyui", "qwerty123", "abc12345", "abcd1234", "admin123", + "admin888", "admin1234", "administrator", "root1234", "letmein1", "welcome1", + "iloveyou", "monkey123", "dragon123", "sunshine", "princess", "football", + "baseball", "11111111", "00000000", "88888888", "66666666", "asdasd123", + "1qaz2wsx", "zxcvbnm1", "a1234567", "workbuddy", "codebuddy", +} # ---------------- 账号与口令策略 ---------------- USERNAME_RE = r"^[A-Za-z0-9][A-Za-z0-9_.\-]{2,31}$" # 3~32 位,字母开头 @@ -233,13 +336,13 @@ PASSWORD_MAX = 128 # 采集只使用**本人**的 Cookie,绝不复用别人的(否则会串号)。 PROFILE_EMAIL_MAX = 128 -# 会话 Cookie 是否只走 HTTPS。纯局域网 HTTP 部署必须留 0,否则浏览器不发送, -# 表现为「登录成功但立刻又跳回登录页」,极难排查。 -COOKIE_SECURE = os.environ.get("WB_COOKIE_SECURE", "0").strip() in ("1", "true", "yes", "on") +# 会话 Cookie 的 Secure 开关在文件上方的「反向代理与传输安全」段, +# 与 TRUST_PROXY / FORCE_HTTPS 放在一起 —— 这三个必须一起决定, +# 拆开写很容易出现「开了强制 HTTPS 却忘了 Secure」这类半截配置。 def ensure_dirs(): - for d in (DATA_DIR, LOG_DIR, EXPORT_DIR): + for d in (DATA_DIR, LOG_DIR, EXPORT_DIR, BACKUP_DIR): os.makedirs(d, exist_ok=True) @@ -265,6 +368,11 @@ def _instance_init(key, maker): try: with open(INSTANCE_FILE, "w", encoding="utf-8") as f: json.dump(data, f, ensure_ascii=False, indent=2) + # 这个文件里躺着 SECRET_KEY 与 cookie_key,权限等同管理员口令。 + # 默认 umask 022 会留下 0644(同机其他用户可读),所以在 POSIX 上 + # 显式收紧到 0600。Windows 没有这个概念,忽略即可。 + if os.name == "posix": + os.chmod(INSTANCE_FILE, 0o600) except OSError: pass # 只读文件系统时退化为「本次进程内有效」 return val diff --git a/workbuddy_portal/db.py b/workbuddy_portal/db.py index 95dd2c0..763eea4 100644 --- a/workbuddy_portal/db.py +++ b/workbuddy_portal/db.py @@ -26,13 +26,17 @@ * `slot:*` 调度簿记键是**个人级**(每个账号各自记「今天这个槽位跑过没」), 虽然时刻本身是实例级的 —— 这两个千万别一起改。 """ +import logging import os +import secrets import sqlite3 import threading from datetime import datetime from . import config, crypto +log = logging.getLogger("wb.db") + _local = threading.local() _init_lock = threading.Lock() _initialized = False @@ -41,11 +45,22 @@ _initialized = False # 1 -> 单用户布局(settings 以 key 为主键,usage_records 以 request_id 为主键) # 2 -> 多用户布局(见 schema.sql 顶部说明) # 3 -> 调度与采集参数从个人级提升为实例级(普通用户只读;见 config.GLOBAL_KEYS) -DB_SCHEMA_VERSION = 3 +# 4 -> users.session_ver(改密/重置/停用后旧会话立即失效)+ backups 备份索引表 +DB_SCHEMA_VERSION = 4 # 这些键即使个人作用域没有值,也**不**回落到实例级 NO_FALLBACK_KEYS = {"cookie", "user_agent"} +# 首次初始化时若没有提供管理员口令,生成的随机口令只留在这里, +# **绝不写进数据库或审计**(审计里出现口令等于把它永久留档)。 +# `manage.py init` / entrypoint 负责把它打印到启动日志。 +_generated_admin_password = None + + +def generated_admin_password(): + """本次进程启动时生成的管理员口令(没有生成过则为 None)。""" + return _generated_admin_password + class SecretUnreadable(Exception): """密文解不开 —— 通常是 data/instance.json 里的 cookie_key 被换过。""" @@ -167,7 +182,8 @@ def _migrate(conn): for col, ddl in (("email", "TEXT"), ("status", "TEXT NOT NULL DEFAULT 'active'"), ("register_ip", "TEXT"), - ("last_login_ip", "TEXT")): + ("last_login_ip", "TEXT"), + ("session_ver", "INTEGER NOT NULL DEFAULT 0")): if col not in tusers: conn.execute("ALTER TABLE users ADD COLUMN %s %s" % (col, ddl)) done.append("users 增加 %s" % col) @@ -264,6 +280,38 @@ def _promote_personal_to_global(conn): return promoted, cleaned +def _create_first_admin(conn, admin_user, admin_password, ts): + """建库后的第一个管理员。 + + 口令优先级:显式参数 -> 环境变量 `WB_ADMIN_PASSWORD` -> **随机生成**。 + 这里刻意**不再兜底 `admin123`**:对外提供服务时,一个硬编码的默认口令 + 等于「所有按默认配置部署的实例共用同一把钥匙」,而扫描器恰好就在扫它。 + 生成的口令只在启动日志里打印一次,并被提示立即修改。 + """ + global _generated_admin_password + from .security import hash_password + pwd = (admin_password or config.ADMIN_PASSWORD or "").strip() + generated = False + if not pwd: + pwd = secrets.token_urlsafe(12) + generated = True + conn.execute( + "INSERT INTO users(username,password_hash,display_name,is_admin,status," + " created_at) VALUES(?,?,?,1,'active',?)", + (admin_user, hash_password(pwd), "管理员", ts)) + if generated: + _generated_admin_password = pwd + # 只进日志,**不进数据库**:审计表里出现口令等于把它永久留档。 + log.warning("=" * 68) + log.warning("首次初始化:已为管理员 %s 生成随机口令 —— 请立即抄走并登录修改", admin_user) + log.warning(" 用户名:%s", admin_user) + log.warning(" 口 令:%s", pwd) + log.warning(" 该口令只在这里显示一次,不会写入数据库、日志文件之外的任何地方。") + log.warning(" 下次启动不会再显示(账号已存在)。忘了就用 manage.py passwd 重置。") + log.warning("=" * 68) + return generated + + def init_db(conn=None, create_admin=True, admin_user="admin", admin_password=None): """建表 / 迁移 / 灌默认配置。可重复执行(幂等)。返回迁移说明列表。""" global _initialized @@ -316,12 +364,7 @@ def init_db(conn=None, create_admin=True, admin_user="admin", admin_password=Non if create_admin: n = conn.execute("SELECT COUNT(*) FROM users").fetchone()[0] if n == 0: - from .security import hash_password - pwd = admin_password or "admin123" - conn.execute( - "INSERT INTO users(username,password_hash,display_name,is_admin,status," - " created_at) VALUES(?,?,?,1,'active',?)", - (admin_user, hash_password(pwd), "管理员", ts)) + _create_first_admin(conn, admin_user, admin_password, ts) _initialized = True return migrated finally: @@ -458,6 +501,31 @@ def user_count(conn): return conn.execute("SELECT COUNT(*) FROM users").fetchone()[0] +def session_ver_of(row): + """安全读取 session_ver。 + + 取不到就返回 0 —— 迁移中途 / 老库尚未 ALTER 时不该因此抛异常, + 那会把「一次可恢复的登录失效」变成「整站 500」。 + """ + try: + if "session_ver" not in row.keys(): + return 0 + except AttributeError: # 不是 Row(dict 等) + return 0 + return int(row["session_ver"] or 0) + + +def bump_session_ver(conn, uid): + """把该账号所有既有会话立即作废(改密 / 管理员重置 / 停用 / 删除前)。 + + 会话里记着签发时的 session_ver,每个请求回查一次;不等就丢弃会话。 + 少了这一步,「我怀疑会话泄漏了所以改密码」会变成一个假的安心动作 —— + 旧会话依然有效到 12 小时之后。 + """ + conn.execute("UPDATE users SET session_ver=COALESCE(session_ver,0)+1 WHERE id=?", + (int(uid or 0),)) + + # ---------------- 审计 ---------------- def audit(conn, action, actor=None, detail=None, ip=None, uid=0): conn.execute("INSERT INTO audit_log(user_id,at,actor,action,detail,ip)" diff --git a/workbuddy_portal/scheduler.py b/workbuddy_portal/scheduler.py index 97c7efa..3994183 100644 --- a/workbuddy_portal/scheduler.py +++ b/workbuddy_portal/scheduler.py @@ -26,7 +26,7 @@ import os import threading from datetime import datetime, timedelta -from . import collect, db +from . import backup, collect, db log = logging.getLogger("wb.scheduler") SLOT_PREFIX = "slot:" # settings 键:slot:09:00 -> 最近执行的日期(按 user_id 存) @@ -176,6 +176,16 @@ class Scheduler: log.error("账号 %s 的 Cookie 解不开:%s", u["username"], e) except Exception as e: log.error("账号 %s 采集失败:%s", u["username"], e) + + # ---- 自动备份(实例级,与具体账号无关,所以放在账号循环之外)---- + # 有采集在跑就跳过,等下一轮:备份会整库读一遍,没必要和采集抢磁盘。 + try: + if os.path.exists(collect.LOCK_PATH): + log.debug("有采集在跑,本次跳过自动备份") + else: + backup.maybe_auto(conn, now) + except Exception as e: # 备份失败不能拖累调度本身 + log.exception("自动备份出错:%s", e) return True diff --git a/workbuddy_portal/schema.sql b/workbuddy_portal/schema.sql index b6690ae..a3e8ce0 100644 --- a/workbuddy_portal/schema.sql +++ b/workbuddy_portal/schema.sql @@ -85,6 +85,7 @@ CREATE TABLE IF NOT EXISTS users ( email TEXT, is_admin INTEGER NOT NULL DEFAULT 0, status TEXT NOT NULL DEFAULT 'active', -- active | disabled + session_ver INTEGER NOT NULL DEFAULT 0, -- 会话版本:改密/重置/停用 +1,旧会话立即失效 created_at TEXT, register_ip TEXT, -- 自助注册来源,用于每日限额 last_login_at TEXT, @@ -119,3 +120,25 @@ CREATE TABLE IF NOT EXISTS captchas ( ); CREATE INDEX IF NOT EXISTS idx_captcha_expires ON captchas(expires_at); + +-- ---------------- 备份索引 ---------------- +-- 表里只放「元数据」,备份文件本身在 config.BACKUP_DIR(**不在** data/ 卷里, +-- 免得 `docker compose down -v` 把正本和备份一起删掉)。 +-- 刻意不记录备份内容、也不记录任何凭证 —— 这里只是一份可下载清单。 +CREATE TABLE IF NOT EXISTS backups ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + filename TEXT NOT NULL UNIQUE, -- 备份目录内的文件名(不含路径) + bytes INTEGER NOT NULL DEFAULT 0, -- 归档大小 + sha256 TEXT NOT NULL DEFAULT '', -- 归档整体校验值(前 64 位十六进制) + created_at TEXT NOT NULL, + trigger TEXT NOT NULL DEFAULT 'manual', -- manual | auto | cli | pre-restore + actor TEXT, -- 触发者用户名(自动备份为 system) + schema_ver INTEGER NOT NULL DEFAULT 0, -- 归档时的 user_version + records INTEGER NOT NULL DEFAULT 0, -- 归档时的记录条数(便于挑一份恢复) + credits REAL NOT NULL DEFAULT 0, + users INTEGER NOT NULL DEFAULT 0, + note TEXT, -- 备注 / 恢复来源 + missing INTEGER NOT NULL DEFAULT 0 -- 1 = 文件已不在磁盘上(手工删过) +); + +CREATE INDEX IF NOT EXISTS idx_backups_at ON backups(created_at DESC); diff --git a/workbuddy_portal/security.py b/workbuddy_portal/security.py index 481db5d..2e16519 100644 --- a/workbuddy_portal/security.py +++ b/workbuddy_portal/security.py @@ -10,14 +10,26 @@ `db.get_secret(conn, "cookie", uid)`;`db.get_settings()` 会把凭证置空, 所以「顺手把配置回传给前端」这类代码不可能把它带出去。 2. **禁用/删除账号立刻失效**:`current_user()` 每个请求回查一次 - users.status,不靠会话过期来兜底(默认会话 12 小时,太久了)。 -3. **失败限速按「来源 IP」和「用户名」双维度计数**:只按 IP 挡不住 - 「一批肉鸡轮流撞同一个账号」,只按用户名又会让一个 IP 无限注册。 + users.status 与 users.session_ver,不靠会话过期来兜底。 +3. **限速按「来源 IP」和「用户名」双维度计数**,但两者的**强度刻意不同**: + IP 维度是真锁,用户名维度只是秒级退避。原因见 `user_soft_left` 的注释。 + +来源 IP 的取法(对外提供服务时最容易出错的一处) +------------------------------------------------ +`client_ip()` 是**全站唯一**的取客户端地址入口。默认只信 `remote_addr`: +反向代理若用 `$proxy_add_x_forwarded_for`(追加语义),请求头里第 0 段就是 +攻击者自己填的字符串,采信它等于把验证码限速、注册配额、登录锁定三道 +IP 防线一起交出去。只有显式设置 `WB_TRUST_PROXY=1`(且你的代理会重写该头) +时才读 X-Forwarded-For,而且**取最右侧**那一段 —— 最右边是离我们最近的 +一跳,由我们自己的代理写入,客户端伪造不了。 """ import functools import hmac +import ipaddress +import logging import re import secrets +import sqlite3 import time from flask import (current_app, flash, g, jsonify, redirect, render_template, @@ -25,10 +37,50 @@ from flask import (current_app, flash, g, jsonify, redirect, render_template, from . import captcha, config, db +log = logging.getLogger("wb.security") + +# ---------------- 来源 IP(全站唯一入口) ---------------- +def _valid_ip(s): + try: + ipaddress.ip_address(s) + return True + except ValueError: + return False + + +def client_ip(): + """当前请求的客户端地址。 + + * `WB_TRUST_PROXY` 未开启(默认):直接用 `remote_addr`。 + 直接暴露公网、或前面挂了「追加型」代理时,XFF 的第一段是攻击者可控的。 + * 已开启:读 X-Forwarded-For 并**取最右侧**合法 IP。 + 最右侧是最近一跳(我们自己的代理)写入的,客户端加不进去。 + 多级代理(CDN -> nginx)需要按跳数取值,本项目不支持 —— 那样只能靠 + 代理侧传 `X-Real-IP` 之类的可信头,不要在这里猜。 + """ + remote = (request.remote_addr or "").strip() + if not config.TRUST_PROXY: + return remote + raw = request.headers.get("X-Forwarded-For", "") + if not raw: + return remote + for part in reversed([p.strip() for p in raw.split(",")]): + # 去掉 IPv6 的 [..]:port 写法 + cand = part.strip("[]").split("%")[0] + if cand.count(":") == 1 and cand.rsplit(":", 1)[1].isdigit(): + cand = cand.rsplit(":", 1)[0] # IPv4:port + if _valid_ip(cand): + return cand + # 头里全是垃圾 -> 退回 remote_addr,而不是把一个伪造值当 IP 用 + log.warning("X-Forwarded-For 里没有合法 IP,已回退 remote_addr:%r", raw[:120]) + return remote + + # ---------------- 失败计数(内存即可) ---------------- # 单进程部署(见 README 的部署约束),重启清零可接受; # 真正的防爆破靠「验证码 + 双维度限速」两道,而不是靠计数持久化。 _fails = {} # key -> [count, last_ts] +_tries = {} # ip -> [count, window_started_at](含成功,只看总量) _FAILS_MAX_KEYS = 8192 # 上限,防止海量来源把字典撑爆 _FAILS_TTL = 3600 # 超过 1 小时无更新即清理 @@ -88,9 +140,76 @@ def fail_count(key): return c[0] if c else 0 +# ---- IP 维度:真锁(来源地址现在已经不可伪造,锁得住真正的攻击者)---- +def ip_lock_left(ip): + c = _fails.get(_ip_key(ip)) + if not c or c[0] < config.MAX_LOGIN_FAILS: + return 0 + return max(0, int(config.LOGIN_LOCK_MINUTES * 60 - (time.time() - c[1]))) + + +# ---- 用户名维度:只做秒级退避,**不做长锁** ---- +def user_soft_left(username): + """知道一个用户名就能把它锁死 10 分钟 —— 那本身就是攻击。 + + 对外提供服务后,管理员用户名是公开信息(导航里就写着), + 如果按用户名施加长锁,任何人只要连打 5 次错误口令,就能让真正的管理员 + 十分钟进不去。所以这里改成「递增且有封顶」的秒级等待: + 超过阈值后第 1 次 1s、第 2 次 2s …… 封顶 60s。 + 真正的重锁只按来源 IP 施加(`ip_lock_left`)—— 那才是攻击者无法伪造、 + 也无法甩锅给别人的东西。命中阈值的同时,攻击者自己的 IP 也在计数, + 所以这种「软」不会让爆破变得可行。 + """ + c = _fails.get(_user_key(username)) + if not c or c[0] < config.USER_SOFT_THRESHOLD: + return 0 + delay = min(config.USER_SOFT_CAP_SECONDS, + 1 << min(10, c[0] - config.USER_SOFT_THRESHOLD)) + return max(0, int(delay - (time.time() - c[1]))) + + +# ---- 单 IP 登录尝试总量(含成功):挡住「慢慢撞、不触发失败阈值」---- +def note_try(ip): + now = time.time() + if len(_tries) > _FAILS_MAX_KEYS: + _tries.clear() + cur = _tries.get(ip) + if cur is None or now - cur[1] > config.LOGIN_ATTEMPTS_WINDOW: + _tries[ip] = [1, now] + return 1 + cur[0] += 1 + return cur[0] + + +def try_window_left(ip): + cur = _tries.get(ip) + if not cur or cur[0] < config.LOGIN_ATTEMPTS_PER_IP: + return 0 + return max(0, int(config.LOGIN_ATTEMPTS_WINDOW - (time.time() - cur[1]))) + + def auth_locked(ip, username=""): - """返回还需锁定的秒数(0 = 未锁)。IP 与用户名任一超限即锁。""" - return max(lock_left(_ip_key(ip)), lock_left(_user_key(username))) + """还需等待的秒数(0 = 放行)。""" + return max(ip_lock_left(ip), try_window_left(ip), user_soft_left(username)) + + +def auth_block_reason(ip, username=""): + """被挡的原因码:ip / rate / user / 空。用于给出**准确**的提示语。""" + if ip_lock_left(ip): + return "ip" + if try_window_left(ip): + return "rate" + if user_soft_left(username): + return "user" + return "" + + +def auth_block_message(reason, seconds): + if reason == "ip": + return "该来源登录失败次数过多,请 %d 秒后再试" % seconds + if reason == "rate": + return "登录请求过于频繁,请 %d 秒后再试" % seconds + return "尝试过于频繁,请 %d 秒后再试" % seconds def note_auth_fail(ip, username=""): @@ -100,11 +219,40 @@ def note_auth_fail(ip, username=""): def clear_auth_fail(ip, username=""): + """登录成功后清掉两个维度的计数。 + + 用户名维度必须在成功时清零:否则「攻击者打了几次 + 主人自己登一次」 + 之后,主人仍会被自己之前那几次的退避拖住。 + """ clear_fail(_ip_key(ip)) if username: clear_fail(_user_key(username)) +# ---------------- 通用动作限速(重操作保护) ---------------- +# 采集 / 导出 / 整库整理这类动作的代价远高于普通页面请求: +# 一次 /api/collect 会让服务端对云端发起成百上千次请求,并独占一个线程; +# 一次导出会把整张表扫一遍。对外提供服务时必须有刹车, +# 否则**一个注册账号**就能把实例的线程与带宽吃干净。 +_actions = {} # "name:uid" -> next_allowed_ts + + +def action_allowed(key, min_interval): + """返回 (是否允许, 还需等待秒数)。允许时会把下次可执行时间推后。""" + now = time.time() + if len(_actions) > _FAILS_MAX_KEYS: + _actions.clear() + nxt = _actions.get(key) or 0 + if now < nxt: + return False, int(nxt - now) + 1 + _actions[key] = now + max(0, int(min_interval)) + return True, 0 + + +def action_wait_left(key): + return max(0, int((_actions.get(key) or 0) - time.time())) + + # ---------------- 口令 / 用户名策略 ---------------- _USERNAME_RE = re.compile(config.USERNAME_RE) @@ -149,6 +297,10 @@ def password_problem(new, new2=None, username=None): (r"[a-z]", r"[A-Z]", r"[0-9]", r"[^A-Za-z0-9]")) if classes < 2: return "密码需包含大写字母、小写字母、数字、符号中的至少两类" + # 黑名单只挡「字典头几页」,命中即拒。只在设置/修改口令时校验, + # 登录路径不校验 —— 所以不会把用老口令的人挡在门外。 + if new.lower() in config.WEAK_PASSWORDS: + return "这个密码在常见弱口令字典里,请换一个" if new2 is not None and new2 != new: return "两次输入的新密码不一致" if username and new.lower() == str(username).lower(): @@ -182,8 +334,12 @@ def login_ok(conn, username, password): def current_user(): """当前登录用户(dict)或 None。 - 每个请求回查一次 users 表:账号被停用/删除后**立刻**失效, - 而不是等 12 小时会话自然过期。结果缓存在 flask.g 里,一次请求只查一次。 + 每个请求回查一次 users 表,两道校验: + * `status` —— 账号被停用/删除后**立刻**失效,而不是等 12 小时会话过期 + * `session_ver` —— 改密码 / 管理员重置 / 停用后,签发时的那一版会话 + 立即作废。少了它,「怀疑会话泄漏了所以改密码」就是个假的安心动作: + 旧会话照样有效到 12 小时之后。 + 结果缓存在 flask.g 里,一次请求只查一次。 """ if "wb_user" in g: return g.wb_user @@ -192,12 +348,24 @@ def current_user(): if uid: try: row = db.get_db().execute( - "SELECT id,username,display_name,is_admin,status FROM users WHERE id=?", - (uid,)).fetchone() + "SELECT id,username,display_name,is_admin,status,session_ver" + " FROM users WHERE id=?", (uid,)).fetchone() + except sqlite3.OperationalError as e: + # users 表结构与代码不一致(典型场景:升级到新版本后没跑 init_db + # 就先把 Web 起起来了,老库还没有 session_ver 这一列)。 + # 这里必须**大声**报错。若和下面「无请求上下文」一起被静默吞掉, + # 症状会变成「全站所有人被踢下线、日志里什么都没有」—— + # 界面上只看到「登录成功又立刻跳回登录页」,极难归因。 + log.error("会话校验失败:users 表结构与代码不一致(%s);" + "请执行 `python manage.py init` 完成迁移", e) + row = None except Exception: # noqa: BLE001 (无请求上下文等) row = None if row is None or (row["status"] or "active") != "active": session.clear() + elif session.get("sv", 0) != db.session_ver_of(row): + # 老会话没有 sv 字段时按 0 处理,这样升级本身不会把所有人踢下线 + session.clear() else: user = {"id": row["id"], "username": row["username"], "display_name": row["display_name"] or row["username"], @@ -219,12 +387,16 @@ def login_session(user): `session.clear()` 是必须的:既清掉前一次的残留, 也顺带换掉 CSRF token 与验证码 id —— 这正是防「会话固定」的做法。 + + `sv` 记下签发时的 users.session_ver:之后一旦账号改密 / 被重置 / 被停用, + 这一版会话会在下一个请求就被判为过期。 """ session.clear() session["uid"] = user["id"] session["uname"] = user["username"] session["dname"] = user["display_name"] or user["username"] session["adm"] = 1 if user["is_admin"] else 0 + session["sv"] = db.session_ver_of(user) session["login_at"] = db.now_str() session.permanent = True @@ -401,19 +573,54 @@ def apply_security_headers(resp): resp.headers.setdefault("Referrer-Policy", "same-origin") resp.headers.setdefault("Content-Security-Policy", CSP) resp.headers.setdefault("Cross-Origin-Opener-Policy", "same-origin") + # HSTS 只在「确认这个部署跑在 HTTPS 上」时才发:在纯 HTTP 部署上发它, + # 浏览器会把该域名的 http 访问强行升级,表现成「打开就白屏」。 + # 判据是管理员显式打开了 COOKIE_SECURE 或 FORCE_HTTPS。 + if config.COOKIE_SECURE or config.FORCE_HTTPS: + resp.headers.setdefault("Strict-Transport-Security", + "max-age=31536000; includeSubDomains") if request.path.startswith("/api/") or request.path.startswith("/captcha"): resp.headers.setdefault("Cache-Control", "no-store") return resp +def needs_https_redirect(): + """当前请求是否该被跳到 https(仅在显式开启 WB_FORCE_HTTPS 时才判断)。""" + if not config.FORCE_HTTPS or request.is_secure: + return False + # 反代终止 TLS 时,Flask 看到的是 http;靠 X-Forwarded-Proto 还原真实协议。 + # 这个头只在「你已经决定信任代理」的前提下才有意义,所以与 TRUST_PROXY 绑定。 + if config.TRUST_PROXY and (request.headers.get("X-Forwarded-Proto") or "").lower() == "https": + return False + if request.method not in ("GET", "HEAD"): + return False # 不重定向 POST:会丢请求体,行为难以预期 + return True + + +def _access_log(resp, started): + if not config.ACCESS_LOG: + return resp + path = request.path + if path.startswith("/static/") or path == "/captcha.png": + return resp # 静态资源与验证码出图会把日志刷满 + log.info("%s %s -> %s %dms ip=%s", request.method, path, resp.status_code, + int((time.time() - started) * 1000), client_ip()) + return resp + + def init_app(app): app.jinja_env.globals["csrf_token"] = csrf_token app.jinja_env.globals["current_user"] = current_user @app.before_request def _guard(): + g.wb_t0 = time.time() + if needs_https_redirect(): + url = request.url.replace("http://", "https://", 1) + return redirect(url, code=301) return check_csrf() @app.after_request def _headers(resp): + _access_log(resp, getattr(g, "wb_t0", time.time())) return apply_security_headers(resp) diff --git a/workbuddy_portal/web/api.py b/workbuddy_portal/web/api.py index c98b77b..08c6a80 100644 --- a/workbuddy_portal/web/api.py +++ b/workbuddy_portal/web/api.py @@ -23,9 +23,9 @@ import os from datetime import datetime -from flask import Blueprint, jsonify, request +from flask import Blueprint, jsonify, request, send_file, session -from .. import collect, config, db, query, scheduler, security +from .. import backup, collect, config, db, query, scheduler, security from ..security import admin_required, current_user, is_admin, login_required bp = Blueprint("api", __name__, url_prefix="/api") @@ -36,6 +36,12 @@ def _uid(): return u["id"] if u else 0 +def _ip(): + """客户端地址。一律走 security.client_ip() —— 见那里的注释: + 直接取 X-Forwarded-For 第 0 段会让「来源」变成请求方自己填的字符串。""" + return security.client_ip() + + def _arg(name, default=None): v = request.args.get(name) return v if v not in (None, "") else default @@ -193,14 +199,26 @@ def api_status(): running = conn.execute("SELECT COUNT(*) FROM collect_runs WHERE user_id=? AND status='running'", (uid,)).fetchone()[0] cred = db.secret_state(conn, "cookie", uid) + nxt_bk = backup.next_auto_at(conn) if u["is_admin"] else None return jsonify({ "server_time": db.now_str(), # 角色能力:大屏等**静态页**拿不到 Jinja 上下文,只能靠这个字段 - # 决定要不要渲染管理员专属入口(如「日志管理」)。服务端仍会 + # 决定要不要渲染管理员专属入口(如「日志管理」「备份管理」)。服务端仍会 # 对这些入口再做一次鉴权,前端隐藏只是为了不给出误导性的按钮。 "is_admin": bool(u["is_admin"]), "can_edit_schedule": bool(u["is_admin"]), "can_view_logs": bool(u["is_admin"]), + "can_manage_backups": bool(u["is_admin"]), + "limits": { + # 对外提供服务时的三道闸门,前端据此提前禁用按钮而不是等 409 + "collect_min_interval_seconds": collect.min_interval_seconds(conn), + "collect_max_range_days": collect.max_range_days(conn), + "schedule_slots": len(scheduler.slots(conn, uid)), + "schedule_slots_cap": + max(1, min(config.SCHEDULE_SLOTS_HARD_MAX, + db.get_int(conn, "max_schedule_slots_per_day", 6))), + }, + "running_lock": os.path.exists(collect.LOCK_PATH), "scheduler": { "running": sch.running, "enabled": db.get_bool(conn, "schedule_enabled", True, uid), @@ -209,6 +227,13 @@ def api_status(): "catch_up": db.get_bool(conn, "catch_up", True, uid), "lockfile": os.path.exists(collect.LOCK_PATH), }, + "backup": { + "enabled": db.get_bool(conn, "backup_enabled", True), + "interval_hours": db.get_int(conn, "backup_interval_hours", 24), + "keep": db.get_int(conn, "backup_keep", 7), + "last": backup.last_auto_at(conn) or None, + "next": nxt_bk.strftime("%Y-%m-%d %H:%M:%S") if nxt_bk else None, + }, "running_runs": running, "last_run": dict(last) if last else None, # 只回「有没有配」与字符数,绝不回凭证内容 @@ -221,10 +246,40 @@ def api_status(): @bp.post("/collect") @login_required def api_collect(): - """手动触发一次采集(后台线程之外同步执行,页面等待结果)。""" + """手动触发一次采集(同步执行,页面等待结果)。 + + 对外提供服务后,这里必须有三道闸门,缺一不可: + + 1. **已有任务在跑就拒绝新任务**。采集是全局单写者(SQLite 同一时刻只允许 + 一个写进程,见 collect._Lock)。原来的实现是「后来者在锁上等」, + 而 waitress 只有 8 个线程 —— 一个人连点几下就能把线程占满, + 表现为整个站点变慢甚至无响应。现在明确回 409。 + 2. **同一账号的最小间隔**。挡住「连点按钮 / 脚本循环调」这种形态; + 间隔由 `collect_min_interval_seconds` 控制(实例级,管理员可调)。 + 3. **跨度上限**。`from=2000-01-01` 会让服务端对云端发出成百上千次请求, + 这是最省力的资源耗尽方式。上限 `collect_max_range_days`(硬顶 31 天)。 + """ u = current_user() + conn = db.get_db() + uid = u["id"] body = _json_body() + + # ---- 闸门 1:不能有别的任务在跑 ---- + if os.path.exists(collect.LOCK_PATH): + return jsonify({"ok": False, "error": "busy", + "message": "已有采集任务正在运行,请等它结束后再试" + "(进度见「任务管理」)"}), 409 + + # ---- 闸门 2:频率 ---- + gap = collect.min_interval_seconds(conn) + allowed, wait = security.action_allowed("collect:%d" % uid, gap) + if not allowed: + return jsonify({"ok": False, "error": "too_frequent", + "message": "同一账号两次采集之间需间隔 %d 秒,请 %d 秒后再试" + % (gap, wait)}), 429 + frm, to = body.get("from"), body.get("to") + limit = collect.max_range_days(conn) try: kw = {} if frm: @@ -239,7 +294,16 @@ def api_collect(): kw["to_dt"] = datetime.strptime(d, "%Y-%m-%d").replace(hour=23, minute=59, second=59) if kw.get("from_dt") and kw.get("to_dt") and kw["from_dt"] > kw["to_dt"]: raise BadParam("起始日期不能晚于结束日期") - r = collect.run_sync(trigger="manual", uid=u["id"], **kw) + # ---- 闸门 3:跨度 ---- + if kw.get("from_dt"): + end = kw.get("to_dt") or datetime.now() + days = (end - kw["from_dt"]).days + if days > limit: + raise BadParam( + "采集跨度最长 %d 天,本次请求是 %d 天。" + "请缩小日期范围后分批采集(每次最多 %d 天)。" + % (limit, days, limit)) + r = collect.run_sync(trigger="manual", uid=uid, **kw) except BadParam as e: return jsonify({"ok": False, "error": "bad_request", "message": str(e)}), 400 except collect.Busy as e: @@ -256,7 +320,7 @@ def api_collect(): "message": str(e)}), code except Exception as e: # noqa: BLE001 return jsonify({"ok": False, "error": "internal", "message": str(e)}), 500 - db.audit(db.get_db(), "collect", u["username"], r["message"], request.remote_addr, u["id"]) + db.audit(conn, "collect", u["username"], r["message"], _ip(), uid) return jsonify({"ok": True, "result": r}) @@ -307,6 +371,14 @@ def api_maintenance(action): if action == "vacuum" and not u["is_admin"]: return jsonify({"ok": False, "error": "forbidden", "message": "数据库整理是整库操作,仅管理员可执行"}), 403 + # 这四类动作都是「整库扫一遍」级别:导出会全表流式扫、补全会连续打云端、 + # vacuum 会锁库。各自加一个按账号的最小间隔,挡住脚本循环调用。 + hvy = {"fill-prompt": 60, "export-csv": 15, "vacuum": 120, "recount": 5} + if action in hvy: + ok, wait = security.action_allowed("maint:%s:%d" % (action, uid), hvy[action]) + if not ok: + return jsonify({"ok": False, "error": "too_frequent", + "message": "该动作刚执行过,请 %d 秒后再试" % wait}), 429 try: if action == "fill-prompt": try: @@ -336,10 +408,118 @@ def api_maintenance(action): return jsonify({"ok": False, "error": "unknown", "message": "未知维护动作"}), 404 except Exception as e: # noqa: BLE001 return jsonify({"ok": False, "error": "internal", "message": str(e)}), 500 - db.audit(conn, "maintenance:" + action, u["username"], msg, request.remote_addr, uid) + db.audit(conn, "maintenance:" + action, u["username"], msg, _ip(), uid) return jsonify({"ok": True, "message": msg}) +# ---------------- 备份管理(仅管理员) ---------------- +def _backup_error(e): + return jsonify({"ok": False, "error": "backup", "message": str(e)}), 400 + + +@bp.get("/backups") +@admin_required +def api_backups(): + conn = db.get_db() + backup.sync_index(conn) + return jsonify({ + "items": backup.listing(conn), + "dir": config.BACKUP_DIR, + "total_human": backup.human(backup.total_bytes(conn)), + "enabled": db.get_bool(conn, "backup_enabled", True), + "interval_hours": db.get_int(conn, "backup_interval_hours", 24), + "keep": db.get_int(conn, "backup_keep", 7), + "last_auto": backup.last_auto_at(conn), + }) + + +@bp.post("/backups") +@admin_required +def api_backup_create(): + conn = db.get_db() + u = current_user() + # 打一份整库快照是重活(整库读一遍 + 压缩),别让脚本连打 + ok, wait = security.action_allowed("backup:create", 30) + if not ok: + return jsonify({"ok": False, "error": "too_frequent", + "message": "刚打过备份,请 %d 秒后再试" % wait}), 429 + note = str(_json_body().get("note") or "").strip()[:200] + try: + r = backup.create(conn, trigger="manual", actor=u["username"], note=note) + except backup.BackupError as e: + return _backup_error(e) + except Exception as e: # noqa: BLE001 + return jsonify({"ok": False, "error": "internal", "message": str(e)}), 500 + removed = backup.prune(conn, actor=u["username"]) + if removed: + r["message"] += ";按保留份数清理了 %d 份旧备份" % len(removed) + r["pruned"] = removed + return jsonify(r) + + +@bp.get("/backups/") +@admin_required +def api_backup_download(filename): + """下载一份归档。文件名必须过 backup.safe_name 的收口。""" + try: + p = backup.path_of(filename) + except backup.BackupError as e: + return _backup_error(e) + if not os.path.exists(p): + return jsonify({"ok": False, "error": "not_found", + "message": "备份文件不存在或已被删除"}), 404 + db.audit(db.get_db(), "backup_download", current_user()["username"], + "下载备份 %s" % os.path.basename(p), _ip(), 0) + return send_file(p, as_attachment=True, download_name=os.path.basename(p), + mimetype="application/zip") + + +@bp.post("/backups//restore") +@admin_required +def api_backup_restore(filename): + """从归档恢复整库。 + + 这是本系统里**破坏性最强**的一个操作:它会把当前所有账号、所有用量、 + 所有配置替换成归档里的那一份。所以: + * 恢复前自动给当前库打一份 pre-restore 快照(错了能回去) + * 默认把 instance.json 一并恢复(否则 Cookie 密文解不开) + * 完成后所有既有会话失效(密钥与账号可能都变了),必须重新登录 + """ + conn = db.get_db() + u = current_user() + body = _json_body() + include_instance = str(body.get("include_instance", "1")).lower() not in ("0", "false", "off", "no") + try: + r = backup.restore(conn, filename, include_instance=include_instance, + actor=u["username"]) + except backup.BackupError as e: + return _backup_error(e) + except Exception as e: # noqa: BLE001 + return jsonify({"ok": False, "error": "internal", "message": str(e)}), 500 + return jsonify(r) + + +@bp.post("/backups//delete") +@admin_required +def api_backup_delete(filename): + conn = db.get_db() + try: + r = backup.delete(conn, filename, actor=current_user()["username"]) + except backup.BackupError as e: + return _backup_error(e) + return jsonify(r) + + +@bp.post("/backups/prune") +@admin_required +def api_backup_prune(): + conn = db.get_db() + removed = backup.prune(conn, actor=current_user()["username"]) + return jsonify({"ok": True, "removed": removed, + "message": ("已清理 %d 份旧备份" % len(removed)) if removed + else "没有需要清理的备份"}) + + def _human(n): for unit in ("B", "KB", "MB", "GB"): if n < 1024 or unit == "GB": @@ -363,6 +543,7 @@ def api_settings_get(): s["_globalKeys"] = sorted(config.GLOBAL_KEYS) s["_userKeys"] = sorted(config.USER_EDITABLE_KEYS) s["_canEditGlobal"] = bool(u["is_admin"]) + s["_canManageBackups"] = bool(u["is_admin"]) s["_role"] = "admin" if u["is_admin"] else "user" return jsonify(s) @@ -397,7 +578,7 @@ def api_settings_post(): db.set_secret(conn, "cookie", "", uid) changed.append(k) continue - val, err = config.normalize_setting(k, v) + val, err = config.normalize_setting(k, v, conn) if err: errors.append(err) continue @@ -412,7 +593,7 @@ def api_settings_post(): % "、".join(sorted(denied))) if errors: db.audit(conn, "settings_rejected", u["username"], ";".join(errors)[:500], - request.remote_addr, uid) + _ip(), uid) return jsonify({"ok": False, "error": "invalid", "message": ";".join(errors), "errors": errors, "changed": sorted(changed)}), 400 # 改了每日时刻:清掉**不再存在的**槽位标记(所有账号一起清)。 @@ -425,8 +606,17 @@ def api_settings_post(): if r["key"][len(scheduler.SLOT_PREFIX):] not in keep] for row_uid, skey in stale: conn.execute("DELETE FROM settings WHERE user_id=? AND key=?", (row_uid, skey)) + # 调小时刻数上限后,多余的槽位标记也该跟着清,否则「缩到 2 个时刻」之后 + # 另外几个时刻的标记会一直躺在库里,看着像系统还在按旧配置跑。 + if "max_schedule_slots_per_day" in changed: + keep = set(scheduler.slots(conn, 0)) + for r in conn.execute("SELECT user_id,key FROM settings WHERE key LIKE ?", + (scheduler.SLOT_PREFIX + "%",)).fetchall(): + if r["key"][len(scheduler.SLOT_PREFIX):] not in keep: + conn.execute("DELETE FROM settings WHERE user_id=? AND key=?", + (r["user_id"], r["key"])) db.audit(conn, "settings", u["username"], - "修改:" + (",".join(sorted(changed)) or "(无变化)"), request.remote_addr, uid) + "修改:" + (",".join(sorted(changed)) or "(无变化)"), _ip(), uid) return jsonify({"ok": True, "changed": sorted(changed), "ignored": sorted(ignored)}) @@ -445,8 +635,16 @@ def api_password(): return jsonify({"ok": False, "message": err}), 400 conn.execute("UPDATE users SET password_hash=? WHERE id=?", (security.hash_password(new), u["id"])) - db.audit(conn, "password", u["username"], "修改登录密码", request.remote_addr, u["id"]) - return jsonify({"ok": True, "message": "密码已更新"}) + # 改密即作废**其他**设备的会话:改密码的动机往往就是怀疑它泄漏了, + # 只改散列却留着旧会话,等于给自己一个假的安心。 + db.bump_session_ver(conn, u["id"]) + # 当前这次会话跟着刷新到新版本,否则用户改完密码立刻被自己踢下线。 + # (安全上「全部踢掉」更好,但体验太差会让人不敢改密码。) + with_row = conn.execute("SELECT * FROM users WHERE id=?", (u["id"],)).fetchone() + session["sv"] = db.session_ver_of(with_row) + db.audit(conn, "password", u["username"], "修改登录密码(其他设备会话已失效)", + _ip(), u["id"]) + return jsonify({"ok": True, "message": "密码已更新,其他设备上的登录已失效"}) @bp.post("/profile") @@ -470,7 +668,7 @@ def api_profile(): if not changed: return jsonify({"ok": False, "message": "没有要修改的内容"}), 400 db.audit(conn, "profile", u["username"], "修改:" + "、".join(changed), - request.remote_addr, u["id"]) + _ip(), u["id"]) return jsonify({"ok": True, "message": "已更新:" + "、".join(changed)}) @@ -514,7 +712,7 @@ def api_user_create(): (body.get("display_name") or name).strip()[:64], (body.get("email") or "").strip()[:128] or None, adm, db.now_str())) db.audit(conn, "user_create", me["username"], - "新建用户 %s(%s)" % (name, "管理员" if adm else "普通"), request.remote_addr, me["id"]) + "新建用户 %s(%s)" % (name, "管理员" if adm else "普通"), _ip(), me["id"]) return jsonify({"ok": True, "message": "已创建用户 %s" % name, "id": cur.lastrowid}) @@ -561,6 +759,11 @@ def api_user_update(uid): return jsonify({"ok": False, "message": "至少要保留一个启用状态的管理员"}), 400 conn.execute("UPDATE users SET status=? WHERE id=?", (v, uid)) + if v != "active": + # 停用必须**连会话一起断**:只改 status 的话,对方手上那台设备 + # 要到下一个请求才被拦(也不是不行),但版本号一并推掉更干净 —— + # 将来若有人把 current_user 的状态检查挪走,这里还有一道。 + db.bump_session_ver(conn, uid) changed.append("状态→" + ("启用" if v == "active" else "停用")) pwd = (body.get("password") or "").strip() if pwd: @@ -569,12 +772,15 @@ def api_user_update(uid): return jsonify({"ok": False, "message": err}), 400 conn.execute("UPDATE users SET password_hash=? WHERE id=?", (security.hash_password(pwd), uid)) + # 管理员重置口令后,该账号在别处的登录必须立刻失效 —— + # 重置口令的典型场景就是「怀疑账号被盗」。 + db.bump_session_ver(conn, uid) changed.append("密码") if not changed: return jsonify({"ok": False, "message": "没有要修改的内容"}), 400 db.audit(conn, "user_update", me["username"], "修改用户 %s:%s" % (row["username"], "、".join(changed)), - request.remote_addr, me["id"]) + _ip(), me["id"]) return jsonify({"ok": True, "message": "已更新:" + "、".join(changed)}) @@ -605,7 +811,7 @@ def api_user_delete(uid): conn.execute("DELETE FROM users WHERE id=?", (uid,)) db.audit(conn, "user_delete", me["username"], "删除用户 %s(%s)" % (row["username"], "保留其数据" if keep else "连同数据一并删除"), - request.remote_addr, me["id"]) + _ip(), me["id"]) return jsonify({"ok": True, "message": "已删除 " + row["username"]}) diff --git a/workbuddy_portal/web/templates/backups.html b/workbuddy_portal/web/templates/backups.html new file mode 100644 index 0000000..ab9eac7 --- /dev/null +++ b/workbuddy_portal/web/templates/backups.html @@ -0,0 +1,236 @@ +{% extends "base.html" %} +{% block title %}备份管理 · {{ project_title }}{% endblock %} +{% block body %} + +

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 z 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 xUnwHRUnwkHY&ocn%~p; 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