From e95b41511ac7aa267636cdb7530796fbdddf062c Mon Sep 17 00:00:00 2001 From: z3d Date: Sat, 30 Oct 2010 16:34:04 +0000 Subject: [PATCH] I2PSnark: Add status icons, refine css. --- .../org/klomp/snark/web/I2PSnarkServlet.java | 48 +++++++++------- .../snark/ubergine/images/arrow_refresh.png | Bin 631 -> 777 bytes .../themes/snark/ubergine/images/complete.png | Bin 0 -> 878 bytes .../snark/ubergine/images/downloading.png | Bin 0 -> 878 bytes .../themes/snark/ubergine/images/nopeers.png | Bin 0 -> 843 bytes .../themes/snark/ubergine/images/seeding.png | Bin 0 -> 888 bytes .../themes/snark/ubergine/images/stalled.png | Bin 0 -> 874 bytes .../themes/snark/ubergine/images/status.png | Bin 369 -> 823 bytes .../themes/snark/ubergine/images/stopped.png | Bin 0 -> 847 bytes .../snark/ubergine/images/trackererror.png | Bin 0 -> 788 bytes .../resources/themes/snark/ubergine/snark.css | 53 +++++++++++++----- 11 files changed, 66 insertions(+), 35 deletions(-) create mode 100644 installer/resources/themes/snark/ubergine/images/complete.png create mode 100644 installer/resources/themes/snark/ubergine/images/downloading.png create mode 100644 installer/resources/themes/snark/ubergine/images/nopeers.png create mode 100644 installer/resources/themes/snark/ubergine/images/seeding.png create mode 100644 installer/resources/themes/snark/ubergine/images/stalled.png create mode 100644 installer/resources/themes/snark/ubergine/images/stopped.png create mode 100644 installer/resources/themes/snark/ubergine/images/trackererror.png diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java index d09505e10..2b4a4d15b 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java +++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java @@ -243,8 +243,9 @@ public class I2PSnarkServlet extends Default { out.write(" title=\""); out.write(_("Torrent Status")); out.write("\">"); + out.write(_("Status")); if (_manager.util().connected() && !snarks.isEmpty()) { - out.write(" » "); @@ -633,8 +634,8 @@ public class I2PSnarkServlet extends Default { return rv; } - private static final int MAX_DISPLAYED_FILENAME_LENGTH = 42; - private static final int MAX_DISPLAYED_ERROR_LENGTH = 40; + private static final int MAX_DISPLAYED_FILENAME_LENGTH = 44; + private static final int MAX_DISPLAYED_ERROR_LENGTH = 6; private void displaySnark(PrintWriter out, Snark snark, String uri, int row, long stats[], boolean showPeers, boolean showDebug) throws IOException { String filename = snark.torrent; File f = new File(filename); @@ -692,50 +693,57 @@ public class I2PSnarkServlet extends Default { String statusString = _("Unknown"); if (err != null) { if (isRunning && curPeers > 0 && !showPeers) - statusString = "" + _("TrackerErr") + " » " + - "" + + statusString = "" + curPeers + '/' + ngettext("1 peer", "{0} peers", knownPeers) + ""; else if (isRunning) - statusString = "" + _("TrackerErr") + " » " + curPeers + '/' + - ngettext("1 peer", "{0} peers", knownPeers); + statusString = "" + curPeers + '/' + + ngettext("1 peer", "{0} peers", knownPeers) + ""; else { if (err.length() > MAX_DISPLAYED_ERROR_LENGTH) err = err.substring(0, MAX_DISPLAYED_ERROR_LENGTH) + "…"; - statusString = _("TrackerErr") + "
(" + err + ")"; + statusString = "" + err + ""; } } else if (remaining <= 0) { if (isRunning && curPeers > 0 && !showPeers) - statusString = _("Seeding") + " » " + + statusString = "" + "" + curPeers + '/' + ngettext("1 peer", "{0} peers", knownPeers) + ""; else if (isRunning) - statusString = _("Seeding") + " » " + curPeers + "/" + - ngettext("1 peer", "{0} peers", knownPeers); + statusString = "" + + curPeers + "/" + + ngettext("1 peer", "{0} peers", knownPeers) + ""; else - statusString = _("Complete"); + statusString = "" + _("Not Seeding"); } else { if (isRunning && curPeers > 0 && downBps > 0 && !showPeers) - statusString = _("OK") + " » " + + statusString = "" + "" + curPeers + "/" + ngettext("1 peer", "{0} peers", knownPeers) + ""; else if (isRunning && curPeers > 0 && downBps > 0) - statusString = _("OK") + " (" + curPeers + "/" + - ngettext("1 peer", "{0} peers", knownPeers) + ')'; + statusString = "" + + " (" + curPeers + "/" + + ngettext("1 peer", "{0} peers", knownPeers); else if (isRunning && curPeers > 0 && !showPeers) - statusString = _("Stalled") + " » " + + statusString = "" + "" + curPeers + '/' + ngettext("1 peer", "{0} peers", knownPeers) + ""; else if (isRunning && curPeers > 0) - statusString = _("Stalled") + " » " + curPeers + '/' + + statusString = "" + + curPeers + '/' + ngettext("1 peer", "{0} peers", knownPeers); else if (isRunning) - statusString = _("No Peers") + " » 0/" + knownPeers; + statusString = "" + + curPeers + "/" + + ngettext("1 peer", "{0} peers", knownPeers); else - statusString = _("Stopped"); + statusString = "" + _("Stopped"); } String rowClass = (row % 2 == 0 ? "snarkTorrentEven" : "snarkTorrentOdd"); @@ -782,7 +790,7 @@ public class I2PSnarkServlet extends Default { baseURL = baseURL.substring(e + 1); out.write(" "); + out.write("\" title=\"" + name + _("Tracker") + "\" target=\"_blank\">"); out.write(""); out.write(""); break; diff --git a/installer/resources/themes/snark/ubergine/images/arrow_refresh.png b/installer/resources/themes/snark/ubergine/images/arrow_refresh.png index 26b8dff1b53bd996a6110e7dbcfc7f61cfbc7497..0d280de31164579cf1ed018e581db43fa209ae8e 100644 GIT binary patch delta 767 zcmVA`T#+Fdf4fOU zK~#90g;HHhR6!Vi=A7Nx_2|00sq05;eun9yEm;JD=#6M0U04xxVT6)Mzd$4iA|fve z`U61(LKj|i(I<3~WZ;cq3WjN}xVpRQdfau-p0j7qOrzdtXgxfBzBX|HPzvzcN33vrIW{ByAC<1fpA+H^-8X3sm^% zaC@Vt;7&^^2I^&0($sZIY17F?97aj7*2Rs{4$g;bc(&KhC$51vm(j#=pC5U7wlZhv zL3au0d<2MUAPI(m6DVe;%Wk({JSyi%19O=f^l$wE-;j`vnb=8lY@~pke_hM%Xo88! ze{+sBJE61n#Z`8@Bj19d2~k4WTnu=}2wzTG{eq$$W62?iBA}GH$lFdg_;@||i$d@g zH{sN28`{&fzYl>NINR$g%Rf;i)#gMNHezYNL;CvyZuMkj*<3T}^SY|Sep%8^IV_8X zR-CWH$w;5bV~0vR<0~Eue^isM&m-+*u)#*Us~AfmW9b_e})v{Od>P0G9qGH zR0A9toO1)0yoMY~xSmCm$$PtVROGZ7U44xXB&HS+n_5OBn#JZO@I4MBLB3EKvp<)1 zkX92|Uo#LD9n^%d`vIUPKYdrcK}l_~v=s146|K~QYn#I@8tWF%|1yCwMy#(YFUqCx zUvOdiagmrM5jV~KRa)YCz^It@8BP8`{BHMLTDMuUT}PfXE0(2D!t6=#>4hzRL;M!o xEx*)(&O#@71;)LyBnVED(IIIWE|V;*{_X&J8a5m?s3G{GnfBxqral%Oa??rFSNBYiI3Z0_Md_xGPO=bV8BON?m} zQ=hX?Uu>!QplH-`;NboVuJOL6hBz@$DX`$(1*t|V}jj} z*?y2Rs&Uh7o09ERyv?8Me_vFlCbCY)@ppDWYEVO`;lmo(@fq^#)vR*@`c@Y_+k>1fSJhRm5(ssmYK!2f_O0S)E^ISg zJ&AkLQRZUrf3s~L1?MlJ-j^V2d(p+sxZz54w*xbcu-mfx4RY|DLNX`%yfQ`KPwa5t zvm+?$A@w1uy%04J!d*22Jv;5AaAPX$Kf_?&7BS_ah5BEy_05w$h@Y|m0000pIAW1|)RCt`FlFe&WXB5Vt`+X;qsV3%{$;=paWEvBj5n~L2q>4f( zA}Z>_QVbHLh+v^0*gru8ce+pt-LynpWZ^DY)P-XjV@sj78cp=ZB=eEX%$>Q(eB8O8 zuQ!267m1$-&gOm2`Ekzs9N+`OAKEVaBVRuFkXrhE1w7Ax71$o#s;Q-~m)M^RWLkIc zjUPPPkIudes1Jn3-q-U^u{pBim(HI3>$~^G&~cz2oG3MOoOtGwfP(ZzB-+(|`nxkf zBERT>=2&zezYN+_`?D)Id^B)Jd)LtZLj#m%ve0w_P&76KTHuq~DV`UveKgRad=ai; z7hb1L%qcqZxgzG0iaTKx4$sHd>SNaul&n&?_xp%vX{yqq26-ZhOuB%@>=VG$XV&Ut z))K5@DL$V~d|%P(sbY~JHJgJvGYnmg6I&}Tols%5K5CV>*2Z;B$MTh20t_c`QuK!4 z-NTeKaX4n$hM^p0z!1qRZBFD9_uP8fO|mMmHQaVR*xqt(OSl~wrG!5p4#P5xNwsQJ zNI7RUH-u8b*6<;U7MOxs!hB)|W={FFP%RAnAG#cpPwMSEaf%E-mdS{0kej0#xjL+p z*y&5eQ@63YtEYFo|Ll2k|L<31bjl>Z{ZSz&e;OjS^-V+&gd;1Q6_+XhmdLGW*EgWO zL8KH1xdj{Ptd26%3%y)nEwQobK>rm~xe(?G4$_K^K+8Ua+WNo>-oX_=mVrF@w)Npi zus8NCk~tF-(g{krX08XfwhNe!+8T=y~cs6Yyt6CuLlAQ-Hx+li^Sg>7h zT@JQ%JnD%J)Gg|D82M`+|2|2%t|~~o&gN(1u(aoQcu&oQ=-alF7X5hfJcZe*3`z@S z2sJgZEI?Jpk6P8r6}C3G=^R_LELkw5Dx8wZGfiTq-?^9qQkKaZI<)NH@>T3tJ-_n(EtDd07*qoM6N<$ Ef>RiwkpKVy literal 0 HcmV?d00001 diff --git a/installer/resources/themes/snark/ubergine/images/downloading.png b/installer/resources/themes/snark/ubergine/images/downloading.png new file mode 100644 index 0000000000000000000000000000000000000000..cc61019adfe5de9400d2de85aa717d56f3a924d0 GIT binary patch literal 878 zcmV-!1CjiRP)pIAW1|)RCt`FQC(cG7bN=TCyup&zNe`ujH1sA~?sWo}%N1$^uB>y zTVLDQwlB7!^F$Z?5&zBCdH$DdiMRaN|9QVJ-kU)DZ~{V5lmw^n)jI{cBks`Fo!v)w z9T-3kDtLiI&ksG|R&i%+I`Gzk>)JoM(lyYU%+oI3RHkmPUmqo@~=e40eIkVXDh9;DOk zaz1`J!kDl9k&$PPmV#xrz%O7rKaJca6_v|nSOsgVEs>YCH5PJ~qj1KT#-Z58@k)BLLo2pz;HTB4=p^HljN*nfky_bGV577wy zLl@~1ovodt?ceR7y47yI{nPfl$G$yIfBpA2-K0_a)m98%+fUxc4@eZnJuh-zwj78B zE^q#9Gx$ah8O%blkuftU@2EgiDgrgr>dtSvpf^{MwUMzA?hhj}5P|*TpI-E_7+8n8 z#_-4CaC~P1GgbxvOOcA<76jDfX4yH zmX|F{J&m`z4|V(Vfjn-^-@t8oe6iK(+%%NmWz@#2!%m-b)D!b=ViLood><(_g#~Q^ zt~wVC&OmNL-E9<&)65t5?TdD_{Nmf>LrP3RUr~kSvtTg`+L(styJYLjldjGj47kn z9^&rvNt`j~E(+mi`!26lBF1TqSe3!y7D#Y8P?KxQGndC&d?oq6Qvd(}07*qoM6N<$ Ef~-oZY5)KL literal 0 HcmV?d00001 diff --git a/installer/resources/themes/snark/ubergine/images/nopeers.png b/installer/resources/themes/snark/ubergine/images/nopeers.png new file mode 100644 index 0000000000000000000000000000000000000000..b718f9c3d1be6e28f3d541549894ef127560433e GIT binary patch literal 843 zcmV-R1GM~!P)pH{YgYYRCt`7Q_oM+U>JVCwkz$*$~MM+5T_xE2{9ot;1)s@F(%*z zBqoNaTnsT>PEeox{@i18gRK>(V1s6 z!1Fv11OeTby1{qGXL(7TnviW}zs$Xw165T)Q53tvKp+4v#znGD_T{MwxdP|*dcBZN zry-ZiL7`B9OeO=GqJiF|kJgJL>OIgdT3K3JqC%mNEqQZu6SCPXa6AX9t|scm)o;oX ztj2%F?}Gs#2m%G!@e*WD&ns_h)k=_VsnuapDOutl-mTR@zu3gnJG0Bi0ryflKP1ANqIgYbEGl7sl z%ryyRfth|hZG(%&BINUV=;-KxP&kCxX7eicj**cOo5cF95sAm+kVqsz zH}oRS(9W%`E!rZ}b=_{1b*xIW`Rs*qzTBaJvTaF5%`MHb$%m6fwOWOhl@*A^Vz9Tj zXLr_`K~WPwkT}`ob$i3+2HA;HsT7pUWm}QRi%^sfugYTOJ)&9qjgxdf8Mrn8J3Bk} zW*CNHS0PCfaH{!bIF=;Iiww)eB0Uk?5-Yidu@VG>L0I2dw^ZFk?d|Ow4$N^@sVOxb z(}|j1Bh2MT)~Xqpk(6>$)KpQjT literal 0 HcmV?d00001 diff --git a/installer/resources/themes/snark/ubergine/images/seeding.png b/installer/resources/themes/snark/ubergine/images/seeding.png new file mode 100644 index 0000000000000000000000000000000000000000..1e03d42694badebfc61e8a61f8695abf4f62ccd4 GIT binary patch literal 888 zcmV-;1Bd*HP)pIDoI2^RCt`7l1pqGRTPH*d+&_xOzdDgj4#WmncEJt=3#3R$u&WS4;?W{hWs#6zOl+EI;@Hl3#?HLQ zcLo~)3m^^Q?2hjLfBMfohhgucz|Hk@(8$+Bx6XxZlH{~I_IjlTQNi|1y~%*2q;;;2;H59uL#eaABH?B=0& z;pLv3x&Ni}^V1kEh{zx5;Mu|{mI_EOp|J0SW7(lkuD$&HcqY%mTo;r$(3&3Z$d;su zw%N9wZ}*ijEn#|)d7x??Tx-L3O^D1zO6XdM_tb8_U8C0&N2%OgxkorEz%^aSYaGkP zZB*QKc*HO5dt`_EH&mr@CFcl4+w!ous$;RbgJij(J%OyPL523!d^d$@~?c&Z@j&v+`jsckyBFQi8G_wx30bU zIyrtij$_?ZnLUsYrK)lGd&T$xj19jscXsZ*tFN)S*#b_abI5Lv(ACZ2W9=CK)UfSZ zkMrkJ*r4El{Kn;HNF-ZCnCJkn!>!fednz1ic@yzy_`*qoP~uC7A`mncNTVE6#Y05) zw?C)@lRePyXCp$KoS(QaIx=QKbQO4;by#u}YfBC`G!7p4hQotaq+>&@RRFmH2~`{% zw{d)E0BK7)7DaUEuY~EaxbVUw50jnJBD5VFrY^v;ft8WIQXKh+SO92F_TJ2 zXw@A!h7Z28g?L87>5T#__p2Z31}^rNGJign`t0dso^n9}i^UKL#h@7)e%@5DU^RcK z+3rMF7rU5CZd`fbP+#Bz9le8Aql)boLtDQWH)zfK+FKtZSs}VS;0I$i>2Q$}FiLnp z0^$+4D*UfB%e~x%wg33*!}(a>`x!x;3<63G$K$rwVP1eBLMUx9`rU8YvSh~WN^Bhf O0000pI97#k$RCt_~R7-3VR}?)nZyY=Rq2PSn3Z=1_pnM2PNJG;o37-g1 z*g(WzNFaeAQWn6Xi!NCpu|`N#YST@lZn}utU4u#+MIseKE%{0$*f@z}PsYFThsoG8 zo_UPDLtql_<}J>-=iaM(?gMrZz5DsebEDqxcEa5@c%HYOy--bC+HCqx`0RFs?k>x# zY>Ge#sqD~j{SVvmnNNYk!~Avc7ZpD@@^;M4E#uk0GVHpqZaxr*es+iF@3mI6bX1K| zgGFaM!9X8@t^&GKSp8HJWd*sAHu2v~gt>OL9{IcshB0vFv<0hvrSi+_x=Wuem=NPf zjtyE6kFO#Yi<_?oO*7zfQb=0zLD@#i0sa+P9ylaB78ig_hGJz!hal+StUx|ds3@05 z$^mJKR%JBwsj|T&5)`434n+YrL{`@n`q-pAEtmU2+&p@@wV|fL%My01p_M2-hd^69 z80zwH8PgY29+#(SlycjX<>Te1Hqxrp_-0U+31r${pjwlh5S~+Ur$B&d;|rn zvE0;nKpZ?=Kk(z@7s%!E&+gk*`^C!7WY@1 z?Jdo25RyXhO%N-~K|Ft+fQ6$)Nb=%wBzr-Z8&NhWgIKwimNnJi-{VhVv&n7%ZJxKAk- zA`$9M175S9UDXL#2d7etHAgk49**QWu(qS`0KX(~@+Y`^E&u=k07*qoM6N<$f^5N| AhyVZp literal 0 HcmV?d00001 diff --git a/installer/resources/themes/snark/ubergine/images/status.png b/installer/resources/themes/snark/ubergine/images/status.png index 782a47999a7f17da1e96c951857c0de7b66e24bc..618cb3fa6cb79b686bca54ea364ab9644780c47b 100644 GIT binary patch delta 815 zcmV+~1JL~O0=EVsiBL{Q4GJ0x0000DNk~Le0000K0000H2nGNE0Nq54zL6mpe*)=A zL_t(|oSjljZ&ODU{^maXNNfij2OOmY6L12gD9|QC4TuQwE=`4mgb;|=E-a8(@DIuw zR%{Rw0)$W&&7u)y(^b1DP(VVegh)$pAegpsoZvXuk9%i6<|Yuq!Xo92KF!RXbG~!# zcMkAr6CHJR+0KUGFN^Sn^+^ZIf7%*{*F0TPNqzP4&tiycS!napSn;QHnwLT$c0|KZ z^f%+P**atOH_x@D$i6;0kqCQDFl5^&KZ~r+w!614Pq5P8Pj+_F4Fq@>V9GY6er~K4 zSF`+{MD+UkmR1A`1;BA2NUZa#mdc0(!$16QLREBDf0N6BnGEFQBplB}f5A_rw6KP^ zzgAq$E*n&n_g=hcUa!v;jsG-!!p8zA2|leAXV!Xnqr}7K7EiXy`K;3#LmIz^4E1kG z?(|(2OSmz)Br)*Dt%z3!?~K^kH{-#$r9FQSnUxHUe%rE}n_^A7isfSdU9JTaAD-J& zsjK05@x-@#n;>N#!?*LOf0oU^_`2e}mZsAfPZp{z?rw%D$}FQgQ9(2ly__rO26Q|> zDl1+e-?L>~f@5O`N#$b`-O5T{ybxkrTFfl#UHsNa1X@=V^>tk5%R#zR*uT3B*Q1qh$S3WaL1b5Df8no}dU1z>x5ERM z@YYB2S+IJyZI4iTeU$D7R!d3F7QoS`;Lsr0{w1>JcY*P`i5MH$I0q<`s2W68P^1NI z*gf-H+Pb;}gJ(|1P?#P^xs<_dQ9_R${F%Q00C1&onmE^i@|0BO^IXOc1Vio^^l+n(W7)A)h?v_ssJ*J&0$pl47o} zQyPAcCpEqhki&ARK0Oj^(+!VI(_62os)4Aqf+1-tMUzUQB1PuUKe$IbKAY2KH4ccB txW)jZaCKEm5L!aRFqANb5aVL(EoH7wKv$mNHvj+t07*qo1w^hwV1mALfBXOd delta 357 zcmV-r0h<1|2Jr$RiBL{Q4GJ0x0000DNk~Le000090000C2nGNE0I*z_qmdyOe*q&& zL_t(|oMT{s03{%91mdSa{1u2#192q-66gftJ3#!uR-EzwW<|#T5dsYVf&6zsd=)Cs z;096v!k=^*{{Pcw04fCY-$TXSn1I9yAZ`JvUipE6;SW%F%O|i6AO#sfd<>+>8HmBc zvjqhidOS24)-kZb6oE{00&x;yf7adI;rjp2$-w{XCz~N#mjJWw7DzSAFJ=a221bTY zZ~nqeIuFDrVLsFc3Cc-u{SR}I`OnAA3R3VICdmxM^+4PT#6s+o0vKK-+A{p&Vq*Al zpI0ZBwbRCt_~l1)z=R}_Zd8D=~-HW*_Zrlp0!9b$u(KpRzUr3O){ zY2*cB7gg#iC=`ib&>s*f{~%Q*vO?XWZW1YrRuxFeiZ;RuN+i1mY=b|>_KaiC$F;{d zw^lcZnvnD8Zti){dynop1Gq$d7Fl>YJ2@w3wd}LY=r0UaRi&k|C93!o_cD6^U4mFQ z_KHvf&DQvv(VIWNOV3@D{7(ILb&R|6XiA#GUV0Cyb_$WP$oPI~zx>`ECK3sc8jNjn z9ET{4BGFC2bzSJDet1z6eGL^(*-qv6xfOW@rfGtsz?b*}#b(hr9vc7ty$!XpwzPnG z7CDcXd1`qd5eOPH=1 zGW?CNEn;#ybey8d`maHH=QoFgK}&{AN2C!d`MnLc z7k`F_!twQ6>ofmXduDAmk{drLqOwKxE_aweg3;DHJN4a{Rjz7woK8RqE7s~)cdrSi z=qnTo$m@Bx+$rDLIo;VlXPEpn8Hq~K@@{4q*TdIg)O9?sKF2sGgABD_FU-uB7OyNW zZvC|d%dtRg!X|!-4~HgbZLlVnN~Q9dKa2%q&or$f{}@|CT$n}J9L02Z8v9lXS?8Zo zu^|Kxjt_imGxu;iavKx12@F^QUXT~uurPefaExF6_32Id25yLgEzD2(CqZfi*~%eu z#bczAL7Ty%^Tutqma!Z#Yp?n4HlyUgfOZM_zcD-3hyGLSn=jPwXe4qxcOqB)NDres#1Gel6HM zitQ4UHG5rk|HB+)^Dv#C*t==fr)~!xEERU5TZ^+-w>^?gwo$9g?YRDb2Gf3HLd;Jpe1U$ANdE6SQ2_i3k Z^A=d-T`01Oxk3N{002ovPDHLkV1ngGiE#h` literal 0 HcmV?d00001 diff --git a/installer/resources/themes/snark/ubergine/images/trackererror.png b/installer/resources/themes/snark/ubergine/images/trackererror.png new file mode 100644 index 0000000000000000000000000000000000000000..04766a4bcc810d8f77ef32111e627ae6a4ff4b47 GIT binary patch literal 788 zcmV+v1MB>WP)pH#z{m$RCt`FQ%guxVHE!Ud+*Gh_c$YnnM}T>5)@0Qvy$&jK%%aY2*2ZN+JIxp|cy>m}z#s?CZN9AZl^E;HVwsWdKrsbA>L?N8}fb8XTc!d zx7p}`-!_FXA2BWh@%q{~I;6p-C&ZU0w}w2{MMvDB8k+#N%6zwxTG1aEJ* z;+FyJm#LTCu5DM>u*3iPO>Hfm;mXLo%eY0&0CmV9kLtX+?FysO`0o0-IUt>8OU)s} zGRVTAq+2)2+whjjG-HF4lfF#OvgM@C7!p8?D75Vgzv*bdAOp#qrRGQ%SbneyN+gZ0 z?GRQJxeG4qlH?65QrCo7B~%d+pfKcSo6Qyo6a>!mX7S(2>suC;MdkPQxX^jb=?2YO zF%XN;kiL}sG!nKG(vT!2+EP~b++*m99E&6D_0fo-UY|+Kbgz-DDt@Q`WSw8_zjN>~ z0@;o6aTxRSI65_jd6)*tO2(;J)F*9iC{3k+u`%=y5969mr9r|8P19bluTWGttbJ!) zUIgNCV1cK_H=J2qgxfUH{qQPJQ` zMs#`_S}24>CIkKyh+_GcM@Od(n3_nKrkv)gBfOVdNwzair%g;dExq3p*r$}(aS2PQ zU6G|(Jk@o0IKa0u+>Z>tS+rEOd}URZ1uEauvd>uQk7t2Hth`92Yi1QRiJ;RxV(40> z$xm4blY1hOGD&2E?Fwc?8X8&slI^6(igw9F4