From e39ae9cd3070f662d614bf100ace5268ecc3ec5b Mon Sep 17 00:00:00 2001 From: Javen O'Neal Date: Sat, 29 Apr 2017 17:27:17 +0000 Subject: [PATCH] bug 61034: Call to XSSFReader.getSheetsData() returns duplicate sheets. Thanks to Mauricio Eastmond for the Excel test file and unit test. Thanks to Sebastian Wikalinski for isolating the problem and providing a patch. git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1793223 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/xssf/eventusermodel/XSSFReader.java | 9 ++++-- .../xssf/eventusermodel/TestXSSFReader.java | 30 ++++++++++++++++++ src/testcases/org/apache/poi/POITestCase.java | 9 ++++++ test-data/spreadsheet/61034.xlsx | Bin 0 -> 32774 bytes 4 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 test-data/spreadsheet/61034.xlsx diff --git a/src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFReader.java b/src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFReader.java index 68a85df54..d82c70d3d 100644 --- a/src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFReader.java +++ b/src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFReader.java @@ -428,15 +428,18 @@ public class XSSFReader { @Override public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException { - if (localName.toLowerCase(Locale.US).equals(SHEET)) { + if (localName.equalsIgnoreCase(SHEET)) { String name = null; String id = null; for (int i = 0; i < attrs.getLength(); i++) { - if (attrs.getLocalName(i).toLowerCase(Locale.US).equals(NAME)) { + final String attrName = attrs.getLocalName(i); + if (attrName.equalsIgnoreCase(NAME)) { name = attrs.getValue(i); - } else if (attrs.getLocalName(i).toLowerCase(Locale.US).equals(ID)) { + } else if (attrName.equalsIgnoreCase(ID)) { id = attrs.getValue(i); } + } + if (name != null && id != null) { sheetRefs.add(new XSSFSheetRef(id, name)); } } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestXSSFReader.java b/src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestXSSFReader.java index 1ddd1f045..0221bcca5 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestXSSFReader.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestXSSFReader.java @@ -18,10 +18,13 @@ package org.apache.poi.xssf.eventusermodel; import static org.apache.poi.POITestCase.assertContains; +import static org.apache.poi.POITestCase.assertNotContained; import java.io.InputStream; import java.util.Iterator; import java.util.List; +import java.util.Set; +import java.util.HashSet; import org.apache.poi.POIDataSamples; import org.apache.poi.POIXMLException; @@ -267,4 +270,31 @@ public final class TestXSSFReader extends TestCase { pkg.close(); } + + /** + * bug 61304: Call to XSSFReader.getSheetsData() returns duplicate sheets. + * + * The problem seems to be caused only by those xlsx files which have a specific + * order of the attributes inside the <sheet> tag of workbook.xml + * + * Example (which causes the problems): + * <sheet name="Sheet6" r:id="rId6" sheetId="4"/> + * + * While this one works correctly: + * <sheet name="Sheet6" sheetId="4" r:id="rId6"/> + */ + public void test61034() throws Exception { + OPCPackage pkg = XSSFTestDataSamples.openSamplePackage("61034.xlsx"); + XSSFReader reader = new XSSFReader(pkg); + XSSFReader.SheetIterator iter = (XSSFReader.SheetIterator) reader.getSheetsData(); + Set seen = new HashSet(); + while (iter.hasNext()) { + InputStream stream = iter.next(); + String sheetName = iter.getSheetName(); + assertNotContained(seen, sheetName); + seen.add(sheetName); + stream.close(); + } + pkg.close(); + } } diff --git a/src/testcases/org/apache/poi/POITestCase.java b/src/testcases/org/apache/poi/POITestCase.java index a82b69aba..88c6eb69e 100644 --- a/src/testcases/org/apache/poi/POITestCase.java +++ b/src/testcases/org/apache/poi/POITestCase.java @@ -30,6 +30,7 @@ import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.CoreMatchers.startsWith; import static org.hamcrest.CoreMatchers.endsWith; import static org.hamcrest.CoreMatchers.not; +import static org.hamcrest.CoreMatchers.hasItem; import java.lang.reflect.AccessibleObject; import java.lang.reflect.Field; @@ -41,6 +42,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Set; import org.apache.poi.util.SuppressForbidden; import org.apache.poi.util.Internal; @@ -110,6 +112,13 @@ public final class POITestCase { } fail("Unable to find " + key + " in " + map); } + + public static void assertNotContained(Set set, T element) { + assertThat(set, not(hasItem(element))); + /*if (set.contains(element)) { + fail("Set should not contain " + element); + }*/ + } /** * Utility method to get the value of a private/protected field. diff --git a/test-data/spreadsheet/61034.xlsx b/test-data/spreadsheet/61034.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..cd2c5e564ad6ed0cde325c12d0abf1b9063d5639 GIT binary patch literal 32774 zcmdqJWnA4!)-6oX;O+zn?(Ul44#6FQySr;}_u%gC4#C}B4(_hOFG+fyneLgM?&se3 z)BE9^9~8Csf1kChR;^RD3mI_`P!u2_ptrBD_drG*Y`~FkfPgw*e?%Q0`Wo{L&`CIRyO?uI@ zz$Vqm%iQQI8O{xxMNF^92P2p;qZl$4nCGWuhYZMb8L-I)Cb8qw3FX=;Jem+L)ej#w z%?LQG)daNV^21U|HcYP;T@VnXt5ml~`3Mxfbl4i&4k8qB>2zv(1oQ-+KZ!{&lA-jD z`fm4k`|}}McFDWMjZUNJ)vufkOsfEkQ&X^aXS~25GmnwGs9YQ_LUsvW$?wL=2Fa}M zk|=b4RuS5kQuo4v2SQi0Y&3o12*Fg@);8c;JyOEJUXtjLBq0Gio^`dt*70)<|}Gf525r;W~cpfv>z^~R3h?`RxYkn=mNy6 zKIt9A487Ujn#xEvne#o?yZdSo&`?5y?~5n%np~*Y!~y|1SS5=6{NcAZ@Ym#O+31_u z(*DdRozb&0z1hFz^N0OE2M5XZ*~a~=JpdR82>O5QX?}S5pFz?3?}MT=dQ1$29wFe= z=M=%_)Id#8;OnuV->SeY1V+pP?-2=dbfE=c)hm!@x;6lp@ot1w>zkQl40aD^?{v(Z zjYh0&2CJScz~oMqxAY`e1ZMS{2yQKxPIU9Zy~%?Qp_PT023~YON_x#vVwbP%fZZNG zD$4k7@|P@-(Z2a2AOkP7nLMgf`NxsSnNac@#i53JR@v!3uic75V;A2DJvcb-bc{?Z zoh!6sitc5+#<6ll=590t((1Pi z(Eptb_%hi9r@T(jLJ%MzgnxDM*~;p#=4Ps#q~#JFOe_4nC!L+;R*pFxXjSn0mGQ1% zu)w8Mm85Y0#pw4{AFH%@7rZqLHE5cn+~B1n@MIkW@}zDs`dt!&?x;{9IX0mW9g>^| z+qK*gA?X`{O-|{Mg^8^5c|B#5*VJIlqN2&x$&gWPo1>#8{9(tbzR?im!oylgbV=P; z)qtP2I-8DHs^{#>Zg@|iDy!FKXRwi%-8{Bu`Lm|-x{OAcPfs0~F3rvY_0e2sGk3<& zvO9z7zH=>#wuJDljh6cw9IeJ=*?I9PUrb7_mRV+#gC|qG05Z;vwgAGO#_UE))xyJ{`!Q>?ErdM*q51& zMONyD?9t7WV`wsVlxg@w&HciWCvG~pA#U0tbFeodPVk!-eLgOMa!~etT1smU$}lMr z9~@)H^3(Ho>#MIgBp;x0OvKt==${~dKhIRMl#nG}vuyi1&k+AL%es~}`hS&X_vi_+ zE;^Jir(l50tv1O?IMUqX5Bf@QV5}&od^Sx&OGHFTE32z@OHHr=3F|Kx+q?mK)#h># zyxOVL6v9jdWI#Q&ktV6xGd8%Z*&WV#pvAR5IL95CD%P$s)-g8b>oX=Gv*K1C4P|Mz zNrdBWNqXkbp|Ezc!eum+O_t~Y?~bvsd)pVVtR(v1S#&UVa&@)RF=ZpZi}i^RtFFAp zN5J8Sg(W+s3nSyH#5LP2)5M5otcvn5T%&M-5q3G;dRu3XT|40A@I?Ns%+(H?{YCb= zdBZDM;w)B8TXX4KRe7M28DUXa943$WJ@xGHonZZ$tdG+?D)d09L(^5KxQZBD=b-n< znHC*qXj6js+os@sj||<5G%gTWA6F^H=(_c}>lawef%EudcnVou&C-B_?%zz`~af z0chMc_t|&5S(jfB8vy}Tq^vY6XKs*zq|y(40a;c48elq2e7nk(Hj$jW+;WI0ISHXJ z=^umIC4%+YRbL8~2iHL_>=TfM3y&%xCD)J_>-DkZ-BD=_ZY&HL5{dkGm^COdUpDcP zE{Z(KVVGG{IQlD6lYozq3o6zVlR%P~&G{Qh9VQ#kY>&sN$d3s}rOJ8Gv;hl(Zo=VbP4<;nhY-uurh*AMD^ zHU8f&UKgEoMX;}#a|Hte!unSij+Qp2I+m8EKl1mNYgy~`iis~B3dGq%=j!{E2h7@1 zQ(;}p-i&&+TcD2-LPbGDhInmHd_x@2#7BHBP`e_}yAbpXCvDB~?pgL>6Ts1A;9r{P z^s`OhoCYKWFw+UkCR8zFfx+x)CjbEET9t8Itn4#a;ddy!!95sRLM zp~pmbld~-eJ)dU#r`Sdt-Wh)Ih#R=c1!|^6?||cvco|?(m_hk&790V`yn@l$9?H$( zFTx|gh$Y&QyZzl*MSutOyZNwem^}>F-K6> zU#G|DE68ZS0RA;Gek^kOHg?YRG&;r>|5YeN4oP)=fDs(a7dSG8Hba0ag%aO`LNiOw zix3f2jg!IE8apR?8^nx7tgEF3IJ6!Og~u{skSbxn5bH^cR~v26?(XKSo~%NmEv++? zyABJ7-BrgPON?gRUA?4gpEFZvriUBZn_rl)M!dyIpduc`C&aLv*i)lQRvP7 z@81&y!H;lqWlziU`xr{Ndc6O841bw5)P7F5S1|%Q!H$$Qeou@=w72qtrl?sNlS+k@ zAelY*o{_xhV~!~;T12O)4EFiP^o#57W6+R2m}C8~I57Mb4wr^+b*yv(4c{7^XO>dmW5i%cq{E=Yc#{bhX%6H^qHP4Vl}r!xhXG7S7kbS6U*ll> ze~$wLq!Q8hjV~rbvX{yi?N8A7kbj8c4DK^K({EAy$7%Hc0T}-i1h(%TLLEB-$RA>e zd#+S#p-%p5A%?5ZG(0%du?Y5#?gmEKCr8S3G8xty-wm$MDi4sIf5XA$wAdCkX zox>eLVwEk%c|n=u5escaw-s-;P#4R4(53Guquw-xbz@Y)O(+HpdO|$Q=k1wp+z%dN zo`7(Xj&t#y@?3ETtme7Jm!mMuy?M+&^md>*WnBayLmejKk6rM|qas!FZ5NcvU;W5yM)M z38D&}SQFSIz6|lma*RHEE2m1g&KTF{7Eir=V2>WdvIuD=w`y#$E*JI5T#hp#C~R!n z<=ePnx6xZnFvAJ#4HlMB9PEccb>A)5y>stw*ojB4G+}}2fI#J*(~l+{r@G^$6}@9o zZJ-oNSG{j4pTICqHeLMddKblYRyO3Wsl+LA;K!?5x7;~>t6~{|Ay;i{>|pQI)5!@b z))uiqz%=wj*kXm9*P#37_${f>S!9`oaiSQ(M*;*X3>h`!*fZbh9>~yY4v;!^^jjI@ zX5-fu6RLd87TTa@6pHQpJcpV2h!w}PK~aT4G_C8xU3P$2+Z{_M(9JA5u<~ZzWVmF3_b?~!qpmw^Q*%{0g@@*AgKa0&l84(>yg!RLFO;x$)yiSX z;dAQCCx`A3xaw|xq;JeU=@>u_!62RGTX8&~_Ym7rzv>CCrZppfP&eGLt;M7qt~Ycf zibT1Q}LmUc6;>?+hC4^J<%j~bmAFOv}IZF-+%CH0v6Ibc&zm?g; zo;`x!-+av*{s?J3tIXZ!+FyR5SrKd*ld8?G%Sy@k0;{yc-B)uNOfb~0WyCMms%n{t zTI&*;aBIBs9o{fjnTVsi-;lWobrhF!l6y7_MDZ|SRL;IMp;kMP*5y1Ha}fW4(-3Ae*G1|&LD7iuu!~X+3>R&N#j#O z#nY6xX_wqP6p)ls4l~)|jT@4Wq^81+%ZE-Y>}l+zO_JMMo&yVrSgV$8cfr2nj;Aj&8h(*Mbho!IB*SD{t`0oFs{S@NlQlgAW|G&*P1?-d z7L`%mZ#K4-EZ0Tw93;58=u(wYxV@YBIiUFxC_eqNJ8iq%V7tYQREuU~9OQJav|`}G z=K&%kR62R{Fmj-3#8a>*?36>j=mDFH(Jz!q&bO#Vx9((Nj#lOFgQTtLl-7q1bza}u zS|!3$=bAYHPV!yuXp;hN@kLnLR3F!IubOk|7=6N>MA61#*us5(S;F$b}i1DrnerIdksAPyP?R* zMj{*1@-37x%WiaO4%q~n8rTgCWkV-LftmII4+6Ow1#9=sYpiyyGhXlQ_o@-vr$7$H z7x_%NZ@PKz{X3ww$q5X646jLY42SB#T`P0@5yuyu;JpAnOCV|2?qYs^4ku(`rLEdK$V&oz+lu zgvzjYC|SgnQL>?lX#qyI6RKyosaGYey)kHR1w(Ny{t)*4aGeA18`(Nf6Qu*pxO>`l zr1v}hUV^yvv*ingR|(SPo-kdWH4Ycl7QP$m-Z9i6{Jh0z!vrK-mQ?@cJ0_lC zc*HxsvdlGk=pAEWMK;C-V*B5X<&#@iJV_RED!y}cpi>QICxR9 zeCFd~3gsa6vy&Lsvs zk2(2}8P-|)F4u*#FXr4db;qWr4%4&Nt1HrJzo34zwr!l$&|$EI1$9Kf&hqjjdt>%- zM z`=rT?c5GaiV}ZCviL>N9&!tz83gepOngwr^D9wSAtMH7K#a;ZV`1sd8?pmP8+`&X08!dVd^qa=99F{HdsCyuodHnMrbu zO$y6)mp_$ApO)H$b!CW4k=tbu|23AL{x{nL;&WW(1c($%x%&sdJ5JI7>Q&(s($Ad> zWes!eyDdp?&U-b>Zb&p7LzPC8EYu!Ng$OG+TaF*6t{DL57L#QQDaO_DNwlES*sktt zVhmPXVuxQ3Jie^PR)H5QZj{*WD+L`(3+(7UP@d2#2iQ8SR&g}opr6MrjkX7oMJKDA z3|wNlL>NgQ6*B6RjkQ&^$j8HApBM|6hc)!gEo4n56C0a!a+5bVyZL5hi?~alk2HQx zdYP}XHYH3Nn!ZF6Qr^8^_TQ!6(kCs}p7~~dC)K0AlL@p$UYRw&C+gmPdE%5`U_ZZ0f-U+jfBHjDIa@oS zTC1+`<;!k<6NzK6E2avvLm4_%BJFV7BlI80nvIa;^D9|5{TW#^{|&OXT@*rCiTJiv zZkGqwX+PPWO@WM^l0)AMw!yS-$5qv-%!naRl=6M)_P9C54mb#pCMg`8ZRMnO#kINK zF@V%^t9f}q*~EsHKS`7-Q$nAheE`|G|5a53u!xWwgtuTHvFZRbme(kJ8P@HKUp5uDyo z`FBff)V9GM zAFkeSsC?(MT5j}0V`$U;30a%0F5C_3%Kc8kgYSj2s*E0TT?JP8eF@wGRu<_mvWB17 z&9YxRjZ)`(;eH&SFTj(m8Qr4ZS@tP;525`TZ;Y}gE((O}!N@dSNBBy6@KgY|N`>WY zqM$j2X(D_*`9LTsAVOcLRM3G&E;&6Y%r9!Je*&nX(O{LcyYD-jt=rLiTi6)9wQ_ip zvVk4pD=sfEc+5&M0EkJ)EpmVUS?^e48xUneXzxeJdRPGmJa<@UZwYzMArW>LJnkjJ z_SiWvJzrTp{N7U>Y7Ks#Im2(EPz`mx+8>n`2;h4@;a&kB*iUdq*(MjN5{4JDdk-73 zP)-^w26N<+>Z(q#X%3QhcWA%TwR7bBH6rbZtnK+1X2M~H%Hz;ix)#SvLRCe3rR!GQ zx$8hhl2^LkJ&4Uo`bpQQyV<(0bX_WlH$kb|PmD|a=5-t5sb6S)a8$N6HCz8tHMbF? zTyjT?cHK&(#cnqFe32q_ASo)50HTU~f zCch7HFfShoX4y*0_(EZLK|8jrvB*(7Grnc-B|VjqRC2ZGGMThVxCD%@A3R?qtj={Q|CGbI8sQZ7p;jjXFqoz*!H2oNFQ( zmXJ1K!15*G1_y&GQ~q$9blfo#f@?jLoznJM+OgJNm0c>~;?sNR$vf5rJN2WgC<-ml zU71$7Du!*zYmoDkSHf1eM0|4ZxKEAgg7fTCC+&(}(zq)?E_1F1-l)x1Kelf=!5K?Y zTgm&r8!DtN?Ua0%|Df-&p^?8*!#<@?&G>@IRr2mSjdP&moUGKe=mF9NQ9r*#HK=+l z_eI>ygLLv1y#5t9&u;Su=+3W8Anq1 zP*43zId86^G*_o4m+!C8G3ds|B5RN3hFoxuE?N8XtP3wJ6uJj>vRSX`Pn%;(vt~CF zL(E9@osW0S>n)RN+D2XOVvm|T!$N)Sbf2qFDY*AClp zExoPaqEz)pr~Ft$UXz76Hl&;vxMO&)+aMe^1R6%z-5AOczo}~q-I^I|_uXr#cGmBB zofkl*t`)af4u=={H93&oYFE(S=pC{G!zg11k|JX}=GXN);!%Vdwdc4%?IHCLT!#;d zZ^@6BKYdl!A~0=*Zi!DBV$IMTGQ>|GdS6x^nUZ-dBDD=X$$u04o4CGx71vHST; zL_UVh83Gkp7vuusCWN^dklgSSJ6Rgv0EGJ=Utppp=5ex1z4M{xE!J1Nz5{&xxz$h4 zOF~<=Ya?zQyK$#{5ntq-2Zb9$(tjvy?_JPWh0S*RQ(;%W8|vRNGmBFBAD77SqX?Q%VWU&uSH$h4c^j94ww>IF;b1Cg z$m2xCh)b6bl=O)A{f!*NDhBtF5}DRr=SBd&jcwZr;VT1b6r_k~AP4X(5AAF#UE#u2 zsdK$Y)jW2*a{Jy_x~3!2WI4EY;!fI^qvJHtO#ZsV;A;90b&Yn3L;9+&or_-8^>Io> zk6$*eTT<8$b?x>`U5n$nAEz}HsZg`Bv()eyx0)~v4z43o$e|Z&LOWQD7pX#= zc}g4yUS@o`w+a|4S?*OtUEQgp!6BJmd}DGIsBXSAIriM6}izdX~UPhC)_*TRQt zv91;Eb*bV02&*u8`dbn@3g&)m<6_3C&X=yISU@y{ZP~F-kjv z$@g`IKh*W^4|RPQb9@y(a6_l1!K7uUkirnmtw`2YaGJs(5nIH}tl1=-Jdbg6#6ze2 zp>UScAtU{#y0(!wcu6lcDXxKfRoA{rRQj zl?wJL18PRV+cd=+j!m&iN3OwxS9R^Znpj0rtawmjyWkjfJtkmz#+bi=UeX1|8BhX8 z)2Hu-S{G7I5WHm&?|ReXvr4!q=Xx@XK~YssK^sTh^~DwIlN$fYxqV&1m5bC@6|1qq z6B+>i9vK6G(aqK(ahJE!Y(m7W5nk5lVn(;SAL@GJ zRb7vibNx`)$UoI}8JCqTs`<#p9p{Em+i0oGJYP{rGwBx1_!}6?)c-O0~#gl=06S{{$tqe zf93wK&pv*?-4E#t_G`cY7j}QFO!;xL{d&A=Wn=tW_+=xfZ)az0VfeqPQ5nq$6Q+Uy z0+JvF0wVp-&i>&1FOQgx67>=R-L?H85lh~ets5WJ0+QSatSVDy?Nh)1W5L@r z!2$#}7A7u+s)+(PBFWrxCVl-37`stE8@7zi@vLEqj1Y$E4?_WTM;YJba63m|d_tK< zBmnNAA2WPVp?NR{&R;-~!wgSG?sKO!J%)@%874VZj5!=^Xo`~3{Wr>vcvO1n-V7_> zoaZ(2Hz=)PL1KcGq2%*cbp}kQhL!DK_I0CU`%-4>Gx6Ce6v)1$hkO-s&6K;$6o*7w zi(hYt=TM>ND4pDEa?=YK0$1YMn>^F}AV(}|e?b8CdY=CYfl^>xJ}t0d-e8jm*SXMZ zSof1Y%#IhTpq_$(Q*8t`5q^h%{h|yeAsNOefltPYJH#`&hJsN`*l{8!r9w&TiX9H2FqKouFS#nmFNyxc%A_J4aWfa#PJ9&_(q^?r~?_7t%ZaUOb2 z9b6p0A62;w0hKBrd5grX!3Rz$$1T?=prfxFR4;!{60fvbbb={f>4St=cbNTPAWo@h zbce407bX)ZD6p=yXO~{`N&)<;JTGL&XjSiSSyjzoDY~kI856=cpVkDq5$O>p$Eqpb z`!EQI1E2;WSQPZLK3>GKy%&N4HX0((%7IYthjx(lb+>jKe@GFLR^=f_y&iKI-?#>7m~ zu)hlSI1p-$E4vuy53YcTPBjb3qi$7X4{CdYm$X7A6*KsFvFoA+3c((b z9>{n{rJAr2YMN68FvcM$n2!gZlv)ER_;vN8o`Ly96?rX94Y3f=tCGBNAA!>rzN!my z!hBzJV1Cd`(FNUQ^t}@N0*~Tc8Sm*Mu0f{*q0>n!739^{l zW)9x(@d^wdU$^pu_Nu{=Kx)Z5+@g^~tx&hM8yWS-!m>k23Z_ujB6p0J%E2t)9H^FD$)oxT0QK17!+lUvOI^eCvn)9U+~&YFy- z(xG`I&#n3W#BL)0gs-?Xozl$49jZ?1DFGGQqG3$pYc`e9m;wxu*x4Oq0cx~y;^>(99hEjW&hlTO<@6`C%4^6AL zPXtz@4D&UUAG$`S@&cVtT1uyU2ZXCq$_;t^a9s`|Vz4LbuIp2h@mIuoC=)nWhn6|E z+gNl?A6=D{=FWp#o8fRwE$;6Qg?FU5=7kjM(vlh*ugB+bHO^O&h7KTy${*yW>Q^c5 z=1B_2O7DByac$$rT(`RS#r*}pqIx=(U)L(4oY5A4cBrcXJS~QYNsoo3-#cFHki)N9 zE=;+dkA*;!hHJQ5I4lfX)M;zDU#>ce&kAl%ksOm_#w)RSD?7vn+V&D46dw? z!!|D#3D^4r59z*xk7!qyuk+@tw7t$e$=}}GHq=TQrMcU@OLJ_i&gT9)W8;=yCD^3f zOzP;iaO+a_4m)A>Y9yukbiahxHPc-G;(oOKnMTFq$aiy~@-~6Up}CpoQH6hIU}biG zJI_B^s_xl#VFzM|+ruPaJ3r#3?PO!Ap2)?+`l%>+Hr7n~gm*EA*;E>3n)$JA>!|mD zl309hw!PVKx{W<1yzR?r-R3+Tnsb@k z8SlKthUD?_2#``|=IY$Jo}FKsQ0I2Bb$p3CGIpNQSoIxG`tImk0EDLc!w1JrQdeAy z~Xg$pm+jgnO4HlA(&{4?`*D!`e+aa8v+dcvZZVO!&M zng0@?!E|oOin$CR*igNsE|*4JEVbP*37|6w%fQ4^R;paZ=$Dm~p6AtP=s#FA8(&Z@%&2 zs5(_tC51r>s?l?`J~4qN0dIc%SvmI4vg7)3s9=ZJg4b;%ARyS^K7*aJnf_k}f2?e7 ziN%ia>@oQSG1L?x?2rHi8Jp`!lv^~d7#A%T_w_;Bp;dc^ma?2xU+ucx(To;a^eqw7 z)k)5UcWocz7#Hr+X2SZV|JvTy10QnC%{{X2z(IjriBX-$XPZfmo&q|7JU>cNUG)iI zUc9I0r3yOKd~{neSm3uR-A)z~Ja2snlH@)H6UNCwQYTINU=$pv$ZUO$uBj06fjFi+ z0`s8@;{Nu52>uPCfG5SJVwQjuOfti$#C8Q8(!kn`1chWCP6168oM`-fnGJ+yg+MW% z{?6Mq;5dD%Oh=U)Uk@OW>`ba2fka^9qF9pN6(PUJT?MH3NA`3VZe#LLOgzsM2YyeU zppRv$3fD)pIA%>oq=rW%UNN z2Nmv;7*N2E_#Aum9fn8rT1CnXc}=&R84FEooOvBTh)O7{VY0siNVZt75bBuT&MeRJW7cf-bKjNh9h!YDRdf=sYo zJB{8#_sCF_%6zoHs~YTV^@%8&L;5v|~^EqFAldSSj@%Jq(FgweY#Ri;&N7qBIp z!u03Lmg4leE*lJeB*PrOJkjgs)5k4`cCOlZt-b=gTR;V=&oKdAbI&_wBw!jeG*u;8 zjgv>v1&em^US9WZb^Ud8u2m<`{YdlU<=ku8$7j0v-<=%c!^eGldvaG-x-I~zbnS^x zfF$m1gIf66P1$GKI$r-{+<-KG9QiZ`k8AS-uciC;#pBih4vwRn7Jx@1*BPs!yW>T> zb%;?;|LTd(C+{8jKd)lPI?_jU(M2iW8ZG6 z#jcr~2hV=M@!8SRBJ>b^OL>DMK1O~4BN>~~ep5B`T}T{NuPLfDpa{;w$PSmm|u zodu)qweB6?&QgCN`ViDUc)oI}R1}-Yq8`^cC|+4E>%*j|`w}e%T?V!TX2lX*Gs?V& zTtMjqqU-hN^f0LC~1x*bx_U8JGbWrjh1o(BxKNwpyfVyN?D4Pdh`7*ruceiF{B38O@dyi zF9bCp-n1VrhmRbJXKHmNkfDj$z-uE684r+|2IN&CD7Oj0wSuA-{KmQ))77SlZOrH# ztMD3Q`ANpX4BVlQKp$=RG|8apsZf{q)Jh+97a$yuYZ2sNtG+I?y~Nt&exS45wIN6; z152%JcHA{8ZP(Z<-xSK8u-YoQ-Ud2)Kq!>!YT8U=RNkNd(4(($Td`fcOrbdiC|th< z_w}w<>U3mrs{e9Y+jR1|*~gL9sr=++&5G?v@oW_wP`cjdc++Hon(j*=6ypq=I%BJm z#H`o507BRTakgsm#!RNJt_kW+fVs35gLhX4#;c`4c>=UhU(8@0Vi}=N?qj9DY>E{m za;byq@)RyTw95xej5Hh^w*-cYht5Xrv7TMrZEKpcRPtL5lkZ7 zHKJ+a)yIn!0I$36^ZoHID{VXLW^Onyf#`SUo&g2$Semo@042}I=Y#7A!1LXqILM>S zS|MEec%sPbCRP?BF25Bxh#rLn34IVtGqXzV}lVD zoSY9+6viKo;9uqHCKdSc2s1aXB~3=lYQPYRJKM;ske(QsL%|>ug6T^Wl_VTrA!Q@G zb1-;H(llOF2n7-r2xE-cHwxpH2z01Ep$O|?yDfUfsDXjY+%rnZ1SpDkNWBwe__AO1 za6|NaRst{r2bFJ->q3h~GWVAKxO!8RT$0BE5X0rN$C!fbj?iu3#8I;4%0i{iOaky=j?#!H^x z+_~LKc)X3^mg6|Ydiib_E;ij~fJ3aa51nzT6BUXi>0l4|bmm{uHwU4Oth zINzwsU_)iAnSh{4_hrB>61r3x+!!<=w-Jg4g{@u4r?|Wzc$6^32a~iOVNlkd?9(7I z7iNjj%3WqW-|$^ZJx35QRxvUz%GA3jzb3_)2);t>13joR(-Pa=r%-mVv#+x_V`d}G zlV3~qk?+CRkDh#|%+d2cXKD-iP@VewD5yAS5@4=-#WLH3db6dP=9S*wlo-$6aGV+* za|lk3G{Ww*ypu0fD2~>!6poh{-a~4+SWNSGOSvhk-+_2?KE z)njNUkJg*_c*Z9Sux;(SWU24IY`C{%>QSPzG^FD5T6VI0(2gygXzTG0W~-2a+AXZ~ z3gfqce&icROA-&%FK=bk8tC~_5A_agz(0y3`#lm$qLiRdq?|(U9h$zBnrB-XN*q_U zgHm44X{q1Ba*1l(wLA4&TNy?u}Zr1u76MuLp0`q@_A{)6mrO z4!SI|S%~+Tr(F}0rKuNEzvyY1pRB|jW7-^Rq?$CZX4N@F4hYwJdY z?xDqNSZ1@m-i#4meCfzqm93~04U7)GC=6m+EHyCXNQi@$s(?zYO%*Mgc)aC~L|D#4 z*RNsiguugHy~SbEdpuX(8ig;biQMiMtoJ@VV~8pwb40#fnyY2CduOhkRHYv8w!ve2 z?2+<({@E?^VE@w~DFje%T0;{3O#iKY^tsQzn#wtnL!B(@@P`72*Gw1|jPg?Q`s);|cQQooBgnL?$bu3}=&=Z%qq;>DCfRrG@#yUPTrc zM$Vcleo9U^#$@G%?!i1u13AiM)rE=Vg{Zi9DhoMPOlX#c2 zAyWO}13@w1KY5YmzVAG_()&J^d?(3tQz{M^3PKR--=MNMv$Q>{*ra-}66wPPP0ZRG ze$VZ`fFpqb%PB>xRnGQl+1lkU3yl;9fo}|FaVlZN`vBCsZ-4s`6++F$ zfE{AE!rg)eZ0TGdESm2-7Tni!UFeA5 z^$ziW)`Y)(Dg7~rfAjM%7kmDeJRHJxe%XKhddvJO5efe-s$brIy8fvY|MG@U&vdIv z7ac;!dF!|%LcLN|YBxQxO}uQsqS!r9kz1W$DLhf`w51lce;(+BWH#H0XS-;?W`brv z>3v4Yy37>RTP$M;eG)j!-Q55-I+ft;B^Yb-0Khvl;8#kLHdt)mrz+mqXuf;SH}Cr->Q;4; zHPMYtn%LrJbR8l+#8XyC_2?G`lItmieP0Gsv6N$uILRWsi2DB6Ca3Og;YietpvVJG zAtm2|O-|F>!qKR&1UWka-DNz@&)C1;C;+Nc{XX@I;>_#qo&Sm=!{53mRT|YP)kO#M zY*7zMiA%PLdp*fjjH0%!m^H*jkAznAF8oHEK}z*(tva?3h!q- z!TeD9_tbVYsiq4UVczKJ%vM z5mR{Qrt8IAAd#m8hNr&hdG)kSRPA7y#4A=F!HYtk5WrK8JL?nA|FS;+IEGu=Xx05& zxG??y5*Nik!{t&uoAYns!u)@Mi&7P1ECQ7w ziI(Qi82GmR_}m22vteWq_;alI`wKaTj&&1xWfYE3EFPWb6 z_NNUTg~XbCKXC~W;lb$g==_BX`A=L}e&8~}#XJ&1&I`MDDq)XB9XmDe!(oZ}qML6F zg&Q#dAc%gX|NIz6+*2<*Bv?n$%#f`-ey=pmb105a=Wcj{d))qqUC)uEdN;S%3*a}e z%NoYNEo=W=(EjH_<$w5h9C7kP7TI(tD-ldDUM-eR*HHw~6z}E3ibzmJ)kY|6I=mD* zLXVk_0k=9N-4s(&0kAjcjeWa39qlgE(3}2NA61z7ZaVnD3w7ehDX=pGuCE6WF!?qp zI>Czj-?k!pm-X^`es}Fn7nBNQ`jCl47%Q&gnn%8o5~~cOEJ?v8ib-4PM?EI-$<_xM zRUR!*S7p~A$k<;MEW%URHS*!?ubRd0Xrryy;uFc(o;tWlN$=0fB$pXT-ZJemM!6TbVA?pF!T- zDayfzyacVG7w+EUo}))wQ~UnhK@bW_Jo-a&^_VCLH}f-iH>kRqSF zDnQ;nuB@&zp(mymwec)Flor{Jg;ApsY4;#Y>cJ^}(0F6 z!|G?y=!ft@A-84ATu1=s2{;`jU)<&kG44akF>IL)60-&Pzzq*H&Vx07D$_Ee4GlK2 zzl2(MEeFxw`)XXIgFr|g4#pGDL~B=r<+LQU$_Py!;7sruDTz`6;`OA1JUX2^Qy8W> z$31H=`A6a9>pYW+;q2l0a%-Uzx-lc-P@f!%d}zJ1I(rjpl~P3+FY1`+xBv|}WJ#xL zkU4VQiwfha1xW2x+wZdtIRZF{+24rWM23u-l0Z8zK38g*XS`X?rfYLcn|Emt(p>Rd zccE{DW-hygyq#E89?AZ+QeN2PJ5^p7F2w!t^}uBMvR%get|rtXe`x#IfJH?*i|#FY zXSw7Vg5bJNsi4*);XQq*;^j792u6|S?dztx=g~Rm@29z5iD6>->z2M~$DfYopTgq5 zjpo!;4NJ9!C_w;3;tT#BH(K%N6O$Q4ssrjI`~aw^L3I5a>WRAX=z{nA*0=3=!O=@u zCYFM(noT|1LmUCqvn*7r{+Bzq?dn>okEbTpt?Gal?pmdgshF9OyZeocovEd%mq*uU z3l8pulXzD2q2lY2gX8`3;^X~Oz|%u}>s{08W6M*E>ao-fvPGSxH1DZHefijE-EO+l z+|Y6H_3?qh3n|`Q^5M3{i`C`6nQOBOH7%TUQya%+j}BY2rsitOs@a%H93F1Mf!H_RRLlT-W$i z%;Du6uX~etmP8)8&e9I?ZYt%?)E+aq-OE zia77W^H@Fk%kXX8UY-Zei9zZU%i8%I0DO17^!w1xR+mlly|w#w#8Ak}t~<;Pd4saM zx<})pd%#q2;ayhJZTr)@)|}Q$L(}7xbG_$a8t!WR9C~}3migE%Ams^7>uv>ibWUlh z%Tv0H_LQ&A(=wqQ=lSLObL%>dUi)h6*ya8}z>GseLUR|`u2x<1^>w{DH%v3$CcN(B z1ICMIs4={5)2VK+Qr9^3muB?)Z||SFBA+KB0XI6dxQtw(n7F6gS|=Mv&rjTL`~X_V zAxBG=!*bH(u9>B!?Uk{-);8Aw_|uuE%hUGr0P!_P^Y+4KNZ$E%O)^b3=+t|7=c~ zpRBI9QvcbUMD2b%HxM$%qwdz?B>3qQZsz8-qzd5R9!yZs*)M!fNo=I0OiM;SR(Q|J zJ$I#KR_(PDmN}ao#i&W20t#yG#8<}L-4Zm7AI--ca)YBLOFx^xRiB2exvp3 zljE4z^0oKNkKV>F&iN%;4?mow-lX6Dv-vLLpUsp{yZ`9jIO(bRkKX^%%$)n8dfXnI zm1S1*@^#X)^yhO}7Cj~R+ZBIy$3AY)yV3%AX#sm_1AFPneVU7XHvQ?eYU0^c?4@?m z6ID=f!RY00dMf_;p~7yo@~^a%em;S7(KB_@Q{!h8M@BF9VlVc;{AWMSkw4ANJQtHu z42Hjak=}2IdklwvjD~-VkN98P|K6Z=($oFd1C3v<#a^y|Juv@ij`C@4?&ky3ZnVm; zw0;5Xy6E{&gS$SQSA#WQxHD0R?*+bp*6q*z0y3@uGCw~##G`%W@H-LgGfb!2k zgcm)tCp~q41!DXXCiW8cE0CNg*1v187LRT<2Hmjl|L1-s#a<+T`OSJ_C4XZ5mD->i zK+Y9F{%0Vhi=Hu)o^n3}Nill)zcN^BXEG&KaH~x?ZhJzQ6hd9C^^Y8J-sLcy>=21npdv%L^sh?x0ea9GEjW4 zIdY60GDzG1Y46J8q3qs1CQBI{}}P zmSxbx5F$%uFIzPevcKczd7A0*^z*#`y-R&Q_u=Dwzt=g}Irnw$bKmE>uH9zj1_$&t z)Lb>ds{91S*$&7-BM)>cTU=y80$Rz02KWO2I%X6zGl+iA2B1ev4W|VTItl>JK;bG- zvlKwWp$1-_24olj$Yn-7X9k%70R0PUt{1>f#{hsP6s`p|%K!lI2Hx`x$fp26eLqTf zKPYcgf}R>q4@@Hn01Tn(+oQ0{}DoQQ!B2);1*=sJR+|RfPb61r%-x zHG2jCq8oT)8<1@P-~kINoCTyo3-sZV8txJ}NEiS(K;e#1vtj^H+rV4bfE)$@!mKC> zRuCEh=wDWIy$o(T4gkEMaBrwt1pxTmz&q7|oCg4{tf($l(CnrJQ#G6^m_`%;1VG_8 zp=PxJU|%CIQzLQ@2p9)8lsg+p0St_TxtgmvSQQEYLZI;bP_sq=Ak)Yz*NEf-0Cemq zW_D000O+w)!&!oZ!~nn(C_Dmc_8I_OY2>wNM2Z1`Tz1rRcF_Ax3D#<^*5D>_0FVHM zCqm8I0YGpgZ%89j1pufYKIT3l8c(F3%E%d0AQf-CaBpc062!>6~rJT06;4Q z)dc}L0)QSjHJlrmMiu~cK;dtoW}g9oHiq{C2AKr_95_+#oS>>r37%@Mo?ulu0MHMG z4?xXk0RRHSdmV$U0swSeC}u7YJp-U6Z#A4ZIEdgvN4SB;pzv|186E&6VR%z8$Tt8W zmkafr3uFQS^slSAUI#bH1As43_*bae4*<}N;eCxkjspO7Zj>%JC~s4OpBl~&Orr<@ z7G0VbT|TaC0Nf@pMOWv!ukL%+gJmtKIK^&hL=Qd4j2FK}AEV6QnwWAG zEpx3gtdDr^V5jCj3YK-F;*`bzktyC+DE?`H-Tf3V*R|xx_wCe(|30F zl|RHMur}1~iA*-_`y@VrW31_uIy91$G3|+NHtot1{~Of$|9$wsas&O38tDW+8AUq4 zc)csZck)i8lTT0=kO^^k`Nxc|NC2kKYNSmQ6_-F2$6Z5FU_Y>E8;0*h0(S6$oT9p` z{{d%zGTNGFE)(hSHcb#<6eVX@B$^j(YZl3c$X++b|96Dk!=q+u`=O#|k5<|7&>NK1mZ--syZ%sn@r%F~>(zoJy7aBu6 zMWEAQSP5)V_(b$LA_52Ngkg2i)-e-*RW?MI-wB&=ti=rohr_&RBPJY^MoWzf2tOXd z4&EFqH9CrzWf8&-o@{n2HY5Ca4qZ<9+O1fNP~U(Q8e@&Z*&o4L_hYlWXIEW|eHX?( z7j5U#$HqIyTIWaY=DvL$UF9e&UHQJ)-%~y}GnBo$FjePMY-D=l`gg>O3Ihkid-jw$ zm&*5k*PT5T7o4&OBl}Tvse>`;wD#g5GpUJTw?nPXUAEml-nS;Z=@9OIJjXAsF&Se>5o!Q+QKs+NIo z=RXfIXH9-9A}74cpJ)Ha7ofnG!r#3BO^d!v2>(Dhz#`YVp4j1sls~IlL&i=$-It5< z3Hv^hSENd7BV?P&Ygb-fC1|UBGF{H9Gj>c;yK0aKyV;R<|Bc z1qp>~$IYis@ua($D?CIR)CkPm9 zE>A>tS%Tipu*pG2Yvy~Rdu!*Adxos=gvWe%_Dmj)*PNDM^ck1R@co*vEQ)gO$mtYE z`WA%+{}Hd#(WO)+XWVwTtl5>T!A>#j?x#`na%ZRB>3#g&!gHL}jl*f5Dm>RB#8w$` zc2*bWny`@xSinBj%;6C4PX zOM7&2*5@h(^|#XjePMJWw=YdQx#-SzC+U``+Al(n^*f729lZaj_Q%S&^`fiD@L-kh z5rJIpH$px}A%}I(o_QdRvq$tE5eZdF-6X9gBXFV~ z!B`NzYY8P0(4+BY*NA7BzjO9=wI*I0@!j+MwQFdz8(|vGwR83*CJFrv7gx;&cONgY z;FvAJb}L)gs#7SR=W7;*&#K};@L4!cDU2JAV}f&)H#c1TA!#(UP@K%2vsBwB1-n@j z$RVL#Kq(dc;bv?iewS=5rMEc<{hf7SS39{BT&}N-$rza~`O%gec4Xsn0x9^==%~}_ zIH|+-oE{$sN5dTXjqQw8KHqPT4t6|Zs3Me&qLtk%8};d;xmA6RY-u7-QcAF6n!d_P z7K*m)>?ibJwU(mVF??lDdf4{GY8?NhkhIL_)8qL5MlFbf;VA6j*P2}ky*0r@Y}AC+L#U2cR6AC|l*fT@+d8?v`G0PaR6>AY0L`vS7} zbwIN#QquXbOkx=5u#7029>yW<0@1>dyFj8K)D|4l+7PVXmzH3scL3k5cUGk%Tx_-&+!@__PdnQ% zLi%XvgFm{zv0|!DYId?2k>d5QTgy)oUeA~UGQLFyi*IkFTVoL zm(}_XD#$@yw{Eu5@lpG7f9cH?EZr<6zTAT?b~@QFAQ*uW z+AovvPNd@bhqfClSA6z1Tqqr@cxHLhq;1+kZ-y`Qf{GEk(Dk4vEHWYI%;UmyXcmt2 zf&Fm}gxCF(HO_3(?B`v};Ze*V!VbNi;vJSc+-D8Tk9l-6Jtu56vfomltMl0>qhYa& zuo*9>!;fby>jmJb$u#;Gxk51mPOjPodIFf$X&)ikt3CX@3g?qghMQlevo!8M%8Bn~ zmlLy9$i4RPPMqVJlHAx!K`@QUBq4(XGqG1%r;{ow%(L&Pp1GnI#>cV8-de$<@6n=! z#;9+`ndf_|(C_qTN6All!2KGWb}NQgT1;^tdZxMW0uRUQBZ~3jP%*Dl?!VpDAr-3Bar4*CuN%Y#c!lJA6qv1IQ&0}Ua zG>7d3rPAsfd|T&jyZ6^A2Z^3$UFp2b-7pl&AM0?$>2bHuW4>>%=|p%+^(;d`TJon4 z3r{6njK~lc(T|busb&yn=!&?Z?Zy)#XmYU_uE%|L`5EK8!d%Im-~dS~4d`C*3hm7T zx>v`WICcd{fj@>x=Rd&v_+8#RQVjK%I-e2}$ogDaxd&^doFZw{MY+gIdB;KPho88F zqebJY$JBg=3%YNvwGra!<`1`+wY^)uu73^FIy>(v=dVBP(o;?zICzn+Iy_V24Xo~k zgrh;jc;`t-PV&=mxu8_Z{x zaiM~KfO&=9*Tg`Ql8sR`2Kmjm-kW}QzsZ#q@%#5`N5UlE=UK03dsjzSa#d&6WL!h) zMx?r)7f^iM!kIaMYLU}fjMn8^dZI5bCKmN0TU#9G*qk4Gu3i1ig-@-g^S|za#N>GQ zKL0Qxv42{+@|9p)?`?6uxNkDnIYURQ*WbdrgA?#}t!LzDN1Le;f&*^j#fW}~RUbXrRBtGMCgLf75Gv9hEF+6Qeo$0d+lZ`?@{>I| z-%Bz(+Ji62;)QGKS(F^e>sbkY-6!8r%ipSWKP@l zjzZl&po>M-K0wweFp@c4UFW9yr3l9sWe?nNn07 z6pl<#G_Eu~_mMZ)+S7%*_`~T({qdbrBlyjb>OY?;Z@PRj&m$N>tA93tz-glYjscYV z#Q<(RQJ)W4aVpa_Jw6W-!$*T z?U#BNg&rCTxK@8jIa9wr=5|ZMESe1WV2Y^(B+OfgD$JT44~12O#|2!Eh}a# zlYh+%Fo1cnmx4D8V2;57&e$u$(}e^B82jX>0hICTdo%|7(*R!XWu2X7*)o7Pj#6XZ zDxS1V;CZSd`Q*I6>}p1zD)ye2J;v!BO8V`Bq+-_C2O5`r0V$VG^X3a&nW4G3{Japw zy!?Se)+LlO!2k}q^cad$yPlKG8FekF=687!8LKmFUS)-OJ{dA}^fX%v?b>II=I{`w zrswjx_lL9R4z~`c3!137W;d~%P4o#med+D`CBx*G6~?yn2J7qXI3H!r*w`p2-sP{YGuH-^})(NP~&aNj1l3j#t@HH0$-4 zWQBBFOg+ETjToA&C~%}zX9`15+}h1H$(&CuMOjUq!1`959Et4Mb$^1V(d}#ESMW%} z6XL$2jgx@rXO4qUPGlORS~OE}p}LN$WAd3RY68V|Ek*3nY-%eF zsq6^Fj!5+*pVE_$fv=itc~jA=UxeBBaXZKCnU7N*Vz;(?70uZ8Jx;vaIs5~ds}FkU zMH;!C0isQe>GpZU<5x;$BOWuA-L-3?ctyeaS`~C$hlP=4(g3~hb&Al#0vPAifZT_x zi{WET5&0IBDmln!6tDKU=e*|<#jnwxNXpo)tnQxCPB36Yj8{rzElMshG3y1Mj~kjy zCAR=EYgv=IP<@Ic&)a=Z02Cyqlny3iVm?8&*8>K4L zU-GKm_a-TVjw_|p(hw{qi;_LLtPwI;7}-Y=B&=jjD_TgY^*5{7UeBWH5KzyOQA8Qj zOOYx3sF%XyUs^>f>n{|7yw8;4h1yTEc(1)JJUP6ltCT|BIN;EseR>DA?}&RhC>C(8 z*W9}t7J0Fy*rUom*QRQ@8}mfE>#Xa3$>cDnr-Sd%MNzDiYL4Z(d-c4Md*|e)FCU_> z$Y3;?-!EuAd3{PG;rRN>ieu#(?%QzPB?@bJML|ex$ttt5qn8GEQ{*}Y>7k;Tkgp+< zggvzf!7=b3j>rM027hP&Huls+4}kDE&?gHaYsO~B0X|zkxZRQj4FoXCWLa(g&p0m(y>BLI+3lEwqe5i^l)zH3Y z&%^knIc-^pc42I8;lpM5td;YHkzbQya-i0(eMv9BInyPj61+dTM`z3@@+{jA{lVeANV^@qI5U`5)em5A(^wW$%y))VcK zqbAHcBJ;)G7iQ<4c9lFBxOX>o`qev|Mu{sAZ+6CVcaLzef0<7^-eK#9Vu_u2A#}J> z?|TqW*3}?goi4?AiM*E;Rh`3`YpcDuCXZPw?e~pVoM#!%WWE^@bqIMH)n_idztf%B z*tpF>#%pZtD0mgF8Y%UypU=OCx1vPaCgheQVP{R#kNevHR?*>g`elTfw!*d7)*qhX z5Js>srpu0+mwVItVq52<-SxlX4pnr{;@3W~VIF*%^E_-iU_Ic=H_0$`DSUWIK>wkJ zNy25wX)7-$?H6l3*l=`;EMeKhxfBR^5AJf`bFt1$9_-k6FeClVsW`qvv2Yvd-E{o6 zHxpwm*#@2;5s$jD|Pe3M=QIU`~6)#&zy{v+eiPUUeti@mWNFV z(*=&%=eCTVANfAt)MNTSt0W=~!rIpq4c&}I`h4UYq934bt8wG_>Pv$Lc`NL~(tSKP z!7?6;T;i*7OyR0Xi0hoG2pOJxG)q1x-jQoO6=44`>{I9NPnO9>i`}5wm(A?)0d0h> zw3R&Jz;IlLU*a;~Qu_##Vf;(%LYu&y|2G+r$^C73d<#_cwm=PM){b{0(skvN+nL(%#e z?si(zc?HENeAY}x%rLZ_M~K54YX+?00t!!kO7bRN+1cTZMV-u)ziZpe zZ?O#i*H8-Az1zwXB&J=yD32*mkIFs%GMwYgSehH`b9c0LfsC*b=Ok>zEwuC^1mwA9 z(t4XJWZ!VT6VT&g5b#{}o;sCBFD7DP=pKv;o?Iq8epaoGbjHTUV!xPHmUq;gsW2>C z9DM4RxMysnll5xP#zvf+f(!KXNt85gARFO4HyIhhF@h|0BksiZNdzf3lL-EjKyZ_I z(^cs2DeE?gH)3(kC=U|&|8x~1aBU>8+m`ERBT3WO5jT>PaL#&@Ys)?8KR52zuvxna zE70b@jm8-hJQV**52dF|pxba|`VZ|RP3}hAz64^rzf!&Zu8}``O`1%MnDq`}>HMpa zKU0hCjFvPR7BMY^5c}&VEm3N$-w|()_}}wH5i9i)A+#HiHHtvAku_>tb#6a(NJl4f zljz^g9@6|##2xMd@JkC&d5pg z_z;udq}!(D|El4n`FV)Bspz-i{#WfLO({XlozJul_f~?5o$17jBmz1yw=vSNEW~OP3~WUJQ4!F5QulM43fr=ByRL6K0qPA z694l1zp^i+@v%0AZ9cfP3j@NoiI(*{{rntP(x_F$%;Cp3nTcXp{f=^bm6NV$+F}6Z zpOJNTrfAZ*IwUP5rX!BB^SgF#cKz=$8i{~BA|B0QFYGb1+MEGA$2yA`AdE>YL0)vw~%>V!Z literal 0 HcmV?d00001