From ace49c4f539df68791dc6c6d634cde4b264505a4 Mon Sep 17 00:00:00 2001 From: LouisFaure Date: Wed, 23 Oct 2024 10:43:30 -0400 Subject: [PATCH] future proofing scFates --- requirements.txt | 4 ++-- scFates/datasets/test.h5ad | Bin 599886 -> 610046 bytes scFates/plot/features.py | 4 ++-- scFates/plot/matrix.py | 4 ++-- scFates/plot/slide_cors.py | 6 +++--- scFates/plot/trajectory.py | 2 +- scFates/plot/utils.py | 6 ++---- scFates/tests/test_w_plots.py | 15 +++++++++++---- scFates/tools/bifurcation_tools.py | 20 ++++++++++---------- scFates/tools/dendrogram.py | 4 ++-- scFates/tools/fit.py | 2 +- scFates/tools/graph_operations.py | 5 ++--- scFates/tools/linearity_deviation.py | 2 +- scFates/tools/pseudotime.py | 12 ++++++------ scFates/tools/root.py | 16 ++++++++-------- scFates/tools/utils.py | 4 ++-- 16 files changed, 55 insertions(+), 51 deletions(-) diff --git a/requirements.txt b/requirements.txt index 7e18a37..00ada45 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,7 +7,7 @@ scanpy>=1.7.0 leidenalg>=0.8.1 numpy<2.0 joblib>=0.17.0 -pandas<2.0 +pandas<=2.2.3 statsmodels>=0.11.1 matplotlib<3.9 plotly>=4.8.1 @@ -18,7 +18,7 @@ typing_extensions scikit-learn scikit-misc simpleppt>=1.1.3 -elpigraph-python==0.3.1 +elpigraph-python==0.3.2 networkx<3.0 igraph>=0.9.6 adjustText>=0.7.3 diff --git a/scFates/datasets/test.h5ad b/scFates/datasets/test.h5ad index 2b67bcb1fc8d5ebd6bbf2df070ab1d30a10c2f29..f4c14399b3ec3d41c413b84242c47451910da68e 100644 GIT binary patch delta 100412 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

0^rtV8c<)}i+_>(F~{#;Y@Q z>^*IuWAAC!vG+9V*n66F=snH7slYn)o<6Qa@3|QH8#?x$Hqf#6H1{WmI`*DEu0!u> z)}i+_>(G0eb?7}|$=}ei_q2hIy{B2n-qWmO?`hVd_cZI!dzy9VJ(G0eb?Chd&*i#jJ{@~c8|c`3nsw|w%{um;W*vG@ zvktARS%=outV8Qw$Tg>49a~o$=-9fNb!c79@`l~!=sL|hw610yT353Ut*cpw*3H#| zj;*Wt7-gVC>+0h=w610yT353Ut*cpw*41o=*3I?QK*!eA24-ws&v6}ES0C4*bv5hI zx|(%pUClbQu4Z>=U5r01=-9fN-LZAO$8~63eO!mu)vQD7YSy83HS5s2nq8rFW&CSF z$JW*CimmH&T!+@x$N!`*(xG+raUEJ$vktARSwidjt^YcHN6j92IT3q~Rhx}LlRfbO z;(^4M6AvQ3f_Shm%lSXVR{$py4<){m_$uOI#8(qvVo=4=28scm(lv#Mcww zKs?gRuKbNrUP1CVQi(?s-$*=$cr5Wv#N#|{uK#Hs!Mz{2nfMmsTZwNYzMc3E;yX3# z_5Us{nEQcr;=75*6W>ETf%snHi6(p2{|qw7B)*UMe&Pp+A0&Q=_+dAD*Z)amkVQP1 zcna}U;%UT>5Knh8#-Cp8vdLfu@uS55A%2YbapM0HKOrpRUl(8|8RQVpBF-g#l6W@p zQ^Ze${nr0HGI)mgS>or2=MXJT`}-E4 zfD9HAFCtdNuMjULewBC$_hBI!6cH~aUPio}cm?rm#JMX;C?;M-{5tV!;x)u;iQn+& zTw|TTV5}!DA>Kf|k$4kvDe;?rjQ)SiPcV!!;?2Zch_@1NBi>H@wlB;1zr$Am?<6iK z-bK8dxPo{O@jE^&`5W*02*Q=bdx_s8-bcKj_A~~D&m909}yoS zK1}?v$w!jRSLf>3Jo+uBIyR4H9h*n9j?JT4$L7(jWAkX%p?Ngx&^$-XagOaN3)L2qglu1(X3cwS7aL-Xk4?$A6Ke|q`FnDAQ* za9!fZ@}msjwL*4^zAV4i@MSx35OJ`ujDKB#5He^&97-%dAMwpFoH&BGDRCs&Z~bpZ z2IAZ|gD7GLaWruZaV&8Q{px((0xij)6>)3gIO2HXHpFd-+v!*5>jJbVgAT+Ui4%xB z5qBo;LflpQ-?xdo5no2!owx^aB5_aRUc|Y*NsyoZ`xdA#aX;cD;{L<~hzI&}u5r1) zU<@L@f_O0T5aMLwp~P4EG1~tsKfy4D5noMw4RH$baN=u;NBFYz|8>3szF$v#1Mx`W zQN*dlqls_yVaeYZ<0A-E)y0pASccH%pT?;K2dKz<47+lT)peu8)=aSrh;Vi|d^(0O|9 zf07Jl6F)`#G;tpBGsMplKPN1u&;^)72G0|}Ks=Xt9&tYLeBu|ue(V2BWUzqvWnw3B z0r5iOMZ}8N|5wOhG4ZR!ONa}Ji-?yJFXQ!pIT@@VevNn~aWU~K;@62+yGNmS46Gr8 zwZv}_uOnVhTtd8oICmonn}|z^-z0vExQuu+@fLs1HMaT-#x~;Z#BUStAl^w_PQ1&H z(f+&r1jDEx-b4Hj@w>#8#CwU~^JVG(eZB&|?CqNaAM1&55Ik9mLVZF?|0&mJC`DwX0#78}B-v2-55%2|{ht^7qHSO&m)GEr?qZw<2y$97h~a+(!QX*tY;}$)Fu^ zd*Tkn9f=c&I}vx5>kr=obRq6a+>Q7$;_k#fh!cr(dy>$LxHoYh;=aWFh?9u>`*W@_ zz+W&15?@X{i1-TP!Nfy|ll>U|Kh#e!j4O$+A|6J3HSsmXDa6BlSeke&Pp+A0&Q=_+jEn#91bL z*8j<5Fok$3@igK`h^G^06VGt7cm02q4E{s>81du8|0RBccqVaNkrFcxrx< zj?X53iuh^bJmP1BW&G;`JWB@85zirhp7;ggxy18`^TB@W|9modk@zLz1;j5CJBbU3 z7xMbQhzu0*E5wV5UnO2bTu5BR>;Fjr(QwwH$Ef&ocIgkFNwb*{+jrRht2iB#v{1b|D(jmh>sJWApVBmCjOTA4Dolw-xL2peAZ;o`d>!|=ZMb}|4953@z2D+5ZAleyZ--52EP&i zPW%V)pTvI=|4n?s#Tb8j`E4MBi^TsB8-f0pZWdxhqxZYC3m~=$%lOv?2qXhLaS(AZ zaR_k};!xr+u;2P0P6iRgO^G9kn-MoBjv{sh()E8d8N?9B61O03N!*IKHE~=Z+TZu` zJDv>M5Vs|6N8Fyc193;(#FL4q5KkqZM*IlzbT@m~|7w<4-TYGsz%_ zcos2F-A~f-*~Cu~KP@cdUl$;c44xr=miRg1ImFKszd$?}?6>~UBZGY6`NS_0zeK!% z_+?@zum1&Pu#k8Wu_Atjcro#-#7lVnFC>E^;-$pPh?f(uAbyQ_B@d!vGFV0YI`L}a zHN6H{2lT4CVSTZAIRV=aUJnF;`78m68}W}vzxu^|1V@v zPy8$KZ^XY7|3UmG@n0^+_|wbp-(+xsxPka0@jt|d-T&IsLTnY5@vjRIKn6DAKw>*_ z5OFYZ2yqjz-})a)24TeE#1X_zi6e=d5jVHf^?wu@IEbT(V~AskTM)M-Ze>UN`(FRI zCWAQQc;Yt1ZHe0vwAw-HCe;CldE0?nT_2xQ{>Q z8h!l*qaSe+aev|g!~=;hCm!U-=>IGH1iTH8cnEPa@lfI`iLW9a=F2HK|F8BHz}FC` z5DzE5R<)dCOHf%!cz3De8@va%NJ4xEI1h(A)Se`~vN+=#3tqE&6JC@W=$suMqn>yW zuLLcF=$z^ZQV-9uHM0acXU9gVm*&_Uh|U8SGk&umZh~`yBT5|?G3_L*Bcp><>k-yw zmQZJ(*cj)=sAh<>gx8JM{e+jAr>~a)Sk4uZQEJS$7Kf@AH+5a`y3>;9@xs!ks{DDp zd^GO`ygT*o)0P-ZGv~Ajhid-<%2!Ye=M_!ljlJnFz$jrZoGyF;?=X#aS|VfAj)zd* zq*JIw%Dt#Wtg8FV(#82j6U65E2X8(eIu|c{ZRuPP)5X~}w7GhAF5b-AS{2Q;b#Xox z8tFV98>G5Vwl=fI8?Kn;&i$cyYxsD)bvtn$Uc%efP)iY%&)Fg@(s?LCf+*zAL&^uj z@UHIlcvbPidGOv*)rhzaV%RdIEV&Pr?SvMNQ2}U7XK*+gxEBs&<)f}$aG-@+h_BAu z!tr|LeAJ|ys>+9lH89K`k4kh`@$zjEx8g^dMpxemKED% z85)Zg*c{INkP06}VXs8^c;wll8F&?HU34#A`aaBXMVWU#0CnC&u)0Roh}E`ckbnA46yD_9AYQ(J@y^jG!tKsdG-Kr5(u~n&TjWo~(700-Erj7?5YL{#i;Qa) zVx*-T>fjXg%>HP^Cs>3rFnzc^hz4sO>hmUs5G?x1JDp;0_$%=Buybs5 zlzOrhjb8jSPN~W}kaHIL9j`$C8E4??SMYxGDXRPxoQNsEz+lu_i^Nt4UksrDf^$q* zkQ%udqh-2E7qM2XF5D>NU@@vW!*GY7P8)&vE2kEty#H|yi-}QDui~uEtA~Sj4x1X& z(u(&Tzlw9~ah$nP>Z)WEsD1>3tUUWFqO(6?sQF{?GUSx&;N;U+;Uq`Zy(%RTq0)zWRU@_;P@S7XZEATFYoMx2 zf&DWou@Fb<#Y?n=MSRZLJ_0jgAtt?)B1~3W3Nf8Lud2i(I%ijnPf zu84N1X-hE`){1x}QrdDUk}p&xOOZV3PpCsek*`u!CsDmT5zgXNv@S+NjYPiHe_GIV z%TU%Os%RO~q@*It5*vo}`Ek~8gj%Q*HTy3l+$po@GL^g>LgimF+b>6Zu2A_RIR1u^ z|2Qg8m4WtIscJ;c_#5f)KJylcvXHm}LYbIlu0XogDo2Er*U*BSMOf?V(Bqlt&;k(~ zWSUy1;$MSR@dfy~s|V_r{u=66;vCitgYh*qwqpz$=Gt_e_#0KZnC7iS>;Lu|YEzMGTM4V`m2jAT*cPhBth9w$-cso+VOrY&uLUd7l$%wF2-(F*yWs{z&nYa%#DYMg z2#|RZM(giJ6}GF?Vi-AA!B>7V3b(^`9&ai}1_}Sb>cBN9U`;U!Sgz{CG+WfOOKf4P z_bOz&TP3f8S_#$pWK^Jfd=(~#Jt`mKLI>8Wtb5UX@pq#6-c>asX5f|EVb3D#y~rs> zUGqAk{77J#8X0l>RL<-0X0yO((xZ4~{O;HB%J}zHm8fZ=&Xb@;5vy$xYUgTHr^jkk zr&tceeHDN(1~`BK3|XsT?zkDfo|p&ojjQ40BULVHiWRnH_aOhnDtrxuGBNu!4de01 z%>j|ltD1+X8EX)fBw;Pu?dS!(u)he1fD9#KoxK(f)d`_^ET6k(%*eH9sJsC9bX<)9 zXzK$|lk~ONeN;npM&kVHoq*Xmf31W$c|%^NzE)nQek<}UdIK$cbS(;8qw3a*ZyVgq zd<6yW`3BTu&eA66>f11ODs3ph4 z2=Nm>S}nmxN?`h{DiJk%18nOgaA^Ek43poTD?($`M9ln%4kS57q4dccFq{5qs5Yr` zenWO`W#%HK+7Z!_}zfrvXp7o)7d)kjavBOY zg$-g-d=H%Te+y1ps?@h2RENV!-dm_$Yl~{L8fg+Dpj1Oa@P;}u$rfSAEvRl=m0Sj) zQiN;?xrNQ32x*&9-MwYlU3Ijmh;eX|(G*pU*^G=ksl?4NDHGv75xS@x5fUb%B%3#* zB;8b%2x*bq=#gQt}Hpk}s0xsp|#m=)ZIC~Lc8(dt*K;@gs+sH>X6^9Yp~3A2O;;3&KU zgzHt6SfoY6k!=SYja2bFAXGkpYMuLALWt~uqg0jO1nKINtzKI~eU?dkFQJVwF>JCsN<6O2jzrAt}o;6uAzn^;Vo7 z0|U@#vGB2T8sZv8HnWByY(r`}j2*kAexWEhwt6C@JdD(zmZM41RhqkGD&Q_BNZQ?wvGK5quaK;>(1=U_w!~PoENXNJ zn!qs`#a&o$iM39FVuO;>8u<>{jFt7D3R}2!nneu_gj^tUT&#q3+=G>Gx=P;zhqaLPPpS^>zo1^MPC=j8|_vrP+ci}BpCBF;RR*4}qfI5uo>7UFP|MmN=SeFulaDUJ7XLYwBdV<}5^t_V0iRb@ zBBY7X@GHE{Rq=Zv6pN7a9fW+9B|_4BXyW)kG2_IwLmwR6i@jXNbkx3lB__Iy60>80 z3V#ol1?`Y@_YLMiW z`%sUeKgkvDKGb8eO5F#wT5Q99#hx4+JrNQ*K*(5!^SsESdR~CLY*7;SV+bu%$@|5V z2zfsu%?gz-f}^9g*}_x|x|N9f4laHlb&7r;&9Djq-yxKBM2aC6jNa8MM+92}gn3gS ztW{Maq=|6053Z0SK0xW#A?Uj}a;ev1kf(oujw?arcc}FVsCM{iwBbeseTR_J35g58 z#rP@3n)3$6S@nk~LCFRb=`EH1Axshup!SPC#F*HOQ11}355S`8d30;thj6_Wq28h9 zb%v*;1DM~pThzG|sC~64GrOTN^ADhncc4+~ASZNzJmhDzK{?{Qi@z=?RMr~o-FIVN zI0ci+F6hsp>#%<9L5O#lBt3y{jb4XBy{l?O$mohRzpjR`S0x^VP$okBMRaJgT=(rm zkawuIZct0kqvz76VhJ8K6Qg-(CU&D~-B1Y3TP>^~TGYW!sCTg_DWX*2jFXnAm&CZB z2~lk_F;G8JR2T=pAO+qIUWiX2%fd9YSRfc+376<4=B7`eoEY*F?stbs4Lp- z7gf{)LakV&bjNNstT(>R?1XRGpUH_XL6zgXp$xyPhEL%uPmWi1gs(pl?Hxk>)9{u0 z7~1k;C-m3f2>A{*p%2V(vjnq!A`&+s?mN_MQHMx4#Kg~0ynhh<9cpDCRCX^)W3^b- z#W;)sM_(CdPInDqthf~@M`D6Cnw zesH+?3rsvAR<)r$Ql|AoO2lkzAzQOAk!Nu~RVpw1J3hk5A4*Td@u`KusmeGjw4$Gwe5Y8rIvOV_| zwwkfXA{<#1&yi+NltrRB8l|O5{TjygqGGQQYi(^+vqE8)FaYJxZ-Z04=4(_d9@TFH zx$FosERT^HpgoeeMW}ZquN;89hDc!boFiz{_6YS3HLV7=$t#dm6;yTC3)lspJtEgl za$s*ubbTj8dxvG&K&0;xiivD;4F-7^gnWl;yIiW&AG2yVt7_8=xfdKo`<&~G_UVq8 z?=UGAleD9#bs}QELr6LXi`S20%Ibxf?-25i*;=ZczF438papu1lR>E2@MAc4ux&dA zliESzq!&7-KSI4j$Uctph4(@E1|rnEIJp8zlDnZM$;VN@L8`6~dcHm%jaJ?pW`hyx z9cBrG;i&pJYB);1U660t@@+^zIKNVrCm~hkU|ftWTVS;#&Y0Y?v#Ps0qg0L|lC}rz zu0f!8ILi9Qo%&c!vm=TEe4s%;Fidc0S3UfWe zyhBJ!M*30TV73ZBiPoPf#}iND3bFPi()a9yMod*%Ct+DHhf?1_?Mh%NJ2_EPh9W&S zU6}1e9gAr1Pzyx8umMv=&Or44I7EAgS}W?z51@t*f_gJTzC+DEg=Rcei-x`xA>Sbs zzl;X!e+t6wi1rS_aT*r!SD?^$BHBBIgsb4F`V{&z9f7;VhX{oo<=XT#M#gyDVn-X= zzD2s4O~`MSs1wwwK~NpTP!B}slzm*doSGTKkl67pyk)Ay%ORABkRihTD(73cw_Po* z@*UQWx+_rd2NCTZYQY(}4?Kf%KCI%;Kq$T%>CQffwn#sNw#ZTqSHN4nsKtZOWm8m% z2r1VK%RV?l#bAmk0b26txN8It$03xPni23V|w-@4^F;6al#{yOn6+RC(Pq` z6zcl)?%B6zZ+x3cx=xToy0)KX>UevF>od^(58{QW{O@hCEuW<0Nv7RwRgS~CPnm}s zE9TRUWSeK|p{Bcu6S6b!pYq6q6DLe^DbF;L?pc35*Uolb0@Kf@WDjy0(9rbX^1|>Ds=4bkqJ` zV<8>T2^NvAGf<>!`&Ud|52|ryFE3VgGH6~k51aoOBl@_HFENG222-JVoX32TsW zmini=!ZSFQ`5*8MrsbsTdaY3LKiJw@UQ@|Gpc*SptHz33+=!P|rrua_UvDJcYJc53 z_Sg6y@KkRt>AKtAAYE5)9qHPBJ?UiJ6loO*h_B<-vm;aB@cGV}`Lsg`dUYt#o+I#H{QL zjI(VjSq^WfB8;1yeZP#tw^f!L-eDfb4^dp7VbiC(#^_E}B!|n*!|p#}GK`xtvt4Gp zRFxdwP0p{I^4Ns_FsM)sa(Itl~g)4Q*^d>mHg za;(5}toOh{Ndw$IKT+Z5W%=|TOX}0#)%u39G@>$gXq1s z$5b8E+~fa8>z%k%>%s3gr0dh=Bbjvb9-Qc!j{g3aeIM5r@j@f^4Sx3cd!61r-3cx>lHeb|1YUc?oEN!37E{+1)BdfO zvX{Tt3uq*P&D0~z6Jzp>tW4}36Q^VQIN=e)2>e$%_vYAssf^$w=wJ4IdJdJr8r(>N zkV_;mr$kqg)`XXq{%$F)ICIJWFQ^!(CIknjtEs_(fm?S42OhG?+vz;7C!CFT^<~+E z`?BoWeK{A5|9R5O{z?j{Uw62e>}7i6KfW8LrkV9D$!+ji9f_)3Ph3sYZ_sw7%*w?=-|Gw$p9z%j` z0DNn>6YSfhvIFpSunX*)!EV+5NMLNZ%-p&WYF$!k@xc)S(3Eig=846k;)VjmH$ zt#jbef+9#iw{R|K5vxWow&N0UuH}l>J;Nm{!??=zU;UpjdA+@w9UC|}TBcU*NUqSl z{<~@UX~@ltNLS*dBLIBTj=KN#@g$S2P9oQAUQeEq%B7lrNryxR-eA2DtCrUWI#4%H zv3wio*-JZ<%Q$~$7n;G@ykV*$rg3L;{G2t_1(s_(ixI3Q6x!pJ%TL-Z?5C4&q2%H( z(rlE<+0yie>y7z_nzq{B-KU$H=`7?D>k@4u7e<$;M%=@keY9`(aw+L`=E*~@B)xJI zo%M@W_4X`FtB@n|C-3+?ur<6z;P3b2<*2?ju6>TP^sBL4jp`a_$GRQeCf-~%b{-E5 z4!uecpNy!$1*P$!uA{(t4i~m_w~}#fCp(U+F~#=a%fig@WF9hje6?`-GmP4=tj#t!=m7(l->AMUap&Uvsk?k#`r`Hx*)x2f)RvqHxH)TGbiBmE% zr-SvTCUd%)|2>{}9bIPc8m|jkeB7O=!c6Esw+_#>q%NqiZ?!!cxZkn$Kw;o*L)GLW zd%J+7qk&sjSb`cX&UU!tbYG#pg_`$j;MG>!Np8U17(=w0jEecC!;_E)Kk*^<;CN@?9CFQ9KiZ?>r?J z|K9fU%u|Js^*m*hACE{u<@b5`_;~W2r;7YMd0Kv{+46bj`Qmbc|NOsNzEFNgg3kl4 z|LUyK@*{m_1y7-u`?O%O{5}JpseUPCnvU=-^eU^Gb}TSz#9UVh6l>j8s)n#`kn?Wk ze?div&-cEb?`rw^z|IRQ#&`sO!=^s^<@&ore`zOQwjMhd7}OoF@%G(7NfQLT*Uhe0 z)CT&szci;Vrrb00wt;79ky~b-rN!mwmT~`bJvAIL?ntSHjP3GR@(bwJM;z#GOfGz=#uCc4b%k2G2EB510 zewNuIJ$s95(JPBzw|7!omSK@P{W^BKr=P|jg37i)RnD?RMt)Y}_M|7^t*2YsH_h~{ zj9YfN4_BDA4>RUq4>Rm3JhQ{T*)dFaZyD<0dm-@_SW@carC{F+2e}s+W?ThdE1tFt z^b7~N`DhM@`z^cFv{&uXJ|}c1-xFGHwdrxNYpuJKe&ZlA;J($az0>G*_TcVI<#$8) z=*}Oy&dqn5^^bHNHH?@yTxljRL7LCr^iOlqQY6zF5@?>vR`evR{gZfuTlKwV7X!G_2ns*+^^K7vdhm8@#$<% z7oJjG=~=da_VeNy5^`J9V%Xe6;?Y={>noXdISg3@SQN!p!DTQ&(8uv>c5`D4rA z0DE*0zABma0*1!m`>Cx%*W25TyVU6=H&=B#c2(!s+S{sU|FPfHdPAH$x84%@*7NbS z#$dm8l{>NCcJ=g;+=%t_JuTqqsbH?KpC`FT>-FU6A-O}VduZuScMt8_<^I>FOun~( z2y<}D}?WW$fhq1jSebeoF~a+XI5q7gPj04_VuFd33@fS<*RE z?w#)1yn|i;PMYv|<|DWvF=Mjal`vG@>-Gt9JIEErRFo}dSLpMOyXZPG!e{=~?s90m zEhc}K;?`TZ&5WbwC4{!)8Lq3_F2xvNj%97gV_WZbZZW3@ZRgXU>Zd|`k#)c*vrV48 zK17YR2c^p-rNTOgG-)k2xaFhMUOU2F*!!*zDJ_l1AF&qNo2%eXAy);QZW^ett?`{2 zqvf%L9((er!rN7CwJc94#*Mx)#eyvK80-qdG0Ry4Ckq2`OrcU*jwWubawjzyl19R>Q za;UUTK@Bq61XKse806pZ8h)~75aHEY+c~p3LXY#*uxWO+X;TyDXV{lWgCU|a5 zoe*ufW>OO~4Fj7t5EWeQWlSO3XcR5_&3KO*onZ(z7}dlNf?6&Pj?5Vz9BDA-Obl+G zGbA`zS^qFaelj6=StHeIVEy2xoR+E{a-t(gB3+S-_C%}IU2p)pjjZ2bY5SnCoFRox za#lok?q9uk!8PLxFd9$XRy~yU^)<~@y{TzUY6d9dTea@L|fbEJF2telCvTDJ`;udbyJVpv2q z>;JzjXWg#W2FoXVcKx_cbskwiTvDYzoM8ALMzDKg^#tmTga7{-fm%D!(8KV@jvpr) z_C={<9fKm9r`1f#xyI_g?PG@yMLUZYwCHc1Q{AvW5AA2Gr`N2SQHC_FW_|kQov-G# zAMN?B>QoF?d9w|{j}57AMk`%XT`p&_D7{`|t@?oRwEo}XnwhGneczyZs`0@3O`Gxw zRz0Ub`ZI8FV|_l$sp>zULjpszhYhA3{a-hXHyBK6`5T72|EC$+QLWw>)GJ`;e1jTu z)EE)*zs|tmhC^x+6BUm0ExO^}8cbMLg}ZAoP6@Wtvzj)yIz2T>(p)uM^mfg(z1#1E zsToe`N#p-(IR8TxLxsBUsIlq)GXD1eTe9nhV^D@pK^^KRWL1we+~<Q$XiYX5sd;cDr|paI6HV6{6u(A<<$TYVfCy%m_K znw>COLj!83Oxnso)pkcv2V>kjs_mJ;Rt@!2K503Udq(f1yP9&`*kfW+aP`FNRsElu z5g+ zGMtCLTuOYD_*dd1#J>?AB6gd!48IN!Q^3!}zYu><`~&em;$q?wQ-=Q@@27wR#0QCg zB>suGfOs46_6!m`h(9I%jQDfnFNk*%7ZPXeBJm~hZsI+}UlD&zTtxhhKWAv)`U~wl z;=ROg6Td^8MVw7M-;Z(p7x)QHTS&Z!crkGfv6FZS@lsz#|C;g@;AOBwj_F zOT5~LrGIUWj}TrKO^#MFe0gn+U5hoLmBOXsYfp{X=Z~cFq0wxhVh$j6{{;$okvNrjI`K=yFB8uoekFs%tHiGnrxB+U&m`vdXL0## z60Z}#L7YiEhxkq6w}|KZbA~q0UucW)YR2~_bTM%bv6FZS@ls;t$2k9%`3X&1PP~G6 zCGjfaT;kQlYkXPG|FymXypH%?;`PKX;tj;_5pVQi>0jIABZM~-zfb%DaUO9#@fPB( zbzIfI_Fe~su` z5V4#1F!9gCzf>{ipT7M5N&!cRe5c|ML`Zf%qcv@5Gmg%ZV=&UkRYs|9?=xRpLL1uMvBRuM^)Oz8Qf0`z|(rQNZ8C z{}BI6TtQq(e2e(M3=$fxh6Z9IaR9N2IFLAqIHMkkVB-434Tu{OhY*Jnhxv1c*2rII z;lz!Jn-E73n~9qeH}hj0|K@%I@9z?~Aij;bC20uK>3pZcE&bxIM9j zxC3!VAC~^LPCi1oGjSK<+ljjp#}LO7cdO&7{TmO?OU>xyy;t9kPi61APMC_Q!UmrjU1xzD;miRg1=ZRk+evvp8?6>|;r+}A;UnZVG{0i}_#IF&j8EO4b zr+}Hn8N{=QXA{3p{04ER5&8E$@8?j!o5XJs%g2wt_2&`4P5cgV7Vl9u1bR?At>(J*zmx*X zh>sB;Cq6-ZlK2$y=_Q9vMZ z5OF=?VB-434Tu}^>;Di6z#otJ-C%?fHzE!vZcN;SI3t3DnYbx&GvemNk;E;CZ}aC2 zt);)vqKKo3TM@S=ZbRIbxSb#4{A=$gG|fWXfw&`aC*sb;U5Ib@WjX)5`U-FiaV&8+ z;_k#fh+K_it;BtZ`x4(l+>f|F@qjw6>R%gJC!~KZjyRrp5b;K)gqI&(e5f3FEMtl$PaN>K3N9e4t|08u#v;HR#ClZe$zK?h`@fhNW8P^G{!XCsBZdcrx)6 z;wOloBz}tcX6p%_ho%ki&nAAI*Z(&tAd`3w@teeN5zi%_NBlOQ7Vl6%7I8N5eBuSQ zyrbQRhH-(l=eJzfeBY_Sos%DZp^0&>tEPrwet~QRA0U2^_#t1GVJdSw04@>{r1Ro(hk@#`qNyHA~$;4BL zpQz)i{(T2Y0neCKrGKr_@1_@#M6mi zB7RwC{r-N2E^6-YUm<>#_%-4*;&kGf#FBT}f!g(d76r^Eex3LY;!NT>#BUP6Rn2wl z|6B@~NBlPNJH%PU*~IgS7gRCwpx<6Eq<}@li-~iHoy1Fsml7*sIS%>&mQlcR;uXXz ziB}Ql60as+1NK}0*HXYb;&+MH6T65v5Wh#fk=OrC6tJ22ec}&@^N90_w-9gT_5VW( z_=xyp;!lVRh_?}MC*Gl-hx#1&lmb2@{+##=;+@2W#Jh+yz9g}mcn|Sc#9tE^5r0Gc ztv_dI-}wt|FY))pKM?ODE+#G^-tWiA{{cUtX$OgaB>su`5V4#1F!9g6EXV&BUxDpk ziH{KfMtqdGl(>xem=8<;+HoHte1iBS@hRfd#2(@^#AoZcs(~6rhqoY zZHe0vwp=tLKk0u^NJeK%=Vmt8zzAWeegT4a%5b?vrj}Sjf{1|Z(ak39f z|JpboAv~UV0`WxR$B8EqJBTOOaaI4?lsX~(YflhAN&FP?)5OmZPbE&NWjX)wZ(6OW z=4XkYBYvLv1>zTpQ;DbRtgrts>Ea|d@b6{f8N{y;ze@ZXaT;-Y4cD&!@?}207b3ne z&7$(z#IF;-L7YiEr<&{5|2HY%E#kSv^N8Ojeup@VIJ=55|McZ|J_RfwUP!!%crkGf zv6Fa-u*`pb081%A5icWNPP~G6CGjfaT(IBzznTKp5U(X(NBl1FdSVyx244T)qkxUX zn}|0Pzfb%DaUO9#um4*pU@P&5#2*oVO#BIP0r56I&9+m(4&qOVKO_E}_zU8l#2JMo zb`gI`yqkCr@mIuO6Bqe&hW3rW(7q-9j(9Ke_ryOC?;|euW1N2_enQjs6CWTxNcVz18n`hQ&) zl1u!%L41?=FXF$6{~`XDxT1z@*Z)cixJCRQv1ar?<_2OTaR9NYn(Nm8Kne&Vu16e9 zT%WiBaYN#eD#rZNm)}qd2qSJp98TPrxCwCtu~}H=zdnGb6wr*gIdLR$3*y^|TM|cs z{nr0z3TQ>#nz#*dTjF-a?TIb?_q`n`pd)c7;?Bffh;JwEN*u$__ry{_H{$NZJ&1b} z_ag31Y|S9ihqy2C9mM^J`x6f!9!Q)KMWK zqcU#>gsb8#Q>5X9DqDrGG<_3>S7h%se zhO2^HW2E7%DiPrlVOkAwUPZ5lF#jFUSfxB+3|7gj(a=SeBG$GVVJ-=~qzXkiMOnl`bN+62sj7 zuCW=u{m8)DWzq*F$)vN}9*eP>o-23^g=RDPkSBFr@td5R|_jyAq-b z#X8p`*1I14g{e>%gy}ytzw3&jo=S8fEL{<&o-(|gj+<@jS%fr>_!NS5n{3ki%J(^--w2a zjcBNFBO2 zy>Eakt|~=% z>*MfuJ8o!Zcu*y7g|KWzMA~sgJgjm>q>3mO@u(^n;c0*@MxQV=HzozDZewt!CY~@f zQsxiQc?z^)oXY+XaSjoMA||LZ5$=Yl7JqJg?<9z`50B=PNT|mDp`c} z6NoGkFQ|MGnIcL>q^e30-Z06E2U&SZB^E$f3a~Hf9yB^b<%&oxK$T(-s=TVoMHERy z^ch5?srYRW=52_WdIk|QRkn!Ca5TE>3>uxK%0v`wGd59SXCYo!vD+amjU^vv(MG09 z7h&Iyh%FNFrYaHP+Kxsm&Z5z|DtZTmcRRXGJclZ8s}vEACXx>kS*lQka|fziI)^Ir zRp_S>9uY~q0~)ANpWO9R!g z3pk-IpTVTT7?!Er&k&OO8Aelb0gbFsJU8VwH;j9K!rLs!Y9zDyvnth|H#v zm5bQLwW>@+fkcG-j)-?v>=zKGFVJZ6?`XrN(nX{;LzOMRqsn`#M1<=LRH=|En^g2p z2(O5QOAzm?6cLW*l9fwnBTp5IaPCB-}81UDsdNtWf!WXT}G8pRjvqU3q+Ji#OJD9M3F>9T|vZ7 z75^oK`AdkYB6g{45e^YMMeJ5(A_~4lx1oQajjvSfZV1zE$%lv{l`bN+C3?vh@vSNm z;o6NhD*iwldsXxv2(MI0yo!h)REh}O9z?9Viil!WD8eb?l8F5(^eYIDh`2u?4yt4k z)~_J4MEs=kMYy8TZP}k_)U7H-xW7U#vDYAeR*7FjSiVM;v}>sHtI8FTDxz4#Z>n5` zrE5#bV1A>zD>{uaXA7DG?Gfi^Cx6cM&>(P*xSOR7+W^IKH8 zbOTi`tI+QtOzlu5{w5;+P{|^!-ytIFCL;b+`64n!l#1}GN)g_6n5W(T!oY5*#Jv!f zy@*Kr3lV>*ToKOpXtd-nH2RM!7g4kqBmMneBV9ixi<0mAeHB9i_=gh{1~u#3nO5u{2)xI|Ql2v*ViAiN?H{)K3u zQbgGHL97xHq6$S6bVM)Z|6=XjxexhnRg8Nz&pr$;z5+dmtK?z?**js6=T~5lo2Yyd znZ;1}7^JdAI1XV~3ngNRDicv~2nQ|9ggv=S#kwI( zZd6G!p^8nVi?EBx6ERGch;WIh5HVauABHgZK(~p3Xmo^15n(%wUUEews6r9W!>Dp8 z5LHI0(4QeZBI1G|Myq5I_MT`XI|xyH!ZypY;othzS$~XB zXZ0i?yBh&-*#|U-SA0yORe~eIP{V_tF^~VTx z)*mC(Sso*-xz1Geuj!8w>H+#=ggWbw5$dczMyRv?7@^MkV}v^Ej}hvO#|Uc%Am<5mcW0s3QvI_r-S>a0ITs576&0ks`ew{Id2)H$Q((i^0U8m>niOkAJ10dYg(5aQ4p z&d~QDi~<@FhZ8p@ZbBSEY$k46%^9_eO*0B;P8>MOu0#M6kMC4P?hdEys{U-V(=UrY57!qbUg zB7T{82JtJzuM)pj$5s7nX>~&S*V2h+66>Fl>2qWjmCq)Ao%oGfmh%t)GHXRO&mn%3 z_$}hO#Pf*XCVod}ef`hUMa}x3O+24?0r5iOMZ}AVb85JD{dZEp65^%Aig+3Ea^e-l zE33I~{a-}^xx}l9*ATBIUPt^c@%k#p{L?3qivl(fzel{0coXqv;`fO^5SIC`4-@ebloi9aL$ocIg<(|$bzJ1L-$co*@P#Jh?2 z5PwDdwf_yX}o zUzYR#cV7X%L|jgMnfMCvAH-LQ|MX$$U%TcbguTSqiEj|!B>s!|Z{mOIxT=5c-#Q`v zYZb(m#J7n5Bi87i(m-si<(l=san0Yd>DPfK#1X`1;-&1wd;Rd3TQ{%p4dX%fw&`aC*sc4T(|yrp@7?oyAsC`#}aoV z?oQmJiZTE6W8RYjdJ*>~wi5Rt?n`_JaX(?1|M~#>Q@{Y?fy8md@x+6O2NMqg`>p?X zQovorcN5!)hY}AXzK3|Y{@4C`2JWSR5yT^j6NnRuM-ksgJX-&2e|-RBC}1q{{ls?S z2Z$deeu(&C`DbR+AnAUDT}q%ZXPIuOwbYoJ+i#cufu0uK#N( zU>)(h#OsMbj;Bi>leb?g5o3fN5iKJf>{dBpj|TZp$-G3K9s?f;MhJ|g~@_!Hs+ z;%&s+iFXLg{MQHYDFu8+{5kO##5;)#iFXly3HDq6cT>O~;;)FmCN3iWhWK0J?|A*+ zO99^#|3JKtxR|(vct7z0UjGkLz>mZ~5g#IU6CWo2nfMpqYq4DUex-mT#J>?AB`zf{ zBR)o)ah${n;*-Ruh))xHh|dt8_2&%joWIb{6JH>{Nc=nTCE{}8%YKaW?~0$mH@y&F zCH|B68nKu7I`Iu(mh=CnuK@o={5SDG#Qzdk5LXi4@?q&;`_D%RYxHv3Kx`xqAT|*P z5(m|BRsUMOI#JbsFmZk22E+}CLx@9(!)m!^{clt&s@MN;;>N^Hh$D#2#7&8t>8!8+ z&2>?;{znqGAij;bC2pa*eJ;$FnPiLJzai2Dl5{MQF?2L<#a?oT{`cpz~caXj%L zu;2PWm;#0n-${HI@!iBW;-SRD`2GKTC}248y~HDkM-nFxClZh1_y6ysfYHQbh{qD& zPi!ZCfcU`-5)TnSO#BG(qr{I9C)Ke2MCmb8_4^GvXB;PSg7_ryDdN+_9^x~^XZ;!L zzrWDV6JH>{Nc=nTCE{}8%YKaW?~0$m`cHh7_)p?%#9rd-#5a6d&i|Xf0{j>8-^BkA z|4Up!TuFS(hoyh*KOZ5i1^Q1C1F?}ffY?MFNE}qhRsC!A>O@ul!Nm268xS`n4j~RD z4y$Fk|Hi*YwW6BCi5n9)A&ww66E`JprnCOEe{)^P{WktZ61O0}jkqOo6mc|hs~WC- z+P^ggv>|Rw+>W?Cv4yw;amQ+|d)mJf1#~9vLVP=MSK=7rSmJI~jQOWu3cFK458|H0 zy@-1gTZ#J+_Z61;uMgl33g}1NpLhWAK;k&!c;Z3es`XzVz+eg(LVPFjUBq`2+lYq} z4-2Gk`@4q%h7;dQJc4*6aRPB7@u)!LU*3M#GjJaTj3ypKJeK%=Vmt8z#1CeWc!>C6 z;zx)dC4P)Ji8z@!V;qU`#1n`o5euj7|af%<~ z_)qf_n)WR5bHvXRzd-yVaVqh2UzYR#C0_x4nRo{AE5xr7zeb!!obJQYzc$lH2=ky{}u|^O8g=5N5mf!e?nY9yiHi`Gs;LDBR)=ig7_ryDdN+_ z9)Hfz&iD)MEb%$w^TZd3FB1Pwe94b-{+0U)O}k8dh4>HRtHgg2UnBPVvYh|deFgXi z@lE2ti2o-3hxlLO3LlpKwMri$e2e%$VlBx3uGv6rBn}`p)p1q-T40@!{f|F@c`n1#BpH1^*^2h1`!V?9zuL4@m<7s z6WfC5_5V-`7)E>#@o?gMiANBRBu)rI{(WEnCsM#D;`@k46OSPtOME}EJ%hvp#19fb zMEo%EBgBsqKSrF9L?W4Z9PxPK3B(hLA19vV&l#G-Uuctwr_`|iDVbcLeg9$-A8`1w ze1Pj)j`z0x7;BjidSKehxrO@HzE!vZcHqD>$}Gh z#Af2AJ}muf&3uG#bK*$i7R0v^wfc-xIe~|h$o|ezX434fG3EbBz}tcY2s&yrxK^g@%O!UPa}So_&MU| ziC-XokvNq&V>*eKh+ih2LHr8wtHiGnr}=Y+mhLaKnZ%r-SyVoo_;unph%@~dtd2+7cfjyp&iGFC$(~ zyn=Wo@v1tm>R-#P6WG$U)x>Lv*AlNIewTPXv8$GA*8dH)A^=;O_8##@;!VVxiQgyw zfH+TQef`hZMa}xZg?KCRhr}Nde@y%daX}5&uK(L8U_0>+;!lY`BmSKD3*w#CT(|xg zQot_aFNt>(?;-w*_-o>#D#rZNm)~zF;9KJFi1!kIPy7S%KH_3wng99#N+@7I@d4t4 z#6J@MM0|+Y4fb3A4^zO;#J>>#N_>R)H{zqjrM&)^QNS_cro}GeA>=8sNKiZNC}tWu#BzyXa>&z%K;^ zYHGgdfr-S**u~E)n4bXU~?EO3V;??-0rsg@r8{&I%!=OyZkdVG%#%4Loppry6 zvk)~W%-B5VJXD@2*D>tjA7Li-YnaiT(=SAJ*R-?|#$?S#aEC?+o*RO%6K;fH#{i6H zx~N|fxHhbw`rtDJIgg`_@Fpg;7xi*FhvKV+5u+^g@inc@!ZCmup~!1E8nB+gemby~ zvll8$lxrZ`+!l^DBg61rx}wYr&}iAS$Zu$4?BtX1F^%CZC$UF^KE-cHjBjiV&G{5Q zO}sM>O>Ah4CW0F^QTrR?%Z!UoB2Ou2kf%y%;^9U}Zxd04@nH&Bo*_i@*T-HO9B^N;6&wEj)z-HMcRof7gsW**pkMHDgS_B5D;j zlv7mNN%Y^j3BH3@lqCn*+;YT(Y(m8~g|ePOKBhE9g7-pYiOM`<2wxo0K<#R349kg( zz!1cmok(bWt|YXXBoscT8N5UM1I;k*PodI86^Pm(D%gx~ZWiUa6Y0G!>S1$u&aCiy zs_SnEGM_{5!)}n2&Paq> z?na{}rAU3uc|;_Mv&&W{wsOuREKihYDSA2_i7XYLN86RMWmWi^@dL+kY`eF>k(k>I zv$F+aZ5Jf9ZLyc>Ezs4k@T;NxzCw_ZdO zlW#-lUZ^ZluAwqNp$sWG6PrbqvGiYH zGBmYXjH?`b8T%ae{#Z1IK3h|lMSII}Ks&ZVV{hOJ+DaO`j8UhyGDaHb;NmH!;9fMA zxC4#7rKw|LEV<|~xjx1k-5QtEc{#Jq&D7nkaXMMANHSaF>h%sToUIY-8iCr`6A)X7 zSYtLWoTA-V(9P7=NKR-QG_fFOPk1xcyA7Iftd_m`MzV<#m9-kXJF^X@m2)Io+Rz4V z=OC4B&`8lA=q>a@0M2-X8kZoIZK2Iq^~5K(g;q$VXou*8!?@HhM=Hg*6C_RZ&{eqv zu0%dXTN0rQEv5!)a64nDF&9Z~2W|foy_KgUI=daB*C4Z^ixP1>NBta7PnC&Yhs=uh zN_2c4v{Uqk4ygYLQYxnCy5#OBBxxJ6*%8L>!tof|5ivWENHLBZh;eqr6!{E^6yqL) z9PEDv&0p?_+4ThyDcW=s!|T%tV=h#=W3dq0Md0^M>Z|#k@XHln=9~Wra%hq)@oBWCI;ti9joG;W4z+68&D+vS*fOwEk@FipE4Ec0))*#;N)&$<{R zj3vmXSo0?Ad*XiVSLp4Sr3Z2*HpUu%yR7m5pjrFv=;%k}@^|g3b*uSt5NL+Rd8cVA{ zH+eC*vK2jqLB?CqY#9m+Cv(PxMl6lR{&*{-zhlV%>70*3%xX+5);L=wlJa45Bzm_b zIuK`RHBil-C!xj-hzp)z!{p-4Yhx-x>DqH zlc{?PW7=7cA2He04O5{Uw@)q9S!^n|)Cug4J-U)}wF&awUGn`O!qdudx0Ku+`M8Rt zcb9zRWA8Ue?6sV>;kdJsSkI$!B+lc4bsc%`A;WkK`MBH)`AF=6+BY$gp_e#}I7GOk zS=j@3dVeFuBIS2sE`5j#Wx0g@i!@6MmL#;9as>-ed{5{~ToZai+YQ*2IX$sL?c9nV zB+Bb4tA{~;Uf~=jm%*SeOO!boKQeXPWU8mS^}^8)FsMPjplwEUm30y4TA)GA7vmHY zauV~Qq!)UrXHdsPdqkUi;}U^u$2gov)&K|xgt4JP&Fqbk%m55zTW_R3)S&i@aZ8NJ zikLtk78RBemoiS~-d9a;m`?GB8(J(70^w5=X=%pxSO z1Cl4kDQ49sm`=!>7|V8yv1vc_+Qp!{^@FhnOU%cJ>59aODUz7-d`y;DBuX8KeE>c*&6_3Zh*j@ zM*<>^cOZLWGACm~uJ&Tl$Q^*H{gFM5kbne;^Vv80iyRGzE1F*I`HQMCQbJ@d8E_eu!fc8;4HrM&{z6Z6VO< z?;~(1GAE|s2~@=oR^a841m1)6iMD)!o)eu2ycg+ygNz=%O#M z$J^tv$BD?H7 zMrp<%RVjfFAcupY?S&Xj;UUb9QG?O-LrA3P%%?H*C4+IW9zhPp6f{DMp22AGF-$%& zwq0_F7hpe3Tuo6c>HtPI8;KL+6*E;{-Np{X$lgHqhDl@1pi_sT`8mj* z7^j#bF>fJpVmxAEenn&Rkh6PWtj%#nopKL4do{<=)K;TXXpq-;3iQX|p2YdHGLLAJycMWXfnIanMjC2$E+b}zKK1p?FX z!-qzNY>9D*Dea8|oqI0=mm_7O-Km%niR&?zl}MQw(`^VWK8Kx;AA!JJB7&{VG*CTHup=~WuHEBBrvjKS%;}nxsf!`@S zFcR0_jYyto)5~bFX#%G3W+X2G#u|lRxGBbYlahc2KR^P-W=0`h+axX@2^8af8Rz!= z%~-a!V!kE9SfXV&mZH;-kUTM|Vv?4@e1hbODH5~uLzr#I+b9@wE2*^=W(V>nCi4|p z{>t&&MY*FegwK#S(FGD1vkWK5Q^%NQKVCB=w{t>7yQ%xi=OK9!3uDN3i`z z1n1Akuzx`g#W>od!KsqxBS@c^0x_QZF}kD3oEVb@X4OH&lp%9=X-7=OVNAqqJDNX^ z%!zi1cH2?)Br+$)Yr(WTwj1M!eE@-{k-i6@GY?@L*&A^VrHej;9EvWOg;CFx*G>B$ zz>zzLM2hxwKpHaE;^lGlgNVL>3HTs%sv8L%^*y4eJ&5SvkxS8;9dT$v@oSI9a->m= zcQ%?0dI+ca6{PVY7~AWZ%?~_;19}x{6jN|mGLwf|*DwRc6m>#7u^V8nBYO|Sm^;Ii ztc1CV?1^!7#tu6l#t#3D?1}OIjCRgEjF$gJ_QaUFAjbL#Vk(inM_}w?^4^zu_Xzgq zKV(m|OSD@8@q1mD#dyV79)$@oszHy!*lveO6%%Mw^ToJ-MTgNpVBM%^RL8`4BnCff zhI#iGny+tE-5!Isc7=94hN=yXYNnV>F>%p&@v!SLBrw#d_KWtuiR9$}fXNt^1dSKE zt&*TEF^IM&p?+hdnkJ?|-nvP79tR*l31JaNwM%r71md*9YZ9s7)TqLeq0O<-wq(?A zZdBvMxQDEitBUm;iT-LsQX4HEJA;y&D?4v{X_! z4qdl4s@0-hqT^Db%S5+D9z~nqmOYYRS&bc!Gclg6I!$L^~jz;}PoY zjuwhgX6%G?iZQ)|*%Ow6y=*lBqwIooPJp(*gQ}A!V3b{vPBEE1P_ULdV!RR) zI1w@3k;I8GmY#^&ITxo=Pb5)Hs+a^hxq2giVv2fVZ`W+Xbg!IlN&`p55dHB<*3xF@&=c@*ujq9gNUq~~6wa59Xw4~#?1NTg6qrkG1d(RJZu^pS`> zigt@my96CN1+O~pQz?sZjk7Jnfbi>vScqYbW024(2u|%QZEQoH@$kY=)E-|Za;ic%YC-M5TSg_(rjKJ(fbMcXK1N{_wnS@k6 zg?L+kq%wUzMn3Z?Bz`jTDcUJI#RVh<*l{6`eT%7vk+t;~JQPq>6D%;Le6P@Xum$J_BPJ2on+l^E`4XCUqdX-tY|e z`$eQtOp(NRpTSPVT*O&~dtJQKsW6h{5KO_Bk;bWra>Sut^h+39?o^EJ6{Jygf#`U7 zGrnB(YsjT&Q#^E^6!emgT&BR-08T!b+3suWfP<1vYrD(5I&9B7O z?+qkz8jNj_?3TQEN}qtr|7sCT+~XS4R5K~6|ziBs2%<6H_E+ z)fr5ZB{;30hcVv?V|yNrDI`x!<|^#!lIM|*<;a_u0*Q$#!ZE%4JdWu~h;8K-D$Ko0uXohsCTz%EWl3)~Y5L)Ow`sMHt6wTp4ba;@&X*MT~v} zQYPAYHv$tLKqgB>Z^XP4ZCZmC^P6EXty8gPY)0Zzq3xn4r=p_|kT@}!Hq_r4gpTr& zI5BRU9Ifq`C|i-Z=`fa|h>6KZAIa0v$45w{N54Mb7Ab%2Nx<}^S%NTMY z^7k@~T}-IF0iFFan)?z-6kYVLBvAtQAcy-@UqD+t_&Op127a8=sz z3f8|8WKxXRg%$%}#fT0dldr;9Mxg4r0#r?Y6;*#kCPk-?Kp#nuV4(S;43F(eC%qf9z^GlV3yqqsXXe zQv#x`Y1pGOWHb%NE@tN(bd;Tjz~jiM=%S61(KL+zBr+<-D}iwa1jeQ#@H8@-4sA<> zPEALPXOK)WPBBqY2rQAnb4aFW(`K}o9gY!2&xF2!jLw9%jzaX**ASf|`gdehbf)N- zOE`7Pkx?;jF{TW3bOjmBfU(>s$&mLLlQU5DDl#fMRdn_zn8eqROfjDK(RKNk=;Kxf za&#TZoCR$jjliL^u#Y#9Ofe2IOT_$*Jc=n8jb1&o(CfcQp%~K`80&19N~CZ$OllsQ z&;1z(dPM>$t|%3sA?zcqGRB24d<5sBUk-*tek5$!}n&4Fl9nF`4%xra)ps1Jr&o zZZW1zm_`ArRVIwZju9m9mXu{;V2uORG|{Pc1iBGwm%t2!<1Jo@srUzjv)*}D$Z=%=e05$4O zXnU1zi56Q2sMTUz4`RoEeiJ+17AX_seGmiAZ;1q#CXIM{(yaro{L_)AaQe{tq-H>R9RNLB5`6e#T3j%W3fn_7`K=T zS!lZ>ar0m-kKp~~hvym1#-7NTnAArQ_>cOz$6Ft#LVR?f@xECdck;zT<|7iFRUdyqIW z9x>)@n0t}4Y#95exQchnkjq{+s*XhBL}w-=us{M6kvK8#WaK>kDuy05A7i`^*_#h- z8Hd1%4d^;~KI)G_3Pn3V!x%TrM|$o@3dIyjpm#o6d;lq20An5xV_N|85K<_{F&=$H zhvO{DU4X_OK^{fBKgSribimsfk0Fm@OcM~;XCdwbVJsgifJ2d<1D88uKb}SQ zau8*igtDZno0lB)@;tI9I#skQ2fe(A?1?Fwgz;s!!!e(Z>^Wh~4#eP(A@G{SiK;In zg`yn}S&JUQ@yr$d3Q{P#K%()d1^5UA+VGl6+>Ps#X)>&J3HnLLOk9FEyO>Nd8OWa) zmzbU1Fs)}}{)zF5N&6OU#V$n`Zy<$Bp&fgW-uUY{Dbq#IK^{drry#mG1koj;-$Eiq zd!}HAVgqrgqZRZ#WK%&~pFlJc5@~z~i4>Fh1OjtEMqr@?W@9>vc8e}wgl5B*;b<>F zLYF~Xo|gB}nLUX!BFhw&kd*kV`R+ zr_e|8GMSFc5x5+=6kQ;JSl4k&xEx)t#GDjudK%ig0`+r|%oQ+pF_~i4AemxZPviCF z0t4O%FI#~Y*CC^#y%HGG9eceV$y^Czdq(#9Eu8x4D-pN>$rSB;27$Phjx=sW9>sXX zb!&CMK;4dIVXF)5| zUVJ(cgLmzf1uqBGq!%y%`(EU(9B;m<)D*=c(b39euo`bfe1C(0u(rajhz+#k?@=~)EhdWhFIKcK)P zTXu0F`>>Vy14h+nAF8>;C5dxOT+DPd>J^tK&aw|~XCE2Hb8r>nQpJTFLr1a2=*TGr z3B@SbDO;(s<&mvbvSlttFy1W1)RkcC^C-9^1&(5jAlWUGw*&>5QV>^yf&!^AwKr;{ zNP$}lvZTONA_e#aLs?#cD-~xKXWEagRBIRSNL4-^lonC~!(a!jGs?bP#ve-M8YsmUJobNI~9E)G+@jP2t@#Wqk?mk_0=% z;RO+nzPPxb;0nZ*&Xp_gPXVFI{SrpMAD?h4(@!`&g=g?mVAoIBU(3tLWZ6&1r2Qw< zSS4>=g&snesV}3cm_umFB?WfbDw5#zLy~rJAw6-LZ#jfk%rg*NEFrc-X#To{IK)M{ z;hcvMjJbiUu^TNH%#bc$!HMIMf~xf~R|-t8pvF$AVRfUG{Kl9=Z<54 zx{Q8JM)fMjC-=3={4?URHX zlT>L{U2&#g;GDRZR+coxm5Q^AGvPBIl`2j?{ZTG)cG)TtmnK_YakVdVlsO#*#ZqAV z6$M_|a)^tTK{FGB-f zaV~M@*WpUU*~;L&;vBD|y)?P#JH@RUkB$qaS|7tK=bJj;hcWYS6rTKSv+tttI?ahb)anXP_Qaa_Du@Xl28zP2CX=yAOUZcsUi=W zpMC}%d8&fNna?1&_I(9qeH+1e;~%+~f>nWNCHgE{$$T3L8*~;2sz3^|B9ND7&q~_g zHa1oBp2V$?=`0Eg@W!pOyn|LsWy^jRT?U>*m#N}n&cV4P&MsR;;?iWxD{*))xxU(R zPOi^cD8L7_NcK4d<9!DVC<`NKbsi&dii;bA;KcKi=Pcwef3{o+tAg>-h%#kMp792Z zvYtoF^5R9=v(YH7yO`eR(Lix5F0}C%B+n9@d;!63DF`W$mmL={46oG4lNy!_C@7Uf zD{m+%+k6yMNI|L;$h(@#DQ?vr*eVi-Tc!qT=0&vPnUCgkFQR$#MHD2oKr1B|(XVv@ zYFxUARvc1b{#}M9E>5-z#3i*uE7N{QD{d*sk^eYRqb^s_rBhtO6}Y0ys2kN4LrcGcp?RcWl@yq- zpn=>OID1N@!0JT7B`I)7LDN6bN2U|K#miQnlBpqLhUQ&TkR%1}KQa0_*U*$#T%I_~H3Yk5%eD-zLbg)HS-jYCic65KqHCyI zeh!}vrF$jWQm{%2%w7anbVo||doc{_aui&W0*6jy$`UMZ7by2~>`bs3Mut-=SF9-)&0NCO*Wgj*BJ3h!e#32R?B57GtK$EL zE&2TaC)*fAIS5lBxO)b?0h%t+^eqHBSN%_f6@G3DzpMNRjjQ7VgIOP5uSgM%B2|Xe>F<)W~QJto~@kEwS=3t)Z_flrYQtl4bemu@Z5H zekwEwHuZgk+2qr$0fE(@(iOdr_i&d5naqYbl`kRY4-n!(h+&Yb6pv6 z-GVSv0}NoSif#arDWW(Kb2qsG25wg=V!idz--ZV0??F{4!m<@%PJEVWcvyutgh<_r z=5wFI1btK`izup!z`NsyB$Y41{2{7DNtJP`QbcA$G};FrCL1QG#1II#h~xq}On4P# zcwFU*HGPD7ZoGwVaHw(-b`eQ?WnP71h*MO2D6Ff>_JvIs`=rViYYvq}h2o9Orvs}$ z_H~FUyoGZ$It+1BRcsjIoFC()Ufl>?PYXldr>S(Yo{!N}8b1CtJf})T*uzX_72F61 z{sk4?2qN*YfrcgtwN)hV~Lm!nZ&{}>Y^zo7^6l-gQzhb)4$kfa*LxqMz zq!yrZ0p5KvysDB#6p3(#V^`Buz6kR+2#<)Fs#1hw8^(D#%h=2?OC>gjaEGI-z~_+n z*Hx|v({@yesl;WytTFn|ROMprVyoU@e>1T9FN%vA%NXTOKD`Oz=Bn%_i1SKZ)M=bP z`ut~wjH>(H;*tiHDsyS2#A6vs606Whi<+~7vb3!;FCF%Czl z8O<+N(Pr38u{-4thQ^uEyi=u!b&Cyo8F^T$3Psq=X#Tnx%`a1-O(9Z0Lj=}O-0U^Q z3A_U5VO!jW$>;v6NXpVWW5(v9%&YsEGXaaTdjI}2!^{ZE;KInF;5zQ& zid%_gQCW#uQCW#gVOoiqVylQ1W{a3K=&=-Y!ChPmvqfAIO-mFL(^Om%mr6_xZ4-UJ z_skra`M%Zvz256TzpJ0~`9AkK=RV7G&Y5|JbC=b}7vjC;U2quQCCfYaZ%*REU^!nU zguyajRQV3tv{2=U;0#0QY4|CGDOZ(?koYAmoZ*-NmRLQ%$jB8XcpSD1yXDs;1{*=}Z=-TSFAMMI|(ZN&aS} z>5b=Grms|v2+oEW(%(0P2ZgF!gv2dK(jp2;cBr^02)SF3WYsD3PFfTS->EW1bwo)M zSN;Cw8>_l7AN?s0^;G;;qzHZ!h3r-_vesp9MV<+=Yfgzq=kLMn?S8Ph6@zj^GzMj{ zDiXWIXp3Xk68xEoJQ^~6r=lA{%=ijz6mkQ<+7>#;_}Eg!x%DMxjSlo(QpxkuVw$=2Y)O@wzERRIvcc69Z<57+2yozatl-WCw()~?ZN;A~>f=Uy$Ow0jJidrgW7F8~4;y1{%C7yA~W~?QIToH!c zfwI$DqU=DM=b4_PrL-F!V#;nz?Bc&gb~&%3D#0qI6@>hjC~%Ve1;dzDs7i=R6SYjt z*0(~sI;u#7*xm5f(i$CAPer$ekRd{%2o9AZLPaZN)Zr?Y@VwS=G)xtU>MVj;a9IFu z&DOXzBb2=j)YKwm-$I@PHn4e~y_dCyqj@vY8uQw~jVP5Tc8)!;JKY9uU{5AO@*ZT@ zUWQl`mCzPKNgJe_(iRrYRE`Liy<#x|8I`t$8%|X&YNDv})Je8u?I7gtMa~o2Azf>g zDME!<^q+-ZZ)@{B{fsa6Zl2`Pr0m4n!z>%3=cBAV)spR)sAa`SoR0@avKy*liRyVpU3vl-eE(>xuWx4%v!{5Fdm3T#3Oz?`iWqSxfy+ zT*s3^(@iR=1564NZqAq9*T$yXAAx-M6ZQju7(q zBXNd21G^1FM4nk%N?;NbjD)2fkzKqh7rVp~*v&nJnSO3Z`7LQD+~2vPU0Z=B>St5O z)+23&q|MAh_SlbgLbCV+5YlR(^&54@SnrR&_x%KR*&;{h!ft>{>kPZH19_Ini2e+deBz@|3kNrQ>fUcT)}>H_ByRZ176E)g}i3!3C%RUm@%AcW)` zBpd|KRw7~QL6mq0{>(x4WnE!XC_?E%R5Pb5avH4iM0FfO!rg~W?#-D9$s)MF$#nl> zcNi+L9NFa`Lh8)Fu#3!$g~LzSJb&b3`2p5Z@?+Oz^p^YxGc^|dm+}_+?-KJT`Zquw|w`ta~+cfLg zZJN^`CXaROHf^9|w`ta~+cfLgZJKrLHqAPAo8~0{^3shV{(>=-co?yc*{CzrF&j1O zn2nls%tp=Ln2m;qade7~*{BV4%tp;RW}{{uvr)5-*{E5^Y}Bk{Hfr|7Y&1L$$k91E zW}`OHF&i~^rWWWztYbE6dmXb;vyR!Q*&VYHp;3^ z=F>47wSkV=s9DEs)U0DRYSu9uHShJFZlhU;WY(-hGDoF*r(PYCSsUn>%$jvfX3aV# zvt}KWS@S`1K!;@3*L6tdbS>zZ%$jvfX3aV#vt}KWS+kDGtob-OphGh2>vBXq#z4CF zJ~Rv+lUW<+n9Q1WOlHkGCbMQ8lUcJ4$*ft2WY+8n$&B%*1s#)FvyREES;u77tYb23 z)-jni|4J>OLo(~@?vTtf{p>v zCbKrsF_|^%n9Q1WOlHkGCbQ-n)B;A;ZRfe`OuYV^$smB(LTn|r5!WCNBo5;Bza|;f zA`T|D6YH4Fx&>;}^*Y3LdHt_P2BE|b;`+ooCbM=RoUTU@r$>^|fVd%X6tRxUtP9jJ znKd^i`zHRJZZ!25j5aiA+7h=TZciLT+<~~GALIV(o65mFAJ8?Ym9mIDM-&M`-@{NAgf|PIE zO?(gWy~O>A6Nm>8-&e)n^?zWM;F+23Cw_qVLE=Q>hln30enhig{|9NoyB~Oz_%Y(g zi3bxW5f33A>gB5Se;64ICw_wXN#bPU5yVdskMwZ$`ag;co+f^V_*vr7#3{sMh@W#a z#-E<4#*)GF#N&v^6Q>eSAbx@PMPV8L+JTqI;AP@hh+ie1NSsDIi8vkXxBgEigV%^( zCw_xCgLn$@o5WL1*#CJy2)OV2x5(ga;&+JOC7wo{Nj#nSJrmmB*MS*ikVX7Hv5PpH zcqZ{IVkLdx>%eT{4~Rb`oBwj_FN4(mP(f@1w1jATMypH%|;!lY4iPsZ<>dSKfZ}1hspAmmf`~~rs#2bkV zh&TDLly7YI5rnr8ZzcYUcpGsc@pj@J)$A_c__|t<@{OIuyNJIb{+4(*aS`zzFJFuG z9-Xd(I_VRP5!A_jTWZ!Zoiyv1PMUR0C(SyhlV%;$NwbdWbWIzGcObxbGCI;N9m9n(p(j_Fi&bh-}eqzw|u0UgsxU)M36H0zj7nsrPk%{r!&W^YWV z>Z8+jP$zAmV>)TpF`YE)m`<8?Oef7crjuqJ(@C=@rW3}W7IaW2%{r!&W*yT>vySPc zmv4+Izo{IbYy4Oa<@cTHWvA)4{#(faJ>Zw125}&95OGc7TExL%zxCfv1|h_?iR%#8 zC6?Oy);N^dA>aS_8q_C)Fye6H2;xZM2E+}CqvZQfUk9Sepb>Fn;wHpRiJK8OCw9vG z=j%WV;+Dj%h+7l4A#O|DjySzN2{FVSh&vK@BJNDwg}AFfryH^Ug3*n*J8=)be!l?)~jzd-yV@k_)n6Td?Is+%$X^!h!K4AO`v5zEl^y-g<* zzefBz@f*UDiFP1^45kpjNj#PKE#kL{-ywb%?6>|;BZExh>BR35&mhhsexKOI>wh*G z%p{>cYh5e?a^p@f=?N=aNAV@jT*>i02b8AYMqkhzC(F87wAVLcElC8S!%B6~yT) zNmxakN4%PN4e?syb;KY0bGq?~zhLAOuP6SLcmwfg#Gey?;m2tIFZ~3=*hpMJyoq=- z@fPB(#9#Tc^#3+r0q+Zmw-fIm{+f6v@h;+Td|1jizV#7=cM}&8?;+kxTui)=_`7O$ zmv8K^7Vyq6N{9~-e@}dn_z>|A#D}ZcyZ#@k5-fO!Xx7A~#K(w_6Q3YHN&KT`z5bul zf_MEdBR)-hhWIS;IpUv)fA(_K`u__VoF^_PzCipd@kQcG#Fsr>z5f431{K6th_4d= zPW%V)pTvK;8RJhczkid#HR4L*>%=#R4U_-=z(i~omhrD02p|Isv6a|HT!T1}IEc6= z*l+!>MFzpdcH$7?+QfB;>k`-F@Bc%|z(HJ}IE*-)ID$BmxB-9v-;fNVh@*)c5jQ4o zLfn+N8GrxZoD7`AEr?qZw<2!sW&NeqiU7}`)SSMOgjK|O#H)$d5U(X(NBprrWBvCR zjC|tt#GevxApVT_bK)=j828_oegf8i;sWAL#G8q?5N{>^%9rK--{vcT3yHTA?;!q~ zcqj2L;%|Id$~V6C5rlUW7ZL9v-b-9eypQ<1YIc`z?5`H2e4~W;0P*+42Z;|6|3G}W zioM_eAE^@X2Ct*UrNqaGj}xCDK1uweX8ryDDJ^(Ir zU&!D*aXIk?;$Mj`5?>;|?BVL~|9>Nc3gRooSBZZo{)6~W;=kOC@u#Q4zscYlaV7C} z;v2*UwvzQQmUR9mVzaP}e{B#z1{Pu~v5mL}aUgLJaZRv${nrlEB72jffi)Hz96H+)O@y_&U&> z*h$=ixFvBb;?~4%h|}AW(2lr0aSU+>;*P|fh&%gpy3xg7FuD@Q5_co+PTYgICvh)7 zM*rXBCm6=f#J!2*i2D%VLVPQ6UtgB{|2AI%d^>SG@g2l>65mDKkN9pMmhz2zd<5Zp ziTe{L5Dy@}k9Z*Q{nhL)-*})}kn)WOi4%z*B7T_o5#m9_k5;jF{eP@Vz$A{>F&fBc4ReQ~PAP{+h6if9=5Q zWbg)Y2JsZ)H;JbbzeW5u*l+!RhYa2&o<^KWJe~MG;u*wQy#BvW1}@@k;+e#=h!yc{ z;tzQJ|Bwvk5YHvfA)ZJ45%GND1w2R=lEEV4T;j#VONf^eFC$K0PQnV}mBg!v^N3dy zuOVLR&*{cGf5G^e_!HuM;`PLz5^o^>%#U&ZeeNe1#uvn25^p3fAl^j0nRtsY%l*IA zR{(!Syp6b!csub9;;)H!`mmI5?D7$WzajpXcsFqo@gCy6#KqO@F5lQ!ElByscf|XN zONb8;e@}dn_)ryl*Z&`?1kd_^nD_|sQQ}hKW5maaPiWTb|4A))*Z&`hPZ5_9pC&#- ze3tl}m#fzQpUB{6;$Mi*6PFWTApVv3qKB*3|4U?WnfN#23gRooSBZZo{=>}}e|q`- zlMMbM{+sw3aV7C};v2+MX|AWY&CUGs|U}8IQ z2yt!VI#&ApUzZH(5r+~xi0c!F5r-2;SkeE!O&&=G4Tu{OM-fL8HzICK+$5cZro_#N zn-e>UTM)M-Zbh8lnuIpQZHe0vwzf0Xz!;>U>x z6DJW5As(t(um8ie;9dWR6F))xBylqF2;!%RM|!zx{U1dJPZK{w{4DWk;uPXB#Ls!S zdi@_u2G0|ZBOXtjN<4x11>zUojPa+J+n31TW#U(eUnQPMoJKr}*gf^j_}30hCWF_A zUnhQpID>c!@ted`!G7!iTV(Jy@jJxt5>F$}B%V(E9=Mc{${)pHA`DCzwcp>p3;#}gz#7l_Nmy)oIcscP3;+4d!i1Ub7 z`*XUn#$Pbj60alvnD`UoeB$-QpZYQGzYTr@{``*kbK)??q` z5N{>^ig+7wA@O$N9X>4O8(;ef!aIp~5r0GcE%9#RBH}&O>@MHfTP;ZWMlta|;_ry} z6PFMlApX9Jz3czMD#5e-Xf|5-9PNBk4<&&0nFpC>LSzTn~N_5W8gxJZ17_%iWt#1+I>h_AXC<4-TYzmvfq z#D5b1Mf^AMHR4L*>%ubrwF5WEz_9s$I5iQQi35lzS(*l+!>K?Z@uLButQYY_(% z+lfPL^!dLw8Pp-JOI(jQl-NOBpE%5h_V@k#A5I1l#F4}eh#L||5l0g@N++Q)aTDUE z#LbAC6FZ4p5T~~!p%rm!;x@!>iQ5skCyw#wbfbg6V00wzMBJIU3vpNCSmJJejQ;QL zC*U+Z;-194h;JgknYcG`oG-`Y{_o=}fNvqbmAEhQZR*dd7N;t}v7XA&4N(sYI^i7A z^0#n~Xn^ZAN2sdvHjZ(PKa8_+hipRZRjZ-KY>-n!#nwI%wv~NwSZobfRw#}>J&ZGT zN9W=U*dSNmkWkg>I8M-wJz~OvxbNV&(poC+9XYP_ZJZ+-cgz%Sva3uHN{*Q7xS9l8 z)cmO2jn)+UQs6^h>VM@^jEDxu^{dLoyYM^Kr( zX_nfqezoejPSiwHmSZqqHQyZJnq3QLp=RQo*hG=8twIEn0hyK%*E#5;MbABk2D&f{ zXB3yd9Z<*BE4a2gIt(YwRvd%-_EyrQnaKIAV4N5{9rp3ZVZU0!vE4G=Vs{;aK3MeZ zgrbq@xw&6oPu0j3nz#_X0Gj;T?auWB-mpjWHtH;IC~D3DeuFwun%0wj5CM3de((k z@1vNCQ>MBzi*RamN`EAN3v#eas#S(OPt=ZZ9jc3v11_X3d0!4tmUq|Q$3efV#LDS{ zHX#l9y;KiA&O;L=-ijhhKSPEw*=V|*^~7U~8kmiNpK%(QjtzsOaw#Gd2P9`p&Zp7Z zNfOGUNc2&mND^vM7bS`F46dC{LJ6ORI@ILBh%1pQQrs|8ZUz)7|oSA8yU6^m!W{7??6zN>k`6Y%>!n;>!om< zm^}~SqGEqW4$co`tcK&v_YaUmu9$WxGliK_ROSb`wJY3dpF{|R=TxZ(&R>w|=v~Mx z`a?@?HTq73dFhWh;wn`xY&4-QQgFdEUZs5q^FmSE*F_A1O&{Wf?FpC#LRFJ)XnDtZ zw7hi=&MbZr6IVY>T*>EQn>Ys(!^!VVQE!;Prt(Cs5ZekweKWnGDn*FD z03kL9mwV$Nq}3 zF{8F+R&AVyA2ScdzpLWrA>WK&;r^W?VV$WmMJR!#Dx8Oc-czL_B+o-31%Yrd`Xi*v zQZXMvO}&V8jRKI)rSguLP!AFI496Tl6HRqHn#yqrjaS+XJ#C+lgi1xvm+USf|7q7S zoA15XY&U)2dcKZBy*3|?=gXD3GDFXC?Q?{w{qs?<rOP$0AiJR`I`~6vVbde6NM* z?8WZR-jaki%9bmLmlk1Ks&W>>)VUB2#5qy((uJtNa#!Eb&{>O6eyUt3-GU1-h*^mU zw{eSLo>76KGB09Mp0o%#=c!ClODZJSeU@NVyvP!4TBAxuObx&t1w)3Glo{u zVtD$wyQwBGhINJHlQI|KNY*Y!@n5Qf#VF14yV#e()k?81Q1&HI6GiR+7;>q60M**; z&SmTp4(xKB3<;gJ3?;?>iA=CDsHr+Gv)I+#rE@@Yvm9#bUnt4)3S8fhO-87i zu^gpXmZJ@?_QFs(;2Iu`h7~dPVVRjE*o=Jz(jQdOE08|pVdVPo3iQ+uDn*3+zmXvV zej_aF3QLHJT48bTK4uNX5VBl@lT*6Gr&48K3FE|TFrHRNW}-=G(&H*g)Lc=sSK@H= zlZM(e3HM5cButovvddSZ>{F^z?BXk7w^5?`#;wBH>Zc7guRDyhMb21-TlB2^wqO1T z;$DX!b4G1^uMTS4r`YqDlzhjzi~fLvZF_3>ESqGRU|tUd=?lX?ZBETxI6L zxJ1;^ccZ0#Riz>%=V9z5EW-^Py&7hhFa{l}?`qttsW)J{+a)8VAEHD5W~dJRk#C{M z(`rF3Kmzj>LtT%DoVXhKMH@kM>mTz{&RHI`O0^T7p^ zVVHM2TI+9B08v>?I7P7GCPpTMqAgnSX|t0EB`Rzz7SLb{NAR6ATn=R-`k z>fDm@v9wJSoS2XMBOlf(dI0XoYs1j#Mfq4MEjC=Oz*SSUvad(#L=jdsM4k!j;Y(wa zx^NGC$+aQv%=M^5QPiK@Oip0cG z6DIv74ygTe%Ys?aD3%Wqg5j<&p5`4wdjF zEJ{R3*^P9WU!vLXGO10)X!f#T6j<~dhGHpX)7>h?jMRyvP)OxTs4*L1d@m|_5XKpH z7*E)U0hxdSxfe=_9k)QoVsm}-eWsaxAUH$dh&$+7bOBP{Z&K6uLrx7rz1<%!Qbc|b zrS}NH&FZ#B91GJ!sz@TkB^JQTf&jSvh>G3>A>$czUIzy{FKH9}dsL-}TJjA1OW6mr z$5nv{&SxPc+=<#%idmAfZ&z`4{wSc3os~tq96U`1~!ZQdSpvr2S?JH$RO=FhNO7LE&i|5ijLg zDA$lGHwA(4Hm}F5mA=(tH>a3Xqe{pn^(3UqV_e|>8S=7fF zfqYh7K`^oCuTh^YlbUoHa`t%Sma`e%;4-Np1t_pk4D-Ln+&mLDB~ToZP|lx+QwmNk zgp!dOfR8wf%ntJhCKV#hl^=>0d-whm(65bmS?a6Q2{JDK zzy|>A{C0`!4dl+=WeGDcKyNQY&J~g@>Q7X6k*XAvj9sWn3O=oy7ORABAY?a$g*$#q z<~L|sZ23ej6LohV^h+sJ^K#UBEwYP^f_%Od*8oGZhE zIdqZPZZ3dB^H5OgE7EL>Fgb5lNqdkow=q%%Bc<%>M5qwqn!9uH5z@R3wZ}(YRevv5 zn&emENw-nx;qCAw3HfC=5o;Mz*wpPs^0FrA2Gk_Xv`dwX5Ze?MQ4-wk`e1X2nm7?z zBot#@Wyl4LPb>h%X#66TSq$@%rtrITsVre~{d_T&HD@!tLu_Hh$lQk;1)I8ku*^U!% zSv3it4kvymOQ>AP#XHjxRq!2>I@3|ikdBxDE5AdA*wgKYnkwprJg5o#p&nOBqUJi` zJa)ub8$>;+@7yGe~X zfZk7Tjs5QA;SyY}1&pzQI|$>FH_+J8(h7M8;o;xvbQp@Wv_bi~;!ve3m4!614H_%@ zd6*>}g4qof-2!T^n9UV8O)4%1LWKys+oI@ln3)62666m>Pm!Vc18xedSxt|GQgTS{ z?v}W_Yp9$b;73_oROS00Fe3z+)rAO{#I{3Tqi;h1)mkdX<4?D*Z^a7gU2u$)1qp+eD@M_EvjGv=|l@^TJvZ?SZtp#dT zR1-~7UlobDBL?X=M&bSpH>)85;=d?~M=>=-us$7KBV`!6>$04*+ zamOX6PEr9RQL8#(Al+z%aO#fZFxnwT9aX6qB_Fp$s<>8Yh|VhJgk;khsm`}XL0wgv z2!$dWta92T ziKQ#NNPinQetA>WEY7U@G(yc1yCPw}69wL)l72+OToK}1Lg=gVM5qwqsC-~4{}CSC zt|~>1kA=FbnN;sbeEb}I3Ufork1|Ui#`wxS1wGNemTnWC0-L%NBj*!m=OL<8NYN=0>cM;Df_MF*94f_lG- zISnVk`|;_D&ES z*;tIvo<-EdCsm~+iSLE-f=^;bFX{r{Mw@BSjel_VA%pNad_Be(@Us9RC z$d}EYwHL=$xL;kp|GuJ1%W?Tt?`6+Zdc(M@OM=^AqOxB=1=G~_3zo)_le|_nyonzi zI{wM$#*Hx2Rm?@K%ahG2G)WN51L3j30TsUk|2s?kR7kVtRLT`-hIgu z7&*gx9nY8DuLnks@6rkHvQ)X`{yts4Z|t~drF55yzKllAR^2Y6QD>45{a+qCdN|Bx zsT5d6D!QC7ZtUpJ-3(*4%E4vF2j0uNc?LZ@E>^AWi{)!~g{4kVthj^M92N7MjL_RK zSbG0vu?P3+(W6%n&$S$U=)kqas%zalcj^-Bx%Lr0!r@wO)wNDNdc}74Tw9=`D{!r% z`dVz~Zr&~4B9$W7;&0dGA;)gLJn0sz0=bqg*QWhusT+ve$ZM&xUx8j$m8MsxPF=nE zEmui$EjAu$HeNx+I(rB3N|h%UGUNg(7OXB_!3Ur`RSDI!T4i3fG{)DG3BOyyYkEq- zk6^+!4FAhA$G&0gUzT=3u3a3D^s8~N!1CoS~m;{v=&<= z@=R3*69IBh=?vvQ^DW>Nunb*&UGA_TA5H^H*Xrxi-M;p-!7_ODb&QsDKS4&93{Pz^ zi&%!RZ-!ZPUB<9)0WPrJC%DL#_4ytsGyckl+n#XT-rQ4*hq>{1b${i3HF7 zR|403o6T-D2D-h(SuJ&~SzDuPjq>98dT#6_Rl}>|C&8NTxfqz8shXa)HgXk52AW4t zRZXv0pUf)m`VW;fTPFXf4^09B>(83yX{q*gJu_>t(a*4`b(gKT+@;5{++}sV4g2YA zkNH5aYyZ{(1D1O1#w?c(*l;b}dT!)~vZ>ac4xA8XQ-GAhn_D?AW@A$72aJh!K9IfUa zx8BokIyz2X-ud4BUVeh(KVm%%nKjj#pu$d=JLo(*s;7>dI}LZrukG;a;`!%a^XTNh zK}|+2IR24Ry`5nUmf!liU;VPSCg>vJ_OI4^RPj=Mc{${>aTYSJ!wx87v@PNW4g< z#HQ9!m8<+n+;>|n;t&luAN~xPpM%}Tg!m>)9!h0vRA%_XU`8%ISLYntRq=^n5qq^ssCy+LrR~MX%es)g)UR zwfT&-n;Q1JwQE*!-zp)iIJD}$y0yYOx{9)jYx}(Ksoy*Fn*W@#R z@2)~VB1ne%x_qMW-9)_Z&g)j>^}!pa9<{aE6v$Y2u`X4QAT@Bct%;hw)Yj8=5^u@rGe{!|W!}2?2yl&OyyNTyW&j!S`rGdp2Y>5gATj1%02u~--#v~$e^+z62 z4QYdRn3reksc-0L6|&BDPrF97Jw<7s-6j1GD@XTQRrQ}QRgz^tV9X-hx~+E4e9?Ec zZ78Co5C7Cw|6cYw7>ktbzW!eq5ZioD4ep2K&2YdNqej-&(;KF5wKaJVr<~e6i@K^^zsB=zhSZQd5<3nFB2@MIzbho=__PSz zdfHqZ_@7>R2Xw&d=0O{Vue90Cwe;ZJgfB@h#Rnzn1_-dVWRr(&HPmZ&2PI_{ubsL& zss{cG+^{+-Xkb*k2M632FMC5hcKg5P@m%{KX7SXhyRF8$t24<>18"]["fork"].signi_fdr.sum() adata.uns["43->24<>18"]["fork"]["fdr"] = 0.02 scf.pl.test_fork(adata, root_milestone="43", milestones=["24", "18"]) scf.tl.test_fork( - adata, root_milestone="43", milestones=["24", "18"], n_jobs=2, rescale=True + adata, root_milestone="43", milestones=["24", "18"], n_jobs=1, rescale=True ) signi_fdr_rescaled = adata.uns["43->24<>18"]["fork"].signi_fdr.sum() diff --git a/scFates/tools/bifurcation_tools.py b/scFates/tools/bifurcation_tools.py index a177bfc..8629a66 100644 --- a/scFates/tools/bifurcation_tools.py +++ b/scFates/tools/bifurcation_tools.py @@ -42,7 +42,7 @@ def test_fork( copy: bool = False, ): - """\ + """ Test for branch differential gene expression and differential upregulation from progenitor to terminal state. First, differential gene expression between two branches is performed. The following model is used: @@ -154,7 +154,7 @@ def get_branches(m): return ddf brcells = pd.concat([get_branches(m) for m in milestones]) - brcells = brcells.loc[brcells.index.drop_duplicates(False)] + brcells = brcells.loc[brcells.index.drop_duplicates(keep=False)] matw = None if matw is None: @@ -324,7 +324,7 @@ def gt_fun(data): tmin = np.min([sdf.loc[sdf.i == i, "t"].max() for i in sdf.i.unique()]) sdf = sdf.loc[sdf.t <= tmin] - Amps = sdf.groupby("i").apply(lambda x: np.mean(x.exp)) + Amps = sdf.groupby("i")['exp'].mean() res = Amps - Amps.max() res["de_p"] = rmgcv.summary_gam(m)[3][1] @@ -351,7 +351,7 @@ def branch_specific( copy: bool = False, ): - """\ + """ Assign genes differentially expressed between two post-bifurcation branches. Parameters @@ -439,7 +439,7 @@ def activation( layer=None, ): - """\ + """ Identify pseudotime of activation of branch-specififc features. This aims in classifying the genes according to their their activation timing @@ -522,7 +522,7 @@ def activation_map(m): df = adata.obs.loc[:, ["t", "seg"]] else: df = adata.uns["pseudotime_list"][str(m)] - acti = pd.Series(0, index=stats.index) + acti = pd.Series(0.0, index=stats.index) for leave in leaves: subtree = getpath(img, root, graph["tips"], leave, graph, df).sort_values( @@ -617,9 +617,9 @@ def get_activation(data): subtree = data[0] subtree["exp"] = data[1] # load parameters - deriv_cut = subtree["deriv_cut"][0] - nwin = subtree["nwin"][0] - steps = subtree["steps"][0] + deriv_cut = subtree["deriv_cut"].iloc[0] + nwin = subtree["nwin"].iloc[0] + steps = subtree["steps"].iloc[0] wf = warnings.filters.copy() warnings.filterwarnings("ignore") @@ -676,7 +676,7 @@ def activation_lm( layer=None, ): - """\ + """ A more robust version of `tl.activation`. This is considered to be a more robust version of :func:`scFates.tl.activation`. diff --git a/scFates/tools/dendrogram.py b/scFates/tools/dendrogram.py index d3df06a..32146d4 100644 --- a/scFates/tools/dendrogram.py +++ b/scFates/tools/dendrogram.py @@ -96,7 +96,7 @@ def dendrogram(adata: anndata.AnnData, crowdedness: float = 1, n_jobs: int = 1): adata.obsm["X_dendro"] = dend.loc[adata.obs_names].values # generate segments - newseg = newseg[newseg.argsort()] + newseg = newseg.iloc[newseg.argsort()] segments = [] for i, n in enumerate(newseg.index): @@ -264,7 +264,7 @@ def _group_longform(self, vals, grouper, order): """Group a long-form variable by another with correct order.""" # Group the val data - grouped_vals = vals.groupby(grouper) + grouped_vals = vals.groupby(grouper,observed=False) out_data = [] for g in order: try: diff --git a/scFates/tools/fit.py b/scFates/tools/fit.py index 1a2621a..efe5757 100644 --- a/scFates/tools/fit.py +++ b/scFates/tools/fit.py @@ -198,7 +198,7 @@ def fit( def gt_fun(data): sdf = data[0] sdf["exp"] = data[1] - gamma = sdf["gamma"][0] + gamma = sdf["gamma"].iloc[0] global rmgcv global rstats diff --git a/scFates/tools/graph_operations.py b/scFates/tools/graph_operations.py index 103d033..53bcc62 100644 --- a/scFates/tools/graph_operations.py +++ b/scFates/tools/graph_operations.py @@ -1,6 +1,7 @@ from typing import Optional, Union, Iterable from typing_extensions import Literal from anndata import AnnData +import anndata as ad import numpy as np import pandas as pd from pandas import DataFrame @@ -433,9 +434,7 @@ def attach_tree( newcells = np.concatenate([adata.obs_names, adata_branch.obs_names]) - adata = adata.concatenate( - adata_branch, batch_key=None, index_unique=None, uns_merge="first", join="outer" - ) + adata = ad.concat([adata,adata_branch],uns_merge="first", join="outer") logg.info(" tree refitting") use_rep = graph["use_rep"] diff --git a/scFates/tools/linearity_deviation.py b/scFates/tools/linearity_deviation.py index b7467b8..d19d6ae 100644 --- a/scFates/tools/linearity_deviation.py +++ b/scFates/tools/linearity_deviation.py @@ -93,7 +93,7 @@ def lindev_map(m): t_perc = [cells.t.quantile(p / 100) for p in percentiles] - df[name + "_lindev_sel"] = np.nan + df[name + "_lindev_sel"] = 'none' df.loc[ adata.obs_names.isin(cells.index), name + "_lindev_sel" ] = "putative bridge" diff --git a/scFates/tools/pseudotime.py b/scFates/tools/pseudotime.py index 11acb92..13dfe53 100644 --- a/scFates/tools/pseudotime.py +++ b/scFates/tools/pseudotime.py @@ -290,7 +290,7 @@ def map_on_edges(v): if vcells.shape[0] > 0: nv = np.array(g.neighborhood(v, order=1))[1:] - nvd = g.shortest_paths(v, nv, weights=g.es["weight"]) + nvd = g.distances(v, nv, weights=g.es["weight"]) ndf = pd.DataFrame( { @@ -314,7 +314,7 @@ def map_on_edges(v): for i in range(ndf.shape[0]) ] - ndf["seg"] = 0 + ndf["seg"] = '0' isinfork = (graph["pp_info"].loc[ndf.v0, "PP"].isin(graph["forks"])).values ndf.loc[isinfork, "seg"] = ( graph["pp_info"].loc[ndf.loc[isinfork, "v1"], "seg"].values @@ -332,7 +332,7 @@ def map_on_edges(v): df.sort_values("cell", inplace=True) # df.index = graph["cells_fitted"] - df["edge"] = df.apply(lambda x: str(int(x[1])) + "|" + str(int(x[2])), axis=1) + df["edge"] = df.apply(lambda x: str(int(x.iloc[1])) + "|" + str(int(x.iloc[2])), axis=1) df.drop(["cell", "v0", "v1", "d"], axis=1, inplace=True) @@ -417,11 +417,11 @@ def unroll_circle(adata: AnnData, copy: bool = False): adata = adata.copy() if copy else adata pp_seg = adata.uns["graph"]["pp_seg"] - adata.obs.t[adata.obs.seg == "0"] = ( + adata.obs.loc[adata.obs.seg == "0",'t'] = ( -adata.obs.t[adata.obs.seg == "0"] + adata.obs.t[adata.obs.seg == "0"].max() ) - adata.obs.t[adata.obs.seg == "0"] = ( + adata.obs.loc[adata.obs.seg == "0",'t'] = ( adata.obs.t[adata.obs.seg == "0"] + adata.obs.t[adata.obs.seg == "0"].max() ) @@ -452,7 +452,7 @@ def unroll_circle(adata: AnnData, copy: bool = False): "n": 0, "from": a, "to": b, - "d": g.shortest_paths(a, b, weights="weight")[0][0], + "d": g.distances(a, b, weights="weight")[0][0], }, index=[0], ) diff --git a/scFates/tools/root.py b/scFates/tools/root.py index fd998f9..be31a58 100644 --- a/scFates/tools/root.py +++ b/scFates/tools/root.py @@ -124,9 +124,9 @@ def root( sub_g = g.vs.select(group=0).subgraph() a, b = np.argwhere(np.array(sub_g.degree()) == 1).ravel() - dst_0 = sub_g.shortest_paths(a, b, weights="weight")[0][0] + dst_0 = sub_g.distances(a, b, weights="weight")[0][0] a, b = sub_g.vs["label"][a], sub_g.vs["label"][b] - dst_1 = g.shortest_paths(root, furthest, weights="weight")[0][0] + dst_1 = g.distances(root, furthest, weights="weight")[0][0] pp_seg = pd.concat( [ pd.Series([0, a, b, dst_0], index=["n", "from", "to", "d"]), @@ -290,7 +290,7 @@ def roots(adata: AnnData, roots, meeting, copy: bool = False): nodes = np.argwhere( np.apply_along_axis(arr=(csr > 0).todense(), axis=0, func1d=np.sum) != 2 ).flatten() - pp_seg = pd.DataFrame(columns=["n", "from", "to", "d"]) + pp_seg = [] for node1, node2 in itertools.combinations(nodes, 2): paths12 = g.get_shortest_paths(node1, node2) paths12 = np.array([val for sublist in paths12 for val in sublist]) @@ -300,19 +300,19 @@ def roots(adata: AnnData, roots, meeting, copy: bool = False): path_root = root_dist_matrix[[node1, node2]] fro = fromto[np.argmin(path_root)] to = fromto[np.argmax(path_root)] - pp_info.loc[paths12, "seg"] = pp_seg.shape[0] + 1 - pp_seg = pp_seg.append( + pp_info.loc[paths12, "seg"] = len(pp_seg) + 1 + pp_seg.append( pd.DataFrame( { - "n": pp_seg.shape[0] + 1, + "n": len(pp_seg) + 1, "from": fro, "to": to, "d": shortest_path(csr, directed=False, indices=fro)[to], }, - index=[pp_seg.shape[0] + 1], + index=[len(pp_seg) + 1], ) ) - + pp_seg = pd.concat(pp_seg, axis=0) pp_seg["n"] = pp_seg["n"].astype(int).astype(str) pp_seg["n"] = pp_seg["n"].astype(int).astype(str) diff --git a/scFates/tools/utils.py b/scFates/tools/utils.py index ccab3b9..c13d660 100644 --- a/scFates/tools/utils.py +++ b/scFates/tools/utils.py @@ -12,12 +12,12 @@ def get_X(adata, cells, genes, layer, togenelist=False): if layer is None: if sparse.issparse(adata.X): - X = adata[cells, genes].X.A + X = adata[cells, genes].X.toarray() else: X = adata[cells, genes].X else: if sparse.issparse(adata.layers[layer]): - X = adata[cells, genes].layers[layer].A + X = adata[cells, genes].layers[layer].toarray() else: X = adata[cells, genes].layers[layer]