From 50cf80056f3c1c57924105c0ea3dfd3ce15a1823 Mon Sep 17 00:00:00 2001 From: orbiter Date: Mon, 13 Jul 2009 10:58:37 +0000 Subject: [PATCH] removed jmimemagic library git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@6203 6c8d7289-2bf4-0310-a012-ef5d649a1542 --- .classpath | 95 ++-- build.xml | 1 - lib/jmimemagic-0.1.0.jar | Bin 46408 -> 0 bytes lib/jmimemagic-0.1.0.license | 504 ------------------ source/de/anomic/document/Parser.java | 1 - .../anomic/document/detector/odtDetector.java | 3 +- .../anomic/document/detector/rssDetector.java | 4 +- .../document/parser/mimeTypeParser.java | 184 ------- 8 files changed, 49 insertions(+), 743 deletions(-) delete mode 100644 lib/jmimemagic-0.1.0.jar delete mode 100644 lib/jmimemagic-0.1.0.license delete mode 100644 source/de/anomic/document/parser/mimeTypeParser.java diff --git a/.classpath b/.classpath index da944de31..49f889e56 100644 --- a/.classpath +++ b/.classpath @@ -1,48 +1,47 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build.xml b/build.xml index 6608c8e6f..166dfa64c 100644 --- a/build.xml +++ b/build.xml @@ -179,7 +179,6 @@ - diff --git a/lib/jmimemagic-0.1.0.jar b/lib/jmimemagic-0.1.0.jar deleted file mode 100644 index 6e83304fd64c6a1505d358b0d2fdd947741c6c49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46408 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 z zCq>Jt=pe+c@i@|_)340c$9wsFmL-i4D*3{H2T$S-%Ch(#h*3)o9Gl(IEE~@!o0)M- z*UjRwhxhpC@Ga&nn$_)B+!0GHjQ1%wdwM;hShoPmfhP~at%ws?C@yhIFG=A+!;D3bI>)K3t1?Ui_6S3#JgZq(<afrLc&f@nMyf)ii<-tPAxc zY$*?;B0KH}+9h|$YiV$j&AHuOKj4(5LLy^O*_GSgK5l<8M4g#&i196kgef5Y+P2T@ zW#?D_3ENxqB1@6;Mhh;cSzXTbtzLgYcnw>q7#P!CpRTs(mJA-7Sy(}>V$DBxHW zz6iZYxIoWnnStgYKEnBjGK<>Mld-PZD2F&|#dZKwcz_%P*}51?ey95@r^0eMYSlO3 zAvU?-F}sN(-T4%!pk`_>R;$T`dDxpoR+J{T=}~S3zBYq)o{|B6ho%;(2e%C)A8UY6 zo^aGT7t(?0<;gF`G0;m>eHspaU2oY#pHfWZgp}JwZ*L(Z2c18FD1AI_OC<@Il1*=EBS77e4T>`!2J09VcYy+n3VEtKkiOOs62m? z$ujQLRGPZ-n8va)5@8V1j9UX#${e&UL+w@`FT>r#eGElB)z;bIw9JvBx$3#H9VGUj zx;Kgi+j7H+Rg0On7X{w1zRP5tdF4BY9r253TNF@{Fc8IKdtHu4fQ z;wqYqagH_)U-j*L^CRH4fIX>0ZV<$F;q^vvY2y2B!?;#&M#Y!fv-yVJLbnmX=Bx+k zY7%t116$k8pS0KUT_Wj%R$^dX6^z11L&5~fRu5MPs+Cf??=rJEiQDURVa-_vTxQQ# z4O9hqpRekKRd-1ndaD+b_=NVqb>asXa?n=_K1w5z(*ceo5e4 zbrPgX@&0R{+JCtFEJH#k$&aiqA68NF9!7R7Ll^x84gQ3~L$iyU9wvGM+P>SPP9Kds z9x3$cYn2`w9}~qc9U=g>9Rlm@EqZejbog%cl}VMLme;7Lz(X}iR#886rGS=od&cB# zmF2~9WnJ6)${P~Sjlq3ERxIhr%1vOfX5H$=41HrCMIfw1lWMr{QYo4E!LG|c zWu6T50&4Kn7_!1w&}$F3HD^uMx-hCLKkj8Avr2+H=9VgK0!++4v%~_QN=2BP;W|N# zBl@&Y$m$L`C;bEZ7{C3? zmT;NkA&3!MgMDoR_!0vhi74qo>eCj_Q*pJOL4F8(y zWNRuW_g&y>`q%K!$1J~QX!|vvT0b9Ki}Cg@)Q(&%0IHuJ%d(`adp1~`KPc#@vje&Q z4Ao{^{~rMxUVHN66YHq{K}l8FZJ)ZV&6s7*@-36XUncGhI!q0I|bDFX{9^>sKM8hpex>Gx!n8M8|E-u?E5evgD z3cC|KU-qdbsYDQtr?*mEz!MVNYa{Mw_TMSZf;JgeV_XS@2<&;K0$o)*Na6>fEu7-^ z;7|4FgI@wxk8OKYYi{1}-G>78Bi+O-a8%QMSTfBvtn5Q{0T2xV?F#c1tfVq7N`bC1gFw?y zg?>;Amb%_WubSVDDTagq9hnGOJob2D`!Nn`$ftkGCms`3q z6QDgu=!_sE!^uqZxBWJs{^J~nQ)MfFuftuV_;_ZK-ifi4-Pi6d7ef<*0K9?a$x?!? zafS`7(KaQic1aua46)Lqcyx)mMT7iB#-GqN=1&jB53n6;1Sfdm;|O@Rk+|&{DoLJi zxHgXi>sPtRpxcirs)|lZ{YE@Ll3csAFQAvT)<9aC;2W)%dORQB+|kZYWvd~>8J#ynN=hP`S}AhrfTSY2Qe$6FfV zQRkUD)NH=Fbd94haH&&eMq?S6?Kc^;8##@z>$34VT!ElhDz5CjsFe!M?mFhmf( z)2@RZCYFf^mcj6SEJ`Tz^h}0+2E#%%-wN=KE09{*aye5by>b3Z`=?b5s$^2>c*v`p zHqsZuxfkbpYigzn!aNj^7aVqJoA@HFxe>%np5eeX)L;y2L9`aigntDcw>MCJ*ncXt zaD#9T1gCG)ihP|9=XPkLeOBQ|bG_)ZSqq9U)M6Utd1Tb5-&2>isagm9B;S%0Po3k ztn4RP!N5_pq*>Q4F33@`hiM>)GOtZ|!o$)2@YUlDPqtheGzHC;5Gkw}oo}g-PYIGv z2A*z)z_br$^r293$EA3|P_t32uJ|znDR5fcA92`dAgP7*A%XLE4;koyLn3-8T^ndU z5pSou6}*W5>d8CEZ~@Nf1#0TFHZLA%1)1mL;TNj&MFG|P63 zsrybfpsSH!nU_WMLXQaVH%a|^?(af39*(KdB-Ue%^lX+CS`Irdp&RPhd}3qG$_gTL zUm6D3qa@myyDj-_lL7hKa9F9oWhbp*csHrxBDwa70nl4;!%0goZAXorP4t=eXX6eg|=Edpm{!%Lu=A5ZG_hJ3snE5b9a~QCP3%1|`jz2Abipo#VrogQE)8=I1SQ@;y zoxY%VB2b{oCw-hmx)^l;u921MD0c_Zc}x=t3d^y*t8IJWv5$(><;{O_0C4KRQ)U{t z8GE3S;iVP+mw0x$&pH+Nd-IXlFZcThvwY40eZZx23!i9Rfh{86pVNU~Ah2QdH~Lh2 zmD>qTEzeL#Q>vJ%tWe88^v{U{Z}BtFN%^Sx8UfpJp#BW%|Bx25IXIUa|Fx|Af07n3 z|M@^b>Hi;u=YL2Gd2uyidT9j-#{WmVgPQ+8>GOY=$w`ZfE2xU+{KsYBasqz3-q5-H zqSVA$>l?GWhjewtWs|3MwHE+tT{V@J9mLQ8R7A^kuf&1R=T$`y&=72uhFg`a4Xpv7 zzY@KC-ym;_0SzzT*CE~5vlfTteu6#tijtf!Kl|I$M+*zRhnwqbUr`eGg1sFLGBH~{ z*gXVmwyjiI#e8e4g1=vl%r6aVgcGif)z|OG;QmskceFnGJeHQj9sV*hmbEbyhUDz> ztaVAg+-!W0hW;%st(%rJJC@@M@K;sRww3{3_YpyUnriG40eISQO-~5Da{A_W^)1h- zJyQ!MleCta!wu{0T?ASPa}L-weYM;uUXuT*n;}xp}B~OZz(xCu*$6@&Bx8 z{Dj`!PN<(#U@EMPV}9(bI@d)MQcq{bxu{>=W!X#~MvYI=@PuZ%zugFBOkS$iH>7%ToBJogD`D+XcRK`Mv;mJTw3(4;e`iloqquHOZUKyQaWn0R zceHo0Ee8`Q8#1=u^#$`yUwuMuujGj`u^qO#yc-u%Po_aKHlPp=Ns`F5Qf#ECq^ZY| zay~V|x*|>)r9;es21%Wbf3^ZyrA-?KUB@MFvn9G6PsmAZ$0(|`Z(L3jxSF_HkF^e`zVoyViES7b3M=z^%#ieAZ-F9`46m{W;1Da8m zX5|zbCdKR2W-I2-u;_Ri4`fSO$R7IRAukOb^a7V zN)Sr*0YEa#%vc+-ZdXMwUPcBDDYd!f{sa#($6O@;H;aC;woa)D{`*qOJSAd>g$qq; zrqn_~r%6f;;+(wGQKtX?kJR2i#4gWzA8m07YWd>C9G>04)y6zsmz3y4m$W*Gw1G-y z#1>2z_fMizw3qDGZo-|3pb6vAV@>QKtxm>tL|U)LiCQ{Q9K-=s07cfgkvKJsv;Tvl|zRb_6=x%1?x;W&1iJOEol z7@ZV2OgKbq$!h0z{kYLnLhjtQM%L;<3R&B4eZljYd=dD`JPpi8ral1)h|(x(B-QB{ zvQvX_0Ai$8;)?=nXaXq@E{Z!T6_BBYx7H7`-Cl)q*sMtN2Ro!^Y%z*`Jvx3QvI{c9 zII9{;AzNFfE$*sUE5*e=d}+pc=kL{IrJpAd%_MHOw^{A~ki^)>g1>8^-<{L>^=#fi;J>r8OHw zZHRq|xExHy_RT|772=JcKXL-nh`>OOI9~805=;`(mhLS7nPsusG6Bz^G+g93w8b@dWYCabiKE0G2;8sUkgCxgcTqG2m7XJ=3s-cHPXVQkn( ztQ%~*fgIgw(MA?x=++Sh?*XTMQEZWR5a|Py5AaY5W)WP=VF6sAy$)J%bj9a*pN3H# zYrsq&8-TA&PpZG;F<@XN?s~i~~b7im?@SwKI(x9jAqyBQR^}{M<$ugdFC1NqU zf?7vB!<7Lyi{miC3tS~G7CWGQnN(XNdV+2#{kpKSKiZW0c`Xso_^pCP`W#tP1syMk zZ6c|5SQ^hEY2KDSH1$o14>`x2^5ZEMVbeA(;-g&QV{egR(Rux9j~Qx}P*j1W0c?I4 z0K&Mp8#G2S?`))L@ht{3CrywRYK#I;lq)0xzbm%Km2}+@a<&mJdMT}{WqCl?CO&#+ zlS3CY7uBb(QWFlx4rN>%*KaEWhR-ax<~iN*X2pV`6pT!=^K^U*4@W>E3oW^RZY&XB zK^H@8x)v(;;W!L(j(PR>sSdaXifw3=6*8y+-*Y78Nt1`(GvsGUI(185663=@pWN<|)T zzWqkOepZjyGQ4e>A$l3OuBgalFt->#=?H(@e9SU&i-54D6mo-Da-$@8H~|S<(IS5l z`muv2;dK}OjSN4dT+Hr-G{*qYid}Z=xX|@J7=9b;J8Fk-e$<>f{c>3v=wiwGkE6;B zIb3ZOnKa9G4AE)?K!czZgDwC|QJB{p3N}b5vCJcz27o%V}PC5B*n$*2uW*h(4!@68j0( z4}7?e10^2@V(SywaFjit1d76B>D0GfoDhA7os^`7-QQ_PvurLXX4kw=CO%Frr7|gl zhwI}iBoiNQVh2piAPAO0o`v6d*TW@{C{+ORL)?N0e>&EiE8Qw~;Q8^#Lb6r!<>BVV zh9z%nd*8|2DtYii14GQJZxEb z_(C_fFhkz8P7Yn6>z#nr*6iRck78ZdC36v~b@BqoRvDc15@wD(PN*LTl)Tu1>^&@9 zCg6!`ITN;x7f1BZh(FZZRpaQGVa+^&D#_eUHd??KH{@S#`9&@~nKDnplcmp{P)4Z& z;e}}^j8+Qx)6EgI7i%BFix%Uwd|DcV`Jc#YjNsNUBvb3$FioavG4t_7#vKr61V-Tp z(UA&0?|7V9yBG0uLGp63}yFkE6e98x`>JhvEQ!)~9oJRT3)XqfO zD^Z6Bb7o+ObQv2W;7C!or(0?fqS=cQ1jVS6ts}?PM{!tH>~3M+u#iq{or`BNMD%u8 zUO>`OPkfGajhTKA+^DSpIKt^JM=~kSs-_&LHPw?tu{iJ;y$7*uA{pD6^K}j3zdQ=P zcV03ut&$piwfwN?-5zJ6WCob75J+XEDo%DfhH%^puT$vs^tjm!6xBwEzJ>I15L<(% znEs1FJpC@Chssd@e!B@|EO5s5FVVMl7=_2b2a=Swhxo+Dt04lt~0u*lhK&&3-%ZEhG7Ejm}A!fE9@Bf!~(aBe9r20 zD~c@3WWSWsl0hG`XFLgh$!>eB?VHdoQz&oL(xYyr%*ec|HvPlOnisHxde-eN+ax-v zUY`caWe%X+9G5M}{LV7H(2)SHSU<;}}pL-mr%yE@AyXr(gL`b;f!(nkmrde*Bv9T?xIf|3QIo6N?eYt0_^B_J=57I*@p3N7$V(?7zSN$6Z zr>f~tf$DWpLN67REZLk}E5-ilhX`6Zf*B6|l%TWSd`YgUZX4T9fyhiGCA}mB{)d!> zl1L(#-s6fCju0rVJC;<~J@7y)3wBvF8#$(gOzWW(cw`uvb-BC`?k-2q<6hoJZ+#q{sk7~-SE`(bpL1VaG=U_ z=F(}|gXr&}rm&p}HR`*`)KR_6e{UL9RVxbDHh}Mg7+c01-3n?HV@O5dR9DLtQQl!5 zqqX+bRWD6mYN5xYi}Vf%m|(h(>0{HR;Fu?$og8Orc64>VAF=$6KUlZ+te=?4;g|x{ zvWd70sAkf!@7jDgEwA9i>fGUIDhN}}k)#;C~>;h~KuMQ{c-{0eW7#{wR7 zFyEmWC@Iw)tzG4$AK?RxItZoyvB=39R$6!x*g)lJFc$O$o#>HpUCGnV7DQ>>-h0n` z={hp_DhHwZ0?-zOq)DAr(go+HOC)b6ak{32a)bvll9f^Y_u3+-HfgpYgt1WU`Xn|7 z1c2eOZVJ;EBSOkB5tE%SweY7pR+-DVnKYKD2in?A>@aB_*vNyS8zr^JpMBz+99?H9QbfsaDrwHXW zP<(wYGSJ^dSr17*3xxzN`(e$RCIsLPN05dsa~$(}J|oF7zE2)d`kuD_Xg0vK)&#L} zlUadHboi*itwH%I;{fDk&c^m6mT4B4fpKM9V(DNggxn5kI&!)0gqjVGBpbaXXa5i+ znM*idTZot(&Le=aJ~wmQAE}w(jY^cr)pMhF!CpMp*JpuxVh@c>hjLsaA)>~3l^s2& z23?*eUr3WIz){~gAK|gu3wzSzh;y9_&5E{-E({NHNDhqgR|8cEbv!S#dl}Zr4SM@q zN?#bq#Hv5lq2Kys)afZy=s2s*Oe&jdz3jx2CglFjMvVzsN1;@BQ=Q|ZX^WS&1S&j; zK^#Z>=_YLG{7FVxw<+WFT~*jVZC}+WnJLj?Mxa|)Qr9C>lrWg0#IJVgGS4!cT5o?BqdG6km?qEo#6?+FF)xJI#*THb61{&zYq?R{*^+t{Xr;<+D^MOy@6 z>(BPPn!`klT%M-bD(hpKBLc&htb&j}PPZ<(TV&oTfNdY1iNwaW{Y-gkx{*pDN4%4T zH{Unf)UXh7N_bOg*YAIzliMz&5Pq6dc24kI-?n2Dh zVcr#r!@qIg)y>o@6don1%-B;syCYsBz7}|aB#L+3>oF!qSy@HGPH4r%wgPL`R&P!4 z3|+A1>m2YiXv&(0jffZ(pM4{m6{uu(p3MY{(>rmU_a@Z^`y>`C<0>Vdrh;ev2GU%D z^V!o2R>PtMB3yj*@g&X~0Kx2`gE2S6Ox$Uxvh0iqNy|p!B^7dUfs>@<4&7zAZa#t% z<@m{kAMUh}8gGp=*gM* z#n>To1+F@1%2f9K|+I^eZL&<*0)?Rocm}v?6c7sn1$}O+s7eCSr=z)3_$M z_=2D3%(N8E(5#*C#uF%iWiVU~YXKGUs{cmt(AeSo3tdm}#rtGh!uLGK=89b&<4YJ& z&((b>UzFgLP#A|HA1=WiT4_-*EJFc)Rxg4EitIq+le(u{KDAx_Efce@4C!RtKPDws;TcxU|D&*E) z;zrDx6FYs~r4z9XN8GZeP_ojoMOQpbIIlP#yObd-A$eG9tfw@ep;NJUN8*3iRB*VF zspzev=naq#0acl5?z{Hvt-KNP#mhB|iug2T$o*RqsQ;{cLmFq6c@71T@_1Ne;IFy2 zxvS}hPw2OdCy02;rV?>TAaMdAr)vLQ$nFwQM}0&2*d~dk*MxCpdzA5x@#;yc+&jQ> zAz^AK_1@YUpGvFeGW(+1n_9fRo2G7`d5+ zqrmqw*U$?HSk?g&FiysNjHpi(o>ijDs2qGIzws;)8Gw_;SnGP@Mul6kw64TL!0EF` zT9peA<`l>KOrfm777i$e`>dj#E0QZ$)S6u{Q+xcUTX^G~dC+H)z=7B;3}qFJQY}%@ zR0aZ=nTa;;&P)ha}!Jup2zgkm-AM7fm9dGd4cE8|E<;FbQ+`zIFKJu3K8P6f=u z40RorCvg;vZmW7pq8D~aw-R2eF>St#56@)d9x9QYe6}^CNr+Oi>D-yysPZt6@9d0Z za5}~Ec8T20*6eUTKql}o;lD4=(Y^$1JtErT%#ZqSQv%5;Y$ns*%v+wG%_j8lx`_-` zg_-H~r^RTHdW<{j{deb|wG<7gdC4gIIhfco#|a14*9#phUpwua7}Imc zD_JMirx_})IPrWf_-qDCU#RO4zu?7+Yq}sCJ5mop7kB8nPiF?4Z_!F@#A}n-3)Mhy zZd@wyHLf7=tI97h3xDfJ9I1!}qUp~Ol#P2G?d~mNggJFxqc{#m{)I?;FQ-#%eH!C? zx6RT_-7>yISD8fo+|N254J!`pPVDn;=IR1a@Q`WF5vC2Vk|uLtU>PbWPpLIwrN78+ zoKo$T^Gy~Wzwo+!#uM-aqXD7>&GuHL$~w>IO<25@{COa9;-a$2nO!(Bj(*+VXT zo*s52buQ)Xvna#T`o+;#f12MV(d&K9fQf1ev-;*iZm*Qv$SFyl84cyHtw8QP82ofE zqa`Y%6@WRTQk(`SK~aO++d0ma7j(oKMIDE;Q>x5Q=HlxZ-^<;MSaD+`1FG=-FpjFb zf403P%n|Uur6k)2S0d(=d;emJ&$Bu zzDq}`z5?AQj?o|HLKtBcjR!f)M@PWA3xJ`V~@V7fz3r^SXNy0bHHE}RW`#mNH z&(%k?hMTU5E5s!@2KjRYsfXXLooN`5(%*F=t_x?~45u#k^}Z|UdQucYZ1DH#0uQ8@ zlp7rzjLWrmQ*lcYUx)m^X|OUPe~5OU($_9~=1zGGewmtl>qAYM&hh=r3qMlmVNI6O zV7zIH7YzR_@O6k8x^xR{@r*bgbtnDAASBYX^8S?;lh0~|aC2g$eB*4wM@_vs!UySM znoDM)=1))Z@KE=&6jhAPlxl{cI~+=(H_XGztkF34p;eJ?K~S8c^HW!7Qs(zlb6nD$ z=tfz)TosM}g9cV~A2azT8=#m1R^8IeUI{PC-M)uOssDvGeG55hTquzc`RG}{#F>>3$ZYQT{d|%}|se0u_eq$KxNPo^{3^hWS zkkoU#;f_TA@wof&!3{SCt2yfrM1+m73mjpNNy@HAfp{-G+s{gp zepCfC+3bd9y~I~%hj-`!Rn2D%xdQ$-e>*#ieOL*WTOxD60(Dii!ar7bD06Ovb|-xb z`4i&)DF;jkpfs=ATQfAol5j^%{ss7)&WQYeB)6c;I72CS8T1$x6O-<`W4^X}(OxkW z&h7djrA@q+ag@xArMG_83Hy%V;D0J8C5b#4OF!A;oO{|Bq5*Mfv84Wv6%xHxVYd>& zn{imBkThdd7FC8yCOaAKq;3_W?`Fo503Vj*$fv2K$rNgblC;iu(*N;kX!*XlzG{s= z&+=ZQHhO+qP|Y*|u%lw(aV|uWY-j zr|8 zUqQ0*iTTe+|UYu24>*>2vYq}zIIfsrj_)z>^5eC=LMt;l{ ziR8&lO1Ik{aRE?`F-rOQQ5{S0q{La*2AA}k@pH<_Nyvf4&B7Jj*-DEf5U;LUGcT0M zJkR2b@FDmtyYj&O$4S9hZ0`iC5?tuD_{&}U{BrN+5}zy)IxH8|_So`UL?^u7dvI?@ zZPRU>2=G*!V(Y>19#Y^#v~6y$|LrIAXwDJCbT-CwY92kU8(gMZgfqm(8`Y!8#8xpl zUX1*}1wQ0=WeHftfb76Zbc=<-+q$O{xU79lw~NSb8ziu#Ec+LFB1=>Rjt=61=Q8J; zBdy(Ug*+s_jc~;YxS`wb+pC-}mP|SEwudu@O`pkxfxN`2YY~pihXNc$ahd1_) zAKRbwZ9Ujak3r;^Kd$^E(1hx#Y;125pmAquNn2A{Vbp$~0Nfb|Z}zecOJf!rzp-pa zuGKj>Ba81i0A<6C8=n_@N5*`j2koI3Q(p;bx+`(P=l#AJ3+oH~(nr?@Mg^`zJQ<;% zJb9D9#^$g4r#$!~21LfR<5!N(o_g9%iuKXX4f=O6|9af)6@Yz)YJtv);aGv^Ongv7)6_vBB}ulD`P7(1Kr z#q*9BQ|H8ngHmDZT3kv3H8!D6PIquUZsGdO8p9Ec!Uqs_WB6i!$C)P}+%CQcO!v=T zkEJ1h{`|@niJN^79cNB+FBbXZ(@(hw?}Ef#2pEQm7v^MwMh&js@xm-t|YE;4iZE7{hGIt=)SfoZNx zT_E4DxnnPu4$pKiOlX|ql$-F7^hDDd-uR83r|d@qA4UVr`Xp;+@Al99vM@o*h{LxTudFXl{j^o!O<_Sj{YS!$=8d&6=_YYHY@&<-ny!`TyqVc3ZoKnyBmjO z>9}-&GY~?{9p-NwE6zW`y*xErzSOI`E2)?HJg?C@2tr^#mT!@Jk|!3ZnZ^_04#8D( z$CHYJP9{b5Jq2$D`;@WiLf=HeJxr+<4jiH;2W4w!k^Aoh2s%EfG>Mmi#US)=J`L_m zl(Y`WglV0eiRn*H&$><#Rfpn!;5M_#?g!cXpYaX%E8pR~8`ZcFEf?erXEX%}&bF^< z3@!Q&Fkk9T^VvyHd}?E|iNi{l>cwl+((Xr#Y{nn` z;P*=d-0-Ns*t@@CZ|Z)_QQx8jU`027(_Nf%ml3{Sj&E-{)Sa-Z-dZL5bYdG zhWgS^3G=qGlS*kpRq?d@!M%L$*jSD(WPxT`9!lV2e*6& zSJH%~YI$#yvLN25j)1DgXimzwU3;H+0Nf(9=DS2+!c-2xv0+Kap6~uI<9mO;UScs^ zMuwF{a#`>V$M_0vWUxEE_$ z|OTvVH$s<|4ZxS?b!?*M)KEH z#{56|?4bPLS|?dSIY}{5WfeMEG2i$ZD-cGQ;2ZG1AUy-w#XM;{$+LoAv>~ZFQC8OM zR;!yMYC;dsEy@s<6g{&(i!e)t4&s_wuqD$)GzQmZt29SKnsTRYprX{rJzZedct{0G z7HVTnI|sjpGgoqd@}8x0TsN`OpSrIv0S7N1&H9SPqBNNQ5e_rMbz^;*-RYi_eg&i@ zE}tG_8h3Q@c;t*bkKwhv+gA&NZ2~u=0?h{0kAe*L<3lbXb}|YQl%Qy8cqyE0Kjpzn zVkld3Kxsapl>H)#_=b8b`a*rZNqfj-cGp_ZwEtIRuF7J#*8je@_g@#Hf62T4O9l4- z8aaXfMcA3T{38JS_lTeWjc_*m4)Wb#0(#BNezn?{CY-8x`T%u;}jI4^`$0pgeMaqJ39f;5%0L3y@LQ#yG zqF0=bR$QVbwQzMzvXf{6xJJ{y0|t)m8*uzQSEpk}F}I&IZnY9u%03Y%yBDipL4 z;+wu^U@L$pBq}&&W~sTn5CR6<>Z7mXC@d_QnarwE992|M>HMV>1}z^_XCyfy3$~D` ztP(%TX}7>oRoX%TGewz}6KU>HW}zM_HcJUd!C{ypGj~w|(Kkl@NRxWiNRcJFbv^;D zuh9$e;#D@zK&lH;=nT~%XS6Dlg8qr7SwWU18X{K)VPi0x`S%NYW zmeZq#FClG29jzX$ruFd`?D2CW1lvgJCj3e%lc~EqvgY+mVpPX(1 zYRz2P#iQv9__uh95tz1|^oy2&Qw?l$AjsL1U5_m|d!vue!1rnlVj zp*J;-B}^n#W+J^}bR!yXiXl(7rowqh|M}<)$!Wp*i!y@^V3$bWm`y*cj`MNX8hEuY zvc!AzR?9F&$*DqRH*yEtYr3Mh;{t}OUMlt>Cq21Kxo$YEmp7A{Yr3`3u~99qpOBMf zthEbZ8#{Fk)fVh*S=~?>Nd8prO@fmAsRC#x_O!E=5;?}ae%cENEb2C6(j#1IH)DFT zCR@THkHr~P{X`hk-L87;eMW65r9?kLuTZJC=N)YKVarCMbsloocG%ubA+Bq5JT^r; z0&2~2|K01Y{|##pbZ_KWu@0<2i~)4H=emm5S!DB$W}hf*E7W$^E(K3Wo)PwNR4gW& z@d+i*%nT#(_uRwX*;Du4xlikdrL52{mOqto+@_giTXs!wC|@?*G;B`4E9a!z?uMf$ zdLj&khyxc*~rosmDC1_~>|41|_0P8^%UmWmH=2M=s$odWGC*=oPjXHFMi7fzF*vwDsAVNQbq)Sz z_Uz_S5Fyuvd+^KY0`SZd4?ltr#Z4(-CIT7VVm|1 zy5&DQ3NC*nsFoJXooA>HItdc`TS)K5NE|_^mX+z}n?F>yxa)S|h=9HJSCQRzWy*78L5-- zEli1_VPz0Y(4y=y+RJ`%8z*&z_=fsa_XyGsG7~*}P_PK5T`^s2G?8}t5pP7i%5g(M9hn2;JegyJA_ATOY~FI5zJCDxrDyPtKXJnL1B(4D&*=5;yyT4X zrEm0g*uXZ+m_m9-^~9n7zxJR*tdm`5Fd!gb=>N1kWm_zA2N^6u`{8>~Fo@?z=rFx!$XPa+PoV zUnVa^RA%{C&UR0CeIN1p-h1Te-h<@q-nGiQP7TOxi|kq6*`mHB{!rroDOtjO+|_*K zcaaeDzhB66#S-0}0OU{OtfmW$S2s+J+2uH)qCXo9W8UAIEm%F9{vuGu>x^r1$s7%p zOLJ_ML&Ph&v+#@?sNh*0GWro4dS%8*ayN@ATr22EheCrrS+rJn;V zvGNFTN@uurUcgaH{uLci)c6#<%9=umk?8|u}L5pmM2bV(~4d~|CSnbbZ! zV`JoJD#TKDfFxEv(UT6J%Fzdx&O~`+$CD|5izg^c?Xt(OICQH|UPIr|dOl@QOU# z^7^X7nJ;dVs3kTCst0R z)|ohzp-?Lf2=6Y!a-TdTi!sI;^Ua=bmoCeCHM+Yni)kDGw#%X4zxjAof(#7e>zy7; zW9}GQU?cO_Wm#1-bjuuYt0Ka>)K-I8>7Tu&eFSJdO(JYXlKx7&!kgi4}qY&1_ zHPfbOUyL59!B~3i3{NQ!Z&R~5g>codswnh}2g32WDv&7reQAQF-Zs#^UVSPRJcuei z>4C9sYFw{oUpl!CE2VAuJ%R`58n-v6CJV6 z;8|Hfi?Vdlr7&W3ab?kNU^R2bVCHmP$j8*P9u>OJ$$li+6m~4_F0v%N&!VN3E&yJt z5QS63LT1#cxVON*m;sH(szOOvH<@%j?WI6t?z#}V3$`$_mDEV^puj?ej5CM>aNEco z)EH-v6vKN#kJo#q~@<=1O)6QteBA| zmhD?BDK;3(yRzW41`37iMn9OtI_jWYhm&D-ad8(l1g|6>Pz~eCY(zc;Fv&1SuBxKO zl{2t;X-$LLTxh9}upnd4av#SQV+$=rZlcN|PA=N;a3kTzyUDtj9g)n%iVf~O<;zG_ zxfVw=?OTvdoYq^)bEHP2ic%6<3mI13uWNZ~2_sDxgf;5N>DhSI5n4*@}|f zrS0QS97m+%a!l-Cg0)3^3`P@r`6%$VE8ZHan9GoIKd(_Fkip`$E2Sd1r*0H94q~et zm&s?7NPG&KJ%Mo6)A05gn~o+V&?CJb2=Ms;(T3uVG(Y}vm{*Kl0O-!R`ShFR!Z8P{ z!oKItBdZrN9;gKdx@FBPmmV0k^?bV5>ccophQ z($zjD_(TUCl0;a=F4AqtH}%$6S4xA%#@9EzO?gB$xYW=|APORZRTOPrw`z$nYOt8z ztMaH4jJsd)m^TLBk$qvnEPyy*1b!7Be1F9Xsyn)X@e06WdG+cY7-PrsLEg2wrS+kn zXMn}Q_Q|T=o#j{929IwpU(feG<2%WQ%Csc@?E}6ezXj_hcz98^1HL=p{_c@A;C}b_ zcIZWDCZT9`@8i`ks7+YiFQAPnVE{fd0RC<#Jbyp7`rOJk1tlZm11it2!|e;#%)HE} zS+SO)-N4ju-@>tJiRf@&*awFDRk9{6iCzPaO^D%q}?V68)iU0d=G34HVi*=P5-NQiELs8mLbhAHo2qH3{h{O0)<%bRpae2(Io_;@A7xNuE4^pA(+WS~h zlDant#k>;SvAU%%zmWQ1UaupeJBZH_WJ9QsOzWfy?#`~IRNyQ@B`>n|wm3f$qAlBC zI?ZINENtXog(px>hhkJuZy-X33ffVl#k3B@hcy!smHkN0)2!VT3Yh%MX^~=J53!!* zL^ z{+>|>aSpmFaFCvk4ENP5*a@)Uf0oteSjmDpf6{~0W>0XFDI5XE+^cx#sSGR`)!I5*6YSGB!utxRozNP5 zf3kIdg&RL8AiZc=DWrn7yYD_?`2pi6znsaX6b?9l0LG>7mXlbXLjGC&WGG-W(XrEwfL-_3UqNed0=DR|dDP1G3S0Cq+7#U@+vZMeS_uv}iKPHa%CayS z0;2dR$Ysg9qFZ6~b35cg%`>&QY+z10QA+KudP~1d*|7;RXi{wAioM7sb{S6bSt(?j zQEZi}5V|LxilUV<1$r1fW{0x_HwrGZ5W4`c2?O-AUuz1g-ZiqiW*BHVs6tPmyEG9J zQ_$2Nipb@Ky_Xm(`AxM56-bKS;OBc19ga5bI@vUsN6SgfSPPcj<>D`b&6Gc4$TA5Uzom?mUJAp~gYFj0BcO zF)m)`sS1g7O|S;$s%VQeirAJ7tg++a;6~gV}E)pxHk2G?C9ZcJ;6l=UdR~mB)r2$5^g1U5SaZ<;fh%64t z3~a;;5)>Ap>X}ZdJAJHV(|e<=jLZ;i*&Iv;E9pq}^V8Hw&;dD0E+Y6UKGk_+6nU)+ zx+2Mfoh*bHXNy$j?34aaVjzKSWG_IByh8WvP{b~D9(=KNqKAXw7A}(bp6-eC;#;yA zbY6(cbngX3?f_3LPYb@$vL)nKrc2sK65f(nLC8Fl7ohTxUMKRio@CX=EEx3SjPSWc zy-B|yv6Zxx=fzWJFN=FTtd(VP<3wa3#Z_tJIZU2+(EEMOm>{$z6D=X;Ga9Or5*MTu zrGQjwMJa-Hll#TEGs{aVuo~V#h({RSDwf*flT**XHaxh9s{|DM;l7v}A4R9xMJ~T3 z0j*2+N8a7=SD@XMINF=w$x9o%Y94)=LX<<|88`?*8*k2reg8=?SkTOT~x{s$Y5 zI~*+GlfhJ3m4FQ-E%}F2A+8|0z!q68Q9&MU3K_H=p{ww2glGEzzz~DZ&&XGZFA&?p z-GdK!7e-%c?PUMs!O6M)Fm41TJcYFYFLa?|v;kvpQ`Eu-Qjf`yhv&tq*B1j@ zI#VeS>yK!^5MR7*dL;Z5`1k28c~rR*5|Appeo69@Y!!W|q}c|5y;4v;rzd+3QEl#4 zva=I@PG{T6ZCDAngA)+b8o{CsH5kIX$l9RP+K?3cJV$3n=@49q3-(OGR)Zh;>CHf_ zZTLc0{?bk}+%Edw<1Y%{sL>^AjtSUvpOP+U9yC%`IuWa$$nhh>&OWg^a@V}1X=VF} zuDs(biMP2bvpl!r5_B~mVoPDzvY8N-mB_WMiS<9EW(k_vwBQ`HIk*?NzgYE&T-kGG zQ%7QhGlEMVTV_twQ;VMUaWOI=x9kS6;@JsX)$M`+294vVN9nf;2BOXh{L?*3=HOiu zcYJbcbF8gGYXSb+57CWG{7Cd#yP%DR-TW7 zw%%jIaw8V^B)~?px6D>5kE9q#YqNZ}0k`k>A6r%5cGagxHQsHM z`7mv1d^=iQ%_ojC92N9Z^p=w@{gQxD;lBN&ZeSqdn;Dl<>w*i$wWMZ|9)4h;4a_%I zT7mPfzqyiVL;4tiOy;;IL#yDD2g}SsgUTQ$OWK%nfOADAxe~2>Az7}>6;H?kPs;Vd z*(1iuk}^+_-X8Gg4EbW0PI!{^88#gNQfJ_eC(Qg#QfI2n377s5)d#EY;B9-L?7k~I}uSJ@-RnlSG|YgD$DA@62$ z`a(DD9;{Y;-Gz6Sa4iYP<;fxH!nRch-?8cfsI9|q?5ft@v&fsto$ApuZ}fpi#T$R= z$Ks?HHm~7h!#9$K6Ab{*`6D|so({)3U0v=8v75wJTN8I2i3WV$mp-A5QTAGx86J8i3r*C9cTK|4Kq%;Ut<6c}*^z;i#oorCej+hSYm&Qbvt6 zacqjIH06BzLb>Gp+%V`+hZ9EB7t`y_W-`pS`7K5MzzR`dU6EKms&m?mtxMwp2NT$iFp{JAc>m1Fy zh2^Vb=lPtp=kbfBim>d29(Um(jq^p9Z|{vd)T0;575k1EXwLjh#V;1?&2w{@ey?;> z(D#$bcaZyx;O3y=6KU_(w057bUz?vD_IMnEpWCyEnUfW zovz}&DITu+y${gccPwx`&}FuVT?b&^Y>Re^U{onPqll$0p?LUmWwvBk;AZ%h5#8$l z0sdDy%LkEGZ3iE*HwLOwzg8GYm{k->cK z`&R!>mPw8{+(z3J`B88Y+(7prVrw<$Jiv@zG7D31!iQ{{3Q3>G#+erE?BBlL!n~fz zZar0c&aHbWisp2tm-c;N#nsdGtzDaxvJ#P9!L#1Oe|Mo`ey>K3^JzSpWnM*eXcg+f zrknsbX2aR6$yn(!7-C30rH)y~b<~V>NFOu5d(GE7Om~R@L8~I(4C!qF68izm4GRY6 z=dnINq&Q@}Mv~p$6>`n~uV6MwAI!b~4b{Yd^Hcwx?jif1gDL7^Z0g`*X>a#m6i-Nk zwEUm|O30i*L1ZL6UN5o>abbaC8UmYGw4`g1A^)=0==^H4=$Ce_gw89-r{bu$GysIq zEz$W#X7=q`=KcHb9Xvnw3a3%SRMS|~d}F?$!dRMMOC>i_3;68ZPh5ce$=>#tsIuqt zO8?d7K+NUynaRi_?Z(Zxz#Sjwa$znMn49ceZ1nAHyL*at*P>#o}lZw$~?zfn7{Uw?*+04Ae}LGex{5pcgYgCmp; zJFNW?G~BfBx}f^(^-tz`T&C*}HB&Vsfm8nI$<^N^=$EYvhJFM4V}T|~np?UHsVdAY zha%7~7snIND1tqY>x|&IJ`f|XfK|eblLw%2Ze-Qq!X#jk<0u|;kR^-P2KVm}r5@}* zwo6t&a#RUcAET^7K|xlf*VDz9f}OSm4G}gwYGetWFjg})`VKrE8f`POiTYB?rSbpx z*8~=Xi(cCPoxFqp-O%ITb&4VSpC?e((8bu|zxg>0Pal*O+&{f0aT8_||~+u`W{dM)flC~7jf*30Q7kFg~3LB z%7>Hq9svfZt9z7W^30y06X+Q}5ff>oJW~MmZ5J501^l^ORQpnweTV2TAq+4IJPk}*r($DcI{Eu7Y?n_~4y@Xq3NPfUd zp7bkNT%XB3HNIbrdPeuCQQZS?U&5_6eoSA|tv95<0fK+>Ejiww=|k95pCr<6rI@x` zH`edSKE}5$^gjmA{28B76M}qiyPr>RNq-pL=#$(taEOTdMLa}9;ITFRipou5qwKx1 zCIoXkGd$8gAPeJ36i1Nr`*(YEJ0u{=qu+>^Tf*tY@<#c}kv-lY*?=qL|X>RnuZAB5I`AW}TDH7DEA`wsP!-5GSF7rZD?V;GOe1 zgt|$E=O9tpGGFdGQz9&khM`o$#o&3d>^Qd7+@#f=F^>+P1X zHExzX}GT99I%Gh%5O*cm$XZ!3r_b#~1m!^ke4a?V7AV(M{WJVgyk9~yrwcqsrl!T};* zsRHz41xe~TqNPTL#AZpNnuz4?t=YYT%C0$!8!aQj%3SNXlEuoEJAc?=?Z|nW3y37O z(hWH;QApWsESB9DB}7&fkGl&~g+{_Xe}Tzq;2QN9nP8eieF)iWY3I$B6_zZyPLw3m z$cK|m2k%`-pEM!5`eqaNwA!?(@l8>eP8Gs=Q-J(UHXnsGO4w_mpDTsI6xgukq=euT zGcmOXPlPbF?%QCVFmR?#cyj261`1*#!axa#C2vrLnhXoXvJDaX-Ycq4g&TK8|A0MM`IpAJY2S!HJd%ZnmIH^8{7AEt?;^)VUiN^ zX1=j4?odSam>3!f<}cl{e~cv4#Gy1pG-1pFo2fcCtjnL! zVU$OEaIB%x8V1HhClDl*+Lt(CNB?T|EQqFN5K^bHSzVlgK1+Z$b&SrB6BDY@G+oho zP~ej07736cLW{_!5h98GaOhK~NgY92I7cEw3=&zN`Kkn!WgRMJ1<7D$u&}0p7Ay9ttE$aE=}Kxtc3sm)hu(zf_BnWUbk+w z>?3cYF;UA*O|9A@b^kqddP~DgS|ye0iWyTYO+r?|MRKV~|F@2`(V`~_qKKi1|0v0k zbxaBM6S?D%a7d~)jVW9&qGPf6abmh(?5DJ2S@MK6*Ctrf$GjJ*&`Ht;&$d9ld<}#Q z1zc3=c@AUR`?DWJc7)|}hcZ^lE-h+y?$aHPGtU|hrThhPiIs13y7973S#V8Ua??|S zQxl(3ZK2`;L}}OJCji3vG|KA70?iCwa8z%Aa!}DN=!l<3hJ;LI`fFgyhvJL~+pkBPEC=|m%fG+GoqP=&u-Vq}7gIhweS z^H&9Id=dUpWC48{kQPp09WzkX)DXv}nHaQU(^vtUrfodNq}dqElpn&-0uR5UHW;9Y zZNO=mkFRT}2L_+g?=K{xwx~acf_Msp(&#QLt~z=&$`6ZPiPEwm+OZjJ;D9aLb8(8| zW7V1rIX>6^g!ai^;=Bdv-y_^$V7cIIR+6(+7)1_1F?M~ zVba`ly6N>o$%%pQB1rTqsV3MClbyN~X19nr32muEy0mK=Gu-5-6XO+T2Jmpz%+_e7SJcTeRV@BA3JM`Rq82tN0XHcT8 zU)_fghhFCR6%8Ps8PDBJA#vM#r^KvoOWns1hoeaGcq-@W%OSbKwhS&n(ohyXiHQ!F z%CHeY_6lY`$V+#rVCuS%f3G#!_Kx7H!r-cFXEvQ1j)TsU;HshFBj`{nXb5G&dP>Q5 zMN%F#hF&BLeaPvW_8CD*zpNIK8e$A9^_=RKWw>HUJI6!A>JiaI`d$!sE+9>-CbTak z2Vf`kYc}>1*_!IoNDDQJKTJ{|$=7Mljv51`{hxNkLaGAvSuW}z6F6J;O_dsf^%f&k zh^>42x`TaKFZ1YtlG>f%{0xLm8id%a!%bkd%(lA5?Q3%TK#h<$Bi6t|TWj@kX2_JwgTkUT-GSG8p5l6f9$1#7xp)KhjSBlvEVDEn7>*9yTo;rU%Q~0kw|97He1zs`5fYeGMSu2qK5ZZj{sx`E{U{O>QSFvn|(me-l7l7loSArZvfo^P+LrC)aJh&O-QP85E1~5*{yLeTg@8@`n@n8pXE!g(IM_i)z&L zg0y7sQNe~cvWII;z9h?^7^A08l5>PI%?Eyg=uU>L{G`X|O| zAC)+n3tZq2*BG?l|8yYKlo@%H|Es%b#{5q|tAC}F|LFhzs{8&g;od*mi+_&ircVEL zK+n7$~$%74;JNuQJkg^VF#5T7V#LB@m-3|csVLWwp!NRko!OOk9>22@9lCjUAT z7hMo+IIzl5G#ON6AkuV2m%CGKxUnXieL74Tm_Y!^e9xd zieqOavr4s7KZr*nuDqK8>#U0aS?(Y&>u0%YL#+3?Do={%Oe4VNC(NiM)$IO@4yruh z<&4JzoPSouF*nlu?(prCBMbke+@ls`ZU~IZOVwttRtz=k@>IED<3~}0=tv0FyQ)s{ zfe|VQRcqyXsZqSCmHM3z8B|5O=~#Uv;?Lv8BiBtM!K023;`OTWuw`73v- zbw`lfr?=nV!BD9;MyT|PcS@-AfVvbnospunDvyvz^+p4Kg}XQ^y^;ef)H=00EYv#H zJ1*2Z^*ivNzr(Fnx+O>WE85jYvOKT3P}izFpryU2FV5NQZ1)mkKG%oiwvrr}e-D7T zJ6+IScV*#gzdFW6`kP5ytKRXUa;tXdfxST|@#i0?q2jyjvH67K!&kNEu&^;q8hyU`^b;LXSM`axx^U(09U$tNh-*tU1i1#RZc+6PIsN(j`B%Q?;_j;7 zf#7|`Kiwiu_2uE?KSU;ZjQ-&E8^q6Ryypju6`OqG{F#WO_t*pC?=|86N{iIL8(V|> z1n+AB^j*E;1|mVU60}8TCRCQyc@q3|d)To@6(aBx!yFtb9B~1PW{8QEm*}OqxYO`dVS33_G5)nz{g1}+3 zhw!hH%H)7lV95l!9n9Mn@wWlC{8I=q1m*A2(!U-72%-48W}8IPF*Ohs%?q4n`MRED z#neH+0_qad7Rfyj8bnjpF{Y?nVw{qN0ZW*fs#V&b|$!c7x(~sTH8EV5ScubBt^W5^9x~O&^>jJT(>mzN6%bk_N-xw_v z#hDH!Jb*+-VfhjQOj@=GcwGv2NG#|)>xIxPa3PB%vr@iv*3btMF?Xmp7AGxv%*q>A zjl00@JP%B$G!WNL@?0}3Ja2Uv-a@_!p7huO{R+Lh4>p-iB`lP42h%Q0Y z*VbUCH`ntMa%5hoKL)?RCjKpeB4@5A>PMutz?O;+cxA*R%qg3sVPLn&|DC3Y*lkH> zg?rQ+K5<+f^W!Yy>tQ-@nVqK4H-X?w7O^BVyT1ygD1LYIj{oqdSE?XJ#<&O4AzDMS zd#ek~#^B*-K!P@ob0BVkn0|`OA&m1j&J51wYfmV@0VLRmF`-<}c5wOrBrG2Au8G_)#*aHi(pP<0{{el;SBvw> zsj@h_zUxK{<_4QY<49mFwB_ znesshan8FlQuG=e#JtZp+f!WA4$=DBKUw-Pz}TDx{VPPn%ISkXD`e9T7h6ytCjU zhlKG;euz%$Y;9DYA0Zs8$7A_dcksg0i2;3|knSV>iD-E=v}a01wk<2D-%iVZz(xg= z5qGb_|1d}RG0W=zJYMSF&iNt!!a$YVNKefdc%&%9LET^}!j5TNu*N;CMY||XYgLLO zxgTxc#UY101QxPKc&F?w9K*nJ7i)Z)s1ZT=p1lb|BIpuN)0+mtOYp?Lrl|P0#{){y zdJ{$aVI&Xim4il*@MAv-hYh-j0s$1OB1t4GW2RR6q_Jgst)V|hbbMZT)!3DNR{+4S zdoIPH9xuxyu$Zv^2vjMxu7$Ue2CDCX&JBA%K8gJ2KBEyq*0qMPu~*yJ&Y?97+k}F| z0RI{;q?C1Ilw&3aJ(d4Ss8j@r+BI&OyW|6ypP?40J{fXs%LUx)lY3)(PWDv%oyHU}_1xy(<=4d}yrV ztW{y)Ot+HE+Axe_NkmdS&gjZziO1@&2D7$%^QcKH>A_)pB)Q|8R9KfoSKY$yB{`cC zNo!K8!SI#qg&x8YCMrj+<)BmAy_Qai+2wF8+2sf? z*auDA4RPo*tZqjM?WDLON2Be?F$hz^bXfv($JaQT5HFDVRMJG>oce-|C8{sj#q z^fJo>7e_H2!;-XG$BmXmX`L@IBau2iDuNRcK)vOQWzV?`74|sUd3Oz8(J(QXhjuJQ zmhqGKU=fOb-l6J)_4opPQ2DXNJ*!Leex_;YakOa>X(fI%=!$cCR~-P zZd&X__D%=a1W15#HYTro2AK=Yv2q4|v0&fck?NfcB)cBqrliEGD$VMFVE^4MbuAB& zS&z(hMVbv4lyH728fbB!nqn|WTjTniVk(IMdDlQX%UG(Fm;tdmKXt{OG+xRpT*OdA zKT&;@49A_P0y4Jt=Fas9rr5~1cfp))2KogLeQGYMO8H2~*7w(d zGHwgeN4*f<*h`)v95G^)yNza(&QjSEydkL=%%tcpTCOG6SCU)Q=+o&Ug7bLsm|RF_ zuMUxA=lA3IP3FS9zpm2*NxstFbO=Z^b8UTN>qrj=U$?);5a<)okn|x)+ul-7C&F+3 z*27vwTMNJumxTrwoin2C00MRKG@oLQ;b7`8a6&gWu*AlU}q)23XyW!JYR~S z*`H^0F`(!SatgfLV@-H6;o^b3XT$(Lz^X&ukBL9&TXA+dvD4^nR6t8&yehY%?eFbY z?6>0;_L18hmu4i76MC9oh3wnq^cpoc53LUukVR6`9^ROAfioCJv)t=;TMqFr$bVvh zHyNN4@IawC+~WQOg6MsUzaig~^s35^jX1{K`vb0EP0u4ecXE0`lNt8thVBwnV}QPX zLb;P~7gh|s4Hs)0pIvbkjPe6s%5QFo8M^v0TjF6`jY2>{=TRe zaT>%Z7b}bQJa>*}sZ=UhNV5?9u8P7bXO0^q$YQ?K{nX+K#%KEox6peYTqpR6Q{leq zQo3{I?3W5buIY24?|u7#;YdjSB-KH?KD_2eUHxEeOkvGi5d* zCAarOS%zv4`a=}#;4j_Op7`TNj65~zvPH}-wI8++27J78zXlxW4g=7o@_$U`BgzGn zrNhqDqoECOS)^>`=G)J#yFr5Pv3lgN>4`Pl_h$`1iEv>5F60Y2R$DT>b+yE{AL0%z zm1kwRoI7_ET}e_|2Md}#jR7DfT2np-nUdjrj5%Dw|H(%KNURhN_(IMYS27*+LW9p; zgkDZ((_t7 z@`1o7Wh&io2=T&RVtwqTD`30|`VtYWuBPr6`v5)iFk>Y$lhI{xifkZ_6Sa@N*LV`E z9W&eX!MjRrO`YSW&kvhg)c!f$!LYfgi82BnX$sBztjpk~XJ{tL9(}i-qO@Wtmth#{L%>{whS^T>V9A?Ri@YU57? z&oUn%4hQ41(Pglh!YNx)soaBFiHcWSygv~U3VnDRuB*UDUztc*4PGS)yW?x(Y=JTnURNb;aDZ7|n15r>RmfMT@0v}3Z>eTWC;u%Fy+&Gm zgi_|U40}1-5ZBV9SD{nsl1vk_<5)%95RH5&b&8|6G9kIRf>nxeeSG&Oc;d2n`nj0&!rCB87#cl3h+kC!-c>5Xl6?YRb_gULZVC z)N5oFSJ3O2P876$u{V75_>BP<5Y)~(b(>8%SdYo~OP){{(=OVqzr~2wN6eS1c5q8l z_)joN_x~#FDxl(8vMuiJ7Tn$4gS)%C1sZpEcMI+kf+o-q+zA%k9fCt+K?9%6%$v!) z_2&K4Yjxf3uCwcQopq~g_1X7qoP}Q8+5K)p0J5L#M~im&*I@Q&7jBJvA^RzQ#1fP_ z06-`Y7}uk97HPd_pV(YYd~3Aq}4}kY8b@{iSYm8Po->JzhnHR2$ze`_U6H7q|I-TW)J}nR7Cgh{V8u%GL*< zsDx$kW_67L_+u;wjS!y#?wN6Ht+kV7Ve*r@M1V18Sd4!dIG}H)g_7Gda zXA6Os#(>&^OHl4^&3lkf9L$FQn(+E`O`2}h?L$v_2t?A2vc3vz<#z zZi4vA%W><^eGFNrDl6sAYig@>18a{OJ2I2$lP87L4vAIsAu~e31R>DUyv<6`?je%9 zu-=*bCSe=EW(12a7c_by1&mYMwv)TJr@a*w%8ZZeaUV9t!`XnlO zJ^qMB#GNp*G5Q6jTaEjKYPvqLephct!J%}v%rb*KF`i+tJ8FRse7y3xc+l4#>dV?@=-b?O>+IuIw8cNb@4=hlsfvv26 zLW14GwLmuBf_l;__UDGC5T}aZ4!7$?iM}O`ZYacN-_tcNa!-juohBYi3Wvx4{&kZT z+5<%|c2n|`OIC^6Jsm*{nsrat2>}j>aw$U2$y>}VyDIE!)Rxl3(xf@vc7-P0XSy=C zAC$X>^J_U|4iFY)*Af-}f)rxXpU9?{+$qdlfd&uObr;3?7eI*-x0EF*=5hypQrogT zjBU+m6($aqkEh|)L$>-PZztxL`Zyx2m9@z=j)7?d#_)4*(;QLzNP{5`EMi>IsQ$9vp&Dr9=}a*Tx0P#^)KF51Oe+`c}3 zRhm$fpRM``jg?WyI62X1)wlY!YgFm3*#Vz&X&CsYl;{{c_>a%xV9Y@XAHE8ePZ z8GM1YbU}_JJ|G+1L(h$LpQgKEy}RLCcLV#%ZtfEG#u#_2l}EcZ`5O-F6v?NlZWr#2 z%_wqytaup3v~Dyu7?%MZJc_|rnapsyZKy12>K+BQH+BOSmAHHLI=OHkixIeE?7UQS zAs!{(5TP|~>a*bnlwFd=SPLPE!MXAj@SgCHS5=g%x=H&+lI zec_F0Uy!>Lj?gML7gRU*GOCfbS)BATqS4IcWa{~7fu&-Pr9uel^OMsvP?i!4GSIkYW(e4l3-S%w)@`jjKg3mhE&xVxAp#De5g^}RY?D#fOu^uY9QqP-fRE&v-db|6P>dL}DD zAiq@SDzv@q6pt?>by=N2ap9Iix=|-QyFmsyLdNmJVP+rSVc+&c+60inJW=r0=q-I4 zO5?zd#_>AbfEjZ3S%C>k-tie1j6wN$Dfilo#jcYSx=v|%=gPfz>X_nI!~P! zHyePAxwLV8U!Iq3bQ+74O7iE8b3A%aWj7nzYJACJF{WTP?b#zot5uxam!?~xab~mU zJ4>ujxAOoM;#9jDS9fdD317x{Zm)@HD6yvJ;_EXw2hJUV@|_#SRpq;6%^2bh?fJww6{OEwW+w&qMPZW(wychBOboQRr1*f3GspAFG37Rimupp{av^Cv37-@VtrLYf{(2JNv~P>4Kz$ z3cCHRHKP=fGh7~%yBlHj`?aU%l0y9%#5Hluw(u~=cgYEkZw^l;;q>i&$;`gtN}^Yt zhRf7Bzm`0b*d9zDB6a-$Wl5b&E|v`+OGV4ERgFjMW8obt>K!ZU9VzOaDe8?{9*eq( zbwM^8m1t6Qmqz{)02h_GC1+<$h0<+z0l!KioG6(w;uc_nc2{YWNlL3?UTGxSt5#@)c~Mfrw;Mes0qEmUF&ySOO-?l!rVS=sA%kGO>P^`^jt?1C8DTSwxU;j%YawA)POzCZ>4 zv6>@5WR#JVWm&HY5sSHmY0YGfBCw?Kn_h1X$5(yTyd}{Rjy=+)oM`iriSE14Is?uP z8!Q@UMvng{+oZ@RE!Tj7>H5 zHAgx#4a_Qns+}>)(3dxPgy5%)KzFF>jLST&ZTDP|o`;V{b`ymD4@Zm2yIkzgzz^i$ zGnaXbac5(`%H9byhL$F)FfB`^6O0e=8$^*sMT)^da624v&I5Av}Fq3}abI{URkN@HK}S z#_pz2uc2e5iv#uJV>#03e_}*q)E=0 zyMn3~aTcwTx`ikeWNu1ohopH+;wtM_l23wK?{;@OI`0QF>NiR`31)kdy2xgEai-&@ z!sbjCHS)WM&~E0Qb*S&~=1a?Cv6}hnUum8vX1Q$K(%wv`Mo&<`Xr7Mq83x|3G*5WQ zzl$ux|BkGRsf(-SpCTHcEHB^pi>!N%{qbfl^9H&tX59Qm|O#${%nYMo=%Zm zw)&Y#8yfc+EHKT>iJ*EGXRN!`Gs3kqM^?CNT?A~lAx{dyo{=iUJp&ms2c{WHP4V=g zkP5BtWCMXxY1Nmiesw;fjbPF9>z8CtfBunXL-`+0Wfk5eZ>U40PZ85r5)c$#dQO&> zwVF@tM%yhqGV<$`jG1n*Y!+UT5{mkIl`2_WJMaarO1z&DEX>?RWBUI8kG6zPy~jbosTOGw_d6r?TCv%O)J}P?`m{3L@BK{;iaj1QW4$Bv z%=_mE*xHvZ@k=^o+k6UzZ+qsH@DlAc3`UJxV)m=O@?@(QFS_KG7mxE#E%%WA>~k)%Ug{ zEOFAln1E=H9a$aU@%6el!tR0)uiJ)fzbp(v<=e8dsz&z&aCG-Yw%#H;5}US? zXoA?VyG9sRyuUc{T{y3f^ck-DiVv*O3m^6iWvKw_LLRYJ>o(Ql?mO1cf}BiAD=C0_ z^S(SjLSjypE3bFWLW!?ckS&I6IYN2L^G=^${P6Y{Y8%2mJ4KExCe}NoCRLWt0*}p{ zZQ=gR^1;c*&bXz%D&Rh*x!ip`9xfaiitsAJjG?24_f)ODv9qkTA;9};nhGCKc8VOE zqj$W3+~gP1+76JEALT#d&Yf$wP=)C~7%UIJVbIH{)7RRVU!QGGxF;)0X|nx+2KXG` zj>+`l(9jziO)iDu?IO8W(>%MEI4xWlL_-h{9#G|69B}PTp(+#t$QA5+UN59MI=#)E zS)MNU{c;WW#*jEK(FyWRd{K}WBii+>H2L~CQ?O0k{G5?f9Evc8B%VFEEgWoU8w(Cx zB%BnRsg5?8(D&#Ep<`djj<(sliu4sN$Pk{iZaBC16{{(`rkszk~oi~Grz#7LJbrTvpdjTI8!1RuBv5xk|n zg6^2I;d53azR9fMqsz=?8{j3x3vQlp+8~O#IcNw<93J0OFHnZj*ZqvqvyOH~ zjw96!CH|1&<#jllntPIS5M76u85hWnwy0Es55aKb^h%p=zVz zHv2(TkFcQV;>Uw)4H))PtbA_+_ZsdQO2e8CS;cOUL*nf#i=jb5RI{_22`*iK?^kI2*lgNcvi5@SX-qe^JseN!-{z_`Un($GLbR(fl#bA>{# z+@7Qs?aktRczhw%-kG&4Uu7`!ZFS5fgTxZbps$%KIQ9Kw9yP!XLn9H|AnCmBL5W$d0ru9rw%7{)S{2P0*kt@V_W#_P-^vX z-Kf_UFBy5Oe=Bv5*JBL~ari5LrQNY<;J4H2VG>-7Bq~(L@6UoCTU6x?l$6 zEm*nP!sQ2Utl*f5?~P9Iv`(5Q*YYLRrCI>T!}Bn}Nf6JK&>J|RsHJPK!T$Ltf1d8A zd7bEa>UU{K6(@LwS@Ca6S1G8F5zWgk&?3>TM#wV-bcq!XqX!<21W#B$pYWb=2CNar zN?%vfy!n7FShM8`qH;OhN*B=iwQCQz?Lz&{`seOtMw zAWi7N!Y$Mb-RhtwiYoN-XrpqIPJrMdc6C&1sHs!t7xBIYkTllUs?SMBr0XLCVO ziG-{s&LEi z11DwFBc$2E6$NPwGe?Zt*_85}IPB&?m9{#V`dlm~IjI#E9sag=uuoMHf&HE?HUf&A zvLS~{^xswW`LJ}_{7}M*V+cI8+gb2H&W+23m=sF30y81togK)001<5jEFpeHL{~z< zOw-oGYmrnsc3)-M3{II0eWOUOCrtf@j9R6oYx$3TMG-I7Rg((Za&qaMsxt=bmftQ{ z3+XVqO*c{rCXwygoH6ypH2bQYYH zxD=ATTeDNc4K(ixEdJsrGA!RSy z#(%3*c<@5Hx5Kf`n}+KK-`=hlebf|LWQc_m9D<7s^jbAW6ouKLw>DaEtFVM$E?P+{ z$C<*!gPgxCKgo?R8*)`O=I5nGcrlzN=6!EfG(=HyVw8BB1WJ)f7yxDe^29>4wuJZW z8V^32J(yg|#;lZ<9b+C;2dM$nca=^grX-2+A&5V6ZQz;3wkW*NDvV$a|Dxi?neW zQo9L^0-pY=hQ`9k@MEmnu4-8F$2LrMXZB1goUWu#hpOJnsS7)%=S>z?49j{ltmFLU z7HEisNp7F7f830Gu^Csb&6p>MHh#7^6c@jp;%udEJ->|dn+6=<_U|bQR1|B^oT*-g zN0MvoC6l1&t~Rui5LJp6y4tWA>pG-sj#E-kmXff>Fyy$tua`6V4jDxt(?PS3sV_f{ zOXOSTx3X2Wi-K?yzc14q0WD?sU7J?Rlzl11g_g6w-Hk;cmLoU57pJ$14~2Ya3Mr2q z0?Qzpwm|2IPs3b5enE=DChLNfo-duHc!%CqSfbvBt2K?Iy)9i-LwIK-)#zPR$Jk}* zarGy`nG4@qKY{qK`{Qh_#Gt4oKZDU}RXLD2M!V4Z()$|b(F6y&at(^Mrior+xcfef zRP+v>c2#RWaYLUMH4%J(r7OouT&TKzN7WU~`wcAk{!+evfs*pnILpP{49bqeY?5}D zaOl>ai`E)e_xci7+NcAcP=jPvk{z{!xB00EW?LFD7SA8%88>Z!Ry_bX8e%@F3bUHG z59sj1O)kSbYI9T1A&{w?VqS1iCqdwNuu7di;NNavSNF~`5MDfbr>wtNeHn;p^iG06 z#1UWnn^%RUVEW(}#vQc>ZwQZyLFH+$M9bX5i}jj|&bWq6PnxAb1em>BTQ8}Af^f*o zMeL<~351}z zkHB-)J8+5SnuQ8Ac8FCzz>;;Dv+&-EinV>XP$T1^0OISO(l0}n;EfE7+c*va)SsZ@ z+~2g248rr%ecy?korp}Heds}9ASKc2h0}qi0-&V5h1KY>s|@F2#hmXY;>|Rf4298w zjotFI33m)R30?>?UZSi6QQWcl(|{YAM)QxD3dA4KgW)w#ejaZcZy9ga7J>ijajkV8 zih*GRMt^jf^>K$vf39}gpH*xkvBnjtw;yEz-nYj;C`n_1G9=pp(kO*?4+eoHPv?Cr zCsl_ATaN*OdS<3xol>1LQ}aGpr7Sqw!6%J6tt3Tnls=h-Ykz>+kRu2wDAX!H2p>Kx zJ1F(|QtlGvEoL%am~LtQQmr}$z)qH!tCnw;vd~c^mpVvNUVLmkLPpLYrG?}>{B}(S z-v_g0c;2-bpNMEZC$Ued4JYIk^dUPYfdD+fs7%|i zmzitn_211;zkEa{=nAXY^6TApg4`nf?t)gXPFSRxra=e^+dtyKJ>`fy9gvB+nrSl> zYl>hX{%9m6V2nUBgL1V+zx<-Ny=kW-_vqez(?6uxKZ0CO+$ojjNL6{-KlKhkz-oo>na}tWl1u3V80#jZ+?)#$?93I2re2YoI zjPpsk%V(dPR91R;QF|<-nblSso}fe-V4^93A42RV$H?KxU;v#GZlAA38Le+%`0d^l zV+3lYHN|Qxh|Jk(a`V}V?ks2T@MMuqdjCv?kt=Q$w;;szGFoBVQc!Y~0g{=?? z3pIn1Y96CojMNSGjg#erbGbnrEn-Y1xt9H-Vm4%9S`!kX^le_fzp&F_@1cI z3-$)q^0N>qTD9QLz`?nUd^{mi46fQA*Zo=G7b@}ge9D`Wf~p4MY`)OFCxR;u(hViN z=K02u0I^nZ!W>#} zRXw`>rdlqHwmH*k6!D@Q{)w<4yvL@(SDPl<(D4Xd5SADAe)nWON`U;*X#p?p(2gJD z&`bl)WVg@5R0DY5V${#YFwZUV)!hLvIl{uJv&FBr`Klmn3x zT6&UPM5oMHOdq^;DM^@~i?ol`R7q*ct2wK3z`iM%#vxLy8JQ(EviDXtTV9dlN%h>E zf=1;WGaD0lOLybYc#H3sk8Rr}%8EGOWSg+vtn*cFJ@*Y9%NRD?2$;c&NrEaM)mU@X z;(`isSrY2qm{ktxf_I7H?v(9rEYol%Qmh}JVj^4eP-!yDXVO4#on7kp%}KHQ4>Q z#Q>p&-0fo2Hh-iNXI7!(x#n75I$>nSBNLb&V}fYEK-j2i)JpcYy$(HlH{NC!%pmW2 z)0=wBmvoSD-NqryT$;iIN9|F%iXZK6D#oa z7+_s;JzG9zS5mz2P9aNP9J4!2-{M=;RDj6EUIGRop5389Y~q1;8uN}7(>F?9i02_9 z+iM`=b;yG44xI>8Gi>2F4iGv5d}8vbNP>0hN?ng3UcV3!{dU_Ohm%4U`pn%S$g2IdY-sT7Vg+FFfZj;KzzQ?(G-<1kgFz?^DGn87r( zV>K*s_JPcff*I`s8&ojq?8srchS*ddukotjpAq9#>tdzeyJDP4bb_Jwj$3?bnXOWf zozI}&oKLvlHUiomK?%$uv|xYiz@5*Wm|&SG0Ek%1yW2Snk5g~{V7gC3-N-A<72yK+ z6a;I+&zFK<)GIv;ebBIXc2A5g&CFtdPxt(py(U_Ni-@zIWO^ilQLh}vBb&{qLbgS07R*A_YfWzU;g4q24%jq(Yug%LGGoDp z#VGmZ=VH$M?Mz2o{!?HDNjM^yiaO$aF-(PtF?;m9C|7hOdwm47;xso{2jSw3g~fs- z#1R+Yj~-Qm!g)h{3VJBLamTFfW%N*$N_`o=By_7WrVO;@H9pen*5Gc_x^3Bf&7^;6 z3b8Ga@1|z@rrCiCupT8{_em(MN8h61wCs#$hq~=C->$+=nLg1A$*+I4$z8q-hU0*N zm9hR^g5veVzqrv&)6vx(0B~|~v$W9g2K+^q;-4i&K-J_i#dq9O>2P6EhT@BOT-5#X z!vVAuNJUJxv55tHG5z5p-6WRnEu3~}7%RK00;#T@0y6=AogI*so22nr%{tAx9y%V# zC-{rFGIO6wLfb^!0n->V2EaE|N$+f=*Ah;eFW)x`73LZAecmmk5*k0Y;XuFs#G>NJ zOV9cfw#ms}f2r{U)7AQgbYIaiboGoMe)XueJTl}dzhUD9P19HP-qWbxu=bh=9Cm%YkafK1kf=!qt~ zyCFsqMhQk?6dzv}&~#q-25*@Yl1c;nl_5f`lbENEa;pp9GbWH3RYj92zAr~0N^K3I zI%3DfoU^P((uoFhcWLC&WQ<48q0UwN&PeH?WPl$0g;A?-%WYh@=8p4&T+K3(7RoWY zJ%!mCsS=9`mi!(Y#!Ni}f?;HRU-T)Vl?3cRaurvmK39mpqKcGd4fJ}=Re=3%+6n2k zgPY|$fP<-yt$YPuKp@vk zt4^cw43@J1-$&5nqi1oNetPsRNx;KRW{X*V>ET8hJ)O$T_1RV}_AtGA<;S27PJd4k z+$+)Nr-!R?_p>WLMi_`^26c_Qg|>RV^0m4pHSPdy-K1rbCQBvers^MKENSJI{N-aA zwx0&){hQ@Kx#Z_5r(`s~H)LEg4y=Utcq}OX$sE3sY|?1brVSX0IDyc)M9^4A{-ddVkwD2leO?mZxf^6 z3vSpfV;7GZxY@4eGOKFd9rmIr<&!uxDSIJh{0c+O(?6|e74@QepQq#3W@LcKhW+xX zt1I$dBjp+N*~<>~{nq3NmznhAlw?u&iK8Xl{bO=8?r=iwSTo1_u$lDkQ{u8$X~|78 z2iL|9USxzkpw_y*IK`gadnJIYI3ScbTaFKG?Y1Ry1~Aj@ple;nPv*VN>@>HjDyZl^ zBJC%{V%0^6%7o&wD*@GzX)vr5_#i2WQZ1EnU45J3x*R!Hkzj5co8nHCOTfg`7Hdzi zj96JcVs{}VD0pC0H$RS3qs5Y{2aELOJ-a3?FxU1FY!iXatC6Z#G&Rpdh<30Xy1KeJ z+@FUWBF*gfCVkw(W@V9JIH08UoC-m0u^MV!N~(hN`y`mPnkP4=Y5!=BM0V~EvV~zy zL%zKgP)WMB^0??*-LFq3QP!#s!XB$17mf?(=B1E6js{wO)GPCShCpbmBr&6EOqmK#G&x(D((Bccw)rvR04Y^MaAKZfA#vDp>NpHoNzQD5( z8Z|Gc9}FMSbi^^Iu}K^unK(U&of>&Q@SOH6>+wtG>K*tf+CN-V@-BLct?>)l9dwP? z1k4cXo7Mq0*>heRT7<@s?UZx;KxCwA1X=m}lMv7SdacB~-E)lSOi>i} zMTZnpq|~2B{vNkRF8)P0U#ud1_N!^BiUJ7N5TI*qKD4??e5_|&s`+h! zhTEnikzl?MMha&WTdv||RiH~}nO+-xmf|Lm>x<2%#JYd@}6Z}>l4U)$1P z=~v8usHZSnxLN$e4eXbC4ICJ9A}1Gp%vBXLDHs@K4ftZtsiZFXyZ0}Fn%|{setr2rtTebz=C?tA z6Y}{d!e0y6{F1o&r~NwZ5!pWkZ+@NeUwizLy!nsE@xMI&A%OG0oqkE+{KpAR?yt5R ze|MU{Bys-ZFZ!4MzYFC2XTpC?+3!jVza(=0u+m_k{|D)>1#|u!lHW_;{nBgr!%Bk{ zRsQOm{-)mWXQ?D$&WbyJ>DNR82*g-J2U4Ov+55k4dzMs zd&K|2v-4(S805{QH*ubv^jEl?JaS|2^=($R~dW{C&5` z`fs>jliOJNSAc)N@BcIU@4o}TcAS4$X>e5afA2q4 - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - diff --git a/source/de/anomic/document/Parser.java b/source/de/anomic/document/Parser.java index 568504774..002974d1d 100644 --- a/source/de/anomic/document/Parser.java +++ b/source/de/anomic/document/Parser.java @@ -80,7 +80,6 @@ public final class Parser { initParser(new docParser()); initParser(new gzipParser()); initParser(new htmlParser()); - //initParser(new mimeTypeParser()); // what does that thing do? initParser(new odtParser()); initParser(new pdfParser()); initParser(new pptParser()); diff --git a/source/de/anomic/document/detector/odtDetector.java b/source/de/anomic/document/detector/odtDetector.java index 6fd9362c4..177486f9c 100644 --- a/source/de/anomic/document/detector/odtDetector.java +++ b/source/de/anomic/document/detector/odtDetector.java @@ -31,10 +31,9 @@ import java.util.Map; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; -import net.sf.jmimemagic.MagicDetector; import de.anomic.kelondro.util.FileUtils; -public class odtDetector implements MagicDetector { +public class odtDetector { public String getDisplayName() { return "ODT MimeType Detector"; diff --git a/source/de/anomic/document/detector/rssDetector.java b/source/de/anomic/document/detector/rssDetector.java index c60d1dd8c..79063f20e 100644 --- a/source/de/anomic/document/detector/rssDetector.java +++ b/source/de/anomic/document/detector/rssDetector.java @@ -30,9 +30,7 @@ import java.io.FileInputStream; import java.io.InputStream; import java.util.Map; -import net.sf.jmimemagic.MagicDetector; - -public class rssDetector implements MagicDetector { +public class rssDetector { public String getDisplayName() { return "RSS MimeType Detector"; diff --git a/source/de/anomic/document/parser/mimeTypeParser.java b/source/de/anomic/document/parser/mimeTypeParser.java deleted file mode 100644 index 5f066c95b..000000000 --- a/source/de/anomic/document/parser/mimeTypeParser.java +++ /dev/null @@ -1,184 +0,0 @@ -//mimeTypeParser.java -//------------------------ -//part of YaCy -//(C) by Michael Peter Christen; mc@yacy.net -//first published on http://www.anomic.de -//Frankfurt, Germany, 2005 -// -//this file is contributed by Martin Thelian -// -// $LastChangedDate$ -// $LastChangedRevision$ -// $LastChangedBy$ -// -//This program is free software; you can redistribute it and/or modify -//it under the terms of the GNU General Public License as published by -//the Free Software Foundation; either version 2 of the License, or -//(at your option) any later version. -// -//This program is distributed in the hope that it will be useful, -//but WITHOUT ANY WARRANTY; without even the implied warranty of -//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -//GNU General Public License for more details. -// -//You should have received a copy of the GNU General Public License -//along with this program; if not, write to the Free Software -//Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -package de.anomic.document.parser; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.util.Collection; -import java.util.HashMap; -import java.util.Hashtable; - -import net.sf.jmimemagic.Magic; -import net.sf.jmimemagic.MagicMatch; -import net.sf.jmimemagic.MagicMatchNotFoundException; - -import org.apache.log4j.Level; -import org.apache.log4j.Logger; - -import de.anomic.document.AbstractParser; -import de.anomic.document.Idiom; -import de.anomic.document.Parser; -import de.anomic.document.ParserException; -import de.anomic.document.Document; -import de.anomic.kelondro.util.FileUtils; -import de.anomic.yacy.yacyURL; - -public class mimeTypeParser extends AbstractParser implements Idiom { - - /** - * a list of mime types that are supported by this parser class - * @see #getSupportedMimeTypes() - */ - public static final HashMap SUPPORTED_MIME_TYPES = new HashMap(); - static { - SUPPORTED_MIME_TYPES.put("text/xml","xml"); - SUPPORTED_MIME_TYPES.put("application/xml","xml"); - SUPPORTED_MIME_TYPES.put("application/x-xml","xml"); - } - - /** - * Helping structure used to detect loops in the mimeType detection - * process - */ - private static Hashtable threadLoopDetection = new Hashtable(); - - public mimeTypeParser() { - super("MimeType Parser"); - } - - @SuppressWarnings("unchecked") - public String getMimeType (final File sourceFile) { - String mimeType = null; - - try { - final MagicMatch match = Magic.getMagicMatch(sourceFile,true); - - // if a match was found we can return the new mimeType - if (match!=null) { - final Collection subMatches = match.getSubMatches(); - if ((subMatches != null) && (!subMatches.isEmpty())) { - mimeType = subMatches.iterator().next().getMimeType(); - } else { - mimeType = match.getMimeType(); - } - return mimeType; - } - } catch (final Exception e) { - /* ignore this */ - } - return null; - } - - @SuppressWarnings("unchecked") - @Override - public Document parse(final yacyURL location, String mimeType, final String charset, final File sourceFile) throws ParserException, InterruptedException { - - final String orgMimeType = mimeType; - - // determining the mime type of the file ... - try { - // adding current thread to loop detection list - Integer loopDepth = null; - if (threadLoopDetection.containsKey(Thread.currentThread())) { - loopDepth = threadLoopDetection.get(Thread.currentThread()); - } else { - loopDepth = 0; - } - if (loopDepth.intValue() > 5) return null; - threadLoopDetection.put(Thread.currentThread(),Integer.valueOf(loopDepth.intValue()+1)); - - // deactivating the logging for jMimeMagic - final Logger jmimeMagicLogger = Logger.getLogger("net.sf.jmimemagic"); - jmimeMagicLogger.setLevel(Level.OFF); - - final MagicMatch match = Magic.getMagicMatch(sourceFile,true,false); - - // if a match was found we can return the new mimeType - if (match!=null) { - final Collection subMatches = match.getSubMatches(); - if ((subMatches != null) && (!subMatches.isEmpty())) { - mimeType = subMatches.iterator().next().getMimeType(); - if ((mimeType == null)||(mimeType.length() == 0)) mimeType = match.getMimeType(); - } else { - mimeType = match.getMimeType(); - } - - // to avoid loops we have to test if the mimetype has changed ... - if (this.getSupportedMimeTypes().containsKey(mimeType)) throw new ParserException("Unable to detect mimetype of resource (1).",location); - if (orgMimeType.equals(mimeType)) throw new ParserException("Unable to detect mimetype of resource (2).",location); - - // check for interruption - checkInterruption(); - - // parsing the content using the determined mimetype - return Parser.parseSource(location,mimeType,charset,sourceFile); - } - throw new ParserException("Unable to detect mimetype of resource (3).",location); - } catch (final MagicMatchNotFoundException e) { - throw new ParserException("Unable to detect mimetype of resource (4).",location); - } catch (final Exception e) { - if (e instanceof InterruptedException) throw (InterruptedException) e; - if (e instanceof ParserException) throw (ParserException) e; - - throw new ParserException("Unexpected error while detect mimetype of resource. " + e.getMessage(),location); - } finally { - final Integer loopDepth = threadLoopDetection.get(Thread.currentThread()); - if (loopDepth.intValue() <= 1) { - threadLoopDetection.remove(Thread.currentThread()); - } else { - threadLoopDetection.put(Thread.currentThread(), Integer.valueOf(loopDepth.intValue()-1)); - } - } - } - - public Document parse(final yacyURL location, final String mimeType,final String charset, final InputStream source) throws ParserException, InterruptedException { - File dstFile = null; - try { - dstFile = File.createTempFile("mimeTypeParser",".prt"); - FileUtils.copy(source,dstFile); - return parse(location,mimeType,charset,dstFile); - } catch (final IOException e) { - throw new ParserException("Unexpected error while detect mimetype of resource. " + e.getMessage(),location); - } finally { - if (dstFile != null) FileUtils.deletedelete(dstFile); - } - - } - - public HashMap getSupportedMimeTypes() { - return mimeTypeParser.SUPPORTED_MIME_TYPES; - } - - @Override - public void reset() { - // Nothing todo here at the moment - super.reset(); - } - -}