From 789aeeb0112c89f385b823072614027fd759c71d Mon Sep 17 00:00:00 2001 From: Selva Nair Date: Thu, 16 Mar 2023 10:32:54 -0400 Subject: [PATCH] WIP: Add a new set of icons for connection states and notifications - The notification icons and status window and menu item states can now optionally use icons that resemble the main application icon. New icons for five states (disconnected, connecting, connected, connected_with_errors, idle_error) are loaded though we currently use only the first three. TODO: Indicate connected-with-errors state using the corresponding icon, and improve how states are reported when there are multiple connections with conflicting states. Signed-off-by: Selva Nair --- localization.c | 30 +++++++++++++++++++++++++++--- openvpn-gui-res.h | 8 ++++++++ options.c | 1 + options.h | 1 + registry.c | 3 ++- res/connected.ico | Bin 9622 -> 4286 bytes res/connected_error.ico | Bin 0 -> 4286 bytes res/connected_old.ico | Bin 0 -> 9622 bytes res/connecting.ico | Bin 9622 -> 4286 bytes res/connecting_old.ico | Bin 0 -> 9622 bytes res/disconnected.ico | Bin 9622 -> 4286 bytes res/disconnected_old.ico | Bin 0 -> 9622 bytes res/idle_error.ico | Bin 0 -> 4286 bytes res/openvpn-gui-res-en.rc | 3 ++- res/openvpn-gui-res.rc | 5 +++++ 15 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 res/connected_error.ico create mode 100644 res/connected_old.ico create mode 100644 res/connecting_old.ico create mode 100644 res/disconnected_old.ico create mode 100644 res/idle_error.ico diff --git a/localization.c b/localization.c index 50fb1ec7..f62eb96e 100644 --- a/localization.c +++ b/localization.c @@ -38,6 +38,7 @@ #include "options.h" #include "registry.h" #include "misc.h" +#include "tray.h" extern options_t o; @@ -304,8 +305,27 @@ LoadLocalizedIconEx(const UINT iconId, int cxDesired, int cyDesired) { LANGID langId = GetGUILanguage(); + UINT iconId_pref = iconId; + if (o.use_legacy_icons) + { + switch(iconId) + { + case ID_ICO_CONNECTED: + iconId_pref = ID_ICO_CONNECTED_LEGACY; + break; + case ID_ICO_DISCONNECTED: + case ID_ICO_IDLE_ERR: + iconId_pref = ID_ICO_DISCONNECTED_LEGACY; + break; + case ID_ICO_CONNECTING: + case ID_ICO_CONNECTED_ERR: + iconId_pref = ID_ICO_CONNECTING_LEGACY; + break; + } + } + HICON hIcon = - (HICON) LoadImage (o.hInstance, MAKEINTRESOURCE(iconId), + (HICON) LoadImage (o.hInstance, MAKEINTRESOURCE(iconId_pref), IMAGE_ICON, cxDesired, cyDesired, LR_DEFAULTSIZE|LR_SHARED); if (hIcon) return hIcon; @@ -316,7 +336,7 @@ LoadLocalizedIconEx(const UINT iconId, int cxDesired, int cyDesired) * from the first image in the resource */ /* find group icon resource */ - HRSRC res = FindResourceLang(RT_GROUP_ICON, MAKEINTRESOURCE(iconId), langId); + HRSRC res = FindResourceLang(RT_GROUP_ICON, MAKEINTRESOURCE(iconId_pref), langId); if (res == NULL) return NULL; @@ -553,6 +573,8 @@ GeneralSettingsDlgProc(HWND hwndDlg, UINT msg, UNUSED WPARAM wParam, LPARAM lPar Button_SetCheck(GetDlgItem(hwndDlg, ID_CHK_PLAP_REG), BST_CHECKED); if (o.enable_auto_restart) Button_SetCheck(GetDlgItem(hwndDlg, ID_CHK_AUTO_RESTART), BST_CHECKED); + if (o.use_legacy_icons) + Button_SetCheck(GetDlgItem(hwndDlg, ID_CHK_LEGACY_ICONS), BST_CHECKED); break; @@ -601,7 +623,9 @@ GeneralSettingsDlgProc(HWND hwndDlg, UINT msg, UNUSED WPARAM wParam, LPARAM lPar (Button_GetCheck(GetDlgItem(hwndDlg, ID_CHK_SHOW_SCRIPT_WIN)) == BST_CHECKED); o.enable_auto_restart = (Button_GetCheck(GetDlgItem(hwndDlg, ID_CHK_AUTO_RESTART)) == BST_CHECKED); - + o.use_legacy_icons = + (Button_GetCheck(GetDlgItem(hwndDlg, ID_CHK_LEGACY_ICONS)) == BST_CHECKED); + CheckAndSetTrayIcon(); /* in case icons changed */ SaveRegistryKeys(); diff --git a/openvpn-gui-res.h b/openvpn-gui-res.h index fcc45dd8..f8f4680f 100644 --- a/openvpn-gui-res.h +++ b/openvpn-gui-res.h @@ -27,6 +27,11 @@ #define ID_ICO_CONNECTED 91 #define ID_ICO_CONNECTING 92 #define ID_ICO_DISCONNECTED 93 +#define ID_ICO_CONNECTED_ERR 94 +#define ID_ICO_IDLE_ERR 95 +#define ID_ICO_CONNECTED_LEGACY 96 +#define ID_ICO_CONNECTING_LEGACY 97 +#define ID_ICO_DISCONNECTED_LEGACY 98 /* About Dialog */ #define ID_DLG_ABOUT 100 @@ -124,6 +129,9 @@ #define ID_EDT_PROXY_USER 251 #define ID_EDT_PROXY_PASS 252 +/* General Settings continued */ +#define ID_CHK_LEGACY_ICONS 260 + /* Advanced dialog */ #define ID_DLG_ADVANCED 270 #define ID_TXT_FOLDER 271 diff --git a/options.c b/options.c index 690e1be1..4bb90f49 100644 --- a/options.c +++ b/options.c @@ -379,6 +379,7 @@ InitOptions(options_t *opt) opt->version = MakeVersion (PACKAGE_VERSION_RESOURCE); opt->clr_warning = RGB(0xff, 0, 0); opt->clr_error = RGB(0xff, 0, 0); + opt->use_legacy_icons = 1; } diff --git a/options.h b/options.h index 72757a69..5e445489 100644 --- a/options.h +++ b/options.h @@ -245,6 +245,7 @@ typedef struct { TCHAR *action_arg; HANDLE session_semaphore; HANDLE event_log; + DWORD use_legacy_icons; } options_t; void InitOptions(options_t *); diff --git a/registry.c b/registry.c index 88cb17b2..4f8359fb 100644 --- a/registry.c +++ b/registry.c @@ -67,7 +67,8 @@ struct regkey_int { {L"management_port_offset", &o.mgmt_port_offset, 25340}, {L"enable_peristent_connections", &o.enable_persistent, 2}, {L"enable_auto_restart", &o.enable_auto_restart, 1}, - {L"ovpn_engine", &o.ovpn_engine, OPENVPN_ENGINE_OVPN2} + {L"ovpn_engine", &o.ovpn_engine, OPENVPN_ENGINE_OVPN2}, + {L"use_legacy_icons", &o.use_legacy_icons, 1}, }; static int diff --git a/res/connected.ico b/res/connected.ico index 5d3b5c46c53eb701bcf867e7c49ff30421996567..f650d731bedf70a91791fae8c6edac6c69588944 100644 GIT binary patch literal 4286 zcmcJSdu-EH6vuDr+y+e7=_qX(TU%guAWw&D-H=BN4^cP87x;*vv2_@M5rl=fUl$Y+ zNhC2w5`!-c`Um(zjS@6dP>C4h10|y3R35UmKdK-vVfAy`{@?-?`UjSLxIgaiobx^R z-gEE$p_Gk3UaykB)vFGroJy$x(51$J^rwEjyQF8DbVu%g&mPlD%^g>&X4dsq;gIVL zBEde&BKN4dTZ(?uxYE1_>YR>nsJ9nU=thyOFzzBJO%x(n-URy7c`(d5nQ5g z#XVOdmL2U#SnfCC8~xFE#NQfs*WY-r=nn=N>j6!FZ#d{N!a;Z0*t?dY6|010_`Xk! zW(YtkhqLKtZ1QLag82UqF@Mxt4893d7b0LV|y9=uAPc zUDMyzSnCQjk9TwnH2+8(b2R*f??0J1U9_K|UsZ1G&C8}=8I9u?8wT%Tdm!T{`iIf} z41z=FY?L#mM>yDL9NIrw`s{}-_t(0eGe(xFel0QCh_=jms{Ya6%$d-yF<4{^G;bIEA^5F<{aUP} z#E^9e4T$bn6)hbna!BouXsjRaTCqQ*`N;ZhV%~<8E=lGss8V^Id%=cKWMRJEHbaRGgdhpPU@%k#%T24;Qdj}=STXe-B?LO!`fdV<0FW%LDT<-aevO-*Jqjkd$5yQJ+9fW=WHB2aNd{sjn$4` zXfK5Ss=wpuedw94<|LKBWiNMc{8nOpp~XYr`~W8C`mz>qJ#5C-Ix}VbU(t8B)N=ie z_ptxmvj3hThZxA7lbREbz;5bearg@Nz{xkwmUx%Iqr_;}^pDWD3W9KA{fRI8e>>6I_w-vj@)x6$8IG;9QiJgx#NB`*J7{VUE(k6DD(LZ zHZQ{>;F}`FVtn4@ot)o)fxd^tS8{J5zY?dx-pHaad0->RH}7P|Am0J{T_AA;*&i|Z z8NSP~gZ59zX5UV{$6)}-8e2m?qpe^~!B%1X!S}W~72YOh2b?}0E0?pilIM2xmVtcB zrp9-MsMaBMkj5mB4)%~a3RV$E#wY8MZG5NaAoVJ>_dS{h^tZI7J=d?C??B;7*2!y_ z1^9Sbx0`8SA?7X+J*lm1$h&RWE~QTEXr-PnfOE-aeV^G^-Du@(kU6}W`14^U|0h^Y z`+ACK{3UW+%JUp-xLe}^#*oimwdwmbt4NNWPGgT6WF%yLiW%ETzF)55e4iljTuV*+ zy+%j(YmGxnY|r;kzR@ev=QMQ`v!Q82JB2*Up7Md%h;6RFWP5SaqRUZe2*(_SqZ5w8 z;`THJ?G9H#o1?IxO(}buH_zUt1fHWAD0kb-KU9jPn~ny+o#9x z?>P4ZeOp_n$DcQyd%NS@1bvKuz2V%$`_4T82NJFV*iRG0tZnHTxC`bhKng()xnpga z+=8S8xnoTrAWfl>696~L1nkSqZ_a;rI#{EDRm{J+|1$D3cgg-U^B80DsP7`c5O_^t^$iuZYGJ&OUbz1!^$`5&Of=@F~s((fIU!R;gQhECNm6z*{c?8wl9zNyp z@bIg~bUn{8hUlIvJysofwHIgzVbu`lW=v_mZoKA#SG$QuTLap10qDMeX$^iY&N)AG zm%JAv{Q6nDFKYLsF>rz*$0(hF8iX#6(WiO&I|Y8)aE}1}o#G{ahH4>is!j?q?KzK7v2CI7#XzK4C- zM91ZsAaxFMD_q#K-Mty|W$T4_p;xWAFSOx`t*e(Kz}M&lKrHmsr}5-cL+wC0%X$b= zvjQZAockPOXsXdy4`YX(?`ysE3@$N$71t$RpZItQJ`i0chv!*%0^Xm-FyOZ{L)K{(Gq@qTfIs~6v6JQGHbF13G!Nr&$ zO&^A;Xz%mgJrZ;W`5~^=(PQ{of^2>V)BF)%qIRs+=2Fg(4?1REp6k2zsI7IR@}%xD z?7v3*h3_Uhw#@Nk8t3n;F+a5i8bdOyts&|k+z;Rh$-$EQ0Ouuvc>e{NGRIx?>(&`+ N(20}@P7pOf?q9|pj<^5- diff --git a/res/connected_error.ico b/res/connected_error.ico new file mode 100644 index 0000000000000000000000000000000000000000..d3faad49b961352bd93d5d6c051d8d9069bc23d2 GIT binary patch literal 4286 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 N(20}@P7pOf?q9|pj<^5- literal 0 HcmV?d00001 diff --git a/res/connecting.ico b/res/connecting.ico index 46364c127cda1cd2bbb1053e244951827fa046e5..66f2e7ac936b2f74ed968b9565c634e9c2aead97 100644 GIT binary patch literal 4286 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 OQ+N?wqL?tu;QI&Wp`ZQ$ diff --git a/res/connecting_old.ico b/res/connecting_old.ico new file mode 100644 index 0000000000000000000000000000000000000000..46364c127cda1cd2bbb1053e244951827fa046e5 GIT binary patch literal 9622 zcmeHMJ8l#~5G{l;kU6lBMZ%IGB8wZ)5)ugsxf4W0MuwcZB16b25Jw;Ei#&u6D8vCArzmW;vUCOR!1E=bg`f|8$I3FX6+sF5 zjui!gR)s>J0H{%-@ZMznWc}OaV2%l_qW;PAml2<_OU_?1PGU`dof+}HUBbUBuVkGQ z{$u0QKeaDO-u61j_7U61fo_Xpp!l4Z=EE2PMf)B3nSYVCJR_c>{f_+f@aX8nlhe~_ z4roi?M0}sWjpu4|F)j&nKwJ74Kie^EJXh0q8-H8>oU=!p?fE;M@}9B#i|v5M^CvNH zb_;q%_g~}ryMg#9gBQg$RiDoB6+M4_aKIjkvm{9SwlvFjWxmxQJbZPy`|gWn4T&LOveEl!qpEA8iS37>b(~Vg-GeVm`+C$()zpVfdGl|G$xahrQp$z~)2| zItRHKE}W_Oe6bzkW%C7lr8cg3EVQADrOlT^z|ZJoKvU?+&+O?-4wGZ^SyqFHoDR?~ zlsxNRbU2 z?+=Ot>U*C4>=&Ya|GJhx`x}?4y1@JE64l#_`hC=woMJM@XYi1V@2x#x0@!=Y?V$5_ zL=mPBLs>NTJU%ypchEoB)jZaRe$e5Z{2R<-NB$bMW3D=u`3&j6lZ?x`zI%_{mPc2d zu4e+rDgTIn=iero>qi-y&n>G>X8k+;eUW=Eq5kx**I=>3oDS&t{Ke;p?JVIb_<8dZ OQ+N?wqL?tu;QI&Wp`ZQ$ literal 0 HcmV?d00001 diff --git a/res/disconnected.ico b/res/disconnected.ico index 5768ffaf08fbd3680491f22f4ae3198d181afc18..9f2389b39874eee9c7f9009fc2bfd698711ff050 100644 GIT binary patch literal 4286 zcmbW43vg6d8OP6N^H?-CiM&L#AY!RTh(Ri(Vo`@ARj}fQ)}d9}nL19PTA92UYRiP_ zv{PHhN}-kl;y{6t(2&>e-eh0IV5QQMy$O?AWWaO;u~lnSP@%E$_uuS|ml#Om&HVP9 zeCM3+e;(gC_grH<{LP$c^lJ{}8Z*Thb0c6fp9k5K4`mbIJIJ76e7{xxQj@|%Iugn9 z@p&D4?UeR3(r>~&aCZvjWmDPM9gb47Gjh;?2fRwxul$n6_bF(FqwsPH;oYJbU`?GINNJ7#?l*3sr9#PRhFd`?LEM&oKvcPwNe6G~_&?E&cPj#?4;7{-_gz3WyJK8j%C*EOR4e$M*F5uss zh_rf0r+3G#J+%2VNdF@Jv0%Qn>lyS*@?aI(Z@Bc&Vp{`K4sCrB{m_lD1NuNdEsq~j*SNThBMf;3P{|vTeDhuy< zPIFiQjkLJ{@*&Pb4NQk*oH?E7jMSN)!yStE`IH@je}L2Ok{!2>L(#ENgZbiuLhZqi zqWzjn|8>@+V4c4-{Yd>j`S~R6Ux2^4{9GpA-4zWkIdE?cifsI zxpTn{X{_xR&~6%o{$bW=<-NBQrrkboru^z0aF2;T1Rpxqwv%_n==$p5?ek`M(EkkD zwPVl^Qn%#pqWrYwvnP*7f28?uw8NpPfgR6y%fGht188pL;ii7QA@pdX#dZqZ3pNKbM!fXtbO#W2(HjiL<8J)LMu44eoyMetJ3rE z6VB9+chuIJ3jfkfbf%+uGuq3Ol$9>VHj8!lMW5dz?K!mB40``M+Ddh{f2%tdoCrhu z%AhOez#;0m-y8k>uRcA>IxI*;TDezQ9vEuh*%~n7xE09azN2%Ty2*a4t)s8Ghcll3Ig2(mSd5nya1KYaZT)-RSCW@?n_79Oen-WwRs6`x@ta=r7>Rp`-s> z>Xw7v@k6oi);}6+^w2-bHQ&kpJ8hLJb~P_2p$Q&K`72jGW&1VhUqN-Q~yIf zv9Rtqj_ehw)&w$O5%u-{zBtT}d}>amaRz!)C@-6Pz8!tpS{c_e$b>62-T%B2*=NKr zTAxm%-fgtg+0hH`J?Z!zEtT#$;;E@C9$b}ZYZ&$Zsq=V{M&hF`gP8v`{rDk%w1;(< z8fkpP`=L6jdm5gl{UY7vb*Fdk;O;RG&+9HGBF*393~6D$h^wfzk~^u^;~Yp&u{9DZ zJIC4bg4&S3o-t%e<9L|w8W_)`J(h@AX{34R--N$A7*C}g3vD647aEAw0BJq8t&}}P zdKdaPsf|6@c07_-t^1PoggJfW0_)P0&9@ErOKUN4%$aR1gJNuR6OooliMINTM0oJM zdR1rtN5NoRyhwbsfbI*H_R$d7Jc&qvHRe0-8sAvMr3d^z9|CgS{{R30 literal 9622 zcmeHMv2GJV5M4wd(4~k_L=)2>D#Raf6%7rafT-x`P`XS9C7;13PzE_4z!#wK1IQIh zfjHh<@2tn`y}MnXgM;Fco@aM<=FRNv`FysWyXE%WWa6MF?(>0jFPw8nNAvl|`_BD@ z?eK6u|8m#4_Ya*rfQ|ld_ndqB$hjwo0flP-+9?8`ovht~2Z($FNF^A<*s-!sZb4Fl zv13I*AZ?{ECID)b2%@){KimJb9jq~fP4qu|{T1YA?wac_nJ#x!nlDRE9rf>hOdFM456p~TxMY#J>-QNl*k273Et7Bxl?U?LrABJTqY*kQeK@K z-%jGN5V=fDv?*Vzjqgq5_tz(T68az=dZ;&CkG&2Y8sqK3CaMc^Mqe9a;$ZgD%TNDW z0jtcZH_xBB|1`)Fd#AP1HUbS|tu&ZO0@|*vpbw7t% zEiO*yynGJBUrPReBYh70g#VVdD1zK2C@pd2n$l}ab;wuD7yN}f;qbPw4pl8FUkL#p zqfY?Ip{G9eXDm5XPBdm+4I*+jfQ$ueP>#NOf)7-$`2NB}h#lXe1ED8Sy<+>2e^Gc-e-zJIY zeCyJ-Gkkt6(0-W3&m&*lsW_K`z=oBGuizmUKerBm380@_%^oKIMg(d4FjU3Tnd{k8 z2j0Q>;1_vx4*j?zIQtz;bDMZEW6KqDY0QugJlVV^hs_tqf3)6qNEZ_HZt*ftU58RB8d(hahCIi}DfA%`!xJY;vUG6V% RhA6_zC0-KD#Raf6%7rafT-x`P`XS9C7;13PzE_4z!#wK1IQIh zfjHh<@2tn`y}MnXgM;Fco@aM<=FRNv`FysWyXE%WWa6MF?(>0jFPw8nNAvl|`_BD@ z?eK6u|8m#4_Ya*rfQ|ld_ndqB$hjwo0flP-+9?8`ovht~2Z($FNF^A<*s-!sZb4Fl zv13I*AZ?{ECID)b2%@){KimJb9jq~fP4qu|{T1YA?wac_nJ#x!nlDRE9rf>hOdFM456p~TxMY#J>-QNl*k273Et7Bxl?U?LrABJTqY*kQeK@K z-%jGN5V=fDv?*Vzjqgq5_tz(T68az=dZ;&CkG&2Y8sqK3CaMc^Mqe9a;$ZgD%TNDW z0jtcZH_xBB|1`)Fd#AP1HUbS|tu&ZO0@|*vpbw7t% zEiO*yynGJBUrPReBYh70g#VVdD1zK2C@pd2n$l}ab;wuD7yN}f;qbPw4pl8FUkL#p zqfY?Ip{G9eXDm5XPBdm+4I*+jfQ$ueP>#NOf)7-$`2NB}h#lXe1ED8Sy<+>2e^Gc-e-zJIY zeCyJ-Gkkt6(0-W3&m&*lsW_K`z=oBGuizmUKerBm380@_%^oKIMg(d4FjU3Tnd{k8 z2j0Q>;1_vx4*j?zIQtz;bDMZEW6KqDY0QugJlVV^hs_tqf3)6qNEZ_HZt*ftU58RB8d(hahCIi}DfA%`!xJY;vUG6V% RhA6_zC0-K+YTwJsPyFj0dWafu5@ zB8eJz};K$$@hg(%ZhX>6^6f+EY@{O`brpGX>WPRH}(J>Gls{`cN@@B2O! z!V3TF?FIi7r#cGJMF`;lFeF9;9=Cij*STE-4FfO#GwJMMaV&JYARuk`zv;h|V4f7RcH;cO#-4e)u)a7>A~m+? zy$j#oJhgOEZpFAa6KQCBH4W?V45yA78q-}*p8Zp3WEU+t%I3H~;#DodKJ%7kg~~gn zk6eFA->6dx&>Gkpv`QP$>R?!bIJ&dQCH&L;+Y|aE*7JVOcA6$wd!j=!1^F6i@48}| zF)RZ%=!nPV>l|%0j(alK5Q5Yc0)hasEhyD zsE_|cQj}gKN2k1dW?zcNdq{GX%WFDvmifl#;6LpOCB@vOf}C;+n2|?gdL)t){FVG? zTfB#)*RNlA^`hxUxuaaa(RXXK?|>c9z76gf^~x>K@2NX|NW>ip>vL>J`2OXd%KIPm z(%|f$?d^oUrwvM@FIHZo<9kfxiKH~A(%|A_U){x}!5ZB!Rs-Iswy*Hx$Q%*H)p zRaSb(;=cNLq^K^tE3T-c2SO(SR02uA8vRV*r2p=a2$(XqZLs$TV?Xuz@Md^$7zOz# ziFNsWxfXW?-=K>7wNzPAOUJ`+;jGgv;~a-+gEOj+?lNtC{HV^MIRB9pdU08GQDnzO zwKZsCy`jVLmbAJ357-5I$LtRmfm7W&0MEcFZlyc@|3;w;50K|OsWhUqmWH%bQN-sZ z^t9ScRgY@v?EW87XBn1p4~HcBGQd!oaH?b)eE&Vw-fz;+*Cz<@r+i&}D0H3xN&l%) z7nf$x#SOfXlWIN3xxY1Z`+?7brn>*Mc9sW)E!{+)&C4R!H+0ZZ)9w)VzlI(@VE;?W zdvH4L933s4m_e6R#;R)>Su>5wZ`&I+vCs4yYJN2G?jp2nWcnrOhXA{X)yv?!`(Usa z+W!J|K~u-k*1s>N@HHopSBW&dla^M`yiB>tcj?ykD%yzpck7vi7-Z6+ZCA;lORO$P zR&9en4ydOleeBQojSsj1>VV|G-l&ap%({5G%}S3^cF+t4cYqlX;y`O>dD7-Z{`84g z6pihnrU`E)(Nd3W)V_f}`g1D%rCTC}%*v#!gj_P}6KYV)F$SH|6*Sjh0$t8^vrPY7 zfhMNIfwij?&>95IldLNz@T0L5>^+$_Eeaz)*LZU6mP~_eR5ZA)%93}!&hY((z8!jG1qxOtDq_F9?(_GwWWTr_jn5R^QEmT&eMXinU-hF z@JRC0VdggxKEVFfD>ps|Hiw& zKgRfZ%lECM{|No)ocO3-ym;|AX9ehMvZ#W37y_X9XjDcrRd;r%|?pwlmgp9QipS_v7D<<8PvszG`V%pU1%K zU==6@lHJ^LPU0?(+lYMRxc(8m3hWx;es|d5hV}?}0OZ=dM=s_^13c%R*JmRz&sc#s zzV@pr>Ln`XgSY^8nkiK@Q$_`{e$2nxB$KfN5NLi`Gd*OcfdKe&ep~7S+=