From 2ad6d281c77643d85abb4447e17c1560adb88033 Mon Sep 17 00:00:00 2001
From: Forough Poursabzi Sangdeh <Forough@Foroughs-MacBook-Pro.local>
Date: Thu, 21 Jul 2016 22:10:36 -0400
Subject: [PATCH] added tree TM

---
 Makefile                                      |   2 +-
 lib/.DS_Store                                 | Bin 0 -> 6148 bytes
 lib/wordnet.jar                               | Bin 0 -> 360493 bytes
 src/cc/mallet/topics/tree/CorpusWriter.java   | 157 +++
 .../topics/tree/HIntIntDoubleHashMap.java     |  82 ++
 .../mallet/topics/tree/HIntIntIntHashMap.java | 121 +++
 .../topics/tree/HIntIntObjectHashMap.java     |  79 ++
 src/cc/mallet/topics/tree/Node.java           | 194 ++++
 src/cc/mallet/topics/tree/NonZeroPath.java    |  31 +
 src/cc/mallet/topics/tree/OntologyWriter.java | 905 ++++++++++++++++++
 src/cc/mallet/topics/tree/Path.java           |  53 +
 src/cc/mallet/topics/tree/PriorTree.java      | 363 +++++++
 src/cc/mallet/topics/tree/TopicSampler.java   | 278 ++++++
 src/cc/mallet/topics/tree/TopicTreeWalk.java  |  85 ++
 .../tree/TreeMarginalProbEstimator.java       | 380 ++++++++
 .../topics/tree/TreeTopicInferencer.java      | 384 ++++++++
 src/cc/mallet/topics/tree/TreeTopicModel.java | 382 ++++++++
 .../topics/tree/TreeTopicModelFast.java       | 388 ++++++++
 .../topics/tree/TreeTopicModelFastEst.java    |  44 +
 .../tree/TreeTopicModelFastEstSortW.java      |  44 +
 .../topics/tree/TreeTopicModelFastSortW.java  | 297 ++++++
 .../topics/tree/TreeTopicModelNaive.java      |  76 ++
 .../mallet/topics/tree/TreeTopicSampler.java  | 300 ++++++
 .../topics/tree/TreeTopicSamplerFast.java     | 286 ++++++
 .../topics/tree/TreeTopicSamplerFastEst.java  | 157 +++
 .../tree/TreeTopicSamplerFastEstSortD.java    | 150 +++
 .../tree/TreeTopicSamplerFastSortD.java       | 138 +++
 .../topics/tree/TreeTopicSamplerHashD.java    | 648 +++++++++++++
 .../tree/TreeTopicSamplerInterface.java       |  80 ++
 .../topics/tree/TreeTopicSamplerNaive.java    |  98 ++
 .../topics/tree/TreeTopicSamplerSortD.java    | 684 +++++++++++++
 src/cc/mallet/topics/tree/Utils.java          |  82 ++
 src/cc/mallet/topics/tree/VocabGenerator.java | 238 +++++
 src/cc/mallet/topics/tree/testFast.java       | 249 +++++
 src/cc/mallet/topics/tree/testNaive.java      | 157 +++
 .../mallet/topics/tui/EvaluateTreeTopics.java |  96 ++
 src/cc/mallet/topics/tui/GenerateTree.java    |  42 +
 src/cc/mallet/topics/tui/GenerateVocab.java   |  58 ++
 src/cc/mallet/topics/tui/InferTreeTopics.java |  86 ++
 .../mallet/topics/tui/Vectors2TreeTopics.java | 260 +++++
 40 files changed, 8153 insertions(+), 1 deletion(-)
 create mode 100644 lib/.DS_Store
 create mode 100755 lib/wordnet.jar
 create mode 100644 src/cc/mallet/topics/tree/CorpusWriter.java
 create mode 100755 src/cc/mallet/topics/tree/HIntIntDoubleHashMap.java
 create mode 100755 src/cc/mallet/topics/tree/HIntIntIntHashMap.java
 create mode 100755 src/cc/mallet/topics/tree/HIntIntObjectHashMap.java
 create mode 100755 src/cc/mallet/topics/tree/Node.java
 create mode 100755 src/cc/mallet/topics/tree/NonZeroPath.java
 create mode 100755 src/cc/mallet/topics/tree/OntologyWriter.java
 create mode 100755 src/cc/mallet/topics/tree/Path.java
 create mode 100755 src/cc/mallet/topics/tree/PriorTree.java
 create mode 100755 src/cc/mallet/topics/tree/TopicSampler.java
 create mode 100755 src/cc/mallet/topics/tree/TopicTreeWalk.java
 create mode 100644 src/cc/mallet/topics/tree/TreeMarginalProbEstimator.java
 create mode 100755 src/cc/mallet/topics/tree/TreeTopicInferencer.java
 create mode 100755 src/cc/mallet/topics/tree/TreeTopicModel.java
 create mode 100755 src/cc/mallet/topics/tree/TreeTopicModelFast.java
 create mode 100755 src/cc/mallet/topics/tree/TreeTopicModelFastEst.java
 create mode 100755 src/cc/mallet/topics/tree/TreeTopicModelFastEstSortW.java
 create mode 100755 src/cc/mallet/topics/tree/TreeTopicModelFastSortW.java
 create mode 100755 src/cc/mallet/topics/tree/TreeTopicModelNaive.java
 create mode 100755 src/cc/mallet/topics/tree/TreeTopicSampler.java
 create mode 100755 src/cc/mallet/topics/tree/TreeTopicSamplerFast.java
 create mode 100755 src/cc/mallet/topics/tree/TreeTopicSamplerFastEst.java
 create mode 100755 src/cc/mallet/topics/tree/TreeTopicSamplerFastEstSortD.java
 create mode 100755 src/cc/mallet/topics/tree/TreeTopicSamplerFastSortD.java
 create mode 100755 src/cc/mallet/topics/tree/TreeTopicSamplerHashD.java
 create mode 100755 src/cc/mallet/topics/tree/TreeTopicSamplerInterface.java
 create mode 100755 src/cc/mallet/topics/tree/TreeTopicSamplerNaive.java
 create mode 100755 src/cc/mallet/topics/tree/TreeTopicSamplerSortD.java
 create mode 100755 src/cc/mallet/topics/tree/Utils.java
 create mode 100755 src/cc/mallet/topics/tree/VocabGenerator.java
 create mode 100755 src/cc/mallet/topics/tree/testFast.java
 create mode 100755 src/cc/mallet/topics/tree/testNaive.java
 create mode 100644 src/cc/mallet/topics/tui/EvaluateTreeTopics.java
 create mode 100644 src/cc/mallet/topics/tui/GenerateTree.java
 create mode 100644 src/cc/mallet/topics/tui/GenerateVocab.java
 create mode 100755 src/cc/mallet/topics/tui/InferTreeTopics.java
 create mode 100755 src/cc/mallet/topics/tui/Vectors2TreeTopics.java

diff --git a/Makefile b/Makefile
index 53e5a13d1..d76cfc462 100644
--- a/Makefile
+++ b/Makefile
@@ -2,7 +2,7 @@ MALLET_DIR = $(shell pwd)
 
 JAVAC = javac
 JAVA_FLAGS = \
--classpath "$(MALLET_DIR)/class:$(MALLET_DIR)/lib/mallet-deps.jar:$(MALLET_DIR)/lib/jdom-1.0.jar:$(MALLET_DIR)/lib/grmm-deps.jar:$(MALLET_DIR)/lib/weka.jar " \
+-classpath "$(MALLET_DIR)/lib/wordnet.jar:$(MALLET_DIR)/class:$(MALLET_DIR)/lib/mallet-deps.jar:$(MALLET_DIR)/lib/jdom-1.0.jar:$(MALLET_DIR)/lib/grmm-deps.jar:$(MALLET_DIR)/lib/weka.jar " \
 -sourcepath "$(MALLET_DIR)/src" \
 -g:lines,vars,source \
 -d $(MALLET_DIR)/class \
diff --git a/lib/.DS_Store b/lib/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6
GIT binary patch
literal 6148
zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3
zem<@ulZcFPQ@L2!n>{z**<q8>++&mCkOWA81W14cNZ<zv;LbK1Poaz?KmsK2CSc!(
z0ynLxE!0092;Krf2c+FF_Fe*7ECH>lEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ
zLs35+`xjp>T0<F0fCPF1$Cyrb|F7^5{eNG?83~ZUUlGt@xh*qZDeu<Z%US-OSsOPv
j)R!Z4KLME7ReXlK;d!wEw5GODWMKRea10D2@KpjYNUI8I

literal 0
HcmV?d00001

diff --git a/lib/wordnet.jar b/lib/wordnet.jar
new file mode 100755
index 0000000000000000000000000000000000000000..51f6c9d30b1f6b85211f9e2e196415ade470f070
GIT binary patch
literal 360493
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%0Dn>k3_{
z64iB-?1mh+C`T^xT!&Q|L+d@owb98dEwpJ0eZ=%zfizw*8fPKg3F%_WIYXkRes~j#
zgI9+fSewi25$}2nc!`h~fn2s*8jGi-roTVoQXXN)3w7mbr8P7(D|w#Rqv;M?3>gQ&
zJ?Qss3kX1)xpv|bKIU%(G4EN~ar<dlrT#V+NBQqI76UBT4;|Yp%MRZIju9jZUVmA4
zaPb}%Duv4iYzaTi(y+?>_5L-{&e53J+JtFPu61vMn>24}mP}R~FkT?q9?g5ESvt=$
zKW}}nzkM%|S$q26nrVh1{(d_0%DArNm))!|WHX|<x)*=y@(!1s=R`ku63VK{+kQsy
z0arcu!JMB{@TL2otL4*gmGt!IS~>f%n30nN1w#db`gyV4{rP@wlmGMi-?otbzilWf
zx!D^3FQ~I)gDmjtE11BAKP*V2T<p`U$#=aVrU|}mh;>NLaz6OwK<$)ug~#57<$0(_
zTzBzxmtdE`I1}6gPX6zqzKx0L$v=~yrThE!9ln>$0*mC1A|S&xQvf76><@~pR3h|n
zv=UP}%Kni=My%PZwt$+IIO#SVJtq;n6DPiAvPSoX>kpyHosW?$pBW38f0Q)|Szy4S
zU#`};=I9;c$GqlWb}ghI!CRL8j5nzuTWr86;<kmN8J^glQ%U9W*%H56#zvs0Y&l@#
zF4*A4A~Pb4O8-rk0!5Ys51y1|d}=)Nj-x$Kgb;d><t{RI-Sn@d2yX6s3y?Hg7(Yk0
z)71oboy#A=ccJGb6nIb(dMyHc4$%I8%WV#4tJwwb&vqwTt#i*-i;>%DE#sUgDI9kp
ze$)ts05g5;&b)?$m)aVw8N{M<g0R!c8xwt^q#*~?`q4c8)vT7Cz|BYD)YadKrd@C-
ztoj!{3%?gnsQqeL70baM6nf4M@b#Z`q5S_yij>|7k-LGx<3F*}U&GzZSFX{xamH18
zLwFgH2E+NlTT2lb_&r^&`W+EH;yN&s@6skSda1nouZB?GULd&|Uorq&T7$Rnx1~rq
zm<m4ldo`xW(|QSdrk~uh;U8ec_{AUZwX2AJz1aGY5bP38fPD}9;&hhdGBOGl#)^VV
zQrxTKPjm=x4s(W!q_-{Gt%!Yt{U;Vzf7@we{=gjA{}JX0{Y0gqjWxZgjg6_5F}<z5
zjiZf$lL`I*rH$!8^8Xl%|BZ5nR6lh!P0_w}pxR!bfdL?iDZoMKY`L^>6jz*Psuc9n
zI8da1tj*Q%d#r`<&}4a*SB(xC08XdrGQ|=Zt`kR@BF9dvCY<gc8S1aYo!y;Wf*Ch^
zP(Nb{*qoTQ90!@{wv#KjX^xq$moA^4CstpT5A9xm*^OJ&Y!y3|AyX??s2t-x=1AU=
z(}&3J-cxlEU86_b0(wUG?70*yub??qtghZu%gFBOQ=CX0qep3x9fL<}oV*mP(gBy$
zPXKTAfiYUm>TJNx#x0e1?tTdC;_e?bzWLjBc&<Cc<qv3BpK<ePi&GPNHWoND_VT`>
zz0}|X>`iQlKXB%^W|+&if&-xtH4r($^6-Y(GUcfad9XIC3^Cwn5md>jhyOkXyi7fK
z3V5!0(QK$F&Jc0p!gPp{B11|N>RxTRlOri>JM!g;y-AS8NFoD4B5uYT^LA^wFf%Nm
zhYa#U=a{C_513Chm$Ast8`>&O5wl>dnEbq3N;XnVwElK`c`TGgrEiW`J+qFJ86R>k
ztxUWysdZD6Y#iLRF35CtBdyHxuaEVHnmV#u|5-hGaz=bCx_Nr_^4gwUtw8t}ECPv!
zT8LW>HgTx>Lyb?az};CGm@7nzfgm#U8;xYdOjWUqaD2~aR=l>22Zu?o2b4{)RL;y6
zO`&YtQecZs50;_F!Q(hvH(P{IG&)so@QiCNdAUDG$6`dwV5Xo^(7pSFv5ER=<V5Qw
zA)mJs!$)cUnzScj75IwS+$&{dVg3Uc^zyrd5>2$@K0$lM-oyY&0iliKXIb2r9v+yJ
zGd(ya=Gv<JjlqY1>}#SV$--cK+w~$`_#PZ-L?sN~1|QYPm3(NVb{%L5drv9za^M>$
z)l%rc1;3{4!;dI(!|x@@IfKR2puLn^WSjUR{^G+AsNf8HrwK+a4D_#rc{jXU^iv&O
zPeWQ~#ng{_@c%Q7#yxMVstyo<R3j6s&OM-W8Cyq-4o(O`O*F;AOqp0>7kSu>&DT(6
zFtAXhPS~{whVIz$KOQ|7umCfR6CjR*3WP%#n!&TNBEx5SAK(rsx+q|Auy6)@``oR>
z;~TIB4`EHo#!GPBh_;K}0X%Ln_MTD@V-y%hMl;(pV;ivyjt-cm&OwV1M|MVfMv7oX
zF>;QbqRMRCF>2Kv;L&W@ApoQCwH#o)7KQ6ln)O6*HuUV2x~@d;7^n+8WHoi*^$eha
zbE#Nfg$qT>{hr4|oRY$tGuk=IWz2#b$%nyi5UPPEw<xGHx^jD;Fx9n=f39DPmfhvy
z!av^sz?V1q?mflsO0cSyda8oyt;Scq6V-XwH9KEnE%*P&x@ro8u<67~^;Mp$UqDVh
zrOtpHp+KK98`hX!WBTEbB&E>fVkA@Q8FMlD9I4r%@PNc(!t0Y|zQR0aTR4O#Q+v?g
zgq#kj&yCwBS4!q?{*HOh8=K_D&S10cuI7kOXRVg5@lB+vNr07&Q#MdM@icG70OI{A
z-zT}Nt|ecM8fLvmC29@rm|eU+wk?#5Y2awsE%{u;!B1XjgoJ3GJ?s<C;^tl2g6Aj!
z%>gIi|0$a&9FcP0ECeJVq&tol;wK<vJO+x3N}c~Hn<*?H!(%=ZFRs0N6KTuJ`{sCs
zqIv_%{g&Z9CBZW-SG^yT_T&X4(~BK)+jstTlw*xB4q~4i$0eER|4W~G2L)k1M`(5N
zCKuBxP8Uvc0r@^zKP}0R8J^BJ2DU6XBJ`J&9*q2gFsyuc%E}`|Wlaq;V3c9{uT*vH
zfow@+lKsM~`;jHnO^Q)-r^KwcuQP~!k^soFd)#l4*x#;!yHtID{K=uRiClws)%{PP
zb$+|rA)H_0vVaKa5s#ABqM-glMMgzB1w#NK7hn{C7NG27^=I<GS2uRj6p<5*SPfD%
zV4Du*VJA;#B-CJ_ycQK|G|*@yq+GXCzZ@#a2aO5ya#gq-S=a~u8E)d&T}PZxaU%B;
zcbQ9h5O`PMO{|k#QG6=Wey7++jcaKguPir4K)bkDvvij5504)tZJ>ahYDcHfvj={W
zGcVs3azaR!Z|LqG!0L;bLgp}Ys7b9(pF&n2U2@md4Xzq$tlBkgFyG)`|5!+=^#X2c
zGeK~=z_62G9a3Hx570WRYc~hxqBy6fXbsBpHvJ^xeVoR<CcX2rt|&u|=N#l%6#^nP
zAR;cZ;0}+G<Z-u3_izhtd}tj=cUGp&&nt7sSC%eHc2l#dbak9J_)Vsdrhga#Ya1Fd
zZ%Hef-%%D+Y|7+fOhs!#iysgyyMMQ6Z+~nSM|0f<9<j5QnqjFfv>;s?zhzu^D6W!l
zdELqV<3?@tqE=OIWF2p<qAXqi7H>Vr!c%0O^6}Z8RGlc`m)LktrA?V3NNK+Cr#&zc
zRb0G-?zCP!jE>a92}k=)VLvt=fhUKqBaywxC<jnd!7mYBWYnX>ubP*bC^iP_PN*%c
zpg=_m`AF36NV!Hvig^CvASRxc=y;CMo~fWv&1I87lTy5TQF6V~`Nf@XRI?+|aQRfh
zGNsca@^JZdK|=LguwIaegocR7tT}Af?(}!OEQ-va%wL&8-{VX%!YIx-qI72>PIzu4
z$f?d3vP8|(d;0xdX{C=Jj=c+Xh|IPcRz`@t2%bhHk-R^)d^nE*PP-6RbcB5-I$A1n
zQY+bYpF=(jeZ-GZ40b1V^8rCV`Zuc6YszXKYFL&;R;lWG(BC#nh{TP3$7unisWWuO
z^D`xKK0k8OPgM7?XF1&$J$zBKQQF6vm~0L2&LBihaEn`>$=J^5Q{#MXdqI{?iI1AF
zZ<IN{g8l!J<0ZW*W)pz|0xCfLpD^@)0QLWC-16U$WlH0})Vz4v(#9q?J1-*weQ6+|
zp#S62h!RVK5*Zvw3Jgsl6)%dJIysmItv{FVR7TyrBr(^#TxC(AG8@>s(T;vqti4EQ
zfzg!Fe649Y({?j;cr=wY+57uygzY4|BlDZa#qDI<_LT314-V+)(h9P%cSC5K@SZO2
zCA3ra5R`}j`7LyGM2MI0o-)n{<qa`zCYIrMKYKh00<~H^UUosUkwx7v(<7Rowa`_(
z*=bw^wE^~!2Q?~q`Orf7KUuACL}^0x>=Py&gGb0?#PPC+?B|%GTEKC4xB@>~*vjO;
z(njS+>;~~<jgaHUgo<Zd%LcQ0)sZqpmd=Dseo>M!C2$5}k>aA)Dd1!XAB72-pimMs
zg@|#)!4NrwO%gNZh>^yD3!x*+p~WSHDxs9s)d?%n6{lue8A@UvvbHPBx&&aK-go@-
z=l!<tp+7auWpV2&|6vLIsCof`YHIgvEL6Q)S0?*4tu2+gTUAE;6<LesjQ=js+&Vme
z0n6z0%bnN=qFtKO?%uA)&#4(HNPa>xG5s!PN=WCAlXCkLP?@}LJPjWuJ$)PuPkS|S
zo=J^WO9o;7#G6Ohx_)$~nqViu*l68A{bT1NTvQ1f^+43&C*b^mzQU@SHga@DsfqU3
z(Zv&*QQ#LPNS0`%^<(U{vr+brG)Il;r=WRa6^&`5uQzf>gaD_&t+ao-PVCYyrWbc%
zZJEMFjH>a6t;tL?KrOeO6uOj{WHFh(QCKKLshB}*N!en~3Csyy`GiB(#-W*oo%p8|
z!+7$Xdw!)NF14hNinFt8RcUPl*r;u9ZsSo{4yJ}S#%UZPImSHc+>jHF++04gmad|$
zAS%3qW0z=o2H$FxunqRaZs{97w-bn92;@4!7rAsKgi)<ozi_xw>QF87ZkZrvCus$<
z*wk^cWehmnPph!gT>RH=uF2BTRo+~>u9bzKw46{gaio4FXkK{{mAq@hmTp9O{d*0y
zrUtss*6L^Qnc=2Fc!(KgT^&3wH;T8Xxq4nmSFC?H6LU6>GhmI;2{K&7Rf%=(3clRC
zW}-m}9>&9>qkWOTw?ueg7<+DP)R~(*pF*R2KkX2vd~3qCu|kwK9JLx<(f7m`K5K5-
znl4{_8Uzx4mW?}n_sn1f-Ai(X9QpWGhYY82c9}G=#AaCuPsSm_g1Cdm&`9UWYoLy_
zbMu5C`6~{5##}vu6-?X#(#-fAmS79#wj;m-$D8)&z&ve)ZP)x4;Poj0*KvMcg$}z(
zu7Nojst7e@3%F7EQ($F9i64KO;RdS#l5hLi_5s{9cXMHE8@yTBjwhh33lU~bCfP!L
zYQVsejE=(<)HlQ!755xLiI96jy@c=b`*de6l2LZ{nq~=ZJok~Ik(s^CRa@JDm85Fm
zQ6IMdhX<yLZaLz+p}Ktdhh{90zY0*JHsPjV1#vQ(gwI^kFyw3|$8)U%cCq{%RHZm^
ze48n`t2D1Ds5Jj)_?gc=FB?Ax8Ny?q<s?-a<fR<cDKC}_<sCH=jK>m;<pZ2g_1ewT
z86U3!SCENf(hkgP&tss>bzAg~`|%F}a2m_A7`I%;-5|Educ-{+`@q!#BxkGvYH*?v
zjBxuq9?5my5P?nP*FER3z#_A+Ob#^1crpfKyu>pSYkD@{WRy~Bq}fp;@pQhRKPs`q
zw$^}tnLqM$=))OoFkZY%_~N4-LJRE$ahSoMWw=LMAmu!deD^XWX`;lE@NNyZi8ji^
z8b_J(P51Im@)u?H*QM*FOLCMd1JWZDI(db!qsZm~Q?441coh!rgFqhADWW|E_sZSg
zeB1vv9aqMgVW*3`s(agPyFohi3qVZ&mVk7GZpdr`*$M1}48G;c0@K@R>Q#UM_F4Pf
z!Ik#4SOB1Q82!R9TKsrBgaBH{RketIjXkO$+K?_7O}~9B(mZY8me}(eYFlQz7GxI;
z&j8=p4ak-CRjQz-I%g&bO+cWfIG+8=9z}C{6(LvcyYy>vzf4JaO8Lq_%b3|A;CGnz
z;8q~6<^(5db97Zp9W!bxJV13d%_^Xul_{m4Gt99L0G{njj#gZc577keLxI+u)&^}2
z8&@U7E#w~Nigs-1B{ZF1o+HMuFOWx&O(q$O+fT(Ud?>Lxkb53#o!{0brT=M*6p-&)
zz2(|X?h3}FmbuC?ko!@~<`-o>kYVwGhzW;|yGINbkZC)=gWcWER2sYY$E{`WPqQZG
z=F!9Alg)bJ`+y)Tt8bemu6jb0^#~mGv?o-;+3S1~1$95S?V)D|`E-kIRlLR7I&t|k
zKs6#wv)t9m%FMdP(wQk0eT5oGBJ2c$_FFGjcaub1i2?7xKrMld9fJ>HdB2#<!ZB2&
zq=mo^wJ&7lo&_vC2@_e!<mYI30X)4!bml?EnL$_Cty29_!!w4E9$+XMkw2}yE_kja
zd_iF@l=7;*Rl=d}9IA%viuhP^uYW?{qO4-1n?ahMt9bVqObCy<GMaS{tf6Yka?P@L
z0w-ShytP;7pCFBsl)_}GgWZ^(`K}^!XBjW(t`bU7_hG?T$RA+Co&FhY!rVD|#6;FM
zY*uS8K8dlD?>x(O*$Jc-N_-C7{+sXNF!jAO5NriXUkIOx=KgH+sGnZ;$!Mq$c|#Y_
z&lsIgaUUEoKJ2{L^~unWbtJ_a6>M+jhX%xe|E)hAt_55f@YK5t_il)h8OAqh10FM0
zeR{+6=yD*t^pBAi{gWs7YwFeE;xm;$!aF9f2g66Fi$KwO&L=r<C#J`Dn_%(j1?RnG
z&xZeIr~2iF;qhj0hpy|}s_Pr~?>EM6i{{M;wI2ojFYiU75OJR959H<dy5U+HS`Mf+
z(lw5NSowHvD0BZNXbUu!HWKq+_I66!-oVa`^Jlw2wLW0zBLTg5F#^E{;G+(ma6!>4
zdNA~XXU{QtgI~~E{)TAM@LE)40aC3}Z2CZ!;%d{OGl57?iha@Ne0YC9O9Y*|A!;hf
zuI(e?KG_1P^<n^nVEXvJM?i-=(mpxp*b1df0!`Ed#HNO0aKs64#Iz8qwC&v>uS{CT
z%S>=1X-({M`xdK~Ki>zF8uO$YnA-J@YfRe98us)?+xp1fqra`-VGoX^h%)t;KWdfK
zk}PD{EWNd;B31dqY}3_Wq04GD%hefS`H0bmHH(GVmo6U~6!dG9n16Q3P(@;Bgw+mI
zzPXjz@|UjxmOt{9ULnr7Hzw0{<6#iR{*<Kt=^;YvmM>qkSpFzia!pZc7^-}8D!Y|d
zm>M&gvJne%k^DoR_NRvuts4sv2gTfQ+(ObX{<xVB%XVSv=sgBZff=YoGmPk8V1x++
z=@*q5vgV5IdthD5vF+zL(&38UZOT8r64!95FCwZ_o{^-=1cvgw*Tw~g60-Yh+4q02
z_RcY~hyR!7ZQXYFZQJ&38@FxSwr#uGwr$(CZQFKle`j~HJCpn-JDdHpDtS^#)l>Pr
zabD-7d4>?QoyJ7;;Njnd#O%MU{7OT6dSq$A5g{TU@11qrxe{s+vxt%00v9g@OQjI_
zivmC@u@)*4Etko6hhmryxgq)sI%q0Z3Y(fL;M;)gQ(rO~H4!H8SHpsG9o(!im6$~&
zfC3GcSS6QP@(--@WNEAF1Qm||E77gFAGYH;V~xFI2;<29=wCk#T}&B2wT<8Rtsv%X
zAqp+Pm0Yk(w=gFMsXM!?e|Fey;idziU3o5c_jfS0bzhb)V0|o}`doHB&~c%Pz{WXm
zT~tm+3?v?8VfX7sDk&t}a4Ujbh?h<2CFqdpv4Y1UnbjBOpoJFrY356W2CUFgLs26%
zmG#K&`)g#Grt*elFZd(TJ0tjM+zDFjXNmXF%+v7G1VKY`%?+do!0aHT`=mA9TZ4!s
z3P8BQc@PZTxQ6T*3hpV;r%V5)$^>9|awy)U$_`58_+>*B->%jqCHD(!18MW%y}6NO
z443cddn0O2qV+m?(r=7e=<!wu5NO+kp4Z^2P;G#0qpe1PTm^rw^#ugI@rdCCn=>^W
z$*D5I0HoR@Suv7qII#JMA*QD~fo)`m%a={a0&Z+iGpNBWnbA{nK@eF%!C{fA|G|$-
zX%UK8Gp4%h1eQLF&^Ic>t>`g4cF{|E@mZT^V!QQ|E8qo&z!Ys!+~7v(n|ET%;uw|v
zMmMAU$BW3~l$a%Ugzw0hi2(cFqb<G@%&3wP=LxO)qO4hpJF=%8P=>9Q2&Tjh#TzP%
za<?b>;Qw{6PFtqV0{F1at5W;PXDPA3D!2t2IpPeg8cnlYsnp!0fi{Gy6f0W!l;uH-
zyqmdXnH)4gaJX%WLgVm3_M%M^pP^+E6q%h31!RPh?TCerILOc+wtgTM$OMUC-ffuI
zA4!n7(VDrbCs)qo>n-Qa8YXpb;M;`Yo#K@V=xq|=9qO?yQg@Ku<!7h?`lf{;;CszT
z_1@p*cZ&=9CT}5iAbFD@=m0V=e?FKH>W%vB(m(5on6Yl6UOH$sgN)+-@Ia`&7xt||
zH3oNgD8GPxAgUJOc!PB>>6JY`T2oP6phvV|MFQ95w){2>Ks#v*<)iD9K;SEcFzh0W
z1X`f*^+p;byw9X466y}x7W12UE~fWgg3j3%sU7i54mX<}zX@j&KJr*Z=hFb2DVL*W
z*sj%Ae*k~UUm(2qvVh6q0eUDVM@_xfrl)yxNN_Uj3K`TCsTTS<O$IRg(IWgDnEp8+
zj0~7?X-q-=BncNf^3ae3d}024EDmjvkWWCj1P#OX@z5_0onN0ITM=wXMAbn>jB)|B
z{TjO#dWoWhH*inC8Y&vG1D8DTebAHed_6y7qaqLROSAu#`LFu+;j82lpJwx~cK<cX
z+u%k~SB0tw1Xc}f&SRlouhr}<__d_##*uWa_l;KjNmT*V6@Iv^3#J)x$XEfnCXaoC
z<eWzCLn~QVFZI*lsbPPE{b&5Hn6&Gl4)^O9FVp{jZR~&LzUHa0?DmbP(M0{KA7PMA
zH6Z|m_VFuXa-9X)00tqY7#6NTig0{cSTG6uG+YG2kCeb{3zC3t$xv!Nu)r;$DC}=8
ziPSQ&MH-C;Ym@cmnzhvP$x`Lzl5=#`>a&)Xj*gBNhMG8o_e;mstM>PO=C$YX$>nyZ
zI}l&K>i{hHR}=uRy%y=3{TAs;_7mP3c@Ix(;gyWcTRqUnxj)EfH=1{!?t5&o+wRr@
zcRpOl_Ev)R3+G!dQ0KN;r~L-&qd5Hs2fp&DkNDnQvT1$M$@=EB?vx4o<rK7|jEnZV
z;bdFx3*f)v00_m}vInh4y17Pk4suc728wM^?&`;BNTL>6(+efE+C{fS43D*z?9__0
zMunGt{5z@&0hn2D5SFztZ$|Fx|CY%*MXuj49rT#k7#}>O&C8gqWY<)5xTU8(vZs#*
zVA7hmmKa=~rLKEg)8Nk!^7HdE{k<2`WU`+f7}TdtvaL-37)jUi=lm@j*dtKlQ^!-}
z_tFSi&?UysucE_N&buV=p)Qhju`|JESo!-W3??ukIM-A#@?q#5Yl)(kkBO~7IB(sR
zT-oYqmVZJcU^k~t9lyKCIoUU#d#)Hl@(Lz6k><8nn`G_s8g^Dx&4hRd{_;*FU}G5^
z=WGjK%(*HOT)<0QF~?|+L-Bl|LIS_+MQN|StcZn7cxnqFs0g&b3=#HS01MeE1a5!M
zvIS|`pHK8wq>%%Wlx7?p*(t%;i+Ih;RMalq*nVeL&o3w$8Lb@GDjqv}sCipv?5&S}
z5f6@>!@*CiHzj(B>I5FlM)s{iX<Y!*><J3l;*rINX=r-`2OLCP-lG`5Yi{H};h*7@
z=3JOtlA2lp;*NZ3c#$wr7p1j}&h?0ZSMY?S4b&q1ysJZ_RQf6yKLQVuA)VX}#r9=w
z;_DC|9ar)y=hB1BfG6B7J6WYZ`n?tb42YqHliaDCG%95wxo<zMFWHPGkr#-z&kg5r
zW%DMoOg$si4`%tjtEfQ_CpGC>@twL%J*#q<SQYX&%i^4t8Wu(ZmIG3aJEiYmr#Ob#
zU`NKmOqbe&;pKdvps2o25?r2IZ1(sSdVK3U`@qna7#B>F=kkgIF2$+>61B^C7AnjW
z08@vv$)t+Bg%M!nK^Wop`Wxp=8Ee|3CBn3-AV9>%5xnMbZoiN+=H-g1htp)%1~F8)
z@?hEmLQ=fw1xL^aDPL~(yZQs;qk+MDJhS<|D45*|8(V>3K!CXFV+hN82n)pl1<Jsv
zbw|dMRklxeH^BisJX1_PSU*UCy3mC8+fv%XYO9~DF`0LnadIZ`{0Ln7<)WCkbcb+6
zSb483NHhYSii$1%Me&LBcpHfkzr_+~n-Md8b)8BvHzIubnx9~A*_=0A_C*&=Z9P(T
zPz=u@K4fSif^E%EGWYjJQX@NBf7D@4bFP5(o6J%@sW{7nL-E}9vI*eM4~A$79R6<h
zg2adKuNy={lk5m;^5v20ZvJ!z*)e&wEawZwByID)6o83^u~@ar<apicsCf-98^h+y
z;}T{f(#-l~M17?}N_&mmZ|2UQM_FEm)-1h<y@{3FF?|n7C|fO)f1M#X*Y0%Gf4Ag|
z83R#)uufT5t|(7<KG_LdgC}pHsWSP;-KI<l+OH!3&|->wGI8V`n`I|}DLAJvAud1<
z_2AAU%tJUL|Cr9&<z19|UgyV<IGJ$^W<JI_hyu*&J&<z)6QA{%yflCCj0I->>2v1+
z*a9#*$U!fzP&-*%^N{4ksimLbUc-Zi7PQ%k&F2ZNZYDagLupK4QX9i&jWT=~rG!Qy
zWCc`udbhR{-kSbg>;sUxKJn%lpyU~VZ{YbXogREuo`v%gVP>8}j$PjYv5IA44Rkw&
zdTP|VtSH7!NSh+?qU#z$%H|b(2vJ#boNtT@C#;2e=a)AJT&Fs}ib8t~hIM=m9;>K6
zCx6^Z?@$mztYGp<Qcm7Bg|oPR@<}eEaPi$-<JdX;EZiyQ!KG3{4e7trd*ME9@8|n7
zVcLX&MEz!ki`W6BJ*2pof);he9~4M!ixcsRjKcL788KIAJR<JV6_F-a_%N|&utv1Q
zEvO6ccqQ2_J7o4ST1FpTn6@A&EmmhwgHZmLfF~eUkncf^AK^0&{f`F;0`hyt9*0=q
zK#oEn2}18ZV(`m&%nDi9xsW0vJtk6FsDyqu8-7?oL=OR?h#=^so*j`ML6oQ~7^Gin
z{)|mn2>&{vdXyeMU0C{noESDzcHF>Z&K~O3*4UsOt@Zw%Gc6CzRm=@``8}|9!a(L8
zt@1@E@fGTG4aT$h9uF7Mzg?x(@u_CKkXAN)J>T|#54}*dQ*S?`RV$WaSH2wD`w&q-
z()Q7=zlHg|Jd+k6u`_F~KHZQ=eurvZh7c7aEFs9M@#l%YaLJHdP?2ngf9H1A&Fj4K
zs0<1U?#bfj*$2az&Wc9eGWPy)959Z6W$Y0b;$h&{O5gr5(m~={1}zg|RpR8$w+SoJ
zy3NfMO@Lwkr<OSy&N0{zyfc7buaH|C<g-^&<1xL;e0Rfi_GMH$eFMBzWAFPp;_AN~
z$yC}!lwM(}nMGp;7b`)&_c%=3sF7SKCN)%y6%Ryx2$Mt9{`{5@QXW1V`vif*0`yr-
z>oR;~wb@>M`rzaQolrEFIMg2y+ojv>3?|JJF<DhBT_0=0k}sxf!eVTQUu1X@>dT0J
zj*cx4KYPjZnufnaf6i&{3H{xrQ1!`UU|29ZZ0YSg^+Y)SrCruJo2orLuft7k7nA*$
zIg<LoY^Ppc<_0RA)LE@1E_!B(sZY{{wyfZt2470GZi~#+jos|*D4R>%fC66zV{iL-
zA^@26*j_=b_zJX&ndhmFaH)+5+XSS6wYc&VxDtbRW$kNBuIv?(S2{>(b7=@u2Q%r^
zZdp+SD{O|x&Vdo5>GgNUr$t?u7yUhx^nR8d$V-aFnxJ)5JNiThZnsGOB14q&czu|%
zhijn-291euaXpj=-l2>#(Us!LVrPG|QNXG{ie;~<%V7#Fj<i8rq(QrsK|7$eo%5Yh
z_kvE4rTg|^m`!%F{I+oG!ix5tDH{%4qK|<gQ`ye%(!e22A+Te*@Fq5%%hwVll^JyY
z@*eRyh^clp4hTvyvOafCl-{bDNvu>Vi{dY9z2u)rTU|0XkBNN%OXFIJ(6bljE9fI;
zNznl!n3GBDw~_h5ZoDGuT}}tEih_o?bPw~5!sU?(NahQa{?s<*bbswTH5AKYrpT_f
z9qN>dtfI@%j<Ub!-jY9IE6U*=Wq<{O*Xeu<$BTSQ-rP7jhk;z_q%cWuvq+|Ean&3(
zsW)`|RDWapgcs^yb>VDf1O&cI4@LDb@@fdiop5}pT5xD*aA@IA%xZWDfvPxgoYFWA
zDeB;F06sqlAgC=YN>8$G&iTK&o96&Uhcyj|uNz2U2@4im&6xq>+-1DC_<a(?x<+#F
z7z}NePRmoiq!JcMWZj_#H?W2hmP<5@wI0jm2z3I)S8epQ3hSr#m&qto8)ZzmnMdmd
zk5hY$nk?VVdVkB3UNhEameog^FF_BS$S^y8GtC~#ZJIwt*iSMt$)V8Y-ccypir}FS
zE$H<ncw{>HZxnee0#a?`Q1#{r`K^%#CE0_8?!2iJ;d9h@O3ai}6N)Vw6Ug@(KvpL{
z*>WtLNG5mH>_5-RJz;)&t7W+nTqPAB)T}IIk<M6R+<&E>3HaQ`afIjcElz(z94T0d
z3n4<R-$&i;(~8YZGD~H2(@1Ik%0P>rWw`~erzLe!pF7>Z??8<me4@6hrFRUt2TJy^
zkDxO6<KdE*ydpCE+m7j@f%zvPJRg|FWYa@%kK~5IKC^9_Y-z;BKKE@$n`48T`-!%J
zsy)ff58ENvJ!<5;;4Kc`cjIMri$Cz+4&p;c;rEqa<u(X-gOTnikO;|O1*H)QiCXZa
z+tOXb^S~?dY2zGd(1-eH3MBg(M1uC&BSEnmxMM$-%PxPLc8CdJFU$VM&FPMOcxD?6
zGcL=n)QIWH1H~LIX?p{^r^1G0%H&^Ql9WfKqbeasABsETm)X@ISKBEe7u7YJHnXg_
zN4}HK7{U}b!Jz9mqn=%_FV*V5JcRi+lf)YeKk|2%>HPpzUUCZ+aR8=yAozZGABPcr
z-zCt>E*N=7zU(iarQj8q;RfKovV$I={fW~NRQ-Zdd^N&O(&?pV_iI1+Ax4zAh<#vX
zM$m2wJ~+C_eL(0&Z14%X!yN9KZU1>=*^F!twcl~RM155Ko`eGy8$4`55P{g}PYF)H
zp#Z)G9<yV#&aXxEL~5Q_0SB?6o)%h5b1}twA-o#UDsV&if^gZ_wqJ{_^u+tz%%+Wy
zst>LOH0fOcWz-Z`*9FgBug&p_MkN$n&$CuGf6*Xki%_+`QPPCVN@`cKbGf|_PgZG(
zEeU+#V&6RzjPmjYeF#8d@G`WPFZcA9?+#(|7;>1!n@E!|PUFSiAug#N5C`l>n?ZMq
zkX_11IxAv2b7jB{V<=<$m;?HWPESnKPkoFfzRAJDh(B3yhV60MStiTM^eUtpPmc}f
z>Bx7!=K|GQ{nXg?oW<vlo?#}I&QlW4Q%G8m*X_Si?7o@pz9Yr<?FIIy3+h)a8ef{5
zP<gYWzU-+!-<uv}3WO@WKx>^SSlsS*?hf)N_FF*pyR%VipAZHtTR6i!5bRu537=LS
zQKx@gJ}7D%U&K78vbxslRJau^PkE#13~N+4g`dve5<1T)Li!beMj261a4{IUvl=`e
zDWv*~VUbx+$=w}qI39><0vnn`#rfGYb29u&vr<VFxPmE)ZzHk@X%=(IaVKReOebo^
zxUv_IJY$El`tP4gtZS;qG&K};dH@`slsHPsN8XT{dP)ULpvmLD<3V(CFDA1lH%6I@
zzx4RXb%#91fn$S|?x%Z`qZ61$7_*g4fGVXy%D4bba$Cem0t+x&$j#P$5^HH0y(*5m
z?T)#J!8xETMI-k0Z&`x}hZ2$u6CS35!tB~bNKr-|{(-dn#@wgoP3~KT4uuXY39Q2L
zW*HH#N%4zRBWK2SZD3AWN~*hRR={nmGZjBzf$3Yu;$y4!axpz44ig`>IdQK|zu~m{
z8shoP&gtJU8>RtPbK9C1y^Q(J=TO=%Z_nGuU<Vg-|9dHaFJf0B$Sc80lX@}RPJ$NP
z>OHQo&$8W4t~+LP5|>^u^G@T71yrwMY4Nd*ic}k|FDvpVOIE88F)_Wu^OLbRSk>wZ
zNXuGdB&kxBr8$;18SnXER}0bs>eon3;_k%C1D3Iz?!s!5kglK%r^g1jrqy^dmxy^)
zJhH7N2X3;i%0qYI;9`0ok>v`tXu6<`TkGcIOwD)x02hMWA^`j?M$QNQVjoUwpMgjQ
z0aw6_0oGoXWbJ1>Jp6j+%lyTpywxP-c!cXnQVZu#66-xsYhdOpM%w`X7j?2y=Zjv|
zna)97nX|D`N15{gM%9^b<r+rSkhkY^Kj=es9k?Uim-@10-as(iHWf|Z^DQfd<rJZf
zCyPzA*Bc=V@87A`)1Q>3QQ5y}^uZEc-Yj2#c<0W#2NM;yeMg!0uV)2HO9IrF<vV36
z2AmY}3cqTZaX0w4Z3@5a%x|AP1`I2|+Ek;KacD0J-r!5T<IgNgzXWEh7O%tMG&N58
zvH`H_pUHj0`}*}oMzh~Q{~4Sd@Nm;j{P03mKdy=YwTAY8Z~y<_2PXpmPw{M~qJ|Bk
z+>dy6oK{vpSDZ@zS_8U7>&?(yEMGr8Mz%J0*GmoVfoZ+o(53WA=M;d6_W|@pzJI|l
z6_AV%Z(=ev;ki9=adGjCr_&9zB1{uNjB99%1J5YhGgF(p9~;H+uUvv8fSbQV^Ar&g
zwwVrMoThXj{Z>uJby#^?Z(Mx5k*3(fjiEy(GHgfi4fIc)RAJz<E%i2<<*L={RVusV
zW-if0?D21F8?L`P(A!T3<hGs7xudLb1-5UOa`;+@SdsgH*uPCKkgtA<pH+tugXI7*
z1dg(dee;&6;XuPcf`#$Pu{;d+?4mqkQ1dfae$mVNToMrDs;|h_Qs7;R@gHC+mF%fY
zSk&b}R;_o%;9;)teg+d^t5LerVce0LnQ6UKK@Z%=TdG@*v8~J2!$VWGXg`Wu1AD~Q
zG)QehSrv8KQ)e~mT!NVkxi@TmnqPzxP)u$ZE8tgCfAf=SvbyACi7<BGRNYT(`R(G}
zR}W@EYB`~V^^X^xcj3vm=8F!rH>DVP!Id|@Ll%?HIs<;%*T!r~GO5EtRGBw`rw&md
zI9uIRld});d{yk%xKW_Ss6o2Fi|P=+&MCA$o^ekmL<a|Ciobvribc+bL{Teqq1zO_
zUV`#}1hh%VCs5H(01*L-gWayB{1?s^tWl4aX@*{2k{!%!N)t)JP~^K3T`-}iL%V$;
z1lHQHyd>i)sg0#M-v4$H5&i1^{f84;1^r)L#2>2de?y4!KU~EB3s+M)SD80P{|+jW
zf&?n?MF6c>n{1-QA-@Oas6k$;gs2ZaUuc~R#!MnzDS~rxKy&Hd?!M0OT3rPnfV9lA
z^4`L0tUs0tu=?3s+DmVdO{X7wd&GBtzkbU6@_Na|<w7LX?hyj|1f~sJ0gPMT3pHu#
zjZ0XH)fp)lkdX8RFbO37o**FNL)q=`2u;p~90@lKrtPsc_$P=}ML&kUKEb$Jg!P`9
z;Ex5w>JMB6IO)v`#d1~Zu>jUS-U*k<24vx&-TVeOlT>PWIPfpUbkCY8siJDFNt!rD
z;m_PX#e#+kL8?uNg*Ad9%BRQ;%Fx5C4{Dt$iIX{80Gl6?s;%s()=Zk#$2sT;A)Ahj
zJII@(QkWHG>(dJ<OBa`xF=rI3%#kEU1Kl{7`7;Z>nqpoD3)fqwp3jnB9g(!KFuWL%
z#RSdHpi-J@XF490Nt#)e8oTl;n$bTBSciyFSezdt1g90BURGmcgXnUarL_pLr$2zV
z6oJNLnImptFFG4r<#$#dl_E1?E*g{n%Ra2vhnFs+Efd^OkOet7nNeo)8)RMfGz^0x
zX(wZhY4yyNJ5_0=Jw#Csjxk)VAu^yJFUR%fNNMqoyA4M`eHmb-Nxys^*-zl(lp0N5
zGeJ7itfHJ1VPzcV=c&7gx5oVhkuT2Vrh_6ZKPN0Mj%6TRwQ?#I(WWWj6NyO~$f^u+
zT(h$sm$*L4o=wUC2ciKJZSkWwxn~N|Qc5GljQnj}qV_3tf-7#u!mLDNm10CK`Qbd4
zOIbb`!_WXpk}YG5Toho5x-U$SEI*{UWO9i$_{@+_%rzR7>kVnMYekt&vqqx#=UNoK
zM-K9RH~EjQL<|l1ER`NGJ>>OXQXml<<qkLG^*#s?o;_P#kmFxBJm?p}zT%d_To;E!
z@?FLOwhO94;xaRF($dHShM<bP^w_}!efD7jS)q27Ne`#~hpAbjbYbmyU_Kt6kZBT*
zU5W%9-N0O(x<hQ7Bn_Cd>S&OZh<o5JeI6f)OI0;dY`6tgIP5nTt6<-2wik;`JH>B`
z$(hoHHB-Tai;Rp+6?xLceLlBi)okQ|#i?X*_)7)dA)W`W^E~LHvLJo)EJ*9Jjod0C
zxH4B~QN>z=>F)(-X6e_8vr4@krHF9d%Y_FF!6F7;wLY<WK2y7!CKXQ4Ra=5^(_0Wd
zlSa7#Q_sc%^`2*B4i;<{&Mhjpk^QRgvRF*a2KgOZJg@32utxHYejLlJU!Wi?Fboi}
zu&8;Evko{}d}J2f?oTz42E9PPT^#FxL|j46>|ln&_CfXDA?hSFe>eNLz1vbF2ya_8
zw5@QyvdzNlj}+nI<3!}=qIlZEPQC9WQx6`(6!)wx684*M3Dto0qt^-rLe#lT?Nr--
z*7>=$M68A}CWT1)tQbqLPxMY@)3n3qxGv6ireAS8Uh4$cG{CTKK1yhgc4QJG*rRLR
zk$2dG^0>ixyLCt!)Sy$%v4um}(MM`I2fi4EVi_>%iFid|V~Z>_-6r7VFEKM!@DZ|N
z`3NZBT;;nNR3I9SX;`^v+`#BJm1wVPWeHjxbZQQbuXo^F_}038D$A1JTddUjqlQ=o
znB*ggQT3QuRf(}thi&$vjQeHJxWZdO%DhuLe>K9SHn}_|OPUedk5CG_;ab@@O%zxo
zG8@g#UNjrHg_UGhkOqLaE6*ZabODBRIepNo*5QfWM=(Z~cj6pOWA063r6kId&GMRs
zM3&FjZ*%(GIMM7{=p*l&IC<mZFXpcOWL!CL;D#xkxBYZ;wYa7=O4j+?Go_1zmfFAY
zH~twR%gC;6-Uh~tQ+R`Ka6b?$*B-+Sh{TRq+-SFa;twpe9!!ccjR%~>hS;X88AxXJ
zC1eCscKcU!i1HxQWcPwW^F$9rW)Vo^eP-|oiyfYx{&M;t=m_hta(^rA3@<j@7PwLS
zG2M=~euM7{kB0b8+hIL<LHken;$k~YIsSuOSp5$O5XS$60R30xi-3)xk)e!}qpg#p
zf}_2Wo)z)W3mIbtTRj6KAy)$<TSqe+>;Ln)ktxqDgZ1x^*LgM3kmtaFG(R~iByrA8
zf<G|3_&(_FNO&Pzt?BS_qnhJZ<I~eGi4RC9b8mq%QHnbd`2#Yc)b@f<P_Vq!RJV8I
zt@(?ukIzqV-{lomzWi{+G$3tISBjc6@?r{H@?=wsF2^m%P<UVoD+@%KA$W3WrPrsU
zx3hV=dKy``{KzL8uyD?H5I_0#sDvJI6|6`4Ot{2%$^MjB_hn(OBv-cO@18i`#jqZA
zy2nmCAK_ScAB@se6C*$MVf4c_dXg}G`EsmPGqzf1#B$rCispVtY-4*O>+Hg=>&(2<
zCGL84;KeQ}t%4{=()Et{Mjzp0Vq4E+er;Jox{Rka$%5v%12$5+5Ql1Fb`b|LV`3Z(
zGX=U!RnpWuZ&;-Ya90xB7t`gA<O!t`tCiEw5Ekb)cHH>Xz>TRX_0_Xxyn;X}<kwCh
zKc@t_U36Qe9$*vQbpW<S2F~9kf?jPcPk~(vY4tG*upBnNLRWvIDhnSo)qmW_6^F-+
zT$8OI^gkm^*E{h4{PY{x7>7|nzkWIV6b=7%<@&!Ly7WJ>IR9O}>gI{<g!28x(w=(Z
z>}=0OVFl8#g3K?UM*5IL3~J9zT_9zarmWsz$vW?-SC8dF#w{zyg%D1jH3)KD4+Rz{
zEGw8GAUFsD-|-8+2O1gl_Sg3Nq@gnh=elKkA>Q{2YxlX=_Vee|^W4_=o|VflQ`BLw
zT4Wu=+UUV#RnOGHNNQ`S*cH4!s0+G&@Rmbk>((HN=HS0kkf`ANs*z$>FHnH>7I)6%
zuCYA}>MMxd^OkstZCyJwmG03!4b4u@Ko46wm1~1rE7WI)bkG-R2<RJM|LePF59+Sz
zy?>~@y0-$Ty!y8WsPMHfkbvyE7Ysl)<4ixbckf;@wRhpp^2aCa`%S372$=CR@vtz9
zAd-Q5b5>a4e!eheCrc)SJg_-&>cYHMm?>$#324Gpt*gGM40Hng>3W_4BvIT1`mCWO
z8e2PE5~dlZbYU=(`#gEM4bJ+~0sq9pVf`YdY-^E$({z$jY*yD5jm2*jm!}G(KL~!d
zD&p$&1=^66Irx<8`Kipa2n^ILkf3pj8-%ipE@F-%4HO7caICQCr>^!XwkB!1-~^1}
zGWa9p21FXGBqS8jf%2Q(&RzvRlYCLaVSJ%XZz7Rwa){&-sf9F9xJV^6UiIJ=Y!hO&
z$YBo^2wub}-I92iGxN8m{7Ire>zKiKyL_#jg0BTw;IFEMKaEMxgYj*rqi-imfl~^x
z;X+7Qc?D8V<+C=H(MU8tpQKAPQbmM;LIxpD`RkoIIFH4sodpi|ekz4?=PuER-l|Vh
zX5=q8Qr1nhH9yf}scn|25t)BvFx@#Yq#n+O%389}&q4<uB!7&mLjAYn^II>0E8Soo
z&l;ZdgLxX#ghfIg+cXcATVWc2Q0#{`q80;>Y9Rx-de+Pe_}4iEX`Y1D+*aZ<Hz^6W
z{={Jc1?^*KD_D&Gsm(lX$*nG~-;ljF^Lw6_{Z66hF#e;)%`r#WEG*sxks+UhID4{+
zGA|_$^~E=w`r%-s?IY~%pFis;tdl4m2_e{N=5)p4XmJ<59sHGBf`F33n@Iu|4SkWC
z6l3BuO)DT{Jo4`JX3J$z;PO1%fd_V#*oLK=bNd$^!g0~&iaIOA#-W%mE+?w=8S8Aa
zA6bT3C@zXdoyitIE8)F;2uWuL%BFvK;g!-&vh7jOGw@f)#C@J+rh9+~fKk?j`^eDr
z<&R4LZ01uuG$XOCmR~~DsefSHn=~hAIPyCW2Wk!jv}Jd+iu*L*u4goEXU@Wpm^3H0
zjsuxX>{=j8EybO&9{(PWJC1gncXrbG<X=Y=+z8lwH0cU2bT~R>Yt5-?(sj1YGNPY9
zGpMnkk*chV@O>O=mmNT}O$uA##hIDYR|8#@4wa4d2a8m;EHAECYHxZdVME(J86MJf
zjtM%{Y_Bz?i>6NCxcf8FoBcFdW#DCBFF3ZQ4@t!f0b4LMhio&<K2&K(MR%m6G8^KJ
za-6R)*lMaWJ6=fZSbnlI2c}xAPvfFFR;b)S@d60%)(3<a|530bpw)XMK(V7GX-VjH
zRxXZ<vVzJ|zGeN$%q=xadH;|1_m|(XB3HBzrR%>zh&alxAfNIV_^<Lkp^kz*O3g}n
zdl519X}Q)RMLEKc2y|V!F@8O{A;OaIn3P`rL-UlNqHz0Bpyj_<h|BUQ9;%kVGpFmr
z_Xg|R<xo&^sGF-|9t3n(5iX&G6y<MpTuFu0&Jm0S63o}>6}mHFAsSqFh2l8L8PVek
z3`zx$SDLKc*OcW2QM9hXxTwQZ#G+;WWPT6g1#O<VB@J-@^|(<P39wmKw*ARHNkuXn
zMV{>Npt!A$cGaAFAPzdH5uIbptQz6-BJPVUvutn~;g`?4`e)b(H8%M>KABX3GhQLg
zpetm9-I9-0{hk_NfgZ&4;|A97!7$Hjvwgx`QuABldZKnt;H<2!jT&uY%KwA-a3?ei
zHz}-$&>ZwF`tS0^iugZ6CgX$O%unIjy;RzkBgP<TcxBp8cP6#3CWY)aL#aB)dHJ#G
zM<Lfd8G;PFl4n0m<h@2koW@Eb=+xByBq>G~%6N?IZ@?JDy@$i+x0d>`Q;N!+URB1M
z1EG;2{pN?jX@^;soZp&&ri9xAPI3~Vv0RZox<cA9i*uwfW0F3YFGk9^9CqT-4t0Zq
zx+BXs0rv4sG$D^#(T&X0GuxZWZ1wV4F`wL%2=?dk?6qfkHoy3*7S(X3FbNcq*}<<x
z7I~=}=YF6BW<{`J1XFSh5wQRpYy$K2TAi{gGIq2=z8CA4{%Cw;Z|uW07{!q5-iw<~
z^aAfi(7xZNa9FFR7_BkpJa0>`7^9deLBB9srj2%ZAbG|?YkFEA#P6cEkbt)hQ`xl<
ze|@kDbcTJ)@#iJkTf6|prC-JZPN}eoyrN>^IWlfFo{n}1E$uW?1y`&N3FcbR>6;V9
zOs%QlJya2}3pCoKlB{!fl@qQUD0t6g;a0|wH$2F}H<Iw~6|Wu}E?hLc`xH{+Am9%X
zoA2VY#*RJIpIQ^M?-YxOhXvGHyu8;0R);AP3OhD9z>Hwy$?-x)u15b{x8E?z_DysA
z9ixsAm#(3X&<5~H^@CDA<z?_BB9*k^`o(!gxh=@@`%WY5+^1l8_X4RKcnGbcMH<hX
zn=;vaIP<5s#tJ@amqdC~F8r)0yrTBqeWB{fPGBU)%?(P;JZQblvB+#amono|d+<L9
zfp?R0%ncRpcU>z%p&NgpniZ-RCGJwwoUqwnKE+yyK;;iyG24$r6`Us5s(5ecbBNyK
znU_Cq`tn_N#j(WKDN|9%>;(eWCFj&DiMhj&j3mICMc3j}T<kPx7_)mk&&ms_@>n>%
zXqePy`XEd(*=2#G%8AL!{_2$XQmj!om^#$Rrvt1nf6_ap2YgwkcPDZVC4H~>1-6p@
zMd*bvubQZ~^Q8}n3GSe{==TzzX?lohoTxIua@GR66cp+-_Oy(5ozxWMr(7H0pgV!E
za6rdt_-H#(s~skqAV1x0%E&y3=<MV=xkApc?qs<Kv20rbXNMs<Z^AZZk6R;^;Br3-
zKzms!i4NA|T=z0o-Qj<VQazewFrTRDXTFcplf)-o!i4KJXhxARS1od7q6ll0FOAx3
ze#d$8oYQ*dMMh&XMO)#`hbd`ydy5BP-yqJ+sp_4fpQgkb04^&nzNRID3fLTRtc0ec
z^tL9A#Uu@HMbUDe<&Dlw4;oZAnN8zmb<Naz)a#m?soEv}#-%+b_=XY#XGQ2piB@Pk
zl&UE&1GM%nRVlL8Vcb(!0~vdbt)ttax<m`=&7@L|?Tkp$=C7v!>kk+8<om{^%Zqr%
zFcRxS3H$7fa5#Bym#90?w9V^9t*kK*u0#zeg)K=Nv8ub%APOD8GpfM4M62%FHK+Vq
z4#Y!1(%p~kdchqK`8#*wBo1axcKffVJ@?RX22TjQCSCQ)&nl(`Ys~4$@eDqw(sVv3
zp1xd4ATMOrgI~;uveFSrcqJOZUexgU8Ln0w!g#}ETz>ZY%^!T1h$r!G=!XM#^Ym}X
zJeTYu?DSgRIo^;D7@kcrGdDY#27L*;4$h`6^4g8a6q`|nXm9Ykt2CbLG{pnG;!%Q6
zMYPv_5qH+6hukH!$1s=ob1P^Npb4?JJ}OwnoUU-FvZs=7RYh-@Z(UH`g=l(kc?n3?
zg+Ko!&?#!zJ?@wMk1ic~awLAmeMz62{}yLzKx7km3iaz3E7||5vS$7NGK%}Zt7%OY
zr>`icJJX@*HOp7AEVfz$k|dJVx(?1HsfLJ*utvR6X=?EG{MmS}TT|f)L^_~8+<87=
zD-b79NF#^bqL@Ea3~CSw%*dv>L3Ij<Y4U6G>Q6Ko4%_n+CzDtfTtnSD-zoQ3&Rq^y
zt<M`CQ;AuxpCZ}7Gs1Mw_`cVWuPOxFXm=Gc$AKSwBi)d0+9TZ_sUI@{?T;Gl?8iOc
z8zQqW8M7}siqB>=-l1=Z*HQitx-Xd#na!6}@PL=rh_|4I4|@XdARXw}NVLY6O2-fB
zk?Ww2o<RJ-4)g*<y2Ln%G9!Le(M6g<djebnZ35^*0i?PTM=+U5Ku8Hc2W6+C(BhmN
zkzs8N3BP%v3&k^KYk@~?<k^NI-L?_GCw~=Uo#x0Qe-%O<|A;ujGL#xg!M_nFV8_mw
zMSjen3Oj{(&-7L5g}ovt&`L5(!J*$pal5Kay^DNI<^%17y@Gu^W$lb8Q4tt+tc{3c
zZNW0q7=dH-23#rO#2~YR4Ct_S<3n4rmUT{qsOh2Tl?u123@mAwHkT}jxvs917yx*2
zg**a{1vq}G<r}|$-@949-OcZ|-(6kO-`c>ny=YE@$d2|tf8!X$SN#Rac`+p&NfLpX
z_*MVJ-Rbo`NhELPkoI9x<6fMs?O$i*`-f5yxT<dG{&k!{H=vR%1%{q){|xZ>)WYe9
zlPs)YV|2n&up>g2gxc?`bqq>Xd9%TJxQ2areGlPuhktg0!QI;DjRDywSYU|w9!Nld
zm%*I<(U_oRtQlk&Iz?s(2UnhUa=VJuFe64tH^7nX@1B58TOM|O@qO3$&{<Hm!NI_R
z|9-oy6VE2278CjpZg0Y^CNa+kqi*E?^Tml;*s#SKicZVA5@Jdg?R5YHo)7I2+^r-p
zgJ>c_mZG$%ZBGm6F`%;<hJsz^dP6DccN=ZsMfyj795aWQ-yy52R#Gg-w`><qWTbv_
zj&^rU2mXu?@b`{<;X62Nnmdw22fLZHV~Pa2{9{7ZrN-sdBW}NZcX!xN%X4=2qE(fl
zwsxN;Tx1=;E@I))WpL_ib2B2vWH3T)(p00vjJRNl6OWFP9T6qgFGAU9@FPoJmtKh#
znXwL#`L$Z-#l^v<$8^AOEn8$lM}0i1DxC^n^;hQM?@UE|D(aZ49L;j(h90DZ<I3B(
zYfFDp9PDUP%HinN>L+_-a;t;a6s6;!{A>XO4xYV4=I|e9mfuhf1@W#tMg6n%`=Hm9
zc8ErnTUUTS$kpQ{tlL;)L6}<7-Qe+9B}D5Trx6Bid<qYdONr-OS2i=4VF;<nD24&6
z;otJ3rHXNA(-6{EvbY!uG=Ym?47JBtWIrBpy_B1TgsWj?pK}bP9*b*()@vgmpHF_Q
zC`Z8Twy-S3OMU0O2n-Wemqk()AapgK2lgZj!;B~qWD!}emT@)Ht8AHM@xhIS0L}nS
zgI>d!8hsu|Rx8pDdu<Zz_j%zJ3(1=00hy;dn(&3@wVD8gG`fG3dKUY=Q+tNV*cZeR
z4DTq}hm(;-^??SJex^%9bWjo8T5jT%M5F|V)ED70b;4HH)<lR|hB5RG+3g~evT-)y
zgjbMMa7H%)XzY@-+Xc&LzolKh{LD4&3_S9OZl~1duc*%ur_h@@K$758i!w~y?K){?
zV59f`?nB8iBuVo(-Brez1lJ$i|2{|qL>~m$aAyBS!y`VA18X(^nuYNIvFqy_2};e8
z+H@x&TS9_5+To%p*{cn1l1g7@EbeY$9t#Vs(_=m8Os9pj5OMmWV4p{$v4k4i*odx1
zgcxY-+XOYUnwLP!;@Fvy!<zrXBFCk$$x}Q=#Z|n<(%hzJ?Ub(wkKAp$+S_2@skMb0
zuKK!c7(1)rxBG~FNnG^=Hz;p6RoEBTy|6Z1jby|uxl<BshduKLk%97{CPsi?*jBc`
zQl29?G&tEmIuQr6aX%8Xs79tgo1jXME_kCsAz!OSA|Gv+*}6@x-@`6j7-t~2uSs9P
zII>Ofi<>&KZS=YbH_~~(5pz=z2-b(TFg<mLo6sEoF}zIE3rD+J4)4lAp<5V)iQHlL
zsNLuTU{);|S6&<x0qq9zC74fuxnzoWxqO1!rj!rDv`3oc^&8&Q5vx-$U%*i{p9p!u
zG=U#8vR0BSij0ZD)W4?l1Vl4G9~m`aJqQ~K5rKgsQ0h-U1p!^6xuz(8enA|dSP+C%
z#sNhJsuigi!Ya7}P;p@wDPPy&@}~*8S>{!da;|;TG2=d~@BW1=4r*i&lG`T(Ik<)m
zhX$^|0i*9X*$dwT+?2)8!iPYusEN7fMriR*4BP8*8E};ut6f5OTMu+fetqAS2oDy6
zinIzfB0c}oebI1AhIkfJHZUd>&^S-x^0-ubX_Hu^{?+EtD7T3hwT}JE#47t=ch2%2
z@D=~u-A=!+P0!HaO2O0`$EkAxWniuN^)bDNS>3#B1rq6-yfemU6k?iE+DvH@j=iCb
zjqc!pj*Q0c)|urTetA8&NqU_<h-H+7LB?oz+8YrCO<D^WP-04kbq<5tP;&)3XK1B#
zH>|K*V7O&e`1ysJ20WeN{Ug9e;AHvAlhEo3VjnvrJFli<DR`#A?8@!QMY%+mF0;o<
z48i!}33ZcRpg8Uze`4YUIG9l>Uy+Dq;uS`0mU;PbL*(kQB{Qz30c_KReiZG9vmd+0
z)YsK+D$^d)S#Q6T3*zr^&-)YfLqiI5@uT1G7|k2_)@qVdal%xz@SIME*|K*s-89$p
zBHmf+U+C93ue<GZhlNDEk{3{&dI!m>`A=n+k9oAymTaFVZJw|qcSY)8JQfGplbzpm
zTNK#bPWi6pj~6<0?)uoP={^9vj?_yu1hSX=Ko!t!p{Po(54DiAbnPLR9+DK!X?km{
zNEXl;=p3kV;@KT}?%-PZz|Xs8k&QmyDOttTd6Y#T4dri%7nhMU-ioeAwzx&SgYA+<
zyt=pHx;NObNR7`7>e4S;<?qXn{e#f+_%hsmykcR^tqGE;loqnyMgvWvFYV<AbX1na
zERochxgyL<t`f7~fT{j@MSEP74V~8-e{qIR)I;AcVA@Y>*9Q-|9|Df#ZGCs17l866
z&UCU&IJnP*gzZ9(6t=UUv?ErPc;j;D>Cebt9h@FiHAdu^h}g0K+6XFs3aSxCN0%``
zA@QIjPSNuSQN}~<lcIbAU7(~h`7re`;`C8i5lf;*lwMDIQg^VpZ`3kQYxH~3nc_Tk
zKhZT(YYfKxLY{?Flt7G}W=k2+TyZLwkX=vTO$lhFo}36P0jXc7eO-*22*D<ytC8Tj
z9Pw->a!Ad5g^ilXkD8$6y!VQlD8@;ZxSX(YHpF!?q^)J_UW`qhcLg`D(|EUvnt0xc
z<Qkj0_<6hEZ`JXg)o#7BWqM9G9&8UK23l3JW_mYMO?0aP(`HD6I#7Dtf(o?P1xP}i
zZL+%Y{Jx4>r9!k_AM8sJN0#J{%V5{4HY)qBNTlY0YXigN8LIh<r{%F;jU!RRbn$LV
zU$4Wz`%VTeJ*_BLhYu&W`4#vK(nNMT$cUKosZp~3`PZ2Ebf(uXJFaUYrO9O$rZe5i
z^|1XXh-!Xz|L@NL@hhky?Wy76Pgknwhds;=Sf5<S)r6*L3@%+-q{W*P25Zhq!ldoK
zgEJn|<&1wu^#Ew9qFQ^*WqY$l4AV&?P1BU4dKb)P2`?Zt<@CoPM%4w)!`-<wGp0h5
zrS7G))w;%d#`fMtO|3W2P7BOQ6CKy4!lFVqOp8=K93KtFr;Q--tZgFldAuMM-e~ho
z<^_|Nf-c|2xBZm@UcbyYg_9-TVDHcU(39*Q$j|r|iEreqCEiNQ+OT8PTFc!%0n?zm
zpp`F2_e7cfOV>Yl@G8|kI(yZsZ|w`SLawaeTa4{!rGBp~d#*7q@<Q#^2LuVPQ;ALK
zOJz@!>K4DxqZ`tn%5Eq;CUc}3HR))^^y_IX>&3Ip>M<;3rHU5c)Qu~b7%UpS@vy8e
zVOVg@Ov+zfPl|{x@6=c$CnwJK(}$B+akxA7b9nog-np1Qp*<fx5gOl;Ys9}9(jKaH
z>%Wv5&UN~&Kd~%3ZS)1d;iAsB2Q412_i;bfHmZ3;z#s6)saS41qU*f|!V5i1)0L5R
z+-B<ZF`7G6Uc<q!`_;}NR*YZ82Vt6O@-(uCnlLPz-?yUcItqb(BA@SFoWXc<ZoY>4
z&h<|T8|80Y>o;~_UgD`usv3S3I>O-{e6`N_oL8K|nH*%VD}KsGmEle0o3}IW*jSZ$
zpAeSuTvVJ%ix_SRtd{ZkM;n&DSqD9v;wrhYgR~u&m;)b`QO+FCm%*upT<Zs4Ss5GY
zIQ~AI1kQ5GEODri4k))qXlR2{Tvjp)Q@0GWuPrg-N+L3MMh$UA-CLGWRn!4Y><cF?
z?vYEFs5z-Bszj%8=)6rBZap+4sm|NmwNT4TST?2GX#?O)<|`X22ZJ&iUrK^p@*7dp
z8c{RhOv~#l^3_b`$FxF+Zw0MQmyMt=&(czPQgKsJ)~sqJtnDB!1;-RnuY*_HXB&i@
zGkrEQJbrAov>qJQok<N-{I;h$cvuZf&UBAt4*tsI4_}$6uru(Uj&!vDJ^G;<;U-v7
zhCY~hoY>7d>Cq~liUCSk88BW``dd|fgnHgETOl~9lQ`;0T_)o<Fg);Ol*8Nm&~OOG
z(lKl*AtniMhcAR(hV<7p8H1Y(T=qP8KSnU?hAM?VF~sqHUkEx=KzH=A((-Y5C%(XM
zP+y~R`5B-jyfgp69;V%x#>AA5=1<DqeC-jFUwylhz{$zNQsGZ@?tUE-Gu;Dual^|>
z+cV<Lu--@wD~*de-htp8e%X6cWnx*XG(*U~vjKx^M(-X)=a~QYU_)unA|!W!T-**1
zdIXo1<Mk(b1W%on^y!McF1dD@o!*w)`ULtw_sS@?*`NF61OEEHhjlJDekoVgow4Mw
zqaLj?tKN~;-TC1aG9C~z18}J;h@MA<p}yIPZ;<lh%~zx@w&Mr_N<N1F&pyh7xPoE!
z2SJ0N|6g^@eE)B|W+@{_Q=9)e-|D}&&mNx0i$4jq#;ozw0&!}H#MDqUVMCyhVGw}@
z5Co7~lOU4*z~U<xaC%1nSw#Uitt~AnudA1<qF7jH=u{3ap%EyRKW(mscy(`IKfiz0
zaGMxAyD)GHpenyUMsqt{ZFqFuXL?+3cu4Q09^-l-@&VWyvCD5D03vGGdh~;P<Nz~N
zJl)%r?16pnhTU6+j?8VYUK^f~wRmr?pkg)8k?4P(DV#igd-)q5=oWY;w~(mW5BmzP
z!HqKYFED`Vx)*F0uJN_w&lljXkx9DR7Y0@*-|82+=xXs7Oy2IPJuK?3pS=}z*W?~2
zb=UZw$A7j|;MCqDdm=Co2B^Gxw+g7d@iz|MU;YL!g@HPd3lF7hS%wV~QX=xTkTj`l
z8RF(*K<o*kC8d$Kwj7m3U<Fg7s$6A7pp^M%S2u>5&?Ix}YzT5-9PUJ;w@0;x_S97@
zGBvL!2Uo^e`fXFQa_zoz-MQ5s1!N1G>&$b!8_TO+e!dWp6PqauTBaKPw_=Tf%5s0A
zxpy6XTr)btFM+#2ONoH}wj}zKL(=zm2UPEKlEO)bAf6LszmIlvV{@(2P4XDyLV$@2
zWcBssu{i$zv;9&PChGtL=@+PKA`y(V1Sf5*xXmzZ`nR+Qk{-ej@)_Wkq;21ygrpw9
zk3=qkxfU9zgH%HQZ*?nin6a`5C5YQc6GvvKN;W^hoDwza923%SE=rZKs1k|XjLo6k
z*TsNA+=j}-0J71?-cwNuHb`WjQpT78G0Fxup1E-{S=&k`g3S%9sou(r5QC5!le5TN
z>*=$mYIkDKS<s5dT!z6&@=>#s&VXRInW?z7spn2Dv-sSegPoH(X=Xu@5PQ48oSU8*
zck@qJ$*JR93LIp2KKcDNbVEDaTEUzP($az{UL;&}snhGw<s0VAS0XvO0jmm9T0d@*
znXl1LUhI<B@v*aUcLhh6+4Lnk?=^HLN$x~sp_|!crU3GDp?(^NAQ`_w01=l>e#yUZ
z)AHS0XRi=+oxmOpFieEVt51YQe3IQ~M_O6iCvM4kVX^?$O4c#5zS4%Zc=0Ic3rEsr
zH$H{QQEGb`_k2AX>Ka29R>UuS+sz6~?DzI(3v)s#BwIfYR0)exkWQw@K|~cr&N9Av
zyB0Ln?V9|0QN%2qOkfYl<AXu&6<tr+TEqG;Fe4TdyAqzyv>c0h1kD{vlWH=$3*Rp}
z$I{yswp^jeY5~m2jV&#qoaI#ZUv6Qz`_!(uChre@9S|F`_}THza9@FKbm@$b$WBD+
zM_Qw~#x?`xnFe$*r}u&tnyibC{D<mu7cn<vZ9tm-(;Lz3F@wXnVkYN0Cl?$~_}ZM%
z2Xm_;NEbR_B*}rAE1C@_tQjWXP=5Y2CzSB#6nt9a;Y%o$o+YUD=IiVpHy1XweOZ$=
z`9i%%#rRWdVoS&3PpKAJjP<SN#tx4YM`@{(EY@2Z*q=zEKGJ_p>h6lXVmREkb)y8-
zM2M}69=>`H48!XV&`pY%oyQM5f*ELgY9eS(;%1|9F}x}=ht)$Ht(REpoC#>-YEjOO
zG>6tCYNY$N4L@+oB7E>k4M34#97`jJEhv`YcA!|utmyU-zbN)~URVX@)9nUUam*l>
zz5<R7Ka#CU2n-8yNBfAx4R=v^Fj)6U)e^!P{HFG%Nz@XcdHW~z2<lVD^ZbPhsmlWU
z2zw^osLPDx@{xKbC4&ZN76$&I>RlkJdh8XrYSYCIdTJ8Os)+95&$xfA^CK3^7HPWz
z5!bwd0?_^3RwYgF)7#o(;7DkTnRv<=qlou2<J(=zODkfDQD?-odT<EB)Z1jBxIQVo
z$S-W2)!^UxDDNkuyR4Xf?pK#EtryW0k75$FWiUi2P|jfqLKu^+(bVvgHX$FGteY$%
zCd*2UF{Ll0h@VLqz%th#EpS*$%r9xFbg_gfAR_ZzC;mj#O|Zk1EdU?s#uwAK<>-#I
zcxp;To<3$0`vZfJsqR^!7iQ36&)(ffUO=6hxXQUHqBf2++=iod**j)Oqb~DLZyxO(
z=a)EyTytbmPT`Qg0w)?>;exy!H7@EwYv$z|S{vNLKpM4_v`uiQX?%B|Q9;*h5;pns
z>XY0rb5TYUmfebs4c2Rh0QVYTi_ktL^@}3{N?h5ZAb+0sR{693N~R#PenA<5vC064
z+APXM*bg#G$GK=k7Omn7sq1aSQy+>?e&cU9<L}p`FYUL-)Xz`jZ{I>6#?Pjd&jijh
z8FA>>Yz5JL>R4gx{3Y_n65qbKq5K=x-$&Sf1rph`5}4c~_zKG#A&!BU#4-V(<cBwu
zPB&CiCGzU@I;+7sd&BxhaLzO6t33mQ?gtmwi1RuL>bUN-9Kqcg)j{MWI&}ebYR`<@
zJq({UP4W6g>mhR+T1CS`9B4i7e<^Vfd_repC0;A#g%~n$S~Ifx80HKx)U3kBE#Art
zR~0U`i{#9n<t0$t5$Zisg%dZ&&ET{_O^%AJ>dnqAJduq;tcD&@4Rn@L7~H`PMz3BS
zMfPLzkLBBsjiQG3qq4l5r%l)~pV{4?*0{4TO*3pCH1(f5=4M?1`6khu_v#`BWu@2=
zL7NWk0kt7iEc333uS!YG(gN(j{|9037~D$~ZTrTyZF9%AZU1B2wr$(CogF*badvFm
z$&Oymx%bt*@4Pzqe(9?2>Q7y@X3w?e7{8JDPV&)nkm{O{^5aM`r3f2*%86{8AX8lA
z4DBaYT`=B8tFjNTKWs21pj8xh!-Z-<eMn(|wUA?{sd}(r4c=BLeoMZfY{`O^nic@-
zoRFEMR?!rU*S33?)Us#^-ee#*O`Jz?&|&V#k&a)?Dr?}x+;*BKW+#44c_5-aDHcB)
zA}J+&nlz(RY1_p!MZ%v%>PoFWRbgns1NmGNDIiSl$kDu66d(!wd@P1p%}Fz#ff}{Y
zJ&Y?jk$(*em*I|4qzUq(TGVW+9)c<(senxOL_Os2;>_d#_A7>Djm5k=hjNlt@nCua
zKcj*@rtqSdV@ttDTOUDNmsh1CMcZbeQzGFMi7ZmX7Rhdc)ScAJsUL1slQK$Y23G5w
zMmf&FE{mVdOFujD<<g6zojKAnzRr%aq$4MBRVenuDc^A4;h!SW*rn+S%FCSaDvf)g
zLA5XD(n^hypmhyn*-ga=N~IvO);L&BbNyAIe<0gBfc<8LyKH@5(YF$Mo;e$^x?Z8@
z{G*3-E?Ym1@%e<STHWV{UH;_WzR;~;=K>|j5n2YCE}xvUA6Ld_t=CwOk@3!sxNH)k
zvNm#<!bT$!p=zJ6l_o59;z2t?h_3c5qh;*$BCY%5oEm9FDK_x^OHZ!uUz#JHd1Ae3
zT;DZ`zPoXq6C%i@Z&y8em@Rva6$>3>l}kOr#%Aw?Cw&@^!WQUHG&`|9{kF}1Eyt=b
z`)bh|@D=jZ<v0b7^&6}ssomrsNcF!DfyHEqW)j->fu(ML77^ZnygS!gY-cu6M{QdE
zUJ+(HO7x8I&e~7>o7Gibv}nZ@Nc5Ldvn4v%xQ{7!Xxr*ontv@QzMCA38R9%N@R2th
zZQrdOnR8=i$au!5{29D)?pWfq&o36^5{kWv#Ep(3Jee{I6K)5(3#+E?>2^$oSaQ5{
zFJW!^kqLyifJm9x0ZDaaFIs_gLB1RVvmq<$@t+|q6@zY_3{o++=fuu;>tY=pWi~T;
z#lsf&<T$g7zjXhaoDwiMe$>Mh_v}2ii9t93mJs*!tmK(%KzQWu`JM3ScC5#4FnMdh
z-fO#v=s)?3aIDI9yIAuRD*wc~;*yzGF0q>jB;H7V7m5ZXr5hqH3D@{WK(;V|#`vq=
zS3${6E!t~=`;<%air7p17PpGsn%dZEh`?(*N}#B?1+V?!&%Xy-?oejp$k5Z<wD13H
z*K-ccHH3cBXl<$f_jdiiDhGf4U)yzOvi~I*`+wVWPY-|^`u7$`a?jz+lt~u5t%%A(
zOEP;V+01$<L!)h0nt`@3=m-N*@`OwVb0#zks?A8OHuy03BdX{Cc|`$Hn{=A8&a;?<
z5VEQuJGeWTqsWNYthYUdJw^Sr$=uCBzV~eR%f~F=%ck=mKKDM)Q-O9u&^fXybPuM%
z8Td_~&V;ObhX*xqYX?$i4#x*JyS`ap4i@+5Ap2c)@SS0yFW%vq_Kr99=*{Cns!;&e
z7#K&m>1JI4nncH2T#y@Hs-vtB_Vw<uyxsNwu^sr!t{(Oai?85lFbvII1MJSwi|L2p
zC?a}|!L+YONckHwhrsc%lAT{s0Zcs83nzzwnqpu+(~GlRo<XjH(~b(=3+!>;F}VQg
zffn{3=tJ-!-*r9Ud8rRYR+RYh*HXbdae9mhi17VH3l4Xfirl>h3|quEV<vivh8|iZ
zY#XcyQ3zq};J6F?YkNtNkseF@YH*l;;Ua~#UqW&PCD!rZB>p1fgaj6+krKgsz&P&D
zkRn+z`p_L5$Q+e|1x!OZO!hQEEuEl=4x5B<$=56|@bfuQYKFSvq12NALwbzWf11di
z1%9iKbD`QE9&^K8JQ3~M3n^M!G$ClmFOaQ@gqF11!!c^Q&StKbSPSJA-Ur&87%?GI
z<^us3H>|=#O1dHgdp7ZpiQiG(L58*$w+8hXe2Y7{3+_xPx8ZH?#X?`~Jh^ud!6jmG
z64SR@TDr;B!{a7V$iJE;Bjv_BBn?!Ut2A>C0(uf0<+CF)g>Ii)3be99i&Qm|k`}}F
zFQu^==ltyFjhMaz%$}iZ##itw1rbPnJx52=$v&9y5W{e~f*LttAHg68zg`_u;BGQV
z8qC%M=f%0BEfx@DTsk~uYQhb55l~BK3h(ifB}|MFa2DgBtaFiL$l*B#(}J42n$0Ln
zyQ#zyN5h$j8)i;V$ElTjE3GW-s835XT5F0}>cl>e_u#Wf(Oy&_R($&m^O5`UmsNs!
zvjyb^{>(PiF$h$Rgo!vhjhMwUd;BtxL!-xjk_T>7sb$Z;uplo#HaMhHXTz3;Cajs7
zfTYfn(R3y$K=I-@E^)Uy*A-bK-llMHb+yy7?eetbmbs}}lYj9{sKL9JX#I87v(U&<
zK)x^^ok9XKFG(k!`2oV$o!r6f*{ZbrTC5ZWFqecyomi~L?kaNnyES;2D$F4*8=aj#
zK+WY9OJB<=bj*r+WQF}3IiP>9eSg*j&2C|p>dN-8EHc~7PP@YrT{9&VWL?&uNO1d>
z!J3Q>KJz2NsE`1b!iRjQ)pEdjN4=Di84uoKbmXeBLVxl^Z6virdc?E?FyiN<I6|#i
zYQ(l(W<=>$sTux6!(JdVLXlH77|)NcGf#iePU9E8GxZuAC9qG9ZeE}xMk%jy=VqgH
zNBKDAp*2GL+8m>y_5tp%_9N=jE%@|z0Izt3^iu5^oe{WW4CFfNG#_&KwNx(VsnpWs
zf8c8ORlLvXHsL}FLrkW{X@Oeq`KY>w=9wbaywi0pNoMkP2{+dLDI|Syt%^MPsS+~o
zmB<LIg$`b%*q{DcqN*jw_*5l~%%E0rsH8-;Sw&?wOKR2x->j-Mncpmi?Vnc?<@uo{
zpKsL1sfCVi6i7oeBCJM-qKAIdj{ws;LC@9e9*<FAv&MQwtAwHE0(^|Zq~$^MiN2I1
zvPIRv{;s=rjR^k!5hJ6A3-Z7cqhTg13$1^VI`_|F>396}<jYt`3u;Bx_Ht?;dbMrU
z#==D2vm}+M^5{R_p}he~{RVyi5G)!@_41*sM=e^N&m|lK_bM`7eW7L#)Qnu^EbXYS
zq{`k$0<Imx4e6Hxzvb)0CfRRE->D2(_HA80NB<PE`=_7`JH7PGgzPLX(igMYaZ8OQ
z7Z^(ZL%{B9co=J5_ja2Bw-5oTfv4*`E<ENiskjD4V1Aw_8pEmAGyL=Y*l`XFSGQ3c
z3F!F#H^%e#zq8GVE}q)?rV)XbtbBj2jH*>vG3qL+GAc<h42}HT+mbL1C+gasl+Q(k
zQcHADEieSatdw>WZ<7q#m7)~+IxLnx2Km?bz_I%V*5z(G-6l=CUo1~~OwJGMHRi2>
zi_;R#H9}W&_MzM@RChYTXKg{l?R0615HhsfvgNI&SFAj|o>y^ny=JiAzq@SB)BLgx
zdsSt3Dp&Zuu;1R3I&C}|*7~(8>vxAXvt|tCeG9Z)a|XE~SS}>JVNVElc|Do&+3qeA
z&+2#OL}C8i%s?<SFt3U!?@z7?vJOO}KPKr$3a8vgLk0}T6BLnu9L`hsdbvm=66P)(
zh?hV1%~SIQyLg4kpCt6zo)$jK{<9*IjyFAgvkQK}(EZd}I(9Daz}|?|fCtX0t;Phf
zZUj6alm*(if-maKfN^B+f<VL*3*h^Y2Qf<SyHnn+OdPq~GHp!!8R%r+4RX2FZQFI<
z=f!m}<bKuD`Nb!3m0nwNK-i$$7Uq{^^udgJL(*dnat;=?pvG&Xw8yLlcglRCqCcme
zx}mpBYF}X$Ut4A5trnlFxD398*`#*VsPQxmtp=~GkA=Lrs-YO4d<rwP%7RcVY9O;^
zIE~hU0UMb~?m#Ksz7lWv+=Hvg8lS;MI_|vfbZ|$BpFCC=vK(RFD99Twe#e^@iRpss
zv-CSaJRB($RIEZA&T()qrA%uYezEh2O*h0nGfY=_0b#Kr2zr_?s0sgoGm_L3?txck
zOi@o}8tXWI?~va0rMTmoK@|`k)WxIZsE8-aa!IZlnLg2=G2WozI)s6BPA`60Y9eG$
zCww_H5`y7@xNV)aD3>@Xo}PUyYcPPUdVM>CJ2p6^Nfu}>w-LPh<Y|W6amaf#G17;4
z<IfWPgcJQFuT?`<EKMU?Tw;(}V%GZ?F#+3tFo$L+r>gRJn!@=wiObYvwuf#e@fDMf
zbaP};al9A_yw8#DIh9*t?{PU!*{-shlI5PV!33?T-Yx}2{F4gCcS*|^ZCeSAC+#Hl
z`0nI~(f&8}7(dWm!j@XhOD?yb)gCV{57cvi^gw}W+#OA=_?Aqt51H-|bhLm5RCS7o
zDUKWTiLCfMzQ_oz4y?)#ESmG?SJj{(y=h9Y0X)PdbQs(DFL#g?i~davP1K<r3{8C7
zP<yzU@T9M+5rEOfUP_v9B90;*TM@uYxO6FIM42|L#8i`(eoRZ$U8;JHu~uAFJD4^?
zkGyusb-`<s%(j0^lrV*TPsx%cFHwHPS~OlpS2(Th^u0BkVO5=O061!sS2})~;styu
zWAi{N?wPu=e)vv|&LytiK<b2Fv=|}x;9@-zF}WhSgrW5ACxy22La(R<{^Wktb(uit
z!XjIrKPa>HAzOoMD(4^pfpeUev9Y-vL7{-0>(VcHPfGtE)g)1Fpw<F=3UY12tZ;M-
zK5b;16i<WPdSr8C9_iJJuTwzM8eP*ZX$ubJd@@yfo_IA?!Tnxw3j_2=ei)V`Ld)Fi
z*sWvI!@1KISvwiEMsmuAxKsYz(R#8|c9K&$#nCuzS$u6@H;M)}q-IJ6q{nYRc|2<_
zYji@~0lc!Knbsq;?*k-AGN*y)(S|X+XRM)CREt)G?rFnxrXClNshS}>=fAda9OU7Y
zpWQHaMt?-|mSE%2`X@wtl?8B0fTQO9T4cN%)VhGWBcG)W;iQoPvX3Zd!dpAGDWE3P
ztHrW|`(&$$hyRlBYI!qto^hE@wG`CWD9ckQjWzS~+UoPQ^E@<X%4as(^S!9?h3=MD
zmeZAqxDnQ@ELcjC!l*jdIpKzNjqxD%`Tyfmw~PqtoIi465qG%a1>=BU$6=n&nkygh
zISjp6FCUAf{NTym7zU|+#+ByKx9-S5cJ+wGq0v_v-f8^^F8Nx-@J+5wa;oia44*fq
zouag~9Ud#%E6RadOR_H35_Ebd>Mg|}*ph;TiJ~j@c{8hVOI<|teog#OH|j%rpMb=R
z+V>kL)CeN4Jc9w%Ibv39&Hq20sAx2DZ#_RdgJQD()6U@kE`M_-Q!#aNvotpSuN#D3
zjSFv7HJoob?nSA^#^I!(Wel1&?W8%GfT9*6MS67|gGx6{CC4oJp?+2sa|)>K+n|?s
z-JU5uO~!86YPpMlbbqcf1zrhXU$^4FpwHjs%Pb|ulUw-teZ96>SWaH@cD#8`W;g`C
zPCx?me6R;`@Qwy{4ZGsPSP{*jt}^!4_;@uxEFPwziGz)aH=_@ThaH4ReTi9j{Rjwl
z_k;)tVD`ue((Wvvtlu_BJ!05$_V@0PNIZftc_*67Jv_49{l!O{ne&qGdVr)96s*R;
zp@vxV8)e5*?ur7`jI&&26|6Wc+!hwh@fO#|cEG5H&RWdiajI;s+X8G!rJTEXOtYv(
zF5LD|Gb^u2Qns$^YxM;kXpFJEmn`K355|$7GS+P?&QxDAjL*){d@;*iM3V240>X&1
z=xLDVRLrcqKaIdFlgrso8n~o-hKjFi6n930P0=xe{|2NS!<_&$7d!KEs1UM}O=hBy
z`D(8wWECt{YR^OV*3Bu@i~+4Ke$RSQvxd2+0PTIEeU&tM=m<F%Sw`hm_d0zu2a_gx
z%xtK$`$%~{daOyvg!JYqaI#6eE7TmMftOj%uFN*m9$DZQ56>Ggo5}?u#M4RwT`1p!
zAbM;GjxGt8jY4!+V=tOoZtUp4h^cf~75pr1$qTn==o;5kb*Nl~@UCh98hh$}?&W2>
z|5?$`%wi#!&e_GDD=Vm{3y~8o0C)<@UCp}#yt&g;1(wbFZ~r-Rhq*+p#EvDe3zPH+
zH%e)j*{bm2yIRMnFCU+0px8>)snA#Fh7^`cfw|xWwH<qyHXD1Yv-Gz9PN*o(vaP1B
z)gQG6A=+)-SsO3~?q&Gwzat><@|3)7Q0iAhH=uU1VwPfWdwEI->vLLp!#C*h?=3HF
z4`2Q(qttwf6gD~?le*+IrqyB4%)p=z-hNOJ#I#vufcQ+)fpUQc2(?CgG!_)1T%nCH
z3J$`@Qk@GWz^<qD0JWd=kQuP-sollzp)_#4Gi;zO#!b!|v66aue+>vnME3~+#x_U$
z!1hnP)9CuBn(+qr9~y(<7ZM&Qf2Fj)WduKQ&>Q%D*BQk4t9qB)27OMawR=J&+U+uz
zvxqzwW+^3ykGTotUpg`uu<mjy7=EHmhhoJAb^FY|4}k4aD%J5#MNZH<^F||$z70IR
zTVqLnN?8G^R(tt)Lt0ScWFT=r;_-dcOD@{}hr3*$#`Qj!`Pjl$snD4#Eq~NCYt#|n
z=W|5S;e-qGVUZOU5P4q;a4|{!jl;MdT+irgCN8tM)iCf<^%)vOY9Mp6Tkng&ZFa2&
zuBC3{5rG@nh`NaS(cmpbAFw0W+Xh!bM3n7y3YA4l5jyd0v3yrSg7=x~kso6*{$dtv
zMj@A}p6*X<oafZ?N;cKrK7`&D+y`TEQcv6C_j&ib^FrFbQJV3R+m$(A7k#s<v{KdM
zf?{)h3!o<_W$v1o7F$zl19?_#%Ee>|ah19YE=v2y1Xw41Hq!6CzA*n7WSyum5f>Z?
z_!?c3-Kl(6+6rUyWr-#MAavoKSl~#?=bBvNhphYv8<F2R#Xhe&#aK$kz6hA07bL6$
zcTaOkd=Dsf7TbmIGq5t`br=MN#Lf}3W$G&jBAh;GKe`Leo*LQZ-<fGY@FH|*!1Bpu
z%;=)`KXx5?1=c_2*cI0vd7UBX%eyV~T>2wIt=?EHDArqUG_Kp6y}cD;7(Yo`Q7B*l
zyTKGM(<eL>$W>#IZi0;9Zt7?mL!rfL*676g#il;|9Y1afcJM87nA6Z<ODekVhK0XC
zf0`)XptXLWY%x{&LUns-Hc4|10_6xR4voLdu-ts9vy?a%ATrOzDyCyjEN<L<c-Zj+
zD>-Sj!f;~cm&q$WS^gF?!6?k)Z<IP5W6>N#utfPSd?;8WHND^D(ISO*Jjd%MjW+xB
zsGCC<W9Inw#(TwZk5CefRLY}BxfKa<#sDD37tSsrp^!6(P8sG;I#7mjmkQTSW=9@j
zpo#NUWgtnO!F3;}#~;XboCn*)PFI8f5_C@NyDD#A%Jzm35KV%&Gd?E$!E{@-wYTLA
zOln#iRsW@%J&00a8~zA?5R2oFiZCh2Jk+MnHAgS}-uNX?O9qG&Q0`Q=4p@FgWr89K
zp}=$KbkKClfz_J-1HnjZ!$`{wxLLKaHgv<BHDH@c6Rima@WiL702e)flC-MXM41RB
z;f0jKtt8l_U(cKb#;C7aUZ%zMEOI-^!`_qx@5LqEPZqUuw)03&(ZWd=iR3BRyI-B$
zM~&#5C^~Or{-$oHP#}%y?)?j1=+y{oH29!_Bqf`)-Sc};$Rgw34N$@p9`Nl3>vGfg
z_o{><bSQ6GXUmERz{(Cep#P_86Gj2?k7~LbP*?XCRGpiyV!T_AV4tmcOcbv?vv5=P
zAx@Hx<aNnSw`AM=gQP8#dlJ~)n!>$W)lf3oPAMz5%>7NvHH-E)BI`HYe@xxuIZZeu
zA%TF{G5$|KYm)!w81Fx0)>KSg{>Q;xEzf^Mlq{cYPNz-4Ldy^t;tK~P#IhlyMA$%s
z5fhOWRHPDnLW3q}a<UjIwb<D%TcLAoRxPQQwKmdNVU+}F*DkHEtgm#nxXoKt>t5>B
z`oH~zl>EoR9V%3n-_5r3OLM;SO~}dj%PTTa2K9=^9s=IQsG}YdCp#{Hb2}P!?qoDl
z&uTnxA1^0_oQo5?{BT#5?#L($cgl$fb81U75!6$2B9?|j{$!cOV?Z{{jEPl;!Sw(S
zQQf-`$-3i#6>-+}fR{05sFCXzoONf$pw9B$z=P*32;z$K%b6YEG?aRDSPVe-yo*wo
z-qkn&iym{5`}Z_-XOEeYVT^*K&fx&t4sbTAW@qDeV8v1Ac%aSEc8grQ#%k${Fg*m{
zb4)k7Z)0b7IPdIq3*e1+|A32U_q_AjJPhSJHMeNS{K>@@xzfuB<rcvQxOf>-*cnpw
zkEk=Wc^2XX!?`*l?~_c6abRLPAn%c!4`e`k^LA{-^6+*n!k!qwKNw<?x)5VxdOC9G
z<;X$l4$hf-J}QSX7@s<g-oV)DO}zTX75-uI(>FM!VW>0vs53l`1^}i;Tw`|9vAXi2
zaXbDFjl=>rheu`rn}Z{@fXk!(HoOdLA{QP)KS&XGW*1CM{o~^;z~;~hKSST(NH4%A
zHM-u>kr4B}Gs5}Km7#B7<P+eN9IeMdu=``0<sBap0q{<b0P|lVGZ45Q7~5Tn0D;v~
zqb-oi1btbk#*@I=!<`O1mwL6(qnyTtlG1`Q;SVei^s?r(J5~F4`+F(SA?5T<?&yXm
z^fJt0-;a5bu-e+4pMIpZ%xJs0Ubv3t6bLMF`92-jdg;{E<+V-dug`T<xSCGA$<177
zW3Vw=3S#|kqTgieWx>0KJ74T3-P81NRv2^XJmTgPw+1|b77Er75Ldgbdx4E5Idsob
zK?r*}E3BIFE$r{$mE;-H4%vR~dij&}+b*9)*g_)-k*bVA39;$<4lc4JkA`qcb1*Z{
zKIhfd=|XiN6H}JlNHU1trpohR8-Bgfx3*H|s3r-?KImve1^-L7v7Z*cJ=NW6)I}-Y
zWcX(9t*ox5G)uVNyheOh%(X{7nG{T6ay~EA3>kM~$8r^_8kRBPm_ZFh2|;cfD9a$Y
zLoH%e&$pbZJdJ9muXrad>B{x8QTp|_!o`_NDX%WK^~|^2DUPxrfr3qHZA^UnUkvDj
z0Cwd4E&W$TjzX2D*JPI>N9^P5hTSvqH1`vqWDmBII2GLtXMebtBo)lfXne4{zaNn-
z?rw*yGoRAKhbiH~$CpkMTlZ7Jwpi7lKC+=qJ7x!Vq>!fR472TJ+NalKD9_LSqJlyY
zlo9P-otLpkH!gFjj&RFYO$j!5A2j%*a>A#(j-3>xl3BqD-5sgE7E3`0bG;10tMKLf
z_+T}&JFXz*!y{0G6i=nT-@SbBr2t<_TQn%wI*!dc_ih4cm&<+K&5Qyl+7n0Ay~pWO
zdnnPzQHPSLdMM7o1ui3};--Nck$?CRD0aZ3Y)H068Mp;2p<dlFJthyREOu?u@#3Gk
zT~6d;CB!Sws_PY1+~8I0O<kTK^K4&jwlP9(=>%s>xTJdwg9pQdY%vUY8$}Xm)wxYV
zkyDYF2xwQHzYUSMcKRq#PD$!)R#PQ6SZ>CkrM*=ux+&Wj#HYH>Arzhk!-TwvWwAFc
zMSX^5*?V~~pu&snctwM@kcrP)Le}aawvAmCrq@F(-9k+f2bY8xigxJ~lxc+Mj#${%
zRuf!mbA!bUZvnXdP`bpK1Qd<RSgheXAGuKY`TRJb9sZsj3mJ3eDAn>pVR>%;)4$_t
zGGrx>y~Tle9M`j%uILV2j)GLi@-h8LP{NXAv?Tf#9K<2$4->`(IE$K?!YDLp()nGn
zaz$||M(kY}c)>MNq`FTX+^2UeZP=^6p`|DI3kgpms-M|8>Ehp0?(x@sM#{<M&T3BD
z!I#D8nFWGLKQ%RSrx7~&lhYsTU|&SnBb0pFC*<sOMp)Q75TBDtwAQ?2L|3VeS9b~i
zo{WyM@xn<UkLE!M!S})FJ0G;O`GCZC+*Lp*3@qCDC=ZqI#^dnE?i5<PhP?-b{kffs
zQ6bkGGWXoMx!)(Q<Y0x*A2P=AL(E^jeSZytQ26CJf}xTXB-Fb|2tYf#G>l~(0><{c
z?^EKQSv^L48!X&q*fGmB&|Z+2)2G6#im6x{G3SL+MFzct#Q8$<7Zq|5A;UX=3?<+3
z%`toRDq?k&AZi<-q_&2I^wkaH`$ys>k#Ib}rbd0Kg%<hhj@{A|A+T~w{t*dbKfr_Y
zm4cX=o@ap&VJD#K2z5*%+r$*SD1A>;&4Zz0v`N6$IRN%4JCuHR;$q-6=mrDX7gSFY
z(~e+s4Gpmx0!rLPzCP;(ufKYW`5K1nU%FS1Jyz(3XY558UPY|FBW=VYoVPrW1@}JT
zexk!CGsJgKW4~eP$SJ!Tt2oK(R0h0l?L&bN=%FpcMcsVG4VlP1{^gaJARvjewP@Od
z?n&n`D77FA?;mY%@k-HGI^bQi_<IPjQt|W2A-@aux?l5fE8i7f&Eda;>bviJ;lHE&
z7jJJ~5#hfhzl~0JaK0b~3{FMhzo+ITTHx8f6^6bYA2`{-Z@>I8E1-#+Soe_R<vKk2
zXF|h|BW=QZUV#Uvzoc@BpA|WeH}(-*Azk$)<C_|INcZxtsm>gph*nNh+*(wqWVC_n
zv)MCThn4eq)={>!yC%WAT(ZIQw}m@vu3<$dlzn+Vx_ufO;%i36deQr4_)L;@B=xCn
z5-4L7Ns-nuo+jWtB#5e#`?}_82i}LN5`#PK3N1-A;O0dMK7>%;zy|X77_+cw!Yoe(
z_jepnLa~TpSecSUiNzy@<<OWYC8C+Ku%<>hkIy`qgi!hI<V`9v6f(dNEs8>N!ZYZ~
zER1L{f3#5)lOEDsnCLx4Nrg0FWvC%Tjv*9gze1>3>G~71GN{cgjoLDbBdwH*BNvAO
za?_}-SrrFH{D^c06?ug}uyr{)lxVg_QMzSOP|R4POp3Gz3sg*6k9%ymS`!O&kr`D3
zeuSflJHaS;Y)3O7T;|VL*>=rXMee@^`7V)xw~uAZ?AVx^aZXa46?hh`Z&?zBp(Ft5
zialZk_WMG{r_gB+>uI^Of|`nNYm8D>G`y^*T-Hmd2`f>{QP{}n$16Br%#lq&)-%>v
zN@CZ&$s1_b&<#-h`_|=g&S;s%eC+a4cSUW=dR%82mc!^z=Q!Dnqcy}dpS#pD{)Ocy
ze?Gc~eDe<BOb;_x=JGO=ehL;1st`JuAA_@vz(P{K564s?-x?*(LOs@xF*X3Ui?+x;
zwEZH+@i;x9hRT??l~rXj%aOk@N8I0udyl)?1RwmVjXq}*DUBQ=ja-UO#zwQQ;0Z!%
zKZhb%x_Zhu@Q9L<lPhyBn|r*nq;pTwI{;(}hzr2%ml#C#wUJh5rP*#b-vr?_Uml<x
z=XLVy8B1}$L~O0`c0W(BA-A}DBLu=Igx)5tV#22ufeJ)jtDcB2Gx<dpH|KHdSk+;I
zDg{mjIVT&t2yl7Wve4HIS#Qh!t;L){iR`3`=bOBSqDzpTM0e=w;R<>2t=#R3wfM@x
zs8^E2puIT$)iBSm5=Ty%6t_H`h^mpG!>DVRKVAvQ9V}9llV!-_i}rVyY&1`WZ_1KF
z1L1jc(=%%INDSA>xxV`s`}{-$DVvue`>ovD>Er@~JPT5MS;`VUDUEVv@(Ux2cR+M<
z#Uv*7VOh1Ac!CntO8tff+j-V69vCXrvR($B$JmRChV<Cv-jj0K>1)7lZGE}cI;oy{
zinE$j9_Pl`$JjlMo$anC$E^~4!h?bmE2{9vY^03iw{>QKuekW5P$0NwGG~(}M1sq{
z=^G`R0C!%1c{8Jf)V?AmXnKD%Z8p!GA}bSFeos2=z-fBQTx^{QQ?K|88>g<Jw%X*}
zMrt~rY|be0l9oSrIj74}wVyOo{-gS*WIB7zg+7&@f_ex}RpqSNJu600bPZES_n0mi
z)2C1>vw7urus;)fihGY&#6*GbX!CRdYl6`MQmc~8{aeJ5<R_`x??Tfy39=Pd97f4L
zutu*^IF9vja$V{n+RN_tviOaanLN`A1%4}PKLpmKCbJM6!&+$}!(x1Jkv2Cp<|BRf
zq!N(zV?=T2Y&za#lnaGsRdJnfA~fdMRO&-a3h2u}nM;LeZdo=`JG1-=O(YX$>VM%L
zY^|)RG)HNp(d7*xI(89&kRHGJ8W55CNOWEXE&Lux{z}xo8wkV>S1yBSfdL<;<Ac%h
z!0lfKCp=+s5|s7Py>h3DR6tmOK-PruYJ%<*q?y$Oz8}Ty$ex|0p3JAp<Tfbn3$q+T
zLpzxL_2s+j19sY_>wK3q?px0-v>ym=$##t^o1F*?-!;s_*KoP>&l}n$A=yL({;q|~
z-%GNdRmtHLtR`U6h)p#HiUZx1(x11h6ZBX*{L2Vs47r>=NdP`ZJTA@&rWcZW6ix)W
z=f;@}1ivRWuB+w<74|E|9qQiGg2WZ>D9&)E=Py>BZ2zsuFA`Yx;dnyogD)_&l3NSj
zj>^j*Bd7rzs3DNkFqS=#Bwe)G@Qgz(?7bEs@qXhuiRvgrZalIcFsT|~g7BfFJUMnx
zrubN`oiv|~63(cPuL>$%A-4JloRm1x28a7eHB1yn#wN><_Iz=V8Q=JRrICkHEB$zq
zXJTiK;G6U{x5vkg`C>O#lLxXVK5&KV+&_vuCu=4wFvOn$)wYm_Pdr47M*%mAJ1n;~
z+`B02;n4ZYb)s3`STKJG)LoFo36EGRy<-Ayf;NyLCDiS+vTlgowxEXg)U&e`n3jED
zYQ5zvJK0vO<M3Hx-@L*25O*{<bBp2V#)OG-cYWJHou@&a|KVpC6J#Vi?ZSe60{L0s
zMUYzBV?IeF$y(HUz=UlTdN8GVI%16`!pGUy)exBqfT4ofRPciFhiFSAieOJ#gpDg(
z<+l70?egG4Rm2nc+L%;x9B1pIsgO`sGt`VI^>3Ec6#Q$3`urC1V9~T-)N~=;v~*+w
zej(NTCkTw`1nIQo05d_41@RpE;Yf5Vepk#vm`yfiWv`%>?bg_mM>Kt+Fk&A`Bz_*o
z@IY<&P>n29gAw@=^|caZmSXW8doYviQWZ=65pM6{5-5*RS2)YFD$VKq50n?SU!8n!
z^s~8i6&y6Vm`YMrSv5@_sJVJQanS@+T31}!y>DR0JE-z1VKSswB<CY4RiQJMLVja+
zq<QL~Gw%dRu7VoHs2VlaZ{fM>+pNJ?;3Ktag$PIIBj*HXtg-|<IX-PEk9a<?Qa4u)
zq;GWMFKgisdf`)B;SYSLc>iBpWcWrTdbThfIC_+;3>G6)Qo?DmAy&yD=V&N?QggU2
zSwe$|ma)lO8_-e)pbf}|r(7ce`y`NyBI?ZaV)M}xd%z#bRR1uQ9*JcGzLT){gJ3uj
z*g{@WM5Wg74s4Q}N-0cb&`sg6Q{)0BhVwBaF)?Cg<Z#l<=3a4w{IXenU#p86*-}TD
z%a~?N<N{;WW(!t`-`CDfTY_!Uh#rD#x_L(!CdZk9dJp@Z4LFYnIPqXgIq_&5z*LQa
zS$C;8K_x_B<Cto@vRrOfO$O+8)sx|CDR8w@&C-(MJye?Z;J8OL4I2xWO+>7-)V$v)
z=}DRQJxulACrhblBYGx_wO|nh)wBp@Z-TMaUZ(imK*pP!&$8w8@qJ|i4$%6!&$@uu
zPdCK%TRx~WI*AZqEAzyj09EEHe8J~js_DwQa;@>_I90Hf{ITagRVT_<g<ji1jnsCp
zhLJqZEy!UgG%EdpDibGZO8ZI(w2eWWn$Rak=q(2>Q2THZd$NCHn|Gya!m1k~>P9>p
zATj&t{{p@2I%PlI1n(p(1%_layWke>J~NnF1?|4<#z$$mE}0c?vIzFM7>4;&W=<Di
zOq8x(r3Z?LXL7T6OUIKPsF8W194~W6=Y$*ZS5tJhz20%`|6=a6%k$lZ2|v278V3fg
z3pd&nq;bQT9%(j2&I8T$U;qT13@|(nv2|o-%mc3;V5l5%Pe6Y|eTiZ?{z#3HC27Ww
znkOAm+LmPp8Q78=_}YAeu`Q<s%w{<j8u_H*`99ubrN`2g=z||KHU`cv$>ntBtS2=n
zu&~JAM*BlIRQ7$9<+*PAri&A&U+rnq{PPn|F7JEq(asvE$gKU<6H^eTh7;s#i<O;H
zJgyX*v<3%{FuXZ65-+&0>>nGhFuA16APe~|UxuOqOT^x>OGF489=6K+*8gnT2Tu*>
zadc8D5g_fwocMAVA))D~NnkLTut%p0EoI`<we3cKMaf8A|I7~b<m-;4*Uy|yu=2xM
z?r@kRF2=FyC_8t6+7AdiaP31N?=U>DZ$dQg7(5_v!rbo&CN5jas#9G)jZ_?vB`~Ne
zlF0u2+a-c@1^QxGj5C6HslnDN!LFB?F%arC=dOL(B?QAZ%qLB29AnBX<E3>albN|;
zJ9){fn~XsJRtM=*G_4^d2pBo?Z4mXOP=*;|gD<|J+Z6>jfc4#)wAGc~QG47H+_8Q1
z&Fu3IRAC_E4)_Hk-5q$ZSYQIV3%@W{3T@#LaXt!0ci`m-lGUMCc+P^-kaVF|wN<lT
zjoJ`)!P2QYHNwrdP;{=|YSe3GzuWfcY>s_KA!MFCCl1Pea%p%%5b_Y0CEk?AAQ=E@
zfXWY|bE|YZI%YumJW%R^R5u8=84$k9?t}NdXV`)G8~)`0)d48J|G)z+Z<KP+(+5Ux
z(0mv36|X0jvH$(GXl9N-<hvg-shv<dS)}UBNb1S|>>cV$VPx)IwTh*lu6aUk(!eQf
zAeC~L<?f)qbSv);U3phy!m`({jB_M~h78>%tJ2^>7CamByZ8~<mSbSAOnXMf%2Xup
zQIt47OB%=xF~CPc+~2VM+Ukh)8YmMc=g-{mz4S#@Pvm`J$=EfhKi+*5p4-2dvaOgq
zxuS1+=G`43mOc^jcLwOEcn9RK3E3DL>U|t>O*(rB2=gEcbGPiAHQNKYZgb-!Cg;+D
z;;m1Q!z04>)BtxCLfDRy4<MUuh4lHx)T9)4Ctp+Jsb-Y9ZAdRIE>mB8^$>yyA99mT
z5W|k~Ajd(WcJOq1Tl&O~zz{faQmAHCCyk;c9v*oF7n;sqGZVTFie>oSCRUC)A^n)X
zsnoL_IsJO(7vo1qvNuTjLR2PwGhsn3u(_=O0MJ0IsY`CgB4n;_137}dqqQ3$*gpen
zJiX(U8veg4kUvGQSzFi9BS(kjooESikMmL6c+0V41E-q^fy1G?3z5VZDR$^+v+68Z
z6VL6Jq|J4th+^Qz!LIpj3;$o_@TV1io`Z%>tE(uHTG#zh$BKqghA0&(mN7S#zLDC_
z@Li*lr8^WEzlF|-#0IIDpaiOrts<y8<l;ScCWz<g#@h-kNQLOT+oBAhdRW39dWu1P
zF(w}}ib9PPgTjm$m0`3T(z1OcrLbzT(p1~MtddJ;<tEDUaSQrL^M{?_IiEDnlhzz}
z0_tQ>Pv^{*8XSpCn6>vwu6MUIDO8godIwG^`erKt9xc~^6K3a3b=O8ml{X9^RV)w8
z$4w<Ry6zkuoZ&w2^CX`2L}UC6|L(wkY+`#^H0sRCh**SoUROzLm&%E9x9Rn+eLrDH
zj`?MZPDg)$o8~ydS5+jhB2d^7CkE5muqp#mtq8#^>a9VVF2H&CY!@?n*QgPzk0>n(
z4kzL}*5OC-V{8P@ORO&4r}u+BlkNrcC{XVO>)12;7t>e!Oa5sl<mr@{$9ceSpE|y4
zkD^Qbt|Gc;ZYD!+vfuA6;*o`jn3UEm!j#ftMu?i{nGaFA+x2f=t_As)$0fg5m~$5}
zu~kNOQonuWu2MdmKM*4C+I_$A!oCCu!w#!}-$yEw`Z-UGJL-jCggO=Sg<&7()FUUk
zVu8<*A{B?PY43e%P|_K(XfV21%v)G^jY8kMp&p8RS2K3wK@_m#j@QDeV-_|a&CDs2
z<uuSdDX<1o?=Kfw<^U>)O%vmQ9{uQtNMJvsezOdQb%WTsLLHkxnPK$~SsRw2aTm?n
zK}l#ER;@+brem07w)8d4AqblqUb8yZ43|)&r1WoDDQM0LFaRe7u*ORI1k^sk$)>VE
zT}{x{tn?fF{1rrb2NtU%^kKA&?Lg6->^p2}RpBKIURW~2^3b73TlzP*Or-hmMCyGs
z7-Z8nBqkDi(c4fq(H#a$QJ~dD_wZ?J!M<UK43EUV)iZD0*BKzHcVHv_1Vx~&Bk>T)
z{u8gM*xQ7FKP=<??7;dB{nc0|0yzQIwcFM;+l<WP14O{9%$mso7abJy{!+`U&b~P0
z?kiP%7#_u~S90n%GwL_=a5&fe!0pcnDQZy{6L&jM8^dx9x|_1v&aePlyU<=E#!Xtg
zV94RC1SI$V<b8Qgit8exTT>6QO?dk#@7+H}gg!)lK?shF$C2+2HLqc*Y742l6NyAa
zg(eUAbCnH#1QS{H_TKQ6zb75;pQH$X^PFvAnk{oq&SW?DkkXD_vwqZ9_bVwKCdF+D
z#r5_x#Vy&Z1d;-Kb37q5c*OYLaq9VI13t4sB<x2x@3-5v%+y7;F@}Nfx8wVf?x<o=
z;sX^PmBO5nFe1TfFye<i_o0~Xs4};b9dbQz?2tyQEg(G%6YrN8x@vIq)}fQfX+26X
zdqwqzJza3ITbR0_%_K=pjQ?7D9rZ><+D+PJGzK}HR+k2vtohvO9Yw<<^1|?HT71zc
zlgOo;-QUQ@1v|Wx?s{S=`*WR_aE-2$;L%?&-GivfoNQ0j6TcBe0W)-Lq{4S{LZdKz
zncqO}U4^ctjO9mO06uPB5ce4|G4?utA^P7;e*GsjNwW;(n+pdBX#U6H`QPJ6wf~zz
zl!U3Bsgt3LsfnDav$LVODcOHcri6@*e{SuaR1J-6OvzL%?aW<m44wYxEB~K2{>K2T
zRei^PQ625e?tFOIk@(7jLt7KuggjPeQMlbsZZ)<H4aO2%M#Ik~`;aqzX}pnk!*D&n
zaqJV5$d*=iJ><FLxAD4OTX}C_2<NKfVnPTVcp=sE9p8!1N%u*f^QA!E=RIx!wokDE
zP$y@SCT9p2c0QHnaQXfl3pfhHxF!m%C-xLG14V&>7=VG=#8K<DZnA^qfJS8Dc!yzG
zwt9Mt?b@ElG%RsY_cJfA)ulVh^$kB7*RQQ^ifI@_cH<G#w1x#wi>Xsh?>KKSi>L2^
zxuUvlW~-;vo8SejZ4rE^(u_7vrP0G}%+;q{wL5w1<yM&<sk7{_*bdv3^n*0eX5X*I
z38JH1W=d)B#p8=stH^F#uZg16fgt14m9p!seJ()ChwWmrW9$-eAZ*wG-=DPyF1?a|
zHktAik379S#=pO8+%}iV<#kql^$>EEuf{9wI#K|on<-P7peJ#KJ9E{WlNSW~ltMOr
z^tmpQ%U+K}o^YVHZ)C~Jy=214dzj9zTeEruCpx~EEqPAKI@1%cIYJ0B@rGyUiOR$v
z#LUCdW+N+~Su#t0{-~|1@6USvJVjOLLwj||COL+@TVP(bF6sZ6Ip+I@k$TH@TGJNo
zsor_7Sq^#3PfA_5MJc?TEN@=R5FjLYHu8Dk%okAcKY2RPb8*N`M$ncymZAj6HLEzI
z+*JW%oUy@aDhYR?Q6%iDaQpP=`a$f8Hd|RyxE&J?U6A5%#kw`Bn}fFKI<L}V7>hKs
z#%YEJa&U-Yt*fE71GwiM3<uU>m%zBuhS%s5OtJ(eb;AaT+T_d8m?FZ6L8WH13JNR$
z1$Xb|5LCnJ&#T2N*UF6Ts;jpy+X%0#rT+G8i)k2~k;f_Ejn8(k9Oye5_ewKB`DDXp
z=i5t|Mtv_9d{@3<jrU8^(cf=0xU#culYl-O3$w^sGN~egCnge3@r9R&1w^bFi)8b7
zscwVJ>G%k^=ciAYGvXov;^%-RU#!9l!!D73sE%ihF_QkqDJy0d*PL<5f<(RHDroYO
z<%vbVguMt42GdJe$fP8bc{k_eSY47!cx0TwR36J$D9D7Gg)s)TQ4d@4iN6CX-0}&G
zVj>8<B3_ND){TGij$(I_|6yN4{(5iu783r4`MKZ^eC6d(E2L9w|JxZYCQ=CnLYI^|
zNRy=4l)~N715<*4RS+GRh%b<Y4<1NiMGiLr+9v=pn3oLX6l%ixl`15U(z;Nl&Bid_
zMfSAR9Jo!p9lnwDm9t~^z_u%&bc(o$TegGpbm~#Ji&6@QGzE^&S~;hKqF`iS6^c?Z
z;2!Tk#@)%idNtdiKtNYNc((slW&W#ch4a6uGE#PKhBlTaica<}_Qv)$!meg!rcVDA
zbe*zghbx9Q_NV0SZx=N+H8deOx2<Jk_NX0_aFDuK5n)oI4$WoRxf<IV-!^_rUZa_L
zZka+r$D!126^bOlVU1%i4N~yK+*pFVjW#uVE0^WB^OyN7S2N@H+Z7_odSNb3?LsR0
zKh`3zSd3F?(b$MO@fP&?)`&JzEAb`m!i%6;w9A%B_ciqOEQu?gA2oE4{7zfh?c}R&
zYI@J(>Yo?Cj|cm6Xzjkr*ynaI+a(@>ibSiU$&%VS_w^DEobDhD`;8FrTGy66$RmSz
zU4^Toh8lMpIAU<Fnz2!_{4?RXpP4s;c4e#OY;9rl_I2u~`bLauU2?b~{>Ddk(~i0O
zi`KMAJis1`JJkW1N0&ahUsaeh-@P<4_2iHrGgP|pO|19s`%oReeDVU>{prDBIB@cP
z1)dW+oLNs%jxg-B5{(>>@j7ehY2D*fljj;A4%uMQ5uomRa~k+86oo1e)~hSHn^C*+
zgRpwbLon@r{0GP`M5=C)HwX89K9)d#ymy4a=TaS?Em5A>%SZ_xqR~s{H?Ev%cuayv
zNh#ek7l~6k{Q$yU{t~2w9{kHs^2l}~r7}r?!(gm)3~fYBsuk?gpXy0&RtD2K2Dez^
zyP%$sJ^*Q)3O4V^jzoipSPPr;9NO|Oer%(h&j!v1kDA#c0*C>x24)rq8Epprvg#<x
z$|_)m?#VynOm?heU8n06Ga^k(=1M43Q0(~f0{3L4a#EFp0k{zmR8v_Q^$eC)D&zc#
zdZbBxI=Qp~<=2;cD|p<fY(8oLLFL4{AU;WaEWtN~oz+p99UxbkNL=BEQ1OzbIL$9R
z74))3-oz_tBb|+&(;Nzwn3?<gehx$rYrfprW(vGm9CUQIzzX}k^KE{85v!<aYh*J-
z3?~#MG;KoQmMF`VI?X>yN|sEUexGgWPN`uXW@B-Zc)oUSUu0YTxivpi0Q;I<w@*lW
z3d${Kzt<bK43b-z{5l#s^nkBvH_#UFa=%=QN#<9Z0ncll>YANaA(j2Q&RcS->lI(|
z&x<e-T+AhoA8)KnlCr9I{ifyC<Z~ES`=fNypm<;GX)OM<nCoK!?n~yD@Xubl`K^Ai
zfIzr@=D-dx<H_wjTp#?`Al}y@+!yd`wDapaTp#S$0^ZjW+!u6SzA9h$2jhP%Y09T=
zLffAut@@*4`R|wXf5$ObHT7^2w|BBNbRqknt6R+3*wDdL#njQ&)b9U>u`gAUV-yiW
z<5Q`pSCjTljtC8nAC6|TQX)$Y6Fc+!=e0b3Av=>z=@$rp$8tF$Y_tdYO1>`<@lF68
zIXr51-Ann?2-qDTeV$?Wb05Q;4w(=vdQL;dh?=CrWt)(iK04Y;2wuX%sl~?SEY(pD
zWi+)TYPj#|9H|ktSGG8z2S%3u%j`+;qjDXy=d5-yH}0g~Rg=pGlXfjVBf4%ICzwzl
zm+Z6yVNbFdd%!&HR6&QHUVRLOQ}gD4F^R`<AxK8BcwsKcJJ19f$yza~E{q{D`f}s@
zrTg1hmXhqZc`Qrq>##tPOuM;_M%T#iCw4H14K#3d--&ep9TG*0jK2^q<w*sl_IIrz
zI>SIPp3^WkpR`f^npU+j`aB<jv){E*;3luQz=2vG<4!YoDMEQXWNRG=P8x=ELu~C$
z|DYW6ouWQ4P?oyISGos~{v_wq!5O1Tb~BG^k_O+on1hg>sRzjxhJ5{}#c;9s@R#Ke
zp<eO-NT?V8Z;JK*QVsuSy>|X-32pv2De-?kBolVEv@tPt`XBAzhz_(5>hg+!Ifd=I
zOP8W{LCOM5ge_=F5Ro#*8hw+cmZ-0hg-B$Hl$^4lqZptc9~~TX6X|73agVx#@z2$n
z^BDMxulKq03y(Q-rYr@^ObfK%hhJ~!RL)c0cc=R`An(ojT?9yx_R%Q-e$0t!7I<vW
zgNI-k{$K8CfNV~RT<nBfPEx1}enRY`$E^WD<%tnDX1GH>V0zc64Agw@k}hY+INa>O
z@b7Mc5d+7GBU64fH~?>UM3^CNcVChrZh!yB9X1cp86IJpUL9#2`N@KAriR?=7>=7k
zs2IH4)SNUXV2C?{Omm!>YQ<paL3k|O39R+V0lgjqdI9f*a@5CNP2({jt=m18h6DtT
zIqyItbiinE8L;Gy&m`kH(C1wST->4A<(&u6dt`yO?OWO9T?b@4!msiI5^&o0u>m;~
zGtHMCZJ=hm9_lvqm=_(K;nB{Wobk~QYbmfD9SOM($nSQ1h=A!4@|wS;fQ|kU)0)3W
zfQ|7H3iV5vI^Bs8wVJ=nfQ{)9wwj4nKzH0z&yO-mvymRKIsPMrvfJM`W3b!XSLfM|
zOTc!3+~^?=xmMxRdogiuVA{2We*<*}`AQ%Zs(N|b43yH-_;rdv5|cN7YF}yj{GQ!=
zou%$);<%B7gRkZg09?(D!Zv#F5Hd;}k*fB9Y?J&UXBYB;O_1-ct}|uiZcu04nC=B*
z{)(%+{Z<zcz9C&s-?AhE^Ov&Cvq$b4XmFUJnptpffQAiXvks{-AE1?r;P*VD^wj0)
zL+svvaxd>3j-UeIr2r=$<}IGTa05To{~hnbVC5EWq#*YMc}%c#-gb}+6{pEDm{6h|
z3~J<>q(btbyHApP;X9BpwR)<aL3-#F^u!uTkiP01)Gd`aNh(RYW)p(<<{n3jbjUQ8
zk{Wxxk}!4yyMD(IReDO5OlktYS=bg}PvJOY=Lng#r2_he0j5z}*v7IoP*A<5o1SJl
zc^jT~PnPOR1+!;jtV=hep^etNqzNo8uhLuJO233u1Y}pq;$t;AnXrLL_Ck1U_Y5Wy
zcwp`!Z0S@$`nOHfa_!Czr14sbXFK@UY!(>{wOdbm(*l~ljtt1dJKfMu0DyGYFN6U8
zy5C8mcw3z(47p4**>GBj)C||qwQB6jRvKv`?$^Y*57~mXD6in|0d+S1$i}lgxpk;4
z%aGCda!kMz7zQFF&Y+-mp=9NsT0~wjb4rqwCfRKJ%s;;eDRJdSF9oq|#trh0J0aX9
z4-)*9nf1<LW}R9U{TfxoqnDznun8`-udD95d}i26n#NYAJ$bNv4g5^^J-nP|ozmOo
z^tRv*&8I5)iUNa|@(!#3;?xm1C7w0NORQv>qPA|y$!^sftB22QNrb_y#-U2a8^Q$k
z@Gp%&B9`VqVwvd?5EQ(>D3rP#MOCrJe3O39U?w>Wgi6?LA_+U1_7+A{$7F5Np1m1-
zJiyXiyd;e|>&nS#OMx%t?LJv`BdpH4@zMY7S(A)^l=bYhoKiL+3qn!&U<g;&FfCUx
zz5T!{zw2qiI<x<9(2ki*50<|Wii0y9Fu^4W<k%vr>uSOnXLpNFF96fm^I;qe#B<k0
z5uOg>Hmjzh>K>-0*CSX{<B`89TCci%1dD8fE|WX>ker<&Jsf#^0gJ}1?%m&B)<w<J
zqjZfXE9R`9W`%H0PjpU{ayum%YWb^6WS+p;`~W@KqY!-*ucbRf2(iJphWf*ckp`KV
zcOi~x&Ebm?MQSfd+n`o=v>2wNw`=QoVPQY6L0eK_ly-t5XKL5>#ow^j<7>WvDOqLo
zOuR&Po++dz+Ja+EFH7Q&$t*M1rz}s%xavVy+#Vn~JD960Lp<Q%TEl*0B9;bm9QHy&
zXvz_gH4$}tq4~Y6PHZvAKp#htT_kp)%tF$e;D}_R`jTgcJnp^NZLP9E+&eoFdx*L$
z;H)C(2T9b$n;K&@$w5yL(Ia1tkiY>qzZfa0p1HMLW8~sO+FhKj9+9L*W=lB8IpsN`
z2y+KJddIU&Lk7QAI<hz#o~nMu#e@F;kakYNnMTo??sRP1wr$&X(y{I2k8RtwjgHNZ
zZTpXtPSTm2nK?Cc=3*{ps=k}`)xKC&yK2>5dS1{4Se!^sO6Ju(<F^J+2e0QEG&ZRR
z+JYv*NUzfdv;+s30{F@!RMfij^?dO*D&~hbB}H!2*ekrH(SNybR3%E(-QcNX_X>dW
zh$gA%+@Y=_Z;RflGsLn*P`x*o<cr@@7n<3r6sRmS*Tp|zJF|^<!^3m{YAy_)NT+*!
z=f$%jBaZ>q%q6Qog|)a-qIE*B_20J4XFEoRNl(y@DbSSRuR36jj(3ln#6F)dwFGC9
zle-Tl#W+5BF{o%A#w3vxKC*KM6)hjX0Y0jzFY&}RZ~jp}xjRF(p%rm7|AywTM#j2u
zMNL-@KaA(sq{u)e;PJB-Fb~;|I=V7AAe%S>70f87Hnm-ry_DVAUN?Wn+WWy3YAFhY
z<WdbxI7We;4p>8{4Z(Q(DyTQ%=L=yit22~<3(yPy*q|b`az`_$?_NK)gGy{(>V|{*
zr04_)_*WFoA3te~+en(JhuT2f3DO)T-%eH$PXn=`SB4;<zrZbIU+J>D5M~pB+yH|h
zSff^a!vvuC2WKq_j5_!=GL4?WpwQwSdi1t^KHb2!+Ww0=@H!o4WQ7=|H-vHXP7vjL
z^y(XZ)yuGt`&t&_us?-zbF#6i=M!#o>wL{$cfG&yt`_{%kq@>hg=-lONw$W-OSU#K
zqrU~fa$maxg%%8PLFyVa@S*_w$?!H+6hgQ^hVpFeBGb?wa=a!vs0dVr795(pehm#V
zJkWIi&>3{tqlTV6PIS0)f$kf+CI4WA^~y6{P!*JVCH*IcFz_Ya0J(G8o8S2s4YoV*
zvh|Ug-6tJE<@n%X|Bu*+lkVsw-*(1uOVT^Vm@uTb5jto2<Z1S9iqmQ7Eg1|+2?b0z
z1q^qU<vZdu<tYxaCM8g>krT^~Q;>p(lO6S&p!5tBI}GaD!koWxbM^%=c1nByo1EF*
z^RQ3KL$EeRklFeWMIlQ|q&;$KZYMi}1xJIgxk|5jw!*`-!GgQoXJKGS+jF(AI}UWA
zmJ6|m3g!Vd=~jwRvilrGygrB_sC%LJ@Zy(e5y1J}iL{eVv+R+2U#SC#3t=TsmSa{U
zadH7#vP^imx=J-y(GX~mC`$J`Aou$j`nHJVq~4wqn$#^`ZgMB4x~>K6Sa_T+NwaGB
z{$>4Lw=UTTy`iv`doFP=jNmZBc(!&g%xDY8XcuxXguIU9?YtGjLXtI4eqGt6^RFnZ
zZCxfL+Op~A>W>P)7EuJ-i_LBg?QM&zx5B{HkH{qa{emn@5*pbKflLFqL4N?`t;GtD
zNX1@+yP2(S5i4#4FS%z$xVnKSANM3u=#IsmAKhvt>TBE4J50&#bkbb|;p`vL#=I%s
ztcLzz@tbF`xXf;aMw>5jPK#4XmC#x~w7zEZ$sWN{C9=-?rT!g*JF<$w4s%q48FiId
zV|vahW0zaRA>icTv$y@~X#6}Jl^BkV-D~Xegh#r{+e=AX`Ev)AnJ7vhf>N7q%us(=
z-2iZ`nNbve;FQwGIkeHZ9|(y9<TVCAE#>k>GD$n})S-!m{9?zQkrzjA?)Iiwm;KU_
zVjbW;>;%v^5@qZi+1COtwKlE1=Z7|6%QL%jJ$Y+S0~{Mx5_=}{p}XBBrQfA<-l&@=
z+E3~Ff;~=Jv+mz37^-wuBc~qmeJO8;-MkKU;TCI>DBt?Sm;~4rhK-`0M0XJ4PTsO)
ztPO*Co&=Fl7{TA4Z@68GgxERbkGA+2LQ7AeMvEqIewcg6P10(9q^bwY)>ri_J6+BO
zZlMI{7`{Yz|EtQO#l~Zwe`xtQYcrW2n`jvb<J6X4p$_tB%f@USN5Nc<PSc7_8#+4v
z%u>sF<OGw|&lwcu#Vn=<ghoel>ivGaWDxO6;&e_1*M4yiP}&gg<xDKnhL<zYg4+>B
zg3$4i4bW*AaO!u!_(@o(Y=^x39e^&hrE78imSQ4~SL{F>Y^x#fdD5_Us%k+~D(Oe@
z{ixm}`|Ae0D-Z!NF`qUP@b<Sk;+o>A{03#gJm6^9MbuvQsNA|2D!HH;M^OkN*(Xc2
z!HCVFacR9Xk`0o15nj>fNmXD~f__tzAkHhVP@5fA6uChdH_$p;gW%?sccmr!i8TA8
z+mXT*bwwnzL4mYL54}+WojHigi>@3$p)^Ez!N#jMOgwJ#0FF!7h*^wzeg&b^dn1~?
zg(KCy_JRQ3E-&wyMRdc>F;0Y6u5c#mEZ09f?jH=iZ<>sM9gR<!h~ea;qL7gr77T|l
zLi<MHrh+xbg~g}!I4XxI;=T_2rAlaPfBCc;%cXay+Z@y!U#JCE7jDz<L<(D4G?;eF
zwP&@pJVxDkN03i_tYv&iq+B7=>y2@$BvMffbpYby+Ru?KC7z8!3*JW^B&*c3aM`2%
zok_<^zYaBmn_{^1^YE!}G15uLPQMO4g1Uro3pLWv8rG9Qrv$}i-f>V5mGK==-%uZ;
z3Z$^cL5>W1+wkHL{5@2HAoW27E=5l;4(RwnyFpaPb|6_uXt`<pQ^c#t-P-oA@MtPt
zAX-g$bn3c5PTqdGH#cF}bS#lNuZJ*&q))30?o~4ph}c|`#GG&-@TdGsG!FG|G-|zW
zFb4G!+XyM-d(wxXsT{OFoG2H!&S8c5bPRBxLrlLwK5wd9Aj6FMz#o6zfht8dK!;JQ
zl5=vZ2&uS0swuNn#mVbCh4fSZNKPA0PQyx)C~qYbDM&~gO-{r4HhS3p!x%|U!%mVI
zDx~`lV=OrhH%UW`lv;!+Im{^Gpl!eit0{n%-3Y5Hx8qnzVp)?&*E5ykhMfv|Cje$&
zz5>O42x{LhgRTb@e$eL+Sr20EAf#gykT{1C0GA!AxUaF#y2b!NP=qxc%pP0?HUi;4
zr~uI%`#y9Se*L~7giaMe)HqDPQSQO|4xv~0c;tUV@jweYE=O%Pt_t@^oS<~^rXZ&5
zBmhP1vNA%2UAR&6c-TIv-AJ46v1ic;91*WdXy^UKFo%=SPY}X__9TSA^Scy(tIPU)
zj>VvWbf2+heeq`wB%hz!^7b2oaHQkH%d-Q)QFcaHozU(hZsGes5GHCJn^kt>FEpv2
zl-2qw@DcEG_vt3E(8A`I$+3+pV27}9wAK+!4k1TFjric{tiyv3ASptONZ{qZWv1^y
zlZTi>At2g^mgcdKlB{rv+e2s}!wdZapC`_ZxI*&K+W);3@vP(iGW@{|+B9rCj*9<>
zOy&>CNs!@mxVkZ?7AeMHrm<p&&=vUQh)RdZ6{u$Paf5nIfbQ@=$8xS8g9p70vUpJO
zQR=`HEqKNV1y4~tu<j9@HBy97#SxuX13U=9DAGMmC$b{XA14vTOo}x_HwRc(^l>8~
z2cE7`ko!<hKjTm+rv@5A%5D^>f~NLmvhK@|HrUlRNmuO)HtL<PDaQM6OvjELai5Nj
z*tZZo9G?ex*b^=y7WI2bl&<YN!fWOR_t~yrRLdgk;En!nnzu1LFV;pMxDL5B;uA2H
z-PY@-k7R~DZW@J)?3S2rz?>#0G=rKWm03(qq0rwqo0_85Sl9$^2G>A3A*>CH3Zvi_
zXyw5Aj(BC&=oXr9!@N@RQQ5pEbVYKDtq-R#xiHg&vM^cIqmnar9PB61Glb+FAmgaY
zsHwVVbvhgVrp3hWGEUE=g}l)3Tub<8BwLq*>ULZhS?Bs)*h`>IPom{Nnlwr7xJOpi
zoQ>>sE>KV#PNhGRA?#dmIGdE*XEu{%6LAt(uoWzNkr@9~{MPX?jk@$g1~T!dI{e(i
zEVNKFKg<H{Z)22Zb7n6a9K5%<!k-RWT{lgRkLW)WMfstpXc{v|p!Yvh;1}ePw6%E7
zKr(1W23JJ*BF#@tvvO4n)na;ns)=P(6iuQj>m70*aC;fVMlDaCIJ5}RB;Dc@1bB($
zNc{E^M_Emfu=xHGB`ic+I}juyPc3tpbe3&fa9A1pqbHa0O3n_iv>?lQ9v;lV#bRX{
z0swa+FiTHL<OVg!S8CwA`@2AtNMG$-otrnrWfJ0hm}LX?p$-M;!>x#E@FqlK4c?5-
z4iIOtYgvgp9NPNKP`gOsH3KW0wtCfFTyrCz4gp(E+_39xV4CzA!xF8tep16WyaOfT
zCdy*NwurDZDfomu8X2c9)TYM~_Zs{yjmRmjNVJ-;5f_QDhN-oEu*jWzYz&FIL?TTw
z)K2kJs@YZGOR^~G`py~{jz{9MNAmJZ(((&3o23bvJ!|MFZ&UG0KV+1^81>&Jokd~y
z2!+^)hjvsUcO)T#5S%;W*jF8OK<yO*##bRW%giwE@}7d&2`SmDGRg-R@k68n(E}-Z
zCZXzeGD5;SuhZXr3R3}-h-t-{1a0epX-v7qH|!^0`><)!r*XgpQl?>lI>k7jO#L{m
zbix}tAQvyQv}_!ZYy1cwHQ!Dp;h`&Z!g-Ge0N=$SZB9viLqs+0l^qAn{bZ?6Gy_2H
zQc9XPX)2<c`Uz?HOKJGaY50qbf5arbbyBnRCE|bLf2?9<PPiuE8%IpnLlGIG3iXnk
z`dLIx+nC-7W)LsR^{B$%h?)MA3i2lz5JYA1KL=y+S4(_DUH-QU!tze0@O2w9EeMzR
z){M<Eg_3B6`t3gK)2DUVbg|obiy0Ql1Lx~DSZ4HNlqtFJ2_ewJ*)%Pacrgu>BO5G<
z9#O{b4I|+#oe$D~yxjsWL3?zZZxk!DO@yk&tvz5GR|~?>SuSqcl#+LJyyc0g+9zq5
z+|<pXqU|YAxs65D^xsHanST*8OY%7p?=Vzm8_an7HK?!MXW=MEKUyZ|_<^1II2-D%
zS}-q2W}6I(o_J8Mk{PZker5);IE9L1(Qi=GXZf6eIOC1*>>?EAnZ(UoKQc+D6C&4#
zCym17(g`w)V-hCX)#Vd9wd$qx$Hs^Cre))%omEZaim~t&nRx<@U5%YhjeBFV^yru*
z%(+RM=fN^np)ytJi5@7lB{=E+!+Xebit!rC>hk1e*71wXkm>c1X>RjzvTWs*^6vlX
zJ5nY*SVAXQ!du8Rc-eT5G=`yRm>lb!0(%E)q8AyoKol6E{J7o{v?)gQ_?0lt)76hm
z^vK1&jD&T|h-m|JO8MYNM;&XZa+E7OIYF)XGPAJ9(lyAWd^UD*#jGu8N_h@K@Ra<Y
z7hF_r;Ny+L&B+vW$rjCM?=&d5Xp#Jfr6ER<3JHK&Q(c7hHgq!6QVAhNbs<HV^i5Nc
z<0|P>s(luDr*jD`w9L{Icdah+du8=&V8Y&CCOM0BUEwI~8k+KU0QzG~F4&M=`5@M&
zb%rsoe(@TcdZSg<F?tr`Ok%-#VNN4Eb%eIH<!h$ttG1FUuP$paKgkCy#gJ78;#nVC
z_`cR>`_iw2^phayhHs4oB*tcm9s)?Jj+~+r5ueuNq=MB9zNELSDwC@Yha<ggYtUmC
zyC*hX^WOZTbxU$NmbYfHXy)69MOO8l%;9$xp#v8l4IHhr<_iK+<LDdhXmyBTzv^DM
z8~)w80bza4OA*m#m|Em~8>ubpWy;`1G!%&wUAV|rF0xc@{4P$5R*qC{c9yC88XRQZ
zoaIIM<u)$dOQ+Wz*Ry~69%ndsg_bMY2NeihO+>JW-$K{6ZGnG?aam|?cAy%$mGr&;
zj?az1*d=uS!oyTvKa3gWdGmk^IeX#R$TmL!gA##unhrrdf063}oh{mpUFwVUt1s}y
zdNCBgu0Ho*)gy1OFMW1<^x@Z|ZEsh4m-xF4qkHr`v(y{v=Mb8G{Oo&{>>oe0xhJN}
z@jM23ylee^$L8iH@B(yS2t$&`|0vCDn*K*cK9DVEp8)g6k645Mz1M>Cf5-(3{C`yB
z{}Tb|56~NN%J<?q&sCUfB9m=8YHkEsUrTDFd*e*PuQ8M$%C()~c!eCNJl7U*=}K0l
z{QCJo%0&#8o$nO0$QJTZv3S51xYh(uPh1izl1u?FpT$82X8m&pF^i4bDhtiSe7C#X
z<Mz6FmS?csf9tAuJ2&(8YIb(E?s1`8kstJjn<pC~PeVZDs3}Ua2t{%x8Z))I%AhGs
zvI>Qn0Lihy*`PDy$5yy%V^B72rx(uZhd@poYlfam0IL&5vaEWK+{l!AjfzuSlncO-
z*I)q8rPIRzM8gC=`AwjrpSIH^5RoQUrxvjcyERk*h}+6T@kA#MU@&gVm_Q+97%|h+
zoiznduI{J}w22kai>!Wq0F|pVZ_3&X37{Zk`_&vpuh+(6WzrNj!7jIvsW)}RLxC^H
zlL?mL%B(#Vw8DIDzA$9^`+HbnYuv^8cN8a)oE2>76NYbzAO=pHq=}8myeFElO}yBn
zmJ1gbOHn*gg?w=#Fn~ZbgRj5=F)r-zIx*3cX`!A}Z+V^&zY0G_0&>XvnyL9E*1o<~
z8m}^`!b*q=q2|W++Rnz|+VULU_RQA$TB6@QM0!TKkf@g#i(uJhTsA@J3MvjPNVEi%
zlk`ZUVk25<p^>$NR|^+G0>Z}Upi#**;V7+6e;crU!G2z(9TT)i%4`$-$q5N5o#e4r
zkyubkUu&ZaN?#jzB9G997ZL>Gs}&D-miW(?tz-NT4-R6e4X+5P(?aGhDoza8VKFm`
zuGyu%YmlBeU21MEKR=wyXIZO44S`NLv9D>!UhOXDG!i8*#syAzQH;h=FA7{)PpaBf
z;!%>Dx2fxR2y<!b1p*a5YA{J6`CiI%i@SrZgL}|Ku{!R&Nw?@{Oli+p1<#(VJY1Y!
z4!1C8jRX8+iw8JfhMF_2uY+EEOh^&3i24S`!VoBeTrTPm8LIiT^6JJDSov7sm`#V*
zs$&lD55%)XtWJGY_IRonE5-Z8H;0!3ac(3*01f_n71FX-WT2q}S$NzAPF&<p9g5rK
z)J_b@CJ9;L<}6871St{z_i^p-FGH<UJKSr;Fiwcb?A{p(MSx@klGlm7`A&~iORnks
znlS&4aXfFV%c&Wv7fmk9W)ZWyW0XJ<<3Qm7M%K&{=U|YNx~>NnbvAO;@RJr9mO=5@
zh;iM`ZFwv{JB8>-t!Z&He&K-lJWg(r3sW7UE6#r5<ir+{M!-Rd%qW&}b4rP{acMjR
z*`ZM*6F>6Vnk2MN&>YV72^WsOv7U6+@X47a8ACxU<q7wEs1irJeiRd@80j-k5sxa!
zypTsN*m#J^UWzL`#m3;HMhH5btB8yxZ9;<vYZ?v)7=?A9?ipQE1(Q5g0~>M8G*+Kn
zC^NBn0h^o_r!p!7lKnR>DMR8_g&s=N!ZtV>!6gqxd6TKcrYNjq^vt*#Wf5s+BdmeO
zM72aGCQ^FzVFVKuOBH#0%t?2g5<6Lh6wiBRTtQe2@lupW)R0HHPg6u4Er>38li(DK
z;=m+~yJQPn)BGG9UR(Zm7bQm2<>k3!eI70PFyx-lswKdaO#wt65rI9TnVv=msct+W
z5~IS+q0gQ!J&F@2&P>qvH|T)pp9*gYu|z?<nAkJB#xtZr4er4*U#IPuR&D%B0*yE(
z8$NQHoe;;D4y}^U3H`-d#D$ZXd1Um}=3xDrO*4`uy%6V}KHaRQpaNSf5vatJm#Gss
zm)KaWsFgNJy1dL-IiAu`$#iLP(k+_RH@{3h5)P4Q0tEQP8W0o73g5`+TEGQsqQ03y
zoV4UFxJbVb$D9kxVxS|JDBJBS%qz*?ydzN&S&Z{;v(aeP@7K<|opU#<$Xi~(BxZ~g
z2!$X4JFnW7#Qx66l^97r3d_SFDRtDda!wbJ$bdC^d}@qP-uN9kfZT!u)$M>w^_f9z
zJR^8vzM!M}oBcpfHX2uhG3~_O2vzUF|Hy)3pH8n_c2(PKS!3ZsXZVy>FK*=<z3>;K
z{E1%SQa5R(ovhY@+P`*kaBv17E*GUcdeCOZZ?v+R{V0;I*1<QEg}%a=C3BgsHKk|)
zdR^pl09`td(cfa5_(F+Ry5xiVK6C;aQ%}i*bGh1?k6^~T`_lje-aeR@o$E(7`x=BU
z``PgZMxEWkh5^=}Um?;V(h<^v$=!PeQJ^>%KuR0{5{I=T1cLP+&`b5Lx_u(PihTsG
zB4epw%zagyo8j#9UNaByt{S-`j=%;$(F?fDOLGVPpBeu_4{-RK&_x_Tm^s`KSBbIM
z5EVdg$Y`r{K)Y(dDQ^Z<F7KCfz~*SiIe3<c4)R|<nD`2;MMtp19-Sp;ID+{-R5~{_
z51S6im#PlM;Q9d<oSQLSwjOjuOHbULx`Aq-3H)t8;=(carmDhFH;@SS9Vr=+wKID{
zGGnWFU-Hg?BK-A%DfykP$FL%N6&oti<q^7`nHw&gMPCJ)>{(*r^#`6<#pF>doYDTs
z4IMgR39P}1gCEos#jAZd6L}`N2e|_P>WRhcI&s_e9T&;-y?DQD{(AFCD@l4J{A_xT
zXjAFVXi|=4nv@D;<|?DSAeo0gyLi80$Dvp0=u&jZ>A^|4%h=rrZF;()E2Y@_zy#YL
zt&DI2irbaZy@%ZW>6+{bk4W^S8C1k;LpT1IyJ&db`rlJzU6kuwYy`<CH+$tTcZnA-
z9;)FXVG@M2IlJ_n+!SpqW32@ji^YyR6)y9`@>=-BY|?rD#Nq5X-3u%HmEvY-mHbBd
z;-zefME)}9(c<8(821ZDI0Ug(NJy{TBRF!3V5<yb0n*DzZhxtG_$Wz4^mt(L&hQSu
z#>@N&<r<*}#VItR-Yh}Jh%YHMOLg?}Kf!;xQSWL?odSLx54OIHc|2Pq?RwLfVci*L
zgy#c;`X-S;-A!Ea&}jCQ4o-{sgc95Fi{-)XEYh$19YV5f4{(Q_gW>#>jiMAfTz`ig
z?pfjZy*?o{=l%9!Ds({w%&X`Ox%32ETzI!XAo@R)AQrjM%XP?Y17cmX`|`e?K<o<$
zkDrPZq<hc$<`?`?KfP!E*_r$QS=f~nl=(W>#oXPj{I>dn{fK41W|j!s9uemmjn4_o
z{^_Uv!}^q<`z&7S+g#`i_w%9ue6Re%ko~HC<o$I}9vw?{?kr-4yL>h)LMkX`__Bzp
z(%JNvO|FW8nh(4)=tM0)aH71Rp9&z6=zwNWtW=$<sw4&&QG~i9r0Dtq^TUzW(-H9%
z$U!w2%#?aRFAGd&!tML<a7RWrxI5t7gN$=W(UI-R2KoaaMu!^QJqGqd<V&qqmqFEm
z)?f`pZrFhfc!E(n4l_nYTNRLLmL8+l*GI?%mcj1*$fGPgn)>kP7EvW=Hx`^9nn;AL
z5Sx-3VR8P$0!^T5NWLXGy4jKwNbOE<bl?dUx7L~ysM4LLk3v8GLY3UUax_yb0PRI-
zJMBY1-6?I}<u9G#a-H=eo#|7W#qU1TE}I!I&3?MZzDsOY_D&qz#EQ9=d7H+Bt9zZi
z^jr?4MjbF#jffA;31tE6hJVo_drM*>2vy8R$&zDaG==`xtW?+E%(NVLY7ni9L9yM0
zM1Y!2@Ww*VJY|9T&`_<NU)nY&J##NT!$ZP;`2e&)X$C+y(_DGR#hI))RcgPvGskyj
zJ%L-lyL=le%>>C=Pnf`t;hK*S?NoQZeEhK*RF&qQ?^E4bPvX|^vX$BfmD+|WSx@Az
zO~Z5!gEdy}e1<q<HIyahmF~>t`ZL~18@(j#vZ+~a8rCb)T;$BM@)^hNhhE-z%?MJ#
zsm72GIcz&I16I(i8_WRx!5W}y(L~P@U&R|BTj8WMj)U-U^i+5Rla8gQEXLSRk=1k$
zgXYcfU{)i3Ag0;%Sy*yLJ7WT*HHoG<!Nc<OgSq1oH6h#O;PuUg4akxnn92uqp6aJb
z4_x%zvz_YaW&r)<1Hw%8caHsHL4O!6&}q?$gCw2zL^j`(WkT!&v3r$28+8yy>w|CK
z^VmZMU<-urhK}9&IO6m%Qkc``?y#P{pz+D80GLq!!TifAE0J&E7qyE{vQwUaR=3{F
zvh@*b;iu)}o0mw=)I0wUj$to{)oe2a*1U>mHg%LNUs#sx1XX(65U>>$$G3V_bZots
z!zr$_oaH5eUT$(#P<F3r=Z}x<33ivbDyXFjwyGU0x6G-ENugLy_9`0RrKRBttH7)x
zK9e=YB%5QrlX4?#YpmL(k}Q(?My)3`x+?785o$vCezdGKLJ@|4P;6OwECBej!^;%!
z++Yd-Xx$K}5o9lTH?Z81@E=^<0plK7FZ|pd<M*`JH@M9oUT|!;pZ67^C%O-PsxzPO
zcclBAYKs_mOJ`X$`Ti2GBApY$H)5jgU2Kze$z8T7mLy2)0B_@zb-Il(qRpc6`Zmd~
zC1xVSk)RjBUsU$9z26FL@Zr&i7`Z;hY&c!kouLrkVChVgAXM)wGDpJX6ZX^ibFM$h
zE;bAj?QbY#L|RU&G$WK=<{FkJMb941+@s9oMVh^?H13d~uWoUII;F?~0`cq#4m$NJ
zu)4%$y>0aHbk~tbQhbv8!{CxD+efWzYe@0N2!Zd^HDNL(_%&MXQfOz|Z%ACMI{&vR
zTpB7su=L{J(#}aY+TQJi_CKN7dj_-vFREg<jMAfi^eD&+bVfRj`$FBjf!IkhD4I|t
z^{BlB6*$RM6|TyZ0nJnxPw~o-_LTFC>gj%CGYk!?bmLT&P}r394yjDioHHW1AbXg!
zD=`8svztpi9&em+a1N9r(W3NiD?+^_SN!^Og?RE!17=bQgdR&7Wv0~_EN)<aB!@fV
zVy?3jaqKZE1))JuAE)B%v3UU_pXf^-bH|0YB^PLH+o4FN1N2iU5dM`S6}tQblK57)
ztjBy|R)H_`c)m`L8dJ-G8<aBpXXmrst7LQ^Zc!g;c$W-=S0?<$6hg(<(a$GP=RjIJ
zCBxnyOShAS2K4D$DG*OSz&VVHIase<kH9V+24EIjMVJt!8pbE1bOpcpEK8`E#}d+7
znaN(Q(SBM<VaOb2DJq}L54KX+s8lx$byYca0+pwFw56*m6pbx04M!0rnJS*sX8f5F
zn_jh5_!1jbITa4k$R_o(EHfa*3=R9ty-?zxs<o3F^f#TB@$$O4HVi@6nvr-pFU@S5
z!c3can#8st7TzrCSew~UPjo-HxNMK?>yz4$$lf$Ot4^=_1{;E;tsd>EO9}^Hl15f@
zlh|CrthA-i>`a>+*$V};REs?v-UkK?4ege!4F7{)1i|h;GF{S>A6Y4H8`BwxL)j=N
zmn<d%kY9Q5w%9JC4gNgJYd<^&80AjT)o6m=*en&LGT{+t<SFnvfgB%@zY;P1p!<@x
zNbznl&arkduzFlSJ~mA4nK+|$^qb#OaJvIV*w@6bIX_mUg8s=y4c<)?N#4c5!eF|4
zp!KB|IrhMeD}S{APdmBDQSacG>fac6C~P-x)UK>D*UgqQn!ls){@_jAf&adKIFTT<
za}RkJ>;@fJ?x`?}Se%Erhp?_TQV}f4815lggp!l+k*5P5qH^5#579x-2)-1pNhI!X
zO-b-=YOv!%nmc?<W~*LMgGY*83XKS{9|c!dXKP2?@VSP8NvueoC^FN62)}6Jfm?{+
zd5{Hv9*9!B35xKz^HU2ESCl)Go9+;D5NysN{`|mC$<!19_q{D?N}8lfU95;vJui1A
zOl?>7f=qomH1`ac3@?NgkT}L&gWdLe17bjkzp;YMM|&KM6>KJd{rBaV5(s4rIOHEc
zocaH6br-S!x4O$WzwN)yLH^c)2H=^YfA!(<uFsIkizIQ#Z-$_3kY#g7%gV~jl*+4W
zNi8H5lh^8StV?&9vEsU0_z*#nP#HuVh$Ew;MFpwU$;%w8bn*)+3k!pzqcIABD*}C+
zlh-G1Y`fM=*!ujMA7);5zJ9;_zI-R}dARWbVN<Pz<?c|1gVeVikVomIFnIN9hDF#q
zI7)YrdNn7ocN>TlJvg*Gn7TIZ5QX!I;`Z&3g;T~HWy%X5I@sJ+z#C}S<J%%NxJAc$
zIX?8`Bii3&P&=TwyT`w~?hbktW(L-W0~=uD_mnXufEgJ+dT_fgMn85j3H|nh5Czd(
z6rnaKM}VZzg6@UHqxaN}dz1&Oir^=6AyA6ZPjeCbr^c_LSb69}F2=8=SbpUDUO}WK
zA*3L&N<9;VN*px%0}1|WuwmY4dCB}$RUsQccO12#QCD2yAS7|Zg9r8l7PxR=tOo+e
zl}vKXqcdPu$(XIpGFttX>uX6(S6A%Fk6OTeVT=^Q4b{6yNI_*PR(X;3GLz!=3OE~<
zaqpwQrN|^Vk1af{M2881)Wn08*f1(4jz~Y@!_ewSr#Y8aW^%IGn22>64VP0AF5q*@
zEVsj~bXmfFt#k&1jNmTh3#T5_<7>3MX2}mI-TqS+A9R4Kdu20vQ)V7wzuS#bEquVg
zZyF|Gukl(I9{Hs}1q|o!@%3})_wPMe<aFYdEuobkU(MI;DQtK>vEJpZh_U`xfRhH)
zeJ+fw56VfvRB4ftx;CwwMJ8vfv4sJbgyOZaE4@}5G`ekA;DOam!Ci8XgxBFBN7@JY
zNH45aYa`v$_&6fd3&iu_%zLxBZzgJNs$ajeiNiPVcc&WpYr$UM0&SX&c{I6Le)UMd
z;_r7%M7trN7#wL$g30E$6qwoU82$9}oca(k8%%nP85}4l%L>@b3#(mQB)#agcC7E3
zs0RaF^)n);t+Sjp*EH+M4&HK;aHWML;ZJ9|;DjI8-x4^Oh&@2!jNpNC`+N*lrHclF
z7SdV`Y{bB?cg1B+LHOx16<K?CG_jMLBst2|Qj*q3fSkP_s6I1~0l~&#ZTK@;b7J>)
z4&lYL;?goJ+}7bzn9MT4%}%gJLKbgVGIWwwPouH_2E{Zj)~vrROz&GPiZHZ|{S_iI
zPpWNg+=KR9-j_hcG@NIfhKLgNpt0wZx&8rloa}>Mmm<;UoHp~f_1TN+I-z$`VJee3
z7aW!Q>4dBev6Y%9ZV~N<xO4e_#Ku-NOO{^y$!u`MLDNZ3uphQ3Sf>arq{dg?*pkB4
zbfKZdd@Ey+q>{QyMM+MIXkRhJ*CBl(=~$Pi6_A#S%gSuVl8sshu@ssPOi$r{%)l0}
zX&65j=*q$9^Cvf3;6L%pCwiHD)ME>*axH3~M_oM$+@35Lwf;?$^twlsyi{Xpoh7`=
zf7rBulWtm?VCt%qNnI>4L(?{XU6=QZY<P^GKQ@gVg%R^4*$GD>y%F7F(vwnwye1pF
zE@Ty|n)Q&F>@_?_1L)K{sgm*&#B2@sY<^Ad1UsRjW2U-FxHe1HtU!kmv(;^Rhq&(7
zvUk3!Zo3{6Kz|hBD&-DhHt9~W&>Yd*>;v{IZ9blr{6lio|4y(DA42_!!J%UV_t)IZ
zbv=O+n!2PCU|G0TXA4seH;d(k^Db>zo*CI}B1N8?<v2-nPoFxGOqIa<O%Bzee>GfW
z=d%bleL|Wc^IkfwG604=i&PaET~>``(J5m54AoGkQmKrE26Ojhk}aM_%Q%bikVKD8
z6!r4?7o(B#mYRN|&@Wk~K58a<a#eDAB)Ze7mIMswE1JwIr@R=}5N@84f4BYI#-8ah
z2zMLw0*{SuXPzQMt{)mjBO!ku8KIzPuP}VnZW2EPwpAg51K|@3iKAsg*fZNGLsTs`
zES<}8M+fW%K|cm0=FC+=BNe0uD8!A@D#B=$almDZP&*~cv?0lK2I&Xck{JsrZk+56
z?ki|3p2Q?1gNdIZrzn<7Ospc)P>8BDy|L>%)wdo}wYxPKRQ=qv@)<K+BS$2Uj;1I@
zTC1+ERX^{dDMh8D&$csL5LEAvT(|h_NYa*Z1$5|Y6qE(a%bHWl)r<IYnS(DYOJpOO
zUgdNXl1~f#>?m)5JnfIqw^zVNM{_!vGTNvLQsI1mDZ$ra25yX13Wnx^Xq%>>27VLy
z1tFRoz9C6V{|;YMwavM)uC@I{B_nk1I{)g9O*-T77V{{_i!cu2LMG2hzs5|V9gBK<
zk|#Dq3F;*IpPFraV@a8q-WDV>RnhfmUSy53$GJ%4-I`l>=%L9mdVDl>iM7cgvgQk4
zWhfpvGfk3Q!=uwTKvYJ~htT^`3Y0ea%w7t&g+;3y?t!}8z>Wh14!Rt3t6IuVk9Mn5
zFa9w#k+yuT**0BsAJJrzS1r$S5)yWd_BMr7EQGCag3?rJWJ>7cWF_tqzY?LwD~+fq
zd({$X*#+8SO9=!WA{mD?%g#4V(ys&7A9FRUyAfXjTYs5NcSi-A8UiK51-$q-JX1_y
z8<4YK&ru|ygI`_E8G2I*g%!TAoabr;e@Y6*3U|SJJ%!8JhmN1zK^*N%q#P7Xu*dg#
zy4G<Q$;zXgD;(j=Af21zCQ7w5LpbFVtE3Y7VS!8TT`@Yv5`XogHKj6vIMR~gi7?;v
zi)>j1R<IEB$VaHlQTHCl2ZPC=ITxiIVqm;cL^I@=HE7vaWU$5siEa4MwQy6|wObLu
z+8L2tgSNE*&{!-rv0A*CJ5RTgguV(w1?Ea_SsQub|H=q|A<0}6Q}KMa;yL0D-d|hE
zoK^|<Pm8I>4l!0zAuj2hNRE{op0R39M?Eoc_=>q^)2>l_j1=!r_|1%XSATWOujV;&
zeBE-I_2ry5y>_l#V3&4ToGF>L7k@ycL}Hp4<GGA6J7jxaR#3X*dgw)o#~|{}9I{?<
z%-z4cSPs^&bLX9U`Ut02@r7APwMMPlpF*Ko-(ycFT-X|rYRtF@{uo<MxZHjjBIc{w
z;SY<llaBjK;^GA@{tD{izaGRgCxqO$6Z?Wi#S5Qe1GmlDy>4ZHG|n?DIEi2)u>V5?
z>*Atb^P%ki5?Rezh%rMczi$)@!`w*sH*b`<vYK{ibmn2b;{kfgzWUN0d(H5!cE#$t
z)lLIc*E*UjD=d#uoC_SIXKwJuz}$Av>GC00Z*(I@{VerVr#9t)3O@6*LttKPfZNkl
z5f^b34o1b!@0vn7$|zLCUzKLwc(OXq+vuI}--yrg*dmUoE<4CXUtsN}9KJ?zz!+zu
zq&8KFEt?X9Mj|NX19D%i-dO>_RT<g40&BApOh8}+QMI#flP9e!+$9?m#ztw}o-@SA
zcgQ{a@69N~tDEHZjQ=T%H30-tz+^V-ev|M&!Keo~n;I5l62Y4UXk<lLTNZgKL(~&)
zc;xr-dc_DpRa5K-|C-I8eB;+j)jygN`wD2Ljb`z=WwQ!bCcIE*pIp1Y*r)$SAsMUz
zneO8Y0`cwE#o#nJ@J5|EB#U+zBgYHL6Dl!M)yhTH$1*aMVBx9mE`N6jDK5M_6@qjv
z|Db0NEV7gvbcVjG1R-yk4pO!@PRYV5^(1s??eBoX#KlU-QeHVw(72)+aKn<<PA1D_
z91O_Px-?($Cb#iLxv*ki`7?nb+Mbcrdd8E?F!v7cHOqQrrJxA0O$2Q`9J3q5y%Z(x
z3WH;n3*NgP;;=G9yvH~I33vPZPk@Ia{4Garw>IQ#+Yg6ddmIq<lK6H_Kf2|Aaeg=D
z;NFE7eMY9kUp47q7)}idIb=PmmAhb#GiY6(P}_Hd0X#z}2;j^OMX_7O0J2KSNMkc&
z^j?lmNot)rD_}9lFlDJ^4=5pL&4xW!liIC0rh%Cv!GrEZOHv4J%o6E7s`mvmYTWFH
zjA#=E=_EeMSbf_m{w7HH#O6Rx=MGao0$@R6D0z`R9^WbJ<b1T;He$8JW>b-nchmiV
zHM4rzp;|-Qd)T*a_*QC_B0rZry+Kt_KK*R;)V!%$lW<C(pD9_tRh9Nyzm-(MMU&Td
zM8SpAeGhhQp<vbA{*MA+KEbwYxD3vaW^yRqNgpMf*;Ib!Bx-^Z!QADywjIWq&0{hS
zGy_|tY@2f7_q_GR9B#+hPtFjQ`d6NO9GZ;cU_1SR*n8Nu!8wpT!lUwd|HwCFz7j#*
z*RA=y!{M=4HKIJt{dh|cuDfrMB!7dU*v^cvYzFzAum3I^QMq@|;0*WU#{%8|Eyv;e
zf6j6Kv$O04KpjK>Cy}PDYXC5!8bzYY7}kO?i34ls1V}7F{&K_-g>CA=AZa?1qHU1Q
zPDpwr`@KLxZYAxoA+nhOW|G8F>XE(k;!7!i`z|1|gIinjWE~nR|MrCVI~RZEeTUOw
zC)<nkJ<@`}7f&cxNMNgDRs2AnfzHGU?!{^MbL++2{`W}ep=ZE|E-a9vCwGJwttT0>
zC)#jFKLFJeG5V#e;K27|L>g0J|8wha04(8f@P~JnE@kH}G3Lph5qLcC0WMk@!$Lcz
zk!$Qg86&>&6)76A*)wNEQY*)zAin7pD>}aUH6%#!{y}y6c@ai{RA~VR%6dj;2@@Lb
zd|#@)47MUqNh+ER{P%nX2D%cCN#L(O3}mW{RfwL(f*WXYH;3_Z=o+h+P)M84{RY8`
zWd!j-?+!)|rR>4YN&WdrHqs~C^~Ig0^5w;aot|<R3rUkHcaVMLj2*Nzpm#hc)}pf|
zc8Ji;58^9iD*N4A{=M4R^T1zrK17pTZ`&aL<JDs%Viu#Gq6=L@-Qtx-EG1?ZpAalu
zHcGf~kO)?v+d5=>@RJzOfmZN=N<zCt3979nlKtywH|0A;&q7j{G4Rh;iTFFcL{BMg
z;l4Y+;?rBsx6fQJ-hUq1TBtK#D!_*FhlmrLm)`lwJG6QG=`SZuy!Z0qH?rfcGqZ^G
zFCKeD-ofM{IhO8#r^#D#>10|bH+lso)QOAi{K_tChiLirWuC7XEivTeLG_9^!}Qy*
zKp?n~BerO<+U66VZR2v4W-)cbIxxQ$oZY~YMM%pkaWQj+dt_V*K3jfYODf$+=&lAU
z_vd9bU$Rbf2Z&6NP=z6G+3_Aza&lQfCP9RA305Fgtjai*juP%t#&B1qmMa(y_@tb|
z{n?dwXU*h*l+dcXlApTf`o<pc_BQHVl=-)Ayyeb-H}<;GI;o?4nhe`+no&MS38bZ=
z63}add%SpM%SGat)PEc|(z-SgSRho-UptDdPkJUaZYUTE=ltyBR^J~KDM$4h)SrvW
z()ihHrnM@fob~KJqd0(#ZABTb80s2nE{^7C7-SU~R;3@SO0>7OOtnWDL(95bSLJyI
zG1!`yKn+J3FGWoi>`_MF&`<0Wt!ds>%JQ1s`s-Ih!rw#ff=6<NTlr+MI<{H=riK@i
zOutM%fSWr8m_aIeI_;s4rW9{RO)?IpFGn^&KS@L`ZzlZeGzWZWN{Gs^>O4uRmw=;J
z2}r&%#VW_;BvLMPVhA9+PB$#%KR*cetd&cMrXY}SFhp0ALUDHYt4Ov;HSz2eTERgB
zGtdrEt20pW)-7w$uqu^-@e&^mriV49ZHOfwW7_t<#{mczr@6U>n;_F5nt`(}TAN^B
zR%->f(s2AL4yvzw<>^wd8M8+Jy;fliu0it}7UfVRI?~=CKhUmzB^n=fyVva+oMG!#
zWXy~Em!P+P50b_&Vw=V<gs^&TgkI1a?L%xt@s1T;@qij!P;*~AKdSr=7QOv|1HEs!
z9-Kpto>A=sqR*^ixAB!fTCm}jG+MComG$4?LH);HP7Hs|yKhADW+p@=>4$elDC8=v
z9xu1Z)t5Q?*RVw3r0t|R_*c;a{kx38UYE4Sp(~>-L6rW4j>4}{{5(q6fQv3aZh1ql
zH7s1LKP1xR;9q4SbH>%mK*Ei*rY*6vr3r>HYETvEMKlBm_Ix^7E72v0@W;egv!Rtw
zjRrLZ#?x(*JC!lU(8K1WC~v{tDU170VL$Z8u#Z-K-}ec=Qd@)mipg_(o*NmHsukHq
zpGuCk(^z*Ed8uPtDS^o<TX?$JDwXp0_#PB21d3Lgxe#1dhvpHs?%cv`k^SJp;aZBt
zKw|<7K~KBj0hX9D#o`FdAl;AI1a!f!fn!8#<h~v?Do+WG)Z{Kr+nZvMq07ZZ#F62H
z`n{3-N9=sC91-l~f!E`nN>g`H{n06L^W5$9LzYDB-ZvF{q)em1uVNcv^XO6*b9#@!
zb!_uR+COY=VIfT}GB3f?&7JRG<ty#do2fZ%<dKG*6<RM=cZ9bmijG|{YI>$$69o<%
zxoCO?NzW*HnMU0$F%tM&S`ht_+<Lvr)p*qnSr?}^mDl}lkA+F`JF62f5Py{hB(F!7
zig*%w*To$4A0^B<%{B7H6`rtiEQqS`EfQpJ7ZqfeXUHsw(@lvpt3^Pvlw(Lz5^YNi
z*bxFKq=N^t;emFKCj}Of=zQRMG6`(`V0t9N79;5JO7^V<=pQEjxOJR+r!qrF!Qlmb
z<ANfx!&VUZ1Fc!i&e;5+RwYAhO<Qcx<wo^*x_^vXS;F|LQ>&$llgq3cS;7F-sp1?O
zVCiFQQEoQy+glfsL^YH4$<B3!c!n$ZOYNxq5P|9t5z)fm5CO-@pq8bOBbkK`kU35y
zoLF>P(~u|^D#txOHQIcgMHF<3^a>=-$sex3(!qWgS-{_%HlZ3eWMl|2=v`R2k?ivc
ze=SGNc;mm^XfQ3^bA?iSSd*2?bQzkGGgLA+qV}_usF-=KWhXjR>Y645<U=Sjpd76M
ze@~QOdwwvMC^Jlt5nQqNWCKC<1!9i5WQw_&G!x$zaFg(Otl<!vtx@oJwr5L=Gn@_v
z7ul+&`J*ydYP1!dK{1jPx0a?*Ed-WB`Vw*m0M1m|Co%#Eol(&7bwP-q!?MZ3q)bAD
z{?4t6ICz_uwa&QTxCWy312qLvp7nL=CiK}-lZ@8({o&AZnv7ejyyo`8t^>Gg3M)pj
z@7?*LZHV4GG!>4HJ3eP~O6;2=xvi|6pzP7na;EGiV&+f|6PQjm`+T@409eDW;|-3<
z95vpMEs3%pfy=0p5quMYY6#i^1=x9}<8Z++EVie-X>KhBGeK>?o=^XFSp_}Ik52T_
zgo!byv+V22*=EUSoeGJC3JF%F-;)G?913wdq13nYE&x79dt6n_cudOp37(LwO8UPL
zv9KlC5i%4~3&WGux?}atA%xpq!USKi?ziCVH~t<_4hbg>4SR&RhwI9fnPZjZm|BB{
zFUXOb4<t@x3u9+qRP1}vk?FFxwHb)qLzNvOc>7y9FA{AZwM@oXai8ZHS0hB<+BX_T
zi$B-#T5CsRme!6$!}rLK>Qs#CsBIMd-Z{cw7CO}UE3y@}xiHr@veJA_kQAOwDsQoA
zTYc<fH_OrH++El`2$V3`!qwD$iqCv}utYz|zDq2*URvi0v#FVUDbJ4`$(DYbWjp>(
znNneGQxP|57$+3gMGKSb^m23Wk$V6%E!Qc{WuH+K3lO>XlJLi^_aEVOg!n70ef?;K
zofD!Am>&DfNF!dJ@CMnV17$ckbNdVv#EA99U=g&dxD!Qc-9B@sD)G%q2Nz9l?PU4k
zoMh4Itt{`AX#ltz+*}Lg2c{Hex>B5lidb>$2c%6UqPE4x%~+Pk;Qn2znVsO{$1RdC
z$zv}0>YPb8PW0R3;V&*``f`(}X3KI5%+fUt@0~!#B6}SHgD}RaQ(E#+z7Lo$@m$s~
z?f(E#_}7s=YkqTOUcS{*{uhYi|7$o>(b3h)!QSP+mgh%wyndmXrTH^zQs({?dBuT(
z5{pOxh1y3!5vmKI2O)tbia~H+5Vt&c9TVUJ13?7hC?O;EAcCR0AvHo56!iCVv3B#!
zUd^^%-dx3X9bPea-|$q=Ui4_{SE_0Hqx0aqeVx_!7VkXy-1_V)e-<;w=Ys{%@ZE;c
zy$Uk)x&~qPIukht=V2?14@~oo57I%JpBl%Z-v1E}&X^+g(&OqJKNYA|>Nq<d-dUr>
zg!Qa(Aiyvdq(l$OW=IPB?BocD4*c*#UWIUC&dA1evV+1D?c|QJ8PU_5p4r#K9T11+
zWZd77VvulZPO&l5OL1u?A(TACf{b$;<a&+5P2J*;Gpsn+@MNgU;R2!LaY9jWA1wBy
zev#idrg>3!Q9caO=ZcjqcX0_rbw4!I%RUd`=ZZGWyYA;!s0gjkc++FB?#vh)0WdI}
z4$h3A>(Pyqrn%|qj*pNqV7MsHjil<)?H2_`ORV@(Pw9-d9>*N0!(G5&{7#C#b#!9K
zTy?zDXV7qRss+tPau%`Xx`-z_ntOO#9<f6<WI~cq+6oN7$vS)q8KPkyTV;pTrPU1@
z!06Li$AFOtlAm8rby;?F8DGVK4!h{2)iX9$7Og3N``J4V7c#xjWCo?}5@dj0sF=%G
zz!25OQCTRVn4Iqoa~U*4@WrAyK4$lum9}YAG6=u9SfEc6o><L8Hxwl|P2CEiG7qXT
zS3_q7RUobm!R_zgpUCWJz}M62L~@=G)Wu&4a?RPFRg@+C!5|CDEft9hNnQg=hoc<J
zfd*Ltx!X`Cj8yb`3)+<2;yAm@1PjafP?CIs=IR!4f2J_qlbZnqeYX(H)t$EFRwbFT
zjfMP|{Dn;M+%}wS)lS#=QY|uL-|T^-uq7!rG%YDouUhL0@mx%pHj)~uRO@af_;7xD
zYx(%CB>b2fqjI=&6)+K@I??oh=ZVI=$3ML&JhubeEK7(*0@rm&eXHF?#o$9C4^di2
zFylfvR^CYX!Du*-wELzH<C7fz$amBpc7bXpqrM$$IR6u|OEdVsCvyn0N$fa|^C0}S
zpg#^)LfI^KXarT93P=6yP|d2S<iwoVY1nrOF}8#zQA{lCOI8@w8ZpQ;UHfoZT=V@K
zLXN(_@)VzZtOQ<>My0Un*nh7UNWg95d*X}SvgZNO^W5^h6(4k9)GrD;v;GiUwi!y|
zr}`-tlqSIe!F8knw++X?#Y-pZpQub>%#2}MQc{W5O0yfdaON@N0?Je0-DH#g4&DC)
zfv~xZ_(M)t0(N5aP+jA|mB(PVZDjTGxRA;p1WHZ+%&FGGWWnh!7wnZ&ydDdU-@Ksh
zPsbYVo7eBE`m(4)GDkp+5+4c{x~A%qbz0pL3S{T3D0J&RK~S9N8d|vFnrs5$M@WKv
zl#(KV+Ju8+<IAi;m#*BUY876=Pjer$OMrtT;Yf<nkgN<X(;L%^mjL{exgpJXzyZ*M
zAlBAwkhS+R(O;A4um)!!rd6|2V!?~G%mnbp)g9sIsobD}N>Lb0Z5X(TZpo^ET*_{r
zKin$YmUo<|Y__&STI2FON_`6abx)-z?Y($;@%*h4vs#)V+Up+CUc&f#2~rtBlzIFj
zt6a%hUuKVUG9*1Wd~E5%pn%P?a#T3Hh;%*sggT#^^in>-NlQKVp3Cy?J=!9<H~i4(
zTHcZ7ZnHr#J;ih3<DFH=0b7;kbUuE%yh|rtR4e^!&1?2bU`XLpR+X$wpD;INw3MdG
zrCy4;^Lmp<b=tZJlWzvO8UqR&chpHaR4IM7ayHMY6rSW6ZOE32C(vGW4QMBvR<m1C
z_r&^}n-iZZc|GP#r=Y9{l==^+|5O1Gmx7;`p{AVr#tPH<@=J9~_c1R)CqkzJCEg)A
zyG}Km)Knt{VJFXg1365#s%kVIH+=<N95HPGr}+b#&fh<4f^h`CLfids*!{w>EtG`l
z%*I4CLb66vBV60hRZ*!xJ0$gfNZ0ASq&hLkx?<ODee0wsT=ehv#4+_E&*e)sJ%PVy
z$Pf0q1*EXKJFuSvQp~mg{u$fh)6vsD*OY}eXl;(Brp20taZ)wl-zYhv+NwCRX1kNx
zDg!09iu&o1+`dKY+xO*5>J-%FATy2Q^H0J&Oq`OdAlRU*+PSc(PGnb%w?`Xcc4FGO
zfZs<C5x^aWHqm=PZ%w@jsexe9ft35y;CbH*U~6+Tpj&{rY(~ciB230XSs1*74O&O7
zK+XM#pUn0I$3?l4@h;b3nDs6XWUC5JcN9HG{oQCE1h&Fwt6qbd=rCR!_so(5xgD|t
z-FF1ww<FsyJK;Wfo_#@xd%*|*se#{)27$GF_e?j+KxBa0z?hUQAO`{n4Nw^<2U>yW
z8%-1R`@#rBze98J74&xlRYMAM{dCZt-Y<hUG=?3MgXZ=hV0r@}(E*7zj84~Pb-wx0
zqIx|+;phN#sWH+mKx{M?revq(=>ZnH<A3AqouV{}qAlID%}Q3<wr$(CQEA(@ZJU+0
z?MnP<+rD|u>3+C9`kv9ZpJI=Ah?iI~Vz0U8{$^~-C*e=Jq9aeg)o+Cx7w@1Lo(cdZ
zN0C4<URQ3BJGVvdT0tL|omKA6#FsCs;U7<@l>mFf<TBr|Xa>EfMs5LZtvvOp@1uM_
zSLa77R3m4;i}^#5$|ki=zr6LuBJdjJt@f#NC@uZ^h3>Ur0k==%3p;T)bFY)WMYgjI
zn><|i&?i_*8){tlR97a-+7*NkVB3Sv4iTbcXSpuU4?Gh^h6N;BYuL~+1=M8H3iqXe
zV<i9QUllcss;nOY6QqB+O1|`<cZ`u>l6s2>&>)u{am7d2(Y7R#&ZHOC0WRZ7sr{99
zs0p>XHz7wCCRw_2tIp8>A|$(V>erX_08!ElhiO$!=5p~Eb!MN;B~7k|KKqfXE?1#q
z!GR{7ffo6!CyzBNGYhwqExRQvt0Z?*YSH2rGJ}z5#Sd~9f(|bOEj6|YF;JYh($K*~
zO`SQdt2f7-1wMMrt*y86NKmYQY?V2XotiN%R=rE@v7gL;Nn;$ufoF<g+?D+Csb1RR
zf&FJf2dfT)oS80`*x+blRk`NV-ykWq5(M3m_G}RIQBX;c4fbb;?W@b`N~FDmTpXX<
z<*y^(AE#ta&2x9ICB7@qu9g4_?IK+hTD=$s?n77rU5^!-MZw^+UO>2=uWH4=(1vbm
z7I1UOAm16@Q+??yjw5DqV^O_rQxtiQN0(!Q9~P>gZ2S(JTWR%pb|YC?LZe#aU+!0(
z3GZ4d?nhGJfMjoxi)5A%QWv%|GL}<~?73<wn^<`pIl$4bbMn^;e}N{MfUB^N?WIl=
zEh?&PR`ObQ_F5N9Lk85TJN&{F1No3*$<;v>)c7S>w|rE*srJ$>7x=`l)2;StE79AW
zvbzNg{gYzo#muwQIq!g`h-qwtb#o%PE2D`G2}W6qteQF#_9zCXmQOMjK@9hR=W;A>
zeu0({mHU2|rKVJ^l!szk8k4l&Ayew*iNL;8PVLGj0@TYXFR)1dY@S@NwZh~*+3EKh
z->C5|dlV-06#T%P)Hf6ydO@3a!VqoS@sgX3gz5+WNC-jJbTPrKwVK{QvP!2=2l$QU
z$@GfQuf>(9^vkN)BSXgptI%WGiYGiUuVps>dG_6>j}Rum?gUaem?7eqS-6IMc)Cb3
zPwEcBn37SxMhmWmQG$K_8c>!qhOrB3(?&sBifecT+hqQhO`mb$rEN*KhLjhv&AjF4
zd2@$j_j{K`LGO@Ap7oqPs|o$mDJ1hJCk0KMVE<tJY>n%QS7c_0T3wouy&}Y?Xh_7P
zL5>TAeum<B^%mDTuw!nwOD^LHxhZ!nt{QlVQDMX-P|l@n=3{eJ!47TcRU4`<1aDae
zv9Lu#LBt=t(68CRC>&35Za9mufXNP3^;k4E^c*cXa7atWkmhtLLuUBU$WsQnsbEPX
z43(($OtsJbJLeiQ<l!0?(DkXydg0YGD$lSTY>iutgA4GIu07eY-EgWp4j9qNBoG&T
z$!tXM0oiyx!$c;9w1Jj?V=L{++<Qv(a&4bB;Na7~nVMl#Mhp_Dm_hxF?G~K8VJDXb
zjK4-Mjk<jt;X<9fg16}+`bjtOE84_|^OOIXdS-2^_Fv9>dda|z(2@7o8Y@KHFhsBJ
zE@ygChL?MQj3|OsocU*o?St(z8*tvI_YDvIl3^llOtgV)_;n}3OZbNrEdqi9BSwKN
zHGw{LP^AIHEHVXvp)TCr4xtvV>QK{;;av#5A;N5fMrDIpWf*4>U>=MZ8{Xm|^RnA)
z!Aj`0BJe~*_;0tDd*3iBPZ^_7LLe6=>EG^xXz_9KxMpp25H@smp}t-hOpMkW*n}ET
z)2Ulist~a2d|j?D<C|^KjwP)Y@K>hq^W61na#-c*t0AW#Co9A<n2^VC`h0EmuO%Kh
zL^9`51MK&EAe+VW!E*e9vxo8Z+6&io#T?~iC;Yc)$}uO?Q2-ORu9{x*ARjM~iwtwp
zrw@?X*`rdW{L(qP3jOlAafPoU_f+LfEyV;rUeNlX=#ae}+|h!-Q2;$Z^G9>Y0!27f
z$v1p599y8eO`uu>R-h5A4az@&nj`835;wrk5$6KKZGd=>&Ryps&}Yw%gW@Vccu&t=
zcN5Zl=+i-t2kbh$`zF^N&6gNI=y^ElCczzs591wxdQ0O?l^aAqbe~SBCm@PD#J6WU
zohD6@cNw(nfax8_;~K9tCpW+b*#iXpJn*@+ii3=wKTq>y7B*Y)M8Gq&9%AK1>CQ}m
znR5fhBgR}wJj)~3OMda^g1|bKmuR{{en9!pTmK5KpNiBs3s2Fa*JHGjjwAk^ya4TV
zm4{Yj5x8*=+g}SSUAtWI&v8$rQ9|i#Aki*hI>*Gjb;?Ct3brEw#@$x=#T!jyL7ja1
zaM3BACSe#;?1gP2s@yL5#bjPk&>_tvO3_ft_se`-qmVmWN;Jred|a!LJ94GBW2L}_
zE#O1+afKdXg&t{z9&v@Q==_gY@O<xW3@JDAWMSIEJ%z8p{0~yWS8B>+`ZYmKn~*!7
zpJ!a2(6=spt4VzmbrmnJo-4rM^?+v@qT#!Yvwg<ey!o#@A<EW6gR%+McUN29`+&B3
zaM=ij(a!KHPkcTPeH!n5K_-n1%)P|t3=>yld@EYr{%kqq^o`(q<clBb1`^N$?G43m
zXr&N(<SAdiMEakxz;}+(y!F>0c6c*G>oQvJ9ns#;0mCJ@p~D!Qj<~%fxV<2|AW3+i
z@Z3hO9I?%SlZn(lhoxBG<P<)2sU15Uk4L-&H`7GfTJJF@N`;d%mw+*DGaL`cD@~;<
z@S$#cNBU&3ZAb2?$!ZM5crEXN*q%)(ehI1XPFf>rE+lJ-R!gXLmSh`jSKy)TdQlrm
zNF$W1!H9RLJv}1Pi{hN&q8f}eNm@QrasCl0el4l*Qd*-Jyl`6C)`~<MY;iVKU7&_G
z8)WMX0hs|GBF8+DO>${uZg}&D{S}g}y^oouSW>|bE0VCarVVcX{2nI<J%nv0YIo*h
zz$eo7%4yj-;LtLC*q}o-L6fZb4zBnPAl|HPJkKARcT%kd1u6s_8r^yz)97$>V(g$w
zMuJzN<3u>A3L9z72j{9=8$lJz%qRjsFY0JZ{*iJN`+M<;ht4^JPUTmiQ9Y4lYSOYB
zEy3zihDkc!4xw-#cQc_W*7bnA3l{r1WV_Y5k;AUj5~D^&LjE{GAi7S}_?c&;C$#1k
z&|z%}!*I(Km~%^kW{VlK)mvBDxl?zoys8zKg}=s9cu+6MTf5qT!s@cZY3B$@&jgZw
zNq_&I9|Zqu(X*JYx9I8~bu{2BmW*SOWKB3QOQIfgLZ?#FA%w6U<O|{}b?9p#T<_|Y
zba}4{psw=X!YFC|Ah|(JcW*WAUG=^y&@*YCiO{__0COY+_Jv=)s?XRy!i4_z$@%(L
zWq?r~<`<9T$Bu54`Vq&Q@F9OHl`C3yvUB=Xy<8Sw)D=iJOU3EoJ;DL^%>f8{nUA*m
zZ6(gUFHp+(EwNgyHA~Ow?a-|@!+rIR8{~#?+k+SXQXS-%pm8FJj*sOSd1Dj0BORWl
zH2j3PgWGz(tG~#8j!~f*Qh{urg2G-FIo|6dOGwDfKODaX_q~l;_jQ}~aOU?kRK?V!
z^i&zmAzD|PRGCxA-a1IWLz4fU!<T=)>*qY(DQ$CdV<|}Y0sX}uF|9auk~s|-v3fFe
z#B7}NSHesD{lk9>9JSr#%zFR$CgkaZ*>)Vr&Yv$n2&$?eoa0C!J{PAU<1NYnv*kKh
z6YQ_$2cOk-z}Ch~5r?4H7X<H(o2Cb#<oNyJgO)ew;ltc!Irq0QQXr?t&2RVarw@8K
zC;r;i=BZEE{}8|O`-*lFP=J8Uh5kG7OZ5NG^!9&>U;lBnwe&QVwKp*(Vf?Q#Zi$Mv
zJ&GXO7ebn@U4y@p=$Vf-aEtWsmX?i`%y|FwrJJ5Ufig|A@vDXMh;K>#r56C=%??Ws
z&MXisd<4Yc;034Ck@wE)(VwT$I{O`9n}Sp!TsP(RXfMhkgA5IJ#~qOjg9{1LL0zF{
z9ZOUrNIiKZHEg8_^?gI}7yInk$pr7gb1u7ow<Wo=fekkr5MW45E+xT!04_lSj>gp!
zPhl^B2dMfQ@eXYFOuKzAlHh7u(cHcMxq?A=a;-&-&}l{Af-A*N6d7!NYb$g|k4ksz
ze(dnq-wHHTRiQVKu^~`8A7sfj`c>*l)#HuOOf(XOts!Bdy?9V~EGEB4`wtg%7=6xK
zm)uF7gf>>8I|+nj)L0*}vRTZmnedwe$GvQ>*7Nd!t+VWKyY}v1tVM3An+J50(s&-m
zz0}SKKjO{S(%uU#Ze{H`xDtFO5zmt+R=R}A4O9qRBLz|}t;cHc#Rp^h8c8xHFAOSM
z!Ba04lzbYBoQA#xK|jxOUHdY5^(U-gJqB_xcAG=C*9>4g_6~3k&`jjbqHQDITc*#K
zzYvMvt1Ae4WiDQyl|fyr6=0{^0l<Bv+lths^bp-SB78W3=;e@2^=)Vmt17t0S=P>4
z<T}L8Fjbb!hR@t*>jD_RZhlc%;%~2RkbINb$zIrQ8shAKV>m>Jr%;cOg@gSmCx|1e
zJ9IeoKwhm6C`>S^h2LaI?EOzWfi-iLKmHFm_5<v{E6D#ZEb#vp9{ay5$p0$G8ufop
zsHSM&wCg5|wx0i*1*ElML?l626w1qK=N3wT$y$=yHuxK5+6@kvDJRK7-qyPJ?(F2;
z4&N4_Syn|)H2DP-@p0^5j$`Tj%-v>Rrjn6bNNr|(&g9z9em-6L-aljN1Fr=kQWF^I
zj6i26&k^n>N7K5;v;W>ZWT8jAM>#eXDkUWp?k6d-A}x(i&L6+ot&Vn@BP}*r>Whze
zHP#a2#W$RQvp3UhJsn|7O>`m#h$#$2N2_J0-BQp=xXTRegJd`CI<)H#pn_0AvgqPv
zvb8iPpaUX)g=U^E?ypx*Q1nVzVlMSR6jK2dSQ6wy5>K6#)P)x_nlp08WJBJTZHS6w
zvreZN>`i?<P<&oNI>A&P;2*=}M~TP>NO-WZp!4|HJe^6HBrIyo(yd0q&y5{<%MeD&
zNO?q$LSl5NDl@tW2{e}c!>3Osi%fMHX)TAQbwX+Q)tQXlGWhUGrfVCvPb@gd@{di{
zk)5nYiaquGkqVBn5MqGF+p7CaFBM7=-a!w~QQoUrRz+Bac{8PD%QF&Qf@ff8S%sBB
zjJ{6RUu1ZSM`KJV%*<Gb*U>4o8&G7)Ic~9H9@nKriF1`+x8PwY+a#BD8WsEpf9J1-
zA7M>L3Kx4jbxoGIi?F6uDfY?vIgYba_AX(Mea96lC$=_F+Z;escNn^T%gSgMjK4)P
zBqn+)H8wKF&qVWZ$#Pbjoq5CKky=q8>8TRv^hJNCR@3l*?~x$Go^%Zpbab)`Gb6&R
zX%uS`B}f=VYpwT!ZEZnsm6mdq#=v^e(DZyPP*C+5Nf$o~vS!7QtFDNoPBu8xB`Ij8
z`-d(|ZLBjPUIC1&2ZPFPqy0fmHID@`b070j-+9&`dLe=J0=q5*{z3+Yd*0yEdDdgT
zlki;k!@4UDNP|3W3t4GwQ={lT0$6p>=6YH|9sw>Q;5NFF@*=CtCOX&CBu<pe41>q0
zm4`+C0?3!PTCLL(S+>d#V@;LQ#VdrruSaq4-{kWBdm{A2cJ>Z`<+PfHth9*(X)Kfn
zx2@klm&?LROZPpYNDKE}wO|wP`T&0^K@zZv2+8B9xID6Os!ic$a#WGYR8Gx&s5SP;
zcShoggdl7{4yXHwQB4*)m6nDTYNdj!V_qrXpg^MY=MjrutbP0z73NLmAJ~vi4+3u@
z*5G3G5lpDKAV)M@ph50riNlG^S>Uk^Cu)4)ZRlCEF~ZiT%t*Zf4vAgtUa8O@6UJx%
z){aS@D+vMddYUV{#!$!`*jgMD1}FGcZx~N#l1nFoT6pZT7DIN$@2TcKrBR<`Xp1__
zH9)Nx@Y$ZkaYbZ9E!cCw33adG1|O^WlZPc+6}3aTgW`kPY5OL((2tv<7v3+*Q74$)
zf_BV|3*=TM8XCkQQjfrU(jpoRb;oUf!`#lNJN#jc--H@Qi>T?BH_c<o44K8(aItNt
z3CnS^E%I#E*)}bhnG=+C6{%@B-1SI;JRxtP<|~$U2kSjicSGHKXbDF*9Le%TETdE1
zupS%F0qNml<J(rmCxC!2IMjOUk4Jn>M0LDN$X>-K{>Y^xJbk9|nNhZB{Z~883%NzK
z<=<5#i52U$zDHN#^uMvP=;?EEs~#&%MeaDRFx#NU3FtZl@R#ywR*?de2-<#+$$&UT
z7xc${sX>qxKi)9-=I#dL;bg1Wt~QXyw6E<hRS&Y3_;SOjSOg&M)Uxo6aaOF&`7Zwv
zgGqE1aGW7(2i;COMM85xP0(bOLW+mtaZOust0t$Kjd<GmKgaF?QEp7ecE&)(e>rhu
zl0DH?NTVraVZu6nrIYbA&6;RA7-y|>7-fs51?aW(&~6G?!y}ZJS8MG_Qk1S(1FFrj
z^al5)W9-E1_2I4iX|-YLTxoD02&@y&7OK8|bXIY|hlp@qq88im5+3Y{h|;NXyY1k=
z`!2x{QOn}Koa~E=BY$8sT)yPFLv-rkpLluwyv=n;U2z6ghecVw6|(@-fgQpZI_&?l
zsj+tbc0L9N0%}M6@BS-n{}&sb|6x$m_Hfr(cHtMt_9&ijqM1$tYjmIq>T5L7j&jrf
z)f_$b%XZ!fXT5<3n|G2p&TMFEjM`uTV+!TTe|_34KOPJcI%64{*0KQBax!s_mN2>X
zG__T7u^FECxTh?G-Tq2qU-84|(|G3Z^QM>Y@ut(2Ywe+%-~Cw@kV4e#u>d_$5*%5E
zjEziV`jnxOdEzulSVWK{9csw94w;9{5oh=Tw*k(P`Cu6WjR1L*su|{=im`xUcZ4J-
zrv|WNX3Ca*56*f}OouvpMsq{D)LkO7WA1!3dO+wOGEAn9@NpwDbOfEi6rD<=#^iA(
zvPryP_30W`of=c6(PeZUt#K3dq-B{E2F*zmJU7ieO))#izN+>Bk4J>AU+jMdNoD9v
z7y615w6oe(HI^^@&79X8LVB~(bw-A!O_-A=Gn#*(C<`;iL6YQ2^vtJ5`F3QyGM*VW
z4f|?ecE)A8hNG8I9khJCD~#B;;Gl+J!+1~@1!TSCxGUvW_PF=2kS+0eZVEWh*td8K
z8-YRC16_i)ZRS(I9U%vh<@=<wJJswRiajZQ;oey<7Zn(ga4@v~?bL+z67HFoU|1Tj
zcIc4Yg$PcZhS$b^<HpIPvtK(nvv>TfmG%D5>mRnRF4T!w`ad)@7$R++FGkv=t_Ua(
zFP`1$T%TOIIJY|Ua24a<>+HDu55yeW9eS6~V4;<Ni3#-$!kcMPHn=>!baX#uYv8xG
zF5zu&wKRp<gc1r0jA@KshyhrHqGt{uNzN(IYpvTW_-^LZ`z@WFs0w&cArMwLuhZ;j
zt83^7X2<m@;_0M#IlNbFZom6ooJsu;Pvp{JB&8Wd5THh^z#PW0!iqL=4e!)6m6gBA
z)c;mZZY}Lxo^9;eCBjkb|5i(KOA=EaJ-%EKdiU02q^V00SIeQ-VI{T#7HZh72HPCi
z6`_MHxR1<m%;{{&fkdsrYq^7RQndg3H-}8xJgsVUd2^QV)S@lW%vUbo7+BxmY}i5~
z$|9(fUy@HhFW4A4ueWm<Gd5n?snbUoSl)zYsHuWo5vE|7NF`5;fK&sAEpcEE*_K2?
z5U<$rmB&|+D3GCS8}mk#jmSieW<AirdSTV2iax(3E(Xq`0DsnBe?JB7!Sh3#heXyT
z$TI5UHeuBU-G_#o9LX6K;}LIxXnG~a&~!MlxiwUTCUcz^QXKkEtwk0}+rAu_cy(;O
zw^+*Vokm77Ez%6E`$tx@M3nqJBAdG<OmI*q>ctqh6wz-(VH8m#Iu8mI+odem;yaOD
z_<{Ror^9)Jz1AinkdzBOQ8E7WQWc9E+J7*EBeqEJmP7rW<n?spTJ&r(5<1mO1e&(@
z5wscgJX_=Q%7g56Sx;a`G^?T&o57_34FV#f{gt2K<RVP<cIAf>8D61OdWLeme91{^
z1sV816FU0o>In@Jr!UJN8{s1>)p;?saQd9X{Rcd5!DXfCPfwqO`XcAhL@H_$E;pq=
zs-vAVjnKWqeY6eIIWGkVRFpDWp^qpx(maSElO=Uk@u>#DXoi3u+&E#)5!1z4lUpx!
z14i1Px{V+K9bpx?u5{Lh+j9&8rrt%rIb@jJd<hlCnzjG{B^0;G83Re2*}%29v1=2Q
z3x%b~hT8ta9F3i_2x{g%3!<|P$B;cSpza{zb%JG~#t>S@q7c>4ZRlpCUB>!{gUmzX
z(>i)mJBJxbuW^ZxPUgd<(fl)%r%V(g5;^Fcc|yuDGGe#(-B`7JJz?JD%h!KY-nO1H
z4^ALMa@}G1J68Sap=h-R#a?PLy#CZooPTMbeP`{%Rc1fc1kPA}LQ6sL`?y(cdLkT`
z5D9t0iKySgQzC46k7O`wBg&Wnw(MH+@0Q($dg=8LBcq@mgOhzAp3nq7G$$+KQe+a{
zz5u+?1WIzS#}Im5SF5Wkyd+y0dO`4H999e6sUr(*CAvx>>ApaX=CYMq3m3eqk9S4P
zZna^yt!0)?52$qAFr%!srgC*BU9FZns(wvO-O8}Ky2GOhm)Pu8DDOLtrwttSepoYA
zPbXJTCs_~n^#s@M#D!<wjs(`HrQWzwS5p?=gqw@Fn*+@OdIUUP*~-<VhZ2PYtpyCO
z;UDy*K^X*w^;r@)WN;xJ7$#_jby#5-I44W?G>8so-p%|z#rEM?FSLh#XmC3SkZ-b|
z!Jynp+kSnZ*RC)4=S@7GI2s51EcGvePN6#4=fqk7h4wR?<sfy!(_(!fvb#n<<7Qc3
zTYGaJRM&7N0zi;0r82Is$d#uUVAvHICYU`6P{b!mi5*0R(VPCP>nG;X+2frNSlv@!
zCsy%E95*DBXXG3>u)O+%r&kAncP|QL-(9_MZvvqoY!4K_#Q?V-{)g6u*INs~b1w^Y
zOMrMm;#0b@>ta_$l$gN)zaF$_82gmLH~14h9wdXWbYtipJYJ;Z6Ft5UgO6#o8)gHP
zAYTsio4Et>O01kyS()SP$GHm@_9eOTvXBKx#-6bP{&!0`F|6d*DWH*bbPp;tX-{6m
zq$fJe+De?MPq;J=*b4ATwuXnHcMtj+Y1sPPqM$MsE5B%%JHR>+J3E&`JPZr6g{#cn
zYiS>W7bz>)tACG;xX-yUW^s`J#iN)Dlm3cZxtk?Wtu?va^|FXbn8c*GFnbNtz+7u=
zkS+sIDg3*5XjMwPW`1x5HSCB;RGPh=F;?>ai7(%tbH^^l1-gg&J%Xm{Y{xPR%O2d^
zehfvvC4ef_%enkqr_y*2`;+%0Fos@-@doaXx0||&c5;;}Ot-AhR6!%66TpZvTj}su
z^e=!FBFMKNl|Ca9Ac}b(63n|eoH&dtRLw3RcZ^f2Bk`4*NWY!_1QGZSs*EW3qmCTe
zZDEH=cdF5BQMl#n6))YSe@zfRXW|&<&S&_PxS@YBwbYLm()w)fv1q}yoy1VS&fu{h
zR{y+BVl4}auKu-K&EQy;JVR^<inx1s;)o6j8`YKDN*UsU$iR{mLVT|GIIeL>{j3L8
zvW}_Poe><FKQBkj9=?(Ys65j2)Z?sN!!j*AmDyP)EXnw+)7wHqr#Z_`(s%QlU*EgH
zqMb78H%zqYZ=;#11g79`y*!fgrstHw^$wv`=t8F~UTP>Fi?L>-$0tA>p!VeJgS6cR
z7@meWK*@dHa>62(nC?J^{u5Y$lHZ5)g)-yO7CXjP&-3<c7CY9>@3NP~53s*31#f8s
z6qVmo9$>L9lcge_7?t1o-Y(fU5P#i4%3g+@xUE_APFVDAEcwEJ#{Rlo#lF;MZPEXM
zvrL!!7M1(O_$H?-b_7Tz*C|fcs2KAtxTzjeD=3^g#}4WUI#Dx^5|%BnA!y1lWf&Zi
zl<zatF&X2+RQSzHgS@d7P7-4Fd0^XEVR0-C$Jfz?5w+kSRms*XY{4B`k*id&3&!04
ztzUTMZO<`5)BPcP1c$|R4l<lkEHk}a8_z72rwgV42!gid`t#dD7>7HB27l3QN$QoL
zqF)96g>RZcg#cZX6S{4CrKb)q<(zWy%{$?p&z(GtD$T_z&ArZmuxEZq>FajrRh=Zs
zHeSBtljH$H)NGL%=uo5mEzwL+)*ouqLYSrc%5>0;L|;wE1Z^%FLg|wVHQQpLHk$^6
zD9uW(HjS>dJ6fFSRFjz|5dx|-jZk%DRdKVgw2NEi5Tn9Df<Ds<Q<n<!JB*xU!1X+R
zRU+hBnsv6psz-zBqgaJwlB!FQ%3FiVrU`~!IwUU<##}2zS8116X&0{Q=1^(3tYp9f
z-7W=&AC$a2P1QY@Rb>ms(8tL))qS@AJ`|i99tkoiI}in|3agupM0_cFr@)s>sHnm3
zh*9X2GCdEttYFD%R&8-44Rh<|4j}3nZE}N}8_>4FLDEPqKj5)%5NF$jkgC=eq`PI<
zNcm5I8qmf8x{v*Kr;k=so$U`^29SoTQ7tnd9AKm<5W;Hwq2ZGo%m>A%ybeUr`%2->
zVwx^qI4+n$oXKhAKMkTRgSwpg&uNRT!CEwZv2}^?;?*O`4Y&o<QWt%BV2wO781g^P
z5N+cW?*-O~O#BPiafeH$!a=9Y^dEkx;DB(dx@)Rv7BN@B5BjM5z@<`^1=8${mYNhL
zhfJv?&kyBm2~3bL;mT<cVt^@cRx+<ffg?{*JO42&T~5NeP3f~8#y+-I22RaN+o0AT
z4PoZdxzv(&pGz3<`mhfL)`LfmQ3}VGyq#3zgo3!x=Qt79OTf=zu}jHyqR=T0&J~K~
zD{nz+FMk3Q5eM)ek%E`10QsJ*I(7H~`)4gTg`Rj_)q03^RqRlswIt$r?6}s%av2UZ
zkasaB$sV9&0Q5igL0V+HE{$jK0A<Ks*|%<1)&@uZam5z^ab{}BV+mHApxP;H#$)IC
zy;R6Kd4aEb_tl3-N#}i;#(}T7<<e)8Lj!;g6HgR~%&^E{8738~AI&<%Ac8=qK@B<;
zY7k8tQRLr3g#b+sjEEQIu;Dt1PGeOrh@zA({g&!%-XrRqKw*jVGeykwLXHCh_<`9E
zH9}!Yn^3+xhVJ(P&!e11^)@*5l9yq(=kNAqND6{cgRnOS_hoT{az2FjrG1B-H#A(;
zywLY0^WEY%+^&)ypzCt_f%h}^UC>8uB8HTMiKK%+2r^_j@ty|mw0<UFWUyb!Hb3#j
zpgSSgSlUZk#<a(>Ld5X-rz|Y;fs>u=(OGIv_+9Y5)C1L!kI!J++z@)GmgY70zv4g^
zi6FhFo7bn9fjS<1UVN<L!oEN|DzXm7%4kb_vJB3=BxSl~5ME-3m)y!29}y2rI}gXM
zhcn*9Z$`<KchKDZ5{H(i|MdMH%BTb-%bb|I7MHzbLx4=l*RC2{n~W25MGrED)7vrU
zFFwB)X9?mjr9BiUQ>`qR5UcbRXqu|DvO?pwMC(#TORQ`y;fYmSXi=#=A1yv7XHfq{
z%RV!o=gl!G8l++gH4XAEU>)51%bzq_D0|hJr)hM14Bhb3*Y|fRJj7_IP&e?&Daj2D
zG)6ii;3a;=d_c5!@Xx%upWws3h5Vvu?|kKJT4EHR^=kp4HoJ@K`SwZk#5dK|=2wEF
znlH*S-roh8fwY=|Ub(J?1NQhEeKII{fizZ84_&H{29<Vh)?F_^9mxQ11+*WCA2Uvq
z=>TQc=f3mwk;!XW=na>nt?{lp!8d6|J)dw>p|~4{H-sPT2fr9!SZ~s%e@&W36nq{u
zPUG(N?r*qV_z|N9b+yMBa@5tD`t!ZQ2WH<&f_%SVKPez8QUdEpF8Fvd|1YdBQL6-2
z-5dxD37}7Fl&I>8^Jt7uo(Rzu7FV&TFWR3)@_#INq2pP*bC6H?6M;09x3B_yfqRqR
z#xkGeK+%u|zB7i1tYLVHM0=$`Ok~5%!QSdf1Xh;Z#q#yZfg4N5nL$3?PzbCic!=k|
zNq%n3E`rXV-uKQ&JLPb^14rrwZByIS^`%}5+>+SvLJyBL5s%a&h!(|bJCh!uhve5&
z$OL*Sed4?X_7=Cr^?){;KN>OW0F%zab=T+gaG$)VNK5A@zpyKQ@_oQ~2lb5BBjOid
zv%Tdu9`;q$!|M^t`UU8%@sUG*VYA+TMldkqT=%2aZ>8S<CvhaO)fY4f2?%JJ{lAkr
z1piNEj{lLl`#%-*|99+~CbT!&GS+vmPLd4-6k`Sw5fZD=7=%!ujwF~6!7q4oe<T&>
zM7)7BGxjTBF#DmR?UrS=%9af(HA~Sd>ExBaR<^db%W9W~*49<aYT7kw+ATZm+!;9+
zGh|u14X>Y1y7xWzKC50HZ%L5&U<%Z1obe&z9UfBw7(8^lVLSz2l8}FHRPbeeNp??l
zKGp(wK7#rA2K9X>rf1tdQdb|2jyFFB0*-II>GS~hy;FmAH-$l&Y3^@Ki!ZEkzJt^D
z9^cpQ4>0V#$EUyVZmGT~cI6Rp14cdWu<5@u*grzV>zss(*l*M!w}-S59`^0Kp4{xV
zk6PStZ}xukyp@6axTo=VjY545Prq+^_f7Y9yvAq6k$j8>ydnpFo94%PJV4*SQ#Q~G
za0CO$g0f`n8r#Q@$ii?WQ9M96eQA;Iz`#dp=Rkm4#I=_(o!`5FfjgGZmp`WQS&`-}
zxXNn&t!gjs-#@xHXY%#ZpPa+kR%lj&cYa>=<j?kIrh%XfH?SZDh_$Wa=}^RLa{2@b
zs5Q-&Ku23Ud9|bzY|~Bm%3a>gNf~C<X+PR1eA?yWL}~Wd*cH;!LU-`eP18HrQ0b`r
z0!+!a=_>~Xdng`0uqaCE2Fb*@c?D(eRC%Ua_qT*{9hZdW-I%#~u`Jg;^U*tMEfs+m
zDbVtLcYg87qP#kf%$o*e5Tn4Uh>VJqsf_*=C3V&A4#+>dT!A|PG2RSN<6><)bG%;C
zd0V$7igk_vzkBp;IYYc*A8o|j(hByH95Z1L(#O&vSgivW_PvG~$Xu;@^=iiGty2dS
zOKID|+p-jUajf?M)c7(b2bGYaHkue0C`%@{m!C}5*>!5Rdlc$<C0sZD8T_?gkIg@V
zM;d9-isMFlcy8+mI<=lchH}ATmW)Q`u<2H3Kj-7(pGIG&k7xjqP9!z~wJS))Qt<*4
zq0ULpIz&&;%oZE_*R1gho?WDXrs+23)w$ZX^>1&5hmL8(5ro+Wxw`GbdNq*jJCOp3
zV!aXq&UT><p)GH#Or2CwYOD#x8=B;;vHg$o23xP}WANBCScg>wzQ~27Ea8ay+s635
zZsiX8@Xpef>^o<w3?Z=C8uBm8QDiR2!RrhOXPb-S7=$Pk5b);3C0i?5ij$|M8|?A)
z)vK%9N;CzDnG{DHY-P6T(2(G+soWeh{V|*+V}gt-quwwkWmD@!NDFbjXVA3PASf^t
zq&3a;Os+3y+bTZ1dDoKup92`3DACLdtRDTL;dvC5lcrUtUnEHb1qu(Z6^ma}DymYE
zmUr$pE{l3tx14cjmlc*JvpVG^vW()0x+<sW>xN}T*jl(sF-B<N);3S<8|Fd9gMG`c
zM5SRYx}P$0K^3-Q`0`ka^3HT-i+utJS^2m+wTg=J==GCpn#hp<7{CfNJ<9wUCj3kj
z`;s+b!OcjesWRiDz-HdNtSU?CHu7B|jXRLW))=F*v;taHCjJeDTccQzFb*YyAt{Pd
zgK+cFrwre-+q!?zaHo|PPPns(!^<m}>!F~6&Aer&3~<wUbBP}<8a<<eyME_g@P%Hl
zk7roGsmvR|mqGqh)h)B!5=5zru1%=aBU4+Nsm)@gUXIf8q-^M)7`8bw(vKu$7$0B>
z_0~dhB6Dhf7xL{~`OB$_F)B1;GCXN9%7vwS67LAI0fxOmKov1Kj-(_Y&^(NWHR;GB
zN+*5y^MT?o3#*6coAoe3;jUMEcJ~-?rhw)C;bm5nqgQWJu%cOw>Y6xZ#xm@P#?PjU
zB6et`i8TS1@2_a&kWv|&n<I=UGG$biDe^WJNLd^%*LjR@Yk!;k%Q9W1Jg0NWXV1wm
zl7eG2lPp@2P8UI?$syW8V+N&Ff!vh7&4*=<jGjF`&B>uY0?xBBJsrZKj?&UtK3L)0
z8>^?A`Qh7=cTL}zP8*vrjLWEwaX;j(NrUv5Xb~@3#G!@)YuW&nHmUGBX{1OWMb;pK
zF-@aVq(K#BS{OotI%%pCb#CIAZILp3yP4f5i^JL;jjR(u4NfM$+{JWoTm5v}5>jER
zS&c-UvGPZ=8l@_uiM3H9O4`K6K-INz`Jr!cS`7=wqcelQyn5X=prgVgl4J#1h4ed~
zRKdKhV_6!#<X;JncH3+dNwaB`C`Z6+1%{KevV0p~*)RUc(NIBY$9F3&bxo3AHNMjm
z^`0yxDI_c82JC{Tgb_c$ha`#d#FKm~f^ix0h!_>H7^ZG06%pI6pHKz$x4_GS9=^Oh
zu$J;hq72j&kuo3-esauIYn+#kziXap`63rjPbcTbp*&|WXe0b1Fv(smmp0-@!qq?6
z@yC`5H1WZ`;$}r|D}p^$_~-*CCsY-v!9jS*0VfV<dilp`wky^Oj?RUPB8eT_kMqF>
zo8dE;oU-PYR%HgN@G$Bhb=ZgQ8RL@;+oOi7k;yd+p0|p?1q81GIuWd(L0BD(#LYm{
zUcWxCb|Ybuck8YOSA5tWkoHCNS+Y%oK#W+Tg0se)J(QDZ+aut|)zsBR)&o8?B$QaL
za7+Q=-ObD2Fjv$iOBSxrs4*@z#yhRhM2Dw_(#=c`CEHNKi$}jobN(XPO@LH(aO?At
zhkZ`OKVIT!DKT_KVfU-X#<XMV5hZVSFs*Cpw><6Hgn6`CsWd>}l|5lzCw43uXVJh-
z0yllq(Lm73(E#<FA<_!JC{peiF^3LdY36_Fs%2{Zku!OOE%r{SHgr(me<|V_dZ}y>
zm@gzXxyS(`x|dL+JL*ZY1ujMbhT3i=qe!5@7L7-eZ`6<o<`OA;O31+4u?N&LCIs7_
zKL)TyjKP=-w=-yN3^Ze1Qtl48s01DB%7VbskhDdhr*hE{HRfytu4+j2gw#KP1MEX_
z`Y9t2Row$M%9nG6XUjPPE%=PpY}gy&M9FNhKz2;%pi$n-RChd>cE_?tRef@#UWs0P
z{Yu5Q(LnL0W$<6cp^-HNkTV_;+;PF;LB@Y8fNaA+15FS~Oc+J0XEI7^S`ji1lgwKt
zrVGb^(E0%dRs<7{{_)5L7ww5KLX~4vm|_u`!tP7gSVPBHqd|3Ts=$Z6SkqWzZLN34
zV>LL3Tib-%*?$`Dt842!&b+CV^a=siAGwjwucwL*<Q+R+2O8lQSsYkX-U)AzB1bzE
zfjwgab@>_lDomDZ!!MB{XB)$38{(QpJ*jXppoc_G2DT0f{Hu|s2NdR+-T6ZIn=0&B
zv_unaF*z#@KMQoA5A!f$KqxTzL*wySSD~1&%}`(_5h7!1N5HaY#6Tvc=uIiTF^F@5
zK1S*vOGV5vw`U3?X^(+w%5+X*>)00ac3B7BBOmA>c1*l7{8=lk%!X9hKsGP`7ry6;
zM)6s^kb^;m3P;8BXP+f#;uIp~7=ArSjw$osSkn{tV0w8HY!OZLAa{A5$rO1QV@VJj
z#!lRy0N!%ur2_f7GU2jQL0mxuzk__w6KgO)Ih->?ER0<&f^ns4AQu-o#W9gQXB-K~
z?~(~{3UycG&OgYfmqs+Ibb^2XQ0hz^I#8?k)#+F!Fjz?aB7uf{Jc&q;OP8D{2<y=m
z9$~TtN}-PUdg#y`)^s}~NH6;*a!{w$W_QAaK4*{m>cRV{U1=69cq3=jIl)=f$w3``
z#;d_%!WoTKUDsXCGNNqZ{Q_jRV$LnyR5e&$K{btFtoEzrfzau??6dTP_LuyCj<n&8
z=buPk3l+OQrb96rbvvRC`w__r+O_Hn(YQa{a>`dC0_$P66S^GA>v6ghTkSd>km{7r
zr(Bv63%L<Q4|{Nl-ZV2|zkziJtYvt0g)?DJa~<JZ4Y?f?qNE!@xyP{~d=6yZa#ASx
zWTImbA#L{u*CPOvM!Ub8L--+&v2Uv2?J11hVH{jKT~go;T*Y;`Jc2Jy6eEG+G;NB<
zlDnaf6Xepfbj<*Ej38~XyiQ17rL<4vQ13~>pOmnpqGY3(B#G`y)kCvuQeE809|syQ
z=C-@^GUW}%5UgzEdZot_rN@$`m|}BlqR_0aQ~4t{^}P~n`a~D>|Ew;IB73pK-l8S4
zf5$X7SYDuKJ-mYZ%$78}V$rp!Z*OWGc3V|-Q9G0X`&Aco@#vZxPDPm>utt^M$;ck=
zQr)qV`LOm_<ew4Z#bYp3yh$GX9`cTig@r(s)_nXdpB3?D@Wa!bz==;`S1j!+Nur7)
zV3d?)lDIwjDK)s9lQg(O9JoSJvH}L|JqylspF>-&Og9>qYDj*GA}IY*hXIz_VHb!P
zU9q!rw-H!2A+h$~F<8PJ8DoT69%;qCamBuQ#a}?G6JhCf-X@C9-Q$|wbWL-wuaW(;
zSP=Xz<G1<LB%v|kcl;w9ho~}i1%XW>8e^-O2i7hw46k)4A>og?w()KV^4pf!&kbC=
zQxv<2Hqq4MgaaMvdWq(Q7c9`+l;^%NW7`H=^mUsOMd6s<Ib!S?avKI5r|D4BA)POb
zqxwX|y(ZDacq1a==rp9no!|{2Zoi_8bPKq8Zs;ruD_^wP`l6D6%_iDPg+1&mle5OO
zdu_9inFd3OsmM9ylX%^Sj7jdjNj42h)S%tYB9>*!xbA!)%pb+P$9I(sBY3aI){oQM
zouJrL?1RmTdyI(<of^*?K;@Kpvu<^9043vRuHOZVKUgohpU7af>VX4)Rc(Oj_}M}3
z>=?<#ko*D(+rHOn_L)!Eoyy>8c4dx+WL_nnLt<IyeCj2Md=VsQm{P%WS?!!0kAVZ5
zmO)Zj5O~K6pD$9_5fD?TxYOtyEKh;Q+>}$;xz|G&V!y@^5>1Afoi`NX`6sbO$+rBk
zB|>hWBL!(Rr-txn#6Un&`SU_&+#4VEttbEX+`E0a&SrK>7{*zz<frXYUBQ>DWBT?E
zX=DQ#IpT99N;f}&l!va&LdWFi@BeTsUbk{6*&_e}iLm^4-7V+;U3dFG=J=W(-a4x2
zUv^C6CZ%<jiASWe!j`a>S!9-r&h|+{O)Yp+N=eNrt?_cqb*IVWT^#p9$|gy=qTuWl
zLa>oPrx-wFmD!>Q2m<{B0~^cz%k%d_VPSHAA|1@`j%1l+0`mM0HXpssJC3*AW)2eC
zuDdV=VmQ`AQre@&w`8si|IjC0cShj47^5e>-|*)C%{#^iY(H<gBOx++xP$omi>H6g
zMTmP08uPr&gYm?Yr}LbO;rmX(@*CcvC6#4-B#+N-x<kzVxjvTh?H@d5GLN^j%Z@wt
zxB_R_8>08vRhRLdcA~${4)$D+>2M#8*l~ELO4?z1#Y@^@_J|ojm-*^Dh?DsmI)Eqh
zGrPltc%x40WqjpMV$XSjZ2LAL{yrSi2I;8L;<&h6-gt-a#fO8X$Td)aWrgV4trrtE
zAN1!3EDC`nd2b+G3-sN94TiF>6+zQjp3c8ldbxD7=c_)4IScRb)faV2!afIoe1_s{
z%_{FU&ZAg?PiSRvbDyuWxw)~qx!B)1v$)k+UR%^$pXu#e+F732{hQmE+ax650YSxa
zp`2MefrqomI1nOK=vu^K6Xa$!PU0`FnHToa3({bNE%#xQ-U3mzz1+&teYBN*#FO2U
zoz98D%YD?n#M^p|i77^K*(+%(h6^|)sgS)U0r%dHr#I8|kw=7{AE#anG^R;f%D~y+
zvDKZ%JLk^)o0--5Z`I9X<6m_llRi2HF4S94D8?D0W#~~9N7T!`maE6?gBs$mF9DY*
zew+Arot&@j{MBDj^T;yW@nfWOMuwHrm-#mJR`NsvqCQ%ASNziVE>?uS>;zsSV2$S=
zg1wH30%ot9F(9#GTjEVgS|5Tnw)ysdG0yJn5a(nBqkd?WHV-K5G1HP^4U6)?M-)3#
zUF(8d!WzwO>dcwd39Z%Mc9{)oiBRIm^DSk03gi<l$YA7O)PUF+@S`|tRvnD<q<YH*
zKS6tg8nfzKYv3IT0*Ry?_pB-DY|L_5B8wU^^?B(q!%WrGF&*k0c|(1fkv09u(`F`D
zB>56Nwy@a(VeF(o(2Q%T3?9*pYF2eZMSMss#Sss`(AKY!HB_%88Tl@TU`<|w_-y0l
z@&+~E(m|XG`KORAA$YojwFJ%=HL_AhiKqwl#nO0ZJn(~NHAdo`+{WxJbUOt^J8Iy1
z40@h`i~RadScEd$>eROJbZ4NZBoiX8%GoR|`WY&kBSe+p4%qLb<BTWZh{?ALVty<D
z=Sr~4VC_t>D3-f+_!sj;>dTUG?02XBHTKcOG&t(L>}V@1!4G@^vQIOXYsMBP`TT3z
zSy$G(Hy-eHebKi!Ie~n_n9)_Cm!3=Tcv|#ZS#!A<cVZjZ$JS~b0TXV7>IR~(siDp#
z<~Ei{H^_aE2A0wu2MaHcR`Lv2AjQz)ZhG5T%NVK#ZQbpNeRCjKXR=y-JK_vI5>wo5
zaR-J~3jwsuiyVRcw$WvW-3}KQO8{^>X~hJ@zQe2hR_@G`+-$u@<m0`MUpg%73>P(c
z@@>Yd!=xT?6@im;)8J)e#dV@6+~V8kzs4RK+!mbDMeAnPvR=IR2;_17*!#_3rCxpp
z-Q-JSb%rAVkbq>)a=`5bPkFW3d?NTz2iumD)L6n^04CX|RScxfa0_xWqXsIyEv2+}
zLT>YPw$w;|Dx-=`yZ3_wIHJ>;Cx{t(epv=qaXOcl%3<~VRs~`(MbWbpMvWHdQBxUO
zvr$eU1{pq?bw>4Q7`n|6S(yVB5u^_cTfSsKfGo_}JOGVOw0&232<*ZcMzo*wM14pk
zf%?ZCaUd_~4;CRwG)sAht_ajiL>46k4!Wrv0WeBcB8k+L#=Z*Np)92+6p=B7wK#&?
z)}o449%6CqA}Wo-l4Dfv*L+DQl0zb=DwLU08nOxOZ)ul9b{f*5qL1B$Rul;-H_4_V
zyHB4oSDH2nAhH?~B8zfw|H)(e$r4Iz$a5k10}9^|H_oOY`j-OU_NBU&$_VTC+Mj@u
z)8P!|>ij9L$H>^T8I~%h0M={SL>Y8n7Ff$Tvq=!xO8{>_Go{m$B;wOaKxhCSce6tB
zIHlS`Q`SJxHJWqNQSnRi;xk`MTI!Yg#je#7C~(c_$MAT`<0Fn2(Xg2&mBFq39Efj|
z@gO$-QLHavg?Djh;DJ*LMH<MqfxXN7lWs9cM&>>{HA5wXcuI?7il*Qm&7sN1Inv>d
z3OksovW6YCffS24;%Zp4qNpjbDGao@uT&*JWU-R*v{VI2v2uKic~C7R1v}mI*l$xb
zPIDtvl@9Ywd$y(y(tn`@9#Q<;Pcly>Hn}vnvruP$gNR++8(BzwwaZ3)TjA{{*(xn8
zF`-jR#iV2`Yr_x*b+BHsMCnRRn$4F8wWT%G^Dxd*TB?+*Q7q(}ylZykJZjrUC8lPL
zZhPbR`MXt^Bh&0qd{*A|5y{;IWf!Q}IA>R$3ms$;b{_0tRt^~6-c`cM(liM6mzDhG
zB#qz?qhdyD2@7mEN;_FPSk*uBk~3PLU66NHKN9j{Dl~pRUjCqezECy4fhwm)#?8Q_
zM%}v-Z$^1-<pe!^4*xp1C#tVC;;?E&sNVfHQs&$#)q}>K7a7)L{yqk`K8ZtdS$`gD
z1uGk>@eBXbntD`o>ZY~p&iSGkEprURb({Zf`m&TK&MWm{c}UE1w-9b6BU8r#XD)g~
zXu^byJ~+l1TpbxL>@Xkso)5;Ea&qeca<=YJuHIjAC0y%Ctn!E~qdMDvd)Bcg<CP3W
z(kd~iv8kr4gBZh9PAf}CM`lIUD7oapRydPn6iK8|`s*r3EH{4^UQWD?@`j@V2G9<V
zYIpdZD|uj(t4dGON!#hf7re>c$V_Z^T;gcPDdRzUz@4W$!GKnkJQ*Q8C|8wiDAO#}
zu^<)+5E?tEVe@FBy7J#QgS}sNoYGW0(rul}P&?{wouX}>!csf>Y@IS+V}hl=e{7vn
zAzz@Qc1m3~gtSQ~-o-EG#QQ9Th>}HO55fgru2*C2!3sNwt-MtXmI;PnwsXQNcz_}^
z1yI~ozipynrgqHNPl;;iO~KXH%63Ub$ooOkBDD=s63K*n)5Xh<I8_{ePt(=@68b_$
zo1;|4?>7nPrYMjrFzD8*3eDFGs-DV1?7C;NrAhp3kEhIk3G_r-T>8hL-VF-7EUa_|
zH;^m#d@OTOnq${F5VS_@qKWGQld^HN-X-w2sr)e^d{0)Sv>AnR9kygaFsDM;c{<Di
zH?FCinU*QmVvB8d$@8oWxkjCf>YiDj))8*^1@yX0MU|oZ4-|8_Az2Ig&<D$JREcNq
zgpzIeHc!O6Wv^3Fj>wENpK^ukQLaZ|=L$rls5d0frLYp+D9KruQe6b>>3G+M-#+uk
zce^&(!cQF$`#L%T3v|iP3IL+FzZ}>yb*R5R5FtVWt7=({`N4;#GhC1-ouo?+2RR(I
zb%&ldl`P-KWQN{WDv{5t#H#J7N%xQ8i)^&<G-qQoTWVsnGKAA*t4khOQb*(*D9I8r
z@k!}<AVht#w@1iNY`syKm&zE#eKO@9u$rrW@LzAZ9=je774!tfJrv!Ff^Tg}ITtZ9
zOBvgMd{!BIllj9A5r`Vtv^}Q#uC%P3$W6m3!r_THqbmlg>NG$~JJifD`HiHNIL|9(
zgj+|%s>Fik8OcbIaBVZBH|>?0EE90Yv!!?Finy@firzAn*8w|CrCvh*S&F1ejyd8>
zspvBGh{B`OQ{_yXxUY3`W!@;}o=UgGo)2S0<#MaPs8Mnya-WDQ)|<4VD)+Ry1CwBz
zN@64I6H!@WzbKqu53T6B0~%)m+95&j7#_J*Bjto(VeP;&bfH)^M@}{1T~ne^t7<J4
zJ5kk?nmW$}-N0zx1P!fX-Ywd_$P7Kxj5D6R#7x7xZS{)=W8-h_(jSaflI-C$*{<ay
zO^PE;nnuAatYf@kk$t^A!5?)J<vwOO)w{?7W8P;z$MJOpx9VV>?G-|L-Tsb_r8@!j
zb_9jm&jZ&Fp_aWDkzK@ev}bEj!^*T);=}cL8TDQrH9f3;$`c2|Hsg7niC#X&1IMn}
zP%i=d9{%O6q1<*fyKw_@K@}%C&2Q2~kMJJVj4#^8T8`-#W`XAXwJC;OA&b<(A>iLj
ztZZdkd`-;CE?I>zf?a<NnNy92W;S|C79y!}oW*W*{p7Y_?H{NUw#{516)6Gej6Z+!
zT~JP9Nd%xZ@7)E$5`jof=JtW%Nr9!tN=Ly8xji{D{cGdtNg6goQp&gxik@6$eu?2N
z^O?1f8zI^_5|W`+jnUEx89FjDiv77T#7(%&;mFvSPEM^E3gU=>De73#mbJx?;jY+<
z{Z=?s55#+6_pHzrz4So9oGIHLl^jqPflxF5d&9aLf5~2K#aXDcWY{wJ$p0Trma?~5
z&DRgmbB*f1YqBK%&zme~3wx9Q<zUYLLPpYncK?r_%bs~$nyk+9s6{ffR#;Lx(Xz>T
zhemfHRDwOT*>X~eJSoj&!h~!J#5SN&8KXdSrIDhrnId1*P^qFZTuDSl0Lf8MR8&ys
zC%yo9*5m$YdU7($xm5DpduP*a*5^6<e&;*a>$>B5Jr3UoPM}-kBp4LY={6iSCS3Z&
zG$41!fe0}UBi=z`fc^fKmK^5hSFd;W4p0AZl8$%Qzvewkx}N<Zw_9gEgr;uu_QB_N
z_tYJqJnLD<TTl$Yv6kQe4`=5T<XI4A`L60RyKLL+vTfV8ZQHhO|I4;*+qQdab~ol}
zcVc#LzTSxYlo@&MIp6Qt-*H9K*<A_K`b_RiYI&wx^6mv#)b5tbbVlT|*Z<}{Y1Xy7
zleF=i3jgCXv>&Mz=kIuH>2rrw(=~0~lYGlbRzfuG;yW{hrS<6_$?I@Oie_tnM@GAC
zGR5n7MQ8O{tMwTT+chxMq4k*^>1%g~i}vquUl(y3Z4|mPUJaj8u0bN&C3qccF^ul=
zCOo9yav<MKjL!xNZ0WYaj}=j#2pC%RU0@54oiAs~SADfdYh53s5vfwtzq|_U&@zkn
zD2fJosH9^3$Br5rPzg+=@*a48uI8GFX>->MS|+THaqs>ct5ctM!lRIA{fG==em;$N
zwk8A=6AY+Cprt?0OMeNA1e}VpGGw@5F(v5q9=y<k?G%=|V$PXkDH7}`Wb))4xPrBc
zTadq>yFxL##G@J_ShM-14Dp+2SL!eHBKDkZ5uq{}?@`7U99_N*lt{sLp6pUIG|Y==
zh8gA8wx4h4dX4m{i9ivoR-T+^%~J@`=X9G_rtDStyI@~f&_4w!lAVTjJ|DH{;r>2l
zBS4-etZM~Tf4&WnZZXZevIX(}l@c1voYGN9fi{=?0k{*XT{(9K%!yT4@3sYefU3Nw
zVjUT(b&LYJD_z|cz)MpJR>TZ(xjg$@jJeahn3uzdnS-dFMLXe^AXrpDU)o`rciiD(
z7DXD@p<r7EXiiA+_#_|dC$I*i5me!P3Y<gDR<Ji1U<xjH0;>AD#K#GHV(4$)47Qy4
z{<l*8caP94fwMbNW!Dz+31W4XkTo*Rc=fhp7XZk%t}zAwBQU!&P$&V1MdjI-SE=5&
zhV{>aizXHb=sIa)FFul8^!(s@DrA>>)FVP9v#{cT-MkJ`WQmc&4Uy>kI1%&jV^lIt
zF(DAhsvKk!)0Wh84~^c8s>@Led$MSlIqFHSb|9k`0`--JKl*t2cur2#R$_w*Rad)U
zjSdF1i3Y|QXBJ8nV|h%i+<?7h<JG06!4OC-uTGay66?jji%1Q52$&6(5#g@h@j~{#
zd8``g0Wpv0aC7Da2;#jzt1g}77qK@*{&(pfEZDHgUsG9Zb%L;+#P=YyY|}+{@JKQ<
z@%9<}Ji5F0|AFSQn;E4RqS5f4>HTZ1sjQn6qRi)Bv~og}9O3?Oeh!u%2s^ecs%MO&
z;H`~gNNM)$3f7g>Grx^CWify`sXUH8NysyvAy`jeeC*RroU8`BNZ-h)QKu6Ek7Zmn
zNa<f3_(B6&+WT49A}BU!hf%t#v|gsLu!9Uymc7mAm_*KW4GWx@;vU#1w<x{R@2APB
zL|M7H4cD&K24E^{s0e{Y9Xl1^LnX3Hp^k8G%?(gRrOh8b?G+J^N*W@U7Z{1GIVxG~
zzk;3JH`}?kQC!M9=C^hY4Y299ZGW0uuG{M{(h@taLqZ#CMNb`V4H%+Q-yGUsqShJM
z2T<#b>_4s29GGn4M=HpZM$Q#zAsQMns6-_Wx~WV3K{9T-!)hT<9fCASpq3$qUd#{h
ziWqD75kv-$Mkeq!f70RzEuE?VsA0`tr-7+9lp!lOl%e9POC7B<*DTppr&u~`RiZ77
zQKcg@4N93<uySTm7bdfBO!mzO+t7Y8vedT*>oze2H-eOyAe|<p(a2@LO)2WNYoC<h
z7gv6}(71Tz_s*+{hMF&$CxOX?Hbm-5!U=acp|bw+k6&+k69h<G!Yn4FB@Rnv2x=ob
zo*_@{)+G*dap*E}2@*5p&PP(S+W1E(;nN<_Ayf*^9jnR8l1nk@Wu!$&v88}q8SN(0
zHCosE0QvG!)^}iAi)k@T0u?|0OCZ>Vt2n8Ke^=CHc;wH>tL4mSGUUr-9)GV&hM>~z
z1&jITq?+&l1R={1Zy2*K_C7d?xLH(X_SP-z-NkLKaz%~w$?R`iFL6RJRf$kY6X>6C
z&5}!6QoV+%eekAbz6X!So~$e_<XnWeRD=61VPYedd1{n0Rs1_!_<Ut>=RPZnyS}91
z+hpzEgY@gFZv6)*%^|_5KJhHauEBL;qDdmDE&WN*!bJ%*HSS_d|CE%^_&!YYDhqj}
z3tpU6_iNElk#;VHy^5~Ai>|$luDy+}J#OR&82CRn(CL8g){6$%b$;(hY5lq_jjBw-
z;z?1lviZxDl;7HVm%l6tqtO;3#1joyi(r8j897(w;lVNc#(L?yapbINmrmCOXez}k
zKz*e^9V$KJAO0wZ=))$vZ=QNUS(ek1aqKcPFD#6;;Ay`hGfv+~!1vXcqqUW);0bJ#
z&Ox6c9IE2cSD_GuR&hsrt>{NNa2u*km9k<nSHevvfAD*tzkyT7<uv*evz0F=uUy2D
zHr(sO@CF4)M>L`Z$Cmb$!~tu~2s(8AO1&V7a_zEmV3@P3U$bL~WPa1$<A-=g47Cz|
zs~8i?*WY)_D$XpM3q55E+f&(Ek!pt%bdBVX6>k}>_-L=D-CB3rI%~J_0e%Ssr+&9h
zdwhWXVi|a$)b^#m;Ds&bh}qweAD!oK#U+!kpMK9IcjyXMSlJ+5FmzrRctw;Z$+Vf5
zP9?EIJ!3gQH@AGo$*6P9Z{21}r&*Y4wk$-GJKNFMdr8=)_lRK?9VVw?EYmjz<h9-w
zZ6+zW^*!;lz4`6$3u5+(qF=nLIjUyR7j;kt2gzt?MCI1FwR7U4y<lFsBf5JMsCwq`
z;f6{8O3_HFmm!oK@G0Pssocqxi4#-j+R<vPht}Ft{jQJvu8W5R=jvipCV^zJi!(ad
z#`n>;BxW46agj#UQbx}1U)f0Oxa3o}?6YRalf{30brCf|ewg-0H1YvReT4C3gH{x@
zilq25MG^fRg@_>ujEp3QD#hWn*%tIuO$hIV!t22-XgvEY(Hjr*5Gpu>dy9K+<L1Ia
z`<{}3M1XM4>(t^i?yOH=lz#vsy5K+jFS0pb(WfRhnTWy!KUL2XX&U=Md1ub)(*<nN
zzm5%f6Ho7I6*CJLNM$@%_*@T;;%V(@0~2im=YOkn?l;Tr7gbVEhUL*jxt}K2{@F+J
z&w?fWsX&UWl@f_(1cj9#QK3*)D|EAKXN0|yfaOTSfS_PPP&wZ9GNyH*gsziR53@{4
ztk+bJ(o7<0)l?7plK73QkaD1Zgd9C8EHq~$RpK8K9z}R52qF)M@rZf&Oc>$__&Xc<
zP!}zCbnqh*9w?3zEBAokb<=Ff$N`ri;}#p)dStW>D|C&QLgVJm?`Q{z+CAFvS}iB^
zQ1JR3ICxA=!D1WhlPWcGLNkou`OWyrsBB43amgx4<X8;+YerBkEq$R_KjH~??`XK$
zyQ14Vwec>i2u*_}XnS8`!yt)?e0xSH-66%C{AgINMoiSWEm<O$21T``&><>$98U8~
z8$+I*Q~W6FTj@P~yjsZEuk4bPGEg+{zM@HKT1K9Ic%PF0h+W7ytt@I)!QGjIazwp+
z(?oLU?^zkPZSlRA=9eW?frCxLxcgW6rnr)hkdlsol8%IujtdASZ+6Of8wKTvrWQ$A
zXF}Pgu#%3k<dO4PS(aJxJ%=V`O=<P8%8qrhLu~ao?q(cN@<XB$?Wychw9t{X&=HN$
zQMJ&KwR!nxREQnC%_29;1@6SVN4R1BkbJ->XV@s`*qAmcxN%4z<EGFD4QJ~b`aHk`
zY_3eP9ZeA_@hLn|&B>PVh#6CcbmXs-M%~SqQ#a;smR@yHAJ(aJ?zH^P$Y7{!xp8k&
zy=bsH5yQilwEJ73Kgs9(%)0Oe!p*;Xa>2fTiBQ02nA9=r_q6)o-)ibl4IHRhO)=wL
z<c6Zr<rBZLU>%X9Q@HNAaHDC-ut8E3S-|6TNM0>%h0}sDAYRYT@Iks-nC98vn-Aa2
z$4{*c5XZ)T89z586`f!-Ka8>z>lm3L@mMnThe(~(D^ADd(7a|v-``8MeSOv+xG-I_
zzw0}%!by%vwN0tG3zuYh>4ypQ+q`0g45E73(>J!?s7;@L_f1x8)iLHMa~{E%Iw#Ux
z!k899>vE(7`MjM%Zbf}K8?8}dq2rQIj|9F-@G^Cwv(%+?zHe7VzS+ccc?_F-H`O8p
zREP1XIK<U`{^>5^?un5NsI_5yViQySc4$Zob$;afjkhc15mMF_nsXu-z2Ulxa<vxb
zYnWa5%QJX3$2AhWYJ#e_i%`{bn~c~7Ef_Q7^MB2#_SLKkg24XzbxHeQDKEbNH|6zz
z%Wk@14WWFGq;#cpx?me}h8{$VOIb<A;G7h>KoHAdD_M~Z#s~r<FVAbp$Ek{F9PL^N
z<j)FVL4is@S?6!gB9fECnX`NR024fRUZig_n;-LRRW6=1G}tXE%)h)d*0QsIn&P%Q
zUyi3<i~n(b!T7l}Z~jK(8O((DoDClV!9J#2<lW<E;Mp%pB?IMB4k!Y*!QR6gc}*?s
zbkATNc}?5)N@B%(*u~(|3^;jhIoWz;<JrqUPW*gQ)Eb5^c0<TTy~TjHxI_1K4`1+3
zk$uJXedn@0Ju~*|3#8kZ#4USe#QT7<?LO!KrF($aeeEA$ds}boux@*IyaC*O(6^7g
zb8`>5b0E8O65!iw{~0&)55d-FGBfw~xU};P!`5dyQy1cuM9^L;oQx1tP`$R`DhiA>
z+G4K^)AY|*Ma5t{p#xXV?8SW!pHmSHa&!ox#D*Dlg>We1fb~VP8$K%TQbGNc7x^}Q
zxHwt8E{@8;I%Y_J$uU2esw#6C{p2ZRrG&15kytqFs2~Dn`DHlR;b<N<^n<J6Z1ELL
zqM5!nAvPo>L&y@lpBa4_dm5iq{9l94l5%!lnf_U}qI7*_MS}|LwK6kJ7{!{&aPE2<
zC?RC_k{9`8JC$H$>wq#&OsrMb3W(Rgfu;s&`A@C)`>;qe#HKORu4<%BK7VV*Ech7G
z67hl#d^8&BupxCzK%Rm(_`{rnF(jUR8nGiEY;#~ee@j4h`R&BbMEM^5v@|maOAapT
z?4RSx8xRz8qT=YY^^Bof*CNJF5EL`b6jMZ4aK7~~N>c<8n8fb0StgOS20jb8D}j8S
zn+aU3j0%f#Sesg}R#I4GvDwHA?6sn9tROAlv!s&cpfhfRe5ULrRaack6*jp<FzEK)
zpf9s08VcIPtCWoqfE||_LpeHQpt3VTfMz7r@C4dox)9FDl%<x<aa*{mg@cUg`_9y@
zru3;ybovN0-9f+p9?*)w!6NY#Lo8;97}UPEX`{&xCbIU5I&A+KAW$w5%VRs8NZX|^
zT?@O^5}dTW+H(>{swe@cTWcTofg8Y(_6fZ<B-7Cy%xg#m8Ek}DT{)b|_U#VWYrz(e
z8{@p6yXC`$N>jU6G770*lZ(KWDpw)`4{UzkzMwD9264QZ(S8hPT*PLaSQi^yX4K43
zut$qulFQ8Hc|au6^&e`Fln+-h9?4oZcTg7msFYvJvSjiFc(XWWLBg$@r{OJdO)+WG
znOd<X@hS+cJUGP_GP@W@EKw&<iUeE8Q*H$ePlmv(Pm9A$MKFMeAiZW{BQ6Zzl7*1S
z2uoX$`Ho?-kaZKPaS9<F`lZAK<m=raZZ|PK9x9|8n{K8I5w1}jo93s{KUS(IZicg}
zlXef6->I9_%nT)^TcOI($br-C-oU7S#zyy>s@c8A#4hZ=)G}y2_}+goZ%$;jnPDm~
zxuKMvtV;`aB>9P0d?m{8IpFgV!(LUU(5WXJ5D?W~)h$HmgO1$V#X!=h4m5u`uq&n7
z8svPN5sH+~(eIE{E<kFw%?W40_JmoVBG{uYE5yubm-zWIP-pXSr+&7FEwLp!q!_P6
z3nj&2pRJ769nYod^QTr-$XDlB_=|OQld=3=nHXrISiUIMR&=CdC<-0`ZB;W;stT*}
zt7P@7CZsZ=Mc|wzsw0d?Ve)su46N`e#jZ^yLMH3;eiDo*I7dv<^H!=pQ6+l{N%?tO
z-^SlvNM&3oKDpi@eo7BTYx@c~lcGVws<?1xu+PYvn)K$N6e&Ktzd}f5%0h@Gatd_~
zn?+R*K$tml4ni7k#p4o*eyDrCrWKz(j(TegExg<-L$qoYANIwDPuO>I1%!iI1nK!i
zLKr_K-^E2gMbaR$Jg82KsLu4@@QWuNfKR%QZIj5;{ffqSJQYmn@n*^UkA76TDNWzl
z=9;!n1+4bLGKt#fK((9{2Hd$6Qi$jRabN)T2wi3dfNjV|wey}a|HvHEaR7%9)BMJ&
z&YV``J+)tB%&`>TyWY?{rN9jl<*+3H-ciw8HgE3Kst##IvBa>jNq~+?>h;rPbMzz(
z_#QkpV-|_fkXqX{5(aIK0`iJ<PSM)ne3P~WJTdcmnybN{9T+FpAY)K6)&BUM%Es_7
zL=Tv=a`V96lC)1#Nn8{kEwY(mb>nvjLt4!rtL0~;S4EYtGV9p~$@;_5a!-R|s!5D4
zy{(QfR;OEBbzcRzzW;s+3X^IJ3*h_*;_2O<(fOb$kHR}6nyV7`a3+xbY>!Xo?GOQs
z0DFg?vEr(*(Ba%lCe(>)7xIepjm9zAN772gwLFp|M8>ld4la1}fa-CBZemLJnURME
zDM2Keqk#Fo`q^#1ywn|gGNEg}H6c;XE+gCoACG+Pn!S;@<Z(SKB{dcI_oqY)VUGS`
zdf{ge$TELO<wN;<V_)_#Lf=f6Ro8;=jFfk(_INTYYm2qw4+!}r^bFg4)K~QcC{?#@
zq-}wj<&8;}nk5uHL)Jf|**i*>Y=fq`OJo9Z4rIIf_EwhUw`QpXJa|QEtYV;Xcw*C6
zTE0uf(<tFkgNC{UNTznKete@h#+6+@k{2D_t|<6-uDM466HIhfVGGN-d8KIl3j`Ei
zX(+Ihyyhf0i5@q1WI5!jU-Y8qtNbWFPiESK?cb5zbsrGn6SvrWH%?CAJ&GhZ_{`05
zd9h6>dBQe15|nf;$<qle=NeiaGgCefM3T@2{5ETR2Az1UK}}e(2ll&2a!#<9XNehv
zB%VxAO%en?%0T>N!xCmBXN6+nK`%w2TnYnF`Fq=9Lp?1CL<5d-Oz233#352E2DK(k
z%JyNo6d6s+eCPD0uM&6arlYf_2W#^)G1FPvzh;sOt)^TVB0aMLx(4&`84aGW?;0}y
zfGNAgm9PaUe6a>5P0s*~-b-ltS{6dli&pyDmUXndWEK|emOXtQDiNk_eN5qsR%^}k
z0f2l34GVqF2|dr88tws?_bd8(U0Em4#oA^Mk>qQP_Of#_IY+#Tw@3#15Ou?}uIQd8
zH;lGuTi{?2|BU1y1C%ytaN=?#$)dk%1li$mXVf^#(h@oT7NGK3vIwI;HH$_5=Uf>B
zrc=+{vHP6(9^NzgX`V?dt{{%h#%$*v39UdV^CFCAYp4{BuoRzX(ygO$4)p{_I)X1i
zc<fVO$m*eI`S0Y%jM)7Og4$nCa2iS;+#woJr|t*m3oFR{I5g=isX>F8Z{mxZ2(<XQ
z{)^Bpi=h_gNSH-aYNXbE9_GJ%%&D5i0#OHllkNivaM_@(*@dc7v`3cj2uJ#!qoY2?
zcLq~wFV%=TAu^vUDEdB-%W#(I9%yF?2_lvvkk{JUO9H6Eg+ph}FmMG8MdNK{<RuZM
zx7mfonaTFHo_|5%xqaCv#wL>!anlw#kt9CA<qJd2w^OQ-1kaKL&k<b-<RT0AFh}6b
z7eh!e1Qi9<Y+wp(#ZtoPr!kY0;lb#W>9SukK5Yflf2DmpK@t)Jf{tVHB`TS(I|?5=
zkQoLrf0%#d*|(FAvpt)nM}tr7n9(G48$6(|^NPL7%@lg@&zO&<=x`Uuj{xzeqTlR#
z>V_@ljaVO}a9WSXt($r%gx(Y>@+<d*60!OW?phaa^vliI!kPq(zjrZPi!2EwR`ONa
zb<mV^4GbbGn1t?1e`1I^)pP^OA+!8~X2}%f;UpLhT-e=Cze&=tXc#M`FqBK8C_B?r
zGA34Ie}_a>M%!K78dJJtk#j~o2Z)Ou-_yszB`mYXFS8~txAanNMJyC=P={R8$2*^L
zFyYKBf#pcTa$QZ+pMr@8#xs87q!Hj0Xt|QD7j;nYZ%E%=wX?Urw(MdKc-Arxew3iz
zFlBp|)3(kMzS<yq!9#YVP0f3w_VFmz!LRIB6F+k-c)pE3Jtjp2w9GAROmTNEtPV^l
zFs7cJm(u+UBu~a|2ohA6P#f}~RN0P~uOhDJqCq~_nV?poTvi~lpAB&fMlzs%EAb-U
z$*MdABxUYcSDk<n1%cGY2ACFeyHgr~IC_I@S`c#swVa91NI7#nY`_}fi1<((b52rv
zZkGe-SlrQ&Y}fC@Wa+jI3-``srVK?dXSu!(=h6pl?JPE4a=130_og?O*7Yk@ikbHL
zHTU64S=uf@+Jds*;j|0zZYE5XdF>cgpRT=BmSku~DlJ4W?UX&O^*Obop>O*V&1XFw
zS<UdSnc}2VR|oBUg&}c!12L>(^7JfNT4Z=0|73<vdfVjii1Jc1P6tcxE0|qI!yh1Y
z`6i94%FU_EFyWR;*uvRUi?BXr-ce;qdixCrE>b-Xjwp9ly|C`0Y@RwSbiYGwi+^>L
z-IRQzeyZQV@712tx*UAHW^V5U`ko&ATb@h)MEeg%OTa0^`uxYy`b+m;=_<DWFJ1MY
zsX;fTC6s?#V=#0~?m@&L#Dm~!g(1X$fFZ;PB~a~{)8!EB0#HbqV(B^3(M-4N$^aUc
z+T^s>ye;j@l}f@?gbZeu)|O~j250~m<;rS6rZr&MX5I0+Q;O7fJ5E3D<^s?0y5nZ+
zf%Bs4CF}6a74N5}E-~$Rh--6?$e|P-I?W5$^{%7iZHw0DJple?SBLZ^S&#MF^xiLk
z?mhtAy`dBYUY{;8)LX7TmKTP>J!q^B{^QPUjvDbq5IOd)gYNCtm}?rZyMKYqjS|gw
zDKz~xBcS%-l{nFs{*5%zmf?*hu{4cq>X1{ad*aYjs(a=T1MD3r5s&c=ArX(tEoJ0n
zHR=SV6Q90bl9d%}@0y><U=R_wf){n+z<N%PFn>YGTw0_+pPQDRqRJMEw6KIXg+8!8
zj<&9j$q0t|8B4@h$rd{bt7I;9b8)qXOyF)b&wNnzu2N_U9cT(zv>NjDcNb2jYW4N$
zmD$d0SH;Q>&T3u%&fHozL0w5Dz!2bfn`mMkf^1v^E0XAeAorNTXUvEip6=mAUz6Dm
z+RmR>^>DeHqGvcCC4|LE1o`uS-IMUEJ}*5gu_STD$Pv<MJx$}jaRjK+9Ro6pBM%-u
z{^8Ls7B?28@IE}OHz-An+JF{`ydt|xrFY9D=<KR!T1*O_82tUw&9;tC!j_UFT8_S*
zMQoF~MW=mg3Lzq}!v*I-CJe);pAfvd@ae04%?5tFV0|q(xR?^lIvC+*i$^RE>8J(a
z7bq{%ZS*wgaSRo+Jkz^WKl53?8hyJ0tE$kWnVUO#5gDS$I0}@H%(8J0n%OjgS+R^b
zR*{?2+__$lPU4i5LTMrf+}y!xB3Hn)L;>IOgrHP{g(=E<l+k1oq(C_Dl6!P-IN+Nr
z@Pb&U7b!gW$r_n+TJ(%yyed2%q%<kHUIBcZMmYBTH^)WOqa1NN;ol}xCaqIeb{R(S
zr0Tn{@)t~CXFv?2TW(NC;<4WRCBuP-U7orPkYG0g8?7wqy2U$-Vl0VR@q#)riIqEe
z52T}x8b;wRT2tLX_ifVWJPmZsaEOq`D@Swi<D!e=t>nCazZEa#CM3HXc;H=7H=zv-
zM3u9P%!P|0*>9ry?_*%rPEKs*K;XvVK-F6+|HzT0{yWcg=*lObb*{Us?87Jl6xx+5
zGvFt10u?>+tM_H#;Ev@MsGzWaw;S#n))oUoQ6j$7L~qc7h0=5_6Ud@+{xs9`a6RcL
zjAI*5W=4K;{pD7w?;_{XT=44*Wq(xw0;i_9yHf6WogP*`r@*O4<s*A9Ep#Qe(yERV
zP?SiFpPD=oDYQuY)6Fr3YXp@0$<!rEy_T5E;GlGKu<-+<@k}1bM#uiD^BAv|9F}mM
zVTOr7?vJmPkk2SU^bS5eW(ll$mK$9Do$O^r@Z%h1CFXbg?t^Uwz2wFyqUo&<jyg&Q
zyX*Qmhpo+jA(2~x3REy~sBUFw4~61|Giyi0hRd;I>>xRYrs-2rRO|^;%FP5j0#ubh
z!SEF3B8n+l^0bExsO4`pQEK%85j*<T0V~Rb^*Td0ci`<QP}OxxS<?aEVZ0QtjS;MT
z9-pAT%JuQN-@}JmDfgt?3b(E(wg-5W+kL#sKZV>Xw|FR-v$gv@ZmL6`owp8J`3jDE
z1r4>g(&Z6^dnV}ciI7srq(f4j6}RDtq?EE`j1<a4#1!b9YM_Li<`GosAhRU&|8|r2
z)Lxb4MSu{F7Ew`B7$eH^?wS8Bi|E<=UqN0?yp+xt*|2)&x|T{#WAi+YG|RnVq`<*o
z%q<_5NPBQi6@`sC#T?lOP!=S}Y;etpv~xXhwwu*P=YU#^Fjs_D@hZ4I`SUw^R@hdK
zfm1)!Wz2-`o;m@^N{--iEP~40%iOo^CFB<LsreeZ?yMC7<3J1{R7U5USWAVb&21|g
z^%UQmIMO5JF{V`9q+wH9;($s?rnZM4*?UX*s_>)Ps*K7`wa`tM%CnQ!c1L)TW3fSp
zu3CH@=(u@#zY%X_pu30I@|cpIY}ZP;44(`}RoBNq|6Re!ZL1PB&E+6%u*PUhRf(TP
zXjHIP*C}}$37Xnoa|eHP>#;gRW>C)S=&iAF$4mC_i%Zw;k1}}_m_7}#sAtylCpmTx
z?U9_k@+--j`hkKo?Zk%AvU+{=IXSfHM-40%9HpocG%hV?N>Audarie2uEfbLV=K(0
zY-Cja<Mp5)neyPWUA~X!4OO5*nOF4PbM9QZJYjdHJwPS{UIJ%pbGS9lvW#F0kU0yy
zb&UyJZpM^O3kChPnKpgIz^%LoLS1Z9mY$<+mXDXb$jmD~ow^VUW#PdSl2bNaLWjeA
zQG$UIlcw+j5pf=}w+$|TvJMVEMRplqMHMC!3_i=!SFIg{c;%90{#CZfVo2hxsQ8Ob
zxT0^@2l_LR*>O(I1{@Ex1|K?4n9+|2(a9oW4)~~4(H^tUV=kN)`df@5&Fl705_n%U
zK9S6B%lfZ5K93_UOyOY()!}hRrYJkj`-)Mz$}5Esd8^chU^b7sWm;o&osOgjoFWJt
zUNe*j7LCrF_E3V$$y6hHPwHbOwV6EEi@I$Ey?oGp!?>?o$jfE|?F|1z$x3@t9xH+-
z4FoFVpz|+s`#s1q7jN1L2zhf3p<*^k(!9t_7U)`?{RP`tSOd`z!u|mAlkN$F&bVPh
zmU0^iq?baayha~hQpn9PN)K|RDpl2iKjXFmrDiWRFFM7+DEDjJ7EY8ME&>ZR{Z?0)
zlPfjJ4yFjrB5jMIf2t3CUxM=`wNXp51*)@AGQrLM7W1x)4<0UrE4dT{peE~oM!rpj
zDvPh*?+aEcHU-lfF1l1PDNB~&_aF??L=2b8@J#p!wrT=JJAinuL>4Vr_48erG60&h
zC0mqFT4D~CG~8Qd#9ivL&yt?&S68c15N8)eC%Mt+`B;o2AYf;%HXQ6B;jx|m%E%hB
zl7I^qw+dG@KoQNE1$upv{$K*%UkpZ5^aa-DIFhBNCJ#es_=OO=!{L<nbML75=2NwK
z<aHdQxokN=hg`*0w1+iXirLFP@fFW2U<<<RMRMX?EY)K^orbEPd4f@<OgY6Ecm2jb
zT~3EsPorMVAX~L~U{)+1LssvY-ee8Q$yUTAnJ}D&ImXSna&W_B4-oH^!V!K)&i6C4
zc0DutDvpZJYdzxr=uQ3jHeKP<i}7ZkS%GF${vMBAfqMn>S|q&$4VQNwJYBKOM#TG9
zWGQyP07e;{WP6BRiF+91Hl3lO<X5Az@o8+a@>RV|*%-){y6iZvCsD)&2G_x=)YXUS
znTmT1<DGkwC7n@NhE=#jVwvRa9ko1>N|vz7txhGeyf&=Wh&^#-pZszp@db(0qK-)L
zv&4H8!FH2+a*Dc5l6X07<_)cLjBs`1g-*-RK9YKU>tsLYT12qLkU{hBbu5f+c^YP)
zak#;wR>BXRs>Yp2Tf{ELF2)0$#mj^phgLN8akxm=?xX1aB-Zn*Pg~Plw1dRuwJs(a
z&qo~`k-+S?>`PC86+44&_7GPPyUQ_;=rI*e`pNMKcJE)f$>=wRo54~zVQaGE&ZTds
ze2WKp`|KgFfGQk(N!ipcozsa?IobE?hh2}&U-BwaE6dXA9BfJohR&@z=W<aq`zDcX
zYwOe!+F$M7ZL5kJ<P<J%PLWkjk@lADx9t4aK9rGo1D#Bpv3cfnN&1te?+X=`L#KNT
z2mDEstAX<v@c9nIItEfpE-ia5>^^WK3$1V@O7}a0B>X7JR1bAwBFV>O3$0MR#Tp$@
zU9XVKv#ox^j+;6{XXbvyTES@bW&vm``^M}(A{8psL1_WPHaGu%y7<5$^pE*im7st9
z8X@_wZtmj$-J83jv4e}bq49qiM(a|Cc0*oq{*Kilss>{iP2khx8`cX#{j(npvWicv
z-pmIAX>{ud;M72^bs6GudyPlju)kUj*KBctu{LOl7Bs*@D}5#uusE4pt==kfeizGR
zF;8F-&n%fLbe>mD$YJ8-#GIOr&{k2~Ddl`|o_?EYJIV39-eUE=J5vQ}lAjD@{7gso
zz2@iLR=GtnzkQ+OF6-4*wm+yv@d6<F9`K`ltAO>868Vx1?MU7^pD{()irvBEdLivp
z47M0w;#J<tzQ%+`-bg%n5+39hKhr6A=^p>H{OjZAt9W~ZOWnIM|C%55B^H4<5tJ)-
z#ar~8t6+D9^SKz9yVt|z_U9js_dlYce-b<Y-0hHgQ`hOZ*kW|=fAs}+gd2^=7U`9|
zD1;*yGisE`wSi;ZvP9-XQ6N)L7MB^Y9qNlH(fm!`TYy;(u`qHfLC&DhAOUC~I0hp-
z_qXUofKix8GKfZqP#jAz$mYKVMWo@%h9Cun0CBqzAFjBb+WS&7r-Ti=j1+{E^It^^
zJ*t_mqQzd=_owjqIyL=8j|Lm?xJZ-2kcnyHDBF+RYICmZoyr#@uTPd+@3g|puVTWS
zg=G2=K=4*|a8iqfeGeJfRNO#&`sn}gs*h`$nr;~E`(r5AOeVPJhfCyy5@=FCCL;G{
z*iP4n=#h~sjU;Kz_S->)JYm)lLAO;@_L5=B+uGhC&9{xW>ce1|6;uDvnV*}1q4LLC
z;o>QwYKqIYEy%39F9<k@Bs-@ro!jNyH(c$Cck4&HyC8M!kCN+5Rb@Ja4!xfLJ)D87
zClqoVWO2~3ffhNDR(g@9izgXW5Z@{weW{u*Pe7(L{3yhTx;Ca&De|NycM~Hl3h8g6
z+Qj+fwu!dLSz=i~UKk$Op!86hB;wYKBhy{UqHUM!5K7=lF^h#ENeYH|Ia7#J)7TzE
z@+g+Iq92P3GlW!s;GIACs6LM*3zta~Ttm2cvxo#<2n6mg5DCF~k90QPn@~2p6oiSS
z;yc`fiiTMxCGnF*fz*xT>$=1yV4&E`_>7vy(s9j5+ojQ?aWf<#auq2MCE6n3#@6#r
z`J>XxxN4cnnnz}3(iS2(%dhK|YMa!O)St<wU3u{3JL)>Pg83{QPz}S53@OnRVM=;w
zJB^#$Z0$0LCWG0x1uBq?FguTLLcjgk{!*`=h9Ah0{*wqSmW2Ql=nIQ21Vg%<&ZujH
zxH(@PzqF)=$(}PJ))!)Z4xy~nEO4{UDX~X0d{yD&9o9NP(!w*lrU^N7qEV3tBj(ab
zLPd=^n>Q(O$9`A?&|L*7ck|&J-hVtqU8Jt;$07$BtkaY<csB<RU?6Q-#X@&w&5B8|
zSoc##jrO)_XJ;bI$dZ)?W_hPk?D<W6PF?pk`*rz_ORpKM$)r|SMDwMqqrro_KRoV(
zfs<9%=l5bS5HrKsV`X|mO}H~^l}K(lr<Mu&muD~mr8R3C5jUnVC>vf?nK;IfoX@>Y
z51}RW3Z1u6&XhMJ=cU{2Z;d0jz&?QF^6m-ole0HVM6d|#6cazRVYD3AiP=O1vy(GI
zAX^Y%d$vfWMBAP%zFIN4YDG{qu4!=t_<nZ^OgMu1PnaO5>kpiDvB_la)K0d2&~@x^
z+SQKD2;(RvIzE2y3AXe0SpXbPU*5i?8r%*_lq(~;qGe>uF4BGtrJ*Y|<dG+vCb%QO
z9*#c42qiM~Y~v(U<!z7Y7q2P~(X=WLWw#0r;XfmCl=8O<R5^(vM4>}h%hzN5#?G@+
z7iFsg_ulgd(VX(&AfP^f6egS#LNXQHBR!xu*I7Qq+CwfL8@0<!tws*9RE{FZpXZ1w
zYtljH35%1!GAoRLxRx_Zl(-@ui4b2JG#5&wo6ID%>oiweAqoNEo<)vk9;?($EWegW
zW?4WDZmw{m(f&d6t=A}!UHx%CQRbRdxCP=W*q8T`%co6lM<CQ<uxH&sjeLul0F^Gr
zZPyuc6u9Hkk-J0GQF`n44wPV3$Q9sJUKjp?x>7mgc2gK4z*rOXri7i%lkilBkX<dE
z|FbnHG3SFKdw_Aq*{gSIBA?Wj(-#>8isZ7D3=`@q8coJNQAN2W&{E-qwN<kZ8ULiu
zRXmS#h*bWej7i#)2U}KjV4o~v<PZmUPcE7F2L}<W2fsl5{L0`;-@b`~xR|Y~pKK}*
z1{?8UM_f&3lvbWx%53c4T1?%#wS#R?<E32hEr&02CpSBz0TXck*ZhKJ|MPw=EjAq;
zfiacc3p*k=k0z9x>X@4Y`TF{Xt-4J99JZB15g}APpmzEoOeKt_gLx)VHlINz0*cE9
zB9iP`q?C)~CV~_!!O(CH{Ud*h9reV}C>Rb2|HRqHzN=c$2c*o^(_uZ;2eg6H+4@<L
zIiI2cZwm`jnoBTKVm<GsEy>7SA_tpo1B%q3s{3{5dG{R~V_?zgS<wxU)&Dibqh#9E
zyd?YRB=Tl-Yg&_~&FKn%-P2X;su!1MykI^yYR3ErlY#d7Y^76pYTBIk-s-)IbW<mb
z$9=RieN#|Q;I3w_e$ZY(_?;wZ)(o6SKN#+9Nzm}5Ni^E++G!g>OU<p?UeYP<#(8B;
zTzeNlFS=`QcjSEJZ9Ej#XOMU3Q8<mDn8nUf8)QThc#mB>)ELEODdnTr;EH%nMfx!V
z+TvF!P|Fr1Dpy*Fk<Yo)l2*R+?4}8!>L?8<s3_7bz7io|!|}7jP(fP@Z*|#ziXFr|
zvEXIb461t@MSy3T_km}C?m!|BH1<w&W8_%gRxna^6(tTD!c$pZOm>L1X;Zm!4YLl2
zr=?6`Ra$wzk0C-Xxs}_6rk$_>O}b?3n$=J9??&;>ZY!UKhKTpdpq!@myckk`cF}3m
zYBMjRk(($E*uXJd@$|M4rwM`)G|z`(+S(2B{eRz%BFzLb-U--E!nM-dn!_!<GEZ{6
zH!Y6nO7qBV*+b`3TNMHbXsL=6srsa~R2Puy@K_&Kh+=_B@17>LhB0aLtp2el?W{Tg
zp?sWSC#lM<IV|t11S%Y>#7I;FJ7*Z!S0Bc2z|<H!z)l7{GE&ZP;463V5w_7~40=k7
zK?lFWPPY10d;xMC%Y10Sn>9%NSdb!0^iy0wk1d^95TI!g22#SDr6>%S4)Eg>0?vil
zM}`a54faNUpy9>k25W34Z008$W)sxwdB(U{*3pU2l&b525a~^o((B{Q*XeX@r>U!_
zR5b5`DVN!#UtIaVH~<<7vr;*lYWqo#=uE)0vaLvTGYo9T%CJYySi8`6N-Oem7wN^C
zdCp(b8RQx}<BkZlDp<g}2G+(J=|){Xw|>$;BGl*5w3?uv%&Q!EQ@0R;if=_TH`J$j
zdd^`6Pi)7KqNNpqOO|a&WavEli0CK-q>d>Q>e*(!WEY%e^NraWYgW0xMMvpn%M8Lv
zu6bqbAp@ipnQk$Y83$k3lrjR=cRr{n`|>o~j%L{74vRJ^tG}f$j1#x@5*bI52m$E(
zB}qXPM>L8rWvSW62c3=69*Sv}VUqefP^xfud|&R9WLf<dir$6p325n=Xmx(9ul-T%
zZp_lNgR5yn%A}RT6k6QG$wL&>^?|x$8^1JoE1I@ozPZg7!Rmyt1~shdH~<7N7BIS;
zets^{A^=V62w|F`f-1FPud$|;SqN}{C|u479*3zP`ia5X)WyX4L=LN1U7ua><BkK7
z2T%u$Au#x>FYUh(O_icL>R?o`&3*0q&TeYZ8;VVia?ao*gOY_)+>wZ92U|n-7S(3v
zl+xLZeo9<5hM4AOhvE8nViRTwV`(VM&`YM3;<_Bul$`IQsTAYq{2Usj-Bq_ZR|$wr
z0OwqB@LZuVeO~k)>J`1sLJWQx&Je*Btq`EYUZ?|{tjW{9#|0SP{AR##-J7kP+t0M=
z<$(Q)KWh$`h1#ua&%v23pkq}AULSI0djf#T6|LI`IlyR2^N}<3VV7GUKfUk6)%!|$
z2ib|&Gd`WTrT~BUZ=kJzOv{wbee!RX*RR;tg&D_?#u4o^ydiMucfU6Gj85CUcVL#f
zNE>DsrjcRkkiv%4=8dm9e?aIn$aoW3zJ+YQ4(FKWOVZR%2DK;io}k+#->ap{<qzNQ
zE4sgvnJAbQrO-7@Vx&B_Zo(J25m0Jf!K_j7$$`r{u*0!{yo6LgVjdmahE3U{Klvto
z?FlT~t_c`uqb${~e%I$Rp0{PF)*yMr#%AI4=Q3qdO*XEfj6orTnJc~3B(22X@T>NF
zo4|n{#GKaj!PS(A$Jw90J?|W?bVPk<N`;Y^HYZIfdn+L?_lD@Pt{S888bofNLDn#Z
zl+d?Kp^oic(K#kMM9GZekQB)#DTKp2`XXY?8D=Vp`k3@vzkckD9GQA(Z8kzoXhZC4
zvR{7Zvh?-`e8Xrosn*MTPMMs#K&yA;Ghw*-j0`%i4lbnNfeqlpp_?E0;xYl~Zc|<f
zH2^Et`y14E)*<XdpEvt2Qa4>I$T!&<ohuI47chOrEPb{OyDe(BsdZ8x4bpWhh?hen
zx73ketw&w+jv1C`+P9E3-t+6_IL9*C@hNRnayxCGwuKrW5!RfOb<G2gZ2_Cg(^rqm
zD_4(PI(DVHhnv#6j>WuzXb%t$8%+E)Oq`?M**ND|mvTFY_%Adpmo1K9Z9A-ga`x(S
zQ`qz*vbfbHpg6Gu<_WGjvG=<t1iDR;=r<7QGq;YqLi|#xlW`fgibt5w#HnR#6;{~V
zbEQwNRYc*TbtX(pM|q~qLyGG_r_0}7*tfrbSvKL_>%SZFNckH4UN!`}sAv9{bS04J
zk^#olY0K&=)l#{CQ@7811U)rlMYS4tTzj<(J%!ino-e-VF>*ii>HZuXqByGGc`2}&
ziFb#taNK>#D40LLe}wNA$mz~;Pm!XJoW=C;3-mw)S1<b;?BRj5!DT_3l9;o7F57ke
z6b1DL>Ue65;^A&@ffn=m$P$-zpKA(f5EN}c`)&Oho-Wrq^zOX462)G*l7)9)ux7C1
z9x!IPaENGgesYG$@70{9{PlUHwM2*9SYcyv)Ky_K=w4GXgW{4?$q+)PBNN!|a|VVp
zj78cY5KaT*Tcx}&duxK4=}4ZQG1WFUgEV<eb8*@>pJvE)5oeb#t|c*reIk2Da`0h%
zxn~;%UjX$9`pPqfP4z0W5%!D5Z+fS2(>JPTq>c2;)$s%Odwb%qId7P2lr67z_-|un
zx8M}aotari?6R`{lTk~re_<+Oya0?-%76b8?hzW~sO|jI&Jp%w#K}qi20{J>@v|^J
z0(gJq{eM3HZFJ@TS?m9AyH3O1>&LG9zBWoog^BGXj)MRJA&HCo<zELuS|AP)mjNo?
z3yhj2g{!Z}m^j^8x2jQT09aP3RvGd(FQ#=S0|BU96#!fsBQ-YG+g<Aa!>m*Bn9fdR
zrTa1K{P}&ph)%jcwz+rSrn^qIJ*Rt_@VGwF{n`xlaZ&d!sBsPNU{PZm-TFoM#qlie
zjA*;h2UzcDe7>xGzHodz#zRZ*v{7fG`d@zb%?;J7KYaEpLF_w1&)Xe2S7>hCYdL)I
zD~9hYd*q3G)@66^zA$Rf?H<Wz!ccANhb5lQux;yyCTgvnDxA+!s6%JTuCvXK-W_S=
zPW>x)ByZg-QDlqSXZTRA`e*QvuKH)R|F+4UE9yVJJ6X^hyAN8=Cpyp@$RwxJIqN>Z
zZlzezf<7K1L~V>{bOay(JN9y6G=VSm&yZqL$hTgZW-OH1);p=M@2DBv2#haV9(2|s
zV%Vd~ix43<L05b1QpY>1GUp#d<LeX)P^gV_%}f?rOB)OI_Ihh)OTh(7pgC&#b_POg
zbj#0tAMVIy#Xs>=-)fmXsgn`Tz-#&*o8)qf4MROsx;Xcto)w%?X7rnat%e$z9I8!p
zI3bhdxB_QO(Npm@^VDIM&scqO&XV*daXLDpb!3;U?}bK1t;%px896MW8rmL?yAdiK
zK~XW*x@&8j+spBTERwyVJS{I6{26fmn_{2lg#o_MhnbBQ-a2+-k@^+!UkN&0tcYBa
zHzjoZzG6J_e@4rpLjs2p{i`A{EI~S><83@D0U!e&n!dKFxL1#^!A?2>V!e182V~ag
znRH#l$N2I0DpiJCS$0L~b!JwvHq_1`b7Lq>j4(xaV|5dRbJN-0K|C5hSo3nXcp1w=
zx_ZxH%ZA3`ri?5U=q!(Bt9TkUSQ7yrWgR?!W)17bym*j5Q#Yl2=;Si{XC1PiGk0b?
zG|iiOMCl||YLX-Q^lRgo?xg8cX0-%zyP`)h!O0jfFim0~lEvwmV)nfzYz&Kdt;D*U
z5+ABoIwz;hYZ^N+)*t)qTDk+5W96z_dH4Plk|DhD#MrX0fiQ8PAN=|2`fI8Qciz+a
znYgeG;TB}V3}E%JWp(Q?A*awR8W^%IJ|bZpT#2&nxOMd<qT9nSS@q#*dE^o?$_jjB
zP8nY-%?a$W=?IE9J141lx_P^uW_ADmIhWQ=jd_N$dMZ<?Uz(pukb1WK<nn`(=}n5i
zBxl37y9;yD>S4X2f3%D8(k*_Gs}pr?o~<&S?38ouhf=}`@b-U?c!EuDxUI7N1A#Cr
z|Jd0`h&$aU=IpqNnt{<j|C}PPeHlS(7t^s;c<L6vi7ELcSC_ime&8u|hB+RW!RSxN
zghazwh<8ZOmVm^=&CLXyS}cA_P8&>DW!s{#aFlNRr@5R?s#gPJkk<8P;mD(?>_}W&
zP+^>j@EBZJ&PFSz|6hI-ArRx+E|Db)zq#pBANbw-8h&XESB73!K!clrj4k8wxaV}E
zVGQ3oCUD^=qdBFf7E>tl29tJkQRi5QZsNU-6xt5tjloQ#Va?Pj7mG%2`kZr?kVe=8
z27?{(W*u36jeEJVBhW^Z2XvdOXb21(*$3xl*4%KGz$9A+nP7mBjW)i~vPpN0m~T==
zHohwQkj&CrCn6<BoyZU+wPHOsl@jyaLb;jzoqUzDP&1{&A9;HYOr^_S4HU8iWMT4(
z(IHahL;XlXFG^ZIC6vM-O1u5NlL5-<K^GML1~QRIFJZF^@?I5X<Oo6(&a-g0gw^3f
zmv~`9$*n&gC=4PfhQjrf5`zpC=w!oG1_2SWd)UfJ5#beS#4*bDI5nz6KjcWh0|YiF
zW&6&waW`Y?lKQmif-K=+N|P`NROQX=F@qFJ6G^bv__ny#^!8SNVKnlo>M1`Ix)m^G
zCBteyb&lYo-p+wAI$=3I)e>C<MNpSC<?3E^s$9#Kb0mLE*3RQwmI~!|k|RFi#n~S7
zL|i};GC$eTB6AI&@T|XL&he25hJuGHymi;$-WED!@S~r4_VHPl_wckE&2_t(Ox++t
z<0%M_LDe?l^$~mzQQ2e(M@*HYc{ZE#Mo04>ARh7nlWGb%#;W6%r99y=+bO(_vhMtM
zYU<2AURE`*l451w1hj_P=pC@h;<cmoJZRnIfvVeVkpq!&YPD)VQhjGPOST4XE~V+x
z@vzGQ4kwqszZTd7<a9;yhp}e@ojNYAh3O@W*jD#Zu`&}F-(y9pvCpITng|byCJaO>
zyHDCl79YPw9H7jE7Y$;{CKEKFSr(kWtKfSYWVwkP6_@wQou}ClNn9;ni$fI*N<+fE
z#7G=1B83^fa7gZ3k+<a-*VEVq1=O?UhqBf)Ex%`=bW^RRI?|f$_hw_~l>lImud!E&
zqOF6V67UZA#j`Cqsu5~@C|d+lW)TBFRZEWb5P)A^X}#s-+|i=km}Op8hrWY-3h#y3
zDm;n;R6VR4-M&HJ<Xy!+m6t6GFUid}rE@!!in$7gYYO+0S5_VcS!p6Qh1(kE@=Fo(
z<KA+Vkq$3}l@5R0J>#{{)}ZmaaGZOTbYvZX9e!2A>d-*sqVngva7#3~NX@G3!@SoF
z=if4%{mER@%TSl)h6jwaW{Rhg^RuM0P3iA5L+T=i((k>Q6S<4EK$2|wEX)dt1Kslc
zdgA#O{TrS!U<+6x?x>1yEJtaM$K4nOu()=XblpMdB`%EPi*Qz3;YZ_I*=t}3buUQt
z4n^!5^e$GjI5$$^1-#gV-lJwZG#5(=2SqxhEZnQ88ds>9B`LCRlw&)~$AIhOb$zfE
zkOsbyhQ;zf3nJOQ>#fFlp+=*_Am#T(Wq65@Z^Z(`<BH}d&ai0O9cuQ)$NIG4fS_s8
zI_}#iux~ial!-aYqsqYLI><lU<(pH|F}JAG3VYA#gbDS2q_w!vB42S~iPVJ4k3JQI
z+d~3AZA&C6!RbwYK&4GeSEBX3Hc_Rah<%9*9FD(6v?4F7I$p5dqQPP|V52kcey8E@
ztnZU|FS+O^xB!`$p&7)uAe=Wvl0;G%nIl?PHQqvEUJV#|A(~2>NLH2SH!Q-Wikdg2
zuFEtid2ob>cjT+MpXty4iUFK9PcxsTOkx*os3db+{!0A$2-CE3^>}z=w$xNo1rT;>
zTKU-^_<Hf^GHqamc8tLl)S{Vcfl3Dy?D`U$@<ue=mBv_4!t3JfI{iOt177+26Ns}W
z!Xl*H;kLsOcZUziELq=<s#EW^M{_EgmfD&{M<n6hEp=!6lY7Zx$3V94$#$ccVUkU%
zshq!I<)+J5?6)49eV+<vd0y({JaBnY^b%)(sHLf;VS|C1u*Q}$N0&6?YPTe=w?in_
zuh_&l0#Vkp%~r1aIj(S>EMExAwoKc+5kX})uOzT7+q#yVI5Vf~pbv*f2Tbkq+x#LY
zZzu5vnF;@X*(bpl^kW?UZvHhjBK%4X5KMHfAN<Jr;b|<dRSdf|MKEmw;Q_9+ra%r$
zC2!p~+6VJ{c4YwbIB$^POOlCYIw=7b$(*~2a22VzLFY%;N~Y~Zyqr<zX!gO;=WmEN
z<H$;;ZNGU~qb#uL(<udg#|qZ<bD9hx+KVGbr?;awDZyHBoP|3HnoiDaeEbXUh1)ZA
z8`3ciGwu`0EA5;U$_eOL;?TUJqDd61nbu-08vZUUEmIj?C`T>p2*y8$IMc`194)IY
z(9l5@DaRUK*VyYuvR^B{q!`k;kW~)>NVh4DHOh`PCY|{`H&{3;!iQzYpnpzn*=cHv
ztn?vHV%s{Ab;d|@nTeZrBUGy+5ycjhQ;vw4VXo3|&w-kP%*o&XOeS3RX|V^rO7B0$
zT=n_6DRwf7xcoq6juf?%ZS9nG(sCToY#ilz2)K_j?~<j=Iw(q|Kb{AQVaGdf=#$YD
zFXG2P;v9P_9k>J<t0Nh(T=!|i0<<JnyN?sTh>e2=*f%NI5BG65Eh$$rGKI^lG+J1b
zJ+gukRa0eO?7ao~UJm?;^Avz3#={kV(<Ji2?-Qtsh`-re<e?y%*+Pkkiyw(afz{0<
z%PRz=W12;SU=Dse-7BRg7r=hkC705sj8MsaLZDVZT@UPozXfr|OAt5yK@MMN+x;Cy
z$>#Sdz!411{y$i|2OmwptzFdJg)ZCfvTfV8ZQHhO^DW!1?y_y$w(Hbyt(BdVFF7k`
zXYaq^NuD|89OJsjFmC)HE&v)N$?5KEzzfq^i8Xm{4$%UtY)izNw5g)(V(@LcY(r`i
ztgI_oje2CHFEv=S*^?+)i(YuV57Bn>-%ZRx_>>Kc@A1Q@{~D<Azk9Ly|8QMUZrJ}M
zY3L+ck(g(YSkIj|=EGRmXOc)ut|lZ2WU?3&OG~myn^*N3xn|g`jE8Kjbc28j4Y2aS
zm&qoD-cr?AOT>plf<p#8{}2WR1yzDq(jl<BJU3!k$(APVK)&<#yc*B;{8!iVdkNtL
zu<eEmn4gME78Gb}4C_+Iv_BRI_BQSO*1iCO4NZQkCdj%*R1g#~+c0m;HEpPyBbF`f
z9er0@HY=~)4(z&mRL65mhvc>3`>^mt?8_Oq)?gQ)6^<9dt_P~A)xU@9&xy|{>3b9}
z_b`@+2RN_mjy~6JK!omfov8brBpT2&%Gb3e8uEKcEcc)}-qD0D==)@Fuz0uZHAK&m
ztnYTf*RVa;$Pw>AChyJR)IYLp>iUqj^QFS?2tA@ef(myLee^@ZNtG<m3Vl%kfqC%v
ztCDiKOUQwmRQ^))C7)5LF&!cXG$nQ4Oc*Lgn60gPVL#B!bS-MQ&AwpW>x~wN*q?|v
z%vlwNeO9JNMr0?E0LZ?i%eeCU{?K1ZX1QGO#qpz;VtlYqV>91-%6~yM;@~GxSH^_)
z@)M8R39yiz!Z^f`z$+U?v*j*Nrx8->>mkq2$CZ=IE5p_(HtO_cjn(hTdO-o}3&)&#
z3lSG72S%`nETDuxUf`&Jyhs0KW*MLM67sKmtuswfEWF#GLDI^_oHJt1Lm$T&6`;qf
z(h!3UeI)1izGy}y&^8QF=-MI^HGI#syvXrO5c)<w`>ch!?CgT}N;A9i&fNCY7zzb}
z5~@rL{k2tpQ7=4*Q4_(EW3<pp=n5{jB?+a;g83Ul?TeI0Q8tAi4cx6jyie`4?kx99
z1aX=h7B6RznMJTYlmE&|MP6ROnzw0=qeQ}?+X8+5rL#^f?|7iA%0-l#M7sv+voH;?
z8m6ATWp<DAe=!3HXz7N$Oi~HV6c?RNZD$AN4|nXHrdt@btfDCN@;j`eVW6%uEE}aC
zsWKt;`1vx77d+R=*Jl#V*oe%uDsB?D^f$@12FJ#)Bl?=jC6i;4p?b`cR1U9J<4}gX
zS8-=eifJv}{~*znZOIi}vk08Z|5^@TLZdG|$NyOe4fM$TTz`~%XHqK(J2Y~5(N^l_
z1B;oa=CEKC5$|YLcqx0zqz(Jan!0;wXVQfU+DGTHev4UgAx>W<xUaeShLy;WmZ~C<
zn&)-AB07s0^~6TxKq48(Ripd{1(sN&aFl()<P-9Zdg8{#E<QV=jecT*hw-6zkfo|q
zXsx|l6O3JokX!MONvZiFxl+0U1{#yeV#$n4l%ZKltU4Wb-_~|q+HBt#bYxZprX<Ce
z3ENW_1+)sxGzfbhpg?bUts#uH3VLH@-YgxX#i&-yB!V4-Y!LbbvM=Xp)ac|HRVr$V
z!BLu}Sjv>q*1(^`?Pm>r)(0+D@Ko*gJuXJcz}1#s>-N|F6M1VYo8t^}dHIZn%$5}^
z^tlocX4!)-2h@oFkNEi(8trZ~`R0=7bp?Y^lz|)UfhKhue^{t_<QsPLamMs9yl~MI
zE6m-pdXD7!bS$0zk?Zi~C>sP)eH1}aSOL&Z@t8PJV462;1WG%C3$2uWELh4whvk}h
z`-wt^zI7ROWkL;{WRM*WZblZS#gR2~=EW0X9YI4z`l5k8mMnaR5S{n~d(gL9aif<?
zzJ3)as7g5_VW~VXL%D^EI74TLv;yMR78^c!CG7yj%E(gZcNV~;T!XsNK&6l#O?)zg
zypeIGmXV?wXsT=YpW=v0#LQ!KHWx8<l;}~<7ja>uIkn{B@)f6V`^6}%(q{rusbXY9
z0%6rWe5jWi=JN@NnLu2jx1#xCku`caR|}Z<j{ZbD3J<$;@8AauT`_z-4G-<ZBJ_yY
z%aAmJQUf++*ENbB@B8T{yckp(rr0X&@qB9=_#KcIrZ%Pf@h-^AIwKGQSZVA0lYzlC
zS)+`Ox+eWtri2+1(7pshu(NP;u|_>gPc_v{VaP_l^!@8T6UX)z#UVg8zp<`0qf>v&
zAl8{PvLNzrGV;sJ4}nL&aJ|FcSMitcYWSl+inwf0ZbFhyihere)tRV!@gT(H>*e-+
zT@a=&u5_(00MhLJkz<y9QB#HUe%rL_L6#SVsQ~tHQ*W;t1)Y4N8VK!NUZ43E?@nz-
zX70b4DV@xSFT47sNh&R*cCZ|8U}GMl#7m#eoJnJOu;QfM%o=9CB)DKmn2oSn4?HN`
zX?gJ)?X4+u_4x9JPBD8zv3n{<guYshN13=J>xiXLvNGI2ApqOO&MAxyPJzeU`#Z?M
zGBl*A%gID0XZEDkMwqME2du}ndiE-Mf`ZoFT2y=!w>Gd3|LFztgJ#?TF0Cy~b_Ghj
zPy$CD@`c2ct86}z3)N(~N1-(#Rn9F#Q(Bisj$y;YWI02@(n&){$LszEYBNGDBfbRo
z?h8u|>}5j(cEOkAdpR`4b8Bjq{VQH(xNWm!+pUSm7`&3pQP>E!^*8R?|B<TuXQ*|K
z%Iq4Dt7Qet$dn7jOza;e^NqV2yX3~;XF$4zc6M^tp{=qhn6XO>cmz;V@MRPj7z8gs
z&f@tajGGvcAz0jV^}8F!qg0UdfVnb{Zu)?~LYcW|*h55A<}{%mlFsFi*~8wkPVnKf
z=TUF?pBB^vrwkl`77cJ7Xne34!emJf-`DQ@$d(=8gG=0C3(cT7!FN=UJz>+<N8@GJ
zs|D-cJe1mO>Do}|QlCz=pxnx`f1RKr<B9n@HNX%JS~>)}CH^#rCGCbY4wbJ5%sRsZ
zTuuI{h=bV8)p~*`ZiM2u*|vnG8Acq_3pXMVf2nW)4FZUM7Z-Gn^%l$<)&1=H6=@<k
z5P*;bnB6qYr=~Oix9=)zd|I2G&7aKEwwgvIwU=#U3I61V@~#u#vK`g2onCTy^^`vm
z&okhac)?P?lJTgL(tZe)zw`l_+lbXrTf(fodoIh+m|Qij&57Svx4D+m%b;ExGW&}w
z3V4HnTEqCYHs^GK(L8Ni5&j`iFjnXjyueuQG&L=(ycKk!nwQao4osLvACR8;qS+D}
zzveb1Hy*-AmP3Rr8^6XCy>e+<JN!Ylx;~Y^@zEJ$;h~V@Umi`i`7h%Y_-(wH{xM$n
zo6!Z5_#U0E`C*<(L!R)=nRD0=pb5_e6zjC{;=0XZ>E>cPvUvR`AxVtT<f&NgPwpe;
z)kVV`d~ge)bdmbJs92|`HL0@&vuFDA3Va=+3new;K;bFld(wI=wueM=rowEgUcW9?
z<#&Bx7A}|MuY7<d*KG}=->9G0Z3|TcK<#tGTVvs4SA|*DcTgfO2~J&Sckvhl+PH~q
zH)jJ*11y~osipxWU+c&v7xOjuR8o07{)P}qLmjnc?Z5qB-s=7^a0P%~1aD^a7K31N
zF$Y61k!-Jcq1@JZyfG-o0?2@gehw&*j}jwDE3mH?k*kqN3zsm#Y$%|36k$FC)R!q1
z2*}##$tGr;HN{ImN_&4aC;mFv4-8!Xs|w30?d?h+#9Pdp9Zn}sUHl>#Hcb)zdP(;&
zDKK9vl8Jx~Fw99ue4VXh(Ug(OEu2xq?l^DxVLOWYn|ayhXGh&o9`9efWkea>Og=>l
z_!{GANvUkf+SKzu!dHEv&?<pNv;z!9#cy&R=ujhj8KQx8%_s00xACYy6c{0kP{R}`
zEdT@UrR_vWib+OcyRxQx*xoIhp>S9NZ!r1F#d#p8fDs4#X9X+@008x0$V*WKg-1Yg
z!Z<7P4jSVKYiIFNTJ;=U-UYnMeJ^f&SN}JTtVT=XBBj_F(ssN|zrzVpWd548(M9{D
z)R1Gh{}C0iYy~59JHLV+QS??g`7GvmO8YcHRYRC9^FYh#;r1?X1QhfY_YnM5wp!<s
z)8#<>wpZk~qL>{k#3g@W<6nYhOUTDv!)LbekD!w-uYCaz36Z~~Cnt&~uvc^rZt4n$
zh}s|X2Uo&n`z_zfOF?Y_lR||jQ>Bu~PRoL$o2yH$Oiehs|HwLQEeqap1nq#}C2~bV
zN7(Z&HTprzGAM5QM&X*OiBwi3O0PQBFEUzM_K)hl^wj#P(_t$5@M`o2Aj~w)_^~t5
zQrGB~hF~-4Hf+knYeA&%;6KXC=l0lXcQ1SO(Nc7(nfuw}(Zae(xndT>zK7brLow59
zPul^4^8u$l2ybiLSh>fWN%f&#>;I*^mezV*S~1tIHww+C#~N78;Hv53q*K0?m$5K?
zb??*cGPclWzZDIx?=e2h7VBM>W^N%KD#lUop#2D|!`?!x$W;yC7DdS^WiAS<Y_<YF
zM)<hEhcIWTY#z*vORP&k)=O(Z(BsRTD{=}sNlwQbHMj5+YTi};i}+pg>S>Snn1bSO
z%XRstFIdgl-q+j=N)PZqv!VlM7k{3=uUS(6ReAmY4u}6w|L8y0tpCNly#9&J5J{;|
zskiqc?!Unlu>Vt+%_bv2lS$Z(D6h^^mz@+8H#|FtFswmX<sb){q!Y(PP5qH9FedLI
zx0>WIz&5Sm(Q@B?g{1MFobj`hRb%Yd0tE`=`2ntLWhMKm%h6=B0nhh!NAzc7gs@I!
ze>M-n)vZ2rqU#>_`(@YrC5?|qE}ZM$hZGMT+R!yW$rIT#JZ)<#>C?o(hnwF>AWtdV
zB;H^;SHDqjD3V*N5k&YMeu(JvMyU5QIPL))-oc3>S8^opVW0VPYk=(avp7kv!L2z-
zuKuk$Nv`27TjCVs3s530!wcf~D)wpBG_T~5r8F<?zpQTWB$+qVpj!xJSkp*vh5B8#
z<58G5MSiETLk~ixR7p~&Ov)SzGipMz;N!8!o`Pj*C$Xdxa$J>ASvcTWh17&0^oVns
zgNPyK&?S$}PA4OF1RN%q;XXdemAN$e(%bj>dAw}PT}{50PkOFPm))QIzPfg<u|1sA
zO`L4=YcpNSe9xeV&X@`*ZPdt;C&YXsia-lxZcH|(;dMbar}0e3HvYGN0Qn#JDM=X7
zO&|s0-^2^7fbb?RT_UbrS+GqD=qHw<r~WT?y{2qQAhej%LXmq&ZUIzLLHZXVAw3yS
zCS2wz6f$$QX6Zj0=0e98?|e+vV2Xu(9tLzw*oCagKMAoTtf3HCC#q6y9Ced`c5Iga
zb~^5c<kk-JbDDjG*|@9})>rGR$J>{U1fS6(28IrTJLkN!gy(I00(F<Q{fWQ;kerp|
zh^uAa>vJKmRc3O_bEB>x!=8;4#XklITqU}<U4gFNg0EI8u7;5P?rP*<Dp)#VNSq%q
z3K4u}dnSs_bF3#zyK_iUS2(K_D2b2AWDq2~L*uAHU@Q5ntLK#659L;H6Xp|VFa$x)
zEmX!#o3Wo&ub^_uHv%}O_f|5^W|<Tzpwy7fWEl(gN!%lH<YSKu%XrPhpI+W33uKij
zqBV{IjQ?cJ4;5M4$EDlH@^64ND(EW4V|s8)P+FZNAlIjCe~}Kl>m5Z0<;@G;cnsEr
zlx)Fn^}zbhU_awQUz}T${tG7#2HEgYX-9gnjRQrT;33<Kj<S4to)sflEb~ibkI;JH
z(#@5~C<G*BJg8<{6liI(G-U573aj~)u+bAS6lg!XfVq15!VXA!iog0#NJuu$fQ0MC
zIeZxWpGZCPJp3;60+C4GoTi@<L5110PvbzMO8&r;yE-6(l*Z+*Cw0eUe}!h*YoKKp
zagLCIHEolrL3+-JM91!SmKmV}(OSPd1Uew8Z@aJlQu?ks_Mn0(k(9;T44{E0Ru@w3
z6DlY*`}6=vow-^bvS)}5RQK~Nu9^})8O|384p?82lF1P?d$0Q6Q)%wZe|hkKh|r8f
zRNb;T;b@V|(Se~n<EtYrv{YMai)Up<Mk~qyl3+S1uBw=kYH^nM<IeOd_{=@oOq3Ty
z;#r;igR`Xht9QJBMJV_e?2{;GL0w`{D(fN~?W!YWoXEeY6Q^z%P;iz@4OrWiD*HS@
zd*p7Ao6Dbxo5`P(BS2irpP79KYrB^NBnMnj?=|0L{$44+|1289yCFsKd_I|yqA?}+
z{i}=eE<Lby1Bdd}-=p-7^(B9;i{eRNu<PrlF~Hb)&7oDJ(6Cd`>xqh`h(g>u!G=rX
zm_{Zgk?y9vgXEZA%9TA-B!zMZFv8Zy3Bv}E!!kk?sOmW*tlBZXmy?ymg+cl^4H!og
zP?YIVcP{0}R1W(H=N-L}bC-QhtY3JiV=Cz-BX#n2=bp}l-RmufITt-%E+Ao$2rJF#
ztNfua53}HKfa3anf=Ye<Ua-O9jO~P3mxkN?X|uB+Iy5eLB2wKAUt0-md7;4rQBr*7
zror;Dp5Gi+?wl}%llG1bH6W_-8bV8qax6v`t>F#hY&)khSm{&3@I<Z5@g^|xTe(Ro
zdgwrIW1CD*zW7$!M&fu5vst3u*HOTSKR?<5KYMI80F(MQ|NNK=+raXA%I)k1=P=Pq
z(Eb)$*LPBCazd}oDw#GC3v4&>!>T)y$8*JRlE+!fXpO;vwu&G>(FE|;7$9{g3zgZm
za2InLj<B*vZjjHX8*jZ?tX~c$sL$9ElRkR<kTo-qY=qHi5II4q^W06}1Eq22;`!oE
z<HLj5`F^cE1*jW?GwkGp(ew#VX3({cUM=8SJcmEd>Iw;BV5<0}?qOzq&uuh}d2<H7
zT8bFqjaN`aS)B8IbnaX|7v*rKW1J@iY9eLtyuCKXv5sI1hCMynzUDHmvS!w(L#+7O
zT9;;N<Wc_jmsL@5Y4o@8D#2S=VB(dXWSxmExA4%BkX5ppOSQ>(n2CxIr84sZCyqw4
z!wWTY!U+vMbi7Qg<Q78f1vWddvy4uw(Drkv0$R`@W|?DUhVi3Tfcf>Lxs5hEE^HW#
z;|1B8K;@^B45~%Uk5-I9E$7qzgO*s07U;NXoB5k~+3_ZM{)NFOoZM+yB^L@zPo^|O
zR;Scfr?hPNhj>{G(`sHQkjPo2)(5fus-2)Q2Kpvm09XZ(r{9ec?wV9OvU`E>E{6x|
z<G7LRIE#_T8?fh%$ZCfE&*=LgUO+=uV$|wl-BFlmhN;2R`ofh_2o|z>)ljkgO=oi%
zC<XOWVWW28QhaExHmEv@{Uux8EMW}|$Ox!Hpsc#6d&*2Hwc^oxX|6!VK>o!@X|#5X
z7RUKowK`oBd!?<QISGcY+;>FOl}S^V<b`u9O|Z_Z9#nHI2FZ&g2Q>KS9HRjJAamj`
zG&&&d(|VFU<kPFl<#oXd@{bu|g7RjhvdalG6fGO`CbyR&6|4<u6k^$h)}gxXYSSFE
zYOQ6a7{xGsglJ|(A2t-o6BiyX4KObaQp`r0${CO8Vr!9-X5rJekbM?4k9K)!kA|G{
z)at0Uj#@bR*(K4*9%Op~R-+h*sF|x<DF-QdJa^!aZ{X!wb>`w`5u4m-N_AqL(^%v_
zo1jOHQSSv5`P7(5+|=0UBFhOEIhcQ8Zd=JciH;FDNhF;QI$WSrs)0A!=)+`=X3)hF
zcGrmi+++=Iu?8@XE|Nq#8Ba;pi#Ns~Rq8QL4}J6$AW1?KPg9{<)I3sN0XY?mSH$Zx
zM^ZD8oz_-gQ4T?VoMSsl21dNf3tkfc4kh;*Ec}su35`BE`uy_EyKs6@?!7tg$Fh~Z
z!x?XRGRsvDOJ5_n%5!$0(Ob$q4#btZM%5QQO!xPhlxqf=)yreVJ5>+moy!=v^UceP
ze>#5aE=$I8ST#~56n?M_u@y#J5p$$KQ=H5bZ(o!R3ROiCoj}NoRVsPq6f)Lu4-}nj
zLW|i5$zjM%%LStHmh=m@NF!#>(e@l8oI$P&aEhkFbjA=jMiXUClQwx8K)Y49XS5>~
zW|p>VAvJ2vMEJlNRp(umTB!<E3VYs0)&b6fz+TBZpH}FZ<JEx3TbCQ<OkaAk`jbJn
z_N_JS6M-bV!A*62r+mhvNMiO^4ArMX=O#x-tcj8AMg@{tGvijeXHAMN!6EA*U94eS
zwz{(s&-rj?0o~zm8#_H4@~9WGO)jja>@+Bqw?Tu2!@}Jv)Vp8moO~%cG@e~~CdQ?t
zj!*7(NSnXpbtIM+soDR*U31Q@;-_*EEqgeqj+ssBNrS~WLw9v0O>(p6w<jv<=Bc~Q
zQacU*#$A6$BiG^bAAXV{sR=)nD62-6^%dHH9WGu7sc#IFR<8+1ovdEEtm6;4?pk4*
z!z91EDvHYq9*jy<0^|WNFHDbn9ZHr<dhlC=@X;0Ko#Pk6Q8^;wy;#?VmDzg(nb(T!
z-NNN66hUf!O*U5z|CH<bt2fhP-?VG<ztS#|@4+uaTWeZVTU%2rV_G{0TPIrsXA|20
zLAV@=lx@syoQxgp9E_cejs9J<|BsOIZ`Y-?(DbQ_=#Vgi9~5^@2jpmw6!!zavmb;!
z&MziN6rXEhl*kbrI5C}#@h6Z0xk8h{0NA4H!s8;U=0ij*th|?!X2rtdrl{=}ob}bi
zX7{;u7u=O~jY}1ysf^5ImcKZIM-Oeo)aF}O(_+tO*VC%yRp;yG+|*CAB2I3yKfIDR
zw76D-nvkE$nD6gRV8PGQ^sGJ=+pfaTU0?%lnmV8So9`XSzDc{Xv!=*bVmElW@1&m<
z;9t~No796}+rHdd@9G)82v}dL0Z-T60@rzvw)TNxTk<)`FO~j~MJy5#0_GG7lnDiD
z8MtN1V)+t|jq?%!bixUSvgl-uHe^F?rWgt?CGkCOHUXp}+XCc7E;cdKkw^+S*qN1C
zR`m?UqBM$NRY>Uw3we(iWM;_hv%d*M=XXL58S@q^v>B5&3fW%Dv;)xOCKB|L|MFZj
zWCPg$@?26=sRsVYN0N1N5l}^D2?gr;P!PfL+>2NdNQ2hkV14%7t4Irb9(vNUT<8!;
zO1f;7qM8DqYErQX8LJ$G8!+1OVya@c$KfKo@iChhFjXGkn(I7Vw7?QTsj^p4o-R!d
z84`Fi5cIx!f&~Fe9q%WDK8Ff@R^i#fd2iOyL)g!KU>z^xYgWjMnbf?Z4!?z9^kcMs
zQ;#f96k;p{1~52}AIDMH&O3RkX<2e4kUJY6z`FQMbq=RpG_;hCOpED{pu$tmSoBsn
z$cSh%j-u`1#pfhUw7R)eNO_N-0}Q+oq;A@XS%Fd7kS!jvdEqm74mGs<X;)%HK^g@+
z=*1Pr?@QJy3x_V)mW+U5gCr4kq~Xg%a>X_F<Z}A!IZZ&)jRvq8!ImG^brv0>TDQ1s
z!@UZq2@`3D_|#BsthiSj-vY268KsE`?{XT&k>oBS?^w7}sYk2I_-$Uo@~O!DLAyMO
zu8F+^xwLWluz1;Q#f_=!b@ouDLydiG0^MULm_|Cgpwon;KB&{WxLPzeLeUUWWA{QL
z=VsA-vG+yu_u{hRw@<gzaVfecn9oLrKMnnZGWE21U2SJ1>n1D*2kM5|0&mhzv8?xI
z)5YVbo3EmS)>+Wsz@jp76OFbn^JU{JXv>9e5y!)#)XB4q@^}}peNan&5hzS(+UQQN
zDKGt-I)2k`U9C&1!oUSlW&Tx!j+;tyPz?0GtCAx{!P~ov7A(WD;nnp`unW43n6!E`
z3u=hUiQV2VstwA1elyKU`34MV#J<($8J~Kn&yER9%wa4uR9yoTk~n--D^n{F-?z2m
z?~p)3=>DKgKK)Pj%rZMheso^8pS#gZQUT5FUOmIyc`)28>qm!nF^xw-%?5;D;xRHW
zu)gDH(|tGFk9j#62M5^0vmBHPf9J0wTSD|&Ba@Sdw7NIcGC$2_@=`naOX=Rlf$3wk
zHL=3&6Ph%ig7?aF9;v%hfuD)rX$~K4+%JgP|H@e9&-$GPMATI;cD$dcX?qyjbcs)#
zd;lujm}kcn=@#(S%en%+kE)uO4v%$o)-teK)ZNp6+R#A{CS&tsRrBL4VBB69d)sed
zdiryVQEcPFSPQV<jCz`wiI;%+S4?cr3UlDWzPux&i=~^IzLZh(Yw)u@>mRg9ay|q5
zny!Zj#I?9KBS!}{?_}{YP}&Ut5i<!d!yr-sM{ZB6ed;Tq!r5w^+iUP%;lQStTgY<s
z2>j(HygRRq$3T7?3}gC{ZohiyjkR<AHP`97os+qN>?{VeslMcNKF_&#zDU7i^32Jp
zUQ}$q1KMC3dyJkP2vV~W61qc|a~wx74?d|wex0D>z9{NZnEe`&N92$!bE7U$1c|ez
z+>fAS&(0&F#-K0;Sw%vHU5zTjkEdJ*nrbgqe-M%nZ@ZNLU{5mEzPsaHGk^yxx~n6j
zEvRD%SC)PGU~8JKv&W^t>77ERRZ;*4rlb)YCULQQnjBW%=+9EV9GEANskADk=|)Nq
z=<M9{_`ufz^XIV*tqz5O^7w-V;d!7iZTZR}38-=^6G$y{V)vE;P?}{*_?*If)=<uu
zDg2O^5&R{yC|M})n~PneJR2VF8|S}0_8burdR-eK3UCLCEpx+`Efo{HD`I*ByfiY&
z?qHxy?XsiLiroo&X%DboCrD^F3Icv#D4C^7;Ge3HRVskAl!c9C;;xp>CL<@i(kJiE
zk4?_mpgisJBtO!Dtd6CW%0_rw1wBTdY6}0QUzbT^pu?{46wGfzFubmukvpN__}%PM
z;l%8%_0Cy3OKPVC5Oj)`2t7%p(57rUJN8KCA#TDdauKp%oh?yr|6cEMVuJGhk8l|o
zKkr*mI9IGw%;3HyATe}-(jSytOcH28Jgx6ZCK|VYTShxfRHD-x-<}jRQ@?t=U_k_z
z6!mh!e|B&YJNVECXB90=$BbfnUR2{DchdaDj4=xl9CP!TKEP4|FI!=*eyIcL9fFjJ
zZ-Wt(;jg|%;JREvc=OQ3%^gpcXoA(8VMV5T3=3p5H9^C}$}+}_L$M*_w$AG@t?hA3
zcG3!bw9j6774P4C*&|JAJ-q}&y2D;2v&n%OO4YCS;^h^xQ1`p9+Sj9vf9(W&MTT*I
zOnoz<WFtrg_P$YwZQ2#{i$Bhnv{GZO`yhg4>(zy)sAw$tA*6%wCy)48m+)<IQ~Tme
zdL(xTt0Q=7^q)+s%4FC}e6qjGx0g9?c=>ehA3|wHq1=D?8{R7bQKZG(2K@{rdoh0q
zmf#1!)UkK5)^S`U;BM4X@sHUWZ%c18>URa-#PW>V{ion%v)EZ;gNo2EZl^-()i6g4
zJ@<Pw9%Xv-<BhJ;w_))Yo<@Sym=nIV+TS|>LTYrPik~R)5B?@(rb*EbvWc0#%x)mI
z3<;UhFx_@uf4Kzen8w?02;AchyW=?FaF^cG#(T}1y6+34#!f<dj)YH_MHF)H^v0dK
zm?mp8(t`}NQ+ycUq5JdO5JOR8f5Td%PyxRlhId;N##jd03Tx9afl*DOMFLNN5;`9v
zwjE+myMF3DK!LH+*0Q>XVwT;gw3%X0FR`h0)tMW$x(>&z>u<clwAVYr*iBB4o3=6%
ztz#H869Nd8vPp=HY7L;!G3upK`{Tb)hcX;YdB2G`Cpy`f3N6bW%-sC8BS;(O>%<1(
zsB+Hm_o3E=P-`tziIOMNYe#KqA3s=-=acxtR&p<T%2d}q*?he*@hA;-SIA(^W1^&*
zg3`+%K-G7Jash+vz9kg=l$x?g;4^1zMjh9ngjqx?@6`MAgc?nZD3nIgEfB)I9K0uL
zrbMn2u<nRRJZ1VvWfJK6^H;=E3;LNiR$`ZLZF-tT`m%9)+El`AbrBws3Zh&#*;ZW{
zS)Ec4JiYQbgErOikXgxj2g?eOWb;tL5Q*k#(nn;)d2(1ry`$7h0nsHr99+thULtM%
zzG2FRa<NzPurJbqGepuxG@|)~;rZP<m1|UcN~}WFkG&>=%u@<Q=bZIpJMwbx;!_Cm
zY(ViO$Y5JJwSPew+0x+hybRsKBjzTO%bjg(@P|jr*xnJr+juFRNr-;=t$oxN0R=$c
z<=#+$m&7JPMHA<yu?&xo9u%?=eTa;LP9@Wid{t<Cv7Anq6H9v42zcSSh#P6aD`k0%
zQf~dcj|b^{azLazL+uL)@+v?>^@|yKG^)IUH(We33rTry*?@Vp5wrMSD>FH~7^UoD
zNVzx}Se%k+^8Vw~BZo<MH`zIWGFf(qs&^yJu-%gBYM1}ukX-2|fQR#dr$-u6YO=5R
z6{Hwl3@I(cPjxk8rCMei+k7eQ!V!s0c6Dyt#TsZ1pl#axVmnAuHZG-?vay1KJ~p|S
zuT~)nU;$=cl^S2boGxcJ0I+~vta53UPl)ny;&n6zhgnK5*D&wZy5Pr{McPYg26#3B
zSOP9vz}s^nBw+d$Mpi`M*wc`2JC@w4nePoBEe7XX^YZGq@dZIFpG$};%$R=xW5fA1
zJU`igy1%#v`8K_G1o}q5zX5$^JU^M?c(RiEx1H;0e~e=!gF=jVV69nge57qLmHW(=
zVn9%pW-?Lu-yx~Bp0G_R58C_3d0{sIHi<y+M5E_3zXL+k$R30R&Tojy&>+i(wsZ~R
z+mgxsT<9YjS#+W*(mI)2wKO9s8=a+eI1^ibb~IH<Z3Ebfv_r6(#_W~WLO7XuFK2+<
z_~z`j*8Gt);APG5xeA^4+^fK9%<KcV2c$N9l;{wa=%N8`n4ve~=~ZqM1Ru=b>#CxZ
zUomU?W$Eh)yl_~zMRL;19$w8qH-ZXH_|j~D1ts_|9D}>A@}$yvHrz~5ue(y(IKp{G
zX6s-1SuS&itVzE>O$cjH-6}(P^+W9ESr?#a@}TW8jt8c71G{FFw=e6)=%#V)87F1+
zB7R55EB-9C7*teCiM<#0g@J7BlWVe+|NfY1w<O7G#Uz=<MJ{MHCtQ8U+{H7|#WRp&
zazNDP&0Ijb9sYr*2$|84V<N%Eg+RFn`KVamC)wN}K4U-ALJ6l!$nY()#@#P`cFDy8
z7bH*bq^|DZu5J|PReGv<n-+u(BYaB+FB0IX50V^8>F+MAJ{`FIAF%{q(m^}7%z}-;
zUl$E5chM;?B7v~<U+i9+SzTaKcMm13y0+4n2O&FNnLAT;J5voiw0iB2eiL?G#;v%%
zeexmKe$1YLqev~u>Hu2%i`L{8rcC#-<Dv<akhjSl-WbFS{xt`5YwA!iM&oY^Ja&Sx
zbZ~F%HK6TN?#P^Nm+T7;mwEfsk=-L(F<P-8G78~f;?$tSc8{Hg-!p*pdw3upu@jJG
zWbkHP<Uy^_#U&Ms4*s=RU;_}}Ad=6?t?%_DFLX_lC??I)GMmy1c&waA7Ehs!H7QVV
zRCp<%L?OLSBhEEVt?}u{|4OKM-*f9t(zT3*mdc&7i}G$aa?Fsesg>Q@J-#lFX7O}t
zg_6bG^jave1|5@^@br=JtgCpus(oBie{;1CqonE&mx@|o!+6W77$Rk)cd1US!)qOV
zGBvU?j;L#P%JmuN`3UlUJ;6Ztq#!h;RE%mf`vSG}4Q%Q;8C{-BN6$PoI;U2R{jOYG
z2QBcNhrd>pKh?QX{p*xNWanP%I5tYQ>STLNb2lf4m+wMYb;pL)6g<l+9(n5@dFvis
zwJ<#Kkqn(>1~;7_o`q%1v<}X)e_l>i-){YpR0nBgF8k5K!u_Xf=;x((=|a%xDVJ2)
z<P`dLxA|``c0)f+M)>WlVrYsAD0!_aJppHV4?jxFgT8l4JKRI0=hC~@*S`BcuN4Iz
zbKfyxH*J?*?<`#s*X@JDM#a-p_6_wbnw)Wa<VY;gEtWYY&@K8|B}#VYq#hdrO9s(W
zImAmB*A4MaDC&*i%1k(uN>kGAv)!E#s}p;q$%Gu-@6A}(gH~-Hp>Q#4+RsBf9Zf?E
zRk!CshSj~9^#}W&>=}qQm!|B*9@nyj7z=n_afPpa@loZOn(DFTnRY3K?Q<wDDTOnk
zc)oE#pGMC?m%XymMuI5Kbnlgw;Jib$v-4R(n<ooip4SW574Chj-jgid^wmt_jnluW
zUk=R=rQc`WJ|R<Y8v>cpcDHJiTe5+woo^d5Q3=PV0@pu5c;W1&Ut_1)_S(`>^BeNe
zYi1qxUY?u~IG`eLyl*k4@Ma`VN|=9T6!ZZ7^G3pOfCgL(|Kmq9=YJz{vi~P<Br^Ke
z#&Y@&PXFVvMD0Iwr1cX-ndahx8Hf^`l>G^!nM~&7!6^b;+L=Xl;))tdS?4md)S2n6
zoNH)gC~`Oc0b#QQ;1S40dhXT~preBP^89gdUVa3-Q2hLSKR@~%NfK8^j94}rHOHS0
zCbK!8-j8@=Jukc7j(xAX;rNg~k%WGv+TR`gHraE4(A`1v&_NJF=++RR)lIZBrg!-z
zAE5nyL-Bd*Y*T%Bh>6>fVQc4T4ZpOLIq;0Sr#*$#Juw0EZq52+vwuk9^8x#0bGV6X
zQ|bz31GC$)j3orpa<hD~zW&$H)xj|}$O(SVo?Q~wt|2z_%HEMxc4KOSdwqRu!h0Qi
z`_RV*H|{!)PhLQ>c(*tR4;;HoCHAB^<yh9N7*%`2b`V;d5B97*MGa9kQJk7wZoT-?
z{KBFaS#1`P{uR>`rjWIo`H>WQ?pWr5iDn@oUZ`@53Gsp}sq&G(3Ku9{78<qxKCMkI
zueP{Z@^@{2m<5n%Q@>Lc^}<pWF~`CsTXa$jIs)@1fW+Y42JY8*G(7<^wamabILEI&
zy=GTl(;KHwm{v->Z(N)|L{U4%CE%LLsHwO?$!Hsl2>w&=WkyK7M_?~4ttKl-N=f0t
z%otd=F6Lx&wnW5506z{5#e}WoUC%K`%B_rQ6DzUb=P|4F5M~kx6%|X|hrE@B8Ed^%
zppwK2PdMh|uW%;rl=x2FYGo<ZP$?$yj1SnHRz)qDCuCHF=t`E8d~Fn}Y39<uhp;NY
zF<vVtPPC|D;qCFqGEKu`w^9^cAh#>yEvplz>zS{)Dd|6>#$0?;Gzk@7*<{^vU97Jv
zE+&O=k6y%*%m}xprf1yhre<2u`H4V6JCqjt=YAc1j$*d+9prRK5B$Jff>)Ha`FPAw
zgG=J%iO@g2`-i3W9Y-UyFGQ>YkF8Q-I*_`=8Nr<j|CmK$ySjB$g@-MneC$bAQ7h9)
zj+4v8FuVKY_JjqO@q!{A!(LTHd_JT9IRq(A?#z#LCa>Qo7-khKak{+$r^4w2mT5T|
zRLT~?B5Nop7iK2(lcV<KlqtLj%Qrezslppf{LyJTs6e2aruK70(+*_9G@N#ZsIf+=
za`j@+^l{f|e-@ucjR{|}**JKY#sQ(bqw#d4QPtA~v^%CiM_ofQI~X)M4`4?pqi>|3
zG_Sk|U7=6s>k9LP%$>v4mzzbxQVeHDPHA$42#94i8B1K2Dn2Y`qP9LUmKY%o>H6ZL
z-;r}C{elCp>+}mXpzci8_y|xg=w%?;Ck9^oIr{_VdcI?7QN#>9VFwH{pd&$dBK&$Y
z`iAsnCC1}_$(2UFV_Rc}nsk^q^%Ib?8%qA%NGfTwj>B)T?&4b>m6gGiaf9I2%M>v;
z!9YJpMbTKr-9R-CKND+ihAc4n1nZ6+_d7sLjk>}1<bMpMK+f1;D(p3S6s!qsWE5*+
zHku7j3wp&vte~>eUAtg#LoY=}GZ-ur2_C5iX8L$Z4cgvxMs4kYLiD8G5PbgLiDmc<
z;vF+PqV@d?#h}xxYuq^wUZdCar!nfpy3DO}qn7JXjb_jGxg$#TCL_w%?#kIFrOud=
zy<M9vGSits<=T?c*UVIK3qFlL1tj^p_)n)`ba{|3<otn;AcEOrCidb95ptx42Z4x}
zeR;{y0Te}+A=}5y!HR?RxEXYf3mwrrC6rW(w@R;OW8Hr3mzY~-b0_v#dyuQy5S}45
zO6erg7-BbXGlq$1dC!)Z+;1(CPt6~lWBV$O8Haboz6o38se?ms9eJ}D&iexjzl$t2
z*}g-I0TY`j?aZO|1F;d}C{^a;0{zJ`Q()o^ZR(G0GY4U^80<sYF(c=pzhxH_?Ao0D
zAH!-MTr*WYqC!uoFfRB3+9A8AM7l>iaw9Ing;|paMuflZ!!P&O%=D$HH$=x02(`HD
za(x@^;2^c^*hovPiiYgQA@5`<`44$oiz{=b=8p~f!a8KpNGB{%)#79E$XIH7p|7=m
z#T)=HUm>15YEP8%q$`{19Nkpd)^?d^7-yu?;9$Yl?-+?Y%7&w)F-RDX77QroG$?uJ
z3eeDTw?ssdfY4!S4M05y33dHCogt4AL7mnl<SrXF)Y|v~X<I1sQ>L&v3@jN0RY4aw
z%WtkOEQg;5dbO7lBCALFQdIBb$6!_YT5Q3C!H-#Ovg)<7JZV1se1Ke~l}K>?06%px
ztt9pQk6a-Uxpt%hPwu42hkT;vVFRd|CUSDBcksb0(UI5N?H>|wMms7pKys6zMdyEn
z4g{o>X&lPruu&*+P)Os6d?`1;{%Xv|by3l}@F#J=>o+dL!!(Ecd!t_^cl8rv*%@i#
zJhd8;x*5~nB?A&GsMoB<P~mQQEMi5!&u*_e!mZ0=o2G-3+V?)P8p%Q{G>I2$JQCcz
zB?sI2ntl*tQi|jXt!YK8W1wzDxv^<|ERWmYhagyt(S_dnH2^>DP=^B#v~wdYmuTZI
zKClm0j&<b(%Df{bR}&?*bberJ=YZP+p2FgUS*X$IqC=9=NN%IQ)M*9l7G)LKAoUB%
z0tJnn1G}<dW||x6OrfSYieEn>Tm-5sdhmp^D4ZXF(;97rer?KRT=JzmpqWc_G-4ZC
z?rf&3*;=mXS+3|?rYp*>*a1_gcRiRZX`IfcWew7w9jhDn;AIXbIj^(RM3>q8ni~cp
z+lN2EHL#;CPXY!fe=1aQho2Y~q+xNyW^oLgh?_87q4!Gn6442iLC9=|lfXKGoPd#n
zT(=6J9{mM2^;*$v0YS#ahXGb)V}f}lx#vcpqRQ(ySj2}(dfp4s7cy6BlIa4sdgs$@
z`qZJy>B6K)z~`QHI&PTc9BUYJ3nHVK(|<Cms0QGQmN~$1BA?o|I$(FAoZ7=a5FTr0
z@Am-WiGrK)^?Tt|IeiA7Y)+6I5+x6YG*iFN!;-HzB%5G*y&7rmr|6PAC*C3!LF4y*
z8QCQMjHuz-z_)%W%|^(76_snpn=7NqH8W;gh|F+a&sQpQ7WJi@(-r1(hpE5iAR)Ka
z%eXD3JjEZv!_NwA9jKiu3#~Z!P#f3|7Stfa3-1zL*k1LHM7*$;QrWamS2##3Fm*Ie
zUP``tZSNf>@vRi)QQD@IeX`Z;-f%GvzUbx{t0jMv<Lxb;W=jf+ki$*TvZ=6JSK+sj
zRI^HmSxZ^7si@sx3DY@_#3i~{5J=UIvc9heG&*Mxep5RWH^vg%{YCZWu*asP*z582
zppM!Bo!7B2Qd;Y>Y9A3yn9tq(zvMBRL{?3zsX^9@rw)rrpxqlLF6B631Ue7VpUZ(X
zv<|hA;F;ybJC%Rhcu*%t7r1?T+1pD{j$Xi74^G!)vDvq(`(HwBR7z^p585DF-XK|z
zP7`t5B_Me39Hqilyl(9ZJa*!vPK85}lzAH*V#;&vV&t`VBsqu7oOb3!XY+H}okFYo
z2Ur^FzGF6cG*zOecJ2uEe#y~sj4$qh=?A<7G~8gDPSnxB2gvu+B?)L5;QJ!z*5{<|
z8hO~{S&oZ8^Bm5KXbW|@-$Tn?L3{Z8fSbd}gG5+2=$aY~WFwRdn0T&xcxUs8V2qHk
z`-$6<liQ25_^gN;x%=-eS?kPjG-;4OeiZ)K#-Zr{jiUH}P5u3|p7?9yJ1ru;`y5KT
zWM5c(jR`_sBEKwLY>|OUQhGM2IN2$ovq+HiZg*Ugm246836!-_IPy&+8AzItY`3~q
z6STZwHvr1U@3m~}$YC-wHGPTIHo=_p{w_AFqtnyp$aPA4vMn+6({T&<N5-`)>!}@Q
zq-(7kX(S;oqA0i7pBe1V4A0B$99R2`4P5NLY^u#Z?<?aQ9@ML+ZQ$qMOFaF%ee3Vw
zOFXB4hpz2ya7}L@Y%ncy@Bc)~inm6NAyHkL*uzD7s%II|5A7mHx})Zr*yBaMse6U^
z^Nj8OM9nq4$qSltd;v9i5r)uBxHk6Rt;**UQ|)8aS5_r`HNE#kMU3;#kHfqKe<eg<
zCWxCm%2jE3?rZm(=fMJ(Db@FXhj5<d#hUld54(hmt^mT}-dlC*ODdKIT?k39Ew(gl
zNQB9@Fyg{an`yd6y^K&|SF6;Zn<kK3Tv}XXZU<QFnKiC0EzGg6wluYLS@Q8cgE(+9
z^=0v#!%dc_H>wEet=RYyP0B@qw+fm#D&>_PiG1n!3Qpr?SfJ1M`A;KbkUzo1xM=gv
zFR&h;U2%@V8k&IbBNWrlHtDJg#+OP0-Js^DNLS2hZ0B*%mxcg;=E)P{$8BJOgWgww
zGE^+VLbY-<LYz)qK?Kcrubj{`bM50nl}kxtJ%NRO6iHh*%mJ=o<9f6g2rDyjX1#)h
z4NH`|<}NR)Pn*ndT-^!WT2OI0=mc3DqHUqv5W6Y1!&^X4Q}^M^B9=y$0l$*tcw5C6
zI)E+g3aq`fqJ<huRf)W!NivsdrxW_8Ns=GSat{|I3qKSslnWdp>yR7CQ)Y~I*NTGR
zaacrfVK^)|xI43cQBX_S{O+YRpkd1n@!s*PhBXIbUWj>jd-(oD59#XJQl+0KsD}E?
zg`#@W5fVa$mS3$FmD)nROQ4Y9CEjN<OebNj1R{OhdvK!jm$fX^c^rwBym=Le{c{b;
zT1Y+{v~q1p%n)!8>&-;uLsxYG47m~@1a7aqP?g`(?@-E|t$Y{kweZVIU4`7-S`03Y
zP(cuv1)lmv93FH)8iBM%E3M`~ryzr(vUN|*1h-X8_s}*Vga>a<lmh+DfwIGL2+ghV
zpRK#?2$fBUhz&ha+qh<XKq?d&N$fl$8fjj4-2_g%)o^DsW7y2pqk7rgs9;IjDkh^{
zJ<Qu-KsNG@7Mbq?gKQO)#CPL^(J{c}QSrpl9$HR*X?eldRDj;r14NO|T|ta(g0eCs
zGonh<>w4sW8^eq)zl&hXEzElv?{Rcz%+-bvW{DY{+twH84jlVC<&lyQ#js1P-~VF4
zv1M^&EOF*CE6&T|w`P$#(ehI)Rp3nZ2uYcVQNggL%89KoZnUdH(q`b8rZNOus_s`t
z?55oFM31}ih8{y70)g8g+4HbUwbK}cyA}+|&p|-_-fMvoyBigRH{yn16L(|yE;MNP
zTo#pS*ASJvWB*fkRVFA(cRMxel@hhb<U3?;tM<9-yE=ZN%Gp1}Q+t;m%q`%u(H9|t
zb-aU*<hh4z)TU#7+;e95jH2-`SE^U_KfGh6*r81dD$a?7vSOR^%Givm1K+?KlK@?0
z-+2-6Bp1x4bBne7`?xY9&Wx>?aE+{uPOhblm{V*?Js=rIpk?7Il%QM(*O*f~I4EM-
z5T03~FuHT{q0fa{P?Cllx4;v+C$p5bhQ3&B&Oe$`?mZ}3>sS9#mCucDt!uVJo^YPf
z0*j@@uED{v%o5d$8%<D8(sLZxn@-q8e>?GaoPlFrPeONn&cbcf%|-0Fg73?{n`?ED
z%=kL?EF7Qm^4<CT-AU*W-NU0kF>va$kEG2rBY}r6;p|*$h?0=q>!_`hG@;LIYIf{*
z+W>(f?b_y#vBdF^+khA-Q!z44+GF}SFP5QC+6MQbL~qdC^WNax2r?)<)k5ANa!C-j
zpH~F@1mWGpL1NEX#(<;kC8CxJYo-jj&|g2;)&7nkFO1gxoJaz)-Ot6k;d(9XA1hTv
zHSzNGKX_xlUo!ErWtEheDy=NWG`3`_&(v5eC06S=M6S1tC`ufz9N~hHPqas5pFiT!
zFSQ|P16tu5=(AJi0+k)$jjKV<E80b%s`<_no^@r11j*%3jn*>7T#>1QrjX2z>W4|f
zkA%*u!(cP?OBMbpWmj!otS*1g2j?NpNC^YvcV^>uxr^rkGjDZS<rZb6Yh}cp+{?hw
z$8c*uW~5cz<#2EK$Ho|U>|7=1cQilrTGhB<v!?s(--zw^<#}s5=LU<*;Imfg7xPF5
z6{+-F3$O#JjssKd<TY$+(`D+fIeGVfdG+PwuY<g-zgM7&ZHqq&dyrTLd^M4S%hbZM
z=_@vh7Z6<*zu6qF>7~fPZU>hU;-c@4iXVZn8l9v8W4<d`w8?lNQ$~xH_XM^>OZ+e=
zP}`z#@;f`Soc!<wRXOrRep*DrDtppkx+)(~l9drTq7g9|AOegs*;oy*zw1CeRbO^y
znAwh7xGYTdK3EKoUdZdgn%>aaXEe{BIA;D}vK~%#bu+$5*2GoAZ;fl*p;5Sh+xe@_
zU8}xgVeI{|HmlqHWY~RArp!Oo3>9I*pg=u>3lLSR6Chy>x=5x|sYo$hPG+V^L7l`Y
zHLC7(S2|d=H%L@0wZxq1DzV9>P3fq1^Skp-&3r9%)M5;1U!N67iAL&O1lTq<d`Vx1
zEB9u2ER_RzQ62m+(@zV^V0Cwn%xO5?BAC%3F}gg3&zS^5c>u#MFuJ@Md;yJ9vC2ur
zhC9*%9RX^A9#~dZ;DLS8@4{3*8i+)}_;>|<f&Z?XmgG1`gWzqQaJbCa4k475K$t9Z
zTcH||eI%G)zhY3n%ydAY=vhbmcfOa(CQtpEcUxju$rfj7kD*@q$js8u3Wh)xqhOEM
zYPme>bg)?2KxQoX+tY?jxV~jC6^yPpb6Q*4|JJ95&2U>vv&7H*P7eNQJ-&;xBDANm
zE3h7viDbB7p;@UwB90po-Pm95&~ZQ>sy3ivL+`wlzBwH3VHmB=t2Z<CS8}}K(Qe#@
z%WS-GwYrm(-VC`h{&oy8>8N%Q_e_S90?$FIT3osfj@DJKT3Y&r&ZY}~Rc4fY&gbA|
z_Ls3k4Sh1JLb^U#u0RU6RBrS6bfucySg+*`M_2%MC$24>zQ*_m&4Qb#49Ov@%J1;`
zLO#UJVRF2mT@WqAKNb+>1gaCUk1c?YC&bZ-_qiqMJtPtHg0Rixe{<m2MjH!aMR$ZV
zY`n?0Y&b)vZUIkmost_eH#i{ltWreQRn~*JCj-dJjILWSOtxf1k&=QtX2J~bi^xhu
zg$b+kW+j^*lx+U0UJFo!nrT`AZUN7~7EL>DAic)ObdBYP|4!XNFLtbd{R@_mR$N`Z
zL;U!0N$}rZVR`-!3eNx3nVJw@%BIO*xmL99ZAOL&89+-+!Er@Fa*z;3NtO5fsK22Q
z&31^}g1~660Ji>q0P2N;CPPyv5z3|*!-@hKP7Mn4+LUG&5z~2&)7J6sQ?|Em_Q;2<
ztIbYV$1U#>O1QW0aNw(TTh6b$ugR7i+WQLLmtN%`(f2U~=YzTt&+%bBh&M|FpCbKR
z5zm|mzO=h|LhprPzPI(yrnDZy?@*sj@Vb<}Jv&=~OWvYOUg8H`op<yv>RsQ6o1SN0
z1m2tPtTDcAXnFbrx#}=3+7!iZC1ke|!Qcc6#GPcTx*{foNFq&wG6e+V1nN|!;IM%N
zZGtiYL5lbzb%Mqv0L3ZLh*Ef+%m5IkOrR1u4G{Nd@~J@6EE^SM9cj_%pCDKaQ==>p
z>E}RbA~+SAk8Bn0_dtLFYUCFx42vePd6*`7*&M{ppTJ!eP~$>}3^EWgVle2Bs_Pz6
z`;ARt)-5+2)(G}7Q;I<Bwz})TorZvq{P;>5#r-K3CC6cc{V)_ruS<q`7b*hN`)%2;
zh5FpsxNw;;NeFk;+=zS{^ZUYLM1T_O?2KZOg)6kFYzUK{njf8TFK?Y)T(K{4&dtx(
zMStVz%X_L}gu%Q7+7qT8Nx|at_A|jEjkd?W$-ZLk*74QmbHYc{%gFocaqY(r5K5U%
z%WpVLfK-^iby;(+shyl1pW|H9uXu-sYIJ}d-J-^{1w|NsmfDVk4*-b*iwM;n;lePU
z{8?AH6b%+<I);m8y&od*pJvlk?<%R;V%^3%<vKsZ5i=x>6^*+%hY$s>`y<|G+7`aS
zenMtI*%-<1$?4im^CQDH;1P4r2h40(zCVwW<Mr2CJLeo93cLh*IUzP41SV<(OUn5F
z!`e5%*z$K<-nMPqwtd^SZQHhO+qQArwr$(pw=w;n?<MbLCi&i*WOC|M>Qt&Km7JZO
zz4mXfwIC{CLC^43PcF97K?e;3(qhs<!bu&W3p!)0HqO%G?M@mX3<<H>4Wpj0;{Eu_
z6sW;LX#C~yTe9Oc8*RekR&a3-=I5{ZM^B?=qtN34_!g1{AY<PHg?yHeyOh(=xKMXd
z5>%O}J3#X5V(Z(k+7K@6YGP9|oY$)2P|DM^_eT59#6xt7&Q0{W7o~1VAA+8sGGbK7
z78r+60)NWsg)nE3s9m*-(=vqU5NT64GpZMc=BzrJ==^L@TXLUk8MxNxSgfV;ajWLE
zP68@vR4OdJs-&lGzT#VtYKtkxZQPhp0}IyM=Yx7k2yK=gOT3;UlI<?Qd<H`a40Kjg
ziE-9?qn1QR*Px+I)}LYHY1&3w=b@C*t~xqin@xSx8Fd+D^APK4$op|l`Ga95A9;LA
z#Vrl-OL8JJDfIoe=ZpQ~EPj^1e^?iL(xmWNICx44{nHrWNf(#fFcV3*m(gOShl?{q
zd<`-+vh|e()iU!DUE3Wk7Uebza1#_IuuoR`?hDQpna^T>N7snC1=x*dr%Yw4Uje%t
zex>aQ(FD2Dn2k2~I8vGf6+pMlpr4>1b8Jn0O~xp;?+p?!b^{y)U9o^|G!(=+)<whX
zC9ze`cv?=rVSux}3bwSTz>wa+TEx&g2a|4I*gQ;~I|OGO;fT=F|4}nMc6y1L+=koI
z&YfFty-u?-G|Cb7-umbwWx@)2F&RCc!UV7#WlwI4bv3dtu5<6=4o`1W*gV<3iBi)+
zQxKM5C>cc_>Q@O4eJyEWm2NeqLlci%dT8A|&d2GJo!Su_o&<GY=&#0TN&Y1;J&6>3
z?l+#k&OfRaXiM$m>|0@DwcX~=(%FbvpOl$`<88RkL__36))v{ERW8ywra5%@Of3aF
zaYPy3Dt;Sdv<33ld-5qFrO7Q*P0EDLbR%EeVM21>Ivr|<nQg;r=KgSW*)4PvGtn*D
zac}9PjScHWXTjQh`lzYSnAvQ|e*4RgyZ?_oKVU+!4B&<FBJ&{p3j7cPjJ}iwxcE8n
zFbj6-qP#dp!oA_|0ex|tzPb>_w0pTskt?@BAskF+$VqW%b2mUm%y)*}eA;N2eS+xg
z!2#TR^H*lvCHCiSX|t(!ld3%)x8H>}=XY|oBHnJjBA#ZoA+dIlx&4K>>!tF1FyQ92
zZ^9o5B7w}r-Fuf{w*t}63mZk5S>93&V8mDnm!Wn7h5DT2F?*K>uXQ4!r?k=6B?Gty
zXx!nY%=ZgnB8AK)@dBbOm}vG<fS5R?NSHPIB+&uLgqJ^x?z7}liGVJ#VPRoqVQFD)
zB4lStVH9IIsP-a-tyB+g!eMo8$&GI6gB;xaW*sULjJKvN9cb9C%BF}r9;eizWa*)s
zK{PAqtd6ItZSc<|{V4q+Y}~r1KO;Ma6@`U+dYT`n@<a)8_p{z!UB-5G9;ZIMK}_6?
zZ#Btl;lq(EKUScjfdYm~!a80bSV)QW3&)jx6>qJ8Jp!)Jml*7ECRtf3)|tmCq#VB!
z*G$GzCV9%({f@!o!p9By9sb^6aZGC&qd}_4Q|hl}g+gjRYQ$@dtC~ISvJTC<6FjB=
z1&*V)a}<fEauo_5T{f%Jh_?O16}ibDk-T0-mRhfJUY}~ldI~kfYHJX>^6Da9u9~b7
zY=ZP~CBSkf#u`6oFr!*ZV7&9HUK+*2i_VDvnF~3^%Ujg>y_WfewNJOQc4;;&)L*^o
z-uT6M@E+xLd@#{iY^A{Jyv1W`Y4tvBRrN9AY^;)9ZPC(xHuC!c*3<Dwx{(qow!vgB
z2mwP?76q46^t5w$C1M#N#_Xf8eo@oa0D+}kI7yg1{?`<x3FkwjFRA!V)Ns=c=9x3B
zcC2dD<1LQu;T|E6)T`+uYW%iAa7KH~N$8Qe#{dAo=QA{hF?}Ui_+$55-*;&#NbAu=
zWooMJ+vN^mN55A!>vvzhhkqqZzC%toQ*@8D>C<c=Hcu~rYsuO<PW4>a)+tCGI@_pm
zwjvdM7y<0k%S0~f9qZSfaP9+`@)!Kdj&WsgrY|;38FMJ8gzusX-!R`m#R<OP5?<pH
z*sJSi1)u&BnDrCV2bB5~c3RoHr_~d}mvFTQto~x^0NfX=V?-g6jeCaU3sI^fzv0z`
zni5xF!UTCuHF<Yb!Fs{OZP;k-QUB(;BzY%v#Z-HggN^20RRH%u1FDYR64dB|YJpm<
zaQk+cu?G_66Ib4awpwK_|7QiA!9WGtor_IvI;efELuDL?Wjx1-k;AL!1QtOeaRaEZ
z)Zsbc?;1+P2`M2|2=T3v?R}zHo_jyx6A@wL(axZu+(7Pyuw+0A?I)6y6GWPohg2&X
zM=P3Ms|%+bV_Oj1K_M9`Cbj*hdzNMP*wAbhle$IoqfA;AF#~=Zk`9;@8=tEa`AfNF
z=S+v5Vk?=8+=GUfefh{fQm8>HeAT+B+a{p$@sLC5*;n_EfZ*BT>Y+Q506BLM+p)be
z%l1UsX6rBsL?NYsmvRUh#Ci?4pHbp$qjRkeVZ^fzax@N(#ZF4BniQz)6t)gZN4add
zX>oGT9DDMe^9rxcB?tcnhsMf#!<v+b?3C6H%1|wu6AqdiyPrRdwoPsNvr4FaNtxr^
zf@8$oy|nWFCr3mwa*VvmpdDem7u6?SAftchIFnzuP$U$q(aun%?DKpi`zFh&az&%4
z+5zQvUPDrb<1_>yu_a7?<h+|#d11e`%j$Z4g0ZHigjH+@CVS8=pLr%xWKXEvgFa2X
zlDFO)u=s%BDIQ-SX8Rz@rbFdGx?znTG(1@OEPVlo=6FO7G`y?Bc00edN*O*4t@sXB
zKSIr(L$cp3n=9R&kdAq>%kxBMzBP*62WP2qMPq(db@~ZA8yEC_i>qEJ`<v09dVDc2
zN*fBzyKl&kYyT+q@di<P^PN8et(L(VX8M3zziY2n;|=qEg2SE@q0fmTEW-SLDrB$3
z8xZo~cP~isR2dq;&lxrD!b&DHYW)#dqM1H8cm?)6OtcUp);ioNHF0IMsOx$_mJPp8
z8PAF(?7ctROi^N^k?kmF{7%7O#x-w$eTS14O;(~5ozgpqM_o`RNgh{bYEw?Gibp)E
z!mv^xxvZI&SkPu_lSWypBs{9au;QIppy16MMy;tjJg8>mpm50#&}REn10}FPCSR~K
za2=`Fh&yuiF1}fwE0XI2I`FRk`t*0z`DE1@Zr|sVAZumj;PZXJP0$yPw}daj&JYKZ
zhK+WlA_yzDVKZ&UIaejq27xzFw|P2&)RH81GB13LwKuAoY4uo3?WVCh7Lk|y5SEb(
zeTKYCxAAtp+OSvY)~%(f4T#r-3q^v4U;Kwo-x%Ep@ma;Sw6PVRYbV#8B>2?Mtkl{G
z#Cw+KVUAnzW6I|d%60$ao<(Q4F7ot44CRGc!nyXFnasBUEKxu?O$T1`xj@#PoZV_T
z)uhX-lj*bGuneZA|3usw&N)~cpZI}$=^9q)<A#c=x53DYjoodTo&=qzh^$MBbf0F1
znol(?I!2nR^<usdDDPC^G>OhgTN(z=RB*=Q7BK^^bZxQ1ot+mw`{<E$B~e3>sN1lX
z)XbLDoLaLwjqak2v&6}q@Tzx+3fD2&F`b29G@~sn8}lx%Rt_3pEfZVvRb2*WHcegf
zW*&tT<=;4&J_J2RIKs80R%A0f7?)0zzI0C?G?vCkJ7V%V!`aiCH&K=M6E)*KlSwms
z6SU)<jEX)ez3DL4Y)4V%-^<POprU%Ztx1`0nT1KYq0d#74IDxbNMP2yIs<I{#=)=F
zUJFOVM^UWU*gA^Xkasj*8w%SdG^n!HTen9}=cG`v<uwYuM04yw-e5b@02M~~rf&3b
zvj`xMJYGA=@k~l-U}nDoK5Z~Xrt9<tM0!JaWPcr1R!=E*zSm4p5DaqjA3&bM&C@%C
zAVD#{4=_h%<qri!eUZZunWoj_7xE3~7SU@=L}d|-aPucZp2{x#T#5H{CDTXy1-C;8
z;lr<?_8xfOcyNgf<q^MPI=vVFu9LaXtgIoP)VfuV^!&qmHRXu?3dSU*WJ7Ufkic*L
z^iP6k{+guwUcL`>Z#Dnwto4bVqmQkT9alM|?Xex#e6*Y6o7#n|RZY2|+F6|Qzskb-
zaipgJms3>l6#on^t>Mn<jKKc-Rl)G@AoGtN-v5Z)^)Gnb{6mGz975@Bd{(bNnz7#x
zl3EkTCX2tCi7`dTb=coWnUG;96in%5moO3+%N3f0mgA%Vkzktzpec-;0}K{4pBH~A
z@x1ANaeFySe9V5t_GT1+y}RDt^1S)(aec8FoB4VPFNGkWaf*#>O4N0{$CB}x7`tJA
z<013iJ&euz2v6j5yhoGy8XwzXf8!$i-aX9C`iM;Qb-c%u`I;E}{&5wBI4X)lf+ACq
zvC3Ngp|$KE4h}&a6lEc?kx{Xi?-nH>!4cs!jSG;FRlCe5%V-=FRc1LgCoXfIVUlTI
z6q$0Iae`^jgiV65G0cmwah0tITwpilB%GJ45tmSo{Z^1qUaJqn3?Cu4hZ{1GXyC(?
zC{9WWw8=Lb3M;^kxB#4ON=}IIOW?+YpjvCOPICLG4}Js6KNYNL_D^uw&ahsEeFh_v
zU^cBnh>9jJS2Ck5Z2?*YC7RP3kdd&Mmw_fPw_{9@I~cn&(u(FfrIk=Qn?`<oBQKxg
zRG!@cM%e8J!I?^`TFjz8HP0_<$dd=<+S~|;QIV(^jPWZ_Xb^?+phku%S&YMk06W>g
zYcE5Tva3!H4*Ua{y=#@?ILj)bR+E~LJ+SxcrMNDlI4q(lL#Uiv`69<C$N4UR8@X+V
zE<%x$1wHi}1uXcD8V0pVaX#3iQPrOUB|y9+*2z1cvdu-tyvAIfH7F$E&k;KL2d6|w
zBnD?Pns+g!Aue>X#h|a0vH^uyYPg)03<CE0H@CI^SGFeiVlV`;TeGV=D!p#RG#2rM
zWF}i0z+|EiQ%K#CnBB>TvF0DIa~cyET^^9wi0NSxE4{BQ)k)NjS*Ytv%^ZlyOcy4}
zkRCV)-ZYIW#t3u=)w@{w>j*%%Ifki)p<6DgBfJnB+85biZRYb3At7^lHcEq0o)Sl>
zK(^eS8Oy_=0cCTd+|tNB*9=KK=xw9>9LVldc*4^8c@@jaU&rEeIN(gom>H_WLgLDH
z=9lj3{a%J54=DTX!3oC&ro8e%u&OTXE+UJL<n_!}eEi|fe7sQf$pi6ej2-lRg+_kG
zdv5H=Jn#}C?6qtfOG5F;B$|<Z786#GeHIDhTErlDn^@5%a7cQ2^#ILrT()KwV?(&t
z1x)3RNmfkdpsvXr!Ym>ZHmf=wRTYc_9O$wk$pm3o&|+d(dGE(2ZMd&eYADnuO`2^k
zGl=WQGGiEuSDQ*9XS-7E)1wW2&5&A|eOIgw)`TlIhwH*JeHZZWoIyP@@fXYv+Jd^N
z%O}&o6~*dCn!qi}m)0nr8-v@d^{%d&qt~dbF7mC~i_)P4BQD@pq0|l4gj7CyqN#l@
z5p6$%lbf6C&?}P|+}<(_si_Qa6EQ4Urd)kGYS=Brqa=(#aZ1=@QU+N$NeR&uBvAk3
zEt29#3HSeX1F3S9Wv{piLTTr5!7mCSFYhsXwL3K{qkvr5F7eBV8a&o>VHYY_GJ-vh
z4|I`ha1q<Va%gN*y$Q|K3_nxpZDQc10lEWO^=*T+Du3IkitRinWsAewI`nWT&(sp7
zbxAzva-pf!9<Wq>SXb_HA*t2=V;R}y6175m(p=cp(q~CoTkJ+NW|?}Y5wNn~g?iBJ
zt`m8`j-bOeY5B7ov~=upiCaO|$vkSNubsNp2wS1uYc|*Mgm9-I$@y?o^q|^E!t2{)
ze`{hbXQbJi5OaHJ=uc%8H(3sxRg+{>#~eTM(9KDJbBDRl=_-uUuXRtzR5!HK12Sy-
zL!!(mN{Gx0NF`yNzKqYnUQd#=T7?Kjx2*ANj-;9C#mi$2q9PKac)8-OzPvBis|@y7
zVHY=ErGaLT`<|G<nNgI|`=hqm(qaShhjPbh){!)6Ua_2iW;1r)pLQsy@=8i{Wf0@`
z-luyJq?a^tF)MeG3V0L#mxlTqg@vxmda?v3f}pK{s`OFl72J~|qf^~o%Kzcqit{+-
z2s)`b$bWr=vM~oV@grUu@1(>ajrVg_^33}EA!{)Us#gf=dl-;t-?48!yGqb&KT(Aq
zYf~$s0@XKDX_}foxw+i>A*XF?c=qMCOQ2HkIn5=}@711YYZ4V^id;Sn+PW;xH4PJT
zhhEh`zv;X&w~{qOF&h}BJfgkLM9y)thT~XYhGxA{f>hITHA4MJ&y1h~H1>X@1C>4X
za3Xi~!hZKs%BLwxon=u%g_nZ|HhdorHcI*l<}VNO{-3-lJZx;-i|ofF<G1{|v1is;
z;gvhE(s>w_LjKCjdjFm4CjWe>4<LMfG)?|t0HBk3jrZZ<5T5C(slLO(*;AcZDoe+k
z!PUjKP-B{?S0MlGZXa29l>%FjdA!>;kk(%Y!l?axoGkn0e!ptPgp9JvCM^MFc{oJp
zRVso&<KntLCsS}O!<C_5p5H<P4G$893=6vl;5)50f_%RhXM=oy?VFlmy}ZZ>W)6Ao
zlaANn**hpA4gbd4kTH>jbM_Eli#euvF0;_urk13(4N)btO`>_rTu6W@B*DB?b?47a
zbz$TJvCX#%-|4-dT~GJc@ywbdszXsHiBnZPxHnKYa7Wn5>RMs^7~veq+mvAHG$Bq=
zlUtxN<7BH;clQ#QV%2CGF3CbtnF@!IbjyvN;6XL{fRWc2+x)0Pn6%n32V1UB)}X?t
z9MentJ}q}YUG(U#(zwVD4JJ$oyVn&gkf=xzC~e$up+}acn8$Z?oH-^^<#**)znE94
z>OV8S9bzk?iW)Rcw$aqvyupiOZ9KPQXCJwtino*78CGn@g_)=zMMEx+Su(pu23N)i
z>XR|3m;22a_Sl#VHT+VB|NTqiCP4e)usepNh2aonVq<D^ST<gZ`ja89ug>f-7UtHe
zcNVT4YGV3!wuq0NfrXQUdH+QXQ+qn`g@c<cru3WYA;&GNp$jjdxZ2A3_*b&R;_gv=
z5$eI4oJa0>jDM_k)X>|4rWI>a7E9M8h|s&V?9Z^eJM*t%AMZW1O`YK&yw*2Z^kq_p
zB~sxn3Rfguz8&$7tFz)vI#{m?$}{a%it7AFo2#gFrT!1WN)nOhNIhJt5k&gK2MH+{
z;lPLd-?w26Wm6(6XKy;TNR8&Sg7fDx9yuJe9O=!zRsnDvQT81i?7W9Jq4IQLvm}$R
zE5A(5&`s3-;1OmK6iKRY=L-CSEq2X;D8onk20xIJ-ox5^4g{Crc^}W-=5$GCxSr^;
zm293w^7o9#^k?!`;Ik`EeQK7H7*s@HaZrK?0O*dby;a#pQ#=-Q_x|8F+lzd&^3n%Y
zIdr1pJCWbcn5T^o5z6+orgAjlDK|*EbiJeV_vYuiO7Ta_LlXyaR1IY`bAGlC1>xY$
z{Vw*-`S5(@l^9cDy4ioCNrDHvDjHN>r}EEqnX{2NpYj7&J+Dt6kWecwT1fId)dd<W
zQ3`Gs7q6rsVQ?j1vzDOZYo#z}txi=oXDBw%%AWE`Y70zvp0;DpE9wl2J7H0rSClw~
zYMP<728Vo{l4d^ak`YgRBcPbIW-9KKvW*|Xmsn5DulT%EEqoiX2fNBIGEA>sPlC>F
zDgAMnM6DMd3z?KP@rH^&wOSU4VMvRbQFPD*x^MH4FXxlZ8h%m!LL%xYIu=cBigTG4
z0ACYC_w5M6Jh(~Iz?gr-$cDT4sG6qY^p!g~ar%mz7Ipfno5q`aE1RCV@RB+?;LM$U
zn{eVSf1t=#b@mZBi9P=~;`Eg|L393s%<fe<shxkTbpFE3?o~O7z4&nE^zEMB;kOBL
zNJ_eU(H0z=@Usj+Y~eMq^op|b2B$PWJmSC7C=BcZEaRf#*Ace~m>1R&wpmVg?fdSE
zJ*Hv|BqXUNZ8eK%P1tZ6a@K$&SPq5omP;Hv_fU@Wl3wm*A^wyNqz_xdd14>CI&2OG
zZ9T*wc8T-Care$Q;vszloixEAeG{21K}+;PGI3-geKVOnCY8E}ojewix|f+e29>&}
zojmrCx~EB-a!xzcWXLqtPp}=Zsu?2QiCNPM6yJ_ss~RG{`D0ZxOuXa2ru8HJjMS+9
zb3SrSD_nd#bggQb_-4dPBJB_;ZHiLrUOP=1j`YoD(u9Qc4R_K6g!D~k@)%O;-aAd2
zjr0xQq!ByO3%qfRek_zBlUC{;VX_1%(TmSy!C&0xSEKm|G2W2XI{nxPeWr@kz5Qef
zNaDxOJ<y3>0o>)1tOKlt&8#wf3EP}e8!=mTSF2;8uP$Kgvhk%1S2ROSbjwYAQaOK`
zE+Wl!E6ja?M{1Zty#Ys_GX{9W4Q*LNKjpDK6FDwp_g1l{^nI~Mw)J5DBC$VvIIiXn
z)~}=wd?Ckpr*K@F+Fv#w*YQOg)-r^CVqkYJV?Y0#TKYK^YFNt{`st3{IgI^`W_Ou<
zT-O_BsG2$Og&0Hgb30><wlVBqD)yEU>}OT`O9{tS-GO?lNqt|O5gmQlzZ}>b*06uE
z*j?H=E^YT$C$XPf?W|INjt^F499MV#)Z_d-FVb-1=iT5&T7I6#8)MB9`U!-+VF3F#
zl-(sA!fKzGZ(Jw9mQ*D!w6ZglN4P~=vnZsmNqHSNtwlWA-@LPli2f?h1+*l4zNW8f
zg!avkvxqcLrW~V8(gGsun>fA{kEnVeI;B)>BW7gmdb3y?@b6%!*t1(M5s)(kqe7_#
zZgs#HPf^52+6QnOKwH{((g&ayB~kC9ldo_`zL(!(oXosT$8N(m&=D^AOvpVp`AqOV
zH@Rp2Wncr|H~{&l9IRkF+K&?jtiT%}`Anz-`Zxl)Xg+qJ1NQi*oD4sPp9A7J1vwo5
zn;<!z-@RZ*ycY0L<f#o}Py@^>n$R25yoisDD?<9M@ASWxhI5oj{NsLbt_Jsi#km;&
zhi4Vpe~WV+i5dO{a*KavM3Gd{gIAu-txWMri>K;I<Wh-?h9HUn5J%TsvS0a`SmQ{|
zxp3j8gTl!$H)d17%9L>P6x@FmIVe-g1EaJi_X9Oi!pW6uJvJ!BSA6vzOsXZr6N)`+
zTx>kt3|y||7@h2d#sWkcP({7m34nXEV-z48V#m{u+fha>pdVP`g^))x#n^EUIHVk5
zPXJF4Pq?Q*Q7cj}P%}|CQae&VP(xAMrvOVT^ot^<0GAYw!xWZS8!cXynOF-?q$smK
zowisnRT+F*I0@8RwA5=iURp5gpPGzWhaLBBE`xAaQux2Epqt2d*IdJ*aMz}b43$Yk
zxPgVzLcAVVBR02|Mn~jS+oCvg)uKvUoQY{>Sm-EN2ez-B&h^5dO4`o5F(_6i8LCT`
zTVh4O?YCI3B?9UXRcvJB(6<Q{8LN}EV@adbnw2QCP##6;Y}830&LcK3@(wpd`C!NA
z<I@%X($JoXG)=I_aEDNBJ0N4+-ixVJORS&1r<gFM&TTBC7DkOO9xQ0oGNx#>szayF
zq=uX@PO(%&Vwcdw-PpQc-A)<NX!TP11?W(rFn8sySgrCzxz*kIp=GbQ^26iNVT=P-
z+`XJI@w@}F`Q9P%IJ_R}b6%=?=%<B-tuA@tg5WXK<<=Ypm+G2EPcTl6im+gnA;htx
zKvGRwGt$z#R2JRp=Gv*r-k9lTSviz7ekhfNh`Mq0^P9&eC?i%--G{;k3O30+WWM7*
zFr0FLow^s%%wHqrkpBA3$(C6v3Dw@OmEkhVmO4?~?&-skEUoZoQ-Zf9jx5zNI1;d4
zRm-O+S0~JNVPXO4Y(E!~e|ttIlryZ5UF3^a`wK?rR$P|P&+WtURn+bJZp0IhSN9s$
zOA-be{vGS}mqH=6TP$DxU+|k`gcgK%?IZ{wT3q}jEp9P%r}}LAc?BGO8w$R`O@*C5
z*bZ+n$8{5-=^I);iRvzIG{-=+u8eq2?UC(UM>fY{6FiflTGz(cX18$cQSjbed!lGp
z_xAS)QU(!Tn31D#ru6|V_s$-&+C*&jK)UfegDbBgAE-S;u7|DmU^|IBL$YpSU*NrZ
zp&t-FLpO)AcVJ({z9GGLaBq$T;q)H`(oPY$_c{#tGI4N`Oa=j73dBQ%OYZQ+jqs$Q
zwva&Ey|=h`u+<%rAMBuFU|GypMOBH**+!gaC5bj1XDx}>oM-WgIqYZUi8&lUr4gdF
z%(?S?T_S0A)8XTjLEH>qh+V)YSdC864a2y%R6IUUxc=d+^tXtSoqb8>*SKjN<HG0v
zwzbpWi0POH`t{2l{NJUB|6b?Fk@&x89@*Mj{g<EOHcoQ-<_`anK@_EJ7x>}5ExERb
zS<JzcV&%;Ie}yYzQo@QM6Z}RXSMZa_ld$WzPhE|_plKP1-5Z3UZO507W5;j1F9dI_
zNp3onLor(8dT=?J>RP+2-P!2@QX6uH!cL8#w^#SJ81F6sDnuAjj<JMZP7&*3Ulli=
zoYQ0f68lXE+XZHr_Qysvs5;apAuMRmWF&E;Iwz@HuF1t9ef)aY*%C2sv4njYebTIM
z3uSP4{csba0Ka>}uJQ}c=xUfWu%5ORctDFRY%nqEy?p})qTH$IBqY-Yo170UdJzs0
zHZ-4^U_FkJcnB#Erx?qIpJkh`sUncNnF3aU`=B$tSG8EjmV9Y{st=|-@Zm{j$NQp1
zknOxV$K`Lo<O(L;S=!}uvR}D$NPv|063<0C_F#@1I=S+ZH%fIGK9-}|dYZrW0lEb1
zbiugYjqi|LNw4I-nu!|E{T4$Nc6C~ntJ79wXwV+$6kBQjik$rWSVbA?ti*$iHAP@e
zMirV9p-@(>o{S?}Mq?e+ry_1eKXf1VAN&@=QvW?n8Tg(gr0hWq{2$SS6m`mY5!Pld
zSx2r1|Aq&Qbu{$k0NIo;3-)Ql3U3>eO;7Hltjs-ZREHd9x)t-Upf^|$@6`{0hk66;
zk{2M#h!m+$p0+!L5MJ)Gpas4eQ*nr;QOUna?1m(;(+7Y@RPxKh{mdRIj46?6#my2Y
zk!1snG?NP+5%7ss3uRvb|8!_wId++d0Dt|m0RI0RmU8-rminf~{~4_R5thmuHa}s>
zlgaLqkkKSAM6lUU!k^G$k7biw24A3zpg<lUG2Up%`e&$~YGd!mfEfR-56mvH?Gx5u
zIozR=fTrtmvgRZ!ouhO6^Y&uP^H-&sB)<qjxM3T07nMO<Mo>UOKte!6014>W@<tYc
z;>LpRX-4q|jrEADbf<GB!S<!vvdgWuMFy&>oW7WKeCrs`0LzQ_h_M{rDyu6S_0~h%
zNSy*xR?D(OR?1Mb_sU(iNNG6?fR28a-#vMcBAP$+n*jy#SDa_g_C7L|HM?wi&RT}~
z!<9_upREy(0Z2|e=&ki7ZN<sIkqO_EkH}_9&-8{{_S7Lx+H5&UCqJVpCCj|i3haFZ
z9p?7EWEv?Q5b@3-fGwco5qA0DLQim0-^yI>TTRm6umg$vf3ygwM5W}`jm56naaMM_
z2~R`<r~-6?BREjZm6VC&lo*IY9@>WOUVN8|oCaWVS)SYWsM@CMIHO;AONq=e3#HED
zn#boB*@5-Ch(Opdjz`4b$-KSKO~CvUNq{4puI36>(?60NkT(s~{;n`X2M_Sq3%*1E
zcF@8Li(~<Gcr)&!1E<J<t)Y9%E<_#XsV7qtVbS%1dIpY4-V=?^lSewg5yd3dJ{#2e
zDH>tO97y5SKHV|&i<14x73r%7c(o!|%K-L;1<4iS1)e1Rqbt~#r@JSJXC>eCn^n_C
z5_m$p?p^^+!M#56v=U$iP@ljznAlfH@GB<i1L)y?#;<d80Isdkf0Oz)Xg9tODM56s
z7u`;$-^wp)PN*&n*@0c)nV4bp@Mv_{yoZ|1oXB>zG5#;iKanj@vIc4L6WIcw|1Pqb
z{|7bMf5x!fPs06I9C!cpCH}DvwJ|yF89R(m1^`7w2Qo+-6Y&#6dL}_6_JbD_sOp*Q
zB8Ce|Kch}s6<%you&z|8CQ+8RlD2FPkoZ+zwq#J5vfklT?^&%<T`h@rWisQ=G$}PY
zOZ~jUcYJ-a>Dbe_`H(>N_1VYpi)koHi@Ys8QxjXwzZ=rVxi6x-%ONwsdvoWy59F1R
zP1k<*@h3ZUeJF$II^yGbKG>1<)a=r7UAydJwS{JWdfoquy*@hT1$jBi2M5DR^YgKR
zwRcR*B--Teo6@m~S-+D8Q{o=Qj$ybH^7=C%^%aJ*({Lcqh1+<rK|N~^63ZnQezSU~
z&6T6qL59M8)Q9aAn~4NFIrxIYZ9M{)_6B$5HtcU|KO1x6_T2^qb<530hWrs$%RbHa
zwHlLa_pJz~(>K%h){fIFcPk0@Lmj1hjpqMi<T;N--%}%RU`2)mFPr+4hpUb`TOiLv
zDVMZu3p>1QAriE_Y|&$_QJS+&$k>a!9O%Py%9Lhx{8s6ef5noWFK5bM3n404FX!1+
zNGgqx&3d~pVsIgQLwlxEZT&-bP_bTeF=M$)Lnt$!>vy7b?ViI}G`Iu5Ld`BrtO}u1
zjEe@MI3_6ppjlOK<V9r&$c`40U=6c80PJAz9he33NuloP)-KJ2%y1)kxXw|$!NmYw
z0M+Mdswy4TlhCLFJJ?{e@Ndf@upYZlj7&$o`TCa35{6YgPcXl9h)+X+6iLO9uja}7
z3o>W|z%c`kSq}o~BdKD>2nfWSrp?e)2~%XARWIMy!F<T}IRSnS5vK7b0%)r|S_;By
zfe?5yCagbOo9@F*E9pqc0^K`|NVjvgFu)D3#tsPGNRLm9U9NVHT82~ZQk01rE`_B6
z4ND4hDnK~JP*y+O5p`+@jE+1O150$OyVKpBjWo`I5-4OhOl~08w~YV?jOd>4MlXAx
z7={}SW&qeIGNc0&B)GA^m*}9IC44P^i<4c^jw3=W0f0haUBrhB6*`ItQa+^YQOC3_
z%rEMlU$>2E5gk|B20GSBYy<q!VZM?Fkx5hlHoD~k4<W6<E86AA;yZ5egi<)?Sa{ZU
z*4GpSh};XipXo&loDvH<Z}n$G-%be?(U$4ExN-9`Uzm@@kWnZzeS^YCL`vGjW&z@Z
z<c7}?GKwTv;f$eraWg-8JVi-*$mO=6FH7D&k9{M4RL-NH4e<||*P~{Jo(;T(d&W$u
zXyJm%bVW6a8h2AuDRC4=AnsdMb~A?638Us;ZrwgFQ1Cm*g|+3-eT3ZYB)eef=cP$$
zVXWl}vm+BIk8%~UoqEAYmpLBFWxZ<tr_mzixqu}~oxvNWuAo%q$K6E0haJ^v)q0E*
zC@C?pk^My3y?ZfYWcgc9l-gZohgk$L()0?AKbDkVek;l!2)+sk!=cJu{%r2=DSfXC
zMKCC~jXs*UrYJvh%*r1yH)U>UzN&X{+iqyz#A*{;B8xcCLz_O?4L#SjCJ`@6T9K0J
zm(t0=@D-y7r~swzYEZwOrgpLk^Cpw6x2%D;jt(J@ob>L`VC@L)QY-r-QbACo>4CwL
z>xnz+<|0#{S|Dl8V?tUk9w|Y&w(`|daqUMsn({Oq6|;hnx=f6~g(nY3gE5oPl=8#0
zl-YmdIuf&6ilh|+52sOG=cUVT8gVd)=ozG@s5EG=1YWx_hj$R(pK(yTwz_ss4UU4N
zg&BCLiN*^n$rIj-g`g5)8XvxrRHzK8?I{hiD@UOrDeWO50ZS;>6tz!H?z5JGMqm&N
z26^d?!@E)$6i||eD@cHvhw3c!D8CGaARLyaB$pp5j*OLhv(Jq8nOYz#E0*F)@+2El
znHW*o4?~Y8B|(OZ=y@D>X2`YM5APNOj1sFkKp+$b5U!ip@$5~iRLX<oU`4lzCIU}K
z99I=kC_S8UtvJm-NRgGP;i}GMeH!6HY$Z`1HEfH&@x<~97*3J7oA4}6CY+U9gx!z`
zmIt?cp_YwnxaahUHH-+7$x~FTdAuh^kR$o^wahJw7nb>%WVosI-=(QTK{s5`N7vF{
z9$TubGBkO@zBB9H2Mw(^B-?){_SaYr+Ot})M~Y<^=j%xo77(tkt>YZuvoirH!2uQd
zvv2_=QLmN#COF~tWQH|(w=-|Sm-MVKeGMRi9(kuQVD#p544K}<iJ^lo+M}!HXFM#b
zm5ij0Au))R=uc>xlr$H87($2XM9?lCnaocHv}7WKdLO=F4y(ft4ER3%?H<@e7!`Ic
zyTpHCs6ma(B0w_F6w-7<KmW-eEe8cc^=nmb@(3q7qMf}6oiBEnLrwN!IqFR$qt$ql
z4Mk=bF=p8PaU%fA{De>ffk~fay017#sLm~>zvB$v3XEW3AnQ@it!o4~$N}DE;zQx4
z-rLUOI<$LHQ^OU#{le4X_l{?+yC!8UP2Hkq_Hu)FS%s6v1*R2lYBe6L&HcOFJpRp4
zn$97PFmFALTiJ+&(+oDge@h;cW`05&W_Z&t5I<r7V<gB!NU0<$`;sc5=B#KB4lv0w
zU4j#XNGtwQt)S`#1b}vUw1surcHpZ)L!3+CE#TK(vKoLxp;9j5EoKaDdhqGwvQn<r
zIU6XGIS4*#U`?8qh0*ao{4jXE7>!fxBV}4yq}x670>f7oMEH46;9w3nbYYt05&g=|
zncb=yP8Hkc#f>c1QfIspWe#g+n0b=Mtm}FNXu7b^l6JN4vr&@I6@1+q;d*X3Lu0Cn
zL(s`Yta`DQ_^;}s@3)d1DzOMkcJWep^Akasv!)DYiolh{F-SH_scb81Yl+h2Fno!Q
zLqlAHu!X5USg#-tmzV*kbr~wMuA!k%^0h$0*p>Cz`cJ!>>jCHO{&SxwL&cNL2rb*d
zYPgD({UW3TEGtn4eZ?b$HegtN!pcc%(j_XHVAx7r+kg?wR42;i$anekgiAbQYuwb!
z5u@#D&X}`74?1p)&@P~vM}279d6gYc&q~~pbkTg9io;GgeF=SczD+4PFHn}>1hDxZ
z`4!ClSBDsJn(<UX=wt(F)I@2dg}0;ZCS#Ehdy;lFo52r<#b$}A`i+<VvO50O4s84P
z5>6A9cHv!^okuKf8ak1ghtX}?*MD&CNjE8MhZXNt7C7}GI}jT{iLCypKW>PZZIJWJ
z)?`P*6=YTw#_3)U50wm=%%u;ulQ4gi^NOU9Xck$y0^+e*j}*$LwL}^!ChU+jSrqdm
zziS`1LwL3z`nG&OY!9TJvqUc_jEQ8m_<gn}q)a!}NwTVGFCVb$(RNfFTVPqsl)@2I
zu5I~8j*rHWZf;ApQDIy+GVbDf6+}sMq|7MGDVpaO9=Nj}^eWszz_Ew}yzlWOAM=mb
zI9IiHB{Gg^k0!b*K5hm&wBwnM0j1I03@}FYnz+YZx}mp@8M?{vTCAJ90A?fi|B!P8
z6CruH&4<NdNtQ;WxYXrh{@Qa~X@KcT=dO!al_D-%)nau)_)Q=(7+ejw#jY%-D~&&p
z_L<dXyd98Jvb9%jj|-JasP`W?;EZrOZWv3d^&5KvCwHgujjm{`3>Rf&Vup;T;8d(b
zmsPy+#L)@H(+MQgAt}}7N%cgW-8)M#+Um7?Azd759=_Wic)ZC_t|7w%U;1Pb+KK_V
z2r*{go+>8kaB%q0LaaJ*Cg!OH!H_z&0L*F&#MlakmYRjWg~S>hlO}Y>_%y=myFlf~
zB|6M=WZ^HTNkTNOGiH~x<t!R^_+)8wvoX|MjDVqsgIZL)&$)SkWsH_6lIF>!hf$0Z
zODRjp7bX!DNwFZ@5+6#Q;S87Blbp$m-RlO=z^76?UhBwM0twwU28rzNtx8)?7P6Kf
zaKBH<o|7wZ((2(rO%@l$m}898H&W^()JGUqkz!bi4Xb0^FO?it4lT6}C(UFh)P@~)
zh8#9N;0Y$kT;S(m1M=h$sgc)31ZgZr0)j3pcC7-Baqcwu{n2WIgV71FfjIdlyzGEs
zo$xAsqEC4?NLbKt+tZ0UI&0vuOWFcl8~MwF>T!TebtO#<JCn!V&0WcYdFmc84=$V@
z>SfGJN(m)jLEZ0U%utbJoK{FZvL?aAN={=|_ym>IJd50~yA}s|LD_%!&=zBt9u;iD
zp(j9*47j2won#0~8_KCI#G4^jNzsY2K9<=V*Q5#abh*Ro()B1w=q|sUu~Hrm)E57T
zY@g1A1a$zPbmLOMHeuE9T5d}<pu{I@0V>!be8~ZCm|nr)S1GpF*r5*+&uv}@UF@TU
zAk*8E6lS)hH_20F8C}7XbHcaK#&7wvf`ZEM96~hOyf2}}%0*W>f_u7i^>ouY;>$-n
zWCdN|72jX~pd==HMDxKPx11f^e}|HU{-02iioTV(k-n3;t&Omop|RaR2mb<1%_{PW
zSjxy>HexP9YWTqGkP-lr=HUMDVoRv&7C=o(kmO10l<U$CSS`{nOr7D&Y^6P~woOc|
zQJf2SvuBlXU$A&y_SiF9TjKL|adP(P)7>wJSvP;D*E&s~kNA3fe#H$Q{Peh?8i^+z
z$kI{tZNMEBhb_PvZJhNX@glc0;9G|}a0U5TgFF=vy%GDlc~MLxhjB2tp!Fj&Gc;EB
zN{TVwvzJIfT_W?jtWQ<cmnOI@^810XYJI-%VoP^=4Q?+i;+cLg<Cg1Ih6hxfAZZ#a
zE<8X%`zM$u!G!EJSIJ8q!Vu~1LTsd#b4zU=rxYJ^3^^aQC9^auq@!bi-gkAGW2OVr
z*?4PCq6a%?>f>{s4eiNdalALXN-w;56sPSSw@8!=#>W?PDpiC`*DUC6FHj>k9U@|q
zE)^ar{ptE3p3sIEuc&ck(w3u%RD5NT{d9)5{1D?-SktUEUpN~BPj+-t^&mGbuV<Jq
zD6u@MWV~j4+}bUYn^+FVuo2Nb=Z<T(t1C@(f_j&TSrvJGW8*hn<-w4L$+_ZLcopH6
z(KN@eRH620DCH(H@)C*GnuF}BPdHl6(2?aRl589aj<=5mfc7NA&m$3>Uq1C@q>@rd
z;|OuIE@I&3%@1A98NB%#p_+F|J;o5!6d9Uym~+nvgb`o@R2P75?3aRal>dVtg4`AD
ziVSTSwkOq?cY#tJcTf`6Q@iUJMg9udIq2-J^e1&6eLxiw7r%mESVTbO6?Zp3ihCgW
zo7n;V{lWpWYs`=>L;u)KHCeyPcm{*Bpx{cId0&MR#I;}2qI~cPd%$V&z?*B=;jiQh
ziyA97S~Nhdl0m{m2$vhz5WF;(5E1TE4poj0AVIre1#~p#hsW9v<D9^-o1(7Wyd@D`
zM59S&m?#8pJIPPKD_iMDhE#yh+w_$o2q3G#-#J5uH;aI8%VS-1aHw@f|L>+agDHcc
zOOgzPhWRuB{9lZ(+{;CVh6Fp%ul~*^)vRAx1Hgm7yZp*T9r8HdY-bL|WlhQ{)D3XQ
zc<%%|$N2IBzx*cZckp*MMD5PeoEVi5BAnvG7kp91c{>cJ;b!*GI&tfv2KQ$Ocq$ok
zNI}I2q9nS*#Py4cc(oD;TLR=mhm`SMm|E=Wk**%sDonJMJCUzSlhqFX-VT*io_1@J
zog?VYYsM7`kk7|S!#g5c0B^Ab*rf7bCZrW=2{_Lcdz`c4D_ioT=-1wlS)=I+@8}oD
z?p86!K%8-#6hTZ%qG3wNE+rL<t$DUIBo$IqFX}oxS+x~UxSZiQL!K~xtjSer1tyh8
z!WKn=w5nl5wgtdqeN>RO)q39!BJ8ec-TqAy)#i`uD}DLXHK!;e1;e8z1h+gJ7{qJp
zN)rYbJ|epvYt?kYZc7C{tJxN9?*Ue77A?8&=#yCocE?){4i-Ov%MSVt@=w0%dyTQ>
z`{`Bk{^Tq<Ng!b4U*JEV|8u47f6~<vwsE%p&(6-j64aFHn=6(o%2y80{OCdWRfo$w
zv&2D>OU3AYhBuRRRxuzM13S9ZIAhAlb<urPyhyk<xi)w)4Gh5evYZBHo-srmKTW4|
zW790ZVjhTuC;P{AF2E)iCRGD-IdLc+JLk#Pi^;X?i>vd=d9Q8{cplUZh1nlux)<fS
zdk!7mTKs^&?k^xZxVuLJKF{zsxGJ~8S#q}|+y#0(J=6#CAS`ZCsUz-hkaV)-?BTWJ
zub2z96R#lw#jh$XJ<&JhY7?8Kx7sOhNl^;`+|~GDHxF+ZATVwz@_f5nj#ld!IzHqF
zqKrP&2ksbr2)7u=VZ0Rh1x>kPYAqxOrhsfWEQ$x7k4Dt`QmZNjxw_zG@(YVd-S#x;
zi-~|6?*_|mBWcFbLr<_^Tv?b`qe3K^Jio2cz@tj`?*iA`XytZXmAFcr2U#4e4Etoz
zkI}nRMWWki4^9AC{+hW;`|+D1bdMbegD0pUHA-nRNhNr@Sp*#BpvXBGi$siT;m`O=
zMV7LI%H)B*#Zg%=#24&y+hHd&Y{i%`Dqv`ca>RR7BS6Yq=jxw>DIN@X?ANhky9SsH
zHNEDg(7#^tCS7_$Ggg@Bk4lEG3IeMWZlq*B;p98BC77jajUTrA1G^h_WS~DANBXaE
zcmr+;KY0+plLoxdjyCgqLIj|K%ZrWXLu}Md7DegC1z)EB<<}G9xU-WdZi)zk?NC<a
z!wXNc9^`tDDw=`@8cr);D+f-;rqNriFN-)QXm2ib8p%fMEM;Vf34wf&<Nm#kLX{pP
z<|`;$vd>DQ*DJ%*A9j?o^Ip&Z#h*2<)tNnywu%@*yDax3)OmZ8xBg?kDHDpSyK<yr
z!U2M=%_au3hA&Ch6l9|ym)xDm;N9~DD8A)VdpwPG>z7>BAwz*Tn<#EAwL^Q5S`<6y
z9U`p`t4sGGzp#u{f@+&{QtYQH<ud-7{0o@&qgSMZ+%XlYG-8Zar^8)+W&+fIL$Xid
zxJfN4V6CgUQBki;4IT3RHoCaggBJ^|3Bv!xk@hoxuh3(X7PqqBQ(fa-d~Y8sg;B2<
zk%8xdPA)aj%oI#1ieL54+)HGLGf26qKxoKkv$z0Bo3f)`eu&gc*&ZHGr5=XMC`-{E
zw>RYu3x&==Ll~0@aN^!`_c{pyZw`t2hm#@cmY&M-(=(yPKvU8hB*926&!*{TK&jnl
z@#m7HoA#NAIKieE{LB!zsx%>hdKv>Heco+l^eNqU){?*T{16zz%8O}jbb2!CWhk(p
z7<<O`PZr*;HJ(Y7J}58RI+W3p&e%d;Ve!yQ_ef-7ZEo~dRqhJsd$^`Su|1%p{EFx;
zUybypydEYy)9vi46iiOg-3HV)UTKYT1r{t`Zj0(&@SQifF@xYej_ui-M-o%iZC8xo
zmlV%|s-j*0d;G8mP2Y(KVI48}x0!f`v53s6s1D10@^|z~&ZEX1yS?#cm1O$Cau~xo
zbT3A{rQn+#ocodu*Y)|a54Tnq-pOZs5|h~d)#ml&UEt;0V317=c$53I&WgD(FkFbo
z&W&?l3uCMVdCA9c{*UA>Jqzz-=x1aGME7xvvM@h~`f9)Wsxmi}yTFt*^_Jj#dwW}y
zpkg+M<rtuR5-sLJd3<n<W=?yogVtJK4Y!tyKr&Nxk^;NYe8L-Cv<}tKz(IFpxODz5
zqG)knmkY)X<mUdJ>gjXO){y917VHs8pjWrTu-+NPzHd%#7eLJ-M56@On9h)Nq<9+B
zP5Y48RCL6hoB4vt7qCkpfH7CV%?lmjtX4!w!GHvU&}=Yjl`zOPKe*50LlyXJ`mk`p
z6E`(y(y?&p{OD;{seil~j(79rZ@6l_JVh}1_c(vL4?@ZrPAk{>^OMkd?^R(>mI1%5
zRiLlKe1Tyg>g)-iog0V}^JNg%&fQ;u3%5rHc$0s?8eYv%b1OG<;d}-a-@xt&;OesA
zd?t}LLxFI2`FUR<Wa(ipw{2994rJXsJ`ted(GJ);UM>2m8q0EmGwAlmuo0GO!UkYx
zM9<dnd5<&h;VI9+td8*~4aTr7LQLc)?xYH9YJR9m8s>>2-k5B7VOj##hsw;{!Tg7e
znA72w78eBZ>!ovqJb^N2>Q+fPj#6ghVXo4<TO;Mn<|2fH@G<Zjx4$nl7G&=#@G+gH
z(uEJOQ(%KtC-v4O+lm3JSZ0<QV{(cyv{Yo_a|@^hbQ?ctlEX8>^CIZ`jNCvc2BPPg
zDF><-;`-xR9p>30HB0y4L`w)lH%bulOsQlFU10y@+kHwf1a8m<zpa5VO9_>49$G%$
z{YVzr;bM9_nxR`*KNi<hBHBD6_%8H8<ht$geMiNS?J=w5&S><&uo%5z6Q7}w&x0&V
zpdlpD>Nh)KSQf9$l6J>b&tt6;X$$v0l0p}xJfg-(+H!3_$Km}wJGVS6jO7`B=Q(To
zwRib?ugc!3-|>|^9fK7dgnmV`4>|AozUx$&>lB$k6fSWjGacY?2c5zI<I)N`)~sH|
zAuk~Fd6B^+xdwcO^IGI8Pu3l}5ymR{JzAnWEHNU-T1;YTCOJIYp}i<20%fC&*?Mxa
zM%$$f+=CSYwJow))sLqWFVe`ysYvowh2VpIL|G1`Jl5vfDI(6P8jffa-NYinRK|Wo
zQAswCoLn4NC3T3BW^;(5_Vbluk3ZQmjmO7X!(Id-zjyIRt7d}V&N%62&v@#0Vpi=?
z{Xmc5azecNjih9W@PTZt7W2d&4D*`}X-lxl|J0>`=C@}!E@6*Pf$QuWk`IWX8^FtJ
zr5#<ifJ?|}R>6ZfCttYcSVH0}=^TD`uW0K<Y|uAS$~W3SRSUEVFNxC6!apbGzpGmQ
zdrwkF;(w}^AAIHfe=V#|sctwT86$sto3mz8ON!Ga1@H?4mYj8OQXrd~*Uv*KRP85A
zH^4w`Y^7QGc?|r0nz>y9ORq04ER5xSb$vaIVw(Qh73MUql^8e1>3H29Wi{@+d`>_8
zofh}``rC;I0KE$ZVx4Aq?-ex)B~?SQ8j6<QHJD4s<Q_a$+4Y<epxs6*q?otg5kNdo
zZJcJ5ehP`0rW!W@LkddOOEHl2<MEJi*WqWRrv6#umxj-wTZf|=LNv>3l8k!H+*qVL
z8<`#u?|Rv9yp1A9MlDGfm7!5zh6XY%ZE_jhlVyD()jgveM?3ZMCO0%V@CXC(`$V#Y
zqnhRva4M0lc|#+&T)n+Vy;M()V;yb=tAw_Yc$Qsez5>wyi*q<K91NjqN_{f1WuqwC
zdp)fM4B^sK#+8&3!%ECW0d}C!B?WMe!CdX#$(*1Xt;WK90cL92>^Mt>{&hnWnu`s3
zTwjvk1vsX90tYY3D*<PNYU$1BB&Cu_F(`SzDWS#he(==~tGtgjVWe`&i2OuXudap&
zAlcwmnR5Akm!()9oHx-GdV_MjjR?LL^sE{(Yu(O=o4h<Wi-CFo1ND`$eF)o@nF&jJ
z==TYBd*%vchcKNcMrY=n>b&3ztHvVEO-Ga!3nJ^{U0jyT*-$~sLa0#}!7u;ZuNU)5
zD0Dj@*sUv5#y+FCF$7Xk5ZD?a03HmQ#Qa5K(7%7hXR<xiA$%Uc1-6pZJC#OHlV31(
z4eL^Ox+3hgl<aYdD4%y3P(1J2A`IDU_JKQ;vHOrHVfX7I$l?|3QDyJ;*g#y~xQ4~X
z=o>u*hQvX8gIm+P3iok+dm>+qz4G>jyo&Y>y$bfhW5!>Vc1KC)1?{Uea>aKRnVi1C
z&M7*|7TlN^Eti;=s>WWWcIDzKASULZQcOBvr7>ZRnK}r^U$u5GQ!GekJL^4rVf}nz
zaW|A?tFY7=>M4<CM=hc%TZsI<ouA<ry=AYFk8Mhi9y*dyPQ{mFs@5rvx5Pc7JrfIK
z*JC(cjLo06V4?3jt+f(yH&{XDpYR%L`IhkP;nvYLM2$anhMKHgT<i&^?(g1lm$f`w
z6`K+gEbc^6RZYIfrkZJ8O%?$Zv~iynfe|m->mRW?qkZT@XJfYFW+$VgeB49ZQW0#A
zNsk@Q4QWeNM7+3QDrudNuJUVn_nCX~i+cnHRB5|X&4SPddgobBU0XeWeWC-)a$4vE
z?B1^M-rD->S=8gY%>s#HXoVb(eD{FjRqx9x@x1I2`J8-%59U^_|1ZkEDag`r%Q7o%
z+qP{~+O}=mwr$(0v~Am}wC&8v>3b)7dLr)ao;dNpou~b<vAzY}^Ue#lFVnpHQaern
z?8m@wNMN`<DFF5(ux}*rl3&Q!&HDqAdwz9-+$Uj-Utr8}I=c!M7#j*)1CnN9&NKvB
zXF7!0Jd$C>-Ju@V7#p7BX4HnFoh?yrXeeQS88cGwU40{ulrU&;ZM$@x_vj7&{>IiX
zhlp5=!cl<IC|0>hS+~=$7zz7>H6!M!g%+!_d81_%eqC)x(p^uWidoFHu`A)#G0@8I
zkR}s7#~W=&M=|g)bWCJJUin4dNqHGc?A*$_L0MYCN`#Vmd+$`9TT?EB!S%WHTHMTO
zFXuw%zLs6O1db)+?EHKIO-JO!CpTbssI-ItlBjb7S<<<SBIVgfm1ZAkddiqXg0;jv
zSlAk%KJ&OxX|5Im-rSiGFlGT+qBTLF<vha|3cIh`>pL2`DqBtBugNaNE#8^vhIRXE
zf8dXA%nPu0;D;HRjVQ9lSRs74e7KE%Jgrd7i|6Xk`ufw1`|!d8NkISrFn%1>|Mdy^
z-~0GD5{sA{TN(Z54M{Aa@1n2dZfE>|s4kkWm_KM&$S)JW_&7^xt4!8t$iKf0uq-7t
z9Q})g0Gk90{;WIUBS~<khie%eT#otf;?*lzr_gG9KW+6KI9w-+3nmp$1cf%fcHdui
z&1@fAy?oB(`U25M+XCL~0qHadR1uc$W(0V_6SYoEgi_W3+rxRpA%mn;mxqDW$Hbz0
zRT1I}Av|Mn%Q2u1lD#DL38EYbSnVPJ2@VBCAo|i&ra|i=kp|MBKs2MEC|coBl}W@g
zwFLx_A-1Pflr*I?o*!yBx9lwvn_+CQT1KYG*Je6HoJG`|B0srGL$Ea(o07@fXGIv3
zx>(8#P_VQhj&wiH^?+dU+(}E^nB2D+L;NV@eY)}ca>r|Fj1~}+g1vY%b7l~V(XNcu
zkTl3q=dnabGpDPo6Kq(j&+jMxB5X6aM3pRw;b21WtXYpI)<Jh9jHWhEIRxHO6rSI&
zHT|I_c-^Hwe!9j`NyM_J!sJrKzb<GLm%bQRv1VG?q)2ZHkZ%Z+7Yg}E3DWvgjo2k$
zxt?rvLCxXWAhTAt9IcV8*!J4lTyL0jk&zi$kzKvMG;9qq2P-=E(Ku7@9I@i2Rs03~
zU@^psIfXfN73-1`66LT~wIW(tD=QuDAgirewUF(ZqoCy6Y}F<_Dld~^omg^tG<|W}
zxLraluw}kHex#7>iDB;e!_35-dgsEdxeL=>(9;*~_bi<%-2=6PY1t!RHNL?Jd}h%S
zP!fnvZx2Ba1Pv?+VGra1&9y`~yh-Zo4zU*^;U54_)HQoS)HP2NQW6YErPzkey+{hE
zB_aMgJ~bbnNHJ7&d@I1QH81(J58FvMDmC@JBmc`bdn$eh;)=I`(V?$0i5basNub5+
zUNBf?s7m}GqPm_el~8q_rrv;E*tbO8bPg=pKgy8okYUjKR#@(GNRZ8KKMgWcFEw!F
zxNW=A&K*wYV)5SZGr(Py)t;r(rAaQ)x_HZhM@6xG<Eyo|$^6L>HS4QvW)ruA%FlYV
z-fB6b#dWm~u_DvXy0=cze6q&@Kq$x!8RQMF2YUUx-}yI@(JPWw-#yab)Egh!Fw$TZ
zzUwhKabF-d?N4a#exgMv-4B4T)SLRi;~+uAkIrD|##WLia}BdYcvt*^iHMigS2VeO
zB);DsPn05QE(EH3sVxWzxnXKRe?}0Fg#<pLB@-CvI#CHJQR5xp((otJy>IdGKR4#Q
z#3Jn|Q|i1<sGSpI_<TPAb?Zfw4}pMn@L#YA1kAR3f9W6zsljV^&;B9|I6)PP<@55>
z5qN+o(9K5&3ScJ-TUp8x_!SE5MYM0b*NIOHzHcBD4~&g^qaef+luG2U8y=?#ekyDW
zrQda8nXgHg;G3(Xq`_W_wuBn;Kp5J|AJVGND5SHTJ8*xoG&GD*WMY-4=@W#o)~nnW
zl%zGB(HSniCZxFC-{JtWBR>$+?gfUSuX>Z>ri2@1fMshChshDqat!+YAAu0fX&^YN
zKPZ^-j~&^+Zeg7N1JwTiZDIe}zN%H!RTWi{ziQb2ZU=#@3RMecOHl2?r-KlZ`V#{S
z0&e@2tXqI17zzdus9hRa9=q4wbFa2FW1iQoFVW_{&GOCm{QOdDuDsa=gjCDx-Pw1(
zx*ex^J+D1OKE9r1djQRPIk2eH8V<;>R_Zhd7`Qm?vNFM1j|I3`;MU^%2dsGdmmzSn
zS<~E-l1JPY#c^;|a82)mVCfRc(z%NZGjGjtc&K>?{;K2f4j((cVC1eK>`tSlb(R&T
zj!8=CEF&1*K_;p?KQMHc7?MSnrghd34ZeiL_@M3>-KE6PA8c?EMqQtv>v^e;;2(Hm
zZma5DhC{mx^1|RzmOYdvoX+L^H6l#S7&Uc-#O{+KO+S|zAtOsngruH3KoSS3&KGjo
z<Vcx{DNdXY*J91ZN#{K2<g{%ti7CX)St-w(#EWn%2<o%@)0B>imjDVS9SzCsYZqG^
znrt4)63K=LF{j4VPK6FTyV_ebItvhe@|<2mwo5dG75OH0DkF6p9QuZGaukJR9w98v
zA%R|X5_%wdfL#z08}=w(l6O#oL^EA%)RdtwYZi83v7u?vS0#FIN>StGX{|jbL%p>o
zFHypnG)_FActA9!#mt*PDvY#E1cvgk6w(Sh?ZnM=#C+eTWKz{wv-nu?drgR&2YaU2
z4WliE1PM>pVaNGgE~Q3^H2GSA-Y$?npx8ICU0;LEmt6R<F}=KAikmOF5WRV2J42Et
z7iU)-lUH7j$F%I?Rms1_r5iG$euai~(ST-RB;mF4eU7De!gniv<VezM+fQN}DWy}a
z*ZUl0PCNY1CandHZ_Kv3=WuE|rfV{)A=+zm=32QH;i>Fx42y~MTE8Sa{bcNb4H)l$
zImlEo^+7MM*A+juE_)r6Agot-t=jv#KTjCP4a|bfRhVHAO$!ii32t+@@x+7*8`}=U
zrT)Z7bZ#b770BwDab;>XZ*#x`D$5Sj)|g6IrccSIRd8Fl9aHZV{w5@44NXl59x}Tv
zqa(<M#8wmL^!%afU5Wgxvn5sxZmJMxCP7t6qiYjteEh(eP)@Vd#08ZkcTzT6yF_g@
z;gqIFVWrF_?b@apC6a99C63apHr5B;6#~{4(Sj>q_K;lAj(oBXpGJ(XYA%_SDojto
zdt~iJhI@BfK*l#>QiuPSxzlWJmBq8e_7p(AXo0Fh%OGwzZ@5qRukbF!K*V?At0eS<
zRXPT0210xOeS9L+n_s|DC|*_JmUXunK>;1%)ntEjy8sReQMLR%Qqlst7B$*rt@Cc*
z?P9Taet)@%yc(#T(G^}mQkxDDHj-^hHXC}NKOOj;lsd}LbesfB3>6?eVyS8eH2K_v
zm>rvVDap|(;Z;@O9a`|eXh?WpFc2UbL@FvUP@0gK7YDLa16if~T0f`z-Gbc;y|MZ7
zyK%o!G8ghnP{YFx(Lq=JGj{e!26iSxi<HdKd)V}>P=?G$T}aLb!#eBS;3nhED2`;2
z!JlY>7L}TK1baR`S3g{tV-XNl=l77i5~Ph9q#ChX@^0h=WErYg_^xENaJSUW#vi~G
zsGq#sWRH5^<lPpm<$b@U-)e@lQBA+q$bue0rP~C-S$?-J)S=j=!n1<sFV~?3a}q3K
z9fDXP_mdJ>v0@J?H-q<?Q&a0z!ea)_nkgZRGDGCAl~IeV69%aakjI!I^|Knv+Y5Eb
zKSGHsRZ1|4pj0p#Dy5Q`L?vjN43ih4m_*I184t7XECCl)6XDl~_%W{Y^Sdu1$US6&
zlONFlBbx*L8d?$Jmv4fXqqYV{7U*!t9dAqjk;@vqjYiWil2$2a)+<~4Yg!Nat%m@e
zv0}?_*ehK2QZylzDx=YsZQN$A2lFlByeK*!&@C0ND%UnBT&l3n=~LR=W0Qg$%?Yc?
zW)23!)!|H>(zn$GPIvs+Vqy=BunT!aP|yFv8NFzW;-UFx!TpB$chiC8|9?9C^N~c;
z-3wXyuJ+7ko+*)(c(2<CT>f`I4(wq_oES4OF*YGC*BJBIs1fOO-(G!QgU(3>RYc!A
zKlcrQ6nGwB#B+GW$XP^tL_y8SS&iFwh0gP&Q^@q#*X{j5=kr@v#dW1>ZG}$P)lL63
zR}O$5f<iOYvYsvNo88=s_z;8EgJU14ljB@2USlizZa}8I9rk&^#tr)w)~GNn9JIl{
z7TM9B9&LynLsEEX+pahEbTz^xYr^T>E5ioFxqVVZArAX6NS8geA<oReKr6dH-U!2<
z8<@;)XgF-v;G>aA)_!mK2fg$VAefA+0Bwx%{uixUWH2ptKN5y9DB2M9t~h1RMQ=Lo
z=!gO-_Gzy=Y}RG3qSg(-w7ovYwDG?CW=8EkAd0MWpHY8-0RdVmhaJL7DbqU!ZCa42
zgMA9n_uv*TSPBzA2$~L=ba`cK+PMUn3dihmZzE3YpuZ283fG+fuVDyA=V+*zzBs4>
z^gWfN$YNTpkcqaYe*fe48*Xl0^)|@fV6@#_oK}U`KwRur3H7#(lTLc$!xsE6$30;;
z`*FM@#qsfh@T(=-4=A1fveXK<bRarcfuA&$;wpOq3Z2v5O6(U^lv<Zv7TQkK@8JNQ
zW5Qs#{oAH;H=ga@*mE^$w!1e=?N(gd{ie-}UQKMb%7~V7H&05f2v@u7Y|8DS$1N=@
zy&r1vvtc3B_0YRg=Z-&I>#hcN<vuA2p3*G=3ZB4;(%*&8?Ng6d!oQW_z=Gf!_V{_B
zkRLgAYH*dU7=88$rsbwr5t#G$sKCLR;5dXi4t$T?5xdCfBCgv72@!gab>n(<^R;l5
z5FkW-cPIP$P+kOG<meSoLJbFl2M~j3H)j(Fb!qDXYC|4DwBo;~ju3)wn`gz1_N=%}
zGA8QT&z@5~D#S-86B^Bh2R?H659=DlM$yWO?2YSVR~lgms>3u?lA&$&4RRL71<cIf
z?!s`v-vj&`BJin(jX|(C3H6BRNeG>|N>B`#H9VTjkN!mH;qTvqnB@=C7OR}^)s-r+
z<zRc@YgjWcK$fpH7qcDZtufbjuOdB)9(jJu5gX4?@@dwF-Iyqy#Tyu2A7%;sd6y8F
zl^o2L@cPxotf5^Kdeq>};91vykb4dB`m%PRM5x?N-yhaY8DyeDB(RW0dIZf$8K__m
z6T;(6K#UdX!04|AWuCPzY!CFeG)<8}%1l0v$dz?idcldX4pCP~*3BH~RUau0RrC-4
zjlyaWf=IJO3bCQ7iy_5Giy=h`bomh@bY36Lge?p)t*%>)k4zG1SAT&Fl6Ip7;a@-8
z9uA#CPeSgin_yE<$`rc=V`iAjGo?caSzDuys`X)>=oU_!8CpVSlft;RY%hLr(<l5W
zo5b>Tt12YjR(e!Xct*2?0Ag9(b;w}0bt+H_sR(KFMYaV@1UEX!1A%-NR(m02J4DfF
zvZ5IhS*+v*6Vb!8SpxKOgB|g7eyA9!->q#VSx4B-)h1i0O{lr7X1rr#=P*Ji?1uML
zS~~e7Pdn-ekRb!e8!6!DSu+f&&%Kq29!xTer@fELY6CVtk&SqLgZ4Qy5LD2J9}GkO
z#kf5)n&>q*izmi^Nj&m?$4Z9MuesE;5$BznO##hze$vqD19Jy1NF0ElBQV{_aAsH=
z9U8y<c-;%d@F>D5p9$ydHAQeyKubryedsi&m3=~&L^~#pv6^4Dto>%+-hR5wgD2L}
z(L_%gBIc&5BcXtQW7!KPMUi)!;$UR1#}l6jt$bm3XW^nKoO)Pf#?g<I-ZIfF8>xH&
z2E@O3`#$%lQHX_aCZfUX8xo_vYeOFzG7I`u4S?VBq@)zr-#7w`x82<;LRgf6P9#Dv
zR(FXnddeFEf#Sndz&YWS{7aS?vw(k&Bi#QPcki9Zx&o(u3{U}o8id!L?2r3i;>9tl
zk+BDHdXDOBj<{LoM8KR}u+3kgQ`EEkPIwsD0a;8hm>n}a@b1}NnO4cb4*fz<**+bZ
zoRDnHO{iz{I*ews8*1*-KFhjTO*#uZKJK!<YP-;ojxbo)gG5T+;yoQNjRDhEw-iV>
zINsSC4mZKTPp!_WAugre`xn6e-XPv%kp8)h481UgOm!BI(Sh4##I4AL6gFmx;xUZB
zB_Hdxo?Cr>8%TEN$lYB!9?Z4iS3{G0NvILTo<LSBHzX;>RNMu9zuW==7qldXVHnw1
z0Q<sv!w=C1-{5DZna;%;cK2VXy&Mn@3xgu)?jfz^!n15C8P+-TIy6*%BMkkCkcjoQ
zC}Y%+9;p)s+a|^dG9UY;QR^Grq2-zx9<hQ0(Jnl^#~a{fPj3{4XhIM+j8nqRtNtQ*
z6CF`&_CncRvd613PxaCsV!NB^v}Wc_ojDU~eaHG_t<NnwdI1}@z;;m+6GGJ4oT0ah
zc1yFg<z=8UAGSLB3BG`~6o$OYGlv5q{K$l9POMd^`eN3lQ-2ee&fa19yW0Y2YW8O{
zw099OF{5rl=ny&X_6x@fGMA@e96<-_>y0xqf!XPIRq|3D==nKNx@C1jzkA`}9W-lA
zgRaI>S?~3hZvcEoheW}78umr9|LnXlyuXFs#D{zj$}+owJ}JOYId}%P_w6oGeHf|P
zh`c4mZRXe!&Ct6>#=$li`VL3B;Wo=D>@-_ta)-3d(<DGboJuhz0_ooX5nWNjS?9R(
zxY8LvA4^}P7(Z^bh7Ltrq|+%FuX*7T7uA_%q2P<+&&Q+Ar)9V;7@A#K=(0;;+6*S4
zbtDdDMHU$`TnsMWIC2Z&g49~v&|WCtLc#P5)+&9Vd9JQt`UL8lztH?V=JvE5d&2nk
zUXyP<fuL5t;K6)H@>RH{h58h9T7o+-==CD)=Hx1W1fT1+y+{x3w0#LC^7oT!wJe=7
zknDo=mF-NNmC_^0XsoigkcwN0h7zkMB8!u#=Ax+~g3~g!5QcL`5*|oJVkFdbMw^S(
zerkw~AZ-37tv_!5ZCsupn3$CynW!LsnLyg6R9;A0ES}9wp*=oZBsEziC~;OGq0Lf`
z1=hj#N{^1xqZuJ*9wA}sNJt7YrRhE?vkDxl2~n-0hd!)F#5}|kst(GW2yHrI3)q#J
zKVNjE00;Bbn+QIzo<?G32hY2(i}a$D=poV7dQvUn-Fg){OI82NvA{p9cHIJwsVjUy
zO^PII>;U#;!hm4F^1|AkdB2205G7@EplcGzL^ER9ZOu^(;dBfFvp<a0)C^qvLV;PC
zGlaFYnggx>_R>377<Dn{S+rs?wqMy&7ri_IYcI%!Y_1x7cFZ;otocq`D^k<+K1VG1
zjg7&7DqAtRAww={t1H%~ghnUgWE%(C-Fu$}t7n<!HtBrvLT?#F^ge|}(@&0<_m!Lg
zeqN$PhKicQQf80hKH?ZzMl|h>4}JnTo5j=SwrakdBt_i>O(uJy@rG-6bwb41L|=Vv
z5ebUoo+IPAE4t?OXu`z4x`<u@-M6v`Ib}LiTvPxGN!_Nf@P*Yw-qNP<vb%T#+~#>-
zt2h~boBpz_itNcn6WgNkq*K=ixt0$4k4w+C&U}MGW*2MbxcQ-G%u7kkUuo$^Y7%r}
zQ*zsT+Ll8arWuBA6ahwc%F>Z@8clia=}U%7`BXLci_hj8z$rXv+VJH;xtS*W?5D|v
znwCb2oD57vsC-$OzIc;dH!}9Y>7LAdSD^qAv>tS6FS;;qcLj%tS4T0tii}_4EZVfU
z-juh@934@2ZxNK7@D1jBYs3AGhEOv$V{ZsW!b3@5Y`LODtwNL%$8ukzqy^adMryPl
z!`Ugc^wBFOPxlqT``k#3F?=RUNH1jZwZtBh0aXjr9AxT!ZH)+wfyHEkb2baYy$5h?
zw<;;DMT!M2qj-NGUB@UIrinewD-1R3LeaB@!%q9kUJ902Oxu&^Pe|tvH2k8FH2&~J
zdnrB3eR0--m?Xxva)|)7x1vaEBFu@S98_h2DCfvsG%p5;GH8Ct*^%%n5LCV42`>oE
zY*xtGVU%`O!_;S^z60vqLRzmwJ|QV%@(=fqC7%2-@f~W$w45U0gNTsz^+%3=`A8~x
z|1^?5A|vf;Cv7MgL?aa(kMb@;Hrf=80ukLC3V%qt#~@H*Kcc+lIN_8Iv~n71-Vr-6
zO>lG7SwC9Y4#yrv<;|9X>l4_}59wxJ(AnS7A8BUIHk%YXdA-yVJjtn3Z>J==^PV?!
zzF0u%e=zA$Vfp?wen&%LT;4_}=m6SuT5Bg`7SWAjK2=mWQ9AgUS3IT}zyD}{6|p`z
zXSfw}u`D(##A@AU%t9b`VX;(zvBt?0<;PNoYSfBr<L4X)+4XY%3&7~k6|92f>j6LK
zI{014n~$6PEOZxvp&O$)%%k%4qfC9Jk5!(n*QEjspdWTs{Lt`$Im)7_UGS<f&kE5f
z_CB}GzVyL#x5sJ`8gLb)!@mdi%Ad?Sjf*>B&?}$jUa@Y)2-lpEE3FMzA>mb3^99HL
ztMnj&?6z{OU)N&dTguC)@+Ri*SZxE!m%7`uiGwLmYr<=7WA=x;+b#H)hgdZjO}cM3
z&9~%DL-Y+!V!G|mA5q+vLe|nJy(($$E$e2Ca0M5+ORW8w4S&?Bq=uX3eY5-MwF6kB
z!$L@fjrGo_n)nB}a>>zoqhlSdV}MH>u#YB8a_Q0n*3H4|JJ3qUC3$Do`P&hK>Mbpj
zJWkR_JLVl-wj-~l86R8WJ(@H|=qmGF%@Fo3n!D{Id)xI0qE%I*jNdw%_S?ZdnIB||
zYWwv$#G*4av*)-ctw<hplNXIJZ&!qqhKQhXB1QOJz_h2vCxn-c0MAiCJz#jNP|I{{
zaZekNE_pu!n?$sy7@F^&ITcOzAe-~yS54-HZJMKRQH*6yV%b%m@T)|kAyN5`sBB(;
zG|s0!&n2?(izz0f>Kumjrk?c1UcC3AN3ujSxN7z64e4bO*G&(aeFPXc3HpLq5AB!h
z9}r&f-1OeaFpYwCU0jNI6pA=UG?OFiz`hQ%W&-zzdmD*>YnXBeyc5a}5HB{M{-ERK
z<HZ6l5?_zf1k!$ZYeC59%h4@RLB|eC=e)m1OLIpsM;Hp2dTKc8{kxneVzC336uk00
z1;0d={S${;K{zjiK7!lQ3+=F?wuJ*fN7*cgKx5SLu&}8>J6y_w^@a9gp7H439P44<
z;M_qK977ico<v6XU@NwyG_eYK`tnE;z6`wVfT9Y;hizld^RPYQU{&InawRQz;W)>R
z1@T@1Pv~lcu-#GqPM{6^tdhuMsRMwokY#bTA(XF};NvU(?spn$B)V{whgiE3uOezx
zJHTvXYy%>%tgFO3u$hM)dL3RZv**NuhW1@o@an)3sK;;#X5QlI0n{2<mgEJ_0NsS%
z-;wK(bH_-BD>u>gNIwozl=hTh(mj>Im9O~w$`LUTe^$du+&%T?Jw}lz*B}znYyv4x
z)gS4XipoRH(?OIL2b=`8-8=LVEvs-L-8;_m&3K}C5;8;1_k@me1cC+Bv)mI<#HH*U
zXk5&RmBZu4&ERz5nAE#9PSQF+OcH{vf*=;<Eu1D1aiqg_`V(iGWzZud8#8qs#gQy|
zr=cgC>{9gkOV#wiwt<k;8&LI*iThHP`|_e00;!R<u=M!}D+c?d6WUOh9?OzZF+^iI
z*kz$@{9hM4{9-=xpBov(afHctv61!s4_gL5s{ee{F!?486eRlmdXwkV5$0=<4i}_7
z!o1I22Y|xb{lm#_LS!TMKojw(oq595^=lg58;$sFI_mLtvSzaJY)|%2+NP8&P*P<6
z{HmO=)hHI$cr46meg05=K5n=;rEuuFTgbyEt=tlT={>sFnj0jpCL)$+(=9f)3J%sr
zMjA0W=arPxVpz<}+t9*L_@1MXXxX3zdAfcBG^8xT0RNpCRbfY(aom^+oMd?P%&jTb
zyXFz2OC9<gv%Wn864Ql2o4IN#Th6VPCa<H3zABC*)-E@J)hQ}_u5~>wE&3b4+K3qf
zQ6INW)Dt{`4bO-AHZ0ZaZ$Ymu_6CLQl!;B4x`-8gnf*U$D=P!RUbs9!imer)k!O4R
z8l$Ea8g`0J?J6&QfDr&#c`fxtJ!&bg;byj=;@v_zRJDQdKGj9!GHUul_SB(@6cIa;
z2p_yBRD1wyNg2tba06QIOi2@(yPyfrF79Af$#|h7huU?j+c34Go_akW#Mp7q1(bZT
z7<W*sf<6ePqqV!xuPj+a*8@z4Z1ob`u>!9&T4X(uuH)Bxf_Gr8>b!ok6L@>PuZ~`_
zyg_&qy1OfPZ1YyHo?}Gc`0j^z#bsV<8noY(+O*%K+U0&ukpc6U5!5_Y<nuDcfe!%*
zgk8mD^Q94jZ!-4czT_Fy6y^>g^WwZB;;EtJ7<cR>inJ=66ZgqA4XUTKs+2s3W%H6c
zH4pK0DsSVd<Tmcr4pp5pV+poOpraef*ssFIaUbmoRNqxm_&7MV?8)*Gk{H#0sSc9u
z$AOL88O6&LN+_t301v&2<=W&Z6jZ2~k}8uG4nd7m96}jI%N36(V=3;FQj=fDJI2k&
zOUKjqk+Foy<aOuYT5fC`BCBtpyk=-P-`@t{ZglyFKmyAii8P}fX1On`Ojq<@#-vn9
z=a4p(B1Ul#$r>cH%noM-%Il1XDQ**)hPXKpd_s1lst^nI9GRl`FN*_R2aGrN93T=9
z#fvp|+hE4obud3*eZi?@iR8we=1co=lVV1t&i5kzPCBi{r&BQC39UIK>hEQH!B&-r
zQYGH+8>gUf9w2ha`(OG2KSETnI%q9nasa^QPlzGm3pr6L{yl=homW0x*T)*ov}Q0t
zce0mfMjR4TWR_xCK!#yqlAfz8OfNA@Bb`UKaqf5OkFxb>2V$aMNFuI}vi3r-GQnWB
zC)yxLn_eAS9BvJ|wEB6(W4Ih1+*7Ggiva3S_%hm+LYM$JSpe|ef;5M*dqje<n?h=_
z-}k!gpX{*?Ja@51Ww^1oZ=Y8vj*cUw^Mig>I-$vhWpp`Ms|Slf5AVuTF|yv$he7R&
zM&?)<z-%>_kZnyr(=6+TY3aXI%&PP6KjLBj0+_Qd@IYLGQ`DAV0a0-CKS{gxE_esy
z(Utw&DZc5k;s*N?Y$?;V1N+F>AB25DFDbg|F{3W9cJ1Z#LhmSLC%}uW3#vL(XqB2h
zoQv`-c^LH62b%CVX8vM*NZ{0qPXgqz=UEod&OiPKK)awU`o@a_03iBb^4$Ml68nFj
z=l;JL2v+|W6O8!B0mj(DM&If`ISB%ej^?H|#{V>hNtWf21QLMvMw-z?GUUGeQ!kz`
zje4%M4~7jMppuelsKr{<q3=rcwxaL?^dY~mlOY5yQIdvXvJG~9?s*Hbi<rzWn<vYz
zz<_ya!_L|_nE)rR$B({=F;PjBugf*Ew{F5N+JFD*eV|+Xq@$VAxSN<esrxr$@}{N#
z#eit<iKjktxI=WAwB&|?^daYin|bpNVkzUVS;aPT{`R!HTE}1?MF*!g4U=Px^V>?J
z#b=SS%tYu|QYNvT7`nBoEc<(?93nW*A7K!EFhX0L3mQ)}<D3z9Dmy>zEF&xb&xZH^
zNNRd9&XhR#fww1q{W}2se<Bk2ul4;W{;lEZwXov+jjKK{o8s%ou!;|cw8yUZF?fVP
zzY8!7k95x*n<g4T{b?m+G!}0Zu+o)L&upI9Y@X;mwqDoJY-PC+UxTg)S#&<$Y;(Ts
zeA&#rwQeomA=;?=Y|-qp^S&_CfXinwHtYQsdUc<5&GWqJIL-5H>bv)z+YOp09rfc4
z$yCvLHuOtNamZP@vuc?4e8_gsQRjn|x3-;4>6WYFMO*nJ2Tiy4+H<YFM#DF653Y-R
z1Wox?wBp53*=sD4>xK;T>koA70TpI<#oi3_M_Wjb9MTWmk@4G2x%$-^#`m;O*L`n<
zZ848xiVfvSxAJPo?WU#TJ|kp>#cLwa)^pCUM^VVPb`OvFqY!N8wm=zXX%`0WYb?;0
zc7XRIlJHfP<;7O#LIuzV?YpK=4)7y1<6TzyBNa{g#dhf}hjRPDfZ$8C=}Q%5=ea)=
zuZ~16*iD`W)<Fz{Y_PnYcF8$WnwjND-mo~s4WzLpm}ppq2q7v|G@-tg|2kYG+D(->
zP7EDFdK`F(XRZh#7L-uYC=)6C27U~<Cf<!2W5FmzPlt68mxbWu1ZFryGt{6yKWxqd
z5iSb0`6!O$%*t&=F-@N+9vm9ueMBS*xFwas>^|N+4#`>3+8`NoZcZP{%!O?uUC(+U
z(6|wPHj#e6v|k{Yt%YuBGDwSs#|RfqzH9ij2thi?P=0@U4V9HJUuyB`RNm1o2~%)5
z3;_mXPESo-v)80CHV}R~UXA+qka1Q#M_oafpd5D4d;-G+E9)X%56Zcn%g}Go<VCC)
z%np%Iu&9@>Uj85=l&*R`d<S}XxXNyp6R8|<GDrk=+w1kX_)Qda(qS)1FGf4cSxg9_
zP>uJ5TRSJQYz&Ae-~hNe1;y+wB5`NGj7iia3T{h375T{&8rmBA&^)e2uY3cAq&Xw@
z`E@KA;^gS(IU1m`IrhWVB+<Hj^w3i!mjUID(oU0eXn4m?k^B^dCb~<`4O4)OYc@#N
zlmylR_jXgitaGmHl&cmKj#(+>ctd5#RtI`)7~`z7l=`G(>xvn+hSMrivQ>^kQib5`
zruG971LlN9BUqpnmq2}P>`7<_s#0yr*zhtG3#P<j#<s+2rgd?hqU_4LYQfx~ZC)a?
zjxes7B(Hfp(%TNxpj<ppNidOt_}OMRE47=xxAf4C0z(&q{v%*ci2IcR_+@WSGbxd(
zA^r2WodQ+^TyK2yAY?}i)$3}$gxZRNA)18lt0VETw?nWcZ<H`Hb&&mAPTczFpsXl#
zc^S@r>LAf>W?|%*CfqPm5m6BX`>RGS%&1_oTonim)iuZsBp#HoAi*Ph5JRPv-8_UD
zqssJz$GigQvRh{V-EBgzP0*j*ZF1>4mN@8(eAq>0gz<&=-LH)@yCaY_C@3#?NVcgF
z;v6R7PGjnFz>0%W)FVZE!?1j2UQ#s^Dy?<VXZ0Y;G;46tfiamrsPEivWvlr@>IP=?
zSQ5lZWn9Fh#me}Gs0)=@C9R;9s*A=rH*2&<i3N93q<)M+7Ly)vs^|?js0y}6cyLA(
zvBjpQS~UXnG+1lUcv?Cz=d2@%?e0}GZZmRb0e4XE$OdhkK=yn?KG;+Az5&kt3bEa!
z7%)4vL<j97iD1%ur*yhx&Y0b_7%+P+Q2+rP0`v@}(*}Ojv;9PizJN@(pqSV_r1njM
zNG18g2?JVU*9hH2l7Nu@=Mu^4O%gMTE1$z#G;6+qWkQ+~fcgfwaE<tOz}5z9fz!K#
z_RZ>tuG^G?ay@#c)BD&mF#FNmsMkhSEAgG{$BEB;H7E6XK5Q{i*_T8z1Bd}U{X9ZV
z_VMn$mRmp6ra2Go6v;r^==q`pVXuJZwS|@r_sjLA^NbBA^AuD8ZGu!J-E&2iW?SYA
zXgDm4#7plnerDvb(2tOz(_D=ayl9e7bF=T>G~bcF>=L)?_NqA61~lJG2#ZqSvv8rP
ze10QGFEgjrFjA&4&K8g|OvSFw*76nvsA)dE{nyeO=x=;q!9?@0+zop2zYA`)df_CI
zJG+MT$op2XnlwB;&BCcJ>gCOUBu0dzEa{!pX)K-EM3>JRWGb9b<DxANvfDQ++cS$K
zom<Z4tJ^n<M4eqv9D2^4#%-3i3MX{dN+okIRu28J7Z2mO^CWw)mk-0Rmk!goN7<Q*
zW43_EqVW@xayDF$EbmbJ*3&@^d1E5IGf?5Vt#r^26=O@MZr${v=&$&HcNGG=ni?lk
zpj5ZGpQ*@1I}Mqs3P|SM&7IKGc+PsgmEv2TJFZ#Zj5`)G)v9$vMJ;rIrBf_FQ=95s
znDnzJaqDmIRA8aY|N1>^^{&$D4)~|6`#e<IGofA_q4Q|M)XI(D+cJGEapbDr<(OHj
z+!nVyvfg{04waQIT={XRM>P#X$%waUq}>2oF9REm->%@~55BJY0^y%@g~{=RfRf>b
z7H=^uxSu`^A*^TE5b7QW+`za=+0m$|ZW}lyG(7r+bh}D4o}|c8gn_L%Q#1WWq-k?{
zzqaXz!O{@Z_03A6>r(EK28brIi6w)%pz#E^l}UvjE_~0ssxB(n0vYuC6wbwk?lT?z
zy7R);spRp_IEkkM0#DTO4)B`O*Z|~`&9^ocN~*_^!#5~4=aC1bUBi7CO+-@P7(*}v
zTCR5O)#7bVzHHcPwY;ek#9}JuedK3#D(NoJh`5)DHbXQT9h2OkS+b^7bAAF}+-3r?
zxF!V{qO6lEo}Bsswkj8%!CnYjdHl#~2`^5W4p=f6kuBDud%>|9_#$d59{@R<vFsXD
ztqgTLe{dC$0nRegEnHoZn#uXrCPX^K4Q{B2gQ9rf5F#Dc2-Zh#icbewm=s<q7Y;4e
zWj^M5o;;9W7EMC2cpQ{U@|C2`CK1d`AW-?3+Y0zDdpw8KKW4JmFwNVV8ia)O_FU63
zJGT{hm%=xx;`oyf+VRWGuB=wuO1X?q%fuUaWb#b_o9!GRzyv2ie>sr7&ja`Vo?fQG
zE38XpS!!+1;sqHSZPgCHf8H9_W{_TzN7(PjFKFx&9Je`bgT^G*09RC;_PYeyM>d1c
zhsnp3_S;4C3s`3DzQf_wb@h%fV4+Ciqmt%}@veg`Pr5e|s-6m{U@`!m$=oNv(6%X<
zvMKbegJMzE;iA+kzw=2BZWH;el;er1S<d)LZo~%iu@T!dlP1Xqj>S%~OqAovk=+ny
z10*J?j(1gUn=wW`rqOOJIK+MucO(m~?geuEolf7zBJX$nq@|G|_Pu9YbDefu<0+_@
zbguA{W0_fd6o^;4H*!u%s=Tv6Nm0dNexQRJMYv31Wx;6^K{#yGd?;@IcT_s!yW+eW
zV&(G80mJyZzpxwEwg7V<*X>{HR3H7C2dMjE->CVX?0G(c(;b1++#)4e`8QX^w^FE-
zFN)6dX36V`<n2_tPpG6X>f&$sVm{GRKB;ov-={N*Z@N@!Z>|SCE!uBqTBnuw#XVxD
zBNU&&#XVA|wQ?0Ra&MMNUx$Fjbjo;KG-z*>fn|}8w^Xf#J-3Lcmz@C_Um?RKl4_lm
zx0plS_tZyP{yjZy2H{%2FCP<FrX@--`9j}@B~0JhuPn-(VhU}rUHNjQJ%%ZceQ%PF
zB-Pfrn_@w)0Nj!lym0PsVYYF01|2#@Onq>k_cS+0EIYZn2e1xc9Qi8Ab&)h~c)5W}
z6BgSIl_a+ae-{ZJ@$BR4&^@CUg614{COY~|e*tdia#H<R#206^>1U7Egus^0xLZe8
z8bx=^YoBt4g7BIacXSC_KACeD3z}|j_O)cXYoJUF%kS)Q$F||rP???7nmx49=AX9D
zaQGj=reeD43RwCMLFT?AuGhS4MI)JA+vSQHhL(_4kx;21t{m@A4YnI7k0X0!7?|I+
z(HS-Y;bh2m_;cnijD$6l24B|K@sKuaR(sD#Zc0Nf>jOQu0C|?Dq7HW?E@tGad=k<$
z4$Z#;px&j}_Yv7pBfvaXX$p;SQjCD62g{^K<1pfR8WTK8lE6x!fEpplMBoi51g23B
zH!4InI<WClKf1|h*bAf_B+mO;&PU8hX1c2!%f*mP0{O(FmNIN_2Or;X7gLWId?3!u
z3}t@7dil|?ahea|6|uFO<ySbT7&1^Bp9}u|EMh6K`U17jWt05~ao(?Zq}nVDyk9x#
z!aEGFH5B5A)jhQE#E?vmZY_%}Ea7Pl{}Z+Sd2SMO$Kb_n{OOS0Tvqix6(Xs&G3$je
zKkJ4N6H;Pd<%xlVmd{2ta%k%f#N#}mtfU>Z@c^*I6RP1XsmfWKSJ5NS(KifQ?lk|z
z^)9vXow48kOo^%^bV|I^MNy+L)I>kjG`7E<)z@@L>E-k!UPE(SC$!ZSF_F4|W<j6c
zT#}}vEVZR7?~P!bD7AHblG$mDqUao9o~a>GZ!KHjb*He-0LN6s@A7l8$y0jLYd-ap
zd6y*vnWY3WrwFc&y#3+`$ips{#~wJS+94Ua%>uqb!01(8&P4*!O%muN6nvpQzaA4`
zV1K%;Q_0(Q_}k}n4#b_IbS}yKSDek438#0P8BTFBh0`Z=O#wFd^a%FRl<r*ZT&>d3
zTP|D1_Mj=6B%392n&D>o50!6jueYg0>oZ%@@5>U;`2}N_1ulgJI^$60aD(o_vU>8X
zBz6@EKudMkaSDq|1Z)FuDTUN`j7ftshds8F0-5C{r^JEHU@#~tHhcKmd8b6gs=ptS
zPGDqbQtbytnkglkIVBsS?K^{|Vk^e;AmS}F(yqE0F&g#EndKdkol2AN6evaVO0gL^
zat-$J^Ls3yBFc0Ywpv0&xxJsJ*h+op<);dk?aVA)=73%43p$qTnHg6Zz0;GYjF#=x
zEM3-s9SRGIZ<oDR5>M!K%Omo%vU&{XobHI#cgU;_R|(I0soc?pRbYQHLaIz}RhDfN
zpEKXCi~wfc<~nB<hvuCsxwasSH8<VY?{KBnb=tsE-S&?7WQf@|v~nNW+pPN8Z_FDz
z`&*0fC)yTM>%n+&)nVQ?i`jd{yy8A7W1bszM&HOS@y=W7s!Vu#-(Z&oFG$4s#=j0O
z`1Vx36~2r=7`0s}ER#Hqx=tGWLt4`xQI|K=cSbzO&b4p;;cwftb>xKz2LM1o_wR0Q
zw*LX?Ow{-XuP`_KPYmN9XLoYklmrk1a_~&`flz5v_Hw)3;c&1G=VG;FG2siCcYsrC
z2*qg;F$UgrFx;+SxHyW20EJ1sW1H9WW@4vrXZJ7k12KFwbod}P*=09Db`Gu{s;L6G
zVe+XVMi<j5NBfy+@u5_I<qN#O0T2Vd(}$7Nf2x!j9-Awa0oH$|F>Ck=Aml1#fWSg*
zscAP-SvNflBXYJlPd!OU9<L(Meyw)n+L!Xt^mkiXU}`#CAl<<@ArC-6LmXI_uwff0
z9h&_4qU-Yd+#FfUl9WaNq_ch5qXDAeHzUX)Cb+<d0MSP~l^ANd%0~)Ag;jAyyUYue
zyDSWa9_cF#^~v!557u|6I@rP2PXRCfEv&)%KPa)Zv6GqY|D{~{C$OQW>5B9tSSguu
zn%5`Kmotl(Bv;-jviA73h#K)ni@F(^Mr96!UAn~BECXV!2o;$wtRO7HK^~rtTGzWy
zLNmB{*TG%=Ebt3;NBfE=y~La`p~(Bz_?qcB>w4q;qHBiN-1q(X=ouixUVB&r+nAxB
zP)oufNmxh(1{zmb9orDW5W!Uc&f@nlXOy^`j0ncC5itF9;Q_TwotsVw9^EK=IGX#n
zB)5lpKLtc>`)x)PW#{z0>FOO8;*XJ^O1~zc5D((~FbMb-bIdUGLflQWUxdySw?UAL
z*{z;bY=(#x9vy^SI}rlSGK$K9Jq@j%r0gs@3^dlTof?$dN#CFxJ`hT+J+UR)F0Mq-
zfaj9DG{5_dyt5Qc(9)<~-cHnMyuOAj%&ER~KNsM*%bZyXKffaE#BD|!xIyB+hLsc?
z;$8<}$`cviJcp*EgNc7wvr?=O($Uv}JZEs0jB0M84Q#9x@g#D*ry5g7Vmd`lb>U`f
zdldW>-RT_B`u5;S9_mIdY)Ex4h5!q9-mueGGnw`gLiYT@7<8v!N|ubV0lPzq{&7!X
zvyDDQ>WSW16df65Xck=oOoxJT-v&qgUpJWvSc+5#n`5co5^nS?#45EmvEmX2xD1Y$
zp`dHY2^y{?G!|zf#8kVS<;41iQeZ1u>S5Lx=wz!oqV_d{-TU=m;__Mg8KSZ+XQ00}
zO3~&BiGU4`++|Z)-OT7r`}UOg2$c_DRj9)Cg;X7yh1-Q-P#q2G_^?WM6>}_+mL=M2
z8>q-kPmWu@f2&m^N0#)fwfj8*@pq5Ey<Hp(GOB^lqS@-rOy>Fvl7~coVcp^9W!8WO
zB4=czq?C|$X9v5Ix)2V{k5i8v^)<|PPJD_GqAn)<2!Tv0;x{q_O6~aj4o+0-(7Yj+
z3pM&cH*0tGtyJYAIYD@t$<2fs15mA$>cWR`9~cXCd&ehP*V1PP2xv<35;3+%Kv2<8
zwDxBvUgY{wKvZwz1GcywVelkhg#75fn@RL6zcRrV>u?obze;Eu{8%`asVciXHnA9_
zYR_<_x8ZBWKkMV+KFb4ao;raxPRi++3zLG^!X9C8mjaxYGNEjc5qXhjS-<!5N(<^b
zGC~t!do(m4eW`$}X50nJB`fC2P$3}9%BFnE8h30u$WIMwYcAV28a9{{6dO}p)+~M*
zo9keSsP*byZDh?|Lb_+HiFo3Qk3Uo>!34j>#=_pYIoiNA;^Et1O03e0AkJarAi)yk
zz}<J|3^;S}1Bx6uPP%82zt$}NRh)YOThe&T6!Swv9B-?f$5R*HR1;5i)NEpQR*_V6
zY+5ew(eOwt<_X$~0u$pE)BQF7@LTX<%kLb@azl_<(oKOoniZ334909k<wjEmX8aem
zPx>$31MreB+dxgLy39UB^0C2O>46T#muY0)t=1$6-fOc?C@$>YE2$e0(Hofy2Y^(Q
z06MM!*8>Ewx-5w9eef$6V7hT&T}R-B#4~I=5+vU(f?eScpG2b%;D~UvlRIg{`r3XL
zh}0QA@$N-gMAHFc3GWs;7d=c#%#z*oeg)YB<nhlW4NO`6HR7T-+qzA*;E3>~Qwv5A
zdqCP-s?q%wHNx#)2YW>2edhH++c}EuKbz}m%+?)4L^U3LnD$+0>V@7)w?oTe*C9}`
zbF0D~6=vB!(W_vunXPUsBr?37Mni@m9L)_Q-$0bL{k~AjU?wsL<t2uzo+reIl?fvV
zCH6Dcx!<sqWCSz%8dFkTkFLfV*+WXU3^W-qQ{LpovtFUb`_@&6*K*`OgSfY3*vP&D
zVjn2SgFE)}9|MrFZ0`76+!J<??+pB4d}3fe2_nLdzXf`xFEUQ@=wP+OlgHFI7-u4U
ze<Oc4yr>ep7WeBWK=+t(F>q%qXDO;Bs%z01qm_awX@Om4LC;x1U_HH_V^L}?kmuML
zorqmYa1b8EX@fDsZaCu~sCU2`m8sy|n86D)#6t#-M8h+0yj7hqkUOw)AG{Gv*l|w5
zhg^dHnG$it3}Bj(B8Dp_bYJD<M~G2-cOK^|Q+wr8J+`AeoQPGGljY=Z4|gItRhhRG
zw<Y)_zdR?nEWRd_Fya=({Huy`x}YRTChqH}{10Ig$X<^t-;d#P64Jlh0!aS*5%tfR
zue_#!B!J8#o#H=6t}hR~CJZBvuP>i86dZ?-$tr-nO`1pw4a-zM7PP-+d$VTSo2qA?
z{G(?FqdhED+r|JC_hTd|e>m;-zHXCzbMgItf2Hz6unND~%Lj)@1S}D1rKc!BTX?b>
z#>HJ5FhuxtBiyGj0T~3Iga~8u6VRA-wi#yTNIl^A1rbu|$X%LdvCKG$GB67~$>fx5
zgw;?|Vl2t>@Z#U!_$1WJ6jI_YBUGU<k6hQgtNV93CZ0Bxm+X+m=Bg5s4y{MeEd2bH
z$04qERZKzZNu<pxKA$1qp*p}VT!31aE>ZvY()cKP=R!q|Ml8CPe;*8}>!g_DzC;D5
z?)Y_aYa4ATa{@CNjPNq6kz&(|aQ?=+yd$)?_|R&k5j0WZt=KX%HBs_TOj76HlCXHC
z2KPv^yNqVy>-gIaewIf6alO)tv()pe@plKI#78NkDMn=;CKfjxAq=ZZ7s9!Tkl(=*
z<D@GzAvebTgt6_3-uJ?DFGj+9ZJWKLZp`CyuDj4gPxKPLhZ*r~C^>e3PpP+X8&ZhB
z!6ngqtwWj{7aQG`B^?#}Ayr5^2Qzr8B;AbZ*y<>En}XO@jZVrFpxkNW=}KMNexsaJ
zssKpnw>}ZBX%EvYcJzVJjM6JieQEj5GnAP)HoIHeIo32{3|Fja%|5Xx)!oVHg(>kZ
zprC;Y);(pcz|X8z4yW#^lz(ahp|KXJPMfsln4m*0&i4-`N{3|ouYNb5(;TP?MGM(i
zjgD(_3{b_~k9Dgacnq)G*9?Mq$a_7ctm2{Zz%A-BZ|5(e6Lg{90LRKb$CEm@N*0QN
zOZ8qx6Y?{iszC&Tb9O8i3kN(Gof1j~b?3iBX=RGqg+ksS?>@qz;Rl&3@PF#p`Go)u
z!j(#l1V|MBIEezUjA3!}?LK`7#U7)9^7Jqqza9uJcwQg~qPr+a;0Kf;=?5U<2xs@?
zAaaG%%d9td!$Sx2`6p|+;UtDLO8hzymiYA?kpy_Pk@S#lM~#;kZx?yy9_)j!>eEl^
zl$Txy0%Jzfd4xg%g10^!gB5i7aEae3zAC;dyehpaxGK3Sx+?1ib@}}t#(o0ik~nNX
zc@x0@HgDozMz6Zt=v$i`N*g;m{+Rd^|1*^)I7%9_pB_GV$E-;M3boTO%remQ222YX
zEeAi^uxd~!L*>STmfJ5Bk*G$CBi20@jA`fI*%u&<C>miz418>wC3)Z3JdIvsyNWxN
z()7CcXiZ#)M8CCRoLyHV+tJ(U9UZ7&sjYE#+I(PNp=}*yO5meg_81s`KDtSZCh8%F
zhv1z*I9?^v+TK7JiS%22jXh4|MTQGJU-%>_Y8GZ2E;9)0?N8M+=>L{^OCL40mj5)G
z)1U8OYb5FaRV(_h1^Df3Ze{d;UQwIWAiR(dQNDc%#;j7t#PNk{K#;^({p0f7_!;04
zqe;Vpgk~dTSQG2?nXp_<A@Z7qxy>SZ7Mm?JH`Xhxmr$#Sl{8{;*VmV~Te_~_yQ_G%
zGqWdUOiUBkKzv^hH_~5^KEJO$N1nUbW<H;9$pDxmlYNx-fVjP8V^z47gjC_)Z^3y7
zRq>t<$YXAo3K4nt2Mm3X_t<4)CDU#S(aDIt7DGoq$q$c**vAs_4k}}rPLQDAih@dC
zj?8^NAiCd(;d1W|7TktIP1XN0aX+i$<{WIy+(P9(7b5AB_us!1!0GO1(%o;Wy1h{D
z_(a!sPY<xUy^zA~?C))Gdxa){*Wl6ZdUAW^lKAWnz+t?Ja(|?S=HA>W;`$5^%(%aR
z!1esyQ|1212;C8T$>#6w_Ek#00sHlB!h#zSEc$3B#ecQP%(9Fszi-b%JG+V!5yK24
zTquapWX_DbRQMU*SCYivN$T7slV?X?B?2mDQ(vhCHuF@**`>aSggcMSgFuAyMJ{I{
zwT9AWr4jVVban`!)#5J}iL{PO!&%~-rm@^!@UX5UL8;lwTNV5W11Rmhwp!R7JGqI9
zBWLcdtuMWmfPSiKxRLw?&QpF85t1a9iwJe!^-8b1gG1U?Bpq&N#2;<^=i5gb10uA2
z$xRDG!E&-id@evvNLkEES=-wsK$ytFO6)RBSQMDnUbl$i53S^14tehu%uG%ixr1Lp
zD~8}u)EO#79<{lzz$u;@Y!H*Iz|EBPtr7-bPu>L1N^qi0twDV9h*HyM`Xs-vV#{xZ
zgxDsrmc-uo?K%?y14swJ)O=L5KT!aa1uJsyd_<X>vl*>0b&VtnEPzbq2*zb-YN#~C
zntF{gHqgVRK<zm6;ix>5OM-A?n4PH#iMNlvQoL)34~ZgJ7oE(%>oDh|FUn^Z85U}b
zVhM=s9w#yOgk~81AVCwQrqq!jUR<c`73Ufq<dU+^hypXgFWabDrV_GVY2m!>BahcF
z+~*M*S?+X567pW|u&~0)N3}HGS)G-Xot%5!7Ez_mJZwrXkjWkUA)Jh27f&q~0_s@v
zu8`m-kz^0T4|^TQS!onOL9spRAUsNQ1gIFT;7&{7YbOXc54veftx_UX(L?<MD;#Pu
zq2R7;BQ4s0m*%r3ZN@o-gK(m@<VNgcy&rf;L7bju9A9eE%qCB~CSx>G1O_sSi@ivS
z;B;2gX@~Bm+Dh6n88r6hq%s(8l4}CHWYrWB<M@h$;*~%KNSUX_G;yTfNQ81Ydi2-S
z)hLjEO6Tbx{V&GeIY_d2%Np&jF59+k+qP}n=(26wMwjg@+qP|W@zuTa=9_Qsdoyt}
zA|p<mKQc0Zv2&lj_Fj7}G@H6-IDeKcAlC@|L$~blA<ErcXHxQf`0#})U767)n!v=3
zXGFQhv>;yy{yetIy|qZp$syf_jrB?(HPggnj0#FOF8jX+*Wsjw%45N8Gr3HUgDTb@
z7+Ut_QC9XWdR^p3L~A7PT0>GVu~D$v<hwnLpP`v1&iR=EoQE}2;=(wJggl(tEUGkA
zwN)~+jb*rbqC|-FvQO==evD<6b$$xFON)O9DJv*vL(xtj)76Nf2<}cMna`r@@(02y
zPFbHGRpk`SB$pFOHSsG%p1`6wFr$xe`JL(clYQ`OqRM{SN~?_;ri`T42_cUZ$cr<=
z?yI&B+5ib$homxu5$G1kp^Eg=5d~F}FleFHlcTEJU=r}F81jb?D4Xc}=IN=h0QAp(
zSYYmiQ0o`OE0P?bDNv4$z!hi@;R+jfqW(z~2`)<-(AJnhQUSu6qdNT2hYnRLNW~40
z9yJ6ss>?x-y5uH@Y3O))kC1|Z1Z8|;m`{zmtBYY|SQqunFg)s9n12YyuskZzFg;3$
znP3W;C85kDaB*Zsgn=-HNcyADXc!t=cytXLi6{cs@h-vJ&5>H0R_JgSwfQf>1rgzf
z_(50#rdQ?dB0bm{E$a#7T5-KNj>Lk=U4d22JVw@GAO6f9>1;X1()QSMzPYiIp}l;x
z1_D+1@3j=3i>(CkIsaV;xfEd`(2vs9*m40`6Ll=MY^{Rda)!>#n1zOODMl>1&8&q2
z#nJY=&U(saWF=)Xn;?u?-{PAKi>fh*p%tSKt|^+4oa+Yjg~Mez%ui>d4JCv38i}V-
zqYFB6j8z69&}MC9pqT_I?SP^&?)9-L!!77sb?(~|Hc+?h*FKAUkAerECs6W|-%a*s
zM&TSbP`l8&Iiuk7`Uw&l4XA`V$uAFBLA`6x5)56~z8=^LPi5IeL=ZfG^X(WhmmHa$
zb49;y*&?Mq5_hSJhv`g{hR~G8NY{Dw&K$c!ueD+>+e{TR?58JHRQb<ruTNLq4LW-N
zmKF#=R8MG=@x==hEt<tVdpM!8d%kkJC7`o#a}fi~Vonb?c%70;p60p_z%rqn{9I4x
zUmdlzYaFxNEUrFpj|;TpHllarRBTIM;`?t?s^=YPk{LT`<z;Eze4HJ4+;I+pAHkRo
zf_eiiSht|>nhi;WU=9?Q<jb?G181Tr8-db-A#H<BC}TbG&yeUCYv}TQEdx*5gKNs1
z3eu~cpC#MJ3%CFFK}<lhVvG6Q07J$U#`zTO-{3G6(G@!2LY7@l2z93g6UN6fD)><<
zgxL&b`TOHO01cs><DbM<7$sUzor*?NO@Z@<^qVPoA&PKOy(6W45c8pjVsl$MsNm<e
z8jBa89~L0ri=_7vks(Oq_JOp9`@rQ-7i=$ulqz_!Eq&{~?OhEakrUj!zkPovGm%x`
zF&Ng2GW6jr{14R_qpQQd!oCoQ2~S8B3Y?TaG34YT0QX2i#1bc-)F2RZL@;~i?<l7M
zM4{3jw`1nLD6Mm~f|Vx0s`XbYAt+@RY>%Cg!9$ps>d|Jk)a)^TpY{7Bkgttp{!)Cr
z4FFfj?L?7T{1%WbM$|1R6M=A{8W-uBB!(fiz<mZVGcL*|T8bnXIe^AEP&*e}<R|~>
zV|0j#HVu|2obl!5IW7H)YiiC6kE5~A*#tx?;<_&8QIWH+ncuJ!DXT+=E31o9R+au}
z^#jU7p&BG@3}a<{H`SWSHmhh%P{zhbt8G)EI{9ru@vizPp^UMB1g`@l@q5l(HqdDi
zE&dPJ=rY<md4&ul#-Q-5mArhRwPIDV+Y0O5!I-T6C;+u$7pQK~RA@C~YZE*ZT?Uj?
zz875#r+?kLA0*|b*5nCQX=S*d4Bme1dG)|Mh5K>OG;8H>lvFDFPOWu>j4c`Aw`f;&
zd8p-Ddy12V27rCa3z;RcTy4C3ST^r?d=z3zdpj7&0Y)-7z%qZ$TF=TviAL0+I^Po7
zA+a8?(Ip8jxs<!3R#bI;tbss!VSr^C9;{(#a3-FX#x~2<nOIeCwB*9Z8!2*>fy)o^
zCqR1h17GBl{j38kJHHaaED6yC8D&qC8kwOAp7RpNXembkIt8~<nn%*y^oM737$$&M
zsgT#nj!Md6fjvfl2BTvc;rMaDBQUyfVvn4O<HfRP)S=gLi=>1^>ax;SypUZSnXNz_
zyFR^Pp@6(;!ULx!cS<B$7Hw0qHPp<07REg}+#}rrKC>QbxbCj(*8{l!mT7}Xdx6)Z
zW#>@spumQCKNWI3aw2(4-yiH!KYPu6SHjl7fG62N;xy!X@iCeN$HbsND-T}qxEXz2
zG8Wcu2<w{%Tb|q<&!lS!^K9t3OnuiboBFnW)g?C|B~T<aa9#qX>DNSETUPhk#;3#>
zBw$Q<&AsgtIt7d)6<NKOkfBEojjaTH;-mL*Fl}>!HO%q%FHQyFos+^jVqsPn!=D<R
z&qa{wMJ%y~&Fmp<dkk2g+)%!{a~URB68FoQFUOgt<j{zH+Mx)y2{5HI{S*TTONsWb
zJFIM34PE=%COZ$iFc!Qx!<ues6ucw`iz+YJcKxBZCG&>iS{n{ilc>k=Th@DxnHa)9
zCDWa9xa1iPF8VwMq|qT-ociGp1U3v*Do1&G(U={-yxb;?$KI%=bAwNb{&8hbR?3}^
z*Q>RG+CBBwpGd%wVz7Jeq}O^>vqn{~VuNny0#OU2TX=8NCT2F0?BUP0t5egD=8m-G
z-yy4H+Cj5zWD2)`rNr>QE;o2%JCOr(O?okV<6UFvxdpkM{+6M#VTC%q3aM2+-!bOp
z&bE~Z%H-d9Y7irR**nI+`TjOhY|U!5EJ#Z-z@V0O;7ZT(V?Fw>;2P`|8+^jy$1nGp
z7jM4ZfY<fam7wjy=+}JN*RC|5$}*xg*`Debn&xA)-RKvlW;9d<wokSFXPlRg+jrjI
zaE&|1vlK^-s*#r5gj0Ec(d?5Bzu^9Xb%;|a^JBghk&~(aH>^YcZ(*JP=)4SmlN_;C
zzWuFq8#>a7ZRUz-EY=!}WZEU}&7~l121qTGgfdYxSXTnZnA5G%o)BEk)`5iul+S+2
zBS@ByNs(KMKr&kh<aP5a{8T^&1_nk(!OMF=<u)^|=UUB{aGlTl+Gz7U&bj8kYCC4=
z@qU@~yaJmcPVwC7Uv_T=$N&g%uMT!;;WX{preUSfpY(ynxY;8--Osylk$27!ulA2W
zxVd`)47lBW05*>oRJiS<T`q3!wAj!aogD9223*sT>-!5Z?l%IsSa<nAu}ybqzP;7`
zZ=9m{9u!K(Z4QvTzh&Z1k1f4%!p%v!p}u|vv2%}M<G${LdLjApia+!YH>111Fv<Cd
zFzY#5rQ-Gs{`(d3(}!x;jkfcw?|X|K?W-4nNAfPwZv_M&$0bC-GKVW)puj?j-!%B{
z&&xs>R|o@BhNz2nQ>9SYh4AHvT5{M9)3vJ~NQeCdvJm1gt`2n__Q*!;DqM+puL9)p
z;lnZ`*6U<*%K2i`QZXy**0PPJ*r+c2Ezr4KZ9R>i+G!$~pYTI1TM`?}F#ld~cQYSW
zX&|_nT#F_XTH-Jd6Z(x#{;k~t9zMIsG?MRNSr#R1!PqeO)+Ql^J<{`}Yz^RT-30R)
z*Uo^tkuTaz&IQz{*h#Qa3H&=LEY~+Pl4DJl&qB+D?nGW3;?=Wb!Cd*ayvTZ09sCXg
z=_sXq-kEVYwb>!UyP{e2QqAyZH52k;k~|$m4+qgMTB#Z3vmau31<to)y8g{eH6V0t
z83QxSVpCICCEzq7{@e`HU*t4@?n9Srr4rWs)1I7icN%E92c~}gN|URsJfHk_v+DKz
zd-FA^CSrckSknKDSwngh#|CRod2Rylu9(VEHn)HRC>g0w;w7@Tn<ClX(x!)mXm!d`
z3W@c+iq#*AX&^^)(kor#L)#>EZU>G{dM_en4G~J);T=)BT7sLv#jTTYh4)aPVQhd@
z_WZI>Ok@;(vf6GJQZ&y{Ti^eieT|;nL4>_pkhr+ae&bB(Vp>X?!M;LBR%;wM4m^hm
z9+g5oA1=#xn05rm>`d{iv6#$*=KjHA1}rJ=kHLJ5)1t1-pHOYC<g#uh{l5cZ*->ro
zT*Wy)ft?gamV2@pnH$Tp0iG3-%E=-N<k_Ih0<3mY;k%|T{3^^%a-mjm!-8uE&ZUU<
znv7ZeVn^cH%@OjF*Ggb8xLU)g)r+t>$(qfmFNN94MX$*}mTQ1?l+-KkcFq1)o-k@?
zHz+9)ML4vgefdU;pwe}Oh*`J|{3+M!2h#P7e;6}Sl5QAqrX;-Ye~nN|j+YcxOP#9F
zicULX)dWfK=O!Vm_)5zOt40FD8Rjny-oN!2qBUIRTfl|2fNUZn$o1#I@V$z^32Cq^
zj$p8R&sJW1m&tQ|m%%#Gr;a0&?aV|<np>BGQjx;K%C3B^6JQ0@=CG`!={H2JR&l_x
zro6F7v}G~i%;{;Sm8*TMeYv1z#LTmvvQb#ohKCk&Q#)BIDv~2DS(;jTv;*qEi`Dqp
z3P_CHmYsei)Pdn8)*)mXXN5d6E)@ugQZ3!AZJSv0r}hSfYe>C>M)~gPA%4>AOKX!7
zg~dgE?a)BtpXw=V@PiW~X>c3g#{q<B;XJs-xm(3KcT<AIM1d7dkxXl@Q|h2POtd4t
z8AF8qqaua#sUrrQC6LDpgeT%eC@#@V3`?S<2B<MoBUbC#1(Ku;W2h+yv?V4IMM!8<
z2fY}S5TSrE8KWTT+2cn>tAZ3rP$ddPQ6v9`qN$A)q=0JoHE?Q^M3OM?FmY=~TNx|B
zNh(7jdVI^x%6m)ZvFt^HEXJYQ@qwHrw5mP@FPfW>SE+!aRDU!0W@@cS)Lb8}t3fe5
z!$Ft_$c<M{7uo|Mb&J)QVukZ4able~b=R?kdC}<x*)$q8EWu_m)<h`subn?Pv0xhq
zU*8tPf=5)tiG34*bpp<qjmmRePmU%rt}~QAib25|3A{B=;eXR045^M4mGQ4ql!<!1
zq9I7cNwmZyI+9%#B*4xkP>LD}8Ldg+%VwEsT*>!H-!X;ebTFzoCU$`%`GnhxcIpcb
zv?yekV3x}LnqoFvE?U2nlO!HHKYf0fqBrnNYf-Qd^-Pv%Z<$;?+!scdkcXs`fLx~T
z>XmrfiwX%o_$FO+Zr15w=1$e<jFry4F>A7(>8Tm6C5X!94isA^W!TH*P}4l(=vZ}h
zXf1!+xOs3RA}5$0{X}mS36F*4k;E6JVzRWhVJsKQH#ONLKDo$Le>M-48|1%DvqQ%k
zdDLjDqjGliX$V9n#}d*%rH)im8(rf{J`r_^!*>*XHQEAZEydo8wN;&t{Y$ig=_$S-
zGlb@VIL_?uWiS||TSWG3zNp@>l8_hRwn|J6VoExd9pytRAwffwEW99c24k~_)6z`x
zs%hnXVfhz5>R_pnuvn*Q4(rm|(M&_rh~s#ccwt}PM#@C6S|9YMY#xIWoHONJ!bB8l
z>kJS+*x&~COjQ~eNZk57H&pgR<{Fr{EX^+-wArY3NKCm>z0}$718?Xe8o4*c2|1|d
ziPE;)G&pci#TI=c_?;fjWX}E5gE>cfJ+(htNj@x@ypM8%@F(j$)}Nn2w$?u%FrbJZ
zFd~zRr`6M}t&7{ReU~M!p&dNI)7L<L1NyTAw7unKyX<Z5asA)Gxrs*Fg|^2C4^RKB
zyF7tv$6J7~H5+u48*%ZZdmsoLEW--%h6E6iONVIu0VH8)$)M+C2REF4csdh7b*hE>
z<U(}CJCBweGvl<|qKiDOXgOa<8rflcW`s{RIOV|)s?%~|Bd3{88+QZ(b)7Vj=bg=b
z$U;iD469-z)7L7Y(6_!|Ba=6q?Kvsyn?(Tmkby{E)Ct8vUSNy)JK-Rw8B7a1Ip^Oi
zYLo92@t5;F1;@}j=M+LIRNCnlAHHJlw4s5lcNzkljJ}|0*~XLkL<WFof?v}kNIC}<
zrcw0LZy8KThO8O+Q}+Fs0{fC93MhkE<d^eFJ@3M58y!&740D>)Cv4?n4NuJ&pe5xE
zSRH*((>T#_c-2|4SzDLPWr{*dIDKB5!RoV!TMDuFrw|K0MGW3rLr7vm|2vo!=)fHN
z>B@I{!x5>5JOnTz$Ub><(V*=Ilb(Q^$K~DrO=T*gwkcGWH@d;aaIK0wSC#N^#rXqG
z=GbkKggFf=d<ZM-I6BA|Y49_X0ZdPr#a0BT+xRx`wH5oZ1UvZQDDVJ8gSiJ74^wU&
zWK`29nSG1bKP5H674!(BWEhQv{up|HfGdIjns}yznh<SJAW~XB$2%wiGxA+Q(xiMV
zIoqq9h;{35SI(xyZA1SEV0w36QK(KnqvD1f3H)ThD^mdylW)48U_iYU8ld@mstvYn
z6%4NP5qfoS+?6501S9{~b3V{>AtYSfW2{1r4}A_f6}^rcVP>n^{{Bl)jib}ME?cGs
zcRYFKqcBItGM_{PPwR$qn+Ds@%LA@HP#z!$dWri`nvC&VPX~}qHlcfh`=U&ABlIHK
zP2Tpcp>R3_t+|HJACeQrpibqt@>%f;1l$2Y+!2c0qQ_6{UvkjV?)`h%GPh3F{iQdj
z4E_o?Y-~#9A0_<fVet!!IW9bo<8Ye6nI;=MC8$sN7Y5WkrH4NxqX$h2BgdyLZc~&r
zlyYi^2_vj}6P*R+;z@E!5DzdWh8vuba)_jOV;9}ytv?b(4qQq`+ROoFqq{48HA5^V
zc~lc4>Um<Kh%>aE-G&Ul0vqq1`}pG%M9zu(*~VzfdQCrCW&Ef=3oL=GN%agh#z)vE
zsRwDOXCiC{$zpeszz{=~%k)Z?<6@Uj<F;zeHBkA|821BYtVn)7mugoUR7s=O@IGoH
z+%7f`kQIwnDQrlS=qBUd>U!<E4>S|WYF(U@Q8h;vOh=y<jnoaWr4O(v<;jsuNyNUO
zj=@_5$#EId8o;Ivte;Za?>Ko_ou|l``;4UcwAGPa+0qJX8j)_SPssL(oLY8WRnU52
z=n23=c*ONL_L&u9VBK{#vF6uo?Jan4vOcWZ{1%@qa2|ZK8|Hen+RvXGD#pt9%c-Qm
zZdBkmFExYV*%p~TzkydhZoBn(SMlwZz?nY7ZW$R4i@Sf(t79=-J6m-ZP>u{v`_TIb
z4gp&JE6w<gLjY9&Hx9x49l-YuJ^s&&=KIRX&W6s+&d$u*gwEd4&e_h;#gtCO-Py#}
z>Dw(z(ZtNc$=T84Kj%)-Q8KVU1>l4A{$hm;R8`T0WydgqhX;$Z_f3%76uFE#Bh{Gh
z{(vRXq_$Bm-WpF;?mj;M{6Q~3CWuTxI)KHI$}tTE2-><hTWuG-$Z*;9^1#BIlaf4{
zvbG&SQKehGHo?l5K|gd<))dB4EmiC^KF)q+fF=co=Y+Cq%gR{ba1A=xS0QcEtgioc
zoJ0REmHH4^6>zN#Ae4uBoMB-WZ0;Z24dqQ@-u}lSym-uBReb-%yYKgZ4W9n>5P1IW
zL-;Qu+<!B8&sO|TgLhXXX-sGuc}SW#!9C&DEO?qdMg9n6av)_0S@tVLF2}AxSNL}n
z*{q!eD8yn!Fkm$w1Uy88r6xptab#nU57VXlqpsDDhmUVJZM0eHzFtEFPTBFpDCp^m
zUVC%>(O!;_Ia0ZAhj&>K>paohCWQ(8=7O+ctNcu2ZUggXp1MQl;FFMz)ff><&JVGv
zR{ZjqTgpJ(#}>{kbM?poDgopoHH;Liul~6TJ9={~!$c<OmcX#>G4|`W>^MeMEqB}2
z-68*|`=XTBpW!^rrWPWnHf;C=sb4Fvuk%S_68HsNomj*c?^T=%lC~vYY`4!rWlinQ
z19;Dyah#J2Ydp{4=Rvj$E=ycISH+c&U=Num4@E=a-}dg}-W=(3I<v7nK16Z-W@JIy
zamA!13TzA@^8*4&GT4I*zgPjqU(5jczd8y2pn+XqPNSy$WDSjU5YSM*`9qAGvVk>K
zKvJ9}#u5z=#p{y4%KT)LzSr`I##cJ@U5&sZczS+4y694lGi&nAzk-N(kwn<BOQ#QJ
zoq(JALyxjj3)RO9rh#U*Xp9=>8TR<!p=PMuK$OFQ74rUW=9_4JcBkZE12{|^a$C?Y
z+j<3kVuQHMy!`kmF}9g|Lrf_mDeLyj?+Pe^^>OJ}Mwb?fKP6|{CnI|r36DlfEA=ta
zlv9+=KUN;9_xptrE11Y0i+DPxFbI9*^Un$Jz3Ofw&bI+J{(rM}|JOMDpG*h-zkkO6
zb4S9~)b2mJ1l5WEbaM~+YMO6_u}we)x6E(kmqa4d@85+SkjYmp;vW=<Z*|U!ULD)4
zwgzhgad0Q5t&sed%i~7=_H$QE7LCKVH8mA`^X<6z{MbKkx&DFKnhbzmava%P!&X^#
zX*Dp|?3W4AP963kenLdiD5FPi28Qd96O{q&pdg856{3srn3ysDYq<=Q1SxoRB|@o?
z?K91TFmSjH4hOMz$nyt}R0e}A=Yaz-ras1mJFMF)5${c0B#z6p@kiQQw`nqNRau9#
zWCk&T@A}%+{bB7qXhFl8VjF5*m-ylL$^@|;NHpu0Gv6*FswAt490NDH=Y#pY6mA%M
zIP6%dvGZTF`R%{4uFC7E70~+Z@6!hmVAe%Bm~U>*<|p>4`J8oWx~o)+v0mLIjqAls
zp0?NS*W6ehNzV4x>g;BKq0V4TK$q_eB(%t+vydF<m8)6kTX-;MAXl+BG!~NVsJ?2W
z)H%|nnfk}L%*k+ez8)%lZQe(orGS>;YLPB3$Zt3iO`G|#JZ<|J1NJ7OG*~XdqjPyk
zYC@q~zdeGZo17xNGO#32#;jox{OSh=>fqFn8@5J9Il#Hm4jzRM;fq;<kHoIkuT_lJ
zng?Xi*?V=&N&OP+@$$vkKG~a9<pRYbrWHm(O?6yC8ttW##`b{Zg}h1%BNUFY@rCq3
zP#yblX_|eYL#ZT%tdD;hbg58`RKa~m-9Hr8|L5%Y{e1ZM9s&PvoT<P0A}^wR=_b&3
zB#zD#v%;G|BCukKOZx{9%ZrQCr-{>}L!;Q&b9G>>OjLC=_^*Uk+Y~RYJquY|HPM*s
zjg4>WQ?9*MEbvw@s=oC;-COvcmwxf{@wmA%a;;AGn_BVaZXAD0QBCp0dYaOGKA%GU
z;JktR34s8esB0N>GpoRxK{>4R66XhZKPm?7r5uFj7P%4`8_pgU>*)Z;+gF;4d_(a~
z-Y6R?0vmS!vXFJa!}AsuM!7;G*lEbR{{_T*+;=R(yypYgjc<rU3gV?O(3EzNNEiOX
z*xfItcUbtx<8)`4qXCSEeG24vm|S;Xrd`BJuwA%2`u5ShSf@Mk_HN<z-H~S}N1w#i
zek+;BeVX4eh*z%vkYZ0wWnE4fVr->DNXDflH~f4-3BvjEB!NgIgYp9|iwaK-#_t|n
zM)ZosRgX^3GgA{mlQK;9B5BG?2&KqIILcXB(Cb>%B@`xv!p-%gE7#&u1QECvxJ(8a
zI5$|}sPLy+gCHVHPiE7!A$7uqtKO}Gkfv6QOv@Z1@nh70@@yh0Lqlm2|LdtCswmHx
zv%yG}B`)?xvm^r*1MCywwi?{i<^7TZu#+K8FB*_s>Pv=z6bNP=neAR&6KX-KMT5nQ
z?63@_h5=z=sg^S&QF$l}i-NVEM0vuZNog!Caw!@6m>d8V0vR~YxQ6Dd=fkx>{1y$i
z5q(IK!h{yhO>Np3XALB^4@fscpbSQ|A$fMXKN*P~QeC*-B2iix^-oF)PKh^i%E=+R
zeiPIhAH<c21~k}?y<$iv>C5-VN_^l@4(1zHV7OqkAE}KK;3)4qkW{fA=UiH2<fAJy
zRoRkfAPE7q@dzeu_*S*4=V^O#Lr0ei9vjdbqrlw*vf5*}E7ozAbXIZdr_`TSEHy<h
z)o%<!Hlf6_p8cxpNMu#yVJO1G(j}mlwV$8?d$e~lPEc*hu}nA9bjr4fy8|X698+EO
z3oX+b72Hm7iC0D|>iD@;?z`4YXc!hIszvlw6wC;)=A=D8<<#&ExBc0zi4A`?$?fN?
z#X03gmtuvSL+;TML^(ic)kViLLuAfS>_|YA+GiNpAaF{q042By#mga~?MDSQu#@dl
z6ah<1vB#E@Oze<Bk297x@*ye!B#l>!ZcceH<qJ!aVQZ#jn>Qh75D%WVvp`jhEah{=
zJ(n<X(drYW4;)Cy&y!kB)&)!^pJrt0gUsv&`WxJ3`{g{4hNj)`JA)A5ukNr%n+N;D
zAyn9O`hy*#MJ(o)3FV0QO1MkLoRtza<A9YNh2vtQD%+(GiV~|%>LuG)(I-w46bhpa
z$nj<le+Y_3rML*`G2xA8NS`_sBI1?a1y+6q_@R+}8?ci+?8-v$4O1b~65{WoxhF#w
zc{yS$>^Z7u9$=1Y`~{>Cm4qN6kdVH$^2gxQ)T8j(Ao_&sNxZQ55bd_SWCtzZwEM9U
zcZRExyd&5_xMy-r<&wMy|9MYF`iy4dngM|DNjHi2-HJWR8eDA<>>w7G_HWDnygmp|
z2HJuQc>*~yt?)Qjj!Tj+w>MNjrS*1=#!>u5n#{`~1-(pHi<>X4ApmX*v2--*mFgQh
z7CtVUK&F%9&IqUpZm`PXk?~?f^-K{!zrexWYA#GQnExUYAhIxBclUhiXr+#ItVvY}
z7ggE(Eq_$0dv7fCCis>`*ff<YHLiy<FCJTNm>tWP{#@hM#!r5ub6MNF4(ZifEtZ5=
zHr?tQE8xM|i^SxOpiH8T2dAn((p@FjlaeJT5UV1ozQEGGVZ(58_v%P<6`@6GRQ66D
zPAXjqJ_^wYR9F{cy^^TX)`9{L=R`OzC2dOOmJn&_7O(0ma+z7)2(wRZ-AdRCuNT2K
z%_D9yxP7mTti~=8`<qlaM8)Y3s?uB3N|0bG*^I2_^_+7{U6`{z*j~Hg6hmi^I=4b(
zDT^|pg%T$$BQ`zz@mSQFMVW~jzo9wp0mZ0LiVdi<A1w$!gr$d$cmr()O}}Y|ox>!b
zA4z9GkpoHRi74Eqb!ob^=le9%FV>9y0;L_ki3i1wwBI|h1y@dGnN=)#573hJ6e^Z(
z>`7J<gxzO{ULO=mIrRf0ad<<~3z8Ou4_XD^LWDA`fwl!l1uC!8`BjhHsC4~K@bzun
z`VJQ2N^9CL=05@(r|p?s*WaJ=qJ#-G_r%72i)m#l!r$L|&+Ji^%CUQ4*+Yd?e}L|}
zQDy5ZYs4r{Bb1y{r|$DxAs$MIo5?#MZZem9VN5cWVP*@k=s3vO*dVGETb!9E3424r
zOuw4pN8PFT_!Zl`Kwf)5yG$`QEX!&Q9VO5baPJr>?;tGfDpU<a%)L2W48v)+IQGVW
z{&?CAB)+|z>bg(<h>66mZB)2;gIrmwGS5~iHUy0>Y?4w`w}d)JrSSG>A}@Y|2y;&m
z=8QaKKSneOCK`i`Lio|}Ban3m_-9J%54jaT8I0aVj~}HFH{3sYh5XR8Q^r9Kh)@W|
zTTUv+LbhzU&J`UOtiaDS8RzRu<x?<z*AwKHK7lCjiZBACXw`Hrg&dzUCO=)*lQZ9|
zDMmh39ZxJeQ}0XjhcS<Ce1kV02`kEl^(0N4k6<&glQZnYL?;9}t%;&n#9=-ysE^g>
z)%zT(Xu<Ybz+ZSk#?Q-!v1p-N0AeGw*nzxx)=^Tf_&7wnnTf4e1naU?G+ej(O-twG
zrfSLhe~@gKD(E(w<WE-LybSDFE{S*L3Le=x&Ff#Gm$C*ZF`IBgrFFPI^n4K?v-t2x
zXAN?v$(yioEw>5v+%vs)5monaBz3-uqVDL@Uf8Y%eYLwCCKT?_Mf?TEHiaGFN$50`
zyP^?Svzyy5Q!)c+8N#1UO2a>B$5U6KzlG&v7Oe#kK&AtVDXMrP6XrEM?q&ASTV66&
z_&;PNL(l)pHi5mXeMKJ_06nthA#{*8hL&wd;_b4Y!OgwHo?YiFI9d^r1oFj+U{PRT
z59Btpe*SY@SM#%`Wc-_#sf+%9*GT`W|MG7mL}?3W6Jj|-OA{mKe?f@jw)6bRJV;!w
zSR171n)txv^7sz${wR9{tSDjPy95!0eUM~03FX*uD@elKz$ZWi@Fs~ch$vwo0W^3b
zZA{^Wn)Uo6cN6Jv?9W-V@9&R~Sbk98j`j}5sIW0-hw89W?6yDG*J)+j)lKb<t+HEC
z0=L!Sa)X=5qqv&5NL_>L9eS4cAbwTO?^c8bw-42-e|9wMS}?9qIYu)bU=bd*$Q*yv
zqBzLVt{W^sBjr!;=T)~8nxtVdEEu`4Av2Fv4l~H97SPLZ6w|S+)vKM0uZFu{N)RSn
zKjJOd@Tqaj21i}r#)zvhnu8Cfy3xnKr`x8vie*$eifHY~y%`8sK`Buy<0@k4fC;Hq
z)VOAAC4Ur6+JV!wu)7>_$n5t4DBzgV9^(MGXr(+^0;?jyyL-N4X5<&D=Gx3|#HwKB
zdpwZgEVxwpploC@rJ6-tW$z96S*2|Ib3$Xi%SYgU*YGYMLPqYf(T^Z_@*r_W!E*Zo
z&QKWzETERe<}=uASgYy2b=H{wlv(@&iJ*>Nt3`YJ8Tf#18i$)i(CIgLn>Ky~jT|61
z;^lv7))7?oEe3%-e4vMAYp2Y0WXkRrXoSm>f~D-+yUM?WsoDc*E7q8v>w(alM{L~c
zZQ|=~4(Z71EVl9xliWtyKEjg?2v7VG8kOjgBwwT+(hUeH4)Sh1CO_T*zD4o<r!o%Q
z;(o_Js`Hv}X7GPi=l>dc-z$9oUUmMD$or29y;#-8>D%ncCnXhr<fsW%CegCCj#fWV
zvx!CCP-qU6#Aa<~VPF}A)|hLYwmvd~DTZ_EMZ~7(FVch6zLqA_{>v)fq5Bm`N@|`6
zMB@0S=d?$TQ;z4A#^?Ka%l6Mszbv@XAH-EJ7Vgp0wD+qOaOFQlYgt2Fv~LZFe(=qC
zxo7|BMCgU6dWnP32cr6Ey@!cc<Mc&?XDg20lhXmXb6u-#QLd&Gki`P6EOB0}Pa`o1
z@wR3H%t-?@tMw|AouaHsncNoO7S$)09#%>;!=-NQtVo2KtW-p4)i4OkSgER7yhyw@
zFB3)%CLODcGf1)rDOKiKotg|M>Uu^cGfdRZF(yqTb$$-LadJjwPSh_TBKZsh#Dxh*
z-4psBYwT=I+(?AM-~u~`pq~`hYONPXlroN!ZhY^aiY9>e*DOG-z|&QnIIE?T)4FtP
zRvuG+Va(3a6k4M;7A(<cjHY?0Y%5gmwVj^UJ+p8Yt`?XgvquVT@=~gtVi||Z-a3DA
zgDxa7a%Ho@Xe~ldlAD~PG!I2s%CxLY2IFD?S!gY!>6(ks6q5jVFp=)0=&mZG;d%I`
zp6F`o`VgBao(5ych6>YZ2cczX(IB6+Kk)?#puk?wfEZnNI9rU|w{t(>B-FAhO9BOz
zvLxX5T@XVQ-wYRjmVNv|cDu=V;-y26ttZ39=n+%q^F$Oy^5}xVU17Ca<nAcAz2jI!
zvk7k@gV^;yHTkaLOePF+rgh^H2KEtY-=~|07;Il_X^0}Vc;zW?2@aASu<XWG26LiX
zZkmHmUGF#LtGz9Ic{_>rbvnuRz00yb2z96piYrAamcV0Z^Ak>WiaZ5(qurXEIQh=h
z5vQIQ;PCVk@}M)agFpmjKRg3D?%}FiI|g4M$`<v@Hp&KDsaPOi4RiCrr1y=rf|JV6
z8%Ok#lsyYzgX!lbUsl!~>z8KNgBJtlj26y=;JfPNX6SyRnYx$H&Li!eB72vCTU?b+
zTX0Ko$<59KUEcQ05{Y+&+HaO}+|IBIZu5s!3B^2is{i8V>)*8U2plTK8NauWRN)(r
z#_o603z}u!?!&-53_(B@F-Oel)2QG3A>s}J1TN|m@(fPYG5c5O1=nyPm~ZFU{0f$t
zbOsd@SB9C_6E$K5jxY+GKnzE=`#FnfnnT(MqK=e}$d-0I3-Cb&^uQ;IAdDyIy8q;l
z#Lu6WBC!o84Br=0i8O$nQ@U-U2*#r4F`LgTNAwt0Vp}P*St8zWJAy!ZB2Vh;|J)mI
zCrGRj3YM#nnCm*ierT^)YO%*~w|5)FuA3Bd=^5bdM-lM;6DgjY<mJb_4zR!&?n@Ln
z?=X6IuY{Mxxt<F#nq!z?D}F@(pq5agW1$2^Br>LU*RHS7$u{EaCam(RK=LhR3WN=^
zgIJo#u9#<M9(QQkUx=%~9K=pBc8EUb@B&bspQ$SzQLw|Ym1%<)|Lmi7zbr$^efO>?
zp#Ha9Mf^YHs(%_ADVaF`XAe0!Wm8Ve1bes#jwY))X_mn`YBF3A%-YDMwvK|`gKJRG
zB3{YfuN`NNiM{G!=aho3+a#R$YEBr@&4O^$wLD6i*_2_mrjyaZ*Dw6-m-I%{?K9N_
zM_1Zd!qeM_PtLvPcfLx^c}VT??S$K*=7q^aI(|1F^583`9fE?SW$YZf<CJ2Pf*Z%8
zPF3GBJ~cTtIyJ-4$1qmVD4-UiwyPTeLLUO(rn)L+9&`6s3LqI}9J*s2XOA38Fie-H
zFV~mMBdV%Sll|?ZtOr?IJ$RF4GHDWhlVHQKWWB5Tf-}!rkkVDgwQJz5Ay-X<0ffTD
z;6L^89F-x;+OWR3oH&)iG2ceKV_}ntd;_bFVfiOIlY>Y>J&WZci8r%2rM)$IsUfl5
zhVhz36}=K@cn|7<JiaO?Gm@CPIxdH9i@(Wc{0bG^T(wUYOCgbK0h!Js#3|%$#(P1V
z)9P??W20<$LJI?A9&!t2&s!U!0E8@{6_O`RqX-1^>w{ImxOGCmZHRH0aoVt+x>nn4
zw4S>DK%F{;Bn3|0I)yv(myUoxo-s+7+KYf{9qK?RHAYG$HC~;z+26E5gHa=y9d;W5
zV>c+mVw$j|BV1mpAO8B(sZ1CCRXNjG9{zD$T?ZEd@vi13UslK<x!{ew)qAH}mvrMQ
z<G-7G*=+1=GQ+Rkpw}iU`VNGBwNcprQg<PbPo;72XmJ}mt5Ox-8tX-Hr--{`7b=iF
z0kJu|%7>a?)N_u|bcC;WevBGtSvD=WQ!@xReJD|=te;PS@X9P*4eqV1Z5<ktZyB3&
zb1;Ys#a3i2u?Z*MR)mKu_@{iOC%i@8x7|MQs@5vYNbTl_!kc@B;BL7mlvdt6EOrO+
zv&g+mT43b-p4*5Qlz9+@oFA_xT<ASU$G0;mMLH3pS{soA$^pCai#>$nf`9gf+z=T=
z_2quvc_g(1a48N@_DiCn^i!gF2Sr5s2<Arq?3dSYVR6#%h-<6r4q3gv`+4Ly-ZZgD
z8=4kKi)UQp&=&L8Z#*>3N~gvQw(TAJULZBstcL0i78Y%}%pj6a>?*&mQ8Y*lf=Y*5
zRQ+%d>icttA-rk3#nCA%Z4GIue8bzSK244`SzckqcExyL3lU)&Psv8KX8i9DbWQ;H
zZ4nIS2Nb`(i$|FruErC&TK%U-mTy72iMM-~UqZZ)w)bfNvic1Dx(j_l>51p-zkUgP
zXZRe@JCFko0!!|v65NCL=rTu~Jh<E|I3c}85Hd{j5|)mjxU(<_^KevRHw^YtsfwH)
zwTpncMfpopM`4?|jj+DwiP-~GdeRFzLeMO%p4D$5Ns!_2tEpul+9Fa~hq0Wo*m!K@
zV5E_DK14c`(PsQXzC?_XC*@S)dxKp1kulihEZ#!6#3EffUDc$WVxA`bYNYX7v>_1u
zYvGpi<N0T2<6E!EE9+dcX-Qn{XZgfVm+t2>L*U^S(SNL2oi|$;D}5&^>i^Y=?SI<I
z|369UUu@X^tFB5`{%41sXFkb#6UxS-4Ow!WM4pU>rE^I^Ss@HL30ats;I>%;b$pPm
z+J@LC8jRO3RxnBj4CR3NGSG#)!D$NnI_mxWIX3r)ZXcpM^^NcjMW4O0W5%mcF$7A(
z76G+G$vLUz4UZzwbZgNirCnBV(4j0mx%b{EyDGzOZ<U)^z8#0biThZDb6ODKA@Xr_
zu>!|ZkF=@BII~t$yeDz{pzYnMzn_@!Vmc)gxnZpU%U3x*Asq8~i?1OC%Qvp@j|Sme
zRExk_?lS{NyokngPE-lkHE{Tx|AQr3MO*5uTQ)ywxoPSWOWCAo<m$Pt!-CS9f(_0q
z5KMr3cKa54$KM5Nm5Xxrl$fzbOOa}x${AWVHByn4k<xq7L841hiLwTxfOTwaoaBmw
zLvI!7M?GC9`dTg5O3xvrdTtE%rMKO5Op>SI35gRi#qoSK<$L%yg9@>V%ikOBCI!A}
z3cybgbbqV@YoB_4^_!-H`2Py<SbQY8&~ab^(UqR1S%>!rP|T4K5n1cG;ss@o^T_VX
zd3_Te(aRCRo!*sS<Oq)-?puG-tJbCMBibIdMl@kBLv;qPPqYK7I5rMnaB*)ui$}Nz
zWMew$(Xpy1<N^J4{w71o`!v@2aG5H<w958*iFOg1D~Is@F+LoX8{513R(M$WU&l7z
zM9=@<68)dz83xWK#{aUqSFH3Oag@pKfCw$|%O+8NVXob#zqrIMER&z08q(o4ZZ4JA
zCX2+O=~2|Gv={9bS{$5U0dA)dzF`-!97ut`-t0K*HmlCml+X9CJCHt73uGF=3zwDB
z<E{d9$y%FLzi$WyOA1=1<&97}Ab(oSHZNwwU-1{kM!ahHS#)kktO)jreG)lNhgN>v
z2gNS$?y%SOqBwmKtSh?XGZ2QT!JQw0j@<>5y3As!ejScz0Tb^TMAxuqLYku%i1w8e
z4(5Bdba*N>)TI#OBXKOKu9(YkpS@yZanqa|2BZ$llK%>%O#el5SkO`U$s1wJUw-Q}
z?TY0Hpz=L>%ojq8itgx2R#ogOgG~Wk5HJ^JY;Ax`$lCQdN2@<50MljgZ3*RCOs#W1
zc~b_Io}CNfR%UcxeE_<+{KfWK9vC9f6O{!E3%bSk@o=?7fg7b@RyuIih<5ns`f3>q
z?9!J;u%Y%twdKvcW6=J%$2jRK6d^USIG?6oGux~iCbsWQN+o2F&p0XNgz@0Su~u==
zI^Y&OH&E!<LlDv8&hHhhHc>9vO}vXm?v;ny>Y1gg6e*1)ExngbJbsE~f+!GD)qId~
zKpQ`}YE~juf!H^u6*8M-B2MS)v{->OvtLB<2lYgPPEm^}!g`(}?072#n#!E|&>7%N
z?H@tK$rBLt_8nB4{|)#3>nxD*-wmq&z7DBr<&Ld_;UiZ+YE3%N3Q;6TPRg&z+Hxd_
zLXe+OA`yL5(1rr3Y35eCZo$TMK4G1?2QmQV4v<0-8N}KGp&_(TY}^46QSS7MK<mu&
zeF*h^Nac-v&0Zb7xR|j1me2EEbDGK;fAiUP>%PyvzL+Qb@;svU(|s2ifbA6O<tlVf
z4TJ2|8gT6t8_;p5vr}+@*&62Cp4P%E8<g;h^YsxQz}=YC!b815KzQCM^tv$Wd||)t
zPDRVz$;~|&EPXjH^|-}Ac;0OwJi6u3^~!nn_HXGPf#?~Cq`Tjv>TJzLgS*+Q?0m`a
zQv&LqlIO{@tZ2&2XIx?(hR2vogao88s3?)v-#ZMZ#qV33S)k7&IsTSqRsOtm7OetQ
zjN)I6R-6_Y(u)^nl%NY)tTLluu5hHx9Cs+S=SWg*VhFW7xIf81^9CP{q$FUgNh`@x
zR8QUcgj5GplQB|BFDC~x)9*903x3%G)kqe(MBD#1v^gA8W~we>ULC{Spsi~LG7tH!
z(ts?KIRA!hCCSiW5lNs*2tm`c(BLJkGB?^M902;5wF<&5oC5d6^pIL1X3tQko2FRR
z6_HNA5LJvt)LtFs7m6|9#b%?2knoP(z_LxM9c~XcZ;_eU+>^6}7au#isUaof7CWBq
z^E1*|*mFaQ`8b!|URD=R)YsNqb4hVC@s>!kzrLkQKq-dnO+<6e3YeN<1D+}qe*;;-
zt(<cJjqxF6vKO9*I+LjFuww~-_otvZhtB|gCo0Y_Rbuh^VCL~qXu=flAC)nqr&Txs
zf<>8Y@bO-un$krmtM*ALY-4Jw3b(H;_Akb^(zid76xjWF+{C9Xm)5W?lJckEhUpb~
z=giB*RLV6KHT3nfhM{lNt#(#_uw`zcYi>6$jE)w`@!76vT$YvKEvph9CW{bOyR9|$
z+YDbGYH?%Hw))zvg03df9IWaVgo$v|;>S)a!rVv1D|)r7U`=JW7cOAABwEHOiWZJp
zJff0V9J3&!oio)Np!z|no3`?3E9U@{h&4$sWi&&J<XqE<5G*_9Cx)U?i!iC^WGX6F
zSYVJ1DNE(wJM{9x4k$|x`cXscn1l<BQTaHA#4r{S6KOg|^zYpW3XZBXTSKw~=o@f{
zv7(T=vuXo;)aqscGdc&t$a<{JxE2BSVpH2XXeEwxfZ2QW=YI0Hh+&*B=bziesT$sl
zZYa|M4bW=I&7mMr6dcjP+L%DNChF)n!ckV^P-Y$Dw<SAo0$EE9qJkI-9(S83W~-xz
z$@V0M#&ew)4H@Z^#?FDHvZgOUoE%pO-zFr`T{)U3e|W}~6KGPl5Y;pvj3NxmMvDrX
z2IOY+x#K<ME)Sq%CEOWmP;YD?=mdI#u6H^RYlicJu6N&neDHT6HYj%w-GhVh_R4}7
zqL{3w%$ALuYe2XucEw)mf^v5#AovESi6;ztg0SohgL3!L5Oa=xP4A>4`ULAixu@)Z
ziuT)i+;YX$i?P34-)03NBO<=qCkL_H;S3Z7W!_ps%%{cE`%8pOIX+4D;*G41t<Z*4
zF2A56-iU=f&26(Ir;c$K0DTVFi$IuFg^h_6Z~{P{QYwBwpA?-d0ewots_$W-+;}0l
zsB+{&S9^Tn?%AC|Y-Z@*I>tJ&4SmB@TUr&V$9p_<O{rCiZ+q7+nQ9&$XSAaJUq%#m
zn~Zq1RE=F(u1Y^~0YX-2`(9o60m{KTMRPYHKjJO!<Sbt0CzFd(nmO^bLmr$n`dOyo
z$yFvT?|&=u7=NVz0I-0=y1IVxh3%v3JmWw`?T~!L>Pu6dzD)b6&&^O>#|KP0r074@
zkK8ioPbuN>t}IUS)1LU(cHSG?LsCZMdsuzk+;FmNT?&LRoQ`FA!1)f-Y&O{z#<x{1
zLq2j*=&#&u0$FbJJZb0qiB7*R>t^TbZF9;(EB2vMpeK*n&!JPR5c4Ceo`d!X5qOEs
z#b^Pp7eBt{1Hk3vdS^uS0+pF6D%a!!dBme78<jL{+_s`&DT_CNoeMJ0asqO6D=>O)
z6$}8;GrxJi*^?1iSd?-^cV%$*x^N}vy~sEdIuCz<=puyOBaB)o1|5XA&cm>6^n@1)
zE9Cy7<KEB<|AJOfJNwzm?B|Zzk67R{0460|bTD2QC^v-3w+A30II8Nc3#prqcM17T
zS++G{a;YBB8l?%!_lbe!Yh_y!IITqoAdfyyXYHt0$~d8y=7eU^eu@zhe}3zo{@rV(
zeUtISJsL_jz4RCFwI3VOO^N5sj=i-Hv{s6|o8=+XpJ~$yfwpSD;qW^MIF|;gP3$~d
z*K#szZ}uiZaqLQ;LC4GN@iMX$?sW5Ce8DtH;BG5sgStD2i(JB;kCL4crpFZLP^>l)
zuO*k0dkbLL)#uu0Cd|sf>A9pXxwmEN$BfG$%2iZ5nZ>+g>yg&GAfGf|%@;I9&wjsr
zdg}_!1MRd1f_<(%r;NB~MbLEi!-E`@{BMO*Lvx^FW*L#o2$k7dMc0>_qK3q0tfvzh
zJ}sS^k5yZ<U}(((0i#-8=af7bFd!vfFpoIen^w&s?vvXiR-fIrf69lg2tq;HNjiJ&
zj(oo%!r5P~2?f)o+el5%^A!8pPe07BBA&0*VJ=G@7Rz{IEBCI#X8so;;bg~h=wVx#
zEX&S@!~?zl!GlPd$ku`3EUx{p60AeMR`9QT^tw?KJI9sEnJ|DnRMg5rV&E;A#fwed
zq#L5TiG*krKFs7Swaj_ti@KRn&_mloZ0n%tMsnu<7+$a}ZZ<%A&!yR>(3oU?i3u{Y
zlL@gut7#P@W)UXAC6-GwngdH?Qx>sv<{F)h=S}TWQa&1F`%~qZ9lQ;W3<#o+FazK}
z9S^?}u;rKo934v3Qib;yU-ugS+D%){{Q5+Dz+`uZ;|p2a+&|ALRJ#|;D^%NF!gdG?
zC!rN-v)~eEy&cuTgI$U?=No4RlSoptap*pf>TyT5d(GQ!$?MlpNwO`QBRI(*GpL=5
zW>mtp*cNF$?M`ArJ*PwmdsZSDEWsUzM7PYYX{&p2UDcj*)g_)$+<d(`ptTdSw1%8n
zIWW`!*lIJ+c$DE3cmn26Dr)kxE_t12pJ63~{=To@gl+nAb({F+5(f=e4u1W!A-~d(
z0nYJ_9e)u0-%YN6EzG$8-NNjj94%u5Lu-@&R-z4RM*f38^J!Y2DUsrD4MYG$0V=~V
zN=ht%AU=l-j5r@6FA)$x$Jzm?uU(DqXyDfr&R2P>HN2c}E?8<-4SqGx#Mdl-6lhX?
z^XXadDeTE%V)AsW=fZMh!@@t<N^kq#<l>6;yvqK2c=?s>3BphIdEQ6qCD12?@=^fC
z*nJ>?(|ysW=@p#$$MK%U7We4r9Jgwi?d2@f>oE+h^oCrIXGks9>7K?m=Vph!`?3$_
z1s2LTRUk+C2Kiae=^mP`RO12qmrrh{S(`^p=5d>cKpz}&(sNLuL6@4KhSEJPL=8<{
z9%;TMJ@#Tq!oHEF*8m@CJ{e13ogZKQI3C=6*W*m_H5?hSvK?1})hs?=2Q5Yna8oO=
z3qI!Jo)+P!upm)9OrZaYyC*p+lt|-KxVv<0G|6+*vla3Fa?_40P5e!0;}EsTCSuBz
za88zZek^i%gV_M4q0T1JlG1)j>dl6~IJM+iM@B{@nGOdwtjNc2#;GZ5%bcHruux(y
zG`NpquPolBDdM8eAbeT7Vp47j)Kz3bO!5y0>AZ$5Wp5u4LevN`A}H@+ih^Yb(<Bef
zhoNaa-+I?@e`Ta9*VG$H>pNH4m|*M-#=#<4DWotm)p6#W3F=5vqRyP|*ZhLIiV4`=
zdwoZ?a~1&cPkr`+*BEsH)3WSq05+Wx@c}%TrfYPrJdlU0EkqA8Hg>JDwQN#@H|+Oh
zn}DEi8yk8;RVnN4&Ex<}+&arK`CD2H`-gBYY#2*1V)27dq*U71U;TnC3`Ag86k9vi
zTu1U}o1yRVMRh`)><SoiD0cyFz0MfVz)iyVxH&UM4j}W5`47QO;`Wv9<oWXo9-4%+
zX$--QDW&ggdi6YpTam()G!wi|T3v3iQh7xb4tI#OXlBc0pLyP?K09*=&POfe@U!m@
zSbza-O0QY}4x{dmelx!bz)lcf&WvawSYaJN!6=>5J)Sa@T{72x=qT~GJw9jrLg-`b
z5#F_HQvEs3(!)?vbxeQ2gDj1(LZlpQh)Xo(4XzOzJ~2e){XU_A!CZ*6-47d(S)vy6
zbYtQdNPQVQ=5{{eL8tY2Ki2$td%->q2$aT1bbG`rXV(jBlZHmFVcx{ysf3#majMw5
z0%|EZ)EIiO4ptQZl)kOZ9kxP<=zMCd7?hf(MiuW?W?)8|;;}4)(*y?^+&N**QdN1k
z92W97@IJeztF-RiN{N_$PCAL)r);mHz)V?)*FosQ>|RZXPY*3ni@Xx<?KX)<qV47T
zBv%kRDf4Ltt9$fCUSIy{oQH^@U-xK_)@aBIHg~WNtZOpGke1D7m5!~P>x0J@P8m9B
zY$WSJxst7%J^WK?;)D64yEZa?R*19@E3%k6gG-QFE|ltG5hiv57MqEW5K~OpQbWHq
z_0st67fq+M07sRrKx&FXb2aGEqzOn!b?gvVX*&?goP%3(kv7J@?6dq|Fy%q0)-y&h
zMw&twaj3DOfdVvZ^sEwrMnCT}4>3jEbwtQ&6dY(+D^3PORkTBCHXh2|f7w;E`sJ3p
zL)lfnaBL~uK%s!$N}=@hb5ZWSG(`|^58Ys)^bB4rzvKGK--^A5ACjWHYxFk_{!L59
zHHs>XVkqCEd!f=3dC>?EBSR0gU9S}tv?BOPk(KnK-PS##R3FfzU_xb&L-oQ%(*YEd
zjEIW$7cr&@?gG9oe+Q3a;efmx@{?kBj2kjAz*iySNCO%9ohuZ|lmZ+PbDl~c%C{9a
z;uKKsqA&HeMymDyu=b9@l?H0MXm>icZQHhO+qRRAv0~d!I<{@www-kBlf4JG&bc#F
z=iZq=U)5T*{(ZGxJnw_WTp<s3OvY#sTwi>CODr~L=Yx%myAsU7?h1sEAOe|Y-^mdb
zbhEGQxH@ATt#~7)k>iR3c7`Mg*376#Cr=ALK@Km0vYe>sfG>Gjv*&<2A;E4Yrdncb
zQVxau8|oV9s|)>zYC6H{`77D*Wt6<|V;aV(;URN9ZdTgeQK|Rf%w>XJ_b6R>*%e;L
zL>7!`#m`IQFHy;MP%|FTI6ADmp9%67Z5ua_Wvl(BC7tiyEe9nz7_}n=NeXZz6{&+?
z94#xB7SV{8@-C;y3g&%ns(G;GJztnRdqPknr_Rl39$_AC<IIJ}r}@x$g-w}wV>s$E
z%ViXP<uihvc0&oOXCzze1XyRU=Dab#bptxu|5#&IsWCZMHJ{!apWdr;uAi!jhKvt_
z;bAgdFXyFC^P?`=o|&9cY5m!Gl*xN{23;`yWm!sLEO4uW)@HH6W>ldP`2gMmhk%{c
z<k&-zX8$45YlCQ?0TDgr!m&e{J?^)zi@c%wvw70*ynZL3us!mZe$S#@9wU<7K#vuD
z5pec!-+sA|w%pp>2(JG{n!(8r0$*Uf##p^vFXwtwQC!Qrte}tyotZ;RE-06@@nsKG
zsN$Lul1Vd)@o~0(nr)yMFRG5eHtH1DEYCVdXNd2Zz}=wGhFk`1wLn5E0&N}lcMQ--
zyiT@xTbZkrrnV?dVgnNj=@x6X<2C!D<I#7_y0YFx>$8W1M-);U<J#8Y?OS4`Dl)wp
zCQ{&se|<_E(OLff)Fz0*YPwH<1<*wGC5w(Pdkv~4#T`iYQ=(a(gj71NS6CvevS`N9
zn?;AF6%d<gx*%yZw#S~tiY#iNo+4)viyXs?9Mg-KIpXHmTP&Si5OCQJ(In$MDNLtn
z4ZB*~nQ(=+jWtQ<4T*LK`yaH2er^hXv0EM@H4RiFEu2%I*{1gbCI{rC8X-$@30Nc*
zNn5ob4q2aR9G|pG_gNH&FRg5>N{bRTGOOs{*|=im6w|rQrC_S{_Xp8|g1I^x5?P2?
zI#xnrdxs-F5@~7E_ZeE+Y$6t{99V`$EvTj4Xy;t~d`=f9_uRvo9l%u+#*?`t$Ax(p
z97&%wqe#~Ftg?pY?n<QIoH&@0@capL@`1lckH1Fhw0zMXFA)8RuoaTj6S)aK2J@DY
zO3x(wW75&cR!Tm~BgJl!<fHRk#e**dR3}lS$Icg4l`G5ihZfpLJ<k+|@5~H7!RR?d
zj4#ltBh%s1@(Ly*-bX+z7{$L;H5BCN1QL#Mh(+i|P^X!e2=CIk&uvf&mr8KDURevQ
z8)gQXlR0LJKE$(!1k>t7ed3nZIhaT2B3PQ?BP!2&GHk-D<k(lp&cde4$S9B|(h3Ys
z*MPH3Nuk7JEU9>sxoUi)R=Q=Ud;&8+NQ;I+Bx9P7NO+QW;9<4Qau!gv29485K4c9<
zUXhKf+T3czeWsgMRUsf%*aaJi*I$ap0C%=W)dZ*$QA<l@4K-M2OiwB~l^x`QjR7%Q
zOBBz58rjC|LjFB=OaI8YoRu#W8qq4R9*n_?d=#J}!CYnd@U)*OElS3ImQh7FhU})h
zFq&Odc6ol)&Z114Dzr0WGz|?$j(IQoux>iKoNhKn^#?i{!@7{2OapJ&o?%W{SFZBQ
z@*QnRMan4y#k8V8TTXFEH(S4@_|4ps=znqyJSDLj@hWM$<WN<%y;V*cT%8T%9o+4C
zJ^hfy{0KDv;{%5}V{q<i?x<o&^Pr~Go&5@<9*jjFl(n!OUB4prLFv(zG8D5<Qt(CW
z6WMu~^vtZw@;bdoHgxA^q2^iL@%QT=AY|8%y72(WA3sFC1wj7~`Q-ncb*2Bm&$|DH
zb^p6ULCx`-nDVcgSB+}tN?0n$UpToMh{=D0QEO1JAOT{zjVLfeS{Att+zom1x2?p@
z1`HQNn=(?~R*SAfUiL!@AwKeAW|}x+X3l^nAN%(MurKn54H<Ce0Zeq9;P$6)Zpus6
zG7s5P%r_j4((}Xic_y?bB}4%)o&HFOYwDRkx<1~u3J57Ru|F}OnE23wBeU8M4FLqr
zt7M=8`>3NO)a<}o_ll={hXXHr7)o(20#a8o7h%j<OdaqVMsit)D$U_R$UcQU$xsR3
zi#59+d{js+u!6*jeNHKW!v<{-Ma;a8%9>}Xj25<HVIW4sGg=Hj3RD-|G(*~0xShnp
zjKGo-=rA8iCQNUU7Tp@#hP;7n@^)t&!l;OtjsPc1M;%szgn7i*)CW%mo0kU<X*d1l
zdveicVz92MEev2P)-qgZNM>0II)cD8Q)vG9fXoM^--HuIrZ&aGC#3xX^afByLI`on
z4Agmj+K^!^G8JOAF-fDJZB)j-RB1eJgkl)Ul#x0MNf#xf0a%EBgEu0XDoagRCeto!
z7^X3Yw(1x(*<w1WlKM_vC_?yV6E{`d`s|dC!rZj#7(!1PlPRj2x7cwNUWaGu(6jS_
zZ)WX-_!kx!&Qp-3ITA*bG#tj>=g>8g+=01fDgqQ$lj}_~g)H0pAaF$Xm^|D`DC1$*
z4XHvY^y&QJ*S#f?-Ryf<I*p6;V1GHX3z8!`^OxZ;D5)w(o-tOyyij}pO)otWPJ!g(
zJh+GtXGcXjp-jH13-?~B#?Ldv2o4XVM<IrA0ikW(@KzrrVlUi7868%DyrLJUv}UJN
zY{~Zn=?Y&~?x6MG_LDHDAf~Yj3t&^}2x?a82z&xB_?pBaP(DT@1i40vzLtFt-gjnV
z=gk@?>)YMy8^zc-)di-(G)ezb=QA4|)G^an>kYIOZs~EnYTz}`k*_l2f<=p;s_N6J
zbmdCQrM7%bTo+lvt=fFRDsEo#6g>2n7)oKK&2$P_-|O`qrL_Gskxo%d3%dPG`A52@
z&rIVFwQR-bQA2xu4IOJnq;DWc;m$8wED^{0%7k6<g9Y_ed2V1a_2%h_!q{6Q5se28
znm9v?OA!^SKHlar*`qcS+DeT9zJ(3y`g?^xYi)!Z=2R_HX&G)RBt*UBnci3u@xI+U
zr|U+YfuuWhq^l5MxEEG}U$Tp$SYLmw_VA)iN|Hq4B7B*uCGGvbTK^s{*>p^cz?W1d
zvm{v*NgpDPWB=6ko+wxR<i$PF6_VJ2mHg$Oqu_{Ua=uaz3P;ENlnbw_fHp!s2GQNy
z4yu>y0)xWWM%ez_IyfX_hU{ie%sgMtA(XdYL30p)QyA`=jS=}*9-2T;mc*ds%(PR|
z;^+koziS;4`xsXR{)@T?#{3-g)f>+8;W4gqsn8+kW0Mz%8I?si8cO-em5$h=TuE0D
zYxd%XuoIl`lPS9uiP<LSnO(sjHnFqTh+vu})*~%Xtizx2+uf?HHn2UzoIcT}uRu8W
zB(gKhsYP0$vuqn_U4!3ua<&ssFLAyWUho<koS7T)=vG^~<Bqr?2ks*ef+&H<0oCrp
zdY|8YFzf`%FtEG!tN_g=A<5kK2Uv3@ju>v~Q*8SBgB|2deUXu@Ea!fFv*H`#oK0ZW
zx*igAhv9j1mqqz!4TdPxn3QdFCil?0Y8)tbZPIO`%M+st0^NePOguuW7B5G>t;6PF
zmY65If7Iaf^*&h0Z)wi?w@ULrufhL6@P>b_!T;tS^IKb64ds&-dV;=#`l1kEDrrF+
zTVqVZKOYNBh#-y`OHDg!bR?jQZF(}10X(;6snxu+*)~vVYf~UfQu{M~WvNo8!lput
zt#Z+FF~_FTN~@gjA@d2>Zi||@AK3TPDaGyjW6Eu+^ElHJ4EOnI)bj`Pj-D;`FjtGa
z87#`RqY;R$<GyLfdeo$Q43>;LT};<>*b~?7PqvMg(I7a-4+1vZ-VmMVP$;~^&*6=c
zUIX1X2U_0VK{AXTC0j4dX2<hy4<~Bg;gOu<E3_6Dtm*bFEjRmfa3=OX!tRrSl#P;}
zl$SdN+O9q$y~CwtM}}adNY70FuBl&cj^_ZZ{nVW+Vl+1ghq)jnS+D-Ec96eoqRb>a
z32z^gDTuJ+f#H4&2;k&-Q9c~ls(nCr_Y?*!=qm_{EF{D`s(-p>ZU(cqcH}qp>Df=z
z&Vq#mXjbqrO03jSx~s)z(?J|P7JB_EL<GZ;o)9y68zdk+h0bbFiCd_q!)D^0ncH}^
zF~C+jq5-DOB|lZP$YM1b3*~xh8BT~Mk6g-r7I85yR0BLTO#I)ca@8K6MhTMMj>JNm
z<VYql6C}4PVjYZSZqpviq-*fQ=%RygaIyooGD%IPs#o=?b^8DQk`%{5Z)7zyqR$;I
zbk>h8X1|qDoa$>dg=kPN5+!i3VbWq03lprA!IH=&+H9;%E-_Vd{!^(4gkDa5nb2Qv
zT(em(6}|Hp6lJpMIL^=20Gewg%bV5AI<>YP;vx$NhU;k@?4T|5&+9qoV$IT=Rkq94
zo|R_Hys`A{xPNb3<;NRJ^-_mz@&s3>J!_nCa~uCM2s*a{h=0YeI=+0d0^-2U`U3rG
z6pnx|D=pbDO+#k!p!>_kxD9>Fp5jPw@U@KdFJG~O{<#|FbVMy7Nw7m)mB;cB<eY5(
z5xe7(-PG!rpNIN_hMS6w#FOvx7$G8wu0=4YDb|)qwP=W*PO>qROn>fcGzvoM67!tk
zP}*3`rzwjwW-z1sFm0F5p3V_M5FK?F5!ZE{NBc8Rge2Mbmf4$!;U0#3(q2ReN8<=r
zy4+FgK`!z;3Z{|O)80?Ap%UOUmi%frL|mET*5>#nj~qmRTXis0pLb56CN>gal{kOg
z?e7AwnMEgZvm;}&6|6uhcu1eJ?j(2Wa>gf>pPhra{y|qnyatSV&$`M?p_j%$S{WN?
zuJzHLe49MZ;m2AbTA1sTey*B0@+Q1#S>F~@=**rgYKkYjJpmIDRL@oY1?eRB5v0kX
zhX}E61h_hjs|Sigq!?u(ZO7l(c!~A7IphG|97Ow`>_u}4JxICUeN5yZn}b1#ge3id
ziqtTc?x}<&oE2kG^M%?7@?X8Nxuq&DZ%PcN`RNa4N1(GIA>el2WVy+A2{KVyD*Bx4
zbIvx8Z$Xl3$lw>ah3Z5%2?Cp1L!0XJRr}!VlR5aPcPZc1`+mL)2L$Ixx&wd6a#QXy
zaMSKWyl;e&k-P)RNj#JIknCE#YxddQL;?`rRr{`64n?|wF+L7z>l4aTSMi9sp;Y>u
zw7FyWB;AqTWjpY9<(}&S-8<EYpF;uFK$BlwQ|!0-fRr1?a|DAZSjJ%m{~`ynGwsJx
z6!olZ*u*|XjgtXB;4{;cUqDuK_j-~O$Ki|zONq?|Jk!i<z*@@bLJn(F)`QGaQy=_0
zVp3l0uImO?N`6rS)RDW3xX>86tAB6kZ4!Ix%BI}GB1Wwkc*WcoOQp!D96h3*KQ{lu
zk5X4i0v}mdeQQhy6OD~uGu=gU@u$?Y4&Z^lJ?Ga;y~CR6>E`ZyHP1Q!$aEg-rcgh$
zE#4@rk~J1I7e)y{0(2*z2g$`SFqcGMC}oy+Qpb^ftynMGgLpAL&%#-?OnqJ{i&c?q
zjoPe0GIeZtcq%j2f#Z)0kTIz7C#9b@3!z7x9WKEEEF3!|2oZl2XwyrMPD6C{mdv=(
zjiz;-u_i7$0}`IH@A34)RwM>(WcQzmyW3<C^fdIY2lznncck8~YPlMNU|zEVg_Pg5
zim2PPc)|*lw3ln*mJ5gKIBtJ3ksbXCs@Vna{=LGocf>gPJFZ85rWp35o9gV22Vx#k
z_@L}@yZ%VDk#WjZWbPLaW^9OZb<)+}0y8=f<K~<%Nu0YX_HKN`_7m<{pa&)%8=wd!
zF34!98f>bbW7-@#59R72T~JMVV6g4ilW~-L6D;q7eTY&Ipy)FR<1GFohBGrmo+PKz
zU~_*V?P%>Xt>1qb@UUv)&SV($)|@e%+Y94o?MO5*l<lf8#2(o*7x(QqgO8L(R$U;k
zbdW|SQ-&CZv2ljA&km*w0?5)gUz8(>?0{aLhLEfVwQC_R4I^YLR^Uw#_m@yRf=g_|
zF|6u`IB5!;3E(zYEaO#6j#hs!vLKC=bRngIb_WzByR*r`YsHZ?tqLD&<liCw^Jyq-
zSMZs%VjCVUFB6`}k2Y!8uKqdafQ%b8-x&kA_S3ppfN+mALG=ep`0;i62donqt4L8_
zVOOKNvE&{h31`JZkwd64@azFXIlL_;Ysk<N886rgk;G_$nkO2hxnE?S7PCChXO$Q=
zdXaj6Zcj(X8vhagx^qBF)c-^*>}Jn!S13rnMj1L^pu`+es7-b;*h{MTAz8LuCJV9#
zy1gdjreLkIxncjMy1v1)vuYDd`qGxzT9mG_;k?S=A(;kS?1h*XH=_RWr=fSOddx~{
zlIDb@jOm64(PJz$TcuI7t7#Ex{TzDxH3_pva4KwTn5C#ALzV+|_?0KCFWT~2=1kHK
zfL1AZXF2L{57dyLwdI)pDBey-kn6bRSM-GYJ(l%J5X4CkY1=Q}O{uCG9ttVEah{-X
zoy9ampp@uAf81vOBT~Pk^xR+uP;f7MOnWiL8zd&+Z7`PBBC35G2SyU9?<JmdV0;hZ
zTGrwEWYioJ-+U+^5pptu%L;l!Z8NA0dO_My;+>&0Ci?Va1g+Rcp>zN_Q6x<t+&{HM
z*)W`WC}1fL`wuFQyi8-TG@{7?*<wgk3;9Hgx_zQ2i-OGED%(JyeRv3dSUou+-1<nO
z2Cq^u{YyyAsh;Vn9G!vEJpvOxD`vjcWqw3ka`uo2i&8IHil!7<t##yCU2TyOcO$E1
z?jSM*0WN`V3}W?g=<>cges)jMp2R|Eu{>S&kmGG6icExj)iA2*rg^QcwEp+=Pq8N?
zDAfXtDw<u5S=fq`@WpS!$G%7y)&K>id-A-x-Z7Zj7lm2u)e&+iGI>5!vUd^0Pece`
zjKMt=EnbRdKuShmtBG(6d6Xm7EneRuDGXkv+3O&S>QYX>246RU2JRP}qlKe_=pUI|
zLn&8>fW5)sffrisK(-9TbLs7ILz7`=PK9ADE2j=>?eU(5XU>j6?G0mF^`>mtXc8Tp
znK4$?^U7w&8M4fC2O&o6I8NB|6pPobDEAEAZk+OxEq()kJ4Y%Uj*{FZ%e5NPjX+cC
z+>;id>OZfjXE}dfLs~HS#*Tak&HJX8=z6YSK-sq+^!_o(w%+UZ>wSX>$b|pZAS?BM
z3nu)NfGJ>P^lf-==cxRT1KM}Cwu!azzkT&Db8VL5xNP6IqDl>y2o6QTYZvK8z|dMf
zZA4N58e&K|3d&8$vodxqz3HU8_2$<*`Tk6-Ic2&bn$wZ&aVE#p#6M%GN({tu$!lao
z(=L#rAJ^LMO46c@G%I*oqpzJ`pVm0mFC=rKpdPs`96Q&pM$Jk!=2#oYWn)~rtBAQD
zL0BR73bz}fT_IMJD^p>lJa9b$qRcO2v3g&>B_EPw6;!LA!@!^gdGZgJ#HTT?+m}vL
zKQ+726N7I_Fg;_-9xNA(ufbdGU|2J|E@K4j5D?o26@&D!>NETw8Yb!bHFJemHp`=t
zA)HX|)=t|w+1gQ&Aa{jeK?NWZA<W{qS=y~JhTEznhdbkNs2YSvzBU9?A#KKjuElZ%
zSMbPC{cQv}1VI7)zD=Sf!Ul-pzANHD00`(VW$jMRfuBJTg+S6oNcyNsKV{*T&0?YK
zQD1%>)8py?jF7YdlIm@Vln5dzN*e$b<_-d}79dtqS9mCUm9uP0miGN;0M^{`%aG?c
zi%sLdq(-X!H{Q9TiM`1`*pni*E;j$c`)^dU`3IKdL#v^Vn2ZVpT(YPdNkYt@o4Xi5
z4rmhnZIK}<b!(HL-M43oR*wbQ)%^+1_c}`FQ^Q0luQ%kd;E;Knupb%yCBoxYPfP$o
z)4&Oxk>E7_d+Hwn-y4&3zT2;;J@mZyd02P4&bx+0w4*K5`{8g<EtJa3n6>1*)#K`a
zdqa+cZlM@;tp%BME&Imh2Z<<%NWA6*C%x50MbWE5Lr8JU8Fl0Gn3$`}J+i0irX4*8
zrJ1lZG*p%sOR6x_%%kbfxlP2Ntc;*_Fl_0--z;p49M{rqj$A)5hggK_$&AsV#ip&a
z<x;HC6I%>!w58Q(BDA2X^3oF1qD-Zk3hqucry3@WeK<7#)&!uy8<{j9y2>&!9%6#E
zXwEkG;15nPlSwkA_a6UUC7#w%NZ_=1XEK#sL|e!t?P`}C)t#lrAf@2~CRL)a)i|n>
zdot-7QpqTu#(25F{S_=cnMi9trsX~npO(JcYq_%1m8<Na*H#hUA5w*RX(u`9$n!_j
zD;hY?RfWL9vkt^nb`@Q-oKk{xwBt|lCXX@rMdjAfnk~q*>T9$Zta55?7z2hC^j~EH
z*!~3_LJ%EbLE{_JhRD3N7i@*M&##lVz+$)S(@>ws8H7U0W!WN1OFfO5mjg;1)3UG$
zm+Zsf&Ss48aTm?lyv~~VW)>dI@08$qnYwjy=wet=KW%6qBhh+tO(~2&Gc$%rCiUx|
z&_-Yrl)6ln9+TpCFrcVp+U3}8ulg;6lEdY@BBzH3wpOsXurVzhO3Ch}r_Nz&7qK0d
z^M6Suyl4lft@fT>lsVxb@j#yT1wg6^B{f=p<(L|Z2#w_~h+a7h4<weg{6b%|G&fO)
zv_3$=?)P4>T67Bu*f%VyTtH1|&1|Fa5Te&ryFte_W3OwrLEh*Ij+6nZ-gN=7+mW%X
z92+D5KE6@8gI$lg%k{oJ^Y<bfLQd@m1eh`O+n@5~EJN2ng=_dP*T(RAj0g<bAJL{U
z+~fTb8$^*z`Pm=FMQ;p_3#^8X5h82vZfqXPO5@yawVgF9wP**_>{)&b7+|nm*kBM#
z(JHBae7;k&I_0k{S;F3~!O1;W{?Y$3hg-%`6n+{R?u?lC5vJlvw}}3u(a_y|O#T{R
znTpgMt%%5=goeN}pZj4xilxC+NyEkFVPN<KpcHe}D*_U_|2}lmRk_?m1j@$iVOzac
z6#J%gHOvXk702RCp4u1s=4!10L51*%Wo;9A|FW2!4}KkB#q9FamS^)2za;Nq8yyb}
z!8V47?E<8z%1SoVQ+r3@pNc_^xTAaf5d|UqbSm_LhW|wXLnz5Eh)F1suV#ZUug#^S
z?Fm@Ibz$TbLT3&*p<sMYy(g5tpn67ao?*s{wibASo#bNgqi3rLEP%$#3jv_E<rn!#
z4y@BC5LT|=T<2E8s`0%XSAW_x_#XA7D8BxTnu|F}^63NIJ24dLHtbUmjS%|558VQU
z7*wU1f+4sizP${ND5Mbyk%Xp-JmcO0oq99iV$pVa{Y8r5TlnF`A7{ec8a1@}Z#vEd
zGW(f<vh(vIa=lck1qrbfeiP<cT4+4K8p1wlfNfEQo`r*ow&7!a-1-1ewuAIp?wAf_
z(#2S!;?weyxN~!buD^5(m_d5^*%eW%yWy+r8Mp9GVn3;+sN^Hj$cLcV70yoVmTt3&
zv}S+8xc`92%&p=T;mh+lt&b>#cX<N$#!KpGV1eKk^Du}Dy8dTp)_N?oCHRJz+F|~y
z&aCu5P^JH)3axJ8`JG|tW5;w_IB$_>p#e#&U@4Q(^m8DJkTS@yv4LMIZ--UJcE0yi
zdO~_d8y*<s$$R?=1Wg(8Z2#}`tlTFw-x;3#be1%!1!Aqp$IQm%##829w$pUye9qVN
zk>?Mpo1y@b6`Flm5SA63KAC(L!BoUbihjk|-Yge$u_oAY{fO)W{1Be}W;Ou9>=l$j
zw>ccZKE?bRmVjc-(|CjG2P`FXi`-D22X*hR$3_g%-f>B)4?n>Mm<cx2Zc6|-Zv1Uc
zss}MZ%!HeC-vM-VHD?!E=2v?ok7nP@gmeD#jCFfR9_?h7%tl&+BD9p`QoUE-js#hp
z9#JnT;>H-0wv&5VP2Ok~V{wt<p;J^t^YU0)*PqwI-bQN!<#tgv7qiO9V)Ubj(+%;;
zV^_v<Gi<8y+{X;k>9$A53<E~a*oHrd7UPmw+;O9t(Ja{+;>d0*HYV^qB(^YI8k^Ej
z%J2#dvka0A51JJDHd}tSe|t9;*r%h-_dzECU=@X?k(L@dk)0BwX$v+Oa`SaoJrASA
z%{JvVW&-|+7!lAyDx0e#qsQDqO_fEzwMdM$RQSUa<0%d71~XR;&BZO1Hcl3;dBt&d
zZ9)8zlS?~HXmyyer%y%4B9Qv~(x4Sye=}Fmnt8~0sRG|uT*lo(2X@d_hZt;f5H|h>
z2Z*2YRTRrij+%@%<b1|Vq<4CLZQ;b#|KzkBaCA|lY;gTnAYg9GfMv7Cb&fDLOv45>
ztO;6OUo^a;s!^ihj%@5GZ8)1AW!dROZ4J%D>y2`>#hthTw`H{abtm9xJ2r(7vX3!6
z7&&~6XB?hklEQr}N5oi|MBX0md4*V}9n|3y`}10^q@t&2MFF0Gnbi@!8tg;X|Bh(3
z`N|z~d7v~?xu<M&bP`3c!|<YON4?JxELDJ`B0x!01g+I-9shJ{t3snTM-!@eYU-11
zpzv~f&;QMgM=RBbJ83G|Bk7Q4>AJWXbr%^dcb5@?c0j2v5E3EVW89LzCEZd)Kw;7e
zMY===M%m2Aa+XkzgZE61NP9VSP`YK^Qiubzphie!vK{_YNsEHFBZPvtYlPBlSRan`
z3;?Gjv|+l`CN(k{J<p50(QTf9d5h;J;&is8fZGs6xeS#@V0EW7OhceCMEb=cG%iXy
zVAza*s?=5;(em-9e?B04`sUkZ%MkEdVa>un&)CkrMzj|+J6Ute*ExaCnn|ULA=@8W
z8<_wd#)0Y?Of@}=9z4~W35TIaPn|Jnkh>8PUawqk!njcgI15+R6~{qQ8Z1C|tawLO
zSuiicmuQ$AvR4Sz_FY%iZt~*jPd-`QQp0_$8Y5d?&CZz{Svi7%j`)%V2wtEvwT(?8
zJT<O!_ZReeE;l<T)i|@iK5<e>T~$%4v}kU^oo*!wU*`rO9IC0bI3{1wakd6}<?Mqd
zpVb?;1*X+fY|USNAJ7OICR+SDoTLe%%18!EYG#~8@6d29@)dn{`LIEQi_9d%UoXsy
zukk4rV`m91iM+8JL+4JLvUJxE8#i?`Zq^QM%Ukf2Q|8^~QGRfViwmT`@VH`9FFnv$
z4#^V1C;vgXDD1YU`H&WZ^$MB6SjY-cq!1cMq=^CP;{T|jDjYJ@6UY+nr(hn^Eb0sX
zJqRP<+n*|27xm(OCk4nDn~gBsrF3OYSzT2GYRm;ctfu3ZkOi|R`DiMDjcwwOZz80$
z=_j?|auw&YS6&N3nxlCZX~XH3z^o!%Rry_K&r<bsV@p$8>L)_yxjj!DrN=or{m<rQ
zDISRP((W0(^_}WXeyfj#>fR`T0}|*-N`N5yPqj9GFV#KcyL=|~_f{%$=qeOQl71F)
zxb+>Z1wR?|LYLQ_UQ@U$_Fjnk{n}?{O)lSo`0Cn3gPL=z%;6hCRQY2sj|s_IcPa#r
z-Z$S*k2y6|QY?a1a7kD~MOX%l>S<v>yctwe`~WxgAib#e^j;T(gLQw&xGeU%L{;!B
z7yVIMV-hyPUm8M<J>&xsBmcXpoxWYlDO`IO(Z7FreIkx4PA&&%(Y{PK_I91tq?!tn
zZjOfoMcx@orA}6KofY5Fe$I8OQ{y<J4F1LP7OCtas>~*wMWO{Ue^kvmMVKz4FNOA`
zbx~b(0hgKEMJ(>?s;a4`x=3)vvVCH%cu*92L5-`u5h-@Kg)>pcp%{f46jOQcn4!Ni
zu(_{EA6-ipO#cWqnK$QB0QIN<Zde7gc@#L!I`n`1of`$*R`Wx1_p{$T7MG&e`kn!c
z=Lutw?$V&j(SnxUTLPsR&#88yBQZoJP~u6g_@hTMUOSA;0RzOAh4Cb>Da*r3yeno1
ztB6y2N5i_JvfytUrrZLh@6Uhi!r&@bu(#i-i#~||Rmau*ALzLMdgb|#8n5cVtVXsY
zb;k7#z(JZl0f<r~pg=U5B;qszmdtrg0u_VJlSi!9WUD5wY%0FNcpqq&k&@?;vcoZ-
z<ik#E)iQ$8Yo{R>->3D~>AMZ5X`T$<&yRh&ALrzhsRLpJ!uCecT8ys9g|$>ecvRqq
zaziq^FT$dtL&XN<&(hp=kRk^IYu>jlB>PSn%^0NApZ&6n)M%{<`&+d-#;K#cGk9mC
zb+$?Iu-$q`!6_A!Md+f<(&P6{CfM|u+f2V(TgG+z8RWRv4dj`U2eX_t+;pxOv4`t|
zbtICl+m(+-k%k{H1Rs3r8vCML`3u)t?y`+Ei(F&iHZIk9jlut15|T-1%<sJ|O8Rqw
zdE`lFk5<^6913kR47OZBdkp`f+J{Pi1lgd6zG`zdn%uzg>2rxeb2?a*dT&J!?$2&-
z8?`vMiOAm^ne}N&)Gk^{9)HMl8m6~BLD7{xr`;wKvhJeFau!d*Y|r5i7FXk?D3t$>
zFdDhP<9I(Uj2oVuYSdceZ<VkqHl8UReV8*^`7Karj^huHA^5xA_*8e1z{0mXd=1OX
zldc;_VKLmmY50a|%AR8h)T8{y@5;oob$t+@XJLFXdfrYpSm%mmEY_geEqN+2>6Abq
z(<sj&y1aikPJN#8FCK<^aKq`Kp_G<~xJ_pfMJ4EP4YJl%*eZ?G=(@_-dp5<GS6PCS
zihOBmp9qScVc4teu)}yu`5x7V(k-U0nggJ^bkX%p=@zETL>-$Sq2D@(9A$gg6NM9!
za;c`u@Yi+O3h?Frj!FY%@Wyzb>yFIB{Wv{(ypXO@uoWG7Gy#KjZ`gFGFGE3K1>)jm
zg2-}pRVBkl^ut@t;@h;sQ*+h!um;0s<e^8KNofA%BJEY<=n6dJ-`e`0?aO#DEB=Bg
zSMrnWu7?w-^X5r`y5ggD4A6HU)$}4$Uvj-OC}A^t_<o#)E!oBr_XXpTKTJnn(}wz(
zu$B?2&;pC~Z=b8drK2O?!*-CwyAAFcWMcG_vyV?;ET9P_dLxmCuwPg$$G@8~kk`2l
zHDXpxzI%u{zy(9fkVb={E<l~svyB7IZmM!-gL3sJ@u}ETMl4_gQ6$t{CUo8><Q<Cm
z5&=dO0|Li0V1|i&jR}w=2(v>mgn|1)PqT^yE`<;&h32)&;#f(c)sLc0!btimk#$dN
zLnCg-QZ+fKChKs8e2mAYfZ~roiF6hagI+zzilEXFV&y}q+z|uk#k**RK|se+!6_BJ
z6m}W1ugSfeAnhDaEf|;2J1R)iAc1Hb5AZ(uv8wf41KWA3^b-ju%(BQ-c|uBxw@EXi
z(g>{PlCOFn#zQY}#NxogAMzOS<1o9}4Nw8HH*1~=9xQH!9ySY)vPQDu|M#DARzX9d
zLF8||X6S!&ari$;KmQ%fM#;j~%*EQk@jt_CRJY}j1mHiHaItBMX9!hpz)Do|L?i`7
zXz~?*&H`DYu<+`v7iG3Sj%+3kbPuBMXTYVK=l7<b1jc+S46WKw%>1IrweaBL;(D88
ztLJihI)7@$`+?|=$d6U^;s8F18d=&>wI}+cnVvwo6m<i2zmPs%k%30_Ds(h5yq)rj
z0b6@^k}*dw^YAJ@$?Qb7dq(ZPr8EW7A%iZR`*?`TN+P%b<cb#jZGB^Ob*Rp2)#@#M
zI5K`Wx;)jyJcF?%O|RKt##EBTwpe=8p{2iOA!SNq(7m?~k~D^HJ=w}+JmU5NN45}_
zu+?96s4+^>pg<JJ6XgR6T5@d6DL;`_(yK~)!tpIGn?(XiQj23#d&Wj+qFi!NhY=ga
zseu||W9+bHU){>Hjq#wx`s~rT^c%kIiCtwZ{5G*Xr=6aTPt)B&ptCmCk{@%&?<R-{
z(=m&hVk<^#O`F5v6$=1gPY~zKHVn#=#uA!IkYF55hGEj<5emLJy6Du_9p7nu?KG+l
zMohq#D@!$#C!_R1Cw&Y>E+vE~4CFIHmTc2%3R|20ayZ9?v-{c&eY+??ETp!>2_Lrl
z0xiB<MN^(gL~8U{gFeO-BB+kONw=J^imF|14dtJ#%DUOP+Cfh@u3z&CvoZi-R9&6A
zr4Z8YpYli)s1*_di#BhGsTVF-doE#Hz=;e8gC^qAK~bo5>5R=Yf~pJ;!DMtV%)=4b
zySmK76a=?K7tYM<<Yk13sm(P&CxV9i{2gJCx=Ck>qkGKy`b=vTW8fS!fez~GR4u$*
z{5d#N|4S%XoTvr5vaJwFA`%*AHt*r%QbxswYPyrIy1O&f3YQiVF0Jd*rZefUS47=?
z8NKi}jLm(RgP)JHLlJU(LCmMJ7&D*boM(x7z5_cZR?AFLMSw^_jsyOIQkT&0qjP?x
zBdYZ7Zwy7tt1ubzi!5wWWEvis|2IhYU(C)iEaJrG6Vi`CNXF<quvkSpS$~OB=BaP^
zLd0Ix5p#$m9yybYLtE>-ymHXohJVPxpT1=6gn}@Y7|H;LIN;OV8s+ES$}7s6m<2UB
zD^&3qmqZy5PDLD~Vi{t?lyH<PK~BC%8;qC{a2ey6$T`#Y4--MH!CpC*4Zj}6tpcSN
z{8~?{cFPq5$zBo+d-N0rO1S;-4eumo!U|LDA$CrPOLp(|tlV382{MSvoFj!nISTAy
znYrdT-l(2`76#_?OV-41IWp%ri2t86QT{tH!M_!T|7coK({P&?MgAmJB^0Yg+5?aj
z`bj~rOc^4QHxSE62m)CkDbhp0%!o9RMVAn@#!oDHZ>NMj>fPsMDghN|(iX>jDDZR=
zjZ0boWVOMoz?j^4xpM2~a$@;Bzt;2lMIU~R46qj&8i&-hAB;)J_ZH#SO}b47LMe5<
z5YQ9=)xKYPXD3;!z&jRhzZ$MHXTeYldO2rw^sy#C3Azf|71JHUf_&9~HFz-?Cm(4U
z!e3>(%gpoKE%T6(IZ)=wNF6OrW|^AFK71r>UXFt9zbgBkP<`mWCX0Lw$Wvjk)>Erg
z>?X?EFVpa_%9wGU%uaMj$g`5&Z=Im9Es~+J!y*;Z*IjNsZ8<{i_i!e#u_mqyj+?v{
z-eR^UQc;&uR#lI~485fcmRMi7zi`))cKKC{qNqPK5(}gQl|D6%%Br~0k^9Gy8Bvpd
z&eB$dh2{1NR`RjUbhJfe9@f9qIbADRL9?DmA{vTgaf5NR<^W^LLYASNb(;Dc)jf>!
z7zriA534dRTfnl>qzTs7+}vr!Sllx!CF-k0ik+)dFg_X)sV)sj9&h<=xKgV^uqIIj
zO=g*tjczUOcRT8UVaGT!FTw{s9}|Y`fB+uHYN9xPR;EKAwwCiXJY~t<;foi&QqRko
zURdWw?xJg?BAcS9c6t#{T9=^_92k`st0v{1Wieru=FsVc;Gaop;$FzX9=v2_StVa@
zFmB)y%Xs`dJE91BABK|onnI!ckJ&Q}D63qHD$7+VDNE`TYM#)fF=Z|<WfpX;Xo5$W
zftE@Qlc+#*hPo_6Bj-a}nOMRs_*wW=b^A5rmMJ@O)bD_WVmS#+5T?mv=3?C?P7DM=
z5PSG*`ilx4H(K!@*L$5mwuZr!o2;f1BH?~LgX4kS5I>GT6Z^^CYW#SEht>b__A4}W
z_~!-LgQXK<&+&7BU}+@X`S)M+JLRZ35sjNgD5o>-=-c6`Qmd$2i8;TP9%TS~8UVvn
z5lqwU8nQfa5DI=SrD?*_7>=rJlMsyRtVWp1`fZ(w+oSfJZcveIuh>3_7sRS6@sMfY
zfiMH(y)vn%zCmU_yXX5|zf--nJ1{eMlHD-2>50?dap|#rzis}7Cb5|@wi%(B?aNAB
zg$MJjmF|95DN$fVFZtFRx(FpPoi<19!3)_nY{gO&M!}<@Oop*BdK`Rv<2ucT==5q|
zj6XEjh3K%l@t8+Do?qC$PMo7<O4&>&%S$e=F%A|47&5-<n>~oU)rsLey*gSy&H0LK
z<b)496g`6!R4AZqKZSk_&wR!5_|b2^3hA#zsJ2}w<rVNDcjmuxT>7nxZan(UQ{Hoh
zvVU}<1FQ2HYeK!lcSE7#b;Tqvw%-I5$~3^v+9BC==@D!Pe!;Ho-{#DAK^($z?s+SY
zGRre0jW{ogsp3eOiPQkCoc>%<396ek>Uv{ExHAaN_6#E}%!)14L63c<C%hc0TY%GA
z3%oAsL?_KC804o9VCXr;$zwRW&+cP@RKJf-5a%s^Vtydz7W%+BY(+Y3HM6jdf2DDc
zrk6Dg&n8B1<Q?WDA3!Ir%JV#V8D&5gUIz$KT)|WJfsO+LQiq@?=W&4QX*WPL3ABU3
zY1zerf>phR3U#Lk*G;5v)!^so+lmmtn$h`7BC-0gWx4!=?LqI1CvUiQ?Rhc@tPH9*
z#I7yP-*hgXJA*IHQOXoWRkWM(oBc$<9;lPG7w(K{k`&xLa&evH_eIJn7Z8^b%T6Gc
zcrm?eE5=oq+PQD!xcyu}x(f$647G%LE=j9H7Op5suHo)&44-0HZW2@|E-3n+5|vU5
z7f=MqbY=(_ec;NJRMa1Un5c~g2h*KuIm7hb!t^&)Q$^&{%lj^<ja=JynY0JWB7QH#
zH4R)t!1<VASNKtBA(VrpWFDIgl;9AJ3$^%@zsCB7_b*)KZIQ3W%)bE^qEl{AN!Qj+
zD@g4-WnRGkvHkiqC>D);<IOwp|5YRT&)hWsUxq3FTetY<CHP-Cjp{n~-^lW(tzCjm
zlNPzZGLVR3$qJsiW+IRcO(J6M3Mv5z$oo2}R9ouB(gi3KVR-&tcXh`ex!lw<7>+UU
zcBaD+!eGuU2A=c6t-zM^_s1M3HVBD%@%2Ouym+Upm-cTm<70OH+wJzX9`H=Cn#qE}
zh>&l)33Wd%M!CHk$yKi|#2fJMZuJeST^|fwZv0Q&d;Y;1KxibT@StFVJ-;YRKB6IG
z2T=5gI({x~foM-4BPt=~0$x0PHNW7HA-bWBs=jhh2#GqPHRv^}PK1~zA;M(c#6c`4
z_A+`RZ~shur^8|$b3~qN3Ts(u6Dkfq0m~m5c>-5;Hp9}Ebn2-`vqm9NN`;Z}GSuCd
zI**|H3fZ5XW%@K?EL8CeVm3?^1S02?%S+HyZ$zeq=uDI9+ECG?GV9o~IN(Rb6|dM^
zqdUC#)=HF3mvm(<Dg|DLCM7<Os$}tiN!rbsOWR=ce(B8BZC`nwLeTv(1gPLk;=_EV
zn7zzZW5Ipg;J>;|l4e}ZdTb57%7*IW*-g#cktMf0mWpWS(6fia(tFYCFQrx)bL&7T
z;Yp|W=R|lH2w8P4T?@qVr5p$>d4rzc8D+$P$Vs|*1j=3EwNNC!{tgKWg1Fs8+!)id
z%sf*=OxPGxrCEiN^+j%)FRpej5^Td*)}kka73KV**GQ1MksXM02BAhJ3CGL5DB7&k
z5Y{(&VFlFzW>2ZMxoBw|DFXwRt(p)8Rh*8l#>ON9)s2MH1v7`3&pTZTEUU@OP0~l7
z=KIdC;rpbhMg?pGrliQ32Rd9#y}UG31v<#4eOVAH1mzmc7;^M}0|+r>?(hQWJgmLw
z0M!Nxcj#ea?kV_8165>h|9!~p0SE{=DtFLnM(Cuol?Tk?ksb+<=`a}ADc3;44=4R5
zR;Y`lOu%^z7)gjv)@<IvOhhy)<hRxUdfX9BSC6}DaKT-UF<H_)7zZ=Lyx^OQ&#Z>5
ztb}iAsoFz-$uHPQMC3262D!4Jt0@f9QL;mVZKlpEoHa{utSq`9q{)v}&(cr0k2=~N
zS%9c(psr=;2ff%z?h1{!K*$WlD)Tj#|HI62l<5Z4VcfH>nY&TLPROXurO=uO_hOkw
zi}@i8855cMBlM_bexXMq%Qi8%Yv@z(TEguV`D%W!P-`{aRr<=Pgg9Y+G}-)aA;{5O
zt$#tyy%%HItZ_8WrRZ!fl^z~4#Iq@QpoakpPSkWuR4SWXD6k#OyeVJ%F+I3)j@xQr
zuD3y&C<=))uiBsv%`irC6VfEd@4jWmOt_ID`1KT-u+wRAHUd>%lumNN1^h1jk-r8z
z61RIj)QPKywg3oGpw$Aqqx6M(EIoZX@10v48n4G2717S^MO)@tpv@hV4=Q`w1sBES
z89p1fdD|QIFU0_Gg%{WumO7!ZcNJ90+PPcxeXDBq-;@|5*=K0oaq!7Wq_QcrbTPr<
zI&3>$GhT;$kw^7dx&xv-7?H=4QM9%&0ICTG)E&p?4Fnq3o!sPlB2hHUeRq~4=qJV4
zi;4TQ+07l5dT%#B*B9dEJJtPdHNx(8&(8K9@fU3I%aeP;mtV|t%yZ@!K<|Yv@{Vev
zzdAqb!lppFc^|1_(4$2mqWpxPOq=lSqz{LffZjoKqPMNqUsggNYgULC!Wzlo@PuSG
z-Kt}9*<CBFd6MIS_jPteAo(QGAOTpSAZbcYSnrXuj8^|v*Y1)%S(|WgvX~K26oCI%
zXrSk;8C%OLb8|%Q6N~cY`sS8Te*CLY`~7f0C7~%R%AX#ApuCEo50nu%G?kn(RFZN$
z%>|0E`yf?e4hS9DRQxyC)fl;3Y{N?5<^ngYsy5dpfUELSpDPGSc=K>1L_y9z)wNUz
zaeP+{#h_Uq0To_bpeB8%64(ly75*O48t|MiA3_>n8!%~md%DNl5Ze{9!x=zO*IcCS
zm3OmK8uj@vaA_9EK=aUd!+7|gX&C?BLH=ES^si(gwR1h>WeguvIQnr$$f{5v34x81
zIzK2~Oc6stXnE)e1yz_CVjNev^Amb0Gcy!v>v-1AKNjh_M(JA#E36h$(m!S~ZPtcZ
zCsU4=eRDssURy6cO+!|{jbtPAra11h?|6?pyUlptuNR+wIPVhSx$Z}zJ2Oa!^}-9y
zh0w4oNt9b)<UIA=_eLbbc^Zt0dpazEfl$=?Rv|J>gl1{rP3=nvcuGQ}bvy?|7JGkJ
zlCkIf)NbN^j@kzk487Z3S_dbbE=pCsyS;P6&tSCaarfQ`G?2Y!Du`PW1~0K8H*fI0
z$jECI0>HJ}F4%J(x-M!C8psTlig`~=*$t%+b#Tteb1AT1X0hQPRvQu-488>U&1wgp
z&seF%Txd*CHn>wu%0VT>wqV22QhUNQ=@V{l8`8=HVGqVk6LFBg@UY_K^`^zG02ra-
z#d=G1wJ710p@K?E+rnbm5|4Dew8WWMr@n&(&KQkd@Mc+(edh*QY@D5BZ%(zoHi~S?
zQiyz+GK)=2X2oR7fs?-Wh%wC3OwxgH+{u}WKt%PL2jH;Z<QQaCX9SZw{imf6wxWv=
zS>&I2#?s#skUykdIEHC1l0=@*VC-pPjqV+GLwll<QkaO3Xq_uOr{eJB#weCm9g)<>
z+V1zV0-pIH@xev$Ric7BIH7C%0&UW>&=DEIWpMEX#P=Y}7n?vikWy7r_EgJ4?SYkU
z@T?C2#MUUQ4BNm|mnz>mX<3|cU<3>T%aEN%{pb!cQrY<}|0ThA;IwnEaI9o|pE#Qs
z)L8k9RSB(hT-*l0tW7PIbT**|$-=<}oCQU%nvW_l9f(J`SKN|HeRpUqiz;JIgUO3m
zgZ_B&kl{B^-_5KTKo-tblQ=>(OP`%4%iwH6w?#y&`?*5LTb3D9H8mxR!I$y_!iGe0
z$plP(G=xMs+8jctagKC#Z#FwAZfmpCGIm7_GKpJV+HPB%(PqfKn^e(3sf(BkBqRWA
zrd%Ie3?(wmKp8qF)Bx^LVZzh^%q5FV*?WL6vMUWer|F_iVZA&<J8GIWqOGvB%{6=2
z4RS?~{Fy{IVMg)CtQF}Tp}dp)BbrAuM_$&UX#JYCBUfa4py=Gm&iH!eWWsmBD*HH5
zz2V%Fw}<FXzQqEu+oJ&in<?1gy_e@)Da}fWTKp}-KV*mU4%=O<KE+lPz|ldI=YY~p
z&K~+kVm(zCtxo#;zPI7eaBJxf<G22t_J{=76*U~mnuLY|7aG@&b*@cTlV%4;^0YpU
zmB=WLa*iyipzE+JQEQkLwFold00Bk2*9tP(UZs~sn`FwG;)F%UMRnm9#JL(OIEZhL
z3&u4?3qgzBUJT^ca1Qdj2DEQ44Ti7E4VzcV&NVyX?iSaC3&bvqs!>^H5ef03sBPFJ
z`;_b{B~23150?!Fh!7y6V`eH>%6wTcaK6}HIO=^c)i`qdRN7Hx{^@7@-UOsNVmsH>
z`p2z(L#3_jb|qcNmO_l>lIFFw_)vdE=~N}2%WxlN^%(=GOD^4&AT>{kR<@NQPh$7C
z`k*BHjs;N3PjuB{@tie%tGs~)(#2B?+W``1WT;f2_=NX?lg4-qM3n_Od)Oo!8ka~p
zCj<R>ia9pMIj$M9Ja;{E2I8^T;21G+*vZqEds8h{hA)~Oy25z$;)MnJMO{J03yY#4
zZ6rn(-0AURlZcqrbQ7o>(7+rg>V+KUtQ#kAMAwQ>bx32I_DX=!f@5(@+Rol7;cnhu
zrAO;vvWLS9Kz)vG+4i*-XlxgOCqWf=HvS^bBbI0Tcw&LrTvv?Bvi-i#J+^Cr8sc+?
zkaFt}NIwB46>wZ!O@k^U*i6XJbiVokM(|r@j>r%u`}m(}@P08u*Mgrv&Z~O4&Z@Nm
z*P`n{Wx5E!CJWuR2<LWywIhO%wPOWu43>s=gP)&Sc8J$^O*J*wC2mWW;_1Vp3=6?)
z9~mny3p%}~VMjD-^1etgcjkpuSat@|+P`7kqG<Q79znb;f69ECVxrclgbHlXm<;fY
zu^O&}8-TC4`t}GQKRZk8lRP`wA}3bZMCT<Zqr|2~!bE;rX`pDTv$)n^HZbww8Z@#`
zu^L1!5)7U>WV7s;ECHHVRJBcLT6&vyy<OpKYcHQeFMIgZN1B|Rh8&}_1|`{*>(u&+
zva#2FFV=j(<ABuSFOUCfx0Va5!S0JAv<!K*T*dEj@6jChd_+8t+sMT`L$w?e=BF(N
zkFR`kT5iPP*y(Sx0FU}s#x-St)8s`BoT&@810u`|MZl5@>K^62R|&_GYvuzJQa+!q
zA6uJR<*^j%@|$|3#(AIB`GBlrGo8?XT^M8<BSh8_p_>g`vpmM?|4Kv~rVn8B!qh?-
zbm%h|1C!k`CjFt)T;iTMCBbo4R@GKe)wVn;A3*22s$#>@6~=|N12gsN!>KHz0pAts
zs0fhm0=8r^_6sI){(WN5AQg~nmq_l_9LczbaH}O}*$&AzQ>4ESUN>Bm!4utSjfmii
zNjYyLa?VKDS~dWw9M)PE*;@8Kf2+Olu+fvnF|M>jE!S0VI-*g(GLbEe<O#WX0R&rL
z%rKBWNbfo2qS}03p}MRg!!Z@!hA9fg9NC5$-Hxe?@6(G$yH`OvtYEk;m(ge=J3Gqq
z?h)5^0m595HruN^#^AbwLZXc?$xb90g_bjD6irSz38EK7FZYt^U7O*W{dIt^w&MWS
z3M2<^-1nmGkXhHbS2F0ZqUk^yzVE&i{Oe3@qZc7+C{VgP{_pD|WUAxx%^@&*Yv0ZI
zLl}Vplp|z1PtH&$^EF{Z=QAlvfQMz(bZ*WO`edKNdgv$3E3X`x&jUY?Zc*l2ZvMYW
zt975%hRnYcC4Qj%S35A}|K$bvU*?xebqICsZ_}V_>J9^UU?2j74bo5ue_%o82>t^9
zSY(g|{`}dsM+WYZh<c7YQi9s1CYANF#U|Id2FpvsGu#w@LrtXi<tx|vjLmO~)#6vz
zQ!0-^u8-GtyW17d6W<rd(}vUa?&)#P_bDYq{a{#ggMiO%Y+9%2y<<DZrDZ(^ZYR+3
zLdeH?uOIU2wm=zHFY?2rq)%+jp6)6k=M9DXL<|Hseh!X`9lsbaZZ2jlZusEXfx=$i
zhg6CoNC*-(B@b5a*#Q_Y36fVen9M=hCwg>R>F=EbNX|_GZqEI_(sM(=H2HHy!1PNk
zvfJBDgEb#rao0{in)h@3`-cf%@(z`c7s~f9(&6;fZeaMP`q)ss#zV|dytI1VkiFD?
z09o1*=MT3FX%gm<A$!T?S|;R$h_V6)dJrN+!CCYZWCdopgj@XKonx{+ivu7;kw16!
zc%2`IBA-cO<{|J@?X*_x`t+F_wFTgTlSfDL|7LVFA#UR`Je35`Tt$lv)*8;At&QEn
zj1ZeVv3G26u?n8~b|?c+bjC#J*QVRC)ozmMna9B)Xb<Nl%7-KF@An9|(_=0PYO-(;
z`g8^5If4yrOGaKuVw@q6HYvtLP>K<2m@(a?K1hrnG7%AAIiMqb4Pe;ZC?N}QATkx*
z&tR`5`(K>Bb9AL&)+e5dZR4imifvSE+ZEfkZQHhO+ja#N+fF9^?RR>nd#3yMd*`lo
z?|S}v*1CJ`v-dvdd?3vFF58n0KsRBJiffR}BiJOfVzy-s;BPX1jW3#X<k599Yj0R8
zFbz<DZNwz$Y;TZ_vroig^c3cQS>>cip07ujB+YKZTKz*skT!0T(}|_-CUyMXyo$Jr
zERG<)gYh7Ex6R7_F52Kon}<_|Y62d(ZF#jt;#SFVYK;nqs6c2)ofdbi6k;;!enE}H
zBtnRZ5vw@OvX#fXG$8>eR2u*y0E6Xzk910>IW%7weD`I#L@7gELWZ|usM}7-s*%HN
z{0dW_p-p{Xo=QNvy`D?LvU+Xjv{xaOu;8gb1%+~y3c}x&3~C11DinQugR2hHmM?ak
z-b#12k2M;IvclwEu;r)NDQqB!kAWDKRk_+~du+?V>*Z7tdenZ4a!-Y<^r4q0?cgLr
zR5UbzgB2fK()k|nO)nHRWWCk?2zQKhhTg!_ka#M;{l(E<#Nkihld!+>#qJR7;!<Oh
zYY_M(8$Acjbo}T>atjYO;hr*1vN)(MhA||pAVhpG-h;!mi)?giQ+`KpOp`OMy(NI_
zGAjhV>7tN}LDH9=x+<`BUg>$jMKyAy>L{^I|F_QGb?O1<`^{UfAChV|{R$5BvA+69
zS5@8Qd>oW~$tWUV4JrD<iKYP!Eag7VT{a#_Kt01fF;oS)$pmI0bL5#sF5IB$RDPfw
zMs-9&pnin4LcLW!r~8V2vi&lg+o0+?F%?@GY9M?;Ho<S#w4u<nA~C3ndTnMSm^T$<
z-YIFoHnMsQlS2dk86tnwMfSJB$a*~~My=3pX$ye0qy@WLjy|B0!mUPZ(5OSRH(K!x
zvt0>xn;-3GuZ%1I&BZUYpZ(KHZ@}G(SCnYoLnUFqx0|88hGEQ-OqB;O_irHcBoSAg
z)5Cs_l>Xe6q2PxsZ-Mlu_@Em8@arajY7g_?&ITsS{@!0YLtnQ2i{c~lv*d|3OXbRM
zjEO*T2iZ!=B|rs@gnuV#f_`t-wy!uuUg=3Fwda`e4*-zcFo3RYFRVJ9qM49xFF$>?
zmT=;8OAHBWxCXUQ&Qzp{b}I-bqwV?Kf*4s7vnJXiCreKLcV3vd96{-nieMr|*&wiQ
zk7Q`TBdPW7jHp2=mJSD0hRm~%{RulBUH&&B-1=V(-^Pu5O@0j0P_GcqaD{v1hhf*o
zT&~{5Ww~f}kx#E;&kpNrO5h*O&wW!kXcX0Pk<p>rCzy2Y;gtUF8>H8yvK_&%hZBTi
zqzRKoUP>Y~D6Ub<r&OY&rm!&95oh%PqaaL8Yo;qMqi}usy4S)?Cdc4X$zZOiA32L7
zmZDBvQha+Lp1Ls<Hl7|>)}oeVR5(Aa>AGx;1|hw=&zR8{GAOa+A>6B&_;alJXZAM8
zOA9$ZwsL(=?Y5Bj3#`X6HWB^%6iG$w5!CPmHx<2}SYDO+1O)X>sP2w-BGWE%b3{}O
z#ILSB6UVl7HNnR8_;Z{h6@}5Z)~dqNcW!@w9F|8&RIe@c(HzoF&du4F`0}HrFau&-
zJbK|u`GiM2MnnB6?hJ2QnPAg&*!i1^ClnWp3ti4&X!EGDx?mIeX$jx~7lR%cD$0k^
ze(ZT}(s{nuGl1ACeTEt+$G*WVtlN2sOm<}yp$d8xR(klxdlUS#cU^?}GzI0E;=*M|
z_q6$2w?qLlHM;(VF_J8hx!P7t{8g(gLG-tBrm-p2(%lhb;d37AVBi%nb0pInv0;6Q
zIwzsQ_HJGd$|i%j&$^=~m^>l1iFqcj@LKfK@1K(=anrgFWjnFfdQo>b%WhFHO=k0`
z9a6!vc8FObPwRoV&zTUc-KQ;ic!n0VF>y^?FEa=(TsLBtJGWS;I#qg<h8|M!vhcmm
z-vd?jBCRKSu2<PI4#P8lRblX)Q0}O{L5era^!`5FzN5_+T-CkG<gD4H8v`S?LE^jx
zjmpj2R5(o)+y})@Gcf+3S8Q}Q?+lisu0b%fuPk2T3<XO*6R9MTW%Lz?U+Y^MfI(o9
zD6$GSg*gXXeHv+u!_^qEgR}g?_R;243at1^m|T~yhVRIa=iM80`hIK<VbQ8&j9-tN
zNZ^Uk3{z758p3n;TnVMT5`W1-?sq}6)ttetUa{{#1EZdfs2P6jI@g*VMLN#(yc_E?
z4ZdUMgm3L~T_c#&2q%@@8fY@Y@3??iVLz5z*z%`L(#SeVP?(dO%LI+3anO;D=Y}bs
zde|ME3m;hd?6ZHhEemA##fHeCvG>}z<sAz@kN7^51VpVVj-z3!k7Ie9!>qN!SB>?y
z9tv7Dz*b&Zjx=a_cX+;%cvHfc9U-?QVV!OIJlo%jhT9#W4lJs!?Uakls#ecX_Q0;4
z^-x0H9e?AOmcce2GEd%uu#>RCwyE)5dY-dyZ8G%HDyn5gd4$c9NAMAM$draF2INs4
z#wwTkq-Qj%fHt&7mFwH~G0mSF_kLI(dQC^*9$ub)93!9z`+SR@Z*B5H_J+_`3H_>P
zQ~56OftWRh3L%N`d1t8`ych@e{mz^#l~YYF>40D|j4Mkl_gzOI2`o<c3~nup(%luL
z1#1iiwmqN340)g`<4o#}aGZT_XxvO|Ls{3ADl0Q1QC3_`Hb0W}XdUu-8U4jNF{arm
zBNn9$%Q_Cqr&Pi5F!BaK<4OXru7}YdsYg874d=eYuJPRsK`@@79cEb2QCnv1U~}rK
z@@uz?!WuX00mp$Bxev1b+y~fY*HtIA1?9DcGG(<eh>=|jSBvbvIH-grw<z6Fxo7jn
zTl0H42{)<A;oW09mnJn!<|(@;mR^~z$GA(+Kkh%vHW74vUv(E+5puTPA+a~3^$K6<
zD{S#4GbQjD|1i6tSe6P9ZACQ490D74nvZC&Ee}q1uhvzEUvv(B{XT3$s}x4RK0W9)
zxmzwdbqiRrV*Czr<_PC35yviMV*cfH<uZQmqkOine5us|1?IaI`S_<+hvrAr;CboM
zv8^<S8r4rwm7V<uf*7hQsoEN6E#1D(shhE`g(_o#u+;C?(tKNSejSS(cbARIUC~*<
z)l@&HcGO3^;?Kur!`+%rSF^?+xMav_YZ{OA)+e2a*27atnryoK&YhYR&ff1k)Vah0
zJ`<mQf&PWF1j!PD|H3i#1OE3Z`(NF&=>C6B*?%*6_=h`<{BLXIFObqhi=9t#VF~p@
zStIwjTzNs4SwxX<5%is}I{r%oE~SN*)##SoJ?)K}R0MsIw~u#%ExPv|n3R;0ahJ8z
zVY-1)m*=M)v<{9ljOu_q05Imtk0z1Ktyym{*zbr?4*TeTVV)}7&w>vT3jhPDgb)YS
z&sW$??|{`7B}!Y1aKYx<CwtpISEXYUaffXUj*Y98#HTmtTO;sq&wssR`yE$%Bq_|T
z3-2N$SFkXLq!PR#I_?dIcO9f#=qQ=zIJn2xncp67vXa1mk27R)>ytaPh=LMY)Bu&J
zg#^>DFl!x7yaO^DSK4BHTWUlUl^|`vWfJaC@(QqWReiL@!Qr|2@l-;1C)ZEffAd@7
zrNuu+Hy&H=b2a4UQh32w384wAXZv#St|{LoE+in=MOmlYnJO=VfU7z$m^$dB;x{8i
zET{h}N)>6-o3bjWS*C)o+gT&d=0*G_xWKu0UBmHsO8N1bDb|MYp=<iiP&Zmwc|!!d
zy0kLYdabJ98?eU>Mku)f<hLE;n)&L$Xd9lD_-D}NO>c<D)dZu^DXC+3wgP)Fi4*~>
z)0OX++sNbwmGJI?u6^OCl<~BBz83cgV>yCLy@v8Ynwli;@m8UFS%!nS`&9%kn$LeB
zb=lCH9{+qX7?u7>hyPzQ=-=6e{NtqgzhJn3Wzatfy;gqNu&oOsdeO*LsA8rSN#&9h
z(!fP#B(yN?Q?vLoMJg~7q>f4$Z-e+-{2FY$$rR>DKKOb4t*d~M4&?W<9ISiY$&V<;
zMgi_7<>uzsvkQB7=a0kRKR<x4pt>AmhU+3<<DV9KF?sB-*t=}#LTM-U2Za}hC<Lk~
z3TEyYE|LI@s;6axSTq(;qs^S>;L#7A!n|q6)Qfk1!`j3XY)a}c#z>4S2poha*CDyG
z$#Ej5z8J$9q!*UVO6_Nq`w$(t!s6w^hhnbr@sY)@r<{P{tm)=}1AB78z@4#C(cqnO
zlXaqerALKAzS6VeHG>-QSkg4#I8cw@)R|<nZ&_D`#hkGO6V#bL#j7mQ9@^oG={q9M
zCU0Y{@~Mt8ifh^9O4+BuZ=uUj4q8KN@lx6fqs0B0NMY3uFq1)gEk6nlV(<K<s+?UV
z=|wTz<R%dQFqV47GWYtU_xI``OZGROFq|E6<JnegVVN{u^V?&=kT|!}>fzy$9xq7z
zoS}f;o3L?ba}kev^rxqaLQH%Jd+-2PHnw5WW^yeVC2qQA?!UpZsA3-3G(YJbcRq!!
zrn+ZY`Z2kTW28eHf3I-asshh-oa~G(<Enr%1rn5RW(21a^y^bn1MYHh+{97QtgN`H
zqP~~|$+4OaqHmFJHc4_2jLjun_oL+n1k1TkR>+_O1)EI0ZflKxW3xEELiG0l#X)7B
z@*p^E*&$b$VELe7t*vN$q|u{=1_RQPB^Q+rNF%V3O`(sPW^=8WPCkSF9+H5opdBU+
z$v%`))#aUdEuR+qPlIT>2|UIIEBJoP!bk1vgk0mHNhV}VVuJUuR+@vLRXYdtp=rSs
z07z2$nYy!T)KrNP5IrobwnDRGd{r0M#IUcS8>oZvtVtv>5qs?w@|m+6*6{k>1j(3T
zhrl%dG7tux)Xf~!q+#5|9gtQ7c$M&n(bO}F{%@J+?tpt|`~z|DdG^5Lf|ScSYuHP*
zg_D*q?Yrw&rXuCj$e%S-8zWJr4TM%jt#5*J47M26_`18xU0hD_T<C4+rhtQUferBk
z`;>l>0G%x>{Vb2@`iVldw!3;!g*0^{cywtww}1_6Pu=l;S#g_sRa_wBYz!-K{O-{+
zqnd=cx6d6ns-)58_9*9L>x|e(o7g|hb252;<X;=lHzmT$Z5+w{o6o=2HxJ)SqsQ0U
zzW<MQK)nB*4)Jd#ouNEX_t8Fo)`>Vd@qb6up*M^1VfO(F%7L=O7j6x(aZ%hngCFfN
za^B3`zba9^T*?Qtgh6Wz)`?xpXZBHV2%d3M)M!*TH?Ld-tO=N#(>7jCPE1+F!4a#K
zz4fvF_W1p}_1gW|`Pg+Sb@K#)005#3#YUCvWua}t*p+|=-&O{5T*=kpv5G%%GQEg7
z7@zYHN~@+|1No(3L*^u2FOk+>@Z9FN*`krg-M9Zmh7NT{)eLkueBe3Wq@8R=^}s>+
zanz%2`XE;SdsrVq{F1;FfZlfbWD68MvL<49*3RRB@H;sa|Az}KM4_{&k@wMH^jk^a
z9`G5|F*o@}R@^fF_*ikF>rnLlQ|Qd6;tcoc;H~ys#CB?th@(D7Zcd#UNiQ=Q`V!<I
z%za4{+u~LpNt!=35`bI{69$Zk(jQ7|>zprnwulVM|Im`D!9;b)sQ6A)RRVFL$mC0?
zE)+CgEK;n98g_8aTtmNhDMT4ZW*|aU!c6KMIMUQF2wl5?B)(VKGS|ukZ8L=#Imj`o
zi#$uXh6AB%KJDCeXL-dUI*oQ-t%wsfR7h>$ZmjIB=QZiHayBPcJVckWoC8X4?^sSi
zLeM`JEUi{jqKGgEgVv$0bh7)m=-I5Wgj>^8hm>V+fmrH-z8tOB6wbMg{SXu*r8{lQ
z>&sAC{VKG2&}ONtEfLk2vFD*>byB5vTC&?FW>}lQ26KOI3W|hK<Xh#6AS6C_4$Lz6
zGK9H85TI16ge=nZOL!@qk3}Xv89baAIihKa##F65Fk<LfWLBOV1W{_y0t9(#V%}*}
ziGYgJt&NG(l;~M5g@(GSY&B}n@Hw@Zyx4QYjj6(t7}0uo5x-i5i9M}sRNBi{z$?so
znQYqNQX4;_VB(e`n6LBvSaGZRmM(sT+tfTG79xA9>2suyr?Yga{?yh*KP$>(fz{!3
z`0S~5vH-k)_3$<+8pFUU0z?3bI%S04)wYYBt2$EB6O|=yzWWr679dI7h&JmuyApKd
zp%oqgMQInFFz(z!jxB>V9{D9mY&{{iAEI5<c*8@?0>v;D<8k^!5|p)~0Xc>&Pe>z@
zWl9vOQ|oYDB(^EG^xmXgijIQpmdX&TJx;Q5WzFT9kc{roE8Cs1PAV}G#ZfMluE|-v
zezc*A0@>_E2d2s>LWi>7`N;;#PE#8EAc$(2m=nWl2IYVT`OVy5g~CVmG@;Se1Gz4e
z`&!2&6a8VAqz_T#Lz5ay{K%GQ=<X0tS^k%TxABEhmhyom?AICH-OVmWK<>GEo|1iu
zlvu@e1P`0jqk`}lpYwzX3Jj_vIS#mz6E@<Ut>+Kv6alSYW~mL7uGbQMV%!xOi+!*7
zuvo30HATTnt);=r2Q7%M*OY{x4OD|TQM<?KiA*npO{_xacRcBDkj!;;TuI^q4bN>0
zyS|zcq#;;J3;Gm00})~>g7Kv;TuC~+B(`b;R;O&tx_b8MSyYGk@f4+j<B_Va;mQDw
zY7%5OwhEzf4VG&IiIJBcIzHl#JUxK4f-MJnscO(Zg|c2ElX3YIv$oPTPDjyhv&&{U
ztKu8Hx8mPOiPvPu?^xc~yVVq1L!1;Jq?7F}qv74<PY_!Q*D`M!gWgxa&@T5t(D3c#
zzss8fp}C9}#-(#nxR%P2;M0->zEMoyn8z}Kn8qZFD`NBaD`HC%DMHVP(&FXM)jDK|
z56}Og&CHoI$*s%*P8^z1?YkDSQAv~@P)?*M6)!Y9UJO~V?K9w#k}XXlEn^BLEq6d(
zEKLbq)lTC#IqJ5)?z&s_ej%HF-knVu?w$Bp8uvLob>SgTjs7-Yd#`Fak31aOsVGx&
zuAfJ!XrN~h<>9T4%a~M5L_*0cPFa70lAZ2Rk*=l+6~sT$lxMXo*hk{J|M_-drlv{?
zlVpF(86M@}RBR}Ps+R24@HjyO!IXPuqw}2Ai&pV`Kq4I`FkxlXc|}4sQpuktCKM&q
zYNoao$S3w(g}Dsc=K0E1i9cbFrrei#8bh=3CCXvlEqNULW5->yN~!$Gi{)pM2|^tb
zM3b4YeT`$Hy`jAl%cyaF@6yxT*{g=n@PV1RUunoJsuXswiRg;zc$u4LxdD&)or!AO
z)Z3YqDOT@Bn9(n{w3lsF_Mh%AY6z)~F|U$%m0mK*)e(afxF^En-&4u0>Q$viDn+HG
zjl&1$b6JJ>t(AZEcSu}`BE=i2(!wqujMvaQm7Y;k`!B>xw8GbT!N|#yw@|t%Y+iMd
zEFar)at)Ze8q!Y(B#Rvng>JB!){VwWorV|3S;AD_Ofp+vhY1CobR8-5y>hw7=aQ%h
zwwg6#p@r4B&MLO=%g)t@1CGN8Fu?Y>+ZE&APs75fPK0SQH~jDIV(k;eiBla-IQ%*s
zpampQYO@l#10-03@`_6um<V2uPnp-7c0A0^GQcOFV;krI;l<4%^!68J7mfYWgg$hw
zde7jSkd3v51A!D3g=oixXlkm`#?MPeaBRWv`76?psXKj=&BbA45bZ;N3vqT5cm2?s
zDIA?4UXI85KgzF)L=%@XbJK<z*+}*@!p9YKN_Bl;pV25?_P!i!WtKI8oWX(ay>%p%
zNenbg%$ZM~yY4W^wW#g)Cu2q07^$9583fY%81z$}E{jMq=^taZ%_AIrM?}lxb$kcG
z!Ox+XWbtyrza8V<r%+?fm)&eea8(WgVR8NJ8VIZn4n_nK$4a}lk^Fc?ydQ}@BqTHt
zx1(<?;n}#WHY%53o5PvF8GV(*xE@e&8)fL<u<0|i895>+0t~>amg#y7ShJVMGj0&U
zGnC|OFsek_t~{8-i{~PX^=>ozKOuCg#z_nrrd2PcFsab$sZXiA;J1sb+dwYT;9VXZ
zknW4f%~FI6!sE8|sCJ&QG7pS6>?QDQjqBK|CfyMa&nYg>y+X~M1}b%IDQn9hYy%&i
zkRG+W2P&NgG7ZBx*U>SIw!rGX6}8mCKedg$_9UoS$+6#{YGmC_^|nq>6RFt}Q)Z&R
zgG%rq9InS%8%EK1MInxc4=<njGkD>@y(tbm=9F;w3vgll2}<XZ9SPS}G|?+-TH;I*
zW=j#?1_o7&`eLK_A>O9WhI$nVbg$(iaNc3hYlJMPglJd}w7YhuXB+yp^rG27eYs?U
zYq4~JfVAh*1O<ch74~9^k&vEnga`Y#P4H<MX~?_zb^AE$q=f!X4D6oh{bi)FocGt;
z)SlKcySF65F`WAWI^od<;rRXNw47$>);tx1%M81YAuA!(JH=0%Hhdi>8Q%fML>E0d
zRz5O1J^5HRVB)5dN$c>=KnTs>+Fb*C8a7x2nCElVPh?Fc4Smgx$>j#9Y`|o0)_Id&
zs(kbn;i~i>b!|G+*W=u#*#LO*C&xWA;MRPex_q6q+uWep<y|%y=!tD0+6uvQex8_4
z5FT8eF!u-BJg~om#M?RZKzuDRQ*)iw?r3r!>FVeDEUy-E*L`E%#XZ++QW=Nn@5QA`
z=X~qjyxkVx*__CVZZ>S2b5rq$m&+d%T}#{W^TBg+f5<vOS}kY!jAuZh){30HT$!3n
zxk{zY^JL8A6qzc<A0(#9dqW6c_Gvuk_Z8vH`_`gdutbJt7JVVO$`-qmu;;d=H=@2I
z1|TT#h0tzQ5TGC5OGxQ5KM}(WyNrGgrGi8$?>XlM<T~o`_e|4hw!?@=uBKyNT|)fQ
z!b#97VMcr4gnp$CO!TpX6wq|%C@m`BvlI|hmk??&08L#cR5^fk2}MwvA$}@>A7l#T
zwx$r4Bcd?DmM&1hx^|E(!b%aSpB1!^DVVPbl^!N(fJ~m((-bh?byE+bZopkH#d4m7
z-VmU?2CD4i<A9NwX>|#k>JN9|(JuO~osZrjg}qhG?BUlO8|-j1%Tbo^lqN2hCPmK?
zPg9VXkaJ5eq^mAtyC#}l5Pk&SmS9yhZUSLh#CZh0CZ;l{-IfF>Iz0lK<`L640$UTe
zo}s>jw`3$bl7pXtko9FNCPjmImICe!k>OrED_sEw!MLgLJI8H-x_DMA_7%Np8C#l(
z?Gpy9ht`r}{5;=glv$!c=00Bevqh>&tlifcZX5ap^+>ai24=CzdM&0ogrp)_t<M<U
zx;j_AZFk|ivNfG%du~|%(_dx>8nx~`yDxF$){t-`fdt9Qwmqm-jWYRW%-nTjaIU&v
z)&o1c7DaZ1Co=pT^KhcSi-+A__X}IXNf%=^&5<0Q8K4kxnkx3ts(Ds`mD=9Rj%SU_
zluXOb>e!xLyIm!6bKBXP4VN}3$&>ECDfVvMynj@;?&h$%X<@DYafWN%GRU676HS{k
zO}ne;RkaUU(r=$~aC5!+$WFC=i1nr!0<@G5jl;#GIe4j}PyDMpyB|F36IYuhyL&kE
z$zSB-!;$rac|I6~DJ6`X2YYN<KKc#n+`dAV0MKtmk&X5A7rDrRUep2mOMe9F%O~@H
zk&FKIoJIEkZ6Ed@<;FWz*6mT0Fh4UJ4ALEP3wc|WYSPx2s0#)u3l#W7Yh#+kb4+^2
zS-1lR9aybcWED{d*CRY{p^QCdAZ+gVY)x7t{CS?Y@e4nuNTuXeQy18zNsXtUr=Bl<
zKYO-&zqvjFd<Z<Sg}*LS;q!GZhIZ)OuJkbV+44+8G-CT&ut}LZ3VzU*@2FDpi<+|`
z4XI0(?ifH;Z!0mUE4vpnWx($-cT^E~=I%(r1@YD&i;L*!pJdo>g<xngV&D@E+E|hi
zAd07}joXArp{m9=XddSI@EEDhv8OOXgQ+2|#AG-ZD$!Y<#!wmHGRjE%O7PqSnVakh
z^X!h|NE@EDx-2!-vtvzjHknVOP7feRNL-Js+N%A)R7=fEM8X#ejT_0(HQbA5JTw@R
zintPKreeQ@wzyFkJwN+2fCk}I(UXvPEI1yKTTf*)Nl8J6Y%`wZH<0a*=y8+Tt)P#O
zH{=E`Z!AtqPxJ3DGHfFPe$9`BOuI<eV?$W0Zz!QQRJY4xWBp=2okZ}8j7?#-lK0au
zwn<tjM_oIRh?8Z?Cl+GU5!+=mxvjLyKM%gueJjSEVf5(WlDk1BYR6Z^>B=!8qe747
z^>&z0NrhfHGnk#k*laiz)u+kb#f%%D0~N-mWc4M*o)X8_FSC@1<+aXinhE{mA$*`U
zMrAT$l0yvn2b(hSB{jIi2J`@8k**+!8yKW~rx?bx{m9@?NvV9-;^m5!BZ;HnY%!6a
zHgi13)c5k83V4)52a8^1IP2pPUFl(IRcs5rGz5;4O%X?~pkc>9i>=MB0yv{N@DN~l
zG*jj&%eF|DM=mOA*8o*K&Ue9O(FGf^;V(U>VM9$MwwvEtRK5?dv64E!yOX<drRSrf
zrIgF0zbkv!sh!Fx(drV#6L8lV$2i)z<*J|G8UmONt&(IXPfpxcx_HCYF3bXQO|rco
z&s<_Cax$5rQMB#zWX^zbl3UF=gL~G{NJc2L5-;RNA8;y{P4nPf#ZAu1iDVmM^B$sP
zTl!dE<T4*b-u>mzHDdSsq2TaQEKj(kiihKm?|l2kd|#C4HjQ>tCM5PT;0liwgsVhN
zxgC8ode9L{hAH9L)WCjcdHbBFJ-I?E^|{fWWAo^eyU(AH(15Mo&<^gKg+9?echFSi
zMW4C2AcBFbm?N}3!?&hZXHOo<=8PECM3w_NUCI0@uV`<TK?Ge}M=Oe35~LtVBGc3K
z992TecGrIoha9lVB}Z=$?XhH{)tw~t(*(WbMQI6xtDVae+GY(vM~ZT!&btpHtIOVF
z0cF?TYd>XWI_F6A3MRYe&gw_N+?FO&l0$MLfOlauR0Z<SIAtnsU<F-VeTZSqfko97
zw<fjp9qaGjW4vzx(ORu>f;w&ThG|Y>>J>Uwy1P{8U!OMV4zikB@(#2F@u;HAJd-73
zrPAGVtoW@&0Jkwzgl)}v`S`%0uE)>)nO6ORE0D4mefLfV{s^8mEG4;vZe$y5c}P>W
zjo}gH{si3ZMjtYptc~dcE#t2Ht3*)$+w`^?E%cW)+ZNi_!W%ZsPPXwC<V@*{wS$hd
z3usXFUZxHyv*n9^J`K|Yl$Ok!m{m7d>vkuDGjsZ2jA$rTB%(ps%-|s8jx!4A$C1@?
zW9}}G*>dqex<7g3sd=v6>99J&*+)L0d(CO`+I}i~j8vyY`{j23b^L|rIokXDMfPU?
zC+VkuExZ4Z$6x<dcK;4e8dUjhk1B-tLE8F<CK=8qIQ08BjF31@y5#RA#01D7p%565
znxK4MmKUVSfs+@t?HI_QU`PuXp4Y#wCWB=Qp-7ZobP|<K6TRaMr?-qQjp;^<?hK8L
ziw;k#-Q9}ZKc8NUv%lT#l+&rxuL@2==r-)|V`5zEV$y3O!zBAZ{Rp7c1+`U@)J7R!
z7P1#$3QI{x{$)CA;J2+SNJkB>Hah{D3vL@vU}v{=;3k|p_r%srMKX?65Kv`rFQ`EE
zrKhKXha|y#7hYs$A5So$Vr1ef!(cfvR38+(=)z@;-9(?59Ti=sIbP7h-7}LQU*D#8
zC<Pdx4mt;HKz(sInT>HkUC#r5_%o{vv&|}6WZ9;Yg=&ew-T4ye&9ar8lyMKp{$6$T
zC7{zY7+I(kQ#v%hsaM#@K;_X1A&qRv(~^}`ir5_W;m(gMJuQ?wQO=uDhVP8g@cnrX
z;%qbbj_49q*nZejDoyJWg-P$AL9lmUfe6J<M8s_&6Sm`WxMr$&iI1plxhvG7-!+3d
z^nOPBC@$Gz*q7|8<kP2VDqPDl>zmA)P0S};w?Pvc*kSc*oTf8k0hs+GWhfnbXsHxV
zrZf)7a1c<-So7zjKcWpW3CoJi&TJc<f9RPZbu)7W?vpQF@P$3}c&S=L4GLlx8t06b
zi5$F5H$EzO6jl8U{H3zsh{iL5>fI%=;FMKn{KN&4U+;GF86?qH?;t`i1fR~uS1O{!
zbWbzQ1{G3esCejHhJ2bjMT1|OlMftiqInOd8mr+}cD+6dtwO3~C!u^se$5{iC*KP~
zZiY)c<LX#JN@szlTe>YfXNv8Fdvb2rQWuq9A>H5jE+=2LF!_j%20(|te3n1rEM1y>
zr02q>Vh{U}s=x?ZiV*68Dvsz#J;*OBQFmHGK0$I8;KzU$cL8fB9$CQ|r~t(a3c$6J
zptDWa{dFBg$`omgX1OwPVB9LrmvF$o?rL@^Ex$_QPCz)XvqonqG*vP`zd@|)+LWW-
zG@1rb%bID?vvpN&9W)H5kY3G_vvBPl8Ha{*=r3B;oGOq~gdYv-`fePEWVU99_=hu$
z9GawD1hJWTWke#S-!Gv3NwtrABl!v{O8f~GftYImvcGh)y@vnz5E(#3umg4Ec4v*7
zo@-y3URranpv?&T1ZnFgpzT0_m3ACT9`#2F&=3bBDPoqq+(Gu#5Vw35V6_^SMe6=o
z?I#a7=Y%TJJ1x<L<_%h!io=bslbZXZxs({3ufm1<_?`sa_2Gueub9md1+@$Fa&5;G
z4jh>OQ$Bq!>?fz0h27YgvfY$x)}CJ|(Oyy#PG7z(0#a7}5M3Kmh<al0nC@L@|BA9$
zimnAnnA!4o>N2IcJ^!b;Z?I|A1GcW`>8}|pD2ZN%X`4d!gOcj4Ywg;%SbFAUXkX;e
z20j-;inwq0=S*e&<tBW*2H<I{B8(_ZBJlpG8p57uSinE?F32NKYqQs=7eJOxhvAqM
zeiIPG+_=D1D|qKv6wS}_VTGvsR?UBKoUFGc&md~>?>U>eMr{|Gm|#hDE1v8W=m)u&
zM`bnjNvlLZxq)yO9P_TK7dN9nTAT@idb0ho+g^Y<7Oil{qIv*1Y0D<)2spUpzSkAm
zX2Jf!hpr^TwHQnBbrj%OAbFq8#1ldEnWtW+$SqTb!BX%-Epxxl<OLz3^~FuV;IXWh
z-DL2(at=6hAK&d2iWb5-h5*RE#>n#IGr9=M-LB{oW7u#BpVQ<+W-9*#7nO<CXdjjm
zg>&18V&4eTv|{H+O_^n|I+s{!Q{73f4xMEsp~?e<myGj!bcXL4{_WW$H8_Yo>UVz#
z&NEpF#;br|4{{UQbir)uXA|+7fYL0$&Jh&yu)us7vlh*KavG@>wcL0-ghtutLmhZc
z6Kw6w5B(?#`Duk>+gE+NyAtKili2K4&%KcLLo=UNx-#fVo@DozIo}3)pDD4{Kuh?_
zcSH<4qA(j3@oj86nr)L?tPDri$9C4*S*X@xW@ik);@X<^=QJDsiY>=g_6+A2R3};Q
zkflMCSG$~0zjidv(YH;eEddNNVNce{jb5P%R+ia7GZc@HzhBHqW{XmNNhIl_|ECQB
z|9^W!U~g(|C1_}`Z)a-bVEqrrAt@CcB}^}?t{^CdobNxxeJRv2#ZlJe%X3FWa>0C;
z{1o#m;dhXONU<^`xmq5d6gCzDxzS}YvH%z~Z8kf7i7?)w!;hJ;1O+IV@NFaSX^*ZK
z_P?V!Qx8Ai-e7!m6Lx2=a>Xa1Ss(XI`b4;1Qqq}Nvj?szc$BVqd;8fGJ&LyNg|VQO
z(JG*r#`wv*-xiZJ>6%b0=KGkaC(_|*Ax-K7{Thnxglm6<1HX6-jgi$QB~FeGBw4aA
znVE9aYuFTM(b;(_%_R7=85qF?DbyAA$m(pD@CdJ9Qdfv;@J>Jr;?5Q8`2R4LOx4hD
zy>HlHwPe>{b?rYcUqSx0LA4dHF=s=Zsa61nJ+Z4rbQ@A!D_5_>p$~lgu|1p)*X7Q^
zUBe%oQnw`Pc-x^C6MnIi6uF37*)XMnMbxafLOR_!7*ekr*S%iUjHmV^O?jt?%E-cg
zymo|4zsvo194a}_wjULGWQ9SYCy&dG@bC_`SV8l-|2ANoEpr9ROqnBG+o1m)1a)0l
zU3bV%lJ)^1gSc!G;4<|zr|M)sP%v^a4GJDzyv{1!>NjV|H?J+VfT2jXk3vRAOZK8R
z@80nJydtBvvcpdVc+6mQqOvw!{DYtrzRozEV~TE{b}Cx@`yW+cvTuS*VjVrt`bx6c
zF{4Sk<A!T`eV-n_^{Mec%-C_x${#+SrNWE}jZy1DIm^=-_FAR|zJ$!`F|uYmbqp99
z_`YZ~&-kKZUyW41Z*m?PoE996{Trmmt@oyGuM9)Rt~`Pzg1voeI^~AuzEObq39+OD
zSQ{aHMjrxbmlu6XR|AcUn41Xu1cO`Kw$1%eaz$KbEF<Z!tW2*Ni3$Y)+9~rdOQRtB
zqXScI0T}JMD+cY^nSOJynEp6l5+$0Dj~qle^rJ)`w=@NF%zk%Z>c%aVD<QmV5g}ea
z?su=}vK-anHCjV38qkgxG&aWw&-Y3QnO~2Yb@E=txE+ZLZy!puS9DKsa)&Hz6zo3)
z+M~k6GKXKMFphZE0)e@QTj0cA>Q@CH<r(u#_7jS2Ip5vka{Uhy-kGfS$86jw;F~XP
zUl|RA0tL=bnO>7#Fz-8G0E92w@Of^_@Om#Z@ceG>1`xWP+-)HHP^$sg;EkKIN8)ea
zkgie7R`}vqgwj_8il30UcggNzCsk8XtapL8qsFjZ2Tu4eLhb`Mkticth?X#genv7+
zcLh#0c(;ASKE^CaY9uQ$PA~aDt-aI)LC4$^x-O?IkVL)@m|+ejz_&Si#lEuc+LpL;
zlm-9w&;tj%B_u%o;fmIk>-Y0;*Nhcmnc{QP`4;f2Mjqy)AHxGorPD>lKfkf=^X^+R
z-cNq><*TS-ohW5Co3(Am5{ztuuJ9rCs&37ytvW3dB&Lq98>?zvR8~lWr;A&cVUwv+
zq(dM0IqS*?7w`58Ji~HmbKE^9WNMTFx*glis}{vfL9=!?1&RBXF!9PSNv#1?Ip%HB
zB7ectYl3Vk1~^}18%oivXWvy*d%y}QXCU=mZ&mJtsJjEgZYb^Wd7V~bK3Qkj{8g8V
zE%w3JL(R5QMvzeRu8RYNb136k;2R)m!wbuDK}H^s9VlonS!n&6N*m`8VTWxiPtEUO
z^jf+jQcAP<u-P;-b0z|oC#O~X_7v&w8thxP1d;n+<Gvoke=4ec|DB@x4~WaZkSPaM
zG!$@!FuA$iQ#TD!`GHqAHHpFZ>Uhy5nV@kZ>_W}a?R*ja<rt|Zjdtk-&ZpEz{j0m4
z^%7;2pFt|P1Svxbl|F#H!>YSn#hx9f>COy&3TOWK9%p4;+D$!XUTAx{zuZ;>3ER?s
zgR{4F(?p9l-?ioT#n@=Xp+HBLwN+51CbfaV4_RKPNK*6|vB@*gh_X@*Qqp#5nJRuN
z(`L-{Q*v}DAHb4ElXy_CvRF5aKU|`0(x+Wkwy*C{UmWi+Ve`l!;IU4i-Yiub=`z=?
zBlzyQq`Z+6-lj$rezEKM&d6<iqRj5>_{>AgZh)e772&?TF+<IZOxdAchItyLrOU?k
z-m{~;SW{Wrrc|k;*1=$UvPe<QAPLIfJuxcm{3MPS{NZB*te9oOh60;A(L*TUGN(=O
zJyWQE*S@jQP+M&#S!#5I=J+5_n|`3Z8Pn+k3p8(i`tVSvWre3s*;%e&C_s^&_IT1C
zbc(fk>U=c7Bv+TcL+{wg7rO7t(MU$AfyLE28KhCd;fRkkrH@h6v!ILrHlfSt1Pu+J
z-a%5Mk$H!+yt@1;plLj!cM|Pe#LjGexj`?;%CBJK4nz~T@sca7_PQd@cOK=@I{)};
z7ouN57O$=*jB0k{bTxh}xN)8~K0Rl!{g%e##(_rNFEWEQ3R#}$HGHJ3PaGI8dQU}g
zSX{|Pv`{nj`EF9Qo)kWHBtf(q(61Zf6g&5ct&FX&)J`0XGeg`<nOG*Box7->Q}HyL
zAjDg!l@k{Z632zeo+tQNSh`PKE#>D~x4kisw%+6j!c9n#(1ObdVL!G{w#04th+AI0
zWvedZ!rEbVM$U<5OE%mDUTt++;;j?<R#viB3e?O)NrB5*td}WBc=SWeIne@kE3W2Z
zhUnqAj}~Sk`?1|(=dK7jl#XDZ{UHSdw3lY0RTLALDtydaAYU38y}lMaLXS}$g)$by
zIRJ=aj8hc?56B^~;r9aGE;tsW2U0~fNOrNrYocXzh4Cc)#72Q-nxZTP<9kiSZKLC%
z?raIi%{GNqdMLB}%Jt?IW5xy^<GX(D>?a~GX4njlWh;%Ff=$SWXz0f)(hHI67<*{^
z5PVv!+2}4?XQu$sxvF4YdWeTiJfidrBL(^@KAV{RBy*1ho6z1k9A&Yg4l+5nP>Z!`
z#LP-M-UcrdXM?Y-lM9GA3)&X13#V6gjh;7Q-v__nd!+OOg4>Eh>SYH`?>Lze4Ie$q
z0xCO70lyvTm&1A$kM-c-z8m0%TZnukFC({6h5nE3hwoDf6KTD_Kz}!HXD0Ncp!}?C
zh$UfD=o8CHz)0nQjp8iv+@t1CeA79Rw7XbR&jK;nJt_jUdR$@Rabo5h=CUT<?E5au
zT$z`ncz_%05PO}yYesSPmndEIurnaq!Rd;OI0!U;C(DKc`6Be9CxD_Dw_HE&A+^Ah
z)HL*0ETivFVq;)$)hW=AkPNM!bU-}Mv{|^=nsHpxlK|kO*~Aid5Ab10&ck<Sn~$2v
zXel-emtM@wLBSm;<EpEV%JN3U0bmvaRD|Q2hvME6GImJuraw-g{FvmOZUkwd43c1o
zfJ`oj!SJHOvas&`jnmgj*%y0TV6b?GYc}nQ&G>CfoO3GA7i{_&Ix@`JuI3=V-|@l`
z&O<4b?sEQdX~>d%7dp%?gQPGV4~al)YVSwkqRCl)W>zmAtl-|=xjw9R*d9YAO8MW(
z>=i(-m}p;Qb{nMsRD)^$8#Vav2P}n(<5u%uRu`<cd!(Q*dAzQ{=xKt$C`n?dpgRNw
zsOXV|wHa&*jES5mt0;i%{wR_P3f}>UE4dJJ6rsqpz}zG*<BLrD=;@Wc*VD(xY#{8C
z<eC5t8mr_Ofx$sMjCC3($nOciOsVs&e(b6a1>7gc34AFJJd02|Rzx`2CfCrzWRI>y
zFRY}E4089Wx6vW@%kpHF*buXKawc!Z+fo4^=ZV`C<MQWLHq_zqcd6qbW>jH`^@+=v
zKD*g5CCL3OH5B093%B`Bm^d(Bp#PhkMdR}MU<4)tivKv0NPp7CZhO*+&eKLlZI#f%
z?0M(z05ZC~ae{%f7)-Ubr5c#}j9AY&dtEEPa=Y_5=hKubeKK&Dtg^6SE7yg#L-wf0
zoslb{%hGY`pnNl%b?&5CKlnZAVUqY}A11M5tWwAg0h!gXLf?Oe!#`9oPq@S=@%tG~
z9uL+K3vySc{u1M>8RA;%D9jXl?z8ni*=NuvWtI^X0wczB)}c~;cDismiw%WM%THpJ
zDC4);R%*>ZBl>>;zJ)LJM;dJ%qxu9=Tf-!Pac`)W2+9Z{iyeykxLxR*QiE#<JL_Z2
z=W5ZlNlBlsZFLIQ%uAf(Gtwk1{A)K~PaQ}0`}mL~%;{Q()awp~0k9#oA*CVa;-|lq
zbl$k!46nY>smEVE{omi3Q2v`-60`d9T(#1*ApV;W<KLjEe@`S&X+G#aUc_<5^EI<x
z2p7ef@NjFyK)<7242yA9igm43E6)rF{O$Y!Wkl<Pm_IQAT)!S6e3+4ab9+J%(asR0
z5^IU>(8m)Hvn}@Qwi45z#LT!j^Y2dbti*LBQx2Qr0viL3TpgFzE7-@aEt;668fiT>
z@IKDin1eQj%i9jp=#HBTl#619&-z-)BtIjAK>2;(7p$%GezyVnBLs(NM9vz5=Fz!<
z{0-s#?yCVP{rZ1@zP|rH0{?C`{T~sK(zW?}5F#UMrTcji1&sx2_K1Us8xp>QK~t^y
z$ouft8RUcrd9z@Q&py*|yb@lUqj~`02d?<Y^ZIs7o>drad3khog0u|8MuXrJ^|`2>
zBpc^ubhvstD3Ml1)8{%DYb7Q`62t0O7IrG-RT)aLWe*vPS(TO070EKFYs{xiQ0J?%
z&Y9&(J1tW3*ZhE?#x_pfv!$1MX6u$Vu1^YatwY8^BF_y!BG(x0(B<{k&6wQxEXBmR
z5XV?Ah=$T#3w!^*6wph{`tllKvlb@A_Cb4y1c_%6+!nz7bmo4>0lD&S;R)O22pR3z
zr-4E6(CJf80N=R{^S5xeH-4_(euc90E2;i{IKLcxfb^{`X^pL|jV%mmZS1Tato0m?
zX#Zz8|0{$F8Zszyh#%7An_DeP)Y=pk(5hjDb_$4l0!VRszQOz`#Mm;;!F2}h#jD&x
z&nhp3!pNSFB3Q=FV5LkWJQ?E?thb)^jEBpYmp_3fblAgqB1|z6^a;a&0Ku^j4`Ogw
za0<Fyp@b0@sPiMHE@isH{Zs-Li&jhFMaVcEy@<3cO*YC@7j1oubi;@|w~PVWX-%ct
z^mheh<FLJGY9yz;vkikr_1Z{NEY+$8VyK0^l?=|3ms>30i@wJU5vXu#(~AWaYJ|%+
z1#yW7UR64jJ1ZONMLH_%MOyCE53cj_hE~kvE`(ZKe?+*9ZQGM5pMCa6$4S8td^O+|
z4xB8SS4~7kLQl#pM<{fae`4k3N}8gyG}~1KoF1RYnT|L+jip>t<ZJM`Li5O=QI8hs
zhcM5-B6u1%O1qctw)m#Q`hOM`=J1<Rwzss@BxHu_17L`qjoqo+kA%4NG25jhVe`FF
zFsLLJT9o89Lt#Qz9r=&;;W{Y-%h%<P&pkMnwFb{AoXgs5d+@ActTxfi*5a=;LB!Ph
zV1gEu@Xkvt%k6%^4#sp*=vC-{AFc)~q_2cZv~FZvt(0(g4cfWW?g|eVW}hed<7fEV
z6N}$T|IkaM!kW>5S!dgEFv8Io`s0(6z{Q8HQ|t2d+byZzl7>Tie&*~}I{UX*{$QZE
z2DfVL6n;bz%p!#jus+L;TyDSimSyQHUpfGbV_1(B>Fh09uizyVe|C5=<RvMg0$Iq%
zT|NXIWMyV|wgJ$ofvZ1(#S5<34IDub>c#65sxaM2{V{R(;6u}7k_Ek|z!`%~z=HEl
z2hq6u*u=D}9)?StWfl<N<&;PsjQD6l#t|Wauz(^;@W;(x)v_+~&q5?H5D?^7_x)eV
zjp^q1^DCeK@ge_u`oAUj|GY&0C;0vs99QA1>2^{^1LY+o`;~mpL6s#8nI;tfrD_Qg
zM7VcUT(~*J+jdNh1Mr?i_}b7U>`fxCNzWz87UOe}al2ox+FRFsIZ}JSgZn6rkk=IQ
zYWfoUX8HA&2=Rt;w#gYhF{SKes6qL!vD8CR31ZZP)mNAmm10R&sus~9WX7fGH%T$G
zT<#A--X*6N);1U>K@sOy#_8#jxWjLX0MA!S>HNuw*eFbzDJ2+ZU?++(KO@pbSEKKz
zj2eLnpS3d)04c2pE{ELw(*#ToY)o*EBV0HIy2oO6PA}CQ=$N%A^t2UWDoLEGRdW|c
zSJ_~Co~@Dsylzq_jG}5f*QOr9{mWf=Q>;`YFN%O+13dvFg)B;IsFu24^mO9KZZmzv
zn#f&1S=0<1vk2vdO3X5|bfA82vJ7aDfkkI7i1*x3;)e%zZMcWOozx~fmmV0>`ar4(
z8|VF+e~=-(uXW@vS<3qw+MG+W#!j`R^^|>13LQ@FKt)a-5KCUMb_!Pq&(R#cqd<a3
zB<lm)3iD_sOtgw0r2)q_v)btlpoCuRz{jVQhS(33dJqlK>oZo}wn*w!FR(55Ui-rv
zT>HtCm8&$G_({geV9#;&kuW!hL5^I6kFLLQ*CP)@vSETWa;6$%ZlJeenyXMxd%W5(
z-;oe-+9PUHC0C9-BQAV)Kuq&M`fz5$r`1>&ou))9ZQURuv^_$_jE)R9wRmn$=w}DG
zFPcL?or5SqT<2@AWEbEb1@AN~Tl%0qNa-;8IB66<gK~Q?G!LllHlNL(^B4J@%2bfS
z>OhnF@E<@I%&i<im#_^Do}ifTcB@{yb+B!V74?)C(S1wN4R`i0!t&Au7go<mc(=hn
z+OE7f=cRIRP=N+`j*{7cSV`dBT*^7TaO#8T%5mrkQ+4qff%h05qLSS)NNo&|iL81&
z-#&o=;$GNB#5{g#q4spN*R`x4py<THx^lb7R1zL1gWUdTp%h%nEhoD86^ra{1gZBx
zw+uZU&~()x6X`&=EHly0Jfz?_-wr&v{XJI`HlKkyL+az+A-Ox>>7Y$9`?od)GWgH@
z0>(f8>epv*8obnBc>A<}vNQhIHAwKE*Wlm#OJ;(c^*kMFV080rL!mxp1uv^k53~dX
z)AwuT0MJ13L>8&M9uRBoQ$wsF_}cz~UwgjzJ<<FdF1nQ*98289#f}%x9=N~0+6(^A
zZ(RKf2wlNN!PE%Rm>tWe#KDBRC3gwPVj_0>0lKPCfu2MY-$V7v<Ex~%yrTny$zb<q
z=>*2Dtq|^#zb|kk5Qd;w-fOqvN0>?K-?dN5I&XMpiLWaR*)b!sXXtuDTZmxx3-Db)
zxBe1ajSRq*AECg4e`W;~u*CJkN0$~XMDq_?rpd0M_s5mvMZek3-R*W$rsy<8zsHr+
zt!#3lf~<RqF=8OJ*e1eGzo({7$_VD{?*}wve9wp)lqLGZiS*?ZG=s&#q4b~!<qkU@
z&lYrXR<QLm-{=hCq<&81<PzLk`Z(meu4`lh?3#H$j*9t{X}wcpEz>^=AfG+?x+)*0
z{Ah_>8k4q(kKn*1K2e4&^8CzpJZl<y1F-yauSTTqY1cC5nMt~E97`-nQf+Cdz)+Ft
zo1e_kipfE0jM+paQ50!Ue1}M9k@<PX0Lo}}n^2%11q{-Ut95&4sjitbjWh;yY^az)
zvkT3wl~-)vBK}#eI~ciavv~}+;h;WTHqX3a=Z52)QMFe!@7{9h00LKxz(8^!;QU+A
z*CA1!YQ`cNngsP4lO&HOURmz%*)&~NJ@WZAs_^{BicbBXv+4gNWi={FS<mw#W?Igt
z1T-{2;Zy$#Y?2j$q-uHai))G#l7-p#88g+Fsi1zaYS0#e+fBCJhPcW{)JI7yVG)NL
z>rK1A?O?T5&U(JSU3Ug@fwF{YqF$-phVmz&6|BNi%@hpanJe894{gJ_VH-;6Wo+NP
zRr~`g4o1KsP#JMT269L}M2}EI274jd;!eCQ6AjyBT>qmz))3#`5)^@vR-Dk^5UE|h
zAmz!AxXGkh25W(E;TymVjo!r=qs%!mx{ES6l${>iwLxXb?R|TrKNm@S2%XFD>OPDa
zx*mQCZY-r?OaHrG{;=Ax;h6=f$%AcA{7ef2i>8}P$zAYu49$^LZR6C+_f%wtA9AC9
zTHyJqe)cCft?#7@q`z}LmZ|%nL?hT!e@;$Jh`lv#a_$jbK<>Yt;=i}5>PZKsuX<eQ
z|M)r;{sb)CcRTRiZoGRt7s&sV3oV*OB$ymLNvOvtZ2@EP-=uuteVdRSG2F(zpPpfa
zRrk)ZYRh!_Nxjf!<K<AxjM+g!@n;O_oc@!|^HFg{3>;)Zp<oj0q6`+3YNlSay<JUL
z_8W}PE^~=tEl=n&nF~l#eG4#aNTYZK^k5^bsW!hl$_4aB#)}=LfYo6PC%XZ6u*IL4
zcJ@EoQ_JrXBOop*0xZQyZLuN_+CIawg{r}KNliMX>aSpbn}nzP4ZDE8hJ}N#JE(s@
zERg(vr`CTB!*WtG>%53xE@vA7)ddMn3A9i#Ck^tIS?owABod`|kSE`yCAd_>Gd4{+
zX{5Z>5#E5j6c=luWYG|{OdrJ<t&O%iI$z#Tk$cE2z*J#s06PAN4ltP{XOOqG^k?u4
ziH8{|$_fv`9z|gj!=#U6u+QO+BJuPnPJPnWCL(fXmT9(3PD|_ayHqb@u2u3Erqk{L
zV41_h?v)Jh@hE*3E9^<W7}9ehNmo1`HKV>#Y{wX0noqvY6~gYB)&U2H_yPcTODTX(
z{0zD)h|~N5h-=xm+Or)?=Up|kMlq=MXp_#pkcHOMG|$6@09hDLGA-NhXPM=f6mu+X
zWW`FBwj-$kDAIin%YF<6M(fCzs|LCDd2G2a=K<F4S=^Pr(0z`0mdfrYd<m(5O0qR^
zIT9WP(#V(ML$133=g-o>8jpI{jc(>H>F*OcT$9+jQ9y_uQNn>z6JlQ4b<DkBp;UUM
zV+}J^S71rS6Um=+Di=c9JC1{%3VD)Rm0Qg&%F-B96&vcE*MCid*9S`fgRpOmj)cwD
z?T*>8)v;~cwr$&1#kQSvl8$ZLwr!{5+<Y^0?!7Z>eRFD6{jat0yxY%h_!n->e<}F?
zDfd6eUj7a@<o?Qc3~jCc6%qcGJ^$-PQqYzJ;z#CQViuhkpO>IME)vt#Dht8=qL%65
z$vyVgwuxY9BV=sj_pJ!=;p3%9N9heOstQSCT=$%82^ni|=ivrs>rU=Y=hMy=Cj-US
zCD}=3?m2k`1hrPIyEE)CvUFyT8x(z!ibma$L3S}gB<Um9@FZo^TR{wMY!0jDVUeMT
zxtMAUSY)oZL5HnOT(jddT`UXh=iXoJMS^MsSx`K&-Cd^$@;s;5D&>2BZRa3qER_zb
z-UdY70LiSpm;TvCc&y80JPy*Juq#3Xy<Bh`^`V+3IX6BDkss%{-RD{~LtKLx_*23c
zVs{@?gz)0K2BiPmW*3x&_XY(bFo`?#K}ae)YzSGc#^)YA_G?w<NBLbFAbud)7}_c~
zl!XFSm5RemuS4#i+575qiw^ad9^(H^5C0hr{GF32*cl4yTUi<C8(RKT{+tiCOFUp;
zV1i({E?_h+U^XIPhxxNyB4F~cIludBh2As!+nu~W3xCh=BU(<-iGWRRkKecV$Is>~
ziGblp#rpN<_pi^#&*#UE1}IenAz>lYQ%V`0(*>hrGzZ*CM#L*_FgW^wL4%+WagrYH
z6A_b`p7|p)G7OU*9i5gO9hDpvo}wWir0kO>6`v5216v5NCPl^h$N7hS2SHc&`!LY^
zeyi@!MFPh16HvX3!Pd=0`elCL5S9_>E%jeW0{JD1zc)vszrmWn#9*dxV`FUfPbn<K
z^+*8I!vj7`8!VSB&SoNXxQ+*oTXu^GkTpP{H|y-zZK6ivjlAh?abLdSdjF(f!v(1c
z--HPor~72>%W-%2%m!u~kO`0ppcW`ATr~Wl=$Vl#c}%?r{WywZTpc})f!Sx1TlD7~
zQZ|Ip7*EK?x>7xH5-da6bvN)DJje6Ci>OkPxtfHnoVhACa>X<44lmsK?wBg!wA0r~
z&`dUbeOQj2r2T^x+;nU92s-ejUq$A|IIp1323FR1J%cBEL{xlPli8p&Jfg~3Kr$hs
z+-i`5=omr9=T$!F9WNHuf11zxm$;fB;$2iK^K>+;wor!I0BckdNn=g)hU;GfRZIGY
z^Z6yN)_=3B|MYLt{~}OZ8z%=_D=XuFO$Y?X@=Ny7VGrmYF0M)+Wv+q4b2*_!u<Gv`
zSI_Bf_XjpHeQ0tRGR!L7m%CpBKjrl^l@o-gj=hq)ccqAKZtCiM&(z1>CF>8(`?`=j
zR*fWUgB}ox7JvEnn2b+gSl?1iYKlIPFp$oBE98(wN@)p|B#YrubTByCj7WsDU3)0q
z&-QUqwRMbou&9&qBC$r`sZ%x;l;DPcFBor`B`LuoqM4<l?$Ch1NMk%Y&;b{wB3#*A
z0Yjhp8KLE6Su3?fbbjx!W?V!`Xm*Lo2xBQgX<46WBx4!0^Hg<AOW3z<>e1ajEzr^1
z_$pQZy#xnDNATPuD*cYeL+4NWtM@&Q@Afe&m<`AM-1R@gcxp;hADAy|{r5W2e>yJV
z-wRmT$=vFHZYg9bYyOo)f5a~W0N+5Nbeb&(W`U?TQGOW&W0-u=QjI?~OQ*oYh?7cV
z+<z55y-Y-|Z?~V$V;s1!0@fwu@mf6}&s)5X_Bq#bx;nkV>4JmFG~y5>Rj3pxnAVl;
z;r^g-$z970fZ#Ud!^SAL`s8ny2AG2~B67H<CfRAt(OH`uP^*;3RaOtUs0|u4#@#5-
zA+`o<2isP+9#F3`$E<Lq(8*0_T}1A%0R|YAmu@m0ya^Te8!#E!+y`WZO_P;PUNj*I
zVK*d{--m;=2pNm5J=h_O_SxB_>vS+Zt+WN$u9P5rMSJR>6};QVH<(o##paaloJ=Yh
zmynP6FdkW?Poas-A{r;O@jyu@riDjzJd2Z3^BDweHj?Qwt)SF@DoFLYXz9e!xixNb
zmAl`yaa4H}8!C>QCAC;(c&;Z+Uv`w=j*iyk|8e^6goTWtjs)&-#lA9qaErRcjpyH<
zf%1^kRuEJU67BAs(wjJmrL}mIRy=S-=HGfcuboAk3iJ#0-d2Gq-<HYtELoA!x?s3N
zx+GsuMexTIQ+<J;AWRl!>vRQv^byn{Q#+rIfNnw};!B3JTA$>&C3?4Y4GiK~hK~_s
zO&t!tf!1t1^fxg66Grq*w?V2qZeACAth!^OrcZ07!4HEUg5o_<(Tw)yBu=MkK{Fyo
z7XA21Cmco6Ms@wQtP@8&ynJ{Y1d?!>A_=PiIVut|plKPZ8&?7-?o|Ajff+%S4x)pf
zgj7tW_dJF3Pdxkc{X7DtQxI2iI)lm@ghsGbyO<T}v_tkd@9<SXHAJBg_@PN+-T{d`
z-AQ<%$h`U1VUrFo&>G=HL4#cc6oykV`3M5R@L|}jWYBU%8&Kvc5DyFoZo!&l&+dxI
zoB%Qa-T6{11U!U!5Jlk%ep?37$i8Ffom_$+b_P=754*|uU@1?gB$6O-IV`kQPqTYc
zY2<=t!9V&$-mmllM2}2^=5TXe<3ulF3M0h}f6Sg?|H7v{TzRd_FKjCOufgU2<~|Jn
z3N01aWRT>MwM#0bXn`xpl;;D?23%GZwv~zKL6H)GL?|FTvt(ipwojz8WLmt!Z-Bi>
z;^3L%gf_qU&Up;aK&xX%##icSEh{=qr~csObOELIdBK3;_9G0`H{xOr4<Ph70nw|0
zL4k#XNx<}Jxd*U5QfiUU=;>9VS6<mAIdiWh{!rzRJ9@+dl$KpIj!G|CQ^?zRR$eW(
zRgKZEy6_$#^i2mi6?P5BPH3lQZRv$7tpoJLREh{y+A3PFE!r!G88w`(D_NRJA3Ucp
zZkmijzQY_c4k73W-^hr@n%?>v(R!EG-VsrqJL3Rqw45`pu4{K?>e^MdP#f`vLmOI#
zG<(sqO?VP|V?R_UecEWr)jc<97jz_|D#nWY-YZMmhO?k7Ym4eY&?YQ)kjDvb`j<8;
zO(RMa#^^jdCe6$g8qSwTFT_e(2;Qih^z{aXFzQI8U^38qGQ-#qVeSGCANQ{o)Hdsc
z*HUPt>Aiir`(f9OhGE{2VM^yV=8oEOy#Z^$eCFfP%i4}Y(vAH&@kNqW+r%s!nPawk
z$v$~x71}WPt!55<6kjBipBkZ;2t?%R1ZVcK--#-E@l&0HVo`X6o_>n8OH8@JtAH%@
zlBtuRC~#Eb!*;AN364(7U7bWutJkuqcB<nc_=NPM39-c39V~~#o89aK=a&y8%+d?1
z?;rsL*dW4f@CAc0)?p{@__+AFzgdTO62Idjya+7}aG&RgcJN7Yz^k5y%`CF%&pi1;
zFJyBX83zDJATCmv#kF2C3Akea@YJFcS|)ml_@ThIyGMTh<Bm?(_aJ=TzwGtj`b_@`
z_iX<Q-1A#G80#Ck{}r=+5w^P-8rwO24deaOh?5k?Xh6O~XJbHi<RfO}Q9c@~+A+L}
z5J8}u6qQM8l(MrdhOqQPVcV)9HP0}>2$iQh<q68Z4FQ#)rX}W!dhpMoN=LhM&UY%q
zM!y?^TQbg6C%OST><BT31$cR?D4vxq6FqPkV3Y#Gu?B0qq|nVi)rV#7tRjIe!2GNY
z!~P)}Cd_lVITRqTY<`!_9GrmT(4U}Ci5Y*y0kPx_X?)EQgE6s5iOB7)u{Q~EA}d4A
zi3--#?oR`%yzmVhYQJU$p!lLG(wuz9mB3IsHuJeb#?7E8{Z-p2D^HD8964M&E!v6q
zL=x>SobeoI4h&b{T(i4R@+y4@_cQjkS88mpRXlHT(8K=;Xf3R^wjjvVShHV}COp-J
zuCMy`lNh6T&e?0gd8~?<Bk4^ZJEzJg<%}i1wILhV^DsvIzLDKS)vtagg6H;!F*li<
z5Gy~gdP*#FFS@&FO@H?EU2GiKFzN`f>%2z{fA~5aCO~eKtso7jPi(LV&JPmC@D%4S
zTmmXshYt99);0evZu(C><NtR(|5KqADr*jND#+TRGQXb$Ai)G$k|fvr?Z1(dCzf7-
z3DCqEKmeNq+UXpr@FMw=x#D38b-N8eLEHkmrFi{f43<UXqw@8}=o(DxV`3I{JTD@m
z-%jpAKEI6{5=Jpq7RL2lQB)Skb>m?q%8%rR^Bx$>4>T|h+G!8OhhtGBV~`}nXkHIa
zGO)tTsCk!$HI{3V2)b-A1$S844I%sxtS!rEZ5xgy8@Hm5q|$`#v8yi5*tIE9MtdZw
z!m3XwSI1;+Y_1sF>NyO36(WtEW1g@`N>5&35-PRUtW>_@qS>&u^lfXE$JZ^PX3D~P
z;T0Gyb-cjnlgP_aMN>=*6Q+yQY}}lew(&CNVGUaA-*j?W-AJq)Vpr{gY$n7GVHGxx
zYgUB2FCN*5mUjA7`MOENwM^cKY|n2<sl1WM!R6jkoclf0sW19U<bvFHQWA_cgV@%C
z0+<<gt_`?jQ=A7N_$n|>#L{oLNx$wqXWvp9<}<e#HFnM2z=j)z-kNfs0#o%_g6mTH
zI(Tp0{;>=xWvSw6Iuhpuv$mzOIPl4b*0uOjEs3v^k0ZgMGL#(Q*{3`?<yjqT!{|`#
zR-+#--GP$68T_=mwZ~!$nKD^t<EyLu=R8T!dgT`{N;;>KY(cxA)Rqsqd8K)xnU9T4
zG{5_a_M!Q!zv>XPHm=mlHdhCcv59=Q6e>8q%v7IWAFC`?Y%>Z<x%%&&<nRZokKPL^
zi)N&~_MhBW44K&9@{!mySWkz3F8a_GzXo4%>hJ2}X?hoe!#HhE(`_6diwG`TCSUN<
zSXB4WX`{1!Jbx2=&%g!}xe89M&M=s0)bQT&5#)Bw>n?C^F=As>qrkrtY`1ATo&vmO
z;PZ-;IkfW$=j#&JGKr&8cLv@jqe400irL8Q(d{R?f5YyPuO*k-M$ap}GuZx(yfw{?
zaGMF|PVs~>G?Kks=NNxZZtI=S=G&9zH<vF4S(_FkW;LbrQ=L%$);Z?wHyrfv!70_G
z`yWQO81a108t|m6JfDlaVu*u?)Z&-v1hh~$F%|p_%1eVpeHS!w&^9@Yd<|T84H7S=
zaAdSii)0n5#M*Y&1<7ZiBCi_NL1lx))OpcJYsKDDGk8L!iTO^8(JV>s)7dBVLo$S}
zj)R|ZM)r@~%Nb(6B?7w%^K~P7e5hPEP(EL|{SDH}9eSRdId<+bBpj=V?v@Jq<b=`b
zKf1dvW3ukCU&Z(3e`9d_&$Q_8+*{Gu!NuJ0Uqb>D3T-lfl{(PkP=pQ+0@aq)`1U09
zgKK(XQ_Ym<9>+Yidz?+PFvQ*vKKloI;jRlJ>-_x5#Ht;_TVmLcHd|Vb-uE70`9OuC
z-JwARdJMhCN0Tn(pw-cCPsxp-v4X4;jH@ngkCS3~Ac2yZx8%c7c5;<?oCg9gAa|av
zLKMtqPB&Kx!&l$sizLKaqOWplI+0jWSs>H=c{fj5nCfm_6`TnQ5L%fL%*efRO86$#
z$cOe$yzbVL_cm3>mV%7xE<mF%B}m%e`eboGMtM%BVp%0^uMJa@Iz!=C&ok|wL(EC8
zKFinmbYNBTAdq7kB$$O&TeWOoNyOlYYnSXje&~BD4B+>R5d*DsBDp=fm-kgRRtx_c
zuMp_{XzxRGF_A+A5rCNq8-j$cjuceutsN<mW&xleRT)&|ObIRS*S>Rx1l6$b4b(&n
zBgZkZd=0Do1;M*Sua?SR5Zv&kr@yZS{M}*bf9dEy9@i+jF$rLP_}|gus7w9*?I2SG
z>3$JMVl?vn>i6&y6MaTFOK}rYsT;5#eqGzH$Ku!9;BMEdZ@@LKD4-o~CzUj<W$8Zd
zz8+xJfy!vmX6$C1$MB~$^%6pcU-odnvV-d%4Y80nV^843fGSTRX<LzS*S56gDd4VZ
zo&*DNA^oW_9*hQw<5AF0f%Dij7_>XBB_=STs)1WF7gk?lfJi@gE#1u@u;=zc5HXSz
z4vFQXSFB?ug)VMuB5go&Qp6hXQVG=Ji!`j>yYv7#sWeyv;n>D|1LA6=fHe%9<lf|a
z*2E|b8es={_6bSE<SWpr{-N)$3jx0<CluzHRsw`AlDOiiZD7)^<?q?D<_W^R&xulL
zGwGtfBA6t9<On_X>pOdyA@LuJ{q)0s6bNn6y*6mRw9x+b`+F^r{LMqCWbEc7V(Vb7
z@AQ9D+(d2LITiGwPf}YMfuDJa{G4DosSO*@c|}Hh#(~Aot&#23t0#KKz)Lq8gsjon
zAt`O*dnT?4gW#!5g&Q`&_(3E=Agp%5Og!HZz5K-Oq8_=-*(*s{m<k{Ny!pmVvD;7D
zdwo7nXnq^CBZ+dQ%j`vsEF_Dn?JVEsPX2>|NB2l~8`%*_Kgec?XBbeEBd_N*{1j^M
zXCG@HYOmHa1QiX1E&p&Qqerbg(P-g5cA9@g-P*YN*wL+d>{B4KhBM~6>VM=qA8*(;
zQJsg0w${jJ)JYY~Wz`}x2FZgE8XY+a*<ajFqCKvXnXG+AL%ZCmPt!bqQtp;~GMU!d
z*SQ+Gj0V!EJehtp-fr25ddDn#r6Jh?H}AD|2M1Z`Ty>`DGO`1y-q#7A$mP2N^LR~l
zYDPWwz#(H<V*xIyqu5gzPzocFI->V25W_3n0W4=HwR^kER}KsXSH*Z9-FeV{@F-Fp
zFiD3FJBYmpJqS4{K9~~eK1e?O0W-6CsQSqAX<&P|<0>}<@-vpaNu!bXAU!L317SG0
zNnMxCQq#Zt@l!{%X9)<27VGZRar~n|+O*jL-+t1m&5IXYMC6FFs*Wv7r(KKjF$x-4
z$MyTyUYpFAlP8>-yKzr1$VOIYs{^eaX=%zRX}$Sng~;WgWYS9^e_!!gl!0)8t?KV3
z%KfN?=kUx0%NuOrNtxq8s}>f)F=ScHbeXyajRFb6vh+&X$!Uk1v=xuN=72e%=g(&p
zP?vTC5u4CWD9saUd<V^E{lg%l&3=|L+wXB#2%x+IZMJ;tFNEGGaa+%{9ym2>?`Zwe
z4@~@+aLV}7LFq)w0@86Lg3<|xi;+4*ohEJo?}?{}^U`V7>Jq`J+A3)7p=?NR!q=DS
z*JakA&M<B)4_;52`-yWbLEpfRs-vzvIP&|s<Uw;q*O@cAX#Ge--UT2MdTHf?t#+A(
zZVWZ046_13=I*Aa=u_f1KfF?%LD{FYQ<S&xa;2&rmP@&g2=J$bQ$em?!!p@xv}^@$
zlArmZ5vjvr(n_xbvCG2m5RG$rBv0`6aGaq_Cp6E)A=fPSYQ+Ik=~4hG=`^4;nh_`U
zVoC<>gp*1sIAafjxjHoQexuVA@ua={W%0=AP6t}RMnB;_ub66M^+7z@F6HXM_tj^D
z`T}6zf7GeMv(mSnzK|3c{J;4z<Nxl*a{3OA#{U7UNpT~8!7AW$lm#7W4>biMV7tfr
z8heBoGqfLcUW?1wfU{AmwWy7-Gnup}5N;dzfNU``ApECW>A_jqi|_GL(-GRYHZ=-@
zh?Z~A-%%kGWHg9(E9+%2yk|B^r}6XFnO5ENyjA-J)3#c*v^mNmMS^;>XGd8f78)ii
zn$h&BoRG8K%bk>TuMi!i9f={6qGxa2*p9_LX*}o?PNGlhV)fWBdG#l^$V5}wP!>l5
zLps~<tODgMEUB#-Q76TH;5fY*AqWlg)c~%GZgW^VAxF18O_4YdT`!JZG7w<1><C4z
zU0#UcrY2^uwMB?XNmYWJBUX@xWMID#8b668Q^kuCA=gN^j&HYAs{>$sA^Cpchj1MM
zxnh85$?pd5u_b`j!5sAt9wHsnXOY`ekuYfr@Mwypy|%=VOX)$0m79-WN5PoPWl@mK
zRRoO}1l0VadK;EC`L6T@yx9Mih5Toj!tlQ<?Jpeu*M7qPta>FWYbzp|BKyd=i~x+t
z(Z%0>@(GpVBLFq7u6|?wX_gp{4rQQel<<3mW6WmViej#9@?LhnT*lVpBC=b~baiaf
zZ6;^_u{}ddfZYFN;?;TcF7t@{h`sIV^W}l{n<5$5OibEOg4Bz{g(D~%aC}x4b^38o
zI$D{_P<{R$gKw^Z5Ifn+M*__;p!8hueevI334%h@RI2m0>3eLKHY_%Xg;I3Pwk*sQ
z>qbwk8p<?@EA&n=1Y!;kwI}RTa%eG<WpYc-jn#-Z462|*+HWfj)ec%(^^=`KaNg$t
z#?5tJ<n~;T%b5JxO_DIHl+}2PP0+1%6jnjk@!Ip_%oFteo$h39C<TLwDi1h+Ds4`p
z4_ANiPpG$Nvo>f*o8I*+%xub}Shrc7o|GB3x#WFtQG20Un`$~%y^Uq1NkH-o?<g_p
z9I!f<pQ}7ounVXr<qU)Xhv?Gl&SbWK)K+Q^3~~;`pQESPb<S~j$}@KEnTjcAn1i9Y
zgnKM7Ta_38obuOU2aGMM4e_zl8WK+|Apb_>8+H=AFvm!}6?=6d8K4tJXW#ILJi2IA
zoJWI|58rIG7m$-f=*vYHQO+C!?QQunDrb)XOp(tvRI_LQMOQC9p!}OLqET{^>7mxd
zB+J1&!*W&vMW3m2{g<Kv)yJqErB(x50+|Y%5SJ-46;i+m5(<`E*)}DL?j9COhFkG2
z2aiHEalQj0bdcqzC}mJ5%fLY|bjR=m&lwJe3rCYzsL5M>Q0+KVm0r+Izwas;ql<uP
zjgES1++KTg*+;z1seo8unARmx>hTSOVGx0B-5V2o999Ntki~<*8YU-@r_kQ}5M(^v
zN{cs#w>v;a2A|~F5_PAl5F{rSsme>hgDWI>(CzUKax5OpIMg*`Q+nIL0k5;L9h&_4
z$L%0btILjTu}fb24IRKeGC$(=jKwIOpLHTXr<UrJy`MWHBtWtm$c+*qtLu9^ruAU!
zfNQfLf<$L9FZQzF9}g@pvTw&c0r%a&N?58HenD`WbO$5{V?ZWwJtzK4$L=B1B5E6=
zQ&+oAx#djNA#jT^4!)7!4)SIx^6R4!JRCw_4@`c2Gd-a|#Qj50v_cZ_(c}9=q+8<j
zTSpLvxk@X!=>GClb9VSJ`0-sH?Gq9pp|ofD`=nUta3Ha}CEiXbmF<K_+B<)-?#D-+
zGa-xG*S$J}c*k$6K>|~39hkjJ-E=7Q!o=%DI2b%*3ZOB=*Ji%sK}zd<;Ul8~8kEnJ
z%>eu2s_RedfC?U`J>1#$c(tF~YyDmFImfSucb!M-yX+{Qu+Ok1axVxog+%+;sNrHK
z-zQ(HX<SMNYo)zHf&ClR(NJ4|jXryaG49j3qluS!8tuV8p$;I=;r)@wv{0}@I0HVr
zOE9UqVhXE4{lkBe>a!!6Cb<0ZRbR~USVbz=e2V1u8g|Q`(=wic<hhI&Mc239+{W<s
z_x(rz?s4JqQ2whlru9YW^7ql=-wh%Ef6=0nt);PzxyS!>or=^Ty_AmZKd0s-Uh6&L
z7s~?$fsFiTEP{V@7mI`nLX1E_i}M3T`o|{S6QQcKopD1rgxL$GH%BF~l?1MVMAj@6
z_JgxPHzH-QNzb*qSaLceuGvoxny0h;StzDYbHAFql=w{)fBa|8b&~Zi=h@^iqiL%1
zxnJ>HvSJssZQqgh^<J76t~Y<WZ|q^j>{|hoZv0_R;j<}P_CVM0F+2NXJJTn{oUh{!
zX!~)m<dehq4;<RDV@eL(l#Z&=eaqQ)f{F6kc9MyugXyzbFF|zgxiH(7>TgrWPmT9m
zGdJ2NpMor1q(-!7ZhgU5d%Rgs{!||+Qa)r8zLIym1Q(*c&qEwO1mHgDt|z3`AGgtE
z{?R!jlT&xmAA>q}J7`ZucCSg;pACDn7k+zWtPJl_d&k1~&$@3p(OaiazBpY-tE}41
zLUxEP)6u4G!Aw~WP7cE!l``%e?CLNlkrB7h!@{643|hxU0;DK4DoVc-G)v00mPK&0
zB(#3z31mq)Qy5|?w#Ya-rI*ifWgT*s_KGKgh^}*Cla60-Z1e8h!n_C)Mp?hU&+yzO
z2Vr0`Ez#x5`+C`RVGxhkg(2SXRnuEUr-ooPt!hdc!;s|5Ga_HX;V}t<$bxlsx-r3H
z>ZfOlv5Dl$BxAw^NeOJ~v8AFLI}jo=!-4jOsiidNFwt8pzE);saK5g+dT6e#*7Y1e
z4DFdP^%FR}dfHfBks#Ziu5{Lvd+VCIikiBbe$pJS%q+~U=G4U6(mFLUxa&y%L=LSY
zRB|g}6uS5U*g(ZKa2p7y<)r7(6M20H=2x7Dg?kC)e4FtbU&try<n4Yr)Fgpir$A-m
z5X5I(MZF&~AhCUJ1?ww_BHXzao3@G+>btq-Gia{Ku`MLTHm;);$3a<myLtTDuAkBL
zWORh3Phw!HqHE4y?%^{!`ruoS6n+b&+CqtmZU`2v=_ivNZBN+>y&j2L<H`(VRABH`
zecj<_M1-Tm`C69=fxDHlY-dD1;?&zPi~U@KP$iei5<LImzvFkF<Y8II4g$J-FVC0^
zF*p!7-y-LA03}K8f^5L2YKq-ZVWUYJ9Kw!L*0;8B0%KBM*^p|jZ=y+pG&<SurO2kQ
zjj3ouaE$NRj|Ydn3u-_(Q_M6Jt+$NVbj;xv_!%)jIB3Ua_9AGW+?Z}2XoVe7vRJnA
zbLEmpx^6H$9zDXr^vM&g>RRU6$QLU@>S_J!hCg+kxcbn#M7tvKus7$#axSky?U3@s
z4`+ST<5*sFbc?1*DG=#X0K}Q8<3k!o=;u~E#E|;HTW7b}FrKWCyVr)&zG`k23MGOs
zQ!-@LFV|54%|^0R>5vgAbjKceEP6~iE=m%~3uSQ`VSDxN=)zL5Mt9SPPhM=bk?Q7~
zePdGUpMKRYtJrKAsRzmS4SmwHRHn2!@85<r#`NTjbyaoQ5OA0{fp$j+%v-^F41Y!k
zF*RW=$N2dJ&tfN%kWKtz0!C+o7g!dDhJ~3Su+hVOf@XJ8O4pBMD;>=(w@*nZgVmsV
zM+~gYD*{{CrU6C>g1uF!;OAL4k;A!UGQ+Ty<7P&m7n25~E<pj?3^NR3SIjapB!I_`
zPaHa7F!(Vzkw=kS8_%|2w&3-_VG<HzpX_K5{xfzo5mrXScsgh1AxOARtJU9846{DH
zlJ!^GBKmwUtPR4or9D<ju}9z{WPfHXuhFyzw&N^VpoV#Y|D6}2Jc+QB)Pjj!fMp6e
zWx8J9(T~?a`b)}L%wZ8{Wi}0E>x&u!w&2&ydHreF=7bG$oZyO?U%pZT@?sy+_Vd@g
z8G3c?ub0SUsm2vx0!7wMWixzKBpn!-@sm(4jZ3JlGr2UYr-e3w9-)e_tGwiK=<}3*
zXP>!#anN4S<ul_c%UZ-dPc}4ZtG!{{a=%D)jDww%ptcSv9>d8s@y~#aOQzdMUHaRa
zdzuOx8!IPst>;CTyVi7lEiK<CULP-Q%5*CRogX~Cokd+(&$VeIxW<+(t69rC+O{+<
zR_jc!;<!CAExesKEpUJ9DtHzGSS=V>EzV(+b-Q@rF&`z`qZTTUer7P?9VThHpq+H6
zYNTIR6l*t_ZhzaN<;AE2{SZ3V(iuQdk<ksBkn?XX0T3*q@-s3aZsiCsE{3Hy`W<=o
zdE5IY>Zh2dP$p5xYNqw>T>L&DAl>3IK{2Wn8kf@VTI95L=0JLSQ{o<Ar9*@zCBSYj
zwwtOWMnHAr<TN$dF=~=c<?d7HX)va4x>dvZu|-at?QN_=pL!G{M3wiTuG?kqkhOp9
z=GJ=%ZQAM1l7fO%CNrjC<&aNS9ZFKxGLKNYT#LIB?=JLfUKN`1EPP~R&;_g?VZ9NO
zLsVer*UDiEQ_2o2l5p;Xg+a3NPt~A-6J=%ORkj79vzlmgm_&6fOr*heT)e{&K0FxF
zL5}<#`N~Tg+IbV&iCe=k|5O9*?8m&3O8HcXm4j?-;{xU>_<%YIs&trm?iF4ldj^BS
zru3Rr-=HXslL;WA3%NIT2F#jKKLC}<I3hR_KY-*T{_&2~4WCN^_Ij9*`P-j#t`C)|
zgTMtmxp)2raAjVLhr6QK>X*<{TX}D#2m11yG16wHozWBcDV`wgY~XUQqr7K_NqkYv
z5T=&deeu2fg{;6!&WN{GBCR92?tTDmSg$D6v+YsicTlZJZcuP<pl2sUVJBLNW1sON
z@F&SnbEP@q`MIN-%<LZLdr<5{#)C$q$eqv!#(s)1pf|f6oM!1A%f>^$wLj?L@noIg
zGDB?G?4}CwcSbp#M)pir8Ut~KfZFG2lSRcxod<ftkmCXG%3qJ@<!|Uv@pd`A9JnX7
zw``TO+b&r`X|`x{oSQ8A3HHdN5|zLAN6AD**!NPh<)qFh9php5$=O5l?LmxAs3a1|
z*37Sx@kFDha3}Q<F;?nYPMr|%T%rxrY!Ne|Q*%g6YB1^@@J`y6dwD=SesFNZv3B?c
z-xH)C6En@F)WqqCpn0RT9W!I+E+G`yIy^s6uk&vWhMaJ+32yZXdjQkU!CgbW)Af~A
zQIuOKWS6aB$f;<Xl&A8F54f*9NbKEr_ptc_fL_=~kI{Y==o$}eCbtUHXeYJv@R0K;
z5^Q#Ns@Y>d?}kJ(V*Jprd&jBsMjCJmlNQCeREc+JLTrx!mRdify|LNMkQ4ir{F3T<
z!2Ro%I}EgK(lF0d9#Oen<)9@!gQzS)?afIeiGT-u0#uu_n^{92&|XCDE}7K+=X$y4
zo#ms8@ZgxfXmvEP;OH<j&RzylQe#~j<qv*WZ^sK$IOX~SsgaiJZLM0h(vrl^?5LiZ
zqkQqim|v{|KY5?P8_LJ3!h1)vV(EwQr8?x3qXq>sK=C+U9+Xh+>`|2=K;lnDNzM9(
zMT{*^l;yhgV`|()xziP=f4qcipZI=M-@%<0p^69E%u`WFkbKIz@<tzd^TM>dT9kk_
z{b&R6@x0gZ!Sj!b?`;ht=X2>)PdqB+nTq~?sFV+T-kG=k;%^c~8<}96zG=?9er<^k
z;7QJ7AcLS()(Au>rmbGiM?2oD2Fk-JY6X5tgem?Nhi6tMoR$1>ivb4K6`;l86@{9+
zAOiF;Jj3dVRBfwz4ESDd91snvAUj}y>NI>Oh9GK~ok3opUeW6r7zlQAh)!4_{TWje
zKy?=WxgG>3Mz1uC{t_|-UK<dEt1NilW%y4Rh9G=^9z&2mfbLe5?};s%5`vZjVr@#p
zJpyMVN$B04Dn6_PKTPD+f~_er-yGY$NKL<`>S&dyl5>(h%2l%F6kjv=jCHL25MMHQ
zA-@;QO4wB*7$tKmS9oX9Ahl|sMov;M?a@W63P&V@1pvE>V70jEPjkWIWGOmRu#xTX
z@{B$6XWKUQ$V76c>p)%>kiS+(_5$gpK>iYc+l*s6lUaHkFowLqZ8;csX6}AXwP>Qy
zYP3~%$*(#0kYUvN^u<zJ@!NC?S$b<MeRCweGltol*K1YVY>_9_c{OCZ%sWx=&2YJF
zV?x6xQ}EplP;66VUQ%=diThw;)=C&rOv>)QnjY;ytK^()g2jLbW?97C(JQ`CCqJt|
z0Zkp05K^+-b!m89vNLmOdJLDVfi;A9p@<=?pp6Rurx@`VO1bQqs+c-V`h?3giEMQR
zM#ckGro=91*D0j68AUcf3oqx#*fy(Ly49g(8~DItbHdPWbS=BjNt-iTwXo5lk<erU
zHha#&+Y7r-Qno;c3;iCuS{~i8*Y^^8UP3p%ojTP)Qe#DFA3Xg{1*wHwOvfSm2N|zf
z3d!Fo5}O4LNtdTccB-wGGQ)&+1!|h|hno@X3`&Ya@OY*5zgkItVPkk|ww=-Dwyo%Q
zVBKNI)UEkJ7xdcbdL!D_<mlZbfRrzkBkK-8f~?l17I23Qtlpjb(^fBa^lv_*z?kXw
z`COoYG^oZ+>kR2%Fh`o}4skZvssYr8RGGVjdrF?jM|N7<V!3bTexIY?t{_dRneVBc
z^79stvxHFIOsUDv0hdDaxTJl@t6$&2$K{QzJDtHZVJwT-Y?M^S<SE~j%AcB>N&-xk
zF&j5(qx{tJ%p8g?oqP~Uj!2p*DC>8(Vo7sPFyg2ZI+Qg{EFGcskuZs&D5p?3n3u`8
zlP)!|pt##Ip{o+3uabl0Prw5$G48ZPJ!EHRq<0PMipiE6XDuBfkj;<8O&brnl;IYt
zW#}P=lhxRwXLzCF86tJ!N-9gUtt|wS&d%6)0X_FYe$M8$P&!@7u!K!^-?V^B=YBo!
z(TI~inJ$*?6E>BTh`Ifvj3{|xe`rbC5b@+FW`D44J9f3FGFj2F{>fdiJorv{K8DsD
zqWQ`FS5xWP5At02$G2}lc>gUy{ks9v|CgZttF_Mo>82z+tNgw>?wQ6lY~&~Qvl~8u
zC@m=C+xH$K5SSpr%HbV)q6E75@&56kzSrJ0ZTk*Bv?R)Mw*bITis8zova_1<vxdq)
zHJfKGA-Adzo{q!`z@J%Hp6_LC<zJt&^0L<nJYSz<`ETe2xxlEqV6an8e%*E0*DTo+
z1MHaDXWuw&wnyDzvZ{7KF?D|J3I7lqh-mRPq)^%>E_EZ<Ne)lhLn(D5))^RB!2F;<
zdD*REUhluM#CT<m^u`ff;`|A0JAFN<G~7$sd_ZEe@_P^UaMz@AeYczaNfX>=K(oa|
z6KXSh4SjWT;0KKh!zc~F<z%@RqH8aivsoC`wRqd6U2>=`?Ub8ib4+n#DCyOCy<l$>
z*$o`eZn_&>9jd-p1zc*tJ94pj#|K<$D5TkeZzzP>E2u}5nQQn;5R>Q7Pu(p9(B;}K
z@dg~jl>_?F43K5hqv07DP{ib^*u!J?0=(up^I`A|UHH!4xRZPWsp`z%5aWD~Z|gF7
zeOdn3&Nzz#Ja!%)VW$P>Rp_&0x8)NiT9u=HC-7D`Yg$2<{S7Lbuj}^OlMF>?#1;KL
zkK=<s0FUEmD4zWdy`gt}`12E7rO)VqY2-sowC?q*WbsQ<w65bp4u?-4`d0C_*PG1H
zmGhhb8E<X<XA%(f^;Uc3r`?S%&e#7j#fdova`JD5XNr<D`z1H>El3*81(S-&W)VYT
zr?*F#0u2nU13SM-%y9Sw{-k$64lm@G@`XOJXMny?e<mkS3Vad~*oi)N(+G+nA{8~T
z*}j?vaNIiq_R2oRniydPo*1DYnb0?Fr;S}6fzUd<Ae>Ee>%21~>`w#bOs{}epfF%Y
z4~VECVx*6bxY3fD7K)=G;n+q%OiwM07?Jv&8bQ9!o0PZrMX3~VLWF7GP9otXf9hA_
zE|f-NVrR*YW+>KYP(06SxiV<MlS9#(IuHec$it6>Qs_XR5y7sdbZSsZb6A7JRT%c1
zuI3kMtpozpSzPO3OSTV<4^s*8`(g3ba#V0(Q)G)^3uB^_uc6AzyP=By91e`ho<QIV
zbhB9QH!Qxfy<HUTHt*b0(6nWZt+!ipjG0Fte_2T~O&WWh*G_2!MRE$E9;kjIC~#gi
zE4<EWh3zBxHyMLIo&~(?kP>{d7I#U6`C7dwIQ)uPyz2=|8?^&VjdN{fS?bDBy@n>A
z(x#Cq=W==2sz;=&%h6N4zF)0+)s>s9Wi{mJKPoLMaR%PTVOW^m`V`@<qNG3g(DTSx
z$uG5Z$@VM0aEoiBZIQEV6YCe2^6c_4^!zoKVk&(_j}SllJTa(-d^P*}vXrASQHh8_
zc|@4G5o`MqQD_nvXZ~$TlB{HBCb2)W|8{G)R997}NgVC^K<#-$q+lZ8PbfUOJd}gI
zoqX!1GlXF)s+rFE{9!ElZx#(C0h5r<SrcFHs2J5SqGKPEE?%}W10ScEdDa%w2pNut
zcAI-&rBS`_tA*cAv~eL=twR|$upgIV($B2N<0hDDu8)4+N1gqK5LHf(Gh4&LBz(*w
zL1XMgE3>&}m2gzgj(nRhv>E~gJFL!xv4%dE%luIeDUmXqi*L;`r!g~j5XZq;n1r<*
zmscdks4^bv>CEjDnnyR}G09T?j1VSbF1-E};u5vCNw3;m+BTFuOgz&TTAzQVN-7!<
zs-BNev<ln8s9#8VoHoa1c4TW~)YWRmKaU8X++5x-f2fk3H>_VWp&pz=B9X?pBg<)d
z_h2TibQZsTN6cs<fPY+w8)FY&aVuxb0LJ&#?nX1Ue0QLX*O2I1UlCukhV3lo$RR<E
zSD_vXp<`zK;hZ;RX_H#%r6SXBE@8V5H#|MZih+`Ds%(_Kf7!_`9<;ajOs;uh9c~21
zeN^geiVR=o*|~cAppO^Eg|2p7eiyP_@|f!Hr2AR}LFmB-X<cSVhtGx|DKY9SiZdk4
zIGS|M#7_;^L?Gn1iy2X%#Db)-F%$Oki65J2M`b;B<&q(4$Id5~(7<vG*ta1%nf`o$
zn)hq+U)PlIw#%wA&kk}9r*RN4V4QEKD5Lh|D~`kVw<J<=1Qu13rpga$%(S@Kadv8w
z;kFNwG9hXhV6x^a3a}w3mJ<(K{Y8=-ixn|iOdy9Plse7${g4QTu(p&ZZL;o_*p!W@
zWpFpsQ9(4g{FuCGi1ytQXk=F=ilyq6FIQ#E2(SEvoKTwiSzzK}zoQ>2UD_N5(L02F
z%^-~qH)AcXqYxVlfo8%!otLSL<Gi8-!*T33xh?}HYrEjv{;!**=RTF+`<+lS0Z*}l
z`ugi?j~n79M1@LW_5Ho!Kgcn+Mq*cP1kuMrVRp6y?WE%Q$5QU-ypy^n4W>C{rzbVI
z%jR{_!nA_+;Hcw!LifeW>s|$u_@l)<x>b*0UzcXpG!vQtf|Y&iu*F)~5djm@3-vk1
zl^AQygzmV&JR!8h(J>^@x%395-?#Ejw)w{Mot<})Ai+Bsg_77H^JL?x@bvjIBdmV}
zy~ExdO{OVJf6&Q0h6LJFar)PCwzrOa-Fbp--WzUl6f6&%cwoNtv!%}a{pdiG&Kkd>
zJ^1_0DD=P}m_!A0*T_DcM25NFyth0|8So308E_r83Xv0*7KDE)R6(MmD91KxH4X10
zZ<&h}L*IX504sO`_=Q&3w^<WLVXldlIwA(U9!wdkjX)<P$Aq~HgD@*phrh@WbJh<g
zooOCg*S`W_3(=f3&b(`8%Q=W7#o7hBY?sS43XSL&k=E)xPMOtl%sHUzH~wuaf6ij}
zP1cQF^#<GH*A<j~5q>42sv^@xEGNdU>aGQF%m4zyrZMeWF1`<S<xZs*L4vfoqNgX_
zwGtPszTHx1Z+EcRrH7VmX5Bi~O?I>F?4rMR5T>9NA|;G{#S^T6PRyNvpcZK*Yd`Gn
z%P@yD%I!+@V~Y3v%T57lg>0<9I}BZa)Gmpj6{;qTJ!8xwy0g@b$7S;XeAfX>(X#X{
z(n?`Og%;i-a3{nkc5hWLg4RAmizcjnMzc238cdD$IUOC`kUjlCH$mpFuq?nbu?Eu(
zr{FsNB~!nRJ=)lgP0)JwpvR`tAM{<FTE0xc9IQQ_=JvZm4E|&Mj{Fs{5j0`ic_6?H
z<#m`@q%WB>V{MI$cfticK;PB6nq6-15!_7mbseV{2VsR4m!bc=(@YQHnl{pX@ID=e
zl;!$jQd9<EJvle#O|@G$d`ze)ti2pIL%-o}HNFq+2VXH~6OM-ni#rs_ak8lw>k&5d
zy8pnvRFNqrw<*T1{Y?;lb`T!SO`@B|<}_2h2F4P+uMt=d!W8B%`zq0{Y&}l@9ZW~}
zbi^*P^jjLr9hzV}mCj7RZp&>Mz77&|x?2{dE&8tXW{oeBEynKEuC-u$U)!tp4X$Lg
z73b)6H(B3p?zzqpT$M}4kF5y@?=5(|P`EublU-r7WR*kMNQkyGFa19jx(P9b4{=Y+
z@Huuja0cm#e@gLrka7~JR6SbM285~6zSFQxXpFctIZ&ffwxIV2H<EPH^{2F7SM@J}
z6(KKxy~J|q!G?V9wboQt(vp%(s6*H=p0^32O4NAvk3JAm@q=tItShR}S3^4m#cAJ1
z+j)+(4>txhT*lr@6BYV~+rr#bJWX~}5D9zBuJ(dWKG#gc^M>Lf0Qw)>-OJ4@DQ!U0
zOxoJ=*pXeTZd=G-Zyb+lToRr{64ttB08eOF`@RvMa?Lf<ffM>BMPX#GW=%{jLs8UP
z2XJi@edHI|CwXbZsWu`)Kk9D`Uq~d`mZ3f@Lv#A40BpSod5SvWgLu@mi=jsCM6d|-
zNciB>QLs_`WanT-@9!=Oq-&R40*?+(reGY74{v7E;?rj&ccQ8B8E>Z*ZG>y+?(MUE
zGn!GIE#i#lZ$yxmT4TEl(ml>IZ9IY465`(8`!Xcl0u1qzHw_K~fm|gsWkxWPLQOV#
zNSJKEKSXKf84;)VY}B=JG|A`V2{TC(^odhs!7TVx5LIzH4D06v4xd=2eJ(`;`w{Xq
z+}jemT~zG|9TM<jI5wL&-|~VxMRHijSG>!3krx=<YbK|3yw3RRl0kv>t9bcFcL-_K
zElB5FJgA)E<DTPUVB@}FSf?&iw}7rAkBVcn2`lEV8PS}Gamc|7s$h+jjBf2mSoubI
zj4PKNS}MSyuF;TB?Znle-*g#a*U&Y2&E&_cA3z9qIhiOlwW#n^)It@!=qTarvwIAI
z=*gr@z%pi>olR)Mul)|bOQE7G(r>i;v|>O)(v0y}^!4{5C<vPq?{cCNxcM~IY2%e6
zr0r%7$0cFnHboGAI$iLhA{=EWImm=K$h>4GRZ*hrDaPzV=6Vi*a-r}aMwKZo>5Bwa
zB+VML-i&opa&b>C>`-4W7z<m@(xW~3`Q(ue=f0nf_=egfP2a#h*R`q2X!AR)Xe83w
zhx)Z8=<IOW+OK1A6~WPgat%+g*lFKh7>?IXNSz$hwsw~EMkgc2^Nl)Un!?+^_4*W}
z)590|`2Z6sE3o@_v7Tdr`b1>(rCW|Z+;eY{PngmS`Rq0BfbiUFGAk2+wLkrqqvp+M
zsmnWFYcby3?d(iESDzu|LmroN{kWAw2PwhTf*>}87^mN*WO4BoOTE+Hsep;p>GYm5
z-peO6ZOvZPwQU`rxLUq()MPWIA7hOt$iU_&xOfEb6>Hs?xCf|64|B(A|F3Q9vl2mN
z#jkp%u8NJi>ez{*q|MK=s#)0Ls&cVbaNm^$^Io4zC&PX=%;nTrE*i7jiU;rv!Nnve
z^%(XuCY*y~IiwVHiv<Mtk{Y@~!w87{_MtiF_W@-pb>w#`v?~#^-$8*%Ue7v*u+Ijp
zbvJC{9idsjCpGabO8$hpjfiM{-{O$`MFe`L*e5RfS;PEn!RfOtQGT=Fk#W|Ca$7~d
zP@jAc@<ZzGl1leXtjg7}jWI~t$FU%>#uCxX5@!YXu);wr$u`ncePOuB(Mx-iO!Fb_
zfxjwka<Xt?z{slM&qNkR75WMXv52)uwYmp6CJ*6G8O7`jt*gkJTV2|cH3Atd*qQex
zUoW?QJvE`L`<q@lx6R9NDd8@;fvO+GN)`m&P6CiA=fNT=Zcq)km_3KrwEZG@pk=6r
zIGYD|&Lox;z;{(|@u*Pz{Eu%>@ILaRwRY=i{nJYHY?U)_%bcbn61%+G+S&c*L>G}q
zBmaFY?JXJ-^FFVlk6UT1uds%2I2B~Zg91bH{!KXinXwN)A9I7KNFsu{L>%k56%<Rg
zpoYB0OjrOS%wTAwI$~uO5pUds+-#T<0k}y*c%YZKBAe2IDGg(M>~B5Q6hsRhl-fv6
z;a1qYI_cZ*b)08<Gb3=^3>YU&x)SOKO^A#^nc0~gdNA#<&<DKG;N7Ixa2~!A%-?hT
zGe)O&pe>%`H3nxgKE2Jxw!q!Ggr37Cz&pN^_(LV^SO&l#L4H7PO>+i!eM104Qj=hV
z>c|4;qq^JXkvlv@tM|t&SkQb-L7ZR^3&e=eUc(07>Vtb*5)JSP@}0r{QQg<I!^?Er
zHD5N0ntf4HX<FBiW6ctkAy}tOGXBVjed5Cs53bP*sfabEfBn6hb`4y^xU&S-NtUv3
zUDf@YLP`tF6wk4<+$af-mV(8&AlP*d2U_3{$y~IX^8kutU{YcCnI3<j=bszk3i84k
zg>=jDV2*lM;engn2e|-~TLkcic|}pjipykRMS&k5P-fy@tor5mG*eq}<`AzvBf=cL
z>jCfE0?ROc5XXUb5HFLI>u~Srqd&LNL3SH_$KsaEjf#JZF_Xvhrx2}zu)_x!n32?}
zQKpTRJYo}+6a>=E;lnA;#1fFjU`n<qVH(hm(Mi8C^~R_cAk9?}yOl<nN}3js>lLJ>
zT#*xPu4+!KFkNHUMmrY#p8iR25kFUKh<9!&o_-+;-$<e^p4p6NqPEI8RlA6v{CIfi
zIjjbbT>WyGeo7fyHYHpprnDtoSR4`75H;@zc^@oUV0BW+q>_`XqUcSPhcB-ZqV}8P
z39E=WI3pCLSR-)@3Yax;$PuFUvF|6yV!D!1mq6*T0W+^6F%NhX_H#3+0?|~UVLpTV
znvmottWlpc9h6NFBvZOOmaO+muD)-&HZeVH;;JD6vama4czDgPzC*|BBZUOrOsPG$
zeVtv`VH38R?gN|PJf#tvVEu~NIt-{%1}`}5HfR6>lL4dA3}s4oyLPNj_mxVngBf(8
zLzK(JG?1#l6}rg}>PY<PuP?(9MhE!dIgqKpB^8`iusu;E(30DwQJhq0{(b&rKG2eo
zxG!Q7z5WE@!uNHF-qxtc9Tp7-=(HD{{S=o3+h#18V9&homnE>*Kh-5EOFi(kgkR4z
z+)|Mr$)eaG+ROwuKtuH5-gqW6E~22EY?X376Cj-UlyXbdfV`dIqz(_71a5{oOFw=;
zfIAg87J^TiFFFDqw8W;U@9Sspz<r>^W)%zB0zr+86*YI7SyD-`WOe{26?R@&iNk;v
z&`O15EasGk9vJdog%w7cMa4}p#yt;)7HbvCOue#53Y0K}p~RQD{sZ0NqYfC$ZRX`~
zRdXLc(3O5&eGAt#7+0RvD4QWT*WXX}4QB^Pr$zj4<)IQ|<lVfIjUKs#+q&Y{!o=Sf
ze$DGfNxUx*Dd2^w7tbf1)T=9sb?YV!o4Vd-KZ%TcYUmK`3W?h|YUIUJSH^RR)L3vV
z2+}nzC!1RayF2_rU1Pjh{Gc`wn>B!xo#zTm1b7tQcrY+2KH-{|Q;Ys!ta-i&n}|j<
zd`EE>fr0A*S_(TQthP&=je(%mm<Nm43%%0cmE<7ZBrb`6Qb=HP)J}?g62AzOjYOoS
zl@V~qNJ&dKSHN9z5I?amuFvN#DwUU@OprI|;w$E%QQTV=k&7F0t|fB)b#Qd9_PZ@M
z5`37emOP5Q2%a<LcX3#JB(!|D@%{j79+W28K3-w&E7$2YLvc46@~00Ua9uSTs-7)&
zggIMC`?G=5js`=AWHqghaNeQEcz4CVEnM7@mp{uZrIAO~+^;5k_|BNX8%L)-RW_yc
zYZfSLX}U}iID(LR7>PpHVt0L@NBp^^;e|}I#<*u0x|`50u{8~L7rKTlu({ujg0ZrO
zF>-5JawapB0~>508}%56yVmvkwd@qzjBHYa_e@@-h;uiV<MfIQZ>`!=tT!Q~K`P*%
z(gRQx2eq)dQ+^rzc++4d>#TZ)x@-^aEZ3VU=nG+?;X?{qlTl+vufw2$L}`|BnWhIC
z>Vb-tg!zGK^V^-(;bx0$BQo9<a%<U-Vu(FtP(6FQW~Smj_P8k_peonY--TyoMr;E)
zYLgc(6s!->r;|S7#Q<TU!9v(XOi-doJ5R`ja6?W4%Ujvkas-(h(bvm`LA<d+L+U}4
z6=pj>drKVK&-mPd3dw}+J7*A#SN!+v0}_J;C*zK>BJA>+hfFBxv5-b==Cbw!m*gb6
z@J>Ocu!wAcJ)!UOo>t`!$mPHq1aiv`hCQ=WF{6!-%A^W}WkQ&WK%(U(@FmFu@g>;z
z$r$ta(m)Fmk@C~#=<7pB<4)6d=u!JPjMGdQGDTciF(TG*Aa3o#2kfQ|+_t|%(2SKx
z)!OUmQ)bqHMhc+HD~`q48Ysk*SJt9qk1B|%mg)J`Qqfdlqc8Mz|EdSmn01f~N(~<x
z!1x3wYBFcrFzRzbe7LTq6qkA9l|hNHe$K=VX6<uHCLTyX^sa7P&c4zh)qFKw%}U()
zT{T+oh$oC3zXzTz#R;0MvfTasKz!7aio1D|2;`D;%()T6OJgT9Fs%`MTT7ygVIhl-
z0rJ!xrj+5J%qa^GD`kp(3Dn{K|FHIs!Lqeow&2<4Y}>YN+qP}nwr$(CZQHhOpN-z{
zS9Lq8ZuD2(9dRR`%vgVO&5?7ioH@{mygK@j5ToQa8}tC46S$Z5%w;P_p{ZFZS3#_i
z<J-v3Ag}?(eE7cGFFL&3GAp^7+B-~D|96Zvm^#elKt7@a@W&NG8+B}p`M86c08Htq
zgF40EzO|ZkSv^;!`$AlQohi;0f2<HG_Mu0dw{H8lS!aC3%Rr6jtvmMv#`bRmvt|b7
z5wY79&bnmUJ0_3^uC(^XcoX`k&%<Z3<;Gp~u|A;0M5JLNBUPl7B&s44rT7=3M@@+t
zW%u994#iKKWDk6~oba~PJcD~ph&g8BuW`FOvaCk04E{9@>pR4+?iHUjfIG9mEc73U
zeJo9V#=$tmt`ZoVleb=gJN>*606j*!6jgc_b;3&;EDLdQ#gy|5P2TPlo5OZY+A=K~
z@ax0;>(W35SFy_GXJtUg5(aqSX^Sll65t)J`7H~KWb)Vz>d$>Q(8%KsF%7w~1@Bnk
zigGn-Z3*OaUJ(nr+*efW92DH5O6R#X`yqMb=%Xs<dX@9P7LtThs~Gz{i2$L*88XW%
zgR;ieYBktEu2rUkKoTEz@s2!MD=h;_5+`<nj_h5P+TghrtNmk=EM|)}Bhu};ipg1Y
z<Ln`%m7Dd`>?x*|oA>aIIH*;e_szzsE9I^Qd+ISVk~;2wA8~i`x8bmmdE9Cr@om;L
z?&%%jd1|ux&XC50{yw6k<71;FCX)$=KO&<Oa8sUC%0_@lL>Zz#BC3;jQ+rKR88km)
zvJ1X%2c_^qI3cwOdq{E_BpUD7w?F!GXK^H8S9KrOD)y$hS?)>fOr8_rkw`PBeI#+0
zd>`d1@}}%r=t<Ho-;J_E#zSg-L}HX0E}mzuFkInWB)F8sRxa?~s$9R3XA6ZbW4$DO
zf+2J~1>X7Vvo28n4-~e4L)nVdT|>CLL>p8FC^-R4sR2}`ev=ljS-2$vhaUYj?n+fe
z3@CYtw$>)#%7J7huKOWW(F`D%8g>%yLIF0iiYn&mIAo?22S3qP@-8Q59OkIuoQUzm
zGpkR<!;bRQ<S!hSE$(BrZl@RS)(UyH=$MR-7Cm=wWr|HMt6A%_DVXtB&`G$;*gl}%
zk-6mTimGm?$HIAsf=M*i%3rqo4scv+kDQ`2pt~I?zDbXp*LGV3TFjg0c3T$wD;}CJ
zX|qY#E1$%Uej`mIfy-{19#W-!2kyOr<y_SuQl@DmOXmC!T-9F0irk}T-B|8!z*-Y}
z`9Q?3nG|UEtRgV>>od(c9_vkU<)4-%$SP6F)X1y%4=4Bb<miAY3hMypytIpyqp~1;
z$?T}h71ph?Sl}vUYqkOGkk$$gyV6dqoVnN#G35liWK1a9@(;UGOMh<4fo{{-;k)HT
z@?=E}+S!3YD%4U7kc9%wkcDoBS_2a|GV1q=4DmBHj^%u@CVv-8x+X?mvwsiGuqRWM
z*g5Op2Y!6c2H)07zbh6)(OYZ?>V4&Y*6Q%at;;x7cS=2C7iJqj?Zu!_pss8I!&n73
zeQ?VfM&$K{dX|e)hRx*&KQ*vDEiKFP^IV<Yaj6j=dN)f&Xx#35mz&wS`Ws1GvdgF!
zKhzqrUoLm{s`wd?>MB$;@dJiLMD@1V{#yB^!~A<waz@?Vd9EQlJLND^+R6^%!_c4I
z@0*b?pf^TxmTxzMcr~IIMT$14mqd~_srL_YYkcotNn1ca4k_A<UMg{aQTu(t`&;8v
z6ogL1=Ev(8N(ZiX7-;NE!FU)EqO(iM_}BqOe7+-C5qxo+We$<lxX`c`-r&qLy6RMd
zC8>xo>j{||kHku5R?LQ1E?Hh=AI`#3qS*4}emZls)+IDreyR|=bIJNNHCin$0OPU-
zy=-=n4|Af$3Wq&SCvHn+lwPXyFx!}R(C4y<Jv=9{_NAgzxr$m*E-;BjBh@nM5pt)W
zXD}800C)Oo6`8(>MTI*Rb0%wfi(BfYkeBkN*V1<M9Ql=94|6W>Qs&(lbJ^T=Qbi_0
z`=uxSO84f}{N!->C(pJ7Y1|Yhn2*-T=NKrKJ||*8YdYAJ1Mqd4u0hwf4#aI1<@a>_
z;sbHcG-s7^R%n?x51M^JoIETS@+_pOgC*4qi2!Mk@STM-4r03QOW>#XR)R$7#jX3R
zqPzToSDwcHgR2o6DSGbVuz>F-OFR0c;jzVWHuqlVQ>I=vI}THGh|+PbD^u&3g0pz}
zT>>eo#CiP)`R>9*`d&7-ABn8HRI4*cA)CY`nz1wUz|Fq#Xw3BPfVxF6yG1ZRn}AKa
z9!Hi-R)NKJ{6Zm&ZFU=$JP2zSlk|w03zTj0C<~$Ha=FLYC-<+j^8ngVN)Ohy^3}qi
z<wEx5z4OviB#FiHd0-jM<?OQouzX~&eD8Gi4>3|QF*2?dsG<eCC?T^*A+ZUSuy2xU
zYmw6=R(^GO{wFa|vN6!E1tL6<Z<b9$LhK^u@Z(m2v|_}vw`!6z*Y`!^QLNS=o)u24
zCsH56n0TAx!oRy|0f$VB_)BM``2-sc$FbTd6#Zw0A<5Y{?$eeFne2M7A0_%8<APBz
zbTb@T8@g7-T{%@y+Nq^a3M>KHc}y~k_07Am;#MLire1qP7v2!Se|);HktM@U4vqx5
zQBRUCtN}!Vllf~}_T_Y>1i60IP#u`P^j!>*aaIu|%wMpCE7UjlhB4YvtL!*JuK{GV
zr_Ku6-}t^$7l+GbbpILOhx<;BT)*RhH~Lf-DeRG1q;E`3cHzS&doX|{XJdI%5LMs_
z;66X0mH&hvF4gICeZojB^oA%pcag33hDkbysa5=hORo3^sCh?NEaegKWnN;(=wD+7
zKv{KMHI?w2u!3$~O9roMX8fVf1-e+G-3DEuz78+rd|6HS=U4^Et^yb6VfYhR4%kLg
zflyevwe|{cY#;X-Z;*1%Fr&AuhTl48ye&Bq8Aa*zYD4P(XtcNW)(8YlWSb-5!Qlvb
zcbU(;k?gly^i$UrQw5E8D6?8q>`$8*m!X*wooW(MeCaBXTceKxF7~)~FU0q;w}EZX
z4_SADU&ul}eYbJoVffsA0RNbFx9l0XzYIyx4Q2mEbA@^imQ019up>3p=T^)e$@Xt3
z{RAwZ$#Ws<Iyt~-^}TKVq+MzWuQknoxr)VG#>olmIP<!@OZ)zp)KU>z8ebgu$4W^2
zf8r*v{2R58lC_z&nWLGW<qvD#@P8Sy{cqM1N>(ZuLWthMfbjkC`rxJ(8YqMC@$sS+
zp@F$T=y|~J{CPph8&dRO3k_>SUSvx;`aXO;%_pRd&zLbdoZhz`UzktR#((g@OnWA$
zH`9KSopL;GE^&Omf0CWR5c^ZZa&gwIGlwk$gK6+z;Z+1u6C&O~+hd{h@FFeX90@i8
zFuTwD@RJX1xdLkjMklh2*eU~U2?8@9y_j19i)$Pvkc;b@8+&`J86KxIg0D=28>-K!
zZ$9?sZf$(5x-^TU%4@Ck6z%;lh%&BEa4cjR8!te)vQU~6^iH*rkOUkwBN!qXt!5UN
z+l>|HE24#X)70AMnFt{FCg<N=yG@lBkQORWIlBzfqSb6C&Wx-#)Pqif1{e%3Ap6`J
z1W!xu`*$g<n|iA_)cHsxC~c6*(4+M8n`|K2H~dSr%^<prMOO&@Ub9m?c~-KK-=YQF
zVVh)|j15rVWy~Q<4yN2i+XF<@yjm1YnAbf!tGMCwYx=W}3g$=l4XXBaEa|Wb+RE1?
zh7rI!92J7)8K2l%G>@10E+G>Fm#7aDZs44C`jFhs{5FInUR4RI`Wx@{PbnvM4Y4;Y
zokQV*zkoA|LNwA1)Eie6%paYLkKQv42dmN{CY(zrS<s5Va=xxc1(l^%$nP^_-7vZ9
z!sYMT1?E~RI?}7&tqRpYG*nbO3*G%T$dsZc<mIVWYz31lgcg=0%JtaI!xS2o$X%UW
zG!R=pA<n5=T(PVui*|oold(p;AQj%(fwmx3?n4h8wa66uGszxxc|;~I!an&%gBhzs
z?N$4Gtb*z(^m%d0)&|*>a;M{wwWKHl!Q6@Z5obwvI#tkTatU^6Db(mW;BKc2uBrS9
zdCOsO%0fA^d#i2}UZM=EU#Y97CmkC}vNiY?GR#@liTrZim=DA58iGak##>OZEA+tt
z=Ug@~8ZpyoP<d7G2OS(K%?=1|VLg8l-lGd5(owTA3Bg#@I=C8S%`@tcR%6f$^=A5f
z<T=lU$LPf^<?LMY2p!8Wcw)2h!p>ss@r5x}9IF>?hJGgxL){P&@&63$mAE;CjgkX2
z{Yd=M&B+5%KrLR<z2f8^1l^tD?ib=uC@p9tk;8c{ofEuA@`q<RI{-$vWysYbagVd=
zjl$j)_S&|a0ePT0fx$;BQ2Q;mb6^w$04x0w+DqZs%^I3F(Lm$QZO*E<BLZ~-zcw6q
z|CCB-d>?ratc4NA75EHiJ>0(JtF(fL-?4sj&!Oiy&+-Dig;6)k?S9{9xzB_coOHKx
zYUCQsDwPk}v%lzgyU7svXYC}E(7?;X^~CyKQr0{B`@zH>rVa(9916ifH_LO2pa-My
znRv)2=fhgg8+)I;snqZp%nhgLLnfA-uRH>=I#!B2`++gZ(uA}k0nyLjterz>62@uT
zjeX_mEz@#goAQC?AJP;I#r6{8kE-YKe^mASyKn_1YYS@|7i(cNBTGXCqyJk79u+AC
z4Il>_Sb-LdM+X5Ct9xNIjZ0hy3t{K`W@a$_pne?Ep~mVf5Juvx+&-^VR`}PW`x@pK
zKrpo?3U=Rym;y28aXQ#R7aLkz8m&pzb*nbw920(|GVz@J5%GqtSK{K3FRjdBC4HP^
zLwlmU#3ttA%r_;jFRdoVz>&O&(hySLw`@|hWO1`ypO{qY7r+Av@>0Lcx^nFl-$-#l
z^;5Uj%=T=_TNleew;+RHD7yTo^IrbE{=Kk??%($2|9%Vpn{#^CkG2VM#qHatBFVT3
z9WOSPSJb!ncVQCmK5a9cE^G-eKj!brJp;n1!l0$<PLLEjzrpB(3NSN=)WN!q)nX@2
zkdfwJ2f>WiTg+1PgJ)NaX7hz&2gPCwf9oH-Y=jHAjP+K6&r7@>j;B0!UcRSax?Yl6
zbl&iP=*XowK(EC(e{X|>ZN?@r=0D8nSbT`5a{ki!_QclpB(C(_8z6tR1KR9wpnna=
z$a{(qd#VtBR6+X8#DIJ14D7t!{rQm9{?hLL6m{oG-sTw%$r-)Sp#R2^xK;R20P_yc
zk$9Lv_m=ZddqsizCa?UG(*Dv~{tOBJe%$N%NDcT-e))#${-z-Ok{Q_WX552va~qMt
z-3L3oQvh%)B1^2pH)GTm<UT`^n7Ju|pFe6+)Fu(Fk#tA+R2542P?SdEH?Q|BT`UzZ
zAVZgWl54`bVw4iL@KmIjIrC2EV<=K7nX}|!mg}m_B$(1PJ05ERK4TI`h%FXNH#R$#
zXy8ppHd8NBBb~xGL$+uXEGP=h_sc~)kAWL!hd~XAOcvxsH9w;lUI!iG@DI=<$PP^p
z?0=$<%5@1GFm{w04IPryUd(DYZF@qe?+>8D+G}Mq72fzs!Wf_mh#UQhj719*-jCZJ
z<eiwl?Xx|!RfXHq8@^B~u_9uiGMKk}YA2%Gv=CMsgbv=1G<QVcvycH4_`J8XyFR?Q
z5}GVDb)&_MtRX~XWW2_AT@iejn&YLlRM+%~+=h)wbP;}!oTVl}PjvB^#lQitKYei6
z&m3%^F-N!4-kG0GJ&~_+k=(53TaXVZ@GXMEYKxOt@tfg<j~oiv<KtJrX4dEHZ`K1x
zqU`V71dK2GM@cjU=3uXxOM$ErWy)z9m};Oy3U7?0+<?BE{s(yB9CTz~xOGMoC+ry$
zYtP1g5%J*uW0y{WiVg}`gVRzNWa?>dls2yfkL39+y=)e8q(J1YZQ5PA7+9nW{n#yA
zmrKunek8gTjcFfFhyWf3eoMK?9b3ZKV@H}Le+BpYBiXx>bZ2EYZsfl6iBZ=styDEU
za<6sDRZl=9`Z`naIu=g6*4R@(c#`<wD0g*&K-i~;OWt%)RU=UBvf|9mTH}3{N%lnA
z1tmdnVFwOdY|v$p4GZ$5s>8pv4?qJI5k9c3jZW{Pnq%H1dN3f4)}$KjptyM-FLr1%
z%~Y-IOErIGjC<=^zZoYgqcbo;V*59|hJDyYdNeHt`)ZHU_Fw$G=fPfIG^ayzhkYtk
zv$Ioa?3ZT@y8u}irqX@yzv~Y`muoB1svES^f4Nj!=99oLI%nztZN$etEv95`Sy5T6
z5TvJm`$8#m!bT47<C9e27suyY*EEq;+v!|_dvC?HqD9x~w`2r#`Uu82)8h@9#HW3c
zZA|Y=2iVe&<c@);W+SsYD}{7NPogyZJ<9n8$N%$ZGkB6#k4K?3`qz!@uNs1YQID5F
zPPSxV11#yb*&1^G=c6$L4gd8&?H(|xUU$q<*2I{d(x4ras*|XUM#A>?Z1dz({Qc#g
z^pPBOT`R-xYq8Yv#&mnl7JC8LlIqp4xYrcNCR3-^4=`HauP!E?Z(7%d*NfJp^6?~7
z$7&<rJ@-`{qgFR%!uBO=j!u0E#($%_xxZw0*2ndZci_YX-*Dj)={@Y#hgEU=N(=y9
zE<pExF^m&Tox0*cpVHD57QlS6N6%8Rdn3i1wqm)QHb(xWO|O^%-NiN1o$xD^XqY8M
zD>SN$K-y)k+liGh?RvcgV}_bGDwjAlW&`Cz4+j=V${unAy<Gg5lP{PtIGryFX)vBI
zn^9OTn082W1WLeY6DhW03OTNm<q#Vw&az+SZ?SI$t2l8+ihwpG6bJGj=fbIDVM#(h
z;Ej`QgEl;;&xvZ$Dx*XXUPQ7h0W6n22xK`yYT@3#oU%s6oHwRCpEc%K;~doFJ_$-C
z?43D+Y?aMvv7<%)$r(OCe>z_jsT5I22S8sm6HU*JW#a{L0-viD*2}^lytpAo#uu(U
z4HUH(RrF4cHXY>0Dew@q%b7i6-I7pE^a0=~o?g69qP5bL+CbQIwOy5bZ?*0)dvvfb
z#n>f}ePYO_KHnFRd$7%dtCq-DUV+63Clqu!#$!-tF^r5%-4ibAM_})Ykv5jUGzxbT
zW;Dl~ioi$UD1!St2O_BSGWUtj#cS%KFmbLujV-LRNhEl|k#Md^fiYSnIh+f6i#PYJ
zhBdSAFz>;S%SqZ*QsgE!(v@tZlX&dUcv9phHv;zTdF{nFVt1A`xaG+#we!j39!g6y
zve-`&)>&f+`gFj#GRifQEb1wuZ%7Dlq?cgH%`@`1pzbfaR8~w!n{Z`(NB(316$&4j
z-=xrNE?LP$@Fe<Z5#|0Q8Z!)s{AMalXQ8I2igXISn-*JP!>oUu(*S|pbj(p2im2y1
z`bvK~s7WFB-%ibBP#BT-fIsKt!e=GbcvtXvpYnVKAz-+h@!WJIn-Cj^%JU}R%0o7m
zIqHOe7w0u?YUXd)JkPz&LsFTa&<EQsD5TJK&-nhTi({6|eYTf#IwUS}8V)w!>cz%n
z=sl6@TiGzjfREXFrZ{N~I5~sB+@g5o(ywg{i(@Mb)XnYKY{7+{W^892Nxb9lwZcJ;
zAV!L_j2xHu@MZ<uIKQPE;4YrX&(!+A&g~GOurX{RUqTBXu{*573e@?#8jlCHZd%t}
z6RYMJHak72Q5v$9rcleBZw=~CjK1%}HRud~oU>1Q%Ox0f=z`>A5g9663y-@wm7rlq
z!mz2psMWOHcYlkutYl`AOG__Q{y~~Q5QtI>98=vgrqB~$j7N<#i1<4<T4g_3g1c?B
zC9tmftUXb20!iaC+2tx1-*!|)X^Mn%uwBm>kzMURb$s4%fP5m@ztNXo2vHGCnW=eA
zHt`-j*&UE2Ea}z^*O2LzqA6!=98wsUoo9MjTWC^r0}o7_z5GWl#+Uk+@}a||vzpFc
zeR>e=K&|8bsx@Zwd|GNzde(H3PKdB3e#@a64H%z_yLiZy3M*GfDE$NZTr80|19JnV
zQ9=Z&YUuCF11kp}9xi+4{jaQFFCK3rA|y*E4v0J`wlOmLoCml)O}7aynux&D0}uY`
z$otKrz-H*dZ8aJQu)={k-fR<V5h{0<Z_In};Ln*ME({1{keLpplDe$9Y`1for;Ias
z#|H0mLQ@1Fv>EFboEawuGP^{GUD566-sUp>BsC|$@A13jUWMg4JB}g2&oE(LEvR!3
z@f~5h1Lv!GrzSYBeiL^_<{z)*O@trIC0;2DV(Lbq0+#}zH|0kn>(f*5aZw5V*$Vu%
z<<G1hth5*m)rgs42IT(gOR{@`s*7Qa>n9)?mbWe*x2?Bae;Pj%(9C-iqB3O;g_t=a
z=(pPwDi%1h+ta)Bs-~#PA0#?alW@jK&hh7w{zK}3wWKbeH;Xi%inPR9ae<lfp3fd2
zhhXGZ@$LroS}xeM>5h@VVMNsY0a7C-|6DV@>ZNrxz3{mO#b#ITP1y>}0YG867vf${
z5{u*%rR)q^*vkZd&OGE43}o&%MqJ8M9CRs<S=Ea6MH~cx$CdEL+xXh%Qe`u*Uurgz
zD&zI=Q71g(pfhy+A8g$t9Laq3Yh3oT(6&Kg#l++BWJx$zGr}<bI03(zFXo_=HEiv^
zl|g>4C}(fUj!^V|p+)%ibQ=BkR$gBYhR`hM<K*6th|+}XO1a77FQ|DMETPZqh8s@_
zJyOy5V^Rr+$gW-N$`S-{3EvTnH5G2(zezle`vI=JZrj2mJS_VH<2cxjbs7&i`)`CT
z;LOhm&Y;W=u1VVcnOsK>GX~p7yi=s;*aL&SP#M}m3u?<QQVoFmxLX=LqwMa#5Kj3N
z=L9GxLfG=9Ikv|eu_ULQCq-}MkmLe&`a-NIi=&E&u^<deyL=F%#ww|nGWC{o^p|5C
zay^N|jG_kWhxOC~Vr*qpvxh~jk_E`Uj6-YS=MYL!XP5zCG-MyLgIadm8ZBSchHnuK
zT!rsy>Q9YACG8`O96qfyX0I9fl#nYCx0z(}72TST4i4N5`FG*dSs$1qzBf)+YmQNH
z)z}>5CVR6@baPB}X==Z_Lf0PQkLO5{9UiL-BTn;G;t`jxeqB5Nysw_F+|qf2KOPxi
z^tuKgC?;bw=^RVms>?4*)|P2-ERHBWdiEEy8d4ajFOVWvmU=}FbR>6BnaDaOfA6?a
zh*gtIi{;kb3*RzLN9%|XdHqp1%ZSDdN)44ECy20#7GsQhat?O$7C%DjH~;cNkJ0!r
zBaWd{$~0DLu0Ay0YcOB(s{K0L;QXRG+F}2Cx}_QJ5!7u*!iX4T=$eV@qQ)MIFI>S8
zsY}#h^PqlUmZ>@JbXg#^R@SNL%1jcmgYcoYJ*L4B%1H0|s3&mdhyZd=82VyXKjTp4
z+Zn2Q<Z_&UsSEP<^?DT8l;+{5`9#Hg2aBH5V3p<>0((cpF3vfSdk>PIgGVk-VF{Y4
z)hE=;a#nOyFN;!?Nj%z1iy;*u6_wi{<J8Nz0>egVn9|p%It8b_PwL2k5Vo_})l_*n
zs+KU_QRpsy<6PEOUQQhZ=n&_kNQ)&}wxovOwP{ej$qgitdc0j5JKzf{`IUrCQ_dL#
zeaWA=-b?=aLg<~fL7r%P!-Dv!7ERi4tHzmRc%=mXynt3qqpO9ydg0)ERmPiVLO)P#
zxT*x{0X~pDUR#0o+~@-KHw|*t#A@~L8(HlH+H<htY8l!bLyFy$fhJUB1sz%M1eWws
z<S9#9yY64AAgZ<gpIOX26SL|^mqOKPCscJJhKS6mGVzODS-ZcOOX{*VBgO5{{!rFs
z9dtCBW_WLduU%vBjoA^u72JghU9m^&;r-^1TjcyAYH=HMv6`zikS!arLpI`f#`M^w
z+t<0&z?&P!iMj@h5CHHxQ?vjQQudJ;JE{FE(%MI%3p7pP*)C%DuCRxZdf&cULeg^@
z#jN*S)N``qdPc)+b0$YZ^AQcrTBA;r6^dzjmN&pwbDHvX^|QKk!=%PlSLdWfn@7{i
z-3z&-+?RIHI-}1HaE=McI49TT0SDbs!;j<cR_W7bFdBA6{N||hOP-|I&Cz}h?^{R8
zC!fj}H5$pTD17awmOIS`8Hev&Vx+;C<F=H}kH~N-M@eT!lTQc5a^1tq>rGIvU^Q8q
zEAg<2JEVOk@7lrec8y+ChShz6RogM4m?2B&Qp@#<qSbH(Wy)FX;;vX^V6ISV&0sF8
zHQnM%#Y%AuB>3v==}j@^&j70Ljvjr<tx(1!yNArmZ>h|3=T?OJ!UfDTM$P7;g;sRw
zIBB?Vt&CTCZ})n$>0&D-y|MHL(-QfQ`UEYAB%@D#FR(;xm-6J#PiQ3`g{I3Jlfj>B
z&+?zEk(;7*ox2Y&6{M?4Euop#@=^S+b}3Ja7`KLw1}QGxDKYz#iD(X=F}sr$c>(#m
zw?8Zjg&~JXl5zEOWZ^!i<;hxY6-Q+hrAINFyTvA(6un;LP}g9dKxrVCTWo_7{tqM7
z_1noEl_u4&L^@6hOkOAL{*@;4`G?w`Q$ov{_J3%&uggoh+Nikq+gT6L2fXgYR8~D4
z)Gh~BvL^i0pM<njVk?Uho3KB^@?W4(W68Hhkd%O~_q%L-Jp#;ODrINVToGQ7kPLXX
zLi_Ud(}zNi`E2Nz?QVd%`z?3fCf`#2S(F?nMJbKL{`!US<4X1K7bX9GiT&RfCI4C)
z5&pMzNtW`K1A-Fb_ttiBp&po-I0X=5AikNn7*DS6(SWzCsThD2Su<%o@rL8Zl=YgW
zI3F+I$exghF(&2@0S?5@5mQ$el>Xp#I5MVtH{c*)<_m;9yJL+pV|BKX#$~4MCG&yf
z<YT&Ptmgack-=A4^ToelB;x7R=^$42)MFI_C0a3Vo~96hCK?~VkPi<FVcxDT6Lum)
z-%Wy2KpzcxLaZ*ba*(X^YPb}o=@e-^6{X}ZI(GYMA9CB_fN}s_K)OgNp>L^V)I5{#
ze1&oCRIZ>bF;m|(eDKkbHSYpU33>*#y)34Lq@Se8Op2#Qjas07O&2T+(JCjO>=*zT
z+Y(c+^m6Wie&9Sbe{5ua%x(=eI=Z3}A@sDalpUT4F>fOy>9~+T^!mCnf7mD>ugmii
zcth+Emf^5e?9LeoBL%6KD_f%1NDOjHB1{mDGuW~i$|^SAc1V#;Jg+>yJ}&kzB-fZN
zb8DdKL`7dwMnb-SxhW_0dL`TdR-c~{a7I+QS$Pl?tt**s4n4`p#)jbF*O8FnXS665
zhZ(MD*r<Ac=4Fx+QCTW|)8}Eo*Lk<@xB&4|qN=e2GZk_&YN01IhP!*PUL|F7a@zQE
zy?%u8kiI?n((Lv;|9EURv%Y-}zV%c({sET4+*)ZME;^BAe+6Wf#PmcIser+n_3w~m
zs8v$F;Xn*9umo8`Nj-J{@IpW+1bD~1Y0$IGSV+90Ktph{C^HsgqRbIYfhbb^OlBme
zO(WDf2sk1m@mAjm>rR?Icxs7Of0)fy@<bT4kK``&CHTFA0|ooYVlN4_w+_1~0LZ+1
zYD0?>*F}59OL)agopq(@6e4nbZHosEuJ&^I<M8S^0#zas6Uhq8c8oqC%m=kuE=)~v
z<e@rb&}$hBF|KM!)fxxpu&F-!4|_2uRR#8%#-pUI>4cxd^{>-4ozS&Es1hnE(;UxE
zh;ICO8#!n5OKXQ($*9z&IP1o?g!cX@ggD;<EL^|KVT8o=YfwSWRr1I#Ts#qoU}(WO
zsABr&*`hcTcE%>l75BS^=Gsf`LHHY%^^*mbKppQIMT|l$-$IHbLkwaeg&4JZ)<AKS
zB=5I|sTLly8w0v%ay{^BxYgrRcu1c!x4-yB<u%#ssevLk6jzW%BG+)Zh;7LAl*oe|
z{4Uk)t#aj_)q@<DBYb`S{0^YyjIa^Gp%R~mPcU|Wmfs0ld4s$X@V3HEzOw1F8ZgC>
zv2sFYas@aQ(S&`H)tQ5OHFe{oT5^SzM9)Hf`|P}pn({_6K#7r5o>6aoWgR5}p7560
zxQodzfb(ep*Ehb(BQ4N7?90Qh(_=5xV-efn7l9)YyC9f-V4h%&55VhtJkH&L*PxhP
z7Vhv9Pe`BJ1!a?q`mKgHcW9RMFju~ZXt(3%waGVe+G8ZTS2a=2^HhKwtc1DM##Ku%
z>CJem2NpOincCnz=Jb;^2+%V!b2IkydqKDQW*VhkL^1ii6vfLV0;%!!b?t6`8l5_o
zXkMM=<>z}8_qT{Hd&BpJ=4O@LSqj-pr34JW%BoxYNBh7p?f@A%ni9DYCCejp_E*R|
z4`?{+T}GC$9kt23ht}Z}+XS6KEN?KL`-#z83fJM9eHU*ipSz3K44*)s*OAE)o5MC^
z?+g^YrghDhyscw(qTtgny}$aEmXo?y2#YAjIJsf~-+{#s3X2ajrtCKC#g-n>X@yy<
zMtCl|Eq~hZV>Hv(p3o{O{5&IKdvFhFz}}q24!Mx;x8<2qvZGNJKalWzq()sp-!g>E
zy|J>G>-ASQTTcU%e1CX?J8+jTtHVCFz0A`C%<z}o5Y9Z%l#qY@;iv#Sa&&QEF9rO)
z6ycw7qf$X^CVL1lDqR3dCw;dXw1YotL=fIw)JV5ngSszBg;3sa>CdUonBJokpnFbu
z{+S8B+pH-yKf!b}Kf>#OKND#FKQ7PzH52|rf1Rb`;fkn&^gU(CoM0IYD=+E>h>qLX
z0Y(VOj|-*i281#ofSjLKYRNocygp^w&LP2%)YQ!VE^l77z8=23z6uUr1eHhC_{x7#
zF#lb*^#1zz!1J^q!xM3`nI>uMVsg5V<8iX>F!Q#x!*#OhaMS%f9dQECxVMrdduM0O
z-8V(j))tW=6I9y95r}S$-x?B<bG&Wh`rH7{JreIB&<gY7@ZjqYQgQ3%nFlU%2g{<P
zcxwyFa90G2-Is#oNfdZ-r-aQpK4k#jJ-jo5#M!q~<KPgPVPpFsWu1L^tg*>CG}Yqv
zSwaNZ;Y7uR%NK<noV=D8ZqlHx+?NVyWFRdAWr_yI08>A0e5K2oLSG=f9EkxY#qS`4
z&$XB?S&~3j<;0r6yzto;P~{P|5%m~~r)!YDM#`=QKMpg*(5@$5de%neO}d@V@T6!F
zlg(sSO<znB)tWW|d!Fxq*0juu#1db{Wk#^plnt2}@LtMXYabLyq#_rCUYxv0PaP5M
z47Q+<9>)m6VnOC5%EGk%Hyj_bCd!J_(wr{gSyv8}nBi=*HgJgu4aHRmH?d|3YD<#_
z4>tNyoOB}*JNHxOW)8|q#JW^x;xg=|L{xqwL3&W3>yR6Jqo3YEc19c&Z9NpBL}^d-
z49~1_Ds<HEmPzpbTO%Jo4x4*3OAKbtIX+!2QDUMxh<#6rAXYn0_R`@u(ck<=b4qx3
zVg)8WCyh5lzb!{44i{y%VyvrVGb}Lo`-h2i)0bXKya~nrjqxz!JjdkF{WR-!tTxwh
zdt>F*ri`r57BjF0iuxFOb}MLm^d)2&g<l{CYkU*}WLgD|kzs0%ybO|CoSk?HVK~OS
zqgC3?<D$WsbtF<m1ei~U6TN>p9FA?L3#TmZ@~FAt`ULJ2qmdJv#bTd?$px#YM5L$?
zSQauh;pfa;S#0dfNQac*%LUsSqH)`(s7&RQ6Gt<lkCNvCnJv%F0?5x?2q$q>h8Wqq
z$v&m6aD}0=c5D;7RI}&m9bpL<A#kiltyk*TT;&OfHH4+6M&Us@u7~kKWt4zsM12E`
z=cOGpY#TV+H*H*ofEznp@%boNs@0{9FRH5?5wYgTXv>c_YJe(XC;n(+TV<%{1)NDk
zDN8~rcbNQ~<<@@=`xZkMr$QZbT>XU`Y4WrYyn4%Ykh?L!CvtIF{vRsx^)|IJDGZj0
zR<!_Wq?vs#@@0nyt<C&=GzlU>@#m;;uGNa&)^IG=JbjjKk&&ibP4d_7@C4SPT{fhW
zyUuVFT4^Mz9^P`+05BjErOwb4(u9cd-0&1Q1v}^yrOtkGh-z<WrOt2&c;u8?G$fv0
z7^M$T9_2d(O~pHf>rcp<vR5|my#18c+<g^JPpk~WMy-b~!aepn9Ih?&t+PxuazrAm
zpt9GRL&H+cd3v#__I>kWdAUSk^7gn|5wk~FJG|<L`6F|=tepKs$965CHPU@8EQ^RD
z#rU$!n^|Egxhb<TdI3mdY5zl%+i}Dq{u-r7F`tZ>h;VbfC3(5!XZiZu1q#$?>w|Cw
zzL#dG67Znwu@g))LA3!Q<AGRIdt{?G^_Olz&7o{O%8aUI3ahY~C@ldGQ3cc~T%vp%
zhGy|5U8(JwrW4EhX~RZS`}z7|WbpmuQpEc?G6}w&dP*}0Lw1=<4;RnD1Mk?{S>WgF
zmY2nulK}I0aUV5b`^h74L9R3jL@k=C{GLp2tLi)O_bSR%8<!}Rxtakc?I?HivhBD-
z<M_t;6l)s5jA>prBE|N>d%{GVe)aQ;<loC+>`9vVRtN5Me-fo~_X%I2GwZzsO}F(e
z=%tpcQhALQSoujHl->KA<bjx1DXa#I`;)Q-l=j4B<U7zbKxupgW(ZVUCsRj)DSI3f
zEGtMv)$m3ex^Zua)D{s4WkK!t%O#uL{6~XuNxb;BMe4C-V9Q_+BWXsR<F9(9IRL@p
zM<2WL%HGTXC!$$&eBV+1{SFe@7SeTs#B;zDaa?vUK%ws?K*wnW;${ley@8nSf$B7~
zfQ)EHy0lz-blWiKNK7b~k)(dRz2E)bM|rR}&hk<{MQ*-wDUh5DqL|Jrrs;iyy`VS<
z9ex*-)b~2NTvE;H_YOm1KXyX#UL8)Ejet?rPQoVnu#fNR8#SQ|$ZWc#G$-N=cUx?e
z&ew1`W;L#&)?lxxw#0NYQ1KqA_*<&Y6TOC2$R441qFU|;FMFb1Zr^==DYoRslCX_A
zUxCwc53*exv;85~1ysnQ1fni0v^Akh`VBmFuW=gZ6QTWP6*<~7qIHjBC;5et9ryj?
z!Kh;^_EmAa%9R=%Bzw#E7#G67xD%oQm+NV`<{e*UZ%7cm4IttyIm#_q|F^C;Sqrfq
zCgHM?fMAB>?E#pZe>DCSi#K!i#i0pT%-{RZY-MJw^eUYPLv1yy`NPAfhRj!1FBHgf
zl$KistM$XffwGKU2Jb+jeJ<c(P{KG+UB*SY7T1vB?+De0tNqg{C!v{nO-ja#lIU@8
zaotg$0LpKyh$Ej|r7sfavG0EGw;fjeZ;+Sq@1fKWXz2tV8X!VVXuwQd>SB0HAd#Z(
zqem_NVZKX8LlMlbfM`p}QPxnHg1%%eczWo4HWA@GTmRQ$EJ3ssFteUk`uKzqD3=6g
zBt${+vFG7V%If2w-%F~nsnNE&!K=C)epI&fREOi`p#r4)hDw736~H77;4rI;>VnE$
z7OW|Vz-7s_aH&viv>;G^ZK~+0H@23xm}Tvm%lo#LcA3qK_UK*M%e&4QY9*<4)i3w`
z7oVjSh#*+Kxbmp}iV6UK&hl0KM~d7TZ+?r>L88GNKyS20pgzEhD?D_gd`wayhZ|A5
zqj@*M$}T4e%~f4a^*`$E8C=icpN!?7s=pZ9jfMopwDCm1$@~yrf7>7za8r6teyU+U
z8_GS_-WuDLz(C+Q;2=Bh`7F8(P}k#x;JIr?9}F*)vIl*T>?;J`)A{)XR@={Ru=5Tc
z9}rLG6;$Pib+bo>?SB6}FM)tIQVmic{BSSSQU9msr+*jM{=e}r{?oZe)lC;u3GKTJ
zlOtn_5k*RZET~axgD`{H3Jwv2RBC~r&`cbGyog+qIl)kmq2Y3x8EW6pA0>YuK(X^S
z7gJ~gNj_Xw7T^vTQHJ-f9|8#u3CPFBn4Y79BM)N==WToArTgV?_lwp|2It4T*2^zd
zg6L9S)ST#8Phx)rTPwh;*UFDKHnzW=o1gyv7l+&0V%0Ia+}5RoQLSR}Uf|Zzx!^j9
zJl%?6pRGmkE&I%3)+)9lM92F4@f=8!;{_muFIsSzgIn_BDFm$`FT$~XcyABfY#lm%
zDu|v;ku^fKs4#-JxY+TB7kZqOBQ~P<Qexdiece=JE`)E@if<nAocLn}@tnkCFGSBU
zgl?MgIKsCCAF6#ah#!i5Gl00c&S=5e>#4KzW?WRV-E7q)z(|~UxsHbWVSHRfvRtJw
zW@&*-Muk*Up=ZA*+6|6PH)_qGNgkUG#~Ua8CS^C$hTnqOj8|d3+MA?t83|7YtFF0a
zHj0{zDqZudL?rAh@@cp&O_hm-TDLd1oKH;n8G<+3Ati8@6)wWzR!wD=vnYXDMxt7s
z>Uqr+9-RH^qmFZ_n?f<(lP6Dov(Hz6;Wf)Hm<`nRJCegEcCPi)nBYsM;RJ9VEN7P&
zH50+F0m^506cgi&!7-xK#_p!b91_Q2E|g8WEtC;UNaK(Zv3D$s-$xSWsioYY6O=Pk
zEGX&Qfj5>JC!iDO`QL%isQ7pmS>ATtL8ccB8rRn%l@`$Bs>>)gi_?S~A43nEf_YKe
zni!c7N{hVi4ela8n$$vh%X~j0?iLq`o}kd255Yjo5sL4&u9P;j0a*Ry-P5HJLZ?qt
z>661X+<VAo;W5+aH3PcPDAMZQD-)}u*1btrpeUH8?GhN4Ptwchw23{%I^}e$Z5k%#
z71E8ybD`3h$qO1p`+l1Mhou4a2r^$qpNUaeqeE8J8p-Q!q81-3(CG$nR2ZsIH5hEp
zm$W8JCTOW)XOkUSA#sikJP&oE*Wc5MV0>N<!nK=RwXQ8MU6@UGiHp=gl_fG$6I8mH
zfN0^4`4iuW`q7*K*}zdJJNfZOVUcCI<8zPO$p%YO9W=?99Fy#$oCkOj{uWua#F*!D
zXRm^~XlyvtRO~%FflWn_aj9eO`0MOW&qf}vPF}^~RCR*X-!O5zRXWPAg3WSiK}7?t
zyt}9i<S9+9?6{U|Z1x)}WI*9Ik=J2iI$Gavqe1&iM^YZgHQjo;+ihDzwold}8Sx`i
z$Rr)n)@ySr_LfUU0%k_48sQ-)BR}3f3TuI=Lq($AxP4#VHC%`{VyKk&V10?xgTD^O
z>8k<GI)-SInPA?;Sl*N8;GQir!^JU)vveQPQg$wkfpD#GAB9zG=z`D<eT!Ur*j>E>
zR7mmhKoZGBFC<)NUj^K|YM;gasKqsyPSKG`u@0z5;m+fOuMbD*18j!;wIRG`S02e{
z$U*YP_jl#KjjQy~gMCkPE^@_d$D;TM1o&6pe$H!3cto8*Uj+GA)OV>X7|p~LUQ(Bd
zyEwnK6#^@HL<g0D>YdzHi`%)Pncgy^s&T+_>{LFm1z}MPlc{h3Oidmcm%cH4090_d
zgbY)p=~$sPV@*Cn;7^_jxwudo`FI@}sE6+=RC;9{LqD;xC=z%VWq-auGc25v;y#d4
zY3808od|la%5*tlS#qK9P>2zuCf=CxBYD0ulGEy#edf*%D5ghhrhbIBA~kK6$*i~Z
z0M`@*aV>Lb$Hb}-28?x5kAZPM0Rv-Ui6^$UoT1&A@tt|v5K@7=`KlK$qWI`(mw@N3
zp^efi!!6P{nDt)(MoKE{LYbAf>}2SP6mvJ(1GGiUYRdZq-Esto4XUJ1^yB6NX}j!%
z2Hxk^4Y9Gmj36$mPC*roe>`TX-mUo)(Vk;B4h=Jmv|TzF(Kwi-tq=kah8NWv%PfFD
z_v!d5KM`j@j1&`~c;oZ>mG#O?*zJU$SX#Is5RYwE%inU3fRE14*00Vm>d4WJ3VQg=
zvxoQiqAcHh2kSDf{UKhJ-$mq)Q$I56qfk@3fKDMbv}yicp=34tfy!4BGv|*?@8~}h
zHKlG>!Q5$Ilw4p%^jyi}Ct#<U<F%L>+&j$GMr&Mn0$aHNd;h}Hn&q@!w>lF}XX15^
zo6xC?cvOAMqRp7fulZpKWMR*Sv=*;EPrDR9e49Ra(mt)7*Um{2raoQ2#BirK4y*mD
z1J=v@<)=~rC^BXYxEo0YvBG}&CQM0ebkU#m!`M0)Re?OBa>;*0&Nxz>kL_BGUJz9Z
z0nlRB47zmQ91z*y;9Vmee-`*6AoqAi%xKs+(v;9_L(eWO1PgpV5o4bsA&bOTnMZy+
zmS{&3?=Hliufjedf8kfi^d{5rk{{pvD{7F*M?RB1R2OI<h+aVC4ieZXS{5Zc1h?Af
zV4~2F#XQd$vLO`DFtWJ8NoH?UVDcl7U43p#H?M9qqMEyq)o!M7$LaU5HJrGDof80c
zNaY>ECN=VqQ*NK>2rn3Ia|{IrqRYXb;1o*M<IuLj@P{fs`8`6rhm65iPcy@Mhl#=}
z>YuW8hE9S(#+hTIMu01y$<gCyVKbPaNyNU%p&}L=lu*j~s|oO}ywEG9{GM7V$idaB
zEHD@V<p%R!)PZt*e~PRRPw}adJ2YHOalyGt&4_^cFhedP!V(T@T2E#WUqz6r27VwH
ztI^U?3qn)knm+oXsP<1O9ILOo_h~aWZ&oihql0~5?qi#VGB$5lrji}KjP$Y0?&v8X
z@}<{X-A8IWs>Cfc@dZ({I2B?YAOx*sNMe4vF%QhihI!4)qGk-Bu$SHOEyf|s)#z~v
z`FDJ4F76nKonrR|HH>W*Z@9EAbPSwqxXxr}QBcga^&S_p)GjLY$n_0(=n%(wvf$0&
zyoXh2TWN`-NH6E_-zxN()xuCviZL+`SLid3dXs)a0GFY%VOyvzaL69wnxZOf;+n!l
zg;mMoMAy(RA|!LG3-jVsuPv14<#n7D!<>^Zi>$$Jzb}cpvR^v=w!7lWHwB};Sm9Yb
zj8#evBjfN!mCQ0)1OKWGCA){8xkg|haBTjnEEcBVj7qOhYMh2fOXdQW0Cbr<0rARH
zxq53%|GguAYH!~)g?#mLw87=qPGQ?kRjaga@OuitAM0R8z@28wGc<g2r0K6$|B1&x
z=i+yu&gD`p#unr$rBx0wNd6k8Drzbqf+<^z*Udx><>pC|pFutd=@TF0J|1#d2v-iH
zeqIK6ljl~keBJ`ZHrC^6TeqU^s}VUU@e-x6H6yMAj?ppK@T8Y#GQ&$&gT?K#ZU7J8
zR(4@uc0OEAHd26&zl2to##Xq3e6r3)&RtRld`*cf%Jx<Jxoe9;sUv$(5`t=yPF?mB
zpW;53E6qsd8{z6-|GxF#z1cGW9gsIKep=Q6Ubv{1PQO+o+;mZpe7$H<Ev4{MVck|f
zWT%;eK2QX_X9Q|J6YqVqMMl5n5LeQ|!uy+ZjsMK}H11lZ^{#t*R8n|qxW0z>4vZkV
zxKeN<+rBCdVJ7Q&7J0NTP!;4MccT%#McuILBtg23Ve~6Gdytr@Fg%Hy_j}G(lgX0g
z@{B8;kYmtB%D7s++G`+QjPnJ$Nbb9yJ7Oei#BQ8f6C9IR9m?!AHQ(^NLfP>Om9thG
zFqxgW!jH67ViDwl8@>Ww?lU~Yc_U^bmcRasy=;;2yZQwD*DsF$(em-%C0MDL*&F@$
z1S_vdI_Q2{NFkqGS<<9aFj)}e{A>WZFaSDQ+7NjD3PxeE@jX=5Um^U3`nm%;%}-S~
zFYY|qzrYLW_EEtE>~p7;>nocKQ*kUPB<ibfD}*<NS}i4u#+HPy3VY_+h9mK6N{_-t
z&Bkn!IkVa!zPqR)fN2Xg3<|X@_A(tI)nE?QQGa6Rg_X1Q?s5{2{OEgIg84wH`$;cB
z4`@sB5@PkbCWvwV`Pm?IfKFHRvsB&sA34jk|7Pv_Uq1N1Hm-_pwnqOe#H&bNLjr>j
z@k_ei*kPdbN&cn`RI1Z)%At@l)Q_qT5izJ+irFC3xq+YqWA1wqB?l1a{m*;BAcKYA
zT^}Gjt;4kE3C9kb!`qAPHwy0`3?ak2x#9dMBYtb0Ao4eJgQVDR;_AV%sUpI}F51L7
zKHPoPVZfH<uOT`TSiKoGX?&#TbnT55uaXicn%HThLWC`}Ob!$Bcq*(Xq58MV<;U|9
zzzbd%wbps%ybtbE7ehyUb^rnftE-4zMZxjQklZ9q(rSqQ=~8+sqJZkMhBZ@o`W27B
z_tmPjKwv*kez_r@!0*3h-p$J2W3zSGg58#6f0VTEdr~KK4{0C&U_BUNjvey5Ow`s&
zucG(pVJPuiX>#Y?j(>9=qgi?4JAT~&h|pn3Jq%jhG=MJ2(O+ZJe{f8V-ZsXb;K=IE
z2tXrPN@#3QbT}Yy`B^K-$E{!{_yQ7XSD3kj8A%q?6DiU%4HnZ4#0SEpVvS$dGPR{$
z=CGItC{}$SVwD@wrCcA^#WI^HT4iHg%IJczxzJf*SZ5nZsM<lO8bp+R5d2g8_+X3E
zoS*0*@BcA9@Bdfv|1)LzzZSpXPX1=O7@x7O*}^kw)E`wfOkNi8op~+N?%ept*1hVB
zM8}i-F^?ygN1U@kSlyEr0K|AY?dGTaCe%JRKHmVdz3Omkl&h+Zb&{i3rLsgF%-eAH
zAp0S#ZEf*^^(evg>kxvN6REq)>pN`6fcTeeBVvX9+6xwc+ixBluYu;<!X5KD0vt{x
zh3bn6x<!|B7Spvq6Lqi7s3BC=$rD8ayhVgb@)2n1x0bs>rG*M7y+PH-g7({SEu+a7
z<mpe-*)KMv_>bKqWN|u}5@vB@MM%qED{g6UE=(+*Y#^~N_zowM>1B^}zEB*{A}>R{
za}By91=2K6t<jLT5txT<R)v#fF;ZkmKTdowA0nB#VcBaudgUgC7dY?ECn))y5+gf;
zAit#<=sBql-#`#oA7TdpH|B>+l4cr^KYwo(72?;h5d-kZ?Kh<tr^pUxC>95T6NjuK
z7OTb62DAvQNi`F*By@QdJ7<+A;S>loQ5r97VID6WN0v`HM16u$;+;?zTMbM(Sb|Yl
z15{YjrTs?`%ZU3}LEit_@-zI$=HS1TKdeQ)s!0wI!N%g$Ae>V4kH-8@{XH`*hgsX#
z;<lnzpJ|?oWP-RKL0<p)_7@hx5byR*vOQ$|AYk(7`T7OtmsBNE+z<su1hY1R{f$y-
zycdQI=v&ObI;L0Ge*l0T^gjT=fr9Dq8}2!4fKXnq=g7&E%l2LU<<FU>5c}NLUYbKb
z{@U^!FX2UuIaQ6FWG%E~Ob`VY()i2(pNg<ZJ_arQ!dy3K^gjRqR3B^m2LLe?3(EAT
zY3vs_>VcC}*m-nz7Q}gCxG}PdcPM*0+>0~I7$uNc=X!?|%|8IJ`KoS%6y^^67XW1F
z*;cyfDLaWQrMGLN(DS&-a%5jec2aL6nU%q|PPleijT?-zU60I=^O&WFw*-QHO3=`<
zk?%kLfM2?e>V;dGIas)vZ0GCb=8%<*T11QWvLw1z6`c_!-r*;a<@uk3W(-40z#G%C
z#BUi}*fXr*e3yC2ERDm=#i=7doLv(k&;KU?$o>leCaeJ{Eaj$l{+0JejzU~j@P8Hn
zjQ=A5a&5@!aiJ{5B>3cRt?JPZPXB2D`Z()4iz(bl@3T0&G4L~$amn1NzJC}_CSAH8
zvKUe}I(B@1G1e&yBG*__uDeQ&cB$lvKU;O;9rA=**gZap!;fpDj-TSf+EE(#Yusqs
zPJ#)px<Dt027M;4+&%T4S!}@+Iv|}1x`dcahlLwzi2RAG<SB3J9H#4IpXEZXc2p$g
zfdSD%!wR$R9hDUMi_eN2NB<Yjl;|Y<!oT+CFM5r!T$A(49t${n7LUN;!Jh#@{I3C^
z6X^3M%cEhFN$*%15=XN!&YRTp)^SXa`Ud;%7yU-hJ$9)1GG2R|T+8M*z-%7)Ug*ic
zhvQ?=&#<ma<e2l~dyqPn?6#j&q87N$isk}?_LXI9=&C;Y07F`Pf)_&8Tr^d6l;sxT
z?dM(mA1z=<cE2h4pB51DPYWm~utaB|6iXf26m`z18k;io`6zkjQlj7y6fswuEa^y5
z70qBMXP#ktE~yR7>_}~fVwtHUqU->wtQBJNf%#_w$m6!u7XH5?;NN92{XdQW|E#}?
znTCQ2thWvFwN&dkQ}}XGwW693ZxvFw<xje`|E907l~pJ}0p1*}X1kfz`Mi+D%ks5{
zMHL{G*Z9Kn%;)OP?9ObA7rVnXUH%c-Z6eG=w%g5QW?GxWG*Qp@=R?gebK40h66to)
zO#1_%OyxS2AvKofJ<JG{w=p+l6h_9j*^r1z&H35kaf!;#%D#zlivNqWw~UD_{<<}B
zcXxMpcN%whcXzkO3U_yRcN%wh_oi@n8X9OA{_lG;lRL@1GnqM+R4OMqA8ViA+I#J1
z)%H{mj(h8f^QUNO`zQ>1j@96O#5UNS?MFB@K9omyaJV;rw&T;+n(wLH*8@OOZhxtm
zCf(L_mKROOvB`ajj7H#v*gqxVYhe9t0-zjH<8}R=tf=)bH-SDp#q-7KUod71tRkIx
zO^a^8#Apro)dMqxWHKVl-ys%q;i(sSsZhO_w`1cIARyLMCW<VJsD@rXA2jcIbEe8u
zcu7D|zm+#X=ySKE$!47FUZZz@11maVDH6un>q+7|OM|Dnu*Iwt`eJgzXJ3ovm6D^u
zAkkyrIYe$xaqv^B?8ss0>M7scQ9S3>BQt5B9frkrYV42;wmb=)DBD;`)ifQ9^<?qo
zn4+zI1+*en(bDA9cXpSn=Xl0iPb=K3c~S<<1{=;*o6g(osylOJ69C6F)6!?B78kSk
zl>D$E(W<<i%`1iTVWr+vMk>intwlu5Y<|+$DN3q^u3B=XNF%N(=^Y#i3Iw||WM9Qt
zq7mqhd6gE6y9EAe*icsxCrg{)qO;C6wfl<w=GtGD1T;gVtzc(l;mAw0kZ19{SbLJf
zea}w)oH~l#xo$H8yiSaodRt=+zmu1C2;&Hw-$Yg%F@Mwj4Eg-hx^YkEeAbV<eucu~
zWU$p)X)5$F6zmnAwG(HcHA1pb1maPZT`9yNaL)L%;nC)A%O{wdx)_D{skqPE3relB
z{uCwjdu7|LIpo*Zy6+8H%DO2ekH#lBf+p<UC?gNq<;(V74bvoa=&?OqRWS7NIW}XR
zvgL1RZ@FukU|kQ^?CP=X3X+M7SM<Eh&C{!kXYz!fnX8N6wLET88OL$LI06%A=+gO)
zG(^G@WRS-)i5GbJ^r|!7MTk%voH_@@Fdb>L<&iBzx)0qrU|a~}Bv{y}r+;}tK;}>p
z6W>==6<nNj^+Un+I9Hod-^7bV3KM#E-JOdaAxC%cN?T<M6TH_V%PrHr-8htdfkx+G
zJt~8SIiU5T1)yzHI%b?@Y>+monTnWZj1-O}jyOi~Q~Z(UpakFof!`YvX2>{luOvzJ
zgW=S76uaE-(s~LLK{o{U!b5@3@j3h5XSB(X2b-kL3B^WRP9X}7;g3LuFIY&geRJsT
z03_DrE(^fF$e2_2R2kRE-bS@$nx=<ni$mq<8b@(@X3rgf9S89wIP~Nr#y!|*XQWRj
zMR7faQJ}9#s&|L9U!OcQ8rhiW)<2YFwsTvtxiOtU_^r@$!~E2GH7HG%uoaBC`b%UU
zqpT&~xZ$N=s(jl7$i9YoM>Z`2h{_p&vQv;z`h9G1gK9d@SaIA@^#I4#+6O`xayi0p
zR7@D3DSAywvz#LVy1~J!OKzbchd`WFt)K(_4+ffkg#q0A&TC$bhcUASNY?SBVSNP@
zi4c}t-kBEoA@az-kUpltB+;t`Sh^!*q5`E!;h64CB<VOuEep|I>MYX;uD%<tx<bL2
zsPnR+J(|4ZO}+?rRLW@g0;Zj=+IlSU9%eLoB03{#jtejilsVC?>WYPQ2Rcp|C&~&l
z0M?bri8esKQiUQ5ejG2aeRJk)h|fx9&b(EOF%f(81FsXNe6PvTAqUKfi<x2HgXHid
zyvvH<ZmjZj^bE}Nq?u&p0;FYFw4S+SW#Oo0n4OWV$c`%***c1{O&Nr`5+x|6invJD
zI;wJ44lK<$BSh+kCfHPY@K051j&WoB*@AtNlN9--d)(rbd@;f}OMFBt=J<u57S<4e
z?+j&^xUuiNfFVMG2w`WqprwS&erMf9XGxv!1R%;e+BgnpPoJKAO8&9aMX^pyI>aSh
zj+g>2tHzY?e@z$*#~Y<skOJPn*TzP9)3osao<#XoW^2EGJ9)$q|96up#{XwYDQn_s
z@*hR{->;Ok|9}ZJPy*9?t}I&sD28+!TG5GN85_2Bc+n`*)+`jMh^<Ao21ChE+}${6
zskfitUy%wm$7f9y1@F84hb|}0BE^ep55PI0`8*#_%bT6qoc=&R$bGDMu)Bl4Xa-I5
zo%AF%*642$*Q2KFtTu{AR0*+`wTLNSNn;v1SRPUt9pODvSV~fE3ZH=MUqw=XK<_`h
z9~B}4`TMS<$e8Y@Ln`hSO{S$CU8YGleF@oM$}Bb|4gFY=iog~(rM1pB*JVt)i?cD2
zbmZ}rBBP2+ZnOo}pG(EzO~)H5BF#(7v8wghu?-t@)evs231+!F3)gT+v}a~aF4bSH
z5WE^RM@#TN#ZL#m=>Z{Cs;vKxFnpH(#%Vn0DO|n{u}Oq^&KQ)~aHcE9hDkdn?4>j!
zbSKl;-)0>{^(ql<>rXh8dcfX~V@odwS!*lQJJ8{EOXqqmZWcj3pH#PJIjyzN`Yvv?
zM<#_En`jO7TI=QemKe6tPsX^jB)d%k+H6*8YOkjJ97-%b+XvFhbuDW=+gPbdw~l8w
zgSZ*nWqji*G^&LPwdmUyt=DAyShjZC8cg%^2RBs^ewghdiDxnDIWpzbj8kp*EP1wY
zy{`pilJjbKWj{A(Rk=d@&i7hstCw{DSU+tCR7g)&%4T}YIUss9RhVG?ww2xo$Hijj
zw7jwDjB>%{Vvh&FLcJsOEu&Z{TR9h!juj3TR*}ZLz%H;%9u)y@??VB!v38j!7Jv@%
zyu3ns)pmj$xbC+v8@bNqK$Zhls%{1C3ZXWq%59!Vbis-i&*9ok56`)FxlaFP^4naq
z<@I9WuBDqvieJz9?6}jcBeCXN{~+Yzfo`^wHqk($Sf)0={DsMQ0k!WaC%~+aW7~U|
z|AX*WCZBC4b(&iLa*f?+a@eJT)%X5AZ%|BMY{^p-(j4+54~RLnKE8*;Oq<KPVwdMs
z+j4!LNem1!9tsh#i1JDtg!q7b0f>f2IW61<d9L-;1Nff#p$V0*GXK$>{9+Pv`FC3=
z)i@aFeK>yC3&;TX<pUFfR4R2Iwvvtxz;o8sIS>+1r|=n}X6_FY7WxN&WMzd%x&=v;
zq#0G*5w?bM-E@#k6Iswnfh>fr^4Q8ma!i#;GVSzd)JWvh%2ra(R!B?n8@-_zQYQ3p
z_`9HgSTCA}Xr2{}xkyM#86}(BIo1mT741g@vv+JG$r}XfeMI~sb0nxJ!c-|MMWkGa
zw^kGaJP+BvpGgpW2BeDwiq>#5#Xcu!Lqr<7H#xy;D2x)kXz!5&X=#Q(<I_21H1UF*
zD}2UN^3qVGq3I;Od1SXFU;_WmO?rL~i3=%hP2f$r5LCOw#ao0?dmPIBYT<W4N`Bx7
zRbX+8z_lwLu1UtdPy#%y&pqVWNyHb_e-5+`GeQ8eZw!Iq{}w~=zshd;zYetjU30?K
zH&xM9Py{pN*<iycL3KjNXv9P)n<L>OA=siyOsdQg-cqx}NTDJS(niasnm>@IoBdzH
zA4I32g$ELvul&%*Tng{X{1jh!cLO^9KEIDEfwU-Z0moJO%^9F4YMtE*ax@%?CbUyf
zGn(c=0EN0$IID<i4Xd%)v4{YXX8TOPtsHW3$&kS>>7XjNk%itGON{Hy_~iLf_KWnf
z0d>F}VvTCeWty)dH$EUjvanf@i?d2d11$z#U=9ax<*mCZYlHj<OIhbwot?ZN#sv_{
zNnAa^Wh|Jo7v2Q&B8zX#(dtF@<DRQ`|K%lmS+ds^NW;GO(3s}Cw-k8KOfg4uqT93=
zkRZflR4TD&d*TxhX`s?yT;o=_N<XcF9p0~EA=WL0nyU<yJUP-c_oqLW{na<MAEkJV
zQ;KMpP$1o<&)SX`0a;Rg4w*s*Y}Htq%{63n+kumPK0U@8w(hbf9FtAgV2j&OS*_L!
z9}Bea(C19nd{%B?W_M4E?JCdkuJt)lRnIFH|FiOpCSI9^iCwyxCMvXIq)a^JTT;F6
zdBy+uspZM|CA(-}S1f49SuH`X!!_F5ES1SyxQ+D#LrrwXj5N|EETnU67J@qkhBY>~
zAAwKBkkaxZP1U~J*%*VC!?(}UKb`cAIQkzG4%L^qpbz^Ko`r9$2shMXC`xZEOaJK^
z<<98<Hp~nE9SBeqnurX;W#427oA4D4h>HEy44!~S<o4WsaN)IDR#8`RE86!yq}2LR
zdS__5$eLuDtsE<GxOnblJYGEF(JX|TJBZjkNCnCb8_Goq&};9k%ZhoLxb5p4q5q1s
zlDGvqvA>s>W03H7+TH3Dr*CTw3~bQdqBQMr@f>;aeeKoD!?^gQ0`CaV4q}WBcsPvj
z^_6h`$vXK$=wJj)G6zyNNO?ER)A!tJe-QY@upmPC7qStboB9_!{F9fsiAKFC3iXE|
zx+CWD{b+^2&9eh_Pr5b4fBUbFzzZ5=`1N;?_~rNe`#&z+@0R%YHS8B6{9ix*$Je*T
z1jOCR*~ZMl$=t}<)ydYv%-zk%-rU5?@w=N24uJsz^Zi-({hy!u5BuYP^^}&AtGT0v
zyQGc%|JgsT)Aaifi0F$kF^`lX0ZQ+^b*mgtL<R<<b%hRbp&YRgLQcG<QwGr3xf$1;
zv$P_0Sz{aE58fa8xm-*n_<3D%_bMu|CnJ`k%>bM2#`ePc@_Dky&+c{l(jWMSDT49)
z?OuTDA5UnDtM_JtO77(ly>}Y0XGNZUM%Fipbj~H}kWD<qWDhxh{b=Meuu?l!UlmD?
zz{y!3sD08om2{vD>>P8>12XdV(?xU~7rK@5vJvPY4K|G>9crJl;Beu{+ay~x;=m!?
z(kaj5r33TS7KrdViwnsut-?e0!c3z6nhG)IQVKdGTNd1ONzP?sIgYWy<zIIq)Q9Bj
z3}bMXfiXJj3`J#`Gg%8^%9>yK^H^>3s)fPFUvHit=yoDeZA7y0HkJ&}C@5*yo9M-m
zS#{>CWvlNiZAnm*m-dJBS!_@04y7#J0RqJ<C@gDZZMp$zIp}*`c@}pZ2;{Xzk@$FA
zE^6Yi9XNZ-cS1tOugZh_j*Dxj7Y(p@j)zFYQgBqBVx1(FG+orqZbKf=xrL?SS$R|D
z(ybkG1m5aZKr?@_$;q&xa>wH#nfanHj7IZG*KjGy8|_vHCDDx*cu6WJD=nK<#H9Nj
z4fYx*U0~M`1f{SM5YwGg8lCYCdLA2*oxT#Gc53n)!v|#FS-s<Rw0Q;d;_#<MSH@mj
zqtWHF$dHKgq-s|rif^Q|l?`FO$YJfaPKxquQg5tN?W21;%6=$K(&d5NU3?r$nU3$k
zb1pN*nBj7Bbb=X-_`8=<6-e3g(Up6g?EG-gzzVxXH_1{}#7M4KJ*9uT8kV;x$TvMw
zVcX-Ri_zmzygEYtf|IAdSXG(05d>0o{1@?tj%O8NB@&DycRjq7Lj%RB4iVxI%b~d}
zhjUf^7wBZ3@JHt)a1Be<xjCxmtoiKN50?Nx;Rj~vS4I0D9B9a0Uf?P;9^y4<X@*F(
zf>jg~ia{yJVCqZ78LlOd=x*waFCM46irWL=3VF0<%p*tUWZWw%)Yq)d5LKr>ZFhQA
zwF-|7fos|M5<Gf=)TTHUF~(ePYG3!D0MV~mQSFmQs5-IW_ce)>`D#zzy8VIP12d)l
zSV}zD^+%8MWUa4pdua4jp{-acRqWb)EGL|YWd*s)50)QF<dDn@{8e$EPl8mmVmqwG
zD}wv@{vgND6GCiaC3I;Q3~?&4TJmY&#ulf-5$y}@J>h@e&#b>eEL<N@9`N>mt?pK^
z_yYO|3T%<xDb)x;88;Jd0-pp#Zn1i?tp5o8S>=VSR{R%Gd+;3gv{fMg7YsU?mh;Y>
zZ4?YTg_ejXRsOjucsR_flvrxodmN^rAN971Ztq^maL`ZpK#=@iQMxAujhW_NG3`FT
zED187d_`FpYN|4Hdg=xF(mBKspnP~&mEo+cupiqM$?F08vV!SfVK`1~i+7z#lkqIk
z^P@F1-*>>~t)Vc6s89`On6&y7!}JHQrE{<~x6Ul;HK}9p8EUZ;nxJfMs`!uJq<kW|
zsSzYWxm?Z|@mqiY3+J<pl=?H^`zZ1FT?GHvRZZ~!WmWr6g;V?=74Co9RU6fY_a@N5
z{B%m*oOCR=!OLDs<U(}#NwLj!j&3h&lhfWwsbH3pjHNqe?uFLAI|JC=6rv%K5D_(m
z3#k+ML8Kwd(BQB|rvy2Q9bHTULjyBJ4MPX>aF@HeDdlCgyc>5A_<JwQ?^NK^?dI3%
zjvw)t_18ZT%jgn)n!&am|JCsD4O%m7uQQ)KcqIMX(m6ynM~2aL1Lp&(&sW4xS9b0W
zXE*wUtXYShD^Fm~t0ryV>~BY}10?@(iP^lJe@vGfYJhI%j#xka%0b1Ooo}PrA=MPx
zpNDOf{_8`)-k-yt@V|#&3_6LC?>0hr1dhariB6CcI#EWDy{{s60#YFb#%2@DKQ_YC
zGqcCDE~r2LsEysT1D@T=-ype_Sl*d`{l(-~a(%RO3>=<S+xgHOTLz0y#EOSN2yV_d
zo>(u!o&Eq-5V=3=!uke30voZgG8Y{op#SX!7dj0a({!pl;sFss3%VqnESUtyGz!Ry
z(kSL%E(6ViMO?%WC&4HkM2TUEc5l|(;wMBJur4(Hbkc_Lm()WIk49001}efKbn)>X
zHME^rQw~@IcNfIE@OV_%HFefzr;NyCl6ycEC<RKo5LUZw!uhO4%kK*n=bQdzH~oP3
z6aN$?$I-<?@NmLkG5;_eNF%_?RGjJ^3_kfZZWJ!$Oz|b(z(2QBTnf8Pxh?J3O5LtN
zb59`RQs1r78G?-wz9Q{^TmAXPFl*)ef+4mteX`7uJ+H|5ZQ-de)9c+T1R`IU;Lb1A
zj`g#3|8x_9f3}+z8w3sJL~KXVvIaJ8HMGT>3xOf}bO%ygFtv4r4bPu0LX%5oh=Ou2
z*vhrJ*A$(bxNgwZ{U+uT+ur&&CcQu5tvE&uF=Zp!-F|K|3)7LJA1oUk6?b9T#%uZt
zJ}V%(kZ152XuwHE3Riq;V==-5vBe&FdKyPVRpS9#g_{Slj1_wZ!2Ll4mvO|?Agc6f
zsV6I~&Lfe!xKFFTBrWh2GO!8x9ear@L(`>Rzzhs`-uoVxDxz!{R<3<TgG(lXV?lz!
z64%;Cj=G4fzUK(0mhl$EOAk|eqMdfb8xfI%mSjGYnbi3M@C-2#mfn(WEOeZJuiGDD
zSlX%?%PW}ZtBGX;xs@uY6<ZfE6)wT)1Tt!Ci^Py~??y-J{96*eKMH;0+%a;&kyQ#G
z(ARTEkvDm%EP#>ZiTB9^Yf4ipS+DW9L`HDO$zu9hw3btMa0+*9pEEkIDIRcYrTgy0
zcviBl{dCTQU$k4x&ht}@KbAYk#$MnoCG|I_b;4)f;I9!i8ZxvmtU6j-F`DV=d&pYL
zX$l6X{`njiesJ@<l=f`9ctDbqZi(caW=CVhpI=cy66KZ}GiuUkM_Yi6V^zwH*`;bc
zm|NxrX*9yf(e#(DG>M2@YJt07u(Xa~85+ChR9}jg%+)}Fd04(VS=Xw)SDvkA;lBgM
z&Kd3yAupRm2XoFe@3^_H%%5ny;hpHUBQV)M>-ULYsaL^bYT_@{^Y98Y|2WiKu5#?I
z6#l&k@y&Aq2<uyANiY2#>}LBc+ZXI<*#G@1G8pk1`Fx#t-$eG4D0nzoZ&jiwu`BMS
zCK{z!dQcOp84({dH~c!928;5$5hIS(OePzyhQ%b2YC?XUjads!h<2tiO{F=VFTqqH
z9ZN(kRvpZOp*>(pKRUHUKNC>Pc`}xwKsiImh8_$9$7I!1Z`zTSh((WJFTIbh1Sp|O
zMdC@wqo8B9w)FGyQmh@iJ1VLz4DPOem>~XAT7i?FrS`XAl_{is0WTbo=QmC0%bN4=
zQ@rsD4IWME>%%ytncZZqTjM?-WPD@m$GY>N<o39id4SFlq*pVaVYJ_-Xf!s@k=I$V
zU?q_gOdm~B|LIz()|@F{#ybAQ97Ed*c%1nK_B`2XcNh~KU$}^gOMn2N!TPpdQ9=_>
z7UyH3hRZo_`bg3n)v1@=1XpqWeGYW<UlCnLcR!iw(L||SZey(R2zrnmWMhSVtrq(O
zKRi|1DnRZ;HB=2iZi73qq|F|FEW@hQ(J$PB`_(eRGp|J{wH1=8(tDzT@O!%U?8>ma
zXm@#4fs!_*fvh;iG^n5enZ4;fWD@b*oa;^1K9hDKtsjy1j7HcyOp)XBZYfyQEaxY=
z=N5XUB4kc$PnuIT9Sw|Hiz?6i94Dhs(u3^d7+qXITYz`D+o{jZWU}E>>5~4^n~ZtL
zO_IoDat*9Z0MoWgHf;U=uB|XHZ!YkNHPoLrlaI#vQ<|%5bN{4?{*SW=1Jiyp_jPm#
zS%E@FxpJY^MwrI}fVV(UplrnlGW3|7KlJHrj6pYd)N)gxd@$vgPRC|Hx?o*ht2{9^
zHL+q#uhwKU%p^j^7(G{eAi9hh7j+!(U+OqD98s~UT(C0lSEwbfh2;zyhcx7-tf^+t
z<>*e4Sr(OK2{~B=i%qQ!drXM<sj6%<DA`7o9#EPCanRn`Vs5^Sg^8$@9BHL3ViDV|
zn1gQlAtklTeNh`qegDiR>C<EyDnc(1O1l>^zN&K&0=rSeiI<{Q8>NsAg3*y~xH47j
zG1=V_3B7#;kC$S1rR*-w6;FzlHoXff)^jr)50JUGwEA8eKN4}LB-+ws9Fn?FhPrW_
zb9ebv_1e;V(@0i|Dt1yIIM&9aW>Od|qVQxSiIP9;XYDvt+Ldwu7P>rF^0pfEKV{14
z6>1kNOTQ+IYg=gK%wQycCrJ_(dn$<Cpv80ns)!{l)G#o+mB)HXV|{*hrO8N*P?3bV
z+OUtw=p8EJNEMu`%QDL8TgwOtP*v}sVUC)#FU^s5<j2U`Na^cRDw^=ij8#1uWr%cT
z31Ka|1zxnqaaPQ(D0^^^?MBnxXoHLM_`@9fb*}GGSS#+z9JeLP{0%StAj@8kQK2^o
z!8&J~Nn#ooIEO=*hm9UvN%rK^(ZNYa<2J*&4TOo$Q_kK&9vW=fIogZ4$dAqZ6@6qB
z2X~I=y58mjPA{K?&yd8eXX)U)JhLZx-yLCC{RapWY>;WAW9sR(bfx?PVr%`KMWQEZ
zWQKqqvv3$+ycUKzT1s=_`+7V<Lsdb>kEbZ+NtnCzT$$`B((6ucDZ_0N<<72{>?qpd
zj=v_?t<Z{;%7afYne$Vr<K)FhnghwcVl$U5><wwjWo0M1I(ggVGh2b)tl#&o`>a3q
z6Vu*&xs@h9{s0GT<tU%4t(qblU|=nSOC)wEFloT35LaAPr5hbGqIA7U$Zm^=-}Zh;
zk3Ke2LKEUnT^80&OLseHe=bCzBu_0ZZax#pb^@Z9PBc=rBz~4gBq`zxA$qQ2pGL%u
zSQ~Z-o;sy0{8O)UEG~$+Eb8vEtRGuw`ifRlJA*QmK7ddNbQZ!B>iMkFsh_B#qG6o6
zYB%hsL_jH~iDG$uR57o?q}mFSNXJA*O3mgbdW8_68Qi*PA`{gJnN#h>#FCY*<iRFY
zdR`<cUn1^FUw{r%?WT~jV>Fqci<CZEhxWiUQXfIXH(2vFhQpOg4C|#3bNO*6s}c!y
z>Yb(gjATN}xlx80^(X`Ofga+o28T=okmvmQl}v*wduurT&oaX`yX&$wUV1slNd-5H
zu5Sw4u%31LUi^C$dPs02CZ-*O!41&k7rH1rwfHoD>9N7m0})=?ONy>(QEOJKgUm{X
zWKCaebX1OAc9IYwak2bcq-48g4NRL2>KRFZ|FVUWAZ=duc1z=KalXT74K9s(Zan8d
zUG}g;-zEBvVc3e{a9Jtbxcod8+jfgo+9DpNq76+kUKtz(G&;I;Wn5wEl0Q=SRZq{&
zJ*KD{XKoJCr<+Oj<34LEip}XicaF;Uon}cCPhe9VBFc)^Tq8ptSN-`h33+})&EEeR
zxR!PZZWueYm&V@M_BJ8q@;oTkAFOSGRI`!l8cTnI@Y^YvAD;9ycF60&Gn&|S%fLAK
z#e8zZ%g>@CU?pXH`3p%8q<v32VH%G8{y|^iY6LSK0F*(0XsD$b&A2;8DDS12nscXP
zHAs_YLzl;LduL$tiLSHv<LomPY7oU2^eaLcU2nu$rC1bgYsag(L+Co&l=>Iw3w0hh
zj(y;zZFn$Zbzl6q2PA07Rn{B((BjdD){u4lc04fU(*s@M{J;G=Q8u+2R0tp-$Ta^u
zLGt7OgCJ4!adi8puKv%ugb&_Z{W$IPNRcfoE2rZ7xXmK+lL9=<3IdFdLLdZ~m3U`8
zm@}z>lR1OnW+e}%PNOX%A*ymz^om8Vc{hj>ljga*TKC7Kz^>+IYgcH^al3A}t!>SA
z{+FB8$;lkygkAUFKEIo<0>974&-t&+p3ieFBdDJ?uZ@HZcj!>UZJ`iOdO*UPg?9sf
z^MU@Y%10+nZ)WsBOKAKL{-6)!&j&ZCe&aj2v8sJ7gwJK9+u;UwVE^m3ll`6EYhK<!
zklV`(f{^hYbow9Roi`&W;)e-g*GnY?p@W+O!aLTFQMiH)6NaAIy#9v{C0u_=2$&Ty
z^TaWOU_C6T^PSoK^fbLJgj&zmqTP5TjO)zs&Dd#^#OY1}sJ{sHraLH(m@GI`#yFuh
zxENbN1f)~VB*Of0RC$49NKAGd3yBIstikOa+*xCU&?W@gD;}ir6il9AQQFM}iz6I{
z(*`CebX<8;mMl@oP+A5{x{h+z%sDVCmdwe*<UvjZOV-R;<9N(dGIIzE$}2>jdtC^r
z6yc3#eI&*QZwrW~wbPW)RYMsS^Kh8UZvSWku}lr@2WWvC&!FjYk%fK<&xlloJ*=u>
zt-;}dMIa@gCgoz1#)w({_$h1>MNw-l>Y(bi6R9Y#2T?(fz|I~6G=8ZiRvr*(N;ML1
z4bmi`LjsA6frjz2Vh1e_dUF2pRm^pP+6Q~OXtjD5#_er36Q{hpxB17G#cBk_%bJC%
z2>Z{wK;qtr*2y9~9T#Z9;6&lh31a&*xCzakd{wq!$xL~^&VSdK4uL^ATJ<E1VxK3@
zb`l|yv@)$Sjzv=)8f5Uc0kYB$zbxW-&ks~=C#Q)fFE^PwD*FtT@HktrX~r)6$}rSl
za{^2%^pL^?0t-w>|6)9DXc5I5+hv40JQNr96Pl=1RYgymOC)U_Rf|T>{aN~iGDQg^
zX5~&`Z!KHHhKaZkPffYjC|8H)7jIS~Wv)-(7LcXc&^U!f43Vqt9Ee`U0L&&g7q@BT
z1#m_C*D55{QN|_@sAsGpg)kG?YL0tbCO+XGG1(?sx3PvTdBnJ<r~}jd9Wak@5*p&H
zI*J3FXcRsLU~Da_ZL81#$#knZ=i<tLB%akTChlSWvaSx1CUk_ja4cxv+C0h>IVW0<
zhf#$5;<K=;5^7Cqw6j@hG{;^2Y)lBJ2r4p_tgo;>qNn<8D{BW$&h%GRP7duBOl<DO
zH{~wwjbuf2^Kgm-$K)=XHUE<B`G6!6zgSXmQUKcG*tSYMCNh*P`E0SLk~Ft?Tq9!*
zA%sn*nhmy|w{$eQ{^#%YRifcUDyUe~k)tYo--91`<Hf52?PTXpK&BzOl(6dx!dO)`
zetIf-^nBb)a(&^SaK#VQj<UJiH%nWftoUJQT`0hTf!0WN{8&867LCW*`cEdW&?CIC
zf8a~TEV~DhSgf<`Qflg%!DatQDs8l=>&q<+-EXD`e`2I=9i!Z;J{Gt1Q!C1h8DQ3c
z2sW0{wg<;pY(*{yc2c%)ie)azsqX&Jo>{*CGEOm*<nPadq41ihgcRFNYflO=(@Gjb
zu9AwCWhE;Q#<an_{qW<Z)9HuJSXYwLStiz^YQgpM39f$7>;W}7{k=&mU$ngJVIk<T
z*@pm3|EjR(J`?QqqP4|YbxY_i&bq|RYRk1N+g1>lEuYP0vjB-G2hF&p%cD!Hl`T}l
ztoq%ZnfYzNX<C0D7Ug@d#>V>96`Zo^Mdm$7J){T|*@!CuvyLQBA!hM~ljyBaDaPKa
z@^6vR!LVV6%I8x2DF0QIz(l_7=<%<(V#m=l-)eYq>kMt%5*koF;k3*mB@1Ya>N!k=
zdRZhs0@dCG-yYKmg)gxI2};iu)rqyfs9O~0x)gGp+LQXoXfS7~^QQ{!2&>}vDT2cv
z8pYX}NwWHJM9q)f$b#`WGRGl&iPT1&AKZ>8P2su}e=$-2BnfOFL;vW+bVLV|c-{Ww
zm*9bjsH2J5fZMjIllu;#g$`B4b~2H$AD$%>7$GMDNd54}AVLSi-sGR$r0n!g>}F*C
zUf*wwB-$Z6(0tNuGWbFKR)>S)f=^JW)(pe{YKGEFMkl>9T#B*xL%b<;m0#w<g!-^+
zKQnUsR~xuj^eZHqWRD}33-%3F2M}9=2N@OhW#16hX^@!|gZiLN;Oe>lsm4qC-Z`o>
zLFR=#ig&8{Ce%!`M`L9B&Jz{+fRJo2Dq_Qs4amepcCafS1aXUcZ|F!^h9xjeK0n0E
zbreIkH%=VSDknUy0c6-i^utXI+3wt)B=&U9OdyxPnjUF6fYs%G&z#T{h*I8r=cfy^
zu^egZ%b{qfu%LX|4ZIC;wyT-TP(Pf7s=If1{>$$lBhcJYW+;qbl68EqwNk%uUx_!s
zl{6O>+DP7h@Q+qrriroX0K66H#q?ME0qqv)lPl&oeh}kKh)EEJGAgX$L~rK!Q#pVK
z<qn!Q?ZC19KpaMdcCq`|$`<qY3s&YXJf~zr$=k}LQs3?m=eMJHP9dcOOEon^?7yr3
zHc<@HsTo<--UTAv(^Bazd@Z6429L+j*LQS!PM8P>@@$p_bwt6`t}D_8>kJVd8Sk6Z
z5HGn_SJ$`~=yC*@xUb0n=4&DsEEm5xo5{wRQ$4ts%ZqFOc2avIv*q$rSSKIc6s$t6
zC9*K_BN@@kUv#4tE85EsbE|%}70g)DFe*u1$?+DaJ>(aBj^1VQkMkkJmwLH}$t)hh
z=~V5sDIcv79TriSQTZj4lDu~{LyOj<W0PpTomxY|%ga2_Z+eyl;|JAzs#NAkj0Dq`
zi^8?mwT7LoIB9X}*}7(v$GMe3a8sMkhe!EVX=)$b*!*j5`DXDZ6Wcx9+#)VPRZ-j$
z>I1ZHa(y-qZyYa3``@aK%U2NjrAv`Gdf2Az-_Qm3&91G({iTc+jH;mB0gg3=t8+DP
zy7_A_M4kEI81@`K7Rw7}P#4SPOr0L?JU@JB?MvU!X43~fdBY_K0R<{uouP+l&9EZ>
z$sB*91d_`BS9zK`1tGs|0;#C{ixLxqgrpRH>a0(Qq~b(Xt_}10u0=e8m-Sepy&T@g
zf$s<sgpo{*KgIzH3466ff*yG+bvk3VauV&>U5l)DaDL|)qg#z`;xt_|GxDSo+)irt
zR0@A0U=DrT7DKCyL1Dd}GRL3|Z5hk32>W4M!hOll74)Q}nfpP8TIhh9A-J&^n!$PV
zS9ms*O{Pml*n`bCV5Ps615w%5fRK&(5i<{N_f4B53mZ@q7;6J4MM;v2O|&vQ@QFTi
zB#wfE4lXVp*_|r#Z+PYg5Zhh;?~u;=vdKB+Y?BqBB=!(Bjj#`4mN>MXq|)A?ED1cc
zE^}r!Aa0)S;B1dDk&+r)Fn~gFd=|0gttCVqNm=H>xy}H-DSL9tW%ohPxTPu;OG(ZN
zpDhtWvQF~34#^TG(+e%qegUvw)B}UPjuYKKc0a<%i$TwR+83b%;I_>aabyd;(8f8^
z4xjPHO;j{D@oHf7Ev6i>e|c~p!TXu*JOJVCsqZ_p@(o-RlorQ1e4Q2|93t_!G{gqo
zSe{&H_TvF(0Fzy354Bb;>ks|PK%)A<dU`3iU-U)W-i_Z5U6~GWjEC(aZ5|l4FmV<o
z9t8R@@&%F|@XIhijl5;i33?_f#`Bf>^RC2=#(J&pK2Y3oQ3kI7LN*@!DFf`nN?O{E
z_>@BQMEV^i#{iO(Nd2_qd>T3Xg_*Ca7`A=bsYkbZm{?^WDPwbp=$tb_*-L(MmaZrm
zc*8JO7;59}6Vx`p++z9N7?yM@J((eK$VJe@rJp)+>)HyDBD62ltwN&<qqXpU%}g8?
zf&wQWXCQIUKjKzPVdNbTBqboq&+?XFAdiBj2B-vN6@3uk!l?&na{+9?X%;naINLCG
zWoCa!-LRHM4IXGxAnyjL0CES+DX<YG7&;vOF7}R0AB}0KW=QVN0BGSY*ICM^3DM0+
zUBRFgppJYSN5#}9mejh$pCF&Rg}9uaV!2Gu2${}a_~}qQj^!W*uEgT&s45PFK?%nt
z=(WV2n~(k!TYgG>PFr%S@OjGTyH{j|BuJc|a?ei2k}|{OrI4*{93^rL%d-Ve7;MK=
zUtxmXVdWyP6gqUhiJB>X&1I{pQQi%=M9$K|7V7(`D5@B;-}1W~j^?^v5b+VmhcM!S
zLw<FO$u{8<aCutV4Yy1!X&mT7dar{LZ2LxHOGeF|_xW__ZQL%-3VEVYJ<y<r>KzJp
z=U|Q92ObDifE#$B1rh!kFr?=!{R+Fo*aJ=-?gdP}Bg(}Jgi?YPj&K`dF4TLaggnu@
z1KbJuE4^}lD8DlH(0?H9p$q+d2^Su43PT2h0~79&?x^L_g@)XL%$bb-<xummn*}1}
zn2vuTxC#R*hk>v3=A<WIxNL;+HNxeIBevriXPX(-RPih;KjioZ|2Yrj`j#f~rR>)^
z=ST{Q=Uj?sW>2}rWj{*nHa1Rndg>4uw?rm7O_E(*-&>dg+U+X|!f>DmQ^lEFCdiTg
zh6!d)^{Gh4MWFVCCNHOM*=Q><48szI4C6i1%?edqaysjWNpQ4a8!g!z6x+(CbZZI+
zL@fOPo0e|Wjuvg@DH>qIi)J)4^-!P~^BRpSsKYg?-0b;5kGol_o!hVnemDVsXp(6G
zW^xN4->PQUY?(}|{3qE$H6&Oa{i1qnU2V+F*;OC1AK)xsLR7~)Tt3DF#*On`A+!e3
z@%~~gX-7(=x6<J)B6=_nv4K8$Zf2EPP)W2Uvrr#qwW-kmRrAy6jZt5lUM8{eX_^5L
zOcTHj>Q^?-#DoWH)xHBkXM^lGb?T?5T}OAj$z-Pdlbe5*u83q=n25=)oL5M1h29rt
z*oe+YH|tepo48M)IcwX(J}Osp5Ieblx`rTsqr5LT1fRoNpe{5Zh{MMZQk1djWUn=<
zji}v+FWO{iH$-SV0Yj_O8{;0!+GnhBB?Qe1ytU*=mr=t|LqbVYeQYHG+-L%MQ+=)_
z0gfR`<*f}umPX>uo^_=L_%<C`jYf(#MgcQI=tz1|p&2}_=zprzQ(70ylcC!D|H3`z
z%W%r9;}D`#d1K9$WtPTClIB4agr9Oelx15<Dso`(EPcl^IksP<1VC$a<f-pE0?4MB
z0xbNn3|R_3M(Dv5XsN!49#+3`!x52Oe1!@VykpIN$Gw`Wm^g}_p%%ndJq7B0Y3hB5
zQ;g6i>BmSK9`L16<QnJLGjj836xD#N^!#CUjGN+O=P=oM!MCO5yy~aY<l|^+1=n+4
zN!9q2)D(5!8}9UcY?&=BW;I^`b;O}4oggymiD`8e?_y?f0=hr#Djff0=1(QG58Z}u
zPE`}8r@;f99{}u)1M&%1*JM8V`Si)>)pZKf)4?=65973^pl5#hC?HsK<M9`#`%oXm
z7`i9K8h%2d$FIk8f)5Y$B}B{8ZXj{%e!>z}RNIck@}Zl|NEBio-xa2USkp-}!d`jc
zp8N>cmLIiU%c8yuyQ<nKKd?YvnmcRzRX509eZRo3W`;@4;$c?WD>He|y8eaxecznj
zLLqMlw&7*Z?e|5&Y2U8jd=_oWkeg*`dH%L#_0KA9&tb23tAm_gPL<$W8#E>*ywk6L
zJMyofA1pQtkkWF3XO?(RCEjJYMMx^lRV+TSg{z0e!~K=F9U|o~SQB8}bD>x?6tdi{
zOWR^~p1u+He0(O@L%0{h3b&_Kqu#JJg}bJqPWxof|LB;4{~+M^1k0_ycs0h~XNGf?
zk7HJAW(ED1C1!06;~oMP1mu|Of7f-9`TyQ^`Ojqd|JHiZ`A&N|#td?Dv-e~dfkA;e
zg%foJ;T-^Rm6nEK2>VIF8q&tMna2R1ljUwT1dPIP8ii+8-|{tC)vWFMp`vnG*Y;=0
zc2(1%Zq2vV7Ws1V#nOtpyM;Y5apmMChx<0*vG408==S|2;J1DLzl-1q&_X!9-bC1U
z9f7lOD(?wI<QCBvaKj0Jlz_Rw1z_BDzryft;PB%PHt>NWrb1g_)}hNAFxq11jg&th
zT)?^qe|6`E#r)7>)c8jZtKal-z4jkqRL;I{X3I&ZXXvD+_Fw#{oqgZj7CuAZ{0XtP
zU&^SSec$XBvCc=-te5sXyWMRw$+h5X4EA0`zb_E{HE~<W^q#fjU)<<#9si*NwVQX`
zn4rd2>X@Kkz~6@2AjnPkyfI&muOXuu41K2eoUjmB6GNk9p%PRv40tFlI-NR4jdzWA
z%@Y=+oh~e5p6aUIWZC$SD6V>G){QDl7sIHqqIc8H7<F-x)pS*k1hRb!dgdBSC~TXk
zCV`>l?f`H?*}KxY%4S12>kFBr!cG~c(^FT1N*dT!8l*z*S;`(C6W&@zkqH_m-gsrZ
zG?F;}Qc?!FI0Hfl)m9yQGpfztN($T3PHc~Ga#7mo#?sDG;ZST`ksqek+H0ki43g>6
zTegDOFyl|idCDzds4^7!q1ha)jV9q6Heq7d(ef`qQkj~R6%me|D%wR~%B`L<HP=Iy
z?8SV`u=5`jh3=^l7?c=EQ&G|7tsZR|FRzsnf_!m$m51#y7yu(pP8B3+C>|Hsn!qV9
z?btA-q!8b=b+i&LMM#CdKqE>?jldIw9$pd;TN8=$Dq_VL()-kIa&Nv;Yw79)IzpI1
zQ@v<<3Jpy0rJdmHitEvT*~!7hE^z^^J?^1_zgpz%maLmRXWE{1dvsFF(~`S%;lec-
zyUIvw5!C@ZJVSAi9GsUw+H|5lUv01iTk+8NX4?yNSMt-#Mn8k6Wb6BOW=*2RLTMt<
zFysxc7Y_x|($`58Cdr45>+pxq5w)2eF{a6nbQKj$cz=NVu2K|mj-E4tV`dpkVx3xs
zS)yIDu26`xl*Ht$T)sk4l03jmP(91B*;rmwswmj#>*{kWlOn85QY0w3uaz#zaIIpn
z@9|fWM)<C)IA}{%8#)|R+g2O)N)_kz*rhS)#Q0IGuc{yJ0aUJ(Z_}k)F&D8=<kd05
zq7A#KdPz!9+CP~Mjrf0ObGf2`XQx4m4HsQl{NA4;eAwSH3lUF%0OyXE-1tzSq|5uA
z8u}>rP|KgIUOp_(_xh91hdW+^=NexT&X3}rfuCc(bXCakH~SZJ&F+w&<ZXIonU?Lb
z(dHOr;!w5-r8ojarJRa~ghbFh<caq`!8=NxSyRRQa%X9*wtAYpuC6!rvJ*sU7Who%
zlqJlv<$}QUdASS0ycD{D$ptDAY6!?ztlUUtevm`5nQLe`)WIk)j$v5!VqdB~;wWiS
zR<ToS1vca|7<4-c9Ze1+k=P&pZ&<4O2k6`9G`GtM)uWWlxX#HSc=i~LFkCP^StZvX
zIs@b`(I9jXyV?xKu<1*lrcV!xfye0NPr48tuUix{Yf_0JLK1&$E{Ce;BR%-Qe=`iw
zLO@px*?{FDS-~`>&9-dpjGcIL%>&#Zc(CWt_rbWB%^%6Qyc&IA_2~vIoPUAvZ}ue5
z)@<|uX6<lozn44aPY^%cxdlhra_ROta&N|5LFpTp;xxeKelDNk(EJ=iwmNVJO&GET
zwL*oND>rdLdLA#?%#C@3$W4HU5CF7=OBa|N`Ze!uU`ExdJ}Hs2pM$M6UXs;fHpaJ&
z)~>d+LuA06Svla^P3zbh-(l8rs^UZN{3SJX$FnzGr2IKz8AePafK88D{^!`j<&bXc
z>#g$$r5f2Osq0=lY-ukjj#Pb<_x(8T2^33z)Kesi;lkEQX^Iuor(2Qn0ZM0+Vm+cv
zx-n`G`!O89TuDcp_N9S?b*FO+bPOoJKSs3$;n$?q)s)qKYUn8HXkWB>Zni5$bD<N~
z_EEP}X{}(8mnWNgB1}7Si1M?%#A~$QmFcUGW$1=IcniABKZg9MB1oM4)!archT!IJ
zAlC%-?9Rn7ZyW(e%9OW70Y9piir@-ejps%(@?OI0k&0`wR>_6GVGD!qMQ+2Fz47^;
zX#tnrtx*0SLabKEw04<nEw^jVmx$<Lep&fwUpE+W=g0D81^~^Zt!{FJ=L0kQWE{-)
zn_G`t@peQ@VL_1a1KTB5f9-4~TkLC%1&)Vo#^-QGL|j;gi)OZ(sHDPI;JVH<fh*#`
zR5Yl_)8j1#l_@28wx&ijC;4dhq-J4|+4jG9lgG;l-V+sCgle@~9on@k&<T0MFGUlw
zIhnDBYUw7`X3ezZw(8VcjdPur0MXh8uHMC75+$o~ar;H2w83Ut(pX+;Rxcb%8*#S{
zYKL~Au*u%7;X*XFB3SQjw|m;GR^O$wCq>5JRCWZrHd<k|O96>49XH-+llG1yS^LN2
z{Xks><tyDrVz%|G(Awj&cTzvZ8}OHaM76H<D}Ed{={!hYcYgxKig9_Nu`)z2=A)}N
z1nz=TbEI`+1nyvif)LU7!4|6D-N>%UrE!-_q7PNz#)zFRs0gE@EJ&9{d0Xrt5ooFt
zKk|PN;_!ChCk~pCXjd_i|3c!zAsoZ2W$!jgTy>+IjKnocJ~ghfLYH|<WDy7eSSjWX
zCh{}x)lp!gcg)=p4eu$51==7yc#1OV?Xo<9Wc?M4ic}iV#fhaB0nN{p76TP5cj8Wt
z?OYHcz>UDO7a29qWYonk;{^G;kuNeGaqFBLhFT`anZ>mvjy>=G(2BTT5r>B-n?zMt
z3*8IS3=<$&<Wwk=64d}^*2wO2aJJ%P%v`P*D_DJ{GSP<>w$v;|l4I4-YEK+%t)K^w
zH|Qx!<VdzL3p*h|=xRoQ)`HN*KW#ncSmyDog8>SX&l5p%%vha%7aq~i9bv3daIJBC
z)L38}9bp?glzb!KdLzYDdE}4zun-%R+6EKXRWeR$vw`J?ni)%7TG}})jS^A?DgbqT
zc`(#Una4_uG#^rE2a2+jknYYtGxT&wOaS@A8?<%^-UQJQf%*^$=CEubDq|3<2dw=-
zk%#!49<^ajEeW1z9_3I;X|nuvs!-nIzI1@U6^X8^s5uEnL&GY5q6hp*nCd91MqSk!
za=9(3UZAUeku$rV&|RU_4%>jzeOFeC(m=S#j?3Vqe;2PSpD_<B6qhwqW-&coA%~BQ
z9ZKpt1d(=@welot1AG=B1b8Z|oj-ux0DnaI2eU-4T`(K<8(ab)6#k@AI}Z%IjiUDB
zqV}6#Pno6Y7^H~~<X)}AKVSU?8{!S`zF+rb;*Xyj-7)Oh13ov{>kPZ6Ak%|gUsBeC
z-)(}thum=(>WnM|!Rilzv|n<EBZM>$M85+QLS#N<zoQdEb~=plJ&+2%gFNaqdBk=G
z^M!Xk3@T6~LU&rh>QZ#6#(-Rty+@l=19JG?CTZSkN#`S3;q0-;aoh6vsV(w#rKPd%
zvUG5M13@LHZ$0Qhos=)LELrnxFw_W1$%7M3V(zF&dn90-)GjqEUg7Fue^dITtNEAI
z?cJvAoZ$TK`QiV#ycr;UB}C>)taj-|c$kwBIS&Oy7kf=b5h_``R=kgEWBbfK+H{WZ
zec`!edZ3(i0}2ekYm*BZZK@@96Jss(`OkoouZ8oeRoih+mi=JvT%lYJC+TD}4*MR%
zcQ>Q0s*vnI&hDS$3}WN4j+0iYqOqcL(}LF%+;s}DEFG7v!RNBE3?_qOuNT1QvF*2*
z52PtQ6dPI?tB`@Wo#Wz&;?fi%#1<o9s6t6nTkV^UBQRV{{+u6Cm>b}k8t|SPfUw;K
zrUpl?Az&o+KrnIk8cgn`+%$VDk^123JJv5C5N+xodhm_X?l!)@a(I@F)FV6?s8u~j
zmvZJOHIE&_ggT&3!4`#}&{cU<sQIVV-D{-uEYbFn*WJ&O`lOlpKS#Z$m$u|cU7etJ
zL$3I?{ns6P6k8Y*RMHjIOHRdmOua)r*$3SUJPp%lLq*pNvpC)CN|n#2)m7;$O|))}
z72mx7zQqNj5Vjx>!?@zxtLAT^Ic6ubx6cuzR`)ngjNMIm>ZD`(nO<S_Wo}B1#vgy>
z7ysD7z#7B_gGSnlE=JQ3-^bsFymlLp!=Wu_>tl!*K=?5*<`JG(1I3MNbp|VGezU~J
z*Tq@R`(l6Q+mRE8I);y)KRce7<|!`i9D|sn@n_^(-yurs3@81@w>BWQgHSP+^wq>^
zva;R$;aVS4Z+-PokJGJq^7X_P6)%|AlaQM*U(d|H&X=qf^20=4ey!~pnRW>KmZHJE
zVfg!-JpfKIGNcx>zQTv!gX_LwCv)AhkTb7Wv}#4Bj``Sy!IP4g{A~*8`%h$)UFZJ5
zAQ0VPVO$97K~iS|jG_AlFuSvSg)QAKt7NJrLHUBI%k#akP?4FZfjA!3{@Xz@loml}
z>iET5FCb6vKXC7a_aY^$lt-ig><G#Fp%3eQFDJr&ZzTM$jlH7({}kPSFA&XsD>(uS
z%%I;V8&{UD4k=4qsaVoB@k<1POH0lan-m7wB@{MA$1vY~O@ppY*zOcAQ54=EBBIgy
z5@lc^(BbVOOE9jLg+B}bbN#IJ1_onCpM3?eZ(hyKrH4I@&zC=*@PFQZ_4+)X1l-Ey
z``!jeL{&<<|FUKjoIc>i5;ndU$C_{P4jxU={>U7SVK6kkN5>MjxMz#e(*B4Yo!>=i
z=&~W~&6a@nKH?<u$<yn1UdDg=7I6nnMlIecqfR?ddT)dsf%6B*411>cQu(jw9iKA?
z%nW;$_geX{_#K~f2gD4YlLv(Puh<=*vj+xPUoOjjPe$@Erli_D+NJjpIiyRw>hx^6
zWGT0bSUL>)3_A?XIy4Nf+DFY3W=ZqKKf@!UESqS|RYpwP)d<F3c)e{|*J)39C7KGa
z)Y_ztx~sXN#j8n1v5{($#uA0`G`_)jorN>?NzUr4kY()3i7h5HI2UT<ArEgWjGsk`
zH}Fy(K|CPWhk70kEI2p|Z@y6ETfDX+34g-gKKO^yYVo<SXruHRM@TZn?I18cxjovS
zUwZ^+`^q()l->dDfO19AA!?cmm6Yi-{C`EHoQU^i5Wm{rN_K6{2cWx0EH}!h6_GP_
zFSqq-<!g^wT6O;c1J_&u=HPe|uGjT9a};SDJ#=nGOoa1!W%!IVKDzVwPA^()GL(`b
zz(4_sB>nAp+Fj#=QN;4ZMX+U)isx2Ojy11$zO9rMwmZW@Pu&`<yGv0<gmhpOmwGt%
zMUHBX72ZY8!HU$uir`-P^R8V=Yc312uAztW?`WE{L;ezcey&z8>Y^3|_Yy7)$x3sm
zSEQ#aP!AFK{E9ywRY`@y6nZEkE0DvY{~$zd$}I3v_2P7iB_DM|P1*vi3$^0h-~D)r
zmgTq~dn$}pd)KV_n_BGw_gvgr?K&~;2?!yAQgagEN&AKM61fL3oes^+*0h?)*5GOX
zve$@J>6`lMpOGA@az}p1QEhA62eQNtz`lz!+Q;Bs)F4BwSgW%Wt<qxcv!;wg*2y#}
z$3!!)Hq-<-h`hhACYv8~F7>~%=zC{IAw!Z2nVBDuJLj~pQNcImDkyg=^o-D)jYyE=
z^o|+p$6CmIP3{BBad903ua_2R^a*0$7C6Dd|1s?nZ>*gVa}@0SB1c<UbyQIHsj7qL
zv3=tMJPnc(dRBb~a}qGzlmkJq0GJcT@Q|3sK6W3!p#CLQZV@a(K|F7yaL1li|9xeT
zVXxp(T}Zp_j=c6?Zmb8Cc&9413FEAilh@r%AY7xW8~OSU%kzruzoIDIFmV>MRcgEq
zx!n2zTCum510#`7l9J9e#0Nnao?WC(FR@FBD2|ZJpzE^^_=t<;c1%2^YNxETbkdnw
zqeS#rWbmgSGScTJ*2FEc<<@87)d(1^U7}Nklg_Czu?YyGc3PyBM+Zee<_>5Q0)sfL
z6HqG$c$k$&L02UW|4jG(ADn$tkZ3`aWc#&k+qV0)ZQHhO+qP}nwr$(S+n(8o-I)2<
z*xk=_Z`}I3RVOR+WR@E_E5nrLVQ}~`-CC@Z>N_tJ=sn%npc_`1jHuO;=C@Mkw`O_z
zr&nip?Qh)l*R!Y+tJN{)t7gt=I)if`9&huEv~lM2mQd!W?lotC)GiadRf~AgRMNsT
zPX2XGWku$HCV?Y(w^yMt<|Aho0EUG54HF45D-_^tojI=Ow+U`*j@HyHm(BOF0c~5J
ztj1kokJK!6v_xv<6*#4G!gaMhQbBX(8a5D4S}=|vFQh{02(B?WBSZN>);>l)jwpkd
zOamiQebl0B<&|C~KTxYrS`~67>!<^+wmfHwC_`4Z!tYqkhbo-!!0jl=C=Y4(1U|GF
zVk}jwnVWu67p{V*LXoFZp)hD>mqD<cEABLlCA<LnT5<z_h$fUlCS%a$i3CH9rtYH7
zK%S@8P^&twi5(t~P$Q$s^ISs>>pol9rlu{4lq;C&qx3;Tqbx|CK~rK(=2VqCW==(F
zdI-cgL$)5XSFC*iUH0jd(4MPO!&yM6)CFB$yMG_pl%IU5KK1zv#R6@;ULay1Au}IC
z%o}_?NWodREM;#9-()6{jw>k($kvWQU0acHRkb%$K%x9GM)KfP*N?W6N|0)l^x@St
zj$SA-G4$TJWSXdHNMFlJ><wpJyOn=bHl7x1I2dx*QrAMnZLcTZOgB2%q2w(M`A<`?
zOw4ZpDIHEfOX?`_jr0_{Fq-3YG#nTU4w>lTL92%Ytu@5*Z}d~8NV$7NUJM1c-xa`f
zH~IS)AWu7Wx?4Wgd+<!vNJRZiQw8_!TuxufX`F@oK}OCD#v+gYFSVI@A;iLic@3YH
zSJGM_Dq=ejE<TrqEE~vJZ-0UsU_6*KYq;o{k@+(_qsyvmPvbibiqzXPuuhTpaBFS%
z;g(x1FL%%1l8XFcpBby@bnwIo<69!uh03hFsG%V$^mrGz09W1K<j;EW*OBsHM4HTC
zFr$2nJk!KG)4|E?kaG&huHj5B4%_YMvgJ%6Z1SVU))%VQ_sN%vBQH9eFKmtV3AcqN
z2VP9(svS(m<7viYeA_!Y?RFL(<Mk#kTQBfx9S0xbGmaMYp%0=)S+su_K=&gB3{8RZ
z?{t%54y%MawZjBYqX>njgsS@uIfuH@of2lNP`hCgWWGXEuCKH#-Z9@z9ME~O)7xb5
z>FjVtaGgD_il!f7Lr_f~V@F8J0&r7QMp;TmF$r2m%30lz|K|go-gps;Bn4K3afC_}
zz#~J)Sks=}IYhyer};|{x?u^n_8)h9Acdm8E_>2i0;%d8qv!Ng4Ol8Z0X0nyF^kw#
z4oJi@l%x(l;Zx+jxeu>ud8UE~+=jr@jRN0srt1wS8u{OGs+$cbYWbQ3p4RFpRLs!f
zkI691n-_pE4ZA7J*2XviTjrA&4GlJ-TPBkk#>U5RV4^+fO9+9SuNrx1e_=NoOf=N#
z{JUmSSOzCND2i+*Gi;2H<2rU;tc%t2r`W6}FX{wb1$Oi-E9*8qXh?0Nj?>y5P*;7R
zt~@C7G7Tbg^=Ng*^u3vki>~+6;$hx{V9V1bzedZj?)P_ua5sYSycmz{jQP<@E%RvO
zeA%T^$Bj(i(WiM(40dQ0C>Q3*aSI3SGiSe{nPccbpxSc7M+O);5nBt}ZiNob3Uvp*
zshLru=NZ~)c7!=l-mBy+pp(V{SNi@zYDpdeRAO7=r>I29AOEZcHZ4+*X_5!J5IOqz
zN1U-9`E8mbZ1YQ=$!PHFmT-PRG9GI$NqE+IZU^F6&^c`Q95s2y@8ABJCD)eu1Ale6
zfM7F0IWgG#_2u=E<rI}Sd)Q%2h%OX;p60o~InZG+YBNE;lc-|qM&7FCVU|@fQ^Vwy
zq)F|~%+TN`T9i6ct`UPhOtc`2L`1?($ipJT;sDY!LB;CD!k|PNTGTpXo{p_S7+Taz
zT#=^DDl*BS9)+ySjRBNt&U&=E-yXWxE((trJK(vS7yN`yQ!-kQ#KT{CE`B8}OJvIz
zsC}z`bvjGH#1qT?0OS&Y_G_3cAmE8X@CLapQ9CeNJJ0K(?ZJ?$b(=tFg0h!8ddOdP
zJ@OgvFFcy2pUWjfrMEXBTJDmiqW(CM$#A<%*=)<yjF#!Cg=<NKt+H9!Yb@Wp?Q?&4
z)x6tc=F2dAV0pE?TVJ-T-|Lp${o-kFKf2*sqW0yc=^USv_fx!fAl=sZL0#7Ru<ATO
zJ5iwrR8NPBhD)AcC*NUr_-w4`KNf$BRKBlGX?Nf$L7ZDxjnQJSKmp>uiP&-@R7Y2D
zOb6nLa2&RNgy2ZJ&ZF|O{pMi(?UL{vh^IgQQ&FyM@FC6ctzuiKnULp+<{+$aJ+HS+
z5!}TEXug6=RW-&q?j9SiWyUL=a?c#C;skoMgMNGD!ziOe^|bco@%NRCf3$2IQ~B9%
z#~RAIB~T~oDGl1XKJZ2uHM;@OWeyoEN@f~BfDtn`kdycc07b2J;^T|@1JgnUxT7x$
z($xL_Wc~;<t{;w&f5Shq;x8CqQUFIetkK;dMOq>yKNw%aZ;5JjS15L%Vh7qMzKkE(
zoBsO<*XXWQfu2k`2-=4l)KNitY;W{@lff=TifHCx*ffSzH5mFw2J)n+Bd%YzNKd8$
z8sp38x7_$Gi`@dnmk9!UGk=%iHM(1*u#%~Ozl>+g4Ob4UBuOee<Jah<_y%~tDO^8v
zVw6#Z5S2;~z|o&@F-y8cFA^ASr$6%?qWJhEFAL+82WnoxS_&y>1g?H=s};UP-m;v(
z82VOV$mNasJSK;&>GRHIkKkm|cEUrX*c~mRP(N_1&*5Cu{`a567X1<7Puj1Xxa<EY
zC+7bDhC%-e0l6tHqx{@vijy+AtNYhU$t3|0K!6O`5Mnm`#fLIM;3vUI5M^Xc4`)I$
ztZTVhQMf)>5U_4`=GR1#M+$%{bFNgmRH;<ftk%3-v8enVwmIE$PoL^?2Uh?3`tY7|
zcYUAro#k=mBIEu!-u?tY4$s3`ej|!Z{bimGlu>;R?oCl^>)o=4b=A8152R6TImEiI
z|KjY(3;@G+1@<~T?zX*a({`WseZKh(hmOB-{q!FYVez`?A^w;T_M*Q*u=!*}`5y97
z^E&E5!rG1cs(Z~GK>g_%;-`eDgI7X<Or_RpaG>xPCRDZ7k}%Letq7DHr&dCxfQ_eI
zXd}uN28)zJJyeS-)#0c~+xuHT)({^4l|5v@7)e2$^^1h0jO{@piPWVG?U5r3)ul`e
zuu+-Rri>USNgdv~GP4LDtO$2WAwd#W-@mMzHR=|w=RuYzYgHdp-L?GvP~pX_&Yr=V
z^8BoYTQ?U=-a)IP(8MekSvxy;`YCPk&mLM5E*38GYA3fh&Mhr(9zJCjH3I!jWHT#A
zHODY_=D;}+3Xg-vB0)!%l~q`km|0a-l$BE1R#}&;%F58-m4PUXc{%>x38j{5{swv?
z0KLGf=Gi=&n5V7%9eFn@R>$|29{wOlU6C`xEvgr}B)M!g>kgW%;+=L5shm4}XhCBI
z`L?m;QfFwkQdV|$_ZGHx9LowpCxwch+u)D6v)qXT1jJ<)TETJhgsj{K%!%vn-@b7M
z?fgDU#R$1c2&=E`;;+_zM580iuKHMTo;G%tZjNR+)G$vs1ADH?VbpC+HL-rZ6vos^
zf|62i_OaH!{>WhefN0Vw>aA#<JiWeN;!xluthh>ac78stca$N%eV!}0m%214VeBAD
zm3CN=VeBgKu{QTMmlie@_MSRp^^b}>&gh*yc6GMk-w86uk%uwTP$^wGceGvJz+~>-
zJdP(pH1Z1Hyo9Ait2>(Ejc5IvUK_2kSh1~B-O}lpcw*~heUNQCz1{bneyvfr)z%z4
zp3U<y&BKvWzi?_>1Tlv>*7LV=cN^vD-P(Y5n^Dl&zn$5xvi5g4;?(lhESTA8uC?6L
zaUY&Ej!Ef+=c)wf__c$ZY8`rdQDtMJ0u-ocj@r5)&IEmvRu0=VFBwz&Pfgy6ilCWl
zX9`lK7PYqI=$uR<26xJmKq*_i#!)?%>=P*&ZRE#f!7P$3Rf9b|o_m?eF!KnP1d^fq
zvve-T=AfkR@CvEo?i@lP#$3NdVau6ep#oHGqs=)4sYvv*ToE*EK3qDp8X9|!6b=$!
zcIjMF!AxS{Y?zh?CebiXSwV$QMA;6!Q?pIEz4N)J8SZu)kB_UI<rBowamEc6ud%iB
zc7M$ces#;q1@+0`aT$A~@+D-)xlC*LJAq=<>9ULoXp=;5t)gBa$9u$1Ude5~e6D0B
zIbz#g-B-ysiYXY2t)Gc}ZS!Klr)T9jMj@MU9`WlDilLk>*>mmaT*ua&iR<TCmvGhf
z8AfXclMm10c#>ze)?*u2czHA%POvr*P3YQ^?tE7(jAK~sC<1Kl3R29SO4LX5<UGe)
z3Wfo6@2^O)u<4G9ehl~N93@i?-9u_hi|cI$h62~!jCh+k67&HM=HNLzFU!Y`d7c&l
z`T7BrE317r70s$avS*4zSn_n9rrQJhC&t~Is4Vhmnp?tx=rKP;W27;x3<YKxb?Q)K
zyli@{4?!}`>St|CV1E!_T|Oxrs;$L7>Lvm@Q;Mkk&JL;&OqaREJ=qZ)nN$;7xSP15
zg}H)Mm9o5OxiEAm228g#cR(lIphOg!Gqtq9fJ#I8=|Bm^$4xnFrdWp7y{#$SQ(J2z
z?3q$#Ux95y*~;V|Cd(R0Qn?<QPstt?xMp~rQf7!VlU)R5xJ?a(WX%L=w8DUcR&m(=
zz^x<407z6h>3|V3XcS(ne2rfu45c6{fLJ-{u(P5JKAF--hGa`9F!5fg137hlNJ6;^
zQJI^;;vKiAHe%TzIs%Vgkj2%l?NIcsp3*{yhAX&Yvt5I1rJ=RV1Ew+?|H8U}fB3nL
zA0@g#9EB{xxq=-+wcMb4EiWQ*n1b?St~Npu)L3G2)Frv1K)5Z<0x41j)%v$5%v7GI
z<y32H_rQ##skj^KXXrDDTa#42(zoZGK~m%940Jo6l@}(PK^?=8xgnHeABeXakVLz?
zL!$R5DU>Q8N5$v>s|<iP?XcfpE2G8cghEb-Q8?xa95`!f*0OzeS8=l4sd^ujVCAp>
zc+%%~W1Sa{J*3ZN^v4+V$OIvUp01fXy@!uW1n@|1o~hBZB~Q-ag{JM01j_~X!NL}-
z_5W+}Bq-pn{nrFJ#bri}%<hEQ>Ee?09^A>1wEdZn)}G<&t*Wfa#*QD{=F$$-qM0du
zn~HC~+&ax=q^^N5!+)yi3|8Z>s)>M&a<bQmvEiA6sb+<gjz4{sxGL=Og!i@s7lJZ}
zq0%}gFCbIcrCt1=%HqV?j4sWt9^6|!4Rkt#h#;0RvjwMI485;ZW?eE4LgrVw8?sYb
zS@Vz`lnl$V*)1rLnT397{Q?c$!b<NjlB0w>@Z+ka^4If6SZCNtjv}kurLSuZa?QKR
zqO&^n3XD7_q~M#H6+Npl3|M#6`yO29HEa`XO`jL#k};ykL9cYQSgF&bc+x?lLb}*g
zz}TpfSCpb|A}j_)n~gFpRXv5QbvY|7Ru`!7V)M21r!f=9_kXe<RxUPZkL}awUz*e;
zebt!%#G@0&2SJd4W(2qX+CLH9kY(aWd?CCs&RARjHRP?3|Dy*~VrM2@JkAbrNx`?>
z_ir#D@m$ouomw%8_A`^{L-Xu(;gcdK_1hZZ8}pkytJEX3s<ZrGQ`is9)8pAk5{8(!
zu8=R<x6JD2w}&r&0iRg!4fqdJSua_^KdF!Bix16WZ%8tvCv6#$2?p?Y>5At*0TMm&
z9o(W5^$)$-NvX>~8e4#KZ@EW>&$zw;L<_N$ZbI2}K`?Wpo0ETi1Fd2+!i?kVb(Gz8
zRHyjT?cnMY$99xl^wRC9jY*meqV9mgV}k}ql0-A}(Rc9(kltufTVVvi4}19P^w7YN
zdZX>^vUuE@GkA47{`Re*>xjme+zF?m1j5)y0uTQ{+t$W7{O(1L7}f5rt(Y8O^#Tyu
zvxtvXIUOouq{cd-Vl)f#CsY!Wg46$Ai=3$wYnN1si=4F+QzZWK#n3I3S40xeW*E_O
z%i!HYyA7#|*AaEoqL-AgD(jKdfQ2kq4OI5YF}c#vU8aoaw_B0nkT;`6K2od|+7b(f
zoV!9qPml>oc_H}{=oxjB0Nn{k=OtAtM3=H+Hf+Yt=<2nk?So5^<05oArJnKYwXDwu
z4drOI`0t8eQlqm=-DwkV{B$x5G0llawdY1CMBmoLwG7*g17jVLB0a2L2+}FtPn*_$
z+y2l$o`JBN0=hrGOTk`{F8KWpk~(~2cUJxvU%!jg<VXb*fyfq><l%`*EX@SkP6W#n
zJCbJelRL4WL8g~K6^dc>(UtLls(hZ-ZQ5l&`e~J3+6$U73`r>vkX#kqmsAtkFS(Sx
zt59NZ$DTip?|T5Dm^>MhdYgzBT0nwDQ_e*n@N{tV*<0{AjFSV+m<VH`oayp@L$>7z
z1#{$gFlCq>;Lj&*d_4&bOl`a0SqGrlh)VcyK2AYl(DUVzws3KuN<0uHea7Wo1y)>*
zf*b=HQNbC6Jit>Xh00fQN01&fSSjI#mT&{sJ`lH1$nHxVn`>2b2Vy0k+GRd;JuMoo
zkrf4FI|GOo1xK!*x5d*jJz(FaXM(*JpB1-&T(}3O&=d}pYXyRw(xfEBVJT)WL<6hM
zDIhu+RVZ>g06=L<P>+UWt8<CI^1oz(o6@$J$mU%-%1_pF!S&os*-*qgH6GpE#zi%z
z%X_#1L>fy1wu<4wwXh#juO?}bxw`{MYDfr73j4@7hI~<9J2q5))+ecDJ>heNx~z*x
z6&*w#-KUNn(h(`U2Y3BYc8k=`TRw4KceK{Yxo39$z-lD9&X;uk>3sn7NQSfbe?V~m
zXQ)-|6~L7&Td(^L9ZUY_uId3)N4{t1H>sf=adGbry8=D+9yB3XE3gn&&qKt`n(@54
z6Qg&@HYxq%IFZxO*yx4fwa^WKBqY#W9Gvc;w&;bX<AwS=UB=LQLu)jnk_>CfmIcqN
zz1^jQ|FeZX5YMzG$5?LHnD_1eWMd}mdUB(66r*cN>${Bnd3(Q~>PgcDyIl1#UZ);M
z{9Ov4Za9o<TwpcI7*$D<mXX@sAvh7AS2P616@BcFbtUoUn+Ue-5eul5Hby;KTEi^a
z3t^EOD*j@FSs2gam=Dtp^Q&h2`%omzhU@tTN5`(xwk-;2N3nc|_nD{^w6gh9Iet4C
zWcjGvWYn0%I7c2)>3O3#<g`gKLU+W`4*l)iC5xZ3$l1k{Lck6Z@U>_%LrkXl98byI
zvdP?|eJzAjG=>x13(PJ6lNmPf3*0P#9P~du5T*Dz9<g;CVCjL{`#5nWy(n0c-_xo<
zFm{P8j^;OBF_+^_UQx%ei#R`ac%KFIA6V?DUp5Hq$PVHch>s;CtH>_mml3v!;TKK6
z?7nLWD;AL*gbycdBf~=Sp6Q(xdKP{yyyniYorHmbHiQrD?~9G(z0*T_tV3;xAMf7}
z%_#cmhVDZc+KN1>Abi39q)rwgBwg<YUOcbxl(i?`9%xJ)7C5N6i)-8pH$3weX}s!p
zIrBx|6TTsOLp(oKml8YD?2JMn11T$(`}YhhSrpy=#sJK}3NZXZn}0=I+UI)e)};Px
zSb*~yF8tux%S<9}g<M)VZ}IOxlPbniu+N2m!-09J|4*zP%l|uE{jWIH_JNd+$=%2>
zp1uJYC<p{bpGJB}02L!6H~}C)BW;TNpzo;L=>&#g&0=%*#^pE7NV~ZDS4sol)a=rz
zY{}N#Y;jGfQrWE0yi6!D+y2Oy*yZk@j=#GaOLw~Sx#Rn5!qa`4<GEwETG_e<rdKc5
zRW>N9?iDpW>P^hMKd6A3J5>6%Ui!Xn+V-lB_p+~nnoBisdJl@Kt7MM@+%ptNhqh1k
zMj2WAE*Dk%7<uWv7HeyFn@Qa>Jc!li+81hj$i@9d8yU#mm7|OOppR;!WRKL!*2q3(
z5I2l~Do7pE&=x#gP2Dqk@JVfBcn?h4kv$Bj{uMSHtNazTnfm~JBX`f_UodS#y;Y-0
z6JJJ~2MR41%OVnZ--e4Ow@OSnUx$lCeuhnd&_N=HxZ(<eBu}L`RGo)FnBAc=c@-Jt
zF@4w4lh&>Xr+#leZ&$ZlW^6$uuFWwZ)!kP#Lvx)yt)0E80W@7Ly}7~GQf<D2j}HWd
zgefg<Z4D`c<iUF#4^JK?`FL*)R9wv!*csRiL4{at9X&*2@aQ7q5tWx57SDExU5n-L
zT*Jt*_@OMM)skOWXqgmyC5uZlb=?03wpjEGuL;V{aFJlC=<%$>)SwFIdQmS%Pw7c)
z_KZm=GNeHgr`xQT=(k`Na&9heIW)J4)V=LdMYT3PS*v7y{CdpOv3#U;LZS>cQa^{1
zu0&%}WtkU?PB!LxFGsy#n$CdY3i-BR=>IrwFm_da%`lx)rX$Hp)5uj{$Qm84TJmXR
z<uO$El!g$cGxYLo=H^UZG<s;_;6Zs)P;ShNR)#k?C(H?IIJYop9R&MwmYhCe)SOll
zztzZY%f61^5ru9(?dB#DFQ34=VMYoqX+tAiOZT01iZbRt8xk!h5J8g+o)~{}h@L?8
zcL|B`9suT=ywJWB1^U_o>SbNho6Y=XlrUw-7*a{Kot92izl})$nWRdFs^pL7CC8iB
zw5NbaE=s;)*#Vjpn43t9+sg~6p?x=r$qS@YM`A5Tos&T{I?r?aXmx}qNDVhl{pIHg
zPm0aZ_&1CP+_i&MUb2clHZM4JWrxwU+fz&8j=GDrwK8KGk%@I5dcE&qUPPy2_Ax}#
zB)G*wVZ2TOxFh+zGg;j+a=u3iQ#YsNO(VB+ZvJcO&GN@qqepS|)T?3!W%6>NGRLPA
zDXkmLB5v7Ra^Dw&!n+-qEY%D*OM*k6Er^8-%mEKNKga2lS;2R8UP6GQ0c&DSB1b(r
z`EAxju_P)Dq8auqq^Xt|5j)x>bp};w;)4=vN<*}9`{vq&s$7KeI=ecM7ZWOLP=O1|
z(Iqny1ErABxH_l6rB{xBNaS2zJ_ZdY?GP3VNS(}ZH|EWt3XJ8uHrtB1S~y!-o9^K4
zT=D*Eo7yli=8xYbGj~`hNJ{MO!E#;jG<Ou=0!hU_g4OCB*_XOtm?xKgdPJ|;8x^iG
z+_`uh4DO&I=1<6|GIzfI9}ng)99auD$bWNlu{@YLBTPV4BkmK-+>yQvqmI-$ruRUR
zzKw6OA!zrAk^dg<*dtR}vcxpDCtt+1`Ue3~FXsv5G7HJN{#aw`^mF=8SW&W|)Gi=Q
z_P7-dW0(Spsfu%60izD4+ZbHPT#79-0Yz>{fkbU9Z3eAAvKxu461!Z@8B&m-kWthd
z#V;s*p!R)HCnoo8RW-!+9X(xPPMan9X{F2WEPH-d`5X0fkwMXNI=?XJ3~^Yw$&Cgc
z%!dc|2p%*{P2TR)^^9u`O9(NWJuSI7HG)de2FEX1$YLmK!QBdYKX8?6?+zw~Sdl8X
zJ4{bk@D|@HsxNLpNmwZRFOqtxFG@7~>C@zcoRmX?yy;U++Z5JM(tk$pS9nxyS`t?&
zqMp_u?EA@^Ax3oJxv>9QFdQ?JOetupcVsIi*DO-m*5Y2qKetkzSvC<xB5uLdb!0-O
z>y1rxWhqkVf=S+x2uE0OgD&i>w%pBHpEx(1%}SpxXhHpKon?+tzBm>#=mrY#u|*y;
zN{OPp11XNCO{=J@WtWEzH85PthHaTRPXFsa4ctUXrs%SID@FT&1wa2<1W;ZpZTAKJ
zDjgFvJc}Jus2D4S<OvnVCbH(7D=YMs1T0G%5ypL{l#2!H(4pJY-K~rGDWfmCx8Tqb
zyu}jjvMu1Nz%|a55MQrJz6QFGXAvJ`n=cC%d7|+%Ul!df#}(+;KT<u#3n`o7f=<Ro
z#XZo)o1Z{Oj-w7K*zzYl)=8q2HDr_+b0|NuYUEgN<+dnob0~Q)=@V?2>Q@D$+nCpP
z%%<uFPQu#fNn4<flO;>k;)A3Z`KvP5%T_o!&H<8(!~qP+dSF0y3LlX*#z9;zRg%u=
z&=LKlv>WC1N2z^rr%2MwiGsFq+;o$YSA_#ode2Yr)+WKWpB0O5R%gXv<TKVl0M|ye
zesP6|xSYJzS)?QRw5T`Mi2is+tjtc}mTYpnJg+>?_WU*u_yyovhuqi;t@%syUV+tz
zhWq_b#UFVG<l-U)M`UB5PdWZ<hkhh;P4=*G#O8lT499+2^d_{WIQ|d#T@!+7rQA`&
z6GY&Pj}UTQWP8f_pRtqpCAP4hOgn-m;t<kCwhJdo^DV(G^Au2_(Jiawr!WQ&KZ&tO
z78AT?EVvh0Okw3qN=wiN8~I5@OlR~0?#Q^u=q6OL`6BLFS?)m36NzR@ISDf6V|@OI
z59jP(ByCxOq1=&kyE97yyLz6j!70Mlcc<EaV*ma15iH46T(tQ}ehk^$-KqO`WGF5g
z`Moetkk#4UKidOq@bMC2!G}Zd>v3JNPXw1kkeVA@!X0XG?C$UhO0B9h1Uez9R@oH=
zGXY_xq7#3U8UU8T?oY@OeC~znN?<{E$<3vT45ts4p5@ME0<-TN1MqZITCz>m45R7E
zE1fym8q{oVY}#4riE~lXdCzgPF${a%!w{v~Q7P+C*1Np@rsaAafq*r$QO^)H>!_N`
zA;FWwxMP+38D6xbA$W3nE2s~H6c$)08(xYSVM@z9%bnz2aTJ3Z;L<1+e2kCxQXTAd
z$ix{wwu#!{syx&)m)xDQhNd4-3VWPGV*cVl_DM^;wQBAEIi$+j<hr?${L*3m(xKdW
zro%4Lis#Ab=oPJ48h_MBUX*=k${sJB;8+`-WjtF#&yg7{;{-KMrO<Wm#ToRNHP>8R
z3Gwj)eTF~dy2B(4f@2rF(!sxaD1mlH$aaR}Ci()~#y@Jem%YvbK#5U<3pkxPM<fSp
z{1@upM&cs<HR-V=dG7VVo7JfV=dXqH^vdAP-s>SSh8~}Pc4{$*FZ^m-K=vw0#F>#7
zxwCdn5?RzmvZj2iFh{^JTR&G2iBf44W$h6G75g7yP(^tyIe&4`#j%mlV}dX66va;1
zuYb3nbx}5Z>PwpZ)(p+Hr7pleF)|ix^6PEs8?F1PYVv!-%5Tk9yCmA=Lwvz~ki(yR
z{~;&qV)IdA{q>0a{4d#Y|K0ueKa!XKFWhhcXER!@YORVSitIy5*QqatZ&fK$5r(<x
zml9N_7HlEkUr<)9M!msmDjw3-v3`6-EBqtk`BB_kKzF*7^Rfo_qUoz7duxTLHYNu&
z!7(+}{kV0y)9!dm`hL30_X8v+Qv63<D|HZtV=HMe3ftt^P7*fP0a{OH^cwl5h`#oa
zR#bzM_wa1+loR(%ZSFoU|26({`6gU%r2$mXW5zznb&%Ct_YGQ=h73N(a07*p9=K8i
zVoSMl!_G2UdDfe>!e6)E@}xsCJWk1Cpw?r>V$XxKM{kdf%{avIQMpyVs?%m0RrmmW
z>$o}j0Ciy2wwesX1n$6h7}3SLLj$Gf)&p+ZSo6$nNN>vJ41<>Hu$_b)!UW&K6~b~w
zxMwjbAd^GP4hk!VE<h{>{iX*{_Ea6irWY_*$r|dWKQp16@JJrcdx2PksF=sns1sB>
znAMm=#V(mZ2VLDrY|GB_sKj^2VW_)#q`{1f_b9yMc+tPa+VeyhAA8pUr{ZxwVBwVX
zh~MnQT1w(YN*iR}Z8A9iTa<fl=CbPYH>glp)|_FG`B<_TaZnAdY7>2P<#55n0qydJ
zvQt_)Mag>KOQ{VWg;pZJwVO$vl8L$!>4T4g<1cLMgD@`M?X|t`j>|ZWJLFPMhxqko
zdy>PG!o<8Jg(zKc(2~-!O*eGUUX6S)%chqKuXO3V#%NCZZiac*&^dF6J#{qFSTO^!
z>ge%BnHEk$CHG8Rc@UcQVmTTb(5%Bnl=p1(GbvuT3n4U|3HExiVwT6ZW|k<Qa}-6*
zr~c@jqZPZ(8BH$E=CBL30qe>YqeuoB_bQA-{k|Fj$J=WxLrt^GN83qF)m(&``Rv*8
z{i#8qU)7x9kz32hQiElV9i?<qZe-$X6hogUw_~@0^J*4;Dn30E?ETbYwDRh@S<}+E
zoOd+YasPJ~YKZoR=vw{+`_yNcs#|4=DJuv|P!??<me)7%VL1H!tg`|er3wwV&<K4S
zZ6Y1Y1Ah8%@{W-^C5U`v0n^Z#lX{474y3<AI(V#=-A{o*r}D*N%_1kzIctlPM%m<@
zk#rT9?4VwPf)y?&i7Up;mBWNVQQ5;G^xQqkbNx5ZC3DIh%HTPzmsREP=Op5=+!bk?
zwXVBJ=Pd|lk4c+TAK8?h0h}zf;I(Y<rKM6vW)b6@`mFWYTZq10P4Id{){A$gj9SPo
zr0j_+@7y@qr*-w`(5Y)I`B&eRYa&BPd+Q0x;S-7*Km$;_m3GrXLu~NleG2zdf^5^#
zeu`9doCz?)`fcAGulT5WNq~sM6Nv)fV!%EyX0u#*;UCbbraaL>?T=lELlCUtb<``h
zGGN4BzwaiT@@S-ot&-b9v!83?r5sbmH+aMBUvo17vmok%rSK)CF?$qKg<$GRb|lIp
zcN9~t;I6!bsPZ^8hIs+ldE?-X`C?tJ1q=haeIgW<^zzBJf&ofLmhuy26HAHd%Bj^+
z3mxN;nhJL=#}MQi>y%|^#2_#kQr&!03Y)v&;-L9XyHnYsR2@PlK1|=>p2prn-^wd!
zMt@d+A8RmCW`F%@!U$P2vJmqwtRL28@Z@1GrRGq3JW(^;A;O))_Shpu=F&k)>3s(C
z95bGOfd8>McBiHGjr^MEuKXhR|E;wR`)}6ZzYO&M)#hmNn+S5PZLPR9((p4=8~1Jp
zY4cK(`l`h>&M~wX1PO+=mnb({+A>t*$D^*IC5|;EeeK)(NNTRrVJfmf-7ixn(Pd`Z
z;hA%O?k+z&IGH*RH%>i%K!_o#8Y^#~DfFtYQB>%JsXbj=n@EjW?E0E$p730Fw#UrL
z(H#a07elL4)#Zh8e9nzUQd<zpj5V8J;3hrstp1&x{OR^&>6IuX?7@ezU3^I3{*!B@
zbToL*?vvI{N^+vQI8NS?Gj(9joH62#`#lBPP2y0nt4e4vdBkRr`Q>HJ^Wn|kd(iwy
zNIS;YTbyX0M8cNXCD!nL{&c4pKlLEaIk_sP{vnt#-z&bDxgfC6;iG&JwLFCz9Cl@&
zUC#D=Hj)Ewh(u|grRk*1-YfZ#1@y>8B_;P2N7hjFL+$?N!<!zH7}eA)7T$!xV9rbV
zQ56z3E*>2&$CEBSR%paIv$~?&XbRP|qMRX<=!QDIK%^kKhbb)KUcBuPIXdplor@|u
z)Z)e}(MF3x-To%6fL+EyT-aEYX3C^iWQCM!gZ9ZfO^bWGDXGeZc{UbEjAxwqNjU9r
z-Z+P1A30H4f-+`zCW*U~I~9h6^ekvI317~X<cA(Zm2EN@c3gytvCr$XZo1RRhZ(O6
zk#xVzT)v@#`68&0R-98)y&7WEJ7ZM%@@1bw7R;)L1+#83=OABmuMtb4qcZ@3S!2u;
zWie)k0wW?)Wkz%M$th7#<y^EOs%YI=0g!A3yW#@b0juG)M!TKP!8-EBqWL@H_8EIv
zYQfE#_ubK%5f#n9ZKp=nSnsJ;nOFgY#a(xKVx~Nwug$W>NMJ|=nh~uXxXJQygnDKH
z|2_wQTTt>T*9!Ae`r!5fj{ayj2psc8YWPpQzE2P!3<9G}{h{|!TtqG%X<IWBVcwUG
zxYN(J5XK7Ju9RT7FmkZbb+9mSf3tA#FmQi7)O8mx$DC!@jcWA7I!hNGM%1to97V0}
zHbiKoZ_Xwxk3My8#o_p@k4m9`NOf95VAB#L<EaNf6LUccaGE)1+s=%&&^Mexl;*n?
ztL*SQ5f31bwfZj(k~g}X;!8FXIjsP&#F(%@BNc=-x?D0`{1|WgwjCZ}Zn(2%j*OF!
zeMw;B@l(MgA=Bg+*$>T)V&La#Gs_Xtu!ZyTv2qdqo{CaDL~6b`dpc?1(ybGdKdvKF
z%uY+GDd3qkm-ZxFHwE3fh-?^$*EAl_Uy<_N@Evv%hs3i*yNnovk0`aS!;#z6{rmIG
z@5sVMB%FR6s(@Z>C>E3Qg@gtWtl~ecSCsmg9?ghIeEGq7U@JAvpM<aEM6H)1H;BSE
zs}WnpNbRD&N3;k>wB2#QmV6&Xqo=|44!T>2lCN87IM_YCZ}Op*vyiKR$*{6OQuU6o
zdO*x>ZE{Xv^c8l}Jvq!0r%aqoKG$GJ)90ayP&je5)qY+13-Y`A9os&GL1uY&{j9zW
z7WUTow8h$2Qp!7{VwQq}D1S<t91|9!r-*Z8e&`rnL{{fFA}y91bugW9WF5_?OH+vK
zk?GWCRMxjFf%`L_<D?^w2(<%MmTVX78F{nOULOO_qz^jDjeD!8F3rA6+ol&nvt(ft
zn|z%--prHeUllZDKMuIZK^RYud>>xo*fcaqE5?Ke;&>Z>1`%)uEwOmq!^^-m(*h<@
z5<>T;bGnKgAZk+JSjWA3v^Fm&pkVPby@hRGlh)TrG&20G2H@7%H8#)96H_F=jEU|$
zd1x9sha&Y%k)}HxYRQI0Qk4)WxuJhL$bwOos3{)wUoNS=(~|9rbYplKYOp(ZJvQ1T
zZxmQ<k`ROhPJA;pc^L@K0;Rc%C<?M9{e&+C6H$ElpOyE?RU^cYgZKCY_opkoo@v@<
z*$NU+qd%T_w!5&qtLpUy1oaAmf|KD@?$i3KAW;&4GEr!=g6X5+JWYN(QS`MYIeq3J
z_2$h`@P2>)2dLd*1^g(k6-KkBndUJ_5rtETy4mugFAeRkYQxc`*WX{=w(-eE+8+Yw
z<#W_QNaV0BY*{!@?TP<6#-ul1Bz8B_D&kh15wwdG`8rjX{pmL0DnxUv>819J?Y4Z~
z@F;kI383_}O3z3OJ24r+*OrLy+feSN9U6hpSISfiq3YlBEnhp51pe2tl_W^_#>mWt
z_MMT5RR9lLw+nOImg%0BSz+p>1>l@#%ZyW;6qzeX#64n{L>_{6xNomA{z9vE0kWtJ
zOJrtVZ41biF%JkwfOeA9<L{MOrflimz(qLxKkP3qD?S0ieW-JdUKWf^h_CX47CuPd
zg1<3+y0EMyo#h@>__)uaAPoUFr&Bh}pkf%ja!7y}Z8X_kfiL>})PRX<@Jp8xsH-$E
zGztJr>mQrqJ+Qrs{79=3>n1lDx-S~K;BO*dpV<p<4^K@{HR=horNP*jMX_|cBDNDl
zZDu)*O~Ef6Nkv?F7>Hj`Yq&JhHA1aUW;7{*in1UxJn}5scHBbiu+huMm5qolxP?v4
zQqY$R-3kJ07?$b&3G`D>z*Dr&OHn1_Ri^9r?Oj3-nyi@@Btlxo^mx*x<I>zbWZfA`
z{m#>2QI)m_>(n#_^4!@f9*36&R|bqvsw_)r8j7hKt;~O$0O_;Sdo+8-P;zL7nRmdS
zgl3hN7^4*=i-MSVu#6E5^!X*%o@~`q{r58`F>8V~3~GFtymvY+58G;!hm$}76rg#y
z0lM}8@jo_q3(zvuQ}XWgS<59O*6U(m`ta%hc;eWND?~&*0Q2+}RaEWfp}Oz}AYvfr
z-!U6h1GM3tx)eUip_jn{wHp^dikFl+5O0mRBg={(;qr;7iZdD_p{9>2@(L?m+I<==
zTg!{u`-<w0rag9W!&z)<QAF4QPM0=%6a;X0btT24wu*y2Lw*KSX}Bdx)pqvjy_B12
zTN|d*jC0xst%T0y3m_jqem*D#o(ESHT!N!~lx)up$6{{_jmVs-+vEJnU)XFVR);UE
zECSa-mrR%&%_PK?O#K}PNlkX6-|nZxmG&x|D&3`g$)o_90o%izuuUdqUeXg6)#JRl
zrJ_+2@mG!|Y4tmAXMWZ@2UOt^D*#yR@2xx%r2D9Dh*$lQV*OW>0MlL1RszPz>P9cG
zyP+!3<oZs~O69CKpRw?gMY|`S{i=>rr6_Wp1ybHH?uapcrU`fHEWXemT5qM7eSXy#
zs_8-C6J64up)*uNKFnq$VEXoQzHms`Grwvww2ezTe3lXxZYxDmM8S~W0aoirByM6<
zgH;Z&h&G8QNb$`d$oY-nnxX@U8g5L>g_+`<dRiU<+M%oN11)+X58w}oS@I4G@N_@z
zTO-EyV}Z&V*<kaD8B&`AW4Q`X(N|YK-DGoBU@=_PhTNRlw&74y^&D}u5AV_1Qa!Dm
zv2zWhWXn^!k|7Lc3qSoY(4t4H<^-oJ_WeuK66RE`ldDXDmm$=;;-hnvQupJ`Q+&lo
ze%T?2IN1>!4}(peMxodNw*2^sDzuL9gC-|KG0%p9|8F-vAxg#V1EYL&s>s|s+lIp+
z^`Q@x-fCXGbcJS98@^R<k)>-wLso90n|SiXJC``iK6`dhY7>XJcPvL%Vjd0K)Ic^!
zm+rMW5+YYsY9Y>R{Puhxic{WETiq2bDX&D6nLs7F2Y+iml-x_OkCGZ5d`?{Ht>R0C
zG#7et2)bWeL1Nn~HY<0(UPj6~a1uQXXFESvp(IG-4v(wWtBYuL%glMH5bYXu#5chV
z1#)MBf!*m)KQm3^ACXYUfb98U4jk3bY_^MQSV|P<zHqJf*3Ob%w{eb334v0>g6fIQ
zE(ro+@KaS*YWz>TT>%Uv?&`))xDngEB9yw$S!1Zzdz4z#XV=`xkQ>MIL*Cd)dps=E
zIPbR4ye5R46@r_<1a7r))GHaHi1+FvZ=;prukNC)ZLZY&KLyuimP$g%`&&SkO*Tk3
zu<%?VrTi~{f#x*TC`hkr@FUzuVe#sn8GLQ`P`(a^vHSrp;8CDN*+cs_syBnUK*V4U
z%;PT*{=NMvb;Xr2aZjj^bCgx}G1mB|$18pvr`qJwJmYzdC~yD3XJj~Dv25}s+>SY(
zu3trS(9DRN?Urto7g*F*dYxZ-*4~O*{)44Q?b(W@RXma`q1k+VlF!xMQ_@wwppP>m
z;`s4${hrS+s;J5|ZYGm%)eVq5+)Q~t8iml+F(OE0qynR83fvem_k{UZV0ZUBgL|UM
z5gnEfN2fr^833G*B=)0qq$a{lg=0vHJ`5cOf>JFMaD&W(rJNQ#nz~&UU9^+E7Hd0U
zK7*u@K$Jc;)<|xk053KMZU$C1WJ`5MeuWb>+?^r)C6>(nUfTKx0mFukd9jN*@YRYp
zX~%0NdADeh0s|>2vO9Nc8!c8zgXhl3u4>|JDevMiK&nM!yJ~gAO>tWR$%2u@eBpzm
z_xy$|rdolt(f(n4P>%Dv`hK8ex^E1gNe7h=dNSO5^BBbRlMjynq{4cVoFfts`GPXK
zjS@+>5-Ev8LV{sKuDs~dZ-welnMv_7CQne*=IE!>i<|0x)8WAR=;UiDS?aA`l?%1n
z_ZZ9iT}N_68-3!ic^gHB-IW|f1IkL;qAh!OJ>Q@BNlj(w<6PNU*eLd<%P>Klhw+}n
z63{5c>?ne6LB2fuC@jlZ9Vx&0_AXM?a!%4=rsS12(j~SC6N4Nwn{=aBd(>SL(9XEV
zQwAlt*`3?m>t3!dcIGvq*DFKig<~!7vXb@{kP17;tBDM66-ZR~3hfa!m&bSW3-9(X
zi4b01Z+#H&RdZBl2?ptsacu$4k7QOo01bY5rQS`y^p-gs)g9Cea@u&FIV!U0i58-;
zzzLET$Y^o!(e(a`1$aUMLe0E`10gUdvgZS10{y8!XL`yXh*~rI9YQX1Dz!-ljh#A-
zdqBcIU}WnFlxjm2jpe^UcYJ{|AArU;Zj3ZS$a5m~*uNClCyTazHLw7+Y#^5aKHMs2
z%Wr4O55^6UM-A{Y5k3%Mj?-#$(L4RgFdNLvRghSMOSMeSfU_7fCh`qCPr(XDp+Lik
zUS%*biF7ez5WGZz>bV!JXEW>v%38EN#}fCs<27#x3yo3-jOC(Tc;hA->AwAl`3k!*
zFy;VkzMIBBkIWk%-fllxlk5i}&7+7wS1-&nyV`sMbrvu>r_e2u3r7~X0*`JokudfS
z&}UyJ1Rmh$SZW*o#lYloqon0DN~7n|4IwYsxp+p8htAZz|MV0zi0+RT6e%BH1KXYo
ztJqVE8=+Zl<7&tiHJkSC>4GosBmo=St|^}3ruM@(P#|rXljcYF&5@^M!A_w1Ylg!O
z!L-#_>z|gTSj$?fMIAPYJh4)}a^9fARp9jJsxA)^3Ot!^uqY3}_a~)(^myF0CL3fA
znHTOLE;z>F>5NlS5(_c$r8GL*d}eEo?-CQH4}9Z=Ll*qeL6o4k%YhX>-z^97LMt~n
zMGX(vLB7+iVjl8WoE>t!6)xGCPGS5${EAK&A=hj38&s1=1`ig=x?3QCF-x?N<(bgM
z8k|CHF5b=<Jy%!Ov_9G|srl#*8^DbfHbk*;0Dq<i*xl~lHf&tHY+d~DrxY!vAK=OC
zS@4_0ONj5t!z&(G!kJPQ!uBd}tf;Fd))YsAvhHftGSr^GNi^`skWRA~)#^aN4j_cC
z%AAS7KwW<LRC#b@d5@4{NM)Lwq0ML;iU6zz{}k7jey=V>76^MP!sh(4z#aWm1N^VR
zNt1bNg)YWnO1jXxs^b6gjKi6ql$Q@6GTlq0tc?Nr;;6nfQu_!Y-fDkU*U8_zb@64_
z^j|*>VoI9m`Kjuvlm$XSpx(DEfs_bP$d&UeLeJ@-uGjH;Us763A)E2Jh)ca(*y~p;
z%*K?9hVCX*$+`Gx3EcouU;oX#?5M+U*@`B-3eBC|C5IUHSc`s~3%#Eka6KD$F+1iQ
zN`vi0_*NJDp~eoK)MK|AvTajx5KT0LITBfn+|LSmroI&fIIXn;UKAnoqEq4X)y~9^
z#Sd>e`DTQB83Oa*m*L^eD;d8E(blSENuYSmwP)S8kgl#m_1;%i?#MlD9eo<dOa)Uy
z9Lz{1Bk(hUKgKgLaydj<ExauNyehVyXTXtD%iMu7Jpael-_ac0Cev(jUjXx@3jWA{
zQJK*v;R+VFKnt?B%<}Jj`E?m9Sk6}u{9z3-mXWJR1-cuFnFJp1=(X@7!uvU^1ZzMI
zd|^c>zaaiA(^*p8`>uW1rdJL&8!t%<!kA)myxM*fJDDuGVJtC?v_c(}7<axJ#EeuZ
z{v)KjpK)K!S%5A)E(LQ0{R=UKB@irS4Ckh;%C?=+_R>;i2q@r~x4U{$+o1TTMA%zx
z1<0Z5dnixvOGFMK$PN>nd>L#?I|u<iGz07xo>&Mt!l!WLF*2=DFrcQ=cK~Ki4me|8
z2HakCJe#MwT^oWeuSZ_lFCM9r*TTIDRlm@})j;zbYTz^l^O-R1HU^4XSpxd4=gK%+
zC5?!eB<u-`_ObcWF_{tSH8CVUn8s4_X`+p)Zk^zkGywNy0ZI(6PW~ghVnO^Xv!{>7
zuDeMtq=k&zQr<~x>JNVMS~pBWSFb=_F>!dLS2F$fM1_<clomK|0!*sk$RO3TFpnqK
zfs7Y{n5kQ4-0d}}*(JX+E1JZ~>qDs8=PgX;4zW+CLJt2(-`g*4hWR1$HzTc-MBTjo
zh-t@OFOn`fefXrsK|FHnc)mrCl||#t{J}H(%DQ2k($|Ys(?swIO#@Ih+n>K2cCe;m
z>DIU4m+X#Kf#R;U?Q%Q1{?zj5=+9g!^_`9AG|CJ1Iqi9H?3+bDDuzaA=-nIpyshAr
zc8mF5eY`>1tbrb*HLDLh@YWAcm#x2bNXUL?h~P-skT?(dQx1~^Slpeu<4{e;YyK_&
z2Tyn0vdPwe<$={po`~kseOltm5B0WEqz5}o98+JI^{i0;!OT8as4(_M3inzNry2u0
zhdG02aJdQ`#kxgXe&%QVQq>;4^x*v%LI^=?1yX$KUE5qa`}GRLN6-d!oj2Zh$u)wc
zKdSDbc?knEADvD=&OU{Og>z<x%`u4AOtRE+C7s<_S7B$>#9U*k_EwH`e^D_I-Bs}!
z?tL$AOsThsv5fS*o5*fQ4D!sWUkNd+S0_!}m!@@jIH+9g*|49QgTCA$&7=W%KWT!c
zxUIB*a6Rn9A^$_1=W$$*Ci-rH2xWc%y4j1HAY}+9(chAw{qJ#Q8g`EN(D<#8xONO3
z4B_6K4oFzeQ|Qi7sLaKn1K8@?XUeX>b@>ebMKdeTuCnj+rkQh^%anyqmxYLKhJQYe
zD~J&0e3(e}C(A&}l}aRE)jf~p{>b{CtbZPy|HuPB7{x*l^B*9L`5%WQ5j_uhb$4ow
zjfDs5aRzR;LV*r(QKKI_Q8Ov)lX)AylB$s+6W%1XkzfTsSj&1TklaGNkV`l;+jXXE
z!q<&KVfmN$;eJ-t+n%&O@V^@|fmKw%>SjL-VQy6z*XV0CB1wj4fa%#bRaon4k^w1V
z#n$luK=#mp!-lDw3^X9viqqKg)xbF!)N!W>O_~ZxeA5Eip^IPw-EZs$=+Pjgh#=EK
zl=Pv>DfmAHeb|nHgib*pO+W)dTMvL88~mG(W(36g^d>VoOYv@1(Iyc(=+?a0=2Ow8
zR|~MnNn2I1Oln)YbfCJc>8FtqO*NZQ^6nw|4~|RjEClzKLwYJnN^rLR7+gYPm2}=Y
z(EwzAEMKmVbg6UzBoh><Z&*`+G_|}dfRi)|lvTkKQhkCfB@9r4_@kuNF6OjO;8y{i
zRcsk4uUsMOl4rg&gYKYCDZ!AJ6NBYl@Ng$M|A}HX4bb7K04hCeXCkG-LV3Wu1Xm8v
zjzTlZg7oLDInP>h)tRufmAzbaLx5O#=k|?xq-W;U7W3Ld<|X%!Me~jg?)p=5b3ULS
z_^_H+#IsM~i3$Hg9bG7PS_FVjjB2841<-^~vluG);J;S(w*%2XZcMGj^c~6HtpI}l
zDQSLj+VyBo-@(glzn+&3GSUCnsmhC{))S*Kqa|F(;a^;Ixjf_4$`Ty~JR8_M)wan<
z3qkjFFey{(rv3Tozlm6%2PHaHYSm8a%K(ysJ;(f!1@KpAlz%4TfR`ArW`V&EiL{CK
zxq&w}Jo>e7ZfmCy7J8>-pJ|BZ<=v8P#h}`A9zQ&KovEN!UtjsAwull(H1@UY)zq)7
zv&k<ulOm!gixolM<$G}o$#%1X2IGH%be0JZZ4}3G2o`ReKc!%};LKu6v^pD$%<-77
zTI|qbqdZwQw29tI;=ep3+HIEZ8{$7J;yo;hmPm*qfReimx{|HmdMd3p<5ckoJ3<p~
z_S+EeH|A!8Ji4h&>91o&j#imF^Yk_JHb#mp1=Gwo6#ote9ykh#sl8136~yK+XiRaV
zH=yu@4}oGPTXtEk=zvF(lL}NsOcuEF`BN&FOFS*nJuW~WS3L1+4H0Lg*t<L*ULEQ=
zKKhS}11Xq;cuV|jGU@9?_fS$X4e{0ZY;A3Sv!h$dt7B;@{E;KrohuFGsZV=jU&D;k
zWh2z^iALT1l0ZE3%pp)FP-w5l+LT&k&E5*ikghOEEW@~pBg@2V9rHZ`q-vea7F^ms
zo@HOxH!ms@MjfK88-Z={k;XOF#<Ii<7J7&x<eGCw7Cx^QL!7A}13AJfGLWAS2!GfV
z;C#;|ZxM_zhSWr+sgT%~xBSjt?;5<>fNJkl5QUa{BC&T7A<#z-v^PxM4NIX+Rm}-r
z>Bgj5Aj&MFSrS<BY_5yux#1|<*tTO#;R$^bDrrihIQ{Mr<>{r>b&-6D_~C*VRzJ0Z
zPCM%wtB~1mh-~;(9^sN={c0I$d#hbInDk!E*`-Apw2{ITxI|X#9TL7{J(9JnB}TYx
zq+U*2F@uUlBM7Gukj>1_qxos<l50(M3JEaac%n99NA^DEeR5=NOq}pkeaLkU=AJd^
z?<WXX6A+EM77<*;CANLBfLi0Mm6oLSan#STt}iOAKRF~(%hD>O8J$`QNu@Jzh;4GJ
zVOBaZ^<<K~p09`gM{8FC7G<^mk0|E8rKJ`iGMM6y8tT20gMxw}vWY9+VfdhlVFqW0
z5HXkJ=G7Z&rq;F0{A*T(XkN8)OD~}bH#N;d1JiIL+{g_V@c%mlINzB$-^@2~kIy_0
z_%OfU`@ZKr?{dzW`F>Cj_~l9QSigmLzVbW$`i%9D=dYMtFd%)`^IK15cYKh(F;=%H
zDQQA=UO>*<vwU)m$Ga6x{$cT+jbWt~ilf0#-n#2&3VyV&<QVzow@1Ub_D(ynVb!>Y
zD}q7_OCnbWpFHlnqDS@mb?^LhprU4Fhq!)QZuK~p>z?`6T}{f8jt9TYu9>l8f!7Bs
zlgcl4KU?$BeC2b|<J5oT9J$!HW~slIP`KpxvVlk9kB(XJ&FTdsKK|mxmqW6iEHM}!
z_WtbCA&b7=+cb9B=JdTO&;9NHbZM&#OtE>&qCbn)7wWd@w70#xT|a&HPTa1-FNUvw
zyZYbf?+;pjwrW^bmq(RTM}FEY<fP}>hlTN%Y7YUUmPX9j_5vaJU@Hy*o49l)wND7X
zH?Q^y!Fb@Xd9)-rDP%@iV6?J-@Wh~jHHEfsJuv-o<T(5}eRXEuMjy)g^sQmaiNQgE
zQPBg!f+%?_Qu|Qju2yG|EcIa^sP!p$oU!yfS~Hwi>)w&1*C%NO=8fI0s90e;HmRkm
zdn2BwY|_W4C7KcHE!7POZhDWnE-=-Dri9REDO<)E2?S-l(PU7mO<{u3s7iYJWM%Ob
zP+*Uba=z@}osi<`gbcQz;-@b`MXg{hnl&)<;2>-GOWC)R&$l3C3Dl;yU@T*lyDa$H
zJ2BR<J8zU!c7S~A@TltX7EJtPdPx>+sKzAJfA6j$RFi^V6M}WAX{IQXK~SaeSyy+^
zFKB^@uTc;}@0wf2Lm#JE`4lC00$=zWym4krLi$_q@sohBAeJ#5R53pEK-VTCUEnO<
za3fr!7mXf&;X?;#_3C7eE-5lqJ?2%FPA6#j$oZAg9ixCe3Nyk^@;rQkoF{ZWa+F|r
zU89x|c>mhyoKGNTDPFxq;^H@d3D^vifC+@iiotwQv+}Ykr@#OwU}M(ZJ@AxsuBaBw
zG5Q1{!LGY+Ul2a@AuKTv@a!`ES?LfyJk10L<jXy};+fCf5WC8sBLv<j8hyq(0_G#W
zH(}6C4bUzQBm~|o8t+f!BbwEBxJYtu`S#n7)qVj^#hPHMU<bEWd8yS$gJ{92gg>fa
zf*rVO$NH~+E+2TTU{o74sV2Q)5{;`yo>NfdbIF+>wuC9%rV$b#G6W%q{w@>QimE=e
z*qWa5wOjFXV0UP;7&95c@QwVifqa2;OoGm+(d!~rIs|)3C#Cd*&itrZiulsDCn3QM
z{i!Yg6MDYZS>KIFD{W86@ezcKWNEiIjF!(ccI?{EQo+-II3Ym{PuD{-c>;B5DNfC3
z!LsvN(fB%zjaW&DO``GmM8i4x`rYb$E%7S2p25Opx%MGa@<N!EDn<p>FFe%*cQM*`
zm07CG_acz-{^d;w@{eeAsBoT(uTR7t#pW&0=OFUk1Q7!v1^1lbn5@#K309igSI%eE
z&9nDGJQs!>!w_F=+C;t~&BU^->A5a>Tnwz)2H6bJQ8YqP2g;r~F(KcikyC!HzSV({
zSk%I_K(>rlZZe62G=et4DRWkCDtqlkq}GnE)};CYjUf$H#S2=g&|ST#*!wC7%dy}C
zEo#!A1~;0NZ`|S@vuAdNo~=R4#+T`SjiHRrNaa@PG-P|<+~OC6GI|pdEAqW)Tp7_=
zPQI4WYcCk5;ojyeL-7*v5wanm5sZAYi~geq{uln5hgHFnB}O<yCTkUTTC_t+{q#&T
zYqAaT4Ivw2Z{pHZkN6b9QBvTav@x}e-a>=PY>h}exsn&VU0ROX(+J&IBgQ53smukP
zxbRZom+-`>RFzr?oTC=Z8N!x~I;7f5pH+?$#t-cl8#||_@X4%VNo^A11#LcIrXtt(
zNBCn4RPBBiE8?er&yh)J4rz5R!YBE#EGbrr0G-mCkkJfD`4X8VVS?#Zy>;NUWup_;
z*(dD5KCo><890bxd;eWWY(|B}o_zEb!xQ|*KZCT5!j?7Ijt!2{>l!mhBvZDyJQ;!A
zgCAk7o{S2!KIM~`Cm~AUv^mtR-rXOUdk$UXb+{IaanZPXh>tf;&<O?=y7&5h4l{vL
zt;V*8-Vm*d*9wX#G=yndm7(rWn7`l~@1?tYJyIY?Gz^F`QZyzW=F1VRdtIf~B$yiw
zwO$*LmY66Q>?|Vc0H-!x9HhaDorD$3E+WrDK1;MP#}uSDq^L}aI>JDsT9qn93A57#
zox@eTXy}I*+@B{TJI*?FJu2c8S{$IRg$mMWovX4oH;+ha(~%GZ!XI0%W|uXb({|dZ
z`+R=>&jAKhbSL{+r%Bhl4dQ~M+OHuO<SFjO!ddUb`{}pkSw?vi7kMQeYf;Ii@$tb;
zzrE9mkfZ=>JLa@;f=O12Odj&ZLU%ajW28v7s`}KU0bG<bMKf0j!~Tg>AvbKFhv^Cu
z<=04*>{=M!vyqg1UwL!){HBXhbDTzSWLuk+y`3lIbKKlLJW`LOH5Nq__J2epeS}Po
zx|k(v+M?zqZmog)7o!VBlPwxC;~PZB*XmGS@t9`#3jJ#XtT$ix#K@-MWJ&ugEx@!c
z<qs$~4Bgsjk!pktRXfEh%ap3iqy3_hn~!)~CxEw88^Xr7<dQ7o%rrRsKagYCotU6`
zGFfaAwK-1PH|60DYfE2)DeuEiShw_jyHT`!Eek5HAFKjhC}xhOYyB_h=wwaZ#<P_t
z#$)QvVd~gbVA#?iI=)uEm!5CB9r0r~dKR_~^xPqnCPt^xnFK?sK|uXdtDF6aD;d^)
z!28HHo1j`avjzh58^JkIl_E@1862d#m%g}p^D(v!Zy?pNn+ns8{SV0bRzBl?BJKzx
zXb#GLwt6TkZa68Q>!TR&MJvHI4T&5pLo{lx$m6obrDdM#*X4VTp_t4-1CMq|G%nwB
zgv;Htrl9E~&JXcIihd0#nsvXHj~s)F$~wJXE9xbJb*4!wje)O7g!h?NiQrT=x90q~
z+G);7Ds?i>B`uQhIfu;dr1=iP<2QE%dXed{ZAY3qD6qs$(j@4~XE<23T>lEJ=nodQ
z^7y!|GYsfuH3=%Zsp_EYZ!_87I~u+)5{(n9(xgs~3E91AzDkEYmM-pvVyYYB6B`1X
zzaWpnsxjx&?0(<XEf$s&5Ea<P`EC!#H0CzUGX07We7=`%rSQ2nm-e}{8!A0P;lZ9B
zO!ju3OPc3Y%(#dCT@c|A*4Z;&Q(vcf_^MP1AB2>_mC<rpMe#05ITYds3~eAXh)$)o
z7*c68YLd_t^T~IWUY^$pC5I=HG3$J30nU>18J0|armP0)U4we;#zT38V+M0SuTfjn
z;gh&t_%{6&grU{XT37F(QI1KhH);4B%H9*){1CUBVXY$JipI^U4mtRcVV8G({W*Zj
z@nTa<#!Lyw44o=PqpsiGkT}*>to7Nr9Pw*SKkKcexpA^^B@YZ~u5tP0L8vd#^ZOEl
zoiWi!OqPRgYYW<}S7rQoBL`T2;>BKdxRK6BwH$H^NgCX4$&hL$Z%@9k(+!EL2Z9s3
z>w0^RTxg32O6EkWMNFUXbK8T8hFdn&W@gHzda75jE>X`nR$i05Ek*FdxUSZx>XmQE
zq_G92bKCxO*<LDt9vq!DRhK0)fz5Ym!sA~P)Fw$&QK|z~zqAg=jPyZqj_4yAE0#Jz
z#n+=^w<aM9;Qf$`6e4Jxv@Pd@*Y8B~oQR5hG`#Tl8;D^)0hQe#IKRpPqE%|+-^rog
zGji0MS&zU`3hQI(iiYnRK8MYICnq9M<l_HyYcT@0AYO#{ig0li>phvsk}-keA0Ru5
z-b5=Bh^5PJeD&BU6W{Fi33P|nE>p#?|7q6>tE&PLD3sBpO|H{S^>Os+l8ZIq!W1W0
zQXRj!6PG^=I(F`9t>a2uj^mxz+RTnc$2w+P@1;y9uRJ)M2|t($Uz@<_ICY;)CT3T=
zcHf)%FFx_~dz*EhFz#NIRj~|l*nx%<M+&I|-IJ%asth4o#N23CiDW(>+nZ605V!Li
zFN6#M0^-LMbcX2<BQmka4nk4m1*n^O8FCD*xc>5Lgo2T9I(9aioM^Zl^~WDFXJh`(
z$WOk9OPojZz|KbZpBgWO3@fa6{qC#75a2EZU{jL%Y=Z^hyMJ6&?BQ3DRtYM8mTL8R
znN&}g{L_%ar)tskqri6XuY5GJK8%wmmCK{D#ieO#_;b7OUqtALf!_>baDTWX57(T(
zIcbEV`zs&rng`^&NF{6%Y=7SgbjbiuIZT7co4O<Zv_u9R&1i7*p%WaIP-~aX?Tw>{
z9$>8x1LGuyExkoESwY=wFAJOOlw!7L=!WtA5b9Jom1T9k(Y7({eBU@X+cWzTbd5*D
z7r^NH4}?283CyA^y<BLiiTQlF<WbiySh=Y<?^7~-rQMw1le46#F(3bRu5b&kUk(*<
z79koc5BYR_RjL<FcmEuS7xC&VLMCLZCm*}M6F1+k<ClC?=)Jq1oVg9a{ScfLdRtGK
zz+tLXzR)|eFaDJ6f=d#ZgPx4gHD30yZSm+wB(AlcKDs|v|2mXjeHgr7d-3t=7lY&y
zq_D?xwtfEu>ia`XPX>0Dk6l>4l*jXh0|Z)M#=1f^DjHk+*@ZJZw_QmqFUS1343ho?
zcyAFfOpGhuyaiNe0O|QZ`{0|n{(xKsNLJcQgZPm3cM9sDX&UDnBKe<Pzu5^XTLPYy
zHpQ0@O>g$AwAy&=#o9trZ=JG+xIF>n9!RTT3}6}}4QcPg0{#0Y&2Iw%ssFRP;RQpb
z5%oHgL9f;FDs}2n8{H#j+<=Ii;R0Tan7v+>1dTCixc3Sv;I~b(JZDirgccT17-1jK
z*Vd2}&}CCe>o=kDbbzuqO1k{jKA=*IPoyMd(0M{dEqyJEvb<gtp0N@OwipGZCu4`|
zQFd8ug{HIryW&xD420eVNEWU{$%nK1fewAwd8N1tO7`K!mOu-~*oCvBH5GH&`gP|`
z5V0w4>-1u@ZXU?T72TteD14T#KUN(LIq6NoAq?iR@eVO@m}azhgN_P)@ASRP5%8`V
zC_mW-eQ}6G0xEx9meg~aSBn2&Vasdukr^%?)_G<qHeq<7OJtO2eX^j#jSUIx=ynr(
zhV;N14zZ33r)N6C=6hQEzUNM3`I9@a2D@oIdp;kL9-eAU8XUUJeR}!JfuDTfRj@n<
zb9oIfHmA2*EJc#6)2HjqO$)sXB;hQV*JQ^OqFZ?Z6N!UL(P*0`4_Gn_(WzW`ZuooK
zkSmX4I$7hqyha|pSpn&@WlFNM|91n*VEt*>VPtpbLOyVUgg?E>@4Dn&K}`A!oRKXg
zmLbCOoH0hnSe_3XUe<l^C$M%YUhKmEej6V)R$~zAF3?HL<*K)mui}CvnU8?N_EU$p
zJH#~GS?WG8wepd<M>lQcq954d1Ue_lP;{T?du`psMc=>E3G^X+Ye)9@YWrp``hnd}
zpbzDvXMVPBN)?<u0DT!-7a#muJ~|&e<-h)Kp|~b-@Nc%}>in%kZ2RYu_dB`%{W@|)
z1w>bf7Cs^G<U4}42wVTT<owLq4@K7lVJ(Wr34EEd)Yr(1KOsxMe*RRu)eGN%%D1uV
z*jU&6h%`#9-jJXZO!P`3FV<1urJCHBUg!tf_qN_LDJhZ%Oi3ozkx0fpO7-*4ohzH6
zmAr(Vhp{3%;DUCs^Hfn8I-|YooRl#n^V$6AaKM%@Sun#`h9*<W_F}7vm8)Z<|0NxJ
zDXsWv%u0rK*ZoG(T0E@&!{n4s{4_0g?|xr1*9L0IXA(aifjv!6e%5IwK85&8#@W=;
t%v~0REiC<pa`D#|z|%#;(@P#K{l4-^6I{`e5V8gTDn}zpy@D`7{vS$v=tckl

literal 0
HcmV?d00001

diff --git a/src/cc/mallet/topics/tree/CorpusWriter.java b/src/cc/mallet/topics/tree/CorpusWriter.java
new file mode 100644
index 000000000..47888fe8a
--- /dev/null
+++ b/src/cc/mallet/topics/tree/CorpusWriter.java
@@ -0,0 +1,157 @@
+package cc.mallet.topics.tree;
+
+import java.io.BufferedReader;
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintStream;
+import java.util.ArrayList;
+
+import gnu.trove.TIntArrayList;
+import gnu.trove.TIntIntHashMap;
+import cc.mallet.types.FeatureSequence;
+import cc.mallet.types.Instance;
+import cc.mallet.types.InstanceList;
+
+public class CorpusWriter {
+	
+	public static void writeCorpus(InstanceList training, String outfilename, String vocabname) throws FileNotFoundException {
+		
+		ArrayList<String> vocab = loadVocab(vocabname);
+		
+		PrintStream out = new PrintStream (new File(outfilename));
+		
+		int count = -1;
+		for (Instance instance : training) {
+			count++;
+			if (count % 1000 == 0) {
+				System.out.println("Processed " + count + " number of documents!");
+			}
+			FeatureSequence original_tokens = (FeatureSequence) instance.getData();
+			String name = instance.getName().toString();
+
+			TIntArrayList tokens = new TIntArrayList(original_tokens.getLength());
+			TIntIntHashMap topicCounts = new TIntIntHashMap ();			
+			TIntArrayList topics = new TIntArrayList(original_tokens.getLength());
+			TIntArrayList paths = new TIntArrayList(original_tokens.getLength());
+
+			String doc = "";
+			for (int jj = 0; jj < original_tokens.getLength(); jj++) {
+				String word = (String) original_tokens.getObjectAtPosition(jj);
+				int token = vocab.indexOf(word);
+				doc += word + " ";
+				//if(token != -1) {
+				//	doc += word + " ";
+				//}
+			}
+			System.out.println(name);
+			System.out.println(doc);
+			
+			if (!doc.equals("")) {
+				out.println(doc);
+			}
+		}
+		
+		out.close();
+	}
+	
+	public static void writeCorpusMatrix(InstanceList training, String outfilename, String vocabname) throws FileNotFoundException {
+	
+		// each document is represented in a vector (vocab size), and each entry is the frequency of a word.
+		
+		ArrayList<String> vocab = loadVocab(vocabname);
+		
+		PrintStream out = new PrintStream (new File(outfilename));
+		
+		int count = -1;
+		for (Instance instance : training) {
+			count++;
+			if (count % 1000 == 0) {
+				System.out.println("Processed " + count + " number of documents!");
+			}
+			FeatureSequence original_tokens = (FeatureSequence) instance.getData();
+			String name = instance.getName().toString();
+
+			int[] tokens = new int[vocab.size()];
+			for (int jj = 0; jj < tokens.length; jj++) {
+				tokens[jj] = 0;
+			}
+
+			for (int jj = 0; jj < original_tokens.getLength(); jj++) {
+				String word = (String) original_tokens.getObjectAtPosition(jj);
+				int index = vocab.indexOf(word);
+				tokens[index] += 1;
+			}
+			
+			String doc = "";
+			for (int jj = 0; jj < tokens.length; jj++) {
+				doc += tokens[jj] + "\t";
+			}
+			
+			System.out.println(name);
+			System.out.println(doc);
+			
+			if (!doc.equals("")) {
+				out.println(doc);
+			}
+		}
+		
+		out.close();
+	}
+	
+	public static ArrayList<String> loadVocab(String vocabFile) {
+		
+		ArrayList<String> vocab = new ArrayList<String>();
+		
+		try {
+			FileInputStream infstream = new FileInputStream(vocabFile);
+			DataInputStream in = new DataInputStream(infstream);
+			BufferedReader br = new BufferedReader(new InputStreamReader(in));
+			
+			String strLine;
+			//Read File Line By Line
+			while ((strLine = br.readLine()) != null) {
+				strLine = strLine.trim();
+				String[] str = strLine.split("\t");
+				if (str.length > 1) {
+					vocab.add(str[1]);
+				} else {
+					System.out.println("Error! " + strLine);
+				}
+			}
+			in.close();
+			
+		} catch (IOException e) {
+			System.out.println("No vocab file Found!");
+		}
+		return vocab;
+	}
+	
+	
+	public static void main(String[] args) {
+		//String input = "input/nyt/nyt-topic-input.mallet";
+		//String corpus = "../../pylda/variational/data/20_news/doc.dat";
+		//String vocab = "../../pylda/variational/data/20_news/voc.dat";
+		
+		String input = "input/synthetic/synthetic-topic-input.mallet";
+		//String corpus = "../../spectral/input/synthetic-ordered.dat";
+		//String vocab = "../../spectral/input/synthetic-ordered.voc";
+		String corpus = "../../spectral/input/synthetic.dat";
+		String vocab = "../../spectral/input/synthetic.voc";
+		
+		//String input = "../../itm-evaluation/results/govtrack-109/input/govtrack-109-topic-input.mallet";
+		//String corpus = "../../pylda/variational/data/20_news/doc.dat";
+		//String vocab = "../../itm-evaluation/results/govtrack-109/input/govtrack-109.voc";
+		
+		try{
+			InstanceList data = InstanceList.load (new File(input));
+			writeCorpusMatrix(data, corpus, vocab);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+}
diff --git a/src/cc/mallet/topics/tree/HIntIntDoubleHashMap.java b/src/cc/mallet/topics/tree/HIntIntDoubleHashMap.java
new file mode 100755
index 000000000..4b4bf47bf
--- /dev/null
+++ b/src/cc/mallet/topics/tree/HIntIntDoubleHashMap.java
@@ -0,0 +1,82 @@
+package cc.mallet.topics.tree;
+
+import java.io.Serializable;
+
+import gnu.trove.TIntDoubleHashMap;
+import gnu.trove.TIntIntHashMap;
+import gnu.trove.TIntObjectHashMap;
+
+/**
+ * This class defines a two level hashmap, so a value will be indexed by two keys.
+ * The value is double, and two keys are both int.
+ * 
+ * @author Yuening Hu
+ */
+
+public class HIntIntDoubleHashMap implements Serializable{
+	TIntObjectHashMap<TIntDoubleHashMap> data;
+	
+	public HIntIntDoubleHashMap() {
+		this.data = new TIntObjectHashMap<TIntDoubleHashMap> ();
+	}
+	
+	/**
+	 * If keys do not exist, insert value.
+	 * Else update with the new value.
+	 */
+	public void put(int key1, int key2, double value) {
+		if(! this.data.contains(key1)) {
+			this.data.put(key1, new TIntDoubleHashMap());
+		}
+		TIntDoubleHashMap tmp = this.data.get(key1);
+		tmp.put(key2, value);
+	}
+	
+	/**
+	 * Return the HashMap indexed by the first key.
+	 */
+	public TIntDoubleHashMap get(int key1) {
+		return this.data.get(key1);
+	}
+	
+	/**
+	 * Return the value indexed by key1 and key2.
+	 */
+	public double get(int key1, int key2) {
+		if (this.data.contains(key1)) {
+			TIntDoubleHashMap tmp1 = this.data.get(key1);
+			if (tmp1.contains(key2)) {
+				return tmp1.get(key2);
+			}
+		}
+		System.out.println("HIntIntDoubleHashMap: key does not exist!");
+		return -1;
+	}
+	
+	/**
+	 * Return the first key set.
+	 */
+	public int[] getKey1Set() {
+		return this.data.keys();
+	}
+	
+	/**
+	 * Check whether key1 is contained in the first key set or not.
+	 */
+	public boolean contains(int key1) {
+		return this.data.contains(key1);
+	}
+	
+	/**
+	 * Check whether the key pair (key1, key2) is contained or not.
+	 */
+	public boolean contains(int key1, int key2) {
+		if (this.data.contains(key1)) {
+			return this.data.get(key1).contains(key2);
+		} else {
+			return false;
+		}
+	}
+
+}
+
diff --git a/src/cc/mallet/topics/tree/HIntIntIntHashMap.java b/src/cc/mallet/topics/tree/HIntIntIntHashMap.java
new file mode 100755
index 000000000..42ecded4c
--- /dev/null
+++ b/src/cc/mallet/topics/tree/HIntIntIntHashMap.java
@@ -0,0 +1,121 @@
+package cc.mallet.topics.tree;
+
+import java.io.Serializable;
+
+import gnu.trove.TIntDoubleHashMap;
+import gnu.trove.TIntIntHashMap;
+import gnu.trove.TIntObjectHashMap;
+
+/**
+ * This class defines a two level hashmap, so a value will be indexed by two keys.
+ * The value is int, and two keys are both int.
+ * 
+ * @author Yuening Hu
+ */
+
+public class HIntIntIntHashMap implements Serializable{
+	
+	TIntObjectHashMap<TIntIntHashMap> data;
+	
+	public HIntIntIntHashMap() {
+		this.data = new TIntObjectHashMap<TIntIntHashMap> ();
+	}
+	
+	/**
+	 * If keys do not exist, insert value.
+	 * Else update with the new value.
+	 */
+	public void put(int key1, int key2, int value) {
+		if(! this.data.contains(key1)) {
+			this.data.put(key1, new TIntIntHashMap());
+		}
+		TIntIntHashMap tmp = this.data.get(key1);
+		tmp.put(key2, value);
+	}
+	
+	/**
+	 * Return the HashMap indexed by the first key.
+	 */
+	public TIntIntHashMap get(int key1) {
+		if(this.contains(key1)) {
+			return this.data.get(key1);
+		} 
+		return null;
+	}
+	
+	/**
+	 * Return the value indexed by key1 and key2.
+	 */
+	public int get(int key1, int key2) {
+		if (this.contains(key1, key2)) {
+			return this.data.get(key1).get(key2);
+		} else {
+			System.out.println("HIntIntIntHashMap: key does not exist!");
+			return 0;
+		}
+	}
+	
+	/**
+	 * Return the first key set.
+	 */
+	public int[] getKey1Set() {
+		return this.data.keys();
+	}
+	
+	/**
+	 * Check whether key1 is contained in the first key set or not.
+	 */
+	public boolean contains(int key1) {
+		return this.data.contains(key1);
+	}
+	
+	/**
+	 * Check whether the key pair (key1, key2) is contained or not.
+	 */
+	public boolean contains(int key1, int key2) {
+		if (this.data.contains(key1)) {
+			return this.data.get(key1).contains(key2);
+		} else {
+			return false;
+		}
+	}
+	
+	/**
+	 * Adjust the value indexed by the key pair (key1, key2) by the specified amount.
+	 */
+	public void adjustValue(int key1, int key2, int increment) {
+		int old = this.get(key1, key2);
+		this.put(key1, key2, old+increment);
+	}
+	
+	
+	/**
+	 * If the key pair (key1, key2) exists, adjust the value by the specified amount,
+	 * Or insert the new value.
+	 */
+	public void adjustOrPutValue(int key1, int key2, int increment, int newvalue) {
+		if (this.contains(key1, key2)) {
+			int old = this.get(key1, key2);
+			this.put(key1, key2, old+increment);
+		} else {
+			this.put(key1, key2, newvalue);
+		}
+	}
+	
+	/**
+	 * Remove the first key 
+	 */
+	public void removeKey1(int key1) {
+		this.data.remove(key1);
+	}
+	
+	/**
+	 * Remove the second key 
+	 */
+	public void removeKey2(int key1, int key2) {
+		if (this.data.contains(key1)) {
+			this.data.get(key1).remove(key2);
+		}
+	}
+	
+}
diff --git a/src/cc/mallet/topics/tree/HIntIntObjectHashMap.java b/src/cc/mallet/topics/tree/HIntIntObjectHashMap.java
new file mode 100755
index 000000000..57c3ce80e
--- /dev/null
+++ b/src/cc/mallet/topics/tree/HIntIntObjectHashMap.java
@@ -0,0 +1,79 @@
+package cc.mallet.topics.tree;
+
+import java.io.Serializable;
+
+import gnu.trove.TIntArrayList;
+import gnu.trove.TIntIntHashMap;
+import gnu.trove.TIntObjectHashMap;
+
+/**
+ * This class defines a two level hashmap, so a value will be indexed by two keys.
+ * The value is int, and two keys are both int.
+ * 
+ * @author Yuening Hu
+ */
+
+public class HIntIntObjectHashMap<V> implements Serializable{
+	TIntObjectHashMap<TIntObjectHashMap<V>> data;
+	
+	public HIntIntObjectHashMap () {
+		this.data = new TIntObjectHashMap<TIntObjectHashMap<V>>();
+	}
+	
+	/**
+	 * If keys do not exist, insert value.
+	 * Else update with the new value.
+	 */
+	public void put(int key1, int key2, V value) {
+		if(! this.data.contains(key1)) {
+			this.data.put(key1, new TIntObjectHashMap<V>());
+		}
+		TIntObjectHashMap<V> tmp = this.data.get(key1);
+		tmp.put(key2, value);
+	}
+	
+	/**
+	 * Return the HashMap indexed by the first key.
+	 */
+	public TIntObjectHashMap<V> get(int key1) {
+		return this.data.get(key1);
+	}
+	
+	/**
+	 * Return the value indexed by key1 and key2.
+	 */
+	public V get(int key1, int key2) {
+		if (this.contains(key1, key2)) {
+			return this.data.get(key1).get(key2);
+		} else {
+			System.out.println("HIntIntObjectHashMap: key does not exist! " + key1 + " " + key2);
+			return null;
+		}
+	}
+	
+	/**
+	 * Return the first key set.
+	 */
+	public int[] getKey1Set() {
+		return this.data.keys();
+	}
+	
+	/**
+	 * Check whether key1 is contained in the first key set or not.
+	 */
+	public boolean contains(int key1) {
+		return this.data.contains(key1);
+	}
+	
+	/**
+	 * Check whether the key pair (key1, key2) is contained or not.
+	 */
+	public boolean contains(int key1, int key2) {
+		if (this.data.contains(key1)) {
+			return this.data.get(key1).contains(key2);
+		} else {
+			return false;
+		}
+	}
+	
+}
diff --git a/src/cc/mallet/topics/tree/Node.java b/src/cc/mallet/topics/tree/Node.java
new file mode 100755
index 000000000..9249f1fd8
--- /dev/null
+++ b/src/cc/mallet/topics/tree/Node.java
@@ -0,0 +1,194 @@
+package cc.mallet.topics.tree;
+
+import gnu.trove.TDoubleArrayList;
+import gnu.trove.TIntArrayList;
+
+/**
+ * This class defines a node, which might have children,
+ * and a distribution scaled by the node prior over the children.
+ * A node is a synset, which might have children nodes and words
+ * at the same time.
+ * 
+ * @author Yuening Hu
+ */
+
+public class Node {
+	int offset;
+	double rawCount;
+	double hypoCount;
+	String hyperparamName;
+	
+	TIntArrayList words;
+	TDoubleArrayList wordsCount;
+	TIntArrayList childOffsets;
+	
+	int numChildren;
+	int numPaths;
+	int numWords;
+	
+	double transitionScalor;
+	TDoubleArrayList transitionPrior;
+	
+	public Node() {
+		this.words = new TIntArrayList ();
+		this.wordsCount = new TDoubleArrayList ();
+		this.childOffsets = new TIntArrayList ();
+		this.transitionPrior = new TDoubleArrayList ();
+		this.numChildren = 0;
+		this.numWords = 0;
+		this.numPaths = 0;
+	}
+	
+	/**
+	 * Initialize the prior distribution.
+	 */
+	public void initializePrior(int size) {
+		for (int ii = 0; ii < size; ii++ ) {
+			this.transitionPrior.add(0.0);
+		}
+	}
+	
+	/**
+	 * Initialize the prior distribution.
+	 */
+	public void setOffset(int val) {
+		this.offset = val;
+	}
+	
+	/**
+	 * set the raw count.
+	 */
+	public void setRawCount(double count) {
+		this.rawCount = count;
+	}
+	
+	/**
+	 * set the hypo count.
+	 */
+	public void setHypoCount(double count) {
+		this.hypoCount = count;
+	}
+	
+	/**
+	 * set the hyperparameter name of this node.
+	 */
+	public void setHyperparamName(String name) {
+		this.hyperparamName = name;
+	}
+	
+	/**
+	 * set the prior scaler.
+	 */
+	public void setTransitionScalor(double val) {
+		this.transitionScalor = val;
+	}
+	
+	/**
+	 * set the prior for the given child index.
+	 */
+	public void setPrior(int index, double value) {
+		this.transitionPrior.set(index, value);
+	}
+	
+	/**
+	 * Add a child, which is defined by the offset.
+	 */
+	public void addChildrenOffset(int childOffset) {
+		this.childOffsets.add(childOffset);
+		this.numChildren += 1;
+	}
+	
+	/**
+	 * Add a word.
+	 */
+	public void addWord(int wordIndex, double wordCount) {
+		this.words.add(wordIndex);
+		this.wordsCount.add(wordCount);
+		this.numWords += 1;
+	}
+	
+	/**
+	 * Increase the number of paths.
+	 */
+	public void addPaths(int inc) {
+		this.numPaths += inc;
+	}
+	
+	/**
+	 * return the offset of current node.
+	 */
+	public int getOffset() {
+		return this.offset;
+	}
+	
+	/**
+	 * return the number of children.
+	 */
+	public int getNumChildren() {
+		return this.numChildren;
+	}
+	
+	/**
+	 * return the number of words.
+	 */
+	public int getNumWords() {
+		return this.numWords;
+	}
+	
+	/**
+	 * return the child offset given the child index.
+	 */
+	public int getChild(int child_index) {
+		return this.childOffsets.get(child_index);
+	}
+	
+	/**
+	 * return the word given the word index.
+	 */
+	public int getWord(int word_index) {
+		return this.words.get(word_index);
+	}
+	
+	/**
+	 * return the word count given the word index.
+	 */
+	public double getWordCount(int word_index) {
+		return this.wordsCount.get(word_index);
+	}
+	
+	/**
+	 * return the hypocount of the node.
+	 */
+	public double getHypoCount() {
+		return this.hypoCount;
+	}
+	
+	/**
+	 * return the transition scalor.
+	 */
+	public double getTransitionScalor() {
+		return this.transitionScalor;
+	}
+	
+	/**
+	 * return the scaled transition prior distribution.
+	 */
+	public TDoubleArrayList getTransitionPrior() {
+		return this.transitionPrior;
+	}
+	
+	/**
+	 * normalize the prior to be a distribution and then scale it.
+	 */
+	public void normalizePrior() {
+		double norm = 0;
+		for (int ii = 0; ii < this.transitionPrior.size(); ii++) {
+			norm += this.transitionPrior.get(ii);
+		}
+		for (int ii = 0; ii < this.transitionPrior.size(); ii++) {
+			double tmp = this.transitionPrior.get(ii) / norm;
+			tmp *= this.transitionScalor;
+			this.transitionPrior.set(ii, tmp);
+		}
+	}
+}
diff --git a/src/cc/mallet/topics/tree/NonZeroPath.java b/src/cc/mallet/topics/tree/NonZeroPath.java
new file mode 100755
index 000000000..b58dc5b61
--- /dev/null
+++ b/src/cc/mallet/topics/tree/NonZeroPath.java
@@ -0,0 +1,31 @@
+package cc.mallet.topics.tree;
+
+import gnu.trove.TIntDoubleHashMap;
+import gnu.trove.TIntIntHashMap;
+import gnu.trove.TIntObjectHashMap;
+
+
+/**
+ * This class defines a structure for recording nonzeropath.
+ * key1: type; key2: path id; value: count.
+ * 
+ * @author Yuening Hu
+ */
+
+public class NonZeroPath {
+	
+	HIntIntIntHashMap data;
+	
+	public NonZeroPath () {
+		this.data = new HIntIntIntHashMap();
+	}
+	
+	public void put(int key1, int key2, int value) {
+		this.data.put(key1, key2, value);
+	}
+	
+	public void get(int key1, int key2) {
+		this.data.get(key1, key2);
+	}
+
+}
diff --git a/src/cc/mallet/topics/tree/OntologyWriter.java b/src/cc/mallet/topics/tree/OntologyWriter.java
new file mode 100755
index 000000000..360d355c6
--- /dev/null
+++ b/src/cc/mallet/topics/tree/OntologyWriter.java
@@ -0,0 +1,905 @@
+package cc.mallet.topics.tree;
+
+import gnu.trove.TIntArrayList;
+import gnu.trove.TIntHashSet;
+import gnu.trove.TIntIntHashMap;
+import gnu.trove.TIntObjectHashMap;
+
+import java.io.FileOutputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Stack;
+import java.util.TreeMap;
+import java.util.TreeSet;
+
+import topicmod_projects_ldawn.WordnetFile.WordNetFile;
+import topicmod_projects_ldawn.WordnetFile.WordNetFile.Synset;
+import topicmod_projects_ldawn.WordnetFile.WordNetFile.Synset.Word;
+
+
+/**
+ * Converts a set of user-selected constraints into Protocol Buffer form.
+ * This is an adaptation of Yuening's Python code that does the same thing.
+ * Following the style of Brianna's original code of OntologyWriter.java.
+ * 
+ * @author Yuening Hu
+ */
+
+public class OntologyWriter {
+	private Map<Integer, Set<Integer>> parents; 
+	
+	private int numFiles;
+	private String filename;
+		
+	private int root;
+	private Map<Integer, Map<String, Integer>> vocab;
+	private boolean propagateCounts;
+	
+	private int maxLeaves;
+	private Map<Integer, Synset.Builder> leafSynsets;
+	private Map<Integer, Synset.Builder> internalSynsets;
+	private WordNetFile.Builder leafWn;
+	private WordNetFile.Builder internalWn;
+	private boolean finalized;
+	
+	static class WordTuple {
+		public int id;
+		public int language;
+		public String word;
+		public double count;
+	}
+	
+	static class VocabEntry	{
+		public int index;
+		public int language;
+		public int flag;	
+	}
+	
+	static class Constraint {
+		public ArrayList<int[]> cl;
+		public ArrayList<int[]> ml;
+	}
+	
+	static class Node {
+		public int index;
+		public boolean rootChild;
+		public String linkType;
+		public ArrayList<Integer> children;
+		public int[] words;
+	}
+	
+	final static int ENGLISH_ID = 0;
+	
+	private OntologyWriter(String filename, boolean propagateCounts) {
+		this.filename = filename;
+		this.propagateCounts = propagateCounts;
+		
+		vocab = new TreeMap<Integer, Map<String, Integer>>();
+		parents = new TreeMap<Integer, Set<Integer>>();
+		
+		root = -1;
+		
+		maxLeaves = 10000;
+		leafSynsets = new TreeMap<Integer, Synset.Builder>();
+		internalSynsets = new TreeMap<Integer, Synset.Builder>();
+		leafWn = WordNetFile.newBuilder();
+		leafWn.setRoot(-1);
+		internalWn = WordNetFile.newBuilder();
+		internalWn.setRoot(-1);
+		finalized = false;		
+	}	
+	
+	private void addParent(int childId, int parentId) {
+		if (!parents.containsKey(childId)) {
+			parents.put(childId, new TreeSet<Integer>());
+		}
+		parents.get(childId).add(parentId);
+	}
+	
+	private List<Integer> getParents(int id) {
+		List<Integer> parentList = new ArrayList<Integer>();
+		if (!parents.containsKey(id) || parents.get(id).size() == 0) {
+			if (this.root < 0)
+				this.root = id;
+			return new ArrayList<Integer>();
+		} else {
+			parentList.addAll(parents.get(id));
+			for (int parentId : parents.get(id)) {
+				parentList.addAll(getParents(parentId));
+			}
+		}
+		return parentList;
+	}
+	
+	private int getTermId(int language, String term) {
+		if (!vocab.containsKey(language)) {
+			vocab.put(language, new TreeMap<String, Integer>());
+		}
+		if (!vocab.get(language).containsKey(term)) {
+			int length = vocab.get(language).size();
+			vocab.get(language).put(term, length);
+		}
+		return vocab.get(language).get(term);
+	}
+	  
+	private void findRoot(Map<Integer, Synset.Builder> synsets) {
+		for (int synsetId : synsets.keySet()) {
+			if (synsetId % 1000 == 0) {
+				System.out.println("Finalizing " + synsetId);
+			}
+			for (int parentId : getParents(synsetId)) {
+				if (propagateCounts) {
+					double hypCount = this.internalSynsets.get(parentId).getHyponymCount();
+					double rawCount = synsets.get(synsetId).getRawCount();
+					this.internalSynsets.get(parentId).setHyponymCount(hypCount + rawCount);
+				}
+			}
+		}
+	}
+	
+	// Named this so it doesn't conflict with Object.finalize
+	private void finalizeMe() throws Exception {
+		findRoot(this.leafSynsets);
+		for(int id : this.leafSynsets.keySet()) {
+			this.leafWn.addSynsets(this.leafSynsets.get(id));
+		}
+		write(this.leafWn);
+		
+		findRoot(this.internalSynsets);
+		if(this.root < 0) {
+			System.out.println("No root has been found!");
+			throw new Exception();
+		}
+		this.internalWn.setRoot(this.root);
+		for(int id : this.internalSynsets.keySet()) {
+			this.internalWn.addSynsets(this.internalSynsets.get(id));
+		}
+		write(this.internalWn);
+	}
+	
+	private void write(WordNetFile.Builder wnFile) {
+		try {
+			String newFilename = filename + "." + numFiles;
+			WordNetFile builtFile = wnFile.build();
+			builtFile.writeTo(new FileOutputStream(newFilename));
+			System.out.println("Serialized version written to: " + newFilename);
+			this.numFiles ++;
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	private void addSynset(int numericId, String senseKey, List<Integer> children,
+			List<WordTuple> words) {		
+		Synset.Builder synset = Synset.newBuilder();
+		
+		double rawCount = 0.0;
+		synset.setOffset(numericId);
+		synset.setKey(senseKey);
+		
+		if(senseKey.startsWith("ML_")) {
+			synset.setHyperparameter("ML_");
+		} else if(senseKey.startsWith("CL_")) {
+			synset.setHyperparameter("CL_");
+		} else if(senseKey.startsWith("NL_")) {
+			synset.setHyperparameter("NL_");
+		} else if(senseKey.startsWith("ROOT")) {
+			synset.setHyperparameter("NL_");
+		} else if(senseKey.startsWith("LEAF_")) {
+			synset.setHyperparameter("NL_");
+		} else {
+			synset.setHyperparameter("DEFAULT_");
+		}
+		
+		if(children != null) {
+			for (int child : children){
+				addParent(child, numericId);
+				synset.addChildrenOffsets(child);
+			}
+		}
+		
+		if(words != null) {
+			for (WordTuple tuple : words) {
+				Word.Builder word = Word.newBuilder();
+				word.setLangId(tuple.language);
+				//word.setTermId(getTermId(tuple.language, tuple.word));
+				word.setTermId(tuple.id);
+				word.setTermStr(tuple.word);
+				word.setCount(tuple.count);
+				rawCount += tuple.count;
+				synset.addWords(word);
+				synset.setRawCount(rawCount);
+			}
+		}
+		
+		synset.setHyponymCount(rawCount + 0.0);
+		
+		if(children != null && children.size() > 0) {
+			//this.internalWn.addSynsets(synset.clone());
+			this.internalSynsets.put(numericId, synset);
+		} else {
+			//this.leafWn.addSynsets(synset.clone());
+			this.leafSynsets.put(numericId, synset);
+		}
+	}
+
+	private static ArrayList<String> getVocab(String filename) {
+		ArrayList<String> vocab = new ArrayList<String>();
+		int index = 0;
+		try {
+			List<String> lines = Utils.readAll(filename);
+			for (String line : lines)
+			{
+				String[] words = line.trim().split("\t");
+				if (words.length > 1) {
+					vocab.add(words[1]);
+				} else {
+					System.out.println("Error! " + index);
+				}
+				index++;
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return vocab;
+	}
+	
+	private static void readConstraints(String consfilename, ArrayList<String> vocab, 
+			ArrayList<int[]> ml, ArrayList<int[]> cl) {
+	    //List<Constraint> constraints = new ArrayList<Constraint>();
+	    
+		try {
+			List<String> lines = Utils.readAll(consfilename);
+			for (String line : lines) {
+				String[] words = line.trim().split("\t");
+				int[] indexWords = new int[words.length - 1];
+				for(int ii = 1; ii < words.length; ii++) {
+					int index = vocab.indexOf(words[ii]);
+					if (index == -1) {
+						System.out.println("Found words that not contained in the vocab: " + words[ii]);
+						throw new Exception();
+					}
+					indexWords[ii-1] = index;
+				}
+				
+				//for(int ii = 0; ii < indexWords.length; ii++) {
+				//	System.out.print(indexWords[ii] + " ");
+				//}
+
+				if (words[0].equals("SPLIT_")) {
+					cl.add(indexWords);
+				} else if (words[0].equals("MERGE_")) {
+					ml.add(indexWords);
+				}
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		
+	}
+	
+	private static void generateGraph(ArrayList<int[]> cons, int value, HIntIntIntHashMap graph) {
+		for (int[] con : cons) {
+			for (int w1 : con) {
+				for (int w2 : con) {
+					if ( w1 != w2) {
+						graph.put(w1, w2, value);
+						graph.put(w2, w1, value);
+					}
+				}
+			}
+		}
+	}
+	
+	private static ArrayList<int[]> BFS(HIntIntIntHashMap graph, int[] consWords, int choice) {
+		ArrayList<int[]> connected = new ArrayList<int[]> ();
+		TIntIntHashMap visited = new TIntIntHashMap ();
+		for (int word : consWords) {
+			visited.put(word, 0);
+		}
+		
+		for (int word : consWords) {
+			if (visited.get(word) == 0) {
+				Stack<Integer> queue = new Stack<Integer> ();
+				queue.push(word);
+				TIntHashSet component = new TIntHashSet ();
+				while (queue.size() > 0) {
+					int node = queue.pop();
+					component.add(node);
+					for(int neighbor : graph.get(node).keys()) {
+						if (choice == -1) {
+							if (graph.get(node, neighbor) > 0 && visited.get(neighbor) == 0) {
+								visited.adjustValue(neighbor, 1);
+								queue.push(neighbor);
+							}
+						} else {
+							if (graph.get(node, neighbor) == choice && visited.get(neighbor) == 0) {
+								visited.adjustValue(neighbor, 1);
+								queue.push(neighbor);
+							}
+						}
+					}
+				}
+				connected.add(component.toArray());
+			}
+		}
+		
+		return connected;
+		
+	}
+	
+	private static ArrayList<int[]> mergeML(ArrayList<int[]> ml) {
+		HIntIntIntHashMap graph = new HIntIntIntHashMap ();
+		generateGraph(ml, 1, graph);
+		int[] consWords = graph.getKey1Set();
+		
+		ArrayList<int[]> ml_merged = BFS(graph, consWords, -1);
+		return ml_merged;
+	}
+	
+	private static void mergeCL(ArrayList<Constraint> cl_ml_merged,
+			ArrayList<Constraint> ml_remained, HIntIntIntHashMap graph) throws Exception {
+		int[] consWords = graph.getKey1Set();
+		// get connected components
+		ArrayList<int[]> connectedComp = BFS(graph, consWords, -1);
+		
+		// merge ml to cl
+		for(int[] comp : connectedComp) {
+			ArrayList<int[]> cl_tmp = BFS(graph, comp, 1);
+			ArrayList<int[]> ml_tmp = BFS(graph, comp, 2);
+			
+			ArrayList<int[]> cl_new = new ArrayList<int[]> ();
+			for(int[] cons : cl_tmp) {
+				if (cons.length > 1) {
+					cl_new.add(cons);
+				}
+			}
+			
+			ArrayList<int[]> ml_new = new ArrayList<int[]> ();
+			for(int[] cons : ml_tmp) {
+				if (cons.length > 1) {
+					ml_new.add(cons);
+				}
+			}
+			
+			if(cl_new.size() > 0) {
+				Constraint cons = new Constraint();
+				cons.cl = cl_new;
+				cons.ml = ml_new;
+				cl_ml_merged.add(cons);
+			} else {
+				if (ml_new.size() != 1) {
+					System.out.println("ml_new.size != 1 && cl_new.size == 0");
+					throw new Exception();
+				}
+				Constraint cons = new Constraint();
+				cons.cl = null;
+				cons.ml = ml_new;
+				ml_remained.add(cons);
+			}
+		}
+	}
+	
+	private static HIntIntIntHashMap flipGraph(ArrayList<int[]> cl_merged, ArrayList<int[]> ml_merged, 
+			HIntIntIntHashMap graph) {
+		
+		HIntIntIntHashMap flipped = new HIntIntIntHashMap ();
+		TIntHashSet consWordsSet = getConsWords(cl_merged);
+		TIntHashSet set2 = getConsWords(ml_merged);
+		consWordsSet.addAll(set2.toArray());
+		int[] consWords = consWordsSet.toArray();
+		
+		for(int word : consWords) {
+			TIntHashSet cl_neighbor = new TIntHashSet ();
+			for(int neighbor : graph.get(word).keys()) {
+				if(graph.get(word, neighbor) == 1) {
+					cl_neighbor.add(neighbor);
+				}
+			}
+			consWordsSet.removeAll(cl_neighbor.toArray());
+			for(int nonConnected : consWordsSet.toArray()) {
+				flipped.put(word, nonConnected, 1);
+			}
+			for(int neighbor : graph.get(word).keys()) {
+				flipped.put(word, neighbor, 0);
+			}
+			consWordsSet.addAll(cl_neighbor.toArray());
+		}
+		
+		//printGraph(flipped, "flipped half");
+		for(int[] ml : ml_merged) {
+			for(int w1 : ml) {
+				for(int w2 : flipped.get(w1).keys()) {
+					if(flipped.get(w1, w2) > 0) {
+						for(int w3 : ml) {
+							if(w1 != w3 && flipped.get(w3, w2) == 0) {
+								flipped.put(w1, w2, 0);
+								flipped.put(w2, w1, 0);
+							}
+						}
+					}
+				}
+				
+				for(int w2 : ml) {
+					if (w1 != w2) {
+						flipped.put(w1, w2, 2);
+						flipped.put(w2, w1, 2);
+					}
+				}
+			}
+		}
+		return flipped;
+	}
+	
+	private static TIntHashSet getUnion(TIntHashSet set1, TIntHashSet set2) {
+		TIntHashSet union = new TIntHashSet ();
+		union.addAll(set1.toArray());
+		union.addAll(set2.toArray());
+		return union;
+	}
+	
+	private static TIntHashSet getDifference(TIntHashSet set1, TIntHashSet set2) {
+		TIntHashSet diff = new TIntHashSet ();
+		diff.addAll(set1.toArray());
+		diff.removeAll(set2.toArray());
+		return diff;
+	}
+	
+	private static TIntHashSet getIntersection(TIntHashSet set1, TIntHashSet set2) {
+		TIntHashSet inter = new TIntHashSet ();
+		for(int ww : set1.toArray()) {
+			if(set2.contains(ww)) {
+				inter.add(ww);
+			}
+		}
+		return inter;
+	}
+	
+	private static void BronKerBosch_v2(TIntHashSet R, TIntHashSet P, TIntHashSet X, 
+			HIntIntIntHashMap G, ArrayList<int[]> C) {
+		if(P.size() == 0 && X.size() == 0) {
+			if(R.size() > 0) {
+				C.add(R.toArray());
+			}
+			return;
+		}
+		
+		int d = 0;
+		int pivot = -1;
+		
+		TIntHashSet unionPX = getUnion(P, X);
+		for(int v : unionPX.toArray()) {
+			TIntHashSet neighbors = new TIntHashSet ();
+			for(int node : G.get(v).keys()) {
+				if(G.get(v, node) > 0 && v != node) {
+					neighbors.add(node);
+				}
+			}
+			if(neighbors.size() > d) {
+				d = neighbors.size();
+				pivot = v;
+			}
+		}
+		
+		TIntHashSet neighbors = new TIntHashSet ();
+		if(pivot != -1) {
+			for(int node : G.get(pivot).keys()) {
+				if (G.get(pivot, node) > 0 && pivot != node) {
+					neighbors.add(node);
+				}
+			}
+		}
+		
+		TIntHashSet diffPN = getDifference(P, neighbors);
+		for(int v : diffPN.toArray()) {
+			TIntHashSet newNeighbors = new TIntHashSet();
+			for(int node : G.get(v).keys()) {
+				if(G.get(v, node) > 0 && v != node) {
+					newNeighbors.add(node);
+				}
+			}
+			
+			TIntHashSet unionRV = new TIntHashSet();
+			unionRV.add(v);
+			unionRV.addAll(R.toArray());
+			BronKerBosch_v2(unionRV, getIntersection(P, newNeighbors), getIntersection(X, newNeighbors), G, C);
+			
+			P.remove(v);
+			X.add(v);
+		}
+	}
+	
+	private static ArrayList<int[]> generateCliques(HIntIntIntHashMap graph) {
+		
+		TIntHashSet R = new TIntHashSet ();
+		TIntHashSet P = new TIntHashSet ();
+		TIntHashSet X = new TIntHashSet ();
+		ArrayList<int[]> cliques = new ArrayList<int[]> ();
+		P.addAll(graph.getKey1Set());
+		
+		BronKerBosch_v2(R, P, X, graph, cliques);
+		
+		return cliques;
+	}
+	
+	private static int generateCLTree(ArrayList<Constraint> cl_merged, 
+			HIntIntIntHashMap graph, TIntObjectHashMap<Node> subtree) {
+		// the index of root is 0
+		int index = 0;
+		for(Constraint con : cl_merged) {
+			ArrayList<int[]> cl = con.cl;
+			ArrayList<int[]> ml = con.ml;
+			HIntIntIntHashMap flipped = flipGraph(cl, ml, graph);
+			//printGraph(flipped, "flipped graph");
+			ArrayList<int[]> cliques = generateCliques(flipped);
+			//printArrayList(cliques, "cliques found from flipped graph");
+			
+			Node cl_node = new Node();
+			cl_node.index = ++index;
+			cl_node.rootChild = true;
+			cl_node.linkType = "CL_";
+			cl_node.children = new ArrayList<Integer>();		
+			for(int[] clique : cliques) {
+				TIntHashSet clique_remained = new TIntHashSet(clique);
+				//printHashSet(clique_remained, "clique_remained");
+				ArrayList<int[]> ml_tmp = BFS(graph, clique, 2);
+				ArrayList<int[]> ml_new = new ArrayList<int[]> ();
+				for(int[] ml_con : ml_tmp) {
+					if (ml_con.length > 1) {
+						ml_new.add(ml_con);
+						for(int word : ml_con) {
+							clique_remained.remove(word);
+						}
+					}
+				}
+				//printHashSet(clique_remained, "clique_remained");
+				
+				Node node = new Node();
+				node.index = ++index;
+				node.rootChild = false;
+				cl_node.children.add(node.index);
+				if(ml_new.size() == 0) {
+					node.linkType = "NL_";
+					node.children = null;
+					node.words = clique_remained.toArray();
+				} else if(clique_remained.size() == 0 && ml_new.size() == 1) {
+					node.linkType = "ML_";
+					node.children = null;
+					node.words = ml_new.get(0);
+				} else {
+					node.linkType = "NL_IN_";
+					node.children = new ArrayList<Integer>();
+					node.words = null;
+					for(int[] ml_clique : ml_new) {
+						Node child_node = new Node();
+						child_node.index = ++index;
+						node.rootChild = false;
+						child_node.linkType = "ML_";
+						child_node.children = null;
+						child_node.words = ml_clique;
+						node.children.add(index);
+						subtree.put(child_node.index, child_node);
+					}
+					if(clique_remained.size() > 0) {
+						Node child_node = new Node();
+						child_node.index = ++index;
+						node.rootChild = false;
+						child_node.linkType = "NL_";
+						child_node.children = null;
+						child_node.words = clique_remained.toArray();
+						node.children.add(index);
+						subtree.put(child_node.index, child_node);						
+					}
+				}
+				subtree.put(node.index, node);
+			}
+			subtree.put(cl_node.index, cl_node);
+		}
+		
+		return index;
+	}
+	
+	private static int generateMLTree(ArrayList<Constraint> ml_remained, 
+			TIntObjectHashMap<Node> subtree, int index) {
+		//printConstraintList(ml_remained, "remained");
+		int ml_index = index;
+		for(Constraint con : ml_remained) {
+			for(int[] ml : con.ml) {
+				Node node = new Node();
+				node.index = ++ml_index;
+				node.rootChild = true;
+				node.linkType = "ML_";
+				node.children = null;
+				node.words = ml;
+				subtree.put(node.index, node);
+			}
+		}
+		return ml_index;
+	}
+	
+	private static TIntHashSet getConsWords(ArrayList<int[]> cons) {
+		TIntHashSet consWords = new TIntHashSet();
+		for(int[] con : cons) {
+			consWords.addAll(con);
+		}
+		return consWords;
+	}
+	
+	private static TIntObjectHashMap<Node> mergeAllConstraints(ArrayList<int[]> ml, ArrayList<int[]> cl) {
+		//printArrayList(ml, "read in ml");
+		//printArrayList(cl, "read in cl");
+		
+		// merge ml constraints
+		ArrayList<int[]> ml_merged = mergeML(ml);
+		
+		// generate graph
+		HIntIntIntHashMap graph = new HIntIntIntHashMap ();
+		generateGraph(cl, 1, graph);
+		generateGraph(ml_merged, 2, graph);
+		//printGraph(graph, "original graph");
+		
+		// merge cl: notice some ml can be merged into cl, the remained ml will be kept
+		ArrayList<Constraint> cl_ml_merged = new ArrayList<Constraint> ();
+		ArrayList<Constraint> ml_remained = new ArrayList<Constraint> ();
+		try {
+			mergeCL(cl_ml_merged, ml_remained, graph);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		
+		//printConstraintList(cl_ml_merged, "cl ml merged");
+		//printConstraintList(ml_remained, "ml_remained");
+		
+		TIntObjectHashMap<Node> subtree = new TIntObjectHashMap<Node>();
+		int index = generateCLTree(cl_ml_merged, graph, subtree);
+		int new_index = generateMLTree(ml_remained, subtree, index);
+		
+		return subtree;
+	}
+	
+	private static TIntObjectHashMap<Node> noMergeConstraints(ArrayList<int[]> ml, ArrayList<int[]> cl) {
+		TIntObjectHashMap<Node> subtree = new TIntObjectHashMap<Node>();
+		int index = 0;
+		for(int[] cons : ml) {
+			Node node = new Node();
+			node.index = ++index;
+			node.rootChild = true;
+			node.linkType = "ML_";
+			node.children = null;
+			node.words = cons;
+			subtree.put(node.index, node);
+		}
+		
+		for(int[] cons : cl) {
+			Node node = new Node();
+			node.index = ++index;
+			node.rootChild = true;
+			node.linkType = "CL_";
+			node.children = null;
+			node.words = cons;
+			subtree.put(node.index, node);
+		}
+		
+		return subtree;
+	}
+	
+	private static void printHashSet(TIntHashSet set, String title){
+		String tmp = title + ": ";
+		for(int word : set.toArray()) {
+			tmp += word + " ";
+		}
+	}
+	
+	private static void printConstraintList(ArrayList<Constraint> constraints, String title) {
+		System.out.println(title + ": ");
+		for(Constraint cons : constraints) {
+			String tmp = "";
+			if(cons.ml != null) {
+				tmp = "ml: ";
+				for(int[] ml : cons.ml) {
+					tmp += "( ";
+					for(int ww : ml) {
+						tmp += ww + " ";
+					}
+					tmp += ") ";
+				}
+			}
+			if(cons.cl != null) {
+				tmp += "cl: ";
+				for(int[] cl : cons.cl) {
+					tmp += "( ";
+					for(int ww : cl) {
+						tmp += ww + " ";
+					}
+					tmp += ") ";
+				}
+			}
+			System.out.println(tmp);
+		}
+	}
+	
+	private static void printGraph(HIntIntIntHashMap graph, String title) {
+		System.out.println(title + ": ");
+		for(int w1 : graph.getKey1Set()) {
+			String tmp = "";
+			for(int w2 : graph.get(w1).keys()) {
+				tmp += "( " + w1 + " " + w2 + " : " + graph.get(w1, w2) + " ) ";
+			}
+			System.out.println(tmp);
+		}
+	}
+	
+	private static void printArrayList(ArrayList<int[]> result, String title) {
+		System.out.println(title + ": ");
+	    for(int[] sent : result) {
+	    	String line = "";
+	    	for (int word : sent) {
+	    		line += word + " ";
+	    	}
+	    	System.out.println(line);
+	    }
+	}
+	
+	private static void printSubTree(TIntObjectHashMap<Node> subtree) {
+		for(int index : subtree.keys()) {
+			Node node = subtree.get(index);
+			String tmp  = "Node " + index + " : ";
+			tmp += node.linkType + " ";
+			if(node.children != null) {
+				tmp += "chilren [";
+				for(int child : node.children) {
+					tmp += child + " ";
+				}
+				tmp += "]";
+			}
+			if (node.words != null) {
+				tmp += " words [ "; 
+				for(int word : node.words) {
+					tmp += word + " ";
+				}
+				tmp += "]";
+			}
+			System.out.println(tmp);
+		}
+	}
+	
+	/**
+	 * This is the top-level method that creates the ontology from a set of
+	 * Constraint objects.
+	 * @param vocabFilename the .voc file corresponding to the data set
+	 * being used
+	 * @throws Exception 
+	 */
+	public static void createOntology(String consFilename, String vocabFilename,
+			String outputDir, boolean mergeConstraints) throws Exception {
+		
+		// load vocab
+		int LANG_ID = 0;
+	    ArrayList<String> vocab = getVocab(vocabFilename);
+	    System.out.println("Load vocab size: " + vocab.size());
+	    // load constraints and make sure all constraints words are contained in vocab
+	    ArrayList<int[]> ml = new ArrayList<int[]> ();
+	    ArrayList<int[]> cl = new ArrayList<int[]> ();
+	    if(consFilename != null) {
+	    	readConstraints(consFilename, vocab, ml, cl);
+	    }
+	    
+	    // merge constraints
+	    TIntObjectHashMap<Node> subtree;
+	    if (mergeConstraints) {
+	    	subtree = mergeAllConstraints(ml, cl);
+	    } else {
+	    	subtree = noMergeConstraints(ml, cl);
+	    }
+	    printSubTree(subtree);
+	    
+	    // get constraint count (If count == 0, it is unconstraint words)
+	    int[] vocabFlag = new int[vocab.size()];
+	    for(int ii = 0; ii < vocabFlag.length; ii++) {
+	    	vocabFlag[ii] = 0;
+	    }
+	    for(int index : subtree.keys()) {
+	    	Node node = subtree.get(index);
+	    	if(node.words != null) {
+	    		for(int wordIndex : node.words) {
+	    			vocabFlag[wordIndex]++;
+	    		}
+	    	}
+	    }	    
+	    
+	    /////////////////
+	    
+	    OntologyWriter writer = new OntologyWriter(outputDir, true);
+	    List<Integer> rootChildren = new ArrayList<Integer>();
+	    
+	    int leafIndex = subtree.size();
+	    for(int index : subtree.keys()) {
+	    	Node node = subtree.get(index);
+	    	List<Integer> nodeChildren = null;
+	    	ArrayList<WordTuple> nodeWords = null; 
+	    	if(node.rootChild) {
+	    		rootChildren.add(node.index);
+	    	}
+	    	if(node.children != null && node.words != null) {
+	    		System.out.println("A node has both children and words! Wrong!");
+	    		throw new Exception();
+	    	} else if(node.children != null) {
+	    		nodeChildren = node.children;
+	    	} else if(node.words != null) {
+	    		if(node.words.length == 1) {
+	    	    	nodeWords = new ArrayList<WordTuple> ();
+	    			WordTuple wt = new WordTuple();
+	    			wt.id = node.words[0];
+	    			wt.language = LANG_ID;
+	    			wt.word = vocab.get(wt.id);
+	    			wt.count = 1.0 / vocabFlag[wt.id];
+	    			nodeWords.add(wt);
+	    		} else {
+		    		nodeChildren = new ArrayList<Integer>();
+		    		for(int wordIndex : node.words) {
+		    			leafIndex++;
+		    			nodeChildren.add(leafIndex);
+		    	    	List<Integer> leafChildren = null;
+		    	    	ArrayList<WordTuple> leafWords = new ArrayList<WordTuple> ();
+		    			WordTuple wt = new WordTuple();
+		    			wt.id = wordIndex;
+		    			wt.language = LANG_ID;
+		    			wt.word = vocab.get(wordIndex);
+		    			wt.count = 1.0 / vocabFlag[wordIndex];
+		    			leafWords.add(wt);
+		    			String name = "LEAF_" + leafIndex + "_" + wt.word;
+		    			writer.addSynset(leafIndex, name, leafChildren, leafWords);
+		    		}
+	    		}
+	    	}
+	    	
+	    	if(node.words != null && node.words.length == 1) {
+    			node.linkType = "LEAF_";
+    			String name = node.linkType + node.index + "_" + vocab.get(node.words[0]);
+	    		writer.addSynset(node.index, name, nodeChildren, nodeWords);
+	    	} else {
+	    		writer.addSynset(node.index, node.linkType + node.index, nodeChildren, nodeWords);
+	    	}
+	    	
+	    }
+	    
+	    // Unused words
+	    for(int wordIndex = 0; wordIndex < vocabFlag.length; wordIndex++) {
+	    	if (vocabFlag[wordIndex] == 0) {
+	    		rootChildren.add(++leafIndex);
+    	    	List<Integer> leafChildren = null;
+    	    	ArrayList<WordTuple> leafWords = new ArrayList<WordTuple> ();
+    			WordTuple wt = new WordTuple();
+    			wt.id = wordIndex;
+    			wt.language = LANG_ID;
+    			wt.word = vocab.get(wordIndex);
+    			wt.count = 1.0;
+    			leafWords.add(wt);
+    			String name = "LEAF_" + leafIndex + "_" + wt.word;  			
+	    		writer.addSynset(leafIndex, name, leafChildren, leafWords);
+	    	}
+	    }
+	    
+	    writer.addSynset(0, "ROOT", rootChildren, null);
+	    writer.finalizeMe();
+	}
+	
+	
+	public static void main(String[] args) {
+		String vocabFn = "input/toy/toy.voc";
+		String consFile = "input/toy/toy.cons";
+		String outputFn = "input/toy/toy_test.wn";		
+		boolean mergeConstraints = true;
+		try {
+			createOntology(consFile, vocabFn, outputFn, mergeConstraints);
+		} catch (Exception e){
+			e.printStackTrace();
+		}
+	}
+}
diff --git a/src/cc/mallet/topics/tree/Path.java b/src/cc/mallet/topics/tree/Path.java
new file mode 100755
index 000000000..abcbf7e7a
--- /dev/null
+++ b/src/cc/mallet/topics/tree/Path.java
@@ -0,0 +1,53 @@
+package cc.mallet.topics.tree;
+
+import gnu.trove.TIntArrayList;
+
+/**
+ * This class defines a path. 
+ * A path is a list of nodes, and the last node emits a word.
+ * 
+ * @author Yuening Hu
+ */
+
+public class Path {
+	
+	TIntArrayList nodes;
+	//TIntArrayList children;
+	int finalWord;
+	
+	public Path () {
+		this.nodes = new TIntArrayList();
+		this.finalWord = -1;
+	}
+	
+	/**
+	 * Add nodes to this path.
+	 */
+	public void addNodes (TIntArrayList innodes) {
+		for (int ii = 0; ii < innodes.size(); ii++) {
+			int node_index = innodes.get(ii);
+			this.nodes.add(node_index);
+		}
+	}
+	
+	/**
+	 * Add the final word of this path.
+	 */
+	public void addFinalWord(int word) {
+		this.finalWord = word;
+	}
+	
+	/**
+	 * return the node list.
+	 */
+	public TIntArrayList getNodes() {
+		return this.nodes;
+	}
+	
+	/**
+	 * return the final word.
+	 */
+	public int getFinalWord() {
+		return this.finalWord;
+	}
+}
diff --git a/src/cc/mallet/topics/tree/PriorTree.java b/src/cc/mallet/topics/tree/PriorTree.java
new file mode 100755
index 000000000..93a190974
--- /dev/null
+++ b/src/cc/mallet/topics/tree/PriorTree.java
@@ -0,0 +1,363 @@
+package cc.mallet.topics.tree;
+
+import gnu.trove.TIntArrayList;
+import gnu.trove.TIntObjectHashMap;
+import gnu.trove.TIntObjectIterator;
+import gnu.trove.TObjectDoubleHashMap;
+
+import java.io.BufferedReader;
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+
+import cc.mallet.types.Alphabet;
+import cc.mallet.types.InstanceList;
+
+import topicmod_projects_ldawn.WordnetFile.WordNetFile;
+import topicmod_projects_ldawn.WordnetFile.WordNetFile.Synset;
+import topicmod_projects_ldawn.WordnetFile.WordNetFile.Synset.Word;
+
+/**
+ * This class loads the prior tree structure from the proto buffer files of tree structure.
+ * Main entrance: initialize()
+ * 
+ * @author Yuening Hu
+ */
+
+public class PriorTree {
+	
+	int root;
+	int maxDepth;
+	
+	TObjectDoubleHashMap<String> hyperparams;
+	TIntObjectHashMap<Node> nodes;
+	TIntObjectHashMap<ArrayList<Path>> wordPaths;
+	
+	public PriorTree () {
+		this.hyperparams = new TObjectDoubleHashMap<String> ();
+		this.nodes = new TIntObjectHashMap<Node> ();
+		this.wordPaths = new TIntObjectHashMap<ArrayList<Path>> ();
+	}
+	
+	/**
+	 * Get the input tree file lists from the given tree file names
+	 */
+	private ArrayList<String> getFileList(String tree_files) {
+		
+		int split_index = tree_files.lastIndexOf('/');
+		String dirname = tree_files.substring(0, split_index);
+		String fileprefix = tree_files.substring(split_index+1);
+		fileprefix = fileprefix.replace("*", "");
+		
+		//System.out.println(dirname);
+		//System.out.println(fileprefix);
+		
+		File dir = new File(dirname);
+		String[] children = dir.list();
+		ArrayList<String> filelist = new ArrayList<String>();
+
+		for (int i = 0; i < children.length; i++) {
+			if (children[i].startsWith(fileprefix)) {
+				System.out.println("Found one: " + dirname + "/" + children[i]);
+				String filename = dirname + "/" + children[i];
+				filelist.add(filename);
+			}
+		}
+		return filelist;
+	}
+	
+	/**
+	 * Load hyper parameters from the given file
+	 */
+	private void loadHyperparams(String hyperFile) {
+		try {
+			FileInputStream infstream = new FileInputStream(hyperFile);
+			DataInputStream in = new DataInputStream(infstream);
+			BufferedReader br = new BufferedReader(new InputStreamReader(in));
+			
+			String strLine;
+			//Read File Line By Line
+			while ((strLine = br.readLine()) != null) {
+				strLine = strLine.trim();
+				String[] str = strLine.split(" ");
+				if (str.length != 2) {
+					System.out.println("Hyperparameter file is not in the correct format!");
+					System.exit(0);
+				}
+				double tmp = Double.parseDouble(str[1]);
+				hyperparams.put(str[0], tmp);
+			}
+			in.close();			
+			
+//			Iterator<Map.Entry<String, Double>> it = hyperparams.entrySet().iterator();
+//			while (it.hasNext()) {
+//				Map.Entry<String, Double> entry = it.next();
+//				System.out.println(entry.getKey());
+//				System.out.println(entry.getValue());
+//			}
+			
+		} catch (IOException e) {
+			System.out.println("No hyperparameter file Found!");
+		}
+	}
+	
+	/**
+	 * Load tree nodes one by one: load the children, words of each node
+	 */
+	private void loadTree(String tree_files, ArrayList<String> vocab) {
+		
+		ArrayList<String> filelist = getFileList(tree_files);
+		
+		for (int ii = 0; ii < filelist.size(); ii++) {
+			String filename = filelist.get(ii);
+			WordNetFile tree = null;
+			try {
+				tree = WordNetFile.parseFrom(new FileInputStream(filename));
+			} catch (IOException e) {
+				System.out.println("Cannot find tree file: " + filename);
+			}
+			
+			int new_root = tree.getRoot();
+			assert( (new_root == -1) || (this.root == -1) || (new_root == this.root));
+			if (new_root >= 0) {
+				this.root = new_root;
+			}
+			
+			for (int jj = 0; jj < tree.getSynsetsCount(); jj++) {
+				Synset synset = tree.getSynsets(jj);
+				Node n = new Node();
+				n.setOffset(synset.getOffset());
+				n.setRawCount(synset.getRawCount());
+				n.setHypoCount(synset.getHyponymCount());
+				
+				double transition = hyperparams.get(synset.getHyperparameter());
+				n.setTransitionScalor(transition);
+				for (int cc = 0; cc < synset.getChildrenOffsetsCount(); cc++) {
+					n.addChildrenOffset(synset.getChildrenOffsets(cc));
+				}
+				
+				for (int ww = 0; ww < synset.getWordsCount(); ww++) {
+					Word word = synset.getWords(ww);
+					int term_id = vocab.indexOf(word.getTermStr());
+					//int term_id = vocab.lookupIndex(word.getTermStr());
+					double word_count = word.getCount();
+					n.addWord(term_id, word_count);
+				}
+				
+				nodes.put(n.getOffset(), n);
+			}
+		}
+		
+		assert(this.root >= 0) : "Cannot find a root node in the tree file. Have you provided " +
+		"all tree files instead of a single tree file? (e.g., use 'tree.wn' instead of 'tree.wn.0')";
+		
+	}
+	
+	/**
+	 * Get all the paths in the tree, keep the (word, path) pairs
+	 * Note the word in the pair is actually the word of the leaf node
+	 */
+	private int searchDepthFirst(int depth, 
+								 int node_index, 
+								 TIntArrayList traversed, 
+								 TIntArrayList next_pointers) {
+		int max_depth = depth;
+		traversed.add(node_index);
+		Node current_node = this.nodes.get(node_index);
+		current_node.addPaths(1);
+		
+		// go over the words that current node emits
+		for (int ii = 0; ii < current_node.getNumWords(); ii++) {
+			int word = current_node.getWord(ii);
+			Path p = new Path();
+			p.addNodes(traversed);
+			// p.addChildren(next_pointers);
+			p.addFinalWord(word);
+			if (! this.wordPaths.contains(word)) {
+				this.wordPaths.put(word, new ArrayList<Path> ());
+			}
+			ArrayList<Path> tmp = this.wordPaths.get(word);
+			tmp.add(p);
+		}
+		
+		// go over the child nodes of the current node
+		for (int ii = 0; ii < current_node.getNumChildren(); ii++) {
+			int child = current_node.getChild(ii);
+			next_pointers.add(child);
+			int child_depth = this.searchDepthFirst(depth+1, child, traversed, next_pointers);
+			next_pointers.remove(next_pointers.size()-1);
+			max_depth = max_depth >= child_depth ? max_depth : child_depth;
+		}
+		
+		traversed.remove(traversed.size()-1);
+		return max_depth;
+	}
+	
+	/**
+	 * Set the scaled prior distribution of each node
+	 * According to the hypoCount of the nodes' children, generate a Multinomial
+	 * distribution, then scaled by transitionScalor
+	 */
+	private void setPrior() {
+		for (TIntObjectIterator<Node> it = this.nodes.iterator(); it.hasNext(); ) {
+			it.advance();
+			Node n = it.value();
+			int numChildren = n.getNumChildren();
+			int numWords = n.getNumWords();
+			
+			// firstly set the hypoCount for each child
+			if (numChildren > 0) {
+				assert numWords == 0;
+				n.initializePrior(numChildren);
+				for (int ii = 0; ii < numChildren; ii++) {
+					int child = n.getChild(ii);
+					n.setPrior(ii, this.nodes.get(child).getHypoCount());
+				}
+			}
+			
+			// this step is for tree structures whose leaf nodes contain more than one words
+			// if the leaf node contains multiple words, we will treat each word 
+			// as a "leaf node" and set a multinomial over all the words
+			// if the leaf node contains only one word, so this step will be jumped over.
+			if (numWords > 1) {
+				assert numChildren == 0;
+				n.initializePrior(numWords);
+				for (int ii = 0; ii < numWords; ii++) {
+					n.setPrior(ii, n.getWordCount(ii));
+				}				
+			}
+			
+			// then normalize and scale
+			n.normalizePrior();
+		}
+	}
+	
+	/**
+	 * the entrance of this class
+	 */
+	public void initialize(String treeFiles, String hyperFile, ArrayList<String> vocab) {
+		this.loadHyperparams(hyperFile);
+		this.loadTree(treeFiles, vocab);
+		
+		TIntArrayList traversed = new TIntArrayList ();
+		TIntArrayList next_pointers = new TIntArrayList ();
+		//this.maxDepth = this.searchDepthFirst(0, 0, traversed, next_pointers);
+        this.maxDepth = this.searchDepthFirst(0, this.root, traversed, next_pointers);
+        this.setPrior();
+        
+        //System.out.println("**************************");
+        // check the word paths
+        System.out.println("Number of words: " + this.wordPaths.size());
+        //System.out.println("Initialized paths");
+        
+		/*        
+        for (TIntObjectIterator<ArrayList<Path>> it = this.wordPaths.iterator(); it.hasNext(); ) {
+        	it.advance();
+        	ArrayList<Path> paths = it.value();
+        	System.out.print(it.key() + ", " + vocab.get(it.key()));
+        	//System.out.print(it.key() + ", " + vocab.lookupObject(it.key()));
+        	for (int ii = 0; ii < paths.size(); ii++) {
+        		Path p = paths.get(ii);
+        		System.out.print(", Path " + ii);
+        		System.out.print(", Path nodes list: " + p.getNodes());
+        		System.out.println(", Path final word: " + p.getFinalWord());
+        	}
+		}
+		System.out.println("**************************");
+
+		// check the prior
+		System.out.println("Check the prior");
+		for (TIntObjectIterator<Node> it = this.nodes.iterator(); it.hasNext(); ) {
+			it.advance();
+			if (it.value().getTransitionPrior().size() > 0) {
+				System.out.print("Node " + it.key());
+				System.out.println(", Transition prior " + it.value().getTransitionPrior());
+			}
+		}
+		System.out.println("**************************");
+		*/
+		
+	}
+	
+	public int getMaxDepth() {
+		return this.maxDepth;
+	}
+	
+	public int getRoot() {
+		return this.root;
+	}
+	
+	public TIntObjectHashMap<Node> getNodes() {
+		return this.nodes;
+	}
+	
+	public TIntObjectHashMap<ArrayList<Path>> getWordPaths() {
+		return this.wordPaths;
+	} 
+	
+	/**
+	 * Load vocab
+	 */
+	public ArrayList<String> readVocab(String vocabFile) {
+		
+		ArrayList<String> vocab = new ArrayList<String> ();
+		
+		try {
+			FileInputStream infstream = new FileInputStream(vocabFile);
+			DataInputStream in = new DataInputStream(infstream);
+			BufferedReader br = new BufferedReader(new InputStreamReader(in));
+			
+			String strLine;
+			//Read File Line By Line
+			while ((strLine = br.readLine()) != null) {
+				strLine = strLine.trim();
+				String[] str = strLine.split("\t");
+				if (str.length > 1) {
+					vocab.add(str[1]);
+				} else {
+					System.out.println("Error! " + strLine);
+					return null;
+				}
+			}
+			in.close();
+			
+		} catch (IOException e) {
+			System.out.println("No vocab file Found!");
+		}
+		
+		return vocab;
+	}
+	
+	/**
+	 * test main
+	 */
+	public static void main(String[] args) throws Exception{
+		
+		//String treeFiles = "../toy/toy_set1.wn.*";
+		//String hyperFile = "../toy/tree_hyperparams";
+		//String inputFile = "../input/toy-topic-input.mallet";
+		//String vocabFile = "../toy/toy.voc";
+		
+		//String treeFiles = "../synthetic/synthetic_set1.wn.*";
+		//String hyperFile = "../synthetic/tree_hyperparams";
+		//String inputFile = "../input/synthetic-topic-input.mallet";
+		//String vocabFile = "../synthetic/synthetic.voc";
+		
+		String treeFiles = "input/denews.all.wn";
+		String hyperFile = "input/denews.hyper";
+		String inputFile = "input/denews-topic-input.mallet";
+		String vocabFile = "input/denews.filter.voc";		
+		
+		PriorTree tree = new PriorTree();
+		ArrayList<String> vocab = tree.readVocab(vocabFile);
+		
+		InstanceList ilist = InstanceList.load (new File(inputFile));
+		tree.initialize(treeFiles, hyperFile, vocab);
+	}
+
+}
diff --git a/src/cc/mallet/topics/tree/TopicSampler.java b/src/cc/mallet/topics/tree/TopicSampler.java
new file mode 100755
index 000000000..e7ffe00fe
--- /dev/null
+++ b/src/cc/mallet/topics/tree/TopicSampler.java
@@ -0,0 +1,278 @@
+package cc.mallet.topics.tree;
+
+import gnu.trove.TDoubleArrayList;
+import gnu.trove.TIntArrayList;
+import gnu.trove.TIntHashSet;
+import gnu.trove.TIntIntHashMap;
+import gnu.trove.TIntIntIterator;
+
+import java.io.BufferedReader;
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintStream;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import cc.mallet.topics.tree.TreeTopicSamplerHashD.DocData;
+import cc.mallet.types.Dirichlet;
+import cc.mallet.types.FeatureSequence;
+import cc.mallet.types.Instance;
+import cc.mallet.types.InstanceList;
+import cc.mallet.util.Randoms;
+
+/**
+ * Abstract class for TopicSampler.
+ * Defines the basic functions for input, output, resume.
+ * Also defines the abstract functions for child class.
+ * 
+ * @author Yuening Hu
+ */
+
+public abstract class TopicSampler{
+		
+	int numTopics;
+	int numIterations;
+	int startIter;
+	Randoms random;
+	double[] alpha;
+	double alphaSum;
+	TDoubleArrayList lhood;
+	TDoubleArrayList iterTime;
+	ArrayList<String> vocab;
+
+	TreeTopicModel topics;
+	TIntHashSet cons;
+	
+	public TopicSampler (int numberOfTopics, double alphaSum, int seed) {
+		this.numTopics = numberOfTopics;
+		this.random = new Randoms(seed);
+
+		this.alphaSum = alphaSum;
+		this.alpha = new double[numTopics];
+		Arrays.fill(alpha, alphaSum / numTopics);
+
+		this.vocab = new ArrayList<String> ();
+		this.cons = new TIntHashSet();
+		
+		this.lhood = new TDoubleArrayList();
+		this.iterTime = new TDoubleArrayList();
+		this.startIter = 0;
+		
+		// notice: this.topics and this.data are not initialized in this abstract class,
+		// in each sub class, the topics variable is initialized differently.
+	}
+	
+
+	
+	public void setNumIterations(int iters) {
+		this.numIterations = iters;
+	}
+	
+	public int getNumIterations() {
+		return this.numIterations;
+	}
+	
+
+		
+	/**
+	 * This function returns the likelihood.
+	 */
+	public double lhood() {
+		return this.docLHood() + this.topics.topicLHood();
+	}
+	
+	/**
+	 * Resume lhood and iterTime from the saved lhood file. 
+	 */
+	public void resumeLHood(String lhoodFile) throws IOException{
+		FileInputStream lhoodfstream = new FileInputStream(lhoodFile);
+		DataInputStream lhooddstream = new DataInputStream(lhoodfstream);
+		BufferedReader brLHood = new BufferedReader(new InputStreamReader(lhooddstream));
+		// the first line is the title
+		String strLine = brLHood.readLine();
+		while ((strLine = brLHood.readLine()) != null) {
+			strLine = strLine.trim();
+			String[] str = strLine.split("\t");
+			// iteration, likelihood, iter_time
+			myAssert(str.length == 3, "lhood file problem!");
+			this.lhood.add(Double.parseDouble(str[1]));
+			this.iterTime.add(Double.parseDouble(str[2]));
+		}
+		this.startIter = this.lhood.size();
+		if (this.startIter > this.numIterations) {
+			System.out.println("Have already sampled " + this.numIterations + " iterations!");
+			System.exit(0);
+		}
+		System.out.println("Start sampling for iteration " + this.startIter);
+		brLHood.close();
+	}
+	
+	/**
+	 * Resumes from the saved files.
+	 */
+	public void resume(InstanceList training, String resumeDir) {
+		try {
+			String statesFile = resumeDir + ".states";
+			resumeStates(training, statesFile);
+			
+			String lhoodFile = resumeDir + ".lhood";
+			resumeLHood(lhoodFile);
+		} catch (IOException e) {
+			System.out.println(e.getMessage());
+		}
+	}
+	
+	/**
+	 * This function prints the topic words of each topic.
+	 */
+	public void printTopWords(File file, int numWords) throws IOException {
+		PrintStream out = new PrintStream (file);
+		out.print(displayTopWords(numWords));
+		out.close();
+	}
+	
+	/**
+	 * By implementing the comparable interface, this function ranks the words
+	 * in each topic, and returns the top words for each topic.
+	 */
+	public String displayTopWords (int numWords) {
+		
+		class WordProb implements Comparable {
+			int wi;
+			double p;
+			public WordProb (int wi, double p) { this.wi = wi; this.p = p; }
+			public final int compareTo (Object o2) {
+				if (p > ((WordProb)o2).p)
+					return -1;
+				else if (p == ((WordProb)o2).p)
+					return 0;
+				else return 1;
+			}
+		}
+
+		StringBuilder out = new StringBuilder();
+		int numPaths = this.topics.getPathNum();
+		//System.out.println(numPaths);
+		
+		for (int tt = 0; tt < this.numTopics; tt++){
+			String tmp = "\n--------------\nTopic " + tt + "\n------------------------\n";
+			//System.out.print(tmp);
+			out.append(tmp);
+			WordProb[] wp = new WordProb[numPaths];
+			for (int pp = 0; pp < numPaths; pp++){
+				int ww = this.topics.getWordFromPath(pp);
+				double val = this.topics.computeTopicPathProb(tt, ww, pp);
+				wp[pp] = new WordProb(pp, val);
+			}
+			Arrays.sort(wp);
+			for (int ii = 0; ii < wp.length; ii++){
+				int pp = wp[ii].wi;
+				int ww = this.topics.getWordFromPath(pp);
+				//tmp = wp[ii].p + "\t" + this.vocab.lookupObject(ww) + "\n";
+				tmp = wp[ii].p + "\t" + this.vocab.get(ww) + "\n";
+				//System.out.print(tmp);
+				out.append(tmp);
+				if(ii > numWords) {
+					break;
+				}
+			}	
+		}	
+		return out.toString();
+	}
+		
+	/**
+	 * Prints likelihood and iter time.
+	 */
+	public void printStats (File file) throws IOException {
+		PrintStream out = new PrintStream (file);
+		String tmp = "Iteration\t\tlikelihood\titer_time\n";
+		out.print(tmp);
+		for (int iter = 0; iter < this.lhood.size(); iter++) {
+			tmp = iter + "\t" + this.lhood.get(iter) + "\t" + this.iterTime.get(iter);
+			out.println(tmp);
+		}
+		out.close();
+	}
+	
+	public void loadVocab(String vocabFile) {
+		
+		try {
+			FileInputStream infstream = new FileInputStream(vocabFile);
+			DataInputStream in = new DataInputStream(infstream);
+			BufferedReader br = new BufferedReader(new InputStreamReader(in));
+			
+			String strLine;
+			//Read File Line By Line
+			while ((strLine = br.readLine()) != null) {
+				strLine = strLine.trim();
+				String[] str = strLine.split("\t");
+				if (str.length > 1) {
+					this.vocab.add(str[1]);
+				} else {
+					System.out.println("Error! " + strLine);
+				}
+			}
+			in.close();
+			
+		} catch (IOException e) {
+			System.out.println("No vocab file Found!");
+		}
+
+	}
+	
+	/**
+	 * Load constraints
+	 */
+	public void loadConstraints(String consFile) {
+		try {
+			FileInputStream infstream = new FileInputStream(consFile);
+			DataInputStream in = new DataInputStream(infstream);
+			BufferedReader br = new BufferedReader(new InputStreamReader(in));
+			
+			String strLine;
+			//Read File Line By Line
+			while ((strLine = br.readLine()) != null) {
+				strLine = strLine.trim();
+				String[] str = strLine.split("\t");
+				if (str.length > 1) {
+					// str[0] is either "MERGE_" or "SPLIT_", not a word
+					for(int ii = 1; ii < str.length; ii++) {
+						int word = this.vocab.indexOf(str[ii]);
+						myAssert(word >= 0, "Constraint words not found in vocab: " + str[ii]);
+						cons.add(word);
+					}
+					this.vocab.add(str[1]);
+				} else {
+					System.out.println("Error! " + strLine);
+				}
+			}
+			in.close();
+			
+		} catch (IOException e) {
+			System.out.println("No vocab file Found!");
+		}
+
+	}
+	
+	/**
+	 * For testing~~
+	 */
+	public static void myAssert(boolean flag, String info) {
+		if(!flag) {
+			System.out.println(info);
+			System.exit(0);
+		}
+	}
+	
+	abstract void addInstances(InstanceList training);
+	abstract void resumeStates(InstanceList training, String statesFile) throws IOException;
+	abstract void clearTopicAssignments(String option, String consFile);
+	abstract void changeTopic(int doc, int index, int word, int new_topic, int new_path);
+	abstract double docLHood();
+	abstract void printDocumentTopics (File file) throws IOException;
+	abstract void sampleDoc(int doc);
+}
diff --git a/src/cc/mallet/topics/tree/TopicTreeWalk.java b/src/cc/mallet/topics/tree/TopicTreeWalk.java
new file mode 100755
index 000000000..ac2fd5fd5
--- /dev/null
+++ b/src/cc/mallet/topics/tree/TopicTreeWalk.java
@@ -0,0 +1,85 @@
+package cc.mallet.topics.tree;
+
+import java.io.Serializable;
+
+import gnu.trove.TIntArrayList;
+import gnu.trove.TIntHashSet;
+import gnu.trove.TIntIntHashMap;
+
+/**
+ * This class counts each node and each edge for a topic with tree structure. 
+ * 
+ * @author Yuening Hu
+ */
+
+public class TopicTreeWalk implements Serializable {
+	
+	// *** To be sorted
+	HIntIntIntHashMap counts;
+	TIntIntHashMap nodeCounts;
+	
+	public TopicTreeWalk() {
+		this.counts = new HIntIntIntHashMap();
+		this.nodeCounts = new TIntIntHashMap();
+	}
+
+	/**
+	 * Given a path (a list of nodes), increase the nodes and edges counts by 
+	 * the specified amount. When a node count is changed from zero or changed
+	 * to zero, return this node. (When this happens, the non-zero path of this
+	 * node might need to be changed, that's why we need this list.)
+	 */
+	public int[] changeCount(TIntArrayList path_nodes, int increment) {
+		for (int nn = 0; nn < path_nodes.size()-1; nn++) {
+			int parent = path_nodes.get(nn);
+			int child = path_nodes.get(nn+1);
+			this.counts.adjustOrPutValue(parent, child, increment, increment);
+		}
+		
+		// keep the nodes whose counts is changed from zero or changed to zero
+		TIntHashSet affected_nodes = new TIntHashSet();
+		
+		for (int nn = 0; nn < path_nodes.size(); nn++) {
+			int node = path_nodes.get(nn);
+			if (! this.nodeCounts.contains(node)) {
+				this.nodeCounts.put(node, 0);
+			}
+			
+			int old_count = this.nodeCounts.get(node);
+			this.nodeCounts.adjustValue(node, increment);
+			int new_count = this.nodeCounts.get(node);
+			
+			// keep the nodes whose counts is changed from zero or changed to zero
+			if (nn != 0 && (old_count == 0 || new_count == 0)) {
+				affected_nodes.add(node);
+			}
+		}
+		
+		if (affected_nodes.size() > 0) {
+			return affected_nodes.toArray();
+		} else {
+			return null;
+		}
+	}
+	
+	/**
+	 * Return an edge count.
+	 */
+	public int getCount(int key1, int key2) {
+		if (this.counts.contains(key1, key2)) {
+			return this.counts.get(key1, key2);
+		}
+		return 0;
+	}
+	
+	/**
+	 * Return a node count.
+	 */
+	public int getNodeCount(int key) {
+		if (this.nodeCounts.contains(key)) {
+			return this.nodeCounts.get(key);
+		}
+		return 0;
+	}
+	
+}
diff --git a/src/cc/mallet/topics/tree/TreeMarginalProbEstimator.java b/src/cc/mallet/topics/tree/TreeMarginalProbEstimator.java
new file mode 100644
index 000000000..f8ee3b059
--- /dev/null
+++ b/src/cc/mallet/topics/tree/TreeMarginalProbEstimator.java
@@ -0,0 +1,380 @@
+package cc.mallet.topics.tree;
+
+import gnu.trove.TIntIntHashMap;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.PrintStream;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashSet;
+
+import cc.mallet.types.FeatureSequence;
+import cc.mallet.types.Instance;
+import cc.mallet.types.InstanceList;
+import cc.mallet.util.Randoms;
+
+
+/**
+ * An implementation of left-to-right algorithm for tree-based topic model marginal probability estimators 
+ * presented in Wallach et al., "Evaluation Methods for Topic Models", ICML (2009)
+ * Followed the example in "cc.mallet.topics.MarginalProbEstimator" by David Mimno
+ * 
+ * @author Yuening Hu
+ */
+
+public class TreeMarginalProbEstimator implements Serializable {
+	int TOPIC_BITS = TreeTopicModelFastSortW.TOPIC_BITS;
+	
+	int numTopics;
+	double[] alpha;
+	double alphasum;
+	ArrayList<String> vocab;
+	HashSet<String> removed;
+	TreeTopicModel topics;
+	String modelType;
+	
+	Randoms random;
+	boolean sorted;
+	
+	public TreeMarginalProbEstimator(TreeTopicModel topics, ArrayList<String> vocab, HashSet<String> removed, double[] alpha) {
+		this.numTopics = topics.numTopics;
+		this.vocab = vocab;
+		this.removed = removed;
+		this.alpha = alpha;
+		this.topics = topics;
+		this.random = new Randoms();
+		
+		this.alphasum = 0.0;
+		for(int tt = 0; tt < numTopics; tt++) {
+			this.alphasum += this.alpha[tt];
+		}
+		
+		if (this.topics.nonZeroPathsBubbleSorted.size() > 0) {
+			this.sorted = true;
+		} else if (this.topics.nonZeroPaths.size() > 0) {
+			this.sorted = false;
+		}
+		//System.out.println(this.sorted);
+	}
+	
+	public void setRandomSeed(int seed) {
+		this.random = new Randoms(seed);
+	}
+	
+	public void setModelType(String modeltype) {
+		this.modelType = modeltype;
+	}
+	
+
+	public double evaluateLeftToRight (InstanceList testing, int numParticles, boolean usingResampling,
+			   PrintStream docProbabilityStream) {
+		
+		if(this.modelType.indexOf("fast-est") < 0) {
+			System.out.println("%%%%%%%%%%%%%%%%%%%");
+			System.out.println("Your current tree-model-type");
+			System.out.println("\t " + this.modelType); 
+			System.out.println("is not supported by inferencer. ");
+			System.out.println("Inferencer only supports the following tree-model-type: ");
+			System.out.println("\t fast-est \n\t fast-est-sortW \n\t fast-est-sortD \n\t fast-est-sortD-sortW");
+			System.out.println("%%%%%%%%%%%%%%%%%%%");
+			return -1;
+		}		
+		
+		double logNumParticles = Math.log(numParticles);
+		double totalLogLikelihood = 0;
+		for (Instance instance : testing) {
+			
+			FeatureSequence tokenSequence = (FeatureSequence) instance.getData();
+			
+			// read in type index in vocab (different from the alphabet)
+			// remove tokens not in vocab
+			ArrayList<Integer> tokens = new ArrayList<Integer> ();
+			for (int position = 0; position < tokenSequence.size(); position++) {
+				String word = (String) tokenSequence.getObjectAtPosition(position);
+				if(this.vocab.indexOf(word) >= 0 && !this.removed.contains(word)) {
+					int type = this.vocab.indexOf(word);
+					tokens.add(type);
+				}
+			}			
+			
+			double docLogLikelihood = 0;
+			
+			double[][] particleProbabilities = new double[ numParticles ][];
+			for (int particle = 0; particle < numParticles; particle++) {
+				particleProbabilities[particle] =
+						leftToRight(tokens, usingResampling);
+			}
+			
+			for (int position = 0; position < particleProbabilities[0].length; position++) {
+				double sum = 0;
+				for (int particle = 0; particle < numParticles; particle++) {
+					sum += particleProbabilities[particle][position];
+				}
+			
+				if (sum > 0.0) { 
+					docLogLikelihood += Math.log(sum) - logNumParticles;
+				}
+			}
+		
+			if (docProbabilityStream != null) {
+				docProbabilityStream.println(docLogLikelihood);
+			}
+			totalLogLikelihood += docLogLikelihood;
+		}
+		
+		return totalLogLikelihood;
+	}
+	
+	protected double[] leftToRight (ArrayList<Integer> tokens, boolean usingResampling) {
+		
+		int docLength = tokens.size();
+		double[] wordProbabilities = new double[docLength];
+		
+		int[] localtopics = new int[docLength];
+		int[] localpaths = new int[docLength];
+		TIntIntHashMap localTopicCounts = new TIntIntHashMap();
+		
+		int tokensSoFar = 0;
+		int type;
+		for (int limit = 0; limit < docLength; limit++) {
+			if (usingResampling) {
+				
+				// Iterate up to the current limit
+				for (int position = 0; position < limit; position++) {
+					type = tokens.get(position);
+					
+					// change topic counts
+					int old_topic = localtopics[position];
+					localtopics[position] = -1;
+					localpaths[position] = -1;
+					localTopicCounts.adjustValue(old_topic, -1);
+					
+					double smoothing_mass_est = this.topics.smoothingEst.get(type);
+
+					double topic_beta_mass = this.topics.computeTermTopicBeta(localTopicCounts, type);	
+					
+					ArrayList<double[]> topic_term_score = new ArrayList<double[]>();
+					double topic_term_mass = this.topics.computeTopicTerm(this.alpha, localTopicCounts, type, topic_term_score);			
+					
+					double norm_est = smoothing_mass_est + topic_beta_mass + topic_term_mass;
+					double sample = this.random.nextDouble();
+					//double sample = 0.5;
+					sample *= norm_est;
+
+					int new_topic = -1;
+					int new_path = -1;
+					
+					int[] paths = this.topics.getWordPathIndexSet(type);
+					
+					// sample the smoothing bin
+					if (sample < smoothing_mass_est) {
+						double smoothing_mass = this.topics.computeTermSmoothing(this.alpha, type);
+						double norm =  smoothing_mass + topic_beta_mass + topic_term_mass;
+						sample /= norm_est;
+						sample *= norm;
+						if (sample < smoothing_mass) {		
+							for (int tt = 0; tt < this.numTopics; tt++) {
+								for (int pp : paths) {
+									double val = alpha[tt] * this.topics.getPathPrior(type, pp);
+									val /= this.topics.getNormalizer(tt, pp);
+									sample -= val;
+									if (sample <= 0.0) {
+										new_topic = tt;
+										new_path = pp;
+										break;
+									}
+								}
+								if (new_topic >= 0) {
+									break;
+								}
+							}
+						} else {
+							sample -= smoothing_mass;
+						}
+					} else {
+						sample -= smoothing_mass_est;
+					}
+					
+					// sample topic beta bin
+					if (new_topic < 0 && sample < topic_beta_mass) {
+						for(int tt : localTopicCounts.keys()) {
+							for (int pp : paths) {
+								double val = localTopicCounts.get(tt) * this.topics.getPathPrior(type, pp);
+								val /= this.topics.getNormalizer(tt, pp);
+								sample -= val;
+								if (sample <= 0.0) {						
+									new_topic = tt;
+									new_path = pp;
+									break;
+								}
+							}
+							if (new_topic >= 0) {
+								break;
+							}
+						}
+					} else {
+						sample -= topic_beta_mass;
+					}
+					
+					// sample topic term bin
+					if (new_topic < 0) {
+						for(int jj = 0; jj < topic_term_score.size(); jj++) {
+							double[] tmp = topic_term_score.get(jj);
+							int tt = (int) tmp[0];
+							int pp = (int) tmp[1];
+							double val = tmp[2];
+							sample -= val;
+							if (sample <= 0.0) {
+								new_topic = tt;
+								new_path = pp;
+								break;
+							}
+						}
+					}		
+					
+					// change topic counts
+					localtopics[position] = new_topic;
+					localpaths[position] = new_path;
+					localTopicCounts.adjustOrPutValue(new_topic, 1, 1);
+				}
+			}
+			
+			// sample current token at the current limit
+			type = tokens.get(limit);
+			
+			//double smoothing_mass_est = this.topics.smoothingEst.get(type);
+			double smoothing_mass = this.topics.computeTermSmoothing(this.alpha, type);
+			
+			double topic_beta_mass = this.topics.computeTermTopicBeta(localTopicCounts, type);	
+			
+			ArrayList<double[]> topic_term_score = new ArrayList<double[]>();
+			double topic_term_mass = this.topics.computeTopicTerm(this.alpha, localTopicCounts, type, topic_term_score);			
+			
+			//double norm_est = smoothing_mass_est + topic_beta_mass + topic_term_mass;
+			double norm = smoothing_mass + topic_beta_mass + topic_term_mass;
+			double sample = this.random.nextDouble();
+			sample *= norm;
+			
+			wordProbabilities[limit] += (smoothing_mass + topic_beta_mass + topic_term_mass) /
+					(this.alphasum + tokensSoFar);
+			
+			tokensSoFar++;
+
+			int new_topic = -1;
+			int new_path = -1;
+			int[] paths = this.topics.getWordPathIndexSet(type);
+			
+			// sample the smoothing bin
+			if (sample < smoothing_mass) {		
+				for (int tt = 0; tt < this.numTopics; tt++) {
+					for (int pp : paths) {
+						double val = alpha[tt] * this.topics.getPathPrior(type, pp);
+						val /= this.topics.getNormalizer(tt, pp);
+						sample -= val;
+						if (sample <= 0.0) {
+							new_topic = tt;
+							new_path = pp;
+							break;
+						}
+					}
+					if (new_topic >= 0) {
+						break;
+					}
+				}
+			} else {
+				sample -= smoothing_mass;
+			}
+			
+			// sample topic beta bin
+			if (new_topic < 0 && sample < topic_beta_mass) {
+				for(int tt : localTopicCounts.keys()) {
+					for (int pp : paths) {
+						double val = localTopicCounts.get(tt) * this.topics.getPathPrior(type, pp);
+						val /= this.topics.getNormalizer(tt, pp);
+						sample -= val;
+						if (sample <= 0.0) {						
+							new_topic = tt;
+							new_path = pp;
+							break;
+						}
+					}
+					if (new_topic >= 0) {
+						break;
+					}
+				}
+			} else {
+				sample -= topic_beta_mass;
+			}
+			
+			// sample topic term bin
+			if (new_topic < 0) {
+				for(int jj = 0; jj < topic_term_score.size(); jj++) {
+					double[] tmp = topic_term_score.get(jj);
+					int tt = (int) tmp[0];
+					int pp = (int) tmp[1];
+					double val = tmp[2];
+					sample -= val;
+					if (sample <= 0.0) {
+						new_topic = tt;
+						new_path = pp;
+						break;
+					}
+				}
+			}
+			
+			// change topic counts
+			localtopics[limit] = new_topic;
+			localpaths[limit] = new_path;
+			localTopicCounts.adjustOrPutValue(new_topic, 1, 1);		
+		}
+		
+		return wordProbabilities;
+	}
+	
+	
+	// for serialize
+	private static final long serialVersionUID = 1L;
+    private static final int CURRENT_SERIAL_VERSION = 0;
+    private static final int NULL_INTEGER = -1;
+	
+    private void writeObject (ObjectOutputStream out) throws IOException {
+    	out.writeInt (CURRENT_SERIAL_VERSION);
+		out.writeInt(this.numTopics);
+		out.writeInt(this.TOPIC_BITS);
+		out.writeBoolean(this.sorted);
+		out.writeObject(this.modelType);
+		out.writeObject(this.alpha);
+		out.writeDouble(this.alphasum);
+		out.writeObject(this.vocab);
+		out.writeObject(this.removed);
+		out.writeObject(this.topics);
+	}
+	
+	private void readObject (ObjectInputStream in) throws IOException, ClassNotFoundException {
+        int version = in.readInt();
+        this.numTopics = in.readInt();
+        this.TOPIC_BITS = in.readInt();
+        this.sorted = in.readBoolean();
+        this.modelType = (String) in.readObject();
+        this.alpha = (double[]) in.readObject();
+        this.alphasum = in.readDouble();
+        this.vocab = (ArrayList<String>) in.readObject();
+        this.removed = (HashSet<String>) in.readObject();
+        this.topics = (TreeTopicModel) in.readObject();
+	}
+
+	public static TreeMarginalProbEstimator read (File f) throws Exception {
+
+		TreeMarginalProbEstimator estimator = null;
+
+		ObjectInputStream ois = new ObjectInputStream (new FileInputStream(f));
+		estimator = (TreeMarginalProbEstimator) ois.readObject();
+		ois.close();
+        return estimator;
+    }
+	
+}
diff --git a/src/cc/mallet/topics/tree/TreeTopicInferencer.java b/src/cc/mallet/topics/tree/TreeTopicInferencer.java
new file mode 100755
index 000000000..5b6cde552
--- /dev/null
+++ b/src/cc/mallet/topics/tree/TreeTopicInferencer.java
@@ -0,0 +1,384 @@
+package cc.mallet.topics.tree;
+
+import gnu.trove.TIntArrayList;
+import gnu.trove.TIntIntHashMap;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.PrintWriter;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+
+import cc.mallet.topics.TopicInferencer;
+import cc.mallet.types.Alphabet;
+import cc.mallet.types.FeatureSequence;
+import cc.mallet.types.IDSorter;
+import cc.mallet.types.Instance;
+import cc.mallet.types.InstanceList;
+import cc.mallet.util.Randoms;
+
+
+/**
+ * An implementation of inferencer for tree-based topic model
+ * Followed the example in "cc.mallet.topics.TopicInferencer"
+ * 
+ * @author Yuening Hu
+ */
+
+public class TreeTopicInferencer implements Serializable {
+	
+	int TOPIC_BITS = TreeTopicModelFastSortW.TOPIC_BITS;
+	
+	int numTopics;
+	double[] alpha;
+	ArrayList<String> vocab;
+	HashSet<String> removed;
+	TreeTopicModel topics;
+	String modelType;
+	
+	Randoms random;
+	boolean sorted;
+	
+	public TreeTopicInferencer(TreeTopicModel topics, ArrayList<String> vocab, HashSet<String> removed, double[] alpha) {
+		this.numTopics = topics.numTopics;
+		this.vocab = vocab;
+		this.removed = removed;
+		this.alpha = alpha;
+		this.topics = topics;
+		this.random = new Randoms();
+		
+		if (this.topics.nonZeroPathsBubbleSorted.size() > 0) {
+			this.sorted = true;
+		} else if (this.topics.nonZeroPaths.size() > 0) {
+			this.sorted = false;
+		}
+		//System.out.println(this.sorted);
+	}
+	
+	public void setRandomSeed(int seed) {
+		this.random = new Randoms(seed);
+	}
+	
+	public void setModelType(String modeltype) {
+		this.modelType = modeltype;
+	}
+
+	public String toString() {
+		String tmp = "";
+		tmp += "numTopics: " + numTopics + "\n";
+		tmp += "sorted: " + this.sorted + "\n";
+		tmp += "removed: " + this.removed.size() + "\n";
+		tmp += "nonzero: " + this.topics.nonZeroPaths.size() + "\n";
+		tmp += "nonzerobubblesorted: " + this.topics.nonZeroPathsBubbleSorted.size() + "\n";
+		return tmp;
+	}
+	
+	/** 
+	 *  Use Gibbs sampling to infer a topic distribution.
+	 *  Topics are initialized to the (or a) most probable topic
+	 *  for each token.
+	 */
+	public double[] getSampledDistribution(Instance instance, int numIterations, int interval) {
+
+		FeatureSequence alltokens = (FeatureSequence) instance.getData();
+		ArrayList<Integer> tokens = new ArrayList<Integer> ();
+		for (int position = 0; position < alltokens.size(); position++) {
+			String word = (String) alltokens.getObjectAtPosition(position);
+			if(this.vocab.indexOf(word) >= 0 && !this.removed.contains(word)) {
+				int type = this.vocab.indexOf(word);
+				tokens.add(type);
+			}
+		}
+		
+		int docLength = tokens.size();
+		int[] localtopics = new int[docLength];
+		int[] localpaths = new int[docLength];
+		TIntIntHashMap localTopicCounts = new TIntIntHashMap();
+		
+		// Initialize all positions to the most common topic for that type.
+		for (int position = 0; position < docLength; position++) {
+			int type = tokens.get(position);
+			
+			int tt = -1;
+			int pp = -1;
+			
+			if (this.sorted) {
+				ArrayList<int[]> pairs = this.topics.nonZeroPathsBubbleSorted.get(type);
+				int[] pair = pairs.get(0);
+				int key = pair[0];
+				tt = key >> TOPIC_BITS;
+				pp = key - (tt << TOPIC_BITS);
+			} else {
+				HIntIntIntHashMap pairs1 = this.topics.nonZeroPaths.get(type);
+				int maxcount  = 0;
+				for(int topic : pairs1.getKey1Set()) {
+					int[] paths = pairs1.get(topic).keys();
+					for (int jj = 0; jj < paths.length; jj++) {
+						int path = paths[jj];
+						int count = pairs1.get(topic,  path);
+						if (count > maxcount) {
+							maxcount = count;
+							tt = topic;
+							pp = path;
+						}
+					}
+				}
+			}
+			
+			localtopics[position] = tt;
+			localpaths[position] = pp;
+			localTopicCounts.adjustOrPutValue(tt, 1, 1);
+		}
+		
+//		String tmpout = "";
+//		for(int tt : localTopicCounts.keys()) {
+//			tmpout += tt + " " + localTopicCounts.get(tt) + "; ";
+//		}
+//		System.out.println(tmpout);
+		
+		double[] result = new double[numTopics];
+		double sum = 0.0;
+		
+		for (int iteration = 1; iteration <= numIterations; iteration++) {                                                       
+			for (int position = 0; position < docLength; position++) {
+				int type = tokens.get(position);
+				
+				// change topic counts
+				int old_topic = localtopics[position];
+				localtopics[position] = -1;
+				localpaths[position] = -1;
+				localTopicCounts.adjustValue(old_topic, -1);
+				
+				double smoothing_mass_est = this.topics.smoothingEst.get(type);
+
+				double topic_beta_mass = this.topics.computeTermTopicBeta(localTopicCounts, type);	
+				
+				ArrayList<double[]> topic_term_score = new ArrayList<double[]>();
+				double topic_term_mass = this.topics.computeTopicTerm(this.alpha, localTopicCounts, type, topic_term_score);			
+				
+				double norm_est = smoothing_mass_est + topic_beta_mass + topic_term_mass;
+				double sample = this.random.nextDouble();
+				//double sample = 0.5;
+				sample *= norm_est;
+
+				int new_topic = -1;
+				int new_path = -1;
+				
+				int[] paths = this.topics.getWordPathIndexSet(type);
+				
+				// sample the smoothing bin
+				if (sample < smoothing_mass_est) {
+					double smoothing_mass = this.topics.computeTermSmoothing(this.alpha, type);
+					double norm =  smoothing_mass + topic_beta_mass + topic_term_mass;
+					sample /= norm_est;
+					sample *= norm;
+					if (sample < smoothing_mass) {		
+						for (int tt = 0; tt < this.numTopics; tt++) {
+							for (int pp : paths) {
+								double val = alpha[tt] * this.topics.getPathPrior(type, pp);
+								val /= this.topics.getNormalizer(tt, pp);
+								sample -= val;
+								if (sample <= 0.0) {
+									new_topic = tt;
+									new_path = pp;
+									break;
+								}
+							}
+							if (new_topic >= 0) {
+								break;
+							}
+						}
+					} else {
+						sample -= smoothing_mass;
+					}
+				} else {
+					sample -= smoothing_mass_est;
+				}
+				
+				// sample topic beta bin
+				if (new_topic < 0 && sample < topic_beta_mass) {
+					for(int tt : localTopicCounts.keys()) {
+						for (int pp : paths) {
+							double val = localTopicCounts.get(tt) * this.topics.getPathPrior(type, pp);
+							val /= this.topics.getNormalizer(tt, pp);
+							sample -= val;
+							if (sample <= 0.0) {						
+								new_topic = tt;
+								new_path = pp;
+								break;
+							}
+						}
+						if (new_topic >= 0) {
+							break;
+						}
+					}
+				} else {
+					sample -= topic_beta_mass;
+				}
+				
+				// sample topic term bin
+				if (new_topic < 0) {
+					for(int jj = 0; jj < topic_term_score.size(); jj++) {
+						double[] tmp = topic_term_score.get(jj);
+						int tt = (int) tmp[0];
+						int pp = (int) tmp[1];
+						double val = tmp[2];
+						sample -= val;
+						if (sample <= 0.0) {
+							new_topic = tt;
+							new_path = pp;
+							break;
+						}
+					}
+				}		
+				
+				// change topic counts
+				localtopics[position] = new_topic;
+				localpaths[position] = new_path;
+				localTopicCounts.adjustOrPutValue(new_topic, 1, 1);
+				
+//				if (iteration % interval == 0) {
+//					// Save a sample
+//					for (int topic=0; topic < numTopics; topic++) {
+//						if (localTopicCounts.containsKey(topic)) {
+//							result[topic] = alpha[topic] + localTopicCounts.get(topic);
+//						} else {
+//							result[topic] = alpha[topic];
+//						}
+//						sum += result[topic];
+//					}
+//				}
+			}
+		}
+		
+
+		// save at least once
+		if (sum == 0.0) {
+			for (int topic=0; topic < numTopics; topic++) {
+				if (localTopicCounts.containsKey(topic)) {
+					result[topic] = alpha[topic] + localTopicCounts.get(topic);
+				} else {
+					result[topic] = alpha[topic];
+				}
+				sum += result[topic];
+			}
+		}
+
+		// Normalize
+		for (int topic=0; topic < numTopics; topic++) {
+            result[topic] /= sum;
+		}
+		
+		return result;
+	}
+	
+	/**
+	 *  Infer topics for the provided instances and
+	 *   write distributions to the provided file.
+	 *
+	 *  @param instances
+	 *  @param distributionsFile
+	 *  @param numIterations The total number of iterations of sampling per document
+	 *  @param interval      The number of iterations between saved samples
+	 */
+	public void writeInferredDistributions(InstanceList instances, 
+										   File distributionsFile,
+										   int numIterations, int interval) throws IOException {
+		
+		if(this.modelType.indexOf("fast-est") < 0) {
+			System.out.println("%%%%%%%%%%%%%%%%%%%");
+			System.out.println("Your current tree-model-type");
+			System.out.println("\t " + this.modelType); 
+			System.out.println("is not supported by inferencer. ");
+			System.out.println("Inferencer only supports the following tree-model-type: ");
+			System.out.println("\t fast-est \n\t fast-est-sortW \n\t fast-est-sortD \n\t fast-est-sortD-sortW");
+			System.out.println("%%%%%%%%%%%%%%%%%%%");
+			return;
+		}
+		
+		PrintWriter out = new PrintWriter(distributionsFile);
+		
+		out.print ("#doc source topic proportion ...\n");
+
+        IDSorter[] sortedTopics = new IDSorter[ numTopics ];
+		for (int topic = 0; topic < numTopics; topic++) {
+            // Initialize the sorters with dummy values
+			sortedTopics[topic] = new IDSorter(topic, topic);
+        }
+
+		int doc = 0;
+
+		for (Instance instance: instances) {
+			
+			double[] topicDistribution =
+				getSampledDistribution(instance, numIterations, interval);
+			out.print (doc); out.print (' ');
+
+			// Print the Source field of the instance
+            if (instance.getSource() != null) {
+				out.print (instance.getSource());
+            } else {
+                out.print ("null-source");
+            }
+            out.print (' ');
+
+			for (int topic = 0; topic < numTopics; topic++) {
+                sortedTopics[topic].set(topic, topicDistribution[topic]);
+            }
+			Arrays.sort(sortedTopics);
+			
+			for (int i = 0; i < numTopics; i++) {
+                out.print (sortedTopics[i].getID() + " " +
+						   sortedTopics[i].getWeight() + " ");
+            }
+            out.print (" \n");
+			doc++;
+		}
+		out.close();
+	}	
+
+	
+	// for serialize
+	private static final long serialVersionUID = 1L;
+    private static final int CURRENT_SERIAL_VERSION = 0;
+    private static final int NULL_INTEGER = -1;
+	
+    private void writeObject (ObjectOutputStream out) throws IOException {
+    	out.writeInt (CURRENT_SERIAL_VERSION);
+		out.writeInt(this.numTopics);
+		out.writeInt(this.TOPIC_BITS);
+		out.writeBoolean(this.sorted);
+		out.writeObject(this.modelType);
+		out.writeObject(this.alpha);
+		out.writeObject(this.vocab);
+		out.writeObject(this.removed);
+		out.writeObject(this.topics);
+	}
+	
+	private void readObject (ObjectInputStream in) throws IOException, ClassNotFoundException {
+        int version = in.readInt();
+        this.numTopics = in.readInt();
+        this.TOPIC_BITS = in.readInt();
+        this.sorted = in.readBoolean();
+        this.modelType = (String) in.readObject();
+        this.alpha = (double[]) in.readObject();
+        this.vocab = (ArrayList<String>) in.readObject();
+        this.removed = (HashSet<String>) in.readObject();
+        this.topics = (TreeTopicModel) in.readObject();
+	}
+
+	public static TreeTopicInferencer read (File f) throws Exception {
+
+		TreeTopicInferencer inferencer = null;
+
+		ObjectInputStream ois = new ObjectInputStream (new FileInputStream(f));
+        inferencer = (TreeTopicInferencer) ois.readObject();
+		ois.close();
+        return inferencer;
+    }
+}
diff --git a/src/cc/mallet/topics/tree/TreeTopicModel.java b/src/cc/mallet/topics/tree/TreeTopicModel.java
new file mode 100755
index 000000000..cae9ef3a2
--- /dev/null
+++ b/src/cc/mallet/topics/tree/TreeTopicModel.java
@@ -0,0 +1,382 @@
+package cc.mallet.topics.tree;
+
+import gnu.trove.TDoubleArrayList;
+import gnu.trove.TIntArrayList;
+import gnu.trove.TIntDoubleHashMap;
+import gnu.trove.TIntDoubleIterator;
+import gnu.trove.TIntHashSet;
+import gnu.trove.TIntIntHashMap;
+import gnu.trove.TIntObjectHashMap;
+import gnu.trove.TIntObjectIterator;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Random;
+import java.util.TreeMap;
+
+import cc.mallet.types.Dirichlet;
+
+/**
+ * This class defines the tree topic model. 
+ * It implements most of the functions and leave four abstract methods,
+ * which might be various for different models.
+ * 
+ * @author Yuening Hu
+ */
+
+public abstract class TreeTopicModel implements Serializable {
+	
+	int numTopics;
+	Random random;
+	int maxDepth;
+	int root;
+	HIntIntObjectHashMap<TIntArrayList> wordPaths;
+	TIntArrayList pathToWord;
+	TIntArrayList pathToWordPath;
+	TIntObjectHashMap<TIntArrayList> nodeToPath;
+
+	TIntDoubleHashMap betaSum;
+	HIntIntDoubleHashMap beta; // 2 levels hash map
+	TIntDoubleHashMap priorSum;
+	HIntIntDoubleHashMap priorPath;
+	
+	TIntObjectHashMap<HIntIntIntHashMap> nonZeroPaths;
+	TIntObjectHashMap<ArrayList<int[]>> nonZeroPathsBubbleSorted;
+	TIntObjectHashMap<TopicTreeWalk> traversals;
+	
+	HIntIntDoubleHashMap normalizer;
+	TIntDoubleHashMap rootNormalizer;
+	TIntDoubleHashMap smoothingEst;
+	
+	/*********************************************/
+	double smoothingNocons;  // for unconstrained words
+	double topicbetaNocons;  // for unconstrained words
+	double betaNocons; // for unconstrained words
+	/*********************************************/
+	
+	public TreeTopicModel(int numTopics, Random random) {
+		this.numTopics = numTopics;
+		this.random = random;
+		
+		this.betaSum = new TIntDoubleHashMap ();
+		this.beta = new HIntIntDoubleHashMap ();
+		this.priorSum = new TIntDoubleHashMap ();
+		this.priorPath = new HIntIntDoubleHashMap ();
+		
+		this.wordPaths = new HIntIntObjectHashMap<TIntArrayList> ();
+		this.pathToWord = new TIntArrayList ();
+		this.pathToWordPath = new TIntArrayList();
+		this.nodeToPath = new TIntObjectHashMap<TIntArrayList> ();
+		
+		this.nonZeroPaths = new TIntObjectHashMap<HIntIntIntHashMap> ();
+		this.nonZeroPathsBubbleSorted = new TIntObjectHashMap<ArrayList<int[]>> ();
+		this.traversals = new TIntObjectHashMap<TopicTreeWalk> ();
+		
+		this.smoothingNocons = 0.0;
+		this.topicbetaNocons = 0.0;
+	}
+	
+	/**
+	 * Initialize the parameters, including:
+	 * (1) loading the tree
+	 * (2) initialize betaSum and beta
+	 * (3) initialize priorSum, priorPath
+	 * (4) initialize wordPaths, pathToWord, NodetoPath
+	 * (5) initialize traversals
+	 * (6) initialize nonZeroPaths
+	 */
+	protected void initializeParams(String treeFiles, String hyperFile, ArrayList<String> vocab) {
+		
+		PriorTree tree = new PriorTree();
+		tree.initialize(treeFiles, hyperFile, vocab);
+		
+		// get tree depth
+		this.maxDepth = tree.getMaxDepth();
+		// get root index
+		this.root = tree.getRoot();
+		// get tree nodes
+		TIntObjectHashMap<Node> nodes = tree.getNodes();
+		// get tree paths
+		TIntObjectHashMap<ArrayList<Path>> word_paths = tree.getWordPaths();
+		
+		// if one node contains multiple words, we need to change each word to a leaf node
+		// (assigning a leaf index for each word).
+		int leaf_index = nodes.size();
+		HIntIntIntHashMap tmp_wordleaf = new HIntIntIntHashMap();
+		
+		// initialize betaSum and beta
+		for (TIntObjectIterator<Node> it = nodes.iterator(); it.hasNext(); ) {
+			it.advance();
+			int index = it.key();
+			Node node = it.value();
+			TDoubleArrayList transition_prior = node.getTransitionPrior();
+			
+			// when node has children
+			if (node.getNumChildren() > 0) {
+				//assert node.getNumWords() == 0;
+				this.betaSum.put(index, node.getTransitionScalor());
+				for (int ii = 0; ii < node.getNumChildren(); ii++) {
+					int child = node.getChild(ii);
+					this.beta.put(index, child, transition_prior.get(ii));
+				}
+			}
+			
+			// when node contains multiple words.
+			// we change a node containing multiple words to a node containing multiple
+			// leaf node and each leaf node containing one word
+			if (node.getNumWords() > 1) {
+				//assert node.getNumChildren() == 0;
+				this.betaSum.put(index, node.getTransitionScalor());
+				for (int ii = 0; ii < node.getNumWords(); ii++) {
+					int word = node.getWord(ii);
+					leaf_index++;
+					this.beta.put(index, leaf_index, transition_prior.get(ii));
+					
+					// one word might have multiple paths, 
+					// so we keep the (word_index, word_parent)
+					// as the index for this leaf index, which is needed later
+					tmp_wordleaf.put(word, index, leaf_index);
+				}
+			}
+		}
+		
+		/*********************************************/
+		// find beta for unconstrained words
+		Node rootnode = nodes.get(this.root);
+		for (int ii = 0; ii < rootnode.getNumChildren(); ii++) {
+			int child = rootnode.getChild(ii);
+			Node childnode = nodes.get(child);
+			double tmpbeta = this.beta.get(this.root, child);
+			//System.out.println("beta for root to " + child + ": " + tmpbeta);
+			if (childnode.getHypoCount() == 1.0) {
+				this.betaNocons = this.beta.get(this.root, child);
+				System.out.println("beta for unconstrained words from root to " + child + ": " + tmpbeta);
+				break;
+			}
+		}
+		/*********************************************/
+		
+		// initialize priorSum, priorPath
+		// initialize wordPaths, pathToWord, NodetoPath
+		int path_index = -1;
+		TIntObjectHashMap<TIntHashSet> tmp_nodeToPath = new TIntObjectHashMap<TIntHashSet>();
+		for (TIntObjectIterator<ArrayList<Path>> it = word_paths.iterator(); it.hasNext(); ) {
+			it.advance();
+			
+			int word = it.key();
+			ArrayList<Path> paths = it.value();
+			this.priorSum.put(word, 0.0);
+			
+			int word_path_index = -1;
+			for (int ii = 0; ii < paths.size(); ii++) {
+				path_index++;
+				word_path_index++;
+				this.pathToWord.add(word);
+				this.pathToWordPath.add(word_path_index);
+				
+				double prob = 1.0;
+				Path p = paths.get(ii);
+				TIntArrayList path_nodes = p.getNodes();
+				
+				// for a node that contains multiple words
+				// if yes, retrieve the leaf index for each word
+				// and that to nodes of path
+				int parent = path_nodes.get(path_nodes.size()-1);
+				if (tmp_wordleaf.contains(word, parent)) {
+					leaf_index = tmp_wordleaf.get(word, parent);
+					path_nodes.add(leaf_index);
+				}
+				
+				for (int nn = 0; nn < path_nodes.size() - 1; nn++) {
+					parent = path_nodes.get(nn);
+					int child = path_nodes.get(nn+1);
+					prob *= this.beta.get(parent, child);
+				}
+				
+				for (int nn = 0; nn < path_nodes.size(); nn++) {
+					int node = path_nodes.get(nn);
+					if (! tmp_nodeToPath.contains(node)) {
+						tmp_nodeToPath.put(node, new TIntHashSet());
+					}
+					tmp_nodeToPath.get(node).add(path_index);
+					//tmp_nodeToPath.get(node).add(word_path_index);
+				}
+				
+				this.priorPath.put(word, path_index, prob);
+				this.priorSum.adjustValue(word, prob);
+				this.wordPaths.put(word, path_index, path_nodes);
+			}
+		}
+		
+		// change tmp_nodeToPath to this.nodeToPath
+		// this is because arraylist is much more efficient than hashset, when we
+		// need to go over the whole set multiple times
+		for(TIntObjectIterator it = tmp_nodeToPath.iterator(); it.hasNext(); ) {
+			it.advance();
+			int node = it.key();
+			TIntHashSet paths = (TIntHashSet)it.value();
+			TIntArrayList tmp = new TIntArrayList(paths.toArray());
+			
+//			System.out.println("Node" + node);
+//			for(int ii = 0; ii < tmp.size(); ii++) {
+//				System.out.print(tmp.get(ii) + " ");
+//			}
+//			System.out.println("");
+			
+			this.nodeToPath.put(node, tmp);
+		}
+		
+		// initialize traversals
+		for (int tt = 0; tt < this.numTopics; tt++) {
+			TopicTreeWalk tw = new TopicTreeWalk();
+			this.traversals.put(tt, tw);
+		}
+		
+		// initialize nonZeroPaths
+		int[] words = this.wordPaths.getKey1Set();
+		for (int ww = 0; ww < words.length; ww++) {
+			int word = words[ww]; 
+			this.nonZeroPaths.put(word, new HIntIntIntHashMap());
+		}
+	}
+	
+	/**
+	 * This function samples a path based on the prior
+	 * and change the node and edge count for a topic.
+	 */
+	protected int initialize (int word, int topic) {
+		double sample = this.random.nextDouble();
+		int path_index = this.samplePathFromPrior(word, sample);
+		this.changeCountOnly(topic, word, path_index, 1);
+		return path_index;
+	}
+	
+	/**
+	 * This function changes the node and edge count for a topic.
+	 */
+	protected void changeCountOnly(int topic, int word, int path, int delta) {
+		TIntArrayList path_nodes = this.wordPaths.get(word, path);
+		TopicTreeWalk tw = this.traversals.get(topic);
+		tw.changeCount(path_nodes, delta);
+	}
+	
+	/**
+	 * This function samples a path from the prior.
+	 */
+	protected int samplePathFromPrior(int term, double sample) {
+		int sampled_path = -1;
+		sample *= this.priorSum.get(term);
+		TIntDoubleHashMap paths = this.priorPath.get(term);
+		for(TIntDoubleIterator it = paths.iterator(); it.hasNext(); ) {
+			it.advance();
+			sample -= it.value();
+			if (sample <= 0.0) {
+				sampled_path = it.key();
+				break;
+			}
+		}
+
+		return sampled_path;
+	}
+	
+	/**
+	 * This function computes a path probability in a topic.
+	 */
+	public double computeTopicPathProb(int topic, int word, int path_index) {
+		TIntArrayList path_nodes = this.wordPaths.get(word, path_index);
+		TopicTreeWalk tw = this.traversals.get(topic);
+		double val = 1.0;
+		for(int ii = 0; ii < path_nodes.size()-1; ii++) {
+			int parent = path_nodes.get(ii);
+			int child = path_nodes.get(ii+1);
+			val *= this.beta.get(parent, child) + tw.getCount(parent, child);
+			val /= this.betaSum.get(parent) + tw.getNodeCount(parent);
+		}
+		return val;
+	}
+	
+	/**
+	 * This function computes the topic likelihood (by node).
+	 */
+	public double topicLHood() {
+		double val = 0.0;
+		for (int tt = 0; tt < this.numTopics; tt++) {
+			for (int nn : this.betaSum.keys()) {
+				double beta_sum = this.betaSum.get(nn);
+				//val += Dirichlet.logGamma(beta_sum) * this.beta.get(nn).size();
+				val += Dirichlet.logGamma(beta_sum);
+				
+				double tmp = 0.0;
+				for (int cc : this.beta.get(nn).keys()) {
+					tmp += Dirichlet.logGamma(this.beta.get(nn, cc));
+				}
+				//val -= tmp * this.beta.get(nn).size();
+				val -= tmp;
+				
+				for (int cc : this.beta.get(nn).keys()) {
+					int count = this.traversals.get(tt).getCount(nn, cc);
+					val += Dirichlet.logGamma(this.beta.get(nn, cc) + count);
+				}
+				
+				int count = this.traversals.get(tt).getNodeCount(nn);
+				val -= Dirichlet.logGamma(beta_sum + count);
+			}
+			//System.out.println("likelihood " + val);
+		}
+		return val;
+	}
+	
+	public TIntObjectHashMap<TIntArrayList> getPaths(int word) {
+		return this.wordPaths.get(word);
+	}
+	
+	public int[] getWordPathIndexSet(int word) {
+		return this.wordPaths.get(word).keys();
+	}
+	
+	public int getPathNum() {
+		return this.pathToWord.size();
+	}
+	
+	public int getWordFromPath(int pp) {
+		return this.pathToWord.get(pp);
+	}
+	
+	public double getPathPrior(int word, int path) {
+		return this.priorPath.get(word, path);
+	}
+	
+	// for TreeTopicSamplerFast 
+	public double computeTermSmoothing(double[] alpha, int word) {
+		return 0;
+	}
+	
+	public double computeTermTopicBeta(TIntIntHashMap topic_counts, int word) {
+		return 0;
+	}
+	
+	public double computeTopicTermTest(double[] alpha, TIntIntHashMap local_topic_counts, int word, ArrayList<double[]> dict){
+		return 0;
+	}
+	
+	public double computeTermTopicBetaSortD(ArrayList<int[]> topicCounts, int word) {
+		return 0;
+	}
+	
+	public double computeTopicTermSortD(double[] alpha, ArrayList<int[]> local_topic_counts, int word, ArrayList<double[]> dict){
+		return 0;
+	}
+	
+	/*********************************************/
+	public void computeSmoothingNocons(double[] alpha) {}
+	public void computeDocTopicBetaNocons(TIntIntHashMap topic_counts) {}
+	public void updateStatisticsNocons(double alpha, int topic, int topicCount, int delta){}
+	/*********************************************/
+	
+	// shared methods
+	abstract double getNormalizer(int topic, int path);
+	abstract void updateParams();
+	abstract void changeCount(int topic, int word, int path_index, int delta);
+	abstract double computeTopicTerm(double[] alpha, TIntIntHashMap local_topic_counts, int word, ArrayList<double[]> dict);
+
+}
diff --git a/src/cc/mallet/topics/tree/TreeTopicModelFast.java b/src/cc/mallet/topics/tree/TreeTopicModelFast.java
new file mode 100755
index 000000000..26a6fbf9f
--- /dev/null
+++ b/src/cc/mallet/topics/tree/TreeTopicModelFast.java
@@ -0,0 +1,388 @@
+package cc.mallet.topics.tree;
+
+import gnu.trove.TIntArrayList;
+import gnu.trove.TIntDoubleHashMap;
+import gnu.trove.TIntHashSet;
+import gnu.trove.TIntIntHashMap;
+import gnu.trove.TIntIterator;
+import gnu.trove.TIntObjectIterator;
+
+import java.util.ArrayList;
+import java.util.Random;
+
+/**
+ * This class extends the tree topic model
+ * It implemented the four abstract methods in a faster way:
+ * (1) normalizer is stored and updated accordingly
+ * (2) normalizer is split to two parts: root normalizer and normalizer to save computation
+ * (3) non-zero-paths are stored so when we compute the topic term score, we only compute 
+ *     the non-zero paths
+ *     
+ * @author Yuening Hu
+ */
+
+public class TreeTopicModelFast extends TreeTopicModel {
+	
+	int INTBITS = 31;
+	// use at most 10 bits to denote the mask
+	int MASKMAXBITS = 10;
+
+	/**
+	 * The normalizer is split to two parts: root normalizer and normalizer
+	 * root normalizer is stored per topic, and normalizer is stored per path per topic
+	 * both normalizers are updated when the count is changing.
+	 */ 
+	public TreeTopicModelFast(int numTopics, Random random) {
+		super(numTopics, random);
+		this.normalizer = new HIntIntDoubleHashMap ();
+		//this.normalizer = new HIntIntObjectHashMap<Double> ();
+		this.rootNormalizer = new TIntDoubleHashMap ();
+	}
+	
+	/**
+	 * This function updates the real count with the path masked count.
+	 * The format is: using the first Tree_depth number of bits of an integer
+	 * to denote whether a node in path has count larger than zero, 
+	 * and plus the real count. 
+	 * If a node path is shorter than Tree_depth, use "1" to fill the remained part.
+	 */
+	protected void updatePathMaskedCount(int path, int topic) {
+		TopicTreeWalk tw = this.traversals.get(topic);
+		int ww = this.getWordFromPath(path);
+		TIntArrayList path_nodes = this.wordPaths.get(ww, path);
+		int leaf_node = path_nodes.get(path_nodes.size() - 1);
+		int original_count = tw.getNodeCount(leaf_node);
+		
+		int shift_count = this.INTBITS;
+		int count = this.maxDepth - 1;
+		if (count > this.MASKMAXBITS) count = this.MASKMAXBITS;
+		int val = 0;
+		boolean flag = false;
+		
+		// note root is not included here
+		// if count of a node in the path is larger than 0, denote as "1"
+		// else use "0"
+		// if path_nodes.size() > MASKMAXBITS, denote the first MASKMAXBITS-1 edges as usual
+		// then use the last bit to denote the sum of the remaining edges
+		int remain_sum = 0;
+		for(int nn = 1; nn < path_nodes.size(); nn++) {
+			int node = path_nodes.get(nn);
+			if (nn < (this.MASKMAXBITS - 1)) {
+				count--;
+				shift_count--;
+				if (tw.getNodeCount(node) > 0) {
+					flag = true;
+					val += 1 << shift_count;
+				}
+			} else {
+				if (tw.getNodeCount(node) > 0)
+					remain_sum += 1;
+			}
+		}
+		
+		// use the last bit to denote the sum of the remaining edges
+		if (remain_sum > 0) {
+			count--;
+			shift_count--;
+			flag = true;
+			val += 1 << shift_count;
+		}
+		
+		// if a path is shorter than tree depth, fill in "1"
+		// should we fit in "0" ???
+		while (flag && count > 0) {
+			shift_count--;
+			val += 1 << shift_count;
+			count--;
+		}
+		
+		int maskedpath = val;
+		// plus the original count
+		val += original_count;
+		if (val > 0) {
+			this.nonZeroPaths.get(ww).put(topic, path, val);
+		} else if (val == 0) {
+			if (this.nonZeroPaths.get(ww).get(topic) != null) {
+				this.nonZeroPaths.get(ww).removeKey2(topic, path);
+				if (this.nonZeroPaths.get(ww).get(topic).size() == 0) {
+					this.nonZeroPaths.get(ww).removeKey1(topic);
+				}				
+			}
+		}
+
+//		int shift = this.INTBITS - this.maxDepth - 1;
+//		int testmaskedpath = val >> shift;
+//		maskedpath = maskedpath >> shift;
+//		int testcount = val - (testmaskedpath << shift);
+//		System.out.println(maskedpath + " " + testmaskedpath + " " + original_count + " " + testcount);
+		
+		//System.out.println(original_count + " " + this.nonZeroPaths.get(ww).get(topic, path));
+	}
+	
+	/**
+	 * Compute the root normalizer and the normalizer per topic per path
+	 */
+	protected void computeNormalizer(int topic) {
+		TopicTreeWalk tw = this.traversals.get(topic);
+		double val = this.betaSum.get(root) + tw.getNodeCount(root);
+		this.rootNormalizer.put(topic, val);
+		//System.out.println("Topic " + topic + " root normalizer " + this.rootNormalizer.get(topic));
+		
+		for(int pp = 0; pp < this.getPathNum(); pp++) {
+			int ww = this.getWordFromPath(pp);
+			val = this.computeNormalizerPath(topic, ww, pp);
+			this.normalizer.put(topic, pp, val);
+			//System.out.println("Topic " + topic + " Path " + pp  + " normalizer " + this.normalizer.get(topic, pp));
+		}
+	}
+	
+	/**
+	 * Compute the the normalizer given a path and a topic.
+	 */
+	private double computeNormalizerPath(int topic, int word, int path) {
+		TopicTreeWalk tw = this.traversals.get(topic);
+		TIntArrayList path_nodes = this.wordPaths.get(word, path);
+		
+		double norm = 1.0;
+		// do not consider the root
+		for (int nn = 1; nn < path_nodes.size() - 1; nn++) {
+			int node = path_nodes.get(nn);
+			norm *= this.betaSum.get(node) + tw.getNodeCount(node);
+		}
+		return norm;
+	}
+	
+	/**
+	 * Compute the root normalizer and the normalizer per topic per path.
+	 */
+	protected int[] findAffectedPaths(int[] nodes) {
+		TIntHashSet affected = new TIntHashSet();
+		for(int ii = 0; ii < nodes.length; ii++) {
+			int node = nodes[ii];
+			TIntArrayList paths = this.nodeToPath.get(node);
+			for (int jj = 0; jj < paths.size(); jj++) {
+				int pp = paths.get(jj);
+				affected.add(pp);
+			}
+		}
+		return affected.toArray();
+	}
+	
+	/**
+	 * Updates a list of paths with the given amount.
+	 */
+	protected void updateNormalizer(int topic, TIntArrayList paths, double delta) {
+		for (int ii = 0; ii < paths.size(); ii++) {
+			int pp = paths.get(ii);
+			double val = this.normalizer.get(topic, pp);
+			val *= delta;
+			this.normalizer.put(topic, pp, val);
+		}
+	}
+	
+	/**
+	 * Computes the observation part.
+	 */
+	protected double getObservation(int topic, int word, int path_index) {
+		TIntArrayList path_nodes = this.wordPaths.get(word, path_index);
+		TopicTreeWalk tw = this.traversals.get(topic);
+		double val = 1.0;
+		for(int ii = 0; ii < path_nodes.size()-1; ii++) {
+			int parent = path_nodes.get(ii);
+			int child = path_nodes.get(ii+1);
+			val *= this.beta.get(parent, child) + tw.getCount(parent, child);
+		}
+		val -= this.priorPath.get(word, path_index);
+		return val;
+	}
+	
+	/**
+	 * After adding instances, update the parameters.
+	 */
+	public void updateParams() {		
+		for(int tt = 0; tt < this.numTopics; tt++) {
+			for(int pp = 0; pp < this.getPathNum(); pp++) {
+				this.updatePathMaskedCount(pp, tt);				
+			}
+			this.computeNormalizer(tt);
+		}		
+	}
+	
+	/**
+	 * This function updates the count given the topic and path of a word.
+	 */
+	public void changeCount(int topic, int word, int path_index, int delta) {
+				
+		TopicTreeWalk tw = this.traversals.get(topic);
+		TIntArrayList path_nodes = this.wordPaths.get(word, path_index);
+		
+		// for affected paths, firstly remove the old values
+		// do not consider the root
+		for(int nn = 1; nn < path_nodes.size() - 1; nn++) {
+			int node = path_nodes.get(nn);
+			double tmp = this.betaSum.get(node) + tw.getNodeCount(node);
+			tmp = 1 / tmp;
+			TIntArrayList paths = this.nodeToPath.get(node);
+			updateNormalizer(topic, paths, tmp);
+		}
+		
+		// change the count for each edge per topic
+		// return the node index whose count is changed from 0 or to 0
+		int[] affected_nodes = tw.changeCount(path_nodes, delta);
+		// change path count
+		if (delta > 0) {
+			this.nonZeroPaths.get(word).adjustOrPutValue(topic, path_index, delta, delta);
+		} else {
+			this.nonZeroPaths.get(word).adjustValue(topic, path_index, delta);
+		}
+		
+		// if necessary, change the path mask of the affected nodes
+		if (affected_nodes != null && affected_nodes.length > 0) {
+			int[] affected_paths = this.findAffectedPaths(affected_nodes);
+			for(int ii = 0; ii < affected_paths.length; ii++) {
+				this.updatePathMaskedCount(affected_paths[ii], topic);
+			}
+		}
+		
+		// for affected paths, update the normalizer
+		for(int nn = 1; nn < path_nodes.size() - 1; nn++) {
+			int node = path_nodes.get(nn);
+			double tmp = this.betaSum.get(node) + tw.getNodeCount(node);
+			TIntArrayList paths = this.nodeToPath.get(node);
+			updateNormalizer(topic, paths, tmp);
+		}
+		
+		// update the root normalizer
+		double val = this.betaSum.get(root) + tw.getNodeCount(root);
+		this.rootNormalizer.put(topic, val);
+	}
+	
+	/**
+	 * This function returns the real normalizer.
+	 */
+	public double getNormalizer(int topic, int path) {
+		return this.normalizer.get(topic, path) * this.rootNormalizer.get(topic);
+	}
+	
+	/**
+	 * This function computes the smoothing bucket for a word.
+	 */
+	public double computeTermSmoothing(double[] alpha, int word) {
+		double smoothing = 0.0;
+		int[] paths = this.getWordPathIndexSet(word);
+		
+		for(int tt = 0; tt < this.numTopics; tt++) {
+			for(int pp : paths) {
+				double val = alpha[tt] * this.getPathPrior(word, pp);
+				val /= this.getNormalizer(tt, pp);
+				smoothing += val;
+			}
+		}
+		//myAssert(smoothing > 0, "something wrong with smoothing!");
+		return smoothing;
+	}
+	
+	/**
+	 * This function computes the topic beta bucket.
+	 */
+	public double computeTermTopicBeta(TIntIntHashMap topic_counts, int word) {
+		double topic_beta = 0.0;
+		int[] paths = this.getWordPathIndexSet(word);
+		for(int tt : topic_counts.keys()) {
+			if (topic_counts.get(tt) > 0 ) {
+				for (int pp : paths) {
+					double val = topic_counts.get(tt) * this.getPathPrior(word, pp);
+					val /= this.getNormalizer(tt, pp);
+					topic_beta += val;
+				}
+			}
+		}
+		//myAssert(topic_beta > 0, "something wrong with topic_beta!");
+		return topic_beta;
+	}
+	
+	/**
+	 * This function computes the topic beta bucket.
+	 */
+	public double computeTermTopicBetaSortD(ArrayList<int[]> topic_counts, int word) {
+		double topic_beta = 0.0;
+		int[] paths = this.getWordPathIndexSet(word);
+		for(int ii = 0; ii < topic_counts.size(); ii++) {
+			int[] current = topic_counts.get(ii);
+			int tt = current[0];
+			int count = current[1];
+			if (count > 0 ) {
+				for (int pp : paths) {
+					double val = count * this.getPathPrior(word, pp);
+					val /= this.getNormalizer(tt, pp);
+					topic_beta += val;
+				}
+			}
+		}
+		//myAssert(topic_beta > 0, "something wrong with topic_beta!");
+		return topic_beta;
+	}
+	
+	/**
+	 * This function computes the topic term bucket.
+	 */
+	public double computeTopicTerm(double[] alpha, TIntIntHashMap local_topic_counts, int word, ArrayList<double[]> dict) {
+		double norm = 0.0;
+		HIntIntIntHashMap nonzeros = this.nonZeroPaths.get(word);
+		
+		// Notice only the nonzero paths are considered
+		//for(int tt = 0; tt < this.numTopics; tt++) {
+		for(int tt : nonzeros.getKey1Set()) {
+			double topic_alpha = alpha[tt];
+			int topic_count = local_topic_counts.get(tt);
+			int[] paths = nonzeros.get(tt).keys();
+			for (int pp = 0; pp < paths.length; pp++) {
+				int path = paths[pp];
+				double val = this.getObservation(tt, word, path);
+				val *= (topic_alpha + topic_count);
+				val /= this.getNormalizer(tt, path);
+				double[] tmp = {tt, path, val};
+				dict.add(tmp);
+				norm += val;
+			}
+		}
+		return norm;
+	}
+
+	public double computeTopicTermSortD(double[] alpha, ArrayList<int[]> local_topic_counts, int word, ArrayList<double[]> dict) {
+		double norm = 0.0;
+		HIntIntIntHashMap nonzeros = this.nonZeroPaths.get(word);
+		
+		int[] tmpTopics = new int[this.numTopics];
+		for(int jj = 0; jj < this.numTopics; jj++) {
+			tmpTopics[jj] = 0;
+		}
+		for(int jj = 0; jj < local_topic_counts.size(); jj++) {
+			int[] current = local_topic_counts.get(jj);
+			int tt = current[0];
+			tmpTopics[tt] = current[1];
+		}
+		
+		// Notice only the nonzero paths are considered
+		//for(int tt = 0; tt < this.numTopics; tt++) {
+		for(int tt : nonzeros.getKey1Set()) {
+			double topic_alpha = alpha[tt];
+			int topic_count = tmpTopics[tt];
+			//local_topic_counts.get(ii);
+			int[] paths = nonzeros.get(tt).keys();
+			for (int pp = 0; pp < paths.length; pp++) {
+				int path = paths[pp];
+				double val = this.getObservation(tt, word, path);
+				val *= (topic_alpha + topic_count);
+				val /= this.getNormalizer(tt, path);
+				double[] tmp = {tt, path, val};
+				dict.add(tmp);
+				norm += val;
+			}
+		}
+		return norm;
+	}
+	//////////////////////////////////////////////////////////
+	
+	
+}
diff --git a/src/cc/mallet/topics/tree/TreeTopicModelFastEst.java b/src/cc/mallet/topics/tree/TreeTopicModelFastEst.java
new file mode 100755
index 000000000..b90bfe971
--- /dev/null
+++ b/src/cc/mallet/topics/tree/TreeTopicModelFastEst.java
@@ -0,0 +1,44 @@
+package cc.mallet.topics.tree;
+
+import gnu.trove.TIntArrayList;
+import gnu.trove.TIntDoubleHashMap;
+
+import java.util.Random;
+
+/**
+ * This class extends the tree topic model fast class
+ * Only add one more function, it computes the smoothing for each word
+ * only based on the prior (treat the real count as zero), so it 
+ * serves as the upper bound of smoothing.
+ * 
+ * @author Yuening Hu
+ */
+
+public class TreeTopicModelFastEst extends TreeTopicModelFast {
+	public TreeTopicModelFastEst(int numTopics, Random random) {
+		super(numTopics, random);
+		this.smoothingEst = new TIntDoubleHashMap();
+	}
+	
+	/**
+	 * This function computes the upper bound of smoothing bucket. 
+	 */
+	public void computeSmoothingEst(double[] alpha) {
+		for(int ww : this.wordPaths.getKey1Set()) {
+			this.smoothingEst.put(ww, 0.0);
+			for(int tt = 0; tt < this.numTopics; tt++) {
+				for(int pp : this.wordPaths.get(ww).keys()) {
+					TIntArrayList path_nodes = this.wordPaths.get(ww, pp);
+					double prob = 1.0;
+					for(int nn = 0; nn < path_nodes.size() - 1; nn++) {
+						int parent = path_nodes.get(nn);
+						int child = path_nodes.get(nn+1);
+						prob *= this.beta.get(parent, child) / this.betaSum.get(parent);
+					}
+					prob *= alpha[tt];
+					this.smoothingEst.adjustValue(ww, prob);
+				}
+			}
+		}
+	}
+}
diff --git a/src/cc/mallet/topics/tree/TreeTopicModelFastEstSortW.java b/src/cc/mallet/topics/tree/TreeTopicModelFastEstSortW.java
new file mode 100755
index 000000000..444e07348
--- /dev/null
+++ b/src/cc/mallet/topics/tree/TreeTopicModelFastEstSortW.java
@@ -0,0 +1,44 @@
+package cc.mallet.topics.tree;
+
+import gnu.trove.TIntArrayList;
+import gnu.trove.TIntDoubleHashMap;
+
+import java.util.Random;
+
+/**
+ * This class extends the tree topic model fast class
+ * Only add one more function, it computes the smoothing for each word
+ * only based on the prior (treat the real count as zero), so it 
+ * serves as the upper bound of smoothing.
+ * 
+ * @author Yuening Hu
+ */
+
+public class TreeTopicModelFastEstSortW extends TreeTopicModelFastSortW {
+	public TreeTopicModelFastEstSortW(int numTopics, Random random) {
+		super(numTopics, random);
+		this.smoothingEst = new TIntDoubleHashMap();
+	}
+	
+	/**
+	 * This function computes the upper bound of smoothing bucket. 
+	 */
+	public void computeSmoothingEst(double[] alpha) {
+		for(int ww : this.wordPaths.getKey1Set()) {
+			this.smoothingEst.put(ww, 0.0);
+			for(int tt = 0; tt < this.numTopics; tt++) {
+				for(int pp : this.wordPaths.get(ww).keys()) {
+					TIntArrayList path_nodes = this.wordPaths.get(ww, pp);
+					double prob = 1.0;
+					for(int nn = 0; nn < path_nodes.size() - 1; nn++) {
+						int parent = path_nodes.get(nn);
+						int child = path_nodes.get(nn+1);
+						prob *= this.beta.get(parent, child) / this.betaSum.get(parent);
+					}
+					prob *= alpha[tt];
+					this.smoothingEst.adjustValue(ww, prob);
+				}
+			}
+		}
+	}
+}
diff --git a/src/cc/mallet/topics/tree/TreeTopicModelFastSortW.java b/src/cc/mallet/topics/tree/TreeTopicModelFastSortW.java
new file mode 100755
index 000000000..c1658a317
--- /dev/null
+++ b/src/cc/mallet/topics/tree/TreeTopicModelFastSortW.java
@@ -0,0 +1,297 @@
+package cc.mallet.topics.tree;
+
+import gnu.trove.TIntArrayList;
+import gnu.trove.TIntIntHashMap;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Random;
+
+/**
+ * nonZeroPathsBubbleSorted: Arraylist<int[]> sorted
+ *                           sorted[0] = (topic << TOPIC_BITS) + path
+ *                           sorted[1] = (masked_path) + real_count
+ *                           
+ * @author Yuening Hu
+ */
+
+public class TreeTopicModelFastSortW extends TreeTopicModelFast {
+	
+	static int TOPIC_BITS = 16;
+	
+	public TreeTopicModelFastSortW(int numTopics, Random random) {
+		super(numTopics, random);
+	}
+	
+	/**
+	 * After adding instances, update the parameters.
+	 */
+	public void updateParams() {
+		
+		for(int ww : this.nonZeroPaths.keys()) {
+			if (!this.nonZeroPathsBubbleSorted.containsKey(ww)) {
+				ArrayList<int[]> sorted = new ArrayList<int[]> ();
+				this.nonZeroPathsBubbleSorted.put(ww, sorted);
+			}
+		}
+		for(int tt = 0; tt < this.numTopics; tt++) {
+			for(int pp = 0; pp < this.getPathNum(); pp++) {
+				this.updatePathMaskedCount(pp, tt);				
+			}
+			this.computeNormalizer(tt);
+		}
+		
+//		for(int ww : this.nonZeroPaths.keys()) {
+//			System.out.println("Word " + ww);
+//			ArrayList<int[]> sorted = this.nonZeroPathsBubbleSorted.get(ww);
+//			for(int ii = 0; ii < sorted.size(); ii++) {
+//				int[] tmp = sorted.get(ii);
+//				System.out.println(tmp[0] + " " + tmp[1] + " " + tmp[2] + " " + tmp[3]);
+//			}
+//		}
+	}
+	
+	protected void updatePathMaskedCount(int path, int topic) {
+		TopicTreeWalk tw = this.traversals.get(topic);
+		int ww = this.getWordFromPath(path);
+		TIntArrayList path_nodes = this.wordPaths.get(ww, path);
+		int leaf_node = path_nodes.get(path_nodes.size() - 1);
+		int original_count = tw.getNodeCount(leaf_node);
+		
+		int shift_count = this.INTBITS;
+		int count = this.maxDepth - 1;
+		int val = 0;
+		boolean flag = false;
+		
+		// note root is not included here
+		// if count of a node in the path is larger than 0, denote as "1"
+		// else use "0"
+		for(int nn = 1; nn < path_nodes.size(); nn++) {
+			int node = path_nodes.get(nn);
+			shift_count--;
+			count--;
+			if (tw.getNodeCount(node) > 0) {
+				flag = true;
+				val += 1 << shift_count;
+			}
+		}
+		
+		// if a path is shorter than tree depth, fill in "1"
+		// should we fit in "0" ???
+		while (flag && count > 0) {
+			shift_count--;
+			val += 1 << shift_count;
+			count--;
+		}
+		
+		val += original_count;
+		this.addOrUpdateValue(topic, path, ww, val, false);
+
+	}
+	
+	private void addOrUpdateValueold(int topic, int path, int word, int newvalue, boolean flag) {
+		ArrayList<int[]> sorted = this.nonZeroPathsBubbleSorted.get(word);
+		int key = (topic << TOPIC_BITS) + path;
+		//remove the old value
+		int oldindex = sorted.size();
+		int oldvalue = 0;
+		for(int ii = 0; ii < sorted.size(); ii++) {
+			int[] tmp = sorted.get(ii);
+			if(tmp[0] == key) {
+				oldvalue = tmp[1];
+				sorted.remove(ii);
+				break;
+			}
+		}
+		if(oldindex > sorted.size()) {
+			oldindex--;
+		}
+		
+		// flag is true, increase value, else just update value
+		int value = 0;
+		if(flag) {
+			value = oldvalue + newvalue;
+		} else {
+			value = newvalue;
+		}
+		
+		//add the new value
+		if (value > 0) {
+			int index;
+			if (value > oldvalue) {
+				index = 0;
+				for(int ii = oldindex - 1; ii >= 0; ii--) {
+					//System.out.println(ii + " " + oldindex + " " + sorted.size());
+					int[] tmp = sorted.get(ii);
+					if(value <= tmp[1]) {
+						index = ii;
+						break;
+					}
+				}
+			} else {
+				index = sorted.size();
+				for(int ii = oldindex; ii < sorted.size(); ii++) {
+					int[] tmp = sorted.get(ii);
+					if(value >= tmp[1]) {
+						index = ii;
+						break;
+					}
+				}
+			}
+
+			int[] newpair = {key, value};
+			sorted.add(index, newpair);
+		}
+	}
+	
+	private void addOrUpdateValue(int topic, int path, int word, int newvalue, boolean flag) {
+		ArrayList<int[]> sorted = this.nonZeroPathsBubbleSorted.get(word);
+		int key = (topic << TOPIC_BITS) + path;
+		//remove the old value
+		int value = 0;
+		for(int ii = 0; ii < sorted.size(); ii++) {
+			int[] tmp = sorted.get(ii);
+			if(tmp[0] == key) {
+				value = tmp[1];
+				sorted.remove(ii);
+				break;
+			}
+		}
+		
+		// flag is true, increase value, else just update value
+		if(flag) {
+			value += newvalue;
+		} else {
+			value = newvalue;
+		}
+		
+		//add the new value
+		if (value > 0) {
+			int index = sorted.size();
+			for(int ii = 0; ii < sorted.size(); ii++) {
+				int[] tmp = sorted.get(ii);
+				if(value >= tmp[1]) {
+					index = ii;
+					break;
+				}
+			}
+			int[] newpair = {key, value};
+			sorted.add(index, newpair);
+		}
+	}
+	
+	public void changeCount(int topic, int word, int path_index, int delta) {
+		TopicTreeWalk tw = this.traversals.get(topic);
+		TIntArrayList path_nodes = this.wordPaths.get(word, path_index);
+		
+		// for affected paths, firstly remove the old values
+		// do not consider the root
+		for(int nn = 1; nn < path_nodes.size() - 1; nn++) {
+			int node = path_nodes.get(nn);
+			double tmp = this.betaSum.get(node) + tw.getNodeCount(node);
+			tmp = 1 / tmp;
+			TIntArrayList paths = this.nodeToPath.get(node);
+			updateNormalizer(topic, paths, tmp);
+		}
+		
+		// change the count for each edge per topic
+		// return the node index whose count is changed from 0 or to 0
+		int[] affected_nodes = tw.changeCount(path_nodes, delta);
+		
+		// change path count
+		this.addOrUpdateValue(topic, path_index, word, delta, true);
+		
+		// if necessary, change the path mask of the affected nodes
+		if (affected_nodes != null && affected_nodes.length > 0) {
+			int[] affected_paths = this.findAffectedPaths(affected_nodes);
+			for(int ii = 0; ii < affected_paths.length; ii++) {
+				this.updatePathMaskedCount(affected_paths[ii], topic);
+			}
+		}
+		
+		// for affected paths, update the normalizer
+		for(int nn = 1; nn < path_nodes.size() - 1; nn++) {
+			int node = path_nodes.get(nn);
+			double tmp = this.betaSum.get(node) + tw.getNodeCount(node);
+			TIntArrayList paths = this.nodeToPath.get(node);
+			updateNormalizer(topic, paths, tmp);
+		}
+		
+		// update the root normalizer
+		double val = this.betaSum.get(root) + tw.getNodeCount(root);
+		this.rootNormalizer.put(topic, val);
+	}
+	
+	/**
+	 * This function computes the topic term bucket.
+	 */
+	public double computeTopicTerm(double[] alpha, TIntIntHashMap local_topic_counts, int word, ArrayList<double[]> dict) {
+		double norm = 0.0;
+		ArrayList<int[]> nonzeros = this.nonZeroPathsBubbleSorted.get(word);
+		
+		// Notice only the nonzero paths are considered
+		for(int ii = 0; ii < nonzeros.size(); ii++) {
+			int[] tmp = nonzeros.get(ii);
+			int key = tmp[0];
+			int tt = key >> TOPIC_BITS;
+			int pp = key - (tt << TOPIC_BITS);
+
+			double topic_alpha = alpha[tt];
+			int topic_count = local_topic_counts.get(tt);
+
+			double val = this.getObservation(tt, word, pp);
+			val *= (topic_alpha + topic_count);
+			val /= this.getNormalizer(tt, pp);
+
+			//System.out.println(tt + " " + pp + " " + tmp[2] + " " + val);
+			
+			double[] result = {tt, pp, val};
+			dict.add(result);
+			
+			norm += val;
+		}
+		
+		return norm;
+	}
+	
+	public double computeTopicTermSortD(double[] alpha, ArrayList<int[]> local_topic_counts, int word, ArrayList<double[]> dict) {
+		double norm = 0.0;
+		ArrayList<int[]> nonzeros = this.nonZeroPathsBubbleSorted.get(word);
+		
+		
+		int[] tmpTopics = new int[this.numTopics];
+		for(int jj = 0; jj < this.numTopics; jj++) {
+			tmpTopics[jj] = 0;
+		}
+		for(int jj = 0; jj < local_topic_counts.size(); jj++) {
+			int[] current = local_topic_counts.get(jj);
+			int tt = current[0];
+			tmpTopics[tt] = current[1];
+		}
+		
+		// Notice only the nonzero paths are considered
+		for(int ii = 0; ii < nonzeros.size(); ii++) {
+			int[] tmp = nonzeros.get(ii);
+			int key = tmp[0];
+			int tt = key >> TOPIC_BITS;
+			int pp = key - (tt << TOPIC_BITS);
+
+			double topic_alpha = alpha[tt];
+			int topic_count = tmpTopics[tt];
+
+			double val = this.getObservation(tt, word, pp);
+			val *= (topic_alpha + topic_count);
+			val /= this.getNormalizer(tt, pp);
+
+			//System.out.println(tt + " " + pp + " " + tmp[2] + " " + val);
+			
+			double[] result = {tt, pp, val};
+			dict.add(result);
+			
+			norm += val;
+		}
+		return norm;
+	}
+}
diff --git a/src/cc/mallet/topics/tree/TreeTopicModelNaive.java b/src/cc/mallet/topics/tree/TreeTopicModelNaive.java
new file mode 100755
index 000000000..c2df2380d
--- /dev/null
+++ b/src/cc/mallet/topics/tree/TreeTopicModelNaive.java
@@ -0,0 +1,76 @@
+package cc.mallet.topics.tree;
+
+import java.util.ArrayList;
+import java.util.Random;
+
+import cc.mallet.types.Dirichlet;
+
+import gnu.trove.TDoubleArrayList;
+import gnu.trove.TIntArrayList;
+import gnu.trove.TIntDoubleHashMap;
+import gnu.trove.TIntDoubleIterator;
+import gnu.trove.TIntHashSet;
+import gnu.trove.TIntIntHashMap;
+import gnu.trove.TIntObjectHashMap;
+import gnu.trove.TIntObjectIterator;
+
+/**
+ * This class extends the tree topic model
+ * It implemented the four abstract methods in a naive way: given a word, 
+ * (1) compute the probability for each topic every time directly
+ * 
+ * @author Yuening Hu
+ */
+
+public class TreeTopicModelNaive extends TreeTopicModel{
+	
+	public TreeTopicModelNaive(int numTopics, Random random) {
+		super(numTopics, random);
+	}
+	
+	/**
+	 * Just calls changeCountOnly(), nothing else.
+	 */
+	public void changeCount(int topic, int word, int path, int delta) {
+//		TIntArrayList path_nodes = this.wordPaths.get(word, path_index);
+//		TopicTreeWalk tw = this.traversals.get(topic);
+//		tw.changeCount(path_nodes, delta);
+		this.changeCountOnly(topic, word, path, delta);
+	}
+	
+	/**
+	 * Given a word and the topic counts in the current document,
+	 * this function computes the probability per path per topic directly
+	 * according to the sampleing equation.
+	 */
+	public double computeTopicTerm(double[] alpha, TIntIntHashMap local_topic_counts, int word, ArrayList<double[]> dict) {
+		double norm = 0.0;
+		int[] paths = this.getWordPathIndexSet(word);
+		for(int tt = 0; tt < this.numTopics; tt++) {
+			double topic_alpha = alpha[tt];
+			int topic_count = local_topic_counts.get(tt);
+			for (int pp = 0; pp < paths.length; pp++) {
+				int path_index = paths[pp];
+				double val = this.computeTopicPathProb(tt, word, path_index);
+				val *= (topic_alpha + topic_count);
+				double[] tmp = {tt, path_index, val};
+				dict.add(tmp);
+				norm += val;
+			}
+		}
+		return norm;
+	}
+	
+	/**
+	 * No parameter needs to be updated.
+	 */
+	public void updateParams() {
+	}
+	
+	/**
+	 * Not actually used.
+	 */
+	public double getNormalizer(int topic, int path) {
+		return 0;
+	}
+}
diff --git a/src/cc/mallet/topics/tree/TreeTopicSampler.java b/src/cc/mallet/topics/tree/TreeTopicSampler.java
new file mode 100755
index 000000000..638502d8d
--- /dev/null
+++ b/src/cc/mallet/topics/tree/TreeTopicSampler.java
@@ -0,0 +1,300 @@
+package cc.mallet.topics.tree;
+
+import gnu.trove.TDoubleArrayList;
+import gnu.trove.TIntHashSet;
+
+import java.io.BufferedReader;
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+
+import cc.mallet.topics.TopicInferencer;
+import cc.mallet.topics.tree.TreeTopicSamplerSortD.DocData;
+import cc.mallet.types.InstanceList;
+import cc.mallet.util.Randoms;
+
+
+/**
+ * This class defines the tree topic sampler.
+ * Defines the basic functions for input, output, resume.
+ * Also defines the abstract functions for child class.
+ * 
+ * @author Yuening Hu
+ */
+
+public abstract class TreeTopicSampler {
+	
+	int numTopics;
+	int numIterations;
+	int startIter;
+	Randoms random;
+	double[] alpha;
+	double alphaSum;
+	TDoubleArrayList lhood;
+	TDoubleArrayList iterTime;
+	ArrayList<String> vocab;
+	ArrayList<String> removedWords;
+	ArrayList<String> removedWordsNew;
+	TIntHashSet cons;
+	HashMap<Integer, TIntHashSet> topickeep;
+	
+	public TreeTopicSampler (int numberOfTopics, double alphaSum, int seed) {
+		this.numTopics = numberOfTopics;
+		this.random = new Randoms(seed);
+
+		this.alphaSum = alphaSum;
+		this.alpha = new double[numTopics];
+		Arrays.fill(alpha, alphaSum / numTopics);
+		
+		this.vocab = new ArrayList<String> ();
+		this.removedWords = new ArrayList<String> ();
+		this.removedWordsNew = new ArrayList<String> ();
+		this.cons = new TIntHashSet();
+		this.topickeep = new HashMap<Integer, TIntHashSet>();
+		
+		this.lhood = new TDoubleArrayList();
+		this.iterTime = new TDoubleArrayList();
+		this.startIter = 0;
+	}
+	
+	/////////////////////////////////////////////////////////////
+	
+	public void setNumIterations(int iters) {
+		this.numIterations = iters;
+	}
+	
+	/**
+	 * Resumes from the saved files.
+	 */
+	public void resume(InstanceList[] training, String resumeDir) {
+		try {
+			String statesFile = resumeDir + ".states";
+			resumeStates(training, statesFile);
+			
+			String lhoodFile = resumeDir + ".lhood";
+			resumeLHood(lhoodFile);
+		} catch (IOException e) {
+			System.out.println(e.getMessage());
+		}
+	}
+	
+	//////////////////////////////////////////////////////////
+	
+	public int getNumIterations() {
+		return this.numIterations;
+	}
+	
+	/**
+	 * Resume lhood and iterTime from the saved lhood file. 
+	 */
+	public void resumeLHood(String lhoodFile) throws IOException{
+		FileInputStream lhoodfstream = new FileInputStream(lhoodFile);
+		DataInputStream lhooddstream = new DataInputStream(lhoodfstream);
+		BufferedReader brLHood = new BufferedReader(new InputStreamReader(lhooddstream));
+		// the first line is the title
+		String strLine = brLHood.readLine();
+		while ((strLine = brLHood.readLine()) != null) {
+			strLine = strLine.trim();
+			String[] str = strLine.split("\t");
+			// iteration, likelihood, iter_time
+			myAssert(str.length == 3, "lhood file problem!");
+			this.lhood.add(Double.parseDouble(str[1]));
+			this.iterTime.add(Double.parseDouble(str[2]));
+		}
+		this.startIter = this.lhood.size();
+		
+//		if (this.startIter > this.numIterations) {
+//			System.out.println("Have already sampled " + this.numIterations + " iterations!");
+//			System.exit(0);
+//		}
+//		System.out.println("Start sampling for iteration " + this.startIter);
+		
+		brLHood.close();
+	}
+	
+	/**
+	 * This function prints the topic words of each topic.
+	 */
+	public void printTopWords(File file, int numWords) throws IOException {
+		PrintStream out = new PrintStream (file);
+		out.print(displayTopWords(numWords));
+		out.close();
+	}
+	
+	/**
+	 * Prints likelihood and iter time.
+	 */
+	public void printStats (File file) throws IOException {
+		PrintStream out = new PrintStream (file);
+		String tmp = "Iteration\t\tlikelihood\titer_time\n";
+		out.print(tmp);
+		
+		for (int iter = 0; iter < this.lhood.size(); iter++) {
+			tmp = iter + "\t" + this.lhood.get(iter) + "\t" + this.iterTime.get(iter);
+			out.println(tmp);
+		}
+		out.close();
+	}
+		
+	/**
+	 * This function reports the detected topics, the documents topics,
+	 * and saves states file and lhood file.
+	 */
+	public void report(String outputDir, int topWords) throws IOException {
+
+		String topicKeysFile = outputDir + ".topics";
+		this.printTopWords(new File(topicKeysFile), topWords);
+		
+		String docTopicsFile = outputDir + ".docs";
+		this.printDocumentTopics(new File(docTopicsFile));
+		
+		String stateFile = outputDir + ".states";
+		this.printState (new File(stateFile));
+		
+		String statsFile = outputDir + ".lhood";
+		this.printStats (new File(statsFile));
+		
+		String topicWordsFile = outputDir + ".topic-words";
+		this.printTopicWords(new File(topicWordsFile));
+	}
+	
+	public void loadVocab(String vocabFile) {
+		
+		try {
+			FileInputStream infstream = new FileInputStream(vocabFile);
+			DataInputStream in = new DataInputStream(infstream);
+			BufferedReader br = new BufferedReader(new InputStreamReader(in));
+			
+			String strLine;
+			//Read File Line By Line
+			while ((strLine = br.readLine()) != null) {
+				strLine = strLine.trim();
+				String[] str = strLine.split("\t");
+				if (str.length > 1) {
+					this.vocab.add(str[1]);
+				} else {
+					System.out.println("Vocab file error at line: " + strLine);
+				}
+			}
+			in.close();
+			
+		} catch (IOException e) {
+			System.out.println("No vocab file Found!");
+		}
+
+	}
+	
+	/**
+	 * Load StopWords
+	 */
+	public void loadRemovedWords(String removedwordFile, ArrayList<String> removed) {
+				
+		try {
+			
+			FileInputStream infstream = new FileInputStream(removedwordFile);
+			DataInputStream in = new DataInputStream(infstream);
+			BufferedReader br = new BufferedReader(new InputStreamReader(in));
+			
+			String strLine;
+			//Read File Line By Line
+			while ((strLine = br.readLine()) != null) {
+				strLine = strLine.trim();
+				removed.add(strLine);
+			}
+			in.close();
+			
+		} catch (IOException e) {
+			System.out.println("No stop word file Found!");
+		}
+	}
+	
+	/**
+	 * Load constraints
+	 */
+	public void loadConstraints(String consFile) {
+		try {
+			FileInputStream infstream = new FileInputStream(consFile);
+			DataInputStream in = new DataInputStream(infstream);
+			BufferedReader br = new BufferedReader(new InputStreamReader(in));
+			
+			String strLine;
+			//Read File Line By Line
+			while ((strLine = br.readLine()) != null) {
+				strLine = strLine.trim();
+				String[] str = strLine.split("\t");
+				if (str.length > 1) {
+					// str[0] is either "MERGE_" or "SPLIT_", not a word
+					for(int ii = 1; ii < str.length; ii++) {
+						int word = this.vocab.indexOf(str[ii]);
+						myAssert(word >= 0, "Constraint words not found in vocab: " + str[ii]);
+						cons.add(word);
+					}
+					this.vocab.add(str[1]);
+				} else {
+					System.out.println("Error! " + strLine);
+				}
+			}
+			in.close();
+			
+		} catch (IOException e) {
+			System.out.println("No constraint file Found!");
+		}
+
+	}
+	
+	/**
+	 * For words on this list, topic assignments will not be cleared.
+	 */
+	public void loadKeepList(String keepFile) {
+		try {
+			FileInputStream infstream = new FileInputStream(keepFile);
+			DataInputStream in = new DataInputStream(infstream);
+			BufferedReader br = new BufferedReader(new InputStreamReader(in));
+			
+			String strLine;
+			//Read File Line By Line
+			while ((strLine = br.readLine()) != null) {
+				strLine = strLine.trim();
+				String[] words = strLine.split(" ");
+				int word = this.vocab.indexOf(words[0]);
+				int topic = Integer.parseInt(words[1]);
+				if (!this.topickeep.containsKey(word)) {
+					this.topickeep.put(word, new TIntHashSet());
+				}
+				TIntHashSet tmp = this.topickeep.get(word);
+				tmp.add(topic);
+			}
+			in.close();
+			
+		} catch (IOException e) {
+			System.out.println("No keep file Found!");
+		}
+
+	}
+		
+	/**
+	 * For testing~~
+	 */
+	public static void myAssert(boolean flag, String info) {
+		if(!flag) {
+			System.out.println(info);
+			System.exit(0);
+		}
+	}
+	
+	abstract public String displayTopWords (int numWords);
+	abstract public void printState (File file) throws IOException;
+	abstract public void printTopicWords (File file) throws IOException;
+	abstract public void sampleDoc(int doc);
+	abstract public double docLHood();
+	abstract public void printDocumentTopics (File file) throws IOException;
+	abstract public void resumeStates(InstanceList[] training, String statesFile) throws IOException;
+	abstract public TreeTopicInferencer getInferencer();
+	abstract public TreeMarginalProbEstimator getProbEstimator();
+}
diff --git a/src/cc/mallet/topics/tree/TreeTopicSamplerFast.java b/src/cc/mallet/topics/tree/TreeTopicSamplerFast.java
new file mode 100755
index 000000000..6fb209da8
--- /dev/null
+++ b/src/cc/mallet/topics/tree/TreeTopicSamplerFast.java
@@ -0,0 +1,286 @@
+package cc.mallet.topics.tree;
+
+import gnu.trove.TDoubleArrayList;
+import gnu.trove.TIntArrayList;
+import gnu.trove.TIntIntHashMap;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import cc.mallet.topics.tree.TreeTopicSamplerHashD.DocData;
+import cc.mallet.util.Randoms;
+
+/**
+ * This class defines a fast tree topic sampler, which calls the fast tree topic model.
+ * (1) It divides the sampling into three bins: smoothing, topic beta, topic term.
+ *     as Yao and Mimno's paper, KDD, 2009.
+ * (2) Each time the smoothing, topic beta, and topic term are recomputed.
+ * It is faster, because,
+ * (1) For topic term, only compute the one with non-zero paths (see TreeTopicModelFast).
+ * (2) The normalizer is saved.
+ * (3) Topic counts for each documents are ranked.
+ * 
+ * @author Yuening Hu
+ */
+
+public class TreeTopicSamplerFast extends TreeTopicSamplerHashD {
+	
+    public TreeTopicSamplerFast (int numberOfTopics, double alphaSum, int seed, boolean sort) {
+		super(numberOfTopics, alphaSum, seed);
+
+		if (sort) {
+		    this.topics = new TreeTopicModelFastSortW(this.numTopics, this.random);
+		//} else if (bubble == 1) {
+		//    this.topics = new TreeTopicModelFastSortT1(this.numTopics, this.random);
+		//} else if (bubble == 2) {
+		//    this.topics = new TreeTopicModelFastSortT2(this.numTopics, this.random);
+		} else {
+		    this.topics = new TreeTopicModelFast(this.numTopics, this.random);
+		}
+	}
+	
+	/**
+	 * For each word in a document, firstly covers its topic and path, then sample a
+	 * topic and path, and update.
+	 */
+	public void sampleDoc(int doc_id){
+		DocData doc = this.data.get(doc_id);
+		//System.out.println("doc " + doc_id);
+		
+		for(int ii = 0; ii < doc.tokens.size(); ii++) {	
+			//int word = doc.tokens.getIndexAtPosition(ii);
+			int word = doc.tokens.get(ii);
+			
+			this.changeTopic(doc_id, ii, word, -1, -1);
+			
+			double smoothing_mass = this.topics.computeTermSmoothing(this.alpha, word);
+			double topic_beta_mass = this.topics.computeTermTopicBeta(doc.topicCounts, word);
+			
+			ArrayList<double[]> topic_term_score = new ArrayList<double[]> ();
+			double topic_term_mass = this.topics.computeTopicTerm(this.alpha, doc.topicCounts, word, topic_term_score);
+			
+			double norm = smoothing_mass + topic_beta_mass + topic_term_mass;
+			double sample = this.random.nextDouble();
+			//double sample = 0.5;
+			sample *= norm;
+
+			int new_topic = -1;
+			int new_path = -1;
+			
+			int[] paths = this.topics.getWordPathIndexSet(word);
+			
+			// sample the smoothing bin
+			if (sample < smoothing_mass) {
+				for (int tt = 0; tt < this.numTopics; tt++) {
+					for (int pp : paths) {
+						double val = alpha[tt] * this.topics.getPathPrior(word, pp);
+						val /= this.topics.getNormalizer(tt, pp);
+						sample -= val;
+						if (sample <= 0.0) {
+							new_topic = tt;
+							new_path = pp;
+							break;
+						}
+					}
+					if (new_topic >= 0) {
+						break;
+					}
+				}
+				myAssert((new_topic >= 0 && new_topic < numTopics), "something wrong in sampling smoothing!");
+			} else {
+				sample -= smoothing_mass;
+			}
+			
+			// sample the topic beta bin
+			if (new_topic < 0 && sample < topic_beta_mass) {
+				for(int tt : doc.topicCounts.keys()) {
+					for (int pp : paths) {
+						double val = doc.topicCounts.get(tt) * this.topics.getPathPrior(word, pp);
+						val /= this.topics.getNormalizer(tt, pp);
+						sample -= val;
+						if (sample <= 0.0) {
+							new_topic = tt;
+							new_path = pp;
+							break;
+						}
+					}
+					if (new_topic >= 0) {
+						break;
+					}
+				}
+				myAssert((new_topic >= 0 && new_topic < numTopics), "something wrong in sampling topic beta!");
+			} else {
+				sample -= topic_beta_mass;
+			}
+			
+			// sample the topic term bin
+			if (new_topic < 0) {
+				for(int jj = 0; jj < topic_term_score.size(); jj++) {
+					double[] tmp = topic_term_score.get(jj);
+					int tt = (int) tmp[0];
+					int pp = (int) tmp[1];
+					double val = tmp[2];
+					sample -= val;
+					if (sample <= 0.0) {
+						new_topic = tt;
+						new_path = pp;
+						break;
+					}
+				}
+				myAssert((new_topic >= 0 && new_topic < numTopics), "something wrong in sampling topic term!");
+			}
+			
+			this.changeTopic(doc_id, ii, word, new_topic, new_path);
+		}
+	}
+	
+	/////////////////////////////
+	// The following methods are for testing only.
+	
+	public double callComputeTermTopicBeta(TIntIntHashMap topic_counts, int word) {
+		return this.topics.computeTermTopicBeta(topic_counts, word);
+	}
+	
+	public double callComputeTermSmoothing(int word) {
+		return this.topics.computeTermSmoothing(this.alpha, word);
+	}
+
+	public double computeTopicSmoothTest(int word) {
+		double smooth = 0.0;
+		int[] paths = this.topics.getWordPathIndexSet(word);
+		for(int tt = 0; tt < this.numTopics; tt++) {
+			double topic_alpha = alpha[tt];
+			for (int pp = 0; pp < paths.length; pp++) {
+				int path_index = paths[pp];
+				
+				TIntArrayList path_nodes = this.topics.wordPaths.get(word, path_index);
+				TopicTreeWalk tw = this.topics.traversals.get(tt);
+				
+				double tmp = 1.0;
+				for(int ii = 0; ii < path_nodes.size()-1; ii++) {
+					int parent = path_nodes.get(ii);
+					int child = path_nodes.get(ii+1);
+					tmp *= this.topics.beta.get(parent, child);
+					tmp /= this.topics.betaSum.get(parent) + tw.getNodeCount(parent);
+				}
+				tmp *= topic_alpha;
+				smooth += tmp;
+			}
+		}
+		return smooth;
+	}
+	
+	public double computeTopicTermBetaTest(TIntIntHashMap local_topic_counts, int word) {
+		double topictermbeta = 0.0;
+		int[] paths = this.topics.getWordPathIndexSet(word);
+		for(int tt = 0; tt < this.numTopics; tt++) {
+			int topic_count = local_topic_counts.get(tt);
+			for (int pp = 0; pp < paths.length; pp++) {
+				int path_index = paths[pp];
+				
+				TIntArrayList path_nodes = this.topics.wordPaths.get(word, path_index);
+				TopicTreeWalk tw = this.topics.traversals.get(tt);
+								
+				double tmp = 1.0;
+				for(int ii = 0; ii < path_nodes.size()-1; ii++) {
+					int parent = path_nodes.get(ii);
+					int child = path_nodes.get(ii+1);
+					tmp *= this.topics.beta.get(parent, child);
+					tmp /= this.topics.betaSum.get(parent) + tw.getNodeCount(parent);
+				}
+				tmp *= topic_count;
+				
+				topictermbeta += tmp;
+			}
+		}
+		return topictermbeta;
+	}
+	
+	public double computeTopicTermScoreTest(double[] alpha, TIntIntHashMap local_topic_counts, int word, HIntIntDoubleHashMap dict) {
+		double termscore = 0.0;
+		int[] paths = this.topics.getWordPathIndexSet(word);
+		for(int tt = 0; tt < this.numTopics; tt++) {
+			double topic_alpha = alpha[tt];
+			int topic_count = local_topic_counts.get(tt);
+			for (int pp = 0; pp < paths.length; pp++) {
+				int path_index = paths[pp];
+				
+				TIntArrayList path_nodes = this.topics.wordPaths.get(word, path_index);
+				TopicTreeWalk tw = this.topics.traversals.get(tt);
+				
+				double val = 1.0;
+				double tmp = 1.0;
+				double normalizer = 1.0;
+				for(int ii = 0; ii < path_nodes.size()-1; ii++) {
+					int parent = path_nodes.get(ii);
+					int child = path_nodes.get(ii+1);
+					val *= this.topics.beta.get(parent, child) + tw.getCount(parent, child);
+					tmp *= this.topics.beta.get(parent, child);
+					normalizer *= this.topics.betaSum.get(parent) + tw.getNodeCount(parent);
+				}
+				val -= tmp;
+				val *= (topic_alpha + topic_count);
+				val /= normalizer;
+				
+				dict.put(tt, path_index, val);
+				termscore += val;
+			}
+		}
+		return termscore;
+	}
+	
+	public double computeTopicTermTest(double[] alpha, TIntIntHashMap local_topic_counts, int word, ArrayList<double[]> dict) {
+		double norm = 0.0;
+		int[] paths = this.topics.getWordPathIndexSet(word);
+		for(int tt = 0; tt < this.numTopics; tt++) {
+			double topic_alpha = alpha[tt];
+			int topic_count = local_topic_counts.get(tt);
+			for (int pp = 0; pp < paths.length; pp++) {
+				int path_index = paths[pp];
+				
+				TIntArrayList path_nodes = this.topics.wordPaths.get(word, path_index);
+				TopicTreeWalk tw = this.topics.traversals.get(tt);
+				
+				double smooth = 1.0;
+				for(int ii = 0; ii < path_nodes.size()-1; ii++) {
+					int parent = path_nodes.get(ii);
+					int child = path_nodes.get(ii+1);
+					smooth *= this.topics.beta.get(parent, child);
+					smooth /= this.topics.betaSum.get(parent) + tw.getNodeCount(parent);
+				}
+				smooth *= topic_alpha;
+				
+				double topicterm = 1.0;
+				for(int ii = 0; ii < path_nodes.size()-1; ii++) {
+					int parent = path_nodes.get(ii);
+					int child = path_nodes.get(ii+1);
+					topicterm *= this.topics.beta.get(parent, child);
+					topicterm /= this.topics.betaSum.get(parent) + tw.getNodeCount(parent);
+				}
+				topicterm *= topic_count;
+				
+				double termscore = 1.0;
+				double tmp = 1.0;
+				double normalizer = 1.0;
+				for(int ii = 0; ii < path_nodes.size()-1; ii++) {
+					int parent = path_nodes.get(ii);
+					int child = path_nodes.get(ii+1);
+					termscore *= this.topics.beta.get(parent, child) + tw.getCount(parent, child);
+					tmp *= this.topics.beta.get(parent, child);
+					normalizer *= this.topics.betaSum.get(parent) + tw.getNodeCount(parent);
+				}
+				termscore -= tmp;
+				termscore *= (topic_alpha + topic_count);
+				termscore /= normalizer;
+				
+				double val = smooth + topicterm + termscore;
+				double[] tmptmp = {tt, path_index, val};
+				dict.add(tmptmp);
+				norm += val;
+				System.out.println("Fast Topic " + tt + " " + smooth + " " + topicterm + " " + termscore + " " + tmp + " " + topic_alpha + " " + topic_count + " " + termscore);
+			}
+		}
+		return norm;
+	}
+}
diff --git a/src/cc/mallet/topics/tree/TreeTopicSamplerFastEst.java b/src/cc/mallet/topics/tree/TreeTopicSamplerFastEst.java
new file mode 100755
index 000000000..d0ee50c51
--- /dev/null
+++ b/src/cc/mallet/topics/tree/TreeTopicSamplerFastEst.java
@@ -0,0 +1,157 @@
+package cc.mallet.topics.tree;
+
+import java.util.ArrayList;
+
+import cc.mallet.topics.tree.TreeTopicSamplerHashD.DocData;
+import gnu.trove.TIntArrayList;
+import gnu.trove.TIntDoubleHashMap;
+
+/**
+ * This class improves the fast sampler based on estimation of smoothing.
+ * Most of the time, the smoothing is very small and not worth to recompute since
+ * it will hardly be hit. So we use an upper bound for smoothing. 
+ * Only if the smoothing bin is hit, the actual smoothing is computed and resampled.
+ * 
+ * @author Yuening Hu
+ */
+
+public class TreeTopicSamplerFastEst extends TreeTopicSamplerHashD{
+	
+	public TreeTopicSamplerFastEst (int numberOfTopics, double alphaSum, int seed, boolean sort) {
+		super(numberOfTopics, alphaSum, seed);
+		
+		if (sort) {
+		    this.topics = new TreeTopicModelFastEstSortW(this.numTopics, this.random);
+		} else {
+			this.topics = new TreeTopicModelFastEst(this.numTopics, this.random);
+		}
+	}
+	
+	/**
+	 * Use an upper bound for smoothing. Only if the smoothing 
+	 * bin is hit, the actual smoothing is computed and resampled.
+	 */
+	public void sampleDoc(int doc_id) {
+		DocData doc = this.data.get(doc_id);
+		//System.out.println("doc " + doc_id);
+		//int[] tmpstats = this.stats.get(this.stats.size()-1);
+		
+		for(int ii = 0; ii < doc.tokens.size(); ii++) {	
+			//int word = doc.tokens.getIndexAtPosition(ii);
+			int word = doc.tokens.get(ii);
+						
+			this.changeTopic(doc_id, ii, word, -1, -1);
+			
+			//double smoothing_mass = this.topics.computeTermSmoothing(this.alpha, word);
+			double smoothing_mass_est = this.topics.smoothingEst.get(word);
+			
+			double topic_beta_mass = this.topics.computeTermTopicBeta(doc.topicCounts, word);	
+			
+			ArrayList<double[]> topic_term_score = new ArrayList<double[]>();
+			double topic_term_mass = this.topics.computeTopicTerm(this.alpha, doc.topicCounts, word, topic_term_score);			
+			
+			double norm_est = smoothing_mass_est + topic_beta_mass + topic_term_mass;
+			double sample = this.random.nextDouble();
+			//double sample = 0.5;
+			sample *= norm_est;
+
+			int new_topic = -1;
+			int new_path = -1;
+			
+			int[] paths = this.topics.getWordPathIndexSet(word);
+			
+			// sample the smoothing bin
+			if (sample < smoothing_mass_est) {
+				//tmpstats[0] += 1;
+				double smoothing_mass = this.topics.computeTermSmoothing(this.alpha, word);
+				double norm =  smoothing_mass + topic_beta_mass + topic_term_mass;
+				sample /= norm_est;
+				sample *= norm;
+				if (sample < smoothing_mass) {
+					//tmpstats[1] += 1;
+					for (int tt = 0; tt < this.numTopics; tt++) {
+						for (int pp : paths) {
+							double val = alpha[tt] * this.topics.getPathPrior(word, pp);
+							val /= this.topics.getNormalizer(tt, pp);
+							sample -= val;
+							if (sample <= 0.0) {
+								new_topic = tt;
+								new_path = pp;
+								break;
+							}
+						}
+						if (new_topic >= 0) {
+							break;
+						}
+					}
+					myAssert((new_topic >= 0 && new_topic < numTopics), "something wrong in sampling smoothing!");
+				} else {
+					sample -= smoothing_mass;
+				}
+			} else {
+				sample -= smoothing_mass_est;
+			}
+
+			// sample topic beta bin
+			if (new_topic < 0 && sample < topic_beta_mass) {
+				//tmpstats[2] += 1;
+				for(int tt : doc.topicCounts.keys()) {
+					for (int pp : paths) {
+						double val = doc.topicCounts.get(tt) * this.topics.getPathPrior(word, pp);
+						val /= this.topics.getNormalizer(tt, pp);
+						sample -= val;
+						if (sample <= 0.0) {						
+							new_topic = tt;
+							new_path = pp;
+							break;
+						}
+					}
+					if (new_topic >= 0) {
+						break;
+					}
+				}
+				myAssert((new_topic >= 0 && new_topic < numTopics), "something wrong in sampling topic beta!");
+			} else {
+				sample -= topic_beta_mass;
+			}
+			
+			
+			// sample topic term bin
+			if (new_topic < 0) {
+				//tmpstats[3] += 1;
+				for(int jj = 0; jj < topic_term_score.size(); jj++) {
+					double[] tmp = topic_term_score.get(jj);
+					int tt = (int) tmp[0];
+					int pp = (int) tmp[1];
+					double val = tmp[2];
+					sample -= val;
+					if (sample <= 0.0) {
+						new_topic = tt;
+						new_path = pp;
+						break;
+					}
+				}
+				myAssert((new_topic >= 0 && new_topic < numTopics), "something wrong in sampling topic term!");
+			}
+			
+			this.changeTopic(doc_id, ii, word, new_topic, new_path);	
+		}
+		
+	}
+	
+	/**
+	 * Before sampling start, compute smoothing upper bound for each word.
+	 */
+	public void estimate(int numIterations, String outputFolder, int outputInterval, int topWords) {
+		if(this.topics instanceof TreeTopicModelFastEst) {
+			TreeTopicModelFastEst tmp = (TreeTopicModelFastEst) this.topics;
+			tmp.computeSmoothingEst(this.alpha);
+		} else if (this.topics instanceof TreeTopicModelFastEstSortW) {
+			TreeTopicModelFastEstSortW tmp = (TreeTopicModelFastEstSortW) this.topics;
+			tmp.computeSmoothingEst(this.alpha);
+		}
+		
+		super.estimate(numIterations, outputFolder, outputInterval, topWords);
+	}
+	
+}
diff --git a/src/cc/mallet/topics/tree/TreeTopicSamplerFastEstSortD.java b/src/cc/mallet/topics/tree/TreeTopicSamplerFastEstSortD.java
new file mode 100755
index 000000000..3c41ed0cd
--- /dev/null
+++ b/src/cc/mallet/topics/tree/TreeTopicSamplerFastEstSortD.java
@@ -0,0 +1,150 @@
+package cc.mallet.topics.tree;
+
+import java.util.ArrayList;
+
+import cc.mallet.topics.tree.TreeTopicSamplerHashD.DocData;
+
+/**
+ * This class improves the fast sampler based on estimation of smoothing.
+ * Most of the time, the smoothing is very small and not worth to recompute since
+ * it will hardly be hit. So we use an upper bound for smoothing. 
+ * Only if the smoothing bin is hit, the actual smoothing is computed and resampled.
+ * 
+ * @author Yuening Hu
+ */
+
+public class TreeTopicSamplerFastEstSortD extends TreeTopicSamplerSortD{
+
+	public TreeTopicSamplerFastEstSortD (int numberOfTopics, double alphaSum, int seed, boolean sort) {
+		super(numberOfTopics, alphaSum, seed);
+		
+		if (sort) {
+		    this.topics = new TreeTopicModelFastEstSortW(this.numTopics, this.random);
+		} else {
+			this.topics = new TreeTopicModelFastEst(this.numTopics, this.random);
+		}
+	}
+	
+	/**
+	 * Use an upper bound for smoothing. Only if the smoothing 
+	 * bin is hit, the actual smoothing is computed and resampled.
+	 */
+	public void sampleDoc(int doc_id) {
+		DocData doc = this.data.get(doc_id);
+		//System.out.println("doc " + doc_id);
+		
+		for(int ii = 0; ii < doc.tokens.size(); ii++) {	
+			//int word = doc.tokens.getIndexAtPosition(ii);
+			int word = doc.tokens.get(ii);
+			
+			this.changeTopic(doc_id, ii, word, -1, -1);
+			
+			//double smoothing_mass = this.topics.computeTermSmoothing(this.alpha, word);
+			double smoothing_mass_est = this.topics.smoothingEst.get(word);
+			double topic_beta_mass = this.topics.computeTermTopicBetaSortD(doc.topicCounts, word);
+			
+			ArrayList<double[]> topic_term_score = new ArrayList<double[]>();
+			double topic_term_mass = this.topics.computeTopicTermSortD(this.alpha, doc.topicCounts, word, topic_term_score);
+			
+			double norm_est = smoothing_mass_est + topic_beta_mass + topic_term_mass;
+			double sample = this.random.nextDouble();
+			//double sample = 0.5;
+			sample *= norm_est;
+
+			int new_topic = -1;
+			int new_path = -1;
+			
+			int[] paths = this.topics.getWordPathIndexSet(word);
+			
+			// sample the smoothing bin
+			if (sample < smoothing_mass_est) {
+				double smoothing_mass = this.topics.computeTermSmoothing(this.alpha, word);
+				double norm =  smoothing_mass + topic_beta_mass + topic_term_mass;
+				sample /= norm_est;
+				sample *= norm;
+				if (sample < smoothing_mass) {
+					for (int tt = 0; tt < this.numTopics; tt++) {
+						for (int pp : paths) {
+							double val = alpha[tt] * this.topics.getPathPrior(word, pp);
+							val /= this.topics.getNormalizer(tt, pp);
+							sample -= val;
+							if (sample <= 0.0) {
+								new_topic = tt;
+								new_path = pp;
+								break;
+							}
+						}
+						if (new_topic >= 0) {
+							break;
+						}
+					}
+					myAssert((new_topic >= 0 && new_topic < numTopics), "something wrong in sampling smoothing!");
+				} else {
+					sample -= smoothing_mass;
+				}
+			} else {
+				sample -= smoothing_mass_est;
+			}
+			
+			// sample topic beta bin
+			if (new_topic < 0 && sample < topic_beta_mass) {
+				for(int jj = 0; jj < doc.topicCounts.size(); jj++) {
+					int[] current = doc.topicCounts.get(jj);
+					int tt = current[0];
+					int count = current[1];
+					for(int pp : paths) {
+						double val = count * this.topics.getPathPrior(word, pp);
+						val /= this.topics.getNormalizer(tt, pp);
+						sample -= val;
+						if (sample <= 0.0) {
+							new_topic = tt;
+							new_path = pp;
+							break;
+						}
+					}
+					if (new_topic >= 0) {
+						break;
+					}
+				}
+				myAssert((new_topic >= 0 && new_topic < numTopics), "something wrong in sampling topic beta!");
+			} else {
+				sample -= topic_beta_mass;
+			}
+			
+			// sample topic term bin
+			if (new_topic < 0) {
+				for(int jj = 0; jj < topic_term_score.size(); jj++) {
+					double[] tmp = topic_term_score.get(jj);
+					int tt = (int) tmp[0];
+					int pp = (int) tmp[1];
+					double val = tmp[2];
+					sample -= val;
+					if (sample <= 0.0) {
+						new_topic = tt;
+						new_path = pp;
+						break;
+					}
+				}
+				myAssert((new_topic >= 0 && new_topic < numTopics), "something wrong in sampling topic term!");
+			}
+			
+			this.changeTopic(doc_id, ii, word, new_topic, new_path);
+		}
+		
+	}
+	
+	/**
+	 * Before sampling start, compute smoothing upper bound for each word.
+	 */
+	public void estimate(int numIterations, String outputFolder, int outputInterval, int topWords) {
+		if(this.topics instanceof TreeTopicModelFastEst) {
+			TreeTopicModelFastEst tmp = (TreeTopicModelFastEst) this.topics;
+			tmp.computeSmoothingEst(this.alpha);
+		} else if (this.topics instanceof TreeTopicModelFastEstSortW) {
+			TreeTopicModelFastEstSortW tmp = (TreeTopicModelFastEstSortW) this.topics;
+			tmp.computeSmoothingEst(this.alpha);
+		}
+		
+		super.estimate(numIterations, outputFolder, outputInterval, topWords);
+	}
+}
\ No newline at end of file
diff --git a/src/cc/mallet/topics/tree/TreeTopicSamplerFastSortD.java b/src/cc/mallet/topics/tree/TreeTopicSamplerFastSortD.java
new file mode 100755
index 000000000..243e8d5fd
--- /dev/null
+++ b/src/cc/mallet/topics/tree/TreeTopicSamplerFastSortD.java
@@ -0,0 +1,138 @@
+package cc.mallet.topics.tree;
+
+import gnu.trove.TDoubleArrayList;
+import gnu.trove.TIntArrayList;
+import gnu.trove.TIntIntHashMap;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import cc.mallet.topics.tree.TreeTopicSamplerHashD.DocData;
+import cc.mallet.util.Randoms;
+
+/**
+ * This class defines a fast tree topic sampler, which calls the fast tree topic model.
+ * (1) It divides the sampling into three bins: smoothing, topic beta, topic term.
+ *     as Yao and Mimno's paper, KDD, 2009.
+ * (2) Each time the smoothing, topic beta, and topic term are recomputed.
+ * It is faster, because,
+ * (1) For topic term, only compute the one with non-zero paths (see TreeTopicModelFast).
+ * (2) The normalizer is saved.
+ * (3) Topic counts for each documents are ranked.
+ * 
+ * @author Yuening Hu
+ */
+public class TreeTopicSamplerFastSortD extends TreeTopicSamplerSortD {
+	
+	public TreeTopicSamplerFastSortD (int numberOfTopics, double alphaSum, int seed, boolean sort) {
+		super(numberOfTopics, alphaSum, seed);
+		this.topics = new TreeTopicModelFast(this.numTopics, this.random);
+		
+		if (sort) {
+		    this.topics = new TreeTopicModelFastSortW(this.numTopics, this.random);
+		} else {
+			this.topics = new TreeTopicModelFast(this.numTopics, this.random);
+		}
+	}
+	
+	/**
+	 * For each word in a document, firstly covers its topic and path, then sample a
+	 * topic and path, and update.
+	 */
+	public void sampleDoc(int doc_id){
+		DocData doc = this.data.get(doc_id);
+		//System.out.println("doc " + doc_id);
+		
+		for(int ii = 0; ii < doc.tokens.size(); ii++) {	
+			//int word = doc.tokens.getIndexAtPosition(ii);
+			int word = doc.tokens.get(ii);
+			
+			this.changeTopic(doc_id, ii, word, -1, -1);
+						
+			double smoothing_mass = this.topics.computeTermSmoothing(this.alpha, word);
+			double topic_beta_mass = this.topics.computeTermTopicBetaSortD(doc.topicCounts, word);
+			
+			ArrayList<double[]> topic_term_score = new ArrayList<double[]> ();
+			double topic_term_mass = this.topics.computeTopicTermSortD(this.alpha, doc.topicCounts, word, topic_term_score);
+			
+			double norm = smoothing_mass + topic_beta_mass + topic_term_mass;
+			double sample = this.random.nextDouble();
+			//double sample = 0.5;
+			sample *= norm;
+
+			int new_topic = -1;
+			int new_path = -1;
+			
+			int[] paths = this.topics.getWordPathIndexSet(word);
+			
+			// sample the smoothing bin
+			if (sample < smoothing_mass) {
+				for (int tt = 0; tt < this.numTopics; tt++) {
+					for (int pp : paths) {
+						double val = alpha[tt] * this.topics.getPathPrior(word, pp);
+						val /= this.topics.getNormalizer(tt, pp);
+						sample -= val;
+						if (sample <= 0.0) {
+							new_topic = tt;
+							new_path = pp;
+							break;
+						}
+					}
+					if (new_topic >= 0) {
+						break;
+					}
+				}
+				myAssert((new_topic >= 0 && new_topic < numTopics), "something wrong in sampling smoothing!");
+			} else {
+				sample -= smoothing_mass;
+			}
+			
+			// sample the topic beta bin
+			if (new_topic < 0 && sample < topic_beta_mass) {
+				
+				for(int jj = 0; jj < doc.topicCounts.size(); jj++) {
+					int[] current = doc.topicCounts.get(jj);
+					int tt = current[0];
+					int count = current[1];
+					for(int pp : paths) {
+						double val = count * this.topics.getPathPrior(word, pp);
+						val /= this.topics.getNormalizer(tt, pp);
+						sample -= val;
+						if (sample <= 0.0) {
+							new_topic = tt;
+							new_path = pp;
+							break;
+						}
+					}
+					if (new_topic >= 0) {
+						break;
+					}
+				}
+				myAssert((new_topic >= 0 && new_topic < numTopics), "something wrong in sampling topic beta!");
+			} else {
+				sample -= topic_beta_mass;
+			}
+			
+			// sample the topic term bin
+			if (new_topic < 0) {
+				for(int jj = 0; jj < topic_term_score.size(); jj++) {
+					double[] tmp = topic_term_score.get(jj);
+					int tt = (int) tmp[0];
+					int pp = (int) tmp[1];
+					double val = tmp[2];
+					sample -= val;
+					if (sample <= 0.0) {
+						new_topic = tt;
+						new_path = pp;
+						break;
+					}
+				}
+				myAssert((new_topic >= 0 && new_topic < numTopics), "something wrong in sampling topic term!");
+			}
+			
+			this.changeTopic(doc_id, ii, word, new_topic, new_path);
+		}
+	}
+	
+}
diff --git a/src/cc/mallet/topics/tree/TreeTopicSamplerHashD.java b/src/cc/mallet/topics/tree/TreeTopicSamplerHashD.java
new file mode 100755
index 000000000..d5afce768
--- /dev/null
+++ b/src/cc/mallet/topics/tree/TreeTopicSamplerHashD.java
@@ -0,0 +1,648 @@
+package cc.mallet.topics.tree;
+
+import gnu.trove.TDoubleArrayList;
+import gnu.trove.TIntArrayList;
+import gnu.trove.TIntHashSet;
+import gnu.trove.TIntIntHashMap;
+import gnu.trove.TIntIntIterator;
+import gnu.trove.TIntObjectHashMap;
+
+import java.io.BufferedOutputStream;
+import java.io.BufferedReader;
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintStream;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.zip.GZIPOutputStream;
+
+import cc.mallet.types.Dirichlet;
+import cc.mallet.types.FeatureSequence;
+import cc.mallet.types.IDSorter;
+import cc.mallet.types.Instance;
+import cc.mallet.types.InstanceList;
+import cc.mallet.util.Randoms;
+
+/**
+ * This class defines the tree topic sampler, which loads the instances,  
+ * reports the topics, and leaves the sampler method as an abstract method, 
+ * which might be various for different methods.
+ * 
+ * @author Yuening Hu
+ */
+
+public abstract class TreeTopicSamplerHashD extends TreeTopicSampler implements TreeTopicSamplerInterface{
+	
+	/**
+	 * This class defines the format of a document.
+	 */
+	public class DocData {
+		TIntArrayList tokens;
+		TIntArrayList topics;
+		TIntArrayList paths;
+		// sort
+		TIntIntHashMap topicCounts;
+		String docName;
+		
+		public DocData (String name, TIntArrayList tokens, TIntArrayList topics,
+				TIntArrayList paths, TIntIntHashMap topicCounts) {
+			this.docName = name;
+			this.tokens = tokens;
+			this.topics = topics;
+			this.paths = paths;
+			this.topicCounts = topicCounts;
+		}
+		
+		public String toString() {
+			String result = "***************\n";
+			result += docName + "\n";
+			
+			result += "tokens:   ";
+			for (int jj = 0; jj < tokens.size(); jj++) {
+				int index = tokens.get(jj);
+				String word = vocab.get(index);
+				result += word + " " + index + ", ";
+			}
+			
+			result += "\ntopics:   ";
+			result += topics.toString();
+			
+			result += "\npaths:    ";
+			result += paths.toString();
+			
+			result += "\ntopicCounts:   ";
+
+			for(TIntIntIterator it = this.topicCounts.iterator(); it.hasNext(); ) {
+				it.advance();
+				result += "Topic " + it.key() + ": " + it.value() + ", ";
+			}
+			result += "\n*****************\n";
+			return result;
+		}
+	}
+	
+	public class WordProb implements Comparable {
+		int wi;
+		double p;
+		public WordProb (int wi, double p) { this.wi = wi; this.p = p; }
+		public final int compareTo (Object o2) {
+			if (p > ((WordProb)o2).p)
+				return -1;
+			else if (p == ((WordProb)o2).p)
+				return 0;
+			else return 1;
+		}
+	}
+	
+	ArrayList<DocData> data;
+	TreeTopicModel topics;
+	
+	public TreeTopicSamplerHashD (int numberOfTopics, double alphaSum, int seed) {
+		super(numberOfTopics, alphaSum, seed);
+		this.data = new ArrayList<DocData> ();
+		
+		// notice: this.topics is not initialized in this abstract class,
+		// in each sub class, the topics variable is initialized differently.
+	}
+		
+	/**
+	 * This function adds instances given the training data in mallet input data format.
+	 * For each token in a document, sample a topic and then sample a path based on prior. 
+	 */
+	public void addInstances(InstanceList[] training) {
+		boolean debug = false;
+		int count = 0;
+		for(int ll = 0; ll < training.length; ll++) {
+			int totalcount = 0;
+			for (Instance instance : training[ll]) {
+				count++;
+				FeatureSequence original_tokens = (FeatureSequence) instance.getData();
+				String name = instance.getName().toString();
+				//String name = "null-source";
+				//if (instance.getSource() != null) {
+				//	name = instance.getSource().toString();
+				//}
+	
+				// *** remained problem: keep topicCounts sorted
+				TIntArrayList tokens = new TIntArrayList(original_tokens.getLength());
+				TIntIntHashMap topicCounts = new TIntIntHashMap ();			
+				TIntArrayList topics = new TIntArrayList(original_tokens.getLength());
+				TIntArrayList paths = new TIntArrayList(original_tokens.getLength());
+	
+				for (int jj = 0; jj < original_tokens.getLength(); jj++) {
+					String word = (String) original_tokens.getObjectAtPosition(jj);
+					int token = this.vocab.indexOf(word);
+					int removed = this.removedWordsNew.indexOf(word);
+					int removednew = this.removedWordsNew.indexOf(word);
+					if(token != -1 && removed == -1 && removednew == -1) {
+						int topic = random.nextInt(numTopics);
+						if(debug) { topic = count % numTopics; }
+						tokens.add(token);
+						topics.add(topic);
+						topicCounts.adjustOrPutValue(topic, 1, 1);
+						// sample a path for this topic
+						int path_index = this.topics.initialize(token, topic);
+						paths.add(path_index);
+					}
+				}
+				DocData doc = new DocData(name, tokens, topics, paths, topicCounts);
+				this.data.add(doc);
+				
+				totalcount += tokens.size();
+				//if (totalcount > 200000) {
+				//	System.out.println("total number of tokens: " + totalcount + " docs: " + count);
+				//	break;
+				//}
+			}
+			System.out.println("total number of tokens: " + totalcount);
+			//System.out.println(doc);
+		}
+	}
+	
+	/**
+	 * Resume instance states from the saved states file. 
+	 */
+	public void resumeStates(InstanceList[] training, String statesFile) throws IOException{
+		FileInputStream statesfstream = new FileInputStream(statesFile);
+		DataInputStream statesdstream = new DataInputStream(statesfstream);
+		BufferedReader states = new BufferedReader(new InputStreamReader(statesdstream));
+		
+		// reading topics, paths
+		for(int ll = 0; ll < training.length; ll++) {
+			for (Instance instance : training[ll]) {
+				FeatureSequence original_tokens = (FeatureSequence) instance.getData();
+				String name = instance.getName().toString();
+	
+				// *** remained problem: keep topicCounts sorted
+				TIntArrayList tokens = new TIntArrayList(original_tokens.getLength());
+				TIntIntHashMap topicCounts = new TIntIntHashMap ();			
+				TIntArrayList topics = new TIntArrayList(original_tokens.getLength());
+				TIntArrayList paths = new TIntArrayList(original_tokens.getLength());
+				
+				//
+				String statesLine = states.readLine();
+				myAssert(statesLine != null, "statesFile doesn't match with the training data");
+				statesLine = statesLine.trim();
+				String[] str = statesLine.split("\t");
+	
+				int count = -1;
+				for (int jj = 0; jj < original_tokens.getLength(); jj++) {
+					String word = (String) original_tokens.getObjectAtPosition(jj);
+					int token = this.vocab.indexOf(word);
+					int removed = this.removedWords.indexOf(word);
+					int removednew = this.removedWordsNew.indexOf(word);
+					if(token != -1 && removed == -1) {
+						count++;
+						if (removednew == -1) {
+							String[] tp = str[count].split(":");
+							myAssert(tp.length == 2, "statesFile problem!");
+							int topic = Integer.parseInt(tp[0]);
+							//int path = Integer.parseInt(tp[1]);
+							
+							int wordpath = Integer.parseInt(tp[1]);
+							int path = -1;
+							int backoffpath = -1;
+							// find the path for this wordpath
+							TIntObjectHashMap<TIntArrayList> allpaths = this.topics.wordPaths.get(token);
+							for(int pp : allpaths.keys()) {
+								if(backoffpath == -1 && this.topics.pathToWordPath.get(pp) == 0){
+									backoffpath = pp;
+								}							
+								if(this.topics.pathToWordPath.get(pp) == wordpath){
+									path = pp;
+									break;
+								}
+							}
+							
+							if(path == -1) {
+								// this path must be in a correlation, it will be cleared later
+								path = backoffpath;				
+								myAssert(path != -1, "path problem");
+								
+								//String tmp = "";
+								//tmp += "file " + name + "\n";
+								//tmp += "word " + word + "\n";
+								//tmp += "token " + token + "\n";
+								//tmp += "index " + count + "\n";
+								//tmp += "topic " + topic + "\n";
+								//tmp += "wordpath " + wordpath + "\n";
+								//tmp += "allpaths";
+								//for(int pp : allpaths.keys()) {
+								//	tmp += " " + pp;
+								//}
+								//System.out.println(tmp);
+							}
+							
+							tokens.add(token);
+							topics.add(topic);
+							paths.add(path);
+							topicCounts.adjustOrPutValue(topic, 1, 1);
+							this.topics.changeCountOnly(topic, token, path, 1);
+						}
+					}
+				}
+				if(count != -1) {
+					count++;
+					myAssert(str.length == count, "resume problem!");
+				}
+				
+				DocData doc = new DocData(name, tokens, topics, paths, topicCounts);
+				this.data.add(doc);
+			}
+		}
+		states.close();
+	}
+	
+	/**
+	 * This function clears the topic and path assignments for some words:
+	 * (1) term option: only clears the topic and path for constraint words;
+	 * (2) doc option: clears the topic and path for documents which contain 
+	 *     at least one of the constraint words.
+	 */
+	public void clearTopicAssignments(String option, String consFile, String keepFile) {
+		if (consFile != null) {
+			this.loadConstraints(consFile);
+		}
+		if (this.cons == null || this.cons.size() <= 0) {
+			return;
+		}
+		
+		if (keepFile != null) {
+			this.loadKeepList(keepFile);
+		} else {
+			this.topickeep = new HashMap<Integer, TIntHashSet>();
+		}
+		
+		for(int dd = 0; dd < this.data.size(); dd++) {
+			DocData doc = this.data.get(dd);
+			
+			for(int ii = 0; ii < doc.tokens.size(); ii++) {
+				int word = doc.tokens.get(ii);
+				int topic = doc.topics.get(ii);
+				int path = doc.paths.get(ii);
+
+				boolean keepTopicFlag = false;
+				if(this.topickeep.containsKey(word)) {
+					TIntHashSet keeptopics = this.topickeep.get(word);
+					if(keeptopics.contains(topic)) {
+						keepTopicFlag = true;
+					}
+				}
+				
+				if (option.equals("term")) {
+					if(this.cons.contains(word) && (!keepTopicFlag)) {
+						// change the count for count and node_count in TopicTreeWalk
+						this.topics.changeCountOnly(topic, word, path, -1);
+						doc.topics.set(ii, -1);
+						doc.paths.set(ii, -1);
+						//myAssert(doc.topicCounts.get(topic) >= 1, "clear topic assignments problem");
+						doc.topicCounts.adjustValue(topic, -1);
+					}
+				} else { // option.equals("doc")
+					if(!keepTopicFlag) {
+						this.topics.changeCountOnly(topic, word, path, -1);
+						doc.topics.set(ii, -1);
+						doc.paths.set(ii, -1);
+						doc.topicCounts.adjustValue(topic, -1);
+					}
+				}
+			}
+		}
+			
+//		for(int dd = 0; dd < this.data.size(); dd++) {
+//			DocData doc = this.data.get(dd);			
+//			Boolean flag = false;
+//			for(int ii = 0; ii < doc.tokens.size(); ii++) {
+//				int word = doc.tokens.get(ii);
+//				int topic = doc.topics.get(ii);
+//
+//				boolean keepTopicFlag = false;
+//				if(this.topickeep.containsKey(word)) {
+//					TIntHashSet keeptopics = this.topickeep.get(word);
+//					if(keeptopics.contains(topic)) {
+//						keepTopicFlag = true;
+//					}
+//				}
+//				
+//				if(this.cons.contains(word) && (!keepTopicFlag)) {
+//					if (option.equals("term")) {
+//						int path = doc.paths.get(ii);
+//						// change the count for count and node_count in TopicTreeWalk
+//						this.topics.changeCountOnly(topic, word, path, -1);
+//						doc.topics.set(ii, -1);
+//						doc.paths.set(ii, -1);
+//						myAssert(doc.topicCounts.get(topic) >= 1, "clear topic assignments problem");
+//						doc.topicCounts.adjustValue(topic, -1);
+//					} else if (option.equals("doc")) {
+//						flag = true;
+//						break;
+//					}
+//				}
+//			}
+//			if (flag) {
+//				for(int ii = 0; ii < doc.tokens.size(); ii++) {
+//					int word = doc.tokens.get(ii);
+//					int topic = doc.topics.get(ii);
+//					int path = doc.paths.get(ii);
+//					this.topics.changeCountOnly(topic, word, path, -1);
+//					doc.topics.set(ii, -1);
+//					doc.paths.set(ii, -1);
+//				}
+//				doc.topicCounts.clear();
+//			}	
+//		}
+		
+	}
+	
+	/**
+	 * This function defines how to change a topic during the sampling process.
+	 * It handles the case where both new_topic and old_topic are "-1" (empty topic).
+	 */
+	public void changeTopic(int doc, int index, int word, int new_topic, int new_path) {
+		DocData current_doc = this.data.get(doc);
+		int old_topic = current_doc.topics.get(index);
+		int old_path = current_doc.paths.get(index);		
+		
+		if (old_topic != -1) {
+			myAssert((new_topic == -1 && new_path == -1), "old_topic != -1 but new_topic != -1");
+			this.topics.changeCount(old_topic, word, old_path, -1);
+			//myAssert(current_doc.topicCounts.get(old_topic) > 0, "Something wrong in changTopic");
+			current_doc.topicCounts.adjustValue(old_topic, -1);
+			current_doc.topics.set(index, -1);
+			current_doc.paths.set(index, -1);
+		}
+		
+		if (new_topic != -1) {
+			myAssert((old_topic == -1 && old_path == -1), "new_topic != -1 but old_topic != -1");
+			this.topics.changeCount(new_topic, word, new_path, 1);
+			current_doc.topicCounts.adjustOrPutValue(new_topic, 1, 1);
+			current_doc.topics.set(index, new_topic);
+			current_doc.paths.set(index, new_path);
+		}
+	}
+		
+	/**
+	 * The function computes the document likelihood.
+	 */
+	public double docLHood() {
+		int docNum = this.data.size();
+		
+		double val = 0.0;
+		val += Dirichlet.logGamma(this.alphaSum) * docNum;
+		double tmp = 0.0;
+		for (int tt = 0; tt < this.numTopics; tt++) {
+			tmp += Dirichlet.logGamma(this.alpha[tt]);
+		}
+		val -= tmp * docNum;
+		for (int dd = 0; dd < docNum; dd++) {
+			DocData doc = this.data.get(dd);
+			for (int tt = 0; tt < this.numTopics; tt++) {
+				val += Dirichlet.logGamma(this.alpha[tt] + doc.topicCounts.get(tt));
+			}
+			val -= Dirichlet.logGamma(this.alphaSum + doc.topics.size());
+		}
+		return val;
+	}
+	
+	/**
+	 * Print the topic proportion for all documents.
+	 */
+	public void printDocumentTopics (File file) throws IOException {
+		PrintStream out = new PrintStream (file);
+		out.print ("#doc source topic proportion ...\n");
+
+        IDSorter[] sortedTopics = new IDSorter[ this.numTopics ];
+		for (int topic = 0; topic < this.numTopics; topic++) {
+            // Initialize the sorters with dummy values
+			sortedTopics[topic] = new IDSorter(topic, topic);
+        }
+		
+		for (int dd = 0; dd < this.data.size(); dd++) {
+			DocData doc = this.data.get(dd);
+			
+			// compute topic proportion in one document
+			double sum = 0.0;
+			double[] prob = new double[this.numTopics];
+			for (int topic=0; topic < this.numTopics; topic++) {
+				if (doc.topicCounts.containsKey(topic)) {
+					prob[topic] = this.alpha[topic] + doc.topicCounts.get(topic);
+				} else {
+					prob[topic] = this.alpha[topic];
+				}
+				sum += prob[topic];
+			}
+
+			// normalize and sort
+			for (int topic=0; topic < this.numTopics; topic++) {
+	            prob[topic] /= sum;
+	            sortedTopics[topic].set(topic, prob[topic]);
+			}
+			Arrays.sort(sortedTopics);
+			
+			// print one document
+			out.print (dd); out.print (" ");
+
+            if (doc.docName != null || !doc.docName.equals(" ")) {
+				out.print (doc.docName);
+            } else {
+                out.print ("null-source");
+            }
+            out.print (" ");
+			for (int i = 0; i < numTopics; i++) {
+                out.print (sortedTopics[i].getID() + " " +
+						   sortedTopics[i].getWeight() + " ");
+            }
+            out.print (" \n");
+		}
+		out.close();
+	}
+	
+	//////////////////////////////////////////////////////
+	
+	/**
+	 * This function loads vocab, loads tree, and initialize parameters.
+	 */
+	public void initialize(String treeFiles, String hyperFile, String vocabFile, String removedwordsFile) {
+		this.loadVocab(vocabFile);
+		if (removedwordsFile != null) {
+			this.loadRemovedWords(removedwordsFile + ".all", this.removedWords);
+			this.loadRemovedWords(removedwordsFile + ".new", this.removedWordsNew);
+		}
+		this.topics.initializeParams(treeFiles, hyperFile, this.vocab);
+	}
+	
+	/**
+	 * This function defines the sampling process, computes the likelihood and running time,
+	 * and specifies when to save the states files.
+	 */
+	public void estimate(int numIterations, String outputFolder, int outputInterval, int topWords) {
+		// update parameters
+		this.topics.updateParams();
+		
+		if (this.startIter > this.numIterations) {
+			System.out.println("Have already sampled " + this.numIterations + " iterations!");
+			System.exit(0);
+		}
+		System.out.println("Start sampling for iteration " + this.startIter);
+		
+		for (int ii = this.startIter; ii <= numIterations; ii++) {
+			//int[] tmpstats = {0, 0, 0, 0};
+			//this.stats.add(tmpstats);
+			long starttime = System.currentTimeMillis();
+			//System.out.println("Iter " + ii);
+			for (int dd = 0; dd < this.data.size(); dd++) {
+				this.sampleDoc(dd);
+				if (dd > 0 && dd % 10000 == 0) {
+					System.out.println("Sampled " + dd + " documents.");
+				}
+			}
+			
+			double totaltime = (double)(System.currentTimeMillis() - starttime) / 1000;
+			double lhood = 0;
+			if ((ii > 0 && ii % outputInterval == 0) || ii == numIterations) {
+				lhood = this.lhood();
+			}
+			this.lhood.add(lhood);
+			this.iterTime.add(totaltime);
+			
+			if (ii % 10 == 0) {
+				String tmp = "Iteration " + ii;
+				tmp += " likelihood " + lhood;
+				tmp += " totaltime " + totaltime;
+				System.out.println(tmp);
+			}
+			
+			if ((ii > 0 && ii % outputInterval == 0) || ii == numIterations) {
+				try {
+					this.report(outputFolder, topWords);
+				} catch (IOException e) {
+					System.out.println(e.getMessage());
+				}
+			}
+		}
+	}
+	
+	//////////////////////////////////////////////////////
+	
+	/**
+	 * This function returns the likelihood.
+	 */
+	public double lhood() {
+		return this.docLHood() + this.topics.topicLHood();
+	}
+	
+	/**
+	 * By implementing the comparable interface, this function ranks the words
+	 * in each topic, and returns the top words for each topic.
+	 */
+	public String displayTopWords (int numWords) {
+		
+
+
+		StringBuilder out = new StringBuilder();
+		int numPaths = this.topics.getPathNum();
+		//System.out.println(numPaths);
+		
+		for (int tt = 0; tt < this.numTopics; tt++){
+			String tmp = "\n--------------\nTopic " + tt + "\n------------------------\n";
+			//System.out.print(tmp);
+			out.append(tmp);
+			WordProb[] wp = new WordProb[numPaths];
+			for (int pp = 0; pp < numPaths; pp++){
+				int ww = this.topics.getWordFromPath(pp);
+				double val = this.topics.computeTopicPathProb(tt, ww, pp);
+				wp[pp] = new WordProb(pp, val);
+			}
+			Arrays.sort(wp);
+			for (int ii = 0; ii < wp.length; ii++){
+				if(ii >= numWords) {
+					break;
+				}				
+				int pp = wp[ii].wi;
+				int ww = this.topics.getWordFromPath(pp);
+				String word = this.vocab.get(ww);
+				if (this.removedWords.indexOf(word) == -1 && this.removedWordsNew.indexOf(word) == -1) {
+					tmp = wp[ii].p + "\t" + word + "\n";
+					out.append(tmp);
+				}
+			}	
+		}	
+		return out.toString();
+	}
+	
+	/**
+	 * Prints the topic word distributions.
+	 */
+	public void printTopicWords (File file) throws IOException {
+				
+		PrintStream out = new PrintStream (file);
+		int numPaths = this.topics.getPathNum();
+		String tmp;
+		for (int tt = 0; tt < this.numTopics; tt++){
+			WordProb[] wp = new WordProb[numPaths];
+			for (int pp = 0; pp < numPaths; pp++){
+				int ww = this.topics.getWordFromPath(pp);
+				double val = this.topics.computeTopicPathProb(tt, ww, pp);
+				wp[pp] = new WordProb(pp, val);
+			}
+			Arrays.sort(wp);
+			for (int ii = 0; ii < wp.length; ii++){			
+				int pp = wp[ii].wi;
+				int ww = this.topics.getWordFromPath(pp);
+				String word = this.vocab.get(ww);
+				if (this.removedWords.indexOf(word) == -1 && this.removedWordsNew.indexOf(word) == -1) {
+					tmp = tt + "\t" + word + "\t" + wp[ii].p;
+					out.println(tmp);
+				}
+			}	
+		}
+		
+		out.close();
+	}	
+	
+	/**
+	 * Prints the topic and path of each word for all documents.
+	 */
+	public void printState (File file) throws IOException {
+		//PrintStream out =
+		//	new PrintStream(new GZIPOutputStream(new BufferedOutputStream(new FileOutputStream(file))));
+		PrintStream out = new PrintStream(file);
+		
+		for (int dd = 0; dd < this.data.size(); dd++) {
+			DocData doc = this.data.get(dd);
+			String tmp = "";
+			for (int ww = 0; ww < doc.topics.size(); ww++) {
+				int topic = doc.topics.get(ww);
+				int path = doc.paths.get(ww);
+				int wordpath = this.topics.pathToWordPath.get(path);
+				tmp += topic + ":" + wordpath + "\t";
+			}
+			out.println(tmp);
+		}
+		out.close();
+	}
+	
+	public TreeTopicInferencer getInferencer() {
+		//this.topics.updateParams();
+		HashSet<String> removedall = new HashSet<String> ();
+		removedall.addAll(this.removedWords);
+		removedall.addAll(this.removedWordsNew);
+		TreeTopicInferencer inferencer = new TreeTopicInferencer(topics, vocab, removedall, alpha);
+		return inferencer;
+	}
+	
+	 public TreeMarginalProbEstimator getProbEstimator() {
+		HashSet<String> removedall = new HashSet<String> ();
+		removedall.addAll(this.removedWords);
+		removedall.addAll(this.removedWordsNew);
+		TreeMarginalProbEstimator estimator = new TreeMarginalProbEstimator(topics, vocab, removedall, alpha);
+		return estimator;
+	}
+}
diff --git a/src/cc/mallet/topics/tree/TreeTopicSamplerInterface.java b/src/cc/mallet/topics/tree/TreeTopicSamplerInterface.java
new file mode 100755
index 000000000..2ed1373ec
--- /dev/null
+++ b/src/cc/mallet/topics/tree/TreeTopicSamplerInterface.java
@@ -0,0 +1,80 @@
+package cc.mallet.topics.tree;
+
+import gnu.trove.TDoubleArrayList;
+import gnu.trove.TIntArrayList;
+import gnu.trove.TIntHashSet;
+import gnu.trove.TIntIntHashMap;
+import gnu.trove.TIntIntIterator;
+
+import java.io.BufferedOutputStream;
+import java.io.BufferedReader;
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintStream;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.zip.GZIPOutputStream;
+
+import cc.mallet.types.Dirichlet;
+import cc.mallet.types.FeatureSequence;
+import cc.mallet.types.Instance;
+import cc.mallet.types.InstanceList;
+import cc.mallet.util.Randoms;
+
+/**
+ * This class defines the interface of a tree topic sampler.
+ * 
+ * @author Yuening Hu
+ */
+
+public interface TreeTopicSamplerInterface {
+	
+	/* Implemented in TreeTopicSampler.java.
+	   Shared code by TreeTopicSamplerSortD.java and TreeTopicSamplerHashD.java
+	 */
+	public void setNumIterations(int iters);
+	public void resume(InstanceList[] training, String resumeDir);
+	
+	// Also implemented in TreeTopicSampler.java, but do not need to be defined in interface.
+	//public int getNumIterations();
+	//public void resumeLHood(String lhoodFile) throws IOException;
+	//public void report(String outputDir, int topWords) throws IOException;
+	//public void printTopWords(File file, int numWords) throws IOException;
+	//public void printStats (File file) throws IOException;
+	//public void loadVocab(String vocabFile);
+	//public void loadStopWords(String stopwordFile);
+	//public void loadConstraints(String consFile);
+	//abstract public void sampleDoc(int doc);
+	
+	
+	/* Same code for TreeTopicSamplerSortD.java and TreeTopicSamplerHashD.java
+	   But related with this.topics, so not the the shared parent class.
+	 */
+	public void initialize(String treeFiles, String hyperFile, String vocabFile, String removedwordsFile);
+	public void estimate(int numIterations, String outputFolder, int outputInterval, int topWords);
+	public TreeTopicInferencer getInferencer();
+	public TreeMarginalProbEstimator getProbEstimator();
+	// do not need to be defined in interface.
+	//public double lhood();
+	//public String displayTopWords (int numWords);
+	//public void printState (File file) throws IOException;
+	
+	
+	
+	/* Different code for TreeTopicSamplerSortD.java and TreeTopicSamplerHashD.java
+	   Stay in these two java files separately.
+	 */	
+	public void addInstances(InstanceList[] training);
+	public void clearTopicAssignments(String option, String consFile, String keepFile);
+	// Do not need to be defined in interface.
+	//public void resumeStates(InstanceList training, String statesFile) throws IOException;
+	//public void changeTopic(int doc, int index, int word, int new_topic, int new_path);
+	//public double docLHood();
+	//public void printDocumentTopics (File file) throws IOException;
+	
+}
\ No newline at end of file
diff --git a/src/cc/mallet/topics/tree/TreeTopicSamplerNaive.java b/src/cc/mallet/topics/tree/TreeTopicSamplerNaive.java
new file mode 100755
index 000000000..e9fff4e1a
--- /dev/null
+++ b/src/cc/mallet/topics/tree/TreeTopicSamplerNaive.java
@@ -0,0 +1,98 @@
+package cc.mallet.topics.tree;
+
+import gnu.trove.TDoubleArrayList;
+import gnu.trove.TIntArrayList;
+import gnu.trove.TIntDoubleHashMap;
+import gnu.trove.TIntDoubleIterator;
+import gnu.trove.TIntHashSet;
+import gnu.trove.TIntIntHashMap;
+import gnu.trove.TIntIntIterator;
+import gnu.trove.TIntObjectHashMap;
+import gnu.trove.TIntObjectIterator;
+import gnu.trove.TObjectIntHashMap;
+
+import java.io.BufferedOutputStream;
+import java.io.BufferedReader;
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintStream;
+import java.io.PrintWriter;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.zip.GZIPOutputStream;
+
+import cc.mallet.types.Alphabet;
+import cc.mallet.types.Dirichlet;
+import cc.mallet.types.FeatureSequence;
+import cc.mallet.types.Instance;
+import cc.mallet.types.InstanceList;
+import cc.mallet.types.LabelAlphabet;
+import cc.mallet.util.Randoms;
+
+/**
+ * This class defines a naive tree topic sampler.
+ * It calls the naive tree topic model.
+ * 
+ * @author Yuening Hu
+ */
+
+public class TreeTopicSamplerNaive extends TreeTopicSamplerHashD {
+		
+	public TreeTopicSamplerNaive (int numberOfTopics, double alphaSum) {
+		this (numberOfTopics, alphaSum, 0);
+	}
+		
+	public TreeTopicSamplerNaive (int numberOfTopics, double alphaSum, int seed) {
+		super (numberOfTopics, alphaSum, seed);
+		this.topics = new TreeTopicModelNaive(this.numTopics, this.random);
+	}
+
+	/**
+	 * For each word in a document, firstly covers its topic and path, then sample a
+	 * topic and path, and update.
+	 */
+	public void sampleDoc(int doc_id){
+		DocData doc = this.data.get(doc_id);
+		//System.out.println("doc " + doc_id);
+		
+		for(int ii = 0; ii < doc.tokens.size(); ii++) {	
+			//int word = doc.tokens.getIndexAtPosition(ii);
+			int word = doc.tokens.get(ii);
+			
+			this.changeTopic(doc_id, ii, word, -1, -1);
+			ArrayList<double[]> topic_term_score = new ArrayList<double[]>();
+			double norm = this.topics.computeTopicTerm(this.alpha, doc.topicCounts, word, topic_term_score);
+			//System.out.println(norm);
+			
+			int new_topic = -1;
+			int new_path = -1;
+			
+			double sample = this.random.nextDouble();
+			//double sample = 0.8;
+			sample *= norm;
+			
+			for(int jj = 0; jj < topic_term_score.size(); jj++) {
+				double[] tmp = topic_term_score.get(jj);
+				int tt = (int) tmp[0];
+				int pp = (int) tmp[1];
+				double val = tmp[2];
+				sample -= val;
+				if (sample <= 0.0) {
+					new_topic = tt;
+					new_path = pp;
+					break;
+				}
+			}
+			
+			myAssert((new_topic >= 0 && new_topic < numTopics), "something wrong in sampling!");
+			
+			this.changeTopic(doc_id, ii, word, new_topic, new_path);
+		}
+	}
+	
+}
diff --git a/src/cc/mallet/topics/tree/TreeTopicSamplerSortD.java b/src/cc/mallet/topics/tree/TreeTopicSamplerSortD.java
new file mode 100755
index 000000000..bdedd506b
--- /dev/null
+++ b/src/cc/mallet/topics/tree/TreeTopicSamplerSortD.java
@@ -0,0 +1,684 @@
+package cc.mallet.topics.tree;
+
+import gnu.trove.TDoubleArrayList;
+import gnu.trove.TIntArrayList;
+import gnu.trove.TIntHashSet;
+import gnu.trove.TIntIntHashMap;
+import gnu.trove.TIntIntIterator;
+import gnu.trove.TIntObjectHashMap;
+
+import java.io.BufferedReader;
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintStream;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+
+import cc.mallet.topics.tree.TreeTopicSamplerHashD.DocData;
+import cc.mallet.types.Dirichlet;
+import cc.mallet.types.FeatureSequence;
+import cc.mallet.types.IDSorter;
+import cc.mallet.types.Instance;
+import cc.mallet.types.InstanceList;
+import cc.mallet.util.Randoms;
+
+/**
+ * This class defines the tree topic sampler, which loads the instances,  
+ * reports the topics, and leaves the sampler method as an abstract method, 
+ * which might be various for different methods.
+ * Rathan than a HashMap for topicCounts in TreeTopicSamplerHashD,
+ * this class uses a sorted ArrayList<int[]> for topicCounts.
+ * 
+ * @author Yuening Hu
+ */
+
+public abstract class TreeTopicSamplerSortD extends TreeTopicSampler implements TreeTopicSamplerInterface {
+	
+	/**
+	 * This class defines the format of a document.
+	 */
+	public class DocData {
+		TIntArrayList tokens;
+		TIntArrayList topics;
+		TIntArrayList paths;
+		// sort
+		ArrayList<int[]> topicCounts;
+		String docName;
+		
+		public DocData (String name, TIntArrayList tokens, TIntArrayList topics,
+				TIntArrayList paths, ArrayList<int[]> topicCounts) {
+			this.docName = name;
+			this.tokens = tokens;
+			this.topics = topics;
+			this.paths = paths;
+			this.topicCounts = topicCounts;
+		}
+		
+		public String toString() {
+			String result = "***************\n";
+			result += docName + "\n";
+			
+			result += "tokens:   ";
+			for (int jj = 0; jj < tokens.size(); jj++) {
+				int index = tokens.get(jj);
+				String word = vocab.get(index);
+				result += word + " " + index + ", ";
+			}
+			
+			result += "\ntopics:   ";
+			result += topics.toString();
+			
+			result += "\npaths:    ";
+			result += paths.toString();
+			
+			result += "\ntopicCounts:   ";
+			
+			for(int ii = 0; ii < this.topicCounts.size(); ii++) {
+				int[] tmp = this.topicCounts.get(ii);
+				result += "Topic " + tmp[0] + ": " + tmp[1] + ", ";
+			}
+
+			result += "\n*****************\n";
+			return result;
+		}
+	}
+	
+	public class WordProb implements Comparable {
+		int wi;
+		double p;
+		public WordProb (int wi, double p) { this.wi = wi; this.p = p; }
+		public final int compareTo (Object o2) {
+			if (p > ((WordProb)o2).p)
+				return -1;
+			else if (p == ((WordProb)o2).p)
+				return 0;
+			else return 1;
+		}
+	}	
+	
+	TreeTopicModel topics;
+	ArrayList<DocData> data;
+	
+	public TreeTopicSamplerSortD (int numberOfTopics, double alphaSum, int seed) {
+		super(numberOfTopics, alphaSum, seed);
+		this.data = new ArrayList<DocData> ();
+		
+		// notice: this.topics is not initialized in this abstract class,
+		// in each sub class, the topics variable is initialized differently.
+	}
+	
+	/**
+	 * This function adds instances given the training data in mallet input data format.
+	 * For each token in a document, sample a topic and then sample a path based on prior. 
+	 */
+	public void addInstances(InstanceList[] training) {
+		boolean debug = false;
+		int count = 0;
+		for(int ll = 0; ll < training.length; ll++) {
+			for (Instance instance : training[ll]) {
+				count++;
+				FeatureSequence original_tokens = (FeatureSequence) instance.getData();
+				String name = instance.getName().toString();
+				//String name = "null-source";
+				//if (instance.getSource() != null) {
+				//	name = instance.getSource().toString();
+				//}
+	
+				// *** remained problem: keep topicCounts sorted
+				TIntArrayList tokens = new TIntArrayList(original_tokens.getLength());
+				ArrayList<int[]> topicCounts = new ArrayList<int[]> ();	
+				TIntArrayList topics = new TIntArrayList(original_tokens.getLength());
+				TIntArrayList paths = new TIntArrayList(original_tokens.getLength());
+	
+				for (int jj = 0; jj < original_tokens.getLength(); jj++) {
+					String word = (String) original_tokens.getObjectAtPosition(jj);
+					int token = this.vocab.indexOf(word);
+					int removed = this.removedWordsNew.indexOf(word);
+					int removednew = this.removedWordsNew.indexOf(word);
+					if(token != -1 && removed == -1 && removednew == -1) {
+						int topic = random.nextInt(numTopics);
+						if(debug) { topic = count % numTopics; }
+						tokens.add(token);
+						topics.add(topic);
+						//topicCounts.adjustOrPutValue(topic, 1, 1);
+						this.updateTopicCounts(topicCounts, topic, 1, 1);
+						// sample a path for this topic
+						int path_index = this.topics.initialize(token, topic);
+						paths.add(path_index);
+					}
+				}
+				
+				DocData doc = new DocData(name, tokens, topics, paths, topicCounts);
+				this.data.add(doc);
+			}
+			
+			//System.out.println(doc);
+		}
+		
+	}
+	
+	/**
+	 * This function keeps the topicCounts in order by bubble sort.
+	 */
+	private void updateTopicCounts(ArrayList<int[]> topicCounts, int topic, int adjustvalue, int putvalue) {
+		
+		// remove old value
+		int value = -1;
+		for(int ii = 0; ii < topicCounts.size(); ii++) {
+			int[] tmp = topicCounts.get(ii);
+			if(tmp[0] == topic) {
+				value = tmp[1];
+				topicCounts.remove(ii);
+				break;
+			}
+		}
+		
+		// adjust the value and update or insert
+		if (value == -1) {
+			value = putvalue;
+		} else {
+			value += adjustvalue;
+		}
+		
+		if (value > 0) {
+			int index = topicCounts.size();
+			for(int ii = 0; ii < topicCounts.size(); ii++) {
+				int[] tmp = topicCounts.get(ii);
+				if(value >= tmp[1]) {
+					index = ii;
+					break;
+				}
+			}
+			int[] newpair = {topic, value};
+			topicCounts.add(index, newpair);
+		}
+		
+	}
+		
+	/**
+	 * Resume instance states from the saved states file. 
+	 */
+	public void resumeStates(InstanceList[] training, String statesFile) throws IOException{
+		FileInputStream statesfstream = new FileInputStream(statesFile);
+		DataInputStream statesdstream = new DataInputStream(statesfstream);
+		BufferedReader states = new BufferedReader(new InputStreamReader(statesdstream));
+			
+		// reading topics, paths
+		for(int ll = 0; ll < training.length; ll++) {
+			for (Instance instance : training[ll]) {
+				FeatureSequence original_tokens = (FeatureSequence) instance.getData();
+				String name = instance.getName().toString();
+	
+				// *** remained problem: keep topicCounts sorted
+				TIntArrayList tokens = new TIntArrayList(original_tokens.getLength());
+				ArrayList<int[]> topicCounts = new ArrayList<int[]> ();			
+				TIntArrayList topics = new TIntArrayList(original_tokens.getLength());
+				TIntArrayList paths = new TIntArrayList(original_tokens.getLength());
+				
+				//
+				String statesLine = states.readLine();
+				myAssert(statesLine != null, "statesFile doesn't match with the training data");
+				statesLine = statesLine.trim();
+				String[] str = statesLine.split("\t");
+	
+				int count = -1;
+				for (int jj = 0; jj < original_tokens.getLength(); jj++) {
+					String word = (String) original_tokens.getObjectAtPosition(jj);
+					int token = this.vocab.indexOf(word);
+					int removed = this.removedWords.indexOf(word);
+					int removednew = this.removedWordsNew.indexOf(word);
+					if(token != -1 && removed == -1) {
+						count++;
+						if (removednew == -1) {
+							String[] tp = str[count].split(":");
+							myAssert(tp.length == 2, "statesFile problem!");
+							int topic = Integer.parseInt(tp[0]);
+							int wordpath = Integer.parseInt(tp[1]);
+							int path = -1;
+							int backoffpath = -1;
+							// find the path for this wordpath
+							TIntObjectHashMap<TIntArrayList> allpaths = this.topics.wordPaths.get(token);
+							for(int pp : allpaths.keys()) {
+								if(backoffpath == -1 && this.topics.pathToWordPath.get(pp) == 0){
+									backoffpath = pp;
+								}							
+								if(this.topics.pathToWordPath.get(pp) == wordpath){
+									path = pp;
+									break;
+								}
+							}
+							
+							if(path == -1) {
+								// this path must be in a correlation, it will be cleared later
+								path = backoffpath;				
+								myAssert(path != -1, "path problem");
+							}
+							tokens.add(token);
+							topics.add(topic);
+							paths.add(path);
+							//topicCounts.adjustOrPutValue(topic, 1, 1);
+							this.updateTopicCounts(topicCounts, topic, 1, 1);
+							this.topics.changeCountOnly(topic, token, path, 1);
+						}
+					}
+				}
+				if(count != -1) {
+					count++;
+					myAssert(str.length == count, "resume problem!");
+				}
+				
+				DocData doc = new DocData(name, tokens, topics, paths, topicCounts);
+				this.data.add(doc);
+			}
+		}
+		states.close();
+	}
+	
+	/**
+	 * This function clears the topic and path assignments for some words:
+	 * (1) term option: only clears the topic and path for constraint words;
+	 * (2) doc option: clears the topic and path for documents which contain 
+	 *     at least one of the constraint words.
+	 */
+	public void clearTopicAssignments(String option, String consFile, String keepFile) {
+		this.loadConstraints(consFile);
+		if (this.cons == null || this.cons.size() <= 0) {
+			return;
+		}
+		
+		if (keepFile != null) {
+			this.loadKeepList(keepFile);
+		} else {
+			this.topickeep = new HashMap<Integer, TIntHashSet>();
+		}
+		
+		for(int dd = 0; dd < this.data.size(); dd++) {
+			DocData doc = this.data.get(dd);
+			
+			for(int ii = 0; ii < doc.tokens.size(); ii++) {
+				int word = doc.tokens.get(ii);
+				int topic = doc.topics.get(ii);
+				int path = doc.paths.get(ii);
+
+				boolean keepTopicFlag = false;
+				if(this.topickeep.containsKey(word)) {
+					TIntHashSet keeptopics = this.topickeep.get(word);
+					if(keeptopics.contains(topic)) {
+						keepTopicFlag = true;
+					}
+				}
+				
+				if (option.equals("term")) {
+					if(this.cons.contains(word) && (!keepTopicFlag)) {
+						// change the count for count and node_count in TopicTreeWalk
+						this.topics.changeCountOnly(topic, word, path, -1);
+						doc.topics.set(ii, -1);
+						doc.paths.set(ii, -1);
+						this.updateTopicCounts(doc.topicCounts, topic, -1, 0);
+					}
+				} else { // option.equals("doc")
+					if(!keepTopicFlag) {
+						this.topics.changeCountOnly(topic, word, path, -1);
+						doc.topics.set(ii, -1);
+						doc.paths.set(ii, -1);
+						this.updateTopicCounts(doc.topicCounts, topic, -1, 0);
+					}
+				}
+			}
+		}
+		
+//		for(int dd = 0; dd < this.data.size(); dd++) {
+//			DocData doc = this.data.get(dd);
+//			Boolean flag = false;
+//			for(int ii = 0; ii < doc.tokens.size(); ii++) {
+//				int word = doc.tokens.get(ii);
+//				int topic = doc.topics.get(ii);
+//
+//				boolean keepTopicFlag = false;
+//				if(this.topickeep.containsKey(word)) {
+//					TIntHashSet keeptopics = this.topickeep.get(word);
+//					if(keeptopics.contains(topic)) {
+//						keepTopicFlag = true;
+//					}
+//				}
+//				
+//				if(this.cons.contains(word) && (!keepTopicFlag)) {
+//					if (option.equals("term")) {
+//						// change the count for count and node_count in TopicTreeWalk
+//						int path = doc.paths.get(ii);
+//						this.topics.changeCountOnly(topic, word, path, -1);
+//						doc.topics.set(ii, -1);
+//						doc.paths.set(ii, -1);
+//						//myAssert(doc.topicCounts.get(topic) >= 1, "clear topic assignments problem");
+//						//doc.topicCounts.adjustValue(topic, -1);
+//						this.updateTopicCounts(doc.topicCounts, topic, -1, 0);
+//					} else if (option.equals("doc")) {
+//						flag = true;
+//						break;
+//					}
+//				}
+//			}
+//			if (flag) {
+//				for(int ii = 0; ii < doc.tokens.size(); ii++) {
+//					int word = doc.tokens.get(ii);
+//					int topic = doc.topics.get(ii);
+//					int path = doc.paths.get(ii);
+//					this.topics.changeCountOnly(topic, word, path, -1);
+//					doc.topics.set(ii, -1);
+//					doc.paths.set(ii, -1);
+//				}
+//				doc.topicCounts.clear();
+//			}
+//		}
+	}
+	
+	/**
+	 * This function defines how to change a topic during the sampling process.
+	 * It handles the case where both new_topic and old_topic are "-1" (empty topic).
+	 */
+	public void changeTopic(int doc, int index, int word, int new_topic, int new_path) {
+		DocData current_doc = this.data.get(doc);
+		int old_topic = current_doc.topics.get(index);
+		int old_path = current_doc.paths.get(index);
+		
+		if (old_topic != -1) {
+			myAssert((new_topic == -1 && new_path == -1), "old_topic != -1 but new_topic != -1");
+			this.topics.changeCount(old_topic, word, old_path, -1);
+			//myAssert(current_doc.topicCounts.get(old_topic) > 0, "Something wrong in changTopic");
+			this.updateTopicCounts(current_doc.topicCounts, old_topic, -1, 0);
+			current_doc.topics.set(index, -1);
+			current_doc.paths.set(index, -1);
+		}
+		
+		if (new_topic != -1) {
+			myAssert((old_topic == -1 && old_path == -1), "new_topic != -1 but old_topic != -1");
+			this.topics.changeCount(new_topic, word, new_path, 1);
+			this.updateTopicCounts(current_doc.topicCounts, new_topic, 1, 1);
+			current_doc.topics.set(index, new_topic);
+			current_doc.paths.set(index, new_path);
+		}
+	}
+	
+	/**
+	 * The function computes the document likelihood.
+	 */
+	public double docLHood() {
+		int docNum = this.data.size();
+		
+		double val = 0.0;
+		val += Dirichlet.logGamma(this.alphaSum) * docNum;
+		double tmp = 0.0;
+		for (int tt = 0; tt < this.numTopics; tt++) {
+			tmp += Dirichlet.logGamma(this.alpha[tt]);
+		}
+		val -= tmp * docNum;
+		for (int dd = 0; dd < docNum; dd++) {
+			DocData doc = this.data.get(dd);
+		
+			int[] tmpTopics = new int[this.numTopics];
+			for(int ii = 0; ii < this.numTopics; ii++) {
+				tmpTopics[ii] = 0;
+			}
+			for(int ii = 0; ii < doc.topicCounts.size(); ii++) {
+				int[] current = doc.topicCounts.get(ii);
+				int tt = current[0];
+				tmpTopics[tt] = current[1];
+			}
+			for(int tt = 0; tt < tmpTopics.length; tt++) {
+				val += Dirichlet.logGamma(this.alpha[tt] + tmpTopics[tt]);
+			}
+			
+			val -= Dirichlet.logGamma(this.alphaSum + doc.topics.size());
+		}
+		return val;
+	}
+		
+	/**
+	 * Print the topic proportion for all documents.
+	 */
+	public void printDocumentTopics (File file) throws IOException {
+		PrintStream out = new PrintStream (file);
+		out.print ("#doc source topic proportion ...\n");
+
+        IDSorter[] sortedTopics = new IDSorter[ this.numTopics ];
+		for (int topic = 0; topic < this.numTopics; topic++) {
+            // Initialize the sorters with dummy values
+			sortedTopics[topic] = new IDSorter(topic, topic);
+        }
+		
+		for (int dd = 0; dd < this.data.size(); dd++) {
+			DocData doc = this.data.get(dd);
+			
+			// compute topic proportion in one document
+			double sum = 0.0;
+			double[] prob = new double[this.numTopics];
+			
+			// initialize
+			for (int topic=0; topic < this.numTopics; topic++) {
+				prob[topic] = -1;
+			}
+			
+			// topic counts
+			for (int ii = 0; ii < doc.topicCounts.size(); ii++) {
+				int[] current = doc.topicCounts.get(ii);
+				int topic = current[0];
+				prob[topic] = this.alpha[topic] + current[1];
+			}
+			
+			for (int topic=0; topic < this.numTopics; topic++) {
+				if (prob[topic] == -1) {
+					prob[topic] = this.alpha[topic];
+				}
+				sum += prob[topic];
+			}
+
+			// normalize and sort
+			for (int topic=0; topic < this.numTopics; topic++) {
+	            prob[topic] /= sum;
+	            sortedTopics[topic].set(topic, prob[topic]);
+			}
+			Arrays.sort(sortedTopics);
+			
+			// print one document
+			out.print (dd); out.print (" ");
+
+            if (doc.docName != null || !doc.docName.equals(" ")) {
+				out.print (doc.docName);
+            } else {
+                out.print ("null-source");
+            }
+            out.print (" ");
+			for (int i = 0; i < numTopics; i++) {
+                out.print (sortedTopics[i].getID() + " " +
+						   sortedTopics[i].getWeight() + " ");
+            }
+            out.print (" \n");
+		}
+		out.close();
+	}
+	
+	
+	
+	/////////////////////////////////////////////////////////////
+	/**
+	 * This function loads vocab, loads tree, and initialize parameters.
+	 */
+	public void initialize(String treeFiles, String hyperFile, String vocabFile, String removedwordsFile) {
+		this.loadVocab(vocabFile);
+		if (removedwordsFile != null) {
+			this.loadRemovedWords(removedwordsFile + ".all", this.removedWords);
+			this.loadRemovedWords(removedwordsFile + ".new", this.removedWordsNew);
+		}
+		this.topics.initializeParams(treeFiles, hyperFile, this.vocab);
+	}
+		
+	/**
+	 * This function defines the sampling process, computes the likelihood and running time,
+	 * and specifies when to save the states files.
+	 */
+	public void estimate(int numIterations, String outputFolder, int outputInterval, int topWords) {
+		// update parameters
+		this.topics.updateParams();
+		
+		if (this.startIter > this.numIterations) {
+			System.out.println("Have already sampled " + this.numIterations + " iterations!");
+			System.exit(0);
+		}
+		System.out.println("Start sampling for iteration " + this.startIter);
+		
+		for (int ii = this.startIter; ii <= numIterations; ii++) {
+			long starttime = System.currentTimeMillis();
+			//System.out.println("Iter " + ii);
+			for (int dd = 0; dd < this.data.size(); dd++) {
+				this.sampleDoc(dd);
+				if (dd > 0 && dd % 10000 == 0) {
+					System.out.println("Sampled " + dd + " documents.");
+				}
+			}
+			double totaltime = (double)(System.currentTimeMillis() - starttime) / 1000;
+			double lhood = 0;
+			if ((ii > 0 && ii % outputInterval == 0) || ii == numIterations) {
+				lhood = this.lhood();
+			}
+			this.lhood.add(lhood);
+			this.iterTime.add(totaltime);
+			
+			if (ii % 10 == 0) {
+				String tmp = "Iteration " + ii;
+				tmp += " likelihood " + lhood;
+				tmp += " totaltime " + totaltime;
+				System.out.println(tmp);
+			}
+			
+			if ((ii > 0 && ii % outputInterval == 0) || ii == numIterations) {
+				try {
+					this.report(outputFolder, topWords);
+				} catch (IOException e) {
+					System.out.println(e.getMessage());
+				}
+			}
+		}
+	}
+	
+	/////////////////////////////////////////////////////////////
+	
+	/**
+	 * This function returns the likelihood.
+	 */
+	public double lhood() {
+		return this.docLHood() + this.topics.topicLHood();
+	}
+		
+	/**
+	 * By implementing the comparable interface, this function ranks the words
+	 * in each topic, and returns the top words for each topic.
+	 */
+	public String displayTopWords (int numWords) {
+
+		StringBuilder out = new StringBuilder();
+		int numPaths = this.topics.getPathNum();
+		//System.out.println(numPaths);
+		
+		for (int tt = 0; tt < this.numTopics; tt++){
+			String tmp = "\n--------------\nTopic " + tt + "\n------------------------\n";
+			//System.out.print(tmp);
+			out.append(tmp);
+			WordProb[] wp = new WordProb[numPaths];
+			for (int pp = 0; pp < numPaths; pp++){
+				int ww = this.topics.getWordFromPath(pp);
+				double val = this.topics.computeTopicPathProb(tt, ww, pp);
+				wp[pp] = new WordProb(pp, val);
+			}
+			Arrays.sort(wp);
+			for (int ii = 0; ii < wp.length; ii++){
+				if(ii >= numWords) {
+					break;
+				}				
+				int pp = wp[ii].wi;
+				int ww = this.topics.getWordFromPath(pp);
+				String word = this.vocab.get(ww);
+				if (this.removedWords.indexOf(word) == -1 && this.removedWordsNew.indexOf(word) == -1) {
+					tmp = wp[ii].p + "\t" + word + "\n";
+					out.append(tmp);
+				}
+			}	
+		}	
+		return out.toString();
+	}
+	
+	/**
+	 * Prints the topic word distributions.
+	 */
+	public void printTopicWords (File file) throws IOException {
+		
+		PrintStream out = new PrintStream (file);
+		int numPaths = this.topics.getPathNum();
+		String tmp;
+		
+		for (int tt = 0; tt < this.numTopics; tt++){
+
+			WordProb[] wp = new WordProb[numPaths];
+			for (int pp = 0; pp < numPaths; pp++){
+				int ww = this.topics.getWordFromPath(pp);
+				double val = this.topics.computeTopicPathProb(tt, ww, pp);
+				wp[pp] = new WordProb(pp, val);
+			}
+			Arrays.sort(wp);
+			for (int ii = 0; ii < wp.length; ii++){				
+				int pp = wp[ii].wi;
+				int ww = this.topics.getWordFromPath(pp);
+				String word = this.vocab.get(ww);
+				if (this.removedWords.indexOf(word) == -1 && this.removedWordsNew.indexOf(word) == -1) {
+					tmp = tt + "\t" + word + "\t" + wp[ii].p;
+					out.println(tmp);
+				}
+			}	
+		}	
+		out.close();
+	}	
+	
+	/**
+	 * Prints the topic and path of each word for all documents.
+	 */
+	public void printState (File file) throws IOException {
+		//PrintStream out =
+		//	new PrintStream(new GZIPOutputStream(new BufferedOutputStream(new FileOutputStream(file))));
+		PrintStream out = new PrintStream(file);
+		
+		for (int dd = 0; dd < this.data.size(); dd++) {
+			DocData doc = this.data.get(dd);
+			String tmp = "";
+			for (int ww = 0; ww < doc.topics.size(); ww++) {
+				int topic = doc.topics.get(ww);
+				int path = doc.paths.get(ww);
+				int wordpath = this.topics.pathToWordPath.get(path);
+				tmp += topic + ":" + wordpath + "\t";
+			}
+			out.println(tmp);
+		}
+		out.close();
+	}
+
+	public TreeTopicInferencer getInferencer() {
+		//this.topics.updateParams();
+		HashSet<String> removedall = new HashSet<String> ();
+		removedall.addAll(this.removedWords);
+		removedall.addAll(this.removedWordsNew);
+		TreeTopicInferencer inferencer = new TreeTopicInferencer(topics, vocab, removedall, alpha);
+		return inferencer;
+	}
+	
+	 public TreeMarginalProbEstimator getProbEstimator() {
+		HashSet<String> removedall = new HashSet<String> ();
+		removedall.addAll(this.removedWords);
+		removedall.addAll(this.removedWordsNew);		 
+		TreeMarginalProbEstimator estimator = new TreeMarginalProbEstimator(topics, vocab, removedall, alpha);
+		return estimator;
+	}
+}
diff --git a/src/cc/mallet/topics/tree/Utils.java b/src/cc/mallet/topics/tree/Utils.java
new file mode 100755
index 000000000..5a5c1db68
--- /dev/null
+++ b/src/cc/mallet/topics/tree/Utils.java
@@ -0,0 +1,82 @@
+package cc.mallet.topics.tree;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+
+public class Utils {
+	/**
+	 * Add an item to a map of counts.
+	 */
+	public static void addToMap(Map<String, Integer> map, String word) {
+		int count = 0;
+		if (map.containsKey(word))
+			count = map.get(word);
+		map.put(word, count+1);
+	}
+
+	/**
+	 * Sort a map by value and return a list of the sorted keys.
+	 * 
+	 *  adapted from:
+	 *  http://www.programmersheaven.com/download/49349/download.aspx
+	 * 
+	 */
+	public static<T, V> List<T> sortByValue(Map<T, V> map) {
+		List<Map.Entry<T, V>> list = new LinkedList<Map.Entry<T, V>>(
+				map.entrySet());
+		Collections.sort(list, new Comparator() {
+			public int compare(Object o1, Object o2) {
+				return ((Comparable) ((Map.Entry) (o2)).getValue())
+						.compareTo(((Map.Entry) (o1)).getValue());
+			}
+		});
+		// logger.info(list);
+		List<T> result = new ArrayList<T>();
+		for (Iterator<Map.Entry<T, V>> it = list.iterator(); it.hasNext();) {
+			Map.Entry<T, V> entry = (Map.Entry<T, V>) it.next();
+			result.add(entry.getKey());
+		}
+		return result;
+	}
+	
+	/**
+	 * Read all the lines in a file and return them in a list.
+	 */
+	public static List<String> readAll(String filename) throws Exception {
+		List<String> lines = new ArrayList<String>();
+		BufferedReader reader = new BufferedReader(new FileReader(filename));
+		String line = "";
+		while ((line = reader.readLine()) != null)
+			lines.add(line);
+		reader.close();
+		return lines;
+	}
+	
+	/**
+	 * Converts a list of strings into a single space-separated string.
+	 */
+	public static String listToString(List<String> words) {
+		String str = "";
+		for (String word : words) {
+			str += " " + word;
+		}
+		return str.substring(1);
+	}
+	
+	/**
+	 * Converts a space-separated string of words into list form.
+	 */
+	public static List<String> stringToList(String str) {
+		String[] parts = str.toLowerCase().split("\\s+");
+		return Arrays.asList(parts);
+	}
+}
diff --git a/src/cc/mallet/topics/tree/VocabGenerator.java b/src/cc/mallet/topics/tree/VocabGenerator.java
new file mode 100755
index 000000000..8a6ea7360
--- /dev/null
+++ b/src/cc/mallet/topics/tree/VocabGenerator.java
@@ -0,0 +1,238 @@
+package cc.mallet.topics.tree;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+
+import gnu.trove.TIntArrayList;
+import gnu.trove.TIntHashSet;
+import gnu.trove.TIntIntHashMap;
+import gnu.trove.TObjectDoubleHashMap;
+import gnu.trove.TObjectIntHashMap;
+import cc.mallet.topics.tree.TreeTopicSamplerHashD.DocData;
+import cc.mallet.types.Alphabet;
+import cc.mallet.types.FeatureSequence;
+import cc.mallet.types.Instance;
+import cc.mallet.types.InstanceList;
+import cc.mallet.util.Maths;
+
+
+/**
+ * This class generates the vocab file from mallet input.
+ * This generated vocab can be filtered by either frequency or tfidf.
+ * Tree-based topic model need this vocab for:
+ * (1) filter words more flexible
+ * (2) generate tree structure
+ * (3) allow removing words
+ * Main entrance: genVocab()
+ * 
+ * @author Yuening Hu
+ */
+
+public class VocabGenerator {
+	public static TObjectDoubleHashMap<String> getIdf(InstanceList data) {
+		// get idf
+		TObjectDoubleHashMap<String> idf = new TObjectDoubleHashMap<String> ();
+
+		for (Instance instance : data) {
+			FeatureSequence original_tokens = (FeatureSequence) instance.getData();
+			HashSet<String> words = new HashSet<String>();
+			for (int jj = 0; jj < original_tokens.getLength(); jj++) {
+				String word = (String) original_tokens.getObjectAtPosition(jj);
+				words.add(word);
+			}
+			for(String word : words) {
+				idf.adjustOrPutValue(word, 1, 1);
+			}
+		}
+		
+		int D = data.size();
+		for(Object ob : idf.keys()){
+			String word = (String) ob;
+			double value = D / (1 + idf.get(word));
+			value = Math.log(value) - idf.get(word);
+			idf.adjustValue(word, value);
+		}
+		
+		System.out.println("Idf size: " + idf.size());
+		return idf;
+	}
+	
+	public static TObjectDoubleHashMap<String> computeTfidf(InstanceList data) {
+		// get idf
+		TObjectDoubleHashMap<String> idf = getIdf(data);
+		
+		// compute tf-idf for each word
+		HashMap<String, HashSet<Double>> tfidf = new HashMap<String, HashSet<Double>> ();
+		
+		for (Instance instance : data) {
+			FeatureSequence original_tokens = (FeatureSequence) instance.getData();
+			TObjectIntHashMap<String> tf = new TObjectIntHashMap();
+			for (int jj = 0; jj < original_tokens.getLength(); jj++) {
+				String word = (String) original_tokens.getObjectAtPosition(jj);
+				tf.adjustOrPutValue(word, 1, 1);
+			}
+			for(Object ob : tf.keys()) {
+				String word = (String) ob;
+				HashSet<Double> values;
+				if (tfidf.containsKey(word)) {
+					values = tfidf.get(word);
+				} else {
+					values = new HashSet<Double> ();
+					tfidf.put(word, values);
+				}
+				double value = tf.get(word) * idf.get(word);
+				values.add(value);
+			}
+		}
+		
+		// averaged tfidf
+		TObjectDoubleHashMap<String> vocabtfidf = new TObjectDoubleHashMap();
+		for(String word : tfidf.keySet()) {
+			double sum = 0;
+			int count = tfidf.get(word).size();
+			for(double value : tfidf.get(word)) {
+				sum += value;
+			}
+			sum = sum / count;
+			vocabtfidf.put(word, sum);
+		}
+		
+		System.out.println("vocab tfidf size: " + vocabtfidf.size());
+		return vocabtfidf;
+	}
+	
+	public static TObjectDoubleHashMap getFrequency (InstanceList data) {
+		TObjectDoubleHashMap<String> freq = new TObjectDoubleHashMap<String> ();
+		Alphabet alphabet = data.getAlphabet();
+		for(int ii = 0; ii < alphabet.size(); ii++) {
+			String word = alphabet.lookupObject(ii).toString();
+			freq.put(word, 0);
+		}
+
+		for (Instance instance : data) {
+			FeatureSequence original_tokens = (FeatureSequence) instance.getData();
+			for (int jj = 0; jj < original_tokens.getLength(); jj++) {
+				String word = (String) original_tokens.getObjectAtPosition(jj);
+				freq.adjustValue(word, 1);
+			}
+		}
+		
+		System.out.println("Alphabet size: " + alphabet.size());
+		System.out.println("Frequency size: " + freq.size());
+		return freq;
+	}
+	
+	public static void genVocab_all(InstanceList data, String vocab, Boolean tfidfRank, double tfidfthresh, double freqthresh, double wordlength) {
+	//public static void genVocab(InstanceList data, String vocab) {
+		try{
+			File file = new File(vocab);
+			PrintStream out = new PrintStream (file);
+			
+			int language_id = 0;
+			Alphabet alphabet = data.getAlphabet();
+			for(int ii = 0; ii < alphabet.size(); ii++) {
+				String word = alphabet.lookupObject(ii).toString();
+				System.out.println(word);
+				out.println(language_id + "\t" + word);
+			}
+			out.close();
+		} catch (IOException e) {
+			e.getMessage();
+		}
+
+	}
+	
+	/**
+	 * After the preprocessing of mallet, a vocab is needed to generate
+	 * the prior tree. So this function simply read in the alphabet
+	 * of the training data, filter the words either by frequency or tfidf,
+	 * then output the vocab.
+	 * Currently, the language_id is fixed.
+	 */
+	public static void genVocab(InstanceList[] data, String vocab, Boolean tfidfRank, double tfidfthresh, double freqthresh, double wordlength) {
+		
+		class WordCount implements Comparable {
+			String word;
+			double value;
+			public WordCount (String word, double value) { this.word = word; this.value = value; }
+			public final int compareTo (Object o2) {
+				if (value > ((WordCount)o2).value)
+					return -1;
+				else if (value == ((WordCount)o2).value)
+					return 0;
+				else return 1;
+			}
+		}		
+		
+		
+		try{
+			File file = new File(vocab);
+			PrintStream out = new PrintStream (file, "UTF8");
+			
+			HashSet<String> allwords = new HashSet<String> ();
+			for (int ll = 0; ll < data.length; ll++) {
+				System.out.println("Language " + ll);
+				TObjectDoubleHashMap freq = getFrequency(data[ll]);
+				TObjectDoubleHashMap tfidf = computeTfidf(data[ll]);
+				TObjectDoubleHashMap selected;
+				if (tfidfRank) {
+					selected = tfidf;
+				} else {
+					selected = freq;
+				}
+				
+				WordCount[] array = new WordCount[selected.keys().length];
+				int index = -1;
+				for(Object o : selected.keys()) {
+					String word = (String)o;
+					double count = selected.get(word);
+					index++;
+					array[index] = new WordCount(word, count);
+				}
+				System.out.println("Array size: " + array.length);
+				Arrays.sort(array);		
+				System.out.println("After sort array size: " + array.length);
+				
+				int language_id = ll;
+				int count = 0;
+				for(int ii = 0; ii < array.length; ii++) {
+					String word = array[ii].word;
+					if (word.length() >= wordlength && tfidf.get(word) > tfidfthresh && freq.get(word) > freqthresh) {
+						if (allwords.contains(word)) {
+							continue;
+						}
+						allwords.add(word);
+						out.println(language_id + "\t" + array[ii].word + "\t" + tfidf.get(word) + "\t" + (int)freq.get(word));
+						count++;
+					}
+				}
+				System.out.println("Filtered vocab size: " + count);
+				System.out.println("*******************");
+			}
+			out.close();
+		
+		} catch (IOException e) {
+			e.getMessage();
+		}
+	}
+	
+	public static void main(String[] args) {
+		//String input = "input/synthetic-topic-input.mallet";
+		//String vocab = "input/synthetic.voc";
+		
+		String input = "../../itm-evaluation/results/fbis-itm/input/fbis-itm-topic-input.mallet";
+		String vocab = "../../itm-evaluation/results/fbis-itm/input/fbis-itm.voc";
+		
+		InstanceList[] instances = new InstanceList[ 2 ];
+		InstanceList data = InstanceList.load (new File(input));
+		instances[0] = data;
+		InstanceList data1 = InstanceList.load (new File(input));
+		instances[1] = data1;
+		genVocab(instances, vocab, true, 1, 10, 3);
+		System.out.println("Done!");
+	}
+}
diff --git a/src/cc/mallet/topics/tree/testFast.java b/src/cc/mallet/topics/tree/testFast.java
new file mode 100755
index 000000000..072c96563
--- /dev/null
+++ b/src/cc/mallet/topics/tree/testFast.java
@@ -0,0 +1,249 @@
+package cc.mallet.topics.tree;
+
+import gnu.trove.TIntArrayList;
+import gnu.trove.TIntDoubleHashMap;
+import gnu.trove.TIntIntHashMap;
+
+import java.io.File;
+import java.util.ArrayList;
+
+import cc.mallet.topics.tree.TreeTopicSamplerHashD.DocData;
+import cc.mallet.types.InstanceList;
+import junit.framework.TestCase;
+
+/**
+ * This class tests the fast sampler.
+ * @author Yuening Hu
+ */
+
+public class testFast extends TestCase{
+	
+	public TreeTopicSamplerFast Initialize() {
+		
+		String inputFile = "input/toy/toy-topic-input.mallet";
+		String treeFiles = "input/toy/toy.wn.*";
+		String hyperFile = "input/toy/tree_hyperparams";
+		String vocabFile = "input/toy/toy.voc";	
+		String removedFile = "input/toy/removed";		
+		int numTopics = 3;
+		double alpha_sum = 0.3;
+		int randomSeed = 0;
+		int numIterations = 10;
+		
+//		String inputFile = "../input/synthetic-topic-input.mallet";
+//		String treeFiles = "../synthetic/synthetic_empty.wn.*";
+//		String hyperFile = "../synthetic/tree_hyperparams";
+//		String vocabFile = "../synthetic/synthetic.voc";
+//		int numTopics = 5;
+//		double alpha_sum = 0.5;
+//		int randomSeed = 0;
+//		int numIterations = 10;
+		
+		InstanceList[] instances = new InstanceList[1];
+		InstanceList ilist = InstanceList.load (new File(inputFile));
+		System.out.println ("Data loaded.");
+		instances[0] = ilist;
+		
+		TreeTopicSamplerFast topicModel = null;
+		topicModel = new TreeTopicSamplerFast(numTopics, alpha_sum, randomSeed, false);
+		
+		topicModel.initialize(treeFiles, hyperFile, vocabFile, removedFile);
+		topicModel.addInstances(instances);
+		
+        topicModel.setNumIterations(numIterations);
+        
+        return topicModel;
+	}
+	
+	public void testUpdateParams() {
+		TreeTopicSamplerFast topicModel = this.Initialize();
+		topicModel.topics.updateParams();
+		
+		for(int dd = 0; dd < topicModel.data.size(); dd++) {
+			System.out.println(topicModel.data.get(dd));
+		}
+		
+		System.out.println("**************\nNormalizer");
+		int numPaths = topicModel.topics.pathToWord.size();
+		for(int tt = 0; tt < topicModel.numTopics; tt++) {
+			for(int pp = 0; pp < numPaths; pp++) {
+				System.out.println("topic " + tt + " path " + pp + " normalizer " + topicModel.topics.normalizer.get(tt, pp));
+			}
+		}
+		
+		System.out.println("**************\nNon zero paths");
+		for(int ww : topicModel.topics.nonZeroPaths.keys()) {
+			for(int tt : topicModel.topics.nonZeroPaths.get(ww).getKey1Set()) {
+				for(int pp : topicModel.topics.nonZeroPaths.get(ww).get(tt).keys()) {
+					System.out.println("word " + ww + " topic " + tt + " path " + pp + " " + topicModel.topics.nonZeroPaths.get(ww).get(tt, pp));
+				}
+			}
+		}
+	}
+	
+	public void testUpdatePathmaskedCount() {
+		TreeTopicSamplerFast topicModel = this.Initialize();
+		topicModel.topics.updateParams();
+		int numPaths = topicModel.topics.pathToWord.size();
+		
+		TreeTopicModelFast topics = (TreeTopicModelFast)topicModel.topics;
+		
+		for (int ww : topics.nonZeroPaths.keys()) {
+			for(int tt : topics.nonZeroPaths.get(ww).getKey1Set()) {
+				for(int pp : topicModel.topics.nonZeroPaths.get(ww).get(tt).keys()) {
+					TIntArrayList path_nodes = topics.wordPaths.get(ww, pp);					
+					int parent = path_nodes.get(path_nodes.size() - 2);
+					int child = path_nodes.get(path_nodes.size() - 1);
+					
+					int mask = topics.nonZeroPaths.get(ww).get(tt, pp) - topics.traversals.get(tt).getCount(parent, child);
+					
+					System.out.println("*************************");
+					System.out.println("Topic " + tt + " Word " + ww + " path " + pp);
+					String tmp = "[";
+					for (int ii : path_nodes.toNativeArray()) {
+						tmp += " " + ii;
+					}
+					System.out.println("Real path " + tmp + " ]");
+					System.out.println("Real count " + topics.traversals.get(tt).getCount(parent, child));
+					System.out.println("Masked count " + topics.nonZeroPaths.get(ww).get(tt, pp));
+					System.out.println("Masekd count " + Integer.toBinaryString(topics.nonZeroPaths.get(ww).get(tt, pp)));
+					System.out.println("*************************");
+				}
+			}
+		}
+	}
+	
+	public void testChangeTopic() {
+		TreeTopicSamplerFast topicModel = this.Initialize();
+		topicModel.topics.updateParams();
+		TreeTopicModelFast topics = (TreeTopicModelFast)topicModel.topics;
+		//for(int dd = 0; dd < topicModel.data.size(); dd++){
+		for(int dd = 0; dd < 1; dd++){
+			DocData doc = topicModel.data.get(dd);
+			for(int ii = 0; ii < doc.tokens.size(); ii++) {	
+				int word = doc.tokens.get(ii);
+				int old_topic = doc.topics.get(ii);
+				int old_path = doc.paths.get(ii);
+				TIntArrayList path_nodes = topicModel.topics.wordPaths.get(word, old_path);
+				int node = path_nodes.get(0);
+				int leaf = path_nodes.get(path_nodes.size() - 1);
+				int total = 0;
+				for(int nn : topics.traversals.get(word).counts.get(node).keys()){
+					total += topics.traversals.get(word).getCount(node, nn);
+				}
+				
+				assertTrue(topics.traversals.get(word).getNodeCount(node) == total);
+				
+				System.out.println("*************************");
+				System.out.println("old topic " + old_topic + " word " + word);
+				System.out.println("old normalizer " + topics.normalizer.get(old_topic, old_path));
+				System.out.println("old root count " + topics.traversals.get(old_topic).getNodeCount(node) + " " + total);
+				System.out.println("old non zero count " + Integer.toBinaryString(topics.nonZeroPaths.get(word).get(old_topic, old_path)));
+				System.out.println("old leaf count " + topics.traversals.get(old_topic).getNodeCount(leaf));
+				
+				topicModel.changeTopic(dd, ii, word, -1, -1);
+				
+				total = 0;
+				for(int nn : topics.traversals.get(old_topic).counts.get(node).keys()){
+					total += topics.traversals.get(old_topic).getCount(node, nn);
+				}
+				assertTrue(topics.traversals.get(old_topic).getNodeCount(node) == total);
+				System.out.println("*************************");
+				System.out.println("updated old topic " + old_topic + " word " + word);
+				System.out.println("updated old normalizer " + topics.normalizer.get(old_topic, old_path));
+				System.out.println("updated old root count " + topics.traversals.get(old_topic).getNodeCount(node) + " " + total);
+				System.out.println("updated old non zero count " + Integer.toBinaryString(topics.nonZeroPaths.get(word).get(old_topic, old_path)));
+				System.out.println("updated old leaf count " + topics.traversals.get(old_topic).getNodeCount(leaf));
+				
+				
+				int new_topic = topicModel.numTopics - old_topic - 1;
+				int new_path = old_path;
+				
+				total = 0;
+				for(int nn : topics.traversals.get(new_topic).counts.get(node).keys()){
+					total += topics.traversals.get(new_topic).getCount(node, nn);
+				}
+				assertTrue(topics.traversals.get(new_topic).getNodeCount(node) == total);
+				
+				System.out.println("*************************");
+				System.out.println("new topic " + new_topic + " word " + word);
+				System.out.println("new normalizer " + topics.normalizer.get(new_topic, new_path));
+				System.out.println("new root count " + topics.traversals.get(new_topic).getNodeCount(node) + " " + total);
+				System.out.println("new non zero count " + Integer.toBinaryString(topics.nonZeroPaths.get(word).get(new_topic, new_path)));
+				System.out.println("new leaf count " + topics.traversals.get(new_topic).getNodeCount(leaf));
+				
+				topicModel.changeTopic(dd, ii, word, new_topic, new_path);
+				
+				
+				total = 0;
+				for(int nn : topics.traversals.get(new_topic).counts.get(node).keys()){
+					total += topics.traversals.get(new_topic).getCount(node, nn);
+				}
+				assertTrue(topics.traversals.get(new_topic).getNodeCount(node) == total);
+				System.out.println("*************************");
+				System.out.println("updated new topic " + new_topic + " word " + word);
+				System.out.println("updated new normalizer " + topics.normalizer.get(new_topic, new_path));
+				System.out.println("updated new root count " + topics.traversals.get(new_topic).getNodeCount(node) + " " + total);
+				System.out.println("updated new non zero count " + Integer.toBinaryString(topics.nonZeroPaths.get(word).get(new_topic, new_path)));
+				System.out.println("updated new leaf count " + topics.traversals.get(new_topic).getNodeCount(leaf));
+				
+				System.out.println("*************************\n");
+			}
+		}
+	}
+	
+	public void testBinValues() {
+		TreeTopicSamplerFast topicModelFast = this.Initialize();
+		topicModelFast.topics.updateParams();
+		
+		TreeTopicSamplerNaive topicModelNaive = testNaive.Initialize();
+		topicModelNaive.topics.updateParams();
+		
+		//for(int dd = 0; dd < topicModelFast.data.size(); dd++){
+		for(int dd = 0; dd < 1; dd++){
+			DocData doc = topicModelFast.data.get(dd);
+			DocData doc1 = topicModelNaive.data.get(dd);
+			
+			//for(int ii = 0; ii < doc.tokens.size(); ii++) {	
+			for(int ii = 4; ii < 5; ii++) {
+				int word = doc.tokens.get(ii);
+				int topic = doc.topics.get(ii);
+				int path = doc.paths.get(ii);
+				
+				double smoothing = topicModelFast.callComputeTermSmoothing(word);
+				double topicbeta = topicModelFast.callComputeTermTopicBeta(doc.topicCounts, word);
+				ArrayList<double[]> dict = new ArrayList<double[]>();
+				double topictermscore = topicModelFast.topics.computeTopicTerm(topicModelFast.alpha, 
+						doc.topicCounts, word, dict);
+				double norm = smoothing + topicbeta + topictermscore;
+				
+				double smoothing1 = topicModelFast.computeTopicSmoothTest(word);
+				double topicbeta1 = topicModelFast.computeTopicTermBetaTest(doc.topicCounts, word);
+				HIntIntDoubleHashMap dict1 = new HIntIntDoubleHashMap();
+				double topictermscore1 = topicModelFast.computeTopicTermScoreTest(topicModelFast.alpha, 
+						doc.topicCounts, word, dict1);
+				double norm1 = smoothing1 + topicbeta1 + topictermscore1;
+				
+				System.out.println("*************");
+				System.out.println("Index " + ii);
+				System.out.println(smoothing + " " + smoothing1);
+				System.out.println(topicbeta + " " + topicbeta1);
+				System.out.println(topictermscore + " " + topictermscore1);
+				
+				ArrayList<double[]> dict2 = new ArrayList<double[]>();
+				double norm2 = topicModelFast.computeTopicTermTest(topicModelNaive.alpha, doc.topicCounts, word, dict2);
+				
+				ArrayList<double[]> dict3 = new ArrayList<double[]>();
+				double norm3 = topicModelNaive.topics.computeTopicTerm(topicModelNaive.alpha, doc.topicCounts, word, dict3);
+
+				System.out.println(norm + " " + norm1 + " " + norm2 + " " + norm3);
+//				if (norm1 != norm2) {
+//					System.out.println(norm + " " + norm1 + " " + norm2 + " " + norm3 );
+//				}
+				System.out.println("*************");
+				assert(norm == norm1);
+				assert(1 == 0);
+			}
+		}
+	}
+}
diff --git a/src/cc/mallet/topics/tree/testNaive.java b/src/cc/mallet/topics/tree/testNaive.java
new file mode 100755
index 000000000..84143b62c
--- /dev/null
+++ b/src/cc/mallet/topics/tree/testNaive.java
@@ -0,0 +1,157 @@
+package cc.mallet.topics.tree;
+
+import gnu.trove.TIntArrayList;
+import gnu.trove.TIntIntHashMap;
+
+import java.io.File;
+import java.util.ArrayList;
+
+import cc.mallet.topics.tree.TreeTopicSamplerHashD.DocData;
+import cc.mallet.types.Alphabet;
+import cc.mallet.types.FeatureSequence;
+import cc.mallet.types.Instance;
+import cc.mallet.types.InstanceList;
+import junit.framework.TestCase;
+
+/**
+ * This class tests the naive sampler.
+ * @author Yuening Hu
+ */
+
+public class testNaive extends TestCase{
+	
+	public static TreeTopicSamplerNaive Initialize() {
+		
+		String inputFile = "input/toy/toy-topic-input.mallet";
+		String treeFiles = "input/toy/toy.wn.*";
+		String hyperFile = "input/toy/tree_hyperparams";
+		String vocabFile = "input/toy/toy.voc";
+		String removedFile = "input/toy/removed";		
+		int numTopics = 3;
+		double alpha_sum = 0.3;
+		int randomSeed = 0;
+		int numIterations = 10;
+		
+//		String inputFile = "../input/synthetic-topic-input.mallet";
+//		String treeFiles = "../synthetic/synthetic.wn.*";
+//		String hyperFile = "../synthetic/tree_hyperparams";
+//		String vocabFile = "../synthetic/synthetic.voc";		
+//		int numTopics = 5;
+//		double alpha_sum = 0.5;
+//		int randomSeed = 0;
+//		int numIterations = 10;
+		
+		InstanceList[] instances = new InstanceList[1];
+		InstanceList ilist = InstanceList.load (new File(inputFile));
+		System.out.println ("Data loaded.");
+		instances[0] = ilist;
+		
+		TreeTopicSamplerNaive topicModel = null;
+		topicModel = new TreeTopicSamplerNaive(numTopics, alpha_sum, randomSeed);
+		
+		topicModel.initialize(treeFiles, hyperFile, vocabFile, removedFile);
+		topicModel.addInstances(instances);
+		
+        topicModel.setNumIterations(numIterations);
+        
+        return topicModel;
+	}
+	
+	public void testChangeTopic() {
+		TreeTopicSamplerNaive topicModel = this.Initialize();
+		for (int dd = 0; dd < topicModel.data.size(); dd++ ) {
+			DocData doc = topicModel.data.get(dd);
+			for (int index = 0; index < doc.tokens.size(); index++) {
+				int word = doc.tokens.get(index);
+				int old_topic = doc.topics.get(index);
+				int old_path = doc.paths.get(index);
+				int old_count = doc.topicCounts.get(old_topic);
+				
+				topicModel.changeTopic(dd, index, word, -1, -1);
+				assertTrue(doc.topics.get(index) == -1);
+				assertTrue(doc.paths.get(index) == -1);
+				assertTrue(doc.topicCounts.get(old_topic) == old_count-1);
+				
+				int new_topic = topicModel.numTopics - old_topic - 1;
+				int new_path = old_path;
+				int new_count = doc.topicCounts.get(new_topic);
+				topicModel.changeTopic(dd, index, word, new_topic, new_path);
+				
+				assertTrue(doc.topics.get(index) == new_topic);
+				assertTrue(doc.paths.get(index) == new_path);
+				assertTrue(doc.topicCounts.get(new_topic) == new_count+1);
+			}
+		}
+	}
+	
+	public void testChangCount() {
+		TreeTopicSamplerNaive topicModel = this.Initialize();
+		for (int dd = 0; dd < topicModel.data.size(); dd++ ) {
+			DocData doc = topicModel.data.get(dd);
+			
+			for (int index = 0; index < doc.tokens.size(); index++) {
+				int word = doc.tokens.get(index);
+				int old_topic = doc.topics.get(index);
+				int old_path = doc.paths.get(index);
+				
+				TopicTreeWalk tw = topicModel.topics.traversals.get(old_topic);
+				TIntArrayList path_nodes = topicModel.topics.wordPaths.get(word, old_path);
+				
+				int[] old_count = new int[path_nodes.size() - 1];
+				for(int nn = 0; nn < path_nodes.size() - 1; nn++) {
+					int parent = path_nodes.get(nn);
+					int child = path_nodes.get(nn+1);
+					old_count[nn] = tw.getCount(parent, child);
+				}
+				
+				int[] old_node_count = new int[path_nodes.size()];
+				for(int nn = 0; nn < path_nodes.size(); nn++) {
+					int node = path_nodes.get(nn);
+					old_node_count[nn] = tw.getNodeCount(node);
+				}
+
+				int inc = 1;
+				tw.changeCount(path_nodes, inc);
+				
+				for(int nn = 0; nn < path_nodes.size() - 1; nn++) {
+					int parent = path_nodes.get(nn);
+					int child = path_nodes.get(nn+1);
+					assertTrue(old_count[nn] == tw.getCount(parent, child) - inc);
+				}
+				
+				for(int nn = 0; nn < path_nodes.size(); nn++) {
+					int node = path_nodes.get(nn);
+					assertTrue(old_node_count[nn] == tw.getNodeCount(node) - inc);
+				}
+				
+			}
+		}
+		
+	}
+	
+	public void testComputeTermScore() {
+		TreeTopicSamplerNaive topicModel = this.Initialize();
+		for (int dd = 0; dd < topicModel.data.size(); dd++ ) {
+			DocData doc = topicModel.data.get(dd);
+			System.out.println("------------" + dd + "------------");
+			for (int index = 0; index < doc.tokens.size(); index++) {
+				int word = doc.tokens.get(index);
+				
+				//topicModel.changeTopic(dd, index, word, -1, -1);
+				
+				ArrayList<double[]> topic_term_score = new ArrayList<double[]>();
+				double norm = topicModel.topics.computeTopicTerm(topicModel.alpha, doc.topicCounts, word, topic_term_score);
+				System.out.println(norm);
+				
+				for(int jj = 0; jj < topic_term_score.size(); jj++) {
+					double[] tmp = topic_term_score.get(jj);
+					int tt = (int) tmp[0];
+					int pp = (int) tmp[1];
+					double val = tmp[2];
+					System.out.println(tt + " " + pp + " " + val);
+				}
+			}
+		}
+	}
+	
+}
diff --git a/src/cc/mallet/topics/tui/EvaluateTreeTopics.java b/src/cc/mallet/topics/tui/EvaluateTreeTopics.java
new file mode 100644
index 000000000..ce17fdf5b
--- /dev/null
+++ b/src/cc/mallet/topics/tui/EvaluateTreeTopics.java
@@ -0,0 +1,96 @@
+package cc.mallet.topics.tui;
+
+import java.io.File;
+import java.io.PrintStream;
+
+import cc.mallet.topics.MarginalProbEstimator;
+import cc.mallet.topics.tree.TreeMarginalProbEstimator;
+import cc.mallet.topics.tree.TreeTopicInferencer;
+import cc.mallet.types.InstanceList;
+import cc.mallet.util.CommandOption;
+
+public class EvaluateTreeTopics {
+	// common options in mallet
+	
+	static CommandOption.String inputFile = new CommandOption.String
+	(EvaluateTreeTopics.class, "input", "FILENAME", true, null,
+	 "The filename from which to read the list of testing instances.  Use - for stdin.  " +
+	 "The instances must be FeatureSequence or FeatureSequenceWithBigrams, not FeatureVector", null);	
+    
+    static CommandOption.Integer randomSeed = new CommandOption.Integer
+    (EvaluateTreeTopics.class, "random-seed", "INTEGER", true, 0,
+     "The random seed for the Gibbs sampler.  Default is 0, which will use the clock.", null);    
+	
+    static CommandOption.String evaluatorFilename = new CommandOption.String
+	(EvaluateTreeTopics.class, "evaluator", "FILENAME", true, null,
+	 "A serialized topic evaluator from a trained topic model.\n" + 
+     "By default this is null, indicating that no file will be read.", null);
+    	
+    static CommandOption.String docProbabilityFile = new CommandOption.String
+    (EvaluateTreeTopics.class, "output-doc-probs", "FILENAME", true, null,
+     "The filename in which to write the inferred log probabilities\n" +
+	 "per document.  " +
+     "By default this is null, indicating that no file will be written.", null);
+
+    static CommandOption.String probabilityFile = new CommandOption.String
+    (EvaluateTreeTopics.class, "output-prob", "FILENAME", true, "-",
+     "The filename in which to write the inferred log probability of the testing set\n" +
+     "Use - for stdout, which is the default.", null);
+
+	static CommandOption.Integer numParticles = new CommandOption.Integer
+    (EvaluateTreeTopics.class, "num-particles", "INTEGER", true, 10,
+     "The number of particles to use in left-to-right evaluation.", null);
+
+	static CommandOption.Boolean usingResampling = new CommandOption.Boolean
+    (EvaluateTreeTopics.class, "use-resampling", "TRUE|FALSE", false, false,
+     "Whether to resample topics in left-to-right evaluation. Resampling is more accurate, but leads to quadratic scaling in the lenght of documents.", null);
+
+	
+	public static void main (String[] args) throws java.io.IOException {
+        // Process the command-line options
+		CommandOption.setSummary (EvaluateTreeTopics.class,
+                                  "Estimate the marginal probability of new documents.");
+        CommandOption.process (EvaluateTreeTopics.class, args);
+
+		if (evaluatorFilename.value == null) {
+			System.err.println("You must specify a serialized topic evaluator. Use --help to list options.");
+			System.exit(0);
+		}
+
+		if (inputFile.value == null) {
+			System.err.println("You must specify a serialized instance list. Use --help to list options.");
+			System.exit(0);
+		}
+
+		try {
+			
+			PrintStream docProbabilityStream = null;
+			if (docProbabilityFile.value != null) {
+				docProbabilityStream = new PrintStream(docProbabilityFile.value);
+			}
+			
+			PrintStream outputStream = System.out;
+			if (probabilityFile.value != null &&
+				! probabilityFile.value.equals("-")) {
+				outputStream = new PrintStream(probabilityFile.value);
+			}
+			
+			TreeMarginalProbEstimator evaluator = 
+					TreeMarginalProbEstimator.read(new File(evaluatorFilename.value));
+
+			InstanceList instances = InstanceList.load (new File(inputFile.value));
+			
+			evaluator.setRandomSeed(randomSeed.value);
+
+			outputStream.println(evaluator.evaluateLeftToRight(instances, numParticles.value, 
+															   usingResampling.value,
+															   docProbabilityStream));
+			
+
+		} catch (Exception e) {
+			e.printStackTrace();
+			System.err.println(e.getMessage());
+		}
+		
+	}
+}
diff --git a/src/cc/mallet/topics/tui/GenerateTree.java b/src/cc/mallet/topics/tui/GenerateTree.java
new file mode 100644
index 000000000..d87df11e0
--- /dev/null
+++ b/src/cc/mallet/topics/tui/GenerateTree.java
@@ -0,0 +1,42 @@
+package cc.mallet.topics.tui;
+
+import java.io.File;
+import cc.mallet.topics.tree.OntologyWriter;
+import cc.mallet.util.CommandOption;
+
+public class GenerateTree {
+	
+	static CommandOption.String vocabFile = new CommandOption.String
+	(GenerateTree.class, "vocab", "FILENAME", true, null,
+	 "The vocabulary file.", null);
+	
+	static CommandOption.String treeFiles = new CommandOption.String
+	(GenerateTree.class, "tree", "FILENAME", true, null,
+	 "The files for tree structure.", null);
+	
+	static CommandOption.String consFile = new CommandOption.String
+	(GenerateTree.class, "constraint", "FILENAME", true, null,
+	"The constraint file.", null);
+	
+	static CommandOption.Boolean mergeCons = new CommandOption.Boolean
+	(GenerateTree.class, "merge-constraints", "true|false", false, true,
+	"Merge constraints or not. For example, if you want to merge A and B, " +
+	"and merge B and C and set merge-constraints as true, the new constraint" +
+	"will be merge A, B and C.", null);
+	
+	public static void main (String[] args) throws java.io.IOException {
+		// Process the command-line options
+		CommandOption.setSummary (GenerateTree.class,
+								  "Generate a prior tree structure for LDA, in proto buffer format.");
+		CommandOption.process (GenerateTree.class, args);
+			
+		try {
+			OntologyWriter.createOntology(consFile.value, vocabFile.value, 
+	    		                          treeFiles.value, mergeCons.value);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
+	}
+
+}
diff --git a/src/cc/mallet/topics/tui/GenerateVocab.java b/src/cc/mallet/topics/tui/GenerateVocab.java
new file mode 100644
index 000000000..1ab186349
--- /dev/null
+++ b/src/cc/mallet/topics/tui/GenerateVocab.java
@@ -0,0 +1,58 @@
+package cc.mallet.topics.tui;
+
+import java.io.File;
+
+import cc.mallet.topics.tree.VocabGenerator;
+import cc.mallet.types.InstanceList;
+import cc.mallet.util.CommandOption;
+
+public class GenerateVocab {
+	
+	// common options in mallet
+	static CommandOption.SpacedStrings inputFile = new CommandOption.SpacedStrings
+	(GenerateVocab.class, "input", "FILENAME [FILENAME ...]", true, null,
+	 "The filename from which to read the list of training instances. " +
+	 "Support multiple languages, each language should have its own file. " +
+     "The instances must be FeatureSequence or FeatureSequenceWithBigrams, not FeatureVector", null);
+	
+	static CommandOption.String vocabFile = new CommandOption.String
+	(GenerateVocab.class, "vocab", "FILENAME", true, null,
+	 "The vocabulary file.", null);
+	
+	static CommandOption.Boolean tfidfRank = new CommandOption.Boolean
+	(GenerateVocab.class, "tfidf-rank", "true|false", false, true,
+	"Rank vocab by the averaged tfidf of words, or by frequency.", null);
+	
+	static CommandOption.Double tfidfThresh = new CommandOption.Double
+	(GenerateVocab.class, "tfidf-thresh", "DECIMAL", true, 1.0,
+	 "The thresh for tfidf to filter out words.",null);
+	
+	static CommandOption.Double freqThresh = new CommandOption.Double
+	(GenerateVocab.class, "freq-thresh", "DECIMAL", true, 1.0,
+	 "The thresh for frequency to filter out words.",null);
+	
+	static CommandOption.Double wordLength = new CommandOption.Double
+	(GenerateVocab.class, "word-length", "DECIMAL", true, 3.0,
+	 "Keep words with length equal or large than the thresh.",null);
+
+	
+	public static void main (String[] args) throws java.io.IOException {
+		// Process the command-line options
+		CommandOption.setSummary (GenerateVocab.class,
+								  "Filtering words by tfidf, frequency, word-length, and generate the vocab.");
+		CommandOption.process (GenerateVocab.class, args);
+		
+		int numLanguages = inputFile.value.length;
+		InstanceList[] instances = new InstanceList[ numLanguages ];
+		for (int i=0; i < instances.length; i++) {
+			instances[i] = InstanceList.load(new File(inputFile.value[i]));
+			System.out.println ("Data " + i + " loaded. Total number of documents: " + instances[i].size());
+		}
+		
+		
+		VocabGenerator.genVocab(instances, vocabFile.value, tfidfRank.value, tfidfThresh.value, 
+			freqThresh.value, wordLength.value);			
+		
+	}
+
+}
diff --git a/src/cc/mallet/topics/tui/InferTreeTopics.java b/src/cc/mallet/topics/tui/InferTreeTopics.java
new file mode 100755
index 000000000..ea0efa4bc
--- /dev/null
+++ b/src/cc/mallet/topics/tui/InferTreeTopics.java
@@ -0,0 +1,86 @@
+package cc.mallet.topics.tui;
+
+import java.io.File;
+
+import cc.mallet.topics.TopicInferencer;
+import cc.mallet.topics.tree.VocabGenerator;
+import cc.mallet.topics.tree.OntologyWriter;
+import cc.mallet.topics.tree.TreeTopicInferencer;
+import cc.mallet.topics.tree.TreeTopicSamplerFast;
+import cc.mallet.topics.tree.TreeTopicSamplerFastEst;
+import cc.mallet.topics.tree.TreeTopicSamplerFastEstSortD;
+import cc.mallet.topics.tree.TreeTopicSamplerFastSortD;
+import cc.mallet.topics.tree.TreeTopicSamplerInterface;
+import cc.mallet.topics.tree.TreeTopicSamplerNaive;
+import cc.mallet.types.InstanceList;
+import cc.mallet.util.CommandOption;
+
+public class InferTreeTopics {
+	
+	// common options in mallet
+	
+	static CommandOption.String inputFile = new CommandOption.String
+	(InferTreeTopics.class, "input", "FILENAME", true, null,
+	 "The filename from which to read the list of testing instances.  Use - for stdin.  " +
+	 "The instances must be FeatureSequence or FeatureSequenceWithBigrams, not FeatureVector", null);	
+
+	static CommandOption.Integer numIterations = new CommandOption.Integer
+	(InferTreeTopics.class, "num-iterations", "INTEGER", true, 1000,
+	 "The number of iterations of Gibbs sampling.", null);
+		
+    static CommandOption.String inferencerFilename = new CommandOption.String
+    (InferTreeTopics.class, "inferencer", "FILENAME", true, null,
+     "A topic inferencer applies a previously trained topic model to new documents." +
+     "By default this is null, indicating that no file will be written.", null);
+    
+    static CommandOption.String docTopicsFile = new CommandOption.String
+    (InferTreeTopics.class, "output-doc-topics", "FILENAME", true, null,
+     "The filename in which to write the inferred topic\n" +
+	 "proportions per document.  " +
+     "By default this is null, indicating that no file will be written.", null);
+    
+    static CommandOption.Integer randomSeed = new CommandOption.Integer
+    (InferTreeTopics.class, "random-seed", "INTEGER", true, 0,
+     "The random seed for the Gibbs sampler.  Default is 0, which will use the clock.", null);    
+
+	static CommandOption.Integer outputInteval = new CommandOption.Integer
+	(InferTreeTopics.class, "output-interval", "INTEGER", true, 20,
+	 "For each interval, the result files are output to the outputFolder.", null);    
+		
+	
+	public static void main (String[] args) throws java.io.IOException {
+		// Process the command-line options
+		CommandOption.setSummary (InferTreeTopics.class,
+								  "A tool for estimating, saving and printing diagnostics for topic models, such as LDA.");
+		CommandOption.process (InferTreeTopics.class, args);
+		
+		if (inferencerFilename.value == null) {
+			System.err.println("You must specify a serialized topic inferencer. Use --help to list options.");
+			System.exit(0);
+		}
+
+		if (inputFile.value == null) {
+			System.err.println("You must specify a serialized instance list. Use --help to list options.");
+			System.exit(0);
+		}
+			
+		try {
+			InstanceList testlist = InstanceList.load (new File(inputFile.value));
+			System.out.println ("Test data loaded.");
+			
+			TreeTopicInferencer inferencer = TreeTopicInferencer.read(new File(inferencerFilename.value));
+			System.out.println("Inferencer loaded.");
+			
+			inferencer.setRandomSeed(randomSeed.value);
+			
+			inferencer.writeInferredDistributions(testlist, new File(docTopicsFile.value), 
+					numIterations.value, outputInteval.value);
+			
+		} catch (Exception e) {
+			e.printStackTrace();
+			System.err.println(e.getMessage());
+		}
+		
+	}
+
+}
diff --git a/src/cc/mallet/topics/tui/Vectors2TreeTopics.java b/src/cc/mallet/topics/tui/Vectors2TreeTopics.java
new file mode 100755
index 000000000..a3a5d6764
--- /dev/null
+++ b/src/cc/mallet/topics/tui/Vectors2TreeTopics.java
@@ -0,0 +1,260 @@
+/* Copyright (C) 2005 Univ. of Massachusetts Amherst, Computer Science Dept.
+   This file is part of "MALLET" (MAchine Learning for LanguagE Toolkit).
+   http://www.cs.umass.edu/~mccallum/mallet
+   This software is provided under the terms of the Common Public License,
+   version 1.0, as published by http://www.opensource.org.  For further
+   information, see the file `LICENSE' included with this distribution. */
+
+package cc.mallet.topics.tui;
+
+import cc.mallet.util.CommandOption;
+import cc.mallet.types.InstanceList;
+import cc.mallet.topics.tree.TreeMarginalProbEstimator;
+import cc.mallet.topics.tree.TreeTopicInferencer;
+import cc.mallet.topics.tree.TreeTopicSamplerInterface;
+import cc.mallet.topics.tree.TreeTopicSamplerFast;
+import cc.mallet.topics.tree.TreeTopicSamplerFastEst;
+import cc.mallet.topics.tree.TreeTopicSamplerFastEstSortD;
+import cc.mallet.topics.tree.TreeTopicSamplerFastSortD;
+import cc.mallet.topics.tree.TreeTopicSamplerNaive;
+
+import java.io.*;
+
+/** Perform topic analysis in the style of LDA and its variants.
+ *  @author <a href="mailto:mccallum@cs.umass.edu">Andrew McCallum</a>
+ */
+
+public class Vectors2TreeTopics {
+
+	// common options in mallet
+	static CommandOption.SpacedStrings inputFile = new CommandOption.SpacedStrings
+		(Vectors2TreeTopics.class, "input", "FILENAME [FILENAME ...]", true, null,
+		 "The filename from which to read the list of training instances. " +
+		 "Support multiple languages, each language should have its own file. " +
+		 "The instances must be FeatureSequence or FeatureSequenceWithBigrams, not FeatureVector", null);
+
+	static CommandOption.Integer numTopics = new CommandOption.Integer
+		(Vectors2TreeTopics.class, "num-topics", "INTEGER", true, 10,
+		 "The number of topics to fit.", null);
+
+	static CommandOption.Integer numIterations = new CommandOption.Integer
+		(Vectors2TreeTopics.class, "num-iterations", "INTEGER", true, 1000,
+		 "The number of iterations of Gibbs sampling.", null);
+
+	static CommandOption.Integer randomSeed = new CommandOption.Integer
+		(Vectors2TreeTopics.class, "random-seed", "INTEGER", true, 0,
+		 "The random seed for the Gibbs sampler.  Default is 0, which will use the clock.", null);
+
+	static CommandOption.Integer topWords = new CommandOption.Integer
+		(Vectors2TreeTopics.class, "num-top-words", "INTEGER", true, 20,
+		 "The number of most probable words to print for each topic after model estimation.", null);
+
+	static CommandOption.Double alpha = new CommandOption.Double
+		(Vectors2TreeTopics.class, "alpha", "DECIMAL", true, 50.0,
+		 "Alpha parameter: smoothing over topic distribution.",null);
+	
+    static CommandOption.String inferencerFilename = new CommandOption.String
+            (Vectors2TreeTopics.class, "inferencer-filename", "FILENAME", true, null,
+             "A topic inferencer applies a previously trained topic model to new documents." +
+             "By default this is null, indicating that no file will be written.", null);
+
+    static CommandOption.String evaluatorFilename = new CommandOption.String
+        (Vectors2TreeTopics.class, "evaluator-filename", "FILENAME", true, null,
+         "A held-out likelihood evaluator for new documents.  " +
+         "By default this is null, indicating that no file will be written.", null);	
+
+	////////////////////////////////////
+	// new options
+    
+	static CommandOption.Integer outputInteval = new CommandOption.Integer
+	(Vectors2TreeTopics.class, "output-interval", "INTEGER", true, 20,
+	 "For each interval, the result files are output to the outputFolder.", null);
+	
+	static CommandOption.String outputDir= new CommandOption.String
+	(Vectors2TreeTopics.class, "output-dir", "FOLDERNAME", true, null,
+	 "The output folder.", null);
+	
+	static CommandOption.String vocabFile = new CommandOption.String
+	(Vectors2TreeTopics.class, "vocab", "FILENAME", true, null,
+	 "The vocabulary file.", null);
+	
+	static CommandOption.String treeFiles = new CommandOption.String
+	(Vectors2TreeTopics.class, "tree", "FILENAME", true, null,
+	 "The files for tree structure.", null);
+	
+	static CommandOption.String hyperFile = new CommandOption.String
+	(Vectors2TreeTopics.class, "tree-hyperparameters", "FILENAME", true, null,
+	 "The hyperparameters for tree structure.", null);
+	
+	static CommandOption.Boolean resume = new CommandOption.Boolean
+	(Vectors2TreeTopics.class, "resume", "true|false", false, false,
+	 "Resume from the previous output states.", null);
+	
+	static CommandOption.String resumeDir = new CommandOption.String
+	(Vectors2TreeTopics.class, "resume-dir", "FOLDERNAME", true, null,
+	 "The resume folder.", null);
+	
+	static CommandOption.String consFile = new CommandOption.String
+	(Vectors2TreeTopics.class, "constraint", "FILENAME", true, null,
+	"The file constains the constrained words", null);
+	
+	static CommandOption.String forgetTopics = new CommandOption.String
+	(Vectors2TreeTopics.class, "forget-topics", "TYPENAME", true, null,
+	 "Three options: term, doc, null." +
+	 "Forget the previous sampled topic assignments of constrained words only (term), " +
+	 "or the documents containing constrained words (doc)," +
+	 "or not forget at all (keep everything)." +
+	 "This option is for adding interaction.", null);
+	
+	static CommandOption.String removedFile = new CommandOption.String
+	(Vectors2TreeTopics.class, "remove-words", "FILENAME", true, null,
+	 "The file contains the words that you want to be ignored in topic modeling. " +
+	 "You need to have removed.all file, which is the removed words before this round of interaction," +
+	 "and a removed.new file, which is the removed words that users just defined in this round of interaction" +
+	 "This option is for adding interaction.", null);
+	
+	static CommandOption.String keepFile = new CommandOption.String
+	(Vectors2TreeTopics.class, "keep", "FILENAME", true, null,
+	"The topic assignments of words on this list will be kept instead of cleared," +
+	"even though it is on the list of constrained words." +
+	"This option is for adding interaction.", null);
+	
+	static CommandOption.String modelType = new CommandOption.String
+	(Vectors2TreeTopics.class, "tree-model-type", "TYPENAME", true, "fast-est",
+	 "Possible types: naive, fast, fast-est, fast-sortD, fast-sortW, fast-sortD-sortW, " +
+	 "fast-est-sortD, fast-est-sortW, fast-est-sortD-sortW.", null);
+	
+	public static void main (String[] args) throws java.io.IOException {
+		// Process the command-line options
+		CommandOption.setSummary (Vectors2TreeTopics.class,
+								  "A tool for estimating, saving and printing diagnostics for topic models, such as LDA.");
+		CommandOption.process (Vectors2TreeTopics.class, args);
+		
+		int numLanguages = inputFile.value.length;
+		InstanceList[] instances = new InstanceList[ numLanguages ];
+		for (int i=0; i < instances.length; i++) {
+			instances[i] = InstanceList.load(new File(inputFile.value[i]));
+			System.out.println ("Data " + i + " loaded. Total number of documents: " + instances[i].size());
+		}
+		
+		TreeTopicSamplerInterface topicModel = null;
+		
+		// notice there are more inference methods available in this pacakge: 
+		// naive, fast, fast-est, fast-sortD, fast-sortW, 
+		// fast-sortD-sortW, fast-est-sortD, fast-est-sortW, fast-est-sortD-sortW
+		// by default, we set it as fast-est-sortD-sortW
+		// but you can change the modelType to any of them by exploring the source code
+		// also notice the inferencer and evaluator only support fast-est, fast-sortD-sortW, 
+		// fast-est-sortD, fast-est-sortW, fast-est-sortD-sortW
+		boolean sortW = false;
+		String modeltype = "fast-est";
+		//System.out.println("model type:" + modeltype);
+		modeltype = modelType.value;
+		
+        if (modeltype.equals("naive")) {
+        	topicModel = new TreeTopicSamplerNaive( 
+				numTopics.value, alpha.value, randomSeed.value);
+		} else if (modeltype.equals("fast")){
+			topicModel = new TreeTopicSamplerFast(
+					numTopics.value, alpha.value, randomSeed.value, sortW);
+		} else if (modeltype.equals("fast-sortD")){
+			topicModel = new TreeTopicSamplerFastSortD(
+					numTopics.value, alpha.value, randomSeed.value, sortW);
+		} else if (modeltype.equals("fast-sortW")){
+			sortW = true;
+			topicModel = new TreeTopicSamplerFast(
+					numTopics.value, alpha.value, randomSeed.value, sortW);
+		} else if (modeltype.equals("fast-sortD-sortW")){
+			sortW = true;
+			topicModel = new TreeTopicSamplerFastSortD(
+					numTopics.value, alpha.value, randomSeed.value, sortW);
+			
+		} else if (modeltype.equals("fast-est")) {
+			topicModel = new TreeTopicSamplerFastEst(
+					numTopics.value, alpha.value, randomSeed.value, sortW);
+		} else if (modeltype.equals("fast-est-sortD")) {
+			topicModel = new TreeTopicSamplerFastEstSortD(
+					numTopics.value, alpha.value, randomSeed.value, sortW);
+		} else if (modeltype.equals("fast-est-sortW")) {
+			sortW = true;
+			topicModel = new TreeTopicSamplerFastEst(
+					numTopics.value, alpha.value, randomSeed.value, sortW);						
+		} else if (modeltype.equals("fast-est-sortD-sortW")) {
+			sortW = true;
+			topicModel = new TreeTopicSamplerFastEstSortD(
+					numTopics.value, alpha.value, randomSeed.value, sortW);
+		//} else if (modeltype.equals("fast-est-try")) {
+		//	topicModel = new TreeTopicSamplerFastEstTry(
+		//			numTopics.value, alpha.value, randomSeed.value, sortW);
+		} else {
+			System.out.println("model type wrong! please use " +
+					"'naive', 'fast', 'fast-est', " +
+					"'fast-sortD', 'fast-sortW', 'fast-sortD-sortW', " +
+					"'fast-est-sortD', 'fast-est-sortW', 'fast-est-sortD-sortW'!");
+			System.exit(0);
+		}
+		
+		// load tree and vocab
+		topicModel.initialize(treeFiles.value, hyperFile.value, vocabFile.value, removedFile.value);
+        topicModel.setNumIterations(numIterations.value);
+        System.out.println("Prior tree loaded!");
+        
+		if (resume.value == true) {
+			// resume instances from the saved states
+			topicModel.resume(instances, resumeDir.value);
+		} else {
+			// add instances
+			topicModel.addInstances(instances);
+		}
+		System.out.println("Model initialized!");
+		
+		// if clearType is not null, clear the topic assignments of the 
+		// constraint words
+		if (forgetTopics.value != null) {
+			if (forgetTopics.value.equals("term") || forgetTopics.value.equals("doc")) {
+				topicModel.clearTopicAssignments(forgetTopics.value, consFile.value, keepFile.value);
+			} else {
+				System.out.println("clear type wrong! please use either 'doc' or 'term'!");
+				System.exit(0);
+			}
+		}
+		
+		// sampling and save states
+		topicModel.estimate(numIterations.value, outputDir.value,
+							outputInteval.value, topWords.value);
+		
+		// topic report
+		//System.out.println(topicModel.displayTopWords(topWords.value));
+		
+		if (inferencerFilename.value != null) {
+			try {
+				ObjectOutputStream oos = 
+					new ObjectOutputStream(new FileOutputStream(inferencerFilename.value));
+				TreeTopicInferencer infer = topicModel.getInferencer();
+				infer.setModelType(modeltype);
+				oos.writeObject(infer);
+				oos.close();
+			} catch (Exception e) {
+				System.err.println(e.getMessage());
+			}
+				
+		}
+		
+		if (evaluatorFilename.value != null) {
+			try {
+				ObjectOutputStream oos = 
+					new ObjectOutputStream(new FileOutputStream(evaluatorFilename.value));
+				TreeMarginalProbEstimator estimator = topicModel.getProbEstimator();
+				estimator.setModelType(modeltype);
+				oos.writeObject(estimator);
+				oos.close();
+
+			} catch (Exception e) {
+				System.err.println(e.getMessage());
+			}
+				
+		}
+				
+	}
+
+}