From be99656c1c4b547b8aa41064af9ccd9feeae5905 Mon Sep 17 00:00:00 2001 From: Sycun <165354365+Sycun@users.noreply.github.com> Date: Tue, 3 Nov 2026 16:25:51 +0800 Subject: [PATCH] fix(plugins): support username-based RBAC authentication --- .github/workflows/plugin-auth.yml | 28 ++++++ plugins/README.md | 2 +- .../cyberstrikeai-browser-extension/README.md | 12 ++- .../README.zh-CN.md | 14 ++- .../dist/cyberstrikeai-browser-extension.zip | Bin 62611 -> 65143 bytes .../lib/api.js | 8 +- .../lib/storage.js | 4 + .../manifest.json | 2 +- .../package.sh | 2 +- .../panel/panel.html | 4 + .../panel/panel.js | 24 +++-- .../tests/auth.test.cjs | 60 ++++++++++++ .../cyberstrikeai-burp-extension/README.md | 12 ++- .../README.zh-CN.md | 15 ++- .../dist/cyberstrikeai-burp-extension.jar | Bin 56861 -> 50837 bytes .../main/java/burp/CyberStrikeAIClient.java | 14 ++- .../src/main/java/burp/CyberStrikeAITab.java | 39 ++++++-- .../test/java/burp/AuthRegressionTest.java | 87 ++++++++++++++++++ scripts/test-plugin-auth.sh | 16 ++++ 19 files changed, 310 insertions(+), 33 deletions(-) create mode 100644 .github/workflows/plugin-auth.yml create mode 100644 plugins/browser-extension/cyberstrikeai-browser-extension/tests/auth.test.cjs create mode 100644 plugins/burp-suite/cyberstrikeai-burp-extension/src/test/java/burp/AuthRegressionTest.java create mode 100644 scripts/test-plugin-auth.sh diff --git a/.github/workflows/plugin-auth.yml b/.github/workflows/plugin-auth.yml new file mode 100644 index 00000000..02db0c12 --- /dev/null +++ b/.github/workflows/plugin-auth.yml @@ -0,0 +1,28 @@ +name: Plugin authentication +on: + pull_request: + paths: + - 'plugins/**' + - 'scripts/test-plugin-auth.sh' + - '.github/workflows/plugin-auth.yml' + push: + branches: [main] + paths: + - 'plugins/**' + - 'scripts/test-plugin-auth.sh' + - '.github/workflows/plugin-auth.yml' +permissions: + contents: read +jobs: + auth: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: '22' + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: '11' + - run: bash scripts/test-plugin-auth.sh diff --git a/plugins/README.md b/plugins/README.md index 7503c38a..6d708139 100644 --- a/plugins/README.md +++ b/plugins/README.md @@ -11,7 +11,7 @@ Optional integrations that connect CyberStrikeAI with other tools. ### Browser (Chrome / Edge) - **Path**: `plugins/browser-extension/cyberstrikeai-browser-extension/` -- **Version**: **0.3.8** +- **Version**: **0.3.11** - **Install**: `chrome://extensions/` → Load unpacked → F12 → **CyberStrikeAI** tab - **Package**: `bash package.sh` → `dist/cyberstrikeai-browser-extension.zip` - **Docs**: `README.zh-CN.md` (full) / `README.md` (summary) diff --git a/plugins/browser-extension/cyberstrikeai-browser-extension/README.md b/plugins/browser-extension/cyberstrikeai-browser-extension/README.md index bcd0b474..b1c05944 100644 --- a/plugins/browser-extension/cyberstrikeai-browser-extension/README.md +++ b/plugins/browser-extension/cyberstrikeai-browser-extension/README.md @@ -1,6 +1,6 @@ ## CyberStrikeAI Browser Extension -**Version 0.3.10** — Full docs: **README.zh-CN.md** +**Version 0.3.11** — Full docs: **README.zh-CN.md** Chromium DevTools extension: capture Network traffic and send it to CyberStrikeAI for AI-assisted security testing. Aligned with the Burp Suite plugin. @@ -11,6 +11,12 @@ Chromium DevTools extension: capture Network traffic and send it to CyberStrikeA 3. Open target page → **F12** → **CyberStrikeAI** tab → **Validate** 4. Select a captured request → **Send** → view **Output** +### RBAC login + +Fill in Host / Port / HTTPS and the same Username / Password used in the web UI, then click Validate. Username defaults to `admin`; custom accounts use their own username. The username is saved locally; the password is not persisted. Changing connection settings or credentials clears the cached token and requires Validate again. + +If the server reports a missing username and the panel only has Password, reload the updated extension at `chrome://extensions/`, then close and reopen DevTools. Do not enter `username:password` in Password. + ### Popup vs DevTools panel | Location | Purpose | @@ -72,3 +78,7 @@ lib/ # api, storage, capture, http-normalize, markdown, … icons/ package.sh ``` + +### Authentication regression tests + +From the repository root, run `bash scripts/test-plugin-auth.sh` (Node.js and JDK 11+). This tests both clients against local HTTP fixtures, username validation, credential escaping, settings migration, and Burp account-switch invalidation. The script downloads the compile-only Burp API; set `BURP_API_JAR` to an existing JAR for offline use. diff --git a/plugins/browser-extension/cyberstrikeai-browser-extension/README.zh-CN.md b/plugins/browser-extension/cyberstrikeai-browser-extension/README.zh-CN.md index d49c22f6..dda1dd5b 100644 --- a/plugins/browser-extension/cyberstrikeai-browser-extension/README.zh-CN.md +++ b/plugins/browser-extension/cyberstrikeai-browser-extension/README.zh-CN.md @@ -1,6 +1,6 @@ ## CyberStrikeAI 浏览器扩展 -**当前版本:0.3.10**(UI 为英文;中文说明见下文) +**当前版本:0.3.11**(UI 为英文;中文说明见下文) Chrome / Edge(Chromium)DevTools 扩展:在开发者工具中捕获 **Network** 流量,发送到 CyberStrikeAI 进行 AI 辅助安全测试。能力与 Burp Suite 插件对齐,并按生产场景做了性能与体验优化。 @@ -11,7 +11,7 @@ Chrome / Edge(Chromium)DevTools 扩展:在开发者工具中捕获 **Netwo 1. `chrome://extensions/` → 开发者模式 → **加载已解压的扩展程序** 2. 选择目录:`plugins/browser-extension/cyberstrikeai-browser-extension/` 3. 打开目标页面 → **F12** → 顶部 Tab **CyberStrikeAI** -4. 填写 Host / Port / Password → **Validate**(首次会请求访问服务器地址权限) +4. 填写 Host / Port / Username / Password → **Validate**(首次会请求访问服务器地址权限) 5. 左侧选中捕获请求 → **Send** → 在 **Output** 查看 AI 结果 点击浏览器工具栏图标可查看 **只读连接状态**;完整配置与操作均在 DevTools 面板内完成。 @@ -34,7 +34,7 @@ Chrome / Edge(Chromium)DevTools 扩展:在开发者工具中捕获 **Netwo | 区域 | 说明 | |------|------| -| **连接栏** | Host、Port、HTTPS、Password、Validate;成功后收起为 `https://host:port` 摘要 | +| **连接栏** | Host、Port、HTTPS、Username、Password、Validate;成功后收起为 `https://host:port` 摘要 | | **Test History** | 最多 50 次 Send 记录,可回看 Progress / Final | | **Captured Requests** | 当前 Tab 捕获列表,最多 200 条,支持搜索 | | **Output** | 默认 Tab:流式 Progress + Final Response | @@ -97,7 +97,7 @@ Cookie: ... | 控件 | 作用 | |------|------| | **Validate** | 登录并校验 Token;进行中再次点击为 Cancel | -| **连接设置 / 收起** | 展开或折叠 Host/Port/Password 表单 | +| **连接设置 / 收起** | 展开或折叠 Host/Port/Username/Password 表单 | | **Send** | 对选中捕获发起到 CyberStrikeAI | | **Latest XHR** | 选中最近 XHR/Fetch 并 Send | | **Stop** | 停止当前 AI 流(本地 + 服务端) | @@ -251,3 +251,9 @@ package.sh | 项目/角色/模式 | Send 弹窗 | Send 弹窗 | | SSE 输出 | Progress + Final | Progress + Final | | 捕获开关 | — | ● 捕获中 / ○ 已暂停 | + +### RBAC 用户名与密码 + +Username 填网页登录用户名(默认 `admin`,自建账号填写自己的用户名),Password 填该账号密码,不要拼接成 `用户名:密码`。用户名保存在本地,密码不持久化。修改连接信息或账号密码后,旧 Token 会清除,需要重新 Validate。 + +若提示“用户名不能为空”且界面只有 Password,请在 `chrome://extensions/` 重新加载更新后的插件,再完全关闭并重新打开 DevTools。 diff --git a/plugins/browser-extension/cyberstrikeai-browser-extension/dist/cyberstrikeai-browser-extension.zip b/plugins/browser-extension/cyberstrikeai-browser-extension/dist/cyberstrikeai-browser-extension.zip index c2bf4ff953d8969f528cd047bb03e0234520d50d..a8315a600b3655278aaedb7e66b1e1645e230039 100644 GIT binary patch delta 28853 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 delta 26170 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 64) { + throw new Error('Username is required and must not exceed 64 characters'); + } const login = await apiFetch(baseUrl, '/api/auth/login', { method: 'POST', headers: { 'Content-Type': 'application/json', Accept: 'application/json' }, - body: JSON.stringify({ password }), + body: JSON.stringify({ username, password }), signal, }); const token = login && login.token; diff --git a/plugins/browser-extension/cyberstrikeai-browser-extension/lib/storage.js b/plugins/browser-extension/cyberstrikeai-browser-extension/lib/storage.js index 657e02f0..17b32381 100644 --- a/plugins/browser-extension/cyberstrikeai-browser-extension/lib/storage.js +++ b/plugins/browser-extension/cyberstrikeai-browser-extension/lib/storage.js @@ -1,6 +1,7 @@ /* global chrome */ const STORAGE_KEYS = { + username: 'csai_username', host: 'csai_host', port: 'csai_port', https: 'csai_https', @@ -17,6 +18,7 @@ const STORAGE_KEYS = { const SESSION_TOKEN_KEY = 'csai_token'; const DEFAULTS = { + username: 'admin', host: '127.0.0.1', port: '8080', https: true, @@ -134,6 +136,7 @@ async function loadConfig() { const data = await localGet(Object.values(STORAGE_KEYS)); const sess = await sessionGet([SESSION_TOKEN_KEY, SESSION_TOKEN_EXPIRY_KEY]); return { + username: data[STORAGE_KEYS.username] ?? DEFAULTS.username, host: data[STORAGE_KEYS.host] || DEFAULTS.host, port: data[STORAGE_KEYS.port] || DEFAULTS.port, https: data[STORAGE_KEYS.https] !== false, @@ -152,6 +155,7 @@ async function loadConfig() { async function saveConfig(partial) { const localMap = {}; + if (partial.username != null) localMap[STORAGE_KEYS.username] = partial.username; if (partial.host != null) localMap[STORAGE_KEYS.host] = partial.host; if (partial.port != null) localMap[STORAGE_KEYS.port] = partial.port; if (partial.https != null) localMap[STORAGE_KEYS.https] = partial.https; diff --git a/plugins/browser-extension/cyberstrikeai-browser-extension/manifest.json b/plugins/browser-extension/cyberstrikeai-browser-extension/manifest.json index b05e3f71..548eb72a 100644 --- a/plugins/browser-extension/cyberstrikeai-browser-extension/manifest.json +++ b/plugins/browser-extension/cyberstrikeai-browser-extension/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 3, "name": "CyberStrikeAI", - "version": "0.3.10", + "version": "0.3.11", "description": "Capture browser HTTP traffic and send to CyberStrikeAI for AI-assisted security testing.", "devtools_page": "devtools.html", "permissions": ["storage"], diff --git a/plugins/browser-extension/cyberstrikeai-browser-extension/package.sh b/plugins/browser-extension/cyberstrikeai-browser-extension/package.sh index 6282a4b3..61689489 100644 --- a/plugins/browser-extension/cyberstrikeai-browser-extension/package.sh +++ b/plugins/browser-extension/cyberstrikeai-browser-extension/package.sh @@ -5,5 +5,5 @@ OUT="$ROOT/dist/cyberstrikeai-browser-extension.zip" mkdir -p "$ROOT/dist" rm -f "$OUT" (cd "$ROOT" && zip -r "$OUT" . \ - -x './dist/*' -x './package.sh' -x '*/.DS_Store') + -x './dist/*' -x './tests/*' -x './package.sh' -x '*/.DS_Store') echo "[+] $OUT" diff --git a/plugins/browser-extension/cyberstrikeai-browser-extension/panel/panel.html b/plugins/browser-extension/cyberstrikeai-browser-extension/panel/panel.html index defae550..835c72bd 100644 --- a/plugins/browser-extension/cyberstrikeai-browser-extension/panel/panel.html +++ b/plugins/browser-extension/cyberstrikeai-browser-extension/panel/panel.html @@ -34,6 +34,10 @@ HTTPS +

#q2Xy} zF*4>O{Dhf3I#7i>GMoN%w{kQ>+l{Kqq_JeU`Si+qEXv*0Cdm1etL)kH$_{d$C4o!6 zRYvD@ra@(u$1TT1ycsX}mCMRv}Pw4qUtu<~qXmU-W zG$eJ>oS=pIFU81KQ&7R#EBcF}hux_7JAEXzXsc>##=sjBowQdqJ~Uw~6mCU;u5W3S z@rH}8<1Jay8%DT6NH@1Cl;RFET`4bF>l5wY<`|!Yn(C0 zJr?bH*ojOuB3AOg7)75jRz2}VRPxgAW66WpJmCy+&4RaWKXBUJ`UGb3=o<&S1F(68 z9hli;+TG;@%WjviUS|L1?via=^hVX{)~=iGM1Jwk?Q?q$0Po87nEPOJ^WYyO?t!^{ zG~H*^=fiuE?L+Pv_gG+$P4CTZ?F2da(m&wjZxBs+|JCvJ{sSI=8{TyretYV8Fye^G z6kYT)3^1c_7{}I7SJfu-!9EOu)8}mGjKpc<-0)OQcRfUawvHdx+G30iozM!aH=D%L z8oLSA?ZJNyz8pNaRDWo8xpYM4 zGpJ0&Y(G_JRuI5Gu~m7xSLwmp%1?K?SMdScim&K+=YaPfwh*tnQulJ?$@7;-qfhK#0D@Hyy*WEwcv+%lE9MHRGZKr|Ipj1$-DES(KYlL5Qdie9kz)zj; za1n9Ud2RFIn9t2nP(aDuRGUz0kEGQez7Gnybse^o7$~w=(}==DHt;GaNd|x{sL-r5 zLghijaJOuHS~2THXlQ7Xp*Rkp)ZE8JsE-DWT~sL+8j+?@K5zz^wxislMEUUHYKxKQ zEwtmFg9ZBXVwcYv11$-J8w|!!DPUCGCCTwa#=wG<+U=pJx0Dporx9xu+nW%TEL9^| zprnMnNN0<}!H}TVN3?I648Yx0P)|gI+cYbyVA*jxQor>joJ}IVO$^uG#R~727!2R?&PrAj}lR$flYi! zRSoJuY!(m&@g?;`0r7c*nbT>sG3(hxDK^W(EtatJ_?TUn!U>MSd!2SIv?5}r{zFTH zL^|Z2y0!U|>n4I(TpOJUZakKi7HV}v_2LU`L{G9Q#qh2QNboJ=OP0lohiCKeLx@-v zex-+7cE8K8ZK2p)7I*wM9%qm73|1j|&s#+YY98}IxlMuoc%>)dVsXt6zb<9hZPHfx zg?2ztw-Ht!P6D}c84QsI&D|)fn6FFEFd<< zqE^A{ga)`M!arA>F4w`cF9a@zCJ01cqYPRX0qV)HKNeKkkbCfDU;}B z6c{vRA{2KllK=!I{iemrp@j~~v|KWVi%bLOdRGZy2|4mxD~_+qi?dbrFmYSH$Q1Ex>(bO4C*E0;XrKzD~VImhy*@O zd?wYlHAhUgYz1?eK(leZ*1n~;cG0g0Q|?g{db0PXvdGvSwT1E{5-OQ*Qneei*>zlX zoa$=YqQEJoAZ}Mq^&Ac|$xnUAxLLCQ3rmj#`ZJ?zPR7Z&<8{*R0ST6VcoIXhrG2A7 z4rC2Kt+K1+#Z-8m*iM!yS~A58kCKpOds@e%_1HimqV-Mp7O zbj8AhR&VrqSRrC9+br#o`uJH~87y+F^#GP?yKGN(A?t!ZRwy$xT7;(new>deeJ6j9 z7O8!XiFhEowf=>l&-1h1`{rJ#KO0MK_X_5LzQ_px5?vYALvPTyUc zI!npHw5B9eyV0A)2Lazmec`|{l)cck&xrPv5f_$yde)+QfggX~p%$f`#4f#oqbaPL zqHoJCOKtbwL&Yabry)ab7!Ceaf#BnhViBUhvNr!thp3VDFu&p5#M7SxNmT3_&{@fYHc5QHSi3ZUm%?%rvaZ64MrSvMoklpPNXCY`M z;c~z()5z`ouBn8Y$g7FIN?nJ@aoDVM{P-ZlTgNK?CPuoa*ua&~o|&;@x(F4iIuym^ zPR99<ZbzOpI8}XJ6@kS_s*1Pq$N4$zoFFb0wn#i1B5o4AcE4JpO94LYJ74zscRxjMDL2 znLbp&JlJdL1TzlZ@jmhV74F0}XMTpzGC{Kw_?Ayf8m?Y{c3>=TfjP-;d8p>kt{BnU z&GZtH8{|;UGt?c;0;tmep5OgF%(D&Sc`SF`V*M5lbr4d7($NTFVs=QIjs>=r&l?E87%iDb% z6*>f4Tnk$~QMAjd=5?kx@~-(ERyeb}``uPpaPyw8bha*ZI}FI?LzaiXK{2j6q-7&_Y) z+(9Q%0-F(}<+_8|PZ^@d5=Hs2bU7JXe5tW}62kelbNPqVJi+L53!AlNZhRxR`=LZ9 z&M@@$6e-@de8DU1W%pOpaL}zU)up>`J=mKGUA3#F@0-XRa4NC8xUi%%W|GsGUFJYH zsbH@GA>R!3@*G_rr#3RXg)^2`livF0$xiQ)IQMXI!~-PPJNie|n8WFaQ8{ihB+(ww zyudakl&uU@Ek>BWO@V=}$@#9RSg$Zf+$(M@1<)&V+ADivEO%xd(da#9+oLVc0QUWq zO-?TBg2AnOh?hf!rwWmdaQehgSY@KMpU?flKNcnOsRSx zl|EX6?;(1C--;bnKIwM;+<&1TKJ$JC^!6To$7Y|%XP?a8nh)5Ru4j`3_r~2aZcF@3 zJh}P(T)m?fCA`15`~5VoM*Hvaw*l<<|6g7vPxPxv84>_s@?Uuw!GCy}u&0r!ld_AG zrM0P`q_B;psh!JzHXwf`=-V$cpbW=$E>sa#83L<~_(ROOh4%sP=R=f73dm3`4psDY zMo7vkn{&vGZof)N*hui)0=_DQUt9u$sE9dMvb7slv;) z!N4*ni{6HZ51NkkK*OKlRC!wTo3EAy6vu0FBsk}bccmeormHOQm}{K5jMDw7-`foe z`~4jHQwkbdq9SIYi-&=pX~ErgX*iiz8~$O9~rb%*SPt%)95}5 z^F$#JB5X~Oyh?k5%soItJnT<9#UlUQcI+(p43#048rgH|r+2Q=mGrFgfuD`HE*9dG zzfVJ7BqcA22ee6Qmr|+(tHN}gF4IOhmUvVXOrdUXx_}>)Ikz!@TA^;~zB4jI)eSys(0ygh z(M`|s5kV4a-NaS~1h!&nyRa4OH%vrdS7{oeqB;Bu;}-Owl7+1EKCDrxg)`6(zK)+S z_godP-6q>C_tqBdo!lT9DzH|e%67F#SRM8({|}G1n#zON2Lu411pYT3Pw{Vf5j6jc z8d-Z2)BoPMRln^V|p#U9k0RrXXsTBq-_;C?_BbwZ+Cx7!$I&1UG|JU(K*# z%7iukI+R~)UU{aq!eVv)o zS4}?15o-vPh^Vu|_{%a-p?lt`xG!3y;dP0xnHhG2cP0rwccMeSqtSyqD3j~>7Ebg& zHt5VP^YCNI&c*aiJ8*f3^ulNG+J%h{5GTsJ%W(}Dnc~|M_r_3=pzEwHrk9i<9ixec zq%!NFAV&K&z{>T|WgYfIbKFkpbR>_Dn%sp%lk?9VuO&Nmi~qoFLX2tXsFvQB$U@E) zH?6v`gm7qu6_=g$Hc?Dymi%E0J}Ik@1f%I?OJaOeYD;@Uy7LUio$u70KaoNg)uo^X z28re}!m@)pK@Y8|H($U0vS8$KPG3@F$(rr!Oz*&aoglEQ$OM)PtTvC#P$pY%>QfCp zs|jR&M?3gED^m^OY~ix4^v%*)6Avs|>ZQ>%CEwf~0w^Bq@=Z+Nm55WBVPQ)T8{{!0 z0tP)-4UKE2NwYaV8-!+Wfy4OT*a7zfza_4!O)OY{Dqeep)=a(ihi+`zjcz}W&exfb z-5>0)Ko}AX4R2!)_Ap3C>)_uT=U%R!J9{RjwR8H0M)w*8mOiWJuZTQk!#_r)XlOd> zUgvR+hK1ze}q5LH$8quq&8~-tQ#p)Tb%iRYTK^eZb zA2KKc9*J}m@9GnuMN}BGn$uwZ6D^O5qBv(Z_8OHpi;AMGKxgA4IM)(1qPPF;JhU_A z7O~zaQ!TBWLw(3C+Mi2qYA8SMtCIYQ#cBtj3H|;<#{I?qPm!C^dpgDbE%0Noe=Bm* ze=Blfdpk2r^Z%}JMOpa)0hBDzB85s7k+R&fJRrZ_X^iL*7RCewp1e(M4as^NNo|&I z8hDHSe*E27rk<2wMvHwz_iefD%bCotS08V1hmfEshyo-ds1gKo1@Dny#b(&~YQ0R} z?PtvW(v-SS=1`0BO(~+lA`s1f7L?E~P8V?1ukk~>MfYlNKgC7c-_X5f-1{@-w9d(=-+Zj^KZFRaI&{DHFlAAaIv(v`>zzbDoxrg3ZU>N zu5biPM@bTP=@&ifJDL{ zFju&4J5u~5^}NY!9&^LnTox(#BY31MX47(C^3RIgJ|>P z@$|=7!$Lka&8&+xR4T4UI&`E#>d>G;mj9L~%E-tplnckUI^dm>QJE8I8VZ`OJ5NWNIbj)Bt~DAmvR(c?EbwuU@?bWx$k@_a0h{W_e;w3t|;m-wHu|P$zNpY z>9jVQcGl>dHalO8s?;pq0}$fnh-oaQIN;ryyvXkrUv8B-JBO=OTZ(VRPfJ#LSn%=sxJ<4fIxlB^a? zS2xlfz{ATre8FAW<=M!l>M^;HJK0KZTxVrSUGbY#Kg|3`ISTU&*|Z{DqZ{7X)F1%} zp9(j)o2EE?0x;GXQTe-5%LuK*HgE3~F3!mX6bZg8UcUb}YAN21ZtZOVzHZ==Q)Y!j z!0H_&UFZ(IYTy0w%DBuSN~S=@eHUQMOHy$d8OBdqiLZ1`H1Zf~T6F=RAuJYyY?f*v z)rEQJ7yQAyb=3jI>R zj0nD#u8lR#EjjOiLCeA3D0d{*!$S38LN{xs6y?@R2~DT9o~Piiiu)$K;ReH;Q^wm< zU548qqZ?>_sB$D)K;}p5)%W|&B<#>~{PS0BWvuBA6Qt!Q5zm1zoDsZ%+e)@7den_$ zrAG-B1O(NXwjMgWUL0?B;T!FuPRmJF0tAkofG^MNB8$&_X2Q|!? zJKa#XE;7pd>G^fV2m>GEeLU*;Byb*f>A*p_j0bDco9}bF1YSx>A^TDh3#X4SgCWHt zn)-oF>Vt)6Xk8qZ4A6N;qS!Uzzev77{wX+SIYu1ML zP+4x)yD%}E89zJ}6bjhm1c~E;Bq{(C5rRN~flL4ZQ^+C-Gm&9JHYbD7z<;e!xp?vf zt%6@l(W(wwC+VwRwVGdVwXN>{qqSjmHMzaM-J(VEqW_U4Nj45*+^fguJj3T*+x@(4 z{dLidtk36ps7b^n{o6~j5G7lOtbKei$<@+8JFkfs!HTllwrj~MlF<_lRJecDs3hq# z=!pwcMl`aF8qJ2@7Ah>Gg9wotg&KBf0Jpzn!RblM+O~Oa!^BgvG)YB@Sh>_Ck%=PF zQpi}nsIkdNyb!hgw`h>9ny0F$Hv&(cUmhjerkQGpFd+>dOjw#!1%JO2v}rjbndu}~ z$#hi@s}X31DY3EaM6n}>~NXXjCp_C1oIDq~64;o~LvUTU4_nY3mTIB|Bqb%T)@Ea2oAMOg{= zH5wO8Qx@={d2>V=)E1oCmO2FrAzVuh4ut`SFm)J`^ct6tyY||x^2PRG1`}pb$*NVdvjZ(2?;SuUqzYBZ zvgMa$uAd#G5z_RMMH~vxC^5E4wQ3p5Q~od%KNJ;VvJbFoqLvqE=R1 zg`qFLaxet#ErbOAVsh-3#6A_mG1boFUBw9(>}nKmz6*LP$c`qnMGEoC0IHjE%ccuj z`j9Q8+gvgmKEI+R-Sw5;L;$lN%L7%h#$Fq=G5y*%K-62khe=H92;?6w^D*`779?T|J*c5sXe7* zEstIwULC;A4h%9ETc0~(ojjoi&BH7kT0D~D|!BHXh0xHq!)>VBc3X` zae6Pf4LpL>!!t*5Y|!^h6(nF5L>9h8F=N|sL9Rmx0Hs=C!U`Qgc1)g2kPWYxTDBvy zCKP=Ts zQ(O2^@5HOZ3_v7M>s%cLjQ$ij584Vy?`Tutk3fhagw#mOXU-6kU$5dCW1+;IJ4N89 zf)=I3b7Y3Kln5ILQOyOY(V#;0r*UJ>RQwL~te$6vULvKlnUA1c0E*Q3>gcw$u?FTx zSA7-Ko0k2TCmb@_*)&6YU|gZ1w7=rTW#5r_Ljw>81J{v=ADcdvr)f3p=Thr$GuAu2 zApPYtTof+pq5m|iv0#Au8CCC@VfsuIm7ZY|00mDDH0##S&_V1Z_bRrz2>Th}1Sis! z@61D%JxYztt*zmOtk$WW6)SQN;W3_-dDL76vi=cqxRE4B1%8YoXyJ>mMVjvc#2JiTZ&G|v>NV<2BQ@S$5;*6n#mE=b}#Ft zS!$pDX!{Pg=%QVhheRMcY!8Gs9Vp@a>kBrZZDpB$$BB)|?uo%DOd@^vMdqFFtIrKm z+I@&-Dl3EkJ}F36y8BW1JzkEV?M(F@GKzaGwEpubJ}(5!{kx=iAKhPqpY^PF_^vY< zF|zSBUDAGTcJByidfHVtI~$QBO4&2*iKtsY?J)(TT*AH@^(sWNPbh;H^CMZZ7p>aV zz=o6wn7V<-qL~_^+jznLRM)$VDyeQ>FyGEV!1COk?2C`DoCyh1{E`uH3}4nO_8a7f z5Hq|XKj^c_Cn1O+`rBsV;}Jcpn-|CKw;J)H2IhqYKH+y?{1?4bM_Mzl+By_d@b?T# zMM_nFFDpWbHr>PEhfO2VEl+)o#8?7GYe$Dhd-gr6>bI(EGwYp(MstaaEDw@azJ>bG z{SAcs8~1SSo3Y_f-sR{HL}QE4v@^^*Ku4npl-@ge_S_k9qFf}S$@(|R>ik*_3@BJ= zbfkadORYpMbnUX~;ZCEG#_|Op|y#a*<=kc*$!EBVy$ilnC;9tPKgY2Kutd zMC625@Tfq10$dnze>PxdpYV%0GMkwLoq!tFDNKr+*Z|T&;Yl+%cTm0aY!kv}lc1v#jyhD*n>-F+{AV zH_Qw(qPQ6u(QoYtKuvO8rzxUmf6t`{pT|L@j|HYlP(%|$>94}Hqfy70sdRR+c6bC< z-x4izLXytOl_`5P?GrzPp4s(_-f#l@Zs>^iuY`CYrcql}QNE?5uG(18kzjcoUcA$X zpUwq17L^pqm-d^?t0s5}r|QG}&BOYzLf6pf1qa;P>INzfK?*pjhHWLn@{ z#2TnkIV0$i2S`#2BciPi&egpsMF~c1bc*YilRZKRcd==CZwixD3NHi5X`^{0V;)-r zfw^t!Aam492$EjrwW+7y6;PHg`mqSbKC)Hz|R>KT2Cj{lhP&e%I&^L`qVpwSlVS7Mi#dKx2NpEY1Tz zW~@SD*JDZW4xf|Rl`?fOo95Fv@oQH{A(O!>@vbtPfmLI~xdD+CQF7rZzW*GGT2#fi zbW=+frGLlv-v6E#00`=yuF~ydR9~9Yd)|}&5AJ$*6ZLA$)cB+~h(Vd$D^$~)Un0K2 zp&FjaABZd&(!vS>9J{!EVTMN@@JdfpPcVKU_e^!0TXcttuKrTB1O1S}X=Io3T6#lb zPp8{a+3yCC$|et3kDlhiUGl)0{Vu=0a>}s2HV%7)O_iTT1J~lLGiow-Xp?A-)$MAR z=SVSlX-`GciS=P|*>C!kdx3<#`!rr9!&}Bn{|B?+UNZYSU%hRBNA^Qp##d2K;r5-O zrD@&9nVqNVcv1ZTeiE7tx%0zm}8Ebg&H&#DglQ-rP z&vEAiOdv+2DOjB~+W zlPRL!owUyy5Sv=2jxv-bupciBnOIj=QB+L9^5Mk8 z*Nd+tFK1ZkSk_~C=CKRO{n#PG$s0>oo=j;`*F7_Hb=2z48rSabmUzmG!?!$c1I89( z&D~$c&1=dDZX)iqVR>b<6}xR)53YF?jOCf%>SCl62;kdGLX?UXY$ZoWtB z_vh#RgN=<0T~$t=Zyo3FB#o2L0@AMiDF{jf5KO5L{Nwh7XxZm{CU-(5_x^#}`@C(p z4yt8IRLWKPC6$GWb{)&v`e^stPEVQeC+EOHmA~_$fD~{Oa6Y8mAXHO2vgzPiYj1jQ zcpnZDt4QX+wceL;mzzI_sJDh9d3-BTt*ueuSV4D-Irx951ydbmxsK|2w}VM2zsGaPJY)ZR=_EO{1!7db>-nzGj{c!B zpH?gmi;H1&E+w2C!$lTE>u{G7@?z9K+Sphf0s zvsOV`X#U>WjFyPRT^nLaU63Fqf|p%tXvQ(JrRiaTeac~@+wAt&+qxaDQs^G2!| zhM5?8F?r$z-C2X&QC1X8`1}R#Rg&Kvrxbpdqp~Wj?7@n8XKT#Z`R9fpoF!6y)SGkjJK+37WEs z*;%KHd)Tj+(fv+=%4(9@=2g~Ia!4_4O+j;=|7LtvWye)ocZ$h{&X4-4xh<<|TBE1c zo%*QPv73hV(B5IWC6GI-dQ5j#0+#!c7pLb?HC4#RJ4z64sUnVT+32MoG|aA4=(SO* z6WNF;nioOAf(X1^dg{`VFjG*Ow_shC;5Pr}Lc6^1l;)3Y+viQZ1>naXG%4GZ>_!cV z5_dsDI~3?jwP2|(hwnLFJXF7WjgoIuvqV{u4d#SC^CDBjMFm9 zE@4~h0*(a*nikM+Z-8LlfIdD~4FX>pkLx0896fu^IB3)!3BBg@n9-{hJ*Q4Q`cEv^ z5$w!)3D2&&OroIi$AW>`M8zfPjp7Sspi!c}yNpZhj;EBq@SE(6~OKcP83=^1LnbGaxPr^m)R( zH%Qku9j1k@P{*K#{3>J>7~7J*0hTvsWbDy(`Z@(L6CdgpmkT~D<*cBQt1TDzKMCR# zx|9y|C?1y-TN?^4ARh&I>-xv{?IR|99AqaYdR}Eyx~I(W1su};1tjv1%SBJcjH3$606?40@ZtRMK@kA~?hhN&g1SEWR`>JesDamVL;H;CuR zl;JW(2N2fJrNXJSTX{yUi`f~2c!pWW(!l+C69_>#Y)b}O>6H7%wX-}LDc3BEv4Yea zr(7MdB|h-JF?fBQS?>3)b4#v1!Ckm*n^MfTm!TEj0I`ECVKD$m;^kRAQq*Uf75T;t zk0%DZ`oRw$T))md9sB^hdI7Izfdxj-D7_Gw^$OTewIAKz*_eG}yB~dXB=~oEynfB* z;om8}L)I3ov<2#&kiBEJ&SQ5)Zy#nqqUi^}xO(i!^s3Z#{%UYi{wPa?IbwAi{^>-A zQ)Ts|z#~})-z|<233L=S@ex=TXThGOX%nu?N%7x~(}Z&hht06phero!uE% z?lI@TgY%#9z=2{JY19i$)H>@N;%wtFMs>+6fN9#X^>{W4XISayak;g+YuBOKZR?sE zQNO_L@f}LG(3$s++tq)w2l*{Fi;{9$U#d(G!Z7Lo%~VArDqi zdR*5V_5k-FBhf(;2JPMc%1}r_?fkJB=E=9H7b$gt14iWD59#6L5uX-HX9l-;i*xEN z%Y`moN?1+0AcdMZ%%C#>==2fAWDiIGi+$JBdmKes8*tp?%C@i2>j zrAi2d4)oyK5T*+wRHquAu;S`ybilJ6UL^^es8a-BM0Q@flu%H+zrr3P_+ByD*cON zM*OaKF7GU}d6|JR8@D~kH@-d@30s(le3F@=Yv*Zvr-mroF>R8W2PCY;0m<5?8luCb zPy))i`?C9XK){$OpY`nbz7xkp=~L6sCVyo%YopJ&S!W!e2OI);vQ$heZ`K?`Y046s zCyG{}($oP2!yH@Euy*2KY!cj&M_@f2J~il&jE)s)4U=c?_@(7YA9U)3EaInb753&h zlRoEdTmH@Obsw=xdcyhi&8sJOmKCxi*>N;_s@*ZTFMfR}G*M zuM^Vl{69018e^wNqX;Sg_~aU%=#>vp60S(`4z$9~G~2cElM3m@ydSw0L3+m}^M$uo zpGV(b4yh}G>C5tMgR1IFn-lSB4y_1pvCqBv5HCNJmdCp*llzC#iLX2H?g+IOesL7N zu?*cBSG}{Pc*Wl2_1O*d~?y`>9%fk3=} z)J5kb*UF`Nxb6=HKMz$V%Ao|6UW&2vGm}8?`Z|ETEEs*`=nlQitM%j#d;)Cs!7p@o z<-*+wKg#;0`Hkk9NB8zIzy8*lilqXXA~If3DyCLE+5IE_sA;<9J>y2SuA_1198h{C zH7oFSA@uV=LFX#*o+p8|ynm&snfmA;?>f<*cyvMNRp;Quj<3mc#HcEvoY{d#=o;-9 z;j}DLc?(=CcA+vX>w@RUc3|$O2=^O>4JXfwCATqC)xvMfj!x_Ww9^wTWAw`GJBj8; zm<1D;zP(3EOL!tl&#%2EwbvZJ6ixQ*7~if4N zKSll7Kko*9c$J4oFCF@zSICdprFQ_(T0pE8U79CX1Qo#^#ng$m`s#(|94#Vulv7_o z;2Ugu7ri`9zktaP^X^l-3Ft=kGl**z=zf<6+0_qKoJ;UPMPy9GVa}{@_6~t-v-dsb z1NbEmI{78Obz_hFP$!ONpnN$xI3(D*BEM4K{ek<#f=jDcwffHDOK*#@sPJjDh#lq} zE2LK(@0+jd5Pr!|*2z;&q1;z6u6TU7tGfjnHF%Tyu2bh&jZnM*mPtw^Gf7ePhx4;^ zkFYfLCkmrbC_3;pA3g+2SSWfgBtzv5=fWprj7F(=%nw&H71t_CXAqKAEJ1;I?@+W8 zZ&NntlXX_1Zr(~=913w6F$*fAe zRnF|xp1;(kRH|BL6O#{}eh2-aIo@%sPEuj<>p~}M>wdV*2c9N$zyqOly*61}F=X$G zujT0eWNhHa0t{c3r}8O4ej8_%DT8EzON6uZu9|zEwJ2tHlP|q#B_>}iGboHtj-74P zA|bOpHjA^6W{Ha#iOV|^q9*K;uy)`W#Z^(|nO4`%E>#aeyDzT(Smtf^0Q)W8QqH{} z=<4d==+X!3cYGIamM=Oc&7F|~t>CnR9I^+ckuK={u4x%AReS(#*pIH@vW}>=Co1dh z+wI`8hB@li1gi`C$^vs&D4g+CY8zgshWriD@+b5CU9SPvl134u*ed=PTQGsIL1h-`}#tITrT8oIyB1XLx2B z(G&bAwdjp_uJz>p33U(8&YQs80S6=zaXYk^I3)qtDF zN0?FdAV_Q)PMA)(PqFua*SQUNM%4N#M8t?4SMv`zKTAI<;^xQo5i!I;Tv{* z$P^rfO*7>&7dlZMh(u7C0S6#hMS$*Va3)C--<9ucdZo(`km!@u>~sw(np=gSdJ#FG)% zEp-$eG~)*Tom=DjbmT49sl=joB}VA)w4DZhZuPJ@iNr^sM5MHtt`B-{#PZh8b!B_^ zx*>&4ERtf+c&yoQ@8v8UuERDw4VApAc`Of%V&!>&TU+xNX#}!<8h6=}}v%~fSXQ*yp;Qv8Er&*+6=U)~4@n1U%{&y5G{in5TLk?LHMc14n zn+bO!PYuOB+?RsY5dq(4E-fxHzNi3l;=`rG7+%Ia!&&Zk*PAq%9uod10RKc=$pmy@ zh@{!h%zA3`%MCxjKcGh>IP@*UNg4~&EDyW7{@5w(U&MteKDR{DwN` z>^iHSy^9&G3zd@&>KZLMCgihPq}-Wy*cS&GP2y+OR!8fn{OJ@=h`9KWihLv10`Uq_ zu(IGPBLxL!Qqck*?|yLu_{hfCLUp~(y?rH$^saINwfT=5_E3(-vS=N9sj~Ihuj8fM0<4FrejOL zIGonN>=e^8fNQ4Kxlia@+)!g=JheJw>~>M7tK|dwe5>5d0RCofqSX$;)eH$@5=r4V z=F2DKf7iZIXbk-KzuF)FzqKd*k1xPadlxC=|0C04Rpgw}B~W}xWdJgo{yXtp{ag@C zMDWn4$q*#Bg6?+K|dkNlO@;g&nj^kL0 zjWONreQ)hwhZ`aYDZZj7-|>|_EL3Ya5c5)-d-*P7hp1E2h`mpN9Qh5mYVfb zUZf3LCj?m2`we4c@R*qb>mY}pbnIx{bzkE;lw3CxK%uaYuQwT&)TWY5)6^!lLerZB z_W0Y%^RU?OIHBTpTYG1<#@gAxzi;0s*a0=c?1y3_OqM%j^2`PW{l4{JtZV-qhr><~uPAj^AJ74XCNvrMx^BEl|@WjI$Hb2OJnDK3%cP<0&+Dcn~lHk!C z3i{!&s8#0;O=M2e7VlV&cP3V*(jQ>_EYbT4p^XiCw)&L7T%}%1JUcu87rNZ9HikAJd8`O9$^mp z_L7V4VS2V33RRMV8R{RA~@!W{+{8sIqvrYo% zv%pP4l(t*-gtk-l6K~;Up+qMbM}}imYwO^&+4mlvqXC_yZ-Og{H0UAF= zG@5k!597WenrEpG^h5;yIxAQew+ee6-s{*a=?yiu4eZ1$aU09hj==UT;=^>L3`B00MK!@5OSv`mxyyLK>th2)dp&>fNB zNB`my;~mt+Iv@}qoEeSOS48RAtE^|1vHhi86o=*uAJH>FmW0-Y)`%u5A}Jq<^>0W! zOHiCJx}CbSu^1dmWd^w9ql>kbUE`b;Zrf>l{psEuh=r))_n`beU zC;GkjCHzFbQ0Ja z`0*+=2c9mYoeJ`z9#w*lLo+S|9NAr{E#l5k(ET%kn*(D5pg}_IrBgt`2)ym@;tf_81>4F);Q_@qeuHU6;rz4`M!Tff346v zTxMaFmTR+C{Pujkg(RZUuR`}MirH+&oGsb1?I#j{1%5Z~uIm|Lgs3J4Q1>%%&>93n-~E$a_SCb`;;lQwA+Pn)LkI}3!kLCN?j1BT&l9B71~G9w3) zVWSvU=4rqI1AZ&Ka1YcCDr^&a_a6nK3;TM#yn@C^7wb%0`k9tA?2B6psLM!-u*)%u z+V!?`xtO&!AM`(w$rSS09`CHKD6I;&plu*Di_VeqT`|NdOkpgq{?fZ?U?&L#PI-WiJZ=QG(%vF!{Mjyfa<|nfzXEx9@z)RfO z8H5-MkULFXPg%}rjTjZGx3-$+(3J_Mqq~k;8efIA9ra}=mJ<>6I#Oii$QC{e)2;QHKA;@SR|HqG|a^E-o5jlpFR4 zR%Srv7O#0?=96`4(Aw3*0c^oepyd)isiJ77r@>t=e{m!P- zycwAyz;JKa)K`|GNAG~hfg1E?4fS3Q_FCtt(G-zc zPim*P&!SmvyuvCJ{gE!a7~-(Gc3<+Y;vhg%4^6n=iczYYY7?(7EZMdZ<`>w7V_>f_ z`3P)Q8@&}Oy^_<5V$c#$mYef^35isP%k6=t>JH?OB*v_^*6tZq=t)WEbINaz*D zGlFlJCon-p65;zDQ6!n;+=8;aINQ$^V;G3)lhhdgIVLBg&I3?jz*e`4gY$tit}Rv_ zHnoXV^8c0>BKFrJ_7AIP$iuSJhL^Ik)`hX>kYTAJEZd z*HMOCNRaj=HA2x0`leE^2pXf#K-ZZ>1pPI!flP}WG{MN!yD|R@CM+N_$Qvpg?rjVW z_b{GNxx%)vybp`Y&}+!+ZXL1(rp$mlLMDYqoOFU>2BqM}4!cz}FtnBY$5TRPV$_>w zAS0DkfyKF71d?t8U`Y=}?F?!FQ}a&Gs+VY0Tv zL_LZD#z(@kLRg26a_Ejf@R~M_eeJMc5W}OQy-|fCDjJM&eDVgHXJeMt6x z1<&=Hn#G~s_A_}rzO@Dr!0@}f)L{bCITO(V6eUY}6CF7Xr~yt|1<)E8Nz22Vhu`L5 z%b5W9Bw)>y0dU&>wILd9$KS5O^<{>NXMl-ukVIljg^bLB_R{+iZLOTxmc@y(T8zrA z>obCu55q>2(nAAz$ZA(^>z1J7YJpL-ce&K2#4ezvbKNX_t?v+#-Z5$6)zuY|-xPls zM~~i`>=bAx>Tvc;O<0S{ZTD1jlZDT81_x!Sx}qJa=8IFlzLpa~ag|k%oylFpY9`Cn z*snt2-8wQZ7VQMYReRgn<8xxD2OmE!bD6kQNx%mt!RYx=(ZRmP%FT4yWtE;eo4x)( zKCJe3vNGUnyd{>l(J4mP?BW2RJ9K$V33C%;U$$9Xd^UX&lihXeWxsiLd0!eWK`7|6 zVs^?M0QZr(YmXRN3s-JUu)fMCVw_k|7qo;~ohu5DzA;P_F=e>F*W~NCzALFZ%NFj_~maf4fucG=_lDxL?~Q zQr-(*jinSufI$BU26g;HAn1`VcaKgm4##v(3jL%I&+8Q8?-7L~?hh_03i$=89CG*> zB~)jVeR`T*Lbh1{d4w;qMvrhiO2RGSs#7*nXY0cS z8~%rm!|{!`jmi7WE;64M-&f*@;4b3}uF*I6fB*NC-sk|b&>$cX$p4>E}aNIjEJf zwK*yYHmIYOv3a>>UCUbA`m(5|S+(-+bK3V>jv^U$_4@r=^=Rue&wKfA+x1-c!`Ajl z=b_1MYO0Hw2~;9w6;f1%9=7d*vULOTw zVPVD!Mx^Eh%$a_&XYda@0Ms2YE}ti_ERM;tBySxMsRgdXwr-~4eGtR6<5OCdoM z6A7y5E7bOO`41N(%ij_!J+hWS-ki_4@Qky)L^T2>>v=GO-N?eeAN4Tcl_WLV9=%4% zXAc2TY+T@JBDKqUsk=<^T6Xi1Sz2AFfSN=GtwcLk_Q2-8`fPcycdVa#e#b65c3rMF z>=e1OptE?<(0jJb{N35z=W2NE!is*n$|lJ@%&mWHy98UASJC2cX@rxPfBU@{o#YPW zI=kkp{h<){j1H!+SN69hYA#1sj45&EXgy&0(mPF6E3XdMlY?yD6vL z`^JU!V+F$=iqM}Zg0Cr2-aMIGbT$KlVj1?i9dABAyV7@EpcL+6tl&p$}k z$ZD7o96WJXI?=G$SuUu$2w37xNOut#?1M_1O_^E9=~*s6-a9u_G&lW1rPQ4|My&J^ zW=5t2*-owOrro)8F)bsZMdI#~D`{Cv4isIFYOE=j!8zKhQZo@d!r#;xsG zEqS*V}&>|<~TiDC}AQA@AA9EH=iiTzESfB zWGokK?4DYAWd)PF!_q9wTSbTW?*mBa5p9(;#C&v!2rQAYdfI8Lahcn9 z7_8{bLf65zfFH3I`R!p_!i@7YYrIUNkomyI4=#uizM8ZZ6t;+G#glPQ$8mKQJ9}FA z`M}q>16lv4bpkEdnO>mNWPaiS?!IpuM_hHmR=7sDF7tsE$n396g$IodNVayoo{{qk z#%59W=59E@?=qd=z&ms@b{IpHbBpm_q1fJg{Sd0I;Fvutbg$;V&VHbMV=s>RgJq$s z7v;euoBV*AEO0UAfuTunp9;%B3Xl}RHW0DKvH1X5FbEcqMIr8{pY_1_#))E7fXbU%vePk5op})m z`?6jFE-S<+Cq&Peak$q5id@N*_rh3aLN>CjRwp2}Y z&}MZuYBHQerYN<70YV5PV*PBBQ#ZH9C9q76Y3S#2A0NLhGc+D;6{8NQ3c%&1wfNAm{tSyN$I~ThNl|j4pq5Ov1 zM#RVA?_#;sX%VGZjK84k`CZ}3E5Pf^;w9-gha!sz1b*Ds(`zh2yahW*G)A)ydd#vE zSMgXZZl*Ts!2YqY-eOeC+9Uf7mj@xhuur8HeBDKoy#q)X|G1fvp!I?6?YSY*#;URGxQK)fHt!L()D2pc(45 zv?=$WW}RZ8p5PCn8-Kf3QWt^k&X{wzl6RUH@0U@SkEgM=)h=4HX28_Nhpbve$$?c^ z=?OKODlx(3&rQx}d0ALmX3-C;0Vgbgt5#8j5eo)i2}-6}4q@1YW}s@DtQSA!;(JLa2E=1++ITD*fSfk{Ho2W|LjpOU=M0W)UB+06By_F~?EG15 z?EOe@*_MXC#yavATNLL1CwmV{05!ZTvDnI*j`;)tyLtP4;zkLVQFU;Yj?(Ebg#-|Z|$j49XmBOp7@zXtu&wHJTxgo*xf>j zf_7}tZx6C{KR86UC|QA_7`*$gVDw;I3qLON3e_dg{HP^OoQ>Ac)Hq)`Em#Ik$Yj9W z+~b_x^{m$QJH}g+5M-759svDx2fpx6#QvVjnH8VKG9}z2r4}&jd65u~_Pz_Uq}dHf z{6SlVd`(z~s;%iPz&?~eq#r=o7qZ@ar0A^O*u7D6G~JWA$9nb9@GH!S*du$~3Ucp$k|G9 zs(Nj#y~POd#B%MYU^8}zgyL}2yUm7(Yxo)(MukwP0&3`6OPux@TSIlEc8RgT-s_M1 zf`@D;9DPD61cwRK0F2pYEO_1*T)Ln8-zU|CuiCrWpl!ME%KirY7-%3OaV&=xP}4E9 zTxqQ)%t6X#OdNfrBa+=_X{J27*TgqY%fz&@+-i5KtOwkb^RvsR1=qe{9J*-<1%a(sMj+lU{oDQ(PDI1ZNA!_@YM8pd8;(eIh$IIBb zj1_yC^!<#_p_cJIIC>3jm``am#cXZa-XrL2+$U%!n^sJ11Lll~BC@eJf*fZzXc3q@ zj*dxj{YtN{-n(U=Jl5h!OjVtnS8^((#vVg2KrGbA&8@N)4e?qs%#knKbfSJ|#PCfa zP0zmj2^+Fe$6X&-EH6sb&4*zxJxnM(;#-$JlUJ{uPLZw?8L_hPxGH&G*-NTEs_N6Q z6a@UVf7TnW^lzXBM{^Vn^gXp{L7WloNsR>}G-w_hYM9CxvoyVqlCH3NXRTUPvF40O zv^jB$WNjLZGs!TNL82|UkTSp`u)QSwh?d}(P;I+Y`QbX2LA~FA2v=jSa-WUO>&5-G zeOK#NTnf?Xc`gUsq-(h`9ZB@&4W0efn^Jb`8#mIe1!-i+GR<_D zDJxpLJ+ht}o^Lzu?D218x?eexPdVd01~2Pb*f}}|k$X<((3!fwvv?i8&mwim>={YT zXj)OfI(Sr}nfQ^b?P(}(?TCKjl3j}FaNbi_jxtmUZx5ajhS%&1VIX?ZL71>u- z0UNze>cs|7W2``HK-xv3Am<@&_4Qj2%W8wb_CcCZE6}`@)gu*pU(&I_b0p=uf!-|q zQPR$9CgplU|JFJlDAdGar^~5+JAU0tK3nYo=@v2>-ji`xHyN&zo6n7QO`pFvJtOz(?%QTd zZvQ9xUMa6L__JS7?v;E5MZ7Lff0irx_-i9Y|5oRR)q}7Wv_|k3Y5C*3wPIMB=y1#= z%}DpLwzA(y9<@vlwVA?mP5j*RI0+ohsxKgok>>F*DSM(^p9SU)?Q{)PmKBP1RiAtQ zCexsbXe!}2;*WKPe0C0cAn$KzT4c^8m@uVUMOpoR(PgWY3h~D3#s|3{@iZK&ku;&T z>>6X*)%Uz92v$fF+jZk|s=Egwy2UYovf++J2xU2wTMfbrF2-?Qd-}%x#Mj#+rv5~p zewF0h09DKgFd}gy;v=m%o?mjV6_&uPS~C~`5Y`G-Z1{Jn5t9k7g(bpI+^TAx(I=G^ zdL35RvjaM@-nI+jHI7K)#5 zXJs|V7O=A`$OTTbEooMxy>&zUf~%J3{n2aXmrZk= ze=qAQP=?PZr0=di`~yeDYf zizhg}yN872g*0amqmPd|fhNVG^~Xu^=bVgKZW~^aL**k8Pl|7K@GMo=V1H z>=}dLQIttex2o2;f-w8ct9h#XgKzL{`4I7METk)qmi8vNn9PMp)ZIhpS-%|pQ?^1~ zd!GvL%Uj9p`bamnqutP&op>82iZ3H2jb+`TS_@p(*4m(%m4aAZPb+u*n*VUf?e8C7 zVGiYn!NsIZzrOfl2)s}Kp)gVqd!7J#h3<}Hh59QBNJ zLr%Q^g$=1jV=pgOXNKp8POQ*n_ITKBeT1?*FVl%AVlBl`U!2p(MUxcWe$enVbwdhs z!KK!I*b9Vbt?9OzPrV3M8=mvlIX(~z24;EUT+Gno&3y&~uUT!~R*>UZ@NT{7SPpNZ zU3#2%BccAr+^Z{$0s#EP(df(V{+%3Qiboh$s| z0e&ymy6JCPigV+6-HqZmKijt-8`W?Gd&H5LkS|&ama&`WUV?UjLq5XF&!1OR-kqxx z9!ix+ZoB?G&8FHrcOx66|Lz-y2-k zd0(fp5zgjU4zcJ{FBUgRn)wgW|0JSQI60-gF6F9O$;sv;u$HyOd_CnF9%b^|tfCX6 zv)Hq;JKrZ}W_xRx6g?q^4^i{yxJVxzjpgb;mKKK*VDXSR-a7wK2+th3U;I5Y* zwM!Y|`nuY^&7r`#5h@p4A7nCMJT4^=zNOE8uE>_&TJfN#iui+eh{iuu--8D<=JC(#@%pX)P8wvisQm8gYyv}tPP5CWQ!;2#ICE=e)h6K z-GnT-0<85#SGmXAK|O~M}p_kq;sX`+VB#=K44#hVP9*Zb^7Hu{ye=*lb&i! z)f^ncBTTikK-!e8d`(x9RreE_O!g797GR)nbu>%TL{$5{u#UZ5R;Qtq{iWx;=?~w- zX3|xcYM?_a0|xRmh|C|)n9E^A2IFvQ1va}TN6+**tjFc-jRWk#mG5u!V1A#&!oM!1 zgs_?t?7t2zRJl;1Z)M7Z5c2Ks4s(5D_ZvEt8a_iNS_j&kxHeC9hIOCRYx$9f^p*_( z3VKOoi`NwyJ|FIoiQ+FWb*HDtlJDGU!>7lnZoWKIvokbV#raE5&VirRjro-8Gs)Bi z`R5m|9IG?R)Rp5J&R`Zm$n9m*0MRW((e>pPlP| zc4fE^_Y~fr+Ly=j?b?F=(#R*~(3gF0`Dc&cF>l4xk39unZ2Za9-Q2N_T}Gn zHQ%vKUoEzNpHY6fHs1)3$jWE=#b2>_S7Osn5uNy$IJpzjUFDdM@zL=iQ3m3x1Rx6un%mrNw`cNT zWyZ+2D5F%`oO$3|6P{^ah|cA&e4vQBE_j)6^Qvon0gdXZfllnP zE{m5DerEwu?ap_& zKzB0x&w^q)`wc}?qV|v{|9OITrXUC;X%B{)6=h4vE9slvC7zu?eSp?@K4yzTnzu+) zFdl@V!9p+pIa%_{kuEiINQGE!PQwu{7TuOjI7bY9D3wjhri|1eH+je|izKgrbV!Cx zwNq|k@V)7mj|gQXqh;z#mYQg`U|EkgPt0$IS=pi-@@3+3piMr?qp5hfB5b1W(Vf|T z4?hVd@twn)@b)&WQb50h{U6nglShrv3O!chH>B z;)w~*AG-DH;iXN;$6$GfkVZd6V)lS{DTPDSqLjdaLURF_FZX24N;3-wrY!5O;X*cRGQY$h}Na77www$c;7?GRdvRS2@();qvvkJ%> zRF6e99{3*Yfqh+3=5=AmcH}QtPBqUkjy^$KV2cI3uaIDXi+nM-OS_^=7}Ke&lB9Vg zu}d6|)N#}=9%MAW9mxc&et6*^wjws-aqAn_Znyjl75kJ__lPlgnm3qw6R%Lo2u;k~ z5ODk5XA;@23_cg?h@KdzxkI*?+JIz2+Tpdc->_$ai6kvmkt+d=b)v#FuWbsGfhb4R zb!)^&l!Lcw8zL6yt?e1srQSm8!R?k!`k*zb0FJ+ss>(a zN?7r~e^#w9(y}x;rem6FS`XmK*Uey$94x@&?@fkq(Tcs%8cc+Yra^l?6!0&Uj`$?~OLQN8@b#%b z)Q<|+9rV;1!|%F82<>Kq8<7qZI1=PBzk5=YIG_r`51JxJ(xUB2=t!ZDJ#Lzj4RZJi zkhzf!+EQIAE~9atmrV`gWUMk=(QMIQ-66?EytgHwAbWJd-ZHf_?s^5T8b|J-dCzBN zs1QAA#iolw61s*ArBc$lw`E_^p(r?Oi(Ir&UiA)Uv3QeS`4|4%VPobZBFDq4AB1{! zY*Yrb+#icp5SUF6IItBB0K@%fD)x$@IdyE^rUdoOD@tYht!yDUcuSWnH6y%`U$$`~ z77&}x^oIG-4X4xz#dX6PvFG|0HB0Jf9j88eNwAqC?(<)bPMH6(Y$K|j?g+@>uNn;8mYWTxNoM>X232iF6MF5 zZo^=2A8VUR!wpUgQ^>;-p@SYHQN1k1NZ=8%BjA&z(`(do)ZmQ2ff!*Q^nPTBo8q6+ z%@s1H+5cP)QoilYu2;MeZ!$(~Pk6!fQPc`4C}31V;@rLc8eKiYPBH0xXZdF`+NV~+ z^t?o&q=(n&oXg&v_dWP5?|t(CSS0Bc-;b5gKUN-mb`WJ?shaQq)*G~0C@PP^dem}L z|9XMQL)W&Sv>$3Ltrp6HUGv6Ott@t%msRm?=a~~~23rzn=OKY#A})VgS`t_*KPp_; zS8vpjKx|k4Rvk#L>2b6O75T_C8F1ZxhmgCk_i1Oy?>4A(?V`vhxM6Ure0@-`Pj#0z ze>4!#txF0{hL$%zgov;uxkQzig*SrhA_dNm7(w|`$IVw?hyt&*vyPJN=5W6c;zkD; zkFHVD*Bf-LtYu&aiUMJ|0}K;B=|-HHjPW}JFlUH!6O=m;9MRi`rVcP$6#X4(Ux#c# zqFaok%W~NuYkxXrfpx9QU3S;Na;GRM1>)r;kn*aZ*O2>QA4cTPMszU$L*c+=$7ioj z`+S{beJ#W3DjfNth^Ev8%WLzdygYRI!{;MiAJ=3pbZuYv8y7K(XK{RR5vds2D4eS0 zM(-LV4m_lee;6J2#lMD>dLLr6f_ajWa;N~$G^V%^QZ3~VAyk08sQ?u-u2jz7M*`f* zky)kbX1!sc66a#PkA5TwX@kC8TfuC~7e&Um)tJZ&a3DL6d!kX%j3+kKCve<(cHmOT zqomCs?}>acc=?AUbuyn5rQK*d2kJM9gZZAT2;IWRAwMVBn^H%}4srmoX0E^8@?BP} zO=#jT6Gj+k3)C1^#knD!Zso@r5@c|iQ&O)}L8KNMpT;mB0qL@XA5lo2zsklfBZJY~ z421N#lf}o1E!uO$oDb)+vXH}g5(G?G3F+xWdw_}j6?{c{o!y$^X#WY<&n9n-!?y}ZYn zEbz5$&DyqhgAxB@Wu8qtC`dIz8a3&Y{J`4W9@+HO-OF&z5pHv_eS+ z#v$~NDJEHZqpi808rYdzqqsv^+j^O-C6t!!EIGF)4;x!^5;me^x zQf>8W`Xz6*sdg`^M)cbv{)_`!hPE7S6YMqIyf`)n$xR*u^Mr%Hsq%hwsUICk5?@n9-&hI$w4*(U z2Y-?7u0dYigFZThzP7?C^AQ51vp;wXqjD@{&+YV^wU)-uvH5hnwYw|P?jGSzlFZwc zZeh zK=*>zg?$Y_JT?Wt*wjcVotla@PkfIg5v|*-YKoD`U)`iBJ-5I;`5RVkrmdA=5ne-X zV2!`CND71IZD{>YbSgo7I`R*bFAKech3j|HK3s6g+Kd;vrPGaLUKzzcQF}$(BGm_m z3pbd?x5e@Mjp%IsBc-6tqBp@0_=Pl`>AfeRy<@+NTVC&XyQcnjr?+_GDI>GJl89JxDzjIpx{m2!b6Mfqu{|e^$EH6}WiGPuLmQOMdv#je6 zzz77Oen5%e5F1U}qZ$i{#Ju89CH92h`c)&d#p`?{8_9vXeKEl| zIxp{>F!cJXui3rU$)^~JIb?8uwXRqvu%+%ANjj zbH$DnJiy<4u;v9|rrDY_+L{RVVM8cJ)hWMlf^s7qGcP=_ruzGX55FLMyyJbmgMGYH z%I?bmXuri+4|^&Aw<*+lUaw~?#Y^q0N!Z8h`IMq zKT@uxmtJZR8G@$XUE%ZQK0Ty^HxPN0l>(7IQR-kHn&>DMj@Q&^aca(3RZqp?3o_D? zRZT-X%QZdnd93+6MFEqO&l?v?O1VZ#PkO{**~}bjUS~e`goZ_;aphoMdt9<_xindC zV;>RIvg^x{?E$6=hOyiP{z%)MuaLd$@va;Ls>ZM`F-?(2D49EU{!+;CbVc8J2J%Ho zrwXN=NsF_p;aLz>5mFWI)JixxVD?TvR4Ycxj01VgCq%YW0?&vvWV|8b^pkCk@J>#$ z;-{5uV!38;bIfAE#t9VzqI`MZ?BuDqrwHPPJa|;hmeqkXo1!2y>Xh+n3^#Z{aQ7P@ zB;i-9o*ZIpBwX`Uc>_LAvKPM6&U%xIax7&_76^qxiJui3qLPGSW|pk-5{4Equ7tfD zddX$I$ZU3Pyqy;3=NingVyAsG!Cvd=K^AfX?w1GAT{Zrgi%%PV*7ck{F5G@)`>Inw=iH3xf1I(T=AbsEyfvaR?l0ef2VIxB7U zV2eQuV`X3ja~Vverm210*~-q??6SD^m>X;%Wg>7*yG z`mJLY5UxD^3|yI^q_C1v?IM@VCsgibb--j+eqyRU!R@-#X-AUZ0lSS2Mc%OFOboM< z^J$E=^GRUFn6O)$t8W^jwj~*4yJoX;+f>yZq|BxnyrZg!)n4MZI>n4K^t#Cve#}qI zE~JXj6XfJTkPTwavEc(N;(%8R;_m(onO|)K?lyoxuHXQ!67D&P6CF^nJ#k9#_egbG0xTqm8_CV1?G~O7W&icv^ znk!LSiG_4HjQ7a#5UmoWqz<-1`Pte^EF`lOOzt$B;y`%>YDUEg(Ae7)U-U{pbu{NR zcQG@KW3qFnB2I7X3As!@Uqn)CkQSS;5;_ zh0MoNA9Iy%b#^q&@<)7{6h*@)^Rj=zTBx_YixZCvzao?ia&MLnQls7^gW-q=KyMg^ zSi*;;knyRVPc1CxnOTqvwq#sc^5s(?o3x$^u{0%dP4(BwqCs|`XStn-bjhLT=$)9h z=)*yJk&AVmxcDh)PsA*@mKe#9b#$nk2J1ogI8`E|ve7B9X_My|BQ4ttaxa?XFTw6L zR-z89w1@52R=Ozz`%pihj{J}kezSy(#Fk=0TEWYd1zqo{^7p?ZyLkMSGG@jiVkn$m zt(rD-zcr9H|9Yr4k<;(TS*MRxFFQ4_aobFN(~RC*6fiNaV)KAs2^3Kmd)jfn9LoZF+#BI*Wa?t$RL zx7I8ANR+`$?6M`CYoAFJp*ekqX-tMn#Z;9tH1#6)YnC-rr?)T5$=vF*l%8C$CFQ2+ z15yrT<6;NpTM9;IMPHumxJo8``v-EAoudo{zc(-ac2Q`9BZ>pq)J~`xwFK$6r^5IX zUg+nu<40-zB*gZf*>pYv#UljgQTNcZD87D5L@HR;zOXJu_00adRfmh{3Czz|lJ$`< zi|pZ5MDJXPs;XifGa2mON}-#(UJ$W*;EH`$Hsrn>Q}2E|~`i`>5&(w-<&ofv1P zW%xxA^6&m=gA_Eo2bs6W@-O7x$aW6s71S4Eu1j#6=Zi@)B&2wV1-(Te(O|^Sg8ard z|0^-Hr<6rSP<*=QX!5O~80(RAHmHn&(Nko0Yt5tTvtt4q%C(AOTuy)Oe6f>dPzU1C zgU;ilFT!6h7rfsUG}EZgZ$eJwGw4)xXh;dU8jJ3N+m@Wg^SVp7ioF%NIB7_UxZ~`u zVSBhfb8+~Sd?Dx)%f-4nU}bDx$P~46TJqTmSj098x$Gkc?iGX)bGmRrI&4g?5VwZSFNB`zTJFZf~$Ql%P* z=Sy;&P1xn=TPolW)~i`5l@fpl-CjA(Bit+6y`t`g91CEE(1K0#`&LijTs!mVQs8Nq zbb+tf1AjrB?3r*5GgctWu)ivUsi6!u-aO+5j3Q<{gljSRRFrUdc5WC)o4YQ=v> z);OU~xjFEJ5g86~HTPP}?-2Mzx#(Ovc8!0599X-D$_=@P&G)l2bg*=GRo;(j*Rz|V zGjj8=lF6IcxFY?ARA60dVf=v;>ClQUzBN(Y;HJta)B_#U0~@oQ;i6dYufq_*EqB^v z*#yue9nafBTGWe(3FewQgsx=ikdBgz#Nxe1e-L^LPFhf(%x_O9kd6xrAM0 zPRmd+c{D7sor-3&=?B4!RieyFv|f|w15o>C-g4>vs545S(7Pk^m?_49KIn1VNmlU1 z?+y;pmD)Kg&c%M{F#_z|iQMD%(V>NQcbck&D2@n;qZSpKL7S8teXJ1WETw-tu*VXw zM*b0+n*?5T--0bWYuKIt!j{TSM0|TS=BC8IH=63GPrM+w3b@vh^!>r_#7k zadK&KGHF(~$6h5K(GS-~pB+D+=~>hE<5jg1>1w3YB+unRO8S zK3Dq0ZPDhW7_tBTuF!aHPUbx=pEfO%#_(T-odr}}N%OaX;2PW^xVyW%y9I~f65I*y zF2UX1-8HzoyIXMoX5W1!yZ_z&dJgBzoHPC0x_6rHd%LQBC7noHeV|?8UCC?>LRLtW zMN3@ym5KixWBUC^@|``{n&GP8Ys{cagqGPi2E2)t%eJ+qnMDba-}6`66$x6L8G(SZ zO#Uf<1^++!E8-3gwlc={_WCBqqBeF``VJ2NNh~c_Td_x8zv2uF?kzH36>uyjg!Vr$1|?eHy+2Gy*Bo6UiY4xOMx;5z@UuD z(KlnZ0-^|9b)@@*cnGO92=R+L1C*SqEMN;Xb{f}w$9Vfl;#ReGB(3rLn9 zOUkiThnZV$9YiNIVO3JH^T~8)o^ORX)(B~$0t{#yRvMVV%sQ=&rF*AWj$!PDX`gXnG&fk zjMcKnxQK6|6dW?gs9dJ+q9=&GKvWPjdFn~w9`2S{j>(#CYIrF7O41O2`4JE8GB~_` z)zbA*78V3^%1V<}tUT_DJjiy*dJHd4J_rtkb$HQ#k|x7e1)0&v5LE$n^WwGdCV0CUZG#1qv0%`J(|d4UmRmb4_eN|Fq{_HT&ducX~+z@ zo;poV0;`*?9JQFNkLe}mZF-Zg3CAHtNOL~xWl(oik(Yo;$GUk=}T0$pA zX>IR!m$&WH`mh7^j*J#BOHMw={b1fU+sB*R+!+|%%qFL+*$A7B@rm)zt!|9omg5O8 z*TX{rwVBZ`%Lhs@-*q~#&XQklG81pw+%ncrX$T@R=;PrvJRqeaJk#SkkRpjDX3<$&VthPwNy97#z&NIWsKfT4LoAtwc{ zh3iGRW5T`2O`IaX*-h6pp9?GYZnNZ_InPkGIJZ=9Pmjj;@eDWk9zk?_szWEI5~Z$2 zefZw|2&cIlnIY~5s!uU+Jv9|$zV<7gEwRRMu*>j%?7=x%vedGcM0PU9#S~*edwd>m z&fc^`x&rPviKQaVCaBPoe9$-NP&^%JGU#1krtdO`+7um{G%Dz+k4P;%oYFI-`I-am zpJ)&-l;Ufa`w0oQKN$G1u(5?bMCSy~F%AfO^i@g320k&aV$k4L&}0;`3X}eHSCE_U zq-KyHyu=LDJcjG9r>+)NG*Qm#0jvIo0FX$;9fyA4iAs~hJWecfQYbEA%tRs zY-D_HV73X7*;tK(RF?@X_W6)9@Bt=XGgrK|CA##&J$#Fmfb%7m^p@k(Tdb(DX(6=A zz=j2}s~<7K%=d~fF4!Hwt-I7NahjP#C`DMW(1XyE7Zg5JhtE2_`x=nOhh}LaBtmqa zs`M|IiZeKPKphT)OfK}N6iybsI&)kIoyY0jPf-NqxB50;t?d^J-Fkf~N3%GZo^eoA z$Pw;FH$ylq!AyJDqOy*2157?q%ISVnTS7xiRgR)8+QwNn6+19mJth03L>0G`06D2$ zo3dPg18JGnIEYrpkFIKf(0&A74GoU@3{DU^6MB2O)~5-q0&;AYxdlP4w%pkkQ5OW+WD!%RS(3ksV9@&||CN!`T5N&yP!?UgAhs?ANYH0{ zoiu2>s&I(F0?(%a#6mkQ$aGPv2_Lab>?aSb78r?adpqp+D+6`n97=Z26XlILtSy{b zs-l(3Cv#Afv=`_~4?m+OUp=Iw?848Bl}`uR#c!o146|8JCSR*y^)(Vq1R8~!Vx8fq zSXJtX`HNCY?A0$k;^qXFnOa#6Ew?I*OQ6tZA>x}fCH9MaINBuP6R-{xme~C=*|R@U zo}qubB-jW{J5~{?7fjf{yxxn%%{~p<@q>djAUa0u*_pK_T5!^5$`B*En-X&J%?l!j zCA}g>d_q|#Y0NBOe~N#rOcSE&$U?P;+^JlQ?A*e9!Nq+*Cu|asePA=&?!E->OMPJ( z^Yh_)gRqMdF8=gsAE1ejjRLZ6V2$tqT=~g`Etu=09<)m;Y9i>T_X`sKe6k+&_!$j$ z?3srMWLBM*MBja$LY||#!nC`(8Lx1@kCHj-_(!XmLa+alk{H`8cpn`<1X;cAMx_Hv7Ah?aC&or+-@CxODw@<4v-yrx#`;_`gM9nSmFk(m|c zYX@5|mcbcEKyUl~+OyTYme>8xty~liSQWIl6A>IM*(nmBi1m+V>7{~)UP+^_&g=um z`UMnm1arhOOSGzl%Ed!pDIn{oF$cle=m1Nfwu~mk+eWH^L|#w#JfVo2;y`oACc~+! zFAZjhETp!Qt}A(`vNMx}A0nt?wZ1CBJg?LxEgcF+cKIedSnOyf3AZpnFs>w1>CxF3 z8~y}M1Q*)ZYvRCAOz7C(%rd7WX(#9pF8(s}vuWwVLVbNS9EO-$n0HMyM0AKBcw^{{ zL%}f@CIDnyZxjc*bc_}SW_33A9`5WEuvS;V*$<6#Bp;o`R{QC?lHobWV?D#D z=~m;e$(@)Eelu@RZ=ufV#a!&&QhrAVF{qH~CrQaUPRE4hIL=E<$xO5;F!Q0OqUi;( zb2#OMOLPiK)JZbS_xHo%%$z~H9u*XR zNe%Q0f}sv1^bYabpnW=pL%;d@$^#Yk+&Q>Jy0Sf)QS|(NwTIb>(n>%m!>j6goUj+f zqf?_~6I|nr7J7rPWqzUK85fBMuJaUdXSBuWF4OY%0R0_1U@y=8D}MLl?wDq<^byM= z&G$NWwcwHgH_W8!0Q=zx2;$Q{u5p%G)1*kv^3n$Ryhn#j|5uNcWKQkUpy$sI;B2VK zN31BsX;SlP~pwP~+bUWu>BJ$T0YQD1{KdBaY=LMt@F$W`s|oF@fiU>vG~OFbma8~p;zC>T8H)m@Vpp4 z<*}GU-E06GMX<5f4yVnlzvZ%JS_?-H>#K4P*8}F6`dTLcV_9U|VV?|{7jK3q+GGU- zta0$wa)dJhQ{KB`PvxbB9c?=((=ZoU1r=*ddYUJQebd!veEd^|i0k+a`m?-LH>AcI zP8qlLm4qV4&AtnX3u#ACz*YsG^RI*#cBs=H&B@l?qW zDx0cl-k+J3nBaXjCe;|mX605w$D1A-XwhFvc&H}|q*gDCOLU5fUy zGXiO~YRlKhvEZ`_HjCK9=RkaJUT%8XRrJ)$4(5(P=(1QgN1gHfq?{tVVlH5teriLd z(b$M@uIekJT?jO^b8P5KZN9`*e{cT@M$Ekt(^a7Gd2~2FuO_BCW?O%EpDW3|V|ApJ z$gokX1_bjF6RN0}e7F{YXoM<=I>W71t%F*kk%Z3>Wy{Su!b+P1j)IJLr)cH4KhgA*G#*mN6_xkBBd7PBeVNU_f@-V(gr3&krLetGN|{) zQa=i9GW9MZq!VItS~w&eztQU0A`MmnIZJ+1dn;i<91@U>W|l=$5H*Gx4M1*=|8!ji zGl~%GkhMca4QL>J)NF6?+si8|K z${MVpH;7B3$7^`guZR?*T);PvC&~>c_nm%&u=qlcCBc?xU5JU~xcGsp9^er$ymd|s zl%o)^R3}?y7c$CL8O^;j1+K>rs}hJ;tW}D%55ULG3B*eOl14Y)E&3I>MVOEFBNl6z zc9Z(&FsVMcCgoLFkyVkg0ir`x2>MSM!s0mDPTL&EMC-!pZ4tpP-?0Mj5mE8=OCOTl zzIAq^y!YJIF`sr_{E#{jaEhENPm`_VM6@-C{K(8cWP~$lu$Da#ZyHQk(+DxH62w1Z6%4}91C8wammL$TmZ-BC4a*)ap&4Q zAALAeH10q51ct3pihkuoKxk0GN#jq<>skX9SU^6BaPUbrTj!z`G@5kfRQNpTI5Dud z>ww%+x0IsDUzHKdK9Rxvj3bwkep=zY%VF1YpHmiW-n+hA3ys?W{YW6GstbZJvQbmh zX$A@tR)po@8ov|e5YeR_^ZBeHP75zL_Z0e(KeVvaz&v(`x(25y;IutK@s(BbY=y%3 zqH4M}@hJm*Rb;$5HP#)0(-r~jiPt;`Kg)kTjD8AhG04gVa$!?{#7BzXRUR}5b&LZ? z0-)+3Jv#CPdX(7}BV)b9x3$z6t%ZXVg1o92?+~yZgMf7GRoMKXv#ab9O0AqVJ&+8j zJ9k(>bhi@T3;jec`>9(O^{0LcxA2IprzmdTLBze^ZDY!< zH6o6Bq5}bj!rdI?NXN@#T}o)d8e(reXkB7$2-Z76a+gK3Q})wsV16x-nIXCK+y#Ux zl=r7Y>-VfNKJ``ayizaI^0%9RN%3->8-Kio1_Ba7{-?X=|CS?F0;r_@UhCIh*i7Hj z#^gU*ya`I$zw7-;p)Z4>Q0FLy=9_C#M#%A^V4F_`n-OG#BCi*mRl!o%j*ZXuykGWv zXNSb}LF87xk?*XPBgLXcT-zRuC)@KKj7Meac7V8qD&iOhs|PP*h=uF#C3WtZkgRd` zeDcPXA0be-;{fI=H=JVKEBEtz0owCaYN?~ss={O}&)A@u8`tWw!P3nLK2{w|a7Zub zB*xYelP2^r!)9vgjy@D$b9{Vc&2;+chv?OMjsQTDqqj=7xO~jMW zM&isv_Uzw1-E$hkR6>-DeHXW35qt$F?C#Lb%BY?l zdK0r?;_@9Ewb5%$>9coSx$Ch!=ib&^#G&bHO5-AG%0TRJ#v$J~|FU2=n*7B6V{5y!RLyxEKEF%Orx^g|c8S`6_8YmOwqQSTA%8>$t?6bTIKP zkW(Uxc*-GlNM0fdz7S~;bH7Q9vyp%~14>MpNZl?srI*M)cWLy{jpzse;)y1WhmYV; zZKH&eb{|+vl6vi_^^u(+L%z{$S&O%d#rMlgO|cxt4|p005l2AOnLtWy64+tG?AliS zbkNEFD6(CqzxA)u<&mIR-9i9CKY@P~^!u*{<^LUyipKVimJa_`238dKT_1YQsnIw_ zQ<8=}M?G&1ZDj1jfVg?M3^eiV=1^~4I`fAS%UUjrZMvVQ`i9%xr6GLK9<}vYA|Hmn zbTn?bUw3?eT)z*a(*@=hDGi3LVWmdr*u|7AeBrrx_$>=o6|Vc@7cxR2^)Pc}^>idPI+xj3dHUb7~rJ4abye~UWh}v{rg^uepSpk!uJvrekXK-Bv4drvA9IUk*1t8=fPlS-L z(qv%ClyUZr4VLGv@@th;hLLFkb^NHLyfPzif%;>J5eC7dG*^RUlc<7Vqn*Fi1yj<3 zq@MekjqPw4zJ5J2wJXEBD10+hyq3>@uj>Hg1f`F)&>X+XIkA0&J64NZ&ZcB3&ad<21F z&>LY5j8j-biGcWQxtdTxVW5w{P5!*tC1Ur~t7k zDh9$iL4iTz*dn!Q)t_mqD2LUnl$$S?uwjFmI1-~VSQ9Ktjm)=h`D*!=b$tk+&!($^;rWqE{g%UKUt19~7t;h5?|ihGbnY)Z8NNS8E6ARf-F1n%6Z5m>obHK5NvhLe*Px6J?7SfVT=K zC#gt~W2K;mGJxO}^CwJ>f%qChb>S%lTA)(*IG$1>+G9!KjB8+`%vj6Y5?K?X)QRRO zfCLDe@C$sLYukY5nVz?|E49G#8u*6CfgTqqDgxs zNaNGq5SaxFNWy83Bb&HsXZC*cz?7;I{9#9>uQM=Sun{(9VAU<N**FrCZ|DMRU1R-B1D}o|>q2P@T4Q)pSl_8Nt5g zL}@uvHzKGGuw%!uA15MitLF2>w3|{L9o|L;y{<+DFd2vgc10s&L@{QA&Y+#L!j2-~ zB+0Q6f1cW>UtyduB*~f4dZfv5HhNDqLqs)QN?0S{a5|k&qLX+~F1RinX%8sw17Wt> zM)}K8J;0ui5o*C8azXGd<&!2PYD24)y_NYsUjb2(#xfuE8SO#UemFFa9#p?_|&@Ka=ZU>^f^yy)ApHaM^VE zMSt6txWGo-G(G1X2Kr6;#=Tkhh6Q6y!Slm)jDI0JGHkKEEBBYCOXgY)KQt-U!w~V( zaI$Kx(<>1$-JV)%^b3N0hDpT0k30nfozm*I4F~oI@SaA<E7|hfcCk;snphs5i7!ef14%R1Xj(v=w-2sY(-n)Sf62Aj~ z>^%W;L%j(Z?ulWp16_G%w{X_GH#~4&W4i1bQ8UIR-x98HrEaMnorzLIZ40!qbCYNo zbWXyObbwXG2^++0a((3@CO=()?(kbk241Pbq-Von!iH+($=`%S{E9?}C~&@?_p`va z@zT?mrpIBs^@d$R@Rh$Cp&zGKdN{9CJ}kBQ%?gYUjR=gPTnJt1U9ekDI7mtw)m5NJ z4oWRj@Q1}MF+^jy^QFChc_;BIN5yJlp$SfL|1ges`KFD301UF5m`7^|GZw0*l-s5A zgFDoF)+YXy9JhH!G$Ww`6I>NPB0OOP6>&@=;}c7eQ1V+AgbDqptukL-$nk4!&H$E; z3X&6zYlCxFuy;aO^^ZI7$&U9@V4XdcV`-$LW+Eca!DosJoL{kVsue6fVn&Pz!`y;CC)!(lCuah+ic5zkwj zmOR8jetc+RPdf-#fJ}K1R8%)lsQT~>pUL$km>gDt(l7h2bO3)IXT~_Dct|NA#`vs3 zdiyNTUyIrjD5<^+ZX(ZkZDjS1CwB^i&o?h4|0j2ux021S#c^$y;e`}75@et)e- zT$$sx7#__zy$Tos5(-Lg7yVdB?waEcBktO-EC*c3V!c7}gn3HRVdj&`m#uhm{-j&r zVBr`vvoJGJ%5DQb&d`cdF?8w^c(gW>1 zuz67^?49>Ya&wDCs1V0L_ozMcykAhxevS@<#C|umOm$zZ2YqjfQ#{`e_`ImhCdR~< zJOp>8oTH(Ohq%kI7dx3w=d{zOTuGK(2{u9h=wh+`RpB+r;LQkP&GgX7&CI7^C2~{&~SIza#*U9@? zd|kNYqerg+Od;Y5X`$+*jG{d$VMQak``}D@GNZ4ETxawF!6VkB`0VA(L<(v2CZ820 z9oY2u7nNLfEf~>kW2|;YYH@3tu)j*7q2pg4`Si#kL~(8IE?;SSwIY3f`Z=?80fxH| zK1KNEl#-4Y`R(M;&BDCuZERxDNzV@UIzkrgFDZdjHHGKr@^Ff1* zyO?iUj`xNVxs?NrW#}U_kj2*SSX2-}#wzE7DWkT27>N);&s7!Z&Y;{SVvc#$61O*o zOqI=4a59cd?pdW3Ie2xcXI7Lup)60F?lJP(W_ikL-L^LOwv~oW_sAOdx80t~&hy|U zY4x$)!3$oemdY@)+43~vJ95)aHgv0=F1CC)=00jaX)pQ@K7^KBZW`|2BbQ7^kzsqf zpRGf+yO2ikVb8ZP<=#RagCZ~3hmYL1vBz!Pvy@2EbsRspxHy-@0#2PQiRYDlQe8)3 zDBAe_Ya8eT{QY(Uf3{|l=yD~e=O9i4Z(3Wnsoj(g`=Rk%`aokx2nlc{WokK#Pe{q2 zB`UZ_$pxHvi66Ek)&?9(X}@6Cwg4~>wO*DBpHXdCP_YqM}E;^rka{CM^cY>vQ&sp{zjV zB7aKDZ8kWVsX&p#K1UCZHoVOKh{cH1OKR%@7|3n?iRkwB>D$OiZdP8o) zxfmBu1Y~<~xdV>E6Flc3^R@$cX7+VclvhyD5f8T@`eo5r$e^XpX|>GYPJ@O^j}u%* z-Q!g}&A0XjEN(!`pHzd4%ly30fh838#KDJ7fow&h>`OwT&9H?Cq$QFTjUL)-CGu_) zuVG^92HvXXqDVgUWH?%T;0Sx4HO;Oa^eg7J9StJ=!X^7}j|ZNk301;9SQ)OsN_|L$ zHSzc&+b}gvE>-A|SWME2AJ86W9!h^2K4=Mg?lHVD>C+Y1?cfNoTlwe;Yni_H*S>}F zzLaL_s^Z}}kc|5GZRiRCcSLHqAllo0!#&166{p+M#9^KrJ#_`fgECp~g@sO$D#eu8 z+au73^V?l(6W7rv7Q>W4Ad+B;)e)T@6pxGuG-8N*sk}UajdjPA0Os@Cv*|i2g<3(M z(35_@XjvJ=pc$;>KdKA0q^nTF6KI?p7>eQ|a`ZyMl+9^k05r<{zp)L(H3WRi3G!eKuHob06E~1{pTt0I)JR{m5sAN)LSV#)MOJgcP{W3~ zq!oVp9Dd47^bAbo9v9O-_QQ)Ct0v0DSONCS^pGanWqlSA!#V(B@9(V@cxl=C7{c+dJnO)evrTq-&YiAH0;;&%tL)@#q(g}iK z4NT7-%l>5D4JtW9I)QyECg9VwPGs3-#y#0Ds-)BfN2-*}uLYl7QW8FdnFS_*j`Z`3 z7^i%}D=hUfNZC2eb?t>(p8yATx*XR|n{CbB-uVpU;mdOxcdE~oOw8AR(~Mld*l*fI zIG)vFgFO6^<%2C!Vkbfs#Dbwd-y0gs-Fg zZp&4~1>H4fLA~RLSG%NLyXZYfR{svw;7sF8zs zfZ#s;)1xcue;-}VtZXffCGG!H^Cn$YS6b`0I5Nu(cPs0zm*yeqPZDNt7>0sKXk-E5 zBm~*f{L^UAaM85rO~4TLXUhxm@l{SL4PVMzWL8Q@*6IqTNG&v3tIcxEa#h?l3)@f4 z=-iX)%%)ok&6Y<{6c#VmEfyqfDV2MxJ1@94I1Zk#pF8Z|nx49YfZ(_GfQA8~WGY*J z#2?%8CXULX*3!&*xV(mvszCFIzA{-mLc8?H2r;7gP>NAl^dpz^xP58Sl>__Ki_FiV zjG3yeoTZp$$DJx$58r2^1hu0~Y6h*0eXXjQSp{C^u$p!pi5(*0)4SENoqR4m=q54a zrod4mPm?PuLc{DMBa&8sTt3M10EPNL5ijk#S^@k{)kLGFu{E?|~120QqAezNA?q|4oYSqZC zNs0dYvKlk8nrR_CcOCk`x=oD>3Bt$ajpdtH2kj*H{< z8M|*kw~i;jP?C}2Qbuk{fxJmOamPjVeOU=nBzR$r9A+=rW^aM!cR+EI8A+<4QB!o| zG>ooi)9CylM6{FFb+w845qcqdKoSG@gc^QP3IYhywatitc zeZPF-H9l5lmC+jDT`&`4o%ZH*RhC(w+Zi(InH=+Yhqfv5j#w0+zTso5kad#`I;^#7 zxE8UO^{faWX{+~yfhDdzg39HxKB%i%th--cK2^C{GO#)>_UcWMmHmQJHOn25Q>_Sc zmC&CSj(#S}L047lBDk6+HIDJxMAdDq0fug{hGVMBpZj2(=YqWVcrULp zQJZ13ESYAH^!vAc9w~Cy>pcx!`EjGF zD!IW}+PW=V$4o8t>s>&!=!cTATvX)=a?MdgVTFRE)|_Nl!X7YsXI6&aQSH12n`6iJbJfMM(SXHVUd?DCtI5Xu(Sw>w8%5 z#MF-~W-+Ruvk`T#aQi$CT03gHB%FnxH5XsiarpLs*u78_gJFM1#2(+`9AfzH5oc5? z)gh_)bqHOegf{sTrmaN!F6nn1!XxLQnH0H}%_p~b9aG-q7;~HZpuA{4j5fdVi)A-8 z&vl%-JAUz!a~)B+;4t^k`mW;BX@;1QtH<8VB8y{5#*hXjD@%UVjqy3;Z`0OdLRY`46^(baC&xFzZ|!Y&Ofi$qEnBRvUyU$;MP5QsfCu}AnBU}Pi+UiSJJ4dM@e1|2g3)P|Vm|@8!mXMH3?{<(baE3iY91G5+f|Udgag=5c2b&{w>{ ze2?rm7G2LU*R>G>i2_kjZ2*v69DNdx<#S{$}OA=H1QJWVeN- z?58rG*BiKpHlqw0`izy^M!xcm5Au(IY(|JjX0OCRSO$q+k8_?u=5)gpQF6@ubBrwy zJQxqCMg3)vPC{ORvk&^vMUR1NIe4~Y=i3}zNiunE4tKsn^6HV^SGSe2RCc~pc|oJw zLHPV=;sNJ9sPd8;(Bx|aiJ*gwR1sq5p)|YWn7DzRgQzBqv4J*5t&9ybk?RB|fSD`8 z4~olA?zl%)gjCWZ8ebfsi0N3`|M)HFG|RVSy|;p;N5o5fBr?EVd$ebVd6v;FX}hw= zci6U#KZ^ea+RZT_!~gAHk!?dPa*~^X$hIQDZNlI0Ze#rS7Qx<9+0N14LBJB=n)UWD&j1$mD>uGx>F5bgvR09caFKz6*sCu|!5XmvoXdv5=8rPY)cO6=pbIlLZ(MODAS7J{#=vqAn=Bn`fgzo*)RFLKnKOz>$nZUX1_H3%>_vb3J z(H(Te6c7uMHw{aQzV%ebdSa*i1R^_-IWJaXpJrjL<&jR*zTjK7*`brd>P|T}W zykrMp84fL(aj7J??Ao|7Soaa6*u&^%^Z69Bw2hlM?jXKDLNf+BR~Ja;~2}+xFv95>vy7 zfZwkfGk(M7H&@1w?>N_m09VHRKUPGf{i`2a+04q=#?e8^-crfN(8Ab3RNv6S#?JNk zA&{VAVZS1b!jrmKy+e5+7B_1qBoR(b#^SGLHa#89S{`-+GVCC}l1#WFC9gmnRd*b} zbp`g&vm^9KLNAnt$=QprDaNpxAaX3uh|6nq@#TKi{(Pxb^ZoW7-y6gQyA=#pk3J~e zmpTw*oR<+lRgMxK9d)CTDo}xGb^qY=X_CyAn=U=9m1ZPK1wCxZ@|ylGLz<94Hw8JY zInm`ZYHy=+dl$M^LwlPAt}WZgI+Wa@#-_1*nQqKP^Y`**0u@ozaQ!s>wj)k>o6z8g zhKa5cB>G}KNf1$P>xM|@{8mh`TJ|ye)`@Xkl~(+D`Dz)H zP6NmZyE`_c<2GNgWKOYS(MjvpjLq_OBPdEr^*#;oe2HmaXA6@g#d_M}n>lUbaqdKv zHvel_OhoowFAbTj>7U?L)W)h9w4}(f{c0B^5_T>D`qT}Y{1OeiChF|##nY2(fE-Zn z^EfHE(x1L%Qxqi>=F8ecN(z^hI)*<)cnru%%_A^cDX?_Dm)S(SAjl7AeoMGa6jZw< zOxNhO(}Xp7nwESZiJp@I`!3Mvz!{Oag~D=Ea1z$y%FmPZ)~G`EtlOgkrsWc)c`||= zVvU-Rt*8x4bsT1G&C+Mwu!dF~K1Ut2;O7T^?=%)DLltl$m(oTMmUB%wx1-D5{J z$2G_Wn?H*zSNDC(4y$UTxnTFiGc_7y{TSj69|x=#u8nk~dRIUEz6~3lI1w*|^S+mL z?~(v`yAtL$UlM(6r9o!nJO0lj-U&GE5pGX`u1}%uG)>M5>ZC4Y`s##Z6h==v zi59wVDhHQ@ww}nCX>Wuk`lr%F-7JbYLv#wr)ll1E_-4ABT?U9wCzG-tBj}w;hUZLm zRrwJ26V=d77;)Ru1UCmDOArMT?)DJPCghj7d^L65!L2Gka|0nA~sIHTvsu*qX(xW zFw(}L=0dEd{>OrO&%%?0E^gb*#B!t28CT7nr*tlw88e}UnvSIv&leh%`jc}AyL+PM z=aALc)m-jR-Zq4LNFt8}D7!H-4wu%C98v_Uu9Efd({Vh(E6n)(xXwKfz`W4aH;&V* zT|IoiO#wNcZia;bPo@;)Kh5`Oe=!C8{;!^{YNdp%hT=sVV)A;Hom-xFVT$oi8PIRp_oo?CEBxJ2!`2gOc>5J5+7 zV+aL};mXBMU9VCqw7l6W<}HO-gYgI+(Nm1s(;S$IvyV^Gy;L>>TdvspEjlU?r|Chm zshUh)3q&bXwf3Y_(446EJ1We@L4(_dZbfTT>0?|fmWwLQDW|ibRw5Mk183;7<9dB} znjWh}*9Sus#^j{v6eS5%y0}5sU>C0nLhYmPnaoJ;%>Qz(E0upPH&Kk4U_QI4w_Jm( zG;$55GmC%Nmh|zHC~8{oBXqE6fHpt#W6`%Ja`Sru`yZsENVKlIMU>4!ar4qv$pFt; z-$!%K27AVVO_)ta76H=y;ik|i5|5lsEK-a}7BCV#c8`c3vkjx^d1hQG$$N7dwkuMO zp)Jj6i+i>_79h_@tZ`NuG^mayJQbmEnG2(73Evr@GP~@Ax|w5zwWo?;8+)Cx)5b3y z>AHn;i&&q9%`fzz1X4!V^AqT$3e{yUo-`BDDbp{PoX{%tI*d4H!MJ_` z?T73trC48n?lim&!*Lj!%)Imx(*x|sOkJRP!ea{j)PkMThSsZw$-R zy4qch^k3F-tUHy|q-qi%re?S~llubI+!A_WB$EV3(-}Vl9^w+2fs11te4$e9_P*Kx zcK8D~uxqbu3(iZUUb3G$b2{KcPsT7D5~1&>hAhr@jxZ~Qw0fc;mq>Z^{8{OFE!iZXpCRBXbW9Nrccusngy3Egf8STg4;zenmR{113LQA4=;|^`t&eOT3;sUl|{K5 zw)Tk#;i64^c=%g|Kq>tNK-{s&Yy%njq;`0GDnLP_6e zZ1qUrAe8g~)ccd3)>;#Cglt$}IyZYoHqZvp*cd7bghJ4p7_kj|wUYA47Dkdn6TaG$ zKH;GIySc&GhhhpRSIEJ3Ms(R3KrP@NmgSFz zwS0sLwUkA@JSWwjs`~xYTP8OAC3(M21yS$=t_Q_8-oeQkQb#_#7K%fc-K)|lS-pTe zXfu>xM)03E-lu`LG0fjsmLsx%Y7I6%;Ay{u{5BIyBj2Wp0?ObH03ze$rGP=8fdFp+ zv+}jCp*CRp{cnQ;0>ml(p~;9S3(!c&iqgFe|K1e^2n7fd67pYN{hc(nl>lG=?GNP- z-KYSc{@YbXKvqIjL`j)eM)aQ!4zTZ+)&+R~uOOG-y8L?3o;Z21RDk)gfFol5(g6r) z=RaKp0l_gME)M^yfcl?Dhd*QF2m|Vrpn!lz02uT?VESSHedJ#;zpqGthM13LL2d(X zaw!0-+^0W4v;jMv|1w|5)xg+J$-&Od!dO5;$kNQ%+Trg^`a|68QIosGG%p~LU-mVZs&KIxqMjl2gSQ~ZIf2}nl%Te6~!rSU&unUoqO z&H%V*0Gj3xSU-Y)zyf|YV|^=WGkd^L`cK01pND`TQ4D+&AR_C96QD=*2lNQx-=qKf z>|4Kt3bX=DyaAj&;6nb=Ciwn}rL1r8cVp?-g7kkx%?bP+it(?l`n8TW(JwXu0Zj@0 z9qJGD?Eiepeywu+N1(CT-vR$njQh{PU#l_xRvh_%4MXz(1N^_GlK%|rv%=-T|AOC-Y{yxwC&sO~!=ln;jaKir$`|HfWKZAaaQ2pch)%^Z% z(EkZD{JTN-Yxv?Hf7qkszh(Uz;reIeeswDS7WMeQhLQGnz`wruzwSN#=7joRn<@DZ z=}#`HKO6Jwj>d1BRR3#tHUB~U-z}>@Q+|CY`fc~)e{HAkFDU=G7xHKJugm;zk5&I` d`%V9s{htd323T%@fUp5C1i&qUZO3n){vYTWBuoGR literal 56861 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 64) { + throw new IOException("Username is required and must not exceed 64 characters"); + } URL url = new URL(baseUrl + "/api/auth/login"); HttpURLConnection conn = SslTrustAll.open(url, AUTH_CONNECT_TIMEOUT_MS, AUTH_READ_TIMEOUT_MS); trackConnection(conn); @@ -185,7 +190,8 @@ final class CyberStrikeAIClient { conn.setDoOutput(true); conn.setRequestProperty("Content-Type", "application/json"); conn.setRequestProperty("Accept", "application/json"); - String body = "{\"password\":\"" + escapeJson(password) + "\"}"; + String body = "{\"username\":\"" + escapeJson(username) + + "\",\"password\":\"" + escapeJson(password) + "\"}"; try (OutputStream os = conn.getOutputStream()) { os.write(body.getBytes(StandardCharsets.UTF_8)); } diff --git a/plugins/burp-suite/cyberstrikeai-burp-extension/src/main/java/burp/CyberStrikeAITab.java b/plugins/burp-suite/cyberstrikeai-burp-extension/src/main/java/burp/CyberStrikeAITab.java index 05f54cad..4cb9d1c6 100644 --- a/plugins/burp-suite/cyberstrikeai-burp-extension/src/main/java/burp/CyberStrikeAITab.java +++ b/plugins/burp-suite/cyberstrikeai-burp-extension/src/main/java/burp/CyberStrikeAITab.java @@ -15,6 +15,7 @@ final class CyberStrikeAITab implements ITab { private final JTextField hostField = new JTextField("127.0.0.1"); private final JTextField portField = new JTextField("8080"); private final JCheckBox useHttpsBox = new JCheckBox("HTTPS", true); + private final JTextField usernameField = new JTextField("admin"); private final JPasswordField passwordField = new JPasswordField(); private final JButton validateButton = new JButton("Validate"); private final JButton clearButton = new JButton("Clear Output"); @@ -102,6 +103,7 @@ final class CyberStrikeAITab implements ITab { hostField.setColumns(14); portField.setColumns(6); + usernameField.setColumns(10); passwordField.setColumns(12); JPanel row1 = new JPanel(new FlowLayout(FlowLayout.LEFT, 8, 2)); @@ -111,6 +113,8 @@ final class CyberStrikeAITab implements ITab { row1.add(portField); useHttpsBox.setToolTipText("Use https:// for CyberStrikeAI (self-signed certs are trusted automatically)"); row1.add(useHttpsBox); + row1.add(new JLabel("Username")); + row1.add(usernameField); row1.add(new JLabel("Password")); row1.add(passwordField); row1.add(validateButton); @@ -406,12 +410,37 @@ final class CyberStrikeAITab implements ITab { // right panel builds scroll panes for each tab + private void setConnectionEditable(boolean editable) { + hostField.setEnabled(editable); + portField.setEnabled(editable); + useHttpsBox.setEnabled(editable); + usernameField.setEnabled(editable); + passwordField.setEnabled(editable); + } + + private void invalidateAuthentication() { + tokenRef.set(""); + statusLabel.setText("Connection changed — please Validate again"); + } + private void wireActions() { + javax.swing.event.DocumentListener credentialsChanged = new javax.swing.event.DocumentListener() { + @Override public void insertUpdate(javax.swing.event.DocumentEvent e) { invalidateAuthentication(); } + @Override public void removeUpdate(javax.swing.event.DocumentEvent e) { invalidateAuthentication(); } + @Override public void changedUpdate(javax.swing.event.DocumentEvent e) { invalidateAuthentication(); } + }; + for (JTextField field : new JTextField[]{hostField, portField, usernameField, passwordField}) { + field.getDocument().addDocumentListener(credentialsChanged); + } + useHttpsBox.addActionListener(e -> invalidateAuthentication()); validateButton.addActionListener(e -> { if ("Cancel".equals(validateButton.getText())) { cancelValidateInProgress(); return; } + final CyberStrikeAIClient.Config cfg = currentConfig(); + tokenRef.set(""); + setConnectionEditable(false); validateButton.setText("Cancel"); validateButton.setEnabled(true); stopButton.setEnabled(true); @@ -419,7 +448,6 @@ final class CyberStrikeAITab implements ITab { log("Validating connection... (max ~10s; click Cancel or Stop to abort)"); Thread worker = new Thread(() -> { try { - CyberStrikeAIClient.Config cfg = currentConfig(); String token = client.loginAndValidate(cfg); if (Thread.currentThread().isInterrupted()) { return; @@ -439,6 +467,7 @@ final class CyberStrikeAITab implements ITab { } finally { validateThreadRef.set(null); SwingUtilities.invokeLater(() -> { + setConnectionEditable(true); validateButton.setText("Validate"); validateButton.setEnabled(true); }); @@ -543,7 +572,7 @@ final class CyberStrikeAITab implements ITab { String password = new String(passwordField.getPassword()); String scheme = useHttpsBox.isSelected() ? "https" : "http"; String baseUrl = scheme + "://" + host + ":" + port; - return new CyberStrikeAIClient.Config(baseUrl, password); + return new CyberStrikeAIClient.Config(baseUrl, usernameField.getText(), password); } String getToken() { @@ -773,14 +802,12 @@ final class CyberStrikeAITab implements ITab { private void cancelValidateInProgress() { client.cancelActiveRequest(); - Thread t = validateThreadRef.getAndSet(null); + Thread t = validateThreadRef.get(); if (t != null) { t.interrupt(); } SwingUtilities.invokeLater(() -> { - statusLabel.setText("Cancelled"); - validateButton.setText("Validate"); - validateButton.setEnabled(true); + statusLabel.setText("Cancelling..."); }); log("Validation cancelled."); } diff --git a/plugins/burp-suite/cyberstrikeai-burp-extension/src/test/java/burp/AuthRegressionTest.java b/plugins/burp-suite/cyberstrikeai-burp-extension/src/test/java/burp/AuthRegressionTest.java new file mode 100644 index 00000000..73e9293a --- /dev/null +++ b/plugins/burp-suite/cyberstrikeai-burp-extension/src/test/java/burp/AuthRegressionTest.java @@ -0,0 +1,87 @@ +package burp; + +import com.sun.net.httpserver.HttpServer; +import java.net.InetSocketAddress; +import java.nio.charset.StandardCharsets; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; +import javax.swing.JTextField; +import javax.swing.SwingUtilities; + +/** Standalone regression test; see README for commands. No test framework required. */ +public final class AuthRegressionTest { + private static void check(boolean value, String message) { + if (!value) throw new AssertionError(message); + } + public static void main(String[] args) throws Exception { + AtomicReference request = new AtomicReference<>(); + AtomicReference authorization = new AtomicReference<>(); + AtomicInteger logins = new AtomicInteger(); + HttpServer server = HttpServer.create(new InetSocketAddress("127.0.0.1", 0), 0); + server.createContext("/api/auth/login", exchange -> { + String body = new String(exchange.getRequestBody().readAllBytes(), StandardCharsets.UTF_8); + request.set(body); + logins.incrementAndGet(); + boolean wrong = body.contains("wrong"); + byte[] response = (wrong ? "{\"error\":\"invalid credentials\"}" : "{\"token\":\"test-token\"}").getBytes(StandardCharsets.UTF_8); + exchange.getResponseHeaders().set("Content-Type", "application/json"); + exchange.sendResponseHeaders(wrong ? 401 : 200, response.length); + exchange.getResponseBody().write(response); + exchange.close(); + }); + server.createContext("/api/auth/validate", exchange -> { + authorization.set(exchange.getRequestHeaders().getFirst("Authorization")); + byte[] response = "{}".getBytes(StandardCharsets.UTF_8); + exchange.sendResponseHeaders(200, response.length); + exchange.getResponseBody().write(response); + exchange.close(); + }); + server.start(); + try { + CyberStrikeAIClient client = new CyberStrikeAIClient(); + String base = "http://127.0.0.1:" + server.getAddress().getPort(); + for (String username : new String[]{"admin", "analyst", "研究员\"\\"}) { + String password = " p\"\\\n密码 "; + String token = client.loginAndValidate(new CyberStrikeAIClient.Config(base, " " + username + " ", password)); + check("test-token".equals(token), "login token"); + check(username.equals(SimpleJson.extractStringField(request.get(), "username")), "username roundtrip"); + check(password.equals(SimpleJson.extractStringField(request.get(), "password")), "exact password roundtrip"); + check("Bearer test-token".equals(authorization.get()), "token validation"); + } + int before = logins.get(); + for (String username : new String[]{"", " ", "𠮷".repeat(65)}) { + try { + client.loginAndValidate(new CyberStrikeAIClient.Config(base, username, "x")); + throw new AssertionError("invalid username accepted"); + } catch (java.io.IOException expected) { + check(expected.getMessage().contains("Username is required"), "username error"); + } + } + check(logins.get() == before, "invalid username sent to server"); + authorization.set(null); + try { + client.loginAndValidate(new CyberStrikeAIClient.Config(base, "admin", "wrong")); + throw new AssertionError("wrong password accepted"); + } catch (java.io.IOException expected) { + check(expected.getMessage().contains("invalid credentials"), "server error preserved"); + } + check(authorization.get() == null, "failed login validated token"); + SwingUtilities.invokeAndWait(() -> { + try { + CyberStrikeAITab tab = new CyberStrikeAITab(); + check("admin".equals(tab.currentConfig().username), "default admin"); + java.lang.reflect.Field tokenField = CyberStrikeAITab.class.getDeclaredField("tokenRef"); + tokenField.setAccessible(true); + @SuppressWarnings("unchecked") AtomicReference token = (AtomicReference) tokenField.get(tab); + token.set("old-session"); + java.lang.reflect.Field userField = CyberStrikeAITab.class.getDeclaredField("usernameField"); + userField.setAccessible(true); + ((JTextField) userField.get(tab)).setText("analyst"); + check(tab.getToken().isEmpty(), "account switch must clear old token"); + check("analyst".equals(tab.currentConfig().username), "UI username reaches config"); + } catch (ReflectiveOperationException e) { throw new RuntimeException(e); } + }); + System.out.println("PASS: Burp RBAC login, errors, escaping, and account switch"); + } finally { server.stop(0); } + } +} diff --git a/scripts/test-plugin-auth.sh b/scripts/test-plugin-auth.sh new file mode 100644 index 00000000..d1703ca8 --- /dev/null +++ b/scripts/test-plugin-auth.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +# RBAC login regressions for both shipped plugins. Requires Node.js and JDK 11+. +set -euo pipefail +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +BURP_DIR="$ROOT_DIR/plugins/burp-suite/cyberstrikeai-burp-extension" +TEST_DIR="$(mktemp -d)" +trap 'rm -rf "$TEST_DIR"' EXIT +# Burp supplies this API at runtime; it is only needed here for compilation/UI tests. +API_JAR="${BURP_API_JAR:-$TEST_DIR/burp-extender-api.jar}" +if [[ ! -f "$API_JAR" ]]; then + curl -fsSL https://repo.maven.apache.org/maven2/net/portswigger/burp/extender/burp-extender-api/2.3/burp-extender-api-2.3.jar -o "$API_JAR" +fi +node --test "$ROOT_DIR/plugins/browser-extension/cyberstrikeai-browser-extension/tests/auth.test.cjs" +find "$BURP_DIR/src/main/java" "$BURP_DIR/src/test/java" -name '*.java' -print0 | + xargs -0 javac --release 11 -encoding UTF-8 -cp "$API_JAR" -d "$TEST_DIR/classes" +java -Djava.awt.headless=true -cp "$TEST_DIR/classes:$API_JAR" burp.AuthRegressionTest