From 9751825ed730b2ddd1b4af534393be7b8cd87ad7 Mon Sep 17 00:00:00 2001
From: m2049r <30435443+m2049r@users.noreply.github.com>
Date: Sun, 13 Aug 2017 21:45:29 +0200
Subject: [PATCH] stack size for background thread set to 5MB (monero dafault)
so no need to use heap for slow_hash recompiled monero without USE_HEAP
---
app/app.iml | 1 -
.../service/MoneroHandlerThread.java | 161 ++++++++++++++++++
.../xmrwallet/service/WalletService.java | 33 ++--
.../monero/lib/armeabi-v7a/libblockchain_db.a | Bin 1741352 -> 1741352 bytes
.../monero/lib/armeabi-v7a/libblocks.a | Bin 2762 -> 2762 bytes
.../monero/lib/armeabi-v7a/libcncrypto.a | Bin 309482 -> 309642 bytes
.../monero/lib/armeabi-v7a/libcommon.a | Bin 3874030 -> 3874030 bytes
.../lib/armeabi-v7a/libcryptonote_basic.a | Bin 4261872 -> 4261872 bytes
.../lib/armeabi-v7a/libcryptonote_core.a | Bin 6262340 -> 6262340 bytes
.../lib/armeabi-v7a/libcryptonote_protocol.a | Bin 555366 -> 555366 bytes
.../monero/lib/armeabi-v7a/libdaemonizer.a | Bin 364970 -> 364970 bytes
.../monero/lib/armeabi-v7a/libeasylogging.a | Bin 501374 -> 0 bytes
.../monero/lib/armeabi-v7a/libepee.a | Bin 825878 -> 825878 bytes
.../monero/lib/armeabi-v7a/liblmdb.a | Bin 92212 -> 92212 bytes
.../monero/lib/armeabi-v7a/libminiupnpc.a | Bin 61546 -> 61546 bytes
.../monero/lib/armeabi-v7a/libmnemonics.a | Bin 2173426 -> 2173426 bytes
external-libs/monero/lib/armeabi-v7a/libp2p.a | Bin 1313846 -> 1313846 bytes
.../monero/lib/armeabi-v7a/libringct.a | Bin 982390 -> 982390 bytes
external-libs/monero/lib/armeabi-v7a/librpc.a | Bin 4127376 -> 4127376 bytes
.../monero/lib/armeabi-v7a/libunbound.a | Bin 1004204 -> 1004204 bytes
.../monero/lib/armeabi-v7a/libwallet.a | Bin 17050444 -> 17050444 bytes
21 files changed, 177 insertions(+), 18 deletions(-)
create mode 100644 app/src/main/java/com/m2049r/xmrwallet/service/MoneroHandlerThread.java
delete mode 100644 external-libs/monero/lib/armeabi-v7a/libeasylogging.a
diff --git a/app/app.iml b/app/app.iml
index 25bc19b..b6bdf79 100644
--- a/app/app.iml
+++ b/app/app.iml
@@ -89,7 +89,6 @@
+ * Causes the handler thread's looper to terminate without processing any + * more messages in the message queue. + *
+ * Any attempt to post messages to the queue after the looper is asked to quit will fail. + * For example, the {@link Handler#sendMessage(Message)} method will return false. + *
+ * Using this method may be unsafe because some messages may not be delivered + * before the looper terminates. Consider using {@link #quitSafely} instead to ensure + * that all pending work is completed in an orderly manner. + *
+ * + * @return True if the looper looper has been asked to quit or false if the + * thread had not yet started running. + * @see #quitSafely + */ + public boolean quit() { + Looper looper = getLooper(); + if (looper != null) { + looper.quit(); + return true; + } + return false; + } + + /** + * Quits the handler thread's looper safely. + *+ * Causes the handler thread's looper to terminate as soon as all remaining messages + * in the message queue that are already due to be delivered have been handled. + * Pending delayed messages with due times in the future will not be delivered. + *
+ * Any attempt to post messages to the queue after the looper is asked to quit will fail. + * For example, the {@link Handler#sendMessage(Message)} method will return false. + *
+ * If the thread has not been started or has finished (that is if + * {@link #getLooper} returns null), then false is returned. + * Otherwise the looper is asked to quit and true is returned. + *
+ * + * @return True if the looper looper has been asked to quit or false if the + * thread had not yet started running. + */ + public boolean quitSafely() { + Looper looper = getLooper(); + if (looper != null) { + looper.quitSafely(); + return true; + } + return false; + } + + /** + * Returns the identifier of this thread. See Process.myTid(). + */ + public int getThreadId() { + return mTid; + } +} diff --git a/app/src/main/java/com/m2049r/xmrwallet/service/WalletService.java b/app/src/main/java/com/m2049r/xmrwallet/service/WalletService.java index 6528301..7fd17d2 100644 --- a/app/src/main/java/com/m2049r/xmrwallet/service/WalletService.java +++ b/app/src/main/java/com/m2049r/xmrwallet/service/WalletService.java @@ -21,15 +21,14 @@ import android.content.Intent; import android.os.Binder; import android.os.Bundle; import android.os.Handler; -import android.os.HandlerThread; import android.os.IBinder; import android.os.Looper; import android.os.Message; import android.os.Process; import android.util.Log; -import android.widget.Toast; import com.m2049r.xmrwallet.R; +import com.m2049r.xmrwallet.model.TransactionHistory; import com.m2049r.xmrwallet.model.Wallet; import com.m2049r.xmrwallet.model.WalletListener; import com.m2049r.xmrwallet.model.WalletManager; @@ -131,12 +130,19 @@ public class WalletService extends Service { public void refreshed() { if (wallet == null) throw new IllegalStateException("No wallet!"); - Log.d(TAG, "refreshed() " + wallet.getBalance() + " sync=" + wallet.isSynchronized() + " with observer " + observer); + Log.d(TAG, "refreshed() " + wallet.getName() + " " + wallet.getBalance() + " sync=" + wallet.isSynchronized() + " with observer " + observer); if (updated) { if (observer != null) { + Log.d(TAG, "refreshed() A"); updateDaemonState(wallet, 0); - wallet.getHistory().refresh(); + Log.d(TAG, "refreshed() B"); + TransactionHistory history = wallet.getHistory(); + Log.d(TAG, "refreshed() C " + history.getCount()); + history.refresh(); + Log.d(TAG, "refreshed() D " + history.getCount()); + Log.d(TAG, "refreshed() E"); observer.onRefreshed(wallet, true); + Log.d(TAG, "refreshed() D"); updated = false; } } @@ -267,7 +273,7 @@ public class WalletService extends Service { // We are using a HandlerThread and a Looper to avoid loading and closing // concurrency - HandlerThread thread = new HandlerThread("WalletService", + MoneroHandlerThread thread = new MoneroHandlerThread("WalletService", Process.THREAD_PRIORITY_BACKGROUND); thread.start(); @@ -344,19 +350,12 @@ public class WalletService extends Service { Wallet aWallet = loadWallet(walletName, walletPassword); listener = new MyWalletListener(aWallet); listener.start(); - showProgress(95); - } - Log.d(TAG, "start() notify obeserver first time"); - if (observer != null) { - Wallet myWallet = getWallet(); - showProgress(getString(R.string.status_wallet_connecting)); - showProgress(-1); - updateDaemonState(myWallet, 0); - myWallet.getHistory().refresh(); - if (observer != null) { // TODO this could still happen - need to sync threads - observer.onRefreshed(myWallet, true); - } + showProgress(100); } + showProgress(getString(R.string.status_wallet_connecting)); + showProgress(-1); + // if we try to refresh the history here we get occasional segfaults! + // doesnt matter since we update as soon as we get a new block anyway Log.d(TAG, "start() done"); } diff --git a/external-libs/monero/lib/armeabi-v7a/libblockchain_db.a b/external-libs/monero/lib/armeabi-v7a/libblockchain_db.a index 875ed7d40d18d6c00c07c18828a21ab7411c335b..a3c17e0b1250f955638322844ce9f9dc2ef461a4 100644 GIT binary patch delta 150 zcmZ3nBx}WztO?TWMrJ1Frk0kCO07zaTa}ouvO+{mjoSaQG669&5VHU=D-g2*F*^`* z05RwGf2>?D^&zUwOxxd?ase?n5c2>rFA(zqF+UIs0I?tt3jwh(5Q_k@C=iPQu{aP* N0I}ruccxNSF#zW_IUxW5 delta 150 zcmZ3nBx}WztO?TWhL$F#Mg~TWO07zaTa}ouvVuhnj4ju`&TMGZ3=?F)I+W0Wmue za{w{t_J6EgFZCg+P0icinQ{R!HxTmxF)tAF0Wm)i3jnbo5DNjZFc6CXu_zFW0kJp` OO8~Lt_IIXIRxtqEgE_a?L8R0pQIc(-+$C-;q(`s+3co+D-%x^QFbUu-fW7|jL z`;Bd^e9H6J=!Y)VkwS*Q^;qeqTMidu&};dvvfc1gWDgXA{)%N+;Sa!Pk+}SDX?FzQ z13va0Y0W2cliRWNg!9vyYv8juv6wj~`31-ND~uxK8)Sn6(7bj?t?rQVO;EhR^o|m!p)!Gi*L61e6iiXD(=9^=86k>r?IqT|KZXi zQWq&kdO3Tz^a{!4K2CB-p8rPU?Nh+MwfLLV7mHMEy|`cZBAyK-p{eIr>~#I-3w@m2 znsILFVf{Md?F9ND`pIv;5IuFcaQ@+Mp1p0aw(Yy)Bkl;_!FD-Fc-PRK`$o+{_}2CC zZudiSLTu%z;r=~+@8!GZ%De2{lDfn&7@x!L_+f8cyNq@BFg}$1g$-O6a+SX^u4@{f z5V9Z@=l7c#tJ&<&w)5_We})Ws*Rj&InN7rH96R&!o9Lr7bW0wFe~z8mOn$9dzwjHZ zVN-r1zkf^~y_3&T?@seB#=EurKFPZ__u>39V4vr?^66a<@18K_7<=45?!#Eh{bT-f zm;0Q5zl8gvex8Np=f}>(xmTTn*~R^YpGUtvKglQZlCk0!U9EpDjE`+T`CakPm3@Y3 z`02X0A1=J?9xn9$4zVQ8;Zmm$GXj4_7}H;aPd3Y+$nW8-_-KDYV{#*9H9lQ_KgKnc z`Z7M4$~d{!_#pGe3%r}3WQ~J-=d<2;?(xg0tYEAK);L$o-${Nihi8|O7G|@h!w)(a z9Io=iDc=UJ3En--^F_#-M|pPBA00NbNP0>%Sr*{!gwMkX$}M$s#pU3pJd3)2QgV?s zlB-Luk{o%k-O5$@WaaZ+=I8y0FF)m%y^`lDzl8g;>_lEXN|~U)S27d3W%2R|Z6RsA zYpv-a@@aiK=h6=3fc(D8x#oP|?;+qyKG=SnN12cEOyvdZ0ObVFzE@ilY6tRgxoO8i zBM&?LzFd_3a!KnTzm2?(__)hPlkdxu3-{;O`hH#cj_rLNFVT wDh$qXo zM7$!~)}Vu44(L_K?| e_n2qRMt*=ep;Kgcef z2Mq*s09+s7_b2^42mI^D{Hv`Kv$E6bd&HZ8r?ugYtRu`ucXau<%KsgvJ9Z?$TpEDx zw^Qe@`}KzPnflA-l`hzxQD0U1 Y}-_a%_DfwtkaH5@waGqt *-Vv7jIoaa`&+WJms$q?B-rFMYfxGCW!O3fwcj>v*X9=*ESyy zTW=T-#RB{h)S0#V@;SR!P@^v`4@VtOPKlT8JVZ3G?}N{C3y5(fU0`-_p7eyDGF&G> z`elfD)=ww7z5}A0xeV{FCB;YwnA<3&NH0V17f5GG&y$`bJxMwVv5s?n%zySM*DsNd zkTSf}db;8~v@WUVM@bKn;=l~90Y_+)l?~D%%z4}0_|qL)j#cjsCyPg^Vn^tr(&G zjA>$LZo3@kJFTl(H$a9-?$-M3ofLD3B#Btf4wb{FZe>I?bw7Gxo0$*U{yvHC^!ePT z!qeCX$%zLGT^Z&=%r!ilxq2P+xzvKv^X`JuDdsh@X{AH0jyWVBEOUwjz}ZY5TV89R zDasw?nVnM@7?c-ZKEpNcJXlx)52`&Ifg?L*VceUOJ^WyV_0I>rxdiuG|2z)7CrDoc z50zJ2G`~@K*@GLgYhK`a+QH6&=Mu=! |vRYzAKkABDa{ZAO@vS|jgo;?H2j6EZ}Mm9-~YYI6jd&KgwwP#-7oot!2 zS?c3nwv6(toXX3V8Rlwbifow;v}Gfy)|OE|*)mDqSzG2yJd E25im$GL%{CS|} zgSIWgS-zPA
&wQnVBo~JK8+v~xy9lrxOmR4c5mwk6OzNyd&&QaHwhxkys;+Io* zHXnCRl{!5Ay7(;m^kwp%$G(3dv58m@Pu|$r@Sor#x)xvA`GBqTvXA@A0a~2*`R;7s zS>Atk6no<+Hp}DghZvKdPsOg;A59?t64`>}#q->saw_sqbb8c>u_Iu!JVTx(J`R$# zqGQDADAdj=|IpXfj|XtF@Lmb%c?)m1pZ`w(s<;d3Tk+hIq}PAK$&NAgx7F#kKdsI4 zF2AhGE%Wa!|5 MB9 G!kPH)n}sm`%Sw?%PO`%jzdP4sE{&ZJ>8RSoN131HpI4 z=VP~!?)8&=xG&Strx7?0Vf!d;C!OH;QzY3nInn`=Y@Tth1OBreT(^-nld^h8+DQ5_ z)hj(lQl9O8p7Z#D&0Y_1bDZ0Ynpbr=xBK?XBgU62T!V2Bil >?!aOUW$8^-IR?y^3$+bj4om(1Vef!=3;{-?AZID ziHXxY*&FkCr@5=frNQX~K2Cm&TNpmpHe9B7kR)+?W?n42BFEl{O{IlgyRd5vOvXUm z-Bjp8UR{0yUk$c{d>(HkMp1SRzMZqu?~;$fJqpaL7srt&S@6^zg*f~~oYZ^b$P)P` z*{`6OJcIY6@a>~6NqZHN!MzFxh%Kt@RZv;^_VJf#+(N&UbRqWT1U8joNf=Aq%crLP zy&PE*JGH4GJJ<9NZ4JVJ1sB`=%>T{_9?#0~1Vi+*{dfUhI~qu~U&UjQjPUwwsV%L3 z3B=Z9eVxF&U|frdWxz(Rjhl%E<7Scvh^Mo0GujVQiJO^^ZdcsQJm=O(qqrF#R;QCv zS?u|gL$}aQ^qu^I>R<7ZjfV_Avu!T7k@hJzUF#w3w8^$p<3Bi-^xMW?#uAoiZ!vgB3$7nY!OOa8~V$r4;L$BhT~j?B$B> zWq-r->=`(Ue9D^r4T!UIniJSL1$<7->(NrwJ!;0K+9+Fi9XuLg-HJHFMS3RMTl${g z^i54E&DvWSU5~&FcHfbUENBDwh)dr<*NC&V*yS!LF)kL1M J`gWE3;7_~pgmJ_Asfy^OVQINOIH(f2VFCM z42t4?6<-&1weE+_KvImIXl!M;Xx%|SL=ql-!`4lg24Y$SQ?MLhhQU*;!c_2{55!+s zc)~FZURw+B9-0O`_;^bE9C*#pPWF{(XY8%RrQZpxd5Oo}7GPZn#AZy@)?^Ft8sWCC z2Dj`iV11jpRuzvdnVMz`L)xj>ldwKT&P>?{Cp9l1pZHgCMnV2n+@AQC5nyaA^@Y(3 z@TSFEahrOs{zgU_* @wl0X`1J|znbsGK)oE7WdD-f7P@iboO8c~5*Vgy0S+p4=!zG72V$ATm)JfYZm_B5Wuoq7&~uH~2##i~iyhVhMf%-S#8 zP@FN+Qy7dH((@>^1Vvv4spBN=*LgldObN*$+4+O?p=^yd)d3GnA1=%+D6w}KonPYz zO?$jA-jeK|@51Boy0x!l!$)~$Z64`qy^|i5&&=x4h1lAQ@C_`))}D?YU4&hn1?GP2 zSHWv!XFrJ^eG)zTr1WSes7DXZN{=euNOK_BDC!g2zF l#-;iB*74$=qetv_qs-s(t)YsA4Q$T!F)E4 z&2RTM<%pPyI-ir>S{#i!owkgV*4`)1R*26lEHu1LtQ4@n=I3wc-L9x}jpiQqSz97m zIE61ubwph7$asD%yJzb+4IF&r&cB&l4o@sip|f)bf&aOm8aVhuqqMh^m?nIb+K *Pv(UuF-`4~4KG~g$w?>ia9%P?xJz!z*RTA_y9*exBz;XBl-H&=6*T5L zsq1H39rAvsw4S=~JzVo4uGcXajW~A|ZvfYWZHi-KAA?}VPvB#|za)J0Tkv}peCWkU z4qJ1 O~G+v0M?=R(&xkzVPZP`}z=B3{^HhRSQ>(i0sw!+^BV!s4e zHoAwmx5q6``(nAzUa38cF|`$6dNRwt8goX*7bfW!MC0$#-`*J+&<%OypHq?4eeD?; z+x#;!wxN6L&&Y6`Pn15_u2{WCsOuA@Bi#2xlU`^enq1%Jbp9c~*S9(E(Vi^Pw=I#I z{8|DZHhT~MQJeDxJ^LE8?WFDML*_7@8t=9bqba`+Q~7p8>^b$p)zH~V<%^bg9C)V# zxE21 CtI5JlJb5eUq=$oT~zB$BP%Ih0r*v{d36_ z{Uey_6J62Y=6(r$D|o``IrY)RQPW4yaK9+4cMs=NIr=G!U#aRWlkMJFCUyPve9c)V zm3|W6=q!^?VhHV7Cdd-gM_Nmf4_4#NNx _nj z=Oh`kmZwkhPIQx;i7(jnVlu;c_GyqzdShGtDfrjs;q~l+;@T5$EhXI#mEK_5^+tR` zxye6a3?tv*f!m7zM}%>l`FP%)kpK3!;{0@O621P7Nb=(a@q9bKBhI$cJK&uT+8ZIR zE)u_$y^XXhnVbA?j1!fa=X? ~9m-DLX IqE7tcFQE|&}NV5abPIF&8IS3{P;%0CzN~2 z&m%a>_XIF%^N9v2KYnPli66S(th xTotJOJGuMFxn*T`7(8%9_YTqO!hpiu;rFvE>;A1o1=Odg%t?MtSw8 z_#o=H%hoNPm#wHhgK7F;5&6X@3#mJa9ya@=Gw5nyDBi^KsrY{LUC{L^`swn+r9;rS zllI6@rZzqQ2I>{hzYTv?`u@Um mdZvBSKZ0NFUJ=XhkLmmmpNAKL$0FL| zwV}fAf9vzR!#nZ#Ret^pzgErjl7|NvV_H+jFf_5nKaY4kuk|0T52_FUD{@Hk=UVX7 z`m4sHXgWV3x$VgTtAl>SA2Y|%LGOa!|1nBzm^!lXvBpZ)k2&7$#}wN-y!t%e{Soz5 z?}r`KH|yN1-J3_;!My{VLFeAJZ)AMX-8Hgr?|?hB*V`-mZudjW%=59W nXJOtN<&eC{}(Fa7MR4(BnYCjW{yp6r6|@Zi%+m`|k- z7oI{VcO@SvSbnlR^rWkG>HUQh$laHbFG=SCLpzsy_46UYQOpW(Ho$wfy!bH*-w+F0 z=10LgK{; UmOUq*eCr=fU;IqzmBmH1JyG$rp(Ik5Q+1>eqap zTAGA5iRaKOoPT2C;dKtmfwr%@-X8vsz5SLlzaD1~!Es>J^6U3~em%-N!L~gAkpJ7t zXz}X>FYyd=y*6IrPXe@1TjVSAVh#@Em-%x0OJ)!Du`~8} zo!m}qf4nzNWK(F4DL%6HMVKtv4$STBvpDUqWlLsSx&3mYvX1>E_d))WJbD2-3jPw| zRhHSFJ*wxf|GpEOg*n*bm)Y;IEOoeWfxQgL31l^LmbQk<>g7q|aN%jiMrr;0l0bW& z)ZT5z#S_4ZXYMaNLB8PFI8NE!JhS7>zyXHFhT@p4EqgC;%Cb61zmWtdOjf6WxtTNo zK7w)5 pJNYx7-?->{=K*Ik@+E4s}3x2ztQAK`=4yBQuyGgc)3)Baf8*kmlq z4|tjZ86!nWUaVKHXvf_KU^O3i2aLUB@hAr9T|4fU`eSKWv4e~Y`@3%3L1+6;w6OMS zvvIc!n9GPo+!iwK6c=mbN0xD)fZr_dYTWJc$JGmd44ve6kgqjXH2&0=R`;r$^qZ9j zOXQbhzsC+=*IN1wpo^Q+uR6}_Gfn8X+{!Jp9(C-D{ar^tc+9>N&8+RyjDFjJx&6vx zrSYqNQXczOZXN2b&~GF6vZt+`COUi+o5RR0;pNM%pbgjQ({DcU=g+`nPmA9iZ*C!f z@3>jNs;tZH=J)P}q@{MOdiHCZd+dzPUlgxhmN$KJt^@l;d}jHtjo Ba; El1~@qCi?t0#$#v-6jr9&B~)V$PHcp IURswb-X#V4mcn1;oQR2wk731vof%Q z-+3RtwMT0C0pD$z9|(i5;`OTn@3g<*abPJ4-_xv9on|d$HgfYZt#$eR6ec&dU-D(Y zzUAayPJOenkIpORqs$le_L0VyjWcK@uPv>$PPM~N+qpj0?(xLqZP18xuM)TqlagwK zpPpvnN9h2`rCgk=(kmRCcb;^VPTK)2rDdee{8m~-I! 2?~JRPm{sGkP79s$lmu0O^}taOs}6lpgMqqR4sM@dWgt)!q8 z8}qYBF=|=tlRSRdiMJI1wK(D&D*S~jUmpHZ;$e(`_(Z-aKXfmA)t1QSb*@l5yaY<$ zh@^bqU;H+Ff46$RNBm+DcT1szJQ3u*e2>Z>#lOv}pz%FoM|DP0hYFE&w(u8;9Pwlx z4=V5Rs|f9CE#dbkkH{NPN4_^bKQ2fT>0qYP!+C?}sctaNT3b+s{ 6 zAB FR1O|eEGy30S_mRaw%IUjuIQrcp8A)d{*yX*5h zdm#dRVvWBM$*eEvz8yNhS?x;ov)=Mu+GOG@J0l5v*7%nr&OMbjG2aKSY191lch9W9 z 2zrn8^Kck83a$M#`S>`p+%Gh%LS_5rb zd^~v)I{0fJN!Fy2m30s0ZCmh@7v&?1IfsZBJNcqLLoH@)m}G8pn`9Dmhp6M(iaHB& zBWu7LT~Ag?|H*!lZHd${w!f7@vVm;5plxH{qYs>G1L>XbtgM}zF-x0bnZx+%Xdkd* zTs0?)b3GdHVa4Luc8TvXkCQL)^1@f}8${Ee<^GD|SJSyj8+3(-u8AkGP2f-A5=k6v z*E)vIF|@QZaCjd{>U{3Yi_oxB^bxJp4!cH8{>fNC_XYFVw!MdT+4!xP I>~9mUUjKq$%4t^{Y;1&$ zH)w@sZSafWydG(0`af{4hBF~~^F#KzexCWO)=58K%4M{E_z8H8exq;a=N`!G%nhw) zq8>UU*&7PFkI_f-oeO6y%@_xrk<14RS~HeB(|S&adlPELp96)| o}PFq?Hu_jJN8T)Bk2Qe zIo89p7AClk6IcgM-DcK-#fv(dCD`v#_J~AOH~9Pq%C$My72d}EKjJ$VF~*9cv!DGl zpLGWCwsv&2f7QLxN8wp}A9kJUeOQ^`vxRg*6u-{*nF~hU%G~DP@mu_?zM3CDRr*W! z6ytLO+Mg=DDgLZke|+MqXD8##abqc-6W {l6Uc^CwC+7vdCx@=VI0M zmo;_$vpJ{>{buUgLtUyvXJ!Q3^T-_3LBE+gkdLO0`)k_qzs*4%$S70CZ~ArYt*PTJ zf!M>D_KSS0>K7C si?i*cG0Bu)4v@e+KS3dtZBH zsGVadn0Pk(PI5qX2!0T*#=6b()(@>*1 U> z@YBq3+p@?3 T;T6;zi!q!6tmtl@&3Yw)cjJ?nP0k= z>)QByqx ?QnO>KrI7CssiFPL|OwyY@T) z9Qk$=@dJg8=>rA9kzZH)bG`MB8!jY)yMeTwa?60TFvYqFX_2n+!v(8D;`Cn(y4gNd zOr6@TIkEJPlf~WuzTiIP{3$rFk9h(;mF*}kAa#-A*>{^V&oiHl=5muyXAhK4l2q;) zuFsKF{)b$@M> ?K6jw>LYj6_|9PHWAU)+AD4oiFt(4Dd4~W+Xx>_A19eNXd zsOtrdP4oq9( kp{bL5Tg za|T|}cd{cvpRpHi30If)sh`wm>MM cPh0+8*|UCm z#Vy%&V~e-!OVel4{nDxacwFe$Z|vc6d2sgoShj*4r_y=LNzXCJl{9zFlD3h?spu6N zq&;fV!;YVx;a2vrwHXyVsxg~~XT>|G ~s!{nCcr-o=`d z;;5r;wkR4#6CcCwXPm`FBVFtFSasp=%~EDR{jc)SG<1*EKZHFLQRsODI@)Aq;8LHS z &zip=nUG_wN*1O) zxloaVe^!x$*_#R*(w)e`&eFA9*Ty?dJc8EpnHw3NIPS~B$AhvkJ$+f23ChA$m@MqQ zkOb}ql9h!^(#S!Qt1Gh5%8W&U@o3lg7OBly=#A{RG=Iu@j4^n~oCP;O6)P ^>@!@SBN Q?TFOsIZ+*G+Li|AKJkKtWj4Vtc z3u%{?g>mxO`=DH0=y-Bb*QLl8UBlXA^&c!(mQRT)S$U}RUcbD(*2~$?m&&rUrfg7t zSvhOzYh!X%x0SE<9P-)7*WfwilCM@ib|N2UA{Q41 Eikv*H;+7Px|QqSII@|%hTM7lEo*Te`DwtVSEa&MT)&eeqrZz#@J&QL4VuzO(xex zXdEFQp2wQFd-zf1JK(LSoPUA7sqEpE{8dc2o=Gp5HBHVP(Vo4hfpb#leB+P7e#Q^A zKJU1>;(ER(C?Cx&_~2rR&k@f-OnGuce#3e_-!{31=WX4eIn%a&;!HcgA;;o~`!Qkz zw@jYr`&; gcRHH >ly{dM m#`Rq1`i?+fvz_6qV0JG)Z$$2I;V z>F-nck4^>rM;gQ48kqR4V($jw9H@aKJ$^56?ri~1?Y?UK1m~a;al{q>6m&4ZVL@}X zbW*zve+2N#!jH@WO=7<3JWqPsPbauqon!27`17REIrvnm&&oZA?~vF!%z9cfSA6`P ze2Xs4-cQ!DmSqnXlvi|FhFv7xAUeeo2jRJcCD-{_q08M*EF$;GgUG3ahDYPvFC=v( zbJ!-xWnvk2IA1foU~~q0O6}PoJ0JTwNnMY*f{Fc1InREkyqhh^4)g415B_q#N8;Jf z2k9pdj=rhk+0O?H8;Q>soND{|rVB~nZXj)sAH;qZe&}A3&gql=Y-ubTPUl%zo6Fj9 zkD)i_XQ5p>L~rCchb|q%?nY;%-(%V~Kbf1nmolf*j~d F%zs`CZve1SS8pUQSUe74Nz<8Zr}vtoU_HiaA!oMesev2tHBgf$E^CUpNk|Na8y zL>t)MpD!FK%Nu>GvBKy0mIHHv=l%L@pF2(kmnZyp6+QL?1E+eP0B@Rkg2sTIC%{+m z7ODe1?6s#_kBMKsxtQ#9wO9RCZQpz4s_pxO^plq#{ZXEWKSf6zA?dqK`UXc2$t7Jt zcw7q-U*ei1h3PTt_cO8}Dfx5T S=IHQ+ 8wW#e~HgbfBHPOkT^V*6_1IhT<5QmBM%hBV|p&$N;nS~nJj-} z)!f9$vKn1VdklWePukD{!MTX$D4MU7=Oii3MP@%IIgSoEjt)4UAjT;b+>drYKKGfQ z`yf4}wpbs#)gkir+w&vn;+D>S5S$?YXpZtI1IH$NmWG-0#bqZ{X!i S~=p`eI8FJYsDp_UDt(vMv8GcG|Z~k;ESt`jffhc=A8}N7-cz-_A(# zyQi6@>$@_G`F$>e4(P&`(>Wt*i) Z0=OT&k0B37a zXNr#{{?mWdekZ{cKKizr-FIkZfN(?xEMAm3Qj-2( jm9 zbymq1(eORm%P2Xf_C}>Ec!!@CT5T!*oM%uDzo+D$IZvZgXN9vblHa-gdZ%$GzcA<9 zm9z)a#yi;d>HTGS)7EnuM^916u7hA77~keR=&{K8oS|V^1|~iFm~W**Lp>J_=es@) zQx#iKV^w=mgZ81G*?QMDs53o_IyEnuvQGOwY;ZjRFPXki<|g%B t(DNvbQiT zdb6hizh5k)b U%!WpKqS+X5C7>ZrTY?ZKj@|vOaz}Z6DxXeW-Ufzxv J~RG{@;j<-8?&l4d5sC>S>%4Xw1o9$ z`97B7XNaf1jQw`_tn%wURmr9*8hRrub%uzw4fOp1@t%V|*Y^qSnzqIeV+^{Qmd*wmrDxSFe8nyieUL%c7yleKx-P^#yD5Rc4$ zy>^uy(3+&$2o6D5FG@zFnFko0_GvBtiiq -^XSx&&j%= zZ6rsTEchnBP->gtJ|i3S&4%y3j-NpE#Zj<0FL{eBlFXH^l}&GcGjB3DQ%-qTgPULh z!+du^w)@wU=%3VsZ6+W31$tkjyuYQq@%!`e)nw#EZt|UqBXN;i+(+VR)>xST5UV4Z zNQ_CR*~gq<4cuLy??|iu@54vl*;OX)#l+0qYT`>6bLcF_&k4<;Qr>#?i65Sc Xvw$Pr=O@4*A1K~U$T=flU;Uzw#uiAvS*Uzcq{Nw>g&-Gh-&n~6k z=Yb5fgEQ}?OvHKaO0HK3PKTfGy>DwPb^zme{7)v^lh|FfvCa9{&=?%Ry?jQT9~&Va zj>0F5Q)qm+)Gm5vzi;e?*u*2)!HWu!i3dF1OY$z4hi2P~$lK0n`Vnxyt@v0P{> EGeEwZpXa zzx!?dVY#iACTgqTo3>6Uj>BuK-mC9S-`wK)k*qw7BxwWqiAN(T;w%h}o-66w)}o{O zg7Mn<9 ?G@R()VbbTy8Si_61@}kZaT% znRw9DIWMdJqrai0iIqv-h`bV?)9=oItB#dX{2%WWD|3m7mDx!Dd+pWLjv;G 7rKyq(d+ALl3DntusCDt4s* zIDgrDc3n8X?7E*%{NZ (;)vc`Cbb5x*p68I|72`QhVb11 z-p|jxADfeFoHFpW=0S_}n{s!UF|?&PNPqlO`c^g)-hXURV&l@^DG5ggGrDM^Abq9z zl=x4395fcRx0>%aGbfXNlmA2KU;_hLj}3CJ{e-?r@%xh>0KSvloR2u;#hb(z(rMHc zb%?8rQ&$4H?h+>mP8!3q +eEo0m{)b=MSVB_0~y1j0vv*oH~M*sg_@rTHXj(j%HoIc;4 zzL_y~`{WzI`xNoGk@SZPx}Qh?i5CA4d7b1 Mj91D2Ixf6jBY z-HvU`C&p%)fKE9Qv9YpIWNSphl@G(_MRO;UZeF=q)|T9GN)c_cNAGo%wa-EA}bh zaYe?tp4=k-l33XvLch-w3xb?VzPS)}73cSfwy(S5oh#{YY^u!1k(;uu9&G#5w9ZJl zeR6){2Di=GdKGpZLwidxFWC!C=O>|S=H|TGD?0u_G|k*$XgWXh$9b)dd`C1*UB~$N zc4=O^H}9mLgE#3X;R~(ir4B&T+YC)PKLLFs8-2^ jO5$(=)L(_SQ zBYBk*P5+f>n!$EXNiTl(r?THQZp3FABay`YklV8(86SqnEUg_^^8eE$<0H@*Lk>z7 z-g*V{veSN>tPL8P{xW=P-eXfZ?asz;n(w_^--6BzjGg#msVzw#LG$)3@YCGW7shs= z51(|OoqR8_pWV?_)VXT&-H#Wa*|E78$!I<5cKmnFHx%1UhkjvV-~PPp0f<-p3Ts@E zyY}Y~W)x4(8337sl)3IS>sRmb%I+w>!;ItGi!Ly9KAwEw?3egL#K{-ux%tU9XS6tv zGkR#xw-VszIP3HCb;bsE1iEcM;~ks3-^?>2$P{9Di`Y_(ksAtvg)Dne>o^H$q-XP; zXHDG0{7e>l>=0is{yQ@!I3I-duNdQ|9sh*ZO y_GgA(o<0QUCxvi$0+AUv>^sr*ubZ_kyC+YVQ?QTO(slOtwXD>Ku@7+AgYyM*A zn`!#1-921TS;20jf9<%WA3EDpyfgfuH8O9`-9bK+$CaG+{2BUfeU`QP?Q^@9dIRT2 z#n_J~oL*ra$4wqCB(wOLGv2q@q$@S&cag eFpn$lCO zDa9ua6dos^%FFklb*0CEk>*(y90Oy2VL4Z8OJ@BwC1TGCA5ASNWl4hL?YEUpU)hJg z5ttiDJHSUU?p6MH DMGW6A2zv5)1ThLi$`tr=2 zRi!fU!#UA5nD<{bfvL4JjeF^@AWX&SSlU^b!Mt(i&I{37!TG=DgbvT6=pN0fzk A8*GmW7_z6;yNRYG1K0}PfC|&G;g3h-xi1pe*9qjSCP4Tul-=b zz43Pb=a_YX2WZ0sCHx`hHjr;SWn~L&_xIx_f$8y_)(pJ7;&Z{(nChu{e=X$&&*ll6 z$A_(7J<7cNQT$z--Jck~2(Az59Cf=V*5!Vgp}WUl5UO( uG~Y2O_Op4K;J)6Q`p zr$+4*?JvulHlI5U66Z;e`)Qc#Nst*Gd2eQPWMJRU@%QfO-@9*D|IYD!ql2SW&qoFZ zwIuFbO?uQ%8Lmemy3zp2la-a&?OK^> )e?Nv<1s;H^A% z&Z+fF?ctCN0M_JJ7{Ayl+E=s~y?{=V>^5);fAl-}+Fajfg>2}D*TTv#@XIf#DSuZ@ z`CA*5e}iBC4K?N8^4rz*uWwMEa}o{y^i>u9Z>lNJKCV#w8@2zY8vL(nP`*+9=M&ZV zBNMCZPv(kW!N$7`+RATuSq=VA`sLB>o(z_JW{(k^WNh|Edx`Aa*N)HWUbppbVJhT( zC*j`l!O=b3o9op(M}|j6{reTGR(n64v7MuXgL{c<8QQz=Uh?j|@6LOM`0YKvx{?vz zf+x%8Q0{>5Ww(ewBU$*K_nK2WIj_BmiNgirrQvVs7Vn#H^7VA3Jz1>ykvCu`-O`!7 zpmF-QoxK;LoVh8!-;d8+cFx;?8FTSlB)svUXHE`TK#Gy<7zx@z*0#3x&UV?v;ITaG z*;yKYf}{10_6ctuEI1aQSo(`4;Ut~y;q-{9XMF&tOTa1S 0?dv;SI VkFy;$=aGG^yx7s#+~$|tO1W74OQp-Mez MRPM+ZGJn<8Ar+gdnPO&ueUd@@!Tw;rvqf9Jg4`_V7nVWp= zD*CbiWBCWtW^OT=NIy`VpZ=@TOPZVDWA j!Pv)3G!@65280x8slJs2!YFcny;f;$FX0 z8h*1=^xKlRZTZ7MThNiSZi@%QYs((LEgzYqwtR@T`~_`M|2!UX-m{1{MP-N9@bsV3 zrdpn+KTSFM&Wr^oq}=C1%6*!0T|N&4dHJ_Qw~NHfe7)T8^3`)hw_k&9Y1*+K4U!_o zXwRQ7?kxV<;_D1Qh!^7j`PMTUqu)XXe&y{S%kPilBe*9J#gl#sH6ayjnkQXUgxa z` B4i=cp~8q%D6;TM`=g$o99hpLHR25Bj9IBI5j6 z#Mpr7Qr2N5qdsnYRNqGjO4oWms{dW(X>SBQ^mhDQUimG>TYm9sUHP$)@_QSUzbmBt z&XDrI@0V|{ssBhw`K=-4Z*EZkcS6cvA5xz6oY40F&yeyfL(0FmLHW18T2H@shLnF> zgYxS`%3l#u{tXSv4}_F&4=EpU^$pSQl;lUpj{@%#(~-+f{yXl)Gk;^A;X`+xKFylv zIlYTGe_#3o^0DSwxBpw`zZ@s9>h+YK`6c7?6f|&IPz};xyZ`%W&2!~RW8?<&PIbSG zK#OL1F7SRiPHg2F@UOam0fErNVehqN7yXa=XUdar@cgk?JXl@M7m*{ZvogPs9cOL0 zAN}IhPOWdf0o@(Jj+7mYpBevrN^|gUe0r_5MYj~c*3JB=|Kr%y*X5A`#ukmF*L(hc zV}quOfBTD9jV^ok7q5OHg0I1eUx!+gJ)JT3zxDCUo^HjK{^l=Uy(a1NvUvOkeD#+y zj&y$ww!G{(eWSD1j$6q(O|2dGUf|46dVU`}CyWB@1sc4Rt3$H$E3Kc;`{dOxKBhS> z^PzUiJ%m5HEzMjkC0c6EbX&2bEt`*JCrZmWUm?T$j?vuYe|YfNi_XNu`C)$l@C)4M zyf{Pavq>yi|H6F5Q2hDCi}^o);-&cC|L2$3?}H5IoO9r4PGR%LJDrzeo!OWEZKszH z8FJI&1-HIn=eZH)oWcC^mvyu~nAh4=ob`@H;HLRx2eA1j=ruo de)**~(*7jtt%{S>JW+LjNpR?2eIGPFaj B~U6SB ;M!xbOuR|_H0!*j7)kX4)11YwGRm`5JXmz&ob>^#xK{ZuLWucO7wP9zNsmDl@E zlmEo~q?=RuZ@v9r=S?iQAJes2@& @Q!r94+8H_+9eakVLB1V!u<5AAuk}t^cy|W#@6Yt%AMKskxyYJ`y{iVMH zP8;u{S$t{f1En7!{}Zf-x$@_wSli7~W D1v zJ`6`aD#VM8{44JDe)+_LQi8OMWN>k9yqPzK6RguMH|HJ43(L}PE#>6TPUq;MEyefv zFzk0h<|UGO*+9f1v@Zo0@rCv0>-pEr*d>-8d^$3W?f!`~ODB+PB;m4*s~IQqqk)IY zcJN%!mJpBZ>Ktllj@|j57-wWD4oc&>Q?TM$&bK)6qF`8 SMu%8E93N~>eYD<5&Co?eY!j#2YbN5 z(!=jdLkB&xYk4qjc`Yx{=j5~J>H<5 yJUEmeZX`cS(f;ksA_lfqe6Vv5zc1cvcL9ExG zI9hW{O)3sfF{9@EA=cs}Jf}YpgSVM=dGhHSQsAUmH)4y4=TdwZ{o=*C5$C3OH^rkU zrbXrEQ$Gkyc2LgiZ!eC&3%V(m<;Ny=#o$+5l0r`iU!OPCc1uUgTUCAN(?|AUun( `Dfc0GEph)db+WG{xxZ~`a)R;W@tW|E+z`(HKX>l~ALmit`@So!?6smK zZxRJmN2PB-CW JKMk!9HMfGA;`TbHrgdAxaoW|c7dtxU)`#PJk3apmH~0ISKdV>r`cFs# z{TzKfo}G7Qo|$>(nP;AP=9wA6dpZ3G@3Z~J{MpSNc&*4(%#l~=U1mFP-648u)x6os znUSuDH4S691wH+LT8eIR>3eE1_neikj_lm(>~IY|6xCMVR%X0&o{9H_%C!P#5F`ht zBFAg;k_(@#r$1IYE?#W#9$8xUb{a8xe0sr4F(+e#2khVvdgsA2@$?t_z`BF;D=JI2 zx*uW!{V*=VrJ`G_+PD1Iw_u|c29M}&vsU&pu<_^Z+-IL`iJmB>uK)CB)9gd5-HhRe zt-9oAjbHA_sUARfV(zYf|4l*7p1 )kgyh6fzq zjNE-}^b *@V9}^8$D3GdFzWdwiRb-F_O|PnFXe`EdozSUhm2S&wv= zhN@S93)xu74oYX6o@jsf>5d>xS!w2v{RUSH9j OWloc*d4ll3Eel*o-ezf&hfZ4 zcSf4>B;Q$Hu60Eaa7Gds7MI@wm!C50jTU4B>N_JFZ|(QW{#ErJW6i6*Rnb~s$oY&S zFmgC-8)WCy@{@Lq+55%Zx25)5mb{I0H`;Ge;#=B{&oJ>V;rJZ|n~nnc mlx2eRp*nQiR_*Qh^%875OK3i@n@vX&uD<;0B91gVKAI9)*Z1X!x z`0=LJa;cnJ#NE1U(HAeOOjfR7>~h~ZJmY=H+-8nxAJAPv!J29+iw;7(5*yYf*xJ%Z z*xGKyo^~U4B=)XZ<{xZPE44+0QFF8}%-?Z*VeSLRWlJetkIn%pz49rI%F|u5k`MHo z;Wv}Q*E?nD?9Ye(9$nd*$+ovOkezIf@^iJfGv3OK&&<^On19z$k0*$Ggt@K)kNJh^ zAbfYUD7fQI%&E7)Q`kR!Uxl#N317i>e_C(B>5QHBh?nr)w1;uMfID|H?ml4I8|y6M zBEs0 v`#tf(JF{*m)WL)5kr*y2GJ`vy7tijskZ%M6zvwr-bF{pVr)@`;0=nhp)6c z`>1%G#cyWo;q3uX=gkDM=AhZR)X(W@^84{SLIZS +zbQTM zGq|m|4Y(|Bdt&SdMR+OnseabD&6L#d)+WxLvHC3g|G&?E>0|i1D{YbCZJF>Cyx}Ux z8xFx6)V{~yvwvlHLx}B02WN-9T&1}?lUE;q2^iKcQ1feNQ#hM}WA6{_22K}n{F=hR ziObUwyxQBq3Qp7%&LnX5oBH$urw2H~q2;mEhraLQd)D5=NBuXMwxz>1-jZq7K0A+q z>X`xZ^#f1yh=C{E@p~{VgDZP4spN%0CnL2%Kfz`2P #?K6D!r|3;>Zn^B+-|J+a z4M`(gQ1yK#_ZYg#$2c1BK6sJ3Ym6l26i*Z9 z^8*^^ZP<;R4ZUdX0l#jS{F@1NMp u5VMtpjBhUuVp )%{iw(LGDm`wTbod^dFJGrSPreExb>lGk7|4CHcyqANy~}RliT3`Tem|`j;~G zh^5EU*)7_}yM8SJcekTcT~v7V>iO^cEu>EGXWwyQX(Mvsx9h)#{C7LJnUY+eFV}RI zBva%KfV}prq%*tNeii)@T6z#Ji-N;`)dt|4vsVSo3++{f$Z^td2~G?gyI-}X+LK3* zjZ Gp^x1#JzaF1=a?E_B{VGp`+VfXB`v!$%5%9&@tCRj@O=j*Y)}7=kr=7lug41Sh zN`dD+x&2NL4Ij--)q8S}LnrhbbF0$Nz7b*NDc|R+pVCRrX^X5J 6 z>a+WAJB9lyENta-_86Z z7m06{C;4p;jMTjM$9P@9IMaD(=`gh4;_n96_!;5-zO>?S8jD`f!I-gfY7W_#wc_QB zp*HZTJk4~eUe7N&^XG(4>s`Nmxwc5Heit^X4|K)M*uH|Cdn z8#a(JeB^R$H;eegyyJUVWn83<$@b}uZI$tAv~R`BY~KqPX&)2*Ovfd(=Opj_CEN6B z_Sts5CHOM>?DsFyroR{85X_78QH6K^UaK~3(VK!VqfMSh&PRu3+B6`T7im-1YuF|) ze_ZO=s$Zm^euXxTioZ!7xk$T`{q(I@aXbZ1rn=NN>FtyY@eA%fntAv8-u3>7cD)-n zgwuNpFQ +{q Jx} zB75P)3%l^eM?8;bU%8r%xMv3WN$qaN-vu|-VQi4v$6f~9!HdB4dvcN)uE$A+&{~O2 zycy2u&(Mw;&Kb{0CNXjazS2mitTdP5ltz1%N+bD9`q?&|(lE7}G|W{d&AXrr$s``1 zq-*REGHoNf&c18d3=c^;V+Dl`;*K%bkCOTBcitJWkO}Sv$SLOJL%8+0UR(yZhswN@ zxIF$nx8C`_Na@IjED`Jn#t7~#6*`KW#61Hn=DmhJpnp5%Aoy=7Fn8wF4zDAXZVP=_ zVCUN1q*-5_tmdKN(K7Fel+ZtM_Fb~5?mgALdD7d5!RN7Ew7 ajh 8^ZjZ~;`C$7o=?_&u|E9Izt4}9sdl8r7cac2+ ztre9n#rRKWZ969^S8FrK&FF;sBm=_#dvll7`*1xt*}Z5#TXi#KQ0_$VxS^|2eBpQ) zzZZWHU$|e7ufE9Q_uzNoNBAB1-S|6rv%JW ~(h=3IS;wT`B~4=3`i zAblRUJdy7)moM+~Ehk?W`L>X6jC!lQJpOp14JDUH^&b~qQU51MKkCxw@Rujjf7z#J zZ)16g&VlsLsa_6GL!^yy!-+imd>+aeri_q0e47c;*LH@Vsjnj~=QJw?{Pnm3`1E`u z!x+)o;f3JM%$r&DsdOfG>?w|YU=z2GeKd4D}$FXxHfb9Us_3oM>NhkWKqu_r09h zd)wu{ZBKlA#(mq8_*Qb?3hvwQ0dGCueuFltJ!+R|&GR+y7dgwLJ3^E7mp;YUzu6nV z;vH9^@9}U&6CR%T1vk0?+?>-ty~G)SVf0U;KMzl|;^BB-@Omx)FYn;}H{dM?-c1R3 z9)|iw{Uv)D>{QWZ2amM!Tm181uf+C+Z}9pjQ>oHt#aDahl_#E>as8Ticz!Q<9tY1$ z66I;^d0G)JRi?`5m &v~o>F#kN7~%^S*7Nnwd9ado%Q;wYrf$m} zEb-SbCE)q`iO(eKsQbi{w2-W0?BI%4haFtm6N-j=&|S%16;Y-=%WuQa*@sko8Xc7M zWt%BqZ?I=Wt5Z{&jeKi1_rOJG&NnBZ4{z6 %THUcGh z#HVO4a--_NZ_Syet!5q@o#rk^_7GGy?SNm1?<+rIBXF?Q3Wu(4jVjmhW=og~zkU^V zJ0bS9*Q$TLOyXsjUkAp2R9SI(+Rx?iPcxTq<~#dNGY{d`;U2_2fcqG(fKwjtr&$;6 zLzigl0uIn4N r{f!3yvB}?enZ9<)F9E9Lt&Xy_q5 qRm U3MZcKeA$f8re*g02+GX<2+AD%5tKRn@2Jdy>=WiphV)EcW=4i& zPMxKd3(?O ruur_uAY`IVMmSoOetYaig+v3pmIKCtrM zUs=88{-*Riah~#D%l97Ezs6;HyBc#pP;C24`(Z&S`>)x1zu4C|_h!+j>~Y$)(0=+| zeXPB2@dU{~np4l0|1#!$o#8|0#JQ>`*o${>8z`KBfxd4pjGVpu3i;FAeP!fVSBH^A z9kg!o^+@r4J!Hfl_uTgnJkOf%kKTC~A_{XQ?q-~~T`tQWC~xia4Q%el2QSsn%ibq? z3RUHu?kt))JFz$wZLWSk3*V*ebe6d%daB- B#9G0QKr1Mi-c1l+d-t`t-SlU$GN;(fi=WMr-H|Co^XKUaX z7<#j2_MENkvaQ|1rfN@ty>p!4Si1$iIW}vz& _5;Z*<0y;Nqp?8zDS>_U0)|%%BNEs{h9#Xc%S?J$m;?_D_ =tojn)d%8~d>2?QZPtIS*9R`*1;wj@6|VTu(E;jAnf_g-kicx#GU)g$5l- zXC)hlIIHz>u`0WUfZvk8bY5FDz*uSbXWk}(A=(kmBxy`^t9lEc-j-Q-S06R2OS3a> zQ%+wSxqNSQzHg_-S`r=%q}|)j_&EQz 5JD+>OzPOaefd z_ff$?5b%9Jo}BpKb99JY5$EmTCY;@sIsX!i9`tTSSSw@e$U3F=PVQSnXKZLIWQ`>n zPR7Hx7H8VAvs!HXSL5t%H|~V i?^2U&zW9_5+#^mnxseu _e!G!l}-KCx~CuAyFWAVsIkcw&OChvMe)RPEsig%_oKIxZhjCK z!|!w-avHsnWS{GSqjSYw@OJKcFmNK^bYY{~89m)t^R+V<_vXJ$o9;Ge{3FscjAkS^ zgqow!n=x#ca`u<+_8pxYh}ZhQm+uS6pXMCB;{H2&CE5P<5Z^|A?cGoh%KRK<>JC8L zKl96soi6G^WlC?PG9PMEW|lG;qo&L(Wv=13>Y=*Pcjk9b?)IwQ5L4f=XS+B8ho-MW z@K2jV&OT>?&w{6a{9d=tK@;DmbJE~0jWamp`>nx7?ycWM8$}1QS(W|a <#a zdKyVF2lNGxlkNq>OQ=V??D`ZR6`tnYt!%6BVGh+DMGi0EY%KRDe7{Tj-^HrGY$LUo ztTjnU{oT88zwO(C-RWZVn%LI{ONH|^?^~))dXp~#7aA+_6(?Nica#?{)Sr5zN3?m5 zd85kLL*;cR@FQG=F?V_tH`cof!p%ndRe0E3&nNJZH+XpJ+A)U*jSt~r96Z?eF0WN+ z*FOMXeWv!&&Y2HGaOl7Seal{;pF}6GRX+_TY)<=~4lMLID6r2gdmH2nos(!6o^@V= zxxS+)+CVOVM&|cj-z(@l?R~26 +(b?x34}(~xVSuxoYWioQ)ter2xox~4P8ZD){E&%BZEPTm*p?AzA%&1^3_s9fx* z+q?4UvvV3}ybnP=76f*zh}VfOv+z*yyMBCR*Ls`dd)ns^@6$K!F$$OBL;9ZNMR6W^ zKBxQo?Y_>!$ju@2u^%JoR~PsAc7 7LN{ap)zZ227@34+JW9Sb_UAwGefy%|3`J0@7d3B$zb)}>4KdT`ap z@G|W7;RA@4_8z Q6-5pijGZkf#1hn@;5SwgQ?9Jxt+F>Aap_GPUnVbk{~V z%)DlNKX&@4n;$zjx;XXQn-l%^rpEVsY7yT(&tVV5!1DYO9^K%V%!wvW=Mtp9)|o-Q zi72^RI`%7w=RAr@b3Qyl7Y%(o ^d~7;?gY-urhSr4p*5X@Z7G$f^Q^(8Ul5(A3XT?I#u~Z+_GW6oN~z09 zJ3%_FIel8w|7G1LGJ6Ml3;i!TRo|=bL6+aZQCik8jl0s%d5f_)_btX$@E+E|xoPC_ zrF!$Pr&-zXM&z4%H_qB}9fFqTo`H<0#{$M8sF+DdI&;Py1x~IS$)UGl-qTrJ+0AH8 z*X8!Egdb0P8Uy4vG%ng2K_{-h)n1udCvtu^`IcrEe4-2bPvsu2X`WY|q9Qys&^t!R zU1t2{YBvam%FOBv; GpCHrngiGGX^nTd^<-{XJU-q6PbC V#)~}ed=gCu?71HmP=(j2v^dS&hdnSr2 zLH0Yy*0)tMg3TQ#(upyw+jW=T!boSm?O7r5q7-%3IUzc{y(Rq4@s>PqBIynjcTQ+w zIQu3Nb)J#_>m&GS%GFy@nS$Py{KPdA=8oWdYQF#+@o2q~+FgN$(V3M4>>x_AYhqsE z{zCEf3^Hgc`1vY#6C7VcJAWR0bd@x35MR_=dhnF|qt$fj$!jykC(VBD0@f#jxqvh1 zIuDPGeLWj{22VFo?xLwJl?B-?mByJW%IVepAUadUZ-1uhO{6t=%73T6D7vkpbASst z2WW7_d8(Fz&QslE&Qpn>r%HyuvFDtdzKXo6|HAk?oWbWz75DR*`&nZ1reC|--BPe` zbE%Hn_y4YwdlwYc*Z0)EYGe; s_u^ za0Sv$UwAxQ-ua8Q?UC-5+SIZGzl4+gz&$9}PMUqrJ8Qph^a#JmeI%c2`vSTw-lV-& z=eF+Dxh)RVrHV!9> W3=wLpKz=o7{JMf0NV5!vjc3mpcYbfNo5>*XuyLigs$$2Sktz#^}7ScCXl zg9?sp|Gh4BB#)gHPH>v(LYD(`6gNSg1Y=m~k)iy2?)RHh^sV1-&TuB`lZ k3NEX^8T&8U+bCW#Wh-!0 z-g@$sa=Fop!$u@w=^&o;M&H>3IXPk)Ago8|irivXP!QARFm<1G15xHy|77c>}VMo;M)f z?^aqQ}u2kgf2Wg|s&a9 TdxDLG-mY*&9mV!F98Xx6qdna)WrL!EIuG z?gh8{=IKo|E*jG}%~8xxHGM0(Z+`w3y>Ed=#Wy5pm*E?{`CU;N3+Yegp8$4JXAf^Q zv^)Zh<#5Kfk+GvUmBu6S_B*G?oz6ZNDqM#4Y&x4~_Ke_=ix&)~86kf%jc?DTjvv)m z@?ZtM`EVqgk7tjs$i85Br1(xJ=LS>3HQf92?D6yQAB{Kh58-Q!HVNkTgdRP~pSoTA z>#(1?0UY= GvjnL;@2K; 8>R-k8CBI9zm@Dz^Q;oFgLWw!x9`WzRTHB?W zI~0~KA}C6ax4gzUZBLuEpdCBnbG$X$)*j?i(tph_M`z#L7~eteNmQzLU4yJ<(!`Y2 z(DmfX(^JAX{5VW+dQmjpfxge`cs7~(wT1Q`n~w0w`m+l%jP;oL><;mj-$vgnS%RZ< z+_OVE+g@k^c!HB+&JAMt4(Yfv4!E=@r*WG@&PCqxc}yDab93(?DUIjzlGi;?@ith2 z8ykxA{fV9NZ2x4JN!BnnHNwj|eN*yvZPGWaKj-(2-U_9iwr`Mu6}Ek&b=+*<2v-&d z7w;SCHiLLOeKXp;Z(`Z~+rEj?ldf;<-6}f6AUcyAsXK-`SP!Ohn#U#I< )2hI^&BdjL9nlJhLe^Casag=h6+ zf$}F{ciVf64D1t*hB9UNQyv$yR{>0w)r+rtt2EyG@qY&QcHA(on=-QDA8>EMmymUL z*3;aDmoA9rIExgg>tX(e#u&{6v$Q3?XXwt^-)S$!%gK4wrP2OP{MI`K{?0&quaO`3 zpm0X8y5M=qwyG>U#%68mM(CJ++!-<*!X@$loafcl-S7h1KZj43JiNKQKx+ 2q8y!`Q z9g1-0>#h4vJB!-)7&Y>l#< ;FE({JAVmATU4GlIw9cX%A1i5 zN2kGWd#1R}*s!GYjFE!XwdsxTP_D^cSs{Js?+NUJCORXX-LiGj-OA?fCU7F%hIDDj zW6UQuUgx(|$4qz#K6%GA!iljr#{NOPR`w6l-6q@7{Jylr{!gs_6yMI(crL-*{g$DP z`nCYvs$D#}!28tLhV%Oy{Qe5KA7M{~^+ XIi7PIYN^ z2gxvTL%0>x$G}l~^nRiV$uNS~3~w3A`>(7yuZbM3W&g3B=6 tg$C@JXo}l27jur rH8*vIZt7EgbaFchSB+E2B-oaJb{lLA!!S=ZEX?$7Iv4yVA zDbk8gR2Qvlx?bTsz(*7FQ?i~OH 9o zXxM}bFOv1e&qOzde&DOuiBH2%HD`*RwI1?kf+d&FkJEgbB0qZ^)7=HxYTlzaehm!G z)gFfOs*H|MI#c`G_l;;%XW5PYay)AXs&pRb-beq|xTh`#{!py94DQhVavAD@u2FYP z%jQpK(~D+2OYYJ)(I0K54K__<4q<(yZ(4H+hUO5nf6Q;)Jqqj-{yrPEV+>rjP*0_u zm5Iz-*`~Z<;-y#X3pZCiU+?C(>LVU6eD2NtC3!bfE_ `} z@_i(Jsy;f*Jl7Z9UOi;rl&@tYt6!B)AfgTZvCgz^taeA%Hi*6BYInS?x`O;Mdt$n8 znKuMPZ>(=DOmnvgv^ELMUE~v91W)>xoupmCH$QiJxSBhA$sYpK&z-~6&FX$9o7~@} zGbgilu$niuZ?5yKg5&S+@^e8mn?~K&DOy=A`U$z)zPyQhGRcpA^swf|BJ1q}dY}R{ zU$SFIbD-{sD1`s=-9E;f= %N9Ez9k{OD0nb?u@6)`f^}O!YGW+#KY w6<< zq<_7d{JI}Z{7JOp=PQ+oPIM;b`)I_TJ$a;8>%kv&y0t;(KEd;2OLl76;8r8|v4Ge7 zaD6Jcmb#a(>Qfx)1xGMsTbs<=8-A$XgKjVtVT ;2Ij*JMpyX)<=S!LZG2Z`XLWJi{O*CS{Wwt{ I+n#1=|v3+zz5npZuR{)uEgE)UqVc4ukd8eRg z`DX{~u2gUc+=f~gF8*_5OYvh*%WWm*wRkgoSO3|Jdvs`K+%qPjTf2{ zra|TPFcw4h41^cufk#aTvMFRtG5;@)$Y;L8dyI?}QI@kI+LwA^T6RPGQeT_yp)70` zSQk>3vl#-e=n?t(QQ&E FiO;V>ulHX7pUBMT(5Y-l&PSgb z<2Q|?hkq4lwC`2IY2ObSr~l_`fzx|m9h_!gC7fn|1UOxM)A`5!`S|Ji=oD5zbJM+r z0&M b hWihVDn{p(C#s(Hb|*%btg~v5MBNM`KUz z*Ewj}tM1}H-rf>6cxBe{Mf5%BHNO9jpr(8GwCAP%ldY8AHtA#S#8_#+1s^>F`p;bL z8~CZ9%bW%9`W)F!q$0b%5=`a)ztPWm{ly3A2kC~!@O#SC85iO17riJwb(ki-`Hddu zamw)eEc%K&3w6fxj@qM~@eJLaey7lx>0Uq8TX*}(b~>QLd+>GNwtVjf6Tkhpq_4Ml zli`>9d-N6Nf4Sw&PoJlJo$VJcuvc#AgM?$FOT$m Rer1?kLGC$DFa&dl56 zG}GOPW<_VCq8sQ(zwh985&aW3&h6iC6-|#$iwB6l*rT2??~H>Z=_L+oKaAhd_l$W% zjo%RX%r5tRA-~N#YJ3-u+v2_hZ)U6eZTZThl~f_Fz8CnO-pRW-U6h@&d!suj*OEFr zHWV6tq;$>ncGAoFJd88L!&IlF-cIqRzwmt;_1E{`7EoS7#~JDlJ8&W0rth!Zx&0-+ z2`@jVpVp&yTmK4mcd{u->h8S$V^()(X~OI7SftO$Y5X_q|7N 1$lBt~)xDvwM<>GlqmlNN zq_f-Tbao2Qrloo_ot)dzH{Amvot*S>t;`9U lR(3G5QT#w98$DHT`@o}Ns_<}SAvP(L&HTRE zjE!VkrNg!wdVe^)zNdWE$HISkT}!I;`qXVjObz!_?hBOr0{5=!T=afZcfFOFiY9HH zQqP-tK2zeXP;nAlcj-in)hv3wpotF8)2x}Rg2m#8?Vi6jOP}m_-#;CaZIEaDK3GfH z$~JBAMD2z7y&}C~j&8FCey+`O=0tWVU!Xj_R~6;ar((m?Q+%>cyQdd$KVi!qn?)|| zLG)xDJbX8G+rt&eLgT8Yy`5;g%8{+TWI3G~d3#&xJw=|i7(%XCKCOP`p3-Yo=AzV7 zuTQmrLwLz1!7S)ZG`1ur-?eS2_F{|nBE#ro;EVTn!;LMOFub;%G~$)m3f1ane}gk6 z?%j+f%;_C&PFGp}u3pjZGq|13*KfJ0d13$E`@1g^@6(;ne~$dfQ`*mhN1J OEMJ_5cp4kY*L%#mbZ`URgp<2$$v!O43zwxq+(dJA{)y@5R?(_Zc#YPp`d zPJB7~^zqhH4_7w0djCk;OFe9R&Hf(k#rBo4#Td5j#W(H6H|@nY?Zr3km0!?2&t7vO z_>A9|kqqa@hTm@p^3ZruYaQ%h3zo(uzncBtlBE-!DMFVHZRgmR3l{GU{$V--uVIW0 zS#EPxXP88H-o6W(Z&6v;bD48hqBEUU)qPU3a{`X)-LCOz_4i3zEAcMuRb^{MTJ4j! zLEk##q`eR<`09u9mE#&8`%;IesXsWOo%!HRevGUBdY8`cXQy)I>DQsxS9u!0R!+#7 zJ<<=bHcfuRZe#Hs^S)8n#qUjgQ+tq2m=5ReZHr$BHuc~P&wf*u-y2VL&z7V7!sAJE zHZqtwVb4f5#-#QY4=28v`U3l$^76L4hk}>5gNl9ET=`9E`(EB@^5vEia8zy^u#G)1 zc!W8adQ6Z;_9}Yg+T+5vF_{)yfv%B68u1qOyUKd$f4(#$TY_aD4}xXOKECRKkF0%g z6~wsgZiTsd|F-vk;GGJSfN-$v;~!l+_RxfqkmkMbAG&Kq(R1g=xI8_~`Y2t3Mro^; zSJJ^_$9!M+={*zHXWE}*7H0ny+ArC)9AjWQBwl;@vJ;S8`n=w_CVi0Oj*GBp&S>!t z=P}{<1Z$W~?or+jd(^-T@hx2Z!eo6puuWe8SM=@oki{p{Mal|xaV|1bk9|7oyaSk~ zew3xY@ny+ILHQQsbT`%J`rhC#IioT4eeG4H%e?<58{HD?+ah~cxy{^ly16>qBU?DF zMc;Y4o3P#q7+&`*?`OV~ce_c0ErIS2&{{PU^43&-_N{=01?+jT{pjrH%rZ8*+}%)( zvEOaQt{_*Q#E#d#A&>`$6Sx(mUGBb(^Lt(J`}IY%Ck)@r9K##0xDH&1OP3aLFZhqu zr?6endfe_cvMzQu6|!C6TXkV%@h96t(OJre6LYxM8NzXg&OpP*^ahIF?bDp7_c3%1 z_6LFmu9I~WjK5?|U*_vDuTG*JZ&SutZP=8VdNqOd#}|Or437GKetmuy7}vV`?8`mM zeP$L<*nVSE<#5*oSE5C4AE^5PTEZ0Ly2yBu9rwBAe2Q`wyK>U3^MniGyjeXpzWtmb z9-+NC%}ttr*t>)8>s~vnZ_-@M5H@i^aTb5@>IVK4uec2b=7QY28MF4jl_Ivj*pW@c z`&bX$S}j6@ncymHez7azyO}R6|FSl|oR6VjW&-S!{JqW|2D*;Lf-k(NUF(4D`Pw+Y zH4gQC1;72=m^1sxAH1Y;BGyjXy!M^pBdn#xBf6+Bf*5x`SUX|%iFsEs#%>;&HOd+J ztA%gu;~V NH$jo3H@15Yzg3zP5?YI$KRt{t42w!io<#CDoG=n8$E7z@BxB8>2q9qfn zKE7%qTJq5c@24||R^7Mqp^0@PYwsUg{a|6`x_igpv2tSKBiz1e-*Axp=I^Eq;_~z! ztvlgi8Sv!aIcdlPiM|xw@(wKg#M)w0Ez|G5uPt4R-=9BTZ>4O=DgG{_gAjdipZqJP zF~Kl225e7PqOpSOGtt q8#&~D -xO*BBTPz()gsw K zmAo9w9WuEc&{oOluT0rx3vW>Yz7zjxJ)NhFWcjgd|9tu2XI}a3v_bVz8hGK=r=IvK zW=y<6oh&17(-h;U>yzdljZxOD(5yR?hrP-%e^!N$+z+7lLhs}r0!!C=@7t~`&3cA4 zpoK^LjM^>!0)Dt#L+{gY=7l>$I-*b4b;hAcc@aFQ$XqOZ8-D$M+b -ZWP!jlo}@ zwDemCx)Ie|_={Y7UVzp#r+6Isb~ER-N8BY*G-niF&zwY^8B=Ype(>+coTNTHC4Ng8 zo>!eDoT7~x@Gm-&?3!GkWZgbWSB^KnTpIB;PlrFw+QomDTz(fgJe1JiNshol!`2qr zyepPR|C8s;3{Lz*Z$4_Cx)FZ~&YVHPSKikr;A;(|veLx)w;;_}jLOr}9r-$`yvz9( zhO@FsGu?{#H}ad|e} -rss?3|*vG!zxj?(;Ae;R&3ef&P0Y^lNdjOv%k zVe^FzknIP%PW12_cjcgy()$j3;BC4OKzPudH^PJ3O<%Xm9!l*~d*u7~&NOa(d!Qfe zylpyo7WxG%=Xg8Ak(U8KIR=+48?&?LGOYBM-M3n+p@RV5g&Ts+?!x&sY-sEPsZ)$R zhpex)OknhTpF*DhG=0mOlJl|LwZi^Q(0U3S2U+g#nfgpUo!vCeJAsCV2BA;!1K*EL z?|V9QdsS;W;h 1a2Z}w(w-dmJ<`t^^cLK8e9d1&uf|5NP(rTZULnrVrs>zN z;7Rjdmf#tB$lLMJr@fP`^!)a`T3cklOD6ZcO!uce0$i14U<1>@hA!Gjmv{GVi&m1b z4{NUg*oMYK;5UIC#IjQyts%m|f4*(_Qii)Cb>1f(;fIg4lsVVr>mnZL?=T8kSGTdQ zUP0X^%)W$VM4hQVWOTf5PuAJtL+j{cxj&-JyUe~`Dog)RuQ2y%=1FtbZ)qA{ul*dI z^%EZph-)F8@^Bvr_+{UhJbJGl8f_1=%8Sl5DsNOA{&XjFqI(^5$3|!PaHAjA&+mt# z#kY~w&eIQ`mq{KKFORrKqtO@iK@a`m@pCMC&eUCdmYUmJ0@@boT!E?U(lq$dcyF|g zIN?O?^=(U$$KChXt~;$H(?B1lZK4yc6+3yyCP{mJrvHFNU6Qon-xd%JBxz&6WT1=C zhUgA`*WzcKyyW{fc6%8rU;AW+CTWMtJ%tl*G3T|j(35D1^Ks%wo}Rww&dDjAUvCAm z)=>6dNcExTHy*EQx1Xze>GVS_K`@S!tTsi49XRN)p;KASJyl_rGn57DSLU3r>~V9S zW&T7~%1aONlo^kjpA24NO9!W~w0O~X@r?zM8;^PQiTjO=g6fz#_HoAj WiHbBmQ(o8#nd<6R*lP?aX}sue!P5T`hoK;rv$H1t_@yKn;cx7aT)m7w)!bx zdYcKs7i`(?@59#_7tMRZ^%?3WTz4WbjTU$d4kuXF&SCBumm{?MFzzHc6r7yWC+r-S zW9N`5TRR6xkMjZ6#$gZmi|7N-8%N5A>LZL%=`$4Pzw3Sr^kT?MbH8`wk<<9D`idX0 z9yD`wGVe&aSWkwz^LI|TBVVkaq^#ur+U&Uv;oY9wfj7+@Cf$kXbKv35=@ag(%b~`( z44Y18A;@FuAz668i|@7H>j%l7OtbR}-d2CZv-P8qlRuyVf6n4mmcDX#sqf);vaf{4 zW7J1&9|wl|MskbrKf6b3 >N0?n&RlX-#@ro6{Wt@l z^gYxmic02gDwPY1n&|~!J>V$oaOip2dgv(|&5pw? j;q8mI6UyLJVhPg8^^sC=z+)CS!_vmviHaw*#*)6TFK}-bWAcjN zQN#a)o4;xQ`O|6EM2cUYy}f!>u W-|8D@);l5_hiRvN)v;h!c*b_f}XuZa#iR zAI)%lJ|3t!PUpssU3PwawmE!uMvq<+UzJUU`X~s>wV3^9wI%K5jZ|E0*+5wx@n_k4 zvT~H(K9wvmkpEP@KYOa4ims`CF<*v6?ly0>4NC4sZdgG3wGTBrKXIo_JQ?_~+C7HM zfxXEsK|EO*3)b-#q4s4CUyFYYW4m4Ri@{~EsiOXCjnS`jZ`w_7XsPW9r>0}@D|tp~ zj&LWw<^#vS>wDwb`Nrd9lsRHKE{DTzjP;s>PhFQoBOaFeYI$^fV@?u(m92!v!7Oim zq490bJhdpS-5`8Y7w+n=#_{v@7 +<+p23gizL3x z-GGJ<#o_bZ{r=gy#;N)cJTP}3nAZKb&mZil!6T~&4~`&b$iC>2N+y1^DmxnZ)Ni-v zbzj-tIuH4kPj_st=-t_NV0>vM<1)3mQVedZh$gZ@5jy#19sS)>y~UD=Ialh&f%sDv z*uwvxiWcLIwU?-$rAyh_aaJ?j#QDZMBx5g4MTd^1qOToOT_w97)!qB?kDdl1>inc| zN?V$ZsR8QwT8ybzI-WG%{21_OWD#fEQ`~p8h; O*&iIW@9%Uy}Yq2{`Z6O8J**c;gxLdE?%a) z0BFMpL~rm&jp03S{Kx6}W0(bM`|}fS3{ND+F#BA(&qiZ7mBjgiO^q@9yLYheNNqA> z7+!kr7|zX(;WYTZWj?-hv*Q@rX%|1_4pVTgerS&CZtW|dXDoa9{