From 382b4c8c981903290207267fa8c153320073e86c Mon Sep 17 00:00:00 2001 From: m3tm3re Date: Tue, 21 Apr 2026 19:00:49 +0200 Subject: [PATCH] chore: hermes update --- flake.lock | 40 +++++++------- flake.nix | 2 +- home/features/coding/default.nix | 20 ++++++- home/features/coding/opencode.nix | 10 ---- home/features/coding/pi.nix | 23 +++----- hosts/common/default.nix | 7 --- hosts/m3-hermes/services/hermes-agent.nix | 8 +-- hosts/m3-kratos/services/default.nix | 1 - hosts/m3-kratos/services/pi-agent.nix | 52 ------------------ secrets/hermes-cloud-env.age | 61 +++++++++------------- secrets/hermes-env.age | Bin 1832 -> 1897 bytes 11 files changed, 77 insertions(+), 147 deletions(-) delete mode 100644 hosts/m3-kratos/services/pi-agent.nix diff --git a/flake.lock b/flake.lock index 45addb6..35ac1ce 100644 --- a/flake.lock +++ b/flake.lock @@ -89,11 +89,11 @@ ] }, "locked": { - "lastModified": 1771437256, - "narHash": "sha256-bLqwib+rtyBRRVBWhMuBXPCL/OThfokA+j6+uH7jDGU=", + "lastModified": 1776249299, + "narHash": "sha256-Dt9t1TGRmJFc0xVYhttNBD6QsAgHOHCArqGa0AyjrJY=", "owner": "numtide", "repo": "blueprint", - "rev": "06ee7190dc2620ea98af9eb225aa9627b68b0e33", + "rev": "56131e8628f173d24a27f6d27c0215eff57e40dd", "type": "github" }, "original": { @@ -123,15 +123,16 @@ ] }, "locked": { - "lastModified": 1770895533, - "narHash": "sha256-v3QaK9ugy9bN9RXDnjw0i2OifKmz2NnKM82agtqm/UY=", - "owner": "nix-community", + "lastModified": 1776182890, + "narHash": "sha256-+/VOe8XGq5klpU+I19D+3TcaR7o+Cwbq67KNF7mcFak=", + "owner": "Mic92", "repo": "bun2nix", - "rev": "c843f477b15f51151f8c6bcc886954699440a6e1", + "rev": "648d293c51e981aec9cb07ba4268bc19e7a8c575", "type": "github" }, "original": { - "owner": "nix-community", + "owner": "Mic92", + "ref": "catalog-support", "repo": "bun2nix", "type": "github" } @@ -268,15 +269,16 @@ "uv2nix": "uv2nix_2" }, "locked": { - "lastModified": 1776145260, - "narHash": "sha256-jyxv5PCRMOA8mU+ng3EDXGLAw0Xq0dDQLgiYgEZudLA=", + "lastModified": 1776369186, + "narHash": "sha256-+Kltn1Ar0Ye4iBc6UVwvNPGI0uIgnCktl4Obh964/60=", "owner": "NousResearch", "repo": "hermes-agent", - "rev": "d6314318721cc8f3eba6e1a6138ccc03355764bc", + "rev": "1dd6b5d5fb94cac59e93388f9aeee6bc365b8f42", "type": "github" }, "original": { "owner": "NousResearch", + "ref": "v2026.4.16", "repo": "hermes-agent", "type": "github" } @@ -410,11 +412,11 @@ "treefmt-nix": "treefmt-nix" }, "locked": { - "lastModified": 1776137484, - "narHash": "sha256-3gUwNO4y8ZmTyQBb3fCrLNRnqzAuuwNNSlPjmhrGnMo=", + "lastModified": 1776784995, + "narHash": "sha256-ikxb8cZGWHuZMs3xS471GVrpGA0xW1YFcIVOPTVkhBo=", "owner": "numtide", "repo": "llm-agents.nix", - "rev": "e70ca11dc1a327e99c58dcd580ed209056a61130", + "rev": "e3d40d2cd66a4f8052e4224ec027c6896a455847", "type": "github" }, "original": { @@ -432,8 +434,8 @@ "openspec": "openspec" }, "locked": { - "lastModified": 1776184481, - "narHash": "sha256-X4b1SRiUUhlp1ciL1pwHI5KvXmrM3A9zxb4GaeNkJ9I=", + "lastModified": 1776787894, + "narHash": "sha256-aDi7tWtiBdUBLhH4ULHZpcUTq3/w/Rad6dA/uLHu+7Q=", "path": "/home/m3tam3re/p/NIX/nixpkgs", "type": "path" }, @@ -672,11 +674,11 @@ }, "nixpkgs_5": { "locked": { - "lastModified": 1775888245, - "narHash": "sha256-nwASzrRDD1JBEu/o8ekKYEXm/oJW6EMCzCRdrwcLe90=", + "lastModified": 1776329215, + "narHash": "sha256-a8BYi3mzoJ/AcJP8UldOx8emoPRLeWqALZWu4ZvjPXw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "13043924aaa7375ce482ebe2494338e058282925", + "rev": "b86751bc4085f48661017fa226dee99fab6c651b", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 46598a8..346c109 100644 --- a/flake.nix +++ b/flake.nix @@ -65,7 +65,7 @@ url = "github:vercel-labs/skills"; flake = false; }; - hermes-agent.url = "github:NousResearch/hermes-agent"; + hermes-agent.url = "github:NousResearch/hermes-agent/v2026.4.16"; }; outputs = { diff --git a/home/features/coding/default.nix b/home/features/coding/default.nix index 608c88e..3011a6b 100644 --- a/home/features/coding/default.nix +++ b/home/features/coding/default.nix @@ -1,5 +1,6 @@ { config, + inputs, pkgs, videoDrivers, ... @@ -14,6 +15,20 @@ in { ./opencode.nix ./pi.nix ]; + + coding.agents.skills = { + agentsInput = inputs.agents; + externalSkills = [ + { + src = inputs.skills-anthropic; + selectSkills = ["pdf" "docx" "frontend-design"]; + } + {src = inputs.skills-vercel;} + {src = inputs.skills-basecamp;} + {src = inputs.skills-kestra;} + ]; + }; + programs.mcp = { enable = true; servers = { @@ -47,13 +62,12 @@ in { home.packages = with pkgs; [ agenix-cli + agent-browser alejandra bc bun devpod #devpod-desktop - claude-code - code2prompt gnumake cmake (python3.withPackages (ps: @@ -68,6 +82,7 @@ in { ])) pyrefly nixd + nix-update nodejs # opencode-desktop (qmd.override { @@ -76,6 +91,7 @@ in { }) openshell openspec + pi-coding-agent alejandra sidecar tailwindcss diff --git a/home/features/coding/opencode.nix b/home/features/coding/opencode.nix index 9caa29c..6abed49 100644 --- a/home/features/coding/opencode.nix +++ b/home/features/coding/opencode.nix @@ -6,16 +6,6 @@ coding.agents.opencode = { enable = true; agentsInput = inputs.agents; - - externalSkills = [ - { - src = inputs.skills-anthropic; - selectSkills = ["pdf" "docx" "frontend-design"]; - } - {src = inputs.skills-vercel;} - {src = inputs.skills-basecamp;} - {src = inputs.skills-kestra;} - ]; }; coding.opencode = { diff --git a/home/features/coding/pi.nix b/home/features/coding/pi.nix index 10f37a3..8285dba 100644 --- a/home/features/coding/pi.nix +++ b/home/features/coding/pi.nix @@ -3,23 +3,9 @@ enable = true; agentsInput = inputs.agents; - externalSkills = [ - { - src = inputs.skills-anthropic; - selectSkills = ["pdf" "docx" "frontend-design"]; - } - {src = inputs.skills-vercel;} - {src = inputs.skills-basecamp;} - {src = inputs.skills-kestra;} - ]; - - # Source materialized for m3ta.pi-agent wrapper sync into /var/lib/pi-agent/.pi/agent - # Use .pi/agents to match Pi's native directory layout. - path = ".pi/agents"; - modelOverrides = { - chiron = "zai-coding-plan/glm-5.1"; - chiron-forge = "zai-coding-plan/glm-5.1"; + chiron = "zai/glm-5.1"; + chiron-forge = "zai/glm-5.1"; }; settings = { @@ -33,11 +19,14 @@ "npm:@plannotator/pi-extension" "npm:pi-powerline-footer" "npm:pi-markdown-preview" + "npm:pi-gsd" + "npm:pi-tool-view" + "npm:pi-agent-browser-native" ]; defaultProvider = "zai"; defaultModel = "glm-5.1"; - defaultThinkingLevel = "medium"; + defaultThinkingLevel = "high"; }; # MCP servers auto-inherited from programs.mcp in default.nix diff --git a/hosts/common/default.nix b/hosts/common/default.nix index 134c9d5..db34ab4 100644 --- a/hosts/common/default.nix +++ b/hosts/common/default.nix @@ -78,11 +78,4 @@ nixPath = ["/etc/nix/path"]; }; users.defaultUserShell = pkgs.nushell; - - # Compatibility shim: the hermes-agent nixos module references the legacy - # agenix activation script name "setupSecrets" (renamed to "agenixInstall" - # in current agenix). This empty passthrough satisfies the dependency so - # any host importing hermes-agent.nixosModules.default can build. - # Remove once upstream fixes: github:NousResearch/hermes-agent nix/nixosModules.nix:564 - system.activationScripts.setupSecrets = lib.stringAfter [ "agenixInstall" ] ""; } diff --git a/hosts/m3-hermes/services/hermes-agent.nix b/hosts/m3-hermes/services/hermes-agent.nix index 13fb4d1..a00c86f 100644 --- a/hosts/m3-hermes/services/hermes-agent.nix +++ b/hosts/m3-hermes/services/hermes-agent.nix @@ -34,8 +34,10 @@ in { backend = "podman"; extraVolumes = ["/home/m3tam3re/p:/projects:rw"]; extraOptions = [ - "--env" "PYTHONPATH=${venvSitePackages}" - "--env" "LD_LIBRARY_PATH=${gccLibPath}" + "--env" + "PYTHONPATH=${venvSitePackages}" + "--env" + "LD_LIBRARY_PATH=${gccLibPath}" ]; }; @@ -61,7 +63,7 @@ in { # ── Terminal ─────────────────────────────────────────────────────── terminal = { - backend = "local"; + backend = "docker"; modal_mode = "auto"; cwd = "."; timeout = 180; diff --git a/hosts/m3-kratos/services/default.nix b/hosts/m3-kratos/services/default.nix index 2e0e7db..1c01a34 100644 --- a/hosts/m3-kratos/services/default.nix +++ b/hosts/m3-kratos/services/default.nix @@ -5,7 +5,6 @@ ./mem0.nix # ./n8n.nix ./netbird.nix - ./pi-agent.nix ./postgres.nix ./sound.nix ./udev.nix diff --git a/hosts/m3-kratos/services/pi-agent.nix b/hosts/m3-kratos/services/pi-agent.nix deleted file mode 100644 index 59b74fb..0000000 --- a/hosts/m3-kratos/services/pi-agent.nix +++ /dev/null @@ -1,52 +0,0 @@ -{config, ...}: let - cfg = config.m3ta.pi-agent; -in { - m3ta.pi-agent = { - enable = true; - binaryName = "pi"; - - # Per-user policy map: authorized host users + their allowed project roots. - hostUsers = { - m3tam3re = { - projectRoots = ["~/p"]; - # Optional (default comes from wrapper.hostConfigPath) - configPath = ".pi/agents"; - }; - }; - - wrapper = { - enable = true; - commandName = "pi"; - hideDirectBinary = true; - - # Sync Home Manager rendered Pi config from invoking user home. - hostConfigPath = ".pi/agents"; - }; - }; - - # Manage isolated pi-agent git identity via Home Manager (declarative + reusable pattern). - home-manager.users.${cfg.user} = { - home.username = cfg.user; - home.homeDirectory = cfg.stateDir; - home.stateVersion = "26.05"; - - programs.git = { - enable = true; - signing.format = null; - settings = { - user = { - name = "m3ta-chiron"; - email = "m3ta-chiron@agentmail.to"; - }; - core.excludesfile = "~/.gitignore_global"; - init.defaultBranch = "master"; - alias = { - st = "status"; - logd = "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"; - }; - }; - }; - - home.file.".gitignore_global".text = ""; - }; -} diff --git a/secrets/hermes-cloud-env.age b/secrets/hermes-cloud-env.age index 430608e..d21287a 100644 --- a/secrets/hermes-cloud-env.age +++ b/secrets/hermes-cloud-env.age @@ -1,35 +1,26 @@ ------BEGIN AGE ENCRYPTED FILE----- -YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDROTEtydyBQQisx -Z2Z6bTVTazFWWE14eWhLaHNXMU9pVUN4bEZ1U2dFN0c3RW1wdmlvCnh4eFJ4NC9u -UGo3cXNqNHdGQk5CK3J3b0xzcm85SHFMNXhzcUZPSlhUcjAKLT4gc3NoLWVkMjU1 -MTkgNWt3Y3NBIHVrZzBLc1poMkhuNnREQ0hrcHNFc0lYL2I3dHRka0xNN3Fibktm -Qk5HRlkKV0FXbFNkSVBKSENvSlhzZVdMWkxhbHRPSTMyak5YbW93VGFDdWJYdDlN -VQotPiBzc2gtZWQyNTUxOSA5ZDRZSVEgSlVabys1cXQveXFtTkZQckpOM0NldG9D -ZFVVMG9FNDZ3LzkzK09vbHMzZwpPcWE3dGJHc1hzTVpLWlVJUTBLYUZQbXljeGVD -UFF3dWZGSTgxMWZma0hVCi0+IHNzaC1lZDI1NTE5IDNCY3IxdyBISWZFazFhRDk5 -NVNMc1E2elBzclkzU2oxSjh2RjlyUHE2ME4vYnl0WVRjCi8wanRWamd0YXBLbmhE -blRpaTZpblErZllmNzF3VCtjTFlaODErUHRxQzAKLT4gc3NoLWVkMjU1MTkgYzRO -UWxBIDZXU3Y0TEx3ek9HVmpZUzQzRVpDL2sycElOREtRRkI2MTJFekJNajd6SE0K -SUVrTUlIMFVDNkJNL0cxWHhqQ1o1d240VXhBYkh5anlBRFZVZVltRkhTVQotPiBz -c2gtcnNhIERRbEU3dwpNcWRSaDVQRUpVQjBqcUtYN3lBczV5WlgwdlBERkowMFpJ -YWd6Z1FnSGJTVlY4SXNIMldSMFZQMWxtcHZhMXI2CmlWdnhUL29oTnNDV0lYNG0w -UU1oS09BVjRsMk40VHVnU3UrZjAwTkVTMUo0aEo4Z081RVpBeUx1ZGZsUnpMSk4K -cUpPTlJOMnZaUnk1WldOazUrVFRyYTMraEtwYjRkcFlodjUwNEVMazhaQlZVdWhh -b0pPa3JiWHlmOXUxUC8wRQpSUnVCVWZzaVROQTB3ZVR1SUJuNUdxdHIwSjZ5cVhZ -T3RaMytOdDFOUVZVRjBXM25mMFFwZVUzVGZ1d29KRWdWCms3bGVWSldNVEIxZ1Z5 -c0pjWnJRZzFsekN6dlA2Q0ZUQy82WHlhOHNLOWdLY2pkR3hPS1NSdUwzVjNSajdG -blcKVE5oaC9pTmNQL0gvMUp0azJPcFgwQlora0tXTWNWUk5NVTdxdmdmb2o2R294 -OGdpT3dwUzY5dDNDSFRBZ1VkdwppcGtQNGc3U3J4RXI3UzdpV2ZhMG9Dd3RwcDRj -U3pNK2hZaUxmOE42OGNKdW5kYWpLNHRYQ3REQUNqVlg3SFZ4Cm1oMVkwODlPOXJC -SjFVQ1hjMzNYVDZ2OVpEbXBoNnBQT0F6N0xDdnRYbWVmRkxYaElSbjBtN2p1OHlC -akZTUEoKCi0+IHNzaC1lZDI1NTE5IENTTXloZyA3YXYvak0vWW1BM3FVT2RncURE -QzJMa2NoZkRyQ3pIRkNoME1CR3FCVURnCnFXUEZWN0s0alNKZlZWOFdjK0hpMWdz -V05YWjRkNFlYb0pnV0oybW40aVEKLT4gNEU1P0QuOlgtZ3JlYXNlIDZ8I2hQcW4t -ID0mYiB2JDpPeyxMIGpJegp3dwotLS0gOGwwcWlWNERoRWlkMDBIZkt6U0dBaWw1 -TUhHVVp1NEV3cktEeDVVMWtkTQo3CZ3tLMBtiWDVl2PeAQsDShBnvHyUpE6+fjwN -j281j2luh4sKvpYMAQwbEGViKp0Bh9oJCV7CMaVTvY750NI7bu6oK8KpOIElj1UF -wBqnrZO4I1cAnJ1LRybPQXD+Wxc/uHQ4VZ+hO1b00q04wI5J1lWrgs47o+TcIB+M -oWyn5tDlJa55qSK2pcC+csycYlJDgZzhUGa0xZQGL0574hzTH9ZQFNJAnCm77ivC -LNaAoa/GYUT8cCxrSpcMRy+4nqLchCD/ZcCfHC1kOsjJSP9xnrYUe0/bcmsZ9FEz -YVtmsplM61hFzcY59z8VVz9aP8yp1v6LtiwDPX9mJhZXOqU= ------END AGE ENCRYPTED FILE----- +age-encryption.org/v1 +-> ssh-ed25519 4NLKrw Zd/NMDnj6lBe9ZfZyJpubFB5yLl28wNTEJiwd2+9L08 +odN3RAr4w3tg/zsibLhQ/51GtlNhbd6Ps7WEKf5+N7A +-> ssh-ed25519 5kwcsA UmhpgmoOntX/ttwLpAyS5wLgrLkElV+XUkNETHa4mWQ +gYosgxP7Ddn8dZOV7dVFCkZ+QJ4aFR6Fw3bqQDbZTOE +-> ssh-ed25519 9d4YIQ Sys2uaaR/MDc33a48C/HiHWx3pCkJtgXuZDbNjIbuno +cbBeOGom41lyjo1ZJpLZZq3q/pYQHBl68k2CAUTH0q4 +-> ssh-ed25519 3Bcr1w yulsJIUd/9B/Kr6+o5oDUBUyuTbgtxcY/oF3rDFptzg +/oufFYsJ2CmYfhvT38EIirgPGczSqLqPLmAFJqt3OVE +-> ssh-ed25519 c4NQlA QjnDUoTDZbt975WcvJ0WzhgzCJCewgJ8iby9/2I2UwE +tNXuNp71dxvHXYbGTQW4Akg38NUfPe2wxf/L/2bY1fY +-> ssh-rsa DQlE7w +dcSeDLSMYiC3SbCtZ7kzJ0ywZR/fuZJ+YhEZQ7mTVvdwZAqVjkpA/jVxOlWpmKOC +PEydXCo0bHYBFp12ldx5qJvxckZJ6gUM66fX4M618aq87/b9VAqN42GHDJPD6Ot1 +Aae1CpnC1ythkPS+z8FH54u5DYtIimJBApyCNuoc6cKoYe4UoQFV8Fmje/gaiJMa ++Gb9uY42HgCFtkG0g8LMitQft1BQ6Vkx8pIWrAXyxoYOTbPNV+J3ZMe4q1rJTmm2 +yXundaPgobVn3o0x6O4oLerb8Eov9uf/W8dZ9GCtjgbxBCz6gtajEXorZ8eZBREN +R1gB0KZB7kMyomPaZfglVUtr8PXzk71Gia984vyIXNHREY+ioto8YFUWEbHIUPDm +wUo5G/RdxAbI3yOoF8Y9iKVy3q+Zm1rqhYPZ1bm66+cSzrCosPVS1JcNyrwGRlv3 +RJabiJjSkftALGdvZwN1YiAzeyrsCijTSLQfOLihBL5K1DY1R1on0E9O98SQ1cQe + +-> ssh-ed25519 CSMyhg b5XFGFE4oKVs2Va+AmjOsPzqmevAO2R5K3lK4T/ZNlU +bHh12HARMz+eaGy2bjVBlYV/jv0MgavVeB2zVoDNI34 +--- UrkzgesMam4Kwdcb+STgOj05ozL72qeyjNn4zkz2VOg + ~B&Vj}q[ék~'9ϲ%(_ +@P we|1k,7yV¶v#tu$k{3u%Mc6o+vms,g㚙lϰq  mPP5 ev=4‡ oJLWҜZ"ky#_qNqA_v \ No newline at end of file diff --git a/secrets/hermes-env.age b/secrets/hermes-env.age index de7b3bb91a7b0b97a1af24ded432c255575d495d..d95c908374e2c548f59e639004f3b0dff2ffaa83 100644 GIT binary patch delta 1817 zcmZ3%_mXddPJLKGN=R9lS%#NEuyaAKH#a$cB!QF>N-QI5Y^P_}!diD7w0a%GvJZ$+r5b9qXVv#EciFPE;JLUD11 zZfc5=si~o*f@yYnaJx5yIY`du3=?%RhoB|uW?kKV~BpL zt5b4mQfOEd1j@DTbV(2VsTiead2TtaCV`KTc&5ZpQ(|ndy#9pwp((Qze|O| z#E;_P9+@s>=~ZF5J_RYc!5)Prp-~=1>0VWq$wr~BPC3azKEWvgDgGt?IbrEsCBBwb z5n(Bb$>A<(RRtB!A?d-n*-@E=0fr@6e*TeZRY~sNCRrhgVWFOr;~B-nOLDSY0;Ak~ zf=az2N=rK+-BKzlOx=Sbt18N~!#xbROpQ|lGSaIo{3FUugMIxS zBP%L{@`7CoTuQ=93=D#Ei$ZeElYO$&4DwtjpJf!UFU)YwsE9}n3M&q+EJ$+8iu8^u z33qYyOwA7o_V$j-iqy^s4hahj@Qz64axbfsc8LuerHrl}BnxxQVujv5~fa zo}+7ch;wmpMwWiDQ-QO&8&{@(u}_kFZmyR>l1HRLPqicPbK}nc# zd7^h(abj>9mrqWVPquHd zU!`%9hp(k$u$PfxsF7iwXSuI=KvGUPl#KQw_{bXXQG>h zvw?Shy_to1inD%lNrZE8WRb6SsiA(DaYQ;-S;f8;YIEy%fvGg&#N zab0$q6Taxjj!MO6IXfQAny-OZHE%=|Mxw`4m!S=)F$03)Zq*aVpJPww`+VjQ zYyBy0?{1=^(^CDQ{>r`QQyy+zeCFwNo1X(+1DGJp4<Y_W#cg{%_2l znIB-BsM{?lEp)Hb-K?~9#mo)Yg#{#Ae*3AbN_}SKnp0RPD%7W+zdrg}l78kMpC1qI zmTU7BnWmZky>tBGa>M22?u!;%6bnCLaQwx!z1CFZ`D25H3Sz6+!%S}JX>ni7m=I-f YNl_qr?v%U(n`&w={IWN?+tP0j0L(eYc>n+a delta 1751 zcmaFKw}NkiPJMcyYqGmZd4N%BNr;S#V)t zerB?EgnpF;S73>Sc7AzaMR{OSmWOtxqoa>`glm;qR$8T{yO)!biK~lqU{bMVRK5@rp{-FEpqK2`~3IE)PoQip;EVuCO#PGd4`kG7C=(OHOq24sp--%QFo$ z@zeJ<4zsVU)L-d7g7wRA5ap;4*1X+cmy zc2tPBb3~MrPk>95MW|_UAXiAXe`Z0TcaC3Sfxn4aiFu||p_`AVzoVku0 zuD_>yrFWi>PnKbEXl_AHPDPQQWp;T~d8KhiN~)8)SC)HDL6%3QMQOT`bEvTV;4|NU)`E zp=*R?m9s%brm?eQs$pnkN^U5ZM|MeRN?2lrpPR3_Uq)4GMN(pgx2umyV4$yKaFnB` zer1)fvuSd8rJH-Pskx=Qc|np5LuTz?1XhB|nkV|@SVL)0)SSXjJcc4XXa%gCPXmZqp^3QONwJ)sRfs=uC79XS)if0g+ZW!M@3mxmcEO> zqi?ZOy-S9+dqHSWsHKUet3^m^XsAz-d59y|;(2x25jWk-votk-PF?WQlI`S)gk!a? zTiqE?q}9b#{N{Hq7iT=Kxqby>Yn;R6eLudie~Dm>4yujKogdTxR}vmFZ=I?o} zC3!EyvKv}|`R(ZN`np8P@AI0TUKvSmA&dHAR=G`A4J&3XnKv)_n&Ex>lBs82Cw&ta zKQ|>n`uc};T@i8TZ}LqJ6y92B-R!sgh^W0lih8GzmE!+0hEKON6dAksDf73>Hs>uB zUG#h+hu_b4hgdnkO{pzeyoCGuk&x?wsoSmoTk$)GM)S)DaMv|i{5p6r{aVo0-ja`f E00di+MgRZ+