From f9a9efb24e8b2fc2b228751007fb93bb572fd168 Mon Sep 17 00:00:00 2001 From: Joy Zhang Date: Tue, 11 Jun 2024 16:25:06 -0700 Subject: [PATCH] mASM2d rate function --- qsdsan/data/_masm2d.xlsx | Bin 20265 -> 44149 bytes qsdsan/data/process_data/_mmp.tsv | 8 ++ qsdsan/processes/_asm2d.py | 232 +++++++++++++++++++++++++----- 3 files changed, 207 insertions(+), 33 deletions(-) create mode 100644 qsdsan/data/process_data/_mmp.tsv diff --git a/qsdsan/data/_masm2d.xlsx b/qsdsan/data/_masm2d.xlsx index 3a671c5129340fb4cdc6fad57394b205cd8f48ab..3e707afba276337b3282d6500d27331153db36fa 100644 GIT binary patch delta 34598 zcmZsBby!tx^EKVwDJk6z(ujbxba!`)#3rO$I;2EExyOz8U{!i zR_f-!lD?9?m)c^r)gMwTW<-7VA{Xa3bg+m+zEFdOa^8avU12#EQ#qEjIWBYc?uwaw z`oZIN8Q%hPsJ5V9cy}u^SKZM5P%P@nz59|Np$=^oNp!7txZo=n!THq#u~Ct}=u!uk zmvUR|1<@rvB&NTFb+d`Ts=%Ju5y=CXwlHQ%-yE;hnXHgmJ&Gr>f**NfjcplP(oc3V zKLpT49{w~l+0;P#y`qj1F1KAeW27&H8kWU8m7%RE`ivtq-i|yY{TQ9V1Jjo$?|T|L z)r81&G?mq>wyzxCE{-3Z2y~?OUwwL==V_~ZhP*Y22uCjevP3bvuQhat?JNH^P}Hkh zxbECfIr{kFH>Th_)^!0} zs8X0IY~IvCg4Jjmn(?@)bKUBA#Jq^D{)%HgZP#ki9E7$4ow$yIS33^-92UiG5K{^Y z4ho71CGin~5U_LlB!KtO_WcpD#|vdAIUple63XGT<+L34Q7qmU*AB)N7)$%9!jhf# zV_syQDa}vzR-bxekGfC%vU~&|>dIdq1v*RUh)hmKe6}kX(^fiYiFou#Cowa?#hDXi z(@~_m#l^lYsug<@@H4;nAD#b(09T*37m}oCok7hk8v^tq+sUHSllC#Qm<%2(Ogaa- zsbW!=ey?L4=4V#0^XtbtH4~V(l;XyzEi0F0^`gy6(hj=G&yCqzC^;l*Mmf7{;N;Te z6|XLQo~%s%r9wmJt-ls`?A-IFZ_?Qf+rKZ?!&rz8AL#_%xoJpqkHIYs;O6pqy=p(9 z(4mtQ3o!=n_z?OzztYiTs&6}2Mcz@=4N)}R6LOh9@R7pUc<3Tiy`?ZeLs+tZICPhi zcm0-F5t_NfU7=q1+JLz_UQX%xApI>;%3;ENUFQ;=tqpR~WhuGc-;CNzzsC9inj9)k4V0^TL&$gpd#Ju4*j7}A zQSvOP<=fjYb3#fhVSX4rbZ0x(YK-XAS}x64U{?~n#2TqJz1U_ll;Fj6$xK9iQ-knR z*8xSpvMowqQ84AL2c_kGgX?2(mP?_jxn#U&?BQcO2GMnQw_#1{2fN=-!fgR{2J48j z)UwZ4fw^lzb7a9rk3K2)yTby<_@>MG@O(-ReKEP14(W!3cMTNdWk|g%dx!$v4;*Gq z$-RaYk?-t)V|M4y>4_bR4|SWd)u^-=N-q7y zp#W^+3b)m77+AqBB`0Xk$GpBIme#PQ0F;MivlH zA!mSF7(%6LAudUi#7MAHl+j!x(cE|&`U1n=>`0qSo6*BPZ<7ulzwAsCN`T3Rx zZybl+k5lt&`;BoaMdtDp+%Umn?$3Z_A$7CnRdPQ5mKej4FsD^#?9!&=oJaiMD6Q;+ z32W!KvTKKDzJg*nJ_#&NPT$Qsr@Zl$2 zE}*178#sCiN;eT=?Gp+kG?4s1+AZQTC4*9ILr7V`HZOh?kie~&Pv^Ns{Orc33<^1c zshfJpwPO2)%-rSM+PmVRHFQ?|SM<~>zCTx)5LVe+3L#9TNb<((hJ?Z9d1_I7i{jK#@t&k>$X#gLNL?^&d{PbiC1Do zRAUE3Waty@wFpGhE_yiZC=_@o5?@Jt`Q^&sPN7JD!|*EPy8mY6TY`eG=t?H3G8(Q= zVnknojnR-84Oc-E*|~@4u7-i^H8j!vowOOcO|v2{Tckpcc3jC&`EbPPVrW_E|}GPKz9Pq3z0x zK-K+6eJUR8JnFg`CPlrOU#ANK7}`B9mYFagFIT+|#ph@1C6k-THr%q$vgh~`hd&li z(x_z&)Ai>O8uySe$*-`u-CqokuEEea$f|wN9BK`QISRoEGDwr8Grup8Vgoz=KEZ^X@R?R{^ci1Szn2_!7n5W$4mxFHj)hFnz73` z$zN7y5KUBSwa&<7J94_u|VwZoCJ2PW$?m1^)s}}s2k%Hyg_4szhpR7{Q~Kv`>rXuL6fi}b=hjB z{#uUAl1OgQPBk&t!@*HHI5~-=6F|!DW^O?sI3$pw4-Ob z^M_>JS-_nXk*T@)U4n+?m@SmA5(oA4Zy8TSd_hB5vx27G;bfQ8u8!K*gY>fk8fBL8 zXzy6X`U8XtJfmZE#Bm?G72)#8cXDbfBJf@8SMbNg_wum12vMKrxM1$$L_P^H3lTo7 z^zCoqQLuhRw1UWuSeX@#2qp5h&%oSHX>|Eo4?B5zxaJI7<(QT;HGNkFKnY zx65y|!NIkvZ|EPk^ccUHgAbCD!+E#KA-l;LE^5-CjRAv?I3RG5AEhebO4I)8 zBk`jeqY1k$#);{*kh@!I6-}h;EqrWBgr+(}G#r2W&(?tXS zp8kF5ZJe?b@Z@xPe|mm@bYW0*M@Q^lQ3+(Dd6z6Kp65S3c`vs&-+TLc+^CyyQ;^Eq z|1y(`SiaWQGDW2zm1DW8&h9~>AeFb@H^YrcrXvYU<0&Ph|KK{Dgj{yXCLSnVc^{^7 zieX0)+~U;ZfmL1()p_s@s`E%G0BhtMl*GkV>+H+GV9XI>bcxY8Dh!4zM(0Yndtu zo_uuw&i@rw!So>&t)e~@o5zE7WVk=I>dUshqfhRf-nVz#7k6{_H{)U$DJefc(1kU_ zNR0KkO8iQPGC}5tfeR!QP3sUz<*bSZ0_|EtS2>VJjwmybT~BcZ;N7Ns1aV5vVM@-M z9jMPSs5@#c7PZuHaAjB0F`4ir0vLjvqo{j2xDYCiNVMT_vD2@Re^vi*bw6#spe{nX z-fxa!csY?7-SDaf=^+>iYj5WY?C z90^r)kc2~R%`5lbU#~VXqhWWKH#{d|Bw$DgpK_K7I!F=~Iv)x2HjuOhq2v`EWiE6Z zl-o`*rw|iNL4>>>Ro8D8?9e~qo3nS#@=C;GatG*ljBsNHF8)>bkicUY-DJ0-A{jG|U)kHAK6$@L8Nr?YP(ALqtwc#A2-|V_;NTgVF zC{r*Qdv|?vWR5k|N^G!&^7bL5mH1G;M?7b~5N{!$ayKy~p8hdhNO&MyztCg);j(@_ z5rw%z`HfllmuDJq+KFcM@L~7~>W*SG3_dGb0(BFfBio|Wk2c{zaAiQ~=7*L`eLctU zTBNr-?_Y_*-{|nAOuS-JZW?yz#r`4;lYAUR8$KJE?WmZ7uG3)tmC!DTXZa)LV7C5G z^@eJ^FAD5~P;xQVAIqe%kdM*REHwI%$16YAe6&?RqacG~jJg%cAn7D2!nc`r>0L0~ zVR75|5pOZ6-AaYV2jqd}hbu4~iaU04dlM%%=&+slyuX}AE}yL5x}1@Zw8nnWm3{W5 z;F$bRsfC3^`H!2zLNgE?=LL{Mi-gE89H4P!@vMf=J~m83;km(i%*Sp^--N_ z_^88+INC(EHrB|Y?T6~{kIwt*{LzltNMp=9bNTYwp?&E{RnA0FAXNU%Lf4vloXaLQ@OVRtJr`t!N)>A zS8B!T#VzPJK{A4V&E{IR8@_`)=rK;p#d0%maS@w_jvEoH0(VHzt=q5&Pez#dESELd zVBP3nP+n{b_KZ`xx>?;OXZmxaR89AkEB2kWnv|AU76>@bcxr8i{We#N0GWuz5LzEU z*R^Cu418;d&cA!dddf`oaa~x2e8Zd;Gk!V^)y106=TI;1%(6Cu+_O~e!97!#KAebI5+ZcifNp-;z4KW)XccG5i= zyfck@d-zc9;VPbS^Q7 zG&B?uRHBOlKEMSTH_MWiVlz3gLXVj*$XQn1(6E9eH8Tr}nJ-K=E}V~uaLbGp9IO(H zf3_SGNqT;k)kxBW5$?FYv-<6{gDEqaOIXO0>JSS%*B@T5p3=I!bA8v?CCB+awC=f$ z`LL_6DTx@1sDBzo!Qy@fXK=v8PqMi__w-#GU2cgwfceF2SLSOb3A7(2MbNvm@l;U_KoH~*7J@3Zy-na+M{|?Pm z!|auvIJ8-MEzO61?uSM#IjP!--6cqDal5PaI!Nt#eOWZBxl{2?^FuoS8Pd1-io14X z+?Uy=?7$DUHBzS5$^y!^sxJQdEhTN&z=iS8H6rY8_jgk)a^E=&g;aIRvaGi&KU&;3 zd1|h6A>X@m#mr5Kz2#&VEUP*~Vbt8d<{XHmmZd&q-T4;c@9a5o3{H?&AsUvw83^C4 zuwTu7B4zaAyFjk<>#&{Wuw4#9LSwg=1!4==&H$rtA7UhWT8dlaWP0U_gPYQ+ z9#mgGtlQ+$e(3#`GOtlq@{pSfjaC`smthbcv#<<2N&kE^s*kN@EpJ8*x+{&c$Uc-lU-k!l3o z#yyn+cbjvok0-mUZJ9qthmJ)b@9k{AMeaa9U_U+1_3H@U-1Gx}_c#4UanrnSie$@+ zeAqU;TbZg`m`)Oto4zu+_-L3qJr^}f7SK<=HhuoPbwble%x|h91_FSz2cc z>-)>N>JaNkN7S=@kp)SmkICFMAqy)61Cq}qHcSJB$z{u47x)Xw(q=1;sVRh8q2i>P zr$0zg=Zy<0>r9p*#t(461*&npY!(Iy@N}8gnWq_&Qeqq=sK|R>`{>)mm1>%on`M}y zqI^SEFTK|7s8~9S|s?@+CHsAF=2aVEAB4aji zq=ec|V4#e^Ys&S*gKDiJTR|F@2dY81H(9gs*?{*@B!MYZgy}O)V1w-lEnLjW|l?M?{JzmG8UD17%>%hSp@HGfYY8>C#qBkaMC7rjYIx7eYs$|#GSDoh&>?qov-8my->V|6#; zn62YnP3$t}mybeKgLh1H=f9VLF4>-I44S-2AlWddU~X66@oR25QLYxJ%F;pUc{A>o z$!C>CPyY*5*~S|x2b|0@NuluM%chbL7mqie&Z3rXrFF|aX6uJaG&DcekR;EPlo6N* za%yfyb7ole$yTx+WC=0v2dZja%E99t%M}U54^-mjl=VOgVsD`lJ_0EF{4M!9>nsU1 z> z)CPZIj2h+AfHlgkmuqz50T$!AtpR%(Ye0|BpS-YYM`UIdrG0mLB%mE~>w4`w<~;;I z`VN4KIP_}Mj%cYnG)G1Gd||GqQmo3rO1c#EH_%82TsDwZp2TIIimq7$W(Wxo^8HPX-`|=q)g{s@7e62jF~om|Tda9f4`KT!2*@SZ1U8he|lF9=!sRj8L({n6v zS>Fh11l`56ztn5zk*+Zbd}@)-vt?}qRG^z)E5TthBo#ev6t(|ZShurIo_VM>rt{K{ zfnB-KT*A9sx4_`v#U1}yoHrPy5%jB9rj993YnCh9OE+Q><6p9T{kw9G|3J9 z@?Oia%${C$&74ZzWGq)oLym*(CzsOB}oUget5 z0xO0L`ZOW8^_=qJ1@{1(;FYlP-0j2}KKkN?Qr_EsE@^axQgq7((Jt!3s!n4|7Lx_t z0pr`4W=B?wx195(ohx{#!vx;g1lTMrdLS_GrKf4ZyexRXs5?wje`dDe{RfC&hdC}q@?1waB~>N zNNBp|JY93N;X6~2Q+Hq$Z{SMj*HJN3gK02zeEx?=EPBkWvwuBgS;BK88i{_+q8G)l z&~CC&nBQ$|i9GAH$i||FDgto|(Csm~MH<#j1WU+b_h_OY1!HJKHV@`|C^&*Lb4 z+LFXk-OK6R_L`eBm6+e1szj`3JesNxgiC%sKURxZM1wFndiXUMdNex= zbj63MYmmu7cbe939Sf6sj3M!RARM4KsIe$W4aY~AA zQ8(mFLSzzqp%wFEE8+9yZb^cmRt%JmNDXBRk_d`{YdRImHcGp);T}R$B(c`JToqMs z_H$y8N5PmpZ!~Wb!D!8ibGoyh2A)x9-Z|vGLl2%outS?AF5{n9s=n@-owg$?(_m?< z;jIUVBYS1)3;Cp~ugf&;xL5F^DyXgzwu4MT#ko|(O9q$ zd3IGGTO{$E%No)&r5|~i=R<*kSn%No+#OiJleKNx<#hN(&0@`sc<5b8H?rO=byR)l z_gMMcj(=58k1vD_!DsGEYrND_`6?c&9-lO6WC&{}40>-@ieez>?(i;5%+fP!m0ZqL zT}cWmsS-pG0g1Itt#GX7SKc`_g{xL_>#kd!UeT- zMyiG+)gM(_I&QC!?9ZNSA?2&jcH zu@;TNpP?z=G!!4-l(<1DPfkBcPDo;}W>8LwBjYm}FWjfe+E9#7=_{;5L9RXLd)H;4 z#64SI0EX|Fn{MAmMSW_pCfqFr{>_C2W*s}vw^Yi^-ThKe@|`ahM0Q}&aNpfeqWR)5>`Y;G`7y(#fe=S!F?@&!nPhx^ZQg; z^V)9p0onU@@b!l28P9VvRE!J}NiR2yJ5K=;-tjA(*!_)nK+|1q?C)XZA)Id$MxDuh zdStN~MeOSn|BBlh(A37x?r&sRf54%vR%ueTXbkoRpPn!DQ;tR2X+>Y=IJ8T_>#TDt zBf*Z1EjJ$O+4LeB4f}|i2YG+kj(0_O)2MJB#-}x*XyRFuaPM28=$_u48^bV{cYGp2 zhro5u2j%VHiWve-gYn}OjY;1%%yY2=thTJ&ACI{cL3XK)0zUO(M%H--Vm5Q*lr39H zodE`=Qg$u=GZo#B3K}7uw!ypz2WYdT_C?zBIbTX3{>Vp1US}`%;q25iQpwO@% zDkl^7hh6g5=$azT;J|CiL+M~bA=LnP`P?qm59E1=XB_e5zvz}I@NA18$eY=IZ5&u5 zMe$QK?a76mZNqIhq+Mw_TbvVUNjgkc^k^O3%C-0-EIi-kLO9fQnDl%oF$iPL;6nRf zqE|_)h5jidY1UD&knAUuOc)3ntcN&20`XW71>~{DvH;y_62z}M!EFg&!=CacRE235 zJXo*gBNPLHl3&^0MM=(R`f|d9ita!J%32^k36oO^9h&C90{Ws?a$9lceWxyXt^cs0 zSPhbcDi1=JP>?Pw>QYdlOky=8V9Z$XT2fF8#jTa0kVR&&7}PZ$Dcu1Vt)#R2P8`E$ zBINw@*o4?l)ik`YMpV%H&v&5_@JcM5^CYROC-sK^A99X#sLMjgInt3;ou{1^_$6Ki z{8?R=fxyz3i53c$J1wp(UiN6*W;KYJHlWNB%X~NF2r+QiHY;}o6?UQb{Q*Oj9cPN! zoGK8&pUz9cfPJYW^IKY`suSC}^A~{(rREm>lSYgG_lg_|&%v88=oSLKGlO>9IZWo@ za`gWRe#6&FEfa#Vz{bL~B?AGyQ05|9?}h?+H&2^v-QJcPO6rVME3-O7YDT(KgHW7r zXZN@r0zfY=gF5=K5fBK%{Kg9c^F1q3hlcBzv3TD7=$3r^Xr*#-E29a=|4x6&{Lj%4 z?C?>O30E#MP4i9*-%CIM@5%)MXEcFA)9^P(?j|ciM`1I8s!{bea)8o@pKEYbEw(MH zgxx-zJtAWG6@>$(a=3$g`FY_+YUOY;o+b*Ny=&|U4uE2a8W z2iW`5IpBO%)IYUA%TYK*sv*>OnOYyXeqX9Au>vUcNv%K`aqccrIKR3jJ&MzSs)&^O z3X7tV+$brvt!TRZN6U{=qq)5bmz6+}61Dl~?^brC;}_Y4kreYYz26gC<2>{N#;*+1 zLgmU}Lkl_CsvkMTcHpaX)6Z>^bw94!%PY0RdTV|leS;`y!%0Zj*x)4E@QD4My@{)+ zyG@5#?Bnf@{IkpJV;A1u)%GW>n8(|*xb_^;rIBvw#A5FqOeDSui_VZwdSnTrPWEjN z#7#`GzcJ>DZd|kIER4FY6&8OO12$0wFbl?aGX$GzD<4loPtxnYcCO68M2{DYCi9cg zCh}>q{QZR7ftK1NP3OyzTFe>`(1Tq_OIFULXM4T$k&?qz6!!_cSS#V}Ju z0CcJ+v=b#XS$Jm67<9FjFEW@nP%|BI(2BYbtvPJJzDYL!5#WO!s zTtsL>@i(`3DY!lO#XSHnG~fX)bV|rI5D}wh^{18Ew;P|*l=~ef@vEnLN;3~xn^5izcmIa1Y1C7lJ!z9K)t%JZmBZe`rGNRB>uV;+Gxmf zx=uKKks-60@2gGoF6d0kw5`9%5y2wp8bvD*6r*%O#;RxfKH@ep zwPAtz0ZJ5Q^1QBG=85po*5iP^)WL9)|4CJ^NCO>>EkqLp6R|Z|94mN{-xX-5H#HdaPmQ+ z2w71qMH!#O!RND?qRsjS6Ab*PcNSO4Ws-nJr#@exh>r?Bpw=rHqPVDDtzweM2al%l z)_k!pppNlik7S@WQnJk>z8uAF5f2VuzoMbnUp?f3aJEC^L?5T>($4uOl-j zo_+ES4YGthwLNSQ3fs-1saQ#uC_0KhewZZKmY960&@<)*9*wJbya#*!?2)TJn&wr} zp+mq@(OyRn;k8i-Cic#&${+!kF;OJJ<4~V>v6;|-Mpl{yvD*F>EHt2L0zCJwgO-3N zw0Eec(9q5if~$x$+6Nav@wq3{$%0E1Qpn#ToGrjmZ25;fT^ZAP5bl^L{#2>H4&nVG z_0P{L+KEDNX!xGyKdSkfo}FsjK+;E7%@w z6IA#%N;e3$h-@<6Nc{f8VO2_-PLlw7aQOEk36_Hu5mk~x&t|^kg z1chdEJ|<+ehwKMgSb>~-SLOz;hYE%EQcdqUc5o+N#&>EEY1o-)CUK@x zFI5(l5ydb_rLJ2nAP0xE5tbt5Pucj(ASp26HBUP&>Y!%7D)odYbsecFP z|NNaNZ0T{Db4UzeeSKZd)fnDB3|BMxu*o=Zm?xYqBnC8AL#x8C2G{lmI=i@0nD55G zYV}@`UJGawb0@Cl6~@7_vV*H4f$pF(-%5&=QOIenU-f5a;KN1ZG0`2j}tuS#3nV*?seoeB8dXT;37`WSgT6QNk`eX%|GmKLf zZ2+6ih=;EL9OdO6PKT*`amSK7Oo~o(qJM{M!)m10Y4-UL#p6`uQ>|7}7{wu3QBg>I z4r-m7c}mrL7OGX3CWO=Isb?PX4n0b5I7zY8oddsvt*2Lb`Q$}8fh+DbH-{D(0+~vK z?WPNcm&-ifGt6;#5;-h-VKg8`Gi2#c4`L=*w61Z1GzbTt1yJ=!d510EN|A#9;lVN8 zm!Q*tQ)BP@utqZQiqtQK)#YT|d_}o)Mn>;YCTIMSTL^4%-|GY457pjKs(&C5x_!%+ z$&&f^xCbBg^VFe^1EenqC90~iBq?!Qgz_hinGZopeFjL=8JVfn`rx6!@#FJZdQDI7 zYs7S}3QDly+~V$WTYybXQ56nB$|eb+o1HUw2aq8IH>lz!UPmw6Yk} zJaRgzPukX!D*y(si9X*>_4g#%ATGtV7wmy7ff1quVI;x_d9ZH1gmmZ(dH{#xRpBj&4`FoH*6vZ5eGzi=0X!uWv4O{OI^7C-%vxEdIckYrGWbmPw;*)K!9g zUr95Cf|WlWUPOlUrOAH#Gvz827*N2ZUSj z(2BXV^Q`{g?#)baYXb8VQVtJTD--az!dfhsB2Hm<{uoKC4aX!?6_kYrlgIZ21D2}~ zgq&bm<&lGB1^Bi9mR2y`M9TZGojb=3usz^M`4O(nd*Nnk{$nRr3Sx(=;&j5j^UF`x z_|dkz&1KLXJ#NsQJOA~!jXiXC71|Dq|Iq2qk-Gc8X5jy0=6VG*lT}VBFf6yo3P8-P zu{dk!PrS%gS-wKe5vS!_@WRdFJ^FK23VOlcsS{iu+1rNdbl8I2!$feG-Pr9XhG^il zemXg-$kq+$Sv1!^bpyqaUfz3$gCPgVbU3Dc`t7?-?nHp6s$ zD_y-eJrnk>C!+dPVQyHvHC?le9eLv#XE4A8{Y>H!hhX`$a`Pbex@1w z_u#~^dfp3NG(*%BSXInb1;5~0t3zDMb#cMqf#74UKwaavD^3G}Cov0>^bN#6C^u(5 z*n6)k3QyMkInV`@yxfBe*>PO5wN@X~c@}FQ-t`KsZ;;WqI;`?4rM)!28*`DQ%=Eje z9|V)`vI{2Nuie>h#J{2Sn2s8-{x3q*LH|YQK@H+gfs;$@`7-FvzC6SoSqg|d+`*tb zwe5f0L80(J``!6)uY;>lF#fMcJe@CZ(Lj$fC|mQ8=}L;Ut-E@WR!q&|oK~}iMZ(uy zn2a+8R`8{{;UyY?Y{M~)lZ1I#}nFWIF_h+oHz8)2VLv$C_v3#JmBhU%9q@AWiA6=gFNleBYgj zOG@L$N*<@U#P@h8a!d+;+?4v~RbH-zx;pVzFaVf|AtX_oM{a z0$ zMgETq9P_JKu#e=x{FQ@A339)~mIw@zKQC+`w816k0Z&*V_aHTYWV*`!3h`Lx72?&A z%_^19+wsZHo`jKj8<<^3GySoLGUYGM)<0rv)=I$`Y0LVOv> z=_COlFN7dI%=rExA9w|&PQGRSDr&~}isn=3A2YmLQ$h_9n~QCC#Z+KrA#DdpdaSam zpY20nj-L3Z9&!l&^rV0|SfdVSdrja_14#RUy> z!1CA^4HHD;9VoCsvlk)Lsrz}gS0VNIznyb5^Gkat~Bi z&>WPM4+XKC9`M@SDlvCtMQ{gUE1j&2XbTmQSrpc)w?7`8LHp{lDpzCB zNTNV(VseT_~k1ok(Nkr<~!f{JUkDi|D zr62I5A#?5?RP%{n!oRmD6dimK|7<~E1@iuJ3R5VvmLa|!#!k8W;(8$S0S*N{L{anX6ZfQp!|`3mq~ zC{&1Ip8j)8UWZe{K}To32s!XgOUpIQ1HT~=F^vqQt-WDJ25^%Y(X?=2yvOEd!Cl>> z3|rmCW&;A2t@^s8f{F~qI3+GF&mRzNB%6=_+5zhvv;#s4+WB<{v11m5{BHHCcr+hX zH$Zq7b>|MOPeAA*7?bZ7`yIF)&57cLTCnc-@mP1|8dT=^>}YspcK={T_VWSQygF$I z?szJd=0>F@2D1f`1s=oBfM5xh>rqDkV1@1cf99eT0v(UZ9!AKnXF?jcNS(zU{01#$ zKt^1oZ=1y>kaIy~H7XJ9qkhY$_wcGnSJq|Uh zXXK1hc5uaFM7XFW{q8%>R_XP8Mw&O9m#6aa80VQ8o_VuyqIJn;J{0H7y+fOM7*ipT zF}19IgnBV2Lh&r@_j&C09jQ;a80q-DMQ>PZ50k_LW-4r<-4%wImX}Mp&9Cqi#l*@5 z%0zVk>{Kz|_9u?5N+9Ry_k-}lccZ6gv%Yox=jGy$%Sa2Sq!{*{`_WYwJXOE%BXtIV zbfx3*uGP7K2DcxXSE>73*V&=jY`xZi>D-yu#)ll+>I1>$qucfJd4u;vcZlpie6{5d zjg)d+bc_xu+FhqIqJ6$b5AHbmZNE2qp74v#ZuL&GcYB#Z{XX2{1Tl%?N^HoCi()l; zc-d40<6%7IM1tCYIM^)LgXD^f-~g`DP|g2BvRRMbC_c~^pJE65Hva0xW=&-pAU6Ej zJJ#*oEPHKMd7)eeOr6(ZLghx{PqS?AcAOV+-p{r+%3t!#C5#=p!>k-7Ob@Dc?=vV7o7bVR)a4*ZuBpP#MGa7FD2(vuGyXRTaLHLYhiGAWZ zB1!vM|F}w*?|LCh#xHFrFO(HFV0DdrYINVRnXuJht@PS=7kaySKbvi#)z=Jd)VIt` z2);k5GAK6vli6#rYrp)vn9y@tAnF-6Vt>+p^(0H`j<=^&QEiT8Ub)tI%MXR3wb0Wz zUb4r-llS8^!Jeuz!cXt1;}TG5bM2 z&%>DMZ~dEhm^in}f9+2axxp{!7vnGaEqi2U8#I#cqEwI?aTB}2&kfoi#WZS(96f)& zJr3|}UVH$D?(RsV3$s9DKwN(v3)P)S#iKF2yY#Gmr~7l`-2Osbi_2t3+~zQ{*<{Bm zSJY1Mo{y+uK0N(tx1s9^etTO#j>HvNSL|~kgG2WmjgRr8Sq5#Ssc`zDZ8YpDaQfV} zw6oi&<$|Gf>mE^V->YfAUPrDTn91e()Y69iifWPO92V2c;ink;0=&`9uPu7Ji4#~f zaMjq06DVVqvKLf@pBD$;j7tep8~i51Wm{9R3EK?`E+J+y(98;!?l z^g`*r0h0O0%Mqy9WeeI)Y@Ft2Tc`Pq6U)L6yTE`}wG7!A9KRAu7|z2_;r?b9mnuI| z<%;lhnB~za;8&tEJ}!7I)i{ECPbIo6yc6+=m8wg3`zUCI zF)FcQD>uHA#*8rFUZLNq+>9zZ$?6856OI~b22`xI3=C3&Zt;NOpWDZJ`*+g|4Y3{% z)$}yp1H)+1beOT}2hHZ?`EP?h!TI9TE1I3IIwu9S8BMpy3;q;rdfhmJ zr~h1ZK+qC}EvETe;%X`DjJ0W&!}1ngYoGS&*J1Qjc2KSRutKNK#-}K=!d2&#pkG!% z#u+Q!21|l|etUsGrjHQwG5Ze~Wp2c){gm|JyPmMCzL9q9I+W%d@3F?U(~5aB_u+H; z1NB*A4>69js6}*)8CGt@ut?0(m~?=K58qwvEX#=#I}ByJB-r-@sfVmv+RXy|XAz16 z)6ve}jbH<_omC`3_~mioT|H-V?ZX>@U%xEzN6YE6;JVbqR-yy<=b^Pzy@=_KMdJMI zfJ7rVVjFy_JvxgP(@d;ukiN7Iz`#V_62JlS=zJ|slXQT^#U?J}KqE_^P z1(i&C)|zd}($`mnBURXnlLOQ2k1T}#E`wgPmQ1arqh;;&r?dl&Ft(j{BBR>TF{+?D z6>q2z+#d>ENX~h*u2ju{{K+{S^Nx@@6i73wr>92Dx&jlQ#0d^|BPbv*INCI-FaUV=rPiqO8hfmWdGJfAs^({S)YX> z=Xj}-$;jEewkonrb_KNERRmFGTTPZbcGNykGy)zho8_|OIiJ@O~8mHTv^M>@62v2m{UF9A zTNB&1?PQXPJ+Wv_gg=@>sWPmSJkSn>Z6WT=UM~c zZQsXo3|_yN|J~sCBk79Ymql3d*q0(YE(+y7)))@5pWupy_Pcv-AHDcUczV2UyVm`j zt^Qm15PIDcD+t)Z+3O|pEoDb~S-kH}nZ_Ri7kYW4`1x<2uZ3QOKCZL7-yh81$FsYA z-u}Zb{+D75h>q+1a{q!5YCv%VUIEJ-T2@dDTMF%F*dc6@$*HXlJ&b;SQOZfnO+0Y% z>ihJz)|6iwi)MLq69058vCCd^GlWB6qtMCma%t4rs!>_G7UEvC${2%W4<-u5+Wq=X}8aCHEIiR3}{`fq>*Ie3AQ!0Ev3Bd0({tE3TE#nLGU) zOw4d@#~~Iz_w>=rb5{llJQ~xrm!!#$M*;tmh*3!@P_LW|=gs*p(-#+Iid9(S!YUQ{ z4iK{Mj+vuYnY-CS$w4q=XPQa1DjKANQbyPF=VvJ=`su$If*oLBk`x?wbTgm24nmYC zyxOoZ@Ag-z0f*a*6}~$7y>)I0w7z%{#s(}}J27#o-Z;F|6xi^S&9XnLf^fdGLciF4 z(H-Y8x}l3xS8UEem&%|9WRvH<=}=2XQrVx$;y2OeUV_8oN1JqdEv0a{@x>mBz-Q9vTA}nN zq?fp#_SHWZaGVP7i%vX(#6g)Ws3Gku0&v**u1UvO2Z_XHi~-Hdlu!i#GyP!!z)IRv zyU6bmz)F+LmDi`ji0jVwKy*&S5Wb9?F3fmuV%%zee(0DhEQ|*!MfyBs(a*4^jqwRg zl<%>@y*QHjNi}vf_@t6P)|u+vipGisF)TbRITyIs`3PVK?xMuUG_(DQ`f#mttaqZk zY2y0sq}*P65InS{Fe1>c^lKRaG;=M|i8FNeFk->&xn^9paX zzw9>OxfHv7-k)MWC%fLCUM^y@v+X3mCv5Nw`rQ92p3{~V+W+h(1lrs=e4btJd{_@N z#N(4aIy;?9_?l6=+NqRBtzu(0GATsR0oyoB)1y|Ku^WYcqq$SM+N+#Jt$qm%5K)HE#wObdaCr`+DdZOAVZ4E=^EK% z)v>s8qk~wPM&~JQ+WxXaTFn5jtWwAljT$S7Hj6|B$zEhjebbcl6rN+bpl4WWZ&kyx=c;VpRO0E=lIIM?t?WP75J{m76_Ir zDq$d%zwu>l6*l0ey>sPG@fS}5;IU|e)BZC!fU~a#NGXBmbL24rEGgPXFp-!GyWXz4 z4jzZMe!92IoBW71yn9a=<(^dXRb9L?T;<1%OC>gC^>4s|Q2EkvVrExdxrlZuF-NI0 zP&?p(rPl&<)p?aOxpIJe%orNF9&dedkzq-rc|Ex4fJdtfavU>NhXJBaPwJP`GprCG zd_B>8>+*GvKH_R?oCu)Rw%>nNb@Uo4)G+c;bjaJlIeDyumzs}ykstrvSD6kw?t}(Ez zi~7%ZN;e}|1a1hr3NJcSmy{}g0s+ud>m*%GUI5std?_bGteQc4AUB@I(Ol(`vJvT^ z826Xdmu^Ulj|LMxm`msDD2l(w5AB@dm-nXoJ$SshIE&V`Zwv$1JTo@BQ-n+e4vF4A z+c-QiQYlt6*Hbk=vX1whc-tkph`m^0X1~VFA_jacj?PU*o|7f>C|Q;dFu!i2^QEP$T<@5H4sfh$u*TD=i)I5J?1xE=+M?~pK!nMoM~Zy z(MliBVYStbTBmn_e&cxsEa|Wt$y4&XithcyKm~DoukaNrhw?p14d%3%3g%qFo__E= zc5AwHS|P1>h{AABZX-~%rLazjWg0drE^Sat%3G0Djk_j?mQi_WKTe+exkVpBwNZY`)~3W8~=BEaPPw0C#eRDdTV%<;wwMb%cN0s1nc-7wn5@2- zUiFuRZ8-ib6~s*n@I4J4x(?1O&|{KHP_ga7DsJX8P~$m-*mWFuJ@3*GM^rD=1+#GY zkTO}7qk2>nE&pDniu@o9>*7tT7#TD3P2D*%_q>0ZK7c_7o2R(%VdlW)q9R|_hpl-u zNn5wve@T&VItzbC3F~|_uiAW9EDF%VyI9?+P{cfra zs#M8Y1KU=VRbZ^;KM@oZ_0%+C44uQF5|uMNo6D$CpiVcDDN9}RJxHpl{!XrYBdmG{ zwF%3^gZUf1IPh;5uVveUg|9+Bq9)K8qfNq?C)8IIfH^AON6(K(QSC)Q7eryX)I-8k zsE-bdIFu+=+~TsuR1f9N<|cwC9x=oh-PzZ!S9ZI6v)xK*%GF-RP!(h}*o8wYok7VE zU|RuRKf?ypAG%3h+ebVefoH7Ag*9Gv&a%nnOYdkNrOcbQ>R8zK+ezP*@C;g_To7_}|2s6n8*+`KINACt( zK7a6t#`DtpWTK-IRAy5E=29V4nm@-VywV22CU8$CAvJ+ePCTfbyj{`+(G-ANFU$he zr!H5ZCyd@w z*Lm)8@V%@CTmoCM!scWi!|jc`t0?C^B0CtHg?yLNx7#zoHum)r@9t8bw-wPI#`BLT zpkU$g)TLwgwYu$bi@h|IX&R>pQB*V^2kI~qpB5S)3G8o{Q+ytH576kIbn7j{-JGZc zq6w;{rqZI9a@zK*TX0f>mtYLh&+He$Xsx08E8%^iP$6Y94GaPD#4AJ39_^$IeCoKAG4q7%}{jklM%gpCMO-$(hQn^&!!CFQz_k z9MtMcDbJ>1^Hd$4#%*Z<70?MbYHterfcdAiR&{>{5OfSh-13O(pW_xb1vaWTZVp7iqrkaSi6 zwSmp z_zo)tHu@Ko5x&k`E?GJzZhMsB*)GGe ziE>);%_O*uBQC^O1A+2YUd`8Zv66`ItggPOgQr1bQ?@Rv>_u%l&Ax!=&#LSyWa1&H z1Ku+73D*%hL|Jx_HO<70B(>EetK;NSIj0^@BoDrZ6#e8iHMhI+n-Pu1!E1s>(^LCl#ym1+kDWTSoIuw~n#UikNk6Oa zVNZM|70=65x697Ia%TZnt=|M%qHx29SJj1}NTgTgpwFU2nnwk+NsuPwA}m7V+uc}8 z^j41YuOjth4w_8GZeA3xV>XH5Ts|qr!L@F$9H-ncCN43{elS4O9_xY1^5Klgau2dO zK1Nws)scdWT+h$#PEpfxUuk@lngc!+8D=u&p zJsp};MH<*L`By3l7!fI)49f9Z#1q9##&QsrF89C`2hk<>zAV3yA3wc1a;7yb7MK&~ zLI$8;3BH_ZVFQS!Db*H>8RE2e9*+!OZ-E|kws87ROn?~#5RfwNe|^)j|Hn7oTFmPI zbru2~2yj3%g51a>Ra0BL*jeR9uL<8<;4H3ux%`$MBC!jlF3V~>{Bf8)!JQx0SvGt=MzzrPC8rL^eF>e|m49RZMTx1LY13UOjX<&}EA@ zrc=*p`Q-ut=jfto{Jy?3LvOr>vn{b)P{ys0U{}#naT3qW-puTxB?}s>ZG*9J3B#i7 z81`}@%lRO#x{H;uYu0J0Em{tR3a=&O4x=oah%=Sa$m#RlXw&=8PT)DBKF#KZYAQ1T zQ%1(9VX-hOj(~{6pjapzng!c@&h>-KNRx`QCaDYHUtMx%o1p1tR#;v0fN!+HHUVH{ zTOT1U2Jo#AXUdxe{b7F}(aua%(4Mb|B0N)|8ZF2!tlua477G`F`JjagZmLLS^HeF2 zbM1kFcbpQO+4(nOFN&%}n7fBK8m%~eTDc8bS*?X<@V9y8B5=DaE!q@&kEu(_Q7!e} zw{r&Ibpbwsnv{cq-=hzQt!TFclj&XZj=tbYR5)mEoAM!ZM4u5-9g3lRqj1o5wm}s) zp42~6Le(%=!_6Ovxx9wME6b*Y*(M4h7?JStwS&I#t>M#ZQBz#IpgyCp4ILi^t4NoL zEfBY`R8ma9|FKE0=w#+G_W)N z2K|5igk?x0RZ~^zOT1J8e4(}QD^1N0D;eIC_uLWoU`x! zJ>Q#Ib@c~b-BHT$)>Ne1 z6}_HOY46;(^1o@y_Qx{Nq508MkgOZiz#2sq;BF9*o2Ca9 zx;WP)YF1r$1eYNuqqQ|^^3EXIwx=~-vZ;8+*u#5HPT`=yXo-QW39-FJkucB+zyORs{q+lyNt|kq3w$4ZE|ngSdPiVJFEQ*dO}JAdht^?&8o#nK${Mz z!e!^y?4ERg)$D#gK)ndi^8(DeoZ^Jswr&yyI56*)bS?=4g8LBcx27xVf z!u8^XCN$;5<8$O3oZmiX@|lit(+gCcx(3&Rv%b@7XU~p`t+D4dZ+~yA4N*$ z3Yf<%&^m6|X*?92-gg?d`A0`ujD@Cz*+)dn{AA-P10iaWSmFDFX+wnuB%QTuq~Xxc zn^F!eS!qF)`!H8J%qL2X+ayJkTwm>h(e$Sv^{xXyU}=J5ItM8G_Q~|)9MnaWRttzn zYmi8RGqMf1(SZ5g9Ij#@$@lH2iE;!8Cd6n;U~*q2kmcS>ygkSjGp1^IRq=dkIoVy)R6ZckSv;78#^I~ET zbO$U5?J7gYoKpz57kR6rgNWIEep(V-DV2K?B%(bB0A|=3_xiw2a<9il$pTNeoBkP& z!kiiSd$ip}x_4hRCuQ%W(+|81S1DdsDX9{!c10Onl;L?*TU&(OQKOktXhNPJjwOf6 z{kd2o9=;`!+}&N$m?HM%awlbhOi^nGzm(mloT;Krj}B^Laak*qh*?CvG6aoPqt-IDR~!?RA{#;^nHmdt$dEO43$c9`VOvb}*eT1Thk}dD0Tyg{3J4U*qyfT9b9*KqRY*)#cza(5nTFo{ zVM?U*J8%ak#(h;~w}_erF)pD`olg(QK>9ryBF}K~I~4I)MOwl$fhWsE3~tt;nzo`w zlnxX$QI!W`!+i>!Vh(Q70$AcLhBi*ZbKcGd@`@B-$W!3K71r{K!uPBGxTvBP+HZ=R z%S>~#%brKyWuoS4_jbqhkNyf(Od1-gdoXvBS)H^v$&RLKzaE@9g3At{Qm`gK%5ztd z;bAE1ui0;_bh1Ds1=%T^e?+v2 z2p8NMwJ*ubp|VbbBywQ}yAoUe0vj6Bqah=_UFYEz1X&V;ba=sNhIhl}zf<99@w6ko zGV*@-B)u$W!C4jBPSk+Y;kHXU@`uO;LgoSio>Ncjq=4@|Ah6;utwe8SvnptjaJoey zcy5?hxXzhOP>c<)Y||v9aT9j*%1+$H-A0wSlO)MFIxtNhTa?D~*9Zmj@7Q4sp?M|Bw!X=1FJ01y~@*32w@*6|(%Y(y` zeE|XoRB8K^cbILK{-}RXddpze2@VZ;9LI9V)E*y*6VQ)hS9S;OquOnyP#QeqN9j{& z-k5(YBpGcvOlB`h8PiG)EonS-#YEr~5u(S7U=nFMm+UA<5zC9OX13f7pmg@2lqVnYDZh;b=y%h0wa09dgWB@d2?5&q~#cl{)q9?pKaX%Yr+3zx5 zi2`d(Z%O#h57`>CsT6~&g0SU2px=dAJffL|$Z^6p2U!40 z;IFUBgN;^590XRV!OwivrFlOUFkjT%m3e1>K&1685vj5xW^WDZywVj06e$jNz5)VL zgy=}X6sQ!c;?eIQpvk@|XmRiyNTs$OHOVkEh?1bE_2H0>+SxJv_I4j7CQ6b?4pr;x zr=Hh60c)#J*Dg7;EN?rfA}U@$iDIGnAF5BxSd6Aqd%~)-ZU`;M3yRS#-&LN>4HaVu ztU0UilA%_6Vstv^4FdeX1uuz(aK2-;X9&Dbm62lq8O56_A%su4ga2XSvxyx?3KT|= z0GQ4p#|?)=fzg|g!3X(({qz)1RSYe=zA}}c2|4$=lu2Ln5TE}U+Rq%3b{UBdL;S0| zlzEvvZk(8QA1On~`EUQR#c>#25klVFt-APS`}du8Yso1|yGlpD&N)r@g1FZg8*#D7 zTWhc^h+d{&u+(GH0yFXgH0`D3SV~Ej-W(C2>CYtY_0UEyO*&?j?=s*h*guOLbCJsF z@Z@fvL&LFaer1{1sfLZ5;Qwp71L{$#ID&(K=)wKF_u=?=?*kl-*(3gPlt?zoM|_E- zzw7dI(9-m`#S43s84tQ{%=aD-e;d5XcBLKalVqm|?Y<)Br}CE_^B14FNP-?-%hd$R zpj0%AkW!O&hLdTcGYk2M+m6Z>R))kogc!l;FE5FNzcyN-deF%mstSHR>h-3gBU)TS z6$N1d%&m+$9=RKI4te1_P62a~g^v6`)5eqaVM2U^jZU@UG;wQ}W?tY20(S||+<%>~ zClw8naZg^@ZAtVUBcbA#76?5m%QjH!H&xd9fnMQS1$iBF@ z;uNm@{4KusX88@Vo;>z2f00~v4`Yr0wIQ|Qb9SX6!J|(EvsO99B@4q~C~>l=6W}Mq z-NwZN>$Z+l50B22N+}r#4oQj=oyBJKX~J5=%QW`{je0ZYz;}9O_v$ zgQ6wFrsug4L0WcT(=#7nfJNaOAaEx1KkRKuYj%OcD4_-+=bfbEMzcMXq_kPt0m=#b zmV0QcUB2$^Ma)2wlg*P)zLu^v(Qk1JhadMPMv>ibzr8>_`+yHhx)- zk*o*BimHPej35c8kmZsUNFPI-p!wb6&NzUcK+b{8(G?swZxVka1k_d+KXa*Evd%SH z9?3^T(TPV>jsu_t#j5yt1(!Xj!CPl!rW$GqwA)F^4<1}}XRl|6(5K>o^_Irw4SEvd zyc#Y(b=SceT`QkNe^>tjUjE{F)SsFG)u_g)++P_&cZvXJSQ_)V=tziGlYTR>;U_6} z-`pAf&6yxKYnehANJ#h1z?PpRh4)L8EVk69V9CSVwSqJL+)p%u4D_V40S*(8fpXTL z5tP7ya@8kN@FD@y31Jg!zCws>V}O7leyQEVhRNB*)5g^KpUE_#Y5NsY1m(kT?)@vI zNFa$Yv22~y9C2lXMrM`3Nf)o7iZ!C-kmYFBL-*FQu;{$p{2hgRJZVjBHtuxv5w7=5 z;neSIVQ~ph7LH6%RzwwY{=z{os}E0Xom|TwXxKDn9ROlgXF1y2@$)4E%A|ExCvT;2 zc96W1qQlO_gXO03{jB{KyuS$;e<}7zhtbl0+G-RMb5|}DWUMfX24os*ry}-oE9rwL z7+?FUYQs*;(Vs-J(l+Cbv)`D!x#~FtXdwKk{Dw>=c>&SKVKoao+c~|z&yL!$`av#vz7XNL9dxZ@2W-X3jOY#!fxU~CAI*VZhT& zp~@CYR3XN+KTpv#?yMlDVrl`8sLK>7Nhb9!X~g~`5|D?NVqnDXe;?B85ZtlD3?sVF z#BfnR-sPFo^wY(+IoM0;Co{WOGD}Y}!32s?9Yx^!POI3`)}4 zjRAm%V6;KDh3re^B=7|A=>oG#(ul5#q8wLCM{D6kZAj$Z(qnZMR5iUPqM1XLdetK=kPBC0g_kh9rx>jd-{GqJd5=yzWl`3k z$;8fdSt1*s6sXlmWD%c`1|k5?M@M@}g8-UR;iHjQ&FFKBWab3~LHY&3q7~O#kLhSrS&SuJqOoSrm6W=Np!&2n$XfFs5-h;- zU9kQz1HiwKO-Zp$8>L*lAZ;kW=ipl@ANaDX+d5GX`jJ*{?N!)_;2Jm)_3OE-*fLR6 z0pTCmtLE=3L&p?9ce3DLzz53k^r?_C{j($>5+AFVU!Xxf>PI!i2VM|7NK2%yHf($$ z4G`T*w#Qp@1^6<@0QOvcukKAhJ<|Zx29!0kuo>RdD`!_JTd_roL7%ybk$L*EUfISl zur!azj60j6TTQ`}wK^xc&uBPxQvFKO9#X}jy!Hx{_>F})1QR-v?CSVqITi2NU{Dhc zo2qT_3-A|*aa);7?qP8~mRDe_Vvk1m4b_^fG*O1QOv%I6SPZAB9n#-U0zUvGp9LM< z`q7GG^^1YIZ{M*++6q=y(B9G#5bRSs)_gP4ULUulWx06vkKGoo?gHcxSvVfAwtn~? zSPb^&Z_&0u1{Bw#x>$X5X2j;5nVxHtq=hAOk#}J}-&&79V%?sdaf>o)zn$wzb?&js zZe@XOj`Y__~{$+e6>d*7OkBk!qaTceL&mtMdzc z9+7pqm+$-@_4nBZN>)tG8T5~PT|%^af_(P?s|Dn_0et=Yc@vi;39ZIL zNrpSd#BJR3SF1%f`xft=%=Y^WwzqeAzx9=kOAl;U7$d2iO!M05^ZK$dXZxH>cj0NoTsB7&`=EZhzY6SkGgO9KTWW zJ%}^!Lfbg3cUbkxMFM`)vJ|?3UOa1i3HS}8$NmYv``f7fm6A?q$b53CzX2qiGnU0# z&)=w?7(YRDoDUY|xAuM)EmOJQwV6|7^M12!C)a*77toH0#i;1-ZuwB7{Z1S2FHw5W zwN^K4Ab?2Ha|(p)!WB`rpDmk~Ms0L$T6p#(0G6%lirPYgmMTGDSaroDv-Ge?hQ|F} zmC=R_yq;UMl=`0+ER(Enjf%7|5bevr??d z0+un{?Uc_zb&aa1DS5w6^P0mF2yWPhUB59CF@QL1Lf1@m^oIN%8gxu$PB9k8@Wi@k*yuNrFYpd( z?~p&ryZuvCnIfPNsoX9S@Cw~vi|BSJA!L+cuDoZ-$KDCX!^;{NJ0F;YFvV~iwOrDm z-l@kEW)n3&4~mHt2Fn=UZh$S!+~roW*Z_UbMdq!gnz$Z8RLztIE*bPW8KwSElg?TE zgrtErW4-4KZ!og6pv@ZXsyzi2M0^RnqQb@Nh6diOWcA^*cvqx&1iT*!Cm!;w=4o5* zL9{llR@YvBt7_IMnEc_RLDc#hCJ<{E^Y==}-r9yF5F$PEGM5HW%$)(*Wkd2HzX1yF zZerDZ6o;*W(7k8yPo4KqxpIGrU@8ihiKJNG^kPSP;tpO#AE>gI2jB>8EYr1m;dQLx z{VN+iY6`Eva3*I*d*}i}as)(pelwX(=3@2%Qto(6N##wNZjYlxkfqtsR&{ZV-kK~S zII*w;Ekz&}+ELI7cubW#7N?50fO32b(UjFzTow%We7RptT2Mmh+&=j8!thJS0o)Mt z5?WxsacD$14t8|{^r8(F5(}%-%$h4PZo+fHp{$xh$Ilx2Qhd`hX*;3fab2`I;;59Raf zRLVOKD;c8AVrAU<;UqUj}xw{u~sXsu?E9xr!=hn=cc|b#}S`JGa@Hdr%VguL$U3q z(~Etk+T_KSHs6}5oy!jhVGh0OaKuv+NrNczrLa*?NZ4zrBv&oyr0D#pw%L7*bCdGV zgghxWJp1cc?=`~84at-v{9(OUea-|8#IL*iRr#`Wrq3#?LiNpM%O-PsTJQsgTR>*F zgW8>a6gc5|RXkz>M=S2n(njl01u~&1q6|X*APuR><$Dm;KD7eSxw;4;{~7n#?VgZ=u2(>k#aTFn+!haZjrwd^WeNJJoCTHN zPoeF6nzqsJmO0gR%%6k}!dx}!qs`a83j=Ked zp81S9QFT-(ufQ|qj88V-GUQS`Q^Fs{tDj@JIVjlY*b zBQ{~{{6KDu?CkXy-fCQA@T2OY7h-=7;d))Fhp#&q7(gvqLx{(IoqW&d(=XOQ_7KP! zvgg+>3Y3${=O+Z6n*QX^fmzC6X+u=2zU0Jixb|#-27YbjUJlVLDQlnDN!4%SqUu$g z9Og29iQfPm{8Vl%-<&Yj{VpI<5|6kRNN`ZhCZXVH|=~7?H?T{8QS&BZEg{s^(Jc{AIPs% z?j6<<2wk4cyDrzvgY`S59cVj{j(|t`9vpy)Tm^rG;Uf=*S;kxEjXKV-L zSnj(^on987$4d$T#BZ){`6lT^``L7#XQ}Z91}9T(czfG*JK59r59bhCL!60Ke@gv;qDn}^OYeSuC7U-Ty5BhA3#H0hZ%~1g zqP6WCVAet^R38?o!`uQY^0cj%4(je`o;Z+n$Y}%Y%&HF>Hp% zZ(LqVdC^@uxSv!7Py>g*STAdeS5OT*`KZ3859Gw#?%@11P%XD_3u;VLUHAaQiKYxn zk#Db)wyiq_Sv7c6WI}`UJu(aUlB3)s^X0U$)MyJg1))*_Y#n#_Dbomixm*4C0gH2z zUQ>-J1E! zpTBC*GUFk~iM(sA^a=MveYyi2zZ1QAIp)F>Wq*#WdQAJ<&fPfr>Q>bxR!A2kbxu~fY8F(2xf`SGDb4{DQrm!gBxh5Qx5LHthi%N za87VfAMRF$s_8Mkv9AK|Z`;ms9~oJjdXfG30&&}=h*}7(|J|+~iRu|(yqExW#j~8+ zm({X}$B`spjOo40Zhe)z)d`wmSZUjsEwCrz8BoV$4K9`ci??RZ3#}qov8DX+8Dx(% z%#>Ri6K?HLD&8OKtThS@1$m5SU&~im-x*K106~zjp*2R%I{tTlSeVaqx;S_-j$rh7 z09*F`gUO%#gg92#=ZjImzBx^8DtINs2*@D@&XH9wF44H-kXgf~cxVHWqefecqo(|; z?smxh+(9#R<0!clvImSu``em;}!DeE7$dtR!c_?A|J6Z=Qc+(whyWl><0 z%k8Z(sOO5#jYKIk_9qtK#+S-dMSS_(6v0rh5z$7_II1Tx_EnPsCn_FBYM}W_t%0Ub zFF|0entv!Dap}i#*^6h+RgbL`c1Z##P{Hd~Be1^v;g+xRfJ?B{-L&OLKpo&oigXNW zY20$3y`)KjaKzSEUHbe%Y{YcAmL>>z5%|{cPnsfvdRC9s5M9rIdXj)JVyLNIvkEZ+ zcPLY3Z7%Th+aBmFz^-p7M9JSzJ`okQa_5ysy!XQ*p`jtV&mR*BT)XAyF`>vV|7d=0 z50pWG5P@NE&nU{Mt~;Fm^VEu0x)qm(Yj!R^#rL}H_*f-&f&5VlfrJE}gD;5KuD~B% zLxq$b2$d_94vPND>hRN8f^A^x@83L!nHj~FfffR`+J#h2z}RaO<2H$n0*B|)^^6LM zB57djITx!ztRg7e6}dwm4=7u=PJ7S-3ki!fyJv$6CVxM@B!z{54I}8!yPQR%au}@1da?0NwG(p|I zFu5lO*e@|4U*^dIO)zaCCp;ciFfBNia_9e-1jl0Sv4T<8vcN9S+7$WFkdJ+=eC|s0mk{RAnm#08y z>e2AT1-Zz?)`vvi2X^CJ6JD~7=^{YeE$)fWpG6k!F*9V4dtE5v2ndL>et#D%w!?ef zgel7C8CW`*KOi*ld!XcW-~p_nqpKhiD?jKM;*vmmY-m83H4K-Qq5={X$7<+A9VK@u zQc+-&3k2u6;m3_MC+aK=v!*;uvZgF77!9$=i`fV>;4@N=c076O2aW=3AdUevQ8SPte`xslG(( z3fZmrHB~9BAXe_+#Ex8Gi^h4=>xfT3>}tPm{uShoT!u2{h#=&bk~z`JyLQTnt@xG! zE%^Sw+d)&mvf}OOg029ruV%A2bD=Oea;X@!<1Z7Bg7wriw4d}>#}#(^{}wuSb|*8` z&uCBY8r-&Bb$JW38a5!jsl>P~`1oj__NHV4j*M;@($_30Ilm zL|WEp53zIi0UFgE_kuMnwaeK(F()44{C&)ostLzQ4EuZYXlSFaZO@Gs3hV7!pu$Fa z86sv$RuXU`>B47AFn``Hw33IC2eD`c;S`PrB5?xo`!&P1LrJvF8kJWg<9X4uJ%vmA znFomtaax4`T9yV~(APUw4k#mi(?-l6(?%vKE^HR90aS>PExW={Y8t`w(R~D~4Fvl$ zS=5deI$ZJ+(@n;nqhW%FlfYS1;#~hQ$}#12>Gwwsp^(Li^F(wQSychYQ6JVPJ^S@(zI?)bMj!)x~%j43FIh%10hh2ZOV22JY258dQkj$^>RWySR0T z2XaU^M|v2CY9CB)-#L0r-zvwfdh~&h^~ycI1SfcVl0~sX5Q0 zXpv)ZG+<-4D3+6^JrYl>8$0*GC5Xcb{=B114)c0v#cM;0H75_m*^K^K8l=qYY-wKS zWd0n3a^?f2q?Zurqi9$SQ_&08_F7OdUdDxAU;;!*EO=%vEv?_VnKfDGbKNJi0vC$$ z0!%r&Mjb39&3}i3Bj$^u*)9^yqnQWlx(KLZ8|G%*;O9WJa`U*quh;Ru_+IilNKUO| zm+6t7@D6Ak(W}HMW#Dya-Ry|xG=iQvK2Q|WnNMY&Pg4(HKX_~h&$kSBMOa{<7*)DM zVgWxIQut(G;OL7Fneu;L_Q9y;n>hVe0LXuYk}$Doti{j%oU7;H&&IH|tsa!SWi?;L zZ#D|C@zx{z#c`3=y3B|ur_f+Er|o9NqO^8kC?+WpGxeto7SX11(_h|%QSAXlP=3Mi zY&H@jcgufYK)YIn+blQ$Mb|xcvG!q9i?cL_TQJf~1|{@6Q=g;09_Uuw^!4u%W`M%b z6no6gA{`lyYDLO+Y^jjb&A`b*GvD-G*f#dl_{POn%zJD%7r+|uwow_dow*Ui!t{gv zGhx-K;)l=v3;Iamu&#l0xO-C+ADf;K{0pDrWNS|f`(7D=#ptK4!2<7MLW)Ho=~NB? z|I(tt*RL(#=7K!Oa9s*7Gv)Dn3c&n=Z&M~G_X@;0^n<#>$dQvl(VEX(9q$+a{?9nn zVRs~?+AH6qXh$j$@qXM;v{=E9%d3xv{^6~5YSV?|Hz-=bljauVhi|BT??=rZ{fD@b zR?l;`$cMf8XZ9zGjwWZlii_5Xx)6i6$KDUY#RMY#%RqY6$>A+V{?xHyJpjot2*TiD zaV&8g$SFPw%J<1|i+8C70=e;;LDkw&fu_hp>FHF;a`o5qx8C$yh_TM_37>U zRuP2%l(QbIi0*|$geB?%b68bLc1G0_GJG(SQw6UCq(()!!$IPS;esi+zIK7!cc{c@ z;sMIBEp(Wpm?r&61TPK%6xclBk|Ui<{rws~0&#z7l+%?19M&s1CEfpkl@>IAIWM** zP*pjgfaVEP!^lmDxX`X+BKbmuLwqO3pm3v$9J0&8l}73l`B%aoiVs2#y+aHp9!Ndi zyzL|6_ir1x4{TxvfiuGf;edqpaiLluKS| zWSYcx`5?8)n;rJFv&-z&C)HuSHLQO4<2LNoT9?~A&+jJ=?_FX35@F)CQkUv2V6aBU zJMMOZ)HPT$JfF@MW=h{g_L~Fa2wuqkDGqhs@aQ}u6>l9T-A-v>VOw%J!;7>i6dBb3 z@8dQP5H#i;sQL)g+@rzGpyk$dv2zz|@{atEIUVBWA*8JSS%MlAAlJ`~F}MZUEjC)O z_hODu*6^+5T!a8dJ+U)nzlx62QaVqsyVJ6LF$PxfFbilf)k>~KByr#y#A(W)iZKPY zA7H}4WE!8>?6X%LXHK7#q23sb(P%is+ukXYN?P&fZ=N;eYO*1}R6;0oQr?%_Ekm1S zPzVmTFSqLJOWMk3fS9(P$T}r$keEQj2uRJb(!v(-7c25S^n`lU(k_=paPEHP01!(= zBy*CFd+nLNH_u!RO2zN1>aB{!EvlU6LELSzMFhVT<|ooxVs~!Bo{V4LRyFSBRxTnz z$Izx==7nu5>o)?%cBj0{)*zIIHsI*2&i~kY8-R7&Gi5B5i5Wj&LNPl`hmeYe)ZY*a z@gL$RN{FyO289qod$tfqg+p9ddB5%YVLRc3s|Eui`hg$M@2#0a0wPr=71= z)lzzAa+Ag^M*`LE7&3?L$C|K^V{UZZTn8bnmTR}C!KfX!XEIYnCXj)2MQOUnx z2$orV!VqE%qAJYd7({aN4O`)Q{gfJSL4>5VH zX%f!}?fI8B!(;52+q4w}PklBuMU;&BMc*)%cs18H9&^PeZo?tD5oCz#< za8#PC1C3I=qN!4;O_L9Rko8&nfl24@A3YS>wH&gy=~!X+q_>0;bUXAX2RfpUXIBvt z@u__sj))Ou>sJI{Xjb!ZY09&ie)KccT!%!qL5dxttPZjY4`v&t!XLQVQ?d4{Gs!I` z+3|a`!zx-L%2fuMsl#r|3Y&{y9topxKbqS}B|Gya(w;TY3~VhXeOP3Pj^8`Np97T55ggxgKZF)D1^3>z^`$?U_Yea~=`-c==b|v7g{TVL2?go>svU;6FnM12mNT z4ma_2+{D1i)W(?!C@hbO?>veu2J&S+r-cInLH=4%|C_FXXL6(jDTE^z;$KhWd>y~W z`)}b_ju0M5BTtY2-_Y`3p#KMu2Xv69Blv&gf&Nc`GtNKJL4gzUm<0c&u>bFuq$&Ih zLQ}vb_%Bi5e}lSo{{?A&f&P1<=6{0*EdK$4asX!)F}{uwpnOpd{!g;D{kMqo-y$jn zJTMHme+69s3T(dw5k9~O1qy=yeb(UryZ{8mDHu4WKt%9g!yO37m;LU4B!vhdq@pmG zMix*?k%ZuX|H%Feq|E^aE0PlYvy{nw>D?3z1O)ZJrC+%pdB8qJGJ^j*Grz|3pI_mB Z)1Lw$s1hC$8VDLl_SeYv6#rB7{{h>Yh@t=h delta 10962 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 z 0: rhos[19] = (S_Ca * co3 - Ksp[0]) * f_dis[0] + else: rhos[19] = S_Ca * co3 + if X_struv > 0: rhos[20] = (S_Mg * nh4 * po4 - Ksp[1]) * f_dis[1] + else: rhos[20] = S_Mg * nh4 * po4 + if X_newb > 0: rhos[21] = (S_Mg * hpo4 - Ksp[2]) * f_dis[2] + else: rhos[21] = S_Mg * hpo4 + if X_ACP > 0: rhos[22] = (S_Ca**3 * po4**2 - Ksp[3]) * f_dis[3] + else: rhos[22] = S_Ca**3 * po4**2 + if X_MgCO3 > 0: rhos[23] = (S_Mg * co3 - Ksp[4]) * f_dis[4] + else: rhos[23] = S_Mg * co3 + rhos[24] = X_AlOH * po4 * Monod(X_AlOH, K_AlOH) + rhos[25] = X_FeOH * po4 * Monod(X_FeOH, K_FeOH) + rhos[19:26] *= k_mmp + + ########### gas stripping ########### + kLa_n2, kLa_co2 = params['kLa'] + KH_n2, KH_co2 = params['K_Henry'] # assume already temperature-corrected + rhos[26] = kLa_n2*(S_N2 - KH_n2*p_n2_air/mass2mol[1]*1e3) # M/atm * atm / mol/g * 1000 mg/g = mg/L + rhos[27] = kLa_co2*(co2 - KH_co2*p_co2_air/mass2mol[1]*1e3) # M/atm * atm / mol/g * 1000 mg/g = mg/L + return rhos @chemicals_user @@ -545,7 +655,6 @@ class mASM2d(CompiledProcesses): _kinetic_params = ('k_h', 'mu_H', 'mu_PAO', 'mu_AUT', 'q_fe', 'q_PHA', 'q_PP', 'b_H', 'b_PAO', 'b_PP', 'b_PHA', 'b_AUT', - # k_PRE, k_RED, 'eta_NO3', 'eta_fe', 'eta_NO3_H', 'eta_NO3_PAO', 'eta_NO3_Hl', 'eta_NO3_PAOl', 'eta_NO3_PPl', 'eta_NO3_PHAl', 'eta_NO3_AUTl', 'K_O2', 'K_O2_H', 'K_O2_PAO', 'K_O2_AUT', @@ -554,8 +663,16 @@ class mASM2d(CompiledProcesses): 'K_NH4_H', 'K_NH4_PAO', 'K_NH4_AUT', 'K_P_H', 'K_P_PAO', 'K_P_AUT', 'K_P_S', 'K_PP', 'K_MAX', 'K_IPP', 'K_PHA', - # 'K_ALK_PRE' - ) + 'k_mmp', 'Ksp', 'K_dis', 'K_AlOH', 'K_FeOH', + 'kLa', 'K_Henry', 'Ka', 'cmps') + + _acid_base_pairs = (('H+', 'OH-'), ('NH4+', 'NH3'), + ('CO2', 'HCO3-'), ('HCO3-', 'CO3-2'), + ('H3PO4', 'H2PO4-'), ('H2PO4-', 'HPO4-2'), ('HPO4-2', 'PO4-3'), + ('HAc', 'Ac-'),) + _precipitates = ('X_CaCO3', 'X_struv', 'X_newb', 'X_ACP', 'X_MgCO3', 'X_AlPO4', 'X_FePO4') + + _gas_stripping = ('S_N2', 'S_IC') def __new__(cls, components=None, path=None, electron_acceptor_dependent_decay=True, f_SI=0.0, Y_H=0.625, Y_PAO=0.625, Y_PO4=0.4, Y_PHA=0.2, Y_A=0.24, @@ -563,7 +680,6 @@ def __new__(cls, components=None, path=None, electron_acceptor_dependent_decay=T k_h=3.0, mu_H=6.0, mu_PAO=1.0, mu_AUT=1.0, q_fe=3.0, q_PHA=3.0, q_PP=1.5, b_H=0.4, b_PAO=0.2, b_PP=0.2, b_PHA=0.2, b_AUT=0.15, - # k_PRE=1.0, k_RED=0.6, eta_NO3=0.6, eta_fe=0.4, eta_NO3_H=0.8, eta_NO3_PAO=0.6, eta_NO3_Hl=0.5, eta_NO3_PAOl=0.33, eta_NO3_PPl=0.33, eta_NO3_PHAl=0.33, eta_NO3_AUTl=0.33, K_O2=0.2, K_O2_H=0.2, K_O2_PAO=0.2, K_O2_AUT=0.5, @@ -572,9 +688,14 @@ def __new__(cls, components=None, path=None, electron_acceptor_dependent_decay=T K_NH4_H=0.05, K_NH4_PAO=0.05, K_NH4_AUT=1.0, K_P_H=0.01, K_P_PAO=0.01, K_P_AUT=0.01, K_P_S=0.2, K_PP=0.01, K_MAX=0.34, K_IPP=0.02, K_PHA=0.01, - # K_ALK_PRE=0.5, #!!! kLa and/or solubility values for gas stripping #!!! precipitation kinetics + k_mmp=(5.0, 300, 0.05, 150, 50, 1.0, 1.0), + pKsp=(6.45, 13.16, 5.8, 23, 7, 21, 26), + K_dis=(1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), + K_AlOH=0.001, K_FeOH=0.001, + kLa=(3.0, 3.0), K_Henry=(6.5e-4, 3.5e-2), + pKa=(14, 9.25, 6.37, 10.32, 2.12, 7.21, 12.32, 4.76), **kwargs): if not path: path = _mpath @@ -603,22 +724,51 @@ def __new__(cls, components=None, path=None, electron_acceptor_dependent_decay=T self.insert(11, _p12) self.insert(13, _p14) - #!!! add gas stripping + mmp = Processes.load_from_file(_mmp, components=cmps, + conserved_for=(), compile=False) + mmp_stoichio = {} + df = load_data(_mmp) + for i, j in df.iterrows(): + j.dropna(inplace=True) + key = j.index[j == 1][0] + j = j.to_dict() + j.pop(key) + mmp_stoichio[key] = j + mol_to_mass = cmps.chem_MW / cmps.i_mass + Ksp_mass = np.array([10**(-p) for p in pKsp]) # mass in mg/L or g/m3 + i = 0 + for pd, xid in zip(mmp, cls._precipitates): + for k,v in mmp_stoichio[xid].items(): + m2m = mol_to_mass[cmps.index(k)] * 1e3 + Ksp_mass[i] *= m2m**abs(v) + i += 1 + pd._stoichiometry *= mol_to_mass + pd.ref_component = xid + + self.extend(mmp) + + for gas in cls._gas_stripping: + new_p = Process('%s_stripping' % gas.lstrip('S_'), + reaction={gas:-1}, + ref_component=gas, + conserved_for=(),) + self.append(new_p) self.compile(to_class=cls) dct = self.__dict__ dct.update(kwargs) + dct['mmp_stoichio'] = mmp_stoichio stoichio_vals = (f_SI, Y_H, Y_PAO, Y_PO4, Y_PHA, Y_A, f_XI_H, f_XI_PAO, f_XI_AUT, cmps.X_PP.i_K, cmps.X_PP.i_Mg) dct['_parameters'] = dict(zip(cls._stoichio_params, stoichio_vals)) rhos_masm2d = lambda state_arr, params: _rhos_masm2d(state_arr, params, electron_acceptor_dependent_decay) self.set_rate_function(rhos_masm2d) + Ka = np.array([10**(-p) for p in pKa]) kinetic_vals = (k_h, mu_H, mu_PAO, mu_AUT, q_fe, q_PHA, q_PP, b_H, b_PAO, b_PP, b_PHA, b_AUT, - # k_PRE, k_RED, eta_NO3, eta_fe, eta_NO3_H, eta_NO3_PAO, eta_NO3_Hl, eta_NO3_PAOl, eta_NO3_PPl, eta_NO3_PHAl, eta_NO3_AUTl, K_O2, K_O2_H, K_O2_PAO, K_O2_AUT, @@ -627,10 +777,12 @@ def __new__(cls, components=None, path=None, electron_acceptor_dependent_decay=T K_NH4_H, K_NH4_PAO, K_NH4_AUT, K_P_H, K_P_PAO, K_P_AUT, K_P_S, K_PP, K_MAX, K_IPP, K_PHA, - # K_ALK_PRE + np.array(k_mmp), Ksp_mass, + np.array(K_dis), K_AlOH, K_FeOH, + np.array(kLa), np.array(K_Henry), Ka, cmps, ) self.rate_function._params = dict(zip(cls._kinetic_params, kinetic_vals)) - + return self @property @@ -653,4 +805,18 @@ def set_parameters(self, **parameters): if k in self._kinetic_params: kinetic[k] = v else: stoichio[k] = v if self._stoichio_lambdified is not None: - self.__dict__['_stoichio_lambdified'] = None \ No newline at end of file + self.__dict__['_stoichio_lambdified'] = None + + def set_pKsps(self, ps): + cmps = self.components + mol_to_mass = cmps.chem_MW / cmps.i_mass + idxer = cmps.index + stoichio = self.mmp_stoichio + Ksp_mass = [] # mass in mg/L or g/m3 + for xid, p in zip(self._precipitates, ps): + K = 10**(-p) + for cmp, v in stoichio[xid]: + m2m = mol_to_mass[idxer(cmp)] * 1e3 + K *= m2m**abs(v) + Ksp_mass.append(K) + self.rate_function._params['Ksp'] = np.array(Ksp_mass)