From ef697ac5f5e57ccb115d68e3904216f8b48bf0b9 Mon Sep 17 00:00:00 2001 From: jebus Date: Wed, 15 Oct 2025 19:25:23 +1300 Subject: [PATCH 01/17] [Fix] Added UZH Affiliation, Update UoA Images (#153) Co-authored-by: Tim Lorsbach Reviewed-on: https://git.envipath.com/enviPath/enviPy/pulls/153 --- static/images/UoA-Logo-Primary-RGB-Large.png | Bin 0 -> 116659 bytes .../UoA-Logo-Primary-RGB-Reversed-Large.png | Bin 0 -> 117023 bytes .../UoA-Logo-Primary-RGB-Reversed-Small.png | Bin 0 -> 18308 bytes static/images/UoA-Logo-Primary-RGB-Small.png | Bin 0 -> 17418 bytes static/images/uzh-logo.svg | 488 ++++++++++++++++++ templates/framework.html | 22 +- 6 files changed, 500 insertions(+), 10 deletions(-) create mode 100644 static/images/UoA-Logo-Primary-RGB-Large.png create mode 100644 static/images/UoA-Logo-Primary-RGB-Reversed-Large.png create mode 100644 static/images/UoA-Logo-Primary-RGB-Reversed-Small.png create mode 100644 static/images/UoA-Logo-Primary-RGB-Small.png create mode 100644 static/images/uzh-logo.svg diff --git a/static/images/UoA-Logo-Primary-RGB-Large.png b/static/images/UoA-Logo-Primary-RGB-Large.png new file mode 100644 index 0000000000000000000000000000000000000000..29b2a10df7eba652cde62ae5d03dba5f69ca3f5f GIT binary patch literal 116659 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 z z^AEQ@K@7E|nHIfo9!nNWrl$oWZNY4L0)f9Ic?lWhK#*CK69Dhd|K>K)*=y>-0+oW8 zpBy-san5p((|(Po5@d0Wp}*T#YXgXmdDW;M7nzT%C%4O-S2CGY%fCq1h!CBH9GRx# zAEt;{a&KJ-EAw%AI{KGRVJgG+$?&_DyLS@F4ru2O6pKHPkK#BI<{s1ybjeKpQhH}$ zLa(f{xXP`gjUYNM;fGdc)N8*wMnR0KUh?s%fn|_MRDLQ)`*d_kf#Av%K(sU5p^D|s zDiHSC_Cp_}A2P2H6x}144oC7Q2Fpb;r#B zs}Q&A%Q*%aJ0E(0pRaJ!LnOdXhisO=o+?eF3MRpa( z_>f-|avIA0Jep@fbCOY0R3#0>2@6phyJ+x1J?a4nd1A)8cK54p4ImAD#A#1Uf6XhT zo{uZWskFya7%IPi$~~V+p3jKN8<;tfWz= zo>6j0dO1+`WtOCm(i-z3sx9xb2&m288p}q?oP`*%+%U`cFfl~pMC!=q>2~c_xvA-?M7c8N7 zmm4al^r$-<6g68p^o;n%CwZkI%4}hF9cVe!J974Te=_jFZ|E!D^DXGPMPxyFDFWRG zjGFWh7jIs$?~aI^pb?Yx$a?l9$T8#7ThdCJHMtSGY-|H(VQQMrNGhZKO(OR@YaX1l z!j*4ViIvsh(>hFd02@oeSk4b+Pz!uOOk&D|!K_(6G_m}*;Q6;71}HKH1xYInem<&k z+~thm7OI!;)bbY>q1YBGTUEZb=$P1R3faI3-1O*iJ2U$ku(5Q6cY7o(o0Nr#ADG@2 z*9;cLXp>gt<&< z7tka*3^%rmrEr0V0#ztom|&4mQ>` zOxPfwx3EG}JL5k2fIcm%Zg$s?u*ja!WVZ0~XaTL0W?KaW)b|aUvQS$48c?> zAZ&ec!a%=>j#G(m+Iin(Ij7`slxJ{xgBLX(Si51Q%o~U=8^~R^g3zs~@UW5nY5#C)KX3<)aR~LkGbxg;E{sb%B0rag%HC&;=g8o#HZG9#`@B~5 zULutwX5eUM@iXVe9l?2@5S3u8j1W`QodA#)}8??txoMo^cCPJ758fA6(-g7 z_D_mimO&%n?x31j4Y>utY2noz;U?SW2s09H??ZA#j=2Wg~b71 z+JU`n5uPW1v%*oYMP(HjD_fC=nt?M@xHdiQ%mLpdrQ4%2?ru8!ylT_1j{NfetGqYP%koU#&s==At?yr99a+BOFQr_= zV2SGV$n)8kliy;kuA{cy^kX_h55cV z`RpFqp!b4(35B-Jd>O4{%u-5zs?)9yjGoH4bFnU6U0$5-WRR6L6^+nrWKCNjaCuVk z5PB+4nM;?fV%|>s3q&*|v#`V&BPPt6XJV@qRf<2;8G;QB+eYc$@a5f!uiP)!T67eh zvI5(phP6%(pMiaL;w?_d@OEKu2d=9n7^p}KlLD5)nXac^OI){)e5vcC3r^YO_WGuA zkW;GHiaM_5@P@8UG|WlTMk&wPaV7`TQW%KyeP4HW8>vaTA!72=D^Es zpWTs27s1^#bV~Z{*OpwoDMP}(DsEVkBygqHgPjQ`SeLT7W_fDpA`C1PIiT&yV`Bk* zUe8nKsy8v_M&F0b7Pb`tsge5&@7i%Gv%7>(Ss&Zw(>6|C^`=^3kuE*-3*r=HJ@hxS zy&>Yfa!xjnibtNgRY>o)E9=@7|1$ZiC_;r}haNKh6~|aWcIje$LI{QM< z0V_V?QklUFlQY1J99ybMQlslb%aGFKa@lqYte>)y7Xve# zjp*6;@2Kq{>V4WCa5r=;`8PK0B@ZS|=%ef{CNB6$T2(lel?TqC>wO5EQ?3?MwhG*I zH6l%ZUJ8pMkUjiidu2{NM9WAUjU(ilxp+HYp$2Zuso(Q(a=5TTgj<5Xma+zFDySCo z`7DtcF@cND*e|hbd7{*V;7n02ZSxtQzdyp^$=q7rzoW>TRG)B_D&C=nD=>S#94nB4 zSrknDRukqSu;}<0UJtIHQs%5sNfu_2f-tshHDA8b4FfVHFBbZB`&II&!{E&DC+DIj z;?nzWE_`TXJK?CY>+Ocj5_31&1NV(id+850S+l8b^bFwHTnlP$1`Y&8+0o&wg3r(v zb>CnTZ5v-HG>vX^TPclh3nI29i+9WNd|@NaT?mU?_0SQ(@}rMxTUL}h8cRa^g) zAQZQrt)IODz)Wtzlg~N`^B2FiSVNW3eX19=3Y2f1Rt7@0<(#zVBbyL@b%XlAgXfjmK@j8wux=39QWV zZhG)nV+;#giq;)B>%Ka3WZmAhtJ%M=nmLZBrw#A3Fex4JA)KneY;pgRLyqU?zm{&! zR3?X1?q3Afme?_I{raUjLXOOqpx2uVcK~am@~T@qbHk);(8%_;F6r^stD;p!XWCS8 zCRL-N%o0WSE_t$d)b)#X)g=0u%eA5|l}e>B*Wmz&zaQkCr)!?68uB9J|CWoD%Bd!b zcUhx@&1ElG;ZxhmXY@{A)rAaiIbv&JZSR-8*ifS3Kv%R4pUuKSYs{cG>U!o&oyGx8 zBUh(oCPJ9`if|SmecJE7aLp=}%ztU&CaNh@@lc-@*x z_4Ry7ax_-#!-2wKJ&uVORd`USa{EKbDvy)zJ78}Ia{n5VN}I$F{ztT&_g6J2&UfDB$0>fBEJ);?Qr zr}3dHymDV2Cn_#>_{0ud_#;F*NgO zT{s58G~0aRG@7cA~>^4*}z*>WR*$eLG@%dWIwY+J0vFi~?q zKe+6R>HM;|Dh*rIN5{DPS|I0q5e~Ot1u|kTj zwtdmI{r#-j1AMikRLzJS!#TCViLX|#RL`vHUNQ=ZkyvHORb^kx7tD4wu(4th?6*t4 z2aVgZPILJ;0*I328X}~mZjc{ec7muE?1>8_d+riV=)*ywu1t*}7Mg*61FI9YO?Ju- zngx~Plo|Oa_6Cz}l|Iv@%Ioj#Hu>8=ZmW7}QpuS;^5e4x{vrFl{GuB*aF~$1PYgcU zl>EkIqYm&ubYa9jc9$TUyC?&c{f8KGK47>)M*{xedgil>-EYm44d#r^c2!DY_Al3e zr0D&y5qUos_0u+t=Th-Ub%}sN&9W?O$+xUsIz^G=bpTtPU!+Y{8_(h=;5A4t1NZR& z4!QB42QcGvU809D(coW`jh~=Uul#RnbMuKT4kcrY+c(T<$8^fJl%1CaN)!iv5H-Bf znOvfI%%mfb^cS@`cPjX&Zp1pQThFKe;~BEGh>NYL2PJhuE@py${vKs<-imVT9FQy= zZq-)K7JVOhjHtIgvWsLVL4?*MOqZ9`40M>G9!wxMQ?5&4-VKcj^kgERUBBtqJm_IGy;J)Hyw@Tn{<#G;3M@x=;v5_W1Yq5~b#)Pa%CF5+#E-aQjtAlY-* zs(&IXV}NZ6KnG0P5YTz~YdMFZ=2Y#~)n?|@=Y6B~K)H8u!-C%*5FG?5wHC;&y{4;v z1W=QjNNwgz6S-e$u+ZCae`gOc zrl?rkDnqYRJ4amnGTQhQiwkFPO=cL6|Dj|D_;wWzRH6$3?~E_V+t5Qbb@|69gzR5p zZY!J)=)c%_4^xZkjno67XTwcJK3S%~^QLQZrUu>Z*h`^a6I{8|O3c|se`*1m`r>>9 z3Hji}B&Z$6pPJEC8y&MZq}Hx{PzN4eEgTulw+np@A7~C_NusYb&y4)Erk59LUKq3lw^hr;$JVl4 zMSDjb)~`_f6QR$yiA&5nPuf8=n4!Y#?OhLykbK)XnWloT7e%?I;x){;2eZIg+53D7 zJLRe_gY`k%*1Fu9Z)8OWc@rfWd_XXJ@+VgBw6YgLX~vq9ip_x3%F<( zyKB6zUnBFXAZIz49=4|YIm^Soib1jx-_8~NBZ5rBSkBD^56se>mOOPEQ0#IizngXD zS7CO1M`4ska(E1fv#@uAnTVG|t-h<(v-@kq&Yyp+*jn zjRQhbb1kyv1<&7)qc$_X>&ORw>`KgA+kPAe;j36W8>Dm*Bgfc2M#~fQ=!Wn~vh+(K zHG{ugLCk+UYx-+s#YD-j*;kn#e`zg|?oFXIjS6P>Tr)j~J~r@;%z{I*XN?!dE1oz5 zFxXjfK2!-5=Le6p09ng0xzbyTKny*M8}Zwbd<~eCo?s5P3E5u*+DL9@qKOPTU=`*- zg}{o*_iqhTuMnC8ua_WmGZ<4Zd204XD$%z$aQrxTp2IOpmu=1M4q1`I)bkY$%jzvg zd##VYmDUCCUDrBJOIi*QE*`8su5;XZ(`_%_${D=tyqXB7fNmULd$KK#({lirT@{C& zyy+_kW6XSUL7rH*xYTt7D#WrzN(*R0f1G zYA()u=46^jx>S;axIQx4Q1g{Q(?S?TxB#$m9Z=68)ntF&EBPVG#7aqJ6-h&)i4)-a z3U=V7>G?+`0NG;kZ6{sB?!Iu*xDB;8&|5eNRQGlFmUC-=*WC{e3u4nAzRvkLG9m0Lti!M{ zWhj!Q+iAYY&z@bdsCa1Xn@D4RWH7lD`{jTdseU?-N0J!QPiWi@!DazLkdC#UK%Roi z;g2@0J!6{Mv|Vf07pm8o)JSLch`(#JIG^DG%E2wJG9P+m7=17!GYe~^`~@T^1A8{i01Z^=KV+KxglgQ zuoRHiS*+QSJ=f2)f3i@CW4BqcuwuI5u6LY^F*Jvfp6e}}^s*J2aFjG6Nq?2d=~$cq zQ;$U(JX_-3nrEerEtaAD>&cYO28Q|TAgr#Zex}})tqdkzNV^{gK=KUGf}Fc8AQhk- zV8;9g(kd-aOn?M}{dvQlriHhg_EhOL+=}WEm%h$4Kfa&a!sij6DpZ%43&T3S z)LZeWr;-6$?vzi9E!c{YR z9IWcpi~Oka51F|h=3v`Udiu}oP%3hJttegFQIL6@5P-7@tVKkSHtcw5|FEPwQa;s2 zOigsv;{GE4U14@=_z)1}0VgLNj{ygH-K6KK{=TuB<)IFQI|IOFdNE8U2ClZo#Br)| znEBp&Zw!Bv2}FHmmB?qa%7el}4G1!2y0+PT==@$^B?)GA8XZ~=Vr}erGFv$E9Sw)^ zN=#BjH0WTmFa>d9V)Wa{FzH_OZ?XWM*c(`^|K&^$xr+k+L9=I{{Xz$7`i`S_n8NA^ zdoA8C{FYR*!wQUpAJn3Hiqd0rp23)0zIA+Nq$ps^bV|NLl8Z7!%&ajkGTJI2Hq)vD=S9fmi;COOCyUG`eQQceBmNn zx=Mlx0j6BZG-Cq}lxK|J1C}BQuo0ARgTSdo=!E+{u20oTl3z)e^jYGjE;xg`2Iq|N@m>(k*MR~FqU#E}cP5bp2ZB3V zONyBO+~4L|x_TmO_OkoEG4C^U&WX39dY-0sw)AsmF#Ol#FlBPFw~tK%C|Av+oHp#l zZ58akNOP7Qeh$@#w=i&AIxs;40Q>2VAleGpTNW7?F*Wpy{Ku$;j(4CErF(Lk{D!-P zh?avdF?Jr9;A&Z(76$Me;E(5YeP$ZdWKjSKl4v2(%)3}(d64CheZz(iAunY1I8NJ% zG)Z%UdXEs76W|NQ#;JCqDrZSpqg-U7z@BA7^cU%aW7!s? z-Eva?su2x3=5~~>zB*nF_O!Nb&d_8rHWZzm2H3_FN>;Ocfxi3~02V+m{9YB3(aa{J*wBBw9I8lwPDW@(s%qIt51u0Zz z<)L&UArTjeXqO9s_l=@5i)=DN*`mnE?|R+TyU+LWJAb_2dfn%B#&xdid5v?O^MdI5 z#>etQIp%t2M|c40h1sY(0bZyAl})eCncyYVQ(NUm=*AxBl37fHn~0`3;j^xI$`~!b zIXu(@+k>_DII(?K!aD3IPP4Nopd!EAN-TyT#fro9%u(x13!$)M&z#A2jI8_&MVX?E z#z06ps)<+8ueJ)8H@)Id>rmP?ChCY4G`yCe4oN4)a}+C=(fJMOGJ{3S=-U(a)>S}w z_t=dTFzsuOhmbvf0$cK3`NC8nDuhe#abz}9QQyC~eGoa$py$p;`n8^`;hTwz4w^xk$CYRn02s-QWsx&S|F|I6Fv&bfMbZUWv*n)iLv)yCdaL zX4fWMMvvMBOo4O$0{5C|PopeB^-6&Tg79=bG6=^2}cs3QkG0Gp<)0|;28#+XHf;K+#k@mT;vM2U)tJ^(Z- zwA`j@Q-Vl4HQK;E0$pprJxz3Gk-%$wyzyE7d77UFN*iS(fhz^*P|W-&9H{L{>V*Y& z6iAEur}&qSj{;tOHUG$BCl zgDO2^X(=O!8?Ju*bWIF0^pM*;l{8`RVXyUhw1$=1FjoVg!O}Z4BHu%d&T!8a&;H!S zH(!j|VM}IMNd~X|4D4LGo6`DsP*(DtIQHe*OUVB{V{ntXt{<-fdRH-K(lx^6eQK-g z09Vj`{=zdMKycH0s97ObcDzDN+Nh8&(}l#okEh|AD2T#zgnbmDt?RYWkO3E-ChTn~ z+puP)#$+r22G6cNGa)cJd-OYlI0+l6+3(jMIvF)Jc|5X4`rSia*7kRP_#_q13i%yY zwfbU0wQUEGl%qs*$G*dQUrR7H@E|R&E3IT1yTROfLwbd;^VfP6Y!yFmrwz}lfXy4E zJ&<5-D3I_~CJK7n4@9=;5?defLVj{>hz{t7vw z(Xd{*^4;EtVxmSBwq161t?b{N5Ue2``~LA2V4D-*@xo8pD+4#2EX|ukbkJ=zQ@j!|5&gwu-1rb(TdRR7`(_*Gn!p zP@@HgcS8-j;TBl4>wCwnj&vcboWUg;CDPs`u$G|wV-2#ocTq!r{9T68JVh+4wxyx5 z651du3dFP>d;);|g9Z&x=d>T(g5|77b?|B%@LNph>H~xYNxrP?lm=*kSAQdEbW_QW zC*er|(+wgd3!jnx1~mfcZh8o4gsL5d?eSfJdYeD!6eYE-L-xn)5jqEcHX-B3aPi9W zk)k6eM9g8*-VCVZxHnu|{FIRQy8soSC@C!`F{$IJvvidPfh=K7I_8G7zP7MFARwuA zuGhjkAbCtEy??}IYR(q8wucjB0J{aI5%XEvBmKy#0a(tbzo4c#UXY?FxbDlhtCsp}oXfB18>Qs|p!V(bx)i@?OqMO~Rb0(f zlo>cbxcLzD#xNmwjhcbSLyGK?6JmH-dH&(8U`V#W>4CiB=B<8Dli4Z?z#f|Z%>e)d z>!Z5@m6;#9lmWyxY>S6o;r=nVW#6t{7#)CFM>M9n01h$@*$K7A9X@UG<;bq?AM9iSkz=^?wl8%XacefzvraxzM)$uzzDwHLTup8 zfqA0cBh;Kh!p)_!L8ze7&eX!E%W`jBqvZ-R4|b=h?;K=9^(=Z10J7@ZDCbysvAlSW z9GOM4>{hK&X5x*13idEw+N9K-idYbQ&6Fih53r^g>k#>q_)^2r-95Q+cHE$xK{lR$ z=t`o|@MwWH2hnjlKmB^rb~c4lA@jI`rwZ+6^;gi4)gQjqiJ{U}s+x%stTd1V%*fp% zJe^)$7e&-w(pENK(#Pq z*xaUYCXvt=e|kQ=Vo@-J4tDsEfcPEgmRqOGG2?q$K(GXu<51-F$OO9eo*3x^o-JGg z$K{+jYR5cMLk)M%rn;hoNn@98!fa*DrHt~6*n&6%WsZ-1KR9Os4VOp-OP?NwJ#9B9 z<7kk6T;4Y1nge@@D{vk(&8$4Cr{p*Yv8!S6#N&oCkfO>lCIXShm$0KyF9`CFYH!lA zKp7B*-PgUkvWu!0aLpsHh|vX}MhWNMa&JTnL={Q718ynnh?^_yWh*x^lnLnbkLjRp za%XYSi7ROnu5_cuMqwQz;P6H z*&fMsJ=NyBYKhjvR-r>g^GEQv31bu#QrC_$0EZh{?R&MF|Az0d5UQfvfq<-^U}tbe z;hbZ;IF7xgVSLVn(AAXgTzc6R*IaR-K2mhj<7fn{V%(zXMM5hTP6(ysIk14R)t`(@ zkIVo#_hKMNfqbEmob~dT1^2D@QT=2+g>h}c;o>5FRA?i?Xd^xtaNz}9r1|l4 z6dd{I(MJ5mC@Qa;F{MN?XPQsTBN|s{HEwerUMSQayRjmKy=I%+e^HfYgm$7H_LERa z_<0OwMvi*JDYPSF+-PhLL6Tn_@N}^?Q(|-_MtrVFJs!DUwdN0w;J&M_hW?O?bkt7I z=^?+Ej?c+70b!2n%g`Dj85b|;<4$H#KvX1a_|?4LC`;*5DG(e%+Kdt*N5{wpOfKOr>uzx?LF5X zep3e~@ZIOk@9DmfcWK)ZhLdGgHaVfv0ydgEIxi~1iXBB)j4-cK;3}9@x)yEa7b@6o zhs%={58NEU$DtcG`}>H7Ra&e-k*MYtpR>xnf1Uv>sHqH!`uZrxoQgts53M=*|e z0$+YrhFzpb)crS(?Llx%uo07F#|rK!IKBHG9xF669C|`WqhS|*R=@7OuYi{InL&pp zU&#$#)U`K3WqgR@!v5*oy;^sKx*JQY*GY*JiMm<+5$4F-?L#E+|UZNDCrUHw+&IHrx00<~%S135yA0rio^HInQKxbg`aiW4`MN80o zMJvHhhe#)hN>x{cbc(Mk*CTD9>u_dDOfE4Jc5UxulC$X=RD$!{mX2R1@3~L4G(1=% z(L?!zb?&<1&=4|j8|eN*&YaebS;1zaUZNE^j|b&ECzSJy-F!yX!Zh`d?CN0uEME8R zDc}yGs|Nk&AIB_<4VWlLT6izZX2!xkl;-o{BG+0wFb|7hg z*N#`(PqkBIdJVaQfLz++)gL92_q3Cs?8M|fIO0V4aFF$je>CVx_C10XH0>nL$;S0> zbTG^GA*~YUTwVYi+eiL-B`;Y;C;xR-4wUlLkE+_F;S9Nn5JCrJ@K9V@sBr%E|51f98S^lWUjwwee7BaamPmxnMi4s9LB59~* zK1zdJ77fjFk&fLMKDXqXhmrQ65a&A1MR?U2Yyf^eZr)8FlT#X9zDHoZcHyRM>>+7Guleq;~q+~AHM z%`;LKA~-V-85qPbnik0=pDqciMa0jw3QZqQR9H)2FH226F>cj7J-OECH@bc`hf)KSWepRykL~7&s{;UcUes2>I%jrwIrnivas94(T zIev0RWo6|`w!EQ@AFOtdI1*`B%xU*LEk89`+S|UzAAN-29(KiB%q9j)58|-6lZ=eS z`1`V&wIuo+ zRDg|TBhqVqjTY-;_~}Cuo4!LBAzL$t8`9r6Z;VW5)^$(%*O?;1bg8>dP0<*w3(zV3 znrp~ihtquUZ}(QeXQ$*DQdrTZEsJ`zJSe??NPkrwnRWZnnKEmcSwXxI(}!`B3a^-! zW*J*1&}#Sd?w6K2w)RIS+|uTNfe~cxAsPfe4Ki3@n;U<=iHlVD1ZKqt;3BJ0hB8G0 zZC!gjE?j`9uv@sHsYCTvhmz~~PsCF_ueaxfjW;E_!U%uC>MI!-l;@Ze33B`JW1`)S zJtVsIH#koN5LyY|PM`bToRLv6mPG4@-bK~(;&Ty;{*hDXs4-e{MuiPuc0op(p0bcx zv$XefU1c<{0-T4V)R?(P+j~8(G6AeRq-Y4l>)R%_vfF=e!#Dr>fkv#iZck~BIU*aU z(WalVq-Ktb&Z#o{d>^~AnC?{c?kbX`Sr(D;(P96?IsLOXYKhyOj3ueXrO}E*BMojHz(suNd?WXtc(!PqucXb_^Lb?6jyIU4k7m+ocvs zod^2DvK|-06d&AH2f;@=Zv@&AQF$jK=C?Ll*4eaJWQ6InvH}4>&#bKgDT{48mJ#q*>tF22SL{ z+0$2F`<`=HEhE7z*uN&;eGyB3)K)Jvr`e4vA||3BQytmhWvcv{4?E9ygQK$Fim|vH zyI=%lbmxh#EM+ln{O(%3kX*%Amh}3wCQrjb1%W7u*PpMk^XY+CsRN1SuqA}2by)PL zu}3!>aC~-&8)Iu4lFMhSY&ak@s=@k6R3^z1wi3c@=6g~Cfjjp1GzY+e1=^Xw^7RCLRz-?| z?y;+mrlbUTlC9DlzQMA>6EnQpY!QAT_%1aOQE6L8YH+r6T+)1N#xu|u9R*A;Dhosb z3b}ciwatt@B-Df2+n5QWxW6GHW4IEm`K8Tip9X)tz%@%{TZ7--W9=qi;z3t11 z+|W}=Jr6gUC4?R+6I*|l$tkS=(oyS!bp5bD@7cR>hJAC$B3(L8rxe&x1Mad76fkH= zf9@ht{OrqxAKk~V^EZDcN64~1j{~Dvpc?oD%q+@FUPmTT#*?vH8GQrtZ#69h3OdS~ z3~ba6D!32;Qr2~J=|t$s`xUTT?d^AC@^$4E6GT_pe5o0IVKto^Z zy0^4e*D8v_UWTdaEYD;(c{o44d>UOy0a(a2qX@FE@sqtXtos|d{C@|-WZAPYr5F2D zjut3_DPbI1Uh%^4IeW6s>88(T(XFI-R8bl%wqG{{C1ZR$15;5zy(d|4?c%~gEcZdG zT|!`xWu--y%C6naAHC@fxDiF=s;!tkF3aNi&d&YXEl4VcnK!mEn%1Z|QN>Z21VkrE z8VTk1(f0_CeZO{)-RFy#4AD&Ys|ao#+qsmaf!DsCQWNz$S6l@O!YkhE&Ykox#tWnR zH23X_fBkpvtM}KXzySR|{LH|(ObC(v`oMWXi+$W>7a_ZUwAv=bO~oRa5qWv69YCp>vChXcRf{-?1kgqvXD5EVEWKVFU35dJtOZY4NPJ~bx|XTU2iL>MS{ zA#rmH_kGGcbKKKk7`Ys=zLZe0>sqgc-l-pFP7r-h2xXct9u$~}3L-u|vCH#dbwX5) zM3sn0lDPE)_B5$#pSqPCbW30~3p;@ZlJyJ9uUZCxahUT&_pbXTf&;Z0B`n($k> zaYH(Mokw<`en(T3(40Uh(J>E^$e+DMGiNy_Akfq!n;N~|(q1~ToX>jLH{Y@MOBi*W zG|~A{_6-tC&#h~}jnC`m$O;FE0k)|Zd;q)0S0wT`)snTEakb~-B-cs!OrCwZ zW)HXMl%YdjLlK>)*IB(^-VKfWMKQ$A!9_!Fswvz|tTK#mzZxyK$nWyp;%;BQBNkAT zE0cF}tbCwC%~Xv4)V#I3@rrDvd{W3{OoO7{uU8Fk_GeT}0X@_R^!V9E^7|f{L5;hJ zFG`V9LW=?sL?3;{BCjM*MoxUt-QoczoOu(MS-i||lzri39*FY6M<1N?AIwspjG!^2 z!qPC9K5uM}{}^8*QMWl4osgk_=KzU?QY77d(;{KJv88galD#L}DlBg27f2-C(y?3{ zYF@0Yogi1(kMiJ?sHQF9v76!J%ZrP7GZsHokfW0UrPiD$BD-=UJ(jYVgg`~byc#V^ zxVCyHw)+LK(4Ossba0E00RH5tGS}_n0;vYMGSsl(QV7YmsKjx($HVp0iYEtB>2H%5*9D zGCp`Kq`OcBai6+zF#H!wsBYuBS0^=`?2XY=tdCGwkvS>;?d;hE(Wz!`yUphh98S2B z7zA~kM}A&wks7GnY<2rSZ2$R@3tRJNeqFCkQ@PbL82$#^P^{N1mjcOk{U!g>ai0-* z)?6_kfo<@t(i?ZA&NqECbs!Q746dc&JNRWY}aJxyEn=oFl0Oj4d4_z;EpVdNoM zGjQx3>XtE8g*%LR_NruteVimI2=nVTFPA)8w z>ON{4ba+_?M$>WLG_y%Br|>aVv2Q^POiv!N6A!7CUJL9fZBuU`$5$UFJGs_lCW%Q^ zICu89T+iI$L7`d4W<#zqj{px|Zo$$!k1K%ji0@ z3%sSd3ZI(+&j`ve$sHP*3Q4b#r+U73jwFu04z{?+dm!q|330h|<#WynEYi`|8<-co zcz=uFK#!O7O>Z^^g%-w>gHC+B9u{vD7Hg*$Ei`}4XsB(oD7PsvE=M+VS>U#COGT6Z zs#mF(hh>!SspN_|TrW*Bqp@=T0FnjYD%kECKY8L3zTci<>n1O4vQ(L~UXgErNpWX$ zv2*Bp&XZ(zgkM!&&%R(JjO@f9tYyT7?tHbia^JLM6V=;R+zCMxSFOjL zGdjwgCcRcSn=6{KM)YhsSSxsqMx;tx`~z)KbS4yEZmH$HFJB({9aZ;2UC>aMY;5!j zN4P{muBae)7!C5B^+SA8fsoqL%C*d1b zE&B22^?Z>12D3?}Z%l8{Eagp(NGvrwag9l`)w?d}U1Uwo{lO-?-n$E*32?C8d9}s` z>}c7iBgIQL!Te(1B+Hz6I!cfBVhq2IT{_t>Quf3tk;Ifg{2qlF6*B4}e5m4iS!6M5 zyHI@FdazLRX2GZ$&8ZOiA+m~Y=2Lb?lPq21kr#BMIhd*;QB9lH>Ss}NdWrD7e8bX0 z%X2e1=jV~+$+sH&&sp2a?kXuG(kM#qg*`Ju5gpz)EgI)L31Ho}*yXJ2An9s*WyXAP zKK2oHx5wS_GZ#yy#&R$JlvOvjquhJ31+(>L?ej?(mOpFbh-Ay7-Zjtof$<1T|BNr%)qXc>@^SSv zZR3p8sP_K03i=<-6_e9G2diE7M}({-jkQ@`;`zDGwy`=JK+PHZmxK2=xOh&1&Yh8# zUtptO6hsQFPxdR_TAiQfm9b#L>ClM2O8l|dLV0^7EcV{Hq5_tNdMB_oR^N&SBtL!S z#s51oziq|yo_MNB^Q4&l(3it6sl?pcD!e+%H+ZJj^$hcx4rx=wYLyC>{6ykjeJ>cA z%#*q5YCBgXyJst{&Z~QAAxg`aW6hXjOMchZ^oqr;wps^AL=?VTys8o| zgQMH$z^dZ|^5yqhzE3yjbfa||`$(+2-m|iSe)wvz-Yhz=-B=l)|7H=V)di8z-_ht% zWV9%#W>`LdXh_b|{UXif1q&>H$?C#uY3+2PD*BEK5jP7^EuQlY1K@+I|>f1B8NQRa4{Usfb|jDAg9Cx$33D%!&-0KjdBhh2_}5uubmA}`jm`DpW6lGcJPgu~1}=S>eXY{v3IhnJ#Pcr0D8Ydrhaoqae9yVlt@ zeq%fBi9s!|2_32Fo1YTHC{r+?WVXwmm^fwiUW|RhkwkKvIm6(WM0k5amJh0qJn`C! z_k9>hC8kacGOT+YS54X7Q)uHT#BY=b=95dhT}$iIf|ln*H^ubVPqN`-&dq|v!IVkGZdl3LkEyjJUE zm+ZnY%THB$=xBQA{*wQIWT2TlI>|V8~M@sRw)DqR?SY#vLGD>A<-b@R~*Yl}aW)`=b4Ew>b&ct?qz? zlteN|0kxUm9A^5)OF^brH4$n@kx_@=q5CJl=gF{jmv=n`6Fk<+pVf-p@6lfMF>?36 z*H4?CW}=bdDSND+m{5p2rT(q@?n@#Ctsw3iEyX3N#qO#+j44mhObzB0B^mxySLLMN z9D(&1$K}5oB>kEV#Vl*tA0?eZ%|}AP*NH9#oG*|RiKxGPvi}rl$rqNte=AdFPAw8m z<6&ie-}aFVGj#Y3z6hM#pI;=oG#AobA!EtD$z@L5gN6+W1si33?H&bZ^5uI3h-X@jk>54gL!*BZ8BJ<~hyrQYQKG2(8L}bt{JVL>} z@=&w)vF_trWOVzGQXf4eRuJ{&Mwf=-5(^UEKeFMMR1sWS_RfpFv|#Z{Zem_jt{mbx z={9#@#%<__Y{I2k;ZCEv7$o#RT{!b;-|wUJE(z+!zl6BgD(_lqagS=5)2>Kv4Y>`b zMwW=YEVAsC4j1LFNnB0A!RrHW4;Y|Tk065Mzzh-4Xbvm0OYkqAQPlVjRo{m4Lr&V+ zU@uueBdHc0q$plJf$|jgI&iCSB-JIGimRi!zf8<&vtRfcCPWF#Bf~;bPOUfY(pjg| zFqwZl=AX}@`D-mL2x7*p*M@>mvGj802C2~?c~2kEuI|`pD-cY^j#t_Zn2Z^zQ}PyH ze(90PWLf$7_@Y&q^#m!Fzbd}Io60Vsb!)hqu{0VZh2%6=Qajmt(>fX=1L}v^7toL^ zlsR-8L&{Mub@ou4bI)Cm76+>p(l;uGqRvTM7p+;5Crj^S{rQ)~aBy!Uf=iN`Flwu} z8RVT0mff{0E9{)~u=DTuQDyPD zQhwhj8|abF=hvD3yoMlRs}JDC+j%k@?_m_jv`4vfP>Q4hL<|EEv@&Y>TvpE-Lc@pef~2L>!x#lgBk z-^qRST$MkBM&P*n#5*}ipV%n?+B$JJc@=pPdo{|D*$RsE8>wes!;!1mutP|(J=?Cf zq`w5_3@Quc2O8tJct|f8*2Oy|_s?I*yR}O)S0+)jRKk=+ zSzH;?j{jjDVc2oV>%xRY(-jhPCY!z`m&*0g;z_8hx}ZKyp29dL={fh`H%1uLF!)ai ztGg7Q?ybwL7)df0;YqNpp@ud&(QJl4Wh3=DZE2k8euPq;{&LWzm3Msg1uk)$5o#+7 zTfr`*c=QWBf9eiL60j661AVHUy~y>OyVFmC%W-r=X1LH1(Z2c$E^*i?*f>cpveFCP z?EV(ruqP-L91pkCny7`w3rXd&VuQ<={x*uG1`4P_FEM&|N^r_Rf!h?A02SxE@oKe> znHUmb-W53dxKo^AUyX2O?a8C`i^qm*(}Kza7-B}vIy|S&;8?MZWfK3V-SWAGy~LWx zKwc0cLEY<;WuS3aX~y#+k?<`SHd)sln+w2{nq?Xr?>0EXtUgULEX_k&s`nv+I7@LL z$Fh8DOQ`r%9ukAzl>4V_sF|}nGk^?KUslA%UuUJoP`f;`Wijy6-GeNU{UaNz@eR_$ zM>MfxJQcLaiz`r>%E6i;Zm-knxrc_kHjebr;CcTq!vQe@<98VDnampljkN1b#Gh>> zJB<`W=%tt#@@Z4{QaJhm9?qNtto1>$m^79J}z)sF8^@rH9RR(FkDaTxH9fj(3x7 zv1CMs-vDkOqPgHZr4ueRDvjkNYQO8kCSTbdE8oZ+^uAT4lC0tGFqzNgkxk%fPLB(D zB-$<_Ox>ciClfQawnhvMN30m}A@T;d{tgG9wAm~O`(q9qiQYagw$`tU&kUK|eq$<> z@yJoNGWgK?fNerU%WuPtR*pmNQhNeCPeDlUPqB}Lg;6+rv3BD7htEa{2U$Lx!_T<= z;s|;(Y(D97D)_v~UX`O`lCnI8OfQytWj6%BuzwhmwO`t2dg))3*GS_4r`dtv-?1Ro zCnM^Qtw_(qZJcs#Zm}J_0fL9gPkt+}SIuGC>vzK4?4U_=y=zM?54Z8DwR=V47h`|3 zPp+*H>Art=?#iE$Aqzt2xpdjD@%TEOfL&LwvxQ{tSO4bDBGEi^&ug{d6q>xTQ*>Ll z2;!6VX4~*zbl*EakVFdcMH>FU&OG=(;jnN%iBMHMAJoE3_rCHZeovzYmsOF7GqK;M zi3VQ4WBX(u*iYXnt1&as&UA6m1Y!BT|9D15tFNaN%sYh6E1V{eLPT3QzVbf+J!R z1XoP|DW+cV<{==t!Xp(5$N;~3CX3axQxcqTmOoVxLhFZ&3#gH}D=;T6IFhEpoBE%s zL1L0&GB`$71vtWpr`%S_gtvv^;Q6p4%Ldw?`~1JQK}mZ%*a z8KVC=D)!HSv(VEC3yB?)w5Jr|+9#yji@kA#k2^^*>#yB|U=v|T6V5QC7^6F(nc!lE zjX7V;gKSIk@G*^`aNlKxTCIFbXb^7Ai7m@FX-8+=xS?QZN70If!o5 zqq0CLSXOLEl&8#{^$YjmF7b3|o2_v~`E0@~JEDWy|AILqsIxr`8$lU_H8-_T9K=!P z|I3xsfZwJy=uP40G4xY{y%660Q}BC%W6LDfXjl%R2Mm=G7O2AyG>*g=?Ko~wukinC zG2sn5pVzpIoBWVZxn-!{UqT9uanSV!oOXvf2hJpYi|I#^gjI8$@mq&sd$SeQS< zLkiI^C;d-B*#n=j)A{kKe|f185HF@hl9s39uj(MYiq!`Sx$X!mE{3q?J8cqP>9^bI z-2DG^el~{TZSmJXxd4QLVD0`#-o#)qISnq7mfdKBcy3fU{uFE%bo=KY+y6(cPu;p5 zV|4-oJR<)L)fzpD{67UXf&+PWI*j?W^B$p!^#h<9`1UH>2KIli^};LZe_m1hm+|$% zCO7V-1ia)IV=MHq5onx_=~Tu@WJz~ zujOYr=r?%-99jTT@s|Isp6DERso$(+e;d59<$5Qyo9+qJXS_i_P;3blFh%vXSi2l=T=K>3(DL8QRtHDY4WW6;7E9^#oPdw2v7;1p5LM!@UA? z8TehnRh=O9Tl!qDH9RYOny1B<|(t7cPS58JFEGP%|LIC z9@P48D*;hR&(JuVY}80LLIJW~qSAd_jI;^*7?uEL+OH1D5zGgQea zHS}a4Xp)o$&J{f&_^1S;fLfhs|4^ou5{&Q?q@b=$8;{Z6NJjUmED6|3PmjW?`}n>e z5(EUD=_9BttV1lzk$8V`*@*hc8J5yEa{n#$3Co^Laz%P8AtMh@7T`)I7)MTKs#ue2 zH~U>NlsvuYDX#6JamVJ+UHP&wgThK1SR&`NJelPWU2)^vzy&y_J@y4=hhV2rZ4YOI z;}z+1gVWaeu(Yt9dB%0*>$k%$@cVgmOMa)xkgl5pR&APep!|Dqw7Q~`C&g=ADO3fBlETFW_PpaG3+5Zn_9+iGXnX-EBg{0D20{N}+4~1Bbg{}hz{>Z~5n-TX^i=6}mp(#kJPj^K zQB1){09lTww4ovv(=s8R0_%<~05Vj zK>6)9uzuj^osjwgxwi;s@Bdmzrhg#u=eF(Q1O6a{K&ZW1(caNw3%7YZbD1KHu>4=k z485o!(0-f0uh#_IFQJcj(uGduSUyX*;-&bLHVqD!8YsK)_$qNbsllD{lLM z$8ZSMD_9<>Sk|{YwnESIZFU*FEurh(@;}4rb0)~7!fX&f+B|SGYH7m0xDb$lW*bzH z8BnZ$j6v*F)C@7BX}tkd(ndo{+vR@dbtW8^(2X!_tra}ro z#bu@tJ}2mCtkAZi>R~c-OxZCCu18{seM# zo=|3bwChOURKV>KJI`bt&h*ZzxvVJ?zg6`_zi{>Y}1kP z&=9_&@*Fz454K9yg>6-6I!0hsd}iF9{q{#6)55%);?Tb4K-{mI_m$DZ-`H_Uo;?V1 ztSC^UmZ0_UH^iN#J(kQs=8-<2YiGu`ZH3cfr3iuUx{6pr1;yvd;bYC#;&ij@C=12{ zRr(~^Asq@WJ?XbEmD`E81J@cl=@%4wZhf9=Kw-unuGiPtFT(-jM2=^?nK%Y@6J6N! zsSn6XMFF7vG@n{J{?20Hscr$(K!a*omv^ReYkMl6^eNq_m0%R|MXv(wZJg^-MIjEy zQ?owo*iQzBOrhV|n7Pk(d)O$@s_J@ZYj9O-Ss)9r4E&9VXGAfafVp27AE8JE2{I9Dd(LOyj?&6n$WdC{e-~nkNXLX?hT>AM;Jk^5g~=I9miq_b}k4#j##a1P{mzH53$DV0Lj9 zvvBkW`Z=K410dZKdQY=FTK0KGkODA_Gx!D({6Xbyc2CA`c0(+NB?yT7C>WK@5p5e(KfVzLBz&&gx1in*F5KwPtoY(+ZxZG_xN3K5m*Hzn?wgR`u z!#g}wzJg%Nu!LYL02l;u zqJ%B#wq8{CB3FkARG;=_3R@Mj?Aus2yy%Edkbb=zTVFRbn3x=Yuz%uM&%uE9(Xaz&#`(%{>$dbq&0;XusE_G#;O04 z<%gUw2rr_mi3%F_*Tvd9EN2*^lMel+@=R9LCB{-+#nHb%1ZMhB+snGanZ8|_rvu*W zmKlvD$It&*ocuh(_Fd2{4GrL?>;;f000mJkgN_$5buzBm$_G@Pe{x?*&DQ#>(_#E( z)Z{7ySocY%)5dHTlYP=YM~7yO6xLw7jo?5)OwtGgHk5l8&`WF1+E^sNbN>Vz13+6R_UqoTR#l)v>UIU{V1zdL1Q0u zLuhGcZOwY+BrwFn5bdqkTBWPiC2JM3B`eA4a~*RXQ}Z1z;rAfo+Rf748+W_fDO2W@ zL|o!lj!j3=S}d!X8a1+j>TC>8pYbz*8Du+FgLlYS=rta4NIbKbXNVt&QD@s)ka?c%+k{Cr0z{ff`Ht)z4TjF^NvsY z8;ZoRa|u&ipZOLpI`RCuUy@>BOz zDc#XDSyzoeL(SAyo&TV8v*qhxX_}~@70pj`1KSzmi!Cuv45GTo2AYm&f>#Rs+m%ub zTnnsbR)m4!`p$6&9l`$0->Wz{kY6k~OcZ;mLxs<)htuKh82!zZM}5?of_<#aMPmiY zMwI4Eruy*K9^nil-S1Yv)FNz%kZORoXI7JFo2IueV&TgwQ=^AJd@OxD6eUS^h&Fth z^MQ+Fskq>nu@Z%~OKd$kG@!coTtbwFM1jkE@mPV0A!VwgDe=2*ndmMudyPJk*~Qfx z)(|vOhy;)>!eI|U(>-Bd?#Y3HXd@fGuA@8Pon56tD&cKsgeOs%CKk^q6dYE^@Q?kz zSFOqH;=g8aWNgSmIkch-W`!U7nCDS^x_uNX&RsPC4UV2qG2K5ij7psS`93A^IP5Sk zED|exBaa>P9{W1#F4%It>wnbD%4le@`{tBPw2mUhgI%Q_{q!mG>Xc(l!|LxE3vDjl zZ9U?}QLrW=fZ(fOq+-u=si8$gSHS^wczD&vk_P;DQ`CBVbiBc%P!?0jb?eJWgp(2J zY1OeS#W_KA+!8G7LMx6W#LGtg{hTDFnhr+zM07f@V;B+BV6@4Xk5G#P=iNA_>VSsP z0?71ZwCO{KsnAt8noHdi`mr1<^Qnuh`3?C|qrHk>j@7+(u$JgJYIbY)uzRe;QJKO# zvqR|2AOGxw7%qIN2gl<69hCubJgFpnU5QlRQfG8u=+W@$6wP-MWql=rrn3)2sI{f$ zx}Dr}VUWqp^{>^(92F{JAJUw_X7g}#WXOp~-}}-wLEs-b(9B&KJ1iwAUO<9aUrMpK zTu0~2Emn%CWm1cah~7+5j1~#lX{yfeYGj$K03E>1xm9qU>&PN(*wz{R;3-) z7$Q5d-4$o1Sq^F#FbR`oy5!%a8@)|=qeSGViTnzNukXq*|Csk=Uul@nfsWS0OEKcV zGJGJH6nyrsx2?v|EPg5m0MlCeeg!r0pzq0kvNB?^~Y1N9DJ zD{&eF(l)Ar^Uns~_Qtr2>m^g#PQ$=XplxOC(C-?7qy{{12lod${(dOCp|8(`y8=`9 zP+=XFWL;McEW+^B<2qIxgE&1{8(88w+i84{{W{kQRqP&Zl*w$OoI?q5#Hqu{IMlFO zJ>S2 zaFve*M+Y%-98$e>vvY(bpe^LL*^)Fk8sVu=K9=s5KSEKP4m9_nR92s}+LkTne6ybY zX0Kc5z8dpwH+UEt1nw9%PTIp8Eyn58B9EZ^&4F64>It09eFRU0Fdpgrc)gTzv9^Ui&;pPT&XJOyt$Ru%z1=v^9|QlI$AY3^B{!5e?1y^32gy@_=_8|Kot z_ba*l!yC6Ug)C}ub7S=;vV(%l|m_)H}Y=7 z9{BBJt{vT%Bk*02(^;NgV}6I0&%NerH_~S!TCR_I@^(G!z9U2^+93r4r_U&jniBl? zf4E5@*vCQoSKgQRM18X`QZR&h??vbR0+=(HQ-X=KoPpt(anjF6d#sfMSAbpSuIe-0 zH=6j(xpWRJc>!=I?V>StfL{nI%=nu@`X7&(Q*fX)pAC9xjEbjN_B}JEd$5Osdt%(! zIO%s%WGPdis$Mr_Rvsis6G}6zJ&Lp0+vtU&5H#1I>l@c?920giwP(e!X3u&rz)TfT z5w42yJ)I&GYt~a1%_Qz9eT60ZbmqV#e5}Z9hJ_z*EQSO;X-jm0Sxp=}8!XTj8K_4G zr$~BSn`^pGCnE~O1}l6Y6;rv0#%Pc}$CU7K{=CS;4JleSh7B2E$z?u4`TMxe58o7- zZMZ&1a>7XgP#X^Oz*S-H1*qvId6I}0!5t;Kw-LnomNBC08BKXd=>g?)Hi|4`cT&?a z>~6V|dg3&jE#G}749~DqB>+SYTnO-}LE$p}05JA4#P@ZpUNiiJ*6{AJAjG=oM>#pS z_TJ>={x<62@L|v&*j60`vYYP91i6w-SIOc!UwBi`zGSHq93MH|qE8wM3>7`5^NxDA z76_7i01RY<%czb4uSg)ig9tfpZfG5c`EZzn?(m`SjuBB}j|cS8i8tIo*BwMxR&N}d zX_w>`J$Z7HQHhl*YzRd-7^D5(l6A3q5atwR5N7S`i3DLT&O~v-^h|<(vAp6*)@aYu zE;dFA;&&vRzWQ(8Y*F{bT4mGnI0|)qk9Fns6T0tJZ{^T4OF(~2J={As0qdf6Ue*kC zF6}R^+=CcsidEgovmafe>{cxKE}guzx0UYgxMMxeb#qy{)YePhb#BDXarpRjOmSfz zSM1|9>I)5EO&P7_1C~;IM?51zugEl&u~z}C+0(E5Iu%1Ns&!~`!1=xNjWZ}KXXR3_ zwl>@<75klVLTBDj`Q&Zg_p2qR4ow!Vg`U`5aqGS^hyA`+vdO*@Qv9+&+< zhz*qxrO}ju{*^5inXyTImgtwySm>QJSD4HxDvf^^+{3PD-@LbO)-%W+YIUVcMZn1} z*(;ncIA^w=6%`e>yC%~Bf-5b?by<1LU6(|H&LUq z>V`f?IY__IX{g&Z8J3BzoJhGyzI zndaLc?&&KK``lfnKMg%!l3D9~D!?8v+0o-J-{{@nN@0G0Gt8#@xC`s&b(GtDV2T;b z!d$58Sh!PyDq;M4P^#^Q4Z#hto>i)Bw7IaP&8x9b8Z4Sq&%N%D^6V*nvWGoV=!d7T z*WDkt%ez_ZXN^aTPvpL?&B^clies1CRbgJ`VD(yh-D21sCzmCSS+GCR#fmho*b4NOoA9&Dz9r#J_Vr@jK_UXK&ge-83$Y}JHq~)&Zi6!$@ z;X%Le;VhX9*X_on^TfOKg{mVzzDnYwsh`8_HhPs)G}wJ0=iABr2Py1EuKfoZPT=3U z9=7ifv#E(%j7|Od+Yo|Nfq*Jfjblw_%+ z#l!Kgp=KNX^-85a0%kZLU4>@XFBQ9BxxK~64LiPxg^KwnrMn!^d~PSb=_Q+$(%`Kg zHyE;FqIwK0!nmBx4w-NLA6#UY&6(ZvUq-Csb&otBTO3zz`h044g^57GR+WB$Bm2n= zqi9skFH3`^^mZZu;NSY$q!HX}i@=VDKr=`dlWl@}$-0YdHQN*4pE3tcrdDMF&c4>P zKY11aT){w(i7o%|KJk#S)C{l#gsxKu`%durAd830PgOtpU2#}Gm@e^JQeM5i^;RXxlMUW#qPO^bU;b$+=X@Fn%TVXpNkXTM{yoLW3wC35z@ zoUTD+V>E}{&mvdmt%Tn7xraaGZ|5JTwN%Oxed|~JP@zQlFx`i5|Bt8dj;Hed|G$k$ zNL2P}AlYQkP_mU0+1WYv%&ugFD6%<9lCt+ETXx1V&ar2QbI3S2#_u}bpYN}KJbI-2 zzV7RKjpyt6dS2H>_HYIm@~R#ooL7o26aR;N55;t=1J~GdCldB2b>gcis~eNzjIkDHf)MkBwd^HtPfdnfJ_vI$rqB5m?+iAHBAK zDV_TEAHsa(8s%bgDH9gYvmZOI|5e4QELRqLHp+m$s=yr(01m_%ir! zfv)4u>JM5@CLIkLWAPL<6CUXj3Wsdd&Zd`|ybx-ApfI1kwcv3{xFmlgS!Bb7N%9V; zGQmPl0eyn z=E%D|;Q7VLU!w%TRNjxn2Rxc#K1~Nx?Rjkh=?Z?|ib;2KV@sxIU;2Lf;q+u}gjoz+ zI~FljRhntvtN7xG!VS?;(Ogy9n1-+=W_W=ncFv*Jl%_v}m4-k>8WR5>KDQ8iBnXbZ zwO|20dzHNQGr=yH7=m=Kqw^Ls$e1<3sEYF%ab{M+C4e+wPji|w_!4%>N3{hl<(T~P ztU{vck{Z}A^CBu>1VGLe+ycZIL?h$406GC6bOFQxfqP`rsNxG;FAA8BhppK(6qX4> za3zAh*HS*csX$RwH&ANDtN4?;%4tF#==n^3OI+r>?$lKY%1!yRL>9Rz+oy*z(*>V6lH(zje*|+iSf=yx65H5`q5Y)vBDcvYRtxBZeL%isIdXr z@LNrH*BX6SzfxA( z6ZKkQX%z9M8kc-YRh>5SW6*me?C_YVLK%3SYlU6fQL!i?Z{jo#^I=+PDray#6#&m8 zfrT~#^&Y4CryV$i@!p8>t)jPWxq&BEtvq+Pioht1xlGTWoKXfl)se;>gP|2HK3$XM z=rn!be`fJl|CS7pRo??FL_xHJ{vc4^^@5Jf?CVGZ8nC!ef1Lzc{DWHi5%V(B#!1v{ z7#IhoCWA7@v+pjL+L#x)a4UMIsY-YO<*feM=cgop0;LSNZl`0=3H(M&G$^X}!R=Vh zO`dn5+uX=q@6aaV=T$XJp_1Dz<2go zA>D$gkQ(a%dac6%(%zeE_1Pj$Gtuo3WD8ogo8SY%BOwbfV0!>Qb$fKQA5$8(e$mMd zcIQQjXL#P-mnYc#;KFV~LEq2A8TGHSIU;KvB#zu&fp7B>PGhx^5$OYJ&Gmk)ZvwiL zD;>|^i6fABZR-3neMiV3jXB0z;N)K$bzR9+lm@Xk7}(B@wFWa#xy5<%RC-O`PXtlw zmg)H#HT5Zp!)smC(98eDEsJXe=zO%$1md^nU+Kzi0@#3(lk{^S$i0Mi0FilP?)Bq+ zR(yn1x!`jhb=?=}LTs1szaN+WeJ$NZ{B)W6cxiE(3^&E0`vEOo46^8I&lx0n zdgG~a2qERyahFj zo)9qG`;=Rt429Tj|FJ-vSGQFVAoqsk-DE2RNx7H*2_&vV)CB?s4KQ5f^|gla0-d66 zEcgoy)bVT|tBfZOpFs*A$`t`@Nj9nssyssld_X~<@L}g1!RQ7VEIFYN)m|FY4Zz;S zGKQf(dr^DxOpOanwQT;RZY=~Q_(fDjB*jz>u#w8vH(S-n^f3DTpJ#9e#ek_W_L}6jrEK?Rh{%lu ze~qDAoGwIwB@<5Z#Fm3c0W>r+29y9WpfqbnoS7OFQvOFE9fZwlV1ZdNZgcJ+y%d1C zvi-ObS_vMmOPGK!!%6{uOp1uB;eLL*{Pkr{t;LsD$qZk8J$?y%L#s5#q0f#4;wN|< zr8>_BVU!ABSwJCKk?J|;s7dc%Dlwr$)?cY~WUQ`|j;eS|q1Z|IY7k+oAA(1OjYPi+ z=6(v4Ee6?jCEb!>uz=M9k%bEg%V&D_UK3EJy)NTLn6N!^L!@J-d0Amd@ z-XDX=>-?1_Gie}cz>uchh$#$(z5wTgB-)cJDS@3!io(IoIKm*1yGUh#CNEU|racaV zYQPw+$HfM{|=`ro6`jKzc$iztnfhLl7zXF?tp%^?TC^l5P|M8ep@(S)jAQp z)HQ57P|&D{{t3OXwgjQVk0@HlqtYr>pk?-q_!X3 ztirEmWElZqkxiJmLGta`=)1|*nE=eL*E;9hvPa&=dn@WF)G1&v<^UyM#s zB^Y|+C%4bwC$js9$uVK0_5_e3k=C*w3VLFY23Ih41ZrFo*s@_ss@noxDzDoGuhTzG z(ASSnTE>J*0A@7_Lr_4?w}FG2bSuNa6K5}QHxfY~MaW4_G{(8Xcgo#fP=`?z#S0#= zG7K**liZm@EwxFEyx-{5!~L|7R3flI&Itmf$FX0nCMRn__ny!@tBz48(5AEcEYIqJ z-xS+|kyIJp{r&?i?S1(o7Q-I(4Okl5mtAMc_5v5!Y%E4L4voRqu^?$Wm%eTU;063% zEC|mA0Bp>X(GxCmg3N`tKy=mx31%<{mOE}sqhKo=SpZh~%p5k^-x3xkKf&Kw0lY3I zL27rdNN0m=Ri{$KsZwOlf8uY^*#zDO6F7BN+yLg_Y))rwC+Ms82&D0HoNGK5xS79= z+^fFsO6&MyZ7Z_LLL(;q^n`tn7gh0fM9dodM+B;>DD>E5*W^4j_#Qak#`a4e$ z2XfZFEvnw%IjIaf0d%&6L{!@#NM}X@##DR_RcY!NCoEi*K*y1e%qVUm?)m}7Pala7 z2QOur2qgo8IWRnyn5aj9c?3@kX*9e9Fm$mXVJ!~{tk(u0b17dntc_m^1vS97r~1@A z9*y+F<5(T6Lb(97#i!CfQ|4j8W{+!-lJRMUAjFxs(p8m4sA`01asg9u(}w8AX3D}= z&c)Wk`!Z>YT9c+l=3F97X9KF0hZca)&fSo&6PgI!nqKwvRaw27zaCtVN{(I1CeU|Fy!1)o) z8eGPz>>v1hSt6Cs(ef6834^i}DJBb_FwW2-I&AV$K}TpWM(?JMCP2vmm!`}zrht<~ zJJ?z4fLj^m!K})11#}a#yw-rN3;2OH05kape7)oUzFtT8jg1ZEza6k77FP9qX448f zxjyh#RFPG4UAZ7t)(yfM5Wd}@rLlv+P7tp6h!v>@F)@U?Yy!lf=D#_qmvua4YzWH^ zJj22YL|p^rYTvulSA9OW&E)z}`jFi8X9u)y_zJjfNC9}BT=OgeB}oX3z77IEok4{J z0y^?mk3%J%5T68ukCggTh&kUl~Y{0l_j0IL~b=OZAEAiF7|W1@M! zfTeS-qYKvApkF65;If>t){f0PPABQ372zWTCI+2ZjOD{ia7CY3%?b_6*^g ztu-SH9dBNguA+O5YCg1Po&v@ez&)3ImbOFA2C={;M;JtiHVXWxBYeG{NyZVfJT-x>y`0ivmO?;TX`AK%1C9Zb z{)`obA;h6&9Jur1v5=2qz*ef0+LQg>>bjQ)v!}b;@xehq0YS)d>_KS??f=)igZf4u zl)L&fdgtW&q*LgY<^$*8tO6X017K7vgkM&$m`|D-+MyVZ5~u~!1W^qbeE(2NS&LlYf-lHpv;zWXw}BGdn_`g z9fMYftdT<1c|yZZ5Y!x618Yc#&y7~5Z|C|RJJ-pMY0@?9%K2Z9F+L?k${l?)&btr0 z@b!8f+!PQxOCC53Cjo`l#jw|nX)?M8n5T!;(5@;|@LVXRTOhhdjGA)2=%u*3Nkz74 zRw_a$8d3;xPaiO4$;m**@o!Sk7Z27w_)VVK-oKQXw^c=MjXwQpH%Fv40{E!T$Hfm5 z(yCOC=SQPRg_gMgn<0xp(pt$CFB6r0m^0(5Ud&Caa?5cx8Ka*DgjwF61f>WFt;ylw z6?E0-Gi{ArM^jxTgK4K5jhIdk`H&mz#1DSmX9bTo`SHQd*^+}ceC(cT<^W$yi_hxo zgUe&~0Ru+_y3I1ki&8^10dOde!y*0k_c8${-y@KopwoU9V-2&n+WnnOz+n~u%>vR9 z;353gT(%;y2K$XZ1)a|$<_mUy_NJG%S;9=2u-QHS-^&Yb7tmobpG7!nl!E!eP8^_v zhOq=y1YySyaWl84aFj|4fP~ODG_K^ryD3zc3zBkPpZO+TFf}mNbZS8G2f_`P$+2&z zp$uP!S$eq)HHu%D(Nc<*>l*0_2*j2G-8$K7xIRH8v;W}R!EEW)OmLLe3?CF3^UC?S z-#bC7?_5%c7nE-E_s#E);8Ow7z#`yepz$w!8R&@1xtdXr!4r3;GnzNppG}+p!i=>; zuyhI#ilCDZ>o?2BSUf9Fj;jc^Y9ZUP5}7;ZRea0wR)`sJb!66Va_KI%=~<}{s9Mh+ zDn!{xM1M12G6zH&hx)qk^kx(d?vj$M&Jy9{`M_)VH;fU@3n~@%o7iq zoQEy)q{VmA%E9Mve$ra#C@q=sk0o&5#ioRL1;DT{M$?k%9=PaS>6?hlG=?VHaP zFjyc86jpp=6~ZL-R<m|ODof_Bue^py`W<9-qP8ndfer=k zQnLwvA_&a0%nlu~fXs6|38W$5sgN=dnOx->k0MkDn2_K;c6$Oyd)85I{;wC5JwVRZ zEK2o}h~3le^`@iLUEhNKS0e~(p;moY8mHI(=PhLZo7Xe=dW-KgFjhF1M#(3%R#F8# zidUaQ-{1t#e%94$#(`8rKkMlnf;T1A%iyeM1H0nRJ<6S9pZrP(zFN)Z8L&1;Nu_)F zbyARS`f@`#NCm4YdN^+25^SIy3eznui4)oAggw3p#Q_;R*ZOPm#*-596(<;1xHL- zl3I86x-&nA>^>0V2GgmR>O%(@5F8;3RQ@juxLp_pEe*HaIq|o;GfnH60<3o$RRysp zTg(bQbh)PA9aZHhp9VU;#p%WP#9#CvyQ?t1ab&j`9K<)rPF#I2wfzFb|0DF?AE=q< zze2jSK1raY*F)QA)<-J`VA=g}AJ5IV+W~9s%&+(dt_5JluLqS25|7hcP3i{gUT_@O z1Gg{`s@ud})=08_NK=DdsbGr-Ho1PYa|_paiVEL8^<~)WXVeq87I&Dph|_Cp|B{{< zPc?Il@v+3h;64Ns@Jas-pnh{h=8aC-)^6g9?tFXYJU9@Lg3GLwv$4 zaejdMttccJPiK}syks@mbOym)3Bc@}bOy_;IR(jg@s3&VN>c$v3V-u3{W8*e>PR z5;xi3?O#UfR6W3;0)r#=?Xp9uX6_MQZI`|etgpG@#iFkwBfxyU(w!oWVtw-fZ*sk5 zmR|OSlDn7uLfkG&_Z%sn-Ub%B?Dpzy!@Z9|Ru~DLERuW9rX3YQ{YTq9y^6u2e10w&+`dH3M}qjOo7;&;=>JXrd*B+vRCWA;_aa~F zeialuSyxX1hk14ZS%Zb8&I(zj;9aPq!{JwtZL1tscT?vQM(`{k3;+G>CE~%-6dSm6 zV47YaQy&-;rHH@w1%Ho@3v6|~zW(fDGh+E7*p`dlWDRU22`K74+7=5SqumxfAqTf% z^&4|1<5yZho;J?(AW!WQ{f6qSX1D8r!(SaZffF5o8BDs$fYwt+c(o*l-0^SnIZW%m zqCZ{%w{WpU*O5B=Vk<`cFd*!E$(Ht|#_jIwk<*yZ1UZxUS}U}#<6sI+Ee2jy5=_w% zP2&TmeA-J$MF}ew$!cF}f_0WJ@)6fRy`c^VA1~T@NaV0IbA6x(IKEYMgt zIEPhWq)UWG?x~`Y?O{#)Hl{4kZkrO?Fzr89JMV+*n&h!i?;ev#O6KV`vE5JcD8|r2 zoSzAmkwq*2mGFa&a7!Hed1>TZz&}OvoNu~s9v>jC6Qx3EUXlyl;UEC=t+FFpTHPVt zQ-k>{e--W&E?i^4Jrcq_j8Vi5#;Y$lc>2-YJF1D@$)T=CYifckuQs$iN%*rX1w*s} z5`!$_{roy{pG1cTHkJbSd`bg!0k!Qm{ZF``{4_#8_<(g9U7oNsalw!f=1m+5_e3=7 z(w6**p;;i1Qo6ywBTBq|`L9_Q0cMd6gz7SE3XY?CLNNfY6)kjE=6QMx$*Z-+``epw zz~1YzBzdZv*T%iaKQa`Hsv=7K5M=pb#S(<+6bY)d!vpT&y8Ww-XdqOnewY|S+WgHl zv<^P)q_fd*_*zunis-1Kp(+PSR)* z!M!!7p?lOb9%4yC(X!PFXE78L?)Y zoRO}f%%tSXK>o`o`O^P|4-T-+`Oc!Jv;8;KHpj7HKYtNmUqN9_Uy9DDC*`^##@aXi zt1#?3%z_KuEjgCd=Cx8WRa`hdJDJ*W!B0}VIXdW|L0>u_mq1=vu?R@zzM!HC!kH#JO=vUpePpqs0C|%2MoO`)@{Cv zvZyI0URg1_sq)ADKbQLVuh(d8m6Zy})Ec&VGZq!lN6qyxt~v)D-#MbXPB)`M8$Yd< zH+igs`5c=dg)*i+9H#L?!dtj){KJU5FhF+{jWx62EtG_w`A4y0UukGv`k`?}_^(5D zZ{BE^TOU#JT@EL2kF6tcPhtb$;vtC@Y4`F0E&}=f0O+K$NC2oA_Pxz92e9EGH&$;*=t)mo6%glf>HHdAp~oFEs!pq=`RCtX0h#Fw zZYYR~)BML4j>6t_S}g|qxhNe!91%laCnUkPx`rpxawl=k1v$U+sPQ~hZT6)P2KxBP zvn$pVjKGq5Z}pH7LzifSoof9eE@4jYgLqaf&`};Jsz?OI0qweyV(I#Ga^r{dSNFAkaK+*{XeM`WI*V zeP}}d%9gHuT@wC#+lxE}gaHT@DGi ze9G->_mumVjkja4WJ>Sj&y*H;t~Y zu-_h9Av<4nYr))Y>&RPSuEIgDW?Rpv?cEy`F*5EQ@Y~6}Asjy3@qGFs=!Ocvt%y#7 zBnt1p$KB&%H@tG<+}fX6aGaqO!-`;m0vuT{BerLFq|z-YxJVB|Y#Q#p_pWNQvYHfq za!t%1e`0Lp^b{7axcHDt+H&{k*RbCdE57v&9vJ*yJxfmBgj=dTf4gm7F^o#c__XZTS?}g(-Ml6qm6l$&xIP zEFv1O=BI4xDni(KLK4fsdl&FU(@xJ@Q!AP-Kk#fgmY}L@oor%&zPU}9!>mu3vT9Vr zA0G#7HVNrp5s|dwfkKWzYLxl7+D^{@ZCm&m)9GJ{h{SzTBr|oZ9rwxg`8RPkQ4B2% zPR$>4jj$k-Yy;Iv>RbyKT`q_1|m6Do@eA zoch2V(_%-AG{3!tQ9aCIDBu9*NePFUc0dQMLM<#>>;vwl`#wmOnOY>L<(7rd7d;#( zHs3`l1;mKVvX$63rLNT$f^!kf>FP=B!K$weVdeaOlZ(}khw|1{VNb6@q7TYH`$WnT z4=mJ`Q&s+{8td9t5L3QI9YW5PPJXWI+x^#jULC zZ9isvqjw@p_OAhmh2V?BGuSUhP z2hYRk7!avJyByjQ?jhFn8$3k&2+)8Ml4$P92i;~NiYb!8Z02J{6(q|Kf#F1vSn38@ z|EQZY6p$A0f!r;nst(+t_#uZKa@S0%XE{q^7Z70JdeaaE`7@>=>#4d5ibLe(2xnWM z+vJadQ#USV(mEk-OY)a)@ac^;=VrM~U^_)zUQ#w(z z1Z*}THbJl>-|;M?e9g3y4;=Aln(mP=rL~q2cMsrcdRa+kq2Xw*n>9nq++FPOxMsVl zr&xM5kx(Z8+#@vSHj6y;D%_X`8$f0axUivLZCCp8f7&WtN;18Hc(0-lFj`GIE|6G2 zu@2;zZ!xD4QYg(RBpBVqC&PXAcTxhjK&uuM>d%|)VGhdq^EWMDvt)5NI>d|dZ%%#z z#9rQb1et|tX*t?R=X{6k*Z%CN(V#CtKqvY#=J>1i@!K6jaaz+b_EAiE_)Rfnh{$z#Bsjve+f)9Pv>H8G#L z>FdJ#cXIO1yR~kB3Zj|y_oD$cvTfN4+Tm~YUr$r6Flw2Zrt~ZV#AS#VGn@#tk-mYN zPq^YHcKpalY@h$n~@ zhlz7bqwr{5Z@QcMJ*Ypc{tbI+rSh(#)=uA?{CtuDM) z0x!QaUDsGHxa)tQ8FLQ*$HxiEe+%NROj)US4Y1=T>+|tM#g;}A+l^an)+u?>-TW0p z!Zh3bl+} z3vVhmQbEqK|9&wPbZ5ROChX#ZavywdGG+4lj9sWih_-Kksft`PSwp*D=H36)c=Vzq zajjsR2ICBR7dXC!GJPWtkaMd1;gl(UzL0K+4aE6J^-J1(Tr{G}GFG1)`Z+x@l|==G z(1UI9gEdz-E?j^c9e%~gWV*jpC`iL+=u(^RT)~{@i74y^BWrhPVH({!`JsPmfgAk6 zAN0tl4L)2ebU0kQh&4}PW;kA>YtmzBHUPIV4_1Iy9&gNm!JX1d{hC%;%@Bdr#sUsJ z0=v@~qA1bWZHz-qkk>YSgACtB2i{ZyEp=k#_-B4GyfCd9r+pP>juuNc>MzvxmW z-q`WOvrz-X|L6NY6lh$+Cx|oPOu@P_`o(x4C=T%OeQ)nyYWZi=C`JS(vt;Mv))2IY zYKhiD?0|&+BAqzT>j#J53GyRpik-u0$DY7cSsOMo@;+{83ETT`qJqi`u|Et?ltMYC zOv1V3)ZW~)SI0l}jR5ZP=zB@wN_=4cit5KZ(=k&9zdWd#4`W!SMpp4g_J9%Gzs|uxtKd6i)7%do%5Mz{|hhVbs6tdB`9`9uWF(eyoRH z@%GWJ9`!G276Sm87TPzhc}3x;+XZLI)82js%AaQZ?wEr~K{uJvd;-SPKba*IJqvms zF-(*7TMEBjH72C1QNw|r)%#N_ZHg>hJHBig;*?%$M^j{L`ctL|wyKxHx$1BZC|Mhq z>x2Am@^X^=a*eM`IX8is<>$ti4JJ`8$PV`TFL#KNjlLVM;Yr$HzGU*MGq8%65|aCY zE4lx2^K|CfSq;4n*yye$UiZ)vi`!fsN_PCLf8X!(jGJD^7A_&|gAVs{NUvd-GXOWe zdm@WD+Cc)(Fc;ZUA6+2h6+ir|&qGtlQyp9T!l!Uo@N2*s#len``1To7rh7QTK9#`> zl&6k?PLytCmTQ>&BTFi^zuXB(paKA@4 zR>b1Lus_bV-F=XCzrQj;$l8~lWYr|5AK&RB5&1XpP3Z~&GeDw%3x2Q&keStf{vE+{ zi3VRRzst@SZB7GnV|H4+mg=E*kh^0Nd?H&xO1?@pn1!KUC-5{j@P$y?*IwF11y%DI zOI02sgtW;~%0)KvPr>1}*=~bdQQo;#1MAPkWhQ5{hw&VV*3VfulbEI9L`~OyOGCD5 zs_qC{xjV9ok!R{2==LUa1Z zd>g^7gEAYV{CBdeKodL$4vOT2udE*3BmVg$JFx4A>Vh6_!p2o-zUVDqfns)SI*EX3 zXs^N_x6S;Qt8NZSEDWCX>w<2zr#!NzzDH#zfN^&$uXEv%_o{Clu6E47(|nvl^ZIxA z>Q9&PPTyx1-~y+C>0n#h!%=_Fu_OSSij7QBNs!5sz@h)N|6_t8VkFIbtFwLF$BBR& z4Nb7yjUf6GHf*c{jc$N9*Z|8>5Y@H*JX0tQPz%i(34=Vu!bQ_FSge)F)Jul|9ZX6e zIKRXIoK(e`a#MD)M0q9a3D4bMbiv9f(@;{yA9HUg{z;QK1UIyy=fn4>T7Qppzp9FEn>pORa6k+oev!XX-ijjbl!l%4k5#cs6iB zkC72@1f**=?r={4bvB0&oB zNR=cFPh^r=ZKZk4KH3_K4O)J3YUUzS7j|8y$$OkCZ3|j_k_}%;*reRvr>#>G$Nuj64u3LtsaOrL2V* zJmH0BKtZ6p_O2Y6!~;&H)*`H9UvzD3PS-VR(#CAfY90;y#G4B7o^eZef*zq(Lbg0{#m6U=+kG6 zJks)Kd_aT=xV}_J`T41u7qbE$7w*66#)eek0Lqn&quRYt$7S%;*72l0Iy31iqVTb|&0We) zA#Dd^9&*}O7ZqGSUUI?+5cQ{cy3zzLyT>P}pr2PRng&nygx#8iY8O*U z4c}HYtz20RY9@P)%(R16W$O1a4HgcMJH&s~z=Z(wAeZHv*{D9bS-0}s@6-O|NKlaW zINRZHPrX#t+Tn4~mqvoB4s7ZM&CQzBrFt{)~FWX**crq+_DXRu-0e%&wXeFzP1MKZU^8q!vL&(=|7J6W3&}%)DA3V9m@eiaWZp4Mb#yd7wgg{|PKR5cNXK zizz~IQmaY#ttNk?H(MXptt23*5FB6|2Pcv<{d*_6k|x(n_b;ndos@X_9lxUFdyHTueNV#18ib6~*usfw467FkKP1XA7wLu*{S7n8^?jM*>PO zml!*`(is)u^dg%S!}BJ;FbB`5p+ZSyH`IhS7CfK(v^o58kc69J1q)Z$8HV`B$UFm_ z;#CGHQAE`!570o(9M7ZDj)-A?Hke+2c-? zr$sITT@hx1Qxt5mZ6L3{0r;Rs%JfPzq-W5?RQvoanNu@3Bj0U1%3nS}Tab0Jut96l zTb0;|;@+n6d3H+P>u~G>8QfR0DLL&2Hkz( z%zhM}R3>mLHuv$s$s_xt14WrY2a}da6z$g2h|((Ts+hLpbli z6!l~X!gAb8?DNa0w+y5sQYbaA&oj8BehDStqBgjx-#~>p_E>RY zGX;vFL+QD<3y_{-qaDkhC2d6@T=(@=kHjQ1V)i~3jK?|#0_0S!K42ANhJLr133h&1WXn5qqDnw*QgyvTRO8y~oDEOa86ods9+xt|C3s zTqJM&364b}r;Ok{ei)B$<(sMTHTGp6jk>)M%92j9Ks-LxmUYE~k52dcP%g7F%KRn! zsY@;Av(mT;yJum#V!_S`L%D?7*`6b2pK?dd@EQgf4Fi1Nou-e+;X6LRqdF>}gW^Y2 z427ual(^i=horYG5Z}s#B@1O$zyR7r4t5Ra&2@~ab9M>*HuXu)WaRf>i3cfD7vSv@ zKGgaAw}!n=KkNss9eVWL-r99_7)IRR+bhf6a{MEr`4m2fEDch_CNpSt0NI1_izEmF zVA+sONG16$wI$p!gJjw?bVv~JV>QIK=0*X}-EPbc5AZW(s*XIA*pegC1ycJ%(#ZMZ|}bRE5xf*_buuZVWL zTGI)V`_$)skh~7E+n=5&m$CYhvlf zW7t)a%!AA7N9!Z+&@7OJm4w)>bK~!>>L7<=nOhWbKSVO6{0;`#5BO)!{T3`(603V` z^~(_;&Hw5rD|8nMp~{&vrwke5Cm@!2ww3S~=@JruPuiRpT7?SsQn=B|eF6fDnVNsF zjXyct{J{{n-!J)1Zg%GHr}%qq482!g&Aib!Qimf(12a5( zOY>GbKUF-Xr5^j>2ES_NUpDb5jTCC`K1&ii>&jid;22_1>w2Z%$s8rH3+B({+t+gV z(YOGhZUBTDeVP<2P|c*N;A6EW!mZgqkorD5c64F z@Mh{H=+`wR{#CoNlfzPBZ+=)v9a3YMPE;)K5lbOygR8Q8hN;+O#OUUlZeDziD1GJ#Jfd*g%B61>W?VXVyO=3S`8wd{PwUb9V}Mrhc;~dZjKyuLs zkt*rgvDp|F&f?Cz+%N?VZ(`k17hcJgZwYb zrykGRJd?okk-X!_eWn+@4w>NS>*TR-WI2#=SqsDPqMp^9aB5QU+K7F*VM|46 z1hZHL5oKWTsg|BD+p-yFm+1|hPqCNyWN57>%<9#6>d0nqyF_vq*|^jIXMQ_9J*Ax~ zXZ>5OtuydSOv|ODfN!c_8!jf!`=t$%!D}2rfjK?f@za4gI}%H?vDj;X)J50}Kb6k8 zn$dA=9J?@0W*rG~0Asik$)XBNxS(2hVKflYwnygvNNt0m$QozM;Y1 z>r~9Ah+7L4Rb8Y5`_IwBWJ7y%sn{oFNpX=p6JobTDv9*TiwK4@UfEmoup7-l8T^tud2DkzE1jDA4P32GtjdX5bdP-JP(xEXq_4q!IJLz#gY_;k#xjpWImtP^CVQ!37=O%q>QhsQf|=xWM8f~|K`LqDyrL0KN}Uf;ZbF}`ROrb zJCyv%C*7JmpBN}kk{9+L0De@%X*Z=VIv6xo8Mb(kY$9_W$o)e37W`hamHu;kOXPX0 zzGKfwMUPJ|4PpHfqHw2SWA-h2bfeJ&3mrSA7p|zij$UEd^e~UrrBF0?*3WkP{;=5JO`KWa{X|y_ z104uR^>w7Pl2(DGlYhkes!Pmej1S*0f842a5w&v@fb-f-4+nKsNL(I3KF!aFi=Dxcc^*V`9eOMNql%S|@l-0Z=h zmCC$yNeQ@@nPWZ8jY?_Bi4A|SE9!(E&Q%ulRDNn6SZ&+DqcS(pb%#w6%1{dt-D}DB zIQ9ri*f-s+Ju^I^5|M($NLsTa?nfQ!U%I(j0Zp1q9emodHT8JjQ)twl@$Xo!PN4%~ zgyFTm9i&-`3yg#FDy8;~v<%PzXr70=nZ?8th${9S*6GWlG&mv0UDm1epYK7OoTh2T z91Vb!8@M$yvUQrs7rgiFWl^*03*W}<4Ccul&CE!ES#^N2=LVtR2n*6!cr=@D1lTS3 zrDu`D4Rh^tV3XC!$@;T@4LN(DAnAVHweY->d1|uU`VVK-aJByJEuN9%u~Mh8-07VA z3s?bg3V&fr8`&(MM8VBBlZP)kLZ0N!9rqalQ=E)JUy$<<6K7#7c_v|YpcYvKHx4jB zq2YRr8bBJ3hX1qDS z!z9ukVWE&f!QT*F!*Pn{q>i8#F>cc|cjQHAZem3eOO+@R)DQYv z`Qb6|$BC_!z8T2lgs&b8v-vujD)A8LEXW>92>OO&jQ?nZzS<284Sj8Er^r^cI=0L$ z)R_))fi+cb%EN}X6A&myJ%0V;`hGd>Q3aU~KBKjNHHDnMn-_@aJlGp4`m5P(fjmzP zHCFs9;i%D;@E!mOwh3s+X$G=lH4jm`hdS;r6!fPx{j|0E#4CjdkXqO9Wd`%&5|h1e z9mG-$aaj6N1-LCX36m3(I%ZHr@CGsNP?ej zjR~shX2i{-26B5hsxS=3BynRNu%qMm_psV>;VVw;3xOQQU;3TKBmF7sqiUirI+l}0+IAmY8xenYAG#*0G>z%5g31a<7zKD2`{FSrJjV|hD z7;O9)NA`h#0a#0Gaam=Ezn6F?jR(tAZy))nFEYWAWVYA$^~I5KZ;peb<0fM0h;Z|- zGfVg6xd0Q>Ia>OyK-vbHS7L$-)1M-cSM9VmvdIH+ArG|!$Tgk}mGWkK|#6MznHiNM9s#tJLUFyFj)rm(~ z>Bi?OSD0;ySwj4!58iPZwvV$yQBR-O;pENx;zelRI)meF*sQ|UMh@1vV0v10y`O}+ zSajmPDLl3A?0Q@Zw1>r1GvG&DE_zR~RIEAUz2&RL7q>FDSh6#0pO{+-2#PX$kx<@q zRwy3VepGELP-V=i`m>&cXfrMhjyDW{DEZvc=%>fUR##EGldSuv8w|&+^NzpOD(kNm z;{FC;YHEJ{z{IiyVZBUsMpheG4^sV3VY^<9yZGM*r>I0*G|&u*2bk{)7l9MWrjI_b zK_QR5x4%9apmoF49v}SHmo`c+oWhw_DUPTUpVJro#8}eBwpCl_$aaNe!>Zpx@)vQG zRrTI>*-GKmsjIvbq7I!G^Uyx=-doUNP*9O58~^mg;l*ch$Z2YGyUcCl+;<$3OPZ`_ z<%H4fKw;K)S}{ev`(m^AORy;%vT+X4{`uwx_;+U}g+WWpiV^CCij?AQEF=>F$HZQ^@CO8|4D z^#xD=8MbWnU>>}2ROFq2Sy>Gnr@K7g5DDXwZAMC%JSPViivk;A%(4Fcf9lBwZD zAnS=)Bxa2MQ1b5QG@9O02eI-FJlE4(IxrjOj*71GU;g(8K=1!Z73?-4@ys{kc!w&h z=1=2w^>|bMmW|RF39mhmyiQ!`X|(RGoe@VY$?|-jIi!2M{vAbMBQF~iFblrM#Kb45 z2T9CurDpE(w9rA@I!j~gxouDD$zJq8AlO%i<@F%h?3fjHM1()beSa~eH4*KfBeZVV zHGguCpSUU_gk^UNllpfAQ|B%LHeYc<>Z*4iciwU>yQ`B5PRh^pVl+B5B!g68KW0rz zNj7Wznw&Czd4IB$3iODjG8a?$MSi75{Rx~`!=0+~r!{$Ux2*;m>{ZZBVF`)Y_b0FZ z$V#&Or&E!uoI}GNQN!yW3f*q3(uheW&*Uv14p`Q#x+%E0&8fbW|av13E9 zvp;-pIj{*`nqutnqCtfC#eR*hl-G!Gz2Q+}vdRAYQS}UWd)V0Rq;(+r<{yAh08%}{ zs-E86!ZCB90?D=|6R}5E6wkvYqF);&n(5ADB_p`y@5rcAcbE!a*lir|o;dW{|B&(K z+b->p59(yYKQ9#hLbbZE2s%%Joe%0bUFRlg<_H2 znlGWao3;iB`+}Dl|1`b9^dzc-wSbS@rOUazKjER;R!7uUb?>J3#uwj*f>CQ}n`TLJ%_-IO|(Nay17HvzAO&{zl2FeQx{K0AW3czmz78%J_ zX8Bx5A_uTK3cltB85Qfth55&}pWbBN$xVr&;g*sAQgKcYb1r#m2Jyp(3rmOf=Fjy1 zgZ`3#eBXfuGu+z%cJe)yEawMjB?gVQ-G@P!O8&<8Mqj&ANdNjU*>=HXIXC3|OIHo@doJ`O0UCYfh>KdQdrSw_G@Oq5Z$&m|-x}2!AoIwiP@|O^j9-9{Ckal+s$lGk zO8prTOI~^Cix(}AD#f{A-lS#K<1n39?xydwogF?XOHzQ}u>-|0U;&n6fnV^a-nD@` zT%W%BNnfK)C%BpIAP>G^cxh|L|kp093hDhK~(M8iP z8!b&PeD7Ob-9Pg8_Exw3Sie%^U=(%CB!aX%1Ov~BqRRQfYr))btCn^^R!9U*UkB<&HEkb0z3Qh9!Q1 zeBB})vzd-6g1_%_Np>%@p?F$FNBe}*qw50Ha^1>o8CbRw*7@@h@1|AE&yYd@!P*_} zfnCDM<~0igJ2&iRKMnU2CC8t$h4RB5`IKqgaw92bb2PkTR!SmV6!qoHBizyS@9^+- z&gPY9b^b)$Ly4vNOzLlcj=cKC!Qp9+w>(H(3zo?>p$8>l=d9Cgz7U1TvRwtbk{guY z(;g~EvV_DK{W5fRLrn|jV2pSE=#D8GNwPF!-jTR|rY8IS%mDU7jv_%~CBVoAl2ItO!STJ5uYQ^%FRzRv3J zw<12Wfd-WXVK@~soTeWE;RLR$3WR46g)AE?ku}@afBJt^eF->K-S_{w5e3JdamGGG3fRNivgUDTZ6ml1NH*xQ> zT`&Ec$j(voEC;F;R%9-egvC~$OO=5=IR03llCNy`rCDIO&U0`+!+B4SgGcn8&S_e6 z=^IpatVA`t*$Z_FM{9(VX-rD&=0z;Y;PCjotgqB~jR_8{1*1Ee83#3OlVC~%8FKQP z8<7&LQK7Hk15WJt(iQF$=`R=WBBh$43#D~=f7&Q-Dz0>Gb3emVe-dOiTWsx&xCux*Fyk2eu|na z^1JKy%-wy2$UE~-1CPG%d5|6XPV9-elD^&9BD#B(rceWp-v7-HDf@e`$?lC#u^{IL z+?zisbxt>%U-aOs@H+Xd!gkx@J|B{!<#1XIA$k1%lVdr7?$+%=P8h7-uPb<;LU{3T7lOAG*cWDSGOe|LhuD1AoR&0Exc z7ceFRVl`9KRM~059CjZ?^xp$+N3%lgj27&Oh|8FQ3<98Ii>fsD#6{mgxH+)xJ8`|^ zd!bJn3mG<$IVc9UQtdq8t`cA!x1%PRQ2+LXtrHM>q_IQlkH^!A;fH?ANL2=$Aww#7 z#$3vz5}xzZpE(|%Qc+bbp2TWeYkG#_~tZIQgIK?BZT zY5q1Qw+_F%U73sv8n9e&g4-iTENu}b5vpvugA6NVb8%LuoCO15^qpsf|7)?_)~~+F z{)F{&4C4L}{N{7!p!VY&z%r5ee7&)zObAn{>Hm#}vGIy4mN||jE)5XZt1f>Uto5Qv z$@XRS+OIDe#t)ZaO6wdLHMykF(=^aB{l>a>ZJ4oyd*my$5DP8DybNH_v?U`NLXeae zSDxMJvM%2_?WbULhyxks0Z(HYyz?kxCX!l2Mi}D)^FpTA<579M$@X3DmOyT+?LCE! zn7AR<({b`5QeWbvfu7h1#f)!>{n0I|8ddb#i{P?XA zgRV4y$mQ0z>cKy+{kRYYNI-YK}#{3-RU2mSK>(Qcrx+kXnZKJQ#j)8OAK zVOgnPdQW{WjnjbZHyFb~FitvSFbe&5|I>&1rf$rPHp$x^+x`NLxo#|V`faUmu2)wp zdPz;f8*M%cC2xsI{cCu#)n(mDVMEI`f*E25II<1Fwu-|{8Bo`ZA8>sQ)$}t=P}Cxo zj^~rhK5sqtd?yjNj$cOb%e!ovugOKAJ;+?i8LCq^ZU5F)YW?jwU@krmUs4O5hHr#~ zD!?r~6u&hJzq51vPem>_D$YFQ1|N^;v%$kURM0R5I)m}}TSkB16_zp2;r2kn89`3Y zq2Srm;j+#K#s-HrOzDgD{4=)Tob-Cu8vC{);I_`1BNXgC0_cnIN{2!9cS>CgXwNy* zVH)%t4xxim6qu;I$>mYF`vx6>O-S#jzqa9iRVI90LKnx-B`pb`n>&EK$AbpmhCYl= z0il@5yP`cNmD_rq)9aq;?S?cir%A)eKM(UN=Mv^ZH4GK_Opfl%KdG{uR|lN_Cq+V# zoX!%kjJd4IKZ)vqb2`9Y_|yPn3aV1p;Me#Y zqgVe8%6BxQl=a{|eUE;pwE$?nDku<69IWhd3i{SSV2uAW5~3@lBQ7mI>-7A&T#SA? ziXYzk3JAj1rT9q#HADO(`hViWX5FiFmWi`K6`*4lC9iXRLdj~3jPP2!EZ9Ij8)XdFO42EC3vg;vLW- zoO>}=yAYk(a|-|c?t2X|upSJORHbE~6cI*aoK02p>OUaC?k+re6v1|b99te3D%cmo zcmDWM@Ica}8?WGf`1}Y_WlDrS0QBP9%YaiTNF(^@?hELN0BHGNE28LIVm&_^H#9** zI5{b)haera;Dc=G ziuyRznDF(k2OXMV$`B!caIf;fM0bjQ)Sw(U7()|mOUY5|y*!&hvQEpBX;2p}M5~cD z408KE+Qt>F*AO(oAL}gJfn$=&>gUU-40KUtQFF1+BFTvHgYExyNqnF3j%|TqXsn(E zIJq>oLxmA6<$rd9Jbc(G;hgP2hP1E%)Zq+^=gjb+5Vzx0Z~tw`z4&Y}%=H_Pr+%^F zm;k9Gwzud&l}Tk#9Kt;p4LJAj97-&HyxF~jG(-wiNTgz85YpLRO4|UoK{Q9xo_OPO z+wBu5mg5gcoCJ?dDy46qx!|}=N57%j0EF=ynuIY^s(2`F6%4yU>}9&(F{0Rm2vU@Bxs6Xe>}6r>du(wNDxLH|Q{ zU84T>bq@f7J`}H$z)Q%|mt#uXg_5gWdbbY1*WEGF+gc$Hx!vu(v`qT}M;mQ~Vk>*#g z-wF>8O#2~FT~aAcyaB^`JBeZ^j=aYHXKiz)G_v|#DEUh*?e#)Oq~%3##pFMAhDUgT z_95HiwL7g$_J6nZlT6!{wC&=;rL-vAguiFcVrl1VyxEpLyItd?hC)W z1tmQWWA~%r$MwHTqBGY~)gIqkn>@e03BN8V9HK>^UpujuUm9*AlN zn6M8t7iZmB{Gg29<;{xb-u$<6^PNxZvst^@o$_MBknMi$VP5E!kEROerw zfxfU000U2b_Zc&mnklG#AgJFr`7|XGn)M%if=z0nuX5eji}YMMxwVPB&F2Qr@vqFK zf+z_u8P357-~IX(-=Fi95+{L<@Zi5HV63&(VCHh6|BX=a;Jja95h7ISwa>G^dVAeS zVR0xMV`fhOe}uc5YX@RUzX@(WIO7=pXYaMP$#NgIgQN392o8wUhn=C!>6 zQMbj-zY}BT#V5KOOUdI*meV&6N5TPt5O!oh;%|aslOmdTK$U_+*<@>_EtcV!k3Qe@ zxqn1=7L~^y7)!_G<3oCr7Y9e@+YlT(s$)^aj8YlBJL|_jmuzeQ{);_wpa4pPi`TH% zPJ>bOt_N4x_A7t#crT9dp+Oh&^+iPfV(W5{hjOOvjy$l_YbgBY)CJ*NgT_j0#B!hCF#4K2P!xd>jE)NF^Z*X8ck*!wMQK9TRfgTM@Qe0GC>$ z!wpjj0n|bZmLFC9knb_;YVgt-9i=Vz=gGgRq9=2qrRxCn zIU(wzm|T$(|Mf`kFJj073i8;4kSfp5b~tZk^|vOrZ1XALLI=3F3eUDZ$TasMpRd06 zBlqLap&DdH4m$IIPV7KFv(%?|bt<6+a4IiVZl7}ZVzNZ>nh#wnbW--}=##`Di9M_6 zaK2g`IXDW2YiyMfQuySy)8GNKP`*SM#li3GrR!5H_#2A_x!+h*ZzP7xW3bcX&%dp| zly^l$Gb2T-wK$|<(+`)3ux@oNJs{P<~P#%qzve+^V`vv|-u`r~KjGSR7 z#GY9Z6xv;m-*Kf|0(*0!eDk=Je4#98HmQ&v2m$r`4Se+L+#S) zO(Y=hSm;Z@=oGSl0M?bzf;0a@KyWO8cODT=zJ-9YBOBhx#tTwkYGUd91%HIIy-e1D zSw?G{ptTPaYiG1jM?JS0cG_hFfl`bYNjMPZ9Bj23MG{-ADD@Lyz&m9am@0Pn57HXjii?&hNOMJvEl%(b? z&}}*9i4ofO5N*i2{)MEGY_$3dsQxB;UNuIOjIxUZeLJK7E)M$>*^YiwJpX2C0rFGW zKnTARlpSA5PF}Ug=4z7+?)xFv!)N`CpbHGI-R`163`l$##m4(T?wbQc#@*_^IT5|_ z2cxTj%3bMsJ+*Nz;LsG+{!Tdik5tS|QPJ2JV|BpG=3H&q7;ebEPnMHH0*drh_MTIp zA&D5vYBpdKwKG(lFg($Mz@*;cdvPhnM^YTmG|lk)7%kjmmF~QU@Vc1>=j=kdUk+Lj zh0G_y^b7`C9?hDL#;m$Zq|OXpwI%8T1Xx<#R!I9x?XZ8K_j2-JEJ{n!tn4?0vjfO- z0!dwY14-a>qY_ebC%peUe^GSFlnIqMtjDnyo;5~!j6Q}W#k9iX_Qimq-A4@vCn45> zf@4Ly%?{lTh8)o>tP&vMS5P@VCaEFjwq_b@y0GY1Qf1iibki2O9SgQ04+(l>9XWFM zhiE@8$u}G*jav!t`ETMAf&mcDU3$h$ltm+7t5v+P6kJ41n)_V<3&08P%~v_3k#J$> ztwCPDe*YN?{hc|_`tFPMwyf4a zMN2?^`8fd9%*kbxXIo)ze}ZgrO~Dv+n}XtZ zRDu^JM$DNl)NeZ7di!{K&*i6Hv~b#`FNh9KKjKznfab5DZdlmsXzG&PnXYmaB!hUI zYbKWFJ=Io@OHdMWQtNyof{sL!T_^RdjtD(_JU`O?pPe(3dX{`q%;uvLf9=IX6R*yW z;>-?qkX#z_b1{~cNW*WtW)`DPY6E*1s1-tAZqB?0wC^RCfqqW;JoX!oCgH_A$36;SR!taSh( zAm?FbzKy|=^fR&&l+2Lrc6wX3hrTo%#X6xt2CbigCyOQHjYlhQfL;?gS6(rj?@UyS zIM@^M2(-sDYM2#h@VATh8PO}_c78(O#D_JZUM)D?1i&BG*G~L2p4v;W>YU@zgUWa*UX~NS4K()I|5?Zi zSO}6QN|mjnWx&^MfbEtB3!C~*YkTd8hh#YOyPJAq2rBcAAs#8bjBK|}-d9G8OU(c< zq*9s&eYQV~_F2|cYkVfgspTPLLuv*ub}^wAfapJ!JV`k9nekfV(2=^aou_`Hfj>d< z8MElPv3mL3Gg7#*eUR6PxYt{iq%R$>V5HeYN2*On_6Ym`ud}FD&t$bwCw(Uw+eQY% zX56N^*N$8((It^r-t&`!P7e~~-fW{+!$C9d>d%2AvNf7+cP$;o!~Z6ZbV0ZM#nH468(zvr<>p1G(cS(N%P?~#bmPkgP6PFd2+kLzHnZsXYgS4#@rLAo=xU4h zFASWD=rjT4XnV525Ksm9m~o*igKpJqLtZtq|TVuXq^>@`EV z8&GU|lI>-BRZehR$abg^g=G#Nl5UGi-=s`19I{|}v%Ru21^UcjKxWP^m@t5pD{T4M z&MOTPj0Pwhorgd|0%T+Ako5rK1~Pa=P_!ymFe(L z*G%wxrAclL5k(`;DJoiSv8^ri(HH+2)DkI=lmqD*Nb$QJeAcqJ=X>YHl>*y2Ig5$v z>uJz9FhxWtz_aky_Dpt~>}r{Eth=5*EWVk4iloJR!dOZ>bB9`hUO4w|d1Q!R@rrne z=1J?8k~FT>Rq3+!ZF**T5Zt9eoR%^{?7z^#)@^9D6>7R zg>#pc`b5eK{5IvAgVl8c26wnx!T~NB%V<60_I^a5;V82Dv399A(5mKPX!4OHY@B-~ zTp7I|mSf%T`7U&e{A3i+Fq~VlxW4W7XVaBxrN(>khOLmbMO6Rz&`@WQHKp8rJFsT# zJy?~Nh+m4@_tnly+v(|hWwHSoCIpt&TU*;0ZijsvjEH-k-=E2!P!aU)rI`Y0$z{N_ z#=hKZvr%`u54mLVAuv`r?xDMbplq6MS~ua1P_}Nh*2k{8VNu6>RhCpw6pb2;)%LE` ze7c(_%*C+gY3oAha5^w|)b0R+pNie>FLbn+TXTrwG#D6`*?0=q|9e-sa;*KCo*F}w zhabO%1s1r6M;?qf7oVQltO>6^;^p^L<;_j@P(`-U{!}CW)x}~7iA?(&eMud!=Dp_n zzpT00Ev<7B+O=+Q-E0+(6$+9n*X_4Eli#?MxWY2Ik;*r}W@;MkBn103-1c7_(*;>E7IedmwDqBWSB^>W65A+vKO6%{@2Z#qiY*) zYZaMRCWc%-v_%5(p161fVaSC&QAUGTl%Duudc{-bR8NBc^lk93e4sv~yvmb*2alj39NJ2Nd?+D!9t*2LHvve49Xi4>)% z7s2h>*NYDvm8@@6nMm(uIu+#KW1x+J0~`afMH4mm<*)Mkvym zxaBkL+`^_^K0LdX;bCGy`~OD0WBW}=iIW$$=&#H6vk?`$0!6A zU1yj-*Jd2TJ_iznKhM{s0s}dQsLumE#8@0rHWbJxO~aJN(7Bz?v=tq=v9MI!U0lUO z*O>XKa*xmZh=F6#PBRa-$NO*G`^CLxUx}0^q66Trv4`~K8pA=@Er;9V`uu&n zBF{5OLGyitV33s1R-dzdCR?^PH$@u-d#2{Fg>#W&yrEc(?ekBS+|8ovH*#Tvu&7!_ z=wgoh7v^k-NVPvAkBj4C=8P%r(Nv__ickW_U%LYtK?)HN@hsd}cQy=b=IV-Mo5#`7#+n zuX+7pwb+_d8vHl=Y;^VzQGl@A9XPS9RjA)5CL$RTm)m!BZ&@&2H;>`4l(NC}ryC;_$LX)UHUD<}t)0ADtvwJfZyd`ZHl}p062o+`-)g_)_b|pWl{mOHipxB_nfBpqd8MJTa}iJVuLDe2#9K}n zCeKU#Vnhv+&aL*oURSIQ*}T2rtpi9#rNv>kLTIDLG7Tf6@J@siY~S0q2Uf{ey_gJyjBb{)nE`KxOOdc*iSOL zc<$Su6V`@Ixwk()mFKS;k1dR_N}0QqTkl@P?AwX#uZ4I-jNZ9s&d?cQy#o&)Pvz1< zkmpWAhK5?|AE^=EF&T#$8fyNYI=`)~a~Ck~nGJf9f*pZVCW9ZvMk8}ZrX*e!JjR_- z^bFxV*6ca>)X@LpOm9IJ8TTVFoTje}uf8peKXXo1A=@CdwfHyM_?)H2osV==v7|t{ zM8xtk^|Ht3ly@D%pY{~6u{PS?y>~goPmvNipc<3^{q?Y)tH99gg7AlpgcNP|#8i$- za_Q`fjP!N2#zgJoE3yXdn3^l7fbNvJ6e@nk5Wc};x6I|1y)};&FbGw1xV8LaJh^=Z zIt4R7>I+9@#+g_VIr`dD@-N$+aRQcZ(F~d50hS_lW9Hm#lL@2FPriEjjZL{3Tbvl! zU$@WfHaZGhp0S{3Z^sbH?-^vs%tbo*%I{q7Qt+?%BUoOI_5nuL8vdEC`oiAv*=~i| z{o8aBsGhZL)65>E7c_sb<)9&7= zPEm57rBB^$|*&xu4NFdow8}e6T?u6Q%?P5Ox2)txB#UWlI4AD}s~UOON2^I5EE? z?%QJbFQqPe%u>YfWxCZdhOYb1JqWySJ0mc@73-v;8?$(HU^J{%s>J)eh&YwN^RcBv z9f7@PbrE?~=U)gnXNxvx2WPk+)Gt`<-)YAz~LY!#^bZ35GdrM*GAqtaW|FU^=ui)h%a#`<%e8AQTZ)tau#nwmKkh z?DgFP$i+S*+n(PEJFl%mU%P*=t>L4)#@#M8m-a5m>C!F#d2mB`hGTpyph%@7cK+yq zsP7@ESZC?RJWX`=Kbh(u85v9=54(s;BO0XfT#+(LE|dl-RppI_G!ng|6VL8mB<)Qr zhQRUK;pY9Ir?xh`+8*PY!Ssq=y_jXUdYn_&$C5VR)AfX0V_Rw2vT9N+Iri3W`~iA! zsCNJ+BcZ>YPG+T#Kn(sLialgiQxPO6J1U7yr-gd1AT`vphY0s4+=aa!)@p_d4QrmM zD>w_){tL}b90uxbRu7iA+j@?8jrlNpR!tIwM856AE~4*##ZO7Iul$)-b1R0k71TSg zExzs?g2=~2eTbuXCQDY0LXPy}&aBN=hgf>B@85l611oa;jk@Q$1!$?Tx;TE&XH;scRJ#ykD5!#_j9vo3(qaHJyks~?{eq6Jk`R4f|6JKxf6_!idmxKZ-Bq#2B9!} zskSs`02q0{IUER7X_S+`fMG8izJ-p{<=q&tWe=~kjxFibuMsDN}uhYn@4;3J9F9b<05xBNfLkY#T{%rCI;(Tuq6rc1Anv1k|vf3dzL31mzIx>Pfv7 zN<(B|N?iZKST-@noR(xIHFw-1Z5}*N-zQ3BVPT zEUDg&h>Dt>L#@2FZ&`EXk8@bWfKv3ZzrgLq+MtcR)sEjZU*0MISQafgxqJ3%hqj23 z|25}I%GJXfo*1}!82lMB^#S_*L_w4J+X21{7YV5{M`k4+b`a{Qf&4Tu5?b5Ov2qHN zjdPW9O-o2(wcfVPk4kC;-=!j#gxkq2{KCW2Qr`HUp`9xepsq?*UU>Q`kkE9};M)DA zk=(7LG5M@l`h0?_zjURIUU4``OL%>Yupr!rL_G!_!q!TsMYKEL=IZ}IwfF)c!I+m$ zggx34u8pHrsaw6uo4FyoO|{xW|1+xm9z{PecI?5IwiwAgoIXuf6R5l7JmT_vXTh8`xAd6KT) zXLPH>Tc1yl1MISggpD3M5iW*Mq4LFWvM^ZYzQv=JyLK8N&va)?RulW5?Mh*6| zOvN~?c-pDjNtbsx@pSf&6mHlV{oyni>L8n;YqM$;U_6NBu@s z0(+P5N-S)A@Dpv5USa^>BXVcaB}R9vsfP82G-k{n6`osPwCR(8L?&kHu-du}6X_#K z1be$kFAX{14gRg2rw%r(WyTgnW6lqVin8Z&l~q}>am~!A^0G#zfr79yJNUSlhzwXY zCEjOk-Zx==RoYD_dt5u0(j(^F`P;Kjch}-P-rN2veps>l^JTR^IGogiRsMXJ_}0-h zU!2%{r=Qls&q%JGg@%o$ifg>v4A$2xQ@uOWYm3P3PXQ-DWWhas#)w`t*8=8r-XZ?$ zTt$&ai|+eQqN!nbtGOV8@1t@KZS)#|Zc;s=T74=*sC)Nhc*69Mi{YR3pb(k6tr($X z;3eVkeE+J++Ey4!d*=GEC3%5_8nSYg?_i6E!&dn(y5l9bIdD zKak+TruRJVtzkEN$xOgVaq;`AG#y#C^HDdNM|1Sk^m5;bMNSyWV344$+uEM zDzd?jiTeRlG~1uW>6m6%_+u8M+>O-!@HSL}AL|4&A(Jof0z*H?3d(TsttosdhxjY? z*md75^yTs6B8!Mkzx>?pbyuTZ#?bImU*gnBzkte{_%-@q zbwwn>XLGd*FXeRTAeMXk2rM1q`}jlKKi?=iAo`>6!XHQW-@XB_p|j0}M+pIygtgrU zGQ5DEt3M0hG1V@>2t4&ynij@Ozur_%Y*xF7(NVQ`(h&4|0+?jPxtfBMg$bRqtIXNo z{B7YC*Yy(-b3H?c8oPbpZN4(;=exA;XVz9&41MOG|nF`G?Fg*`#<0vKFYszzg8 zIn-;tEzDtE>AF2^@;sk`g+{Iu?bimrkdgI{1?9{yH)rI!0nL5^nXkF+&hFg{{Jma; zxd3uQkKU_x9~=;5(d>aj*i6ilx`&4IX$#I<-(~WLFupI9DD6W{mvucu7WUW4nhBoC zr>&@(UpS$_tjYsy-)g#VmzaTP}Z9L8#l*@%2qGYMkWnby-U9h~aPD#Zhc3`U8VxP}@%$ z)>&@GpEKXCvi$%c32N46|M$l8Bj2W9hYknl80R6xZ1r5(FQc(bUrNjc!9g zco6Ju zd{sv(PpVve5l@^ugb-(3y9jrw<(sJwaZOb}$$d%AsN6Z5A93iu5m23pH8-+Fo`E&{ zv0`%`o=0_Rtpr~FK!SZz)92}qdBX)=naFRTOIy*dgofmmp6+!Nh6>D?Lso`9RC_hVg#M7=?v52T!#C~Dt3|<{$r@D0 zzTMqRx9UH`>23!|kQaA+Z&A^(DSPmxNqOrUzniNpXEsIu=)IdQzL^lv7H4axddwrt zwC@nVIF+M{QT^sgrweY%h2J`xs7r1cJC2`CW!sfQ^4nkH6~~;MSy}?dZVcX${C-Dr zgGacR^}4I0x*J3qk}Y2l%B!&NNmZZyobh0-Ui3*zOHGztjws8%eMIBDUCa7Y?ULG~ za(;B@*gf)Bgv~@$ADICo%(0e;%x`tbsZXUp2>;Y$@(r8$zrNtq3ND%RnL~Z6Ykn9s} zQ~X$;sigUS_0q=&R3%PimE+}m6`k9g4?`?%d-XXP64bVouoO`g;C6+Un!kL5k|qUa!x>oW5}|KL)Leqx>j=3or2q9IJlQ4Hw%{?|Hjssp zuf(A`c9S#o`)^NmxA4_QR4LkPDFCchJfIxKxxLmuos>eVfVtm=GjSh53H zF8LBg$g!s`4Yr)D8F*wQ5NCETp%^;SNXViHE;v~$r|_y3W2}ljvYw-9yYYTJuw>TNBAsSWM1k!|?A?#f-(qko13h0gOI^ zNW^qXDG2h92Gv6T^c!_F%N+RteJ*V>a9X)^?g*z&q=j4aP_wS**S(-xRB8wB{;|q` zy*pU=QCK*0m^_>QNKsAobwrH>Xku2Otqjb2r#|+I=4Op+Ke;&LnP2U+TX5wPqgJfY z-V#q&_*wy%st|~yOYmjC(6&`}?2xX%KPRI#*sry!ju~_j`K=~&tFl1!z4qv6WXJtY z$gKrTdT(?;Xnw#}UzlG_kyh)2;_R)NqKA<@~-S3{%Z*M41??Sr!hLwPQA|m?`~G8f@>`nPdamP|#B**9sc- z?{kykOM|=5q_FKWRtFy=hlLbmPk?&q4;j(C_?n-6G0k^9Dl;qk24=s+i|>7M7kZ0( zMuXt;G-EbpIsC^xE04Ub9QU!q)aRn^_d)m)s;g?}g2|S%;SXqQ&H8fZDQy-Sp9zLj-THeDBS9cZrw1Z^tCG0ZBSaoJ**;ZMu?_ zgUeuv`HOv0fx>;}n@^oi@yKF+kNf0&^W@c^T?p>;)5FUynbP+}pPSm#>TvKjR=EaMvWBG<;$eRrkrqXynr?rb^!7TUMTp)xxGVF49uh>v4W@ z=4=klXEu~}d2A!{B>!?q{XWj9yuo&fI-yAZXZdnkrG=LI{Mu_9fiqYuRoKgJtg`Ea zTC{U#K18$cQJcLSN@K>Wn)u=Nja@k>F9_!-UFWr@X!v=C!STouImF&?r2GkFatT1( z=KTAZg1qYt2C3s$wD!}G5ob`ZI#mxGU&pcoB7pF>BHOskbcvqh)0q?JShs9iWQuY( zMn9NJt1$rENa~9b;uOlwUw;r!uE;GXP#Ia=8@a!KY_mTf-296+uYiYr{o`J3Lss4E z$-G52{okHfa+eyQ{^)Ez&iE9E6C9nymzI~`!IlK z((T3@iY^wq{H*!`Xy6;ClWNy{J8iVxA(2M*dZD}P%Uy`Q8=4JO?dWfU7<_i+0I()41YjYnqSuz7BLO8B1Ts%Mnnmvsm!H+sNO`FUg>Pp<;|2nm1ap+mhQGe zOec7_#dunB#LX&i-D0F*a(t7efWA8TT3HG+V>s%vY4|9`X&lCW^7rn6NEp)Y*~5~_ zy_iz zeBxVtrjSJYhbb9gFa+Q(M#2oG*~%fX^}&ITeq-!KbpiQa0Z8~DL7nSfx8J^a4+a)a zpN~0V4GGGQ46<}EZHzAXU^BhszzyxuZ+qQ}s$+;O1+nwXVzVEo33wG$(VTBdd@ndI zXZKTUo3im9L9o{UV=)T3>#ObC=A+ClVXxvkFU~NqP$CGcy7p~CC^SP2s)e6J^$SKo zFj#45wY4M5`{5Do>(qyPHS<|{M&QbEH=f@ib1&1od;vw>| zjJFg#Of*6>5t1T1iSio(*v<7;r4dK=q-kwYLo{|^JDFS(e#2ix=4Uxn>?yR|(Q3AK!BAbz$JK&22P)Tu||3svXz`7FDish4*O1{c^4RYhjsk$i8QfbDd0l<|-e48H_B!1z04 zS31!J6R;3Qop2hWE}Wo#vaI(9zb!t}xsNbldslb&?Kxpm?}&Wb>4JfuIdg+8f42ad{(aO)6kw_ty@ly?=&i(6x*(R z=fP=TrmN|bWlV8ZF zyy#r_<57_Cng&SN5C&*C@)X=C(wUf5BP>Z_#zsf_D0j;FV_w zf&^jtv$W0NV97;WY@9(2f{WjVloNbP9xp#aX(Af3+exi^pboy`Owdy~? zRXlJnv>BSz_1_d&ra%N*H~R=JX!1fX-tw8QshGdD%{k6aH3w$5QPZsPx%c$HN(Sd1PRmqu!}oti z9s7;ntQ)CeM0J5Zw8GMuRJ+<}|M)r9*W|iHW>C6x+PzMD6FuncXL|X2mRtPIE4|o0 zmPDVcBVUa|jr{{(u<|$lUYn_se*Jw~5c^)^G%3v0Ma3pZWzCwGl|bEP7{sX@zP=Ux zEJT%G{j46=GKY2`BAUVRyb>jb&|gu!p5L~e82M?c9e*w7Fh)NPeeZ>o-nNu+Y}lr~ z++$__?UQ3a@Z$9i_dtL`xF)H|&J1{O2doXD8SyR%+bhMiGGi^A55RJ!XWF5ZEA`Y3 z{M6hN-F~s-tQ3gXk4N6u*pH*~Co{68^@PP2^@6dRCNMxUcK zW1A5)X4!`08x<*8^2Pa--p^KUapLQue`RwI2XWHdkj~c=U=HxU~tc7{P9N+fUw`P4@cOlv3$Ne~;|bgpXhtWA5rSvUl@3fFv^2=xFqs`3gq= z3c7;)0Cr)sAKc4{KN)Yi(1#9p6tuZy2PBYmwnml}E>gNIh!y_k@Mp9c2w-gIO4F6g zuzjIdxSyiX@hoij^+UVI8~qi4;uvH!{tgu2AJ)B_WS(qQkHUHtg7~QD*KbZu9ai zof%7B!>e*s?#tTnUa3-TFWqwkxSPIdlKPJ>6&RrJ%r-Cs#H@eh&v$r{Hm4cJzKpa8 zRb$V4q6GX1GF2NL+b2bRMWEehz%06-7soNXn^<{A(vo-Bb!#ssYur9LtEQ1OQi|Im z;+$~hNqN8gZg(xPCgg|#O(x4F%v>D0@C@iM24u7}2?8IVB41=Rawh3T>8rUL(BZ?2 zzM;|xt`ZI0=^blQP#7nIybIB=7hen8KJZ6S>p&2Dc$}2uudHwTYMBW4S;FTGxe{c7 z>jt(1TUXRPcsBDNW5$ettYW>l(3Cf_`E;~>C^~(Cj&(mW;G6*njg+>MbS;MnIouQv zfz5tflh9AP2)o#5Id3S z@^}~T`e6uH!t&1pk<$0Su^(YCQdX44rI7MT?_)a~6>|6yI!9PU-_AtmEs0Ojd*2_V zt__6E?g5j`XbeuZeqf5BFcnn6Gv=n9hK>N7=5T2CQK_}PIAR0G4kL&c8s1@($}*YF zxNV0(EQr2dIE~qEST7y>4qCwrWC9`FAlVJJ*R!>hq9gMm>||#|GfRl>P`oYn`;PQ* z;n`sQnFnU>qC$7xUf+$Z-Y=ucF-xQY!`R??1Oo)eBnThz7`Q>LUez> zL|=%Q`54%)8Abm-`W@uAZw-Te0a1==d?PiM&9LLWmLknjWX>t~b{;wB5Gpm%0ce{3 zZ_}`E2gxCVdxKjzUN;6(;A#1q!yDz`mrfjm?C4Ew!tq!pwtLN~+!;`B(>iga_fatc3+P46-p zA6(i<#b7bgpi=;yUhi`D)1&*0Nt=xjw*o@jroNg-M8s|^ZSikU<`rRa8h8$S8GHz$ zJG?@Lgb@`lh2@@{b~9TgNis==aY z@)23Kl6Y>@>R>}uJq32Pnnjk1cw4Ka@BIUy-7-oR{3&)_Y$bQ$O5| zx+Vmvn5T!4)Xy>_tJ;HE?ShYd7z1I`lZU|UzS3WTNDicB5II>={E74#iN^JS3MjVG z;`t3d_=j!LrIsi?-sqzU@x~)*#t-nLtv?weJFoA^aK9>6=U7GnRx0ZA;pcHWzSW!k zj&cZ+u7wi)u3QgU*6i_?FOwJK!ow-jrJCtZ!Vy{l{k4fH%zWQA5G9@GWLT+H5Ho_) z0@B*>y&fZxLi=*Xqi{w-RKH4O0z)WjB}dC>Iz z>X%mn1oDxzyT6u1cVeqW;trX@7VtI93O%?Z$#R$ruOC17bxbG^VmRzUa17!a!PmL^ z&+2~*sIS}2B6j&Lb&FtlHKLz_&R;oD%Fn-|h_8mFzLS-96a~O1AlM2N=uN)3F0gwm ze&j{wGP$--SjcZfEO1VvRP~eLvKNf;H_$&MDw6b)A{KX8^JWPpBQvwfEe!``7&FTE zk^($J%0U&dQm@;cUoHz^u=#wud;Kzoy71s3j(rOp>vbGZf`pc!;U70G?HV-KdxjFD zqKx{AUPH;J$6{RXQmjVQ_#w#0oskHHIvhTNvDZ>}(qYu#&)-dpRNV5}GjL3uN3ivR zjobyXqn6&H)$NZm?qNk_p7=7a(?LED!3FLpi!Fq5pMQInc7nE*2BREbT!rU$j%mJ(P zf&*A7)F;X9LxY&hD^AXQ2=g6uek|-+V7A{RWXXp|3{XHeC0z=p@?py#ciN5QB17V7 z^$(VHZYmH)J``h)ksrB5-uz2sdvGAvUP_W3A)Y^{yjuqaLAle76zlSjwf7JIE_L>^ zZS{vk#5kgnLFjYdO&^Ml2h7GKuR+|^5sV{K7rwcl#$x}z@^Q^J7aQJfexmJ%c|!O} z$V(RKhN0=+uKVbe=@{CM`|?T9u3;Ud1t~-LB_R>EdNIG`BuNxXBRyY`W37kwSJ6DTA?(UC5HXWM>E&StSVHP|G92^LPeW(tr?IXy+?tnl*k~`nPr87@=W}?;$I! zi)4PW&WDGWeNM?-S%Sl}x5N>|!4*7i6aJ*u8E5ccus}!pSc-9NuJDv6pMl=tp(}9v)pY z!^gg)^ql-IAtdrp^9}j=SdjaysK5@h^|>B$dfr0+G49df&7K*4dXdy0E-r6;RX#d5 z367!jOz;VA73UL&J(|uwUGF~PXV2&-c7mShr7PgvhgWbW@+N=W?41Vfwskp&2ya7J;c-M+z|COJ%dwlq$Dr}v(plhAaSL)L4GHzGyi zdyUFK5LiKAqB!Lu6o-+7Zg}>3%5qv-?>3;;oG%eB612@e{BZs$Hz*;^HTkzsUvkbQ z#a=5nJ~^)48*LBOZxZQ1%4NQab@vHl15_1*a8+}H8YGFFO7h=y|7p*mz*sT*;B|9| zJ60-)7sw*Rz?svvW5E&56zX5)x3cDUtFO3#caV$y3IcxvnZaHFJ~QQipS4IjLePLPOkNoxW6jTmvjq`0odX|F)z4hFc>%=N#22k zJs0lbhO@~%AJqYhp%(^B1r#-S8few+&F$q}yGJjNd4A;C*pYW;ry(aHTmhvRl*~-J z0Q&`+5r*bYsZTU+rqAzgWP+**{b(bAOe-cLvJOacyorMm7bOc{m+<;Di3z}O9RM^^Ob zLuFd?58~?MZE#(U?tGA}Kbf8W(gJiP$})aILmvk(^KwcS)d5HYJpsH#2-tXLu(pc# z--vPS>mrwdWoxC>dy=iU`;=VCcFrF_>~v#oc zU-y_AR7eDg3RlzAh<2w*m@J0}4WK&kOScf>szA480B&-q%joZNfI=~J3 z#aX9U+kz6AQ=<=$CJ&VUvTr%yU|AcED_!A85<<|78+hXp%BPo(3VR)B=v3kSWxil> zL*{%!1+zPEHW{d*)BZCvh&5h~U<0zSI$}0!oMYa&-?>k?2G)rH9pu#2x+3eXytZB` z)EhSr?U{0n9OpT}V}b+BVn3F8xR`Do)!krZ7jvAgo7k$MC&j}bGj`@)iJ|IioHO;U ziw1lvQ0LW10nk!6oN(R+IC5f+FQ=$x+~r|^ei}E}Ii;B!k zW|&H4SKaExuNT_;JO{92+OY!FVlp$+t!y6crtc2>w;JPNf9z0T*+-%leDTm!8{A(v zY9(;`#Q-BkNPpr_F@nQvV~**9zlE4}aNxvg8?k*w2)}R`Sn0DhIaZWY>~wqV9;Oy&q2VD4&+LaA>>?b1q!kn2=ZTGY zmdd+)tb6KvwB>iM%JnnS$AOxTScEuR zrR(Y5knvje1%s-jI6>eDJaJub@>6cU&col0P|cqG!Fe z&OYsHy$^3OMMM7OlBG6MFSX`0QL&7q2Lk7X;H$e){l|G{6{JGxOc8VLPK}^885e2Z zyM65sr;t_)fK8$OMCV%YbFI!U`YPDL9YWCcl%+pq92uPx501p*xlk#`6_i{%TF2gq zMGKXr@7AkPDQf{wG_vg>U9xQQt?*v$-R(kK6T_ao!2o^Dz-NP&wAnBaD5w)1T?(=f zH%o+UhMP%{zeK@szD&(_hZ+`9hlInhXvV61L^8uB$Te8f?)t*M-E|;?Dd{BI>URs7 znVdV%yvh2K0Adu0VGXw0#Q;h^WDQ#%82#2v*>;p8C=?7@KpY(FFd!d8efNE>6Tvq4 ztkF9`Acupi)fA9^8e`t>)=Tw{B!qr%c#X%KWXYA|dwMqyl5*G`z?&q3OP2J~@*}1B zb#Im%3XP>et+Ds(3*n=+6!L z-!Lh0f9TlhJrdG99Ky-RZUHigL)Y%3LZLKQvvWbc4&-!1_=NoC0KNC7QA=PH13-8v z0iE1f^V^Lh8z-g<816^3_L{F<`bpg4ft0j>0(mB5On!S@NQ}^AYE0%eykkDTv;S;DbyY$4)*rf zrDou%BTg%MRo8v?N0`g?vV$6j0ppO0}YcAZC(=8%c>pmYYaDlN!~aCVrGl6i=^{MYm8>d(rG3Uo8d$f zBq$4f9w6Infdub}pnyAtw~ASk0#ofl1?@U05zv^WmNH9jec zItIk!0@xtNnm_~Of+8nRr{+HtwJt3ZTStEr`}DT1!2uYovx6_Ay*Od(x{aFZ(aN>d zF)~Cs0g}$jteJJ(qQFWMH|Gh~x@LLj1(dTy-_nxiQZ zr}~C8#oIsw@$?rH4cqIqohD7}vGWU8*cBNUKh7oueu%=CdNZkVY#RBkoAbTULA7j$ zrDurm2Q(kIf5pE;z>{c-b82Y0ZbDkP|lk;hF76Y&WdNT=ftUPo9%e@SRmrKnM zKk8|Y?uQcLZXHT9k;d|9_cW{H!USMzse0SN2GI9&kMW0b7fuM8&5&4uMhCbz0Wwwx zsJ-xmfht4vJ50tVz{5!sCpx9)c_ieH%(EPjW3DgHb*&>%Jx_L-v)O;jWH@$F$R-Bz zC=Mj|8&j-Zgaz40OxJD~7D)unzr#@&hNLn%*Qf)(1P-X`%0Rk+)*7MKSecYBC|6&EjJH%FeBS{ zUq)9!yl_RJ`FUNfdlN#!>|uyWf1sO>=y*qd*J%!VZYErL9YYsO)TKb@J{C}>5&-s+ zuO-<#YBt>ud4_@p!-clKhl63c_ym-p5j6O9dEM*%T-E-~-(3+}7tV1EO7u906Qrdj z;@)9qimtd=9e3I)N3IR5D|Y#J%EoU6Fk9V+3p~CP>JvgllrYYi$0NdYC0A$%FslMPYROGFgD=v0Bs+c3eE90OFVl)$RRA!Ez6mM)-MGPkE)%R-K7e-> zujXis^PV}O`dxADq?1c!>1u*@NwITG@5q^M#%dh*Pv`XNHarb02cLUnK>e3L)&B5|G^XF%)5@T{5&ai&ycR*6X_VDaZ4)z@%>tlsa=m}s@I z6(pg)xOZ@nA^Axm%C<9kt+v>bp5a)gKdfylzR2nk1ROHX=VCgFGe!(aTdPXdqWa?~ zQp(S)sXEal)gF0hJuG#Eohe&dC2tO2wPZn4leoK(=Q%JfgiJlq5a(uoz&Joylp7iD z@GGfLeE4U@nzf|c`%c0y=b=fK4idWinPGSEzGsVOh9`PidTDU@!O+&zXqLZt^3>s^ zbX|fj5BK`h-(pV8;J8qzYwekRc>e6q1ni8#d z#v3UQ1^`H51m8!`DyOwO z{Smq^QzhY0x*qV^Z(ml%IB2^cgc~PzSJidHo-N1HIy1;fa&2#o>A~*&A4MHe?HAim zqEsOjxDEm)RmBP`wDDTWq}Rqxy_|#7yIJw2Ezh)vZmzn>9L)F5DJ5?r+@1jMHI*uD z7dIif3Py7iBd&wX`q;Goj3QG-#~nk

y}68>S}w+-J+PF7mU2SqY%-u%~dJA^Z?6 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 Re6H^6;A4Jxtn_eH#=r6l6gB_= literal 0 HcmV?d00001 diff --git a/static/images/UoA-Logo-Primary-RGB-Small.png b/static/images/UoA-Logo-Primary-RGB-Small.png new file mode 100644 index 0000000000000000000000000000000000000000..8d9ff89042a942ad00ede67a2462dd95fe5bc419 GIT binary patch literal 17418 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


-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

A!IHL-UlQBvrrmAcceaD4OXmKaS48N(9fiO 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 B4{!hg literal 0 HcmV?d00001 diff --git a/static/images/uzh-logo.svg b/static/images/uzh-logo.svg new file mode 100644 index 00000000..4fa27b88 --- /dev/null +++ b/static/images/uzh-logo.svg @@ -0,0 +1,488 @@ + + + + + + diff --git a/templates/framework.html b/templates/framework.html index e3f75176..b9cdfb48 100644 --- a/templates/framework.html +++ b/templates/framework.html @@ -227,21 +227,23 @@

From 386098b8a62080a5fef7cf1e0de9f86e2513e41a Mon Sep 17 00:00:00 2001 From: jebus Date: Wed, 15 Oct 2025 19:35:26 +1300 Subject: [PATCH 02/17] [Feature] EnzymeLink Annotations (#152) Co-authored-by: Tim Lorsbach Reviewed-on: https://git.envipath.com/enviPath/enviPy/pulls/152 --- epdb/logic.py | 49 +++++++++- epdb/management/commands/localize_urls.py | 1 + epdb/models.py | 56 ++++++++++++ epdb/urls.py | 34 +++++-- epdb/views.py | 27 ++++++ pyproject.toml | 5 +- templates/objects/composite_rule.html | 48 +++++++--- templates/objects/enzymelink.html | 105 ++++++++++++++++++++++ templates/objects/reaction.html | 17 ++++ templates/objects/simple_rule.html | 37 ++++++++ 10 files changed, 352 insertions(+), 27 deletions(-) create mode 100644 templates/objects/enzymelink.html diff --git a/epdb/logic.py b/epdb/logic.py index 530ebc51..19f03ae2 100644 --- a/epdb/logic.py +++ b/epdb/logic.py @@ -26,6 +26,7 @@ from epdb.models import ( Compound, Reaction, CompoundStructure, + EnzymeLink, ) from utilities.chem import FormatConverter from utilities.misc import PackageImporter, PackageExporter @@ -617,6 +618,8 @@ class PackageManager(object): parent_mapping = {} # Mapping old scen_id to old_obj_id scen_mapping = defaultdict(list) + # Enzymelink Mapping rule_id to enzymelink objects + enzyme_mapping = defaultdict(list) # Store Scenarios for scenario in data["scenarios"]: @@ -648,9 +651,7 @@ class PackageManager(object): # Broken eP Data if name == "initialmasssediment" and addinf_data == "missing data": continue - - # TODO Enzymes arent ready yet - if name == "enzyme": + if name == "columnheight" and addinf_data == "(2)-(2.5);(6)-(8)": continue try: @@ -740,6 +741,9 @@ class PackageManager(object): for scen in rule["scenarios"]: scen_mapping[scen["id"]].append(r) + for enzyme_link in rule.get("enzymeLinks", []): + enzyme_mapping[r.uuid].append(enzyme_link) + print("Par: ", len(par_rules)) print("Seq: ", len(seq_rules)) @@ -757,6 +761,9 @@ class PackageManager(object): for scen in par_rule["scenarios"]: scen_mapping[scen["id"]].append(r) + for enzyme_link in par_rule.get("enzymeLinks", []): + enzyme_mapping[r.uuid].append(enzyme_link) + for simple_rule in par_rule["simpleRules"]: if simple_rule["id"] in mapping: r.simple_rules.add(SimpleRule.objects.get(uuid=mapping[simple_rule["id"]])) @@ -777,6 +784,9 @@ class PackageManager(object): for scen in seq_rule["scenarios"]: scen_mapping[scen["id"]].append(r) + for enzyme_link in seq_rule.get("enzymeLinks", []): + enzyme_mapping[r.uuid].append(enzyme_link) + for i, simple_rule in enumerate(seq_rule["simpleRules"]): sro = SequentialRuleOrdering() sro.simple_rule = simple_rule @@ -910,6 +920,39 @@ class PackageManager(object): print("Scenarios linked...") + # Import Enzyme Links + for rule_uuid, enzyme_links in enzyme_mapping.items(): + r = Rule.objects.get(uuid=rule_uuid) + for enzyme in enzyme_links: + e = EnzymeLink() + e.uuid = UUID(enzyme["id"].split("/")[-1]) if keep_ids else uuid4() + e.rule = r + e.name = enzyme["name"] + e.ec_number = enzyme["ecNumber"] + e.classification_level = enzyme["classificationLevel"] + e.linking_method = enzyme["linkingMethod"] + e.save() + + for reaction in enzyme["reactionLinkEvidence"]: + reaction = Reaction.objects.get(uuid=mapping[reaction["id"]]) + e.reaction_evidence.add(reaction) + + for edge in enzyme["edgeLinkEvidence"]: + edge = Edge.objects.get(uuid=mapping[edge["id"]]) + e.reaction_evidence.add(edge) + + for evidence in enzyme["linkEvidence"]: + matches = re.findall(r">(R[0-9]+)<", evidence["evidence"]) + if not matches or len(matches) != 1: + logger.warning(f"Could not find reaction id in {evidence['evidence']}") + continue + + e.add_kegg_reaction_id(matches[0]) + + e.save() + + print("Enzyme links imported...") + print("Import statistics:") print("Package {} stored".format(pack.url)) print("Imported {} compounds".format(Compound.objects.filter(package=pack).count())) diff --git a/epdb/management/commands/localize_urls.py b/epdb/management/commands/localize_urls.py index b9f95b11..91afb0a6 100644 --- a/epdb/management/commands/localize_urls.py +++ b/epdb/management/commands/localize_urls.py @@ -41,6 +41,7 @@ class Command(BaseCommand): "RuleBasedRelativeReasoning", "EnviFormer", "ApplicabilityDomain", + "EnzymeLink", ] for model in MODELS: obj_cls = apps.get_model("epdb", model) diff --git a/epdb/models.py b/epdb/models.py index 83b29925..4b8f4198 100644 --- a/epdb/models.py +++ b/epdb/models.py @@ -494,6 +494,20 @@ class ChemicalIdentifierMixin(ExternalIdentifierMixin): return self.get_external_identifier("CAS") +class KEGGIdentifierMixin(ExternalIdentifierMixin): + @property + def kegg_reaction_links(self): + return self.get_external_identifier("KEGG Reaction") + + def add_kegg_reaction_id(self, kegg_id): + return self.add_external_identifier( + "KEGG Reaction", kegg_id, f"https://www.genome.jp/entry/{kegg_id}" + ) + + class Meta: + abstract = True + + class ReactionIdentifierMixin(ExternalIdentifierMixin): class Meta: abstract = True @@ -1014,6 +1028,26 @@ class CompoundStructure(EnviPathModel, AliasMixin, ScenarioMixin, ChemicalIdenti return self.compound.default_structure == self +class EnzymeLink(EnviPathModel, KEGGIdentifierMixin): + rule = models.ForeignKey("Rule", on_delete=models.CASCADE, db_index=True) + ec_number = models.TextField(blank=False, null=False, verbose_name="EC Number") + classification_level = models.IntegerField( + blank=False, null=False, verbose_name="Classification Level" + ) + linking_method = models.TextField(blank=False, null=False, verbose_name="Linking Method") + + reaction_evidence = models.ManyToManyField("epdb.Reaction") + edge_evidence = models.ManyToManyField("epdb.Edge") + + external_identifiers = GenericRelation("ExternalIdentifier") + + def _url(self): + return "{}/enzymelink/{}".format(self.rule.url, self.uuid) + + def get_group(self) -> str: + return ".".join(self.ec_number.split(".")[:3]) + ".-" + + class Rule(PolymorphicModel, EnviPathModel, AliasMixin, ScenarioMixin): package = models.ForeignKey( "epdb.Package", verbose_name="Package", on_delete=models.CASCADE, db_index=True @@ -1095,6 +1129,18 @@ class Rule(PolymorphicModel, EnviPathModel, AliasMixin, ScenarioMixin): return new_rule + def enzymelinks(self): + return self.enzymelink_set.all() + + def get_grouped_enzymelinks(self): + res = defaultdict(list) + + for el in self.enzymelinks(): + key = ".".join(el.ec_number.split(".")[:3]) + ".-" + res[key].append(el) + + return dict(res) + class SimpleRule(Rule): pass @@ -1437,6 +1483,16 @@ class Reaction(EnviPathModel, AliasMixin, ScenarioMixin, ReactionIdentifierMixin id__in=Edge.objects.filter(edge_label=self).values("pathway_id") ).order_by("name") + def get_related_enzymes(self): + res = [] + edges = Edge.objects.filter(edge_label=self) + for e in edges: + for scen in e.scenarios.all(): + for ai in scen.additional_information.keys(): + if ai == "Enzyme": + res.extend(scen.additional_information[ai]) + return res + class Pathway(EnviPathModel, AliasMixin, ScenarioMixin): package = models.ForeignKey( diff --git a/epdb/urls.py b/epdb/urls.py index 16f0f2ba..391a2f32 100644 --- a/epdb/urls.py +++ b/epdb/urls.py @@ -1,5 +1,5 @@ -from django.urls import path, re_path from django.contrib.auth import views as auth_views +from django.urls import path, re_path from . import views as v @@ -88,20 +88,36 @@ urlpatterns = [ v.package_rule, name="package rule detail", ), - re_path( - rf"^package/(?P{UUID})/simple-rdkit-rule/(?P{UUID})$", - v.package_rule, - name="package rule detail", - ), + # re_path( + # rf"^package/(?P{UUID})/simple-rdkit-rule/(?P{UUID})$", + # v.package_rule, + # name="package rule detail", + # ), re_path( rf"^package/(?P{UUID})/parallel-rule/(?P{UUID})$", v.package_rule, name="package rule detail", ), + # re_path( + # rf"^package/(?P{UUID})/sequential-rule/(?P{UUID})$", + # v.package_rule, + # name="package rule detail", + # ), + # EnzymeLinks re_path( - rf"^package/(?P{UUID})/sequential-rule/(?P{UUID})$", - v.package_rule, - name="package rule detail", + rf"^package/(?P{UUID})/rule/(?P{UUID})/enzymelink/(?P{UUID})$", + v.package_rule_enzymelink, + name="package rule enzymelink detail", + ), + re_path( + rf"^package/(?P{UUID})/simple-ambit-rule/(?P{UUID})/enzymelink/(?P{UUID})$", + v.package_rule_enzymelink, + name="package rule enzymelink detail", + ), + re_path( + rf"^package/(?P{UUID})/parallel-rule/(?P{UUID})/enzymelink/(?P{UUID})$", + v.package_rule_enzymelink, + name="package rule enzymelink detail", ), # Reaction re_path( diff --git a/epdb/views.py b/epdb/views.py index b0ff39dc..dd13d21d 100644 --- a/epdb/views.py +++ b/epdb/views.py @@ -46,6 +46,7 @@ from .models import ( Edge, ExternalDatabase, ExternalIdentifier, + EnzymeLink, ) logger = logging.getLogger(__name__) @@ -1528,6 +1529,32 @@ def package_rule(request, package_uuid, rule_uuid): return HttpResponseNotAllowed(["GET", "POST"]) +@package_permission_required() +def package_rule_enzymelink(request, package_uuid, rule_uuid, enzymelink_uuid): + current_user = _anonymous_or_real(request) + current_package = PackageManager.get_package_by_id(current_user, package_uuid) + current_rule = Rule.objects.get(package=current_package, uuid=rule_uuid) + current_enzymelink = EnzymeLink.objects.get(rule=current_rule, uuid=enzymelink_uuid) + + if request.method == "GET": + context = get_base_context(request) + + context["title"] = f"enviPath - {current_package.name} - {current_rule.name}" + + context["meta"]["current_package"] = current_package + context["object_type"] = "enzyme" + context["breadcrumbs"] = breadcrumbs( + current_package, "rule", current_rule, "enzymelink", current_enzymelink + ) + + context["enzymelink"] = current_enzymelink + context["current_object"] = current_enzymelink + + return render(request, "objects/enzymelink.html", context) + + return HttpResponseNotAllowed(["GET"]) + + @package_permission_required() def package_reactions(request, package_uuid): current_user = _anonymous_or_real(request) diff --git a/pyproject.toml b/pyproject.toml index b6e191bb..1fba9371 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,7 +12,6 @@ dependencies = [ "django-ninja>=1.4.1", "django-oauth-toolkit>=3.0.1", "django-polymorphic>=4.1.0", - "django-stubs>=5.2.4", "enviformer", "envipy-additional-information", "envipy-ambit>=0.1.0", @@ -33,12 +32,14 @@ dependencies = [ [tool.uv.sources] enviformer = { git = "ssh://git@git.envipath.com/enviPath/enviformer.git", rev = "v0.1.2" } envipy-plugins = { git = "ssh://git@git.envipath.com/enviPath/enviPy-plugins.git", rev = "v0.1.0" } -envipy-additional-information = { git = "ssh://git@git.envipath.com/enviPath/enviPy-additional-information.git", rev = "v0.1.4"} +envipy-additional-information = { git = "ssh://git@git.envipath.com/enviPath/enviPy-additional-information.git", rev = "v0.1.7"} envipy-ambit = { git = "ssh://git@git.envipath.com/enviPath/enviPy-ambit.git" } [project.optional-dependencies] ms-login = ["msal>=1.33.0"] dev = [ + "celery-stubs==0.1.3", + "django-stubs>=5.2.4", "poethepoet>=0.37.0", "pre-commit>=4.3.0", "ruff>=0.13.3", diff --git a/templates/objects/composite_rule.html b/templates/objects/composite_rule.html index 4e5aaafe..e27e8a00 100644 --- a/templates/objects/composite_rule.html +++ b/templates/objects/composite_rule.html @@ -29,7 +29,7 @@

- {{ rule.description }} + {{ rule.description|safe }}

@@ -87,19 +87,41 @@ {% endif %} - -
-

- EC Numbers -

-
-
-
- + {% if rule.enzymelinks %} + +
+

+ EC Numbers +

-
- +
+
+ {% for k, v in rule.get_grouped_enzymelinks.items %} + + + {% endfor %} +
+
+ {% endif %}
{% endblock content %} diff --git a/templates/objects/enzymelink.html b/templates/objects/enzymelink.html new file mode 100644 index 00000000..464af8ae --- /dev/null +++ b/templates/objects/enzymelink.html @@ -0,0 +1,105 @@ +{% extends "framework.html" %} + +{% block content %} + +
+
+
+ {{ enzymelink.ec_number }} +
+ + +
+

+ Enzyme Name +

+
+
+
+ {{ enzymelink.name }} +
+
+ + +
+

+ Linking Method +

+
+
+
+ {{ enzymelink.linking_method }}.  Learn more >> +
+
+ + {% if enzymelink.kegg_reaction_links %} + +
+
+ {% for kl in enzymelink.kegg_reaction_links %} + {{ kl.identifier_value }} + {% endfor %} +
+
+ {% endif %} + + {% if enzymelink.reaction_evidence.all %} + +
+
+ {% for r in enzymelink.reaction_evidence.all %} + {{ r.name }} ({{ r.package.name }}) + {% endfor %} +
+
+ {% endif %} + + {% if enzymelink.edge_evidence.all %} + +
+
+ {% for e in enzymelink.edge_evidence.all %} + {{ e.pathway.name }} + ({{ r.package.name }}) + {% endfor %} +
+
+ {% endif %} + + + + + +
+
+{% endblock content %} diff --git a/templates/objects/reaction.html b/templates/objects/reaction.html index 2a026d22..1335a6d7 100644 --- a/templates/objects/reaction.html +++ b/templates/objects/reaction.html @@ -124,6 +124,23 @@ {% endif %} + {% if reaction.get_related_enzymes %} + +
+

+ EC Numbers +

+
+
+
+ {% for e in reaction.get_related_enzymes %} + {{ e.name }} + {% endfor %} +
+
+ {% endif %} + {% if reaction.related_pathways %}
diff --git a/templates/objects/simple_rule.html b/templates/objects/simple_rule.html index cc55d856..a84751a8 100644 --- a/templates/objects/simple_rule.html +++ b/templates/objects/simple_rule.html @@ -201,6 +201,43 @@
{% endif %} + + {% if rule.enzymelinks %} + +
+

+ EC Numbers +

+
+
+
+ {% for k, v in rule.get_grouped_enzymelinks.items %} + + + {% endfor %} +
+
+ {% endif %} {% endblock content %} From 1effaeb3429dee369f76f8439727accf90efb210 Mon Sep 17 00:00:00 2001 From: jebus Date: Wed, 15 Oct 2025 19:57:03 +1300 Subject: [PATCH 03/17] [Migration] EnzymeLink Migration (#158) Co-authored-by: Tim Lorsbach Reviewed-on: https://git.envipath.com/enviPath/enviPy/pulls/158 --- epdb/migrations/0008_enzymelink.py | 64 ++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 epdb/migrations/0008_enzymelink.py diff --git a/epdb/migrations/0008_enzymelink.py b/epdb/migrations/0008_enzymelink.py new file mode 100644 index 00000000..35d0a950 --- /dev/null +++ b/epdb/migrations/0008_enzymelink.py @@ -0,0 +1,64 @@ +# Generated by Django 5.2.7 on 2025-10-10 06:58 + +import django.db.models.deletion +import django.utils.timezone +import model_utils.fields +import uuid +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("epdb", "0007_alter_enviformer_options_enviformer_app_domain_and_more"), + ] + + operations = [ + migrations.CreateModel( + name="EnzymeLink", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, primary_key=True, serialize=False, verbose_name="ID" + ), + ), + ( + "created", + model_utils.fields.AutoCreatedField( + default=django.utils.timezone.now, editable=False, verbose_name="created" + ), + ), + ( + "modified", + model_utils.fields.AutoLastModifiedField( + default=django.utils.timezone.now, editable=False, verbose_name="modified" + ), + ), + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, unique=True, verbose_name="UUID of this object" + ), + ), + ("name", models.TextField(default="no name", verbose_name="Name")), + ( + "description", + models.TextField(default="no description", verbose_name="Descriptions"), + ), + ("url", models.TextField(null=True, unique=True, verbose_name="URL")), + ("kv", models.JSONField(blank=True, default=dict, null=True)), + ("ec_number", models.TextField(verbose_name="EC Number")), + ("classification_level", models.IntegerField(verbose_name="Classification Level")), + ("linking_method", models.TextField(verbose_name="Linking Method")), + ("edge_evidence", models.ManyToManyField(to="epdb.edge")), + ("reaction_evidence", models.ManyToManyField(to="epdb.reaction")), + ( + "rule", + models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="epdb.rule"), + ), + ], + options={ + "abstract": False, + }, + ), + ] From 1f863fdcd6abd258e4b45944738580c84fd31d7a Mon Sep 17 00:00:00 2001 From: jebus Date: Wed, 15 Oct 2025 20:23:52 +1300 Subject: [PATCH 04/17] [Fix] Remove Scenarios from Objects (#159) Fixes #155 Co-authored-by: Tim Lorsbach Reviewed-on: https://git.envipath.com/enviPath/enviPy/pulls/159 --- templates/modals/objects/generic_set_scenario_modal.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/templates/modals/objects/generic_set_scenario_modal.html b/templates/modals/objects/generic_set_scenario_modal.html index 42ec3b16..0299e4a6 100644 --- a/templates/modals/objects/generic_set_scenario_modal.html +++ b/templates/modals/objects/generic_set_scenario_modal.html @@ -18,6 +18,7 @@ @@ -65,7 +66,7 @@ $('#set_scenario_modal_form_submit').on('click', function (e) { e.preventDefault(); if ($('#scenario-select').val().length == 0) { - $('#scenario-select').val(['']) + $('#scenario-select').val("") } $('#set_scenario_modal_form').submit(); }); From 9a4735246fccb9e042810d87ffea6ed91e491430 Mon Sep 17 00:00:00 2001 From: jebus Date: Thu, 16 Oct 2025 02:24:51 +1300 Subject: [PATCH 05/17] [Fix] Fix for sending mails (#160) Captured by Sentry: https://envipath-limited.sentry.io/issues/66662009/?project=4509569727922256 ``` SMTPSenderRefused Level: Error (504, b'5.5.2 : Sender address rejected: need fully-qualified address', 'webmaster@localhost') ``` Co-authored-by: Tim Lorsbach Reviewed-on: https://git.envipath.com/enviPath/enviPy/pulls/160 --- envipath/settings.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/envipath/settings.py b/envipath/settings.py index 68e2693c..5a18368b 100644 --- a/envipath/settings.py +++ b/envipath/settings.py @@ -135,6 +135,7 @@ USE_TZ = True DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" +EMAIL_SUBJECT_PREFIX = "[enviPath] " if DEBUG: EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend" else: @@ -144,6 +145,8 @@ else: EMAIL_HOST_USER = os.environ["EMAIL_HOST_USER"] EMAIL_HOST_PASSWORD = os.environ["EMAIL_HOST_PASSWORD"] EMAIL_PORT = 587 + DEFAULT_FROM_EMAIL = os.environ["DEFAULT_FROM_EMAIL"] + SERVER_EMAIL = os.environ["SERVER_EMAIL"] AUTH_USER_MODEL = "epdb.User" ADMIN_APPROVAL_REQUIRED = os.environ.get("ADMIN_APPROVAL_REQUIRED", "False") == "True" From 93dd811e39c5803ebe7929f5e469bbba63d9e7bc Mon Sep 17 00:00:00 2001 From: jebus Date: Thu, 16 Oct 2025 02:25:30 +1300 Subject: [PATCH 06/17] [Fix] Pathway SVG Export (#157) Fixes #103 Co-authored-by: Tim Lorsbach Reviewed-on: https://git.envipath.com/enviPath/enviPy/pulls/157 --- static/js/pw.js | 26 ++++++++++++++++++++++++++ templates/objects/pathway.html | 3 --- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/static/js/pw.js b/static/js/pw.js index a335f951..907f28e0 100644 --- a/static/js/pw.js +++ b/static/js/pw.js @@ -444,6 +444,13 @@ function serializeSVG(svgElement) { line.setAttribute("fill", style.fill); }); + svgElement.querySelectorAll("line.link_no_arrow").forEach(line => { + const style = getComputedStyle(line); + line.setAttribute("stroke", style.stroke); + line.setAttribute("stroke-width", style.strokeWidth); + line.setAttribute("fill", style.fill); + }); + const serializer = new XMLSerializer(); let svgString = serializer.serializeToString(svgElement); @@ -455,7 +462,26 @@ function serializeSVG(svgElement) { return svgString; } +function shrinkSVG(svgSelector) { + + const svg = d3.select(svgSelector); + const node = svg.node(); + + // Compute bounding box of everything inside the SVG + const bbox = node.getBBox(); + + const padding = 10; + svg.attr("viewBox", + `${bbox.x - padding} ${bbox.y - padding} ${bbox.width + 2 * padding} ${bbox.height + 2 * padding}` + ) + .attr("width", bbox.width + 2 * padding) + .attr("height", bbox.height + 2 * padding); + + return bbox; +} + function downloadSVG(svgElement, filename = 'chart.svg') { + shrinkSVG("#" + svgElement.id); const svgString = serializeSVG(svgElement); const blob = new Blob([svgString], {type: 'image/svg+xml;charset=utf-8'}); const url = URL.createObjectURL(blob); diff --git a/templates/objects/pathway.html b/templates/objects/pathway.html index 40f2d807..4e4cc27d 100644 --- a/templates/objects/pathway.html +++ b/templates/objects/pathway.html @@ -177,9 +177,6 @@
- {% if debug %} - - {% endif %} From d5ebb236221dbf483b36e023ece228605f5b4fca Mon Sep 17 00:00:00 2001 From: jebus Date: Thu, 16 Oct 2025 08:17:39 +1300 Subject: [PATCH 07/17] [Fix] AppDomain Leftovers (#161) Co-authored-by: Tim Lorsbach Reviewed-on: https://git.envipath.com/enviPath/enviPy/pulls/161 --- epdb/management/commands/localize_urls.py | 17 +++++++- epdb/views.py | 51 ++++++++++++++++++++--- static/js/pps.js | 6 +-- utilities/chem.py | 6 +++ 4 files changed, 70 insertions(+), 10 deletions(-) diff --git a/epdb/management/commands/localize_urls.py b/epdb/management/commands/localize_urls.py index 91afb0a6..cc0a3726 100644 --- a/epdb/management/commands/localize_urls.py +++ b/epdb/management/commands/localize_urls.py @@ -1,8 +1,10 @@ from django.apps import apps from django.core.management.base import BaseCommand -from django.db.models import F, Value -from django.db.models.functions import Replace +from django.db.models import F, Value, TextField, JSONField +from django.db.models.functions import Replace, Cast + +from epdb.models import EnviPathModel class Command(BaseCommand): @@ -49,3 +51,14 @@ class Command(BaseCommand): obj_cls.objects.update( url=Replace(F("url"), Value(options["old"]), Value(options["new"])) ) + if issubclass(obj_cls, EnviPathModel): + obj_cls.objects.update( + kv=Cast( + Replace( + Cast(F("kv"), output_field=TextField()), + Value(options["old"]), + Value(options["new"]), + ), + output_field=JSONField(), + ) + ) diff --git a/epdb/views.py b/epdb/views.py index dd13d21d..4844d3be 100644 --- a/epdb/views.py +++ b/epdb/views.py @@ -1454,12 +1454,20 @@ def package_rule(request, package_uuid, rule_uuid): logger.info( f"Rule {current_rule.uuid} returned multiple product sets on {smiles}, picking the first one." ) - - smirks = f"{stand_smiles}>>{'.'.join(sorted(res[0]))}" + # Some Rules are touching unrelated areas which might result in ~ indicating + # any bond (-, =, #). For drawing we need a concrete bond. -> use single bond + product_smiles = [x.replace("~", "-") for x in res[0]] + smirks = f"{stand_smiles}>>{'.'.join(sorted(product_smiles))}" # Usually the functional groups are a mapping of fg -> count # As we are doing it on the fly here fake a high count to ensure that its properly highlighted - educt_functional_groups = {x: 1000 for x in current_rule.reactants_smarts} - product_functional_groups = {x: 1000 for x in current_rule.products_smarts} + + if isinstance(current_rule, SimpleAmbitRule): + educt_functional_groups = {current_rule.reactants_smarts: 1000} + product_functional_groups = {current_rule.products_smarts: 1000} + else: + educt_functional_groups = {x: 1000 for x in current_rule.reactants_smarts} + product_functional_groups = {x: 1000 for x in current_rule.products_smarts} + return HttpResponse( IndigoUtils.smirks_to_svg( smirks, @@ -1993,9 +2001,42 @@ def package_pathway_node(request, package_uuid, pathway_uuid, node_uuid): if request.method == "GET": is_image_request = request.GET.get("image") + is_highlight_request = request.GET.get("highlight", False) + is_highlight_reactivity = request.GET.get("highlightReactivity", False) if is_image_request: if is_image_request == "svg": - svg_data = current_node.as_svg + # TODO optimize this chain + if is_highlight_request: + # User functional groups covered by the model training data + fgs = {} + if current_pathway.setting: + if current_pathway.setting.model: + if current_pathway.setting.model.app_domain: + fgs = current_pathway.setting.model.app_domain.functional_groups + + svg_data = IndigoUtils.mol_to_svg( + current_node.default_node_label.smiles, functional_groups=fgs + ) + elif is_highlight_reactivity: + # Use reactant smarts to show all reaction sites + # set a high count to obtain a strong color + ad_data = current_node.get_app_domain_assessment_data() + fgs = {} + for t in ad_data.get("assessment", {}).get("transformations", []): + r = Rule.objects.get(url=t["rule"]["url"]) + + if isinstance(r, SimpleAmbitRule): + fgs[r.reactants_smarts] = 1000 + else: + for sr in r.srs: + fgs[sr.reactants_smarts] = 1000 + + svg_data = IndigoUtils.mol_to_svg( + current_node.default_node_label.smiles, functional_groups=fgs + ) + else: + svg_data = current_node.as_svg + return HttpResponse(svg_data, content_type="image/svg+xml") context = get_base_context(request) diff --git a/static/js/pps.js b/static/js/pps.js index abc92695..c0829ad1 100644 --- a/static/js/pps.js +++ b/static/js/pps.js @@ -646,8 +646,8 @@ function handleAssessmentResponse(depict_url, data) { var reactivityCentersImgSrc = null; if (data['assessment']['node'] !== undefined) { - functionalGroupsImgSrc = ""; - reactivityCentersImgSrc = "" + functionalGroupsImgSrc = ""; + reactivityCentersImgSrc = "" } else { functionalGroupsImgSrc = ""; reactivityCentersImgSrc = "" @@ -784,4 +784,4 @@ function handleAssessmentResponse(depict_url, data) { $("#appDomainAssessmentResultTable").append(res); -} \ No newline at end of file +} diff --git a/utilities/chem.py b/utilities/chem.py index 6de46147..279de26f 100644 --- a/utilities/chem.py +++ b/utilities/chem.py @@ -729,6 +729,7 @@ class IndigoUtils(object): height: int = 0, educt_functional_groups: Dict[str, int] = None, product_functional_groups: Dict[str, int] = None, + debug: bool = False, ): if educt_functional_groups is None: educt_functional_groups = {} @@ -739,6 +740,11 @@ class IndigoUtils(object): i = Indigo() renderer = IndigoRenderer(i) + if debug: + i.setOption("render-atom-ids-visible", True) + i.setOption("render-bond-ids-visible", False) + i.setOption("render-atom-bond-ids-from-one", True) + i.setOption("render-output-format", "svg") i.setOption("render-coloring", True) i.setOption("render-image-size", width, height) From 376fd65785a5d652b19ce4f39ca3bd74eb446489 Mon Sep 17 00:00:00 2001 From: liambrydon Date: Thu, 16 Oct 2025 08:58:36 +1300 Subject: [PATCH 08/17] [Feature] ML model caching for reducing prediction overhead (#156) The caching is now finished. The cache is created in `settings.py` giving us the most flexibility for using it in the future. The cache is currently updated/accessed by `tasks.py/get_ml_model` which can be called from whatever task needs to access ml models in this way (currently, `predict` and `predict_simple`). This implementation currently caches all ml models including the relative reasoning. If we don't want this and only want to cache enviFormer, i can change it to that. However, I don't think there is a harm in having the other models be cached as well. Co-authored-by: Liam Brydon <62733830+MyCreativityOutlet@users.noreply.github.com> Reviewed-on: https://git.envipath.com/enviPath/enviPy/pulls/156 Co-authored-by: liambrydon Co-committed-by: liambrydon --- epdb/models.py | 8 +++--- epdb/tasks.py | 14 +++++++++-- tests/test_enviformer.py | 53 +++++++++++++++++++++++++++++++++++++++- 3 files changed, 69 insertions(+), 6 deletions(-) diff --git a/epdb/models.py b/epdb/models.py index 4b8f4198..a03fcb6d 100644 --- a/epdb/models.py +++ b/epdb/models.py @@ -3043,9 +3043,9 @@ class EnviFormer(PackageBasedModel): @cached_property def model(self): from enviformer import load - ckpt = os.path.join(s.MODEL_DIR, "enviformer", str(self.uuid), f"{self.uuid}.ckpt") - return load(device=s.ENVIFORMER_DEVICE, ckpt_path=ckpt) + mod = load(device=s.ENVIFORMER_DEVICE, ckpt_path=ckpt) + return mod def predict(self, smiles) -> List["PredictionResult"]: return self.predict_batch([smiles])[0] @@ -3059,8 +3059,10 @@ class EnviFormer(PackageBasedModel): for smiles in smiles_list ] logger.info(f"Submitting {canon_smiles} to {self.name}") + start = datetime.now() products_list = self.model.predict_batch(canon_smiles) - logger.info(f"Got results {products_list}") + end = datetime.now() + logger.info(f"Prediction took {(end - start).total_seconds():.2f} seconds. Got results {products_list}") results = [] for products in products_list: diff --git a/epdb/tasks.py b/epdb/tasks.py index aabaf8d1..b9845c86 100644 --- a/epdb/tasks.py +++ b/epdb/tasks.py @@ -1,12 +1,19 @@ import logging from typing import Optional - +from celery.utils.functional import LRUCache from celery import shared_task from epdb.models import Pathway, Node, EPModel, Setting from epdb.logic import SPathway logger = logging.getLogger(__name__) +ML_CACHE = LRUCache(3) # Cache the three most recent ML models to reduce load times. + + +def get_ml_model(model_pk: int): + if model_pk not in ML_CACHE: + ML_CACHE[model_pk] = EPModel.objects.get(id=model_pk) + return ML_CACHE[model_pk] @shared_task(queue="background") @@ -16,7 +23,7 @@ def mul(a, b): @shared_task(queue="predict") def predict_simple(model_pk: int, smiles: str): - mod = EPModel.objects.get(id=model_pk) + mod = get_ml_model(model_pk) res = mod.predict(smiles) return res @@ -51,6 +58,9 @@ def predict( ) -> Pathway: pw = Pathway.objects.get(id=pw_pk) setting = Setting.objects.get(id=pred_setting_pk) + # If the setting has a model add/restore it from the cache + if setting.model is not None: + setting.model = get_ml_model(setting.model.pk) pw.kv.update(**{"status": "running"}) pw.save() diff --git a/tests/test_enviformer.py b/tests/test_enviformer.py index 1a688cb1..b81ca2ca 100644 --- a/tests/test_enviformer.py +++ b/tests/test_enviformer.py @@ -1,7 +1,27 @@ +from collections import defaultdict +from datetime import datetime from tempfile import TemporaryDirectory from django.test import TestCase, tag from epdb.logic import PackageManager -from epdb.models import User, EnviFormer, Package +from epdb.models import User, EnviFormer, Package, Setting, Pathway +from epdb.tasks import predict_simple, predict + + +def measure_predict(mod, pathway_pk=None): + # Measure and return the prediction time + start = datetime.now() + if pathway_pk: + s = Setting() + s.model = mod + s.model_threshold = 0.2 + s.max_depth = 4 + s.max_nodes = 20 + s.save() + pred_result = predict.delay(pathway_pk, s.pk, limit=s.max_depth) + else: + pred_result = predict_simple.delay(mod.pk, "C1=CC=C(CSCC2=CC=CC=C2)C=C1") + _ = pred_result.get() + return round((datetime.now() - start).total_seconds(), 2) @tag("slow") @@ -33,3 +53,34 @@ class EnviFormerTest(TestCase): mod.evaluate_model() mod.predict("CCN(CC)C(=O)C1=CC(=CC=C1)C") + + def test_predict_runtime(self): + with TemporaryDirectory() as tmpdir: + with self.settings(MODEL_DIR=tmpdir): + threshold = float(0.5) + data_package_objs = [self.BBD_SUBSET] + eval_packages_objs = [self.BBD_SUBSET] + mods = [] + for _ in range(4): + mod = EnviFormer.create( + self.package, data_package_objs, eval_packages_objs, threshold=threshold + ) + mod.build_dataset() + mod.build_model() + mods.append(mod) + + # Test prediction time drops after first prediction + times = [measure_predict(mods[0]) for _ in range(5)] + print(f"First prediction took {times[0]} seconds, subsequent ones took {times[1:]}") + + # Test pathway prediction + times = [measure_predict(mods[1], self.BBD_SUBSET.pathways[0].pk) for _ in range(5)] + print(f"First pathway prediction took {times[0]} seconds, subsequent ones took {times[1:]}") + + # Test eviction by performing three prediction with every model, twice. + times = defaultdict(list) + for _ in range(2): # Eviction should cause the second iteration here to have to reload the models + for mod in mods: + for _ in range(3): + times[mod.pk].append(measure_predict(mod)) + print(times) From 819a94aced7cb65b089d508fac7f8aba1bbab1a4 Mon Sep 17 00:00:00 2001 From: jebus Date: Wed, 22 Oct 2025 01:13:06 +1300 Subject: [PATCH 09/17] [Fix] Catch Exception for Adding Structures / Show PubChem Substances (#168) Fixes #163 Fixes #165 Co-authored-by: Tim Lorsbach Reviewed-on: https://git.envipath.com/enviPath/enviPy/pulls/168 --- epdb/models.py | 13 ++++++++----- epdb/views.py | 11 ++++++++++- templates/objects/compound.html | 20 ++++++++++++++++++-- 3 files changed, 36 insertions(+), 8 deletions(-) diff --git a/epdb/models.py b/epdb/models.py index a03fcb6d..998503e2 100644 --- a/epdb/models.py +++ b/epdb/models.py @@ -310,7 +310,7 @@ class ExternalDatabase(TimeStampedModel): }, { "database": ExternalDatabase.objects.get(name="ChEBI"), - "placeholder": "ChEBI ID without prefix e.g. 12345", + "placeholder": "ChEBI ID without prefix e.g. 10576", }, ], "structure": [ @@ -328,7 +328,7 @@ class ExternalDatabase(TimeStampedModel): }, { "database": ExternalDatabase.objects.get(name="ChEBI"), - "placeholder": "ChEBI ID without prefix e.g. 12345", + "placeholder": "ChEBI ID without prefix e.g. 10576", }, ], "reaction": [ @@ -342,7 +342,7 @@ class ExternalDatabase(TimeStampedModel): }, { "database": ExternalDatabase.objects.get(name="UniProt"), - "placeholder": "Query ID for UniPro e.g. rhea:12345", + "placeholder": "Query ID for UniProt e.g. rhea:12345", }, ], } @@ -477,7 +477,7 @@ class ChemicalIdentifierMixin(ExternalIdentifierMixin): return self.add_external_identifier("CAS", cas_number) def get_pubchem_identifiers(self): - return self.get_external_identifier("PubChem Compound") or self.get_external_identifier( + return self.get_external_identifier("PubChem Compound") | self.get_external_identifier( "PubChem Substance" ) @@ -3043,6 +3043,7 @@ class EnviFormer(PackageBasedModel): @cached_property def model(self): from enviformer import load + ckpt = os.path.join(s.MODEL_DIR, "enviformer", str(self.uuid), f"{self.uuid}.ckpt") mod = load(device=s.ENVIFORMER_DEVICE, ckpt_path=ckpt) return mod @@ -3062,7 +3063,9 @@ class EnviFormer(PackageBasedModel): start = datetime.now() products_list = self.model.predict_batch(canon_smiles) end = datetime.now() - logger.info(f"Prediction took {(end - start).total_seconds():.2f} seconds. Got results {products_list}") + logger.info( + f"Prediction took {(end - start).total_seconds():.2f} seconds. Got results {products_list}" + ) results = [] for products in products_list: diff --git a/epdb/views.py b/epdb/views.py index 4844d3be..1f73027a 100644 --- a/epdb/views.py +++ b/epdb/views.py @@ -1251,7 +1251,16 @@ def package_compound_structures(request, package_uuid, compound_uuid): structure_smiles = request.POST.get("structure-smiles") structure_description = request.POST.get("structure-description") - cs = current_compound.add_structure(structure_smiles, structure_name, structure_description) + try: + cs = current_compound.add_structure( + structure_smiles, structure_name, structure_description + ) + except ValueError: + return error( + request, + "Adding structure failed!", + "The structure could not be added as normalized structures don't match!", + ) return redirect(cs.url) diff --git a/templates/objects/compound.html b/templates/objects/compound.html index 98083ca6..90e3e1db 100644 --- a/templates/objects/compound.html +++ b/templates/objects/compound.html @@ -183,7 +183,7 @@
- {% if compound.get_pubchem_identifiers %} + {% if compound.get_pubchem_compound_identifiers %}

@@ -193,12 +193,28 @@

- {% for eid in compound.get_pubchem_identifiers %} + {% for eid in compound.get_pubchem_compound_identifiers %} CID{{ eid.identifier_value }} {% endfor %}
{% endif %} + {% if compound.get_pubchem_substance_identifiers %} + +
+ {% for eid in compound.get_pubchem_substance_identifiers %} + SID{{ eid.identifier_value }} + {% endfor %} +
+ {% endif %} {% if compound.get_chebi_identifiers %}
From 8fda2577ee1244d0cfa11795ffc529bcb2dd6aa4 Mon Sep 17 00:00:00 2001 From: jebus Date: Wed, 22 Oct 2025 10:39:22 +1300 Subject: [PATCH 10/17] [Feature] Dump/Restore of enviFormer Models (#170) Dump: `./manage.py dump_enviformer d544303c-a1ca-439d-b036-5e3413ce4a48 --output test.tar.gz` Restore: `./manage.py load_enviformer test.tar.gz 1062eb09-5ec7-4bdd-a8f2-ae0252eb4b06` Co-authored-by: Tim Lorsbach Reviewed-on: https://git.envipath.com/enviPath/enviPy/pulls/170 --- epdb/management/commands/dump_enviformer.py | 59 +++++++++++++++ epdb/management/commands/load_enviformer.py | 81 +++++++++++++++++++++ 2 files changed, 140 insertions(+) create mode 100644 epdb/management/commands/dump_enviformer.py create mode 100644 epdb/management/commands/load_enviformer.py diff --git a/epdb/management/commands/dump_enviformer.py b/epdb/management/commands/dump_enviformer.py new file mode 100644 index 00000000..e333248a --- /dev/null +++ b/epdb/management/commands/dump_enviformer.py @@ -0,0 +1,59 @@ +import json +import os +import tarfile +from tempfile import TemporaryDirectory + +from django.conf import settings as s +from django.core.management.base import BaseCommand +from django.db import transaction + +from epdb.models import EnviFormer + + +class Command(BaseCommand): + def add_arguments(self, parser): + parser.add_argument( + "model", + type=str, + help="Model UUID of the Model to Dump", + ) + parser.add_argument("--output", type=str) + + def package_dict_and_folder(self, dict_data, folder_path, output_path): + with TemporaryDirectory() as tmpdir: + dict_filename = os.path.join(tmpdir, "data.json") + + with open(dict_filename, "w", encoding="utf-8") as f: + json.dump(dict_data, f, indent=2) + + with tarfile.open(output_path, "w:gz") as tar: + tar.add(dict_filename, arcname="data.json") + tar.add(folder_path, arcname=os.path.basename(folder_path)) + + os.remove(dict_filename) + + @transaction.atomic + def handle(self, *args, **options): + output = options["output"] + + if os.path.exists(output): + raise ValueError(f"Output file {output} already exists") + + model = EnviFormer.objects.get(uuid=options["model"]) + + data = { + "uuid": str(model.uuid), + "name": model.name, + "description": model.description, + "kv": model.kv, + "data_packages_uuids": [str(p.uuid) for p in model.data_packages.all()], + "eval_packages_uuids": [str(p.uuid) for p in model.data_packages.all()], + "threshold": model.threshold, + "eval_results": model.eval_results, + "multigen_eval": model.multigen_eval, + "model_status": model.model_status, + } + + model_folder = os.path.join(s.MODEL_DIR, "enviformer", str(model.uuid)) + + self.package_dict_and_folder(data, model_folder, output) diff --git a/epdb/management/commands/load_enviformer.py b/epdb/management/commands/load_enviformer.py new file mode 100644 index 00000000..b2f9c3e3 --- /dev/null +++ b/epdb/management/commands/load_enviformer.py @@ -0,0 +1,81 @@ +import json +import os +import shutil +import tarfile +from tempfile import TemporaryDirectory + +from django.conf import settings as s +from django.core.management.base import BaseCommand +from django.db import transaction + +from epdb.models import EnviFormer, Package + + +class Command(BaseCommand): + def add_arguments(self, parser): + parser.add_argument( + "input", + type=str, + help=".tar.gz file containing the Model dump.", + ) + parser.add_argument( + "package", + type=str, + help="Package UUID where the Model should be loaded to.", + ) + + def read_dict_and_folder_from_archive(self, archive_path, extract_to="extracted_folder"): + with tarfile.open(archive_path, "r:gz") as tar: + tar.extractall(extract_to) + + dict_path = os.path.join(extract_to, "data.json") + + if not os.path.exists(dict_path): + raise FileNotFoundError("data.json not found in the archive.") + + with open(dict_path, "r", encoding="utf-8") as f: + data_dict = json.load(f) + + extracted_items = os.listdir(extract_to) + folders = [item for item in extracted_items if item != "data.json"] + folder_path = os.path.join(extract_to, folders[0]) if folders else None + + return data_dict, folder_path + + @transaction.atomic + def handle(self, *args, **options): + if not os.path.exists(options["input"]): + raise ValueError(f"Input file {options['input']} does not exist.") + + target_package = Package.objects.get(uuid=options["package"]) + + with TemporaryDirectory() as tmpdir: + data, folder = self.read_dict_and_folder_from_archive(options["input"], tmpdir) + + model = EnviFormer() + model.package = target_package + # model.uuid = data["uuid"] + model.name = data["name"] + model.description = data["description"] + model.kv = data["kv"] + model.threshold = float(data["threshold"]) + model.eval_results = data["eval_results"] + model.multigen_eval = data["multigen_eval"] + model.model_status = data["model_status"] + model.save() + + for p_uuid in data["data_packages_uuids"]: + p = Package.objects.get(uuid=p_uuid) + model.data_packages.add(p) + + for p_uuid in data["eval_packages_uuids"]: + p = Package.objects.get(uuid=p_uuid) + model.eval_packages.add(p) + + target_folder = os.path.join(s.MODEL_DIR, "enviformer", str(model.uuid)) + + shutil.copytree(folder, target_folder) + os.rename( + os.path.join(s.MODEL_DIR, "enviformer", str(model.uuid), f"{data['uuid']}.ckpt"), + os.path.join(s.MODEL_DIR, "enviformer", str(model.uuid), f"{model.uuid}.ckpt"), + ) From 551cfc77684b67a295e37cb243cfe555ed39ad50 Mon Sep 17 00:00:00 2001 From: liambrydon Date: Thu, 23 Oct 2025 06:20:22 +1300 Subject: [PATCH 11/17] [Enhancement] Create ML Models (#173) ## Changes - Ability to change the threshold from a command line argument. - Names of data packages included in model name - Names of data, rule and eval packages included in the model description - EnviFormer models are now viewable on the admin site - Ignore CO2 for training and evaluating EnviFormer Co-authored-by: Liam Brydon <62733830+MyCreativityOutlet@users.noreply.github.com> Reviewed-on: https://git.envipath.com/enviPath/enviPy/pulls/173 Reviewed-by: jebus Co-authored-by: liambrydon Co-committed-by: liambrydon --- epdb/admin.py | 6 ++++ epdb/management/commands/create_ml_models.py | 36 ++++++++++++++------ epdb/models.py | 8 +++-- 3 files changed, 36 insertions(+), 14 deletions(-) diff --git a/epdb/admin.py b/epdb/admin.py index fefcdc32..1f251cc1 100644 --- a/epdb/admin.py +++ b/epdb/admin.py @@ -7,6 +7,7 @@ from .models import ( GroupPackagePermission, Package, MLRelativeReasoning, + EnviFormer, Compound, CompoundStructure, SimpleAmbitRule, @@ -50,6 +51,10 @@ class MLRelativeReasoningAdmin(EPAdmin): pass +class EnviFormerAdmin(EPAdmin): + pass + + class CompoundAdmin(EPAdmin): pass @@ -104,6 +109,7 @@ admin.site.register(Group, GroupAdmin) admin.site.register(GroupPackagePermission, GroupPackagePermissionAdmin) admin.site.register(Package, PackageAdmin) admin.site.register(MLRelativeReasoning, MLRelativeReasoningAdmin) +admin.site.register(EnviFormer, EnviFormerAdmin) admin.site.register(Compound, CompoundAdmin) admin.site.register(CompoundStructure, CompoundStructureAdmin) admin.site.register(SimpleAmbitRule, SimpleAmbitRuleAdmin) diff --git a/epdb/management/commands/create_ml_models.py b/epdb/management/commands/create_ml_models.py index 8cf3fd55..6c59141d 100644 --- a/epdb/management/commands/create_ml_models.py +++ b/epdb/management/commands/create_ml_models.py @@ -7,10 +7,11 @@ from epdb.models import MLRelativeReasoning, EnviFormer, Package class Command(BaseCommand): """This command can be run with - `python manage.py create_ml_models [model_names] -d [data_packages] OPTIONAL: -e [eval_packages]` - For example, to train both EnviFormer and MLRelativeReasoning on BBD and SOIL and evaluate them on SLUDGE - the below command would be used: - `python manage.py create_ml_models enviformer mlrr -d bbd soil -e sludge + `python manage.py create_ml_models [model_names] -d [data_packages] FOR MLRR ONLY: -r [rule_packages] + OPTIONAL: -e [eval_packages] -t threshold` + For example, to train both EnviFormer and MLRelativeReasoning on BBD and SOIL and evaluate them on SLUDGE with a + threshold of 0.6, the below command would be used: + `python manage.py create_ml_models enviformer mlrr -d bbd soil -e sludge -t 0.6 """ def add_arguments(self, parser): @@ -34,6 +35,13 @@ class Command(BaseCommand): help="Rule Packages mandatory for MLRR", default=[], ) + parser.add_argument( + "-t", + "--threshold", + type=float, + help="Model prediction threshold", + default=0.5, + ) @transaction.atomic def handle(self, *args, **options): @@ -67,7 +75,11 @@ class Command(BaseCommand): return packages # Iteratively create models in options["model_names"] - print(f"Creating models: {options['model_names']}") + print(f"Creating models: {options['model_names']}\n" + f"Data packages: {options['data_packages']}\n" + f"Rule Packages (only for MLRR): {options['rule_packages']}\n" + f"Eval Packages: {options['eval_packages']}\n" + f"Threshold: {options['threshold']:.2f}") data_packages = decode_packages(options["data_packages"]) eval_packages = decode_packages(options["eval_packages"]) rule_packages = decode_packages(options["rule_packages"]) @@ -78,9 +90,10 @@ class Command(BaseCommand): pack, data_packages=data_packages, eval_packages=eval_packages, - threshold=0.5, - name="EnviFormer - T0.5", - description="EnviFormer transformer", + threshold=options['threshold'], + name=f"EnviFormer - {', '.join(options['data_packages'])} - T{options['threshold']:.2f}", + description=f"EnviFormer transformer trained on {options['data_packages']} " + f"evaluated on {options['eval_packages']}.", ) elif model_name == "mlrr": model = MLRelativeReasoning.create( @@ -88,9 +101,10 @@ class Command(BaseCommand): rule_packages=rule_packages, data_packages=data_packages, eval_packages=eval_packages, - threshold=0.5, - name="ECC - BBD - T0.5", - description="ML Relative Reasoning", + threshold=options['threshold'], + name=f"ECC - {', '.join(options['data_packages'])} - T{options['threshold']:.2f}", + description=f"ML Relative Reasoning trained on {options['data_packages']} with rules from " + f"{options['rule_packages']} and evaluated on {options['eval_packages']}.", ) else: raise ValueError(f"Cannot create model of type {model_name}, unknown model type") diff --git a/epdb/models.py b/epdb/models.py index 998503e2..33a0b89b 100644 --- a/epdb/models.py +++ b/epdb/models.py @@ -3092,6 +3092,7 @@ class EnviFormer(PackageBasedModel): start = datetime.now() # Standardise reactions for the training data, EnviFormer ignores stereochemistry currently + co2 = {"C(=O)=O", "O=C=O"} ds = [] for reaction in self._get_reactions(): educts = ".".join( @@ -3106,7 +3107,8 @@ class EnviFormer(PackageBasedModel): for smile in reaction.products.all() ] ) - ds.append(f"{educts}>>{products}") + if products not in co2: + ds.append(f"{educts}>>{products}") end = datetime.now() logger.debug(f"build_dataset took {(end - start).total_seconds()} seconds") @@ -3302,7 +3304,7 @@ class EnviFormer(PackageBasedModel): ds = self.load_dataset() n_splits = 20 - shuff = ShuffleSplit(n_splits=n_splits, test_size=0.25, random_state=42) + shuff = ShuffleSplit(n_splits=n_splits, test_size=0.1, random_state=42) # Single gen eval is done in one loop of train then evaluate rather than storing all n_splits trained models # this helps reduce the memory footprint. @@ -3370,7 +3372,7 @@ class EnviFormer(PackageBasedModel): # Compute splits of the collected pathway and evaluate. Like single gen we train and evaluate in each # iteration instead of storing all trained models. for split_id, (train, test) in enumerate( - ShuffleSplit(n_splits=n_splits, test_size=0.25, random_state=42).split(pathways) + ShuffleSplit(n_splits=n_splits, test_size=0.1, random_state=42).split(pathways) ): train_pathways = [pathways[i] for i in train] test_pathways = [pathways[i] for i in test] From a952c08469700542db201ab37a5cd1c921369e06 Mon Sep 17 00:00:00 2001 From: jebus Date: Mon, 27 Oct 2025 22:34:05 +1300 Subject: [PATCH 12/17] [Feature] Basic logging of Jobs, Model Evaluation (#169) Co-authored-by: Tim Lorsbach Reviewed-on: https://git.envipath.com/enviPath/enviPy/pulls/169 --- epdb/management/commands/create_ml_models.py | 2 +- epdb/management/commands/update_job_logs.py | 38 +++ epdb/models.py | 85 ++++-- epdb/tasks.py | 121 ++++++++- epdb/templatetags/envipytags.py | 13 + epdb/urls.py | 1 + epdb/views.py | 163 +++++++---- templates/collections/joblog.html | 71 +++++ .../modals/collections/new_model_modal.html | 256 +++++++++--------- .../modals/objects/evaluate_model_modal.html | 21 +- templates/objects/model.html | 2 +- tests/test_enviformer.py | 14 +- tests/test_model.py | 5 +- tests/views/test_model_views.py | 2 +- tests/views/test_pathway_views.py | 2 +- 15 files changed, 556 insertions(+), 240 deletions(-) create mode 100644 epdb/management/commands/update_job_logs.py create mode 100644 templates/collections/joblog.html diff --git a/epdb/management/commands/create_ml_models.py b/epdb/management/commands/create_ml_models.py index 6c59141d..89fbc0ec 100644 --- a/epdb/management/commands/create_ml_models.py +++ b/epdb/management/commands/create_ml_models.py @@ -114,6 +114,6 @@ class Command(BaseCommand): print(f"Training {model_name}") model.build_model() print(f"Evaluating {model_name}") - model.evaluate_model() + model.evaluate_model(False, eval_packages=eval_packages) print(f"Saving {model_name}") model.save() diff --git a/epdb/management/commands/update_job_logs.py b/epdb/management/commands/update_job_logs.py new file mode 100644 index 00000000..a5b17cfa --- /dev/null +++ b/epdb/management/commands/update_job_logs.py @@ -0,0 +1,38 @@ +from datetime import date, timedelta + +from django.core.management.base import BaseCommand +from django.db import transaction + +from epdb.models import JobLog + + +class Command(BaseCommand): + def add_arguments(self, parser): + parser.add_argument( + "--cleanup", + type=int, + default=None, + help="Remove all logs older than this number of days. Default is None, which does not remove any logs.", + ) + + @transaction.atomic + def handle(self, *args, **options): + if options["cleanup"] is not None: + cleanup_dt = date.today() - timedelta(days=options["cleanup"]) + print(JobLog.objects.filter(created__lt=cleanup_dt).delete()) + + logs = JobLog.objects.filter(status="INITIAL") + print(f"Found {logs.count()} logs to update") + updated = 0 + for log in logs: + res = log.check_for_update() + if res: + updated += 1 + + print(f"Updated {updated} logs") + + from django.db.models import Count + + qs = JobLog.objects.values("status").annotate(total=Count("status")) + for r in qs: + print(r["status"], r["total"]) diff --git a/epdb/models.py b/epdb/models.py index 33a0b89b..324fe301 100644 --- a/epdb/models.py +++ b/epdb/models.py @@ -2225,10 +2225,18 @@ class PackageBasedModel(EPModel): self.model_status = self.BUILT_NOT_EVALUATED self.save() - def evaluate_model(self): + def evaluate_model(self, multigen: bool, eval_packages: List["Package"] = None): if self.model_status != self.BUILT_NOT_EVALUATED: raise ValueError(f"Can't evaluate a model in state {self.model_status}!") + if multigen: + self.multigen_eval = multigen + self.save() + + if eval_packages is not None: + for p in eval_packages: + self.eval_packages.add(p) + self.model_status = self.EVALUATING self.save() @@ -2525,7 +2533,6 @@ class RuleBasedRelativeReasoning(PackageBasedModel): package: "Package", rule_packages: List["Package"], data_packages: List["Package"], - eval_packages: List["Package"], threshold: float = 0.5, min_count: int = 10, max_count: int = 0, @@ -2574,10 +2581,6 @@ class RuleBasedRelativeReasoning(PackageBasedModel): for p in rule_packages: rbrr.data_packages.add(p) - if eval_packages: - for p in eval_packages: - rbrr.eval_packages.add(p) - rbrr.save() return rbrr @@ -2632,7 +2635,6 @@ class MLRelativeReasoning(PackageBasedModel): package: "Package", rule_packages: List["Package"], data_packages: List["Package"], - eval_packages: List["Package"], threshold: float = 0.5, name: "str" = None, description: str = None, @@ -2672,10 +2674,6 @@ class MLRelativeReasoning(PackageBasedModel): for p in rule_packages: mlrr.data_packages.add(p) - if eval_packages: - for p in eval_packages: - mlrr.eval_packages.add(p) - if build_app_domain: ad = ApplicabilityDomain.create( mlrr, @@ -2995,7 +2993,6 @@ class EnviFormer(PackageBasedModel): def create( package: "Package", data_packages: List["Package"], - eval_packages: List["Package"], threshold: float = 0.5, name: "str" = None, description: str = None, @@ -3028,10 +3025,6 @@ class EnviFormer(PackageBasedModel): for p in data_packages: mod.data_packages.add(p) - if eval_packages: - for p in eval_packages: - mod.eval_packages.add(p) - # if build_app_domain: # ad = ApplicabilityDomain.create(mod, app_domain_num_neighbours, app_domain_reliability_threshold, # app_domain_local_compatibility_threshold) @@ -3144,10 +3137,18 @@ class EnviFormer(PackageBasedModel): args = {"clz": "EnviFormer"} return args - def evaluate_model(self): + def evaluate_model(self, multigen: bool, eval_packages: List["Package"] = None): if self.model_status != self.BUILT_NOT_EVALUATED: raise ValueError(f"Can't evaluate a model in state {self.model_status}!") + if multigen: + self.multigen_eval = multigen + self.save() + + if eval_packages is not None: + for p in eval_packages: + self.eval_packages.add(p) + self.model_status = self.EVALUATING self.save() @@ -3671,3 +3672,53 @@ class Setting(EnviPathModel): self.public = True self.global_default = True self.save() + + +class JobLogStatus(models.TextChoices): + INITIAL = "INITIAL", "Initial" + SUCCESS = "SUCCESS", "Success" + FAILURE = "FAILURE", "Failure" + REVOKED = "REVOKED", "Revoked" + IGNORED = "IGNORED", "Ignored" + + +class JobLog(TimeStampedModel): + user = models.ForeignKey("epdb.User", models.CASCADE) + task_id = models.UUIDField(unique=True) + job_name = models.TextField(null=False, blank=False) + status = models.CharField( + max_length=20, + choices=JobLogStatus.choices, + default=JobLogStatus.INITIAL, + ) + + done_at = models.DateTimeField(null=True, blank=True, default=None) + task_result = models.TextField(null=True, blank=True, default=None) + + def check_for_update(self): + async_res = self.get_result() + new_status = async_res.state + + TERMINAL_STATES = [ + "SUCCESS", + "FAILURE", + "REVOKED", + "IGNORED", + ] + + if new_status != self.status and new_status in TERMINAL_STATES: + self.status = new_status + self.done_at = async_res.date_done + + if new_status == "SUCCESS": + self.task_result = async_res.result + + self.save() + + return True + return False + + def get_result(self): + from celery.result import AsyncResult + + return AsyncResult(str(self.task_id)) diff --git a/epdb/tasks.py b/epdb/tasks.py index b9845c86..b6f4e6b0 100644 --- a/epdb/tasks.py +++ b/epdb/tasks.py @@ -1,10 +1,13 @@ import logging -from typing import Optional -from celery.utils.functional import LRUCache -from celery import shared_task -from epdb.models import Pathway, Node, EPModel, Setting -from epdb.logic import SPathway +from datetime import datetime +from typing import Callable, Optional +from uuid import uuid4 +from celery import shared_task +from celery.utils.functional import LRUCache + +from epdb.logic import SPathway +from epdb.models import EPModel, JobLog, Node, Package, Pathway, Setting, User logger = logging.getLogger(__name__) ML_CACHE = LRUCache(3) # Cache the three most recent ML models to reduce load times. @@ -16,6 +19,40 @@ def get_ml_model(model_pk: int): return ML_CACHE[model_pk] +def dispatch_eager(user: "User", job: Callable, *args, **kwargs): + try: + x = job(*args, **kwargs) + log = JobLog() + log.user = user + log.task_id = uuid4() + log.job_name = job.__name__ + log.status = "SUCCESS" + log.done_at = datetime.now() + log.task_result = str(x) if x else None + log.save() + + return x + except Exception as e: + logger.exception(e) + raise e + + +def dispatch(user: "User", job: Callable, *args, **kwargs): + try: + x = job.delay(*args, **kwargs) + log = JobLog() + log.user = user + log.task_id = x.task_id + log.job_name = job.__name__ + log.status = "INITIAL" + log.save() + + return x.result + except Exception as e: + logger.exception(e) + raise e + + @shared_task(queue="background") def mul(a, b): return a * b @@ -33,17 +70,55 @@ def send_registration_mail(user_pk: int): pass -@shared_task(queue="model") -def build_model(model_pk: int): +@shared_task(bind=True, queue="model") +def build_model(self, model_pk: int): mod = EPModel.objects.get(id=model_pk) - mod.build_dataset() - mod.build_model() + + if JobLog.objects.filter(task_id=self.request.id).exists(): + JobLog.objects.filter(task_id=self.request.id).update(status="RUNNING", task_result=mod.url) + + try: + mod.build_dataset() + mod.build_model() + except Exception as e: + if JobLog.objects.filter(task_id=self.request.id).exists(): + JobLog.objects.filter(task_id=self.request.id).update( + status="FAILED", task_result=mod.url + ) + + raise e + + if JobLog.objects.filter(task_id=self.request.id).exists(): + JobLog.objects.filter(task_id=self.request.id).update(status="SUCCESS", task_result=mod.url) + + return mod.url -@shared_task(queue="model") -def evaluate_model(model_pk: int): +@shared_task(bind=True, queue="model") +def evaluate_model(self, model_pk: int, multigen: bool, package_pks: Optional[list] = None): + packages = None + + if package_pks: + packages = Package.objects.filter(pk__in=package_pks) + mod = EPModel.objects.get(id=model_pk) - mod.evaluate_model() + if JobLog.objects.filter(task_id=self.request.id).exists(): + JobLog.objects.filter(task_id=self.request.id).update(status="RUNNING", task_result=mod.url) + + try: + mod.evaluate_model(multigen, eval_packages=packages) + except Exception as e: + if JobLog.objects.filter(task_id=self.request.id).exists(): + JobLog.objects.filter(task_id=self.request.id).update( + status="FAILED", task_result=mod.url + ) + + raise e + + if JobLog.objects.filter(task_id=self.request.id).exists(): + JobLog.objects.filter(task_id=self.request.id).update(status="SUCCESS", task_result=mod.url) + + return mod.url @shared_task(queue="model") @@ -52,9 +127,13 @@ def retrain(model_pk: int): mod.retrain() -@shared_task(queue="predict") +@shared_task(bind=True, queue="predict") def predict( - pw_pk: int, pred_setting_pk: int, limit: Optional[int] = None, node_pk: Optional[int] = None + self, + pw_pk: int, + pred_setting_pk: int, + limit: Optional[int] = None, + node_pk: Optional[int] = None, ) -> Pathway: pw = Pathway.objects.get(id=pw_pk) setting = Setting.objects.get(id=pred_setting_pk) @@ -65,6 +144,9 @@ def predict( pw.kv.update(**{"status": "running"}) pw.save() + if JobLog.objects.filter(task_id=self.request.id).exists(): + JobLog.objects.filter(task_id=self.request.id).update(status="RUNNING", task_result=pw.url) + try: # regular prediction if limit is not None: @@ -89,7 +171,18 @@ def predict( except Exception as e: pw.kv.update({"status": "failed"}) pw.save() + + if JobLog.objects.filter(task_id=self.request.id).exists(): + JobLog.objects.filter(task_id=self.request.id).update( + status="FAILED", task_result=pw.url + ) + raise e pw.kv.update(**{"status": "completed"}) pw.save() + + if JobLog.objects.filter(task_id=self.request.id).exists(): + JobLog.objects.filter(task_id=self.request.id).update(status="SUCCESS", task_result=pw.url) + + return pw.url diff --git a/epdb/templatetags/envipytags.py b/epdb/templatetags/envipytags.py index c8c92fef..6c250e63 100644 --- a/epdb/templatetags/envipytags.py +++ b/epdb/templatetags/envipytags.py @@ -1,8 +1,21 @@ from django import template +from pydantic import AnyHttpUrl, ValidationError +from pydantic.type_adapter import TypeAdapter register = template.Library() +url_adapter = TypeAdapter(AnyHttpUrl) + @register.filter def classname(obj): return obj.__class__.__name__ + + +@register.filter +def is_url(value): + try: + url_adapter.validate_python(value) + return True + except ValidationError: + return False diff --git a/epdb/urls.py b/epdb/urls.py index 391a2f32..25e18680 100644 --- a/epdb/urls.py +++ b/epdb/urls.py @@ -190,6 +190,7 @@ urlpatterns = [ re_path(r"^indigo/dearomatize$", v.dearomatize, name="indigo_dearomatize"), re_path(r"^indigo/layout$", v.layout, name="indigo_layout"), re_path(r"^depict$", v.depict, name="depict"), + re_path(r"^jobs", v.jobs, name="jobs"), # OAuth Stuff path("o/userinfo/", v.userinfo, name="oauth_userinfo"), ] diff --git a/epdb/views.py b/epdb/views.py index 1f73027a..f2fd8c74 100644 --- a/epdb/views.py +++ b/epdb/views.py @@ -47,6 +47,7 @@ from .models import ( ExternalDatabase, ExternalIdentifier, EnzymeLink, + JobLog, ) logger = logging.getLogger(__name__) @@ -754,8 +755,8 @@ def package_models(request, package_uuid): context["unreviewed_objects"] = unreviewed_model_qs context["model_types"] = { - "ML Relative Reasoning": "ml-relative-reasoning", - "Rule Based Relative Reasoning": "rule-based-relative-reasoning", + "ML Relative Reasoning": "mlrr", + "Rule Based Relative Reasoning": "rbrr", } if s.FLAGS.get("ENVIFORMER", False): @@ -775,69 +776,67 @@ def package_models(request, package_uuid): model_type = request.POST.get("model-type") + # Generic fields for ML and Rule Based + rule_packages = request.POST.getlist("model-rule-packages") + data_packages = request.POST.getlist("model-data-packages") + + # Generic params + params = { + "package": current_package, + "name": name, + "description": description, + "data_packages": [ + PackageManager.get_package_by_url(current_user, p) for p in data_packages + ], + } + if model_type == "enviformer": - threshold = float(request.POST.get(f"{model_type}-threshold", 0.5)) + threshold = float(request.POST.get("model-threshold", 0.5)) + params["threshold"] = threshold - mod = EnviFormer.create(current_package, name, description, threshold) + mod = EnviFormer.create(**params) + elif model_type == "mlrr": + # ML Specific + threshold = float(request.POST.get("model-threshold", 0.5)) + # TODO handle additional fingerprinter + # fingerprinter = request.POST.get("model-fingerprinter") - elif model_type == "ml-relative-reasoning" or model_type == "rule-based-relative-reasoning": - # Generic fields for ML and Rule Based - rule_packages = request.POST.getlist("package-based-relative-reasoning-rule-packages") - data_packages = request.POST.getlist("package-based-relative-reasoning-data-packages") - eval_packages = request.POST.getlist( - "package-based-relative-reasoning-evaluation-packages", [] - ) + params["rule_packages"] = [ + PackageManager.get_package_by_url(current_user, p) for p in rule_packages + ] - # Generic params - params = { - "package": current_package, - "name": name, - "description": description, - "rule_packages": [ - PackageManager.get_package_by_url(current_user, p) for p in rule_packages - ], - "data_packages": [ - PackageManager.get_package_by_url(current_user, p) for p in data_packages - ], - "eval_packages": [ - PackageManager.get_package_by_url(current_user, p) for p in eval_packages - ], - } + # App Domain related parameters + build_ad = request.POST.get("build-app-domain", False) == "on" + num_neighbors = request.POST.get("num-neighbors", 5) + reliability_threshold = request.POST.get("reliability-threshold", 0.5) + local_compatibility_threshold = request.POST.get("local-compatibility-threshold", 0.5) - if model_type == "ml-relative-reasoning": - # ML Specific - threshold = float(request.POST.get(f"{model_type}-threshold", 0.5)) - # TODO handle additional fingerprinter - # fingerprinter = request.POST.get(f"{model_type}-fingerprinter") + params["threshold"] = threshold + # params['fingerprinter'] = fingerprinter + params["build_app_domain"] = build_ad + params["app_domain_num_neighbours"] = num_neighbors + params["app_domain_reliability_threshold"] = reliability_threshold + params["app_domain_local_compatibility_threshold"] = local_compatibility_threshold - # App Domain related parameters - build_ad = request.POST.get("build-app-domain", False) == "on" - num_neighbors = request.POST.get("num-neighbors", 5) - reliability_threshold = request.POST.get("reliability-threshold", 0.5) - local_compatibility_threshold = request.POST.get( - "local-compatibility-threshold", 0.5 - ) + mod = MLRelativeReasoning.create(**params) + elif model_type == "rbrr": + params["rule_packages"] = [ + PackageManager.get_package_by_url(current_user, p) for p in rule_packages + ] - params["threshold"] = threshold - # params['fingerprinter'] = fingerprinter - params["build_app_domain"] = build_ad - params["app_domain_num_neighbours"] = num_neighbors - params["app_domain_reliability_threshold"] = reliability_threshold - params["app_domain_local_compatibility_threshold"] = local_compatibility_threshold - - mod = MLRelativeReasoning.create(**params) - else: - mod = RuleBasedRelativeReasoning.create(**params) - - from .tasks import build_model - - build_model.delay(mod.pk) + mod = RuleBasedRelativeReasoning.create(**params) + elif s.FLAGS.get("PLUGINS", False) and model_type in s.CLASSIFIER_PLUGINS.values(): + pass else: return error( request, "Invalid model type.", f'Model type "{model_type}" is not supported."' ) - return redirect(mod.url) + from .tasks import dispatch, build_model + + dispatch(current_user, build_model, mod.pk) + + return redirect(mod.url) else: return HttpResponseNotAllowed(["GET", "POST"]) @@ -865,6 +864,10 @@ def package_model(request, package_uuid, model_uuid): return JsonResponse({"error": f'"{smiles}" is not a valid SMILES'}, status=400) if classify: + from epdb.tasks import dispatch_eager, predict_simple + + res = dispatch_eager(current_user, predict_simple, current_model.pk, stand_smiles) + pred_res = current_model.predict(stand_smiles) res = [] @@ -909,9 +912,25 @@ def package_model(request, package_uuid, model_uuid): current_model.delete() return redirect(current_package.url + "/model") elif hidden == "evaluate": - from .tasks import evaluate_model + from .tasks import dispatch, evaluate_model + + eval_type = request.POST.get("model-evaluation-type") + + if eval_type not in ["sg", "mg"]: + return error( + request, + "Invalid evaluation type", + f'Evaluation type "{eval_type}" is not supported. Only "sg" and "mg" are supported.', + ) + + multigen = eval_type == "mg" + + eval_packages = request.POST.getlist("model-evaluation-packages") + eval_package_ids = [ + PackageManager.get_package_by_url(current_user, p).id for p in eval_packages + ] + dispatch(current_user, evaluate_model, current_model.pk, multigen, eval_package_ids) - evaluate_model.delay(current_model.pk) return redirect(current_model.url) else: return HttpResponseBadRequest() @@ -1809,9 +1828,9 @@ def package_pathways(request, package_uuid): pw.setting = prediction_setting pw.save() - from .tasks import predict + from .tasks import dispatch, predict - predict.delay(pw.pk, prediction_setting.pk, limit=limit) + dispatch(current_user, predict, pw.pk, prediction_setting.pk, limit=limit) return redirect(pw.url) @@ -1930,10 +1949,16 @@ def package_pathway(request, package_uuid, pathway_uuid): if node_url: n = current_pathway.get_node(node_url) - from .tasks import predict + from .tasks import dispatch, predict + + dispatch( + current_user, + predict, + current_pathway.pk, + current_pathway.prediction_setting.pk, + node_pk=n.pk, + ) - # Dont delay? - predict(current_pathway.pk, current_pathway.setting.pk, node_pk=n.pk) return JsonResponse({"success": current_pathway.url}) return HttpResponseBadRequest() @@ -2705,6 +2730,24 @@ def setting(request, setting_uuid): pass +def jobs(request): + current_user = _anonymous_or_real(request) + context = get_base_context(request) + + if request.method == "GET": + context["object_type"] = "joblog" + context["breadcrumbs"] = [ + {"Home": s.SERVER_URL}, + {"Jobs": s.SERVER_URL + "/jobs"}, + ] + if current_user.is_superuser: + context["jobs"] = JobLog.objects.all().order_by("-created") + else: + context["jobs"] = JobLog.objects.filter(user=current_user).order_by("-created") + + return render(request, "collections/joblog.html", context) + + ########### # KETCHER # ########### diff --git a/templates/collections/joblog.html b/templates/collections/joblog.html new file mode 100644 index 00000000..7075e08e --- /dev/null +++ b/templates/collections/joblog.html @@ -0,0 +1,71 @@ +{% extends "framework.html" %} +{% load static %} +{% load envipytags %} +{% block content %} + +
+
+
+ Jobs +
+
+

+ Job Logs Desc +

+ +
+ +
+

+ + Jobs + +

+
+
+
+ + + + + + + + + + + {% for job in jobs %} + + + + + + + {% if job.task_result and job.task_result|is_url == True %} + + {% elif job.task_result %} + + {% else %} + + {% endif %} + + {% endfor %} + +
IDNameStatusQueuedDoneResult
{{ job.task_id }}{{ job.job_name }}{{ job.status }}{{ job.created }}{{ job.done_at }}Result{{ job.task_result|slice:"40" }}...Empty
+
+
+ + + +
+
+{% endblock content %} diff --git a/templates/modals/collections/new_model_modal.html b/templates/modals/collections/new_model_modal.html index b58a65ed..b5e903b6 100644 --- a/templates/modals/collections/new_model_modal.html +++ b/templates/modals/collections/new_model_modal.html @@ -18,113 +18,117 @@ prediction. You just need to set a name and the packages you want the object to be based on. There are multiple types of models available. For additional information have a look at our - wiki >> + wiki + >>
+ + + + + - -
- - - {% for obj in meta.readable_packages %} - {% if obj.reviewed %} - - {% endif %} + {% if obj.reviewed %} + + {% endif %} {% endfor %} {% for obj in meta.readable_packages %} - {% if not obj.reviewed %} - - {% endif %} + {% if not obj.reviewed %} + + {% endif %} {% endfor %} - - - - -
- - - - {% if meta.enabled_features.PLUGINS and additional_descriptors %} - - - - {% endif %} - - - -
- {% if meta.enabled_features.APPLICABILITY_DOMAIN %} - -
- -
- - {% endif %}
- -
- - + + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ +
+ {% if meta.enabled_features.APPLICABILITY_DOMAIN %} + +
+ +
+ + {% endif %}
@@ -137,53 +141,47 @@
diff --git a/templates/modals/objects/evaluate_model_modal.html b/templates/modals/objects/evaluate_model_modal.html index a42c68bb..1d4b3801 100644 --- a/templates/modals/objects/evaluate_model_modal.html +++ b/templates/modals/objects/evaluate_model_modal.html @@ -17,10 +17,10 @@ For evaluation, you need to select the packages you want to use. While the model is evaluating, you can use the model for predictions.
- - - {% for obj in meta.readable_packages %} {% if obj.reviewed %} @@ -35,7 +35,16 @@ {% endif %} {% endfor %} - + + + + + +