From f310c9f5633b6f4920a997a46bda61d7dd6db597 Mon Sep 17 00:00:00 2001 From: tsutterley Date: Fri, 5 Jul 2024 12:28:33 -0700 Subject: [PATCH 1/8] docs: update product chart to add ATL25 fix: default import as class refactor: import higher level for submodules fix: numpy 2.0 deprecation updates --- doc/source/_assets/ASAS_product_chart.png | Bin 65088 -> 28617 bytes doc/source/_assets/ASAS_product_chart.tex | 65 +++++++++++----------- icesat2_toolkit/convert.py | 2 +- icesat2_toolkit/fit.py | 9 +-- icesat2_toolkit/spatial.py | 21 +++---- icesat2_toolkit/utilities.py | 5 +- scripts/MPI_ICESat2_ATL03.py | 7 ++- scripts/MPI_ICESat2_ATL03_histogram.py | 7 ++- 8 files changed, 62 insertions(+), 54 deletions(-) diff --git a/doc/source/_assets/ASAS_product_chart.png b/doc/source/_assets/ASAS_product_chart.png index 6f37639a2a0f9a1d28546ee64f533fd8a1b77b7d..5ac67574426c4452f379c7b6357656b535a65718 100644 GIT binary patch literal 28617 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 Xa%YTHt*XG+8?NaZUcz6vegFRe^s4kP literal 65088 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 Sk>_TV` z)=mW<$uD?bX9@%E@1i&1NW*#u17D>V;wyV}^wGF*b-3__!S2buzD}}?i*L%~)0d($>u;yI%YR|qo z1Dtz7VbUL|Wuu=D{Q0x}V_)7k*^(c6;;2O^O`QYqP#$N@&E@V`m~UtvdLOD%pU(qL zasvQbf%c0br!261pm%`uu;@BB^~i`n6o1fRfMz$VnXEH6H#7igdD^jR9fSbrM6h|= zv@+HkdR@saw;^zbKrj03Uw$1?#gyxL5@KQrt;KI$5+O4{!e9rCmNCzC^xEa_8

tlxVR$lLm|po{bJ z`n^l1^ITa%cEueaBB^Zj0f8jL1b=}O<+~z5JH8-F_28%<4e1^aI3~)EdB8c3H3|HXhH`k4J*6{Sz$cL>GqJ$VY{mS#9MG`wVH7bv`V}? z6@=TUh(9N-P^Nt)Yx9B^u_t24>I9=tV-s z>;PeSMe1BfoYd6|5SgC0RnBMAiOk#WL&K+ViyO+bRnCwkT5;qn8ua5J2LY(376GV# zk`t!nbIKo{hNQ)g`}|7oYmxTAPb{}}F;%Ei<}=W{O~0rC+}9B^Gf5T05q{p6$xug8 z+CJg?6^-)`5hc{mu6^erDdlooar6zuQ!?0(clND|s4 zD<@59AZSn{=T2-7{E1g+i z8%2IWp|e}x*Y|rnt)UgU!%bTH#(L+pAnGmSzZbbz1f|@G#J*OQ1c02>(3Rz5NJ(O+ zeg4fxmjmqp`UG({mDA?d+C*~Qq#|3@hqV<)5r{Jh8ADOxs5phv_xRC*A9+hq-8~2o zRnN*A#xN@+UU<)@S8oIj$qO~Jj*k~ep!&d)ogG`Q}qR0e$(WERlJ>hsH$dIk<9;~XrS zJ^?4zl%6`k*qWxQpKJOQ0d6l4Vf%yQ?rykmdl_c`%pjJyPdmv0E1yOXx29l0;jxA0 zGjQy?P_1-UhzFM8_#Uf;0u$6lSO|Levq09c4DyaZ&y5j4j&cod@NIT>%ZX~_Ex2QV z-c!o(7QtwW8HL??9aNQ7Y8*UKmMvaAhu1lsGS~$jB~*7SqB>(f!GP z3UguxBr@3Y>=*!wFtN^R?Zf_{z$5Wn)=*Iz2(N((QDwIVP-Jv;bQ&b)#=A)ax(5&5 zYi@2f;!2XZ<5|JJdn7ut$iCzOQduP;G=@MO?KUQ9<}wUnF<}Lf)p}2}XjapfOFg9s znqN`_fG^N%72`g)PCz5#t7AdVEU^MZl3{>&d{KEL(h4+=ofJ1wSAAu@%{Z2Kr0HZH z{Q#seK!^e4qN7#&fy*iw|A-mNzmzjald}&7PzMe0e`VOz)0qh$#?dkEmk?71 zM}wugEEF+vUy?Y+W4}#RTU%SCYe6KzKb5qmd)vd%h5j_W+F#>`Q%ZnWTIz;PI-VKcmdPC3pL> z`;_90VJq}64a;uzZ`SH!U*%?uP=gwbV>K_|byYCV$C}Z1XlrYeT9S=Wm2A+CtL!|# zji(a5TJZS?KU$crhqCPBMAI#i5li<@W9BZ_!$E&YVW9NqE0esEIru)bb#buxs=wmr1)`8INKk+nPnI#}Lf^mT z@HdWY{b33prOhAF1q{BRF@fr$CTVE49^!It(T`@esM(;dm?uBDp`AL%1R#Q4*sH1+ zYNp{l2dWISvJHFcPkdhKs7EflAz;$Ma!OnXb4?u8y+>Vp?Q56zR1Wm3S+mxQb%kIn zc3Td8n9Xp3emf*gt8i(X0}|tgXbh{(t?0l-Pihe*{!ZJ5TJZ146?-CyDm5HEhyv-&zmqG-fGYeKqJ$!XRb|1?=p6|{lj!nk}o?^K5Xoi|xIr`}Lp3#YF8v=PwU*bT*YMWohKF+*`ljwi6G}1xT8Akr6zI8k_oS5`d06uGU&-BYK|yi>*a_ z-;_XCQJ}H==h6VGP=^El;KY}!Gf~6BS)*Rt{ z>Kgc^*;zZSate{iJ|nh=k-#=_LovuU$#;p7i#ugPfboLhQj^`1rMei(E%X&&WtfZF3oR{f_GYbX(`n-L8tdF3Zzn?YT(wc@!8-={~LkUqZq zbK(J3-^t0zs!obLg6f`Qx_8c~LCyzR49GV7rGE{51r1$V+Q8K8#DzfzFll5{OkHpr zv4Qlksi_I6$J_~x;&6@cGu?q#nzS&H_W(pRfqGIFo& zdJB6=PS#Gq#z-#-(jjzwdB0hp6v84vivv^+klqL*Edh|8E#ukEsn4Gq0H9p{+5@)C zJH)IZXtYT~k_PcW!FVlz75c{3V)r^VlfFNH{#+pYbZ<)pi4=MQ+wbSpEkq=ar%ya- zZVt8ld1`7M066+@+A&;xpaqWC>w2$*xB5k7sw?Jt9`LK|(dRFusx!9Vhs-H9&ePo2 zi5iCmk*mn~w~uN8+OQ1)+H^)}idR5DyFTSfRd!ZZ#Y3icRka!Lx^PRC1g`kp=+qn} zd$Q0SdW*QgWfR6(mZ$&a{wGk9Z@ z6p#ShYfb>nL3xG;nl8Z&c2pw_H9X~wkCG%%3PLG4#)DWV`P0a{GkfeHTU~mkaGTwp zr>lh*J9$;2rOzD;udPu}1Tphh{$ zeMIIrblbNEW=7Hh7RfsR*kZ+%n7gk5OT{QM{+!;Z)p_p-uJ;>T;tecH13~*cH2b*A zPEgjpv>FBcv3wO&rXip9>CJyW!~shM85~k1@GhWkL3*_I=!V17pfI2MQddpp^X!`iR9C-LfV(rSvd_&p&x_3 z)FP&ivo6M{DF7vV+rwveRN%-L95(OyRME2M-RJ#zOWL=^64V{E*o^)XFlBWiSqhw)AO`2S#VJvWikd4U|kn z_t@N>vXxmW>;!A?Oc3s>lDi)7Rr1y z+H1Q*n#-Y84rKYazpS}=t(!W%g6=CmLW;hMe%2mIt>y{>a7b^SWW@xH{KD>ze($za zA7JoU*H8*Is6fe1gBGO6G`$96b?vp)xiNICsKU?wX9KmR))v&Lg$^lFciQ4SS+lU@ zsju8Ut|Vq?%T){=z!k=51fKHI-68w(vcXD`@WWDK<_2nXcEIHrk**`S>Bg&jB;IvN zpBrWebUI6-y7!j8z52Dh@ANif@BU64W`9O&hH^c=^K_quObSR|;X}us5$FM~FMi=2 zyWm*@JB-{Y&D7U{qrFe~qf_OP^m1eIhnT6}iYy~OY048uV9RbFwc={X->>R+H~KJg zqzICqm>8SJ4Z8qoD6;-jC4tsjCm%m1= zVJv3;ysQ{MxIq|Id3`ga{cfbu3R@S%h1sC;4ab>QfvUaS&4GCr-PngPRA1MJt)#Q& z<^bFXHsoOnx5&X|D!3tOn;((lo0_k`7E)?4YE@h=#2X7jdm6sI!lCB|sk*ov7HDwiet~@=_on)2y z#(ZTYfNw8a}qKkR9iO~7H}{~i%2i;8(0~EK_Q7$ zb9szqvznK;_gb9SYK!%TzzFyR&I*Sb)dm&4OLeBZ!mD3jIk8bJJ2>#0h2{0PZjGY6 z#rkVPhgIkEv^()g=Zzojht7A?l8IXRi4_)W|zM?OwKYh>CRa#|qmv+TyP|vy4K<_J8--4V{R+#y-uaM;0 zH$NZb`l1)05=kNDW~Pq_s;qWzzZvaWfpvLkPM*NCAtpBMJ>7crTB73pv=Se&v8=j9 zs1i8@zZ*iY^;r7%3ukDh5QuB0 zq~{D5{W~9E)1PejiNS?$!Qi3kt+$eq!E6PoaLylZWuwtFpt-Da#7$NNI1Lf6`s7gH zeLV4>KfRlwH+2@ltWyAnirlAn_Mbu6aa&CK!weUsccBED&i4D14b~t9fhGid-0JYm zz@a)Zg2+msdbB(F%AALU70k%AKh=3eJm>H&h-0vs7{~6aE=Y=}v}DqPc=&6y>XSwO zc?*OPSv*5ChV(jM+aP{I$Z2^nez4t`8Q>d)EY0y(<;j&_YooYZXq0dU#tGUsBLQXm zL7l>)rBUV70cfuL{$2A+0)-0vfsB2x$4+d4z-C+v2|4h~fWIv8dN+0Ia*l>;#~_0K zn}A{%_(2t~@-sJwodJzmf)kX5`md~@!9%sMUARnvUllZp3j}Ubd;-)wBC(6_pJFSu zR>%T+eSjSx9Dyo?&QDINfesARNpCYvdSw~OSv~pmR^si?cuC*XzO+4AC5YHqo9hnxnz^~vP zWr8R>Y3i^B?e|Vy4echCyPG zwg+P=;^1u^t+g9_lv&ay2!EIvkWPG8@1wFym>(Fm_IVou3f)Nu&d~Khh6kb+jiT&<4 zgff%>$ov@HicLjKS3p|gi&XAhvB(+B$j#2a9SXe(Q1fSJ{h=AvH}Th}l#0M870RkLC6;|ptA~#a(^Yz*HZ8alo-{K8ObNuW_Xl(P+*_}=gv4bG zH9B;?FH^2pX_!_Q-`u@z*L{0BzjxqvIk+1^p80n?mzwTjKFdR7oUk3K;5Xwz_~n2Rr>P4&Kr{0VJ1BSfN8gJk8s1d65~ zoomtz*a*Cw3$_>t3_z2uLDfBDXE8O|@m63H^aGpVIFaH2#&Oj`>K~Z46V&RIU%HY*eXHx!?OGg~2&xOTmKS540x;BB0F167xMUNJJ6q&o-;G)TWT@2lIx(xJJQnlv+{HFFCrT{TTWC{hDKkVY!c%2KlA zfnBc~%^j;)n;s!?ZJ9?8bv&dC%^OaQ9C%Ac3@fH5D6Al8SwX3i18A0QF-JX3`^?gD zENE-B^G~X%81dF71=O1=#)a(Z1equ+OUhLNL}Zp_A!ip~EpQB1PO< z)}X-luX7Em*>Z(Ag?qC>vaH$pFSF`{V1cyA!IfHfUDJjPYeBH-EWw+g2_PL@$MAH2 z9Y{HZOQ<>b1MP{Dtw6w&Je<)04DtD@x6+kN0|OW>Xp%SP2Mj+&P;g636xW5vFCP2N z{T_4dG5?{jT@simO2lDRQU-AwyFCM;4aH1O6gX&I1Jk?If(1$_VnljZ08WO=0qn|G;^;MlFBZ-dfZH0j8<_b( z{(}7jTNNH~+^@_$oJZ_e1im%(6Wa-ZXwW~jCo?N6XRjoGWl( zgR?gE?udD|JpYxU_!2O^KS>2Av136wF4)}MG=E-HM;yF@@eWqv-+enb?H5EW^bfc} z@Fe^SD+-oxjmtF2Bx!m+p^q-lqH94{OLdJ0ejO@|lMcf;WFQAVzyidt?n3q5btaHH zq>b(_JUG)gz{HR`8u48d=uIhjqY!iR1Qk7$D0nHH6CLS%I$rwx@ma(#VsnN|;;!Pp3=$4PQs9># zDML;jaS;PujW4o=b^qPMZBLLSbf@~IhP3QOv-M)*b7@xb4$xikbr~COSmE87tR~K{ zP&A%6t=p-=>;kw12a5=BXiCB|z7~=kh@3nOn3YnICaYNRs%iX6aQU2Zg@YN&`q!yL zOmA)Cp^9Cv^T5uEq~u|uy1I~bWdJ#v9UwC}I0zjB)un8U(qAMlK7a(ND<>5srN0O- zp&oI3!&LqL{rjwL5ZvZ2?1ygToJqOS&;m0ncl(My1ukMx3;{wS5_sD7DWWF8@8ACT z_e*ueI{D2WsJ7G8qCgQYWw!BL7aQ2(reU1W z!0QEv#exAL6F)3LZJ&1CzMlF_nb# z-Ocaq)G98G++Lr55_*gp|N3G#`KQRaNg)`vpv;{rIQB3sSI^Qx@QAmc#_n(q992X4 zEm{Is9?Qo9$Q8Z-XY?r8#}5APgDBZ(#LWfuY10Cdhx0*eaX=ElF`~S2#bxeRUR+=1K!Ne51*9YE5QYz*dksGI;g&9+`tLk}gP!#_7U7KEVt#{Hav z14luJ5!^yHIVAkhgP#&701V)S z=BI$$WJdQtDe6j+;3y$L>gBygpz(SP5;vD;ThJQn1Unf%*%9|&j;q;57nl-Qm|Q)R zX1%90CteazB*d8kxHh4{g<3@L4+R$$nA?<=u|yG>2sK8tv;*xNW8r~4{q zvfIP%YCqaeCIP~8W?AC+5So9MEbVO5zvMGfU7jo0(%FwS87O8M^x zrYRgelc#z>XlnOp)wHWnH-4r4m{|^BC@kC!Kb?#TIl2{WaI*77im1^qV4iATj;cJD z3DHk_FJ@LT%cY8qYaCeCK1!#f@1Ij$egXNZlih~lsAxY5F?dt5bb^v<@!@CCmfGmi-w z+eMq7nCAVKS)^%WM!D6YYQ3u5b?tXfa=xh45_qM4-n1Kt z*UjdAmEFUS^cUq(5pDYe{X6N;{4ybn$!b9OjQzkK_ARs_PzNVJz)dy~P9FUYE`aF^ z2;#IsPBf{u?q{0Qo*CBY*w{Wkvs?rfrbO4Dx3Y-Wx#4se1n%x_fkotD?Enh$3FPc$ zw_(5*c;OoILQ}g)#jf%VVzvP+Ru3GiL0X!TV~WpdlZ?O?9G;G@NJqmCNO_J4RnlAk zpR+f}+fI7vNvs@zu>@a+t67ohBH>lednC#Nnvp{Z(ocb?h9#ukqf||9mk;T0xYAT^ z5$pthTF}AQ!r3!^fWdr~hH3Cm{31BvecsSOMocVx=J>lldg3js5PqPy;2wGYT`aH} za~H#X&;&~MAg>p00~hRWNDcMudrN3L00s}Y5O!1TPMZYpTjEE-$kF|JCQl}YYbxK{ z0zx}YkJ3H@H`SC_$qNFEsaZ=|_BB$3?tN7gw6}As3y2G}UFS50T zIH5Hv;FZyFshAF=P5-pL2}#~>S-Gk_@3cWs?`siuvc?TApV5$-`VB6Iy6X^T32pem zbG_SE=?<$}5-9v1FjJ@95|#50 z|IH(Np2doB5$rh^?kUA4j;{YTW?g{Hqd}f3%&hADg@X4#4+q#~A}8S`SB)b^YUGFc z0vehtg|$P6iCuvQ1vnsPwD5_;kVy#Y?@1&S(*ukVu?ki(uU&|gvISmat+KW0dep4Y z-*0yqt@P9kqQ3|(yyQ|TetO}!Kv>{;b8|RR3(O)Edf32*pv?*jWv9`SUKl_jRE%ruq~@5bVoGat;tU(#OJl2&GNq<*U`$_HM;fr zVB-N^CYK0b697FrKb_H3(6m5wMNV|4;DZ_$T;xC-w9|brwz@ZC=#TPt>3&&u9`Uo&GfVr-3|9-bc$zt)q92|R4z}C7%TY)rz z^|ii#A9Sk!g`!;lPV%6W|PxeL%3Xx)DGvf>w;IWxTulQ9#4+s~A&+i=IgZ zX6z5HbOGjB^!Hl;Mk{@^I+vGggf_8sK;^Yv4t33Xd8;a%@fRBp`BXk+ugcSD!l_`c zS5ndJ$pU4%>Utk6tEEYQ<-b)Jj$pPga@06FMqL7jbN_<{mOaOPe^NDcqTfxJqoecp z&AKpq2y%(l=%giWnKy*@gTd~6Bo7Zo7`!M@$!*t#?vd~-SpDx;Mu>dLFZ-z-3}?Ea zd?QD%!Ht1*>%k0Q!Z{5k+GH00z5!17WCE1}-EB4~#Qj?+9N?P@|L(0R_f7C+7bqrP zYK<=o_zf6D0F=XF8zayP1YDF?DmdE>%L^A-%!#0c|BODC4nS<7Y3RP{2uFp8Z3I@P z$U~!1-BVyzL*m*`q`rTmeGnw?As-_97tCXTvI&BgT3-AA7tQX6R7aMh1u?R)qXljY z=(huoLV5=(L;jILys)BKf(>G&5B(VU8j55S4T+UNu+F~-GGYQBk&FlT1YlKI-)U9~ zd_O|7THtOfR8N%W0YHgi;m{fZ$p8WbItGMhzwy>@)YIbQ#M8f_w+yTol(b{%kAy?- zP9xjlzC4^Zg2PTjbmAy=7QO+&$^9gA1q>wwsSJnRR!68wMgeDm4m zf`|oN`G*=gt}4N1IB=oO1c##J)?}YEHwOVq&?ug5z1{`6JdC>o?8MU6@eVjGGzetZ zNm)Ci=Hr>QaI%`pv_B&^uGIn227RvVWU?wuBnftSSUA<3HIL4q`#4x`jJ$m;q<%V$ z6KFx0Jx$RLp-tBb9`_mWv`UEI$dDJ`@psu*_xaO@d`nGCgP66W>Rn1<%=S`uE5XB9 zA*OPXJWHW%Ce1KC3B%uLjzqKvbsa6xt2AnQSu4r6JZq3V4MI`3BT^$a!>K5n@W@f^ zP8IaCCwRv4VoaaPI|5w`=ssfHPsCgB%5?_><4r)u>+}{+FR$~{c(J3H!hR1&!jNbw zwf11YNQIMk6fAhsEVKjRNQa-RE%#bYQndV-wBU2l64x^Tv9n;WCW0t06c<)uW_FyGNq$mL+9m;*5CenbP9Z%GLr&NCzu-7{zJO~zk@pk znjVr5)Zy&G%;&551v=5l)7c@gw)^nzg!=GPb)-TxBp^7zC)+_mCRFDQa}JOBh%09m z)8^R#RQ^38s^d>d)C0NIeS0OG0dR#God!&X{Alh$61aNsG>)Gz-hc_&DqqfhWm|VwZ!%}5 zwODWRRM!(#EHhdLy0(6JWGDZcY{2k>#m2||hLa`B**U8E>A3zrOh~zl2+Uu~E(Fgo zS`xcY?3Q;Fc=KR znE&+|&-eHJo^yWxbN=Ub&VOFLdLCis^SM9wecjh}y_b8;e1;GhP^)vrdk$xcuW4Ro z7U`)kLmGSeo8jee*!{DFfQ38zArW*s#HKO!pE9L~2mva6%jIFzH?rc<)ckmOK7;Yd zTFx!->F+J`q>Wz=EL%+0XZ~))$(%-_1|paoJodA6O}ZQaWRxHm`xYlm2wK3;hC~HP z63Tcyi3A5dFXZ83ChHSqk=VUl^$g=* zkYT|WC5#tz37%83f~tgZqVmfCBuxbf|K@K!PMuD3$^9mB$s>+}W{#_x`8<%{DG?$2 zN6GdpEMICI+KHusR4 zY<(_gJ$d}OBSEA-Ex;YPk(oJjr0fKmCiKnix)9gwhk&IHFH@%LsP!ac*Cc)x3-`kU zv}}nnB``B$jMn_T88Q}~P$bJ+-0Js5*fgSaSsfoKT-v-qI3cTRGW*!IGI?1PXacf> z;!3BHTr$AKD!oVY&n=KjB0Y$>azMxf1KI+XGB!DUzguIOw%}P_)EqXj_Zy3Fbm;Pw zr+bK-fa0H?9h*=}CdhM8bLW1^nhjVQ70?mo%vw_rr~hrDRC$eXG93?OEuC$XziNA2 z^_wo{!g6K*LbW@$CaX4}$l$1oSG-n=!xBS{f2d>wNe)Hojyk=F1)0`SKnK(}4Yi&*g^xdfnX8oJZn=x&R$uQF^V5L=e_iKnz9T@5AZ|nrZs!Ay9a75%oU{X@AC>R+ zj5;btUS&~Pb?Fd!-Lh_mr?|~mw6pfd(F|`5z9mm`w1<3 znR?1JRLp#C4qMZQXB~w!qqsN^K2W`Uo%IvHU5@_(w76(MER&r4MmkfV(HILvR3qVfAL$&4qkh^G#`xp>ynZsc2-|S2my4#&1tY3=?rkt z{aBTp_u;qd3G=-NpK#EaLMu-1y(#KvzsW3a5?aZ+0uSQYKb@cd&2DCuGMxqXAU$bn zgNQ(YCxt?BQlN7O2_g{W7u=!gwSQM8v-|yYiEp`mFKqC@pl;W}I%C*uQ=;}Jz)6|&&HVReInGs5K0SeCa`FNA86Gv&jGuyng^f?F054ntkv?RmW+LO~ z015yE7B?Nao^yj|3UjzW8-~ZeBgZjX1UTqy%(pLQ%RhTtUp#2qcM%NqJ#*2M>nV|K zbcNn_#1H~-ASlZIQ;KI8ZUsziP|6|&k(J?&?m@19D>S+@?1<=mDtf~62efRV%7DiX z8B+c#5YUgm3~)Cgm@f07e5(%pA0mvYw|D!!V9(M(#D@kL28j3$*NpBA6GwDA-AR&^ zp+_)^x66MA5HGL*O@QkGni*J}9PWXyE?;JKLDCMi82}2HXVzgo?}aoo%)2T2HP&Rr za0F|CRJ7!z{2=EmYsWyfs46SU7HlCN$}e{Xe`gDO#t$$)o2@R(vFdmwRFoKBKdIJ`(}n6vTJx=ho;^@i@cQV-yIph-i5Zx^JImZA zV3R@Hv)vU#E@_pWsG}J3&u8x(E>)nzRF6)EDa3};=95lCP;f6nVgs?LYq*?IxO0}; zGZr6AoY?v|#gj<}bPY9=ht%i)R@X7lXPO-MF|%M+C@(^31dU{e*@_Z~!NmF!pkzVq z28DizFsSJYeV|;tTxO=eCjR)}bC^xoU1zfwpVi`R6?+E1J@c5IGa47jXFVjQmBSlD zG(qG-m*xQ2e9&g|FU1@DGoWQcKR|A@j^hBa4ipij0w|fjIH)JSmE9eel57j0)|x?% zhw((6qw->)Gp`wZMj;y>*~7~bUY@eEhLp^stYM`m4>0;!2{8g}xp)5o zE;QQzx?woIBo^8+PmqmF5i#WG83)>IlCL+>G6r#asMiGcpA|6Wh9CL*1DmCl)SV-r z3HFTS;O&KB2v5~#A}EgW^NbesQOFBDG22lyh-VuL~7eHqMlh!btS#+>}@v#NNdON%^FdmxX7W#7lcYt9JaK}iQ zyYx)o{W^9At;YZi?%4W8pQad1TD$Ce1$V~Q=Xm)u0awLiaqMXazY}`2Wd^hO0l_8HoRT>r9H_}TdF>%Qg zNz(GAb+dhLy+< zLUJoNv5nEKCk_<=#D+P+>j(@cGA5Y_>6upk2)e>mTwQ(Jwh{%IXjwa3v(ZD(p1f=f=*AXOX=hfv$L!Uver6~Ix+h%CIv9g z&XDXS&cnk*j3eB`VYf@RMeLw%+KJRqU25sSjc5S1B&mODn&*IZSf%{IqjLiYzf_4PY<{~uuVeaMWVFD-cFwn zjFc97z1r-$jmNb%=^?cp3(2{2+jf6dFu-E~0h7j?O zN&)%cfG7X{#04ejxNyxXx`k1F9 z;|?k=M|GBWEegv(C|{qC`J&J6-xbdF)^0mnQd*e{n*$6o#N!=F5%pGdHA<^D(1cqp zp`qFl3eqf8KBK{<{}DW67*_Uz_2N9~)eA)ms?vhp;<1ISkBtGlTb^EQ9Q4%Jh?!nS z_>60X_N6ZIJ(%(02hq^Fgl08F>{Q%h@}sk|<>A^UM5AV^7Z(8f&?S#f))#~l#eF~} z9x9IU`)pGynE24%_V0rZxuJvpUjW<#SPN*qv=n3mkVHWQSX%}Wv?{coZ|UXdaxliE z@iF76wk1<`KmhRunSfY270jXvu&c?$ka6Gv9%Lu)EkIw)tF(gc2eJAB5)(KJwk`D4 zNYh>QK4)OAIc-4AOta@!zOguBDFVGkSWL(+1q?|*k3qgNY3RdNP9f9^Rp>Nf4*AS3 z1AvTBw=1(sDKgDKD~B1V0|smi#SOq%V;Reyr;L@Yo3KD430p5`AKe2;d;ea)#Ko^1 z1FFf7RiTgWuB2j6 zM^^EBFs?&dvl)djH?PsA+OEvB+MBl5(I7Xec+53*q9k=!_?!V`&DW4dl5b(2VQMN{ z!V35I$VwvyOqL*IzB~f)3@_lHK<*yU0!|&+)h^OZPu+0oK)AFH4_`T~WuEHP3r0f( zBxGhb-2U_rV|m1|4+CikB3gz_;b(!pYUj7HqJ6O5AVF5O24rDiM>|+NLBYdzet7}t z0B8h_)p^^|e)kaUAFyzC0W+`6pc^i__J+YGCpfRKJdlxAni%iJgblV0ZRz-U_}=l{ zEvPIZb{V-S2~YS2?O&MCK%8~AejP69<0gwG2?xA(HEG&LH%Ts zaT`)V)$r=%m~c$L+rKofK_Ft$0X2P7O{pui6MY0c;;8)kkYF}IDd@D5y;mzg47%2` zAc!Zgv=(vm*0){0Y$jqY$8TC11RtrVXL8UHQVE~I-vH{RuMcLKj{;luLSV0OPHFo}BvXG}a|9R@oa zZ%QMSfN7gta5gy5HZk90ManZN%=fr({n~P{Qn$Ap`-xFk=F`=FY$qWpiXHC6!sr?uD7a z>2c@<7n0$ls7gho0VrV#j>Pb&aIgsANtg57->2q$;*^&W`i9~`cLT&~23!tc#Rzqx zHxUGdgsA)v&kim4ruClz2p4FHVM&(2mqJKEfNy|J8kpjM&Kwd*1XIxKxQ%C|g_k!Y z4-@KUP`o98K=I&Gsi3N&BAGl6ns6iq0Q$$NS*SJ_kj>IPkxw|szL&i@2LPX8+%+-= zS$73n(>4p@0rJq}^NCnDJ^XGfzUNBm#E{hCW?Du~W(>Uq8A8~pAv0O@QG)%n8R1IN zJp~|(LAr}G->sRWAd?tK)8BH_ku1Iy4ejMY52VPYyb%ViK|$_T7x4Le@g9;&m-98S zH%ZvQUdOu;2yWK~ALpk)Y6orkDQ_AOIGAK4PQBrnQ0W8`c=CX_a`Lkb5@GD=}k$bbRAga~@rR1_RDeks(!(9eWFeu7lT=?AiAM*-UpWV(5FV%z%x^u05O@J!Xm*Kd_|})VBS{_ zCjqmgQefiig2S6G;ARmQe`0%=Gw*Z)9Jx*(gJoAH1*4^dn2HSsL9xmP{0H2&UWJ#;FKN;G^VWbSZqGR* z_n0LM>1%2#%z97*P?fgLLq`D`39#C4qlX|wEV1Lwv|-%15dn=R7^9y!2tkOvybZb_ zaU0k<{U#v5=bY+2sjtiCX|Ja$W?R!zQ+;M898eSDOL%e#HWT!du82nO7})Uk-ZHZO6%t ztTYHp(C>hyPdZ9C{t_k^q*ebhJ85khSIM*k1K-oCF`p^14mOYN#Foo{u#Sne-plV|m@r;|uvt@_xY1l_p+mY6*`@NFu6@2Fl+6tzU1eYCi`vT}3 zAEtat#!D_(H8(YZ!KcGQCG0KWoYF~*h;0gKT=vNwR3?RO}KGMW@m3$&U_uGM8H8HH4-c`!Fl$VXZyWpoxe=H=V-X7 zE8lL*(n5oo_gDKwRWh98vT-ZbxL_LIdv>TQSHgSJC8=}60FY@6u3QF_D2_Xu-0%Ol z7Oe0v{=<{+|Kph!2<4*k0|xQ*LQEAIj;y#VgI`uV3oE$B&6X3MyN^+&Kwl{g&tcCr zezlwMfy-BMwi?g8v)V4PRt7#`gS9vQ%QGI5rNKiL z(48#TZ-c#eHWh6G3$}nSgQaJ;pk_u061Gr~?yaCT($_L?yL${UnpWrlH6HC$cnvy? zVL;-*VCnM-h?7WtJmXt2=VcaTwmfC_($TvnzNE60u|ir^oQ)x@7M_7yk&#@dkPUv& zt^j%FWz8cA@DKTaZWx%21j|hCa#PN{t-ix2XYwYHeigj_#j^PC+WYLe@&Ds!BWV%5 z{+ImGkoFwB{sV0IpI;4Ps_E1MVBD3<$;UuP6 zt~H`6EurQtDBC_MdS~OHDf7zZ)$NU_z7NLSl~XJdw3_yIZJIIIMt+jU1Bh1VE@LZD zA0JHsK0i+m&yi zM|H^W3>?rIonRz4W=>4oG&xcTH_Gc*}98jvg_?6E|gS zP&%Vb{`Jhu<%nk+FI2tRH9lE;+i4<_r4Fk11$4V;k<#4lG;7sj2i24<3uW@GB3o6b zw~?4dzo>XY-%F6;adG9^Rcw<5jrWHaUBh3SG{v%ODz0xg_i)h!sc-7}dq74M&<&8S z*@;u`tF{S7g-?HN(u>`32jsO71o-RDRhqLsL zd;QR7(b&}{qFHdUTl65WYmt-Y=eu;1>Yx)S{`XmeU8_fo6)i?j!$-aQ>#l!wki^$T zZgHPQN=fdu&%$n>=}SsqrL4FjsFWOBR`c@1VeuO%!A%y*S+>qqBy&{@3CFLUjhIB& z8~$SLva7pGFBmi01;~;QwdbM%r}2W7brO1eDP@}lX8YL5e2FgrE2CETU$P!z^tK?QGoJxm}Dnaq$nh=IO|s17CM^76mm6 zI^^R14pcCvb+>(Epe>dt7C4$AuPe&^%-;)@YOf_^DHpQ7+rxltrCSCwzu9mSJ-NRY zsCdCO2~b59;!rd95$Ac{cE^gnJ2i`1Va5Q0ZQXpf=%qv@h1t#h)pM~|pI^UgJoi(J zQ8ZtZO$<;IS120>r66%F)xNWE@vcxld`vM;IQj{nidWAUbMwmUi!E>^&CPL|GFkr5 zLV{3AB7O^=8T$rb>-en6faSNDr=mB5OyCn*{XwGLG+RR)V7a)=mfFX+5-DQ!0YA*< zeCA3Cv-wM2YlG@$t3F^Y%d4_byz-KH?;sa<%{yL<=0rR4^E+^gK_{q>jAy%t-E%A! zpXp#SAFGff=g#4j`51LclIFx^YUYI7lppau-B=;n#965{ubfC}E)6esVG_%ech5J4Bn50Ej z%_3T;Ea&U1m1qp57kn)*Ib~4SDmkz$SrVh*If`H3*JhN(h#{=-viPu6PV7|j#F`@Z zx9Hm2fJjqs3Tu{(Wwz#F*F>MQ9vc64UYn(|HmS}fk=7KQXR`zAS81wJtG}?zc!|Y3 zV|rvlQA2N8a&J1z#H`J}=P`+xXUAkUCI+)CSrht%5f_fZx3KIUE-iYImIH1Nijcgi zy`)e3P&NAoi$9Os|*2rk7l!HSJfx%s_v|%5cBB4p{SK1 zqR;8IA-wlmYy>Ts)q<5=E5$AmGA`iQDFGpLl${|+;j)`q8D_6o;7x4B*v5%GO4=&3 z+HBd|d)AIHmh11uq7*k)Y6gv#faf-&>{Za##SDMySYIh)G*>5pzI zwPTisdvvUjM$h(JGpQ@l4sFSdiewWq$DlKJXO*B2B@rvEt+JSS@Tnb!Aibw`RT~sg$9aH)UL9*4B?p)kT#hhJ!Pl@E9_m>fAD6A+SxBQy-cC zyQFvi16`m@eF^iEB&rY7{j%o3s;T-`&!_2L&N3;t9D1R#Wg>+l&B`opm8vy<7uQA60E>#>*?)fpGu(qn`kkl!G) zSlf(EW}FQUScoA7BF`hgbAz1H|1DL($qs;R6EWKW=4N-}8lD;fhf>vi`!uPdaOP%| z`_-?W?uhjbIHiJ`#3&djeqbQeg9~gk-S-%(0O0$b15diibQ-IR>h9BD!r2EZ2C3XS*uqo(7#L?A8HF zO=tG#foV~-%RKC5-ie@`v&dZ{W{E$7iiTH*<;&@!LW~wU1OyEh#m*C62COs&`yHx0 zItzz|>A;~d%V=i1!WjiI1716jwEC;)8xeStTVVH;6D z+C=wqAyA%nI1DsO)Us6}OiSLv?Kou^A^=bTj)9{2Zg$Ze?ZtR0{&Ly$aVHb?r_lEV zp$rKJ#}Wif(3bmRtW;kF{8mMuqlZrSEy_=cA~UvxbADC+{inWB`MOLRA~Hj~)I1)v zondZ?4IGyaZbSyCAJ5V#t1#bGdGtuSzl}Ng7>K@so-Nx8R{R+tgzI`EcQTwya0j}~ z0Z?&+L`C(5^1tLl^P*sL`W?!g%YVnOJ)06^Op8KU`lz_<3>AuSs8$z}-bV;T_Kh7m zEJ4q;flflW6>|>ITj)k+8+7TI{-|gbkbrs|4iB=8j%Db=xkTg3o$TiuSbfpJQFVg; zV%mdI+oqsXT<`L(*SL#3{msdL4+?$Z0KfZCi9{SUZ^003CC5d`EFNlHmH`kE!6pmN z3X@QTCMYx<8^&Eekaza#!!B;zz9p-_U{-EpsCeFQq`M;?0dOya?g4uCV3V?KF1qG7 z!$-qvUIbpSFPsMB&x(}cTE|u4DlrA+qh<)5S0hJ=DYu2o!MG3Z_LqtA;1CtiD>v zw9}>;9CCrx3AYMxCr>rGbj4)VOP=u;-N#HXApvATw+DOdNn_4i85)JS#}}M#@Vpg% zVOh6RUZ=S6S^2d1o7#H`p?{#zkT&V`RZFHZ(7B=%lakLIcZiA#2q*_K;VHt%%%jDy z-o;z(X=}6YnonwbO;>-7Viq5Nxuc&}VH0Dys)Cuk(T_PI0YyqtuLRml^?kh*wa>O0D^sv9JOd zh|jg8)uP62gKzi3n6d7HKosh6pTV^0k8>3jea7e`U?>VP1=b1ppE;`a_o-Wps>qQTCU@y9LaP-P zCNvbmtiweqd4%gNcA}64O=%Rpkg%|O`~)whB#YSbIoRFPPZ!N=z4mO3w8YJo?M)jl z05%LVeyjCbaPCYQ(#}s{{o$P5G+#Pd@y&FXW=R}A<}kV1G|OQ-MxIe;zZj|wJO#eX zK~>YD!BUdN!KO?lTyxy?#aVE{2$t%vCS)3KY{tTf7T6bx&&cUy!_+;~czb)z^iu2Y zJ9YK&^d`TW>VHBMe7LjyDlTSd;f*uW+sMCOOl~#R47q3b^JAvE7dpXRzr<85=Ir6# zf~ms8fVPh;+{LUkZa_hGT&KdQt+r1~1utqn2?O&-wY|oxUu>GInSV!Q<0)x7C-u|9 z;s<;ljoSQTTlf{{lOE&L>g>wj)83Kcp^+RBEaG(kiY%7Hw|6C8#P^eJuIX@fC1B}D z%Y+)*>+|`y1C8=uuD{reJstiJd(R;-X*BpJIvN3%gO7kIeb~pEQP(>y8q=PNegC8u z2+Ex<{Zk}Y6V=}Wd)EcO5P)2Jm-TqD?ol{ppe6Z5gXuhU?oEi8eotOk)9*GqX#Udu zZ(N^{0c`LqbRc!@vOIbOT1$^lxo@a>7qb`&IB;-rdu+3ta#H`6rAJM=4kcM=5cPhR zLAsMlT{`6azj9N)nL7mHSN&1sz3|1%B}?@7yu- z9a&FGrkq*1qma8yAY0mlc$-ON^&pKP!u%4F$A3A?sFOD3tm|ON)L^Amn8Uc%_-4lb zZ1S%m1faxJ&%;T9l&(U-emg}7=nzDJP^9RUj=u2Q`f3R|JLCC@m$9QeOD?38_I9Bs znslIZg>)WI02v65(saE~d*ibPR7C7V2LU_#YXy1JZ0dNEWuLm-s&lnXbN#$7VTtCv z7A9fp?ar5I|6G? zku^*Bxyski7(lWkUDfH=U(B=q)p(itiEylk5cgzkAWmBX)7`(&RV|TAtfj4fm&nry z=_?XMReIEo6@M*_ODt>jsL_=->;C=sVn>?7dz6#h)<|f3L(lxbIqVfWg}yAT7fVR& z+8vTd9PXQH<*w`BzHBWlEiP2pQ&3a>tVZr;+5^4fx0G!eqnQ(2t@oZDpE6s#GK5{M z3oqlMJTU6PhBr9uzMl5><*NgBr5#2NKOXMx5ujMVyI|+M@8B7igbUA2(Ymfr6?h9x z)Q0(tD~lv~va#=J-(EMoYIwEkti9$*_}H#2DBl;ZC*@q(M(2&Xk-_5tsH$J2#M!EII7 z zHvELcnaDqDW_w6dHC+ycoZ_mWU=Hfo9jk34;ZSCbF8}knMfS9?#pM9k`VZE*@`a~8 zxUKX)wY5O78MTQU*NY?BMo*56TrM}I_SEsgqdK`6PJFDCNcXS$u+{GgNKZ=oGZT(0 zEX8G^GD%Ky@5m)N_F(mV&6&S>*LU?BA8)4}>n(7+M+y-(R7f#c5U9@?DakY@Do2tU zH|rQ>gu^?)pQnee^VcZA8Jo)kwM0Wa42miK6XHVdAztGw*TU&bE~(4Wtor3dVV=?2 zSCjp`>esEc7sCdI;h#Gmm|XMlYmC&VQn=%GY(Tx^f|;}FPc`H{(>g-PC36@v`gDJ3 zw(o&O4jl{gu(|5ZIo>451;Uh#8fSQ1pPI%rG{>v}Rs0Q=!7&^2%pyft~kVlJ-D zPatyLGYnUVZEESX6N$X`W-Ti+$0mo)fIA%qdkMRfZ-i>H`D;Fh;TOv`UDmlt6)b%R!6~dE-9c`rGmpHv z(faW}dkbn>WnLy6 zDY7vP_a+IEF=n#mj(2#}<}if0!n0N`pW1GO2wT=eKhE)_nYa-?Y9T!M3#}~5K2a`c zVJBf`r{_dcM0lNS9wwZ%+p#2Fx}iZf76O4+dhmKbip302_bjA2hr0?_X zTf+-~c?e$0F-|zWV zOuM||g?I5^<<>#2bLDf?{WaNNC2vJ1KQhrLEEo~a(!P%*49krbH0Kb0X+`KgCzk+A z*&ukix7}m(gHr=(^pRayj%ACZY7_^jZBa(*ysU)FQTsXD=N^kw-iB^i&WY{fsLB;E z{pSw=N7(GG*%L{Y2iGd7X}wc_;$lpn1P$|)?`JT5oGpe*rduyOoAcE4YkNrYK6mi- zOS&aCK`_xXQLaUcdnbj9$}#Wv#PlQMQ;`0}{Q4>r&srde7u=w)CQRk_ zIl6~h=@|m^Wg|u8`orhN+4iOTcht}^$25+>yj;X~=U7IOD&BJhYZRY~Ci)o6&wstw z`(ai1`GF=piK>%-R+F!arnKckJRGBZM$4+VV1>D65R;gyER&`s?TEEe){I&Puz$&2Bl+xYQEe$De|jOeqg9%Q)00jDu=9}Ycfl6z>|V;`SPh)KnnM)OyV z7SW$$3MbjKWi-^IT#r1zr@ZNtr29t8T-Qp4h4UVFyER09T0Pw*;$$W`WIZ77_&r#B z`~tUJ@4cw(zdX)K#Gb0ZQ&eHHJ+DF0MntvuR(ZvP3gaYGqwhHcjSlCZi-xC7923%` zmDIJ~^uMzlb$#bw8@2i{jG4*k6*59~_H}8tJ*I5!EnBQA`^2lMY+3iLR#b|=1~^2P zwhj&-BlBdd=H!BO+bv*6&9UhF+4Pj_y0$;GOx)CsBhl04>VxO>VjG zxiRC9%AWS3c3P)y2kmv-5n1%C(*9lT56^vix|!w^5%a@nBycK*Xq4~3`GxGc!%tMw zA$d=V5ohG#(9}F&L)d)S?s;qB77pEnF6}=ed3WQ%(0cqGYh!)zVlUg1Nv_LDzxzA* zq{yLLt}=JS=Dc(#%Ks{NYa8da$MuV)r8aG7vy|5e$rhZ-B&YT}@QyZ(P;)1Js4I@p z5L)Ta6lVHCGl=TLAY*Ta%m+KLn6I^^#WY@Dv7{8nP)?}enUYl76Sixi`;)b$r*`W4 z%LmDHo;yK*uM_g|zRNquIZYKU8N61`Z;cGN|5Khv_Mx2kw{>pfIP~&}+KrE}dWMFq z!knE&{T|eto{zHEU$}bG>{iR~GWjv*ft)#N$#1lwtYc$6_efyBc}dxaF*L zZkCcd<*yNHWwdwmjw+{g-LGZ8nv98hcp@KTcRd#0D-wmywbs>9l$b+CdC2Kllu(V= z;tS52ji`qLRf8xm;8hH@7}2D6E6{#e6@Msgs182R1Y>4p2m*+g>SrSC`D3NLIq^!ZSGCjAyr1?sYJCi?6T0WR7DBDQmbnZ(?4^|ro#5oI z{A^_XuEtc>Hv4#NYK3m0W(+;=i?~#|p>nfWYX=3J+kGqC%JM?G>*RvgNWI?V*<6x! z#pY04r#y8`fWscwm^A8IXsCr>GSrEP6zmJdW!!X|>1}51#z3sUZQZ|Eb!v=$M%Lt1 zea{bW4`R1SxBsVn;K}=&D`$y@2p{01u0hQ&#<>&NJ@15H0Dt?jr>8;( z-=nC7NDS}<)u_j4QNwc8Hn0Z6ty&J1i;TS;IQ|lTDAhXmvs@5x6Tf?gHZn}kg%w(l zB0EpY4#CL4(OSW$qY=vu#+%{9Rd^eSpW+>DMSY5{18U^-DIpi-tQWLAZDn(jaFaX` zn+6VE?Z}}ud2sW{C=(jJ;>P!RBx*-lJXZnQ4^-5DwLP{_(8Ji=R)C_%p)gQmBRbZ~ z5RO`b%m~<~KOpMYxthe{a5@Vs#`&hCTSy!t(;2WA{isi-7^uY#$4})J=ao&LOEb(o zX<#PUdM}C@r-uyL?LFV|y*??r(@~Es2fR1e7wBguYDwcyZ$`-pzMea3Tba!W(_v*Pd!1%5|uZUxHwKJMkW`BKuUnbo;nwa>w?-q&*xz{3vKeTf?8$E{7b<-{y;|wwePL|W-D^s`n%rQP#o+mLw9>M z3v8c8<_gNnT5`nH42l+7crx8e`=9lajtMc^bS9!`Sea$FRY=YkCp#5O!_|dfGX;rO z(mMOWNGtLoHL`x+WZW=vWsyx4vthM`UdZJ+MJ-aq!^OI^`*rKYmR(Khe_I&5qB?xE zO_kggxOgFU(eFSsb)ekK(q+e)gS)p}ki0G75hq&X{C(hBTV9bf8orkuzcQjQBo{vJ zVR?zJnVG8{lQO-goryIyx^FbqZ3&6`m5@HAX1gQ9>1s&XF2|$ z*ScnLU0kTF14*B*is3ewO&6&3FZ$W{DyXXBJP8lp`KG#Ej!u3#T=YmWl^<7D+}p6CEw`(5G9K3x^(v7>pG(AR)NW_Dh>*#-RyDa`!~()_#v7?GPOMy zBYP)8ry%Th@d2Ps^}1?3=6oQ$8rsq0neqh5bt&&%7_Hd?=T0 z?2CtD(Vbf2uyq6K`jsp}Icb2)e;>QsTk!PI8+)@oH}*gO@USxV)ex7^P^81T16$}gwmB>KM1Pd?WF zI;m;-_!0kAS`n39p1n*+Df%hZkeG5|?+<5w7~Y|aH94@E3z(}!HHf*+)s~gPUCw=f2*z?S z*{eyjEI(jE4@#Yvrec}oNjO-#Xz+v#uR_0rK1_mwsiE?@;gkw0Z*Y1^X4>(WXZZJw z$_2rIhX~)`uL%pzA96=-x^>E}R@A70*J6K=a;L!a4?}Xd_il#W32Lpl@d>~Swmob& z1W)QCZ|)XY_PVv`wir{~N=>>8GUS3_-Wm+p74{;Pr{Kh6g&h0RrLqUCdh#?K+2EY{ z#eyuKuYH*Q@??a2ZimM+=`DdhN5+z`EuR1^VxQVuD3QksWXAgArDUD!7}+VxmIGpi zfjv_N@QwR1C{*&^bdJUMDvD}(C#|j9825o@eCH(qxVx`wIx2LMjtyK)E3wy z#dTqD!d0k{2q0m((jO%3+AE_sl`yyaFbY)%@k;&sncHOJH;+qAU~*JDr=QUpEpZs7 zUr;%WqhzLT@2wlAgky;c7vAVSePA6kmhGJTetR-sGOu^X7Vm!Fx^!1R=`H?YIzPll z_SLe9JBvhHD6%m`2p}qHBcYM#iwN%)?#Ix;tAMx9KmhuxNZmHwpzYSycM*p~OCmk|4 z6a5e$Dz8x?c5K1%tuS--k|U81OA%eX%i_&f^Cn4%9L?O3j&Ex+NLB_WurzX)U!C9I zRhs-_ehBgiby>ed`^mO;_Y7~ps=EK(@l^26a?Rn6`Nto4w=e(gokN0~^?NW%>PUxU z9)e8H*cjd(k&-Fy1?@@ps`RC9%{>uS!XfWY$fbKdCP>ND!f;Q$Y=G%*fSNOmy(F=4CdGtBPo>r0JV^5OLP%#^GJRVBtkd zZQ5YYQTALI6$Fm=Z-(WdO{ACDay_^E9kg)DRdY^-vb!eL?l`3Jr34SQr}xaT8XPbL zVy5D%d%h6qx?>Mr_2_~Fu60)lP13DaS$&&-G!~_gUF=LxggHcdG3-vc;Tl?4M^1C$ znksRS8qp57QhW1UNiFJWRjufH-1-HlvPSN$SWPYIHZ44T*QfNClib-2vk7ijmbW&h zFRI5bHi#pM&0}QS(8(=zd^=)V?hc!p+h%A|D4%oudX(rIHon~D6>jyJL`@@6^?g1m zX@5Mxa(=|85yJDjrFKCl^HK?=Z=+UV%%c{hhV7FQ8>q*lXf>{1B`K zG+B_nf=6edA#^UvX}K^ZwThglrs*ZT>k?8h^ck4`GWCPFLpTZ+b?>%sf_CM@7HR8pnrGPQJO0Izrfw{)iub!x-w2)1 zJ#V@JnKq?UVQTi_wVniRuj-VNmYkGWDe~6Fk=O4P7&peBga7ANb~9^eWkY`J2LF^=lsl-eWSu-y?2gqqvAC;cx)L7E&rv_N@d<9%Oca=1IM24 zqI!GYN1b27n_@;KSZ7KZ&(aEIZf-@nZGw+LUO^2or{pSDLQ4;*kHDO)TwUH`(x0^f zMF}FlS$7kHpL)pq&yU0Z7rZhD)!+Kd=zHXPM#3Luw%ks2J2rvz`@HGBW~|VVkJ!fy zD%r-A_2(bszOk5Lv5=3BSQcJq&3Uf5(R)iRGMP2tykZUrh{)RwE^Q8(uffiWR`WID zR^*>9a7?3BSW>iciE9TpE}Iw*5s4-T$J zQ+g*#(f6P6tmKk|)zW}N)(O-8tu&;G`~RVyLZkUKgv5V7zcO5E*PiQD`qQifFDj{} zKd)h9!-T}PSRcXh7euTn91R}4LgQN=&BBlwq@?LDuiKSF=7s*68iM_K%5xalVD00i zxF4a8tJy^IxX_BCB^AS9U^7@wEIVB?{?0fKOP5#}Co$_kTcv$(!q?RxZQI}QAj887 z3DZ(~_Sk;QJF;42L2i^e9Uk5T_Z1ygwIk*qnpc;3=c80v8@E4s*6_^~<*~V4Io|lo zp9{hhzho<>$|ZalqyEPxER)D_skPRsi=S}OJH%zNbK^+*Ah|ezEn?-@De31ov6`z{ z={8NQ#`YYf;JCBARNH3O!Qu1k#eaVV$iNK#P-1-ZzofB35N1*OMGS%ym--uV*}}od z)4P}@82Kw-bO)Wn@!Ocx7KRtnQ?Oe{M`V9B$^%C`( zS=+yi@R>2DWmP05a?>1OY*TyIN^0^PqC1t6-+{Wxjq{7A`EzRd3X}I3SGuY+a>baULrn@_y%wi(z6K7(>APeetEE1KIUEA`er9gYqY?n)6`=^<;9a{quppz_o%-sjY%HA zta`xv#a!a-oRa81l+tmYgRe8iz0mFerhnX4@Lp(>hKUB8fiST>&r=~zl^)bajsjfhE)`11BEEY6Nnw=5B4? zo32M|3K#N$<<1?tN`ID`1q%C#Kixuhm&WNZ|+ol=V+pFRD*T9 zRaqnX@RY!ftbtpDZ$GjOTUojhPZ~w!H+zNnH;anD5={csG~_0HV96aNofqnR7k|@U zU^?PrMeAtqmyJ=^pQE~LclmANFHRE-q&;s~O5T5SQ)x~3yuAh?o#Tn8hQjx_u!@f) z!iu7>oq2FWJs$si?h4P((8uVeah%BY;51ROv3z~jE0}Xztghz8@A?qCd+-W`$9Sb? zuaN2HrKMMa=9HIL5`V!k;U^#ch>*Q~>aLInW{m`e?4R;myl&EW9V?d`9#$o!#++BF z6=v4U2d>I~{3EkrXC9O5(y9>VOGt^Ek9m8dnnT(%1cpKzYlucB$&YnoVwBgkjWy=$~sC3=uPFlMLzr&SD;x~kt zE_iQt`>-Jv%AWA{xAPfCb%KDV?R_c2@GpVt-Y%WLFo~W$5Vm)sXnf z+oj{$&Fq<;;ilttXbKL>h&c4^A_oz4btytWl`;1H{c3H zU_pprMkh(lZ+N;~^~--?^*A>!QkCZ|E28hyBQn=wt|}ZWda-GyuY-USJt678J=!}s zE-13?+|^^{j~C1wCQ$}SyOu>@OzaOEaGHlqXw2X>c2G3@6hh~XLMp^2Mz-zgex=U} z5e~L+bUNh2nk1XZ zPZzKLhWFS*6I!pYRH@8Vxw>{Iu2H#CYBt1HiNr%x3KR}mi@bOKwRgyMos9;GyM9>< z`DQ>L#=N1!68j4C8q-kv;$zSrY>45t`IH)qmp_OpPf$B118PN4ou@ACxBjE@_8Io_ z5-Y@oh}k}-Ow3eKtvwsb8J5bcyvLMJY4D=k2h&rObgpr2e66BbKFygbAQF=@DD~uO8+grxyv4!Qj#W;KaX!% zju_tLU~u9(=k={m%ODZnT} zKr3M#XBF_|$Vp@~z9XU~8a%O6V&X%g>POa`9sRQx5+#j~Kst6zb?L*v`ID$z3{{V5 z^YQCK{n{PJwKPHt$K)vnnv|}7Oj%)e;M9d!*NUm#p6-vjjT}==7dvC-D_&CVq_a%& zo4^FLq}Pld8LrV*Yq^p}cw6CyD?zg1%1sc9kPm`aWjLTxDTlo^J;#kS{4Xtx;;#v< z@K0m~(N&Kyt8m8z_H>8hgm=4rk)cNUP&+SmjE@XEnqgu&%NA0(aZvPbCOOw2&{f>|_dZo6e0T~}b=T~OW%n(%@4-A{6~KLOtW`h@^!L-_~|@sHU| zWc&6tVYkvzr{G+zzd`_S3%7y>;!=9=)Ppkz5nQF?fkw!kjN7wt$V+N@EW8bX_ztLB zQ-Q;BlWwJe(ldRq4~39HH5XzRZIw5Hr^jFOh+qA}-m4`Ql|}ZwJD!?5_>ywcvkyBq zkixBIEs-DZ;$zR|EUQA?P5qN1kzvB+thfCFg#+^mbc|VneZ4b(wX^Xqbgssjb)^#Y z`T%>Max*Hh=N%>ym&M^7P!yp4z<+vqueN?NbD#M>>`3Z2FP~5YG+9I=uM(cadg<2A@hcu8H3mHIm;dtI28e=eEt|q{#kqZipclYR9i3v&mtkevM z6y!2>G~>jUs~RCG{SGw0^-E_@)ax-5<$^WYN{CI9+I81gqG5>ejw!*D%K z$r#}m{54TMI_FEuqC$nYFZ(GS0<5Jj&ME?~ze^ao@4XM%P7eZZ>N!gUV644nJ?aEPw1h;qxyTN~tg z9_j5mG|&VyrShTBi7g^tj1%1%DHVyh`ew}GGC)vpGv)QdklAkoBU^nMUGDPYHVxZ{ zgRO5b&Z1sGvkz|bXWXJsfa#Vw>1{JPIUAD*w<{@6*iW^i8wjeB_LksJ+f&g>=yP}} zlv3&$wv?2Vx7{<(dk0W)Odcu7>#5aQz`Mdj@^--G_7lY0KY&AElGQF1F*w2kcc6Vl zgyx|Ll@45-?Bz)Gp=b%#Sfts~kWn0y?{}4f3B@R6B2>8#8gAAXL3^j~Y|;Iy7H^Jz zO<)MU)!`HxY`mYXE7fE|5m6j{XEEb*KDPC(1y3{nE*Wb`i}fk~ZT$SRX9!I|1~xu= zri?Ah=!9oW#RW^f;W?Jb5d@73c;eTCp-K!u6t{ZJN8C$2sOv&;8K{iqu$)LBOXiV? zTSSqgIM1bt(R(su`*{)N@TA;JaH+MsUAeSt?i1Rpn+c(1uNvC+f|n&6!6Qt$@???v zEd4s1Dm}Xxe60j)FOX{Y%Z-H(DyM>VK@>Dhqq&e%e;op6;MNI1?Q_=H4@;*dXk}Xw zMW==Ua)afA-VI!*md7z&vXag#l!P-@GZZJVYZVa(g^Ldl=;x4|TtJ%lg;EHe6TLFJc+gM;Y2lQ)(=$BtMsiE^LG@x!^B5!fe)l@>s6fR zF_w>piSM;4Trci>_{Zeh-4CBDTw90Fwg^?Yk^zGe8MTh(KOxE-R_&l~)$LXpi%i_4 zsS%qIagc()vMcR;qBYcf(Bs~;)=)S#SF%AAe;ZDoU@3E$hCVi?zrq#TG76a3teNIY z_->LHXE!N5abee~zDR+K=K ze^=R)#DtV31y~E<%se{-X;|cL+taXQ9bylo+&##IaJy$m@1t#F`9c;7 zR|c(Swl4~_o~{YB3D}%lUY+4sd7Cjhi@Jq$r{hqSKR&v--E+%J?OI&#U8MJZEQzA6 zcPKr_F+yoQTzW~8*-Wi3kWhse!Nbx6dU?qSBzgy7%O{wy`|w-4Gfw$-zc2FJDo<;r zhEvJ@n@~k4*oqZn=7|2dU)t}BT)?|z*QC??tA`eDL_f0+r9g)bwjr}P*aeI*LROAk zh#uK8?KrNf7Hfp*V_VfrjVz-o1Ec8DA7jHT3qp@p9sGHSsEy8I_AVJK&JWu3E?AqT zTjw;&^}cFyMIN>M;sy*Mp+hdE^Ip}!5Gr6Q`*i=J-{#QD3+UxHQDy4?2Q(N#-~HG#GtAOlfXpfR%1 zC^0#dj@(zlgfn~M18sCv1XuR3h`pJyZ^`rRs%2;@U>lb1Yck>Y6mpq3_-w+Erk zHppP=CeYSP*InX}2OfqYJ}f;uH{+5TXMTgvE!wNW6GCIu3 zL=ij?n<_I8Vs+Y&OSP;ALsviZ>Dh}TK}j)LPLerkcH1^;Yy_52T1Z;%2^=7|i@s1UFmcFVERXa#h0Ja!7qgAZO3Wt?7a*MuIkJ^kyHyS<38s`v7T zRsk|qz#z@~Om7{>O^;z}p;~J09i`um--0JQcO90w+eumFZU@@P`jM-uAvdevQ(o;r6NN$evz#Hub_)%ZDvTUF1#7cdh1EP z6)|Cd8AOw^Ol}w{y>4){LsrXj?BD8%6DpcjP zW2$~TmE%PVSBvKx%#flUW%<~n)@#-QGXsG5YT~3gD7?y*ksz%Ght6Id$y%p}0Ekv= z4R9nu@a&P!=#tWq`Rthw8%Wkn|5tgfsOLJ5UHGQgf*bsmGE|%>=^brSfY-WkNuQ=j zkWstWS}-l=GZxZ$-v+!x~t_bW;EdM%c?5PGC=iHk8!;jnhEg#6@((s2a? zJb`4!e-O0A+Iy^g4^(&|xY8Af0W*ak1-BMNT>c87a{|gvadf*+#JVvb#sKc5U^fe1z zPUTT@kouvzNb!0V*qN{yUQzb^{4-#ELA4YfY>N7sq_aSznPf~aoY)EeIZH2cjs7Y5 zkv=?tNizCv05%&4lMg=hP|70{Rb6Hk!!`wAk`=K%i|H6jfFk;hRR@Z7PaVttdNl~$LW+uml#Ane# zzi%+(KcH>hFN7~`emH~blO~UKQ))|Kf-~?%ambmK6(1KVk`Dil+K<%$%@Bzq-3lGVlSAF93IC zp@3chAGzdY_9_21cEKtCN2ktX%DZP?>?gux6wv=6Q(YdKvdlhcbl9~JJqeRt7_2%cQIW zjm4bR%((Aky1!*)l6qhIPg{t)w_0vI&iK2!0{MhFN%s5ScfWq7)ZXFD1ek#u(s{F* z$K`y-UlPtksJI!p<%)3?t^j3K=%M=b*Zm;?gV@?f31|bC#ARQC*AzvQdM{u;IXed) zSyS`a?jD!Mbz0r5l~ST31C>n9bq}nwe!0hpqCvQcPri;b>MO~inahbY*A({NH`+r6 zy+dbXeNdtHcBuYWNihpzX@&M^(+w5tn{mQv@v}OMc z!9W9m5GG7Zn9dNApt8$>tAp}PskU7yPIWkU_?3e)Koa|W6Zl?-ujxlYyiUhP3+M~^ zHZ0^qN85D5;0av0i>ndX_wdZ0u7I%tj^X__Ptys_KJ&g+Nv^~OKZUgAe_xmf2|=yf zw%q);?;fTpBUA1Mdx#e-$RhR$fS?%XNu8fpfPnpE9$q`qsC+AHR)^!5UR z3Ug;a$dWR#3Y387TKH9S)27;0y)`+BLqgGR4(dXI+VPP&DQ@(939j(Z6vU4OJ^IV{26VxF(kN2y=)ky&*C=#?yb|J(g&rq@bN zXoH#eb4qP6kocFPYl!NhMkWN0<{5|BZVbOIFQUo`kLG2YD~rAGndXf1Q6l6%`|qhN5K zS`6PS!8DNiFzP4ASuXz;Gh(QBWv+sxmvd1I66QMUV*SQ)9Te||0{(obXt>@W6g)GD zZ&(buS*iXr5x;TZ28F}rF?}b_$kN44C{P zW<1BaN(l-0mv$i0XEV_cTMop!cLW@li1SqWf*LUmu3-plfP*iP0ab3*Lhb3Om_@=m zFr_rJy5`nHoZYt)RgAl(Lt^2S~`l?kEno%+Sub6OEP?s!%sDQBJ$ z)Hk`w()YP@*h+21Fp0&fJE`+Ms>1+UYw5Q+I;aZ=Rdk9Oy=e9M`)tktR8^TRqVXKA`jggbDyeeP-E-LH^-zh{@O?avQ>=NgzR z?lc&;;XkNJ%y$TA38&q2D>pZ2Y!eY?BPel*8n`tk z%lU9V@lMN^WBMthGrebRy=wcNYqHnge*5R(ZF07oeR^(A8%kb7Zhn)OKHQBQKtA-G z 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 diff --git a/doc/source/_assets/ASAS_product_chart.tex b/doc/source/_assets/ASAS_product_chart.tex index 208c08f..6378ee3 100755 --- a/doc/source/_assets/ASAS_product_chart.tex +++ b/doc/source/_assets/ASAS_product_chart.tex @@ -63,42 +63,44 @@ \node (B)[shape=coordinate, left=1.375cm of A] {}; \node (C)[shape=coordinate, left=2.75cm of B] {}; \node (D)[shape=coordinate, left=2.75cm of C] {}; - \node (E)[shape=coordinate, right=1.375cm of A] {}; - \node (F)[shape=coordinate, right=2.75cm of E] {}; + \node (E)[shape=coordinate, left=3.00cm of D] {}; + \node (F)[shape=coordinate, right=1.375cm of A] {}; \node (G)[shape=coordinate, right=2.75cm of F] {}; \node (H)[shape=coordinate, right=2.75cm of G] {}; + \node (I)[shape=coordinate, right=2.75cm of H] {}; % Level 3a products - \node (atl06)[l3a, below=0.5cm of D]{\textbf{ATL06}\\Land Ice\\Height}; - \node (atl07)[l3a, below=0.5cm of C]{\textbf{ATL07}\\Sea Ice\\Height}; - \node (atl10)[l3a, below=0.5cm of B]{\textbf{ATL10}\\Sea Ice\\Freeboard}; - \node (atl08)[l3a, below=0.5cm of E]{\textbf{ATL08}\\Land/Vegetation\\Height}; + \node (atl10)[l3a, below=0.5cm of E]{\textbf{ATL10}\\Sea Ice\\Freeboard}; + \node (atl07)[l3a, below=0.5cm of D]{\textbf{ATL07}\\Sea Ice\\Height}; + \node (atl06)[l3a, below=0.5cm of C]{\textbf{ATL06}\\Land Ice\\Height}; + \node (atl08)[l3a, below=0.5cm of B]{\textbf{ATL08}\\Land/Vegetation\\Height}; \node (atl12)[l3a, below=0.5cm of F]{\textbf{ATL12}\\Ocean Surface\\Height}; - \node (atl13)[l3a, below=0.5cm of G]{\textbf{ATL13}\\Inland Water\\Height}; + \node (atl13)[l3a, below=0.5cm of G]{\textbf{ATL13}\\Inland Surface\\Water Data}; \node (atl24)[l3a, dashed, below=0.5cm of H]{\textbf{ATL24}\\Bathymetric\\Elevation}; + \node (atl25)[l3a, dashed, below=0.5cm of I]{\textbf{ATL25}\\Lake Ice\\Height}; \node (atl09)[l3a, right of=atl03, xshift=3.5cm]{\textbf{ATL09}\\Calibrated\\Backscatter\\Profiles}; % connection coordinates for single arrow out of ATL09 - \node (I)[shape=coordinate, below=0.5cm of atl09] {}; - \node (J)[shape=coordinate, right=5.5cm of atl09] {}; + \node (J)[shape=coordinate, below=0.5cm of atl09] {}; + \node (K)[shape=coordinate, right=5.5cm of atl09] {}; % Level 3b products \node (atl11)[l3b, below=0.5cm of atl06]{\textbf{ATL11}\\Land Ice Height\\Time Series}; - \node (atl14)[l3b, below=0.5cm of atl11, xshift=-3cm]{\textbf{ATL14}\\Gridded Land\\ Ice Height}; - \node (atl15)[l3b, below=0.5cm of atl11, xshift=0cm]{\textbf{ATL15}\\Gridded Land\\ Ice Height Change}; + \node (atl14)[l3b, below=0.5cm of atl11, xshift=-1.5cm]{\textbf{ATL14}\\Gridded Land\\ Ice Height}; + \node (atl15)[l3b, below=0.5cm of atl11, xshift=1.5cm]{\textbf{ATL15}\\Gridded Land\\ Ice Height Change}; \node (atl20)[l3b, below=0.5cm of atl10, xshift=-1.5cm]{\textbf{ATL20}\\Gridded Sea\\ Ice Freeboard}; - \node (atl21)[l3b, below=0.5cm of atl20, xshift=0cm]{\textbf{ATL21}\\Gridded Polar Sea\\ Surface Height}; + \node (atl21)[l3b, below=0.5cm of atl10, xshift=1.5cm]{\textbf{ATL21}\\Gridded Polar Sea\\ Surface Height}; \node (atl18)[l3b, dashed, below=0.5cm of atl08, xshift=0cm]{\textbf{ATL18}\\Gridded Land\\ and Vegetation\\Height}; \node (atl19)[l3b, below=0.5cm of atl12]{\textbf{ATL19}\\Gridded Ocean\\Topography}; \node (atl23)[l3b, dashed, below=0.5cm of atl19]{\textbf{ATL23}\\3-Month Gridded\\Ocean Topography}; - \node (atl22)[l3b, below=0.5cm of atl13]{\textbf{ATL22}\\Mean Inland\\Water Height}; - \node (atl16)[l3b, below=4.65cm of J]{\textbf{ATL16}\\Weekly Gridded\\Atmosphere}; + \node (atl22)[l3b, below=0.5cm of atl13]{\textbf{ATL22}\\Mean Inland\\ Water Data}; + \node (atl16)[l3b, below=4.65cm of K]{\textbf{ATL16}\\Weekly Gridded\\Atmosphere}; \node (atl17)[l3b, below=0.5cm of atl16]{\textbf{ATL17}\\Monthly Gridded\\Atmosphere}; % Legend - \node (legend)[right=16cm of atl00, yshift=1cm, minimum height=0cm, minimum width=2.75cm]{\textbf{Legend}}; - \node (level0)[l0, below=-0.1cm of legend, minimum height=0.75cm, minimum width=2.75cm]{\textbf{Level 0}}; - \node (level1)[l1, below=0.1cm of level0, minimum height=0.75cm, minimum width=2.75cm]{\textbf{Level 1}}; - \node (level2)[l2, below=0.1cm of level1, minimum height=0.75cm, minimum width=2.75cm]{\textbf{Level 2}}; - \node (level3a)[l3a, below=0.1cm of level2, minimum height=0.75cm, minimum width=2.75cm]{\textbf{Level 3a}}; - \node (level3b)[l3b, below=0.1cm of level3a, minimum height=0.75cm, minimum width=2.75cm]{\textbf{Level 3b}}; - \node (extern)[ext, below=0.1cm of level3b, minimum height=0.75cm, minimum width=2.75cm]{\textbf{External}}; + \node (legend)[right=16cm of atl00, yshift=1cm, minimum height=0cm, minimum width=3cm]{\textbf{Legend}}; + \node (level0)[l0, below=-0.1cm of legend, minimum height=0.75cm, minimum width=3cm]{\textbf{Level 0}}; + \node (level1)[l1, below=0.1cm of level0, minimum height=0.75cm, minimum width=3cm]{\textbf{Level 1}}; + \node (level2)[l2, below=0.1cm of level1, minimum height=0.75cm, minimum width=3cm]{\textbf{Level 2}}; + \node (level3a)[l3a, below=0.1cm of level2, minimum height=0.75cm, minimum width=3cm]{\textbf{Level 3a}}; + \node (level3b)[l3b, below=0.1cm of level3a, minimum height=0.75cm, minimum width=3cm]{\textbf{Level 3b}}; + \node (extern)[ext, below=0.1cm of level3b, minimum height=0.75cm, minimum width=3cm]{\textbf{External}}; % draw arrows between nodes \draw[line width=0.3mm,-Latex](atl00) -- (atl01); \draw[line width=0.3mm,-Latex](atl01) -- (atl02); @@ -110,24 +112,25 @@ \draw[line width=0.3mm,-Latex](atl02) -- (atl04); \draw[line width=0.3mm,-Latex](atl04) -- (atl09); \draw[line width=0.3mm,-](atl03.south) -- (A.north); - \draw[line width=0.3mm,-](atl09.south) -- (I.north); - \draw[line width=0.3mm,-](atl09.east) -- (J.west); + \draw[line width=0.3mm,-](atl09.south) -- (J.north); + \draw[line width=0.3mm,-](atl09.east) -- (K.west); \draw[line width=0.3mm,-](A.west) -- (D.east); - \draw[line width=0.3mm,-](A.east) -- (H.west); - \draw[line width=0.3mm,-Latex](D.south) -- (atl06.north); - \draw[line width=0.3mm,-Latex](C.south) -- (atl07.north); - \draw[line width=0.3mm,-Latex](B.south) -- (atl10.north); - \draw[line width=0.3mm,-Latex](E.south) -- (atl08.north); + \draw[line width=0.3mm,-](A.east) -- (I.west); +% \draw[line width=0.3mm,-Latex](E.south) -- (atl10.north); + \draw[line width=0.3mm,-Latex](D.south) -- (atl07.north); + \draw[line width=0.3mm,-Latex](C.south) -- (atl06.north); + \draw[line width=0.3mm,-Latex](B.south) -- (atl08.north); \draw[line width=0.3mm,-Latex](F.south) -- (atl12.north); \draw[line width=0.3mm,-Latex](G.south) -- (atl13.north); \draw[line width=0.3mm,-Latex](H.south) -- (atl24.north); - \draw[line width=0.3mm,-Latex](J.south) -- (atl16.north); + \draw[line width=0.3mm,-Latex](I.south) -- (atl25.north); + \draw[line width=0.3mm,-Latex](K.south) -- (atl16.north); \draw[line width=0.3mm,-Latex](atl06) -- (atl11); \draw[line width=0.3mm,-Latex](atl11) -- (atl14); \draw[line width=0.3mm,-Latex](atl11) -- (atl15); - \draw[line width=0.3mm,-Latex](atl07) -- (atl20); + \draw[line width=0.3mm,-Latex](atl07) -- (atl10); \draw[line width=0.3mm,-Latex](atl10) -- (atl20); - \draw[line width=0.3mm,-Latex](atl20) -- (atl21); + \draw[line width=0.3mm,-Latex](atl10) -- (atl21); \draw[line width=0.3mm,-Latex](atl08) -- (atl18); \draw[line width=0.3mm,-Latex](atl12) -- (atl19); \draw[line width=0.3mm,-Latex](atl19) -- (atl23); diff --git a/icesat2_toolkit/convert.py b/icesat2_toolkit/convert.py index 1e88e3b..d38af4d 100644 --- a/icesat2_toolkit/convert.py +++ b/icesat2_toolkit/convert.py @@ -570,7 +570,7 @@ def attributes_encoder(self, attr): if isinstance(attr, (np.int_, np.intc, np.intp, np.int8, np.int16, np.int32, np.int64, np.uint8, np.uint16, np.uint32, np.uint64)): return int(attr) - elif isinstance(attr, (np.float_, np.float16, np.float32, np.float64)): + elif isinstance(attr, (np.float16, np.float32, np.float64)): return float(attr) elif isinstance(attr, (np.ndarray)): if not isinstance(attr[0], (object)): diff --git a/icesat2_toolkit/fit.py b/icesat2_toolkit/fit.py index 1c3330b..ca8c887 100644 --- a/icesat2_toolkit/fit.py +++ b/icesat2_toolkit/fit.py @@ -30,7 +30,8 @@ from icesat2_toolkit.utilities import import_dependency # attempt imports -neighbors = import_dependency('sklearn.neighbors') +sklearn = import_dependency('sklearn') +sklearn.neighbors = import_dependency('sklearn.neighbors') # PURPOSE: compress complete list of valid indices into a set of ranges def compress_list(i,n): @@ -526,7 +527,7 @@ def reduce_histogram_fit(x, y, z, ind, dt, FIT_TYPE='gaussian', # using kernel density functions from scikit-learn neighbors # gaussian kernels will reflect more accurate distributions of the data # with less sensitivity to sampling width than histograms (tophat kernels) - kde = neighbors.KernelDensity(bandwidth=dz, kernel='gaussian') + kde = sklearn.neighbors.KernelDensity(bandwidth=dz, kernel='gaussian') kde.fit(z[:,None]) # kde score_samples outputs are normalized log density functions hist = np.exp(kde.score_samples(z_full[:,None]) + np.log(n_max*dz)) @@ -654,7 +655,7 @@ def reduce_histogram_fit(x, y, z, ind, dt, FIT_TYPE='gaussian', # using kernel density functions from scikit-learn neighbors # gaussian kernels will reflect more accurate distributions of the data # with less sensitivity to sampling width than histograms (tophat kernels) - kde = neighbors.KernelDensity(bandwidth=dz,kernel='gaussian') + kde = sklearn.neighbors.KernelDensity(bandwidth=dz, kernel='gaussian') kde.fit(z_filt[:,None]) # kde score_samples outputs are normalized log density functions hist = np.exp(kde.score_samples(z_full[:,None]) + np.log(nz*dz)) @@ -989,7 +990,7 @@ def calc_first_photon_bias(temporal_residuals,n_pulses,n_pixels,dead_time,dt, # using kernel density functions from scikit-learn neighbors # gaussian kernels will reflect more accurate distributions of the data # with less sensitivity to sampling width than histograms (tophat kernels) - kde = neighbors.KernelDensity(bandwidth=dt,kernel='gaussian') + kde = sklearn.neighbors.KernelDensity(bandwidth=dt, kernel='gaussian') kde.fit(temporal_residuals[:,None]) # kde score_samples outputs are normalized log density functions hist = np.exp(kde.score_samples(t_full[:,None]) + np.log(cnt*dt)) diff --git a/icesat2_toolkit/spatial.py b/icesat2_toolkit/spatial.py index cec6bcf..66b4cb7 100644 --- a/icesat2_toolkit/spatial.py +++ b/icesat2_toolkit/spatial.py @@ -46,9 +46,10 @@ from icesat2_toolkit.utilities import import_dependency # attempt imports -gdal = import_dependency('osgeo.gdal') -osr = import_dependency('osgeo.osr') -gdalconst = import_dependency('osgeo.gdalconst') +osgeo = import_dependency('osgeo') +osgeo.gdal = import_dependency('osgeo.gdal') +osgeo.osr = import_dependency('osgeo.osr') +osgeo.gdalconst = import_dependency('osgeo.gdalconst') h5py = import_dependency('h5py') netCDF4 = import_dependency('netCDF4') @@ -189,7 +190,7 @@ def from_netCDF4(filename: str, **kwargs): fileID.variables[grid_mapping].getncattr(att_name) # get the spatial projection reference information from wkt # and overwrite the file-level projection attribute (if existing) - srs = osr.SpatialReference() + srs = osgeo.osr.SpatialReference() srs.ImportFromWkt(dinput['attributes']['crs']['crs_wkt']) dinput['attributes']['projection'] = srs.ExportToProj4() # convert to masked array if fill values @@ -294,7 +295,7 @@ def from_HDF5(filename: str | pathlib.Path, **kwargs): dinput['attributes']['crs'][att_name] = att_val # get the spatial projection reference information from wkt # and overwrite the file-level projection attribute (if existing) - srs = osr.SpatialReference() + srs = osgeo.osr.SpatialReference() srs.ImportFromWkt(dinput['attributes']['crs']['crs_wkt']) dinput['attributes']['projection'] = srs.ExportToProj4() # convert to masked array if fill values @@ -327,16 +328,16 @@ def from_geotiff(filename: str, **kwargs): if (kwargs['compression'] == 'gzip'): # read as GDAL gzip virtual geotiff dataset mmap_name = f"/vsigzip/{str(case_insensitive_filename(filename))}" - ds = gdal.Open(mmap_name) + ds = osgeo.gdal.Open(mmap_name) elif (kwargs['compression'] == 'bytes'): # read as GDAL memory-mapped (diskless) geotiff dataset mmap_name = f"/vsimem/{uuid.uuid4().hex}" - gdal.FileFromMemBuffer(mmap_name, filename.read()) - ds = gdal.Open(mmap_name) + osgeo.gdal.FileFromMemBuffer(mmap_name, filename.read()) + ds = osgeo.gdal.Open(mmap_name) else: # read geotiff dataset - ds = gdal.Open(str(case_insensitive_filename(filename)), - gdalconst.GA_ReadOnly) + ds = osgeo.gdal.Open(str(case_insensitive_filename(filename)), + osgeo.gdalconst.GA_ReadOnly) # print geotiff file if verbose logging.info(str(filename)) # create python dictionary for output variables and attributes diff --git a/icesat2_toolkit/utilities.py b/icesat2_toolkit/utilities.py index 50ae505..2894713 100644 --- a/icesat2_toolkit/utilities.py +++ b/icesat2_toolkit/utilities.py @@ -132,9 +132,10 @@ def import_dependency( # check if the module name is a string msg = f"Invalid module name: '{name}'; must be a string" assert isinstance(name, str), msg - # try to import the module + # default error if module cannot be imported err = f"Missing optional dependency '{name}'. {extra}" - module = None + module = type('module', (), {}) + # try to import the module try: module = importlib.import_module(name) except (ImportError, ModuleNotFoundError) as exc: diff --git a/scripts/MPI_ICESat2_ATL03.py b/scripts/MPI_ICESat2_ATL03.py index ff86838..030e2d2 100644 --- a/scripts/MPI_ICESat2_ATL03.py +++ b/scripts/MPI_ICESat2_ATL03.py @@ -93,7 +93,8 @@ # attempt imports h5py = is2tk.utilities.import_dependency('h5py') MPI = is2tk.utilities.import_dependency('mpi4py.MPI') -cluster = is2tk.utilities.import_dependency('sklearn.cluster') +sklearn = is2tk.utilities.import_dependency('sklearn') +sklearn.cluster = is2tk.utilities.import_dependency('sklearn.cluster') yapc = is2tk.utilities.import_dependency('yapc') # PURPOSE: keep track of MPI threads @@ -578,7 +579,7 @@ def main(): # and that the spread of photons is greater than 20m if (pe_sig_low_count > 10) & (along_X_spread > 20): # use density-based spatial clustering in segment - db = cluster.DBSCAN(eps=0.5).fit( + db = sklearn.cluster.DBSCAN(eps=0.5).fit( np.c_[distance_along_X, segment_heights], sample_weight=photon_snr) labels = db.labels_ @@ -772,7 +773,7 @@ def main(): # and that the spread of photons is greater than 40m if (pe_sig_low_count > 10) & (along_X_spread > 40): # use density-based spatial clustering in segment - db = cluster.DBSCAN(eps=0.5).fit( + db = sklearn.cluster.DBSCAN(eps=0.5).fit( np.c_[distance_along_X, segment_heights], sample_weight=photon_snr) labels = db.labels_ diff --git a/scripts/MPI_ICESat2_ATL03_histogram.py b/scripts/MPI_ICESat2_ATL03_histogram.py index dde3845..3c0c9c0 100644 --- a/scripts/MPI_ICESat2_ATL03_histogram.py +++ b/scripts/MPI_ICESat2_ATL03_histogram.py @@ -132,7 +132,8 @@ # attempt imports h5py = is2tk.utilities.import_dependency('h5py') MPI = is2tk.utilities.import_dependency('mpi4py.MPI') -cluster = is2tk.utilities.import_dependency('sklearn.cluster') +sklearn = is2tk.utilities.import_dependency('sklearn') +sklearn.cluster = is2tk.utilities.import_dependency('sklearn.cluster') yapc = is2tk.utilities.import_dependency('yapc') # PURPOSE: keep track of MPI threads @@ -655,7 +656,7 @@ def main(): # and that the spread of photons is greater than 20m if (ice_sig_low_count > 10) & (along_X_spread > 20): # use density-based spatial clustering in segment - db = cluster.DBSCAN(eps=0.5).fit( + db = sklearn.cluster.DBSCAN(eps=0.5).fit( np.c_[distance_along_X, segment_heights], sample_weight=photon_snr) labels = db.labels_ @@ -864,7 +865,7 @@ def main(): # and that the spread of photons is greater than 40m if (pe_sig_low_count > 10) & (along_X_spread > 40): # use density-based spatial clustering in segment - db = cluster.DBSCAN(eps=0.5).fit( + db = sklearn.cluster.DBSCAN(eps=0.5).fit( np.c_[distance_along_X, segment_heights], sample_weight=photon_snr) labels = db.labels_ From ae18793861bffd1ea71c233e655c98a4f3f207bd Mon Sep 17 00:00:00 2001 From: tsutterley Date: Sat, 6 Jul 2024 11:48:46 -0700 Subject: [PATCH 2/8] docs: add notes for quicklooks --- doc/source/_assets/ASAS_product_chart.png | Bin 28617 -> 29407 bytes doc/source/_assets/ASAS_product_chart.tex | 12 ++++++------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/source/_assets/ASAS_product_chart.png b/doc/source/_assets/ASAS_product_chart.png index 5ac67574426c4452f379c7b6357656b535a65718..aa0b3a83a41b197807a9de09f8766bef8ee6e27e 100644 GIT binary patch literal 29407 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 Xa%YTHt*XG+8?NaZUcz6vegFRe^s4kP diff --git a/doc/source/_assets/ASAS_product_chart.tex b/doc/source/_assets/ASAS_product_chart.tex index 6378ee3..bd77ebe 100755 --- a/doc/source/_assets/ASAS_product_chart.tex +++ b/doc/source/_assets/ASAS_product_chart.tex @@ -56,7 +56,7 @@ \node (ppd)[ext, below of=atl02, xshift=-1cm]{\textbf{PPD}}; \node (pod)[ext, below of=atl02, xshift=1cm]{\textbf{POD}}; % Level 2 products - \node (atl03)[l2, below of=ppd, xshift=1cm]{\textbf{ATL03}\\Geolocated\\Photons}; + \node (atl03)[l2, below of=ppd, xshift=1cm]{\textbf{ATL03 (+QL)}\\Geolocated\\Photons}; \node (atl04)[l2, right of=atl02, xshift=3.5cm]{\textbf{ATL04}\\Normalized\\Backscatter\\Profiles}; % connection coordinates for single arrow out of ATL03 \node(A)[shape=coordinate, below=0.5cm of atl03] {}; @@ -69,15 +69,15 @@ \node (H)[shape=coordinate, right=2.75cm of G] {}; \node (I)[shape=coordinate, right=2.75cm of H] {}; % Level 3a products - \node (atl10)[l3a, below=0.5cm of E]{\textbf{ATL10}\\Sea Ice\\Freeboard}; - \node (atl07)[l3a, below=0.5cm of D]{\textbf{ATL07}\\Sea Ice\\Height}; + \node (atl10)[l3a, below=0.5cm of E]{\textbf{ATL10 (+QL)}\\Sea Ice\\Freeboard}; + \node (atl07)[l3a, below=0.5cm of D]{\textbf{ATL07 (+QL)}\\Sea Ice\\Height}; \node (atl06)[l3a, below=0.5cm of C]{\textbf{ATL06}\\Land Ice\\Height}; - \node (atl08)[l3a, below=0.5cm of B]{\textbf{ATL08}\\Land/Vegetation\\Height}; + \node (atl08)[l3a, below=0.5cm of B]{\textbf{ATL08 (+QL)}\\Land/Vegetation\\Height}; \node (atl12)[l3a, below=0.5cm of F]{\textbf{ATL12}\\Ocean Surface\\Height}; - \node (atl13)[l3a, below=0.5cm of G]{\textbf{ATL13}\\Inland Surface\\Water Data}; + \node (atl13)[l3a, below=0.5cm of G]{\textbf{ATL13 (+QL)}\\Inland Surface\\Water Data}; \node (atl24)[l3a, dashed, below=0.5cm of H]{\textbf{ATL24}\\Bathymetric\\Elevation}; \node (atl25)[l3a, dashed, below=0.5cm of I]{\textbf{ATL25}\\Lake Ice\\Height}; - \node (atl09)[l3a, right of=atl03, xshift=3.5cm]{\textbf{ATL09}\\Calibrated\\Backscatter\\Profiles}; + \node (atl09)[l3a, right of=atl03, xshift=3.5cm]{\textbf{ATL09 (+QL)}\\Calibrated\\Backscatter\\Profiles}; % connection coordinates for single arrow out of ATL09 \node (J)[shape=coordinate, below=0.5cm of atl09] {}; \node (K)[shape=coordinate, right=5.5cm of atl09] {}; From e735561486b2c33e042b609b71533fc54dc3faac Mon Sep 17 00:00:00 2001 From: tsutterley Date: Fri, 2 Aug 2024 15:04:30 -0700 Subject: [PATCH 3/8] update product chart to note finalized ATL23 --- doc/environment.yml | 2 +- doc/source/_assets/ASAS_product_chart.png | Bin 29407 -> 29149 bytes doc/source/_assets/ASAS_product_chart.tex | 2 +- notebooks/Plot ATL11 IB Histograms.ipynb | 5 +++-- notebooks/Plot ATL11 Tidal Histograms.ipynb | 5 +++-- 5 files changed, 8 insertions(+), 6 deletions(-) diff --git a/doc/environment.yml b/doc/environment.yml index de1d67f..ea337f3 100644 --- a/doc/environment.yml +++ b/doc/environment.yml @@ -2,7 +2,7 @@ name: icesat2-docs channels: - conda-forge dependencies: - - docutils<0.18 + - docutils - fontconfig - freetype - future diff --git a/doc/source/_assets/ASAS_product_chart.png b/doc/source/_assets/ASAS_product_chart.png index aa0b3a83a41b197807a9de09f8766bef8ee6e27e..9f69e1930b049c524042176d810603c50b7a19ff 100644 GIT binary patch literal 29149 zcmc$`c|25o|2RCY(k5CYTd5GDNF+;&5V9xCm{JHawy_K|S_ny!G$B+-wlkG5mKhZ# z*|Hw{SVA02mP3Xy&zaG6Klgoqzpv-@{QmmQYp%vQ=d--`&wD#pr0GSyZJYOPMxjvK z4D@x(QK$_N3bpR;rgg|2;o59IYLzfdUrF%)X-3JRt6 z422T(d|qOvjzX=iGc~f*W&hjf*1vsLuYx+5_C=SOFc9dcv!sn{bn@-vqbIOf fjtHW>HBnXW zD6^v|p-l%|Bpx7xSBL%QGAK5R^UdM@i~Lc}{o^DGHHtz>qfiJ*{{4f%W4h1H=|F^Z zfDv*ZxzyfmEy^o}fU!kl_dcUz$R8@{&WcYkNAFqreouVV3cTzp)u$4!etuwFLIQse z*p`PQL`87Z#bB)<=wGnN=Zqnva&KKC#SKo z(a+D%+S-~z~RSd6WDD!czTyJ?i2(ahdQ>@j@JK1yaktzifJaQ%uP;gq6JDK zLI?RO;Y*!LBb;>jGw~5Rr4iYsjJn_D{QU`564MR-PD+#fnG!n40DLB8wx_nJ$_W`G zkvWyhC?Z!eQXe|$5av5(no1+;oRq%ljF(S0;ysH7mD=j+#`*D?5}A0V^2%=y@h%;i zb*3Lm`Rg*rs~C(TrG+VpDsmV#lJ(RTJi?EGX#o@jUyEa%pkhWiA_GJB+8)Yw~ zFJtf*dqyP=U#Q%>X-AvQ@u-g0+%u*UYl_dAN`&0Sd*DYW#{dAB%pN19G}JCZLCKmU zEf$#$=i1+GK&5zu_d z#qOlKAJ)vajkn}JZPcU=pi_vaj9S6V?W^XgC)x4>%et@_!z;a-#zrfIU5}V zd{qqX?E0(YO9fE=_t{#of)@-~symopF3K5r{*|-aoZ9p6Q?YdGd%cAO_2@Fi>9VqY zGvO|9ZhIdGx*T7k@tZv@BQALRTq)0iH^0Kn*(&M#*_%i3nA3y z7f_mcUH^6Th=8ZYM~6jW`dn2Qc?Qd_XDl*8Ev5(QPk!Uk2#FFIR-*gdLcQ@Cg!$Z=7Unj4eDt1K%1WP-v>h$3k&Z7AQ zOM3;gu~vYIZZ?|o9)vDRnkQHm^e7NX# zIFAz%a8sYD?4pwoEdgYvi9CtS67DD5s>Y;78c8~q@e4cpF?#U;d3C6`lySDU?$A;N zKyHHtz;#Ab%(K^1iguH7hh4t^JU!k6K!<_w8cexWa?TG8=n{xnU>$+#>>+mrrz|Dd~4lbcKSYXubU?*E;`A0lt~E{~0%%!|SK z<(q%gmkitYIR{(UjVYq9JfQJ`gUqz@+Rprn7h@L-pxsSTN(UZiFBEflaTe_A$t{U} zWA*f%{@i;*AFz0J0s#nL_x1$nGogftr_`>i(-*=y5O)H`ydmPmJZ)2u%pziCM9L@Bs0?1jp z`riXQ&1JZB!2_UEOpW(Hm&w3_#5>p_>#;>gy5;b8?i4*>L16T7$4Qg3Nl(6af8tPT zvKrRzJCdI%yc9vZ%K@W17HT%))s%5$MbKAo#6aizgA}*DZz=BWMdqmBiI#l?>MLmW z(0p_I>{^K6&x0rjL=X}wDBhIV+8_W{_yP)P(w!R(%%Xqh9M_dFHkVl)!@Q!E*QE_E zMQ%dO$OyqK_WH|_FD{ASjS|x>ClMH*eSyuNP{kyDHNc8B&#K_0{ofoEwhXww*sUK_ z65n}PZ^#h$HECi)GB8)SL{avMbiv&KdB`t=w#0K_W`twd&gJMLl=>3A&wKbF9 zVDofs)6F)~Qx)HrU<}8|^`)Rwa|~DCPV9lo4Kk_?fv#+78iT3=zi<@G3A&m#h~@uqG(5HnY^misIk z80mCIHs_ps9OiJWD+*yV$Gopv+y7wuzpLU$H4IxTc;xIKdG7d+1?X})WSM_#Ix_vO zB#5K4+HS6jjEW!2sE-hEV&$oLxhnm^rB58|&avVs&W3AHPd}ObY1;C~?hC`Ox+`RD zDDF>x4HUW=R#bKM;irNbuet{a)Qt+V;B1ZDM=OkY#El3jL)uZIkSYdz?23o5 zX4_D+rJB1kMs(r*;$TI3*+EUC!>I1Bf5pV1A!?n=lp0uNcA0e->bH$koigV|sdy13 z6%(FJpT8+Hv4znKcM=xDDq+uU_E8IO*59(D(sv|`xQB`7R3|DfZVxJ&U`iM`p!vYQ z)}@v;AC1upy8G5UDtk8QTn;R!cTqLv%Zpy0dWo=AH? zmq}aDFz5(!;vyn6$W$&#aZCN=3$Td{yc>zZ4>IT{%0mJH_Bw`-8^<9i^=J9_l*JK2 z?juIAIvBE0C;N}h;jo`8bgRd}zb?6qMnsq6IB-RgE3e2ENgH6_Wzcrec~;@?w_UaN z9CL*XWpx95ck)K6Kkm=5n|}-_?$*AJdt%4k0SMoXxCmpLL*gNe_?LQZE~hf|9bb7E znq5*s*v++f5T3YyE&sk^Lmw={^sMi7HkVW`G(>eKkf$19DHD&fW1Bo#4u4M5gS{R- z*a|9i!7slRou9#gxH+16sMoG+Ln5OHGD+!vlf8o@(Uex${Ez+P@lyLStzvu%E~V5C zOjRpxY(rG*tu2^oFzzTLh#04&5SoOUQ1B$k-DGSO(Tb0@7>b3gAmQFH;tQ~*e)!hp z;91piNym<8Aj*(~Cwery-3t%@KybSDW(!{Cg}SGm3Y!}+im0^CQ0%5aCaK-K#um+Wj&oTC zn(Uz+(hZaaeKek5l~Nf#KJ3Zm;?DC5j@l0(+%M)DDHSRy5@3I{+k`m5RMO2k0ib*+ z7%{>eYx3Hk_2}1OWZyMlMK(rDn!t*B@c9PaUk$@lfJV9U&w= z%u0?opyh9Bg9wb^X@?*Emfz_2)q<DCO1T)sP`M|xC}2Eg|ao7Pg&izfc4f{{b3 z%0}Y*wQ=(Oj={6O6}SC1TZM9{f&a#Lw8qA`>B4(U!O#Nw0LLv4x%aBZ$(aRzr%RRxCenF zOyeEb-;p=8Hfmg|bDca5>d9o zoqJF$f1!@#_n0QkcqKvXrB1~oRDz~c+mAwIxgJ72Ma8`ziwAbSMMVvY_#e0 zrpXO5_x}k;oHL*i4lCKyik$LqY|D%s{L8(FheG#_2u|DhoI<2&NhUCrVLwDY+C1&V zAlKLc3`x>nCxh|$_(BQn5jp8|3Qy{&bkcWC;Jlh+NpxXGO0!2Pz0=~-1e0nMs!=$! zNQYRK?2VXGQqJ&XkM^-9Tm|grL$i$R`<|_<#4pnTE(lWuk@(DVFbFw>gb*+6N$V+x z*)s=Do@*#YQ2W{uaT-^hI;W6TfX9$iH zC~weH8v@5iHz=0^k;WGtx8E@ks}cgRsgO^>^XxZ?=A7G{AlwH-u|AUM*x_eYf@#hp z`v&o}`9fzhUXdogLYN;tek_aW;rwuame2G|s{zNF@c7c`^eacMAF|rtbN*MVeGjp8 zyVULkOAEF41l0=I6M$6e-jBPRCZBF|D}f(-OnprBAnG5h+924{lK-LA#SbY+uA<3~L3{&O~`X+7n zyJ1|UdH&lAUf26UdwktMc5=fBtfTjfU>LH_FX?^iBuPIDelj60&Tm1)4YvWYh4B!6 z+)*?sJ>8x%deYkV)Q8ulezc%#2rPD`_Tw|}QfIUpMhNeAXs$GKEu?4uspr(Kw(ks% zf@B`_RGV)R8rQow@?d%0%9G4Q%DcxwgFOqwB4AfjZDqKTXxZ!xEQ{cQSo3Wo&=%2G z*RRDrfgt6cAb;mgeT}+!V(Z22H}R8j<=C{pV15>OaHqiEm|)(v05Of zoPE2R3rf6*zodi(UyslDMxN2yBQ+|SD?Yx>aWbiw>kP3ZNJ(`98nZj9dS1x0O!n7Y z`e{ALv^b8DeNG`qZm|F`spMhr@Fep;lb?D`oe()hkYp4^XB^36+Vw6-+$TuIZ$n_4rSoU)dpQzoc79VCxP+vnd zRl`vIp^K*EBXRbRI;t-XZ9^DLhH6~VbpH3-EeazACvf>!tqv*{@riMms5Da`juA>q5mFadm<350Ds!mUl#eRnlU*8Qwl$5{%ea%XD>bB{pP?y6G}TB% z^}NSh!LH+wV!&blvJ&<#$f=P4QZ8gLLefokVFH#Jqgd=%RMg9hJ>G8H58}|320czad))kt?fm8l^7xbP|GqKEn*!Jl-^d*=Wr9Pwh6pc&goyo>mB{R+?_5*%2q ztDWWdi)9g{TtBQj*wW^k0@uZY$)_M(4lm3LdXHRh}N6QAN<`wy_W*?5?B4V+t!LB zK@caoXNR}9o$J*+gy?|e1 z9RwEJS3OK$`xk;bfRSw=d~{CnsGWZ_RHSwbeQ22UO=LSaw+jw46-{N`E*v0hOkkLzaV==gcw|g+jmv)#XYCONpIQVX{oqnw=81N=*3kU7`F|>ihzG9l0!7 z6hT!kbY!5lUn(UsGdwk5dSyvLEW;1UR`~KG;&_#%zEdIf`6%Pk0S6RnFt@@9v zVW#W|45d{t(*SVYk~3dl5Z6ZM+F!%5au0HDhs*$fvQ@qyxku!5PeqHQzOuUFwJ+xn zk6y`2M+4A{SV+{Re!_Gc#1Dkbza~v3A%^Wre_0ECPXqS(6v5}&4)zXC=1{evfWjau zI-uDsX zuJ)*F9ex*wpfhldDmLuT61PE8i)?8iJjsuJb-8RlITb0yFxp973VW$}xJpiH=e1+@ zY<&g54!fqgA~?V)V;~#+cUhp~T**qz*5R0FPZr-+_8)OhdW%zP;AM{RgY4;kady=| z*)OEx!YMN3muSkY=C0hlXfqC^h}LsOe5w^z zY`>Jk7mVFDw*|Lzy$xEUG*7IFot+sa_hz!6Tl{E4qL^J)B{6Y_9>z7rWqETmKkuY2 z97vaXe8NO$*ZmVFVVp1)5%N@McWZRsH*Yh`b<3_Vun|TYeL-hqn7Ub$29yYzX&?tt zBxZo+Z%KpFcQc|1s(<|bcb|E`h-^_aYSKfy#_+J!;lJN%~Av7lJf;#`2j#b#CWowKe+;^edE6+48$nz2tvg@Los!BD|SSKv!)g~1+w3|8ad_0<&6`k2Gb8s+=; zZAcn^d=MVtR&YQ++U6~C@cVw|Q~Du&iN^!p$Pt%y@y^{bw&J{>7RPAuQ0b6t9j@iU zHDZmNZhOR`l#lSdQigO+Bk?&X?5epsCK9@~`^aU+`Qyva!PMQ%51^%1^uM8{)<8Es6qVZ4{GpBp+OkEbox{$TA$IynnZuI>kw zYIf2bJ^o1WW+qUI;!eGr4=P?*L~?`^Os#o6!O!9d5v4(A^QUJWuRg1Vy^b`g8^W)c z$p}22?x4aJG+&e#Q8zKHHxyWKNO)#=f1HRU)X{v%Lmv%JWcpX&INl5Q5PY?`sO9gq zeAadY=L|=xo`~xHTY{DAFmN;jNxA;_v;Ue9Z~|n#cFGHjU%5k z7wnCZ724`%E%uxqWeQG}vk`lW$|YP0X@dEV;gGAsXPAKZCk(k2FyU70SWq!t+?q0k**Eh=ZIBdKa*o(UX>(;W4u z1wb&(x-ooj+q#e61L5hkox3P=aT+H>+%cM{?cEP-5U^vbwW_Q&RAFnb+HnI_O|Xc+<@|zSn92Q zCP+&Rnm?9J*&g7_kD~I}mp3ldRxPCjEO?tMu5 zPzBFg2q+pZC66#0ddrZK??1J4gfW~PJBn*{SBtQmLOODXQ&8Y!>N&FdAEV1@kjj_F z%q^UnJE+hIYroA~iNCFVspvt2qs*N*Okr!4?|Fgl((mW(SZ5-xq+xINe&FZlELE-! zF2w`UkVUKv$nzC6PggWk@!_{DRC!O9xY;Wt+icAyzZ>b@C3WiWXda2TYsqI5c_cLM zm}pRTIKm+rQF&z9TDq^#`et5r0aWCdi;W(F zBE=O1IJGnYn+P=@0tCDP+sBQ_oEg4g0r$P{xWQs(iT^imBok z-E`2F4xNiVzx(TqCuY5JpblE+%HXQ3#K7@bHxP!y>ynY>fl9U z<#dauH-7m$Ij=Xm*$pJS-jfszgeQtR8Ga~iOlMtU4Rx1GN`}OdF%_!Z^5Eb!z;HuH_al((Oy_4-6Vb=n&y!28ENbV<*WUZFNz%t;}U) z1ETd$`g{&0Xdq&H9mpfGwazx)Pb4;>;?yp^T^zp=73D)b{qPM$ z5Y$T#p+@UAJv^ugXzkMbAbviSBk{EpOg|Abl?UJQy>z@}-j7jkR`GWzlX(Ur<|`uF zhM3ZPcgk!oSQ2|wB!IZQihdejS2VcO*2WR75Sc^=i>f&q(ToT~Vo**uNsyE#iKCu;!1*t|Z@rDybm&xzcy1(2)cCnH&7-Xu?pZq?iR@Sa56?gf|qxhGC-`fpmRO=DT zCD#EbY)XG(;Q169YBZ3T(wrL6dEW$NZd_=M-S3k!Z zDfgnDLImNnyTYA|HA~KM4q+4(3rgkvkrv!%$%=o6r_u6KqcG26qYtYIUEoT9+$Y#< z=h>ER+b%dLX}jZ~a$!NI>kg3@!v*>Y5L0VxKyaUCVjrB0oSpp~zapo~}qJ zg49aUfWOwq^A1uc^q(TRzWwT z-LyR{4)5^YXn?!9C(FAEewlg`{pMMe%lCkD_~&Z1UP&`5 zEy8x>Rl|(vXy$|?= z!78JB9qH2F59Lj+g2Tb*?M5&uxMPK$|LU|qx5$O!8zvkk9AHVN>wnFYvs615zqPLU z6u*zXDQimxc7;kuCNaCK+JsFcHOc&v+910`b#&dHhCl{{By;3_8uerI! zzq?uTpULuIPG6(khw|fvkIg%*etL}KQcv=q=emox;JW@6sM5|Ls}oR2%EX8M6{jA6 zvePml;y_R)sWUW@n~GV3)F+U&Blo^X*8Ue@9$;y@rKH2RUN4ibO=(L$L{Y6WVN=OD zN~5#hZVu7k9s;!{VNb$9cxhnZPN5jXvr((megR>YJ^eo@e3ca8NHF3ow7?feB{N^} z3O=+{Pk1svvN_4u^UTj-W&g}n5qYZr&(j2eG8o>~|Jl5K zQTPC+>C=JO3J&A?n2sfMQLXOE?J9u30Z+Kj_Ek9`pAH`+g}FO~cL7BPJUsupJ;jvt zqk0jO|83tz0Ot@cj9_{9oJ2T>)*oS6PudnikJ4UAQ4xVt4_2{Bhl<6x9WGq5{=bbD z94P)5$BE;mbG&t~|HN7IKQ5njz-(}#J5lScI>@eW=-J0nE{`#0!sVxs^BwsJZdb>D zJ7Jc~GnBGhA-2m(TTQrp@jec^XK#tgblt2QGVuVzSSQSl~=-R{(sFx=4P%AeeoYZ|GlNUD)wNX zH|eC6r+C>{*pm`L2~<-O7w{qXxm8+Y{_tu+O%f4&ja#vJFD3MYfQL}O2SzJsfgt~k z7@$bG{Vu$9l9>nw%GYE=H@|q*nOS1{# zu*Vg4{c}B*2_#XbagE=;zIUtB751p0(jKIP#max$hSI_E9-dC``hu;q2`w5HH7U8x zdd@=(A}K=;SSq!_A3njJnC5!bM_#3Wa`lAWJ8fc4e*KUy=5Al79%(tJsn6Ynyj)mKOS5U9NH!uF_M;^GYp(citv#p@NE zl0PGeSoNj`omlueI({H+stzcY5)bj8clz_E`*48r$keO(TPis>y)@8p4&{ZLE6A|rx?@nH2@+b+M-R?U8!vq+{xwS))ty?gwYU>wKO@9mrj-5c5pUh_ zr?W-|#{T)XzTnt3-kVCn6AyH6Ob9V7!LJELq|psic?%C>N-jY?v%rxob!6yDJKY zw9O(2EGAujZF{4bK49JOV{^#xT|Uj}NbKN+-)YX$pHf%)?qcCc9M`=-pbfFIU8;yl z$y|^9%;cu-SG#ro!ua=sQVEw2?@awuFl=4Zfo2=0{!!8Vv)V9BT_FJ2k15l!Hi@_K zNNMIjCvwSw5bl5I>&iVKF{j};zGPg9*=TxwqKJ8W$EWk< z?ds+HjXD6Bp=K&)CzFpq6%Q>HUcv!PJCBK|()b@Ow}~K0^no7{+iV#vften2=x4eW zuY418aK&o%bI3QS{WAerkhL03d4As#{`oQc!hK80R`)@sPU!Hbw}H;Na@H*D*OVaZ z=RcdNy-!@rF9ViiIZ=n6e}jp3IVw`R@`hLQI)P9>(RTj{@Y7{*K{*M!Q90^tMVg_#%x@ zBVMDepR)^-WRjoum>;@*Bn*ODg$Io$cmcMvL`o%$&no%i8ZUEE_js$w#fG-Tx~!x3 zK5x#z@J^_CPIczoeFsdr>?<&%(M)&C3VhN5rZkGP8YC{5d2Gkm9FPjQh6!o)lm=Tr)6B`| zpGgg-6Pk!TA^zgxBh1&9Jq`sI;5Rr@mtc645jbWRG*rIBMB_n6?cCEB zM6w2JEjfU=)Js^F&(Xa8f>CnC+Lwq`I#E#0e*j^4I6B0E+9qn2s>K1|eP>|Y_3{(u z?CPF}j=}Ho4GE_&DJI+~+rfJ(3`#P`N3}k2J^1*lMLLpAEGlsFX|1qR32z2MFN#wA zCt5%0a~Sc8zf9rh31I4Uv6nOdyD>5#^*rQ`N)w!EY^Qu@EAWeXt?r7e*3Pqs1dv*u zPq!j0>JsUBNevDQtKf_a&j7Ci9WXN0)!iBE~)*`!-g zkco#a5Yt^<7qPR<3(#`6&3fI2(D-28k1S3@Sc4c)px1J3V=U6avdhKtrPf=!#8)e$ zFAAC}?G3<5%X+AM@fE3A#eeg*ZUk-RER}n{KmzCWnMIc zaU$AgW6sJ4XvxGwP3e47ZT|z+Pr@Ti1l0-IR}ghYU#X=)eC&J!V!X6`sBL0qF+w^i zg9N*^6LTdeGPZB6h7J$q#Xbp)oZ1*KQI~IdNOu;fn>_pNIDjL&W?sf;tv%p)tU8z# zn^$}xV&{RPVqwD~*_RleNlX&!%Zr2PkaU-`Sx+nfxDLAFuWN>J;6Pe+Rz3w2Q zzs|_+jo=fB`;B)+X6CNS3YTV@>$4UjHp|w7KD0~bkhc`2}8c*cNo1Pa#6m4WXICJUI zFe2*8lyILbqXBq<K*Ts95ZNKEH@%*5a3T&ez^FABvl7rDc1X9WiA%*O))5Wi+ zJEQ_QXA(1#Cl>j|GGOP_zF6EI&K=|^USR@S;@&i;kCY8y8 zdVxEBHh$#m6bYV~|M-}M4tWRppYB|ls&n?!MP!mZ#5AS^)lYOH43(>RglD}yq*H|n zVLlR&@^Zrd9J#BqCv(OK={k>7+}ZIWh8)>Fi9Jf)k+c^ynPT=lESzF0l}Z310pLOn z{s9K@0LF|!@%idE01XYM_C81r6t>&qLWzjFGBV!*kR@+;v|Ihs5PeVro>0`t5%R+@ zMz0Zv-YA5q%v3r&f{4jG+!ma%UTvB`n%7dr_Vh6idW&8I0SHSACcTFEmVSN(VjLf3 zWr!%w)om*`H|m1B)J^Z&z$0pa!a;>S%={u2SuOHTMNxRE=DVs`xsE0C!tG-+p6+Qm zUsevD6I$-ypXWQ_I__B~;zP`ozepv`MSgjqOn%Rlcz?5LQ_{K79iR$N&p|*-#iPyY zL5{7}qqAT0vNiH$1yq)P0a_BEA%;Dku_FyVmEJfudaz_Z0F>%DX}we?oslZ#HT10R zB(B(=!LSTjp2%_w5%nRm4`i6GYc-0wH2dB{&@Mi|qFcfCsdABqR+GthDl3ZxD4?^= z@n<>~5kS$qe>rTiX&JU+N4Q!D<3*_@U$=wE!68m`I9>}&vg60aG{dQy`>3hU3+TO8 zMm<6q)`v)?t_|b&H@BfR%OE}u6WqXZ!otzr6cPX>oA^CZdhZtFOY5{RIldGq_v$ie zHc0ScY-v3>9Vxq2j04|c3#+^W@%v5-^0VIr1Ak5~bxsYRt93US`guwG)z9wBB_KSB z*6nF$ArRi&{p^~>(_c9^l>rs-tA}fDrqjieUQu$WI^m)+v(kYI(R@dKA4!)Fr>M{( z=Ol|#j@m7~K-xHa8s~o}e3b@OlFhQ{m;#RQvAOg-?x&0tkLN1p$4tcuu77r}!{CVT zbDqayg64vWd*hoPjor=CGpfK!5=L!^XF7+`_8C- zfMF@#bSn714!OcQ9=nP7Dj#|I=4l@Ohn3@zv9t*%MG#Cru79$JBLD+TJ%1K|@xymH zek@9Wyx-!demD6dwOI@6QwK}u^}(7G-`S_NP&IH2J*Ix{#6YlJ_EPB?E(GH_(M z7f=n$7v~jkXjT^YJ~8fblj}ixhd!UZAFyE9q1Nt2Bh{=yx?vYuYF)stL34Pa{Z#9( zol)9e`OJa%YQK@+qxWAk&pl0Aa*b-e)^iv5CE^~_(7!b@37?!k`5;ipH)p;Uh=6Q- zI%L7)es~|%h7|h2ueJS`Q^#eTuY+PE1TE!tzs`Twt%Ad1^$&b*W(+-pg7}VPS=lL{ z$t^Ss=`t30qkGD@XMJ7xIF&B)lc1m^wd3mJ3DOa39(OR@PfWLA#veUp-(#V47fo4d z3|VT(I-h!Zt8I8%_OZFvzGC7ZU)?yDRx!W0uM=hqFWeLwT+i5Ytr4%EZ1@67~1``b(Q9igOw9nVn^w^M6tYvapW z4GYl%*PfgpSENl*{B-6%M2XsALQ}2}0%*=Xh%`1qr4xT7cfzj~?!9jnY7Hgka5Ra! z(ufJs;XrBQvp64TmM=EB)!Hx7F~6gMAm+EC0Z;Em_kj~^;roWCm3q=nPc>3JCc z(sJ8jy2=l@sDCS1b8y6R&_wQDvAyVR6=VKdWZUye?S(_kdhH@Vn(XHcpxhN(3CE~% zOy6<8p-$&@=#YWmUHOHr50%mkU9V09F)_&&(VFk}4ioUGi%FP|BAQ9(UN7#>nPARq zs{j~W6w=*sdlue#2U74OvX8V&-nYEbiYZ<>k50)sB%&7Gv2Kymqr<$aW3yu`RRjf; z--q&-2hJiUZbjzpFvl_7O(os2{RpRFkP|q&1*cI^_7` z)bh_!`Iho;OAcVE+n0zmTInWWggJOvHGdQ0Lb&jLEhb%7+A8;X2WXgIdl9sJ;%Qeh~6xohz}&gjvmJ>_tC=_;w#H$$}K5KkESH=>n48 ztWRPB#=`_G*7n5?HPZf^=9sz5Mk9|NGu1RJeEm6VrG@C3+9g%Nf+yAiA;@70i9~tP zj8*&f@E0VLPJJGZMOqh<1RltJ9s*Q!_hRqVU>IFn&qW=pge4~}U#mG}Rln=Hc6{eK z5wh`hn-edgyK$$_`r3Rgj6t_;1w`v_ZbY+x04mkKXaVsh5dTsw8Iv4j>D=owvmVm{ z%lC(te2p-!{;8OhmSS*ApWZf1<^mSY2v2{F<|EF|?F)^#Yh9yE{j=GE?zGb#2gx7#Cwuf^6wWEM0#v$}Lp&i!hf%rzQYk< zr!QXg&;^wi&=k^3kMg&1R_^!ls>XM6&ScMq)whkQUvAa(?nGV?sW|n6BV29$>Sa)p z{dM+z^|taS#lC*Y-DwluIo5tO!wvl3)DFi%J(4k%tr*4=4nw05({zl!Ua%C2ln~AS zNbP8;?fIp3x_Gy7!_8uQSLGBP(PwWp~M^ zc+1l2mp3`vun39QOBKeiTM26c{!uS1FHEa_vU)|@_v_}-M|GOshe2!(lJTqZVzp8q zLRGJ?C;osDdRYf%y}q##d2OK>QkaTD;sT_Gam_-}I54@!OP5M1v)qXokMeGqyukJG z$C$C6#)B>xEo~+Bn}EPf-C9nhv9f}hiY0IU-?Pws{u+x;t9dVEoC)3LAH(}^39{8U z=8&cSGoy`AX6L})xk$vat?hp#xK}e|%$InsAy8#pI z)&Qq2J=grn(uK#3J^GnJ$ZMl>#U!y#AT=DRYXF>VW4-O0pg~HGiM*yivyBH1{G?k{ z;+4;KB6?4EB=tzFg2}!Nu!~w~Sayyqsb|!#{8A6Ic2^OSeJsxtTf&cZU_)x`*xTLY zSA(!YW=zY5eV))x{1;4cPJbG{oH}t7&AtV&4MPIwf-gKnZ;SYNJ_v;FuiAdVr(f2dx@pg#mo@|gnFG+Qlk7*wb+}d zUyd{|UdUYPBOD-AsF>uJ(*F!IOo^S>wvH)_CsNkqk_2j1KZH!j8Sy%aw9rl*4uCe4 zPT#CZF=^=Ca%KNi);;Dniqv8*sAWfN4~j8&J6o3WZj*S^;b%UoaEs;V2d{|AAxi4% z!vRa%!@GuNYsckr_8z|$dY=cS2cDbrC%V-Ol%>$#V}Bj!sW~O99W~q>;8cHGqk>uR z8{nUtwI-{SB)11dxE(IjV5_j^y7h#wb=sH=rt~LtEV{OCq`V0qN;9d{(r6T^&lGnC zmkjd#e`g{kix#7{@DcZWMZaqW?rAJ5mTqjhvRq*iUDvzxR!ukH$+e%gqRX_vk?(mf z&YDp{{_|g9*pWNe_6Jz*+W2jq+jpdiuxt3G#SlzG0|EPW7Ls zCic;cfUyk>Z<01?P>NEM`8pd(XQc09PnP>vmzLA5UY6X~IyKOSE9s-*YwTNgmAl-( zx7>0#b$SYWY5mXlPwY`n&VT5Oe_G5pHy!KP&cx3W!zpf7Z-9ZR(#4})?`KthN;%7| z^|ra7@VAV~kt>kGfU$Ejb7`sNjd=>I>GppL0Zb(0UxB46YX!H%MGE>Af|>rT1qSnU zFk2ghGFQf;Jtm4tZTDIL_COutts;$DGd+tWG$q>8f*$a9%4>ht2#zJH$?#?sk;W`i z*~@I7S=Z%|^55bukmsDerrSAJFr7Hm@+|8P27BB@cV%qD#1L15xN!b^ zLE+zx9mxr7uzZRAGZ69zk6my_CafC94mjwqMfvB}Uv>TW$(#g{o*&D`D_{F9tS+?o zIzH#E$*xw~=7js+r+>voBynG~9b^iZtW*oR$rBH(onTs~e}`{JjPHyje2$YKXY7>> zYD51mQ*d4#I1@@(mQOF{wEt#d6fQJufsg)k1jyovoc}w?@Xk#OsoH=xG#@~s&D_VyQEayrE*7TLnV|wYYQo|RF*J9-AL9UhRk3p zN|IEP5L)cZaYxKB##BU-CEKx$v1FTL$#M+C@coRspYQWL-{<-3_s7paUT4nv?AP^K z-q&@#KY8V6quXi@G1(t(xEE!{-=_qXpzxH66A6#t5> z&@a&ux%*c=S{D3n+uyB+Ssb&J^LJVokHYCcf71;?7Wzo>6iKo5p@`|CqHOMzEu@gG zfzr$j9~?A2a#Gn~TSg@F%set#7`IhaN){ZgPYk`$ag%GZ5*Kg)kVhU5e% zi=M@eHprHSBT=80x1HUZSBV<`TOJnLkJg?1oLvlRf?<2|Y7&DXm5A(r{k5rpxcWtQ z+r@n@nG=H{(%$lZ+_!Vdlyd?&6$qDwUruNqknH8C3?yjpthG>KNk6K7nLJQg4EEN_ zGWVBu*Y|MFL%NKOGcFb{?*9SX!)W^H#!7Tb71G_h+>{Z#9b|&aV{~0>2db~hE4j(m z=@2Eyfi=S{`9Q181Im&BFZI_v)epaa>fvm}kgo6dIGoI=Kn?mxHd*!|h;0i8gvyB5 zIt{w|Ot?b29h)GdLh24ExdUB8IB_L}vr?#xL8BP4f%Yjdh_q;m5h!$o8gGNKrGVsw zHL!uTg_;;OyCO5;k(XGPrU^CmfWcLHziy>UH2qES%yZAS=L8V7qf*|URfRfWbW=pu zp8Rrio+C?LnmJ<=b>G(r%S5@8x{c%S?8Mi$ORZ6B=US}Q#F<~4bR zb5C;pRd{=G9-~4PCHRcOy=;f;C%Z;tKy>;3M4@_f;NC50j+oF|L*ja64#@OfO^u6s zSgvCa%p~~11ntI65K)cSDTavGGpeTUGlc&^N`H>Vuwa7H2b4bxpKgbI`1(Wmsj!=T zbk1Yj10fAo@v|XX7s~udG!F^)(pF(PxJvP}0D9Ga*@ON)UnSOuw`-=1GhQ44QwC`W z@q*Be-KVI*HV>&fu8BUt$B*-6BjBxR(XeKdOL}oF!-c^w2RQpX2hR?NU*H66^|#CS zgiSZ`_MsAR{Rkm-K>hySg*C?qIG0S3d!M=JN%ZxlZRi>gIQs*xWU`r}=1Kb-;|B4H z_QL_|3$7Y+S=-(0sq{mb)V(ee!*y`j`Gd6yE&DI>oMU)d2fM&|I<`bT!@*F3fPr>$(apr{L-+|sY}c3aja{O-HBSnhHNH8h`DV(Do)Qg;Q>X9rfbCE|6JFU^F!$M<6-z;+I8r9WWN@f1VuO)CZ62TjT`*8QAW zqji*E#|BTdvNXNciyMzoFm^u)S%v6-@O&E9Y0IANIIr;@Eypr5d(!SEJgSrE^;|dh z%m7RB^i8KKTttf$by$SB&mMlmw?$ze?oHWEGo=+eqiSwQLWlYccSn%+i?=7JEn-Rs zl^z2;Lf5}f9WUp5(DcDB!5A@E(vPNa?gq`|xUSLRmsppNzpb+~xd8}G z77hfklsd-%5ab)=4jsSJ*V^a~jB>11un^#s5EvKs%rgw52AlZ~-Rd#vC$v~($vC-t zcAPPtK8s(yeO9<@qh%i_gvj%#HQn(n+tIfHB04;48|r6NX7}F+E9tgdud5Z{u^pp3 z5E%6G^h{>5XY(U>TXG>cn?=r;wcQg$i}Kt%@tb%LIC?O1FW2KH9vOsoW;cF-B)2gF z4p5pXIy=O;FG~)*=FB(f5#mi1FV+v{Ev#kVMyO@SMn~x#@*gS=H;!~W5)&`2*YX~~Y<@KG;=q}2~RZqY1cRd{}V z!B?8!3k+EIhF>y@5aT8SHFBtxZ?iuw*22Pa^LX~jUD{r2Ph6~FO}vcI>)}YiRw3II z&=&Qa{NSe6qNDnc+($8Syr|iA?1WQ{b#U?k$CA%VrK@94)CRI?YWWbtujenZY25cq z0i@uO_w8{Kqq_Cdr`2($8TMWg^PJWz&O-ugT8w73TP0vv2)Sa6x{tugzHO*cjhd$F zH8s!RGm(e}OSOAF9QG$-wZ<2FZy&$l5CM&%jZTj6>ZAi3y{bB>h+5c|6ct4toNDCu zSc>a$eQ*5is)l(ELjaI$`G0o!ICgPlC*oyd@Uup;Ga6QMQ#`sdN(f25&;oG ziRE>5+t+nKWEC<(SorG@BE4Zo@vc-!nSbp7=%cUaGD6Q@O=#`(DBS|(*_7KwmPh zwXMrqR^hXQ&(*yt5i>dd-5zNBtNbu-D2LC=KZyNTfzO>=EGbQiPVXS@U!2g(ZV&ll zOS;{)qCH#YFTbkF)apdvg!r|Hz4;8^5_UpOzfY)k{{dHN7*mqAXkPDW^X5L{bx|-( z%#6!uCSh!;^jcg2;f{IWY5K7SAV_BLgymmZy(N32n!V_T_2CKHK*$eJ3M}n*wY@lK zoZ{^8Tip6B+weE8ac|24E|Due^?rhynpS_9nT!zJ+2nRYeMWa;THMnsHRxH)0}yn2 z_f$&I2Sfe8h|UiX1O73>Th{_Tt8mwjcWoY}M=j_at`vKLu0WO3frz72nsA?y`$X>gQNf`Y3kGrJNy+u*5{!O$T@yh5!wV&$GJX zdFuenR6zJ~_WpuGAg55?8}FuLFOZlNsQL&CP+_c~9V z4x%pk6_of-a5CQ>b>N5ezDcT4$u~+16}v*Shn$>Ki*4w*@y>yTLE%wxrk>UCTR*iY zE{XG3W!Ay=!<@tH70jm7QCL4<1khhZ*TvT`KJ|~q^mfb>#tN`5xZ9Z72GJLDq=pRq}TrZ-oL4nBm4sK-`i?4x$*BEy7P5z zUEk#Rmmliw?)q&x%4CGi2zukcut5`2`1|ZqKg=@wf%`a0R-Nm^5g9*j@2<0c{NfA&hScqH3`u?R z>>kxB`9~zr;Hb`$ve~Z3UMc1L#r-(-UJmV3zou+??YE{}Wq*V{7DNkV2Hm!<$+Mb= zx41c%bi>wZDKkSp+;HC;R6a|&XY-U`8xZBwF3}``@9gI_Xv^x1CVFR(pBmLFI#|r) zO7%$St<3CI?K|A16f{U>!7}1@G6&i$uO}Ae7hjsK+emx@^>R)?WZ9sxq)RFj($!Pa zeCJR#6GwCHA)9X1K-uURmgHEFBpl_%EjyKnXri`Ogg@D*V8g^_5`R9glE#6J6rBu% zQR#f=`->7j#X64?ml)c1V~%WBDf=d&w#1$XDzR#gpW|yX9u8&YO}$VBWFK$!H1E}v zWw?B>oO(TtWg3UUn+1wuFzLBD3x<0ELVLF4F2Y}IH*m{*`Yk^Gnh!%J_BUz#`Q7*$ z>Rp_oHJ|2!4y4OO`FF+3u=uk)xkZg(ajhA)nTebUv)QB%Zt@m=(UoYvig4auV%q14 zqv=S(5@W1@+D^kvsj!dl?~C?PkMQT3C|myCEJUfielf)Ok4p|pdsG@asBIu&z3CQ> z{t=ZIl@*HTcXw!?^}KUyKn^BHizLzq^AiR0bdrWEy<)l+*AH;+j~~w+?oCQ@qXdKf z-LZu_BGw)axp7f|?m1tH%16g^wX?msd=QTHHmTgD1()7v;ntknT=&8E0I~iE+*u)$ zROj36O^aNq$DbH_lXGV~O%(3r|7!A=Cp@9&5Mw=k)8jDrhRmj%uQqO4w$%}J{z01J zc4`OOET)nWwD`Ctfg&>^3Q6`6d>Eegp+pGBxs_CzV_R1C#5cN{^+Q3GvII=4Ue`KN z{>HEX4cbk&R1?9pQ|-ic#bqXe7a~9S_L%k)MB0^31V`PWlr=f~=M!5X9Q};3l4-u6 zv-=P0dK)q@#Fq%hU&~?Lwc)eY1%fR9?Cq7yv-*+9zgMY6=;N5ktP~iYH5lL-XOhw` z+_`WY;eVC4Zx5yh-pu^sIDqFVSs%GQD69xePu9tC-Hf`$x}|!u=xf@EcPlT%RmkY? z-Ky(B?be??_lW7R2g1Rqr(d4*o~WSr<7=A$PuY+5Pj2!F*K&4$Q|np-y`4!zjvQHd zZ8_TdVLtkmcfpwN4b2lD(w^8tR^gwDPUH(~cg6Z{hK0Onws&`5ERZQ;^T9&*70))k z_M9*2?TpLO0P+h?goLAJk*cg*LNG}ikeh)UhlA%Zf9~Zn%^PxRhr`*~d z!FeLm%h3c+VEIdaLiFMGP}-&Ea_nq$4$O@n`3@i@VQTPdsuEb@Hu`a+U%AQK_7lkO z0?mH3OZ_i~RzFNA;QhAq=h?HLV^PvACnvcrkQa@!a%hZ!{Ece(`I14r%nFumKcumX z%1dHxs`BLLx&%nPhB@UAj7?Oo)=K@IQ2<6)^%yU(h_@1Qz^dtfofjdrlB?`>?piq> zxh8K>bAs(3;byn~3oQ4wi4FtZS0*!elY6S=?8I?%2ln8cbT|7}omTk4ooTvGYj1G=#| zZgXHD0zlm#au-_=a$;KpX+|{}to zsnd6uCQFvz<^@^gys+wX0I?~>Hvms92uMpD>KilaUg~xV6X1Q@BP~96GLp7!Vuj|R zX3(LJR-@DNX<>rC!sqbpE43fCHJRJO%j*61I7hSK$xIL{2%_eVrQ_U5e#?Ld2Dmt+ zmJ$@(_lg!g9ZGT@DaPdlbgdwh3b$jk-+D!H(OrGNb4-R#tRW& z8I-Y!A8P#9){IFciCBn`j8)zrs>%{J(J7N1w+>S{7Qn9(Q3{tTEN8 z)04nN;1-$-=RD|R6&uTPEgs;+XXBPzaP!SE^UtQUf7r^j|G>@HUJU#~{`SUsz*c^Y zFV=5W{3^~|$wWeAp4;~Ri%jzGIsw7k<2!FIN%pDC^IS z3Y@H5{ComlCfUD;ku0k~m14POi675F%e?^_t03S*yUpLE-=FQl|Sn5*S7Wz1)7?8MhHKWBxLP4|+ z@Wlp*{56+&@lUpCh;1rUuJj@;sZxCQlp188jzo!1A`itjPkaE(&)z`?8Z$onekq3( znl~D5`2_6fla0^&LJ6kTV6pKV@fVmd&l~b~c-+HTz;hq(3-0G!{sCwz%9SB9?Wnoi z>IBF->sqQ=)~6oeAw&lJT^B^_cgXM@uV2yK7|rNdqyI+0x{{k;LsQ=#cNlO1`y-rv z28)%b^Clpd=lVI#(B)0%UPg_@3+x=x{UC=Wr6?!Knn)4OClx#zxC%V6%K-OL7{S#A zjmy60#r=X|k}BBo-a8*YT5EVdm*bj(bk{3utVKmS7k-) z|F2H|vx@Ro&%alY@?B6={_gdvvo`$RuBQm`vU^7>{3+R zn-?Kl4ha_ri>(ddP6m&EVI*&UD<*VvSK&e7(E&tpMvwf{ocmGC~w zEu+A3`RQN^619EkKExE*>4Xj$k;Q64V9f)!8QQc34{xq3mQ*@G-ArG&@6AhI48;z< zp73sy`J7NvmZxllr*$7SBKv>Y|BX*b$o|Lf4gh81B6#P{H*%8VKHSgpQAjTamciF4 z?fkNPW-&`<{)EJc#DJ&!^yU7-aq@T3n%%N9)F7WXXgoM~JgwYTg^TSwGoFpUCyQgi!P5nrc(*utH_!7L75CbxL<@NN zV3}X4<+3Df4tQ5P7POod?%EtT*SQ-vPR1rXc48u3^bP|3(9Ap5iH>dREm3!^cQO2C zFKYE-b!yxqx!rhcD-_k7s=9AW>wu+oy8D&Df*P4L$FQ=oo-b8sgilcRfT?oe0AWkE zTYFfnZvYr@svY_Q;P=EUEv|a6O%G*PF(S=q(mV9IdYx!id77BdRndry>39HJ89Cg) zh!13k8-VFX>7}wTRcC8;nnWz0on_1$(Y}@e%V@2lBdn3Zx>q<&%9J;^55s)7m7l}m4O2%BdC+G=M@z4!Ab6Lr{Oj^9 z?(a)=x$l#&936%1Q_**m&)Ie3RU7Bfmb^pcn47Za3TisDx)+Kv?naY#~4h|IP!B2u|=YY+}tp+YAg>+R~Jl z7kdJ^d#+_x436bO%zw@I75{iJ!8#V0Y9Pc3P;r!bl^j(Y{rYDRUCv53vNkHZ5E~KE z+S{D!f?xdTH@7eK?Wdg=;tyi&hx-8AflT{Y$Z6y37&PUtf(z%R2F9j^}TIu>su@a64s0| zzTZMu*~e;H*3ai|!9KsI>`4t~cM3v*7`h%zyCb03!USJY`3&z&^x=+gOQT!l7b0=gtis>_dE^x_7U*gYd$mh2^5%0MiB+l5aR zj9s6OU>7nB6W=Hv_juEg+Ih6tzp}X7v!LCvUUfmO{rjwUJIVcamWFN&5l4%u!A_{g zOA(n@{1I?a_t`O^kF2&jnfM|DT^;Z(FjxB37Ra80MAuq|LQz?&3__6-Wt~vL@w<3o zwfQgZl8SL(Y%~E`+(B%fFw?zMV~Yt)1>TSdX7I7X)aTUB$to%+y0ALQW7aeOniQPR zEBjDva#k=XI|6Hu^Oe2NnD~o|R-&56B0dh@;&f(y*Gm*ykL0!NSN@3B_|aT5%?U+O zmSdE&`K4!LEV+@wJ2QPPio%h17Ld?La6|V&a4W(vr_C<^o7Bf|Q36KO8D)Rs5Y`9$ zc;Zor-06;+`oU{>ytsFL`&x@}h=?m#DO&mZhR}FZW;@~H7tgxatkc}%(__tK*P!Dv z<>wO{*7La04{>u!*5!=6$(nC|pK22GtR!?lUKkdK(LF6f8oYLIz)EgNmx^AWu2~65 zwzxEA$rzD_L>Uek9J#&wd#}eV4lq0nN+!Pi!oW{>6e(sRZ2Bo@#Q329^&Q2cu^&wC z6zT51=B$2wL!=krV9k>fw{#AcgOP|f1LF`LZ|cGc#z(y51tDKQaN@A?rkxEf;0>>6 zu;-KAwWSBKO!s`}1X{v_1j!=NgRHd{g&t$Xgj~!hhw$b?1(i3fRLK8W#MH}xm(yb% zl8?w3dl}HL5q>n~^wfYnBzs+ynv+VUzi}6(dv*^X2Q|5cTsaAg%=*5)hP_@m>B-Hg zt9TpvCr$wF^e9qmFQ{EIz8b#tK;5st_#dSKU(Bml`^xusas`RDd02XMLB`j3{thNI zz1pc&1MB^>ak%TEb9=jdf|`1=LS#TU?i9fYSqN?8#_E8``Ns$?{{b!INw`sH6F0G0 z8!*fOc)r(UJn=lew!@=Hb*1F2E}iq=)60l;sWn;RBi**Rf$MN*B)F?)L43BT`>V3b zv4||OGLHC1?S>^kl)p_xCHebS(O!-ewVV9VBxU4{91L%ku%yO)MWj7XOBIF1S0}Et z7`Vqi)yTBTe-6(-v+2f1vAQ%be0kYo0A%PqPlh~z3`Kb;);(dJiVroH$69K$dqMF| zw=ZQ~l4h09+^(+kZ(|T@P~*DSE3ir;&Wdz1=sXhbesUj%?g&#;l@wKi-i;C99{so! zm-A}gjE_(li@$>>Mb#LR;B1$#nQwz0TzM!ozToCSla+*M++JYggN>k)h! z+yUVLvzn*Va9*5$o(eHA5Wo z11Lx!l_t`{8;C@T9U#(pHb#J4zN$oe|F=1B1&a7ZFR(&D`2T$F_~)(Kzis6HW#?9i zU50f@4oe(x%=$d!Jg}hP&Hd`6Yo2~28ljVt1i_Uq?~tJ@^{CP197N*a2xGARJLZwkWFdl8l*WhsG>-%0Sj@4ffC-|u<8zrKB{;c&YYP!bEcf&cj=&PO6x4 zJIv)HnBAN9S&Ib#;8n2yM1x^sSf4cZ|KJOa{Y3$T8NpyAF&My-f4=}dm-g6N?(>!O zxB%M0<7s{)VNMA^2A3HBo(o687i@x+Tp0eyGeeiEH!qr?ckN{DJfdlFfNp^o{JZZu z%?B_QfKi9Of9fr>_!dm8iNh87`u<3v=`itlO~5scPL;fvqZb8wG(J|6H7h&VgPB! z4Gj%}WK&a9YiepjLPFx>DwUd*mBrG89x}7oompVX zOj8HU8K{`5d^x}j<7GyPCF?eRv2H7V(gWr$EiGM*v_>>%`T6-}W@b)2#ytO#>QEl> z^yyO~kq9PO(#!Pu#`N~~4h|0XC}duTSbSlU$xL^5rlloQUY@D0o^hkOuCDHQ)Gg`9 z`fvZLze;&xRvehnL7Aq{4WeT$zx%DMtnBUWySlp0 zFv4QX9#W@H67xs|^Y;StRW(zH>ti`!#9Nmu7xgh>zUts3?@G2L`&z2=CcFBolYLXk z-L=1IyuFczVpH|*mhuz4$ztjNz%@B@rn4ru+!DZuB~Qk6=SGxw#|2rc6X#l|8_2%3 zmhu(qW3;Ist`52V^3AoiW4x}(V#%)Zv~LwbuGX!|wU@q-d25r$%DcOB<>x2G$|I69 zgL%8hup4%)`f zpiP?n&)Ihb*Z~ZO%Q;;Qj$a%bw;vT=YZH@;!PpI-Q$KCs(Kb#YElcZoy>Qju8-MG& zbA^iFME-Czc{rM@49_?5vV-z=K@-aBJV%&ZC_lE9!1!?pc z>xOvsfQJ}U%3(`Kch}6nE{U!2^!c5%Y+>YTNUOOpKRY{n!M$F&ezJGDEiUXo2bd0rop#BCur zmi;uMcL?6yAJ!K7CGY)$;6brD2NjoT3!14aHDHtjr}h)I`5wF3`*1^%|5_B=u_@Q% z_|{t?{5%5l{lp>^gSb(QHmPiTc!j#-^b|A6Lwjd1z4YuuK7Q}Wk~KJd3h8aGmnZOO;h5t_!8I#xEWlkMu^B%Qhs`t&`qc@g_P&*q4$~Em4Yw*L z%S+$idW@`r*8yhmQ?Fl&D=YQ<6kEjkI34}n<#Z2p7P(1+;QfwC&lV=s?}fQ>gF zLOf07_ z^ufz8Pj%-fCrXt`rc$J@g~6S68kn3Me2+m6b7gSe69t26DaA-Ef4)(vDKV=tb~3VJ zoPgtTu!G}1&-W5>-NCXAc83;o5G?(w%!<+sT#jNI$zJ`Q=YH)s`E}CN@jAZi3)CI` zkp=8+-gPPO;*N2$$*5Y&LhX<};KxCClGyg$gT0z}!dmgpjRhvLY|w5!A^ykDi|2jt zvVq6}z{f5$Qd`LCaL1+E#(^L1ucPc>9URXv*(*)aDCu7FK3Jj*=y%l_6w}OfTJFr}@Rb2|J8kvrZ5uj}dsR$Xx=Cm)@S} zcB6%{z9rX&bzA12XQ1ZWwSnCZ!^qSomZ|uqPd(>Q<_8f z2eWV?)Ae~I{i=#Ya7E$KKyXR>{6tf~Eau@V%6@pq&24^sPeR1ECzT!)S3 zDp}MF*1HY@;%ff&s%qOETZo#j;{F-~L#)>!&@k~NCUnM# z`KokE{5C&ptvP^2_g{;by%^WrZ9thNS0Dm2=I<5jK1MXc48~ zk3+BYvZkEoOi{S^did{0#D&7=o56QJJi2OsqLe*rVe?=Ih!QU^hTUnbz@AH~5@d7p zNPgFhkj0#b*~Brd0~@asDO&O?M}GRmkJW~DM~W;?tITBk4LAz)=}Confyf_6OE@S&B&%SEdO=+EL}gFkN}mqYMFyQf=xkef7^5&ReX)OpYhJD*Ym2 zw~IhNBRJX3@!#B|j|Q1VR>&O+r#wW~SUOU6oPvBf@%5+!X2_9IHuLiPxx$aTZhJO# z08wZkp)^qj&i{o91RAxkrA*H>V@)?A&SU)Ud%#eY}Qsl4+2)k8aP3x~nrif>@QJHPi z1EJwID}WU&9sv4}Wo4P+BDSRkd*(mV2LcAW5zAsbs1zyUnQC6cXBK3@dqx^T zpaG_j^_B(o@gQtZWwhN{)f^)?#)TeY9(Lu8=%#Du?H-UZlzQ}VegSABtUO(;eLWI+4fEM-wWbFeS><#3P;m3~9yK}-2*c-b# z4KN=T-8^hkFso|HvJV=++xp8zw-Xi@rp~6W1#5IGC>Heh1%OufEbWgrIYfyPFO zw#cV*y#9fneunfGD_>6aeoVyVB_N5gt#fbdaH&{#A2Dye9v3`QEnTF6pY*%wizHT9 z?9a&)ktxb5M(a~HK3K$0`gb@!vUw4Vm|p4HA)2%u1NGAbhY!39^?29+B=$Hq11Twz zUHOVSq@0Tu0JAj2#rdjhdgk#)omnbAfsIM(!tZlb!99xT;}6F;Y=y1F9HTQF&Ymz1 z)#^6AtALNwxa^DcZddm9SH$E!M-qKiWMwx_`2FUZG{V}#KAvHpxH$?IjuE`L)#lQT zn6LeGW(N5pEDx^GGvDyI`EDSqhHvB2Xerk|rp-R2qn;7Yr`TCfsu+q0% zc$#6T!kd%9GxQ`^#-^rzB3szf<$tT3_TWt5Hb}qo3*z8(S-Dz=rOE&V9w9z;DgJlM z-cPia(Evsb2pmV#gq_FbU)P~D1{tcgpLArPIx|YIhUwjlD)2@Ck>?3}!%a%9?r7c$ zJ#n#aFn@)dX~M}?KbGgg)+qKG1G4?sBTH%7t$18N zw7n9ORRGdv&4mYXrAR3EMmR+b+Km$l-=wfsCU*vc_>RlVcE=;Zu^lI=!@cy<-`M-5 zeS3HBh6p(bDdetBWiFofBiE_d=V7J{N@|DHh)(ZQ&#z};{rre_YPain==v%qGenqKO&d3!;K66QIr2w`m+FJ>N(5J+_L=k=DF zDRwlKF*w#J=*IXF8pW(s-nYtL`bd04hqedoNWwv?hn|1TIFbC~;_FSk`Kbm6auIsJ z1U8bWEO46b_m!ie8nWj?2-PT#$Eu}L*HhH_B#Xy%&i4`9Wxt_DE{q4Ef;gHwOq-N` zQV;Y@O@YV>6P&5BNH1$|0xp;K>~^;BO`9Om9h4`)F7*(vWg|Z7vcU5Kj^fpE`o14J z0P8x)$Cd0=v{sFf8a^kp+9v}N{a7UXJ(t3j2Yfec{-xbzj~_WF-dPzT9az;R#(|Ty zsNBnT^(V>sT?uA3mKIksYYNeVt|K%Lg0ONGQO9a`0~_N^F`17fMtygD?4;9L?@rmDCi;0k7f(>B-YO^i%83HOMiWA# z^g1mEh7FE@CwzQ=sJ235NUR%7h=Qo>%W{&j%F@LK6@0TCxZ89mH0VF3;eg4FWp-d{xP2MEyOOy-`% zGIX$s1CQgebtk=67vqWkK5MB*x8d2Ok;IYt?t@6`L^p^$Ua6i>_v9|;>i^)%t_uzG;3oqRM}`wV^Vz4^ z-{T!mCDxIw>5`HXQqR3>&NeZYAefonguG0cTj0!kRIpy>jKtLQ_xC=$$u6|Ri++&46TfStx!?8mfrx1-BwO(LPJv0O z>xNz`Qp><1L@WLK8m83DJ6>2u>6hKhdn2~O!{=PLEytm^4&rEvu!LC1Ws$qj#YsQb z;qH-x@LL{#+10locCnvt$O-Hkgx3gTnxic}I@qJ9kzum`L zG}^5ZEsgzb1C0Crnomb`=kb$ebnLGx;1Iam^E`U!1*}UHl6Zc7guszEn+TrN0{lId zP#f;#UESn7k&6zLfJEs!UPMXm)9%kyyw>8F4?TK>UR;0XL$=jB3H9hhPoJi23%T>U zPT71C{%mAqt3yg2Cj#Fv&k|NL?j@G%oYj*3(CSK&4yrtDklz)2!6|im@2*7C*FAJJ zU)8WW<#T*xqI3}4WY_OX3%Fy%JNC&3>D>X}8ys*yyHavSsqpcS^9;y)@%F^-#0_~X zr88e4cid%>c9*^sJnZ8rRGr{NIi6oyd-|xqztLcxmjwjFe6q5JFUvjq-9}Km{O{6E zv-edYAANkL(VpKDWHvXXAdj<|8Bk2F6#Z;W;XHs-%2kI;SkP%ZaKdU@Z-%zKtI z>;8*KB7MbG{FVAwLEv{aN?W_7@I~qEDM>Eoj_!|;UIW;E)S~r9=1KSTW*6i@XWhdS zo%9!%Lt*T5~vAhLPuS z_c_x0Ws&~H$X}hJad+S&3jFIN@O(RXGbxq43-5saXrb33&s)Zy8Gt-Od5SF#y z{&fA_AFF!r5m+YKz;;p{C_$9;TcKe;(@t~_hF=93Ae=p6my7hTW=Mcs$S`9@EaGH$ z7MFV|vuzWk;KMg$BCe3qOJ9C~jK7(9hExk|j33Tz6IOLDhDeq6RJqCG?Yh<^M5czAz z&UrJp9b|9FN6SzFs|$A>L&L2d4#wWph3vnN5QS@_wN}nSlbbBc*qb{2X@Tnb)LN+z zXSNC_XNT`0aGD_-0^+1%9;r(+5m!)om zZ=Tz;qcK|*PQ!3S5v%r_7(n&U&En!b6xJEG@KxcSsjRv|3^6<*xC(hI6BT}*@%%-C zYmQX??p^GTw=GvYawR?Avq^k+%da6_JxS-?a{j}jhEfIX?!5k7+ju~kMA%g-NGr&a56ibDin84t{{=e*zuB6z zyK){E%&NuK2!;@{kzg>S1Jy)R;X=L>=}kn0QpZ4Xw!7Oixj!?c;?EBx9M0D&P^}Ti zZt7^U<8U4E?!cX+gtN!ogBNW-Y7rHBx#H-nIU`$VD|bnGwy@zzjY;j4b+0>2q549d zf-cTbZQpAX>s`Yw8o1okUw>VMgc2|$&e_?mA;m1~eR(@`{N0Vfw2L=Yg0UpBY zWNF+B&(YPfm^faY*Cb9$4!FD7f$@YL(K;BzMmkx7Xc6{AW6+*|Ja!iB zPAVAbZWL{})7o+;AyLl#m72&X+HP}QS5%X!)ZV_#Y3UbSvFI52n7_<)3q`Ph@o ztbpnG;==IGa`KnWkbNHY`kT({iFh)#Fsqk-DerELeHP0*1$I0zu{Fc6tr?xGdxpe( z^T&gww+1c&sUzH*PFx~BaVOS&)S|=9m3&F9?cyliU&9SJEG!s~jJ=6NQsY(V&_zl> zyVS`D{me|YW1nq3ZVRwEJ<*ApO_2p~vB!Lz&zr-)ze9!vCKmfIV0%~ATnvL}!}7dR zAm%bFKHmTk)+bwi9c%@O0Jq5Tbs_kJUu?C_VJUp3{C3U7ps^C|XZ;8BSkW6!ZEYmJ z1`Vu`A(QrgPP@=}O!BjB3O zFwv4jq90jo?)po(J7LT9h^(XeoPSmuSg+5VTgT6a;D>_Ngy0cZlB9yg#nYjWu)o#c z5%)#?JFEqixr!Kih6Jm-Wi+Cm+wM4rn|9hJ^cYHDFOCrJdFc-w{Inw74 zG~7<$y!W$cHLA4Yqb)x(+}!mH8DG?mjM~QX*FkJDNWXeAqE&TAtD)tuUE5o;`xc4G zgY?32qO;d~XTCmmh{LGDb#ED#YxfZ&SAB=}0aD#b;g52A=|jchyV;^~WPn^=B$zLm zdj4y>14V^)3`~iQx^zlbBKLiF#k$yu@P z<97kn4HlH6iV%)=0lp`;tA}{#*6x%za|e|U3bF*e1g}zvMFsSRf2dP8T}Wwt9anFD%IE#T zsST?k7DEajms%ZR`S8URd{I-!7YP0&{%JK~01>i~T$=_>E|uV!vf2jphVWl9@zXi= zLfos7;Sjw;|FEsozID4T>NI~5OvZJyxFvS_)wp6}UbIJdTdqck3h-g`-8*BR*vvvu zua*6qQ$pcp*YKDsUTc|)=d_=JbqCb%BL*hy!g;$xOyO=%J1?zZB$M!F@_H;n8zyIN z1pp2+P@JDE!NYpUg>m8I+0|q-D|rCafE612i2-pu@>6_X-|jCzxtzG@=iR8Myj;}1 z9J=zVgl9QJZNy&C@J-}GYUatuqRd>T@Ni+Y@LG7C^po6CfDl7ej2iOINYu){Hr9CbE zbpAY6`te%pM`}GfFaMDhxxyuOJjfExTW#GvHo5815wiDuP!JicThemx`O|1(X1_cT zYf8#QL<_eO7zG{yh^Yy6rL%NOBx9|Ar(bw4Mg+ z*7EXCrkUgN@#`CQYW9v|2`alr=p1^gxWbh=6?QD=<2p0oI~ts4QoXX9&27^k%8K!H zGsx&Ojd4?Ibv_-p>?w+FM^DC2ONf#g8|K&n^)+m8@VT)Mh^VrsAQ%W@QgrgY7?UNa zL(_y>KwMYhl>A2WieQxNQsg={M3BYZ2iB3Jg)<)!@8;LJOkuPm{02oC`6M=P!UbhV?)<4ktS=${;z=~bBH5AnKCMC{Ohn2QJK4p6&; zV5!=ZRr%KZSqvHZURvXbMn-`NvAuXE7D;{RHFQT=meXG=w-iq&pboD*N{_6j zr0F;s=c6<8raPXRhAGK`T8+Bcdu11OnI|slJCZ{--RDjIUbRNz#QM5=j?u42|6s9op)d|z z1v#UtN9p7AqldWHu($;I@RO-8Jns%WT%Dr=EMc>0@`frb=FksCmMG|t}dJAU-ap6<3l-BGYwN_yc*q*KpS0Q5mA(g&n#Z+Ou3WS))2AYPdzMVl0K@^ zbnc_ka-2`y#1gx(6X8yJw;1@wF+Ha$ag!kLQ@*^e!sH#E#|n5FM<0*QvuxHHsE>Y0 zWAoJ;maWE83XOSG4?Ws~UMIJB$T(FEh=#|3AGUAm`)pI4=V2Qm5RK6LRMO_pKj|QO zvt-gU4e2EW7(BU|ZGjWI&_|zENhHbUGgnC*#1pnv4mBtAgXYe4kQKWF5$b;J64~_1 z(J@|@!wEvF=V!-xJ~^ro?7Kx-CMK^CdEA-dRKg#kR(qckS;Lv#JwpMcI#|QZmG0ba zDR0U zVBnIllNf9}!D113l6@05)wr{~KHl)(vZ}1Te6{8YzJUeLQg2r76u1_cf8PC9hX?nZ z8I!^_lcK%!Nx_x5ZXW<=@oM6EgrE<(^ z;k`M4OT>f8RsE#&scEYip(=GUCdpxo6KLWn_wEz zQ)0E((T~j5O!r+&DUzP#{-eLk>hm9)GTM{2i!>NwZk8^O-3?J$R8Ps*5{6_Kmh7os zvEi=2hxiIMW71z~WzKKCE;`CV@cuqdoGPonkr~f(ES=*)_{_2yg>Oea`dC=O+n73= zaU-r;h6cvNT$3OCPOV_wzOGcK=N;2?`E_+0eT2#q6$onI&jjxMQJLYiDoWAfG#&>O@3X|JwuiZW*J zf8Vg?zvPek2r<>X+p`z()gW4-dfNd3;hNCyeq7X~Ni3q~jGhO1c(&wOmiFJ(fo;Rt z3I`MfyaR&zNAW-bo(;W1hq}!vJXWlVJ4A>_RP1joAEsyja^j9O4q_uRWAP~v?>w=)HlR55U737R4~#ZwPQ#o5&s(XL-f8FskO8%`@J z3tXfFnv1IN-J)79djoDSLh~9zJHlSs=bHqh=q;f{kF1w+A6}WfD)-y}ljBi`bqx&C zK$urUL}9HjqM8P!yp^~CL90tbKOP>9A0&7EqPP$T>A2eO31Ua6jH^rSTYAzi-^(A8 ztI>!)_{sP4sD{Q7bAVvy5M3_lwrs$M=i*Y#g1Q$cg z$yM!n&fKDB$9>mp1{Y6Xq1_$^>3htp9=cS}hZCgBrMyo^Gwr<}N%#9!?Hhl0GM;fX zzMU*mw=(USJ*#S6!+8#Hnai0Zto7545-3imtsQihH;!qwQWSPnUlJ+&Y8zKt*@ZVf zI~OJS4TNV$Vc1dK4mNUBe_HYA_~vL$q01xmvjEgo9s7&Otmxkj=dXW|m`@E7R~#TR z?Dtlc9vsvqf9W{2OUs1^8m0pr3NW_M7i7*4!6N77eHxvB0Dx^vFF^xO#-E)*V}CQ8 zGS15feTXhOwL@zMh!c1){>~)OFisTIO7PCxs_`>GTng_k8FX7MU=s*7Ft6Lu+LQ5a zyF$$Re2cH`FD0}Fh|Af^@Ory)ra9e|&43TV23dzJzp3_oqFvJRjqV{1?XC1h@qLY|HC$o#&cfX;zkvBR_GEUwW zY3S1(B%XK>?C3V&1CH%ziYvvlCeP%l#Cp@c3wAp(4h$*Wc@(C8s!?K{r#;5SPF~~`OfU1OXREOoraxNgfMw{SSxTrQgDyKa`-!N zZlF2%sX|S~x9!4P4}fGpTjSqy@3ZmQs9}2Qv|SF`9k^9q%FHjwXL~OZ_?-*eM5yL! z>p`)x>WAsJ^-Awf55}J*3%{x6kGdpA;kNiok{7~4Os_S4!{YZIMB?N4@7)qVuFW&8 zGDsxjS2E7{eL*;$09->3QXmuobwnJLt5&q}mc()GA&}>8Mh}KnPB9^@pQX2%(ID2E(mLiQK=^t?w{3vzB_HQXEa}!Qq*y0*mEj( z^B=M^zM;^YfR`(tUx6_I@GYo~iRPvd`xvR?lCxC_2JxRVR>~r`9$1|ufR=l8Whlh^ zCE|Lr_2IGsyH5is@n{h`4|ZVhWrB8N_ErKBLXjpZeLg8m@$xW4ez&4myp_jXNoCtH z3q?nM*3OaV^%d$?r*7rX3NafkAE|IH*50V-az{2gU06Sf&j^I&poA?jO5`8mvrD^l zOz_mfgew&NjoXAaOW2l%h5MzkJf0%7S{Pos`{mQSTMBRf@}N_XKF3m>C8N{%^_x#n zSaBiPlWK&5#Ki@ruI8)OqT;;=1t#7(e7<^N_bL$^pkTWXulgYa-^-hFX%eyOXPL9N}Eq+E~l#G|ZHSix)2W?ZKD^Z4ZlS~ZKf~ENkRoNibUaY`C}+?BI)y`wu$hliaP z-H<9c*DF`dGFE_m891%y$2TnPn8M2|k%j|qWA-94;sLAsHxgBn((H$QdF2E?4(35N ziL+z4q5?eOzy~SuXElMNy>dTytl|MDRlvCo-+j&{s&~Zx?(as?J#VPFB~ozCl+V=V z9+cVVf)e1aCB98k*tBEdW)~TUKHGC*YI^;NXaTvivsFyHC#D24CS8V@KNVxaRhh}NBuH1n~A+Y=t274umo{jdXNtH9lYuKmJ7 z+fT7`j1VD#b-0N&FEA{NUY5rFdHjERO#d71pKh;PQRe(SE~-0U8D_q#HxXnp5*npP zUVDXDJ(2>(*~nbSoa<8}qdvwG9R#&5^8oO4v^-1L9DJ&0i`K>;sD=@7)RdP^4k5%_=W^5@-y zm@v?{aTWCYf873i$cgAoeg{>xr&4)aO~6?U!*8%^bR>^ozRvILzO?%LK5_T&@_zHV z{VY?Jyt__QxeRs4g5oImRCd;=D!(?8tG@kAYrbm>I|gREs4TSwjAQfaU#;vom@TA# zrHR;2EXdUk?AUwNVz2|Tb+f0Sf$`S!zdKBvZK#yxPlvuXf~SVCo(u`+@Se&WSp+(g za_H;*&m{AxUT}WsMt`MX7NKLZx8vTzVW8VF=R>+ZlRqTzRct+*i>&RUEJ6j^-ie8yRR}}LlNrm z1Ao8S)=e$OQ`y>mYS?*aZ=h#+sM}4o;nUsGgjz*2=2m%8;Mn7uzsPf&kIASaKQyD< zn&0bMw;2a3)LX@>OD#BDeq{eTdp&)5lpoMK&{UIL%QI_^MrDcE&0c6O)DpC4gNN)k zo-kIimoJQF+@490{OV(+Qt}OTs5~~F<*D=g*4%qt(>778vwWfI{144Yx1sm7p{>CR zJSI`|w;v6|E#Z#G!IamO-Kq-i zoU!$bSwT)W{STo)|_sXz_*^Yh9 z^-BHOO|es#+YeDE#FOnA@$x3NOJWf1K-c2z{lY9l^llw9;=I<-;nRmAgT3gDS#a@k z?NO^E$L9jvQ`_=Jo0VJ%%i4y5MxFFc?Cl!v4n~-jvPZtVuk;;0J6#!~R5#9*-$4j%o-se1{&X?QH0k=uUqnWQXnsTUX_%=t`a_MFcm(HN4Z$k( z)cZO0sF7@~l^dS9lCAT5B?wXLKk3}enuPw5<2b_aTKO-Wq_TX9U?$z`rd z+MiYDeF~PnS-(&rU0b9m^gsIkjfi!+cy(2?Zr&QO+TOdM=C+#LFTF_u*}v7^|9NCc zbd=a<2@EnovoeRT|DQu};JmG2`_ElI@}4}4#3T~37~WYr9MUY|Yngx+1FGkA_6 z!zI_FZ75z>|M>GSrD@NfBC><@Se1ly65{~~M;PH8Arj!Yi9zB$C+S;Fp(^jCK*4~& zJrNP_jc}*4BH(;>1e{hZ8B>N@q|EtS=p<4Le3$)j-Kcd_`MHoP+^#f*!|#k&hiV2x z_2-4i*k68GDB0!44aePogeBGvUT)l}MW`2?z9`;rNuJ-Pzx1x4Td-lvx7w~KBzP;l z#|-9uT)~H*EEudj)RwkOPeg-T6K(Z9E%=?`}=cFO+~q1)&pVklDr%a2!WqBxkI6Jhl*= zs+t)&H_}w2svn^l#`Em*)LRDk#DuD99qPJD3O^(t!s7c%UIS`jh&}wykYmnpf;z03 zPffFq{>J61#ktNkIb(&kyg9JZLHAuo{NEpVIoXd?%p zz+|VA{f_YnO>nHc^V9jbJL6`9Tg4;Qf0}H15?#z5J5?u}_s7RW4QrrD`WJftb8@a5 zcd{{OhT_M}wzS6~0P`M=BOXQ-*0^q0C$oC7GflE~dM6p{?GupTsGQsDNATZKQthQ? zFR>@S`+2a%}AJ@fp-3#D7@Q+{4TnbtT$#OMp8 zi561P=<#AGh)hKqM}uejZ@FJArkuasblQ-Uk2Uq{P<^~4kQkV@k`?br1z%x^V^+B? zqLuGlfcTWx&Yd`GymVK}LV5N$AKV?n(u39ELvb|287MMRu?@z>Gq>8jKY^PxsY3&= z2s@E3OW_la?(AI;O)h^K?e}uuVV4#7drs;r8oZHVZiL>wLvQFz;rT%8WWWT#z;7~T&-1?yytx*3_qvWc(#oT4#tqM;ai@+v1>9{tzIBP)kb!~S zV>^!HL|a0mcqKggao!zYuIOd}CactbPbC5KpeF*I(E7>JuRQkA`0kJRH|g||x1SnH zq)$rX31b_G<$6E$xKM{Wm2R~5O18gYcxtrzYja#T11z@up~gAZN<&j#DLq8UQArBb zH=9J=N%NJuwq@F{oKK2h{9Ts6l4tEa6VM|EOYa1z4VFDs4A4IFZ^3Gx+lqyT%AWH?@n!-e}Ap&_V>*|!ldYegYGA79GG1~Fp1*(HkTcSVsnEU>6u7GEm%(J; z{KYg3l{f&30>cB~j2F{M@cHcl&Mrxq=V(Ssf=+F(3-&C2DV1yB;bUOt@KO(b-8qM&p~B4Vqqwv(sDERK0AwrhHAOJMV^vAM$NxbhS_D#H{b?9q)yLYaI9c%~8Wr9;a@; z)Belm7*m@-q?P+~;oJ8p;p9n>eN!nf9IX0j*O#FyI|=GTu6uf?FDZUQ(bKuW7?#zx zJ^y5ww)th{$IID(SACX~ov4bF3XBHFZa!9pUfmNIs~T?`>`n^1qn};xk1Md=u`{Uk zPUABK9oL;I?-U`=8O0%Fo zcbxu!d~hRqwof&w^oAVXGM7(Xdhzl@YIEDX2IbzcbAv_>AHO0|28)-uuQe?0xah;dtwea@A zI%nqM^aE8s?V6zLP94lBN%nO)g)>}?{4SvwC3#M_bq@#L@Kw5E+ueiCq^8}J+l>%l zG4QN*apm@3ge!5dm z$?$tG)um|0UEA_Js!1R-AVa(U)HeGgLq2Ws<)0XS}y#3e~;HGj2bZTK9U$ zglwZX_B=24L_`eG0V5@!nP0t8w?N`)suE(UfFtDI?}WkYoV3kXJ$&FLCv(Al#F;d_ z?|_2M;f=nfRtDW}e4aL!FXFL)LM5o4Bfslh72hVc^KP`TjK@g`Nj^B(@_P;jt!BI0Ed_a3NQ z6PiqWe>PUp!qp%(n?o zrmB28+(*CXP6}pGnLRYUSfY<7EShVbGAoz^g&kFa#eUYo(q6js&X6b=;_)9YZGAgt zz=8K3c=7U1s;iu0=mSQMW3)EvpFlbC{%96|LXK;Rr}eeE5*|mA=lHxfY`&!PG>Q97 zKM}=cE`&)-Rq4&9fv z%%3(wA3BXq$JsxBfS5j9X zD_{@Iog_MK1H}~DdN`_s|1K%AW$46Ly=tLjbtpJ)|7p{EoSHQ!@RDxTK0x#w842Jv z*?=}Q3VHqZ5EwNXAmt$A*|*f~C+iBU^QpA;5<5-95Q!sSPr^L5&mL;*>LVJ6KF>R_thM7M-w;5z3b?6u%(iS52nMe60|Ro}_=?)UV?}1+K5@ZQf^j)BvUMPeIpG zoyXj+r3dWeo>BZP{rWrF^+R~yNm;XYtvcI{?c5Ry>mZsf98u|VXS?VO?DkG71|NRU zz^W@{W<9Px-JM&4lwuHJJx?XKrfkIU z?zgK>l8y4!+}A+8!!53*CbfBx{@zyR288u#lRIMAOh0acCkG#&nHI4$=(yueQ2w;r zH;Q5lBj$=Z0yrEy>EgYx{c~Q@)SA(TB{`?I%6Av)rS;W7n4qq7Zda6X(?Lgy zt_pwT7lT^8nFRfD@!G<|m}u~a2WYafEnB#4WhQ^1)(KvuDi=B7cK_6_1U-DerlL~R zJpcKBO)1J-YS z+Q6k8tLB;EIcHbvJ;n)djGHvc)C;mbVG;GYDalR}0XgHhJQc9#9c{5j{Tpz!ZUOKU z<)c30wlM~jbMEhcrZu*na0;Fn8te%@roRIq&xh6MNa z#x3jokJg}(75WT`i|$T`+hX&Fi71!rj9*5&jedGb3Lnn%N{s9m)r_jghGXL8c<%|t z=yjy2ZpIEQ35}sl?XwJ>NL?$qN~NuaLNtZj4YtLmUy*C=!ViVygp3-cZ^%})>D{p~6db2JaVKARdgVZ# zlXD`YIeCOPr&UX4lFl9#S%UzvFH=Shw={J49<|Z_@M?-5*=P@3rs4aV%y-gbzr0lKGoy#fbjr4mUhg z4&L5~^QI#8ll~wskZl5mr#EGd1zwLV^V)F-2BKKUcft8ma@Rgt{{NTc)dX?6_Rsm% zadPZ^aQOI7#*3ZMVn6(6UW}EzX5*5bq;q`x(-#CSyV5iNGcU%9RoGF@S-f5cE0zJM zyQzq=4+v@gLC!)4-mwoEu|O;x7;(#E*^8khh(@$t`3@o8J#7aT9tyLH6<%(2*I$FY zYwA-xEO4(ZuEA#?dXxETW%qoRmHjx#XvQ`96sjePP^!SmcMG^)JpvhiH$wNko#!>g z>Nu4CG!?t@d32yJt30iet*A+@LK-ae1{)We`$x zR8>l^nt3loG?8c*ROr>2`DiA4%K}M4HHfKg_;$^WNdtcOxvRBWXIgm2&-Qu$URh$c?R8+PErbo{0If{Bg9e?z#{Vdl8yu z_IzY+=HT)l0m;zHmEXLr6zw(&UmXB{Axn8>YB$&H-vDh_cz(`S&v15)O@#-G*5^j49H!D17E9H# zGHAqGQN6p#VA3AT3x`X6MAWhAop5Agll)a}ZLb&mFb zU#Se10r$5P*2a&pu^$EN6~-37jZrWgr_Z1Gndxz=@*ZXR&}gkmr%ndvlvA15eeH;w zb-h1JK5w_&F+Q^x)jM%0IM?1O53d?r)j5dHY-Nn1`C4y`)V*Qsko4E;*27DFA`L1r zS=+zdR()tSBm{orOW=|{e_GAU%j$|rR z*(^790(V6~j=MzGt-1>b}Bb^Ka<^%SDZ7Y%52TsO4s>yRpZf zW^FdPFySBJF87^C{{+fkx4mj9DoergJl&QOv4T4((4+E3|HVPlg%(;g6Z>oN#JtPg zhMfA?&wTYVycaVL_J>ZI1Q0yOIOCKlduh|1)ze)DC>mx8=Q1F1UQU*p-WbquY zrrntt*XPoc77X=|58MM45t^3??~Cdy#5G|`CBsAgl*AngmY;=Z`)5c#!R%hc5Y^(k z+sd>1?qy{*E`exXr){W5DTtc) z_~h@!X9x|Y%&RgN)x1%gWiG-(QNaV zi|2os&Og=-ys00fM@r3diQaDqg`q?La&X7!loJvE*N%Vc4=Uu9ggoQ=cEzAs@W)BQ zBRM|zU40m!K^308__q;e@Z*_1PfkQY+hW~F(zgbQdh3TCYOC~Ug9QGTP!(I5)kO<_ zzcl|u;=YQPz~@4Ifyr|m*<>K7A35?jO^016?7vMS3`>}_{GZ~!Gpwn!T~`McE65-^ zg1}fQN|7!tqbMLEsFbKAL_~V;H9-MIL`0=Y#{x(TT|z>L(uDz}ge6iUAawzevM9m8 zd4uD(XYX_N@AE5HuH;$o^Y*9R_j1KQ`scI;;NSRauUF%D;n>mUGlwdyc({Mw6lf}s z7(f_H1TrT4QTxvw8%(!9_A74^KhDb6JtS7bwai82eQlfM^q>VQ;aK~eOv-@?mT}B7 z7TC$uieD27pvG^IV^U-?tFhT#%y+qVpbDlzz3rSOEvdb$_;=-wZ z+27rh%)NQWt}CEbRFZc=1rXBUfA*f5V^%$){EbCi7L{;6IH7p-#NKfOEK0>$Njkp! zfB-2UTkzB%ecit+QG%p{jlvfseZ(&Oyn(OFDt*i#R@>D1zQAm zulxDF0T%zunSsSnJ_uLOQAm~Qkx)PjhNB+8K|)H1FengWR6@xtCKSDyqs4I>y_3OJPuDF!w_6-&>H=L>kBvJ$a)%njQeEB4?JM-&I}Ej>p95{=(CU3bdqH^D(CZ zvBaR>9PmA-7q!9}+GX9FQI9+?VF!@@SyabVse!=uQd>wl7Xc;Xp<)@2D~&+f?|>Kk zuB~)K)T?|C5b##4nfUdX(7MxSjyNw?gXr^fgD{(%VSg3w9Iq_%+>Mzz>Q+*m9L2+y z#u}H>7Ds@%BR!;_`Cr5Noz+gtzbWRhzF%m@G}1g*O^_J%+(~fdNn=KmwgoH! zd$VhQnw;!pBKjsz$e*&PP5X$vNa>U9Q@94S;Z8tL((XwW{82BY6B$rb@9r(rz2c8*v|72X_>ogbxpA=Kz94YR?XvU{{|3@P5fQ!X zT5uux^@RVyfQx;u?0XFB|3nPt$>wp;AGV+nkSMdhzlOj#w6|CTqPV@q8CPg}oVei; z{_B)e*k_HZ$BPrw6s|*r3~< zHnEl3Qb7Zu0UrCEl`U$?lj6EQN)pF@ocw(Y9y7w4sv&rFxS_Ph&+QL0QncrwCW~@BShc zfDN+u%%VzJBE{-cUew3ml+Jjb1?~*ty}&lr)Y~)Oa2ev|bcjWWs1j-YoZdflKRhN} z_k;&E>89Hu%6@W;jy6wNQzXnw84$4Yr5c=jI#mbxR1lJRT-mpv@{_(KSj|MW4-wPx zF(t~#M15PFNns6s&lzTIzM3U$c-rSuJCpUd+E>+E98cEY20_2ImZhr68W3!0pdqmM}E)Kt$&PmcGQi`PT4C`!r3U{#DB`BA8OFg#=h& zj9Q@p`}3ldS?xU^-T zTeUu_KZdS`^4)L&oXRv7~JFgYkIwY6u! zeh*f|&?K}M61H0r1xfAQBRGWXDY;g!J(pg4_r_i&Q*II=9bS^W&VCGiK1{jao87^W z2~sD|-*U}5I{)YA(e|`YJ~gGhw@ zRE~L|Ma;-)R=p_lx}voO4_-0EQE6*A+Qfm(%90p|CY4BQ$AD=`dOKLp(<9a=9m|teAiB5TPnOgv*+$Y- zrfTc>zY{al65uwj(n3NVKtP8_O%45rcxo}TXp~e%Hsf`8q~lTUpH)M|-K^>tgQ=A*0SF-Iu>jSna;#i62XB28-+BnU_O4;dVD|%7H>vwtMLN z$$K@ppI{+gk}k-Fd*e^c8Lx+T=I~A9bn09_lMO3B3lF&PcnM)pzQU~rTOA;qZbYMc z+IYeh;tiis-`96TqU}=6+~4PQg(hxHSN0B3@m9R^oEe*8En3)&ZOoYZyJ6O(Gr}|Q zPJKT>IL+1Y+o4l<_xu0R9F0Y(+M=nl+cCl_&kn3_nQx422ICrE)bqfx|GI zX`>8;H;3!78{U<%&DNE2(Yp7=7LvI7w?VvKZ0D`HoQ0J2fMVjW*Eco0u?u78&b58h z&*qFxqwaQ@+-j{{G0Z1qL}1(6b-1v^ua`{Ly?^rl$O>asY>cqT#g-%bFIcboS|}0Sy){?Z(VVi?|SXL#>cQT8o|s<-f!~yY3P$>V9lzlNHl?GF$S5ywp5H#tQ!L=jr);_c%xhFE9RH5v z%b=oQwTXxfdnpl@g5BuT6K>R>|DRrXN8pB8DG$rEe{eWzIGzeC0YfYCt)$ASKUOju zgif}!ufZ8+5BaB5l^UYd5w_gUrXMp_=0W&R50 zqk51q{xrvV64NGye?Fk^KD@L)svP~m#!5XHTjK&Tdt=A!SE}$~?ovUA+1j-?OKx)K zRm7NwA6hydh4m1D3hEFs;yb?IA;T$F&6($a^Qe*qzFgW8R%=)e;B!bKAa%O?Bl&PjnpTm%-LEw?$0bW%_T7wrB=SM{M zhw-@ERID8%L(DYa`fiO^yR@rTjfqU%FzBUlN?&no|J=hgSN2}08N)lpg`p`x0b^y= zwotCYVElTFpWVVvm!#$4A3sFUX*CDGR^02MN`GU`Aglb8s)LcS){$!Zma%s3f)=+} z7c;k-eT*;w)ljOHJkv4UG}(gOWABkMN)?9h*5Y}3w^>8}qJ2N_kJ?TOzGp6T5N4C7 zL?iK{P?Q@xRVyFvMa(jI9ZG}kGrT8h>?w^Jj0=C-IFxhpVQ#5J@6doGqif5G#;7~q zZIeC1v`*`9nK2Q=$@|2poh^Xd8kKu12tk`_hO9#*$1V#;jzB&y>LokBl~%v+GP$e2 zOX>N66ipm0nx{ZupQB`jp4koDserL?;fs(f`%fq-w#wS@RH6_6al4e?GM9z4<-|ow zq+A56o_*9qqDHHtU>y>H@vzFdw;RJYQszI6g-j?% z+l=*6@keM%_}=!Y*1=N)h+6ygRCK?EP_x0FZi`zj4$l<9FwL+`RV%%(6y|@Ebh5%1 zITi?O^gZ+31M#|1apnn@y`I#uE(u*@)We}joL5wRutm~Gy_u<1(wZkE>T0{vo5#pu zm}Wo)CzoDGa(BK2GYLVt33M)^%+Y|%M&{{qxOt5V*_icECy(tpQC!xy!?_w!54Xke(7F6^B5hJbL)k-3wo@)NxKC#vDWSP6H zaMOT%BVsZXeS3E%SCBo_+nBmzF5pxxlCMdL?$33{&tJ4p^n325Vj0q=+D+aA((qna zbSwpg>;>+4h1s1dxn3W7FF}k>bon1Dp;6nF(>}*?=Es%lV1MTMNb2Xl1CFTgSm7NO zW>xmf+9ytCm4RX5qqWSal}@nO3lImiFW8?-uc;x7ds7-{nn>&Haysz)rb^U$sP<42(7{y#;@zdG)_|}F4{{4Rtp9j* z)UW+7sJvsaEI9b`ab--wiMZEymcp@|4V~_#61}zUbeQ}X1o}EjM2U!cc0x4=r&#WG zE9qZLnk&|BSxz%&h2xC|Igk{HQ3OXda1XNl&#r@?0bypy=E$<8H^grjNNe>N87|=A zWqs?$fQZdI9?jgiINqI_YP(mgLFp6`_kM;$4Hk@DzcrrNTu&O1mJ;0;=-rxl=~oC# zo?L~wsVTm^`=49};GS@a=R9KLb_DkwO%LkL7zqh(`{i^NcnCka!4b)OE%+a=ahE6C zqW(md;C~`kZftd;Xj1adUylVBr_vb?&S>La6adTsadkga8MH#q`53_S@7Ua}j}>~q z+WQ&X`oGd38_!X5W9tj({X1pyANTZsBxi7~2x|Gh!+b~>Hi#YE6$ql3G+z+KtOMy0 z0oIsj8yaKf(1w&Kz42yqqh)?0GQ8MLK4ZP0fy(lj;4Xcb<@a{j8ih{5U|bwzoV~mM z9eP!s_NT;Sdys%%kwXy(H-Ip)LA(CxKXp{*iOev_TWzRqw9>saI&2ny?P;Q+fk{D{ z>fG7&dfJ(H57)bCY~})L&V|{z$wq)w;>j zPa^dRenM;ZyL67OdS+6eM%2uklA4w|PSPTZFxxw{qS3|2f#y4mm!!^19sl0f4M<0WK0i z1jhXxF$+tH1@78_=m+b|iKAA#Ht0f0$D;M$p~!f^?*f=fuce}1IPzVth#8BsndYRx zu1oNW(h}|6DsR48|50Yv&nKc0xO^q>?ef@;lu?4;;`c#xM1hq5W|Pgi9@M>2S%O5( zeYlg(-k;_%F|wsJ=2`qlqnzJN$NdklvF!%nu^-&!Q`K1`=4;8C9&MG{GIvdu`jt<- zsP$VQ6LN6@xr!z{Q@E^V*+QG^yeGdwi3#EJHZNO9=)OgZ*@M{8s+Dc@UFKJL3sp-~ z8OgP`q6R(zreqpc(@5;Eg%@gLR_(hq^%dVwe&XjBC1|!JX|x|@^isc$Bn6Ln`?N*B zilDs_ycKIn-ytT7duY}@Xk;*O_VP&4)c)>7u2?LHoL-;d1sLTybY zWMw>8nKt6>0Gqw2z9+Wiia3+bq#B}-<;ncsl)|7$6P52@E%m>B$XMEj*kV;N4g zU2RzF33C>rpX$@KY0{3xJ82i%6(;q zLSyX;vhZ$a(j_>|oTwBy{)+d;u>^u)Ad$MU|G}!`>>$opP#?EuB)Yy_j{knY2fMzG zUz?{@d1;*Ckk*1auYdjXXO?tB@MrdK$ogk0^{an3W+Ni@uirS&{z-HT602;9y~?{d zO*=^c40Po+A*tn3Yq1>ELGj$ZJkr&nfPpd$ohP0DtQD$Y)LWJS5&$8+If2UlK=H#17-S9kq)JM&_M}$wcq{ zr3=KJGud3RIZ{9}1Cw6;V@0(N!oL4Y7igUok2)h;2vL?TO5j zmv0B6T-1 zVWA9$RHX?uwO)8pOPPqvf>)m`n>6fsuyhN<8@*9$e#N_~2JlDnyYqzt_LCsHrlDnj z!;2tIA3bcHl);eTNH^@caK3M9np`#Z5JwphQU^R^z|^?xvOvH2p6oCxdGlku{b`cJ z>ZszVtH0jxi=pMKr>qnfeDZUN6^?OL*kuqVkHt=g7U|xR{&tbsoY<^bvGJ_6Pz%5g zV}}t<5_oKWaNLrdd2Smk%I7k)6jNVRCvje8&S-xzrUhx~DBmU1a>Y<8U(-#1kBCcv zDN)M?8vd#l*8vIAs}_XV3>7pY{W?GFN$wpS8V_*A7QSC$WphsK0|%4?VpX?t zpq4g~89za+|6IY~oZeWioaGOM0AiA#Q_}!y(^7uIzDI9zTR5KcpFDYFs@CUouJh9U zwNjkNbC@?i)4$yNXYGco@0g#mD#}WFF1-9M<*+X9|{k>)yR^*;A7|Lwk^hbj?{Dc8=A=5m7&Bnh#oP$k)?0Z=N=!`^jw$) znoILiiSWR`9*I&29Q5bQap+kc^V}Fxb0k@I`)?i=^xNlO8A?X1PCqC}<$sjtpFZJF zw-~et+h` z$Ym2IzV|~csJ9{*DGFfl2GJMAhn#%K1F|iXAM#&3TWhrE;Xz9sk z!1CC>IJib!via#mn?a`t#3XE}dtltZcdkLuoSo)d6kyI#HV3XzcgKrevWL{J3O?{} zC-r~d$bq2JS?jpF^>W>+@Dnj zSziw|7K777t>YpRH2N}XcZb~BuDe6}WB#izwFr;r^}dlb0+}tS4}5%JGHAWPdgvKq5&u*e~l)TAHo&wwR8TMx?eyx(}&( z_>N84N(`%`tlbjbBMr0Gq7*9d#U~%bqQ(x=R(>OHKI1wftqF1iTkq)t|ltZ6dv#T7%u4Y)Ea^8k1JFofE=T=XD4IvDm~Mz z!E;;hSHjRmn*ER}E@48;DzmuW;2sPL8{t}Ip)9@7&P5^>-J<#vi!kBcH%nAb>sfAm z(l+&@G4C0s`Of<39XXDKoXIkJR`N7!Qmgz(FB`OOP9ccdJi{@r;?-i4-y+)xNLk{J zNLTiAY{5;*xF-{@FQ_@cI+kygArMrfyG;@sYd0k66g#a&7FF=siQ(lZYbwM$mWI17 zP^+&natl89lKfp`18g3{EjCK1x$idKL3b>@Yc;KZH||MVEJJ>_&6V`mTf$O`VZo)I z)*Hr-#y(vP1AK11P^sJ@#oq-7S;r~n8EGcaU8&W#_L_>W+1E1aln!5{*P1kx;dPOa zZcfk7LEP2$+4`ZKB9`c-Nd>#QkP3=NU>oaO}j~P;Ej7g6Mb$T94^GKzPl{_IU;8G`$<;bP@y^ zSXU&f`#WKnM1SIM3aF?2<(CrcP*O zz(Q(Z5$?dIC3M#1xqYO6q0p(S{0&OmQzS4hnk6gGggG6%_=a(G_q3(bSraR>c~0MO zxU?AgSwhSdA&hERfT2Z~h#O9-B{GP}Hop!PY!PQhUtw{h3akz2?9pk5T*EUAWK`?5dLNr7AkDl@fqo|9(H=CL$AW1~piJ)hJ9^Tm_~&|J3hL+- zPrcp)q4&%jpd{$$o*?QR&kT!;R*Ove4XTMDq9wd;m)$v?KPRPF>A<8{_`HcRe;qXm z6yS7y_E{LJgn6{)nB>4416`|5D-#dVMX;Fl_bLlD=~5HSWqVjZcT-A9W5mJ(Dj4q^ zWm!Y}%IJ%>p>X_^KgCnK-b&PoJfP$or{k7vav4)rIQ^3KWR$a<C;0}&xN)@%*>bVBoX2i%c*onumWwgtnKHY)zBYj zGzs5(rz6tcVg)$v!`%o_-u-*Q<3j3ym$czB=ZU?D+#lbk7gM|RfkrML5INukJ3px=u`pQc3)^GzB+~!|(Lmbm?BYN_0cW0v<0D!FhApZaE>YS=Uf>!3y zqcXsQ!?Awk1-ezj>+%Q-mE}!Bp~kv{3^rUj6~py9#I+BZFC1eXmu*EDrhCRTUwFW@ zbd<~o#N*t*d`%C`IxZ)E4UN0`9oJS-2jJeo5S1BcMWJOdtSKidB?)jO4ZWc z3Vdvmla*7Dl2w+HRWd%UqN<>xDtG3jtgNc6EKABb^}h)?x!kd{_WR!jB3!4A00Hs; zwBTvyWaZ&$;pF Date: Tue, 22 Oct 2024 11:11:41 -0700 Subject: [PATCH 4/8] fix update CMR search utility to replace deprecated scrolling --- doc/make.bat | 6 +-- doc/source/api_reference/spatial.rst | 2 +- icesat2_toolkit/spatial.py | 2 +- icesat2_toolkit/tools.py | 2 +- icesat2_toolkit/utilities.py | 60 ++++++++++++++++------------ 5 files changed, 41 insertions(+), 31 deletions(-) diff --git a/doc/make.bat b/doc/make.bat index 6247f7e..747ffb7 100644 --- a/doc/make.bat +++ b/doc/make.bat @@ -10,8 +10,6 @@ if "%SPHINXBUILD%" == "" ( set SOURCEDIR=source set BUILDDIR=build -if "%1" == "" goto help - %SPHINXBUILD% >NUL 2>NUL if errorlevel 9009 ( echo. @@ -21,10 +19,12 @@ if errorlevel 9009 ( echo.may add the Sphinx directory to PATH. echo. echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx-doc.org/ + echo.https://www.sphinx-doc.org/ exit /b 1 ) +if "%1" == "" goto help + %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% goto end diff --git a/doc/source/api_reference/spatial.rst b/doc/source/api_reference/spatial.rst index a61f6fe..d561da8 100644 --- a/doc/source/api_reference/spatial.rst +++ b/doc/source/api_reference/spatial.rst @@ -4,7 +4,7 @@ spatial Utilities for reading and operating on spatial data - - Can read netCDF4, HDF5 or geotiff files + - Can read netCDF4, HDF5, or (cloud optimized) geotiff files Calling Sequence ================ diff --git a/icesat2_toolkit/spatial.py b/icesat2_toolkit/spatial.py index 66b4cb7..b75506e 100644 --- a/icesat2_toolkit/spatial.py +++ b/icesat2_toolkit/spatial.py @@ -93,7 +93,7 @@ def from_file(filename: str, format: str, **kwargs): dinput = from_netCDF4(filename, **kwargs) elif (format == 'HDF5'): dinput = from_HDF5(filename, **kwargs) - elif (format == 'geotiff'): + elif format in ('GTiff','cog'): dinput = from_geotiff(filename, **kwargs) else: raise ValueError(f'Invalid format {format}') diff --git a/icesat2_toolkit/tools.py b/icesat2_toolkit/tools.py index 29741a0..b3d4a99 100644 --- a/icesat2_toolkit/tools.py +++ b/icesat2_toolkit/tools.py @@ -50,7 +50,7 @@ def from_cpt(filename, use_extremes=True, **kwargs): """ # read the cpt file and get contents - filename = pathlib.Path(filename) + filename = pathlib.Path(filename).expanduser().absolute() with filename.open(mode='r', encoding='utf-8') as f: file_contents = f.read().splitlines() diff --git a/icesat2_toolkit/utilities.py b/icesat2_toolkit/utilities.py index 2894713..70f8f91 100644 --- a/icesat2_toolkit/utilities.py +++ b/icesat2_toolkit/utilities.py @@ -1,7 +1,7 @@ #!/usr/bin/env python u""" utilities.py -Written by Tyler Sutterley (05/2024) +Written by Tyler Sutterley (10/2024) Download and management utilities for syncing time and auxiliary files PYTHON DEPENDENCIES: @@ -13,6 +13,10 @@ https://s3fs.readthedocs.io/en/latest/ UPDATE HISTORY: + Updated 10/2024: update CMR search utility to replace deprecated scrolling + https://cmr.earthdata.nasa.gov/search/site/docs/search/api.html + Updated 09/2024: add polygon option to NASA CMR spatial query + Updated 08/2024: generalize hash function to use any available algorithm Updated 04/2024: add wrapper to importlib for optional dependencies Updated 03/2024: can use regions to filter sea ice products in cmr queries Updated 11/2023: updated ssl context to fix deprecation error @@ -112,7 +116,7 @@ def import_dependency( ): """ Import an optional dependency - + Adapted from ``pandas.compat._optional::import_optional_dependency`` Parameters @@ -149,7 +153,7 @@ def import_dependency( # PURPOSE: get the hash value of a file def get_hash( local: str | io.IOBase | pathlib.Path, - algorithm: str = 'MD5' + algorithm: str = 'md5' ): """ Get the hash value from a local file or ``BytesIO`` object @@ -158,18 +162,16 @@ def get_hash( ---------- local: obj, str or pathlib.Path BytesIO object or path to file - algorithm: str, default 'MD5' + algorithm: str, default 'md5' hashing algorithm for checksum validation - - - ``'MD5'``: Message Digest - - ``'sha1'``: Secure Hash Algorithm """ # check if open file object or if local file exists if isinstance(local, io.IOBase): - if (algorithm == 'MD5'): - return hashlib.md5(local.getvalue()).hexdigest() - elif (algorithm == 'sha1'): - return hashlib.sha1(local.getvalue()).hexdigest() + # generate checksum hash for a given type + if algorithm in hashlib.algorithms_available: + return hashlib.new(algorithm, local.getvalue()).hexdigest() + else: + raise ValueError(f'Invalid hashing algorithm: {algorithm}') elif isinstance(local, (str, pathlib.Path)): # generate checksum hash for local file local = pathlib.Path(local).expanduser() @@ -179,10 +181,10 @@ def get_hash( # open the local_file in binary read mode with local.open(mode='rb') as local_buffer: # generate checksum hash for a given type - if (algorithm == 'MD5'): - return hashlib.md5(local_buffer.read()).hexdigest() - elif (algorithm == 'sha1'): - return hashlib.sha1(local_buffer.read()).hexdigest() + if algorithm in hashlib.algorithms_available: + return hashlib.new(algorithm, local_buffer.read()).hexdigest() + else: + raise ValueError(f'Invalid hashing algorithm: {algorithm}') else: return '' @@ -1865,6 +1867,7 @@ def cmr( regions: str | list | None = None, resolutions: str | list | None = None, bbox: list | None = None, + polygon: list | None = None, start_date: str | None = None, end_date: str | None = None, provider: str = 'NSIDC_ECS', @@ -1895,7 +1898,10 @@ def cmr( ICESat-2 ATL14/15 resolution strings to query bbox: list or NoneType, default None Spatial bounding box for CMR query in form - (``lon_min``, ``lat_min``, ``lon_max``, ``lat_max``) + [``lon_min``, ``lat_min``, ``lon_max``, ``lat_max``] + polygon: list or NoneType, default None + Spatial polygon for CMR query in form + [(``lon_1``, ``lat_1``), ..., (``lon_n``, ``lat_n``)] start_date: str or NoneType, default None starting date for CMR product query end_date: str or NoneType, default None @@ -1949,7 +1955,6 @@ def cmr( CMR_KEYS.append(f'?provider={provider}') CMR_KEYS.append('&sort_key[]=start_date') CMR_KEYS.append('&sort_key[]=producer_granule_id') - CMR_KEYS.append('&scroll=true') CMR_KEYS.append(f'&page_size={cmr_page_size}') # append product string CMR_KEYS.append(f'&short_name={product}') @@ -1964,6 +1969,10 @@ def cmr( if bbox is not None: bounding_box = ','.join([str(b) for b in bbox]) CMR_KEYS.append(f'&bounding_box={bounding_box}') + # append keys for spatial polygon + if polygon is not None: + spatial_polygon = ','.join([f'{x:f},{y:f}' for x,y in polygon]) + CMR_KEYS.append(f'&polygon={spatial_polygon}') # append keys for querying specific granules CMR_KEYS.append("&options[readable_granule_name][pattern]=true") CMR_KEYS.append("&options[spatial][or]=true") @@ -1978,21 +1987,22 @@ def cmr( # output list of granule names and urls producer_granule_ids = [] granule_urls = [] - cmr_scroll_id = None + cmr_search_after = None while True: req = urllib2.Request(cmr_query_url) - if cmr_scroll_id: - req.add_header('cmr-scroll-id', cmr_scroll_id) + # add CMR search after header + if cmr_search_after: + req.add_header('CMR-Search-After', cmr_search_after) + logging.debug(f'CMR-Search-After: {cmr_search_after}') response = opener.open(req) - # get scroll id for next iteration - if not cmr_scroll_id: - headers = {k.lower():v for k,v in dict(response.info()).items()} - cmr_scroll_id = headers['cmr-scroll-id'] + # get search after index for next iteration + headers = {k.lower():v for k,v in dict(response.info()).items()} + cmr_search_after = headers.get('cmr-search-after') # read the CMR search as JSON search_page = json.loads(response.read().decode('utf-8')) ids,urls = cmr_filter_json(search_page, endpoint=endpoint, request_type=request_type) - if not urls: + if not urls or cmr_search_after is None: break # extend lists producer_granule_ids.extend(ids) From 1632bb5fbb0c8d9efc496b7e1bd44e830fd716f1 Mon Sep 17 00:00:00 2001 From: Tyler Sutterley Date: Wed, 13 Aug 2025 15:36:38 -0700 Subject: [PATCH 5/8] fix: switch default provider to NSIDC_CPRD --- .github/workflows/python-publish.yml | 2 +- icesat2_toolkit/utilities.py | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml index 2c2e5b0..aaa92f8 100644 --- a/.github/workflows/python-publish.yml +++ b/.github/workflows/python-publish.yml @@ -10,7 +10,7 @@ on: jobs: deploy: - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 diff --git a/icesat2_toolkit/utilities.py b/icesat2_toolkit/utilities.py index 70f8f91..54f0cff 100644 --- a/icesat2_toolkit/utilities.py +++ b/icesat2_toolkit/utilities.py @@ -1,7 +1,7 @@ #!/usr/bin/env python u""" utilities.py -Written by Tyler Sutterley (10/2024) +Written by Tyler Sutterley (07/2025) Download and management utilities for syncing time and auxiliary files PYTHON DEPENDENCIES: @@ -13,6 +13,7 @@ https://s3fs.readthedocs.io/en/latest/ UPDATE HISTORY: + Updated 07/2025: switch default provider to NSIDC_CPRD Updated 10/2024: update CMR search utility to replace deprecated scrolling https://cmr.earthdata.nasa.gov/search/site/docs/search/api.html Updated 09/2024: add polygon option to NASA CMR spatial query @@ -1870,7 +1871,7 @@ def cmr( polygon: list | None = None, start_date: str | None = None, end_date: str | None = None, - provider: str = 'NSIDC_ECS', + provider: str = 'NSIDC_CPRD', endpoint: str = 'data', request_type: str = r"application/x-hdf(eos|5)", opener = None, @@ -1906,7 +1907,7 @@ def cmr( starting date for CMR product query end_date: str or NoneType, default None ending date for CMR product query - provider: str, default 'NSIDC_ECS' + provider: str, default 'NSIDC_CPRD' CMR data provider endpoint: str, default 'data' url endpoint type From a733eb8eca21269fadb38fc962b63f58763add5a Mon Sep 17 00:00:00 2001 From: Tyler Sutterley Date: Thu, 16 Oct 2025 14:19:39 -0700 Subject: [PATCH 6/8] fix: set attempt check to token url --- icesat2_toolkit/utilities.py | 7 ++++--- notebooks/Read ICESat-2 ATL03.ipynb | 3 ++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/icesat2_toolkit/utilities.py b/icesat2_toolkit/utilities.py index 54f0cff..fc78f19 100644 --- a/icesat2_toolkit/utilities.py +++ b/icesat2_toolkit/utilities.py @@ -999,10 +999,10 @@ def from_http( def attempt_login( urs: str, context=_default_ssl_context, - password_manager: bool = True, + password_manager: bool = False, get_ca_certs: bool = False, redirect: bool = False, - authorization_header: bool = False, + authorization_header: bool = True, **kwargs ): """ @@ -1075,6 +1075,7 @@ def attempt_login( return opener # reattempt login username = builtins.input(f'Username for {urs}: ') + prompt = f'Password for {username}@{urs}: ' password = getpass.getpass(prompt=prompt) # reached end of available retries raise RuntimeError('End of Retries: Check NASA Earthdata credentials') @@ -1310,7 +1311,7 @@ def check_credentials(): Check that entered NASA Earthdata credentials are valid """ try: - remote_path = posixpath.join('https://n5eil01u.ecs.nsidc.org','ATLAS') + remote_path = 'https://urs.earthdata.nasa.gov/api/users/tokens' request = urllib2.Request(url=remote_path) response = urllib2.urlopen(request, timeout=20) except urllib2.HTTPError as exc: diff --git a/notebooks/Read ICESat-2 ATL03.ipynb b/notebooks/Read ICESat-2 ATL03.ipynb index 103a044..96dce5d 100644 --- a/notebooks/Read ICESat-2 ATL03.ipynb +++ b/notebooks/Read ICESat-2 ATL03.ipynb @@ -609,6 +609,7 @@ "metadata": {}, "outputs": [], "source": [ + "%matplotlib inline\n", "# create a histogram of the photon heights\n", "f4 = plt.figure(num=4,figsize=(11,5))\n", "gs = gridspec.GridSpec(1, 3, width_ratios=[1, 1, 2])\n", @@ -710,7 +711,7 @@ "\n", "# set animation\n", "anim = animation.FuncAnimation(f4, animate_segments, frames=300)\n", - "%matplotlib inline\n", + "plt.close()\n", "HTML(anim.to_jshtml())" ] }, From 0c912c278bd99da5a92faa6de1f0e9ca766fe7b5 Mon Sep 17 00:00:00 2001 From: Tyler Sutterley Date: Thu, 16 Oct 2025 16:27:18 -0700 Subject: [PATCH 7/8] fix: orbit_info group may now contain sub-groups --- icesat2_toolkit/io/ATL03.py | 16 ++++++++++++++-- icesat2_toolkit/io/ATL06.py | 10 ++++++++-- icesat2_toolkit/io/ATL07.py | 10 ++++++++-- icesat2_toolkit/io/ATL10.py | 10 ++++++++-- icesat2_toolkit/io/ATL11.py | 10 ++++++++-- icesat2_toolkit/io/ATL12.py | 9 ++++++++- icesat2_toolkit/io/__init__.py | 8 ++++++++ 7 files changed, 62 insertions(+), 11 deletions(-) diff --git a/icesat2_toolkit/io/ATL03.py b/icesat2_toolkit/io/ATL03.py index 0c56746..fba432b 100644 --- a/icesat2_toolkit/io/ATL03.py +++ b/icesat2_toolkit/io/ATL03.py @@ -1,6 +1,6 @@ #!/usr/bin/env python u""" -ATL03.py (05/2024) +ATL03.py (10/2025) Read ICESat-2 ATL03 and ATL09 data files to calculate average segment surfaces ATL03 datasets: Global Geolocated Photons ATL09 datasets: Atmospheric Characteristics @@ -15,6 +15,7 @@ https://www.h5py.org/ UPDATE HISTORY: + Updated 10/2025: orbit_info group may now contain sub-groups Updated 05/2024: use wrapper to importlib for optional dependencies check if input filename is an open HDF5 file object Updated 03/2024: use pathlib to define and operate on paths @@ -166,6 +167,12 @@ def read_granule(FILENAME, ATTRIBUTES=False, KEEP=False, **kwargs): IS2_atl03_attrs['orbit_info'] = {} for key,val in fileID['orbit_info'].items(): IS2_atl03_mds['orbit_info'][key] = val[:] + if isinstance(val, h5py.Dataset): + IS2_atl03_mds['orbit_info'][key] = val[:] + elif isinstance(val, h5py.Group): + IS2_atl03_mds['orbit_info'][key] = {} + for k,v in val.items(): + IS2_atl03_mds['orbit_info'][key][k] = v[:] # Getting attributes of group and included variables if ATTRIBUTES: # Global Group Attributes @@ -463,7 +470,12 @@ def read_main(FILENAME, ATTRIBUTES=False, KEEP=False, **kwargs): IS2_atl03_mds['orbit_info'] = {} IS2_atl03_attrs['orbit_info'] = {} for key,val in fileID['orbit_info'].items(): - IS2_atl03_mds['orbit_info'][key] = val[:] + if isinstance(val, h5py.Dataset): + IS2_atl03_mds['orbit_info'][key] = val[:] + elif isinstance(val, h5py.Group): + IS2_atl03_mds['orbit_info'][key] = {} + for k,v in val.items(): + IS2_atl03_mds['orbit_info'][key][k] = v[:] # Getting attributes of group and included variables if ATTRIBUTES: # Global Group Attributes diff --git a/icesat2_toolkit/io/ATL06.py b/icesat2_toolkit/io/ATL06.py index 65d175b..2942622 100644 --- a/icesat2_toolkit/io/ATL06.py +++ b/icesat2_toolkit/io/ATL06.py @@ -1,6 +1,6 @@ #!/usr/bin/env python u""" -ATL06.py (05/2024) +ATL06.py (10/2025) Read ICESat-2 ATL06 (Land Ice Along-Track Height Product) data files OPTIONS: @@ -16,6 +16,7 @@ https://www.h5py.org/ UPDATE HISTORY: + Updated 10/2025: orbit_info group may now contain sub-groups Updated 05/2024: use wrapper to importlib for optional dependencies check if input filename is an open HDF5 file object Updated 03/2024: use pathlib to define and operate on paths @@ -191,7 +192,12 @@ def read_granule(FILENAME, ATTRIBUTES=False, HISTOGRAM=False, # ICESat-2 orbit_info Group IS2_atl06_mds['orbit_info'] = {} for key,val in fileID['orbit_info'].items(): - IS2_atl06_mds['orbit_info'][key] = val[:] + if isinstance(val, h5py.Dataset): + IS2_atl06_mds['orbit_info'][key] = val[:] + elif isinstance(val, h5py.Group): + IS2_atl06_mds['orbit_info'][key] = {} + for k,v in val.items(): + IS2_atl06_mds['orbit_info'][key][k] = v[:] # ICESat-2 quality_assessment Group IS2_atl06_mds['quality_assessment'] = {} for key,val in fileID['quality_assessment'].items(): diff --git a/icesat2_toolkit/io/ATL07.py b/icesat2_toolkit/io/ATL07.py index 99cffb3..934a6c7 100644 --- a/icesat2_toolkit/io/ATL07.py +++ b/icesat2_toolkit/io/ATL07.py @@ -1,6 +1,6 @@ #!/usr/bin/env python u""" -ATL07.py (05/2024) +ATL07.py (10/2025) Read ICESat-2 ATL07 (Sea Ice Height) data files PYTHON DEPENDENCIES: @@ -11,6 +11,7 @@ https://www.h5py.org/ UPDATE HISTORY: + Updated 10/2025: orbit_info group may now contain sub-groups Updated 05/2024: use wrapper to importlib for optional dependencies check if input filename is an open HDF5 file object Updated 03/2024: use pathlib to define and operate on paths @@ -135,7 +136,12 @@ def read_granule(FILENAME, ATTRIBUTES=False, KEEP=False, **kwargs): # ICESat-2 orbit_info Group IS2_atl07_mds['orbit_info'] = {} for key,val in fileID['orbit_info'].items(): - IS2_atl07_mds['orbit_info'][key] = val[:] + if isinstance(val, h5py.Dataset): + IS2_atl07_mds['orbit_info'][key] = val[:] + elif isinstance(val, h5py.Group): + IS2_atl07_mds['orbit_info'][key] = {} + for k,v in val.items(): + IS2_atl07_mds['orbit_info'][key][k] = v[:] # ICESat-2 quality_assessment Group IS2_atl07_mds['quality_assessment'] = {} for key,val in fileID['quality_assessment'].items(): diff --git a/icesat2_toolkit/io/ATL10.py b/icesat2_toolkit/io/ATL10.py index dd2835c..50da94d 100644 --- a/icesat2_toolkit/io/ATL10.py +++ b/icesat2_toolkit/io/ATL10.py @@ -1,6 +1,6 @@ #!/usr/bin/env python u""" -ATL10.py (05/2024) +ATL10.py (10/2025) Read ICESat-2 ATL10 (Sea Ice Freeboard) data files PYTHON DEPENDENCIES: @@ -11,6 +11,7 @@ https://www.h5py.org/ UPDATE HISTORY: + Updated 10/2025: orbit_info group may now contain sub-groups Updated 05/2024: use wrapper to importlib for optional dependencies check if input filename is an open HDF5 file object Updated 03/2024: use pathlib to define and operate on paths @@ -133,7 +134,12 @@ def read_granule(FILENAME, ATTRIBUTES=False, KEEP=False, **kwargs): # ICESat-2 orbit_info Group IS2_atl10_mds['orbit_info'] = {} for key,val in fileID['orbit_info'].items(): - IS2_atl10_mds['orbit_info'][key] = val[:] + if isinstance(val, h5py.Dataset): + IS2_atl10_mds['orbit_info'][key] = val[:] + elif isinstance(val, h5py.Group): + IS2_atl10_mds['orbit_info'][key] = {} + for k,v in val.items(): + IS2_atl10_mds['orbit_info'][key][k] = v[:] # ICESat-2 quality_assessment Group IS2_atl10_mds['quality_assessment'] = {} for key,val in fileID['quality_assessment'].items(): diff --git a/icesat2_toolkit/io/ATL11.py b/icesat2_toolkit/io/ATL11.py index be6fae6..bd68144 100644 --- a/icesat2_toolkit/io/ATL11.py +++ b/icesat2_toolkit/io/ATL11.py @@ -1,6 +1,6 @@ #!/usr/bin/env python u""" -ATL11.py (05/2024) +ATL11.py (10/2025) Read ICESat-2 ATL11 (Annual Land Ice Height) data files OPTIONS: @@ -18,6 +18,7 @@ https://www.h5py.org/ UPDATE HISTORY: + Updated 10/2025: orbit_info group may now contain sub-groups Updated 05/2024: use wrapper to importlib for optional dependencies check if input filename is an open HDF5 file object Updated 03/2024: use pathlib to define and operate on paths @@ -173,7 +174,12 @@ def read_granule(FILENAME, GROUPS=['cycle_stats'], ATTRIBUTES=False, # ICESat-2 orbit_info Group IS2_atl11_mds['orbit_info'] = {} for key,val in fileID['orbit_info'].items(): - IS2_atl11_mds['orbit_info'][key] = val[:] + if isinstance(val, h5py.Dataset): + IS2_atl11_mds['orbit_info'][key] = val[:] + elif isinstance(val, h5py.Group): + IS2_atl11_mds['orbit_info'][key] = {} + for k,v in val.items(): + IS2_atl11_mds['orbit_info'][key][k] = v[:] # ICESat-2 quality_assessment Group IS2_atl11_mds['quality_assessment'] = {} diff --git a/icesat2_toolkit/io/ATL12.py b/icesat2_toolkit/io/ATL12.py index 29d11a3..db57136 100644 --- a/icesat2_toolkit/io/ATL12.py +++ b/icesat2_toolkit/io/ATL12.py @@ -1,6 +1,6 @@ #!/usr/bin/env python u""" -ATL12.py (05/2024) +ATL12.py (10/2025) Read ICESat-2 ATL12 (Ocean Surface Height) data files PYTHON DEPENDENCIES: @@ -11,6 +11,7 @@ https://www.h5py.org/ UPDATE HISTORY: + Updated 10/2025: orbit_info group may now contain sub-groups Updated 05/2024: use wrapper to importlib for optional dependencies check if input filename is an open HDF5 file object Updated 03/2024: use pathlib to define and operate on paths @@ -130,6 +131,12 @@ def read_granule(FILENAME, ATTRIBUTES=False, KEEP=False, **kwargs): IS2_atl12_mds['orbit_info'] = {} for key,val in fileID['orbit_info'].items(): IS2_atl12_mds['orbit_info'][key] = val[:] + if isinstance(val, h5py.Dataset): + IS2_atl12_mds['orbit_info'][key] = val[:] + elif isinstance(val, h5py.Group): + IS2_atl12_mds['orbit_info'][key] = {} + for k,v in val.items(): + IS2_atl12_mds['orbit_info'][key][k] = v[:] # ICESat-2 quality_assessment Group IS2_atl12_mds['quality_assessment'] = {} for key,val in fileID['quality_assessment'].items(): diff --git a/icesat2_toolkit/io/__init__.py b/icesat2_toolkit/io/__init__.py index 6c08571..045905a 100644 --- a/icesat2_toolkit/io/__init__.py +++ b/icesat2_toolkit/io/__init__.py @@ -4,3 +4,11 @@ from .ATL10 import * from .ATL11 import * from .ATL12 import * + +# segment group names for Level-3A products +segments = {} +segments['ATL06'] = 'land_ice_segments' +segments['ATL07'] = 'sea_ice_segments' +segments['ATL08'] = 'land_segments' +segments['ATL10'] = 'freeboard_segment' +segments['ATL12'] = 'ssh_segments' From fd248df32d5b6164c5255f33acd77614f4b5b206 Mon Sep 17 00:00:00 2001 From: Tyler Sutterley Date: Thu, 16 Oct 2025 16:32:33 -0700 Subject: [PATCH 8/8] fix: forgot a line --- icesat2_toolkit/io/ATL12.py | 1 - icesat2_toolkit/io/__init__.py | 12 ++++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/icesat2_toolkit/io/ATL12.py b/icesat2_toolkit/io/ATL12.py index db57136..39eced3 100644 --- a/icesat2_toolkit/io/ATL12.py +++ b/icesat2_toolkit/io/ATL12.py @@ -130,7 +130,6 @@ def read_granule(FILENAME, ATTRIBUTES=False, KEEP=False, **kwargs): # ICESat-2 orbit_info Group IS2_atl12_mds['orbit_info'] = {} for key,val in fileID['orbit_info'].items(): - IS2_atl12_mds['orbit_info'][key] = val[:] if isinstance(val, h5py.Dataset): IS2_atl12_mds['orbit_info'][key] = val[:] elif isinstance(val, h5py.Group): diff --git a/icesat2_toolkit/io/__init__.py b/icesat2_toolkit/io/__init__.py index 045905a..98c9dd6 100644 --- a/icesat2_toolkit/io/__init__.py +++ b/icesat2_toolkit/io/__init__.py @@ -6,9 +6,9 @@ from .ATL12 import * # segment group names for Level-3A products -segments = {} -segments['ATL06'] = 'land_ice_segments' -segments['ATL07'] = 'sea_ice_segments' -segments['ATL08'] = 'land_segments' -segments['ATL10'] = 'freeboard_segment' -segments['ATL12'] = 'ssh_segments' +_segments = {} +_segments['ATL06'] = 'land_ice_segments' +_segments['ATL07'] = 'sea_ice_segments' +_segments['ATL08'] = 'land_segments' +_segments['ATL10'] = 'freeboard_segment' +_segments['ATL12'] = 'ssh_segments'