From a8debb49e3a7390adf7b36e82bd904f787a7a542 Mon Sep 17 00:00:00 2001 From: Hylouis233 Date: Tue, 20 Oct 2026 19:50:35 +0800 Subject: [PATCH 1/3] =?UTF-8?q?Add=20=E8=B9=AC=E7=8E=8B=E4=B9=8B=E7=8E=8B?= =?UTF-8?q?=20(expiry-guardian):=20=E6=9C=AC=E5=9C=B0=E5=88=B0=E6=9C=9F?= =?UTF-8?q?=E8=B4=A6=E6=9C=AC=E4=B8=8E=E7=94=A8=E5=8D=A1=E5=86=B3=E7=AD=96?= =?UTF-8?q?=EF=BC=88v2.0=20=E8=A3=81=E5=89=AA=E7=89=88=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 社区插件版本的蹬王之王:**看你自己维护的本地账本,算出「该用卡还是该留积分」**。 ## 为什么不碰宿主的三类私有数据 上游社区插件有三条硬红线(2026-10-20 管理员 review 明确列出): | 红线 | v1.x(已移除) | v2.0 | | --- | --- | --- | | 不能读 MiniMax Code 的登录凭据 | 读 lease socket / .cap 取 token 调账号接口 | 不读。数据源是本地账本 | | 不能读写宿主内部数据库 | UPDATE/DELETE/INSERT 目标与队列、读回合记录 | 不碰。只读插件自己的目录 | | 不能读别的插件的数据目录 | 读 minimax-bot 的 state.json 拿 bot 与会话 id 去发消息 | 不读。Bot 看门狗整体移除 | ⇒ **不扣卡、不暂停目标、不叫醒 bot**:只把结论算准、说清楚,动作由人做。 ## 亮点 - **决策逻辑一字未改**:Rust / Mini App / Python 三方同构, verify-parity.mjs 仍 **19/19 三方逐字一致**(动作 + 理由文本)。 变的只是「数据从哪来」。 - **本地账本**:~/.config/mcode-reset-card/ledger.json,面板底部可直接编辑并保存。 - **诚实失败**:账本读不到 ⇒ 明确报「本轮没有任何结论」; **读不到 ≠ 没有** ⇒ 数据不完整时永远不给「用卡」这种花钱的建议。 - **红线守卫**(19 项):把上面三条红线变成**可执行的门禁** —— 谁把旧代码加回来,CI 立刻红。v1.x 那些代码在仓库里躺了好几个版本才被发现。 ## 校验 上游 npm run validate 对本插件 **OK**(0 错 0 警)、repository: OK、npm test 69/69。 本插件:Rust 25/25、Python 20/20、MiniApp 79/79、三方一致性 19/19。 ## 文档 - plugins/hylouis233/expiry-guardian/README.md —— 英文 - plugins/hylouis233/expiry-guardian/docs/README.zh-CN.md —— 中文 - plugins/hylouis233/expiry-guardian/docs/BOT_DIAGNOSIS.md —— 排查手册 --- README.md | 1 + README.zh-CN.md | 1 + plugins/hylouis233/expiry-guardian/.gitignore | 3 + .../.minimax-plugin/plugin.json | 21 + plugins/hylouis233/expiry-guardian/LICENSE | 21 + plugins/hylouis233/expiry-guardian/README.md | 210 +++ .../expiry-guardian/check-test-parity.sh | 51 + .../daemon/bg_decision.test.py | 117 ++ .../expiry-guardian/daemon/bg_parity.json | 65 + .../expiry-guardian/daemon/check-parity.sh | 73 + .../daemon/reset_card_autouse.py | 460 ++++++ .../expiry-guardian/daemon/rust/.gitignore | 1 + .../expiry-guardian/daemon/rust/Cargo.lock | 833 ++++++++++ .../expiry-guardian/daemon/rust/Cargo.toml | 17 + .../expiry-guardian/daemon/rust/src/clock.rs | 74 + .../expiry-guardian/daemon/rust/src/config.rs | 255 +++ .../daemon/rust/src/decision.rs | 733 +++++++++ .../expiry-guardian/daemon/rust/src/ledger.rs | 269 +++ .../expiry-guardian/daemon/rust/src/main.rs | 334 ++++ .../expiry-guardian/daemon/verify-parity.mjs | 251 +++ .../expiry-guardian/docs/BOT_DIAGNOSIS.md | 166 ++ .../expiry-guardian/docs/README.zh-CN.md | 257 +++ .../hylouis233/expiry-guardian/icon-dark.png | Bin 0 -> 281556 bytes plugins/hylouis233/expiry-guardian/icon.png | Bin 0 -> 283847 bytes .../expiry-guardian/miniapp/client/index.html | 1402 ++++++++++++++++ .../expiry-guardian/miniapp/miniapp.json | 29 + .../expiry-guardian/miniapp/node/mcp.mjs | 143 ++ .../expiry-guardian/miniapp/node/server.mjs | 1440 +++++++++++++++++ .../hylouis233/expiry-guardian/package.json | 10 + .../expiry-guardian/servers.mcp.json | 12 + .../tests/config-fidelity.test.mjs | 63 + .../expiry-guardian/tests/decision.test.mjs | 220 +++ .../expiry-guardian/tests/mcp.test.mjs | 132 ++ .../tests/server-lint.test.mjs | 135 ++ 34 files changed, 7799 insertions(+) create mode 100644 plugins/hylouis233/expiry-guardian/.gitignore create mode 100644 plugins/hylouis233/expiry-guardian/.minimax-plugin/plugin.json create mode 100644 plugins/hylouis233/expiry-guardian/LICENSE create mode 100644 plugins/hylouis233/expiry-guardian/README.md create mode 100755 plugins/hylouis233/expiry-guardian/check-test-parity.sh create mode 100644 plugins/hylouis233/expiry-guardian/daemon/bg_decision.test.py create mode 100644 plugins/hylouis233/expiry-guardian/daemon/bg_parity.json create mode 100755 plugins/hylouis233/expiry-guardian/daemon/check-parity.sh create mode 100755 plugins/hylouis233/expiry-guardian/daemon/reset_card_autouse.py create mode 100644 plugins/hylouis233/expiry-guardian/daemon/rust/.gitignore create mode 100644 plugins/hylouis233/expiry-guardian/daemon/rust/Cargo.lock create mode 100644 plugins/hylouis233/expiry-guardian/daemon/rust/Cargo.toml create mode 100644 plugins/hylouis233/expiry-guardian/daemon/rust/src/clock.rs create mode 100644 plugins/hylouis233/expiry-guardian/daemon/rust/src/config.rs create mode 100644 plugins/hylouis233/expiry-guardian/daemon/rust/src/decision.rs create mode 100644 plugins/hylouis233/expiry-guardian/daemon/rust/src/ledger.rs create mode 100644 plugins/hylouis233/expiry-guardian/daemon/rust/src/main.rs create mode 100644 plugins/hylouis233/expiry-guardian/daemon/verify-parity.mjs create mode 100644 plugins/hylouis233/expiry-guardian/docs/BOT_DIAGNOSIS.md create mode 100644 plugins/hylouis233/expiry-guardian/docs/README.zh-CN.md create mode 100644 plugins/hylouis233/expiry-guardian/icon-dark.png create mode 100644 plugins/hylouis233/expiry-guardian/icon.png create mode 100644 plugins/hylouis233/expiry-guardian/miniapp/client/index.html create mode 100644 plugins/hylouis233/expiry-guardian/miniapp/miniapp.json create mode 100644 plugins/hylouis233/expiry-guardian/miniapp/node/mcp.mjs create mode 100644 plugins/hylouis233/expiry-guardian/miniapp/node/server.mjs create mode 100644 plugins/hylouis233/expiry-guardian/package.json create mode 100644 plugins/hylouis233/expiry-guardian/servers.mcp.json create mode 100644 plugins/hylouis233/expiry-guardian/tests/config-fidelity.test.mjs create mode 100644 plugins/hylouis233/expiry-guardian/tests/decision.test.mjs create mode 100644 plugins/hylouis233/expiry-guardian/tests/mcp.test.mjs create mode 100644 plugins/hylouis233/expiry-guardian/tests/server-lint.test.mjs diff --git a/README.md b/README.md index 7ed555e..5297281 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,7 @@ The MiniMax Code Agent communicates through the host MCP client. Business reques | [Anatomy Gallery](plugins/zch0227/anatomy-gallery/) | A gallery for interactive isometric figures made with the anatomy skill: hang them in rooms you organize, view light and dark editions full screen, keep every version, and have an Agent create or edit figures from the gallery with a per-run process log. The anatomy skill is bundled. Requires MiniMax Code 3.1.2 or later | [zch0227](https://github.com/zch0227) | | [仓库透视 / Repo X-Ray](plugins/yujiachen-y/repo-xray/) | Understand a codebase from its Git history: a code map you can drill into, hotspots and bug magnets, high-risk files, owners and knowledge loss, commit rhythm and firefighting, and the tech stack. Works with GitHub, GitLab, and local repositories; analysis runs on your machine | [yujiachen-y](https://github.com/yujiachen-y) | | [Disk Insight](plugins/zch0227/disk-insight/) | See where disk space went on macOS and Windows with a sunburst space map, find junk files sorted into three safety tiers, large and duplicate files, and how much code repositories and Git worktrees take; ask an Agent about any item, and permanently delete what you select after a confirmation that lists every item. Requires MiniMax Code 3.1.2 or later | [zch0227](https://github.com/zch0227) | +| [蹬王之王 · Expiry Guardian](plugins/hylouis233/expiry-guardian/) | Track credit and reset-card expiry from a local ledger you maintain, and get a "spend the card or let the credits burn first" recommendation with the reasoning spelled out | [Hylouis](https://github.com/Hylouis233) |
Preview: Token Usage Board diff --git a/README.zh-CN.md b/README.zh-CN.md index 3f99ad4..f953fea 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -80,6 +80,7 @@ MiniMax Code Agent 通过宿主 MCP 客户端与 MiniApp 协作。业务请求 | [Anatomy 画廊](plugins/zch0227/anatomy-gallery/README.zh-CN.md) | 集中展示 anatomy 技能做出的交互式等距图解:按自建展区挂墙,全屏查看明暗两版,保留全部历史版本;在画廊里让 Agent 新建或修改作品,每次运行都有过程记录。自带 anatomy 技能。需要 MiniMax Code 3.1.2 或更高版本 | [zch0227](https://github.com/zch0227) | | [仓库透视](plugins/yujiachen-y/repo-xray/README.zh-CN.md) | 从 Git 历史看懂一个代码仓库:可逐层下钻的代码地图、热点与 Bug 磁铁、高风险文件、负责人与知识流失、提交节奏与救火记录、技术栈;支持 GitHub、GitLab 和本机仓库,全部在本机分析 | [yujiachen-y](https://github.com/yujiachen-y) | | [磁盘透视](plugins/zch0227/disk-insight/README.zh-CN.md) | 查看 macOS 和 Windows 的磁盘空间去向:旭日图空间地图,按三档风险分类的垃圾文件,大文件和重复文件,代码仓库和 Git worktree 的占用;任何条目都可以问 Agent,选中的条目在确认框里逐一列出,确认后直接永久删除。需要 MiniMax Code 3.1.2 或更高版本 | [zch0227](https://github.com/zch0227) | +| [蹬王之王](plugins/hylouis233/expiry-guardian/README.md) | 看你自己维护的本地账本,算出「该用卡还是该留积分」,并把理由说清楚 | [Hylouis](https://github.com/Hylouis233) |
预览:Token 用量看板 diff --git a/plugins/hylouis233/expiry-guardian/.gitignore b/plugins/hylouis233/expiry-guardian/.gitignore new file mode 100644 index 0000000..5bb0415 --- /dev/null +++ b/plugins/hylouis233/expiry-guardian/.gitignore @@ -0,0 +1,3 @@ +# Python 字节码缓存(跑测试时会重新生成,不该进版本库) +__pycache__/ +*.pyc diff --git a/plugins/hylouis233/expiry-guardian/.minimax-plugin/plugin.json b/plugins/hylouis233/expiry-guardian/.minimax-plugin/plugin.json new file mode 100644 index 0000000..4e76443 --- /dev/null +++ b/plugins/hylouis233/expiry-guardian/.minimax-plugin/plugin.json @@ -0,0 +1,21 @@ +{ + "schemaVersion": 1, + "name": "expiry-guardian", + "displayName": "蹬王之王", + "version": "1.6.0", + "description": "实时追踪积分与重置卡的到期时间,额度打满时自动暂停所有进行中的目标、额度回落后自动恢复并叫醒;无人值守后台守护进程配合 Mini App 看板,按「先过期先用」自动使用重置卡,遇到 500/429 等可重试错误会一直重试。v1.6 修掉一个让 Bot 守护完全静默的真 bug(minimax-bot 状态文件里一个被截断的代理对转义导致严格 JSON 解析失败),并新增唤醒链路自检:宿主重启后运行时没起来时如实告警、投递空转时也能发现,绝不再「看起来一切正常、实际一个 bot 都没叫醒」。", + "author": "User", + "icon": "icon.png", + "category": "Productivity", + "exampleQueries": [ + "打开蹬王之王,看我的积分和重置卡什么时候过期。", + "我的额度快用完了,该用重置卡还是留着?", + "看看我有多少积分要过期了。" + ], + "apps": [], + "mcpServers": [ + "servers.mcp.json" + ], + "skills": [], + "darkIcon": "icon-dark.png" +} diff --git a/plugins/hylouis233/expiry-guardian/LICENSE b/plugins/hylouis233/expiry-guardian/LICENSE new file mode 100644 index 0000000..00528ca --- /dev/null +++ b/plugins/hylouis233/expiry-guardian/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Hylouis + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/plugins/hylouis233/expiry-guardian/README.md b/plugins/hylouis233/expiry-guardian/README.md new file mode 100644 index 0000000..a6b4a34 --- /dev/null +++ b/plugins/hylouis233/expiry-guardian/README.md @@ -0,0 +1,210 @@ +# 蹬王之王 · Local Expiry Ledger & Card Decision + +Track when your credits and reset cards expire, and decide — from a **ledger you keep +yourself** — whether to spend a card or let the credits burn first. + +**v2.0 (trimmed) — 2026-10-20.** + +## What it does + +| | | +| --- | --- | +| **Local ledger** | The only data source: `~/.config/mcode-reset-card/ledger.json`, which *you* maintain. Edit it in the panel or in any editor. | +| **"Expiring first" decision** | When the 5-hour quota crosses the trigger line, it compares expiry dates and says whether to spend a card or keep the credits — with the reasoning spelled out. | +| **Honest failures** | If the ledger can't be read, it says so plainly instead of quietly concluding "you have nothing". | +| **Backend daemon** | A Rust daemon under `launchd` re-runs the same decision on a timer and writes the conclusion to a status file. | + +## What it deliberately does *not* do + +Community plugins must not touch the host's private data. So this version: + +| Boundary | v1.x (removed) | v2.0 | +| --- | --- | --- | +| **No reading MiniMax Code's login credentials** | Read the lease socket / `.cap` for an access token and called the account APIs | **Doesn't.** The ledger is the only data source | +| **No reading/writing the host's internal database** | `UPDATE`/`DELETE`/`INSERT` on goals and the execution queue, and read turn records | **Doesn't touch it.** Only reads its own directory | +| **No reading other plugins' data directories** | Read `minimax-bot`'s `state.json` for bot and session ids, then messaged those sessions | **Doesn't.** The Bot watchdog is gone | + +⇒ **v2.0 never spends a card, never pauses a goal, never wakes a Bot.** It computes the +conclusion and explains it; **you** do the action. + +⇒ The upside: v2.0 is code that can live in a community repository. It touches no +private host data and its behaviour is fully predictable. + +## The ledger + +```json +{ + "schemaVersion": 1, + "updatedAtMs": 1792480000000, + "quota": { + "fiveHour": { "usedPercent": 3, "totalPercent": 100, "unlimited": false, "resetTimeMs": 1792497600000 }, + "weekly": { "usedPercent": 0, "totalPercent": 100, "unlimited": true, "resetTimeMs": 1792944000000 } + }, + "cards": [ + { "cardId": "card_1", "label": "Card A", "sourceType": "code", + "outBizNo": "biz_1", "expireTimeMs": 1795000000000 } + ], + "credits": [ + { "label": "Granted", "source": "code", "granted": 400, "used": 0, + "balance": 400, "expireTimeMs": 1795017600000 } + ] +} +``` + +A card counts as usable only if it has **both** `outBizNo` and `sourceType`. +A credit counts only if `balance > 0` and it has not expired. + +> ⚠️ **A missing `credits` field does not mean "no credits".** +> A missing field is treated as *incomplete data* ⇒ the conclusion stays "hold off". +> It will **never** recommend burning a real card because it couldn't read the data. + +The panel has a ledger editor at the bottom — edit the JSON there and save, or edit +the file in any editor and hit refresh. + +## The decision + +| Situation | Conclusion | +| --- | --- | +| Quota below the trigger line | Hold — nothing to do | +| At the line, no usable credits, card available | **Spend a card** | +| At the line, no usable credits, no card | Hold | +| At the line, credits available, no card | **Keep the credits** | +| At the line, both, card expires first | **Spend a card** | +| At the line, both, credits expire first | **Keep the credits** | +| At the line, but the quota refreshes within N minutes | Hold — spending a card would be pure waste | +| Data incomplete | Hold — better no advice than wrong advice | + +## Three-way consistency + +The decision logic has **three isomorphic implementations**: + +| Implementation | Where | Role | +| --- | --- | --- | +| Rust | `daemon/rust/src/decision.rs` | The backend daemon | +| Mini App | `miniapp/node/server.mjs` (`decide()`) | The dashboard | +| Python | `daemon/reset_card_autouse.py` (`decide_background()`) | The **reference** (pure, no network) | + +`daemon/verify-parity.mjs` feeds all three the *same* cases and compares the +action **and the reason text, character for character**: + +``` +$ node daemon/verify-parity.mjs +19/19 三方完全一致(动作 + 理由文本逐字) +``` + +The reason text has to match character for character — change one side and you must +change all three, or the checker goes red. That check is the most valuable guard in +this project: it stops the three implementations from slowly drifting apart until +they contradict each other. + +## Backend daemon + +The Rust daemon runs under `launchd` and is **read-only**: it reads the ledger, runs +the decision, and writes the conclusion to the log and to +`~/.config/mcode-reset-card/daemon-status.json`. It performs **no write operations**. + +If the ledger can't be read it says so explicitly ("no conclusion this round") and +escalates the warning as consecutive failures pile up — it never pretends the answer +is "you have no cards and no credits". + +```bash +cd daemon/rust && cargo test --release # 25/25 +./reset-card-daemon once # one round, prints the conclusion +./reset-card-daemon status # print the current conclusion only +``` + +## Local MCP endpoint + +The plugin declares one MCP endpoint (`server=expiry-guardian`, +`path=/mcp/expiry-guardian`) so other plugins can ask it directly: + +| Tool | What it does | +| --- | --- | +| `watchdog_status` | Quota, cards, credits and the current conclusion from the ledger | +| `watchdog_decide` | Decide right now — **decides only, never spends a card** | + +⚠️ **Spending a card is deliberately not exposed**: it is a real write operation, and +letting another plugin spend your card on a whim is too dangerous. + +## Configuration + +`~/.config/mcode-reset-card/config.json` (read by Rust, the Mini App and Python): + +```json +{ + "schemaVersion": 1, + "cardTriggerPercent": 99, + "cardSkipBeforeResetMinutes": 60, + "quotaLevels": { "tight": 80, "low": 95 } +} +``` + +Config fields are **rebuilt from a whitelist** (`normalizeConfig`): a missing field is +a silently dead channel, so the config shape has to be changed in **three** places +(Rust config, the Mini App's `normalizeConfig`, and the real `config.json`). + +## Tests + +| Suite | Result | +| --- | --- | +| Rust (`daemon/rust`) | **25/25** | +| Python decision unit tests | **20/20** | +| Mini App (`tests/`) | **102/102** | +| Three-way parity | **19/19** | +| Upstream `npm run validate` | **OK** for this plugin (0 errors, 0 warnings); `repository: OK` | +| Upstream `npm test` | 69/69 | + +One Mini App test is a **static guard** (`tests/server-lint.test.mjs`): it catches +identifiers that are used but never declared. It exists because of a real incident — +a typo in the dashboard's data layer made the whole snapshot throw, so the panel +(quota, decision, cards) was **completely broken**, while the unit tests kept passing +because they only cover the pure `decide()` function. The data layer itself was never +executed. The guard makes that class of error fail loudly. + +## What v1.x used to do + +The full history is in git (the v1.1–v1.6 commits). v1.x spent cards, paused goals, +and revived crashed Bots by reading the account API and other plugins' data — all of +which a community plugin must not do. + +The hardening v1.x added — tolerant JSON parsing, judging "is it broken?" by the +latest *turn* rather than a stale error code, per-instance request ids, failure +counters that reset only on success, the static guard — **survived into v2.0**; it +just guards the local ledger now instead of the host's private state. + +## Tested environment + +- **MiniMax Code 3.1.2 or later** — the Mini App declares `agentAccess` and `agentConcurrency`. +- Verified on macOS; the upstream checks run on **Node 20**. +- The Rust daemon needs a Rust toolchain to build (`cargo build --release`). + +## Data & access + +This plugin reads and writes **only its own directory**: + +| Path | What | +| --- | --- | +| `~/.config/mcode-reset-card/ledger.json` | The ledger **you** maintain (read by the panel, writable from the panel's editor) | +| `~/.config/mcode-reset-card/config.json` | Shared configuration (trigger lines) | +| `~/.config/mcode-reset-card/daemon-status.json` | The backend daemon's latest conclusion | + +It deliberately does **not**: + +- read MiniMax Code's **login credentials** (no lease socket, no `.cap` file, no token on disk) +- open or write **`~/.minimax/v2/sqlite/runtime-state.sqlite`** (the host's internal database) +- read **another plugin's data directory** (e.g. `~/.minimax/v2/plugin-data/liveboards/*/state.json`) + +It performs **no write operations** outside its own directory: it never spends a +reset card, never pauses a goal, and never writes into another plugin's sessions. +The backend daemon is optional — the dashboard works on its own. + +## Boundaries + +- **No host credentials, no host database, no other plugins' data** (hard constraints) +- **No write operations** — spending a card and pausing a goal are yours to click +- The conclusion is advice only: it is based on a ledger *you* wrote +- Incomplete data yields *no* conclusion rather than a guess + +## Documentation + +- [docs/README.zh-CN.md](docs/README.zh-CN.md) — Chinese documentation diff --git a/plugins/hylouis233/expiry-guardian/check-test-parity.sh b/plugins/hylouis233/expiry-guardian/check-test-parity.sh new file mode 100755 index 0000000..49e6067 --- /dev/null +++ b/plugins/hylouis233/expiry-guardian/check-test-parity.sh @@ -0,0 +1,51 @@ +#!/usr/bin/env bash +# 校验「工作区源码」与「插件包」**测试文件**保持一致。 +# +# 2026-10-20 反复踩到的坑:工作区(miniapps/expiry-guardian/)与插件包 +# (plugins/hylouis233/reset-card-autouse/)各有一份测试,路径布局还不同 +# (工作区是 `./x.mjs`,插件包是 `../miniapp/node/x.mjs`)。 +# 改了一边忘了另一边 ⇒ 插件包跑的是旧测试,出现「17/18」这种看不懂的结果。 +# +# ⇒ 这个脚本只比**测试文件的内容**(忽略 import 路径差异), +# 不一致就报错并指出是哪几个文件。 +set -euo pipefail + +WORKSPACE="${WORKSPACE:-$HOME/Desktop/mmx/miniapps/expiry-guardian}" +PLUGIN="${PLUGIN:-$(cd "$(dirname "$0")" && pwd)}" + +# 插件包里测试在 tests/,工作区在 miniapp/node/。 +PAIRS=( + "config-fidelity.test.mjs" + "decision.test.mjs" + "mcp.test.mjs" + "server-lint.test.mjs" +) + +fail=0 +for f in "${PAIRS[@]}"; do + a="$WORKSPACE/miniapp/node/$f" + b="$PLUGIN/tests/$f" + if [ ! -f "$a" ] || [ ! -f "$b" ]; then + echo " SKIP $f(缺文件)" + continue + fi + # 归一化:去掉 import 路径差异与空白差异。 + na=$(sed -E "s#\.\./miniapp/node/##g; s#'\./#'#g" "$a" | tr -d ' \t\r\n') + nb=$(sed -E "s#\.\./miniapp/node/##g; s#'\./#'#g" "$b" | tr -d ' \t\r\n') + if [ "$na" = "$nb" ]; then + echo " OK $f" + else + echo " DIFF $f ← 工作区与插件包不一致" + diff <(sed -E "s#\.\./miniapp/node/##g; s#'\./#'#g" "$a") \ + <(sed -E "s#\.\./miniapp/node/##g; s#'\./#'#g" "$b") | head -12 || true + fail=1 + fi +done + +if [ "$fail" -ne 0 ]; then + echo + echo "❌ 工作区与插件包的测试文件不一致 —— 改完记得两边都同步。" + exit 1 +fi +echo +echo "✅ 工作区与插件包的测试文件一致" diff --git a/plugins/hylouis233/expiry-guardian/daemon/bg_decision.test.py b/plugins/hylouis233/expiry-guardian/daemon/bg_decision.test.py new file mode 100644 index 0000000..2d2b3c3 --- /dev/null +++ b/plugins/hylouis233/expiry-guardian/daemon/bg_decision.test.py @@ -0,0 +1,117 @@ +#!/usr/bin/env python3 +"""后台决策测试 —— 逐条对齐 Mini App「蹬王之王」的 decide()。 + +Mini App 的分支(packages/expiry-guardian/miniapp/node/server.mjs::decide): + 未耗尽 → idle + 耗尽 + 无积分 + 有卡 → use-card + 耗尽 + 无积分 + 无卡 → wait + 耗尽 + 有积分 + 无卡 → keep-credit + 耗尽 + 都有,卡先过期 → use-card + 耗尽 + 都有,积分先过期 → keep-credit + +本文件逐条复刻这些分支,任一不一致即视为失败。 +纯函数测试:不触网、不扣卡。 +""" +import importlib.util +import sys +import time +from pathlib import Path + +spec = importlib.util.spec_from_file_location( + "bg", Path(__file__).with_name("reset_card_autouse.py") +) +m = importlib.util.module_from_spec(spec) +sys.modules["bg"] = m +spec.loader.exec_module(m) + +NOW = int(time.time() * 1000) +DAY = 86400000 + + +def qs(quota_type, used, total=100.0, unlimited=False): + return m.QuotaState(quota_type=quota_type, total=total, used=used, is_unlimited=unlimited) + + +def card(days): + return { + "card_id": f"C{days}", + "out_biz_no": f"biz:{days}", + "source_type": "mcode_signin", + "expire_time": NOW + days * DAY, + } + + +passed = failed = 0 + + +def check(name, got, want): + global passed, failed + if got == want: + passed += 1 + print(f" PASS {name} -> {got}") + else: + failed += 1 + print(f" FAIL {name} -> {got} (want {want})") + + +def decide(used5, used7d=None, cards=None, credit_days=None): + quotas = [qs(1, used5)] + quotas.append(qs(2, 0, unlimited=True) if used7d is None else qs(2, used7d)) + exp = None if credit_days is None else NOW + credit_days * DAY + return m.decide_background(quotas, cards or [], exp, "平台积分")[0] + + +print("=== Mini App 分支 1:未到触发线(99%) → idle ===") +# 上界取 98 而不是 99:触发线就是 99%,99% 已经属于「该动手了」, +# 那条在下面单独断言。早先这里写的是 99,是 99% 提前触发设计落地之前的残留。 +for pct in (0, 50, 90, 98): + check(f"5h 已用 {pct}% → idle", decide(pct, cards=[card(7)], credit_days=13), "idle") + +# 触发线本身就应该动手 —— 额度没真正耗尽,但再等一次请求就会失败。 +check("5h 已用 99% → use-card(触发线)", decide(99, cards=[card(7)], credit_days=13), "use-card") + +print("\n=== Mini App 分支 2:耗尽 + 无积分 + 有卡 → use-card ===") +check("5h 100% + 无积分 + 有卡", decide(100, cards=[card(7)], credit_days=None), "use-card") + +print("\n=== Mini App 分支 3:耗尽 + 无积分 + 无卡 → wait ===") +check("5h 100% + 无积分 + 无卡", decide(100, cards=[], credit_days=None), "wait") + +print("\n=== Mini App 分支 4:耗尽 + 有积分 + 无卡 → keep-credit ===") +check("5h 100% + 有积分 + 无卡", decide(100, cards=[], credit_days=13), "keep-credit") + +print("\n=== Mini App 分支 5:耗尽 + 都有 + 卡先过期 → use-card ===") +check("卡 7 天 / 积分 13 天", decide(100, cards=[card(7)], credit_days=13), "use-card") +check("卡 5 天 / 积分 30 天", decide(100, cards=[card(5)], credit_days=30), "use-card") + +print("\n=== Mini App 分支 6:耗尽 + 都有 + 积分先过期 → keep-credit ===") +check("卡 20 天 / 积分 5 天", decide(100, cards=[card(20)], credit_days=5), "keep-credit") +check("卡 30 天 / 积分 1 天", decide(100, cards=[card(30)], credit_days=1), "keep-credit") + +print("\n=== 周限额单独耗尽也应触发(与 Mini App 的 weekly.exhausted 一致)===") +check("5h 未耗尽 + 周 100% → 进入判定", + decide(10, used7d=100, cards=[card(7)], credit_days=13), "use-card") +check("5h 未耗尽 + 周未耗尽 → idle", + decide(10, used7d=50, cards=[card(7)], credit_days=13), "idle") + +print("\n=== 不限量的周限额不算耗尽(与 is_unlimited 判定一致)===") +check("周不限量 + 5h 100% + 卡先过期", decide(100, cards=[card(7)], credit_days=13), "use-card") + +print("\n=== 理由文本 ===") +cases = [ + ("未耗尽", ([qs(1, 50), qs(2, 0, unlimited=True)], [card(7)], NOW + 13 * DAY, "平台积分"), "额度充足"), + ("无积分用卡", ([qs(1, 100), qs(2, 0, unlimited=True)], [card(7)], None, ""), "没有可用积分"), + ("无卡留积分", ([qs(1, 100), qs(2, 0, unlimited=True)], [], NOW + 13 * DAY, "平台积分"), "没有可用的重置卡"), + ("卡先过期", ([qs(1, 100), qs(2, 0, unlimited=True)], [card(7)], NOW + 13 * DAY, "平台积分"), "先用卡保住积分"), + ("积分先过期", ([qs(1, 100), qs(2, 0, unlimited=True)], [card(20)], NOW + 5 * DAY, "平台积分"), "让积分先消耗"), +] +for label, args, needle in cases: + _, reason = m.decide_background(*args) + ok = isinstance(reason, str) and needle in reason + if ok: + passed += 1 + else: + failed += 1 + print(f" {'PASS' if ok else 'FAIL'} {label}: {reason}") + +print(f"\n{passed}/{passed + failed} passed") +sys.exit(0 if failed == 0 else 1) diff --git a/plugins/hylouis233/expiry-guardian/daemon/bg_parity.json b/plugins/hylouis233/expiry-guardian/daemon/bg_parity.json new file mode 100644 index 0000000..73acd83 --- /dev/null +++ b/plugins/hylouis233/expiry-guardian/daemon/bg_parity.json @@ -0,0 +1,65 @@ +{ + "at": "2026-10-16T19:07:04.579Z", + "results": [ + { + "n": "未耗尽 / 卡7 / 积13", + "action": "idle", + "reason": "额度充足,暂不需要处理" + }, + { + "n": "未耗尽 / 无卡 / 积13", + "action": "idle", + "reason": "额度充足,暂不需要处理" + }, + { + "n": "耗尽 / 卡先过期", + "action": "use-card", + "reason": "重置卡(10月24日)比平台积分(10月30日)先过期,先用卡保住积分" + }, + { + "n": "耗尽 / 积分先过期", + "action": "use-credit", + "reason": "平台积分(10月22日)比重置卡(11月6日)先过期,不用卡,让积分先消耗" + }, + { + "n": "耗尽 / 无卡 / 有积分", + "action": "use-credit", + "reason": "没有可用的重置卡,让平台积分(10月30日到期)先消耗" + }, + { + "n": "耗尽 / 有卡 / 无积分", + "action": "use-card", + "reason": "没有可用积分,使用重置卡重置额度" + }, + { + "n": "耗尽 / 无卡 / 无积分", + "action": "wait", + "reason": "额度已耗尽,既没有积分也没有可用的重置卡" + }, + { + "n": "周限额耗尽 / 5h未耗尽", + "action": "use-card", + "reason": "重置卡(10月24日)比平台积分(10月30日)先过期,先用卡保住积分" + }, + { + "n": "周限额耗尽 / 积分先过期", + "action": "use-credit", + "reason": "平台积分(10月22日)比重置卡(11月6日)先过期,不用卡,让积分先消耗" + }, + { + "n": "周限额未耗尽 / 5h未耗尽", + "action": "idle", + "reason": "额度充足,暂不需要处理" + }, + { + "n": "5h 99% 不算耗尽", + "action": "idle", + "reason": "额度充足,暂不需要处理" + }, + { + "n": "5h 100% 边界算耗尽", + "action": "use-card", + "reason": "重置卡(10月18日)比平台积分(12月16日)先过期,先用卡保住积分" + } + ] +} \ No newline at end of file diff --git a/plugins/hylouis233/expiry-guardian/daemon/check-parity.sh b/plugins/hylouis233/expiry-guardian/daemon/check-parity.sh new file mode 100755 index 0000000..7df1c84 --- /dev/null +++ b/plugins/hylouis233/expiry-guardian/daemon/check-parity.sh @@ -0,0 +1,73 @@ +#!/bin/sh +# 一致性总检查:决策单测 + 跨语言一致性 + 校验器自检。 +# +# 第三步是重点:如果校验器对「已知错误」也报一致,那它本身失效了, +# 等于没有校验。所以这里主动注入一处漂移,要求必须被抓到。 +# +# 任一环节失败即以非零退出,可直接挂到 CI 或 git hook 上。 +set -e +DIR="$(cd "$(dirname "$0")" && pwd)" +cd "$DIR" + +TMP="$(mktemp -d)" +trap 'rm -rf "$TMP"' EXIT +fail=0 + +echo "=== 1/3 后台决策单测 ===" +if python3 bg_decision.test.py > "$TMP/unit.log" 2>&1; then + tail -1 "$TMP/unit.log" +else + echo "✗ 决策单测失败" + tail -20 "$TMP/unit.log" + fail=1 +fi + +echo +echo "=== 2/3 跨语言一致性(后台 vs Mini App「蹬王之王」)===" +if node verify-parity.mjs > "$TMP/parity.log" 2>&1; then + tail -1 "$TMP/parity.log" +else + echo "✗ 两边策略已漂移" + tail -25 "$TMP/parity.log" + fail=1 +fi + +echo +echo "=== 3/3 校验器自检(注入漂移必须被抓到)===" +python3 - "$TMP" <<'PY' +import pathlib, sys +tmp = pathlib.Path(sys.argv[1]) +src = pathlib.Path("reset_card_autouse.py").read_text() +needle = 'f"没有可用的重置卡,让{credit_desc}({_fmt_day(credit_expiry_ms)}到期)先消耗"' +if needle not in src: + print("✗ 自检锚点已失效:后台代码结构变了,请同步更新 check-parity.sh") + raise SystemExit(1) +# 把「无卡 → keep-credit」改成「无卡 → wait」,这是一处真实的漂移 +broken = src.replace( + 'return "keep-credit", (\n ' + needle, + 'return "wait", "自检注入的错误行为"', +) +if broken == src: + print("✗ 注入失败:目标分支结构与预期不符") + raise SystemExit(1) +(tmp / "broken.py").write_text(broken) +PY + +if [ ! -f "$TMP/broken.py" ]; then + echo "✗ 自检注入失败,跳过" + fail=1 +elif MCODE_BG_SCRIPT="$TMP/broken.py" node verify-parity.mjs > "$TMP/selftest.log" 2>&1; then + echo "✗ 校验器对注入的漂移仍报一致 —— 校验器本身已失效" + fail=1 +else + echo "✓ 成功检出注入的漂移" + grep -m1 '动作不一致' "$TMP/selftest.log" | sed 's/^/ /' || true +fi + +echo +if [ "$fail" -eq 0 ]; then + echo "✓ 全部通过:后台服务与 Mini App 策略一致" +else + echo "✗ 存在不一致,需修复" +fi +exit "$fail" diff --git a/plugins/hylouis233/expiry-guardian/daemon/reset_card_autouse.py b/plugins/hylouis233/expiry-guardian/daemon/reset_card_autouse.py new file mode 100755 index 0000000..db7a544 --- /dev/null +++ b/plugins/hylouis233/expiry-guardian/daemon/reset_card_autouse.py @@ -0,0 +1,460 @@ +#!/usr/bin/env python3 +"""决策基准(纯函数,无网络、无凭据、无状态)。 + +社区插件不能读取 MiniMax Code 的登录凭据、不能读写宿主内部数据库 +(2026-10-20 管理员 review),所以这个文件**不再**是「后台守护进程」, +而只保留**决策逻辑本身** —— 作为三方一致性校验的第三个比对基准: + + Rust 守护进程 · Mini App「蹬王之王」 · 本文件(Python) + ↘ 动作 + 理由文本逐字比对 ↙ + +⚠️ 理由文本必须**逐字一致**(`verify-parity.mjs` 会逐字比对), +所以本文件里的 `decide_background()` 与 Rust 的 `decision::decide()`、 +Mini App 的 `decide()` 是**同构实现**,改一处就要同步三处。 +""" + +from __future__ import annotations + +import json +import os +import time +from dataclasses import dataclass +from datetime import datetime +from typing import Any + +# ── 常量:与桌面端保持一致 ──────────────────────────────────────────────────── +# 账号/计费接口的真实根地址(取自桌面端 d5 的生产分支)。 +# 注意:不是 agent.minimax.cn —— 那是网页域,对 /backend/account/* 一律 404。 +# Code 积分走另一个域名(platform 域对这些路径返回非 JSON) + +QUOTA_FIVE_HOUR = 1 +QUOTA_WEEKLY = 2 +QUOTA_VIDEO = 3 + +# 判定阈值的**默认值**,仅在 config.json 缺失/非法时兜底。 +# 实际生效值一律来自 load_config() —— 与 Node / Rust 读同一个文件。 +QUOTA_TRIGGER_PERCENT = 99.0 +# 四档红绿灯的两个分界点(功能3)。燃尽档由 used >= total 判定,不可配。 +QUOTA_TIGHT_PERCENT = 80.0 +QUOTA_LOW_PERCENT = 95.0 +# 距 5 小时额度刷新不足这么多分钟时,不消耗重置卡(额度马上就自己回来了)。 +# 实际生效值来自 config.json 的 cardSkipBeforeResetMinutes。 +QUOTA_CARD_SKIP_BEFORE_RESET_MINUTES = 60.0 + +# 等级 → 中文。**属于 parity 契约的一部分**,改一个字三方都要改。 +LEVEL_LABEL = { + "comfortable": "额度充足", + "tight": "额度紧张", + "low": "额度不足", + "burned": "额度燃尽", +} + +QUOTA_LABEL = { + QUOTA_FIVE_HOUR: "5小时限额", + QUOTA_WEEKLY: "周限额", + QUOTA_VIDEO: "视频限额", +} + +# ── 共享配置(功能1/2/3)──────────────────────────────────────────────────── +# 与 Mini App 侧、Rust 侧读同一个文件: +# ~/.config/mcode-reset-card/config.json +CONFIG_PATH = os.path.expanduser("~/.config/mcode-reset-card/config.json") + +CONFIG_DIR = os.path.dirname(CONFIG_PATH) + + +def default_config() -> dict[str, Any]: + return { + "schemaVersion": 1, + "cardTriggerPercent": QUOTA_TRIGGER_PERCENT, + "cardSkipBeforeResetMinutes": QUOTA_CARD_SKIP_BEFORE_RESET_MINUTES, + "resumeCronId": "", + "quotaLevels": {"tight": QUOTA_TIGHT_PERCENT, "low": QUOTA_LOW_PERCENT}, + "goalPause": {"enabled": False, "triggerPercent": QUOTA_TRIGGER_PERCENT, + "resumeAtPercent": 0.0}, + } + + +def _clamp(v: Any, lo: float, hi: float, fallback: float) -> float: + try: + f = float(v) + except (TypeError, ValueError): + return fallback + if f != f: # NaN + return fallback + return min(hi, max(lo, f)) + + +def normalize_config(raw: Any) -> tuple[dict[str, Any], list[str]]: + """逐字段校验并夹紧,返回 (配置, 问题列表)。 + + 非法组合**整体回退默认并报出来**,绝不静默纠正 —— + 静默纠正会让人以为自己设的生效了。 + """ + d = default_config() + issues: list[str] = [] + src = raw if isinstance(raw, dict) else {} + if raw is not None and not isinstance(raw, dict): + issues.append("配置根节点不是对象") + + raw_card = src.get("cardTriggerPercent") + card = _clamp(raw_card, 1.0, 100.0, d["cardTriggerPercent"]) + if raw_card is not None: + try: + if float(raw_card) != card: + issues.append(f"cardTriggerPercent={raw_card} 超出 1..100,已夹到 {card}") + except (TypeError, ValueError): + issues.append(f"cardTriggerPercent={raw_card} 不是数字,已用默认值 {card}") + + lv = src.get("quotaLevels") if isinstance(src.get("quotaLevels"), dict) else {} + tight = _clamp(lv.get("tight"), 1.0, 100.0, d["quotaLevels"]["tight"]) + low = _clamp(lv.get("low"), 1.0, 100.0, d["quotaLevels"]["low"]) + if not tight < low: + if lv: + issues.append( + f"quotaLevels 需满足 tight < low(收到 tight={tight} low={low}),已整体回退默认") + tight = d["quotaLevels"]["tight"] + low = d["quotaLevels"]["low"] + + gp = src.get("goalPause") if isinstance(src.get("goalPause"), dict) else {} + raw_skip = src.get("cardSkipBeforeResetMinutes") + skip = _clamp(raw_skip, 0.0, 1440.0, d["cardSkipBeforeResetMinutes"]) + if raw_skip is not None and skip != _clamp(raw_skip, 0.0, 1440.0, d["cardSkipBeforeResetMinutes"]): + issues.append(f"cardSkipBeforeResetMinutes={raw_skip} 超出 0..1440,已夹到 {skip}") + return { + "schemaVersion": 1, + "cardTriggerPercent": card, + "cardSkipBeforeResetMinutes": skip, + "resumeCronId": str(src.get("resumeCronId") or "").strip(), + "quotaLevels": {"tight": tight, "low": low}, + "goalPause": { + "enabled": gp.get("enabled") is True, + "triggerPercent": _clamp(gp.get("triggerPercent"), 1.0, 100.0, + d["goalPause"]["triggerPercent"]), + "resumeAtPercent": _clamp(gp.get("resumeAtPercent"), 0.0, 100.0, + d["goalPause"]["resumeAtPercent"]), + }, + }, issues + + +def load_config() -> tuple[dict[str, Any], list[str]]: + """读配置。文件不存在是正常情况(首次运行),返回默认值且不报 issue。""" + try: + with open(CONFIG_PATH, encoding="utf-8") as f: + raw = json.load(f) + except FileNotFoundError: + return default_config(), [] + except (OSError, ValueError) as e: + return default_config(), [f"配置读取失败({e}),正在用默认值"] + return normalize_config(raw) + +# 桌面端 base_resp 业务错误码 → 语义 +ERR_UNAUTHORIZED = 1004 +ERR_GROUP_NOT_MEMBER = 1003 +ERR_PERMISSION_DENIED = 2029 +ERR_INVALID_PARAMS = 2013 + + +@dataclass +class QuotaState: + """一个限额维度的用量状态。""" + + quota_type: int + total: float = 0.0 + used: float = 0.0 + is_unlimited: bool = False + reset_time: int | None = None + + def is_triggered(self, trigger_percent: float) -> bool: + """是否达到扣卡触发线。 + + 阈值必须**显式传入** —— 写死在本类里正是当初三方漂移的根源: + 配置改了,这里还按 99 算,而且不报错。 + """ + if self.is_unlimited or self.total <= 0.0: + return False + return self.used >= self.total * trigger_percent / 100.0 + + def level(self, tight: float = QUOTA_TIGHT_PERCENT, + low: float = QUOTA_LOW_PERCENT) -> str: + """四档红绿灯分档。与 Rust ``quota_level()`` 逐行对应。 + + 燃尽档由 used >= total 判定,**不可配** —— 它是事实,不是阈值。 + """ + if self.is_unlimited or self.total <= 0.0: + return "comfortable" + if self.used >= self.total: + return "burned" + ratio = self.used / self.total * 100.0 + if ratio >= low: + return "low" + if ratio >= tight: + return "tight" + return "comfortable" + + @property + def exhausted(self) -> bool: + """是否已耗尽。 + + 接口语义(对齐桌面端 V/q 两个转换函数): + used = *_used_percent → **已用百分比**,如 "71%" → 71 + total = *_total_percent → 总额度百分比,缺省按 100 计 + + 所以耗尽就是「已用百分比 ≥ 总额度百分比」。不限量(status===3)不算耗尽。 + """ + if self.is_unlimited or self.total <= 0: + return False + return self.used >= self.total - 1e-9 + + @property + def remaining_percent(self) -> float: + if self.is_unlimited or self.total <= 0: + return 100.0 + return max(0.0, (self.total - self.used) / self.total * 100.0) + + def describe(self) -> str: + if self.is_unlimited: + return f"{QUOTA_LABEL.get(self.quota_type, self.quota_type)}=不限量" + return (f"{QUOTA_LABEL.get(self.quota_type, self.quota_type)}=" + f"已用{self.used:.0f}% / 剩余{self.remaining_percent:.0f}%") + + +def _amount(value: Any, default: float = 0.0) -> float: + if isinstance(value, str): + value = value.replace(",", "").strip() + try: + n = float(value) + return n if n == n else default + except (TypeError, ValueError): + return default + + +def _fmt_day(ms: int | None) -> str: + if not ms: + return "未知" + d = datetime.fromtimestamp(ms / 1000) + return f"{d.month}月{d.day}日" + + +def _minutes_to_reset(q: "QuotaState | None", now_ms: int) -> float | None: + """某个额度维度距离刷新还有多少分钟。取不到刷新时间时返回 None。 + + 与 Rust 的 `minutes_to_reset()` 同一口径:已过去的时间按 0 算。 + """ + if q is None or q.reset_time is None: + return None + return max(0.0, (q.reset_time - now_ms) / 60_000.0) + + +def decide_background( + quotas: list[QuotaState], + usable_cards: list[dict[str, Any]], + credit_expiry_ms: int | None, + credit_desc: str, + cfg: dict[str, Any] | None = None, + now_ms: int | None = None, + credit_data_complete: bool = True, +) -> tuple[str, str]: + """后台扣卡决策,返回 (动作, 理由)。 + + `credit_data_complete` 表示「积分数据是否**完整读到**」。 + + ⚠️ 2026-10-19 PR #28 review 修:读不到 ≠ 没有。 + `credit_expiry_ms = None` 同时可能表示「确实没有积分」与「接口读失败」, + 以前两者都落到 use-card —— 而扣卡是真实写操作, + 网络故障会被当成业务状态,可能误扣真卡。 + ⇒ 数据不完整时一律**不做写操作**(wait),只如实报出来。 + + 动作 ∈ {"use-card", "keep-credit", "idle", "wait"}。纯函数,不触碰网络,可直接单测。 + + **分支与 Mini App「蹬王之王」的 decide() 一一对应**,刻意保持同构: + + 未耗尽 → idle (额度等级 + 已用量 + 未到触发线) + 耗尽 + 无积分 + 有卡 → use-card (没有可用积分,用卡重置额度) + 耗尽 + 无积分 + 无卡 → wait + 耗尽 + 有积分 + 无卡 → keep-credit (没卡可用,让积分先消耗) + 耗尽 + 都有,卡先过期 → use-card (先用卡保住积分) + 耗尽 + 都有,积分先过期 → keep-credit (让积分先消耗,留住更耐放的卡) + + `cfg` 省略时从共享配置文件读取(与 Node / Rust 读同一个文件)。 + `now_ms` 用于判断「额度是不是马上就要刷新了」。 + """ + if cfg is None: + cfg, _issues = load_config() + if now_ms is None: + now_ms = int(time.time() * 1000) + + trigger = float(cfg["cardTriggerPercent"]) + tight = float(cfg["quotaLevels"]["tight"]) + low = float(cfg["quotaLevels"]["low"]) + skip_minutes = float(cfg.get("cardSkipBeforeResetMinutes", QUOTA_CARD_SKIP_BEFORE_RESET_MINUTES)) + + by_type = {q.quota_type: q for q in quotas} + five = by_type.get(QUOTA_FIVE_HOUR) + weekly = by_type.get(QUOTA_WEEKLY) + + five_exhausted = bool(five and five.is_triggered(trigger)) + weekly_exhausted = bool(weekly and weekly.is_triggered(trigger)) + + # ── 5 小时额度即将自己刷新 → 不烧重置卡(纯浪费)── + reset_in_min = _minutes_to_reset(five, now_ms) + skip_card_reason = None + if skip_minutes > 0 and reset_in_min is not None and reset_in_min <= skip_minutes: + skip_card_reason = f"5 小时额度 {reset_in_min:.0f} 分钟后刷新,暂不消耗重置卡" + + # ── 未到触发线:与 Mini App 一致,不做任何事 ── + if not five_exhausted and not weekly_exhausted: + used5 = five.used if five is not None else 0.0 + # 等级词随分档走,而不是永远写「额度充足」—— + # 否则用量 92% 时页面上仍显示「额度充足」,是误导。 + # 把触发线也说进来:否则「额度不足但暂不需要处理」看起来自相矛盾。 + # burned 永远不会出现在这里:它必然已 triggered,走的是下面用卡/留卡分支。 + level = five.level(tight, low) if five is not None else "comfortable" + return "idle", ( + f"{LEVEL_LABEL[level]}(5 小时已用 {used5:.0f}%)," + f"未到 {trigger:.0f}% 触发线,暂不动用重置卡" + ) + + # ── 积分数据没读全 ⇒ 无法判断「卡先过期还是积分先过期」── + # ⇒ 绝不做写操作(扣卡是真实消耗,宁可等下一轮)。 + if not credit_data_complete: + return "wait", "积分数据读取不完整,本轮不执行写操作(等下一轮重新判定)" + + # ── 无可用积分:只能靠卡把额度重置回来 ── + if credit_expiry_ms is None: + if usable_cards: + if skip_card_reason: + return "wait", skip_card_reason + return "use-card", "没有可用积分,使用重置卡重置额度" + return "wait", "额度已耗尽,既没有积分也没有可用的重置卡" + + # ── 有积分但没有可用卡:让积分先消耗 ── + if not usable_cards: + return "keep-credit", ( + f"没有可用的重置卡,让{credit_desc}({_fmt_day(credit_expiry_ms)}到期)先消耗" + ) + + card_expiry = usable_cards[0].get("expire_time") + if card_expiry is None: + return "keep-credit", "没有可用重置卡,让积分先消耗" + + # ── 两者都有:比「先过期先用」 ── + if card_expiry < credit_expiry_ms: + if skip_card_reason: + return "wait", skip_card_reason + return "use-card", ( + f"重置卡({_fmt_day(card_expiry)})比{credit_desc}({_fmt_day(credit_expiry_ms)})先过期," + f"先用卡保住积分" + ) + return "keep-credit", ( + f"{credit_desc}({_fmt_day(credit_expiry_ms)})比重置卡({_fmt_day(card_expiry)})先过期," + f"不用卡,让积分先消耗" + ) + + +def decide_background( + quotas: list[QuotaState], + usable_cards: list[dict[str, Any]], + credit_expiry_ms: int | None, + credit_desc: str, + cfg: dict[str, Any] | None = None, + now_ms: int | None = None, + credit_data_complete: bool = True, +) -> tuple[str, str]: + """后台扣卡决策,返回 (动作, 理由)。 + + `credit_data_complete` 表示「积分数据是否**完整读到**」。 + + ⚠️ 2026-10-19 PR #28 review 修:读不到 ≠ 没有。 + `credit_expiry_ms = None` 同时可能表示「确实没有积分」与「接口读失败」, + 以前两者都落到 use-card —— 而扣卡是真实写操作, + 网络故障会被当成业务状态,可能误扣真卡。 + ⇒ 数据不完整时一律**不做写操作**(wait),只如实报出来。 + + 动作 ∈ {"use-card", "keep-credit", "idle", "wait"}。纯函数,不触碰网络,可直接单测。 + + **分支与 Mini App「蹬王之王」的 decide() 一一对应**,刻意保持同构: + + 未耗尽 → idle (额度等级 + 已用量 + 未到触发线) + 耗尽 + 无积分 + 有卡 → use-card (没有可用积分,用卡重置额度) + 耗尽 + 无积分 + 无卡 → wait + 耗尽 + 有积分 + 无卡 → keep-credit (没卡可用,让积分先消耗) + 耗尽 + 都有,卡先过期 → use-card (先用卡保住积分) + 耗尽 + 都有,积分先过期 → keep-credit (让积分先消耗,留住更耐放的卡) + + `cfg` 省略时从共享配置文件读取(与 Node / Rust 读同一个文件)。 + `now_ms` 用于判断「额度是不是马上就要刷新了」。 + """ + if cfg is None: + cfg, _issues = load_config() + if now_ms is None: + now_ms = int(time.time() * 1000) + + trigger = float(cfg["cardTriggerPercent"]) + tight = float(cfg["quotaLevels"]["tight"]) + low = float(cfg["quotaLevels"]["low"]) + skip_minutes = float(cfg.get("cardSkipBeforeResetMinutes", QUOTA_CARD_SKIP_BEFORE_RESET_MINUTES)) + + by_type = {q.quota_type: q for q in quotas} + five = by_type.get(QUOTA_FIVE_HOUR) + weekly = by_type.get(QUOTA_WEEKLY) + + five_exhausted = bool(five and five.is_triggered(trigger)) + weekly_exhausted = bool(weekly and weekly.is_triggered(trigger)) + + # ── 5 小时额度即将自己刷新 → 不烧重置卡(纯浪费)── + reset_in_min = _minutes_to_reset(five, now_ms) + skip_card_reason = None + if skip_minutes > 0 and reset_in_min is not None and reset_in_min <= skip_minutes: + skip_card_reason = f"5 小时额度 {reset_in_min:.0f} 分钟后刷新,暂不消耗重置卡" + + # ── 未到触发线:与 Mini App 一致,不做任何事 ── + if not five_exhausted and not weekly_exhausted: + used5 = five.used if five is not None else 0.0 + # 等级词随分档走,而不是永远写「额度充足」—— + # 否则用量 92% 时页面上仍显示「额度充足」,是误导。 + # 把触发线也说进来:否则「额度不足但暂不需要处理」看起来自相矛盾。 + # burned 永远不会出现在这里:它必然已 triggered,走的是下面用卡/留卡分支。 + level = five.level(tight, low) if five is not None else "comfortable" + return "idle", ( + f"{LEVEL_LABEL[level]}(5 小时已用 {used5:.0f}%)," + f"未到 {trigger:.0f}% 触发线,暂不动用重置卡" + ) + + # ── 积分数据没读全 ⇒ 无法判断「卡先过期还是积分先过期」── + # ⇒ 绝不做写操作(扣卡是真实消耗,宁可等下一轮)。 + if not credit_data_complete: + return "wait", "积分数据读取不完整,本轮不执行写操作(等下一轮重新判定)" + + # ── 无可用积分:只能靠卡把额度重置回来 ── + if credit_expiry_ms is None: + if usable_cards: + if skip_card_reason: + return "wait", skip_card_reason + return "use-card", "没有可用积分,使用重置卡重置额度" + return "wait", "额度已耗尽,既没有积分也没有可用的重置卡" + + # ── 有积分但没有可用卡:让积分先消耗 ── + if not usable_cards: + return "keep-credit", ( + f"没有可用的重置卡,让{credit_desc}({_fmt_day(credit_expiry_ms)}到期)先消耗" + ) + + card_expiry = usable_cards[0].get("expire_time") + if card_expiry is None: + return "keep-credit", "没有可用重置卡,让积分先消耗" + + # ── 两者都有:比「先过期先用」 ── + if card_expiry < credit_expiry_ms: + if skip_card_reason: + return "wait", skip_card_reason + return "use-card", ( + f"重置卡({_fmt_day(card_expiry)})比{credit_desc}({_fmt_day(credit_expiry_ms)})先过期," + f"先用卡保住积分" + ) + return "keep-credit", ( + f"{credit_desc}({_fmt_day(credit_expiry_ms)})比重置卡({_fmt_day(card_expiry)})先过期," + f"不用卡,让积分先消耗" + ) + + diff --git a/plugins/hylouis233/expiry-guardian/daemon/rust/.gitignore b/plugins/hylouis233/expiry-guardian/daemon/rust/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/plugins/hylouis233/expiry-guardian/daemon/rust/.gitignore @@ -0,0 +1 @@ +/target diff --git a/plugins/hylouis233/expiry-guardian/daemon/rust/Cargo.lock b/plugins/hylouis233/expiry-guardian/daemon/rust/Cargo.lock new file mode 100644 index 0000000..5c0dc4d --- /dev/null +++ b/plugins/hylouis233/expiry-guardian/daemon/rust/Cargo.lock @@ -0,0 +1,833 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "base64" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5" + +[[package]] +name = "bytes" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" + +[[package]] +name = "cc" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6651c9ed80effdc7db0ff72512157f901af5e3549e341e24b1dd4887d836d838" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" + +[[package]] +name = "cookie" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a373e3602691c3cdea496d2f0ee5935151e6168fe87739483c463db1b2f2f87" +dependencies = [ + "percent-encoding", + "time", + "version_check", +] + +[[package]] +name = "cookie_store" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15b2c103cf610ec6cae3da84a766285b42fd16aad564758459e6ecf128c75206" +dependencies = [ + "cookie", + "document-features", + "idna", + "indexmap", + "log", + "serde", + "serde_derive", + "serde_json", + "time", + "url", +] + +[[package]] +name = "crc32fast" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01a7799fd6b852db0e61728dde9a204c423b44d689dbd432522543614b490e78" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "deranged" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e9de72ce2ad1f90dc62fa25f0f430ef85eb4b0d8fa0be4f30373bc40a21d28e" + +[[package]] +name = "displaydoc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "document-features" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" +dependencies = [ + "litrs", +] + +[[package]] +name = "equivalent" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00d174d5400e5e8fd687ad1049e2f578285fa914201b1af7e8b112a4546bd826" + +[[package]] +name = "find-msvc-tools" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aedcfb3409746eddb02b9e19ebda1c3394f759a152e48ee875a0844d1b955484" + +[[package]] +name = "flate2" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e634e2e0ebac1ee034020da1ca582e17ffe4e0f5e985823721e168928136dcb" +dependencies = [ + "crc32fast", + "miniz_oxide", + "zlib-rs", +] + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" + +[[package]] +name = "http" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "918d3568bebf352712bc2ef3d46a8bcf1a75b373be6539de198e9105cbbf9ce0" +dependencies = [ + "bytes", + "itoa", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "icu_collections" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa68d21081c4a05d5a901a1c62add574c77048b6a1c67be3b50ce0b60d4ca513" +dependencies = [ + "displaydoc", + "potential_utf", + "utf8_iter", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d56e28588da92eee5c3201a6eff33fabdd49b62269c8938d4ff050ce4d900deb" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f9cf5f235641ed274641dd81c3f28d870e276763d0797aeeab72317b1c646f" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1563da1ed3e0b3bf3d74c9b85917ac9c56464d2f57242270c09c9e752f8021a0" + +[[package]] +name = "icu_properties" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e7ca276ad3145661a65914e6daf131ca5120cd3dcee8f8f3214b8875184a148" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa" + +[[package]] +name = "icu_provider" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d27bbb9d3abbefac45d55f647c9de1d44aafcd1186eb91879afef17c396c3e73" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "2.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "libc" +version = "0.2.190" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce5d3ddc6d3fa000eb1536d85e147bfe31aacaba692ed6a876f95cb7c855be78" + +[[package]] +name = "litemap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" + +[[package]] +name = "litrs" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4744e383959f0db86ede514b809b1c53251889093803c05267acc7d4e7030d70" + +[[package]] +name = "log" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "miniz_oxide" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b63fbc4a50860e98e7b2aa7804ded1db5cbc3aff9193adaff57a6931bf7c4b4c" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "num-conv" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "potential_utf" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a6394b9e965e73d0a289ee54f589087e2c676aedf60885baf52c76b771e4958" + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "reset-card-daemon" +version = "1.0.0" +dependencies = [ + "serde", + "serde_json", + "ureq", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "untrusted", + "windows-sys", +] + +[[package]] +name = "rustls" +version = "0.23.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e13bd8c0e9365c43cfa5c9e8f9ad49d3c8444926c9aac819e0e4dc503c8fdf" +dependencies = [ + "log", + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pki-types" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96" +dependencies = [ + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c3cf1d8b1e7d4927e2d154c3fcb02979afb9939629c62cd9048d4f07b60ac2" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.154" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7e9cc8b1b85264074fbcc02a88680c4096b1e47df8f739dceb03bf482f04bd6" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + +[[package]] +name = "simd-adler32" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" + +[[package]] +name = "smallvec" +version = "1.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b3dc8af474f516a851ff4bd12db780f948b9250ad37211e4eec0bccea54e01b" + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "3.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d78c8dee4c7bf0e14673097256fed6142ce9d3b85a408189d07482442145823b" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "synstructure" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "time" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb87b95ec50ddfa440816d227a17b2ccbdda963a316a727fda0fc4334f7d134" +dependencies = [ + "deranged", + "num-conv", + "powerfmt", + "serde_core", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" + +[[package]] +name = "time-macros" +version = "0.2.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinystr" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "unicode-ident" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "ureq" +version = "3.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a7ac20be9b7726e0bbdbf974c059676d9acb1cd414961f570a4e8231cacd7fc" +dependencies = [ + "base64", + "cookie_store", + "flate2", + "log", + "percent-encoding", + "rustls", + "rustls-pki-types", + "serde", + "serde_json", + "ureq-proto", + "utf8-zero", + "webpki-roots", +] + +[[package]] +name = "ureq-proto" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f86fd172ccca569e458f61b6bdd6220965a9ef36e672a6852953b51a0e1583be" +dependencies = [ + "base64", + "http", + "httparse", + "log", +] + +[[package]] +name = "url" +version = "2.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "utf8-zero" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8c0a043c9540bae7c578c88f91dda8bd82e59ae27c21baca69c8b191aaf5a6e" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "webpki-roots" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dcd9d09a39985f5344844e66b0c530a33843579125f23e21e9f0f220850f22a" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "writeable" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc" + +[[package]] +name = "yoke" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec8ebde2db3681e8c9980cc27822030e68752690ddfa9473e739aeb4dbde6d71" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerofrom" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f75b4683f6c7f45248d4d64056a24298c6281e0993356d7d1b4a1a962ef10d4a" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13084392c5e4bc371903e2935a5eaeed24905a7511356b883835e18a78f6879" + +[[package]] +name = "zerotrie" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0464e17806c1d976d5cba29399c7f08e516e279e2ba493f63123b5fca67dd8" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zlib-rs" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b268e58e7c693d7c271f93ffc4ba3b380412554231c85bf61ca7af91042a4112" + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/plugins/hylouis233/expiry-guardian/daemon/rust/Cargo.toml b/plugins/hylouis233/expiry-guardian/daemon/rust/Cargo.toml new file mode 100644 index 0000000..73b8afd --- /dev/null +++ b/plugins/hylouis233/expiry-guardian/daemon/rust/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "reset-card-daemon" +version = "1.0.0" +edition = "2024" + +[dependencies] +# HTTP 客户端:手写 TLS 容易出错且难维护,用成熟实现更可靠 +ureq = { version = "3", default-features = false, features = ["rustls", "json", "gzip"] } +serde = { version = "1", features = ["derive"] } +serde_json = "1" + +[profile.release] +opt-level = "z" # 体积优先:后台常驻服务不需要极致速度 +lto = true +codegen-units = 1 +panic = "abort" +strip = true diff --git a/plugins/hylouis233/expiry-guardian/daemon/rust/src/clock.rs b/plugins/hylouis233/expiry-guardian/daemon/rust/src/clock.rs new file mode 100644 index 0000000..bb15fd5 --- /dev/null +++ b/plugins/hylouis233/expiry-guardian/daemon/rust/src/clock.rs @@ -0,0 +1,74 @@ +//! 时钟与信号处理。 +//! +//! # 为什么没有 HTTP 客户端了 +//! +//! 社区插件不能读取 MiniMax Code 的登录凭据(2026-10-20 管理员 review 要求), +//! 所以本插件**不再**自己调账号接口。 +//! ⇒ 额度/积分/重置卡的信息改由**本地账本**提供(见 `ledger.rs`)。 +//! ⇒ 这个模块只剩下「现在几点」与「该不该退出」两件事。 + +use std::sync::atomic::{AtomicBool, Ordering}; +use std::time::{SystemTime, UNIX_EPOCH}; + +#[cfg(unix)] +use std::os::raw::c_int; +#[cfg(unix)] +unsafe extern "C" { + fn signal(signum: c_int, handler: usize) -> usize; +} +const SIGINT: c_int = 2; +const SIGTERM: c_int = 15; + +/// 收到终止信号后置位(守护进程在下一轮开头检查它)。 +pub static STOPPED: AtomicBool = AtomicBool::new(false); + +/// 现在是 Unix 毫秒时间戳。 +pub fn now_ms() -> i64 { + SystemTime::now() + .duration_since(UNIX_EPOCH) + .map(|d| d.as_millis() as i64) + .unwrap_or(0) +} + +/// 是否已经收到终止信号。 +pub fn should_stop() -> bool { + STOPPED.load(Ordering::SeqCst) +} + +/// 置位「该退出了」。 +pub fn request_stop() { + STOPPED.store(true, Ordering::SeqCst); +} + +/// 装上 SIGINT / SIGTERM 处理器。 +/// +/// `launchctl` 停守护进程时发的是这两个信号 ⇒ 收到就置位, +/// 让主循环在当前这轮结束后**干净退出**(而不是被硬杀)。 +/// +/// ⚠️ 连着收两次(比如 SIGINT 之后又 SIGTERM)⇒ 直接退出, +/// 免得「置位了但这一轮还在读文件」时卡住。 +pub fn install_signal_handlers() { + unsafe extern "C" fn handler(_sig: i32) { + if should_stop() { + std::process::exit(130); + } + request_stop(); + } + unsafe { + signal(SIGINT, handler as usize); + signal(SIGTERM, handler as usize); + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn now_ms_is_a_plausible_timestamp() { + let n = now_ms(); + // 2020-01-01 之后、2100 年之前。 + assert!(n > 1_577_836_800_000, "时间戳不对:{n}"); + assert!(n < 4_102_444_800_000, "时间戳不对:{n}"); + } +} diff --git a/plugins/hylouis233/expiry-guardian/daemon/rust/src/config.rs b/plugins/hylouis233/expiry-guardian/daemon/rust/src/config.rs new file mode 100644 index 0000000..75e5c7a --- /dev/null +++ b/plugins/hylouis233/expiry-guardian/daemon/rust/src/config.rs @@ -0,0 +1,255 @@ +//! 共享配置:与 Mini App「蹬王之王」读**同一个文件**。 +//! +//! 这是三份实现不漂移的前提:Node / Rust / Python 都从这里取阈值与分界点, +//! 谁都不许再把 99 写死在自己代码里。 +//! +//! 路径 `~/.config/mcode-reset-card/config.json` 与 Mini App 侧一致 +//! (Rust `state.rs` 的 bg-state.json 也在同一目录)。 +//! +//! 读失败或字段非法一律**回退默认并记 issue**,绝不静默纠正 —— +//! 静默纠正会让人以为自己设的生效了。 + +use std::fs; +use std::path::PathBuf; + +use serde::{Deserialize, Serialize}; + +use crate::decision::{ + DEFAULT_CARD_SKIP_BEFORE_RESET_MINUTES, DEFAULT_QUOTA_LOW_PERCENT, DEFAULT_QUOTA_TIGHT_PERCENT, + DEFAULT_QUOTA_TRIGGER_PERCENT, +}; + +#[derive(Debug, Clone, Copy, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", deny_unknown_fields)] +pub struct QuotaLevels { + #[serde(default = "d_tight")] + pub tight: f64, + #[serde(default = "d_low")] + pub low: f64, +} + +fn d_tight() -> f64 { + DEFAULT_QUOTA_TIGHT_PERCENT +} +fn d_low() -> f64 { + DEFAULT_QUOTA_LOW_PERCENT +} +fn d_card() -> f64 { + DEFAULT_QUOTA_TRIGGER_PERCENT +} + +impl Default for QuotaLevels { + fn default() -> Self { + QuotaLevels { tight: DEFAULT_QUOTA_TIGHT_PERCENT, low: DEFAULT_QUOTA_LOW_PERCENT } + } +} + +/// `rename_all = "camelCase"` **不是可有可无的风格问题**: +/// Node / Python 写出的配置键是 `goalPause.triggerPercent` 这类驼峰, +/// 而 Rust 结构体字段是 snake_case。没有这行,serde 会认为**所有字段都不存在**, +/// 然后逐个落到 `#[serde(default)]` —— 于是 `enabled` 永远读到 `false`, +/// 且**一行错都不报**。这个坑真实发生过:功能看起来写完了,却永远打不开。 +/// +/// `deny_unknown_fields` 是配套的安全网:宁可解析失败并报出来, +/// 也不要「静默降级成默认值」让人以为自己设的值生效了。 +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", deny_unknown_fields)] +pub struct Config { + #[serde(default = "one")] + pub schema_version: u32, + #[serde(default = "d_card")] + pub card_trigger_percent: f64, + /// 距 5 小时额度刷新不足这么多分钟时,不消耗重置卡。0 = 关闭该保护。 + #[serde(default = "d_skip")] + pub card_skip_before_reset_minutes: f64, + #[serde(default)] + pub quota_levels: QuotaLevels, +} + +fn one() -> u32 { + 1 +} + +fn d_skip() -> f64 { + DEFAULT_CARD_SKIP_BEFORE_RESET_MINUTES +} + +impl Default for Config { + fn default() -> Self { + Config { + schema_version: 1, + card_trigger_percent: DEFAULT_QUOTA_TRIGGER_PERCENT, + card_skip_before_reset_minutes: DEFAULT_CARD_SKIP_BEFORE_RESET_MINUTES, + quota_levels: QuotaLevels::default(), + } + } +} + +impl Config { + /// 判定参数视图,供 `decide()` 使用。 + pub fn decision_cfg(&self) -> crate::decision::DecisionCfg { + crate::decision::DecisionCfg { + card_trigger_percent: self.card_trigger_percent, + tight: self.quota_levels.tight, + low: self.quota_levels.low, + card_skip_before_reset_minutes: self.card_skip_before_reset_minutes, + } + } +} + +fn clamp(v: f64, lo: f64, hi: f64, fallback: f64) -> f64 { + if !v.is_finite() { + return fallback; + } + v.max(lo).min(hi) +} + +/// 逐字段校验并夹紧,返回 (配置, 问题列表)。 +pub fn normalize(mut raw: Config) -> (Config, Vec) { + let mut issues = Vec::new(); + let d = Config::default(); + + let card = clamp(raw.card_trigger_percent, 1.0, 100.0, d.card_trigger_percent); + if card != raw.card_trigger_percent { + issues.push(format!( + "card_trigger_percent={} 超出 1..100,已夹到 {}", + raw.card_trigger_percent, card + )); + } + raw.card_trigger_percent = card; + + // 跳过阈值:0 表示关闭该保护;负数没有意义,按 0 夹。 + let skip = clamp(raw.card_skip_before_reset_minutes, 0.0, 24.0 * 60.0, d.card_skip_before_reset_minutes); + if skip != raw.card_skip_before_reset_minutes { + issues.push(format!( + "card_skip_before_reset_minutes={} 超出 0..1440,已夹到 {skip}", + raw.card_skip_before_reset_minutes + )); + } + raw.card_skip_before_reset_minutes = skip; + + let mut tight = clamp(raw.quota_levels.tight, 1.0, 100.0, d.quota_levels.tight); + let mut low = clamp(raw.quota_levels.low, 1.0, 100.0, d.quota_levels.low); + // 分界点必须 0 < tight < low <= 100;非法组合整体回退默认,而不是悄悄调序。 + if !(tight < low) { + issues.push(format!( + "quota_levels 需满足 tight < low(收到 tight={} low={}),已整体回退默认", + tight, low + )); + tight = d.quota_levels.tight; + low = d.quota_levels.low; + } else if tight != raw.quota_levels.tight || low != raw.quota_levels.low { + issues.push("quota_levels 越界,已夹紧".to_string()); + } + raw.quota_levels.tight = tight; + raw.quota_levels.low = low; + + (raw, issues) +} + +pub fn default_path() -> Option { + let home = std::env::var("HOME").ok()?; + Some(PathBuf::from(home).join(".config/mcode-reset-card/config.json")) +} + +/// 读配置。文件不存在是正常情况(首次运行),返回默认值且不记 issue。 +pub fn load(path: &PathBuf) -> (Config, Vec) { + let text = match fs::read_to_string(path) { + Ok(t) => t, + Err(e) if e.kind() == std::io::ErrorKind::NotFound => return (Config::default(), Vec::new()), + Err(e) => return (Config::default(), vec![format!("配置读取失败({}),正在用默认值", e)]), + }; + match serde_json::from_str::(&text) { + Ok(c) => normalize(c), + Err(e) => (Config::default(), vec![format!("配置解析失败({}),正在用默认值", e)]), + } +} + +/// 每轮重读,实现「改配置无需重启守护进程」。 +pub fn load_or_default() -> (Config, Vec) { + match default_path() { + Some(p) => load(&p), + None => ( + Config::default(), + vec!["找不到 $HOME,配置不可读,正在用默认值".to_string()], + ), + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn defaults_are_the_documented_ones() { + let c = Config::default(); + assert_eq!(c.card_trigger_percent, 99.0); + assert_eq!(c.quota_levels.tight, 80.0); + assert_eq!(c.quota_levels.low, 95.0); + } + + #[test] + fn out_of_range_is_clamped_and_reported() { + let (c, issues) = normalize(Config { + card_trigger_percent: 150.0, + ..Default::default() + }); + assert_eq!(c.card_trigger_percent, 100.0); + assert!(!issues.is_empty(), "越界必须报出来,不能静默"); + } + + #[test] + fn inverted_bounds_fall_back_whole() { + let (c, issues) = normalize(Config { + quota_levels: QuotaLevels { tight: 96.0, low: 95.0 }, + ..Default::default() + }); + assert_eq!(c.quota_levels.tight, 80.0, "非法组合应整体回退默认"); + assert_eq!(c.quota_levels.low, 95.0); + assert!(issues.iter().any(|s| s.contains("tight < low"))); + } + + #[test] + fn camel_case_keys_are_actually_read() { + // 回归测试:Node / Python 写出的就是这套驼峰键。 + // 一旦有人删掉 rename_all,下面这条会安静地读成 enabled=false 而测试仍可能通过, + // 所以这里直接断言「解析成功且 enabled 为真」,不给它蒙混过关的机会。 + let (c, issues) = load(&PathBuf::from( + std::env::temp_dir().join("cfg-camel-probe.json"), + )); + // 文件不存在 → 默认值,这条只用来确认默认路径本身没坏 + assert_eq!(c.card_trigger_percent, 99.0); + assert!(issues.is_empty()); + + let camel = serde_json::json!({ + "schemaVersion": 1, + "cardTriggerPercent": 99, + "quotaLevels": { "tight": 80, "low": 95 } + }); + let parsed: Config = serde_json::from_value(camel.clone()) + .expect("驼峰键必须能被解析(缺 rename_all 时会在这里炸)"); + assert_eq!(parsed.card_trigger_percent, 99.0); + assert_eq!(parsed.quota_levels.tight, 80.0); + + // 反面:snake_case 现在应当被明确拒绝,而不是静默降级 + let snake = serde_json::json!({ + "schema_version": 1, + "goal_pause": { "enabled": true, "trigger_percent": 50 } + }); + assert!( + serde_json::from_value::(snake).is_err(), + "snake_case 必须报错(deny_unknown_fields),绝不能静默降级" + ); + } + + #[test] + fn valid_bounds_are_kept() { + let (c, issues) = normalize(Config { + quota_levels: QuotaLevels { tight: 70.0, low: 90.0 }, + ..Default::default() + }); + assert_eq!(c.quota_levels.tight, 70.0); + assert_eq!(c.quota_levels.low, 90.0); + assert!(issues.is_empty()); + } +} diff --git a/plugins/hylouis233/expiry-guardian/daemon/rust/src/decision.rs b/plugins/hylouis233/expiry-guardian/daemon/rust/src/decision.rs new file mode 100644 index 0000000..b0b10b4 --- /dev/null +++ b/plugins/hylouis233/expiry-guardian/daemon/rust/src/decision.rs @@ -0,0 +1,733 @@ +//! 额度与到期判定。 +//! +//! 这些分支与 Mini App「蹬王之王」的 `decide(, true)` 一一对应, +//! 由 `verify-parity.mjs` 逐字比对「动作 + 理由文本」来防止漂移。 +//! **改动任何一条理由文案,两侧都要同步改,并重跑校验器。** + +use serde::Deserialize; + +pub const QUOTA_FIVE_HOUR: i64 = 1; +pub const QUOTA_WEEKLY: i64 = 2; +pub const QUOTA_VIDEO: i64 = 3; + +/// 默认触发阈值 99%。实际生效值来自 config.json,这里只作兜底。 +/// 与 Node / Python 保持一致;改动必须同步三处。 +pub const DEFAULT_QUOTA_TRIGGER_PERCENT: f64 = 99.0; +/// 默认「额度紧张」分界点(黄)。 +pub const DEFAULT_QUOTA_TIGHT_PERCENT: f64 = 80.0; +/// 默认「额度不足」分界点(红)。 +pub const DEFAULT_QUOTA_LOW_PERCENT: f64 = 95.0; +/// 默认「距刷新不足这么多分钟就不烧重置卡」。实际生效值来自 config.json。 +pub const DEFAULT_CARD_SKIP_BEFORE_RESET_MINUTES: f64 = 60.0; + +/// 额度分档。与 Node 的 `quotaLevel()`、Python 的 `_quota_level()` 逐字同构。 +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum Level { + Comfortable, + Tight, + Low, + Burned, +} + +impl Level { + /// 中文文案。**属于 parity 契约的一部分**,改一个字三方都要改。 + pub fn label(&self) -> &'static str { + match self { + Level::Comfortable => "额度充足", + Level::Tight => "额度紧张", + Level::Low => "额度不足", + Level::Burned => "额度燃尽", + } + } + + pub fn as_str(&self) -> &'static str { + match self { + Level::Comfortable => "comfortable", + Level::Tight => "tight", + Level::Low => "low", + Level::Burned => "burned", + } + } +} + +/// 额度分档:comfortable / tight / low / burned。 +/// +/// **burned 必须先判**:若先判 low,`used=100` 会命中 `ratio >= low` +/// 被算成「不足」,燃尽这一档就永远显示不出来。 +/// +/// 燃尽只用 `used >= total` 判定,**不读 exhausted**: +/// Python 的 exhausted 带 -1e-9 容差而本文件没有, +/// 若依赖它会在极限值上产生三方不一致。 +pub fn quota_level( + used: f64, + total: f64, + unlimited: bool, + tight: f64, + low: f64, +) -> Level { + if unlimited || total <= 0.0 { + return Level::Comfortable; + } + if used >= total { + return Level::Burned; + } + let ratio = used / total * 100.0; + if ratio >= low { + return Level::Low; + } + if ratio >= tight { + return Level::Tight; + } + Level::Comfortable +} + +/// 一个限额维度的用量。 +#[derive(Debug, Clone, Copy)] +pub struct QuotaState { + pub quota_type: i64, + pub total: f64, + pub used: f64, + pub is_unlimited: bool, + /// 该维度额度的刷新时间(毫秒时间戳)。 + /// + /// 有了它才能判断「额度马上就要自己刷新了」—— + /// 那种时候再烧一张重置卡就是纯浪费。 + pub reset_time_ms: Option, +} + +impl QuotaState { + /// 是否已耗尽。不限量或总量为 0 都不算耗尽。 + pub fn exhausted(&self) -> bool { + if self.is_unlimited || self.total <= 0.0 { + return false; + } + self.used >= self.total + } + + /// 决策触发线:额度用到 `trigger_percent` 即视为「该动手了」。 + /// + /// 不等真正耗尽 —— 等耗尽时那次请求已经失败,会打断当前目标 + /// 正在跑的自动执行。提前介入代价几乎为零。 + pub fn triggered(&self, trigger_percent: f64) -> bool { + if self.is_unlimited || self.total <= 0.0 { + return false; + } + self.used >= self.total * trigger_percent / 100.0 + } + + /// 展示用分档。与 `triggered()` 相互独立。 + pub fn level(&self, tight: f64, low: f64) -> Level { + quota_level(self.used, self.total, self.is_unlimited, tight, low) + } + + pub fn remaining_percent(&self) -> f64 { + if self.is_unlimited || self.total <= 0.0 { + return 100.0; + } + ((self.total - self.used) / self.total * 100.0).max(0.0) + } + + pub fn label(&self) -> &'static str { + match self.quota_type { + QUOTA_FIVE_HOUR => "5小时限额", + QUOTA_WEEKLY => "周限额", + QUOTA_VIDEO => "视频限额", + _ => "未知限额", + } + } + + pub fn describe(&self) -> String { + if self.is_unlimited { + return format!("{}=不限量", self.label()); + } + format!( + "{}=已用{:.0}% / 剩余{:.0}%", + self.label(), + self.used, + self.remaining_percent() + ) + } +} + +/// 金额字符串(可能带千分位)转数字。 +pub fn amount(value: &serde_json::Value) -> f64 { + match value { + serde_json::Value::Number(n) => n.as_f64().unwrap_or(0.0), + serde_json::Value::String(s) => { + let cleaned: String = s.chars().filter(|c| *c != ',').collect(); + cleaned.trim().parse::().unwrap_or(0.0) + } + _ => 0.0, + } +} + +/// 百分数字符串(如 "71%")转数字。 +/// +/// 接口返回的就是 `"71%"` 这种带百分号的字符串,直接 `parse::()` 会失败并 +/// 静默退回 0,把「已用 71%」误判成「已用 0%」。这里必须先剥掉 `%`。 +pub fn percent(value: &serde_json::Value) -> f64 { + match value { + serde_json::Value::Number(n) => n.as_f64().unwrap_or(0.0), + serde_json::Value::String(s) => s.trim().trim_end_matches('%').parse::().unwrap_or(0.0), + _ => 0.0, + } +} + +#[derive(Deserialize)] +pub struct ModelRemains { + pub model_name: String, + #[serde(default)] + pub current_interval_total_percent: serde_json::Value, + #[serde(default)] + pub current_interval_used_percent: serde_json::Value, + #[serde(default)] + pub current_interval_status: i64, + #[serde(default)] + pub current_interval_total_count: f64, + #[serde(default)] + pub current_interval_usage_count: f64, + #[serde(default)] + pub current_weekly_total_percent: serde_json::Value, + #[serde(default)] + pub current_weekly_used_percent: serde_json::Value, + #[serde(default)] + pub current_weekly_status: i64, + #[serde(default)] + pub end_time: Option, + /// 周限额的刷新时间。与 Python 的 `weekly_end_time` 同一字段名。 + #[serde(default)] + pub weekly_end_time: Option, +} + +#[derive(Deserialize)] +pub struct RemainsPayload { + #[serde(default)] + pub model_remains: Vec, +} + +pub fn parse_quotas(payload: &RemainsPayload) -> Vec { + let mut out = Vec::with_capacity(3); + + let general = payload + .model_remains + .iter() + .find(|m| m.model_name == "general") + .or_else(|| payload.model_remains.first()); + + if let Some(g) = general { + let total = { + let t = percent(&g.current_interval_total_percent); + if t > 0.0 { t } else { 100.0 } + }; + out.push(QuotaState { + quota_type: QUOTA_FIVE_HOUR, + total, + used: percent(&g.current_interval_used_percent), + is_unlimited: g.current_interval_status == 3, + reset_time_ms: g.end_time, + }); + out.push(QuotaState { + quota_type: QUOTA_WEEKLY, + total: { + let t = percent(&g.current_weekly_total_percent); + if t > 0.0 { t } else { 100.0 } + }, + used: percent(&g.current_weekly_used_percent), + is_unlimited: g.current_weekly_status == 3, + reset_time_ms: g.weekly_end_time, + }); + } + + // 视频额度:只有非 general 且计数 > 0 的模型 + if let Some(v) = payload + .model_remains + .iter() + .find(|m| m.model_name != "general" && m.current_interval_total_count > 0.0) + { + out.push(QuotaState { + quota_type: QUOTA_VIDEO, + total: v.current_interval_total_count, + used: v.current_interval_usage_count, + is_unlimited: v.current_interval_status == 3, + reset_time_ms: v.end_time, + }); + } + + out +} + +/// 一张可用于扣卡的重置卡。 +#[derive(Debug, Clone)] +pub struct UsableCard { + pub card_id: String, + pub source_type: String, + pub out_biz_no: String, + pub expire_time: i64, +} + +/// 扣卡决策的动作。 +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum Action { + /// 用重置卡重置额度 + UseCard, + /// 不用卡,让积分先消耗 + KeepCredit, + /// 额度充足,不动手 + Idle, + /// 既没积分也没卡,等着 + Wait, +} + +impl Action { + pub fn as_str(&self) -> &'static str { + match self { + Action::UseCard => "use-card", + Action::KeepCredit => "keep-credit", + Action::Idle => "idle", + Action::Wait => "wait", + } + } +} + +pub struct Decision { + pub action: Action, + pub reason: String, +} + +/// `decide(, true)` 需要的判定参数。默认值对应 config.json 缺失时的兜底。 +#[derive(Debug, Clone, Copy)] +pub struct DecisionCfg { + pub card_trigger_percent: f64, + pub tight: f64, + pub low: f64, + /// 距 5 小时额度刷新还剩不到这么多分钟时,**不消耗重置卡**。 + /// + /// 额度马上就要自己刷新了,这时候烧一张重置卡纯属浪费。 + /// 设为 0 表示不做这个保护。 + pub card_skip_before_reset_minutes: f64, +} + +impl Default for DecisionCfg { + fn default() -> Self { + DecisionCfg { + card_trigger_percent: DEFAULT_QUOTA_TRIGGER_PERCENT, + tight: DEFAULT_QUOTA_TIGHT_PERCENT, + low: DEFAULT_QUOTA_LOW_PERCENT, + card_skip_before_reset_minutes: DEFAULT_CARD_SKIP_BEFORE_RESET_MINUTES, + } + } +} + +/// 毫秒时间戳 → "10月25日"。与 Python 的 `_fmt_day` 同一时区口径。 +pub fn fmt_day(ms: Option) -> String { + let Some(ms) = ms else { + return "未知".to_string(); + }; + if ms == 0 { + return "未知".to_string(); + } + // 本地时区;固定 UTC 会导致跨日错位,必须借 localtime_r + let (m, d) = local_md(ms.div_euclid(1000)); + if m == 0 { + return "未知".to_string(); + } + format!("{m}月{d}日") +} + +/// 把 Unix 秒换算成本地时区的 (月, 日)。 +/// +/// 桌面端与 Python 版都用本地时区展示;这里手算避免引入 chrono 依赖。 +/// libc 的 `struct tm`,只需本地时区换算用到的字段。 +#[repr(C)] +#[derive(Default)] +struct Tm { + tm_sec: i32, tm_min: i32, tm_hour: i32, tm_mday: i32, + tm_mon: i32, tm_year: i32, tm_wday: i32, tm_yday: i32, tm_isdst: i32, + tm_gmtoff: i64, tm_zone: *const u8, +} + +#[repr(C)] +struct TimeT(i64); + +unsafe extern "C" { + fn localtime_r(timep: *const TimeT, result: *mut Tm) -> *mut Tm; +} + +/// 把 Unix 秒换算成本地时区结构。 +fn secs_to_local(secs: i64) -> Option { + let t = TimeT(secs); + let mut tm = Tm::default(); + unsafe { + if localtime_r(&t, &mut tm).is_null() { + return None; + } + } + Some(tm) +} + +/// 本地时区的 (月, 日),供日志使用。 +pub fn local_md(secs: i64) -> (u32, u32) { + secs_to_local(secs) + .map(|t| (t.tm_mon as u32 + 1, t.tm_mday as u32)) + .unwrap_or((0, 0)) +} + +/// 本地时区的 (时, 分)。 +pub fn local_hm(secs: i64) -> (u32, u32) { + secs_to_local(secs) + .map(|t| (t.tm_hour as u32, t.tm_min as u32)) + .unwrap_or((0, 0)) +} + +/// 5 小时额度距离刷新还有多少分钟。取不到刷新时间时返回 `None`。 +/// +/// 负数表示刷新时间已经过去了(接口数据没刷新),按 0 处理。 +pub fn minutes_to_reset(q: Option<&QuotaState>, now_ms: i64) -> Option { + let reset = q?.reset_time_ms?; + Some(((reset - now_ms) as f64 / 60_000.0).max(0.0)) +} + +/// 后台扣卡决策(纯函数,不触碰网络)。 +/// +/// 动作 ∈ {use-card, keep-credit, idle, wait}。 +/// +/// 分支与 Mini App 的 `decide(, true)` 刻意同构: +/// 未耗尽 → idle +/// 耗尽 + 无积分 + 有卡 → use-card +/// 耗尽 + 无积分 + 无卡 → wait +/// 耗尽 + 有积分 + 无卡 → keep-credit +/// 耗尽 + 都有,卡先过期 → use-card +/// 耗尽 + 都有,积分先过期 → keep-credit +/// +/// `credit_data_complete` 表示「积分数据是否**完整读到**」。 +/// +/// ⚠️ 2026-10-19 PR #28 review 修:读不到 ≠ 没有。 +/// `credit_expiry_ms = None` 同时可能表示「确实没有积分」与「接口读失败」, +/// 以前两者都落到 `use-card` 分支 —— 而扣卡是**真实写操作**, +/// 于是网络故障会被当成业务状态,可能误扣真卡。 +/// ⇒ 数据不完整时一律**不做写操作**(`Action::Wait`),只如实报出来。 +pub fn decide( + quotas: &[QuotaState], + usable_cards: &[UsableCard], + credit_expiry_ms: Option, + credit_desc: &str, + cfg: &DecisionCfg, + now_ms: i64, + credit_data_complete: bool, +) -> Decision { + let five = quotas.iter().find(|q| q.quota_type == QUOTA_FIVE_HOUR); + let weekly = quotas.iter().find(|q| q.quota_type == QUOTA_WEEKLY); + + let five_triggered = five.is_some_and(|q| q.triggered(cfg.card_trigger_percent)); + let weekly_triggered = weekly.is_some_and(|q| q.triggered(cfg.card_trigger_percent)); + + // ── 额度即将自己刷新 → 不烧重置卡 ── + // 距刷新只剩几分钟的时候再扣一张重置卡是纯浪费:额度马上就自己回来了。 + // 这个保护要在所有「用卡」分支之前判定。 + let reset_in_min = minutes_to_reset(five, now_ms); + let skip_card_reason = if cfg.card_skip_before_reset_minutes > 0.0 { + reset_in_min.filter(|m| *m <= cfg.card_skip_before_reset_minutes).map(|m| { + format!("5 小时额度 {:.0} 分钟后刷新,暂不消耗重置卡", m) + }) + } else { + None + }; + + // ── 未到触发线 ── + if !five_triggered && !weekly_triggered { + return Decision { + action: Action::Idle, + // 等级词随分档走,而不是永远写「额度充足」—— + // 否则用量 92% 时页面上仍显示「额度充足」,是误导。 + // 把触发线也说进来:否则「额度不足但暂不需要处理」看起来自相矛盾。 + // + // burned 永远不会出现在这里:它必然已 triggered,走的是下面用卡/留卡分支。 + reason: format!( + "{}(5 小时已用 {:.0}%),未到 {:.0}% 触发线,暂不动用重置卡", + five + .map(|q| q.level(cfg.tight, cfg.low).label()) + .unwrap_or(Level::Comfortable.label()), + five.map(|q| q.used).unwrap_or(0.0), + cfg.card_trigger_percent + ), + }; + } + + // ── 积分数据没读全 ⇒ 无法判断「卡先过期还是积分先过期」── + // ⇒ 绝不做写操作(扣卡是真实消耗,宁可等下一轮)。 + if !credit_data_complete { + return Decision { + action: Action::Wait, + reason: "积分数据读取不完整,本轮不执行写操作(等下一轮重新判定)".to_string(), + }; + } + + // ── 无可用积分:只能靠卡 ── + let Some(credit_expiry) = credit_expiry_ms else { + if !usable_cards.is_empty() { + // 额度马上要自己刷新了,就别烧卡了 + if let Some(reason) = &skip_card_reason { + return Decision { + action: Action::Wait, + reason: reason.clone(), + }; + } + return Decision { + action: Action::UseCard, + reason: "没有可用积分,使用重置卡重置额度".to_string(), + }; + } + return Decision { + action: Action::Wait, + reason: "额度已耗尽,既没有积分也没有可用的重置卡".to_string(), + }; + }; + // ── 有积分但没卡:让积分先消耗 ── + // 注意这一句带「到期」二字,与 Mini App / Python 的文案保持逐字一致。 + // 改文案前务必跑 `node verify-parity.mjs`。 + if usable_cards.is_empty() { + return Decision { + action: Action::KeepCredit, + reason: format!( + "没有可用的重置卡,让{credit_desc}({}到期)先消耗", + fmt_day(Some(credit_expiry)) + ), + }; + } + + let card_expiry = usable_cards[0].expire_time; + + // ── 两者都有:比「先过期先用」 ── + if card_expiry < credit_expiry { + // 额度马上要自己刷新了,就别烧卡了 + if let Some(reason) = &skip_card_reason { + return Decision { + action: Action::Wait, + reason: reason.clone(), + }; + } + return Decision { + action: Action::UseCard, + reason: format!( + "重置卡({})比{credit_desc}({})先过期,先用卡保住积分", + fmt_day(Some(card_expiry)), + fmt_day(Some(credit_expiry)) + ), + }; + } + Decision { + action: Action::KeepCredit, + reason: format!( + "{credit_desc}({})比重置卡({})先过期,不用卡,让积分先消耗", + fmt_day(Some(credit_expiry)), + fmt_day(Some(card_expiry)) + ), + } +} + +#[cfg(test)] +mod tests { + use super::*; + + fn q(t: i64, total: f64, used: f64, unlimited: bool) -> QuotaState { + QuotaState { quota_type: t, total, used, is_unlimited: unlimited, reset_time_ms: None } + } + + /// 判定用的固定「当前时间」。所有与刷新时间相关的用例都以它为基准。 + const NOW: i64 = 1_700_000_000_000; + + fn c(days: i64) -> UsableCard { + UsableCard { + card_id: "C1".into(), + source_type: "mcode_signin".into(), + out_biz_no: "b1".into(), + expire_time: 1_700_000_000_000 + days * 86_400_000, + } + } + + #[test] + fn percent_strings() { + assert_eq!(percent(&serde_json::json!("71%")), 71.0); + assert_eq!(percent(&serde_json::json!("100%")), 100.0); + assert_eq!(percent(&serde_json::json!(0)), 0.0); + assert_eq!(percent(&serde_json::json!("")), 0.0); + } + + #[test] + fn amount_strings() { + assert_eq!(amount(&serde_json::json!("17400.00")), 17400.0); + assert_eq!(amount(&serde_json::json!("1,200.50")), 1200.5); + } + + #[test] + fn skip_card_when_reset_is_imminent() { + // 额度已经到触发线,本来会走「用卡」分支。 + let mut quotas = vec![q(1, 100.0, 99.0, false), q(2, 100.0, 0.0, true)]; + let credit = Some(NOW + 13 * 86_400_000); + let cfg = DecisionCfg::default(); // 默认跳过窗口 60 分钟 + + // 刷新在 2 小时后 → 照常用卡 + quotas[0].reset_time_ms = Some(NOW + 120 * 60_000); + assert_eq!(decide("as, &[c(7)], credit, "平台积分", &cfg, NOW, true).action, Action::UseCard); + + // 刷新在 10 分钟后 → 不烧卡,等它自己刷新 + quotas[0].reset_time_ms = Some(NOW + 10 * 60_000); + let d = decide("as, &[c(7)], credit, "平台积分", &cfg, NOW, true); + assert_eq!(d.action, Action::Wait, "额度马上要刷新,不该烧重置卡"); + assert!(d.reason.contains("分钟后刷新"), "理由要说清为什么不动: {}", d.reason); + + // 窗口设为 0 → 关闭该保护,照常烧卡 + let no_skip = DecisionCfg { card_skip_before_reset_minutes: 0.0, ..Default::default() }; + assert_eq!(decide("as, &[c(7)], credit, "平台积分", &no_skip, NOW, true).action, Action::UseCard); + + // 窗口放大到 180 分钟 → 10 分钟后刷新也跳过 + let wide = DecisionCfg { card_skip_before_reset_minutes: 180.0, ..Default::default() }; + assert_eq!(decide("as, &[c(7)], credit, "平台积分", &wide, NOW, true).action, Action::Wait); + } + + #[test] + fn minutes_to_reset_is_optional_and_clamped() { + assert_eq!(minutes_to_reset(None, NOW), None); + assert_eq!(minutes_to_reset(Some(&q(1, 100.0, 50.0, false)), NOW), None, "没有刷新时间就无从判断"); + let mut x = q(1, 100.0, 50.0, false); + x.reset_time_ms = Some(NOW + 30 * 60_000); + assert_eq!(minutes_to_reset(Some(&x), NOW), Some(30.0)); + x.reset_time_ms = Some(NOW - 60_000); + assert_eq!(minutes_to_reset(Some(&x), NOW), Some(0.0), "已过去的时间按 0 算"); + } + + #[test] + fn exhausted_rules() { + assert!(!q(1, 100.0, 99.0, false).exhausted()); + assert!(q(1, 100.0, 100.0, false).exhausted()); + assert!(!q(1, 100.0, 100.0, true).exhausted(), "不限量不算耗尽"); + assert!(!q(1, 0.0, 0.0, false).exhausted(), "总量为 0 不算耗尽"); + } + + #[test] + fn decide_branches() { + let cfg = DecisionCfg::default(); + let five_ok = vec![q(1, 100.0, 50.0, false), q(2, 100.0, 0.0, true)]; + let five_dead = vec![q(1, 100.0, 100.0, false), q(2, 100.0, 0.0, true)]; + let week_dead = vec![q(1, 100.0, 50.0, false), q(2, 100.0, 100.0, false)]; + let credit = Some(1_700_000_000_000 + 13 * 86_400_000); + + assert_eq!(decide(&five_ok, &[c(7)], credit, "平台积分", &cfg, NOW, true).action, Action::Idle); + assert_eq!(decide(&five_dead, &[c(7)], credit, "平台积分", &cfg, NOW, true).action, Action::UseCard); + assert_eq!(decide(&five_dead, &[], credit, "平台积分", &cfg, NOW, true).action, Action::KeepCredit); + assert_eq!(decide(&five_dead, &[], None, "", &cfg, NOW, true).action, Action::Wait); + assert_eq!(decide(&five_dead, &[c(7)], None, "", &cfg, NOW, true).action, Action::UseCard); + assert_eq!(decide(&week_dead, &[c(7)], credit, "平台积分", &cfg, NOW, true).action, Action::UseCard); + // 积分更早过期 → 不用卡 + let credit_soon = Some(1_700_000_000_000 + 2 * 86_400_000); + assert_eq!( + decide(&five_dead, &[c(20)], credit_soon, "平台积分", &cfg, NOW, true).action, + Action::KeepCredit + ); + } + + #[test] + fn threshold_is_configurable() { + // 同一份输入,换阈值就换结论 —— 这正是功能1的可配置性。 + // 积分早于卡过期,所以一旦越过触发线,结论必然是 keep-credit(不用卡)。 + let quotas = vec![q(1, 100.0, 95.0, false), q(2, 100.0, 0.0, true)]; + let credit_soon = Some(1_700_000_000_000); + let strict = DecisionCfg { card_trigger_percent: 99.0, ..Default::default() }; + let loose = DecisionCfg { card_trigger_percent: 90.0, ..Default::default() }; + assert_eq!( + decide("as, &[c(7)], credit_soon, "平台积分", &strict, NOW, true).action, + Action::Idle, + "95% 未到 99% 触发线,应保持 idle" + ); + assert_eq!( + decide("as, &[c(7)], credit_soon, "平台积分", &loose, NOW, true).action, + Action::KeepCredit, + "阈值放宽到 90% 后应越过触发线,进入先过期先用判定" + ); + } + + #[test] + fn quota_level_boundaries() { + let l = quota_level; + assert_eq!(l(79.0, 100.0, false, 80.0, 95.0), Level::Comfortable); + assert_eq!(l(80.0, 100.0, false, 80.0, 95.0), Level::Tight); + assert_eq!(l(94.9, 100.0, false, 80.0, 95.0), Level::Tight); + assert_eq!(l(95.0, 100.0, false, 80.0, 95.0), Level::Low); + assert_eq!(l(99.0, 100.0, false, 80.0, 95.0), Level::Low); + // 燃尽必须先判,不能被 low 抢先命中 + assert_eq!(l(100.0, 100.0, false, 80.0, 95.0), Level::Burned); + assert_eq!(l(120.0, 100.0, false, 80.0, 95.0), Level::Burned); + // 不限量 / 总量为 0 → 恒为充足 + assert_eq!(l(99.0, 100.0, true, 80.0, 95.0), Level::Comfortable); + assert_eq!(l(0.0, 0.0, false, 80.0, 95.0), Level::Comfortable); + // 分界点可配 + assert_eq!(l(70.0, 100.0, false, 60.0, 90.0), Level::Tight); + } + + #[test] + fn idle_reason_follows_level() { + let cfg = DecisionCfg::default(); + // 92% 不能再写「额度充足」——那是误导 + let d92 = decide(&vec![q(1, 100.0, 92.0, false), q(2, 100.0, 0.0, true)], &[], Some(1), "平台积分", &cfg, NOW, true); + assert_eq!(d92.action, Action::Idle); + assert!(d92.reason.starts_with("额度紧张"), "{}", d92.reason); + assert!(d92.reason.contains("92%"), "{}", d92.reason); + + let d12 = decide(&vec![q(1, 100.0, 12.0, false), q(2, 100.0, 0.0, true)], &[], Some(1), "平台积分", &cfg, NOW, true); + assert!(d12.reason.starts_with("额度充足"), "{}", d12.reason); + + let d97 = decide(&vec![q(1, 100.0, 97.0, false), q(2, 100.0, 0.0, true)], &[], Some(1), "平台积分", &cfg, NOW, true); + assert!(d97.reason.starts_with("额度不足"), "{}", d97.reason); + } + + #[test] + fn burned_never_appears_in_idle_reason() { + // burned 必然已 triggered,走用卡/留卡分支,不该出现在 idle 理由里 + let cfg = DecisionCfg { card_trigger_percent: 100.0, ..Default::default() }; + let d = decide(&vec![q(1, 100.0, 100.0, false), q(2, 100.0, 0.0, true)], &[c(7)], Some(1_700_000_000_000), "平台积分", &cfg, NOW, true); + assert_ne!(d.action, Action::Idle); + assert!(!d.reason.contains("额度燃尽"), "{}", d.reason); + } + + #[test] + fn reasons_are_filled() { + let cfg = DecisionCfg::default(); + let five_dead = vec![q(1, 100.0, 100.0, false), q(2, 100.0, 0.0, true)]; + let d = decide(&five_dead, &[], Some(1_700_000_000_000 + 13 * 86_400_000), "平台积分", &cfg, NOW, true); + assert!(d.reason.contains("没有可用的重置卡"), "{}", d.reason); + assert!(d.reason.contains("平台积分"), "{}", d.reason); + } + + /// 回归测试:积分数据读取失败时**绝不扣卡**。 + /// + /// ⚠️ 2026-10-19 PR #28 review 修:读不到 ≠ 没有。 + /// `credit_expiry_ms = None` 同时可能表示「确实没有积分」与「接口读失败」, + /// 以前两者都落到 `use-card` —— 而扣卡是真实写操作, + /// 网络故障会被当成业务状态,可能误扣真卡。 + #[test] + fn incomplete_credit_data_never_spends_a_card() { + let cfg = DecisionCfg::default(); + // 额度已耗尽,有一张卡,但积分数据**没读全** + let quotas = vec![q(1, 100.0, 100.0, false)]; + let cards = vec![c(7)]; + let d = decide("as, &cards, None, "", &cfg, NOW, false); + assert_eq!( + d.action, + Action::Wait, + "积分数据不完整时必须 wait,不能用卡" + ); + assert!( + d.reason.contains("读取不完整"), + "理由要如实说明数据不完整: {}", + d.reason + ); + + // 对照:同样条件下,数据完整 ⇒ 确实没有积分 ⇒ 可以用卡 + let d2 = decide("as, &cards, None, "", &cfg, NOW, true); + assert_eq!( + d2.action, + Action::UseCard, + "数据完整且确实无积分时,用卡是正确的" + ); + } +} diff --git a/plugins/hylouis233/expiry-guardian/daemon/rust/src/ledger.rs b/plugins/hylouis233/expiry-guardian/daemon/rust/src/ledger.rs new file mode 100644 index 0000000..cc5f3ca --- /dev/null +++ b/plugins/hylouis233/expiry-guardian/daemon/rust/src/ledger.rs @@ -0,0 +1,269 @@ +//! 本地账本:额度、积分与重置卡的**本地**数据源。 +//! +//! # 为什么是「本地账本」而不是账号接口 +//! +//! 社区插件不能读取 MiniMax Code 的登录凭据(2026-10-20 管理员 review 要求), +//! 因此这个插件**不再**自己去调账号接口、也不再去读宿主内部数据库。 +//! +//! ⇒ 额度、积分、重置卡的到期信息改由**用户自己维护的一份本地账本**提供: +//! `~/.config/mcode-reset-card/ledger.json`。 +//! +//! # 账本长什么样 +//! +//! ```json +//! { +//! "schemaVersion": 1, +//! "updatedAtMs": 1792480000000, +//! "quota": { +//! "fiveHour": { "usedPercent": 3, "unlimited": false, "resetTimeMs": 1792497600000 }, +//! "weekly": { "usedPercent": 0, "unlimited": true, "resetTimeMs": 1792944000000 } +//! }, +//! "cards": [ +//! { "cardId": "card_1", "label": "重置卡 A", "sourceType": "code", +//! "outBizNo": "biz_1", "expireTimeMs": 1795000000000 } +//! ], +//! "credits": [ +//! { "label": "赠送", "source": "code", "granted": 400, "used": 0, +//! "balance": 400, "expireTimeMs": 1795017600000 } +//! ] +//! } +//! ``` +//! +//! # 关键性质:决策引擎的输入结构**一个字都没改** +//! +//! `decision::decide()` 的入参(`QuotaState` / `UsableCard` / `credit_expiry_ms` …) +//! 与之前从账号接口拿到的完全同构 ⇒ +//! 决策逻辑、三方一致性校验(Rust / Mini App / Python 逐字比对)**原样保留**。 +//! 变的只是「数据从哪来」。 + +use std::path::PathBuf; + +use crate::decision::{QuotaState, UsableCard, QUOTA_FIVE_HOUR, QUOTA_WEEKLY}; + +/// 账本文件的位置:`~/.config/mcode-reset-card/ledger.json`。 +pub fn ledger_path() -> Option { + std::env::var("HOME") + .ok() + .map(|h| PathBuf::from(h).join(".config/mcode-reset-card/ledger.json")) +} + +/// 一份账本读出来之后的样子。 +#[derive(Debug, Clone, Default)] +pub struct Ledger { + /// 额度(5 小时 / 周)。 + pub quotas: Vec, + /// 还能用的重置卡。 + pub usable_cards: Vec, + /// 最早到期的、还有余额的积分的到期时间。 + pub credit_expiry_ms: Option, + /// 那一笔积分的来源描述(给「理由文本」用)。 + pub credit_desc: String, + /// 积分数据是否**完整读到**。 + /// + /// ⚠️ 「读不到 ≠ 没有」:账本文件缺失或解析失败 ⇒ `false` + /// ⇒ 决策走 `wait`(绝不做写操作),而不是「没有积分 ⇒ 用卡」。 + pub credit_data_complete: bool, + /// 账本里记的时间戳(毫秒),0 = 未知。 + pub updated_at_ms: i64, +} + +/// 读账本。 +/// +/// 返回 `Err` 表示**读不到/解析不了**(文件不存在、JSON 坏了、字段不对)。 +/// ⇒ 调用方要**如实报出来**,不能当成「账本是空的」。 +pub fn read() -> Result { + let Some(path) = ledger_path() else { + return Err("取不到 $HOME,找不到账本路径".to_string()); + }; + let text = match std::fs::read_to_string(&path) { + Ok(t) => t, + Err(e) => { + return Err(format!( + "读不到账本 {}({e})", + path.display() + )) + } + }; + let v: serde_json::Value = serde_json::from_str(&text) + .map_err(|e| format!("账本 {} 解析失败({e})", path.display()))?; + parse(&v) +} + +/// 从已解析的 JSON 里取账本(纯函数,可直接单测)。 +pub fn parse(v: &serde_json::Value) -> Result { + let updated_at_ms = v.get("updatedAtMs").and_then(|x| x.as_i64()).unwrap_or(0); + + // ── 额度 ── + let mut quotas = Vec::new(); + if let Some(q) = v.get("quota") { + let pick = |key: &str| -> Option { + let o = q.get(key)?; + let used = o.get("usedPercent").and_then(|x| x.as_f64()).unwrap_or(0.0); + let unlimited = o.get("unlimited").and_then(|x| x.as_bool()).unwrap_or(false); + let total = o.get("totalPercent").and_then(|x| x.as_f64()).unwrap_or(100.0); + let reset = o.get("resetTimeMs").and_then(|x| x.as_i64()).filter(|v| *v > 0); + Some(QuotaState { + quota_type: if key == "fiveHour" { QUOTA_FIVE_HOUR } else { QUOTA_WEEKLY }, + total, + used, + is_unlimited: unlimited, + reset_time_ms: reset, + }) + }; + if let Some(s) = pick("fiveHour") { + quotas.push(s); + } + if let Some(s) = pick("weekly") { + quotas.push(s); + } + } + + // ── 重置卡 ── + // ⚠️ 「能用」= 有 out_biz_no + 有 source_type + 还没过期。 + // 这三个字段缺一不可(决策与执行都要用)。 + let now = crate::clock::now_ms(); + let mut usable_cards = Vec::new(); + if let Some(list) = v.get("cards").and_then(|x| x.as_array()) { + for c in list { + let expire_time = c.get("expireTimeMs").and_then(|x| x.as_i64()).unwrap_or(0); + let out_biz_no = c.get("outBizNo").and_then(|x| x.as_str()).unwrap_or(""); + let source_type = c.get("sourceType").and_then(|x| x.as_str()).unwrap_or(""); + if out_biz_no.is_empty() || source_type.is_empty() || expire_time <= now { + continue; + } + usable_cards.push(UsableCard { + card_id: c + .get("cardId") + .and_then(|x| x.as_str()) + .unwrap_or("") + .to_string(), + source_type: source_type.to_string(), + out_biz_no: out_biz_no.to_string(), + expire_time, + }); + } + } + + // ── 积分 ── + // ⚠️ `credits` 字段**必须存在**(哪怕是空数组)才算「数据完整」。 + // 字段缺失 ⇒ 读不到 ⇒ `credit_data_complete = false` ⇒ 决策走 wait。 + let mut credit_data_complete = false; + let mut credit_expiry_ms = None; + let mut credit_desc = "积分".to_string(); + if let Some(list) = v.get("credits").and_then(|x| x.as_array()) { + credit_data_complete = true; + let mut best: Option<(i64, String)> = None; + for c in list { + let balance = c.get("balance").and_then(|x| x.as_f64()).unwrap_or(0.0); + let expire = c.get("expireTimeMs").and_then(|x| x.as_i64()).unwrap_or(0); + if balance <= 0.0 || expire <= 0 { + continue; + } + let label = c + .get("label") + .and_then(|x| x.as_str()) + .unwrap_or("积分") + .to_string(); + match &best { + Some((e, _)) if *e <= expire => {} + _ => best = Some((expire, label)), + } + } + if let Some((e, label)) = best { + credit_expiry_ms = Some(e); + credit_desc = label; + } + } + + Ok(Ledger { + quotas, + usable_cards, + credit_expiry_ms, + credit_desc, + credit_data_complete, + updated_at_ms, + }) +} + +#[cfg(test)] +mod tests { + use super::*; + + fn v(s: &str) -> serde_json::Value { + serde_json::from_str(s).unwrap() + } + + #[test] + fn missing_credits_field_means_incomplete() { + // ⚠️「读不到 ≠ 没有」:credits 字段缺失 ⇒ 数据不完整 + // ⇒ 决策必须走 wait(绝不能当成「没有积分 ⇒ 用卡」)。 + let l = parse(&v(r#"{"quota":{"fiveHour":{"usedPercent":3}}}"#)).unwrap(); + assert!(!l.credit_data_complete); + assert_eq!(l.credit_expiry_ms, None); + } + + #[test] + fn empty_credits_array_is_complete() { + // 字段在、但是空数组 ⇒ 确实没有积分 ⇒ 数据是完整的。 + let l = parse(&v(r#"{"credits":[]}"#)).unwrap(); + assert!(l.credit_data_complete); + assert_eq!(l.credit_expiry_ms, None); + } + + #[test] + fn earliest_credit_wins() { + let l = parse(&v( + r#"{"credits":[ + {"label":"远","balance":100,"expireTimeMs":1795000000000}, + {"label":"近","balance":50,"expireTimeMs":1794000000000}, + {"label":"用光","balance":0,"expireTimeMs":1793000000000} + ]}"#, + )) + .unwrap(); + assert_eq!(l.credit_expiry_ms, Some(1794000000000)); + assert_eq!(l.credit_desc, "近"); + } + + #[test] + fn cards_without_out_biz_no_are_not_usable() { + let now = crate::clock::now_ms(); + let l = parse(&v(&format!( + r#"{{"cards":[ + {{"cardId":"a","outBizNo":"biz","sourceType":"code","expireTimeMs":{}}}, + {{"cardId":"b","sourceType":"code","expireTimeMs":{}}}, + {{"cardId":"c","outBizNo":"biz2","expireTimeMs":{}}} + ]}}"#, + now + 86_400_000, + now + 86_400_000, + now + 86_400_000 + ))) + .unwrap(); + assert_eq!(l.usable_cards.len(), 1, "缺 out_biz_no / source_type 的卡不能用"); + assert_eq!(l.usable_cards[0].card_id, "a"); + } + + #[test] + fn expired_cards_are_not_usable() { + let now = crate::clock::now_ms(); + let l = parse(&v(&format!( + r#"{{"cards":[{{"cardId":"old","outBizNo":"b","sourceType":"code","expireTimeMs":{}}}]}}"#, + now - 1000 + ))) + .unwrap(); + assert!(l.usable_cards.is_empty(), "已过期的卡不能用"); + } + + #[test] + fn quota_is_mapped_to_both_dimensions() { + let l = parse(&v( + r#"{"quota":{"fiveHour":{"usedPercent":3,"resetTimeMs":111},"weekly":{"unlimited":true}}}"#, + )) + .unwrap(); + assert_eq!(l.quotas.len(), 2); + let five = l.quotas.iter().find(|q| q.quota_type == QUOTA_FIVE_HOUR).unwrap(); + assert_eq!(five.used, 3.0); + assert_eq!(five.reset_time_ms, Some(111)); + let weekly = l.quotas.iter().find(|q| q.quota_type == QUOTA_WEEKLY).unwrap(); + assert!(weekly.is_unlimited); + } +} diff --git a/plugins/hylouis233/expiry-guardian/daemon/rust/src/main.rs b/plugins/hylouis233/expiry-guardian/daemon/rust/src/main.rs new file mode 100644 index 0000000..d7c6547 --- /dev/null +++ b/plugins/hylouis233/expiry-guardian/daemon/rust/src/main.rs @@ -0,0 +1,334 @@ +//! 后台守护进程:读**本地账本** → 跑决策 → 如实报出结论。 +//! +//! 与 Mini App「蹬王之王」的判定逻辑严格同构,由 `verify-parity.mjs` +//! 逐字比对「动作 + 理由文本」防止漂移。 +//! +//! # 这个守护进程现在做什么、不做什么 +//! +//! **做**:读 `~/.config/mcode-reset-card/ledger.json`(用户自己维护的账本), +//! 用与 Mini App 完全相同的决策逻辑算出「该用卡还是该留积分」, +//! 把结论写进日志与状态文件,供 Mini App 展示。 +//! +//! **不做**(2026-10-20 管理员 review 的红线): +//! - ❌ 不读 MiniMax Code 的登录凭据(不调账号接口) +//! - ❌ 不读写 MiniMax Code 的内部数据库 +//! - ❌ 不读其它插件的数据目录 +//! - ❌ **不做任何写操作**(不扣卡、不暂停目标)—— 只给结论,由人执行 +//! +//! ⇒ 扣卡这类**真实消耗**的动作必须由用户在面板上点,插件不代替用户决定。 + +mod clock; +mod config; +mod decision; +mod ledger; + +use std::time::Duration; + +use decision::{decide, Action}; +use serde_json::json; + +/// 把 Unix 毫秒格式化成「10月19日 19:41」这样的本地时间。 +fn fmt_reset_at(ms: i64) -> String { + if ms == 0 { + return "未知".to_string(); + } + let secs = ms.div_euclid(1000); + let (m, d) = decision::local_md(secs); + let (h, mi) = decision::local_hm(secs); + if m == 0 { + return "未知".to_string(); + } + format!("{m}月{d}日 {h:02}:{mi:02}") +} + +/// 日志:带本地时间戳,便于 tail 追踪。 +pub fn log(msg: &str) { + use std::io::Write; + let now = clock::now_ms(); + let secs = now.div_euclid(1000); + let ms = now.rem_euclid(1000); + let (m, d) = decision::local_md(secs); + let (h, mi) = decision::local_hm(secs); + let line = format!("[{m:02}-{d:02} {h:02}:{mi:02}.{ms:03}] {msg}\n"); + let mut out = std::io::stdout(); + let _ = out.write_all(line.as_bytes()); + let _ = out.flush(); +} + +/// 一轮判定的结果。 +struct Round { + action: Action, + reason: String, + /// 账本读不到时的原因(None = 读到了)。 + ledger_error: Option, +} + +/// 跑一轮:读账本 → 决策。 +fn run_round(cfg: &config::Config) -> Round { + let now = clock::now_ms(); + match ledger::read() { + Ok(l) => { + let d = decide( + &l.quotas, + &l.usable_cards, + l.credit_expiry_ms, + &l.credit_desc, + &cfg.decision_cfg(), + now, + l.credit_data_complete, + ); + Round { + action: d.action, + reason: d.reason, + ledger_error: None, + } + } + Err(e) => { + // ⚠️ 读不到账本 ⇒ **数据不完整** ⇒ 决策必须是 wait。 + // 绝不能当成「没有积分、没有卡」⇒ 那会把结论翻转成「用卡」。 + // (「读不到 ≠ 没有」是本项目反复踩过的坑。) + Round { + action: Action::Wait, + reason: format!("账本读不到,本轮不做任何判断({e})"), + ledger_error: Some(e), + } + } + } +} + +/// 把这一轮的结论写进状态文件(供 Mini App 读取)。 +/// +/// ⚠️ 只写**插件自己的**数据目录,不碰宿主的任何数据。 +fn write_status(round: &Round) { + let Some(home) = std::env::var("HOME").ok() else { return }; + let dir = std::path::PathBuf::from(home).join(".config/mcode-reset-card"); + let _ = std::fs::create_dir_all(&dir); + let body = json!({ + "updatedAtMs": clock::now_ms(), + "action": match round.action { + Action::Idle => "idle", + Action::UseCard => "use-card", + Action::KeepCredit => "keep-credit", + Action::Wait => "wait", + }, + "reason": round.reason, + "ledgerError": round.ledger_error, + }); + let path = dir.join("daemon-status.json"); + let tmp = path.with_extension(format!("json.{}.tmp", std::process::id())); + if std::fs::write(&tmp, format!("{}\n", serde_json::to_string_pretty(&body).unwrap_or_default())).is_ok() { + let _ = std::fs::rename(&tmp, &path); + } +} + +/// 自检:读 stdin 的 JSON 用例,跑一遍决策并把结果打印成 JSON。 +/// +/// ⚠️ 这个协议是**三方一致性校验器**(`verify-parity.mjs`)的接口: +/// Rust / Mini App / Python 三方读**同一份**用例,各自算出动作与理由, +/// 校验器再逐字比对。**改了输出格式,三方比对就失效了。** +fn selftest() { + use std::io::Read as _; + let mut input = String::new(); + if std::io::stdin().read_to_string(&mut input).is_err() { + eprintln!("selftest: 无法读取 stdin"); + std::process::exit(2); + } + let payload: serde_json::Value = match serde_json::from_str(&input) { + Ok(v) => v, + Err(e) => { + eprintln!("selftest: JSON 解析失败 {e}"); + std::process::exit(2); + } + }; + let now = payload["now"].as_i64().unwrap_or(0); + let day = payload["day"].as_i64().unwrap_or(86_400_000); + // 三方必须喂同一个阈值,否则比的不是同一件事 + let trigger = payload["trigger"].as_f64().unwrap_or(99.0); + let tight = payload["tight"].as_f64().unwrap_or(80.0); + let low = payload["low"].as_f64().unwrap_or(95.0); + let skip = payload["skipBeforeResetMinutes"].as_f64().unwrap_or(60.0); + let cfg = decision::DecisionCfg { + card_trigger_percent: trigger, + tight, + low, + card_skip_before_reset_minutes: skip, + }; + let mut out = Vec::new(); + + for c in payload["cases"].as_array().cloned().unwrap_or_default() { + let mk = |t: i64, used: f64, total: f64, unlimited: bool| decision::QuotaState { + quota_type: t, + total, + used, + is_unlimited: unlimited, + reset_time_ms: None, + }; + let five_used = c["five"].as_f64().unwrap_or(0.0); + let week_used = c["week"].as_i64(); + let five_reset = c["resetInMinutes"] + .as_f64() + .map(|m| now + (m * 60_000.0) as i64); + let mut quotas = vec![ + mk(1, five_used, 100.0, false), + match week_used { + None => mk(2, 0.0, 100.0, true), + Some(w) => mk(2, w as f64, 100.0, false), + }, + ]; + quotas[0].reset_time_ms = five_reset; + let cards: Vec = c["cards"] + .as_array() + .cloned() + .unwrap_or_default() + .iter() + .filter_map(|v| { + let d = v.as_i64()?; + Some(decision::UsableCard { + card_id: format!("C{d}"), + source_type: "mcode_signin".into(), + out_biz_no: format!("b{d}"), + expire_time: now + d * day, + }) + }) + .collect(); + let credit = c["credit"].as_i64().map(|d| now + d * day); + let complete = c + .get("creditDataComplete") + .and_then(|v| v.as_bool()) + .unwrap_or(true); + let d = decide("as, &cards, credit, "平台积分", &cfg, now, complete); + let five_level = quotas[0].level(tight, low); + out.push(json!({ + "n": c["n"].as_str().unwrap_or(""), + "action": d.action.as_str(), + "reason": d.reason, + "level": five_level.as_str(), + })); + } + println!("{}", serde_json::to_string(&out).unwrap_or_default()); +} + +fn main() { + clock::install_signal_handlers(); + let args: Vec = std::env::args().collect(); + if args.iter().any(|a| a == "--selftest") { + selftest(); + return; + } + + let mut interval: f64 = 60.0; + let mut cmd = "watch".to_string(); + let mut config_path: Option = None; + + let mut i = 1; + while i < args.len() { + match args[i].as_str() { + "--interval" if i + 1 < args.len() => { + interval = args[i + 1].parse().unwrap_or(60.0); + i += 2; + } + "--config" if i + 1 < args.len() => { + config_path = Some(std::path::PathBuf::from(&args[i + 1])); + i += 2; + } + "watch" | "once" | "status" => { + cmd = args[i].clone(); + i += 1; + } + _ => i += 1, + } + } + + // 每轮重读:改配置无需 `launchctl unload/load` + let load_cfg = || match &config_path { + Some(p) => config::load(p), + None => config::load_or_default(), + }; + let (cfg, issues) = load_cfg(); + for s in &issues { + log(&format!("⚠️ {s}")); + } + + if cmd == "status" { + let r = run_round(&cfg); + println!("动作: {:?}", r.action); + println!("理由: {}", r.reason); + return; + } + + if cmd == "once" { + let r = run_round(&cfg); + write_status(&r); + println!("{}", r.reason); + return; + } + + log(&format!( + "启动后台监控,间隔 {interval}s(Ctrl+C 退出);扣卡触发线 {:.0}%,额度分界 {:.0}%/{:.0}%", + cfg.card_trigger_percent, cfg.quota_levels.tight, cfg.quota_levels.low + )); + log("数据来源:本地账本 ~/.config/mcode-reset-card/ledger.json(不读宿主凭据、不碰宿主数据库)"); + log("决策策略:与 Mini App「蹬王之王」一致 —— 按先过期先用;只给结论,不代你扣卡"); + + // 连续失败计数:账本读不到时必须**逐级喊出来**, + // 而不是每轮都被当成平常事刷过去(更不能静默 —— 静默 = 看起来一切正常)。 + let mut fails: u32 = 0; + let mut last_ledger_error: Option = None; + loop { + if clock::should_stop() { + log("收到终止信号,守护进程退出"); + return; + } + let (cfg, issues) = load_cfg(); + for s in &issues { + log(&format!("⚠️ {s}")); + } + + let r = run_round(&cfg); + write_status(&r); + + // 同一个「读不到」的原因只说一次(换原因了才再说)。 + if let Some(e) = &r.ledger_error { + if last_ledger_error.as_deref() != Some(e.as_str()) { + last_ledger_error = Some(e.clone()); + log(&format!("⚠️ {e} —— 本轮**没有任何结论**(不是「没有卡/没有积分」)")); + } + fails += 1; + if fails == 5 { + log("🔴 连续 5 轮读不到账本:到期雷达与决策建议都不可用。"); + } else if fails % 30 == 0 { + log(&format!("🔴 已连续 {fails} 轮读不到账本。")); + } + } else { + if fails > 0 { + log(&format!("✓ 账本已恢复可读(此前连续失败 {fails} 轮)")); + } + fails = 0; + last_ledger_error = None; + log(&format!("决策: {:?}", r.action)); + log(&format!("理由: {}", r.reason)); + if r.action == Action::UseCard { + log("👉 结论是「用卡」—— 请在「蹬王之王」面板上确认并手动执行(本插件不代你扣卡)。"); + } + } + + // 抖动,避免与整点撞在一起 + let jitter = (clock::now_ms() % 1000) as f64 / 1000.0 * 4.0 - 2.0; + std::thread::sleep(Duration::from_millis(((interval + jitter) * 1000.0) as u64)); + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn unreadable_ledger_never_says_use_card() { + // ⚠️「读不到 ≠ 没有」:账本读不到时**绝不能**得出「用卡」的结论 + // (那等于把「没数据」当成「没有积分」⇒ 建议去烧掉一张真卡)。 + let cfg = config::Config::default(); + let r = run_round(&cfg); + assert_eq!(r.action, Action::Wait, "理由:{}", r.reason); + assert!(r.ledger_error.is_some(), "读不到账本必须报出来"); + } +} diff --git a/plugins/hylouis233/expiry-guardian/daemon/verify-parity.mjs b/plugins/hylouis233/expiry-guardian/daemon/verify-parity.mjs new file mode 100644 index 0000000..624ed35 --- /dev/null +++ b/plugins/hylouis233/expiry-guardian/daemon/verify-parity.mjs @@ -0,0 +1,251 @@ +#!/usr/bin/env node +/** + * 三方一致性校验器:确保三处扣卡决策永远一致。 + * + * Mini App(Node) packages/expiry-guardian/miniapp/node/server.mjs → decide() + * 后台旧版(Python) ~/mcode-reset-card-autouse/reset_card_autouse.py → decide_background() + * 后台新版(Rust) ~/mcode-reset-card-autouse/rust/src/decision.rs → decide() + * + * 三者是三门语言、两套运行路径。任何一侧改动都可能悄悄漂移, + * 扣卡决策漂移 = 真金白银的损失,必须逐字比对「动作 + 理由文本」。 + * + * 用法: + * node verify-parity.mjs # 比对三者 + * node verify-parity.mjs --write # 顺便刷新快照 + */ +import { readFileSync, writeFileSync, existsSync, mkdtempSync, mkdirSync, copyFileSync, readdirSync } from 'node:fs'; +import { execFileSync } from 'node:child_process'; +import { homedir, tmpdir } from 'node:os'; +import { join, dirname } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const HERE = dirname(fileURLToPath(import.meta.url)); +// 路径解析:优先用**插件包内**的副本(自包含),找不到再回落到本机开发目录。 +// +// 2026-10-19 修:这个校验器原先硬编码 `~/Desktop/mmx/miniapps/...`, +// 于是「把插件复制到别处」就完全跑不起来 —— 违反 CONTRIBUTING 里 +// 「插件应能独立复制使用,不依赖仓库里的其他目录」这条约定。 +const WORKSPACE = process.env.MCODE_WORKSPACE ?? join(homedir(), 'Desktop', 'mmx'); +const PLUGIN_MINIAPP = join(HERE, '..', 'miniapp', 'node', 'server.mjs'); +const WORKSPACE_MINIAPP = join( + WORKSPACE, 'miniapps', 'expiry-guardian', 'miniapp', 'node', 'server.mjs', +); +const MINIAPP_SERVER = existsSync(PLUGIN_MINIAPP) ? PLUGIN_MINIAPP : WORKSPACE_MINIAPP; +// ⚠️ **必须支持 `MCODE_BG_SCRIPT` 覆盖**(2026-10-20 实测发现): +// `check-parity.sh` 的第 3 步是「校验器自检」——它把后台脚本改成一份**注入漂移**的 +// 副本,再跑校验器,要求校验器**必须报不一致**(否则说明校验器自己已经失效了)。 +// 而这里原本把路径**写死**了 ⇒ 校验器永远读的是原脚本 ⇒ 永远报一致 +// ⇒ 自检**从建立起就一直是坏的**(一直在报「校验器本身已失效」)。 +const BG_PY = process.env.MCODE_BG_SCRIPT || join(HERE, 'reset_card_autouse.py'); +const RUST_DAEMON = join(HERE, 'rust', 'target', 'release', 'reset-card-daemon'); +const SNAPSHOT = join(HERE, 'bg_parity.json'); + +for (const [label, p] of [ + ['Mini App 服务端', MINIAPP_SERVER], + ['后台服务(Python)', BG_PY], + ['后台守护(Rust 二进制)', RUST_DAEMON], +]) { + if (!existsSync(p)) { + console.error(`✗ 找不到 ${label}: ${p}`); + console.error(' Rust 版需先执行: cd rust && cargo build --release'); + process.exit(2); + } +} + +// ── 0. 固定配置:三方必须读同一份阈值 ── +// 否则校验结果会随**用户自己的 config.json** 漂移:改一次配置, +// 这个校验器就从「验一致」变成「验谁赢」了。 +// Node / Python 都用 $HOME 定位配置,所以给它们一个临时 HOME 即可。 +const TMP_HOME = mkdtempSync(join(tmpdir(), 'mcode-parity-')); +mkdirSync(join(TMP_HOME, '.config', 'mcode-reset-card'), { recursive: true }); +writeFileSync( + join(TMP_HOME, '.config', 'mcode-reset-card', 'config.json'), + JSON.stringify( + { + schemaVersion: 1, + cardTriggerPercent: 99, + cardSkipBeforeResetMinutes: 60, + quotaLevels: { tight: 80, low: 95 }, + goalPause: { enabled: false, triggerPercent: 99, resumeAtPercent: 0 }, + }, + null, + 2, + ), +); +process.env.HOME = TMP_HOME; + +// ── 1. Mini App ────────────────────────────────────────────────────────────── +const src = readFileSync(MINIAPP_SERVER, 'utf8').replace(/export async function start[\s\S]*$/, ''); +// ⚠️ 不能用 data: URL 导入 —— Mini App 的 server.mjs 现在有相对 import +// (./bot_wakeup.mjs、./mcp.mjs),data: URL 里解析不了相对路径 +// (ERR_UNSUPPORTED_RESOLVE_REQUEST)。 +// ⇒ 改成把 server.mjs 复制成一份「只保留导出前部分」的临时 .mjs 文件再 import。 +// +// ⚠️ **必须把同目录的兄弟模块一起复制过去**(2026-10-20 实测踩到): +// 原来只复制了 `bot_wakeup.mjs`,而 server.mjs 后来又 import 了 `./mcp.mjs` +// ⇒ ERR_MODULE_NOT_FOUND ⇒ **这道三方一致性校验一直在报错、根本没在跑** +// (文档里「一致性是测出来的,不是声称的」就成了空话)。 +// ⇒ 改成:把 MiniApp 目录下的**所有 .mjs** 都复制过去,server.mjs 再 import 哪个都找得到。 +const modDir = mkdtempSync(join(tmpdir(), 'expiry-parity-')); +const modFile = join(modDir, 'server-under-test.mjs'); +writeFileSync(modFile, src + '\nexport { decide };'); +// 依赖文件跟 server.mjs 同目录(server.mjs 用相对路径 import 它们)。 +for (const f of readdirSync(dirname(MINIAPP_SERVER))) { + if (f.endsWith('.mjs') && f !== 'server.mjs') { + copyFileSync(join(dirname(MINIAPP_SERVER), f), join(modDir, f)); + } +} +const mod = await import(modFile); +const miniDecide = mod.decide; + +// ── 2. Python ──────────────────────────────────────────────────────────────── +const pyScript = ` +import importlib.util, json, sys +spec = importlib.util.spec_from_file_location("bg", ${JSON.stringify(BG_PY)}) +m = importlib.util.module_from_spec(spec); sys.modules["bg"] = m; spec.loader.exec_module(m) +payload = json.load(sys.stdin) +NOW, DAY = payload["now"], payload["day"] +out = [] +for c in payload["cases"]: + def qs(t, u, tot=100.0, ul=False): + return m.QuotaState(quota_type=t, total=tot, used=u, is_unlimited=ul) # triggered 是 property + quotas = [qs(1, c["five"])] + quotas.append(qs(2, 0, 100.0, True) if c["week"] is None else qs(2, c["week"])) + if c.get("resetInMinutes") is not None: + quotas[0].reset_time = NOW + int(c["resetInMinutes"] * 60_000) + cards = [{"card_id": f"C{d}", "out_biz_no": f"b{d}", "source_type": "mcode_signin", + "expire_time": NOW + d * DAY} for d in c["cards"]] + exp = None if c["credit"] is None else NOW + c["credit"] * DAY + cfg, _issues = m.load_config() + action, reason = m.decide_background( + quotas, cards, exp, "平台积分", cfg, NOW, c.get("creditDataComplete", True) + ) + out.append({"n": c["n"], "action": action, "reason": reason}) +json.dump(out, sys.stdout, ensure_ascii=False) +`; + +// ── 3. Rust:用一个隐藏的 --selftest 模式跑同一组用例 ──────────────────────── +const DAY = 86_400_000; +const NOW = Date.now(); + +const TRIGGER = 99; +const mq = (type, used, total = 100, unlimited = false) => ({ + quota_type: type, + total, + used, + is_unlimited: unlimited, + // decide() 的 idle 分支会读 usedPercent 生成理由文案 + usedPercent: used, + totalPercent: total, + remainingPercent: Math.max(0, (total - used) / total) * 100, + exhausted: !unlimited && total > 0 && used >= total, + unlimited, + triggered: !unlimited && total > 0 && used >= (total * TRIGGER) / 100, + resetTimeMs: NOW + 30 * DAY, +}); +const mcard = (d) => ({ cardId: `C${d}`, sourceType: 'mcode_signin', outBizNo: `b${d}`, expireTimeMs: NOW + d * DAY, expired: false }); +const mcredit = (d) => ({ source: 'platform', label: '平台积分', balance: 500, expireTimeMs: NOW + d * DAY }); + +/** 覆盖 decide() 每一个分支 */ +const CASES = [ + { n: '未耗尽 / 卡7 / 积13', five: 50, week: null, cards: [7], credit: 13 }, + { n: '未耗尽 / 无卡 / 积13', five: 0, week: null, cards: [], credit: 13 }, + { n: '耗尽 / 卡先过期', five: 100, week: null, cards: [7], credit: 13 }, + { n: '耗尽 / 积分先过期', five: 100, week: null, cards: [20], credit: 5 }, + { n: '耗尽 / 无卡 / 有积分', five: 100, week: null, cards: [], credit: 13 }, + { n: '耗尽 / 有卡 / 无积分', five: 100, week: null, cards: [7], credit: null }, + { n: '耗尽 / 无卡 / 无积分', five: 100, week: null, cards: [], credit: null }, + { n: '周限额耗尽 / 5h未耗尽', five: 50, week: 100, cards: [7], credit: 13 }, + { n: '周限额耗尽 / 积分先过期', five: 50, week: 100, cards: [20], credit: 5 }, + { n: '周限额未耗尽 / 5h未耗尽', five: 50, week: 50, cards: [7], credit: 13 }, + { n: '5h 98% 未到触发线', five: 98, week: null, cards: [7], credit: 13 }, + { n: '5h 99% 触发提前动作', five: 99, week: null, cards: [7], credit: 13 }, + { n: '5h 100% 边界算耗尽', five: 100, week: null, cards: [1], credit: 60 }, + // 「额度马上要刷新就不烧卡」这一组:三方必须给出同一个结论 + { n: '5h 99% / 2小时后刷新', five: 99, week: null, cards: [7], credit: 13, resetInMinutes: 120 }, + { n: '5h 99% / 10分钟后刷新', five: 99, week: null, cards: [7], credit: 13, resetInMinutes: 10 }, + { n: '5h 99% / 恰好60分钟后刷新', five: 99, week: null, cards: [7], credit: 13, resetInMinutes: 60 }, + { n: '5h 99% / 61分钟后刷新', five: 99, week: null, cards: [7], credit: 13, resetInMinutes: 61 }, + // 「读不到 ≠ 没有」:积分数据不完整时,三方都必须**不做写操作**。 + // ⚠️ 2026-10-19 PR #28 review 修:以前读失败被当成「没有积分」, + // 结论会从「留卡」翻转成「用卡」——而扣卡是真实写操作。 + { n: '积分数据不完整 / 耗尽 / 有卡', five: 100, week: null, cards: [7], credit: null, creditDataComplete: false }, + { n: '积分数据不完整 / 耗尽 / 有卡有积分', five: 100, week: null, cards: [7], credit: 13, creditDataComplete: false }, +]; + +const miniResults = CASES.map((c) => { + + const five = mq(1, c.five); + five.triggered = !five.is_unlimited && five.total > 0 && five.used >= five.total * TRIGGER / 100; + if (c.resetInMinutes !== undefined) five.resetTimeMs = NOW + c.resetInMinutes * 60_000; + const week = c.week === null ? mq(2, 0, 100, true) : mq(2, c.week); + week.triggered = !week.is_unlimited && week.total > 0 && week.used >= week.total * TRIGGER / 100; + const d = miniDecide({ + platformPools: c.credit === null ? [] : [mcredit(c.credit)], + codeCredits: [], + cards: c.cards.map(mcard), + quota: { fiveHour: five, weekly: week }, + creditDataComplete: c.creditDataComplete !== false, + }, NOW); + return { n: c.n, action: d.action, reason: d.reason }; +}); + +const payload = JSON.stringify({ + now: NOW, day: DAY, + trigger: TRIGGER, tight: 80, low: 95, skipBeforeResetMinutes: 60, + cases: CASES.map((c) => ({ + n: c.n, five: c.five, week: c.week, cards: c.cards, credit: c.credit, + resetInMinutes: c.resetInMinutes, creditDataComplete: c.creditDataComplete !== false, + })), +}); + +const pyResults = JSON.parse( + execFileSync('/usr/bin/python3', ['-c', pyScript], { + input: payload, + encoding: 'utf8', + maxBuffer: 8 << 20, + env: { ...process.env, HOME: TMP_HOME }, + }), +); + +// Rust:用 --selftest 读同一份 JSON,打印同样结构 +const rustResults = JSON.parse( + execFileSync(RUST_DAEMON, ['--selftest'], { input: payload, encoding: 'utf8', maxBuffer: 8 << 20 }), +); + +// Mini App 用 use-credit,Python 用 keep-credit —— 语义相同,仅命名不同 +const NORMALIZE = { 'use-credit': 'keep-credit' }; +const norm = (a) => NORMALIZE[a] ?? a; + +let failed = 0; +console.log( + '用例'.padEnd(28) + 'MiniApp'.padEnd(13) + 'Python'.padEnd(13) + 'Rust'.padEnd(13) + '一致', +); +console.log('-'.repeat(80)); +for (let i = 0; i < CASES.length; i += 1) { + const a = miniResults[i]; + const b = pyResults[i]; + const c = rustResults[i]; + const actionOk = norm(a.action) === norm(b.action) && norm(a.action) === norm(c.action); + const reasonOk = a.reason === b.reason && a.reason === c.reason; + const ok = actionOk && reasonOk; + if (!ok) failed += 1; + console.log(a.n.padEnd(26) + a.action.padEnd(13) + b.action.padEnd(13) + c.action.padEnd(13) + (ok ? '✓' : '✗')); + if (!ok) { + if (!actionOk) console.log(` 动作不一致: MiniApp=${a.action} Python=${b.action} Rust=${c.action}`); + if (!reasonOk) { + console.log(` MiniApp: ${a.reason}`); + console.log(` Python : ${b.reason}`); + console.log(` Rust : ${c.reason}`); + } + } +} +console.log('-'.repeat(80)); +console.log(`${CASES.length - failed}/${CASES.length} 三方完全一致(动作 + 理由文本逐字)`); + +if (process.argv.includes('--write')) { + writeFileSync(SNAPSHOT, JSON.stringify({ at: new Date().toISOString(), results: miniResults }, null, 2)); + console.log(`快照已刷新: ${SNAPSHOT}`); +} + +process.exit(failed === 0 ? 0 : 1); diff --git a/plugins/hylouis233/expiry-guardian/docs/BOT_DIAGNOSIS.md b/plugins/hylouis233/expiry-guardian/docs/BOT_DIAGNOSIS.md new file mode 100644 index 0000000..e7bb125 --- /dev/null +++ b/plugins/hylouis233/expiry-guardian/docs/BOT_DIAGNOSIS.md @@ -0,0 +1,166 @@ +# 蹬王之王 · 排查手册(v2.0 裁剪版) + +> 对象:`plugins/hylouis233/expiry-guardian` +> 诊断口径:2026-10-20 首版 → 2026-10-20 晚间重写为「唤醒通道排查手册」→ +> **2026-10-20 夜按 v2.0 裁剪版重写**(Bot 看门狗与唤醒通道已移除)。 + +这份手册回答一个问题:**「到期雷达不显示 / 结论不对 / 守护进程不跑,怎么查?」** + +--- + +## 零、先跑这 5 步(90% 的问题在这里面) + +```bash +cd ~/.config/mcode-reset-card + +# ① 账本在不在、能不能解析?(唯一数据源) +ls -l ledger.json +python3 -c "import json;d=json.load(open('ledger.json'));print('quota:',bool(d.get('quota')),'cards:',len(d.get('cards',[])),'credits:',len(d.get('credits',[])))" + +# ② 守护进程在不在、跑了多久 +launchctl list | grep reset-card +tail -20 /tmp/mcode-reset-card.log + +# ③ 它算出来的结论 +cat daemon-status.json + +# ④ 跑一轮,看它说什么 +~/mcode-reset-card-autouse/rust/target/release/reset-card-daemon once + +# ⑤ 三方逻辑有没有漂移 +cd <插件目录> && node daemon/verify-parity.mjs +``` + +--- + +## 一、现象 A:面板上「读不到数据」/ 一直转圈 + +**查什么** + +```bash +ls -l ~/.config/mcode-reset-card/ledger.json +tail -30 /tmp/mcode-reset-card.log +``` + +**怎么判断** + +| 观察到 | 结论 | 怎么办 | +| --- | --- | --- | +| 账本文件不存在 | **没有数据源** | 在面板底部的「本地账本」区里填一份并保存,或直接创建 `ledger.json` | +| 账本 JSON 坏了 | 解析失败 | 修 JSON(面板会报出具体的解析错误) | +| 账本里有 `credits` 字段但面板不显示 | 字段形状不对 | `credits[]` 每项要有 `label` / `balance` / `expireTimeMs`;`balance` 必须是数字 | +| 日志里没有「Bot 看门狗」那类行 | **正常** | v2.0 没有 Bot 看门狗了,日志里看的是「决策:」/「理由:」 | + +--- + +## 二、现象 B:结论一直停在「暂不处理」 + +**这是设计如此**,不是 bug。 + +**查什么** + +```bash +python3 -c " +import json;d=json.load(open('/Users/lh/.config/mcode-reset-card/ledger.json')) +print('有 credits 字段吗:', 'credits' in d) +print('fiveHour 用量:', (d.get('quota') or {}).get('fiveHour',{}).get('usedPercent')) +" +``` + +**怎么判断** + +| 观察到 | 结论 | +| --- | --- | +| 账本里**没有** `credits` 字段 | 「数据不完整」⇒ 结论停在「暂不处理」。⚠️ 这是刻意的:**读不到 ≠ 没有**,宁可不给建议也不给错建议(一个错建议 = 烧掉一张真卡) | +| `credits` 是空数组 `[]` | 确实没有积分 ⇒ 结论会变成「建议用卡」(如果额度到线且有卡) | +| 额度没到触发线(默认 99%) | 结论就是「额度充足」 | +| 距刷新不到 `cardSkipBeforeResetMinutes`(默认 60 分钟) | 结论是「暂不消耗重置卡」—— 额度马上就自己回来了,烧卡纯浪费 | + +--- + +## 三、现象 C:卡明明在账本里,却说「没有可用的重置卡」 + +**查什么** + +```bash +python3 -c " +import json,time;d=json.load(open('/Users/lh/.config/mcode-reset-card/ledger.json')) +now=int(time.time()*1000) +for c in d.get('cards',[]): + print(c.get('cardId'), 'outBizNo=',bool(c.get('outBizNo')), 'sourceType=',bool(c.get('sourceType')), '过期=',(c.get('expireTimeMs') or 0)<=now) +" +``` + +**怎么判断** + +| 观察到 | 结论 | +| --- | --- | +| `outBizNo` 或 `sourceType` 是空的 | 这张卡**不算可用**(两个字段缺一不可) | +| `expireTimeMs` 已经过去了 | 已过期,不算可用 | +| 字段名写错了(比如写成 `expireTime`) | 取不到值 ⇒ 不算可用。**字段名必须逐字一致** | + +--- + +## 四、现象 D:守护进程没在跑 + +**查什么** + +```bash +launchctl list | grep reset-card +tail -20 /tmp/mcode-reset-card.log +tail -20 /tmp/mcode-reset-card.err +``` + +**怎么判断** + +| 观察到 | 结论 | 怎么办 | +| --- | --- | --- | +| `launchctl list` 里没有这一行 | 没装或没加载 | 装好插件后重新安装 launchd 作业 | +| 日志里连续刷「读不到账本」 | 守护进程在跑,但**账本读不到** | 见现象 A | +| 日志里连续刷「连续 5 轮读不到账本」 | 同上,且已升级告警 | 同上 | +| `.err` 里有 panic | 守护进程崩了 | `cargo build --release` 后重装二进制 | + +⚠️ **守护进程崩了不会丢结论**:结论只写在账本与状态文件里, +守护进程只是重算它。 + +--- + +## 五、现象 E:面板和守护进程的结论不一样 + +**查什么** + +```bash +cd <插件目录> && node daemon/verify-parity.mjs +``` + +**怎么判断** + +| 观察到 | 结论 | +| --- | --- | +| 报「19/19 三方完全一致」 | 三份**逻辑**没问题 ⇒ 差异来自**输入不同**(面板读账本的瞬间与守护进程读的不是同一份)⇒ 刷新一下页面 | +| 报「N 条不符」 | 🔴 **决策逻辑漂移**了:Rust / Mini App / Python 三份实现不再一致 | + +⚠️ **三方的理由文本必须逐字一致**。改了一处就要同步三处, +否则「面板说用卡、守护进程说留积分」这种矛盾会静悄悄地出现。 + +--- + +## 六、附录:v1.x 的排查资料去哪了 + +v1.x 的 Bot 看门狗与唤醒通道(读 minimax-bot 的 `state.json`、写唤醒请求、 +用 `session send` 投递)**已随 v2.0 移除** —— 社区插件不能读别的插件的数据目录。 + +那套机制的实测结论与踩过的坑,完整保留在 git 历史里: + +```bash +git log --oneline -- plugins/hylouis233/expiry-guardian/docs/BOT_DIAGNOSIS.md +git show :plugins/hylouis233/expiry-guardian/docs/BOT_DIAGNOSIS.md +``` + +其中仍然适用的教训: + +1. **「读不到」≠「没有」** —— 缺字段必须当成「数据不完整」,不能当成「没有数据」 +2. **粘在对象上的状态会变陈值** —— 判现状要看最近一次动作的结果 +3. **一个「窗口」别同时管两件事** —— 「投递过了吗」与「多久能再救」必须拆开 +4. **单测覆盖了算法 ≠ 覆盖了接线** —— 取数那层也要有测试(见 `tests/server-lint.test.mjs`) +5. **静默失效比报错更坏** —— 读不到就必须说出来 diff --git a/plugins/hylouis233/expiry-guardian/docs/README.zh-CN.md b/plugins/hylouis233/expiry-guardian/docs/README.zh-CN.md new file mode 100644 index 0000000..1e37261 --- /dev/null +++ b/plugins/hylouis233/expiry-guardian/docs/README.zh-CN.md @@ -0,0 +1,257 @@ +# 蹬王之王 · 本地到期账本与用卡决策 + +> English version: [../README.md](../README.md) + +**v2.0(裁剪版)— 2026-10-20。** + +这个 Mini App 现在只做一件事:**看你自己维护的本地账本,算出「该用卡还是该留积分」**。 + +--- + +## v2.0 做了什么、为什么变成这样 + +v1.x 的功能更激进:它自己去调账号接口拿额度与积分、去读写 MiniMax Code 的内部数据库 +去暂停目标、去读别的插件的数据目录去把挂掉的 bot 叫醒。 + +上游社区插件有三条硬红线(2026-10-20 管理员 review 明确列出): + +| 红线 | v1.x 的做法 | v2.0 的做法 | +| --- | --- | --- | +| **不能读 MiniMax Code 的登录凭据** | 读 lease socket / `.cap` 取 access token,再拿它调账号接口 | **不读**。额度/积分/卡的信息改由**本地账本**提供 | +| **不能读写 MiniMax Code 的内部数据库** | `sqlite3` 直接 `UPDATE`/`DELETE`/`INSERT` 目标与队列,还读回合记录 | **不碰**。只读插件自己的目录 | +| **不能读别的插件的数据目录** | 读 minimax-bot 的 `state.json` 拿 bot 与会话 id,再往那些会话发消息 | **不读**。整个 Bot 看门狗移除 | + +⇒ 代价是明确的:**v2.0 不再自动扣卡、不再自动暂停目标、不再自动叫醒 bot。** +它只负责把结论算准、说清楚,**动作由你自己做**。 + +⇒ 好处也很明确:v2.0 是一份**能进社区仓库**的代码。 +它不碰宿主任何私有数据,行为全部可预测。 + +--- + +## 它现在的样子 + +``` +你手写的账本 蹬王之王(只读) 你做决定 +~/.config/mcode-reset-card/ ──▶ 算「先过期先用」 ──▶ 面板上的建议 + 理由 + ledger.json (扣卡/暂停由你手动执行) +``` + +### 本地账本长什么样 + +路径:`~/.config/mcode-reset-card/ledger.json` + +```json +{ + "schemaVersion": 1, + "updatedAtMs": 1792480000000, + "quota": { + "fiveHour": { "usedPercent": 3, "totalPercent": 100, "unlimited": false, "resetTimeMs": 1792497600000 }, + "weekly": { "usedPercent": 0, "totalPercent": 100, "unlimited": true, "resetTimeMs": 1792944000000 } + }, + "cards": [ + { "cardId": "card_1", "label": "重置卡 A", "sourceType": "code", + "outBizNo": "biz_1", "expireTimeMs": 1795000000000 } + ], + "credits": [ + { "label": "赠送", "source": "code", "granted": 400, "used": 0, + "balance": 400, "expireTimeMs": 1795017600000 } + ] +} +``` + +字段说明: + +| 字段 | 含义 | +| --- | --- | +| `quota.fiveHour` / `quota.weekly` | 5 小时与周限额的用量百分比、是否无限、刷新时刻 | +| `cards[]` | 可用的重置卡。`outBizNo` 与 `sourceType` **两个都要有**,否则这张卡不算「可用」 | +| `credits[]` | 积分明细。`balance > 0` 且未过期的才算「还可用」 | +| `updatedAtMs` | 你最后一次更新账本的时刻(面板会显示) | + +面板底部有一个**账本编辑区**:可以直接在页面上改 JSON 并保存, +也可以用任何编辑器改这个文件(改完点一下「刷新」)。 + +> ⚠️ **缺 `credits` 字段 ≠ 没有积分。** +> 字段缺失会被判成「数据不完整」⇒ 结论停在「暂不处理」, +> **绝不会**因为「读不到」就反过来建议你烧掉一张真卡。 +> 这条规则在 Rust、Mini App、Python 三份实现里是同构的。 + +### 决策逻辑:先过期先用 + +额度打到触发线(默认 99%)时,按「**谁先过期先用谁**」给结论: + +| 情况 | 结论 | 理由 | +| --- | --- | --- | +| 额度没到触发线 | 额度充足 | 不动 | +| 额度到线 + 没有可用积分 + 有卡 | **建议用卡** | 没有积分,用卡把额度换回来 | +| 额度到线 + 没有可用积分 + 没卡 | 暂不处理 | 两样都没有 | +| 额度到线 + 有积分 + 没卡 | **建议留积分** | 没卡可用,让积分先消耗 | +| 额度到线 + 都有,卡先过期 | **建议用卡** | 先用卡保住更耐放的积分 | +| 额度到线 + 都有,积分先过期 | **建议留积分** | 让积分先消耗,留住更耐放的卡 | +| 额度到线 + 距刷新不到 N 分钟 | 暂不处理 | 额度马上就自己刷新了,**烧卡纯浪费** | +| 数据不完整 | 暂不处理 | 宁可不给建议,也不给错建议 | + +### 三方一致性 + +决策逻辑有**三份同构实现**: + +| 实现 | 位置 | 作用 | +| --- | --- | --- | +| Rust | `daemon/rust/src/decision.rs` | 后台守护进程 | +| Mini App | `miniapp/node/server.mjs` 的 `decide()` | 看板 | +| Python | `daemon/reset_card_autouse.py` 的 `decide_background()` | **比对基准**(纯函数,不联网) | + +`daemon/verify-parity.mjs` 让三方读**同一份用例**,逐字比对「动作 + 理由文本」: + +``` +$ node daemon/verify-parity.mjs +19/19 三方完全一致(动作 + 理由文本逐字) +``` + +**理由文本必须逐字一致** —— 改一处就要同步三处,否则校验器会红。 +这条是本项目最值钱的一道保险:它挡住的正是「三方慢慢漂移,最后结论互相矛盾」。 + +--- + +## 后台守护进程 + +Rust 守护进程通过 macOS `launchd` 常驻,**只读**: + +- 每轮读一次本地账本 +- 跑一遍上面那套决策 +- 把结论写进日志与 `~/.config/mcode-reset-card/daemon-status.json` +- 账本读不到 ⇒ **明确报出来**(「本轮没有任何结论」),而不是当成「没有卡、没有积分」 + +```bash +cd daemon/rust && cargo test --release # 25/25 +./reset-card-daemon --selftest # 用合成账本跑一遍决策 +./reset-card-daemon once # 跑一轮,打印结论 +./reset-card-daemon status # 只打印当前结论 +``` + +⚠️ **它不做任何写操作**:不扣卡、不暂停目标、不改宿主任何数据。 + +### 诚实的失败 + +这一版特别在意一件事:**「看起来一切正常、实际什么都没发生」比直接报错更坏**。 + +所以: + +- 账本读不到 ⇒ 日志明确说「本轮**没有任何结论**」,且连续失败会逐级升级(5 轮 / 每 30 轮) +- 同一个原因只说一次(换原因了才再说),不刷屏 +- 决策永远带**理由文本**,不是光给一个动作 +- 读不到 ≠ 没有:**数据不完整时永远不给「用卡」这种会花钱的建议** + +--- + +## local MCP 端点 + +插件声明了一个 MCP 端点(`server=expiry-guardian`, `path=/mcp/expiry-guardian`), +别的插件可以在自己的回合里直接问它: + +| 工具 | 作用 | +| --- | --- | +| `watchdog_status` | 查账本里的额度、重置卡、积分与当前结论 | +| `watchdog_decide` | 立即判定一次(**只判定不扣卡**) | + +⚠️ **刻意不暴露「扣卡」**:扣卡是真实写操作,让别的插件随手就能扣太危险。 + +--- + +## 配置 + +`~/.config/mcode-reset-card/config.json`(Rust / Mini App / Python 读同一个文件): + +```json +{ + "schemaVersion": 1, + "cardTriggerPercent": 99, + "cardSkipBeforeResetMinutes": 60, + "quotaLevels": { "tight": 80, "low": 95 } +} +``` + +| 字段 | 含义 | +| --- | --- | +| `cardTriggerPercent` | 5 小时额度到这个值就进入「该动手了」的判定 | +| `cardSkipBeforeResetMinutes` | 距刷新不足这么多分钟就不烧卡(0 = 关闭该保护) | +| `quotaLevels` | 额度紧张 / 额度不足两档的显示分界 | + +配置里的字段是**白名单式重建**的(`normalizeConfig`): +少一个字段就是一条静默失效的通道,所以改配置结构时**必须三处同步** +(Rust 配置、Mini App 的 `normalizeConfig`、真实 `config.json`)。 + +--- + +## 测试 + +| 套件 | 结果 | +| --- | --- | +| Rust(`daemon/rust`) | **25/25** | +| Python 决策单测(`daemon/bg_decision.test.py`) | **20/20** | +| Mini App(`tests/`) | **102/102** | +| 三方一致性(`daemon/verify-parity.mjs`) | **19/19** | +| 上游 `npm run validate` | 本插件 **OK**(0 错 0 警)、`repository: OK` | +| 上游 `npm test` | 69/69 | + +Mini App 侧另有一个**静态守卫**(`tests/server-lint.test.mjs`): +抓「用了但没声明」的标识符。 +它是在一个真实事故之后加的 —— 看板取数层里一个拼写错误 +(`platform` 写成 `platformRes`)让整个取数抛异常, +**看板(额度、决策、卡片)整个是坏的**,而单测测的是纯函数 `decide()`, +**取数那层从来没被跑过**。这个守卫就是为了让那类错当场暴露。 + +--- + +## v1.x 曾经做过什么 + +v1.x(现在已裁掉)的完整历史在 git 里(`git log` 的 v1.1~v1.6 提交),它做过: + +- 自动扣卡、自动暂停/恢复目标 +- Bot 看门狗:把因临时故障挂掉的 bot 复用原会话叫醒 +- 读账号接口拿真实额度 + +这些都是**对宿主私有数据的操作**,社区插件不能做。 +v1.x 里那套「静默失效全部变成会说话」的加固(解析容错、按最新回合判定、 +acked 永久化、失败计数只在成功时归零、静态守卫……)**保留了下来**, +它们在 v2.0 里仍然有意义 —— 只是守护的东西换成了本地账本。 + +--- + +## 运行环境 + +- **MiniMax Code 3.1.2 或更高版本** —— Mini App 声明了 `agentAccess` 与 `agentConcurrency` +- macOS 上验证过;上游校验跑在 **Node 20** 上 +- Rust 守护进程需要 Rust 工具链来编译(`cargo build --release`) + +## 数据与访问范围 + +本插件**只读写自己的目录**: + +| 路径 | 是什么 | +| --- | --- | +| `~/.config/mcode-reset-card/ledger.json` | **你**维护的账本(面板读它,也能直接在面板里改) | +| `~/.config/mcode-reset-card/config.json` | 共享配置(触发线等) | +| `~/.config/mcode-reset-card/daemon-status.json` | 后台守护进程最近一次的结论 | + +它**刻意不做**: + +- 不读 MiniMax Code 的**登录凭据**(不碰 lease socket、不碰 `.cap`、不落盘 token) +- 不打开也不写 **`~/.minimax/v2/sqlite/runtime-state.sqlite`**(宿主内部数据库) +- 不读**别的插件的数据目录**(如 `~/.minimax/v2/plugin-data/liveboards/*/state.json`) + +它在自己目录之外**不做任何写操作**:不扣重置卡、不暂停目标、不往别的插件的会话里写消息。 +后台守护进程是可选的 —— 看板自己就能用。 + +## 前提与边界 + +- **不读宿主凭据、不碰宿主数据库、不读别的插件的数据**(v2.0 的硬约束) +- **不做任何写操作**:扣卡、暂停目标都要你自己在面板上点 +- 结论**仅供参考**:它基于你手写的账本,账本准不准只有你知道 +- 数据不完整时**不给结论**,而不是猜一个 + +## 文档 + +- 本文件 —— 中文文档 +- [../README.md](../README.md) —— 英文版 diff --git a/plugins/hylouis233/expiry-guardian/icon-dark.png b/plugins/hylouis233/expiry-guardian/icon-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..7220828d3763f5882b8a232ee70dca6ccd1f5ec1 GIT binary patch literal 281556 zcmd42! z7yy8pqMW|h>|Tp^`g=nI-upN9`)1rozUhC@zh(h>_xPnz72(UbaIS?o>-;=h!!O?IsuV;`^_2*Ta%(>WP2Eb{A6MxT1 zI%)m^x85%Awh{QqAZ_5aI9CH(JI|6g#*uaoqcz3*}uXnN}8GqE&cxIkdK z_BJj|>iVFiLFR7BFXkU9{d2P)RusA;Yt|Yei;!t__B|m9Y}3N8Di@9ydczPVFK7q-}(lugKtbN~RyLXE_x zUi1I&6|7B&-e@2frLS9XQ*cB?1hb$WS)n%r!C|3AE7r({u-(&Knq`z?$T`kMK3`wr zKPvR^(>l#Qhh3wHUBh3C&wK>o@nLOYY+X6)WF|{%amF%sS6GBM_7XGA^Gk>{6_@Vv zdD>V{fukDUI^FhF{^enMTjS~ux9fhMm7ID!vTXpk9vu8Og+dW?fZgsx|Ixn(WrP=j%@+0Fh{8^+WZrjT+r!BUhSde*t37@H5n@EYIw8sGqVp1!| zl@#Q0&2Rjls4UI-S*Go(g$|(Y(=bQs}P;+gf-kt7Qm!rJ%mnjE}?n`gh z#yPEf`$nGvGlJwawkNda!FOClN91w<+o)w6A=yC~P8myB7xf3mu6@!jT+t@Vy`wPFAPz%}h;O8@vW^FMa@uN0@AXVo5Qly3~@lQIJ_-W~TXs=V~S zRX|@#WnFiv1Z>^=wn~bLh$KG-T1YWl<2kcD_XD&KwjbtUWq*;E&E8;+2F;?*Qb^O~ zaAcQ-XmI$hq1QUpRrX(gqO#mK8gO}=SB>HK>jhG4so#HyFkwL%ehOnrR3I=Sm=lQc z0KVS@mIvtnCj)f9EfXZ!_VFN#MfkZ?{YuvTeTK}3N!-Pg4y-uI>f+AiCj@4sESxGz zpG7fH2=eK~a&4}KYZZjQC9QrIsuX}TWyYbbeBH4Gp9xa2ivOtpvWtYPsJl;h5M z+4v0jk6--9DH?q^c5-B4vG82FzDiuW4KIW5Qc0g|KefPqif6@ajc7? z77_-|C-luKVLMM2Qw3`V#8X1zw%9%s#?^aM4i2ZXrlzUt~|cJ8_#` zs`uVi;Jxb4@?EPkJ;eHh_}EfW%9@B!;J~-GwER~@_8kK+p4u!Penqbdm0ka?yFDT( z;OI!j1PcWRBOL)^>3C!DsJ=kC5;MTm1;=TLmHqx{k-@ZZjd^{sh?u~$zp@b-Df&j$ zqvTOVl+WKM(P{S<`r|;Q#@rh@$IYh{)}hqt&Qo4K$^DH8iqg?u8G(W?Ehol=&RHG#O5XpR3PFh{Bo}C z+U)?oo7QIIm)k@ifvHDLnvNYxif@n&^Kx4?%`LAobgbnpTX5w3Y3%7`<@sJ1LCE(A z%I+TDfbCk}nWHNqzsE+u5EBy2rwjb}?Fp{)$+r>brM)97)0sN^ohg5kuyC8WFfrUH zVhj^Rt{j;apyu@|5dx+G=DzLP%T9e&<8wjMvS+h+d?$0fgvK+Gd|#ZPsQfm_o9Ca9 z{SbqkhH=^j8;%gmv%Kb9>-rVWcqNk$G9;=KsdNGa`R?8g`fz`2;f%v)J#rB{V9#%-fig8 zWhawqO~CJr&c-PE=TM9y%09K={|x0)`14H~-2jCW*Gu#j)BS_N?r655$NrKpSn(-` z(O`m<$miF9M%yESX6k(TOE;GUKh%ZOn|TV28Gb;LVg*Ra-9jYDT{M1UVv=@GfFwQe z<$slF=E%;Z#}W}+!=O-;W{+^cw3Mj2bnt z1X|4s&eiD>y5z`jO;z7)f%MVVk4F}n6mf95duLU3xxQM0J%cc4eOiq7DeuDb<4SI~ zGE7bU7g#Tn1la4jp6giY@aw1N;u)toRf9E1!d?2K3_M#l>XuHcsATTMOm!w{B8(g{ zA9VO$Kp|iyscguQ84JyrCxb`E*myD2+j4Cnb6%iNREzx%qTYBH%gNyXgqjgi>{Rc1 zV|yawa0xWOH+v(q-JAz(H@eq z0(2(D0ly$C&CswY@p9*rhTr!jYQHzGsP$dH9ChC6B25}UW-PkS&(y@x3Niy}C!EiVDjEo+ZNOz-rZe3xVAhSPT_LW?@M z_ixp;do9QUhZQ9^tKBx>s{`sxdzo9>`m0(U92gRLeN&ElpJ~MBi_A|fC^}pW#=WRW;iJOX zShOS|PsjKeB_Co|dpc_`?enb3Gt;@>%Cl)!lFv6l=zprPdCEI>bJ~mE?sxM2&D7#$ zTabKglo+%k5Ay&5zJttVRx63-Zg^!jqj0SpM_i8O&1Z=Vo&N%+bwrU2L)+EbQ?Jk> zH~x@}+QE5Da&A((kBZNGf+r4vA!Fil_C3vCR^Cy*>sc1EJ*HLUPRModE3v0lz=*Rc zoB8nJuK2853iq7y#LXY|2-}DO6EhLQkAVV%zgi_<4xD94v&Ub0Q_1{w6xtQg{Z}6z z0>aT#&U1SW7xJUB6tBdoD*J#(r(#WDDRK6y1ylIc{`>Ez47qHgN?d{BcwF zmH3!g_m)ohXN%g@&&D?|%j$8-EpV@)F~MfMT;j+=Hbe%u-JAXm_8+n7HMT0~kqU*D za4mY0Esm_97YvVRo6J4Af+aFs_Xx6DH(c~A7FJR=O7MOcG=bZlX)N8c3H)=ua+!G%`Nn(1<=Lq|ApqQ>yTb}fp)1V?HUwhGM^#k zj9s5#*AI{@3~LgV?JyB=v)m9j2r$PqF1}f3dC??c>_bfiaS3bimLra3n33`5;btOM zFF>6K#rcw2b5V?&`I(zG_+53H`K`XQq73Vl;{~e&uz+KYs3(b)(l)!X+enz>USMZ< zRHK3pO9VTCnHP&-P`X5iMOGs!RZrMy>9{>sZ`fPM-6*&-_eavd)dSkd@{?;1I#{fo z<+mv{M)LJQP1dcGfs7U&d4iZ|%55O!A$WvI*`(TB&mFZh=zHBM2eY;+5A2(dVHje2 z5iBMgCXWNKW=!oR^R(gUszw*6B8rTiFJwbN9M}MU-WN?~NxWIJF-Jpzg*6H>^;1E) zIBqe&0_F`h=0_#`dkwnRY6Cu4v&@Se8il9+TGoF@fBt1~VvSeoq%wHP?buskfCmSA zIWsyKAMl3LSuh#$L89{LBH(VatYveGP75!GPG3)y?>%!h*Z-xaOVt91P%8v;1cZ3Q z*R=5}|94X~yrHowlh{1H{3Mu z>{@PTl8^oX4TG^N47sQ6;E0)Y*vscx_(djToBRoZYWA+BGiJ~qGuEB6lyy(NZ*7^1 z4WBjm$L>gX>elNLTJsmK-)OfuFTwriuY!j(La;j^qQ&vGBn;a9p$xg%y>S`GyKUFw zP7(aj63eXpms#*&{cwWZ!Gkj=Cv}7 z7VCVbxhK^X4;~wnPwyV~>=it{w&jPKqdOOZnq2g{=wuM5KGqv~NJA258yiId3s>F` zJ{~cDrYxK-H$WRv$vkF7)bzns3F0a-rGc?pnT>bkF27TEZGL77wCAhu{|TM!-t*g3 zDlj?hBdC*U)jq+YQhrLzo(;&cM--ap>V>@VL`m)wmEBy`c?q>)qbwc0|E=BsNd$@C)~-OLYs05Pj=d`75#=2+4IW7TSxo)&3&)|$tZycJELNvKhlZhfch=olEU zwU=3qCS$% z%lV{%N*_} zlqDG}?MsOwUS%q&oQ|i38#(nDv5fI;Y6D+jbP5Y;O{llo`~fItC6=$MQ6kNF1%)Z% zD#8-<$(e{_SFY!VM9Ni8(#21LvLoTCC?ZeyG&>Ntha%;BP{Brr!Der*Lu+f5#jNW0tHbxpDyW9Do_!?{ zazeQ|G64!mq5UrvBlL6AKr;Xu>3>dOQ z8cp`SGjE-htlwSaDWrW5>e8@A%IU;^HwdkYD+&AVil5Xl{6Ty6LnrKPeZO=0E|#FN z=5zj3##mIqDc)D68A;)y;8`$Mfo-@1HE}!(#j_K)@wtG5I{5a_lV0M?E@xeVWM4bX z!$Rr*31vyK6Jd$jesXf6F82}h=+ROyhL(>s0Lm;ZS|xM-efsixoTWeplW;rFG_Y?# zO0>Ormal5rIuJmfP<(d(6@0BGm2LF`3=U!YU=vo*#k=pPm0T*UXAILxrenoX;z~{9 z!UV(;{+KcA;N+-vxHoxo%AKTM^?v1jz8^1PfxS0vq z>*{CVe$GN}6`VjfpRx=QB^(;E#Bta7a1my}<3apHTr4>vT1oZhuHxjYqv(gfYeRH| z;rP5`l^p}4^^CF;6}g650m}#X8{Q=ISKTozp^7naJBhC3|4ZI!@gR&(?c;vGENx^8 zncf>2cSwLi#mf(-Nfr6ADmswhQq_9%geXz=o1%h_#dSco1Mz?q820ogD@6s(Py~Er z9?4D_z%M{hT*1aE%pAiYoWhi;4?oJJy1w(xA~WJ>wp3J$L42xc`VuNZg(I5Clbgiz z1?7<+m{x_Mb5y+BRgubDD*CsirJ&SEci2D($ZDeq=7YsP6BuL?Yel_*pB1zzFd70e zpE|PScSbMIyx4_R=+6J_1Ts{z3v-KtYh! zK0YMn8X5@OuySj(!F(a-q;<{0|2_>Tw+m0!&D5IT{o&nd5kX`bWLM?ZvgyAUM?@w) zm(V2*5}wj&*0^cUpLLnZ<$O;RNc%!o!&ajs7b@OeF|x1G^jJb6qYoIHn#&tHA>+J} zXr2F=0tM051Gw3zli6#;grjU^?pJ!3PP&JG;=RBTc{8DD93W-&UpAk%*WE=3=p;%L zUYgo}q)=D(W}t+1TEf4?Yke!nouX@AgHZy&`6ZR{`-Nw=SU)c#T4Y55(^G34^X+Xm z#kZvVSG9u}0xIN$GZ{?^OlyS;Q7qvv8Y?$PlseN;elG6l%-`S7|I%ZM1rAipIxs{H z5r^XzAxj1q74W|Sl%GTl6q{{!6lsQMH5^4xmr=3+!39>B7(F8{ZxzRv< zX_F(PzHZbDH9IM~fs0n(USm#S$~QkJNBD3>_xXaza>c}@PywjaxQw>V(z%y-9~G-C z{kElkaD!RvYQi73LJg*m7H%XRwtE7 z7OxFU#9;<)6krK~cymO?@{_Q39KM97~56S&Teqag_aiAUq8Zixf zD~gn)Ii=<+!i{}G7TVV@NsT0}CuZrmvs023Zn5?9^Z7=!%Po9bSot@=@_PL$oXH!L zB%BAU8HPxjrXlo*XiyJ*_q(@O>$E1b-W}bV3yNlzz-Nshwd0@&9jUOWQYx6+&Vc)-o};F(^>`cZCQ(Og%%(bBI7iOpzm?EVN-4u(5>Wfwh`qcmBhyL zuF8jK4q}WwhupP@{K7J1{>b-8o`pS>h0r~PAwznGgi&UYgi&H4PSc6R-9$GY95Jah zk@7k*x4IDK>Ulw_Zb)UrqH>=E!b`OfthFzy@brf_uw>V`a_eLA}MYi0}~BL3&!c0Ik@ z$a^@gn}zeK)phqPCFl}tmvekqf7Nx#)K?XKab~N^4!ad;ObMMLfV7NptKl=SCLtuI z$-^N4wP|f)5@y2JSPEvjTDrN;OeA*d>N>pCl$LKhNar)Sq(pg;5!3RiqK9EamT2xY z52K&l*hma6taTiLZX;vZ5^LO(rt^ooG6P5}GM>P#^G`b>6JY5#E`(_pl`D{+&-d1M zkn>q4m%>+=V%LZ@aO5L`tKF)7<-U2o!pYO=r1-4b+U}})>M^Qk9ZX=RO14wI#_13S zvdv!xvrsQj6k-)Jv)a9YMCp?A65`UO7rGGSDZ*59&T zbRU^@q?aPzz(0jBIfC%EO!)vsEO3)5B0{&YNtdKB7qUDcb>REq14%PV)9W^CPTFm?F~Uesw6s(*fLA^hDG9 zUa-bD6PFmXgCnYGDP9+RVUTv3!HMx#np_8p=2YOnjP_J@L>~|8k;pg?i&p78F#f^A z;5XgE!*5P_nVPFknZy=0q>ER=4<>T%;xrhf%bj*ESAzAbIAb*j2ZuBag0Hwg zp6MGuO6)R=PQel&C#Q+Xwx%%93+6j6bDHr%e9E~?`!Y~4sCBdZ<*{qwRIT0J26X_Ng~kC%^;fPSHX}GOYdk0sAVOm-6?sbKQRNO1NQNG2D1C zI^$K7B&$|MJ292n_fOF?fERLq*Av=-ES?REPDI8Ox)pxs)Ga+EP&BKNU?-fLn!7t5*&q@0|JpjtRg3W z{F$)-^S%Mz85U!@Sp9c>IHP*arOt7t*q}8QJIWWOU42jH0 zi~Uk?_snkXvzyq&p=24`zl~DlL#Vreud?_F&woD4n2r`BL-u7T@NWc)?7@AaTNr}} z0AX}DTra1^B7tLxM{Hsdr|+s1zV&!q^4U|LD~-p$ByG3MH&`&PwcHL&eEHMV72SFh z+7z-*r#iCk98n2rfN!?&#G-ubjcNmU=AZo2|9MEkE~j|z3CQ72!!sxyw+JXU2hP{T zw->z!bKaf@JP(C;rG(S{EdgrLd$S0aWbdhUfp&-;brZ`Lc!U%aTh6?cG*~4x0_NWd zmR(}7Ye&8zxpwdv$8j@J4Pv6D+kHtV{61E~BmI0NWmEdd-^TRzbKHBGzt!F$Ly`zF zTyv`(?7qm$-2h(Glh-whe=MGXEz$$dFYXTwMl}}?uT6c<>WS*GR{-jjB5s1%q$Bz< zIqT&vJ*1vj(}B3_df`kUZKKA3J!3lUKb)mAm2G+yC&9(0pCp2K6y9wintV9HX*|!Z z;^Mr2MOz19D7^dFkcORHAZoS}*bx3wsh!0@fWY<-_B-~7YS?00Uc^2vlCD=)Nlh_f z`RLR=?X=1lrEQ1DXiNM_OviY+J+Q?U?SD~P54)RE8F+9o>dMMJZ6aIC!Q)qtZ*c_y zvs)u3tU(ln$|M!9eEt}=N_sB{G5H@2iuhgodMv;XE(cDJo{4eD2eN_NbW>3W%1TWS%BZ-K z*n9w;nX&@VJFLh&XrP2nl@JgUS#h;TVp70SYo2L`RQE5ptdszR0OUg zguj}27yV)bG{`+CM?bf(U@@L%;z_gjmhRf1dX{e(d)Q&N(jUeBRcb$R_?}nhFh6lv z^a6}n8#NaU=PT&_QZ|QSbV6S=^Imj5NgmW9(RMk*&~`SP$ziTA1H}RD^)4CWOuP1=WIV zo3q9+83Jc3;P`}5`$}%l^)L+fYu9e`Z~!pIN8S)R@`CYu`H0c2id6L>NK}`J_Q$oe zET4mOi8T#Atv6j;h0_2&XFEW#jpTt+)_n~6>Z?rN25yMTT;v1FL}*F2To?781V*|| zxM?HezvX}6vq%TO+eBYt!7pNYNcQKdDqye2c9RxzEj>hnc$i;_Z%YX6x;o<51tk#Y zMt@FKAIyrBI-2WSQKbX|>6!x&@hvce{L33@&E#{)KRueg7PlV8lA zCH-}CyDOz&V`f-cQPi=W@hK8iQB&-KMSsG67SwWQ+;Fw>rdulfTtoA`r$G4W8;=rb zy$XS*=NhoS3Adg=Kn08>3T+}FO;2$*i#q^5-}Q6*dakIgsFit%Ax&Ff53b733GU}Q zfQ%BPgtF3pW3E>(;0mi_SgcwNMB;68-~&H1^w{2!4>m~fF%JivCpnR1pfv6^`yWyy zqIMDXHn^PN=7z&)c(J@?AfyqCmrFPh3iNp4_cy;O&v zu#0(g)S$h8C4J)xiN_9N0AQ11@`ZRIBjXaSHDy5%3dmUB9bJ7tyni}ZI~ZCipsy$3Ue|*czl@;! z^zEt8pPV~f7^z~+6kV32$LQZBm%C6ZQx5~mwQJmqy^M5eKEp5Uk*W|^TyNK%$j?() zJ($`!vLMIgYyfCa(V|FYG5c<(4O$^PYqVXWqWnGsb&MvyKtN(YyAYMsmO06&5V zr#@1|?Nbk=Q0=m+y=zDj$1}&Hc!}ad*Jg4E^MwW9rwb7dCC&FP7Ca-{r%aMQUT0t9 z7{Lhu5lE%NinDs2W+L>WWHVs+wJ*7zz|<_JjJ40_2b&IT#=IP!0~qNUsQ_gR0Lx(c zixphd>^*1O#cR0NLa+1(ak`h<8lT@k>VF!uCp0sPc)H!CH=POC06RuoE<=q3UTTL( zxaKAL>xE8?Z&rzDs^RYigTcwjF3=Oi<9WiJuvwZ}iq}rcN2~2R^iK$1UivMSaL`NL zHM^ao`_$nZHQK&YNg`O4ZL#hYwj_(SveNB;-jWDzD0b0Pw@2Nenk@!pS~iE_E8oz! znViFn2W6&XL`vY5clbi~4kVv$7cs)vNib~UL19Rp3(D8>hHVE&+Vs*^bK4{#4G;S6 zvkFQejhP=)W89$qJ^Hqd56{jMplKc0;0=XqNM=dElgJQ7*WzWN8*W8CU6-dq7mEQs z2k^g*#9tZWF?H#qKpwIg>Ajri&37$KZC-0?1^avg!vX&nk~tJiqD=K1=ag77*_mZLk%W^bES0)Y-68z(!yJNI|4rWOnLJ zURKJMvMD7tqVZUq#XjE3A zm;JTpDg3fT{ruTCu(zYAfewWA&lTAnrfi|PQ`ZJ(<&*)G^qQQvJv9TqOQx#0VI4SU zZDyGlaw#+r|HR>SdSrda<@7*I+@AQFdlp(%MII2WgIs zyhZU)3Ml!%DAQqNf;nLaB$nGno}&*)0ya69u4+Zz7~@ZQDsVGei06}cQd7(8QjhQj zi3SE|n+Nsa(+3toe8$EmJ!Z#*?&~A1nqA(jwd9FNk8}SDK$2lmLxGC>?Hb@bOt%mn z?3KqId=tfce((dAs_tb=G*HjlGaV9G9&S~CE$99oyF5c>Ptn0(a91&0yJW#NR@BHI|nu` zzuUXM8Lq$VyGZ|lTI4KQ^!spf`Dx||yyJNKX}1y41FLxaLv(B6rMiPVwD6CMQT=4e zWVyQg0+GRT+`w>ma+ZyRi_@cM(PUFs^-|v`$lx|{?DP*u6`*`?X+MD{!{8&a=c6<#jL{Eh{Y#@3-ic`ulk zAj}OFB2x12u((K7K|Q1Fk_W0gVnDExX-41Q+YVor!e7;$tp}q@2RAvy*d)`i{y`t{ z+Tk9=vJCd0b3iH=`(kU8GIyO$ZD$+9S&i?D=OQbfQy`Ul{s|CrFR!t0p&*XA!Nj8(`~3>$2v$M&@OFv}SdA@&<8RkzH+KtS{t&T{7dmAe z!T?Yn&^2C^Pb|tYy5jLcszl{pYKw$~spuj2{K5ts(-~Y(r$Mz9Gf`3(GyZ~MK$Oq$ z&zd?13f*9O86)F^B56L&n%v7y;})Ej=~57)@VULV{{FzC*(Y%h?$R3OX=%R*PLAN@5?yma{tA;w-k9dAHPXgeDaz&INU{37G9t+2 zjL=9L3;8}6er-ypW2GziFA8@n!+&NhnnMG_vBv96Su1Eg{=0NB#JhCaAYiCLkyC0< z4HTlocc=JOD5iV7K$P_OS@J7m8T2W^wYEvi*@_lJe{t~#(I#KHuCUKqy{*~CxZaky zkeqRmi|4;rseitzP5i1Q9aMp0CeG1jK8>6nFnDjInJr^tkd-_GmGpSeW4$ruVW0Ly z4d1#FUwIG4PeyE}x}XJb+=(-VJ6}Y_9W(|Xh`X@812mdI8ovo+@#z$-hz8MyP%G!D zY<}2C8NM!k4Zo^GFH`FAOf4koV`8heFsstagC9mN4;SCq%N&v%_#90h+{{s-yuF5J zwX}QKB4mli1}=mIG1YOY=b<2}D{5x|-f})yvQGOa@<6}>2>57#h;p-Z26}l#ka^Ol z2sdi4b?4OI~flP*_`7)Ts?=MOZ*Pj%Q<^o?cc6Plypn{xe1B0QKA&F(F>R z?cwL_@bd(Cz>=P!mb*`cLOuCs>fHXz?;Of2(fDDG-@QiFY|gTLd%S(Wq{b7P%dN{U z=XAC!W5h0-D#Z3wJS!o*^F~INo6j(`48C?8tuSxvoEThK$cRjOA^421swx+^ir6lr zvf+LfnWMn@r#H^&llU_p1_sQK^pwaac9wWbpL1U`6{w;sFEZT^+75nqXCkAY5Maw= z6ZZ4H8^gpV3}?lWMrjU|O zhY3W(6K|z(mD0vU(Ca?djj&>piM2eRHk>JvOFvhBjo zE(C-$@K-IPa$JZ7abfaFg&#lkZpcX8^<6Kuq7;5dZ}XkrTc;loLltsLH*|1wF&z)L zB5()^kdP1ZHSfFa9)>CBma7GZ?kBcwGEY_nhFT75iPCC`Fa`k0p2^*X&gE5XaUkTk zPRZ`U^Nwp6^`F+ngp-W&x&JIAA z$eyQ1eYm9>9j#fgpT9kWXSfTkvX%4KCVvlV*R263%-)TL3kw%eL(?;M=G)d!^`t2z zR<=e4x)AcnE{X*tcYN5gYLR>COESK${JBP*Y6hIP3cOz00eHjP% z$|Jl141l?Yk0(t(oKa&j$=~s_#JzYudT5-H2+R`{HBgy`h)3h}4=?vc4A~fpxyp)qI`X97*LWDe`h*rLhUc;wMlJ`fO zjBQ)FzZd~xiSf@wQ~joTmhY`P z{1O{(`m!?-$oOe-L751U&fGz57n;O)YxvCTCAyiC?n0Zy<{cq@5HnZ9_Q*}PqLf8HC*C_}q=D`SfO!n<&KHAo)KzSi>Mv0fpYD?mav zbv;Z=mJMO_Nicy>fEEc5J`o*CGYRI5Eknj0u^YY7$QFcnV5|}u8 zf1?)fQFU%-X?5Byx--nYJI!!$42WJK>(`{Gr!$Z55j#y_OgOVWB3DlH z^-8=|E#h-d{^PQI$J~r#-NWJIMknmJo#nO|S||CpX!!Qy39rxb-QV>wa)9-~pq-ly zOGp>xU`WTmYYw;ev;fZVABhHc4l-w~hOHMob@Qi}NBls;n__L--h1`-%Nl|#A-ADV zMB%&lCc2*QxS-|U(6f$^UBt4|z6C%PdorjYx+)D1?~j%xpK?zWyQio2($RfifMhaw zUP+CqrNHBGOO5<{3B5U%i-wvPfIP0Z1$X%1z;9WiC*#Yf?`3OwFisGVlo;E$U~8)t zIp3AF;C$6`?Al)Vo4oe{`iRIf>M96I*#E472V0)&@QU2` zP~-wm>S+;C(M}x~A`YN?GSTMI{gH8&ZS6#mK9(mXQNnG4PY8rdgNZ2m@^d!}WC+N% zv-(Yvt&IPUpvli7w?3H_Ca-{NYsBxq&f9ufq<(*&`MN2i5cJ-M#Bf!4d>Y4*EhZp>ol&U&p%_`N z{`)H`hn@UpLL(FealPhsaCUSBEf^A3Bl6z10a0Z6T88m}z-#1&c>GsmS@2ZTiA4g^8wiTsSr7uUJ*0Z^bhT zA2Gg@HD*>4J^^bW8a=%BjU*}*vs#WQeEZj)9dDLNxO@HTdVvCZ8vT7<^IDBK3|9!n z1uh1qFqx|-ccuKOTkbmL+hZ6~=*8qr0bHfp#kA28I@8nUj)u5MFVJJJ5B z0Q<53hgyP_5|9w-ya19&kDx%Usxh=XYunguyj$N<8i`wS`5m?}sR1S~nlY2x4@-H) z7xGOzQlEyF(~2Vqs*v2?Wji>gkt8Z6fK1CuC(Dje5=@Q=Eu75~pS$AEI{vsBhK^)F=KZF>!U|CzPDT?%b(5INt&@hsR7zV>~kgZmd} z`8CFu^v!o0hk;Mq?sg1s6NZ>fo!*zTB!h} z8US-bd~cu&Im==JNKQ0yNa!cjsL@E8!j!<}-yIkp)SyuBAsO}Z6lVGKs_GzI@3_r| zGn_h+wgS@x<98luuNTFAa3N{?3J!fGol%u2_Gj8sn`!416s6g#N63 zx9z4Ouk=}DcxHv&+>t@X;`=91Cw3BrGI|Pij(n@_E|-+_WNzOUBM%8s263UDES9(a zNs{j6-eek704{$qpe^8zfBHsO@kD*fDeKvFunRjoh=&F*qFM9G-ifH8%%PQqpjWx( z&oKq18XlRbzvF2SVFW!U-jQlaBU97O7lZLvYAfyKuz2MX;97s0HlrgddghDyd_Ic_ zfMlbP=UWbKm?L$^2$l|u5cYft0hu>q1w8SYgFZoWMpy;AlRKn6!*Q!{cOCVHq@?~l zk?CQtM*4o3SJHWT<>~HJ$xO}rzpucfBlA+Jff0#I9TCv!S_WgW_@kd0E64BbqIpYv zURUv()+gHi(s9AW<0DOg>U~Y=P4SLS@f|R!K468&>pP?Z>~Os`V=v_q^CD!-=qU?Y)o`E6)$rZ&B?7EkIEG0%pzud^K0~N4o^TbL zC@i-kIg{>&_w`VKv$s?Kbz9?hYNSPJpjgV8vp~BwOSzahz~}+p{;*(x!}o0mTI>^1 zgkSG;{?UpfDmUX>;zpx;x3p*IV6BG6{w=H|}IJkqk0&J!(rxe$?@lg{##%7Hq zj7YKgVByJ08aZInBq2l`I64^7&~?XoUb-NZOui4s$I1?4$7x;<`n{Q1>E8QBxbV3i zFRop;2K{;dkCn?Dq>1Ojp5T6l*vgG{?8yBJz4q|%iytU*=6KLFH4>CSzcJOE!p22T zNX#FKcvt*~l=_S2fv?wg6Z&?L_x{j#@hV+C^StDBncoUY3#yrbSE`RC+#RxJ-Dy9x@}omKRu?jH2ZSr`zP5 zQ)E?7U$@?_45rok*^W;o9?Vobs8BYNS0RR{&U8Y5V++)mSxr4G$)E?!WDpTL^aD?? z`od)n&G96S(-cG-Ca5vKV+23AETNYM(NyW)N7?q6W7HZ(Z@@Ip!uUfaaY@%T*jp84 z26{wf@>aIDB}4RBq%lPP7XE(}=)y>t#N)p5`f_P#>}^IaVtiOvq&Q6i7ar0Q+cyJ^ zj6Me&IX~91u$^y1(@XF*Rj9LA(ni2O_S=1ycYBZn5FGgv_Bp`P=j!hdkG*~AqNdw8 znVSU4@WN-R)JVkGqug)|c|17^$QQMq-aFdgkEaL>oh}OAOF4M$qz;nA(#&sMXQVD9 z%?C$38{6RQ#{dYB?4P&^1=0miOZMGyRV(1tPBUd$4J_x=7A<_TNY$N~I%0df_B!ht8BS*}M$gA>EM zuv^HEyh0r&#?d}2<2TwSRY#-}!cBsA_1NkVqbSFi#dXprb5Pt>>i(Z)w8TU<92dh3 zrnNWIITg6EOnD2O#7BYm8lt3>RqRk4Iq)Dxcmf9r{Y2u z(@ozE+GUcn?0$s&S-|nQ$K4+)^d)bm+xEBzhN!;1L)U8Hm}pdUf9%l19wt4;;c7=) zA$4!hrV@<82sB^;&1gO-o#Sw9xt~2~y~^Kh^W0o8HFnz@ksGx$YRs_!kRu=wY=w>F z7H3})JqF%9;N<9)UK zdUNlc?vRm6T0dDz{u~>J9r{M;c6qkffLG??IQ)aP_4D>spkB^n1VniiL%|bDu5^Ok z;;nE^@N}i*FJ^=)(OJhry)mVthq>bJyAlF+eTDPDI8Tz%iLT6{i7rOQ0|xnmbmk5G zev^m@W3!jDu=*#AqOPwb{XVGlzEgwlf&r68;%-28Z#q5|Z4MFTC}JLLqL%`o3gO%E1#kZfb>>CHqJVerFN7FDNT^cLT4_m8@+gW2=TtE&7d1_k}n7LU-^ zs<((w^g50_t>LG>pZf5u9}f;Oz8kw)h6Ry_kHqci;yqHe`>JCQc%`m#UXr#Kd#3$0 zvd^8eB)gS7MO0v-NwK^e74R__-fC^ZVM5B>$SXJjl*PspDbVulUw&vhwyh0&1XLJO zw0G;#g~_<0tj6bh@~y1`T3LZ!hrb{W(*mrz7%{4LHp14CNUnGwL`MkHJ8Bnj+g`zH ze;{4iR{!_%?W~l42#G#c5%pFG0@hzmGX>;Cg8TVEw$)6gXO_!3BY^X946V@^8{`1M-d)lnmzQHWU5#&=vsA6Wm{AOBUF zto!vz-lqL8bcUw|n;ckBY2)}0Y&xsEU>dS4+)@}v*}zEI0uHI0y|B~lO$SxmsZ%D} z6n@&0lRo?Nl}bLv_xqSdjCGu4)5upz_z9Ho)5a{{&ZV|H-Zpr@<&0hos7v#u|MN+@ z7cq=R@ZEkxMlseW3|?<83KPzaktZ0y(v}~DA0M}gx zX=_QGSpx9$UuV9O%8Z29QXW7vK9(2Hm0DEgMCln|g-IRsD=-lfn4*0e8*XslG_of` zSK~K6dw4G67eRaH1B0#Hxu5zLNViTk{1U!P$fw?R^N7Xn+^`=>Z>5ECvy(viYQMH( zzA@Y6hiPCd@PBQ$ID4y~K{D@lvNM^eeiZ%GMuz_pk8+#LOY!Fvf`>sH22y!Xg4yJN z$mH*|72JtVZqA~gm!HdWNnmk{8%UM(Fw$sfFZfshR7&#TH+ zkBSo)9|xOb!kWOvuJe_)zRUHIcEdU{>#k<$YSf`1-SYrSj3f6v(aAYHgAM_=nlB?u zAlVeTy`T!%Ebv&o`o6F96%QW->>%AE+yu}Ox@^xrog6l~jL!Hw0K*GZj1EG=LI?CJ z*KE*s0dnu?5ZD|t^oq|qlG1P$dFz*-FWBZi<^(rYv5^7*oIiIRLEYd1151AOy)SuV z>g1vAs3(riTw@&3FHp%WvXF%55t>rmlXCBOKrdDB64y>d7`)!ynJ)P`9K{oT*UMAx z3z5~}iVQRhd0cL>@MQ=4{{f*uUcaZDcl_d|8xA2V*MpfZgmf6lC|cQ5D%hCdO2a}1 zH92}lAC28`%!;cX@W>|kd^Wi_eLVJS2Q3>@#N)?JG7?69D z5dgS36O%DhL__F|409rbdI=1OY=5EgC(Fa@~6W(W1$noXPb{Lo8(>dnvpf&caq3BBE_s?6+JF_7`C zwbFG&Gq5`a2@GJ#k-ZNtzxI-lPSCG~Ua=-)o^k5jrRxaQ9v%mH~Uib9x`o3#b<1uE@ zZ{+V*ZUFvO(mw++)1F=TZhgt~uedJur#F}w!59GymWbejDg=bNAztzLC)ZEkeDZ^X z;jmYFkkTlC$W%}n9MZD;V`BG@ip^I~0Nl)^ElldhLTut-S1XA*x_O8m3BfBj7h;O4 zRx(qRQ1%H-u3i#TY)x%a!H4H#ri4ZHe7(57A6}>)i%90iFnWtV5FIl~9Z-B?D8U#uc0(Tfhshju^h(<6s z7ZRz=v>-UZ963oZLtE?{3twy8^b&b5tpEUz977nG69@IcB4j?Bqcz{3)KBe`|2m2aLJ{+U;e6B|Ja!qJZU$86RN5#k_`nj zzWJQn9xLB#-p`4M0jzlN?mJdp^^foPsek$CKRx5Xo_)&$VQPF_xL_t~h|PsC)Xe*R zv#Q4Y#CUgZ)Ak+xt*4x_d-IMRH!NGd>Oocy2Or*b{vBVw`O-UY{nEtzOtrkzlcG<7 zidds$K|e;FH-G3SfBx71;`?6qv+q)~eGDjlgM2x11MshaszOA{Pk-!vm%sX_e&p>_ zMOYIx={f=_j5!@aNwHGNUw`qHbKA!zkLsWvBM}wm=nE%nBc_<*Y18{D~vfY?NF>oiQMJHxcEs5C3ojslG8I8n@z$VPm zS)!6zP%WJ-&UP@@iPY)LW74O(vme@X_o}zvc0*^_E5Hm;R45aa96m5?>5c1^JI<}H zSbxgCo_7eJJ4>Y^U#$qe#zB8{>oqelX7Co1A`cAAx@!^(mXroN4?K_ZV)p5gCu*5(Er*9cv#B zFf6;_#O5>3nz``O%dfiV(x<$0+xC-=go()t?gNn3jmt>~u^zwoD_`045AXP^H(Y)7 z)n_n`O)jN*(FizqKxTS$SRZ`x%YXX4Kluy4@ds+Yhgo830{q`Kx+^yT|M~`C>0kcI zZ~fe#|G^tyv2rX-MNKxXLJ>v+CPJkVC-;`WM5NNiV`;M>93mRa-*!};iXv5DL}p3rgO(-lU@%t{L_KO@ZP6hz^0Z$c zsZj~mj=GguEoxa19AZ^us%v%WjP>Hj9=dDYpWJbMceWd_GzN@C!+fZ5qIRrM;8~kb zub#8xoZ}nDmK>{efI8Nlj#1%iK|-jQU}}wlj%vv)k%)|i2in>fn*}nA8l%Nddn8n~ z%>XyWn+(C-2tkHK? zZpVi8+*#+Hd*7>H`v*UE+BxUnXQuOTD2e2Zp^X2eq`tNtaF`L)6hy>9q(mI9zV4cj zpZ3A`z3Vl%eD2d*2Q%}_CpyyU3Nu_m1azqY6Z!ODU@ADVZtM0FPrmH3&tCSlXa40W zXFPs4CMITJ)l98Jv$}RN_e2A95CX9j6v|EjW6MYX_Ah?q?|%P(zI5+QTxmseizgpL zNkiQ~7#@A;PrmY9FaL$#e1pd7AceB|#rJ?8+?;aFv|wg4vtsn#OK@V+$HdsCugx4`R-`~65X_6l3BJvl9~J(@5il_(Ex=H( z#YrGF3Ywgp`_RFA*Z=hwKhyJ4P(V;Rp&y5sci_p(*TCy>nXyqA;S?9xv6$qx4)*Srmw@SO;Vr$&di)#JvdnaH^n;r+|sLo0kE1C#H75? zycjbZH^xGgY#N=wXp|P(*3!0Np_Jc107yhC2PEZCrSw5g83gJ83v=E6{FvB?lTgIW z3k>S+gbAIxe8YjKZ9e_T`ejSU4-RJd!0e1T0|iOr8l7&`IF%SVOq|Agp|k(tJu5%) z(GOfPUUuRcXPvvBLYP%mBj!c#yRB5G>_$a*$9k>H6zGdDTU~ z_ZvU|)_4EqAN|)oJMY`xBU>_FhEmLl4JeBe46&KHVdcU{&VAC89{O)T^)tWo(pUcM zuV3`c=X`L*#T#{+2GOGt;2{Wv(>tmJ0X4etsvf9S_4MPOaL#?(d&f_izW;%( zyQiySUINC{K!{v)LieT{Z`inX>&D$DpMKtbYO!YG)QMAG0sLpOeIz1U|EeE<(MLb` z@sFN1)e});I2*(jL;?sQ4kMnte4W1L-0wV0anLBSNQhZE@Bl<+?hFTWL%3Tk`(vhP zZE~M*)R=bmBYRr&fJLS?BQ`u!grHiSU2n}4A?^1)xLHV&x+asZVY9bIYIHJYQWdI0 z^fE#b9op?p^}js5Z{-_r_~#{qAW#OXz!(gMIH{b}=bv(ZeZ~5d4tCTr(3+jxMYSxM zYB-TLX}In8l32LL9<4iK*b7(f8UPNKM)o(_!Miccg+myc8*`dcbXpETb7EF7Y5TpT zbqARgVQ5i{MZN~ynlG7IFpZrQqr4!!92o(b2Q!t%Eietvg(@P7?OLIcX%5mv!Mov8}7#9X$P39_Gi>46t*jj#mycwSB)Jpi-U9fc*Z&B--B*()T_b# zpst+=9zvrTl;qAu?tlUA+HkfB*4*3yV+wq1->J91=@;L3?X3@P|EGIqWRe_}F-Qca zF=F|$oqzGp5B%Usr<{AcMT&b-S33=Q@P^Q4F%_?75t7| zHk}c_cl#5jS8^}7LDu?=3(S^xNwY(sbJB< zbkCe6grT=nfp(mqme<^j=Ih0wK1^h4CTu>6`^95j|I*Rl+fjVeI7N-IY#Roa6j*G{ z=ch4-2TGwj(ahMyGH=g{u}sQttBTYNc={S& zZ4fmIBXWR8vBd^<_ksj9L@J~7_5^^)YtU>xxeURcyZNl07i>Jay!yT`Z@K#3+d4<< zekhB8DCyqp02#rAU{N8=GBr^y`|LHJICtmH=e_fFum7W0TzL62zZBzO7R(9?Fr;=P zBjX!w>lfiLQ@BU!gsuR(`j+cIvF-2P`R8xE;WMAuVtrjb)eE5$h@cT*0*hd%wVoK* z{Q6Dn55DNR&;RJNpZkJ0uRdklVW2)92mOe-zA+Pe%y1~w>vZBbhpWLf0;(`e86Cs~ zk^m_>FbdELF|6A0@Vciy|Lqqa{=J{yx^DflH+^~!H~>AZVFia{M~?1z-7o+2TmSNJ zKKO&>__Cem7Ukb*ik4RZ|N0hS>O=2+_e&1$d1$I&q7<_WFnN-B2m@v~xtzp>6KjRL zQXz0nMxk8+G%`FfvmnXy|53%L9Z@$$fdG&#5pyfr5q5iOCu+p3&EqWWyCFz7 zCWlbUwQo+H(u|rt$@kk+Z#thV8<-}>`)|ALvs*rU@Zm0xbud5Q#}lU34_1Tl0I@Tt=hXP-yO|c28UboY;4P_YG(D?av-e}2l6$%(<4=UudiiRaAR zQ>H*B1!UkGZqe@QRD>Xb!>TWT;kuLG^joj~%fJ4k-+kGG_w3v;8L(us3_;Wr@xLh0 zkF}oY+x&|4Yaf2`%U<@bSN`g2e&Ld5KI=o{ODFdZ`^V=@hbqF(Lg4m%;0i(ouZPgV zJWy9atUy-7JpyhZtKjvJ(@rx$h!8c_Q`=72x9^slp0%w!uwwa+^?dVJj-pcp)G$nT zN`7Sb-l=|nX2m5>`_3E8Y>xQfr%h&W>yxdBYPx;gzi}X^T+qDdD~ZR zoEVg#<$c#5JoSRXkDd3_U0ce@x#3`@JA{g`s5GZ=YZ?-ONTT;hz3`^^q6s=`$aOVw zO4OsY%Wg<}U~(rlE7Hd#lBDO_ToX3cl9{dHOOV6K%u07z2f`U^5euP!o}- zW&=V57naCOZkC!H8u1s>YN(m+a7rwM3sGzn9Y@m)fGGt#woRlM02Z#{&ZJ&)bKM98 zcv|=e5J_sp%1SG&>`tC|!q!s{ZdkFRcjWL9IWaRIP%;#N7(>NTHGu>a4Ivcl(50Wc z=Huth96hx8f(xE>chTt`S5-4^jIl~<=oPBJMR4QRsZlEmz_5`*$;tk+u29a4REb7QI^Fmw|;T?si&QO%hnyI zJ))|SxC!Y3p&e5GTf6JL0{B-(025QaeD&&`3Ty>ahg@OKPzXQS|R+SLm(Pb>UpckR)-ATlXKzmf7)AVf1S-HlVYuaC};<{lti znQ8$>Z2Buxf+2Avs3GTZySf0}IDL@GETECerM6cp31R5&q^4do(FgRGGhFa;(`T_0?GbxHN@U#XIX~zA`?5Y-8 z?t?cWQ0ZrF><-puH8L9QGb4@r4e7d3Yf`kpC28n)>3_IVS9UjMtUp#wcX6^D0cfwd;H3d5(gcALFsB@LhY0JoDM_omjKx5QcNp zarU@TAP=EQ+_ZE`gGX3Bgv9}1Lr!kxQavU=@KL#b3kib`_aVGyaAy^)KddHCeZrj^ zE`7m`U%BCLpZ(J3o!5I{_W*Z2*hi;FsH0NpSpUY?|JobhdgkN5fBD+2cdL37YGZ}{ zt1=7n1mGJuVq)gv-aBvG_Jz-V_WZF@I^Ia@#R=qwng|R=QAeD!d>uAM#_Vub%CYen zLa5CR5U!08lL$X0xO&4Dx1dc5>=l61tE80(Ik7o4ue$a`R0I1y>XGax2XZj=ik zI1_uTI!UU7q-Y=_7nZ8whB&88t6+82>4Nl>O(*T&x@=YN;QoE#;d&rbEGVKOnK%#% zO}rN+P_I*#yLLag^3&IT{K@B>bKdpq)^9l$qbhM|+mX>cgR+fK#{a?jpPCbOo0;dM zj}qJ>n4E)@W79_tY<!-XBy6;owVQVO(0C_9LCt+V}VcGJn* zcfa(fe)|7=)vI6g+A}Y@=o&6?pzhE2iOE2YG~`n-8Q5xA>_dlrSgb&nhHvC#p57Dw z7jy)A)T}GI!ni;|3UePU-MHf`_gwSA?^^1^rBAqg4So7E2T{kRP??8>E+062cyjv0 z!IPi*%qu_XrgLCMVnflQ*+^~xzTurGGuyF42l?8M{quK~BI5?5#?}|)guXBeC)AZ< zeRm9Jcb8*O4-uo4MOlE$q5@GgCT)vsGLT7TG+-D;V`7&D&-PU82q0!sbCX7UP9wg6 zd4QovpVyER+W%i@CcIrWp!qm2GzGR$P~oH~jp32KUeOtw+dj2wc5F~}d|34)Fu`01 zL?k>^_og37ZUW4#s#+%Hfrn;&f<@#wGqWN&9Lk9Az)1yRjZu-eBtUmaYF3(+Ns=-K z(89Jktv#IGV!LywHR&GilodnOdiD8dNha(z{v1RbWzSC7|ukw(%HXBJ-xnad>*E z5UD4vqO=?Uro<^piipJN@U+SxW{$2_q}Li6#bo+?cMnAFFfGKrVAWCv!*bKa^67In zo>bTKgYLse4~0QDtpI`oN(7e_Is|ugd!-yZc6jBrpZw^P&pq?(&#&El(jkotGQkCN zmfQej{GZzTwEw1&`GuQO2u0zs-u&VBzUw)^{VT70(=}KB^V5rZxOQ1Ll);_g4ibhE z+tJzK+=@->9{Q1={Hecw)vJH)SI)fTl4}U{f#Gm|04A4$0T`GagvR`|>ca+e@HlLC z{+9egTQW>Dnf-cA0F6x5ntzC)ZeUT6mL67YRi8hxdH1!SI_-j|bW2AUH{Cf6?g*kq zOcb4P?>%>ppLW*SpWS@YWkfJb?GA28g(*a-S+yjh z2pT>C#G-a6Sxq|}!VNzJqtK)Dre+LPcp6qX0y_%Sbuq7`u1>BRmUb zDh1F-2dKLmIz`Fzb8{=Mz4qf5pL^a#pIy6g(~($36XEs+*1oj!n@Pt1#?Xfr_WYJu z_CbO$^NL$D z7heDRpFRK5r+%CZ-*1Dtfe?AY0(JwjLD&JSVbwfzFb~%XDX*9}j z(CqXzaVwjKX%TbAiOm<-@`*j)xc4y;804J9fJDvrGFnRzoI@Bgvl<*C$&NWaS9Wh4 z|3qZKM59rDJC$e~F(!6qc2f<_-y5ZILOSicNn;I6?UW;(_#1Trvze(7u{oTXByvmY zbRVsI+&qw_Kexp{`ASd?g1ee9vthw#h|R&0-elYs9up2{RF#~%YU80(Hf*VO9o*YJ zI6oi83xONKA!r^0ZiccDo}Zsxaowl?e)i#=_w86V))_B_*(^dNz=i$zTwQyI_do0T&%5bY ze(QH%^0enZ_k%@8_71AqJ`-F5gWa3AT?hFPI-G|N1|Y3KFa)CHjRH1c^gGg2b}|sR z8Ejv70`M3D83?hcytKd!xO!N+F6wY*{R7wCc;=4Ni*o(;Ww`dnqlxH5j-nHI??d}L zOQt4f&VJ&hx2oBYnHLEIa|7@VhngW2K@LB%d)XImy#Aa{M>IQ@9yR2z49KgXVLj-Lo%DNeXvM zO#il-NWbb%BC)m7ZA^Kbh%~Y6!D$ShezP>jUivc`0R-kK%yl!aXm;}mPz_)<7O7dJ zCXkzZLBtRu)npRHENRydwGM2wi>Jo@4}ekQYaowOeYgc;iPXqNTfPI}#2ji$(}`k{ zRWjKke!|FbDg7*b)RZwNX(KIK1sTdTYJgCaOVIQ}(HLIW6|WszI{k#rr_3Kbd|>SE znG*%NC0H44vYJymymiWgXJ$^Uy#9vkp7fL_KmGb8D^?z{sK!ir1(5N7JO)rRh=f3H zo348AJD&TxSO4@M-SV01E*fKBIawCM8i|R)Md7oNa~%p0+cG)x31CudJWVrQg=x|w~o z4jW&m0U&^5ASX!dSu6%90s+QxYTb@q`@Zn0=jyTD%g(rTiuNBO+<9L_=nx`Bbin03 z_uake>Cb%bM<$jmI|jf;5wi3x+5jxJ6s@zj5@*}vq^fCL*&09t;Aqp zqI!I4{NayW_1+hX+7!8yvcnLNDlLKC&=tag;Q-JY=d9Zbj!7<}0ia0Cb5-bTRf;e% zu@e!c(?2r>suW47#=?=z3U;uNm@{b#|79f-v$TsgU)V@dV|^PJCkzTpq-JakKpN*f zO4$UI_%(@}&`8P}8)D&TaH6!&HcP&=H9+7*BPVxoT4x)JQ0;JXS0RSFTk^GJjv#i2 z6SHWVb~J@QdE!fZ${%U_g=&x|ZN6!6)4(Y?7jTtyI(B!0o0}v%VF*Cv%n=Z8+5ccx zbCdQLXEY%o@{|PtZxj^nj$j&t1I{6>O3Wcdsev-}5@zDb1V~4#l*SggEx@i;re9Tp zP#XC=8Y8CE zg`xl^j1Y;SoVqFXh)z-Ri6e(se&L2|pLF39FS&l{s0=RWvzzwz4F{_xBH`yZ@azviwuKQrwXjhR8|M4t}tR>A8z*zg1p2h3^EMX9Dc zIV?GTanc(wjK$MRPuYT#vv``48JrP{Lb}~9z`?C1Czw(JB0x}w56~$r~qe-4~`YUn|&3gb?V+krQ3=YT3n?Kl8fE>V9xZHo=T< z%?4m0tGp#pq$<@=qVO0#X!F+b=r7Q?K#$zX7Z-o}H%w5-0W-y_)$945JHLF{y?5NT zVXQ2IS@Tj!Ti>R#IzkZanmGpQFwR)HsV?U#A$1HH7z#i!ay{QKy{YDjBp`T_>}fGNd4`Z=Zp|qCQ6##N9NwE^ z>bxi?A%!csOHxKSwHX76a}cWJxY+n2Bo`nlQhsCf+mB+Ue+eI0?hu3=13$GFn5GCH5R zW$U4F_}Kk>_Z8Y9bee%e%?^$ZH=tW~`0$~FE3d!dx+h)yq)V?~v2yJZjcP0nF>utm zXYasoM{x5_jYYo=J{@?uNSG-}@op+wPVxpWV;mpy|Apt;kXfPZs zS-|~PmrqWa;16UJpm{5c=NLj9!KfM2}{rBH-84ag5j!jO?Ib_Zdk{lV@Y!y@13CNOO zn#8H-!ohLL+U2_+yzc7f`HBA0ZRaf^8!~RVvyU<`+!UR_#m=2Or!IZ^)2>>+YU5Ei zH{yR=PQZWu6~N*Xy)Tq)CtoP{j;~69XhTd|GdOApM~j6>|CR}4Q!YRv!}aUee(A#> zdf#(cZ7HWp4R1PHZkiPVVb~+=Ja`ZVAlp`LfJ8&644v9QZlFXECz^E^kUJuFh=(M(!GLtvv;8L`Nmh!{HJ35?Qe(u;zKm4j67 zP9ZV;J=U?4LYY#gLTm9GRlDvU+JK$3UU7yaG@(OjSKl}Us%j}BnkE8^)_rd5Zqg_d z_%S^twI56Ca0?c-2t`q)6^#i*V)|52vd$$#<0#nd-7RelO#nCv)rlksck{*zfZBj4 zca5FKAHY~7QVN<9hM?hoL^BKCCQ6RT_{pfKAqFy%bd$W{kEC@*aswVszsQ~8EY5+= zrHJseH*7sTQG~HO_B~wGo#Yxw+PE?k!Bx@icKFbdLo09j!snlK`K4D}Ke2S#5jC}i z5hi76;I}KRweU?VBxs}%%CS8U+;i%0z4~SEc+cDZ>dLNG>!!-GAaxRAbU64-zp|=V z?0Mb~{op5l>Gi++6X!qWsn=*69Q5I^;zAO4#SP4ylmj{k9n8Y&#Omi!zWS(CJhlOV z7#o3MM5bv2>ZHyEhalbVvgyNz&bjShuKKxKu73Z|@4oeh=j^=Yx~GStT(Rb)Q$G*2 z`G!fw&2m@)@+N)F+yIsm0J%)AaGW@J`o0@(-m!dhU7T{#ByPMzas0#pApn5`P0#jA zi*enPulTNOqG=yYO^x|hT>&h5YjtEI3Kcn*=CAqfT3pW&A&g zS9D?wb?EEXZ?U6?_dV{5U%dHoWmyzvI+{o{PEc5+eaFtj2k>AugCk^!rWmIZlPFMx z4on2b1XE=n4n(V}Q^&f;A|xCvk+B-4e0$1oT;C{Z&5as%d$PS<811$!?=(fQz%(+A zk*1Pb!!RGE(Q!i%^he7F+g&{ahlZ!n?6nqk$-xu^kT6XJFY2J5CD19 zf|BhAJcT6@5j75q$xheR%aJF8yI2a`QME-ocqS!+yJ`RtQgD$d%ma%kC5=C`NIla3 zH&X;&(DmDh(AXvtHk$sCZE@S{w#`&KJ!$Qt%|)bLS0sK%Q{3In3b+fi#72SOZYI3w z=MQh)58>nxN|H-6YV^{D44KJeUEAp!HXoembtZ1yv%9PdM`6vff)b=L1m_g`_+lFFS+pkUwgwFe&TuG_u_YU$BKvQ{_G$yIVI6Bh?2*Z z=@4-^2did5sDlt$Bj-!+R|Xihyqd*cDCCsv#Gvd@Xb_+X-QHCH#L=^F|MUlc=?foz z-_ISt|DFrR-BGo+z0LTp8LW=tzxPS7Zi=TYe%JrL%#H622U*vxwNBpL2 z0F)f&4mAZ_NrZ`*g_(OoG{HnmSZzt1?@tY9=cZzRIAvN-6``0S<}qdp%uLi21gNK$ z3nOvezsU_yJwgHtLwd``JIAj1)YZ=(RD-d^g>Hx>v@q1ktB$=bbM≤E1RGl5|+A&{pG{}a0;QQu=uA;(D=aiWMx*8h+FoNfYnl+a zn-yltEL<~l1gHFiW|h(W9GWbHM9_0EnWyU(Qa*tNVopR))dFZ%Jk7MHdGR@cnMq

3W13L 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

p1#l$YLG@N++K>F{}P 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 literal 0 HcmV?d00001 diff --git a/plugins/hylouis233/expiry-guardian/icon.png b/plugins/hylouis233/expiry-guardian/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..416bf1d9acf663cc9cdc0ce203ecbd5e42e55d31 GIT binary patch literal 283847 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�)|ZFv07(_Tj)sWv`gq`k*uC zA9~3nFMrq%KjNRZopk*EVrII6`w&SZO@MSz*ONDW{kmiR@pXUwC+~mv2Tx;~oL)(N z(dcmQg4A^Xu-fyi-+aNlUik7qezmIaWRaLifa5(w~eeEB<Os}lP6~NFD`!S?%ApqQIyUSxe?VhyZDhQdF)_p{y%0k6x=KX zkxIwf(q{RE0?xW3D$NW zltnehvLrafswh-f(WN^%5kGLp4I5th_0M(ZCjwU10h7_N7-}4<3~QC}#N$q{e&o~# zA3A1g_TVTEQP)+cV^p|W2q9EVWNIevE~Z)vOC%!WAVYOyb7waTYzRkq?YA#r;c97I z(iCqp5AH@N!ib1G)^%sx68Q)M(Vp0ejGCN;_WngA#u!U?XBMukvHoRduj;zwMtn$( zc4J&HC?ZuWRy5VJc1w>zWFdq~Q;e^0+wM~<@1G~oS`shacau5LlA!U|h`BL0TN>ln zr$Ph+R;VzS9 zDervCn}7F9pT1(t;PB$A>2B!sgc+_N0(w+{iF|G_FbyoHs{KBIzeca!j za^{(LV`gd|R?Sy&WL8&B>P}5S8X=HKNukpTU~K-t-@fi=-uyd%{H%NC;u zC$kx|V5$W(o0%0$@4W=4#++tscU_oC!4jcXxN1oNxp~nz!P8RVSuQSQZlVk=!BDTo zNgyK>JUg@au3a~8{Od1$x@Vn$5`vBs`t=Zt?s&x7P4Sn`y?F4%6CSv0RfR$q`%?&R zB&>yTJKnHH!B6JKZZ6Dhp7s=lg;h-j4hhY5X`UM`cSyz}cmZM&vlu&R@4(&7q;>CW z1e7i!+Fp~!(JwZ?Uc^MMsvV47kH+vP{cMu>P?Gr{D?rqerS@mZ%-W0>815X+3Sv?w zvbIPwvvFfA)Eb2_2%H3-+SbyRurzC)gkV*~piMqOy*!a1V-^Dun|gs^ z-JMpU)7Koc`-hJ^ZU3g#D<|(8%=5j6=fnvpSzt@%k-X$yX5=t&nwSWkop&%TdBSWs0X=CSwP*0nGP4`=)r6#wzo6H&_6Fb7~H!o)>oYSgnb+boYZ9`%&Z(_2qLp~t*;T>jj#PN zb2QbGKwy!m?P;{Nr!@~44+m;a%fu8RsK&GF+j%xftUdXA5|Jft+z1hQx#(Hza;L&| zh*s86M2Ge!Rt&y&XxEyTUh$q4!$P18j0(nJFvJPvj6VJJbL+<)bNrsJItH;~CwEaT zJ4`j4NJ%gro|9C##ulyHbOZtmSKN#N;NZ}#{k7jyOBf`Ck-0H5t3~a!8i3}+ti+`4 z_tI`qgrXQ}jKz3YAWdYF_CaIpv?ObM?%$ra)l?d{z|?9Ns)#wNYT15YA%r0{-UQmT z?3cDYju;U%*V{Za_q|lm+vhvJZrF}y##a-M=oqyDMU4ftIG9*sBum62EvYIDOeBgG zy~F!`RDSxln~#6Tbzd&7Up!Pww?F}bse(MIE!!PsCq>Btu`*p4+T24geax*d`?EiP z_OU0Ne6z+_k+3J90m5?TaW)Ug`0huwo2NVy)f$1Bg+l;z?Ny)toD@Q^1w`i3X{#ASc}z;n;N1-;^ckB0q0T{#gv z1WtNtAp|0j8DN0Bro|m1SbKB8m;>+MdGgo);8))Li7(%=?H$+8%M3dzWl#`kj1g;B z-um{Bee5SrIPI+KEm|aEkYp#o?;WHVR~jxZ&JZ;|QR6dDPXR6rASi?e)f5W!oyZCa z=H%vPOUZL0qA(?V$4!7FXtNm0_Vn-W6l3fJO74LgW68`-lPe9q?(ZG2)XtBwi=_f@ z)OH*iK_I|v<8yX$W{5{;kL={$Ef#jlNdE3iSM=tHP?iPe>j5SPq(8Cc0r43ppL6&q zo``;UVKTCLrzl2Bt|-ut#O`VZjqS^)lRF_u&}empd028gY`!CAig02YC-~+ZLKu15 z6=>V}$-Xlcbm4kD)MshjV8&yekt1FI8nI;?n$!@d7-KA#(i0^G7TZ|DqN@f_%Um(9Jj8@K3LN-RqzC(8pf-^%#c>U{+9oA<>PDjPJIsUxY(V;U1|Qx&r7? zU;5O?w*JFk|K%$``-zWj)_y!{cA^NKf(RM`Ca?%bTI->K_BUP+e)`k? zdi`nJ_5t;wdN7Ds=$kNOf(4EU^$~;#WDZw@X#}D|O`FUP0!e_B9S{X*WwBU)(vD4! zyX-9&?tb|Tw{1Flx&b()0R8wsup(518 ztf_c|nL~6#AQtE5Ikleqn#LbYAZk1gwB3W3AXO3qrWv`Vv4=1-h}gN1QA_!m$l>6| z1Hqe?ImUMNDYeIm(ncjY6Fay53dsQ^bs3n9B}BNBsur$RN;3*@)q*KKo~Z^G(q`mB zZA%}^_w67u2x+Wimx-K3>bBT3vuV^0+=Q7egitZ_(k8*!*e5ofO>&2L`Xn>67DX{? zM*3|J$KXAy=QGXex##eXXl>XJR)Os z1e83kU@7Ma$_8`LWUrL|fw|QmeAjy(wsOVv@PX%Du#<@w&D>L_Ko$jL;Ja?o?&?&A zAc4c$uYKXu$N%y3f9>yH_j|wh?Ax!u<%F36D`v_NL_G=rivojK>!C&MuQ_((j%U5- zm*4v0SN*|@E_%x2KRC5|X4kNPa8ct>gOH05xIG_u1fhc0Bj{ies7F8?fwYEu1VKSs z!K)#YnTr$%M5tq|XHPi!-kn!{@iE7j_pM%Y>e2kAYxbjC7N}vE>6EU4QnBbBDil z!K3dyt~ch$12yEbW!4J3EsSh$LE%)CzBkFB)BgrA|mqObU0QrFnlc{~>_X ztS|t=5=qi?P1nTO(g}ZwxHz0tt#nsrA`{`7+R;F=K!&CwuSt-ZdNyWW1Y&pf($or0 zget(iXqZIn17K)K8HZ34b0h~_>TFQ6Dk?;cK+i0+?z?6tK|)PTo;EKaMDUQrp>Aeu zrhy2ae%_52L)$G$#K?syBE4?LGYYuv=(I#m0dU|N?o4XslI|e&^M%rQg(MNNveF7` zdoy$A9)HT7W7e+e?cK9a4$UnF>M$aJpo|zCRU1eU4WTI5p|c(c#{-L-ga~E@JQ+G)tl;PU3kIbLyp?8bGWeB8`jz>NvPw= z5Xqs;!nLaxWG*0cPdbHQ(YheAQ1YNz<*UFHO|3LHW(RxPS9Ca$rRPwYYC(+X$!*!3 z+@MxcdI#Wfg+IuR(;udynKT3G^)6CL2qSl=XqrYP%*orpnVmhldT2}(gpfpgW-%oF zCq*N-G;7g7PHc@Y027(Q!6LP*m9APQg5d0CQWnL~RSTGlBoYB;aa9d!8l;)?FPlIa zyMv>7kVg2KiavvxqQjc;4e@wpLEH6^WQ+s|SJ92#jU{;wg9zqoWqM(y4pIpw42P3N ze?X7faKc?@KH-?|yRW-?>j!WAT6e#gXr};2N7o5P1{DH%gpkW@FRc5AzkK~=-@5Lb z4}8TN-}Ez^jz8gsL0!dA1dPkFJ(vEB|ELJw=D?*fqAY@N2s5|ec>RWde8X#h`$KPk z=lSz{4zFL`lTMf_SWUssC_;&TJ<^3yoIn2b6Yu+ppZn>5dfZc<_^#=V>-S=~c(|TF zXdK9kz;L9QJ~06vVf6@B4*(mb?IcK*3iAE*hmC4~DPfQtZXkq4$Gk)mC zV=j5xm#)3yEsuNNkDt@K^|k@7zioi-1fh;frDNkupZ}s){>y{U{INAhZ@pR7qfi?w zd_V8v+yVIRwwRc?xbYj;ZvEn?KYR9MM>^J+(TNkt4K)!MjG~G-d(B2{t{L-#1?fyq z#ZZLW+yLQP*<)J52fKs4QHz_KG$%(M7y2EcZEfswDJjvHh_a^>emmD^5mD2$Ww2!U zww!D4?I=N*ZQOLIxohW!%o;h?&CKvQYuEcTA9%s8ZJn9LYPeX6lLQfE5Fiwdyou5E zR%oYfTYG8D0Rl6bnMqpIaY)mJaCd22-)SSjmbM1QPPmPg0y)yxw*tY`O#vaK$5nTi z7`4;7D1td!(`gu2`g5B%z^o(`HJJ~ol*OQRVI(G{L>P1|!0CwbOuMNtwslZ9*I=p3 zBE)casq4DqW(6~wFU|X5)^0>J*CBZ~G@X)`oHd;zB5ub$&h7Z58L_mR3m`ZXx6#Hz zL{1JicL9+HkqYf~aEJiGs;bik>8ZzUyKmd-b-jD<*%j`t2eN_#%Gyv1U`!}u>y8PU z=yuB6ZogyACqDAwhn{`z*;gKY?3RPERwW6|HUKZJWKp&e%J_dc|2M(cOPP7T^rr-~ z2qxzc%89u>_ig#xSH9{OU-oOi`uktL;`8TrR9CO)6eXoVOB9_B;;7cc{n5gfQ;xs; zmtXvX*Z=k_|KKHOUi6SFxS-wj;^KhP3>PV9EP~0vR>SH6;;0X+D?lR{PUK_``aim2 zHpXsCAJ?uhDNvBY+=nZ-ocPTfKlJX$uf%Bf+{dn`Pk!P))b&b4SwsjuzIXSY>A8cu zkH6%}PyLjeE`k~0)&}g~zj&Joz`v1sGP51ny_-M&zV|%76J*k0L|7I}4FaQZLS02{ znwZ2{y;bPfBgANBS(f0ks6Z5rNkQb&7J5$m=wKM7;+EFcmOR^2u_J((Nn4^Yw#Mhl zI{*dJ3L!P^Ye|#wB{Ja+A!rr{oq3rQjHM95DWX({*KGCL?&RW$vqvpV4n`e}Mm-TB zvgUDuj5H!@#%`BLCAUL&h#inCnW>zGJL$S6%Hd_$Z7!^4+v;B50Qi#0? z1|paT(DJmo`QF$x79yg}c0|$o^^-`QIx3E)cs9X8Ryc@=IYOicvo=pAi45H&ss(V< zxoO4+a2FZ3QBCSS-Z6V6~F_qjJlNRfo^s za(rDc47+#j-4ljAAb?QB6gljYLWkgviC#zc@7uTL6PI89&~wgu(3dwJcl=(h)kt{k zEz5vR05blcZGGB*)3U{tDHWk8ysnRZ&p*8R(ii{Yb6)$=cfIG4Wi?vAsu#+_o!|}< zh7#NU`QhT)tw(Qv?u(!Q_b-0s@4xuWiyw9cBkmp!7KdQ+PzW3fVF#fxKOGIA!v!FY zz^luipYu0H(0IE~E$~MNo5dW_DID(mdQmRYPMsqs@E&_)dBfdl5Og z3mS6J6#A4Wl^g(lTu|7agqPIeY1S`IhajeHgXQkR*lC@Z*_07cNCi{YYFHqUMK*{* z04GnyJP8?H1&VT9Q{ZDRhe0F?i+T#ZDLA#xy;b11&##?hx2O7+>zZ1J0CG2Jzt^!- zZyX~?Y2|Ub>tRe}B%vaax+!``6lQAHFIl)w*Tn!PYd7K*#_kScGIwxoDngum8sIJ= z)aoYQbTnKowB3rfBe10ZXh;oHvN2}j^!%7&`*Utw0Cj1*p&>Vvx)_`iBf*Uj)Y|pL z=I5M9QbYDMbwSc2JERp&9U*u6ki6|>x_A9CEO`&Z6PPu#e32hSri zmjc8i^Hg08-LmAx`GwUV|HwzqKj*xMd|~63&HL+7v=F#`fweE~{AQBze=+o-lzj*Ec7#`TSY2`%OE18&7A!$X~_AS&^XLf4)&;Qyl zzW1fCd*$=b`{74@TuR)h{e__ryc7YufmjjP0jpu7KH^{z9!Fr)KyJeDC4=6j_sX<2 zb;N0ZoDAImV{wLag+T#yYy##*J-hjY+jd;}?kDp8-7C*~^l|j1uN}ayy^2sq1Y(L+ zoVe+h8_s(2)1LORqSHMDVnw2AosK ziaQ|&!hMT<9J6v2PVTM%*L5-pszwFOilPk3sYb0x7DHrAdTdLdd zy{CKc!eW>#1E2(hEWP2m89IgV;==suPk!tp54q^!7hieQrla>;OolOQt?)2gZQ(JA!tG znVekx|JDJxpMVTRv8b$Lff;c1V%5=6hle-b`tdKEe)0p$^5~OR;S-JxzUK*O_1@e53@ilk(kt4GofY-AX3x>keL=^egS0e z%+1eW$#ALZ477ijnZIomB#KhNWDa4GX8n+en4&Sf9#yB#T5^E#G@~{a^>2!`z@;RlB+`|02%-HHh`KzBm{Ch z=G||3(-U6!3(tDZmp*>Qc~gQlGo4a6Mq*}gQTY6DXoK4JJ^D$P-uUvr`qSq={g;03 z?^mv#x_daBAF#m+5(H+z6ktHfP*;6ma2Osd1h?jNO(1nRwVTrphm(Cb3{V6DjN{CvlkVL0`A)TCAxl4?1Yq1&bXi|%-`4gxLJxVr?Fhf$Bd-X`^2gx|jK`DGls7@k26=JBnC11;Q zLU)4`v$Sq~P5_x&*%m)$)}`Hkp_<4|L?TRsnFdL*_Hb8mIDy=q;MRPs4oST-jv#Sr z)c;^sbz9O^*jR@kWdStnb%`tm)fgP^T!iQjR(D~R2oR}S2{Z9z0;HYMnqk zz}Si{i2w&X8Y8AeaR5Kgi*42mRPG54q}l|yBjl{;3i04tiIgB zPwR;UXOSwc4#FW^8ywLzkSvp-rEnyIwE`pB*Txdkh5`X_Z513j zKfyttS zI;tKXjONZb|LnVd_qBiclIQ%!^IpC7*!4Hni-!-JMiXW<{v9AvkX7(%5js2s)B~1O z%L(KJa&nk}0F@NUC2lO92y_$+PR_x}&7G8-Q4~e!^|}BDw~CBmk%|<`s|fZEiXzb7JqNplYUPEGecb0p zRu2l7WE0Hz!6X37S>???l&VzY#D^pGpx(T79C-(gR&>doe7yM6zoUb~4wxy9+Hf@A zcYZ0yQpsPHv`2!A?XTW9+65JV(IE-NZ}_Yy9{dUwU;XK{C^iYRdvR4k5V@ zHm&fnF@^flI=r_ep%u5KxZ;%hC&}Buo2`h%gG55bB2`k*vnTcZlEU8GaHdw!M{Tx( zJ4-5#E=5r_-GjPak8D?vLntDWJ+#r75RsQo_31TiO-o;+c0E14^!2nn>1?mDyNfqL z1C4`GZOxYnO9YcKu_Hw!6Q@x}VXC3o5NMe%Ct+W@{!K?kTcStH`iWLNXs!8FdMwtq z;{=C5xUOJKb)1kxw_HtdhJ8n?p0rB`3}4*c&3Zr-Ue_RC;VQHBsmtIhxTy1)Ff-+0!u{^Yi= zUw`u2na)%PV6Gh<7J$h1^oPUQV~@J)`G5GkfAw2`{Ch9mcE%}Rii7?Ei**b|NRE7< zM(7k_)v!_Z46EMcyYGF#&YQ2l2*X30 zCTFJ?4YFtmNvP!7OcmLjoIob&H!L_6UAS{xv1#?)w}0&NC*fd!_W1K=Nr!~beWQ;~ zNVeR)z{Sls-8}Qi$6s>!nsvtq+$FDyI zQX7hqp;H;i3}gzgBaa4svC*(B&3ckn-;$m=?GD2el8GQLUQTa2-5jomOe zC+<|x5y)MHCC%!`90EmxCQpTB+mW=NpSlRm&OP~30dK}9pk^FyL8BH$QB)0q5fX_> zqujLri42?^1sh_Q9ERP*2~I*a6B{*J3rh1xP1+4|*Vt)%C5%NP3)ki*0$I8SX%nMK zlx%;Q8l$3iEwJ4bSV|oXp-y>A%htn9b~FcY5Opb|``Me1+c#Z=iRfpvwdFP`<<-Fdu4opVYXAxdG*VHN6FY9X z>Ez$~g`fV%e|+sfCrV&{+k&!7I}@4xQPo_pRUkGewR zaE}d#l@y`Tt{9j(MO^D5;$R+D4Z%rM(99v1O2xO0@Wt3Dtz}tcHYajc=Ym2A6TOvl zd-j}p&HLZ~f~(*2ju+l>_2)0W`HP=^WGKtk8%{j+%M`8eX{n0=XD4Z7HEra(gQWz( z9%j}!4(vX4=M`6VIQ66%eEu56frCR71rQ|A++4r37&koP2~WPFHXVQo`~y7# z;N|0bnz1<49WkA;2*gBVH!Kf0NzI!CD1v*_L1?y0=|3P|(U~#Sk#9P7i|yaN>!ho% z`tnI-rzlKysUy)iK`nJMSOhokz8ANT=CO|rwJD~k#0nHBLI)NE#spJk8w^E9qfQ-T zPee#0G;fyVP4ODH4o(3z%$AIC(#|->9PGwa{n``)TNc~FF}5+#UUhB+f@3ztj^$ZB z+G5@c?UqPFGBBc0mK8U}zx6C|LlUp0HMsiz&#i5XFMTXhrRPR+b(sISj_wF}2YA5|KqMDA|6%%|l~P+&CzL$z5E%UUrPCFmHgD~^rv44{Yps>V5F33HJ7MFhh<7=bjkj9D7tTCzLB8-^X>$l=F4W7=yiG5&U@F~{Pk-u_~9o#;j=}zd(bT!IK34! z2zdtZ-_cwxz1OQnFqsrmuKLuw-g(jUpYaoa^{ua6d)n%Wa?-uRm5{^-yD>_2rUi|uuPepoPhI`OC19TQ+WLOooB4d+2#hd^WuV`|^83@}=L zUt8{il2fu1LllQXgAj_)?alNL?SJ4kAAR?4eDR%cf5E|~4=OQ>FMMqd zp#aDXy;6#A-F)lx!!Ew)@}rK~yuVIwSS)q9fE%c32<{ni;#jvAiY&n zor53y&<7qjsD={)B64dg=yFq2npnq$K=|g|L40QKPJHap-T2tTE__wza4-;77gJbQ zOrsMzsF*M!V;fZxhr_ZS#U9K%MJSTG%{1-*x7NPx+T7SF8OyP^-U$AVFpU`>AJCE8 z1j}JPk_bZ+IgBPkx58LVaU*i0WktTj-9y{AG1X2Y7h zZhp4xrUegc@!AR+1#%yahT-^)oA#~gcBj8~XX*q@8MiJ502$O2-Cmb(yXBVY{rmPF z{m92Z;VQE@|G(M$?|93u;>;g@s%ou$!i}ASI!I~-6p&B?Ay6RaV1iAs@fe(b9@~S{ zjMLbI?QsA{%s3lk8)LFf4kC#lKmrLQlymAtN|C+xkd>iuJ_eeUT-%-9UJ$9}n= z&y`xbeNWhXpS@~TJzbgVv1lacHzy2#f^6NkKQ~%YLkDN5$ z4-rYpiC`gO-(Z;f>sH_OlfU`j|LEs`=huFD^Y$&*4F`vgkgIi=ks+NWY20eqcnLZl z0NOxc%rs>{E%stizCw?^|CLlxS5K9&Rh?dE#*Q35N&7^^i&Kww%rGU^^Yc<8jJea8zv3i4%U`Npn;f3I=CZidD|l`sM5 z0GK_pXIJO8n{J%F>-Jk8^T1tqU2xA`_dIIPt_Qb_mY1a&k3kNEUWNYLtgTtU;ocKZ zI_2|QPTcXu6HY$)D?3g-Z8W=PO#@&Fz{t$qGjH~v-9j<5GJ59zLl4|{+?(I4=?T8R>Opo17>CC?=6W3;(!uijEoFcHw?)zf}vjnvkn|z^>NPZT3oVzE6!cD z5o?%Hj|ZsD;LI>{5C`qe&T5$LErV&yMC$G^)yP4bR+T<&i<``OnKds&D>1h%Ha5Ak zu%u%GiI{}zDIdRARkci|J>JIF=ARLmDZ3fS%`62~t6Bv*3u{xS4wE2+P`9ahQ_n?H z(43Toa-Ls56m3xe^Uwwuxp{Dc6`ZiU<=ro{B+Ej)NtAD1oRNPg`{Qj|9N7YYQr*mY z$$W0D?G&gXp+>b0F3K(d5vi5LRuUF-IwUbCDLZpF3zoDC0D)OGX`m=$38A*ad^jco zxZUwjIydIVXspZ3CP79yNXiN@i8Q6A<81<@NS)EpFovKwL0XGt${i68ZWE0I;0~6M zm`R(IgqSAS>B+f?GBWWdCK696)^3TqVZaj1Rl7z8jJ2wIeSgnAH*NgAFI>^B`w@{C zjW=lAU|=L7gi!gxrO}?(yzX_c{hn9<)L*8iIm9uRd9VThLg{DU{`!COYiuAk1jgb?;KWe95z(c*ifk?ti}O_|s0ivtBx|1ek`f z0+%8fpb4oSLF*yN6Jmy+2ZJQE+io(>DcAY_SLTq`ZXMhKQ;kX3d)@Ag9XY)H&a1Eb zjvGF6#mf)uymx&!hJF>IY0w>f5im>tDxH!T3l;H5x8JjbO1a0>YyE$rQS|NK>-{`A?Ox%~3)z2=Lb zd(?yX-&YNnM_m{?04iYwp&XYSO83wR-YAj*V|9$?X8QHUZQJUT&OPtu$6s>kTQ9oo z($5{YSTd;}y z&~bw?G}n*h@G5Gj*VAft<}k%DuA4eY&Yp|YFd1qW%KUz~jnMTes8JEoO-2fn-z$qx z_SRE!2eWW}tc1eMf~r-3n@C6^T)SD&l)6l8Ru=LcFK=9M#kK<9k(770mOB@P4X_fw z1aq@MOi9Y$MHvaWSulc`YT&FlsF^vL6BEH&B=Y3FX3L|s@w~*8m?^n=AoZA1>WE0P z>{@^@Cnq<9BQ>eRA{v5>)r>`?L8wMKXh~xp8vw+V2taD;4il59R-Oxh zc#b#L{2rP~xKCyY1Tzg}2)R(9e`qp09crl23}rfJ=9;Ad%*jhLz+_5rNNr8G~V2!&^1_SMoqWd zpH1((`-XMDbUZAvw|{@h=EdHOjcQg9tW)8@(m=W2z3)eV_9x!? zidX;0pGypP4VRai7zF|cSpvji(2VOHkD#f^>8#{T?o2Q-j^o@sv`GN~6ndLm$icpx z+{oNL#9p`O&0zDLU%vVU*L~{KFI~F--Ys4Dd?%8a8XAvC3@9m>3F3wdgedHLYJKQQ zKlGzNy6utYe4ri;>IhD7E-chM4vje@b{0^FifBeQ-|`DT_t!_Re&^%Qf9~oI z7Q6VxKUl&izOn?H5d;F352tkgWtZLX#t(k*d5G1$PVhe^A(l87jK@L z!r>HSWB{vfz3%!A?|Sna|MQ36{jR4zc<+7l)?l_*p;L7Offz855n$xmd!~*+K=90K zNx+e#rD~Vh0u>un?j5b&5~*@D(W=Bbd|kycGzB-ncIn}Hn@`2F*B*}rCydhwfeB3jsv2sPS7xJdz^ zF@(^#8BvHe%tJF8&qfwEf+@jRxPhja3lM^t3k4Yi444L9VZ^qZ@AA~4F2Xu6ld5X8 z71V7>;&a3hM=dv;V;H#^mtA!(YM4`)EdFKp&77Q(*onnFRVCLW)Oa!=UmD3oxb|~Dzs%etK2qJS1NkSNtK^zX4g-M|#(xjBCmE)f~ z6i}_&nY@`v2w~h759G?0F~@aL_KTYZDsBE!7#lMuVP{q-M7=a-%I z;%%QN-v~V!OYkkf`lCPiy0`t=8=tm$p|hZM19O3dh`omf^^UVox#czg>$iUT%*S1L zZM}40KLJW1=EsABq3~t|t;c{iAf!;F+Q-WJY|{R>mHRNc1%gH;*0F>7ovx7D+MPGu z{Dd1n{{A1{ecMf^Fv&tUR_x}~vMxvgE#qo0hO8aX2+l_}Mg z6{8U`rV8v8S6b)+p%0y1-5uO;gxl3;Ww9YsKd}OLh!yH z8jknc0|0M%ln;1T>xyLl6;Jy!YlC zPWXfW{!6cU-OvC0&wcjtk3Y5O&uXVH%J8(=gljHID9bbq z0j7o+M40)wzkU7hzx2QT;19g^=38$*b#AUR6P1_}z|LR@*a;OJkp#?{jF#LmvV?&e zMrs%(!!Q}@WT?&1xPirhkRd@#grtt(gr*YgM1w2$K8P8ua!eFdr$CndCQ=2Dc(e@=5@}obXgT|yT?DCW#~H20L5R(Z z9)Kk8D`rsnPorh}1M7?2cYKCg^TgoC6ka?JNK zD-b1L!9&9d1v4x;a@j#{)(Qj*rnm?JOQAA}Sk6Tw)v0mp*znnz3m)-dcU@A~MC5hs zb`Q&zHTQ(o^AD!o2iD5+c$IWJx}3&#%9i8zRAZa}%tQA^n+=#9IUI&j$VGpr)8XB_ z_pQ0{`s*J1oEN<46CA@K%Q+a|mI3?+jrDCM(Ms7$9iq&?<#%8E%0GGSZ@+ZoLVvY4 z4Vg0#D(pTqSbqA8o^k!}|IJ^#a?2?vetEcb@CXYVvw&fFhp#nsJb=|BKojz%P7k}Y z6|_k4+;#Qxf8E*CqD!o#(+TSyy5pv2eEuDO`#*2|(0gCDyno*b-ICb=Z%ib5O&cW<{Cj4`R zH2;bsKr1!iWHkY~!%ex8*gLRi*9oux^e}!eqiV7%Rlsy3qSMm zk3MtFs)hScI`gbUL^Md694yeJsG@|W{rgY*g&+B$*Z$dWzxL%lPseq7A!t$x#sC5u zCMYu?0ExrQkVXntLze^A&MoTc3v2z+3mf#@ja%$dYd7ebtJmr&GYh({J8Ll*pyp}R z@UT`SIGR8(69fxj0e00Rd|~f>*gqQJj8(^BZDI_p#!^2!8@gk#FV(TB>ne7li-zml@%NUNe<6( z08;F4C6ZV&_E?Moc;*7Yj}9&3DdaCEIAD=Rh`m+c=eLs)#FX3rSrn&MwWLGO80FaJ zA~+l(p>}dlsvW3zOtoUBRNNAhg>llpej+eu@Djih8ey>sqklpP%_?~{XE;Iz9*NS# zfDbPrJTN!b5)PDQ$HnC_ISoZr*a|r_&r!UkECMi1Rcoft83slCSu`2tJh!SyE5M*> zegk=NeMkuPlrBLFvq2l!AUtZv2X)ij9h?kcHo)06g+%JKIQvlVgw3~&mxh(^J-o3e zF;Js?=9Uu<-?_AR=Jtp7#<>o|9Z2kOA-Edmst(_M+nqDoG}Ysu_Vh0`IvxlMzFh+R zM;rm7-x&p&$5-1)s_xpvg_Vc;+)J$sDdeoZ6X|mxBh!~gbWL|BZFqF-QMogF24AKPk6W7n>$y7Oym>dy*3|D^_q zeK;k|1g87%dq8%avg6iMA9en%no^TT+5hwc;9pS#U@J5}&%Spi5n@^MiFds1qF?{z zU;33hZoT#Rxqj@&NTR6$B>*JZLFtBIjvfm_JF7PXl0rNe0$Frdws;bt09+Ui0gX9o zQ&`DR%l1GAvw)fX$gs8s*z>%Xe%G}>_dkF0XV-5z{D&$5{Jb^C(T9UDZcedx)xJTx)V;GtjY_b)GGo) zNgy-Trb5XkXj{!N3taLB&@%Un$PO&3Njp%BQ9=XeWaOr%5`~+|?>Mm$%#A`|O70$t z-IH5w8Z#v`4b$v?cc)lYqh>tr6NuW^-0s*_HHvUU#NIS@r?>!2&4L#WKrTQGp;Haa zJ-Z9))Mp}uDh$mMxoTwL#z6o}YORt6gTy$<_W)uu3#M9e5dxW6AmO^ej)IwmAfYBA zYcy40Nz!&va!)@@M0)May}YN1f4|J(ThV3^NhxV%nks@pVi=U(7$&G>v%n%XrlOdo z6#|w~kQF;-j%Id%L((bHATcE&v5}``e#&{T=abfdNd`?IIJe{@rK}Z^s!Cz(s}Fwe zx@XF*yDppcFjq%P2Lt36Kl<)1*B;qh^mP)r#K{kCqSg~%CDVz;C-7_$8 zh~0jDX#XiUeD)KsxZ%^EdphhK1Zc5My5+j+#VrVEb8* z`tqZm_LMiS*>S?>)x+Mgdc({f8;6)eIdQ{4c=84{w5eliMzI+W zJ3u09>dtK9usU?>6BpL*zi`v`gO_YQIX!O8=4yLq&X?+6|`>9bOV?;>mY=Y#x+}$BC`Z4J6)RoP!L=*!`_L>+F+Wg#Z;I{LEZv| za@IVti*U+KGzJr!CGB`=gJlMD?A8l;YplHlH^1-i5+&QHp_sR)r&o<&66-!F>{s8>#hqM z7VhP7%E6aJ#vs=KRL&;JQFmz&PuO_x=F-~H0=tFOK&kgml{sK#srCv=l!X&pHV-2@N;31L(x zT~gk^{?t>y^7!w1$?u%~^ryX{ziRbY#wjg9xrr=rw-RDxdBtFW!T#{UK>_f@iN(d3 zWNw|0hkG|Z@X1e~weh&ws=r8BH8Y1VTzv?}40gwC1l@D*PCxVf^RL);%4s{zEwwot z^#4=`pa|d86oDn|+j-yVzxbm+`iCEW&wJ0FpQ~osA)F>!dl&&7FhZuYVAdTc%`WH} z>o?gM8@Ae}*|kga-Tv}ysKynMPc)|Lu}P^jNOg6f9`znrKGeBu?{3_@`#!pTdA|(d z&`yOBfLZ}fmdR6`A3-EwX*^cx^zQ$WpZLj7eCh-5z2v5^UcY_SY%h%KF&cL?l!=hJ zpBm5%#yGLt*O#4je)F{BPu{f_UDILRM{0tbMiW;RD3e$~RCi-93k--XHxkrboh5k` zCnhJ65Y;=~;e%R-ukOBY?Z@u9g+H_FE?#DnS?-_#VSYHm51oEKp0#=#y2~}1C{O@V z9nO^BTVV9&=f)hvAj@#d+&L%8F)<}`XG~e+R(9JSh<&mHM-KimFej*1!B^y3UVt_R z2gRy(gLq1j9Sq@`t2i{6Qd#IH=uf5uCobTf$@qcGZk8FzU5n5!FG?w;C_!ogQ%aeF z$0A8nsyr*|)wQA2G#wVv)(S~w@y>OL@+ZUQ?aC7 z2b`H3B7%rCswt8iEl|Pm?@F52#=(Qs%o~tPKYB~z5ml+dO`2@2cF0Xed_l|pFD8i zy5IQphi9x}h%*M3?K;j33K2_7!_jkJ{KC(^_RVj7m4WXgf)jrm5Bwjc1K3;&C+8{~@ciwQ_89)4;FaDb^ zee%%!2UbzE zPNS97O^52#LHVXS^;k9bDcI_&J33)u&4F_^ZaegtttT}*7S>ljs(tU_gIq&V#egme zX3b!(7zT$z(GP*eG53j&f9ll1fqiS&gicr{#gaHG6R;691h@me_}kL? zXa!?O#GKpmB`61oVPxb^!VPD#-X!uEWl`dmQBRD#GtC-;mSUH$A|g`_1O`#DcRH9r zP_@88l4XQ&Y6FKd495kg!on#7Bb`M=^XR|>h(SzBnJyS7+IGtPxJ)LTEc+ba}Ii@ufaj)ab#+7+xi>1ibn`! zD&zuIaln||$VH5tlL;b^x|`SUT;6?P9S=uq4Go_>zwR*H`(JtRfxt09wB%|KkjT*M zR&vudUzWefMmv zNGJ;9;PO}>_smQ0`~IK(nb+3C!QLuFuq)ge*mwzEk2tss`wAeI;9T}&dD)>X&>GPBf&7y=ci++ifR6e1bOF+6jZUb-tzWt3jPHB?^Z)vu z+ipK&VYXL|(-;m%NZE5AD#mam|L$eIqz}xbI!cr{!?bxF868^t(z*WmfUcUvnkIHw($-aL4?OCGlMWxhxNb(5$2hQmKT{;wOaOCEGV8cx z^*@0-y-=ADQ_`FUUE2O8z^F;sWMV(@=u1bheB=f9uW10Qn+`w}92HNCw?JTnIKalx z$wWj*vn<`6jRI#&TN@FZpN~mRJfW#8X_9PRT)p?vk2rnT85@u5*l--~KDbYICZpx$ zgSc?p3Fwc;U;s_V&$b?Vpo$i{Ra1b<83&xR>nEl}&aM5XCGoYqcvr88IZY^n!c9i{ zdbGS_&HtZSC4`LQHI*PiljgKJVov5Zi6O>R?C&I~Mz{f!WdR;3vXeuE#lUQN(Vd9d zs7>)>ky@A&azViDg5DMgRGbC?D1_Kpd2cPnuoV}k)O3+yIy#{Nw!2^nNkkf%V1Dx@ zW@Z(G$=yYh_RKtloVF;c8i@#&Qi)i0GBe>RBykYYlu~G+L&e*#(ux-W;?gA$q2z92 zFv=T}oJvT-b$dUQG788cO`_AhOH-{1f;hN4l@vglSP9EH$(@O#m=MuagM^^t(YT}Y zGY@n&tiH!h9XT)EDd(qg21;8nayCwXBX{rJJ#+h^ z1JbP`xbWXwyb>JUuYTpLk9hVApa0R>`PB#DZcGGk?X}-70RCOu0Nk^1=)leg=HK)O zzxV$&gTwPeOhn`ZO^1Hu=YR6GC!T%QmD-H!0EOEaX}k>6F&Hfwbixmug2m^5Fv!I6 zXL?L2A|P}+)#~BS-RE8PkMI7O&%Ni}KRn*E>$HU+v(X`@`N~o;cp(U8Esr1~fWbBx zjYp$ich5>{*h|B&l(#t2NjY`{Dq0k^mITdMC`R9$j$!j-}NL^VRM>d$2nVxEBLfjRy@}p&2Kf$us&3Pk8q7Q#S9|%}c{hgA|0>B~h1(!h1!D&50!o z$arNYH9`2=G(-O3+!JIj<;HE}x)%p^?}V9EOOHSC)Pq~sukBQ$pgu>4pPEiAk@x-iM;4tU@c?5>=u!QdeWxWacM&r ze!pda9!xmrX9*V)2Xo4^zYOc)Vnd`h%@0J`hwhRCeey^_m^0{s*xSOWEdWGBi+$0| zU6|NJM3F6S!Sc=*ZPCEYiG`bX=ReUKw4q4mfeBz)LFZ29^b<6`iJJ#v($=5P%&??g zFU5zocw@@N7BQKb#)2Vk+POW8q$0qZK%1CZLk>!kT$AyN8zAGu5|McJ@5>|xt4;88 z^I)o-oOM8Dd@^x;bj@A2^p-erJF_f$97soa=dS(z z@p!oAiO+h@r=d0^W*D^%{3~AmTPI%f_&1qU zchbO)h(=|p;4rAC7`vfj!KQn^_SNTp=B#p_OuR2@K zJnc#yThr=}rV9WC1H{TuvDBEv3ho{2u3tai^|dQsly2L-desi+PPazHB0hf2LBtL~ z$q_m++%als%da)m~DRa(q}APcKjoD#-&job?RiuQ4RtYcOkO~FJXJ- z4CX{P57b(*ijUpRBZ#v1+%2+sfNEeh-?4G?-m{L|hWhZ5?Ao(WQZHZ_0QJ0GkM4+0 z7)FA*gG4Z@8=T%*sDJCS=PjMxU%fnR22879R%ZqR7=O6gUTg*cn0~HW&hzR{umGM&!2Rn@>T)W|dVAR?*d=c{TbcNDWHzZKi%0)oo8BZqKj|9p;PCd=Z->Ch!77`2P( z%ECH1M)~?Mv6T>|$#a&(Luvi_mS_33!zg?8*>VF0?93`GnmagTREUqQ5D`SkI4~zwm`uT=CYwd(GWnzUuK&o3-7JRFqR@ zGJA{#4Ko~$$_v!FC`_n%AwzvNB*FN&$mo|GJ+A&wf*`7hV&J?R&bznGLebTw-ek8=+F3%t4 zqZs~PB7zvkY#Iry7G^-*bxyX_ec%O^AtCz5Z8z`KPYB;`67hn(KvTJOo)n2aW{@)^df; zxW?%-tLmS9^7HndJHK&Xy|mnE0ws+!P64%MW>DS?=Y_vrLAe;p16ohCS;){7p8TE6 zYG5>#jK>`sskqVM<+&5QXRp5CsRv&C$j8*pxPgkJFM`S)WQKk+M0Jb~N2k74X*H)%w9v`14lKwZ~#skMX|SWNM}qVL_N< zVv*!Aj8mXGMI?i=4TgOhj(Q^c)S}dH z-)Er+hK${XxoRL7f^bdb);brOrs;YSPEK&fEi#uWVaoo-Q&|TS%U^y@vcmHZAv6=* zu~}f@dWDLYf43lxV_}6(*a#`5PHXu?vM#2R4RZ`x>F5|(sLt!PAt#j>)HF=H9f-(; zB@qau9=Q}IBGO2ZF$>osQnN^t9mx!qP>Y0`g&UX&IhaKf45395o7u!pIa$neKoQ#a zt*VukT!%K9P)daGM7Y?xCWw4SVsCi;?U(t1(MFII?t(w8v^lYJ!(?HogLv*KpBikO z`&w6Fwmj@U_4Kpvef)9ThCWb;Ev^3cKx?lW-KTb=Bwo@4zeS7Ku4>S?T zuAPZ4AUU9!4hlB~(h!0~$Y?4f=R_c5&)}>TR>?}|l=6ok%FVV<|NUEj?aDX(&8x%C z-6yW;^=GXjZYVQW5;JPb7I9-hn9<`tY7^a8+acO;+)WpM_xJwhGk^F;Ub+6v)89E9 z)eqX3mS;59od$3;>>aJ*46Qq|?|~atjs;c7vjfTXl>;33bBK<_n(u&St}!Ll50Cc32lP z^M~=Q3ul0_A#irq%~Uk=(RaS7Fh)U6oEf~tE)Q@3gr(lHAofW7cakJ$D9B7 z&!4zvR{D)5H0)pj<{+4f5##X)r&o*VCoXx$zOB-!b$PkZIaMKnDG3O{!OoOYpm7qa z|FWv#Y9-=U@!?;2Xj?eQ)MAwvt`+2M>sEj}+>A{%nB_?0wjgL1ziHcHiQ&x- z34)m$7m{DL7OGW+e#kHns#+CcALjrjizttuoduK}uFOarq-lXlY8t3q3pDjw)Jt(_ z7QMI`3=Yfeg$%q@kDmR^DSPxKxn}@UKABlpAe6f$RPeuTHiWm!LkQNmEP=b786;JbdQhtG8c<7&>H5qS-QuV_YN*vZ`_Bu`=emJLSShyg!j2jLhC0 zrSS3#9=~s)TWMnk7D9&@VnA}m{7ffYd*v68|C>MklNSreIjG|(ljFC){#~#CGcz;e z7=t@j(CMS$2*YtLNC~Vp*fknLW00BfiU3Yo7%7{#4g*(g|RzJ7g&+RWJ?>X&otzfO_Cz&9=j<&%gMd19y*-S|45~Jo)Td zY*{DJly7&loj~{AeA}weee~n!6Hzzk>iipY0LqRH%*6Hbk!^qQ>#zA^jO(pg-maL5 zf<6m6!a&ntQ|RdrU-IhrBAfB^Z><+UO^mR)Dl)fT>+w zn;r*u<_vVGqEZY>(E-$vo5VmoGVDEP%W3<69?pUv}UXLZjC_>AGjBq(O86+FEId^in&!jOu8T?|1Q>qqq} zf({&{*=9SY~aO^qWESVY~O zHECs@&9ppa*=yfdAjw?@v!IqGloG;tI(5(rFi7$|Ucr<|s5Z6Al6Qp!EJ3YwOb7%f z7_z9&tfUXNi#ZqDTpsxtw_O6R;(%fpLAd51I z{qK8uZ)th!>QME9Ih$JUF0er<6%Ig?6E2&vbE>OWoy{xyo;HxPe5^}2o&%n0L>f9g z9^QKXlmF(x5Qmo!j@=r@+EtG8&gx-2X2ifCC5r9~@BhcQ{5LaSmBlrFj6d&RvH)-g ztXL4u!7Q_H`LqA^o!4CP$?dCVVgL+1Cd?2}A2shu7Gh!evs7<)>BMg@(#bCnQ?+z^p; zFzi0=xE*_c@Uc%G&yVv}+Eqq?gT*kY65jKb&(VHv;KFrcq!ciY>Y-PAmxyd!p?0B~ zgzLiJhY`%n2m|H;Y88W!)AdTg%*qUyrnLa17THpOD?1DZ%iQ+Tc2#z@NaO4_09ioe z0b?ezKx}LXS@ab~EK-9x<<3gp6}F23wb8#*g-9mDWf~w6=crpJW)@AVRoygQs8>+0 zU~gEM(@B_%fqH^h>d#K>4&EkaQNj3A-rJVFp; z$Pb%oa5py9%2LMYwisM6C1)f=sZFT%z;$wCCo(W47EVZ72`DH1c~;MhNbLs6n$_5d zREa4VQ!v%i1!!ma#Y^w*oZQ$-)JZ#r3gyF9aKgdNr0qf!%a6Hf(A0Ec9)!76iaFlc z3Zj`nfOew3Dv~c~U?nFbCnJzKmm+}3lH@|bVWOm?*|Sgj z+^~|p%4RsSJo|zzXYD+H-R5RIYQTX}5zsS+!w@?p2k(FIxW9bu@BAzgE$T60o!>43 zzBwkVm45;XSoYV~%S&j6L%3?$dMJjY0i}ZvR5)~RZ@BLPSspCIJ(Z&2o3x3QXP;ZU z9;-HOsq50ujYL!*9?jfv)m6`hgjoes0$B#{HeFCtfwXcI#s;lyo>sIoPH?YRZ`pdY zd#EMB+48GxC|~`N8J*xhst4(ijvv~1{-Zzflpp)aAHU#*FZ|W++~PI1JU$3jb^ zr7cp6h_<3jbE7tuSwtG)!pK+8BDdT*(AGlN(gm$Riik-iNao@*nGm^7L~*b(OQ*7k zQdaGgmX3;}a1~mWy_AaICda#Vt{}sh%%iG`h@=ogYQ>jWA^edr8@Vx+#T;hA)v9bz z@X$JA+AfYW650%bEbq_u&J{?JT24!J5lLzq2uwZ|2i+cT&IOZ}Srto&HXJO^dMEDd zZCZDCf;tf!S@vav^Pf0h`{V>lrd;*s4%J7N7t@}7JAzAxtIlxU+I9Tp+iva*Dlh&e zf^sf+s~F?WH{H7Mn2R3&!ObUZ-)m|{yrKc0Xal}I9r!2FSaU{d0(pX`1RXm@qa}>x z0H{L#KH@W3?}#;A4UayWTMt7@hlw|!GqF*TzYs?PPFzw-PW zzI^Qo-AW=eqiIr%vz_%%dEPVLro-hUf!zs3TzX8v4;`KMN9}#xlG@^$HOu$jbmKFY z_U~C80)#Xnz|fTjNymCP`JuVvPrc=$7k$s~JnHGs|NY+F{MU5(po6J45lzG}XOQ%` zTZMIp@3{4eSN_AhfA&is{@{1(;X}vwL+CSs$1qr%xK&d4a&ji2a>7!Rbidoa4Uc@} zHBWfi_x#q{6Hoex)@ix5L4SQ{k#WvTBQvlQSKz9L;S{av5<(D#SI?)h~m_9=}< zm|yJSD_?8yz}_0%0Z54U@2|0G>&E4CF23~3W@*eUM^|7|e4cNy4KQC|$r1v~+~5Dv z8-Cyu?|#oyHqQ5Y!Lrb2)(M>;ShgBx_gCwy&c0;OOGNC%#;%iC)`CQB7xBqrnisxA z3^lWuL2~(K+U^2ZZm#8m$TLhiMknB{TAx|e2?leCEN;Vbb^NBy`zoM!!vpsP?gVr^ z)1ZbC7$07ui?*LK?qs@SX4wZBb8Zx59{!5pDrGoJ4sdEMXT+o}qSfIfWidJGHRh~# z%1#D$0z=h0xg{<~-JHwKdh$W}x_NgQiR9TiVjC1kBu-%9m;$N|;A!oOLTu(HGO_dJ z-6IpZsdZ>2{V)5-L2h{gpPU13g=l$)njB7TAz+gQ2VCrXBqDh(Uy6pQqV1^p{nR-( zw`|kP9rJwb^X?aubU@F$behoiRrvZx+qlqC=q#Xq^b`h5?EZYRJkm(=Etz=4*J z40`+bA2{O~FL>ccAiT6!$|SzVpA0?)>aC4;|R`$TeF}{dnS4OH%bG{o{Xb5kPR50mAId`}f($ z-v8bwb*s=P2gS%ZJUCQ8{aH_a>rB79AKFkcas87DfO4&q^t$72C(89-{^EK4Zq;3Ll3s+4dN=n8;h*ecBj`r?*BX4`# zOE>hZ+2Fb5GlSgTb5krfgeRT!2%7f}+%$5aal^>=D1yO|=axsa&9iUbjom2lF+wn6 zPUOy9giX_`@UNd%vpB|GS)9W3?*fh{M#OAUHHU`N-8bK7Ia4kN#_O zADFO;Im4Wt%lMY_@!?Wj#q|sKcDHZ5c6{so8@fP`j|}IZar)T@KYRbJ>kijRsKr=Q zRzEKEd({;m`QRh2{OE^Hd;GJXyI)g1B9TIR{Px#BYw^_vR*&GC0CPwX#BK*ERTv#! z;(l{*k;h+t^6oFa<>#w=ZaQH#AD-dBxc}hn88+H?TRp8nUa`RY?IedZG$Xbvqk?bdC&;BTXSzQJRsX51`of7Chu zc=Cl8U3%M9UwCvsNY$I2J#_k$F24M%i=X_aYSsE1M`Jx)j|N(CVigKafBgO5edA|7^X%cleH*)-(5WhB*AWus?v#U2Ip!nqqug>gXcg0 zx$imS!i(Nk&9Az7JW5Mkt9Gb@dX0w*1DZl%mF!%GNI({QgYDqn#pcLvl64V60ww|Z z80Vd_fVX~BFfs)@p&vT*!0orr9DMLWTD|oom?cm?-Z-}3@U1NX%;Dw;BAw5D{PJ@j zyzREt>${N$Hikq&zsZ)1x>j7+Ux%~iH#uNNf(Degec37nGeOPHT;MD0j=Vr+NRv&h zNyJ9%X_5~=wTMnDL#J=N(?53yquksq&?qzB5yUOUGjo5l|{xCdvn;2RKG zXp`*BLh+z`JK|tsZ%@-gXLREoA%(3w^D#nR_sO{o)DG!R>p(Yrb=R-0Z_ zr#nRxt72}Um%k6wq+KelZ-ODYv70eV_T>Wr1s+M}7-Tq885>wp?6#jDo$59n!}^~D zEt+}A;pA-X0_#UI%bQh;h^4z_H?2Qwveu&GzM z%S27mBvC?|6nVLT2$RC8WHU^TY1S857BC)d*;LC~fykVkS(B<%665H$ofi++-+5Q> zoE?{s(~udWZC6zD)ynL-8<6LnHm-JT{px``c3#v|?RnG06XxdjKlk)UExzO0FN)7Z zs1ukNB!Xm0Xn?ig)1JeDc3P3EF;BL)-~RePDZVWs4VPeP3qe*8?dz&ggL?$x|%m!Z$>>fO{XU!s5v&D zxMO_!Ip-Yu;zuvvG~4Y6DTozwpZLh-|LM}FU-llD?}3p2b76GuFb({`lVAFZ|9aAy z=R9GwJe)h>)RV87*|PO(&9FH*8V-zNum~fzrejXj>oQZ)^|yci^Dq9&$3FC`rJeV0 znyaebY`-U}1~UbbWPcSE2(gu$UJQO{R5wkGdr!OU$(Nt=)F=Pd%!YM0+DH%8gH#I% z1P-zqBtD&2a8w6?;EV~Il@K~TBy+?NX7=6qm1o$Y!!rwKucD3{6as}~(#m+Q|G%Y*SNgzv^drya;OvT3Xu{-PO9T_tx zQm+(1O%8QKWNJc`aq>j7se>Q7=qU&8{Kz}j-$of-B?=dS~><*)=gOIx$db7*<9XThAs z01#_q3fZvgp0Il1UfXkUjaO9jU|c=@l(X-<`mWoKzh`hDR#8wO5P%!z=R)}G6`$U4 z)u*r6df}6w`jBZ|vj`?dz_-8t4+8B3YX35Mmb=YK)I8Qx%#;J#fu4_g($R zzp!xR-tE2A4a+n{lAa&b)dv<&x#X=WuHWa~d1L05==V+M0=StYgu|CU^(lY-#mg`M zc_LbLRm{yq`TVCpvuW2IckS4C+}b^=bzefgsw{(%R-cH=2M;>Ed6Uy@TcJUD}$kTVDvTtvSv zgmFqb9*z!fI{nPs&wbi+|JTM-&iF)X(nF(VZ3N;01cJi2sho`Ap$5MG-qo%H4hv>v zon9Ai4vI0@^77W(-}ByAu3MnF)mysodKn}UV=(%&iVf>KxO-0nVnv9GrGdr=@85MI zfcwmS{EgsQ{H>lbu?Uv;-`~6aOP_n>d^bi|LIuN&8d6j!5_W`HoY`Lk35>CL%5YM~ zB=7|cII+63!T_dZCArPZA}=6F_8H@t=v4mtoz}y&wOh*C6cDE}a3}#PZZ1xY;i&0v zjjKjK^q42q{gJ@}KoYQXG?tro-nWq@`Z)R+P>^|0gS57+iGRFBwXS%vbKZL?Uf2*| z9-@RgWXl)BJkQL_`&Jm7+>FeOywLaZ_yQUK8lA{gsHPxR4~Fwrr*5YD6`Nj;wS^Ik zf{ZwZu`?xwgG6df?V!mJvX`7#-Pqb9#+_ZQf_Y#fL*S7I8W|(Gphn;^glf+4nub|Y zUh7xzyVEv0D?4pwPRO=OHnqwP0nC=%IjL3|q_lGWD0}SlHBsO@IoXdJ7Onw6NU{^6 zbc*1Vg_uOvx<%UVK?GL(oAZUexb%Q>4Iz(t zq}}bq!2*Gh6oMd|IWdu#IT$Rt03kLBaZD02zkn(EbOBomzQ~eVP5`M@tX7%j%Xn_6 zo0q5g);I~V1B@Kv)tcMd)~XkgyQ@Rp(Ws$Lim@h)O;MXc zRiR0dQbI}zEtI7d$hTXy_R;^n82whveg=4M^`lX!?*&(a5H}&j9+Zw?X^;?v=5gqw z&p-Ud-}@hPgNL?vs24y-P+^Qi+8>5fFZ;~QwzJ<$VPOzv7NL1e_sy9AGUT%T@8wIL z^&S7XYTc$oV;#96p-Yht?mRMg#V0=VVw&mCG@i$DqyQUP0e7=ceP@M9{&up!q#>vZ zo4XEFCDq%i^rXE_N>hG z6mcHJ+Q0cH@D zs*})(x`Ko~dfvTK3;=-Sg^}CcY5P6R3TXY5cHodnJBlb{m+ALVX6>b&pBD@@&E9{Oq^hBG zC7RM|j?=sL>2ZdLG)!cgG#4$Lk+!ee?A(MBU{vaXl&t4X^n85M*! z2{B`=ja9W2I1V!ns;Me^g}OkA2$|SebJ1+HSq-fogA21D#yD!(4(-BCES8dXO|4=H zH5F^8sfYGz%T1s>YHM-EIu#l0qwaEuq;;0iz2cpLFPgT-4Fs3 z5ve6gRzsmMIJC8N`cXB;znh)EyFs- z`^yKm2jfuF2q^-IE&1a1UF*(#)}N?s-x=rE8c54g`M)!aF*{V%H=l6Q;R`Ol^rk~2 zt&JRM)Sv?OFMr>MpVACQ3oM+99HdA~r!@c%0|X+#$(h|*;7meBY$3ox9viVszduti z9X|K!fBeT^`oJ4r|A+T};qy=Jb6nSzs!}y-NAqL}AO*wFQJ`;vfN1;2^>8#hci*|s zeD+&j@MEujPcf=LN zY8xt=1<%Y!YmS_D?dx9s$M<~XFQ2hv2hS|b8!#AyBpZ!`8dAepUUGmP!nsQ!fX6D1 z%4GfW0y?3%@8xI2YR(A)Xf-VUGF9A~t49Tr>?| zH%@`W+$P7Evr~Xk2zDVS=p~f7ua^L~-Ha;qBVN+HCts~QzOf)=}@ zO}!Q~6A@Vv@lB0)vdzz^%^S$pNF)>|L+j1AY}ZS~Y~;SurJ2I}hL+(!RYh|iiU@#lH=CnL$*1q-6{_NK-y!c7qLxep*$v8mCA0eWOnZO(X%m8)o-~+q(?mO=6 z-gDPoXYGGz@Al!+@)}L4q7LcI!u+1~n>OFFdCS(Dw(ZzauUWrE0W1L+B&fsSAXx$B z$iFl6k2?$vBnsf`U_OL|{b&v?qlY+K9r?nO_Fwt?zgZ1;o=|ZLjT%S{i31MG!oIcV zJ?o9MaQZcvIbnzpz&HY;0HF7Ow^$IvOdY_%r@!z8fB61?c>6hH^7X--dYuk#y!MvG z8?UG`0{aMn1sIYuTisb0N$5kYV)R${2X}qpl&}8r&%AN))h|EdDOM)!Q|U2&%wc8!+#f#oAJi>p=-$6Ol)PBp{3BNri> zu-03pJ(tMZX&YNv{HkL$1Cwz@E0Q~Q_Dy8!#zJf$K#Z!XX^8cAQlf7DjUpB`lC$gj(xa8JPXFq`4@~DE#N5I>be=2zd zM~N5{94I14b7LW~5JOFBY;6%dRYEWP?Zb*jfl9~aC=2C8-7nI#g^#+inFcEP z3f>loYSkn}sJL<3&JPF{i~^+;BinIHpS}LstDf?hL$=ttS51RB8H&Hz&4M$T5r8U; zUARe_h{4Q?t{qwqkK1(Op?54UR=3rMrKbdiK{(?k=4Ykz*^ga*>MdXS^14&cy0IRJ+P0LH4xNCZsu@2Ue}*+dEwg&Dvk z&?AH}@-A@Qg%5rCcYbqb`QDQvaUkqPg+4%YSkmFr%p;!vfzI~F{q49~JRD|14)Q_g zTc)^_>`|{D^Q0%-Xiu)&Xv$2yj{|M&~fz2;F* zddeHuop{ofp3>g&K#eFiAVzdAoc0`Cpg8)o*e)*tBM|aW)upZ}g1U2%*oTBD;Iwhq z$N%Q(*T3<#KixZU=SgRt+zIP9N02ozCs3nMU50fS)!HtuzgDqlpCQZzn2+JsU~zF( z+J3?b`vE9Z4%#C6`qLJ^m9-`@K}Q2QvU~T2$|0VGZV2XZBB&cy$39kBM3XY1C^$%u zUF45N`A+ZV;gj%)W9?GM{{A%cd^&h$S}lH*W}vjay~XyH-E~N)G*GI?!|vJh>koX- zITuyG^`$F1_Xoml!@W3j{n{}NX{IxxZe*yMiUInK@V@jgPK9YP*4J6Z%C4;}SoO4m zAMPBDJA=LZSEpeegAn3Oe~cg_WVJw;R{g^~*XSZL-IgHfJg2HG?Oy`RW*KH zC#Hzqka-N!&iBh}oY=}}%El=zc*i_2QwkyEL_Q`a=9CwdLh_r^ETFZn0XckV%Hr9c z+v(B7N)eTdEiN{|Ts$yHxF)0ElW?DjV2`YIK9s_2(k(IzTH8torDzEXqrgNYwc{uz zcGFZ@PF^fC_B>uG_QazW@uNhkBDFj6Xo5L8!Rn@oF~%X2m>uJMn4DJCh!y};au8O! zAvh}kVEXr4_ktF5Ff%7}2cP`P z3%k#~@J#@SKzF|#4tt?W$OR6=oEe;=i?Vu6JR@1eDCfAbrE`oEuh-cP&L`@6BvfUW=HCqI1r-~Gv7{L1xLeqqO<2Y2_7 z(u^{C+F|NQpv7(l>gM$@-xLkr!f%@f`|iHWKXmII$9>>!Z$EqW>czoX=beAx`7e9f z>z@4l@AzzQVe!Fn8jk~u35WmZ_x`P(frvl|a8j_0Vf6q$XhN`kC+@!H4Zll=Z#ao# zH<&p%^#Di()!JW@1Y#iwYAPI3yKm)Rc(f^>`^f_k`2-ylCqwsi_^&EQhWz zl+;NKESXaHjT!%CH$H8#n)c*Rv=8l#`k2(fNgyi2#Hm|9xPLV-jjP~5sziOJdoZa= zYPAegxe3CYOud@SxeJLdV`IHS(ylhCPszG$2;OMl)vAZlRJ4hAI%$(n9p|-PAoTt#px)Caws8T4lV5)T&w?Rcx#TK~4UjmE^tl z*sWv{NaCs2Zkl=hZPvhaXJPW*i_oss4_HcFc#hXCKNkQVLKwvmMqF|ZazGN-(;5_2 zm9qQRV>tpb#vxB7^0nvi;fiDckdS%)rW#B&ti&_Z%5^x^8JQ}Cb^7zrW-pL%jSQli zd_FiAUt)z_z|6_oaZIx4IsGqj@`_oy*tPGxrB7V*JW9O4p;Ci!Lr%s3C6nL`TOO^V zy6Fp*WLJVAN^SKhK5^S=ySH`cbm*D|#+IpTo(zkDdmnrEdoDh(>+X%+*k5<;r#|_} zpZu=xc*_qy@40XP*gM{J@nGNXZM`n9@6T4V-ENeQFuNwIo0=MJsI~@UYcSG;ktV85 z$y_N!=DGP!wK!j`($Ug!SAP6sr~l-uUirH(d+Jl(`+>K-`PrQij}s0-RsVg60f=&t zHAj&301S|Z4}~cAZ9Q=FU;c8n>kB8YatUUc{GXUHCei(}@xGb!|I=%lYU4fBU!MZa zWCgri&Ilm?R=z|BaO7#ve$JoHEp`s6xf=*EcInRB_AP$m@=v{tW@cy9G&*IQ+&Ae# zl+p0;DznsSjChy?wM)jBY^TsqU$uXfWXO(RWZ|WXFWRAYIH(ZV(`s7KljlWe&)Y@ z?>ioP_g_8x_zm3+k373CYu5~rd<2&UNep$d5Lyy+tMz!-2M^;bcPL~AutXs1;y~?3 zE_muQ-Wq#zM^v?dTK{!402mCGaq!R~#8CR^ZPT;x#b&yF1QH}>s40q_tXu;tVxvi- z+r#Xf(b}nw0qPvPz)#1(ej|v?gdf11r0g1rk*M{#6WNGOqarXIW3kj5HPw$k^6^Jb z+Hzd~!Zq8MF&=j;Qr(mmZuHDF&TV1`O+;c-OoLW9SDpjka0HOsu-qmJIwsBtQuGG< z4y~fWu&PKfbo0*q!q5Ya(RgHHbN1AFx0yJT>0oGQ#im-d$D1<_nOnSa8xCX{C%dAX zC|-0k4L-FEm5(h-vXmVYM$aExVyM%KpUA` zTKF&uATgdGSb)@|$RaMe%OF0r7?)y2h@^CgR&*|=UKwfGi5s__Dm7&yV%3$gmb~^yW4WuA$00W95J^*Pk(HEUBo{wpAS zXq6(@fji81?74JLb7gnUW6u7dtew5rgV)}qNJK!5h0$&Io?AJ3OyXYLEk^|U+8bck%x#nF7nf6IM;j@Kp6vyIG*5D)}TKs_FE#Qyb5cfaq)>wDh!I$X`)O3Kb4~M*Wc;U?NdXubszW2k=|BjbD@6X_P$dOh4+ z-+?uK7QnQ$^MHy7N@PdI&4~JQdmjD7r+)Ozi!OOfXWhCRn(=tqhe|!f8tj}TkFf|T z>kG))kh>BJvS`7?^AN!(m^mA`fm#zoSlvi(0Vb75)$KR;-?r`gcl_CF9{lh-9=8|= z>$aaeC!5y_h-x%Spg4dQO#zuf-4SPI@u{l}@BhRRP;VBBWkd=%aAcg;ow)IV=e^>4 z-{S5|%>R4A%C`;$?3rJ9aM#ZHcfIM2-|tO5Z6O(y#^H?$vjN9M!mPhC0 za0(&~I|SxTPQpaS4k2Pki^C=IHbs(JZgQJ|=q}_g*{LGxcKRSN-uKOO*)J-pj2vT%yP_Iv4zV(T?eb*%%Vh3OdIDfVsoWxTMalFu- zkOC%jF8m$ve(yWp_N3Ko7Z06&&IJ!9w;@2e zTFw>5zi9!Wu!5w|cOmDLuUcZHW*MmWE$BlZ`A@@Z|MvUWXtv zRh$xx1y1Zbted*(@815{i$8ej%U;0d6$9G=+`k(vl(HB2?-ie!R;gm`y50eKyA<%t;9shLeH1A@js>zm0hcX~+I|TXKpM>q08|!e?l@cD)jtp{` zO8cBgMOea*fiY1LgIP<{n-(#)1x?vyCG!9`Ce&_Yh z>Slr>lB8mfYsqxxMk_aNo0_Au8NnncF}Y2g#Kr7&)J`$Ofl!AyeL26YEsv1KK^@K0ck}|W8&|0X}PE)}_WJS9$9n&31I`cz6ap~$?Hjln` z_d)4)k8rZ+bv++q=xCFKiM^#jGO)9e9F(DeGXBpX|)?l0zW6xy5R6@&0vz#mjATSU)Kth14Lnzbc%MAfF zDfJd&=iuS}r~H@i`=MXG<%XLs__^Qw?cZ_tdm12#F#fH1L;@-DI0q;}(LgBWH$5Iy zGQ8u=eK)@I2m0Z`b;%dSbq28!5Z4&?meO+PB5Ex za2r1PdC&dW-@N{Je|qm7cdm{VgPrKek$U0XfBz3Z_Q;DKb%humhEVp@e8ZPim;hPb zJrSRR0B`E$vo1LAJvV;xV^0~?b+<=>^~hLj2?sYm@~oRKc*ZmTblpj(T!CZ{HN!?h z4heDc7{o2I-#OzV+V;A)+HnRfxQs&+I%Ct0#%9bNW<%Hr3mYX?qs1e)er3lkfBmPw zvF|ew(h<++!@!dc5^LHQxKl2DZp>9wTUg z2FBe7hl7`V|Mz|N*)RW|D>Ugq!vEQ>68@z?6jm%b2!h6Qae(rnbvPmiBu(Uvb~(hx ziXVJhtXBe73q*&HvN7cy45wp7RMWbE=|bS)=Ks@SIRvagW!goKIdPd8f1TRgQING> ztYBHC&MP~Ao9;D!BcWmm&cQTyeNv$0ohic*l#v{SPN+N`T3VI%AMRDeFgIv&kg&#H zXQ_p>v>gD-L_IhFAvSPSRgJ_@=8%pmaI*bTvxW9(@4vgT6DKl@ZXTW7ge5)PF>MjG zA!Iw>3h$b*f-Uy2val7G252&xAP}_CUbgZ1bb90DJhwaCHcq+d0@MIV2n`zTw2xoN ze)Z%Wwk!$ZT2(7@us2O0N0`o0pkkAo#xv8D@X*`|=2F}Q;h1w9iAaudwm26ZMji*{ zuFj|BC zo!cv(3w3n}QqQ2HGtiK5DC)ua(_i}Mm^teP>U3+8Ik;)ru+hIbr?}RH*>%Sqc=`)o z^u9m&)!+QVRWZ(5QmmSZ;mXUeIBwT%_nx$I>-x`W8oU1=1#B9N)YIUc0B0hgNevb^ zZ@%`i&w1|KuKvhJURay<)}C@C~RJMX<9-aW2|iC7#=6!O_OpdH8gWS(Dy z<3{96o`b5%wE_X5?hnb`o1O#R^=7olGBeY`k=>a9Z&g%_9XJ%B5l|r9cVN^!{#j4H z?Z5rb@4m*syC*aCf2{(by*xsvo7vr-T>*^)LdYCs1_sRth2jGNA&qMZohnR+Bd;vX zdCurlLb!HuXi=%h(*BOJ`IQ{>snoNFu@;u`1XF6mVn8q<$$92#)z^9X+XcOJBie%C z;rIiX5@Q_|)%$gh1@N)TcApC9VE`0@rQvvXc;HZ{DyRu(LUKp!c0e(V4N!Lv1V%e9 zv9dt6sALjpR`L~KJVC?)IV)g=nK0SeXP{3aX16BgBwDo!Q>fvUoxF#<(RLQ0dga(j zY8S~6c%0HC@h%^SsbjtJm@q;X<>c3p=kMBPEWlCb_N+-G2QhaiVNM3^w6DJ{uvUsW z&og!+D-nvOL?NfpW#)oqg?w762g`!l7Na6{AaZ9aj!VMyxorRY;anf3L*y%%=luA# zB95%5t~W|4Rml86w4VXX;{kw_iP!>&HKi_y3;`n|a#xK?NvA%kVL8iMFn@a$m5zZ zj#`@HTS6!BhUTEhIs&w zSXkX$c-#s8$PHU{>*DH%X1l#3Gtz0gU`O%}%o&`_$o&YJJ!DP1Y5$(}*WP`{%$0ZF z7Va63Bvb*Q0Jj8zA?6kvkZL||zQ6d^H~!_*V!yNW%dh`~Uuo1HaES@uY)tOA>}G5^ zW7Gvq3|}4~*x}X7_x{5xZP%5L=u@aP&4J<=UM+(f$4GtHKjGP5>Ti1TJGH70$Ieyjt@;qhmk{r<5woyCnC?hc*KzR~h1)oB!o z5ZF@{oK%^Ws59UUvCgnNxVg6uwOm|)GwZ`BBe*qI9%UZgI1BHu3eL^u`#=AWkGu2l zUjK{fhHJK*u#smrUeJ?;RS9GX&Dfz*!6iW~K^#b9pxf(0yAdDyau;uT-$6VuRQPIO zlm_T)1WWY04lIu!_pGPf^gC~U%lCEX7jHGQ#Q(%XG~ioY0rX~O5j!2!M=-JLB>*D1 z=XSUrp$HvrY8qBBuz+N*5rd)SZ66S!iY~U|`tv zm-io>V}MC`;_+1&di`$W05Z8PgK1i?JBu`KhIUtNODb{_;pUzCFwUf2hK}_)%h&iFOr@2iIEFaz$@9R@}1rr>P zd%H&=FIKzMG#&m1#aKQrY+zDTjcO_)Qg-1q?LzUCQVcORs%ZkBa^bqfGE^Hlf3bTIJ11=mL2%o*Y?6@ zBUBrJfKcu!loJuLC)JoquqSOjF+KgHGn(@@ZoPMP><)c6o^4VJ7}kBWA&s)-R6q<@ z4Z$F@BFzFvJ89MS2cNUJ+kN(1IUY}BWNJRdxIQjqg_u=eN5DGxu0L_E5dhpXvuJ3%u%X@KQUUdoJ zLy)ux3kR?yb!z5LyLZ*`-}@SqRS(F_jIG?g>0ig~kmG?-yXo;~JnG;%k9+)mpM2l@ z)~}xFR<#*IMcwzk`vZ@8@%O%LRj1oMV5G_@y z)7=OnJ|3&7&i1-}^t2`jIfNCE28I!c0vb)JsS6>%d4)b!v3y!TR7cUizI^|N0;Q$GPcP6#1>X|f4 z;924Yg0o0%s#O~mEv=x?G$c)dMN)`iFd5TjbaOH@h8tVb4(DT4JFzLXFko_GQcl)2 zSB7w-ndI1jNZBEY(bRC6ZLEXfjSWY$XK&b=W^cYG9!d?!tpos3MxQER%Qc?6c1!cD zM?HFQ-o~x>_Zkx)jpA@TU>Jp}@lH|pE8Iw3*-V+7IS_-Ab)3fDG|QbP@@NZ(^fRYl zbnnI6PMv@K=RdJ{?Vbla-MI*8PAhQ$N(xh_HS^uoum9CwfBBiGpZUehzT?FoPbm#U z2>(VRz{T3@guRbckQV!dxQ3O z+~hN>YUX*kJCqW_w^;1=zYUThAh~SE84!-;3Q zcfb07{@1tuz|Z``Uy)Szn3{6n$q1YN3FqxwHv%An0+^j&z=n-m#yfAh6Oj}!0xX~g zp<{+U%`)~`jZMyI0wE-YkH=l^RLcpjULt?RiOG!}iZ;VO+rP9Z;kll$?WbngZD34m zTWS{jT$N-$EOU@VecHGnB02+UNZTq{a27S4n`LuiW}H5D)= zVNOu1R8zJx61y-ba%FSQ&JqVxUIbCPA}LhSycC3<^)4(i)=n^TVk>A~cenOKo;S0p zVsI^Rm?0l;)yN_ZgWL!?45&Rf1q_9{=}VM>3#S$v&TT9+K-x5wF$WQ;A*ea`T1>U6 zh$S(>yvd^n&J;&S$$v1{Qlx=eileDTDczPFctvFH9NY!Wxo|T?5Lpt_q+>ayyK4E2 zRhz00?Y~!MC4$w!k>E|jdUW(VFT8mC>=VwsuQK;~Y0yaoCOAcBae`}y#!b=~m=n9R zICB6&8Oh)vDxEH8M)DpZc{4b|k6KuB;5VNBqWypUnU8J%;9WQO2de_A8eny(P&UM= zhhW(HD?j~Tf8(sjJod$_HXV0+ZJMeUAN;Q<3owi!9s!GJhWC@ufwhCXKlsDleP7!e zI0U65fC_>WAPq)oVR`2GCx4<^cj0?9c8+kIfe}q@!1!Uh0RB%5{r%_60P=^sLjrdj zU-YymfBBTNPu_pu4Y#kJiCys;2rjd4fAhOv{LB|V`%TO^(y*k$Y^4}FjdZFWsyK^b zUG0A0z~WsuU3=km*If6M8?XD?IrrT2KzHB1y>fVIP-%_m2_XWZBjApJh(Waj;{?75RqGT*Dln>TIN6CSZ+aPEcYefWZl&wKy2Q@7p*;=M~p)Oy+&_h)_FU(M8; z4IQnw?7941Prdc+Z~XD$EnnHZbzPWUfBrg|U!TBq1ZeUxBH`Q}CqPmIA^~O>aMSKC z-g^0AeD=B_QV58B0bvYy#3-5W85|y*e$hp@|J>_-<5lNebje+&cEphv|9`F%^;=q| zni^uKGdlTi-{ke;#kyRh9e0&lqE_ zwf5eptG-fQ+Dab?gf=0x(i>?7L^=UQdK9Ho@rqXz6-8|Df}ntM5f$k~nvh6HLi#}Z zgmjha`#Rn3)|zvS-yd_Xz1KM@lvfk3_rCdj4xv(2=j^@K+H;OM#`An1Fo3GtL*8j+ zmS?4I`Kx#+0HZ_Rvwm>w4_DA&Gws&hROp0!yJjQ(z; zl4^D)>eJQzGYI0Tn(O&{qR`bX^ZGPQ4Ue~_*SjQbFX32)*)uU!-N8(6enIkRlLB#c zQ~-jYidIp?(=wY$BKc{pE>FQXP38eL9R{i3vWAzQg)8rU!J`^7{yTOxA`B<8{-qRR zLk;~&1y)miK8DV)g4v51iw83Za6AY(m6dA7ra`=A!HAW~Gm&OW4ysNX_awwXnh^|= zQimu6&6qjVC;s3=F|vEs?=uSB0)TKoO$ezHk!jE@SQynQH2%r2DUp z(UKUkQ8a-{w>P=P<-@l>@mcpyO|_5z``f-Z!R;JswSmxp5YTF8?yh^b9rsrs{G+$N z>yJP5-k{+yNbJY&0!W`#-v#;kjxJvH)WP=4pS(KLj)FmGA*TSQDfBs1I=yxK$`hae zC&60#q&=k|8MRww$?2bd!~%f+lS%RlGJyc_8mzry-H{i*>=mE={dfH4FV7U1DJ#W9 zE2HmSeao6FF1qZ3$6xS-PxxWg&8JtiU_8~`y=Usi8@~6X?|%2H=iPAq4X1Cv>%Li~0fLxYg1?P}9h^g-Mrz3*_6%;-g0)${-$H*M4Mc#1mp6%Fn$2R@y7cP4B zkU-0LTdD4?Fq^T{t2WnNGRcjV*yY%c^KmBKaxcjn;H%?7r#TgIJ zW!*-Gb91PCg`f_3Z2KW3TuAA26qCS0HG_Y-q{3G&Ie^_=g>>4;1HhF>mE}0RIP}zR z?RedL-u|W6z31J3*_v8;@35+>BFp~M_kkMPyZ`b(RS3vL+TZxpUqAPqKmXc4otboN z;+dW!y3i?xeUCS9c?e#;_B8Z*^9TjQo1ry5>Dwz-9IT*$Kwu*#i*~7{pr2S$hsKF~ z2?91z_L@){9;=->&DbH%l_SP^L($ws?Jgk_CUvrzF$K#NAqMm;3-gKXZPrn@p&3_v z6d_^#d%8?(P$ODdk%ld3*>kZ zH!k1O5QLbGoK%28g9@uT=dECn1%@KwfeoQMX2aJ12mg05IYuuOz2axxfE9MgSum9~ab1q+t7wBS2( zU%lFYyFW>sSP3?JyZ>Z${5_vUD!V zWjDZwoFwyVOzNc9TRl1ViSK;<)W5&umX4pwP=)}f1Tljrg9lsIp1Svo-@WXDEvKA* zCyYEZ)!pqM4UM&SeW&d25}Db zU$AICpdEmuj2N8w(1%>zSv51P`dv6MDl=pZ49U>Tft%+Kpugr66kseyttp0!JuW(v zZI`=lykE6A4a-ovDQsnl-L4V6o2*WCpiHd_O*31GCsAm<`H#Y7mZ4VfZyOwo_aZZ& z7>)e*~q0T60mIFaU@DT3wwxw$D0CiO_dYe)&$(Nf7SQ!oV|LPm*Z zNQutYC@@iXbYbPB+@`@*_8V9qyd2d3{ zi~yLEvM=J5wQ^A8rM7cpLQzyoW;(1g25~Usz~nXKJ}rw$)<&pNdLL4Y50_^^94-8* zxj8P^gVaS}(~VIF3TgblR;%7?1agR|VXDU>DNWBp8CuSWnVkCIGeg6hBUFwuG{9hy zQj=!lenn+tOhiPe#fM9Tjj=;POWt4Xm@Ek#Y9={`1>!4+VMj}!ydnT6`Cd6E^#jy|=%2q?QOpl+OK63iTjVtfE^RD*G zPdK&zE02HXwyA}FQEAWljJz|31t-JF)sPp9uC*30x9osV zN7?+FdGgKf06zd8vh*uvl-}FShD`^b`P}Dy{Zk+O(9caxxe4_FlLg65*L?4U-+jxw zK7HLa*G_Ny!S+e^m~08Vm3f<16-=rIZyp?Vo-x47)XJ*DF!(t0QFt>1W(0{{DJmmq zkI4cT4q4lQ+8L3s1CgV$45-wjAV;mKOa!#@#&2FZ^X~8d%*P*b!fOBM&fJP~Pn{{+ z8v?JLBsi^5l?EaQW`+cT!K30K)Y`}0Z3LT^1ZoDFMsCKFTUfdYqn0d za`G^c1$YLArr1~tKKziU<5U&QxeA$&Lw0Jl!qn=O^U9QjN2auFV{RfBuxzn!s>ErT zG93n%#(ce2i{mI8`2Fo#DMY6}!5dgpcVhVoG8O>jmP8FN+l-cH6vW?mK9H(Ui&9QP zWw*bgKRfSolGt)glmbi9PCCsR03rYc&hR!)S&em|V}-1n|tdDbzT z?a5nCJ&1)thaG8^Sx?z~rsfbR=hOl4s*Z$9=UizaiU*q^IrT zwA9CL2{jTN&4-M$Y)Bk!M)kPJd*6z}?}+u46ev``HXP;oj3hr(6O^RpIEew3OcTP9 zWdyuhRwN~?bz&ee8oG*R&{nha)(rJ(h9EIJAH|39x;2Y+Nd>ltf)vgf8>ZT`SNHZ! zU2*&Et6uSta}P`@g_6A&4O!u-Fyd$rO`|Lui9nU(=Eb7|t2q)|j;^i`5T1epgbV@+ zlzUjPiPrpg=Ju`oov(dy`e2*c0CXxqok253HB>wHlvD5e$4kER)b`5NJG{ZNW%%I- zgS~>I~`*w(Ven;*S!%Wr*hW?|Ryq#YV&i*Se_rAiL^#r*Mit~~P(o^R8u@206~ zZ&*9##ajXjm;uB~U}i_x0&qhs@Lxa}TjXs97^-23Oq@G#=dGu{{#j4H@bHnjV@N^4 z6oC|reT2+`rrHH%5Q0wxM2AfpfOdgz^oR~EW;^B+Mh5q!xLyPMU?A?Ft&U@~i-m`O0zJJHze9*;Yr!B6PWo#OS zsE!zg2ta1N9%0%sJ^u+S@sg+X(W>SUd@Kx&DbAWhd=9b+#%wi%&tG2QOP4I-;G##T zC?LczD`5mIlp!20F?a4WpM2jt-}nC4p84o=w?X}UWfmY=w81_A&yIUw9Vi4J0C(>hGsNB!N($L1(vbf^f5mNs;gpiAqff_hQDXR-YWz9zblh;jo%gH@cB^?mI$1wR1wfNGs=7#m zeQWwVKL7T1f9EkIZ3;33ain3JQ|sH7{S(Lk^q={O6}zN0(VJa4bxxB&+a97Zb>P>3Ffm6I%9f#40o9_)Z&Sz5OT zRY9-4GV33I)+vLt9(LN{)6P2OiZjmIde!D*x7<9vYWg5|3I!v8OaTpuRvH2V!5l#f zhKFES$-#q%*4}%^wnts~uit*@H@|q%*1h)~S-EzSijFw;6fo~f6rL$7GAyX#6JOth z@7>nMn_jXGTQ~Jlbq5d)P$*m{M^S z_EN|8t1K=oP9i9C#37H;1*pc88UW$Ind=#omzW(usI6UN!lu@?MKr8;mV}5bR3gs% zEmWZ$yw62s#3ula7Y0pMy%E%?M)D@~ZM`usxfXTAa$OuTX%Gu#8H$35FbJ(RQ>%t6 zI(h40R?)|={kA*qDXUv26_b7TrE|`eT3_pQ4?^l#n3}8k0HdI!^eof@$D@q_nw$S} z8l*0BE;y0ky^n2iaU~J7j*5=&nXT?92(wqO1=2OQMtWu90$5E9q(p42W2kj>U1Qst zk|3^e;-}C68O6{Z@iij21{bkN6++0gemy~R;<%zm%>q|QanQu<*~Lv(L&%|UTKUm* zcS)h6CI%%mMj}QQ@z)_ZW{K&HBhZr@)?=yF? zgGkR$dogbSwTxMY+*Stl9m=fkW~9$#eZr5t3R_apH}CoK^ihL>jX8@tNvBD(K~dA; zCM(mQ*m}BtZO?Xe&7cI3G0Xytn94ypb>(H3zWBUnU2r=YWnvI@&S$rMiwE);X(Pzwy2AegE1`$L>%K zUGFO;k$Cvils7>Sj27bo9RWluxWULMbi12g@ua7G^Um*IcZy6n@yaO5s9^U6VRF90 z+fREeeqzNYgzg*!4kZyB2%==!=CzB|ay`?anl@fhIIcx*wg0NvB23d*52V(JzU`ZCKH2%3ICKR~UlhL8P0Jvtc>i zJv7_Sj6i14lzA}%i9uFPN0~kW?>}$tA9?N@>W|H$?bW_G=9H3H52QF~9Vq?$GGupNhw3$EQBArvd;%B{BOEkHCjq zL&&KXvn9=nPp~VOxEY}?$`WUwj*_n9vJGL>1*$<=!t9ONt4Jx41SklWTL^hwAS*%w z?6`r}N`Ey6HCK0+f*IH25MBCQJ8`ZYcg+~faL8;8M#J(kO#J=8jn2ckFmJ-Z(x*9v zA1N89(>%1fC?>@Vjutac%eocg&IB>l(c{gIof)g3Tokfjy7&tlu3tPNh2-$5la@I_ zH5l4C=bv}iC%<;_Q>Z9*nR$z3Hhw_2{+L9^2*zMCXn!wr@2-=M-0{9IwP&wCxgFNJ zN@ip5Q2+uD{rtqk?pks7yI*R>qi*GPy9B$&Ij}k7k3K2007V9}dHC)j&daGHguSbV z!(G$4+i;*)Odn~joCz7N0I7>$JRJSK*55htu4BPuhM)${auHx^|Mt5!{O^za`CC8# zx1V|1p4|u6PEE+fq&RVb(4q|DfFTAp+pBa~qQCl>74wgI%3}{b>4GQz!y_Jd=EZBb zOzi<#4`uLLmbq8W6kyJrCxXkYoP_xfEab3In1u`!93Y;!SOjDUc3p!E4AKw5j4HFB zUZkC=YfZH7y6Vm+{>3}~=v_BmdF#nK(QzCGFjACYs506lpo&p&A3y)H)j0FyHoows z!?@(S9%hY@PYMvCMV?4(cA?Ut;m~8B`qbUO@a}iL{;@yt)O!FN_8|l(QctfQlz-d< zk8~ysg16Sh)ZDXQ^5Vbw{cErNwUx#zJVNxW!vHl@8R6nxcj6JNH(>=b3?0xZ;|ypq z2e|`>Ca2b{Vs7V)rrsfCk5dXKSz>)@Fy5OV{QF1KDmR(?@dK?);8ClPYY@;l-`(Bc z?w3XiX|9{TD5cunZ&O?@jv6i0jhyzBNXMj_br%+MYRvU$+|Ezz^H>06c{X0u0J31Y zk!j?%$5BPou2_$0f`$=qe~B_XG5_m@j*g;>uz$DJ3t&_nu(D8PYBHM1r>quIa|-zA z6^EM?=bw1u>HfMa_GDSRjVpI<&%S)e_cy-ilymlCzB`$DZo#3l00NsQ;Sxk@f>OP< zmghk<#C`%AoqpYNO~!J9VX_Z$CQ(C2snc&WSpBnD zL_87HdtX=tmw5GBWVu-IA@`(O=R=r=k!>|JT_dVaSRz0u6}qESZ6lK*b_u*|-ZvI0 zy_yIyLI@euoRc_is0DCr%$7h}b>S0KolAU$`q_yALfL>C_-GOFTyr#1x@B}}jGsg2 zT`c2`wxg)|Z?wv$&1j+>5d-vV#1ABI3{qZM2E$VjY!BPMa5UL(59GTVw zSG*uQc*llTE>3lTzz#t(An)0tP9K`w^1=^Oe%w81l_hvG3jau#&GSe7HW)c@pHTMZ z1;x&_i$}ISX>jA0-s~4{Un85I@y*p|{o?y{&^}CUm(pA+5b_@~s;HwS1PVe>h7fU< zQ875OW6Nhh@$pyv{m1|6r}x~mXJfl1olPrSJRA(cJVcfY%4(qV3kYsf<{$RNM;v+j z^Pc*($3OKkUpVH3)!UHyE~)_!7rSIYkxO+9k)O(RaSg)aI_)m5hVQMe!v5n`yDK$> zmYQ$Hs>K)}Pw33DwC7mbvm{doq?q2Dy$$fcf>n5mm{YNOhZ`VP%7c$pE-g+oJ~ zKlR~f?SA7s-u=F3z34?(!{vK?)vt`5iDVBtgz-VaRWUnw*y060`{FPD-ADf77v^^E zoS_y7q+laJ2|g2CH-88h@7{(NtUVr~>_-nM;%u9Tp1KDPO|;jpf-CaA24xc}tN8g> zXZP=^jT88mZdA<#!TN*0BzZ4rK57M$DK$Vh)C}io&P3A_-B=iGDGvAks{iE{z|ou; z1o+UB|L>Rp0RR9=L_t&%78`c^Q(;hwBTk`87K5@3<4_%nEV3-i%Ta1zQm#jOUJ{|z zGt$xKt!&D!_PCRpLxKR&=#&`K@nFVa_~jP4<{~~i0WX`2$M+S1FU=F2sk%6$Mx4De zc@m@0>$lF^c;cadS$X4zyBB5!Er*ZYbWLmH^r}ry>TK+*mdtRY_n~S|#Y&{{11;Bk zqymPW8#Yt%mKQbkpRE`E`rc`yh@qp11Wi?za4BkbLkO-OpM>QOi&5)&91P6FD(Vo{)N%`23@degajnDJnc3;4kG(c) zoqUU--YU01zUS8f^8(;|@IU z6)*q%M}GVLZ|rokX+=m)Cc*$fSqQ$k?IxTyy&5OE4tf}Zp_nWI6G3G_Z~x(miIp?C zblM9cXxyNeeaP>pa{eKLyLd=%ETD~(d2=q<6wocVHI1s{loh{xj(oIn!SZCcqX`$8 zNUaLRV4*8c4Z@?-X&rntA}+!VEMlp>t`z^#5eYFVwQHR3Sb)ck*OhF5HL-BXi9Wdj z)GtZKYn+&ch?tqfa!+;hq^8T-yfy2ejF=P-WC|fqRavZUw|g%>?GgU{*IX!;IV=u6 zK6cHe*+b5MUO7`_eQ(O5_1eRKzX)m#@w8c6 z$$m%{#F8;l(mqIxEcVMCBz3Z6vQs){@|qF=$vBP>OxaY$ITtSjrf<9QJI86pk zYpZ?x1@Hd(4=?Qa?RTF!+244>LC?3&d1O2dR)WU@R1{VWQH4looL>yVt)9B?m2ds| zuf6gY-}L9Jk3VTQfNrQlU?SvsIwf&G43r({O@~j#4kPcd`$F9`^}dL%}OSr z?);HSssd*$Bh2sU_}{cznt@rAqd={oMv*aEFoR|=BW4*{DNW5qlcU)P3R6Si)*Gvn^x*JE15FGtQ_V)v1RM-FYml{^LKae z$X2)lw|5uuk=w4!-*(>94!DJ02L#H9l9YcK3aM|?EcAvse@4m z5sg~Gal}JR_tTt=H>~k>8=q|B>^W{4kpvmXRTjrlk_A#z4I!_kJeCSeNn?)aS}_Ab zMO;>PE&&3iXC_Mn4}06Y?;l4AGSXiaigmr}9jwD$wF$cRDhf^g(n1 z23UC{r?Bgcu=nzxX~}S^LJN={vJeH8 zh)P&B5AF6Hhw{YkO@IA+?R)>_@rAS|`b9>I)o^k0gbV&H-}tmI4zqSQAEkoRzi$x_ zN-gKI{@m>GfBT^iy#Aj*`e)DK#olr2rdq}d=)0XRef4I<_JybYHGcD#0Vb??b{JoE^x_6yx)sC%Vy@?FSMcWy|RLWRM(oMh= zWJLWIaX*WRzDZ6G1K`YbvNTd63j*?D@B#+1&=DfP&Q~|B^M`JEv|l{&refxC|ET%K zYbQ@T;gV;(`PC;}{JszT{F6^<&8$Dt!gp_31hq1RK(HzYv4dkne^}Zh&wK3t_x$Cb z|IA5eopU!#=R)O!h(JV|$;kgzu;TwA6mZ(FC;$$Gz7E5hjmPeO?c3k>m;d8UZ~LwG zRJO8=PMt_uQiGpxxTL!mr)|3#ui1P$s=*Mw0?2}cOG~IQA$0q0u`H)rE2dl0F1kh( zn5kTHo$3)lbVH$DOsvr&9;M0A80Bg~^BR0oi-^d;YG5>G=#4@^#;2rQT7L%fnY)7+>q(0;tw^05T_Qk$p}DGtE|b?pco-m2^zd_DHOua zb0P(f91zTb)QDqfO(Y&d!Gdxrt6;Ra%JL0&3G+XRE45)qT(TJf$h_qM*k|1HY+lK{ zWIA~LsgD}ozGIi{ZxK&x3*XpwS9bh{4adCVgoo_uEp$6#CZy_M#EwXP<7eK_anYR3 zo3Tp*IgBEK?{}JHLyAa_vB$2aN{UDbDK#=}SQ!(mBpck4*Kohhi~Y zJ7}zwx(wq^26;=OPy7)3?$JP7)FcBkk~SgHITg;xwBbA$kL&)OmDiJ6ZbtpZZhXEN zpkRpE0-RXkK$d002g~zC1iaeu)sJ0!(9+W1`LQ|OtLN8J)~d6i2z08jkN**1o1gp zCC&(fsFL=&hZ@KpSPdfbNuRZi74?Qm1uwe#&^{rjV z3x}w*@-Q|8Q5={%f>mpe2_g6eRRnP^WiJE}A~ARA?CVD|SN!L@^}qF7zx7~Dr2qm_ zEM|4eS!W%%=AsLqxoz8ywOKo3vj8$cjNy!-Ibqw8{n*@^!bwwWG4ugm3{i*6pp?L+ zA<&?=;GjNt;z&d^2C7*M^$-LLnj=^y9C5q|ma#?Zv4p zw5g}AUnGo2)`T*#r8%r%Y(XT{xK|=e8y*o;u&5?Cj;ots6mx45<`*Y*P;#10#frJU z@lhoh;SX^|g|rLfPSH205mNvo7?}|xo=TYlh}0(!yQM-S5&W_!bgGd;RwGoY3O+YN z{GP-{EP+xB+m;BYNtxKpNX#HGVh~wWPRDKnMbCbnd2clgr;;eH6Hkr=!5pd##>2Tm zF+H@}W)P(w4n}HA=G)593sAfj6h&|T4SqL|bO%$JaA|kdrIEjgs>y$_k5le`%3uHm0f|)ol z5woxAQ4X=PLI6rXC*~D^Oo>F*AZbVvQxrilEt^!Gf!R!q(j>>g9-cDJ>9SqhrZ1k` z&4nwF`G7$}vP-;a^Dq7R*Z!|f$Deq}3?}@*@c_vHvVe-Z2!oQc-u6w^_K*ERriV6= zF`Fn<06}I$2T%Ou z@BYTS{`@^}e@}1E&aG=FiZ&~_G(vD04lndVDCE$yUip)^yyHXf`Hd&P_}L$Cx9Og; z+k+!%XFPj~c5i-8dGM;2``Md+imKfY%d}dXnY2kWBh3}YW)w1zp>~7D4o3y1idjlA zNFpB6*hO!Q_;)H`Zv#0Hocs`xoZ3$TI!WFq|;UEFz6W)l3$Gp<;*aqG=HzV+p& z9oT(v;z>Wbo=hrSd)ojqp$J3}1&SQBW5>Z_=bb+|``It}>5CxQoJt*D7RKRA%iA$9?~c|MX8!7Pc7yxX#WaX5>UD8Myi2UTj*k23zwL@ZQ7c z7890@5X@i#I4Eo|PB0=iGH?<;aUHRXdP65NN|D2;5S(v|RyGKxL}|m0uLr6Y176Zb6;h`nzSg)g$>>@jMZh)~ zgDhN)Y=hD8FKJ_?G`t^HUIHKlaQlTlGOE@%=OfkIk2i0U-Qad*Ke6@C5GKl9du-7q9OU< zS$vEurITlXe(B8u>c}Y4hAB`s=&;CnvL4MG|{_i};4t?plStcE&i~s@C zBs}^<%slG)V#_Q3pmNg(vTRMxSac&7Ju;Z_uHOtJw11= zY4QS<1wT(~cdR(`&A(?WANp-=Pxe~VYf?QcV@^q`KYi`#XIgv3*S~Vk`(FQZe|^~( zzVyTu1+8tlOjHdjgatngNBZT$c~5`by}$OM_rCAhuf5z^k>B!JJXgg4{Rx=IJ9ER**71#>)t2de$$<6!>}tac-}_r*j3`r zZ53Rbz*Po8z)UCSJ8!V-`c)&XVN13@JXb785 zI(bo`6BmE|qKC~CMH{M6(wG9J26lua>~Y85-8gpjDjb*30R0|<0|sIcBeX&qiE|`- zhO**eub=y}>Num8i;8z9Cmux6Wy<7LP#II8n6f7nKl~MOLWiZ>8j{KvOu-1IrV=9T z#FEU+2@!~h$tF>fkE2rBV*Wa-h?F8yStQeB zmi~S!hJ@1w#j&ul=B7FdJ5Hz6B&-o;3gZoxN1JCnSP_}2cnRJS5Iiua`Ht)bKlO(z z-ukk?rLCKGWHYPxpL+V~SA6wzpL<3QUE$hH`+7Yd%q`{*-Foto5Ht{oGUe!ca5Ai4 zU)-C=|G(kS56eDQqd%8C>D6dFlnO#7GBTqC{e)FqQ^-N9JWeT(<+ zXw=Ll?fv>$i%R@p2&8NZM&O7N3W`9am1M*!Ah4Qqa1>2R>C9&)M65~BNdzMSpe)`C zmCAAQrm9&^j&2MK#V2pNrU*>z6wny&gdB`e8aAA8!l9r4zk3-u1;_uTU|gBQG4 z6q$2j_Q0us@@v2RJ0JdycfM_KaQ{iGJDnE$*yRox*}iUBO>bGZq-`nDTx+Sq9qt|E`LjG}Uc0)#~lxPISGY?@k$lUq|5_!2&26h>%yLJ&eJ zgxmlj2Gj^XaM>TY&>Iw5hPHX_2$+Q#!fecJY;Z}rA5W(d(o%=nNL;Lmm?_jpLS|ML z2?8)Fax%D3`F7RqPxbo!7KE6impWf&_p@Ye3f!CvrxAgr02n8tVdy6YbMu)?LK#}N zP{ea}Tv^EgVTKAJo9G0}q%@duof=m!%2DZUX(JPkc;OI&=1l3d9y=CVpPZ9$(o%Oo zlR}IcqY<3n(Em( zF_{LR1r08BqYPP{D*060_eczkUYyEqv zlagbpu7#TGDS;x~iP$JzdzeYu;-xMP>uXYXooeb}8aIfBP>jDP5JwbN*Dj-#y%up& zRP-ANMzM<*>W-RtZ3k6RA*Em}%B%*0DMisKu@b2gn+lgcb$h5T$VTEo5XX*(dPhTm zkq0iEu^<>xyIuX&?boin^w2(;UyS-BiA)4cKnUnz-Q&Mb8=v#ZkWI`wUXe}_vb42q3RVX# zXCXYhs@(ncS626Y@(oku*C41c5fl=V2~h|fu;eImzXFSv970Dz z#I(WFe^8Lszi(#uD*%>KZ%B$T->DY6oyo0_|N4DbU;R_Pd-qLGw~4l%FvN+cwQ%j# zhQ3!wW}x6uIO4-c7AE)a-*@^`pZEL=LAiI$`kju$ZjQy>-(QxOsj=N39)P;#=I zjUT%7kk(&1h5Lh=nR*@@gZWJk^_R-Hjk36A~H@LpZ#C?PW9XeEqNF=RW-Q zp6P&%EoX*`V5q)&)Vb$vyY13Te`4WIpkDXc9ALu~g$SA-O zk58$~9Us;>nb#wL(T1Hm0FD2a+V+~&ZD>j(k9bK5YAW?yz80+|vD+wQh|(CTF1YFf zXjGV_YgKm>NVuxMR}!VsIA{n&jS!}0=Yoh#oU1Sf@r*k`HGO62=|$_YPBQ(W*VOquBC`?-&+q z?{%#_h|R<&qOrq}g$Mx}^a1O3s<~^P=I{8^U+dW1rixlF3mtSBrC;@^8&{nCmS5=? zQ`_ClbP!BOX-QhMObx+%Km%u4Hu1ghTypvwU-F_)-u1nk&fK^nZ*ho*8qOUK_6A|q zamU>E-VgughhOxTSNuUyRNKq$oXdDZoh+OZy4SzBci@uOpm+BZIx<`%COOa|Z~;R$ z3{2!%S=o=f4@652PjyFN`9@DfqY+5`>woVnwX5Pdf%$%aC&Ci5iUa5U>hMZgw`u!e z-*EG`Yi?RUkr%RgLmTTi&STZ;DO__+7m~GMfk5WbYUgt6Ew{HHa`xF*A9wm0JG~E{ z`GM{f{U7209GwjSgsSp0$E>^U4?ppVSH1kFp7rU){d>>I+L_ZNl^Y~>Is-V+GJNE| zo3V4)!;6kR3oA&Veh|Ya7zk8{<3uW+q&Azukg>pEq=TVU{Q-R3K&5H~2&K-z_@>5F zBhnX{8JVWzKrPQm>d_Da+U=GWMQf-bP`zN>&;Py5zibv+h!8GWqzYvo7Z2u`q$t58@Ba?d#cj=2@!ay z5FjXsQ3VcJt8>q<|M7=k`-@L|`e%mSg_F6HySaRTKe_rM={)TMcgFOpL+F+5nyeQZ zfk4YW;mfUI%N6rWoC8f-V3T2B#uSC4<1xV!x*++Wh`47K@2j%a+$0-`c&<@sI2xtt zg-9f1@=1(0N}`N{xp+^Ozi#h+1~Yb}M8U}74KGL3C_!OSQnYde!TrL`Jsr>6SrI};02 zEItb{$~ZvbEtnBmjM0`6=Yxn80i=}|2Nz`B)Pe8!54QjG%8O)?6m4S=Gd$PX9D>Et z+i|C!JonhAKJ^v_swgS62hP)#SOa9frTuHqP?+;*Xk4A@DA^e zzlW!s2TdmUpa+meSXu0?h~&lUFMRZ)7yRLGyz?D{h54=1o!l)91ByI@0y=kO(0}4j zoqNx_e)k>kT6z4s>#N0mjwnnNtt_|h&a?YRu6uzEZ+uFD`I*eM9aR$mOE3-+t>fyT zDoz<@dE`4i2&lY>Ck~d5|1cvaqtQs9iRUA$GGhgsUx5SHK7I2;j@^Fwl$^D1v6nAa z(^$3G!qd(V`2MYJeCzTdiYY(?!PF?zYTd^_^oJjK^iMqXIj+^-jt8Cl_kXAZP{X*0 z1;Kk=vvJemvmbi)H5Y#6U(T%-x~ub6!E??-)WE^ug&{`JR)(AB58{r4yRl_*8mD9{ zK|!(Tbfl1rK^Wsfj}j0}ZQi$4v zjADmDB4hwAbC_5;QwBodIODEQy32`xgk{1kV)iCfv4{?57gtz+$O1yJu%wcWLY+F5 z(_kFi|1g7xSur(HhA0vci6emYv!YOu(n*XOC%76Nt7hb!l$x9k+&B$t$^xiQ&DM~W zH|E2F#;iPUB=I$j5)or!VeV5TQ|f*wst^vZn!IxLyWaSo?6i~b8J6lr1mY`%XzGCY zc)fdmsH-<`S;#l8I`Wl&{=#FYTs9d9w2w-@d(SR+{)wk`S5WS~d4{lOgAj92GOg$F z&6T&FHPp-kTY$UFVql4tzS97Kzi%tht$+9Y~LL>1ak2l}YderrfXe`Atuq8w@)j9|OkUSrL?0c85`p5h3c6asWdE4v}zIXN@-@JbxUwU8%|LcxB z_@eE1oK{Z82toz7dsPOCK#k&xa~%+?H+iMI?+DlUp)*>e7pJ$G;V z&?Vnkbx-JJ>;w{(#i&x0tz*GlKPMf( zpgWIWyz?V}JUM&oBUrK`umf4;``N^vsZ(F|douZ$i$XEemwZ)vs4F0yYrF*zvxvAY zAN`-d^~OJV*E`=jA=U8{Md7LnFez}jHw<26|C`_Yi(h{G``_~J_EdITf3V0dr?%sA zb2)qW)BS;O{i2lH9@8c_Eq+4abFfo@J%bd)0gS+G2G%UFN{A^&cK?wx{W}3UL?c=u z)nP;ebG zGM{fc(P8yW3+6pGpWMck*Y(h=QWwS)S)S2dcWrkkpK;nvCqMMz_XO2SnExLw01&HX zl2`<6*}C<>IgdI2vP&<%3#qI^pcoDT2t)y7g1x?v>-O%zJbP?hwHm9k z7D7-Ud2c1LrIi^bmVA>mib`Z~;tm9mB_$OTh-0rjwQ1os#0P@M%T7$M4KRwL#gGv? zYi9b$vq9YCYixYPu_D^BnsmW5TQ&%B5+zdLN(+B*uI<1)JLtlP3R#{b4a`T21;u3# zL<9~oN5LFxF+JHQ2pB|BXvG#4%<17~3sh?kBEW=1q>5k}o)l3Qmnu z3%fo!k6P-fV^C`;0DznfHEIWljTuUgh$(o@NF=b!h87hZWfw(3+AYTLMWc% zLtV@?bpRuG$5^3h?A%zro(ckXQr4M9F%B%cM_8x=nWYvxm=P$1+{nyp$RMaR3S{db zo>*WiL>!mn(L4p1iUyyj>&q0Mw_v8xw#jvxDUDqP@x2EUE{PG;f`H6GW<-d^6S0y( z>aIxYV3`xvduI=>xO#RU7kL{kCOAjPa|bIN*b({&w5LDdTj!4OcXn-;3%CEE`2L>z zrnhzHX68aQ&6x{DmQ}4htH`-9aL`>=X5T)vYvm_yx@!9GzJF~#3otncO}X^S0YU^9 z7`>tQ$8A0FuHXK%kNkRTVqz~b8z(d45}(D7TmU4ue-Z;5DVT;pIm@B^!RF!Ki{8}M z1DgmP_RqQZdo!YmLNDN1fe=i685aOJ3sp_JMgV% zaGNJd12Qw~Qfq&4>`VU_ulhP8H~#h~{_sOD zTHDFi3$p|@P?lr=Y}X%q+VS^%=Vt z);pHTwarpJDdU1EdRFW6F#&9B6lA1EAzq?Ktw+N@EOr=>iogmEqEsP}Ab_FfHOnT; z-afKg!80A4*9M833q=l)%1JnLs(@+Hn%^FTbk!Nx+32M;3k zV;li2scJ>w%c^|D6CZcWUw`>aulm*3z4DXSUv>RyYgV+1FdUL;6nT^em=d@U9CpAz z-uDAscVHKuwDDv-arG9g>P*26Dp*xP$PkF&f`JoxYqauPKmcQqXD~HDBaS_;+A+ox zh+~8$>4=6pGn~YQr01>Kgz@g0L_@10SRx zJdis~WceuZPgTd&Y&t<>E>BU3fT)|xV@ zxn<(PB_v5OdscErfRDjU)Ufl#=0H^O!$QadMS%J!(psqG`e)Y#7{=J+`W`c}dhauZ z!Lh_xW>b#Le5eK;B{Whzfy3h|mAuLI&H<(d0d8ZMKTGSV;nVA8bLCxUJpcWvi2#Ae+A%f(w#jj@Q zS&)BQIDktJACNU5tart#W7?BgH8E)>O#6n5*fBqcoxP#-1jwhNfUXrhoGM(Mxj}$u z@|BYvzxhWWeCNsy8+Qa>1$Nngv8OvewOe|g%^S%3w$9)71TFU*%QPjydJti-r+|F@ z&V1&~Z>eQH&IE=E6ppjE+^R0pgrnIDFuYH^1T)pSb8>zj6986Rmc)Qg*?C3$?@Zi^FHV z=t+0{)(7A9mYHMRy@Ml%oujF~6Te!Aw>-6X@baH^gM+6PXtxbMH`B558A|}D%eFwn ze|}r6KwM@pf^mp>2cZOM<};ZYY`bbt`&*yAL1qtD$Q&qF;Ku8A;@;c#b)NBxM=wx; zi9l7xa3GV)NHeNUd~5<5%&grw#rw#xxDb)I!V2y6@s#sc;_KhphaE=(AOcpyS)>i{&X8KWqivC8Y}jmI2%=JTF+>E2yCx888|_gA&E ztZ>Y%&}b`xK@F&wP!^1xVTdbc_u}e9yD+O2R<|axx|o1Chf;uG0cMJj2uksLXnc50 zAQq`z3G)Z$IDa>b+5xDhF4;J}%bUT3Fu7)pcaxntuNol{imX--H!NQP<63|k+P?ZM3@7maYbsgTk{?_??+SU z$V)_`%Hz58SfDz(4vCSW-scqA6hlhS3xh@-h#DSch=|;D7=lJUfi*{8s+u+JijlTS zEaFOG3F9O`K+TvN0Y+oa#Ap%Wy67P0U<4EA{NbuUebKf%1$hQ&7)@gQvLrr@B?g2T zEy|Izz(g=hf$yyr`KJCX-_||C+Xr1fgurMqBqOi_E&zl8F(6kUBL*bX{k`(wyMFt< zpM25Jzu})l7|cUlWMjqqhX1SzFkaFs#pnpaa6s($uhP9=ev8v>XOT$;@c=paVKFD` zp76JrIrmGNtz9HnfDl0D5@1F_l%do^uyQtc-P<45yXS9yzh(QjkeWEkP;tK;GA6AMQ62ltr>Wev4BuLM4ao+9XaE5FM8ppzw^zD&ssl`waWksoTE|-NBX_F zH@y3$-+AAM-tnfqWq0=n3t8qSDks&3s(aPThx@S?z3HJE`u0FCK-#)wzw+s$r;0RM$3p4oyGRZ+C5lUg{ zdnk~V6*zc^g_v_Kib`U!Kp=2Z*_&BvL&tCo2xDsPYM)JX78F_%OR(f7K*RryIzF@! z{xed|6Pv~vDPf_%!g|B3GR17!M{8mNQ+Y8OXN@!f>GjmJ03k-|rCK&M(XTNzjk#|e z`7`GY) zG2@oqyE2*Xv>vj4^AWdLw$o6fLIU25H$sjO9vCsBZlfsVwnV{uXfQJ7f&-KO&-=@7=_CNmKtE6H%t&U=ck299Ri*h&pV zs1d--4Ce8S*s~@-xxtyDAi@L~Epo`YKyD0HL*{`z01~3Mh$+teArcOD%Y(0f=i9#U z_TT>95BuN`5{uT_q}n6@pIX5!6#!Jhkof(6&dKn$Q?d7JzvOthnk10v1iYcr;`N!w&{rgx#C_JO1W(WbUSO3Tqc2MUZaja%=bWiNE|# zKXK;w(e9K*Yb{_7N`hbpigCwo*zKPFmRG*=FaPap7oNR-BG0SJ!xJz7LND|Wz3+o> z|A#mH`s@Gauy>s@TMQ!VD$~4cRLP}*6Jmcuz{2u{5_aheo zKo$UEs0ESLi{1U=@4RwnA!U(Y{jayWg&jSJ=2#r|;BA1+F*>1z$%3$L_hDYOp_8pW zZgo$q#f%(;C`P8RIl#PF0qO1b?w+f6py)78IH?Uml@tf_SiNQjmtQ|Xzb{}Rm{o9a za^%3l?3vGh&Oc17T6cwK$I}_wB@G2Y2Akg@f2z4zb_}l(*299Fx>S zMgq$jED~o%%s?hchV0m44_bSe(f}0TqNUSo*9@dpbc3nYI8~|1YW0FUJ{3khabrfC z9%M5jW3{|IJl7@`p7R3?f`|El6`js#^IKw5X?zk!%T^}lCfkFE-CdG|D0S=EVy+kN z7Yx&w6F1WW$KHM&&9UqMR(BbeZ~n{0kM${!h)fI;SiR4(YS<5R*-t+_ma; z$SiQ0V#w3OP_tZ)_Ou%j;2Z|!z@L1^S%+6n&-B0fm9IQ}s_0C(GH`E#aqX^c*>N+g zJIAeFH{0_=2(!f@-Pqe+Hy4uzU?gU2rZsXC7(`?`+SJL=2-ImpmmpRdl$a^RgggpN zP%s5f)W`@2O6cJc?>>o4P!o!2B+Mf-$2E~KG6Oub^E6^Zj=2x%c^O$Po8EaNQ!^DJ zL=X{~Y4ACqgyhk0c6I6&d}L)n7)(a6==w0O-;0P;EF8xQG@1b{XJOFN!mtsI%oI3g zam3d=b^(~BZc6?BYB3~57!TKL4=U8SoN`r3{918M@wwu7;g&d+%?2>Q{c}_y0r{yNo4p zf++HTxEcM39RLa-%b~u63wtKQ?B&mwg&Utv!tMAZOrvl45n2DFkGZMyF0pL7&sis` zpHfM$U=UUCegT=sj6d|HpAGxI@-q|MUJ=y8sDnQ2P_gN`|3Isr^*NudobPm|0n4Do z@iV9aLh5|Kf9fy2^5q}>`WOG@oV8Q!R;WDS7$s5Yhid-^|NK3F_wqNr>`(i%2M&mc zWn4|N^iLcdy5twa+||#`bz&mZj6r<|3Q(JaF2@sp<{TV%<{I6(eJ_a*aV}4Wefy5!w1;l3xCk7$ z6jF*KXLC$uur^6=kK(Q?wxcKnCvDBaZV00c8irUgUEsb0f*;)3hsy~>0ggL3a`>Sk5=D%M7Kuh5^joxDv;1Ss{gyFF#o_OH-FM08|T6tF8e!~qL z4;}7yq+rpE$#X#9s0MK!$dpmQ!8wOAW9&nP>&tmuy090Q?%Red4{pb`hj!tn?h)Kp z&f;DSu~!TSEnp77A~Cuw(BP3vJR=A(V9`yGPjcugsyOU~}(#cI(SjaE-r+k0lG!yKeI}8!V#+9qVx-9YUC0xV*(hV0+>T6+2)Vi za@oq)z4T)`ksk)d)<0PkTY3Qk+eneSBt%4Y+zEi9a5;QgmS;Wgyq$A{`8D6Z=#o=f zouXYu$~|tp?_PJz+LgtLQ>zxZ^dcgfU^HVEz?erT&FfaT%sGZX)zBOfW*tu>Bs4n( zBj`}FRbuI^CBRH{+=5pcL7GM+LDD+8kYF0~C`uv%q9UF|q#~vOp$Zm*nxbIYTvX@B zaZ}nz8*G9EU?QkQ%3z2kjY&Nk(iF{9!<#gw@DVWwRm&`;6k2Tugb`^(VH+%-#1oi@ zVw`c-uolK3A{JFuL7i35fEy)10N42JPO&?1aGn7oq)9F;LEu!P?uJ7eS0c9ag#i)6 z(Cfm$FK#^f_`Bc#mw)lDpMCvX|Dp6@zkx#}g(A`hpy^ag|M>$`t*bQ$8}y08ovRl2 zUiJ%l*n0*t%E(WH;7e_9yt=jd`F{}jnEhF+FeL%SV^i#eu!m^{^@}-|-#fi`-xuFK z;g1~e%>)vlLAx~h)GrlVUiJt5){1?t&I)DUjt3#8Sb3Q`0giw7&%gFVU;c+LJa+v| z(J3o~Nrs+=FbHAahyU_@AAj-BKliT&vwLU7WtBsiVmkb=?%~T`joCY%IiXm^6pDbM zi=pHW086^XV}Hm4T>zwVR6%AKlC;{@9an5?-*M?4-rVXS9~wenXoqpZn;%~t|G1W4 zfBLGygqx(hZ{8`+F&rFb4-J_zCtDt}d9Dn-B9@X0vZ5kY(Uyen9^$($--f(!IQi5J zR16So0;B>*YSCw(TB^a6$FuLTN82onbL>-; za!jN%IB|81Ye6aChT@6VH&4IyiMc5tTP!0FJ{rw;K@Z#aQWB>WnpM2UXCv7pq0axKKF8x+} z`ti?R`-nB0_w)z7j0l{w3*yzml$GI)Eg+0N>rL#frer^6@+7X*;BzyM@w_QOh8aHE z)Sy9wivxYRpE#04N-<&|d_EEcrtX*3KO;rlay-~7LdZ?HB0?aM_%lHujU-DO!GdCS zWFce_smRG-6m1au-D)>H&7%gdH z6OxquKfQhvMuI6AR{#w&9UM4W%Iy!cLURsn5NCrP`-N=nBfdnk`G7f5;{vRl0)Jwe zM+StlM?#0z4EB8GEv^2J(;zb$@d2ojFDEwcoILK?e_7?n?`n05n3_ly_0ncAE!kzo z`Vam3JKp-m&wTDN>!-5L&{tq;VHhY>!5{dukG}8Y&wusv{-$^22bN`P2F|jKaPPzW z2QGd+FWz~63;C3V3?^M-CYTk`^#h;4q)6`Dka+%x05oEZ&9`w430y^9{#MQ>Vx<>@kYmP*onsoU$gYJ8o*e+rMuGBa>5~c+$ab zx81wu-fL%FC!0iDD%|vMchG5%I$0)v(DMI7%_^5L(mlom z!Cc|8Hq$5Q^RL!$#^cE=~ zMwk@AM2HID1z}VLLo0<<0aY2$VZ!RpG#;|{7)*C2K|@7nax!4e^rB?0)H1j@;$$DZ z&q>Jha<+Pn_)T`CD2$4E@8H-XjafcK!}-NY3W1Sj=!OzQ0angTfkgnj|E1BOBME?| zO|s4h(4Zn2R}89Rn>Qr=0b&GlI=MGRaAO!yt+Lfoq$|rf&mNIbmxu^ZPEeHQX1Q$k zzvTA-fL$>Rp@eN-eZ$n_&biqehK>bf0in?el7FX~UykDp0JN&m5&?qI>1UjIQzr5x z04)PZ9AiH`{`~R_i+4WtIn$@ltU1tMT%1%3Vq{Sdp2h-byyo#2n8a0)b_XUkr-m3^ zYsN?sy780_)!;L6ZU|G-2;3RgQOTo@Kr}OG)E}q=lMk`Q&#L6Ojwr4RgET@4>HbIx zsHxAz^(ZGM@o`|0%9wo|M3RRQ*T5i3FdsGL=5rb&k7^uqb;XnTK_x#=SU;R^`8XUQA zkQWo4eV8B|I;(f^($}DW`{UaxlTa2DA5-9=a*N`?4Kal^MhtW)B{b z#e=$cr`^U76QHt)2!1f*m|dC)fM zAG;0kM{U^?Camyx^kkJWN#!&ksnbAb`SgVr{DhSieG=)bBCK-Q~j#jo$`*ohoMthih9oQ38pV`CY+0-(Y zBsd)1qXrr`6#}Ly^^n;IGY&ALh^*3hqE5N?rqP~g#&K|B;D&t@btfpwphuYl#FXBH zcLqg$4MOcMNostJn>8=XzR)H$u}NEukF04zsxb?fwXIN-sF0bx2F;tq!K2XGxM|6> zhV4<)eal$FRHp-kafdDz5C$PbZ&(m{;W9T|v2w+M^_#YI*B!Glv?gZ)fCT`3Usg&)aCLg;gYb_c zs{089tvqG^aC^|({;-xLcvi@lw&!(UB#md$%W_dft;--Sro1#_Z*|p!k=+xi- z)n9wdRPNT72%?sQi80sjF8=24zv*9o`WK(~vHskBrOPuD->FD;J+{C9TW>=5_9qm~ z(`pkHk$9k&-@hg@5S0K446UGW)kwk3J_8KImY`^n_7*i*Zgi!n=C&BYV*o>d%hvSv zeE&%M`&ZoB+PmWriF)v4mK}fMmYH)Ne{z{`W_#GPPUP*kZg;LLa2et7!4fxIa(ni; zmp*KPLw~9a3lnROpDIs%%;x-#i|?bAZAO+AxbFws<>0QhSbNMg)W;$#7Mv17WfB4) zj=&P*eL3BWSkx(w+tLDSAF45qSU9KQVt3;9n{Rs3InQ|J-7s6IXCeIm0t)y)B~V}i zfo%{%2wELD>5Q`nXP$NAHD!1B!cNAPaHWln!XP11mR5jp*7RDqBEvE5DLjlPaf-CD zX2l9j76mc|P?iuQusFC*8-ST-^#&%cLP17s46h;NP2?+%g8W^+3D!}#F}vJ&FuyRt z24W)g%>%6r2M+GX^vYupRFN^G_Q6_1`JaLhQyb49%u15yGREh;|}H-d7$I?L52gJKsL@9k2blPae7NzSB3%w6dYENSWXa$OEB*0a=E7 z`wQ9cT=eC2zxw104sXpSf({4Hx#ZXwi#K)2*dn#46BTSp3SE88M)$U{0oFxQNYBZL zlGymO_3zcZ1PdW|SyloDt+BJ?d~qa!vJNRM%6&c$37sA$PrtC( zaKWdmu<8&^ORAK0oID*sJtL8Jn2;LiqG9LdBcTwv3ekH$IW;+U*h(=?sU7Z*)ETJqJs0Kfn?LN0=qE6_W9c;#Pw;1AyBd^MfKSW8ZiW`=&Im$kr#} z&$c`U|6}z-@Y7Q#;2{$$u+9Umg&w%yLyw=c0Eb>WE=0{xj#%7OY zV~{1Mv^efSs66<@W3MYtIDTFY$VT8;{&%f9%L6<_1Qt9d+PS;o((jz{x);6ZlZSWQ zcjl_eJg5HogOh03L1pa#Td zSqppg9@C#)ehpZpl=R<)#n+h!szKG%%q$bJ+&PeNbb&v} z(QOIX1T}?2S!n;hb4X{8HEIFERY^R@6Q_O$`MM+O#E=4Vs6G`NU||6G{jIQg{rNg~ z-SZrH3e^O>wtP36+}qjo^uI1`?LKRXC+A^Qf)ubIFjaDlH6ME4d*6Ha?LXK$)5@HB z56K-4EiU@UJmHMHf9?Ih^h?$J+#bghi|k!+s5bi9D_`zsZ+mtQnL#y8WbF#v2XX(0 zlu88Bc7SCtRAMy9$cCU$27v>WSqaSoKn+4F!A!+8q|-kGBv6kaGS$86OE*tkd*NL& zk+tERpg%P9h71=9tZYr8JfifCPhTzF1M^eoJpGITtrM#-gdl^TGhF$#o4}#7$mFWZ z4|HZzF?{liAL+3wL$*G{6MpL9Ix#aj2p%<9ET%M@RC5OxR0EI|1zg5Z^-=d^7WD#3 zIA)#4>XiajiI`>!Xc3BC_uYH8`YNZ!h~vS0%Km#70IUETECdKq>!Ppz>tpV`^|p2G zRwng^IcgiH)_H3X@XF)P#B*0|MrVEwMZb@J)x}}%VV)}VU4Tuu!7Haim~53phhY^H z?N|YGMl1oj!4L!<%TIfa#nq0|q8!!VK{IByYB1;w7rPQAPe4hEE&{A@nC?u1D~*=8 zA6f&Y4u{4s)hK)k-j7c2YQ`aGKBDlYO=wgQs5(kIhL{S-qyf2lE0~>kl2sOvh1#E< z1cg=$371px8rLKw65;6AsxHQn1=wjPTw(fXW+MlH;b~V*Wdqe0AoI(95|q z(W{6n6<2ZM<}U>R@%=hFBQl+;v*tCeNq~(Io6(HE5k3?`a7{7hvKBej-$z*d$YZZ? z2%3*h<_w=ipGwT0MXFH?oXP7^x-nzhr`GNTc<);wg#2g$Dl~=&RnhVwo`}^H&J>PF zbR_Oe-+vqmWy^8|>R;RFf0yViVsO$ZH(+!<66e4gg2|?~B%zkk?8d~`qcJ$iK<&H; zA}%e+HtHZL2@J^hAJ}&afV@r|CIi@_*p`_gOc1HR1d_M`3`&2_mayoSKs6rl8Gt~* z&@d$EVy=UoXS&P^;xz}9^0`3Mcjgo4e@>;nz?pz7A2Iqzr{ZdnNcXN8?!V?ax%pMW zIc8?)VEv(N{WJb9bWZ!8vJA5JF`%Rb8J!)Kv5jgK2S1nxoGu5GMex}WXb+C+$TxFyjmva7h6k@K58@z%- zfM9Zn;fBT8U0DU2m}hOzLtRi10!5crbmj)AmM{$n9zohu3;XXn)VcfH_qcTv)9CsV zofBI)|7B;`*%xf~`2^7OJ-BuY3)={{erp>#$4}2~ebRAZ(N_p+D5Suh-#;k#-ne_x zbym&g)Iq2g+FKvHuKU7wJ$3NBUwvYA!ntd!QoA{e3w2$>APpXvJKTkOATL~m(y2xQ zZG>t-J!8dm!0IVL10(iVD`W&ZxOZ=-8V-o->;{X^9sU1f0idLj;>Aqr{mRe({b%2y z7G?q)HQWAVF)2?g#k1FJ#LG9G2I+UPFsT@}6deGQeHY$Gyqly=+qlPvO)##vxT{N(V&3Fd3WEJIMQ20zbdh~ zxQMkYR>mmJrR~#5|Ffu=M}tgg8ij%86{C|lyCfPnyAF;oOhECQjG;rlk{{@`0*T6u48 zZpKYcEqFBra{#ewU9I<1P7b+>1^IFgn`@5&Nf@i6@CD--L6{$Czp8c&ZeH;N^U#!DlwuPzltrbI*?1tcx`yY=^Mc1^H+vu%h1 z>k)_dJ_Degc6%Wc4rW#t9#8{<5s2Yt4;|VBRf#I}<-4~g)kHE#QvIn;n`u(jf5IsL2I%mtqqLgreNlQ3(8QAFN=0VL#(9Nd1~@BjL5e8Bl|3{<0!)d@-; z=HCB-cYfmJvroOW*I&qloq?+rVQ~Aidq=K#Swa0ZqACWUl0l|Y3akazcAZXklrY&e0Dg*mAHZ zTyx3o68ZpJ%NwZ-baql!3|nqRKP$t*0#3zXb$JM5V=L7i+B?rg!1QzmSbh3$WEm)< z#U86y#COcGFp=`oZ=(JMsdcFl9337|BN!Vu}Hnotd{{@$h_`eX4vZ9#8v0;g#Ua0G~N%2r!8)U@Q~C zjq!;VgOSVtiGT?43S(9!R)#s8-JGEskB^1;LyVOc)i%%=91nFcL@mk}@g) zUEilX&u9Mn{lD{un=ZTRr1dLWF8C@j5e%7z$bDA^2L@6)8!URCdxauXkLgUXZ8(>I z@ZvAc+|iqz%%^6$B~djXs77c!MWEfaA zI3a+7&$TQk%vUWT(+Ic@@#LL6?qKJQomUdoBm`7~1{jo}#^kkjus}gVCD+#^?nY{Y zGCnV=VDt5G-AGl_mx-0e=1r`GqXDycLrnisg@8nfB#r4Ejnq}ph0OvE3ZojqR20rd5|Dtr8_vWqD0pb8sh(%@WkUcTW%-?+A zkKcC7jkh1)Zab&y;am%c=7+;qzV3N9Kj)P{`S-*5!~Is_0wZ*w`yWvq{O(ISesMD) zcM6FKiI5oZ&V(P@0DuB0Gc^us0StB5eDV7ed#~N^)>VwVFWr$H-Z8t1i-^c&%>$`H za>m?lkE_0TD7)|GzDOIguybx^|4oaMiNj*n$C*#tS{55Ri@igjZ~x6zTdu$S_N>S! zG1nbn%h|1P<`dVVT-e{5T+=R3KKDd)s{pEiDQaPE=bQ`=FHA=(sUTAp@&OtM8F!E= zL)Z&zHdJIGbOH|!1HC;JI44Z42!Jf4lYASI9&hj*P*{%1jsRAnl|t=;0A)46u-i{0 z7si8n{QqxX0Dxez9Xxs2xBu-0b4TVUg@lw0$^@qbHbTf4t};Aj<5nCuy%OHXXk7<} zV+SQer2#tn(o{jli|a!WpK{cbr%;)oG^U=FOE$e|MNv&((I-zN#46<2O5g6!&KC#@ zM^PP$}QnDOs{rVei=tes_ zUlLAK7d8?9TDr#jY@TeJKL6(LTRH(RSA?qur8TSWl~pUfSH;+P_#d+(Mm+ec!bIM2 zH(mB`Cw}T9fBBqMD_T<__^6Gj(-G5YVhK59R2LGM6uBA52WVSxS6FZ#_~t*ay^{M=mh z_}PEP%uGMN1&{&L0J0(bYGJKdXbD5jcwogbw{mCw?Qlg!6qEkymq#3+B|$Jh(Vzd` zQ$o4_ECE`MsSLW}_V%i0{w1c4{edec$}C%xikgu%7=>hV$M>$@^y!cP_0v0@VshXE zR2&wEWjN{7&D-Dp>u-E#Ihfte!WC<4z^->(|HxG@487qNXY8y&J{UXL?LX+71Q<*r zdeLltVS)2Z00ndi+<4VJ49R@35LEL%XRYDB+Z2EQM_1s&zr7Bh|M(RMi;CI3M`U4P zfF2nH6xI~S9yxejuk)1;U*5j`8$WO~TfwM@$3FMO>V?1hl!eyXBIG;;?t1so^N%04 z*E-DG0*;h@tlT(htrb~Nt#Yc9O6!79qY%-I01D2mDCwG+`>fsal==;T zK`dc?f7m&|41s|_27wWV{bN4#+rRU%vftZcWE6rPxGbW?96DLI}o8i@%v~!Zm8c&<2f09X6o)yv^MI9o~Y)u@m`vR!%^SI zXygX{A%_Kmsz}ZKS4*0b1bin5a~px!0yn zzRZf%U6Yo@rHe;x3DW^EESai(>wWLa7qnz}3|SCW9iVl}w`A%G7edxAW<@JnCe78Q z95_ZTuKvg${m}>J<`y=vGYVh?DX_0Ogi7uxA3arT5gX11@oc2P14-v9;*LAyTabLg4iVT6=0NUzZ{iWN2929Km zbkL?8RJ8}gfuZjWLs2-*OdU6c3*K~YIPYa=&EI#=w#m=_ z*|qYm&)$Wy7o@c|xM#ll;n?u-nQ;1(HioCa;yiCfm8BrOh|G&ZpXl4)=9NKdq-*x+~ ztJ)bc8=jjiz%I^OVYN%h3{C`det?}v4xq~c%7j*@jZ6gOL+su+-gnJ7 z(AxVy0s+N%tPp~@pgDv33WHMg5DH){QexT3ypC4Y^d2<{1JSfx{Sg24a$4Tl5^49N z-!ZdSLTT&Q+(UU$Q2;6zsf%olh|?cp1N1PMdbF}Uzw#?zJngDWzO!-dL|dw|kL9Ug z_m2!s9g_56@&dTX?*S2`@(K~b0WIZEF8NpKJ@QG@PdV>DY`t%KufsrVL^|fwxXKLm{eNqp}?pfP4 zg(-yE7TAaoPBBvVdk^v6hEYs(y^*Vrg-jINjYWD^i%-)t)ciipBEtx(WTtY({&}7Ro!sS+CNm+w)bA z{Ibth93i(V`u#-#%V4AkTEa>0Zn*T{HvQYbeD$mqlUd6&fL)G*^IiY6XFqP&vtRfV zUo02*N|sfQ0uQa)cjoZ$wa;%^xk|9;0B3}8kd6IFyBWcV!4^PpY-Qz+KWlxsa>ns+ z!6VDtSU6DP?(glv+0Q&-kms47-8MJ9xbv{AYC9b64zTs)V?EDI9}zjUmIcnd2g7h^ z*B+_F;5!Hpeb!ce$kUJKiIs%G_Wdg^`^3%CJ&<9a+k;adxdvM{t&%Ng%!DncJ#i5% z0o3o5ejyW%qS7THZK-8Tkjhh;nUbPEF}L^j!_#b#HS04JlZO9~z4wl{>#WZFpS9li z-TRbVb=8X{S+a2N;D+fXbTENXLI?>Vq%cD!!(=k4lQ1bvCIcxXfrJo3F(s4$q1wg< zcjGQumL*HFdb{xV*0KpYxsu^K>y+)qJ4XIr^k;R1sq|teej%*8!#SV5U2XT2oq*icYs)w7ZND zVzj7+ewP;oD+HK`*JvYv>nYk(Q_=nr4OfuT`Zp+UtZq_OBU5=vwTuY%-K>_@>T^U0 zF{?c~0!YM?sHH{Y)2e8TsO6Ye*N3%mN&h>QrEBp7r23k&H<3X!aAf1C>hREUkQFKf zYNMFZh(R#;&Q4$g3J5`E>>ob-(RWbp$EdLYGWWe*I|K+Z*d-_mXeaj|0&2#gPN1oJ zf#19L1~=n${B`TkKP0oQT9ImQKw2sAPg1v+P1E9$v~{+tr7cyev3Xe#rTn)BiylPM zDj{h(Y0x;~5iR4AqqAYYs7t9`P!)-J7-e&WvI#jAC!-&RRM`w;coxY3B)n>DnAy`Q z+Qh{c!&9ChMadA0V-tmQRrB9ZnF=PV_=&H@D$fK z+(~ZLq@X6{^r#H{i9UIiHjD0=2%VizaY#TWoz08JULLvd~iH9QhloO}5u1$CNBRyDXbY!F%j>I9yFkrfl+SwHoxqa$0=ZlTi?vnP5(H+^)Q zkwXcV)kiQj>@l=-G-!Ycp=+3mAq{|%nCh^(_@JU%O_n6)!n?6-_A!!UJCCE50;^A} zfvDZrk)X`|Qc$!iv4Qs*CjxQn5yh9pNRsql-2V3i(EyZpfb`LwJ1;4+yk=YiuL={Q zur4!Ep*tkNI@3TWWGE1jdWA;-8wVJQq8=s~j;Vh>_!x!;SMJPsK6VX2@F8W(&`O+D zon`=HHmXqOph-42S1+=hr3kQPSdRuNmF^Y%K~M#yxAPwCP#ycHj+fLZz*!5Edk6^L z`{?x_fE%53E36c>1QdA=4Z*3QK!ytm!I3JPQc1pep9)2^^r^CtO0}EC!1y1F=!PfJ z-UdAKB4n#600x?mAVJk|j}!t~`1Xm+|HnB82;$z}I2_xvyLrb=H*FbCP2!~}V@<#J zbTtNnM8foJw_RH@KDTV$3hnheH2v6Pu1A=t4b=@(h7a8OjWp|ZR=oPWOZKL-S;|DL zgO7h+SRmC@DBd}vqCSL>MArmZVx|HUu^7W1O3>ilAdZ=cB>0dFYNDvjxUaxVB0i4C zs}nl<%^)+8plmWsx$Y@b)TsI%6=s*p1_UMfF-SyPS56OR6G1}d>skS?m`Eh}q(qk? zgkX&^K8V@?Q6|<(xCl{Ot&cFE-XB~GX;24&4J8wynuJu(Rkb!SgA`B0c3e(4ak|loBf^CsS$j(|_Ovf{?dY6y!;zb#3B(vc1wIH8m)LKA>+5U2 z`IWD38mlL+2my7M;>c{b__3dP*&`QSdG@VY>tG|{;W_dREsDFJmUr%X@d(^7#6USk zU=LRFxbN}Dn*c~922_GrK}cKf>`PaN19u)bssX7{9NaNu_U=5~JpHU8-Fx>wLz<$M zWmvjl+^^cQ>}Xc(SuwJ<$*VU`VBfco!X!XY1?CF#$esI_5ARc%J>KSfZ+X)9^SwIT%RM+1Qd6AQbx!E zMG!QN!-QIdP{gosj-r;_7ZDpN62~xL5OW-{s78SymnZcyl-*xE+0S>F1A$4H zA3=#K3=u*RSba#qHkTld2gbT_tX772#RY6UrHk4a;v(~pucW9g_Hv(UygjG`D1WB; zF>?RLZweSw^h>=C2(rG*sXh8|P3_K`Z+gn{BS#v`N9*vCpYjWt5>#ry{_H*?R(DroA>;mKYZ}Un>VjaYV}^?@mKfUQ9qt_ zPWy#Rp0T$vm(@G$J&~#_v_@=l#8OS@=yU#uQZ+?_)8woaq3c zfr$l-P&Hq~Jv6eg{k~HqLQAcFw6wVl8^oE-~MK&)0?Obr9=W`;&o)KIsKDA{i=7X z&yO2xn$X}7CQmDl-~AG&*+jWq0mQ`1LFsYjWfh;0bV1?~plKlxM-<>hfUbtMXRnzX zS^wy8_p!FI#zSTmkKTEZR}O8${@pWZm>On$hBMDyMbhl0!FxiYxbRt9!lMryHSh)| zx9IdTeCulxJRFtZw%O& zXcOZ8s59=^H8_!gAOi6L5<(Q@lm*(9;E<|VSEtg!qho)oX&8nK3T9ZcsFTHs-W|Tkm)s7ODG$*hGI++?4F|7$?sH!M&Yyql?|-QQzw{0VX4AC9Y_sDoRxDuT|6#Q=n=*PbjUE z)hV=^u7on2iTt20Kugs;TkeU74JCw$0a(MuLX2-|fh+g$%tk0?2n1jFngK&gPyQew zPf0{1l#$Nm%BQ>`F&T;Z4noXEs=Nn7Dua!kwYIk)P)cwT+^7#RDyIOIP61VeR6a*s zB}@+J!soB6*k}|IER`vmCLjT`_h96fvKV(9i98y_8i6H(SPq^X^$JxH6(kC@SWpuM zSMZ6ldG%Z{D^V1sDGGD-0ixYEsc*Sd;b>vAG zopD#zo)zb;Cl^Mg^}zGF_1IQ>MNQvfu8gG1aO=}CDX6#jg)d|Bj#o?_}xUIbxg)fkiflq+-XRZ-WVCp&opCMm&{?fTK zpSfXV+ZXq^W%U}^1vFd(F1PT;qwRA{wpv(u_LA_@H(%9hF3oD8n02O%jUI%RC`FJI z=%m#&6lxS)q{(<|->%su`yW2UjXGo9mKwlaAh%KRPodoL+nCwK1&*~En3^OQ_9zTM z5yZgKSOCghxd4t0ED=ml1k%dC*DvW37my=0t3uAJt zvHu{%X1)m+Nb{;rd(7T2d-9>Kq=qWdYnA-?-M}XTsPCma9^86C-6AFFrv^Vx;{ceF z15RbLb!19!VPdI- zgoCy?C|D4{<;lA*J{>rLpQOF$Hx7{Cy<=mPnLR`-FA!^zmlFSLBPDO1XCbhFAe8%5h{ah8eNX>D@gLNl2vo$`!UpxuqXq#nRC+8P z5+?yfO4N^KX0ZxlB~xhNTtmDn1p{GP1I;tj4@3h11=ROgLuZM?J5b}8sZHz&7!71= z^Hr1>&`@H34-6IET^FY?Mvdlzv7Kq{!moP8T$&{DeX`*FL=Xuu%)_7i#3$cy?C8w+ zvSCZ=1AJh$*3A9rk3au|V3}ctkR)Eij;fHtJu|LrQa0QThpv{0?mf*@OPS-16w58xQs})@_ z?8bXQUi*F=48#G2iq>kYj_$bb+oxxp+?=+uhIQ*KytZM82Q@C`gg1bb0>`HmlhXw# zu|VNL&rSMS$gvD3leyU(EZ~iRk@>V*~QOzvn;cG+j9Ws1)7} z2G5l1W$Fhn5JV+{Ec)vF^7G0GKs2E*{86S_lLV4^jE;;! z2XhY$_s5g;I1NVC1ZWv{;7nfYmVms}^&uWk6slryEQLLJ?>Dcq@DnfpZp92M^%rfrClSFc^aHy=Xsrkrek$ zA5H$pjsIxhap`ly`4cOT&q_y91t$g4!13gdQ+W9oF!igVUtS{A$iibU{0Hcb?TC4^sX;z!>utSS=PMqy05>o zZfS_1AZsw!&2i3!XHQ>z#hEweof$I3hKSO9=CMoEAGpX+NEH&3Br6Y6UjV4zN!T6N zyTOFS)e8tPyL+y7_`oE(J;m7gkgnN0krQXh=n5N_KWWVDzHJ7>DITf3&seP4gbYqLiAPBFf2gg2hM zve#VBs>Ng)RGDlYQ2suJ3j~ouxjxjM+84~;Z|tO|Bb>fv1nH1RRur&QhiHJRlxeQz zI>8z|b}&b~P?)3!gdDJ5)u6X_^BFe-=vAw|e`%4bed22XA&GPCcbzNxu+tIAt3Rlq6@5rRe`QlqY+_Duz?`V zXiJVzOVDo5B28*2RM75qpd)b~Mtm|JbHUFz*j$uNf+0qcdsZ*bB&ID@)NK687OAI8 z%N~&^lb_EFo9D1sX>)_8{|J9!&x?RSRnW~~Byg$HG6XU>a_n@?dQNPkKe`En5qT#? z0GGfPVoaSlj@Il9YQzu;{k!+#MyLlsm^fOeV#-^9JIR)+AU-H zpYf!`)#)2jat12k&p^}A4I;2Vq5ZHsS^&lE~u_&)<8U}ub>gO`n_E5Si7EhQ4 zbSEGcW+8~Ng^o9-C$moT#z!99aBOzgym0f`-6bGTL9K-W1u`I|o-bSm1+jru8t_%e z2HjYTTCMhdSk(UQioa?O_ztW0PEntfboov(BL#8VKVb+dNC*f8;HOi~4{xw=8o20s zTJcDI=+fK0sdr6n3{cyj01TLnz{J?K{h`JqTemhFj!1)ooJGg`&I@1h+^;vrM-OzS zXUJNuBeYHntvye1)EOtTF^ogY1Ci2v$Ayy*N5u2HFAnUD8JV5hJ3D&ESMD)Kw@srr z2jn6sNNH?MGkx|o7lw5gFKeA~(TbrRcT5@)f(plPLyFAD)ZnpN6NUku$#Ce7BWB;X zj~E(r!_WK4E9+~{T`{%htg#wY85RVS*N}H=MGp$95h#F>0hBw{^ppp#Q#}>{5YI)D zE z^aX%}E`aZ(cxMn00u@=W;gV)os=Kvlc~WCh4biV3iM=-NQ0I$}h*&n9SNZH*jhRKP z;mDuIVED~Iafv6u7#vh(-D|AKOh=~9;4E|E>SP2e1c-^;etjJ1Q#nWj(5! zI3^SZjL>(Q#evm;HAEqC@OJX}(PbM|_mgPB42YB+H~~%>AW9~uj-Bom&WONjfLB5& z6g3zeP6Phv*00s(rlwb2bN;0V(di~8_lpQk<@aema@kF*{5{Qh%W zPEm+h$RO`K2*?V^YX~7>g=gb(QRznpSHs3r{R~_-5nK`=YvZ0DBG z-Ftiep4KtvJBoF~BY57LO7$m5St_xNmBDD*A~a- zE?x=DV_$`c4ateAb$)Wj7&buAYG8x!9R3uQ0wH+oLnt9n-$kuW1eCmS7DZy1LQh6+ z`0|&2nutav_oSgrQ&hl}FZQscZd)84Jq2Uh&;=T z_)8W;6jgh*Nh3S5>%{O^KYY8ZwGAe87~QOm$+;=yeijTtGpzv`<5M5H%>)E<{^c9c zD-AXfA;VDnjLc9*YN7v|w_|Ix#M;xo`&f5wxxHJiYO0R-IQDKKNvmhhJWB}CG&}asrDSs%brOm8vtr`t*VDJE{^yJ1UPHqGq!4h&2ENO84^MCt+=iYby*S4h1 z+HeTMxhmzVB!*1dNSA%?eSiMKd#}H7+0tghUIPjO3R2`IMhge^uu!;W4WEB>d-^|b z{Nl<-wCzm2o@uVm2TB4Nk@EQ|i@h#xlq!Lw4u~zQ=}n2H?jxC%AY?cnj9;G5qf-b) zqobCS84|TDYKim|-`-ixheF0ip01Wvo{*|zu)ZL$=6 zdGd^^$sz#t+AwPA5b(sU{R0$0ASnCX)TSkw*voc#VQDx9>re!1StWSxLF_Cc&xgro zw&1aSoSuDaa7$a1Hv3V=U|(62V$!AtFf-=pIh}eIMP`*njVdgp*oPz?TlHqM{WG zT1kHEwf9rfB?Q!Qj9OTB$~v>ewKUkV1V$J& z4;WHRO&vyUS6o4AA zRL40BXmn912csN$9j7dkT7UzGfO;nw4yMQg*OnYVemL!I|I+;?O$D2`)G)f7z`Yz! zx(F0XWUK(8h60L$I)EL=eUA`2t$>sqJP8V}Ay>4|zwC-HP||2ii1+(gp3Q$`8(>^k zZP>CU-+0EE*^ayJM%qjvS}A&?$1*T*e|HkkTe1!WLT0J&wXzbAw^pzqG^T&j1`rJO z?J2DBJY3jFWSJp zEk&o-0Ygz!MHhk~)gGJ{=8O;6YATyz6fY7&oNaUHWzEFeB9Inw)GIOY{FLPUcx{?0 zGL~XkFEjfPLLw#iU~rr~ILcn6(O8JSjU#y>l}2yZ-izy3UvXFk-AE>&?>q@8JLZw$ zQKa<-q&*E|`FrSu=WzoP1)h|5+w0!;lRy4}xBcpG{K>Ok^75}vtX$oN2HL-O@6g}< z{Re;Q@80w7*Nvubl*Ln!xYmigMd>$pF@Pr^9Zqq})S+bm*FL}WzdZTb;lj}svqh1^ z5rjo82FB%s6B5JhqZ*%1((`h)7BHNf%8ogZIpDo_*17%(TL*wkRF3e=2@W}HvY>$l z0%n#FgcoZw76>;>XpTbqR6(s&ElgfZz|$#t{HK~)RA#cp04af$(uGh3Xeq-hfC4~a zkq207+r@BQQkyzM4|S%;KYRcED{tPr%N)+d6eBfQr7(58(|!3>Pn&$r8Rr~0%jLG?11WfH@X(@{p5G*thmib)!cX29`8$cawTr=SRN%*zjWyPn#u8i(}ncT=eYI!;FE|{1e!}C0qlctK_r4tkbZ`3GdX%f6C$hB>4?Y^7e`;GIu zlf86o8R4AshoGSg4oSJ5DK%mdEeC>!Aw`}ixc$N7P)E@esEXX@nl{tftDpP4zXdQy zfHKh!K|oA|ARg(^SntBio^tbjcYJ$w0@MSQp)V@%21r1-W9|r!NRE|i;Hl*0mumbp z07fDke(^qsh~UekXWc7oP^bYq>;V-FWdK_TO&o*`a#dtmf$iMG(a?hwie6Em2n7NZ zmKeiuNUg!rw2mb;i?mTgZOUU<89gBcUqG!x&k|Y`&@ddw{0c;1eYXFW3{84g$luDM!xpZa#%I z#_G16S8KO@y-n&p52HkY3vnv)_{v(rlI6=WGO-jhv(sp}c`MiV)-%R8Rhk&vnL4)l zf4==~@BF}f-u*w;Z$2XrMd5aB-$q9d9vWFXQg4uo(V*puhd|0;^=0&JggDK13#}yv zwwcmH-L`qhO`kVEcj?t5Kf2-E!_;oO+-c7S*ab@Wfjxf(-Wl}OF9t1XKU_y_#RxFO zM5-hrma0hR#gGhUZ_DWdm1BDm;WBMcMZ{D^dSQsuym!B9EUMH%HYVqi!Z+B=EOv(s zTKl-nDk$$~3szAv5UH>Xj-o~dtFv8!Dgvmc%$zog?VaiRXCKx^`G z2$M4%FYNZc{g?mS7vBC`zx8+fKk#>#cfWGuFAa~^G9fQyOfEu}g&e#l$MPPT^1Tu` zLf9&;PEepRG!&Ad21K;%kLd|^=9y2?BX&?8@}MOL$&7Y{l8D+>g;0nMj0&9QD6*N9 zxHA+&eahC?JR)f1)-?v~&D1Y~Iw-n@X*_t(JufIaMWZ&95D}x5XIOFCMDL8VHr?Sn zy^JXhq`j4S_wbVdKcuV-k@AAf!D1Y9z1Va2UUz&~jx{68adi49_TPV^Sh8&0i3h%U z&+>Lw*bA@Rk^w3Y-ThcS=H-><5)5P(;0Y`QmOV(VHB5$=2asljY3T{kLF9lgKeFgqNF5!1` zot>07f+Q%3vD9&)klc)J-m~-8V@nTQx4o7)gD0KsFf!3a(aB(_0Z?9QAqmO~NDiYO zoYb*npT`4xTF_bq*EuH47CBD4;KKIV7hXK2ssW{@>|aBpVxRB>fVh2`ecE%L`=Jm2 z)%%|(A~j{ANDLQv0EuBdnsssa+;LnpyawpDLCnYL#&mA?aJc z7VmQVVyz0RS`K5mJl%1uw=qYhv<6l-!a>D)Jg}?P!HK|p!654r#h(2a7YFw@lZ~6F z<3QqM4)EX_z?WwDBZ|5qGc@eRW)JKcyL-w!{6+H8Wld6+%k zYMpz@rMrLi5B~72S3KugJA1(F_?1td4%glK)5vs8ta|dnYMfq4=6$+*Zjwo2qZ`VV z8jAvkAc8P7HhK((g9ZW76Z_sLWS}&xuC`__7pF1cd=L^0ka|E`MvK`c0Yd7Q>=!KU zSu+NZ9Xu^8h%?sy%u5>&Z+-BY7O0Z~h6p|=Hf~<)$Cr&v7g^h+&Uwg*6`^Lad<9COwHtZ z2g{Z>P#^V9iyTR6(DQ8!uUK_-blrGz^ugn%ZWy5#cy4m4zUHhIGZX73M!SzqnkLtw zc`GI#ss$kdu|q)_$iX=A<PZx^xEZ@yVM%_^}Jq zz;?+>;H>k9;r$V?X#nD&T11B{69gOu#z8=K9JfDE;CPELGR#2m02rMjbS{0yGp2;8ZzysWGdMCp^j*3&JXj zpbQj*1xR4S#52?DI(OZ3Ub6o5qgE(qO9&*V#9PMKMXD7@=j;nF{>oi9T)&E#hd6}! z2J5>xBNnd|#1~X|2F)ZPXcSEOqKJBrO7{^}y|Y$%xobS@r2Us?#E zV2D~J6|K_p1`)gip-wT7NtlU5lonVN=Mx)G78yn>t5OwMt@F)H(25LxrfyAo@O4ESh#@w-9tN!Kf_pScY!}lk9=h~*I6Vkc` ziNo|%J0D%K^s!&~jkkUDEx+)e{yrTYd(3CPFl>-)dD2XG?P=TO(EcmD1=2#&U_&9K z+LmAr^g1wFzNQ@C7j|Ct-rKNw(_H{E{Q*D$Tj!AHb>u}*VFP0wln^PT8hIy>4op7D zx0h4=Y(au|D#n32BZx&fA59HFe z1PnQpuaO9X5S%8UQ1K$IZ;lUXj^jwk0@Q<70S|FF>#EK8#@^d8l~3Zd^Cz(CNh_dv z4@^TDG+2f)suYxZrrhb3nlLPIbm99-WKf2v`e5^PWW!@$|EpUs=^Pc|!0JBU``d92s z`H9{D2oZAe+8Cdhy5`4T{oy>9Ia}>Pp@1c@03&K}S2m4LAKs4kXo8+8kFrAGQfC*7 z$9z06#VrB~$q^*LqzR63z^4yBj9=S&6MlQg?fCkU-Pnx`okj{=jRc`bSMdb6P?)|DWCxWTA+$ z&$$%HCBSoR2t5?Ogs3V-s+ZvaLj=nfoxBKVU3}@(nl0xXxcKSMzULD+UjO=^`uVqf zHZ@7B=oHX~!?zyW=eA8xj+(UA(`Yl`YJ@K$R!aZ-V!U#tln;x>?1LW?B&pU2A%rB9 zp*~VZ<*I1eT!5>I!{DBOu}E)l^j|g_q$T~2nMD@4I!Y&vt=t5IE z`fJzy=-d9sZ~n0zYV6MQEVs_86DW@iXT0(BZ+8mips?hnrry`UqBGs@$dMxB#JK*T z$pCO=6;vQQebec80O$d#Pk0_6Gt$NgYRw7Mh9+Q>1cInDvL$gZ$Q+}XOcA`YTfR5& zXpdbTWX*TnZ)@2hoj7s?2M!)EY^&~-;DCJ7#E&E&z)7KP^%f#4A69pnPVNaW&+fv zAt-@^5EXf?m~K%DfYrby7DK~B6uQ$(&Uxy1c+p$0lxMx=OuXRdE&%F+TnAU-_B%U^3+5mMm-UzU9#B`@eW^lM_Q5&q}dzOMuUFFq*Md zFx`j_E?b8{20<898^+z+=J4o2kESh?7>&bB2XfZ==g(ev*=2_y@PpRLA5H)&(=r*T zYU`RGf5Rs}`Zw=;!-0MKhU+FZ$^l&ZOGN;!8+>yA!`M8$1XtN5@uUX=Ga*Q+oFX96 zxEjb1>gISZU2q&_w;nPn6) z%oj!iY)}O2`b5K+DJ{rb?WD0}yc;xls-lbqRtJr!4I+6}e;0+hO*a zYkus{?eOUI>|7^nu3q)XfBT(x{=wD9=*;WxxZ$krt)u3Wv(|)7D^?yX+F6~93jl%+ z(7U*d?p2j}{BJcWVR%5HLYA3g!3{pq`A7V*wFkh*&!zpLxyC zzxfY0pLhNv*<7n@8#T2FM~IYFfRO2$rQ3ZLYD1Px0VPqeW2=XHorZS1M8-rNN&q}Z zC>K%yh4xS-WoZi5y@Iy{!*1ZGi7fY}+3hi^OK zFMr+H$ECG1q(iJTv&3ec>E(n7- z_0T*8MeQ6Rxc;g`7Xx+Z@vVMQ#RY{aYmWdLAk<@|&F<{s(dlpe^{3Z11DWAvgr_{U zjvy_7l4zugEY3(JEkT{a9%54Dc^zN9;Sh2LYLrJammzdRKKCOpfA!zHq48PoMUDB_ zy&j+7699pM#Y$TmHVA>#Su)0KoiEMJE%qdxE(vpp^+iOW-p>mV5Z3076V{Wg@@`f>k&G4JDw)*kKC1|L{)y>b9G4 z?euQ6YYrn~VDo^C1({LUKu7`u$|ZawM#4eMZ1=Kz*G^_M_w~R=LzH*N;v=xE9E$>z z@1G{ira)9U+Q$Sa8SA1U2FEO#5GmbD<$wpN-H5T2L&K1q!RiFVpd{OFqIRcP?nn* z4;-@uyejutq$t;KB`%o6aGosxVuyzd0uFo^+$0GN8-^dOqt;Tld*wGb5yJHO*C={LqTr+-b<4D`{*EB-{~y(F^R1r!t<;&bRxuyj&cxBu&Z zb^EIB;Z9n21)lk=F*JugL~Mi`#X)JQM*xTwRtzZQa6^pywhJD7C`Z!p$f*F6MYosh z$_;CeKmS#){iLe4A})Y_H~~0yC(KX@t=GKeEuZ-8r>=eV?t2~_uGg#;iL*>9XRnE2 z+#g!_KfCV4?{2vYYgz`q+#@8hh!~B%U0oa~P4MLtyYLr}J%C+OAk-Pk3<-n)0*Rs- z7?Kcri6AdBxD1#u99A{PbY*>5moe$Zdg>A zgl&=s=T{^&KfGG>{PmxwfmA>c^#ynsAmb6U_eH43 z{+0S+Km(7XA1N$BZ1p`O@|XMqxX%FgIa2&W%`DailueG`T_h^tp_QoA@rIMt_8Lua3$pEI~9_FiJ3cm@Zgj3TwUFv4?0V0NvPFo zGva*$QbQ_jgQD$m-z~e$v(G%gPS8a2 z9&b2%mAU;Z4OZ4<|OGZ88{?JiWEhi@Q*j0KvxM)6e0vzgPD$R|JZ9@^Tnm>Hykf~ zp~kv@eVxe@{W9+laEK6mkf9~Z_W#Q7{LZhu^_o}x6`0mp4HO6CT)v2enq}P4p2BbM zxEa5C`eisB4NRd2Sb|l?Xpvy9k>Gs?@5etJ+K#qmII=JvFfe7Dg#gx|O95F&G44pO zSiUwqZQbT@;j-1Us~f{}b#^`l!w3ulER2cy<{CIJiuz2}8#bu%gyle6(b{;*1 zJ*_D^+RoW0K*Kr=1%mGiaso!wL2ST{VG0lKx)rZjeI{PFauY^+T}--wf`Q=CvWyre{Ev{>lZ$NQclm9GD;sYHJR%>n`N zY&?^25(;O;ugpI6)wkE5a>1`7Z5*o%NLumP%Q0O%l||gL6hX$;tUdguUwGT!{MLVY z$FHs%YmSR#RJx%0`jGE*10ReHKE-0G-vBTXf+~!2I5?g8A9>LW9)02KUU%c951oc% z7(>b2jklfQwrzi=HT8PP3x!aE;1XlVhxvf{{!b%Sz|H^$*9?&Q79)7)Rr8Pv*Nm9Y z(APjzx{cTnn?glQMEypqR|vsc=Xxk(e+O4S3-He+nXrNsEev;xjs&XgfYn}~$rH2Z z01ix2YA3`7P@pK&0Pm}t^L~0ZSJ1K`}uePQ^O*RBw7STB1~4w*@mI{Y0f<7 z0G7cgjvO1!dOc!e7p!YU1TX}uH9}!1M-XNaHm=@lL$R+lg|U0ijA8$ z?c#df2Z=0?AI#EUQAy&6*`#%(ZWROqwnO+ntqu10@#E`#fUPFwAru%N9+sg-V_KDp zI8jno4Q^gi7@IfN@;S6>&$((drVqBTZq=%=zHZFjH|#(IjD}0G_u=E{&15wglE0}GLww<8s2-ul!B}60ojXVn#djI=*W8(I0)&PyZEE=alK+B$?ug-vDU5xiJCc z5)`56UH!tB-~Chn`4_(Qr|MZtuc#B=G#4sONq&J^CV@j?uH0_O!fX|$+Sww6i=C?fF$O#}%_ zy~)|e(DI3*^7L0Xeo2>#Cf5Y(7 zv8K}^1C#XE9{3*4a3_a*#K{R0`lC!3#%#~~l^Zu~`)_~xCvSmC4%S7KIglKlS~~lM zumAjV(q)P~zTt&9f|Io>)G|2YuSV%rs7{IJb$yg>71A?6SL_o3%iVuJNpOCM8#4lk zL_%===0Vg_T*dUC|7sFr27UQuaj%*YB2ukb17#ynH3Np(%Rv0FsInN!3qyr1v{nz+ z5jzbH>KyFMjokk5j+NK%-fkYAKIWzzpmmE{usSo>E9QVX7ui3x8ew>-k(x|Al9K14 z^9Ob$&Y;`raF%6g3?(OVF%%3~3o(=flpBz;bJ>Y}u70pHL*yb78YQI@s$ek?MdysO z&$%8zM^x23;XMG~<@7&K34<|Bm`c$4y+1AjVCGtL6ABnoMwFB&tW7k&@8f<(Rh6i0 zN)ZFmI2f=nl*I%;JF@z`5r56*tG%rawOadThab3WXF{`rW@0dNtc^pv=dkgj@gna| zy1-L-&Z{?S>qG~W56{rJt;2W=4@I{qkQY6SZ*1U2KXD0Go>41&KJ8-X&oOHN0aO-j zg**-+6yI~;6O~$th;Sz;IcVm(jrzLXd$+cRzWO&`STf|T8J_^Ie%=s(Rt#1$8N@qK zNjL2?94NwrlpQ+W;o5&Vfu0H)M!{JPY88`n-S(T_`r5Cq-twfQB0dU&vPj}vmYme_iy=E~yr|4NAGf@JPS%oh=YF*&P>o@tII`hfB%@Zq*CPl&8 zo~wHm1Ba|6Y!F+{048RuqRNIyje-q9HKkr2#1%y+ff}tDo1al1nmXgm%jVv&`I6e5 z2OnMg$w%)`Za%WlbV5KaaY(>$A?g-f&Ekub2XVC5#V>7o3O1M;I@*IK7OqgJ`hEZx zbRHyRiJ~K*)gCrO^*OI0p7bIP!B++7RQvmdX@3i2YERK=bCp;(m{(6_K79_6X5Yw8Tt8wMk4&7M<&cVGCi5B=R+9=h+|^%EoY)cYKk=ObbX(Sbqbe#2NB)6)hCm@t5` zQ05543u0kd4o%IBP3AqLsRakXtH!`Q0YpV>DR<93|NO55==4?EO85bA1Ad2#dVb6u zQ~kcThe8XuAd&sS6cLTlV5CrHAz}}h955Yl(jjsJas#JtEg2}m6h+%`0_4Si$WL*aY32u=oC>VdDjB+D3a#!=uKIrrE21?&;yq>vl9Aeef`MCZjTQXl)Z0 zpT80pUA?Zb6TuaJ%CWJ1Q5`5+c%f<85dZU}&aw(f6rL>#@4AiJs>dex2Kvf-{%LtV z4@o0oJpBcuaKm#5Sq)@!02ZfG?W+Rh6?S+SpTDt(dmhR$JRT#Pg@JZn=<>BIkG$dM zfALQgm{Axt-$kVOA6EmgXvM=I1i+id(60aez7PD&FI@A|58Zp~U1yJt)?A(!n63$2 zAk;mf0HMYX)2ZOSN4Mjf?L%k`4`J)!1E|#*JrYntFsd-BV8h6}9;caFcNm9!lR%iov?R8uM5JL4E5MmS1nVU1sdSb{>uKgrlj;Gdg4!-!rfAUCrJ`Io-7o9=j*`j2* zdJrp6kXj}&CKa-nojUKt2R`<;rN8#y-(?!L!&(Gytm*UaY2d|HC}0>_UikHAp0)K) zuKnm6fAPm&^>;HTj+{L)oVq;Ap`zdS+l8usyZoXHJX3cx8d@2k^$dCFb@P&x@j zx_E`cEE>cH5sqIE4k1L?P&EO-Np{Ksf4)M3BxJZS%t3vqDHK#j08{Dw82ot#1D$Aq z`7c2%k&#++s3ia&ZMDX~wRij27a!Yh9-KaEIt9>h7PXoKG?XJ+E1u}U@BYRA{k>Pc z`DeZYm}4dV_s*BU@eS9#{f%$@i(9|+rHhvir%53hv`XhJmG0JZRHciSfn1dWK8iL& zULHmbd65{Qyz}T0(^DWJf`kxrHDYB$C<4ZpE)AQuoN)v|Ao{@_{x2+B<@2Cb(^MHj z_uF_=o$(i#$u7`SJ@pSNzyn?Mq&~vEH7Z zvBCz;v7u0_1JY|bpAn2}fmK~Zp;`}H7 z@25^rj~4Zsso`la8p6^wZDc(UW(70>_rJH6xMl4(V>Yokcp}5cK0gK9G_aw72q3P& z^t5li<@G=Q#g&^jAMqlA2ltwUAG!b@R|-&m7$RsM{OHP6+url3Prvc}=R9@mftg;% zGKnbx84)<+VFfV4u!+OY&J1olb^zVsxXv<4=(zxZk#d4w=5hY;SpH|vdFkwH)^0w= zt(kfu88fS)l0cSNtgv-TPSu;D z+is+-R^!UCm2>a8FfJ^cQCx8PPk3mU3}HGp9d zBJdneEnMJei-bT7fTG}Hc5cWi93aR!cqxnjVqgDadtcuZzQ{w~FES(Lpfe#cLlmAFN*+pzK&A{)QUoR>Hbv3O{W(`& zz4d*c|ED*u*>vvK$*C+$Ttf^;WqZ(4+g##KsZ@V^285%^oXRbqg}{&^7z0Tfdgw%+ zEm^UC>jysbnKxYZq8HuP%kzw_g-OZ!$M&wDd;hinb4f4X>}>$6aN@-=s~4-eum%od zMMEi7R{@ETL9QgCq{0R{F+3aOqMlLxSt80QYu1SMXgXtSs;jr+CCJjgbr1c9xZUZ6J{ptVdhEGlW$=x?456vDmCMAs4EfQsLCg4B_Cc&XrckX9@<-dR6Rd0Ul zXQz9e$2z@EJMZOruhp9!9-G+u&UgL6&yOt`KU(C4g35e%j@M8K9*xF`xYF}ZvHHU( z!770P4l}KxB+nbrV4%wFLhH92Jw#bF7N8(1ZQleo23Y_$ZrRdZx^`U%s<2f!4(Si> z=|4{J4>;MC-)@r_v|OZR0)1Ec3i z096AOQ@+=@?N08wZG%?w`tuoPd-8%^l$T!DtIVPF@34AF{yqSDuQ3 zz>^Iv(mbs-r(1_p|C!(a(ndPmsy9u*Wmj3O-lXukf@}ii0#*e^N@o`=Ko(*;5LKuI z_+$bf`g9wUlO9PLMdcuixlZsaHm~3J`k()WzYvkx>e*A0f0JvGe^9S|V+=y!{lw}u zTmSmgpL@fr-t_vfo#^;u2pTL$tBmD1DK$`V2p~(SyEq~=3N#AEPyw)IOcp&{FtI#; z*Rx)F{M_1DE6dsmp|WOiUX57ei62&jCJ?m{wdJu};;BC-+C&d{ESg?|CC6D%VHLF; zG_e9}m{ctJTyxc;N6%Wj>G(UJ{fgtSJ@bOR)(eo}VO5c1%_A_&T{SU7&md6zZ*9(QJg@9lJK%QVj98U#SpyANz z_579#F5dcqFMs(B&v?a;-n4(JeQYk1pf*)CE?NjFo`PbMvA~pLy$XJ=%pjMb!8N6J z2uG$n$F6$COKk ze?UbUtbC4f& zZZLD;66P~VBLqRhK$C}4xIPSVfo9sosJ(u3xp~%%hiHdF9kx z#|x8*Agl7p6fZJ1Ha1(U*VPB#CvDO^9@WT+6YEhFH3V^nt?uv4jyy7T#IPyDv6w5p z8Yrd!wlBW?im#fq(Giis&EgOEuf+xb`$lGkrAwFXX3Jhx%IAyGn(et0hmUQ9u|`!4 z1i`qWcn9-c81=?GE- zB#8rQ5~xTaxkV@ltPV^`#1WnJD$ziwkNiKqg3LXD^71H9D?Bm83JRIkdVOSS`tb5& z*Z$!@t?e8<(rAEj$)!!4wjoFF=rpV*Fl4}0I2-pM+ynVx81dj>k$Z+6YU1nP>fswV zx6!Dj;1C~6FwnNhiC_Ay-}u8Nr)}7$K|C=piZlCR1Mod$Worysum(N^-xwZ!=v^Q9 z@Y~+`7k}{^u0HZe*7Zf2q1%~_%_~t{ET9qbx|qtQrBEy~)6oywF~nkt#gLNZnOhx<{HOD;KJ=SU zdvR}-t%qr!LyV%waVI({u?g7bJYX3VazF|M_9$!wpBRclC|mATTQf73L@X;JbAHhc zf3O)?km@%uo*uLfp5z7?%#0VYTq0(5zzWwV2YN}yTw|Gj=DPpd{+o}!&>26bS};QN z>Gvs!fnWtt4)7+Rk)$ZHo*!GY@}WQY$cNwjJMVknuTE?@Yx}{;?$q(wUdWVG*eY2I zwg%Q1)Y&0r2g6PSjCO?O@JycX?X-`rxcGu?@A}Z+{?ea)@)JKXx?#h%ZkGExEW`wp zwpuH?|MzcyHhpN@i_+92E<;@@q3oe3C;}^dMQi6d7 zzu&yju)NO7h~dGhPPuOIi?0KA&VOOw_N71j&CfO8yYoJ~HJ{~HJ*BxoTKLdc9O-r9UuJo5x_b?>t)az;mDlNpZ8-g-}a){{rHWc=yqTYf}(#|`?nYY z{6IDU@x?4BUdEvi1RuhI*Zu5Uul?&!f97=?&phkF|Eo?E7ubWMBGTq zOZ~N9`1QH>UHdYmGC{0HLO^B&U84vlp5RO=R3QMSmZB#ba-#h&|EZt(#3!%&#>;;9 z&))lM7eC{f+l!=m;ApFNeBV?ydvL1g9&Huf$+@C?Y_@0}ohhcLvT($WE#3djSG@f8 z-}~4{-ul-!eD%dIdHqj*Mgs5mUV<|Oa%9}x-0I#ReduS*9e2N0hr!TXS;$m+hg0p{ z2L+UiwG^ikRN_>K=79!GRCw{UZ1&7K)4)w{@ z@nb6)aAhDv8BIf~jP6+%T<{eDUBf)jaf>H+Le@*6-S&i$Hphiws3Z{E1?(J4mWM`T^X|hB*4m$X=RdCShmX|9 zlyJpG4V-nhhZH#|Fq|4_yMUj`Kupp$NmkKs1`q<0+_*mN!b8^6d}xA{Iq90cMWjHSx$$hI;cZRg>LPpAH=BR~u zbMvQo14*?@kEhwZqqbR}4HBw% zuFxWO{Ng~FK^MRvGhjXopkm*vomaJ&J7!W@T%1V3%J4lW`KU|BJD>deuT4(3myiGK zYd>m-hYw0ogr0LCH82|8&NQHOCbm!!>2|aB(9)&5U;7I`_u<$4f{m{?b`yPH-eJHJw&kYya2&77Eib28AVDavY3I~%C2b!k&M8$b*a)0z* zt_33L4x)kuu8aBUiEtn7JYdC~x9(AuBk$veGn7!FJ}SBYno@}#?l(03MkZKdhG;Nv zzUXPil83ex-Sf9>-}J)gzVE`TuDI^3EoY3r{UtB_$J}pU*{nH|>iM8J2~brGB@R0u z*k*QZ-M;Ls%Pv3MZOs+7p1>%>dqF*Q_Oa~`F2Cp2o0g2%ENk#k5)`TkUSJxH&Y9<3 za6N!FG0#tXOE0iLIO)QnLt7fgIkK*JwCJSUCy%mABC>lhK9iY|=LqLsaN*&Jwd?Xi zJ*aYy{D=J&Zw{thldf5}Ue>H#CkGyS2(XM0fP`W0zvupC-N{bP)yjpL zaqtFjK%k&DbCkhAU9L&0Y=Z<5X#QWG{LDjZ#+I!3lY75e5b?@=^-1Jr{K|Y>G=?ac28cuL@@b?5+1xqne9LQHN51H$@q3 zjPFV@{C?t;D;>!E)`tkDZN0#=nK+u%*B-w8AMV|9_or^FHM}wP1i0*y5vx&RNmh61d|Gt-kKU@KvQt(pUjF>HYMF=9&-Me@9$`i*XtuYZYp#G=Pdd=RlHzm`gh zS_LbT{!KrMvV`HqnIaABYCWn02AQEk7+zFu(Q4IRzxkqL?|AalGs-+v6onzo4jFuE z*Mrzz%mGOaqCn09A?b$%Rc|IHf)>HFPt1%E*a`qOoJ)nR6-2R^z^a0!Oq;6&WP`=0 zN{D0TKp-$19}5(r8au~E2{M=t2UQk^7gnDZNTaW(V=4A*#!jfB->I58~+XFeFG52V<@J5G2oix7W*OvR-~7>*dF@JU`yev*}Kj zwR*wl9TD+qqTV?aN<@wHq5nBzhrcetQvZ=hPnt*XKhgF=Dvp~T+(t#6$3rWZf|BVYOWhhMyJ`$HQK?0oq2fBMLW zUi#B7dErNH{qmPDTsCYSG-jXMQn1_3rT3JlUiGc|_*kz9MgJzLTE;A?)QX3;U%^rg z!PzWR@ZI|#1sTA4D!C3Q$0~*AOaDY-?jh$kc##1mi^sn)JFi+KKJ5FznBZ!tPH5Y zS*ENbBj5Pa4X=kwhQ+HEpa465*bQyGUDeJ7BU&bS#V|I~viGzBf>L}d5Y3&>rkg=$ zhC(ql?0d5f67MVwShz4^gOUHY(?6++Q{92*J@P#mDy~os@a&_Im=q*Ive3?KZP@|I zp0xc7@402u?Vq@<*$ix!Hwn+YdIam&ci>wA3|IbJ)XyUo3IGBO6xmc4)b-HNg&8*3 zacBhZ{oCUxh`_FZ_k^GcrsuqW(s}1S{Epv$*RR3w!HE5S;xwT42elC=+oU_B(L⋙b(^qOpv=aY+_Q*6V2C7CXw>qi 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%0A5m%fUP?`FFE$W3jVlwmU!a#{u?fP_Mvb*PzG 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

bUl<5o{O(bQ~j67Fq;M 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 + + + + + 蹬王之王 + + + +

+
+

蹬王之王

+

实时追踪积分与重置卡的到期时间,按「先过期先用」决定用卡还是留积分,不让额度白白作废

+

+ + 正在连接实时更新… +

+
+
+ + +
+
+ +
+
+
7 天内将要过期
+
—
+
正在统计…
+
+
+
+
30 天内过期
+
—
+
+
+
有效余额
+
—
+
+
+
已过期损失
+
—
+
+
+
+ +
+
+
5 小时限额
+
—
+
+
+
+ +
+
+
积分总余额
+
—
+
+
+
+
最早到期
+
—
+
+
+
+
可用重置卡
+
—
+
+
+
+ +
+ 加载中 +
+
正在读取额度与到期信息…
+
+
+
+ +
+
+ +
+ + + + +
+
+
+
+

+ 判定结论为「保留积分」时不执行任何写操作;「立即判定一次」可随时手动触发,无节流。 +

+
+ +
+
+ + +
+
+

+ 与上面的「自动执行」是两套独立机制:上面只在本页面打开时生效,这里交给系统常驻进程, + 两者用同一套「先过期先用」决策,不会重复扣卡(服务端按幂等键去重)。 +

+
+ +
+
+
+ +
+

自动化阈值

+

+ 改完约 1 分钟内生效 —— 后台服务每轮重读配置,不需要重启。 +

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

+
+ +
+

积分到期明细

+

+ +
读取中…
+
+ +
+
+

重置卡到期

+ +
读取中…
+
+
+

平台积分池

+
读取中…
+
+
+ +
+

你没来得及蹬完的 token

+

+ +
暂无过期未用完的积分
+
+ +
+
+ 本地账本(唯一数据源) · 读取中… +

+ 这个插件**不读** MiniMax Code 的登录凭据、**不碰**宿主内部数据库, + 所以额度/积分/重置卡的信息全部来自你下面这份本地账本。 + 路径:~/.config/mcode-reset-card/ledger.json +

+

+ 形状:{"schemaVersion":1,"quota":{"fiveHour":{"usedPercent":0}},"cards":[],"credits":[]} + —— cards 每项含 cardId / label / sourceType / outBizNo / expireTimeMs; + credits 每项含 label / source / granted / used / balance / expireTimeMs。 + 缺 credits 字段会被当成「数据不完整」⇒ 只给建议、不下结论。 +

+ +
+ + + +
+
+
+ + + + diff --git a/plugins/hylouis233/expiry-guardian/miniapp/miniapp.json b/plugins/hylouis233/expiry-guardian/miniapp/miniapp.json new file mode 100644 index 0000000..e783c23 --- /dev/null +++ b/plugins/hylouis233/expiry-guardian/miniapp/miniapp.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "artifacts": { + "client": [ + "./miniapp/client" + ], + "node": [ + "./miniapp/node" + ] + }, + "runtime": { + "kind": "process", + "entry": "./miniapp/node/server.mjs", + "lifecycle": "on-demand" + }, + "surface": { + "path": "/dashboard" + }, + "agentAccess": [ + "session.run" + ], + "agentConcurrency": 2, + "mcpEndpoints": [ + { + "server": "expiry-guardian", + "path": "/mcp/expiry-guardian" + } + ] +} diff --git a/plugins/hylouis233/expiry-guardian/miniapp/node/mcp.mjs b/plugins/hylouis233/expiry-guardian/miniapp/node/mcp.mjs new file mode 100644 index 0000000..b2ccd37 --- /dev/null +++ b/plugins/hylouis233/expiry-guardian/miniapp/node/mcp.mjs @@ -0,0 +1,143 @@ +// @ts-check +/** + * 蹬王之王 local MCP 端点。 + * + * # 为什么需要它(2026-10-20 实测踩到的坑) + * + * MiniApp 的 manifest 可以声明 `mcpEndpoints`,让**别的**插件在它们的回合里 + * 用到本插件的 MCP 工具。而 Host 在发布时会检查「声明的端点是否真的就绪」 + * (探活方式 = MCP 的 `initialize` + `tools/list`)。 + * + * ⚠️ 而且 Host 的「已发布快照」是**粘的**:一旦某个版本的 manifest 声明过 + * 端点,后续版本**必须继续声明同样的端点**,否则发布会被 + * `MCP_PUBLICATION_INVALID` 挡下(`used.size !== expected.size`)。 + * ⇒ 声明了就得**真的实现**,否则端点探活失败,同样发布不了。 + * + * # 这个端点提供什么 + * + * | 工具 | 作用 | + * | --- | --- | + * | `watchdog_status` | 查本地账本里的额度、重置卡、积分与当前判定结论 | + * | `watchdog_decide` | 立即判定一次:现在该不该用卡、用哪张、为什么(**只判定不扣卡**) | + * + * 这样别的插件(例如 minimax-bot)可以在自己的回合里直接问蹬王之王 + * 「额度还剩多少」「哪些 bot 挂了」,而不必读文件。 + */ + +const PROTOCOL_VERSIONS = ['2025-06-18', '2025-03-26', '2024-11-05']; + +/** 工具定义(模型可见,所以用中文)。 */ +function toolDefs() { + return [ + { + name: 'watchdog_status', + description: + '查蹬王之王的当前状态:5 小时额度用量、重置卡与积分的到期时间、' + + '以及待唤醒的 bot 列表(挂了但还没叫醒的)。', + inputSchema: { type: 'object', properties: {}, required: [], additionalProperties: false }, + }, + { + name: 'watchdog_decide', + description: + '立即判定一次额度:按「先过期先用」算出现在该不该用重置卡、用哪一张、为什么。' + + '**只判定不扣卡** —— 真要扣请用面板上的按钮。', + inputSchema: { type: 'object', properties: {}, required: [], additionalProperties: false }, + }, + ]; +} + +/** + * 创建 MCP 处理器。 + * + * @param {{ + * status: () => any, + * decide: () => Promise, + * }} deps + */ +export function createMcpHandler(deps) { + /** @param {any} message */ + async function handleRpc(message) { + if (!message || typeof message !== 'object' || message.jsonrpc !== '2.0') { + return { jsonrpc: '2.0', id: null, error: { code: -32600, message: 'Invalid Request' } }; + } + const { id, method, params } = message; + const isNotification = id === undefined || id === null; + try { + let result; + switch (method) { + case 'initialize': { + const requested = params?.protocolVersion; + result = { + protocolVersion: PROTOCOL_VERSIONS.includes(requested) ? requested : PROTOCOL_VERSIONS[0], + capabilities: { tools: { listChanged: false } }, + serverInfo: { name: 'expiry-guardian', version: '1.6.0' }, + instructions: + '蹬王之王:基于本地账本追踪积分与重置卡的到期时间,' + + '并给出「先过期先用」的用卡/留积分建议。' + + '用 watchdog_status 查状态,watchdog_decide 立即判定一次(**只判定不扣卡**)。', + }; + break; + } + case 'ping': + result = {}; + break; + case 'tools/list': + result = { tools: toolDefs() }; + break; + case 'tools/call': { + const name = params?.name; + const args = params?.arguments ?? {}; + if (name === 'watchdog_status') { + // ⚠️ **必须 await**(2026-10-20 实测发现): + // `deps.status()` 是 async ⇒ 不 await 拿到的是 **Promise**, + // 而 `JSON.stringify(Promise)` 得到的是字符串 `"{}"` + // ⇒ 工具永远返回空对象,调用方什么也看不到。 + result = { content: [{ type: 'text', text: JSON.stringify(await deps.status(), null, 2) }] }; + } else if (name === 'watchdog_decide') { + const r = await deps.decide(); + result = { content: [{ type: 'text', text: JSON.stringify(r, null, 2) }] }; + } else { + return { jsonrpc: '2.0', id, error: { code: -32602, message: `Unknown tool: ${name}` } }; + } + break; + } + default: + if (isNotification) return undefined; + return { jsonrpc: '2.0', id, error: { code: -32601, message: `Method not found: ${method}` } }; + } + return isNotification ? undefined : { jsonrpc: '2.0', id, result }; + } catch (error) { + return { + jsonrpc: '2.0', + id, + error: { code: -32603, message: error instanceof Error ? error.message : String(error) }, + }; + } + } + + /** + * 处理一次 MCP HTTP 请求。 + * + * @param {any} request + * @param {any} response + * @param {any} body 已解析的请求体(POST 时) + */ + return async function handleMcp(request, response, body) { + const messages = Array.isArray(body) ? body : body ? [body] : []; + if (messages.length === 0) { + response.writeHead(400, { 'content-type': 'application/json' }); + response.end(JSON.stringify({ error: 'empty request' })); + return; + } + const out = []; + for (const message of messages) { + const r = await handleRpc(message); + if (r !== undefined) out.push(r); + } + response.writeHead(200, { + 'content-type': 'application/json', + 'cache-control': 'no-store', + }); + response.end(JSON.stringify(out.length === 1 ? out[0] : out)); + }; +} diff --git a/plugins/hylouis233/expiry-guardian/miniapp/node/server.mjs b/plugins/hylouis233/expiry-guardian/miniapp/node/server.mjs new file mode 100644 index 0000000..c70177c --- /dev/null +++ b/plugins/hylouis233/expiry-guardian/miniapp/node/server.mjs @@ -0,0 +1,1440 @@ +// @ts-check +/** + * 蹬王之王 — 积分与重置卡的到期决策看板。 + * + * 数据源(全部经实测确认,非推测)。两套 API 分属不同域名: + * + * 开放平台积分 → www.minimaxi.com + * GET /backend/account/token_plan_credit → 余额 + 各积分池到期时间 + * GET /backend/account/token_plan/remains_percent → 5小时/周额度用量 + * GET /backend/account/reset_card/list → 重置卡与到期时间 + * POST /backend/account/reset_card/use → 使用一张重置卡 + * + * MiniMax Code 积分 → agent.minimaxi.com + * GET /minimax-cloud/api/v1/credit/details → 逐笔授予/消耗/到期明细 + * + * 决策规则:把「最早到期的积分」(平台或 Code 任一)与「最早到期的重置卡」比, + * 谁先过期先用谁。积分先过期 → 不用卡,让积分先消耗完;重置卡先过期 → 用卡 + * 把额度重置回来,把更耐放的积分留着。 + * + * 鉴权:与桌面端共用同一登录态,经 OAuth lease socket 取短期 access token。 + * 凭据只在本进程内存中使用,绝不下发给页面、绝不写日志。 + */ + +import { createServer } from 'node:http'; +import { readFileSync, writeFileSync, renameSync, mkdirSync, existsSync, rmSync } from 'node:fs'; +import { createMcpHandler } from './mcp.mjs'; +import { readFile } from 'node:fs/promises'; +import { randomBytes } from 'node:crypto'; +import { join, dirname } from 'node:path'; +import { connect } from 'node:net'; +import { homedir } from 'node:os'; + +/** @typedef {import('./miniapp-api.js').MiniAppContext} MiniAppContext */ +/** @typedef {import('./miniapp-api.js').MiniAppLifecycle} MiniAppLifecycle */ + + +// ── 解析 ────────────────────────────────────────────────────────────────────── +/** 百分数字符串(如 "71%")转数字。接口就是这种格式,直接 Number() 会得到 0。 */ +function percent(value) { + if (typeof value === 'string') value = value.trim().replace(/%/g, ''); + const n = Number(value); + return Number.isFinite(n) ? n : 0; +} + +/** 金额字符串(可能带千分位)转数字。 */ +function amount(value) { + if (typeof value === 'string') value = value.replace(/,/g, '').trim(); + const n = Number(value); + return Number.isFinite(n) ? n : 0; +} + +const BUCKET_LABEL = { 2: '充值', 3: '赠送' }; +/** Code 积分 credit_type:1=购买,2=赠送(取自桌面端 Purchased / Free 判定)。 */ +const CODE_CREDIT_LABEL = { 1: '购买', 2: '赠送' }; + +/** 开放平台积分池(/backend/account/token_plan_credit)。 */ +function parsePlatformPools(credit) { + const buckets = credit?.balance_breakdown?.buckets ?? []; + return buckets + .filter((b) => b && typeof b.balance === 'number') + .map((b) => ({ + kind: 'platform', + source: 'platform', + label: BUCKET_LABEL[b.source] ?? `来源${b.source}`, + balance: b.balance, + expireTimeMs: typeof b.expire_time_ms === 'number' ? b.expire_time_ms : null, + })) + .sort((a, b) => (a.expireTimeMs ?? Infinity) - (b.expireTimeMs ?? Infinity)); +} + +/** + * MiniMax Code 积分明细(/minimax-cloud/api/v1/credit/details)。 + * + * 分页参数是 `page_number` / `page_size`(下划线命名),且必须带 + * `include_expired=1` 才会返回历史记录——桌面端就是这么调的 + * (见 app.asar 中 open-platform-commerce 的 fetch 函数)。 + * + * 不带 include_expired 时接口只返回当前有效的最近 20 条,据此判断「已过期多少」 + * 会得出完全错误的结论(曾经据此误答「0 过期」)。page_size 上限 100。 + */ +function parseCodeCredits(payload) { + const details = Array.isArray(payload?.details) ? payload.details : []; + const now = Date.now(); + const items = details + .filter((d) => d && (d.credit_type === 1 || d.credit_type === 2)) + .map((d) => ({ + kind: 'code-credit', + source: 'code', + label: CODE_CREDIT_LABEL[d.credit_type] ?? `类型${d.credit_type}`, + granted: amount(d.granted_amount), + consumed: amount(d.consumed_amount), + balance: amount(d.remaining_amount), + expireTimeMs: typeof d.expire_at_ms === 'number' ? d.expire_at_ms : null, + grantedAtMs: typeof d.granted_at_ms === 'number' ? d.granted_at_ms : null, + // 过期时仍有余额 = 真实损失;过期但已用尽不算损失 + lost: typeof d.expire_at_ms === 'number' && d.expire_at_ms < now && amount(d.remaining_amount) > 0, + expired: typeof d.expire_at_ms === 'number' && d.expire_at_ms < now, + })) + .sort((a, b) => (a.expireTimeMs ?? Infinity) - (b.expireTimeMs ?? Infinity)); + + const live = items.filter((d) => !d.expired); + return { + items, + totalCount: Number(payload?.total_count ?? items.length), + truncated: Number(payload?.total_count ?? 0) > items.length, + liveBalance: live.reduce((sum, d) => sum + d.balance, 0), + lostBalance: items.filter((d) => d.lost).reduce((sum, d) => sum + d.balance, 0), + lostCount: items.filter((d) => d.lost).length, + expiredCount: items.filter((d) => d.expired).length, + }; +} + +/** + * 未来 N 天内将过期的积分子集。 + * 这是整个看板最有价值的数字:签到分按天逐笔到账、各自 30 天到期, + * 所以到期是连续排队的滚动流失,不是一次性清算。 + */ +function expiringWithin(items, days, now = Date.now()) { + const limit = now + days * 86_400_000; + return items.filter( + (d) => !d.expired && d.balance > 0 && d.expireTimeMs !== null && d.expireTimeMs <= limit, + ); +} + +/** + * 账户积分汇总(POST /matrix/api/v1/commerce/get_membership_info)。 + * + * 这是 MCode 用量页上「积分」那一栏的权威口径: + * total_remaining_amount 总余额(截图里的 30947) + * purchased_remaining_amount 购入部分 + * free_remaining_amount 赠送部分 + * + * 与另两个口径的关系(已实测核对,不要混算): + * purchased ≈ token_plan_credit 的 remaining_credits(6487.506 vs 6487,小数为精度差) + * free ≥ credit/details 明细之和(24460 vs 17400,因该接口只返回最近 20 笔) + * 因此这里只作为「总余额」展示,**不参与**到期排序,避免与明细重复计数。 + */ +function parseCreditSummary(payload) { + const s = payload?.op_credit_summary; + if (!s) return null; + const total = amount(s.total_remaining_amount); + const purchased = amount(s.purchased_remaining_amount); + const free = amount(s.free_remaining_amount); + if (!total && !purchased && !free) return null; + return { total, purchased, free }; +} + +// ── 本地账本:数据来源 ───────────────────────────────────────────────────────── +// +// 社区插件不能读取 MiniMax Code 的登录凭据(2026-10-20 管理员 review), +// 所以这里**不再**调账号接口 ⇒ 额度/积分/重置卡的信息改由用户自己维护的 +// 本地账本提供:`~/.config/mcode-reset-card/ledger.json`。 +// +// ⚠️ 账本形状与 Rust 守护进程(`daemon/rust/src/ledger.rs`)**必须逐字一致**。 +const LEDGER_PATH = join(homedir(), '.config', 'mcode-reset-card', 'ledger.json'); + +/** + * 读账本。 + * + * @returns {{ok: true, ledger: any}|{ok: false, error: string}} + * ⚠️ 「读不到」与「读到但内容是空的」必须分开: + * 读不到 ⇒ 数据不完整 ⇒ 决策走 wait(绝不能当成「没有积分」⇒ 结论翻转成「用卡」)。 + */ +function readLedger() { + let raw; + try { + raw = readFileSync(LEDGER_PATH, 'utf8'); + } catch (e) { + return { ok: false, error: `读不到账本 ${LEDGER_PATH}(${e?.message ?? e})` }; + } + try { + return { ok: true, ledger: JSON.parse(raw) }; + } catch (e) { + return { ok: false, error: `账本 ${LEDGER_PATH} 解析失败(${e?.message ?? e})` }; + } +} + +/** 账本里的额度 → 与 `parseQuota` 同构的对象。 */ +function ledgerQuota(q, triggerPercent) { + const mk = (o, fallbackUnlimited) => { + const used = Number(o?.usedPercent ?? 0); + const total = Number(o?.totalPercent ?? 100) || 100; + const unlimited = Boolean(o?.unlimited ?? fallbackUnlimited); + return { + usedPercent: used, + totalPercent: total, + remainingPercent: Math.max(0, (total - used) / total) * 100, + exhausted: !unlimited && total > 0 && used >= total, + unlimited, + triggered: isTriggered(used, total, unlimited, triggerPercent), + resetTimeMs: Number(o?.resetTimeMs ?? 0) || null, + }; + }; + return { + fiveHour: mk(q?.fiveHour, false), + weekly: mk(q?.weekly, true), + }; +} + +/** + * 账本 → 决策引擎的输入(形状与之前从账号接口拿到时**完全一致**)。 + * + * ⇒ 决策逻辑、三方一致性校验(Rust / Mini App / Python 逐字比对)原样保留。 + */ +function ledgerInputs(v, now) { + const rawCredits = Array.isArray(v?.credits) ? v.credits : null; + const items = (rawCredits ?? []).map((c) => { + const balance = Number(c?.balance ?? 0); + const expireTimeMs = Number(c?.expireTimeMs ?? 0) || null; + const expired = expireTimeMs !== null && expireTimeMs < now; + return { + kind: c?.source === 'platform' ? 'platform' : 'code-credit', + source: c?.source === 'platform' ? 'platform' : 'code', + label: String(c?.label ?? '积分'), + granted: Number(c?.granted ?? 0), + consumed: Number(c?.used ?? 0), + balance, + expireTimeMs, + grantedAtMs: null, + // 过期时仍有余额 = 真实损失;过期但已用尽不算损失 + lost: expired && balance > 0, + expired, + }; + }); + const codeItems = items.filter((i) => i.source === 'code'); + const platformPools = items.filter((i) => i.source === 'platform'); + const live = codeItems.filter((i) => !i.expired); + const codeCredits = { + items: codeItems, + totalCount: codeItems.length, + truncated: false, + liveBalance: live.reduce((sum, d) => sum + d.balance, 0), + lostBalance: codeItems.filter((d) => d.lost).reduce((sum, d) => sum + d.balance, 0), + lostCount: codeItems.filter((d) => d.lost).length, + expiredCount: codeItems.filter((d) => d.expired).length, + }; + const cards = (Array.isArray(v?.cards) ? v.cards : []).map((c) => { + const expireTimeMs = Number(c?.expireTimeMs ?? 0) || null; + return { + cardId: String(c?.cardId ?? ''), + label: String(c?.label ?? '重置卡'), + sourceType: String(c?.sourceType ?? ''), + outBizNo: String(c?.outBizNo ?? ''), + expireTimeMs, + createTimeMs: null, + expired: expireTimeMs !== null && expireTimeMs <= now, + }; + }); + return { + platformPools, + codeCredits, + cards, + // ⚠️ `credits` 字段缺失 ⇒ 数据不完整(不是「没有积分」)。 + creditDataComplete: rawCredits !== null, + }; +} + +// ── 共享配置(与 Rust 守护进程 / Python 读同一个文件)───────────────────────── +// 这是三份实现不漂移的前提:Node / Rust / Python 都从这里取阈值, +// 谁都不许再把 99 写死在自己代码里。 +// 路径 ~/.config/mcode-reset-card/config.json 与 Rust config.rs 一致。 +const CONFIG_PATH = join(homedir(), '.config', 'mcode-reset-card', 'config.json'); +const CONFIG_DIR = dirname(CONFIG_PATH); + +/** + * 下列常量只是**默认值**,仅在配置文件缺失或非法时兜底。 + * 实际生效值一律来自 loadConfig()。 + * + * 为什么默认 99:等额度耗尽再处理,中间那次请求已经失败,会打断 + * 当前目标正在跑的自动执行。提前一个百分点介入,代价几乎为零 + * (剩余 1% 本来也用不完),但能避免任务被硬中断。 + */ +const DEFAULT_QUOTA_TRIGGER_PERCENT = 99; +const DEFAULT_TIGHT_PERCENT = 80; +const DEFAULT_LOW_PERCENT = 95; +/** + * 距 5 小时额度刷新不足这么多分钟时,不消耗重置卡(额度马上就自己回来了)。 + * 实际生效值来自 config.json 的 cardSkipBeforeResetMinutes。 + */ +const DEFAULT_CARD_SKIP_BEFORE_RESET_MINUTES = 60; + +function defaultConfig() { + return { + schemaVersion: 1, + cardTriggerPercent: DEFAULT_QUOTA_TRIGGER_PERCENT, + cardSkipBeforeResetMinutes: DEFAULT_CARD_SKIP_BEFORE_RESET_MINUTES, + quotaLevels: { tight: DEFAULT_TIGHT_PERCENT, low: DEFAULT_LOW_PERCENT }, + }; +} + +function clampNumber(value, lo, hi, fallback) { + const n = Number(value); + if (!Number.isFinite(n)) return fallback; + return Math.min(hi, Math.max(lo, n)); +} + +/** + * 逐字段校验并夹紧,返回 (配置, 问题列表)。 + * + * 非法组合**整体回退默认并报出来**,绝不静默纠正 —— + * 静默纠正会让人以为自己设的生效了。字段与 Rust config.rs 保持同名同义。 + */ +export function normalizeConfig(raw) { + const d = defaultConfig(); + const issues = []; + const src = raw && typeof raw === 'object' && !Array.isArray(raw) ? raw : {}; + + const rawCard = src.cardTriggerPercent; + const cardTriggerPercent = clampNumber(rawCard, 1, 100, d.cardTriggerPercent); + if (rawCard != null && Number(rawCard) !== cardTriggerPercent) { + issues.push(`cardTriggerPercent=${rawCard} 超出 1..100,已夹到 ${cardTriggerPercent}`); + } + + const lv = src.quotaLevels && typeof src.quotaLevels === 'object' ? src.quotaLevels : {}; + let tight = clampNumber(lv.tight, 1, 100, d.quotaLevels.tight); + let low = clampNumber(lv.low, 1, 100, d.quotaLevels.low); + // 分界点必须 0 < tight < low;非法组合整体回退默认,而不是悄悄调序。 + if (!(tight < low)) { + if (Object.keys(lv).length > 0) { + issues.push(`quotaLevels 需满足 tight < low(收到 tight=${tight} low=${low}),已整体回退默认`); + } + tight = d.quotaLevels.tight; + low = d.quotaLevels.low; + } + + const rawSkip = src.cardSkipBeforeResetMinutes; + const cardSkipBeforeResetMinutes = clampNumber(rawSkip, 0, 1440, d.cardSkipBeforeResetMinutes); + if (rawSkip != null && Number(rawSkip) !== cardSkipBeforeResetMinutes) { + issues.push(`cardSkipBeforeResetMinutes=${rawSkip} 超出 0..1440,已夹到 ${cardSkipBeforeResetMinutes}`); + } + + const config = { + schemaVersion: 1, + cardTriggerPercent, + cardSkipBeforeResetMinutes, + // ⚠️ `resumeCronId` 已彻底删除(2026-10-20):本插件不再武装/解除武装任何 cron。 + // 恢复流程改为:守护进程(Host 外)只写请求文件,**MiniMax Bot 自己的 MiniApp** + // 用 `agent.run` 投递(只有它对 bot 会话有归属权限)。 + quotaLevels: { tight, low }, + }; + return { config, issues }; +} + +/** 读配置。文件不存在是正常情况(首次运行),返回默认值且不记 issue。 */ +/** Bot 守护配置的归一化:非法值夹到合法区间,缺失用默认。 */ +function readConfig() { + let text; + try { + text = readFileSync(CONFIG_PATH, 'utf8'); + } catch (e) { + if (e && e.code === 'ENOENT') return { config: defaultConfig(), issues: [] }; + return { config: defaultConfig(), issues: [`配置读取失败(${e.message}),正在用默认值`] }; + } + try { + return normalizeConfig(JSON.parse(text)); + } catch (e) { + return { config: defaultConfig(), issues: [`配置解析失败(${e.message}),正在用默认值`] }; + } +} + +function loadConfig() { + return readConfig().config; +} + +/** 原子写:写 tmp 再 rename。同目录 rename 在 POSIX 上是原子的。 */ +function writeConfig(config) { + mkdirSync(CONFIG_DIR, { recursive: true }); + const tmp = `${CONFIG_PATH}.tmp`; + writeFileSync(tmp, `${JSON.stringify(config, null, 2)}\n`, 'utf8'); + renameSync(tmp, CONFIG_PATH); +} + +/** + * 等级 → 中文。**属于 parity 契约的一部分**,改一个字三方都要改。 + * 与 Rust decision.rs 的 LEVEL_LABEL 逐字对应。 + */ +const LEVEL_LABEL = { + comfortable: '额度充足', + tight: '额度紧张', + low: '额度不足', + burned: '额度燃尽', +}; + +/** + * 距 5 小时额度刷新还有多少分钟。取不到刷新时间时返回 null。 + * + * 与 Rust `minutes_to_reset()`、Python `_minutes_to_reset()` 同一口径: + * 已过去的时间按 0 算。 + */ +function minutesToReset(fiveHour, nowMs) { + const reset = fiveHour?.resetTimeMs; + if (typeof reset !== 'number' || !Number.isFinite(reset)) return null; + return Math.max(0, (reset - nowMs) / 60_000); +} + +/** + * 四档红绿灯分档。与 Rust `quota_level()` 逐行对应。 + * + * 燃尽档由 used >= total 判定,**不可配** —— 它是事实,不是阈值。 + */ +function quotaLevel(used, total, unlimited, tight, low) { + if (unlimited || total <= 0) return 'comfortable'; + if (used >= total) return 'burned'; + const ratio = (used / total) * 100; + if (ratio >= low) return 'low'; + if (ratio >= tight) return 'tight'; + return 'comfortable'; +} + +/** 是否达到触发线。不限量和总量为 0 都不触发。 */ +function isTriggered(used, total, unlimited, triggerPercent = DEFAULT_QUOTA_TRIGGER_PERCENT) { + if (unlimited || total <= 0) return false; + return used >= (total * triggerPercent) / 100; +} + +function parseQuota(payload, triggerPercent = DEFAULT_QUOTA_TRIGGER_PERCENT) { + const models = payload?.model_remains ?? []; + const general = + models.find((m) => m?.model_name === 'general') ?? models.find((m) => m?.model_name) ?? null; + if (!general) return null; + const total = percent(general.current_interval_total_percent) || 100; + const used = percent(general.current_interval_used_percent); + const weeklyTotal = percent(general.current_weekly_total_percent) || 100; + const weeklyUsed = percent(general.current_weekly_used_percent); + const weeklyUnlimited = general.current_weekly_status === 3; + return { + fiveHour: { + usedPercent: used, + totalPercent: total, + remainingPercent: Math.max(0, (total - used) / total) * 100, + exhausted: general.current_interval_status !== 3 && total > 0 && used >= total, + unlimited: general.current_interval_status === 3, + // 决策用:到触发线(默认 99%)即视为「该动手了」 + triggered: isTriggered(used, total, general.current_interval_status === 3, triggerPercent), + resetTimeMs: general.end_time ?? null, + }, + weekly: { + usedPercent: weeklyUsed, + totalPercent: weeklyTotal, + unlimited: weeklyUnlimited, + exhausted: !weeklyUnlimited && weeklyTotal > 0 && weeklyUsed >= weeklyTotal, + // 周限额此前没有这个字段,导致 Node 侧忽略了周限额耗尽 —— 与 Rust/Python 不一致 + triggered: isTriggered(weeklyUsed, weeklyTotal, weeklyUnlimited, triggerPercent), + resetTimeMs: general.weekly_end_time ?? null, + }, + }; +} + +/** + * 重置卡的使用流水。 + * + * 关键点:`create_time` 是**必填**参数,桌面端就是那样调的。 + * 传 `create_time=0` 表示不限起始时间;传一个具体时间戳反而会返回 + * 2013 invalid params —— 那是一条**错误**,不是「没有记录」。 + * 曾经把这条错误读成 total=0,因而误判「一张卡都没用过」。 + */ +// ── 决策:先过期先用 ────────────────────────────────────────────────────────── +const SOURCE_NAME = { platform: '平台积分', code: 'Code 积分', card: '重置卡' }; + +/** + * 跨三类来源比较到期时间:平台积分池、Code 积分明细、重置卡。 + * + * 只有「最早到期的积分」与「最早到期的重置卡」直接可比—— + * 决定用不用卡,看的是哪一边更快作废: + * 卡先过期 → 用卡把额度重置回来,把更耐放的积分留着; + * 积分先过期 → 不用卡,让积分自然消耗完,卡留到以后更划算的时候。 + */ +/** + * @param creditDataComplete 积分数据是否**完整读到**。 + * + * ⚠️ 2026-10-19 PR #28 review 修:读不到 ≠ 没有。 + * 之前 `credit/details` 失败会返回 null ⇒ codeCredits 为空 ⇒ + * `decide` 看到「没有积分」⇒ 结论从「留卡」翻转成「用卡」。 + * 而扣卡是**真实写操作** —— 把网络故障当成业务状态会误扣真卡。 + * ⇒ 数据不完整时一律**不做写操作**(动作降为 wait),只如实报出来。 + */ +function decide( + { platformPools, codeCredits, cards, quota, creditDataComplete = true }, + nowMs = Date.now(), +) { + const now = nowMs; + const liveCards = cards.filter((c) => !c.expired && c.outBizNo && c.sourceType); + const liveCredits = [...platformPools, ...codeCredits].filter( + (c) => c.balance > 0 && c.expireTimeMs && c.expireTimeMs > now, + ); + + const earliestCard = liveCards[0] ?? null; + const earliestCredit = liveCredits.sort( + (a, b) => (a.expireTimeMs ?? Infinity) - (b.expireTimeMs ?? Infinity), + )[0] ?? null; + + const cardExpire = earliestCard?.expireTimeMs ?? null; + const creditExpire = earliestCredit?.expireTimeMs ?? null; + const creditName = earliestCredit ? SOURCE_NAME[earliestCredit.source] : '积分'; + + let action = 'wait'; + let reason = ''; + let usedCard = false; + + // 「等级」与「动作」是两个独立维度:动作说**该做什么**,等级说**额度还剩多少**。 + // 混在一起的话,93% 已经紧张时页面徽章仍会写「额度充足」——那就是误导。 + // 等级必须在这里算一次并随判定一起下发,页面才有依据上色。 + const cfg = loadConfig(); + const { quotaLevels } = cfg; + const level = quota + ? quotaLevel( + quota.fiveHour.usedPercent, + quota.fiveHour.totalPercent, + quota.fiveHour.unlimited, + quotaLevels.tight, + quotaLevels.low, + ) + : 'comfortable'; + + // ── 5 小时额度即将自己刷新 → 不烧重置卡(纯浪费)── + // 与 Rust `minutes_to_reset()` 同一口径。 + const resetInMin = minutesToReset(quota?.fiveHour, now); + const skipMinutes = Number(cfg.cardSkipBeforeResetMinutes ?? DEFAULT_CARD_SKIP_BEFORE_RESET_MINUTES); + const skipCardReason = + skipMinutes > 0 && resetInMin !== null && resetInMin <= skipMinutes + ? `5 小时额度 ${resetInMin.toFixed(0)} 分钟后刷新,暂不消耗重置卡` + : null; + + if (!quota) { + reason = '未获取到额度状态'; + } else if (!quota.fiveHour.triggered && !quota.weekly.triggered) { + action = 'idle'; + // 等级词随分档走,而不是永远写「额度充足」—— + // 否则用量 92% 时页面上仍显示「额度充足」,是误导。 + // 把触发线也说进来:否则「额度不足但暂不需要处理」看起来自相矛盾。 + // burned 永远不会出现在这里:它必然已 triggered,走的是下面用卡/留卡分支。 + reason = `${LEVEL_LABEL[level]}(5 小时已用 ${quota.fiveHour.usedPercent.toFixed(0)}%),未到 ${cfg.cardTriggerPercent}% 触发线,暂不动用重置卡`; + } else if (!creditDataComplete) { + // 积分数据没读全 ⇒ 无法判断「卡先过期还是积分先过期」 + // ⇒ 绝不做写操作(扣卡是真实消耗,宁可等下一轮)。 + action = 'wait'; + reason = '积分数据读取不完整,本轮不执行写操作(等下一轮重新判定)'; + } else if (!earliestCredit) { + // 没有可消耗的积分,只能靠卡把额度重置回来 + if (earliestCard) { + // 额度马上要自己刷新了,就别烧卡了 + if (skipCardReason) { + action = 'wait'; + reason = skipCardReason; + } else { + action = 'use-card'; + usedCard = true; + reason = '没有可用积分,使用重置卡重置额度'; + } + } else { + action = 'wait'; + reason = '额度已耗尽,既没有积分也没有可用的重置卡'; + } + } else if (!earliestCard) { + action = 'use-credit'; + reason = `没有可用的重置卡,让${creditName}(${fmtDay(creditExpire)}到期)先消耗`; + } else if (cardExpire < creditExpire) { + // 额度马上要自己刷新了,就别烧卡了 + if (skipCardReason) { + action = 'wait'; + reason = skipCardReason; + } else { + action = 'use-card'; + usedCard = true; + reason = `重置卡(${fmtDay(cardExpire)})比${creditName}(${fmtDay(creditExpire)})先过期,先用卡保住积分`; + } + } else { + action = 'use-credit'; + reason = `${creditName}(${fmtDay(creditExpire)})比重置卡(${fmtDay(cardExpire)})先过期,不用卡,让积分先消耗`; + } + + return { + action, + usedCard, + reason, + // 等级随判定一起下发:页面据此给徽章上色,不再自己猜。 + level, + // 距 5 小时额度刷新的倒计时(分钟)。页面直接显示,不用自己算。 + resetInMinutes: resetInMin, + // 距刷新不足这个分钟数时已暂停自动扣卡 —— 页面要说出来, + // 否则用户看到「额度快没了却不扣卡」会以为坏了。 + cardSkipBeforeResetMinutes: skipMinutes, + skipCardActive: Boolean(skipCardReason), + target: + usedCard && earliestCard + ? { + cardId: earliestCard.cardId, + sourceType: earliestCard.sourceType, + outBizNo: earliestCard.outBizNo, + expireTimeMs: cardExpire, + } + : null, + earliestCardExpireMs: cardExpire, + earliestCreditExpireMs: creditExpire, + earliestCreditSource: earliestCredit?.source ?? null, + earliestCreditLabel: earliestCredit?.label ?? null, + triggered: Boolean(quota && (quota.fiveHour.triggered || quota.weekly.triggered)), + exhausted: Boolean(quota && (quota.fiveHour.exhausted || quota.weekly.exhausted)), + }; +} + +function fmtDay(ms) { + if (!ms) return '未知'; + const d = new Date(ms); + return `${d.getMonth() + 1}月${d.getDate()}日`; +} + +// ── 分层缓存 ────────────────────────────────────────────────────────────────── +/** + * 按接口的「变化速度」分层缓存,直接砍掉无谓的网络往返。 + * + * 实测依据(单轮 5 个接口共 ~19.8 KB / ~1.05s,其中 5 个串行等待是大头): + * 额度用量 每轮必取 —— 消耗在变,是所有联动的触发源 + * 积分明细 60s —— 81 笔里绝大多数只在被消耗时才动 + * 重置卡 300s —— 按天签到产生,变化极慢 + * 平台积分池 300s —— 同上 + * 账户汇总 600s —— 只在签到/充值后变 + * + * 过期未取数时回落到上一次成功结果,宁可显示略旧的数据,也不让看板空白。 + */ +const TTL = { + quota: 0, + codeCredits: 60_000, + cards: 300_000, + platform: 300_000, + membership: 600_000, + cardFlows: 120_000, +}; + +const cache = { + quota: { value: null, at: 0 }, + codeCredits: { value: null, at: 0 }, + cards: { value: null, at: 0 }, + platform: { value: null, at: 0 }, + membership: { value: null, at: 0 }, + cardFlows: { value: null, at: 0 }, +}; + +/** 带 TTL 与陈旧回落的取值:命中则零网络,未命中才请求。 */ +async function cached(slot, loader) { + const entry = cache[slot]; + const now = Date.now(); + if (entry.value !== null && now - entry.at < TTL[slot]) { + return { value: entry.value, fromCache: true }; + } + try { + const value = await loader(); + if (value !== null && value !== undefined) { + entry.value = value; + entry.at = now; + return { value, fromCache: false }; + } + // 本轮失败:用旧值兜底,别把上次的正常数据清掉 + return { value: entry.value, fromCache: true }; + } catch { + return { value: entry.value, fromCache: true }; + } +} + +function invalidateCache(slot) { + if (slot) cache[slot].at = 0; + else for (const key of Object.keys(cache)) cache[key].at = 0; +} + +// ── 快照 ────────────────────────────────────────────────────────────────────── +/** + * 同一时刻只允许一次真实取数。 + * + * SSE 轮询与自动判定会各自调用 buildSnapshot,若不合并就会把 + * 每轮的接口数翻倍。这里让并发的调用共享同一个 in-flight Promise。 + */ +let inflightSnapshot = null; +/** 上一次成功的快照:取数失败时回退用,避免整页被打空。 */ +let lastGoodSnapshot = null; + +function buildSnapshot() { + if (inflightSnapshot) return inflightSnapshot; + inflightSnapshot = doBuildSnapshot().finally(() => { + inflightSnapshot = null; + }); + return inflightSnapshot; +} + +async function doBuildSnapshot() { + // 数据来源:**本地账本**(不读宿主凭据、不调账号接口、不碰宿主数据库)。 + const read = readLedger(); + if (!read.ok) { + // ⚠️ 读不到账本 ⇒ 数据不完整 ⇒ 决策走 wait。 + // 绝不能当成「没有积分、没有卡」⇒ 那会把结论翻转成「用卡」。 + const err = new Error(read.error); + err.ledgerUnavailable = true; + throw err; + } + const now = Date.now(); + const triggerPercent = loadConfig().cardTriggerPercent; + const { platformPools, codeCredits, cards, creditDataComplete } = ledgerInputs(read.ledger, now); + const quota = ledgerQuota(read.ledger?.quota, triggerPercent); + + const decision = decide({ + platformPools, + codeCredits: codeCredits.items, + cards, + quota, + creditDataComplete, + }); + + const soon7 = expiringWithin(codeCredits.items, 7, now); + const soon30 = expiringWithin(codeCredits.items, 30, now); + const sumBalance = (list) => list.reduce((s, d) => s + d.balance, 0); + + return { + fetchedAtMs: now, + // 数据来自本地账本,没有「接口缓存」这一层 ⇒ 恒为新鲜。 + fresh: { + quota: true, + codeCredits: true, + cards: true, + platform: true, + membership: true, + }, + // 账本自带的时间戳:用户最后一次更新账本是什么时候。 + ledgerUpdatedAtMs: Number(read.ledger?.updatedAtMs ?? 0) || null, + creditSummary: null, + platformCredits: { + total: sumBalance(platformPools), + used: 0, + remaining: sumBalance(platformPools), + fallbackEnabled: false, + pools: platformPools, + }, + codeCredits: { + available: creditDataComplete, + totalCount: codeCredits.totalCount, + liveBalance: codeCredits.liveBalance, + lostBalance: codeCredits.lostBalance, + active: codeCredits.items.filter((d) => !d.expired && d.balance > 0), + lost: codeCredits.items.filter((d) => d.expired && d.balance > 0), + usedUp: (() => { + const zero = codeCredits.items.filter((d) => d.balance <= 0); + return { + count: zero.length, + consumed: zero.reduce((sum, d) => sum + d.consumed, 0), + expiredCount: zero.filter((d) => d.expired).length, + }; + })(), + }, + expiry: { + soon7Count: soon7.length, + soon7Balance: sumBalance(soon7), + soon30Count: soon30.length, + soon30Balance: sumBalance(soon30), + nextExpireMs: codeCredits.items.find((d) => !d.expired && d.balance > 0)?.expireTimeMs ?? null, + }, + quota, + cards: { + total: cards.length, + live: cards.filter((c) => !c.expired).length, + items: cards + .filter((c) => !c.expired) + .slice(0, 12) + .map((c, i) => ({ index: i + 1, expireTimeMs: c.expireTimeMs })), + raw: cards + .filter((c) => !c.expired) + .map((c) => ({ + cardId: c.cardId, + sourceType: c.sourceType, + outBizNo: c.outBizNo, + expireTimeMs: c.expireTimeMs, + })), + }, + cardUsage: { available: false, usedCount: null, grantedCount: null, lastUsedAtMs: null }, + decision, + }; +} + +// ── 自动刷新(只读:重算结论并推给页面,不做任何写操作)───────────────────────── +/** 自动判定间隔的允许范围:最快 5 秒(够灵敏),最慢 60 分钟(够省心)。 */ +const AUTO_MIN_MS = 5_000; +const AUTO_MAX_MS = 60 * 60 * 1000; +const AUTO_DEFAULT_MS = 15_000; + +function clampAutoInterval(ms) { + const n = Number(ms); + if (!Number.isFinite(n)) return AUTO_DEFAULT_MS; + return Math.min(AUTO_MAX_MS, Math.max(AUTO_MIN_MS, Math.round(n))); +} + +const state = { + autoEnabled: true, // 默认开启:定时把最新结论推到页面上 + autoIntervalMs: AUTO_DEFAULT_MS, + lastResult: null, + autoRuns: [], + lastAutoAtMs: 0, +}; + +/** + * 自动刷新一轮:重算结论 → 推给页面 → 记一笔。 + * + * ⚠️ v2.0(裁剪版):**只读**。它不扣卡、不暂停任何东西 —— + * 扣卡是不可逆的真实消耗,必须由用户在面板上点确认。 + * 这里只负责把「现在该怎么做」的结论及时送到页面上。 + */ +async function autoTick(reason) { + const snapshot = await buildSnapshot(); + state.lastAutoAtMs = Date.now(); + broadcast(snapshot, { incremental: true }); + const entry = { + outcome: 'OK', + atMs: state.lastAutoAtMs, + reason, + action: snapshot?.decision?.action ?? null, + decisionReason: snapshot?.decision?.reason ?? null, + }; + state.autoRuns = [entry, ...state.autoRuns].slice(0, 8); + return entry; +} + + +// ── 后台守护进程管理(launchd)──────────────────────────────────────────────── +/** + * 后台服务由 launchd 常驻,关闭本页面后仍会运行 —— + * 这正是它与页面内 SSE 自动判定的区别。 + */ +const DAEMON_LABEL = 'com.local.mcode-reset-card'; +const DAEMON_PLIST = join(homedir(), 'Library', 'LaunchAgents', `${DAEMON_LABEL}.plist`); + +async function run(cmd, args) { + const { spawn } = await import('node:child_process'); + return new Promise((resolve) => { + const child = spawn(cmd, args, { stdio: ['ignore', 'pipe', 'pipe'] }); + let out = ''; + child.stdout.on('data', (d) => { out += d.toString(); }); + child.stderr.on('data', (d) => { out += d.toString(); }); + child.on('close', (code) => resolve({ code, out })); + child.on('error', (e) => resolve({ code: -1, out: String(e) })); + }); +} + +/** 后台服务当前是否在跑(读 launchd 已加载的作业表)。 */ +async function daemonStatus() { + const { existsSync } = await import('node:fs'); + const installed = existsSync(DAEMON_PLIST); + if (!installed) return { installed: false, running: false, pid: null, label: DAEMON_LABEL }; + + // 注意:`launchctl list @@ -376,8 +376,8 @@

蹬王之王

- 与上面的「自动执行」是两套独立机制:上面只在本页面打开时生效,这里交给系统常驻进程, - 两者用同一套「先过期先用」决策,不会重复扣卡(服务端按幂等键去重)。 + 与上面的「自动刷新」是两套独立机制:上面只在本页面打开时生效,这里交给系统常驻进程, + 两者用同一套「先过期先用」决策,给出**同一条建议**。本插件只读,只给建议,不会真的扣卡。

@@ -392,9 +392,9 @@

自动化阈值

@@ -490,7 +490,7 @@

你没来得及蹬完的 token

const TONE = { 'use-card': 'use-card', 'use-credit': 'use-credit', idle: 'idle', wait: 'wait' }; const LABEL = { 'use-card': '建议用卡', 'use-credit': '建议用积分', idle: '额度充足', wait: '暂不处理' }; // 额度等级:与动作是两个维度。 - // 「idle(无需处理)」只说明不用扣卡,不代表额度还宽裕 —— + // 「idle(无需处理)」只说明不用建议用卡,不代表额度还宽裕 —— // 93% 时同样无需处理,但绝不能显示成绿色的「额度充足」。 const LEVEL_LABEL = { comfortable: '额度充足', @@ -504,10 +504,13 @@

你没来得及蹬完的 token

low: 'low', burned: 'burned', }; + // v2.0 的自动判定**只出结论、不执行任何写操作** ⇒ 结果只有两种: + // OK = 算出了一条结论 + // ERROR = 这一轮没算出来 + // v1.x 的 CARD_USED / CARD_FAILED / SKIPPED_DUPLICATE 等 + // (真的去扣卡、幂等去重)在 v2.0 里**永远不会出现** ⇒ 不再列。 const OUTCOME = { - CARD_USED: '已用卡', CARD_FAILED: '扣卡失败', CARD_ERROR: '扣卡异常', - KEEP_CREDIT: '保留积分', NO_ACTION: '无需动作', ERROR: '判定失败', - AUTO_OFF: '自动未开启', SKIPPED_DUPLICATE: '已跳过(防重复)', + OK: '已判定', ERROR: '判定失败', }; const DAY = 86400000; @@ -578,12 +581,12 @@

你没来得及蹬完的 token

resetEl.textContent = ''; } - // 「额度马上要刷新 → 不烧重置卡」这条保护要显式说明, - // 否则用户看到额度快没了却不扣卡,会以为功能坏了。 + // 「额度马上要刷新 → 建议别用重置卡」这条保护要显式说明, + // 否则用户看到额度快没了却不建议用卡,会以为功能坏了。 const skipEl = $('kpi-5h-skip'); if (d.decision?.skipCardActive) { skipEl.hidden = false; - skipEl.textContent = `距刷新不足 ${d.decision.cardSkipBeforeResetMinutes} 分钟,已暂停自动扣卡`; + skipEl.textContent = `距刷新不足 ${d.decision.cardSkipBeforeResetMinutes} 分钟,建议先别用重置卡`; skipEl.style.color = 'var(--mcode-warning)'; } else { skipEl.hidden = true; @@ -786,8 +789,8 @@

你没来得及蹬完的 token

renderAutoLog(d.autoRuns); $('auto-toggle').checked = Boolean(d.autoEnabled); $('auto-hint').textContent = d.autoEnabled - ? `已开启:每 ${fmtInterval(d.autoIntervalMs)}自动判定一次,结论为用卡时才会扣卡` - : '关闭时只在页面给出建议,不会扣卡'; + ? `已开启:每 ${fmtInterval(d.autoIntervalMs)}自动判定一次,结论为用卡时也只给建议,不会真的扣卡(本插件只读)` + : '关闭时只在页面给出建议,不会扣卡(本插件只读)'; // 回显间隔(秒 / 分钟自动选更合适的单位),避免覆盖用户正在输入的内容 if (document.activeElement !== $('interval-value')) { const ms = d.autoIntervalMs ?? 15000; @@ -801,7 +804,7 @@

你没来得及蹬完的 token

} $('auto-note').textContent = d.autoEnabled ? `当前每 ${fmtInterval(d.autoIntervalMs)}自动判定一次,可在左侧随时调整。「立即判定一次」无节流,随时可点。判定为「保留积分」时不执行任何写操作。` - : '自动执行已关闭,页面只给出建议。开启后按设定间隔自动判定;「立即判定一次」无节流,随时可点。判定为「保留积分」时不执行任何写操作。'; + : '自动刷新已关闭,页面只给出建议。开启后按设定间隔重算一次结论;「立即判定一次」无节流,随时可点。本插件只给建议,不做任何写操作。'; // ── 目标自动暂停:回显共享配置里的真实开关状态 ── // 这里只是读写 ~/.config/mcode-reset-card/config.json;真正执行的是后台服务, @@ -814,7 +817,7 @@

你没来得及蹬完的 token

* 渲染「自动化阈值」区。 * * 阈值不止是几个数字,它们互相约束:红色档必须高于黄色档; - * 扣卡线若低于红档,红灯永远不会亮。所以要把刻度和冲突一起画出来, + * 用卡线若低于红档,红灯永远不会亮。所以要把刻度和冲突一起画出来, * 否则用户改完只能靠猜。 */ function renderSettings(cfg, issues) { @@ -836,7 +839,8 @@

你没来得及蹬完的 token

const tight = Number(cfg.quotaLevels?.tight ?? 80); const low = Number(cfg.quotaLevels?.low ?? 95); const cardT = Number(cfg.cardTriggerPercent ?? 99); - const goalT = Number(cfg.goalPause?.triggerPercent ?? 99); + // ⚠️ v2.0 没有「暂停目标」这条线了(功能已删,配置里也没有 goalPause)。 + // 不要在这里读 cfg.goalPause —— 它恒为 undefined。 // ── 刻度预览:断轴 ── // 所有阈值都住在 80%~100% 这段,线性刻度会有 80% 的宽度全是空的, @@ -880,16 +884,14 @@

你没来得及蹬完的 token

`; // 触发点标记。 - // 扣卡线与停目标线**经常设成同一个值**(默认都是 99%)——把它们错开两行 - // 并没有变清楚,只是从「叠在一起」变成「挤在一起」。 - // 位置相同本来就是同一个事件,所以直接合并成一个标记:「扣卡·停目标 99%」。 + // 只剩三条线:黄档、红档、用卡线。位置相同本来就是同一个事件, + // 所以直接合并成一个标记。 const MERGE = 2; // 百分比:间距小于此值就合并成一个标记 const groups = []; for (const [p, name, color] of [ [tight, '黄', 'var(--mcode-warning)'], [low, '红', 'var(--mcode-danger)'], - [cardT, '扣卡', 'var(--mcode-text-muted)'], - [goalT, '停目标', 'var(--mcode-accent)'], + [cardT, '用卡', 'var(--mcode-text-muted)'], ].sort((a, b) => a[0] - b[0])) { const g = groups[groups.length - 1]; if (g && p - g.p < MERGE) g.names.push(name); @@ -897,7 +899,7 @@

你没来得及蹬完的 token

} // 排版:按**标签实际宽度**做碰撞检测,不能只看位置距离。 - // 「扣卡·停目标 99%」合并后比「红 95%」宽得多,两者位置只差十几个百分点, + // 「用卡 99%」比「红 95%」宽得多,两者位置只差十几个百分点, // 按距离算「不重叠」是错的 —— 宽标签会把窄标签压掉。 const charW = (s) => [...s].reduce((w, ch) => w + (/[⺀-鿿·%]/.test(ch) ? 11 : 6.5), 0); @@ -929,10 +931,9 @@

你没来得及蹬完的 token

// 冲突提示:都是「改完才知道自己改错了」的那种坑 const warns = []; if (!(tight < low)) warns.push('「额度紧张」必须小于「额度不足」,否则整个红/黄分档失效'); - if (cardT <= low) warns.push(`扣卡线 ${cardT}% 不高于红色档 ${low}%,红灯将永远不会亮`); - if (goalT > cardT) warns.push(`暂停目标线 ${goalT}% 晚于扣卡线 ${cardT}%,会先扣卡再停目标`); + if (cardT <= low) warns.push(`用卡线 ${cardT}% 不高于红色档 ${low}%,红灯将永远不会亮`); if (Number(cfg.cardSkipBeforeResetMinutes) > 0 && Number(cfg.cardSkipBeforeResetMinutes) >= 300) { - warns.push(`暂停扣卡窗口 ${cfg.cardSkipBeforeResetMinutes} 分钟超过一个 5 小时周期的 1/2,可能长期不扣卡`); + warns.push(`刷新前不用卡窗口 ${cfg.cardSkipBeforeResetMinutes} 分钟超过一个 5 小时周期的 1/2,可能长期不建议用卡`); } const all = [...(Array.isArray(issues) ? issues : []), ...warns]; if (all.length > 0) { @@ -945,7 +946,7 @@

你没来得及蹬完的 token

$('cfg-low').classList.remove('bad'); } $('cfg-note').textContent = - `当前生效:额度 ≥ ${cardT}% 动用重置卡;≥ ${goalT}% 暂停进行中的目标、额度回落后自动恢复。`; + `当前生效:额度 ≥ ${cardT}% 时**建议**动用一张重置卡(只给建议,本插件不会真的扣卡)。`; } /** 保存单个阈值字段。失败要如实回滚,不能让输入框停在乐观的状态。 */ @@ -1273,37 +1274,40 @@

你没来得及蹬完的 token

const r = await (await fetch(`/api/auto?enabled=${enabled ? 1 : 0}`, { method: 'POST' })).json(); $('auto-toggle').checked = r.autoEnabled; $('auto-hint').textContent = r.autoEnabled - ? `已开启:每 ${fmtInterval(r.autoIntervalMs)}自动判定一次,结论为用卡时才会扣卡` - : '关闭时只在页面给出建议,不会扣卡'; + ? `已开启:每 ${fmtInterval(r.autoIntervalMs)}自动判定一次,结论为用卡时也只给建议,不会真的扣卡(本插件只读)` + : '关闭时只在页面给出建议,不会扣卡(本插件只读)'; $('auto-note').textContent = r.autoEnabled ? `当前每 ${fmtInterval(r.autoIntervalMs)}自动判定一次,可在左侧随时调整。「立即判定一次」无节流,随时可点。判定为「保留积分」时不执行任何写操作。` - : '自动执行已关闭,页面只给出建议。开启后按设定间隔自动判定;「立即判定一次」无节流,随时可点。判定为「保留积分」时不执行任何写操作。'; + : '自动刷新已关闭,页面只给出建议。开启后按设定间隔重算一次结论;「立即判定一次」无节流,随时可点。本插件只给建议,不做任何写操作。'; if (enabled) { const f = r.firstRun; const txt = f?.message ? `${label(f)} · ${f.message}` : f?.reason || ''; - setStatus($('auto-status'), txt ? `首次判定:${txt}` : '已开启自动执行', f?.outcome === 'CARD_ERROR' || f?.outcome === 'ERROR' ? 'err' : 'ok'); + setStatus($('auto-status'), txt ? `首次判定:${txt}` : '已开启自动刷新', f?.outcome === 'CARD_ERROR' || f?.outcome === 'ERROR' ? 'err' : 'ok'); } else { - setStatus($('auto-status'), '已关闭自动执行', 'ok'); + setStatus($('auto-status'), '已关闭自动刷新', 'ok'); } await load(); } catch { setStatus($('auto-status'), '开关设置失败', 'err'); } }); - // ── 自动化阈值:五个输入框 ───────────────────────────────────────────── + // ── 自动化阈值:四个输入框 ───────────────────────────────────────────── + // ⚠️ 这里只列**页面上真实存在**的输入框 id。 + // v2.0 删掉了「目标自动暂停」功能 ⇒ 它的输入框也从 DOM 里删了; + // 若这里还留着 `cfg-goal-trigger`,`getElementById` 会返回 null, + // 下一行 `$(id).addEventListener` 立刻抛 TypeError ⇒ **整段脚本后面的 + // 所有绑定全部不执行**(看板连不上、按钮全哑)。 const SETTING_FIELDS = [ ['cfg-card-trigger', 'cardTriggerPercent'], - ['cfg-goal-trigger', 'goalTriggerPercent'], ['cfg-tight', 'tight'], ['cfg-low', 'low'], ['cfg-skip', 'cardSkipBeforeResetMinutes'], ]; for (const [id, field] of SETTING_FIELDS) { - $(id).addEventListener('change', (e) => saveSetting(field, e.target.value, e.target)); + const el = $(id); + if (!el) continue; // 页面上没有这个输入框 ⇒ 不绑定(绝不抛异常) + el.addEventListener('change', (e) => saveSetting(field, e.target.value, e.target)); } - // ── 目标自动暂停开关 ────────────────────────────────────────────────── - // 写的是共享配置,不是本地状态;后台服务每轮重读同一文件。 - // 手动判定:无任何节流,随时可点 $('auto-run').addEventListener('click', async () => { $('auto-run').disabled = true; @@ -1327,11 +1331,11 @@

你没来得及蹬完的 token

const r = await (await fetch(`/api/auto-interval?ms=${Math.round(raw * unit)}`, { method: 'POST' })).json(); const clamped = r.autoIntervalMs; $('auto-hint').textContent = snapshot?.autoEnabled - ? `已开启:每 ${fmtInterval(clamped)}自动判定一次,结论为用卡时才会扣卡` - : '关闭时只在页面给出建议,不会扣卡'; + ? `已开启:每 ${fmtInterval(clamped)}自动判定一次,结论为用卡时也只给建议,不会真的扣卡(本插件只读)` + : '关闭时只在页面给出建议,不会扣卡(本插件只读)'; $('auto-note').textContent = snapshot?.autoEnabled ? `当前每 ${fmtInterval(clamped)}自动判定一次,可在左侧随时调整。「立即判定一次」无节流,随时可点。判定为「保留积分」时不执行任何写操作。` - : '自动执行已关闭,页面只给出建议。开启后按设定间隔自动判定;「立即判定一次」无节流,随时可点。判定为「保留积分」时不执行任何写操作。'; + : '自动刷新已关闭,页面只给出建议。开启后按设定间隔重算一次结论;「立即判定一次」无节流,随时可点。本插件只给建议,不做任何写操作。'; const wasClamped = Math.abs(clamped - raw * unit) > 1; setStatus( $('auto-status'), @@ -1358,8 +1362,8 @@

你没来得及蹬完的 token

: '未安装后台服务'; $('daemon-toggle').disabled = !r.installed || daemonBusy; $('daemon-toggle-btn').disabled = !r.installed || daemonBusy; - // 守护进程状态变了,「目标自动暂停」的有效性也跟着变,要一起刷新 - if (snapshot?.config?.goalPause) renderGoalPause(snapshot.config.goalPause); + // ⚠️ v2.0 没有「目标自动暂停」了 ⇒ 不再有 renderGoalPause 可调用。 + // 留着这行会在守护进程状态刷新时抛 ReferenceError。 } catch { $('daemon-hint').textContent = '无法读取后台服务状态'; } @@ -1375,12 +1379,12 @@

你没来得及蹬完的 token

const r = await (await fetch(`/api/daemon?action=${enable ? 'start' : 'stop'}`, { method: 'POST' })).json(); daemonRunning = enable ? Boolean(r.running) : false; setStatus($('daemon-status'), r.message ?? (r.ok ? '操作完成' : '操作失败'), r.ok ? 'ok' : 'err'); - // 停掉后台服务会连带让「目标自动暂停」失效 —— 这一点必须说出来, - // 否则用户会以为那个开关还开着、目标会被自动停住。 - if (!enable && snapshot?.config?.goalPause?.enabled) { + // ⚠️ v2.0 停掉后台服务只是**不再自动重算结论**,不会「让目标被停住」—— + // 本插件压根不碰目标。说错会让用户以为还有自动暂停这回事。 + if (!enable) { setStatus( $('daemon-status'), - '后台服务已停 —— 「目标自动暂停」当前不会执行,额度用尽时目标不会被自动停下', + '后台服务已停 —— 面板不再自动重算结论(结论仍可手动判定)', 'err', ); } diff --git a/plugins/hylouis233/expiry-guardian/miniapp/node/server.mjs b/plugins/hylouis233/expiry-guardian/miniapp/node/server.mjs index 9fda275..80e5168 100644 --- a/plugins/hylouis233/expiry-guardian/miniapp/node/server.mjs +++ b/plugins/hylouis233/expiry-guardian/miniapp/node/server.mjs @@ -570,8 +570,8 @@ function decide( level, // 距 5 小时额度刷新的倒计时(分钟)。页面直接显示,不用自己算。 resetInMinutes: resetInMin, - // 距刷新不足这个分钟数时已暂停自动扣卡 —— 页面要说出来, - // 否则用户看到「额度快没了却不扣卡」会以为坏了。 + // 距刷新不足这个分钟数时**不建议用卡** —— 页面要说出来, + // 否则用户看到「额度快没了却不建议用卡」会以为坏了。 cardSkipBeforeResetMinutes: skipMinutes, skipCardActive: Boolean(skipCardReason), target: @@ -1348,29 +1348,6 @@ export async function start(context) { context.signal.addEventListener('abort', onAbort, { once: true }); if (context.signal.aborted) await dispose(); - // ── Bot 唤醒循环 ── - // - // 后台守护进程(Host 之外,无 token、无人值守)只做**判定 + 记账**: - // 把「要唤醒哪个 bot」写进 `bot-revive-requests.json`。 - // 这里(Host 之内)负责**真正投递**。 - // - // 为什么投递必须在这里做(2026-10-20 全部实测,详见 docs/BOT_DIAGNOSIS.md): - // - // 1. **裸写队列项无效**:那是绕开 `steer` 直接塞行,Host 的队列轮询器不认 - // (隔离实验:3 分钟未被消费;官方 `session send` 则 5 秒内 accepted)。 - // 2. **不能直接 `agent.run` 续 bot 会话**:`assertSessionOwnership` 判 - // `owner !== caller.pluginId` ⇒ `SESSION_NOT_FOUND`;而 45 个 bot 会话的 - // `purpose` 全是 `miniapp:minimax-bot` ⇒ 本插件永远被拒。 - // 3. **能用的路径**:起一个自己的 agent 回合(`agent.run` 不带 sessionId), - // 让那个回合里的 agent 用 **mavis 工具的 `session send`** 把续跑消息 - // 送进目标 bot 会话。`session send` 的准入是「目标可达即可」, - // **不做 owner 检查** ⇒ 任何有 mavis 工具的会话都能唤醒任意 bot 会话。 - // - // ⚠️ 代价:每个被唤醒的 bot 要烧**一个 agent 回合**(约 47k tokens,46k 缓存读) - // ⇒ 所以**只在真的有 pending 请求时才跑**,绝不空转。 - // - // 不依赖 cron:面板开着它就在跑;关着时守护进程照常判定与记账,等面板再开时补上。 - const disposeAll = () => { void dispose(); };