Epi/0000755000175100001440000000000013142510775011012 5ustar hornikusersEpi/inst/0000755000175100001440000000000012773764760012005 5ustar hornikusersEpi/inst/CITATION0000644000175100001440000000465712773764760013156 0ustar hornikuserscitHeader("To cite Epi in publications use:") ## R >= 2.8.0 passes package metadata to citation(). if(!exists("meta") || is.null(meta)) meta <- packageDescription("Epi") year <- sub("-.*", "", meta$Date) note <- sprintf("R package version %s", meta$Version) citEntry(entry = "Manual", title = "{Epi}: A Package for Statistical Analysis in Epidemiology", author = personList(as.person("Bendix Carstensen"), as.person("Martyn Plummer"), as.person("Esa Laara"), as.person("Michael Hills")), year = year, note = note, url = "https://CRAN.R-project.org/package=Epi", textVersion = paste("Bendix Carstensen, Martyn Plummer, Esa Laara, Michael Hills", sprintf("(%s).", year), "Epi: A Package for Statistical Analysis in Epidemiology.", paste(note, ".", sep = ""), "URL https://CRAN.R-project.org/package=Epi") ) citEntry(entry = "Article", title = "{Lexis}: An {R} Class for Epidemiological Studies with Long-Term Follow-Up", author = personList(as.person("Martyn Plummer"), as.person("Bendix Carstensen")), journal = "Journal of Statistical Software", year = "2011", volume = "38", number = "5", pages = "1--12", url = "http://www.jstatsoft.org/v38/i05/", textVersion = paste("Martyn Plummer, Bendix Carstensen (2011).", "Lexis: An R Class for Epidemiological Studies with Long-Term Follow-Up.", "Journal of Statistical Software, 38(5), 1-12.", "URL http://www.jstatsoft.org/v38/i05/."), header = "If you use Lexis objects/diagrams, please also cite:" ) citEntry(entry = "Article", title = "Using {Lexis} Objects for Multi-State Models in {R}", author = personList(as.person("Bendix Carstensen"), as.person("Martyn Plummer")), journal = "Journal of Statistical Software", year = "2011", volume = "38", number = "6", pages = "1--18", url = "http://www.jstatsoft.org/v38/i06/", textVersion = paste("Bendix Carstensen, Martyn Plummer (2011).", "Using Lexis Objects for Multi-State Models in R.", "Journal of Statistical Software, 38(6), 1-18.", "URL http://www.jstatsoft.org/v38/i06/."), header = "For use of Lexis objects in multi-state models, please also cite:" ) Epi/inst/doc/0000755000175100001440000000000013142414370012526 5ustar hornikusersEpi/inst/doc/Follow-up.pdf0000644000175100001440000062407413142414322015117 0ustar hornikusers%PDF-1.5 % 30 0 obj << /Length 675 /Filter /FlateDecode >> stream xmTn0+x*$ f--кA-Vo,db=7oތB(q^N[q2TA\eY{Q:%uYLo]:c_ljiɇò-~M>:uH{-ubdjYUkOy .5p<[Pf4)Ep_2:dhwJpصb}c):HI[%!#ͦAzJFV;欽Z:+! &?:}1 r73%B%}%F8jgKiF5p0 Pi`+?slbyș@qT?ۘ^"1}T[LlwvU-wd8m(/}wTtQtkY'E*`‰~md6?#2p?:뚺kHW;r}A@FlOE"1<ju I87A Yєis{C!&6c4 ig|6fMe@1ɯkfѦ~[puZ{ƽH,Z$Dn]'d%5lɇx& LḾN;OM endstream endobj 47 0 obj << /Length 469 /Filter /FlateDecode >> stream xڍSMO0 WZ|4!!qހT1mځq qgGPv\͌ Ίb!M2KxO&DdQQw@%vKmI&@%b&: 8WE[Dk'O };:]7+7{̪"`D{B)^hVxF$lkJIߣH-!C ~+b@Tc\" "ӖMRߨTadžVԎ. 񂌥-%ąs9Z)1ki`oۿ_28)%|V`ӑd10c3;"I<ީL뛏4Jzՠ uomVt^^X;69pD,~D!s~ΉzVN]Uwa OF(mhKyɰN' endstream endobj 52 0 obj << /Length 2162 /Filter /FlateDecode >> stream xڥXێF} ̞4ijpbc7k 8Z(_UռHIl?jUn)e"_4u(tV%w^LvRt7Q F''.ðjW0p*'®ҹPhW$V+;PkKiGPjL/-s!kιz5ʓW6W?d~MP#$ᬁ:yw j5NhdNa߁ /t:( ;e k@ڞW-OR푰WY;TS݆ۨ}sA7ML >nS#O7xQ9\0Ȥǁ3 l \^`~a?˒3 3f-]_ h.\H r }pxdshЀ*DFd\xf 7►E6&aE=ngț ӚeĒśܔ]t տnWGn#;77Λ[Nv n@]q;-UVPj*\}4juqyr̶cNh_X ^) ^?Ymt5+6_a4̌*2&<,Rj*E<$pvCX OUP( ͑\'N r?ԈP&BYT`pBjw p Ռ~ IKf;{INQ6 YPٛdC|KIWʂpF o]pO@X* WXIԡS'ZPY)|OL3a\Ht!꾣ؽy˘C'މ<;iĪ;0( zN{WiOS )mTΞ !2y jԒ6D1$#wu!Ya#Elhq;ʅlsRxQK|MwBƗ[!mچMȖt;h;Ӽ՘*);J CY|5w6ܵڗa(cEn՘f-T!id6B?IaEk9̫P "F]}s04{o,q[~zGXV^w 4aB(0籥e&0{!V8wTcnղ̣Zs!q9&L:8/@Mڲn@9pEPkE'7)VϞ'.yM;"˫/?hjijהrl SIL( u)P05w-S_/>) D[)J 8PEZ.s҈B \BJ +X V'I">H,~l{|X2L<|%co[,'9z}p/ [q2[@1bArXGua-|/W& brl#V.ȁkY>|._c^ie<".Ǡ 4 7SV`j{V(3&%ȁYj4p啷8$˜3`L]'p Nw@~p  EEi>MW&ОXCpu3W-so\pIlp-9,s?YՑbDC7}_Pmampa-{Qca@3lWG<NPKj&bҴ^T n endstream endobj 60 0 obj << /Length 1882 /Filter /FlateDecode >> stream xYY6~CMEi--Ƀזwwe'_rf(="}J5|Ր<ɔ%GKsyO9U,7&u-ym*1Zݟ.dI1` ܮBm-M|o{oB4^ƟU ;#b# Ρnז[A^gm3LɈP@qT"Y'MR U2 Aȅv_󒎐V.!UЖ۠gCQ.p= oGֺm[,".45U4g̻ ]VM)Ƞ=x"eBߊ j Vh L#-Jn2r[AC JudUa [?D=t[|Pa@N2=AM{CrZzE%ZISb4fv]5$t-YScO$ZZc lTEMNՓ.oL R#$+l!9z!5_F&Zu8G5+:=A3h2eNw.~tB <.$KX+C"(Bt⹶yvMՓjǑuىdĊdfVzm B-j+Fs|EʖAO[46ޜנFolI(WiӾH>fBJXTΣϚw΁VX4 w3W[T߭\(A3o5_q-ώ*lޜ&-+|` n" }p+reע=fb nK&RH5p}'|ߗ]&ikJ򦽼a~8ϙI0JwUڹ4ݤgvK >Ip!>͈{hL 7*7vl|3 hTNMPaUFSXdBo,(p{{@l&e$5L rYh.E+tA0]FO!0xKc4LN_2HÎ UH[[@ B~wz,wqOQAA`+! {! /CƂ)Oj'=]+ Px8(t #ʘX,ay=QaKOIrEgJy"&~bƱ3$czj:ؖU endstream endobj 65 0 obj << /Length 1997 /Filter /FlateDecode >> stream xڭY[[5~ϯ88Az.+ PA*$D mtCw%vŗ=ɦKvgG Y4~2ZJ9]LEmEc\QWNɼx]8jt6#]cݎFrN+WԦ\N^x6t-j<(ժrŲZUA-rޏ+~)ԶR0׀dB+aLUnb^Rn pů_QQv5Yv4vڔ;vNRWKRKde[cmS?7v;+[9r{T #m,M{#!PþJ(r{D` *h٢5â6=L99R;MՆρޖBXKp͢OkW.Fc*kliW ._VYJ8VӒ刘^r.蓱VNFcP/HkOwdZaK ƹ^"TJpo8PjH'"y!"/W3r~I(,d`E(5Z茛܏#L\c dbKzͅ5xZ,`xK@bG,쨳4Q2tP`v$DH?cN{u6,}T sXCqP mhlUpjӞbdsChEmUhLI{>h*h)0QaeSx]栊U{PZ:*/lĻ*[=ضqq"t7-ns:XNWISqmf6ܡOݴ&:` U)Xud6&"HkoYuֺ F)FyhöOy5!=3dU=yCc\txÒs*U#GOX]:&順ڴ­rV tؙHţI] Ru!ƛ%Y i1RL,& .OT4uXۂ4ţ ^1Yإ,ZpkoFT tBu u"w1 !L[Vиu$0OM}3۰y6Av,3gEmj5~ ^a g/kdk8x endstream endobj 72 0 obj << /Length 2178 /Filter /FlateDecode >> stream xnF]_A}P3٤HQ<2mkcIN̜QC[i_ȹ9ۤMF-sx&cI-D_G%O*) 0p]|oY4) 5rg"~d=. F̒ʒ`(MX m#.Dw=$b9#»AseQǑo(O1Ue5y |#r5Y:X,p)''-2.Jb2OW kuYݹBO'DڮHӌ^}RU?{IѷNm\`=@#.#8 I ,G~OE_8-ȴtxT `%}bX,W<ύ)R_>-POKK1gcIfWkRѮ|^?lZ٩kDI#5o:jv_p9я`zs◸xg`Eժ= I裈4G/THΫHc76?$q(-^$<|vk1"=ɳ1MA"ɁryQ_CN: t C\$ !‹fބvi!NJ-B v}8Z;$)`?eV!{rճc.tp4nui{j 4`:V'&8&8RgYȿ rNKbO+c2 ʿ#T0V۽J#r8ty(ba8"O9 J!yO=HGcr&Kpg <ʽuq"zGkx `o /#1aud͆' cƕHTӝhV* 4km!tV!7^<_d:sȢElPExЙTZ%,՜k!cYrZL9vm fXҎ<{Z+R+8+C KrȀi19iݡn"UU'QӳC˓V2S&jRa7u}`wlj -4ɗ|,(-wχ,b/˩=M (\J˙U6%@t%ϝ7muEx׊N =~U&, OTZ'!R=O:iNhMUIExBP,ܛpD٬HNs&C,(Jw]ht/IG}&ΰcnk,ҖU'xtRƭIMR?Yk#H%echl>`b)/%F_g11i%h3B VjvQm[׼dOc@OM=u[Cc"KÄ{zn7 twL nK~qfۃoxC.GH}.$LN뻏¤X I'V@Q s-Xww:hx(GJJHsFɽڝ4նZUp1vO7{(@?:]@:.MVu_lt][|!f:ԑR8]IIcMW*qGYnQkٞmeK<Uei5inzތ 1]”OPvۮ 7X vz`BȒ,ÔԴԖC-nVRzqOTе;T)J#_n^{/5 k{sUw5ߨ Nox0=rxS|⩼0톛w6:(:LU"SOHL7^\SNhT}m 40dN~Ke:&IќuKϷ|H^/_\}5n} endstream endobj 76 0 obj << /Length 1494 /Filter /FlateDecode >> stream xڵWKoFW>h:EDiIYD$)RL-(ofg)&:urMncTM$p!ɳ`aY%7¦ܤ[yڹӇΆ?40<4i=| Q82Pܚ3֪4Q"1}n1bSش̕6!ԙ]-g_fO'}˒'T6$K|p*xman[TqLy]@ !-E3mg_ZnX2Vy^F p;8; qf/-l(0!0a*|cY`Lz+up Mja$΍euAcӁ)ӪYi~#S賊q0C <ʰT'@x=U~w^@Uzu܊}}(]~PCyspsU{ Gn5 I51!XWi~[w "x.7bNh)f_Gyɺ=A1v]ibLڳ2l9YbNUBhzy ;geN]^gi`}S{f5j۪D2Kf\wa^\b}asC i YpK;9J;yfqǰ E([@ۓPKE]<&I?wI/g~ph 9| <3Z@A㥫{<{1:`sOkNN78?"` F͎A]%B j?BZ/4CIXD ,| .ěKiWr[n$Iz9+@x$*`-k&b/`1Xw#`\b^GœuyC1דc$ NWbi{p%UߠPWNC8:ŵ?Rj4`x~3B4{1dC|{=|mX fF&G!a5v9!8Ƒm/P|sJcCž{ x%}O aqÚY9믇f_Q_ZKh%FWگXTΡ z0/"_?b Jl2rv_YJ-減l]v+[ą;.JQTF^dL~h[TJU-1iІ/4^t=.)ve܂ eRn"*֚]Qxlxp6 Q` 3ut I"!Cb!)3v݁G# wIݳp?<.@e,t/?K$cY,TTb8 dc`A'jPx 勬2_eDqR.zT.y)M 8qNZH6)@EwEwC)co;>Ҝio4/ endstream endobj 68 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./Follow-up-nicL1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 82 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 83 0 R>> /ExtGState << >>/ColorSpace << /sRGB 84 0 R >>>> /Length 7109 /Filter /FlateDecode >> stream x\K,GR_KXГvF4H-@@AF0^s"3"ldU8qDd_뿿AO}oBxw(_oߏ".x÷;WR^_;?_i}?;{x}Z~|_ߟ~zO]_1~=˫wM^g o=o˿G7?owW<$?+.IVN?qr}J~}}?;{x}=>ۜ6U1^Q\L{ޚ_ul~ޙ_k sX1ˢeG폹ly/vgwW3+˻:?^1'q7ןZ~j[G10].=l]ۻ("r.`ea2,V ȂD1qߡw TY~{`7rߣ!2aV |w;DYw?@+3bCxQ;gRnLQfQǕȓ^;#D67,v.v J2t_X-wۖj+.#w=YKWV"&A#6[hbGd<k-u(6L찙BQ3 w`\LP dZI̢#uׄ;1$lޡʺ``R2f! %V|a.v`ѱebKcf34d2$ 6kw3d.b\k$ !_7C+k#A7#%g 6$ ar]n!\6'+FYA_( ذpN[픥V:D1Dً⋺$}Uႚp:I{g6)j#FMY!\~ȅ|4{&Xy7K}XAQ#fS4‰B(X~Uc ^A#1} NH=in’Ba t!acd́`ݠ(IV^џLnB VDʛ{R\US u$oJمl{zݲc%YS0382Fzm49JXmVXK̴ h\\(8dQq-ϓ1i.ʪ1HE˞ 0{% /d3ֆޜC!Wc'4b=@=a0+eN9!wE Bl klINؕ=M ˳ro '2|lg  %{I3#iUm\ 7'LdlLLK (ҬOJd >bV\C ɕ),*$V8 JmOuV8梅,`Ջ8n(*E!&ᙸWȑ D^e*ZI,CSqդCb7;_\iۉsx|cɱղ8~ 2= _ \S39*m.؈ʉ&[Vne b2Dtή6RpML 3|wR'F j*XKgg)hZ>A%u"S N!fv6ER#8)/-ɕ<`.#\Wg4{1XE ^&w}†Y #$,KUVϢГˠ% DѓzTKgY GQHU•Z$?@-\XҶ]i ]V|W}E#tM^'Bc)R; 43svWuZer1U ef %;fFzX$-/5W\:QA䫵^2_zqMhCukVnLtW ZWs{f"-I K{tn[Uq~uWΉmD.NVĬzІQS)7m^+>YFJܳEiG勶$U- :< ҸH3{(Z@!LWRlD Zk PS(M,- 弈Qz"R5vuѳL B;+栰X}#(J[( VAB_~:I5Z)Ő* dbZC!"[QK96_z `r6ǑLEarhZ(dP6y8mAЄ ͚Av<`%Ps H 6w XVIQ[`uڇb2f.9:F35G!hhUZTx1"p#Dc O&86hQԯuhie)A GC &F=w.\aޓ$" P'P,+7KNj5>|h1[+*xbR4kۡqJ*1 8)#TlX)v_{hcFc)yB,UU&dRІ<{:Q67j5:pbTsIg^lpǦTf)dن+KВJ=_tX}r i5y0VE a6>N[!;@sjuD}0qٲ'jsjhEnWPIP׊^WC2(G;: ШQmEO3 QI+danmvk 7ֶ&ɻFCT +8:",IpDF+^IqH|%Hy4'4KoQ^ c* =l}%;Q D ^Gdܤ11;j\͹jI I!UfT;H)+M6?"{^ N_QYIYvoBN >Ð {b[-gRԽmM9nw"n[pޓnwsGj0-۔Tvo;EՒ(T QaEo΢9i]%(\$iTv"{tD`4 8 /a,Jq]㤃Ew^͏+\j rR5AB L m ,Ӻc ^[,xb'TEOb.83zr |N%ͨE-bҼ4mx|g7A`,j/\Ra5k"dz ϱB7/Z$'*}`P]M3/nٛ5yOlZpԬTTZzK5IBjQzkC[E(G#ReE;95 En,1n װnVG)yřz&ۭbԂyQvS餌k)Xg]CfRSwxhw jsR>nQ[9]N7l̜ohాEv^e#eF2R4@F>v~VlP<,=}[Y|Ufe,B@G#f, TD Bz}7UEwZѶ5o(P` xX[.@4O*UKcU=?Xz {)yW-pg8&O-Z6%oz6&8b`%`[>A#sFLkD}ӌIY>剫lVr%:MNhܺs#',A$f݂#beQ JQx5@1g)ž;4} 6.icve9'Շa#ESxԆPf]Ť]_mOo!8{4m2wJ ;Tt❦..,>3Þ~iF4K^[cc֛}qm0˸CdVJ Rlu)*/Hh>V5Xdp;֚qH< z@j$ LzJ%[$>g'*Kۇ37GTѯv %T]_$)؇DѴ8j(h‚jxzVo{94yZf9pTl>Vf78U+՘4]PU1t!s;mN{5AXM5bQa)U WGqo؉T*{\lTrRn@$Z(QX*"~ q 5'_3\Ϯ^_pU$[2-skI7)pen$IIܞTԒmM+xO(m 8/1mDQk7dg1;MP /ƍ]+*6n: EЬ6WkR5o7zRyD 4+(|qz:Q߯؍Q;ǁR۪ݙfj_JXf%7Ai#j3 /"fҶKeeru766g>vc[g"'٧~ O%S JAVE:Mͧ:D1ԤD+JՃhSĖ(NVJD_oN6fۛ#7tqPXS35rGvd4lB æ>TsoX֪b| s<' j,gP'X4 }HP3ֹ]s0oۜt`FnШAc<6e3$DŴGk^ת*VfqvLk{8VWT,,'iy`u{ 'e_h|?S-Ips`-bA H٠vBbݪiU0w :-]L@Pa)J͍z~j#uFR9[7O9n岚yXuci;ݎ'۟h,~&(9UF-%9oSJѿ(hvh$P-f=P#QIHԳg*Q=jԽz'׮ u[Iw:8lׇ@N"TTL+wA}kX" ]pjd~eZlM7YQ91P vy\BPn+ću>ܛrsK*= qSR.e=<#x<-Ǡle;&uDm:Q `K2jQ-%Fտ:}dtDzn=?|_[i endstream endobj 86 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 69 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./Follow-up-nicL2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 87 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 88 0 R>> /ExtGState << >>/ColorSpace << /sRGB 89 0 R >>>> /Length 11535 /Filter /FlateDecode >> stream x}Ɏ%Krݾ"ԂI- I \\TK@/!}=<3nzR@QWnnco_^Ϗ՟{uνoך_?~^ۏ_{?/3_wwUk/|=Zrk[^v<靇ӿ돿/aos۫u语Zoݹ~˟x/􉏇_e|fo ۡ۞|MЗy?jK?r9_ˮr9_1Au\doG__`?kY_kj!̎cnXvaݖSCVRt]^WH! Ɨo=\h 4#+1㸵w4جyǔ_C;XauBnxHHb#_ (t;0rr:oh[rF@eFVwㆧЁjz =r~"|Tqc7-Z|䞃+xp:פ.MЋch'Kx&;;@ cT]2Ii Q䂇}@g;]v&gl(k/?З~|='vXDst0I;=븎9$hb؆xtF*8fnϙF Uhub)ΊxH^kvlLJ$X]t$=<+ֹVY@[8YgHG#S "έ :#"քn;1ne\GIμ.EX_ zXvݣҊ]i"IOz9gRQèᤌn' =prWȞ.d;3Jb&mѵ(y6X$uN8-8΍ˉdgk$GCOi5ٽ=((\H K4V{@zxiqFӉoo+09:͞d:rξ"fPۙ]$쫫cH73?ѥ{?[ې^5 ~P<МG9V E/j#4=|jt3s1BfcqcWoS>Bă#p",VzwUW9[r><[pGlsrŜ'5 !Moc jSli'xډ=HmH<<kmLۚ*9{1;8(ԨG1MF+JKpBuA݁`v<༹i~xtY;̓7:Ҵ|FV1fQ$?85\Fgآ?8%tMfu&XywүEF%qLyha87SO" 7-@ ;2 Dp8:JN4ΐYQۉIF#N\NGv9SȼV}fO9 <6,[D#psE%X7>8Ȁ x=>'-YQȐ؃] GBqz&O94K'n/|gY}J/9֙uU{g$+B;jY==* dyW'~dÑxRZ-gH=\8B&(z; 'Oڵy˝Y dKO놪|EaRJu'jaqX{w"c8W,p@`r#OY<*a/zmSW$J`"TĈtThVr~{ΗM!1.C7u$D02]ջjqOJ- W{ą|C \2! )9FWAA37'6j.ye,+̖G=P,mOhy%K<؉0])E Wzvʰz,]0$cƯg /Zqvzw⭖1Ԅ|E{b˕垳I̞['o{0UG5T_:TN(e\ѓ@olˎ1zֆCӷz"T6rFɐ)7}ì;LP8r}B.Ru9:k0xG4ۇ!SOK<4W 'șL%V,22+CdVPFf{Qrgu)tN+kcM-kęC-J!}D'(^G:T׹y^O봪SvOj}䃓e#?ҴW_=:ʅyr؉޴)]hy%0[u*yf~ ̶ȨôrOP$ؕpݜ8pZ~+s@]G&}!8y'-IDVoX<x|Du*Y+m<[azƆn;/Rluo͕H#:mU:!|$Вk{zG"1BӿM0 +Ry=+~k)jI;N[;SJmp"8M/w "2YINGt8U) bzeW:DSq3dmS+m)3RjC_c'Q\(J8ܡ1ꉗQ5ymFC-e8v]-UtUZ?g%Q-3xʤ0 H7+'&˓?CfIZ|_+_3_"(_iz4 'rَ;Y=l!{x"NV9ӷђ[l1')QETZ#=l]G e,[۷LT=^'T(^Nd#RQ~ 1B;ɇ zOjGs]} V@&li'YG[JVY ҹT_*HYESo$; '-Ez "_ta&=qT9Tr1k}t?rA?DJyV k}r[-KX$މ?[ 7vPT`{]z3?$I3wYԺ?HH>kfIk%")I=Jkn"0/tJQzf*nwGm$qVyi gp]:z&$ /uu7ujduz}GRHE:m>y"#g@ϢA,ߊ;I^gֆ U2XHN/Q}[d@`O0"|Rj_jem3J~K`~E6Q,ga8=W\i_&@e'h9Ut?=IzgAƂ\nmgRva&IDk%G:=[-<Z}C}~eJ̙'>Mg'F`=uOoV u]ZOf]JbcX[et=ιºL$sk U?cj~_zxW`=F8J澣p o"plDEz^wXI+M d5FI/15brG-Xؓ;BΒexϴ 5J^K̥oԪFdQ ;gW~Nan$IW0Ġi)zFY_Q.q,zmVLYG6:W6l?j{piI4?UH-;!H.GVtn:lgx $D su0bŇ![+,*2n;?w1FebTx )t|RW2 Vq!_>Z ̱P {J`'t;*r |gmບr}Atkf><_g1'?^KGxTl_ KJh:eTނ٬{(jädm|@8~'XbRɈll3'p`t_gV:!DÄu,z?z$P̮W ~֐ܛMF%LtvϽص;Rd˯єMqWd=Kg@YkTSϴ+ ߻1跾ed3GqU΃UwYPzN+m޲g &چhmJ]̬9qqJnl'ì1u/ r =%aݞfTWr&y+DY !B? xn.0%TJ BvrZ㌌o0|ek#j "+;EI5p "9I"R׮r}p#$;]=kŁ8è-p!9'c\Me_#hڀ餡a3zT^ͲɔqyCt&u0r$ߦX Pkr5Joɮ UԐkʵĈj CqKZ9AA+hLک7$3̯IF!>`6n^Wf1.?~/T!Kk,Kv33+ecu:#?w&%c%oPnbHVblhf~ jc#fGUdǺ2 =S2GFlەo[cY׭yDlhg{{~o.M3ܨ{;jDeUzkU/T ")^jil %wTSĞ#O#;ӭRrj#?DvS \))kmKwo$q za: g]"j'MVE<ʥk*3Vs^L;CQKE뚰jw'kٽY:+0̌fCnӆE"j&Ć3[sW}Zƴf-gA" G= )$DIϠY! ;o$F`0O<8|`gxVqUhܑȢ=snZg fQyY=9oYepA0[*~̬ir) Fg A:gkNhHݢl_Y3뙦&b`W)1V.ZԪzgnCTK9=58=v&AuG(LB%/Н7Ų"ABثxbPXlYUQ/2n[ܿhŧ+t={a2 )zP.dfE#K=jg5u5g{7b,Qt_?òC"q@qĂN#cY3i OgºI˙G?Y3wֳb{RRxPME)u"o+b0=4'vyi_peºa ,؏y$2dfvAPe*G34' xTz:_I(!uϘ&|DuM_#&UxJM_cU{;;yEţ;8yEdݤ[0q2:o׽Bsl52(Mg#{:" ic# E^'ʚqLN))ϥu{9y(7~j&^΄7^YF$έѳ_Rfa~)e5L4%HqG;l 6Fh'WN/A?}n֍.YZ 2Nz5\=#ǪpY~q=(>j;MANzr2b>;Ǣ`' m6BP^B.0ɔV^{ZD L-!G3/n.S6;JX܉w}-뵤[&\4NmfwYݍm|Gw>jebOqhM|Gucz1ss{O.6diN,2_hM9YnH z+s~c:W'{Eau *T:I:7 BfV}ƕ8W+w:Ug!Sf H,S6ijҘB:#D[ѼsMװ9ɧNfj$ԪU)FɌPsYg,k6Ui6tB#tGz6dفSolTr."F-:AN%eN<HD3괦4F<8tZN=ă2ࡤDq6u:1%Gr3KDr+}?=Xi7FzVkQ7&mF/c8,jA4^~ZذN0d=>#,\ףܿ6t5Sj<8uVXkR1W I _|i5+s^yA)ZM7]unTf$mh4\VVJ>ɭ,VI'@T Sxd4N'Q\ZX-`]9ls_gm)%j&*pQ965s2u*wg\l~L)$ r[" lZ[ꬁJ. gXF0r<#WQ챰0/c蕯lb_`)T@pdAp]R~<_ʗ z*)>1rxA+ =zʱWp=*G)lE,a36='{+5ޢ$ji68/ &N_DȓTu!ulQn)k\On9c2Qu:WAuWT &Ϝ2υ.!ɛWouv &ִZ$>X*LMd6 LϨ9L4Lk;*$ #,dSΰT]9ĪU^:wtESG!L8Âȩq9DHxl+_`'hr 1Q?a=FQPK0m`QbůL>t9_'㚏lAe 7j\?=eM4ˆyfVu  9u-N奉+OM3x9?,0XFxbJ:R+,0-*+L5Os.\7X/㠜/C%)w/¥"*Mʚ_Yڙ0D2cWF"]Htg'Sq6.8[Yf]-!ڒu];ε]ƥ}@7{ĵk+\AR-R KGa>ک cxҳsY{&\{Ů|Z^;G%jϰ.jNއ.$$BwJ1W^mY5Olq-g\]n7 \G!TSpgϩv&'JR-3AC>2AC4hvZ/փ&)}(# naG FfdРzP_Lc+inNMDiM_'J]s])V&"]3]ڧ8Ld /o1 H'pxJ>BJtKaLE; 9~a4ezv& i/4e nA'U@nfn:>T5l.u5EK)\ӜX(>z־)Z9QY{fyPi:9ϭzvpΠczHN&:MEd!A0qtO3kr Jמ2IZk%TNS՞Fxஈ$p:?2r{D~;{K%k!Q=i;)1l/ @kEZ:D+>*bZ3Y>V_dhИ+  Pޚ ɻC&yonE|sapN^ E,A2U4ű\C YAqE7+޹tlA*uq3F5p85撰*-i3_CY JpcN\wo^7`,Z]qd,sjM[5T_X/+C%CV|S+%[eh̸z] 魞'JWUdEb=)*&I+2*+)b$ԃMdbBIH~QT! % :s,ݬ n'~ᛞޗǯ@=u<WR7 7 7n\|\|<~<]nucou?u/v_yo/@<7 n.[n jw~lәvvOظX{ nd ptwyG fw Q{w٦o9w/Y4]F1w#ol Qw9?~"~NNf zf444Ux> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 94 0 obj << /Length 1287 /Filter /FlateDecode >> stream xXMo7W,X%h{hr)C4ْrJv 5(qٙ!eu]qRuNW˫[`7NxXWfa 39ht1Ѯ>3-h:Gh|l;v7׾~⁐q/Z% w{\mi!lbf9cTU%iZJ U=meo3[ʒhp)NZ0f)1I41唳@sA>-T 6paRME$6-ֺ~[o }3khOJGXC "̀7!@Q{$2&2G'ޠVtzu]2@'| )D[_@m 3`ې`4fXvܩr,i`>dfX*Av$ٖ`Ma?m_{zF$%,R}(}?]rSx} c O\Ϲ*1 ]>P׫.q(um^}Q$pa_'nw0e/ԏ g>a+L_3:6~hcҐxZcp;̻c^Qݬ>XxW/SyJ| 2l))q%:/ꑨfMg܈'ٔ(/ ki{ȘA).0K6 DB#0 eNew/~N1UNb+~avqc$U&sYߌ$ SQ1 -c{eJ.7xrt^8MTJTzI:!1֮iϛT3EOgz[c9/˥0M?fͶ ģ7kGppȤ"u]?@;*bmJ(\Z"tW˼ HyG&YEd'=>?̐?Ly)˔#mфi`k5=<ҍ]YLk_]7_0 endstream endobj 98 0 obj << /Length 2103 /Filter /FlateDecode >> stream xZKo6WEFcV|K l -涻N%gɔzPDQ<>3ǷzV9gb|[h^,ƟFT M䮇T ]-\svyɫ/nUʅe7jMc;`aȫmu50궒Om-s3z3ccϙf<ߌ>} qmJKt:(%J̈́+S=OD4~,bjk;o?\չV:_ nc(X u)MCE|G+*R#a{& |qכ8 xq'S-d4nT5F.k|uEnIUU,0 %{.Qv/%ƝNOC_8.+-6MhҽIoTiMQ'4HU0޴iwx|ѷȕdC־!8'6=+2\=A BqABtg@r9%8!GG+`7F3}jA.}*s+z}_XiCFNyqT@ά(*ǕRix7dYL?m\mjOqlWm^q!o k `G1V;)zdZ!~DHj DX~)e>˵8?{ܓtbse"{{g^X^ p5Z$w~qa$ %`ʟ!u~hp΁io+0yXh!׃OMB ZS8ƕBxEl6Uf뱙alD6]fٳz3'ͼ[s=͖El-q`ڳ0EYhuxJԡ.Hy̒4n. 0X לPXso3N3x9G|-Ab6~5 G"Ne[Bs>~_;>!!| kd!|2x($_?| -Ab0Z>8Hb$|!2Mi$bPSg@뤿};0"|@8 ӧ)Bt`ɰ`x +o8>J7}| ta|DW#q>y2l @46kC|h 7JDLڷ/oO*B͏m],NGDUh ##DY78]M講> stream xYɎF+#$Ģ{b9d`0,iDMFrl}j9'Ɂ`XzU]z]RY_'Lкl7iQI]x?mfN< ?3=Ә6!7[3=k\ .:c EtG fsnKV^p䯉 .X7*u>; Mq<}N@ZU_t'oL3xLAlk{xq>:<=ߗ8hnaſG;)gY)0>ĈkAzEa 3ts<}Ok8[E+>R)K (5r*l R27jzӏ)kG+@. 8rtCR#tk/RT';qvCБk;.cY=ؚ|B<8AW/_-Y'Tl5QCU^1V5Ʊ"EJk|ɰmCIۚZA7]Xu۠b*M;*]#V%Ǡz yVw*1VӯnT>kThhՅj^PlJUpwrA>eGUVSP{gh/)j[N.DS"kE$w%WvKB Nі,ȸr֭LUl)w|Z>B&)`av6?K4u\0k1!KR*M:fq]'·wzTȶ$Po>m L2O*y|u>e8\T!VԂOsyET,m.啰Oz<)2b2 @;8 v}6IXb4utZ^xlL+}tGB=8l6tkGg!&M˜2T"jĊvoPKrw%ǭݚ5LX.F!PCJh̀$$b zUV'J#'޲ӝ$9^Dr`C0T{֯ϫ.ȧ )Pg]3p7f j=Hv \8Z$ n!Ææņume{**zzr~-0MZW|.|G/V>*{ Ъ)mÌtb=B'Yif\syé;78CGnxl ckpe\KZ|RNB]6^Ve ɲȘv#~0йXB òE6 ͏%#d xm{=RZ1@{dAȚ'zh˰lNK6:e=!%`mͯ4֊-0x%}骘Ļt̶LH.$`x{:ȹ>vȐqMgi\oiR[ ./~4ҩLLPPZsZe#~(pa(Ϝ¾g% PpdD*Iϖ}ARV2'@T@-R=dR뀱P)Orި>#>`r=jA\Ѹk70 3A!CqE+Z`:x#XW9;1Hr"9*|[#fqmoL&U$GNx ' 6ÈG׃b.͙.T[;?lub3߶RG ?aQ endstream endobj 106 0 obj << /Length 1354 /Filter /FlateDecode >> stream xYMo7W,X!9ݢɡS ȥIڑp~9.KR:˯y|r)]|*t+o bN _ M|M[By%ni|y s\Y&$!MߟwLBy|~*-qPnn1j UaP^'b0iLm8[/^PnŻ؄ׅVPq¡UlH_o/tΨSZT}lDxѵ+ Є<P*hKgkjM?@ZSOԆ`4kzq -a4+p9 XRiAqMdVSZa15 UM^fxe\:_zUw{5e":9#72WUlB㥙RĞ+2H$3NgOgzdؙi/nϮ3qAt&D%T`Kk)vfnL71mKM͚8i3v]i߹KNiۅllMWt*qLG@b+ /BKc e UL~\P6ԄG 51P;$WN5I!/{9E|Yۊ?5 ̍k/,6~w|@gi&Uy-ŷ㹨Kɠ'c#TNmiv _Ns]JwXLPRz(*mbԤOc ] 0 Jعd VAl.7>Ȯ Q˴6Rjs N$w71!vE0ZXӖ.n_]'(6JE]6Z*ƈN״]$aMi=,^!BNb3G 33=q914Ōf'eZw`: L{(qjg;s#,2O>lb3wel'GC}l_#wmFJcnʢ 𾃮Nċksk:珸yNI#N ϥvL#6Y:$b7yoe{VyK^ke^k[6.FI(fb+|oq=z{p~SKlJ{h?iy.k `x0{xcCѕ6ѻ; Gmg`>@N{c 6{^ XyT^4|ӊ D ,ޣNjߝ>ƾ(c.p8Sk$Nb[4lCnK!h~7IxXгmQ'֋T endstream endobj 110 0 obj << /Length 2137 /Filter /FlateDecode >> stream xڽYYoF~ׯ ٓGhӤM=P,ѱPYtD:{@D9۹?|s)Z5?&HYؼt\L,8JhsSZ b͞nbqw]- uƊ/^*u;t7M4qкKmIkk8ggf*2j)szbq^E.wHw=7Vhw:y&R1e8mseKvK JWK^ v swt^^hd@nԠm)Mn>h}yBQڹ@#4"V5t|4TʡY`u11 (KI>tޱ0]o4@f"XE TFH+"B ޟj|ʂyʎ?3>|[/#jz H 7 -텿"K >X$ֳ^lcD/i(KlEKuv~3hoo4 L8N#\-KCPTd RTC9'b?e#]' dhZ謄=M|˳O:fJӒXH^ݖ\b;,Σ'0#M&TyYޤ` 1U;ts%M58vn-B?G!lmQZ5xGׁMz5GypIVE^8r;bj9ҭ7mtw,ι Jmb36co%&门!' <Ӈ_SDhB:~ j\|cR w}>8ui"ZjGy(D-"`M9DEVpqv.-o1Q4;iN`*mnrN|dyf Gp9`Kr-~#U~ds x/g$8' a eI좳SI„} %~3MO 1J& ;o< ]ִаy;<]NYb iUON̠+s%AyR͆MJe2pux :)8uMIM)e`mk[6z}PG/]x+aS'tZ7zT糿i endstream endobj 114 0 obj << /Length 2007 /Filter /FlateDecode >> stream xYmo6_a+ 5Qu@צbVc+bix/(Yv}>(r{㑑㋱4q6zR[dz+EmUVrx=u⒟Dnns=mex}߭;|ozUE38{V-UvB:(+XUxlGCEUz+b:}X[/`AS)T/.UaqȔcB1xq5QX 5qWaK/GdrUcVa2k P;j>N"}]mUrpmwkM@Xwi+7_@nsI 猋+WQ/xXLWsr*7J!OpgUap,oR> V^l^m v.;9>S"e:w8L Dne{4\l s;GtA=ه Z}ޫP'SL锣 iM.3@]Gш! ,˓(Vm>r;BV#|I*+,prOV`)bvBSeLhT1 2$ڡ21E=Z Ft=JO47@E$7T&fd|_ Ry6tښΪG-\*f*uM9a9^])R7~8`=٦vݱ,V<&c/gMU*I`bΒ'%N ~VſaN3[T#Rɱ9|p.֫bjN]jYutUcYJ Wb%Ga(<_r-/ǂ7ۛ{Iu$TbI/M-#r-b64Sy>L.feΡOt%v:+yQ%Te(QZJq'׊S;~,G;0< GSXBodl`e+<#5X 9dEue°G-K>#*]M:Pт16@alO i. ͧ3ɢ&[ H00@nu[Ä"S:y:90QNˆf7QxPǡ򰨬&D)!s:EXDXaQW/bGaa!J7Kǂ2@|d) 6Yz.VG^k1D%4D2*aȩb*b- e}j5RLRV+hkD9NNr_|e~C7*[ꢬBE{s{/ [g _;N"{,ߡa.ҮK\w*x ȿ pbyͥߚN q :f2"Ç?{`g~O%J{H0 V{EJ;a5Wߦ{:7 endstream endobj 119 0 obj << /Length 2138 /Filter /FlateDecode >> stream xڽYnF}W0!S KГ' 2AH S-,u$nܵ)w@X=2󛹙kٗo}[7!*z2t-.| ]yhlEü{x+khmyGg̼ 5/t} d?bJƺ#19 mޗnf&Gw7/C᡽gfNN!wb~FO+J;4c?ZsՋWOݤh#μ/Xȕw$s5иRЭ h)ktU q?fȋ".o5##*ҮĘchb<;jnl!jJ$e5܁v}J^>,!\*냀._ j%,v+&8Ŧﭒ5zvs"fWۦ<W_`Z}Cp{U^4P7[/YI?HD%@n+J]oNyLAH e/jq$cu؈jW8޽\0@A}7¹߮E6^CAbtdDXkkZjz i6X] :PRF\DD^r.EdփgK/ֿ 6Wb(WU>@ w'hy@ `T֛I@qPW =%rKGaSELf$Eɇ!ɱGUCB'E pT8g`_ 2#"ɗY=׊$1{iH5ϒFDӉyM3?ṘPUiMaךF`D|At!%nP]!Y0ǵo=/8፺خT4ްJNr@$^,ݤpeO?uŜ(&E/jt#T{#Dz[kO$34?Ji>>mzz9{A^'꾒;Lїٺ 1ְoYp,و r̸]$||+W&8 إjz_3v#:)]yFydrO䫑W>хkF,f^ںtu%Gt> stream xڥWK6W(+8Azh⠇$,{%63áHLQK4oe/OojI)ZkUfY]YVSf٨V=- lzċ{~ܳ[ʼ_~Y&*U-l (xGfegYJ^<ʼØ.;"*Pmu%j[ܭhd@ ;.>}) |{Bf/$w̌ CaǢQ5e츁jmD{@l4S 5mx* ,c)4%I Tz3ʩ}RuПXj5A!PM>/@-tmyU?.cM~ںлŀ;վ3K[QÅMcQYq`wD3%'g(&PUBSp\TEk8s g Qj떡 qX{3h~јkudab'u/iO Pg8t#{=9zAwlaF+>e 9"|saoz(EMY}HxyZ}(N=c7q al @L421ɳn;'3cۢcw1%W^3}'۫UER`=p:}ht|`qcM*kNrD~`"0ACX5'g€y8P%G myS:J }#wn@QQZao*T}`ɴnW|TT5s8;1s)DcW\CPʸ熡pp˽sdw)1cHf/BX0*pq(ow {jHg]j˂6IƵgD*pAw6~H7vO /F T ڈ @cm4[xޤ\AB+{.I6*Ig:2|[O忭7W qOtl+T9|N\:>#ӑ0SY/ *v|COs&a|?4~:> stream xڍP n!nA0C-K.!;<ιszY-ݽ E!;c3 #3@DNX̊@Ajl BdagGM=P b `app03Xh5r01lAN"vfu@ pss9ZlrF @#k?|'_yo Z8}`ZڹzZؚ%ŞI$%w 9@@s z؃ve~eog0}0@r2r]@>^t/B`aX 3 [?f;ZtǏ?Oǟ𿯘IXVKCHߒsx1pX9X,,l.fQUߧc(ekjG'kC v P]ff7Kwu]S+odcayvq~ 9 -I9oh$n2Qpks  E;' 3Qqz]ߒb@;v`h>`/%5=&F[;8#_7`7b0A>O&? TO&"w?gqEg2d0 1 `}/ 11r2G1M,p]A!f%s#{OĻ]?^w6 ˻?T勇{TO_y[k&cy,*/rLpOu{_l&gsG?:~g7$s|o?6\{?{ rl]k rV퀼u5Bn {(4RhV;]Q`i37oGvĨoW_Z`ڟ g  T_ [)r\>(}wp,1_)\6E-Z7x"8sƙuv={X: [&k UV\r\mBJ/_IK^%EҡQEF$+|ecS[c8"e;3@m Ck.z|',Ϩ !+EְD70]~%-q. rR5|}_f5u2rG>຿𙚒ҹV:W#%3bN cx12Tf_eBrvC_>$Ϸ 䠺lRIy$cUɫv4)l.0^!h\U]bdTGfv]|H30S:xhR-l{Fl4DR-\| D&*zƒYΦ8>}-͈ŹT5Oȗ+7zLC[!8D߬m{k7HVv@?!(RH>{&Oz^HͩT.T +TţdkxD! }ЭH\"gҘɕܶ^(bb螞y]IO5ډDl;nA{J< ([f0meX8exi||i2?&6't~AI@?Z}E㧗/WKō$̀aL75zgf0XXz|=ȯ]~:.03i[QW HTz&$ ?wgsM!PXjnlEuM2v$H"05bDҷ1]hz8mID U+ִ-uN'vE̍$,|uP m=1 !urؽ> {*3i<0HA7&ؘ'L/:Ztқ3E];)~ 1ұד϶|& j@tET;C2Hw~F4&˿6=/5Kw?)[߉u,l_Q(4ʞr=wS*{.Mk0IL ĉ c̢M7)<PtW˜Ky'}ULpn6Ih)Tf$KqC/?zY$Rl2ΜpZp uN7fp-rPW>4Om%|}مfi$?hF]d:&?M> (FTEt*n8q5L[/"ʒC<;h CuyWjHC(J@(C >@W4ө?S}sN-"OX [zD!+A[r\KBD.GX"Ί+NT ̮J>Amkj'|.#!䟉LS~8pW-J2^4+'B4D;L@WW,@_eߌc+nI9e+jmxekg|Nh(eeLXQVlo@o~ї.HѪVXmTu'sH3 h\jz\0Lnv[4LN8m<{ݔ]B+A\jHy/q  YzD>8d蔞5Rȹbf񵕢R 0p=2OgG[ՈlG ;V!|L;qTՍ||=aޣ kZԯd'Ȝ3^gpUM7j֧:f h'!"k_[YԝyQLS6i,g(0aȡzTb^i;t[HeӺ =$\[d;k'Eρů*<%WtИY"\R0@H ֨jr31ðԠ̹>O&ͳ3^ejzxC5}஽hLe ѣ<,!zuFYHI§{ҭc!I5${KLM{b]>} ) /ѳQ*>'a3N M[%^B`ʳ4Q<*Ҳ?=, %l" Uц|Td Vަ/\w# 8l)?h$\WJz{eU+@6Q2o[c^Ap\K 3+7%:Hy-t[g;6rbRH6%jP Z(՟CK2e"y I1#ozGșv( [$PA;i"Q] T34!SB )]oKIyLU`+8nHŖ/> 萆3c}yAL NtilIwٷ/x痌|Zg%m^wм[z)4šr Md-3rǰ%Q;0$;ZO\™@UCS_˴lWh;}Q%o3m!l 1$*=$95,&((ߟPIt~V@ssQ,[1J5YEPUA 'zjm#Vu[{-cfr#|>"vp1Ċ9G]TU:\u2umPO>֙:=7)kb;!q 2$·4qh7 W\013irn{|ޣ-n8dyǦ;8s%j /|b m/\+#tFдBS6 d{x Db}5 S$v"EMHi\6x^b;j͜Gd7Q\]iROs-+t\=nkLǁxJT<,sf'_^ z)nOe2{i%z~W+X'0ُ( \:9HhQఇ&TB%O7Lg"1$ >9;Pr2B<9]v>UJ4ŗ算Lg4iN݀ }̼͑ejdp;߶sQƗom=eHB iz2}-f 3ru∸no;ThlA>bvS dE,N]9JxpBNHG5HױloE ?ôCvzT8[~堾M/=3V=ų8d n{~=ʗYF7,3w%&;ʎh}ݤQY|j hwC8E0a4ԡ*GdLivK22c].P`#~U~r=<4gũUq2JH[(<\'j?Tp-|wX]f~kj3%jfZC1}^Q Iފkl2BSƗPÇo;,])>t%z e\[FhGQ}Iao|ZIOi;7.-,Y3Wyfdg/&{oTMJytE%ٶ Ҕ|ٙv_." a .bů&ױOUŬy|~TR$jȯh|[iAH?K?cg}.['rŇHB|(G]T(yfV>Z%vЕa! oO6!&z I^b:ӥXgDܠƉj9 ?=Tˉ;EVi,I "8QKRvJhm5o+ :BN&ToĄNF{^։uРP{X7vkInBK})9 ,']2 `'Ĭ9|e9͛ "~C\[v;O&9.YLh=XX?ϑW:ȰɈ=bzjÒarpSܘڱ~6mͣto~BO;qHMgTTؗlP(;Z~Ԁ(%Q_>, %*ϷJͻ04 ̪卯alO^x3wQ2F*uR U1$,~*X:qRg4*c`L&X\د(g[0LLvto;ޔ]vvF~e4Nnz1UpD+|H|xϊ 75Ex?n!'_F~c%-w|'g]VgazWhɜ\MqosF-^o΀7Q|d_  ҪiAжz"0˕dOq bv[<\F)|zQ{s }%c!Wpn RňcI~'p.'Rfmɟ!ˢ!.NF!AA`D(V?g3M;UeٛrjNMGVΘՐUXl,zfxJ3U~]I 3] u QR67.;U6kWHxsPS'd f}|T\DݥUQ?O |'L)2ڪ&-ݔd96G H ZYw ׆wB/~D|p9mt}[CyR0f[^P9%Zh1;n³qܪHC\b;$\HR'wuJk^eN ǺŔw^ Yz.Uj.wl0Fr!%Ÿg3J գB18pi;Ejgc TV+ͤӲZ9+f ЪFFR-H4֦*_X5^|h"sw14gW"Ը+ My 7SllgXeFL>׌B24%~ ;Gf7g@^"o tJTHZdgDxN&L~#F'b $&ǚ`<T!X,% yH$T!I'Ƹ:IN<ѓҭxI$=U; J)) Z™ &`.K"A H0ߋ>zJU _($5}Yr:4Ԃm6#mɰ-;(.ndd@}j*!"9H_eKs51=o T˺R N\"89ϱh%r;h?[UϭJ]z}l6*ώak̓ұKVwI Q*>N LCSi40 _qmCopgLL˘y}tGxYB.gq^ & G@F?ݎBũ$^ 9#:"&y#Dܛ(aKIeHsCIHԾ,ml=[FXąqJЫVZՕUOc0"C3'?AEubD"NI\(akEONpM`u]₸aBCzZE+%W_3BrP8:1EtIXw pz0$3l գ&#/\CYf6 y%Z QӤl~E$#&nr=QY弮d∾,ɍPahK[O0Pa_BXvXݞ3p\z'ގro1wWړ82I{/dژiweV\L,6C9R՝H6 v?`qˇbVLO H0ד{;Wy>hY^U#,A oݖ7AMJMI;[DPL|#p/Q\u`GMq:ip{˥+% 9rod(YbL~wtuafJp +bFzkXfwc?=жD:h./|Nƒ(*ao?*Ŧ%]N-@5lw҇x 8veD+Ru_1Yc€8证 3X+Ӓ=/!J49ټXU[޷973f7bupe|/ӉoE0xlBߠ!]=X\WI qXrt}%Xъ+bNTeg5U+n]b"Q2X3I`vcĨd_ǖ#"5 q[7薑m?b^%1!"n P`GM!Əq Lk0U*(H1`W!0Q,u)OoHx0Ǣ#daqã#/CT;CRUQ1 Zl!gcHW}C;̚9OM(2u1} Y@:+w=_"&HXn]uwX&$(g/IoANL1!W5^MOg%\~hd*Dsr1gR-ߎGRq1RT (.9i}0y @+(xԷ5 |B׳UeUyW@lx&8YN :H5'MbcPұT%*G|#5}p#͟DCts˦pn(̄0[)!COX{W6j|Y}* ~!¦yr_Byǥٓa=ptd+ְ4M`?m3ex[ T"YT<ݮt!I:kpYxڥQۼŔV(2)=(D7pFxtl Ȕq w~a==L˖]l9{(iϪ*o;;Q>4AbBtVL`UF;1 ?ӴT VF$ERulrR-fÙc'V@54q:ݽg+-g%gYpgZؙZAn'EEDj({ZMV,Js[cYy&[?7FBTb-^޾UEV[+fD"rdA?鵻Fcr߶AXϲYCm^idL[ Be]g7BHjhc']V3QzDzfmLu2mfBR'>Eq! endstream endobj 142 0 obj << /Length1 1478 /Length2 2341 /Length3 0 /Length 3276 /Filter /FlateDecode >> stream xڍT 8T{H5hP\bYJ[(e̜3 3(7kJhFrJHYBER7-~|3s{;n H]"`XRm݉@zh 4fC\;% M \ bD}hdB46!=L+Z08 |4ƒƒX+I$1v>0Fs948Yb' fil>ɧ 6N(. YqaA>8>Ğ[?W9g2̰r8 ,泂x 9\!dB09#(@[B@`H I"/~{H8$ι-BY ӂA@ BhDȂ`d~ 0~_߼10;|ndŝF-," 骫#cי- ]=[H_v@oqjh.G #a4h~>!< Sos$J=\@Ɓ! ADT."QSAgV@Cdb p/~OD }癳xH 6\>4A hǶdẻPx4ᙞ!BD P4Oq$@V \zfI$Os[Dx;Cߙ;s g3By A<"y.!/ ttG;g+̕kvNm0@'{qՎJ[ӭEQQQc?ɢTNMa\6Gw4'Ԭ?u\) eH e[wmOSNRʪY˝ڵH uav1zRNJw4:UnivҥÓrO5 eQ56xWo*lN\FlNd*鰚7*rX1!C!j_nYЖw3:&~}TXhէxmθCd dIϘCv؝UHRr]+6Vn10-Sm*Iʋ~<Eٓy|Hd ELO7޾G1+okؤ^ZwUk+ӻYӗ%AGc~Wg<&YG.~֜-Z͞Ik˚-*48W8Rޝx{*g\w6-Sb߅r#I&`vrN ^^(0Ƨ:בHsҮ4,6{P{nsri&,ݭ][ir3Wu:O ס֏uDԤ%?̈́MԿ־pyED5Id%]/__0ҝa})ڌԈa V _"QX;ή>?x6Vv.5v&o~lGw5Jli5۔(9^R~04/0ER֫IY*w}8ЬZӯY,qMD9VGl\h'|1\4o $㢛Y>MwF{122.Wt~b/Sd;](1T>7n)VvYt^pXR@8>|3y}fSvpNY|M#Xǻ3I3DflК߻g3ήjU:WK8I޸Seu#e#uLAPJ`j y6( T0.Æs+֝lqF5[bG&{?[z'{q06%)pt.|gB߼\0`Ok?r'ùp!\{{uMw+ՅG.#Vyԫ<@Dmnz~%>˘S͙GJlW:x;Q:$-{n=;`[bG-jǬlOpViv07fXDU7>Hewj cح?95|hw<#MRMcʿzz!ϴ?;er0^uŒkʱxmoYivl/󦟜n`DGFcrp+7SDJ[V: %oBhb枖oӇݻnDiG-Tݞ~!M$^@nud{wMjZiҾ>3%{_ VtϜdOmOK|0Sj"~g{++{=kq5 f!Q를:d=Jrź;zL@,zfā01qUYdgTѸS|TiA u4;r_Gf 9Κy+VP,uMrG6K]5{5 k?:&lƪ'̻A=\N6fZYhpScu#^m`@Օ̖(.&LqiK|{3dWp,&Ъ$WX%xFEԩ8(4th2xle|56yV/E[g}<#Y]5u܊\48hH&d0)Ԋ*\;]/fN=yˌ/*QϽdNPg:e+T5KJmSke){)ű0GmCm9vLlG6U m:/K`04Mޕ:IzOzljyx'>}h'A©kN/ g"'|~6v5q5я/.pBآU+(>}?_'1/pYQkG:gVd = I#;mp)M{ɱ =soQ7'r5{r=w$(瘣½!A7/8]*2 +AO{#Л\nI> stream xڍuTl7SZaltwH c am4HHt#!%< !݈y;;g3۠a*($*ji $`g7D``ah _h)A8G- "`Q (BK Pa('4nr<04 A X;#"4@A0ǿRpHaNnnn|G  !v@}vBjCa؁voAÀ8 Cbp!.H4P85;4'ݟ蟉_(Az p-QúcyOGBkïC*z@|(a?1Lk2FCb1SBaP\= [E ml°qq7B"]`jJ|p*?:8  a@;ԎgC'/#  la b.0m6(h #02nh; 0_#715| (w + A"@QyӁBn'}#qC ?{ w m0 ?7 / g'F*.;Gh,n9PA1Fkl.mUBpK"  #0*w. M@tQχ {'o[DaU=PϝBhG $ @~>$ 0mQhA?_8\pC]h\_U[0; AA%쫂Wӹ.I]In"ۗgIPk6Q2biߢ=cfk鍇7^&U8o_⼎YFHe'*0J;t"Zdm.RUnnn(JӼK/ps^[gm$|H}?s1:pyxK @[9\WO{wKl!Xrenz%rH3 ]7^RxYR*5f֧t+P0O lP6\ɷC% %e~a ?󲑚Vk :>׳p#ۮhGyPS^>,e{ .7(q*8I=#o?9X18'WE;"zGo żZB+ 7Zs~&W"ڀO5oY+mGvpC}y}_KvKcevqŸfqvn*~l()bGaBuy4=ԙflBDφ)KAADEܓٿ9UxI+f'EAxy 0[^/1mܬ I'YV[%`hbI(༠(K0V|A]YyB Mp\4͘DcS6)2I 4{Th6 dUV%-R'mݮ'Lޯ*{`L:) *.#uXo:~~ړZtkB}i!#^QjxXDGeW eИSSUJ;.v:V;g Uܳ Ÿ7h|NK0g X&It]+P9ʠ!?B,@lk씌/ᷤ?v-bvbϷCFY)Z i¦-6Em}Η!U}qTJ[vJHvuB$$g>7iqfi]Eҟ*0?ojٽS}[sWՊO~Cc200 mFQ^EꁝV'p2]?mSLN"[`Ew[t5:qEݾ ZPe™<}I5|zCNTLtmd|1U/U_UHq O-(kO.|v)PPrl^[dn L.=(Y i\J~Xmg Gf]l3O=F ?!y TWrL;0<ވš. p-Zv{r,c v`zX@3S|Mغ #4sES]xVrO6Arrֆt)G^%ye;v9e- ̹VA,FQ7E.$pjٴOW^ X.)QzPi q}&i>Kfֈ; J_ao.Eq-'kS2p6\|6q}DO1~ru7]Fo|]wzM 4]EAB*ʏ(`4QFy~_R}1pY}9\fqDi}'96-e]ie71\'d 7A*$\e1̓VPt䆞;k|kEɤ?rgxBς"*Lѡ2S+1‘b66cNsD D`wtjF>uWۏT*Z`"8 =Lw[FPn.v:>?4[$b?EZp\6^bDM=2NވLQ{+Y.]_>O{ NY kc4͉,R$*kE޷5=~^`xB3c1KdTKFSxlB354v\HuyAŽ(aE#L*ָؘ_#5*6-a]TGkY|D_/[n3O+ Z]ocúY/j~,3^Ñ)؛hڧ}ȨVXTo4SLf"_?:񲺀F_&h `lQqUJ!?/P~mI셠K">Ώf~")o=*$%̟-q|{Պ ^]tS6@i^oW#`xNHHu!6(U7;veܟ`UB_!,[R؜W~x=BYǜk; u cHP#aҖ?f `倴R2$6dkW='2X~o" ³x{98\}KN]g`W pZ~FA9F/“{J<'@@ Bq&*ymU4{I!YdY 1=|] :aNJڼ>(fXaT-L*iHRq~6x-[߲,]S+\/T9u`͛]tq)LdONvA xLv[pg [JMzƸ1h+{EZAMy Q }Cn/wxN_ G䂟5I|۹q}9=^FIv/"άI<x4tU381 Jmȭ`eý"T>az:qsU&kF7~PGKfծ, )ۨ=LԽ?\(DiVkퟃ m\K!n{9 Xrk~i>p/޺Q-Q ^]*a%ɯC/!.+aǬA̶MdsxFN>&  p Naam9}L-!mkЊyt^9%;7EzV헱xaH\B/MN+^1ZUVG[>m S} brRzI+@!?nlGD {xy[-,UX9fsx@gc'!NOqWˆS~J559䳽lܢ;٢ҫBS^[f΀_IҼ2*xN`lr8bx3lUmП5L>M:4Hn"Q`Rsejn%4Ɨ$Rat%O /FbĂBmf%t;nYTR:wn2W%\~~L8%oA 6Ov-d+ ݒ:#]jZAy+W٩ZWY<.l\p{1saͺXr$lSrnln+٫Y^+9f9%ه}D?3Y%öLS0AEdxqPP/8R0ɚ|r+3k3>a^k'w^mjk$m &Lz^K:MOjgힾ$=ƿs L-;yLu-$QY/(Ng6[ [G؈MVVT_WiK Ql^rJt gƋ`9\ݒ88*@{;&%Sө{DiJQ):Aҏ_"i>:,TCdM9؋'gYw͟/{Ϝq|(˖.Mش&*keQ1Rsox-8 M\%gύm~ڹ_QS4!vJP*tStx/tMLf6t^2wdW$Z^[a,5KKXg3Mɮ,b1/1CkXppdvWr?Db޷w=.U1Xl %,&8!zVVV47>!RAe|+2> stream xڍp$ Ƕm۶t411'3mN&X7g}{=/wZUMA b` twe`ad)0Y((ԭ]m(4.2s~M\?n6 '/ /33?μqwks#@G!lmi?G Ow`jhfb Ps0z5#/ = t:$ P4#@/3!6ڻ|xٛj2%G_  `am (I3zL04uq7q7510&IGblbmGL|TY\hĭfeb<}$aȤaoC_%:fVLЫ{9T!`b:}}_06s-!Z?l c=Ne`o_?ˤ*!GWDE<> VfCq_ *X}1[8xxﱠ{ehAc>36BnMm6e7׏PpXkknvW+j"Ehljf @e?Gc>}<(.Sا )ao`rpLM>Z8>,jsL.|pt$/`/0xLJ nvIbb`1s?l>AloX>V / `d0Y ~[ ~\_#0 ~r///Q=T?z~Oܜ??w죽@' ny/Ħ6F߃aB`b_+gٹ ::3hN$iemWVx紥:gJopKSX"u _>k~o픥ƍ'Y_:rP)R6Xe5Z5ʾr$@^& #gR%V(tlGmw6)+<3u9DӀnzM#ݾZBB,Vzk)e`]Z@ $HP~+'<ff]n^1_?_V6\*vl͡.zs*v\^ZIgQfHt݈R61]nUb1zp,] H/V Gy<3ҬhʑBw0~8$sg~sW^.jyxY!:C5 E)MJ$ ~w֔\]ԝĮ)YK]iwŃLFpY_?xa/nM0֗ۦvjLX̃Up2&ͫ7δf_g97ct 1HtziY;/7?3" M?ؕI2e~\U`E1o_+>*0WŹpn$.?sIpgtpNi鱥F|L"tEV"zYg5S8em*pNQx0rccin~ }8ni8i[i{˧y:'J6hpF'/-s\+)Jwc'~?Cz'7Wk(XQ[.b$>v"7w8cd霄9['q~0szc{cwPe*$c5v+jK  f)tȋ>ke@(X#oϡvAYp:[S-Ps#0DG=&bT೧@Jew7Än("U8;nҚ)[3`^N}2N?ML`ͲmP`%Qg:/Ł^&-yeW3OMsI^*& $$Gu!OzHT_lvD=w΀? M\aXNs@$ټv͐u_*zOFKCٖ= V!4ED |5iB Z^n_a5cJ +g1CLx>@MhkFbV^~8BoԜu5$ژrH OzS}WcӨ&gc@lo0:Nn1 gl 6R HSo)m ΋Zgκ+[eY${G""NJ@|v4oQMgG pCj|( h%Y~8H }ݯeҧAKzi 8C̩.A ChZ,R6ovb<5nVPH ȼpRݯþ-0:|!Ǵocys-3&/>%W}/d.6P ~)Z&ok4e-(7i= ܥA*QL8T8j}S%aBAog5؟k;4[۽2"ϙn O8(n%#bbِ`b0E0B!z(%+Z7zz{>RQȸV/$:SWY؈D}|Iڲ5ku#CEQqpAzO9j:մ3=Œ!~s'oۏ%¨%ppyg7oїr]T *2[{ə]z%4\}/߭&~Pͭ4^Qi;m1'bP' ~JlP$l\4acun,_ojR s! =7K*?/$k{MpڴVK Sao^ 0$bbQ>f0ZgD[.ʩ wshȶ[2깏,&J܃jEFs~ ϵ@ܴ.jp%Xz,@:.W$'g0?5EJ&!o>*4ыxPdZ륞oUhEM7ö>lKDڹO +lM FKߥ*HzU; R.́Ī<Ov^U4 6=wZ%Q}&uFuxk9!6~b\DBǶV"7<3n/n':"*[Pn!,>Ds)lg\!^,wNF1}fء* h"iehj5cLT3u^"'q k^# 'xd۩- <+1뱡)Z wB gy]5OU'OT-(|_]mXx)pNf YYz`jl +#!IW 0D?*Lvr\Z4K&ɕ[-n1}K04$:Ig' $s20s:%9rGfgDc2jP,ٟVHcz*aVe: A~jo^&e)>"ilPaijZ}%PnRQ&ovlZ@} TLj8ecj̝'W$/=#g>yPթ&GKVJ~e:>jÐbe ']^h1Y4՝*`Ўj\mGul++AvAZʍH*aٕ)zm+flnJgqA_G(2K+r§~P G%Ù);>rV=g 6 MTk鋳4gcB;޸s"hBu@+*)CWz &e?v&yaqxqCPJM<,v< dlP8d|?[uAטѪCZ;qq7YПy` 5v{ QqFqT>`‰)k2h1Rz"xcL";̄!Z$fpX9?r߷B:m>%6ٞVH&*i-JؑA~r(BX`\_BcksإLh뀡x̅WESPնlRؘb 6qدnߧ{ѵ֛*h,مY zHe,^vO9j3S5o 㧸h nҤf,"=Sgbu}U_GFwE~i43rYq26IT/)R׊Q5 *"!̲ȑ,]ADgK+ mb>9{U*w_B TwgR tX.Ro[LͥNwVD!⥮l@#%aA~-+=żwmֹ生?}Ŝ#ԇD-p^R} #Igf&oB?{7K'K|  Bv|WJRa2$k%f!V-1E=_hv$8+Ys#ӠMf" 6áE0wJ^ ݺ4RJ̵).!us% Cwxh5u4V[Z P-MVqKu`4j DSbucT! =swlm3pKoo:qؒ~F1ٟC5P8eB_x5xhe}fI}0a.4V$3-ǖ Bo7KFh$Fp#hf>yT]ZGb:nېTaFXA; f8 2ɁKqV~V ;({^{| WC, (k+a[TgWg޴"VETIpevjԵÆez C-k wLֽ^3(u}dׯp/*!zkڼA+Bftw[?`[D8x@cʲI{2,ԏ MKaVkiPG4 $Ε:ޅa)|"2bLp 6PNoQkL9v<@9uB}*2)>'캩1 ֥)ienjs=aZa4 oC_vr@ X)UZv vjV}̋=CAO`x5|G}9 nvϱ4TU U# ^8+ISD Ě(\B[ 蚵LD?Eđi2*ojћ =XgYU^,`IcAf@\֬w5\piUϴN(EII [k<0ɼK3u 0iV~n:jy{ 8}u,WkMM]A_јFi.o=%Ww^"\2u-sJDSfxQR4%qMm/IS8(LBr[tL[A" y6 "%QC'׈{3ЖElb [X!DJ;Ar#G `}gUz;9Z~!ް$ *i݃@.)}HirײvsGްO=!$_q> kvȩ:ܫ~_T\P O=ᴆI˔G5R2Dm+ [Ϗw?1I_BkM@;JݲO [p<0U~$h9(%H+˫F=ïV`"'wݥAuMkepd++i1tb^:sop :tm()_( ,+ IIoR\bf^WP|ۼ"uМ*KքU%9ֹJʤ`skI[(r bz0")ݶ4~ҹ+Q[W@2/Qlt>|̱~׸ Vǫߗ(yvN|XŔ?ݔ5MJEK<xױѧN.ns0 9i(pa֩޽[mi{]z|{H376k ;wq?]/I:GHN"m Ku?P+Ǖǯt:FG"s4sW4 )94y;I Xrۊ'LV#Uz{U~Ԟ|C:Up͹wA*eW:̀!xT{_gqnhIK@.!Αb8P[,ۋסAXr}݃IĞ6՝o9 3TA$[69y7N=V}m1ݵnrNboLD⿑e~iAh_r|yۧ&Ãvz4qںY,Hg ?Y_/|K".gtYDƹlGB ~Uag~*ZuBdŒ ;m`)bQƤZث[ʊ]@ިQVeb~~5jt8/ KFdg_B,me 2|YTJfpj2rѢ欄+UGٗ/ylLui +kdQA.z$TpJzH_5 #Bm!$il@"&L:\>DNDoO.p}xM^ ǨPe2# Hy#ڣon牝p!EϯuRm|V%5Mov$]-yR|;OlOJmiO`za|N2H1!o~֧bu'6Æ#x46Yx.`_E'oGFsUלo6 QsҨ3gk<4aSSh [{D ꬐Ff~.=*PM82}Vb ZJg%ݚ)~F"AJ/n蒰&?*MsElu3 kvwoAJDNﰿt̵A'XTŨ%~}vrGN!0-̝FilU)^qz8‘OW/cTt$و@ijeڑfcM-mgbc349$PT1)Ԩɷg߸o9rGJ(C߆M6eHCt`Z^?jGn. 39PwuA U<펿[:>͠DZ.a.R5rft0C1s7iCwon0eF@¥՗eV^pI\ċ>4X y#G #T98F: )Û&W lBZq,kVGՑ|2ASݷU k$g\uicR#I71}D#K16z&z/c*I *?[wʂ[ߞyhZ/J6A_`:C~3ql$e0`(<2 єzLT8> #\ ' 6y)NIo!N})^/ڥAV_mP7ӃF/g#iAXѱg(>575^G~b-OwsJcR:[R+0ms{&o߶ܫKSJ2KC'c*9QRLpClgm v]Yv#sV>;!v5 BPcd$J~u]f}#ze栓l|X0][{ϙg% fC}iYTU)[l) hY=NuOFҁqW=uW'AӁ&L z96=({<݉N\xUhA9H<#k(ikC@%E9CeY YhG/FtDqۜE.LawU@=7,.;+,4JVL9Vz^ZQZ~0" `MJF<_1Ycȕ] %X x9ik;FBݱݽ m80h_԰A{z֭P_zhqL᠖}y;[Hc҂vH( I(3Mg(n.md`/3Z%k5K!o"WҠj v3S nH Cokp jԪf2g?<5H)SItM\'O E%跗#AâC. օE8-a=043siNq2ՀaLR4J>ou7!%>t+Fi$DugCmaÑ'MrBor`ӯzzjK|Lۛ:CzWyzq3fz@#üݞ}Jڧ7@] hSaQo4\Q\\"ftoyoo!кYGqc:l8٪q븭H!~nrǛ~؊)܂Nvy?/tA_|HA/l2}֌B,ʋ3nF~ŴJ5(gv FCrleNw1"kmM/>zd).&8B투 K2Jv B41iw"-._⊌I7r4(]*dOaGDXcS aѠ|M2my{/ 4 <>VM_Pcj HP7ф'Ƈ torN,V07?Z k;ib9҃B XF_iʺ pߢ|<P|"{$gF஼X .q]iB-^c-E"8"o_\< FG72OT%@;VI=>1xվMYC]4-6_G^="],vxџ*D&4Nf-v3CZm܏_eP*kemOadwIC A` sZ5`E9cDWd瀞%׭ D¸%gl}?])ma։M7$;7][1isw77ƽ*>bH/עrMڵ:FD6сx:I >EkD;kw<{-5WdRlOPBYfuBt^xY{m%&u\[$9Mi ԂH.yLgE7oq 2ȕꀿR׎Dxd!uh7SQ15NKBI(>bOA?]$_rvKE(IJ\{i^"A47OKaR+91 d2q2Y vэ${7bjk_. kIepsnGWT;D\Ԟ>aH8E0XѭmDT3HVzq_;" ;~)omar r!ٮFԮB]Cϗb7PEiJCZ>b]gĭsWЮ9r',yod;Zm^ƌ5T_`-辷dۦ C^lQxONO1|ʿ"W"wˋefA$X6>5 s7L0r#5M7{]rj@[SI*bs;*wb@}liYvWd10|}`L$x  LcGޞ#"7$DQǓJk \:dGv t,6 endstream endobj 2 0 obj << /Type /ObjStm /N 100 /First 811 /Length 3114 /Filter /FlateDecode >> stream xZms۸_tBu278;O/MrHFUK?Y(vl7%X>X$2-cαȢcRf Iϔ-0e H(ŴVa昡vόhg%ĦwȂ`$B҅eD7Qf`  - Ehh,V1 mFK%U`)a颌g62 a`*{l9TC>󰚴 ΐa1 ,*%xR QC%b(g:@mnfQ'!XGxx@C@@*HsVu)$! fVbaˬ;0 @6)Pze/<(pو$.'R*nNI@*$ Y&@TsxqT B"@j@ =$&26yArQPW$.1[ER @!9$ŝ.Y/I:;?x#jƟGjʹ{x9c-Y=ey~lV?g޵Tp\OŰWYuf=붭giӋ[`ACř-qI@ދY5O!s%7Y$d9nٸbY`)>U\b1SOsQN,y5\hx~ےQ$+>y2ԝ  ~3m|Uh!tEܥը.5_{bHd9IU~:6|255f>I8?C i0l @D K,E'Oiׯzbp^,F>|ANLo޾c^[ 5r<>dV %/YF8Д&;7 cv4ҦhIufxT՗2|ie_/u $|-f |ŒL+',4и ,XBSvs.zH-}@Ѻh9(#Q JX]hZ,l-Y Z(DmB("-L:XBBavRXbNR-6 8Q ĸ[ .X_ЖNy9Ū9Ŋ{䔵=Vnc$;vEM*_#6B7vb=`>`ӮuinmIZm?WĆZoǠN:Sh9sYuXN˵k$ ؊iI렺:xy|'BĭY}f~_'-'81~ϫ|{8{6Ҟ2{ڌm;[b?y=\vla尚S. 6KX UmZH*N @!tE?WO8 q:lFt ve{~O#D7Ȋ?Oz>=AZ>˦i/5?*^mŇ|/ǣOsK9 |TcEʨ:s͇x\^T/g|9˖7gʹȇ%[[y1+)ۧT{zqe.m˲ʰ yi Xm]55BʭI 2FR'W{c1bn'9Nq;$Hm5L=DD!ڛ1zy'Va:t7!;}=}E ZBSaiajzZȀ$6;\wy'+WĄIZzMsD{ziO:K3InmƠHeZmDmc״_m3ڶgk+UaպN~}~ 0סrm*#y2 t]}W=h5A_.;6Ħإ\iCWS\㑬\L'g$fh%w@ap&ńSK־qh-&AUS˔{ G*sMJwۍ%=imLw%EI Iͯhϫp^f߂oh~y?xF*4˳3YzijXY#NGtd/UX_~s<74 =xؖztz6𣶚;oN+By9)>?/+~ď^|G≙WQ8SO土s~uv^My?1)ӊ7A93zD_25O|S/'_?y8a4[tG{x|,ŕJ t5-zJ.=^4+x]]-dhiU/߽-zqx]h**7bF3}fjiI^{7=;D"q 7=4x_b ('j(#oL&%xN )_7Qxo endstream endobj 148 0 obj << /Length1 2423 /Length2 17778 /Length3 0 /Length 19187 /Filter /FlateDecode >> stream xڌPwEpw Np-[ hpwBp˖sWuoQst2!PƉ , `ddgdd%#S1wk%S:8p 4pz8L,&vn&nFF3##m".Yz LPQ8hNZ̍ lNf@FVe[#sPP99q30X;:Q\͝J@G `5ed3sʶ&N@hlc t(K6@ 7&zFFv66s+ @^L͉``cW{{'7 * +ɑ/ ѼwYXhDFmwgg66scD;1ژ;%E y7l\=fdo'_wޞvvw@osXOG , `45n߇`f|=&_?O}mm=_-Qi'$dca1189leh۪``Jژ޻pw+(1T g@hob{ 1g+ݔVo}67TM;[_1o݀ NFfNoenTu4112}3|Og ~_``^llO j t{ 6N)wy[ؿ&`b0F߈ qD8 bA7b0HF,轞o^O7z'_^A7zT9#VoΩ_ ~ ѻ""wXcaebm;y1u3kgYN66p4#]oNad C65:;Ab|']}fvf@?"md|Wa|oKVZ=SmwX߇yOw2wKY:OYOm17i;: IezoywZҰtl$o.B289p'W?|,{Ř]ݵw&?1rvx߁'?O=4]5dQq_#JwlO=sɡ::3`V0iyuGF`:-AY/Nizvq shX~NE`K[,ޙQ!u@ܭ~|e7$)3=QnXOn*}>lzj`\LB /1`[ΘS["먡[Ra1!W_&t yMѴcefbt_Kۨ!N`<ˡ~8O`X|)nuG'G8pܵFnZ v0jWj@ s\3 ,xXC`v=I~ 6eH9}0ԗ.t6#$.)Hjxނ3MoI=.##+G rP'~j{ӔC(6>[z0P/gl7v-J9w-hÌmhteuhINon[īDJ~ z@NT7~[G.UN3У p$`?6N&R MV3Dݶ.Ti+דH}-S\?OZf4Q8Zj5绕>c ü8KHzmաEF6܂h}޶PEKa{Py-GP0^㻄>А="B+o$9= -UN '+e<~=/)`H?{ƌ®rf-eB;?rE|E;%@KclN,5y+ݢö[0Rx.Ըr=@mF:+U6!kCr7ǒSR9ǰCBA3kҲv;[Y?=FZ1| p=pD@9e)mbh{^?T:'-k>98h D4;W'ER$vg1%{g\ղj5f 3uuþ*<I;rCt5k1c;D [n-<[a\N `6g6fc%B 1H>r|BG`)#b"''/v9]h{(/vX_j( 5]9@*@؋P>$'$"Ӥ?nZ]c\Q$O[R7QVd#)-iR~%(E Z0Z>" 7e`4U~AO6{ɧJފ/ߒdʕ׮m"e˩1 `X 1;`PYl C0#pC!zc qĨK[" QgܡSL2B5$Ru=W-vXXtR(qZ2" M%J,)F9($r@#!pBSxinnًx|۹<%!PrrvɬP:L@ d0* ? qL1= '^A$]7!c#ߣ qp/BTuـIӫ>q ;|)dv+n eRL-]^D[frZa^$0P7Xn]ڤ"*?g-7̽D\ =bGәM K7W& RZ/Wq}?nh_05K a mraMSB7 -g.;qb!{\Kƈ%ƧwWubC}mC[UAcV2)s`1d>$&4َ>lP$WTÛZ{C(G(idHIS7GcJXdqcoRk۩.^*iB%"Wۏiz>IƵ8Ǒ 悯6 >_GL;sM6﵏E9ncLa WD;aЎNWr`=Lya Y]Gc!JԑArq)j.hF/Ca!"s(?i9Ԩc;ݵ@>y?_;D\>V|x ]_Ys&b-&֋pm;ZϺ%'G=iAa b LBtH- ͮIa_i m r" Ѥe)M*i4RhxlMKxRܹ'6~\s$>Lq-sʍ8Ӕ;^ϐY=49 >o ꝳE^* ;j;&A}FU˺<)Jl.tU{H_CwLsq =w%HX(AsL}:`9c~wN Sz~TɄRM RZf7J~A i!K.}w|JR w1T3=u[$:zLF;y ڑF`ĥTsml-(KNK.JxIP9]ssSRLE=G]]B3Nu?/FZ}~[ˌrBH@c15W ގY'+\L'=KaPwΐX5a /@r7ze vrǻ?CvN_r WȔI 2ܢd(<X 㢰M&^MTgCEKI%v*|NV#w@dsdٕ::A)$'<,X}s2,3}|a#C?騶Hƪ=Y<֎#PCD+W1WmjeE*WPKAg1]Kyir鏜gh)JgQXՃHsU= 袚J9Q!˹i^;Ʃy[YpgH~2\y*=6GmV×}bߗ}78kZ]Rv,AY"rMhn6^װB"L-Jh, N \X0WZpl$Fqu$i~[23NBAR䨀9. )?n?4lEOAIׂX-$s'qR71S1 KoU+\_k 4QmwoSߧT!˴d#ԭ[;Q5A ?J7\Kp 5R0)ҝ%Fsg'EWKSUˠ\6+;AIJ(L#h|qDF&^)\N6FTL$=#, tH kRuȬ)ښD-70t(QIqqE%t^e7Jj0Ƥ(wU@ܜ'dN= #aه _lH6+@M?]uץl>Wygj{DK77^J>{I ?2ӡhFȑ:#>Ldo˭-a2ƛ|f> +* `}(}QsE7K`$}{{dE/UR 9r4@jF7Gkc .|#q}<ߜ>c6J4 |s|@x S5E RB2sxN5 b~! !6`FVY*9;\ZJh\۲i\q{͉ j'o~vZ-d;-%" *{#-<,!$@i:<եNvu|+`$ξ(L;ηQ%B>: nIoc챔: q*yRڿ ج`Apn3y\Ar*9h*wYm;mJ"-8$RW`EKktHZhˊeT=H)S &@)Cvz߸PM٨oUkJ6tFa:︍ܟ闏I_y>S - ND_Y9Q}/v_'hm g;<sj޾Ȳ&CŔ\>*|m)}dD.|yQm=lTP "v"򚜏!) ӒㄪXОp |  0*ØnhgyJW v5uOޯuZܬoac3k }פ]x.w<< WXA1FF4wFb3Hn woʽe<ɋ-!"xxgA @̣v uqW)P܃kܟQFzl#BDi]6Ƥ60Ģ |Aտ T褚`kل% G;]-}s\ V,c$4}N(ʮhp&4ǥ5\(m-үf+{JyngyE`91|:!j4WdXP6 (i%e 2.:-qfiRIh. /TZ/ËvRPs4ȗI/ygwuk3ӇlY)͗IAoM f j "l$͘=M I/Jbp#dY2+o~z憥O8&zyl>_&M}<aҞK մ\ N9\<0ZOq%M&ե"S i63efx"/a'뛗" jqQf0U.O_2Q3/$rz5##\1~efÕ)W!8k2%B |Ab/ZӟLWs֕ ޤ%47c{Xh<ԉj"d$p7,^~73N4_%Bh */,7z-ݬYyx]՞f67ĝ&0AކhE#&BJ=djݸ~P. h*!xܾT֘zWO= #`ίNW]K$ϦHJQNNʫO!oqȌb9N[mHP=~ Vq`bψ凼{s&N$A%+ }/79*W mBSjN Xi<1t}A5y@ j`yF.85*~іM 29P%+u+w'1##̱|ŒP謰k, ի%%!>IS*wcǏJͩSW:,ʏ-;lhCi+D-ߋy`FF1Ȥd=3_zA\;;Sa꨷~h9dxg`9 Ϩb`Ay]D]=䣗!k -W!~M+Ȃi%!mLeꋍ:jY tTtBu΋A8HHxnrDͷ >4;e:"'4Bqߚ"ң]{D'1B7CzXȚ%~L&x]_.KH2=)DAH:U|XF0myfbbY)7sWn m~ og|>~Fk5Q8S8&wxkNxcs*yzIеF$Q=3g4m}q½/%fOJ̱G=g=nSF V~+A` ;0RO?RV9APU>q{N!_.3wl啺g/:xxb+ Gb¹FbzHy qIqVлNG`? zEx a^ckTph4Qjq!gNe4QbV24׳7ICWuUU䀥Zz'c2&@nz@ ,ש'(y [;㕐7:oyw$Tw{̧ K# UOU&u nXS-qA!'\c4Mn7tO"κ?^V!7˔w͚bz UaalB#J4XV|[F"2.,~n?6A69_=.Zq4?iXBpsw#9?8o%Ll-m|vg5[> q}XJe#n!eGDD|[AY}&3 0p\ދAN!#,S6YL ָK&^^x1CQĕ[`|O؎ZVח 4ti" w+mSF憼HI]6iOe? {i}A,͗e7l2_>4}-ձ}X ^g{0e[3I-/lJlJ(#DVrs*£bOeJ>2GS>du妒Y~]|vO|I>k4g}8]y9 ^P)]dΦ.L1?r;ڭTa q =9jONE$ B([T@56v)Aơda(#xNjLuN]/W_< >Hcd]Bfц7'FPz}z&k5. !n-99G9K.d'jy鮥5)jύ ldf$ ~a}=^(1f8 Y-Wo9쌒EKˡ誮lbʬ*$-Uy]u>GJB?Dy=̀}NaϚa:YϿ.9)Иu}tRy{8ġaw}2"5Y8O,`mv)M! &VoVMeP^e,._rL}$fpN¨G/rjhЩza+c!nӽUB+ktR2"|nbvUOUu;̛:'V uRbx`h2Njxf%̹ m\P$1#5HH[_x~"ݸZ r Wt;tD'a}eQNFeV W!+k0!mo&xNq[#=3u͋l^Jp_WvkjQ.^K1IΩ%$xfc[#K$" jPQP40 c@-eqAiMvx]W%ۖUt0)HRڭ;0 z4oMn 3ľ\}e -Q# ĥ &8tQGv T=z|UQZ&x:YaTw> Bփ|Ơk' :ܦN<}gO;k b݈ڂ_{A?f Bbx+n97h}p7K啼 {\x-Ae}pp#T;[CړE5/IQ=Ӯ hlTQU-_snDSuj/nϪlPć9kޮiVc&i4]̏_f8u0:]6h;'&?6~WqÍ 6U^o9}I-DžH}.uR](u "ˇ>К.CF!_E Wo sw_>yb yNS8Ab^+sf k{YBH^tT-(mД'fvzKDUɨhϖr˚9tHڰ!4 su _Uz ,ydrY!mӴ0O0I}.5y)j!=i. px^?@.* =m7VdѠ,bt?yby*ԛ #EJ/ЌkwCxuIlH0%T.H;T!Ka\n tE2UݝV tjXJp_#]iԉno 0bӢT;x}(;Ki L<uSw%&lH`_]d܅FVJ4.lN0kIT74рiWZ~7D'Ma!/u9A- `E{ld=0f[9'1zTA&*FdͧFERlo(Z}>~':e+*|ր6c*M#zÇ_nGL1yZi7N=>ǩXp'⭿ӫv d5|+\ުcQ9}M կWQ(g ;Ԕp0§6*}Z"xK3iWVA1S/釕}ZgAtt:*24A͢{G2m /Mg=^ 1ƭg/wQ`Sf@1jIKRc)0YYLrAJvC +@{*L/ ʨ7Z.[j\w`waX'/R ȻTp8:\Hwaų!6F#W58&*Z۫G:n"Oі GTTKή$ ӗA,a~ %jOneq0 cWFqnTzr, V#%2?Α|-9" ZޚaUΙeJ #`{SIXiibnf6|1vx'SZ)BVJsn\}3SdI`4L?jQԇ;@k.RSQ0UevUh:xos BJ1IqB06e2KEGڀbCeWy/^?%KS7K|҅^\՜YP be V`VOZ!+EM#.,BwIN<ԨןZ?,L<$G)z`jySULa?Nh2ďuQ&m?6YAy"Kl~hR6X 8IJ՛Ik1eh_m]سJSmJ^DND_f.p;4%dSPn/xF_;CZb0bQ=Z^BU\ ouVaH{B˝-ZS44dѷsV|v4AgJиJ< S P lpAs]A!JS{;onchرոD{J\ 'gyMZ]" H:j0~l_o_wMt='t,լ6iH0 odLKJ ۆ]C@ _]ǿn u<{]g6b%Xrd(Ьuv6fO6{t 4V͸HI2짚SA7_P7@@fxSdLIv\[>6܄ ZquYjyBVOKuP3$bm/,Ck>3fkD7VHg+ sC)̞e(gzs&㣛a*a5з1!cJixBj,W¢P+k|8=N6!#1ƭg\i ܏~iFme0BŽ(ҿh#5X*z$[-7Vk}Wd6D/@dPiZPD׭O>2g 5b.߯M۳tT K\3dS?v0u(;Gl(˯ +dUӵAʔoGUz9IcF 8">c|=gه;>WCPd ulR-X6n9tYyI\\(-ǣ @Z齜W޲; ˛-XDLd :& h=V l'u&}qT&9Y!ćdRvYk \iԝFa@bkN4 pBx |OHxS,{;!8@4,UAT}9jxV@ƖPQMϥaIШ9G9c1EԼ}v&t_MMpl۠TV@Xo<-Ka4BG2$mQ``JuI{#xH#:fB n/l?Ix%FzD#} iVU:*`k>=w DiϠ3x s02n.Ro]=AkxUNdiW {>t% ȫIePcn\!q*zl1vU9!J\!bؠL;ɠP6O4 1)~F'hzs*ϤcFfݣ(2Tlڑ@Y=q>Y]"wdX@EO_\.^TE޼.ןND_n :;ص'a&<j{V؇Rd2Pa7y ?ȴ!~Ǝ e&ZϝǓg'f) NsYE{GQ/}J`3$uxoVH%7]g_8V{> z D5bWnGG1׀YzuA-Uu;NZ"6` 4 ޭYeFK&u,$>9'|ܘTW;' 4~iȕZlB> stream xڍvT]6J HKP"9  03twJHK4HwI(Ok}ߺך{s}^SKiG"ܸxA5m b33.0$B?d\`;,.N (;xv,nȱJ.~{_ٔ|wm=Ռ=7F;TMj.]~7~}Pfqv#V)41 uW^ipsU49 ;ѡ$Q-rn<_*i2]^v & crSǾ_^*%hͻQ4ۍƞSg5 Q=[yh|䏁u#"S HC ELH O`|b}Oy0fpԶ>#TlVa}㬒^:so:mz]뤍vV4'%Rr?i /et|NLA/U[/(RSƸ9;mК 9׭4\K=upT$"}Hp[~߻$yx`zI3vu'u4J/$f }HwD}~[ҫ6S^k2h =ԭò\еz([uO0vZl[Ȃ>C!\!(-zrB ǫBFc-g}v;c Zu[n[UwKNyZI I9u[r{N׼`&uw@-mi[5w#]GcLjѕ.M;'$%(\ys|(DBwM و !H36S\!|Z+ vќ'pVai:/zG$T 26&ϕ>sxYف!C/,iyߊh^6eI)SNP8tIfe 9cљ:Tq(HRk벘U5O^., i[v&L+H'|lN),40\ w75bρ9~3'oh_c. KߣZl8]|ոЦҥrlW)aPLJGMDiqJm'# Q;kiLZ5W@֗Q84IWTI_) {M?X|/h=75HeP6B7f!LalxQw: uC`k+vԟu6lUz26r5 @} SoÓ<#:&֦pbk^ byAlOO6f9t:}xgcB ޖUBh-Vph8KHU;LNya|`0[h 5?|}M+Rd%vzCJMX m9ĪYup vP3 ph5N薑 ô8 oid,AUEbyԨ kɫpn\EU a hfYyc@)/2!{z7V {gvzc6RC?+Lw>;ڒ} *"_z"i(4|$X=Xya+? !!ijM1eAgOXE'Gwsj-^kg'V\5PZkPսFhW]k;@ZxR;'$Dc%c~?ro8"<,^|9MY`D ϺaVfm!<l^}&iPϢW,2sc+agL7ɷseYB9lymHe0~ed®x2TQ,TL[2*v{KiM'^ɜ5O,{_WJrIHz{FRif@]q!62YoaNnҐ(zUox+ݨi.^j)(T0q~Jw A-joI-e7#AG]e;pql7bw˭=V^ȁrTw%:&m?TW$=aUO)M%.,c e;F5MTC8:>Ԙ"|&eI&UTF78*z 7YȘ̥X3}_ -N9Y[U F Wڦp>5 M/_ ǹOw|&PԂWM̀J , W|ɾ8k* C:fn&Ѫ6JosΓ(m.1z]͢s8eajL4%4"I\Wюs)1ǻTv#I=φw"vт=[`_1w ѷQ3Ĝd4fGz~i'{:r+!bЙoY@?6eѻr1-shH t뱇;HXXyE<5z + IQ}qw[l夿yq*FSG۵{J_m: ;ԮVBX=% A`\QdE2uWpYhbEE{־XXC6 o{c >>lN:XR&uOzRӏƎ%#$`yu~ xw=TKxzV= KT}1}=P:>d35To#?}):ߔs2LǨjFb'p/qxU+x9M`WWLn53r;Ju> Ar RMxYYv)'Zfb3`&gO\|I J﷋ԀuxTBMDNK4²N䉙Y NF4G^9MxZ]46qKֲYӦe|ɧFVxITN}iZz#6` #>!<U0 _/o6,Q1+A׫È7 HH8.?퍢~|m.kyt\9"F}g"Q "1*SY_N JDJ)Gp/E:#Ny< RcDc}̢Fy3HtAďZYoj%SZV#u3&pmAN [YxUf(y R%\gY4!^Wdm1loYwM >Hk5+)D'[AG'6KM#~Aec҈*#.~~v'%gBgƀ)]Q9qBa }6bZ0t5Sbo\<淢R/mw%P6oJkQHD:ȹ㕷C E{^@V3֣7gv#S%ᝊ~gDw5 U2)-m!Gft.BP;AoMGLN8vMI3)<GHyL{e+7qzd0Ik-O͟˒_58!K}kBjUޗ/;3jfkDBR'tT#aX{rA%̩^ hnPuɿÓ *_dKiI"UkV_ o8K0V2`l8ƛcOGM0_Gj+J*~>@׆$K)SqڹGt*?"FKq"I:&}jܦ.{4p2*5 ˶Kweyٹ՗Ut(oe__<3x bd['K%HYpZv]}S[ V AR8i14$O1A4h ?{񳚼)Pk~F*8a{K׃ۘFT:;ގzqd?ԾCq%NzH%Jb17WtYVJטdU㜨x&uNVm{i%ϧ5U%  Y2KupD -H3p+S{?B"?_x;\}R2u좃hiy&߰sET=o|!§2e5( D1.// :_@"GĭcOMii_#+4xn]F^d {&(etU+EYrƌ6NYJI}@jOut\p'y+gYKp9|RhlF[_؜:PЄ t* (U,YσO*l҂o1C`t̥^Bh5(hTY;{n쓝-Q~[d̼^3_Rۤ#cGT~hO P营V'}L!9!ER{ FlCaܕN^{Cԓ`-3[EK_)C*䵙)Mާ]vU%sCM$͚;.t/9$[PTٿQenn8O]傪 [ *Epn]`&aFB#ej([zVZ,t>Ylf۽Y]_+7 +l@4. ::wpڸ܉sݣ/&F_%bWD>cvb{֏+[ :w=|N ooDVK"vd^{2NCY詊M~WpXLhRڵ&uKv})/)b9>XEqbWYڇĜe}/ge0u)RGwo- qC /Pc%WRn_.|sUTx9F?fy?s$^6w/ķ La_?o`nL*MT u>Up(Du^(llpobkp{Z}f4в\Aeh8>7a endstream endobj 153 0 obj << /Length1 1922 /Length2 12987 /Length3 0 /Length 14175 /Filter /FlateDecode >> stream xڍP -݃Kp`-XpKp ݝ\<ιrrzYݫeݽkR`7w08ػ؀I% Ed9Pii5QiA]0$!``Pp8 CtpHݡ%6=VjiR? f??/q;3 lPZA^*mfP`ruu`g`۹98[0 t+`# jo B*2l,_DK< n W_[3ՅjFҼsb;xY@-aȮeurKbBf qp@^~~ 4b#o'/?GGŋ :A|t/BP3W)jO3_}~em}첺2j_' @@/7y{QU ww2[8%#ߓaoey 7o:#7[ۿ "vP[3^e7^6R!Zh%9z]/;"no2l\<2C]dsUտF?wRjQupXA@lrc /e@;;P/c 9 ;^$,QW^_/._ `q5_ >?n_*v? rؙ]p- !7_ܜX_Jy9Zz0^l?8?:?< E^6Ҝ?y^;qҊ%/]!g/_zd_=/3cfn/oC 3y3ڐjqR֝q.+dmib= IK/Q ]Q븇ſlt6FkiQ[,.no;;L8- NՇy.bw[ |+]RIz os˒mSgS 'I ZM6BT.Ip+ykSUPNr&/Mu1Kda)1w#u´iIhRcRԬĹwK.R@l=wx AA3kX~/Cڼ+_IcH=98e~1'2uujT䑭B!ߤxp ݋O0m\+ϜưYvWw|a+C- txmg"UYJI-Go;%RC:FcCg% KqeEpzW$N0ohߨTTLO?Z{fT9qc+5).lxӿ7Y+3g6i&&*iYfj{8;gTB$f$d< Ѱ@tG87).P ǔIΔ*FZR5Zhj $a*NHET?\53S)wiѦH{Y"'->39Qz#0q .$00;M 錷*˲!OoxCs7<ƽq'2(>)\. W**2 6EbF-OQ QT -k]6Cԯa6ْ'{˺$][EX.Z)szPM ZM{~RARȵ&k |Qܑy;&W)0B [oDR4i귮˨~ zRO_G?{*>٧@tpRNbq)g2Pe~/u#5Bʊ䫨״V'J|NNhOE|%0W1B^c ØԒNmTVT݈/ $;1Jg9o 'wEn}p9򘧛}v1g h O n hRkNûwo>t]Wb4xt,KU]R9dYb$7XyUQc׆3xѹ ̏Og,LIq;;Z"gc5r<B1Y)cd'>Zx1ē}_HBME?Q]tʓ%5DdAKyy4?GwhN:fTϲZ9yMzf,P?s5C^$5}mSjrsC/jj`^U6Ue+.OhBE3m~} ' }^qnBon(GRCmi |2%8?,J ek1r/6U }F6لH*j"~ojE.fl~k / q"V?E8 %4a7sQc+n-9q ߅8Og(gO8m l5fM~+8.$߁\mzCSwWd,cjMGtx}viΩ9lUQ k.GApvL/EEW9^r}j{vEb槤;:鴤|{\!ͨvenpukK=)*ĵ {v,2ӊ쑔)B9%`Ld9E{=,r$I^&OQ Q_Nگ.=DWFP5Ґ`.ÕٛTh \INfb(@ܜy jw=-gCFl c,x#{VIUz{JNN׹LQVjzVvr} }!i2Wqb*~DQxךpo>vݡYK|0sf+'77+Jkm ?rUdw4~ћQ.D>!\Vl 6rߢ.f(S♑ o&n}ע 0ȃٻIŶ=O@HꞒvAX70#&(b'1 ӑVr }{AlepTh㩱58SC᳅0||'.LM4g@V,,#L^'>rN0+UP=SlӇYE>/gv)9d?5}!1UP&e6ZnႦW钧d0Tuz~* ZLU:{i, ; wsnc%vA{tg/ng7IPV׌a-OI|0QB%?!(` i9Z ))M%piH>껱\bg*~<26a}Ȯ0̧ΕTy52^<7(dYOCAA U R-.q'Ġ*:t;DrkSw{"U ;s߫& VՆt+N*a` ҄"pPַ?;&Dwnu [+}o|YGl<6V;DAmwy {**z9PL eah5NVgRpg 6]1ҍ,Myn?m.P`QA#ꥆaf@9;oqjrJ5-ةcȚz5qq:-2(V934M/Gjqݩ__.NHUQUhBMǨ$ FSmad>#|TSbq5%gܪ~Mn*9tma*WX*K704͝J/izj+ J%ːZq+C(Z)!g,2Y!i "h'cZ!y bnp:=gd=7Ƨ(ڟ]C8V/u>-#ƞ oV`h0PuY9hBEÞR?)N&P9Y Su2b:\59I,VEVH~1-MQ͸d2kV?!xpqǶIMŖ2Ғĩ_aa/)< vGZgp 7rXKtJ AƄ =GGْa <#drZN} wrkdIE*YLX/`;h ^ミE2:$zTS~r,KC@G眶4(;lPT>F\ޅ-.=ڽv(n=(5MG 8>u2)aꖙj's<^t=3&dQG?׎p{^Qgls,{{_N;[{C28fDN4<ok +)mѣ괐J. u*un#OF$uފ} P13r5ψaA_|U!v')9c],ZE |k;px!s 4N~[sI%.fc8EZp8V(u|-utfaPyuH:SNmX:a!g1p\^Q\~F!`n?/Z* fԒBT__Ld G𥚺Y{S['$SծYj`ZD+v&JIכ=>DZ=bM>WJྒྷDkڇ*qe;8ԹǬΏ.HaUk YB~XAڢ€Ż;Dgvcqr+2{jK+y|<j xfx!T*pgubrA[L͡XѨEL WК:Jh1hkf+FI$Z6bU;% Aȶ}B/.-a1:92fڽjMߩ_VP 6Nycww*,"ؔ<k2Wd3W,$Ϸ,Pv'gϘ"u:T _PofWhhL2H>X;[ggE̎ZNX8uٮSW-D&M>Z{}HrwߵaD.O"y|X?2I/42*Qh^lF)o䍁=%GwFf+yaTgS*hn^xmj+́\R29 3_9ZUN $43q1@In_8"9w/)q6c>5w: y[?{K0ͣ|B?_lfCvdMV t}Og]Mf!I#oA R% 8zV䤌SIV)K]{C tjv>7s(<5p$ BM[aZmld(:H<`J]; S/&7y,QۣwH蜦?1 E uA>CzO$YyԬFSc2 Sxdb9:*ybZE/w Y?,g\c}յǃV1~%.EN*rwT;tMp. V3cWiS h $xNLċks6,qA!8}NC3T¼Z/Y^ nr/ޠqͪ)t, ܴ.}9e+.-* O{T@ca{:UDM=vLkGy m/PʱKQ)~}+sA0 2娼Szcb[?'C+WM:ӺXmX#;}M9dBЭ߬;~O-ݫֈEGуkL֜f2+ڌl;N1_iܧ ڎ %>ViN?3^p Gz²wxJ.AJf<* F3,oۉ14O,pSOXK9En-!.zpg{G%s8#'m.#&JY oY>ߔqfؘVsPs]ȉ'3 \oa9ܦF}5YcwmGo+zM2Buζy"8Sv?J{0b18%R|'iE⑒D5}dTvVs!'# 7ĆbAߙ [0Bd0:p fϪ*J1!X~ƆeVN `}Dg͞ qN*SVVmw рg"8. ,..kqvbBaY?7Mk;ں"+}(Ȕ-ۙCzŬ**ݠ0H}@(#2#%EN| Ht#$,;G s$4#v4KC,c̳z0'b _O\/EH<k#E1}eh#%:͞e&vۃҗ!z1y{\#"csA؆DxOs3ר%co6w✐vC"'(M[d/gm?!$: -B0iכK{0uF3tN{p2!^`2W4N~#.DKÄ']rEQ0]xh "ʠk}1uF}g0]G뚤!@̒2D]qT>Wت>O@%"=rm-zps|D.:jCZoi=|ZW?~d6FƸ W>DĎ=cޢ? YN&QXvi ظ2eW:ڦ׎Dz\̎ rD5" Vt^˾YӅ`6c򗞷~C);z8y7Gʜ@a|Wx[ꔙy2\ǚ`%ŏ=$pyjE~~6&ag^UZnZ(?z*jD +E?(5 0nq 1Zu/uzғ E@ŪB>s6rwƆ|wtAm0M=L:F- Sm OQ¼rUP%Gh \wHlK;xMQaU.ўTqλz]lW!BN0,M^$*N$T/禗[YoXc69b^ Y-NF@dui^Ay@C2;QFۍ"Vl2 -&\Zh9"B7EIS,;m7Lz@*H'<9UH'}<] @]"i XFpa#G] QtUA̢]S!g>[;-dR$waj0^Yy5NɠJnc_,Ҙ_ }($(LO(Qk-q"mh" (3"7wTQ` vH˷yA9m-x%fw8@LgN}9]<*9Ȩ.8k a+KLY@2J@ ;F cߍIUq?K75 ^ Y'x-^+z]j7?+QF޹׫?1Qߐ,!/06fXRUM&s7 gAo97o\!n=p0[|ѫk''a< AJY ^5@ CC-;q-BZ%cR߸=Ho)4~E /}s]uw/.mX:iWd>Y [ 7o7)sQVT ٟJYoBmzGCY7Q7ޠXB\u%^Gfz(E}da'؅vh6d`%Jme.hc\7ǟsKYqd[ٮ8wӖ\4E8?''DդBodaEOsrD$Da8 æXճp1̙wfI~7<`NnIZZ/P|H@M^LuR6QQHW{$Ç?x!8{)ڨrM]{X ēεY! 8t;W8xX@Q@$ڰ lڷPC%vk|Y_u\Z?-mO\:kSڷ{䆌v9s/p=}nR:MgX] o4XtSO|N|%Zn'\x=ɆS8MEȒXZPHu|nW42cxމхq %ny&p>PG.6w{ 'szhM Xk;:.ۄc6im;Ųw"j;I }P"t}հR2|y&RY:anHjږݦfq?Jdt͵HZ [(fHן :Fb2ˡm()/!T=&Ҋ0nI˾#1u>L % viD#sή o"8E6{X 1wަ{TІ R[jQ/,wkS6u3Ṋv 1'4U6QX#3jhz2:D߁ --%A{L{>dԷM&+?^zǴZ('tr]4_3Kx Hx"- rjC}܏H[&Ui e<˸.kDQuxZsQeLi`6,hDSv~bpej؇qTJD`]aktXG{Pc ؟=I@; eӼ22_TQ@IZ8*! 3cOXR%=~6m[03"6[h_q÷J'Zw?~\G endstream endobj 155 0 obj << /Length1 2479 /Length2 15813 /Length3 0 /Length 17265 /Filter /FlateDecode >> stream xڌstZ.Vm1۞mIvƶ4l;yq׬gCI(bfosadebɫʩXXؙXX()լ\l8@'g+{;Ȉ9]@4qc@`ccaWމ nfeg(<,,]@@cJ `f:@dejl7vڂ<TM.cFŁݝ֙Bnb P:܀f(N fio"XAJvf@'?@UFܿ)osːݿMMm<,V6@ /Acg{ H_$EƠ3_Y2eTh ;31{[[3_[9MAdvv_:0Y9e#"!Y],,,<@SK濜y:d `Jke}!x;.N@_2!̬L]&@ +;?Ad1h <,!d>hl<̢"bҚ'7[T`dcgprxk7Q? ؙx|?A{X4@yY؂;&IWIW#alke`D*v&߻-4r2.Ơe <#/׿VΒV@3%+S `ceTw0)@hj :dAM Z*agjo&qr=X@ f_S`fw@j-'Y/ҿh n`x#n`2ȃ7A =?V@VFF ΠZ9[)A dlj .=3@8ALm@ '_[?QYf!;f66NEc$\]AGPVnA?@azj'pPY-=,vѬAյ%'".P6M>T bcd4ejk9c@'*(A6 tO39XCVBp:rfeaJ:ظ#1P]]f&+Zc/tG9AΠ[o؜m-aڟ@A*c v*.f@y?рTN?G.-@^@ayޔ?s]HC;{?ݻ+ B .Du)!Golq1K*]HyH8Bnwk^N&X P H3z>K8+~hc1wڔBbata *hyq~)J)̍t| OEn~Al:Ǭ0_E Bp4!.f{ ( Cd92N{/黸8[oE}w9EҿbrKOGfi.r1ff~C*| ˓[Ҍ8im>ÿ{ߗ70l~OrBAP(?D?2 B;A*}2- :;'!j쑴K\0g:0㦯s[qPV?)?J_u6O6ɮ$RN!&?~?Ot5+K &EAö:hWc==@m{/I%ThZ@/|8eJMeG`yc41ɢEX2~yDC ^$Y y7SȄ {0yCZSᡗ3h5§aeD`j }3ͅy+*+aTsL3njDX(sSmb@&neVݗ(XmPsmc`2iofٹa&|J LwyE VaG BFofZ0^/@b]!3C]ILV_U/>(tve 7r}v&Osd3iIw|l}gM]}KL/y( E`J>3qbrwnCmXl'~ڷ{uQ ʨI̤/7Gf2G:J"ʭ"BC1ś2bᨽMP:I(Rrd0w'zh@b.A|޷͇ ikY+pcL^"tXyq?L>*ahN2\l(_m(Y[Jr5h@9"*FVm\| &~{nyw4Kyݦ׿ѥ>+߸eqFcEכᅞ&6fYyq-NEW7Z/Ѡ)븡xJGeÆҨGeHY`aUЕ=*ݓ7ɘqtM:L̓b‰sse>@Lu4pJu9t˽V&r0W:2-Uw_5V -h@0g80QbA-@.]9LP#]ɔ, K.riϛrY:g8ju;h"[`˹X$ͬmO0Zi۔^]QBv>l"G.c ,薛ʆ6L]PTnml=D&c/Ɨ ֊-r# >I'?}2$^ZՔ ҧ f:(kL '~PP׻y<#W3`A5}eq@" v$cn+xLW蠿f rK^D(6xMXUunb:2<1cnФ={.w>6m45pUSx#{͋NZBorRK4("5Y>6Sx 쭌B-XR88t5핕8F2H3ޕ{#D)-.X}d«ΰ$HݣXre@Ļv1O;ԹMꛏ. } s`mvjzIq~zd=DV1Rp&W&AIL޹!n"4AO ( fRpfO(Al5ZwDWg]7d,${fjsҏ;k.~5gCG{. f]Kqknbqdn[99 U'h`}g+DC.zMRy\0@KHy#p05pRY0a#nBxbfKw'<"^ƜM1fF n;AO6/c\#0yki`HmR^؝*tN72. +ETWnR;4%$g9/j~]5}*}̒ b7Hx B6nvnMx43HYA tQȤ @A3%X2~A)D&|gE& )vc.ZuM.fnt3Y5߂=oTL#o&w.ZꂍC?mH%~-$q{tRVF/a''d>wW!h 00":8S؇ǂksCቧ_wBK|]7׼8K!98hs.{oup_m5Y퉇{bl@M K;}\bD󓺷laF(Z6(txSz>>ޚn{!L%(P6`Ab cqbVx 8}'^^WS@}2/5qB(Qet-Jz`V'^P{,wt |6Q$7U^N}$񈪸7P{'£ߨdvd6yQү^"gC$IJpDƿ8CD!gAZzH hi5Cxy=WBe?ְxoFփс芆}(\3G}L)yw+K\mRsw`ç*ϵB-x8WHυQ\+K2끪#d$)JWIi:K lP̺ZSJن5:|)z.Ũ;훖n K`3bAFĂ?c}M5~_P5"(dPf6?Zpk.Cl/ {DcUz&i}qJct1~\pClj2yT݌͞Y> |?H=F\@e[4 Ƶ޲4!pmt[Ψf}5S잶EˁbčsSwa_XeLTe<5 (L~8{*dL63* wmBH, @V9v(\>^id*tdeAfLiqr3Yx\;⺵Uܞ{c"f&a2pʫ`mM %qlw2^ fQhz`!'z !8|n,|Ep:FXtk#}uj:<4FYEPKPf-_>l G5wkGq< g6wN3FeAb(L)98sL~w182بR\|v`SRPVM mrJ Mʻ S},-ݼ]r8n6ׯ]l6ݤ%"?Du>w!ae%л%Lez"8X2\^)dӉR((t"9,4f!P'A)0d!%9{ Yp9FK9Nز-l`1ᗦ+i~՜5egd'm~C@ls}Z(߻~2N.c焷`X>%./͕Yܚ"aMf|(!y]Xcצ6WHꨫ"xͰ,l| u>NnPtК' 5DRvyB`W3=s)}\'yJ(IzՒW-my= Ejgϓ {A!y%:_NA)`"x+B Pk H2m-TZ 9lt!jܞ J8$Q"(gϏ=~OOxOEq=C>~Ti #;!IdSl>^h{YsxOJJNM&0!r,#, klDۨ%}ۯ9aMLH%|#j\bz;c/}82~?qy W8'cD?|~}SO\ l!: ;N7q@%v~smlq7Y'sĭ JG-^KحcZ{t"wi{_ \ٽp T +Dh~L~pG,!eKbL>X 4u5`$G3 G^gH w Ҝ~M;I}aqB 2e/ }E6+G)A_GQCIgWNǷ0Zp cITbz RqUoX}^rHaĖ*)s\BWpKuGtfǩg ?E+x^0RTi+G)fuZ3)M0i7S2*/Wv`ACO& fwv6w<(tvo`ۡ!VR~&]|^P_LO")1ՖIElȞ Z^0úA.AnK׉W7"08HlUI]/bݜOu6a\Kp5GZDIų'C ]_Cb5܋-5DH=e4 vstb_YZ(%֟~ K >RuڜC2 : {)ӥ@~6ldЗu`v{  (ƒHBEt\T?٠(t _Y{WJkkz,^H >:HK ]'* tf z\Y*Jy,vǢp~ca0aw-@~5ւnD[(shLf 4dmVa6͎g_u o(qAzh?8xʎ(4y߲>1aO 3Yom/-sAHak^E<,m=8>7%pMBT2?r ǜ hm4ȜEq"Kwd=6q($BEد= ?? E dԻŅMet<%$/nSJnGZ~I,9][4"'h!ףٍ7 4 @D_6#Zel 5:B|6.u0녧6L }w¦ E(f04-"xvK_#a8IhC #-{Ɛ,%wiGv()٣{Y}o.z%~#pe뷥舞m_)ǂjV7ĔC&k.b;kZ^\(plfyL$ogިn0 a yfwŚa|" m6H=dH801D^#f m3WsC\Z(0 N!,2$yYd]Į,t1M\% ~q5ڱa]|ٔRKe +{YN#A:,ƈiP!'R&`tBRJzJSw 6%c4 TAJh#50lh@GZ:C;i(n#w$//!Ii~׮|K] VnQ N]۴ g|O\}ȣU7F`ϒ0,`T~ۆ„Zjd3S/Gg)i&Y_KYKo*}Y&$PFrGf[+SͲK)ZW0[bgx\t.Fϐv&c < Wd:ϡ3q/&}I"O'r9}AMn8n%ZXyCg\S7 Zz\[f#-2 bW1<R~FUח,5(oL)(!\Yss#\~$F["Y||;~ h!_l˩\mgX| mŊKuN\h`7m Z|rңT`r5E/E'A^I's9; g1PiX0S29`=9RtŮbdeViW] vt0P(WrdD B>c->"ыdcXbж_w ; p++iP>;ȋ(S.PBr\B6?=Sټdi[Ʃp/ e]K6;.n]/y.u`ʧ^oLZq$U3s%ۨe-JW5荳%w?WYC]V.ktAXt̓2vxJY 8[`._pvHP)kl;D輔g6# #V tM/'#~b^Iʟ᧳*We#91! CXv&b%X궔.ˏ%v9@k՜q&&Z͏SOX  >8.24!6\'AzcH3I EuvM) Ys&6O[^cV:>l|P g-ۋCKe[^ngP_iϲlNAAR~/5w9,8JQaӏFA"**ʀV#Jq FӠ-H&L;4Ák)cnc;uq'sp߉K&8qʆ,.Hy| %<(6#9T"Ln}0\aFkMZ3H[9>}+4R(1xa]"ޜǧ#0^7Q%i˭$E=CW*sH+iDHDW洳U9NBɂXȳ^Y5[,w>}Se{vQd_3lΝa4.mUt当>`o 8t-4?E@e;m條\=;pQw[w{3v<9m~QW+ODaa>X)m|`M-R!?Li) 39~U\=̗RqC.1䗞g=MOŁFs 8_屝Y][>}|рPxY*=DܖkՕB.˫?Mi{iZ}9~DZ£4xQu]9fx~ ;hm-bxѐGIkԷT.}x-/C<葼#6mH'1 am:Z_-uJ>7LsdpcuRo3ԧ1):xUl[C665Y2BWѕÔ~r:cWqfۗo)*Fģ%IQK3-*֓d|fa3')2gblx" SPRUa~fs`aWVة& 6D3vwCSA蓵9\nL <6*NfyMe|ɪSẆᔣhrjG5+o'DbFn.S͊z8b]mRs%<8j"ԋ,i<#1xNCu6#^ 1]ʵ /)lAEg v>C*|`W~Ըqc.ԍkc(KF+S-+5Qk Lo[N+< K]"0$T׉K/P+鸇:P#ڗFZFZU,bkwe㦊"pfHI/Ti־!rhؙ5MosJ-}0[( i;٪Dxb "yըDvtm/ae yf|iB1 X~S.o]dvWpg+SE?1vCn; woж("EhGϨ,}x;pg.mW ۻYK^\aeG%0*J !B:W!!W$~WJp1u:0om脬/kZ^Ěs/J^m x˺5^;Du#e-_5$bV]'MMrӸߌҐYb^-TbzVcD}\UG2cƧ4]*ۚ[ƪ4I H4$D#KtTb@mU>tet>+?Y^?yN*Z%jD<94HgyѐmYz'o|LԹ~u'? ϊ- Zsa\^õB8_=E1ם,c9:o3 \'x(Zn9]s%J>nr#U gGP]/ T#O<I?Y."3Cv%܌\32a YdyJVuU& e.w'{ɢ*bM_sCݤ1Twq:͌*a 8]ѭ+)d}s3湐m%u$ry;|zmjӧx`%5P'*DfOhڧz,7F_{+EռҸ~於+P ܵs8 anMK}/w ^~Çt)Mb,ݗ8>CBKil؍J34CFE8%= uҾh9{7\r\{zi&PkdHriIk ָHj=GG I_H-(g|) -F!7ڮbuy`o-Aƞ#~NR\f][® Wޞ?s"1WNR/4@ҬwL|EK^>"=]ɺ1.l-!I>hs1GDwDw\7Ob~.# ӅMF2<03rJsJlcޙ* zB❄?F⭮ٵSJ(3݊f>Ly%iKT\y;i]pfwVYHQOLod4m-U,]e8!MO  ?b{@x)5uU=F +Ҟc/oՆH6ׅǛ)qnuKVș8vOڟ,]ij?&hV|Em!:9~M$LVы$% -o.Go7*gXkTupbӔmD$vb{]/G'򵈲2ν9;伖8ly]⎣$#C~= ݾnH[R7ҷ1$w |;OIunu𷅜  lž)pO6tjȋ&nxċۛtnK7-0,1n-5,0 m=~χUcʺ8tý"?yhE0;̫լƿ_5NDieyckŪh)9a7lZzԾu)g0\Xʟ~!{8w N"v'eeݵzЧC{~߈`H.[@̞MCcSsu!c+ZA&7Ք(V!*3\7G6 5\oƢX4ܯlϏLE9 -]vzH&mw: Nb/S<ksDChy,Whs&fH4Έ\y;q6(Wo5g$} _͙;%zxv^Z-.&`tuPB6kw)a$h E~U E;, k#x[^`T͘?}KVޭwτ[&ywΓ+k'x׌vʒ`:0:ajMz]o})rc~2jrbr#тj9'|DK&7Nhgʣe%-C;Q?4k\Ց&ܛYqzli٪Nwy9<Ȟ򇒆(ͩºBJǪRȊY}i^ ZE7ibr+)ޓ80v9޿bYA\)fu-xSIgXss󐏭;C>JW\%Q&^t`ؐ+B57ф׌Kl^`*+{cg l:g\H!0WV1-EMf'Kunhm8, oE k4]K߮넴F<~9G-<x-s"j,st}`$7/.1 Fʷ;cQ;\%`8^)W,j6G|fJIU i0k_t P0DOEDF^ٕi. Gx"Tӡ )vpE+gyfI85p6 Ӽ ]*31׏QgM&P<4ۿ|'<\bb l?]h7t5r뗼x$Nw*K[J1C Czj{56wo9}[n>'+Z8IoXڶ `ttD Yҩ>/ u(Ѧԣ|fwwbNhR_X< C3A:Y@V`[Fo!zE~0!D[(sqy5%t4^\]( -V >:Q)F:ELXїP'1 !X8a}⎯=9)EBxtEE-&?$mZst2ۛ5q ̓n|@ۙ061mt›[OPC(+7;\jYPk3Ssg|#WxVfՃ˚+!Ht>j|8_vZOUZ'L]{]zVeU璜=O+%ƠT^H)%BwU Y憰kkUK{=({s/~F[ږC'S;.'e T3Zpo۫TZq%=¿΄w+W*x/ f&9/>6>7fFf븳{kb%y2iҴʚٱMY3*Z.W+kӈط_> ]!$9)S4cL*33u? = >3rc~[Te̋I3)Q~P㨶N=#d]s#Gɜփ3@Cj4f My;'BmR5b7XKG?P"|ŪQxZм=^Lp~ɱ* SyKwW#P'~GH;Bor ^Y1ýfz%Ap |Վۤ+& T L4klv8BE_pn)K `JK$GLu_^~~:w5b=im?QsUZrtHuYa9~zdicRtEg-M-Wc[O{-Y(sR7x-fPXKqQ ]y,L?Bzoe; bQkl~٬2{$fΰ|PjlE@;ދ-S\-E /`)%{d]}+7QDYZ endstream endobj 157 0 obj << /Length1 1809 /Length2 11154 /Length3 0 /Length 12292 /Filter /FlateDecode >> stream xڍP\-  \7. N5Np kɽWW]{s1צ QVc1%N ,̼1uV33#33+:Bf!4rz9*m6 '/ /33C/@d P`Ȃmb`;wk^&4.?"6@-@h6+5/+##\ r.@S-lƈ@P9P99k xP(m2ˀp,, @:mlA35$)D05ob62~5t# ÿs4q992:0c5mO4y;߇ke vlMhَId U`fff@7 ?T!~l0{m 2!x:N@oXX '1doW1/z 7WMa`[kQ\S;72'l| f㦋K9l$9ASaw2uNP3@rxa~ Un6-?}RS"giF{ bX3ՓF)[ܝ&j4Pgܝ>9suN}#OۋL 3 nM"m/f*'S6%d59b`mnt&{Ċ納0IBl0TUJow rw|d/z=),)z/I J=/”M9<aIԀ3@k̓ZСW < ؓQ"^,lT)P m\G&B37nv}•7p_ho5gsশE͖"U'>/ݏ@ <:D*6lY;lRQ"߷E9Z*fAnck#&Q Z4/UnW;$ۚ$ۂ_0|M^CHN|ޮ#ZNlqK~[ W |N{xAQ@Z/,?#`,X"s@kMcbp^Ѷa"6;RY MȤU׋MijPdS Ueʜ%FYP2}<5lnp>?(IǢ1Ҩ`13߅۲UG&GHOh%d >fK qD)XVA5ɌSE@Av jx,{1"oW ;̏pţ[2DAzu|ٺ"SWwelj<g>Y۟JA͑Ubɚ8(FC؛|~0omןՊ#J3֘V!;./7;0rI8#~Ó1ї:d[$AY bsw[!?.ţT,tYz+u b`G2\Cm-q%pG6ӛY! j)*)'5Xܻ/zh7)Z)*#IZN1 $B\솴KRB+g-^uq8'obHBl}cV )s?n GHszp0,*l;Jq>`Iv fϧ%5*L&TjM]d̈́ϊx4 '$gZKSG9H^_ b!3n%Y|}b7UX)ZN[|)!bAxi&[:r*Ih ~v?a(p͸l`B^lkE:EzԈ[xD. ~yms+><#C9VcAGow f'htV=CYPĎ7+l@ڎCZiBR?5|@ų&?w)ɝgOԐgBH$A5HkdaT0e}zˮ(myWoNZ4wK`5ף Yx!Kt\ U>NX: d; ' 2\ +עslт'׋@/uWi:cWcrOxz`SW8HA]q6µONo~q;65W5E<VNH\QLtXTƁ\3+de-hUg>V BX V_hHU уؕs0bU׬g)(Jؾ*sl G@"^r­#3FS["PK|Cp*Q֎G,b]O`!OYHBb#XoyV}E4/%R|.jg< !ҩ?XNIe>G$^4Q &y U4&)Yl/FB{wYT`iCz]+CF7梈68#Z@vc%]0 CUȃymth2_S2-zAw,$D_R4jBjNy!/c8֬\; )J _:ջY^MleH_7F%ʧǛ \M5]~A"R/{jgNj vk7 &hw l[ @PaL[Nhи'aw||P; m*lbBÕ}.g?ٱWA>s_iҒuwbi+aWk% uL %LH#3P)%Yf|r1/v9yİNkV|Ey@Ѵ.w6SBNh/ 5_^ߍG-K@y0t4~ d2l[Lo [klpfxHCO7蹯aOj[(FkN}|DgD xiSgxyn*YkN'^7F&p;V=OUs0{( Ƙ3 PEnϒ-+r4> ,DZ] Ì& s.xq,0h$[THc~@ ώZfFg$.8t!X ]؊3[ǻ`+ p9-ꏈ< Q ~9s~rz*lL8Sɤ${,o?YZe}ߐbR & s+$zjSF<HoH3|>"myEQJӞbQf]r&0UG&WƓIxף?s`8Nk GV4_LNȏaJGk":xXfI7Q3StF%b]?/+(kE_WXm5@g[HIӦ c>p_k$E&1\f ysD0Kv~ g9vrZZ#Ҩ_KV#gjXQy&$OeKQB̟N-l>RMD܆\":)|#8@Dѷj?sR)h7~Vds x~RaL+f})Ay\T3%#1*qX}/)%x& 6FW8ezk=Yߜ=GH/i!{i3:sa@O񴰪$@)o$C@鋌tuSr>s/5>s0E|nno1\Bd(/-R0XqXWvjj"qf~{0ܺ:"廐ZX|ONhqIkV'N*$X*?EQۆvx-W]odi9=K_v?jsټIQF>Ļ:DBWx( EfQn=g'r2IX lnNBwY>-ℬ) FqL ¨ /RN YyrJ UtWTm7/~R.BhnTb^HoӒX.!Rd,έp߫0ysX)TZ A-"{EQo||gQ a.ۢD`>c揻qRP3ˇc¯M<م)5JKX)T畩>8z6ԕ! ;V H4~S|iLrE Gd~PĠT2(5 .84̮IT0:H; :Za=1J/Ꮹ%%$ohUbҘ&l)0V(b h۸Ueh,bt^n#tXpb2U6KXcXQEհgғ85[Wh$9n,>#uO oV/b#Ks9~zAb۝'KJJ}?_h:3z_n}~C<5VU(ZrjU_Ε953RҬQo45j X )jԔpQ׆b2F1 rFl PlCIhx}aA`Cr-~dN٪Ī:־VpGG^mHo/W3xӝTϓ];Fy¬A:os5O:yJ-;؀Ĥհ?̳f< 9a2RҔv3b?60L@}Є~os1*Aa8a}2bƜc4] e~t.|:O:DGݍ=*:F5}{ŲɎao&q]3!Tvq9 aЛR;|_7o*:w8{Fҷ;Y3!t?%J[eTUiiCIU=Wc?^*_?$!5{4iMa7=gQ]TGɣQaZ@筁Qj0^Un iV\;No++I-)f& J{_J"EعYcQͩd|]rn&Ka䷇ ^Բ*"%ӮZ0tm(g#] EgcȿU@}G\ʠq"v9x{okӈP{41Xf6|H95{=%V*mCد˴cFU\.M..bp.b&WfiS!IA!6(uvڠ~IJҳP:v5-[Y-;ׅs=mQʦ1vd-{Y((HtW$*sxC:=gtuOcH`6Z*2Q@S5e&Ua&wbo,~ rt=vuuڄ0g~cU~TզH7|=H C뿤Ú=@ӐU{1Wa[/;mmkIӏЋB$3̎#i0hrhX9>mTkt?KL1Y;zըz Ye+d OmO7 ]oi#ɶ'yc6W0C^2dZDcqvZFQl=)!1SE jO預8F kZm೮dIX kR0C.r>y`j77\JJVY3xɄooLif z2/XȘ`^3Upf nO}xN5U!Og^KQ .Zv+j ,AF(+$`(3HQok\y蘡8h6OB,wJ"HUybd ϪAk glT"&+_ߨsKϦ< bx5O >*75;|IŌ_`9VVC~#3nm]!HQJǓ"LV9;hּ#~^ rhGi";_(ؙ̓8B:N;n}qFL |/m_q|# a4gZ{Mw ﶴ4pZ/t#PxekA'Yao[Vaft5S0mzq w)&+ U+]7F#6l5X:j,X"ܻ|^9lhxmX+/C8 pyqGoP^KH) 4( l4q(VD3^fnUiqM'o} :h+9T8/'iv{AGTë-@M>?A/q Wshev81@Ӷ#v&boتt!h5seQI`icu5נ ,#hgNTd&"[U?쇙̞L Py?R*:wCWkZ7Vupc'MxN sEk2,|>WJF]͔-qZz;RyQv*s M1D{'7KԶ׶;5} ^L&2d%}QO8 ~셦N|N!쌂fN%-5xj_KZUTGy@>ޟLn $Ey"ܱRzHn&vX>,|a*e \krZ6=R4}d/#4b=NJV^- ªW߰ɧm~Qɉ \T$. ~՝}xcǚ_>UA嘪{|OETC#AWˠQվ-!er8Ȁ 6ҧӈ#x:wY ;Ov9v^y3Wƭ7ȇD) 23[s|]A"4c(-1Alg]uM- ΍f$yrT*0wU?iCl]]şox*EÏUe-Fy>b5l/Z++.gdT%\Gwo吮%o)CrrB!(336-b es:( 1B#u+2 :|E) \:h!uTN\Tn&)!`_xD w/mr7:(31jC`R?o3uN( 1,^Dr8ɥ%њvS78B"l ps},ٽuY7{<ϱshS_dNnh=y3>KYuA?V)-Ppg,2`.jϴd6H_3ǜqݸƘP5Lp 9sU'K:d Raq$ϱyxNqr!O= v4v>yQl8ph"b7?KNv#Xnv!ZB\!+ I䛣+@uNO%7]M{Řt=J7 fɋdkҸJQn(=X0,*_'LS}jS?D~w.`LM;cl+h:OCwOPT(oIu/1 }F O'q9dPǜμdXW,m*}F kQAQC0+uz}[Y6?zŭo"A0*YwBɪ@8S,KDŽ|D4B%xjѳNJ-}69ӥ?xο|DGcn)jVs*J/[uȘ>}Ѷ9Y#9)SZ LbHe>ٓRDO|)xz,~"Ra:Fʸ/Ӕ\߫)ZT Ho{f(-9rML?']0EMHb}j7!-Z{Jq۳" aX3d,m M WԦݐ@,uDI*6H{ imӣh4eE1U8nI&EO۔@u m=DSFQn+hߗ2Bm ߭c3^$қ̟% y] ~(K~>{6ŗBؖ%ŽöO]'1q!n87oF H(SF0R|k5t㈾.F~5fK؞s*[OD 7UcVMDԤme(2j۾#h_~^ RR9scF辸v-Y'gNlQ5k V 3wamKє\"}fzQ"?>|JCx?tӤ倈ⱜ}.}¥f9YuGݛħ߭*C}P&EeOo3p彑EBBYʟ[u 恞Jq \Uvr}[B;Fw^å#DMԾy9ZG& \\mZELv;Jցb5l?b..HpEo# qVa泉)bt,<^vJ" +b$Xg 8hn՘&5f$"BQ$ aAұgEY5fJ t!> -[J"I̓f'.rP1$wW\0'~J7L᱙̬oezȗպE4yt\4*֟H"A]S2L?iHs>ȒGn _ `M-c $ޫ LQDz#|{4_5͆`1?zVqK暘8AM݆#V0OoM2 u@➣ ˨K궴T ¼h#u66_qᩰm´ŷRb{KHw熯ePeZAa4ק$uphhܣQMXd‹i:vG*c 82#Twv"F !U#qIfiU]SdNIl"W/&r~9eV> Uq0r&ߢ4Ql :1A$MC87[;DtVBe}.յ H=--,nrWWʄx'c~/|dڴK !+ w8PSр)4` endstream endobj 159 0 obj << /Length1 2592 /Length2 11352 /Length3 0 /Length 12829 /Filter /FlateDecode >> stream xڍP S !!R,4H7%%-pַse;gi(T5L2,lI%MMv' * &  9 a! 8CeR&PC%{-#+`c,2qX@*;di W/w 23(8[Llf rvv`eussc18-En g+:)MPcAhZ +4,L@T` 2C..@0!PqmY @ MMA -"Ι `bo7q5ٚB * #02 rt@@9m>)h;?õwpY-~0wqdղ9Pd@g7''3b@`YP=!&@3*;;d 0ZQC@1t`;>tlf0s{['F*+ZCS?SJH8x298\~nF)o KhA@ef3~>\m(+qKOdt]k s6^Ad@ g361@ۂ쁪 'gf}@K^f7s0}z<0 _Ov荚V{g `F=Rno߈*xO*!^6~BV'ͧ4SA3>!h'͠OO Ac6,G 9:#ٹ5[ ZDp+C`0F.6{/)d@5:Bv/E2\wPzcmTLS}7R?fkVQaQJ]HY: ˒\Q*]XN1OzN/v_J"oNo]P)@vxv]Ta^>lkTQKhu#?gۥRF)^n!&,ZVӞsR$v$R09#tUK ksXMJ&\,žzc9]L/N)u=\!a\L7yWCxIR9^]YZ֜Ynԍ!w̖9 Qt=qE/_ mT:b Mg%o1+Ɠ4l1̄R"Q5)'CSɮ3]{N8""K/~-Tkj)w;|{*,|Vǹ)&x1ab_WkR/al5¹nA:{9oB5?^<`/5yC3'tACGx3kF"%՜͌4sSZO֪uKu{(,n uQ;T˾dgn޾nejP"f^)Ǯ%ĞO]2ba`czIf.w'Yc)2yV>iKd185^ +1hKVI'"t|VyrKYkҋA:4c̰1ls:h{ EO\t6'xVGpF5?_JKbJd;C_HOcӬ0EeF:[󆲰 w&1dǚ/($4Q_6$&r[y/`Ϗ}6 áJE +CtҥU4#e|V[6yz9߯MGi2N% ޙĵ[jSM^y'ϒ~wډr3r6 RLx~w=tpLAo0;v]$ꔏ1jUL,tmlL@8*r=iky)FgHW)k0=¦;X( iq wO80aWD(9!˞ V r9X~w7*udq֌X@@jrKzziP 7CxEŷW Ș]k'EڄKfH:}gEծ>GEoՌ{@j 5ɁuhRӞ˖yd׽0}lkG}3 %oDV-pj[ߛkţO`R˾wX!H.CδъzJ6D^7佫v 1A#`W'|HF`{[!DЕnXEu8z;Ug*5G6y֍pϏzA.8;̢z e[,.VְϬ6\.Fb T7lb'_?n% R8YfvsSz8F"h>Cѱh;4]|p`;fTG]A ceM%q*đolJOumYї"= j M>l t-0AӯrO*cy |DJxAD%@7v}Bxlċ$t(~x n5QE4^"h1/-hJ 2{ruM̋niidLbp:0XQ(j1:hpٸԜNiy![ #BI~@{ sTCS|2-d t!x-Qe< թ7Z[O/MQ\]fw"|rѝD'ԆRֽRƮ?n` mZ44-gUrh`4tQ#FCfž[V;qcZN+TcCEI@-5`«nyiXЙBE7!_$ )..~ xe]tBS[;5ux` 'DVzV6¤*/p񚑄<ϹZ(;\s 7XE 8${pJaDӘQrjș9d8}d!p]򴖥Fk7oۘѯAfvϾ4NF52f׎O˜m"w_d3- 7QjPjyFdz(З (#+ݑXfUtV^ 9gj9CĉN`E:ڛOyvDNug8.ƨUPQ}7c{QSB>qnj爣o·7],h6gPNo{m¥3]~eҠQK,kIp+i1xO炸ԴwM&u_/z<یs[NdgEϹEWvJEj}[G- NKrK:jY@ =Eno79ad}gp;co0@`6Op;QVK;/̰ߥIZT.!T>5Vf |H^eʇΉ9j+R~XgT5b?pЅ`(qn; R Zg%X46vZ$!euݢ_d"^~i!qO'BMtؿBЧ}6gq3C^j {|b( pt.a{ٛu.Ն} 8{WVT8uU(w26X~[hJ-?#0 m峖zuz5aLڮkgpE`=|;:0J0!L e&>ʅVA۟Qnщ q `KWdsްF+{k }tU݅X mKzuhl%58n9#l)x<`*H{X>4txB`B]؂a?k=#t\5 ,6_ھjF6>˱!mv&TۥKO;}' bZ|bǀϷKm/]Ѷą:RV<\d0=-+*O* k{Ə(sl([2eRyi6SV FWRްydmo3#xaݜ<[ M86':KYKDD4CjE W߫Bmf0]٤h.'xy#zIsB;e&7r%XSزٝUeQj*uoŌpTk=NFܰ: Yfx54Kh`{\ֳ4)7?:s-SbLwʋ+ulcޱkN<7ܜI,[ku9h 'QPcH p,$U柎({sǼ)6~0HMriקԢV*\/8ѾV9< 3Qb*z'nX] |0j/i2Qss`cA_Ө ߦQ9Dͻ ^rX6LvѠ9?=]5aD\.-Fû O]! S\YupPox7$Eln5R1 $$.$Jv_,U5_⿉<ؤ~w 0ya6-_*ȻaλdnC|jjbP>O"d.+6$¶ pH;pF|(V߼~*8''-)F `\>pyp/~MVgb.5{ŭ5K^f7:un[bf7 ~F菉;v(DI~[j1JP4鶭ū7ܳ1 o h@j~\R,$q !Mix7w HU]c-5\,y$r|$[4 MG?Ubwd^j KwxD-%P!KꄚAB0ܢz]hK.FpnϜºK y܄o2*nK}eqُ?wrd`g8'4mIT~FXTA9r%r)LWh|W3z<3CH?-N9I^v([R)k/Ei}@Vo~pZXzs<[Lg؝(u%)MQZ!#!Otگ$.P`cRt cjSz)Q3Ha+N7}%6>:Ŭ&%fm3'2NƗoxcO v5ϳ%|桴D+ޔbT]O{@V-CaTم<ֶ;~ЂB-Y65`ODB aCp|  VUA.aX8ctˣrӌb=D,7Ͷ^o'Yx@*Q)}_nw:$-'k#|D7 3+:sf@G~ٗ^4 v$LpqG@@ԻWBظk(TGEMSyuٕ~&=zkfSA{vH]Ub8r( [M3OEp }1*sP?RXwKhK6?FTcQf=livZ"yƳ]1/V /햵Ku{O)ص p3 */& S`} HNÕ~fM;>ZGx~ IGLw13|NVU7ړ'olyrK6|RffTF1˻)9;Pr-~ bmUGp:})_A3^|9o*A\i3SOZ'0Ns}lK|GQWTKZ̜__#s;Q+UY~/7!z.oپm(q+4d+×t(U'uدZbXޔSBܙ%`=oƂeʚ:50IE.\'`LW,ҾOKIyMX_S8a*Lt? [3~6VZf5޿@n,J^H 1]WwC'=B&x2Vִ7x)Uoܦ0Z|H mzVn`:`܊\WEoCچҵ ;EdI/N׿KS#Е%^^ʊ/''+/r 0^ T\V@wo zٝ%N"V{^٨\./7d-JD\xL\Tp]ݳHvz{~[>Xޞ E-Bܛt r]6ˬJTULGRݗOQP3JY6(w|WP[$\iS'=i5JۤWqn5h@2m %0GlqŔ9s<:jܷ_b9[g;= d4"/"H@(/D;;r+>MM~2Wi##wːuJq x%Hþ Mpn$Ӌe nQ`Lrr!+ /C[ϗBC~x~[TwⅨx}Qtij293LHZt~֘yF k? 7;/lY]H)F,JWzk=I$noԓ] mF9`c s ͨEɱr`} {Y042vPZ w|S8 ՍB4]z54?%GCy& 缬'x9q7dD/ SFDO?e&|LHaNV|̑6Dٯ.@$`+0FA7(kMv$ (ZPt-[3\m95~O"'w (ڢv(f bg?dw'mǛ-j 8ܙ@lzA·?qs~;Nh[c_[Q29:3Rz=:*QJBsXi&m}P̩1/62u5Ғh>Di2!a~BcN TZm">`ɹaQrkS 1KPN55$n`EY%r/ʸF!Q;|@qzُQn Oޥ}mةD'x;>-W a3ϘR?W^mMRLlѨmgytefxdv[cߠ3dl 'vV;Ѝ+1X{0^BE-Z̔NoeK.VBhg͆,Y0(L_ώ10ٰ5%ɷDR>3'trs،7W$KxfIIM)ܲHAkӾXrYmlE>Y onޚ,ͳN_d?bҫ.:Uؔ L{kxMsfkior]ǭ%|zu[-xέlI4ݛpW8R;ؕõJh jM]f 2)W{ 6ƱhWzVۥmkOxي\uP>8O6}~> P”PYg Qbﭡ[5{>y}pQ(.WZ 3\=Eͫjm&MEP]u݀OB_$~(ru5 a͋-]G6f2L92Lmܷ8%lkC1|~E)NYI`}&bAE\߾V߂J*w<x'.?Wü-RZO/O| ƾК -)Kl(m}` Wr*5m_ոcNjƆ{ CE=Q/V.22t;طJՋய텞KO v'9K*agb(UuXv^ =m1T9-b|EapAzn9^ׄ1ulae D5kF=#~a [HG*Rc]*]5Ys3"@Sq;ڛT$!Eog0 gnJWIhc?T&'RUK[pZW FH9_͹j8D|ѧ WZٸ!R0эMP<[VUpx7"keT# حYs^GCv!nQ]LM$}Po0H{'L/«r^8>fȤ{ 5y:nmbjyqӉRzWo Q^"3 kӴe)d%/?Yui\臺qw jAMV%7}zTɇʎ ą oNs;5&.Bk`GeY\Ϛ'Wt̒ Uy꧙`2-P?MϣkڝLO9O*ۊ嶈םKRLMul?*$_g}q`0%@&\'mZ?yKuכfvIUv\&mVu}QppZ[&Ce@ei[L *5=z?Z K5zGcD8RuMDd?4}E4LM4Y3TYUМkkuW.67fMsBRLL;2#PD4~H 5=H{Bā<_[ }.԰ڎ,a38jQhxCE'  yU߰^ɓH=&7g/aBG c0*Md?hX˞0 $OlQr"j.>zh~1X*'L1aiE!jkd Wg9d)ʹLd)0޺{*ox5COyHc.y髩G41ETqbԒ|" ]>7ϋv#A $Hǯ\:M,Ҍ?F endstream endobj 161 0 obj << /Length1 1384 /Length2 1126 /Length3 0 /Length 1972 /Filter /FlateDecode >> stream xڍSkTSWaPR* p\ 0򊀉 croH.!|U`P+*(jBD+2 JScE_VpnpGW:;gexLܹl\ 'A<..pJǟ1\Z+P QƂP&H(p^|H R b0K JSIrF?s\/)+PPJ+I TڄL_9ENjj*Ujؤ:on,Sr 5PR`VJ8NVqJRFjh@ca)]X**H iಹFpbTDN$ \ dS:PBj$ IǣZW4T> Uh`j\Ei\a1[LHIa/WC}gC#T"}<" (GDxr c K!\"OarUi*h:aZ>]E t R@}; 8FD4 e{zԸHz1F&% Eqpldh8٣RCx,F; &T#UJH5,[AڑIaX LaI81K!<6)OYݪ) #U⊴ y[ j\ixzz5".Rj_W+y7Bm$$sνwHuߴӇύBì :崮+-${mV)W{ jeN{i&[{u'\kv#`eٳۈv"3=njϺCT-B/oܔY"%-~==ɿus-(1˟a,oe]/t4֘˻/E 75ů% zc#u!梘.c#2- ϐYF%oMɥy?[_\[tә8XVo` ?-_@0o}xi[֗ٚg+]#\Z>knqI baPS!mݪ8ڕYziV-4u/wlߣ&{ѶBҤ"Uc!Ѳe6Y63 os9*r>&oÛcw񘹁\~x ̞|g;kFo{0zV#vCo1s\Y%Gk-zdm7HNHTnuȌ<V?3?3^u6aәñ`n8lցAw㖗*vG`LkUu0luJ犧z<#K ?]%X2앃dl}x^ՙ/k }-;e{ゖ i"uݧl@︵즅0 Gy[Vmq}*oI |OX>2>Xކd֌)k*_.Hrbfoc7wU/ٓ'{[6?؞ 7qX\:nOɯ5.5a^lvIVyz3g +s~b*H?9P# O=BNTYT" rc5S=9t%~{cȯ{<2% {/^e?l>)rͲ_eu?P {u9|S7 gCI';YͲv_rs9KGmMp8ޞfx֙]_ce$t-{²߹XxTqJS8* endstream endobj 163 0 obj << /Length1 721 /Length2 5243 /Length3 0 /Length 5832 /Filter /FlateDecode >> stream xmrPZ5P*P+ł-RBBHRJqw(NZ] ]9{vs^Da\<ym5^>?3# G!e0Q> Ёx^f neZNPB\ր...R.N\\M:0m X0UA]CMgnP[N0 @,PH(/MN\ @,Qv59: ' #Uv$I pk:?0ACUA\( H|SBZ9{@algB`A;a5h̑/Jh{V;`PM8jKsĽEa wvBQH>y?r@-e9 GZt^;BK]4=wn7<\__d,+ D?r-aH߆o"`n0 )XM|͇BoѢou٧x1 5!wZCTD#~Ej(`8}E.cwVeEo=J; uCt{MA䴝Re|q2m-D?A*MX'VKZfH^,Oce/3SYgٯbYytdWzg}.VbC}DJ/aUֲR+}ծP[yW6JQ G8[am0 ]VoIYk 6}|nz#M H} j]AtLKHd_,~Rɍ?&gf N,1 Gbtwk#kuCWKU*1Ohh.;/v~Fpl`JԤ0 rĀ8;.,W4 \vuŽ8}l0r|5U͗|>yΓ䫗Sj\]W(/hǁ@x* (bA,n ңJcoN:VWRش@$tl=m0e]󌭉Nt) o&ƴ|n!3i4m] |)xZBfF?aov1 PH?/B3<S^56яt.;.zl1 Y?6?NGYB4d&d"kXkH ]SFh6co)糈j&%[SPn2^h9>g&<

=7op܉(ʎT/( Qv l(y .Ewr9_gR.U2.#Ot7)sZC˩/A3S¯PԶL/!ư T/TƐ-r[!+ԇe6>o;VBM)ii]f2t;}"4ږզey)XΒ`l+ɷwNyů\6+7 q 5m}:鍷w\x(g͔u20F+ o} I3(XmDYbD&#CL=61`uN6?NA[mԺإD-W.]%#,n{@vݣfh:ҍI^ŝZ\E.Y;qAzCfDlK*_.T_|'YiW0<cdlTr- ;qP%Ó =dpfeK;J̩<|p7':BjUݶ^/I$G6L֤?XaH?O__rH1*1) Ny~Ў9Gr`nYʨ(~7og/q.0C1wIqW-:|cgdy X`}JE wfp``egtB@Jg'*DCԭTNGni7>y=}0tx3sL|tڝ7#ke0˽` .1`A8hAR$1o'=Z3dT)?0}rUc %sjõ>wV"-8<>jPY,V!}zj.>CbN /\c, I2&iO\-b @U:u+?>8W61YNECHC'VPrȖBgq_$cFeO14Q@TU0}0վO}~/sN5)zJ c-I6cx?ek+\Xy`<Ϥ>'q$Մ͙H֖ܡii(3?tOP!cƮBGUQ~?_DOAfkK+$YW7D6uwNr4qͽD4u2A]ijOvWm#@@{P/^ Ips74`!mdX0lөiqX[9m鋋=jVzC8:e(DO1k|1k sRh<4`4)7LhHdR/wR+uK6 Cc fk4äe֨$)R0arإs{m+A=Qrb{+V?%i5+p}ߟbF(2I /_kL,ڻ^L$L/'G`2&|ln=B=" 2?,M^qS4}߼gW8D Ty>t T{0J(@Sd̒4k}`d-?̉O3XPg{eh/ Sy-ǔT2!@SJ=1 WŬIx.ɾܩ'%77\Ej2i\->] o>haHL586uϋbo>4 SDH>%j-Y |uQ8'-HmwjlJIա\xpŭZVTPl< v;7f_R( vrf\|unt[S̤*opD?aqTu\tt󺲪d\BeTk\ JR".rҼꘙ83Sž҃ JJc{AJS#~/T!MuFE..5ღ62Bǽtk2+ RcR+4t }rO[}>N&/-NzS|Xҳr'|(L,)+ܪQjP o9rpBEvNH gd#fF,s齼H}RM{ȏ-A2Q[פmݬ3~i"HR@60ƞj ž.}jU8xr:=ɭNB:iM37iRC:׃։G&ܫ:G0:1 ζ+Ƀ+@SV&ٔwk7O'تfyFz;(]4{`ï$" "6 S5.l^2CAXGi tW2!:ee 钄zDwU2> *ȠGK]x*t$}ω2p"}sgȃpܴ/= ]]%w`9fZW'?Ѷlv.$[uG|a|v6RCuZE0ܾ^dɸou/o$'?. fASZNǮG_.K 4ApSWN>AbLNpB4#zRrJI$j[F@ݭ[Z 棂Vp ,bicvQLJ)V5/^JI ?l ekgé"M,z-s'814\}_d;Knܖ|жG b[ߟe>%GjRDžh0hfҐb 1GKJq e?q♿iʠR柪Y|T] 3r8-H a~PweܒC / u,txx&)QSl`(x;PJS\n6p'@$*He' إ!Ctn$lRsE%F|E|xr*##sUWlK=I╊v9fYO#ĀY? VR$uM줝u L-J x\6|-r\+%oHD\(0~;gj$ XU[] 7Rrlj1n%8աx,m7(^憗KO^x3@k`49g>td3a].B Cm+"*PJЧ 37yfjb?3ٞv?ߙbK*|RBsщ7X&CO)z)(SO}$0)y0),ꇌd$ӮAZ- Bz-$M+Us>Tۯ}5;4,ۓ| >L;FUJ"˟R/CJ"$O7d)=4TrbiiҘs]E=/3(.Ю/GYr4߿W M_"½Y^ۥbxҦ8GJ+$̭px2H`7tZaŽjVlTUsl) rr]SbC%9Ӱ,Μ'KJlp7!BM7M;pU8YZQR8?1̓0{ftָSY5&t' ھL~3xf2D4&,ȲJ@rCqf/FyS@4 4 _`贖ILmc}if&㭟tsO qVZ?˨^OPBG%sjkJurN V_uDq /fcr?Υ {"Ix UVxie ?O[ISqP8l [5RR1J ܱ2g2 NJz{ 4_K9jAh.dKՇ*t)˕1G®6f9rϗCaH.VҊ6_[Dv "\Tru[5w|_4m1ATwMFD/!$J4ȼ h~j"b@69<@w˛rcŵVv6f&4JMbBUU?0ۑ!":TH}Og"GS8Z#X/D+̬;tLBZ1n&~ t| nllv _Ӻj/uF:!K: wȃivP $  'YEݻ xDIէC}tD(~3>}S<|LTBU!JNBdI>-Cӻ 6D{(@ s+("f,FVQ`ldnB UTQ=yh# DO u—=N/M̊71rh@2BLp:g<ˬɘmZ݀W1tx;\̺3&4)ԓ@4~#-D0bKxCP QaaLOgAhKcPN4I% pjg5R5%{+UHBih,3KL ʙ~+!Xr?l-W1GVE8s.4(L4TdK@VSEĊK_sv+K辖5V/#]{ k;#tK^Gv؉2 ڢՊV;F%Tߦ]l꠰u_$,C2Uiz&do{A>FV߂" + q;:!)RaJ\9Wu:5NJcbQހfAbdJ0fQ5r# =R;8J#35Ue4>p?k9!u<( T ӆQLFq⚔1b'{h~l cׯaM&UzU}"D-]O2#$Me^&U(qW1LFxwZ Wm×fE3[Z:T $"Sn̶gH_\dC,-P ȓ"b<4 ?" `d+@c:Ey~/͊R; [IwftQ,CuTruwBcum,@Q@+_~Q5 oH* Zw< QS kLnv YK܂0Wcc$ۦ}Zt|g^[o)p%yFj%3@Jjbqr[9ě2qڅ+ZPyLe^+8c7q 2eM)52ůHd wcUƴv 3 !yJG{J =΁~t qm?Yc1@~ @!3:V:|_o"8`u| ŏL/Q@d2+-##r{7* :"ѷq k˓ͻzfn)F_[hj9%^ؕIcFEs{NGӳD _Olr9Ӝ@D\"?.x DsA11`&MS]hdlp9I6߶߼!?dۊBikxù!7<2Rԕ^v=24;=Ph /N*>uG[-u{C!nH5%2!o3}>He/@@e5[?\ CkPZߡ[t5KX)roY$dysDǖ|&kLI<ɼ^7:dk}J9-yE\-ai){fd1%i|V$8񀬰v * dUWv'fRgc® ΣGvC˽Gz[O'Au. d<'ZDҪvsEdO~E-^:z7P^OED;|qTS^qjK{lv*!X3uk(N9},'*ձDFQ>TSZSl9s$#L},Zo#8[5k:q y~c'sWM~#tm #Se.A=iS6PM$Ɩ!ʓIZL0sɼ b8kc;wTkRJ_] H _BȨS?b݉1ӾqQ,&/pW,: NpIv!02JK}0zwP.cÓi /nQ6kn$^ Nҋ,8c\"4a\)Gm;jI.VL Ԍv#_4ێ ~*{~[c:_Y&Qw:WH,y3"M71y<+ A\Th7LJ~|jIk'#L/Tǰg8 ۠GrPJ1HiJ#OH=Ȥ|v;^UgY:_"ٯpGC!`B9.UYLcQY?'@o&]Ny-?8~X{ enjKIզȌZ *R-1iW&UC܏GVO":BP4Tӟ4Wjfl iŵ-kRfsxZ)4cX3#'gr7]K A$uD!:Ϋr݃ዡm A>”!#t??PphI,a<ǟxpx߾7|z<| _p'㦇x)MdvzZ``*ftQ\0Ǿ *RBh4-Đo)P|6n{ />iiTOrc P(SǶG{z^Ld\wqWߕ@ * ,Lpd*CLYJ̐B "|7/(ɵmXȼWܞ@\IOd Y>s~˲"~66TN[ׅ×hT`*Nqa<+9Zc#gF|%zc1˲yP*ϒ/)όh*\ykô|kW`(%I ?1|Uj3j;0mkge$Pg:p]Bvٞ#rU$ZuV#i3͝ߏVḯ[^{ۢL_:~gGwH1-]S݁&x6^|PP,5MCe뼷A  [6Y+ʛF= /0`D@ZS<^O8 t0ԟ \Ӿs^ {J5AZRL>s4ܜ?di]o;FooY`qJ|9x(Të]`9Zo;Ev7$Uv#l(©e:)! !rG 2`CzBCª5&%ci_'ƶ'Ӥ"#utgǘ0Ü\7l+BӬ7ke1'M്.%ny]Wy;3Ean2B:aAѕ* Okld{dä£&GϏHw-z!^{҅UwOC"Q&-=5[<kasY{NV!'yVt0e'>prOzTYV$)-Wݲ`Wo+:r9{|w֏8cd \ ΒP{ՖX9#.襱<|/+JvwYو*7#\+Jˤqn&V%`mTL1< ֐qCftIOKQ_#gBS/zWKBtl|dqoqh➮~u;/G䂋5kpb͙qȡc|ƒh)%\X 7ìW\VK$I6xڜZ'9mX] (IzCTȷ=L I.bܢ0C^1,p$<&k<oAeA$"lx9JN)S{x?=M66R2ΆD+)UvXr9㙆}/Yo4"m `)RaתH/G?Q?Nס}>"Rn,AB*7R$ǂm 5;ZT" ]Oepq8txϤC[~h֧HcXɲ",)]/D&.\6켏1o@ {lnR!;ط.JfT5zZ $kH#|>O ڇHғf ?O* 3GD81GQQ_)ZvP(]Jl1Z ?8::|sކ|Hn?nMBpj eFuω--s=U.٠m{4+4XZ%;!%"񛻱{Sbz-z1ݓʮ&~孉*ꐠ{oP=^tw_J:h&C7;_Iܢ\'J`. c>|H(Xnh#D=QnM'\q2 FXM|~XOtVI"kt!1&F$bDyѺy&Bh)턽NN$5耯ot H~lѬMXU`Z^gm@_{ w~*+T8B2I<JԧM*x|1ⷒBIT{Mo<|q|XQtH"(q,J#u7f~>}?t?WM*o+$~1]+3E(Lݨ<|dCAcWڃA'VҍQ%,~zz ?쿥jke R p.; 9I |o->X(clk :N;E`f* ]ٛ,s{&U.c_<$)&MjXbxx'*s@OBT/EЊ4ԅ'&K/$T8){:k859~Z^0g:\vxjuwשTQd7%C&#%<*yA ^.L}rܥ=\l2ID&U bfc)],R [lV VdZ9cA }he'4M"^؇x's#&ʓf#H3H.>TY<_q3e~%a>)DF;*(v[<멋 _&RD}7d*;`VANEahBm;3E3dzǺPV!BmкqV0爎 %Ɉ!jpF!׎"Z |<_DX(B35eJN'н8C0a-U|ⱘK lNؙͯ\^qU:bkcfg֭_bx;qg!YrgLǹK V,n(YioenJ7.* eB(; zHGɝ*߻Dzʠ;v|YdYw{ d$F S}[dᾛ*y[yGi%yJ]mi!K4lL%dNFȭ`7ܾWOéG{qYZVl'trmq_ 2lK?M$m8wrXYɽoĉXB@Kz}Sf,tvR4<̟ޱx vw8F\LRâUB i1Rˊ_͍knm## PLh5QNZjku-duf[b6|U uA=4 +p x]P.k%UPWW}_].wBˁK xyjn㈺źă  BDh b)ff4^YIGx."ܓ:@VBEnZ6SvȖ5{s?CmfŽUB7km7') E|p m;I o>vx ls%&Eo0!`@j9݆Ҙ * \yC.e$C})pHjAAC,T;e"HgNkaPL{!G2łk)o:i\(r3T^>Ǿ~~)Rl$]ɩhd0EG\mu0{ւN3S>p]{ni_)D7JcW̥KTq =q!D쎷Zi{SE[5  (cJ{N u~ ` ig,zySGE+)?R)-0z/ d h߷b` T; W{0̊_/?;S7FG7FQ9eX^3kD6(Uy/nXrA[`24ٯ9,(I8&-;@"d%WU`i.ќN8bhl`c3Ӑq@U -? aVջ$>C9@ ngu̱ޅh,xaT@,F5-tߑOu;AK3c%D_tE8#(ݦ,ʘH#_ dZK%io\HUXﶩ qFhgZ1Զӂ.lWHmT#V%f}ɇ ?Yr.Sjsb[i-/WX܅&c푾rR̢=_G-{ :WFɶދ0r$HJ 3;Fv  uf6|oLu]n[=4 ɃVvC.MrMZwPaA JЪ@ڍ|ګI苫`P`?ʼ3eJϾMs"ċ'b3 '6GڮF&[$I۽ɢ0_li/U'GƛS'!fI2ȲTeIRնn~'jO [k~WJOc6>/Lp憬{X6:ȴ__#jӟwEd" zJLÓkm&'E}oG,Z uaQY]M`e]=o5ٳSO\Ek W}c0b74J4S@Q]8,MF-H/wl:3FbB^}1eJs+FE~KkOfz~ *:{3KGdB@sspy9 & 4PqgutH`H dg?M- ϡuH|P&sJڌgtNAh}>)$S~t+9D0%a-f& ](N,WTm[ &p}٪+@M x`l1RӁ> endobj 150 0 obj << /Type /ObjStm /N 41 /First 340 /Length 1865 /Filter /FlateDecode >> stream xڵYn8S숿@&mvnӤȅb3Jrݧ$KY,X"53gB&^QU_B*=)F oaEb\8ǫ $G8ppf'“?N}O8A$kOx=tFPE`ZtA"$yR  E4)^}t#CQRR0KLzmsJ/m T>"㊀JH ">b橠Gq{_+C4^foL:IU'||.2'p|$_1C&)6|(eFF~zgk>;YΣr67(3D|)NQCLF^C [xg0!\p!&<^b ,apo"~ ~" e4C+XY}\$Q<}gfz7ʁI ,"Wj~4 d1~~?IiP /{_?)g'`9B?9g#gss6EbR"2h^~aA/s^RCC]FNf9*uҬ$YlhdM>Xywc5So7ZpBQ_ZV`1ƺRIe(O! H!wI8f{WR"ylj:#3%&Dm&M7e\/LFo+F_l5_/,tnYQ[5 ϘYgoW5@EWޙSjeoDj wd,YsY^eIWY_Íd$$&Q2Y/}ͧfS aX9%ȸLb(}:7sbMGN8[*eR].*ŎSv,xFNĐ96/K^>(A(Fxz'ߎ+^EPt <ۯ̹\JG҂1gKC+=1=g?WzG55TmѥQW¶TJjGTL7pIv@\_%/:1Bv@|G+䎕p{ȗ 31"ZF+۶gڤRYAQw \(浱ıvVG]X:Սi;QIYnҝnѺܖgų< yƚ3=ڜB|lN!Du"jkE7RNVEkcءwG?Wxs]mNU5OTffO |JM)O;3O_"޼~ʛ[VfyI6/D endstream endobj 177 0 obj << /Type /XRef /Index [0 178] /Size 178 /W [1 3 1] /Root 175 0 R /Info 176 0 R /ID [ ] /Length 460 /Filter /FlateDecode >> stream x;saz68J"!"!Asq^8 qWBea)Sh4 tJ59{GDK)z* rI`3-4vj "4QjݤXgiZ+2i%VX m(.%XdY3:ax`lvE.~Xc 6h =ߞgAw5B(&F\UEeяp9~6kdFa'݊{=s/=p*^t#׳ 8(1ŻgspZ\s]q2\+o=pnk7Lmwa ܇C)rz$;HcN'BʇF/Q)Fw ;&+NMJ睊JKCNJ_Z~e2=LeZ%͐i\P~ڸFlyQ endstream endobj startxref 206192 %%EOF Epi/inst/doc/index.html0000644000175100001440000000130013053645634014527 0ustar hornikusers Vignettes for the Epi package</a>

Vignettes for the Epi package

Here is the website for the Epi package. Epi/inst/doc/yll.pdf0000644000175100001440000107174713142414370014042 0ustar hornikusers%PDF-1.5 % 71 0 obj << /Length 709 /Filter /FlateDecode >> stream xڅTMo1 J]=A 8&JlQ4`?fW}2M]Z+M)[d}+%^;1NIn7'4c fiINcw~!&)sbJăW4VRe[qZuDzi ]dӔ RM*1QYH\ޤ2̜⌠ļQ6벻W.ڐCE~DQ~;{&ET (Q:;s홦q±DD3eÖ6_56tcLz52BD:yD ]0<5O.Ε>]-3ETS 5)vܻ GKk-H>Ӳߡot}d<5$ Sɂ"sOP9Gg􀦁g_N :~K?kJ endstream endobj 97 0 obj << /Length 871 /Filter /FlateDecode >> stream xWKO@W>jT}PU4=X!y l;K*C#|,O|p~ H%qRT& /sv \J65 WH̓ڜsAEUܲnf0sqIssNSGqV-4e`v\':H31?up,e)Q$:چ v(8,-a¶eK0dĭ_u.?A&F7 QP~?z!s Ҡ+_M޻ާVD&e敨<|` HxSzwzO(w9Hk'!qCwuC,wu 7{qk= KsD&YޒlLp>S Yw\go^z'уYyixEv|~Tl/+O(z wʷ4.K7KKZ^-8moq9T/Ela / U~T[߲W6G0B߷s\eҮ.lpGb%dӪسLi20>JJEIr֭ڔv\xB1wE㴔l]Qb2:0 ^gKxyjñctEq9mP[G+Y@^@*[Q&8*/'1q84 endstream endobj 103 0 obj << /Length 2075 /Filter /FlateDecode >> stream xnF rk-zhh^ZA@SȢ+Rv ͛IN=;h1~wsqHYQ"*RV&Y+f}ɪ~MgIN􏛟,XSwjg Mj5o ڮẑ/7j^z+D9LHnB2Q@Jp|HKIG"DzZ, #tX Q1$==CDh24SQL>N3wiIQFҗMg𰵬K.W;m%袹^Kwtp"‹rqII[s24'EҔ^C^ kN!J.bmy<"/c̈́lU,O$+y[Y8}LBіDl:G-{awr}z0>$ڹr'vjM'%9 -ZKKL,MʇC1YQ_[RFj/БkRJ*[:t<q.idH\(n\! ;m:QBmp?G(s1<:+Myd2  ձ(R0hT=؇2uQ&'Jq8%ʜL+q kgjUT>6>{8|8 «tr˓ ]FL=*4WD x"rPwsb8i?Q4)(m"AnI>L1N$vVj gmZ)qR$bX{B_0"7Et>xͯa ҆ݰtQ|ƼE^(O}i5婠ʐPk-͑ztdV:$ 3Fj=#ZGQoEeBπ"Ri d|Sς3~k2([CϽsw3!@_׍@=ƫwӒ#^M9T/Mڗ,.RF YT0ADXQ,.TD+Ba Qd!T0,VN&Kڞnf"ZoLasFO+&$CGJY%)Qy}-r”. 9PK#:x8=,c V$ ,( EXBi5=dI@jyZ%4oEW( 2I_33'VF',N˓!KX(gKarKtH鲓DJYJC4U8Ba:.Ħܨԥx2DKxo[}I)G&4!DL/C0ֳZ XZKy DD; swlY |=msbq ;i16G'B^/<:`? W=xۨ@z .ŝS;zSZ˒9]ꅇ{PQwu*E3NSzXF%4iMPq1W?_DZr5>Pw`@.@L8: endstream endobj 117 0 obj << /Length 1818 /Filter /FlateDecode >> stream xڕXmo6_! ԪWk0lKkl 0 i?( %WR؏ߑ#O2lQy{x/)e\xBEFխ'6NlzjiXxau!jx5%Y"k*GXp ^vmjymrfݎ-@oĝ$ lM+ :Ju:-Hk{}=jR߱Gz0ɒ8Xr+B<n# I2xPNQ2雇vPRA=i;H$B; 78G4 b5*pY?lp}k/+'T8#@WxJ%+V5pq2A&vBHX C_«־GG|}K{+3F|ԯ(twzInޫjƈ+H>zZoI%:a=GتpbxxK3-s0;R=k^:`v$B$4$A l|/ 2+#+~͜Fbb5G` dn ;K(j4D$ǔ[8U+>,roYBtS;S3y~\-0Y%˩qlL4t7*;6lz7ir=; h#&N-Xmy>^5;=54wXP[ =b؜JZcuhnxō_+ 9>&-QFw [b-UVLW .9h>Wwu"1p֚j (\̀ڹ@[uCG4ٽvɂICu{lH~l< Wf}ؙhr7Ȣo0tK's vlͺ<^^'/ut X.Ǿ0wJkO#LR!nYfIܽPZŸˌk۾S_a$#BqюDGF}?=N\mF%'ċo2iw?( li݌;{sӂac-2˴vjO)Veg?)x8X,|/7ߝfR `^*gQrYӍY- Cqŗw endstream endobj 114 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./yll-states.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 120 0 R /BBox [0 0 360 288] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 121 0 R/F3 122 0 R/F6 123 0 R>> /ExtGState << >>/ColorSpace << /sRGB 124 0 R >>>> /Length 896 /Filter /FlateDecode >> stream x;o0Fw X@j E]п{(W^;G|\Zh*~tuӅvJ*}{+J}*Xgi Hm1h) =\FceMzɝ[.3%fv+Yvͤ0-11҄5LGLg>a&bBf"&|cx&3y:azbV- =pViIyɬa> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 130 0 obj << /Length 2738 /Filter /FlateDecode >> stream xZݏ6߿¸'Z.Rb5}Plڭmm-;ߐ!kLRÙJFwd􏛿o^I:RTyFQYʲ*͗?/_QVyjfq>[ZLU4=;gOY<pLSo|N(̭G_6NϚ.~nfnͺSUͯf^J2'o^o~p/I\I5Zlo~%-G3n;ʊR?onPBi+W"K}lsZߕُ&擾f ߠj5C2*?v$t%]Qq=aS[Ds̅}e1v<)L2DVK:4ŸȴY $ ]"ׅ~|ސq'Ml 2:@ wzk0?ꓤi#y2b֘a 7 ʄh"S" 2k,5tR]ڔZkV j"rqBHxtbEjڅeOu Ɣc'} }Z&Ҭ0tMaKFB*2?uwebWJ<׉u ,'R~w)?^(gtP0hӻw0kQOo$e&z` 9ꇸ%Vd5LPV96,yB.w,wCVc`"dI7L>{1c|cIfmIgSf0@7 /u]fV#2,$WcҦ`\d98͝Ž~ c=S9 d[2 ⥉tl GX z.S 3fKh 6,Ujj¿󁪇P^Tī;S>im ͠mY@uީ~*8b,?U)dқӫ^]LӤu)1yfdkYq6P)l<+Vd)z1Zc^p0Ձbv5*yĹqotXRkVmuF ƆO2JlfV fۇ=C"cqE4FgQ>ENU&,dfEK^W'vG_zTw'!+xġHYS01#8j ,B^n 'y7W^}x*s>B8;_b߭EqYm&r;!7fnȄ"IlOZ? x@=rGS?Č<,C%}{:.-߰KJS1I?߭f*0ds #^5Wimo &RKR𽏕Txh%Oiɚ5SUq e !A=gl׫ƺiuZś zHa ̒CI'2킔B<.H%ʜA7O"uh/\<t3(Pc׆v ꨛ.ʎ%7SmBrEoyvZc1`K:iK0NnlubxAf8&:V;\=u0փDBKR۞83b5I͆م> )R@,C|TLy9E(خ(Ŕc(O+uΑg;󽝔'sg&9/L`?$ zMUяQ`_bæHefrJK%Q `p]"j$K3MviVL^oo z˅ ˩bVپ@Hz n&{lC(fɺ?l.li۰ ^4ML$qӽ-׾$p}oRB$΄2l> stream x[Ys#~篘Ӱ"q09؛ZI%Jyf!Xe%y} xuR5C nuy?~=U9)g`dCd~#$µ:z q<ߚz>Q>S^~Xx٩i Z-~C'Eْys 7gOvN@M?YQ_/v9|i{.?5L$ `1@Jr[FrU-rLμx%[륬`JU=2~@)8;1$G0z1EoiTN͋_Ud,TEd%w9 3t 9VqNݠ6G0 ɀ$EDE EY*c ºת!'hwJN敐W! ~q_MUsvKy .NrXƚVƑ&gew3s ^TûkCf$Q7o9cTnzmL0WgZ]*7Z:'IFWQb0͌CqK6Ưvnir{7|ZJ!J_gYo6],|%gf6Ry`)zV)5JbqyC=v9p[hHF8hű:T[;+t<AT?B=CC4/,pJr"xik'L+5sܵ>B[UK609/\LHIm2Q`}k>:DpVB5'D[Dd /WEsKcEUl'NY ܉#Qҕˀd EQDR Qv;Er:P*ܒ+D30oT9FaUcBVJQhE(=}oO]:H#e6;EST#L"4GKmne5l&T n.I] غeg%h-gƖSO+ |-B֟.sĪ50j"j>|qg"T7Zd23p @ N%r=.'(>~+njp۰bf{ lkvZ}k;>05.|r4=YC&WtLPvN^ٖ6p дCй8xD}|t^0q8 VkOr/nl`:\G4uRםݻi;+>ջiڝ=3BF:KS#jPJ;m,.k/qM}`a:!`7~LBla ޣ=ڶ=ߜ5]%$OiDNbDeW+|vMmB,\9!Q`hac L> stream xXKo1q#qA"xBP6?6YG$:3y g猳Ճqudj-YNjfm lwJP2MD}}׃[4v-bȢ&9`Kp$b .݌j8bMP^zږ\p͋ $I *=A,WߋϮWQO-6dQ^Q4ɦYpnFIYC$iUVlE2~O.H6F d Vk׾V\f[lkWXPV)/{] aѸ4 endstream endobj 149 0 obj << /Length 1964 /Filter /FlateDecode >> stream xڽY[o6~ϯ0)0[k3 CXvb4SIso2ws#(rqѫRT! ڋŨ,D1(l_5[h4/}+,1-jQɂƽ _)h_X%JZ {3lB {jg8ۋ iЀhLjXԵ-|z|E,mT4שR(EGMףMW]v&I e)daDIeǀ\]RCPT8횓kD5glHog MN~ejBJ߼ 30Y\fG̯oȓF(Mnt>aT1)T< `k!LJ#P0td#@R#: j/Es0Zd(.dUN4:pR-J^vowҮ{I¤h@J! 462s-z_|ȚZ a,i}gk-K9SSsvdYrw>LZIzF6o$~{IA[x͋U _3vӢ־ Iܘ"cr \6ZqHuH8%Ⱥ5͍){uW=BYsދFw3g| ؐ6CsTgρy`x^Djzl"pyʜ ˇCc! ؟ե9HfΩLz6ƟNSO[Z LJ~ln*576kywkVj ƷR.-=?`kT Rgųu&*BDW;U.]m+i&*ؘݹjd!-T?ʼJ+v뚲5_)_1pSpuYė^1wRU"3eCtJD7tr뀽ma"hP,6UW"')̛~n5Sא"sp>}q[K*һPߠ֢({ԒBVC! ?\d-ѴPB+!?_[ endstream endobj 2 0 obj << /Type /ObjStm /N 100 /First 787 /Length 2247 /Filter /FlateDecode >> stream xڽYmSH_UEҼlQ{E`d7ruK tkK^RӲ 6c\QOݏ{Ƃ22YҒ9I"IXA‘$%IkFR0BX$UFZ ڑҤTda]҆ŒRN8Oz [Ked$YEa. *=xX y aW0,ORgJ0b pQŽBF (R f?Y)hʂ0?-Ig "4aG-[DzF7c6Hm CTo q`f2SHE~+(0L?q0Qq=7A`zed& tc[ m<NBpJFJLCLc+2A NlLtr5͎q'g$cV )=sM*ꪋU&yE~&3n(*|Rve\3EWU"sļi>IyiR}{o{&kmΩ{>7kO\Pw3_7 ^`>glcFMvL/.?oFg/=Uɤmzv(jwi_E//:/.6z]>4uA*\ (VӼ~CbDWVE9U]IħؖNו8h9б~c S9)>(0p8U9Dذwedҷewec~GF`Q /}]\!q\oL0t@$>kw7HTU u_v(}S7 z]z$RtU pY2rY%)*d?O;Lߗ_Bz01=N˟4VG6VIQO_.={Bi .Y9 %E)ܣ\? >CH$GO&'Ꙩŷo qSEJsY  UǦ.#zs-wwɂ\ v -6 ^%VbB@k [&YT2g6`^5Hv 5%* ۠Q/F&`tF[c^H&˛!)ݢ^1ڻD؛ҩM۠)efi;$Kh\rc{b˘w]rˋ|ZA5[PإCOvyK8IOGV]>%F;gr&ɬEC~u"U[/j}@햍\ӳ[*`6F.a}CuVML qnőOn H5JTJszyM|j40xXms5Ӱ,Oxĝ=iB2(": |̤{XsMe}ww{㾈 UFUު%S~'AC\{ӅQKUc>VnRUM=?K]{|5='||G48<)KҪH z+YtbJVhl; ÚĶ̖?8/{~VnRٝ$rӒ_d>6+ؠU~+QW4 M=a?t^IflVK6 eH= >gvo*WH>_Ӵؗ#qHytx,>!Am V&k$1&ӂbt *Ǯ QcdcRUHE G !Y#2ھ_'+Pe\_ЏJmngQe贴e筺yOJ\ٹ"{;bX endstream endobj 157 0 obj << /Length 2503 /Filter /FlateDecode >> stream xYYo#7~ׯh`_$ifwċ$3AHd}Ig@~{HVYCvffnŪuȮ"ONDQfB2;̌Rg4yݔ:;}=׳o>9ȍ_(>vH:eCklf YMvy{g>WE)޾nv>KZpzoX k?ffғ,\ Qec5L::q\M}ȞLU&7Q~0)8)vu벱\N+r#9v0;ytq͵>E.Kx%X/q=@[:G«u'{^GG7,Yj& [OH:"fpsla4*WNjK!CF]UD;,do 1\B@sG+wR摴?sݷ[ܲ[UB 3s@)=y,g_*i!t;n;OAv- P񌅿פ2R1Vm_ی޾dg5v#飝#đ }>cj;}] g2i'&yppn}*G%LtE応CWy`=g9~"'~i+.qa, M.޵ޠvӫèChV0GFKYz#\u0cȅs B*YĆPqPc!<eVwڗ 9*}#t%wtIc"w˫M?9lFǐuxcw IL.D}0ƖKge My<+-۲p->m"Zq{ ͔lpeG//f -闖=/zGB=VѪ.pez+'n_Oi\ory^gQI4Oa^3qo68pMf#CH4ڦyU?Fkh5 Xn\DH_2Vb=UVB#9]Ơa-G7P,6JC q> It\onDًHaYfeO}*8x ~己>0cBpS&sR0z V?{w2ŬP! tJX–ty?Cġyak|xҫOv6^mwд%'W }xbM@mm`3f x>^䲨o 5^EU gQ\6u $k=yzJZ&T@@Ǭl,R !F]PA=Cwz 4RU3(0]V.PSC-٘`(u@Nۣf\usqbv kV:*V q~0F c^1d+VE%+Q2O C ZA8$c#* GHe3uVE CBК9Q]!4R,s-"v9|Wr$#`ބJIG0#3 cg% NM;Jkc3%:QKl6%0cwlSae;,٭uUWxH\rZhRT얙8Ub_ۿvJ}?EEj˦VuWeRVZrFZl)֐woG& ?ylXU_=@Y妓X\et{'K,`4 N E$2+&dp9s- endstream endobj 162 0 obj << /Length 2036 /Filter /FlateDecode >> stream xYo6_!x}H)Qe@4ڦZmGjvY >~#%[j(Q'~ǻ㑊8ʹd$4>i/.OޣSNB1O4MAv|XԚW7ljEhVՒnԚ5c%EZ 3߃"ǃEaUʪp[Jʫ+_-lKE5/ iF 1݇yQ*g[ANNhmWeY k )L\{5 ʡ1P ,KC?p+ ܯPy83F+X vrkpUf-VNiYLZǁ*[f BrPpu cFw{w؇f稣Uy"viP ,;1x{N}gKIZIb\7ќ+9sh9!\m \Xz۳.0+Z hJB蠩y0oY;|vbXև}y[ l=AVM7fʓHK4kL{&Xp"<IϜywoEX:-_w]$_d8䫇=COY{"}ȗ۫Z%, %5U5^TI;օotga+V0^Oee=J>,]ԭUHuO%J%͢a%] \d4*LtBa4u9t-JvJaAkKj>Ť1%p,˅D/{VMU]]Q%J~t aĦj|o\=ҔiVU=KI0 \[MjhzزCn]woD۽݀o4'x9޴rYumOv=PH?>P_m-s,o0vcΑpλևARF`9 (ṥz'Eg`?lMcPһAYMH.7[_鼎Y|K*a'De)ƕ.Yz|G5$ʺ}> stream xYmo6_!쓃*"fX_mP]>t]a}HYI7:<I$uyzq{4a+wabr(J/Ȳ0Ɩx1}Npܔ@ƕ0- UYqیՍ[^v}tkGs?Z-Q^I]|ī奻s5y:ѱ> :d4:Z?f`10 A*zÂPY[RҀ_x:e~AJ,K[JA;GsάjU\LuyG;`ef0)f{rhT3lgC]$ sʙyc[tvjpNSNsR>z^ፐBtQfj E z5Wq5J08C.>n(4xW G4_ %\LlG:C4κt,Ҁ 2GrE7ڼ 2`a*J:雤_%J_1e:7$*]yprȌMv`{bCUj D٠fcr6Q=mWnks^ҀaP}04aEn FP 8d7ƅ#5BNUN *;q`-zn^[" qC80jGhIDd@ >0|d@ (hƫ ("mBF9H{UhMl! d1D@ 0! b_95Q%hBc$  E^>H",XLT FH"שW5RX"%D yg 2[Є%DcPE*@)(~q(QIGs8Bqa+"3Q@QL+]_e>$'a0'Gi@d<9+⻈F;@L"B^97@`TG}("`8q**;ŞTD`/ `2mE:BC(2@0WoǯPH`O(*Md4 C!ؓ  XO> 2|d$1DTeC)ƈ@P`Q(rtPjiOc>eѩ$$Ӛ>O,&Я endstream endobj 170 0 obj << /Length 1861 /Filter /FlateDecode >> stream xKoFOj^h H\ CE,זǐF eQI=H,Ù>kE!ƥ_ _Z ^ D!6xpxe!帲VǗ7Rj\V8(H][q}zϮC ǻ5h冗`c;|OzQ:Oytju^^ȘR!ڱUq>?E82$*ToZ^(Fʪb\JtCc#]s56ZU?2dp~0~X!">vm.zv[- [_ء%l!8&%wPm@(r4`nqlLx2h"Z Kd !(dzēX@cGYb6P( 7qxc^"[-D{D;E[b B@vD$3+1gQ֨hOC0F* P]jqG$[51kSAlh(aIĬHOr%HXF51s V3)x֗3Ls$lML m@tlq$lI e 5s4a+1WC|Z(VV"^*BL̫e&M \':KpBTa50,ʔSJbu$(4Hا 6r  8'DKbQܮ!Tk (A3r&YYFQoXU "BSݒXJQoxJ~2$όUFhB5 YE4ʨ wXFUucuK12cdTNG}I(Ն*b#[صn)Qk˒Q # 鎗Qu*#dSJFȪoU0]9YJF(tU+FF;jKMm"j6ԑe2*'q>"zFF5;;Ȩ"n @bD4QR 1:t*bȨPL6뀶JY[2 w 1$1tґiGJ5ʌQ),T9|Ǵ-_FJv8pwM>ɗXyDe jLqT8uLM*O,P3m9T)[ǽtg)ɜM7)8h:C 6WdJyo sh1:Bpq߸ nn9}c]?q6q]'7N{WkfƁDj-c]8X07;e9e0~.Wio5 !(5v!wWU.)K!R:oaAٟ1)3??,Yn:NSzt{=d2pŵKt_]u X,.><5#8\{*uCAߵhus ΗBW/SSVCo$Yi䠪&_jCUI!g`߃Wӏai|U 5h5jg@AZ!8{"y.>>_jT>:du8]Cd 8-^Q;9ܴͳzB }^O4ؙ8ו_5om5c'#unx ],ǽXK ]q.;Y汮 "VJ72lyֺ*<- 8o<4/`h^-D_ endstream endobj 178 0 obj << /Length 1215 /Filter /FlateDecode >> stream xڵ]6=¸'Ktb{(n7k{NXIzGW`C(~I"ie)Kw<O7}߱V+DV"]kZVog8Rxihȉ[_/krOa`$0u|6K[4d+܍;Ndg( 1j8ǥ@?|!Q2|W/3c _ֺ?H+w:!_iyA(B^Xfgj, IIX *2w\D0 ,} {> 3_18a̳xJ>אHpb  Cp%TE<W6dǫ+94`M[$g۽F> 0N[rYD1c1bz|n |n:)#vF]?GJ?Eϩh퉥?3,zJ4>V*ׅDՊ}/V7V/Q~sIU !]WB:yLDʑ0@qƄ뷥cԐ?!%^dcf;r")"3ڛʮWm1 pîpn/doʗ`c4ẊRVtTn7ҲjV`RZMM\ˌ'\> /ExtGState << >>/ColorSpace << /sRGB 184 0 R >>>> /Length 12172 /Filter /FlateDecode >> stream xM,q${U-% @6/ tm%!]ά?Q}RsQgW~/_ۿ^-5VSYo/_~%o-׏KG}x//k>ﹾK?VgkiZ5W͇{o5Crṫp2|͇gz|ᳮ(x7:rR+(x/W]mr׎XQH 8ʑޯ~?2LsI}sYR[o>}GS1>k_Z%sO}^Ǔ|oKø?<:t؛g~YuߧpN}_{]Gre'K)9[Oh0/[էoRoi.V>5z=CO0=歗o}i^}kX[_.^{~keyj^6gu+"yW""&+CEs<'^ۯ~۟oo?F鯍FhxӣQF.FdhhtUhã2#QB4Z,!\9D:h8- V4ZF{OFgp KUy[4:C7|htFogFB46ux4kht~ =D?FEXNF W4&h&ZT4:3Fhq|DdF"1FѶG|<-vO4h!́>>, D"O@0C8@J3Lx}ByJR7ne'w#,u]b! CN8q"̩i> ׸2S5vqTNFt_wpb(F#rPw"A[ &FB[AB"̗*Q\p"yFCx~vʊp!}~ɑpըkb +05YY'\ !s$,!‡Fmn,Bx0sp@]L$DP&8rr |$mt"c&9ؔMaw<]0Q fJ$V%Ep nzh$X ?䂏]a y-{,,eg@w.gKp/  xpHpٚsm@"ۃ`.3|%!JBb=ϸ#Cg$!3N>b#GAt:ȞI0oR .rA6^!:Lƞ`%\n\<8B&Tu.X%\gTLxX*3q05pYWq:=LYgf>mӞJA0 ^'axl=;z;h+pcT`d\YfA=.)paW[68) U2 vD }*\pXpx6ZmɈeYj8 0XLϻ;{X)^&.dlR03qfmZp0p!Ib":&8'pGq8Bg!t*WܛC"' !a9xV\;C(k 8sp>,瀵F0 ^] iu^ƺkkLV]k׎gBrM 9ƈ)`M:.L怕`opגS\ b.S7/'m-XU͕M#=k_JEoYZGƯֳoUf굟W;D+I,oeTUN7;#2oX~ oa_R+,ɯoݓX,8)d~ivuwLoLJf"blr.~W ɻD"Z4F~bN*_Uxo& [Un"MuMڴ%"*mo^oYYg{F:A~2b~;8{ K ~w;= ?7zV[dojg_!5g )y} ښ*~v _H7O]BoVyߤ+c-<_FXFf{˅&|˯Z-h;#iCEnHC)$e ]~;®&[wP%^4CFZV2Eb f'{hůb9VJ27 cK[ z-eoW~cE*(u["R!5~{XDcWb oόh6Aۘv~y/"2ߺM+-ĸ۶rB O~׬ڧkg=f7ɯUWxVc|ʣ&'BUJsqJͶW|[8w]e㦆ej%sroS+kKB;巼=oSߴM/%ho [N'v=q7t2VVgں-aGÚJoߴn߲=?)iߺ-!`[~ `[~сBP*.ImfL v;W7//@ޛ~wuEB~6)WFK۾5MkT%no8:UaV[9/߹,◮)K~;7|~{p} Ta|;3Z=|M1|[puVη|'CeWMq7.HwN:v|RaߵT4!Bj}5-ۆ:| S[֪ +8[Vf&":_J/v !U|4*dq_|3ß/oU>-@7ߓ6/Ȝv oQ3|O5m@|Oķztᛶᷲo٫u9\_"1r5l >ߡek|[壤w>}{~xw*;_`QѺM/7(_͜ |m *sZ|*7isj z%d٭ffEVڿΆK[pN[Epg凯Weh vEk|{Fgv;_m<|K,̊Wѿ>Oզ]o1ہoa}r%݃<}ͱ#5Z2#er/-dq[hf!Ήoaz _zt*y2|˶x/ sDZF/m(ɛ=x>(u]M8vЏ;|g;ŷM{WML&WM8)%,$1WW*.Źm}Ű-qG<|{=7m6JG9߲maN7Os_?M/o|=Vv(3|_ӣP/| !B|U5q+pIVL}jlo'Wc3|UW|W W ;W羧<kzg,8C|x}v _8.}e|S]J#KDK|69߼랻^|U3|UoIkEw:VzR(5=|-Jw9T?//o,(J.oڗ~:K;gq=?okxvt<zjzgjPuW;ryiI}wֵvi}_݄z.Tۜ~Wwb^}ŐA zC1ؤ;(ѥ_rb Esۮ&E&dxʎm՟uŧ4uŧwk"$~])#į3~E_%4״ǯ+1~׵}+KVFǯ_Wo׵UklWůf)~]a[P _#yJǯ4bk_)_W:pk%$~]yW_ɇz~Y_iJB|BX_%<~_/v *|V𕽆 _(|%21 _%'|M{:^QǦ.yDs!zu~[Q4.DDvU"\toX}%zǵ(n{hHtGD*E}E+)R͂D \ K ќ2)+D8#]W}o߹ǔR>.E Ѻ /?l5ۏD7 f+DE%u쨗tHYhN MRMZǧDS$Ѵ6xD3famS]XV{D[pmG*z3E1 9i1k/ѧrT͎K>N7чϏуHQ4)U wDѬItHfϾݬDQ͚D*r\4 .DgJ\4%`fW$Ԙ|CExEhmsz)HQ4.ZW(f]h i%(ѫDѕDs.Z=,đh%EӚMK46{\{D\ۋSLKh9hJI .MDD8ECY_fDw֖%SBnJtcqҳ; u5͆D.Awl LZUE'[|!,!\4"PCx68F8h .=Y>P.rEBDW>_D׮hMͥf (ѺJI4Dw6DMmD"qD>Gt:6\wEQcGK (}$hh6IIK] \4\tb 3ݴh6ItcS8E'+>U%Ҽ4u-|(*GD zuAtߝּR8AG0Ͷ0>⢩Nk.YYDDES颻}.:I,i 㢩Iwl*p޺h6It4&#MG4hb"D_u IU NN@~ WEZ3c@&\貃6{!}p.',Ѓ=5d z,&&XMNMw]XHt :4=p+4!qDoi@kx!%ZPv<]>頻U9hv;:3 bݩ64m4eJ%9]4hv:I@am@į.6Ecϋ 4Ej]-h] f9bx@{^?9B$Zoh=>EW@6iuNpnth#qpЪtd=!Qo*f_F褘2{icͧA뮃Lu9;  @8h`#ЫyAkVF30C9AktfN堙9h8hny࠹@w% 4Z3_@rH4h = |s(^@ϏУ!6r90@sp@9h!Ѝwnrt q4J hİ@Z}4:/AsGpJeJ4<PzJl)I5<4)QX;#@g. (@wn#҈ 2BAӗAZrCKSJZx*ffOL<{La|I1;sQ{#{B۩*]Yql!>=sطB<ӗ=sOy&=h]@[esQd"3}SsfQ+(?g%<(%pϞ43ZpZgAYixyR9+>\`3M93Ouύ|<3WgML yf9>k=un?!ύw٥<ś8JŹ9o3-ԕ4p+5gwùiJ5gVŹ^N'sNqqfP yq.H9WpΙ>ι/'Ή9+$Ξ0;l7sp:ne|:gn᜹Q8cpq9/9}xNN-U^Y8kUYU&Z_Z+YbBlՌ_N98Z6CogR <8Hy8sh7/5b:,3X;mK7̞}㌇sU JFqutpYplĹ ͎6z MᬮE;g GἮ3#95Y71tδvJ7d9k Ǿ`ʲR6ވЂ87fL+Mm3]Ysy(3{Ź>uʷy~_geqψsΙp^u9hrժj ܷ4|\ufvI3Wfn@)$l1kNqMKscmK\s\AA3ˋJ/J3MdH]47-GJ&1j4S&h̅'r4ϳnf驆&yf%sY:yh$늚u7a׬\4gޗʦv4"M4I֦=Hs:H3i׬4hfМ4hλfӠMh>Y24-}'MMs5HsgO'Hsמ,͇pK3ii>a\yЬg4KIUvFʹqe/[N3W[q`V][NadebĈ OkE27r]v̅- XW]e9/CIb1,'**(n,#Y>x*]}L!,מ;2~eyek e7cӘ-,k5H^/˲jJYVI3ꖏp:rV "C} \',o32GeЖI. XVe ,k"kRu.}l>7.,kܓ ;Wԁ@Nj0,1mXGTw 8˺[ZzJ*HYۙ[f[n5cOfQumerS,s )%.YnyhTRmi*G,q^RM+YmsEl NMKeՊr)gen*]EFYU^F%[UCĢ=>,h$E#7ltCYD9QD/P2*s6]5PS.u-5NP+(LrsI5Fy~#l\-uj(hd%v}W㰬S:(I(aOլDfꔹS$)=Jkt Q^vܴ"3Y4EY5lP^ʜBn(pe'(k-xBjܶΘ^c?s-/4M^¨ٛPngA)S\(nPN{7ӐL{> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 190 0 obj << /Length 628 /Filter /FlateDecode >> stream xuTMS0W(`!Y2N8t C9XI2)+ޮ,Nք":.yŊdNʲfU-ɢ!TĂZpyN VU%py ޷>zte`u~Np n}8'i*yJoatG_K$ '}9yM}Is73Avד(Y).;#~'|RLD)Ge!p@pڧOš^vW5+zI\̍9*8e:7>. Ce]Gڮ]:/`\o7ִ?zgQ,7 ࢱm&՝m1ѰN'IDd, 9} N0َf]k7詡yiU Ydn̮ֈŠC4(kY~߹ܷ B-9> 50<3'I<`u3j5=͞p!% z.)^N01z=IQJgӝ(sj VD endstream endobj 173 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./yll-sus.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 192 0 R /BBox [0 0 576 360] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 193 0 R>> /ExtGState << >>/ColorSpace << /sRGB 194 0 R >>>> /Length 12177 /Filter /FlateDecode >> stream xˮ-q)x;uZm l@0 -`Z_ߙnjCynVˮU_oyox/Z}/[zˏo/_o%yw=xKoK~~o5/,o?}_Wã_O~o:{>{txyxe{q|<4L)QW4O:aQ׫:><:vyu":֙^:\ƥ^?+{L9<\:2~<<~ཎu>9j]o\3a_7NdO?k-%kvsqq-<'ymO>{Z?8:e}߸s|,{8ͺkb7~<|/!븭+Z3nk_y-Ç|n[><>|~ÇK}Q?O{sm_,pciϫv:7ax̐n\ׇ ':?F붶vyپ咯^͏o4}}gH[?;fij2}6˵Z-beZS=o/x{x#t_ OG>^/W_?}?oo?FUyK zP(!2 2RG8?:?jt jtHQ+h7(5:蠴5ڑ7"! MJj sD5ZMuHsojZM]W4ZTɴюz͜FǝKQ_^ZTQԳZ]/: EPj^jR9AF5:v5/v5:gh75sP㖖Mu5jZя]Q Gڡ%5jgjѵRz7GcGx2.AZ?W _[ H&A.@x,#nv.ᆃ# nN&a!%9D^kDX[! SkɃmwv>BON9 9?!|sg! §pyABv-AW[ W|@8#gOv6'8EkvҰs ,#x\U`m,O <{# ;#w0~0E_g4%}ǟ_7I{0vG aHpAX e#x+̈ Dp`~9#/OHe "`HBfo>1~:М +NO U#8)$KX |^++;qVCYծC鎇\>kcN&!xv $Z'`QF@vCX7ۆEp{.lKPj&azQpw;6^M&'5B]!i'x7y!8wffÜ .X"B'6]w"8"X+.Ip zK$Be;Kև` :`CNp*z ncࡄ@ٴݿ=-LxBZ`j ː`vN!xbWFpņ@pqTEpfV\P@vW>ȸAAE)h?06E013\YرDpOBp5_HOG;Sm;6[vHИ^ue5G"8vL_8D%On>r|Ep*\wMCa<ɚW%[D! xJ!xƛb$k=G=mlT"ElFOb-r#NMgO6x:#G$۵p ,B kDpUn6asXQ;ɶy'Dp # qiMT~o"p/Yˢ7' `Y]4<@g}ϝxX|{Ou̼E\."3ixf cUL70+X*2jDv t PZW!=GxxVRFLԩ9 p8>HY:)ub k.(jI1\ܐ$8)Pr*C\A `U ~N|^&0&0S )U|Apu56LjE# #DRE.N3gz_RK<S hYQ &o}+z9{m݂XZ)%Лr> rw-?U9+i(vzٓެUC'g :Do 5Wq7lLz_WƚrԜGzcŚ B # fED/RYP| s{JwVie7L;e; zwlAÊmqx-惉^ &=fl7RQ)S*cԊ.zӦ/s۷ɧ⡷ĊS꡷߬@+tRJ^s%=}n)#U,z3ENgE9z~Mmdz[^޴FoszjDh޾KTHVCoƄ7;^R 稳9dǺ?__ W+F7Sy0Ooj^s)yzWcδ$Az0rl (y!5?}<8v o|7zZqװ8 ǵ}]>-ǰZoG?}m/sl?ן@;;B;27 "sI|FE0b>}ӈĢq1S?N$F:|D$_I5Y5$_wm*@4hDI>U*p*9}PDsGh(Dt'LDC9ݨpۻ7UuI͋BϹ]!NDS$guUD3iCDfflDŽ!N4}QvDkz!!"ԉXDwږhnb85CJ.?'M׉fn'ঈ&^- |6h{Չ^wJDfjSDT:|m-mD6[D蓖2'Nt<>(htMϋ6;c@c:o"ZMN4]Nѕх"q"L[D+Dg":DDӄ3C$^o+'9]zU'!&r'ccE4M&D쀧w@`D^n͉͉XЉ&'UQn'/hD4!:@4EW5oDnD8Ct{!6\ceDQu‰ډ&i(5YDN4m"1QDkr.'L7wD'TЩl@ t>VMI4sC,fLu76w%6Gt[Ms$Phg%*-@E+@W9eڶY辆<@w@$;t1@';"5Tс&@+nЕr]O@+zhB8@ЙAPtł hw ":hgʼV]d)Q@_l:Ѕ ˀ,UL/vw:ٟχ|fZsDNxL|xх&R^x7mՁ grs_.\y|}Yalx.Dg=3y3ij LF<'sIޚ{Ž nzx_!( *O@xuh!q:!S<+'YSŜgk xAcs=m x4窺H\d̤7 3c'g: gsQ>Dxoasyn sR$<̌{B`P yP<%ti礈^,VDy5 ypN:4 gz5)p1 x0O,tl8B\e~9s::b;3XQ8'" C%gw߹|ފu3hfvhnͱDqrYNs%b=4luyh|cќ=[48E 6CDs"43ei.2_`&4iaLn!m((YO%b+6Eh+X_惇L8Jf6~Z{I4474; cEtq:Ēh.nYqѬLi)wNREs5S͓۾f] yfҞy8gj0T!f"DYys>Jy3|`?0m3`f3OI'ؖs"07QG9Q]f01S=('̌c̪j.G̴j\t33sA9\:̂Y\2\J0lesU)b0[ڙ̣ ns~iHDI.`N̯w(0mNJWsBf:_ nrP6 ?ay]\jccaz\XvYm,La`XfG{qg rJq\C#F#ibDD4i2!g!T"T;r5aS3)v3Y&4,*{Cl @ |p|ȇ5 s֤CSΨdgrRQ',>LY|W,wRrW !%X UX׋aaX.gGr'Xʼ2h"DY&f"/rS0xSs.2&^,IJ^X@+xXNcfҝXeO/w&\z}mM.UXF;;*p[-b,:v@gY湜bY3;c+؞o #]kʂ,ă2ϥsۧ5f=;uQ,`{rΉs/ki6 ESgY~i,e4;,Z,'r;X>z9#TXeˉ,*6iis&ej"CSSrԝ娱gԮZmv7jUXVmXNI{6Y>̇qO, p %b9mLj +cٗ& a>i4%qAPP>T:Yi+P) )$PcbA(uֲ]e2Ve e(gedLwPVhM)U'(<e2Bogن2A#%S0$Khr([QCwwo٤ç2e[ e"r2^&(!t[(_P e5WR2+E Hn[P2>{Z9޼G29Lev+VH(';UsvX({bESP8;9vPUՓ eEa74PN"r}cS9(P֠\EWBwl(WJ@8P{f9W(cvjIFɉC-"9"$&U $o!s RN/|0!dgM2׿ͼ!l~ w|=PSgj@;тzף5Yx&7;ჿ0_uĬW-3_?|'m}swYO?sz endstream endobj 196 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 199 0 obj << /Length 688 /Filter /FlateDecode >> stream xmTMS0W(B S0 Lw!I;E۷z8N~DJzx䤁k™ {IV%E<}ORQ0Q%bZ‚gKw0':9]?nc@ɺ`PU(6tgtuOGGTgiq!㲀圪ѵ%Ϩi\gߢZdsy Ѷ?\a'~jp&̪;MoubzeO3mI ,˲mT>vЉ'3^g|lqhډI[rէnQэQiпIwھ#yn+`t8UXϓK :OzآO]o.;eGR :|a̐!Ü,+ &bӎY813+p vYyC-{ED`Ӎǵ TDZ -/%= X<;>4{?N _p endstream endobj 174 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./yll-tot.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 202 0 R /BBox [0 0 576 360] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 203 0 R>> /ExtGState << >>/ColorSpace << /sRGB 204 0 R >>>> /Length 12262 /Filter /FlateDecode >> stream xMlq$nyYJ @l 46@pHH#_ߙ'Nd諒 kԩ;~/_ۿ^,5VSO_KzO)?zK~coYj)ӗV~?~m^Ǔunxy7{|5c|x6'm|q>>㓛3Zy<|w]3Nc]Ͻ^i_7g|,+IZǓyb{?u k$Ẅq뗕u _p]8Wu .u]By=\8]wۺ\J[8]kƸ_9au Au qŭ?t+x\(Ǻ/wѧoBoi||lY{<=]= y>"?v{o?8u?ӸqƱ>Yu\o?~֯_{tmq?gxqۇ />EwK{^|9cޟKxGϳ6yQȟezax~y7{ywAvuھ唯^kț/-\^۾sy;n^Xfar֋k:Y ܞ/׵>c="lDM8ѱWrSz?z?oo_{k1H`O0:8`tQ+Q0Pn>Wl``tVȥ`s9JiZ hX-S0:.-"xR0:?C0:`T'-->#كѺN?[S FMY`t+㜜%彷*S0Z Fu7}lǼC0 F < F9d`43P0z9Є`2=M=Ů]I F?`46; F O04Ch`F׃Ѵ5m<p FGiJp<Dl;W'.#R7 _QpBw=Fp%$81.Nn7Rljkz*nm"ApKpb,/=tsyg>s\lБ溏7%oW`.{N&$?[a-ApנkciGp>7Bk]0 =?=kj .7 .t') xu$x>/%Xd@!ݮj Ζ=C8+nlw0S .ku2]0)+1Qr ǥ`QWRWƘi}uKpOGw(R w5k6(8!^~gEA ;tD\8|2 A ^q>G8wvSg +}Dwp: pUL-Iv-c.:qEZgWx W<>0 >x^L)vN|2 p;2'g A6vrV^]Uv%:Bq-"9ΤnHFYrj]K~3 WYr&W&!r[4~;.~3c7~OUsKFG~Yߓ[Iqv֏SX>R8;bXc?f~XCj~80:o2aժ ~%Vr ~gʩPҪ~~ywxjy2wN=zXeoSٳj s(e34 -LgwVѯR`ˤ{S! */J9j|Oa&*1l| ė ;&W{h:l|+kevoe:wZo! ) 3Sm8)5BN|W|^531Kw.pi|gv %{i>)*Hj~OEj9_ O\ȷ$i_5gxvo*=|qqwXewa;V#_>;-(͇b{mY"o L8oeB|[{5z |8u-9qgSϜaqS|ck ՎR|YԆo!&_h_I/ŗ2&wηsnηE|'|/qBM|g~|U${ W+ե|@#lƈ|뾩 uYhYm/ )|/Whg}[]/-ߍLjzG&-&^ e\zODz30z/1jWiכc߶/;~][ &[@o+ H7 (>z3Az(w|rGoV YkHoS2Z]AwUVEIV?7s8-yk96&1vYwެk-Eoa޹U" uiI5-x=W5U1z+I];#|rbz}`Pzw{S^Q*6iwTs_-mw$swz8Dvev'KmOڟZbWd7vX#Av׮Rvngp{ 5;Kf?:Cov3ڭV u#diqeÚM__]eek.Xd)lv39_쪌ݮ-¸GÍf…n131cݸ_xXYۭyF GnvOy]US=*ThPv}nRfb[lnSj͘JKjv`a ڇ+ bee(2J|ˮVe3/ָ6A-74ʹ֌D7aڇ]RtqQ/UȢ[b|+v[nyf1U8ݗvX>CS_5u';W쎛n=ם~fwV?jw yA<0zN>j?jm̞ yy~㟾clg74;X2g^>\/eOyU?TNԶn./{}m2{ǬqZ%xUmZTSx7jݬ6ԣY (fXmZ&Ed d˄bmZDzezj ,pl|m[b3-ږNpe2 nLZaCl[Z^VPpؠުoZV A A4Bj L[cCnM=uP>}CFv^d&yFIQ[IEc]^$*]4`I©ݞ^o}'KOda9nfMZnj/ju{Yɥ˺g-Ju%TF.z^uYu]Ɲ L&51{(Ww&གྷ?0/yAyxW{ԟyHy{<>^ ^--o0`sý`x-(Ns˰=Do<љ~; OO<'Btn=י@ΎüZ9Wa^}]gCo;̫0݆?v&tóGw0C쓖'|PVƈuaZsw_uj!|UW:*|Uq%':<|#׃]qX8+1 _;fsWr _+Vbd'pS:WRN7Tkl%b _f _gzo+>^ _O<|eY}_܍lhY*B܀\QZ(<𵼄)yJE^dr _J(|eSnk[JOLO^uM],-!Ь=~zjA+#ٌ>>eX@kqN{GR;E䠓]=35A'9 tA t7@%f]K34z\:Q堓/'t } 4zZK=g-f[ՂAsCGsmz@WZt8hn]hI|%Йv)A頋 (:@_O;X.dM@"hʌЖr,A4z< F:M AF*@w\nlZZ}@W WzmMZP 蹓 31.هGsF蹴KL h: bfWOJASH&CG@wY.pН9@A]:D.k|}nH 4j:'BU2E&g֭?B uspy@t0x> , ,u0w}l;]w@8hZt< tAR+ЕAֈ]XgM@g;htb65г7ֲFk h6VXc}QT7Đ[;2MMa@LjO 74mB1&qm !tDB]5b`gyV^:y>ʑgaȳuL.ϝLyقhRy,:L)tg[s^h\Hj/k_b=\h+➫1sf-sM5&rQ>c7{67Ǥ){f < _wmOLAyV!{ά⹱#=M"Ӌ<7 x=n=gyfQ=s3+|<3y4^ݟ<9&RxNw`<*3Y%p>^Fxq&gjG9f9|scf ,|EJ}nxMbHs87J2-/ΕXB5,8;W8މs4fng+E5ہ=!c*γ+8.'q oCBl}z׀܁9s8gI9YV3_%ΝΙsfϳ8W9箄f~^ιj 8ό\vI 283typř*E7Q|߫8*2|)p؇sVE8ogι6ظy5rs;9̶\™/vsT saπ8%g84U q-ZF4}uKЉΙp^rWc3 qء윫v3r>Ù-|9+}%Ήtf\]4ډřΙ|Ι]\4g#ΙُsVPi#Ήٜsf 0yli>I#zy4*[D#Ls9i+У9Ź󩩴4ۢkN1M GМvs]_{h$wYI&@L4Q mY]sU3JiJf9w U=C۠Y[\sWR`:dׇ43זNҬrͤ@yan˸fQV5󽨮94?zѬd4+⚉\3d5+Esgk=k\Yw7iM4{;'&9s7C3mhK3KL iff&ҜbCsr4f'$).U Jߣ&㱹.MA3k4XB5kn^)fp,Idƙs~2WҜfX/Tf+T4i&t2!̜L3r4kkfk4p u91@s˒\3tf/L1glifۧ4ѻfFf93Ըfݍ>XYSif*^a&XL 5,fz 95y0kS0k1uNa>ugr>[7C:cgQ̥i184Χ0{_w|0gz8fل=œ3ښfB1eꌘU"ae::cֲ }3eC0 SR`stN/\0{/$i]C[XY}RPwa> f-+9+ ffœL!0Jsfv%K0e\i fun0䃙fJa.9܏ב95*Zg<2Ov#sY f:;10CIb sVaaqV7LW;9fUYq*scMLK-̗mUa`La[si똩}z\ \YI30Kݷmd{I90}ݼc˷6˾Fq0+YkLVNt<嬚O|އe(ʲSxr18*8,S/˙E5>g&me}cݲUID˲/A/b(_|(S%4\=#'_)U{<|"备Fܗ?Kmڇ9孶ns'̹#5N~QNLE9* *FnQ)9")NW,s(*fvbjATq(wP.P>+&\u 22E$͖rKRQ&sʾ|jcLZV('Oe_r&'MQԥ@O/5?6ywq𭂢LC9Wtq2G%CNrs_ed߰uʚN2_Ga-SЂr㻨򡭒P21+S\j~-EAN92 erNY\L}o=iK2E[HnY5_WXW澰'R[>%ےd6JIIK޲,"K#=EGrפvT{oN!vJKnȐdNKKNɓ5n>{J%1d $Y+ܒ|1sCmD$&.kRgRmdÒm.Yf8%k$kC$k$W곐\h)we+gĺdHrf6xH2d]6!#d:FZ ək$_[ j^K)K$Y<.e)!53KTe3;|m{!G /%~$8&S'ɺݸd6^oNkoYڽKNLyx$vauyI ;-V0&gdԐd:|]9_ZjF2E*E%-/.B6.YÒ\R!+#|ՁK.{K ]ֻ$h}_=^Sґw7dݩ$Kme.Y$j|*iiI%U䋖|4d, rcșȗF rߺU jW')Ⱥc8I= y'zhY3֢u֦2͛P6$M[z;2^!嵂!may­K["d!7h :drmj^[b+d;dX 2Ek[,j<!Ƃ\eDՆOյY Af!]c g"oi-oU\l~C*AdU'fk*oM 2@N[^ b&VZEb G=#d.Y4t @^AH;侏WSHfڍ=}/cm|2P.Zr9~@,U˞n 6 2lO |ɧC!! g KxM<7jH$Ț5 2]w'iXq3d&컦 kײAV d 7H]I,> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 209 0 obj << /Length 1681 /Filter /FlateDecode >> stream xڥXY4~_a3$XH@"*X3lQwne{6eח8dzM(ud9]Fe4VeMћ]5x,IZftndtf~}aw>z6xێS=B V;mIiXg#ζ+t{PyEH_Y7yVढ़sp_6jGCV^pʅ/UY&JcҪYo <*U]6UDN9 U GC"KO@e%%6d|Hr2A1PL %biӉ<0DS831f%6~0nhf^-z# f3\E[t$o< &Z$&/M<1)rmikF0.dmK,uRU0/WʖU%>2J|S !OVc;好__XO02 6Y.8H%eې˸nU@.,pBnJ)(咡AΠBxџ^iH+dךb`l<ɓt9`Ž nizSVRݑ.ڊ ,S4gjц;XWԆ6kC5+0BAH:lD;rNCK^KRY?t5Kb#swZa ߸AbxNy!7aCH PP|wvƃdy|cmIúGJU:3WL\i$֞!^,Mg4iĵλA|0) %s&T`]$Jː5JP֫S/Ay:fAt4z/U#b:NY ~Sߌ]mP^yAn:XvYυk<,aa8yJThؓH&,UWqH1vֳ M'^-Bo:]ܿGaB{o(އϨaop΂*/š0Lhz `tV=#|Ç5t׮87[/:í~xS '[*,ePHZ V?TkpE>g>] endstream endobj 213 0 obj << /Length 2072 /Filter /FlateDecode >> stream xZmo6_et1#R2 [m1`7cHu䦫_2ItQ,4!7jJFEhDrD  #F˄$a̖0shp+Af$`<2WJ * #Ӕ\8JK' u?JX4Gj8W.$>IܙF R #G+Xf =0*qFr?58viq5f֛ 9&̚%|ɱmyK0^|pg>MqaUgyB#~u  -eǒ%Z˥Q'f  V "prg]/SΦ` q݉="7*bozT&Jz `z46#eZ+|5ķ:\_k^KUJH P^b, p;`^m┄rS$S%>>{!@-L^>ߛ RΉ!!HQAD5%L>ё ;t~/՜A%5hJg)M0ЦXY4V6!ɲuc 3PrB * |JeYaf>H{A[?F/(K6.zڍwҺ!?F'M_7k%Kt5t2{hOi Ekr!6vnޣmFǥ}8%J:QAt̋CP ]Ek:JT0oO]hGđ3bkJZkj]e$S~P"ģ:CHxY,i9bN=6*xg}Q9 :87^2 R.`8%>ޢʝcZŚr+ti}kJ#-XJshѩyUvmZ՗]٧ZMڷṊjywvDC%4dp)c7k7C'Te4/?-e,O[b8ض_vju+ïP qASMKeQ?QlVMR(1r2ɟ ߝɇ v H-wUU 2ǽnnChQWYJ9zj:3ŧ&p֦|V?ۙ빧A%5OQk:p݃դFxuw{HAfƱNӾDᚐ4ʬS4ݢ$Fi kYxW8]G.Gg;s_80&C|Şf.9-^ã5UڳPuvۓh ݵ*e'r^Nը8. ļdu_tkwcwP<ڼ%zg WY v#%Ntn=xN]/p2VjG9侽Ր5m׾.wO8=e % j눂p>Apx3|4y|-G? endstream endobj 217 0 obj << /Length 1623 /Filter /FlateDecode >> stream xYYoF~ׯ`>HIsyHbPp@b)*(\?:l%r"e*r9]A ??i| b]'nho_G  YƸi󗪗tWϬb?^2첹c>^d$Iѷ3qͨC,$RA3=5KX᣼kYX!X.i1D3,@0TkѠ3JsņZ*彩;NLTٟaeWh} h=V0)>i19_My3WңΥ;Btp76^YVFqJqI,|6,1=diH@L1T>Via*}&8W& q60Q^iHŚʤM[#__KVum-BcM8o;8& EZc|yk$|vdBR6k]%vz6@K4V]ϱ­|kl UXc6 zP}$\\*Fx3d7`&Ydбd]j(Un^~l=s>GͅkK?lVZ[%]+ }?8 slҐQ}4A vl 9+OitrJ"R͕b&}&ɐk3If2C׳;suX~6j6XVr5y}[:͐55zY`t6cȢ,u3t'!?w׃z?#gd'Cp伖|ތ:T endstream endobj 221 0 obj << /Length 1705 /Filter /FlateDecode >> stream xko6[Ŭ(J- >,g: .9$Q(IecȖ_@Ft b/B ">`z|Q|ܬP6Uέ<ڡvؙ=C.#Fq_>b`7Ōjw!iFFKl ]5u,۾(!.`Zip b(Ѷ)BXm8PMYP}`'hʢƵ8w f0~ CMR5, ^m1ː?S}Q7kk0kFA\`Pk;[w^׈["fCZ {B+aΰd&Vamp5TJXD$:@odrhawv獼hgp荱$P^$o>?a{BZܧQ*kcZ@h:/6=[2tY+gvs3CǼ#Ӕ,b'k3MB @ᦨf`yA@-[W ׭ۍ1(@.> q+ԾbJFpc띬ιU<8sm#&@i5x)ءl;>ڱy\ޠMsXa.vKo()RNEWgV_4C8/񽼴Zⷲ°ª[;& H9ݟ$pBEbJLP ׈ #[Fq@'Ul;3G2Bg rq0L=~J ~G_ N" endstream endobj 226 0 obj << /Length 465 /Filter /FlateDecode >> stream xڭTKO0 WXZfqҴɁ Q4B-ĿICnE'h8`/ w%LKYf6ai~8!mHrWH<؏YR(w(#>^ܖv"C$X^Y}t,kjZGXQA4n]İDbp)_n*^sţX 鴕Gl۴@e S 1TQ(|:N4Fk|oD|:Uo͔]ucM#vfoVQWilT؄H\v;)'͹>UΛym]j2nۑk'.m0m8"i<*OR_ > )EJ 8n[=Oݻx;6l= endstream endobj 230 0 obj << /Length 584 /Filter /FlateDecode >> stream x}Tr0Z3HHdٕP:Cȴ,;34z`it=u'{ɧ 缚̖ RY=B1i%+2RdS}!D>T l)%ZKjdYx5 X#'ʔf2Onc{ؚZ`)UY|), =#iu`5GG<70z6>h#ևK#\fPl)Lg,+Jҕiؓ?`vgO7RtG)bUJKbJ'<4[ Njy7)/`k^|H4%C0QBA=a3Mx!+]uqGOSz7u5&8Ձ78̣Tv)@Wm'J! Ss=m>Eqe}G{?j@^BŎԃHm uГP{;:$ux7ms/ =ݥ^da7[}ӷK`T]}& l(Ww+ S<ؼQP0(Pd" Y(G/EB, endstream endobj 249 0 obj << /Length1 2223 /Length2 15275 /Length3 0 /Length 16595 /Filter /FlateDecode >> stream xڍtk Ƕm$ضѠqҰݨIc۶jN~os֬53׍~n=*2u&QS{c 3+?@\QLʎ@EabJlio q']&ty7Tȹ8ll<vVV;$nEfJ=hMl||<DmAN&@;"dhP7x? ;3֙\nbP9@R(mAN aa/; xX]\LANuY_ 2`86f/"K&&@;OK;s ,ڙeq-mU3w~&N.Ζ6{%LmmAv.O d^wO7?4L]X>Y:d%m.B#3XYYy GĂlsvw4 x;@'W?&.cw1_N=c7 3cwY$bbo&.; _V?-UZte|JzIߓAﵡo%yh>+%:DR66ieZx}]]wC}C_ -focu. 3o-,=@*.&tblׅ`bce?3~T{ RRcf{_RS߳ `awyw' 0wB\ѿDBX ^+EA;Ωs*sA?= `,:E|{?zX@dWkdk t1a,ppA&!sWnc.|O=_m@PqڽO?w~'sxـR{5O3?1 g!?n~qx'bGOn*|7;;矤m@N"4quz/|<@&K&!VCZjD ݙ?Pi1y/9>&Ugm8݉&uHފ,z4Æ$|y1W8?Qp"ZG OĤ!h !Gʋ+QW26_-R6c~`,Uq9 1=ƅ F\</޺1s^kΝxĐSb)r %EraQEfĆMBm@GZ%#@2ԝXm*#v<:W6|gWL`~kSaÔE>>i7Ev\.oi;åĄ7 S!I0! 0Y̧oZUoB_ Fk7:Pz / ? Al.8j칆,遦bҭF#)jNČ1G+CT)y4?oUJ?#V&LɖMVD*QHHesh%wF0N^w1p/T j+"o q£ůP L!Ԥkug7{K=enx!>QN[tYQ+#4R02O3uϒMO|1w*ۃq5JNt \-Jc悦%Ɨr[Tf }~Bwv"2{}[!8ۑ)t S凘I25Ɯ4mR6=CPW0{1K~e6|]-I"1k$G 4GVs.z~/G9C!ZW7>$6.p(HV6L ,.-x.UL) jq*5Pnym4&R^>D_FЧ06?D6{ AMwJȳzic٦&iVϊ컟Fbv 6+6`,(~/ٌ$33R9*(^OLnL݃Ll%A|c;~ķFGb2,(T퇎GŇ"̈́e0156rq< ̩6MnDﶊ.a -HBf*3w a|#_ N#m~ϸ0TXZ>\Syum2\dH05$rw1MhڹXx-)$U/K6?fG ux(<,~}iV00'c@h[:pǡ hOVb3"]иF&@ Ȱ_~<-W/z vo49KFYc6ϠmK)h#Fz̩"na/a)ԠZh>Y xRO23KE g` Hz!" dvE#@19k^Օc=6경F)xw&r:BU yz-VɈj(!&Dck]؋RQBJy;ΐEY KʅB3_nfNrJ:.mI񆻭1cma$.ޢ&֫|3FQU 7#}E2gd# RnXзG>̀[ܘeH@`֖ٓ^.RZEi=MKWPaUX1lgUAuًњx e!4sq§ŀvro3g?vx=QWWq>9nH%ˆ8r)ZSל{$pnΨE$vk 7– |WGWYP:dv#]lL䆭3QO}#^hHTgלVHKD7u-ЅE #psÿ󇪼7҇1P-VSe d&J›qO49wR /cl0{߷S:*\Ey3evԵMlǸjz[v+Zyg P wu $ǎgZNW,z]Ά^& 8r0zn/ZJQ-5JЖg ffR,ˆ`IhF1Umc[ 6 $54'΂ŧ9)wsMn xBcSJ0du\! a,jCڷP&}97֮bP"v:g&)TzCF\\*aKSW7,s`z{ {&~|t;XE %ֵP~8erjYrq1c<4r?2*MTdmrTgKT~zUj+2741pV <ߥtU~g:P ߴK!k$e=R֘GͣN U|<-FZ$E'Yz{Э)F: Aq/,:gdMP^nkc:D f|01S9nƜ51"ٺYHnJltbFiP=;d_ϐeגV?!_%e)7c (?1 (́ѹrMA$ybq(yȵ78KtG*@F^TӇv18"{ {Lh'K 9&5:~Icu򇔰_L]ְ/խk2zUR@u7|ˣFiOW704* }HcÌm2@x su;4goG:{w\>g>Rt˴f9QYpOg1LgL'80Ҿ$@-{FkWs ꯞ`Rǩ!=$X͉bBFCЭ_1^k%r4 B5/XM-F8 G+hzW~0 GL焱k_F-0#3:$fxZ^N:n1G+.\S]\)ȖE?ThR޲YШ,^h*V)c6Sޓ{zJZ.%)2sF})ۏ;lѺ-߶Nn*71B 9pW?w(F,+K BRa6;Q-7\[q;"=w3L%߾4Cq1ۈeEbql|%b*xNw\sX\nּ.|zW>ڴ%]š'ޤ~"iIIy]HQ'V 9?Z!?mum7r`vpmJA@%T_ؠ`V݄8xeqN~_7(ݼvYm+sa-4wɕگۻ>vWcЍKsм%xckǸah'i&dX&M\^;A)$-K-Р@WI8@;fAκ[Pe%qZ}`ؖ]+}Uz.o$Fq:[#)=4@ɐU1m<W2³?~)=PV,0WĴ[]o/=7!xH#4]cF@*sSdq;Z's®򢆕e3KƗ-Nh)?,H{v%L-lL-NGݚE.DjTX]L*d;xGHSp">KxK( Li%Rh3$wFl((//@IIUN"A _hŖkvFbwHcQd;xĪN)2FB>LF`|]GGO8xXQ5g(>Wz?1#|nVNUɊиLzy2fV#84۹kd)tE=mLD!䎇x?}F&[s8ek g.dC$c mof/*#=ʂtBER7p:iH9F?i3QHjDJ"דϳln@x;L}Wn7$Mm1;nQisVkp!K`3=^ifF$l@[uD,eT,6Y[644t0FҾ$$0AJ.c6Eڶκ*8ZpTwde4je:XImOa2BrF|G! ̫˶qiA-пiLsrn^E3.0ۀ,O a?i: gޜ,~L o۵MS! xnz(.UMpy')S􌊂+[~E|R4=8=QmOnV;οF1Bmp"Am=,m|@TMD~a31}Ρ DOKyTK'q96'tw39&'4xNr;q% B-Rlf?X 9U ݢI|wc`n-~¯l.8XnQs e74~={1Ya–V3A}60rsh⊸n#l9RlhEk#7Y&ZEdߣZkM!>Pt}mΆH=(DC[>ЊEhL,gU5%bEOJ?l9-AE.&32jNנ6!_2KNj<t"T{ZUg{gB)JiKYtK\?MsL<#=\*´JQ$lV o͠ԅYZ;4@LmC/>B{ oHɞȻ\ez<#Ck:5EEʈt]]] BoK>:r~Eb2JZ6_  N.͙Ϫt)}_ܶh` ~R(ҟJFVa-ZZBpE7 ?MΚj }# rcl! O1{Ї=N<X`>Ka`a!vd|Bmɞ| 86DbS+-/_Eyl$4c1dsƒ)QϏGt, kh$&kv3K{;շEKgrsX#>Xv2β'A=sёE [4nŃQջjeCɝX'QS0X6J@{yٰkZ2_Arڶ~ʋ~2s VMn5sl-YOв`CfijRUT/.E iODuU.-m[q^AB<|JWlFi9_s"f |_"f$ZBjx4%pk.,6Q{:WUW¾c/^"?A: J1w׳p$‹ _x4L6JT8-JLF"w NAoP嘜;sD2/tN{d"{ Ka6rI4V8x˕N(r%3 ۩*%!i͒?O1?w8 hk%GKN1KURـhp??O^)n6au1`F.DĖ{kM\o[&nx`5Y Д6EclճPC)n+wx藑Lj"O'Rp"߲cl 6G|ϮS&R+\zkIr;^*x%a-P (sQO㤳{9’?(gf]j]m/~ů;X Rnh>j]Ū&bZN}SRhoxWt4>]KYOtb{&DD9O`j U@q۾ZHO{n2 X͙GEVƲ>oL&G7qeIUۂ-5|X>3-fBC:h+ pa}5LU^~6yvd9X[juz~d=T޴6*0Lѩz E|9MAs!B)Co㐏;C2l+u2y##i_jƍCᡃ.:H7hm2|YhriF2"\sU=$O3F+BvyJI="Z Es*:Rbk ^CH2s_1p:xܶ:ZBB`:/Ĵr3PZdn0D( ~=> (kVxQ #KB[`٨~PӴRp, P0*[`Hf}?N+%ymh+'~Emc5ߛ :пv?g9Wby'|gߑoѳN-(6TܘikCЋ(x{y7O[MHh颗@5%l98M'>T9j$kc2d)+SL*1j* W>BRXڂtBwXLNݮaߋBr{WO!eyxW>묜cv6)tz\"8WJ[wpJ s$DQۏT*Cez}#FIخp$DJ]8 ;dd(*NF-FyIemj/t/yV!RM2bs 5z" ̱MCFBEzظ5$Jxf`C睟&6nJ~9񵓘H]oG"6Bݥܑpg{2E"XډYVU~+KV7q݁TʃN&Ԩ:?#D۴~Y*T(ᆬJ>a㢀 k07ۆvt*HRla Hר17͛pF:|xp)ʨ|8hc^|՗7{Hp<)v: -;:ү1Ȭkc23!AQtڢ!~T]5Xc#|lQ_^X3i&_ eE$h1NuxBQNYmѮ "n"6? =GcxǍ0 n\)- g{` 'jbXmh V$"yVs8_̲32 @MG=Q5 ݬlBOVU*!L% n f_~xb+=H@B Љ-1^WE1쒂*NjMP^ug”jHp"m,m`(fڟ4VVe-֌ +ү-`2!y)0 J$PTȿq&dvey-pG{,sdɱ]c$MbG !E|o(q0-}ZzV-?4dsuj̯VSZ JU ^DKT]?+l>_Xh2X*IBpg̠28@u#8%6wX~Ad> 낾?B%ʺ{fر<ʉԴ+s]ה雡Zxh~_ 1ܸMhTTgpUA{wj~ 2ao0B nHO^Mp.igSP FJʴD;,*ZUǭBvGy+"ñ- g5^ rDx-TgUV(\*(Ej>P N=ۡU"Ȁդp鷁# „NSXӉMn+iL+qJ~ǘr Q] E4+r$N;E8gg]9eyf簢 n,D_7LȑWeX'}w-ԞQvG!K^??:_t) 2oMscM_CLJ[/ )]Lu/ALs`}Ȼ>c7\}/Uh\0Y)vbp:z"g7B꨿A4ڥ}{vjd#(*k"uhn}JT0PLX[ӎBGQV6a &#ߒ!!.*oxFd;_N,|[Ȣi7M@KMO1~jܭASEtk͂ Z?F5f& 3QUDGu6{T85X BhxxC V|!+j1Ѷԟ3 9"x-f\!PQS+!KsbLb'ˑrNheX4m&V~R_nuJT&< )/R4[K-sͰfmBX >cc gt&}T>6ImP) ק_fyzbno)ud>275$ z$ZqUqHU?TJ$ۉEu)٣C &VcB؀wBXD\G^Cc\hըQ3/#T4?I^>3txVp:.rBGP'>5YTQ}97`ɕIcᗒfZt{-vb4Wsr zY7*#?*ukBGb: Qӭ+>o`ԿWC:6lX'8n#ĺuUKg Beri jGUC#q>{G^mS7vsvg]-32, 'Bp1܋a&((˼?^ \u28) F=;0^z[)(gU).JT/rDB) ee5AX6;oS#&/# #B _\U+sTe|4=)3 /Q1xPۊ4Mk4V(wOB?gUG%2*/جpS8(gR09m@ oo'ץˋ8Ž4CEߗ-mInN*WTpa*Sh<93b(i #F֧p禶P2'G 15FZċZ|հq 5= LwUf4L!SBXIDEګ6ٻIie~׷_?!k>/^`WkOƙG6uL]mmVyo;$ Mua3R9ݠ43P*9 f(QHgZ),}HYuBʳ|(468UB]eAr1+m{ͤ +>RWdb벬7~3:p-bR ǠvpfMK~;tڊ)xbG[M31 r\U|'X*j$HgR^\ $<.w!AS$4'5*xdq뫮/CV*{efڂ&_6r]r("OX_bL%JIJV >0Z$~0-)uF&-6z *FbR1ߒ ADk{ Pߞn yShh L:|e ڨK^˜λ#kEK*]+Nl/܈TV+أ<|ol jBqYGx';( 3{jΔy!Ns[_hA8uW D `z걅Z[HjePCɏ3::# PdeuyL}<7>A$;}{/qD{'^Z1/GB@vNü4i j]ggY 'YLgF!w|=u_6Oy8ooJ K978(-nfO)Ȫkt!rr6m~+cr1JDGs.$ 0~2XFѐ+8A[<$l=Dut4"m(Lt/E"!$_ܳѯ#{6tBԃJ02Y(ְF7! ީw`Ow=(fUoV83RMD%n%<'ESD svsL+Lt?liNH_m Z&fǡ[S n&\65׹Q[Pǘ x^OS'2SIVɚT)N.\?1>䔲K}7sitN@ԙN]ǣu#ؕk|<^&< 8 UF{f޵1KgB=l:5Q$'E^΍ZwǤ2vq$oɕ԰:wX[dìN4RH,~0jk ycZVbF_uxWk> stream xڍuTk6)!(1H)- C0--R (ҍ -)!-( H}sgy{_=,F|p{ JuT́AAa~AA!Bvvc( 򷝐aRh &an0(& JM#* @x+=P'g$:ߟN0())A@ @t3An#8 A+3!% r#xP3A@$tA? P##7(Bx :;HSE s8 ?p~;`9n6? ~An^p?u٣ )@hyPF_aǬ sPC`H/_S" ` )+ Crp0A=!*8hlN$@TPRH\L @{@~_f  :B/B@"!A {E`$': qk?D apK,`gG? I ""qq!@пsmAlԄ9@J|矹;.ZPTOo[ޑo/ܡnFCS Mߨ&E? RAH_}wݠ0>  C}x)Ua`ï?!(Dϩw{ap$p#TR .= rszy~c@ 怹AP' 4{{@ `¹i8X:ҥ>V/ƨG ,.>' ^:WMn2T1}-š*<j/AEcv1% } | Waح] =%H)|{?0جӺ}Y>h`b>oЏt#EyKQ+BISB^o[1bPRx@;*+]z6ɒq.oujt#XW+ *)FߛեÞ}-ؽ{R㠅ǀ}SI>踥**ަ\D.lW- ܗG#u[Fiv[NϱX04Ip]-= x-^jKb.t|Jbid>~3vDB &MRy:^zJF"(45Ⳑ-9_pSw|}*?L\Sv{w510!pIR'.[ =r _13_ #(DD[40Cz|?gEKX]ג3rq<'; ,c#K[Z& =:L) .V Q:.#z!Klγ-jc._GX>z Ww,-ĕכC.r$j5~hDY|Kxw_eDB8 \DܝNR>||p]?Sfl*hd\oF)7IPgJm]Y7)pƘ'UO/f|:% P5~wd(F/A뮼2ˈ3)"uPWIK72 y2󘱉9wycs`t_.i87olB4/bp"a_J̱>"owm|b-)><e<\үH~f \ť p,-V1JqMPfGqO\}|RuHvˬ^vXF.F)O UwY|V+-d:wܸ=U8+9=tlԣ*1EZXkKpk DnkTLEseY#bwBdVi~_=g㠴p(Bق5E(BǮ.Bq.>е6nv5M훗wFVw9(WP$:Z)sE.El{̡A2%zIF-rqÏF*VqfSgiɤnUX(}`H /l@cGch?#^6td^qzpe1H7(hih|8,DU(Y#FH_p2ŴJV3g-h8'(?j-io{ )h yO|{G|곎Kh-̐ ~宜S[4@fxI i OB?TKTl9,;ttUfģ +XOX6 64ЋEUoybPӝ(hh?SQSYXjRճ@랯yVİi(H Ʒ\0mr߽م'&s6Uei*HB^*`uo $?cj8sjJא'+`'vOJ;m疻]XJLQyhRzg)|aAZx'BDt};6vu4/-txLۣǾY\a 쒅s"B&僢x-|x<"ar:L\A+yֳ&Y5ȿu!5 ?"t#ktTQ'\/RG 1"Ǩ)OW@,Qd7%tK9~_$)+ROZ3pmyFZݳi `syۣS7gZy̸Tv+vLN{"y3-Cb0<%%2rVJ-OG)nLo ēPtۚΎExs(.{xC(yYyF̾w9|ڒ,눦BAsvr3׸xpmL[|V?3)Iy)r2A)9|+c*zu:S,,&~c߂I!.&*uZϗS{Kn_x挪H-jW;;nB"׸~63q{i;7@Yğ,祦{'>}v #a@\$<ǚz~ ג;Bֺr=M 9i0xd=Qحl8 6%a+" $k-#%ws,?#T8_:?P,y-̰n?B|]lNͷs.>1q Sے-iqwŧ)-O-Noan$6^)eiI2R=lS$qK/5O 119CC>r)Asm.|AGUVK.+cԊw Kbcu]R%pɁtkAdM3 oфIԠ/~OOfͧj ²3(Q5SQg7$3\ޮ2K 9 ]6ʵQ- vח$UL^CpJ< S;D#ϻshʚ[ˮ*#٭Æu,Z"K_\c崬w1ia#Uw&ՙ![6XL8alߨX@:Ts&Lk%;wc~hFeS 㙥 "i)V|iCYU./Q\1k5ܳ-v KŸ;~BA#ChfjJYo Kzv-7%w'xK^z=ίoWo&82!=Zpszc׍t,!|8UȜe]1lH'h?7H8L~ƹSuuڇ򵷘ICGnk&~PJRoRzÿd/L1uCGOzf 1BmG{=j>AM -b;4[AfȊǧs&*qKOÞOC*rIl[\Ŵt ci@ $;trԦͭ$~{qp{$i@m/\؝_ wD p1h\Pl p -,]Jw֧1Hn0+ɪӎ ;" w΋fL c(16j2N;>W!Β'l̯.#^\=[N($>k`YоBSQo 31;̢Էwwֽ8^zH==t$KRG""oC6jTK7Aӹ^qb\m&Wm >ը~/k޼)qXV"MYUc/a!3@F631E."'yylN*Ԥ`\IyS*P1m dXoy;"įev&J:K2,*PJb2'_Ȱ%7 ȦIDF͗.dh%pҰ9_/|3e+[3pa}26QsY8RAǶhY8w~X&`9JFtKDTf135y֮dIJuj#z;?nXk >:}mՏKS~Qs6SCDY#=`Yk_$Q``^uu5FmGWVrXL&_ׅobp~eSI.ռUas9^ma ݭ=9#^6슅%3>2^χXCJ>w*ϜWD*VA_ rZ3~aɕ+>`Gy$ZQeѬ ۽u|HU{CK6 4HtJRM;ObJUJQ.@S(SXJP䚰=Z.B)5̐K$a(g1he! vs ӽqA^/L +|GD2!'s#Sͭ%^m2psoXXx ҃1]?{ endstream endobj 253 0 obj << /Length1 1604 /Length2 9397 /Length3 0 /Length 10455 /Filter /FlateDecode >> stream xڍTm6"J#K!.t7Hw4!< %]HH|S|s~{535q3ШkIa9 )VQQr89990zLG8f'iG!*0; 89\aB3 Pa( pLi##%(( i q* %!3BnIpqqaab/Y.P%@8:C_ [_1ږP-9<(lf;xRPC+ `UOvlAvnP; 9PSfG"X ;/ {96 遲rÿ8;j#ǯ0eKlm!v8@!fuwv0;%s = Ar s  %ǯnF//{= jy􀃜!? -a0 0X@0)? 0|? Äav6n㕢>_1JI\l@/'8xw*7ZuqQO_޼w U@CLο'/]Wll~ۙ [_vB<, aE sU `Z%xt6 ;'ϟz(\ Cfxa_σ'vq?O%CV!kgI.^>0/`p.^s#F8$~K?7CIGp<<j~#r6 [S/r`NF>n[JWM̜{ т@\!fS03@*IraÔK=.7n1oqZsJ%rro>J9\f-MzRtF-mAm3uy"もv )G7IJȱI28آ[EML #abPj[{Uq2UMDiɋU耵d4Z%+8Jܕށϔ~G Ǖro=L Trh4I0sInYeYcmX|y;'hC,yE4}Cƈ/fVm43eyZxJj[T뾇L|gv1|z(Lq?Ii ҁ ӷQEZ{1:p0Ām{1-t6$ 7'$&D{r|cNz{}&嶵[>6eiP"ٻmk(p2U _\2Ǽrӏ1+ht$d^)P>GrS!Iɍ@F~b'wu2LiO(}97R?hZFf^/6\=ѫؤycY|oqëo"cO݄*TtAz֛am6m0 lp!71YUk?PI}p_!Y4$g|wW!{SPCT(l'KP&`Yl}~"e7`<$ȃ鰽c1H'@׫INϼ"8q/kW;;`>X#PڴI_ib_:m*MjUa |ooK!RnVTCNu>Rߚ!O V,H9BY$ar`炕 !m8n"XƧf̫1<9ᨓ?* Yɲ7:wz~$jlSPEm<ۅ'̦Qa ƭmglIlaŜ'K%JEIgT />YF*_vfc + =q_#מh*N<=G' +gY:y¹rpzqΌCu䀺LzS652$ov0 [f>X7ᗳ`׊9#?3/.,x b- |&a0c+瘝?Y=&{u] 'Kݝc9ɴ Fk0ò0f-XXsXcR7\ҵOAP=ug3m8:2,cg7)jDSU \ޙ;\{p/\3O@,cZ4fy#H)XHx?mPE1"ʝF nDkkѝ[ 9|C 1v̗SWW:Oqn13!}/ǬA'*R{6ѹj(!õ%KBDɿv`myȭ,&u_ S"sAϺ9mDzIj53s*Df8d&$~eL慷1~Kիm9RƓBeT4; b.63ƫݎ5~ zg|Zxt uM ֪Pֱ k\ IYy9fgڎ(88fuDO T)cy= qX},i;KoU kYO%Ĩd\BR>RV=70Uxdc1٠Ѩ1 bB{`- t~OQge2іo^!>64/ >ٽ]Bw)N9ɿLO~^ɚC$GpdNzAf4;׸+?m?=kv#{-\/鴤 *O.g629:|>߫=|K1s.Gp-uBdN &t8C5e޸̆ JL8jqX|NOXѷg}m549%zV%LȫlR6>$ސj-e-9Vda8ᄈ4sz˿rg~.}MxaQ4vh #~#_X8 ;fTl's̭lX#GQѷw9V -'>%=4ύaTM]S-lFom6M |{ly F|ޱQw4q`ƂQ'^>lA/@pG?MhPBRDF H>k9Yw՟7BvGz^xQ>[jeO}K.AC+AYG7o9Dc1Anx~?n=_6]Uc|i, <&c+nFBq%;'_%&OW,BW*~29DdDn7ѯEHk.Ζ1 ,~2z?0s׶Ͽ%k_" 3G00}~RXc}gf Ɇ-LQ&Ķyl`NȂφg]QEVٛJ󊚁XyW ]_3DN+`QX/JchΥ}Rk@nT[~sZoٓ ?QڽgSNnnT:vު>NJHbHlpK&YX%|%<6r /X / ;z~fv\[c۷e5\' tmm־!jh!]sKWwⷴjHn1J#RY?P5'Giͬxt 3╬)4xynu=w&_nbn6*v2:)H)xqNZ+ԧ`[V}p5;BpF ˱abB " P'M DQhbO!63B&Dr:El?)+`leye Mnk5bRFI4کdq. Ƽ7rtLï_1B$m"HP dI$ǍoE'!3g\!LC I|~±T %irrnowUNeYyc/Y3)Df[X w牲{2cf|Y7רg.T^D3:zH:lxꖦQп.upRMUoJ7#x[g^A Ƕu4?֚,max]QoX^sa%lTL:\k1o:6Iq'ͣXK~Kvoi l8y!/w\қf`ʽ~˜]dwEWz}[>1Q@:͍} ѵ|WCD=vH%:.3 l]xZ*zб;鋔ya9 Zl? 3Ju`\%NOAгOSx,eqŸ}+.I|'V{㧂TG͆g7/T WmP?%lѺܙOܱP~w\MϫB9 ne#ţAF(|3)uo$' M6xHͼ\ȝ;JFPt5w)M͌ $:HlL=h^_,i}<5 |>$ޚ/f5- V|:nDL} O/@58I*km8d'>'x\֦чo8i01%~KT*4wZXMsշ;%Ry6闑mI=NF&&8w{,1?(ѢJUtFyf]&'Zkux//Tr %§ ^nHGrpdt5X_#ZY)w$m˪dfLS.vwYsCY 3X:{ 1Ҷ \__'٢ -8r>>`x^ Fdʫ uRZ018WCe?ށAZXm48LcL F 2.~?`̵E:^K#7EjZowۜ/BHp.hOWk$*76?X wpN/8{ߒ%>`:JTNOu貂Uoh >/k+=lE9?d_MEU%wv`KX+9H=#rE<i{#o*t+{{Νlh]<8 Pַ~H}]'fV bKH(cWSFCJ촄cO{Q%vco<ia'kٵ/NYrn/Hzlp_BHKO{t!qT~w%춪~B&[ uNYrkƷ9>޴>P~]Z]nG.;畖ڨE #ӄZH#AͥuD)+Gr1SGl'8ޝRʙ'Bqfa0.Ke/#uן~0IV5&CL꫓ZBng2EJ7i(vWٟDo-°SL(,l^,Z`p-q}rk_Y_8f̓"2SK2ݻjs|Wjf܋]T[^jz"'iuc\e$oY²BFC7Oיcʵ?)4W!DU lye[H18, hl3 =dH,W[mr{)2 \uLbQښU-" am#L7Uޫrjhش\:Dj|A7ÃuN6I1N[j7ΗחOЭdY@Dd.Rih]ttG&)Ok f˩Гsz nk쒔”|5Oڬ]d!X(:fQSW_-X˒0 !Zp2i9jo2!չ0Z"DvU9&"8LB@ONA,ٿ~8%uG$-`8)d^C?~mo$̋F9P 7wA2oL좴̼!H >;j^=`0~x<Y,XQېqTʭu$ފ W:ϴI P]*%>>Q.Y |&PCRc΍wVC]9"jUjlyu,qΗYY ,#bG뷡 yLY>z D(T*FϟQV8x˩sJrQQ}yA5/{#OIx Pv:NgYpzA,5KZ+2M99D8δb3_rL{42,ˍsArzO(xZDb7y>Mt9!@n_LmG>D0+SI;,cuXBpv&(װǯ&_CZVdg>`-;HHV`n ËBFVTuY}Gf^M'X-4_g-@mH'w}P} ?ͤ:U0%֍'8ڜLNό6o'~OmhJ;]]p\(axU ] qߕ2IKTPR@֦%SE>sc}fzYf;Z_bii)SolB[=OF > rӦGriv @7Qr5-P+ʰAC&`8? i+k~2/NT003DN2RTs_G({z{:A x k{}2AҨgQ)a&ZG^MT E,Klɍ'vgo[*'uOTzh u;WoZD<.pQMVP/h5 g&$[EEo Tc1?BHY`H]ZB-rAsXqQ5.^(_Vo>a. h ZHFT¼(ʑ8pbC%!{A_Bߝ2g"F|f+1V2;$ⶠ d !2i` 7>;,6c%A^]]’|ԕ3k֙]g[p DvRVJ3 Fg콯s ' +y.Y#d#έ 3O6҉>MhzuCzDIzƆ:}-B f蜨 4Ff&R>䤚M*QD1i fď)@*aw>M\NfYMz4dQhm<{2Y"o5ҩ'M<˧U6!XyM;GCFi\"dƽG v2Mi v_%?d^K] \BN(Zp%}i-ގ$-oYH=M(<3A#_\вѨ)I9TxIJf6y⹻mמKQoz<É!56=׳P.E#rGWrSH-KO0q>)m_J\שiҔ@S9~8Û-e$P[7W{"Rӏikf\+N YG6*+$2"j[ՀR0E?-.rv);;$"FafKn% */]K]NR`U(.o" -/$bɳNK>nە̒)ԮZxpWnwJ攒⼣lg˽贽K]D-56 m/;uQ""=I-륍O?E_$El(ӕsX!EԆ٭>L}nuឝKEepla(Mߖ T{2u,r0-)b<9;gfyP9eX? Yc(o[Rn>㭙?~r endstream endobj 255 0 obj << /Length1 1464 /Length2 6986 /Length3 0 /Length 7979 /Filter /FlateDecode >> stream xڍt4kۮ5DI;3{f0G-J j BDDAD ?I߿s:gYkw}빯a㖱[C0$7( P<@ 3#pDWD!HTPt AQ(EN{!^ *E1|=cٰ@""B\2PG A:@]Q'@\zpG(_-H7Q^^ooo+a/vD:t 0@ ׃!!Ph!P0[u8@OEIVn ?bcwu|a;G(@KQ@`!.8qtX~O( (Cx8!<G_yAݲV !xwڠݗfapo_#[O7^'TE ?>{( nA/7 A ` p# ^P@ ` w; cx DqE/[8?˫dg`?1YYO@  w.oǿ @u u{li#4(2Cl AF_]_=]\~~0=(]hQw5UABP٣8  ;"}ڎH?L{3\aPm8ד+3YA6'A4_6ϡ#XJP߄HT 9`fA0W% c,?*D65j4B B}6x3pp*o|_Z {&,WS^,+w-5esg}N鬓fnOL=?f!|V`.K+ZуMGԁ+ekߣL3oeB-m5e9"tMyka_b24.RVi:BTB73E"  _zf[+=#(%+Lm: 7f6vʉqxKNZq țb_R nk ;\\w1̖ġ((pHF/)Ɣ(:󠠛xI !(-Bp&,s%qkEM]HMI,י:Y ]FcGKԏrژ/, 32lQ e՚Ɂ=S'i!K(Ҹ[I}!1 CfN^EDj ʂҖL)0wKJNuA"pj"\rGC ,= %>J6%[j4oYP4u+4|5`H4'ia0r3r͸m;EswӜ7Oܦy*$KShH^H^8,{)(*'.e;I&Ng/#jK~ɩq`"dJW&a`oh'~6|vΘhc Ydu6&!|7RSv!lޔ8d v{kX C5@4o4J姖̼R3lw|T/1GToSX.p5آ\U-Y8[oABi8ETܮsWh5>}rSՙ(voǸ|c$6,Sɫ6#o_,4%ʡ `> zEJ85AlHHJҔ`㗫eFe0 kBuqD}_5)cMMQr;[(] מtSLq!j%/%f eR4l^5ɓB@,r1yc@ <|aa9dqS?Kua>]ܽ%!< or)9dKra}F)=<{k6ԈrY*䍱3sX-$ГOuW:< g}r$}]d`;KLʡ|v;y'rq S֡1aVJET&΀#6mr5մOo2ߥ"? Z|Ş FBC*]ݒT &=IY{_V O9&Y<FQd6 D7'oځ~Z0w^m%WDMnޭ1+<<fFs6-S P7h)B:J[t^CqFӱț>?>9>ˮ5#.EAlp0hDS3%O{RK"0-K)TtȾk؋Z3\!IWWPb'v5w >0 i bt8|&4Os&W 4ҽIF,sZD|V"cT.î}_E܋?hIPw]b uY'$1E'mP(gݹGƨ$xWw+Vus7gOJxb*al*n a SDF&~֎[J#Nm^dlo?YMa o+u6mfe큥jD9FSKab.B/m21u7abh=CRZψ:cnX?-κaъ l;S麞}o|ONq|B~(OhO_n旺 oF ԗ >ny%xD`{ &惒s#1@L7H6%۲o% 2hg~ y6iHu{ ([248l& lW6pyJ~l&YCg~Km/˜S霴?8]D ^}Z%Hp,l'aWw (^\Kgy3֫dc [̍ha!i3áoSa~7:J _ L̉O0_&3rYAf``q,0})BˎEq"r]t/VO׊A*m/i󃓦i9yc_ڞ5> u'H݅4☥Zq̀@:ɠ KI~)W,aRO]˯lأSl{iPzјƗ|+fѼZ W;EC^:4 ,zA v.@\~>~1&F?L/T~9\'4=(<4Q@mEg)54t XB܈Q#d0dTtO<9+V0#CI3+ * =b?:K׮YDTPjI"H:{mVz[qJ*;qf~]p qEc"k}Cq|U =7#hU\oI#"%F?k"nG7OeJc R ryb1ܳwF|{IǸbikFnmх1фU!z6{fMMOg;5§cSs"Aoә'*Z*B%\ o'K*fVV2*A8oӔwѿ<\݅_ Iڊ?4%Xev{"Sy=尷8w("_:(L!z4q{g,:7DAŌr4-Lx B_n9Fe@IOo Fr$>q`.Z ưpQ޽0ah{x3jS˥ je\- iBN$N|/cg̨!6*P}~_)C؋6:'CVs@?LU=~FYtot"|hlC䄘<џbDi-Y(`nGpV" kCA͝I7Z=GmFd#ŊR2aOIx wx;Yfԭm|vj?A"%g:+gSpItis6Wˉg/U_ք¿ZHqmǵʼn`I7U 1d,-:zG/N&Sa;.W(Ǿ8pmD#[% d0d^䕵dHOcb $;P\^z Rl95nFp4&|3q-u50B>8S=/En:'j-ioCυsc>Ylңk1Lɵ{Ga+lפhk#^O P`/MopXvHG=şN*ȀhsQ0ۏ\}'Kca!{H3-Z+D:_v:9j:Zx:x0˅ihvir$Lń7{JZ飳[asFnEjSx4&wG={ з~]S[ 4nc=L7|#Rd<Ri>BG綏CfuZG&4QXi zfqvKsy5ru::&|4F3{͙o7Ϟ^VMTs42.2O8|=t4?|FIQ/+˙Vɲ <]IgnV|s81_U|XV|p_RsJ`HKޙiEu1уI?ݩۢnPhʏLw& U9KmS}9itY|7jH(}KgЊ"z$~S5ƪ:cڡe~Fk\i {~.|bwH0H9ƿq1Ia8u [_ө>QX ˉ"ƦnPsYR>`8ƍ!n'w¹im-1-б8$Z.;Y5[ZD߼[y{ScԸXcXhq,o%pj!NgAm zg[|7/o^%|߷fqvk{ZcvVeщĐ3 -qޞOȮTju.}g;TF)q?I+[ГJ8Jd۳anƮ|5EwR*rܜ>L'H`7ӏ^:m)qh"G3"9e|g%z}T>hN!ua+}#Cb|o]KWrW0^FW%))"*G8^GV4? HO5^_z^%\sWXFrC>(0(E~$CC4qvs]fͲbZ-m*Ww0Z4(yx9KW{+͋)u^ܖ)z6 HNj:M`WFr[]F6H =iض U%އ[2>fo KU8u}7.^÷^eqJB庘TfI#M 8O21|HM=[nvm S&հJja;}Wav<~*Hym6`MJB}#ClLN jMɶs$2SÏeo%JKK qZ6aV@&UYjFp{raYH|ZfW5c=ƥsz$eQ,%lr,&bˋW_%3AN]c:hIS); BnyDߢ|x endstream endobj 257 0 obj << /Length1 1705 /Length2 12258 /Length3 0 /Length 13354 /Filter /FlateDecode >> stream xڍP k݂www'8 'hpww n#szjfݻmW %* PfdebɫXXؙXXؐ()լH@'g+{߿bN@cLƓd\lV.>Vn> N|qcW+3<@tFwp@cJ `f bt25@ƶU{S+ \X|nnnLvLNinV`K  40@WfLH5K+`7c' M`ke 9ỲNUi9Y/XXq@9<@s+[ @QB f :ۿ[1@BD`9:Y9lH7oU2HO hVv:kwy ̭@f$artJMy!Wf8YXXy@GԒj?2rw%2 y9`'׿XYfV` _ob_NV]c6^f [/_wx1r8Y S$Tˣ4WoO+C  o wX8YL߾X?/&/o/$bkOo(Bm9@ kfV.vW+ 6~[?err)YM-tͽdlc`|kѽ-ۃ֫?U}ߐ@f,'of@?G;!Q..7Y쿈,0xߘ 7Xpx̦ 7b}sf _l/fo/vXvok | d/_ͳӿg Ru/d{'89W.[|@w)¬)u]p]7Ɲ1)TZFvIkN7"Ih[hIZ}d2ӊ4?HQMx[# e {<;^Ij.Y䧲Ih(i\<280#ƹ;FWxz$hB/uϕ 56N| |<"k */d9yBleF4}j+HPSOBvN C?&,C'2EVHLp- h\tF:pw0myqep64`VfP+'K݈%t2(T&P a5 8D+BuEr3"Ƨ\c}} C?5KGy%'PO]sWc Ae8L$r Ғ=;sUzLqʤǑ ?EBzyo7oE 5+Ec6Ըs?wgw:+IDBn 5Ţj >lv=1ISR.y/ϋ |ngkWxCMn>ؤqB AU.sgnrttxb˶RmOE:jM&*N._ `|WMLxϾS9}ˡJnx+=款 4eR^^>[b$Ջk /qV8_:1SmR[iYpWrH8\LGT2c},uh"˔FJCE3uNi`EIgح~|[/KBZN4V"nWc%kB8xÿn7-TB[1z?ԎڿQ)5-*.ds'q$3`ͪSTP )KBv=?eo叉Al 6}5@᳐0~ݩ._{d3ҟ\" `<9U)TMu] !Om6'Ko^ۊr3vذV ET?z4gB+ *M(YRa~Yl~ݓiN-XCVUTyW L,K$6Ӗk,H. !""Ke>W fPDO^sv*E}0c[~˿<֠E z˜ !qAALe*/?7.٧ mWW"m}9Y* ̼h(Ϟm̲%+|ܳ3 fVvLv9 ;"`2h"^XOF!y탽_$ {7'Ѓ(&nxxuy *Q5 :O]$6Ù0 \ bp(Dޥf<ìs[ ?V5y!S,졓_a.2(RE LSN AWlso13̗7 *UTW.[@6{TSDV;O0v^;L7Ҙ㫗)٠T(꺆:c `NZ^1PZm%F j-'4f!( ZF.&Yn/gx+ReDҹMj7H:_aɸ@=)uLnmnǗ߬~Nv"IXW 5hV!st,axYdR11H/\S&M?3]\CRMt:fT[w-x{<=J\H6 D=²C N!A^]υhA!%/Y-#!qH j {^dCUڋT|A$It%eoH |pZiX7L6Nd0 ]FG̞Aq)<-gl'@d]չlRm{\h'%<ӍM!U^aNa ̀L@B-2+JR-)z,S|s@_/7}גӏ$K+'I4՟}n{ (GH:"^GcH #.7e]s/#Q,.QY p = t]Dj\͟+M4"^uWgZI]t(.T$4:^p>V2Jo\zeKQƪwB{nF{P+m67 Ui a$0NYmI / ziVa:J~vc UoYx"NzVZ҅P2a5=y񹖵n(~׼̂ג衤R_Lh`ERmf[L\$pMʥ¿{e}xC H/6zь^zE,vqYw_.{x jZn_t7#?8{H$YqIw6x[wR{obskՎo;UЗoaN{v9|~EYFE?Q"t"Ќ&;F>ewtxku)gc=T7(玺{  sIeѽz_m+Sy4yāQng#GѷnӕeB][ >%`>+m(/ugٓ!F/#yN\YZoĹ|șHzXi.zkiq!ŦQ"u4/}A׸о.#UmaB8c4)P\Jn/Pf6|{"G^i Л1>'d: !YR~߹M\@{fBD5 /|7GK+"uBk*6g%*W=t_7Ƿ=~fr {8/ͥz`o -P+u+new5fCswK1(PPcZF*(wI_JM'R;8SxEWZam\ל h0oo]bW5P`$<3 (4]} l잾9goCjhopJwEAgyGRk%4 K ϢqI#둤-||0|8SK'3ՠG5pƮ1-a=PrV2D).5I03bqo̚z;q0E8IZ;v[y< jas+7M3߼lƮ[,v\W?~Vެi˓Lr=q%%"=70Úu?]d%sDƵA[ȯ$ո ԧto˫]Z|0KB7뵈' ˢwA]eYd=jm+&}pK4ut(7}Z숨/[!X N=ڞTN)"fb|\zö#ts+;JU"eA8#ǥpO5$1>)y3BR@eww`x`/|qˬm"˨s؇KUJPp'sMYAPAE8VѾYSɬ@to.e_Ā wOjY<2 J߬oKP/jKnĬT﷦`"X@oNjYm{6#j:wR1Dxƭ^Vb4s%CxT1$h5\]@;̓ 8% 58GP;W`WhLVt 齃؜ Eb{ 7Q/ÈBjeQ|? [VL`bxJKj}e\M-<lN>>Km$"Y ApI[(n7H_hF ^,6Ar'T?0van3`9_pVyـ\۩= ۢbdB1eh N^|C0&.%~_IzjmJ ~H]喒b,H3S,b,/Hڷtwmh*\)r)f\-b+|RMc'p|p<"NԴ1+JU%XWK$rhZTv!N Խ߳;b")]gRkED'Ԩ=2 W]Hvz/~pK(u˃yϼe*^C/61_Q#rax )Dts\x$S#%87OBPZ^p) FfMAL{"$3Ag{HRߒ8dHuN{Xr;*0Q:5}3 F J̺_*(\cOLf9PݩEvXWo5t`[՘Ҟu}Mb_2FoWy)`mY ['$ND0jrs_! ( WTSGdu9@'U0Eokwb׳6I'uZVyW>'lm]uk.|6H1QWƪ Yޯ- npN׽|zjݸP'uzvɣxF>$ >f|NSƔAabE'8`Yv飦S#"C%Jo0w :3 $+OaJ#D؅ںҺ{.>xA[a?Mjϰ?)qsN1Ʊ.Ҍ^QzV&+d ?Uoď# ̳f&q_y}[+U 0PpA)_!AՈ/3G;wQ5%I#1W 0pciJR5~59aQ!룟UTLqDB)xf6}rr&.6 Ѧ~*xfy?acJ[Fh`dQjy;#l1ȓ|Xbfę?W{ 9KG6tI]+q}ll+o,Fa_꾄{wŤZakƁo/sc4+ h:˖Q0Zǁ<^L$Y$NDB7^ݎbsN2o*-?|#w-Оߥ&CfQH,yx2}2ixI; >kgB:v=_'x 5d$/G33! K?-E{M'_aRTã&vCm$[cHPvy֤Q0b d\mJU>„JZ ĥB|Ryv"]CMkԴV: !N=Ǧw1xij 17yL*xĝHPHls!-󓟹DVՐBℝY1;_[_daqclC/l}n.H˼MtPBX:}a0ʤCbJvX~)Fhfwqm?GaZ\Tis|x(oߝy F{v=iL #W4(ZyŷZO,rMI6&zR ‡=, ,Ė#KQkiսTnH]mqK._VHBc̅-qP{[ v@nL}deNW XLj`XB! mfhSIh>2E_ ?C] zie G9Haχ~ &$`p2K. %\j]Ϙ }-f*Ě7Rz(ِb$eV~1$qjEZ)[WiۻZwr^AD2:]7 ZQkvOI³e~kN/aj2j{AV+1~IGPu~3v?"6Ԑ>/κZ?_~{ڗY?^tMv '< =Av)g@>a!Zɒva@=Qï7.ywLL^ EcFLwFxp &H2cӵ`9ĜZuŦ>awKvi´ѵ4f^&z ^o7wiܷf#w_BaL"k]DIm`qԝI]ǹkgq"D>S/:afpЊ Y?|G_(L]Yr>m4* nI% UۣRUh] }49w}TG70 v Svwɼf( TRP؎W ۦy%g$O&̸U;nn2 !BHfz&4 8VEz(otcm/!rα(lݑgإ);cǣ;<#7#x{ʁM܌qx%AŸwwL( |fku)Ys~_crCyR!|Uk~9G^TPszjI BC^<,^Xr6DL I;)f*N#]ZI/8𮘆_SڝR;@>luՕw}HVg~ZĝwEB2`뜻kg[l5CUxsaZnk Dj!ڑ C<|7m,N.1ۘgc ^Q/{\E$s=$'WpQUVNtSl^|dFc\8CbkKm#u2_1593=Z hc^%6ȹ0W[( R,!9)n_3'ɠ"@n >vO\MX'UrTӇ^ꕼkRF^"(q| eEyҐhۋA#;s ǽ#O`lr:xywy-:G˺Io<]#>F>\=fzyG !gIHN#2x.m-s#H//C@ibZ+O"ktNؗ֯ߩblM=t)cj-jӔ6g4.7ZNshyبkYwS)ͳQR ^`ֆg ljU1Y\ XfY,n^wI v4 ڡާ0uq?&g,^i53kNLtTu>Bs8R6THdhm}n7eof`(fV50%WrzߎS$ GҪg2_dەhKOM$B4>`/4s4e&&O:׿W@R+&X1v?vyZ4.D.wX)d R򾺟Z g[߂C+>hNS0`sJg%&yؓ  $Z~.7¥o)bB}0A|uY3t0LoOh:y(/$)O \-0:jƾ^V9:]ձ lh6 &3+Z'rO!yJ?$=-sht|PG9x6f)#Il°;yCR1;z!OIXj!߫lG]僣ޜ{wߐ* UÀ%{̙ }mpIT H³2^GBCqQFbepMz~cj0-^>RҬ}4yz/Rg0WTJ3>؇u3njL&Jcj71Kٕ_'%g>߻K`O9޴}б5"zu`:Jsd5f` kJ|nX\(6 .t9y &6zU6GB@M2sʝ| CD=^ -D4-~8U.!>V"fCF V*L۸'4?W׫^F2Jv$nCc/Cݲ$%deI\q8ȑԄEFfQ)ށj9b;F֔ <,CγO;nFrרķyy,'V\9KJ:*:ӊsePEzgXz}tOU}Yy0,i_9B!yB#EN9C5T܌ u`هMu@hޖ\r6[`)QA `'q,<06ޣuu>U%k'xL3ߤais#<⓱ Pv$zF$ȨWVD؟R|\O8|TpXcO_>)9f`V'fRيp?XO%@Q͚|ƒ;ZUM/ endstream endobj 259 0 obj << /Length1 2634 /Length2 19440 /Length3 0 /Length 20932 /Filter /FlateDecode >> stream xڌt  ilkb69mض8iҘLnkdJRe5FQS{c #+ @\A OInbG O tr@ hIr6Vv++7 N| #7KS@ O)ndin Z+//7_Q[@h hbdP7xFŁݝ֙\nbP:܀_lWO Pt[fon6&@;g) P(96ۀOoL/g#{[#;OK;s $%03ehdl7r312@JT`*M,\-m~eI;Sq{[[3$,&{2=Yk;{w;ٯ"L]5,]De@' 7/zX0Wtd%U`04{;.N@_?ESK17;H 4da+߿@ejog2kȼTubboFv#'+/˿FPw 柋7=hߛb`[_,orKMGmdkih]]@W` k%+M-]mVtv6Yhlbb o zK;g @fb z8f :37uwl\#''#OxzqrYAj kLv. <_rqEF\f߈,%~#^俈,#6o`8r((oE7/Fj(okF~#P</Hg23@0v22^8f. j'ppkiM 2ښ9[!Z?e\x]AKd`t /o2_N 4g *?KR@= r]zP9G *DzgH;pPǠr`?H{2+ƿKh45O\_CT A9AE:m-lnD z=y6.VPÂ.N?0w?@@;D;o<8M\@pZ~@E{:QwƽI9ʽw鴌NݮȰ)YAN)k;47"+$/?ڛ`;T:| Tg:NcOm"#dTyq lstAV.whX[Sٯz\1X:OoKHev=wD.8[{-akJ͹O}|[0Ugɻxi`7f@ǐd}kgoVF1k@Y{91}BU:' N6."|k[zzOz\DOwW Y*Pm1sc9 y09 yT,J2l<9vAu[yHmPI~(4qS{Tƥ j[1kfo_I +S%o[60Psa?Ƞg`A~S'Wj3H=r`8Ďtnz( BwܩY% [sP$)\І F(Y ʒ+9u~3w96޴Zw MJ?BʵU~܉b6t0[@ĹzFz1 RTB X61xjB`Y2/({_X% ;bP{p6g=~ 5/WYn#=j,2,cmOb" $y4Vbd:L$QW6uz0e>W;}rdEZG$$LgFqp;CS y-7#݉fgu:q3#eEUԃnbt͜DW&@ _ODc3XԦ$FajCp 3T}; }*ɟVXF^1&ufN bo2r4aoIOfqFѫDF!hͼV׬G.h8xbM76]>#mȶKDT]FUr!D О>ުA1\M9cibiqVw8_0#K)_E9D^s$v1 &H sf-fw=R&5G^dG K okΟˍjp $΋ӷ@ɴP3#ׇ]iat~YdɻE#` [˟R="ÜTʑ"z.fqOkAgn-8:*ʈd!7XQ qZ#pogΖBH{ʺn͑kh]T;CJa|kwivs]0mk6cpl/I[W7\(oUGfrY*|у')lf7 >˝hmGC0RhN N4ߜ[V%J?Lړ Kh8Yj:n)cܾM6oWjIޤ%|ܬI6ºN1;fhMBSS3ũQFXTݙH'Z}pZggI&řh& &!,!pv^v=aeufS^#anͭl-\&؊]/=2HnIΐO:搽q˷?=' bh)N˥ b qQQg> x'w@cRMA =D ٛʖ'ǩ~PE-&B.idV?{:jiAl\zLq v}>RbJNt$cc~):[\',K\ "YZPaGi)i*xrf<]<! S u#a.o2N2ղ J\ԛx[Sh6$a!aJqW=Ɣsh1vҴ5j|]FW뵴&Py 6$!i,wThTZLtPzh>QLPe'#o^PXT~:M_ν}aDA£qHt]QBQ Tysq䰍9,0՘cNI3^CoƭaoA<"Tq6X'Jc#.& y, 5' W< ~rV}~5fpVD˖Ks66j/+knԩ1q!iVRkKBw*W7FMۋhB#:]Vy)trޫmD88,XLrh o%Ȍ SeY\GyiessW`aƚFӑʝnY9_F4vy ~"*nqBJ+WtLp37O'a;cƪZw0oga$afo$Dnp *.=&jH7w2Tmw>T΃ѓ5\ILuvChBLcIJ Bِw;+ " GP =e{ữu(L%Կk/> X n%Y(1HAt8zo-~Dh usu)r5>+(ن fNPD}J؊[8朂'=&i=_Wr$V\xpP}sec%B#{*?B| oMXT`lj)Wn2cl;q3J-&"X ̪+R`i3sZ;@=֤ <̈0;˥A٨tR$ˆm0g~~VYo5$oϿ2Rk^kEbEF,Rfu!3sFj PkesF0DAt$(Kqk2X;LV]qnrD:ȞKv?uAC#Yiw T($31$O6n/Qhd*^e`Xr\icMknvq(o:sg1}C F_n01~ C 륹eSYT;nᢞH62sj>lIR1vX|7Vw~)ǗE? vl(>ꅙʋѸ,HѡRa<)Tx+(3άvpw![]QS> t%aGG1/'! 8~vgK;U[]ԉB=VMhA!3ͺ+n⼈'XybT}s!?ARnl0#&({M|b'K Vssg9}qykdVP%.,yˤ+ m2tYF߮AD4#_C`ti8RȰ<);EH%KqIZ6j.+<-A;ls˼̄͗&ws^>M; ;ft!\X&5+iYn5t{ (_"RY4 J-Åw B@Zzʐ7qX Єu|b\]=)rO{\]dx0o:3+1 c"SD^ŏ}62Dyg@q(["VɊrryg:~fnebnV3oHTk+t;L2ZhɥыO8lb^nPgzG#z&3!Mtc5{ ,]awK^^vh—3t]./Q9Ů|Znc:r1he(W].qCxD@MR6$Ipȍw\(72Tq܉4M5~97AgVA0`k_g(w2N ZSosIcߵ 3ha#rַBpm3N+ fA4B;1i/taރ]0MN =EW+&3Mrn %02?jYL9ԩeZOgpƕ%kBځ`]|:~uC7Ø{EMƺ7; nw*Я%_=Y;X|4 M5)WT k<*,&E>pF"#;|j=/X<5:(f1DWLvMs1hof,*W(atn=YnAJ[pLTF ^s JGԶJבzl(s<〃Z4LexcC#|$/FOuK2CSCmi~Sِ+ n:!˚M4Sh0XaOkF -(Jt=#XLTvX6ae ma+iB=@M=Z~Aq^D:[l?ȶ$ouΘP'$vH,p }Hq~`y5'DL R :;vZlTG+-:%29b"ѧFUS Δ*ҽQsBCdt{қo{?")Ύub5 T {Ts9 ׽]ɕNq$*;UpJߑmh `r! )P# g*lwߊNYl:%%b`ŝ.ꮈUP w1dz5@bx'؊k|moUqISQf5G R6p)ޣD"Lc*ԘµLay;IYgOy ɫ#lW(F$2pRh+mۅQhk}OЖiKϰ5?p&At?})䧳0Tq;x9%~)๥jo4M63Z3Q;R'C i&"9\a/)-CJsn")QS҃w?OEi2;-X> > _|a3͒bVJ; mc0zoEB@ZG kCE׏|Ŋ8X9E"ƻ0tCM5&]/ rSRLY5r<;tU_W$/1TNPž&bۓk7Cl%jZoyM Sq;b&Dm#3 ϛGx4[@ك `k=@0y%:x7#oܬAI(/퇎Ň7N32ѣq/Q:"[Owк @nqfu!|y/2.F./ʂu~TA@ w t#;?Fx8 ae-ԜV2UW; 1J \ܛ'D@XZBjs/+0Aשr@׻ kpW:f(/fwx ?i5lcȣ'SK~#z78#-`'4V!z޲h0 T |ZX=cS{gէJXm.%ބG^ nҶ#}mgu Z!n|pixkd`?;wHTΛ%''C{3=O}S7gĄ803ы::Z8-d"&n5ad]3O0wFR! rӄ?\ܾ5ѩXP2+ə`~ 0 BWPcj? 0/!-*4U̕[u%.鈼a*{Ʉ6Y<b2z}*r}x!"^2HALW=A6ÑDD/Kt7]b0ӮE_/i~g 6BZܷ[]PA.H4}H*!6p}]=Y~?MVc i%Ǣs0.A I?K.-U9VM~Lz V׶BdTkOIi:ʲÊ%/Cn~ lms5Ehסa[=P{nΒ)S>w@aqZqDq!7-)0QAU *S~)T㖅QdDA`rjj&jĦӗoW eHFlüZ~+O9ʵ^_Kyq\٫-&N=P53-NXZ锦oCv7ڏwWpŲ_dJ\ !&?v+ygw:/B l1"/s4(2lpA( ߶nkJ$T(/uL5P [F!aVÏUKK-)R(Lls 17i3 8dq)E]cqpD]Д1FFi DMW09úwB/ilz] .};ǐilyAVFj~1 Bi>'vk^K5/[–[O`с}˖;ގC?ll 'aLM쪭w(iqĚBzj50Ii1嶴Qn=\)6dgQup]s`޾;+k|eMÔj*WBd"$hQ.B8HjR-w=woy0]׸Uo4ʅxA2Tdh=5*L5y-7 %;1;Q~7^wH3WA ճ30?;]{>v+wP%o<ήf<}S(!@؞>{Re}rp>GWLS*rx&YHnAڥ_\۳¬RznDL cKSz[XЙk\To=͎<w[cf(Ig~$IWcQ)$!%Ъx(a[9)Af0r-^Դʣ'BY{koXA’\C:=)OAxZmTB`{Caiv(R+~!=uq25%3q!eaăM|:ZO*Efl= 2533YTf}~.7i$AN"ʎe?lL8l,0vBG‰0ΰlM"s!ЄV5jՆ䉇FJ|~4{kSX OuO:CYER 9hx K-4}1tٗb= @ P_x5l"QW9p6|8nyK\wO\Yl+Ei՜߭^Yi܌~LW@Yv间ު䉭k*;2 ȼG丰Ei: uT얓Nn)ܔ,6DU^>hys['+| /ׄ9CHw 9vB .wʸN#j8סz_lB?W9γNx E0Q/*[VH 9z}0!UnPKΚ",aky9Sp!9W̬#ϧ\Cljѳ#u'R`RQă4z!ф6x'zH OkLl s41qA,E)ίә'@Gq<'n}#oss;,4]%z^NK/iW;w*~ GLWbEddY7z_T [i ˆQ@?bh0k7ؠ>8H+I7 Z lTMKsn -8ǜ۷H T@!E0 iUZd-AMR4B2ts5 w`WGϥDO&3Y8U;#Vu@y^)D ~he7B{]b^=9"!B_`_ DȢcc*R#v|<>X*(yv _?Y䃷*R<*L!9-2ΐ X6癵dso EĶ~ȣ&s؃' ]@e9*J緯ZCtt^l%#_K!_|=N4%/i zi21RM\C  y5gQKtaOĢ#s8 M嵠HObnye}XrHq٣pb$ V-><4yḓ)|p y;ILB_]%Ng@]KYv_snӓoZ7 [i=a ~ێE/.EݭwKwDFDOwo觍];3ny_s!_irzK]%5(ՠ)GK[GUjj_wEA]q顎 ΪJ50/拲(ɥٷxꤦ|<vc᎖}HȵUG`Ͽ3`&؏[GTk4>2y3_\U2`w3%IrH<*q Ƀ~RF5rZOKS7Z3o&LSv5%TX~۱IH ꋇ5RϦV"%^rX}쪥 U}<$u| >EΒ;`5BE"!LFp=Øl :Vh7ׁMnjn x*Uű|Y%'Y[2wȴg̀X EB|K2:9m$!Ok/hk#7  |LDϜ3Z_SrF"޲MY%5)K3[g(å''J9wkG|H8SW]6f#|(< ُOD!yIIM)?OSyRSԍuAyӣ۠cmՊo6?wJn}e<D%%m,.]NX̓#;0|V)&=9T>kɉL FT+nAW_g$Mo-n&^>-@]*65eIS0#2^xJjc n!r(ϟ3=4fcDK V}#k,[>s]SBIa]c1+MY^PW~] Z*KvPTD4 | Y RU1ep6KE,K+[P`>DSZ` os^pzfG ʸ;D;JG-z +r6*9`11O2?%;<@UNƎ |Y7;/8x\Lwo#+ RN!k6`^E4(پw"("Jg@j?=Io{2v'Di?t+ߟQ,wfy5x\(mN]G c7 cuOٞtT% QǧdUƓ}}d*0H|'6ޓ&N3?6vg 5]"t_Ƹ[Y$X?? Q@lܤrɈGV]':}E ?C ka0ހx7|k%ʹ</wC̢ДKԝs&W@;JRRybF;6Fsc,[rn;>gwӡjtt-[&$ǧ^.RߒU<̈́qO"K߻,Kz,}JqϠXVe69Ǔ{v47X~n#Ҽ Q|zJVX kb4dО)"b#K0@ ]H˛d xt ,nC5+ѻNX_)y@[@X!u?a2T)Q@WPKVwmw%rt&;fK98E`^/dq >H-#)_ g'g8,Qsl Gª]Δ2|ūO :elq]Sv?-6n$@pN֔%F׳]F$<8R]GUel0 { Qgک=&@I+)Dn {w_GmɝS<'lz Heq# ͎ڕ{Q\̼Xf$ﯯkeRpC{۩^q6Enso6e VtްVǪHb4lcmT|\8MH$P?;z8Hwe!tj_'\Pg+#H],=zSU  %''+lgxt]FpCnҋҼbs}(9ȡ2M6-SJg5)? kG@xjd714Zff&"XӶux(WÌI+lpu˞+٨ Yp]D aԣwF, ”@ꡎІy1|T]N\@= yS/|%}#( spL#*>=L!nQNpq;azQ ?c1jCϫVEzYYSl'1R^Eף`Vo4F;Ʊv(8T3rJÚ:k_Zߤ}Mo]xm$)siu&{JC[-(|+ =k Ǜ4<d0g=5Cv-~eH'JpY|)u !LT۪e`Bń 4aQEAVԽ1Wmρ F U:vrk{HGC̗zOtC2Pvj|*^Pkϥ&xDsD,1zg,EFď<\SfXth[51h>rA%Jxͺ΋"%`#Ln\Wǘ'UijeRx}83"L:(Rj/)Ὅ1_-@1ݥcz*j`3*KSQyӟa-T [Yƍg]~ .͏+,:cySr&nTY"9N6"y/ Lri>xy,H&&m-q95dQSmD;]R=,T $mj±#~\wLŐn a6uIo4rrPcIk6=w#}prl}S %AVV@AjϾeHњ,4~w :+c`Δ|n"/}W m"jLKrȍnuu%WY=1F1D1BT'ȃ3m)%Mxd9̾$wW@މL%{ 3 jƎ~OúneĆPXIn4/(!w 6@RvpOK5vDZ> nŒ [ޯyNVRM%y9f߂*M4yڹUW MQG|68]LSg!5j ۦE9|z53i&S9A JByh:(qFT9EJ_S´ȳ幜JbhwdM~)}+VT7Ne|.lzTHמv :g1U;|:m р?؟ՀF)$$Lӄd|-O_HPp{UƎU?<Є;9a^d,TWjK,|R lcEv]:oQ3(F>DtaEڲ߻C̗(E:+ɂFIy SE.W']>u; &?,t3jY@☰H?fyMX],"*:]sUm5)MPKC;n9>F9FqƋvw`F .TYg<[_y% 8U&izo_r+`]rpBAjUd*Jo{}λhlrSS/3ShF\4)ɂ3ڭJ$Q NEqEjnaQ]wȘC^Q$7Sӂ/7irNhA "-3.y /IL}J0aɇQYT(^-@פ u =ke#X\[ˈ"۔Sn#ș$%l#絿E3<0}3nyN9Ƭf /R@19D|#"knS Me`Hl]P"eڏc1ݪ d{H endstream endobj 261 0 obj << /Length1 1410 /Length2 6285 /Length3 0 /Length 7240 /Filter /FlateDecode >> stream xڍtTk/]%)=Hw " !HHt H(ߨ;kݻf<ٿ1@0(/( P"`c3#!?Z6#A%]DtH Pw$P\RP $((# . Pt0(As쑨*\8p, 'TEkKf !==,) oqH{>l-@ ?j-5@Bm@p6@M q j@~? lim srzv[0QGz yP_ of XZ~7n PXa ;#0B_iPQ99Hp5=~ sz9ۂ6 ظ: <]\AjyTفQAAAq yX Jn mF sآ | 7 @]Ao؀+J(5<0Dd hkkiI^ qY7Z]K_ 'uwp a(5&eQv@~[9bW$j#`П%ـ]۪Dm%`.im@tag/j׬QO 5&j]R j sBbK8ғ5x$ ~( lap_ @1Q@ V+߼@5{A 54ZCJ9zwa ')\|޳ b$K_֔8e瘮56&5]\Ym4|yMPv(M-n.ř{GMw`fƝqQlo2hXp|x$'#L<B1S^ eBvZVZcFc1vowgS-C+N-N m3OsvINZLJȨFB̃/Kj?: [x5EסXMJ BLj3nr@frm}/ܣ]M=BZR3_JRf!Rn5SEq fq|t0uߕ WWup+x`_LmGp.EJ9}+jF K vt9<hΤD^e"s.kyAQΒt kq%H "{Bx)A<6fAL],默ؤq:B8(>35-?f| 7_{;e=(jeX rÒi8Ҥ;]qRHb#}QrFs,0aTArg4Ph5+dhC.ਐxNKXER__3$͌ )s lbL O-߲Wӈ/:%}]WЄAД(&rVݓEhwqe-,4 ⹤|;Ɯd0kw_rӆ5Q\;gy*ePqv ֤=7o}l]' ǯWҶ4@XLra6H5jQ k/>=U0Df ?kIh[-N1-kY]%qK(g#J_76M&~ۼZ7o*e>!H/x|5qCB2i4&MRͯFI9y}f:T2 2Q.;JUOQ.rJN[wc 7tvV 6OeJ':`Myc 9ZH})Q!J 4{DТ,/ % =M V(XDӁ/DhuU,3Y[¿vPmv\bV6sRk9HSreĂ. ̅lTѮw 歳xNbnd z^Գ9}F?Z >L4:c͹<a.-tdՓ=|SµdǮu,`rwwpWeto{iwL,VE1~l X}͢ѥx~۝?-7|KrW"=Ha!.̘qWq@u#(Z\w-ޛ+,v͊Yif#Q;ptKF|YHet @#>}ڀY4x1RM/;r"HU`QSE^9]a j4ݴ$;ӈ$H2T(`{D]Z%4X^EђA6.Wqv-ꙥT.GYo^9{V),jZ~x#x+J3.h[(n쀳} dQrp7HSIEhz>YWĒt{\p2i"Skֻ&}&:g'](f0JMyZu``>7B1*t +@dLݔũnc> nL0+,\ht=OElYLA$qnvf2hv*2!-ٝ%\AQR>n!Z4gY'YxJyĚ-밮1,hviQǠ?*CF"뒬3-YwzG-,7E^ڜYÝ%8pJ^?RHr+-gQZ!/O\ZO2&j`.6+yOHjkP{xdKփCyw'4҉FyKt> OV_%4v߻G?{Mw:nOG(}+e8[:,|σ \4nыYDޥ޶E޸(S>C:#-EMvn{{Hr&4Jq_n.MM=#֛ORj/~^=Q&A:Waic I`|&IJaؽ1ȅCo:f\~m"v.T'COq6!p(mXY) JM@Hp:o5o= xnmLT^y3 %;f4*]q^y(;%_|q2ya 2OWA~햁i'q46]F{С{7KXU Z<]Y=9TMa=rT$7C0hga=#'M"0aѰv̳ ZWG1]QP|j9W- ׯ"~*ӯCMV^[=#鿵cADޅ.c ;+tcr8Z>2rFCQ68b_L'@~Xqһe*tTIgq+G?x<"ku:is-" >=-$=jCfZ>ބ0fN,0Ccum>~HZzU2L(ΣolPw 5fzU[EYFP$:RѰRM9> xҒ,r0H\ G_mib秄?{(w<9NxQDx~VM0wXw59R3$_ݴYiFU*ثg!VL%Yy׏ŷ?Fo . .IۨVoߘ%V>3X@]YH;TiڠIf_-g97/ >%y +զ2$+g+%M./ua0/k B囮TJub[f|M6?'ˀ8~jU >Fw*P͢D4ҫҺ٫{u[ 9uZu~ 'F#tw]WX19(H40<OS "(HKd$3w;)^M y_=,l{lǚU͕&YX]BoW õ&ձE)loԺ=Go5c2뭢u]wWcko6}9${;D6!iX6D˂=pY  T݊E& endstream endobj 263 0 obj << /Length1 1855 /Length2 12675 /Length3 0 /Length 13832 /Filter /FlateDecode >> stream xڍPҀ]w'u ];%;\߫{5P*( lmx²2,&&V&&x ?rx 5#ֆ_@Cwӻ @ `aab01qց b22lm¶v 3s860sssy h td ́ ʶ 3wradtuue0vdu0J@G G9Ckߥ1STA)mM\ wh~xPm2ˀws u?lkRtbg6@ b<*"]0BZL$Db)}#,K%tࠍC$;C|iI/QܧXj@?j#Qe&%>&mMm̋B 2z2x]ht]Oq0y.폊ʇZbpkG l}[iY$k 9yO,Zg+܍M!nT́y'nioa,OI ?VM8gIȇMw!gwme< N+ N*v}8K{}ߔ>zje>!y/K04IJW+JW[ץ׸܊lB[(r%ElRw-E Gi|HB9 x4r#9Voe ev $ fr配*xɀ=m _5l(σͅ~ }0#jus1!LRCӅOZ5gaKH CF+( \Fʣ/ֹ@.̂6oܕgwҁwuf~}p@Hb#XB r)aZ<,=:aBx.3E=I3$j^QTt}!qGd8wR[%LmfT_<>Qz5x#}b-d{"ye01q1 lͦ0WW8GAΚzIҨ% SoʹyNu:[%n^Oބ0\Ͼ̢gԜK:b$rH{,0V#ZGn.VwRFZF0dV,@Z:}h:?. T!hILpƶC D\iefϠ]x[IhHe L,/]l4EɞWe =~C$َ؟4b$6ZoD53!,<&C2gӱ oF"f 8Xu7ݫauP5qː^w<ٕ&-ɟ[ Wb$*1T < ~ĵ4D6_Fd-RK3QT*cYnA.t$Qq5f4ձ} oD[TS@E{\q]h:kE^.YsTz\"=+eD yZ fXt.8 oE]^,5m&O" ]Hrr8} 풿R9&xiG5_Vw jE*:4EChyuCca5O<﬚ `!^mJ7 ^0'Hs|΋ g͐-4m"a>p cu`h eA~ţmgkXR Ri !G$,@C᥎k G$3l7ޏ4dJt] [PnGӈ8ZK=`9AYC)VWu pGBxף`UczK噲YHb3eEF3r],<]*bMBS I$V8k# ']~ Cõ!u,D+IO/`+9n .]t7Ćb+TDi}yɝ>N h$Ө97k;۲>UJ KPP\4W|ډk_F9 BoSk_B&PWƀF5lok*x/˝guѬ_*ӦIUԹz@+5%gJ =cZun"o@+ƻGo~H"ʜx*w!$n-c%E_p^܌ :K}0ee2ʇ l zI݊EoV>) v'{*[J? 2%=u2)dp" I g%!`ed)JQp)}9} e4Kנsqv},Z(b}`!(}NxTdNIG, c m֜"xkL&њ|ݦ0*DP) 9*i"j4kGY CRVRsaGfrVc^rN&62D+c l;-X"wmbKd}.Tu;,WY>`k$fu.3<کY_}: w3k vuBbޡ?2q~$ WWH%qOws&nݶIUp07 LJ7vz$PVJZoX0Ϸ٠2͗=و,%a#.~ ñ+M}\1 /R(j 6)3̓uӥ 7[0ޑA6/~x+Ⱥ0Y0Ï-tH¬2ߍwܔ9j9=FRi %#@*$/"tt#ܭN1Y&8her+!\IjΕH$!!/h-KO;!^n4 X6>KizQfР[if=Tri%}®Z6Rô8Sa2e?@>aO]ySyy7B]NΌXLUr9k-v")mHg]X2*7݌+5s"X(m&d#:=L~cz+Ay}YНX-8}6i78V;W1Hr79n‘ !3Ͷhe,+DQXjcO7+)S,\lpM~{[ae\x]ԛӨTR2o5^ oTWAtn}FUꀶ-+ utEEBWƫ"ؽfCJJm9A,,(B @3h?-兘A e&'Pb{ᾔ8/U?\< OzARO YGòhHZuT)#EaT z8+` ސM&Q;wAN9M1e޸g=vbW!U)$Żow#{ :yo{Fn)WX.llJUB#ķ*O USyԃq AFcdc KA`\[6,R!1pr\wȚ, ze v7,e:7zAҾTГ;Y5: Xo `&k!"R ]e\.HJJwMsbDlXv&f(Fuԟ``!Z[xcSxjbK bJZUuWN-m?iSt&{2.PPWN|.e.[OYk~3"!|a)vO|ܓQ~njg4X?Gנؽ9+eac/wx`džgHpښtö*8Né8EIe&-+G_w}8Z0;c-RWi {f'H9ӪT=Z[C54m5,mYbf=Lolk< H3/nu>Pz&lLF>F1pJ8S8KSƁW#Ɍ՞!-%liy|8{h'@b$9+uD=m1 ~n4qPEJ(Dqie&cWVڣz)V.TAϨ-t <骓tݔnxqV!#da=gob܏VۮTS\mQLW!G>"ZJ/!fa!n3>GGY遣$rK?n`=)Lhr"+y]BÑ)L*>HsK40XD [1£[3O5Mm be\Ss]ĽB($maJ;9ECi- :zc(Iw(Պ/y|9y`v~@w eڝNa;ݏaC| /FcС1ѹ13v-k.@p9NKy2"+rYk @޲sp9uχW4xCW( PАZrjɂ Ax?3h˃m5w`nwXϖ{`uD%%dc_^ {1&sa}M[=u,v}*؀Bne_+?`cz,DsU,lIqx1)V&83TFG>]Pùo ]ϟP.# 5|Z|-^Chl/Υ@b׮ޛ)}"j`VFs)d~'Y^|WLgDi~zliF%nJunm*"SJ>pȤRB=E5]yyjiʉEd/k}0^;YOj9ȢAT8< mdd3ʪ :kЙ3lk_OQXujF*aXf;}G(tI1V};Z)yoK߾guxlJ/pC)\kd(ZU9\24):wJYE|d#& &ty ?wٖgi0j$qup2ڕNA  Uzzq3#6t)M\fX VD-ebZODLJ4DH 4y*DBJC`I:Wjdm%,<}5nheZY>h|?HC &Bg];ݙ7!MM]q:ˊPGh(~T\8p1ppVXڻS tύ%MfMPj.TDB5)4"APVRLޥ85y}#dg }|*$dP_Z8h@Aɇ6ta9JiMnoD+eҘߢX|T*gւ %4xh-p߈/ȾJK9m\1s&r40B9zIHT]-( V7I wbu`Sz+~ 8 u|X$):G PI'lbLҡ)zhY^BZ"fItu_qPb|rG&9'٢j^4a@8bGpı!ul،,eTa.qUVc9hly=a]@WO~ W#@N֫vY^~u)+ V𻊋ͺ̣ /MχOP7SbAJĊxÒ8=kT1R#TKPv['juS~]_lﲰ$خz*} @' " {*>{&dNGqg  ?8f*=sZG;!zju0$zbsL۟g#%VJsyR|j ӵhXld5OUU虃QR/eDGM6n_ʿyt, d$H$RGc謵.buP!Wڂ 6_-F(E]O S"m]nF|'-Y Iyp} 9YUk;piNe{%Q:A%eC- j0탟^`kq2OuzI~˷1,xص`Ю*Ҵcɗ^ ӲkLDdIVޱB_0 F8`whG$ϊOEL"9]C!  `hzbW$mY*z158UDHԱ~3UzMH8K8ppZ!Ds]ö%ccكuvۙ} ՀuC9,Pfa4Bd|box%)xq"$(TDn9 t #.cznD Ɛ/ISR?&q[a{"jS Db'0/@6 ֱ!XT9q`\k?\4.pٻ\81Wsq|)q0,zӑ~/2 L=b7]rGh(.n3}Nݡ#k?pVOyB;uC׊ȳf}'Q(}H@|݃ p!ڋփ"9̂1QwB۝ɋF.v[|[>A9FWF}+nnasBL{5gd~{[ ~݇/S c7Ȩ3gV=K;(irrp˻0x_헁opY]4W}+,%߿x8IPjd 4^ t& *~=[%i 06,;B]Gdkxj^;me1Fp9Rb67_a`@mʀoQ%GR,yˎ;0]rӯEzeNA<\2VE4_/ai}xˉ,c/&F\oB<ۜiԧ[,?xbq)fIVJ(y9Y)m0W{D˖ayGYi>;O>2qɄFۢ:i=²2`oCO7 ЁA)5>ELj_ -x=֥MVӚ*/f"zʳ9}xQ JXnͧ jz9> 1Fds_pcWO+7I.Ղc̱>^O<@! XS}-ExOhbEVDu k Xda6Sec:2Fcl,0[l}])$*U=G{_,yx#pvJM }zhT.JxCqQ(rniVf/Z '`KxgX]1go_XFGAω/R?:Rimh<,[=16k`;G%fP?QXvȷBx7=g/CJ/}O e-ypaˢ"f0ymo,87z02`ImkUqUsէXi,7zYm膠pUΉ#tI[w(:yO;&rU,ɇOORB[?;:qi"#E؉?X%_$lr|XMq!48A 8ެGd 412ΘfI O˘7ϲHC~Wi~BS<{dUU/~ל):?.N@ 3h&q kt3D҅xоL.zJ!wS_Q2jC[Dd{^f/abr&4NtC{Pϼfw]9:hs5*A^~T~a~b[ ̼я%ƖG_[bhq-HʶJcui 4W7qXoIE| rŰm޸ mĐWqvnS`\}6o/mW"6j)BN{R,S ?Z[H>C xlf# VAsZ4L2M](XB >JsxE-=OfvѢQ\,c٫CE'5ʍU1‡6Zq|+|B=hYOtVNa8D;g]Q{<(]*`7Zꗄw cIڕE~6dJ}Ny.JDXi4BLy*xM4WܘƨxٖD'_L4ɐp kJ"O^i<U[Kr[eC{Czܥ6eD nv8arLfkW bT(?zbqʞ>U0Kf5C~A##R VV|`y] Q3տve=6]\rMw&tebN|=O\DfEgSD8),kE\*vfũN/:HApbt.>(䘽G޲X~6g tRzDN%voyxNG-Hڃۯ#fw fn}|*Ӽa\Ҵk C\ } TԸQ*7t JԐ=Rl( VXf|q2~VN5gYIw-Z.po5z@Ew $C>NOSB8Q:xNm%xli#XqC59&^ wM(p U#&BQ[Yˡ/Hrx`_<6^_}2$-LTS@\f; XLAxKg%s:9uC|7֖=q>ٚ8F5HPC2jZC荴AY}*["[n(  `,TO`̌,4\?(a|OY`YvezDۆg%hM F6gg>P?,i  >gwNpkN^3: TS@&mƪƽrk>ݽ {˗/Qհwhݼ-FVb@56({Lb$uqb\4R5Z5N!wGVX|h[`?j;KK')Wp2AWf%x{Urx/?Oò؆UAtL ѨjPԏ D0;RY]YAFv:{mC/&O|9`9VbKl$Xy$QʜkLoɧ,Dj~G 5R[&;dm?T ~:Y}hX|m" q=h'S{~ b2Ѱǧ,XKl#[D(+eǦ/pHG`% endstream endobj 265 0 obj << /Length1 2565 /Length2 16679 /Length3 0 /Length 18168 /Filter /FlateDecode >> stream xڌuXkJ7HKCtw7H ҍ (%!-]g߷ǹaܫzwUԙEMAR`f ?@\Q]AC`c`accGְہ~Pk\\L BUttȹ 7? _ ?@stP;:yX[Z!@gF0X8MV {G3;5?&ZN,&,.BLk@ rqJdb79j?G`"69BA.@ Y?Y_V613sw2qvXXہR ,`O0/#DB;x*2t5svZ%_f t0w9]QOd-upp--J͉U $+D[f x!9@fV9r}K `IgmCq5q.n ??sk30di:D CB B7F++(K2bbfv63;KX'? :X8Rf׃#dA[`fޅUV/+?$fg7?`!KYKۊ sk7{* 6,%dX8[JY{UfV`gRqt0۔ hf d\!MY*`h&sqL\\LP BVXY$C? _%X#^o`X~#o)qX~#A_ X~#߈AiFڿăoA_a@M\ͬ!ݰ3fA,bbbYsG Gl _QDh/6s %I25BHvv&.0 QN/ٹH-~{ga[cG?-B(-B-z<@"7>V^NV ?? #l^>7܏]qAl9@w M, rw:b- c'CZ  X U":ٹ䵃w :9A Qf $B ?B5:~ YV.?Ć? jlD1;7s@j~KwA~.~k VmKa/BT:٩9*rB-\\%2ƕ2E5~=㫡H P>&02b9@|$Wj&kk/D,gjD9@#a˭%W)Xqe~Xzͫ6f iqXe&SJR k{ Fꨃ;K3Vj_R/"D@R|zCvxMzSԜYIMyip\[h&& ~LW f(w ;'űk*gtcU,Ʉn,[IqVh9^a}TϚ}|3vۛOQ,~AouFkNG\/Kl;g4jX^25̠Z05b,#|f)ɗ{7^f\KY)J,/y娨Yh'Des>점O[0&ߒl9 =t;GS8dKjs&p5\B}zsO5Dz߇l^</ Jb1OpI0sP㑒xݤ}lA'ib֕(,U xF¿b=d$yb.rkN{vX;9ipN_ZݛLE%Y4|69UlݫGWWzg(_0AQCe Cء$fx5^i3Amw&\x^#M-JG7I4*q5Y. / ^{ NKqs Xފʦ8Ƒ!K l`F&YVʙSa?i t߬;rC| 9y^'ʽ_7;Dz-#׌:( oI6UH|Ɨ]hGY4j+(.3UZq<91 nqB)2L4$( #[S2M%ܵI:Wm15U2j~_rU7Q0{s91Y)vB9`0SJ*lGbᨡ ^AXu"xe: PgLT/&4i~Ϊ9z N#մj,KR*箝^5׳9#\Y!0 nGX>tdEef2oKXrOȢs\Zޔ#-P3C4O,5 :4v6<be}#}Aф/ mW'K5 *k2jw'cPC1d8KZa{=%M_[32p5-)hOkJ\&NLC&G_pUiM*XcIGGFdNe},`8+M+s:f`\XDKbvmD 6ݢC(IAIL1Ψ n+ TAdF#U'MVa$A|%Ďxp vuO|{fzߔLDs̛L_KXDZ2 hNytN\!f>&+ ;-:Jǘ%OGW "UyݘIP{m~4lFMM "#mr_x ,(FvsiKv5zqe#,oҳ+6*&1;@zC'5/|oZvcO|fS ,T0gpL.khd(FL;^O &G_avՃe?3[Q׺/ T6B ߰F ^leGgv&S)wTRJ3ΡCD?a5Z 槟}cj];VUp6V$,r3Gonkx f&W-Hjb<5 |8`r2Cn<}JgYR9aMN9*%KT']%مi+6"%B qIyڤÞCgy*=m13}b֬+ `+Ld jrgA]b̛1=IqE1b)<'+QY2|Bvgr2* EWY vTz}sL*0x`i >&j몚+ qu?F ESHHgV}r2LqH1Onb yuȡb|Tr{oJX$֐䚄]Ƥ\Iw2tj[ȑ'CRI~6*PBI!WC_/Hq@Ŧ-3x죃ܷhP3LÎppŸP2(%meD~kn^31 zi<%]ۣҎAR#FXP9QfVv^ii{L;TmWuxtӢ`D(=w󸸙|5yǍ:mM s!x%))0c'v_|w c-5wo#$@]74㋺ky [1Xdy2A_|'\::\騝Iܓ%w9:0 e_0 ;E=Z%q9t: tX:Rw"|xryр\{65r o%!;ÂI3ncO}nHg27Q E4_V)u}( 6@NZy+c1.y<#ͫBI K+*fS8tXk0ݴZ 鋾7U>=Ziaj  +nZj_*B,v8@oGK0-OdY{Ў؜q+!鉵h "616\4)Ѳ2AKB5eT):fskvSl"pvۄhI!Bm-G7-(\cT lX >wE|bn靤;t$ CXS e"ltDz?\HxnTŅ+_2 oR #Gj0iL|(kؽ27҅1XXE>%G}{a㨾-1Y ^) cTqn-[!hcU#m@|j"-Ҭn܇?CǴeUe͌iʚ CdSM3Gm66V6~u aovGu]LVthLq֙Ғsm =;y@ mLNaUH;}InAldx- 7npqL?3+.1<#b@*>;զrHjÁL߷E:3 -#HSLZ~H\ll'Us>L2<#s~Cz5[ K#mD kw"HuKpFHYpli,5s+]dFq7C賘I]JyL(5 ۴)h?kDk #*_}msx$Eby"e%{Yx C>ieŅ?f5l$,\?ˣ*(-?t4Y9%`^u K=iWr F- ^5Ad>2ǽZ‚%$|p?MbL`qAI9*,Uӷ~ Fz=3йgN>uyεL1d,iyni yJrEѓN.'i<5?Aܬbݞuhaw){kty :nDo ǵ.bk)m P<ް/0 LOyle4Q/*6Bn7F$\ IU<ԫ&umos:4vg856y.Z1HR\ݡ@W̧>)5߼ڸ+ߖ'i=|{4ț_FlIժ&N :#2L}ŝ'»Km߼ѷ>tӊ?rK Ec+wO vZ|bXTWwk|esS \9MQ?l9'Wa9 /O+uza|Hj4[*Ʃ-9.'2dx@ٛoZݯ[(;LP'K|ZaXQt"ddR؊䭚XNz׀Tgr^3f1КA]7ؒ\E2m50pEQt3LfA%zxI_MH=MbݍZ;z۴FȧBnRasmtRlw|L`\ojPH#`! 6-_kfoc" MB[mI}jdiL5+lyw;;\2_^3l;g6+ DP$;ɋf3[~dezM.%VG3K&^[P &mC"w]O{k?R-<{9i<H߭✋( uAږ.x,2KYO;[4y f yRuE> 7klt \n<>Ӌs2>lF+7HwG0uvΗ4ȆkS}=[IA?yFV2uURG"^LɸfG4Ҩ,`Sku4 2> K|GN_eI7k*UeiLtlv?ӷw?3Ԗ;VWi_Kٵa/ZdL|-geݫH䗍tPm.|}ud_Iéf5T ONUj5%@M,Xcmn'yk "ƙ(E.1Ϩu&NPS(ޯ,'.M;xޚ9E0a\ˤ3W@l>us?R'h^UY& |<l*qK<,M&t15g"KLn#S-b)q.Ļ_\X$lɨBVXSNbօ:^fot7C+W'~۳0U%,}zmvdR`?<FD>SLLI"0&z>{2zRN%5;W7L3gAF ~CDM_lN?RV )t ޲Q*{}F$?8[8׵"+OY?/+9ڤ'#P-4VfejS* l`P(2f};v6 XpCYR-R5#@{zO3VGJ~AJ萃 iEP%08J6 [ޙMީ&n7v}J WAf[L&0mErnR3,h:xLљ4wBŒp jso*p]"V/R.)-Ý6ڶ#JCOAHZ2yX6 Vw]/R5ghUi /(}(E7m+ip]2^j֎Tb? R^5Dįݰ=I=wӯhER{3Vc87X.4/LÃҢfjBl;_bx>lyN>I8˯Ͼu_-fJw({K:=U,86P=kMJp>|%_׆NJ8] TnlNbAsR4,B~)._?GQ3 ٷV ģB64ͤp{W'Icj} ah\~47R#V@k!Tkz4F3UK64D X:zk1Խ @&4[ntz8kz4e6k<Ӑ8Cޕ> |]sնXbhIFH$]XԢM=w;g>Ʀp3qD,D̡+Β죳ZʠV+O+()#U:ٵSۦk3=BBi+e7Z2 ;vck0R,G KKUp<7hg01?]HQ콅 vZv"/ҩvECJyDPVc "@>eL&CSkёo j`/i\7P~CHkmO -D*솜rZ |PvZ?(hNmm My(|3XdVT;+A Q {raۚTCnWeMO}yO'VP?qJ'=: T^>~- %_z]=rgQ0y0TbYMޕ`  hm&j0cW)A۷]ppam}m ?;1tG@&(m X ti &mp9leceC!x*ˑѝāM0C㗟;y4Ӯϝ?̔GB02JD\̖p=i K5$9Yq]5v:SH(%y$`tPsG`}93jw(ö/MiĶZݶ3|O%잵o`م$]7g.*"&&3F$lNfPƣfdgGB3YNi^{=)ץya2z!n%Cay/I yIP%Oؙ OLW,۝~gu@`+W>0,_LVϿciFsΆF w3&qZ;2R~zAJD`\k𻻫+B *7T]eK"Id\۾OoPq=k$Һ|t*:ǒF9{*;n8)s8`2V֌գhPe0Gouͯl;\NrYY! *߾owk6Yl__&2?s`fwVmBjhFexPK8?l"0lwAUIFWWdi \s6Vҷ9!ˁIȀ %a8<(Eh|)'u[RLCd] ZOi\PW{ p4Է;(Fb>R '3֮q|xI<)R6\8vL'5ֹ}3;-n4fFfu%ׇj<+SZ`PU0#D~zDq; FD Mid o63ѰQK9hJ}kN-}+&>+ ȑy~Sv$'kmo){J JBdN?-}Fݡ:NsSFfMe"E/q(N^2P 8n$s.rJ-Ie2^h)]wjTSp[4B moμuk $w畳p^;(B^+1K*OƔR]Po`$R=:O=K7y0,ߞ,WJ8nSvYIcI.]r)n!%Ly:'_%V% C16}wD& ChI=wW3# Ȇ}r'%ʼXµ<=m8yqUl Z膑%VΝ0jd1◲#ӬٲyN_\h46\W=vOX#֥ҡ?pcb]ÔvT)k0VyQGDxu_-Ro9:?GKQrA=診N kF?y%~i{k(.L  _ZlpahDHV=Jk+X$ {~l &Bm>i, L%CY_hׅo;AA|>d~!7nYbrѯ29=;K1*kzCG?)zҹ;fHAH(] @"L"/=Зfl>X2FQMɣ,K=Xh?!.&?AվNSaj;lU.(´̣iYz41@~GF)* #;/ ĚѬN~ B3OyXZ-_yB6HqT3VDd;VM{MoPa"Zw;cX`pܙHw0x{b^U'S_1=G,795Zqqጎȕ(}Oζi7z1'm`/7pXt- <󹀊+8~ۀBQR{lC r pL]j'ZXKbu|*>S-4zmSv ~;^o%HJxؚ,:3B-mGۏkjw*hOEײm,aN 1J{O6zs$jG1~ަl?w*2%G~yZ 0Hn0`pw[du1g:P-6Z yIĝ"n<Z~9?4J#y9G'i,3S@(a ȥv!PEY:\H5bg;˟le'Icnf͠j*]gd:]JUuSw~ә\* w]Txkڷ*IlcpO5jzQ&"b0¾莨^@ZWN:^=B78Hhs@$wSI3.dEA/uiI!Uڨֳį>5gaV*m^C^US^o jU-}YzR`hvU]U{WF dӦ2͟-+ZIbGiDqms~ _%cǖ Bol}piq/5unZtL<˚ժ_*hH$o?OBNYkťC2OH} &͉\ot 3<6 O&ːؽhUH"{ݐriw #?mXՃlB{ _hZnѱ${F/ϲ* )GȉX݊ %䟣pj9eg9Ed4p1v6%{8?PNDՙ@8hoinNw i :(.竮!! R8ZzuZ}=#}ʵ]` 3Y2I\T8 8bR錭4Aۙdػ?TqI 6ʹL*oqo'?ĝ/Mz~YavwRL۠@{bUFx Kڻ].l+r=)DžV1~M4] fR`pO-QFO}WU)"V&-G4XqlMGsz]U7=&I=|V Ѳkcv'_gl 5y6kY/-cLQ韨Z֤VڗlSNUliQ5|ĐCf~DzDf8+tlN[fQwZ$W>I8Lzqҥ#TT{Ȣz)x 5o. |O˹<&v\fP u:7Z3Íj?'f!fͬջ̓YAPU倻Pq cLhUD @խԪ򾑱Pum 8}}oq%JGizP^4 v)eF'ΨTʮ :9a2cs/G|q4]4YÜo[S[^5MH ,GlP?pҁ3iO%^ jn'[Msj60J,QZtD՗-s: .Yи)#3 Թvc('ar4qzU~IpN!U]rfLmE\29u.ApE|-t ߳ܺQDyN([dQ$ݪ`{()?|x.Ker51[&l )Xpgνo5Wϟ3dxju|v.D6l݄x^qNϛ f7qaa : 7|Q>86X3ߌf0~f華p=/a: f)i h>l+rPTW@aW`[͖&^sfHWM>5WI̸2Ozeߘʴ>Ūbp|tj&Q%Xr0o)(Dž"]HEiP~ꑯ 3hJکN2lJn܋XC \&cwf։ pa5ҀVwa ?Х!eM8 t-"`=VVR` 2yJ$td6Gs-PJ(vJ t(PҥDH0Q?"Wn`ATCC `/JF`o >Ӡ 2R<ߟMpH^$KҁL./!mKqNF-$YP&o4mM}b endstream endobj 267 0 obj << /Length1 1507 /Length2 6814 /Length3 0 /Length 7828 /Filter /FlateDecode >> stream xڍx8m۾U{5jS+vQ4"Ħ*(jjժU{+~i>>w8}^>+-D` %J:fB@(" pp0p8 !ᡄ1XL: M78@H $&)$. @(I2f h"P4  w`$$(1PglE0DB`P?RpK;`0.`ge/aP4 ;CP 9 v0 p@cCP[` s"rˁpBBJ'W"w0A:^0=T0~a G#`w0 ::cᇆ`.QW1 lPMk0=w/?uB =>`[_4l\0W7,Do%DPW 7tai@`vP`PnP?4sE"$A0= AXj`Oד%VaH[,k򿌊HO=a = 1 @HHH .. g 0# &GƆ HP wO9?v3 g7 v6t A)ցܜ۪cgDa=0*j a if`ka(wQ@ٰq-hl~g]ikE` EUv% Ϊ-$r!Q$+ڀQ?0@!P8 pnbAg o7,\ Žoa }@P"&Rr[dYw(s6QڸcA3acSÞ:2SԳ18*ݫrtCYl ##W)[[p%N]wlwՆ08 (YS1vp/cQP,R݌4Gpb[zZĤ/,~.rU!VFCOɚ5KOYT=S*Ncw\{,}"9Wĭ^W)ޓ:jLV1ZWA 9*lqS*D]7Yms?u&Efڸ뢉X}}Yze AWb 8ˀKd  HOqm.Wݰ҇w [;tq[wmk}2UTiM#ۭybb' AmjR3l&"9FTF8$C&(i_,|) dnn,e ίVq6CAab+6sDž\qMECl4EOe=e Bu9<2} syO SݮV Oog46jl!ҺX&Hcvi1sЮ+Ź@Z%j P rN |e/AS:5Ǜ;Ou1-4U1 jzCT|w|'K^dgԕQ9H0RIXUY`Cʡpbz-qzھm7zf$7S;*I{i9VSwT|Mk E5樠|ď/Nta (ȟ&arDٍٻSwc.F[},q[+ *aոf_ ~Xc&LR{`x i&n]E,ZKn;y_H7IP7U(,_fh8L6Y|ν)k7A:TRf,Hjai#үu  g3H'zodR:Q|fcPиYTy̦j{;qCE=DZD4| Cf-9{#9gX9rwԃA\1'{k uNw]xBɧó~jy V"ɑF ^z=3y ]6 '#HYܲ mMZ'uY<_\ f^CHhuߓ&R^1rfTc (lp;w55{:#WT=EdqrJxpyҌ=LuFN-ODW71'qy,Tj!1%L 1̄]CfAJ5[ljb~dDYB9 F'nTr5L-EŃMiQ{2|J=pJ ;2mTseʞK]᷆23 kIx[հUQ'zX'9[ --+hp~B]G(l <#DNM}۷=_QZϗ] Of6_&h^7PZ|yߝFPd{.݃xt0:tiO8tg#T9戴K#}o'x^@rI.B ^GgF}n~IT*ez۞u4 g1={CCZ \2yhȃ"^ wTjD>9}™&`+x\lZϰ;+%08i|5g\=3[!\(\bFVk;;bS-ۚog1v`4^ O܍H|WCPK*oiїTބ0Bq#jN"q䗶 ޖtIޡEmf;ܡgt] G)>ff`uя ]Zہ:qL긼gO?\G쟍ܨ4jIJ^"98޲R]YJ_7w.IKU$dn8jw~9+3:{STEN8*d[[O%awQu,R 2IpRQ|_`KPq1\n`c:0з^Bצ]5Ñ5U+)?E WYLNJ6݌s!yj)(|APaM!*ro?^}bZƮBQ)r뛑;KoEō pʰ;[t%*"~'Җڪn{f i1T_tk~Mu(- RY$sÎֵ;%" 4q>M&4wrj8?Zx%s2_~~'۸ŋnMH{]d꺑Z zp15"o(4,yn\P~i2ezFH;Yku ǡX}Y+4ܝeal _|7T%r\Dv*{4^X2ؾQIz8KF%Ng{3xF>:Ө, 0>c})걛rXfb$ gջWS6 >v>9>тNF(ꆤ\'&i&XoC(lTO\6S~nq+ 773): L=F:ΡE(eI22a&IWF?ݏ"Ўrƍ1A;-HOs]WϒVբZ] !s(h.6z;Ǚq9u,9ްm~y`xd$h-ģz4RŪ(9:f>N[ʅMGdZ I 74u]c~BT" [J)ZWJx/iJ ?2}{p3PՆ N'l!k*CauR)Iݿs\Xad"<F=7fp|TJuqtՏfeMȖ- F^ 7JZ,zDvv&iOvTnXQ(]]p`NJmݨapvY5 oIv|PٜӤs[ݡ>q2^k+6?wl4^F/.u^Oʡx13@8A2=VG8CRϹ}XeDkjye5:6d=zJo”E57wDwz(ڏƯ\^5geM3lϼR5&Lt lGtH ;o_$»#1q0l ^,ξ-a-\FM{7[.4?b j,i&B a!:۱ GMNCCF.mNTMm"U8-$ @MHɧlM/$i8q$q^.̌nS'N9xͯ XRJ̔J[&jt(M6cn_=6 9foQmJ5 Y OquYܴ)kKRk dĈ&%u~'z*cET㳅>)7?Pow6 >-n-ggַd3 Y^D%6٪NC $l7|iX4݉\{#YCd Qqd g(Ūn^Zn\|:ؖ۷鼣;bSm#%h,Q3!2aV:'I"OijD֟W۔;__1X?}WL攞J~6RCIPDǏ+dyxxdpf&g}:lw^Und.?0{WqmVl a**:]v )@#猀hyMSΥH.Q"UY"st#@h7.uS啢TtS sTd*,ԗ`4թ{K޽"r[bEb̷p{҄jSh O=ESx@xcS45$_w3)5Lq;25, :۳,]*((^zũyR{b#c&"r#HG`Ӟsˆ~N#B憷/R#mZ,Pc.S#۲9z pncK|tq8[u7z2\=1f0%ZyNJ)52L+/WCyT cL=BC݃j?ggˣC1< endstream endobj 269 0 obj << /Length1 1397 /Length2 6024 /Length3 0 /Length 6975 /Filter /FlateDecode >> stream xڍuT6RiPF0F49¹ 6;DD  DAB;x~9{vf70R#Q8!Xgl) @`(sA1,_Aq8=4 HʊHɂ@Q0X@4FDz 6Un>#G ("##%+ aPPsD; .@c4 #&+,bAh s!' x 8"h{ .Hgx h wC~ P$rB~%Ca0D9.]'?.X4> E@~ lan8,t QgQpU+~O AcYg `D{ -?!xHJ@7Qgy7/O3A h@#??,a<~@DGp$ Oua_> ~dr'~UUnF '$ HHED%RR2jEZ({4P7|$wh<@o _"*/xrn+O8,xq;[z8Z8(^(<ŅDA`v$7@`*=\(gë` BE(S}@($ųO/S8 O1ϵ9 Dᕃ:k >:ፀ'0p*e/oI?}nI쎖L>sԽ1r^~} `y?ѐu{N\zʖP^n&0,@=1YTrRy+vJf ,:bOc=Pm]#d뷴J@2 79=b;:呴LtɽLs<*S8FA;!2WqP6iNiꮙտB#ҼK>^'hL+Lhޝ7c}ЫJIF,aѻɨE$T*cBv r硧w>)emd$2=t2lͩzܾw 4(]y7wW}WJ'؇KLI R~8غC!a빋HAqY{rJ ӯo{o7z:e?Kh؆;Ol \M#U~E:DoStN] \td', h<5,'B2n`j e(>Ҝ85 {@/o%x6{BʂbIBD7 E|:Pώp6kߴ]g6:ax>P}9c ,c6M(#CpII̓5vI*gn{;%^a V q{e͛gEm`R\:3L7bnfS63ö lk/+-]$b| e?0RH GJB7U$[ ǣΦCO?S&~v v;p~ 4}:vNxYJ;'Jg&sT 74cs8crÿ'ܔvY&j['0sIK$ = Qx֢>cYwnPOq=b*߅0-7i,\ @]-p C]ec[z=(}DGS6dr^)[Ad%Cd8xsL`Xl$j1w`ͷĤs]>JFe*f3;U#\LqI]aW4D ۓ0_ϣyC?ٶHN  ҬSX[n[)>ibJ󒩿ߟQ__!$` ڜu2e]+}WLaR;B.9_ q]vZꮢ䝊9}56;"sajA].u6Dʖь?gߋUugh۹xEqAؾn=4<mO x}gD _#u1.#EO\փkY&aM4e-As:=~7h[K2,0,}!ʦ5y5iGIAG1S#?l$zS g$Rfi*އdc}zj>UWCQj @9ZWΝݬ^LsUƈ`UiBcF!l[\xkjzl֢Pa{a$xIr|z6Yqp .:~B37SƠ5mtl+tBdF(㩺[IW^%́G\3gZX ni:]\ca|W-Ht9BLSz[pF'݇e6[A7WޏG4K "KW"*VQà (:y^@]AZ SKR63mh֛N {+"+,Hsl9eI֝bDf$!u'/'Of,##X*i F\"s?j+;3M xGĄ!ۄ3G.kmCYҢ-+xu)dqcbs;uG89(uzϷCHzQf1÷YӔ.h~lYb7ZnUO0$N-#v%s"=/k5t'VckaR)>S̴SIPV4'|7.(,R0m@C=2fWK7Vt,FnK"'c a~4gF{B7H>J{6IyǒKXW"*-BӸh|bD{9 o^TK:<+N]iw ԕt97I9 ^c6:뇛U~Q:ޠa& q,jx` &rXCپUZFݝ]&1Hk9evnY@x W9|GNyY:,4CI郷zy̙혺״G  92]4'n+JݦB coR'o=Vr̡fz`<+:Yrۙ衡 e6IKM.H;$F'jfVO^c6qo'X/=z@Y^cqr5::08/&oˡpͶ*Qym/LyA V4Tez\L;SOQNKn((O%UhQy/7)lMxr ~hUȈ~v# rk`zٖ|3_7?vʥt+E| )jX*v~nA+cv!ߢ($Ym[>r^Grmg2H7u,F}JjuHX퀒DJC<>. 7g +M7P 7?X)9+g cX>Mvw1 Ac}$ԨGuO*̭4nj8B\e|M+UL[Z?LP@>]_| ([t9W[2 'Ȍ)ƚsx.~Ӻ^4]fs9IJM4jjk_e=bkZ b܇O-~a5 B6%5>O6gIU[tIǩXue J[tY{-~QĥHPIS8!-#'R内N& 3~0ZX`&V9oO9[%sh$Qp .}UL1`؊J݁BwG]h++ znBՠҮ52 weA{^ÛyUuɡsiyIbMh:gSNam }KC.BҏՏ+86{WkijOoM0+$nmxi>-~ЉaJ_saZstoN^cϾR`Gy 90f iʔҳ-&|:³"& QIj6XP]q</:1-q=2aIέo~/f@IF(^ۢ !~AoJfܔ@{%%ko "H,=Ki:GRq2ZB=.g]\&/Ì8g=*] W=8tIL$7lUNGxoA޶c>foUsR+HR՗5f%s)ٝŮ3q\Ym$UY] 7#$_H1Oyt9]n}nHǡȶA[ڲ 8z|t蛺d1jU?DEgQMүG$_}8ڌSiDO\xuQ.g?ކ%[$7B4=/r>/> ڬ3K;/Ǔvb`Md_AX'v7cͧ͜  $4 4ݻ^&8&ur1}B HF8E(BحXv6Q-Jn \wEq,hq9{5]6 IANF6K-ltbG 0&BK헪-y2Jpe ;~YwYW yͻŤW,Z8~u5O{Č e̜:f {APז'^-.MG-qrG,9pԖ7Zk]>gG ީ8S& BeGm +xþb8 8*_ȿ|Z?3oKxRՐ/1L\"`)U$'޽ eisGꫬ:uMOȋWdoq5ݽFM_׿UҏIXмrSb+V .ԇ%b-L endstream endobj 271 0 obj << /Length1 2096 /Length2 14270 /Length3 0 /Length 15545 /Filter /FlateDecode >> stream xڍP\wwNӸ;$8<w'e9{{tOj*Lf& ){ +3 A 3lTT\lA#Ri|w$] 9W[+;1wHYr`3"[<hM܌D@NV`%--@ ?!h,]\XXݙ휙,V.53 d2@75fD*K+.N v~sqo e/c p{ 1 l0]<\`? m݌lM <1@JT`o~ΦNV.Vpd#[%fvv 3瓰rݓڀAV`3?h:h]AۼY\@ r🈲`s{_$ު"nOkC Jo 3z@N%u\mme7m]]vCmC#诅VY_ێ-有Ydbbj,o9l {g?7/ Vnq~kٟ*fo^I+0vr2D''mW@8lx 0wB\?D!.?"_`qXxt ˇ/Efi_3}+$Hb,f?dgfl/6?_mqX,V+KOK_o2Z q|#ho'[eo=pdsoޮz-)ҿc:j_?{K ߆p8]b8'̲KF_:no9ռ7f{c7W/_g!L]ysm/(d0gob]vW-Jδ3Ɓuq[mO5H\=?hn:[k.`'#w dgSYmWSLjlf{]mJd|gˁ S8cfdȱh8|vdȐv/b53"cH3F87!62Q䯾 pM{$?]Қ8TϬoz-)A!f/Os^g]Tَ%;hbRQ6pS–RS-?ȴ+irD-{Oۉ//Jy( %W݂݇Ҁ/Ll %Ǭ{gJZHG8f@փvBY=P'ORu&tT;W0>|g*|]l.k db,́>dy沇T$;X_7s~HRU? k2Ir w0u9cI=eBtK$<r?nKL= s,p-zг9/2a rX`$/uOe"./ɱdt@t D"?GG7;`eWcaFhL^yJf9di![ըV<1Q}HpDt`cnB~op CHg zT;d!9*C E2-uB+Ubi^χ2:}?3ݕ%3B002ēD6Z0._?n-.)/3Tܻ/vl0S4JMVr㍼RN =(KPj)4ҷ^f{^AjKw8C7%T̂| UI!MVw7|sn0\H8-l?a áEj5-'Ȫ@;g'xZI` !_cy1ej#ʤg7!=g ֒BB.q jL\j j"\oH9U*!iP7 5ȭh ӹ$=C?DF*/6\/SJJ#M^=nҾvEd,=Ov!ǰV;ZŞ0ތ") ɷmns֏aX1B=QHOkN2?fFg 5+UxFdHx†\*,mYߘNH.:-ioҼyd YFvdb@Pɸ j@\Y*Ҍap(KqoN^cS~, Ŋy7OFўu{Xkg gL&h˙Ğ+s ;7]J ?R01  [[iyz(#*cҀf"Mzn@VHnx(B$m^3d#0dGX-U0֖ ]V\nrrHYmҐ.xLvҙe9`KT ,ӳ.7+Y; 憬U~o~Y4n3ovfNdQ~)kSvB] R| pl6ޏN|;ޤ}eH FQs|Qp9&wuY88Րx@jqwHɖKn )1ޱ;JYpk^g>/'p:uiBQJ|v 6sq'g(~FZ#٢i!빥ј*0qW!h4=5+\Ԭ$L!4.]ZJG+GJ~Bى9_6+Py"|#jLJ{ ȝK~?LbiX9,8.w(aK`)u/J!*Ȭc# P O-dXE"(x]JXi!PXMڎB+NċMC$Д/dy\g~6_ڍBx4UJYœ;Iֆz%cC禸P~g>8QXL1aC hl;sА9vO٭A^^1*ծ0 }W=DBf?lbO 21S?w9,QeH0 nsk|)ȷR~R;4#/z-VUQLGnXȸ8';$٥ ~mH׃ vq#{0HJ[((':o]Fjh>q$ѿC7ѓ Fx|.Qr*pHGi,HҔ<ˁwi+;9i^+R߄ ~f0D%E)h陟\FEM *.GN]V#ͫ]o'hrFΔtE;}y3_Q_MH+GD8|<~$l:dWBo([AoN`:7It>cdװ[ IEۮ3/WBҀ;sɈW覑rlj2Vk֝ l[V>MP -Ƃn h?䥘[#}Dbc|Ssgӳ/|I_\p?a.#/./咂搌RD{)cG!:K}-U &3WNEBVv}[ڀJ`Yb˂Oa'v+#&o_\d窥iUPS&(]O67Ix¸ b@{8.U[IgN -ίȦ&0e*u}ǫ3})/7T"3MHf?H;1Moq,V(٩kTubrX[J&kD8p/3㦐oC d/3z*m]V򻘡ǜzf3VyQެS@ d-!W#QKe{rwR#nTQ8r& Fy/G劃F4ZMJn0A/oX)eLtDrV335j_^*yX%y'I6FW{٠_d?z:|gvƂpmaSMX)HP¬Me+#An3;rwWzyH2fh5s҅cJGf4zds.fyX"H}hPE{ez -nȕq ]hۙPuL$+:¤xO^.g )R6./qUlhۆ9vV-W*oeW$蟸?,mszK/^8:w|݁v˷JSA{W-sHx}΍U$1x~=5}D-\Nn"b1Oy>'0!gz#a}i$Hp`&qԎ~1A;UҼ΢prVE-heɔML :'Mg0ɇKD"֦[Ade0mM&!Tb-:DQ\SqFaGS㺝'*y#QK F ]嘱.ڙȢ})-vWeImNļYo^:Z6{b3-zo"`jRV[lvyrUoyp;* *WgB'<,89yAnL"ѭCIGk%[!4,*Vj-=lboqח)= Rʬ~ sWֆ9!{Nߧ<(І:pf'`f^ RVcY=}F`M_|rj-R`.k@)t:К榗bkmP{QXI^60hnl+-&2sCnetZVډ^$YYm|;*gyf[[.~O|(c?269)&u#~xK^67و"BRo(Hopݙ3"/0FJazD/Ԩ4=*#.<ZN`,1,n6ƣ!OGdۦ=,-ʄi_|B ^L-{-}o r8zMܓ"cHIԶ^?M0 g#*7;֜9n%l wvjc⟭U۪)I_Cn":3{LjH^CnN!Bx ?VW*[i\In<3Y>xj"pVjҔ8qjpkC2A #MAjB,U ZZ]xdcF9~:++.qU_~}i/t3?jCf+BZX v1akD ՜A :s܂̺DF^[D$ݳ";|ۛ8k&3$ 'C_.0% ʗ.߆FCiAO\ϑvZ4߂~l(C>-&P gg9L^gW_/u:2O bb?l 0v ,?nOv(3Ɋ}HR])K*m)-C͛~wL43~VV Ep܊DP%PTQSڞ*\Sjc,C`FptmXU98CԧGAr&[xx*}%"/Tj LvYQtoa >VCj@s2{_#,T3|H_dG>3L uM;UVN]Ix9KlBA҆b9tNʯ!ڀYW,Dt!جXPmn\+`3?1Aȏ9<"%GTa6F~0|FPl4d "?*]ٺB MPi'@`Uҷڔĸmgj|kA$ۃfyÊ$qG!  vSKԛ&4J[a8Ӡ߁[O1\ G_DAjR?g28k5ڠ16pF0a3\MZN% XB,KǜX7Jn>XI6~8sgin-^n^ /٫l 3!,x"U VkvBaiSjEy*aj vk$,n1}^}L˒!uAL@''e 郐0dkTb#M@Ah,UnT3 ;-1`awݺ+A;_'b 2Cq-Nψt3]T ё%e -ƨ [?8KDj#9ڒ1v%{`]1 ~1Fo/+&CnQթ{4ʠm~+mG0F@. (ɁEJZVvj5VF\`jgN[RgcSPT& ' /j~%EV .d}eXY|eo(ww _0 ]c/ BDXd?`\[r o`(P6&RecU7 v=sK]1ߩ*Å֚mT!!.~.nNDc_kZڻOm[YC97x4| P1"8>oŃT*9Sw+G3p-~s-3P b[7`/^ vOvG==~O(O@tEѵmVQ/jKIO*XNH8?s!8nK%8nF} d" W$ 78P E`bMo_ WLX9699E1Vj1yhdLyL̇ϊ)DngBQA=OiPWlFޡ1`r aOHt]-v}ZMd}HcS2YحJj[2O.G=[lE_IeXTYVA*5JgYդx.%>?%;CUe9UI/1q(J>ieO0(Q؝U3OQ~y߭H"!<֦wSwڮ"zbD C% _μ]-f;%-ftlK1pL~XLHi%B>~ Xıɰodctyu*3BŐϼ[EOށ.9ۺX*ru(#)`YcC/:-ZTPh _6H%F4G]OFnՓlTV7@6>Y4b4X6 f[mM 2lvJ_nܭ^a/9L|m~>Ca`m:^EFQ&,>YpceGŦOu%f x1{GY&$`3DI{&_(bD9TwWB U;4b0Ȉu M2reqHr3,KEF|mB!t1S7[ǧpv!ZFM>)71qk#냤*4 ]8\* 跿?@r'hTs^B'cMe6yDL6VyE--Sp"&EG7"+ЙR` j֙>H@lWp5>''4&2't7?Ǘ#g0[tv'֡&Nч< Cʬ'|; R*nY(I -qǞ|șJy3KѷU ѵ=jf@ }! 3nd tΨ}J5Z/xs Fk^Qɰ1TJ7ʪ/A#a9uWY7LnHR9A&1IߙhXv,W@ ]KÍd A2BLs4P'sO"Um8;.}.Ja(<3eVQ\-$C˩!ozqʮV 0]C;rFAtۻiWEeOE67 nK*_`ls!kk9&'a/9Ω{%/FWaYָNl|EQ*.$n+F3LJ7FRtfNBO؊m)\ tX̖D`)2g `7Z R@nSrVTXӏP2I"G؞̊3!y)}AQwŋ;O,/kN=$KF*R/vdm`["t.x(yH*՛>S6"=Z#4D* pvԱ͚sU%Wbc˺PjrVPm[zoJQ\wE`y\܀\#B3[g;y]BGh&%=@͈ךr˱!ׂD_ 董|RԚ7_?=M`_K8]o+Bd!L DKŔ}49!ʏ YUdeMbZ_.\tAE"H[KN7߳ɃNu&s<9<˷ڪvZyX _prD5z5&8MtoɊ̥ 2![ |8%50Tf7_ȂB>X,f:x jtZŊS}zzz^֏۩Bl K {NY9 u,$D\vU@S3L/24/:tn^_WQSњnd$UbĖ8O1:ll!P^tM7ճs@RW v}=J>8QW/p7tpTL~Oe_';llv^~حc eIL'#F=,7B^kLDT 0~ &fc"ﴕa`6%}|'jUbyO2)~`h \0rc4N>Tu9y4 eGWɅ2:E:AO:r-KҼ~~ﰜSl[,#׾+ꀲ4/ -, D Xh-Ob&3pN4KHM'=yWV"ݏDCRUR7;H_*:':/e9c,qPPa*}VZ>̍K/cIa ubu:陞QdĤ-AMmXcGU[m^CG/Hرo`zQ7RfO-Ni0/AK @RyFՎ+GMoi,]rD83P@+bFuޣps),_ABe%c>ZہACmfgà $"y; h nҩLw A=c%h;i }!w۷' ]6 k>Z=O !X†/EZMl*ch3\4| '5"-XJ)Jcx?,+E=3z>,J qcUw :R\3#0*}:>~O 1cq牃Eup;f;Y 8k,W[s=v# eN)͍Eҩn٠X˭uAyuGtX8[ O UN|B ;38Iz;9Ϫ~YU{l &^ys3ƞAO"JAf"}N,yXIۛ狁I|yڹ<1/9z]O>d)f0j5/U ڝ6!H};%;46+t^@Up[\Q&;…+0FW3{#1\iM^8fZe)I oyg"(Raʧ؛{@ fCܞJo-LxB.c~STu~.-_we|t5FM??ec&G]ȃ &Ҿst.&@OD~2*RM֕+GJ1)MOMxe%tU|ywP72P̡n@G@b)P _3[Mo&!Wv\RV&օY<<L>˲ѱDzlmyx>>CYjVg 77F#`W-/*F T #QV[-״ѱ8mN+Ae2}FzؾU,fNi}sr'!πMyEp#`Ћ6Q fFEx70~pb*CB̝G_1U_Ly؈)= ClĠ )﫾y͒LOP7TYa5'GWߠHov֪3/ ! [J1{떎 i1x{<qW#\#h5;f|l_sj{]QH]-2HY%4ظJE?ug; Q  :_Ue{/ +=7fkPFw#rcNÀO!ы; AȺm۱T0#$nP;Ed¡!&g4n#iN'~ˉWsO3^ͪ|<t 2N2,.?A|>_(# 2Z^s #vqSZƷr}Q|aDw\3_f(Wg0`sD?v>(64DL7]Ήg?;%P4+LDQD|kqG d\t, VTe]JV^Kl:Zm~F7m#G$~t:s k I;ȜTTxY  ;ajgj$G_ k%▙),lP su# ;OCJ駆iȒeQ!(" d;ͭȬy$YW ';EmB9 >x/<@Ӫ;W1%5Sѐf6nMZQR>pYeFѣ=U65_sr-*OQa =݇aO1e8LJƘ}_O*0wC3vC7fW>G#D :?HNlm6|kjxh?#31Nݙw=-aa``aP>FJP~lh}(V {)K% ?X'Lp)H^s,5 D~jqQ}3^cyǵk6Zg"sT͇"e68j}0g7A/1@#I g>lj#]Z1'hm3<65>ooIf=R%2ː{cڏ_H `C,h̬.3p✀0{uc rLK4v"U4;k"M#EKQ RݭagWIŨRp8^Z endstream endobj 273 0 obj << /Length1 2720 /Length2 19139 /Length3 0 /Length 20700 /Filter /FlateDecode >> stream xڌP--Xn6kpw =h  33w{z^>{Pj09]ؘYJlVVfVVvD**M+W[To@.VXH8L\2IW=@`gge inePb;؃\$,,]y@ 09[MJ& ;pF-@hr,,&v.t+WK:2 P6C iiB l {АS86VۀOsllW +M@;G{/+{ -"07ehb7q751U @ZL `f? /,€,eo&`gwuAU3?kcadneof#HN bee` O%˯^l`~>s0 9puvo0LAV 1<cxm~u,JZjb PW). a0sp8x|/pKjbOmē7wMܻpg.hY:gPvO3@{߲rW/:[_zڿ ?z;+[, %~6uVYV!b6Edj kbs V U_ tڀa73J~;7 <_\\6<m +f0wpFu\_E7HF|+E7FS7T1UE;E7g8,o7gu~#pv_4sOK_p^f<4V.6!L# _);/0QSg d oT6 W?`D-xeKbgw 85sfulܿNn7 >Tښ!QVvp3-wד Lw9MraY[Ca7 npcl-o=0,SqcكwL]~5X~ o58#idGߧ fi+ n$_uX~@.]QVK 23,l`zri{ܸ~ـ8.po}ΰY~TX\-AL %8cWǦ=^z_1n׿J-"D\^t XׇtՉz0M Qig1,;w=§m8߈H^9nmoKVk}2JTkG\*:k F b&K*ɍUΣ_Ƴax~-S,SVy|r8W&Wh7syS/ ~'>zq kU.zט3>l}yJ 1>@;Evʯ(j'3NӇaH_xCZPSIp8m3{<2̵i66jp'?l%8}n"rʏ>}S'sRgnEhXEYuW ]Wl%/Qכ[8M-8wMٴ׶ @Gw9qozњdlʘ,iӚ~ݠGȜRݧ}ݚtqUf=GsVn_nʃ\#ϖSwb0#u v97ګxkC>$-?_}$mL"\YHVx'V##,#;`_}{}]k/n&ulDipy:c9Y n'(}iYr;]gGFV>4X^eF}2z_& @4,6"fG_ŕj|,?1ǃĒl*rC7K-@\tfCul%5AG911ZkuZmB+[TlZ(LaA߇ziCu4'x(z6 NO]oxxͰE0of ҥi=⊐ [f\[bK`C}`'g?n|||(:yK˱QTƧ<~~ գYc_M+r16C>5ٽGr+] P0ۖxeܓ~WtBP 3#g=x7%Sj'6?̐˨臤l .i81&*b;"뺺D[u b Z|Wb[ "CǔCtGI42LIa V0h!6eRn˺߅1f I iSh2hPh0r6UDipȰra:_0Չ _2V06Ȥc|YFqԸj;K#ܮŬv:xKl Dd7i`G{˷r^MKC^dMxJ{Hns!FDem_1N`F͗5Mc*L.[MedVLUˉ&"1 O-?ĉՄ_a<I^|rSTV?Rm[.15'4fJr7ށ-ee[~KXx' J)Pz,XNwan}Fa;ލ5!9(@Ц}{=Cl,@~4Gy Yf8RJ垧$f@G unɲǏ1_20whU4CcmyxgRtr\'R^T{c>WLh!%1Y:%~y gw: hP+|301H:Ƀڬ{ qpq~#U;IRq#gԸ;y#K7KK7Yz!KJEEqzqEy6|j1nQaan}]9t(zn{qiw{ᓪ[rK[4v p<Ts;-^#7ǜKH۰chc7^B<+ 'FHCJ€Y|Ta7]'<ME'qR!_FuC,EjX7`-i>!w4EZuYɟN*ӂ ZH.8X&O-PsPB5r CΏg:(mh%>I(N ɭϤII; aLUVŠyb&9Q 96Y:Is1AbQX?7 %/8 yMZ2^kDӹ+z@4+w'%7%Nc6OϜAu r=FM7okB~MRce;c]qltHf?F&T 0;G.Zq!SA3d&옊MM?}]*3~}[6YdD-8 {F'$v>&Fk:+I&UmEHFH;+4ݰKG8(:w7WQ诃Q1*\\ q% YA\2&z?أ*0!v L]iL+29Bpmɓh^>T'F@nšyqˬIk?NagC*9u[xo}F^q"IJ[9z"Byz.8)˓6=GO]f̗Gjbݕfce^zaڥ\iMz4]]FڏM 7cټ'l=?(pEEMKzPn5L97v" Zؾȥ[0%wapl(Q`ϵ x3xr=nhmb?gA mtʞ}mF+AO!'9aA8&]ȗFׄ>ǦMs@UW!Y >ݕLxUhVc,& *;a&QtH-Ӑ9us™ϘiUkJZ2euRJ,o}F&/1-!0OҠml-7lO@YӴIc]Gԛ3|FBNCxbܢ馣-TTr08.V_m=iYEI3!Na&x]IɕH2l[)˽䊵\XCczuHb:XkbOË34\Q]CZj>F9 3OCDo`{@T6WusO^0i9+FF8i`v @s]6 hX&8ECL7R(d,R܇ĊW°W piyA,u3sZ"gj~r An2«X jkB%%lGND$fَhпeD _WGeMIw$x9}VjTtEJ\W=nfIdDPD^9NE^INk [;"F`2oUzt/{fʧxKX#PnFDF]v}B,6.̯ /ha ۷EF+.2G㎳7aO;nsSNH-98cw~n\1olxWzg>O׳*9L~)[ļ$}%k5Igl[S6f(ȗ]Ed@*W|ʮI|AnV}]Dos6,İ Uy0,-cAb[7KD[޽`S唚wa] {oIUs}! P#} E,{ k#Wx8+uL(l'DS_wI<b~yuUYiI/:H q.x-b )eS_ƕdJrFEI?Ҳ^xxG;l!GWIp"ZB4D&X+;. ;HAm-~OAԉ03)l `@ C)h'e'\HNvXr4Y%׌1".0~ T@nnK[mu{xމ 1#ѐ}q=|X7.fT5dg.{pCe(ـ00qYйF !{vk\v`,o$^IbY:tqŋL&0|95DEߥt[5 ۴+DI A![n~F+ǂ%GRBog'bJr}HE7oX-jZ Gm5X|xN*-Q@SgwA%4W+٤W`J9θ (rrSM+'az}e1qK%8!ժ<my~uGI9;rR?D ;?pP|IÃX{T ⾽[n?~1׼7 ̅FGe7 lG~#Cs=ZJAlOދWHi ƝsL\3G3(+ ޜ {g?BǸ'U-OjѦ'֓̎Rypp`4k2ɏ'2 2SO6='9x0 ]gDZWH30wH; v6L1$*֓x(@1b[Bh7x)MgQ3.ׄ4wP'v{~j|9.EKȢa0ӥm?0]ɧO*y{jwfM|UpEA+G_/z;)e3 ?Jwۼ̌s8 DPͱ]D.1II䷾7K~QBG`b.=)~g< IVAYQ^?0 7ybe/z4 soW>w*9_*G}hDJ7 L"f<8zxٿJ|q(0EJb -oHW1앱g;P DF+07+O.Cz>D% (s)z=$LGM2ךPr}a6SͽneP#@[!_?]6iN >Pf xs-ΜZعYݺJN_Rxe"Gt_&V#Y PӣT6iֈ WHB?!w2;*M]mmr]Jio ]B|Uq_LE |R@5`?1T.j &!)0>&akQ!Zvm&##V֤v2ĩ% ;sg. (qP}@|EN&zOBrF;3!4{2 댞UP 1EOQ"sP~'wn"d=% @Q%!Zlg%啥CmɼJnr ^hgOɱ)/rΙHPLA[[M +FoG1gIoQ0P8E G-::*9./h~R6={-[_f"ӂ@7+NJ706Z5(/3էƯ`ZzՏ˂X21JeCp^9g$Ÿztͯ-M߅I])>|zԐB oD\遂LU⦹~x SG[ַxpU ]} Cͥ; 4-EwO)*iV?asS:aN=عrlS!mm_NF_@EfZWϪݜɥBjU#9eV34+QBAӦu9b5&[ڢS"-au2t-ymQ"Nj~_dl2YL[/>g}*Rm1}zg:sw {UųnqpLEgbD2|}T (]P7jc%$zFs]1)頻J;glӂ9g*!t%&b<Ɯ}˥0-)i:5nY^0ba!h"0E <5P).^]u5$i9QDa,#o*l;"=ҧ.Sg(܇猠{ SO\^ڇ= !zHo}, T*Hk4\펢8KGZ&NL]xFE7nn9Л46Rb;_,_K|[A! ݲׂD_𣳸rEVyKtJP^*U1mfk)|1cF4|pyݗ+<&Y[?0 kd p>Xd% pGH2Ыe(Y偩?GgX ?b(SdtD#9BN^-MDp>[H+N+KybU"Y̳He(aWW6-_za4*ЅhZ0^LYPo.='h nz՚ {T/F +^YJR Eg_rj¶JAMaug0/܁0ڪ|we ' LlM#Qe23 q8pJ@e'U7˚5(B`,W&qd H}٭LحYD6~_B&ݰȈ%:Be w{CٓPݝԊ|sHf^_.I6ZxqY 혫[f35,)>utS9:^J5,9l/2˜ʊ(~zuQ'eVz ,8:S"AjʽBBdv, j70F*!Xf#ϪS?kФ,qS:;|grqيuPm_cz2{=qAqT2DMA$e+Dy2&-rnVhoH#պ Q`Vp.9VcNC+/ZGkndo=&{ɽ>F! {Ji3jY&՗iUFM0ש} D s\4w@Q԰h Ռ?P(u9uk$UmO\SI/TK,x<PrɩC8#DqlF'517wsvwm+r"Bi.b p<܉K-o %V_eJupjS^y|Ay-+/a=+pj mv~]eh.q%Nź#ō\͡YUzE{❋lI: LtoQ[Kӌ@?m=(JN·d !? <6&W]Pl3zTBi~]dnO>Չ+#a;;KȲj,T &oC"]֤zCZsű\v?C't}f 0W( g]ܑ2hWe)vvq{BHp(< Hф͖9x3 1" SHSn7kH ~~wr|p@Gw_1Sd]M\OGcNCџSsm@2V>-^S˩-ӛqZæprxKbwqZTY,vAX#R+򱢱:> FYչaؽQ-MҏrwM:"l5?@+&7ig݊hw ot>^JYa.@ xt ZdGS%켪7<@NCx>񭔺mgL<+9keb~@D:@SbdtUnq=9>W$2FO u *,j8A8`7U=Wl) RhWJ@ǡL*{ :H$׭3hqGve^rP$ XXGl~'Yu"h-05~C_ΧN`ZXN e" '|gq=nat-F2e{[*dBLL~d`Z22)y,*I48y1a0+ìkE'(3b SNPٔKOL,'z μ&c,y6 9]8Ne*sG3H$5dn?Ԋ( W~D|MD\MV!sQ\żk$v-{oo2'>z;ɣOW}&} D;bqt*hMsFꅆ΍Tž̃;+Jhб:95|T}pl^q`例8 +;P3M3:EmYAoХN?DIy!d7OO];A)ȗ3)E/aӳ&DV!>!yQU5{v9A'>I7 q*8:nWmi}aj}X!A+hyduV w2suk4Z?9тgNhIP6x:4j<Z=o[&C7lO|M216kRڍd Jcsu}TUڵ,mw0FZ$2aTA/T wi1\27cG/YZCh)p7)dsg T3c, N:%T-tmeqK߀tP o/xȶw'(ꥡa,OþIADzYz^v]aRxW#,˺V ukU;tE邟f]e(9⑟= 7qI/@dEZ^*6?Tq_1Ԓ23B9':~/jzMCG ѳ.v-?otiu)5*W\G,^-!CYHC {N i$! '_9yG6FN{}YG%'34˧N5vr gu_~t1}7"]b_yCHXw7pao&S'`+KvcR8)nO;xk VBR\;7B2Tyn3ubKcs)fPN8K̨߸Fd=AeSf`mB| ~tƆ{jޗrf8FßUhx8A9aiEfUw_FW·Í}#[ a {; w4|N27&3C<-3x^ԩ}w[`Ii\=IZ潭=1~W9yNa mdop:ȅh U[$j:ާ'4~*m̏ćqWY N63;8񓓵+u8!ԑxS/pLK%0 J+E688,#lѸμ N~_ێE'ۈa(.%w4} % #Q(sB;++w!}ŧp=c?zplGˮ',,$&?n7LQq)A6fB.ksIf~0&r˰D}IWZf8"v ]mrN FFlq5}bYZC_.O,o@{nY]B=^NxFpC͔Z"qvY9F40mrx O_V'J;Cm=OcL X"o R[~ h /wPZB>ߥ ysS4rbeP'츔II}54V'{[EJ_&@OD YpWG6k%P[jO)i+M3SL$(m{ w֞߄# |ĶV銗xnd)y,8f!}jڋ}Hv*zqc"Hb9v3\f6n˒%54pNºﻴ|3EAТz\T B{%#.Ռ-DBU%q;1ݼ1j\|.?3dV N~P+~lU)ֿ9\OPI싉`@{g~颠SIzdڤa'~**pJ { …簝2I(!^2zi]r烜羞Jޝa~_rzNg/s% g*|L[9C?SV)ݥ}piȌG/饒E:sv+zao_$e/K8%w8qɻKrY)뚹#o\2(d>|n6} 7ĆŃU E$zv"-|9B~!\trn;O(Qu #@!{ӻ ͹Mb`Y-ZO!G§_iM_9wCT$_>4ӹ$9n+yNu)zU| $5"sn΁A>|Z{%V;d]8^Ӕ mWr;'K$a3m_Z])0m9p1 p Vz]Ҽl1~(J*'9 R+#QAYyl@a~i9cVjCnd;8^(3+ +nN<4 lwO9+4@d<e-"I5|RS'V 3"+ULl%Z f/ieY@c%%"2e[n`!b\Yr)d~MYRX 8ǭo# qzDָ~4TFUFVJ nqI!4iad=ųVoN9{fI@ '*v %ua2 |7;<儐X13X${U&Mߞ $F#]h "&3~>D. V"O{Q|݋lM8Bk7;Zq*il砅yJ6:U{w`)0aTϹA. ܞ/dHx$ X ;K? >_ =-&2޷ъN`߼?̉ ?͌ f-z0Ԡ#<@ ȨZ8/A>f}RYDsvkVfQYͻСLVcSDKޯļW1$Url|YGL67w07Q:NJOi4\`d)V-jݏ`Z5s=} !NL+3΅rW S*dC4q:~uF+r߭G1!yꨪgjNd 4&_t4ji6ne7Uł :9DhY#7z0{.uwv統TXvq 0*XEeMbtgz,bT<!>f$Utb0fcx*)߱ db|<1nG[';*9w¢C9F4`_m, +Gč N5ѻm(4lqv(J"6O{u,(/[[֔\;jԖZ^|`VȞQl>0$BũNLFK9$c<ۅ ]&gĄ 𨆧Mq',+1VcBҰ|gܩ(W }Ma#":m@ WI6$I0šHN̔ѕXafNpJ^n1cj(7H彑gt!b5 O-bzWA+Kd'-riw =h=ĿZk8IΉg]Cѿ̫aB1\蓁nm&X/ ĪMo=5ЄU?ue-҅w]>ɖ’yhyuEW?A;6ٺ~*Q lIܫxtt>fv6 ND+b+iJ#X%yǚ) s/ i^i zm<G!_ ې<:8I*n3p~_zS^N !:$|$c!X ze %)f2}+U3ɵUX-u6ȫ^NF%Y*bD}+;d$/IX^;^NR]j)a[sn hMUdo{D‰jQ0ޕwX_ 5,Nrg\ɨ5jV.W͗go@vc-v4SMC4;@{7--fs=!!t-`WC^qxΐ VgbHn1ٔKPhYm_eկd 'lL7!d0 \^l ר-!(e2-C,a$ð0s>39qw)mG:¹Qkz+81|&mG Z~.j|ԏá9Wn׏JTX .+oL [vi$ pjH%BzVBXR*hѺB33+zn5vtqiB2]ܯNRXy{\Nŷ VOO{e1 lv,b:r\>*,3/n㓌'5ki[~ztǔӳkH&{ !>sEuv2 ͅ,40I.!ھ4yw㲶_R!^j+PDX2otD-F\^|M o_] ^Tw[jЗRe$I_O\ѹ2*ĈZ ?]NRfr(q'^Mt"J1BCmU/,&DcCYwQ_V`3W9ZsKIQs=C|sici KGkS1'qLH#hI*, CH=8@rW.Scq.{0V\ٗ=ag\@&oRNCw(dKzSz6$~?cJF'm uY|~|V1QU@  }?Rb*#[W?_4Dp284[S9!>.&M82-="#ܢDaRgA+#<Gܖ] }d;&WM^j A݄^Lp#[!tϴԽì_ M'_3Hj.eDC3Q>YN>)Y6Z4G"@ee}RslXDV{Uy?6,a+;;lӡ;rH-9)޸)ُzP鑟o 448TswyC e<%5SR\rذ#m!:QV̂IA]TWaJǯP6.CG\Pz>=S j'Cȑ9A _j>ȏ㜽q@ Ep2o盳l+>bixQcȵ[д YCRk|!8Bk+F?<~>>>O0Ajeu>(3:{5 bd+_ ӚO-77;gܾ眘4Ѓh8ض4n&n-=P@8/5( endstream endobj 275 0 obj << /Length1 1873 /Length2 5762 /Length3 0 /Length 6893 /Filter /FlateDecode >> stream xڍt<6qnأ=sD"9\wg=ȎȨEMF|{qwگכ1TLcĠb`q<@ @ G!~i!8$-C 2uH4(Xȃ@$aH{8@Fh0X_\aPqA`p`;!\0#xRt]@OOOq Nu", D&끰|/`sA,M`b0,@pG4qG#btTG`@C XO08 C{#ю$ 0{E0w" a0$ fG$HT +YEq8${nm@۫a\\h<{~H,N7pO/D;|/hF#tr"?2G d%$7 C .&q8@#Z_c+h`=!h?މb?8, pD\?05q1h jK?KTUx|1$@ " Cj C ǟb~s/~0 1mF,H '~'߽iP?B= n;x}j Hwa QA;~7Dz!썑xӏ5w0/7GxQc쿟DJba޴ ~A`#~6(&bu H@ ,i#9"Nj$(vIup ؙ_  /HAbAw_x@o(I_RWjcLL $c@ LK񞘿D ?B{{;K|T7q~/8ᅀӾBn+U9)6<ӹEm>15HMqDNJ\'%ӓjg 6͏~lןr{ty kj@;՘t{n) m̾K(PS[F%X,NGw7ꬬYHJzCjPnSo>旽Ԏ^TX()s3z[WRZ9lgZ5 ڪ!^˓t0ݬ^s7B֬h>LU25Y q7+N?J]b g,Tx]L#Mc_ۛ{>gL :ew=kRtsPE(}\An ")F(FOk{~RMLWuBuVsdsZd;-lDMg5Egj}>$nW{h1;WD/7w\;$N7YVF~^j?cEɹ4nIN>n3*܋Ɍc8tZ}bĀ{[ gDJ/)έ&\)§6&?~ qH q;8ȆN-[>}2GF͹ʣ'װfݩ93n=V{(}έ]"= PZUaqC_43ESK:us iu Ĵf.T)E%:];V]*ג9{3>Kṷ4hV->O65,>}8R (rFɎ}y 6"|C:G9ѱ\>3nIs|0' +QN㗲83kS]+Ng5+/DI ڊ5G7L [ȩ eЖϨ_I=vb9Y)H( <4=bw6>qPu{ln٘whJ-Mz9%pAyCWRulqF܌^U2; 2l:wfg)PLV^jӞ8X>Xɘk{2}LhNW ۥ޵[ʓn%Fץ: cB,x\Re4|09#"ސS!70OsO,o$5$4U9)^`|j|)ܹ8hh:9n dȪIZf esmw-:ha0 ;zҗZvF;t]Iu V&wHvvV]x҈vI(9ۑت)2PO ]0{HKy5fDIhH@-- }cDYaiPI*\irpOIpQˑE=O@cmX[UebO|KM&Ht/vx@j#5AɑT~ō/<2ݠmQ~߽{5zaW#B#ӅUٙ&x>WԚc~Jx:%'+ծL)4<O| @F |bӣ76mem܈ܕwZXSurW6'h3.|5Ӧr'H6#g3f`fcō71FaZpaǸ]7LmBenZv;ΗTFxS0+,Ij-o| Bd^$CVv&PÒ)zëhHݹ]y42PPdXs+6+5Xm} G+B˶yL5gM(¸@ТZ/W9Llfho Vuu!y\hϞWj7U>Wıy|0]6hgSݒ5+fޖ>6}lX΀Rv1#D5R!UGг+ .uao i}4Muާ<''7iD|Q5q&M)+Ǝ /BʒOXl| amj^$@k\v}-S7ҡg2]`g{Z0nrc^PZ &%p[1C۶®8.!{iǙms o"cwLndDsɯ)30|C6v.R[u;!/z,iXJaˤ`8ٷ]X]Y;:ŖM,X %SgȔ i%wkDҦdR/%t}Zej4R{VN[mݍjGMSvR*?cb]TBGrĆ7 Bw6A%JJDgPַjfi䶷MD) gw*JcdZߛp=VX2tnc1y=YffB)F`{; w;m^*Pg CT$ä/E}+hP}<0\6 ? LϲŅ“^/jh. ާ=S=v_0Ft–gχ34E땊Oumh% GVxn+l*链q䝵l2͝D#Рo{c)&_#NEe ktkJ ޼s:Ps~k'Q^Pg†EMՠwQI"Et]S ;]3'ݾ>i7:' Iy}ZJ%˸1>Ֆp| v 㟌OηeH-]#;d@IDO)Wq+;sT<XLcւ^}=x@F! AhҍJ#2XH[X$| TeiV|DwI2?>VF͖eBOQ?O+K-ѯK?<eH>qm=D3s*$ Gv[楍kM\n8Le`=ݕs߱eo:uZ=ּL#g(yUsߓ*Nd0% 1~-vt_b{Ļ!g+ 2iWE%dh/]ZO kOybcdܒgj">ͣIr|4Yժ '޸G!^[VRR/,XrKOwed*ߎo>{7t'ÄM:A\jyngcm+Sg;,XDyKpՊMRWg8(ΝェkWO?ZT4y_O6?V{p#N;8͗d~eۏJR\^TuTi~4#>ϑ/-.=./v/!.dݴB!cǶA!SM=k2:WuN著.gp/nwKKy&P>YFDfN%2ϐAˬe$d"U;QX_hBʲD_9 i }EڔKG9CYߊi&2R.WhqtY ͆)[].\uquWLM#%΅17.;Zg&To]A^-]X<}~Jom8JJႛdi~#ECk%?kdn,ؠ2:D{;t1nn~~_/BBHD!p6 =Eט ۩vb(t[d#srMB݆\OB3zr_EO]Vp<υ$3ru86$Y7*ލ6q1#@݂M ;S[#XϪ̿60?i6Si:>ֈcx f[}ۡkU}Y~I1^͍_GiI9v꾶 R0AY)Ld.KEz%z &9*FPa% M\ƻگZǍjAUS,.jupQing{"TqAyjXbCc  H*:Jdkrp kqYO2*e_61-AL(vWg+ZEN\az tT> y<^!ķgI(X+/͠P__{nnݷdWN7^{]@ޞegv+MTø uQlkSgE v3@xTJړ:R^ >EK#"xzMM4?5Rt:PeKR4\fiNdiѲYyId endstream endobj 277 0 obj << /Length1 721 /Length2 5243 /Length3 0 /Length 5832 /Filter /FlateDecode >> stream xmrPZ5P*P+ł-RBBHRJqw(NZ] ]9{vs^Da\<ym5^>?3# G!e0Q> Ёx^f neZNPB\ր...R.N\\M:0m X0UA]CMgnP[N0 @,PH(/MN\ @,Qv59: ' #Uv$I pk:?0ACUA\( H|SBZ9{@algB`A;a5h̑/Jh{V;`PM8jKsĽEa wvBQH>y?r@-e9 GZt^;BK]4=wn7<\__d,+ D?r-aH߆o"`n0 )XM|͇BoѢou٧x1 5!wZCTD#~Ej(`8}E.cwVeEo=J; uCt{MA䴝Re|q2m-D?A*MX'VKZfH^,Oce/3SYgٯbYytdWzg}.VbC}DJ/aUֲR+}ծP[yW6JQ G8[am0 ]VoIYk 6}|nz#M H} j]AtLKHd_,~Rɍ?&gf N,1 Gbtwk#kuCWKU*1Ohh.;/v~Fpl`JԤ0 rĀ8;.,W4 \vuŽ8}l0r|5U͗|>yΓ䫗Sj\]W(/hǁ@x* (bA,n ңJcoN:VWRش@$tl=m0e]󌭉Nt) o&ƴ|n!3i4m] |)xZBfF?aov1 PH?/B3<S^56яt.;.zl1 Y?6?NGYB4d&d"kXkH ]SFh6co)糈j&%[SPn2^h9>g&<

=7op܉(ʎT/( Qv l(y .Ewr9_gR.U2.#Ot7)sZC˩/A3S¯PԶL/!ư T/TƐ-r[!+ԇe6>o;VBM)ii]f2t;}"4ږզey)XΒ`l+ɷwNyů\6+7 q 5m}:鍷w\x(g͔u20F+ o} I3(XmDYbD&#CL=61`uN6?NA[mԺإD-W.]%#,n{@vݣfh:ҍI^ŝZ\E.Y;qAzCfDlK*_.T_|'YiW0<cdlTr- ;qP%Ó =dpfeK;J̩<|p7':BjUݶ^/I$G6L֤?XaH?O__rH1*1) Ny~Ў9Gr`nYʨ(~7og/q.0C1wIqW-:|cgdy X`}JE wfp``egtB@Jg'*DCԭTNGni7>y=}0tx3sL|tڝ7#ke0˽` .1`A8hAR$1o'=Z3dT)?0}rUc %sjõ>wV"-8<>jPY,V!}zj.>CbN /\c, I2&iO\-b @U:u+?>8W61YNECHC'VPrȖBgq_$cFeO14Q@TU0}0վO}~/sN5)zJ c-I6cx?ek+\Xy`<Ϥ>'q$Մ͙H֖ܡii(3?tOP!cƮBGUQ~?_DOAfkK+$YW7D6uwNr4qͽD4u2A]ijOvWm#@@{P/^ Ips74`!mdX0lөiqX[9m鋋=jVzC8:e(DO1k|1k sRh<4`4)7LhHdR/wR+uK6 Cc fk4äe֨$)R0arإs{m+A=Qrb{+V?%i5+p}ߟbF(2I /_kL,ڻ^L$L/'G`2&|ln=B=" 2?,M^qS4}߼gW8D Ty>t T{0J(@Sd̒4k}`d-?̉O3XPg{eh/ Sy-ǔT2!@SJ=1 WŬIx.ɾܩ'%77\Ej2i\->] o>haHL586uϋbo>4 SDH>%j-Y |uQ8'-HmwjlJIա\xpym )e@l]ځmڝAK%U2=1['",ݚκpv8R [2g5 y &\5_Ү#K\TEzW<2ҷJ5< UxKʠzS!O,>8c;Oz^W/MrBFN*A81u_oݭ2̽췸ڪDP0 !e 3-GK^eGqsGx^䀍^R\D K$}u󾃬?FDsuVw(BVŏbqz6+?1w~*eM^n@wתJ.ޖD:cqtzgz -U<8#)-{íAi\y-!wY}ɖX7nkK Fvg(KI N94ġBFhvvyRC8EWW2?c}aagQxb]c~E990RFD4>:+=(s qwtUm[<8"\cX`FyCrPܪsmgSiTB'vk?q';-4^ܑ&l dr1CwDwPڋ.hutJ9Ro,eE Em\9͕Z%W OIo=2=Qg9'>cn G `1L7~&96zv3CCHl ȊFg-N"}РQDU*eԢB~Jmp!%+NIiAnWO%iwI0[9^<91N/ʏ,[<,gScjEj=Z9]= Ͳcsg呇Vz 9ۋoضUK(j0p0%$9uyV |ė֙2P)M:bswmc=N̩@^t{#2FF,8$Y;(>.A>I#ūN9_L}T(qGMhѧYu۷k^م|:u,RNoXXgQdt8|cAt${ A]c -(*n&@rwaP[O+o2\7:^uaBߘR2ͭt ܪ 5ߚ#S?j7L$IK3;SAsaɃ!fES%p3iid6aKu0U˙Yg*.MR?g&O'2sʻ!A]icԸ!Ʊ${r:\i_@torڏ&cf"쑫~5']>oF(G #C+_o&װ-9n ]LͫJ^]:$4{+]^$ +ug!guCK6I3(hցAzk~jp{G*TvJ@olR'תyN&x41q@L8 4\ڠ}C$`agY$ p{lr>֫-ҩbPL;&,^Up$cu K0JMȓig4ÚoR W?hY/[Ь&UOxOkh!=P7GeûQt.>ԕgd!P\ -@?' OP_v@HH:eY,P+{P?aM|}P+jo e[ BW3f!83Ecs^ʊ,RMr?%ˠiQw'X7zwMStBufNH6G[.(fVAng*~afɦ !ƨ;EuKoUH BCp,eZoy DODeAcCCf&T= @L>`';ͩ^7n45߹&.gt@[O ق&(DSDIP*:LB}eJܕdƯ*Hehq՚[pPe(=hejP'/ [XR@0'd}>,-BΉ{p3_tc.L[=ڣx!q :U >mx&܂EC)tk2U[-zaZ(k2nT 4^w%3K3̉{4!kjJ"nۦp2qo`k/?zH.T"*=2c4q&x2SOCb^Bq$t&ʃAZ̻N_,V/ty4~>2L+/{sRJ&/MK%/۳GBfKq)*XϪkGK8][LY/W~M>T^1gޟ!ø s$Ï22g"v|˔H 瘡܂YB$\ZXAs× pec(D g"Rmg۵J3 8+{KԒ~ O^FǓ::%*{bJw܂!.)O2~k{14f܋qy\'Zj*N:jnNelZ&VdC)tRޚh{fNLjܷ/B&a68={UXY q@F\ys\qa]sޞWihvP?9r@8K#=s?U3a3uA4<+dډB>'c8XTOPŀ14"c캱o kG@,K/t[*, W b͏KkvL-%DHqRe[]&sQr> thO&)U޸Fnsm4#GT.Ljkܑ/w%&"]#:F~$ o1 Uٓ_'`- AJl}~V|x.8슴vh/@Lq{E\V|HA[tsMf%0e65VxW P ^]g3!3źt r;NNjNFV[`Q Z,o1n0b>a?PtRձ%H坫}] ϫH.(9&o@K Sj<_$q_g!sI8nⅣRcf2+DT @*O"ѿFo!p6ST^”J:Ϙ4M88 ~M9|<1A F'h&r\S#K #޸jz^cY9ҝ,|=OB^0T!eq_"S4]ίSNdk8 !EBth㯎 ۪?0Gד-1t`,x្d;<$?65l\k<ۂ.c,L¿_?˱eӼSk/Rzs@Ҥ*H{u^2Е=m\Noµ--$R}ǒYxNHdRrlЃ]uaе!8&MQ,[ߜ3/}3)M65H"RvE$71IΟ6;7u][H} z!Mփ;H]_WQ@+OrjPU 1Re\Èe]qTдϟ*8WkaoM|DsDE8,{SPq=+:ÅmĚ~ö'ttMh,@_~ud[p *Ga3wP887;S޿FR`> LF헣正e!=.e_ yVRdxoqV}7P4P^vmt!ƥsMQL.6rYb[9^=xǪmeAqJP@CcXI`VqMv1΁;KZ52a$U[9G׆qN`F^䎥Th?:;n<9Ļ a& j$!d2jԇaZ,G)EL c kpIb(&{2":$<Ņ/ `r&_Q-l|tu{hf۪=.|pԶ*|U.# 0u臜bI>9G@'2;xˢd2z|*QabSUgM^Ò{Tp]1@AުiuXpٟ'?M-lwK!+gB1?LcJ,hƙ+B#^^.Iv]LO֟|Wa]}_H 7㖲5܏XV^P^ C{xt'ܳYb] m-Zrn7c]{Dj`O/X/~[-m'.s Gl]z(SriЮA̚Ź21\,fg~ⶤxb~6N*PY0'uU%|O QpϘ`=3h'Gj9ރ#6&H^Rݘ]t> æb`6  'nYL^55ӈQ:]ҍ֢L=r2,mf\ҷOړ,Ncyb"CHnpԛpqnaoUrsK+,-R Z-gohG=Bv!-ߔ/FZ>yo:ird,mO]Q&ri?1I bRI\Iłx5Ʒ)n.6j}%&4s6Bf'~UoCyLtR9lՠQ 12^˸,߈g SbJcv/)w 7pmA÷f&A.Ye#.'0&MBа,ƑkIne_Bˠy%W^q7 |L%*{meu RERxIfLsû块e[VxޗTOtk RtuY ATBj18O^S"9L__[)jYbM}V˹`W}X-f{aϺ\jͶbْnjϬTӚ|6o|cO%x!|ǹR$[tH*_~@e*"`;I KT>B`5IwlRz7dRDM8ږ17]fA!AĄ#NEH C#F/f`t ^>?ɓ\N"v x."r]U6vG;ԘmbaMY0(Nks9iE;^I(y)[ % q줦 e\yT]{xҊz]ن=_yB~܄e%Wj#$;"ߋs-jӽ@lLbl挵8h e?{_I |s^x/4rf;vEO_|_P]MH'3ZT@0K3';KyBNWtwC<;HXih/A)yc: gBT_&/#jxJMEw/F(h Rf#yYIrZvV^*+PivLǣIx y= ,r[Co3M#&F-}T*KM^45QjRЌE<;O'r[FpO{؄qfIHPDV&ErwQ<s#3cBuz9=s-7D~Q!V%m%s=N]4h52zxOĔ)S jK_8rFqZ_t[-%F݉dy˝>1 лUƷav$zjoĺn$"1h}95 #R]<32"%c#׵P~>4+k^-WY(gjNB%^oZ+?'鳯AB@t`cz.4;,>TT=x|;nl g$lY/1e{=xr_İ%9<}&%{lre1<7i4ʎUďs]Y.6\zD8̄ yn:'!͖EGѻX5:El.'KJ1j"Kc.a[uMk,G Yb^b7Gm8Ub f 9Ԏ|; w<~$ [V%ȑ~hnQ.A $yݱjeMkM?/xۻH~8кH,V808~>:A]R)78WNWBh4r7X }AM?:Ug-3vb@zv5XDPT'|K{kZIlGr&v1K⅞%!pVq3(xT[gu~G! <̨ys6uF2$ ȗk!3fpjUE_vTPԊ>~AW> ā;돉c[ǹr>1%lc:k dN@B8NpT@eq'x%sfw-G#P'q!ZfA  :d9w)K_s!-++,2{s3 Ԇ8lm=+}B>{ZoV`DKA#L9&%[V/5muC@-&]%%bgc1Yfc?ي+,)3(e7}.ʳqQN{kr}j.6GլҏGݟuDŽr!'S ٯqx,q͂=)ioyA<اxۂC]aU+˖}HJ&Ø\4u_w߿\v0uiwZ0zm85u\l2mَiđ58ȩ9R{ySTm+Z^9Ow򴥉2f+һb]obͦ>%] 2R5X3%z󙮴0)^\M]@S3=,Cro3tá٘ߐA3t<ȁh")gxB0~Or:,R*bD{srF͵ڍ&[I ,P\HWե֝]x/G} Zm|j r"'rQbⲄTA̜hq1OeYr^5Vط#Gd.tk׸tw">,Z,9'#d, cddGVOYJ˅Ey٣ptK 5m3}C-#Mi)EK³{ L,PӶI =D- ``Xx6>!LF]YQ23<`l ga:e`}3+o"}/FtR6vZ 8WGY:S6-07,%Ke2au?,V؞:i\K{Np&awN}sG$][8*8#yif\ji>WN/_g?ҁ3<aio?XMİDrc)@ zl}Ob؎ [؂SцͷN)=%h$]m=a,M]DK*E:! [yMKԸFd$F\ 1 0aYu6߁"W+zs &ۃUᴍ&5zٯKcuq+AuͩdDJ#A<:6'ZW 8705gnHN>4x[ yN-_d Gk&Q.|[K$l${"*5!qSNKOeKk׭1>cll!2 d398)-e-9x[Yz5(@_ɜL} 7Q`syl-wJw 6"/hGA/@Òάo=4Wt c?~;}ت뤍=3EAlq%~ ˡ2hA:S=$9d\`>\IUf}X(ŵA13eA0%Kcu5]Q}\{ث6ș1 WkXKjm__ޡ$fkD?m 7e. >`.}U8Fai!apww8h’ާK sRyXlu%fr~!.U-qIr] ro񻮊 #MX,1^  ʺg45WcFQ-JXܐ7z Fᚢ ƁzlV=x҄X/[!Skrw~N]8UDCcg\kr"z)[Ml{M]%iTxFL@r괛j5 W֫{y c[=g#m %;ۥWsF-T(t\Ae/A<s$QO IGQQ'H+Ri8aM]>):wvVE#GKڎ&&dH@V{"qù@Cw ;N"1= Dm֮{kavzY ~JDlCiK* ?ـ" }%Yto=$ ^o]7U9|2oZƒ >˚_X))ˠ h0$P}:/7w-!i/IbTV!)?@DLlrنb@G<CSU v(FbQ tmPGE^'?/fރy+?^+Q*zw]4h-~t+9ݮ[ zpn3j"5Y(S,kvmu9#X ä9À \#HYd5HDbԿԣhL`y"*iH34e)<Δ Zn(}?E;7_U{w]>[-Μ~c~)Lz>3> 6?/P}pMv\ hu,'%Be_$nJ' 'mer 5:FH@fOIhYHy)lM\-$LCi0:=s`+4ӈCz%v΀oJLMn:rpkP,}~͸eeWPv5c{D&[7硼fs刀~q~c}}*y-7-jv8⢜LyOvUKF+h>wyShQPeP}m?ҟ\AIAv[B$=#Cfׅ\gH{=:&Fӄ?X[_L8RU."`kF#'Da&[|U 4ץkdM}AM 4+"%[j;c;5 jQXlS(nfwZցgw aYL6ZU̢Upܱ/Ęc}b&Dqy{ 粖?m7?ඹe^ҿ9D(.j竼T9o6-,}H2SL((eMU+qQ6TGp4CPEp MA!YAEW#:PMg ] :OCnV:W=L ~9DnSt4hVU/& pE?˝i4#[K j=4> stream x\ksH_Cmޚ*`$ Q8v׿9-۲;afkwBVyε% Y( k |<~/tD_WЧ ~M$V!]"1=nUDTDu4"u; ;*;8"F%QHD[ ]]Ƣ%B[Z4B-PjG%U$iр LjJu .VUFXM-KYib%@+$C`JCH|jOE<YD-uaOZcxD4puֶp&h'&a-= {%6uD%`х*jP14/}(|"MHM*51aTDcHVaA -X&]H1 tEmĨTcrUzS dj#IoڳOJ/I#QԆ##F l.hXoH  T°CiO{_|z78}+t!3 Oz;;  q(uuRc2YT Rp=ŇB?(󸘭M{C0|ț &n5bMy]>$\r+ZՉ#V+87Of.2٘_v`x^ yQ</nGSX:Вq5LGBSNc#0Džx6x;( UGR%-lCF` n@Ed-Q.l.$ZDȼZXx+YR;nbE_p )}(R֚r*ܧmTm\Xܛ}[qղck68[yoXz/U!2ʈnykzφUGd=t!"tԣf5=ZdnUjT;UyM}U,}uOyݿ,(AkdA#s2T[LG gIxkq]'"yd0zi?rX~Dٝ+ѭE,uew8苳a )]GXbTD9.k.땳ƫIN{d,~4VPo c %c9eBIBݭꢾ N!x6c/eؿGZ\Gg$iךkZV1^l3j/e1mn 5( 8lbҝOڇEV?}UN=!Õ?7Hq ^uL܌'=oo`4$p_Y^buNjs٣{VqqVܧm,s埡ˏɾ+Oqp&ܗG#Wyqm+ZodGBкd:y֛?ϼ>u;wC#+E\4Y{aceH k܌2Ȁ:Y&Fx"7<{9{ާ}ǶxH9 ];-^)6`W{=ic86O#ѫi-2fn-QDe(~vR\`x6i8浶 u.\2=Q復h>u.H4Kz 8Hzc˯G%APi'L{lsVi2q9T0>FV yޥzppi T:yP43 g\' yv=K1yrΛY; Uu#S: kU$A;.jͬ6PZ XumIIqxrq{kqB<'VMy+O'ғ*2BeRSrNM)U䲵ɼZ;@0H]4SH$KXۡ3.>Y`HDD'vˮ 7G] Ax\z̋>36ז-,洷3cr9[ wSFjFպ䵚+Qd22(JDf)Cv_gEG.f-!>ʈRlMXsם)ȳ+Uc/GKH % 54gU&Jt,DK~^a${YG- "-M`KAvs\qJ&@eĆ5痌>B}o<0H 1#,UYׂd-6g/)ߤX_q<]+$q[M/ݚݳOe8qA[=#)rzI*d ib$Ajϗ B!߯ԉԩ]F>.9ܒr8`>4GK>\CiX}%5.C ظ<3#KWiRɤM3& 207U7iݓ6DLӦ4V)ie?.?ӏ\z@I*Oӆ^;P}]-rMIkSE@>aif?Ub9{ۢh0ݽMfΘÆ%[Wz|zjg2СW%0\"2]b nq.+ZF#:$Ŀ|"n˗Z8Ssm9er)IKV(z)~5`ߖ9vwww{4:z娰b_=vxO4A};dDK#ry^՗W~G2XQq٫O;x\]B~G6barHb~OĮ@?Pq,ފg+E%xѕ5}`2J\}}ѯqC胑\d7հ'ՈC1f՟XU%$>/p(cuPCmSװ#`T۱' :36r 67 |Wòw^nz9Dge &]٩mx~W'uf+fҷNn-OfPjRDzB*#"f=)s4M߈`z_"On>8Oo)SAfZxkSd-O `dcE6{~.Nmv)o]Zx ?ti>fbnlXvzvZojK'eonq&#}g=&E_ysg=E۝izuxkK6~A~V ?~+gOҌ%}k:`mYnsU![%}-\ WM<̩'ge;ƽzme~ v= b:AN#3={tsa)u[#3 ,Io\T}{t{̯e<b;RЋ_X;|v}z9f[=\8D9b9|n<"b>m1axq{Of̃7ޞ4q :_ݸUw-xiyy|l-dkuzW˫kf^3.O endstream endobj 297 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.14)/Keywords() /CreationDate (D:20170808220304+02'00') /ModDate (D:20170808220304+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013/Debian) kpathsea version 6.1.1) >> endobj 281 0 obj << /Type /ObjStm /N 48 /First 399 /Length 1507 /Filter /FlateDecode >> stream xڝX[S8~ϯ#N LI(e!%! ^0I{t+J(yG;Krh.IN&IaX 5D@DBNhnPਉ׭DAn8>PB?hfpS5j0N4#,G>PzbTQG :e`0.'(zQ'POB'Ee13J9Lh NF r+AeQ4fP;ш*Ǵ!Y#9 ǠK%)j| 'p#0Q/ b&7 i/; B/ۻ7\XWftت^\7]4-7?֘t_>x7 5躍:Fg4BGpw:>q謋mS@z=x<}h S=?L?M|rwbg2r_]^;Te7D/xIN1zף\MOFC47}K꯻)ߜJ==2?4xgᓅWhG;'ç[=f:tey*NQh0.rأ!.'sd+bD4$ QCFgź ψ| ٣Y_kUqiƗgfo P|rG|KFF?aPeOy7Rma|mdo/b4cn\3Pn :4< cA|&{;Rmu(W?D4)oJ+BLSB|N.d_}Hչc`yrt&7eEږ` :|W"u&*:>PZXu桙y`$u'--B3:wE꼳f+=]^;c;,(<(QN̞6C'ƴd USM ZS}"BgiG80'b],f}<*ru=u'8c}Iw*Y.0 'O{ S']Rwli>v?~𴲉9U ΰ XywV0 ?yR Jt,Q(a,h+QĠhaZkjƘVb a%&.mű)+IJ_ azkXAqPjt."5m m" azr1C,Wm!‰&Xe\?0 5nn0Zt#hjV 4wVD [f.`}`:qtxm1# wWfn2<>SxY endstream endobj 298 0 obj << /Type /XRef /Index [0 299] /Size 299 /W [1 3 1] /Root 296 0 R /Info 297 0 R /ID [ ] /Length 731 /Filter /FlateDecode >> stream x%SqyN'%TER)]t/Bo4c4cƢ?aeƒ1ccޟ6zY?~C:Abg6eP8 t(PСCAb&a dL ɘsϻWZp_RZtƒNeO?)qyO^}TZOs.zz%O(zҚ .{TQG*rhFhfh m?(#u@'tyC"`I endstream endobj startxref 290828 %%EOF Epi/inst/doc/yll.R0000644000175100001440000001602213142414370013452 0ustar hornikusers### R code from vignette source 'yll.rnw' ### Encoding: UTF-8 ################################################### ### code chunk number 1: yll.rnw:146-149 ################################################### options( width=90, SweaveHooks=list( fig=function() par(mar=c(3,3,1,1),mgp=c(3,1,0)/1.6,las=1,bty="n") ) ) ################################################### ### code chunk number 2: states ################################################### getOption("SweaveHooks")[["fig"]]() library( Epi ) TM <- matrix(NA,4,4) rownames(TM) <- colnames(TM) <- c("Well","DM","Dead","Dead(DM)") TM[1,2:3] <- TM[2,4] <- 1 zz <- boxes( TM, boxpos=list(x=c(20,80,20,80),y=c(80,80,20,20)), wm=1.5, hm=4 ) ################################################### ### code chunk number 3: states ################################################### getOption("SweaveHooks")[["fig"]]() zz$Arrowtext <- c( expression(lambda), expression(mu[W]), expression(mu[D][M]) ) boxes( zz ) ################################################### ### code chunk number 4: yll.rnw:392-393 ################################################### data( DMepi ) ################################################### ### code chunk number 5: yll.rnw:398-400 ################################################### str( DMepi ) head( DMepi ) ################################################### ### code chunk number 6: yll.rnw:420-424 ################################################### DMepi <- transform( subset( DMepi, A>30 ), D.T = D.nD + D.DM, Y.T = Y.nD + Y.DM ) head(DMepi) ################################################### ### code chunk number 7: yll.rnw:430-456 ################################################### # Knots used in all models ( a.kn <- seq(40,95,,6) ) ( p.kn <- seq(1997,2015,,4) ) ( c.kn <- seq(1910,1976,,6) ) # Check the number of events between knots ae <- xtabs( cbind(D.nD,D.DM,X) ~ cut(A,c(30,a.kn,Inf)) + sex, data=DMepi ) ftable( addmargins(ae,1), col.vars=3:2 ) pe <- xtabs( cbind(D.nD,D.DM,X) ~ cut(P,c(1990,p.kn,Inf)) + sex, data=DMepi ) ftable( addmargins(pe,1), col.vars=3:2 ) ce <- xtabs( cbind(D.nD,D.DM,X) ~ cut(P-A,c(-Inf,c.kn,Inf)) + sex, data=DMepi ) ftable( addmargins(ce,1), col.vars=3:2 ) # Fit an APC-model for all transitions, seperately for men and women mW.m <- glm( D.nD ~ -1 + Ns(A ,knots=a.kn,int=TRUE) + Ns( P,knots=p.kn,ref=2005) + Ns(P-A,knots=c.kn,ref=1950), offset = log(Y.nD), family = poisson, data = subset( DMepi, sex=="M" ) ) mD.m <- update( mW.m, D.DM ~ . , offset=log(Y.DM) ) mT.m <- update( mW.m, D.T ~ . , offset=log(Y.T ) ) lW.m <- update( mW.m, X ~ . ) # Model for women mW.f <- update( mW.m, data = subset( DMepi, sex=="F" ) ) mD.f <- update( mD.m, data = subset( DMepi, sex=="F" ) ) mT.f <- update( mT.m, data = subset( DMepi, sex=="F" ) ) lW.f <- update( lW.m, data = subset( DMepi, sex=="F" ) ) ################################################### ### code chunk number 8: yll.rnw:463-500 ################################################### a.ref <- 30:90 p.ref <- 1996:2016 aYLL <- NArray( list( type = c("Imm","Tot","Sus"), sex = levels( DMepi$sex ), age = a.ref, date = p.ref ) ) str( aYLL ) system.time( for( ip in p.ref ) { nd <- data.frame( A = seq(30,90,0.2)+0.1, P = ip, Y.nD = 1, Y.DM = 1, Y.T = 1 ) muW.m <- ci.pred( mW.m, nd )[,1] muD.m <- ci.pred( mD.m, nd )[,1] muT.m <- ci.pred( mT.m, nd )[,1] lam.m <- ci.pred( lW.m, nd )[,1] muW.f <- ci.pred( mW.f, nd )[,1] muD.f <- ci.pred( mD.f, nd )[,1] muT.f <- ci.pred( mT.f, nd )[,1] lam.f <- ci.pred( lW.f, nd )[,1] aYLL["Imm","M",,paste(ip)] <- yll( int=0.2, muW.m, muD.m, lam=NULL, A=a.ref, age.in=30, note=FALSE )[-1] aYLL["Imm","F",,paste(ip)] <- yll( int=0.2, muW.f, muD.f, lam=NULL, A=a.ref, age.in=30, note=FALSE )[-1] aYLL["Tot","M",,paste(ip)] <- yll( int=0.2, muT.m, muD.m, lam=NULL, A=a.ref, age.in=30, note=FALSE )[-1] aYLL["Tot","F",,paste(ip)] <- yll( int=0.2, muT.f, muD.f, lam=NULL, A=a.ref, age.in=30, note=FALSE )[-1] aYLL["Sus","M",,paste(ip)] <- yll( int=0.2, muW.m, muD.m, lam=lam.m, A=a.ref, age.in=30, note=FALSE )[-1] aYLL["Sus","F",,paste(ip)] <- yll( int=0.2, muW.f, muD.f, lam=lam.f, A=a.ref, age.in=30, note=FALSE )[-1] } ) round( ftable( aYLL[,,seq(1,61,10),], col.vars=c(3,2) ), 1 ) ################################################### ### code chunk number 9: imm ################################################### getOption("SweaveHooks")[["fig"]]() plyll <- function(wh){ par( mfrow=c(1,2), mar=c(3,3,1,1), mgp=c(3,1,0)/1.6, bty="n", las=1 ) matplot( a.ref, aYLL[wh,"M",,], type="l", lty=1, col="blue", lwd=1:2, ylim=c(0,12), xlab="Age", ylab="Years lost to DM", yaxs="i" ) abline(v=50,h=1:10,col=gray(0.7)) text( 90, 11, "Men", col="blue", adj=1 ) text( 40, aYLL[wh,"M","40","1996"], "1996", adj=c(0,0), col="blue" ) text( 43, aYLL[wh,"M","44","2016"], "2016", adj=c(1,1), col="blue" ) matplot( a.ref, aYLL[wh,"F",,], type="l", lty=1, col="red", lwd=1:2, ylim=c(0,12), xlab="Age", ylab="Years lost to DM", yaxs="i" ) abline(v=50,h=1:10,col=gray(0.7)) text( 90, 11, "Women", col="red", adj=1 ) text( 40, aYLL[wh,"F","40","1996"], "1996", adj=c(0,0), col="red" ) text( 43, aYLL[wh,"F","44","2016"], "2016", adj=c(1,1), col="red" ) } plyll("Imm") ################################################### ### code chunk number 10: tot ################################################### getOption("SweaveHooks")[["fig"]]() plyll("Tot") ################################################### ### code chunk number 11: sus ################################################### getOption("SweaveHooks")[["fig"]]() plyll("Sus") ################################################### ### code chunk number 12: yll.rnw:584-585 ################################################### source( "../R/erl.R", keep.source=TRUE ) ################################################### ### code chunk number 13: yll.rnw:595-596 ################################################### surv1 ################################################### ### code chunk number 14: yll.rnw:600-601 ################################################### erl1 ################################################### ### code chunk number 15: yll.rnw:608-609 ################################################### surv2 ################################################### ### code chunk number 16: yll.rnw:613-614 ################################################### erl ################################################### ### code chunk number 17: yll.rnw:618-619 ################################################### yll Epi/inst/doc/Follow-up.rnw0000644000175100001440000003624112531361102015143 0ustar hornikusers\SweaveOpts{results=verbatim,keep.source=TRUE,include=FALSE} %\VignetteIndexEntry{Follow-up data with the Epi package} \documentclass[a4paper,twoside,12pt]{article} \usepackage[english]{babel} \usepackage{booktabs,rotating,graphicx,amsmath,verbatim,fancyhdr,Sweave} \usepackage[colorlinks,linkcolor=red,urlcolor=blue]{hyperref} \newcommand{\R}{\textsf{\bf R}} \renewcommand{\topfraction}{0.95} \renewcommand{\bottomfraction}{0.95} \renewcommand{\textfraction}{0.1} \renewcommand{\floatpagefraction}{0.9} \DeclareGraphicsExtensions{.pdf,.jpg} \setcounter{secnumdepth}{1} \setcounter{tocdepth}{1} \oddsidemargin 1mm \evensidemargin 1mm \textwidth 160mm \textheight 230mm \topmargin -5mm \headheight 8mm \headsep 5mm \footskip 15mm \begin{document} \raggedleft \pagestyle{empty} \vspace*{0.1\textheight} \Huge {\bf Follow-up data with the\\ \texttt{Epi} package} \noindent\rule[-1ex]{\textwidth}{5pt}\\[2.5ex] \Large Summer 2014 \vfill \normalsize \begin{tabular}{rl} Michael Hills & Retired \\ & Highgate, London \\[1em] Martyn Plummer & International Agency for Research on Cancer, Lyon\\ & \texttt{plummer@iarc.fr} \\[1em] Bendix Carstensen & Steno Diabetes Center, Gentofte, Denmark\\ & \small \& Department of Biostatistics, University of Copenhagen\\ & \normalsize \texttt{bxc@steno.dk} \\ & \url{www.pubhealth.ku.dk/~bxc} \end{tabular} \normalsize \newpage \raggedright \parindent 3ex \parskip 0ex \tableofcontents \cleardoublepage \setcounter{page}{1} \pagestyle{fancy} \renewcommand{\sectionmark}[1]{\markboth{\thesection #1}{\thesection \ #1}} \fancyhead[OL]{\sl Follow-up data with the \texttt{Epi} package.} \fancyhead[ER]{\sl \rightmark} \fancyhead[EL,OR]{\bf \thepage} \fancyfoot{} \renewcommand{\headrulewidth}{0.1pt} <<>>= library(Epi) print( sessionInfo(), l=F ) @ \section{Follow-up data in the \texttt{Epi} package} In the \texttt{Epi}-package, follow-up data is represented by adding some extra variables to a dataframe. Such a dataframe is called a \texttt{Lexis} object. The tools for handling follow-up data then use the structure of this for special plots, tabulations etc. Follow-up data basically consists of a time of entry, a time of exit and an indication of the status at exit (normally either ``alive'' or ``dead''). Implicitly is also assumed a status \emph{during} the follow-up (usually ``alive''). \begin{figure}[htbp] \centering \setlength{\unitlength}{1pt} \begin{picture}(210,70)(0,75) %\scriptsize \thicklines \put( 0,80){\makebox(0,0)[r]{Age-scale}} \put( 50,80){\line(1,0){150}} \put( 50,80){\line(0,1){5}} \put(100,80){\line(0,1){5}} \put(150,80){\line(0,1){5}} \put(200,80){\line(0,1){5}} \put( 50,77){\makebox(0,0)[t]{35}} \put(100,77){\makebox(0,0)[t]{40}} \put(150,77){\makebox(0,0)[t]{45}} \put(200,77){\makebox(0,0)[t]{50}} \put( 0,115){\makebox(0,0)[r]{Follow-up}} \put( 80,105){\makebox(0,0)[r]{\small Two}} \put( 90,105){\line(1,0){87}} \put( 90,100){\line(0,1){10}} \put(100,100){\line(0,1){10}} \put(150,100){\line(0,1){10}} \put(180,105){\circle{6}} \put( 95,110){\makebox(0,0)[b]{1}} \put(125,110){\makebox(0,0)[b]{5}} \put(165,110){\makebox(0,0)[b]{3}} \put( 50,130){\makebox(0,0)[r]{\small One}} \put( 60,130){\line(1,0){70}} \put( 60,125){\line(0,1){10}} \put(100,125){\line(0,1){10}} \put(130,130){\circle*{6}} \put( 80,135){\makebox(0,0)[b]{4}} \put(115,135){\makebox(0,0)[b]{3}} \end{picture} \caption{\it Follow-up of two persons} \label{fig:fu2} \end{figure} \section{Timescales} A timescale is a variable that varies deterministically \emph{within} each person during follow-up, \textit{e.g.}: \begin{itemize} \item Age \item Calendar time \item Time since treatment \item Time since relapse \end{itemize} All timescales advance at the same pace, so the time followed is the same on all timescales. Therefore, it suffices to use only the entry point on each of the time scale, for example: \begin{itemize} \item Age at entry. \item Date of entry. \item Time since treatment (\emph{at} treatment this is 0). \item Time since relapse (\emph{at} relapse this is 0).. \end{itemize} In the \texttt{Epi} package, follow-up in a cohort is represented in a \texttt{Lexis} object. A \texttt{Lexis} object is a dataframe with a bit of extra structure representing the follow-up. For the \texttt{nickel} data we would construct a \texttt{Lexis} object by: <<>>= data( nickel ) nicL <- Lexis( entry = list( per=agein+dob, age=agein, tfh=agein-age1st ), exit = list( age=ageout ), exit.status = ( icd %in% c(162,163) )*1, data = nickel ) @ The \texttt{entry} argument is a \emph{named} list with the entry points on each of the timescales we want to use. It defines the names of the timescales and the entry points. The \texttt{exit} argument gives the exit time on \emph{one} of the timescales, so the name of the element in this list must match one of the neames of the \texttt{entry} list. This is sufficient, because the follow-up time on all time scales is the same, in this case \texttt{ageout - agein}. Now take a look at the result: <<>>= str( nickel ) str( nicL ) head( nicL ) @ The \texttt{Lexis} object \texttt{nicL} has a variable for each timescale which is the entry point on this timescale. The follow-up time is in the variable \texttt{lex.dur} (\textbf{dur}ation). There is a \texttt{summary} function for \texttt{Lexis} objects that list the numer of transitions and records as well as the total follow-up time: <<>>= summary( nicL ) @ We defined the exit status to be death from lung cancer (ICD7 162,163), i.e. this variable is 1 if follow-up ended with a death from this cause. If follow-up ended alive or by death from another cause, the exit status is coded 0, i.e. as a censoring. Note that the exit status is in the variable \texttt{lex.Xst} (e\textbf{X}it \textbf{st}atus. The variable \texttt{lex.Cst} is the state where the follow-up takes place (\textbf{C}urrent \textbf{st}atus), in this case 0 (alive). It is possible to get a visualization of the follow-up along the timescales chosen by using the \texttt{plot} method for \texttt{Lexis} objects. \texttt{nicL} is an object of \emph{class} \texttt{Lexis}, so using the function \texttt{plot()} on it means that \R\ will look for the function \texttt{plot.Lexis} and use this function. <>= plot( nicL ) @ The function allows a lot of control over the output, and a \texttt{points.Lexis} function allows plotting of the endpoints of follow-up: <>= par( mar=c(3,3,1,1), mgp=c(3,1,0)/1.6 ) plot( nicL, 1:2, lwd=1, col=c("blue","red")[(nicL$exp>0)+1], grid=TRUE, lty.grid=1, col.grid=gray(0.7), xlim=1900+c(0,90), xaxs="i", ylim= 10+c(0,90), yaxs="i", las=1 ) points( nicL, 1:2, pch=c(NA,3)[nicL$lex.Xst+1], col="lightgray", lwd=3, cex=1.5 ) points( nicL, 1:2, pch=c(NA,3)[nicL$lex.Xst+1], col=c("blue","red")[(nicL$exp>0)+1], lwd=1, cex=1.5 ) @ The results of these two plotting commands are in figure \ref{fig:Lexis-diagram}. \begin{figure}[tb] \centering \label{fig:Lexis-diagram} \includegraphics[width=0.39\textwidth]{Follow-up-nicL1} \includegraphics[width=0.59\textwidth]{Follow-up-nicL2} \caption{\it Lexis diagram of the \texttt{nickel} dataset, left panel the default version, the right one with bells and whistles. The red lines are for persons with exposure$>0$, so it is pretty evident that the oldest ones are the exposed part of the cohort.} \end{figure} \section{Splitting the follow-up time along a timescale} The follow-up time in a cohort can be subdivided by for example current age. This is achieved by the \texttt{splitLexis} (note that it is \emph{not} called \texttt{split.Lexis}). This requires that the timescale and the breakpoints on this timescale are supplied. Try: <<>>= nicS1 <- splitLexis( nicL, "age", breaks=seq(0,100,10) ) summary( nicL ) summary( nicS1 ) @ So we see that the number of events and the amount of follow-up is the same in the two datasets; only the number of records differ. To see how records are split for each individual, it is useful to list the results for a few individuals: <<>>= round( subset( nicS1, id %in% 8:10 ), 2 ) @ The resulting object, \texttt{nicS1}, is again a \texttt{Lexis} object, and so follow-up may be split further along another timescale. Try this and list the results for individuals 8, 9 and 10 again: <<>>= nicS2 <- splitLexis( nicS1, "tfh", breaks=c(0,1,5,10,20,30,100) ) round( subset( nicS2, id %in% 8:10 ), 2 ) @ If we want to model the effect of these timescales we will for each interval use either the value of the left endpoint in each interval or the middle. There is a function \texttt{timeBand} which returns these. Try: <<>>= timeBand( nicS2, "age", "middle" )[1:20] # For nice printing and column labelling use the data.frame() function: data.frame( nicS2[,c("id","lex.id","per","age","tfh","lex.dur")], mid.age=timeBand( nicS2, "age", "middle" ), mid.tfh=timeBand( nicS2, "tfh", "middle" ) )[1:20,] @ Note that these are the midpoints of the intervals defined by \texttt{breaks=}, \emph{not} the midpoints of the actual follow-up intervals. This is because the variable to be used in modelling must be independent of the consoring and mortality pattern --- it should only depend on the chosen grouping of the timescale. \section{Splitting time at a specific date} If we have a recording of the date of a specific event as for example recovery or relapse, we may classify follow-up time as being before of after this intermediate event. This is achieved with the function \texttt{cutLexis}, which takes three arguments: the time point, the timescale, and the value of the (new) state following the date. Now we define the age for the nickel vorkers where the cumulative exposure exceeds 50 exposure years: <<>>= subset( nicL, id %in% 8:10 ) agehi <- nicL$age1st + 50 / nicL$exposure nicC <- cutLexis( data=nicL, cut=agehi, timescale="age", new.state=2, precursor.states=0 ) subset( nicC, id %in% 8:10 ) @ (The \texttt{precursor.states=} argument is explained below). Note that individual 6 has had his follow-up split at age 25 where 50 exposure-years were attained. This could also have been achieved in the split dataset \texttt{nicS2} instead of \texttt{nicL}, try: <<>>= subset( nicS2, id %in% 8:10 ) agehi <- nicS2$age1st + 50 / nicS2$exposure nicS2C <- cutLexis( data=nicS2, cut=agehi, timescale="age", new.state=2, precursor.states=0 ) subset( nicS2C, id %in% 8:10 ) @ Note that follow-up subsequent to the event is classified as being in state 2, but that the final transition to state 1 (death from lung cancer) is preserved. This is the point of the \texttt{precursor.states=} argument. It names the states (in this case 0, ``Alive'') that will be over-witten by \texttt{new.state} (in this case state 2, ``High exposure''). Clearly, state 1 (``Dead'') should not be updated even if it is after the time where the persons moves to state 2. In other words, only state 0 is a precursor to state 2, state 1 is always subsequent to state 2. Note if the intermediate event is to be used as a time-dependent variable in a Cox-model, then \texttt{lex.Cst} should be used as the time-dependent variable, and \texttt{lex.Xst==1} as the event. \section{Competing risks --- multiple types of events} If we want to consider death from lung cancer and death from other causes as separate events we can code these as for example 1 and 2. <<>>= data( nickel ) nicL <- Lexis( entry = list( per=agein+dob, age=agein, tfh=agein-age1st ), exit = list( age=ageout ), exit.status = ( icd > 0 ) + ( icd %in% c(162,163) ), data = nickel ) summary( nicL ) subset( nicL, id %in% 8:10 ) @ If we want to label the states, we can enter the names of these in the \texttt{states} parameter, try for example: <<>>= nicL <- Lexis( entry = list( per=agein+dob, age=agein, tfh=agein-age1st ), exit = list( age=ageout ), exit.status = ( icd > 0 ) + ( icd %in% c(162,163) ), data = nickel, states = c("Alive","D.oth","D.lung") ) summary( nicL ) @ Note that the \texttt{Lexis} function automatically assumes that all persons enter in the first level (given in the \texttt{states=} argument) When we cut at a date as in this case, the date where cumulative exposure exceeds 50 exposure-years, we get the follow-up \emph{after} the date classified as being in the new state if the exit (\texttt{lex.Xst}) was to a state we defined as one of the \texttt{precursor.states}: <<>>= nicL$agehi <- nicL$age1st + 50 / nicL$exposure nicC <- cutLexis( data = nicL, cut = nicL$agehi, timescale = "age", new.state = "HiExp", precursor.states = "Alive" ) subset( nicC, id %in% 8:10 ) summary( nicC, scale=1000 ) @ Note that the persons-years is the same, but that the number of events has changed. This is because events are now defined as any transition from alive, including the transitions to \texttt{HiExp}. Also note that (so far) it is necessary to specify the variable with the cutpoints in full, using only \texttt{cut=agehi} would give an error. \subsection{Subdivision of existing states} It may be of interest to subdivide the states following the intermediate event according to wheter the event has occurred or not. That is done by the argument \texttt{split.states=TRUE}. Moreover, it will also often be of interest to introduce a new timescale indicating the time since intermediate event. This can be done by the argument \texttt{new.scale=TRUE}, alternatively \texttt{new.scale="tfevent"}, as illustrated here: <<>>= nicC <- cutLexis( data = nicL, cut = nicL$agehi, timescale = "age", new.state = "Hi", split.states=TRUE, new.scale=TRUE, precursor.states = "Alive" ) subset( nicC, id %in% 8:10 ) summary( nicC, scale=1000 ) @ \section{Multiple events of the same type (recurrent events)} Sometimes more events of the same type are recorded for each person and one would then like to count these and put follow-up time in states accordingly. Essentially, each set of cutpoints represents progressions from one state to the next. Therefore the states should be numbered, and the numbering of states subsequently occupied be increased accordingly. This is a behaviour different from the one outlined above, and it is achieved by the argument \texttt{count=TRUE} to \texttt{cutLexis}. When \texttt{count} is set to \texttt{TRUE}, the value of the arguments \texttt{new.state} and \texttt{precursor.states} are ignored. Actually, when using the argument \texttt{count=TRUE}, the function \texttt{countLexis} is called, so an alternative is to use this directly. \end{document} Epi/inst/doc/Follow-up.R0000644000175100001440000001252113142414322014533 0ustar hornikusers### R code from vignette source 'Follow-up.rnw' ################################################### ### code chunk number 1: Follow-up.rnw:65-67 ################################################### library(Epi) print( sessionInfo(), l=F ) ################################################### ### code chunk number 2: Follow-up.rnw:146-153 ################################################### data( nickel ) nicL <- Lexis( entry = list( per=agein+dob, age=agein, tfh=agein-age1st ), exit = list( age=ageout ), exit.status = ( icd %in% c(162,163) )*1, data = nickel ) ################################################### ### code chunk number 3: Follow-up.rnw:163-166 ################################################### str( nickel ) str( nicL ) head( nicL ) ################################################### ### code chunk number 4: Follow-up.rnw:175-176 ################################################### summary( nicL ) ################################################### ### code chunk number 5: nicL1 ################################################### plot( nicL ) ################################################### ### code chunk number 6: nicL2 ################################################### par( mar=c(3,3,1,1), mgp=c(3,1,0)/1.6 ) plot( nicL, 1:2, lwd=1, col=c("blue","red")[(nicL$exp>0)+1], grid=TRUE, lty.grid=1, col.grid=gray(0.7), xlim=1900+c(0,90), xaxs="i", ylim= 10+c(0,90), yaxs="i", las=1 ) points( nicL, 1:2, pch=c(NA,3)[nicL$lex.Xst+1], col="lightgray", lwd=3, cex=1.5 ) points( nicL, 1:2, pch=c(NA,3)[nicL$lex.Xst+1], col=c("blue","red")[(nicL$exp>0)+1], lwd=1, cex=1.5 ) ################################################### ### code chunk number 7: Follow-up.rnw:229-232 ################################################### nicS1 <- splitLexis( nicL, "age", breaks=seq(0,100,10) ) summary( nicL ) summary( nicS1 ) ################################################### ### code chunk number 8: Follow-up.rnw:239-240 ################################################### round( subset( nicS1, id %in% 8:10 ), 2 ) ################################################### ### code chunk number 9: Follow-up.rnw:245-247 ################################################### nicS2 <- splitLexis( nicS1, "tfh", breaks=c(0,1,5,10,20,30,100) ) round( subset( nicS2, id %in% 8:10 ), 2 ) ################################################### ### code chunk number 10: Follow-up.rnw:253-258 ################################################### timeBand( nicS2, "age", "middle" )[1:20] # For nice printing and column labelling use the data.frame() function: data.frame( nicS2[,c("id","lex.id","per","age","tfh","lex.dur")], mid.age=timeBand( nicS2, "age", "middle" ), mid.tfh=timeBand( nicS2, "tfh", "middle" ) )[1:20,] ################################################### ### code chunk number 11: Follow-up.rnw:276-281 ################################################### subset( nicL, id %in% 8:10 ) agehi <- nicL$age1st + 50 / nicL$exposure nicC <- cutLexis( data=nicL, cut=agehi, timescale="age", new.state=2, precursor.states=0 ) subset( nicC, id %in% 8:10 ) ################################################### ### code chunk number 12: Follow-up.rnw:287-292 ################################################### subset( nicS2, id %in% 8:10 ) agehi <- nicS2$age1st + 50 / nicS2$exposure nicS2C <- cutLexis( data=nicS2, cut=agehi, timescale="age", new.state=2, precursor.states=0 ) subset( nicS2C, id %in% 8:10 ) ################################################### ### code chunk number 13: Follow-up.rnw:312-321 ################################################### data( nickel ) nicL <- Lexis( entry = list( per=agein+dob, age=agein, tfh=agein-age1st ), exit = list( age=ageout ), exit.status = ( icd > 0 ) + ( icd %in% c(162,163) ), data = nickel ) summary( nicL ) subset( nicL, id %in% 8:10 ) ################################################### ### code chunk number 14: Follow-up.rnw:325-333 ################################################### nicL <- Lexis( entry = list( per=agein+dob, age=agein, tfh=agein-age1st ), exit = list( age=ageout ), exit.status = ( icd > 0 ) + ( icd %in% c(162,163) ), data = nickel, states = c("Alive","D.oth","D.lung") ) summary( nicL ) ################################################### ### code chunk number 15: Follow-up.rnw:345-353 ################################################### nicL$agehi <- nicL$age1st + 50 / nicL$exposure nicC <- cutLexis( data = nicL, cut = nicL$agehi, timescale = "age", new.state = "HiExp", precursor.states = "Alive" ) subset( nicC, id %in% 8:10 ) summary( nicC, scale=1000 ) ################################################### ### code chunk number 16: Follow-up.rnw:371-379 ################################################### nicC <- cutLexis( data = nicL, cut = nicL$agehi, timescale = "age", new.state = "Hi", split.states=TRUE, new.scale=TRUE, precursor.states = "Alive" ) subset( nicC, id %in% 8:10 ) summary( nicC, scale=1000 ) Epi/inst/doc/simLexis.pdf0000644000175100001440000127462313142414351015034 0ustar hornikusers%PDF-1.5 % 123 0 obj << /Length 786 /Filter /FlateDecode >> stream xڝTKs1 ٝ麶 Җ pa81i,{$?&)aZ'ɂ͘`7x=VobN)/ 9%ĝ V^4^5J?,ָ7r^Ows+4k!p} 8ťтOWhє#-m7X ȴ0/2/ Ch^hd@cb'G?NeCa17Sq#mې\c~XU,WX'AatS]DDNs Rs Wk븓i<ulZ}mAsIE{(m18UFiE)%v!m % O3Tc!XTf~%cg.5,iAjtjq4cCe$LT28fO֚!3'$ dzJH9X@E g9bL.`bWQʘ\BlSUFmZLBLSCzi1$Uɰ*led YQfT>uW&q618%Y9U=6_֣4ޞ/y9toOO /6&)Aa,/^![ׅEDX\峣|?CKڃ)<~ڵx endstream endobj 162 0 obj << /Length 1361 /Filter /FlateDecode >> stream xZIoFWHdMX=x5iH4μHjhؒ)i{ gizbHiE,Si&2)BfӫS~:!yu3a$^֓5!A5 Ȥ0Xznnn(ɭجҾ+W NsB2bK8韛c(cX 㝾yKi{q9C nk&9/{cv3nzUM *+{g_;wWI76mS4e cR ДP 1O` 0FE~xKVN9)!/T!d727uR{g gۇtq/\E׾@@NA]YKg:`{ Ð22;waIMXȸX)m+4Oπ*6@qW?:zΝ_pﮢۗgfH*"?m̗!"%o=]x.{zLS} U$T ϽCohuZ E$U/qG`Az؍Qq>t[¶A=]qbӬPm= C%$ I#N;_Gp\ϻ9ȧ,s͟yhT0m>|d;1J 9e$$${:`@s|R-տ,R¦pn[vlX%j^U5PZm%&.sc7n/P I;ػa"\N3u>^m?TzW}6*S'`0a>^` cNNpʟi!ٟGB8= HS??ˬ/nrxLJ4 t hJ<أQ{KJ܍Wӡ:ܩ^l_e*Qδ7Cu#~7nGSi{OQY65:sDBFR]$A4V=ڎp0LhG)v19%HC)( B=TTW*U"AM nRRDT:>BP\ J& bx8C0)]q0G*(n ICG)E}/B NKM ]J* f4/A% BlO2Yݠc8֚4&SJ#=D!nw$Ҳc*Djr£Fa n6K)RTmκR|{8[j2 7ޗ<5"aT1S3p.xa$" hӓBn endstream endobj 170 0 obj << /Length 2429 /Filter /FlateDecode >> stream xڭZK6ϯѮ6\*U=0dm3ͯRK}fJV%Wߕ**jwXy\e|Ups^v>Տ(+5ۼ$ֈm\LC ;zҕ6NY%&]į_Z_+PYL E'31%?jg{M0e _eu<ѕjm<ڞ ^9[Xc(z:^ðH;t;E3K0Ȓ$CDP/Pm 0;C^ra6c|jjfVf5tB-KRl+zhT|%ؼ^SoG]hFzMƌ-1?*z(H$qc}4; $Qlj7rzԴkH^SRga6"}vq D#Kc6mwD.:MZWoXOD.vdxԑ<"m= _(͞{ Jl49v9gy\+0WNxm&r[ILVoWk]3Ղ̛~3ˇK)B"dHW]Bxe9>VUe<)br(4zf <'TLfY'ɸ NTfVs $mp:"LBL[hwxn!ejbC6R["Mg$+ٲஆ]GrA2zXj"{|ꌌ EDEʿ+( )h+9 QS$͏/9ȿʙ@Ԑ Ps \&ag`N엥X{q,&n(bn EՀ/G w}Њz/ VCW]oNѤ}OcuFi*ٛ6.[gLX_Uiz@i9_7m6*Y3!{!T{,MOp8n1e  }EbǠaSԮav OFiQC9HU)|}/# Dǿ̊9Z޾Pga~iGhRjzFz2jnQjni.#u֭4 F9bdԤ Q*r& %G򮩱3)IA.̓*}oHΫ8PYɷDR;>询A'X fҙ!b),o ktQB 3*{5> F*jD:HN:snSz'ܮ=_jXuf2A 6.*v$;D8_r=b/BsT:4vAhV endstream endobj 2 0 obj << /Type /ObjStm /N 100 /First 805 /Length 1919 /Filter /FlateDecode >> stream xڵYnH}Wc2%~Y8NY 3~%:L q~N-v$;'mՇNw;YҒE")(D$ ~s$=IH'J}L)R/I9Hx҂àIGtIړt -IV^k|ӑSA\/G֐=n fq3(EA9 )G^'%C( ᕴ2ptARGEEA)Oõ17%5"4 r3)h4rpi-7Ei`RI1} ?"Euw'%b4P) ?*9f5H3keنYȨC%f uD.5p\AH V4~=x+A^@JpHX%:$N2a =X~Y֎guph=' "J0g;Ȏuv|8&䢕 ʯ(W'zM&^ӏ?^Mׯۢdo리Цx(oE[U&wWmS/c7!SYѺ3m{39jmn+v5z^mˎm4@}?Xk|u3nѨ~'v*ۯg;/?43qH)?tz6Vu18mvmu(cnGmզ't&fW1>Q;&[V߮'럮sDoY6^&c|,4Z)6U;Ű_Y7Ų잃NSӲ-DV{Cn9Q[nZH ܎en3Tu[2@ o#'mӶ*v6m_6i,u*G?.M%Z)I/n50 XuyN![wnՒbn;1.lPwe{uAb z͖c кo~ςˆΣ1X-zn-HeU@̽RvnAx=a7u,Z\?@[pd-}FגOCA?b,{ ޴)ˋ e*{m7E,Λ |U|>5Erf" MɄ1'!;6No/Z,Sf.Umϔ|f ;nc26 .Nl>˱O(\ 7rt;U/GhhMm?4&B[ 2ft= y|YwiEx$>FǑD^RW~?} i`w~$#2DXHiG" vDlDD$:)0ZG&b ЄN9tbb2K؜r L)$&6.dڪ$31ĠZc,fw$`t=Ɍ/as$I~}Nډ3PwhE=)ɡ):@uH@aQ*jTE#v EB7:l,]7uQ9(nDDwTG'* 51jBM5Q'4 kfTz[5]ӲA+F5Q&_Ɯ zV`=g`¨PIBMêVPMwBuZ2tը0*tŗQ'_2;Ӫȧ#N$푓3)w/=\ y!Kߡ IH XG>.EهK OS@ endstream endobj 180 0 obj << /Length 2913 /Filter /FlateDecode >> stream xڭ[Ko#Wd64&y8Hgmm++Yni)>,&"'ϲ/>__|cS̤˪gwmQ͚ 'l1!}0jqHj>{;PBi|#f#Ch큗R?T[*0J2/oQkW78.VYooiюMCJS=W Ǒd}offRB5zg@evD+5.KN5~_)eZ];Cjx#Rs QfM0e#6Ǒ@Bs:SXm݈ô/y+*YV 8b8h8CG3Jr8@!(%3-F癍dW]dfm7%^8YF!sGˎ(bZ}z=1ʱsa$o=]^wG7,u  .z{r7bVbB i&S8B1rU.K ,EY F+2XS*_ꗼy9I)TiSz&2ˆ61jrJz\}:m'pHۖ9@b~u3 /a=z=l\XW egg0G :\&wB aYܛ`zVϴ XWx[a2aT;hTQAad-!59$(Ѣ6Hw An7:r8{-#n\W7b0_㤟?ۿnSai͉@N}|Y 2*iG;k']'2-ݥ<3K}\ކ~8Ʒ\R$O65K` aYCBV>Bxu_%/)c endstream endobj 188 0 obj << /Length 2462 /Filter /FlateDecode >> stream xڵr6]_A Am:nNm6CP"m+DGd~>@o ~8<~*`,, WAF%ς"ϢB2>k)(7U6],)u>_ỵzM2Z}UbZYU3DUvK{GEndHXif \]PBF~וea.;R!A034OsֈasԬNy8WE{W v1uuCdKIB"r"nGm(;NJrDbwkI:fHd'裒BsxLFFKeew4JDS<,T]JCpO,puĺ'1N '쉹 -6&יz-\KMP"*~%5 ڣ2iBL:>:)cp<}=(b_'3墖FM+X|=5Vb"TZ}ArJi "jYFѼA?}k@ ٌUgGXA ia` B: 9rfȀ#6 1d>+H*vdrGtW6)S\IilCsF(lf6+ =dYKdۑ(_XʧE:ӽaiJ,%B o@KGYZS8MqG'!V)PlTW+6۵x':18N0 0pFM<}L@s;<:D'(Z-8p@ &^[p=uCm PTyO4펌v꘳&|,_'f< 4zgHdگ ;(Jq\IIKj\ xȊ\K})XF&dT]jg"2׻;7Z-AY~?*NۻL^c/!ꏇ_Ֆ Io_RmЗTTKu~ۤՕLUc7dH!9}E,KKuf# Sɀ_%i c }uq& gQOڲ#K{9lɸEj> stream xXmo6_!jo1#R:moC؆[NVj)o~ǻHي-x<>w;{4xr?~2*_81.Grv2r%845iW hL{WY(b^_ZcfN hEWJS%U J?J[Zԓ܌"l'؛,?^x`2 ^'" ޯFE d+}6H/i Ldݝ ">L`W! 缥S;I?:CB$*3SCfVm۷R:CɡQe|Ҫ +*,i6J Έ|Vlg[+JX xc ۝FQqIy+F?4;n+RIؓaHBtqc[(lXFZJ=:-Syr&MRX]˲Й΋Y"rs֟d H[ ^)%aht6sbq2|x^;Q]<gLD&!j9)t?w$)'I&9DQ~OՌF6t5Ѯ* sZ.tڇi(Y8,SbJ?0✆Q,%M,;7&}*hlફ%ϲA|YMIGAj꣯`N D/M8Cyk|Շco0oP Ϳ endstream endobj 191 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./sL-boxes.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 198 0 R /BBox [0 0 504 360] /Resources << /ProcSet [ /PDF /Text ] /Font << /F3 199 0 R>> /ExtGState << >>/ColorSpace << /sRGB 200 0 R >>>> /Length 1048 /Filter /FlateDecode >> stream xMo7 +xL"JD]~R ouElևRȚ5k=KJ{@?/?w75Zx~ Mo`^^ A茍.OOߦ7?xd632_gx݇p{?}[Ir7Nq.xc]E ?!5ܼxlK?}{ϔZ9db'Kxdė7Q>q3LӼ_~<'gEbo/%VTeA\ޕ{}$l(f]I^a#ʧG* #л󤮨c-ud4 ;[|)\3S2Iɔ->Τ6 Ǚm&s2m6Ǚq۵rЗ8ϵm &gڙ3[|d/̗Ž֖Iq)fwy߽a0;fu/ꨍKa.Γ1.cXcX>1gBG2mc:teowg,3e ą&U&=&U& Ta)q\e^/0Ñ^T{T0C3f \aɕIG*| 3T3fܸpɕw<߶arLw6K\TvYL*NiՇ%&À/@P+cPulA2'q!(?XA@yq (X@'@J8%JW1(WR.N4]IRq +_i}'J^J8JW ŕg/]Jܻ8nJW1(QW.N[鹒wqr+%_ yWeZx'k? +t'bOHOHz\e|6Cw endstream endobj 202 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 205 0 obj << /Length 2757 /Filter /FlateDecode >> stream xZ۶BD tM68uEr `B7N&(߾L7tɟ&^2BzZIiYV7ws6f+9 :%IUrEqj*V^gϹ7gr\"cURڌ}Zk#x1꿘ԀAQۗ].fEL|?aY:edY1m'oަӕ|4MOLJV,DNADEI x.U)fU1tE‹ZjPnA.ʓE93`@vqI!`E|!wm3轾ME*?"͜rsxG$ݫ8mPGky l+jLhsݩU;pS}Pv+JV}ВMW 風Ȧ 'T(e Z vȝZ P0޺kTra``Ѩma?$}-;B!t }Ԝ~-p(EQ,o|Hc70i.i @Z9:4K۔oi\9ڍS q;c5 qH쇹pdSQdd_í JvG CSYn0 =Z#6|MavhvqeEƷ(~$*ZuXC|bSM_&:,I]ݿ ei(]3fa1Zߎn9X!ͥ~x\5JxKfCD+gxߗsvQ#3=.X|PS KT%-o@*]3QƴpZ+q|Csb80_~Џ\[ ~ς@ldȒhk5W5jϬ9'-(g_P.G_ aە=azT ?#NC1P @] ? 4l (;lY⛝m-? 4~= I"9: -Iܖ&:o6粹q?J(p&\Lpv~dUzYsҵec #mH"4tAg9z9Ɗȅ5n.C@\`ov\(I +r\cUYjs/cKF_TIΫa,R ͸zA 68jǝQzkW)EX vFSB l5hҢW#U &T5LY҈N)7ϳ[ƔgIƼ:(aE/@N6܈KŊDܯޭxcQeX:]G M:f8fҕl73OP=FF,u)^RX26߅; 6{]f\@\qxkn`A JK*:u7 auX%[` B:DT58^9IZ_hZ]`#Tf#^:cHikTDg%"maeǠT9ܶ d]愅;dCoc*7>m!)ۺE4^:DI'4'F;;;BcIND޹h1ANg+sm j΂GNs#"Fԃ4v ,80_c % ~w]ckCj95Gq .[:/I*eQt䣢1o_E% !O LwRnh ?"̶쐊XlF6wT0KCSh,qHF(4TI9;=\ه:iY!|1w[]x>ڭ5]Z5MT$`Lks|]g.bҀj]~k'#< _^M 3 endstream endobj 210 0 obj << /Length 2420 /Filter /FlateDecode >> stream xk~jiIIm-#|-"K{gwf_Jw:OKrvfv^;3K>^/كǕsb^)VK=J*x(~:c^41(/k@ca1lb :եr-\lRb%$O5\eyН-ubm훷w E⻢{ nXev| e˃9~*kxD6ksUV_Ͽ}O X I@Cmr! kJQZ ]p^uVBM}ae-Kn LļfZHVe4&%LEDa4[I`09աuN hA,^3Ր 8|Khs ;pծ'>MVE{gFIX,1 V'd*6/5a[ v^ _IheC8hħb;N}1⊒74袵+9J=ֹ_al6 a䄭^c!=Qs }G~t񟂼vtc"|ɻv;ҫ3 X_nW) #G67 ,P6:(k& væۍD(.3MD2kKY5ؑbJnrH \*%-}Qf;DZUAnI̭P2Ʌ1ǻG:d +, q ,1TY% fuDuꐺ%||åYqfl`CA81^S\=û~G\# T#v{xF(Z@!$Z,:$qpZ-^~ 6I^9^:GbcK"*T* 8XpscX!_IZze,gcMkIz€ig]L0YJ㖲aBx~2ny{ŷ ~Y69K$Mh_i0Zg).7ﲶ2TV)X3 [G|aw&M)tYz4W##Dg G>=Hަ ¿M(&t۔5 $YH\Ÿ![BU.e|EzR6B$wɤxXOB产tWLc~-k Ym|EkКo~yHzyCab]GN"?D]@É8ҴtδUȺxFNKj m\|7&ɾu{:j c~<ݤ]EZP -<׋Q+LNY?_Zо5qKkjP|&拑&Q+f*4.{g(W]WqD7Y&v7Dq;as(9NZ3%\2_)  G)<1W^0!rZ 6#;M^uHM7SرIy;4u8Iv^^<Ҿ2.xۢs;&h694=ݐ }v)_mߢY9L$BI֪wwA;Q! Ǫ˹զ`<&moe8snV)LH_|6_|XK7`oTr`!X-s,ixY2dZHbWܶY tGzM~h::jq@U\/}?*5O2o^zPnhCoNݿGN|ZG/Zr܏ڋ:i׏g/?| endstream endobj 215 0 obj << /Length 2901 /Filter /FlateDecode >> stream xZ۸YWH]{$[ƻv,m/3䐢IzB+c7 C~ۿ."DB⪠v Wr\IsIf4PGk{jq 8PBH/2_8 CrirgW_%7G-Zq9$܄?8Hd%g[\ :N2<^k"f)I$@Yi"Vb jY7adrZZ+ѷ [ehwAhDNs~(uؾX?и.X,D 3? G>~gT1&mddr:"?Qbd+*S>vW=D۠*rPAM 4FĀm-A>9*ߥėeY]11T8X'x:"z&6}Y P{z0 c4p>'~C%#%Wc@BJ 3?]E/gm -Bz" lQ9W(xr\Fv`-TLUҤ-xUEр3úAh FbĨesc|c<өqYJvG\WtDc%WƋƜQ#1EKLLT/S }d Gd\ BͧأJ?dzIlpV= ꬡN#p]dLk{riBa*kX[r6XmȞ0\MJ}Μxu4Yc!coIc~cd!$>jp|\f\9lB2ㅈ!ђ4nH8JZKb>25S0)22k*V>8\uEY\B &jX6va }q"ܣhfd>`H'1MS9۠˶'4 7=+Z r1SA^ 28x2^C.6I9(FbY|Iwc7fQa7(u+t!ñց&{Z!|Cۜ},OFy.ty& UFlXBf _1lb@,2喒IF{\M+OﮈE?8}VJN ntG69p}7dAGT6WWC1x˚fmݬq2VfkI5k*_Hu`#bŖƋ_YL _:^56~ uTOhݜ)c`?.=Bo6>.RuZN_O&\bMukj]=xDxp!4a+a+₟~8e:hd)i"ĵQ's8iΩ{ W9? pl7Ú[g0˒.SUiif\xS2`AKf}{2h&;XBQ endstream endobj 220 0 obj << /Length 2503 /Filter /FlateDecode >> stream xڽks;̐p/Mf;F\_ c+a grxkI5.3C)4+%hy)In\Yfb܂ԛue4=JKUòЂBU%lӵlVƧ*2gY?ݒe^zz#!ۦ&=aM|٫*CY" tjWaK[`oY!-+X=ؚE 7RGI qs,_Qse /[X#ru`^d$+|k+E]>u E <ZeUڜkg`o`FvG\ȶ%%fw$+bWN3]^au0C}0XƜ ȃ3Mh異 h)?jQbvFʞxk𺾘1tԛ^2UPJiK˘=5cf rLKIS?eo~PDLHpݠ!΂[O`|_bև93,,9(nFX1"rz1 M_)DU|:w#>pH2(SerSSI)3USSRSFB1-|Z54-G5d]94K]Ӄ;HWHK׿>7U٫2!ss=zg;+ *sXCh0K]b;t8qcJd,,2/Hs`'^o域6x_SYt%J}PD6m*5-V\5(e&.+[N +^A>1a>_;D3/D9Ƿ]PU3&=0]w.MrR^_FBvRiILd  lнe.+O`Z3tt:u[/}p@fx wv+8D}tT*gcz41TG W E*aJ:H.Ohj~c]s|וNz\up<>a@/׈ϰ(56Ldx_=uߍ6m;G,ߏ W*}Lg5aD4~WO׉Nlkmg/Ȟ>MTn` _Hz * ؆f=V-KQ}B%t»L.P O)|?  endstream endobj 226 0 obj << /Length 2656 /Filter /FlateDecode >> stream xZo0 Tj$Qj&4Zp-QtD|N3KR}u@&wg7A|s˳WoDY Oy, s`\lbTf[Ed|KY*)FSwJy}g|{H\+ó\< Z{y Lx˫WCq<=E,Yxf/Ԛ/~8Y&,Xή>DJ6B<]0|E)}whE3n$ ,ܼO8;oT߮`$9jp(HJh=ki: {TҡbvSZ)FwH d̵2Wxp!v #u7R3t/"G[t#pg/|r+>nG" J;| ×'v#{ Z{[ڕwiR/]>v7=}]eCPW+V/qO\+"见`'=teT 稠B%\lV/Ů.4-k>HcBG&a&t+yC0K2)om!!%2d/7ǟәJ,]9=2[$aQhu!rS6!-'Q3j_`IW8 RQgb1їY;e)ItMlP8ݪ٨L/<&7)[Au˰8PRľg 5Xk&Rk}m/4PNJekJ]KBq( }, Ra::$ũp]2HpvÚJ\HsτFn|EkW¹e3ZPW^6Ar8Py{ZEWXC-}\zoGM% p3CDOUː#Bn8Is&1?i~%NnJjRqPfc*tTK^w.vޕ_:xNnF6v` rLDI qf/4?"T0lL:6E"5fUHhvIUܩĖh"RK7DזKEp)EsTx#'79%1G-G,O,_z|t8 5ѭ*Ow- a4ӛa拟#5)&%\"ۺ@0ٛLS~$'{0,io{>扨dRUc%&(HXyGEc8k%Lps<ʨүqua|^Ȕ D]c=g;ɭSfP;KU,*Ní$TyU|Q3%%6/[$}UU+ȩB mnjbrn[@)?LסVl]-fI3ʾ&Pŭew`w) DEiit\Ꞃ +(3kK琨+Qyֺc'aDb9Q{&ݾV;F]RSǮ.m3[ݦJ,M֚`ٌuklH>sr|Eb4L&WNz$cá ~31:|&0 UЁ6PfH(L?iXu|K<J=ӾQ|v*]LmZL?qYZCI#NZaxQUix?9i - ^a}3vDu})`EΥ|"cXj4’u%Th@ޓL|W!\U0j*!]zB6R"Ue,KKWvˁQ@4]#;ԦssorY()Mxٽ6~rЭgT7;JP[n[+1q:Cwz 3Й-חgR endstream endobj 231 0 obj << /Length 1821 /Filter /FlateDecode >> stream xڍ˒6dz1Cԫi;LvӦ3n$Ŗjeɱl  Xe, oX7 ~Y=^=y@)q\ԈLA".x 'Q",VﯮV[G"KO  Tdyf OpQ \ot[z?P[bÌp{-`ZvZaW/WV dI=}^R"U:sv%.噈(0ZXZ~V"28"<:FwÌ7#'v' q*Zel"x~p6Ƭ@#r0ˮ w@F=E]wyM=3ZQUG/= E_Mϐ۪?ЪijK]5|/cY噶][v0&!zc"n/eEň5Bd%BLa3o-ö1CMI #, J$ %A&Yx9׊Z^*VqX0=΄r+J,QB Ri+ͶOZ"D+ha;+2a?\-f)0 !IDhi|h Um# T7(nP6\r:%8;.2"c,^ܔSFm;+!͎Q6;:j5uc7oXKa/m ߪ@K#sqdP3aq:-AW͖aTύUsZФ:=hJZ&sQ DNe^l"R ԉP}zTd+'ƶmtK@ 0նP*%z*E KXme43/,z u DvšbU3C h\9g{MD"ƒ;{7`15-=Qٍq7 jjhΞ{y)Mim&̾; bsW~w ,PNj,QY[#kv\u)DgΙlo nHv3-,^:)|`h-sl}/]S4AZT%m(D߱(Sܢ_»m-b q-X1/ 75u NF\T=L7PWC1BN3 XY)Jt:A7dFD?%rA,(dμ6֕slDqq X4 <9JO>eK2|--)6 s=ͪ0VUjཇBsK~3Yǩ/U9o!KJ?RJ[f/#1)s\4uo+s'QbŤ987Z?g#^mq#qZNL< x@?} ͕3:$Ic'fhC m| %nnjKҤ$%ٿs0:FXQhBq3Xy$EI`TR١şQeGRϸ2ꞯJhԀ/K4TlCI ܇Wv0,ubb!xU",xm7zƳ IZ> /ExtGState << >>/ColorSpace << /sRGB 235 0 R >>>> /Length 38406 /Filter /FlateDecode >> stream xM-KW!{oHH j jTQRwT&U  {߽^kExc׿~_Ͽ/Wws ??+_?_M~?_~[?ظߣwg7OOn _n/Y'r;~kٮs=?wc 6?M齢ak?yn,s ;oGk~n~?➌߭z~=m樂g./)\Y4I~?K{K??yxVfڧ ??۹2_ÿ?O?;LO??[} =ioOw_c\}y﫯{潾3 szN؆ԏ|"Gݞcc؆q~,o._=8)|ʚ \Trkw35B=|ީM_Yx\x s}~Z也-4f^W}Sމᑀ5T/(_oYF5ʿsx>?76vD^Ige۾ ;=KwA{t{!7:'w=JM](|FJ, ߧ}G}~1;iuugXgt.EG//xo﨟WVC7-yG~qw4ws>g3{ywT;,{c]g\5;k_7^oGugxn;]XύN̂w(g,[`DX \S3ޡr;w3ޡz&;38ɰ4R=ׯg2s;~=ׯO}}[ޡ}z&ZLwh_ɰg}mytZa+|S.A;b3#ܶΔc m]]3{D~M7{kѻ_ޯji7t9#M]Qt1Om?v=ƙ#{lc?I̒=14])Jd[&,~Ɖwlc(v}ov{14_XTlcK˻0X6_ȴl$!'-/خDz.v=͗w|?4wдW<1dN=Fv|/0vV&枈4 `6N܏r`U|80ߧx]`>;:kW0߿Rs?݁Y-0ߕ<=ف72`U80oa{c|6p^3K fk6c ﲑ@ MB|z{Ai$wh 4`75 w8f!3`C\]`Cww8^fg7`/0Js~NV.0w0\`v'Ls0kOs\`u0ss>0w\`gc]`=掴~v<̽ i+ma{d3 i>v 0rSrS҃)'w05.&w0.%G[iXIDOEOV@іcntٸ@ z[㎭⎭"*0*N PܫPL| j"U.Uy.a 8|6s" ÍtYm)0.P#;\@bM,3YȼSB~ha$(] A+8.zZ{->xmQ`zf!"BXWG;gQunEo8ߑAL`t.Bet19.wkg6٧~if-}G#pyhO@.ز*yYc )$zf$c{*}ˤ_R"_pb '% ]=Mx 0"7?J|o7ϕ =6|N/pظpܗ%:˴.O/[2BϢAς-d{lQPU @L< [c_U CU^04Ajh@aK}[K J]`&b<%mϧ3 ' B&(J0i#|yJmH ͗3}^%\VYjVNO~_ ;-+|J03 ̬53(i خwlRwZLsO` (|)@SmR|/Uxؔ=E`}#[Oֲ 7N!GV;v[Vn_A=OnkwkWjmTI},R6nu6h ~ {'s?c댻;1ZKswz3>IM\%+hٮ"8Q"xV[m6/ S|=Amc(vj~6еOA)m̐zТBj-tKۭ }e~"E{wr iꗳKCZڇtJl\CÙKОLaG_AZGm@֥Zm7VD.6OdH-Ij ®eUw_ZmՐV[V=HEmV4G;Aq ݑ}]DН]-4.a r}`@ߡMQggtYx>Z]妢ϦOyp_gZ] V|W}xχ+|>_ X:ѫSM>߱m>p׀χ[-|>kf X8vKu>;@-i/|)^Nb|L r.EMR^M•A}MN,gHɤNMFzSIgXHUglJ" {lܟ&yp Mʤb.} 6'g=5g{]or^6 v{$ Hv4*j|-ugY5ϒ5Jp˕#>M{HI;!mHDۭM?,ZXm3HUɡ`M|\ ͑$/$dAJ5} >[llՇ>$n KdNKBrOq!93OG }fg{pl3@rp>kD(]HN4G鳊>jELZT>,g+D 15nMY&P,7El+}۲>K.oB3Ax I8qd|zd"KEĒ>ٗ>U  2 Ϧ8>w5.[T haap)uu骳Z Pg[Dߑ,nxEU>:oiNgv:v˿9TLኳJQ;Ǹɩv2Lr7jƿ)} 7%'~E-c,*'SqCB+{pդ=x8t`[dwhe{8B}rC%pجO0!&,> ]GZp|$٢8?IÞh$*r *iwII$IW4_ I9qs@⑘o-Ivߒyx$91w\<`>FIKU0l+1-ĒdD%Y#8~Ίdɪd)) [$Y\M*{T'U'$=-E呰+e^X ;rE@/#v$n~ q|It!qty$qy$z2/8آ*qX%o"noC{6teCݽ[= yAO͋S&fSe!-Gqu#+8:i7YKWQɾ%= Z.pJ`䍬:T'uqa|iԙbҶ=ڞ&XlC/%RuƯܞ:N۔LRP~ǂpN3#_uu!f f.o{.]Pum;ml+(@yaGEP~#Byeb`%D9I+ɺ>O٢XB:mcAmLTk \ 1@P /X"(Wr%߱r@Kh0E{+ DPV PWHb؞AiPn"͗F*(7|Bz/[P~/=6,妕 (=AaχJ&&PnhV;vEA hP^(7L^r oA.jc[B*ԋ>X}dPICi(*T-nw-N SeKHʾeEz,V鑢H8K%on+[*T\JnRٮTDW" AZ%aWI%Q)*[TmT%QEؽe]NFerX(Pœ۩׾uI&ۭdTa\],k ] #7ّJ1LL=l SIT0}2]tk>یr. PF k1z(Q=Rc>jZ0u-zv;erG@L LwzN lt|t ڍd$Db>?$ϘIn wx?3OGtT3+tzL5Ӄ PM(!nY݂-ڄ[7Mlcw UuKt=gw >vbn{h.ʤ 9)F zd9F-YlW,vAb߷ջj{Ykw6bb; mT;HY,{vmRUW+m3RDPCӔ 7(|O)jwե9\O[{x"/e{i YTVVҢ_Yl-(Ms գ5+mÔ6)m^ {_QE-%hYXQf }xr'dv6h 6G:Y۱s;UF];}GMdw4/lp>mt旀lq |jKܑp|z͗GC܁J!.wsiepek~u;z H܉ @Hg0剔-:r<wRNhWSp--.p]t.ܽ"J~pw,J{M }WIBprsi9?.=}i9?r]nЙ[rsB~Ay{~SVw^MpUbv( J#]^q0@HPnl) (E2|>lNOAyonޞȊAI}ow;[>Qy PN_P-( +87{S'(5(*z{f-(wܹ߂;Dq~ ʝ-(wA웱[PAV~O'N~ #L0!oAy_X{[PoeE~+ v mQZwH}SkmȉS*Z)߽)t}tĻWceN=_&5~p I+L!'N+7itkoFrUv[ MlN ]LeWBщۅ_6 9 Heur=7 .oHeǓ+o[x܄[iMDK)O~}ǛMdLU<z[z ]DS*l&*w5ڭ 17ݪ'TʎK~7lJ>U*õV^i(BWA5QiۧAy;Fi$Tv';u Q;`"tEew}[ Tm6*_U[,5᷁*ऻԶݪEg|5)*tѠ[u=VU6}>*찥K8Ae*\+3mҸVv{̉M쎀^_dxeWber᷹h= GUY^mRM{> V)ӭ[t(} /;e m@<NAݔOhTB*@ 9nQm&\mR'29 lӘ i/SDmҍ&Jm*; ﺠDֳ/~DBE+;Oz#S5pD ݗN?p;V Z9Zzg[pz~-GfEf/"ODEmw<ߪ%i-'F㆟Gz#lpv܁UL4p[-Ɩx|w`p;g!7jA;Dh6 Bk_[eоq(p~oDA~e|;X'Dhڀ"Bzi>"B/"B\Z,EZ6V*oDY"4z"4;]ĖM[LDh.䇈U;[U߽{*=D_p'kQM9湰^|TE5waupYYπfh_vZV]O@zvz*-!{-opYBVxvIfv%݈ v]>wRJSңwa~2;wٹ6Hf7F]rϟ̎L̎ .(2;6y}~2VߏjQob>dvx gSgw%x g)]ni ~Պ]UCݳbzv;gJfBfW{vsmTiq=OVk#c渑6u6gW]ܳ;FBv=-V;+~EuuϮݟU5(jM쪚]yrݳ[bsg7ō4^Kdv׳[>*sjjz=g7 (gyݤ#EBE5ITi/IbR;MvwgQuɄW{@;iQdo[""{ lC^vQΦC^w/ǤJZLTIʤ0vʤIuzbR~`RǤ=Ң|zbiI TC`ƄIY؎I?cQ1]g8dE|clTF0nd/_^(=ni8s&"M[gѼdCER OмnyPΆy5ya@jH9/;{vѼ4 ǂ6A(Ev4qlEG}ҼѼѼhәܗ;>K'lM3t9蝖5/zoϬJO\&'$XM=*U*?1ӀӀJO?<ѥ׼闇uT᪼* ]pZq*w`OiN0oۣ=NZ\ժUV&UqBcsV=F,N4G2 ocOJ0\zpGYS,Κ_aUJKOi>G(sܥgiRҳ~]z5JGEr]z-p upU,-.=}ݥϑGNJ14@av=C0ªM>ڋi;n*}U8}nQca։K8$ݾU$W.EA˜:JśʩJ *]ed4mOt {'~x\iן˲l5cT~V3(Cd?qS쉔닷Q~Ό:\wf.Nߕ%.H2BOVb 3瞀dN'ƨ(st=UŃ9mbe{jU$k r 5Dl9*?v!<_|ןs*mL?2~lrXh?'fdBYxFr*~%OiT?zn>3rBӊ0Ciř)ZqvÊ3ﹹӅͻe7wh[1?vQ0Cu+u+a>izyƢY<\6l)7S4;%>jH1}-On9W,-'(m;>_5GiTp$?~L)Ǐ)nY<;f~ٙ%9y˳s}Yktrϛ*bcϪҨ譿IrVLήz4J'2iԙ9k(Ө^wعYiJu9{uV\F@\<:R.JiT{5Fe{Qv?bDQ<ONGGDDֆY"zxҾ\s5z*ZY=5v[|y^r5UvwUo!Ͱ]lz(:!2wWzP8KrfCDWT9VPf|A6Qt=H'=ZЮg 6]l.( sZeʜ9`P}62' * 18u=XtQ&+x]][Vn125X5X5X5 +DV1$ceDyYIƎGq!-(*eCgQATVe Y }o]BeD7ӮGQ1eC<+2d,c*j/26Fӯb p2go |Y!#.3-io5= ODRp"i|I۷ h9ɉ8q,>|v $ny`+9,3<d\>gU}sV 3|Kn f<{,9 P%,+|.sy'-y7R6"|.j9b6ss}oa#ˀ D>d5uLW\e ϖ^>W@y'5*kUUo\%w|ʜ X\UՄϴdUC\,> 3𙖫et7|ܤJ-Kϸs+X2Tܤ*r_|P |nkO.g >7UsK>#gZ->M>|n2d;ϝ_|% |~#/֋T1;>k?;^k4Oܵ*PV-"s%\_{%yO<1ӚB)Oa}Sy"w'媷CL-yb]~(9:;WuJMk)t0\e>ȕ$6E3!2'nj@d My7iDFŇMN4 "B DF{i{!nȻ4tID^!RD ;d'K;D^^]8:nйZpEj"J̣Dξ@m8D{M< u*ܕ<7մH흇@έ)PIjչ?н]V5'6s,EsKK|tn׽]V.[:Mй{ֹSv;2}jo]jcr;ky>Zs:wS\=b];TvǡQ{WۮWvwFn](6Mukѹ-jA֦?׹7:G.PݖwVDsG7JQ瞁Ms[^zuѹՎu?:un55w[G@@mG/{:y'[1:#wۢk[׹^t,dx7#w{!o(o|tnmssGyv?Qވyt ;{yg{y";Q^ Q^Ԧ?ѺߞG~{ȓ3:\kw[ұݝfH[jmڅ#;MvC=}CF@fӷ.;ڤ_[bniuatnuew:0`OEMҹ'`s#йٝMttnsQ;lzFY6IYM#\N޾I:G>gй+'K!ʂ :7B[ >tDy)dtt4tB֜ѝk;_,^@soȰ:7Y :έ~soK>tn:xU|{VG]{ |JcUj=Eԝѹt[t_׵>:gIu*S |ުW|u]йm>;f4M41 :tF|:s'߿]sK߬_܉,9_ׅʮ:7uXtB[JM]׹uEn=ͧSSC\.jWɖֳ g<8a;yu'zfZ1?;++Mй;}RtJ8Si Np>tnoKq2i:7:wCFgFV"׹ȃ:<"{"=8üMJZ̘"ogU D ӱ Cн~txйGOS#Dځgr'=S.DR r,"O)y;:h9ô!̝ar]~}3gȣ gދI jyQ{B.zRj=bvW bECQ{5tlUh&j/GtQ{ﶵ6.{ڙno#T4-gKkWhbϴ~.?:ٗ:Q;@ޏEFLQ{Wйc$J|ITgJ!cFKYib9-6_Q .EAF?[fHXcmL^m%3_νK=V^k%S-6je#?{Buz NbxELEQ;sج)E=è {?~uP>[C./ju"sLɪYͪ7y~+X=i';kHϝsd9q[Wey7O|ny6ȢB|XX3{LJcU?cM3%Me:tg;)=8w%E{wY#) …C3fɪͣzpvꁿUYvشU{zTV=fz3Yn8/OXޭq:zvΊp)ޭz=[F>O|>Ըj=pMgx.Ŭzi0YWU(^dʪU/$^ &ǏxwY1\׏{l7CV}ǾS||/jʪWf+O<\Oe9cz=8;νp)^JVwZϧu=L5 |Xg VBV߳ 'F~9q=Oh^`"!^xg賖K ퟗ"Ir9fKDޠɁ'b-\KDJd$-dmQWʀIνc?ܿt~e9!k#|{[95)Py>{#'ٝʘ3TƜq(c|s!8x\ƠsEʘ3Wsҫ@@e̅Ds!R\2͗.޷Č@sa2悿]sPU\q1Lʘ 2Fxd8޷YN0/U;Nɘ:1oA rTH\cy;+Ν2fwR*c|eu|2@p/R?/x?6"͗]9;ΰ3mνM ;KV<$cRdȘ/{) c1wUɘ{*ntLyQ%f'C޳l<{r]?^%KsUyDj'5t'\С s_Nmq~Ext]mOm϶O^jGZ~w"DQ3%R,j?tˢjjWMtm_lgs쏑B3'J~=/GP;Au{W>%:t |~R^lC]B~IGqz 3Q>.3W:TSUAֺSr}רCKC=cߒ6}K&uDЃ$u~|tj>'סjC.&~ tC'ѹWܨ0ܫibTuIo7:rpsl:_9:G>{|#>?-]ԡDSuJYuh@[:tczzVuhuM}vItE|%*9PW^=v1ГX&v|S>ao@zwvJ[aUgT[O]z>g^>dY_հ{Ac T⹂?[zy{>3aċ=yA>csV4C:#:Hݩ DC #JW`}'B \W$cNӷd 'ʳ;Gйs'?+CdxV uDgWz|Vз$s†dpӷfltDߌ9Q)TƜd9A?yŸK=CD'4nj9{e؟8E'ssl*D;J rF̞Hdπg@ss3 [g@#t:7~Utn:as/tiπz<'ܻ3m DvzdVP[vP{Cs" OoӘ2 '2 :7:7ttnϐ!}}1ssй:wC箑ȥm SIVN.e@DSyjO UgD;3Ae&t\Oys'vTINs<'\ȮËUg@cW!r%+Ddȕ"r rd _;l "W!rʲvA䪌"7!rSe"79G!2} 2u[ԱnBԩ[][]} y\ǂ9<:<׏,.I 3R'Oߍ=RsNbVC׿~w:nOXi:#1buق9}{,O{淺ط-t:~ϗ:=y`yuLGV-g  [N?,(괹r? g}@w ~dݏj.7_K92^$IB+ȩ6-_ҧNuBwcjV^/lǾN.OKxwI/ғ82[XT7~!?w}Y:wqC;w3G?-EŏNAgܟ+i*?i'~R7O||?9ק\];Rϸ~ |9鎷.__0R:|9~vroґi]vf]Z{VOKP×?}ve.Rb߈թӹo G }#Ӣ㧝쯙9uZ?-tAi'_qc᧝{]mԅ3]x]ܟnON<~YG/}.6Ѝq~'n3b_597d5ge|9uiu9KՈ؛\ IҨ|+cf{p䫓N5#DNV CTZXU.Q\G(T%e"Le,F '2X +:xbɈزS ʩNg%{\.QNđ.QNfdw G'sHԗ ~e~Љ3!dC;~u2v|]gm)>_VA܅d)"\a%Q6/Q2>]'ùN'2Rt2*odY+$:wˮKwj>^.A8:\DcU.: J'{>;4rp ۠IǺ:YAANf!::6::$:`džt2tEt_S:bdBR_/-|id,ﷱ^oj5: J'T¤ 9Y&MѹPK88A~?~?h|A?~?zA/K*g_qV]-^Mɡ^{8>k_j :T:{!*extA 'OOs(]ȯW%Zs?٧FXt<'(~9`pd4lpNg {u9D+} \'uqןǿ;W]Pr}>u's_rd#/#wSQ!NuA=o<:Wgkhy*e:wXqN 8QVNPE<}d-!ksVNwH0E<9ge/4)kORki/iũTfx:ұ-8Š/c\& !P88{+Q܎[w9?FoO>;yXxOF?~~F?~яo7.F?~яo7~F?~S]?SU5335]xzfCz&q91߫~`/mO_ByyHo7#{)?1%( :!ݼeKo^]uŔ캹_|M,̮.]7;hI=ڮW^zzŭ%S>QG)UJEWuiԇҕK|i?EJ|SyJC7:S߬]ӮoDq6$;a(tŝ4z2:qqGӺ6Dy?{"ӜF鶥W _Yu|yݹ^} ꗡfJVW|٫ݏܫg٫g|[~o!a w ~#t_E]U>ϓ K7J!>{?:/8|q|_|/E'^)3'~/O|/.Ov|Đr|g7'>x0yߌ|~_;Y^k>?pgw5ukPgg x]7]77>g)gnn'9:Կܺ\|L |.|NbXgy#9;|N'Y-?RwӖOs&3w3wgT.>gs?>, |nP9>w]>ӿ>SLJ;>JEu]U'yT-{yP-HE>s?8U+h*<ج(t,n1R9S$x9>_;OWqΐ1-]".]"{+=z4CLs:;@Kd=Y5.O/O/o}'ϟ|r*cN(Q ' ($ȧxD>+D>+d̘*c%s¹9u)c+D>;%KU(Þ O"cB䌎|r'W[JDBd-"{QYN?'."h;BD:$rk~Yů7  ?)"y+\TE'@6vEw$"cCȜ7 LFiD"DFLYϯ\YDwl\E]iUNGn 9},r DsB!2:0DnR rSN"7uMC[~>zʾ_-~>|'y]N8܋E"s{u0WG⛯R5P{'B}VLh>mzйϾr}t~}Gsܕ}:ʋ:7y.:7q8:w/[\VuuntpU+:y_'ڧu>}ۥOKc@퇧^/:w"/D%G%-PAGVrs sʡs]wtgV(>]wFy9R]?Or=t]uu_{%yz__[:_^νйs,Kνtdrέu?םV.ѹKtNk׏νTϏ)Џ~zowgԹvUgg,Uunŷs?:wBW5֡s֡sB_g+׹N_U&u)2O |f܊]~$׹Բvܮ:g>o7j |&Y}13}ޞ-ˠs3l>:wvČyqt9 I'+Bv3n?w:w>_aO;]vȟNE""_suq|N ΰ88nxun}_. -nй8.Ō9ѹsW :⭘1N%G椫E: $Xh"g5vȬ(Quitn|:, !侮 wTCIss7tɊ`~s]/t=Ȁ]d;c[sƹGAy-BW=:Ê;:=zᩒ=0R<9i\f:wQāέsssSg7':Nu'rD.O00"qܒNrI֎g׹Ut;$9~'Vkfchv3L'53L}6! 8ǺG r0uzr[(Dn8%tr(D:} DnRh!rW#>IދVcitP_]yȢv[W>vtǫ=_#ݩ6ݻѨPqS-EMwy?Λԕ(ȾxEX.E5.Q?;1LCJ-jW후EIڻ[T n:j7ŽPK~?QA Q#nDUjw>]|)T5_C]Y~dT_8ըsw/ ;Q&P{=G#/2ϋڃJPO|b=+Ewj͗2/x =E]IP*jо`=vC%B|G6_ Q{>6_tjO$w_GNO$6_f\'u8Q{ړ!6_&띨=!jO=tWQ{v6_B9mc6_{Y'P{'=:͗ CyP{%j/{?OԹP{c_lAHK@m@msTν0cVud=?/NL0] kRG)ϙ:'D%ܧR=J/杺YޢK_O&<ˬD$O"z6[oiW|r+egwFX~>~qyV :Ntzw4 )GHw'k}~׉rԹd?T"hϻa |W_/JsE5+6yG5@|}\u~[oSc2w[cMsS>7RMuCp#dNg=> |nr3,>?\\]U7 x&]>7sC>IEM>>738i>[y=?sS<ܭ[G׮_Yu_w5 k{_U[1߱e{_3?[ |ާ &xV|ójwYuQOVnUg>Yu:w͘;o16"o0lo߈|@; =B*E(eE䝑@Uܢ'ZD^1y;EU[?(-T="ȳ1VDKLD^yʉN/ygasQHDJFRc炸/KB^D)V@yqw0 '%ZYcƼbA佃~"/ "/u"{c DN+"{Gy\ ݹhD@Dc92V#r󛈼eZ_kD˂?#DD.^2"e?wF=N$b:y{seVDc̗1"eǜFE#^zʉ\Pw2Ճ{/Sҩӈ{ʫdtA>VpeK;|˖ޙ/"ϠseM//T. XE佬YkD˚2" ;2g;R1/%SiBy/{}{%^g YsY{֯^}W#\ 2P{tf[C5Y%~ t4HLtn|7E[ [ ~VŸ:~~%RKGo ;HD^-t:m:})Dwm:xE{/:.%u6TDaP;n~P{/ֱ:=8C:n=oɠ-j>JTbuzp=D1: "~<~OsO{o_ԞDͣg-y#w?ԅDI]GԞJ_=]nS6TDu~}tո ]ˣ܋Q_й}K^ ~=ڻos}Q{_KQ?^ǿtGϓ˳^K~޾u#:+Ĭ{vsSw7閃\eǍ6q#|+uu~亥sWV^'N[uOV[>o2 >o ] 9uhQZoC:jgsw~|. {֡wܝsC۬סYCsuh[SfP uhP'<2V[܉C?U~-&}{lMи3Cסԡ:tumsCPCOQ;P߾%dԡuסuhЩVy@Q~5=63Q~$q/:PЅ]Ww'uh|ԡ+psPeԡ0srzuV%=uބסDZסkSvIY<ԑ+uo#Kyܻ|޼˱oz#'3Wx.{W#C:tO٤}չCr34 E(I>:U%~CZ%zΰID)y<;S"+ D;2E耞|ŋΰAeXD(riO#Oau61czu:}fNJuDC%zi "N@3+"O*ED9s:7'/%t;Va5| !йS̘s?Ⱦ^";xBMA :2 tn91B_/G"ss{ߓNcGgr$q"~e;ȋ:̉py腓PD^~ry-׉ D>Yau2~yUiV"΍O:Aй._.wps?JO tS:T::3sR s?s'9Qй:s'uCNӷd/%Tu$H3ft2رlun:1y`߯s; |,'\}G{>u?r c{~R%̊*9@#y`!Ot?r쿸~dGV~<.LGVi#?Q?~9?~X]߉(0k_9#?Rs|N\>y`\}G.Rg'2r?r䁅}jO~lyW/8_>f5 R}$~îHv#Tۢvgi巕@OwJ_OV?d?e3V_RǷN~]ҷcn[g~F)4!ۦϪnLw꧌Ԙմ˗}xOҍ/OuCҋ,]1iϷc{}#q-/~vm?-bt,/?mǍ#]?h?(!Q4k~:ӕȗN?gӝT|ė~/]K/tKw u^}#:~f4z9N|:.{]*|S$tص?t _\O}Qgr|yDtP廟nKi/=K~k&>3Oě{Prby/Lf"ʎB'C,V;A*ID8iD](~n]$=Xl܉TvrcŌeQY({䘱,:(k|+WOQDѕU2/qJn$BE'_,dkG'C7B'_] wh,2dCG'sXZd#Qtџ > dۿ:ي}?e >_ZD9edO,=XaֹJRe:YJd<2NVpH'+8IUvDJ'S:;BrYu*V-lA*KU]xciv@ %v2;VT)A/?~?A?~?^"A?~P'd?JNgVݝH1uXÚfY֪G^D%J@ӜbF=΍@sJDfU (RcUbdU:RE utԧ?wWbUY 4 t<~:Ťy;迆_Wj'O]Ty"naU:qW|Wc/mwU:q~|#OCǛ?k쏶rW* xs|o'JwU:k*nILJ[-VRpnל>w~A?g |?WS_^O%oOF=7gd)~23Hײ(Fu4yGu4^^fudkpOwG~@?jfۀkټdҵ~L:ɨSf٧#4'ӼF)2?Y:O"]ud X/y6N?ouS]~p<45w4ON4:W\TudtBPj:edv 뿘iMM?e;?m~6=~^:Q7QR "R7w"D&2E@'?22mOTNv\^硹s[7Yqhr7Y܍"n{lŸ7zr٤g{r~88s-wgYƽqvn8etσsz4_NyXg/J"OQϵ'kt<(kaDY< < a6A6'R:Ji26y9y'Lt7F}~#o>7F}~o>+W0s+?/:}dJ]_yA}ctYEͳ\uaG:sl?th:fv[qNAՅ=nw}ꮛy׫D>q]y*Sϑw;9L^W/ԇϩ͇ܩמ85굧ڒXubyW,:o<|EQ@_l۩NTu~~n7}>jN\=mĝtJqu[hS< ͢yHrg3̯ ~7J^pt]ϼ6 n֦蜷nQ~dq~?yݢ覃ϣz^_7lswæk[mtE(|ޣCsƀ"cBPK'*(.w2F ͑mJT@E Uw^\E5dPmWfٴ0n*o*\yzDhyqRYNMwɶ,&sGWS:Ϛ4]c&MPTVyؚȭP_YY5kۚ7׬mk"5kۚG5kۚ5kۚլmk_̓,E5Eע֢VGغ?vtsnټ߱}~̯WO >ؤyZ샕>ŋυO|.DzEs!>{(}yWkGs!>+ٿ 09>>W?=iz|^26i=|nڮ | i|n嗆]Y|].>wJsl^S]cܥgïfu7kwtt<$>p:>wAGO<4O}ޟaσW=9SտotxUtlb M V}Qg tmYuʶO#@ϦT-mjms o_> 砺|Rs>g|J9h~!|^/38>/ 8>sx{A,䧆LAsP>M󊷲+A|FuAgںyGlaSS!8"HK>=!:"㴁Ƚ}ƼtlOyeDɼ.s7߁}k/Dt+=QGGN$D^vqD^܉ DdtlޯMDd&zC!?.Dx"20l72舼@OQ tG>NrCyT4RDrB2ϷѱRmyDd: L5p)" C䩎<5g=n':.zOd =OOdw"vD^7fpD %vKAK}#K䭓K.[{D7NDՈyw%Gy#+<0u̟*!s#cTV1/gQ)d˟/~OFy+^"yy= UD]['#SE5;" qO`9/k-G!sOG5w)"'9I'DNrA4!9/I_51"g rdd)D9 =;"g^A"Ys^ rVDΚ8# xE1D^7vՅWW襣=:RF vɖCjS-Io\}_[: o]E*B&nG-tg\DW>ﯨ.ѹ_tnzӹtEtntytON {Kwѹ5gߨ ѵ ~>:w&*aKs[GGL΍n=::7ժswus>W>':w[[Gtm}sQUbN]JWBtnZȳm$yty#> F=ȣ'vAW-tntvtn rs>0;I6:{{Q;(?ʓGth:~srX]J^'s<(n]]ұ-ڢ<=g GCGSy1yGO(sj{qԎ 'yйNЙ?wPs|tow:>k:>7~ԡ~ܝ= y?^O:>]n{o-S6g<}_me8:wfď~xM,* En}ܪs΍H:LEV߶Yg-swgsSg@&B> uh_ӹK7;5FYw_|':7utm['~C]s):sܒyst?ts^}>s{uLRy{tFksC0{utNluj>4..S|n|)s[l[Ho2Ig~݃;>ϻn/\>]> N*ָ|[A{n9W6t|^< N|Lաw.V|Z.ddiN_t=t"EʨC>:*Es3;,$c6]n3gN>D:wΰ:wΰuC Gs!ܧpun؁ 5йXѹqVs[e8йɨU]$װJ*շ.sqKd͕ gP3yBS?dL2 _ywEΝȸUi09 S%ݜaW>N3a|eΰ*" 3ۜagp |94Ɯa{faP7ge>#cOyΝa3,B@@3gxa$hΰ3g +T d)s/~եK?USE(Ka^Uˣ%GG^i1TGp'_r'h3y\"ՎC Hv75>O ._^jSX_lWQoUqڻˠ\jj\^ܻY,^jצQ$/6z}_Ot%H'7t:zyڙ(jgv"jgQ;3NFs^2:{.:}D9P;k%TNgv3{~|Q}P;3N3ui Vmsave|n3.^Eu$5j'}ɲluw-U!_>ߺA?WY"~dՃ.lh=˦[V_^Y|^Ymzj-뱘?z|^VV=QuъVWL^_es]9Pwu9kY_q|Yj6-zAuρ~89P7sж\s핬Z=|QM-6MQ|w͝%>Gvs/>H9gտ[:y=OqcO}iG5=?sR[][sy+c|c*ʘ9ѪXX-2B2B*c^t~%z>W\R,N^FVgNeYsϽLJdG\ "s:yYNOj9/9*:D䊎+"JFy?AD:: r%B+mEJD)"'L缬IYG9/kZ͉)"Dɶ%ts^~oQD䆂 "7R~!cNUts^ &5GFBDntȍ :t 4L"rۄtMtBEUw8?!rb{濟e@UG97o{ꜗncD4"4[ק}=u )ntYsM{-Ojչm.]3dSºT7j^6^./z=_Ksb\jgnRm ִ)GMs"չ@; s^$JVEwP;Х%jdFmE-jU@_+% swEeF..jbV?Q{ UE^ѕEe&js^;zQk 7A펿]E펿]3}ϽuJ|.6uRGy\ɚU'yV~9--՟bN:/7sqmu[eYLsJF%e*uS:|п9917K|N e:E|NsbNWס3:-+.SWϧ->gպcN)>Ɵ.:|VWK'Ͻ|h.|.sQ |.9"EKP:u\;υ:\:yGМJqOP {¾؜BS]q/5EY|k9u+]se߁\JC|zsens=VjYy%R9Wuh(x>fUY|n5[ Ӝ{»Ljs\8"Tѭo<-5m܉5F̾%䖄ՂKubܘ&>7ݷ=i|f!|nrg^?Df^90mnԊ't=9ugBݸZ'"w#Iֆ s1TDL)""gtd΍aItn2,tL1tn\ݕ1da!m7ls!#*vu15D?_[NGJWD1v2ynnɾ]]scunC"76 g :2 "uȍ+"7T"rTya+Dn WG|qD͜"rth)bSd\eyeTjݞ=12 9Q "w"aPrvF3f똛72-^^tw]V,:N#*]ygX>_"I%A%XD!L*;eЁ+"?& ӽy}L "H$\eup3mLԱSMw[]׏]8;o:e_|=SG}~NMH\M_4>y /~/-:ͯ\Ϛ'ޟGH~e-rq6Ou}Q#k$4?GNJ疺~S.^?3wiLΏ,JǼ~eF\?r:mI|~{yͅ1?Gk Uc$Gŏ( 9zӪ#eGR3{iNN[4mϜGnPUVvK!h]w}%K7]KХZf!ȗ/w~l{g| (w~Ǘ5댑Kd>qc/ҿ">M+n泛a]|%RnKWVv46G7 /1ytnH?=?Rxۏ9_"XO#;?ZO~ZzTti0?m_jߥ{Nyv^wYu OKTi}iu^c~Fm_/tI۾|Ka~N wKgzcEϗvNb_=_nA{uE>_*Mi *:uFuK܈]w|ڢfs \'_NrN^g ~T=DY2@WWҘL& 9dNfC/"K (Uk3q+ӮCcLͱᜩ,G%4uA dg,u>}'^gt&% 9 ]nx*6gU*j9KL,aCJD{%]U"y܃<QĹbΒdT:$R|DO(g YIDR+Wkyr}(v>q,&\]g,-:YS%ޜ% YBg9hT>\5:qh8DiLQ6ICBDiҩr>\5+mQب\ Dt'ciPT櫓@GeCǭDsNYB(Βd=&N%2iМ%q@,9bpph2AUR~~A??ϟ~~A??D^"~A/Aϭ`UvuJ%w~)V)[>V#`~Atd'h/ buCǣ^`:(7Dz`-c頾Vmڠ:}mQJV* j{fcMշb8-9?9JdmK<22;X^TDM<Xt*v,rd)sHb:~|FE17~2?Tw?3&QIt$U?0]iPo.HQ5:uA%?LI;ؼm= Je/{GEt&'DUVE'eE'k/6!~`^~z0|Tsd~ӭQEMv}d+GɴEdy?lE;??TTL[jO,dbo_dx}n%_4NfquOby`[&iVٓ<&<1lWZq|6MϊGEyqm0a)ϳ<cT.#oĄR*|c\6nc%c3y>=74n47i1eJCT6?O}7&hE M< ?o<55Y磌opv:7etpyr2N&*oGYrV#ʥ"o>7F}~#o>7Fo}~o>7?7O*P endstream endobj 237 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 240 0 obj << /Length 1410 /Filter /FlateDecode >> stream xXmo6_!*+%Xtm3 uI9{MֲxX#)4L<\e9'v0#V,ݿܐ5Z"ouQ2I__n^NFFq?p&8<f:x&PIR:x7y5*&UrLԳvb~8\p2/zFn~ Urn[\2eC/n"" {fl|sEfcSDG[ol6ZqA$:Ѓސ%@Fqe{YPڥ8reaI2Uvkd[V[T ?16yǜ*fi ^^6=O)H ^&uE6❱|YֈNTI 9.|@ C>iJUeJIEr+ +D*JdȺk$5:+&&cK mfN`zi>u\gL}#qSgw$8yHXR U8+P! 鎤˅kHt52ƀ,B}_Y.מ1q٭c;>ݵ'2kw>C܉Ы/`Gמ]`&_5P] 6a\n؜ Wfk 'vhnvGG-#/Ŕs{jeUjv?U^t8Wn>9koHiY.? .̉&͍&[ݼmmv孨GaO A.\?yvE`~d0-Z6*Qƫæ/Vv}gL njQZTUEeug%">{pjgU & :q^5~~˨]b~z >3DUzi*:صbю3=+ 8sp39g8ęKy?Ú59`kX9`k~Xs?8r2 {> endstream endobj 245 0 obj << /Length 2024 /Filter /FlateDecode >> stream xY_o6>X͊E:`[l ؊ձ3nV`~GH%:ibKG&rVWG,|7<:s6)KMϳJ(JEvG|(F/|Bb^%RRJ:4%/K۠!Q.2/\@Jbg Hٔ2xS ١46s^Ǧֱ{{9|&J( LcQD=uÇ|+ i8n5kiS{sާ1z)< w79'oMٳl9}it=/s$xnI,p]z2(H~R0n #I q羨.Ϊ㙐-}$P\l ?(|D>)&pRnu43^Vz.Pſ#I0QWJTL"iVJ.zE\JN}6ÂC8\.Ϛ'S)T8C湵i!4\ 弃Zln0@qޡ5~1'Ʋ(ӕg]*sReBM\\UAnYzvK/(Z؈Q[hy/}ex-" [?}8 t~8=;֔Y?v%wpKaTCw:t}.]hܥYۮ[h@6G$:ģqdL p0dOcrnuE&bpצwQ;WY8 & ݙFH0 A2)]WQJ?MgTp~s Y2CKN9+n &JwaK\&f'xlac;]t%#Wر*КC}/~˓{$z0q "#hJUf߲#7ʦ7lo|&zUkƞN{ KasKRoV\.JOIؿ=K<\=7z\%IOtHKCIL|Y9AU&mFHg?-,} endstream endobj 249 0 obj << /Length 2363 /Filter /FlateDecode >> stream xZݏ6_!-`#1OEJ:\H"5[MYn-;CCr(m@perHo3gY}>tW2o2)EugU)jhQ:nmx.ߟ~KKT!jSŽH%<<4ֻEZ k^Rd-oYE=5<-<;;z\/Uܾ^//y~KˮqEQ?nv8T€ESKέtgv'լ5WOЎ%Z֓i)dm- =f3T] GUDgoyqBM%MO:F,jJIn 5Ի= PB?A^opБC2r08-iػQ# yEvw,S=RP.Ǎ6 2-V+fG2s̿sF4XH;U) )l^Cp."ڡY)c*o'd$yH O!$OF:R6eDň-9,ΪS?Z!6`ۅ;ŷ e{e䰣F0mh)Ҏ*]Qj8g>qӣlqlrɚI']|OԐ5 SÇ*%GC蛅b)0ƆrNbgO纋svIǢ[vʚB*RWJmu x>Cl/%rJlH- {x3"|r }N9N!U®!NHC|v#x)̋@1~Ų EO9W!a^֭r28nH^~B{748~7|1%7PʝS5M`wYAe!i{ܘkFXc+|?E1tHLC<sr%3Yy4 v~A O6x"4P!c5X ٭>aT=w9닯/X4T"'(wy5GzjBO7Ws=wFX9t,dilXo}P*THlWi,阅Fr {8l3Ga: ų~۹T7_ʟ&}ol7k:CEzXS6+Y6n/"1.O{L5fm@.^W>,to kۣ״}}x,Ner p#ωܼpg|#ᩧ"cդ2:?~?ex4EM̡nH χ8 oT܋PU;W=,xw%ӣ< *Y96ko9g@Ks-'xVJmwptt|߇m" ]B 1~懩DUq*11Yrs"̆x]Nc'Ad0G9F1ع%ǐhX#DH׬@Tdn<0T:$T(I1mgJްYc_:|f3W*2\1kʄ@`&Fg`X[ KSjY2g)@7ʪ[b.|%a@ک~4^rW L\4`GC2xE.~C y:t endstream endobj 255 0 obj << /Length 2728 /Filter /FlateDecode >> stream xZ[s~ׯxjb `mθIdR[>$y".e9j}oX\ 6Fֽ޽i5{7kʡoمϧGOOI)SmE5nl\y{OOd3ʈo>]ٲ㳵i5ފ~0aoo̵{*eVl=^(;?agxr{Iކ]oa8){#=IRhmf~jfgNrv fJ/ߎI{r罛oߠF1eFu'TgQv:^tJw {y1t >]Âi:dYK ~/+cq4L:.-rԎj8,rhs߹}ٸ#ԝr3tIoO{5㡃3yC7p;.ued&';bHzI ѿ#*DфcI:G6M~OxK }ҭ O4ѸW-s޵l5ȹc5(sZiF-|GqpK%kedM{-Zӧ.[".߃?║Cy]a SUn㟇~Uotb3ѯ 5I)goh]/g-i_k,H4C p$%I[p\1 ƴ$c,C~hr!Ν1w-v,* x.)pHדQmC WR*C=X,?>ߦa%en(&䱰~o MxZaޯ SXd4-2sZq5Np,~~{nNT!1*mkP-vCbxzosq5Lϕ3:A: ,5[aM8vzA(~_Lqr1MyJ)x.[bht2 drEEAp;K(.Tk"EZ.D 5 *&JxnPbFp>P _PCM[zSSοԂW+rcyU'#jDE{WU* (јB3gdbK\o{,Kk\vjU#]~%X a1+q{Dw*R},IzwEdE]'tcl\ mat( @k+t.)-0^k4xE4jc8b:837z= 1" B d\&/ >hFe)#j6Bb5my+[wc׀.RnK &AԚH7bbXyM-QƬrNߑn֓&܆R Kӏ<}X'k tnې]`T Nοfy!Qf';.=Bѩ0Cao]ΙBHC wAsI, fXm)*E (m\F{LAE0&!\=ee%ggd;eiOeֱ($dvG,\UL;6j"d?{zWYv$ުMHW |XKPB`"P". OϚҼ w[@.r9衸jV,gI/ܙd^P߳~sY %UYFt 2jFSZAX*F"zw68k?/>s殫/6E75_r"YTCyLytˀ<Y,a> l4I]I#Ӹ? 'yL[r*GYr,X6_r,Ý R24.bneU`hVxC آ|RB1U&uQ10Ջ?%BzR ЌM"&hJ?`+Z /2AL2%g >tE@p-r;-Eю)Eb/O n+ endstream endobj 262 0 obj << /Length 2281 /Filter /FlateDecode >> stream xZYs6~ׯ/R#oy$iwcX-ٮ4IpBxޞ?`1揓$Ng^yxYzg?7O?),SӘs5k~ʯ_0VaHa3||~尖-<#`mşwuI2Z+W!&ѭ%F;,Ȉ3KDޟ}qqkQI$y0JHN*)7>@1.^ Jf*ן6 ¦ J T5fHD__Χ2IJ%fZ<#-kY6\C R XT|ÕRײ>?`u +.Yȵ͓- ~΃Os' yx4> #$,Sn|]7auD$ysINF#r9Q CE v>Kfdܬ侠)`ֿ_M!h3c[;L^vєcQ8˩Ac^M0G8&a}*T)@p"겴QY=,2 2|3FOvctdˆREp~'ȽU<&g.횑җB :kAap|,Xa1S +ݸϒ6| <5RAc#ߵԇs:'2k4u얆i[>,b *Ke7K.Q {W`3l^: "DA|KȪ|M6x:>V))xpvAN`O`L=w68u ݑCL[Q\Ҹi| V#hrj!CπnAhPS]'ΚdySiKȺ1i>~[c}{R4^iMj; 5L[k !+#> stream xXYo6~ׯ/6j1nM-.i[>ZJ,9N}áHɎclm 5 5cnsۅ_/kO:}sg_O8`qMy/^:nj{KX!o(ЦDCX:A+U;$fI)5PjuJ 2 uw7 ;9)J/uEͲWL`I|3ߏºu1}] - Y}e}i(x?XpU<}= u/}V/[|b?st~&nOjⴗ-r/c~5/r31:Qx!Dj;u3,ż΅|, r,/sQX)o ϔ \#RN\c\'8xs䵎/:zb+^pKƱܭzPxXN;p 6-%Yڀքzʘ1P>%f)U mGgA 4_ީ)oIEcJёCQP+ .Tur:"P>DLA-ɤ%*Fk4 W! 42noYwcx b?&k\~ۅ3c9ŢV㘐{$XTӵ]}Z2(Cr#M}lx߆ɼSB5a$e#gu\(GAQ$ ?oc#=J)kE['/_$+EB+ ea߁F#kULkDlY\rb|,cFJNTt\<)I~ksoubjRn} Q2J$YmDFX/eiׇz/]sSf袰ѕLz+j|WH_-aQ rÂr?@L+*Y%#b%T{ʢBaEE$1۠v-d֊^Qmt]*3Mi6wS rR"x|G9,8#U tr=yy;T^O@U:|#7m J_fbVMtIG*U^%j0G Wz4R6$Op_%;JvV|] endstream endobj 258 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./sL-pstate0.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 272 0 R /BBox [0 0 648 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 273 0 R>> /ExtGState << >>/ColorSpace << /sRGB 274 0 R >>>> /Length 4024 /Filter /FlateDecode >> stream x[K޶[6*S6I[4@6EEh;EE}/d8]؞3%܇{p/7G_m~S-xi=Vw/DjekE/3tki'1Hz^]Ю/^|yi%_~wW%oqq7<?~r:a)B 1?/<X{ѯ~źoZ&Hbb:h#3˜[8н_g_ߕBZ xTimrR>Yur[]ēR5iRq _K{_}eҗ#Ѱ8Ӄɴ4b04}<3׾2^;Ͼ[?Rxli m8oA*Zt% %z__d]\>XZ_] ic膏m2{:1!1"@.qZ^1n>lWpc_B$}iqT>O ?X̱^(}_Z7W?s<@a @[|Os_nvw 4⽕:q@~2c. T /Q8?nNɠc NT8 lp_Q87A'"uk;W olc+85 28Μy$ :`ew`px /)pd `W7pzIwXE YQn]QᅰI%&0b?1"|;&;&#Z._O;6Vӹ dy2֌c:?f G2o阌\d ̊̋̌̍̎̏* TLPA*+T^P]*?TQYDe-*ߋ27*sTQcdv@P! 4@0RfAdz1`qNWIy€uT0# Q<iXʀ0 ʀle6=2`c,8wt~w<%93Vڡ1`M̘̀cTFeל1`7ʠ€؎{>kxta@aTaL8;\,1VπÈsٍd1 t7FhC1ct>pΣƌ1w'3R un^fR?.K}v2&2qёQb@E *T4xPbBE *6Pt.#*JTHQEŋEQFE=*~0b"H \`B L  A1 X]'pN_  X r4p%7*T (Pq"Ał*"TLPq"CEbDE)*VTxQb(jPܨQGŏF Q@ +@IDgտnn!7u֥H.vЏNvv]$ 2a{"m$9紑~޽6B2m$u}n#Yk֊qa_[I%١DnIOCC :Jvh)Ygn}ZSI)*߽ǿs_%Y2?ZncRzg݈h.ធ_$Sk0ez=[".|n>u:[Yx[D'g{Y}79L.˧s,KF9zʒuyhgRO>I]x3%I{&3hK>}_7eZX_EKE|šT$ W, 9_(=Q*/0kŤB?K!+2 +6KEBW EbT(:%Zq*T!a+VkGWѪ]-Wϥ"VЊY0W*ؖ{3ءL_f0^{C f߫ˤЋ:]d(YMpZXc0,= ^ִ÷-V8{QϜ{QZ</{ ۗ}{QS̾e ۗ]ۗR %`Q}Q\d1۱2D|v er/%*&Va6I IVMlœl fL000d$-&ja6d I[M2l)fL0dڅ$#K1L?2!< Q$JpJ#JDb磕MZIaץy/lZaǧZaZ b".[{tDJ* t1h%FsVҘL !"S"""S#_*T4PRA%J*%TRPRC%J *EP4/J**YTQ)FJ:*yTH"$0H#d H)a$FbL\a^ʈUFl€UFܯ2"Oa},+#` VF̶2ΈWF̹`ɬ̻+#%̾0d2 (aDّˆRyFʄ02*3T6!(aDeXfD#JEQ*3ˆRFTFfFʏ0223T$('fcZb3V2 3f01iMrR0$2(2,2024280<*B *T0pPBB *4TpPBD (*ԋE 2*hTبQGF" @0B# Ba! !_!=A ץwAp]z$:6\ uE"se]pYz$+ϥwARϥwAһ"mKp[zW$bXzW$QcXzW$cXzW$IdX;8d.Hzp]zW$9f,Ԛ_sһ"i=y$KH_b\U!@  *T8P!B *8TxQ!D EE 4*lTQ#KF `F@!au~uF|v]{ͬ6?   o1Ps'~!_|YtE<͚>UeHxb=ջߦ}ob endstream endobj 276 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 281 0 obj << /Length 1359 /Filter /FlateDecode >> stream xYmo6_!d_,fD[thR{d؇4Xز#)NwwS~s|wϷίg3WJErϮ$iIw=ٗ^ mqDddJq ]3hC+=X啲ŕR^oLE2 /*^G:T5cKtr9I A4Iг$IDN9ZvtJ{5s/|ws]_Hp37SOmEwD""}@dJ]&9aM,ʹUq3KN9aGА 㬍iLmEՂp4(o8'jY|TG^kX: qA#hI@_{EUZK޼IYM'W$_FeтXrĐ@)4N(02긥Ry%[ @Gj(`L%M6U2h?TwrCR5)/(pr_ݐ>;kQJ)6F$Yb ( BR+LW%J Gx+=4<<=<--9 ci76R2.eR␑GЂnzje-3DPÿ ̸b<5"S6-!7[%X}fNid_-ۭ6x1Aro-wuQ5:Q&IK_]9gn/!y/6lRfbW+~b;d>(rڦg5sx؏c[ 5B,%u rɌ/?! 3َ㹕6:g&U\Zq`#.'$!+?Mr߰]Sa-pl, ^qUYu4(9r%`W |N`skߒ왤A.piV1Þ`ĝ%-L[92mzd[_=Owu~q-wu[wv{WsnVVyLCTn%^gUi1ҢDɆ Tm]P%Ɖn&[5!6]gE6{prQ(jƅhk}mz/6/UCfa*i+3x7Y[Hֺ'+˘n4f*J]9 ;9hlk_+Pw/)|D画~r{C`1\s~#![F#tL@:Y2Xs͔iXCt.Y(sb:`s]SHB'0[悸lg"] endstream endobj 266 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./sL-pstatex.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 284 0 R /BBox [0 0 648 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 285 0 R>> /ExtGState << >>/ColorSpace << /sRGB 286 0 R >>>> /Length 6314 /Filter /FlateDecode >> stream x]ۮq}?_1" oOjp`(H}^5ϡHufZfjIel)W=;wϿY~aĿ__X\勇|z(an,|s iQP-fm׵0go^|ݝw 3˥ԛ _GRm;W_/^,zWy1}|ѥ[_N W>ޟpQn6n3KvZk0M_SY[6,0xT ٸ0Χk~pgۨK;nISCOtpYǭ49 wU˭rn*]~ۊ {rSvïx֊ڴ`P|c^bB jG˻*e۱/]ƫ_7_O* So~z/:H.$\E97vap!g[ `!*!W< ܡmN:nVV1!v>౐r[\VHpv~k+ώX |{@ so[8NG%Z7y>WX;o90p0+W,HayA9wA;*a8ߵ4DrxZa~z;b:x_Xta.r}ێ{ӼR d@JNcpؘAD-<z;d<(1u<d\)^< |,EKa?}e|_ yu$MyQV~2ȦixZVLr `ڑ%X+]xsQowA["' 'Oع x xn@Qc H(eC~p{kⴄmA7&yUN~x7!PqV:*Sa&|6qz!뉋Hz$땬gz(륬Jz,뵋z^z2ͬG^z6ݬ^zz=s=TOr##TIL*sr4HJ'QS"; %  W(g/ OB6< e Q1Orz0,1'òztհgǼ ~pŰ'Ǽ ~tհgǼs>0,1 9f3,ϰc?Üo|04<`&p|0c检3끬荤G^z&띬^z*뭤Dz^蹬.z0Ŭ'z4լgz8嬧/z;׳z?^HD*7R1JTȤ2'As ~ſǤ<&1O R?o0'!@ Xyׯ߼Xf}~woXy. ?˫ϤY} A`r/W?ۿ ׿~\>_}þT>]}}_߾[/B7Fe՗63JG{G(SJ#UJ"W֫6KqDv)R{1ióvRlßKf*=n70`} +O e!Whq #,;O[<Ђ/@I J#'|mT2;Tp™ ~.DzL|aTp8 j%`zfg*8FQ`!כG\_'R#K{'38N e3v}ux :@88NŘsmO|lX8;Ta q,0>'I2~I: q7|ˏ`OC |/IY%I&DsZ TXE\%)18c1- SĉA |/ik5iwj +AxJuZ^p<,BXJx=)㉢*`|,BbPTq1[1SĘ) ='BOAш=-1v!$ʴ>O܆ĖE\v7xO3x8xtx{".z+q'!OcDׇ<ˏ"Ԉ'!Lj“-Ч1c]"q-` '{x+"O>OUu}}daZS4.;Hq3A*GݣT`G6ǧ ʪZ?Cڑ.!>C:c<M}tZ_RO/kZx0W{n%̤DIWt1G ß$T.OBOB%4G6-hh.>Rr04-$/os9y Ў9K;t^:~܂5Fk{0U2d`tؓY{}z\ NGS3|NDߎ"ixrFJ/GC!/Ef|x[U !A ×+?|[2s?}'*Գ=­(-x>zǦ'~}RI1md^W4rhF6 pIP A>\M-}|,u^>/-C"||F IPgTt<,$|=(d(U-`*̓!=+᠗w}'gLzy=0 qH!|/|.+!=gKl9?uܜ甯`Ӓk:k*frKʅ:k*ELr5lz5d-Mr5uG4rFlI%zMeC;k*a^SI&{J*r8T2GJ4YafSɱ[JvآT-S!bpS%Nx^=E; IUOʈp+p pAAANN;KaZ`8tpƸpDo.?e8mR.Ae8y [b]}k|YעlF}ڡ{\km&VwQJ'0FKzz0 '!k]t%mM2{I4 Di.8ɮصz4OŪճ< mb?js N2٘䩠Rv3v r2#&̌733gϊ +(ȊXɊ'+ʊ++زˊgŘEqfEkVYfEsVYqgE~QIgş+\1"W"KhrsRŔ+\q,Wl~%gÌ]2c2cQ۸)g:cƙΘQRV hL)̨24:3WfҵYw6>+3j?194\y[(ƌ¬ƌrQZkEaFeZeF5Q+3QVQ&XsQkSX˜i}*3fLh-蘙Q329i!LG`*d#02 oϪɯL41mfԙ/L@V YIdHV*Y\NRBY)e%VVbYe%^VY)^4(լdJ8+嬤J<+/J?URȕD4r%+\J'UB|$MW0}{Q*7)3q<&Ǫ^>yVu&쿇(3l:ӎɸw69WN;sUW19Wu\՝xɹ;q Kp|LU4ɹ69W59sU319W5Ӻ_OUԆ%;'2}r*8&219Wɹ\23ibĉ3_>+J#+T(RJ*+IJRJ.+R(Yif%zQYfpVYIgxVY_~r+\iJ$W*ɕN~Q6֟MiC_i՗,kjł.7?UUз(4yS@ڿ%K#K#K׮oID29([3n.9]]z3vu?K%7Lyz7 u}N>'j_q}U˖FܷjV)pFEI#ܢ,9AjVP FwY.4-VpF@#b{][5[5B[5[UK0۝:.V7.pʸ[u\:niU*oq[u\:nV݀oq^6h:.V7Uߪoq[ufUߪoqZVEZj[5!V0ERVKo^eKVEU#ߪo1-oZ[I%E"joZVEJ-[5BVE"y}(J+oZ[5BVpE"z%Ӗ!V0E"j\!V0[j[5!V0EVo^EKVEU#ߪo1oZ["%E"joP*VE*Zj[5!V0EpI:j[%E"j/ߪo>Z[-Wْ"joZ[Mi}E"z-[5BVE"i}Imj[b%E"ߪoZDGZ[-ע%E"joZaQ!V08iߪoZ[-sf endstream endobj 288 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 291 0 obj << /Length 1177 /Filter /FlateDecode >> stream xXK6W=+zMvI@!AGWl3áD;lzi7E<~jw׮0wgrY|&HU&q$,7H/I?XiHn 55kVHhw;(agY`4&"bXKr2UAD4H%3l1A]Ń]U<;l+"JT;;]K= D$ XWbB Eށ)o`Xpb?6~xjy&N%(1'f\5 [ E ㌸"`D-LRJE@o\״=՜pf(_0UiS|l<:5~nPmyd'؈z*yDT61Padr8 @^[9 P_ hߔ!j2Gݡ=n9$G97vxE9tQsN1B1mDI4vD2n p۷9VKeD G:o}ܰm 0+['JS}>In}?, MOED8%#xϛT|ѤboPEHߘF-Vmq(NVZrؐ^ۉP>ї@ (Jet;6o̎*){p7|Of-1i2$7Z뎏=ZΪJYES ╎XZpHB}5o?;DwP@y2[81~xT/Qx!D}Q?q_Pz7F$W~RCAUCb;,eg1ϱ$+m|jENJ<9,,_ZaIs*#OhKicL?C~*S1A.3{} A((t}=u }]H)gٶc4w#I endstream endobj 278 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./sL-pstatey.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 293 0 R /BBox [0 0 648 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 294 0 R>> /ExtGState << >>/ColorSpace << /sRGB 295 0 R >>>> /Length 6447 /Filter /FlateDecode >> stream x\ۮq}?_я" {_;D$$D)DS]=3փ$.3}]To~?fˇ2-><}P/o =v~7խ^!qzmCqu?.sUFZZݖ}3ZKxvWrkʭ SY1Z|eݧWۇzE}ؽ^O?Rxp[{*'4>LJBw933IYvL%]w?|ڍG*|PiV)?n|'o_c*ՅSX+:Ec>"@eKV~Clla-xmۺRցTC\!52y[0S<0@r$wvQ"+\`?>c;;~+˥'^68KxvY Cr n@5quo][.N.t`pC( 0Lpz#\׵hr\J'Lw.e.7 bNp*a8^4ý_/&[bDێWۭl08_3ޯ  X+fsuσlWp|炷0\u X娗1}:xt;a  xme /c㹨<Mh*|8dCG䐞X7ᐢ C=)r r`;wJO5iS=琶AޱiCFP0[1ȩ!e*R3i!eIC QUK|M͊8on2"CXH (b 24( !bMǶItl M0/cw1Ƌ_2j %'1}q[࡮cp$nJԢcpGxB&cr<^cPR@eiJ7gL,(Ҕ%MeWZYd4׿CLۃ|UvCѿ_l5G?},xmmfQvO?UpALOEj%K?OѿcUd}|JT*|$5we|౔5̏!_J>mOǹeоQ>XeXo8,`^+??ԛz2i۬Yg@r=q7R=\z'C^TR=S=S=\Oz3ף^lws=\OTz=@R?ڍԌV%52M"*K$MID7 9|B>rK77F6|S-7D>/< v`X1Ǔa79^ K<;x7,1ò~3,1Wò~w ǜO9f3,ϰc?âY s qs>cփI/ˏIoLz,7&z6qYs=\OTz%3Pr=TzTzTz1דhWs=\z9ӧz;^|s?Ov#5#UILjsr4H#/#&5/Iפ4m Vq!ĢULvk"fAb貉wX`<0v|E2NbZ?K c[Ax:ć˟ |Mԍqu|"HXV`ҡkg0V\T\-2GF+2ćc?989Z ׊-c-x`;x`c|0J/ZgS{bS3䧧c|ȏMAfgWOeOI)0'%f` 2ć |6Ʃ._:~}CM?A9C~RT^[d -1!x`l8L587b`[E`o(C|}|`֜#7' zx`tf cqdp СԛO64_zut4uƷ,0CV f fa}Y`X'lm}^5wxwk^vk^C>`n/MnofgbBE-uuq9cv,Gz^<~y{_W_Ϗ!B]:bȥ8vg19 }`xF%~zs+Z{p?>}9oO Dv4 mJ(sA Ih~`18ЌlIйίo4s3Rh<+@BǺhqBGbhĤ4sCz0PpB^Tf~UF:`С;LáodPm$ PţhJ>pѧ}|.1\,8P@sJ (dԗ_OИ \x&|I _Tio4s}mp BZ-+ D,+?v6DZZB8`0~:B@iN|A OFohuhb}y e7ˤS@\~ThW8QfS[grTx2;@΍pz;!]$l֣Y> 9JO _rG<"K?=%%zsXY"ag{=eטϖ79eK:,,agI[?.,̭K?K4Yahɱ[@Kvآ ZmТY< -D/t?p3*LpbQ8S3E[WR×GP*pW2 Ùp: p8Ղ¡3×xKP8)vV"C(rő+SŒ*\(WLWrŖ+\*±biXsE+\9WԹbO}sG;Q#w$cIMxQrG;ܑ-5Il˓UebVe2єRqLg8ә2RJڛ2)>yUF~nt_Q=ǰ0QMEYM%rUux_{EQFUZUF52ŔQVQU*X 9*TkSX:YA)>U 2j&Pe4etʨDQ=FY=HDh&؃RAPBJg(}UJ~VʬIi'J~R\ J!WȕHTr%stR%+\IJ+WbR˕\r%+S%9V=U͕ns+\iJ[[V0xtZw~w uuwuu9ԥ_7}~>_ @S2ܻT_ƦJ6 z|<2NKzAgH>>ze]-# )moG֓GXjRۼ'")&e{+Cmm6ze]=²a]GX# (aYwi#u˺ze=º.a]7GX#|Jmxu<º.a]7%:@C<09IVzacG61B[*2#|N-y!acGXV{ A<1#|N-y!acG6y-!-y!acGXV{ <1#|.rZC<01#l [TacG>[-yaeG6ya+# <1#l# acG>-y!acG6y-C|1#l G6yIKaeGX6xaaclc|Gxy< endstream endobj 175 0 obj << /Type /ObjStm /N 100 /First 868 /Length 1809 /Filter /FlateDecode >> stream xZYoF~ׯ{EP 6@ #C.[t%*H}D2eݤ ~s,& Q_42( ap@,|m2"dLr"2ELHޣEƻI `G_b 02d4,2h=iM'AÁYzL,g@_ 2 "Љ4ޭ,ȹ4#nxgvzA B7n e˼BX53!̒¢R'yad5@'GeqiFPǙ=/H@X!y,f /^" *ly #غHJ1&%8!# ԅ>|c|3.Cy~I .GXE2->@~!bHrCY%EKGb qPCƀkRŔ1=YA]&yO1pĎDp"829=W^VB=n7]n~'r^-_k>Uߨg LN>HV'Y N85⒟{,=P_ZNgeUXYUDH| U2J |i9uS(7bQFvSpx!O?"ɲu<$YѬ[it -\WjZCIznitF`jSNvϽn -pTϗmB=?y*ԫ]'N8f[!^MVzYV>]UxҾ}32eXy [ӓo,?a8*PIa VLhmd ֤@a"; i`&$٢#&>7۝$>oip˪9)J|vMD4#pm緎F^u?uwԯm.%Z{t-宣E2;L}_\E-VUo Mx[uuY|]gꫦlusW>z9z{lN7d=Ǻyܬ'Y(EݬW"ǺEu0S V:_o+URe,gżRElfYS5ԼUR˼:SKV%,X;]7r}(֝jۦ][]eَ-TBM_rx;e+B6 GO?QK_3%zH5C:H;\N|S!ćh4Ƽ;=3i-_o@ctO\{fOumж,2qf4tZ3iNkXv%QGQqU:=eCK2:K?-Ay:J%? L|x8&EܖMg 2(e ,7+@vU6> NJ[I;ZFbBe>tz$9)p n vO_=n8^ۣw";-!pq*pi;i8V r~~ïЯ2ot8h\ЇQ`+ M>ef7IIՎ A&>$c M7na[d2ɗw4HC%I9,{C(7&:QsWXJ~WC'6n|Mm$򥋣@e]5G;M 4<W?jB!hڤ {%r1Ĕzp_{' endstream endobj 297 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 303 0 obj << /Length 1807 /Filter /FlateDecode >> stream xYK6W{Xnf{Jr-e:MKC$eyPZS|{*"A_2i鍈V*.pdA\OA?#I.g7U?~>Мq,"B $^xb.?b*Ozuٴ݁ 0V(WvzOaY `!T)Zē$4^}o'&hja)$Yfmzy"x}M.0W16t*\-$ ,GIͳ8(!o,kx7<5MtЌ+ZE|tCG$HL@q1 cam 9Su]跈*lx*$W 1)d? vZ;nn_Dz_l!jTjO6fH:JPqeW|BK+g!bގ|*V.;2t-IVںxW.ŖgacjT#e{6.7D8xo=a4х'-րj@[VZ9>ˎLSva:ȑ+@2H, !coWV0N'\b ]oؖ0tԈ'P>Ŧ|c&hKZQ@QHvno/2(͡6ѩc6kZ\S.ꖯ!~oz$1\'cM6*TEaQ[n.pAXr(g X5j,@"@cs&ޣo_#ŽIt\h7Voo  trtڠZusAyn{ǖngvڱ9OȮOP ^S|he1ܵAJ+ I2YX[)K%1  je1&JR&Фwa3F59dޤGms"{׹C:Zg UQtqn 4c~xjA?D8;Ϥ'`ٗgC|*kzL*55jTKs,u1+6Z/ŅQ<-uXV#tKPPVF2s5)@8b;,FL CpI$%6kUhKbGZshQjH E49q/P=ֱ4@^zM׷P,d9f6鿌;asXr V0a;֠ǙsYw؍]aO&iչ L~)2lmɾ}|a֪͋G(Qն&^:s>j]W{nBϯ]|F vua+ Ӏ`I_r 5Xl#V{;Q@L'!U~ɕRUqvn ڐj1# endstream endobj 299 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./sL-comp-0.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 306 0 R /BBox [0 0 648 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 307 0 R>> /ExtGState << >>/ColorSpace << /sRGB 308 0 R >>>> /Length 8465 /Filter /FlateDecode >> stream xM$UW3#"0%#`FbX`cz8'otc.snUeDz̏?Ow?⛗9Mc7~IG/ϸ[ n1?䏶?:?l??xg[4+O~u?sx?-j__?~[_籎 9gx>?4x8=6xoso~^Fiޞk Ṟ?o7}W|u-KIR"? ~X0nxI60gB.yJ=ˣkx.YX"3婱e?p8}{X>xs>j?z=k^~Mz6?}~k(_^".S^MѮWؖ2|CaǜV_Lee/?Y|<1)^ORe]s˸VZ]Y<<^ea:!aAGMa\=s65{XgB=PT=ac=l7t8=񵵦u)T= m<=mKGC&٣y۶{ƑmQǵIGMg,2Rtv>ql; Xںۻ:#Myͷ,M5rSl߻[[Lʒ>,k< ̺ &销y }^Zl[7+ 0b# 'yfl.<-n T[b1)? Z݊E-ncMڍhϋ`e VE$u11&pm E`cz[bq] Ž/-L147NsO[ly! V[ LT2y>5$'wE*@aq1xL*LS @B`!xD& @F`@H`$P8 V-f5@N`' a@>l21r!CB ,|ˠ-]c8ޔN·6%|(.| /O1sY/om!up·6Q$!l,|D/ _o?enE(&|kq5Ph&|.&|m4_p]8%|y=A2—V]%|R _o/ϭ}b^Qek.{>^,m3oArw!nBǮfBQy/GLh⼵iBM^C=8dn\!,ҫB)r =A@ hD*AD"hj9 I&AJ% h y>& L$h AdGȝ 0·}jA౹ =n&DGY=nf#}xlK7Y7=O@O/F=N/өieYx= 7?cz_f[˪qs<6l/ɨXd喫BzZ1BN' A C!R-A Gл A I$T ]0Am8A Og"D !R Aӏ)|ceoލNC35g>姩Wk\ze[3I*i5QNu,{` _i7ߥvtC`iYGy[Ǻ!a˓abOn]\*ywe4"oߒ'4[rі/F뉫Cc/_ebPMCC+W 4ak}y 9[v_JxCZl21r!CB OB%(|G{TgEJ f[ *\;'SO¨?JaϼnxPʘPʸHm%|ț/d3^Ɗ/hۃ2]7teXvC*vM3\ I2v{\n ގ§RO-y>xGݘ+ P*m.f/cЍ:3˴+xfW+x? ^³PRHB !PS)AA!d:!AE#z$($ Q*AK&(_@M' L(0@<Y rd8|7CFg+!ZR=Vti{ljW#!Գmɳ圐Yw{}2Ra- mf~ M{ܰ#׽R[9 [=yfS8ɳî Ud fJy^Y<ZgqZ:ZOh!> p`?knqÐg1+\<0/d{.I5ThKn˻ 7Ӝ6r8nhMn=z {ǬV;dJA%.jY[8ewB~ك_8ZX_o[m&`_Q21eou0yntG1s\[?۩Oe_/o(2u#8 2w_jFToUޚ.jj) 1寴C_x6bn|V `4+x8q3{lƣŃ1 -'M(WRp) >@ pH,D"pn+x:H$pH  ^; n9@o~)a@>l21/t r7wd}y·9[eS5T)~?:qD=qD`K1piJÞu,E;ZW6l>_N2uU r?{!s+FONOVmsd޾'Ʉ+SҞ']&|9&|FK+x>7Lܨ3c+6fyZZzjמ/3d_6aOې q3{܌G2&{܌KķBI! -BM!  AB!J)A#]@H$hD Y.A|i6AN'3`Dd)a2 .de އ {'YJ Uh!j 9 @P H4" A DP"Hb5AE$A JP%t  H790Q|nd)7{so:ۂ!wBf Yg L%ϟ)'_g}~<e?zW}zkL蔧pd㥚Ϭ?1άpx|3-쏟>zfC.7ZV/S%u wV>t 6ۦpt~xӫί$XO8SNb^/:ĺX|u{ϱ惬_?<^ǥXsy"_q8o_ruO:eT7KENu|nS*l&* dxQrLmL*Vr; (FREs)SZ*Q^=?.e\-T&#z2%WiG&VpE)>uː2>nC^ڪԝ2j}iG>8էLs'}xe,yj@SZu itl)=䥿,٫[NzB~ݾ[rRD:Rk'}3dmVFoP漏UhՊZ?Rz=fg?.`ֳ!kf\rU}#KQ\ U1JIڙ\պ:.-'XԼVٕ<.v=ccYxqA}Wh_ila= Ncc`ƿ~aͽccQl05v05v05v05v0kE805R05pVI"iS+mN=2,zztdwx?U,~ёԣ#۩GG6OSLo,z_USc=^N/kiex9q:LAo.3ϰǩGGc˯~r. IRTp(< J  B!᐀HH$( F#I$H&z!X. L&aI$x>3f 3f(`0)fJhsS%4{ۮ:skz;I)w_[no]}ހy6qo{y'[.۰84Ewn|S%ݛ 6Xf"ǽz|vںQZ&K 䤣;ʽ+۝ց*a:x[%M?FLޛ{mݕ`d²XS[ڡ j7{K[ 6Qor ]/N/uRި~QϽӽU*{JRTR܄ p}#5Ew߶|Jx&p s5ʦ_pqԈ':!Oʦ 6R6 LJslNX"6bv"՞ogD(vҟ+<;PUݡ/RXXB)RDy6RD)Q3^(H){NeRY"B"j_=2SDL]ʣGh{)*?FUFSDssV(@͋BRAT`*4 OMPqW%spH@$$ FB#H$D$ JB, LB&AI$t< 3K 3f0p+J#E zDW ߫U¿* JSPx@$  C!HP$, G#I$L( B$\0 M&I$|f.2 f P0aUBϰ}uE|`[<7Pjs[nixn{~cȭA'{]0Z?*!T ۽ޅx{p~V&y-7U{ Q%e3iU\ׅ%UK\rRK_G}rpjK ew? JCy⎽23&˯K)<@u#y> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 313 0 obj << /Length 2189 /Filter /FlateDecode >> stream xZKs#Z7)7URed@#ilJ4kÇ<|D4Ѝ=Κ_?4/||Fa1\ΔDJ5[g?Ϳ_k1g-s܈=ݏ=Psw[A෌.#=z8:5[[G'Z9}-LF8&cBTc8t/ f€!X5l'W _'< "[h |*7MkWm H%fq~a-At+T^. #o_{boS &XR}Ok!77m^Y$ /dSRIbٍO `+d, L^f/v^_Dݺ}`-njW@=';(mdOrxua i c1FRsCl3@]>8@`ԻA^O^^_v_ZicО?&Mp}d%O7´Og(Z  az(AK"tmgUX3~XZ>7D(w;&8M ive[ibZVQHr`%@`n qa>k2"D)%URp$Qa?+FHԚ6>ӠzfpS"*1m?Fư.Ġ"y {O8s귭}qgq 2i(5A2"E--5p OcX/n-֧Jc)⾌3vAz䚞T \ GiaO.:`7ؿ3bMT FZ<xߘ1Z9Z}/wp.UXC!p+eL>f$ ?*+IQB~P8D0=5}~#7a-w ڑ .y@BDZ R_3> UmX'ϘO $z#"P]w67VVE ܇J;gU>Hkbqccd_cy_Eedg(.jS!1K0Ě#W+lb5w:3"茯sJbtYuMQVQB5H#x9kr)x] !4B.W ;RŲbMKfiJ:WgA?4oyv [^aﯴiq&%OTuw3RRz"a =hjЖ`=߿& w{JCsE$ -:F,W̎r-Vw|?dȮ! 7X9 S>#Ĉj~wm <)T9 $)WϏ!4A:8<j 6eKTS+dokàDM,ElƨhMW<zN󅴽e˔i"mk[L yKu3:..LHe:NEf䅉gA*t#`/TD@CB-UԄ}0zXzгLċ_'V ~FaĶGx,[ҘdX> ,D8*H<JlWZε"S[ MlaW|F/6E\Ax<ۆAmB`ϝ\J֟gy|, .ۘ{3Y9F:WpEl;ըC_N'mjԃwm cmӒlپe-1O.<5kąP"R̪\1XhI\>> stream x\KsWrx;;N9D.+)*HAcAQJǧYK@,3{xr1pv !H A'g'lp|fLWYvz Wgns}:cTr]ÏN9*v<ܴW鋹 \Wԯg?}#B" 50ڱŪIZucVK7=kv=Os}(Rj1R:2QWf,}a(Na'/N~?!pOH޵XOo?M0";3n=DH> vrǩs_nډdQ!4b񶝾rRz wjR4#7|yzizwJk\ސX;zPg®QPƍz<!a6J-ڌ5nXk$5nܨj/W=L RhGKaqؗ.'5EC= kaat &0] N߅ X<}m:v]t3rz$$_t[.ԐP9.=7N-is>UZ31v8d2DeQ`KAXi1Q2nL}_lSA0 mwkR)<<%zu5 B V.+,(ƈi +3uG1E֍QNF.-!A e,2}Q?io0:k͑p[j ȳ l! aގ1j[? l&5H#eKU6S CyOA2tmJb/#ݺ_> ]k}H1~ԹʡCؘNΕA{7apEB+O $dns w/L5 A Rf|`2M ujv!0 )n^V;o_/S\ Oz-9<:5Oe,N Z\zRg^Ѕ|j.pW2(eaV!޴^1 Պ/X rrejOMtd"`RohXz5d ̐ >w.ԑs#`GgD,Naq7Dhc~]^R}䁚=;)%^ rL@` !~1?XН>`)bH%ܦI<;iNt^ >lEWy: ?moubAoeeel\~Li"9KV }CLWiEl=tM&v~s6OJS/s&u>eZ) N.mW% ƒ4j| uQg1I.nm)Ɂ׉.7xcp.g\WtњHzy94w2u!nKAf&ueyGt)|^_ɋM$ڮUfWTF9j!Ÿ?gŸH<}&dDGOX.17( + zpʶƺpDqPRE2No/[vQ"9ej|]d =JuA;׋0uri޿sVJn;'$-wAN}J j|) [a0[wI}AjeL+twͰ/|֪,֯ 6IP谩zig0vlUᅑrHXbv&¶߳x$O7{$n Ǥ!m< txWeA8.1*~0ºD0Vb 4ޑ&.C!gؼmU ɿ\)ףAsEj OPo > stream xZ[sܶ~ׯ8j ٩;6V'>tFJk/pp؋&yM9FI4_/d9,̗"eeMm'm?75_ uG˛ZӪ c&rp8w.eF:LZ=R?]pc4%I>iByyI?/")(I'[gγIŪ<ΩYY'F(v:KH ~H*͸P#GnARڝ0h!+5@F r] yP/Twor2aRзqB< G%fYTN023Ø`f^%׮ԫъNY³7oqO_uo8-#J\!Vt,j@g}m2#~K,Ho%zNRLv[YLlKX\ q1 3:!C(LQZeژ(Un^{W8%qɸBӥFsb<[LQ7"p2蔥i[`(5kȝk~HAuڨn5q^22Ajٱu?i74aiKV]$*AT0qQ:tUKvBf= \!^!xV2#Sj,EKNB1C @nKp񽜹$8TD(ĉD2׺%,ug0,!ӱk{eݱElXn#vP#$ס\h߈LSpMrA䭇@Z졳},aԙĂ5PfJ0#zO^lw?[P B_]_1<֤'ʳ%I9Kygj-c}ԔFT#\L+x-]iX1BU)g7a@hq^eϋ]JC[MM-w[+9tg,*[S-<Y̮B 1uA]Sk`{ߩ: h"K@MG ױ2.5ө5**[RKtkGԲR[vT=}YHl~nZݨoqIL&}@,U52 6eRX67םES&l,Xz;U]x92tS% %nmR&{SLHH;ӽf"T8fZl V&A C ,YZ*R@z[I*>'w$U0F!xEd,a;t4LJJQSeYn L(n/C+V -4mJHdĊ8_d=Q1ξt omN$XYen'҇ @;B/5$*zD[/p,;bo EЏ`ڛIJƙ G7CtњpG; #A&:@!t6-d fUO֗( ]aj#-tl2ݬn[v˂%Ѐ,'m!?Dluv@7F5Uyr sC:-QiPKĞ.GޑS-ڬء~BkMasR7.;KSz,|)Ȗpd{Ef$ͩ 2jȃhʿ,s7_MB]y#SH[!Hhr 2 +s,o\x#'ԉrc%f+)ua-+GNB4g*G 5zG^EmIa cf7*0 Xr'w47߮#&ZbVumآHt wn x2AH^/qcFe U7yNX,X\sI/Zr*WOHfgxC\h$C )_tjݳǒgO/|Vj"0*n)|kR(&%ysh9e0kQŸ.Ӗ1 ۆk-om!p5y>~n8*Sp> stream xڵZYo7~ׯ: ^f:M"i p XGF^Cr%ג>DqpT%GY,>G YoǃWg4EQQxU9"ʂTc]ϏpɞqZX=wÞqh.xdkpfS.pk~EƄ倕#fS}uXtDIFGLQD{RIhMkRFhK[gܹLe0-LuBFYfj4 /3BG:d_ǃ;3GLCk\~J{FneE*|F?^萨HhDFeZ VaƾJ/+iB8o^E "gTO-lHLwi \K'?f,5 a_IHejFSKltٯAr5yc€es 7\8y憚7 Dq {"ł frV#Ãc-[5`FȉK9wm%XcLm7-^w;cW`/:!8cԷd 3WKhAOw8h}'h)S{6`ɕoAzs/xAB:qcH5PBnG ~ = F mfv|m8Mw{@@;.(4h+K}2EɭSRhwOd}f_=d^.#-plzѹuwu Yw@@xhUFS#8M<3Lx)WGGO')_5|x~DMumVwT?e֚憐&8 ~Uߛ8{I-c.axmgx;7yp&{pbgK `R ʍwf%͑6h1B ~4J5/r ZeBDClNoPbl5O G=0A!ރ;\:^YIZ j@HmL弱h gyjObk>4$zt {jIsN^{pȠ6`u߈ӺG-#PA;$P'vEsjbڇX@|u GjǙq$smR'5v[7i՜&y'[hNx:7YW9R\2&.űpa[c|DRփ{ein q!-vMR/ͽLI_ G뒊[WB{^d$1P™5u@lyr0Wd X؜f"FyѷEk\+|cQ y^ENI3Dfu&qY6|"?ۅؿV>CIYw&EV-d-6bLR,Kƒk+'r8h?= RDM&;hd`b6GbiuN|9. @JzOI{DFSƧKBKEXl#=-Y )ǻ,x? endstream endobj 347 0 obj << /Length 2264 /Filter /FlateDecode >> stream xZo6_e`*=lhum!P ˃#ˉZv-%N1?䑢d% {P"Q>w<9ni|Ey$ b%^&~F8<%j 0ӌ.輒^i8ћ5j^I&vnqColچټtPL,r^S1wK6I맭o^v\h^a/[Fu|>0"TGEW˫[w/'ށϫ80寽o4 ]6?L2a(Xwy#Xӎ0(]3_޲bz[1\G}b0_Z]I*AF * >S4Iބ~'Bo g""C%Ngt8Bx|5wa:㡕M ? &{%&%S?yg.ZR9#gZ{`Nz">ѓK!Ֆ[aDwwZm}mBjT!󊻍t>WI觑\TYD-` aILK5[8K͜SjK/I|"/RvTD~Lk]7?$UR~LSW+ADYW. {\^/vI?KÔm7(DpJM]F ($%Qb>K*~J⛅,P,8wd=oBC?h`7^~cڅQN!R@r' nHB {Eڭaxht)<@R* @Z{$ eu xi,#X~(H-m@$Ŵk4m֦K.  ]-!CwbNܛ%9=_[Lԉ7^M4mGa lWRv4#q)Z8;$HmÂnGIwkNL'! ՋJ>i@^v$wW({M~C~+~YV О+N.aEDk!~-Bkp 4QFNLwm &Nz7:3$(+UG d@{J#̨3\%%&ZdUp6(+`G=hNm5n 3Sqt 6-U D2@WFk 5.?βwC3U*Lw$5BڔW b^,#w÷5_`8Me! }d`Z׾Ra7^#uo!HZ Oh9O>6ꇖClU6m%U}·{s uty;%(9}fWtzIJ;33DJi/ Ӎ:*K07ziW[|#V}cVH;-fWqR7(hY2 D0P`+rڪ'e;5~RCZBGEm 똢@qҔ[ Y&g ,tiX p_D)a^EhC2~Fk}+5.@½2Mz8àiSEt,f4mwdh΢Ĵ\DR]W?:΂fl5d:R^%\8_FiJt2)M>co]P}rʤWnȡgެSm%~YFhx=!Pog?Qdݏzvh1r;> stream xڭZs۸_{[ !Nr3N]/6f<e%(ǗbX$}C~/ǤI*Z'ϒOI.}?I[&tH)e%W.DI]V zBN7꺿Ț飺SW^ݩk{1˳nW^m՟^Wp^yoZ3/[;`Wﲌ+ͥ\) JdN+3ֲMfimmaw-У+$KΩIwZJJ2+Qy2J c7В3e^*ι!c"MXӾ.Ѡ DU՞?3~L#.ZT;D745hUX <]V]*$ j.A}ޝf#ᢲyQ3EUΓYRK)c^*"ϴ gY! \Fni T @hW;^ntkf@ڹ+l64,h_x4ع}e}Y؎vdT#up~RY>,YH@6Z௬V%T:X%D)'ڳjYҷ4̾1 =^;,Ec_al;ǧ槟$}pVHS/ޢ4_w>0q[8&ab*5?F 㴏%fzk’@VL{b_sSgm.mce_T!C3i:FVʸq6얙Gt;:^:Q?*sܒ鸉yx/%5ߌ4Wgme8M- 9OK w3""/rC,@}ngx׶VKTNS i5A=6KR-΋UGV0źKWHZr%).0bЃ3>3#XLL" C D]Lc>W(gƛAM6<*E ZRm0"jH0f,Qðm9ܳb  o1q>L-u5!c csz(?HiQTNG׬,H`-EJp=QBK[)g.=ec?OLn["6 ).ȊH>%K׎E)TM1vm~\3iuJ!355MY {Aq0З^! %@ K?(֦&BR.9";]KZ"8 BtFвRͤ`Y~,;^,Ec*f;pF[\逻ÉBSpVipG ~IH0[ZfO(cц\N ,J6B8y߮ B%ֹ;`" & =\t=C.O#ET -ġ]?,e j=yCG-ݽI˗B`s[jjjpda>Ew$DP-\ $YDv?qe &G!Cy&kb|]lrQ En4h}LD\~8* ~}`uw=9 ^T{_|#ȟRDoPDfc)Yz)븬Y]9d<qe}]cgח*MdƒJer;p;Z*7ʖbW+Kr)HC[0N}xj_Ҙ* endstream endobj 355 0 obj << /Length 2327 /Filter /FlateDecode >> stream xZY4~ϯ0T9FX jsaę cRwt,Ql:J/G_>|Rd,\FeF4"'%b6q1~~Oh2ŝYAdgߊ_1#oU ORR4{m긲{+Ө)c[ qs-EQZۇONZś{tߍ]…:Z=R9Ǘ?FØD4-ft<QBht6QVul(m4+9ayiJLlJe-(F1a&j/  pq%~ͭn+Ͱ6VS[6y[Wx"3ɧ_D$YV<NSZpг FC#ubb摖BTʛEh"yq`XN!#巄f n`׳spV`g m^9hVUR_7GR<@f-&P2R9@Pdɼ+VNBLkR.O4/ot`OX9 ʉv&7Gn0yJ >%̹4R E[IiMɴ`Lg,aJ 'c?OrSBgd.]<.EԹ%'g)\6# &e` 쒿%yje È@N8?&FM|M- |W&ځAS.*fO++@Ȟwx0.\Ltcp(Xe{dTN;ZcəQmf+@1jmHJg- -zuy"좡ѿCmqk1_\ Smڨ ~m? s7OkP6ns"(yi¨ Bǹtk{yH^j낶58 r͒[N 5S&@WҢlQ'P7n݄1oN~Tzϐ 5ȣ9}dK4~V0Y)E%CAS<3(3zza?Pm2:^GH-Qx4'GnZ ͢v!E>#;k$|kDKCR 7tz|eL~r>睳U|CreWrC}@ r"w{WX$w+OA$GIBL`N pgm*%eŴ$1Rc{] s'.Idw3Γ[ATp_1\^ &ixXpPdμf#,0Vl/v0ukVB;PӘ1G|& a֚:/In1ZqU912@^B^r>K\hUyDF2wIE)lWU82:KLnRsĐn!m4qc|>9jۇ,k׬b.dNg1AY# v\r{Y.KʊJt.GAt-Ld/qX"uy;@i !^`h mΠ?A0%~z|g0:HZeN{-F[C"舍a{8@A_o:K|hi h/tj 0wIT- h({EɷE%uIpa>&a8,OD%朸n^n8~y,|O*~S8) DUz :cv-Gwɹo[ 7 ÷E&`ɛY{ N[7ԃP w_ޫ"NzCjpc7t/S+`A9`Jg=!u~ tgLDJęRPLX*R8_K ,Dx& dZc&_+Y=6MY|\,,׵)%Ye 5OuQ1 gRw`M']qysch ,4y;sԸRb ?ALЗXکs8eEqVW-xd?3R>of0b#ͦ_h0X6`c{绦ԭN0ܙ7f!Ӟr|d2빐r >b`(MZlkJ_! W1QBvƎVBo endstream endobj 359 0 obj << /Length 2194 /Filter /FlateDecode >> stream xZ[s5~XJgՕ^( LLǗĭ iΰˑH+43𰉲+w.I]EqkW2MWQ2ɢ"H_, ssl3O+g{2IX&+1-bږhļ[F fR-4&|/7ͳ׌aAXH\P)5בd[ |^/ ֜-AVGu%V,`sY%T?h x9N2%I-mHMB> 1kj:s$OI•7_т{ńFrM)hǛl(Ɛۦ$Is Q@H xIZ-gcO`ń1R[~vP6hѕ2轶'Kk'gjliMR"{̫fiq"0.(>VHӼSr.450*P6) q 񣾾C#&)4 $IHQS/ 8~84߁v;)H`VDMm4Gܙm,VŠ/$+l'vL H!V$*려t 0*p. l5%/%;z[H&ʍs Sy呥|~ d!3IC >jV#2Hn₺0[ 2t?(yq[)g__ ADYyE ijʜLxC cK?'5D JaƠ*P'o-PԲz6@=x6%9ܡc734a?1=A>Gyl f銅ty=:+H};$"]kd \AIH>mkR29Z`Ps`;s[  !ZRλ-Աb'h@y/ y8Wf3T`s3'b;T-Qc>@1v:. F!?][9AB"Ԍdr+eST#T@|/}ZᦳκX>m"';PpT~dRVq!ɿ8L>/0U˰b8bP#zp(8H9+nH1{?d3:2;Q^l}\E[WhA2y*ӞM-_Ցs:,BQ~fm?N7wqk[;8ib@6'55Ӯ{GL}a} Yt_ DtڋJnQxN)Q?ݭ 㓳c{c;_o&rک8ѬHeFvy6(sV E.|$l#m[ݕ[IZݽ>c4Fh'4-nu$ڡ:j '[+R|NW:<}tm(!͵\5Zw./ՆA<-j55 3 Ŕ20@ h:](| S6\ZK9@֓ќ06Hξ[u3*2cY]1}5{Jr Ne,g$O+o'kdЎ[k ܉ە9*F$ txDЗz~GOw(U{/Q< ¥FezG T9BjϹ>7GERO zKS{ê>H`p ^x`/~[^VZGG-#K\=z{#h53QNǃm|1ڃⰘj:? endstream endobj 363 0 obj << /Length 1147 /Filter /FlateDecode >> stream xWKo8WjV6{(,bAF[?RIl#q(3rY5of! yOO$W>!Fۋ,bBaH6,y,Mx6ɾ LyL+Ze޻]"L-k%ۢ#FZ|1Dmε)!Rtm;|M^` 0¼UV!Q-PLE)+:dxw Q-Xf<*sv| +/QenеSt>~dc15=tVV:MZ.sg ,gVJ0֢ E4؍b  fYo1`]a81_vy!&p zLK9+WB$lȇ)d, "V9H $^[ɨ +|.164y DE" Ǥ&7 d%;IsD>75rRex9Y {3"i*\ٵf޵V2d)+WC-;2?oHql=1Ԍ\☪Gh)/^*}Nr7::QʓU>XE'!Vx&P _kLuVf`4nqt0[h0O.smWHD8 q轴m& D&!MĶGlJɰt(|G]5=tG;W;\펊yvQjmѽ_&ebNf۔T?u1K/q<I)ByrΤ`=Os ZOStN>>Ș;~He$drX04^E֥ecCO_C'w{M{mm;%i%ds-3R_շ&:*D`Ю\ːKlj;FfHDPZSL!6ZQ8soKشHkfH8~=u~a{G{? ~} endstream endobj 367 0 obj << /Length 649 /Filter /FlateDecode >> stream xڽUM0+|L؎m*RU!6lj|g !=g7L/#Ad1O)$lQX$4,2Ŋ-/ec zC^h8'0toQAs)m{2VhY`AS,pR,V”pOfǎ ʛ]㷣5!תg-w8;',!%M"`h @Ն'~8+e@ÌX¼+D+t ~Ao' [u)ߔp8Wc[n7T‡/vlaҢ&5)$H.qNqӫs㒴_ho]wJ{H,KDµJ[^6bڈj#x4CR r)E==ϋ?4 endstream endobj 386 0 obj << /Length1 2133 /Length2 14392 /Length3 0 /Length 15674 /Filter /FlateDecode >> stream xڍP nwwww`pw n!=+9aV޽zw$UR67I۹330DEYLL LL,j.6(5@NΖv<`:.61;Q j`f0s0s01XCw,M {;39 60sss9Y@ &@%RPY8023mh.3 d K2@h 4Jf.@'`cis~q39OJ@v"@ws MY 41uyZڙ,m@E 9:/"=.V[3_Jfq;SQ{[[3_Y:L˵w235K+HZߜw9 9@&]] 8|_ 04q-d7>~M}LlJ@W'=_"޻!n  OPg130^C_Y_V$jc_?ߌyvuy y TMпZ]"lgn6Z:KXzL,]L,5D6v %{g˿=3~W@+Gۙ؛{,}XKj { v.!wq>3{'n(_(qE8YR+Q 3Uw`TOW/~?q nieW7M?ޕ"6fR1Y#_l{WĿS+S߻R O ?6߻a.(]v?ż]{!i1VҝC;]OF '?.\KvY]99+,f+yLMxj wg(w5Sh轗]Q`i*37nVwĩoI^`Z[>?ƫL",NbO ҫ }~q` )Cʅq+QW2:W!\:MP4Kc9KBO uv=kD&$[g%akO< <\"ѩ"I28 Ņ2fD@Gj%ґCRԝXmJCլ\Z΢f<gl ~kS%Ԟ67Ԃ0aI x}ܾTu_Ys\tȧ}&&$^i M-HxaNkWY DOAZVotz(|?6 \6{B\pTu ^4-MŤYtA>EV~;1F!h\YY 'R7_)MLA<41yJt,DZG' }pXu\PmX]귣Sl<&=39t'yĶ7_嵱ӘT{$]fAό&Ab)/x\AÏ*z-PKӝi dDWܵQ*~NK8}c/Pn0<>m=}ǧlK4t+*Rg5e+rr|\ .k>?rCGNwЎjHV pY!ZBشb mvo~ v\ReLZ`ͧZ>ɳ2ewU?Y1j o_Ajm(tT'_r[.ؐ ǖFP=~'@'[aP6.P}ݗ'I20vb6 &-6ra<̩:O@lt]p"fk[I $t=V wOC-~ϸPXjn}Syu-RVv $-t*qbۘF4Y}Lܖ$⺊%OM<ڄCMr-Ou:D}klnn~D20<I0W}sPi/`Y56ǒ Ȝ`$[{eea&3thتi ؓtcUt(,ESI~?) c|s0z` E-=KT yfuRa|8Do (JC'Z$.ښu2E\ sN? OӓѲRL7Wd?iBW@˴@4& ˻1(KP8-]w؉u,l_R,ʚ9. ,{!Cg0NB(ā;m3oM0mXp{ W*lM,|b&O{]LP]j߷KgS>z= R1ˌaǑ[l-='ppKI w`#8mM2>‘c-'!W9Ŷq~c1߳g5@iA>ЈjH^Eu>rFIde;f![/qy*"//?gw3,%R$aXjҒל{2pZ7gT ՐGMaXN(=>rK-^(Ge:]K<뱳%,ahO`cR-0 kN-z D7xM^KD4paDX-֤,M?)f*j:ZIwXJķ  )}{3S6EDIkd0K'd-GnQLu"`{@0[WI_zkwˊtER)kRhڬ:AZ FZӕӦ[aWsX .q琽(ApHyO-U ЖgrfWfEy`G c٫"G.7^z8?ֿ0:c?'aρ/H ةb/t~*; ,,4:U *P! &L>FޱJS-$4ΞʦOo__pWTsIQ&h{  hW[hfPpޘyD Z\ \ۺ ÿ?M^&ʜDE4qRTS7 O]0+Im1d+ς[ IPZe+!0z UTk67ё2V>&q2rvPGm%ʈ4 큿q3v[TRGrA3rmщv+fs8 i2NG#m[c *1 Aao; ,*{dONn0z`"sfck>ⱓ 7ɏ>gMHl,8')6*k$Iɝ@fB5x/ t3䋼xeI3'3\tRpua$:AV;I9 :߀W_v1^\ p"s6$;kWRJwz%zF[;sN4cqw1|"hGK %;" ;*Ҁn )G"{E?SBO:mѕmkRi$-nBy Ӟ/io#hz}eK KKwHdw8}=ɖikm9|Fg1g7W0>Hw[H ֮Th/ɞ`G)=u,Ę >ҟpDD'< ؒџy55.d%L-'xoYfl?R{"ֿӃdGLG-is" ӿd]=-O:6S]J=dG~̕Y\)d0rr5{g,L`q`/a8jb}>yObg趀5GÒ)2Ô9svEۍ&by,io(,*ׯ65瞨-$4v s`h~CW:%$ҹ!Y#j x{F\0"r P5u)M}[wd5gˎճB/os#2Cso3K}-Пд6"S^!w{و X&N!8Q~tz?\T~Rbsu5Me9k{Ց!yKx) Ldőv3ķpMQP(ld|GC?|99)[RYéʋ!FEo?jo#Vt^,ú+F9&qt2:C[|wP2P}4}mXK>6m?oRVe|%e`r9Qfvq37{řc3e&ᆱŗy>budzCUo_`0intݺi[h!B)Nr8?IXGx 9Ec}h R:T% kG"wԑ3o p݀^6SREp\=uZXQ@y5gv9b Gܢb8K2}8d3R!{zӬPlI_CreX$yT,&YK:4$djxec\ci_U6u6Yum[{]}w-(;xyO5?5wHquD,߹J3Kk@Wm}qqA%qǩU9i9|YhG)k>N.i(sVj(JFW?J#:rvA3x7.4Y]?n6Z$8)&Gp 9"(Q iݶO6?l-pm6^Gr|hr:OjvB*,޲[Kze-8Wyݷ ў A!T6.y }S>?.ի#PகsB[:!gޜK-&ڧ)e}VGȷj䈿y6|4m#, $]w،K۱s&jS8ɛnqvDܭh=O,r)㦏)?wAkq8qg񽯃NOzSN'3tꋾqo{uvWlAˡ⯌f[c,GjZE"ԅkt}̧pgH(pT9c4y]&!=_P$0y>{+Z8C6;d">ЈT\/ 4mK ! qȚ=r_~ԝLdqSe;I=X2l\|TByw+I#f0N9B@ѴV1қjdA` V6e|YcO*1~!f-Ҹ~ڧ>jIhd1mRC|'bYa!LdG}XIFI!@O{+R I'5[OY,P"efC.p{F1qGtjACnTz(PFtUb}drۢpH^Y8b\7)u S-2VLAl]QZ dIR  a,0TϛEd#CwF4sG m^"?4vT.FCXoU_y}tV,@)ODzѹp~uő[ݪŁՒ\ѝ\#= "1gH01}FLE&;(>\mu0՚k=X/u3⮌ۆ!e .T[cZ`,,gDk!Y z^`qŔvES EJkP2@$ڎaK ^кU"D jh1TJ/{an`\7Syb o؝)*!NyӺ*ɋZ#N\x(*LJ6{/*fZ}yH'_c?S݊,"Bꕟ-80 +vFUD|D\ڒ 3>M AFWKEh؃ I.cH2]kjӁ%oO(gqN̦ ]޼;WP"9>ۤS"H_*Cސ60՜?M ດ?qv1q[61,۠nݢPǭ Tz!;'Bzђ!&\ $^{Z>'4j)ZT}ݼ-çLNjYAPj@ρvkV('mHSW;ߗcnx-zVn9uid޲㪰JEf/-x(};)d7 $yp?{'ޝrerR93UȤc Pv=;be)^4~*+- 5V#%J9% }U$+]1u;fQjtZFf}jR"1/ʪBIih4)C3wJ('Vi!$M4XϐZYtXKWH>!ܢ kutB/-mbq .ئad5/5҄S:8HogCF褢V.ཿmp1gyUx#?,ɱ~8[k4QJ=6%y ^B0D^D6/5mdfs+.=`#c&P9L U 숔2$8.[\~w!ΓޑE`Ȓ~/&z]{)u!+`Ar8Tτ+^8/sW)ͬQGSd>ͦ:aB.ty/|XVjTEieapN8 e$'oLQl]Zɷ`.^bAޥKl: ˨Y޾"wE\Uή"S^RIY%6fQag&8pSf(QmBng1*?D+Yl&t:''GV1DZU}46Eܠ44:tpv~|=[Ff_LNW|, #t#!"p ]QGT"6cYn٥\dQ*uwyM9\T~"JVQ0?~('9 IvP jlJw f?}Zu^1iH.ciWd+Xx)qeGP}ȝ( %_(҈F, /C{lu1X0d>i`N4Vzuݷv=<UjѽZS.ӭ -€Z6@WFSIxjs"X52Y.sV1-4E n }Lj//!Ml;\\h7<|&L ~ʩ{|F5 ->ש+,WJ5GG˔jxHS4H'k31h;OJ>4 9f]X"}-\+˖ d bXr1a!UKETh"Q-K#+1!$cvh5-L7tT@ vEzj; B䔮DM,@/WsX$w, h }¸.@ӜwuDXgc3 H#W+ "M˔c6WCubho dd BLd3i>Õ 9^f"_? u;D<$ᕒҬuZb֬ plʔ/B ,ݫ(A X5vEɁ;j` uV!ĹICAl+|j˻Еi-9.{`xc]ڌ]8ncqc.4~O\߉CjAZCw/Osd<[Ցtp}Cn@T0Ą7UUn+1s &Cg;!V.fL[R@ /0J {wU>q"RfKCNj+ v%1!CߏS3S'4myDP1pMס |}yř#|@8w _"~=6*6oa`hE0ԪPQiN tOn(1]O=Mc8󠣭3:o*f}m?^ 5bSG([yL|9zk`-At~mf#3r`Md=[ߞxn^PKj2/'6q?aZ8ǜ1ʪx)'Yֹ0^K ]Kk3T'IURjeWßcW- VuR_r= 3ך @Eb 5* 8HvIK.9❲mq hv%4ڿD%f@M*tq;R3KoI5^⮛3^"}ߙ1On)PU=D V^@s?y6ptC۽q*=w੘Zњ-74?GTfcˊ̡T J ltosSLQ=#)FBQx{$fR>Xg< E*`?J! V$Pbr}AD`r\D3t ''W/^\VEL RN7j@Y!PO^{^VfJO",W |?= K6I)W)WJ6-\oG0J_;$k;&R:eE>YA ޺7'Yzռh笢}ЅxK>?J6Jc㷤G"J`Y$ܞ򣗥;Ш(^R#eQyD?gRXhF7V!e5T.Vs@^ujk4{c @'P콰L5;RەUȧɯZYng H癩>. Jː0vMIk /fnTdnSj3`{Q)QӪS7jy Mq6bM-F6֣rq( VㄡntB(GTa[RLLO6Y|1.#&qk!;?}2zn=#H`E-zرX kpvnډJ)뀅7]Z3AM*<Ah ހxb:[eQGWlRa}qz/PO1CQqu]6]6gi'Db?.jmO]&s00/A`RVWTyMNbgB]HG PJ[ 4|,L/_6)egxdR4gx@3:!y~rXio"Hu/I/2s9QP+ID_FtLi# Iu|?B  b .`){'9dc {|T;5h {^3:)^nKi#CD8?di_ɀ.Jխ'>Q p9 =K`u.t@Gq=n,r6&*VK.DT#bGiES:9ޙMR8 3C.Ub ck1si#bd4hM*Z MN >9w$KyZbM0l8hi,+e'*B{vvO̗fgoQ] Xzi/^e0+PF{]3L,= s֡h:Bu`?Wl}[ex/2lz?_kmWG-HL{ _2] *8H^ġP_dA:}ɠQnpvOܦxŦ l^3xzC ' Xzm16-w];3}l6:]& P@Q>-iYdqV?yJC!4Ɓ?[ʹAc BC݅ZXZ.OJ,¶6;a 8~F(K&G>)Al§?2tVJSW4&,3Tq@=_3ETރH]*Yv %!e-(̊rZ\d?#Z|l$?:qcпcA]+"$^P1'~'!)#:^#n:*%)[7~Ğ-!:3_mnE(Q@nJH7:l'Ǖ^-iP uL (&Jom\e%eEsG< */f4@y;$U2b#0hWUS՞0CGyl҅,+Rj)b$0_= %e&f .Dn$4gcȀZr|9T{m't:K +ӫjǀ3,KϤQ9= u+7+4Ɍh躆tsYLӴpBp1  jI):CUEp|C&~U/9)14z4 ө6VNZzڻڼʏC)3 3md{ J {wnsT45pR!+KS{'59Vyxghᥓ? 1d߅NzV|i7Xҵ.Akn~Ϊ5v=YWG=ͭ kk(й~F#`!yx~uƠ{`ܟ89μBIsWYuB rdA̭*W0 +-Qdˆiw]sȈ׏{+N'JOXn+30g^t2%+hb;@qIklz^a"($-10D?Wyx'N6hەXCueWUW&%ۚrCGX}iBGρNgN~}w endstream endobj 388 0 obj << /Length1 1455 /Length2 6217 /Length3 0 /Length 7201 /Filter /FlateDecode >> stream xڍwT}?t(1@:Gwҝ` " "% (H7ҡ;繟=;g}sDPpj"(A,@MO(%4ܡˉ9͡Ho.5$A( Pq@IY@TDDo ) P =!]M̩ @œ]P8?xos =ꁉL`<.([tVP.c7 ~Q< sL]`)LN(? a`(c@Lt. @8_Xr6O<w8ܡM]!?JC~A=s9bS4U ?H'[/72k!j(M+?u =@Os?8 qE)ly@u`0"˜($]0 V1ўO4AP  F'b QG3 No13H?F3~@ȯϿ0A baMUmm?TUEЂAQIP\B %% o ؟å |33<@C<[ 0 ނ&H/y 0,"Z@h=(Z$*pg B a(_sw0ap!EDKY;^t ٪Ԁ_'*! !bL1' Sx pB T 쉹P'#GXxxx'QPo?r 1sI `(חQ*WpZ m>? 3ykD, U2?tQ.k)O^c<4j9`O% H 6BժT3U"d7Ÿ}+غ}TGȄeke$h%АzPH!fSX*I'NGNu.xk],rMa|7k^5n+IX=~GT:s5XivKï^eRҳ0Zϲü7f/G\MxR@YEYxԖ7CS4+ܐo~}+^m`azܵtE䆗B3#UOght_ϳ'G;$oqi`9KATFfE0CW7[vx'gUQyg*ÄΈmN#xj*aM(]kRmlj6WQZ헣z鮎%!#k<밥'6DZża x{ɋk*䶚uO_.'m=%$\: -KAx4xk̉_y/LM14y1~-qP<9f!nKڐRpc~4}!vXablt&U~c>l᛫r72{%yz^߻6(>Fj#`{+LC*?{;?7x̰c,(׋:KbcYez1T\0Τ94S,.R}޵ekt0hM9_CgVfywa5g+7mm<я؁N%EkTZ(=="?#:-_s6]`SMV폁s觳$H qj=}%=,U8gNgUΦSD[TDSݛsV_|U}|6yJUī 8i"q?U}|I]'qBݒHskX,]nr_DCgf[׹RG2L^Q{EW@ŭ-q^%F4޽0swZ9\G2UJq!d|@qV9@ˍ{RIKx9i7';M)׮oWۈb%"'ǍP19i,?]98޿ύN05R* c6=OS)($b,8cР 3=*)^h{2..d髉p ؃7x֎'AU[D-&|ȍmy-Ew%tF@VDU9iGa+6Sy#ED^;1؄Tg3&q+tZjA !&/M=KN~VoPfY 'gz&#z,`.G]zh3{սwӆ > _T_R빓c>[Q]`pX]+քѝ0OcQNkC7:4tQ:4=Ldrk:[kzW؞'sNC} >YfsE|N9mNK|'V&\Y_ָ諾, x ;>'@%ÎE-w{c®") xxYgU 2DFrPN2'͔^PoYn,#^*MKƭ޻!1aAEIrfT?6RjWp~~O<yWC[nP(wsG9f_sCLuB]qKk\dPKg%Dz Rw5e\xEpNS9 Eb 5!1h=6?[c!RP}Non5-wrTْsl1WGL+H;ANi|9M@P! &`My|r k}c!ˆ)V{_O طrW'{ְP~Ɲk$|17f ~@@>+78"l >Ug%zmRҪ4CmZqw+2,m]Z2fjX-^FU2ڬk"d/2m) x]mˏة3%yHaK 1ckah "̶ȔMs~# 1sGi[?W>>͌MB0T%6FWg$B, \ĞQg1;JZ\@d(/hDkg+gf߹ڳMjvf.z$di{'uSt8u =*?ƭɋôp8nM~jڬz`g%E$eit`09*?v^ɰbΔd1qA,bC?M(24FI΀j؏<'.@mlE{B)g(,F'+i*BtV/ŝ7ZWfT7ߜYovҲTDKD!bn2j<{E OWޕ3k|(#<%e`W$s{a ` 6dbqi5hYjآoHEFyy@|$tgc=¹{ӓB?qX6ԾutLZd(h]t!q|2Z? 0*sb:t4]zX W{9bv35yK:FOOqe(5Mh;%^|bH+{o iEV/p"9f'-ʂ-+BEwKVI^I5E:Y]9*uOLO>FwO\涁h \*di"AKxidC܈lL+F܉u9/&܄*) {{Ε#q7;./hI\ulk=\sNULUWu%ݧo[4XOˎ%w?Hi?~ g(0Kz3|WUEZz8PA<7A}Ob|Ԕ3)@:ox[2@&%Gi23LLc-) m'h6f~Avm,7clt-m"JM$0mlʨNX˾-5Nm}fuL\ɠs\VUMi.Nluv YCƂ,u9;i>C*l .*c5L79G u3"db3mѻQU׭.2G(:93ULȟמ=%3[M[͟5 s4*ְhRx8,!dJ0K=3ۨ=6sxbkQMԭxYbP]Ik EJIϾdUX)\\e1Z^,Åp0yftKW8ygJ ķ[#uN 7Sh[g!y(?炝k<*} D{*?b-B@R"<6c5?_j6", 'uF` !q ZoŊh7;[> BՅٟH~8uɉxhlz-C$=bX!uC#kDRl>Rg7mBQ5_ՠRIRYn9uP4&=ܫ(ZvП8k)E2׷.MË^ÙIʻG> stream xڍT6 JK#]K) KtHt,Kt HwtK !J7"!//?7// Ǐ슀abs>yT@~PH (, wȃܡ6un F\v9|X@QQa?'+ G. FzW V , rBp]$8P$F]6ߔ 'ԸqXz(⯀.rPk0 qO*4j87ٿ AaAp'g BME5n'|;:( 3Dp#9.sf C"p~O u=`XPo6n<0XYo̽ >;0 +"/"y9|{`_-7 ]o @+n_]{ev08?#Qז7򿂲pO7?' ?|ο:?^-2~_/`{o}^`o+k}ނ?)]8_Ouq/h7rWP_9oT _ݽйܼE'F %q#ւ#,^ジ_!~߯Cf |B+ ^ x6`?p=g_-E<],AQ;~+) q8l]x^׼G A<0+1}7^#0l3? iY-C1&~Ӑk ٫0i5N73cATq#PܾSCgz}.zm;z3w?P?{_04$҉hѾ&–e!yZ3qJhFGWuIo:f 3ߜbޘF&k1Jt\yT ,}:P=h9 I >@#/Yb)&}/JDLW=Ag@./ >#GAОU$_ v$gf {m#<>4I~1:k5R^r7,>ژ +qi~_3?DgTvHFMٹT09ς2:^gYz &V}CHYnH,q}Zp  ,!]YDwf1(\AoKWE%&u=rXkkA:1W0yUy^#bzQ,C< %{nj >M!}:)s'Nvi^M?/ YJ:<MuLla[Eٌ!(?\neb]MOEOrR|(R8`eB4t3Q\R F;UàC rSyyuw?cfqI5-mBDj)Z)Ӹ5뎛Ķ' pFI2gsb=L_nG`-Ǥ֝/8F$XP zcI)wg5piϻ!!`1@: G1ӧC 2쳮v矧-u.:|o5:&xQ'銈jT#ذ,6[DvY*&W_Uܳ4F{UJw] 丞f]ǁɲuqA5 8Y$X v(x4:k8 i16t&<8izfs 4=Re.)yݝ`N&v?<\kZ< ]%LL|e0cDi92ZV;ʟFXjzM{{񭖷W-5RSc#L>SĽs`7 N~S^u~Au)Dѽa"-˷@A#qh 91t~&){W"{-/ddК)doуjFM/|~+%&OG +_a{~xόy^ȶnKI/h0iĢ H5hqy5a_,7݉N!vZ (d!PdFUׂeC~R,f^˜}PCv.0_|JZy- HO/L 38_iM)R.Nl9N/ kH"3dEĩ09%>V\jd+'8[ݳWJSSUt?[4 PV12>:v>ԯ [3? >rٌ>VO %l`3 61v)YS+klz]:AY'+g^гt7lN}'m^oVzՎ-3ouvb GޙU8=A|JywF}G«Vb~l\6ݮW[oq>O<1l('"W {;)dG6=dP?' *e(=kNа̕K *}3@j;jіi1tD ]c*QsL烪eA[l긝g@F0$'JL@CѼGh3b*Li=_@gUt 0_CK_ C{LtE޹<Սj` dJu o69$AG"9f<-!V~H31PH@GQCLminVh„Z1'-hcGG90V NXSMÙWS4U(fy"7_#mݹF tIե>vL[D j!"چWWoFp ar'lx4p -f~+@;/JGȤ<;Dm]!sx i0cɴ^|Q_׮:Єj4et:'f )]n'{?z/DlĈ{^tQ1_fL3*ZFPԨ1}/? xh@%Styt 2#Y4gvA$X"n9EhJ|.-W}rT<2E4&=}}tUm$%tHtյ/0[&j~y썜Η_,!;ܷSm-Vds#*/L(ϞzI(x̭`؞:y;SO>qj\=\pRwUA5,%ZyN$ahfV=8d1^w%`:[i)g8u`t댕7: A>q+|.yhRSxt5t6# q%sŴ(=s}]H}l>-d!VPcL3w!*Jp,< cB @d&/Y@Z[&J+k i\ᷨ.[(ݍ$N{98S)Fr0aLגݝ}ch!LZ:q̠O~]D0ܐ ÿ:4?d(D]ӟl.@fCxXm]$814Rn4xL!׳DtNdIz9o)yLTqVZ]d Gn5E^dlaAH?Ά[~$;NHDž䂵s|&/A@#"͠rB˯T6|;JwC4DHB⑃z(N\'?QeEf}P3˟O }8ݧܺy~[E`*$Ej uJbYfS\vŰuFEX/3j-ѧDLJU >|.b'(f;[%#5Kd;>X GN~ ZM@w,Nj]ѷRw{\{L,;EUeŘЧGz:PbͪK:]w|8vq&:k;L'\t),l9Ly( gdy*ZA]i OU߹GQZ>r߈עjyS%7;FNױ1biG5j**gϒ0uV6[^s #9TP M+1:%ˣsOwDE}q!vpV餼eN\@{WWmKKx-bk鴼ש4hX[4/ &S ¨U%mJEpL>} & r$zCjfRHԳOu T } %l7e=厅83jqZJB=7@ PgHVGjq"a:nEs}UՄ/;X~)kd-Ӂ;*ޭ:chgEtds7ݍtA$_ ͢A (’jgS6Yz1NmQe!: K9 ; Ѝ+AD>=!Z5% M9d<}%)ha2I6l2KJ]S\*;iUf2#ayeWLH6[Yīw&ʓL2;1GnEo>c8ݥ_)4 K4ϗ\2`Zov*Tnj ֠% ~gsbAZ}d=DfR$. } wl^P-^KEɬ3J7U'+{sK6 69E ,Cv$,Y^jX#@B%eW\cA Kn:SHrSI2F<<'M_cn";~Yu~Vwhқt 6ќәpb񍤈#61R-ry]TMIa^ le1jֹX S8_XͪbmC˧\&c7>+c! ϊ7E6I Y3tl6/=\bEm&~C}EY)4'^\a ;_\%9= /oRb.˧xN:Jz טe;s8'@aFX=4L{ݪJҗұ78VNH>C7i–;)(eNw-F, HxX~E YgD k!lOM0nt[j W?>rf?p_ڠgn'|Ȉn0 80lGVpDꭲqW)aMpy"ں0uɟQ tՂ9ҏ-6E Fb[dL~2[)}hwCCB%usdW8(f`'ų(Cor6D*F髱NdTLbnypﲓtӍTJOJU W-!}vN4䕾V0L<܇;bbo7h8Kxۚ،x|==BklBL 7MӸɩ13oPZt{f:ȯ%b|7 ߅e>$6@T0\=.ODA8 sVyl9f{_-4;rӄ0ͺƥiL4wX1OʡN(e8VJzRQaٟZ*łVku4YXr D<~xerŜK1RbPw`!Pd-QPyI0⨶ .y23-~j p)tȪ0wOi-\01|]i`[7NF*:[(߸ݰ`}MKև[g {bWjj /ޒo<ڥr %-sүƭMLRIw}6N@W}z]C$;±'9R›y1"[H21Y( (GNSճa/Iy\'ouytp^ӊҹ f3/+5r3nX?<(-,NlPQ2u~ɪV|Ăd8qzOM}eEYN7hQg[.+WoY4aZOD.\& n yor/B .<ԗ=sI)"hLD Zyx#"gnX7(=dG(k+9Qss 5}z _~{ 4; -V[W*\Z[vɿ| Flbb5 G<<2{ga!%*+\N2U@֨Ix7zVfJ& RAY')rq2!fž9DoZ-qpzO20Qn)|JL=msMšDUUUpft-YӴҀ:It5ɆRۅ,Lfn!ekr%\(,(-fx Kr^~o0Ga TDej WmśqӔ8eS]tK'5UQpM3{T۠ &SY[}촗ul +L3Rkߤ'LJdY%5gH&7'e72_9Cwx}ˑAf׫T]x=ܠГOkrKzkf9S]Ա+_pa3H(ng72eWXP;wz v'zcf٫xmoio,MMe; N9=¶l'Dg\ Tjdt]p؅T>i3u)|ֈwR+#Qh[mwW7g&?-?[/<G*F<.mJt03 ݭ^617 +=n#r}ƒ @ޒ +XѮf [[ASq8ԾFڊ!txQ|fuNد!_OuFO7FmgB)A Wr? ; –D,k:<4?*$'t8_w_hhK̲ܕjf!NSVM ^OI|λ5._B98HO$/Hks:eWg؇5LIny|5yIYj endstream endobj 392 0 obj << /Length1 1453 /Length2 6790 /Length3 0 /Length 7772 /Filter /FlateDecode >> stream xڍtTk.HJ9Ctww 00]R%- % %J#{9kfw;zztmP$dՕ 7KĤCá n(!dݠ4'Acԑ;EB ;& xl$"dExИc~ڰ""BP7 PΘm p.E{" qFq#%80@y@m4 ?ȸ z0. q08@a*P7p@'W#w1Ax; TPF{9DC< 08{r@AZ  Fq`_y~ܲa>q^; uA0 ~0;(nP?Ela6h5 ; cc0@~y3{{<:F*'&#rx@0 a^?7^-@tTF!.A`no /Ͱ}Cf(@6[KoHf?g ]#1@w!ա0w*!}H#1sa(V qäw9C@(دO Fv6N ?! A{y y777!K n)`0n  x`|e x1!l0Sf¿( jCi i#X|Z#Mɵ6$~j5Th\J}5Z`ت!z0}Zޛ†#넩|O2L3L-qҢ!m#e"yRa'R!f,5"ߖuo{S,;LJĚEid0&yV.~#m R^g Gɋ<ǫ6˿sSⱝAkxWBW=^G6?%1+6E3>ᴜ h_[y}c'pVDm#MY'Һ1U6&\܆Щy6 4q0Q}c ACo+:χIhܕɤ=rtcayZ b_^FN5B-,?2%Z!<[[u{G%=G;mi]}` ݠO1 &*>4͸q"a/6P,A̸FGMXdT/?cKO{jJ,O/pv3lRE+ڄg`*, ,R}#?g%7Cm/SEjzs)qdq塃մ2xGxjSY1xKmMi槛Yrj ~1 eg}"m ,{YlO+KސQ% bs1HY H52m L# 3PMHh'A1ٻ{˸␤ZR@,Sʕ9JzC*Y| EwP)[_0=) =d5q&)C7OZ/-gk䛗hvCI6}h׶Fw cM$?pO >WUW/Bꏝ׶ }io>{2>T$ Jv[ԵIwG61pxYx6DZ( xI Mi*omt\V)|u_&]Ua{Zsi@^χbKWa[ 2|ڴZP:'η1tՑ_Sr,b)> jԃLȻQ^Zvnɩ9פLسK,e {I!\c+懗h@c[:oLl]O tRS:dJ>Yզ685nnRXKMdH80Kt l:hŝw)N뤾ǽ(.Ϋ''xԢJW[%TI=_(i9]}?PK2gwj52 y,O, /TLJ2+O ꀏ.ffJer&YgQλˆ|4L2rPꊮPYfҳq1Pjc2bI8NuD:V}VM*{5stO$?Y|śs Fb#V lW $s{bb^?wIx(JԺ="R1T~]xW'-&Rpd}a+YNUF>f0vEL1\9=mJ9mRמtqM4w,I߿(@/ FD֝_#COr[2T\r }QY٧q|Ԥ,g^9GVZq5>'pM]9D2hlwf2ɥ0bZի f︥V~>[$nvŒ,.nc?t-PAk[nYb/T [jsNR5ڵp7շ|\;|mDʣc D%n0|,Wqkj _!yxn#jWx)ԺƋ$aL^!P}YWXY aaȃC 3 EMMgucȆ. -@ m^ˢ^YJ;7^ 4S[ZJ>-&}acMMvכorBM;7 'X^Ŕ2 tdJ@B+פҊ`秛;YF>(T>f?rry mJ"$GQE b|~ X;d)mGt]<5uV IeR4 C%f/ͳl)\oŏe헲1uRnx)ȼS&[ ~?]VW/LQ=vB$J1I5S02a#<ޗlZχ9on^۷ 䘹{ٕ#xl{ږ 2\ )r6nY*'{H6_Dt'Žt rXó ݇Յe*5o7{1-1.{xA*Ro糝WipnGYQXnEwT iK`0f"rG⬝'>6E=FBԾ0Q _okrZŢ[;cx#u)I(,%s&D[}H$ Ps4ֻTVʗ I&}%mD=dHJ,D%7Na/ᩜX|ٶ># g+IJ&x˳ /lM_*{ATofc y>e"/=x'63} H؆#c\% ĀHEӓ= 35{CXvE<$dɉQ!z+"O.5p?Z%;Vn~rDFda-X5 \V%;+GeaTѮ_N '~OJKWb3*kg,y?J.]Rn;z=#߭93~g$d!nNlrf Cx]qEh?"{{ 1Q.O>_)%p伋oؠ$%7 %8ΡAAv>:,p|M}&u%sYէ ơ"}S*E/bs6ȨeeF_w?N$CYIϔP2+f(]) @Dui YI+/ٲɻ2%B$4'>ֆZ4zJcN)%Rڒ)!u̪c_ngrWsjBeΏŽy=1ߌmʝ>>+._R)cc8sL6}3<DuP40+-7. ;m5caCe`'Mt# ( ' \PeI/?vG̲+>J:QZNн-(jΡT%@y#~AY}P^e@X-ڏC=R!ZcSnJx\_ |)v'XSj/ߌ(wagKtsX<2ahH&f+xcH$3[=skUz;plkJK 6jqUE8VY58™LEbSF TY0F[ހ81YQU{߁ Vg8hEޕuIGr,ޝGz(0ayJ6fQvE_+Fk}&j\0W{D~#{}A`$]sꩀN5xjPΫׄGVb, DG<\QYS )_LrKne3~"W: FahuDޜ yhR2ߒ\2hTk 7"K~S+XYHp͠'搠#tMm}Q5Auҡ$"eGOm=a㴖+&B$eyv ٵdS0gޫ"P8k1` .*T!'|24k*Ț2;nʍm2q7VQ5l6g!{߭͞P?J3+e-e]껞Vw+}| F#EH{!YGYIZLﵼĕŢ^ko_/4z*xghΎ sDCqY"4.-xj:cD)Gz;IɗOЌ0ѫ8Mw][bT҆t[H>Tv>IrNӔN)4m- ex ^4<"apDbR=%/Ig؝fQvW>8QycIF)&՛4!O):[m(FYռr*7niʼnϤI3O ٫acD^11Ѥ)}\0yկUu1U N2s\_k&9iBx5 0v +},Qٻv82ʦ#ӺSvso/cP /V'šwyrE5Ϧėݨ>U } -˕3AbiOh= ټ*"r8`=Q~1_$Mb15hz}[VkTD:#??[Kxa} endstream endobj 394 0 obj << /Length1 1705 /Length2 12258 /Length3 0 /Length 13354 /Filter /FlateDecode >> stream xڍP k݂www'8 'hpww n#szjfݻmW %* PfdebɫXXؙXXؐ()լH@'g+{߿bN@cLƓd\lV.>Vn> N|qcW+3<@tFwp@cJ `f bt25@ƶU{S+ \X|nnnLvLNinV`K  40@WfLH5K+`7c' M`ke 9ỲNUi9Y/XXq@9<@s+[ @QB f :ۿ[1@BD`9:Y9lH7oU2HO hVv:kwy ̭@f$artJMy!Wf8YXXy@GԒj?2rw%2 y9`'׿XYfV` _ob_NV]c6^f [/_wx1r8Y S$Tˣ4WoO+C  o wX8YL߾X?/&/o/$bkOo(Bm9@ kfV.vW+ 6~[?err)YM-tͽdlc`|kѽ-ۃ֫?U}ߐ@f,'of@?G;!Q..7Y쿈,0xߘ 7Xpx̦ 7b}sf _l/fo/vXvok | d/_ͳӿg Ru/d{'89W.[|@w)¬)u]p]7Ɲ1)TZFvIkN7"Ih[hIZ}d2ӊ4?HQMx[# e {<;^Ij.Y䧲Ih(i\<280#ƹ;FWxz$hB/uϕ 56N| |<"k */d9yBleF4}j+HPSOBvN C?&,C'2EVHLp- h\tF:pw0myqep64`VfP+'K݈%t2(T&P a5 8D+BuEr3"Ƨ\c}} C?5KGy%'PO]sWc Ae8L$r Ғ=;sUzLqʤǑ ?EBzyo7oE 5+Ec6Ըs?wgw:+IDBn 5Ţj >lv=1ISR.y/ϋ |ngkWxCMn>ؤqB AU.sgnrttxb˶RmOE:jM&*N._ `|WMLxϾS9}ˡJnx+=款 4eR^^>[b$Ջk /qV8_:1SmR[iYpWrH8\LGT2c},uh"˔FJCE3uNi`EIgح~|[/KBZN4V"nWc%kB8xÿn7-TB[1z?ԎڿQ)5-*.ds'q$3`ͪSTP )KBv=?eo叉Al 6}5@᳐0~ݩ._{d3ҟ\" `<9U)TMu] !Om6'Ko^ۊr3vذV ET?z4gB+ *M(YRa~Yl~ݓiN-XCVUTyW L,K$6Ӗk,H. !""Ke>W fPDO^sv*E}0c[~˿<֠E z˜ !qAALe*/?7.٧ mWW"m}9Y* ̼h(Ϟm̲%+|ܳ3 fVvLv9 ;"`2h"^XOF!y탽_$ {7'Ѓ(&nxxuy *Q5 :O]$6Ù0 \ bp(Dޥf<ìs[ ?V5y!S,졓_a.2(RE LSN AWlso13̗7 *UTW.[@6{TSDV;O0v^;L7Ҙ㫗)٠T(꺆:c `NZ^1PZm%F j-'4f!( ZF.&Yn/gx+ReDҹMj7H:_aɸ@=)uLnmnǗ߬~Nv"IXW 5hV!st,axYdR11H/\S&M?3]\CRMt:fT[w-x{<=J\H6 D=²C N!A^]υhA!%/Y-#!qH j {^dCUڋT|A$It%eoH |pZiX7L6Nd0 ]FG̞Aq)<-gl'@d]չlRm{\h'%<ӍM!U^aNa ̀L@B-2+JR-)z,S|s@_/7}גӏ$K+'I4՟}n{ (GH:"^GcH #.7e]s/#Q,.QY p = t]Dj\͟+M4"^uWgZI]t(.T$4:^p>V2Jo\zeKQƪwB{nF{P+m67 Ui a$0NYmI / ziVa:J~vc UoYx"NzVZ҅P2a5=y񹖵n(~׼̂ג衤R_Lh`ERmf[L\$pMʥ¿{e}xC H/6zь^zE,vqYw_.{x jZn_t7#?8{H$YqIw6x[wR{obskՎo;UЗoaN{v9|~EYFE?Q"t"Ќ&;F>ewtxku)gc=T7(玺{  sIeѽz_m+Sy4yāQng#GѷnӕeB][ >%`>+m(/ugٓ!F/#yN\YZoĹ|șHzXi.zkiq!ŦQ"u4/}A׸о.#UmaB8c4)P\Jn/Pf6|{"G^i Л1>'d: !YR~߹M\@{fBD5 /|7GK+"uBk*6g%*W=t_7Ƿ=~fr {8/ͥz`o -P+u+new5fCswK1(PPcZF*(wI_JM'R;8SxEWZam\ל h0oo]bW5P`$<3 (4]} l잾9goCjhopJwEAgyGRk%4 K ϢqI#둤-||0|8SK'3ՠG5pƮ1-a=PrV2D).5I03bqo̚z;q0E8IZ;v[y< jas+7M3߼lƮ[,v\W?~Vެi˓Lr=q%%"=70Úu?]d%sDƵA[ȯ$ո ԧto˫]Z|0KB7뵈' ˢwA]eYd=jm+&}pK4ut(7}Z숨/[!X N=ڞTN)"fb|\zö#ts+;JU"eA8#ǥpO5$1>)y3BR@eww`x`/|qˬm"˨s؇KUJPp'sMYAPAE8VѾYSɬ@to.e_Ā wOjY<2 J߬oKP/jKnĬT﷦`"X@oNjYm{6#j:wR1Dxƭ^Vb4s%CxT1$h5\]@;̓ 8% 58GP;W`WhLVt 齃؜ Eb{ 7Q/ÈBjeQ|? [VL`bxJKj}e\M-<lN>>Km$"Y ApI[(n7H_hF ^,6Ar'T?0van3`9_pVyـ\۩= ۢbdB1eh N^|C0&.%~_IzjmJ ~H]喒b,H3S,b,/Hڷtwmh*\)r)f\-b+|RMc'p|p<"NԴ1+JU%XWK$rhZTv!N Խ߳;b")]gRkED'Ԩ=2 W]Hvz/~pK(u˃yϼe*^C/61_Q#rax )Dts\x$S#%87OBPZ^p) FfMAL{"$3Ag{HRߒ8dHuN{Xr;*0Q:5}3 F J̺_*(\cOLf9PݩEvXWo5t`[՘Ҟu}Mb_2FoWy)`mY ['$ND0jrs_! ( WTSGdu9@'U0Eokwb׳6I'uZVyW>'lm]uk.|6H1QWƪ Yޯ- npN׽|zjݸP'uzvɣxF>$ >f|NSƔAabE'8`Yv飦S#"C%Jo0w :3 $+OaJ#D؅ںҺ{.>xA[a?Mjϰ?)qsN1Ʊ.Ҍ^QzV&+d ?Uoď# ̳f&q_y}[+U 0PpA)_!AՈ/3G;wQ5%I#1W 0pciJR5~59aQ!룟UTLqDB)xf6}rr&.6 Ѧ~*xfy?acJ[Fh`dQjy;#l1ȓ|Xbfę?W{ 9KG6tI]+q}ll+o,Fa_꾄{wŤZakƁo/sc4+ h:˖Q0Zǁ<^L$Y$NDB7^ݎbsN2o*-?|#w-Оߥ&CfQH,yx2}2ixI; >kgB:v=_'x 5d$/G33! K?-E{M'_aRTã&vCm$[cHPvy֤Q0b d\mJU>„JZ ĥB|Ryv"]CMkԴV: !N=Ǧw1xij 17yL*xĝHPHls!-󓟹DVՐBℝY1;_[_daqclC/l}n.H˼MtPBX:}a0ʤCbJvX~)Fhfwqm?GaZ\Tis|x(oߝy F{v=iL #W4(ZyŷZO,rMI6&zR ‡=, ,Ė#KQkiսTnH]mqK._VHBc̅-qP{[ v@nL}deNW XLj`XB! mfhSIh>2E_ ?C] zie G9Haχ~ &$`p2K. %\j]Ϙ }-f*Ě7Rz(ِb$eV~1$qjEZ)[WiۻZwr^AD2:]7 ZQkvOI³e~kN/aj2j{AV+1~IGPu~3v?"6Ԑ>/κZ?_~{ڗY?^tMv '< =Av)g@>a!Zɒva@=Qï7.ywLL^ EcFLwFxp &H2cӵ`9ĜZuŦ>awKvi´ѵ4f^&z ^o7wiܷf#w_BaL"k]DIm`qԝI]ǹkgq"D>S/:afpЊ Y?|G_(L]Yr>m4* nI% UۣRUh] }49w}TG70 v Svwɼf( TRP؎W ۦy%g$O&̸U;nn2 !BHfz&4 8VEz(otcm/!rα(lݑgإ);cǣ;<#7#x{ʁM܌qx%AŸwwL( |fku)Ys~_crCyR!|Uk~9G^TPszjI BC^<,^Xr6DL I;)f*N#]ZI/8𮘆_SڝR;@>luՕw}HVg~ZĝwEB2`뜻kg[l5CUxsaZnk Dj!ڑ C<|7m,N.1ۘgc ^Q/{\E$s=$'WpQUVNtSl^|dFc\8CbkKm#u2_1593=Z hc^%6ȹ0W[( R,!9)n_3'ɠ"@n >vO\MX'UrTӇ^ꕼkRF^"(q| eEyҐhۋA#;s ǽ#O`lr:xywy-:G˺Io<]#>F>\=fzyG !gIHN#2x.m-s#H//C@ibZ+O"ktNؗ֯ߩblM=t)cj-jӔ6g4.7ZNshyبkYwS)ͳQR ^`ֆg ljU1Y\ XfY,n^wI v4 ڡާ0uq?&g,^i53kNLtTu>Bs8R6THdhm}n7eof`(fV50%WrzߎS$ GҪg2_dەhKOM$B4>`/4s4e&&O:׿W@R+&X1v?vyZ4.D.wX)d R򾺟Z g[߂C+>hNS0`sJg%&yؓ  $Z~.7¥o)bB}0A|uY3t0LoOh:y(/$)O \-0:jƾ^V9:]ձ lh6 &3+Z'rO!yJ?$=-sht|PG9x6f)#Il°;yCR1;z!OIXj!߫lG]僣ޜ{wߐ* UÀ%{̙ }mpIT H³2^GBCqQFbepMz~cj0-^>RҬ}4yz/Rg0WTJ3>؇u3njL&Jcj71Kٕ_'%g>߻K`O9޴}б5"zu`:Jsd5f` kJ|nX\(6 .t9y &6zU6GB@M2sʝ| CD=^ -D4-~8U.!>V"fCF V*L۸'4?W׫^F2Jv$nCc/Cݲ$%deI\q8ȑԄEFfQ)ށj9b;F֔ <,CγO;nFrרķyy,'V\9KJ:*:ӊsePEzgXz}tOU}Yy0,i_9B!yB#EN9C5T܌ u`هMu@hޖ\r6[`)QA `'q,<06ޣuu>U%k'xL3ߤais#<⓱ Pv$zF$ȨWVD؟R|\O8|TpXcO_>)9f`V'fRيp?XO%@Q͚|ƒ;ZUM/ endstream endobj 396 0 obj << /Length1 2671 /Length2 19870 /Length3 0 /Length 21379 /Filter /FlateDecode >> stream xڌP\ CwwB |^սEUk~NS(19%]Xyb ,ff6FffV u+W[?b M=b@cWLd`uX8yYx<3tp[@ 1G/g+ KWP}PXxxrL Ʈ@;PDSc[?LLv.4+WK*4*hl2F r5sWcg $2ڻ<̀Pp<@hz`ad_DV9:9{Y[̭l%IyFWOWz/Cc[ ̍"*cPblbeD_4.K؛9]]~'n 4݋;x̭aȤao$B-8x@'Ԓ#/%/1?GG99puv/B`aYLVAb4|g+O;fM^f^/ u0X9X<.fY%U6'7߄2Ke\ @ P|=ffSb_j?jc;+[ @ m_S-ߗ4rZWcu[F+I+O+)m.V5fݛ y_* RݱrpAa01;\&`%qD#.o `xL".fo`XLҿI7œTv&fƿ ~#P(7(S7F&ToG7E@ѵ#Ptw< K gcS c[W6qLlA? ;/ * , 2P>S tA5 A@_N 9~Aߙ&eG4;;v,-XdgnjퟥnGifڃ.=vɀ[ "s},H젬AF#e5~΀99Ll.W(lKn()4Y7")h߷$}~7Ft$t>>&~DXvdH0!<ﳓf d;x,E7rƝǐgpdn-S CF^PEI7RWB87gs7or_ebي}t7XyVB^J#*SVG*20rM+rYo% <<^ -~*N6$C{,r5LsYaG}dM{n4ƌz*@z(Ŏ( uND(~"6ʙr٢Lq oz?.5φ.Nțlߜ?@K~3iIo`i#|f8C,fk`3#u/\RlɳEo [˗R5*͔\ʞ,S=3ь@/I;E=$&*ژx1 'DQ ;jhaov6upnau: ѭn(PU <,_͊aھN8Oᵳ>#%kl^^q(6oXGJ*fz,aPO%,W饙iV8do6w6n k-R%Ty:i,x 2*p/`}9a礖]cc7e)ꨉS&vXxm+Ejk9RS26m 9.Rq~andCB]S3ɡZHDͅH+Rpp ZbL¥Ik]闊sFƕ{Aً,AvQϚQz#m̝RC8`i?:1XX9Ybe-v]:_ėL'q">E9dTE)a0IrQL'6U1IG~v/ʺQ};:g={g.׻~8[!or>P3W`Cx~d5+ɤF /Rnem>RrZVd4=KР {l->,kl "iZpY]cUϼA'3nUDʹy0AںtҀN;ef$DnSֵ>I1bT̨[̸n*aH D$ZBqqNzT4 ٗ{tk L4saq{gs9KE9^hwGB<7컅%!ĕ_;2+GmK}ƈ:Xw6d5BMSɃϛo WH Y]Cf >OfHI[3t-b+>P̪G5r1߂Fo)`~C&|w2xF舍͌5&=QKW^Ը0|W@huj:F&G*?wl3z 7#2]~C .3g:@dS@m'OL TH3:PJW[Q$*FE߄"(Aw/ jfx1w 臋mD;sJ S4;L$t.%rjuC÷a.C1j8I,ͦ#%{oS-ť99ߖ}p`E_'EG TH5@辪~Gn&~;v43h=Ժlĸ'a2, 띰91DҜjqQ4Y2ekb%Q %@t^`=>1H_I᭢H$5gPrDQ]+76bռLD臤QĽ$A 8kЁ~-}KcvV%loGH݇VˢğY1|E@*mfJK2EBaI^JngBꘇت-Z*m F5#&BRߍk dy:Oų>'N9 ;[dDգ) ň%}C =f̅oRys.]rpIpGjhZS-^Ї5n\MNGwvl$pyBZ q4p5Bkh?)Mߙ FML#[tBj<9?Gҡ7Px ibrJL4}p[nĦmԯP }n}t^k! X&.Yż#>w43H×5.Y _|=V ﵔuB-MJUA1up3yQ6jcÔoRs=j̾b#V1rŠc~b~5^a]+w NAPu1o/|u"PTZtPg<7mv0*ܤQL2D| x>Ilɱ!j~ǰ?͋B˲D؄$nUrEQסwҠM5|.5ɛ ,ED%'<7qMol2͝8qL, d).HZTf%Z; 3IO Rjr-TlҔQت5]/ 4ݫY6ORrgQ@]Le ,(A.5IZk-MnHo1߅0p=)|GwV= FQ!-+T>q.2;*3+).# 6 BbR亭4aުK n$M@r؅rwC.‹v6ebܫ<ꎺ!#yV\-)*\ E}ȭö́hT_-م9 y1Cy 9x7^d~(*Jux=UC9d s8^a:fvY9s{W2Z(W-v! GDgE7 %eQ*PMh; u}+'_H\5 ڧe s}x%נ-[.os6Z# [^/0)h?/e?c'Zf{C}m oQgn _Л{q!^D(/Vu S4ozJ5ܳY.հy*d@fKi3,&Vy"!CLK`(K@nL8r^zҤVGlx䛇L3  F1H| ù:w]K0sAxGɭmt1WfˍڶnĘ9RD& j(Zݺꊶ'w~ڛ=U|<4MԠ|'uSRږ+}uߡnZ j{u ɐx!36/CpXءow"ً6ML&z[ 2*o\f^>ܹX d%ǖ+Q[S(ׄ "4Ki٦}Hώn>/ZM,쏶t&'G x1SF"&]CQq|y=׏2EFG߆RC::=z9Ej9V3jׁzL8KàZ LeXcC/B0$'F_u[2CKCmqnCɈt?be*)CIbаU= Zd53DTٌv`&~u0ێ",Ib=-M=Z$6UV:?$9%ޝ2UT '#)%~s&'1󞑃ZnkV6\W2=ǤD}H_\,|˼*a RˀDNߗmORV츄e'?}mFJ)Ǘ6zcO'RtZ>4$ZvWu{M+l8v/`mP육P/le_F8RyQSת!˟:Q=y| @\9zXhq%]ke(@`ȈkR+CPͅE,W|N-,\B 0 WŒQ2R~Ni ~<,YT\ꈲ ˧F6#l98rmT}A&C+ZBy]?ϱPc">x^nYEk+lvwM9C(H-jSFOS`YIj[usVG[2d,g$O0s* =$}#)} [ȭL|e[Rw}גjXL5sM: aUO,iY;G*w5ge7%RܼOy-ع^q5FD9r3,DNۄ*{=2qŊ{ 9 (=%JOl*ಫXnvׂz$xxx(#5-H }ְ N[=o$}F*X?.|L[Z u<`p ?DVѥZy?F6K>`O}ߤutцa~M4A2CfN+p3!V]L9S?ҋ bx9i[Y.OS 7n$,=ƴUe>\b# ̎.e#PnmiL)H*́0p8֚diZVFDj7;JP"^!g.JOd[f8wZXu!g@g2A=1qAw*y/+MA2CW:Ϲk;)9 La5S\eD λ/jDO+ gn-j?}LEx!m~G7ь[\ ~-3j3xY[TfI`A$P82c|㇀G!r&]Jj1*=8`[ա^E+céݴ{s5j2lap+ Ly$V}`HEl\(0*h ;[X>~"7#Z%Gt?~;"xS"f+%S"X _lRx J5P:~g^V.ʲC's--ldgCmORѐڧ.gfB1Vpķ$p#l"wq ـuiЖ7@ÈEuK .8(\1C ~GdEjic*7/o{ 0ߩ*Cv]8uI#MngppC49m ZG_V[ 71P)n!BS 4+{*:'4I'mFRJZ#T'NAarv+e`I3aK'XeR\9&.ުZ,KHS2Zȍ-obFZN<3iµ!5tG8 y!`P?$ [KxpN8@n\}%2OU4l|;Io>'Oo<^a)weA ;l+d mR={E%lYիٷw(`.L)5Y[8'`b*<Ԙv/ZAEO~ڭzß9: [R?~ynJ`Sѳe+WCe@(*gd3ב|؜xv )JVLɠv'\!Dړv[V2+̧XEFLX4!*%ox9Q$[-oQA1߇5/pemrVvm›YE];m=Eet'$dߜp4txCl[]e N ΈVm/1^ԡܞ9)-(W r7LA"O(ad*w^EƦZ^fRNS3\v\ez| +-2rc"Gb)fufѫ11Bwo-g"0|Y3_[Oap:WL=nv=F\&)޹Mvi~g}P-]ƾ!){#%OJ*>aI\`,m!-ZLo,ֆR+.]͸Hꉤ#dv=́Gsz8$i|+C v?_ϛ4fmg P e1Ž\Lז,3Hv!fkx5t+mׇd^G!,fD`Dk>$͝NB|(r7Z92h ,GϦuH+?[g3hG܀iǻ3˘|#c%HL/kKFz(a ?)c](ж䑆F |ȶ(V=Che۟P?19h!xN'EY\XG)PM1fsz'_EI HAg]z kPN>k -uѳEvs [@I,×9, kidT :* pBYM 6X\!NbW%L EؔeǛEcM"6,d~`Ȃo9" ~8;kn:q@Idp^ ) ÿbAQz)܍جG1 [żGC?p aDokkYq T9LV <J^;O_*%52L~G+ګ0(㻳ʠ!`"%24fVfjE Υ$ox`imLMN!ti = 6"F~³n]dtN2쟲ze#k +l=6qUp1@"Xu$ _豢0;#7f]B]ޡ!(%˼;4R'It=E&:=޼O NP ')̤\SX ЛD!:mI+5"z!p&NL_ "_r&o?=pX{NƢy= VDQW'=Z3Xxfx VC?H;z^FKBhe~15smvo܀@0cK:%9c9Ny؊OU%l@-DZȉ8Gj^(ՠ3ԦiBO=2,=k-~:AOӴUtB<>=-Hbk}w J4ջB=4e@] COpפڢSUf%NqY]+x\d:(z7ABϬxJ6"5 A)?|Є YG/T_B䔧Id-}yRVqpcO6A9ؗ=I2hΑq+FF[C_>˒bU#y<mZ?u#WػDeG08*&<C^j?}F{a!xv.&3!JCPZ*_H]eAs^G>Cӕhg-PCm,vdxPa`QoXlvrF1~ژF؅XPɢl% !gsΜxc 4;EGa؟߇BHXHIu:X.}"g3cZzΞ툗1w]!G,FP}E-v7:/0JW`!թM |m^6R.Ps3't#9m4}b-vG?Q޷8sPBb|RE(Yi֬гN|ɏ7(uo#ou^V?Y+-:i*? S $06`[?BPr 'k4QN?5^|n8 ;&ֆ*؄7K3HjbʛoB۷f\ _l*xyj=lJ8fHu.C~WyLx ̉ GjR-7'Bg\hx2rSa*d\~BmXk%vrrV|/ n*^53wFbMߣkNu\~wQuu 3 /' >as0,BoIx52rh#磬!ݏT.?9؞8+蒃k3[3eRN3 Ѕ2R_e@ Cpk3ܤP^yW<\g-"{ũu.Vu*}EquYYTF_x=[]ǬFN#C !\LЮ~xkgeIUT?$ x[뗯9d0İ?ͯ UydwJɪ" ^0 c#Qd=g9W$'"ErNob+eqDr( ÔAn@s{W!.v"*|% *dZރ|w{JގBvt *MDu=H,3s7s򝥎jROj=0/\< [">)"@}D! c2U>L)ZiWaQSPO U#8GBP]F^1~;b9e0R:2e4K m2b)]ꞛPAgQTO%Yoz#]$XhM"gT,I.p{7bysݢ}8~.z8ޣb:sr2Q!)Dž t1AFvEppk8qU>{ OMv3!|YfX?)#0oţ=Ǎ¼JhFgP\+BE_N,W搎? "d 9xY)d ]:ޙvfq#Xߺ~SB^@ )Ly󴁂.P٥\[9I2;9,P$r5LF,B*e2jAye0p꩛ EVu(NB4jƒ8=9~(~D%3b?D7'ަeJ8V7WJFICI([O&#/AnWSvp$[BCjasrA/cۜ1q~Z 2Oߖ=Q3JbT"z\ֱi!Lԅ5d%,WlfyI樾u"n7XWΫnayV^‡^١4gB-t%Pԩ'^]U׾Uڢ州v bR ۥn$j*]_}W팔~E8u^'A0.s,*ɮ7Yg0S(ٝu> q7AO_+kOYA5 y[WW7Ϊ9!:?y ;{s OAgۦ&,Z(J "l#ibY)Ͽc*_0É_ y,q9KBu; ~'_CHٛ%>t 1`'cS56 |pKDvnf{y5N Q;%& ,ln⊒)Ez{; \]0MR^#șE=-1y ^@<=Xv+JeH5UPg++`X L],B"+G`%uWA5Xbm"|o2.Xlj[>].Rrqѥk(u5/Ԍ > 2Jk3-笼'g$4v_Q1RZF +mP][M 6T [km 597ZShM^a_TF+w}M ]bYW|Bu|H9/P$l9)YߟsZ6eV<1e1WRƥG&P`iU۵͊#5,ؚt=9ű :,o4(ɪ"XQ^TBlAۛDew>i6\ԈJ%,~Um=%:@|/==9.suVIAq7kv #Կ:cj |7Ux'łCqlZyzÍ`=|) TDŽv(&eM*$>`QC^_ jpxcc̫Ƙ`o_@ȚqOGߠ!n"=n1 Z "Wӡ_C{%gSR`74Q aɾeqCiøN ^ߟ b0K(⫥h3L ~:(5 ?DCڿxRizBYUiC@І.Ç 4bk~2=6RTƫDe;|M m琷=e82 v`w.5 b#D\xr@K4a$] Ru% :4LIg]H 0aMoz>1@mK|NbgByB'N9Ma1Y_z[` ^U7X!ڕ}Ɛכsr}ܾ `]Pc:^FHS}3pFyX`8 6}8,+➫v39HG-ujl՘4S""vrg: 5l1\Z3c9aDy$}-Qb0.Op-~$٨*0IusBQ39!5]BG0d!8DJu [hin/ 9}jzuqYbhɅT-bd;N)BOV 8u>j|7+86U3H٨uUV8@q̆Sq+Vʼڪ/*V$eυ"E^6E@{)q{рRe{s(I+&WmVa2 ϸ Ca^t^?a<|̢.щ%䋙~+Hjlg5XM}<[aG} 3N`\KV#Tsy* ղ%oZ?-3٦q+wwsխ8`x*Wxڲ@DMx=EFpI'26'K@}CRyZ7 !<@lQnjӻDcGI@FK):]Kb})>%Y0@}W"Ct >Rڵ,S pp$C=A~~^:2yW}J͸p;q__C. a3&(B3.β䳋W_ |T b pw {!`lfAn$ ҂^Yaq-wZ,0ӽe8(#/'hNN74:c?*~t#+ tuzK-ԳcS}s?=p[Ii!tӢށt#_cUnYg@]^7.*" =.8ps-RnG1ۃi,z4Mdw"'Pp;"> Se&Sjph?OVeղ191ZF? ?/S-=&蓀 0ֽ7ѕ9x^kLL3 3|\/R> >䊖s1JlxǍ&h jc= v"TKɘSqlyVDuYS>JP•nE*^rVe&AEam<:4:9)-,(WsD>ɶ,Fֺ( Yv9F dECb0E+a ΌtϜ-y5GjpU(Wvߴ<&g_`6H\{#74Q܊5pdn,SߜXb~y9xm3DSNhg5%Z :R!j ۑVB}|5~/87SDpUșPK~Y}r0vB6Z<(ezg٢Mļp)]y=cŋP]B}U9_dL{Wf2 wgId(FT>sUx+M *d;m|mB0an׌Ґ|tj@k|NJ&UsG/E (dft`+. ;~laGyBId8H5 O-Sh¤{a.Ų4g(Ua`l\KO EH[+2K{IuxUvV 񮋾ZjC$p0P_5GT#lu)`P`eyd?~RhC㳙R׎e/95s\3 贖["%XIOP;]{q֣zH01m7,6$9cYa-鶐:ծyQjRJ[LuwJ'*Om͗2[|UX~/yW}N,A]s8WJOlrd4Zd (~?Ҁ>3QAz Oö_Z˲{k;b1:v}9&/|-4 hG^ROT7JJZP8#LppY5p3Ąc~XJ'Ct뜡XX}/ҭ1委u3,dg&w`^ƁU-K>gq$mrTX`LN\9r5 x;7u*<>O veq@Q4A C$6j/s(wwixG(IӠd#] 6]??ә1D2&CwHen44BF s{5y#OאWV%#w@f}F/.92࿓5qEN,uCFRS*4mɸ-amo4z }MUK#O8K00;֑h 0V9v߰js3MX:)J+:ukUb7ǬG&"5Mr-ЁR txu d !ug {l}|`8?<$"EyUkҪ?˽(8vCO<ڌ&26)ڳ 4q+&'. m ON6G|rT-fѼ֊S Vua $JWPDQR[~|@O{q]u ؓ8GLvO<'%)S[rnSWW7(Dgef Q\YDŚcM6*8 2{|/*^$ػi>?.:a7^-F % 1$i]2U7j q|:G3nq Yǵmq*'I:)n3~%T tg;'@'{dXRnxe2Ralc [h tp #;t=s;`Ds`XUgѾa ?0LU]ɾ'٨톈0eE;鋑l2Gu 0\@ !ȟ (yP7&^έmaFG9txφۢ2(TGicȣNilNjj3ˈ|P0@t1i8ljŸ&5;hmw O^ 6 endstream endobj 398 0 obj << /Length1 1488 /Length2 7225 /Length3 0 /Length 8219 /Filter /FlateDecode >> stream xڍuT\tHHJʀ9H#ݩ 00--Ht7H7tѷ]{3:6+ H5 YY ((/! A%wPhDjP!(" p( 6M>F#<] v(.-֜(t,  =#!`JpU F@pO` J|("|Y~Pdv8|HC_eЗG``8 I| 5=p{mlQqu7C] F](8v=7tvB8l[0 rP.`_m5 ` vmѝwxL~}^eC= \~yeg:ܿ !<޼E@wWlTT"P@_4ǟ Zdo* ,`;_Uy\(/AA0ObWz"4蹀wC UEГ! }lAY!z.:$3 5kGSDw7FҿT[#l~͜$D7m {5@Shz[ ~|~~?&PB?`?oj~ 4 ~;/֮..24ſ&DXKpxBޝwmPjuI2'K9 ^"gycĞw(r0]y Otsi70uP7٪F^u+g@G:f5,gW1lSve5rۗEцQo2&hXpQ\Gcon }w6^9+1D>5a:"aLR;]nuᵦwӜuHR52j^%,%PW՟uVH헐m{FzgkK}Q<-nj۟-6Ix!uׯ#S Fʲ TR@#^_ՍF ϮhSUv<)?>:XNZTeGGrF+m,yCdI4z+<-HNnHح\w77jEc:Wƥ6nKlIY$6<(ݯ?Ё_!j痂8n>%!ft;*`Uo3g9~’s'N[LkzVtu< ]LzM怀̓z\̞մZaA#k[JPTgr-^R/뜊S`0cV{A崡M_.Չ_ն~zĩY] ٿWhf?Hqd; T1^ɘ׳i'8 _V:J%>DV(LȨ!jϊLc? 7nbxs<~]cѯo8&CLni.aBL`N v3ڰ ;CzWN wT<ȭ5O Fک j481";Ғ 29rZ %MOb b,8Nٴ~g 8&ߎbLPm=#}?DOxlk4Y:q~*QWD9Q0i7v?N?cL aCӋ#}j_#,shUݒ͊4vY gw?IR!>s`<wP߁H+rzBn7EGA`l:nqn^uONE1}3g$d߼&rj]z^8.jcX\& lDF/C7qǵ!SQLe\Ĺ *0%se=]slLv8PUBQ |MP1B-Qɵ Ln/Y67YeMFVo0 .fm;1o5'DFC1vt(➹B):*L]4B} `kVvKmF(! 3EJxNxxy~߶ V:xrNX! Y9Zę7&)ێؙ`W'A=ң烪~kSr]ѵ銽nF)){ǼَQ?z[Xr—-TjHp}&9,#FVJf^w=bO؄RVi?k7+8E+locJ%>xaz2hk2-P_1 չ&}@hqAuӔ`Lۭ8aWsv+3&^Q>QE]Ƴi]EW[Vϛ0| V.Ϝi]1Uo:f%dJTjMR`4LLG2(2bW]Vr٪y߻V͞XsXP-8z@d2ĸ1C؈]M1F r96i%R /A)%M"~pʕN8Ux~9&?bJb ?G]uHѲs 8l܇2>?+tYu%4$=: gKwϞ@2WKuy,q9>&v-ՙVr{{GqR"qM^ƭN$˘ 'o9}ڗ/.?S3euӭyyVGpƅv7).O1Y athjT.!+Szie_.H/|+`p04o峽XiKh7mEAQl>n!$4x-mǙ$9$}MLh6K;QG!#Cԯ?&ZA3ow#00X (982.R,R9p?:$=x I-XP%ψçB]:`Z~t 6Q0=rYyw|'+3[h57o^G3F<}Grs\`(&vC4v*Xű|ޝz/FYJiy Wɧu:[Cp_)IWa8~ zw9UFL/bKevcQCO+i[J?\uhBLZ${7,{ll\r1M[D$I?.eݫm l>:{OۼGxX2Eds]/>*!s965iN+?m̝YuZ<'s]xUm|JTV&otW.`CeGL {Lv :M-:"^15Y*ȅ\C28vڱݳQӺ Wy"}˟¨p9i,=抓ݠ*ZmhIXZUvw9G(Qo_uMBK#Y7Cd%UG>h+NMF5ȥxQDW|ـVrʒ܃[f8؛ͥ&URWM{Utce0/ |W;^q%+d~;{ʞͣGI|w4҄]O73>IKt/0hs) Z `zSAGPuE^ֻ,xF %1iT!ua|L5g._0M7hkqΣS{ 9lh}b\|_3C$Ϯmue>v@jY"L0Ρr _^~p;0>{T.vUNU;e^a~PyRXO;T=,@'YIރ=QDq0X̓(<:U9?$ċ*H`kSߨfm%E)i:"0m@/oIvR=/ jPvhBU vtN"f:u{-o{810Ts-D{ \M%{Y/suh:T M&o丌s޴ MiչvL^tJ Ѥm%0+ f`ʋ'Dqn=_SiíΰۦO H<{]w,+L |joPĞ2m/Awqyדn܇'o=Ҭ\0a" [z;ak9rsknUխa^ZURd -K2EYC^n]yrGӖ-I%jdd* QΥX+C|D,X5<ݦ(HUH׫1EB#7TJ9<&-S@_S CXІ0mibv]7w<+(Ffq5'%?po׈}Q[!F3`/Yia$t(ФNoh|~ϬOV }J/] .)8n{s{ϵ!!$RJ d)||=l$gIxWt1"3uf*ƦiU?[U57<y9+g)c N/Oz 568rg ,v{02L 6NZWNFLGۥkk$qQ<np}IR~Dg-(b"ĵWZQ/Ǔ4˻sy) P"E2`% uVsbj4i Ą"xo'>lxC2$O4VVdB:': ((;#nV{f@ȅ J`qN>QRs:?de]_q~ǧW6AOͥ㝵Ӳ/ endstream endobj 400 0 obj << /Length1 1840 /Length2 12431 /Length3 0 /Length 13584 /Filter /FlateDecode >> stream xڍPҀ`pmww n5 A;Cwrrޚ*f^{bf`iG7f ?@BIC`c`accGքف#GBe!$AnJyw;cy@,J,yG+2 5~@>>?b`9rۿf44!`7 A'hweqtgxBܬ`WGe=X׿n 0U`1;;X]r'_Ɗ0>p{3 qXBiE7/7&C?Y: -vw.'7WW=,$n' q7ߗk8XXц,'ͫ ;^֬$v!~ `b ~Buyn.`+@ `8 U _0`{? N?^1-W).e0s@ ; q{O*wulDst'ﵡoeyC6.6?K#ߊeCxgwPr|kkws3pr%JC7sF?wVutllGy涯O.r0wc_oFf{3v../uU-^N8ڢ?{!x%?S/XU!v?qX5|Z%טjXK ſ` _ V`/|-Zū / _ Vf_+WguV/|-___z<׼ k"?&ss_? {͑ljň=w&9/u=B$/9 cĺvc74e-i4bzξեo`awڢJt|g>@Ff".&C,ZNlvSBt}(;LАLC4'C^n"),vD`:31 u-7~:DPKMs+7Jw:[q<׸2=-FqWr:fElo?j)?>fIkPOވ<,\wpcFO\2_XZdNyRf=>"QAkG-S yɨF,qdv|J?KZZ"p>]o#?v9r>p3 |$>)DjX):!Ao]W.] CͥC%HD̡`&}=!_ˆSsæv1J><5?$`1#ZjPOǮ h8șыCz؜.6{ݼkN\:z=,76"YB۽pF5/J[E983h6˒3nZ#OT,Dm\"o| ^XL՟q (co,Z!4}_cw7y.od@;~+ wBRj{$h+Sn'\Jړ"Xsdl*3Vjr|eSrM˅-ZV\b3T1Y300YM4[5Ksf->+~$cEkxEI7 +DZI.G8~bd3 Ip!܅Q7֒JDBQsx'*zHQ"?`('>TyER2pHzܭˆ2MG7=i`ٯ @5HJMB*.~t!VHŹeנ$ނWwvWYqI-h`ҍ11is{2qgRg^cJ~l?z*-1O Ӑ@_y5lUE^–ԯlMJ.ʸ&]X5DYbҴH7#2I5:Uvdwe'Y`?Dyz"?'| 0&J/Q::&~ag/^Ҁ|Z>;*I qi:Uqۂ;l hy.y}DMErYܨÓc2Oo k$kRtqf JE0EDM$"c{J̜}5FۆuyBw\)oJd6~mhYYɖBTL ˖K Nbo)p;s9JVSު~*)#[\3ϻ1(|Q^mEpM0Zj3 ((A 6WhsK ֡ݿ{3{ 'GP[x7̈Ϳ>4lʠ`9v'NNxbe7%px9$%DҰL6|jc7VeBzeB.&uᷙBPۡ2WJ>G+EzC<ƒאpb5V=W{X%Ö(ʗob~,@9>nBno*hF3}l!I)Ws4蹖Zj?ĚK R4kE- nc3Ѿ'_hnE.cjR;Tic*dxX^_>*@숛qV5MX waحS$y%U{;}gB@V <cC~@1Me zw; #Zo:vl:lfqiJIe.:fV;;+ךp?ߕi!Q+= !+vwn> F "+*QW`உdXeVTtuT|([4gU,c|L}мaL+Bͫx؂Lo]:KI7xB-㤷ۡXLwz\dȸV\hΉxSDޔ2 . !t}7lE;AX0Lt Q{=0 oa1B92mC̢қ| V9DLl}ϵQN lJZ[:i7VH`sXmч(ڴ7,I"|@GwMM#D)Y@CN/g/ہ%y"tpcs+ژX+|M(%EOx"'[}y' _WGGH0@Kp;eБNqJ0  C_ͪXu!: q[Z4&<}ƅ!݁8` en5bZQۛ3wɝ{WB6GgK y;?j簑R:ty~>#h!iZ%5GF-T:7\xq"D- XYI lAb| |!n7Cj/&FD>E9E5O-Yx]3gC:O/u/ ru鋬]dn21^g*Lbw56lVfqtVau?:i\%FѭfiMfi"G(wP'+TA*BSc;o &h =vfIugY+TsYWx_qg{6v{# ?0Nm薃BL{$"ƈ܄2]@g:8KZkTIUb ]M<m(W5 ͓.p4)0軁i %_酑j05. pp3l 94QSҪڻ1Ťz`DzF 05sEhM3ORPsO&8s2 D4zO_E6rB|v۞ Ӽqlr}< )E3X9U(\ T=:̕#\}7&- Ccfq)gG$|ne}bT^ Zem|V-57,Q| :b2VcTC@ ^{> lj "QЇykzT97J q=+z%ji e`hi2h\Węt0*ޚ~s_Eo9!g~{0_+sCtQҘ^9 jHΨ "1f#)X!8O8ZCբBZԅfFh#~L90ATy7drK%/ aXom3_5kAu\Uo+񯛜۪]%@DG~{ :Lf4'Gf> Z_vjƾOɫ [dRQ_:['eZf'aL}AEv jzwo|$?[;px-~Oxhvg8DsyUZigysk\>iZWvVxa~t,B)4W5rkJѧq"~{(h%("'aS EiLIۍTcY:jhN{qLѻyZ.E'@YaM̪G1 I)RlLk]5}¸|`[Rhf/x  {Tԗ /Esj_葄͡;^d˹%.Cꃄ͡o a2 :_s%h74˯EvN&l>nqKuh17)MKgV쌏wUwc8ƀL.BSjE#Nyi~7{N%#CDCWO?Psf7G)W嘠]w[*xpTER]htPaō^'Jα>#46TBL!}B/Nx_N{jtOZ'bnmJ~g+qwRk y}'R, #4g264n*ᠽU:>^ =RoJeRg7_w@~D<ŁF  &9muE|gm =ZE^v7;} U8gh;“Uiv}sMf{HJ#j[F |꒼V].o@ y2^#x]yѡ ydܯsK _% NS+?)@iDS/X{[kG]SuR]P_|psCn L8 ,_0~}ԛ~iǣHZ@6{fFЖ)ok]T{4Ip=RgXޑc~GiJuNbk3&6 1'>Di$SԪn)zq,}f9qulF#-h'EJdY/F;+jb[$  ̟u uУڇBC +%/%#j] O*:+g edQCKLkQ8=jkr$Gu--&/e"V~Vf 8hOէ1"1`7X3``!nXBH1T_<}9qT_CS1 Xn+Z3g30P< 72AI{Tw19\6kE>Chu]lm*yۈ,Թ<9\) :\&քEQQ>GDLIUJG 5n!]#~ð R9שD 75)p2a^ թI7uY\w<ИGjYX_BٷbRJ l=Sݩ[ʽeVdɝp#rsi)`[XՄueb{{B:ʤ !W}f7- o3vQe K~MÐv?aL!(j @M|Hr xn9c'ίYG1 xdje?o見zqMAz)[TXv(hYIG/dh˩@ǣcxE(f?2U7}S!jg57qV;_fqj0qo u/Qk]VWW9S\N܄W>(z69qYA;R`@X4O"'<.+3X;> E5*0RiB.I{Q¶8mh}V"/2B?Z( xwaw4Ġ1L~Øu՛)Z-=UmZ q&6=@~@PdZGvfe)2^j ݽ4N]  5{b ]N+~/G;'pf-Atۚ|~@Ne]t{do!81DIPHҋ'3NT:[;:e9'8]b|D/*'sr!ĥ`&f^ZśO6[9Q12>X[DҪu\u8cΏᢶ90^d$Q\NHb ZJ]Xw7SvGUL@TSWmE^~d5D^i?=DM[8_q T`rTkTQb4B#ۅHLl!RAO7hݝ>dyRsDX^ݲ$=,!_s]6%]I15g9u_ L?_" ZFD&چ𐏸K4VYO|•|*]FGeRK|Ow2Y9[Jwmov& قTD-Fi `,%i68+u\ kPU\} Ö(=C M@.Yas$QikTlu>?0*[Fm>0Qh|ȡ*V9s_Z?N'"&gE ?m 9MA sG4>l a'9ؖo!"HZd#438\UI1ԩR\Nm#̊U +_o2A :,A}MT9lRAҴb5oyg7G׳F ]䒺E+="/HோENB-EBf,t<3m7DWtƉ`ADn /a yoKԤGkTO0PZ;:N׏2tY*Ι8t *Uj ~UU=_p?dA"F. od0c匜F[X;Wm~OLra=5g8W#*9zٞo10YC)b&*BYv~lmY>qC!,{ai׫Ǯup}lL> .* x2Mc uG+&V*hggV XOo֓>T ]bӮݳzвbno5s?}kqJzys. ֛2- p*0?TI؎!{媚H2I5b(Ž'Fd% 8yZYCLcJY l2OW+|+fsh@Ӷ'qRDmO=RwQxh?"W=KrgqS(`-`grث a1ABxf>SzWK:+@B n΀0~R7ئ|2d>Q`Qt+uY֔m,x"]T.Hђ,mu3F ?j@V&)YP iaM^kâ&vJ q& HrW-PJ¦DɞsN'ok$݊Ư0%H_72 ͹ä[jo’WA}y`cAMIzۇ!u?p'; ~:r|uO ;_͘g8yQ3FaB7ݚn 4sNWp GL2)LmՃQwp`o60RVh98=gwij?WNΩRq]"0O* 32mBEK'Cqcz-M&E,1‡vtY p&# ftL<*oy/uNlrp tt[e|NJkL{$N8EnE37c AfTjڹ-]0;D5~1M"lc!lgZbW%>[Kjn23P8n53^X=v_?HT5 mJoV"kȩ@y2J2-wςU{"?UZD v <^J9 AQVd+9vCHT[qv͜ :,sEf cfzTh G&2SGe+zUuxʀ \|J~,)~ Jw}e֔F;C{Ub>DsB ur^X?Ʒ?h:*(4 R 8qI}[eka{Ya3BfOl&/:K0:!BnK :N/j^O&XrOjĄ*FR)~jrU8ʆw_P/|kԚR0[` 5>UH{Nt!GV`q=ARʗ Kz|s~ '~;f{![^O(ImB(߫װ',ȇvpRGüoMے(&֝X6~H(P>['4-0x6sR5ą`hVn~k EJ⢑DOMC(0QO`MBh;&#Bɖ3^4Ks8σ &b@l&KZE'3wT3VidR7s$l[?b)'aEnd?~Qa -}(@ _=[~3 wekt0p z!1붸UT,v=zܟ VK;ؑ}:ͯ17.QE6SRV9{gK/6ċx%_/D .ۧtXiN3:Bxs%G+J (a:QI4f،I e" su%[^b? Ҥ}oҧ(%$6E͎nPw:;`%M%-yHݠ@Td khG+ܨ}S5, p`y6fR'Ғw\2 )U0M:eKwapC9j:{ƪy脽JCn)qΡg-Ɍfr$M0Q׾/P(]]#T*wp|eP1hg -@lVEǕ'g0R'\kg>ʙJg)`ᄍt[%JYzCY‚7tf>K%>aח` ͪ!郱nO7V{Ls(OsxkSg7R߃j-U'bJ&Ch<|ȅ!a9c>o}Gbn:|Zځ[m( s"si#/ޚN5 !wf`O4a܊v f&!~Ҧ{!Ǯ\&^*~?mѺIyޭ~DD endstream endobj 402 0 obj << /Length1 2703 /Length2 17827 /Length3 0 /Length 19369 /Filter /FlateDecode >> stream xڌeT]JI4$CtiF[;[Gg0p;sT^^(nc gf`(I++33XX)(@?D U5_6"@}X&X>;ZY<̜?Osq-A`K}+[w043347tG;uE-u/ŝAa [~k O-Z?yY]C)ܟq gy}Soąlx\( u:XX||zv]uEt8NW[!?d1>E\I2 3qք֝RhAJWe5nO.}'^/I."mg̅f*'if+/xp7 Sٮ],qXO[jN.pKN%Y`׸=dp?0dy/1@줬ձsZ&)}J.oB"\lY*'a5zp=Gqm76[nl/`׆Diun\+~x=T19 _]SWv'?SgJU_t+4\'!Ϩ,]›@סSzІ]v v`|.Ⱦ) fʝ^?WQuwK͂M">ܖqO*!WҾgB7'C!Wx{i/e?ԡSmc_Uz,4uB!XԐsajY'gt`GqQtpbaGXPA]=huw-@Mr#+J }▎Ψm.jiS$;YgU5tDJ]upF1<'K"wF)\.|X<蠉?ul4H, u1zhkq?X2`#p&1zt:D~u>ʯi6FBmt`EL5T􋮶AIn{Bx2A([gO( E[%E,׾i% il$Y!Ź%ois6& e@H&,jPIL&ۃG(wF|b%lq#>=F{ SyK̞OHuxjw +H|5&9hTWo5e?}TƼ{Cc8bpS"j ABZ)?8Z"6jBQ8ډ iO,x(0F fAhPoRg0T>RErbDhsCPM:BOPI4m3Ἳʇ5Z +sO-o_!߻bÌ/%=@wBx=qkVNS?!WN^pHZ^dGS&ۛ&h1r $aY=lS6Kk_ ݗU~TM⿺<jJBQLI>FY+јL'6yzMtiFFRzw Uu 0I)%~D1Ihx".b~p AIz-l6\N->X}Ǽ-{rNrc_df7H;"VN]M/aNA_#a&M(0|-HhH׬yU4aߧ~Opn2}'dN8WL}X/'7h(B1=C|}#Q0+9:۽4@>OFC WJ4y7'cjhgQFÆGRlj2~Y}eYrᝤY`P;i9fE:M ~T~|7eDhO$CS1ZC;o:u|FQMZmoH5&Kn9;hϹ.`;%Nsƶx0Cuة(OAJ kMMݴ.XW9,Awm{z*t=XZ(';+K!K՘p{;j6}_:hbzYBĘd Ro=˺}]p gEW'>KVy37taPKOR߮W™p 8`D8$V'뫼{)QȐ"~пV* ${hģR;u|yN*{woJ0so`KENSi 9k.QBZnA 'K)F1? %mM6ϦdRT>u}&-nBxU\]_\3muɄ/Gע/"&e)%M[0Ɖ됷-=|?ft*IҀWC1]$% /\IӓD?iW>|[ yI7ɠoq7救85(hf%'!]yc{ݱlcg9҆|3;HjCqJhyCBʒC |~녬Ƥ: kx@b: k(o+#*w MiJ= @h,]`O >bp.d؆ F $^,\T`QH.;::Lgee IҘ+"`nTm=Aę$m{xȗ1 Hl3+;oU,EH"mpp%+;VzҙIthFr;?߀"l$7}|Fv\cG^6#>jӣDw0_V8xQ3#{NܣRr#W1=63Z@+F8ik&$ gpkU6jɄΈPvI[_usYݺ?ܦaSrRE*GS`(FC:#DTwiǨ3u,}v|Y\@fe2!g+uY⧰3̗F|ZNێ ELy;#bF2"2g5!:V ɪ-B&bqh"8qĻO 2H6mw:ʘuH.f~[Q\X 4b * e=˪h+Z'P \{بz, 4YX#bǓ]Vj #Ve,6vglD Z[g^q-K^ >?kRiOSoPMrPQx(Ts6}~Bgu+Rr0wB4"&F,.TV=xuGk/. EMopB9măk!*Sl|sǟFPh>f6@c>"KK'ʜH;ES l[햾I# )i Cࢴ!Z(se{N'd__ ubogD c\,vv>!(J[\1P5 1lx&UP%J3tBcȏE" cв;<*}K OVq߇UNuN*Z¾G-XG|ulCε9lc-T4kĨXqdLMR!PPѳYOGU*ހ;yt|ccgÅ<\hs ץDkXߋAZ8 C DTq%U]OX(-Qbk4jTWJuR07UBSL[.b^apd?"ͣڒ^JySUCb2 5؉il#K< ٽ/Bh?p#jA 3*xt޺X^vX:T<~oŹMР+g.cOwk9ELGz'TO=' ĊMVNuРGl[p=x} pAojeO͉7_y_z ,I6h@cYTL8A $x+p]R( m6qY6MMW+d T_M?.㧏S_ӕN |t(?%RN/;#`X\pM''Ќ\~B&bϷٚxK7'Ⱥ|q&s$M(G3dxARf˿ ռSBQj aS'$:O>S}DeB(tۈϳ n7s'Wlos!6uNs>;> \D]KXFTá&XϡߊbľLw֨M3>57cʥjd=QDZ0'^}zW"4ZW#%]ljs eNa V۟Ӵ}Y?ZM(=IO[HŒo| ]^Q\EuįFarf>HS&94zL5@t"(,*Xm9NsTCP|4):5[.ȀN/,l~8ss[PUN՞זJ\Ze\}JSd&qg.#Zi/ FVqNoH2K 麨1KԖYvbov?YĝR<H؉j,'ݞ./yYj߂fX&N<M19!8T8y|B?PI$kǣV×~cO#~z)Aqt[Gǚg9 tS6dsU(GmkT"4n3No[4.:d٫}^}C7֧Ć)t7֤0O # Z+`.in]u4Y hؼ|9<9 Q%`l`@w3/Tw-XvB[ŽYW׻Bt#hKa*@k '4LȒ7EWk&1P4,۾u֐(KWԋ 0{[:CbkA'c_1犱vA@?Ӡ#&X@d&#ːc!+^ӿ L$" ;6q-_ZP3/dǛf⡷ ;G~^&SNL\`sϙ,[&s\WC8i'S4m7gعFg@B~|x툰%bRh-W6Bj< D:qere In{lRSYhU]38DB-<}wp#.(w).ގcćFRm$qW&_U#FH.V"(:51@/"Dcv ΏkV2?li-脑ˮĒR}DyÄ} Uio1fɲ?WUZt(%/GkнY~ '6kMiNA7+xhi%)Xce3܉xc Xζ읮H#b$#47eF+0o'ƌ9لXh Uy\&U1g |驩Z7Gm`Ξ+[ba .{B-:}' ;rE  RC:c_Gz '\4)lԷRm\]]Zy9Og6oE$ QMtA,~or%vN6?&q4КF| c_d΁QNDVzH~sߤ6`,q]'} _;|%kQlolJMhK"Hih5]uDԮrhsqRՐtA!&jZxCܬ52MB'TNp.LYj"jir8g%2 e +9S)P%EҪX~X#5$@0 qE$՗: ?gV\}w9'sgҺM/Fn: IQ$OOhk[ (&\QZrAT̴rXv*kR٩E%Q YK5ͨhاP E ҩ7{|8o;xqBZE |&W(4^Gֵ6o dl4:GV=Kq*$K,:* -*dŻmȱLCx; Zu #Mz0zuyڿY}hZF-ƳA5CKĪ'l|+y5?]Q6 5HJeK!"69ag˗]ХM\e٨xc ^plM F(i`M!0׺E:U*v@ lagZB :uMR:43? uaiYbXA-f8uiey)[Su=&z9z"ؖMlÞYj2L\RÕy*8HA)doC^ESR,(Ǐ RkQN_X˺ RAkDvkAk"K-侒`2} SE ,t]ЯH_Ȟt+M.Iv;c}5 IzHSTMUto=2d칀Vl)k 7=I_rSV$29,M `rX jwΡuEjZLp@Mֲ3#9q軾wR?I6/o_J\YTd{!s<]xt=Fÿϼ7)J5]21^R]4;"W8}[ t?,by}ɪUzhLCpT1-]T k)&-ΧB' o*9h6'畈XtZRC+OFl f7=X<Ă2#~'ohooɩQ/j͵ߣru#@ Cg+_=c$&_7B @#ߥy\ht"L8yJ1myVՋR~v"£5&ORҢ,bja2Dd>mȇ)^qJ=XRO؀{$Bqo@RlunwdDBӛݲ`_kfӅ/X( 3r3_kMUU@+"ۢ5%ez6}SF?䣽Iߌ};M\X̀4مpd%¹p\F'vIhWe4Cl2%VLݥ&0ȶԤ̲&D;_!dx .yndύ85JסKHi{ B$_n)m.<<:GڃSYTuNڑ0yzT430yo;Və¦͓(0plt?shF۷JTՄ1 2h5G.tr-eR-0l|~j+ND }2IXw֓ '9cwgfRHȧfDAu& a[+ı6srF*1Ҹ "wP+o0r޷5@Sn9Vz/)V^\_C:^X#X7qSǐߔt%d?^4Z^xe-H l 猊Sj.is7j_Bq+-oRP]d"9<ֿwحS+jF=[ayJk#Ui{b_E/c?j ̐9Z%2dAORv}.ɼa4 @ ,>q'ꗡھ["GCzΡysEM틸}><$&Jؒ5-V/CH +ė-ラH(>ve,j,?'}#Bo8_ Bȟ!*1˖"H AM|txRMP/Aq{q6At<rT=6)mz-["iON?&] 0!zm/M'3{+7]M:!'4>ײ)h7:aJ}ZZaoE4 M,dZӛ#v!U|ø:x#UPɕ/c`K#'j sl\};C$5:?AxLHgL9r!UV0Ohr4q@X!7iyX Jc^\J³-gVݪƢ}Zq,;H54yJxǏ4>رqn.{brBEf\bAZ k,26{^N|*,VL^*aT|}#ghS>G]i>zREX38z .Lxokʠ;᧰e;D+K+NW( Dݜ؟Q9,ӆbAȲ E,5[@P1 ?9QO'[`kyWOobݽ3,s%QgWEލFܥ;\v\iwl4s? g!GvaDe"Q^8\A-FJ&]KnGqՁԣ(*NyyM<}Ix/*=c^ K琑/{N?D2)oV1-C+x[o:LzȊ<͏ -料V]܅(:0M"e@s,py F>r%K۹SPge`2ԩw2?8 D40E`.gn#5(& x_@CHN2{p GJ^V7Eq~PrHY~ ~dDRb$>_^ 9is.Z௄_8i)V tfp{Cb8#<Ȩ s=NG4vQ P1bӌ' 2 ̶yЀ8]#:FHi1"IB1U~ g'o*7 xRNQ|"'XcD[CSy9IX fә-kV+>kjƿgh= 04Mٸ'4<M\,ӪFڤmC{zKa tmETcUnlds I1mFW V,CNW?|]>ǖF0i+xhWZ}p:1jQz{92p3=h 9E4f{dŌ(Pg MM3 PYCULa ò@q&+^}>gbS86M.Hg\O]@,E-v'ϓ'  Ojϭ!FPޓc Zɗ)ɼ.zJ14[!3iF &D<"c.9AV f=˶87\N{05aBl 8 tFTDLEьUhP.PxPW{JPCg0+?f\hggΠ_ƾzTx LXv%dKĦTq'g 0q%[Kn  ZEEA4:$B7 V,uLx Oc=k/KSuWjVSG=e`lGg+م;(;8.PsYF\9̞IA;JaRUyz۳rɑ"n*#ep$!J/$JJzI$v-[i:H ?ޢě3.T\Uc9tLNl Arh*{!~+muM&IXhbmT1|keӢLƶ%.7ƣ WeX ".XiBFn #ט}FZǞj IP!yMy⓿U(LpU) ^sZƦ">^Šgwl$Jό fp-'#޹xPhz̺`F/,j vs-M$.yg)Hui~7 \vvnYa\)kO֭9(Ml8'EyGES_}a "e )q3McPھ ΫeӰ [l o0Wȿ!1VC[#\K\h.` qm~3y^'Q#Ɇ*Ʌ5&/Wz/uD|rVIt|Fq%˕JZ[誠KQ{]ҺapRwVWu1puD4E(ndRP7>32!u[!YTid{x^4Xh ȯbt uƑ- 4b :=={).edžnfkKsrfM˦Y RAz |=Z.@u4ri+&?Fb\̕q\ ײ7 ̑"j0BU@D256-g$Sipl뼔';J2Lg AӮkb p$4ft3.'-Y |$Hc 8^q?6[2n4Os;wBiR0r%Y]Q-%Ωj]'8Cc}!H`군G0ϺfrWlűZq0³ W J񱡝fЀ|hixU坁L 1ݵ|$E^3^G#q!@:V'Hl:Ωq=\CX rBՉas| eԋ`^rқ©N`͑ިBogn` e I"Lܖ[媲Y:YTĘ;`F2j$t36j_T#QE=R t&~d$LCu!NKAZ$7(ψ@|oR3>SER6Zo Ky]јZ{\Y>S!GBNf:OSV``7g&tCHq,h8Mis.[[X52DT?쪲έ/Wb3$׻Z3 "܀d Q~oC#^d {ǚ¬mD(XM'y(c#]aIFa~Ò'7 ^WܳK>8Wd`"RU:MS&EgHJ6K*y )@gt(jp$~haȽ">tVzw8] 38 yf} z27ewi" endstream endobj 404 0 obj << /Length1 1392 /Length2 5960 /Length3 0 /Length 6904 /Filter /FlateDecode >> stream xڍwTk-H&]JH"B EHtT.7M"E@?߽kݻVgf̳gfYag3䗇 l*8_H(P64"@0; Nn E`B(" 4ƦBc8@ $@@R A "bWDz#ahL!IIqy( S r"0(_)dhW)AAOOO JP~Q\ `;' ` 00„!P$S`uki@H@t%`+ `P ! gA遲*~(0F `ο8 Ji2pq(_S!`L߽ }!vh@]anPu??6{( %P7 +S Ѐ젘"_ @#ݡ~P{?1f_g0/9~B?,1A=bA%:Z(TP@x|ń¢BIq ii[@?':y\T wflPƼ kwmenH/ 0HCY W HDnO#a(CڢI C(د'_/Ft`'SoT_H7a¢_!J!P #И$5S a/ѿ҂ݑH~SoC^P0,XpV!Oɿ6k&uкMRJӗ7U:2glˢ%-KZKcEa?zO _{Hfckxxzܫ&ԺBΜHOoںi̶5 A4Ov7R4tu#T!{EJ|wZgGaf[Xi(-sz_\i5(,ذO%HK3gێ7I\ߣ7#,K25(iTD55 H&_Q{/X⤸*E}? moS%ǽVD-)0&O1 C`ɴ#AM\Ouo`?S?Kefs&PnRQj\!+t1+D({.q/w+ޭ~^څ^.*TF}_fz/VF{99w^al%߲Wn Htӊ> }-V$l'}_`=ZR17.Cbއ;,ϣ[ LlNUtPVN QZ7τ@׫/&5,mӗ"^%InD[Wf_S9I_rob;ykU B&Ur %)*㔷Ompng$h01&I 1! V|^b,Q 74d|3yxG%6lT ^mJDh 6Yf [b 3PʘKj"9yZr`@6TI?AcX+OJ/ϛ+7 kRi;.㯞e7C%:Z5e,Gm|[2?H ;*ˑʙN_7/Q>ʃY^R2/JJ:rF`ܣ), z|'4X|qoLA!e!qO^q?p^C01'Yi2݊ŇIM6UOLu?Iw<^+ukETDOHA+_L{ Q#Nt*SylWvhO@T#ΟLX :mo;+c}޿gLI['PH~NG^u@CF`;օ/f{-?(J.Zz͝ f\(u1A\ N l@C`f߯]Ia&yV f"O' $b 6 }\b9jcO{dn?Slܴ ~ץ#"P7l*3qI;8,o(;.or3 ٴ`KfL.|QZ${;4Vd͙G19Xn*X\ zI>'eVr&g/9*ϗeԸ&]<ͫpyt8uT^}Xw A_3||%]id\^|)z5&muMKU"Gjd14ѻ}wNE;X,؇0fu=B`S/lSIQ%?s*⧡R+t:99}pL^PQzT)Fl:,0v"~eS KF8$dK%g .oa5=Fj׫.:fT?5;6 nf<n\|'.ɯCgu)~Un|;Aŭ;Y[tB9 V4?OTg?D9=lT,?ON8F@Af،Θ8^1//&tS=kHڷr,eMhLȿ۽Ϲ龚}ANU{dSȍV* E Adq]o+Vёz˖ECukWT=Bu0_$?.7VD|_ #g)5"&Ffʔ,%5[qhoq$ل3e`j>Fj`՛n-HhQc\)`7k.d^CnIJ!Bxfn8NL6% ."$Tf]%b|:FSCPT mY:䨩;bj-&)H7^>lLv82;{iIQ\Sgn4Cga!W"%[*sdŊ2EMe(/7.׍yX_,8 q9&-YL,I-ngpK/%)ViN\d*1XZ\4 ~1;IhlNyiE֪o汑 r9Ux^朘́gKT:qrt 9ǵ =Nqwa gIS&m@K' <: ~j~hb]V]w/!@Z17A IvtȃѥYEFsϤ-8MCtdR48<]-;%}1q$=ϦyF񱱙ڱs%%U3hF[4I' Fu;`jrG9 :T>͂Tؼ'lAZ]Vg?;3D]m6G}9#FNt}i[il#iͧSk݌ag6u]ؽK9:;cڝ'ȅXoU k<?)8Nk]{HC i J+8e¿#SĥlI 0=_ t}<Ǒ,>0"1" i;롑+{9Jw:sxoXIbUGvӒ-)fYj{gZ)8?[cGny=5]I˹*J&J xâBx}U9d]i#e#:2vsw׵AUyҶBSe.ﰄ>MWs~3.0En]C(_`CΘ} J"$ke(e(D)=6' &R6t:Œ)HvFDos?z;Ӆ-֗C7ky:Fo5[0U铯CI7Wzo^4~Rout*T}|_?V^A %o4‹ ޛq(Оki)CX|g,C ~;ر0Bh(^IPG\Y+xN*VA.lYrQSxz6:\ХKT). (j[gh{*y/iRz6Fg]6Iy7G/mmdTť?_F{ \Y{xL'?B)r~U8a|.gf Cђ/5mibT'=]]ю9:NK9z a&)̉|E'XGUEm HLַ[cȻv=:/d~-+H7QJb c[èy#IIYxAJcnop^-[]цNqBvgZz$̂i&8>mzj[c ^vx# 5;4Il_Qf^^j?܈Sy^ DwlX"2\Ř}1cN; 6=}vm-6 FM{F3R}o>-|/}=%"VɇQ@j?lsBS T vrņӻ6l0uA!yFu6&dZjp[ O rGoгl.L#Ɣ<)Ѝs !ОE~ҼX3b9H8|V>vt{4yŏgKnzF'ޑ*)em@϶+<Y6~gy)(dú$W=q06 ~w BЅ<7ZS37x,TO5 OaUk1$?D˹,PmApŖ:V|}*<;)\7XQk«W꺽r*t"Dq7y2fp{%&nȝXn~ *&v$VJZ?sul4!zaZ+CWa*hOO1D4ȸ ;[]M3uo{8I׺5x΄U]Moz ßSS]Y-NI,mvr16n`/ i,ˢu]s=2rB>HtN}b:u!hwt;-=^)}B-mȞ%[ KM$UGR[$[*L3 dg!ڍ)?yYĩ~0%+B CJl=20*t>=?(7%8Z\9y@7ʃ0jJNGY(=6Vv묭 |x,d!K<*?{0ϊRZ ?տn~X*כMEJl(0Z]NdMaѭ7~Lf˜c4gՇ ?;Z R:7?kߊ7$m{e+> stream xڍTSk.^Dz@zH&%PBUzo HG:Kiҥ 7z#Ϫpu:8"Qyp9@qqQy; @HG *# P_!8HW ~~ooo>A E:!w/d6G>+aC(C(O0PB5"'_ 0 B{( QC y /"@@PEu@E^B)uEzy@a4 :fe"GzڟF/:pWP/vFp'D]s ""@ ;J` m 4"\(@=@6{`$': F@ ϕ%pK̯hG?FWP+.""QQa@sꂠv__"P?gl8Π@3, ,F_mݑ' c@a~DfC RM  Vu$5#pT < z@} vP$^0(dž=3*o5YΫ #~Guj% f|p@i #C? mg Eem mAw# UqԆQ_\pOTDOR 4;wt}@| `yX2ܩ!N֛wk{u;&l0ZɶQ'GuMƮXbE|-ח ǽy!+jH4 c‘og;ähfQ={uh7@)S-2^>{r1i]w,OCuЄK8o ٣?:-${Ĕ?2LMbEz3uK$ ʏ٢a!fm'o[<}+t֛8e(ڡ]f 11ofef[p Y}e L z cp7y- a%UfrZ{ ʔ1~s/r&$ɴ+g`/;2c.edǚ31?q6H S[U\N|q9XАlPs-KL"B>xK"oKJ 4GM{E,O[c_}$o4( U+_yDO'ۖ&nJZmfW"[Ɋ*knX ԴU T>3#{=&ڌ9im?6`*i;_2۞LrG,%}t^s0nyZ0Y:0J4 ϖ.e:#3 Lq ?'i5y{5)|yׯz -rFzf5-N 2EDf]O"Q0cDcW{Al_cdZ^𡍲UZsK0gyt9߽okۖWҵBl^!/SQs_ Hb 905Uoט 2nVYx՛8iQcUUPn?[-,2Ԋ.{£cA^sjbqg1#j[٩%,=qGx/g@0 }Tڽ.BĝkO+4|yli"/rnMvbd'se%?8oPЈ\lS( 0h>4iοH"ȑ[q>maM^V͉PE!-H*|g]Q<`{ȤzכD{.r+Yh3 LKpY-UFidaD}̛8k맪(XʹS1.?VUm;Α;%v[=m-oi' QK=q]"jͯi4&_/ŃΚ'Kձj%5>sf}q^Xw'zwc+׈#pRLb'ޔ#,,bYۤʢԎB`cƮsr?Ϊ!I+EVRt ]XKbACjvʚBgq?I*.`HSn'kXH_௹\VD.*6zifV $,= So ,Jz]DZf^p,T Ps?>ڏCc˒ߌfyx@[$][bi EUF7Y^lLkBº'n - C|<&#tcC h3\9EqSG,?Ce=wm :ć7 \v+{8J||=玸VǖaJI{`V$V0SƻqȉCcMj<9s{}BDMYR1$uTX{ t}}10㑂.gA733]a!ZPȹmǠ"\ZUK5FW ]VMi/0g Z>(Sz.4յVkJבά\NPL6a/UK{`*{[f3Gk|E}<_< $MO!9^>šNk/T}ٸo<{N'ۏ#~RƐʅO*S+T%(L8*u0(9s4o_vmL(L !t! ~ٜwq=( $WWrk}'?$TGۣ`|X\^4SKY@3oZka/=)dlȗW]rk<#a\}2'!8i wxg<"Xt݋,?z|"lOusr[@^7X6A6U9Շn4p]}Nr^{&;\c]|1brKKOs]rl._Ș2qIM2+\={L5%{IJ+)+:BGj7 DH[-8HZ >ߚe,iB㱱ʹ臓ٯrh$^HN g^v3Lݽ[NH>ew96 weF/|uT;Wh +K}|e]̣B?%`i;]p"x7*[3%1#BW+>D%+`.$})%OCײX(׶iy~,,k)1kI;1M2N~=te>OiVNzv9a[ʴ9y>;"6?I| {My/Nعݸށ"hOqe+]9&j֋|plڰ%-cc`Xi;V⮞szzd~A;K4ͧЅ<=;9!0'P%M+V]?MnI݋,w.: M  iO48ƒ~~8ݕg5cYgGܒf-vp"!/K-!mMsFoC]O{uWOyT=ͬWjtܡ1]9c %Hh6I:80SMټEfrDkfjaVa}+jb,*2ԔNid]Oq|3(tWXU;B/. U5uh7YbZE+[ƓHcTV?bYbM>qy0ٺ} HTY^ө^yƲ슐Bb|֩7 jI 2/Ƥ,,uIp2SD>5uI&h+{F/RMcܤ7 vBJFrm*bt?"Bʻ[Kӯ<>\, A+MeE"I/V]MV5hlGh!сTÂ8EkUwu#R,Qqlu=O?Vn.gbkymr8Q!6VD'E\ A=&#ti]^$[tSMe!|= !_$~-HrX+xCbX/{AnA#! bpb\..ϰ: 0`fTfS)2/58-f@LfcۖK-K8"\?7mӕ;㩫lK! t&CN.%tDeBM;Utֲ5|/GB'eTְ,sZX "!~@Ks1d7MV?Ͷ>%jR*dQX㇎em"S#\xV xM&cLsvz<}) S+_roDZ.j}>xn6((i0PFr8y[ڗgY=ُ|e"^kE}˰uG w,r|'SX0!e9L;}9$i,_Mɵ۾roی־K_Mrq,`+ZcbIl?ƒzwkW幹o3sV%J&eMT/^V3]T>.c TzMG~.B%,O>KwV^{+9l>BYVC~W᫕ו=!)WKue4me_>mF5М8 ^ipHWןk=֦( ߾޸ó1!֢BsR<*1ZnF/Ie&3isu:!ߏv>p8ʌz$y4MWox*yoc׈,A|M\ 퍀iYiCO;.j;+O>j 69yVRYxБep."0$^ҵ壽oLVuɥ6)3_:nFQgw+XvS.B<#LYNQ^W$=bX!77X䋮Oa[!A SD9׉Wtc;o;bxQcғṁsr}B(]~אj4N:BQ\} Bi^O|smd tZO27ʭt땹`vc467^ѼL ٭1ɟ. 5s& ۬R5Mّ+4 !^1-%[dIM37q}7o@~BQ03LjHHm cEjV$1kkZ$;V^ \2vU c:VU,1G6)R-X@PCI,h{u0]{Xo-F:T[QX E8KJ?r9R ^}g5#^{6#*v^u.7!Ye X&԰PpN6>nYm`erwS^b7hk1QOi%7~D*ʾWw>a<٘y1#,Dil`dTҪע=ꦘF]H$qt[+㈎V WsB yXy~/xhtRHP +vu? YE l{KƉ#*1'ج\xMnz%t*t'dHḾs}85OB%|aiYb#Mi07iXLtzME 5%!xnԖqܬԋ ,Ea7 7OI(׻]SX$ pfQ|;VWUy8}cwt'Wp+}r)Ix 6 Y4+셦! SKdhD M_i4;t'姃9\+`2.5Er5|p"fuWQ)kVZn˶hS(VF=V62z|=:NX811Or6<G<~_ZgdͷPbj~3!ib)͏pgK v7J3`A{u1267ߺMlҨ/43yLUi ա Vv endstream endobj 408 0 obj << /Length1 2112 /Length2 15424 /Length3 0 /Length 16698 /Filter /FlateDecode >> stream xڍp%Z 6vm۶m۶9q&'35ys΋9U֮OӽY{ )3 -='@HFY@ODKOMJllm;4-?B&Ο6aO-@``d`㤧0sh 6p0$lMI=-̝?O%p-@sE#k6wv礣sss5qs4㥤Y8ML]MIؘ[-4)@_%;Sg7G3:@IB gob/ԀoW" ۿ l l=,l&9QiZgwgj_Dk'xW kOߥD ى/tf[c!;[g'p41w_2]Tl-\L$4A8X9&w#sP7S=S 럎E c #g-fwph|vGL'(ߒsx0hY L6zGVyWG'_">w?B\J k&?MBo"Qk" l,=gِKU3@˘[_ؚ}9 3-=N&F&vN;Q9zFVw2]Wdda8:x@# sVMnqgSee eb A:"6F >AYdtN̢}_i}2?|E6$? S4Y>+4pCgmO?aDƧS?6Oq6S?RUݟ>?ܟq& kDkf4?6S?3|p1!e;}j>s:~ w)d,?L&ژ#OdebnbhglYX+F? 7ty 'z(tT,3|XlNoʼnnjK=|$x ݭdkl~Ѣ8v?GApu,MRPe~ItF 2 )Y-X'07%At?; O)}peghW: m ﷣>Vl)i^Ky%QYLR9rkΆx@2DA "u |pU<0GRׁ"@fVnٛ 0zXbJM)D;_ Fa>b_#'*ho"jSp2{+ߕ;Hb;HU溻hp߻Ɏyî4,y:+ o `=eFZ&tRҜj]hN((̎''s"3=4'Fb PcmRQ X6 `9j{S(4)%yHobӕ=U7,IbkJD͓; @ RB0V1yi]'m.#:z_" U}$*AbK16DYaD\D21s[EA_,>2JuKpy~愊.}dΗg֥eaanv(*-֩iԊTq a[23ᒛJ|iȴMC. p& c3pT~m3rCoB+ !-OSzBAǥ_$OPXp@}7C4`?Vzb2p̡[з %ks <'RA?K5!3qF wWY҅٣tN̨0Vpgsڻ,{%*1Jw4以FKV>Zg8j%Dds먘,H``*Zia+ TxbEݗFrypF$?7WX>ݿr,_|€pD>M? N\eOUu qrHcWO2m~́tY)^AY.6Τ,0deE J9t]O&VCg'|)G6V qҏı aIv,3k%# czCXKXPstfe$ `ܮ6c vS2瓹L!x+zE:+h_K0j]͒ ^}z;׻7!|9-YM}i?x?kMBNS}d jo;lmj6^;ܤm7kYs5lf2. |Jx8}~rV6ژ 䲺Ú`6Qɰ#0d|lIM͓ &'VbSkn^'qnr96ů3$(Z(%X,srP/$#- "ҏt3jɻI7t_@K:fvn zzu d6*wk<%Vΰl`K@t_]9(/0CЮͣhTKKnRf(j%Ձ.íBȔLM&5\૜NL» Y,xN ɂ;J|dS^Q;rK,qO"{j'r_4ֽXjwg7roB+?0C6rIaѾ~P̽5*/OnT- }Z>rb!Ѵ {73HJ{)LѲnKEni#J0›(sڄNH XP%Cz_LJyFrhOjhw=!UŊ_pk:!bMv {?=.:aS0r/E#wE7B@7|ՠ c꼮G &\ߌaXUڐmG7 FONeN-M%`1hʽD#v_ۂt*X!=h66;ڳA\tz$;j.SW3쮋ц .ɄRo+ݔ;~Z24%?_<h~IeYzKM"4ypL`!ʗBB3#A9q|y{pvI@`O$P%@M$otkMvc|<#@8&Ѝ1j߃H=Y3[_xCL}tCAdw:=(;4]G11F[V:Mkl Ii+Y9}ULح'q J{1–oʥ(5Ta^?Rtg%=U&)ps36%>!ϻukS h,_#慨wPP Õӄ.$*Z"{n D@tZRmiCv D5*4:ka 밄h٨{D7F){ ibdPUjh8 r^o0`j bgsyCH|{12R ԺoJXi_S:&"!暷6O`,&ԹMMnQ|r$JWΗՂv7-`pTL2&yfSHB6p0 k\\{ .U4]X LB|Dc5N򃂮!(Wk[&qw驹&kOc~]ZqT5|S "9?F5eE~0I^\ݲDYƖ.M7 ƙ*-JDBr;SPqәf%ʴ옴e/AQ%Blsݷ'2A0?6 (zB7ZY틪z~^~)Y DkN\m͕a %Q#oB~5dґ0*P .P*֬Μm:=Z3c^ y%(P}d@vk2>%on{ HkWrg ,o<˘3k˸;Bq7Pג77I0)%%IQsܑ#f.u:dZb*WW!XUDס}ta]aVj)qo?^,a{*L9Ͼ-֊7'])dVu t;qԣ(6Z@4C hI[EXu>ɩD߃:{> k{o@*;`,|a}J6/1 Cи;yv;_ nr;{-FEdUqbaOktArf^#?0Uq0ۇځlbaׅw8'W]m浏*YyJ(ØZ쭍nv? =dfs;sQ,8$!up{fo쑱krNA6b)ȱz$=S1ܜuz†i5A#Uܴh|A^!pc͈C@,;M}$ɛnGO*ƪWh?eI ̽en)0J^Rur]u@1H^粗/ r .^c ül79b) 4YG >;f"V(VLTYq h:sl3qoqq+:ɬ=<"a/Wto91ۺ0f%|ٯ){T訡$#>ނr3~h"=?x>>k8 2goTmï ?41^֪Ҙh0; X9eJV6Ep@0-`G0 vH˅̆)GYRn}i% -Q8L^:ՆȆ6ڑ@CV]!ԙ7o,cuLaH T pkf\ |eK)3r.&:bSD4h&Ay6/%4tyL.<$tpY=t8F|_!X}yඹD{#eSEn35cY)EVC1Xpz\뽞+;j|vGF}sO݅ɽRb95&fxۧ6VQ[/B=_ -׳DZo VyG?4-4sOנOf(?k,jhmY["Ts^yyy+Bقz7ߞT;N+1hy͠9OYWHơYb\^@?7:Cova]#QV[+nbtN"|CZ"[ :! ߤQzl5/[0nEG4Ϯ:20\e* G8'Cqe}{Dܐ;M)V*js_8^_I[bh2տF̍Ǭw4vqvgV`A#ց_G\*9}2x^!* *}uHr N5m5 = }+qtG&"ghar}H_gh5U.|٨'F *v;VRf}ˇ7T5/",ބv*>~^VƴYoaQ/w $6&ytmOL G%)93I3&9WݬL3dJ-+%7AgZ*]|O[Tiqim3N2%SbH}xG28dnVFU8ohihK&OIInVX- iv,0]W{!numB hcnWFIJb-}1#{b)Eqíj=:4c `EkZM܈L HKiWLbsż~S[렲zbuqTC%-IWvPIe,HQZ#q8yVAoeWMcV6[mm*i^FY_lvu yYqk/H2{5ŏ*y"+6}v_[r "uwxxxWq_c+{4U 20{ guXd"VzJ_c^Yc'M]Uj\ Ȫ@s ]|;޼8f6РphH&۱u6y v۶L]=w>12]T*_9dT˵]w1/[~B%O+eϟ2 lY8RZ1uMD@>su!das[-vGYINv$Yvj~1]hBX:w*[Fe,}Ha}!&W7#N&:}6MOK<\Cu Mm6sp(ˡWXmFDpл q6#%o:& F,j #CԂF(A+Zbӗ&a}QehE- Tvgg T6iz@*)ߢCR@?()/m$ߑ 9,-,U vhlIB}ޞc/M s{l<jڪ: 7"gVo1n2^J~EKR6X,BdPD5{Y_ƁYHZU"XZfM;? e>$ ѵy ʌ%]/;vVC:U7`waTt 6GM>)M|,ix^"-JY ?,Ҡiړ>.IO^lMiŒ tpgv8SSdr̻{!xb;x\xZ<{:_[n@~2jqၦ]߼mI/b^І7_ᣜFBB{kV:J7V#`Q+KO+uw'=Ri%X ==ބ⢅ps ~<ܓڱⲞA iMM-Kē!RbWރupobduU7S8Yy/KTy WTUc|Tղ@_O j1gj$W8Z` >*3~:‘+j9 X0g2-ٯ}lL?46&^Gf9O$Ōhˆ=U[wWj/{7\rrϋl=|*~0gO0WWq": '#vGoqY[ |; s vTR`Ni^ N LU.gpREAH]z#TQÎ(+]Euq/@? mfmEu6fgKM@Aːe#,ؕ9F̔Z*%# (!kC%\Ih@>4>ze~%Khi޴ʷSJA nٗ@|`z6*E)zv!ɕj7_uDH\,) ߺi ~+V0/Y|ӅPX9wuHw$~%.8IQJf=<~:*|y*&q0Ƌ^SMS h%ai<'.xBm6K!!O gfÈA h˪ƋCp;+g9:zHɪu)Bzbve1m^v] ~cȏ ̨6KW>_1 S&ْ݄H֦Õo7m,tg9*= rݸFxlH=H{k"0Eh4gJ2짿|'HPꕜF:췘c_0FCBG@nn1U)nsFO1[B@MAZF}JKƎ}FIs(D leGJZ Z_v/cyʌk)0LѮMzzㆪ,?6Gj0A _ EaI?]$\K5\AP],ngX`i7L:Qv&pssmBf\1;7l"М@S]~sNr@αV`hkLv%A:Po U̶' 0Y%zZs ~׏zwlbgNh%!DYnA " vCb a=B偅=βxk4hndSVʏ[+g0h9a6=ᚗ9\ο/WhZR_u_8 )J?cqxMjj[\ML)0rH-H~@ OݩYp|VN.4;a DA,Sx .BwL!=oH{)i".ϫ0b+˃HuPF~r UǕTYk n*dWy@hޜlWf$Re˫ N"'lyŁCP0n1rZbܒhh8{/5&#N~ P&scrSJ o.Xi! ZJJ9!͞K=,ti~%`L{ jg\Y"^KiWK3϶eE 﫜AJ;#N?V6d~jd_OGА.u$v&2dJWڝ&k UK,+G-T"W"()aVWXSc|/Zb2d& J>\3=*KZkNбY?KTrYA!jlFz&ԞT&' MPa+Οl^#P;MvHќf婅TGR6T\,@R 0UٌTCͭedƋRAm;UM+x~U}W_>/dO:aW.B!sM[4a )IטCޒ t}om;L( s.|˯6pZ'_n695uwdWb̮ 춀1MIA+&?!-Wb!`K!ZQրX/^`mѝ=NYT>y3}KϬp8n}jB[əBp_(k+4㉇YU+`c1Zz͑.Ok+xy0<#rɅG7G5τ`?o9Wq!MG!gq:k0p 5ɴCZ7J{q5-4%6Q<+n[ +^FuxIeN8jNq1췷5^ }%H__ڐen#O8)ٓBoI#IaXk v4)͢ꅺњc*>*I~{L-A$pɧQn٠7TGcJ+aNx=qa*…X+>%!w9*oqW-#m:%{0 <`eeU6ϗl5:fN44A>c|'&wO$ fe!=A!.P2o."3ٳ*v>8jq.7vVǵM7D _\E`4粃"SbgzLq]hRf:QCZoL1ؤ)#G`/I!hD}RmL1DWK`QB9Љ,zHR5H\ H'ӓW15o|_*Fp'< UoC^&dwݯn1~w"?7À @[b4x +,3w$!.RL*.C:_{t1')'ܑTe S1Ilh_tl(U9Ht2GI*Ecf|t?V7B )updMԁWcQ\B^~lM w`!d/_$Nx+WZe!cL G*Tx;LqW VO%iՄ8 >2HLIzFJpؑ]8q Ytd4sp@JNC[֧J 5Ri֑S㠧y'PU{BQ po4%D̚y3dS1 o,ucO$|/rUcTLC͊+95*+lm=K\N"?%:&ϒ x$pB-`+rw!gh3Nu*N]i+3;R{;DJGCZbˠr endstream endobj 298 0 obj << /Type /ObjStm /N 100 /First 891 /Length 3985 /Filter /FlateDecode >> stream x[[s۶~ׯc3gJwL3]7Ivۤ<m%Mϯ?.(,=yȌ b]*+2}fL|BB̤V..3ů,I[dɞ.L&XtGGeʤRh-3m?i$MPatRˀ=ii#9 \^3hPFI,%VEШx+ 0kp,M!JBl)iJM 2C+%Xt!LyFЉEO ԆY)"qD5L݀؀0l1jL;p\(=1g', ˢ6F҈@6ԁܵ !%jW@ɂT2&0F3v&3dHvzH ZBJzeeɬN"MdM(3gTK5x4zH=T4MA .[QY@CёD!2@bt4z4iHZ4ÃTdByȾM ٺ6@mPD^#4,az|Gٹ<$oyanX` ,tnO'o2qUVK"4'`R0U<_yu{OJ>4sgi38gE֐uMCXMs'|9zY cvNhs F!n (81d fYU.Q R „'i:9w6\0s}?+oyjY.0eѬM.{Mi&㤕8]^,eOXiNA9XsY5P-'c3q !AxwmV+fu8y:G $#6pëU p1|(fJᬿ_b1 *1.D\*`IC9b0\͠3-PhT6U9[Gr!WI^K7)- b=$b8ynA5cK)މg8<|C=G=lK[`UpO٪O3l羺^-gU/o~r|풔Q&lr_guavow< -yXYےCr[\nV@k4ZvEu7 sבZyD+v#z,y9@;vr*'X'm|k}n:1P顣όh-܈ \f[CRD Hg8e&"([Ի޹cu3_^vkZm{\k8]Cd;m[ӿ[x6-#/Yb$*ChCAm" R/H"!;6,Z,zHs]A _%k-*{FhEzlCYK`kq"9l 7zB)I@GTw.:#+|ްk-l8`%$EMWN$tgu #u|% JPd>RHu2pE&f.5ŧB\[hCvf!BK/-\E5O<% C5{iK۴,;b5kMj.$ќѨ q4/ I~.vU\ָ9YS e޴ Zvik-ʘa[~Xɼa)Sպ.)/dE hn22y! se~T:|'t0\d:UwSZWO[m.KZM4o,?\7xn sIB_T|n~zTb:K w?=ӷH<,oUëk }-i O'W*+ztQz'ԋP:u9W_@ǝʼn8ggQ h:A;b *ťC%.˙j"w^XLd8TLވj6LżXϩX?Go5>I8ԿBS=~zY-\e PޫtMn-7;Dk|KZ%{CߋU͗*}>.6 򧣷?ߗwdL\|OϘfų;y>>ٮf XD9_C ;ˮ9!qQ0,av2GjNs2YSTXćp;`p!od gOQr o?s cn}Z ;q,BHR(^/WF`y1+9Ͼ3VB5I?,QY/(`ӊ4{3Z#Z$@KD:^?q}뷧v8v+ţ؀w;m1p&{{@.~bgw_EpCX˭?h\en[NzMW?_0vfi yVz!4趑Rj4 ym''G:ajAZ`:uP}#kg:JL >|2`8nUpF[{ă~.y!%Gv 6KMNnqvGةゅ!5+WP%l'y1]\ Xٝ1/GW=$ ݕ:ǪTN9$&~msYeN;|s_4E\?qG endstream endobj 410 0 obj << /Length1 2770 /Length2 19461 /Length3 0 /Length 21031 /Filter /FlateDecode >> stream xڌPY c`Npwwww{p5;wk@~Ofd ޽Z~B^QN(noBD SUeb02322ÑZ'#S:9[qa!4rD\@rviW ?C{'n)@ mot#wt4pO ![@h b41؛X]<をŁݝ֙ɜnbP:܀_)lFGPt[bon6&@;gW;SP(86ۀOqLL/Gv621u03Y ..#;_F6FnF6F B7 )@3ͯ~YTh +>QK' 4W jv@)l@"2s t=L,~z:R2rvwZA༝܀'W"8&& hni;H 4daϿ&_-fT'o:V3 _I,RvfSi3,  i(.# +ב߈]mlSm74ͮ.͐5r@SKWr1mͿt*ZX51kȻP}cbd?:ʙXgPRA_F1;{_0rr2c3 @F@og:e 0wRv6/߈ qD~#No`q0#o `@|2O7F >ħ/)FĮU#obW@|".P,F"4IYAFΠQt}djLLm-21;!mdd!fGo5?\,PLElMm@#o&$35 SeϘAS?􎮠 (>,T!^@fnwdb74ڬ"Zx:X,[A;06VT?2 @@ j;W[_! A|q o5LH};])_2K?TX?}08v w5@01\'&P)~ӱB@?2w=FJl7app1?Bqw οM6n@P>%ȩuw O^@#mj_+^ ,ڛ[Y+N?7GFE&&+pPh*ѳi[#LX{RǣϓA~ tP ,>ϳz5dx4Y+; kJ52O_բtJ]R^z C͝~%=f)f_ڨTev!&E%>JZ.-[aۚ$~έ#+h%1Aُb@]pn ]\@x@`$ .܉T-F ԭyט,zs/4gOUfiwÜǁJP7wp0Hhduh5\`T:8jkW/i2^M6IRlƨ-DV&#h9r GeJV vOʅ??F@kg}hmIEdbXծ*<*L,"ϋc=Zm`m.SE)4:v]#'`.S֠q2WeN1)|Gg?qE/mB{W{sc&>n8@\T'~,i} #D޷+~vъy*:ou\i Z{\mVu*:">Ze7h`aq6 CM e!ZyH,Xބ-϶ٍx ,q2~REBr "yb6$h,C5rx|~X jiފ-V}6',k~ ,A3\2}~U ]?%#g?̗ѱOQY7Y__W HL #H!!ʨb|f/N̰+D ]~"ϛUffM~G/٩k* l*،c8q]\StA,&O)t}Ŏ0Y {Yr[Y+vtk9֌Nf>o_~Ԣh);a 7ggżӹh~΄s8WJ/,+׳;fbl1l$2q!H»,v~{ŋʁ 0Sj|oyzN_x~.=M*7vq.4+Er\U;pYF_35FNmd* ͏/ym}J4$ 6dW}G[[{RwY.R$_Er#tF`Xp}D0R2 ExP)aB5?4yS )X:TqUNJC?ʬ!!X#erm ".Jض<-ܑw ;Avm}Lh iormK'V&K nv2 ХͿIE<0% J8p[ˡ|Dף2((>m }>UX ;ɏ@Ʉ똻Tґ}5ߕ/AXx)$#}bwM &#fd1)IE=,Ѧ6Le䧣v)H$¹S#OK>k9<pvC_M÷j<4 poc|EiKGt!! kK6Pxe'B|c[TgVt!on\ `#a-=M6 PɝzI@Į @dR9Q1}sE-Đvv{Md=ʨz3RժV9o)zw.*f R o1?T{yЮz'L9eW6lVH&?:`f{4wd<IM~XkN# M+Q#v(G4Yi!\ U%19K`ڵL{? }6YFAGC2Ȝ2Wz,]1C׍Wp<6ا>'Pyi<*z7] Vݩ[40@܅2Hi){aʥԯ39zzMIe0GЈ3K&z_t:5vE_ƳiL_靚 -H:o>ޮc 0\GNXo}HzΏ\Kj4,pm. ])WK FF'~0kN(BYqFڒNC|?0q0eJ!EKW5xN[H5ٓ,I*ľںH7Lwqƒڞ!rwx黀`woY k#AABbMVLCadΛw̿\jи$13S -*ykT_QH4^oJMth#kf5Vj0XϸRdmpAfB VcG`Ѫ* n,4c&9_ux`Ʃ`\r&IkO?S=w{2kifM s ch}ymD⟭If-[(m {G,OY;4!@[\\] cdtW$ݷ`p\.(8 !\&Γ{p&>ͽoHEFtf -#A_뷻xpY|ĿjЀYVKZsLNUbӍ 5ȃ6,VI8GcǟgZ[4D&iđ/s; v %k2* j#[C1coH@n:n#2!7U'Dcwc|)a;8y8m넜Iq֘I)_es u؀ү#@Nc6-ɴL2j|ϱxȫnjAn}kV-Ӝ\ 8U)Ռ2*,0v<"[`zFN E"#0|T:eXzh(m \MhQ2xuƉgzzz[Vr0Ӹ;XN'^&SnV-ؾ}%w!'^ˑ@岂 \a^jQ]wfMrQ|$2Z`K*K[aM)<;\8 [\q0d\EهFFyR!"Ӣ['i5xMe.JT!6 4 9 O,Shm$BH=-DO;d Y,zKnG 7~ͭmf$B&bnt6<^' opN6ӝGsS[g!&8g7w]xW5HN4`Y|兞g.bF;z_gg'X(M~J8-ym9kރ7939.n9VZӤ IFA^VZ' ;ޑ4\L/ T|Q p$ɻt.Cj>NSY ,?(lTh w-1 Ms⨷rTZ9D vso"f srVI>Wdo0Z-VN'KoxdTI~:oAj9Ҭ Qcղxߎ\fKPlǢy/[1#Gp4`&ug65bXhNwmY|- xyy dR=&]b^E~u<&Nޕmڇ"_葿"]Ei,qWnByOC5ݹ֤B#Y[ 3-́Y9P4.zRH4xӝ;7cdn"l)Uƶk.N]ONSG]nU_Un+ tNP`"WB:cv._1q:yޑ:T" ,9XVA%>.xq%8e)]&l`0-Kd5@P)Ƣ 9L%o%T<%S\鹰X;[0 ҳ0kKc|g\x {DK1Q48E #h"tA : r%L5´]< G&AY*4`䱙Xo~Cxox)Z,] "zK2KD shp' ף q7I*#gBAFNSzG7K 98P5U;()PZhQ[Yno>FLjLU##2~`0YECSt?|(EIS ,JU3&xx=9IzQ>j<JFr|jgVN =U~ցY[-|:ka+Y6D /qF2cyz]Fy$wğ^OK rnoZcݜﴞ/2 BYh[ v!*1w[Zd:;e61)_ѦH+Csv׷2)'oIޙXҟD|()(x! UF] ux|H*('JL4Cn \ieEE?Je6NZnͧ6B!ŁDJBӒXQB'Zh7-l<0kM<.#01\w76ᨁD%:C9 9afڇ:`+k'nLceE^s/g2I̍{jK)}jɂ AB;6t]7T& #X{/6Z->>qC"UeHXR9(WeWУ^γNG7rRWZ+sy g6oz[41b.!KBsɲ(Z?AS@TgznmшҵJD44ÚƖGW#p.ǁ*{m;%̱F/ၳ$%@q5%z9Yd92prA '~p.T,0RE. ߉*2%Juқىʙ)2Sc#7ا߅+޻&3m~+A:w'օBg|/X,Ң;4`,Ol\崕5%V{aDehz i-)KHGA<ĔTxQQO<*Ĩj ?G2TsiK[vw=4 [@Z$ s5DVJ6!bMYEOj Z"̇]MgJ #nDp9Fyua;OKZ$;ӊuz?Tpb%ҟH1qPm'F(kmsjӒVdb7(!`,G ZھVaѳVg-|k 7O vPAze9Sy'8Ak=S5G-/Jaz);w#~UwenO@M*1KiRzPnۣSӐyP%A!2&ƒY7^E2ȭijWH=²e8xJQ6lxp'}OCex^_ƥt'n鬌mTЅ$6{0ip M>#י\U86jxBY"jͯ?Т:7-\A*i!QH-6e(E:|.2̡U֦%͸̱GU>,hv,2y9m)P{^Ɣ W$eۈ(%RttP+v_##INU&xo0>Fy79``0P?T FZ'pvzC)09Avt7{෋y_хٺۍ hޛ9yӓ\>Cy5Ab4*=͐N6q jcV}j֜0D^>Q nZ5Qu!NX|$m9wBUUxW hxQ0J m)sM:f Zo#^(g }lYg.XGOV(M 6eMłEXmٖ&OQV $+B+zVd{==VHrqA:i\C+ K5Y#HWcU˿[+]l4 x|7\36~{.qn~lC_[=1 :nXXyõoĬH~ K-d &,+{H~Ƹ- R6YIPPUX 0b_'ԅno. 6vk{Xɲ`ؙӷC9_ifx Ҥ)yNn'fTIN[#{cD*S6ދR[A7,G!^μdgn A FnCu8.kAEqO 쫴yB{ژ#!:#x)8pQ¬OH/Eg\c!%cVQk*`&I~-0j)E7%|g^X#`?%L>[&b1*I@sы z6ں&T?,{>R_]1_!Ls&)f =l>whH dXD2"O5= wR;ӝ|~@֛,E^c3??G=0@ iX 1P }DM}Ӂviߒ|M.v,̐1-G?:&H C#'NƉ~u$NG9j-M}#좦 _ΧGU-7KE^f#u+S̶.df1g͜\ |:Af\$)tDa8ʒl<[:}vpM+?ak{t°S)jMBmM !dπ? мffgdꙍVR| _M~EÈIpNU$ @j(4)%/}{ o乶K󾂒rY2+.Uofc=7iѵRlEWLk~XL :鴍e"M !+BxޭK+J2\ފPPn9.{Y{Ɓk`( 8L9 _Z9ǯWm|tC3*,B`,Tf+)Л_`uNJNi$p ^ٶ|C#҈HVa^x0;~T9 Bl3t\N"g:lM=dzu eqHD%i5(y)=a%)urJ=]\jL*wk]LÌWYr.1$ͪp8 ;An˝ݬĎ{yKϯ~5.`?5]-|qNa&kUMG<%\fi?w IŢgtH.̤6L#Dspl锎S{bJl ȅlqw)m8c?Q^*ܘy*es0z=w7nu2ҵ>d+1ٝ ':j1}Qv?\x+k,Qlʝ$=2$nr%Oe\T#$1i jқۛm!}61)$]Uh>њS}rKEzӡШK1e-ljv\9ooț;5!p`61Ն~P~qE'}O:`U@fX"3:΀p{p(GY/I3+NVyQF:Ceӄb0}kc_~rO5 XY `;"5kok%Gph`[g1Gf%3-H󍸓F,;da p{\컔ohBIn$[΢x/'>}ACZ3?K "p{g cɛՐJ\ͰQyz,|\bBc@Ms5mBU0fٚ~+͊P:f/(~Q,푭1dB8 *R1þi65i':Mzztx@և@OF|.Uu ܓ*2ϏU'~9>\{}{lpuX|$]a\f>is3E|W^zV }MN>ʂV@)ٸgCC /e G?$Z#Q>ZDzﯽ/._ͯA.~VHb%uqfj3O !'ݨE vSFB7#}y:)%x._Aʶ aEswXɉBO { S< ݠlrOa_NZPgϻ8Ɨ`b핋 @KwQ#c\"+DoJUHцZ>~jL[k+s\"tfc9kMkz' :,~A!!c 1P+,/G[Zأ!7µϩ,>f.qRrHDL#?*wT&$gU4 ~ xo|J7*'8L9'UX|Œ8DC5*wfFe[DF lK}a-nbI?( D}rA,'͓\=٠g+ѾMsclLp9Ua֠̂j04fOAs_z8'ha}&zy@R؊s)*O&bV'=,.oC5@ЇjR=ՙZ'w̴Tf훪"㱍W^2T!)AS]Ԗu8%=Q'i @,S汢ߒ:Mi4pj'UY t*ܹiyQ"sge돃41%7MF]2x7ߍ"YϡfqdXtܯ 5'm_#_^8y=qS,"*ǻS ;&/v' WVP:D_ ̃]`Cb\AأUT1q*$Bi-Ų\5QRvk,-Bcs{9&OJ,C f- r1r#oC2n58E|f+H+ɣ o㛦QU}]ճ(߲$E2VJ~SIz$ D36r4;#2NPG!̓㧘0hEg3}T0sw2/~cKwY[ &cl芯TȘp4{0[j׳LJ1?ZNa \ BpHwJ]9I9ĝ13Q571'8)K*Ѹ]"UtGgұL;Di,9V,Ww+=ߏ7I3eCz^ufҭQYŠ3?\y}T^3.G\w>N1Ii86Xi\b)JF`r׼n=,+(?+ F 5@sSu[GU%azp'@0ų?CP}\I.aFsqǟ|}z@:FDe*N>fX<AbL6!,ёs!B̏=.\ybExQn30[}Eiʹx@s͵DsXؙP/+qԉ+Bн<͸n)H⤉cHh>!\OڼgN^ JOP:TL^A(؆0m2K 'zO+yVTq ͧ䆗omǣ Π]wM# ,X] p^8M_g[Up[) x{mRMuH6r/nN |o?Ӟ>\O"Yu$^BpMPvgL>q<jYNWȔv~ѧᅕȊ~nEײ,QTO^:0.t'j9\䱉AQ;E.g$x_D+̈́'tO r ^ K(5\XcWdפyi2M ~@Ӄy<13}u\V*J%kZ vV @b]%v [ʢ5Cc8 >+ܯ֢{'׭}4+ˉw>+sӗ 8xA~Q;`&5q 籕OdsU^`WeWM>j\Q˓;ìyRPbkNŧ }ZlsSJ/%n ͳG!p?,axk{pNh) Nvl%%3Q.c۔RzA^XLdOGNE?#gFO}*Jv7a6)bH wI.]o09z\ȣg0vwk-(T^SWQI=/{cSdރ$e[Ca]pKֹjO8r~pD\lDyލH&ѫܯbEv> ϊ)2(2gt{{m!z.0By.f Ptv(;mHR8MLPTWb妬$1xT1FdI*OX:E~Jm63^.cVY͝~7_-#" %"~ .% $mX(.FDs;e*seB9kgq9YcrT^{BBCDRmB q=d[ocL?yfgND`hF2kKA!OC=$J-HD /O{ h;K"|Ø=l׆:oVl &3[\f{]j.(7rt, zn ؝~n(Ч^4Av*Uq)Gr93[~/C\,oa:=&}18cc58q-iMgjF^Ե讃 T愉Yvl:rB/fAC^u;"گ[zEty r%TEp)h^Qk|% !K69jTj %8,n`@[$ۏUN'Fp ĪTEY :zj{ +EэMo s%)~Z!-~ל$ RI86|ē5$tP8q? k``иB/a,gʀoF;2L4BɸEf`2I'UO!(WȨ/#dfعM[a$#~Dz SxwfKUE¯ ^ȃV(*%=y`12%sY~恗o^u 'H !+'j4]b+ߒ*q m@@oݯwZ6h| k甏ĉa.mBVwH?hҩu>fI^aJK&ikXeHak.'6K?_o5@,97<c^ ؚ8*'W^aL?|:!e4s,KA8PNER?'iM0  ȃedjE-W .>ې1%)$c$Ě;]c`SCcYh+)\(gى 5L`6@;\{5jbDZ=T(>WTJ3p>yxĭ[r0G;ճ5qn}u`u7RQpoyGz6.۾ZTb-+$: sw*ՇcbQar8ԭdJ*'Y"Y6utZD롗q(3H{jb@BʕruΞ^r;y}-/E$Qۂ۫ qp5 ,FB9q441d =}FvYD>y![fA:'"Wx'8yX{=ErC7.XRR[ Ƚ@pi68>T𧜿9#B5^ $-:6{ˈ;ԣV0zWگ!s -~ OXpf~ŰlrLM㠥`. lk؛ fm]"a֠<ȹ]{In&.dķw,}ztʱŤ(榖vGnDvp5y4Z*K€Ӛ}3H΋;Qm9ES+cRlV=[^h0b0wjX7-LV/}_Y55PdEiXm4n!vW8'hT9iNXd-lk<CCzдN`MFTPɼL}v/JFVtc ̜@* $hMܹ1 c6n<,S *BHtr- =ie^<ƷT&e/ہT˴[e$ KLlsXJW "R#Lo/,[URqF&2:V*|IۍON endstream endobj 413 0 obj << /Length1 2198 /Length2 8185 /Length3 0 /Length 9474 /Filter /FlateDecode >> stream xڍT6NH2€QnVP:nw sg 4%`98̅% Vrx8qt .P?r\=3B rAd@.HCU8 < 0P@ %!I rXT9JpAuA#ْ`;A,A0*l<h-!``uqqtss;sl .-3lEMc qK vq9Hb 9#]0+y:@[Qe+di w< 05 ˩p@0_ 3rA A9IMo~ΖNggG_aeYI0g_@Ⱥ{p\; ѰB8p 6H`wK[_x8+H>^p5b Fz9\'O.X,6mtlF 0B)r¬0ǭsj(KM_syB|F?K5@s㺍?4\ 濗io߄^.+u7#9[G@=@N3p~T: *" [Hlq=1 5ΐ_ ?:Y!gd~ȍ0Kկ@\x;jv=N@XÝp)KpJ"-p"!HxQTn2-BFQ r8n2-p"Ht rDZ" 9,ȋ+ $32%l?^_{_ȃoBANX & 9"2d ?|űM#"W[[0 Dd "G2@$?B!/6NaH[52Y[5-?/zȋ~[P^$Q(ZH ⏌H"޺":CAζ Or"-oD8!!SpKUATny ÏWekH^E|l_X$.3 {!L6U݌am=L"v嬂^Snk32YِkK9|Hߐe/;{gT́6E!(ȃ"R&U)96ުH|(1@#qͷ= BI|4{'?0`aS*99ȟFl/aVB.ߩ~jUam)ʨֶ@o*ReNܵر͢첡/lN :Kd+z0=;'њ V`F.^~qP_8<9|i)jy}0z6,7w6IvAE(q; 6Ubdݓdu7H3r{x nRɚGsOGcoHS3xf&|;տ|V:Ps6K8Slb]z8)+6ZC^f,WS Q8t4z^@e^Q>a{d{q,bMĤB"im7izicIzeKQpuj#\yFLi EcwG,ᬷ<.s:T2GP20F;W\ʯuqQrGvY83g~0~{p!geAŖ;S.؝trG unz.JW+z"T=ۡk9߄dW^e|kF5グ _~eNT\$-{?Ş[# }ԖfڎhlyW1[$V1 x|DW<_> }%9Y["!4ׇǯ;"PeT#Ey`WMj٥8s99/\k~"UH\޷biFӟ^`l%V|\?aK`_ۻ&CLķT(D'~'XK?c *12U eE|ys:f/^.TnZgW,6T`FD8m"#~Atjծl\]uwG^Ҫ>x!(׏ȫ8zS&zV#\\Q$B mHE%+UExJv]8?xhL3;Ձ)ty3D{'q..z !܄Ga %kny >فSL(n&mQ4&+{qSu%AvBwM {ܲ&SO3> _j}6 ADi$$hY\>3Fg= Όdf֬U?GK.u-3奞m!A^9h&GfϾ1ds\utbtz.`ffEy !rN ͖՘oP }ڂf@??/ LW;!]xQ,R-=z_Wo@h[vd[]6K{䵯~{4ͮw =4 P,5IUi)oLOxV{5 ҹj#΅8vlG;[gbV< ⸼4"h*sREmȹqgC [rDM4x@#!}Fo-3ep<\> Ѯ0dbZYfh@xB,y>.` ׇNktl;5 wJC2m >fQ/&lvH٧RY Iz%b|LºZlJ-!qrFnn٩Y"߆QpXՑNr&|Fl9ױi#JP`='s%7m&ol,,CzX֬PJYpІJh_bmPJӫ@ Ɠ(LG$B2_n>eHkPii7Bɸ!dCwC2T-Nk(УܰuYSQw7mC{w 6Ў[{JLHT,⨠IN6i|jh{_!4_):D31DX$=35[SDޣkJM6IMбƓ>2}/'8}fUI-_a|:ڕJi!w^ʻOذD78jJ׫_ -)sƒaD/yc533s_W?w{Csk ՅiN>TQ @ +ܽ$Ϋ]{J ZYg\l;"X>t3E/3K`Sf;^͎,x@spz$,s~=z c)6-Ė˘gFUo.цE1o`mut_(|] XUDic^mIV+;Ds& *  ] $=ԆIzV?"39&\Xi5&;t4.X? A_[Bo=5EE#۔sQc@wl~MY8:!iOtZK5>As.簵<"Qav$L=MJq{84"y0S.2hurY%<%DG-[e_Y+:,֪K@foĘs<>ZDzeD5o%%t~/_Z%W0oOb]vM$_WV5 @yWw3zgvHLKkW.W \0%Jm18op(ezq"'%߇WBȕN WxNrrЬ_̋Xh7z~|/3Q+g92)p;vuV!ΛBiF VWJ?_Q&G7\S35^cd5|TߑY`ŗ3p"W!1MGp _iA9;6FIF3. 꾐?fR x|mg*~Onˍ5 K/q4G 3CK9}.VJ)7e "G5;'3[=1?7;Д{p=6U8񅸧x1 's9fY -{؞ ;P$cdbG)boܙ-0+7( W}^kv!̌g^L4a=5 1ɠN n?NGDܳ1FQS캒FLT.J]+Ֆ>~h1j*b!lM{qL%lt* EO6MZMW"7'Ƴr?7W80` EtL=쳣i]`U*rQRmBXC߆ YsP!&+ߠ1;]$3bՀ(SwԒ@شN5w*%,<\@EAi-w$0A Vxɺ:mR=ؙ"gACɄt7]}TNofO20+3BQ_~t5 $]!co8p=zc(9qr/B2.lV\HSΥ="F*T]r+(lli.QӃɀ\Nn?Tk. U057qc..~2)4M_?`8;\pu~ZI~s9!ki)2-W\3Ӛp}77^iڤ=Hfwq(-:#YKⰛtkc]{@>xyeoRyy$Gzscg!qB`Qz\hqC@'\ox{UFyt݆"n]u l.[㠐٬oJL ~p" /k)2w d=vi4YͧKIb&I59-^Έqɓ%I Kݦ4`ߟ5D6zE4ǏJ J骫P^՛(r*H!"}j+ Տh#OUKAH5*fdBiVHYS($&f؈mZW"lZ- p1LIߠ-8w( yږT3w9-Hq{/@wT QaTY{K>gSWApC JEK{ߡ2QٛVϗQF߶ x(F` =4k\qJsC 3f9(\pDЗܯ4W a0/gootaSm7L$.*Q >mbfGKÏR+_GAcsI?lr(L=PV3zs1tk&a'*Vܶʧ :fT8~fW?#G2 Q0qIG?/%V&XDH-nK&RxDR{;g|bK [f6F@2ENIF[|{r!.BAg ?*Sד䍮|T5PD1t^ Fpˍ~a^w5Y1-|jFOlΥ%f[D DU];OYk l >Ou=ooZ(kEJ.aE~d;#`C9eE<\C>`#w~B$Kfn {/o+lYޱ Fc[kU:* ]BƴY}ڣ"m-(Ifʚ򰎤;ʨ? cG~e7M ͔]j.W8 ׹5JC90ǪYZW%53k)?#a|kt|se An~!S)^"1#[7x =yCٛN`GLѦllwP5p]оJgln!ϠIa2(i򐻙:YIᇉG ;h GF| aޱ⠣nۨD#'eD4tۺLܷv5y`~~T FDVp 5O0(xԕ&1T<tcbbDa̤)OdFiw Xu9-5+$`:Ov~3te+Mjb[-"o5ܐL G_-|_8*W{5?Aɗ-,dɰ4@6 VMd6N(5n4=h Zy=G1>YpyM&n5ުy&~D19!F±raOX Bx (W2xؒ S_Y0ʢ\ ̱c '2XJ8XI-+cǏTί3r3P 7%,bSXG*_x!,K=C=:ݱ1Nb+%7sþM= =lHI<1}q.[_[zT[ _W?Z:MJ=s{Z(K %>>ztT:[!"}Q*0kWhEIfCew.uݘ26枏TVm85|s GfVcsl=]֜$ c摜0O!sx^#ȉ}88O7*; ?%ph|'tl~ lchiE6dF11@H47{#M]@_ԞI%%YU//F'07,7{EAB߸:^o}Fz%1m , FLpG-.(Wg>ʵ) ks4z%2adqE6]Z#pty'~0Qzeq`=z,DGɼLfLB{DOG̅ h4D]P =3|`lc؋G[<ȯsJyy%?pca{]l:>8<)m˔АiUxa yb)vE|@ .CMR3~hAX| Yr_9> stream xmctn6vضm۶gNVl۶mZ콿~=zUWWWw9&=#7@E\UHCF&lfj`/jj 039̌L0dG/g+ KW տu[#S+;+g%]ōٍN*ffWK3@DAQKJ^@)!07s6(ZdL]̨4&VBofή3wvȉ +ȫDTEFYۻpmfh#d?X=#01LL\fV0 MMrfxٙ(E\͜rfql濮FvV^C2-?*+q+O3SE+vuv3Z?s#gfjffpϬ:z 1(ȫ+i O,fo`jeoPqO#gQ۬hd /f\<:J=73#' d_pMܜ]M?d2343Y_q0 Nm -+1TYa^A458¹Wß 4ۻܕo&63;& [y-&~W׿SǶ3sMXRb9v*C`6,Gډ_[|ң@3;F )6x_ wCm`YPx_e-8%s-J^;$tŲ!r0Y~ë p )SɫZq77K:C# F .{=jϝ!*)=9B_nu2`A\gvLX9 uTl47/i(i[t"\9;#!E>#}@ٌA4Wg A2ĘKFS젷ПUsU02 _5d xϳ${zf6yi^5U^A S!}w)!h %SF;rB90.3=ltf_<9Ka(:y,op#E}r#丂Y |/xISؙAXgbER^9 s-'p'w٫Y5(ӕ|3uVARb$!.D 1@0]I2 g#^pTNYh߽Y~tl2 W*TXQj*zl}t-f:nVMoPX"*Z_n[7*JSkU{uFs'Ldjig&kh֎ wA3tݽJnKn9筼6[o/[x ]V wAeDH~3 }Mg⺈w;k}b21%:woQPK"F\H1^g pHUcf Uovey1-غ aWڠxCL|JRzV>= ;JHA[;`ك;֣'-A!W^ aehīO1]eV O \ =V' }]^Qc(%OOznu<ĜQ؋TIʪ+eA%8d$ d>#gشgAnK}W;2(G5}3.}ysA4Ξ=pdZaQe͆փ$NLjJ)?ɅLo/IKcR!q1hHSEzsu3Mp[HR9"Wq;ED-ˉA0Qkrl(RDRT2;]b׷}7C輀썩$ s4|ɏE]Txp8TQ*}XWױZs۫ozMZǛst!G{~V7N]j[vjxa{L뽱dKc݉Z]`a2&+Wk Mv^a&nhkS/S#7R-nKv՝fŧϴLBCr=m8p cM7=۩ej H 6y'{H@$_MWӦ{_^gf2  B*|Xv-@!G9L5fI";1uCD(T>'p}ua$cc }bu~땺W"tFB@ ]ӶVc+U?0|7$:NW6U 0Oτ: T|w^)3)2ʿLXUܞ~c]'JP2^Yn9g%:N_1P8-vЍ'~{"瘲dzr~a7kTU(jߎyw\t}ƠD񪉸abR3|g$#A^!M{/pU#_§Em? 0i HGam4pqh@!#Eb. .lXp(#\u8"*57ҕ:S):e%eOÆfpgq| gy%CHNmݺm^˭Ƽ]IߕXx0J*_s~.%#]VBoKd-OSmf=mu\> :b( Xs'Jcr-t#wN%TAx @"t-'3<0zCVm*O_> 3Y%rqC{nf \a /E #!8&ѩE(g{`^ay 0"0ۯE&ymC#@;ܝ`(F[.gEq`Sn\^A=.#x腾*/\{9ؾ %:;vv_=}~ZA\7x- ؈#u))I*hof1ZOe43R"=)g*̱$D'Džs3c11զЂ$`LV@L$ 芋R? 9:X<O@WrqAcZդa,̮17yBt1f gtǵ'&"e mڮ 2y ]E&͊bc:xjt:F!3.\:8nty}\y?Z~*gG:{2 HBHU,-0I6v!rQ\WW0qaXx-ؕF(ngm( 9FbGzG YЬ /uV_l!Iar#?Ol\7"2 xϝdwP"/B`pϷ(-jК)j(rgydLlJ^l% ie9,b EU]#'s @{ܜ辧Mv%Rq A>tZ Zjj7?ݨMy+mI\3z'F`rACDiV-!vy}]!h^ UI!Qʉ`Nf?_ E'B_wZzl-ZB _O#R7|pX5J)(P~$hlOq֗߉UI};uA*8qp)/ sna5;]<7@ "{RL+.HlQn5q-&\<2htԹ2z.Ab·uTA??eSC[@0C6T3n&, bTU_!|Jy(9ExףV6e 4'>qR̭n$𨪼S4?ή0LzLQb]{& }qe&U2 ,N2J!F 7؎zotwq1hu{*nղ|Tk Z {hۜխ#4! 42>9N}p$X-o`kkc@&Ds6j,z}tƟ"*BflUbQktw3|$͹GŪ@U#dƀ6oZ9CPQΏG:j% (0knb>f7`*%FXō("یGJ84P~ e9Ϛf*NMW(s &Q ;H膿 *כ>p*,}KUhHJ{寜BZ=p"꫚(0#%)XI|C%[ݖ@45QJR$AU%>"|{e-A; <]brYZpl0C#bѨ cH-'{ -A e%WN" ih5ј*=(VA8;x_jD]|K~= H"ܞqV_Q6O0!ve~Rmܪ}:;3$qJ;*MR*N±):O'ah9 Zsپ|.nЬ#]Y=J{V_DeQ|x\/sr$7]5NFp(mLB7S.4f`=F|D, *l>ELa rC 1",/hR;Mr B4*Y9r)`ߍ!fD@MvHw>X=:rϿKܻ}&Ր;[&~Fiz)v$5BQac!788\.\kV*tXҷp,qX79bVziO('UU Bڎ ,keX*ck4 3ǫE6-3I"#~ϕ&y"`6(eGP{:kiEc [PP,=cVCM=jph6izoOxSvAb7`KidTi[EԛUSx^~Pk*<g>tT͗*υ "`ew9i-(pL~w5JY)l͟-Pe]R,ŝ%FL&F4=' qD?q )3q뽽ob5y%+ Ҳw_ᶟTl/nH9/@JD|#HCp-b3oDǗN3l$̾.yFH:D£Dv"]O@?OSyqd^D?E$d0P?|||Ղނ@7$" WPHԠ=_>qĦ6! _ˋ&s7'VD9!Kf+>U.Ө I.<ՙ@"g}#HkhmA,r3ϛUUUi>ěGgrz鼥 #,dx{kHn*xȧ1zWI=C0{_wmsHs2ء#Β-cwF5K/eI<*~߁_q*.),+w |(-b{2Q%xLaA,;reJ-JusȫxK8RdWS퍙} ^ `ŰFK$s,%ǔ"C%S;5 `AGE"q\UXx=6~^g9o_sd XW Tߴ:gسFlp9ҕyO}4 s~L;Nn Q-zquk#esmFҊ͔?U7drў"kwc)%;Ñw{=LnjҖIxL {޳lیUv`GH$5wtN$ J8f> Tԉ̿sb~^v7V߱Qb}+H1PǤYb1<:,4^4/#o@ъu524Qx13bˉN&%5%=Q$f5d" {^ lBc8I)ni+Hf= ZLtjl֪ĕ;Q P|LȰP~a90y3M8e U>F@?OYxm$G#̲F;i_3@8@HOeC%Pɕv]Y[}`5(qz;^yWmY1`ڨeO9;za0{VS͞V% WkC aBMݼ-VWҋClUZIY$(M IAbrm휹V1l_aAjKC]P \zb=& <&T WōG*nG]("50]QL%W䲋us 8 X #mdǢxgt%WR +t4 0:JV!sjZ,Tv> "[`X 2.6u0V~)ظdp.nRn"X%\A"8]e|X -~O'78vIQkN\G,^wbnQd" ER>-d 8҅AzyXnkfP3AP('NalҮ%Bj_5 F/"I;!(-'U # 懏rΑ8 ?5X:\tL} "o,CVo=Ymc4-r ƕx\oN;.H R@\/ |sN[fv)GF=9G׏~4KMpv]?m?B <SQonW/ʮy. 'Vv"3R0” g/1| ,MK<.j5_(7;=ANʯ`„q2Tu&"RMX1 >rY[P~rnsF'gB]! $i*21Hy .oJyܕ|}vhvax;yY4Ĥ tx #ݟu3籍Z_FgI}] BTllC1 KK߅@HTY>ٴ̺{n#IKɡ(AMդcqɾ)D]Owfen;E~clp 5 G}V7_%%,x%Op}zP+)5`7·9{5Q H2p!Qh߭1N9>^cDL>ezgIrNpՇ;p،V ̬Y}`C|vuES`qc:~X I7Յ79QH:ס\B/i/V&>DuɬLujŒiMwcEJ7=~A=q'QP*G-_ {5Iz]O+N>ӋKN3 %~0qzPieA G>3/3y]M' ˓pEd8щHT5N~ Av7 Z i '6yTt'T f2=4ynS׶61nwGu%m.\SHP K7Zkږ? EpW @x@W#3? d(bAg^r> (6ohpp.@=Sw>h@-Zw* G-:Ƚf3E^@:=ٹCt %A[vr1b wb /Ζj-p |=,aT\.qXĉ.s>mqN;z)k+㊸aT?/۾3tSl3VES46o<`Z*=Acppw=hWciJc8]֨}EM-ȋD詝%فoW-zm"<$7Ԑ @`"Li -3qVnn_DFc )QƲ3$ji@@IP['RފvtBJ.)U1diGRԛIךl[78uw%ϲjK2 pysv@$G™26dpMH*7Ҿ-de QL2;zxTsMv5tVE# KFmAI+hwN/0@M<'-cXH;@҄7J  9ʗG/{*[ӪR@A j(5,!R0H9]c5٪9"$;}O(:a"N)F;.YږKȟ94}NEb錖1 sOվVsУ=4g܆l"`E$1D1}tĔ*MÐr"&vޛq:v{$ ʓт!]c򙬷᭱ݍCs>嫦ByeDli>-eTa;F;far2лcS(ceX~ubO}tr\JE]Æ\KFiK-?R;Jk\fkyWsHFʧrg,3l0B}$(\ޒؿE4 Mg[7aҵ¹/IɁ1iWK fQ7"oF !B)u4f[nۃYK2@(ÿ!+7gn=VZ :kM9쭿bpbiR5Wܓ5-4gʿ"Y $3l ~Ja`m +^%+"G~G=e}QAR&2$Td+3mB&223 ojvς /});;aŧwKaD\mMU|.hըݾ,ߥ4~[_P)+ӻ ed 6.HY sj^?FuC"i?A/;&ăd&L|Nmm3\! J5{ KK6V3Y?sު{hRkG_A V0iC/mCZDA3CČALx"tj\[eJSX мƇӏ$+WU+=׳됰6%;U'R⍜ 4dmj#$i.}ʦz*6̋cA u=ZuNw9?ȣfWW!&NLOlh5FUn9c I'Q W^o!#n@c?%/4}ӈQ6]ݠm&M)Kokq ~#$DfR;ҩ]_ҪۿV]zv@=ǹ19{9fZ"qxlV% 6& dG3@bLzD vÊBmĚL8qՅzΦggh4O͗ [.*(KϢ̃$l~%n"15ܨBKsb_+g-}m\:$m[f݉'Rz&]hDF5T|s<~™`$(ܔ)3ix4 RBPl^ <D uMKEٌ9* U2Ē5KM`0 HlpR((pujh+v9FwGkz%s%}?}A$w^!:3Zj\@{Ed*UKl`vHf4$ PҚ#>a4+ Bd1rqA9_^qZn,њ~\*1oNHg3u <4_0*gL5NpH86]|Aou}Ai2GE"_a?NW֨ dMLxVO'(G5Skz㽷Y3}l8~x1e.v%z:c^|;PZܧdΜF #۵"~VGحnAŌ&9cm 5P&eHxʨ>-%Ps_ɒ5S)p3%A_zꌰ_ UIl7]@5~D p 9$R`7CVDnSC^=ܧ?bk&uY7 3,.cwHCq<`iq,* ['^P @o fx%r˧gmU8 0((˸R\c$ Gp3_p˧ (B`>ч |Ug{Hv$Y j =&M|ˮ5J8]eh1\}hN Zu_v|wغ)4 |8Z0Rʪ 5\B;U7_fi !R܋~=)[Qde]g v$ߨJ-ݖEjiZq2)0;N0z1R*GI{['gM0皈$ 3 Jb_[@XCw]L'Ӂ['qSpL..IS !U]h9 ^^EE<2XRdljog< VE#SQ x{{w5`(,:x,ْ}^᳢/xk 86y00B6ZVb@p$gƅ\x;~(o[_'a,S-w_$Gi)aԟ ~L(O~Jzc}]~ґ»{cE-Yч8~8hmVЋ>5KNs K讁sRnpR4Ò;zkxРjP *L ڇ4\a].܅TW$/ &1ųf GRil4X$0@kN͇ +{咀1j5~ nTmkr!#<`*O#e]IX^\ch ' 7~x$W7>DpHz0զoc@?1NtJMS_\Fd[Ӛ>,䄤=^,]ƹb"F݁_{3ưJf-ceU܄ϯ냚 d\ "ՏT*$ !JAb+%(Jh1 3}L{4P\/D~+I{ubA-FQ >%)q6 0kp(;@PP_;2sb*ˊ_.|.#]<KIVthK+q)OF |?qIFpܖA0:_PCXX\̹4IrOlefB<2YR,cVp9ώn1^|.o>K&Rf}bF]ЛVΜVbֻD$M&)0)l`("̣c H O{'dA&ΊA?W`d gCm)5NƁ r<@Bl4dW+[gBtiּ;LF(TEpl \,jm$ uM/~[6w],}WiB2[#Ni'ȶ[?%FJ`I"Bl,j۝W(cx;V*TRЏ@9[+M10jJ}'fDPP@Y75B6 rbQ1EOQ0N_9h6k,=ƚY^hlCC  7 ?:7$xa] ֺm|O*&ȪľC}_;ɧJZ0D@)m_3Z9F007YA"dZθi| lN0\lsL8= S]s&"AHT\Eq2D 1!菨 fA6& YrOx;AH/=f_GV_00x_C&uò)GgNjyy-{5 2.SPJqݶR8zwu7r|T+Kz6nAYt*QՊU?:>GsO,\1TeyhRSsQf k? nQm%\5lk~U};lSQ69wםqZd>u-vr+ oP$FM]ySA&Ŝ Y؈ ZʭDcb1;KJ2C!࡟p_Lv^)pIN:|hݝ)1z. endstream endobj 440 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.14)/Keywords() /CreationDate (D:20170808220249+02'00') /ModDate (D:20170808220249+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013/Debian) kpathsea version 6.1.1) >> endobj 412 0 obj << /Type /ObjStm /N 77 /First 662 /Length 2718 /Filter /FlateDecode >> stream xڥZ[sԸ~_lWQʅ,BK8s c Oqd[3<0[j}_ݒlXF3d r3adL01hƱ!ӔC1?f*5br ?UL 4f`.i f\30Mƭ\g<ρ`@a R`f ?Q`Caa',@9)tZH8Lre3k3) L % qJi =0XigA0rMLQ_Z)pإ҂qB0&q`Nq!e`!S9HCxP\x i)HBb< sk*KgAz$05BЀ#tAE =&79YfH :Q ZBi `hG-&9ylS?oˌ.AYOmXI1v?~Qu&ůS=@D٭'9؈/&"=ObZMv2M9syab9.K>9 /!9"k򖜒32&򑜓rYKRM\o$bRN˫Ʒ˦5CwLd1]w6+%\L0IIQRXSRL"Wϒ\-VKrMe }{SIEK)uMfdNռ$(Ws 0ܒbYD .TNW5A~Myy1 ZgIjR?~/ACeYY'eI~/C)'>ՇH2 hg_髿aX:pa//J(/W, 3˹OwfL2|qEf4=C\t>2|އw=;?>JŞ>8Lv>~m] j#<}8>U^NYG闗G=%D\Fuy|)5':D9| uI.$Xq~:rO`Px+~1˧7H`Pxk>pL<{?'76FQxdvG,k{2O?}xy|ȇO>= |iU>݋iq]p/V7%>&~]]͘K;Vp &\! /=SG^͹WA!\2-p>amre=BzBjU+!T> C|a=}pWPJطf oSu,2,kYyHzVԏw dže3=gqL;Ό? [.niW㾧$՝7xA=4&<}ma=C]ު-<<9<<):U-Ģ m+iMڶJ9WY-9:qfZLy M[Tg|1SttMCj_ď&PanTTȸt'Ƽ6^M%$_dd+IOGL%\JJXvu+ׅH@92DVRA7쉸%osf8"oJͺRѩY4h [+<:CLi-;Uz G!awE2L#4f揃)|pO05[Z:N-:GoJ5l;[8ThEC͠%1؀XfX'rjR ހ|ECXdʇ&7mS.R PS#4] cIՔ r^g2V$FGGdqQNv 5}10t:]fȈby1^gXtU] TKpn]@w~ךv $Ar874W,u ".xH+[` 1-O~H>;P,ұ %b ϰEmGm %O{[1&Ra!a8VxeHʟ܍J3w`Ašs:r̺Awcq@ QQibHmƬ0,VCΒn`&#(B˺rjF̾xәD:MfԀ֏]ytxtonkE$S4O(Y\8)>lÑz 'hTm=kEpl>d9t* EFM ꩅ\mǃC-hW3JGlPWqpHç 2,T{jI0X2R~M“ +K -{<(kp"G)ys12z?p)^qeI>z3)~fW 1Yp8m9ulۗ& endstream endobj 441 0 obj << /Type /XRef /Index [0 442] /Size 442 /W [1 3 1] /Root 439 0 R /Info 440 0 R /ID [ ] /Length 1070 /Filter /FlateDecode >> stream x-IL_U?Le(h.2 -e,e(  1eƸ0Dcڸrظ41&j5.]vt>rw}s^!CBh(Ά #x ihZi!(B+F'-*HK@)Z#Z/i(G;CZ*Ρ]&hmhHOnZpmCIZi#86AΠ͠ZhmA3Jz\DDk!Z.]$ ᤩT/ޅևGЗЮ#UzІ*6U4N(]EQUR]FAؖnL0` LX2u0٧ E87M0 n0 }Cak;F ':Ntfi/s̲j>~;,iy05uV*yGe %u: A˿u 8Yo*p^Mռ5[ ^:@=WIŒMݯ ĀO灆%= 0, DMdur-as.numeric(ii), NA ) ) pr.rates[,ia, ii ,"DM/Ins",] <- ci.pred( Ins.Dead, newdata = dnew ) pr.rates[,ia, ii ,"All" ,] <- ci.pred( All.Dead, newdata = dnew ) } } ################################################### ### code chunk number 13: mort-int ################################################### par( mar=c(3,3,1,1), mgp=c(3,1,0)/1.6, las=1 ) plot( NA, xlim=c(40,82), ylim=c(5,300), bty="n", log="y", xlab="Age", ylab="Mortality rate per 1000 PY" ) abline( v=seq(40,80,5), h=outer(1:9,10^(0:2),"*"), col=gray(0.8) ) for( aa in 4:7*10 ) for( ii in 1:4 ) matlines( aa+as.numeric(dimnames(pr.rates)[[1]]), cbind( pr.rates[,paste(aa),ii,"DM/Ins",], pr.rates[,paste(aa),ii,"All" ,] ), type="l", lty=1, lwd=c(3,1,1), col=rep(c("red","limegreen"),each=3) ) ################################################### ### code chunk number 14: Tr ################################################### Tr <- list( "DM" = list( "Ins" = DM.Ins, "Dead" = DM.Dead ), "Ins" = list( "Dead(Ins)" = Ins.Dead ) ) ################################################### ### code chunk number 15: make-ini ################################################### str( Si[NULL,1:9] ) ini <- subset(Si,FALSE,select=1:9) str( ini ) ini <- subset(Si,select=1:9)[NULL,] str( ini ) ################################################### ### code chunk number 16: ini-fill ################################################### ini[1:2,"lex.id"] <- 1:2 ini[1:2,"lex.Cst"] <- "DM" ini[1:2,"Per"] <- 1995 ini[1:2,"Age"] <- 60 ini[1:2,"DMdur"] <- 5 ini[1:2,"sex"] <- c("M","F") ini ################################################### ### code chunk number 17: simL ################################################### set.seed( 52381764 ) Nsim <- 1000 system.time( simL <- simLexis( Tr, ini, t.range = 12, N = Nsim ) ) ################################################### ### code chunk number 18: sum-simL ################################################### summary( simL, by="sex" ) ################################################### ### code chunk number 19: Tr.p-simP ################################################### Tr.p <- list( "DM" = list( "Ins" = DM.Ins, "Dead" = All.Dead ), "Ins" = list( "Dead(Ins)" = All.Dead ) ) system.time( simP <- simLexis( Tr.p, ini, t.range = 12, N = Nsim ) ) summary( simP, by="sex" ) ################################################### ### code chunk number 20: Cox-dur ################################################### library( survival ) Cox.Dead <- coxph( Surv( DMdur, DMdur+lex.dur, lex.Xst %in% c("Dead(Ins)","Dead")) ~ Ns( Age-DMdur, knots=ad.kn ) + I(lex.Cst=="Ins") + I(Per-2000) + sex, data = Si ) round( ci.exp( Cox.Dead ), 3 ) round( ci.exp( All.Dead ), 3 ) ################################################### ### code chunk number 21: TR.c ################################################### Tr.c <- list( "DM" = list( "Ins" = Tr$DM$Ins, "Dead" = Cox.Dead ), "Ins" = list( "Dead(Ins)" = Cox.Dead ) ) system.time( simC <- simLexis( Tr.c, ini, t.range = 12, N = Nsim ) ) summary( simC, by="sex" ) ################################################### ### code chunk number 22: nState ################################################### system.time( nSt <- nState( subset(simL,sex=="M"), at=seq(0,11,0.2), from=1995, time.scale="Per" ) ) nSt[1:10,] ################################################### ### code chunk number 23: pstate0 ################################################### pM <- pState( nSt, perm=c(1,2,4,3) ) head( pM ) par( mfrow=c(1,2), mar=c(3,3,1,1), mgp=c(3,1,0)/1.6 ) plot( pM ) plot( pM, border="black", col="transparent", lwd=3 ) text( rep(as.numeric(rownames(pM)[nrow(pM)-1]),ncol(pM)), pM[nrow(pM),]-diff(c(0,pM[nrow(pM),]))/5, colnames( pM ), adj=1 ) box( col="white", lwd=3 ) box() ################################################### ### code chunk number 24: pstatex ################################################### clr <- c("limegreen","orange") # expand with a lighter version of the two chosen colors clx <- c( clr, rgb( t( col2rgb( clr[2:1] )*2 + rep(255,3) ) / 3, max=255 ) ) par( mfrow=c(1,2), las=1, mar=c(3,3,4,2), mgp=c(3,1,0)/1.6 ) # Men plot( pM, col=clx ) lines( as.numeric(rownames(pM)), pM[,2], lwd=3 ) mtext( "60 year old male, diagnosed 1990, aged 55", side=3, line=2.5, adj=0, col=gray(0.6) ) mtext( "Survival curve", side=3, line=1.5, adj=0 ) mtext( "DM, no insulin DM, Insulin", side=3, line=0.5, adj=0, col=clr[1] ) mtext( "DM, no insulin", side=3, line=0.5, adj=0, col=clr[2] ) axis( side=4 ) axis( side=4, at=1:19/20, labels=FALSE ) axis( side=4, at=1:99/100, labels=FALSE, tcl=-0.3 ) # Women pF <- pState( nState( subset(simL,sex=="F"), at=seq(0,11,0.2), from=1995, time.scale="Per" ), perm=c(1,2,4,3) ) plot( pF, col=clx ) lines( as.numeric(rownames(pF)), pF[,2], lwd=3 ) mtext( "60 year old female, diagnosed 1990, aged 55", side=3, line=2.5, adj=0, col=gray(0.6) ) mtext( "Survival curve", side=3, line=1.5, adj=0 ) mtext( "DM, no insulin DM, Insulin", side=3, line=0.5, adj=0, col=clr[1] ) mtext( "DM, no insulin", side=3, line=0.5, adj=0, col=clr[2] ) axis( side=4 ) axis( side=4, at=1:19/20, labels=FALSE ) axis( side=4, at=1:99/100, labels=FALSE, tcl=-0.3 ) ################################################### ### code chunk number 25: pstatey ################################################### par( mfrow=c(1,2), las=1, mar=c(3,3,4,2), mgp=c(3,1,0)/1.6 ) # Men pM <- pState( nState( subset(simL,sex=="M"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) plot( pM, col=clx, xlab="Age" ) lines( as.numeric(rownames(pM)), pM[,2], lwd=3 ) mtext( "60 year old male, diagnosed 1990, aged 55", side=3, line=2.5, adj=0, col=gray(0.6) ) mtext( "Survival curve", side=3, line=1.5, adj=0 ) mtext( "DM, no insulin DM, Insulin", side=3, line=0.5, adj=0, col=clr[1] ) mtext( "DM, no insulin", side=3, line=0.5, adj=0, col=clr[2] ) axis( side=4 ) axis( side=4, at=1:19/20, labels=FALSE ) axis( side=4, at=1:19/20, labels=FALSE, tcl=-0.4 ) axis( side=4, at=1:99/100, labels=FALSE, tcl=-0.3 ) # Women pF <- pState( nState( subset(simL,sex=="F"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) plot( pF, col=clx, xlab="Age" ) lines( as.numeric(rownames(pF)), pF[,2], lwd=3 ) mtext( "60 year old female, diagnosed 1990, aged 55", side=3, line=2.5, adj=0, col=gray(0.6) ) mtext( "Survival curve", side=3, line=1.5, adj=0 ) mtext( "DM, no insulin DM, Insulin", side=3, line=0.5, adj=0, col=clr[1] ) mtext( "DM, no insulin", side=3, line=0.5, adj=0, col=clr[2] ) axis( side=4 ) axis( side=4, at=1:9/10, labels=FALSE ) axis( side=4, at=1:19/20, labels=FALSE, tcl=-0.4 ) axis( side=4, at=1:99/100, labels=FALSE, tcl=-0.3 ) ################################################### ### code chunk number 26: comp-0 ################################################### PrM <- pState( nState( subset(simP,sex=="M"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) PrF <- pState( nState( subset(simP,sex=="F"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) CoxM <- pState( nState( subset(simC,sex=="M"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) CoxF <- pState( nState( subset(simC,sex=="F"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) par( mfrow=c(1,2), mar=c(3,3,1,1), mgp=c(3,1,0)/1.6 ) plot( pM, border="black", col="transparent", lwd=3 ) lines( PrM, border="blue" , col="transparent", lwd=3 ) lines( CoxM, border="red" , col="transparent", lwd=3 ) text( 60.5, 0.05, "M" ) box( lwd=3 ) plot( pF, border="black", col="transparent", lwd=3 ) lines( PrF, border="blue" , col="transparent", lwd=3 ) lines( CoxF, border="red" , col="transparent", lwd=3 ) text( 60.5, 0.05, "F" ) box( lwd=3 ) ################################################### ### code chunk number 27: simLexis.rnw:1033-1034 ################################################### source( "../R/simLexis.R", keep.source=TRUE ) ################################################### ### code chunk number 28: simLexis.rnw:1050-1053 ################################################### cbind( attr( ini, "time.scale" ), attr( ini, "time.since" ) ) ################################################### ### code chunk number 29: simLexis.rnw:1078-1079 ################################################### simLexis ################################################### ### code chunk number 30: simLexis.rnw:1096-1097 ################################################### simX ################################################### ### code chunk number 31: simLexis.rnw:1109-1110 ################################################### sim1 ################################################### ### code chunk number 32: simLexis.rnw:1122-1123 ################################################### lint ################################################### ### code chunk number 33: simLexis.rnw:1133-1134 ################################################### get.next ################################################### ### code chunk number 34: simLexis.rnw:1143-1144 ################################################### chop.lex ################################################### ### code chunk number 35: simLexis.rnw:1161-1162 ################################################### nState ################################################### ### code chunk number 36: simLexis.rnw:1171-1172 ################################################### pState ################################################### ### code chunk number 37: simLexis.rnw:1176-1178 ################################################### plot.pState lines.pState Epi/inst/doc/simLexis.rnw0000644000175100001440000014637013074071400015063 0ustar hornikusers\SweaveOpts{results=verbatim,keep.source=TRUE,include=FALSE,eps=FALSE,prefix.string=sL} %\VignetteIndexEntry{Simulation of multistate models with multiple timescales: simLexis} \documentclass[a4paper,twoside,12pt]{report} %---------------------------------------------------------------------- % General information \newcommand{\Title}{Simulation of\\ multistate models with\\ multiple timescales:\\ \texttt{simLexis} in the \texttt{Epi} package} \newcommand{\Tit}{Multistate models with multiple timescales} \newcommand{\Version}{Version 2.3} \newcommand{\Dates}{\today} \newcommand{\Where}{SDC} \newcommand{\Homepage}{\url{http://BendixCarstensen.com/Epi/simLexis.pdf}} \newcommand{\Faculty}{\begin{tabular}{rl} Bendix Carstensen & Steno Diabetes Center, Gentofte, Denmark\\ & {\small \& Department of Biostatistics, University of Copenhagen} \\ & \texttt{bxc@steno.dk}\\ & \url{http://BendixCarstensen.com} \\[1em] \end{tabular}} %---------------------------------------------------------------------- % Packages %\usepackage[inline]{showlabels} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage[english]{babel} \usepackage[font=it,labelfont=normalfont]{caption} \usepackage[colorlinks,urlcolor=blue,linkcolor=red]{hyperref} \usepackage[ae,hyper]{Rd} \usepackage[dvipsnames]{xcolor} \usepackage[super]{nth} \usepackage{makeidx,Sweave,floatflt,amsmath,amsfonts,amsbsy,enumitem,dcolumn,needspace} \usepackage{ifthen,calc,eso-pic,everyshi} \usepackage{booktabs,longtable,rotating,graphicx} \usepackage{pdfpages,verbatim,fancyhdr,datetime,% afterpage} \usepackage[abspath]{currfile} % \usepackage{times} \renewcommand{\textfraction}{0.0} \renewcommand{\topfraction}{1.0} \renewcommand{\bottomfraction}{1.0} \renewcommand{\floatpagefraction}{0.9} \DeclareMathOperator{\Pp}{P} \providecommand{\pmat}[1]{\Pp\left\{#1\right\}} \providecommand{\ptxt}[1]{\Pp\left\{\text{#1}\right\}} \providecommand{\dif}{{\,\mathrm d}} % \usepackage{mslapa} \newenvironment{exercise}[0]{\refstepcounter{exno} \begin{quote} {\bf Exercise \theexno.}} {\end{quote}} \definecolor{blaa}{RGB}{99,99,255} \DeclareGraphicsExtensions{.pdf,.jpg} % Make the Sweave output nicer \DefineVerbatimEnvironment{Sinput}{Verbatim}{fontsize=\footnotesize,fontshape=sl,formatcom=\color{Blue}} \DefineVerbatimEnvironment{Soutput}{Verbatim}{fontsize=\footnotesize,formatcom=\color{Maroon},xleftmargin=0em} \DefineVerbatimEnvironment{Scode}{Verbatim}{fontsize=\footnotesize} \fvset{listparameters={\setlength{\topsep}{0pt}}} \renewenvironment{Schunk}% {\renewcommand{\baselinestretch}{0.85} \vspace{\topsep}}% {\renewcommand{\baselinestretch}{1.00} \vspace{\topsep}} % \renewenvironment{knitrout} % {\renewcommand{\baselinestretch}{0.85}} % {\renewcommand{\baselinestretch}{1.00}} % redefined in topreport.tex %---------------------------------------------------------------------- % The usual usefuls % \input{/home/bendix/util/tex/useful.tex} %---------------------------------------------------------------------- % Set up layout of pages \oddsidemargin 1mm \evensidemargin 1mm \topmargin -5mm \headheight 8mm \headsep 5mm \textheight 240mm \textwidth 165mm %\footheight 5mm \footskip 15mm \renewcommand{\topfraction}{0.9} \renewcommand{\bottomfraction}{0.9} \renewcommand{\textfraction}{0.1} \renewcommand{\floatpagefraction}{0.9} \renewcommand{\headrulewidth}{0.1pt} \setcounter{secnumdepth}{4} \setcounter{tocdepth}{2} %---------------------------------------------------------------------- % How to insert a figure in a .rnw file \newcommand{\rwpre}{sL} \newcommand{\insfig}[3]{ \begin{figure}[h] \centering \includegraphics[width=#2\textwidth]{\rwpre-#1} \caption{#3} \label{fig:#1} % \afterpage{\clearpage} \end{figure}} %---------------------------------------------------------------------- % Here is the document starting with the titlepage \begin{document} %---------------------------------------------------------------------- % The title page \setcounter{page}{1} \pagenumbering{roman} \pagestyle{plain} \thispagestyle{empty} % \vspace*{0.05\textheight} \flushright % The blank below here is necessary in order not to muck up the % linespacing in title if it has more than 2 lines {\Huge \bfseries \Title }\ \\[-1.5ex] \noindent\textcolor{blaa}{\rule[-1ex]{\textwidth}{5pt}}\\[2.5ex] \large \Where \\ \Dates \\ \Homepage \\ \Version \\[1em] \normalsize Compiled \today,\ \currenttime\\ % from: \texttt{\currfileabspath}\\[1em] % \input{wordcount} \normalsize \vfill \Faculty % End of titlepage % \newpage %---------------------------------------------------------------------- % Table of contents \tableofcontents %---------------------------------------------------------------------- % General text layout \raggedright \parindent 1em \parskip 0ex \cleardoublepage %---------------------------------------------------------------------- % General page style \pagenumbering{arabic} \setcounter{page}{1} \pagestyle{fancy} \renewcommand{\chaptermark}[1]{\markboth{\textsl{#1}}{}} \renewcommand{\sectionmark}[1]{\markright{\thesection\ \textsl{#1}}{}} \fancyhead[EL]{\bf \thepage \quad \rm \leftmark} \fancyhead[ER]{\sl \Tit} \fancyhead[OR]{\rm \rightmark \quad \bf \thepage} \fancyfoot{} %---------------------------------------------------------------------- % Here comes the substance \chapter{Using \texttt{simLexis}} \section{Introduction} This vignette explains the machinery behind simulation of life histories through multistate models implemented in \texttt{simLexis}. In \texttt{simLexis} transition rates are allowed to depend on multiple time scales, including timescales defined as time since entry to a particular state (duration). This therefore also covers the case where time \emph{at} entry into a state is an explanatory variable for the rates, since time at entry is merely time minus duration. Thus, the set-up here goes beyond Markov- and semi-Markov-models, and brings simulation based estimation of state-occupancy probabilities into the realm of realistic multistate models. The basic idea is to simulate a new \texttt{Lexis} object \cite{Plummer.2011,Carstensen.2011a} as defined in the \texttt{Epi} package for \R, based on 1) a multistate model defined by its states and the transition rates between them and 2) an initial population of individuals. Thus the output will be a \texttt{Lexis} object describing the transitions of a predefined set of persons through a multistate model. Therefore, if persons are defined to be identical at start, then calculation of the probability of being in a particular state at a given time boils down to a simple enumeration of the fraction of the persons in the particular state at the given time. Bar of course the (binomial) simulation error, but this can be brought down by simulation a sufficiently large number of persons. An observed \texttt{Lexis} object with follow-up of persons through a number of states will normally be the basis for estimation of transition rates between states, and thus will contain all information about covariates determining the occurrence rates, in particular the \emph{timescales} \cite{Iacobelli.2013}. Hence, the natural input to simulation from an estimated multistate model will typically be an object of the same structure as the originally observed. Since transitions and times are what is simulated, any values of \texttt{lex.Xst} and \texttt{lex.dur} in the input object will of course be ignored. This first chapter of this vignette shows by an example how to use the function \texttt{simLexis} and display the results. The subsequent chapter discusses in more detail how the simulation machinery is implemented and is not needed for the practical use of \texttt{simLexis}. \section{\texttt{simLexis} in practice} This section is largely a commented walk-trough of the example from the help-page of \texttt{simLexis}, with a larger number of simulated persons in order to minimize the pure simulation variation. When we want to simulate transition times through a multistate model where transition rates may depend on time since entry to the current or a previous state, it is essential that we have a machinery to keep track of the transition time on \emph{all} time scales, as well as a mechanism that can initiate a new time scale to 0 when a transition occurs to a state where we shall use time since entry as determinant of exit rates from that state. This is provided by \texttt{simLexis}. \subsection{Input for the simulation} Input for simulation of a single trajectory through a multistate model requires a representation of the \emph{current status} of a person; the starting conditions. The object that we supply to the simulation function must contain information about all covariates and all timescales upon which transitions depend, and in particular which one(s) of the timescales that are defined as time since entry into a particular state. Hence, starting conditions should be represented as a \texttt{Lexis} object (where \texttt{lex.dur} and \texttt{lex.Xst} are ignored, since there is no follow-up yet), where the time scale information is in the attributes \texttt{time.scale} and \texttt{time.since} respectively. Thus there are two main arguments to a function to simulate from a multistate model: \begin{enumerate} \item A \texttt{Lexis} object representing the initial states and covariates of the population to be simulated. This has to have the same structure as the original \texttt{Lexis} object representing the multistate model from which transition rates in the model were estimated. As noted above, the values for \texttt{lex.Xst} and \texttt{lex.dur} are not required (since these are the quantities that will be simulated). \item A transition object, representing the transition intensities between states, which should be a list of lists of intensity representations. As an intensity representation we mean a function that for given a \texttt{Lexis} object that can be used to produce estimates of the transition intensities at a set of supplied time points since the state represented in the \texttt{Lexis} object. The names of the elements of the transition object (which are lists) will be names of the \emph{transient} states, that is the states \emph{from} which a transition can occur. The names of the elements of each of these lists are the names of states \emph{to} which transitions can occur (which may be either transient or absorbing states). Hence, if the transition object is called \texttt{Tr} then \verb+TR$A$B+ (or \verb+Tr[["A"]][["B"]]+) will represent the transition intensity from state \texttt{A} to the state \texttt{B}. The entries in the transition object can be either \texttt{glm} objects, representing Poisson models for the transitions, \texttt{coxph} objects representing an intensity model along one time scale, or simply a function that takes a \texttt{Lexis} object as input returns an estimated intensity for each row. \end{enumerate} In addition to these two input items, there will be a couple of tuning parameters. The output of the function will simply be a \texttt{Lexis} object with simulated transitions between states. This will be the basis for deriving sensible statistics from the \texttt{Lexis} object --- see next section. \section{Setting up a \texttt{Lexis} object} As an example we will use the \texttt{DMlate} dataset from the \texttt{Epi} package; it is a dataset simulated to resemble a random sample of 10,000 patients from the Danish National Diabetes Register. We start by loading the \texttt{Epi} package: <>= options( width=90 ) library( Epi ) print( sessionInfo(), l=F ) @ % First we load the diabetes data and set up a simple illness-death model: <>= data(DMlate) dml <- Lexis( entry = list(Per=dodm, Age=dodm-dobth, DMdur=0 ), exit = list(Per=dox), exit.status = factor(!is.na(dodth),labels=c("DM","Dead")), data = DMlate ) @ % This is just data for a simple survival model with states ``DM'' and ``Dead''. Now we cut the follow-up at insulin start, which for the majority of patients (T2D) is a clinical indicator of deterioration of disease regulation. We therefore also introduce a new timescale, and split the non-precursor states, so that we can address the question of ever having been on insulin: <>= dmi <- cutLexis( dml, cut = dml$doins, pre = "DM", new.state = "Ins", new.scale = "t.Ins", split.states = TRUE ) summary( dmi ) str(dmi) @ % $ We can show how many person-years we have and show the number of transitions and transition rates (per 1000), using the \texttt{boxes.Lexis} function to display the states and the number of transitions between them: <>= boxes( dmi, boxpos = list(x=c(20,20,80,80), y=c(80,20,80,20)), scale.R = 1000, show.BE = TRUE ) @ % \insfig{boxes}{0.8}{Data overview for the \textrm{\tt dmi} dataset. Numbers in the boxes are person-years and the number of persons who begin, resp. end their follow-up in each state, and numbers on the arrows are no. of transitions and rates (transition intensities) per 1000 PY.} \section{Analysis of rates} In the \texttt{Lexis} object (which is just a data frame) each person is represented by one record for each transient state he occupies, thus in this case either 1 or 2 records; those who have a recorded time both without and with insulin have two records. In order to be able to fit Poisson models with occurrence rates varying by the different time-scales, we split the follow-up in 6-month intervals for modeling: <>= Si <- splitLexis( dmi, 0:30/2, "DMdur" ) dim( Si ) print( subset( Si, lex.id==97 )[,1:10], digits=6 ) @ % Note that when we split the follow-up each person's follow up now consists of many records, each with the \emph{current} values of the timescales at the start of the interval represented by the record. In the modelling we must necessarily assume that the rates are constant within each 6-month interval, but the \emph{size} of these rates we model as smooth functions of the time scales (that is the values at the beginning of each interval). The approach often used in epidemiology where one parameter is attached to each interval of time (or age) is not feasible when more than one time scale is used, because intervals are not classified the same way on all timescales. We shall use natural splines (restricted cubic splines) for the analysis of rates, and hence we must allocate knots for the splines. This is done for each of the time-scales, and separately for the transition out of states ``DM'' and ``Ins''. For age, we place the knots so that the number of events is the same between each pair of knots, but only half of this beyond each of the boundary knots, whereas for the timescales \texttt{DMdur} and \texttt{tIns} where we have observation from a well-defined 0, we put knots at 0 and place the remaining knots so that the number of events is the same between each pair of knots as well as outside the boundary knots. <>= nk <- 5 ( ai.kn <- with( subset(Si,lex.Xst=="Ins" & lex.Cst!=lex.Xst ), quantile( Age+lex.dur , probs=(1:nk-0.5)/nk ) ) ) ( ad.kn <- with( subset(Si,lex.Xst=="Dead"), quantile( Age+lex.dur , probs=(1:nk-0.5)/nk ) ) ) ( di.kn <- with( subset(Si,lex.Xst=="Ins" & lex.Cst!=lex.Xst ), c(0,quantile( DMdur+lex.dur, probs=(1:(nk-1))/nk ) )) ) ( dd.kn <- with( subset(Si,lex.Xst=="Dead"), c(0,quantile( DMdur+lex.dur, probs=(1:(nk-1))/nk ) )) ) ( ti.kn <- with( subset(Si,lex.Xst=="Dead(Ins)"), c(0,quantile( t.Ins+lex.dur, probs=(1:(nk-1))/nk ) )) ) @ % Note that when we tease out the event records for transition to \emph{transient} states (in this case ``Ins'', that is verb|lex.Xst=="Ins"|), we should add \verb|lex.Cst!=lex.Xst|, to include only transition records and avoiding including records of sojourn time in the transient state. We then fit Poisson models to transition rates, using the wrapper \texttt{Ns} from the \texttt{Epi} package to simplify the specification of the rates: <>= library( splines ) DM.Ins <- glm( (lex.Xst=="Ins") ~ Ns( Age , knots=ai.kn ) + Ns( DMdur, knots=di.kn ) + I(Per-2000) + sex, family=poisson, offset=log(lex.dur), data = subset(Si,lex.Cst=="DM") ) DM.Dead <- glm( (lex.Xst=="Dead") ~ Ns( Age , knots=ad.kn ) + Ns( DMdur, knots=dd.kn ) + I(Per-2000) + sex, family=poisson, offset=log(lex.dur), data = subset(Si,lex.Cst=="DM") ) Ins.Dead <- glm( (lex.Xst=="Dead(Ins)") ~ Ns( Age , knots=ad.kn ) + Ns( DMdur, knots=dd.kn ) + Ns( t.Ins, knots=ti.kn ) + I(Per-2000) + sex, family=poisson, offset=log(lex.dur), data = subset(Si,lex.Cst=="Ins") ) @ % Note the similarity of the code used to fit the three models, is is mainly redefining the response variable (``to'' state) and the subset of the data used (``from'' state). \section{The mortality rates} This section discusses in some detail how to extract ad display the mortality rates from the models fitted. But it is not necessary for understanding how to use \texttt{simLexis} in practice. \subsection{Proportionality of mortality rates} Note that we have fitted separate models for the three transitions, there is no assumption of proportionality between the mortality rates from \texttt{DM} and \texttt{Ins}. However, there is nothing that prevents us from testing this assumption; we can just fit a model for the mortality rates in the entire data frame \texttt{Si}, and compare the deviance from this with the sum of the deviances from the separate models: <>= with( Si, table(lex.Cst) ) All.Dead <- glm( (lex.Xst %in% c("Dead(Ins)","Dead")) ~ Ns( Age , knots=ad.kn ) + Ns( DMdur, knots=dd.kn ) + lex.Cst + I(Per-2000) + sex, family=poisson, offset=log(lex.dur), data = Si ) round( ci.exp( All.Dead ), 3 ) @ From the parameter values we would in a simple setting just claim that start of insulin-treatment was associated with a slightly more than doubling of mortality. The model \texttt{All.dead} assumes that the age- and DM-duration effects on mortality in the ``DM'' and ``Ins'' states are the same, and moreover that there is no effect of insulin duration, but merely a mortality that is larger by a multiplicative constant not depending on insulin duration. The model \texttt{DM.Dead} has 8 parameters to describe the dependency on age and DM duration, the model \texttt{Ins.Dead} has 12 for the same plus the insulin duration (a natural spline with $k$ knots gives $k-1$ parameters, and we chose $k=5$ above). We can compare the fit of the proportional hazards model with the fit of the separate models for the two mortality rates, by adding up the deviances and d.f. from these: <>= what <- c("null.deviance","df.null","deviance","df.residual") ( rD <- unlist( DM.Dead[what] ) ) ( rI <- unlist( Ins.Dead[what] ) ) ( rA <- unlist( All.Dead[what] ) ) round( c( dd <- rA-(rI+rD), "pVal"=1-pchisq(dd[3],dd[4]+1) ), 3 ) @ % Thus we see there is a substantial non-proportionality of mortality rates from the two states; but a test provides no clue whatsoever to the particular \emph{shape} of the non-proportionality. To this end, we shall explore the predicted mortalities under the two models quantitatively in more detail. Note that the reason that there is a difference in the null deviances (and a difference of 1 in the null d.f.) is that the null deviance of \texttt{All.Dead} refer to a model with a single intercept, that is a model with constant and \emph{identical} mortality rates from the states ``DM'' and ``Ins'', whereas the null models for \texttt{DM.Dead} and \texttt{Ins.Dead} have constant but \emph{different} mortality rates from the states ``DM'' and ``Ins''. This is however irrelevant for the comparison of the \emph{residual} deviances. \subsection{How the mortality rates look} If we want to see how the mortality rates are modelled in \texttt{DM.Dead} and \texttt{Ins.Dead} in relation to \texttt{All.Dead}, we make a prediction of rates for say men diagnosed in different ages and going on insulin at different times after this. So we consider men diagnosed in ages 40, 50, 60 and 70, and who either never enter insulin treatment or do it 0, 2 or 5 years after diagnosis of DM. To this end we create a prediction data frame where we have observation times from diagnosis and 12 years on (longer would not make sense as this is the extent of the data). But we start by setting up an array to hold the predicted mortality rates, classified by diabetes duration, age at diabetes onset, time of insulin onset, and of course type of model. What we want to do is to plot the age-specific mortality rates for persons not on insulin, and for persons starting insulin at different times after DM. The mortality curves start at the age where the person gets diabetes and continues 12 years; for persons on insulin they start at the age when they initiate insulin. <>= pr.rates <- NArray( list( DMdur = seq(0,12,0.1), DMage = 4:7*10, r.Ins = c(NA,0,2,5), model = c("DM/Ins","All"), what = c("rate","lo","hi") ) ) str( pr.rates ) @ % For convenience the \texttt{Epi} package contains a function that computes predicted (log-)rates with c.i. --- it is merely a wrapper for \texttt{predict.glm}: <<>>= ci.pred @ So set up the prediction data frame and modify it in loops over ages at onset and insulin onset. Note that we set \texttt{lex.dur} to 1000 in the prediction frame, so that we obtain rates in units of events per 1000 PY. <>= nd <- data.frame( DMdur = as.numeric( dimnames(pr.rates)[[1]] ), lex.Cst = factor( 1, levels=1:4, labels=levels(Si$lex.Cst) ), sex = factor( 1, levels=1:2, labels=c("M","F")), lex.dur = 1000 ) for( ia in dimnames(pr.rates)[[2]] ) { dnew <- transform( nd, Age = as.numeric(ia)+DMdur, Per = 1998+DMdur ) pr.rates[,ia,1,"DM/Ins",] <- ci.pred( DM.Dead, newdata = dnew ) pr.rates[,ia,1,"All" ,] <- ci.pred( All.Dead, newdata = dnew ) for( ii in dimnames(pr.rates)[[3]][-1] ) { dnew = transform( dnew, lex.Cst = factor( 2, levels=1:4, labels=levels(Si$lex.Cst) ), t.Ins = ifelse( (DMdur-as.numeric(ii)) >= 0, DMdur-as.numeric(ii), NA ) ) pr.rates[,ia, ii ,"DM/Ins",] <- ci.pred( Ins.Dead, newdata = dnew ) pr.rates[,ia, ii ,"All" ,] <- ci.pred( All.Dead, newdata = dnew ) } } @ % $ So for each age at DM onset we make a plot of the mortality as function of current age both for those with no insulin treatment at those that start 1, 3 and 5 years after, thus 4 curves (with c.i.). These curves are replicated with a different color for the simplified model. <>= par( mar=c(3,3,1,1), mgp=c(3,1,0)/1.6, las=1 ) plot( NA, xlim=c(40,82), ylim=c(5,300), bty="n", log="y", xlab="Age", ylab="Mortality rate per 1000 PY" ) abline( v=seq(40,80,5), h=outer(1:9,10^(0:2),"*"), col=gray(0.8) ) for( aa in 4:7*10 ) for( ii in 1:4 ) matlines( aa+as.numeric(dimnames(pr.rates)[[1]]), cbind( pr.rates[,paste(aa),ii,"DM/Ins",], pr.rates[,paste(aa),ii,"All" ,] ), type="l", lty=1, lwd=c(3,1,1), col=rep(c("red","limegreen"),each=3) ) @ % \insfig{mort-int}{0.9}{Estimated mortality rates for male diabetes patients with no insulin (lower sets of curves) and insulin (upper curves), with DM onset in age 40, 50, 60 and 70. The red curves are from the models with separate age effects for persons with and without insulin, and a separate effect of insulin duration. The green curves are from the model with common age-effects and only a time-dependent effect of insulin, assuming no effect of insulin duration (the classical time-dependent variable approach). Hence the upper green curve is common for any time of insulin inception.} From figure \ref{fig:mort-int} we see that there is a substantial insulin-duration effect which is not accommodated by the simple model with only one time-dependent variable to describe the insulin effect. Note that the simple model (green curves) for those on insulin does not depend in insulin duration, and hence the mortality curves for those on insulin are just parallel to the mortality curves for those not on insulin, regardless of diabetes duration (or age) at the time of insulin initiation. This is the proportional hazards assumption. Thus the effect of insulin initiation is under-estimated for short duration of insulin and over-estimated for long duration of insulin. This is the major discrepancy between the two models, and illustrates the importance of being able to accommodate different time scales, but there is also a declining overall insulin effect by age which is not accommodated by the proportional hazards approach. Finally, this plot illustrates an important feature in reporting models with multiple timescales; all timescales must be represented in the predicted rates, only reporting the effect of one timescale, conditional on a fixed value of other timescales is misleading since all timescales by definition advance at the same pace. For example, the age-effect for a fixed value of insulin duration really is a misnomer since it does not correspond to any real person's follow-up, but to the mortality of persons in different ages but with the same duration of incuin use. \section{Input to the \texttt{simLexis} function} In order to simulate from the multistate model with the estimated transition rates, and get the follow-up of a hypothetical cohort, we must supply \emph{both} the transition rates and the structure of the model \emph{as well as} the initial cohort status to \texttt{simLexis}. \subsection{The transition object} We first put the models into an object representing the transitions; note this is a list of lists, the latter having \texttt{glm} objects as elements: <>= Tr <- list( "DM" = list( "Ins" = DM.Ins, "Dead" = DM.Dead ), "Ins" = list( "Dead(Ins)" = Ins.Dead ) ) @ % Now we have the description of the rates and of the structure of the model. The \texttt{Tr} object defines the states and models for all transitions between them; the object \verb|Tr$A$B| is the model for the transition intensity from state \texttt{A} to state \texttt{B}. \subsection{The initial cohort} We now define an initial \texttt{Lexis} object of persons with all relevant covariates defined. Note that we use \texttt{subset} to get a \texttt{Lexis} object, this conserves the \texttt{time.scale} and \texttt{time.since} attributes which is needed for the simulation (the usual ``\texttt{[}'' operator does not preserve these attributes when you select columns): <>= str( Si[NULL,1:9] ) ini <- subset(Si,FALSE,select=1:9) str( ini ) ini <- subset(Si,select=1:9)[NULL,] str( ini ) @ % We now have an empty \texttt{Lexis} object with attributes reflecting the timescales in multistate model we want to simulate, so we must now enter some data to represent the persons whose follow-up we want to simulate through the model; we set up an initial dataset with one man and one woman: <>= ini[1:2,"lex.id"] <- 1:2 ini[1:2,"lex.Cst"] <- "DM" ini[1:2,"Per"] <- 1995 ini[1:2,"Age"] <- 60 ini[1:2,"DMdur"] <- 5 ini[1:2,"sex"] <- c("M","F") ini @ % \section{Simulation of the follow-up} Now we simulate 1000 of each of these persons using the estimated model. The \texttt{t.range} argument gives the times range where the integrated intensities (cumulative rates) are evaluated and where linear interpolation is used when simulating transition times. Note that this must be given in the same units as \texttt{lex.dur} in the \texttt{Lexis} object used for fitting the models for the transitions. <>= set.seed( 52381764 ) Nsim <- 1000 system.time( simL <- simLexis( Tr, ini, t.range = 12, N = Nsim ) ) @ % %% Temp %% <<>>= %% source("../../../tmpstore/rbind.Lexis.R") %% source("../R/simLexis.R") %% lls() %% @ %% Temp The result is a \texttt{Lexis} object --- a data frame representing the simulated follow-up of \Sexpr{2*Nsim} persons (\Sexpr{Nsim} identical men and \Sexpr{Nsim} identical women) according to the rates we estimated from the original dataset. <>= summary( simL, by="sex" ) @ % \subsection{Using other models for simulation} \subsubsection{Proportional hazards Poisson model} We fitted a proportional mortality model \texttt{All.Dead} (which fitted worse than the other two), this is a model for \emph{both} the transition from ``DM'' to ``Death'' \emph{and} from ``Ins'' to ``Dead(Ins)'', assuming that they are proportional. But it can easily be used in the simulation set-up, because the state is embedded in the model via the term \texttt{lex.Cst}, which is updated during the simulation. Simulation using this instead just requires that we supply a different transition object: <>= Tr.p <- list( "DM" = list( "Ins" = DM.Ins, "Dead" = All.Dead ), "Ins" = list( "Dead(Ins)" = All.Dead ) ) system.time( simP <- simLexis( Tr.p, ini, t.range = 12, N = Nsim ) ) summary( simP, by="sex" ) @ % \subsubsection{Proportional hazards Cox model} A third possibility would be to replace the two-time scale proportional mortality model by a one-time-scale Cox-model, using diabetes duration as time scale, and age at diagnosis of DM as (fixed) covariate: <>= library( survival ) Cox.Dead <- coxph( Surv( DMdur, DMdur+lex.dur, lex.Xst %in% c("Dead(Ins)","Dead")) ~ Ns( Age-DMdur, knots=ad.kn ) + I(lex.Cst=="Ins") + I(Per-2000) + sex, data = Si ) round( ci.exp( Cox.Dead ), 3 ) round( ci.exp( All.Dead ), 3 ) @ % Note that in order for this model to be usable for simulation, it is necessary that we use the components of the \texttt{Lexis} object to specify the survival. Each record in the data frame \texttt{Si} represents follow up from \texttt{DMdur} to \texttt{DMdur+lex.dur}, so the model is a Cox model with diabetes duration as underlying timescale and age at diagnosis, \texttt{Age-DMdur}, as covariate. Also note that we used \texttt{I(lex.Cst=="Ins")} instead of just \texttt{lex.Cst}, because \texttt{coxph} assigns design matrix columns to all levels of \texttt{lex.Cst}, also those not present in data, which would give \texttt{NA}s among the parameter estimates and \texttt{NA}s as mortality outcomes. We see that the effect of insulin and the other covariates are pretty much the same as in the two-time-scale model. We can simulate from this model too; there is no restrictions on what type of model can be used for different transitions <>= Tr.c <- list( "DM" = list( "Ins" = Tr$DM$Ins, "Dead" = Cox.Dead ), "Ins" = list( "Dead(Ins)" = Cox.Dead ) ) system.time( simC <- simLexis( Tr.c, ini, t.range = 12, N = Nsim ) ) summary( simC, by="sex" ) @ \section{Reporting the simulation results} We can now tabulate the number of persons in each state at a predefined set of times on a given time scale. Note that in order for this to be sensible, the \texttt{from} argument would normally be equal to the starting time for the simulated individuals. <>= system.time( nSt <- nState( subset(simL,sex=="M"), at=seq(0,11,0.2), from=1995, time.scale="Per" ) ) nSt[1:10,] @ % We see that as time goes by, the 5000 men slowly move away from the starting state (\texttt{DM}). Based on this table (\texttt{nSt} is a table) we can now compute the fractions in each state, or, rather more relevant, the cumulative fraction across the states in some specified order, so that a plot of the stacked probabilities can be made, using either the default rather colorful layout, or a more minimalistic version (both in figure \ref{fig:pstate0}): <>= pM <- pState( nSt, perm=c(1,2,4,3) ) head( pM ) par( mfrow=c(1,2), mar=c(3,3,1,1), mgp=c(3,1,0)/1.6 ) plot( pM ) plot( pM, border="black", col="transparent", lwd=3 ) text( rep(as.numeric(rownames(pM)[nrow(pM)-1]),ncol(pM)), pM[nrow(pM),]-diff(c(0,pM[nrow(pM),]))/5, colnames( pM ), adj=1 ) box( col="white", lwd=3 ) box() @ % \insfig{pstate0}{1.0}{Default layout of the \textrm{\tt plot.pState} graph (left), and a version with the state probabilites as lines and annotation of states.} A more useful set-up of the graph would include a more through annotation and sensible choice of colors, as seen in figure \ref{fig:pstatex}: <>= clr <- c("limegreen","orange") # expand with a lighter version of the two chosen colors clx <- c( clr, rgb( t( col2rgb( clr[2:1] )*2 + rep(255,3) ) / 3, max=255 ) ) par( mfrow=c(1,2), las=1, mar=c(3,3,4,2), mgp=c(3,1,0)/1.6 ) # Men plot( pM, col=clx ) lines( as.numeric(rownames(pM)), pM[,2], lwd=3 ) mtext( "60 year old male, diagnosed 1990, aged 55", side=3, line=2.5, adj=0, col=gray(0.6) ) mtext( "Survival curve", side=3, line=1.5, adj=0 ) mtext( "DM, no insulin DM, Insulin", side=3, line=0.5, adj=0, col=clr[1] ) mtext( "DM, no insulin", side=3, line=0.5, adj=0, col=clr[2] ) axis( side=4 ) axis( side=4, at=1:19/20, labels=FALSE ) axis( side=4, at=1:99/100, labels=FALSE, tcl=-0.3 ) # Women pF <- pState( nState( subset(simL,sex=="F"), at=seq(0,11,0.2), from=1995, time.scale="Per" ), perm=c(1,2,4,3) ) plot( pF, col=clx ) lines( as.numeric(rownames(pF)), pF[,2], lwd=3 ) mtext( "60 year old female, diagnosed 1990, aged 55", side=3, line=2.5, adj=0, col=gray(0.6) ) mtext( "Survival curve", side=3, line=1.5, adj=0 ) mtext( "DM, no insulin DM, Insulin", side=3, line=0.5, adj=0, col=clr[1] ) mtext( "DM, no insulin", side=3, line=0.5, adj=0, col=clr[2] ) axis( side=4 ) axis( side=4, at=1:19/20, labels=FALSE ) axis( side=4, at=1:99/100, labels=FALSE, tcl=-0.3 ) @ % \insfig{pstatex}{1.0}{\textrm{\tt plot.pState} graphs where persons ever on insulin are given in orange and persons never on insulin in green, and the overall survival (dead over the line) as a black line.} If we instead wanted to show the results on the age-scale, we would use age as timescale when constructing the probabilities; otherwise the code is pretty much the same as before (Figure \ref{fig:pstatey}): <>= par( mfrow=c(1,2), las=1, mar=c(3,3,4,2), mgp=c(3,1,0)/1.6 ) # Men pM <- pState( nState( subset(simL,sex=="M"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) plot( pM, col=clx, xlab="Age" ) lines( as.numeric(rownames(pM)), pM[,2], lwd=3 ) mtext( "60 year old male, diagnosed 1990, aged 55", side=3, line=2.5, adj=0, col=gray(0.6) ) mtext( "Survival curve", side=3, line=1.5, adj=0 ) mtext( "DM, no insulin DM, Insulin", side=3, line=0.5, adj=0, col=clr[1] ) mtext( "DM, no insulin", side=3, line=0.5, adj=0, col=clr[2] ) axis( side=4 ) axis( side=4, at=1:19/20, labels=FALSE ) axis( side=4, at=1:19/20, labels=FALSE, tcl=-0.4 ) axis( side=4, at=1:99/100, labels=FALSE, tcl=-0.3 ) # Women pF <- pState( nState( subset(simL,sex=="F"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) plot( pF, col=clx, xlab="Age" ) lines( as.numeric(rownames(pF)), pF[,2], lwd=3 ) mtext( "60 year old female, diagnosed 1990, aged 55", side=3, line=2.5, adj=0, col=gray(0.6) ) mtext( "Survival curve", side=3, line=1.5, adj=0 ) mtext( "DM, no insulin DM, Insulin", side=3, line=0.5, adj=0, col=clr[1] ) mtext( "DM, no insulin", side=3, line=0.5, adj=0, col=clr[2] ) axis( side=4 ) axis( side=4, at=1:9/10, labels=FALSE ) axis( side=4, at=1:19/20, labels=FALSE, tcl=-0.4 ) axis( side=4, at=1:99/100, labels=FALSE, tcl=-0.3 ) @ % Note the several statements with \texttt{axis(side=4,...}; they are nesessary to get the fine tick-marks in the right hand side of the plots that you will need in order to read off the probabilities at 2006 (or 71 years). \insfig{pstatey}{1.0}{\textrm{\tt plot.pState} graphs where persons ever on insulin are given in orange and persons never on insulin in green, and the overall survival (dead over the line) as a black line.} \subsection{Comparing predictions from different models} We have actually fitted different models for the transitions, and we have simulated Lexis objects from all three approaches, so we can plot these predictions on top of each other: <>= PrM <- pState( nState( subset(simP,sex=="M"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) PrF <- pState( nState( subset(simP,sex=="F"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) CoxM <- pState( nState( subset(simC,sex=="M"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) CoxF <- pState( nState( subset(simC,sex=="F"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) par( mfrow=c(1,2), mar=c(3,3,1,1), mgp=c(3,1,0)/1.6 ) plot( pM, border="black", col="transparent", lwd=3 ) lines( PrM, border="blue" , col="transparent", lwd=3 ) lines( CoxM, border="red" , col="transparent", lwd=3 ) text( 60.5, 0.05, "M" ) box( lwd=3 ) plot( pF, border="black", col="transparent", lwd=3 ) lines( PrF, border="blue" , col="transparent", lwd=3 ) lines( CoxF, border="red" , col="transparent", lwd=3 ) text( 60.5, 0.05, "F" ) box( lwd=3 ) @ % \insfig{comp-0}{1.0}{Comparison of the simulated state occupancy probabilities using separate Poisson models for the mortality rates with and without insulin (black) and using proportional hazards Poisson models (blue) and Cox-models with diabetes duration as timescale and age at diabetes diagnosis as covariate (red).} From figure \ref{fig:comp-0} it is clear that the two proportional hazards models (blue and red curves) produce pretty much the same estimates of the state occupancy probabilites over time, but also that they relative to the model with separately estimated transition intensities overestimates the probability of being alive without insulin and underestimates the probabilities of being dead without insulin. However both the overall survival, and the fraction of persons on insulin are quite well in agreement with the more elaborate model. Thus the proportional hazards models overestimate the relative mortality of the insulin treated diabetes patients relative to the non-insulin treated. Interestingly, we also see a bump in th estimated probabilities from the Cox-model based model, but this is entirely an artifact that comes from the estimation method for the baseline hazard of the Cox-model that lets the (cumulative) hazard have large jumps at event times where the risk set is small. So also here it shows up that an assumption of continuous underlying hazards leads to more credible estimates. \chapter{Simulation of transitions in multistate models} \section{Theory} Suppose that the rate functions for the transitions out of the current state to, say, 3 different states are $\lambda_1$, $\lambda_2$ and $\lambda_3$, and the corresponding cumulative rates are $\Lambda_1$, $\Lambda_2$ and $\Lambda_3$, and we want to simulate an exit time and an exit state (that is either 1, 2 or 3). This can be done in two slightly different ways: \begin{enumerate} \item First time, then state: \begin{enumerate} \item Compute the survival function, $S(t) = \exp\bigl(-\Lambda_1(t)-\Lambda_2(t)-\Lambda_3(t)\bigr)$ \item Simulate a random U(0,1) variate, $u$, say. \item The simulated exit time is then the solution $t_u$ to the equation $S(t_u) = u \quad \Leftrightarrow \quad \sum_j\Lambda_j(t_u) = -\log(u)$. \item A simulated transition at $t_u$ is then found by simulating a random draw from the multinomial distribution with probabilities $p_i=\lambda_i(t_u) / \sum_j\lambda_j(t_u)$. \end{enumerate} \item Separate cumulative incidences: \begin{enumerate} \item Simulate 3 independent U(0,1) random variates $u_1$, $u_2$ and $u_3$. \item Solve the equations $\Lambda_i(t_i)=-\log(u_i), i=1,2,3$ and get $(t_1,t_2,t_3)$. \item The simulated survival time is then $\min(t_1,t_2,t_3)$, and the simulated transition is to the state corresponding to this, that is $k \in \{1,2,3\}$, where $t_k=\min(t_1,t_2,t_3)$ \end{enumerate} \end{enumerate} The intuitive argument is that with three possible transition there are 3 independent processes running, but only the first transition is observed. The latter approach is used in the implementation in \texttt{simLexis}. The formal argument for the equality of the two approaches goes as follows: \begin{enumerate} \item Equality of the transition times: \begin{enumerate} \item In the first approach we simulate from a distribution with cumulative rate $\Lambda_1(t)+\Lambda_2(t)+\Lambda_3(t)$, hence from a distribution with survival function: \begin{align*} S(t) & = \exp\bigl(-(\Lambda_1(t)+\Lambda_2(t)+\Lambda_3(t))\bigr) \\ & = \exp\bigl(-\Lambda_1(t)\bigr)\times \exp\bigl(-\Lambda_2(t)\bigr)\times \exp\bigl(-\Lambda_3(t)\bigr) \end{align*} \item In the second approach we choose the smallest of three independent survival times, with survival functions $\exp(-\Lambda_i), i=1,2,3$. Now, the survival function for the minimum of three independent survival times is: \begin{align*} S_\text{min}(t) & = \pmat{\min(t_1,t_2,t_3)>t} \\ & = \pmat{t_1>t} \times \pmat{t_2>t} \times \pmat{t_3>t} \\ & = \exp\bigl(-\Lambda_1(t)\bigr)\times \exp\bigl(-\Lambda_2(t)\bigr)\times \exp\bigl(-\Lambda_3(t)\bigr) \end{align*} which is the same survival function as derived above. \end{enumerate} \item Type of transition: \begin{enumerate} \item In the first instance the probability of a transition to state $i$, conditional on the transition time being $t$, is as known from standard probability theory: $\lambda_i(t)/\bigl(\lambda_1(t)+\lambda_2(t)+\lambda_3(t)\bigr)$. \item In the second approach we choose the transition corresponding to the the smallest of the transition times. So when we condition on the event that a transition takes place at time $t$, we have to show that the conditional probability that the smallest of the three simulated transition times was actually the $i$th, is as above. But conditional on \emph{survival} till $t$, the probabilities that events of type $1,2,3$ takes place in the interval $(t,t+\dif t)$ are $\lambda_1(t)\dif t$, $\lambda_2(t)\dif t$ and $\lambda_1(t)\dif t$, respectively (assuming that the probability of more than one event in the interval of length $\dif t$ is 0). Hence the conditional probabilities \emph{given a transition time} in $(t,t+\dif t)$ is: \[ \frac{\lambda_i(t)\dif t}{\lambda_1(t)\dif t+\lambda_2(t)\dif t+\lambda_3(t)\dif t}= \frac{\lambda_i(t)}{\lambda_1(t)+\lambda_2(t)+\lambda_3(t)} \] --- exactly as above. \end{enumerate} \end{enumerate} \section{Components of \texttt{simLexis}} This section explains the actually existing code for \texttt{simLexis}, as it is in the current version of \texttt{Epi}. <>= source( "../R/simLexis.R", keep.source=TRUE ) @ % The function \texttt{simLexis} takes a \texttt{Lexis} object as input. This defines the initial state(s) and times of the start for a number of persons. Since the purpose is to simulate a history through the estimated multistate model, the input values of the outcome variables \texttt{lex.Xst} and \texttt{lex.dur} are ignored --- the aim is to simulate values for them. Note however that the attribute \texttt{time.since} must be present in the object. This is used for initializing timescales defined as time since entry into a particular state, it is a character vector of the same length as the \texttt{time.scales} attribute, with value equal to a state name if the corresponding time scale is defined as time since entry into that state. In this example the 4th timescale is time since entry into the ``Ins'' state, and hence: <<>>= cbind( attr( ini, "time.scale" ), attr( ini, "time.since" ) ) @ % \texttt{Lexis} objects will have this attribute set for time scales created using \texttt{cutLexis}. The other necessary argument is a transition object \texttt{Tr}, which is a list of lists. The elements of the lists should be \texttt{glm} objects derived by fitting Poisson models to a \texttt{Lexis} object representing follow-up data in a multistate model. It is assumed (but not checked) that timescales enter in the model via the timescales of the \texttt{Lexis} object. Formally, there are no assumptions about how \texttt{lex.dur} enters in the model. Optional arguments are \texttt{t.range}, \texttt{n.int} or \texttt{time.pts}, specifying the times after entry at which the cumulative rates will be computed (the maximum of which will be taken as the censoring time), and \texttt{N} a scalar or numerical vector of the number of persons with a given initial state each record of the \texttt{init} object should represent. The central part of the functions uses a \texttt{do.call} / \texttt{lapply} / \texttt{split} construction to do simulations for different initial states. This is the construction in the middle that calls \texttt{simX}. \texttt{simLexis} also calls \texttt{get.next} which is further detailed below. <<>>= simLexis @ % \subsection{\texttt{simX}} \texttt{simX} is called by \texttt{simLexis} and simulates transition-times and -types for a set of patients assumed to be in the same state. It is called from \texttt{simLexis} with a data frame as argument, uses the state in \texttt{lex.Cst} to select the relevant component of \texttt{Tr} and compute predicted cumulative intensities for all states reachable from this state. Note that it is here the switch between \texttt{glm}, \texttt{coxph} and objects of class \texttt{function} is made. The dataset on which this prediction is done has \texttt{length(time.pts)} rows per person. <<>>= simX @ % As we see, \texttt{simX} calls \texttt{sim1} which simulates the transition for one person. \subsection{\texttt{sim1}} The predicted cumulative intensities are fed, person by person, to \texttt{sim1} --- again via a \texttt{do.call} / \texttt{lapply} / \texttt{split} construction --- and the resulting time and state is appended to the \texttt{nd} data frame. This way we have simulated \emph{one} transition (time and state) for each person: <<>>= sim1 @ % The \texttt{sim1} function uses \texttt{lint} to do linear interpolation. \subsection{\texttt{lint}} We do not use \texttt{approx} to do the linear interpolation, because this function does not do the right thing if the cumulative incidences (\texttt{ci}) are constant across a number of times. Therefore we have a custom made linear interpolator that does the interpolation exploiting the fact the the \texttt{ci} is non-decreasing and \texttt{tt} is strictly monotonously increasing: <<>>= lint @ \subsection{\texttt{get.next}} We must repeat the simulation operation on those that have a simulated entry to a transient state, and also make sure that any time scales defined as time since entry to one of these states be initialized to 0 before a call to \texttt{simX} is made for these persons. This accomplished by the function \texttt{get.next}: <<>>= get.next @ \subsection{\texttt{chop.lex}} The operation so far has censored individuals \texttt{max(time.pts)} after \emph{each} new entry to a transient state. In order to groom the output data we use \texttt{chop.lex} to censor all persons at the same designated time after \emph{initial} entry. <<>>= chop.lex @ \section{Probabilities from simulated \texttt{Lexis} objects} Once we have simulated a Lexis object we will of course want to use it for estimating probabilities, so basically we will want to enumerate the number of persons in each state at a pre-specified set of time points. \subsection{\texttt{nState}} Since we are dealing with multistate model with potentially multiple time scales, it is necessary to define the timescale (\texttt{time.scale}), the starting point on this timescale (\texttt{from}) and the points after this where we compute the number of occupants in each state, (\texttt{at}). <<>>= nState @ % \subsection{\texttt{pState}, \texttt{plot.pState} and \texttt{lines.pState}} In order to plot probabilities of state-occupancy it is useful to compute cumulative probabilities across states in any given order; this is done by the function \texttt{pState}, which returns a matrix of class \texttt{pState}: <<>>= pState @ % There is also a \texttt{plot} and \texttt{lines} method for the resulting \texttt{pState} objects: <<>>= plot.pState lines.pState @ % \bibliographystyle{plain} \begin{thebibliography}{1} \bibitem{Carstensen.2011a} B.~Carstensen and M.~Plummer. \newblock Using {L}exis objects for multi-state models in {R}. \newblock {\em Journal of Statistical Software}, 38(6):1--18, 1 2011. \bibitem{Iacobelli.2013} S.~Iacobelli and B.~Carstensen. \newblock {{M}ultiple time scales in multi-state models}. \newblock {\em Stat Med}, 32(30):5315--5327, Dec 2013. \bibitem{Plummer.2011} M.~Plummer and B.~Carstensen. \newblock Lexis: An {R} class for epidemiological studies with long-term follow-up. \newblock {\em Journal of Statistical Software}, 38(5):1--12, 1 2011. \end{thebibliography} \addcontentsline{toc}{chapter}{References} \end{document} Epi/inst/doc/yll.rnw0000644000175100001440000006155513074161727014103 0ustar hornikusers\SweaveOpts{results=verbatim,keep.source=TRUE,include=FALSE,eps=FALSE} %\VignetteIndexEntry{Years of life lost: simLexis} \documentclass[a4paper,twoside,12pt]{report} % ---------------------------------------------------------------------- % General information for the title page and the page headings \newcommand{\Title}{Years of Life Lost (YLL) to disease\\Diabetes in DK as example} \newcommand{\Tit}{YLL} \newcommand{\Version}{Version 1.2} \newcommand{\Dates}{February 2017} \newcommand{\Where}{SDC} \newcommand{\Homepage}{\url{http://bendixcarstensen.com/Epi}} \newcommand{\Faculty}{\begin{tabular}{rl} Bendix Carstensen & Steno Diabetes Center, Gentofte, Denmark\\ & {\small \& Department of Biostatistics, University of Copenhagen} \\ & \texttt{b@bxc.dk}\\ & \url{http://BendixCarstensen.com} \\[1em] \end{tabular}} % Packages \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage[english]{babel} \usepackage[font=it,labelfont=normalfont]{caption} \usepackage[colorlinks,urlcolor=blue,linkcolor=red,,citecolor=Maroon]{hyperref} \usepackage[ae,hyper]{Rd} \usepackage[dvipsnames]{xcolor} \usepackage[super]{nth} \usepackage[noae]{Sweave} \usepackage{makeidx,floatflt,amsmath,amsfonts,amsbsy,enumitem,dcolumn,needspace} \usepackage{ifthen,calc,eso-pic,everyshi} \usepackage{booktabs,longtable,rotating,graphicx,subfig} \usepackage{pdfpages,verbatim,fancyhdr,datetime,% afterpage} \usepackage[abspath]{currfile} % \usepackage{times} \renewcommand{\textfraction}{0.0} \renewcommand{\topfraction}{1.0} \renewcommand{\bottomfraction}{1.0} \renewcommand{\floatpagefraction}{0.9} % \usepackage{mslapa} \definecolor{blaa}{RGB}{99,99,255} \DeclareGraphicsExtensions{.png,.pdf,.jpg} % Make the Sweave output nicer \DefineVerbatimEnvironment{Sinput}{Verbatim}{fontsize=\small,fontshape=sl,formatcom=\color{Blue}} \DefineVerbatimEnvironment{Soutput}{Verbatim}{fontsize=\small,formatcom=\color{Maroon},xleftmargin=0em} \DefineVerbatimEnvironment{Scode}{Verbatim}{fontsize=\small} \fvset{listparameters={\setlength{\topsep}{-0.1ex}}} \renewenvironment{Schunk}% {\renewcommand{\baselinestretch}{0.85} \vspace{\topsep}}% {\renewcommand{\baselinestretch}{1.00} \vspace{\topsep}} \providecommand{\ptxt}[1]{\Pp\left\{\text{#1}\right\}} \providecommand{\dif}{{\,\mathrm d}} \DeclareMathOperator{\YLL}{YLL} \DeclareMathOperator{\Pp}{P} %---------------------------------------------------------------------- % Set up layout of pages \oddsidemargin 1mm \evensidemargin 1mm \topmargin -10mm \headheight 8mm \headsep 5mm \textheight 240mm \textwidth 165mm %\footheight 5mm \footskip 15mm \renewcommand{\topfraction}{0.9} \renewcommand{\bottomfraction}{0.9} \renewcommand{\textfraction}{0.1} \renewcommand{\floatpagefraction}{0.9} \renewcommand{\headrulewidth}{0.1pt} \setcounter{secnumdepth}{4} % \setcounter{tocdepth}{2} %---------------------------------------------------------------------- % How to insert a figure in a .rnw file \newcommand{\rwpre}{./graph/gr} \newcommand{\insfig}[3]{ \begin{figure}[h] \centering \includegraphics[width=#2\textwidth]{\rwpre-#1} \caption{#3} \label{fig:#1} % \afterpage{\clearpage} \end{figure}} %---------------------------------------------------------------------- % Here is the document starting with the titlepage \begin{document} %---------------------------------------------------------------------- % The title page \setcounter{page}{1} \pagenumbering{roman} \pagestyle{plain} \thispagestyle{empty} % \vspace*{0.05\textheight} \flushright % The blank below here is necessary in order not to muck up the % linespacing in title if it has more than 2 lines {\Huge \bfseries \Title }\ \\[-1.5ex] \noindent\textcolor{blaa}{\rule[-1ex]{\textwidth}{5pt}}\\[2.5ex] \large \Where \\ \Dates \\ \Homepage \\ \Version \\[1em] \normalsize Compiled \today,\ \currenttime\\ from: \texttt{\currfileabspath}\\[1em] % \input{wordcount} \normalsize \vfill \Faculty % End of titlepage % \newpage %---------------------------------------------------------------------- % Table of contents \tableofcontents %---------------------------------------------------------------------- % General text layout \raggedright \parindent 1em \parskip 0ex \cleardoublepage %---------------------------------------------------------------------- % General page style \pagenumbering{arabic} \setcounter{page}{1} \pagestyle{fancy} \renewcommand{\chaptermark}[1]{\markboth{\textsl{#1}}{}} \renewcommand{\sectionmark}[1]{\markright{\thesection\ \textsl{#1}}{}} \fancyhead[EL]{\bf \thepage \quad \rm \leftmark} \fancyhead[ER,OL]{\sl \Tit} \fancyhead[OR]{\rm \rightmark \quad \bf \thepage} \fancyfoot{} <>= options( width=90, SweaveHooks=list( fig=function() par(mar=c(3,3,1,1),mgp=c(3,1,0)/1.6,las=1,bty="n") ) ) @ % \renewcommand{\rwpre}{./yll} %---------------------------------------------------------------------- % Here comes the substance part \chapter{Theory and technicalities} This vignette for the \texttt{Epi} package describes the probabilistic/demographic background for and technical implementation of the \texttt{erl} and \texttt{yll} functions that computes the expected residual life time and years of life lost in an illness-death model. \section{Years of life lost (YLL)} \ldots to diabetes or any other disease for that matter. The general concept in calculation of ``years lost to\ldots'' is the comparison of the expected lifetime between two groups of persons; one with and one without disease (in this example DM). The expected lifetime is the area under the survival curve, so basically the exercise requires that two survival curves that are deemed relevant be available. The years of life lost is therefore just the area between the survival curves for those ``Well'', $S_W(t)$, and for those ``Diseased'', $S_D(t)$: \[ \YLL = \int_0^\infty S_W(t) - S_D(t) \dif t \] The time $t$ could of course be age, but it could also be ``time after age 50'' and the survival curves compared would then be survival curves \emph{conditional} on survival till age 50, and the YLL would be the years of life lost for a 50-year old person with diabetes. If we are referring to the expected lifetime we will more precisely use the label expected residual lifetime, ERL. \section{Constructing the survival curves} YLL can be computed in two different ways, depending on the way the survival curve and hence the expected lifetime of a person \emph{without} diabetes is computed: \begin{itemize} \item Assume that the ``Well'' persons are \emph{immune} to disease --- using only the non-DM mortality rates throughout for calculation of expected life time. \item Assume that the ``Well'' persons \emph{can} acquire the disease and thereby see an increased mortality, thus involving all three rates shown in figure \ref{fig:states}. \end{itemize} The former gives a higher YLL because the comparison is to persons assumed immune to DM (and yet with the same mortality as non-immune prior to diagnosis), the latter gives a more realistic picture of the comparison of group of persons with and without diabetes at a given age that can be interpreted in the real world. The differences can be illustrated by figure \ref{fig:states}; the immune approach corresponds to an assumption of $\lambda(t)=0$ in the calculation of the survival curve for a person in the ``Well'' state. Calculation of the survival of a diseased person already in the ``DM'' state is unaffected by assumptions about $\lambda$. <>= library( Epi ) TM <- matrix(NA,4,4) rownames(TM) <- colnames(TM) <- c("Well","DM","Dead","Dead(DM)") TM[1,2:3] <- TM[2,4] <- 1 zz <- boxes( TM, boxpos=list(x=c(20,80,20,80),y=c(80,80,20,20)), wm=1.5, hm=4 ) @ <>= zz$Arrowtext <- c( expression(lambda), expression(mu[W]), expression(mu[D][M]) ) boxes( zz ) @ % \insfig{states}{0.7}{Illness-death model describing diabetes incidence and -mortality.} \subsection{Total mortality --- a shortcut?} A practical crude shortcut could be to compare the ERL in the diabetic population to the ERL for the \emph{entire} population (that is use the total mortality ignoring diabetes status). Note however that this approach also counts the mortality of persons that acquired the disease earlier, thus making the comparison population on average more ill than the population we aim at, namely those well at a given time, which only then become more gradually ill. How large these effects are can however be empirically explored, as we shall do later. \subsection{Disease duration} In the exposition above there is no explicit provision for the effect of disease duration, but if we were able to devise mortality rates for any combination of age and duration, this could be taken into account. There are however severe limitations in this as we in principle would want to have duration effects as long as the age-effects --- in principle for all $(a,d)$ where $d\leq A$, where $A$ is the age at which we condition. So even if we were only to compute ERL from age, say, 40 we would still need duration effects up to 60 years (namely to age 100). The incorporation of duration effects is in principle trivial from a computational point of view, but we would be forced to entertain models predicting duration effects way beyond what is actually observed disease duration in any practical case. \subsection{Computing integrals} The practical calculations of survival curves, ERL and YLL involves calculation of (cumulative) integrals of rates and functions of these as we shall see below. This is easy if we have a closed form expression of the function, so its value may be computed at any time point --- this will be the case if we model rates by smooth parametric functions. Computing the (cumulative) integral of a function is done as follows: \begin{itemize} \item Compute the value of the function (mortality rate for example) at the midpoints of a sequence of narrow equidistant intervals --- for example one- or three month intervals of age, say. \item Take the cumulative sum of these values multiplied by the interval length --- this will be a very close approximation to the cumulative integral evaluated at the end of each interval. \item If the intervals are really small (like 1/100 year), the distinction between the value at the middle and at the end of each interval becomes irrelevant. \end{itemize} Note that in the above it is assumed that the rates are given in units corresponding to the interval length --- or more precisely, as the cumulative rates over the interval. \section{Survival functions in the illness-death model} The survival functions for persons in the ``Well'' state can be computed under two fundamentally different scenarios, depending on whether persons in the ``Well'' state are assumed to be immune to the disease ($\lambda(a)=0$) or not. \subsection{Immune approach} In this case both survival functions for person in the two states are the usual simple transformation of the cumulative mortality rates: \[ S_W(a) = \exp\left(-\int_0^a\!\!\mu_W(u) \dif u \right), \qquad S_D(a) = \exp\left(-\int_0^a\!\!\mu_D(u) \dif u \right) \] \subsubsection{Conditional survival functions} If we want the \emph{conditional} survival functions given survival to age $A$, say, they are just: \[ S_W(a|A) = S_W(a)/S_W(A), \qquad S_D(a|A) = S_D(a)/S_D(A) \] \subsection{Non-immune approach} For a diseased person, the survival function in this states is the same as above, but the survival function for a person without disease (at age 0) is (see figure \ref{fig:states}): \[ S(a) = \ptxt{Well}\!(a) + \ptxt{DM}\!(a) \] In the appendix of the paper \cite{Carstensen.2008c} is an indication of how to compute the probability of being in any of the four states shown in figure \ref{fig:states}, which I shall repeat here: In terms of the rates, the probability of being in the ``Well'' box is simply the probability of escaping both death (at a rate of $\mu_W(a)$) and diabetes (at a rate of $\lambda(a)$): \[ \ptxt{Well}(a) = \exp\left(\!-\int_0^a\!\!\mu_W(u)+\lambda(u) \right) \dif u \] The probability of being alive with diabetes at age $a$, is computed given that diabetes occurred at age $s$ ($s>= data( DMepi ) @ % The dataset \texttt{DMepi} contains diabetes events, deaths and person-years for persons without diabetes and deaths and person-years for persons with diabetes: <<>>= str( DMepi ) head( DMepi ) @ % For each combination of sex, age, period and date of birth in 1 year age groups, we have the person-years in the ``Well'' (\texttt{Y.nD}) and the ``DM'' (\texttt{Y.DM}) states, as well as the number of deaths from these (\texttt{D.nD}, \texttt{D.DM}) and the number of incident diabetes cases from the ``Well'' state (\texttt{X}). In order to compute the years of life lost to diabetes and how this has changed over time, we fit models for the mortality and incidence of both groups (and of course, separately for men and women). The models we use will be age-period-cohort models \cite{Carstensen.2007a} providing estimated mortality rates for ages 0--99 and dates 1.1.1996--1.1.2016. First we transform the age and period variables to reflect the mean age and period in each of the Lexis triangles. We also compute the total number of deaths and amount of risk time, as we are going to model the total mortality as well. Finally we restrict the dataset to ages over 30 only: <<>>= DMepi <- transform( subset( DMepi, A>30 ), D.T = D.nD + D.DM, Y.T = Y.nD + Y.DM ) head(DMepi) @ % With the correct age and period coding in the Lexis triangles, we fit models for the mortalities and incidences. Note that we for comparative purposes also fit a model for the \emph{total} mortality, ignoring the <<>>= # Knots used in all models ( a.kn <- seq(40,95,,6) ) ( p.kn <- seq(1997,2015,,4) ) ( c.kn <- seq(1910,1976,,6) ) # Check the number of events between knots ae <- xtabs( cbind(D.nD,D.DM,X) ~ cut(A,c(30,a.kn,Inf)) + sex, data=DMepi ) ftable( addmargins(ae,1), col.vars=3:2 ) pe <- xtabs( cbind(D.nD,D.DM,X) ~ cut(P,c(1990,p.kn,Inf)) + sex, data=DMepi ) ftable( addmargins(pe,1), col.vars=3:2 ) ce <- xtabs( cbind(D.nD,D.DM,X) ~ cut(P-A,c(-Inf,c.kn,Inf)) + sex, data=DMepi ) ftable( addmargins(ce,1), col.vars=3:2 ) # Fit an APC-model for all transitions, seperately for men and women mW.m <- glm( D.nD ~ -1 + Ns(A ,knots=a.kn,int=TRUE) + Ns( P,knots=p.kn,ref=2005) + Ns(P-A,knots=c.kn,ref=1950), offset = log(Y.nD), family = poisson, data = subset( DMepi, sex=="M" ) ) mD.m <- update( mW.m, D.DM ~ . , offset=log(Y.DM) ) mT.m <- update( mW.m, D.T ~ . , offset=log(Y.T ) ) lW.m <- update( mW.m, X ~ . ) # Model for women mW.f <- update( mW.m, data = subset( DMepi, sex=="F" ) ) mD.f <- update( mD.m, data = subset( DMepi, sex=="F" ) ) mT.f <- update( mT.m, data = subset( DMepi, sex=="F" ) ) lW.f <- update( lW.m, data = subset( DMepi, sex=="F" ) ) @ % \section{Residual life time and years lost to DM} We now collect the estimated years of life lost classified by method (immune assumption or not), sex, age and calendar time: <<>>= a.ref <- 30:90 p.ref <- 1996:2016 aYLL <- NArray( list( type = c("Imm","Tot","Sus"), sex = levels( DMepi$sex ), age = a.ref, date = p.ref ) ) str( aYLL ) system.time( for( ip in p.ref ) { nd <- data.frame( A = seq(30,90,0.2)+0.1, P = ip, Y.nD = 1, Y.DM = 1, Y.T = 1 ) muW.m <- ci.pred( mW.m, nd )[,1] muD.m <- ci.pred( mD.m, nd )[,1] muT.m <- ci.pred( mT.m, nd )[,1] lam.m <- ci.pred( lW.m, nd )[,1] muW.f <- ci.pred( mW.f, nd )[,1] muD.f <- ci.pred( mD.f, nd )[,1] muT.f <- ci.pred( mT.f, nd )[,1] lam.f <- ci.pred( lW.f, nd )[,1] aYLL["Imm","M",,paste(ip)] <- yll( int=0.2, muW.m, muD.m, lam=NULL, A=a.ref, age.in=30, note=FALSE )[-1] aYLL["Imm","F",,paste(ip)] <- yll( int=0.2, muW.f, muD.f, lam=NULL, A=a.ref, age.in=30, note=FALSE )[-1] aYLL["Tot","M",,paste(ip)] <- yll( int=0.2, muT.m, muD.m, lam=NULL, A=a.ref, age.in=30, note=FALSE )[-1] aYLL["Tot","F",,paste(ip)] <- yll( int=0.2, muT.f, muD.f, lam=NULL, A=a.ref, age.in=30, note=FALSE )[-1] aYLL["Sus","M",,paste(ip)] <- yll( int=0.2, muW.m, muD.m, lam=lam.m, A=a.ref, age.in=30, note=FALSE )[-1] aYLL["Sus","F",,paste(ip)] <- yll( int=0.2, muW.f, muD.f, lam=lam.f, A=a.ref, age.in=30, note=FALSE )[-1] } ) round( ftable( aYLL[,,seq(1,61,10),], col.vars=c(3,2) ), 1 ) @ % We now have the relevant points for the graph showing YLL to diabetes for men and women by age, and calendar year, both under the immunity and susceptibility models for the calculation of YLL. <>= plyll <- function(wh){ par( mfrow=c(1,2), mar=c(3,3,1,1), mgp=c(3,1,0)/1.6, bty="n", las=1 ) matplot( a.ref, aYLL[wh,"M",,], type="l", lty=1, col="blue", lwd=1:2, ylim=c(0,12), xlab="Age", ylab="Years lost to DM", yaxs="i" ) abline(v=50,h=1:10,col=gray(0.7)) text( 90, 11, "Men", col="blue", adj=1 ) text( 40, aYLL[wh,"M","40","1996"], "1996", adj=c(0,0), col="blue" ) text( 43, aYLL[wh,"M","44","2016"], "2016", adj=c(1,1), col="blue" ) matplot( a.ref, aYLL[wh,"F",,], type="l", lty=1, col="red", lwd=1:2, ylim=c(0,12), xlab="Age", ylab="Years lost to DM", yaxs="i" ) abline(v=50,h=1:10,col=gray(0.7)) text( 90, 11, "Women", col="red", adj=1 ) text( 40, aYLL[wh,"F","40","1996"], "1996", adj=c(0,0), col="red" ) text( 43, aYLL[wh,"F","44","2016"], "2016", adj=c(1,1), col="red" ) } plyll("Imm") @ % <>= plyll("Tot") @ % <>= plyll("Sus") @ % \begin{figure}[h] \centering \includegraphics[width=\textwidth]{yll-imm} \caption{Years of life lost to DM: the difference in expected residual life time at different ages between persons with and without diabetes, assuming the persons without diabetes at a given age remain free from diabetes (immunity assumption --- not reasonable). The lines refer to date of evaluation; the top lines refer to 1.1.1996 the bottom ones to 1.1.2016. Blue curves are men, red women.} \label{fig:imm} \end{figure} \begin{figure}[h] \centering \includegraphics[width=\textwidth]{yll-sus} \caption{Years of life lost to DM: the difference in expected residual life time at different ages between persons with and without diabetes, allowing the persons without diabetes at a given to contract diabetes and thus be subject to higher mortality. The lines refer to date of evaluation; the top lines refer to 1.1.1996 the bottom ones to 1.1.2016. Blue curves are men, red women.} \label{fig:sus} \end{figure} \begin{figure}[h] \centering \includegraphics[width=\textwidth]{yll-tot} \caption{Years of life lost to DM: the difference in expected residual life time at different ages between persons with and without diabetes. Allowance for susceptibility is approximated by using the total population mortality instead of non-DM mortality. The lines refer to date of evaluation; the top lines refer to 1.1.1996 the bottom ones to 1.1.2016. Blue curves are men, red women.} \label{fig:tot} \end{figure} From figure \ref{fig:sus} we see that for men aged 50 the years lost to diabetes has decreased from a bit over 8 to a bit less than 6 years, and for women from 8.5 to 5 years; so a greater improvement for women. \chapter{Practical implementation} We have devised functions that wraps these formulae up for practical use. \section{Function definitions} <>= source( "../R/erl.R", keep.source=TRUE ) @ When using the functions it is assumed that the functions $\mu_W$, $\mu_D$ and $\lambda$ are given as vectors corresponding to equidistantly (usually tightly) spaced ages from 0 to $K$ where K is the age where everyone can safely be assumed dead. \texttt{surv1} is a simple function that computes the survival function from a vector of mortality rates, and optionally the conditional survival given being alive at prespecified ages: <<>>= surv1 @ % \texttt{erl1} basically just expands the result of \texttt{surv1} with a column of expected residual life times: <<>>= erl1 @ % We also define a function, \texttt{surv2}, that computes the survival function for a non-diseased person that may become diseased with rate \texttt{lam} and after that die at a rate of \texttt{muD} (corresponding to the formulae above). This is the sane way of handling years of life lost to a particular illness: <<>>= surv2 @ % Finally we devised a function using these to compute the expected residual lifetime at select ages: <<>>= erl @ % \ldots and a wrapper for this if we only want the years of life lost returned: <<>>= yll @ % \bibliographystyle{plain} \begin{thebibliography}{1} \bibitem{Carstensen.2007a} B~Carstensen. \newblock Age-{P}eriod-{C}ohort models for the {L}exis diagram. \newblock {\em Statistics in Medicine}, 26(15):3018--3045, July 2007. \bibitem{Carstensen.2008c} B.~Carstensen, J.K. Kristensen, P.~Ottosen, and K.~Borch-Johnsen. \newblock The {D}anish {N}ational {D}iabetes {R}egister: {T}rends in incidence, prevalence and mortality. \newblock {\em Diabetologia}, 51:2187--2196, 2008. \end{thebibliography} \addcontentsline{toc}{chapter}{References} \end{document} Epi/src/0000755000175100001440000000000013142414371011574 5ustar hornikusersEpi/src/chinv2.c0000644000175100001440000000301713142414371013132 0ustar hornikusers/* $Id: chinv2.c 11357 2009-09-04 15:22:46Z therneau $ ** ** matrix inversion, given the FDF' cholesky decomposition ** ** input **matrix, which contains the chol decomp of an n by n ** matrix in its lower triangle. ** ** returned: the upper triangle + diagonal contain (FDF')^{-1} ** below the diagonal will be F inverse ** ** Terry Therneau ** ** Copied from the survival package by Terry Therneau, version 2.35-7 */ #include void attribute_hidden chinv2(double **matrix , int n) { register double temp; register int i,j,k; /* ** invert the cholesky in the lower triangle ** take full advantage of the cholesky's diagonal of 1's */ for (i=0; i0) { matrix[i][i] = 1/matrix[i][i]; /*this line inverts D */ for (j= (i+1); j void attribute_hidden chsolve2(double **matrix, int n, double *y) { register int i,j; register double temp; /* ** solve Fb =y */ for (i=0; i=0; i--) { if (matrix[i][i]==0) y[i] =0; else { temp = y[i]/matrix[i][i]; for (j= i+1; j int attribute_hidden cholesky2(double **matrix, int n, double toler) { double temp; int i,j,k; double eps, pivot; int rank; int nonneg; nonneg=1; eps =0; for (i=0; i eps) eps = matrix[i][i]; for (j=(i+1); j #include #include /* Utility functions by Terry Therneau from the survival package These are specially adapted to work with information matrices that are not of full rank. */ extern int cholesky2(double **matrix, int m, double toler); extern void chsolve2(double **matrix, int m, double *y); extern void chinv2(double **matrix, int m); /* Efficient calculation of the conditional log likelihood, along with the score and information matrix, for a single stratum. Input parameters: X T x m matrix of covariate values y T-vector that indicates if an individual is a case (y[t]==1) or control (y[t]==0) T Number of individuals in the stratum m Number of covariates offset Vector of offsets for the linear predictor beta m-vector of log odds ratio parameters Output parameters: loglik The conditional log-likelihood (scalar) score The score function (m-vector) info The information matrix (m x m matrix) The contribution from this stratum will be *added* to the output parameters, so they must be correctly initialized before calling cloglik. */ static void cloglik_stratum(double const *X, int const *y, double const *offset, int T, int m, double const *beta, double *loglik, double *score, double *info) { double *f, *g, *h, *xt, *xmean; int i,j,k,t; int K = 0, Kp; int iscase = 1; double sign = 1; double lpmax; /* Calculate number of cases */ for (t = 0; t < T; ++t) { if (y[t] != 0 && y[t] != 1) { error("Invalid outcome in conditional log likelihood"); } K += y[t]; } if (K==0 || K==T) { return; /* Non-informative stratum */ } /* If there are more cases than controls then define cases to be those with y[t] == 0, and reverse the sign of the covariate values. */ if (2 * K > T ) { K = T - K; iscase = 0; sign = -1; } /* Calculate the maximum value of the linear predictor (lpmax) within the stratum. This is subtracted from the linear predictor when taking exponentials for numerical stability. Note that we must correct the log-likelihood for this, but not the score or information matrix. */ lpmax = sign * offset[0]; for (i = 0; i < m; ++i) { lpmax += sign * beta[i] * X[T*i]; } for (t = 1; t < T; ++t) { double lp = sign * offset[t]; for (i = 0; i < m; ++i) { lp += sign * beta[i] * X[t + T*i]; } if (lp > lpmax) { lpmax = lp; } } /* Calculate the mean value of the covariates within the stratum. This is used to improve the numerical stability of the score and information matrix. */ xmean = Calloc(m, double); for (i = 0; i < m; ++i) { xmean[i] = 0; for (t = 0; t < T; ++t) { xmean[i] += sign * X[t + T*i]; } xmean[i] /= T; } /* Contribution from cases */ for (t = 0; t < T; ++t) { if (y[t] == iscase) { loglik[0] += sign * offset[t]; for (i = 0; i < m; ++i) { loglik[0] += sign * X[t + i*T] * beta[i]; score[i] += sign * X[t + i*T] - xmean[i]; } loglik[0] -= lpmax; } } /* Allocate and initialize workspace for recursive calculations */ Kp = K + 1; f = Calloc(Kp, double); g = Calloc(m * Kp, double); h = Calloc(m * m * Kp, double); xt = Calloc(m, double); for (k = 0; k < Kp; ++k) { f[k] = 0; for (i = 0; i < m; ++i) { g[k+Kp*i] = 0; for (j = 0; j < m; ++j) { h[k + Kp*(i + m*j)] = 0; } } } f[0] = 1; /* Recursively calculate contributions over all possible case sets of size K. */ for (t = 0; t < T; ++t) { double Ct = offset[t]; for (i = 0; i < m; ++i) { xt[i] = sign * X[t + T*i] - xmean[i]; Ct += sign * beta[i] * X[t + T*i]; } Ct = exp(Ct - lpmax); for (k = imin2(K,t+1); k > 0; --k) { for (i = 0; i < m; ++i) { double const *gpi = g + Kp*i; for (j = 0; j < m; ++j) { double const *gpj = g + Kp*j; double *hp = h + Kp*(i + m*j); hp[k] += Ct * (hp[k-1] + xt[i] * gpj[k-1] + xt[j] * gpi[k-1] + xt[i] * xt[j] * f[k-1]); } } for (i = 0; i < m; ++i) { double *gp = g + Kp*i; gp[k] += Ct * (gp[k-1] + xt[i] * f[k-1]); } f[k] += Ct * f[k-1]; } } /* Add contributions from this stratum to the output parameters */ loglik[0] -= log(f[K]); for (i = 0; i < m; ++i) { double const *gpi = g + Kp*i; score[i] -= gpi[K] / f[K]; for (j = 0; j < m; ++j) { double const *gpj = g + Kp*j; double const *hp = h + Kp*(i + m*j); info[i + m*j] += hp[K]/f[K] - (gpi[K]/f[K]) * (gpj[K]/f[K]); } } Free(f); Free(g); Free(h); Free(xt); Free(xmean); } /* * Calculate the conditional log likelihood summed over all strata, * along with the score and information matrix. * * Input parameters: * * X - list of matrices of covariate values. One element of the list * corresponds to a single stratum * Y - list of vectors of outcomes, corresponding to X, * beta - vector of log odds ratio parameters * m - number of parameters * * Output parameters * * loglik - contains the conditional log-likelihood on exit (scalar) * score - contains the score function on exit (m - vector) * info - contains the information matrix on exit (m*m - vector) */ static void cloglik(SEXP X, SEXP y, SEXP offset, int m, double *beta, double *loglik, double *score, double *info) { int i; int M = m*m; /* Output parameters of cloglik_stratum must be initialized to zero */ loglik[0] = 0; for (i = 0; i < m; ++i) { score[i] = 0; } for (i = 0; i < M; ++i) { info[i] = 0; } for (i = 0; i < length(X); ++i) { SEXP Xi = VECTOR_ELT(X,i); SEXP yi = VECTOR_ELT(y,i); SEXP oi = VECTOR_ELT(offset, i); cloglik_stratum(REAL(Xi), INTEGER(yi), REAL(oi), nrows(Xi), m, beta, loglik, score, info); } } /* The chinv2 function only works on the lower triangle of the matrix. This wrapper function copies the lower to the upper triangle */ static void invert_info(double **imat, int m) { int i,j; chinv2(imat, m); for (i = 1; i < m; i++) { for (j = 0; j < i; j++) { imat[i][j] = imat[j][i]; } } } /* Find maximum likelihood estimate of conditional logistic regression model by Newton-Raphson. The algorithm is copied from coxph.fit from the survival package by Terry Therneau. The variable u is used to store both the score function and the step for the next iteration. Likewise info contains both the information matrix and its Cholesky decomposition. If flag > 0 then the arrays hold the score and variance-covariance matrix respectively. */ static void clogit_fit(SEXP X, SEXP y, SEXP offset, int m, double *beta, double *loglik, double *u, double *info, int *flag, int *maxiter, double const *eps, double const * tol_chol) { int i, iter = 0; Rboolean halving = FALSE; double *oldbeta = Calloc(m, double); double **imat = Calloc(m, double*); /* Set up ragged array representation of information matrix for use by cholesky2, chsolve2, and invert_info functions */ for (i = 0; i < m; ++i) { imat[i] = info + m*i; } /* Initial iteration */ cloglik(X, y, offset, m, beta, loglik, u, info); if (*maxiter > 0) { *flag = cholesky2(imat, m, *tol_chol); if (*flag > 0) { chsolve2(imat, m, u); for (i = 0; i < m; i++) { oldbeta[i] = beta[i]; beta[i] += u[i]; } } else { /* Bad information matrix. Don't go into the main loop */ *maxiter = 0; } } /* Main loop */ for (iter = 1; iter <= *maxiter; iter++) { double oldlik = *loglik; cloglik(X, y, offset, m, beta, loglik, u, info); if (fabs(1 - (oldlik / *loglik)) <= *eps && !halving) { /* Done */ break; } else if (iter == *maxiter) { /* Out of time */ *flag = 1000; break; } else if (*loglik < oldlik) { /* Not converging: halve step size */ halving = TRUE; for (i = 0; i < m; i++) { beta[i] = (beta[i] + oldbeta[i]) /2; } } else { /* Normal update */ halving = FALSE; oldlik = *loglik; *flag = cholesky2(imat, m, *tol_chol); if (*flag > 0) { chsolve2(imat, m, u); for (i = 0; i < m; i++) { oldbeta[i] = beta[i]; beta[i] += u[i]; } } else { break; /* Bad information matrix */ } } } *maxiter = iter; if (*flag > 0) { cholesky2(imat, m, *tol_chol); invert_info(imat, m); } Free(oldbeta); Free(imat); } /* R interface */ SEXP clogit(SEXP X, SEXP y, SEXP offset, SEXP init, SEXP maxiter, SEXP eps, SEXP tol_chol) { int i; int n = length(X); int m = length(init); int M = m*m; int flag = 0; int niter = INTEGER(maxiter)[0]; double loglik[2], *score, *info, *beta; SEXP ans, a, names, dims; if (!isNewList(X)) error("'X' must be a list"); if (!isNewList(y)) error("'y' must be a list"); if (!isNewList(offset)) error("'offset' must be a list"); if (length(X) != length(y)) error("length mismatch between X and y"); if (length(X) != length(offset)) error("length mismatch between X and offset"); for (i = 0; i < n; ++i) { int T = nrows(VECTOR_ELT(X,i)); int xcols = ncols(VECTOR_ELT(X,i)); int ylen = length(VECTOR_ELT(y,i)); int olen = length(VECTOR_ELT(offset, i)); if (xcols != m) { error("Element %d of X has %d columns; expected %d", i, xcols, m); } if (ylen != T) { error("Element %d of y has length %d; expected %d", i, ylen, T); } if (olen != T) { error("Element %d of offset has length %d; expected %d", i, ylen, T); } } beta = (double *) R_alloc(m, sizeof(double)); for (i = 0; i < m; ++i) { beta[i] = REAL(init)[i]; } score = (double *) R_alloc(m, sizeof(double)); info = (double *) R_alloc(M, sizeof(double)); /* Calculate initial loglikelihood */ cloglik(X, y, offset, m, beta, &loglik[0], score, info); /* Maximize the likelihood */ clogit_fit(X, y, offset, m, beta, &loglik[1], score, info, &flag, &niter, REAL(eps), REAL(tol_chol)); /* Construct return list */ PROTECT(ans = allocVector(VECSXP, 5)); PROTECT(names = allocVector(STRSXP, 5)); /* Estimates */ PROTECT(a = allocVector(REALSXP, m)); for (i = 0; i < m; ++i) { REAL(a)[i] = beta[i]; } SET_VECTOR_ELT(ans, 0, a); SET_STRING_ELT(names, 0, mkChar("coefficients")); UNPROTECT(1); /* Log likelihood */ PROTECT(a = allocVector(REALSXP, 2)); REAL(a)[0] = loglik[0]; REAL(a)[1] = loglik[1]; SET_VECTOR_ELT(ans, 1, a); SET_STRING_ELT(names, 1, mkChar("loglik")); UNPROTECT(1); /* Information matrix */ PROTECT(a = allocVector(REALSXP, M)); PROTECT(dims = allocVector(INTSXP, 2)); for (i = 0; i < M; ++i) { REAL(a)[i] = info[i]; } INTEGER(dims)[0] = m; INTEGER(dims)[1] = m; setAttrib(a, R_DimSymbol, dims); SET_VECTOR_ELT(ans, 2, a); SET_STRING_ELT(names, 2, mkChar("var")); UNPROTECT(2); /* Flag */ PROTECT(a = ScalarInteger(flag)); SET_VECTOR_ELT(ans, 3, a); SET_STRING_ELT(names, 3, mkChar("flag")); UNPROTECT(1); /* Number of iterations */ PROTECT(a = ScalarInteger(niter)); SET_VECTOR_ELT(ans, 4, a); SET_STRING_ELT(names, 4, mkChar("iter")); UNPROTECT(1); setAttrib(ans, R_NamesSymbol, names); UNPROTECT(2); return(ans); } Epi/src/init.c0000644000175100001440000000066413142414371012711 0ustar hornikusers#include #include #include // for NULL #include extern SEXP clogit(SEXP, SEXP, SEXP, SEXP, SEXP, SEXP, SEXP); static const R_CallMethodDef CallEntries[] = { {"C_clogit", (DL_FUNC) &clogit, 7}, {NULL, NULL, 0} }; void R_init_Epi(DllInfo *dll) { R_registerRoutines(dll, NULL, CallEntries, NULL, NULL); R_useDynamicSymbols(dll, FALSE); R_forceSymbols(dll, TRUE); } Epi/NAMESPACE0000644000175100001440000001107613125276375012244 0ustar hornikusersuseDynLib(Epi, .registration=TRUE) export( as.Date.cal.yr, apc.frame, apc.fit, apc.plot, apc.lines, plot.apc, lines.apc, pc.points, pc.lines, pc.matpoints, pc.matlines, cal.yr, as.Date.cal.yr, ccwc, ci.pd, ci.lin, ci.exp, ci.cum, ci.pred, ci.ratio, ci.mat, lls, clear, contr.orth, contr.2nd, contr.cum, contr.diff, detrend, dur, erl, surv1, surv2, erl1, yll, effx, effx.match, float, print.floated, gen.exp, Icens, print.Icens, plotevent, fit.add, fit.mult, ftrend, fgrep, ngrep, lgrep, plotCIF, stackedCIF, show.apc.LCa, apc.LCa, LCa.fit, print.LCa, summary.LCa, predict.LCa, plot.LCa, Lexis.diagram, Lexis.lines, Life.lines, Lexis, merge.Lexis, plot.Lexis, points.Lexis, lines.Lexis, PY.ann.Lexis, subset.Lexis, "[.Lexis", cbind.Lexis, rbind.Lexis, summary.Lexis, print.summary.Lexis, splitLexis, transform.Lexis, levels.Lexis, Relevel.Lexis, factorize.Lexis, cutLexis, mcutLexis, countLexis, stack.Lexis, tmat.Lexis, boxes.Lexis, boxes.matrix, boxes.MS, msdata.Lexis, etm.Lexis, crr.Lexis, simLexis, addCov.Lexis, subset.stacked.Lexis, transform.stacked.Lexis, plot.pState, lines.pState, entry, exit, status, timeBand, timeScales, breaks, merge.data.frame, tbox, dbox, fillarr, boxarr, boxes, factorize, rm.tr, PY.ann, N2Y, tmat, nState, pState, msdata, etm, mh, ncut, nice, NArray, ZArray, Ns, Termplot, pctab, plotEst, pointsEst, projection.ip, linesEst, rateplot, Aplot, Pplot, Cplot, Relevel, ROC, twoby2, Wald, stat.table, clogistic) # Import generic methods importFrom( utils, stack ) # importFrom( base, cbind, rbind ) importFrom( splines, ns, bs ) importFrom( plyr, rbind.fill ) importFrom( cmprsk, crr) importFrom( etm, etm ) # importFrom( mstate, msdata ) importFrom( MASS, mvrnorm ) importFrom( survival, clogit ) importFrom( numDeriv, hessian ) importFrom( Matrix, nearPD ) importFrom( zoo, na.locf ) importFrom("grDevices", "gray", "rainbow") importFrom("graphics", "abline", "arrows", "axis", "box", "layout", "lines", "locator", "matlines", "matplot", "matpoints", "mtext", "par", "plot", "plot.new", "plot.window", "points", "polygon", "rect", "rug", "segments", "strheight", "strwidth", "text") importFrom("stats", ".getXlevels", "addmargins", "anova", "approx", "ave", "binomial", "coef", "complete.cases", "contr.sum", "fisher.test", "fitted", "gaussian", "glm", "is.empty.model", "median", "model.extract", "model.matrix", "model.offset", "model.response", "nlm", "pchisq", "pnorm", "poisson", "predict", "qnorm", "qt", "quantile", "runif", "termplot", "update", "vcov", "weighted.mean", "xtabs" ) importFrom("utils", "flush.console", "str") # register S3 methods S3method( print, Icens) S3method( print, floated) S3method( plot, apc) S3method( lines, apc) S3method( plot, Lexis) S3method( plot, pState) S3method( lines, pState) S3method( points, Lexis) S3method( lines, Lexis) S3method( PY.ann, Lexis) S3method( merge, Lexis) S3method( subset, Lexis) S3method( subset, stacked.Lexis) S3method( "[", Lexis) S3method( cbind, Lexis) S3method( rbind, Lexis) S3method( summary, Lexis) S3method( print, summary.Lexis) S3method(transform, Lexis) S3method(transform, stacked.Lexis) S3method( levels, Lexis) S3method( Relevel, Lexis) S3method( Relevel, factor) S3method( Relevel, default) S3method(factorize, Lexis) S3method( addCov, Lexis) S3method( stack, Lexis) S3method( tmat, Lexis) S3method( boxes, Lexis) S3method( boxes, matrix) S3method( boxes, MS) S3method( msdata, Lexis) S3method( etm, Lexis) S3method( print, LCa) S3method( summary, LCa) S3method( predict, LCa) S3method( plot, LCa) S3method( merge, data.frame) S3method( print, stat.table) S3method( print, clogistic) S3method( coef, clogistic) S3method( vcov, clogistic) S3method( as.Date, cal.yr) Epi/data/0000755000175100001440000000000013051454242011716 5ustar hornikusersEpi/data/lungDK.rda0000644000175100001440000000535612531361106013601 0ustar hornikusers{tMgOA"rriVGMŌsTuC$9JKD"R-J0fDGi'S,mZjd. .ѢfTgRӺE1&3|߷g3g|˷aJϕsG#76xt^:^:a/4쥓YkJsnԓZtEk-E-zʢ-z?X,:0XCyCyCyCyCyCy@^ C=aѿYNuhE<~Q_h﫲}%|}dѧwPPPPPPs&h@(ϣ:vGbx}BS{ODߎ%俎mAދ[G~_Wf8>}b { v}II0OϹ KLc8*GQ'~:n7d{SD}||9Ջ3pTM_9> f`Lgb<#8@?2ϓ8~%/5<.~KN.y#_l~N3tq|#S^ Z9VƼ⿷ĜkƁ==\j+t#o|_""oU ΃w0= A7c͘fh5λH|q1yg7u&t#k90O*:s C?y1 ؾKp|,k} } u{SvP)ʨPǢ)דio>Ǚ<~_`&'q+_''_'Y ^_F9 0k@-Ӆ&7t˝#IФ/IsIl-z?(.gDpv6aa m y^u,=kn!\h/+yϊ{]c=: GxCV@|8^ӍĎl\o _z1ڞ{|W& _g wH<-F{W{\Gc-;q/ ;woqAG6d/)B>q19!yo׶6 WEb_yL_]8K,Ek0׷&u^=7a]:-=~:lq;o7^nN:啄KWD9#ǭeg38o|!Mh5f̖&OYo T3jwq]h?7{+p|46C/^l}#΁k`Iz6;ȝX ߰Nu &ڸD?pe<}akX9ӸUֶd~̩ ]r#uIJ4̭|7zRZ{u,Tai;_&i!,/9cԨ!V> ]"+0c"4B֡BKEF4BVe1G4!b*&R~Ũ<aX ю?K$gĘ /mG]G /ȅbB5WѤ~!tP.Q=UPS~DmgTx=+]NSNHRaj4URhnfNa'q4CjtML=`׏q_Q.^82Å.5 NnUB=T^ W .e:&7f6R#Jҟ];dxР"lGvk̅KǠꣻy6dMsZ߀Q| зJ3NI]#'=2輗9 8+[(NRX^މo2Mbl<3},;zBÃ-p tԱGij2 ޟ9:}GiL{7iRŇ>7>:EYC"]t_lRsjyK49ܯO4x4-IV@osN$3_.PݧVL1VB(QjM/fn/ϕX>ÿr`Ԯl|Lsn*B#}1#`]3X'H)Jh5YL}dEΦ{ծ8(Q\ 5+ c+˞NR~Vk @% \!4N{4}* >JM(mF&L | N?ςdMaD':f+bCtVH b$qς>M(y}>/^~ $l+ Ѧ &DKxY )& ue9Q 5>kv:U>M xa'A08 'r? VC: [cCA@ia٧TI4 Ϝl2s(VϟU!ru,ڰ6ۯNd=lMtyNT3PAT@,ŎMGeş$>~+,'r˽A|=\(4 (lg4a첳৴S@پPz"~e<:c y,zU6Oz@{t`Jc$iy+V%:=nI?RtO߳++$gnP50Ґ=u fc-8T**&[i ]Ai!=VCP- G~EbM[SLQE&" V&dN/u3.4W -](61 !'6_Z]5P}2)&DFtVOt;`D!$itҮ*2UJ(Ŭ F Ӆ^Ջffpnd(X2LzVW!1e/Pû8AZ$쳩\|&/%*zO鮒'Watֽy  Jej2e嘦1j_ҳ=u ~*M$q\^0Ѻ#S}¦ 7`k#Gx+'o5~[3z/q#%#nc1'd rO=!uT f{%|@C7UW%.j @E.#5KyIe*\SУf=,M +-5nm,CM0rSsQL^Ag{=|u!`c@?Ԁb;$ 0c;ݨw>:^5;4E46W%"īe9r[Y!4gMu%_G3wzo.Dno6WrUZE4x[?E<ደj[>&<׶YQYd~=yI$蛄9 xAuy.c"]a7zIA:7+>]rlύz_DVg3&{&u'^ٙ@:Ek倏1)9PZQ:iSlr66_Lb"j{V0h}GZߺ}2HÔ;!R]\onB:^CUq'kDtQ7eԈ`J#ZEZd |¥}VO{+A`/9[Ex)q/gJYN+|_ iZNͪnq]XEmfz pL}tCk@ʨɯ x81zӷsׇU2 m!Om"BV5Ca_;dyi].B9m4 {d: G_*7;jvEm_w)%GKZ= ;--#1} WL`rE>nC̄ m:<sl5 Vo[!xјܩ IoW{ŘZ&km;h? I'@]yȜNݫ4ѠTCoK[gv+o3YY~T0K!=B 5C);1=GT3SA@1k]mS(V <u{"Ǖ6܀&=n@m{ʑ1&9tA4x|q Tyr z rLp}i;~xX#=p -$} e^8iϙ.LFc)If < _\$SbA VnTzz{{*y7 &l5IC4NuZGۏB#@[A; s|l@Fymɓ{:Q `I2*r;[ jauwa~RBH%#/{283F"ckW-2՝\J R6: A a➷< "U D(SU )qF%3`~TiM:!%{tZJ jKm^,@8'rQDJ]b7d?YL{*`tGn!xVmfK^ЭQMZՎ^F1շֽs@բ*lsU$Oe {K:\)xI=M&'H=`]}"Aމv42N /ۍq䯫[]lAs"rf~,ah@duW`Ɔ\Bw; Ɖ􏞅-ϧDx8_7|AK_[LDm90mv!bM'X2fZ>f$+Ƴ쭒O {xDϦ`f$렩rTĤVp;)8U |]-<@cWFc=7*ֳM r*$7 >$jEa(8k\It_dwѯ(H^r(vrSU&Szk-DW'uuzqo°p@rǹ}6|oJ"Bw\aRxw G65׏VQ3Y_-heXvumX7R=b ^.7i 944u?_l({S }3 F~\avFAa8+rN|z6LL4/QRϖ-Lx2(3Nl֍;[-I&$ cvK\']f_ ,nKɔpyln> 6 \eU`Ca(`k/v LqJK<э܄Éʴuzx8";{͟) B[:$)t;xdS牽n:/FC^% FQ)Kbn8QKˈ9$I8h}n=0(_YxIYz@3*ĵ㖱Bo؟M6_+E=yS~M[)Qo2ſSf/ǘ(zI0p,zO*lk bTJ e(f:d'0.^w9xvS0Yt),ew?+QH=4.KϿRE9!_*RDnOIߪѴI&8UKZhDAlcQ:"'B@D;!DG1vTEJ aτ) Ktlj6p;$5K5s oFB\\c?ҀWȣRaqӻ;ZԠc (UOByR'V3xt,Q/$oI'iШu8D ,D@ڑҎIm"$ E< <=zW2=Jn/y  PRa`7a}I_꘶3 ]ew>;ĭncFrdƛ#_䲦l{bHgWLN%@ ib?+K53BDWԿZr`Ta/wfa|6-0|I17M)}w/"ےp ny4L82\;q%Mme3rկݱg|WlT`#y";W0)_ [u +` PQ `񆭍>x^Tv=C]OS Eи4&UF/Zrqy#-3 j-8Q' ͌;(,f':S )Aj9T j0Zdΰ=ZםhVU4 Z4mmg=xu(.A:Hx8}qS"|&I+pS-"u朔4BcԜ];%c%d.=Ó }5LEH GFlj6Hj 2By^cvpgc RPRRLhsE^4Y{V@̣->Kkr9+&2y臠t=q^ i4T;U}{І rJw ܼ8/Mx?p 2(wi=Gw.pՓ%Ι'0&LngoXm5aG[&6g`NWjf )\iۡ}ԏT((뗟=/5%4i,ۣƎX]G?3x3VX/=Gchw8=\/kYDb<hZen{7>%" +R$5RMdV<;hp1%LXUC<5؞\x\` Qz\i!+ fp@`  3&p/P[h@C$½>Bn$u\BC,eL$@7Yv(JQ1o<jޤ0b]׀jrk%WG Ź28ZPCњ <5a$Wx;l Uߗķ,m0RՈ>0A]% eT5h* ~ i6܊XmXA qb S6ɇ҈n;G25^zqƢ4q=+쎔@DaARd)u-Ot#!u/Z P+voqsHf TEJ*GFӠ x~%TV&~mz7#)0!}; dǏʇDj\uOtqkG>^bfsc. kQ,T EQ"w^Ru\rY_;MZyDd~lNZ`LFH)dHl q}0=ؑcH6ud h+^N,)E,Hfi2ޛ`ݎٹg Qت ALyǶ„OE s/q_#wfoVKɤa[Ls8P,e,w ^li>{:it~TXťСd6mA3#:-'8-ci~Koät UQhFh@?8&It_kUX|;;`tȸœ kDBRzAN:4\`P{iM32 GjA}v.H $?[79ܶpL!55N=+F/(2C/9zApEu [իDZ-ԽwZJU&UƈEcʦ1V غt벨]P*1[51KP3v'Ovifth+V pg?Y;sDwDLa[L*G&%>( tJ ~΅N?w@vD*d1E@lB;0I$V:eE逻©:bX+T΂;+\yu *=>\j}FA7咊)aF24YglikPFRC.H?6rSN(Ptʠyj& !soawd0D8A>T&x45g\}%Ϟ :Lf\"oU # ,k3I+OqP Mě$>NKPtqN;_Փ9O%`_WpM:'qiEBߙa)]*"RRH% fR7P)AsHȈZr$Ҳbk|p~#ly#[K=t-|s2]d"uN%פ\by K8ٖ,aM\Q}2.OnL10)շEuOacş7۝(;6Zq89֥&j>ࣵ۵>v]9'In|J̘a)}gJ6J8rӢS"DKuYC!%3.wzˆlρj;%CY`wy /c >*ϘUt!梴j:S99AD+,=C?br_CJ8z ޵( dGTr-4jUbZ흓03d3=  jsΜT16^hTTӭ cwv;`L맋'RvțG9DzDekobJ}{GVnKN 7MžTH;Xv'>0 YZEpi/data/lep.rda0000644000175100001440000001432412531361106013170 0ustar hornikusers7zXZi"6!Xgu])TW"nRʟXaqjnj-& H4 L־oZ0rYFLzUWE[mFZ'VMS96e Bք`_E4vlD_GfOgsÈ)jX٫#C?GL$zKQ x1lE6kw5?g\/A.yuW6q4pڭ@hL.G :S#] U~_plS/::d&QSE1 r6 h*/o4_@pScZ}&9ƞYֹ #Yu/KM]Y. 2RFo1յ'|ȗtWD$1O[<90#kG6Eu|b`7B%\(pDV6Ja$1a`B%: 1t! ]ޜ7K}d>]SB,[7Yvޒ>,P N=Rc),G.f?Qȣd))U,d'njz˸?o4J9ӹDH,!ٮؖZPXflu%ZP,HU>Ƿ@DE&NUgKZc¦VIKWDKK-vm #kfwX"bt伪-r'ټ; }kD`K)/.ɆJU{I{Z:ǃTtl.0:W {_\S]CJU%* "+\kͼ-'UAWmANOv+ĮΉsPDz#7A# L֑y[*|@ p/`䳊4hFyPoiD+ T3DGB(3Tg/'Pws]wgX(8xğ;M;,wĥ3j.C\bk2 v(ݲK?MICydW8V_º7<OJC`#bVkgƺޥ=0jĊ0݀8oa$SJ;wLm{ 2\%+) 'GRot8r6b+EԳ8E5@tA P: [m|_hh~GGiMr"`epkʒ>8+enxq2,k؊38b љ7V#h~ \ZPG U.V}ހF"'Wu41;w|(r&dz {θ^0If\C^$4|0?E3̱MrvںjZuK}! !ybguGFK*#6K$-j@j_u,m8~@($o+yԗ VèWy&lH;2SDseq:V(FͿTG vNQ|]J{SAZV U g^ 9uRd `~\q{J372%3ӑ)NlU-6۰08^׹U Q(Z(Az#Şd}g#K4%k'u=wZn~5% K=O!HGS }^gT]փV+Q U#\3q~k)faJe}!+y۰zNMo`ZrD;G^@g1bg35=Qe$gjRJBea>똠yԿPs޺X QT>&0eq%sJ` ̿0/ Bmڨ\x9%}>Eh#e?R`H =3k{r8r|ށ8^S #=Rןɤ;Zx/1ݡH\jG5"eU5L >Hq%̑aoJgW%#)0 IcV6\k]"&\996}ʺ97Q͙ӗdq+(9“^,% Yk[q2rLoD<H)c#u8u ki`QJh4s`ukVh /^?űxK`w%.<vMp0qm?4&^~@uv~toƱK]#CFYX›9.DOSk}G\8πVBL-"t9+箌Ň=Ar<O nNil࠿;)zvLMs!S;f׬%r=wnjf3ۭFX\Cxqd>Dx?Hk5˾1x(0E-w|Wray P@oD0 R焈msCP7u?FVq(w 7 )COذFWS@Cw>YкB(F"H<&x^6<|vTTVr0C@jR[i D:\I|nh5LLJpZ?P[i6C8'H52dkeMUs4m_Zj\! #=e҇IBn0v [[ VӇΏBy0EI,= 6$zq=u{,mR:}hw j5"yR'@#1ɈXb}"o<,zq B-*&qyEQjK ]n8I0rVZ0՛MAR>LA#.n1ND{ 2 WKĊ_ E`J[H`Mu25ѯ H$sU(^98;(5]'ܜvbmGЪ 1|71Tw،><.fOY* ޲sB9aÝQ !1;[/5V$lw%L8qhH!t-{v[xQ k!y ^?Fʋ 2yYu$'E`Aoy%8s!BS[d&]^-~Ahi0Q+(5 0#=6(#UbJ<#Iy׮r*".MpKksQ"YՎ#+_[1Xb*FZb`S2/ ` g-UM،e4AGo؈ ܴhls.?+ὗ[ŌMc_OwHL6{KIǞ򊻷JG7C=ϝokF~v}n^xȪCyH24(GaX:CJi?_H?heg@[Cd ȩT8Snt9vᝊU7DQ)=86I$ѓzZH5X2wB_nыclGdW5yFB|B+q=%w0/zBu!&/ #q6X/4RDJøKtSĆ^W:%oH^ߣ0ʅ`^FM@^ݢotМ_ay07j`asf yGN3_ }xNcJcz%F ֓epZguO1͓.c\֬2?Սn'-6?3gחg%pEx /7u*©И19KB4Vt<[m™&Tr&!]nY`tEI@dѝngߦ~W\mL&0pXrOO\_z٤x0ɘLdA׀Fl)%<[X *c+7?^'5ȁY汎5jptw7syf;g+(F0zg#$A7 3:v.LnQ.ZpcoVFM߳D>FFD$ mGӯZ"rPhTN8P2˪CI-㘳.eь`w}g;0T9@ԉӊĦR::g $ @Y]v[Mg{Eiygt>*kɾ=˜ac5O?t@Ņ'eKʆ,;-`$ kXFg_Ӎnbq6%8򽲣̡>6hw,|,)HN2}WK݋/RdE1}\y d$bcv!x 1)Nœ.e{ L!MWqDv0"LdAǡ=R*d-Oʉ>Wc Ŧ"ˑ#"]'9K!jYo}mhqID/u'Wp#]V@4wy FQ%Xkez  ]ac2Qp3$ 2u3R #vrXqM e+b6# ?\וLz@LU{\Q/Z<͏ K33x=#mgmYD3%C 1L:eeDTq#uY r˙e;җ=**m_yx[?J-ri(Ty5Kk!G_L2 yK VI !s5UّKrTm ^}wZ9B7l,-[Wg1n[RhHaWu0 YZEpi/data/hivDK.rda0000644000175100001440000000420612531361106013413 0ustar hornikusersBZh91AY&SYۄ \TUu{}P@FPBH@BD@@@A }`0zݾVpcXfJ'R6QMC!#z h6dH{TPjIiM44I R3Db24`L4@FLdɀ&4h!$ ?RM=)@H2>rK6mm5o88UUUcUUUUUUUUUUUUUUUcl͇Rvl7fffffֵdqqZfffffffffffffffffmkZֵc-f1cò֓c.ý~v9Xr͟4M2""""""""""Q4EŊ텱V 2~-~wXfJZ;Tu֍ESe32m ֛%ŻJ-u2R)Z5ZjjM \˽;iwz4bbR͆wp4jsXn(OXOu}VIxf౳SõD&;l6>׃GE2!dj#$&&a%Y\r'}I84`Q0IiW+,ѕ*cbIK!@й&n &b` 4T$dЎieL+mt 1:k~<5\,Yձaŏ&Xi`m<oDA$6r|u ,Eۯᗩ꽍u_ĈU} jUr- EגZUe}ܣJ".Jeߐ0 c3Ýp6?+2+211;3;3{0{0>ɌOf|2`l6amis`mamamio k kLxgXg. <&<<2晖6ϰ6ϰ6ϰ6ϰ6ϴyyye33ͳl<<<<2晖6ϰ6ϰ]yMyye333-mamamamamio k kLxgXgXg<ýyyye333-mama0l @k kLxgXgXgZ<<<<<2晖6ϰ6ϰ6bykLk k kLxgXgXgZ<ڶٟlk:dm=`[;3ƶCmm[lCڶٓmk:dlk:dֶuȞa[!{mm[lmm[Emֶu^a[!ʶ3zk@}DldfU?y"Y9w/4m*R:9h_*hsH3r‡wtqR]"|~\9y_V㴶n:M.XmGǪǨ|7II'Y8lr[~rmtzo"mF:omLJwa9GzHa++oEnm4J5q G⮶~U|dh7%J[;[WYd--th:/#v)oGñn{ܿ-BwkI]s\6rU=-h[y'uݢC8U,C>7 -Kᣝ79R=D{~",qMwV~4͓DA(5m-VsW47CWK 5VKdK_V|j}mkw-֟S#d[s\t|5V;8\h.oo^ޔ(NJ[7+=lpfVu_sK=`ky]ڎ_MGuNk)R8)uqRٴq~p-z#U{'*E;XozXoqhugj:_~=?O:퟾Զ=C\yfH|_8"˫o1!oV/n|w:V"ѹ8)l|󸿮?d~\UwMH'v7[6I6>/88|>/98!D{f5~#\h_G[HnoÞu yھo㸿>%beݽ@ K[?+ZQ,j߿G r+G6K9|G;q[#-ҏLҿgKVWKaQ>چڱH[7K;8l{$}$N R\3t eG_tqlJ_o8RkYE}jXwmrqW~r6qdxu=N ˜H:pY}?WK?>WlVvP:߶E f[\Ye>#Gx"G_d\:m^#Z{G*n|^+o7Zq[qkIӑjr<9^Ww[uG:oHǝ:V~Em{ RR8A2<<5i-Uyh:E߳3hFHhzבk6od9? dn#6›2V> bNm~eZ=znI'wpy6㭮cr|M~Q#כnJ¯|EWGdj>Ίg }[WFh~o}-_qc=g+dN!d.DH>VϷ+#Se[Ng6v^:?!p磣7~OޔLgyp@+ΐG{~n5m5mGGھG٬8ƿ)JoEӉC/6A/G2`/rxzG79b-G"6s꣝h?]h!˺)뢬 6!x+[_vq ?j/}dcpT#|Hm?}țeg!<|),Ygʟ[Yؚt<_DN_-Ѹ=R;V=Ɵw.˼[=/2Vz{h߅ICA2ROd>Lַ?WHaYOpIe.+AV{#[Vʹ\#1V[m煣]׏۱sE2;V#G߈"]D/[/IH"a)lGV._{ݨmyG[߽GrG8p1­ y>+H|o1r|+V%h󁇻F6n:-̃FxNVLjޣV31guqۑcUk{j~_(Fl׭he"AG~)_ey1qr8N/WG˓UUr8Z~VILLJVF#533sR{K)>9ǯ/{nد/D:kدFz ?UDE@cEߏ/qxL\RqNu䷕ "}EF<½Po$޷dQ/Q3%>[hDzfvCOEX x X7'Uw<."sF/A5 B- D>oVqe vX3gRMǕ>ܦz@$]UJb"]q[俧eE7:Dݽn+_8 ^Z(}vĸP{Kh's(Էdt2༸7tyO7p[t8}u}_`ׁg![q97B7~9I_V]] P޴ `'$A?`oS^$رD5P^Tё_K'<}eHw7~q/= cK޿#Ѯ~'+^_gskynn' $+?uKLjf.xq"GCvOq_z6$뫡gEC[)e瀏yF$ N4L-Qב_F< vڸ?וI@'\ ?> eO?%Oٛ&;DJp #zX_p^Ѿ~1חmCrp\ 0~ uGmo}_x\px?w&Q1mro~S5 >{Vc$~%DNEcNA|!_x3Y3?/c~O.Ot/nk`b]}D_(@|@O| >p ~6MBkQ!;גaiY迯-7 ?47ǫG goN,zf1̯%ƇGZK|l|z'#Oj*tS|=W<;hW9?x)krJ7JR{ؿ'E⾮p-t] ;|@eGG9yW~z&8ooA|kmWJv(oSu^aWnvoGϮ/p=|V4QwIV~W78V+?CpgTq†{oc۫% ͪ/l% lWv@A?>/uu/_:xu&u&]Zo isB,uƃorRx 菂[*Go|SCW\_7\_yK- :Up=QWGLy z.8u_f(#vtBefuRMܖN>g<|h۠{8Y (܅qQprw4yU۞B6[&y" V._+桜}+/y1[N<]pf=~O} I?Lp8 8߲)ҕicvlmo乐< [8s|@m zksnN&ǭv+O`Ip=lDU"{#vHjk@;yCuT|u?}* +{{ Ûp\( n) O-_> uu EoBz!ORџЮe8y|mx5'~ z3y=<?yDw7t\/f~yhF=h-g7}w_F}_S{c|9v|Oy'{W.LA=R 7E&gysՂwy? ךn=Ys no]3fowHm_ ~nx+yeKc\ 8^3:7[phBUks6^ GAWaR[Ѵx-O|u 2ޚ $>߆|??e1u=_ }Էr'_Sh_⺡`~rL" p/Y[Q5>K#>/F*@g`LuN%,رzyCcn*t9}$l|_˜yjnpPn^]"8_w,EUOn>oFi?О~>=!y;~05r D>z9'(_~m=w zy_g@~ky~ _u삾{.8t8r-E;98vFQ%ҕ?[69 >HOvHpWn' 9}P?G*u==E'1݁4gSΥh7g#w`|s1/QrmgC{n&{&b^Zv.B##>Ep\>.>7!uW^} 8]/(-t>ߘ>rWq+w81n z |8߰-א9\\)w8 K]_unvB:+9y蜘5O8^: 0PP=rƸpUоξ8αr4A..%[ۈp'ݍrwۅ|~3Cpy|-̿81Qu]u#ì ^W}^AKq*p%H?<ީL~߀NY3%a^M~/PߚL7|̓^ 5&㼃7Oؐ/?$[|KvUAh>||S }駓{ڳg|>{)>8.\z}z_r酴{PO p}y=ǫςsvp9 k:ƉzM|گi=R%(hEt-(n;a\?8ޚrV\oV3W$@?.,sS6)SC'=QM<}jvwk[d=# 1w*Kp\|wUӆ 0T7~qTa_dr$7zBy_ ~UCz/Nj ֈ\zy[^|/|{' ׆^<~[08N<]^G4}(G ĝq}>kˈwWu_.ΧTgo?烯=/繈u:ΣSqzdzH !+۪ oBzٜXtz)-lFO雐nH$=h0<ݽu'ch+p<1~*8?hcR,[,O5eyobx*bV*e'~`KCwoDzA;{`,ɳyb+NoD#~}nrM`WLEApv^SOWLbg6J,E|^^CcU<S*ZU~"x՞>z9n`՟^{f|[^u>@~BX__ =y ;k=Q` xC;~g8w{п'.|;gy>--FZ2*:{RXx 9Ovcߖ)8ν}ޔ"9anHG=ag鋕[/oٰM?ڟ6<%mɞև~@_fK4:|k \2k;<SdY*zFؽm}gD# \?VZ).$_1~3ӻS.TsMNnNE^g5[s ||컁\rvho*yWซL?\L?)rܯ|RSl:y'<^6y?G& .> EPP奄/?#kD,;y s:b\lloV®eX-3cW9=-އǎE;nyt~%6 ]߽ï F;v {jzM'!yh5OhT<_܎qEERXy">k1g CG~w=zxwP@XK8p {@~EE?=c!eNL2.xm:zy9t88"TNO#}/O}#}XiU؟M3 _s]йfoƸz݂=I~ހ\&ǡ_Nro~_rao߅76HyߥqWs^o2~ ~ eWwoh?״6BpǙ2Vs^ c*{|ZN~׹6Aͦ>9סۚ+_}9K/[ <[ q?Hq}v%˕=Ui;'7~"J+v,x5)~&3s\;= s~w$P$cU8D?"׫~kOo~6tS&T!xU{B>އoY?2]7/@~]_cS: :'Ǔ\ևߏyո6zs~a%|<ۅz~C\ N+G_>>o~|nj?QnJxἏ_ xuΣO ~c+9OL~/sN,]? ~8?VM} q^-8,}~{Rs8mpfkӆ"OE?_G 9w}RpOdpq+ܨ:OK .qmCoBw 8_G$^w ƅuryx>M[\w&q[ݏW^[]@z ZOn~N5?Fzox . >ת~7%Y-8߇2fPN)Xt#NPX7%!\S'GsS{w;??|A>^y/m5yzd>N>O"\o{7|=m{SV|b@"$˯G].Ǘ\3JpX|kh-yC *_+1}X)xt䟳!tzS*x^tyuCprty9~)x^h-j} \)o7o:0ĥJ`x?:\- +8 ~uGOxj0˓n.yg9Ά>G- ~C9 ?C=W1\?=UIT_/q/]^O@{}qmLށ;vMjU,5R/N@ ]y=x<'H@y]yBwI'xP|<#ϣl..Bm?ϻ/υ=Bw;:c97&teߚDsϊ1>Ae6twr*Nx+PKA`/*B&_b;gGѝ<@x֘K; yy `7ww\d=q|ogCߣ>'~)əC!9H<ܜ{Shoh$Mι@^C_? Ὑ݇j;LO|9"\D}|J^~p^N\a`p]Hݹ9<yE?wN-滱7/l>g+CU291/vLjtxw\bIn"w1Cq>]y |\+pUB7Jؘp4< ㄺ ƃ1|SQcOqa%|_8>\-0n_'} xC}G+ >H~1|(\g[zj Ck n%l:c_xoK NNKP﷨hg53 ǻ#6qލr7!+u{?: ].iu ûeߡ5^ۮgm9 bbeo0N_q/IhBcBpFD;\CgC#m܇ms@}'F/x-NA׋7g̹:=~K~O dƣ_abQ  \18\ NBBq5wPq33g"y #+w:0MnrʚT?!bdn^ />;9c }ڔm?[>tV^G=*x4CG[4߁_q˯V>܇¶ &d2ø0^xZ<v 2ד7[OH!`E=>Ԕ ܇P|M_]־'W|;)kz3W: j)u8{{_M=} 1.X*xu1. s qn~6C~8oyQ6̿RzڣBr}rz0<1;>˽S-W]yCrdq_{qyRyw6R*.F,⾢ֽx~YWBޱ0Whx/s҅<2ԡtt 0K_ Rrz)d|o<@;\xUxD&rߘb.$:)ߓ QOs.C{~w!]aQ?[ ޕq":ݜ #3vD<vnC~$?\G;U\~|>^qc2MFz4w}ڻc [",CTr|Hu}gOx3V>U?:/c΀-F:~sV'a.@lÝ('("{ t8\댩Rǣ_T} 3xQ!4ؕqH}`|{ ƗW4 w=p"u ;f`|.Gzd+η#آRwLqV܂ b~flTm7 =gC^zrvK'8u-8?N_j~>sp Ztp} r[&w>q.UMRN |F{˞{uz_~N8V"ȧlNW{d>syo{4ZPOx\9j9y1WӘyNF`]cnx8sfxCE\SU*ysa y깍; s.5l:k;疉"u:x^6uh7,5 (\~8P #-9|oؿ>B!]uz|1xi$$ =n^C!{D}KZfB _F-OhrQh y[m?|6?ׁ(?ys1}}}M]=Eҫ^m[踇~\'ʴ6tT}j6;8v59EWQO ?P8\˝࣌ёu;[tbஐ:pnwIkî |g cKCw,k c=w9y0gkzюr05ep'?;`Ȣ?3=˙ +c:Ƈ1'| qzfwۈpx mG;v^D}t.R^L~s}j!_q?qœwCG[1K6pƉvA;8x/ *z9e_vx.m+x-{EH%'޻e#X;~ǪaAǗM`ԡk)]ǝl[߅8/iUhwKpjPG!L/p!ދg*)l,N c #GD>b>~xђ^>oT|x,Azχ<2lf{7@mb}z| xyᱼQ'&z2 C|<+h_7'żR%M?, r;I~߆Qqu/kK3u\'Lw7tSc~o9_>#-$g}ϒ[W):~zA_pfp*83Y&^L+e]x^yJ :{ŗc|/=M**_vPBX?!s`x | ^BIwI-+ai-:8 :QN軡1 Hd|v36ߘM8 ^#X<|Ã_aL޿^}03UB-SBx=o=3|u߸K}ޮ<7蓇Q<^ nѾ8ʹKr_!IYJM2wۊ;a\uYmzHH6\6ufZCϗ?]F#N̓~S^PG_U0NEvroWkN_c0pO= .O7t8|CK7fƁFQ>O ƒBrqbwFu4<}61;0fX?Bx Px0ҭu Qƭ߃?:rrRos~Os<1oŽ\?=zn~~x8ŵ ~VXȧlJR\Ӛ4SxN"s=uvN3*n.oٗ&f.5#-zxvW;3ny ~ vP9^zƽu:E.@C 5x?8:CݰK3p*GӶPo9x2Cx!]Cޗtyu41FO<"82בcE|!HGȍ@qxȆznE;ϢO|EH^B{>{=z=raLQ\C\ Aqn^Ïޡeg8 bm\Konpxu/y%3y~Ms}wm,i?%LW霋o܃v .}.: |N?*tylԣI3߇+Xq N"wo9ፑޏa6[Y]؅6߃6uR;jI*l_^hC{*^>7^c|Dp2x, np{ccKYJFxH*~ m ?k&(g[5G,c+g2k;P"?_V}uK}~>0uԻbP:UB·x*9Yt碞 ⚈vw~Nw2s'rFp!30(ەc-i[B{·9[+}18n;mekڽ: |cz Ay nڒƋv~'[nތ*2hgov67e-ˡ_O2rz8C 2D‘E QnVׁ)#-\SGcF/>&wo:O@>0_,jOCrRg_^1v~{5s]i^'Wzj7]t˥PA;Ӑ'u:*ėE{ GswWJ&~ŏV }.넵VvsB't].snvytz])V S)fVʺmU"e'<3d=Ԡ,"bNuM׏뾨ӛp8oR!\s}o 󗀛QgXp19OF~~\ÍexlKA!P" .:z=~Hw3#}0n(pQ%Hz; }Q%Qu}>Pjo!?/Yz_u"uE?F?:+?Ι?g1\^*ote(ԣ4+->[(6%mJߋ&眖~}x]lf l1?o9pRQ0|q]+)h?_*x9M'.WF\G+y*F/WG0¹fyY?2LJMŴSwV:8 Fm Qq2 o%3b%74mOjC;D}p# wC?aq?_-x+ g@8ߤ_vzD/a]p랇˃vbQB}~9;fzϳ.{^v(]i7\r qϴ˅NdeG%8nisݬ߷0,Y.I k]f@"t]udy ׍Q/f]l{1~5h_o7zs_;QxMG;cpj8Z%SIй8.¦!8= f|(']Gg^'F'q7-s^qz!kcc'h0.}/㡓Z<{9AxnE?BxZ&WGN<%)LxKW֕{/y~ԛ{bsj^wކzzy?mjc%m:kry ϏSG?٩m%y@gEW7ׇ0JpY҇vN'w5U}a+RQcpƀS|~fDٸ/0 >w6 p*| c>u9*&э݉w=ؒ1}47h50~P_ӊP?/ZOn.C8S\g.CˇAw@dLqxe^3߷1y9P0t;mszd%aRL>l p2$y i~09Lл0@Cw%6< j+cӁN^y2QAr,=M|Ns?Iw_ګϗM'`]_ ÅjsԮNme]u{y7Hm=)g^O<NOW[H~^G2Jﰫ,w=y׷Wh 3 S{Ur^A|oC:-b#m=ϯwXb{fxg-6FEbWk*-w}7u /}^Wy_Lݭ_Ĩ<b"Tmxp'Ey@ٯ1)[[GOy&>5\&սjJp/az=Vqzy{.3 |y^*zڳ < :BZgDMkzW_&̧VzK{ 8y ✇|f̫0 Y}FG!o3ߨN''f}Ľ5 FYHY"54_KblEѲFvA^239BZ'ziQ!cϕ8J}sG717|0u1ڏ껟S9|9 99\ /ظKs 8?GWGWJ'$+Bx#?wx}~X!]ӀuO@aߺ_a&`ópO/w2У\_/lf3\\V@}pK|~X uu\7M|IP}x$˃ol0oo? n_; p|;nT4t2 ܾlN>N 'I) ;v(PءCa ;vP١Ce*;TvP١Cc;4vhءCc:;tvmom/| Epi/data/mortDK.rda0000644000175100001440000014465012531361106013616 0ustar hornikusers7zXZi"6!Xj])TW"nRʟXaqjnj-&,jMFjo!2QZEݾUc=?]0^+vgr V]>jYBQ3;ʴY*K?fbm>z_!ƴr (ҫSR9{S|V*{3Y[.SE}H.1J*Q:'!K<7x/\xYqꘄiTвBs Udˆ&ۊ^Ȥ T530P0=$L8N"Ϊt0ɾ$cfķԵʀ*Wa[>Zwh>%TVހ}pٲ5>F!Z`0{gI?*>ZFtPh7;#,֐&thpъZB%N 1יd~&Sl@ #"~ўg ϣ_e[K At!J+9OYeiR|mJF#r2_[n0es6E)nn=؟E rӅQ Q. \yte{J vT(+G 5Z7|}Өܪ>ot\܏QnǓ c!.W~>O˫s&ͩ O*%N?pim2Ti*JTȖVʹ.X 4+p g6TW1 X/.T"M}lӊƭaj7 o?sE.6T&- |?K[&թesh|%GGCx4Z,n#0G=91M?XK䫟m=^03<欘 JmQLDTm?,c6|HbS] ]F9*JUXLFڄ}fPK YZEփ\. kh-؛jS|ƛC' zus65<<"gʚO[+M$T]{Gf&=-\LUd$)WɱqE+3:\;j|uh7/4R~Ms2( AqlDϧWerI*̥Frlv<4ZS=A`L;{YX-/g EN罇V1m>ukJsw, ;灯,(N}a( mԅIC` P2@(}bfnf)=pjFX'2,:C3Ia \8cqm=kfnu;ZԒʬRd>\ &Nwv' 3:<\{ex.fۂ6Ű5*##T^^_Xj,'brs PF/Cm/ aJD?IopUg"6d* EEBfhQ+yYX/tZDrnG3¶),2"!h'Z.Iu}`EXJ%d1oKL6K]Y1Uc͡}2InMx6k5r[Rxpءbf;3XTy;t)+)zSJ_#͆Fa 7ޭdSI?.Z#b Vt.`ɧ>  nk9Y3}Qi3GٸKغȥujVdO"&K(8! daF́w$Q04uk/9Smr b%F/U wX߾h՚g] OL4瓤Jw}I"yώD'1[S&3vTm6L-7ژ޴"G $~_ʞ\)#һҕ'v&·M5}NoN#!fl^sBJhO><t6<%IAH-u:ĺ(+f/ҰQdž*/q94V~ڬtbR/m39V ⚉t~D֛O.DyI0 s7jAF[tvW([~FvYqͪi1{ KfCM3_ms5!Zqncjb)pf (EL>Ϫd+cQwAH ?XE|] (/=cZ9JS٪٥ -k)>đ 9wo[13yͼuD KKWIȮ1neiw%'9JM!Y̦xl1҈āSO%ھA cw G?ЯcXKO֜QgWVʦL4["7y( m@wp)n =Hq\}{Oa:?WvpVjifDP#QC KI1BS&SG&}pne[ s|ZĘQf}H瑴VwצdKdY]1F,{SppVye I#yu'rSFȐ նř5΍:g,5;etW"v5Ƭ@{UIni8*K?FuE*E5`.WN;M_(v+BZzH6͚t>h$GG݄= `5qy6Ę'[(Cn"8 HAyBoz,)e|z(&[]QE6JrLNZu51ٝ4U!`'vd.|˙Hq[M2Έع㬨jpG=6><̟/vT u>5w;R_?'"*tl"f,mALs*Q=yo"|z 0Sj=&Q)>*XpfHs>\'1o>9趽i.XL5=uߺCS%S|-A)qY E`z&Ј DC Aodj3W3BDJbf_֩r;:Y-566hڮ;D%@ mr2?rra]P@Y&ԥ:T+&m{G ɾ`3gb -}I+T]aH"2b8nRރO~rsrSA#]jT,:uB@qפl_gjflR_yC)dàZn|_3[|NJ^=p`zK'7F_ɦsMĖ*Yj{~vMBMEц1_9?(ŵIKi%ۙ.(x6Hx av\TnFiAm g2{tj}M;]fbMEbZ_x m?Ni|_v^eX˳ARFjPEC"TGOX؞hl ncl%x6);c:{;( 2(uOs2GQܒO-h@' 7iCnrz5WxQ"FQ:bݮkž?:2sSh 6BȜB v7t1;EkcAyy(h.XMC7z)B^6¯n7⃮(m"3 +ʸüD+u_Cx_s;`5lwa IӘ &'?׏,V \qCx|;. 5۫;zumP従khGj{^Be|&rg9qȯ*6bdi+cA;ڧ)qq*ۈSHŊP!$%X:JEK1E+QV=/7 3aQK|YuAy.wqW;(0DoQDbBW K_+1@3)kv#=j3`@? [NZ c)>-uCVUDZNFkf2=:^ ᒦ#=KV䏐zìonZϣ/@y6^T;8," R)UU7^`R!u T_(ۘU!nj# _\3_^>05taθIarvP@Ha`/@OF7Mfwɗ"@=K`9P.LA vDݲ :'YxFs#uWn62JRubpK㖋ƶ|=*S;0pPXљ3AcR^`9ϥo Xw$+%đzyEoY::*mwE>j.s?qӯ ꦈO֧z2o&fY{D.ڜCO*=-7W(zh䇊jooI]mmtiIa}ybyc W&.Q3T nrI/ OSgFAjA :ki/kjC9RKhgc40%Vb3Kov4Fd_IpURX0G/)`4n٬Ɗ<Ie*  R\ÈԶ1m`Z Jzl5_z+,cMDdi$;9ꝁ=#rF pִhZeQD0 YmonNy1j/ކOYq8XҴʰ׀ qtSm HLܚ/o5k9J2B%d>ѐ}<Rߏf),6|Skx";^ꙸqb{6m֔C}G.Q{=~pЍ>Z8]ȡ fg4O)*$a,14sŠ +y:{P KiQUN8=IAc:R7!P_g”w| j6%?~&ZIp`ψӓiplf "B‰}¿ZnŸ' /95SaqcoN7MVߊmHR}_x4MdL_E(NI:Fۏtc3;f%0qM8r`)LsW &HzThX :8" $/ xj H>HE֝Z/ڀg|9,/p!E.>i-) ww`;,ɿ^(s /ћ9׺V>7H%lG@Qrx8YB2m4yqc5[>1~o4iv"#Z28l3U 7eC"ɲ,mDUG!.J~boSN%;0,s~U./êD!>hřcҒIٿ*AN!IGKlG;A\R[:f zy(.~¡qr;srg+?pnSd4Eug^8ش!Pw9Dcw 09Tɚ:?\Egv7"k}ɿu|15FoxaNek ~ߡf]H۱:r݀VDo<{COPP&Iȫy->Vgge~S[]ɽS앵Qb2XխܴZG’"3L@͌3x+(c_D ?<Fjf}Z˷]H1ׄ* jxS c|v܎;} 1 }0؎uS A8[ RƮs:#c2Rн|8R׽7tZ$imBMmF}Ӿ wB\#{{]!qO l Cˏ䀓܍K {/$*9 ƶ!gJ?\80 aՔ&翫RqTLK.TL|ޙC?=헮\J<\FcZď b|Dwܧ&ǻ iP܃F3&MQR+j'zDK +g&L6SZJP$ %WUl4fqwۇsmVl0kDJEg>lf8$8*qGf.s޿fsGҁX$1^M8bp EĝaKBnk>`2Qgoӧ] -ckhR#zw^3~=m:|{FJTr٣u@n0R;8$4쳊+j?F}]i^ǂL R ە2+aԾ?  Gr `!+$:F~H&:}Xy6iמtlIfo%*]@OjcOEwfg{h үIVFM"/y`L} 1pZ M"bgS]YL30|GأuKҖH,LF >XυNW~Y?wD?37JY'Y N?鄔5v OPwqfQqK8 l.#7=*1! mG}eSY|i>f8=-yiCr3Nha緄0PuEOǯZ#'.8˫1x%(iE[~.RO0Izs SUc^m[3}WTw%GdEɅh'N!ۉ%w~=^xX..Sz4[م2(⡽~o\\x\)n=:f?ȏ>TKʩEL\W4 %g8bZ析E~#9bNprta?IߣtϢ4Q#C{gtbUp=$PblIJ AVc~r68Q(Bο^W*i]\ApYqJW>zo8y-or[pZoк֩55G[;x^/cB t :lX%uqXxGsϟRR+*z/4DDO:rp- i B>O}0#;s,{6ޟ]a1Pزg̈|XvChy*xOQ?Ȉf%ڌN[A莽kɞ<=֕s%I7Y^3?bjHH=>:Ѳ3H s{9R;jTVl<r K;U"Zu(&67jη')x6ԮuD6yge8hZAJI۾߼Iлփ+~lwFPSϺq1tE9n*ԧyJǩE$)|JmOi3,N2܁S\pVvǃ{ԫ— s<+?q='$|O2Q|w:זP|BP ,RB-_c:)l;Ipz%ScW,Gz]$HgЙI $ә:B~s)oTæU],7n5k $vI)֥9@k4 @CD(wFqN:k?{\LA쒛>7j*/քlqGO^q3itqIerrlQ6*z_Ϡ&kV /MZ$2lHk n: I\bq&jhL.[ 0m͋$q D: ,UksE̾:H7"aTROtMl{Asnqcf={w 3 4l#8,tZ@qڪХmϡ]obX aP ɉ/@JhB<(G=N; 6k>¹Ʋ8?ާ*ژb?ٸCO֦7^94Wxʟ!~fONTU csW_AUEDd N$ YѝN]`ʼ0b}lEuE4w` y2NTRwa7" *w#@FYzA5c'nC17QɖgOWX=͎ ^?zro0pĻN|@ZO'0g/+ogk8:3#}orayLX~Z]+ ܽ¦d^YCe78lzV%03T(qZ.9oir8'{~_lo%o ae?ȯ!O.BOz+G܊NHhJTUˌM[5{BD~&>3#e9htGyISQ=Pite=\pL8~ig+=l q Gpb0i]:p ,C1!3OhQ/cj+7$jsB+ѺsK]  lX"W*Pt٪9~g(1)yϋ9;9#6勪@l&_3{zzP7/u*3Sjn"/CUpxۦWBPMp,tWxRKg"3pE&3ឿKRR%3n).^ڎ'kOc:Dz P<}_JrzѴbeP dymQ #&GeOsutH +TV48[^yDֽቑk6\D j gE jj( Aa a5Pl&+:n C+wGH,ͪ /m1*7ȊI+ 4*-jLURύ_Î:a6&Mwi=U8`{A9~To64oM@[۹Tq3*P-KnK(g:e<Hް)6锢e;fcx?4p_!ŭnX$0N)|s&n8Cnu2b,Th>+WۻQ)bN̻1E }UTE{ uH ;sXƨ\+?(Mlj8!N0릯'Nb]sW$$مX,o\NyՆTւsdN!a kh:u9콡3{ShKH0F'$ԼqG2_V^rSnLd4 zi&+z)~.Bذ!DŰWaH #ײZA+'u:8_LA~HeF9S.Z0;%LJ,̗$*L R5r{w&D  "XePϬDQUy@w=Xěk'0vwy`A*ˠ j8|; f! ǜO[yO<>*k G)zbw^Xs;2r5jN)VP^`[$MEB!J5TW-Rm v2"%Fbr}FVs|UfPk眯mSh|t>5L?*;s^>AG-2cs NwzrRbT|qg$͚.kf"UØ1wI, H<`ijOhzyYۡz_級y#*6yIUx5 1 D^p@yρN-+JD{b2p5kD<`NȲUJbyTNGu UL7Z<]-iU7g)r^$J'Ǩ?iLZӧaحMar?0s^TVSķ1TvO~pwM}F쒛Aӑ{ƗS<3t"OWe+%!1$ 9BǠu,φQ AG&W5kd>Rorm V+-r_sDgi+bibb@g1!B#sLWx`s,̓~)RY8e̾7"JT(ﶷ#ͳT۪xV+ñ^_8*ηIeA,!Xg{ѹcxg\Ckp~_ WwVkD*v_~@CWaPB?4h퍠}[a* E\&A:i(5H{Z$cv D3idc4lTE6]/D}V^Y05P%#yw^s<(cٌD>" gG}0 QF.ա\&RBm0οnjQsuzOtΚӝ!F1bٽ@o e|Դ "Gkl[C_/ Tj).PڥF~7(w%ȭ9Q>`ϸ(Y:.?ˢ8Ñ)<Չp5U.]ek:br,ACvLp~PØ s ?B& G쳫fD r1`>uFJǬ~sԓۮދq㌶֕h"mZ/d|=9dS||}o:uXˮc׈XR57#L'"D%M.1~+I3Cg+O` $D)@"` [=Q$?;ΚEW}DI5b#8j#MD˰J<N"E-Lۢvɮn,)ڇPJ""\X`ėD|LXL 2@".QbhۚʸIP- |#@%Dbu񕄯Mi; ~{Q b` FsO-V䢃[*|gU GShn8SH8I1 nV&T&)U +,DC%X\m{#Ԑ.X˽z=Y )$B}b@ 'A\VN|Z7ynhӻ)z|6JkY?nUH-JLe ,PL-ݒ Q/5s,{\3=+WgN>!)X ~c[1<@ǹC+B,DգlDþ!Vg%g8'>D cP,m:-#P*ɧ?h{_@SԹWtL8Q^h_!" μ&q2>z &>^GlSU`JXz-dp 3-ԃK[[08)ڛ7cdCr{ϑ@훉M7g532 \@Q)aY*ǟ⅞sIТRU<txLjkQԼ(vܴAyyl>zXt+CvRWK*¬iۮ #* a&ci2dRҘ{F2_Tdۄcs>ʨ[99In,0lULo-2ZSc|e6hמ|7~HSVU@)$ṵ)DhR,Eɐį@ʉhD3Hm0{( F$'ˬɻi'+uQmS1ĆA|&ӯNInQaȑ]Fֹ N^FF1 tib?Ysn^q`m#.vW'Xg.qsu",gPusrlF\T͋jipd}4$FPޖ;CU䧘\ŋ氿p-^Ȳ g"Tb`|y sGGyuvgyH2L86<|DzV!#x}/=r3XqzD- Ѭ_O5 w_Z#ƆFE&]x)"6,Nd|Tzc+H۞.}pNaidM ܆&;϶& kQn/6gGɗ>MpzJG+oT`yK\нȳR @^@:Fz&Cݥ&Xz1HBn͜{B H[]f{0`Ly?mxgw7?t+[?z_)¤'XVX-o{OӥyKm3}No7qIco Qax~Mb SBfgUl1/q9/.Жu~meH؍I2f4حDA+;:g-ןMV{aq{ﶽ(:&F4xCXHǰ- d!k Tri/bQq<߷/XJ05]T/,o.W}ߑtqTl+Hٚ2uҴ/0|I_8A7IGyw^An JJe"_gU6>ׂIOA@yPNA^7SZ6]>.>;{ vD8iS.)'3ʤԒ$dƏrlkJ/XL8S*'op $;įx]=vogSM mN R@KBݐgxG9$/=Qp0 1K.CHs?:>K[jًM=5~>B·SЏro b6,v/ vYc'E=Ҷ {|?]ezN0[i1e8_\o19(rڣnͤDžlnG4+X.>0h2߽<~][ҕ4r꾶i%N[iH<nZ1Y-T]O J#z@?d؊t CWi.OTcAzuyq 5UيeWY{@ϣg ;j$˪Rbu Ɍjx2%^?+;h1_z6:5 22 A=4m\ff{Y";yCg^ztpKxGxVbJ57b|xc27Q zJ Bz\ wxf@Q E 0V zEĥs&Ɖ ڀr-&j'&Gd0ju~ -p'X&N5Q퐈%⨇r(ƍIƌ'|Σ Xm6pf62;uHm՜Q^nM/&N2'T!1;͉ QU۔Yp/҈?`/Y`}9bUHNimrIj1q\,D]֍)\Ba{6832+ wa84 {ɺpp@ΈH# ܇rHLfU4?ySϻ\)/>m;5|`>*pF *D#_Nmx7@+͝^/>W z.B{Fy+A'**TĘfǡ[KACzFhIfMz9Q Ȍ.Śk!g,.@e\ 73k$EPjQ*I䛛 tFuVgLf%2WC,ekMo>vV#ni3e،#kwǿg9/CGHS6 ]?h-o^:0ݤ#kjxvׂ]ȽXZ\Rǁٽ/gpw=Ѿo#wtd@{L[Ob6^vW,)Nqçrm.DրM4FUFu:R \?o"Z/)\soi"z(zg˻ywmrkeKB^ d8Nkqs[#Ӑ 6lnxv uQĝP|<#N)GV25cҞUGzO1Bqbۘbn!?G̯u5g]YY$7+A'ss Yakξ!O-SI]~ ,\5皂i_SR pJ1kLc묹ByqȒfGD_gEZ]0L)}6$Ӎf5gJJw_s}dNwɲj7֦E^9F֊OlbX- Yy.S~%AcLV,yfn TE$/L،H\v6;/+!B\,J#A,Ҿ}~IV@=}UǛJ_"#g 12Ӝ}r/%p<ov[ǧAdJ,3.,E<msSq)78+O $B]Q>ojլ4a>GI7͑`UZXMЙF ?L>FZIЂ*ߑDC6ĪL ̭f>%$viʊ<#n^Ir>j-yYjBձc-uZ8joB}_T,54B,ḥ\Tx_;mC6Ɯ1YAऋ?oΏ605J9TK~"~Q ]Jh(x >̟ǟ嵏[ylnFkLuHFYɁ_.,O d~TlcL2 Mwq8qjt.̸c=L'6W)y 3ϲR1ԟ0KȹQ4 9j- j!{蔹z-hLv.}OjK^6 a&+'m*G lz97Opf|²rVg[J.:$ToMv)!FӖ)H!8{hWK*ai\G^K\=w~lfzwk$boc>AWTԁǎZNa7O1w UjrTu袮}ny:T  oZ^A&zOƜ1U Kt 2o_U_ȱ3NmNe9`̺Zzޣ:a*.p_hNTutی;@7&߀mGbh7Ե|Q f,=i;=' )v٘WkG: XAJeD=Lon -Bڬ>9V0[;7@`"L`=0: JISیe7dIa-C\5շ]^#y =1E]U2[D bAAӯGv&*4Isn Ϟ])3f2 <ؒ|jWA3O^Ej 2 fC0uD}X[FƋ[f6HDZfTqfL< WxL A 88[ òp٤6Ԩΐc勍ޙk\2s |LcӒO]L8씒G _CHt5CYՖNhGzմR0L%jɹx1L]>j ((U9UDhekߍjVKzrtۅ`K/xtez8Dx|[ϊHڪh֝}h`a Hh5;5aŠZhja͗tciB6\I͝.3#-C}+ʖӗ p?.lh..oxxf*{4Xtb 2&c(6Ja< Ðu<4Lqs 4%TOu ʾB!TX_Gm[ -ȸ7 Dw]%hGIetI~r4]~[Ƈ a=>Ǒ!yj>]^} kk=/KDVX"ˈed.3uQ]YhP!lO=Z$HO?)M-%F{ {)ICի0~3=Iv3PyF|`f0DR*]t@)K2&\E\?u,!%DFa L7ȂQwqWM=~q~fOHhh?UW p}|e;t)**It9pFOD};uޓ1eLbG6Uu:A 7R4}B7ۛZP()3֖TN)e ̕}ZG0>o JeJ9*Vօ!]:Ñ f]~94̘sw?n@B]>?1t`,B?Oã-|*ȼ2p,nGsBq~=vׁZj&68 /qQ oG?]k|u,- y59L}OcR b߬dMiDžTYZnl l}X Vp[ߴ#F-/D vߏq TdFHp4`7F0Wn⌳D [\^9#'? ǝ67!0GhB.JF3Ee/mx\]r-H[:/LR MM*&NrHvKUE[C|r^o"T - bʃK#DFiC%'ںeIn4ϏkkķPp15Lm(׎;<\ BΔO|23\Sv߲! лd+u,`OeprAr/PK qFbP^AVJ+X^;ޑl=a ,(mte|N M8ݻ3y\&pk<+f~Uʰ4nU%( f -{}hrfDHg{6YN<Ѽ AC OC`ZBÑ x]Aqd*Ҕ )AdUGK*UjfVt؈ yK}j' ;@/Utm5-:Һ'/c.D\Ci' .pr(S+\yt~^>JQ^k89kb"~_ye50U3`4(4Ɠ`Jd~<>agH;ZmĬק!pﵽᵲK(Ȑ>' %!]hmwɯxMWSV.[t4 HQâX+_BVáXc[Թ+^W!xIPV`2(oZM3OGR1_kHxȫFK(9=,?m40N,:/ivgKY`*3ga) =q, +Zbm)"6ň5] @1{w;l<#;6r! \Fb]ŸEFtO L#]E]rَ.\Z8,aD9ȴSHYtJgHouRds >ȹdZ ۖYRVnB1q}}'Ib0υ'*/u7x(TO޷< Ĵ!Ab+ҶcRf+0{Lk-Qda&X6}n^͵Y7!,f; rq{o1$'mA4Hz/b3>#,Kً&߬-T8LGYQ)㦍E\XwaZPÆ "Z-8 ^:p8L,Qf47oϕO/ܨĹXOF+H55.EokJa߁ tńou g1(+MghSP5:1am?ӶR3@_7G%8 C*c%g 4K>~la-ky8._L*~m&CRQWsۺQnPz27NbS^"fs_,@MLYC>&zbDxbU&'cjA"^ihEW_#}|`S<JAӯ6Ej@\]M2[oXjn.nx`M)RN'bˤQ2󠏕wv)JƵ@?G0o:˲^e`cA<\;2@Z"^ QEa?~~#4k&&x$ yZŰW|P Gt ,m fjZ^$|QrؗjRXӅMƀqvhIw:xPzGY6` eQ5YBƌQ+ہ$ g5EaUkp/dlRg?5Y X"yǩi]ӥdl~1B mP9KPDz">Dw~_D7=F˳֫#k6zh1Awv?^V N 8]`E(e͕Z950K}~*6hL0l\@E5of&z4{Z)7^ (ɋ5nNN;' 1ELRč3ٓΎօ@0EsWU^6gz-.n) y^@Q"Y+ŏgA\bch\92# YV8btpkf&uY# O}ɾ~KoS&؉0rH\.Z jMVxĊ ,$B?75jUA)>m 4WW>ܔ y{ ΋ qxnw!cl̊Ο*P;ߓPWYi:_:$r6'+X,rV}z*n0yD5 K4/Un++Ƞ[ƧN #(K;^-=tFݯș&POl=~AA4US}<DǠzý, |ih,A(N/*JX|XHT־X e)#t[CSQL6ʑעZNP2hp1dxaoPAQMebo<^g/qsp 4og #y_+r FolL:~uJgߩtoE0CV༁>϶PU~*Ya6 ")c|i qxP|lX(t55msˍ.wL^5 Ф @Xxfmkg+@Qs j$de[abUm!m^8rg`:vUrў^Ni࣠yg#U bb;8F:1KjĜDH}0Y9u1?_㿋P5A7lvb )NRu^-]D- ("rqZ_rq&j;=&*[Q' w&|  tzOٟDoݻzdS$IHm.1uTu'=>UDknSC'{pȎwv Q0p z?a’+ {2m 4KbZ0 gӒ1*bl#?`ǼBkMlDd2|*m!w>":sRɲh;o "OUVIVN:Y*f ? THV%/٬!O6?=+4 Uc}/́Kp}z6I,:|XQQm_(G{`j;b餋3b"biXM//`0TٸpL黔/hxGZHU7LY&?Bq/riԞ#n40*O`,PLqL'QMExE}8h8E0#{%vʀת[k]N'9%֫he?¶N-\C&ťvagAѥw[~w-W)PC# s:Dtero)poR11Ck2'i)^\BZ1Ռ̘QU.}NBUe +s$Sm.(uکZ~ƃ!k{֤fyFC -[℞|%Av873'Lqyh8Y:HMdt~(SqTi ^-ĜGt/Hj3"P<޲$uV?GL=#'!P{WF,[%Y?]Uq+ɋů"AS`a6|QыTӷ'J>Q9*M$Z=QCl0{€P#K)cpR679^;/>Ugb:ʸHSeYm}6Wb/YË9bӲkOon2z0S 69J?PK'n\:($Ɲ6 U`50;YH1-m9{f<%6JZDf&՗M|a778s*7@%]| Zq@bQ؆fQ޵"B%u`AwBL8SHjW]"'$)p6o֩_29{Zc0o.$UnK; fΧ.RrEŽ{JR+Sb(`T>U/}g]ҏ~3#cN=!ȵөТ]uFA}f34/q IT`o9UjcKhZR{#iO.#J-;,O4P߅?ʲmbGVr\@4$4j4TCd€*yM2R͑JnRD"AxcDtC2om59BZf)_\G..V)kۃ;O t= !!̌anA~P#r~lj^՛JaCA]HieVy){qQ"52V$@K%|*)`쳮B8{8d5SfeuNQA#u"@3#d?y}gv[}DU?`hkrwTq^ч.䚛EȍLYN8qf܏֦8]X!؉S15<^;>܋h-D&Pld.'^LTcF ]~>d&TJy'9G.6ܘJyT֥^Sr -`Ë9i`ċ̻;뇛7GʉiX? ?w]Vqrn'b7읟b{v,vyhjӢI LEmڑ$?lΞǹ8 qm߆Bd!9f [ŀD+5/Vtس_mkKq7K#Hg6)Z6niYI.%uX׀F;V9tsmUJzM %(S"F\)]r"O~IJZyhJ !qq~'+LBQJDCvF$-dqKqt@U6"`K?}o0rVp-]csogBU,l$T0bM@1 8 %u{*Dp6%J.^ I['.K,a~aXDLTZ5Z9idS| 7ŦJ2E.p`%m{+Pgi{CPVP>:9c4Tʐ3wt{ʟjh)JҡD" ,ͤ\`<Ҫ0KV%E.$ٹ=LF25$[d{!8Չ+'H`]auNԻ\ysW}ĸ~G f]?7u=c_UQx"::ZE}A id&s޴cEi WXLw>ρ :J2DïC!cj%.%c-֯] Ӗ`!x,.m%UX\S- g#P:G't>I$FFTx_֚J>K>N7Yu~+ Qһemc%v1e,C/7 Pe(&Ҡ)ڡ(VM<}SC|,S/2h>yxż2RS,Hc)"Y(#Sٔ.#Z' wn5I௻eޙ:ݵWLTщ'byTk_xZU =̃yA!ITy׀ }֗ga6h AE3rVeBIb1:A7'Q㬅:=g0c^=21ϲvW=FۙBz)po6L~o_M%ܟ B@<([J[,I/qLP;N9ţ*I5lAf^.x5\Z$%xCղK E%$*h`6~X^[~fM[?6iԑ{̓Jo$Stk!D: 0e]h"|pQO4\,'B {٦ҍaNb[nHkNj -%* cJܫĜp1[mxM pBvB@P-׷5hff2OUz,-g("pZOh5Ÿ{c楘 D[0[8t+ei4 l5YdGt=e$U>!2B9M@/JAK-J@S>x3O*iX^߯ySHtS/PZ* >Q=.X;;h ^@&W6'|sm.䏸:\qʥYSQ(/~f: CU|ӫi|I<)֟1t0AĄq*VvbJ䠧bڙ䙲7.(ǩU~_nN%(JWĀpr'7?Ð^\[$3D$P,dʷ`VQKLiqR$IbrFM[t=ˆf17~ UvCJU[/e+3c)J- cߔ23$PkpI4(2d A.k'jB{k#"߰v<ۙ1v'p:]PN 즴;ȆN1DLv=jCmjB6ECS*%8}99?ҨgJ\n e)TG5vZu:%:4b3Q˂Ut'hK<"03MO:#LX򺽐Rbf=u6xCIɡHEt溆z0jѮzTt1dF֨%| WM#qc{uz84iG'zTw?gQkY*H4xj"uv#j-~VIfLApw6Wj #H# zrb"{icBeO+mCuDc~@3mV9K~-Y:F֟G9VѣLL4{˰p¾@!DT{!OŚA%E;% '=ԓXU咯oAwMa$ATw@1$N滴Iaw1y24"_s'dCx16NwHChNO'C8) gΘΛA4\}Bȍ@'1([1,[#_^MFCjp ϡsj{j1` ~f-1tCoVXǓ2ЫE[n83B]=V(әI.>M.ۀ{aJ베VlWPSB( \ߥ>`޹\qP5.GND3Ý*0JCW2  r!Nc 2_C& bh LB:olk?}0jhZI%Ū:#\+ 5POg{MsxHzMsXa~)0Gz|nH!5r%ۡ09csFzVm*yi#'&!o\[ 2(T"}^K}N~Ћoy !v$+0b8Rh" qMq9sav1+ge".,TFK獙M7ƋX U&2 ( Z 34x HY)p2dvWrhs=$uDB&[rHD tl;֪!to%!|I&4Y]ƾGd]Kk MkHҹ[k2h) o.7:Qqe2;No2 &t'i!b4Uo^׍6%CfFRCI 2Fj~Avؿ|yF(cZ=+RYVF(#o@׬jR[r[fM,srqV%C֡v2辰հO'wjAŔ ;X{ؐb6'i 4Rd5vZbTGzn %P}N֥L5ˌ-w4w)z]2<T辌3P0jӗo;z>EC"m=~NB)_>e8| 9 -]ϠLntg1Jѣ24RZiעjOHZl\=} Ň|`[/}:sğ3*zF6CL.%Y̻ OE9A^A NB1,Ǽ~jB͢gaMZSzUCr_{6˾D;V[1o:!DCiΑzEnБ'$_mC 5:__$)uoSy=h"m2VY r."YGl4|>[98C9z{Q*|(@Pz-1dXmDaWz2%-8i?h﷢/<# Ny9لQd/!#>g8l8)0R$q~>/DIx$/@CA߯#g^g&<8*@ = >QL<`YkIgX )N/8%:2onHbpA bT7WC~ړɠпW)[ Op'xB֦ 7,m?H賘lXdWXZK8]+L9 %q+aj dАqW_2cANjҵX7DHFwp!APDH>=KIԮQ?L#JGgĶJہ8VuD O؉o<aX|8Xۭ`At9ON1  ѳ>L͂7V/VXmw凈JZؑu2t` h=FG]`@~ᅡ6 fU`KhV?8Z]N='r̡[vb~6}эhʗQXT^IAP] >^yΛ )s 胕R$pceLu0OUi?5 \X~#BYP&Qe -ʬ#pos]+x'#fG&Pv%}օ9Fl:d$^ U;-x1ez bhL;UkV&NsyN IVmHUj_sM"7_:1xƽ5b<}nA w>Vf-*IX!Tâex$x,9̦؇8Z}gR[+Ԋ`pJQR\HX;dB\9w"^ gĂq?'wB,E kTӓDE_P(^F S-EyJ( f- BJZ}hpս%0?.;1vI>\ np7x=gboc^\g_idl[w!ר8x_^uGUň> {FAXle=aHo/':;y3f?(%D^^8Mbd '6lGڎ|myD;F;Tg5tO'DQQߐ5d$߷ʑ+t1ҖA8GNJfa2N,5WIB5ŽHmm]i3 M&AP o>ŰÏso:4&ג7 ̽/_F:\w -%'n)qb@V;X ˍl['\ 80=oA'<=+|zZ}0IRȌVCۦ@QaXG8A>h€ŭsԭ#C?X @Zgc^M,\fin1OsS,mB> s rXT9i`0UHCSyJZ[´xeysY5 ܧ;:z=s0ӦՁiϨ/(Id+v>Q5" ^sQۥYl_ky{r"%k~:{!kM8"U&Su=r,)&Q[SB~Y3-L4X J׷mw9_00Z:b&@ dnP׋!R]ҁ؞WSg~,#cV'P&\:f*B}+F}㵑LNF~1Ҹl̐ qH`W/< ,{CaۄC-fGM=֫'TTl3=_kUxAK?)ZDC[0c 1=0ٞ9Rk&U bRMp"8?:JI#J}&UZpA&Գ):wQNNsGť#.\9yD"Y(TUd<MX>+`,^ҏjJY~()>-GBގPO\K,.^8Y # $bTqtl0Y~ 3QUT1Y<7bgoWiDh˵+j$3G4O ajX씯b5m*t=+W6k8 =LJ uθ guߴXF<2~(bvDb7֙Ӑ84.y{[pMQsr]֬%"͛|nW j YЅ#H\PxJҚToPtH r\Gt~7/&qĉF/nuV3Ե٣S}]qxx0`FBHkP{>ELx6'wsg_HG\b@%|ץ'/LV{Z?7"TW ]UW" ͱasl \J*Οˎ-OZ4@ h?\Pc:_eikwx` 9"e+T\]UXF`H%^י<_n]t1Fd*K`y]+J) L3\4L{#?;Zf;u'Wx<2u:ƺ7b;PrŐuZrO+Ʋ(u`d*WTP\:B(D>AmXa'b0=FhF󑮕Au9d&1}%-:s #c#UCa:"ƭD Hj6DBz'Xg]HhP ;gdܷ@XҌ.5d"$ІSd/`=0gWg&pRqT hǀ Ze]V(CZmfjS "řZG()r*)LR{d\~FU0.`B_Vz)|0N1\. ϭ_|\![ EbF.^VQ>q)"82'.RmWrr+'0 ᧈDzW[6ēk9eɽGző;m/5"^E4B%iĮs$>hITs)bYŀ{dx8WXi#,1?n F9<O ;&{jXr[kw )Gc aK]T {R1oK҅t3u#A~S1Nȍ}ZI8sh oZlwo>;8 # 2%`7G< #'=5SpDQstkOsu[)?MܺJ z#uV`V犵;!TC;ӨQ.(KsfH I|9܉>E vrߊUe_+"9u=$~-uڷ.w^fnK'.uݛ(-\+n,Ynfjy r4xM \5rURZ»u"*rrX]^EZ怒~(c63 Θl8iX*A%O눥chF BL罬窏vtg3q3^7oU#hO-Kuubj 8P\SȆ΂g)P@䞓ޣ-Og{0,&'}k- H:þ]`<4D#Ł4*{aKR&tiF5f_)OqG$HՐ> 㙁B=}>IK<2f=OOr3K,ڴl6 \NIJ|A7ojb s$X+1۽]B%xEX!r1-mCc|U aٴA16([+yy&5 QfT7(vKS:s5=75IJJ(gRNG/@ӇȮ$c>).F0eE#p%ed`Kƶhi6F|77C')$)ޱ10XTx]n6 r))T1EYQN;Ce]I`sٚTe#h3Q;(GS&cƥNf`JVu\^.HN !Z7Tfbq86$<nZkp&fh,XS'n1kZKOjB/3Ј2{Z'ۗzzMI1-0˶O*Ӝ홄2|)ڞŁcʉYsLﳛW[0K;݅2 !=]G' i~twɮh$(M.qRcwf,Sqsֲ̲YEbIY,\# ͝Mc{Ї  a, 2\ 2xr!H?*'M;nkl6YDŽji\\ `0vY*SAzΧ UzV¢43~N(~$#aTxJ"}M6+DپtCG$1uᥟ\1a8ZU iPXl*f@1p̛K9{(k3(z$/s;Lo}_ _9S;j ˶Zz&zDf xѷCBTUk]3@u6Wcu5T!dSG F4ͼfl$l.gFjRV2ͿdNmN"n_@6%;u~PHp08E\HyIĆ_([/L@?d!nr# l9AD=UaHoLvXod=o+g22sVҙ٢hI) %pu03y^ E/Xʋ6>VUb0b]%5*g0߳7rcMj6pGňTR>l%p3QtAKC‡K5qXG cc^oq9 GThh2cySvg;:$?,:${ gg"j,OB{UJIC7h1O7wC'mD{E33푫2PB7k[fϩ0/>7vԨc: *+K*0,')iP<(+0`,\VԃF,͡=R͕ZCiV™iM.՝FK2Kl#(s Jg'^Ÿ!I-ɲ=c-hRJqxjuس)Dq9 s JRDh1 ͤ5D~ [4M[1wc A|TVk!{hsHy-p\hVӔ!ºI \O bzsR€NeN'`.|?ӚfXKFٌb5L\|;- W/:"ZHQӔ3u]pBU ]n1@1@YkN*S#|o|]tC`bCT0>T̸JƻEowc+夰&e2Y,ž);\7+[%(ޥ/dE6$ZI4X{K824>OSw+irJr\AEomG&ڮk%}M 0вڄ* Sa/U#u/;5vr Ҽ(ś1_>5n2< me"bَ n>RK|Fw\N `y!sw[(JB^|z H=]^Z*%}x@)Õ,?n1|)C^ksu_)?ފbN𗨭.#fyWi܍>(z@ϘsZ/]@Ywa%%@.KgB6`OчҞ{!.|s\|7EEk%2~E&K& +gL,av ZhDK)~Radž+s,x4Hj-~L`'Hd i'Toϰ\OT"'W?SЎ[o,Ul"Z;wCD*tW_R=M9̝cr `2oX4ȇÁpl*Av/! \.a]/-xCMIj(WP.7Սhhڟq FL%Z~?Px o\yb7Nί%e~޺*{ E ,Ojjt;os.'DAu 𼥔E;Ủ|:Ĥ'QFO>X mlQ4 $)^{N\o Xqru54׫ٷ\b{/ܴ}բ)8##9C#n 諢Vv`6deIϩ䣳ǐ?r鬩,#G.)P-"y  ׆yM^7Rv阭[2@8͑G'lK|13hE>vԏ,W#.\x>dzp}D| \ خ:m${')C)į/6 U*A--|4a c^cWKlGOA3Ы񞵵o[ÂX ᎐BbI:(0 C`f8t a(Ҩuz&d`Aېu@kr޺W wDݥzԥKcϹ&@ D; W"uQ|s{dL B{o7Q򴝟'M. Ew b|QŽ6< =l[Uit~>6LRyfΠ)UM5BƀhT:)A/e[P_nOm)W^]qOi ho=NCu~ݍhvLJٴ!}ӎ/JXNw]"?rf y524.qSvb2$ϵ4t`vS>7dwĊs,?F|l nBt CƵLVq'h֜Զcx}tw==MbFAas`~q xKl*|qkH~:@fBc^AΌMR]|2GUx6FL,*gj;0N*@@xvs Qu4:ׅj:ÜM Wbo9.Ftx[u"w}1'FTKa "+l|="fIEFv/CقPqNz TrӱHs;@\vPgL>0 YZEpi/data/births.rda0000644000175100001440000001176212531361106013706 0ustar hornikusersBZh91AY&SYMM+#__9p<|dRUU]ǘPу8!Du MMh< Qfڍzzd4Ѧ=M觩H†L!OQy#MM6 6QM aT=TOT@OQad` &#M 0LM&L#0022i!L 7hihdL#L4`M4CLC&C4 4M ɣфLd$DѠ@ A@ih=T4SR~ɣF2FC LA@4hLFdh i &iЦCOS2h@hL4 4zC'1hG2 #4&ĻIu,@G*У$I$I$I$I$H %)*m` 0` 0|?;+io,SfzRI$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I<.Jz|9lH<’cgHz![O wo4Pd5Uw> ! ^0O@:y]ǃkuiYƷsgvα*|C!Ygt8n05̧߭N+cҪRaȹgUӊ<47x-9-w닥]C6Lx>M은~ͬ/ne/owS}KH}םm?̾MuůgRڋ<=]wwWyϝ2ҳ˅#8ټ\NUo.} qxe|/yI9BcYٔii2LFIrnihZ6*Z_&` W,PUZY-C(q$2ڡZk[ZXs/Vg0Uaڴ-¼.zT[+MbZ[!J%ԣ]ec,T3K6nuȐnd`"_y<Ԝւ_%v}j'=#zV 4u^-[!,fb#ж%1lbV1T1B^hHKb8AP"c @n 8hH5-;Զ'rx% UJ!XB(SvI bFHwK $/"tBBI!1Vؒ*Wt TU17Uwx otvJr;-ǧHj}ҀːKGY.Lfdɓ&L_ӭ ֚m/Xb,,A.`zk71x娔 o ]AL`!|YA1KPR>]Vb"MtPjХ& >]mmmm1r&0ik`y8.Xat3UUID$RI$IJ!$BI%(JQ $I)D^o{]u]333 4*^Scݻv /2$cX ۚg0o.cʒI&gdfl@F[W1Ɵ)f]y=,|cKc4[$kHTB(F9UB*)K H+o?s?zf۾N"Ad*$HDJE"ZqxZ!_qa:A-_e}nU ʴ^A!6gnl"Un+'s Ӈ.Ήeᦪ0rvc2`// SQmMMMNLHZoqrqTRJ*MҥJ&,E$B**%K THjE"OKKgO dЧD61 "KtBBRA@Dy~,PRĂ#VrYLHDƣ:戒"B͌ DRTtcK_>ld$ J2ee2CM0`ٛ.=,2UY-%PVEEgWS>e_.ճl)?fe w5s6_a(4!4RI)454fϳ2ѭWOja,,V7wN+IS^[G[\+5|b 229FUhFYԮe!|O>|I&L2dI&L76"k͈ڤ`gW#tF=頌EJ!_U 5 e`-,n_;zZ J,x5 @ceZ L̔[ASo #hVНjPlS8.9YL8$&D$H"G 1=rAMU`#[8ax~ز͙E} 󕍊-eD#/襻֤ۣ0viٚ4r< 2Z wPm#:O):WΥa0ņZ4ruX.0ʶV`u/0Y bFukF6-gh60NkjJqNPr-kBͲaT7Qݪ aҴrJU8@SH I$b"#At+ot>_BQzq4M;=='P6χ7sCqˡB } }p`3 1xKrRDY:㄁z2?>F:u(2朖'f&xhTr}]f}R~ f:\KH*,XbE,Xbŵ~jX;d2:=8TԿ|A{E'L;or ,*"/`P<  K.r˗.\irƍ4hѣF 4hѭ1!~tҕ+U d c/N^:]+7qց#-nvꅀY& EH"D$8"DYYD.04%`q{̶WX`92SH65lm0.=.1c?6٤[# :6.f1""DҊ*&k.i6I"Z'sL) O.p!Epi/data/bdendo11.rda0000644000175100001440000000316012531361106014001 0ustar hornikusersBZh91AY&SYg.\TU_`?ߡ@@A |{@7POTTzOLMm4M 4=IjM *=@J)hb4A C@hM#.L@Zft B1y Q R&^^BUP͜ %NA41 9(rQQCQC  H)|.z/jWWKļKļKb] t.кBZ-EhZ-EhZ-EhZ-EhZ-EhZ-EhZ-EhZ-EhZ-EhZ-Eh^zR]Ku.ԺRhZ-EhOx#G,HuIZJX_fx eedW~wdg5ヲ'QCyy6b$R:CϟO_ӭzOG=Z4ۣ>8ͣFQVmQV#GޛQV#G6MGf{ԣGKGf{ԣGyԣH=zxsSoniPonM3 M=iA=7fPonM3 M=iA=77M777 M=iA=77077\ÛA=774774ݠÛzx377榙4àÛÛzxsQo4ӠÛfÛzxstzxsSo.͠ÛfÛzxs zxsSonnPonE=ÛzxsLzxsSonaPonM M=7zxsSoniPonM3 M=iA=7fPonM3 M=iA=77M777 M=iA=77077\ÛA=774774ݠÛzx377榙4àÛÛzxsQo4ӠÛfÛzxstzxsSo.͠ÛfÛzxs zxsSonnPonE=ÛzxsLzxsSonaPonM M=7zxsSoniPonM3 M=iA=7fPonM3 M=iA=77M777 M=iA=77077\ÛA=774774ݠÛzx377榙4àÛÛzxsQo4ӠÛfÛzxstzxsSo.͠ÛfÛzxs zxsSonnPonE=ÛzxsLzxsSonaPonM M=76*NOKop.: :oVh<^6K,M9SϞzl ggYލ_&~^fgX{2^Ic9^i=)9,O[Heg6vU;H^o77^aEo5FF=FWC7%nb\"kѸ.z-iCo՗ Ct7ǫukCzg.waEv3qbMe'9^M7KҧQ^˨'y\ʸnKa5~Sy-9xIr/7ڥ%\v1moֿe׌_KoWZu jהa妾|]zUxPylЪ0itKn]ܬO:G|>vTԭ1qV|!^d%AӍuUA95V*y>'e\O1tQloړ tS|a*ʫ2AzZyCG׫?4m*e?oOUL R+ rf?ԿOk}U U5I_U;UCU?i2g|tzU6vf=I~4GL~}g|U4U`kWӌ=0*K2W5orǾ毪aM3W1WfoH٥q}UC% \~S 52xᷪ,Is > dK3~zMFyccތ73K^USTn MHͲrv?hoGsC,$y y*W{_&;+_ oʏmʗjo>|.?*ފK%gQO1_52xŏڛ>fi| &>3&G?\2rGx֨͌{ ~£]l/x^3oGHozf72xs?^Qx1csm?I3IM<^~6(}|$HrQo<35~USKs_{j~Os8ۭxs?g>, r)(U\jܯ܌s=b'LR?HdhaoforKW?Z>3kSQ_7|%*_B>#=5?JOQ3cMZ*Q54K_#Mcך5>Sy?mg yn?H/į2Nj?V~26տy8}]zW?io~B/*~`LM-~3?Mg_f^Q{?~?aM|{_?Sx82 yOy"oԫ~¼(W^yQ*ڛb?oos%_7k/Gsœ4տ+|Uj=fί~Jws?oO^W_eWCFZ54xŔ(W~LɛTM|2x3_)>a^?YAċ|j^by?ּ75[yXs}ja_} \ȿےoK?ɗk~0˕/7O_SUߜ|~ۧ򣡿/zY\oJߣf~5ףR~I~U?3IeEN^E>70th?T5_򧙟 _*h}ڏNsg/*r~[ ķU.R9/V^F}oO1slċ6Un)HɎ{Q.i7·˼?jaL\1*<|>,٠&~U_ 5O]sM7&MWܼ獚_ʕ}vqQҳq](U~}T~K%O_[J{GkO׆|lƷq*ޕ%Ozi/<\_>-hҫ ^y%^r2kuG8iCvzMvW~Ӹ?C5ǧ|ܨ/e+?J? 7Ǵydw~HѼߗ=qGg}Fy3>Oes=)4UOyn9טTx#~tnn[^Fl1\RrMݕogɓGœ N*ԟ o"ۑ o)|#ŜS3a¯JɖGE+l)\i 1RQ OP(7_?c8ydno՗|/q_o~=].<KU.Tj4dך'Gj3z˿?+M=F^|TjdinO.|h)|JGY^~/{PU -ykR /^F%Rq) " ?k>V#OSM ^^^xtdޯl_~( H_ҷ5˅s~\T!/*irő9i}Ғeyl*g;MNhU PgKG7 ^.\(_Owj~a}3wo Om(O;e}Gcϧ򟡏pKɷ|.+Rśڧl7qLv2&jO*nolw?]}q;U)uU|h>Ur7%Nlpۊ]Rxx۰]sיTq"՟)ٹk̭ڧ]XOx{[؟oϳ%;wS'慮,kWv/y7=^_Rrה_*Wj3-_HgQWRr3M{ylwin^6wW~xel';t&םwIK:B— C)׋lי_p;}jyNzt|G*|>K*;=zk>yNl, ?ʯg[듦֟ҟו7#U^zTPiN,Ao_T.|G?|$OJɞT.cO{V\_仲 _ye/=zmț_^W[Q>OQ'5P>IK>8x^|*~^S _G*ʟLt3uQvygo>R2'(Sx!O_ϣ,R廗%T߯W)Os+>?5_)dS>S6T|!u/+@{Sp+{(_a{OSvg:J-?^4>!OԞʾ/R/GxR\=oޞ?U9iԓuߢ&sW/ﲷZ_r<]YOz4e |3h>_QRk߫uPS2s~Zf;Kk# /+/.}uN,W~I^k,U^eۥ£ƯyXM ߳RԌW,R4^ůW.ǧ$O}Y}^np\O/RcSq|8}(/O>5>O֋sˍ:NYO}|tW++f}ٯ7j*}Nq*}*J}QSzR%*S_OKP믲Wպt@{^K*ܿ,|~u`O ۥ1ǣ|'-O}_?9NWoR#IS"R_ǫW~Yԏ֙ԟد'i$WnߏS7i/Ni)O-' %ʧj/k]jKCORA^ݽ9N$Oҏ_b}$dR_zD^Z'{8dA5uœ>Rj&œ*~u/j Q/{`[G۳80Y)o0y ~Z :ꖟ¯!ռּ֏>_&Gy}+*oo/7?4_ O̐UN=M|I9>{S/OEXj߇boO;r.T>ǓTyz(d{tSPӛ~g0պ_}_SXn?P$uSx3ǡGx@S~0S=7Ż;(/ޜ<6l7Wǁja)RxbᬧTkQOTy!?;-?2Y^RT~'Q}ҁ1H< Zkz)@=BN}Ny^՗rysY䙯R!>e*gٔu(:jUn#ؿ:WKwW)/rWRQb,*+R?5dy4=A- !/?ŸK Cy?| d=Skohͦ}9ųqE^,OF_HGd*O`=gCy}F\rxF1^^@Q/OPKÍsYvWs3L>s}ҏP+kh[_zXuZ*_*>RiRU|P!{ ȳh8)}W5Uk~y|$ɟ#M| ,r5c(O Qy|}Hޯh5|ǧEyl8ӼZ ge?a?O~ROޔ7(k_O\Fo{<K=dG9zC}eғӉX^@*`Qsg~S>rь?u g~:izsڗQ}L7Mel>Éwůa|ny§oqkbVZk~c )G)(G}O/66c ?zh |)e1c+h1VO:r.K9ZW5/T8ȿ8?RE}Cw~h(ۏ u8swlRo6ǥ}lʑ=4kGvHo/¯g~tX]x<aʇc7Aqķq}"gx^W^@:'p_S/1Ϲ uDzp'H1_1頚ǰ0׍<ݧ}u00rFR_c8Ǘʧ_#Wk=1\,SjJ^ơqRs^Qu_3B8hyIO?i'2޵1rO2~<2^K)c?YK>)wxOTvr5hFz/oaoFj>§ƯPMݟwoUũLP+5jqc$M@N|uD˦_&Q/㓨^mn[ny7ˌk>X;rGz#h#WY_~C^CŸKFёy֓£GP 5.T?~}&h_Nq)jQ~фtʙ:r1xN'Q &#d>$gdT+ʙq 'ߑ>t_9* G9>3~zD'Nɫ~KWyek7ױ?G#t4ynCwT_Xv4~K#S%~u8~O3zMqDzK=q-*O"?Rrdo7MxG/Hdǯ}Ɇ|;'*& >&(Rd/!Md?V$?Z|l<<6zi_T{X^8IGuR>|Rj~u٠$j>I{N8叉N:٭$`r~ ;S?ݷL!NGߩGq?UQ?/Sި(Wx?vQ~SLt>L~Cŷ5*OZL'I~x⸴0M}5'P87}awX㸆nZ/|4WM4kMOԺT=S~?d ?)^CyZg:NR[sy9Ivɤ.< ocX>r|uYC|tDJw!^c^|GAzh=2rGPt떠Eq]}jIT>d}鹎 _NZωWjݭĝ&s\)})B=dS9XA~Q凩u*;rs85ETmܭI6wWd_MV>JٗMe;㨷W0LshIN[s-y|KlxwUn{Lxҟ9u( 5k3r4OSdWOxͿ׸<֣DZ$_Ʃ$1Hu<4F*3v:Lֻ)X3~ֺk}~4Md;3Ɏi9GNZWxsh Otߪ|yJQ=Hrq}iN:ys>|Rxa)ZNM#/|Q_ WS:3WNnI_,>| Os>d,q( Zk}HujjϹyGQޑtyZRq˿SYy\db|ToQTq=rSx8&S4y1xL9ZigD;hU(?N{/)JG)o$O))k} c_Odg?TݣU t%>ʗK? > <|[Kr^vhIz~TrwpƔdSrrtymQ\МIl9ioIO.)ǧx}n}r> \}dGvḵo~sna=# +yT9N9ZGɿ Z_#`*?JAگtxV$"›%)i=)Ox42x} .gynS?9l']-?TzQd\Nǭ<_ťm2Sz p-[Wu?"9cAQS8zIQPYxlS~]_H8]4/ȯ}V$T$SeGuUj^|ǨTia4KϺotr؎vևUnwrZjxu?y\z8g;W>;k?֟DyŸR/o>FԺ~Ce??S/h6i}}Rn{5O'\p)NU>6<|00ߞv'q\9o䰜֫ӹo|49!u;S|c|ylaLc?9j/ ZG)?jJbW9XOɺPHdyBwt>[rڟPRXFshZ'(悔gC;h]I#/}=ϭKwUCפ~O6t_~>ouA okN=߻ܡoJyz`ǘi++eP?ꩼ1iN[CyN;SO!٠zT)=7;z>bTyC5w\"w\P[yXW}ذZO~'z.J/kֲzG?a:ScWCϝh?OiOyKU}:ϧ|C)wӉwiSG7h~ᄅߵ^ޛz@zދKM78TU97:z+>^־`<4:Gh]R!Soȡۜ&z(泜TI?N}Gs>/xޚm`{,c_?O*P~>S{,OIyzh8K~Ss\zJc8u~/{DZץ㢟z_9.^y^h?gX.znPɩ|gվp8K>VϙMNl|zY3 ޴~UT#?i?\ zW8zVϱGqGyvtޘԹ%z[)ۦC=9i<GPO!{9ُRy=zFiݣ󌴎JGqQ~[M] sJu_nu|߫%_sG?Y(r2ٿ̼3uǡs~QK|S<:ljrtOy>rc3sc TBQZ)RT) OzYQT9ǯ_@9G|~oH [eW*='!累?{g&:A :GLbsU{=)/\<ROG Y:U6s2AuҺEy%=sϨs2޵΅My8~5h!usOޛj_Xx>!:Cx{GV~O^{Gw?,.=BY :ןwRвuչ:M~3sƥOun>G;i{FW:M :udK?^ֹV«5}Ή{tιS|(W!x_Rl|~g }!]=:8])O}*vO}N~c.;;*;u`u^w'>wtnl}BG8>;uuIWjG{:[+soi5?i@y@)F':_s]'dk=U%GASagÕ.2u~zGQ.].IyNM?Iz ZΟt~`=+tSr}WI?4hIC77zY'+]#W4 >Ϫ{w\j\E6F.g7ʕo+;>d ì/u7l/kozs˄ŇqkzAZ<>^MV{Hu^nënо)GZ/5,||&^V?[OlCK벗U{_r7yB3ԟ<)%_G~zBjWy&#jnnxUΚ&?xg&;=->{jK.*R=Seؗ۵k>kxkoeytʊ|ZVGU߲o% &TvݕVA@{2-_Я|M>jf%8G%:>_k^PHȋe7vL|w /GBS!Ϯ;={{,-Qi'-vj{] ף;臷1ĒO!:{8"Lo0 F{E?I);20#Wと c<2ʿz4|l>>KN?+ۯ{)p;`n_z6vo:?1B 6},JIWt| 8ȍ]?ۍXF߅]c;';*NG+s!'F|}C?|~kh ޫ|k=ȂeK̇qǮAiGALo< GO'5 :6 τ|gK0>-bb<`g{pj źp?2< ӠWxY_v zዀ/8q%C{+/nо|-x)h>8oZs|ᯈb:!9v ={)`S7ށB}ؗ`;aE3I?a槇Bo>b1YWfC rwo/34$> c/R3aq2s ;P>:3.{ -hg_ }kw/2.ȳoRS߉;|qw!%_`xJ> xwW7x >xh5&ᛀ OiPNjDd #Zxm[C#C{{{3gEdħ]vYG~!?~.ޱeG/ξh-U FW)%ݠ (XJ|۰8W0]EȇtGA8O@ܾb/%GO_Y^#maG<3Ro$qpu!<o`%!! uD~pqA Kp=քąqNBM~GΌs\ ȳ_}fI\3a@BnqL<2_pEdfd3]8荸6!n:nbYaይ!kùr9q҉|)dc^O,yQbaы&o GX'4z?˟ox@%3[+;_"a"_:nx[r;yYrGWP>6}ѯgE&|geP-` Dm :}? à` ṰK1[Ywذ6|0 >'wkhZ@X#h_=ʯbۉ/>Kz&*赔$O@/ ?N]~/NC~z8k;\:w5?x۴v9t:jm׃0csa|KxE~#+OA9tqh>ѿzO6-IEPukh/q~ !/t1rbW`<+o#oD>1]M;F!oy_||{I/v&-ch~wy#DӰ{,OE1tk3Ɲ?']e?7A|8Wz! .k0vng܍t@ԯ =}%9'pyv o3|#~~ ] ЏgWQ8 3_ ]_ |?=?2?]Cx{3#;Ac30 k_qn[ ^X|=%v3ڳѮÞTt qv|71zŸ[L~p_O=_"ǿqi_+pq5<q^Cᬂvs~4qv:6xyNL$=2qv;wd s=BN?|r;Љ@#IZ0ԙkCp/"gwǡ_5+߻H[q&[{ѯ:SC+Xvl@e#uo?@{>>z HOe]A}Wcܱ!??Ob+_R݁ˎP??D`W=IvLp&`?gB^p{F|Vt|kgvCAJ_4Qd$"j}8qE<|?h!S`}sS/G`/068;"kv qF=C/"/2.!AF`>Y ga{YMLj]-\?$^7v+ȵkO;WbesE ĮGm"tiN@Q'LAo^ݡgz# *F΂N&sg=7-9k1;Oi]φ޶oC}[P/v6*H*ֵCKԏl1;{!< ]Onoy->\_t }=b] ?Zb[Otfך 99Xڭj&pv@Eؗ1DXm3ԋ5\0zz WR]CJ>8;-$%fVhors{㴯oq=ι 1ۡM?Eo&`( ľXȋ̆?]'« o 8Nf> A *90`G%?EF͆''r<' y'zOE>}_)'6z>C}r+{,gޱ;ӞwcM)0.>Oag!xN:wO][b]Ixȗx;ʿ=\_[COq̸a p >AS6ylIA{i"N#>~$CTʋ\>r8 s a< 74 ^p.]|7Cp?q m/<8uKhGg~l 8Dk߃"Գw ž>~g~`؅~cEp\7]쬟YGpjCzG/+'kr]Y4pEέGk? ql}1|v=c6N|n&֟Yۇq_1n=om_1>Sģs'Q?pj3  /gobqy"p/n h t_8lCEj04v1 EP7'#^,^Mi}?L; ah < ]/Va y1p~#~s8{zEqP/#M\#_ DOXh^[Rs?Q롯iφ~ΐE*ߚqp >B:y0>k7C:đSQq1rV%Ai_(p?9L3aĹnA!>?;#ا!0%TswlQp?3 8| E+3{N/W||ǁOP;aZ7ܒx>(#oW9Gdq ~G${}s.f|w)rO%=-Fję9w w/rxwq o]/ױީ7GRO\7pgnߧh2˹`)CW0^_ݦL]w\Yx 9 89j">C' x 7C̬WWϱϠQ_p ㏄9.jŸqy.p.a|^<?|WҾA5`sߣa?;; q~E p_Io< &;WI>gdsy,^ p a<< OB\اPG ďŽ S~;as^x} {&|$vEK7ȍn#<)}. 5D[gp !}P^ uFD܅k#u>$㋾F?_<:xq/vw΀o%籴fB? ˀkgi#^0+(̀^΀Ys;u _9q\->z$Ay'\%| qzt\w'voYCt ng#.?e4(csD7@B;x Gѯ0 'oe? \B! ^yg=Vv='+ο+_;X&pbn"N/CF|w_|aaAv7erc".3w|~OPq;y_]G 9G1'ςI8z%'M6M?Ǘ!>E~/߁B8@,}Bȗ'xsYo?_XO0gs}I\BX=G& >wܰ~%^tE7Ǹ{됿 )9񭂞㡇c|ocٰsb+֯Oxz>`US@55soY(cBfC2ݩoZkݟGYh6lWx;$|[q%5n;q>O|I}}vI#`I5?K߹,"~_:qL{ؗ;6 #.A|nE>qF2Oq?9|&KӈW8oBn$ 뀿9_dǮߣ#?'Cv/ .?/C?}o;x~2.#v!9~?ܥ+?NLg>\I|Cu=aOA;g/gcv$Q7e Ɲ8x NlBv_6q w&}R ;#WLꇃu|;&~&]M{KR c?}zl(:^at1|Ʌ~j_?#N"oM[g'zp٣vokOq(~oKNmߌvv:ә'NPmG {I 2Ag>򆽚{g1N#>_]kezmoC~$Oq'Q/{N%184=P6}#̗鰏ӵ_9le[@;}E<;h?Sb˘/ر{oȉR(ǑgnJ3〛#~6<5q7~߁3#~wBD~op|+xp<; 6H0q'>];ˡ#Fh d_<Ԟ9~&; O~әx ~_Yy=yh|'$ $}ׁ?^:;.e7KߎA?g¸qv3P) ?L2/ c 'tl [X[XύW{ðCd Oa/D =]<| q|8>|sc!/"'Aog9 ~6q^{pgQ_g;~^#.gij}9+i-s%K3dTˉ:s|)0 vIq#7DG0XT\$>G (~)8B7T_0Ɨ8q? H\O5e}+%a܉B%C. Pp s]Bή!îG-B!,My\ =sq7{ǟ}q=qpd}>98H{'\<%{g?Dׅ&+Nj?gEШ{ԟN{,q 64~p?웈_ہ~cu>/{8m cuC ĥ j`DM?~L|> /$={;~^ $>u= q7vƙ\oϽ1O|SDy$y@_˨}>ş n! Vܿ]~} S%n_Q?^_Ի6?xb> w3X_._#;ڷO_"PW}c h;ޖWga; }OZ_yD)M& %Vp3qn?19*3C;ȼcD9^ ~Jv#s^NIއ$aK<l&53I|4lwxw' ]Eq?Wk?r п1 GB^C{k:y=Ȁ_|)1v9|)(P.w5j?L.8EDy q1<xrvpq8~/#'Bn qp<bW~;c/3R \G^;c>ٚvv?\$v/OigO9,ҍM1kl⫀y ~unħץ[pރv9w38#>#KG%Nq=>xsV¾x_'[y 8Nz$o^w'@N"p?nt2OZ# A<Ưx9218w .WBNha 7<GPADs b}ǜw0n;|^U4ک Ɠ\s;9o#v9z:k':sz'я mnZ w}2[; wɛD-y!Q>A}7 CuY!sVSO_".m=z'i*s^lt%V2O, ѿgg0>v+^|g,p:yxŇog;9XЮSjJ^3!c{:#g ㊿/:¹a>x|~8<8U^>Q;ڿ y|޹q'3>f[}hT;IhDɿ$3/ Og\eL|`xmsg 'C~1n/t5  L5joe}h *ˣzI8ڻ.79~<.yqX $".'I @ fۙ;3a;F- .M=b:]qI}?C{`+ǀ'opd2LO܏GczC3J sWGKޠRN& De>ۗoG;Z\:g1*CCs'WO_45sCCek{ycBwA)~<\N\6z7'plߘq~O;UTϤvIqX>Gd{vdo d>qASt=sO< K'*CgULg1!ދ B^D78Nu/Ilq ܄&)u0H=9|pQ~\Dב9*ӹN:- |vI+y  &FaGLm487^vsXv v'B~粣G~#IwBY b9} N /e)65q> r߀Oyɧ/?&3A'w,%>x2'z-d~h r~ Fp|(>H x.L ^1>gbA?i8QTkb6N71}x6%77ΰG=)-KḞ[||?q: _ r!^aSG{!M,Koh pB* qqg"nh{K/q& %f~30ⳁqM¸sov^{Ի<e~B~ۙCWę 8~7dN~s#q (gwׇ֟ sć?'f>;v|8  V>Y%g_O ;݌=}q=oie >$YA>书Woo^Cq99| F~s/xu21>{^ q}:;ăD%1k $8:?`Eއ;w[s{2<WS/;Hģ=Ҟ<\ۆv {wk`O0v7q&8HT>'[;`d+M,^ek%I;v < Ms/OIt#'wAѫ8s?oCByB ρȃ1WבGl4~r. ǟA<;[OA ^aDz ~C 'QycEWܵ ;_7ຽw>Xހ|~7+UkI\-b7P'sT&j: NwD#^%sIwhBǣ}9>0oyq>L ,ޗx9GNnC!߄x`=7Ck&+="78߉R1|7O $"^#$N@/~G95`h~QGάys*b/#< 9M'|?F!./Brs vs# 8O0.CP/\ ?47xNg/8zK;}&X$z6 Љ]BF /xwf \q\O "B_}.NG;%-s 9U?c3ߣ=([l Nt3ۣ?뀏 ϱ=z Wa\)$]pnO_-yΥS8y^s Z_~}I/P/~zT{e?qz~q׃g#q# | )%?@<\69sπM3Ԃ'Bn2껖yZPyYqu GWd "ƞE1 ~ v |:3jW=7y @H{&2?Y(w\s!y͡_[i5N%' ?rP;vN8v|3Ԁ=ӌ9a/Y8uއCC?1

zŝNɐXv>Xy~xrs!?g n<Ώ!|+яG[O@|=W5}F<>Ã!WE%No~ l;yX#Bd:D3=k )7?'7d@%^"{ { he\d*%fWY >spgΜS)wfװݏ5Xxl9'-7|6lCЙG釻 ϙ naPѿ/3D|EpdCg"!Ќ_@fNp{&q=09qt{Vch[ZG.vAt;e._0c'x|4hr\gf]sorˡأQ&aĥG徚=?ځquT; Sn.iGy歙_x%< `wi"s_s1p#W u^r?0?pW#/?_`TKk{AkOKVߏ^>ːcH_%PO;U}A虨vwDQn ,_{'[:vx8_(a|/o/7|oȞO`Cm~,ۍqڼ @GaGiG#G?!y^~kcBL@yfs!g qu1O)!ޠGg˿ +yq;~~77wg|8 $# ,xoh& `ND>+8 @|78K! \ur+l6;2˿#.+^+q9?_I5suëϑ+W_o / L<CA_ou8\lC `3n8o]}[m=| xԢ#^:}p@=}EDހCkxo%B^s/`R;x;&K/~p9GYw C?(O'ky`~~:ߍ sςa໴}'t yFB(qx*~XwIUw#} xH܈߈vYܵjr%R>%%ڃ4 r7΃v=A~/q*ڑ] = #](hh9݈/K-K'W̷'b|6%ρз'ज+oD?eeoy1]A w3_~ rˉ?lGA^- G~=v0~ߒ  /OAq&E8w!"01Of=>@<}! ^øN'G'"Bcq=l[|'>ď~N 9I|3)Bă=_+U\g;g[}cYr\7п}3_L)V_C$`Y:rCsO!o/'h3W3PynHn0Nx.jO5ЮME{M}Yzqط|_*eBNylпo@\?q@[,gX\Ϡx}L Q._b<~xb\!YNUU`x$p2p 얣+|>o1&_$WAwUt~[Xޗ⺴lqu~Wikiq[ط, oȗ@ni~) {`s0Ka~ZK%;_7zy[) g{YxOs''Pz4}'|||2gϿAϒKOL࢘#59Bb>TZN~p1pW'JirJCg?._^<cę3)7p sgo7A ;j/l[rh9%Vy>X;_13.C+nO'X: / B݇RUs^SaG +bţKG%߯,x/vi.;d@$ps=px|߹ pQk7^vط =ʮ^EooEKxA^z@q?D_cisY2ECʆҿѮ7-ڂ/^H{I%\Yл|5U|{݈r -Te.lTG}CY -mN\<haqG,lSsHKE]0_f"?ފqLsYwJLJeyo)8~ʙ|_88 .S-*\v `q/6W]"M!?[v6xmS=b;QENby&\U|(H#޸_Yv/ 9Ч|B]y|,?obM{}KYN|4gvEaA((,ŸKWQI[imp6⸄q-0}0B>_Yކ\jqˋA>Qlv- zCkU_ɛw/t4@-[}#W0l ;];/%/OT v,r >EұWx]v3^uu%-H[F{yȲBVv,Jd<E*ߥsA zˈ7>WzJxVHIcQ'.ޅ8(XA~3RK_S9~JxNC.kϒ`Dzл߿(m|߁~Ά\ߡNGhw鐛,+~-k`|~d,/W:z e/ Ϡ5Y~ *s eg ˂Q{ n_KwaA)Mo.J,}K;zA>ꕎa9#,=O%Y~Ob5г9n.I?`kZءb#6!Vq_92Trnڙϗ󾱈9n~ø> 8;~g@f/>;J<"$o/N{Nbd+Nk).x}yBAo>K2~ /ȿ)`ҖKa_6sMs>/\ӒY,W;3(s%}r|>\dOчh_EE9\ړߟ, s||9/|/>~N@Y=y[v~)<o>y6){s?x^ց#({ߎ<~AUr9Jگy  |S$ߠ3!]r%;xA9foqOY X~f@C0.\G|M@C|+yC^Cxn~> }Ca<;vdi8 8J;@|oUЃzy~E|/Njp)OoOEzEC~cna Do?vnb w-r׮ !ww= ><G<87\gy N]?D}~旧'?W]|3߿?6ms[E|^o,s/gۿ~$nχ_3@ߢ٨9*Z/G"yS-#xyߙxl!7F0i&G{~e||_5xv>W{`8:߉G;.=t~;BsG*Yt>xVWx~|᱐Lص-ݽ5߳v?xxz]E迈G~{>O+)gӞg1ByZ/+ }9o{w dqk^[8s|q/* < f C-}+M?!B( ??+Xџ\m׼q~+Ʊ`mq@k[/`-i硫q}?v7BN~v>יJwpvH;ϡAϝYO/R n$y>ރs/)wW+;EEw]ܗ.`}=0~~A[ϙ,{/T/]L y{A^aqO-%i;s-̤b|+ZTw#9r*ȧ[~}'#8xfo`냸^ySE[@^ok~8矶C'o70m;gɟ@wxWb;}g B=`)(#>׻#= .A?о"9|~lO=;8e7##;u_yjDneW{ 9]h_9V0+](?;v^ހ_v 9yߵ6O;f&?1ݷ|발7'0νye'/ؿr:ݘx[>F/g|9ڃ|j]so-^ڶsk;G<56>x?b|}6_x3_TS/#/} wۣm!rQ'&0⸀;Hge{><.KqJ;m8t'Op'㈿lX| \~7}tcw{7M||m:}\oވ7y`_@+a{BުmaU]QU?>Wu+> rwpݼ}轳t YZ |z\z=mok=zO>Їo6\~poC ߳~)BO`(40mN}Co{;H3춷xaY>dEQo[<_Ձ܏E}0ϧ][CG;'/o++W\qo+}t޺ b*mA߂~̶xWL܎@Uow] |~~~Dig[{%vkwݵ|7d3Q Q`\k_xNGO>{. <K&M|g1=WA7sUO6>[x1[w'Ʊ '?Am1/B܇&ch)y گ|;ۡJ>?rzЫrX.*s1Ʊ3;'ϸV9;&|>Ov9)^5nƮہ5c;|d]_W[iuo;'">wƝkA?s!G;]c!w1ߋZ4a%}keIw=} π~ЕP|`,!uG+w[xrAܳc8NǸϏ,uc~_v>cU*3o8-~yqs{o6߹>'m ~rl[췍xtگ.;~VrQ팃UmڐW0N끅 %|_1x/KiwW+F"} )K<ʸ\N[`!1(h,:t ǷKF\,75]7(o{y|&У`?9φ>ßsۃߛDOa9[A\rț-}@(Vq0-_-1zkoDwYݣ57[4|C>W1g\/ziX?]N;^t>Y_-ƳU^҇Y֥/0޺A a^+öoe>8{̂nD}F<38_z%=M_}72M>!֕?z0ח7$$}O.Yf@O?g a6qG>Chos]~I ?s'+ݐ賊W|V~Z-F=!wۯ`2~~f_C께\.!~a<1'p }A's>|M=gNsso3p_mq95~n?/ u״Q L[An$/br9z埢b35%o=DZtyls~Go~u_2Y4:c*̽>ǗoP`o~®X:i+nf|w;oW < =\1ø>ߛC|M :Nq&9@i ߽]GMa," `p}k9-og,E>x)'חc6j=ϟx(Oqv|c&/7g]u3ih:\?r~ A؇ ws|ްnrʳ*׮娰#/|:,|8wiH j^9?Ә@wf/޹>E7x?Pow\ԛJ-y9ג ?Qdq/^zKnҞ7>Z}鴋[zzø=8q7:ż*[~鷗vmrc('t'QOm SN9iCX>q/|yM׳!MgA0~-:Z\}@l/Op{8{}l7Uv+ih?Gϧb-~ _Fcl]б o8=7nڽs] $_<~%"W玟o믲"~/@wCPOJ{< b;@{oKLD^P7ٌʛqe\Oa|'Snzu+ẼQikp_y^:/7z{ӏ׸Пq43z>"ވ7/Û混xUWwٴwF;.iNgC{ >\;|!{Q_ ?+I\Dr:3]Z8w7Uսc_i߁/gfϡoXmyͦS=/3_ʯ||L^WxϫGϼԟy `~yc |7oߎN?7v{QX{T!>{]Ns<5:{IMߕ:_})TvL `\w :+7rgl7%B8CNh?Bsz]y}=ԷO739cg?s |沂Ay8/:y)9\Ͽ9|2&Y\~'3맞g[ $߁{y8xxz~nY;֌n{>myA|=&oq@/^툗iǨ@4^t,'\u~w3էX>:8ow?g~;\L\')o(RݐG a⺬s=Q ~GӅ~c?z|ޫ"s q7=L'g~ ۑzI]hVc3l߆cy[׼gxz]7)'Yޗ?Xޟ;Q Colۅrl|%tSa(w{Y>*<ۏ}tcƹ.qz_s=םr'_){S)9Ai\o+3bרO 6]w]:x9.Xq;~]Õuf߽we졣z-]rlیY.vp_Kole߲~H_vhho/ | =S_rz|vq.ʋ.b}߾N?iojs}u\E'|h}ޫ]33}?x2_/cM×6 Õw~OK,OE6?.|._Fڪ^w|/̟ے{Wûj5Ht=x﷾/$TZ^Nc}gIߵ׼SNmKbC}7Z;2o;fW޷eþ>v|g¿;lnUૹ!kj"{䎱o)O~8xaU (w[z3N|t|g>p\y4pYϟ@z-_ŝ?Y;:}w`΅_&v𕾚~k皾_N/j~֏9/4XgKeDztÖwՙ3ѹ;W{ o:Wc4WOvXƫy_h=ov+v&[3o|/X_uS'-ZgEg;֗yJ^[g5bc<'++GylRȖ[sXɩq%W-:%g~e%e|e]-ի&XԴ>=_hEҠO[Gn%Y_LyVɦVO7r0zl_Ww>3;}5:ܰ#f%'ַO2]w3;ZC~su{e|f3xo9?+|J{l§,c]tUzjkyK!woV+:fowY#y꯻؛ Z=}՟x _sCϴ|ve~uqSmy_lݯGV^[ݼa+_E<$wX%' qgXgMnUpUk`f[߿oW95VYg}g^5+ז\udM]k+`Tzx+}YVܻ/d \?-:q+tKA=('rVGnXQ]pQ=뎟O+^J=_v|t+K*sT[D&XvC%o',/OVd{[ʗ [%VpyX[rI~w-̷"ӎ.Ge,ƌã_ڊ_sZ=Vt+?FҊ]tk<y'=rJNͬ-yC֡+o|s9VӋ/ͲfYA/*4.Z^b|U;+g̉Y/bNzeY[n3Kja!֮IF:u[zcY:XVG6qU+n9fҭcVlG*lMnG7}yUxY3m{bԭqswvW/k *s~~* ~hׄcc+e??vk;~6le^QW68D4ݗ} <X^t앃ꟺ{%3F+k)_>~U&wȷ 7(ŏ|}bOC;F4huhmYŅmo\h}2;5i˭XO'|kF*vSNj}t3u6qU~~ZuQ5Y{_ngw61v.ֶ;=uցW-]ju̷X;;2jhiߜxak&txkK~/kҶVչfxW~˓ M;g5k{tnkOڹZk^cupW7ga;aΟ~Ӛu_QM;fmjwqdo 3_߻Κ3ܙZ2{/Эs~eb+^]w˝~G[kOooxVhHSv?m~4c{'-Uzg{`Z9M9/>vygϟiw͇Z{zMyk5c&=`xwʯ>߮oǧ6a46,^~U݇Zh:0/'YSo*}ۣˬm ZֹqVkdUw޿kֶ|;>tv߶̱cו4[0xVᅗ<v+UӳOѪ뉟|763~֡ͷwH>\6kW=zf{~GV5ߧ>aEw5{wLn{cz]Tie ߈ZZ7ya k?_mްKwֳV]q(1֎9gRj͹εV4yBkױbkkUͷl#n}mjd[[O?t]YWX[_nvvxuny/XX'jNw7']aߺY%֮''3_Zהa,Ңѯ\{vkg=֝G"\7Ʒְ>jyfoYFfk1[VZKȰ |}[o^ۯS)__Z|iVpFffdqYZ%[>; ɷFMDkmymZZ%ξqQ}'Xn[PREA$ARC@%Dn:yqٰ]k9y׵5(glR\/R6/GYu(S85A2P[Zzd}O @%uA<4i[jtwoe*Hg ͪH]jeI +kڲɣ *tYCv:!7VH:V>9xU\rn r2%C೸48e ˅E[P^7ntm'>ABglß|˂95|k#jsD}^I p7AZp2㍨P-%uSQ %q[S;&\ W%aVِu_u$Bqe-hj)Ӽ_ +/CM8:b>۳ajdZB[G|ם5bz b<v2ޡrX.ͻj=椙 :4;W%՜!K&Jz}d*lp*2= egFA4t AKą{/W!(Y{; %nCwїWCMv4p93THŇB'.OZй*ui:9>BsPޖ^% <'OEyC :hy HC-Te ZCOIB/e2غɡ[2ßtxPKUCTooBY˜wg,|Pp7kT38+Le({T $EBlы\1'yr'mAdFkPS1&X:깓}AΎ ΄(T̝GQoqyAG9 ndAu?rHw0&ח,` mJ*6d:08&;1d BG.T I0Njs؂)1鶢d5SoB^@?UsXG|ɣl~mɡ߬M,=07M3ar׽sX7i[ 5xt܁}1n)DiAy@'=ʤMS>ޅ fUYǔ440 c(j,__<M Jz5.>KYY=Yoϼf %$Y@82 r4i!8_?.GWuR R-ļ87^NM^]]sw?uA.bhfjLj@2ύDZO'@$%MȚدOm IICsX~PkY4z="9I)BmPI_,i sgc'TQ́7g~]v_c g~5ozQp⁜U.xmTQ\hSR`ϗtXEgv@ɮϯxrx2.iR~=N'CF;ЙfdiCO7% WϴJ{)i}&(W7p`*e^b:BhJhlCهxtP/ܫ VoFn߆&#A ԉ[!#RBK53~_\FNvGN:d=ИuC6US*B3^z(E[׏DŽ?Z!PhZGm.[Bknw;2S WC( ͡ZRhJ=>Gɨ qZ_'i6g'2痍rf>2ĦxRo}rM?ZWzCN*zbkHr} -\H[ U傳QPɞ-%e=_3\Jeۏ *hVs/e uے82b g~h=`E85!vF@QF :]߰Rqe{ ]嫉"O@ AYd32yaH7 gdY]#IN 0I?DDr9Aa],կ_.f%-PF\e& ̉#gI<kFLXUCY4FpsV4/ZBw/|Pss )A#))2ne_\td@9ɿ ~xFۗ[swpPLuOɋ\ɩAN$Tu;t >^၌2+}ᝳv*y嗲]# Ϲxj*AME!6o%<4@+t]j~׋o؃gRPfy Z@isaf\|Z VfPCۈ,cڟYPRaG6T-(6Sķ@ZU.zid>+RCo ? 5MƵD =Ux缴m^Dz&} 3W^sdcnH& ɺw}$L^S˃h%6MTbih~էnO/\]G0W͂׏ M2d+@3o7x#VI`9*>A— C$фp-AۅxG2EpYLA *jOr@p^~}踥 Eqt?˭ PP=W C4hpfٸ;{6ve Tazq3\pjhWͼ7RY(}xZ O|llOCF.(m4Nzoh&sJn KTk}׼y֢KTIEj\!T(sWlcJxO8&¯B[=t^P{(ޣ ^5 2u_Bd/dr 7B$X+_ VhU eM5NL!t Fmd ! Y \ =sͭ\"wHݰ w&t~BS>wӑK]\4L>b֏qvePg=ˁH.Ń#U0x"i2J ?a:@N :X'1>k+RcjHZa7̟XFB1 ÿӠL3'hU+mο:5džꜞ u_gC|_l|( 6#k%n8^ kҐmMbnK2SB05ToɖTzlgo4eAѰMK/ _6?[=yUlU{?BbG;/% c.c#f)_A; r|| mg@Ɛ#ya"*RT t/ouwkra *)mCcHj j& ~CegmC. /T>;֏kbPU+!6XS[ghpݜ DDELS{aQYO>WB%3Aϡ#Jx*κ'@S\C%!{W@ T$+ 1OG lyZRX|8 %F (` #jC|/ pT]& 2D_:{. BhB:dq3`z =d'(ʜiܭH0:?? .$[z F \KQv(OAى|7z=r\5ZRFQ*Z@^㍝COޞ$M:?2SCvkz+G T'wBC4z~vuo HOR} jmc _Vx80;-(A hI~jYN}*g Kzÿ簞4d&N%PGP,EoYz1ġEW>^5T;$nBm(Ä@=Ż @[z8/ :v@⽘joPba?qӉ3( :μJܖA"kq cFX \S#|]b!qƷą[PK=.M:@vƳV{HK>/DsaRtB6yz3'L3r؝7m\p:73zk ha}U*K{T^7ۯ0j}/*1E!o;H$!w3 *97!E,wWSdapH j>݇nݗgCpF } }3prD6BspBhc=};LD#^g)>=4^7$rͬ\/>r|&PCs4|Z+ޚ0Ufyy%W]V0V:Q(T8pfcyl(࠘Z( !:Р6- ӇPx=S o4O- _}Z͡mUO1ЦM&ht-9WajD.h ;=}f|h\&/0_|#q@7CGP%#FlZgJ͐MFqFnBGo [_xPNP*C-fgtCKbK&1O? ut9\ V4#&`2?3AKb~$'iy=5yaj|OT.Cϒz͠Tÿp FK =r B5r;G6T^AA|e E|Bo]ˆ߄?PꝒK c;,aDQ'yaq. _*F">1ezB'-AQUKS5({Ԕ "R?禰G3[M:NEA &JG]$TAˀ}I): CۍLos\S*z/wXrB{̮EY\ڝHNͬ] 0sT-h'IyB)oȘCO;K< uxnsi iMht)OpnL ˜OY-w(g{ykxt<N@cRM3&w#&a:s'*57 jh1μ6.یB'Du.0@O1o-V^)k4"z:+fOAP]Ue=!uw`=V>RJ0xZ3=:3]@F1q0me`cK˿h~q}.j\L;U,F(FuÃYj:t1wfXCGL57T&YWɟ;󷡰Rs;-DÊN2Ԛ'0A݁y^O ]/VfNVɵi5nN~4)w{ABl3|;=CnC%/.F!}+5ciS"%g7ظ aI3Tq`:ݿ9o.UªfE%V\7!0#CM])o`_жg.!# KE'/)Zxc Gˏ5'( SvQ  /8@[̚CLRaRz݆0b?UU2B9( T RIէN'&}錙Á4 TjBëarP=: _a4?;z2T%n^@Uݕ+y#6MXPA[^wCJ.nT 8| m?zaC)kM-U^3G3YcIۅ^PVr"1|,\k/pwkMtF붸b>- kN?w8j'kvpsrVő "nҾS SѫOB?*XvRztb('`ezu|S3.ZM9;RKGY# sxiIddGj S# ,l?Z6XXr:Kf`e@S6Kh՝0|J#_x~̟OȀʗrv0Kqj=54,qQ΁ު|Xz Zu%04R$RZ\;0z:>(8AEi]㹅<^|hx&%mO^|-mh;}# za\ gg*a!7 k|`ȆI,>Md9^T[JX'fPa'YؕUSՠ7< %'ќCgEСMG<؇^q|0Td,oML9>Fbn&L҈R[ca5G/>e47[tA~?J0R;|y$l>w? Ykqs0Hy փL9`sXGbFr>5=q_ X1>uްr?pxCn4T7Ilm[,yo¹u mxZ1ó_?9ZE eaL-S.UAC?vuP^^{$ƪ2uHa˜Rn2j ;{VA ;_'4)3vakL$Czg-0t`6vowú&ūa_-1oKvS6՞A'w_`3N -3"#Ƹ3f>~dNv8L33t2!%&(b&'weTeEhTf( kAq`b1,4, 1Bڰ?w?ua}ᗃy?sr jDFPwwƿL4~bǏ`y]7Pѣt_, ms5չGKRZyH ;U9z"~HnJq\3lߺk(u՗x.RGUKh^h+CӦs?؈J^$`L#a{3Fj ݈IaVB/-&n 2;=^9Us>-| R#(k3c aZ`i~RxFzE5·ٳe'853K+v SUHTYˋt^T@.wZ ,q)yAU9ZU&R=sA;/u*8v^@ wt@OX;,lYʺڃs4ϱa7(2txOC=íÎlC/b0iEt} 0._n \4{b܌V )_X&⃖ }~.s_PCOX>f_=N]eavRL--Dm6YiK@ e,8^J W71Kz˹qB~0AF.v{$xm&XdOKpէŷaN¹Яs)) &|0Z_%X>8=Sܗas^ѭ< 0 :5!YIgcaE^RS,eQ8۽_d`/7>'+)4Jb~t-+:C]=^gТbB+tK@Gx-ɥCׄI:;,*,>.郦N)X]`*WC'pϯ`,_Y&cJ~K|={!dNHOxԖݣhr}} 5a:pyבКs?Bg5Flq]\'I`8tԹ<X9G`[:]Y\qnنנi~Ui=U0ݹ2b^Y8A=]5` c G_X܆ g.x sܜqa\XV~2f@֣KacJ"M 2mr,uՅ ԆН}4B#,enlM@94cxLHy1w5"0k3.evn@7к9-⢁^,6'4?`R/*ĸ<[|c;uqBD+7S>86V[1T5`ź&%XM#`mue |3 7凙dO:WK=X+Jw\ߧ Rc!:sUC QP:^5o\aOn5M,X ŢT/hQE`%t7<]PrxLiLƪ܍]c2;p]Z`Bl/lX_N=&zw  EFxX_0R+pַe`ЉgɁ3? c.ft탗0HcyMv;V86~kp@U/-X[\q<ΙGJّJE vTKak誠y4Lk1b y SMAO<>_>׷kI؞KqoF0ji>OX+*ef}FtZ†15M#KÈ.Ft# *ljQՊ_A [O|;X!ö*Jt$[AZ͐n/k<28 %D!3姎BbmTsa䴥+X->6Y = M&:uXe*օ t!j]Mߘ}Ko0jX@1c71yEꍛQCJVйL ք-t$ϡUfhmje]wGЕLk^ fJ5]?n3q)jh=S "P EgL |}$DY囯_b)~v,zB'hZ#p9 Ӓ_q5G9cAF>ni[-)(4 _2eNJ[YW)*6w`t?x*>,fl]Vg K%yv$ц7~I~V?e| 7ۊ eVz:}.w`%M!|j]Q-4N0VLpV\i&E?Æ|2-bsw yUֿ2Ako58ReAods]X7tZ+Orv5l>! ϟT5ppg5劵];aC~_?nTz k9v>0usn0ZZPݐi Ӑ=둖:;0{_U~(V U@oo0>Xt&CX *P{E`^+I jXrlG?-i0ql_\S톞ⰆI%p7B׶&{&|9;>ɺ1VJ ^BH&HI%@Gܖʗ4°O9~.ryB0iZm$)9`A.TTt޴{ʸP)}N:&f\.OX>l[-ܞH~`5[Yj z faNG~$ &^ݭ /"3J첉aȽ*L6;yÝarz|~xxX+op uܹyii`GӅ:mxT?%F!]Ȫo1U),'H ev®VWKXPL XMdX/{`_o?; #aUIL>9OJl]~mLh^jm&Ka7i lsM@7 iJ&lr+coZo{O45uL+Q26nH!}d[ZMB>o]L<d 00 9MUU}|\0ť{~A>uٙ3 iyS= ?˧"M ^m¼O>}=y3~G@/=4gaƶ&>5ioеcV=&|;b VCE0IθBk胗u&} kwV&,1<{80ܾPkjۯ?הnU֟G5<Ю,f". EKNh9A~+R8 m9fV/qݪ9w0~ M= #L=u&ι\i042d@V K9{`8CJNr=[&`17.ć4ʱ6 X;x>+_DXoZ {h֝^|Xi;.FSvylސ 㳧Ϙ0Y꟰ܿ\bMgF` ނݼ xX//Nuk0)26 ǕF.i+vi.4oüb)~A5l=\qe yM;`Dն4lu T>5%`Rt %/c9և2n^ vo}QʄJlEO{1>h: 1I~C;b䬼w{BOCg$﨑mB9_da̻~zjJ |syUN #uO0nQPa+dL-.<&ma*= yr%#s-0>ɬ䎵U{A|a֋0]̓B3`c$0L>% yo v/uGg#;F>X܂ }+`|0H+d#,F^S #X|Q2c`ݍ6^Ikrr%[/8jKK6YƁp|;1L5 ؟L1XPxp,ka$ie8h!恩W7p4`OH@o̹x}MC 2.|1hh G,7Va䚱' [r3O0nq͚4atr.l }U p |v0S#;[1`i-/-+'k`9d?7 6d,QΓ!-̯Jh-Ja-ՀC ,L<01Z w%XmYomaim|鉼FMr`>X9PFFC0]ؼ n=[.0e;XzY׭m'%N/gP;g s_FLvlMBN*`ik#mX\OZo澌A"*J}^v_.;o =GR/ bsqސivkc+2üڙCHY򂽬;%0v34R`xq=yɉz<ymw9#pzՉDd6Pf>D!a&E3;"jf i28a 3WI+(awwݼ,Oc'}1-T!G׷>J 5b;zGMihkd"Ns)'̔] mEk!,or:ΒA Mgfc~{E$ Fj젚m4s OZHvr^ؔJ}ۊE+9ffsx֙C>Q}y160smn&,%ZpEw;z LМe ZXRDKt& >(` V6meUaw|7üJW{0py/:v7J]%s"1&.6wcO&jXyOB6]V ق4L]BMk{V\K=?r\B։*c5 7Ǟ}ز[u7|.u5k\Y5Ypݝ l>>9]:?_5,U>;;o*ppl(79g>lİ#Iu.><꿀I==Ͽ尚+|yk)|g`h^*mݻ(y \/]j09\S;8Eaxwu룖/u)LzlvI;`"~Ȫ.t,8yj/607g،o Op^`b/sgI=~5*_'mV6c}j'3uM)U'j&9gJ ˳ qE3Y6X1ՏE kd;J^XpLCdXqD%$ 浗Mcp~.\Idl*XׯTԇ})_Lay)s IIM| ֲ`)| #,>=[loak*glk7j]X~HZ9rgJͦNiԾ͡MEJ# s U_q+&m K¬$Ewi|V@~([FEAi1VlW J|8sVz魄`O6j w{eG )Br!~\ IVG~`X$ވ{8֢_nS Y$gXGJo.^@`;R,)Ʒm$A8zM`s嗺p<I \ۃ5W`[ǺZnՐz6O? bZ"=s,zD{v>eUĝ[:j#zZ?KYV>E$nAT^o`e[y:?7 v%]8f 5:+NSBX'#Y|oF4^H[M=Cr6nxsJ@ޭ?'oƗ8aVSlxvra)_P7 vE;\ߤ <ЮI <Z/?x܆߶^lȩh#lQ8(0}uܕB懡=G}t5xZ-ᚧEñg١Gٸq2 s-Y!"ti8~kh =ܬ{i'"۝tcSI2Vx^Efb*T: ϾF*:z6[#|d{:kDtnat8:r.߿DU% !b>4C]M^,w> #\4ۖFx?¾x8 ^e7䈀O8zag ԯ5kaQuS,z [^c}0og`@ GN^jTr9 axx>x09+J:>G-H,T:{Vl NzAcsVμ}orcOXt崙]2S؊9ZZdzk? \a?T "0)qf@;wCzQ-Qn"Bk$8KXH8>=YiS87rU2s_NԊ,QKچnmw>yd_2|hTu${[zsg/ 6FmdN1>3_ uq%،gzhѱIqM+59{}Fg΃ `Um+prSH0̻54w{ a*՞{jlU$ StzOzS;UE/zdܵiJĥ5)M!+sQeAܵ/xp!|*$J#"5/1E6ݢaDC0'wA1/5=DtG*fQ1Ծ1]`E"d{;Fv.<Ǯǐd=7HHr2#&)DlA)d muNZr B]BD.m]rokD$ d60'="mŻ6kIśa\!"Z=%'jG| 8sqtvw"}ލދp?CF5 bUWZ@~RA׸{7A6<Ѩ ΧE. I,M^|zu6?#\Oǯ;S{]s{NO˝ɶ6'. GI"7 a/DmƟʹR%~v jQfP^ֿ/`Bsp1~Ԏ%| =ļew"X{Ez Q'˫&Ѭ*Х D3r\#r"k9&-3g7 &w"o= X/^C_8x#hfg'ЪeD7YEgF$OU~F"|2(Dg%P &/B$ߎzi\r3"@=_#4@d"aKlyCF <%D*?s&i ^6"{~Q‡.]2OT`Gpp!dOSiD{Nő6~D$7[`D"ΥRޤG+&݈R8cl_( "WS`Fv~'"]T:kpnS ]F.]W;:;]O]ܝ,\ZRk[}jC%QMmӺbXM|MKAR=^% 3v bbߚc߰u_sw7 Wti F8S.4!pN3!YC8x~iNV~Lן]XQ&:l}}9VI^)ku r~l~IB~Q^|_ʻK {y|>Lġ%0Q=fӤ@Di-Dir- ~Fǟ6N"bre?GZLvb5"יՍ {lL^IAd #0<3HQ&~~w$!<>!wx\͕|8ȋ*O dUxɅ&㬰pV N?qD0z"6_#?'+Cxx "LJr{}63nG8]$و&"ϤpvL1!g&;O:]f\S*•{G)Fm3`3|0h2Zp V3VmW\ 3jg8Zrl)KWqQ!ܷ<Qg,D/iH=qua5sBD6/!u:"`yᄎhGȜU  3D`"fs?o u]KD2Sq:\_pD|GMPyD*$mឋ\H2r"u7D_)C[mB$O8e9>6F6w|~c]1vдJWExtKgżFŤ޽tMJGx*8A ? Q^H4t(1F+wdE _]>7uY"z:&gJ)Axd7>F$3GN~ǧgO 3g)E=t|Il훯pGDN o5!JifVjDZ1Q?GOQVN+ \*)#eD&@jpg/{W*"b^l-8z."lf{fdEXPR x~(†|=v:]>ru~gyDpSDC[>emvcv Fĩ[+ĈނN};39JXFֿTA8m F<ԼM*"hh_\6qD>ATYeIN.{isQI'( |Ӟ>_U:ꊈ. ' UiЦIkd'-H^j IƠ2" P:|p2";^"-%kEkGBGiG;}BDC?'yVNÑE{"6?,uk@7!p;JQO}D>}Y4ZT"&R~"*5pDWojY`uG\ L!zÓJ~%DNx+O~[sGfR3ϭQ-^:ŏ-5#zW)/~!Om,?Hhg "2 ߅{y?TD#r BH0 JaB d7!%;up87.3)UDOLC ]ͯ e/rэM/D"2Gܑ,T{D|ս9XD$E[:oQy~sRFe ],rxҁyF~yFbʹ0@・9h_l "QX:nI: f"DWWcHv9  0"KFzPX^ h|n)g Q4:Ak%znG ]K-+)_pDǧ\}:"|7S㋪JQ;Dq!O( ETW$N0),+"WO7B⑌!Ԟ@,W?ҊCt5GL8{.g3+,eFkKc_J.5b4 IS"6HlMe+ʈeȹ^oTbyt-*a3t iy1D俉Ϳ/"ȠRDg/"؎ &UN8bN{Muh\{DXDU#II5 bhsx ~tb̉&_D符 F^ٝX ;f$ !_/";ӛNkFgbc "G8` O$d^"sK:zN1,^]z㖛R;8i  1\'8L㙈b(g9˛fHZ.|Ct}6]@y !lUF( R8`Ë[AfQ~[M'C,N*-f Q0C^w&"/?V*McC"UZD.y01gUEDb f]hH*1k"(h+#VsĄ` '*v̈:=ũ>")bE\V %~&K+{g v+ }o"'o? y8:uK OI9?DtG:˭i<}=bL`;~A$_Gŷ[*2 N2MG4b"?khʼUK 69&~ĔqmAl~6x'vDY(7Ƌf7# y>&xFx{rn^梸.1bYEL[b%Ej b{0jn7Gn8jQ9exs՛]nv6,jX<9wՇFf# o!Ne9Na:k6Dk_fb9R ( ;z ;M`dBb~5Z QIlIF=ͤ+ p?>Dy@^|x>wR7lv,"jc^5Ci2Dy~4CL^SS ^Ioq5Ō/9OT#Z7鍧rÜ7#&;"?+ 9y(} 1F3xP?gA4Oh6O0+ !fr1CEos\>%W>stY!V8I`"1;n#~=OP^JhfgA=E[Gݫԇ*Vfjyq<۔@ 8B#,nc87&Xt[!aS;Q,oxi+"?7fxD:K b<1pܦG4R"޶@6L!""WlD3uhGb}!}/%٬a|{eQ'E %:zǢIp1PO3E.>t@CS/8syӾƿoVʩd*qH o;D)w5RԱ 0kwӈ~Rk1" "yO$b4DDgPD"抄ݪF$bYstڍ%@D Xvo#><Q߈M;H"%DLcn:3=gIzңLGe=KEȰdb ^Uc88.hD"Fy&AgxSb͊kE=,t UϹ`$qqb{שN(@lKh!~\cK[ƷJQS ĆgDf'I75ms:z}rw1B<>h2 o+D_)>Bd:gIU}8*TRtXv' 7b:nⵕ8CBe]#:û =u7qb6WϤsXwf!sn Ոilxst$>mŜ>UZElaJG.#^)QbZ Ut#'D-㓛r*6G(hq1YrhDl;Os`R > _]9&#;qf#&=JWBDkOP1}BQ|9GMu ReX\[+""V2ȝCBGD6͝Ӄ U/Gl!x%s_S"ւijHX{WcmeۆJD yHU{Mm" =I*8og#F7B*a R*v e$ndUŇ8Tp.#?*Dib/OUH283 qt]Ebϩ MQ鐀Imޱ$bI\DZ #l9eoQbWHbĈ O:Sq'rzy`xd)#>G0ZD,t?>hp "x<}oHsqneV!~o1ǩSߜ>/Idf72y~D+q\@M6-с̃G?#,gND&eKq]My{q,; ~V\/\UgD4r!ǧ~ BtΧ< E7)=/" ;&܅WfƇĦt ;#Xے ջ>H̲֝qlO[Q�.}~$D$r: .݆8^R$.Ä+nih"a[S46.,>5>S##!i-t.\|G!bЪ"GBS/5q2a1d8b0#  %Ĺ9$JqHsqq#E=F.͇ !-GNs*o:ӿzx[s6፧J|)Ll>G4! hqr#OguC X'xsܼxS,ٽ5|čtU1~zX!r`e , E/0ę۬zm6T?AR#}QRRÏ+nŸldۈм}XovK 7\dt3.`z jibO 6U8^lۤi mP BHCh( H<85[~y˧!)g4O2wahP 1XY N;>$Hl#7 ) xRr\&X\@u'asCjC 3,qRGt‘XIJ뗫lEb8 Xhd G"~!.D幷H;\ըx^픎.D<% +ēCN]O. >YChrN{_1/+iLFlnJc[j7Y2ߜ?eG_~wq`M õ[A@O+9,a2?|˝s̈lO˳w#GF-܈qL4 ]x, B\/׼n!yM%r1.; ^8W1[f@]J᦭Z}Vv\\zJ7a{< 1'p>D/nL"Vq)' %zFi1\5{؄$88W ߐӫ W9ղ]2;#YCE$,}k-ՕdwZCq2]{ш$anʳh̃h:^@wcמּU$6GQU7ٰw(C5)#nO ]ĵ|"tcVus-L=8/N=. >f#GVquLR\VD9pd^ l5C݊)<ߴ=HK#Hyv~Gb=S=3RSFSL5G!h4!Yݼd<_w* Qm7"Ո#oӑ 9fܼ؇2μSXp E i1yJ͍v5vQu-Xpj=qϳ!AZ. oL 'W-\?)Hbr-)xdp$0?7IuBܦz*y.' Ƌ½流L b1gf(xh`ymdS8|JXE_Ź7 { 3o *`ϫDBJխx{u tЩG?~8F?YJ4~XT `ISt wdKH!o̟tE2nul/LiW>. xߖAӿgl^f͒);U9V_#~+nI Q!/MK(dk)'qzxFNFSe{ Y Ʈ)g{nd[y'j/=FM3ςAلjtY:LIxF6_n n4ҩT?o]D?H:F1.zol@JrLKS|Vߢ7!=JHng!cHľ* Z? ػ]U -/m[Q~ǃD uiNpgdXYR[@I 4/L,O.Xڦ%^Ɱ 9#}xGuo VFΪTZ^]O%܌!p癹kpLS_1ώ "z788Z ww.<4L':!Zxb|j $7˃g~,¡_s 'y:GJ-C+0OY϶ӈE0-Rw%Њ2ckU "xw"FFɿ|)dZu7Ld*::(ԾT Qx깈&H}35'~UBN|6ERNr@f8[XRF!C>3 ir!-ې#>QjxHXYNe/@=CH7?_FX2d)T {b\&d4eiف !}r&_~2UYK[w._?] s%{}JpFP걩[8 O,=UD!)bç 7|">>N3Ο~ˏ |n <%q9 eYȷ}CPlPy2EExһKg"g}dyyBv̗5?J] !wjOd[ ?7jݔ0*h BZtjE;lA4'gگ3 :6Jx{.pB}XOtA(Us\|9-IIO>Cqn>-p!/^@IBOUjYp*ܔ-d&3dPx/ -"r.}4~ Q ]c s盄O,Ly;Co BQe. $o1L<.>^}:ɪvB13s] 9{PL< 4ON *!??Y?zgǧ!F^do>Q(o[SSU"c_Eډ\zP"#^=\ .˲iprT,Bpe 8IIAZh)CQfIFL3(t'6h@ID~/خfB UW7OX.*C!6FA(z4{x܀Sn(w/]Նt[c(3qn9(XĹĘAly%%"HI}O\WX;|5C(;X9GMi[zP֗m|? PQ~(Φg6>ᶦҚ) (΋Hù^(X,9|"t/@1Ĩ>= W!zL;= Z6 :ι֯yrjG(W ^A6DN0H Nr삄˓gHR@#t!WbDoĺߥQ:7)^и iI[/R3CjѦMX !5ǵ,+pTB@:Jcˣs~X$myEJ6Wp?0Mny ʳ"ekq+ r.OY7>I}/y[*'ho1 Lslh+w_x ?~ГAoTY9¡26%P}fmI `P1F~hhw8X &RwZ^o^FPʗP">q[/nCo\=-P]E"?nAW2k+f{Ac3T3lTYkKjR.w5M7nɇlk# & D|ùe;[z*sF?~< d 5$OQbC']qRx1[oHe: pANbk:/NcJK~ $oz%*'cP`2wiΠϒ5Ux绋!/V Q'3\"$uSuw6Y긐]IiIKlH=w6ˆ9t!?&xu [q .Tx@rX8];MdAJ{Rk&$4-]N䡃aސhycS|c.!яg~4aO}f0x qzenD]P uS]M'o?kkY ԭ'6Kh|1-=PذV#CkDߋ >uj o&[!zGSԼ={:ßjA'MQh(~{RnŠ(%1sq3!PWcmw{K4<o&p쒂8g]"3nT0X03: |7=et#l*Ri-[P:&_W~kRtS4zmAwP-?tYȇ9S9Bj%ة7!7??_{_\"m|;d MF5 pvȸ~w>=-<4 rǩB!Shy"\du 9D??-@pmׁH< i Gġ :`"*IuHCߝ} ~.uk"G-?9";/RaTUg` H_MHr(]fv\Qx3r@QɧpH|uXי@ZUKhQZ;^Vh+ 碧M47erHi_pfȅ퇜 D](dj('ˡo|R#ԛǪnztZEw&]=h3J^1HMo 0[~ţ uO.8yt%SBZƉoaUrgjg֔û!꤀Y h7QRσjJR+ 7 xzߠѵ\ExQ '|x5?@qݓӾy_*%]/}!CTNƆx^Dne(k ܀Գ(56Ayn(~4T˾LR?y(p&$ZAa4I6dkz |AY !oO4i ׏^oSJ@]3*dz߻A:UL 2C_W@-@6 p]\ FoGr5R=~NC:6k9h} k}b+'\i D2Ngz0M+69#R݋eJT2!r 22]DGmoVhOH iaCzޣ봔)UEhnʓ$CQT3ͅ h&_-l}R x7AДו x;F|Zu]~bb{tGWf@SV;ٓ A~% .Ʉf~~ǙIhmtBzx(=2Ȝw jh j]7oLm+t.#$J = CNfЖ%bY `7/I9emgDL8!%,h(fy@/@D#BM/g6~ hip"ĵ# W r|lȽ e킔+ΐ'a>2ʱ \[qpNJԋDHXF-B~LH(fmAu=X5R']M?|bȍE}mHUdk"kA%?MEDfy#|Til32Cx>U:\Y=rێ;OUș=oyD*\dngyDy~ )Kb-h$E ȷUup}}G:ߖFF /?)s{:3-GC>-p$i_mzCl%t'gAA>_j$=tMҬFܟ319|vVk]J+Ydwk/WlqniP-蜢—xȯΕ1ס噫O$PCG` Bdw>Csx4>ǀ -H<,r{pug4I>Yb'mpxfebǯ9i2lXK~1>E]h(. Cߝi#?Q g gw_L G" LguBC_ pbۅm #m,SѨ. {tt~Py$).īC9wϐL o*s$4 Q ͍|CkX[@,}K27=A^]dZ*B Ю7A0<(`<`iRlMa їQJ5#07ΫeG+8;SbƓy>j.oQ[?bBt[ߟRt J3Su!_F ˣ"Dʘ1"i'Uˠ'סЙ.(ZA_␆_"g'}z4*n$Qf꾬0ў"BKj&Hͅ7()(<-Z䅶'^D95xڢW\tVOZ} GU^g{Tœ= y~I[Am}ry 8Acn1ԋOh|krj=ןAǑk͐4} e?zH3UX8,E e$񐼺@nug YS@;ORWZ;#%P T:èBy"̇RxH㋌P^̀ј݊ T6K$?#2T'TIRp7c0&3ю~j3($w'L}qj, aRrA%{T8l{woI8oea?ixAL-%"@S"Svяy蕷Vw`0g{g\p-=8 j__6(I8i`]Ё;.\;awaԻ^QjQz`5{T>Bv/c:zxPPC1GO~tuo5{7:w~"&U`Kg}w,A5_>} x&۠T5zדjE}ͼ#-[z SdE]ptV)@U6}-1 : Fܛx^:ա"+SJ-)Ay_-h>J d)dV)Цzpr Xhmӽ!/.Wj7s`KO 9/=ְp$?;Fl{R`>nXfLsL.0-9xsA,3';^cgeX0[|բj`*4j.4mkwy[,a#?S捔_/\iVU2 *QdL<jD!o0=:Ӵ0O8 ,T5`Cv9:0gV&#_T[ 10Γ)1S84NzT W~cᗷ׀aN&woJsr- ݩ&揇L)%/Z>1?N!DWU1,l>PJs8FM9FP;sی2t]5TvJ g^\2ܙ3wкT֣+JsP4])4YָJwT~^lBOjc{%P%-ʼnu?hf˅Kd"S?X}ez2 eL+R{~1y-XЯVc5#gaٷ=u/4g)&˿2%yhF%Er,)>PYGh)J+M@aXh1lYXj`LJO Kyӟ vDE)3\;ᦡCߨ2ϼ[Hhv=4~dZ÷ٷ%ZuF3 /K>AO\dBQCWO5(pmNV?f|mu@fn)1 A&("A>J;X@K@ړ+ЌLLxk ֿ |)" +k,fh.ܑ_w)^8,+4@ջ_Qc/Isfx$4T$u`~8˝إ§]tGbI]O߈Z gYD9ٿB;'f*QBY)NU:tϚ& ڎ\j3[^: s.Bw_yXf݀TZ(YS@gO]Xx9AOjU?V}o@7KvqAfm Czm "L p!9kK~g<VRC|c,?O+"1crNKhX5 \eDi1,?e0C;v(9٪U Q7s`;˂/#>{Y T%yXU n ۰b1Rԗ;sYw6abO7s@Wە X23|YdqXЮx,,gކVA9e!6d;𶍋a.{M0䲷*txx܁JW u>{ț[ܷvG. v$N߄&ٌf 3.FNf;*]>Z?mgC~N{ B?v`qF-s%oi __ī=$''S cޛOa^u:+pvpfszE暈P?PyP@n, Q|z26Lؤ̱fjخ%MVU,t>,\=em@)|8qOg^<֙ws*У}w,q$^^y&X9vnq7 ?#^'+Pj'~WW˱[%m2T^S.oЙwM),]I`kLU#X^%0[MYn!,/&G`|Q;kһaAd'h`!rvloeًiah?ly?cۅ/tcPW 3gkӡ=/)qƆA ?._아!VhEw쒜RB'Ń=Aa6h^g χ=_V7}}`rnD D5j>eذ\g"-<E:ϸab52@;ǶYa'.v|ޖvYUAcD&$'d]\,#lmt>SVJp篷MqܟXN`]B|?ccHpvǾGw2~n?8l~7 \ArA!=ez}T eaSF' ns|yolFἜ3VʂvG$aM7eXظ!O U|RDXL! F\"n+~2X'm`z`!z N?vNʓbD=q{ԺO@_d WJZ>Alک912[c;2'vIs9߀UQOoWj.; OF@}OCWAJ6x}]B= AqkFjxp@{G`g;G ^n0Z-;gÂ`z}nh}uF]m'WOWHrwA{=7gv*sqfN%rk" wL0skoٟl͹0ޖ Dž#)0rKUU.\ -_/)JG$-2.};Tvx>u ۆ arnvw8uԄcy~ $WC-}8H%a>ucW yv&]tUa A)&r2Y\ݻfpK6~ ;AMqr;s^Iy2lPoz 0!A&+ma8Ig+زrE1QTjal=65@n(lqeb Z >iEsXcD}XmŬxOU :R|kM+6a39u،GSRs+HNf㷕;LɩKqm!(=0X[v CfHǒ-L3%jlh+!̲ >7;,F-yH^d_-vpt)Kʗ`>UjWVU+d0]j];`ZaSE6 `C,< {cacï-l[&7;n?.<ɟ7MGo&?dc FSv7ac?xi&ކu(pSW Z Lzy,êDxfFt5L԰Lـᇻf`~&: d\1%;cW8e>R'ݟ:BX=N0b\-YZ‰>n+%,i=i-F%!o{,ǚ8~{\c=܎~Y /,5,kF&?+ /`K \ L >Mޡ0 .#OE>!x${Η%)a)7~%NW4F4P.撁-aBy:.i xpd~zOS(R?_\),DNfe۾Iv MX_ gև!X[ܷˀ]:bg/uDdO4K?PV8+m*==p >ۥpdX}.is?(X1 ,770p9 G]M0W=vaTlfga~A/HdS9yT~8H`M{e؛U ~8UvJYwr;,jpQ2Bϋ|`K!'"mai]cHiN;䋹>6"\ ę6X8n'unOQvvCp.ppؽzpm hKgDvbxp%6.fOW:FuZp(=>qٞoHli~ i_+zwMdܣv~ ]!5Cs6v%_1MȎ]O0QXu=Hۏ3LX;u '}+fka.XŶ5•o2XudVȍ氲+ CˇV`Cs }NՂE'"n7Z k>/Sy/Gݚrj`xs\i&,ݪ}mQʮ=`%F ||gg;X~P .`7N>-g3 ?tyui8s~Gh?/u2,\:S~u0+Uhby$]z,8t]t,fjYf"s0,l ' Opx1?:ܼF.5kfe6xҎ~ Gw{çcp;ps1~j_ Uuؕϱ?b\- B&x͔N ~斂$ݱ6@J+s{.נz<a}1I(YpҌϰz,9uhY@ǟ5C:TYhqYcXGīpm@uX (k(!uX\IZ3_n%]ݫ {;:`tP)T$<+gw}l,_#Ϡ1ۉX$ C`))[m7x-"# %Lz?K?Pon\_j ]xn6Z[)+J Ox] *9p_ kݬlz^[mSswxohIԉ\&³j;npPs1X9OsEa?' sn+epH ibaoE:b}p~"rs"1l /g&P<2~^V5Wp7Duv5O3czn<ܐgwy͐8 )AT| Lþ2A3<%~:zަ!5KƑJ/O۪~aBس]y"O_fxJA7<=]`gsLlXea6G <>_^$m]?=iqyK+`&gC20ݹO\.M6Kg;^_lUueoQyP? %3^zNq bltv zMqF/REA8Nǫmzt|RVU8_mNiV^k }^G.KqENU^UFr?s^1m5#ݞwg%%rS߱BxY; 'yJxv2/ev.H+M$dǑp82Rk ~PE8/ ~ f[ǥ}Tx1/Yg !>)h;ISO;5N%v voyտsý{ZثߴMN8hU1sv$th{x(Zvܢ` vNV7s8/i،~\\7f=a#2..eUstj~R'v\\w3\oȄ'RXaW\1a&|wySp}F>C+pɾrnM>_-], -f_|}W}ó1+fcpO|bl>z<r_z/4+|^gMuC7Vgz~oQ6uo;|:'BGvN[Wy["?p7FǼ =; Ox;'.a<}EjC19:E]F 0ؔ'%Ǘ%s:n&"7ïcbou}vۛ$6Y‡R/-RN| v]-tWmEOSM[ T= ׇ=4w1U3;i ?n̝ oSsfp-_L9EI oJvo68͙]z_YF98Bv8 ^OY4Un/)"yO:LzK!,\JK+e[慕?kǗ\#8Q=kFӞe+ ߗY k+7bux')j9v\$]:^5>Bum/ҭKc4ʡ'ݎ޳G2bc7y$$//?x%dMsW,nwwkNtG]b{GH(m0}>Fe!(Q=}?~8:̜_Zv1xŏZхomK#b .k/E0KQx7,:qr"HCF)b;Ox^Ɨ&H_1#Ʀ.cpFCR{?D /./hy cnI9eF;tn&7Nxx=+c?zڊ Z(I ߃O<ĉS!gW><%O~h[!D{}1}wF0Y5\!Q_j8݇F—ʇMRҢUhU E>]vGػ·+g;iŐO {F x`E`[ ~cji p{\l68i/#z_|'qR"OݨMSWwEЗaO-Age;-+F|X@ܗy-F0fY63xG\ $G Ix0>;஫Q ~ w9ɧԇ-[/fM=˩}Ч$ ARBB]Oo$|; ^9ANQx퓈y/K>g-}?N$.P#P>x<5}d&r__ʿ,6xD!Rq" 3pWg dBĩg8Z{"x7ՅGa!,Ox}OBPjX_ۭY%G bޯ.:#7I6n}Rnj8ռ0KY[%ۭ7 ΒOYtFS 鮽})_j D6-בݨFPW W}|>oAm2?󺔢o2B٪_?[_Ɠ+!sYZDd85ߏ/׫M==,vx2aOyxXaeTȎdOՎG(&=7pO޻;_oaly'WיB#SB>OW/~1fݡb;긷$>T{oG $ ޴c4РG&1">werMD- ?4%"zR3bO?)A, `uryP c/j»uGJ]+g)O'^$#-xG0^h*GpI;g^~D<:5>BI >g Xi-q>LF;EOcK/p}/Qks_G exYOׯC!Ohɮ|U{}Ju-*av\ v#R ͟3:w"ۙ ǧ^F?6+Q' Cv$w~ӷ;ڲH"\SCqsh DǕ5a/);ƫ|!jcrGES |D{OP^a;>eE@˱_iuOZ_DYlW (!Br8@ G.5@]-ĺַA;) ZΕׯ| 싺)%jkoEI[8ذjhB։za?cNg "{la_6n哱J7Y~=rK,Ÿ4\%.|>ysSniLnX·o&뺺Nc/b\y*~nW t?|?=jߖ6O9jLB I/q?#oFsj۟PG-|GtG#{b?N^0mDԷDDf%~5V f2(X)Anu"ț lHN N?B^OoP.$P?,@t®1tUn#H[}3r Aa: @'[VglLuR _3B:U@,Z574 H ŏLj}:$)n5Խ:Zy3%1_!8 xk "ffĚ%IVJDŌS>}&@ q_׊QNW# Wq;h}@dU~;]u;"yXAk?"|x N/x4E 밮B@bs_|#"D)Qē1;g!x#Pї(<#xsQJ4{v<C|Tq\{ئq2#gu]DQ9؀Zn dAHV"MO!Js|L/vF^EST-Dua##Ȯ$!̤幆kR@C*QCϯᔦC)>. +ݕodÄS[GׯQ ,M"Qێϻ-W(A$&.;Qhі,)G,AH٦8Wsz \'4!Dz \ag17E>!䎒)"Hޝȉ49;N ө "6͹ a;?!<|}(msYܽJQB? ǻ̵Hei2?`n DY+ ļ"J[B$ .#8 _w_Gd`g4=q#3SFO33WSgK`MˆɑhZV -7Jh/ zяWuG]0XBqP >s) )DѯeD9#NWm3v\)o^s} gV>!!9tyD;gg*z"V|m~NDXP6FlewU")mNI#:(h/AD u1Z=D7S7pEΖ}$_Й_3}HXOf߅ ᭚ò+gCN{x{c4=؟$㝈<^ۥz'%ĶU#+.R%_k~ }tsڈjgRT!f=]Jll{ OA Ŋ?SV$\-2-2Bo7n.%}A,Sq b}m!v'md;S# c{Vz=`DK4Я!:X(ID]Ғ{ڜDm7$ǣN"*R֎HbMOԥM)ΊaWT7CD_'U4{m;reb:sVuƼ⛆i)S%C s1t^8b;wG?GUx6[8|:~iU[H:D2t7x8ͷ ‡()ҽMYˆ+R뿛' CdhI>x!bkL["9}ԴqI;j+-.-}J{v!Lb4{qN~8ah#_#}Z(wiP"ˣB8d ڃjz"ToaeCR[?ݱt&:ĸ^\~Nցl1]!&!gsDv(b'ڋS 8kLJKoJf0 R̽Rn\ qwrlvqKd.J+mዄ'.O#P F)#s yx+GľIr!fbAO3ب8#Dri[IvgG/!oa $S٤EqHԳ4IVu^ ߑ\'F+xlDS74qfԮmOI#ǟ QA2q-$q 7=u_B2mES^$6lt,"Dҵ:#D kP+#tM)nQ3 !ѱs$9j8ws҈=Mmů6"'u D6fJ#oi&~7.d8\)j،RLWۚ#dC5ЏX*'C q^q^θ : 9"XHaǺ=o A"GlGk:&↺SBCgNYp"aNfF>iyJ8JύᧉPP[#j!.8GJ!PEԉ¡qipa È_j:>HX@-o =y6&Tcv̙~"[h}$Ѿ|r̖ CaC|Pıs!9NIJ[WTEDى"$,6BC@ҐeN%b&NB©\v{w g:zJ5 T {o Gbq5$6b;݉X'>FB#{}MJ4 s,ZɈɛ6 ~=U{)/)w!jɦbY:(.!I35 )ZCf+e~D6]"s#lr[Ll i{0kW&'vOC2ٵ1AcubCg*3d*#(^DFHe]GjnHTqHL/>/fE̻(wA{\j 1ASJeE#HOwDfЖLJDCND?7>CףfOӐn`uRR!v9?.q9qgs DON!nSk,&|PUɖƐDP!j^- Z-*A_;gMyX_Lcg.>2sCۮR#H0zowA$o?wGbf~7lrxӞНOH感wD])8qWuAYg$5jUZ ?*ICPDԏSPޡ"b'}R{^3~T n|}1KGt79Ѐo̯"2Œi۳wy!8~qaDLz)59IOC+?w MDiW a~d$z)sFH̀Lڐ1S=(wM4G<쩹wCmq7IR?sҙ7InUvV7Gjx[RlzT-L9hpW=͇2D#H~Yiy=~D[G}$->**,=ouA{w".8/$n%$Ɖ"SF^*HNm!Unf<~?k#N H&nH!LrTһ8ٕO%!yaѴjȰZ{{a f*J_r,ʜvql^ BK36(q1wmHy0eҦҧ iђ8;7 IKK1H ץE҂=Sg 1e'pB !3'otH?8:*aʖMFBk'$HwyFh;CF&k@8]Q1O{o*?6߿w9COq(b{b|b-bC|88}|=c9=|89cC}98u|B=o;Epi/data/N.dk.rda0000644000175100001440000006730512531361106013211 0ustar hornikusersg]U?QuW ,D@,ZPpM BM(CBBBr&L)Z{k! :.6Ouvx3G|i~00^10܏x_A0@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@sr]}=s$`_ 9|Sߒ÷p9/r'r~ r~$a!,~l ,~| ,~b ,~r ,~j ,~z ,~f ,~v ,~n ,~~ ,?b0b8b4b%` |F  p'pπ p' 0NK 0`W 0`; 0N 0`7 0`;o 0`wg 0`; 0`w0`~(` , 0`; 0`w?0`~!` 0`~5` <$` F 8+` <*` n À p'pv xr {n?QS|ݲ@cջ#E'8ɋվ0[zOT~֐Dq>q~v<_ <qBiڹMc?өO9#w?ǩA} ܣjמvTz7k~V[BqS?_MߠJMշ_n^~I5~|[3Ew#:>8KY3(6~ !:uG\ ُVLq s_1,ѵW[ AX^UɇEP狮~|Jc 6jˡwSD/Tk7!{nT8zڭ=|~ WuRǠ|]Oyŗ^RB]κu %p»gyME5oex |H!+j|c}~2vԸ7wk0&Sz2ƾ}}:yaC|w?}\y^~֡*o s>r~FQ+"ޟD7?<NsYs ѭ]٪o?Wo纞v ˜'뻞u/繪g:ϿR} z79ߺf3-w'%}-au7ೕW}}/DŽ:OjA8+>WD_- ط@On?U_ \L}-olT?WL~կx~؅szpq?~Qm»z/.X5 c~0zlᅬ7 ^2Wxڐ9?(>MBEAW-^;KMjoIb Ow{b{.~V,zsoWdvw_V.R7 2OzD. 2Q4jWu<.q.b/PX25aj7Ɓώ_8˄c8s~ rķT{~DQv޿^W 7-,UbFyd/$\Xxpҷ'-}ޏv+] )>qcECx9|tڝx' 3$La/OӾ?JQ(_zA?ܯ]\ #?}t'oV S^_LH)ˌC?zC6 jyߏ>S'59N}B_'a>%W4_z 蟦6_>2/zo}WsZWv;:<վsI>oU+gyoޯ慔#Eq)F=u:|ʯR4DDoD:qƺ\'&Rֻ?ɾ/A9g&s <'Y߅<Gj@xNΣH/B3/zںߠӯ\1s*/835C_<@U(GUS P(qbM;㏋GZw;衷:[b3|CqPUa)rK'F,H4@^v~2 L󝋅w?pӄ΅̃^t3^a|ƿ ;?~SoV,<xQn[Cq%!z\ߠ?~ [{,z#ϟ]Tɢӧjm[R=[H/|ooY>}CORe?$qB/V=_x` E!g\y^؟1O&zj ~ejC=4oRӺC4K~|\/|7 vM%[UsXtK9'$lC;@#g=Oaڽrfiql"_V<МmͿўsTB"D3e[ {L7+пU$E?zME裚կc}N{Y e_DO?DŽՂpy2#==`T>ހhlկ]WV8ew {Jsp?*>`p ǼYB=^sMO3Q/1ip PưPבI/.L,w0(s@?/Cz+ ^Q4*7o$qtW zþ?Kt>Ah鮔cI~SӬ̃=R{3BO#i@x _s0< зou'<MC;w]󦧨ԅH彿kt.>$|ySc}>.|s@aEYOnn^y#+nָ͗BcГE;O5D>yᇭXrc =L ~{R =^Əة;/.{XI]k\F;L`jpozchQ?,}OEI53 ܘyUEbDoG?Sf[Ǔ1/zMy1&aG݆t_#˯B?*?kk|_X"Uș#xڏr"6&]e.;_M!U o@n9]BS=a9.(Ƽf琚vGS?u<)|Ă O4z#|MAU?zp,~_qQǫi]qoLwQZ_oOկOSB <?.^X[|AC?ѯB=ʯc?x O{b_x<;vR']:aOQ)KWK:u'I aov`oENA ?ͽ}$~s ?4 5W?5u!*4#)*3 R_~1Por ^)Z˼_ZSM4-&W<{kuRy`Ӊi^UV^?{w2fg۰u臚_T4M=Q5]|T}z3忩_%'oֶrj>yѕVo>? ?^0lž:A Wڅߎ?[?/z3> ܈1uZΛ9ы>Ra>'<*|R 3}*CgҎw5|Dfi1yXx:7-GRLp&hyC}0_r|}tBU9'ݟE/ Y?twOޮ%{sD]rҼ&Q\?xC<?u7EQ ?[y.* QxORdK/ox=G*{Qzgs4ُ};-O+EtQ٢;Plsj7ooOMMW"qNE'E5#z>уFO(7>μ zQ}k&tv1~iW~WN[+ "]#UԿ"Ÿ~\_X^E~5~U @,sߥ5WU+c}O(o;{݌kbHF_0| !A϶eU%zdve'k"\#3rXe[Nco>{kfܼ =MI.I;˱T< ;(tAቱߥ͏cQ'bλ.ro}vp9jwS<P}dmcgu?WtsH4~)~5l?a?oe/m{K%*;Hz{Vj}ʻj~=p㷱Ѓ?59o5}=4_c_ =Gq=~*ocVv~I{g/T_ǟ5w0rbk<'v:{Gs |?j"S5񢫜K *G߷hCxq W֩~;}?ѭ'u)lFka#z~GU?yM,z#>KX"cz6 ?/C[ W_*\`|A΍&",.Jv"_\sh s[\0Kx-~sE 1}2,<_Τڵg/蚟}*rh>W/R?E_~75dj|PHKދ4N-+:!1֕|>g]iǽɝ߷L}tyN<v±/T*ݷr(&z3z}o#qֳ'%t;jDjp3zѣm|eX5a)<=vvKpwS}FO>9-GbHx|gb8yj/‹gnڟ<( +;yMAbkf1~万9#.avYB~>ڛ_.z,~?C%7wmU}:z%7SG~GQ>E~`W?"٠>:zT[q##5Whގd T^Gd~55`ȉϨZ|~*oVy畱ԑ+&>Nqfy*r*l%.i ~6awZ8o}NWßa)O`D F<",Ov q!ó+9g ׅ_zo5?kO#~9D DŽ?fЏ2CxlCs(xSvN>&o(|m q~PqOmi~k?@ վ}߹B>sns4ÿϽ ~]Bߐmq<&ݕD q]^-ݤ'hg"Ag ={'}3)?繅~w)4B zo_P7Cٕ<^?~π-A;r~S_?rzʽ85ɣj_& En-Ye h+bu/k&M4Jn'E3oU=A/i wG/ռ,''%v&2z->&)B ".^I\SW:]DćW58W._Wu _\fq4N"y alc E%ojMQ&C^q䬵6.ϻ8mK׈=P_MS<*KrÜ%kߍl@X=F^xw8t;R-II!ţ_:[8{OQ%<4Cn?Xhq3ntP lU lhqh2]mgu cﺢG:yO,yٍUGNg=v)G\^Jj+k| =)Ue8遪O'5\-[X7ro]g{Ppr/x RkzvT?>܎M?c#_ˀ%y㧫o"7t fa{wkso/"Uf?D&4/4=y÷ۡ75#EQ?+)GhXH4oU˻#׻߰^m?)k&@vIٍ-V4"NZgr;Eء765gD64~fGnpomzBD67ν<"[c\t =qd%gzTl7c'+wu9ܣjg{Q?IuD&oV*z ~X}o5yf'y_6pL_j{%(ܟ?XF-:Q gVW4R"{VϿyx;hvq},OCv)v[gZC Mey\qJB_]?"6;֑ M#kI&eq/m1y'~˱= w^0 ڍPpPvM|$ꗾIɁ6#N|H_x ?Gsz~w?#>q5p20?D=q|sa7cOGO9_~d_8S{}oƵZBͿN%?J0_a6~-kZ'9?$"N;"_}8Zu a7 ~QD|ksXE1CofzQ&Q OտN>\e<-ƫ7\ϻ?nu˓~?g=%>dn!c%1}֣W_s ap?&|{=RY6_?^=..B Gfu91<;&.Ž}F=<6M-^$ڦy#Ekp44,>;a :"oю43^]z/㼨[X[ۨO}~~hŭ/]=!N!q^N\ݨv[Xr먑oOGO8Fޅ r<,ܴ}Yh5fO^1!+ȴ\1CxeAxx=g ͟W7P,Ł4[4?DȗDknh!:n/EazamZú.kc]%XH<#3%P;`˛?Y=̳R"%_ԸSU!g r}߄^B=r9}yÒݿz(g?Q/} zÏ/eaá ֭'0A<އ5N ))qh=bܛ\z#nͽFuYO{C?$sg{w=Eyg}KGȗK9Fg~zMmokbaC0vZbZؽ"sFD vϱ 0㘾|~<y,=PL7rh.f㺜yuga|n]:۵_Un[};&/478#vvoOX'K=(wϵ_5G?#䵚[zXŞ8ܯfoǯH8C >S&_J yi{TubOast?"c>Q%N} zKR!0t|G7Mndq_>So܊<;f\Oy}1ϳ'Z>Q}/c #Ni !Gr?=j࿺~o27 -NGW@?} Π^Oƍ|SgȋM Ӎc7ɓ]Za|hT 8B>g-i5m(J_ݎT?"&^ }~2,eP6xE] y(sޯ6rO?_UoyF,(jGHܛ;rH0+_5CԄLQE/:TqʫljKN8%hkckU跍a9q뫅eѷON5p v1ޔ[Yιe#6ƅ}xG+9q;+6"{Øa5{7{>|x-ɵ}hJ,Ny:P8v߂>cOa;vHnlg^]N;!Emzqu_-vFWiq.ڿT}K6y# 䧈T9vLcűR'6n Ae{ا/P{_9tsY=R D-[z0"_MFD9]x}NK*ejձ+ݹ9U#S>Uw?=_Q UeUKf?G\|O+EV{7 &cngU7H a\qoQ>GЛVVU^z3~ӓg6;NZ#g'e ˈD'X=^;2.S/ky}1ewGA(״avˇuYSƄWW)wS i']-:- yڼm TA-‘/Y9cWt]OOj?ɾ=O{OKM?NȇK^:H?_y=?R&h`~Ƴ_aJspO~HzY^oɮrK]ZjoL?X"U _ݽv66z7޺L-M~~yāGs68-a~&Υ|UNR^^Aj zʵj Lծ_Wd4o9n{hαwQd2rLVEWf&P1N5j-coF}p%(ve#7g1aZ~>>q+X78 ^/^~'L)"WShyJ;a,XR Μ-4qLᬒ'hع뉎.9n:'ka|;-<"=GOv@wP?~q"wm4Mh-.~<ػ;Ot/Gr$w{zXqx-__:}a=Wjg$/7?ޑ>&gwis/m-(ZZ$ni~Oo#vXO,Ns>u8;UQҞ8ߊI{^{Z8m|eԛj?tx2D]vq 12+7hmT^ƿs+-&䡛H眸OƉ+Z0z픗[>:7W{i>Za՜_󱛯c~T˹nt͛d\O%rz˨sCOMu=WΦE1tP@a{?q㿕ύn;c'ׁu؟66qC[),/*&;sk~&~ݢ}^<\f_+'OJa}ʓ'Fiov<97S%o?zEOL1Ỷ)U v˄|,~Oh?^ C>S_M? $?a?|B}.oN_Lf\N{B^da5+Epn' ];y%'axG5Bޱ=_S5Yca?Oyׇ`ܡo:1sfǼ)zScBriG0}'^; }L{gn.gߡmr?lp.N ao RjuZeU7USB:zEװOǭc*QȗuUϞ>ljg>S 6W > $r['l݉ۄyyl?.Ma=_"#4QN+6 7"=B:5Vs, D^aO{ޣedku|J.8?#~#Ucg /-Oթ+z;RuA Ɵc'pt6?{ kҮ:{CF>}6|ѓ?Ş߁M]> =zOC۷߄?Agz1aL?M5~- 8Ux"c?~< y!FOOgB>sҗ_H?Ùሟ'~ֵgvj﹤\3?;A/AI#ױ<c7w;mͽ]^ɹҜTy^=1SW=aGhP|5;{=lZOw?/W{U8gC/u?7_Fɋ&@U)>R%ZW8qհcrO~niC#mD"7id5ZcKm% y]>fAɳ0mO~Q"?W?|;vG{"Ap!r۾{~#w7KSbtx 8c*yb0+~' J\rou8ϻ'jwȓ".ɹ2?/fOEw5w݀GW4M拈h'iǭ߷qѯvx!t55=ra广w;X&ݡ}K'/A< SɽDݬKޗ8{߭~unT~ MY/9OwRGг_(ʟv ?}?}}>ӻ}[s+}>Aܴ}̣?rK<1yu:T[i4woDn[Ma@~a_XXx~O5|85jeD՗ˬqTƏ~>J<8*peרr_UojMeH[layi_`_X~noPb}--#Nl#׋g^B5w;2Cx7zo?,2r0%nB<'9› OC'wks'r7L=a^GD?0BǸ~|o{,$C%C\^6|E /}l"5odx&8"ۏ2?rr9MiS9?x~g?{hAwV˂^<)!nßzϳ^ iO>ݔv y _gq}`OJH~ء=ZGJvϿDY?@댳-_vgyλ~.Bk{}YJn7!?x#|&ed7a,}o Ewq=B^i}&߆ݧxK|\Sy{m a?pw*Ϥ4)}X8I*\e,-$*ub;@oPş{<8B{Fv 6u6O羽8dzk)usZ*œ-&^̾'kqʱ)̀>TY?Ic]x]~o]#:GmEMv&R-Ʊ|rM Ѯ q5O#};&v6~-ӿq_ů~ts/gr+j_\BKT6߳'x|Wm,_p~;; ׇ}~u*~Qu~xkVv87^̽~b=l>6=J *^&+Wu *O_u!"~b+2_F'emxpz6csאo`;q#wWgڂ>krX2FږBהrO8͛)\ҋNkͯ{/ /icz{ W ?P8ra>Ofz=^A$xg&O[v0Foe3wsSc~w\o\vmo_MzEYDM|_Դ.?}k~!_{uؾW.#~Wkb:qG}eyC~9sb'_b$uxvNCď_߹ joqWI."Io?"i{۪T_)O]!JO>|RoLg\ſa &*Ļs?N ǐ*[ǰo\ 2}v-ď6S>:k\K?Gۊ<&z v87?|&{^}d=y8WZK|Cp^_^^N˹J=|y"G-<|sk, /Pc‘ `*q|68R}/x/QC-n =k:qѝo9k_4+""Uqk!7Gj/&Y~.~mS.<ݮ'[[ o#[ ch|w߾B`_ÿDwO<(ng!zӜS}*<)JbU^~u&#A{^aRO,E!=s&|Vr܉9qCK]Ν!\H~+Y*L]ģq,郌gS>߃wkăvow הD[2=#n*&۾gvQY/ŪoƝ)ɯavGѧw9 /toװ 6KlD4W6vﮉ+"q677_*y~5t7w?hww1^mxF}gqz-!.'/C1ߥ<=i=J}>O͟vM=v z]o뀏L۞,8{'cߡssc=&w<7/o&)qүRO\A>+1=EqG<11r}+~qo7G?-&Jknja7,n|k`O+- q5Ua-sϯį r„ř1Gdڻyq=_ Ծ/[~ϸkA난N䰋:[&<zs"%hB^Ȅ<}ÏK>?տ¿Ⱦ\=M9Ußھeq?X{2b=4^|+S]ɿZ~>Z4l$c[=L5Ϩ9 y ISL_|gk#jG_Z&p-C^؀|xu^l CzOŸnvޫG7@‡8wd(C\yN孚 _=aPx3$>dKLvD,>kV&w3?v7KhveBĻh\Gv9 |,8)ܛOB9/wZW{iݩOt8}ks0oN®ڪn>Ms=[G>o8 ]8~ ]oVn8[ 9:1?)ſo޾+J=ztڥW:Q <=;'WRǵ7(OԸ}}@w#OGox.94wп4cCr&GL#-{ WzMJOIO Axp-G&vyjȩ Uյ_ X$ouP8?};8~ecUsImPFۈ@}o?Z\8y6 µя]oE7|Uқ[Dz x%: 9נ|s}?~]c}?웑'^~?19P|7[|ѓ&| <}1>^8}{}vg>џG#@8qcz؟uij}6hvsT;[_aߩZZCC޻Jwۉcy[4Sx-|!Hap/y/9}yPDXx1f7P8(X?vi?.?}w<8C1X1 ȋ}c-bkGNwS8cۙGs$&+ƯKޘSշ3n!l/ؚA;95kiqhbl-SmN"{!^|]bb C.3zkϟv}}y_2bg!dw_OohRa@]#>W:v+5hU*؝&nVC7?߫y#'Џon>qQ#?n2PF&58ư;s qANJ̕E6C->xE6.a#M^|_x;kK݌=}ry9d^;^Du+|G3W^>$=(꯰sۂht؍Acg?giIt&E_GLgwkj#g8~u[@}1 w/fG/5]kmh;K?;ZrX M|A&/D{L񧏯zc11z?rt{#!V]£g6?6Y1C/5oDJzg^Vcs()T$ 卪$v&mg8Qpfo"el=1e&ZP62VǼWWq/R>FS˰oŜF?[ ] wǞG_ i!a' /C9N!Z{7?k?~Gc+:O \/3蒗%f /=~%"I{`j|2F2{㽉q92-p܏O5^=q~/a]䁈w.Uđu^ۜ6qlkm[fͽIhJd^.w̺b_#gķ<ɋ/c5#_:_?L~SEw)}aO+T?EկS[կeoq_O=sMZxwD3e5~~vZ5bt͑7q~:~w O~5!^)yOL{Y;X'q]ΡK{R?U^/>"/GzWSR ~52z*E ǐ&f#?cxՌc޴Ƿ~5kۈXV)E__"?>sӻTz0OoBkg/s{ ?Vx Z!BǾj~wrޚqCf1|GiYW):"</蒇0 ]1U] cŞџ|B]ڣw#olrb!&.)tQΡs^čA7|`c[?]%ԾV}A#Ƈ:3hFqa}Y缴T9?V7_԰OWG_Q<^rDn#.JF~f׻*CoN6솣SW[[nFaβ<$/[<kxB7|f9< %{8^gr ~ps3Ŏߗ?'վ'u=+iy޾OYB~!/`HA4rwj= ?3K4{i|5;܋ٱkۋz1G~?8̿>[H;v3ȣ]?~1UkqEv̏1ݝ ?CmY[';߂h;.vCϳXwvmz!z_8a"C[!!WBl4U|T$G1_:COog;OKyzoR)R?=Tؑ?w8D~%y!MuK=w=S}0%}j0}qo|r*$xy2Ɓw#3?Vm"]5V_Q8UT}RN8iSDsB>qΧMKȼ2? o%Zo{j|Dhx7 ڀ}1zu^H^9F87cX#7iA|AA}{m-u-OQIj.voΣx.zо>Y?^BA߇>BݗWm-bg/~??~d{h7~ zs喧z;<Ì_x+pcD^q11riw6?wpuc(6& yFbX,Ո/wbc?rc s#<TBYjwڙ_L{ioTtIg>u&L#f:Kob_x=moue:99 ti_NLN8NЯoӾ'whg\GmmWaW=vya l*4? qN w[cwx1R2saknsv#qm~~ahr.Exl~X }+V ͹xۉ|뱓|? Bk>vӆ?q- &/B|m- b:䕊u\j'j=-tOW$&b}wzbĵBK-82ǿ?izgq{h~g`\@ȋwA).9汾@׸].y;mW]ro}d!?g_ :1, 6]<؏yAs? Z|J Jk?F|y}:${ )}PϽ.ݕuOyg=|cDžp8=7O8g=}2C/s y_bΙ;E?Pl~{f1K!'VQ|>ǜ8=z3O<}lLon3>qq'}2?'OG~ ;Ï'>?yq~,z˚,CD4Epi/data/bdendo.rda0000644000175100001440000000557112531361106013647 0ustar hornikusersBZh91AY&SYW rG|Tu_?ߠ@@A6)yz:$Q3&y4GmL4MzOMcP! B4!A j` @pd4ѓ IJ=DOP i021 1& $TSC&z@ @ UO ) ~kVnp)wts7wHFGw)t]:n㤮dQ&m /:@Q< 7eQhD(FPf -`v6}hGu( 5a q7ubX.c *G<(#oO] :8Z"5]>xjggS>Zs-49,@bx4c6vhOۯ"if-v$+يhʜWYj2I*̡A&6(ص>v4Xuxh6w]U`h1NsǗ A^(Ld4<=^:yޯ<+$#s LNXdȉ(;v;C݇x77<7v5ř$o]O(!]y&"ґ$+ Hbs4Dd)c uݵ]7:/WnW.i w׍Kĝq\1BBIpZK*tґ H\RcܹW BPl^=2#z B ЂAEMkӼ^/=wzeo:H 3,TFdbAhILli!cILPh(,Л%b4ccXkJH ˊPE&T@쮖YbGQ4 $$[Um4V6MX5M-mUhՍ+2Ul[-mXQ[ۮJ-ֱVj6bmJjkUVFj5}Zk-Ư|m% -z-, xm`D-oS+5&T^k335AQP +ޗbŋ,Xbŋ,Xbŋ/OON. p\. p\. p\. =Uv]z,XKԱbŋ,Xbŋ,Xbŋ_1x/ .˲v]ev*.˲Uv]eث.˱Wev] .Ut]B{uv]^^^^,Xbŋ,Xbŋ,XzWEt] .Ut]Bt]EЫ.]Et*.WEt] 2/%众^Ky,Xbŋ,Xbŋ,Xb޾K/"t] p\. p\. pB/%众^Ky,Xbŋ,Xbŋ,Xbߣ^\. p\. p\. p\. v]E^^ x/b,Xbŋ,Xbŋ,Xb]p\. p\. .p\. .y/R/R^Kbŋ,Xbŋ,Xbŋx/. p\..t] p\. |e||||bŋ,Xbŋ,Xbŋx/. p\.Et_Gev\. p\/O.˲////ŋ,Xbŋ,Xbŋ/r^ Et\. p\/=Ep\. p\..y/%众^K,Xbŋ,Xbŋ,X===x. p\. p\. @P@Ph7Dw\%ui3de 4"Gi=` Yį0E*8 :{z {Cm 0WHhhan!nRoJ{7/^uy0`hؚRH Lbэo:E2469VbFQF{yuG5M,U9B"B1$CIW$%To u<]x18a P3qie<Ȋy{)B*z/hkATAq)WzUsܞ8aͥ~k9v:{oW6?z2#4}Ќz)#c c[ *BF"D V-4+JW޸@΢dCi2bbۏƞ%r՚碽}㖯u59T@S@VLJX1w$S pMEpi/data/thoro.rda0000644000175100001440000005152412531361106013546 0ustar hornikusers7zXZi"6!XlS])TW"nRʟXaqjnj-&dV^ꥍ k7}} qrRs杋ʂ#}+,[J75)2X: `rR#~LOTAZ-"p-!}abO̲<*+Z`o1ڳ.ڥ%x%g// d$f#)A[0K*9Y}3Os 0+w)$6"'vI\0#m1ɄJ&(8§ `Amw ipМo$#1&3jXAr'vE [E5.<MTrE\>ՈO'K\,˦J밇@JnW6RsyʳصH{{bFil!NDZ\@Hk&\Ag D?KH:qq :sQѤxGÜ`3 Q= 8K+q+vHc\s41Yzz9Zw5PT0$ lu1Vq((, x |peKp\J =s TG!,CMFSJg=ȋ^/:Ģ:H &o?(L4T$j؟5v9Տ_LD|=;Ju8tdvP,cœa@Qu>Doj>[M5O׀t8\3B_2MKך{YMpS5楖U^)iWyU8}0nfM ހsFGܟbrx^S\݂'uYSC1f4n ijw[GB17T*TR\w"w P2Nkb_y/E&' T{VZXX2hb&+ci3)hxN:,\1SƎŖZ$`T5Ms!j67o9aj:N+}*-[quI0ҡI߳R i؟>\kfYD5k^ Go *6(-ŻJ;UdOEq1# ]Zs{$.eSVM>ci}'WϚӸ68z̍r}kNuBa~eHH(޻r G?{Q3U1FXVJ_61$A_RȈ4XȉS2c}iߙd}$54+ ϓ!cǒ~"i6vQ}$3|EjS'r)WLB4ӲP=,%)<k D>ZM1h w_ Dڮsw564iPO;jϦ]e dMZoάT_x4U{( 20@4y>CT9H07bD/A'tiJټ c33;@^,䏰yV^<ݔ#=^$Heʩ[ `V:]I+4GX#]TQ}RPt0[X-Iƫz!w!{w$2nF`Kı4Ii|pP#Q=Jl4 +4]~ XAUvz?gN{ygnBX3~( kܨg-f}fm1 :-Ez`KR,u<մ3=GmW 9tMYdZ`RԈJTs?gn{djloׂ9$޿rV~U,ao,Lwu5dqMJkiI[kO_\2IUK5=6MJL?ND%P$acGF:YA_u˟Y#fC'#$&+Mӟo!:7 $~/) RVsqp. &6Vm4mv+q6e;7 0WuZuky'b/e*h;ƣubqxLiF0&2;%DskNF!M.dusGR0ϋHHw> \ÍUBJ4rOÇHPM}ެ`Mxpol\ Ўׁ<$||BpH8>Jҕ0r,vPhG\cB+A +pRgl".t֟HxɌRV hA<2/ ,U-&s!(|yGqOSr.Y^:щBV߼HМ4_)f ]4^r]uDBrk-L$VMض]͐y굃krVOyƫF0i{sNϬxɅCv9/m!"1jn)I>Xo fPNtmtc>Z q|xH#KܔnHyث:u8-*B_^˚l`5ǕEnT]M`O;v"86QOq% ֶŀ}IKW@R)΁lR2Bp_2:F"~GAj:r5. O砂Y@`h|n31oIKR*xIףcFúLBH"~mЬlX(ubf~0\,*O2wP&DM=a0b@ m/7_"7gCe&!K>M_ZVi\:uĽaE;Up2:k4<*x;D>ʼnJD/)"T`^UQdpt3ȇARw>$7waÃܣ]9:BD?,oIo-1s4"U `vןdN 'OӰKy(-Ԋ1_iBvTW@ ҙ#gBV'; ΏKtmLkX^庱$=u`tx]Ia-پSV6v t'Q߼GLA@o~:zj*(̗ŝ҉JJS~W#mau1u>4nA$}ߴp}ZW6B'.=~B! vщ0G}0~^ںSgV=G76U2|+4ɮkI0FB ##,R3o:ƙ}S4C Exw5JYg/@J1Y>Ww7uLBu^Z+ڰV3&|}'5O9D#":B=IR馝Y*IXq8M=xtIqQNj)HÙTʄ:Cã43^csI'neB& (H0e<8NRsXh7aVZ뒈L b4g# kFxԽm!O]' ɦ'['A+˥>uBjCk|rT N-fI kU߻CLAAKңWrLrrp4~`!)28Y}ٜmd&$,7<Դom9+$:]tGijTHq!6sG#v'"P(daLd6`f uEW;TD[V,/EM4)o@IS,(vvX: Zc'k_$D^*l&|1ޕ]o.e짐7}D҅ٔO i)4x΍NoI*W3b_<7Pw^B{HQF-j\XKG uZ0RzcF&)re7;BwH,RT3D`ʲ%rwA^jЇ^eQ]+pSG"JW/0 BЈf.'U.r54Uj7P#"za @OEʆaox 4I~-ҋ#o5 3@u0ؖEglKSn0akH!mUDMc~W_S?*oeA@[4Y.o7!S5[#Ys·r-~\kYѲ >^XͥHcedzjвGj  IqE493=뺳s+Q#FqYX?4E~J}#1F> VWޠOމli;YeZҖgv'i0a[D %>/$%`5~W`GqLDĜgeCPPON=HT-M{YT02 -쿣=f)L|dZ< y_)'C 4iELXZ:l2{{-LJ6B")R[&W KI +dw_4[lR<M|[@.d1 ZUȅW^S#^AIN DQ$Uڦs@G!D{bGBUp@]x('? ᘭ6Fx"v7G˽+E -UQSϱi]SM$c,'yi5|gj@=Rfe gnk_ЬCPz,+gFJ@YBAƹ9+ot9 ga wƠO#í/WXd}*%5/0=v_[2I `G7=:,ҟס~8UY 0<Jg•{ uF_V*#q—6_DE8Hcf%8`/M γI*PbGbkؗ/$$Q@P >, g9'ZbďE=k]݂jX:!Sq00w 3^.TSL&)J5 A/."VTAWX 7'׭kmL!p?srl*ft䈔m>DG V H9gi.;PDXG+ӥ i'3#l(Ŝ6ʫyȆ{%aNB['+Yp1hM H ^SҮ3](N>O&VJl,0?˃7ɳH_U[%R2W2TI;F b @tuM/]zM6P9NBoSV ~B4ˋl=@ޮYR|8t\3">3C8LA^:q;R]:::Ϟ]sdٳ43MFn[e&XY= O&8BkaIR:)`N]0^5pn #AwX)`Ӗ~C BFMP< Ӵ>Zfu,ǹ(\'2:`S\hX0}\"byQ< '.4/ 'k8yAN(6SQgBlp oɴ_wEi݂^EBZ!y!¤'oiryD(βAŒIVKKZQԄX:jCw6sKhG޹B^L8Flp\y*`W7,aޕ T&=K8" icta9 M"Ȁ/Yx`nc;ul,\=mcEsm.J}5ESItp6qf{YX$=h4S5Cze S71=#pa񣆀ٱOi 5c0HhSEW1Ŵϗihg//z6D )f"&U舡v2."$3w/C,twAX7m= ?cpՖ-v/l%˸LA՞ɦ& t>e8ۉh4M= $vXM|@7N|+\u- ΧmNrcvW gQ=^ͨjL_ɫײv:',0*wu0&AγyL O6ܦZMz&d1RPGp0ܧ6p-RnK(tez?|*I/Ƒ<#J`JpT{&?ȏ_?ݖK&pmwʄ_dpp7i8Bm+讋W_|"B Z$bC.Z?/ °v@r;0t;whQFkN6怛*2Iag_"5~|i]4SvxTuʈ/Ҳe?͜/ڤ֢Ѳ/kVByp1vQks}Xp%->R֛5u`PZ+BaΏBW Dl1#p#lLMdCuފpSbڻ} f|G}:qO#RP94FzM2u]z.o_?Abܶ,vҏaU@ek4E "ƃԉr#K]}{27l_ H kǧ&Vb!ajuG+Ǵ֖ԛ}qNM!U!9^gv5 Hkt8XolKNJHDS7dp Li/ JR6 .;&PuqW,ҁpllPʢ?ҍ ;Lva1#}A,Q:) Ac@k@;|HۥG`>S6D%lsM" l+o1\O!zTg5Y8W|HB<}[/UsgY#tw^I4ntmw,*+ \m0F-b4Gf hq!MT#$)oGyC7`3Z6A6f;W>6sF\a@ŘNh ;|pٱvY}XPePq˅⺞#]_փVU|E &F0{Hx>A[2*=Kص+r sh4'3ResnGA $Qԃv/a|SO%y`p=_՚ԽR#EYTQFqnmHki3ls6׌}?oHGإ^ 9iLϣS]hb 7rRkڎ6aNC!vRbc>I:Omw6M0 $H|-yuXş7RX_L6]'z <ټ0;%94 !h h()Kdl85-vPApjYVD_}Zz)bYʁoDegY'̼qUpum)dGxVQn'i$Xl:P }vR-MZ4dLJ:Ǫٹ#' ^Ziłv덐 JBa= FK/Dl MZtmmAkWG'˫jqZ iFy-Њ_W-J ە<>@)5-3#ELSL֮,RyQ 6nD҉ز@CR>3$3#:Q<8LRtƜ;6(<ɉW/B+d9)_R\nG}S x:+>޲ߛ%BJ q1BsY}!yЁP}jyZN^dDێP|KKZ~1M0ȂFټēMQ43M]" TݙhwŞsƂL'K!'1RՁ4ǭwL7!H,`.*jp@Eg-EJЋjigi(\R :gM k F*r`|Yg4fd\fFME $1z4Vjx&8mCҊlE!-dTY_8}% 7{\>0{K:35\ŘsH dd:{kN <{GOmV#{C~a sx +SSe]vYE`&SD6=eÎ 9ثʜ_֦S߹\Kk*kUe#+ #esڞu156*ФY-c|lJ.OK榜 [j^RyOsMS5 '6cW7:tH'ǫ6V69()﫳kb,v?'HH(2i=oKw+jlm}xdt_ڶa)[m1]\zD Hukz,TF#5ZO z(pϾO]ֵ=/H[ȠS_$%q]M]Cޮqsģwa h8Рdw.NI;Z7a wy퍇\ڿ)`u=K ϕX~vkGH22f|0^biST%:ӥ1*&ZS<^ϭb.The"9i7|1})y+pսl fN^}"11v!dgC$= cL!Gqn;*\z贍f2X 2W=X<BᒊKN,, Υ!v!|^_̂\*>3%ɿއ 6$̼(C|u B!܌ z֔ 1,^':_|R9#rc#3E%ILlwjirXفj0|9N| f O[EN_Ϲb!U Ou1ȓY܌'vyZq fuuFDSѳZe{eWϠ;Fҏd/8\lsRs΢Y@=3EM#f[YjPXT-8i0ȫ s1o4\~@eYQg:4>.t)H+n ڙ@@1R$У2g09b itNQ,t(UI@@x3z) uP*cP?`RGS7s_]V`_/fMpSQ|=DQor).%*2 4K:w{ݫ@Aԏ' 00Qb~σt$PĦe06Y-wUa=(e$| xXfA+:_jqsZ*Xe@$IR)(!4* &]mgR-66J0YyQh"Lʘ(:A^yu{=JWVH520e4fAkKS(Z гr`$v^(.F8=;st*ZfBv\9% mg5h %Cij%lUZ0>o!t,߰KB]UL0(V,IsgKm]HVY% f\<$'-G `WJл/QAP%Sy}_yqMF0 عLUgF%aQ&Y.2>Gu+u 2)Z1}#%j^Ɯ3r5uUn8HLBTEQU(ui1?NodqlW=h`|fƁ?ЄC}ZcLʉ8\"3]̫宛 +ƐiBqwq<x,q\ZFBH Vwb`"*Q]RJ4~qmV\aloT`uKj$#UB8K}pmM_P~DNwy]#׀)Ǥ3M-6*yJ]N!fp4ۖlDžzOvК=gvl)/hhޖ8R񛘚! 9wN>rc;+Pԯ^O,LO5oR"YO%vg1*1)=[s2_D(.%qԦ.*ܮ^y@AnĉcFbzJmڼx*pQ^JDtmWVda=kR ##A(j7'ѿNFr]t< n`=Bqh~8_uG#>Te"1ί`Lg!c[v(l[O1+ $|Lpbzc`1nUL_d09G[G !i&!ܲdQ9g]B _:ncqlh bx|p n&{"ma9Y!G|,j3V$z<F_b4;咁):~5 r5c*Z~Zjk6tX|DϪCٰ&PF H AMB\!^\7U@ VV޶\ewpT+l4=ʴ:"i8u$'$)wyRKG!b?O`r=a axW aA`'{bKّVxPc4p !cCVNj5G676ϼBĺ QI(NuW=LGcjeFQd?ܤ@2JK[/6VLhPA8}: o6ۘApsOix`萒fuS _Aq  H\r"Dܥ(RA{ǭ_@ܾCٔvju<6@?PvL+Q &=?jg? ]\Z+qLgҟOwXk3h*-^ g` rW?A6e(l~ ezC :jK[HK?v%"/}by'a\U(oGNaWNHUHNې ƶSڄ⺚g gOMdC)K:/;R߮{jb KOiwͼ]ywc90n DtǭNNSuFgw8NrJ5?q! ,c-kvۆWqz50+G[bO}G|.jW$x6vcT'in\ 7_n`|"`ӫ0*`χ ĠjtO t2AvK8$.l2x8eN2-^;015W%Q9)Dte5Fg>#s0QV}D O sJG?#k$%K7&̗݉/~Zis Dv"#jK\0^^ɘ&2dS.19-bfuaILzmRc~o? Sy@d6WYqRMYB9D"h,ĸF@k P30<ə+exH05Ky1[0S`}4/?6a.Uxi [va7U<|*Q*CCo*xG[~g\ [}h\PT]'76e{Vɽ:K ̈ /D[m<.g[d1(;/+eAżFG FDsb]R?* >}+|2]̻u?&2bPTpdGL5_$H[qἵu~4sܬt|5%pNd R+(`{}T?}Z.М0 uJMSls^H駾 NNu  6|$e>송kW$΅`i_%;kěW66  42 !}}qx*oU k@;C=+ 5['+?oa*Rʹq&\u1(Z2lBZE*iVKܴejfPeGl񞅡04UFC׵Ӗa0!1K}_WyrW3+) f(SXD)vʢ&K=m~0 ~`VVõv.LLxVGW;$1C= +5#}򺓪tq*VH7}0Q ~1零,}y=Rr,Ӻ*WJk$Ho""J:fёf9)Sx{G>XʪKEO ͌(H^yldƃr$:>.Q3K~ő .m䖟BGs1 Q0eU ! oa` ,8}(Ty'gƸF,=IEsJ͚资YwӳLcA hx*}Æ"Hb}m3sa67~D!"}gc?]꺸 `UM1%W+dʧ'#SxBW*h9#V)DbsʩFI2ܑo=+T^F5<|:b*%ga:ԕ;MXt;zO$k0V^+` jr\KN}yGsj\Q-s/s_-B@Dp:a@x!,+ w[H'-4 bv J޾`V˽s~P{@Ͻ^w Omt%Z*h +,WR>ḯ;_,b|?BB#,Tzt/"5c$l b':D@#Eha6£myhdq'xvތ7zuZbn:r`zW''Z@[HA}vϗ|E .H5|$;LU+ҏs߈GZ]aN[$٦#Ku`j.XT)uؤgnj`՘M?| rD<Мc&)z{ mkq #)=g1%M"@GjqEFv4F^}KQ-m:FS;+E+^/^3<_7gUoZ]||]-NG'I5\X"脑&3*C1fJ }賢´ObDʏHRcsrgI=9)FQۤ*N@Xt=5c(r?,*8T(c`'RE`AZ+Khuc<ǿtHLF҉em*": #efqnِv7ED#iY&YgGΤ*rpXUZUeچE;v%5+#o^ݼ|z+r;K $#HVFr͂:Zт' Cdb\"RU£׏lFE7 b t# Fdj%Ӡ@C ss\}(ex9ʟȲъǣ'Pז9tO0|!(5EunVrP^hMߒ+Ȫi>mIB#cuvd=5v^SBl "P,FDPjWXx'I zIU {\%4Ӝ܋C~:"+Ye?O]՘c{co9i z#lVOu-i!(=R@8 B(8>VD#ىZ5~0tt -G$ xƆ<,Ʃ@9ȇFF@Vw_JBe=h&\0kJȡF 3Jj?avEOI=Oh[F}L[rxKe}VH؂tLa̖5pKsj@%&4!8ȪI۵SjxAbxC_RNS*s \ѡ((\oG&^0ZV#OqokZ cx`̜BM4Md/IB(3A# WH$);brmo>c+^μ6(Xjܭ[uV>פl}6iJH4d[wmU0#T Ns ]^e$U?hA* 9= &_t` iY=|\#?K2 -.GP Sha PxaHzY穙;䬢J<4mc}mYomHj^An2}0jv֩7Kq_ʳ9$^4 !Ȩ|W8ut\Ģފ/% zJg"?|5se * 橎T؄\HS7HBȓR &?;֝jq(uݗL\F1n xPݏ8b~`YY118."7VYZ"':ϯXMXFN*C_=Vi d d3K Hwx&St|c4.KuƆ2`nO!ɂEjvYiOîAg|#4+bJ! 0?dg<͡\X ~s$ԋ /J|Fadz# Pvx=HU4!t;W ƝjU@HGZq^+ġÿ2Օ'jh)~L8CMj\>hUz$")oO@[8dVe@+y}ް$~rFPRu+SBMKcw*/h:kX'^__loYP3̐>Pss4tdq#+po1}zp-優ةpp!Fq/mEӉ)H>0 YZEpi/data/occup.rda0000644000175100001440000000045412531361106013520 0ustar hornikusers]J@'Uh"= D&"]br16%b>| }L30vfv401(P{jK9)a|`GrI A>7PګPo/8'޽cS"!.RME}?1vA'HW׿]GƒkOH~n-FO,ij>ߖ)+T9>s K--K[7" 5nWxV.]}Q7Epi/data/brv.rda0000644000175100001440000001346012531361106013201 0ustar hornikusersBZh91AY&SYgtr7yw{;jEx^^%٥ qzbn5OHL"iЇhFhD&~=Ƙ(SSMj{LzdFMi5?QSOjzi=M=TUJeD@h=@%jhCQ?J~Se3Q@P=M$RJ"F zh@PiF=56)a43CHCɩdi14 (#iAiz#4zM4z &Ɉ6i=#M2  24)aG!dP224z4h42dɣ4 4d@2.{ICI!!Аkp9n^sqsq]7R8qLe%2!)I`I33) LJ6[bHHA$33p\\\sp\'9B.qns7 \#.rkKprHK(s\ s89s9'ĔPR;%! !!BBHHBI !HBBBeX컻..˻˻컲,..˲.,˻f˲˻..B(vp)SAIubxo7l:?pM[k}=$NՠJFzLMj/Vn(PD:cz d{6<{Tj;Dkb."= +Vғ3>B"{R n,ƪ2d~ n+w l NK)Z)C"?C  s be(>*}4+uKW@4W;N`uLpҜ+<P`z8VK4if~ZDg0/#>>cԉʥ]I*)?J_9,֛C%kFzm6EyWR*E%?wdzGl6 '_;u"QxQTs{N,:߾sIۿ:c=$21keֶn6P]䗱;*yO,e1=!_lmʸG <8C'\Vc3v.b> q7َue0y qpUKY4NV+|Uҩ&&BP T$-Ţ 'u2lB&`E D"`d(Q@]mmk鈓E1AFb1#F 6ƢWoZ[m HB:xV nݻv۷nfUe84QWv1[Yd?#

  • A!hPBpi$KI! $ ;~+0PĒd I@B=*a` `^a))7WqyL::1p.!s&>";@U-5~ o;H5\ 6l@-}ƶ^ l'q@a>΃eϑ̍ək"Wt;^SWN@E8uU\PsIqq3';<\8q+`8p6v7<7ěf 61Q'J9vu 0]Tf$;BY+(%8S]Z((T]88888:~YeYe6dI$I$I$ɠ7wF.T PQjihE4m6 m@lmE)iV00/^z,,v|Hm6 m@lmd mqѱkdYeYf (E4K m@lmd TSM4E)ib,W]u]I$I$I$I$I%V˗.\UUUUUUUUUUUUUUUUUUrxVT]u`,I$I$I$I$Iz׿vUUUUtDI$I$I$I$e|N!au]u I$I$I$I$b( 95wbAፕ6 .4gqQ·5> c8|?PbxNu[Me327\ldESQMgcw.k44`3 A0PFݕѺUQ:+_)]1!\3B( ӳ:+\J(I'D'YHChceڹn;\_WmxL#HVFENZdҿ1+#ҵ":&_od?NZ~;YC u08Ķٽa]A҇*M3yvH|y[2h C ͅ =zٓo\)jTYgm7ΝS%缠f 1$n?pl*"7wǼ F& "G;aeX]QAtu:[D`\a\79{ќGή$h9M6|So1#H LKuc:s. J.|eTCF_|g,"}l~Yo9\+CIIdTKA&lvsS @ NZe XhS14?g<;}OOKMGaG;:VKKX$2;ut%dQGqj15uaMVHW%6Cc}Mpͣ*b+Bq,2Ȩ36H4(){ZG5d4~ a6bmQ 6gVjlتJFe-_FmkTۆbq6}miz(TZyE#J?$ a_SAwؒ@Juϖl I$ԅ@*V. aS1wHQq9Te#2'}.\5D2z7{Z_;D@F X pPE a3ik!HË܎a|6'Cӯ㺣ԚP{Du0\^O|tW!LTJ~BrXhħlD*;2Ce1fyVa7:Dd]eM]^;sɚsL,5GB.&1~**X;12f UUf U8E'M7ah-@4 4 6ya r j'!V\kv=t=%q97!Ep|ԶڅM8mVi2Ͽ:˹{K,'FuylWnFZf}Z2VBI/'լ63ݗ½ļta5spclhYHY;%6@@0ۼe.-AqZ h.JP[3XCTN^8hڍi5mmmET[dQ&Lmx$j( /1 b174pM 38X(iE$Y$ Q̃J&C9$lq+HYӘZ8y1]p $I I$H$I =(`sh]G%'"NGU7ӭAK500d陛oVG3))qc"ٗ! yb8.QkNsݟv~꒜FLfr|MNWIThyukE.p Epi/data/DMepi.rda0000644000175100001440000022446613051441761013424 0ustar hornikusersexU5w!;ww߸{pw@p āؖ$tv'y;=jUՒcZnUCwI Kτ\$LTY\\BRT..i`\D':щNtD':щNtD':щNtD':щNtD':щNtD':щNtD':щNtD':щNstXxp}s6hfG}}Q{=F=z6R[K;|p0f094t05,aa jX\ÒkXZ2հ5aE +iXY*Vհ5aM khhr.&G뢡hhr.&Gl袡hhr.&Glꢡhhr.&Gp4qĖ.BC>EChh[h M8b ICGl!44i\4& }Ф#vp4q@:CC#:CC#:CCGtФ#:NNN!44i?4t&Gt&Gt> ICGt#:#:CChh?'h M M }BC>Gt#:CC#:CC#:CCGtФN8?4& }Gt&Gt&Gt> IC?449?449?4qD'h M8? M M }BC>9CC'hhrD'hhrD'hN4qD'8?8?4& }PsNNN!44iNpD'8?449?449?4qD'h M8 #:CChhNpD'hhrD'hhrD'hN4q@:CC#:CC#:CCGtФ#:NNN!44i?4t&Gt&Gt> ICG=6~[c;щNt 9щNt?`%':щNtD':щNtpD':NtD'ЉNt:щNt?D':щqD':NtD'ʼnNt=D':щND':щwD':NtD'8܉NtG;щNt?x':щNtD':щNtktQ^mly*̡Yf:wӮs'_TkG?0֮>/Ϡя5- k牕ѐSU4_MN-c{VfXcrgc&r35U=8^RoU*ioʭ6QuPBagU馮^RU>^8{z]x^akWUz۫~zxb;Oq,?6}U.Zݴ{jž,79SσjrD\uQ;rwuQs=tT쮎{:_ű]Ώ.q4S@wWeCO? 8圫c{JRzY׳ECyrqOdYrag|q[q=>_kxI~_8j>2u<^A! lBH}ih.kN#U֎/'y~^է\cr򠑺ǥ:N^spslg,U+ΓOzq\)ڧ5۷8ʔU?Ou}'OգSS^V{QR^~^CC ?>zzhe{}>yF> RAPySi;u:=y]-UYxi89絋q\wShy?t̫s8i|\<x\ot>دnwdγLy1Ю'r'#SK__+WSH>!oT;y~2v@muIuv~PHvJ{U;A S]_g?>8POa77r7no}u[Od<ҟ2QUO}u]5.S䝞/<T袍6iTyϧB[} ~7;e]99O8*<~En 9]U ̿w:g9VK'C9nqn'~:Opq޿~8y<xKkX^C򀻆UreL~oմ (mE~ #*/h?hp~x8[v4is^Sʋ8 RNP'S~PG!oXʔǃT䵁<)Uss^^5MeOSe^`=7z;^O>oY_ߋ`cG:K#ӴW=i%;!;APH>!PSEyz#_ uy!2EVvqW9c;'ܴux4K?w<{(WKkeiE+s:%a^~}(PV+{t:n^)yT+tv='_/@>yU-r'<"R)o<񏞪>8y' z"PuYU{)/OuaT0AL}n/O=~ڥx=yG~B~/$ϓ7eߎχ~)E?o~gswK/wyA~^E|A>))8o ~"ʽ,y_vv^_ne%uh|}^q^e=^ߏ窬8S?jqw<: ShP?㼤e{RSyS?vz'I9E^e=aK'Q~VP^ TP<UH?v>/oq/K/7u?v8xzj|,K3?G3ߴ+hzTfY|trR'췻N;q Ou>Z}722`-78p~V)8rʔG )Wke7. ]cn?Isq{ZW|_uzrS뺿Jχ-y".;&x>>=仸oqS?O{*V/<A_]_E;^V+Ӯz^ zC 򾍆(=T#M+6EU=;PȼoU<\Oh.#U=QWxCxߪa~-||4Oe\ nG*C,x^GǞ{Y]GK+=yv >{w97!_Pq }!8Ƞ\5t<x<]j8.Yvp]o/WŕGKݠsg8W<%.6."CUu9y!~mZ=8)= UP@>ITO༧˓UY:򋾾^V)xN?Xdno+/ Eƹ磇~Uyjw^]7bG($/r<~B^ 0kǙ<x _T=br,׭2lvyZngp>RX[!p%gy箐@CH'̿oB\vvA+;><ղZ}] unopqS}·%D?(=Rs׺A=|@|cu|ANޡ5ծcWTǩq^SOZ" kQߊy_VU}=QH}}:N_SW _n+,z=vUQo9Rg|Bc^z ?ω8bO8NQQOTCG?=ˤ+Y_gYwF}ÃR`y"'O8/9O(tuP]_KW_v#O_X__gWDnq\vIq Z}K(Oݴz<\ZYO;`=-Շv?'qp YA߻@^gr"?R_e;x'>O8"K>wGNv{Ak!z>/%)ۡpS"-?WqC==.\v KQ:qC9v(_ُW-lG;#Oѐy<+~PX[#_p zmyűLz(2 iWP/$PgBg<Þ?S^ *?.UE QR Sɛ_5BH}|qjFǨhWx~ 7h T|ewjqyq' uq^4=Ko_׮y}WT}G{q2në71FX;(QhA]GJy@{űsSOhP*sѮcYb?)<,}}`=WtOIi8[w׍?奛v^/z?OwKW!SYCK{?:c:WvBo˦ܷ',>g!ovEMU3>\]O O V:}mU|ݞQ|k|uzڟ0uz̓~@ `/'G'rU&Ӯo/7k`E%:zg>GA((#T{)1OO|fy*zѯC{C{OqbyWT;Uq'C>xU=e "){?g/qXҞd;򸺞r߾Ƴh{ZopZ}rҮ`Y!qssR@BݯգOǵnBsKwzC|lWձ?1YݞM״Cu> :8~W2WINs:_P?=!T=>ׯ3Ǯ׫=oF9G.q==xz5TlwG,OE ;~0Ʒc̟C:\kBx\q DX8iQi2zc)>_ST&z佉j"T]baG&?uo+C2~D%O}?>-ôWh)u'Ow^u'WoQ^/ʜ4=ޫǭ]_ʓqKy^WG<.ou9?2q=>B9%e=:ZE_WyXE;yB>qhrGmU :8}}r(b<|D O ҟB~_9t?uTQ 7PSz/ux:?v:?DZ>~6(XO{y_3N.A;~3h0Du㑿i'}N#QeWkRq6ә=3~g7AK.!/E9:P~pծ= )ghxyOX?7[yL:֮+/Gz}]뼥t>mrWIv]~t2.@|dwzށΣ:ԎL}KAy=-i'%>ȇ=X_yhwqyϞ冷]oD{r4og5'f}>D7QeoAOWb7C}żhXͱ>v}D^ɱT}iwоqt"XyO|>O('hSN;崲GpQWZ?ŹpƯqpSyu?ϻkוӮy=.O}Zy<S^u?ZK:oqGtJ_w?sKX]kj+j9qVXFynuB0>2S/%PPdܚVo2OE?y?jܔv{vO}D? K_aϫqq} <^jCǞ)g {[U:r=H6Oq1ʞ?q>ywDTپӯD } D鏥@gq뼎v~mU)8/8]wv].wq㬟A;tOW@[_y]yai5<~9֯wW+>#!_w=sz~D/yA?? _G8Ϲ"8|S+Rȸ}=j.}sw2vC:\ӱ?}F~宮W}Av?{*8GSE*z{|\s1_0AK.y\ߓx.CR^Q嫾~ձ߿Ot.8HjwrAK~ nq`ǭk7ry8e/e=Q?M_+(ݴy^w)lϞwީ/L-S/2OV ip1~㨟RoW]Byb㔷+Qݿ_x\}%g?{pjM~2k y]_jǯ_Z/?p\K_#W}?TuAU9^}؏*Sn8,۵AT=ԇi']uT;AcU ?Weh/V5^ '(Վ:N?IkRrs?S)J.3k?/~g_Vrx7tv:_\+'Lr̼B} ɱ)}ש24$~['Os=HCU_xyUoC!ߐ'^y]Z;\f[vqUR)|߉yu!jb=a/r'GqMUSMSUuN^JRVbqX$VP8O]l5nŜ&yg!yD 8~+;g ?} ')wȌ<>yH=~+ٺ|uӎ.U=ŹovG*V&Rκhe}E9λU_Dω=_2-'J'h_+U<@b]M._<-aeE!%%WQcyV'e|.~Fry|R|%'pd&D:^73VaL%u,OWgQoW?+9j|x:Ps1s9>꼒|'U.d?,R,X5NuU}y`ReDBLR/鿢ӎ"pܯ?q<-8}Q0z^NAt.ZUnv~\޿QMkrʔl_߭G}7Owml_K8 ';z-76 'rTY78/o~v=7gm}<ϹVfB!_0n~h/p̛8yrBK'{2ߔ-}}:ogQ] Gq]".YXU˱LYm:~%LPfd^<0^MJOq3>]ɪ:>Mkqoj<3oЮ9_,Pi_'oq,P x|k*<٪ǽLsk8}? T\gJ>eLuK'R`z !?B}5FBW u^Yc8s\zny^_F+Sݸ׽io@%?_Ruz>z6բgjY?AoqgetWqLQ)X(si0n>Ecj7K|SL~jg3;\Sy9j瘟MuS0]uߺ]fg|8ڇE+sW|8]g._GI^\t}q*}Puhoheio2v~}A*|gqx*s%G߲cv}]:O{'kx}Bs'>=pS}Qծ:ߑ"_SQӾӫc|vϏuWP8巪 'U?kpw{|/\wbb;&TOfs[Ouy^\OuB?3>Xzw¼ZrU;q> ~yXl!;z;nwbGwY,2̣]kR.0o @y"ҟm_oegO3ܱ>(gԏ,5.< 4S:{Y=ˤ+{bZYlJ۱!/1>~3VM_=GKg<1m/i/gf|ٮ}}Cϸ ?u3Hz)'LOzc1?C]<1oIQ^7^!dHu}~vCc.E=>zISPrӤRy7Vӿ:EKou\ON=G=I(fE;`W|`0/a: ]IV>w3AMiqS{嘋B%%]i7.\?k뮗z>.}}^=2;9.7Eϳ}}?ZWL#n`;oy_+zn(?yŒwoU#7x+#O:N?q3s3O,s?7GljU üY3S=^q]UsUA[q׋v_~e(H^zvy&o5vE߳TP]5URe|S|u&׵b5u_f|dj~%XS~_9nߒPa_~QϡG/1&\OHPJ_Ƶ_|<_zY8z^]N?!{<7v_{W\n\.=P羒Vqԧ}bEo ,Ss%_.jX]@5ד#2Xj=_K=r}!Uz:X3M;}诲Γݟ#UYg&5Q}1{<9K#q;i/!؏>Qǹ//nU{S\ -\M? ۹ގG>_wyO$ޠZGXo*޿Htq};ޜr} Ѹ_#73OkG,2|ֲX^aRsQa^6#q;q#!PQNZ/Pu%m ~u{H:I=N98~׻)#qkhe?^}q|/W(ُmrlvDyeK;=~'陗KK1Nn~]o1N<+ ׋z|ݞ_#bD `̋~~%eOTG1~2yx,AIcdCkg맪KܷrZGgm+\O2C|.wz<٪s=;U\o#3ܗ"8Bu ~F^ӾCzj#z Ǝ:C^G?^Bsĵ/H\qCGدK[i:EOv\]}a}}^V=c:_nZzY=.w_|iʺ=vje}_#C[i_hg}]lAbSv{i7p,;k Xe ^U? h)'jӹu(+3'r?QN1yשp5םLV8qx,2"2/7v\?&grWeT;q;j*4OK>ܧr޾:̳FT"rwҟ8nr&VvQPs8{jzHpWv4s=?Kw։|Ve qr(d\iGד:j#|GҾ=1v8Q?QhCuuS{]g~/询}}WO(\2ZK$SBS3F k'p]"QG ip.U3U~3_]qtXӇ+T1>Cէ1~.u=9(u&U~2>N;u;}}TY!{:ڥ\!3.=1ϋkG./sc=n bR/Qru,yݴc}\wz>p\|x=O9z|V3O;@_/z~Va>QC+O ]En#1qr~4bv[eQ{B~L¸$׳J!Rs?Ebc>/dx,>yljg㖩ou5NK_\gB3_<}M|7Q lBaYa~|yRWe#̿aEW`zQbs_pp}#8u%ęWW?v?Xvvʯ%\⨯kZ}=t{C#}}v^_/u>"TO5=x~lr|ﹶ:UK8^OƸ`/(r^Z}c 9;xvTپ*3A;M\7qwGO{TZ;Ok1nadj=ia}ݿڵOvo"zuPM2B~1E?G PzQr{kq"Tub?ϲ wbTW|G{ 9q_/6k\|cGc^=~f8=A8y팁qpO :WV\)XFh޺u m߭TS;b; o:0V?)rl0Ҵ1,i=5"ם؛<Y+j4"f똠,D@mrMDsˑ,]mػl/v5 )ªؐ>{~_t1F\q On7}w-xr,G#lٛE:MAGNwOi a>] ~U"Һ %̃my#"VK/ȋQ6aћ'nFdaeX7ss&XM[g,XJ#OV-jz&C a;xت%2 &V J.w/0׬U-iҫ_|`yZ  5x|׭j|zu~h]5U:g<{[K<2OD?O#ϡbo嬓BcĤuˈ8MDll}|5Pj?; !*齉y꼑6gkalVjrs3֣ ە %^4w/L)[/Ͻz"};qs0''ly_t+\+l=hu%熭ڳ3Fn6ŃuW>VU4c , /kW+`1j R90!ml-D;w`w+׎yjK ؒ$Ib[V o5M+jn(ZLjl~!Q \`kKX,*[YvZ8"'nڝckj2HjVuy}5]1/[˟3|mMœs7wsIǦ~7ɭ\{} ݜ!Ǎ TZyw qwv΅-{k`?ZgVʩmKyWD?^9wJ\zWhyw?}rL\Si{}je}1DyYs*'z &m<}i{KDk)FTS/>H3/mS“1M_"[jroE_? 1W͆ml=@:D Y&|S a5i[(Xݐ=-fu υuI^a+Ku ~53;߮Z#vfS׊1`\ą}VXw(YΣ* |[ ?>[6$&.璾 ##zZ%@twUF]ij\Ay.^Z^gxfA*߻^N`s li6[rTOyOu?'OSd1"wime٢{PM*%B3Ny4^yx+̘;๞8h^/4kO|6Exܣgy#dBMx]EHBp[[qw"eDೇCFHDJB຾"Ϫ"n" j_<#x͟^.ş!gxoD03FU,Tc(|{!w"Ok 7e;Wm z*?P7q5QK C~^S=ڇ{ѧ:g Ywn:t.O:/i0Lq8[6pkFs^Tr[}Fzf[TWV4'l[XrwZ4.^{l;9YqՍs t+>êyG ,m|1lُ ÎM/FWaSqE嵷ςU^B`)t1i)žoѨar˳E;^.Ѵ.%c_d3fyʟDM;R|z埓:<ȇ`j"r)q!LD_*k{COk; O"k-NÒfF`ˉ`Y^ 0s9,,y`ofDb"Ӆ=[1)"zojg[-][nu{tvt'\#.VwKj\O~pUti>O{®o s |wvW66͠-"uVD9 Cfw EL!|a@È}FXz&yU_u9o am|G<q,958&ۘ}E_' TXcM6۫-"<5Od*w؍`аɉ}2jݰ j.XLr}ᓂ9z]%sD޹~k?\T{b'P~^DMc-Rb'hPۈ~i3"gL)D7Ӧa鎈I=sdZ~GD5yYD.{kD 8#zmIN=o؏+Zd(l[ {R?ֿ&^ vi%qdv3B`_^Tx\4l.8;&+[!/_9h=l ! sn{XۺtsUj߅w3(ZeN{G㏮AM5sYkzú|aŖllXͧol{|8#`+< ǿw#D:%+F"K"Ꮝ(c[~i{S)? nZ7X>x"Xު;"=:FV g--;$rtǓcUs\궛VQ!ꘒ=wƻ'+eB&]x9s ,αk+D@mvⱧWmOcEk=X]=|r2h&3'O=x/p//sl.iʰ^&O`/N()$=V*z6N*rK~F83,6#:ߥرhL c#tuD;)['1]Pkݧb/rcA2~3aμ?疊>1 zd: 9`X6~0p`8,7{ܘn,Ή k{bls?e>`zwX:薥Xxؼ lZ5CoCD[ꡦ| Пo &&'%I4a|?1W.薆>>1 g)Y{xDgj1uV쏧.T_d]AVF SFg[˗+ ?<^%>ͶaΘZ<-_uYWE֫݀u̻IxzȧװaQ쎯HQx`$]*%Շ Ú|'`6Gv̺\W~x =X*vetf}wvap%":ͲFAT骕wCtEn /v^DWl}j*Mߓ]{5/儥ݠ^'6w(Y; @RWDf3~²I dW ]]GCUn{ҏw@hkWͅ[I"'>£"c[$DWvUãV_" ڃGU#Fݚ^ 16 0+&u{cFQ35Ap{2Nmvd_IZH_GD|x (a6/qFÃw%]~}?_[m!Ч޸~ӟ Xrk-c6uдy5p'IY,hGӸuͶ/1߼p3$̇9rWwP_XzC3W}Gkw:;^7y#}]n)Nw͡9qgv۰T֞azFiȀc ?rC\+2<Ȋ8!bi,ef)yR]5ZSؙW}%".Ö1 #7\Z`.CðYײ}FrœSk'ۄ3}0"lk͇eM~1xü~|a_a9IA0%8Xxhes {b|0.XsZ3#}W[xiՔF:O`y䫳`Mnw`򄢰x"$Єg֋ ?׀=>ԅy!6k@5DV*)pmm "׆0zȴ6/@ ӧz6땯; mLk,M=syFr9^#6=`]P{nYpяvv{ngj\ Q]t[[  6ۤ|j (_w\XwP+’s͙`m|1D__UxB=oG\?_Y^W ǯd3} }s/Io2}xIxʎ7voAת1)GHϳX!dʹU@oVF']S$ 3vٱ=r~Ex=~=~ߊ *N&E&u<<iy-pْbvD̀ԥi/n[iY n7֬r;?u~{)qޖ[5Sf]2hsG}I%}w/#*Qes}2U;"[)=!؟O?WtU %y)b?D}x'v6D_bn~xVD_Qgbpao1lN !X@^wҤ}zi[Vbn`QV pݪZ:Uoz4Fِ֩^3{dab^a!ri#[VLT_Y'%Ӟ%%VXRzZF X;X&{Z-ӥ[qDO(zuIU`pBN'-zG*qV"se}6cRSÖl[j ݼ[]j`!X{[ŒF^Qi<^42ﶟ -t"|'6{YQ s5G#^aDϜAb#l+ pQ_#Mݢ/mYn:oդvy-Px+"yN`I`7``ɶ%`4lDBR؃S EJ$v\D.oYf,غb~#1D-'aSG{.mFD\`!a{mB^[˵:,-O>q䰥uɿrQO1r RĚ1-2 1)Tvob_{s ."g!d"Ws+vɱ+/~};>c[ra>x#Gb{î+x&j*F3=O۸RԘptf[2L:Cχ 9'bL)D4o2oW |?vl|< }W޶vT~ g8 ]Ϩ0x]+by8 { ]ºK+v|OYgD On6q~} 3߸knlK*fݬ}2렄cmx3bMƃC\Bwaɚ^ݴSwĸhvml`t45KC׎B2"KϷ97a\Do3? (r9uoX ,5/rZ1dޥ-.D= oE_3r7]1Y ˔Lqk3E>so9/a3ka9IxGVsw=(I⭄S֙iD ;ޢe!W>upu`%O4Dj'v}$"7? g\oZO/k?"QmI}DRȉDnFXWe+;l!ƼsDž*Fl[L]z@*hn/D(_wf)TiDF^*w]),i6~^=[щ߈KhsbH`"?|m]KĮ(x܋MeXت i~6kWl=:垵T$=ۜDqc3gzvs/XZ$l35QNߟbo]ѷӎ6>(1/75BLVCLWUxhϲY׮a}{\@'WbhQ]&8aG.;R"lh5WV~V_Þ=a]eĈ~7Hya͕1# K &M#zsX=|c;Xzi\kNk{yw`m7ҖO.wwvHY7EV9^nkb7td仯YFs|!|5{2urt閯O*d74[h+bU;B*y-u'E%`9״Ē{TTD.ǜ|q쪷 ,,~ۈ-'"#tA 1[xN -de +Q^6,㻆<_z ;>6j)ç5~bwf1?cnjb/i$nÍY,2 ~)\ͺcҼ8Ҡ7Vw {~!QC\\kFc:ÎswE/ iS; ?^gl-~OJ +~zk NniXG=ys<oN=ka$1ɴ_rý0'l`װKw_KFxeZ.0;^ ,EB(ҽ`* rkVO m9[G+rsJó`D' Kak__kb' ;'YI_RZxku7;(סJg ˎZ3gOyN`PwuXV{6,(7|Z ̡v Edbt IzI5DDPD\vۉO 썻DʴҬKMpZ!t"Ghw{#|y*y/-_PDt0)vx2ߑ7MRNޭ# EW雘Sz(bmT6t,%rE埧_)ۂn}Oۈ-^mg#k`{49a۱5Æ#*Kss'Ov%:hS>O65t?D~ a[=[}-|YE~݂mūCćnS_e." C@x?#..`j&&ѫ}{Ǔu~N ߈FX<:p-|1 RQno<^٫DBK(%9d ޴h0<%bxȁ̔}לC/a[!Ƌ[ ]t^游 ׎9;5Zsh_'l;K2 3ۅ ~ y^n 7j+xl=qww UΜix]Y\iTȹP3N}\{򈂸7Ԉ?mŧ5^/ieXcBFp?0g<_0\`Spn#JC!! boUqؙJTqٗkUMt8b[WB {aɍUyC[cQ cb;boiojō Qrti[t;~FdX'w}D\ L3;awx,nvƬ;U!^蘾S‚v! XD|!" 0Bxa1nTK2k=qs>-DtJÞy zw͟-'#浕}V9<'o<ˌ\yWPS|>#^~*k&s`up}` (׹0[?H2Yj1H S(<`<\; 2o"GGy#RV>=}Z]+"ٯTmbe4M ^7v=e W@|R"|CZ|:Tx=%9`ɚbLg0[+,S'\Ve{Cǟa?rb6O>d%l{, : _XOo?lK*7D-%<2Jt/m< &d((r]F:C`RZwt3NڲrX/0o:M~F{"\L%b{v2,S[`^TD2/XoXإcXP\DM_'|VW`yne]`&;e}V=|K`UoEXG8 ֧iE>|MœQgN)Ź_h#YĈ zPm%|aF̄ox=~mج𨫑76C yB3>l9[oMX$c۶m{[S퉀F(N#o|B%~ ߸\dه 7 w?qJ+[n_F1+ٛDH%.{ͼ$w|dBpo2@~bgGF~Sqgr'~2oc]|/7ypY&X\[sc>oq̪5b@çz_za?T Omr+kwpa=Wmn\N5nO!}ve胕xO8Ub\e,0UځYu3= 0S~Z~L;X$F&7~ F#o0XO动inczx 2ĸ2RR<ϒl?;lž:Y,r sw׺O*|f'ם0g6J̬Ǻ_mչťg{ /kH'zׅ"F/jm35Ld`S\|6XQG𮓣B X\伱N#[K+v/l-'l uQM2SG.򐬫s.>/TXKnk , [.za a~y˧,,]$H0HD6쁥<-Ŋ|S=:1Z޲%? x}2 <Ț>|kZw68S>~NPh=wOvг "WOu7]-0m:".>K6kaq;<,s|$}bͰ,-z~=X.=`[C;.5tٳzH3D,zKT\^=\[E_{"emۙC؇.F>1<6؂f*|G K>7Dm0}C/vĹmnoB,1]YKD˼=á.9&zKp\hWglN]F -TQF>Q3e:d6˔DC}1oڲ ުu|mϓ㘔#ҋ ~`5#á\RD^eؿa*ՔzMuHCD/i,_ƫ1:TJWYeelgs_˯hr|ʼ?q5oﰩM߰%<`]Iay2ႛ2֞>q%&{c~1N&3eezS!3=8,Қ+nzQ:<.rDLIL7~X70>\B7_Ӿ?VG=mէ=7#iΊxNTqXMIxLs=!xTE?E$E,׽~7c# L9&|r- ۮ,'zGp>l8{ӵ?u( \Շ{Sx/nz ݏ3틛U/yj&Lܧ\g%@WU:d=+~|ȓj{N O=.ɂs]2>­zfSqbCzzSqh .WcxوKO6[rd٠^6ׇWr[T2oc>c ZjcUm>8xAb7C>ĞcEƻ9ql2O0u1ŮC1Xmm93uOFXke{,Teaaf[>/fQ[%|s%spXx9_N*9,;vU)rxK!aΗO:KM@΃sx'Lt/gr k܄OZ]>fZ1ϧWg>ٙezcGW4CXo-j)[]kw/6s>˴-Peչg/#S-o\XvGZ=/`iDWZ핑5^tDm-Ǿk]5UZ%'6/C.F=L'pm9֩No"h3`}[>( A]4z ={;[o`Mlu9 [hvvXW_ QS;,9!rᖶlaCsgak{ҩx1yYa{yeca˜nF|خ$ksóo!fȧ>t޲إ7S<&“Q5=-iu{Ǯ)#jMoa|\%\Q޻P{`sY+Mǰ`]TG\v/c*7])Ψ UXzŎ9VӾr}Y/c0X3 ֹի|kGۺ6X ֗y?P'XJ/ÿ 9F^skǫ޽@L$Z OMPhcg8\s†)!>We`!# ǜ{,r"={~2qs]=nNysuqȳ_#Qhn7B"cݼG xд{iuӽ\׺읪e1`rXY:q >e\t w{ypq],unwq.y-QгPn8ӽ9 n6w8qXGׂoyJ5GWϖ/,]+3zd\8e`V#ξgr} V qX.7dnׅ? ;qš)1k}m)~9 {O= S5rM׍j?P: 8Shu:,-`yR\O13*y.$z:L!ˍ<y^YȓѝwOc#>s%$`Kk) ؒJW0ی<#^kΥu=ުh˷U#s1m)KvoK`8I}k?,/3.f:5|},zQ^/> m1?a}]k=bq4ά">Ս8&X;|XᏡӞ k#6[kC7΋g/Z!{sIGK0g ~$y]ylƺ&0;a/ OΊ%1+_& snja=]-駶 n2Vr//z"Ee`u~6I!CaIݶ\∘u:_6)BoZ+dcx<whAK9b%QF~Tu90'{lf #///E4X cDՃD=hC#O̩9W&`6ə>l΍1iRd_ kr\~%D):Yy`=;g,(mǴ3<`mk9}P~S×zUs69!ka@RXmk:,yj Ku~NQ#JKl8 ;}.KQV#p0ڒN\pr;a>ڷh+"'u>ABgQpD|4x" 9:*;""C:3 ݲLFdyc}fD㻟*n K^#]j,~Ƞm}('gEQ}eDuRĝ3wظBsW.|'~lRq僰6(ͺZ9C*u1`.{៰u[n%u|zWoadQˊQi_'bzZ#ZD{ҴҍþmVѢ:%Lr:;gFY^q :@Uzi;l[>&9l] RGx 5RxuGo7F/9x'^vXu*FqXKՖy-nV !E2%{% ˝TUEm12~לËK6?,#ߥUblE'CoI#c0/˫_J:w4? n@k_9r/@kP{q{v='_Vc=T:\l[0{Lᦛ>*| /os99#(=*=m6^fSw`aO݂pOecz[fx

    ʎ"mWp Cf,6ff@2O$ݴvM}pjz-[a+!#IkqD7YEE`GBZ>(pQpgX|1Ua4# $ވ+Z1+ EBӶt"KN Tg˳˝>xAY h$Oz)K۫:vZp<WYz@S0 ( ˺" 8WPN.W& I\8]J0 YZEpi/R/0000755000175100001440000000000013142414371011206 5ustar hornikusersEpi/R/expand.data.r0000644000175100001440000000436212531361077013572 0ustar hornikusersexpand.data <- function(fu, formula, breaks, data) { Nsubject <- nrow(fu) ## The model matrix to be merged up to the expanded data if (!missing(formula)) { covariate.frame <- data.frame(model.matrix(formula,data)[,-1]) cov.names <- names(covariate.frame) covariate.frame$id <- 1:Nsubject } else { covariate.frame <- NULL cov.names <- character(0) } ## 1-responses for the survival intervals Nbreak <- length(breaks) ILENGTH <- function(x) { pmax(pmin(x[2], breaks[-1]) - pmax(x[1], breaks[-Nbreak]), 0) } well.mat <- -matrix(apply(fu[,c(1,2), drop=FALSE], 1, ILENGTH), nrow=Nbreak-1) ## For the sake of the stability of the fitting procedure, each record ## with a 1-response is further split into separate records for each ## follow-up interval: id.vec <- c(diag(Nbreak-1)) well.mat <- matrix(apply(well.mat, 2, "*", id.vec), nrow=Nbreak-1) well.id <- rep(1:Nsubject, each=Nbreak-1) valid.cols <- apply(well.mat!=0, 2, any) well.mat <- well.mat[,valid.cols, drop=FALSE] #Remove cols that are all zero well.id <- well.id[valid.cols] ## 0-responses for the event intervals is.case <- !is.na(fu[,3]) # Observed to become ill fu.cases <- subset(fu, is.case) ill.mat <- -matrix(apply(fu.cases[,c(2,3), drop=FALSE], 1, ILENGTH), nrow=Nbreak-1) ill.id <- which(is.case) ## The dataframe for analysis is one observation per survival interval ## (well.mat) and one per event interval (ill.mat): rates.frame <- as.data.frame(t(cbind(well.mat, ill.mat))) rates.names <- paste("(", breaks[-Nbreak],",",breaks[-1],")", sep="") names(rates.frame) <- rates.names rates.frame$y <- rep(c(1,0), c(ncol(well.mat), ncol(ill.mat))) rates.frame$id <- c(well.id, ill.id) ## Merge the covariates on to the model matrix for the baseline if (!is.null(covariate.frame)) { model.frame <- merge(rates.frame, covariate.frame, by="id") } else { model.frame <- rates.frame } model.frame[["id"]] <- NULL #Remove id variable return( list( rates.frame = model.frame[,rates.names, drop=FALSE], cov.frame = model.frame[, cov.names, drop=FALSE], y = model.frame[, "y", drop=TRUE ] ) ) } Epi/R/clear.R0000644000175100001440000000072312773674456012446 0ustar hornikusers# Clear the workspace of all objects whose names don't start with a # full stop, and remove objects attached immediately after the global clear <- function () { env <- as.environment(1) to.go <- ls(env, all.names = FALSE) continue <- TRUE while (continue) { nxt <- search()[[2]] if (substr(nxt, 1, 8) != "package:") detach() else continue <- FALSE } remove(list = to.go, envir = env) } Epi/R/clogistic.R0000644000175100001440000001474113052766107013327 0ustar hornikuserssplitMatrix <- function (x, f, drop=FALSE) { lapply(split(seq_len(nrow(x)), f, drop = drop), function(ind) x[ind, , drop = FALSE]) } fixEvent <- function(event) { ### Convert outcome in clogit model to 0/1 binary coding if (any(is.na(event))) stop("Event contains missing values") if (is.logical(event)) { status <- is.numeric(event) } else if (is.numeric(event)) { status <- if (max(event) == 2) event - 1 else event temp <- (status == 0 | status == 1) if (!all(temp)) { warning("If outcome is numeric then it must be coded 0/1 or 1/2") } } else if (is.factor(event)) { if (nlevels(event) != 2) stop("If outcome is a factor then it must have 2 levels") status <- event == levels(event)[2] } return(as.integer(status)) } isInformative <- function(Xsplit, ysplit, strata) { ## Identify which observations are informative in a conditional ## logistic regression. is.homogeneous <- function(x) { all(x==x[1]) } y.bad <- sapply(ysplit, is.homogeneous) X.bad <- sapply(Xsplit, function(x) { all(apply(x, 2, is.homogeneous)) }) is.informative <- vector("list", length(ysplit)) for (i in seq(along=is.informative)) { canuse <- (!y.bad[i]) && (!X.bad[i]) is.informative[[i]] <- rep(canuse, length(ysplit[[i]])) } return(unsplit(is.informative, strata)) } fitClogit <- function(X, y, offset, strata, init, iter.max, eps, toler.chol) { ## Safe wrapper around the C function "clogit" that ensures all ## arguments have the correct type and storage mode. y <- fixEvent(y) if (!is.matrix(X)) { X <- as.matrix(X) } if (!is.double(X)) { X <- matrix(as.double(X), nrow(X), ncol(X)) } if (is.null(offset)) { offset <- rep(0, nrow(X)) } offset <- as.double(offset); ## Split into strata Xsplit <- splitMatrix(X, strata, drop=TRUE) ysplit <- split(y, strata, drop=TRUE) osplit <- split(offset, strata, drop=TRUE) info <- isInformative(Xsplit, ysplit, strata) if (!any(info)) { stop("There are no informative observations") } ans <- .Call(C_clogit, Xsplit, ysplit, osplit, as.double(init), as.integer(iter.max), as.double(eps), as.double(toler.chol)) ans$informative <- info return(ans) } clogistic <- function (formula, strata, data, subset, na.action, init, model = TRUE, x = FALSE, y = TRUE, contrasts = NULL, iter.max=20, eps=1e-6, toler.chol = sqrt(.Machine$double.eps)) { ## User interface, edited version of glm call <- match.call() if (missing(data)) data <- environment(formula) mf <- match.call(expand.dots = FALSE) m <- match(c("formula", "data", "subset", "na.action", "offset", "strata"), names(mf), 0L) mf <- mf[c(1, m)] mf$drop.unused.levels <- TRUE mf[[1L]] <- as.name("model.frame") mf <- eval(mf, parent.frame()) mt <- attr(mf, "terms") Y <- model.response(mf, "any") if (is.null(Y)) stop("missing outcome") if (length(dim(Y)) == 1L) { nm <- rownames(Y) dim(Y) <- NULL if (!is.null(nm)) names(Y) <- nm } X <- if (!is.empty.model(mt)) model.matrix(mt, mf, contrasts) else stop("Invalid model matrix") offset <- as.vector(model.offset(mf)) if (!is.null(offset)) { if (length(offset) != NROW(Y)) stop(gettextf("number of offsets is %d should equal %d (number of observations)", length(offset), NROW(Y)), domain = NA) } strata <- model.extract(mf, "strata") if (is.null(strata)) stop("argument 'strata' missing") contrasts <- attr(X, "contrasts") if (attr(mt, "intercept") > 0) { X <- X[,-1, drop=FALSE] } if (missing(init)) init <- rep(0, ncol(X)) if (iter.max < 0) stop("'iter.max' must be non-negative") if (eps <= 0) stop("'eps' must be positive") if (toler.chol <= 0) stop("'toler.chol' must be positive") if (eps < toler.chol) stop("'toler.chol' must be smaller than 'eps'") fit <- fitClogit(X = X, y = Y, offset = offset, strata=strata, init=init, toler.chol=toler.chol, eps=eps, iter.max=iter.max) if (fit$flag <= 0) { stop("Information matrix is not positive definite") } else if (fit$flag == 1000) { warning("Iteration limit exceeded") } nvar <- length(init) which.sing <- if (fit$flag < nvar) { diag(fit$var)==0 } else { rep(FALSE, nvar) } fit$coefficients[which.sing] <- NA fit$flag <- NULL ## Add back in parameter names cfnames <- colnames(X) names(fit$coefficients) <- cfnames dimnames(fit$var) <- list(cfnames, cfnames) fit$n <- sum(fit$informative) if (model) { fit$model <- mf } else { ## Without model frame this cannot be interpreted fit$informative <- NULL } fit$na.action <- attr(mf, "na.action") if (x) fit$x <- X if (!y) fit$y <- NULL fit <- c(fit, list(call = call, formula = formula, terms = mt, contrasts = contrasts, xlevels = .getXlevels(mt, mf))) class(fit) <- c("clogistic") fit } coef.clogistic <- function(object,...) { object$coefficients } vcov.clogistic <- function(object, ...) { object$var } print.clogistic <- function (x, digits = max(options()$digits - 4, 3), ...) { ## Print method for clogistic objects, edited from print.coxph cat("\nCall: ", deparse(x$call), "\n\n", sep="\n") savedig <- options(digits = digits) on.exit(options(savedig)) coef <- coef.clogistic(x) se <- sqrt(diag(vcov.clogistic(x))) if (is.null(coef) | is.null(se)) stop("Input is not valid") coefmat <- cbind(coef, exp(coef), se, coef/se, signif(1 - pchisq((coef/se)^2, 1), digits - 1)) dimnames(coefmat) <- list(names(coef), c("coef", "exp(coef)", "se(coef)", "z", "p")) cat("\n") prmatrix(coefmat) logtest <- -2 * (x$loglik[1] - x$loglik[2]) if (is.null(x$df)) df <- sum(!is.na(coef)) else df <- round(sum(x$df), 2) cat("\n") cat("Likelihood ratio test=", format(round(logtest, 2)), " on ", df, " df,", " p=", format(1 - pchisq(logtest, df)), ", n=", x$n, sep = "") cat("\n") invisible() } Epi/R/detrend.R0000644000175100001440000000057712531361077012774 0ustar hornikusersdetrend <- function( M, t, weight=rep(1,nrow(M)) ) { Thin.col <- function ( X, tol = 1e-06) # Function to remove lin. dep. columns from a matrix { QR <- qr(X, tol = tol, LAPACK = FALSE) X[, QR$pivot[seq(length = QR$rank)], drop = FALSE] } # Now detrend the matrix using the weighted inner product. Thin.col( projection.ip( cbind( 1, t ), M , orth = TRUE, weight = weight ) ) } Epi/R/lexis.R0000644000175100001440000006056413125275645012502 0ustar hornikusersLexis <- function(entry, exit, duration, entry.status=0, exit.status=0, id, data, merge=TRUE, states, tol=.Machine$double.eps^0.5, keep.dropped=FALSE ) { nmissing <- missing(entry) + missing(exit) + missing(duration) if (nmissing > 2) stop("At least one of the arguments exit and duration must be supplied") only.exit <- missing( entry.status ) && !missing( exit.status ) ## If data argument is supplied, use it to evaluate arguments if (!missing(data)) { if (!missing(entry)) { entry <- eval(substitute(entry), data, parent.frame()) } if (!missing(exit)) { exit <- eval(substitute(exit), data, parent.frame()) } if (!missing(duration)) { duration <- eval(substitute(duration), data, parent.frame()) } entry.status <- eval(substitute(entry.status), data, parent.frame()) exit.status <- eval(substitute(exit.status), data, parent.frame()) if (!missing(id)) { id <- eval(substitute(id), data, parent.frame()) } if (merge) { data <- as.data.frame(data) } } ## Check for missing values in status variables wh.miss <- any(is.na(entry.status)) + 2*any(is.na(exit.status)) if ( wh.miss > 0 ) stop("Missing values in ", switch( wh.miss, "entry status", "exit status", "entry AND exit status" ) ) ## Adjust entry status mode according to exit status if( only.exit ) { if( is.logical( exit.status ) ) entry.status <- FALSE if( is.character( exit.status ) ) exit.status <- factor( exit.status ) if( is.factor( exit.status ) ) { entry.status <- factor( rep( levels(exit.status)[1], length(exit.status)), levels=levels(exit.status), labels=levels(exit.status) ) cat("NOTE: entry.status has been set to", paste( '"', levels(exit.status)[1], '"', sep='' ), "for all.\n" ) } if( is.numeric( exit.status ) ) entry.status <- rep( 0, length( exit.status ) ) } ## Convert character states to factors if( is.character(entry.status) ) entry.status <- factor(entry.status) if( is.character( exit.status) ) exit.status <- factor( exit.status) ## Check compatibility of entry and exit status if (is.factor(entry.status) || is.factor(exit.status)) { if (is.factor(entry.status) && is.factor(exit.status)) { if (!identical(levels(entry.status),levels(exit.status))) { all.levels = union(levels(entry.status),levels(exit.status)) entry.status <- factor( entry.status, levels=all.levels ) exit.status <- factor( exit.status, levels=all.levels ) cat("Incompatible factor levels in entry.status and exit.status:\n", "both lex.Cst and lex.Xst now have levels:\n", all.levels, "\n") } } else { stop("Incompatible classes for entry and exit status") } } else { if (mode(entry.status) != mode(exit.status)) { stop("Incompatible mode for entry and exit status") } } ## If entry is missing and one of the others is given as a list of length ## one, entry is assumed to be 0 on this only timescale. if( nmissing==2 ) { if( !missing(exit) ) { if( length(exit)>1 ) stop("If 'entry' is omitted, only one timescale can be specified.") else { entry <- exit entry[[1]] <- 0*entry[[1]] cat( "NOTE: entry is assumed to be 0 on the",names(exit),"timescale.\n") } } else if( !missing(duration) ) { if( length(duration)>1 ) stop("If 'entry' is omitted, only one timescale can be specified") else { entry <- duration entry[[1]] <- 0*entry[[1]] cat( "NOTE: entry is assumed to be 0 on the",names(duration),"timescale.\n") } } else stop("Either exit or duration must be supplied.") } ## Coerce entry and exit lists to data frames if(!missing(entry)) { entry <- as.data.frame(entry) if (is.null(names(entry))) stop("entry times have no names") if (any(substr(names(entry),1,4) == "lex.")) stop("names starting with \"lex.\" cannot be used for time scales") } if(!missing(exit)) { exit <- as.data.frame(exit) if (is.null(names(exit))) stop("exit times have no names") if (any(substr(names(exit),1,4) == "lex.")) stop("names starting with \"lex.\" cannot be used for time scales") } if(!missing(duration)) { duration <- as.data.frame(duration) if (is.null(names(duration))) stop("duration have no names") if (any(substr(names(duration),1,4) == "lex.")) stop("names starting with \"lex.\" cannot be used for time scales") } if (missing(entry)) { ## Impute entry entry <- exit - duration } if (missing(duration)) { ## Impute duration full.time.scales <- intersect(names(entry), names(exit)) if (length(full.time.scales) == 0) { stop("Cannot calculate duration from entry and exit times") } duration <- exit[,full.time.scales[1]] - entry[,full.time.scales[1]] } if (missing(exit)) { all.time.scales <- names(entry) } else { ## We dont need the exit times but, if they are supplied, we must ## make sure they are consistent with the entry and duration. all.time.scales <- unique(c(names(entry), names(exit))) ## Fill in any missing entry times entry.missing <- setdiff(all.time.scales, names(entry)) if (length(entry.missing) > 0) { entry <- cbind(entry, exit[,entry.missing, drop=FALSE] - duration) } ## Check that duration is the same on all time scales dura <- exit - entry[,names(exit),drop=FALSE] if (missing(duration)) { duration <- dura[,1] #BxC# apply( dura, 1, mean, na.rm=TRUE ) # Allows for timescales with missing values } ok <- sapply(lapply(dura, all.equal, duration), isTRUE) # ok <- sapply(lapply(dura, all.equal, duration), # function(x) identical(FALSE,x) ) if (!all(ok)) { stop("Duration is not the same on all time scales") } } # Taken care of by the code that detects whether lex.du <= tol # ## Check that duration is positive # if (any(duration<0)) { # stop("Duration must be non-negative") # } ## Make sure id value - if supplied - is valid. Otherwise supply default id if (missing(id)) { id <- 1:nrow(entry) } else if (any(duplicated(id))) { ##Fixme: check for overlapping intervals ##stop("Duplicate values in id") } ## Return a data frame with the entry times, duration, and status ## variables Use the prefix "lex." for the names of reserved ## variables. if( is.data.frame( duration ) ) duration <- duration[,1] lex <- data.frame(entry, "lex.dur" = duration, "lex.Cst" = entry.status, "lex.Xst" = exit.status, "lex.id" = id ) #### Addition by BxC --- support for states as factors # Convert states to factors if states are given if( !missing( states ) ) #is.character( states ) ) { # This as.character-business is necessary because we cannot assume # that the values of states are 1,2, etc. st.lev <- sort( unique( as.character( c(lex$lex.Cst,lex$lex.Xst) ) ) ) lex$lex.Cst <- factor( as.character(lex$lex.Cst), levels=st.lev, labels=states ) lex$lex.Xst <- factor( as.character(lex$lex.Xst), levels=st.lev, labels=states ) } if (!missing(data) && merge) { duplicate.names <- intersect(names(lex), names(data)) if (length(duplicate.names) > 0) { stop("Cannot merge data with duplicate names") } lex <- cbind(lex, data) } ## Drop rows with short or negantive duration for consistency with splitLexis short.dur <- lex$lex.dur <= tol if ( any(short.dur) ) { warning("Dropping ", sum(short.dur), " rows with duration of follow up < tol\n", if( keep.dropped ) " The dropped rows are in the attribute 'dropped'\n", if( keep.dropped ) " To see them type attr(Obj,'dropped'),\n", if( keep.dropped ) " to get rid of them type attr(Obj,'dropped') <- NULL\n", if( keep.dropped ) " - where 'Obj' is the name of your Lexis object" ) lex <- subset(lex, !short.dur) if( keep.dropped ) attr(lex,"dropped") <- subset(data, short.dur) } ## Return Lexis object attr(lex,"time.scales") <- all.time.scales attr(lex,"time.since") <- rep( "", length(all.time.scales) ) breaks <- vector("list", length(all.time.scales)) names(breaks) <- all.time.scales attr(lex,"breaks") <- breaks class(lex) <- c("Lexis", class(lex)) return(lex) } is.Lexis <- function(x) { inherits(x, "Lexis") } check.time.scale <- function(lex, time.scale=NULL) { ## Utility function, returns the names of the time scales in a Lexis object ## lex - a Lexis object ## time.scale - a numeric or character vector. The function checks that ## these are valid time scales for the Lexis object. ## Return value is a character vector containing the names of the requested ## time scales all.names <- timeScales(lex) if (is.null(time.scale)) return(all.names) nscale <- length(time.scale) scale.names <- character(nscale) if (is.character(time.scale)) { for (i in 1:nscale) { if (is.null(lex[[time.scale[i]]])) stop(time.scale[i], " is not a valid time scale name") } } else if (is.numeric(time.scale)) { if (any(time.scale > length(all.names)) || any(time.scale < 1)) stop(time.scale, " not valid time scale column number(s)") time.scale <- all.names[time.scale] } else { stop("invalid type for time scale") } return(time.scale) } valid.times <- function(x, time.scale=1) { # A utility function that returns a data.frame / Lexis object with # rows with missing timescales removed x[complete.cases(x[,check.time.scale(x,time.scale)]),] } plot.Lexis.1D <- function(x, time.scale=1, breaks="lightgray", type="l", col="darkgray", xlim, ylim, xlab, ylab, ...) { ## x Lexis object ## time.scale name of time scale to plot if (length(time.scale) != 1) stop("Only one time scale allowed") x <- valid.times(x,time.scale) time.entry <- x[,time.scale] time.exit <- x[,time.scale] + x$lex.dur id <- x$lex.id if (missing(xlim)) xlim <- c(min(time.entry), max(time.exit)) if (missing(ylim)) ylim <- range(id) if (missing(xlab)) xlab <- time.scale if (missing(ylab)) ylab <- "id number" plot(time.entry, id, type="n", xlab=xlab, ylab=ylab, xlim=xlim, ylim=ylim, ...) if (type=="b" || type=="l") { segments(time.entry, id, time.exit, id, col=col, ...) } if (type=="b" || type=="p") { points(time.exit, id, col=col, ...) } ## Plot break points brk <- attr(x,"breaks")[[time.scale]] abline(v=brk, col=breaks, ...) } points.Lexis.1D <- function(x, time.scale, ...) { x <- valid.times(x,time.scale) time.exit <- x[,time.scale] + x$lex.dur points(time.exit, x$lex.id, ...) } lines.Lexis.1D <- function(x, time.scale, type="l", col="darkgray", breaks="lightgray", ...) { x <- valid.times(x,time.scale) time.entry <- x[,time.scale] time.exit <- x[,time.scale] + x$lex.dur id <- x$lex.id segments(time.entry, id, time.exit, id, col=col, ...) ## Plot break points brk <- attr(x,"breaks")[[time.scale]] abline(v=brk, col=breaks, ...) } plot.Lexis.2D <- function(x, time.scale, breaks="lightgray", type="l", col="darkgray", xlim, ylim, xlab, ylab, grid=FALSE, col.grid="lightgray", lty.grid=2, coh.grid=FALSE, ...) { if (length(time.scale) != 2) stop("Two time scales are required") x <- valid.times(x,time.scale) time.entry <- time.exit <- vector("list",2) for (i in 1:2) { time.entry[[i]] <- x[,time.scale[i]] time.exit[[i]] <- x[,time.scale[i]] + x$lex.dur } if (missing(xlim) && missing(ylim)) { ## If no axis limits are given, set the plotting region to be ## square, and adjust the axis limits to cover the same time interval. ## All life lines will then be at 45 degrees. opar <- par(pty="s") on.exit(par(opar)) min.times <- sapply(time.entry, min) max.times <- sapply(time.exit, max) xywidth <- max(max.times - min.times) xlim <- min.times[1] + c(0, xywidth) ylim <- min.times[2] + c(0, xywidth) } else if (missing(xlim)) { xlim <- c(min(time.entry[[1]]), max(time.exit[[1]])) } else if (missing(ylim)) { ylim <- c(min(time.entry[[2]]), max(time.exit[[2]])) } if (missing(xlab)) xlab <- time.scale[1] if (missing(ylab)) ylab <- time.scale[2] plot(time.entry[[1]], time.entry[[2]], type="n", xlab=xlab, ylab=ylab, xlim=xlim, ylim=ylim, ...) # Set up the background grid(s): if (!missing(grid)) { if (is.logical(grid)) { if (grid) { vgrid <- pretty(xlim) hgrid <- pretty(ylim) } } else if (is.list(grid)) { vgrid <- grid[[1]] hgrid <- grid[[length(grid)]] } else if (is.numeric(grid)) { vgrid <- grid - min( grid ) + min( pretty( xlim )[pretty(xlim)>=par("usr")[1]] ) hgrid <- grid - min( grid ) + min( pretty( ylim )[pretty(ylim)>=par("usr")[3]] ) } else stop( "'grid' must be either logical, list or a numeric vector" ) # and plot the grid: abline( v=vgrid, h=hgrid, col=col.grid, lty=lty.grid ) box() } if (!missing(grid) & coh.grid) { # Make the 45-degree grids as fine as the finest grid on the axes for (yy in c(hgrid-diff(range(hgrid)),hgrid)) abline( yy-min(vgrid), 1, col=col.grid, lty=lty.grid ) for (yy in c(vgrid-diff(range(vgrid)),vgrid)) abline( min(hgrid)-yy, 1, col=col.grid, lty=lty.grid ) } # End of explicitly requested background grid(s) (PHEW!) if (type=="b" || type=="l") { segments(time.entry[[1]], time.entry[[2]], time.exit[[1]], time.exit[[2]], col=col, ...) } if (type=="b" || type=="p") { points(time.exit[[1]], time.exit[[2]], col = col, ...) } if (type != "n") { ## Plot break points brk <- attr(x,"breaks")[time.scale] abline(v=brk[[1]], h=brk[[2]], col=breaks, ...) } } points.Lexis.2D <- function(x, time.scale, ...) { x <- valid.times(x,time.scale) time.exit <- vector("list",2) for (i in 1:2) { time.exit[[i]] <- x[,time.scale[i]] + x$lex.dur } points( time.exit[[1]], time.exit[[2]], ...) } lines.Lexis.2D <- function(x, time.scale, col="darkgray", ...) { x <- valid.times(x,time.scale) time.entry <- time.exit <- vector("list",2) for (i in 1:2) { time.entry[[i]] <- x[,time.scale[i]] time.exit[[i]] <- x[,time.scale[i]] + x$lex.dur } segments(time.entry[[1]], time.entry[[2]], time.exit[[1]], time.exit[[2]], col=col, ...) } ### Plotting generic functions plot.Lexis <- function( x = Lexis( entry=list(Date=1900,Age=0), exit=list(Age=0) ), time.scale=NULL, type="l", breaks="lightgray", ...) { time.scale <- check.time.scale(x, time.scale) if (length(time.scale) > 2) time.scale <- time.scale[1:2] # Save the timescale(s) for use in subsequent calls options( Lexis.time.scale = time.scale ) if (length(time.scale) == 1) plot.Lexis.1D(x, time.scale=time.scale, type=type, breaks=breaks, ...) else if (length(time.scale) == 2) plot.Lexis.2D(x, time.scale=time.scale, type=type, breaks=breaks, ...) } lines.Lexis <- function(x, time.scale=options()[["Lexis.time.scale"]], ...) { time.scale <- check.time.scale(x, time.scale) if (length(time.scale) > 2) time.scale <- time.scale[1:2] if (length(time.scale) == 1) lines.Lexis.1D(x, time.scale=time.scale, ...) else if (length(time.scale) == 2) lines.Lexis.2D(x, time.scale=time.scale, ...) } points.Lexis <- function(x, time.scale=options()[["Lexis.time.scale"]], ...) { time.scale <- check.time.scale(x, time.scale) if (length(time.scale) > 2) time.scale <- time.scale[1:2] if (length(time.scale) == 1) points.Lexis.1D(x, time.scale=time.scale, ...) else if (length(time.scale) == 2) points.Lexis.2D(x, time.scale=time.scale, ...) } PY.ann <- function (x, ...) UseMethod("PY.ann") PY.ann.Lexis <- function( x, time.scale=options()[["Lexis.time.scale"]], digits=1, ... ) { if( !inherits(x,"Lexis") ) stop( "Only meaningful for Lexis objects not for objects of class ", class(x) ) wh.x <- x[,time.scale[1]] + x[,"lex.dur"]/2 if( two.scales <- length(time.scale)==2 ) wh.y <- x[,time.scale[2]] + x[,"lex.dur"]/2 else wh.y <- x[,"lex.id"] text( wh.x, wh.y, formatC(x$lex.dur,format="f",digits=digits), adj=c(0.5,-0.5), srt=if(two.scales) 45 else 0, ... ) } ### Generic functions ### Methods for data.frame drop Lexis attributes, so we need Lexis ### methods that retain them subset.Lexis <- function(x, ... ) { y <- subset.data.frame(x, ...) attr(y,"breaks") <- attr(x, "breaks") attr(y,"time.scales") <- attr(x, "time.scales") attr(y,"time.since") <- attr(x, "time.since") return(y) } `[.Lexis` <- function(x, ...) { y <- NextMethod(x) if (is.data.frame(y)) { for (a in c("class", "time.scales", "time.since", "breaks")) { data.table::setattr(y ,a, attr(x, a))} } y } # `[.Lexis` <- # function( x, ... ) # { # structure( NextMethod(), # breaks = attr(x, "breaks"), # time.scales = attr(x, "time.scales"), # time.since = attr(x, "time.since") ) # } merge.data.frame <- function(x, y, ...) { if (is.Lexis(x)) merge.Lexis(x, y, ...) else if (is.Lexis(y)) merge.Lexis(y, x, ...) else base::merge.data.frame(x, y, ...) } merge.Lexis <- function(x, y, id, by, ...) { if (!missing(id)) { if (!is.character(id) || length(id) != 1 || !(id %in% names(y))) { stop("id must be the name of a single variable in y") } if (any(duplicated(y[[id]]))) { stop("values of the id variable must be unique in y") } y$lex.id <- y[[id]] } else if (missing(by)) { by <- intersect(names(x), names(y)) if (length(by)==0) { stop("x and y have no variable names in common") } } z <- base::merge.data.frame(x, y, ...) attr(z,"breaks") <- attr(x, "breaks") attr(z,"time.scales") <- attr(x, "time.scales") attr(z,"time.since") <- attr(x, "time.since") class(z) <- c("Lexis", "data.frame") return(z) } cbind.Lexis <- function( ... ) { allargs <- list( ... ) # Check that at least one argument is Lexis is.lex <- sapply( allargs, inherits, "Lexis" ) if( all(!is.lex) ) stop( "At least one argument nust be a Lexis object\n", "and none of the given are.\n") if( sum(is.lex)>1 ) stop( "It is meaningless to 'cbind' several Lexis objects:", " arguments ", paste( which(is.lex), collapse=","), " are Lexis objects.\n" ) is.lex <- which(is.lex) res <- do.call( base::cbind.data.frame, allargs ) attr( res, "class" ) <- attr( allargs[[is.lex]], "class" ) attr( res, "breaks" ) <- attr( allargs[[is.lex]], "breaks" ) attr( res, "time.scales" ) <- attr( allargs[[is.lex]], "time.scales" ) attr( res, "time.since" ) <- attr( allargs[[is.lex]], "time.since" ) res } rbind.Lexis <- function( ... ) { # A list of all Lexis objects allargs <- list( ... ) # Check if they are all Lexis # (or possibly NULL - often rbind-ing with NULL is very useful) is.lex <- sapply( allargs, inherits, "Lexis" ) is.nul <- sapply( allargs, is.null ) if( !all(is.lex[!is.nul]) ) stop( "All arguments must be Lexis objects,\n", "arguments number ", which(!is.lex & !is.null), " are not." ) # Put them all together allargs <- allargs[!is.nul] res <- plyr::rbind.fill( allargs ) # Get the union of time.scale names and the corresponding time.since tscl <- do.call( c, lapply( allargs, function(x) attr(x,"time.scales") ) ) tsin <- do.call( c, lapply( allargs, function(x) attr(x,"time.since" ) ) ) # but only one copy of each scls <- match( unique(tscl), tscl ) tscl <- tscl[scls] tsin <- tsin[scls] # Fish out the breaks on timescale in turn from all input objects and # - if all the non-NULL are identical use this # - if not, set the corresponding break to NULL newbrks <- list() # all the breaks attributes in a list brks <- lapply( allargs, function(x) attr(x,"breaks") ) # run through the timescales found for( scl in tscl ) { # breaks for this timescale in any of the objects brk <- lapply( brks, function(x) x[[scl]] ) # but only the non-null ones brk <- brk[!sapply( brk, is.null )] # if more than one occurrence, all non-NULL breaks should be identical if( ( length(brk)>1 & all( sapply( brk[-1], function(x) identical(brk[[1]],x) ) ) ) | length(brk) == 1 ) newbrks[scl] <- brk[1] else newbrks[scl] <- list(NULL) } # define attributes of the reulting object: attr( res, "class" ) <- c( "Lexis", "data.frame" ) attr( res, "breaks" ) <- newbrks attr( res, "time.scales" ) <- tscl attr( res, "time.since" ) <- tsin res } ## Extractor functions entry <- function(x, time.scale = NULL, by.id = FALSE ) { time.scale <- check.time.scale(x, time.scale) wh <- x[,time.scale[1]] == ave( x[,time.scale[1]], x$lex.id, FUN=if( by.id ) min else I ) if (length(time.scale) > 1) { res <- as.matrix(x[wh, time.scale]) if( by.id ) rownames( res ) <- x$lex.id[wh] return( res ) } else { res <- x[wh, time.scale] if( by.id ) names( res ) <- x$lex.id[wh] return( res ) } } exit <- function(x, time.scale = NULL, by.id = FALSE ) { time.scale <- check.time.scale(x, time.scale) wh <- x[,time.scale[1]] == ave( x[,time.scale[1]], x$lex.id, FUN=if( by.id ) max else I ) if (length(time.scale) > 1) { res <- as.matrix(x[wh, time.scale]) + x$lex.dur[wh] if( by.id ) rownames( res ) <- x$lex.id[wh] return( res ) } else { res <- x[wh, time.scale] + x$lex.dur[wh] if( by.id ) names( res ) <- x$lex.id[wh] return( res ) } } dur <- function(x, by.id=FALSE) { if( by.id ) return( tapply(x$lex.dur,x$lex.id,sum) ) else return( x$lex.dur ) } status <- function(x, at="exit", by.id = FALSE) { at <- match.arg(at, c("entry","exit")) wh <- x[,timeScales(x)[1]] == ave( x[,timeScales(x)[1]], x$lex.id, FUN=if(by.id) switch(at, "entry"=min, "exit"=max) else I ) res <- switch(at, "entry"=x$lex.Cst, "exit"=x$lex.Xst)[wh] if( by.id ) names( res ) <- x$lex.id[wh] res } timeScales <- function(x) { return (attr(x,"time.scales")) } timeBand <- function(lex, time.scale, type="integer") { time.scale <- check.time.scale(lex, time.scale)[1] breaks <- attr(lex, "breaks")[[time.scale]] time1 <- lex[[time.scale]] band <- findInterval(time1, breaks) ##Check that right hand side of interval falls in the same band abrk <- c(breaks, Inf) tol <- sqrt(.Machine$double.eps) if (any(time1 + lex$lex.dur > abrk[band+1] + tol)) { stop("Intervals spanning multiple time bands in Lexis object") } type <- match.arg(type, choices = c("integer","factor","left","middle", "right")) if (type=="integer") { return(band) } I1 <- c(-Inf, breaks) I2 <- c(breaks, Inf) labels <- switch(type, "factor" = paste("(", I1, ",", I2, "]", sep=""), "left" = I1, "right" = I2, "middle" = (I1 + I2)/2) if(type=="factor") { return(factor(band, levels=0:length(breaks), labels=labels)) } else { return(labels[band+1]) } } breaks <- function(lex, time.scale) { time.scale <- check.time.scale(lex, time.scale)[1] return(attr(lex, "breaks")[[time.scale]]) } transform.Lexis <- function(`_data`, ... ) { save.at <- attributes(`_data`) ## We can't use NextMethod here because of the special scoping rules ## used by transform.data.frame y <- base::transform.data.frame(`_data`, ...) save.at[["names"]] <- attr(y, "names") attributes(y) <- save.at y } # order.Lexis <- function( x ) order( x$lex.id, lex[,timeScales(x)[1]] ) # sort.Lexis <- function( x, ... ) x[order.Lexis(x,...),] Epi/R/ncut.r0000644000175100001440000000074012531361077012350 0ustar hornikusersncut <- function( x, breaks, type="left" ) { # Sorting to get the opportunity to call the function recursively. breaks <- sort( breaks ) # Get the indices, but fix the 0 indices to produce NAs: fi <- findInterval( x, breaks ) fi[fi==0] <- length( breaks ) + 1 switch( toupper( substr( type, 1, 1 ) ), "L" = breaks[fi], "R" = -ncut( -x, -breaks ), "M" = ( breaks[fi] - ncut( -x, -breaks ) ) / 2 ) } Epi/R/stackedCIF.R0000644000175100001440000000520713111471421013270 0ustar hornikusers################################################################### ## ## stacked: ## Function that draws stacked CIF curves from a survfit object ## which has been created with Surv( ..., type = 'mstate'). ## ## main arguments: ## - x: survfit object the number of columns of its subobject 'prev' ## depending on how many competing events were included ## - group: integer showing the level of the grouping factor ## possibly appearing after ~ in the survfit model formula ## - colour: a character vector indicating the colours to be ## used for shading the areas pertinent to the separate outcome ## - ylim: as usual ##------------------------------------------------------------------ stackedCIF <- function(x, group = 1, colour = NULL, ylim = c(0,1), xlab = "Time", ylab = "Cumulative incidence", ... ) {######## ne <- ncol(x$pstate)-1 # number of competing events ng <- length(x$n) # number of groups if (group %in% 1:ng) { r1 <- ifelse(group==1 | ng==1, 1, cumsum(x$strata)[group-1]+1 ) r2 <- ifelse(ng==1, length(x$time), cumsum(x$strata)[group] ) # Creating the matrix containing estimated probabilities of # different outcome states at each time point pSt0 <- matrix(0, nrow = nrow(x$pstate[r1:r2, ]), ncol = ne+2) pSt0[ , 1] <- x$pstate[r1:r2 , 1] for (c in 2:ne) pSt0[ , c] <- pSt0[ , c-1] + x$pstate[r1:r2 , c] pSt0[ , ne + 1] <- 1 pSt0[ , ne + 2] <- x$time[r1:r2] cols <- rep("white", ne) if (!is.null(colour)) cols = colour plot(as.numeric(pSt0[, ne + 2]), pSt0[, 2], type = "s", ylim = ylim, yaxs = "i", xlab = xlab, ylab = ylab, ...) for (c in 2:ne) lines(as.numeric(pSt0[, ne + 2]), pSt0[, c], type = "s") col <- colour bord = "black" border <- rep(bord, ne)[1:ne] pSt <- cbind(0, pSt0) pSt2 <- matrix( 0, nrow = 2*(dim(pSt)[1]-1), ncol = dim(pSt)[2]) pSt2[1, ne+3] <- pSt[1, ne+3] pSt2[ nrow(pSt2), ne+3] <- pSt[ nrow(pSt), ne+3] for ( j in 1:( dim(pSt)[1]-1 ) ) { pSt2[ 2*j-1 , ne+3] <- pSt[j, ne+3] pSt2[ 2*j, ne+3] <- pSt[j+1, ne+3] pSt2[ 2*j-1 , 1:(ne+2)] <- pSt[j, 1:(ne+2)] pSt2[ 2*j, 1:(ne+2)] <- pSt[j, 1:(ne+2)] } for (i in 2:(ne+1)) { polygon(c(pSt2[, ne+3], rev(pSt2[, ne+3])), c(pSt2[, i], rev(pSt2[, i - 1])), col = cols[i - 1], border = NULL, ... ) } abline(v = max(x$time[r1:r2]), lwd = 2, col = "white") box() } ## end of if else print(paste("Error: group indicator must be an integer from 1 to", ng)) } ## end of function #------------------------------------------------------------------ Epi/R/Life.lines.R0000644000175100001440000000555212531361077013335 0ustar hornikusersLife.lines <- function( entry.date = NA, exit.date = NA, birth.date = NA, entry.age = NA, exit.age = NA, risk.time = NA ) { # A function allowing any three of the arguments to be specified # and yet returns enty age and -time and exit age and -time. # Check if any variable is supplied with class if( conv <- any( inherits( entry.date, "Date" ), inherits( exit.date, "Date" ), inherits( birth.date, "Date" ), inherits( entry.age , "difftime" ), inherits( exit.age , "difftime" ), inherits( risk.time, "difftime" ) ) ) { # Convert "Date" and "difftime" to years if( inherits( entry.date, "Date" ) ) entry.date <- as.numeric( entry.date ) / 365.35 + 1970 if( inherits( exit.date, "Date" ) ) exit.date <- as.numeric( exit.date ) / 365.35 + 1970 if( inherits( birth.date, "Date" ) ) birth.date <- as.numeric( birth.date ) / 365.35 + 1970 if( inherits( entry.age , "difftime" ) ) entry.age <- as.numeric( entry.age ) / 365.35 if( inherits( exit.age , "difftime" ) ) exit.age <- as.numeric( exit.age ) / 365.35 if( inherits( risk.time, "difftime" ) ) risk.time <- as.numeric( risk.time ) / 365.35 # Convert to numeric class( entry.date ) <- "numeric" class( exit.date ) <- "numeric" class( birth.date ) <- "numeric" class( entry.age ) <- "numeric" class( exit.age ) <- "numeric" class( risk.time ) <- "numeric" } # Find out which three items are supplied. # wh <- (1:6)[!is.na( list( entry.date, entry.age, exit.date, exit.age, birth.date, risk.time ) )] # Matrix of relevant quantities. # LL <- rbind( entry.date, entry.age, exit.date, exit.age, birth.date, risk.time ) # Matrix giving the three constraints among the six quantities: # M <- rbind( c( -1, 1, 0, 0, 1, 0 ), c( 0, 0, -1, 1, 1, 0 ), c( 0, 1, 0, -1, 0, 1 ) ) # Now in principle we have that M %*% LL = 0. # Partitioning M=(A1|A2), t(LL)=(t(x1),t(x2)) # this gives A1 %*% x1 = -A2 %*% x2 # Check if there is sufficient information # if( qr( M[,-wh[1:3]] )$rank < 3 ) cat( "Insufficient information to display life lines" ) # Then do the calculation # A1 <- M[, wh[1:3]] A2 <- M[,-wh[1:3]] x1 <- LL[wh[1:3],] x2 <- -solve( A2 ) %*% A1 %*% x1 LL[-wh[1:3],] <- x2 LL <- data.frame( t(LL) ) attr( LL, "Date" ) <- conv # Convert to dates and difftimes if( conv ) { LL[,c(1,3,5)] <- ( LL[,c(1,3,5)] - 1970 ) * 365.25 LL[,c(2,4,6)] <- LL[,c(2,4,6)] * 365.25 class( LL[,1] ) <- class( LL[,3] ) <- class( LL[,5] ) <- "Date" class( LL[,2] ) <- class( LL[,4] ) <- class( LL[,6] ) <- "difftime" } LL } Epi/R/twoby2.R0000644000175100001440000000700512531361077012566 0ustar hornikuserstwoby2 <- function( exposure, outcome, alpha = 0.05, print = TRUE, dec = 4, conf.level = 1-alpha, F.lim = 10000 ) # What is the limit for trying the # Fisher.test { if( !missing( conf.level ) ) alpha <- 1 - conf.level if( inherits( exposure, c( "table", "matrix" ) ) ) tab <- exposure else tab <- table( exposure, outcome ) tab <- tab[1:2,1:2] a <- tab[1, 1] b <- tab[1, 2] c <- tab[2, 1] d <- tab[2, 2] bin.ci <- function( x, n ) { # Confidence interval for proportion based on Taylor-expansion of # the log-odds --- surprisingly good coverage. ef <- exp( qnorm(1-alpha/2)/sqrt(x*(n-x)/n) ) p <- x / n c( x/n, p/(p+(1-p)*ef), p/(p+(1-p)/ef) ) } rr <- (a/(a + b))/(c/(c + d)) se.log.rr <- sqrt((b/a)/(a + b) + (d/c)/(c + d)) lci.rr <- exp(log(rr) - qnorm( 1-alpha/2 ) * se.log.rr) uci.rr <- exp(log(rr) + qnorm( 1-alpha/2 ) * se.log.rr) or <- (a/b)/(c/d) se.log.or <- sqrt(1/a + 1/b + 1/c + 1/d) lci.or <- exp(log(or) - qnorm( 1-alpha/2 ) * se.log.or) uci.or <- exp(log(or) + qnorm( 1-alpha/2 ) * se.log.or) # Computing the c.i. for the probability difference as method # 10 from Newcombe, Stat.Med. 1998, 17, pp.873 ff. pr.dif <- ci.pd( a, c, b, d, alpha=alpha, print=FALSE )[5:7] pd <- pr.dif[1] lci.pd <- pr.dif[2] uci.pd <- pr.dif[3] as.pval <- 1 - pchisq( log( or )^2 / sum( 1/tab[1:2,1:2] ), 1 ) # If the numers are too large we don't bother about computing Fisher's test Fisher <- ( sum( tab ) < F.lim ) ft <- if( !Fisher ) NA else fisher.test( tab, conf.level=1-alpha ) # We need row and colum names for annotating the output if( is.null( rownames( tab ) ) ) rownames( tab ) <- paste( "Row", 1:2 ) if( is.null( colnames( tab ) ) ) colnames( tab ) <- paste( "Col", 1:2 ) tbl <- cbind( tab[1:2,1:2], rbind( bin.ci( a, a+b ), bin.ci( c, c+d ) ) ) colnames( tbl )[3:5] <- c(paste( " P(", colnames( tab )[1], ")", sep=""), paste( 100*(1-alpha),"% conf.", sep="" ), "interval") if( print ) cat("2 by 2 table analysis:", "\n------------------------------------------------------", "\nOutcome :", colnames( tab )[1], "\nComparing :", rownames( tab )[1], "vs.", rownames( tab )[2], "\n\n" ) if( print ) print( round( tbl, dec ) ) if( print ) cat( "\n" ) rmat <- rbind( c( rr, lci.rr, uci.rr ), c( or, lci.or, uci.or ), if( Fisher) c( ft$estimate, ft$conf.int ), c( pd, lci.pd, uci.pd ) ) rownames( rmat ) <- c(" Relative Risk:", " Sample Odds Ratio:", if( Fisher) "Conditional MLE Odds Ratio:", " Probability difference:") colnames( rmat ) <- c(" ", paste( 100*(1-alpha),"% conf.", sep="" ), "interval" ) if( print ) print( round( rmat, dec ) ) if( print ) cat( if( Fisher ) "\n Exact P-value:", if( Fisher ) round( ft$p.value, dec ), "\n Asymptotic P-value:", round( as.pval, dec ), "\n------------------------------------------------------\n") invisible( list( table = tbl, measures = rmat, p.value = c(as.pval,if( Fisher )ft$p.value) ) ) } Epi/R/rateplot.R0000644000175100001440000001551012531361077013172 0ustar hornikusersrateplot <- function( rates, which = c("ap","ac","pa","ca"), age = as.numeric( dimnames( rates )[[1]] ), per = as.numeric( dimnames( rates )[[2]] ), grid = FALSE, a.grid = grid, p.grid = grid, c.grid = grid, ygrid = grid, col.grid = gray( 0.9 ), a.lim = range( age, na.rm=TRUE ) + c(0,diff( range( age ) )/30), p.lim = range( per, na.rm=TRUE ) + c(0,diff( range( age ) )/30), c.lim = NULL, ylim = range( rates[rates>0], na.rm=TRUE ), at = NULL, labels = paste( at ), a.lab = "Age at diagnosis", p.lab = "Date of diagnosis", c.lab = "Date of birth", ylab = "Rates", type = "l", lwd = 2, lty = 1, log.ax = "y", las = 1, ann = FALSE, a.ann = ann, p.ann = ann, c.ann = ann, xannx = 1/20, cex.ann = 0.8, a.thin = seq( 1, length( age ), 2 ), p.thin = seq( 1, length( per ), 2 ), c.thin = seq( 2, length( age ) + length( per ) - 1, 2 ), col = par( "fg" ), a.col = col, p.col = col, c.col = col, ... ) { # Remove 0 rates, in order to avoid warnings rates[rates==0] <- NA # then do the plots for( i in 1:length( which ) ) { if( toupper( which[i] ) == "AP" ) Aplot( rates, age = age, per = per, a.grid = a.grid, ygrid = ygrid, col.grid = col.grid, a.lim = a.lim, ylim = ylim, a.lab = a.lab, ylab = ylab, at = at, labels = labels, type = type, lwd = lwd, lty = lty, col = col, log.ax = log.ax, las = las, p.ann = p.ann, xannx = xannx, p.col = p.col, cex.ann = cex.ann, p.thin = p.thin, p.lines = TRUE, c.lines = FALSE, ... ) if( toupper( which[i] ) == "AC" ) Aplot( rates, age = age, per = per, a.grid = a.grid, ygrid = ygrid, col.grid = col.grid, a.lim = a.lim, ylim = ylim, a.lab = a.lab, ylab = ylab, at = at, labels = labels, type = type, lwd = lwd, lty = lty, col = col, log.ax = log.ax, las = las, c.ann = c.ann, p.ann = p.ann, xannx = xannx, c.col = c.col, p.col = p.col, cex.ann = cex.ann, c.thin = c.thin, p.lines = FALSE, c.lines = TRUE, ... ) if( toupper( which[i] ) %in% c("APC","ACP") ) Aplot( rates, age = age, per = per, a.grid = a.grid, ygrid = ygrid, col.grid = col.grid, a.lim = a.lim, ylim = ylim, a.lab = a.lab, ylab = ylab, at = at, labels = labels, type = type, lwd = lwd, lty = lty, col = col, log.ax = log.ax, las = las, c.ann = c.ann, p.ann = p.ann, xannx = xannx, c.col = c.col, p.col = p.col, cex.ann = cex.ann, c.thin = c.thin, p.thin = p.thin, p.lines = TRUE, c.lines = TRUE, ... ) if( toupper( which[i] ) == "PA" ) Pplot( rates, age = age, per = per, grid = grid, p.grid = p.grid, ygrid = ygrid, col.grid = col.grid, p.lim = p.lim, ylim = ylim, p.lab = p.lab, ylab = ylab, at = at, labels = labels, type = type, lwd = lwd, lty = lty, col = col, log.ax = log.ax, las = las, ann = a.ann, xannx = xannx, cex.ann = cex.ann, a.thin = a.thin, ... ) if( toupper( which[i] ) == "CA" ) Cplot( rates, age = age, per = per, grid = grid, c.grid = c.grid, ygrid = ygrid, col.grid = col.grid, c.lim = c.lim, ylim = ylim, c.lab = c.lab, ylab = ylab, at = at, labels = labels, type = type, lwd = lwd, lty = lty, col = col, log.ax = log.ax, las = las, ann = a.ann, xannx = xannx, cex.ann = cex.ann, a.thin = a.thin, ... ) } } Epi/R/cal.yr.R0000644000175100001440000000300312664034207012521 0ustar hornikuserscal.yr <- function( x, format = "%Y-%m-%d", wh = NULL ) { cl.typ <- c("Date","POSIXct","POSIXlt","date","dates","chron") # Check if the input is a data frame and convert if( inherits( x, "data.frame" ) & is.null(wh) & missing(format) ) { # Indicator of where a date-type variable is wh <- which( sapply( x, inherits, cl.typ ) ) } if( inherits( x, "data.frame" ) & is.null(wh) & !missing(format) ) { # Indicator of where the character variables are wh <- which( sapply( x, is.character ) ) } if( inherits( x, "data.frame" ) & is.vector(wh) ) { if( is.character(wh) ) wh <- match( wh, names(x) ) # Convert the dates or the character variables for( i in wh ) { if( is.character(x[,i]) ) x[,i] <- cal.yr( x[,i], format=format ) else x[,i] <- cal.yr( x[,i] ) } return( x ) } # Finally, down to business --- converting a vector to decimal years: # Check if the input is some kind of date or time object if( any( inherits( x, cl.typ ) ) ) x <- as.Date( as.POSIXct( x ) ) else if( is.character( x ) ) x <- as.Date( x, format = format ) else if( is.factor( x ) ) x <- as.Date( as.character( x ), format = format ) else stop( "\nInput should be a data frame, a character vector, a factor or ", "some kind of date or time object:\n", "Date, POSIXct, POSIXlt, date, dates or chron" ) res <- as.numeric( x ) / 365.25 + 1970 class( res ) <- c("cal.yr","numeric") return( res ) } Epi/R/splitLexis.R0000644000175100001440000000775612531361077013515 0ustar hornikuserssplit.lexis.1D <- function(lex, breaks, time.scale, tol) { time.scale <- check.time.scale(lex, time.scale) ## Entry and exit times on the time scale that we are splitting time1 <- lex[,time.scale, drop=FALSE] time2 <- time1 + lex$lex.dur ## Augment break points with +/- infinity breaks <- sort( unique( breaks ) ) I1 <- c(-Inf, breaks) I2 <- c(breaks,Inf) ## Arrays containing data on each interval (rows) for each subject (cols) en <- apply(time1, 1, pmax, I1) # Entry time ex <- apply(time2, 1, pmin, I2) # Exit time NR <- nrow(en) NC <- ncol(en) ## Does subject contribute follow-up time to this interval? ## (intervals shorter than tol are ignored) valid <- en < ex - tol dur <- ex - en; dur[!valid] <- 0 # Time spent in interval ## Cumulative time since entry at the start of each interval time.since.entry <- rbind(0, apply(dur,2,cumsum)[-NR,,drop=FALSE]) cal.new.entry <- function(entry.time) { sweep(time.since.entry, 2, entry.time, "+")[valid] } old.entry <- lex[, timeScales(lex), drop=FALSE] new.entry <- lapply(old.entry, cal.new.entry) ## Status calculation aug.valid <- rbind(valid, rep(FALSE, NC)) last.valid <- valid & !aug.valid[-1,] any.valid <- apply(valid,2,any) new.Xst <- matrix( lex$lex.Cst, NR, NC, byrow=TRUE) new.Xst[last.valid] <- lex$lex.Xst[any.valid] n.interval <- apply(valid, 2, sum) new.lex <- Lexis("entry" = new.entry, "duration" = dur[valid], "id" = rep(lex$lex.id, n.interval), "entry.status" = rep(lex$lex.Cst, n.interval), "exit.status" = new.Xst[valid]) ## Update breaks attribute and tranfer time.since attribute breaks.attr <- attr(lex, "breaks") breaks.attr[[time.scale]] <- sort(c(breaks.attr[[time.scale]], breaks)) attr(new.lex, "breaks") <- breaks.attr attr(new.lex, "time.since") <- attr(lex, "time.since") return(new.lex) } splitLexis <- function(lex, breaks, time.scale=1, tol= .Machine$double.eps^0.5) { ## Advise the uninformed user... if( inherits(lex,"stacked.Lexis") ) stop( "It makes no sense to time-split after stacking ---\n", "split your original Lexis object and stack that to get what you want.\n") ## Set temporary, unique, id variable lex$lex.tempid <- lex$lex.id lex$lex.id <- 1:nrow(lex) ## Save auxiliary data aux.data.names <- setdiff(names(lex), timeScales(lex)) aux.data.names <- aux.data.names[substr(aux.data.names,1,4) != "lex."] aux.data <- lex[, c("lex.id","lex.tempid", aux.data.names), drop=FALSE] ## Check for NAs in the timescale ts <- check.time.scale(lex, time.scale) ts.miss <- any(is.na(lex[,ts])) if( ts.miss ) { na.lex <- lex[ is.na(lex[,ts]),] lex <- lex[!is.na(lex[,ts]),] cat( "Note: NAs in the time-scale \"", ts, "\", you split on\n") } ## If states are factors convert to numeric while splitting factor.states <- is.factor( lex$lex.Cst ) if( factor.states ) { state.levels <- levels( lex$lex.Cst ) nstates <- nlevels( lex$lex.Cst ) lex$lex.Cst <- as.integer( lex$lex.Cst ) lex$lex.Xst <- as.integer( lex$lex.Xst ) } ## Split the data lex <- split.lexis.1D(lex, breaks, time.scale, tol) ## Reinstitute the factor levels if( factor.states ) { lex$lex.Cst <- factor( lex$lex.Cst, levels=1:nstates, labels=state.levels ) lex$lex.Xst <- factor( lex$lex.Xst, levels=1:nstates, labels=state.levels ) } ## Put the NA-rows back if( ts.miss ) lex <- rbind( lex, na.lex[,colnames(lex)] ) ## Save attributes lex.attr <- attributes(lex) ## Merge lex <- merge.data.frame(lex, aux.data, by="lex.id") ## Restore attributes attr(lex,"breaks") <- lex.attr$breaks attr(lex,"time.scales") <- lex.attr$time.scales attr(lex,"time.since") <- lex.attr$time.since class(lex) <- c("Lexis", "data.frame") ## Restore id variable lex$lex.id <- lex$lex.tempid lex$lex.tempid <- NULL return(lex) } Epi/R/effx.r0000644000175100001440000002541112531361077012331 0ustar hornikusers## Program to calculate effects ## Michael Hills ## Improved by Bendix Carstensen and Martyn Plummer ## Post Tartu 2007 version June 2007 ## Addition allowing a TRUE/FALSE as binary outcome ## and possibility or relative risk for binary outcomes and rate ## difference for failure outcomes, BxC, Ocitober 2012 effx<-function(response, type="metric", fup=NULL, exposure, strata=NULL, control=NULL, weights=NULL, eff=NULL, alpha=0.05, base=1, digits=3, data=NULL) { ## stores the variable names for response, etc. rname<-deparse(substitute(response)) ename<-deparse(substitute(exposure)) if (!missing(strata)) { sname<-deparse(substitute(strata)) } ## The control argument is more complex, as it may be a name or ## list of names if(!missing(control)) { control.arg <- substitute(control) if (length(control.arg) > 1) { control.names <- sapply(control.arg, deparse)[-1] } else { control.names <- deparse(control.arg) } } ## Match the type argument type <- match.arg(type, c("metric", "failure", "count", "binary")) ## Check for missing arguments if (missing(response)) stop("Must specify the response","\n") if (missing(exposure)) stop("Must specify the exposure","\n") if (type == "failure" && missing(fup)) { stop("Must specify a follow-up variable when type is failure") } ## performs a few other checks if(rname==ename)stop("Same variable specified as response and exposure") if (!missing(strata)) { if(rname==sname)stop("Same variable specified as response and strata") if(sname==ename)stop("Same variable specified as strata and exposure") } ## If data argument is supplied, evaluate the arguments in that ## data frame. if (!missing(data)) { exposure <- eval(substitute(exposure), data) response <- eval(substitute(response), data) if (!missing(strata)) strata <- eval(substitute(strata), data) if (!missing(control)) control <- eval(substitute(control), data) if (!missing(fup)) fup <- eval(substitute(fup), data) if (!missing(weights)) { weights <- eval(substitute(weights), data) } } ## Now check validity of evaluated arguments if(is.logical(response)) response <- as.numeric(response) if(!is.numeric(response)) stop("Response must be numeric, not a factor") if (!missing(weights) && type != "binary") { stop("weights only allowed for a binary response") } if (!missing(strata) && !is.factor(strata)) stop("Stratifying variable must be a factor") if(type=="binary") { if( is.null(eff) ) eff<-"OR" if( !(eff %in% c("OR","RR") ) ) stop( "Only RR and OR allowed for binary response" ) response <- as.numeric(response) tmp<-(response==0 | response==1) if(all(tmp,na.rm=TRUE)==FALSE) stop("Binary response must be logical or coded 0,1 or NA") } # If a count is given we are actually using the fup if(type=="count") fup<-is.na(response)*1 if(type=="failure") { if( is.null(eff) ) eff<-"RR" response <- as.numeric(response) tmp<-(response==0 | response==1) if(all(tmp,na.rm=TRUE)==FALSE) stop("Failure response must be logical or coded 0,1 or NA") } ## If exposure is an ordered factor, drops the order. if(class(exposure)[1]=="ordered") { exposure<-factor(exposure, ordered=F) } ## Fix up the control argument as a named list if (!missing(control)) { if (is.list(control)) { names(control) <- control.names } else { control <- list(control) names(control) <- control.names } } ## prints out some information about variables cat("---------------------------------------------------------------------------","\n") cat("response : ", rname, "\n") cat("type : ", type, "\n") cat("exposure : ", ename, "\n") if(!missing(control))cat("control vars : ",names(control),"\n") if(!missing(strata)) { cat("stratified by : ",sname,"\n") } cat("\n") if(is.factor(exposure)) { cat(ename,"is a factor with levels: ") cat(paste(levels(exposure),collapse=" / "),"\n") exposure <- Relevel( exposure, base ) cat( "baseline is ", levels( exposure )[1] ,"\n") } else { cat(ename,"is numeric","\n") } if(!missing(strata)) { cat(sname,"is a factor with levels: ") cat(paste(levels(strata),collapse="/"),"\n") } if(type=="metric")cat("effects are measured as differences in means","\n") if(type=="binary") { if( eff=="OR" | is.null(eff))cat("effects are measured as odds ratios","\n") if( eff=="RR" )cat("effects are measured as relative risk","\n") } if(type=="failure") { if( eff=="RR" | is.null(eff))cat("effects are measured as rate ratios","\n") if( eff=="RD" )cat("effects are measured as rate differences","\n") } cat("---------------------------------------------------------------------------","\n") cat("\n") ## translates type of response and choice of eff into family if ( type=="metric") family<-gaussian if ( type=="binary") family<-binomial(link=logit) if ( type=="failure" | type=="count") family<-poisson(link=log) if ( !is.null(eff) ) { if (type=="binary" & eff=="RR") family<-binomial(link=log) if (type=="failure" & eff=="RD") family<-poisson(link=identity) } ## gets number of levels for exposure if a factor if(is.factor(exposure)) { nlevE<-length(levels(exposure)) } ## labels the output if(is.factor(exposure)) { cat("effect of",ename,"on",rname,"\n") } else { cat("effect of an increase of 1 unit in",ename,"on",rname,"\n") } if(!missing(control)) { cat("controlled for",names(control),"\n\n") } if(!missing(strata)) { cat("stratified by",sname,"\n\n") } ## no stratifying variable if(missing(strata)) { if(type=="metric") { if(missing(control)) { m<-glm(response~exposure,family=family) cat("number of observations ",m$df.null+1,"\n\n") mm<-glm(response~1,family=family,subset=!is.na(exposure)) } else { m<-glm(response~.+exposure,family=family, subset=!is.na(exposure),data=control) cat("number of observations ",m$df.null+1,"\n\n") mm<-glm(response~.,family=family, subset=!is.na(exposure),data=control) } res<-ci.lin(m,subset=c("Intercept","exposure"),alpha=alpha) res<-res[,c(1,5,6)] } if(type=="binary") { if(missing(control)) { m<-glm(response~exposure,family=family,weights=weights) cat("number of observations ",m$df.null+1,"\n\n") mm<-glm(response~1,family=family,subset=!is.na(exposure),weights=weights) } else { m<-glm(response~.+exposure,family=family, subset=!is.na(exposure),data=control,weights=weights) cat("number of observations ",m$df.null+1,"\n\n") mm<-glm(response~.,family=family, subset=!is.na(exposure),data=control,weights=weights) } res<-ci.lin(m,subset=c("Intercept","exposure"),Exp=TRUE,alpha=alpha) res<-res[,c(5,6,7)] } if (type=="failure" | type=="count") { if (missing(control)) { m<-glm(response/fup~exposure,weights=fup,family=family) cat("number of observations ",m$df.null+1,"\n\n") mm<-glm(response/fup~1,weights=fup,family=family, subset=!is.na(exposure)) } else { m<-glm(response/fup~.+exposure,weights=fup,family=family, data=control) cat("number of observations ",m$df.null+1,"\n\n") mm<-glm(response/fup~.,weights=fup,family=family, subset=!is.na(exposure),data=control) } res<-ci.exp(m,subset=c("Intercept","exposure"),alpha=alpha,Exp=(eff=="RR")) } res<-signif(res,digits) colnames(res)[1]<-c("Effect") if(is.factor(exposure)) { ln <- levels(exposure) rownames(res)[2:nlevE]<-paste(ln[2:nlevE],"vs",ln[1]) } aov <- anova(mm,m,test="Chisq") print( res[-1,] ) cat("\nTest for no effects of exposure on", aov[2,3],"df:", "p-value=",format.pval(aov[2,5],digits=3),"\n") invisible(list(res,paste("Test for no effects of exposure on", aov[2,3],"df:","p-value=",format.pval(aov[2,5],digits=3)))) } ## stratifying variable if(!missing(strata)) { sn <- levels(strata) nlevS<-length(levels(strata)) if(type=="metric") { if(missing(control)) { m<-glm(response~strata/exposure,family=family) cat("number of observations ",m$df.null+1,"\n\n") mm<-glm(response~strata+exposure,family=family) } else { m <-glm(response~strata/exposure + .,family=family, data=control) cat("number of observations ",m$df.null+1,"\n\n") mm <-glm(response~strata+exposure + .,family=family, data=control) } res<-ci.lin(m,subset=c("strata"),alpha=alpha)[c(-1:-(nlevS-1)),c(1,5,6)] } if(type=="binary") { if(missing(control)) { m<-glm(response~strata/exposure,family=family,weights=weights) cat("number of observations ",m$df.null+1,"\n\n") mm<-glm(response~strata+exposure,family=family,weights=weights) } else { m <-glm(response~strata/exposure + .,family=family, data=control,weights=weights) cat("number of observations ",m$df.null+1,"\n\n") mm <-glm(response~strata+exposure + .,family=family, data=control,weights=weights) } res<-ci.exp(m,subset=c("strata"),alpha=alpha)[c(-1:-(nlevS-1)),] } if (type=="failure" | type=="count") { if(missing(control)) { m<-glm(response/fup~strata/exposure,weights=fup,family=family) cat("number of observations ",m$df.null+1,"\n\n") mm<-glm(response~strata+exposure,weights=fup,family=family) } else { m <-glm(response/fup~.+strata/exposure,weights=fup,family=family,data=control) cat("number of observations ",m$df.null+1,"\n\n") mm<-glm(response/fup~.+strata+exposure,weights=fup,family=family,data=control) } res<-ci.exp(m,subset=c("strata"),alpha=alpha)[c(-1:-(nlevS-1)),] } res<-signif(res,digits) colnames(res)[1]<-c("Effect") if(is.factor(exposure)) { ln<-levels(exposure) newrownames<-NULL for(i in c(1:(nlevE-1))) { newrownames<-c(newrownames, paste("strata",sn[1:nlevS],"level",ln[i+1],"vs",ln[1])) } } else { newrownames<-paste("strata",sn[1:nlevS]) } rownames(res)<-newrownames aov<-anova(mm,m,test="Chisq") print( res ) cat("\nTest for effect modification on", aov[2,3],"df:","p-value=",format.pval(aov[2,5],digits=3),"\n") invisible(list(res,paste("Test for effect modification on", aov[2,3],"df:","p-value=",format.pval(aov[2,5],digits=3)))) } } Epi/R/N2Y.r0000644000175100001440000000423712531361077012014 0ustar hornikusersN2Y <- function( A, P, N, data=NULL, return.dfr=TRUE ) { # Make local versions of variables if a dataframe is supplied if( !is.null(data) ) { A <- if( !missing(A) ) eval( substitute(A), data, parent.frame() ) else data$A P <- if( !missing(P) ) eval( substitute(P), data, parent.frame() ) else data$P N <- if( !missing(N) ) eval( substitute(N), data, parent.frame() ) else data$N } # Derive the interval lengths from supplied data A.int <- unique( diff(sort(unique(A))) ) P.int <- unique( diff(sort(unique(P))) ) # Check if something is fishy if( length(A.int)!=1 ) stop( "Non-uniform age interval lengths:\n", A.int ) if( length(P.int)!=1 ) stop( "Non-uniform period interval lengths:\n", P.int ) if( A.int!=P.int ) stop( "Unequal age and period interval lengths:\n", "age: ", A.int, ", period: ", P.int ) # Put population prevalence data in a table Ntab <- xtabs( N ~ A + P ) # Devise a table for the risk times Ydim <- c(dimnames(Ntab),list(wh=c("lo","up"))) # note one less age and period category Ytab <- array( NA, dim=sapply(Ydim,length), dimnames = Ydim )[-dim(Ntab)[1],-dim(Ntab)[2],] # How manu age and period classes na <- nrow(Ytab) np <- ncol(Ytab) for(a in 1:na) for(p in 1:np) { Ytab[a,p,"up"] <- Ntab[a ,p]/3 + Ntab[a+1,p+1]/6 if( a > 1) Ytab[a,p,"lo"] <- Ntab[a-1,p]/6 + Ntab[a ,p+1]/3 else Ytab[a,p,"lo"] <- Ntab[a ,p]/2 + Ntab[a ,p+1]/2 - Ytab[a,p,"up"] } # Remember to check the follow-up time Ytab <- Ytab * A.int # Convert to a data frame if required (the default) if( return.dfr ) { ## If a dataframe is required as return value Ytab <- data.frame(expand.grid(dimnames(Ytab)), Y=c(Ytab)) ## Retrieve the numerical values of left endpoints of intervals Ytab$A <- as.numeric(as.character(Ytab$A)) Ytab$P <- as.numeric(as.character(Ytab$P)) ## Compute the correct midpoints from the supplied data Ytab$A <- Ytab$A + A.int * (1 + (Ytab$wh == "up"))/3 Ytab$P <- Ytab$P + P.int * (1 + (Ytab$wh == "lo"))/3 Ytab <- Ytab[, c("A","P","Y")] } Ytab } Epi/R/contr.orth.R0000644000175100001440000000040712531361077013437 0ustar hornikuserscontr.orth <- function( n ) { if( is.numeric( n ) && length( n )==1 ) levs <- 1:n else { levs <- n n <- length( n ) } Z <- contr.sum( n ) L <- 1:n - mean(1:n) contr <- Z - L%*%( ( t(L) %*% L )^(-1) ) %*% ( t(L) %*% Z ) contr[,1:(n-2)] } Epi/R/stattable.R0000644000175100001440000003440412531361077013326 0ustar hornikusersstat.table <- function(index, contents=count(), data, margins=FALSE) { ## Get names of indices, using either user-supplied names, or by ## deparsing. Some of this code is stolen from the list.names() ## function in table() index.sub <- substitute(index) index <- if (missing(data)) eval(index) else eval(index.sub, data) deparse.name <- function(x) if(is.symbol(x)) as.character(x) else "" if (is.list(index)) { if (is.call(index.sub)) { ## List constructed in the call to stat.table index.names <- names(index.sub) fixup <- if (is.null(index.names)) seq(along = index.sub) else index.names == "" dep <- sapply(index.sub[fixup], deparse.name) if (is.null(index.names)) index.labels <- dep else { index.labels <- index.names index.labels[fixup] <- dep } index.labels <- index.labels[-1] } else { ## List constructed outside the call to stat.table index.labels <- if (!is.null(names(index))) { names(index) } else { rep("", length(index)) } } } else { ## A single vector index.labels <- deparse.name(index.sub) } ## Coerce index to list of factors if (!is.list(index)) index <- list(index) index <- lapply(index, as.factor) ## Coerce contents to an expression representing a list of function calls contents <- substitute(contents) if (!identical(deparse(contents[[1]]), "list")) { contents <- call("list", contents) } ## Check that functions in the contents list are valid valid.functions <- c("count","mean","weighted.mean","sum","quantile", "median","IQR","max","min","ratio","percent","sd") table.fun <- character(length(contents) - 1) for (i in 2:length(contents)) { if (!is.call(contents[[i]])) stop("contents must be a list of function calls") FUN <- deparse(contents[[i]][[1]]) if (!FUN %in% valid.functions) stop(paste("Function",FUN,"not permitted in stat.table")) else table.fun[i-1] <- FUN } ## Label the contents by default with the function call ## But if user has supplied a label use that instead. stat.labels <- sapply(contents, deparse)[-1] content.names <- names(contents) if (!is.null(content.names)) { for (i in 2:length(content.names)) { if (nchar(content.names[i]) > 0) stat.labels[i-1] <- content.names[i] } } ##Define the allowed tabulation functions count <- function(id){ if (missing(id)) { id <- seq(along=index[[1]]) } y <- tapply(id, INDEX=subindex, FUN=function(x) length(unique(x))) y[is.na(y)] <- 0 return(y) } mean <- function(x, trim=0, na.rm=TRUE) { tapply(x, INDEX=subindex, FUN = base::mean, trim=trim, na.rm=na.rm) } weighted.mean <- function(x,w,na.rm=TRUE) { tapply(x, INDEX=subindex, FUN=stats::weighted.mean, w=w, na.rm=na.rm) } sum <- function(...,na.rm=TRUE) { tapply(..., INDEX=subindex, FUN = base::sum, na.rm=na.rm) } quantile <- function(x, probs, na.rm=TRUE,names=TRUE,type=7,...) { if (length(probs) > 1) stop("The quantile function only accepts scalar prob values within stat.table") tapply(x, INDEX=subindex, FUN = stats::quantile, probs=probs, na.rm=na.rm,names=names,type=type,...) } median <- function(x, na.rm=TRUE) { tapply(x, INDEX=subindex, FUN = stats::median, na.rm=na.rm) } IQR <- function(x, na.rm=TRUE) { tapply(x, INDEX=subindex, FUN= stats::IQR, na.rm=na.rm) } max <- function(..., na.rm=TRUE) { tapply(..., INDEX=subindex, FUN = base::max, na.rm=na.rm) } min <- function(..., na.rm=TRUE) { tapply(..., INDEX=subindex, FUN = base::min, na.rm=na.rm) } ratio <- function(d,y,scale=1, na.rm=TRUE) { if (length(scale) != 1) stop("Scale parameter must be a scalar") if (na.rm) { w <- (!is.na(d) & !is.na(y)) tab1 <- tapply(d*w, INDEX=subindex, FUN=base::sum, na.rm=TRUE) tab2 <- tapply(y*w, INDEX=subindex, FUN=base::sum, na.rm=TRUE) } else { tab1 <- tapply(d, INDEX=subindex, FUN=base::sum, na.rm=FALSE) tab2 <- tapply(y, INDEX=subindex, FUN=base::sum, na.rm=FALSE) } return(scale*tab1/tab2) } percent <- function(...) { x <- list(...) if (length(x) == 0) stop("No variables to calculate percent") x <- lapply(x, as.factor) n <- count() ## Work out which indices to sweep out sweep.index <- logical(length(subindex)) for (i in seq(along=subindex)) { sweep.index[i] <- !any(sapply(x,identical,subindex[[i]])) } if (!any(sweep.index)) { return(100*n/base::sum(n, na.rm=TRUE)) } else { margin <- apply(n,which(sweep.index),base::sum, na.rm=TRUE) margin[margin==0] <- NA return(100*sweep(n, which(sweep.index), margin,"/")) } } sd <- function (..., na.rm = TRUE) { tapply(..., INDEX=subindex, FUN = stats::sd, na.rm=na.rm) } ##Calculate dimension of the main table, excluding margins n.dim <- length(index) tab.dim <- sapply(index, nlevels) ##Sort out margins if (length(margins) == 1) margins <- rep(margins, n.dim) else if(length(margins) != n.dim) stop("Incorrect length for margins argument") ##Create grid of all possible subtables. fac.list <- vector("list", n.dim) for (i in 1:n.dim) { fac.list[[i]] <- if (margins[i]) c(0,1) else 1 } subtable.grid <- as.matrix(expand.grid(fac.list)) ##Fill in the subtables ans.dim <- c(length(contents)-1, tab.dim + margins) ans <- numeric(prod(ans.dim)) for (i in 1:nrow(subtable.grid)) { ##in.subtable is a logical vector indicating which dimensions are ##in the subtable (i.e. which have not been marginalized out) in.subtable <- as.logical(subtable.grid[i,]) llim <- rep(1,n.dim) + ifelse(in.subtable,rep(0,n.dim),tab.dim) ulim <- tab.dim + ifelse(in.subtable,rep(0,n.dim),rep(1, n.dim)) subindex <- index[in.subtable] if (length(subindex) == 0) { ## Marginalizing out all dimensions subindex <- list(rep(1, length(index[[1]]))) } subtable.list <- if(missing(data)) ##eval(contents, parent.frame()) eval(contents) else eval(as.expression(contents), data) for (j in 1:length(subtable.list)) { ans[array.subset(ans.dim,c(j,llim),c(j,ulim))] <- subtable.list[[j]] } } ans <- array(ans, dim=ans.dim) ans.dimnames <- lapply(index, levels) names(ans.dimnames) <- index.labels for (i in 1:length(index)) { if (margins[i]) ans.dimnames[[i]] <- c(ans.dimnames[[i]], "Total") } dimnames(ans) <- c(list("contents"=stat.labels), ans.dimnames) attr(ans, "table.fun") <- table.fun class(ans) <- c("stat.table", class(ans)) return(ans) } array.subset <- function(dim,lower,upper) { ##Returns a logical array of dimension dim for which elements in the range ##[lower[1]:upper[1], lower[2]:upper[2],...] are TRUE and others FALSE ##Check validity of arguments (but assume everything is an integer) ndim <- length(dim) if (length(lower) != ndim || length(upper) != ndim) { stop("Length of lower and upper limits must match dimension") } if (any(lower > upper) || any(lower < 1) || any(upper > dim)) { stop("Invalid limits") } ##The math is easier if we index arrays from 0 rather than 1 lower <- lower - 1 upper <- upper - 1 N <- prod(dim) ans <- rep(TRUE, N) for (i in 1:N) { l <- i - 1 for (d in 1:ndim) { k <- l %% dim[d] #k is the index of the ith element in dimension d if (k < lower[d] || k > upper[d]) { ans[i] <- FALSE break } l <- l %/% dim[d] } } return(array(ans, dim)) } split.to.width <- function(x,width) { ## Splits a string into a vector so that each element has at most width ## characters. If width is smaller than the length of the shortest word ## then the latter is used instead x.split <- strsplit(x,split=" ")[[1]] width <- max(c(width,nchar(x.split))) y <- character(0) imin <- 1 n <- length(x.split) for (i in 1:n) { cum.width <- if(i==n) { Inf } else { sum(nchar(x.split[imin:(i+1)])) + (i - imin + 1) } if (cum.width > width) { y <- c(y,paste(x.split[imin:i], collapse=" ")) imin <- i + 1 } } return(y) } pretty.print.stattable.1d <- function(x, width, digits) { ##Pretty printing of 1-D stat.table if (length(dim(x)) != 2) stop("Cannot print stat.table") ncol <- nrow(x) col.width <- numeric(ncol+1) col.header <- vector("list",ncol+1) n.header <- integer(ncol+1) print.list <- vector("list",ncol+1) ##First column col.header[[1]] <- split.to.width(names(dimnames(x))[2], width) n.header[1] <- length(col.header[[1]]) col1 <- format(c(col.header[[1]],dimnames(x)[[2]]), justify="left") col.header[[1]] <- col1[1:n.header[1]] print.list[[1]] <- col1[-(1:n.header[1])] col.width[1] <- nchar(col.header[[1]][1]) ##Other columns for (i in 2:(ncol+1)) { col.header[[i]] <- split.to.width(dimnames(x)[[1]][i-1], width) n.header[i] <- length(col.header[[i]]) this.col <- formatC(x[i-1,],width=width, digits=digits[attr(x,"table.fun")[i-1]], "f") this.col <- format(c(col.header[[i]],this.col),justify="right") col.width[i] <- nchar(this.col[1]) col.header[[i]] <- this.col[1:n.header[i]] print.list[[i]] <- this.col[-(1:n.header[i])] } ## table.width <- sum(col.width) + ncol + 3 max.n.header <- max(n.header) cat(" ",rep("-",table.width)," \n",sep="") for(i in 1:max.n.header) { cat(" ") for(j in 1:length(print.list)) { if (i <= n.header[j]) { cat(col.header[[j]][i]) } else { cat(rep(" ", col.width[[j]]),sep="") } if (j==1) cat(" ") else cat(" ") } cat(" \n") } cat(" ",rep("-",table.width)," \n",sep="") for (i in 1:length(print.list[[1]])) { cat(" ") if (pmatch("Total",print.list[[1]][i],nomatch=0)) { ##Add a blank line before the total cat(rep(" ",col.width[1]+1)," ",rep(" ",sum(col.width[-1])+ncol), " \n ",sep="") } for (j in 1:length(print.list)) { cat(print.list[[j]][i]) if (j == 1) { cat(" " ) } else { cat(" ") } } cat(" \n") } cat(" ",rep("-",table.width)," \n",sep="") return(invisible(x)) } pretty.print.stattable.2d <- function(x, width, digits) { ##Pretty printing of 2-Dimensional stat.table if (length(dim(x)) != 3) stop("Cannot print stat.table") nstat <- dim(x)[1] ncol <- dim(x)[3] nrow <- dim(x)[2] col.width <- numeric(ncol+1) col.header <- vector("list",ncol+1) n.header <- integer(ncol+1) print.list <- vector("list",ncol+1) ##First column col.header[[1]] <- split.to.width(names(dimnames(x))[2], width) n.header[1] <- length(col.header[[1]]) col1 <- format(c(col.header[[1]],dimnames(x)[[2]]), justify="left") col.header[[1]] <- col1[1:n.header[1]] print.list[[1]] <- col1[-(1:n.header[1])] col.width[1] <- nchar(col.header[[1]][1]) ##Other columns for (i in 2:(ncol+1)) { col.header[[i]] <- split.to.width(dimnames(x)[[3]][i-1], width) n.header[i] <- length(col.header[[i]]) this.col <- matrix("", nrow=nstat,ncol=nrow) for (j in 1:nstat) { z <- x[j,,i-1] this.col[j,] <- formatC(z, width=width, format="f", digits=digits[attr(x,"table.fun")[j]]) ## this.col[j,] <- formatC(z, width=width, digits=digits, ## format=ifelse(identical(round(z),z),"d","f")) } this.col <- format(c(col.header[[i]],this.col),justify="right") col.width[i] <- nchar(this.col[1]) col.header[[i]] <- this.col[1:n.header[i]] print.list[[i]] <- this.col[-(1:n.header[i])] } ##Correct first column for multiple stats if (nstat > 1) { pl1 <- print.list[[1]] print.list[[1]] <- rep(paste(rep(" ",col.width[1]),collapse=""),nstat*nrow) print.list[[1]][1 + nstat*((1:nrow)-1)] <- pl1 } table.width <- sum(col.width) + ncol + 3 max.n.header <- max(n.header) cat(" ",rep("-",table.width)," \n",sep="") ## Supercolumn header super.header <- names(dimnames(x))[3] npad <- sum(col.width[-1]) + ncol + 1 - nchar(super.header) if (npad >= 0) { cat(" ",rep(" ",col.width[1])," ",sep="") cat(rep("-",floor(npad/2)),sep="") cat(super.header) cat(rep("-",ceiling(npad/2))," \n",sep="") } ## Headers for(i in 1:max.n.header) { cat(" ") for(j in 1:length(print.list)) { if (i <= n.header[j]) { cat(col.header[[j]][i]) } else { cat(rep(" ", col.width[[j]]),sep="") } if (j==1) cat(" ") else cat(" ") } cat(" \n") } cat(" ",rep("-",table.width)," \n",sep="") ## Body of table blank.line <- function() { cat(" ",rep(" ",col.width[1]+1)," ",rep(" ",sum(col.width[-1])+ncol), " \n",sep="") } for (i in 1:length(print.list[[1]])) { if (pmatch("Total",print.list[[1]][i],nomatch=0)) { ##Add a blank line before the total blank.line() } cat(" ") for (j in 1:length(print.list)) { cat(print.list[[j]][i]) if (j == 1) { cat(" " ) } else { cat(" ") } } cat(" \n") if (nstat > 1 && i %% nstat == 0 && i != length(print.list[[1]])) { ##Separate interleaved stats blank.line() } } cat(" ",rep("-",table.width)," \n",sep="") return(invisible(x)) } print.stat.table <- function(x, width=7,digits,...) { fun.digits <- c("count"=0,"mean"=2,"weighted.mean"=2,"sum"=2,"quantile"=2, "median"=2,"IQR"=2,"max"=2,"min"=2,"ratio"=2,"percent"=1, "sd"=2) if (!missing(digits)) { if (is.null(names(digits))) { if (length(digits) > 1) stop("digits must be a scalar or named vector") else fun.digits[1:length(fun.digits)] <- digits } else { fun.digits[names(digits)] <- digits } } if (length(dim(x)) == 2) pretty.print.stattable.1d(x, width, fun.digits) else if (length(dim(x)) == 3) pretty.print.stattable.2d(x, width, fun.digits) else NextMethod("print",...) } ## Satisfy QA checks by defining these functions. But if we never ## export them they can't be used directly. count <- function(id) { } ratio <- function(d, y, scale=1, na.rm=TRUE) { } percent <- function(...) { } Epi/R/factorize.R0000644000175100001440000000547012613454566013341 0ustar hornikusers# The factorize method factorize <- function (x, ...) UseMethod("factorize") # Default method is just the Relevel method factorize.default <- Relevel.default # The Lexis version of this Relevel.Lexis <- factorize.Lexis <- function (x, states=NULL, print=TRUE, ... ) { # Is this really a Lexis object if( !inherits(x,"Lexis") ) stop( "First argument must be a Lexis object" ) # If lex.Cst and lex.Xst are not factors, make them: if( !is.factor(x$lex.Cst) | !is.factor(x$lex.Xst) ) { Cst <- factor(x$lex.Cst) Xst <- factor(x$lex.Xst) } else # just use the factors as they are { Cst <- x$lex.Cst Xst <- x$lex.Xst } # - but amend them to have the same set of levels all.levels = union(levels(Cst), levels(Xst)) Cst <- factor(Cst, levels = all.levels) Xst <- factor(Xst, levels = all.levels) # A table of actually occurring levels and their names tCX <- table(Cst) + table(Xst) all.levels <- names( tCX[tCX>0] ) # If states are not given, just return factors with reduced levels if( is.null(states) ) { x$lex.Cst <- factor( Cst, levels = all.levels ) x$lex.Xst <- factor( Xst, levels = all.levels ) } # If new state names are given as a list it implies merging of them if( !is.null( states ) & is.list( states ) ) { x$lex.Cst <- Relevel( Cst, states, ... ) x$lex.Xst <- Relevel( Xst, states, ... ) if( print ) { # Construct translation table between old and grouped states to print tC <- table( Cst, x$lex.Cst ) tX <- table( Xst, x$lex.Xst ) cC <- matrix( colnames(tC), nrow(tC), ncol(tC), byrow=T ) cX <- matrix( colnames(tX), nrow(tX), ncol(tX), byrow=T ) cC[tC==0] <- "" cX[tX==0] <- "" print( data.frame( type=rep( c("lex.Cst","lex.Xst"), c(nrow(tC),nrow(tX)) ), old=c(rownames(tC),rownames(tX)), new=c( apply( cC, 1, paste, collapse="" ), apply( cX, 1, paste, collapse="" ) ) ) ) } } # If states is a character vector we assume that it's just new names if( !is.null( states ) & is.character( states ) ) { if( length( states ) != nlevels(Cst) ) stop( "Second argument is a vector of length ", length(states), ", but it should be the joint no. of states, ", length(all.levels), "\ncorresponding to ", all.levels ) levels( Cst ) <- levels( Xst ) <- states x$lex.Cst <- Cst x$lex.Xst <- Xst if( print ) { cat( "New levels for lex.Xst and lex.Cst generated:\n" ) print( data.frame( old=all.levels, new=levels(x$lex.Cst) ) ) } } # If states is a numeric vector we assume that it's just reordering if( !is.null( states ) & is.numeric( states ) ) { x$lex.Cst <- Relevel( Cst, states ) x$lex.Xst <- Relevel( Xst, states ) } return( x ) } Epi/R/apc.fit.R0000644000175100001440000003246112721153472012667 0ustar hornikusersapc.fit <- function( data, A, P, D, Y, ref.c, ref.p, dist = c("poisson","binomial"), model = c("ns","bs","ls","factor"), dr.extr = "weighted", parm = c("ACP","APC","AdCP","AdPC","Ad-P-C","Ad-C-P","AC-P","AP-C"), npar = c( A=5, P=5, C=5 ), scale = 1, alpha = 0.05, print.AOV = TRUE ) { dist <- match.arg(dist) model <- match.arg(model) drtyp <- deparse(substitute(dr.extr)) parm <- toupper(match.arg(parm)) if(!missing(data)) { if (length(match(c("A", "P", "D", "Y"), names(data))) != 4) stop("Data frame ", deparse(substitute(data)), " has columns:\n", names(data), "\nmust have variables:\n", "A (age), P (period), D (cases) and Y (person-time)") data <- data[,c("A","P","D","Y")] data <- data[complete.cases(data),] A <- data$A P <- data$P D <- data$D Y <- data$Y } else { nm <- logical(4) nm[1] <- missing(A) nm[2] <- missing(P) nm[3] <- missing(D) nm[4] <- missing(Y) if (any(nm)) stop("Variable", if (sum(nm) > 1) "s", paste(c(" A", " P", " D", " Y")[nm], collapse = ","), " missing from input") if( diff(range( lv <- sapply( list(A = A, P = P, D = D, Y = Y), length) ) ) != 0 ) stop( "\nLengths of variables (", paste(paste(names(lv), lv, sep = ":"), collapse = ", "), ") are not the same." ) } med <- function(x, y) { # Computes where the median number of ys is on the x scale o <- order(x) a <- y[o] names(a) <- x[o] return( as.numeric(names(a[cumsum(a)/sum(a) > 0.5][1])) ) } p0 <- ifelse(missing(ref.p), med(P, D), ref.p) c0 <- ifelse(missing(ref.c), med(P - A, D), ref.c) ref.p <- !missing(ref.p) ref.c <- !missing(ref.c) if( is.list(npar) & length(npar)<3 ) stop("npar as a list should have length 3! \n") if( !is.list(npar) & length(npar)!=3 ) { npar <- rep(npar, 3)[1:3] names(npar) = c("A","P","C") cat("NOTE: npar is specified as:") print( npar ) } if( is.null(names(npar)) ) names(npar) <- c("A", "P", "C") lu <- paste(formatC(c(alpha/2, 1 - alpha/2) * 100, format = "f", digits = 1), "%", sep = "") proj.ip <- function(X, M, orth = FALSE, weight = rep(1, nrow(X))) { if (nrow(X) != length(weight)) stop("Dimension of space and length of weights differ!") if (nrow(X) != nrow(M)) stop("Dimension of space and rownumber of model matrix differ!") Pp <- solve(crossprod(X * sqrt(weight)), t(X * weight)) %*% M PM <- X %*% Pp if (orth) PM <- M - PM else PM } Thin.col <- function(X, tol = 1e-06) { QR <- qr(X, tol = tol, LAPACK = FALSE) X[, QR$pivot[seq(length = QR$rank)], drop = FALSE] } detrend <- function(M, t, weight = rep(1, nrow(M))) { Thin.col(proj.ip(cbind(1, t), M, orth = TRUE, weight = weight)) } if (is.list(model)) { if (!all(sapply(model, is.function))) stop("'model' is a list, but not all elements are functions as they should be.") if ((lmod <- length(model)) < 3) stop("'model' is a list, with", lmod, "elements, it should have three.") if (is.null(names(model))) names(model) <- c("A", "P", "C") MA <- model[["A"]](A) MP <- model[["P"]](P) MC <- model[["C"]](P - A) Rp <- model[["P"]](p0) Rc <- model[["C"]](c0) } else { if (model == "factor") { MA <- model.matrix(~factor(A) - 1) MP <- model.matrix(~factor(P) - 1) MC <- model.matrix(~factor(P - A) - 1) Rp <- MP[abs(P - p0) == min(abs(P - p0)), , drop = FALSE][1, ] Rc <- MC[abs(P - A - c0) == min(abs(P - A - c0)), , drop = FALSE][1, ] } if (model == "ns") { # is npar a list knl <- is.list( npar ) # if scalar expand if( !knl & length(npar)==1 ) npar <- rep( npar, 3 ) # if no names, provide them if( is.null(names(npar)) ) names(npar) <- c("A","P","C") # if names too long or wrong case, rectify names( npar ) <- toupper( substr(names(npar),1,1) ) MA <- if (knl) Ns( A, knots = npar[["A"]] ) else Ns( A, knots = quantile( rep(A,D), probs=(1:npar["A"]-0.5)/npar["A"] ) ) MP <- if (knl) Ns(P , knots = npar[["P"]] ) else Ns(P , knots = quantile( rep(P,D), probs=(1:npar["P"]-0.5)/npar["P"] ) ) MC <- if (knl) Ns(P-A, knots = npar[["C"]] ) else Ns(P-A, knots = quantile( rep(P-A,D), probs=(1:npar["C"]-0.5)/npar["C"] ) ) Rp <- ns(p0, knots = attr(MP,"knots"), Boundary.knots = attr(MP,"Boundary.knots")) Rc <- ns(c0, knots = attr(MC,"knots"), Boundary.knots = attr(MC,"Boundary.knots")) Knots <- list( Age = sort(c(attr(MA,"knots"), attr(MA,"Boundary.knots"))), Per = sort(c(attr(MP,"knots"), attr(MP,"Boundary.knots"))), Coh = sort(c(attr(MC,"knots"), attr(MC,"Boundary.knots")))) } if (model %in% c("bs", "ls")) { deg <- switch(model, ls = 1, bs = 3) knl <- is.list(npar) if (knl) nk <- sapply(npar, length) MA <- if (knl) bs(A, knots = npar[["A"]][-c(1,nk[1])], Boundary.knots = npar[["A"]][ c(1,nk[1])], degree = deg) else bs(A, df = npar[["A"]], degree = deg) MP <- if (knl) bs(P, knots = npar[["P"]][-c(1,nk[2])], Boundary.knots = npar[["P"]][ c(1,nk[2])], degree = deg) else bs(P, df = npar[["P"]], degree = deg) MC <- if (knl) bs(P - A, knots = npar[["C"]][-c(1, nk[3])], Boundary.knots = npar[["C"]][ c(1, nk[3])], degree = deg) else bs(P - A, df = npar[["C"]], degree = deg) Rp <- bs(p0, knots = attr(MP,"knots"), Boundary.knots = attr(MP,"Boundary.knots"), degree = attr(MP,"degree")) Rc <- bs(c0, knots = attr(MC,"knots"), Boundary.knots = attr(MC,"Boundary.knots"), degree = attr(MC,"degree")) Knots <- list(Age = sort(c(attr(MA,"knots"),attr(MA,"Boundary.knots"))), Per = sort(c(attr(MP,"knots"),attr(MP,"Boundary.knots"))), Coh = sort(c(attr(MC,"knots"),attr(MC,"Boundary.knots")))) } } if (tolower(substr(dist, 1, 2)) == "po") { m.APC <- glm(D ~ MA + I(P - p0) + MP + MC, offset = log(Y), family = poisson) Dist <- "Poisson with log(Y) offset" } if (tolower(substr(dist, 1, 3)) %in% c("bin")) { m.APC <- glm(cbind(D, Y - D) ~ MA + I(P - p0) + MP + MC, family = binomial) Dist <- "Binomial regression (logistic) of D/Y" } m.AP <- update(m.APC, . ~ . - MC) m.AC <- update(m.APC, . ~ . - MP) m.Ad <- update(m.AP, . ~ . - MP) m.A <- update(m.Ad, . ~ . - I(P - p0)) m.0 <- update(m.A, . ~ . - MA) AOV <- anova(m.A, m.Ad, m.AC, m.APC, m.AP, m.Ad, test = "Chisq") attr(AOV, "heading") <- "\nAnalysis of deviance for Age-Period-Cohort model\n" attr(AOV, "row.names") <- c("Age", "Age-drift", "Age-Cohort", "Age-Period-Cohort", "Age-Period", "Age-drift") A.pt <- unique(A) A.pos <- match(A.pt, A) P.pt <- unique(P) P.pos <- match(P.pt, P) C.pt <- unique(P - A) C.pos <- match(C.pt, P - A) MA <- cbind(1, MA) if (!mode(dr.extr) %in% c("character", "numeric")) stop("\"dr.extr\" must be of mode \"character\" or \"numeric\".\n") if (is.character(dr.extr)) { wt <- rep(1, length(D) ) drtyp <- "1-weights" if( toupper(substr(dr.extr, 1, 1)) %in% c("W","T","D") ) { wt <- D drtyp <- "D-weights" } if( toupper(substr(dr.extr, 1, 1)) %in% c("L","R") ) { wt <- (Y^2)/D drtyp <- "Y2/D-weights" } if( toupper(substr(dr.extr, 1, 1)) %in% c("Y") ) { wt <- Y drtyp <- "Y-weights" } } if ( is.numeric(dr.extr) ) wt <- dr.extr Rp <- matrix(Rp, nrow = 1) Rc <- matrix(Rc, nrow = 1) xP <- detrend(rbind(Rp, MP), c(p0, P), weight = c(0, wt)) xC <- detrend(rbind(Rc, MC), c(c0, P - A), weight = c(0, wt)) MPr <- xP[-1,,drop=FALSE] - ref.p * xP[rep(1, nrow(MP)),,drop=FALSE] MCr <- xC[-1,,drop=FALSE] - ref.c * xC[rep(1, nrow(MC)),,drop=FALSE] if (length(grep("-", parm)) == 0) { if (parm %in% c("ADPC", "ADCP", "APC", "ACP")) m.APC <- update(m.0, . ~ . - 1 + MA + I(P - p0) + MPr + MCr) drift <- rbind( ci.exp(m.APC, subset = "I\\(", alpha = alpha), ci.exp(m.Ad , subset = "I\\(", alpha = alpha) ) rownames(drift) <- c(paste("APC (",drtyp,")",sep=""), "A-d") if (parm == "ADCP") m.APC <- update(m.0, . ~ . - 1 + MA + I(P - A - c0) + MPr + MCr) if (parm == "APC") { MPr <- cbind(P - p0, MPr) m.APC <- update(m.0, . ~ . - 1 + MA + MPr + MCr) } if (parm == "ACP") { MCr <- cbind(P - A - c0, MCr) m.APC <- update(m.0, . ~ . - 1 + MA + MPr + MCr) } Age <- cbind(Age = A.pt, ci.exp(m.APC, subset = "MA", ctr.mat = MA[A.pos,,drop=FALSE], alpha = alpha))[order(A.pt),] Per <- cbind(Per = P.pt, ci.exp(m.APC, subset = "MPr", ctr.mat = MPr[P.pos,,drop=FALSE], alpha = alpha))[order(P.pt),] Coh <- cbind(Coh = C.pt, ci.exp(m.APC, subset = "MCr", ctr.mat = MCr[C.pos,,drop=FALSE], alpha = alpha))[order(C.pt),] colnames(Age)[-1] <- c("Rate", lu) colnames(Per)[-1] <- c("P-RR", lu) colnames(Coh)[-1] <- c("C-RR", lu) Type <- paste("ML of APC-model", Dist, ": (", parm, "):\n") Model <- m.APC } else { adc <- update(m.0, . ~ . - 1 + MA + I(P - A - c0)) adp <- update(m.0, . ~ . - 1 + MA + I(P - p0)) drift <- ci.exp(adc, subset = "I\\(") rownames(drift) <- "A-d" xP <- cbind(1, P - p0, MPr) xC <- cbind(1, P - A - c0, MCr) lP <- cbind(P - p0, MPr) lC <- cbind(P - A - c0, MCr) if (parm == "AD-C-P") { rc <- update(m.0, . ~ . - 1 + xC, offset = predict(adc, type = "link")) rp <- update(m.0, . ~ . - 1 + xP, offset = predict(adc, type = "link")) A.eff <- ci.exp(adc, subset = "MA", ctr.mat = MA[A.pos,], alpha = alpha) C.eff <- ci.exp( rc, subset = "xC", ctr.mat = xC[C.pos,], alpha = alpha) P.eff <- ci.exp( rp, subset = "xP", ctr.mat = xP[P.pos,], alpha = alpha) Model <- list( adc, rc, rp ) } else if (parm == "AD-P-C") { rp <- update(m.0, . ~ . - 1 + xP, offset = predict(adp,type = "link")) rc <- update(m.0, . ~ . - 1 + xC, offset = predict(rp,type = "link")) A.eff <- ci.exp(adp, subset = "MA", ctr.mat = MA[A.pos,], alpha = alpha) P.eff <- ci.exp(rp, subset = "xP", ctr.mat = xP[P.pos,], alpha = alpha) C.eff <- ci.exp(rc, subset = "xC", ctr.mat = xC[C.pos,], alpha = alpha) Model <- list( adp, rp, rc ) } else if (parm == "AC-P") { ac <- update(m.0, . ~ . - 1 + MA + lC) rp <- update(m.0, . ~ . - 1 + xP, offset = predict(ac,type = "link")) A.eff <- ci.exp(ac, subset = "MA", ctr.mat = MA[A.pos,], alpha = alpha) C.eff <- ci.exp(ac, subset = "lC", ctr.mat = lC[C.pos,], alpha = alpha) P.eff <- ci.exp(rp, subset = "xP", ctr.mat = xP[P.pos,], alpha = alpha) Model <- list( ac, rp ) } else if (parm == "AP-C") { ap <- update(m.0, . ~ . - 1 + MA + lP) rc <- update(m.0, . ~ . - 1 + xC, offset = predict(ap,type = "link")) A.eff <- ci.exp(ap, subset = "MA", ctr.mat = MA[A.pos,], alpha = alpha) P.eff <- ci.exp(ap, subset = "lP", ctr.mat = lP[P.pos,], alpha = alpha) C.eff <- ci.exp(rc, subset = "xC", ctr.mat = xC[C.pos,], alpha = alpha) Model <- list( ap, rc ) } Age <- cbind(Age = A.pt, A.eff)[order(A.pt),] Per <- cbind(Per = P.pt, P.eff)[order(P.pt),] Coh <- cbind(Cph = C.pt, C.eff)[order(C.pt),] colnames(Age)[-1] <- c("A.eff", lu) colnames(Per)[-1] <- c("P.eff", lu) colnames(Coh)[-1] <- c("C.eff", lu) Type <- paste("Sequential modelling", Dist, ": (", parm, "):\n") } res <- list(Type = Type, Model = Model, Age = Age, Per = Per, Coh = Coh, Drift = drift, Ref = c(Per = if ( parm %in% c("APC","ADPC","Ad-P-C","AP-C") ) p0 else NA, Coh = if ( parm %in% c("ACP","ADCP","Ad-C-P","AC-P") ) c0 else NA ), Anova = AOV) # If a spline model is used, add a "Knots" component to the apc-object if (model %in% c("ns", "bs")) res <- c(res, list(Knots = Knots)) res$Age[, -1] <- res$Age[, -1] * scale if (print.AOV) { print(res$Type) print(res$Anova) } # Print warnings about reference points: if( !ref.p & parm %in% c("APC","ADPC") ) cat( "No reference period given:\n", "Reference period for age-effects is chosen as\n", "the median date of event: ", p0, ".\n" ) if( !ref.c & parm %in% c("ACP","ADCP") ) cat( "No reference period given:\n", "Reference period for age-effects is chosen as\n", "the median date of birth for persons with event: ", c0, ".\n" ) class(res) <- "apc" invisible(res) } Epi/R/ROC.R0000644000175100001440000002211312531361077011760 0ustar hornikuserssteplines <- function( x, y, left = TRUE, right = !left, order = TRUE, ... ) { # A function to plot step-functions # # Get the logic right if right is supplied... left <- !right # ... right! n <- length( x ) if( any( order ) ) ord <- order(x) else ord <- 1:n dbl <- rep( 1:n, rep( 2, n) ) xv <- c( !left, rep( T, 2*(n-1) ), left) yv <- c( left, rep( T, 2*(n-1) ), !left) lines( x[ord[dbl[xv]]], y[ord[dbl[yv]]], ... ) } interp <- function ( target, fv, res ) { # Linear interpolaton of the values in the N by 2 matrix res, # to the target value target on the N-vector fv. # Used for placing tickmarks on the ROC-curves. # where <- which( fv>target )[1] - 1:0 int <- fv[where] wt <- ( int[2] - target ) / diff( int ) wt[2] <- 1-wt t( res[where,] ) %*% wt } ROC.tic <- function ( tt, txt = formatC(tt,digits=2,format="f"), dist = 0.02, angle = +135, col = "black", cex = 1.0, fv, res ) { # Function for drawing tickmarks on a ROC-curve # for (i in 1:length(tt)) { pnt <- interp ( tt[i], fv, res ) x <- 1-pnt[2] y <- pnt[1] lines( c( x, x+dist*cos(pi*angle/180) ), c( y, y+dist*sin(pi*angle/180) ), col=col ) text( x+dist*cos(pi*angle/180), y+dist*sin(pi*angle/180), txt[i], col=col, adj=c( as.numeric(abs(angle)>=90), as.numeric( angle <= 0)), cex=cex ) } } ROC <- function ( test = NULL, stat = NULL, form = NULL, plot = c( "sp", "ROC" ), PS = is.null(test), # Curves on probability scale PV = TRUE, # sn, sp, PV printed at "optimality" point MX = TRUE, # tick at "optimality" point MI = TRUE, # Model fit printed AUC = TRUE, # Area under the curve printed grid = seq(0,100,10), # Background grid (%) col.grid = gray( 0.9 ), cuts = NULL, lwd = 2, data = parent.frame(), ... ) { # First all the computations # # Name of the response rnam <- if ( !missing( test ) ) deparse( substitute( test ) ) else "lr.eta" # Fit the model and get the info for the two possible types of input if( is.null( form ) ) { if( is.null( stat ) | is.null( test ) ) stop( "Either 'test' AND 'stat' OR 'formula' must be supplied!" ) lr <- glm( stat ~ test, family=binomial )#, data=data ) resp <- stat Model.inf <- paste("Model: ", deparse( substitute( stat ) ), "~", deparse( substitute( test ) ) ) } else { lr <- glm(form, family = binomial, data = data) resp <- eval( parse(text = deparse(form[[2]])), envir=lr$model ) Model.inf <- paste("Model: ",paste(paste(form)[c(2,1,3)], collapse=" ")) } # Form the empirical distribution function for test for each of # the two categories of resp. # First a table of the test (continuous variable) vs. the response and # adding a row of 0s so that we have all points fro the ROC curve m <- as.matrix( base::table( switch( PS+1, test, lr$fit ), resp ) ) m <- addmargins( rbind( 0, m ), 2 ) # What values of test/eta do the rows refer to fv <- c( -Inf, sort( unique( switch( PS+1, test, lr$fit ) ) ) ) # How many rows in this matrix nr <- nrow(m) # Calculate the empirical distribution functions (well, cumulative numbers): m <- apply( m, 2, cumsum ) # Then the relevant measures are computed. sns <- (m[nr,2]-m[,2]) / m[nr,2] spc <- m[,1] / m[nr,1] pvp <- m[,2] / m[,3] pvn <- (m[nr,1]-m[,1]) / ( m[nr,3]-m[,3] ) res <- data.frame( cbind( sns, spc, pvp, pvn, fv ) ) names( res ) <- c( "sens", "spec", "pvp", "pvn", rnam ) # AUC by triangulation auc <- sum( (res[-1,"sens"]+res[-nr,"sens"])/2 * abs(diff(1-res[,"spec"])) ) # Plot of sens, spec, PV+, PV-: if ( any( !is.na( match( c( "SP", "SNSP", "SPV" ), toupper( plot ) ) ) ) ) { # First for probability scale if ( PS ) { plot( 0:1, 0:1, xlim=0:1, xlab="Cutpoint for predicted probability", ylim=0:1, ylab=" ", type="n" ) if( is.numeric( grid ) ) abline( h=grid/100, v=grid/100, col=col.grid ) box() for ( j in 4:1 ){ steplines( fv, res[,j], lty=1, lwd=lwd, col=gray((j+1)/7)) } text( 0, 1.01, "Sensitivity", cex=0.7, adj=c(0,0), font=2 ) text( 1, 1.01, "Specificity", cex=0.7, adj=c(1,0), font=2 ) text( 0, m[nr,2]/m[nr,3]-0.01, "PV+", cex=0.7, adj=c(0,1), font=2 ) text( 0 + strwidth( "PV+", cex=0.7 ), m[nr,2]/m[nr,3]-0.01, paste( " (= ", m[nr,2],"/", m[nr,3], " =", formatC( 100*m[nr,2]/m[nr,3], digits=3 ), "%)", sep=""), adj=c(0,1), cex=0.7 ) text( 1, 1-m[nr,2]/m[nr,3]-0.01, "PV-", cex=0.7, adj=c(1,1), font=2 ) } # then for test-variable scale else { xl <- range( test ) plot( xl, 0:1, xlim=xl, xlab=paste( deparse( substitute( test ) ), "(quantiles)" ), ylim=0:1, ylab=" ", type="n" ) if( is.numeric( grid ) ) abline( h=grid/100, v=quantile( test, grid/100 ), col=col.grid ) box() for ( j in 4:1 ){ steplines( fv, res[,j], lty=1, lwd=lwd, col=gray((j+1)/7))} text( xl[1], 1.01, "Sensitivity", cex=0.7, adj=c(0,0), font=2 ) text( xl[2], 1.01, "Specificity", cex=0.7, adj=c(1,0), font=2 ) text( xl[1], m[nr,2]/m[nr,3]-0.01, "PV+", cex=0.7, adj=c(0,1), font=2 ) text( xl[1] + strwidth( "PV+", cex=0.7 ), m[nr,2]/m[nr,3]-0.01, paste( " (= ", m[nr,2],"/", m[nr,3], " =", formatC( 100*m[nr,2]/m[nr,3], digits=3 ), "%)", sep=""), adj=c(0,1), cex=0.7 ) text( xl[2], 1-m[nr,2]/m[nr,3]-0.01, "PV-", cex=0.7, adj=c(1,1), font=2 ) } } # Plot of ROC-curve: if ( any( !is.na( match( "ROC", toupper( plot ) ) ) ) ) { plot( 1-res[,2], res[,1], xlim=0:1, xlab="1-Specificity", ylim=0:1, ylab= "Sensitivity", type="n", ...) if( is.numeric( grid ) ) abline( h=grid/100, v=grid/100, col=gray( 0.9 ) ) abline( 0, 1, col=gray( 0.4 ) ) box() lines( 1-res[,"spec"], res[,"sens"], lwd=lwd ) # Tickmarks on the ROC-curve if ( !is.null(cuts) ) { ROC.tic( cuts, txt=formatC( cuts, digits=2, format="f" ), fv=fv, res=res, dist=0.03, cex=0.7) } # Plot of optimality point if (MX) { mx <- max( res[,1]+res[,2] ) mhv <- which( (res[,1]+res[,2])==mx )[1] mxf <- fv[mhv] abline( mx-1, 1, col=gray(0.4) ) ROC.tic( mxf, txt=paste( rnam, "=", formatC( mxf, format="f", digits=3 ) ), fv=fv, res=res, dist=0.03, cex=0.7, angle=135 ) } # Model information if (MI) { crn <- par()$usr text(0.95*crn[2]+0.05*crn[1], 0.07, Model.inf, adj=c(1,0.5),cex=0.7) cf <- summary(lr)$coef[,1:2] nf <- dimnames(cf)[[1]] text(0.95*crn[2]+0.05*crn[1], 0.10, paste("Variable\ \ \ \ \ \ est.\ \ \ \ \ (s.e.) \ \ \n", paste(rbind(nf, rep("\ \ \ \ ",length(nf)), formatC(cf[,1],digits=3,format="f"), rep("\ \ \ (",length(nf)), formatC(cf[,2],digits=3,format="f"), rep(")",length(nf)), rep("\n",length(nf))), collapse=""), collapse=""), adj=c(1,0), cex=0.7 ) } # Print the area under the curve if (AUC) { crn <- par()$usr text( 0.95*crn[2]+0.05*crn[1], 0.00, paste( "Area under the curve:", formatC( auc, format="f", digits=3, width=5 ) ), adj=c(1,0), cex=0.7 ) } # Predictive values at maximum if (PV) { if(!MX) { mx <- max(res[,1]+res[,2]) mhv <- which((res[,1]+res[,2])==mx) mxf <- fv[mhv] } ROC.tic(mxf, fv=fv, res=res, txt= paste( "Sens: ", formatC(100*res[mhv,1],digits=1,format="f"), "%\n", "Spec: ", formatC(100*res[mhv,2],digits=1,format="f"), "%\n", "PV+: ", formatC(100*res[mhv,3],digits=1,format="f"), "%\n", "PV-: ", formatC(100*res[mhv,4],digits=1,format="f"), "%", sep="" ), dist=0.1, cex=0.7, angle=-45 ) } } invisible( list( res=res, AUC=auc, lr=lr ) ) } Epi/R/ci.mat.R0000644000175100001440000000045012531361077012510 0ustar hornikusersci.mat <- function( alpha=0.05, df=Inf ) { ciM <- rbind( c(1,1,1), qt(1-alpha/2,df)*c(0,-1,1) ) colnames( ciM ) <- c("Estimate", paste( formatC( 100* alpha/2 , format="f", digits=1 ), "%", sep="" ), paste( formatC( 100*(1-alpha/2), format="f", digits=1 ), "%", sep="" ) ) ciM } Epi/R/effx.match.r0000644000175100001440000001531612531361077013427 0ustar hornikusers## Program to calculate effects for matched case-control studies ## Michael Hills ## Improved by BxC and MP ## Post Tartu 2007 version June 2007 effx.match<-function(response, exposure, match, strata=NULL, control=NULL, base=1, digits=3, alpha=0.05, data=NULL) { ## stores the variable names for response, etc. rname<-deparse(substitute(response)) ename<-deparse(substitute(exposure)) if (!missing(strata))sname<-deparse(substitute(strata)) ## The control argument is more complex, as it may be a name or ## list of names if(!missing(control)) { control.arg <- substitute(control) if (length(control.arg) > 1) { control.names <- sapply(control.arg, deparse)[-1] } else { control.names <- deparse(control.arg) } } ## If data argument is supplied, evaluate the arguments in that ## data frame. if (!missing(data)) { exposure <- eval(substitute(exposure), data) response <- eval(substitute(response), data) match <- eval(substitute(match),data) if (!missing(strata)) { strata <- eval(substitute(strata), data) } if (!missing(control)) control <- eval(substitute(control), data) } ## performs a few other checks if(rname==ename)stop("Same variable specified as response and exposure") if (!missing(strata)) { if(rname==sname)stop("Same variable specified as response and strata") if(sname==ename)stop("Same variable specified as strata and exposure") } if(!is.numeric(response))stop("Response must be numeric, not a factor") if(!missing(strata)&!is.factor(strata))stop("Stratifying variable must be a factor") tmp<-(response==0 | response==1) if(all(tmp,na.rm=TRUE)==FALSE) stop("Binary response must be coded 0,1 or NA") if(class(exposure)[1]=="ordered") { exposure<-factor(exposure, ordered=F) } ## Fix up the control argument as a named list if (!missing(control)) { if (is.list(control)) { names(control) <- control.names } else { control <- list(control) names(control) <- control.names } } ## prints out some information about variables cat("---------------------------------------------------------------------------","\n") cat("response : ", rname, "\n") cat("exposure : ", ename, "\n") if(!missing(control))cat("control vars : ",names(control),"\n") if(!missing(strata)) cat("stratified by : ",sname,"\n") cat("\n") if(is.factor(exposure)) { cat(ename,"is a factor with levels: ") cat(paste(levels(exposure),collapse=" / "),"\n") cat( "baseline is ", levels( exposure )[base] ,"\n") exposure <- Relevel( exposure, base ) } else { cat(ename,"is numeric","\n") } if(!missing(strata)) { cat(sname,"is a factor with levels: ") cat(paste(levels(strata),collapse="/"),"\n") } cat("effects are measured as odds ratios","\n") cat("---------------------------------------------------------------------------","\n") cat("\n") ## gets number of levels for exposure if a factor if(is.factor(exposure)) { nlevE<-length(levels(exposure)) } else { nlevE<-1 } ## labels the output if(is.factor(exposure)) { cat("effect of",ename,"on",rname,"\n") } else { cat("effect of an increase of 1 unit in",ename,"on",rname,"\n") } if(!missing(control)) { cat("controlled for",names(control),"\n\n") } if(!missing(strata)) { cat("stratified by",sname,"\n\n") } ## no stratifying variable if(missing(strata)) { if(missing(control)) { m<-clogit(response~exposure+strata(match)) cat("number of observations ",m$n,"\n\n") } else { m<-clogit(response~.+exposure+strata(match), subset=!is.na(exposure),data=control) cat("number of observations ",m$n,"\n\n") mm<-clogit(response~.+strata(match), subset=!is.na(exposure),data=control) } res<-ci.lin(m,subset=c("exposure"),Exp=TRUE,alpha=alpha)[,c(5,6,7)] res<-signif(res,digits) if(nlevE<3) { names(res)[1]<-c("Effect") } else { colnames(res)[1]<-c("Effect") if(is.factor(exposure)) { ln <- levels(exposure) rownames(res)[1:nlevE-1]<-paste(ln[2:nlevE],"vs",ln[1]) } } print(res) if(missing(control)) { chisq<-round(summary(m)$logtest[1],2) df<-round(summary(m)$logtest[2]) p<-round(summary(m)$logtest[3],3) cat("\n") cat("Test for no effects of exposure: ","\n") cat("chisq=",chisq, " df=",df, " p-value=",format.pval(p,digits=3),"\n") invisible(list(res,paste("Test for no effects of exposure on", df,"df:","p=",format.pval(p,digits=3)))) } else { aov <- anova(mm,m,test="Chisq") cat("\nTest for no effects of exposure on", aov[2,3],"df:", "p-value=",format.pval(aov[2,5],digits=3),"\n") invisible(list(res,paste("Test for no effects of exposure on", aov[2,3],"df:","p=",format.pval(aov[2,5],digits=3)))) } } ## stratifying variable if(!missing(strata)) { sn <- levels(strata) nlevS<-length(levels(strata)) if(missing(control)) { m<-clogit(response~strata/exposure+strata(match)) cat("number of observations ",m$n,"\n\n") mm<-clogit(response~strata+exposure+strata(match)) } else { m <-clogit(response~strata/exposure + . +strata(match), data=control) cat("number of observations ",m$n,"\n\n") mm <-clogit(response~strata+exposure + . +strata(match), data=control) } res<-ci.lin(m,Exp=TRUE,alpha=alpha,subset="strata")[c(-1:-(nlevS-1)),c(5,6,7)] res<-signif(res,digits) colnames(res)[1]<-c("Effect") if(is.factor(exposure)) { ln<-levels(exposure) newrownames<-NULL for(i in c(1:(nlevE-1))) { newrownames<-c(newrownames, paste("strata",sn[1:nlevS],"level",ln[i+1],"vs",ln[1])) } } else { newrownames<-paste("strata",sn[1:nlevS]) } rownames(res)<-newrownames aov<-anova(mm,m,test="Chisq") print( res ) cat("\nTest for effect modification on", aov[2,3],"df:","p-value=",format.pval(aov[2,5],digits=3),"\n") invisible(list(res,paste("Test for effect modification on", aov[2,3],"df:","p-value=",format.pval(aov[2,5],digits=3)))) } } Epi/R/apc.frame.R0000644000175100001440000000506712531361077013202 0ustar hornikusersapc.frame <- function( a.lab, cp.lab, r.lab, rr.lab = r.lab / rr.ref, rr.ref = r.lab[length(r.lab)/2], a.tic = a.lab, cp.tic = cp.lab, r.tic = r.lab, rr.tic = r.tic / rr.ref, tic.fac = 1.3, a.txt = "Age", cp.txt = "Calendar time", r.txt = "Rate per 100,000 person-years", rr.txt = "Rate ratio", ref.line = TRUE, gap = diff(range(c(a.lab,a.tic)))/10, col.grid = gray( 0.85 ), sides = c(1,2,4) ) { cp <- min( c(cp.tic,cp.lab) ) - max( c(a.lab,a.tic) ) - gap xl <- c(min( c(a.lab,a.tic) ), max( c(a.lab,a.tic) ) + gap + diff( range( c(cp.lab,cp.tic) ) ) ) yl <- range( c(r.lab,r.tic) ) rrtck <- outer( c(0.5,1,1.5,2:9), 10^(-5:5), "*" ) # Empty plot frame plot( NA, xlab="", xlim=xl, xaxt="n", xaxs="i", ylab="", ylim=yl, yaxt="n", yaxs="i", log="y" ) # Grid lines abline( h=c(r.tic,outer( c(0.5,1,1.5,2:9), 10^(-5:5), "*" )), v=c(a.tic,cp.tic - cp), col=col.grid ) # Reference line for the RR=1 if ( ref.line ) segments( min(c(cp.lab,cp.tic))-cp, rr.ref, max(c(cp.lab,cp.tic))-cp, rr.ref ) # Close it nicely off: box() # Axis construction (tickmarks, labels and annotation) if ( 1 %in% sides ) { axis( side=1, at=a.lab ) axis( side=1, at=a.tic, labels=NA, tcl=par("tcl")/tic.fac ) axis( side=1, at=cp.lab - cp, labels=cp.lab ) axis( side=1, at=cp.tic - cp, labels=NA, tcl=par("tcl")/tic.fac ) axis( side=1, at=mean( a.lab ), labels=a.txt, line=1, tcl=0 ) axis( side=1, at=mean( cp.lab - cp ), labels=cp.txt, line=1, tcl=0 ) } if ( 2 %in% sides ) { axis( side=2, at=r.lab, labels=paste( r.lab ) ) axis( side=2, at=r.tic, labels=NA, tcl=par("tcl")/tic.fac ) mtext( side=2, r.txt, line=2.5, las=0 ) } if ( 3 %in% sides ) { axis( side=3, at=a.lab ) axis( side=3, at=a.tic, labels=NA, tcl=par("tcl")/tic.fac ) axis( side=3, at=cp.lab - cp, labels=cp.lab ) axis( side=3, at=cp.tic - cp, labels=NA, tcl=par("tcl")/tic.fac ) axis( side=3, at=mean( a.lab ), labels=a.txt, line=1, tcl=0 ) axis( side=3, at=mean( cp.lab - cp ), labels=cp.txt, line=1, tcl=0 ) } if ( 4 %in% sides ) { axis( side=4, at=c(rr.ref,rr.lab*rr.ref), labels=paste( c(1,rr.lab) ) ) axis( side=4, at=c(rr.ref,rr.tic*rr.ref), labels=NA, tcl=par("tcl")/tic.fac ) mtext( side=4, rr.txt, line=2.5, las=0 ) } # Return the offset for the cohort/period and the RR-factor. options( apc.frame.par = c("cp.offset"=cp,"RR.fac"=rr.ref) ) invisible( c("cp.offset"=cp,"RR.fac"=rr.ref) ) } Epi/R/Ns.r0000644000175100001440000001314013075675121011757 0ustar hornikusers# ------------------------------------------------------------- # extension of ns() from splines, to allow for clamping. ns.ld <- function(x, df = NULL, knots = NULL, intercept = FALSE, Boundary.knots = range(x), fixsl=c(FALSE,FALSE) ) { nx <- names(x) x <- as.vector(x) nax <- is.na(x) if(nas <- any(nax)) x <- x[!nax] if(!missing(Boundary.knots)) { Boundary.knots <- sort(Boundary.knots) outside <- (ol <- x < Boundary.knots[1L]) | (or <- x > Boundary.knots[2L]) } else outside <- FALSE if(!missing(df) && missing(knots)) { ## df = number(interior knots) + 1 + intercept nIknots <- df - 1 - intercept if(nIknots < 0) { nIknots <- 0 warning("'df' was too small; have used ", 1 + intercept) } knots <- if(nIknots > 0) { knots <- seq.int(0, 1, length.out = nIknots + 2L)[-c(1L, nIknots + 2L)] stats::quantile(x[!outside], knots) } ## else NULL } else nIknots <- length(knots) Aknots <- sort(c(rep(Boundary.knots, 4L), knots)) if(any(outside)) { basis <- array(0, c(length(x), nIknots + 4L)) if(any(ol)) { k.pivot <- Boundary.knots[1L] xl <- cbind(1, x[ol] - k.pivot) tt <- splines::spline.des(Aknots, rep(k.pivot, 2L), 4, c(0, 1))$design basis[ol, ] <- xl %*% tt } if(any(or)) { k.pivot <- Boundary.knots[2L] xr <- cbind(1, x[or] - k.pivot) tt <- splines::spline.des(Aknots, rep(k.pivot, 2L), 4, c(0, 1))$design basis[or, ] <- xr %*% tt } if(any(inside <- !outside)) basis[inside, ] <- splines::spline.des(Aknots, x[inside], 4)$design } else basis <- splines::spline.des(Aknots, x, 4)$design # Fix the clamping if( !is.logical(fixsl) ) warning( "fixsl elements must be of mode logical" ) # Only the 4th parameter affected, should be either 1 or 2 in the two positions const <- splines::spline.des( Aknots, Boundary.knots, 4, c(2-fixsl[1],2-fixsl[2]) )$design if(!intercept) { const <- const[, -1 , drop = FALSE] basis <- basis[, -1 , drop = FALSE] } qr.const <- qr(t(const)) basis <- as.matrix((t(qr.qty(qr.const, t(basis))))[, - (1L:2L), drop = FALSE]) n.col <- ncol(basis) if(nas) { nmat <- matrix(NA, length(nax), n.col) nmat[!nax, ] <- basis basis <- nmat } dimnames(basis) <- list(nx, 1L:n.col) a <- list(degree = 3, knots = if(is.null(knots)) numeric(0) else knots, Boundary.knots = Boundary.knots, intercept = intercept) attributes(basis) <- c(attributes(basis), a) class(basis) <- c("cns", "basis", "matrix") basis } #------------------------------------------------------------------------------- # An extension of ns that automatically takes the smallest and largest knots # as boundary knots without further ado, but also allows centering # around a reference and detrending by means of projection, as well as # clamping. Ns <- function( x, ref = NULL, df = NULL, knots = NULL, intercept = FALSE, Boundary.knots = NULL, fixsl = c(FALSE,FALSE), detrend = FALSE ) { ## Check sensibility of arguments if( !is.null(ref) ) { if( !is.vector(ref) ) stop( "Argument 'ref' must be a scalar, but it is a ", class(ref), "." ) if( is.vector(ref) & length(ref)>1 ) stop( "Argument 'ref' must be a scalar, but has length ", length(ref), "." ) if( intercept ) { warning( "ref= specified, hence intercept=TRUE is ignored") intercept <- FALSE } } ## Detrending required? if( any(detrend>0) ) { # covers both logical and vector if( any(detrend<0) ) stop( "Some elements of weight are <0, e.g. no", (ww <- which(detrend<0))[1:min(5,length(ww))], "." ) if( !(length(detrend) %in% c(1,length(x))) ) { warning( "Weights in inner product diagonal matrix set to 1") weight <- rep(1,length(x)) } else weight <- if( is.numeric(detrend) ) detrend else rep(1,length(x)) detrend <- TRUE } if( detrend & intercept ) { warning( "detrend= specified, hence intercept=TRUE is ignored") intercept <- FALSE } if( detrend & any(!is.na(fixsl)) ) { warning( "detrend= specified, hence fixsl argument is ignored") fixsl=c(FALSE,FALSE) } ## Here is the specification of the spline basis ## df= specified if( !is.null(df) ) MM <- ns.ld( x, df = df, intercept = (intercept & is.null(ref)), fixsl = fixsl ) else ## knots= specified { if( is.null( Boundary.knots ) ) { if( !is.null( knots ) ) { knots <- sort( unique( knots ) ) ok <- c(1,length(knots)) Boundary.knots <- knots[ok] knots <- knots[-ok] } } MM <- ns.ld( x, knots = knots, Boundary.knots = Boundary.knots, intercept = (intercept & is.null(ref)), fixsl = fixsl ) } ## Reference point specified ? if( !is.null(ref) ) { MM <- MM - ns.ld( rep(ref,length(x)), knots = attr(MM,"knots"), Boundary.knots = attr(MM,"Boundary.knots"), fixsl = fixsl ) } ## Detrending required ? if( detrend ) { DD <- detrend( MM, x, weight=weight ) ## NOTE: detrend does not preserve attributes for( aa in c("degree","knots","Boundary.knots","intercept","class") ) attr( DD, aa ) <- attr( MM, aa ) attr( DD, "detrend" ) <- TRUE attr( DD, "proj.wt" ) <- weight MM <- DD } return( MM ) } Epi/R/Termplot.R0000644000175100001440000000341412562641313013144 0ustar hornikusersTermplot <- function( obj, plot = TRUE, xlab = NULL, ylab = NULL, xeq = TRUE, yshr = 1.0, alpha = 0.05, terms = NULL, max.pt = NULL ) { # max.pt suppiled no.max <- missing( max.pt ) # Extract the curves to plot zz <- termplot( obj, se=TRUE, plot=FALSE, terms=terms ) nt <- length( zz ) for( i in 1:nt ) { # Thin the number of points in each returned term if( no.max ) max.pt <- nrow( zz[[i]] ) if( is.numeric(max.pt) & (nrow(zz[[i]]) > max.pt) ) zz[[i]] <- zz[[i]][round(seq(1,nrow(zz[[i]]),,max.pt)),] # Compute the estimate and the c.i. on log-scale zz[[i]] <- cbind( zz[[i]][,1], exp(as.matrix(zz[[i]][,2:3])%*%ci.mat(alpha=alpha)) ) } # Labels if( is.null(xlab) ) xlab <- names( zz ) if( is.null(ylab) ) ylab <- rep("",nt) ## Compute ranges of y and x xw <- sapply( zz, function(x) diff(range(x[,1 ])) ) yl <- sapply( zz, function(x) range(x[,2:4]) ) mr <- max( apply( yl, 2, function(x) exp(diff(log(x)))) ) yl <- apply( yl, 2, function(x) exp(mean(log(x))+c(-1,1)*log(mr)/2*yshr)) if( plot ) { ## Plot the effects side by side par( mfrow=c(1,nt), mar=c(3,3,1,1), mgp=c(3,1,0)/1.6 )#, bty="n", las=1 ) if( xeq ) ## Plot the terms so that x- and y-axes have the same extent { # Margins and total width in inches mw <- sum(par("mai")[c(2,4)]) tw <- par("pin")[1] # Widths of each plot, approx. at least pw <- (tw-nt*mw)*xw/sum(xw)+mw layout( rbind(1:nt), widths=pw ) } for( i in 1:nt ) matplot( zz[[i]][,1], zz[[i]][,2:4], xlab=xlab[i], xaxs="i", xlim=range(zz[[i]][,1]), ylab=ylab[i], yaxs="i", ylim=yl[,i], log="y", type="l", lty=1, lwd=c(5,2,2), col="black" ) } ## Return the extracted terms invisible( zz ) } Epi/R/foreign.R0000644000175100001440000000355712640756554013012 0ustar hornikusers# The msdata method msdata <- function (obj, ...) UseMethod("msdata") msdata.Lexis <- function( obj, time.scale = timeScales(obj)[1], ... ) { tr.mat <- tmat(obj) # Essentially a msdata object is a stacked Lexis object with different variable names tmp <- stack.Lexis( factorize.Lexis(obj) ) lv <- c( match(timeScales(obj),names(tmp)), grep("lex\\." ,names(tmp)) ) # The transitions that we refer to are extracted from lex.Tr: ss <- strsplit( as.character(tmp$lex.Tr), "->" ) # The resulting dataframe is created by renaming columns in the stacked Lexis object data.frame( id = tmp$lex.id, from = sapply( ss, FUN=function(x) x[1] ), to = sapply( ss, FUN=function(x) x[2] ), trans = as.integer( tmp$lex.Tr ), Tstart = tmp[,time.scale], Tstop = tmp[,time.scale] + tmp$lex.dur, time = tmp$lex.dur, status = as.integer( tmp$lex.Fail ), tmp[,-lv] ) } # The etm method etm <- function (obj, ...) UseMethod("etm") etm.data.frame <- function (obj, ...) { etm::etm( data=obj, ... ) } etm.Lexis <- function( obj, time.scale = timeScales(obj)[1], cens.name = "cens", s = 0, t = "last", covariance = TRUE, delta.na = TRUE, ... ) { dfr <- data.frame( id = obj$lex.id, from = as.character(obj$lex.Cst), to = as.character(obj$lex.Xst), entry = obj[,time.scale], exit = obj[,time.scale] + obj$lex.dur, stringsAsFactors = FALSE ) dfr$to <- with( dfr, ifelse( from==to, cens.name, to ) ) etm::etm( data = dfr, state.names = levels( obj$lex.Cst ), tra = tmat(obj,mode="logical"), cens.name = cens.name, s = s, t = t, covariance = covariance, delta.na = delta.na ) } Epi/R/contr.diff.R0000644000175100001440000000057512531361077013401 0ustar hornikuserscontr.diff <- function(n) { if (is.numeric(n) && length(n) == 1) levs <- 1:n else { levs <- n n <- length(n) } contr <- array(0, c(n, n), list(levs, levs)) contr[col(contr) == row(contr)] <- 1 contr[row(contr) - col(contr) == 1] <- -1 if (n < 2) stop(paste("Contrasts not defined for", n - 1, "degrees of freedom")) contr } Epi/R/ci.cum.R0000644000175100001440000000524112554144544012521 0ustar hornikusersci.cum <- function( obj, ctr.mat = NULL, subset = NULL, intl = 1, alpha = 0.05, Exp = TRUE, ci.Exp = FALSE, sample = FALSE ) { # First extract all the coefficients and the variance-covariance matrix cf <- COEF( obj ) vcv <- VCOV( obj ) # Check if the intervals matches ctr.mat if( length( intl ) == 1 ) intl <- rep( intl, nrow( ctr.mat ) ) if( length( intl ) != nrow( ctr.mat ) ) stop( "intl must match ctr.mat" ) # Workaround to expand the vcov matrix with 0s so that it matches # the coefficients vector in case of (extrinsic) aliasing. if( any( is.na( cf ) ) ) { vM <- matrix( 0, length( cf ), length( cf ) ) dimnames( vM ) <- list( names( cf ), names( cf ) ) vM[!is.na(cf),!is.na(cf)] <- vcv cf[is.na(cf)] <- 0 vcv <- vM } if( is.character( subset ) ) { sb <- numeric(0) for( i in 1:length( subset ) ) sb <- c(sb,grep( subset[i], names( cf ) )) subset <- sb # unique( sb ) } # If subset is not given, make it the entire set if( is.null( subset ) ) subset <- 1:length( cf ) # Exclude units where aliasing has produced NAs. # Not needed after replacement with 0s # subset <- subset[!is.na( cf[subset] )] cf <- cf[subset] vcv <- vcv[subset,subset] if( is.null( ctr.mat ) ) { ctr.mat <- diag( length( cf ) ) rownames( ctr.mat ) <- names( cf ) } if( dim( ctr.mat )[2] != length(cf) ) stop( paste("\n Dimension of ", deparse(substitute(ctr.mat)), ": ", paste(dim(ctr.mat), collapse = "x"), ", not compatible with no of parameters in ", deparse(substitute(obj)), ": ", length(cf), sep = "")) # Finally, here is the actual computation of the estimates ct <- ctr.mat %*% cf vc <- ctr.mat %*% vcv %*% t( ctr.mat ) # If a sample is requested replace the eatimate by a sample if( sample ) ct <- t( mvrnorm( sample, ct, vc ) ) # If Exp was requested, we take the exponential of the estimates # before we cumulate the sum if( Exp ) { ct <- exp( ct ) vc <- ( ct[,1] %*% t(ct[,1]) ) * vc } # Here is the cumulation matrix cum.mat <- 1 - upper.tri( diag(ct[,1]) ) # Multiply columns of the matrix with interval lengths cum.mat <- t( intl * t( cum.mat ) ) # This is then multiplied to the coefficients ct <- cum.mat %*% ct if( sample ) return( ct ) else { vc <- cum.mat %*% vc %*% t( cum.mat ) se <- sqrt( diag( vc ) ) if( !ci.Exp ) { cum <- cbind( ct, se ) %*% ci.mat( alpha=alpha ) return( cbind( cum, "StdErr"=se ) ) } else { cum <- exp( cbind( log(ct), se/ct ) %*% ci.mat( alpha=alpha ) ) return( cbind( cum, "Erf"=exp( qnorm(1-alpha/2)*se/as.vector(ct) ) ) ) } } } Epi/R/plotEst.R0000644000175100001440000000726312531361077013000 0ustar hornikusersget.ests <- function( ests, ... ) { # If a model object is supplied, extract the parameters and the # standard errors # if( inherits( ests, c("glm","coxph","clogistic","gnlm","survreg") ) ) ests <- ci.exp( ests, ... ) else if( inherits( ests, c("lm","gls","lme","nls","polr", "mer","MIresult","mipo") ) ) ests <- ci.lin( ests, ... )[,-(2:4)] ests } plotEst <- function( ests, y = dim(ests)[1]:1, txt = rownames(ests), txtpos = y, ylim = range(y)-c(0.5,0), xlab = "", xtic = nice( ests[!is.na(ests)], log=xlog ), xlim = range( xtic ), xlog = FALSE, pch = 16, cex = 1, lwd = 2, col = "black", col.txt = "black", font.txt = 1, col.lines = col, col.points = col, vref = NULL, grid = FALSE, col.grid = gray(0.9), restore.par = TRUE, ... ) { # Function to plot estimates from a model. # Assumes that ests is a p by 3 matrix with estimate, lo and hi as # columns OR a model object. # Extract the estimates if necessary # ests <- get.ests( ests, ... ) # Is it likley that we want a log-axis for the parameters? # mult <- inherits( ests, c("glm","coxph","gnlm") ) if( missing(xlog) ) xlog <- mult # Create an empty plot in order to access the dimension so that # sufficient place can be made for the text in the margin # plot.new() mx <- max( strwidth( txt, units="in" ) ) oldpar <- par( mai=par("mai") + c(0,mx,0,0) ) if( restore.par ) on.exit( par( oldpar ) ) # Set up the coordinate system witout advancing a frame # plot.window( xlim = xlim, ylim = ylim, log = ifelse( xlog, "x", "") ) # Draw a grid if requested # if( !is.logical( grid ) ) abline( v = grid, col = col.grid ) if( is.logical( grid ) & grid[1] ) abline( v = xtic, col = col.grid ) # Draw a vertical reference line # if( !missing( vref ) ) abline( v = vref ) # Draw the estimates with c.i. s # linesEst( ests, y, pch=pch, cex=cex, lwd=lwd, col.points=col.points, col.lines=col.lines ) # Finally the x-axis and the annotation of the estimates # axis( side=1, at=xtic ) mtext( side=1, xlab, line=par("mgp")[1], cex=par("cex")*par("cex.lab") ) axis( side=2, at=txtpos, labels=txt, las=1, lty=0, col.axis=col.txt ) invisible( oldpar ) } pointsEst <- linesEst <- function( ests, y = dim(ests)[1]:1, pch = 16, cex = 1, lwd = 2, col = "black", col.lines = col, col.points = col, ... ) { # Function to add estimates from a model to a drawing. # Assumes that ests is a p by 3 matrix with estimate, lo and hi as # columns. # Extract the estimates if necessary # ests <- get.ests( ests, ... ) # Cut the confidence interval lines to fit inside the plot # before drawing them. # xrng <- if( par("xlog") ) 10^par("usr")[1:2] else par("usr")[1:2] segments( pmax(ests[, 2],xrng[1]), y, pmin(ests[, 3], xrng[2]), y, lwd = lwd, col=col.lines ) # Then the point estimates on top of the lines. # points( ests[, 1], y, pch = pch, cex = cex, col=col.points ) invisible() } nice <- function( x, log = F, lpos = c(1,2,5), ... ) { # Function to produce nice labels also for log-axes. # if( log ) { fc <- floor( log10( min( x ) ) ):ceiling( log10( max( x ) ) ) tick <- as.vector( outer( lpos, 10^fc, "*" ) ) ft <- max( tick[tickmax(x)] ) tick <- tick[tick>=ft & tick<=lt] if( length( tick ) < 4 & missing( lpos ) ) tick <- nice( x, log=T, lpos=c(1:9) ) if( length( tick ) > 10 & missing( lpos ) ) tick <- nice( x, log=T, lpos=1 ) tick } else pretty( x, ... ) } Epi/R/crr.Lexis.r0000644000175100001440000000253012777350201013246 0ustar hornikuserscrr.Lexis <- function( obj, mod, quiet=FALSE, ... ) { # Model formula to be transmitted md <- mod # Outcome variable fc <- as.character( mod[2] ) # Censoring levels cn <- unique( as.character(obj$lex.Xst)[obj$lex.Xst==obj$lex.Cst] ) # The competing causes (the remaining levels) cc <- setdiff( levels(obj$lex.Xst), union(fc,cn) ) # No l.h.s. side of formula when deriving model matrix mod[2] <- NULL # Remember no intercept term cv <- model.matrix( mod, data=obj )[,-1] # Then do it M <- crr( ftime = obj$lex.dur, fstatus = obj$lex.Xst, failcode = fc, cencode = cn, cov1 = cv, ... ) # A table of the no. of transitions N <- with( obj, table( Relevel( lex.Xst, c(fc,cc,cn) ) ) ) names( N ) <- paste( rep( c("Event:"," comp:"," cens:"), c(length(fc),length(cc),length(cn)) ), names(N) ) # add model and table to the resulting object M <- c( M, list( model.Lexis = md, transitions = cbind(N) ) ) # remember the class attribute (lost by doing "c") class( M ) <- "crr" # print overview if desired if( !quiet ) cat( "crr analysis of event", paste('"',fc,'"',sep=''), "\n versus", paste('"',cc,'"',sep=''), "\n with", paste('"',cn,'"',sep=''), "as censoring.\n" ) M } Epi/R/float.R0000644000175100001440000000666612531361077012461 0ustar hornikusers"float" <- function(object, factor, iter.max = 50) { float.variance <- function(V, tol=1.0e-3, iter.max = 50) { ## Calculate floated variances for variance matrix V, which is ## assumed to represent a set of treatment contrasts m <- nrow(V) if (!is.matrix(V) || ncol(V) != m || m == 1) stop ("V must be a square matrix of size 2 x 2 or more") evals <- eigen(V, only.values=TRUE)$values if(any(evals < 0)) stop("V not positive definite") ## Starting values from Easton et al (1991) R <- V - diag(diag(V)) V00 <- sum(R)/(m * (m-1)) V10 <- apply(R, 1, sum)/(m-1) fv <- c(V00, V00 - 2 * V10 + diag(V)) for(iter in 1:iter.max) { w <- 1/fv S <- sum(w) w1 <- w[-1]/S ##Augment data matrix V10 <- as.vector(V %*% w1) V00 <- as.vector(1/S + t(w1) %*% V %*% w1) ##Calculate new estimates fv.old <- fv fv <- c(V00, V00 - 2 * V10 + diag(V)) ## Check convergence if(max(abs(fv.old - fv)/fv) < tol) break } if (iter == iter.max) warning("Floated variance estimates did not converge") Vmodel.inv <- S * (diag(w1) - w1 %*% t(w1)) evals <- 1/(eigen(V %*% Vmodel.inv, only.values=TRUE)$values) divergence <- sum(1/evals - 1 + log(evals))/2 return(list(variance=fv, error.limits=sqrt(range(evals)), divergence=divergence)) } if (is.null(object$xlevels)) { stop("No factors in model") } if (missing(factor)) { i <- 1 factor <- names(object$xlevels)[1] } else { i <- pmatch(factor, names(object$xlevels)) if (is.na(i)) { stop(paste("Factor",i,"not found in model")) } } xcontrasts <- object$contrasts[[i]] xlevels <- object$xlevels[[i]] xname <- names(object$xlevels)[i] nlevels <- length(xlevels) ## Extract the coefficients and variance matrix for a single factor ## from object if (nlevels <= 2) { stop ("Floated variances undefined for factors with less than 3 levels") } ## Get contrast matrix C <- if (is.matrix(xcontrasts)) { xcontrasts } else { get(xcontrasts, mode="function")(xlevels) } if (qr(C)$rank < nlevels - 1) { stop ("Impossible to reconstruct treatment contrasts") } ## Get coefficients and variance matrix if(is.null(cnames <- colnames(C))) cnames <- 1:(nlevels-1) contr.names <- paste(xname, cnames, sep="") coef <- coef(object)[contr.names] V <- vcov(object)[contr.names, contr.names] ## Convert to treatment contrast parameterization if (identical(xcontrasts, "contr.treatment")) { V.tc <- V coef.tc <- c(0, coef) } else { D.inv <- cbind(rep(-1,nlevels-1), diag(nlevels-1)) S <- D.inv %*% cbind(rep(1, nlevels), C) S <- S[,-1] ## coefficients coef.tc <- c(0, S %*% coef) ## If we find a baseline level (implicitly defined ## by having a row of zeros in the contrast matrix) ## then adjust the coefficients is.base <- apply(abs(C), 1, sum) == 0 if (any(is.base)) coef.tc <- coef.tc - coef.tc[is.base] ## variance matrix V.tc <- S %*% V %*% t(S) } names(coef.tc) <- xlevels float.out <- float.variance(V.tc, iter.max = iter.max) var <- float.out$var names(var) <- xlevels ans <- list(coef=coef.tc, var=var, limits=float.out$error.limits, factor=factor) class(ans) <- "floated" return(ans) } Epi/R/cutLexis.R0000644000175100001440000002535312531361077013146 0ustar hornikusers doCutLexis <- function(data, cut, timescale, new.scale=FALSE ) { ## new.scale is a character constant with the name of the new timescale ## Code each new interval using new variable lex.cut: ## 0 = unchanged interval (cut occurs after exit) ## 1 = first part of split interval ## 2 = second part of split interval (or cut occurs before interval) cut[is.na(cut)] <- Inf #If a cut time is missing, it never happens ## First intervals (before the cut) in.1 <- entry(data, timescale) ex.1 <- pmin(cut, exit(data, timescale)) ## Create Lexis object for first intervals lx.1 <- data lx.1$lex.dur <- ex.1 - in.1 lx.1$lex.cut <- ifelse(cut < exit(data, timescale), 1, 0) if( new.scale ) lx.1[,"lex.new.scale"] <- NA ## Second intervals (after the cut) in.2 <- pmax(cut, entry(data, timescale)) ex.2 <- exit(data, timescale) ## Create Lexis object for second intervals lx.2 <- data lx.2$lex.dur <- ex.2 - in.2 lx.2$lex.cut <- 2 if( new.scale ) lx.2[,"lex.new.scale"] <- in.2 - cut ## Update entry times lx.2[, timeScales(data)] <- exit(data) - lx.2$lex.dur return(rbind(lx.1, lx.2)) } setStatus.default <- function(data, new.state) { data$lex.Xst[data$lex.cut == 1] <- new.state[data$lex.cut == 1] data$lex.Cst[data$lex.cut == 2] <- new.state return(data) } setStatus.numeric <- function(data, new.state, precursor.states=NULL, progressive=TRUE) { if (!is.numeric(new.state)) { stop("If lex.Cst, lex.Xst are numeric, new.state must be numeric too") } data$lex.Xst[data$lex.cut == 1] <- new.state[data$lex.cut == 1] data$lex.Cst[data$lex.cut == 2] <- new.state exit.state <- data$lex.Xst[data$lex.cut == 2] is.precursor <- exit.state %in% precursor.states if (progressive) { is.precursor <- is.precursor | (exit.state < new.state) } data$lex.Xst[data$lex.cut == 2][is.precursor] <- new.state[is.precursor] return(data) } setStatus.factor <- function( data, new.state, precursor.states=NULL, progressive=TRUE) { if (!is.character(new.state)) { stop("new.state must be a character vector, but it is ",str(new.state)) } current.states <- levels(data$lex.Cst) new.states <- setdiff(new.state,current.states) new.states <- new.states[!is.na(new.states)] ## Modify factor levels if necessary if (length(new.states) > 0) { all.states <- c(current.states, sort(new.states)) new.order <- match( c(intersect(precursor.states,current.states), new.states, setdiff(current.states,precursor.states)), all.states ) levels(data$lex.Cst) <- all.states levels(data$lex.Xst) <- all.states } data$lex.Xst[data$lex.cut == 1] <- new.state[data$lex.cut == 1] data$lex.Cst[data$lex.cut == 2] <- new.state exit.state <- data$lex.Xst[data$lex.cut==2] is.precursor <- exit.state %in% precursor.states if (progressive) { if (is.ordered(data$lex.Xst)) { is.precursor <- is.precursor | (exit.state < new.state) } else { warning("progressive=TRUE argument ignored for unordered factor") } } data$lex.Xst[data$lex.cut==2][is.precursor] <- new.state[is.precursor] # Reorder factor levels sensibly if (!progressive & length(new.states)>0){ data$lex.Cst <- Relevel( data$lex.Cst, new.order ) data$lex.Xst <- Relevel( data$lex.Xst, new.order ) } return(data) } # Added by BxC match.cut <- function( data, cut ) { if( sum(!is.na(match(c("lex.id","cut","new.state"),names(cut))))<3 ) stop( "The dataframe supplied in the cut= argument must have columns", "'lex.id','cut','new.state', but the columns are:\n", names( cut ) ) else { if( length( unique( cut$lex.id ) ) < nrow( cut ) ) stop( "Values of 'lex.id' must be unique in the 'cut' dataframe" ) else zz <- merge( data[,"lex.id",drop=FALSE], cut, all.x=TRUE ) if( is.factor ( data$lex.Cst ) ) zz$new.state <- as.character(zz$new.state) if( is.numeric( data$lex.Cst ) ) zz$new.state <- as.numeric(zz$new.state) return( zz ) } } # End of addition / change cutLexis <- function(data, cut, timescale = 1, new.state = nlevels(data$lex.Cst)+1, new.scale = FALSE, split.states = FALSE, progressive = FALSE, precursor.states = NULL, count = FALSE) { if (!inherits(data, "Lexis")) stop("data must be a Lexis object") if( count ) return( countLexis( data=data, cut=cut, timescale=timescale ) ) if( inherits( cut, "data.frame" ) ){ zz <- match.cut( data, cut ) cut <- zz$cut new.state <- zz$new.state } else if (length(cut) == 1) { cut <- rep(cut, nrow(data)) } else if (length(cut) != nrow(data)) { stop("'cut' must have length 1 or nrow(data) (=", nrow(data), "),\n --- but it has length ", length(cut),".") } timescale <- check.time.scale(data, timescale) if (length(timescale) > 1) { stop("Multiple time scales") } ## If we want to add a new timescale, construct the name if( is.logical(new.scale) ) { if( new.scale ) scale.name <- paste( new.state[1], "dur", sep="." ) } else { scale.name <- new.scale new.scale <- TRUE } if (missing(new.state)) { new.state <- data$lex.Cst #Carry forward last state } else if (length(new.state) == 1) { new.state <- rep(new.state, nrow(data)) } else if (length(new.state) != nrow(data)) { stop("'new.state' must have length 1 or nrow(data) (=", nrow(data), "),\n --- but it has length ", length(new.state)) } if (progressive) { if (is.factor(data$lex.Cst) && !is.ordered(data$lex.Cst)) { stop("progressive=TRUE invalid for unordered factors") } if (any(data$lex.Xst < data$lex.Cst)) { stop("Lexis object is not progressive before splitting") } } lx <- doCutLexis( data, cut, timescale, new.scale=TRUE ) if (is.factor(data$lex.Cst)) { lx <- setStatus.factor(lx, new.state, precursor.states, progressive) } else if (is.numeric(data$lex.Cst)) { lx <- setStatus.numeric(lx, new.state, precursor.states, progressive) } else { lx <- setStatus.default(lx, new.state) } ## Remove redundant intervals lx <- lx[lx$lex.dur > 0,] ## Remove the lex.cut column lx <- lx[,-match("lex.cut",names(lx))] ## Update the states visited after the cut if( split.states & is.factor( data$lex.Cst ) ) { post.states <- setdiff( levels(data$lex.Cst), precursor.states ) tmp.Cst <- as.character( lx$lex.Cst ) tmp.Cst <- ifelse( !is.na(lx$lex.new.scale) & lx$lex.new.scale>0 & tmp.Cst %in% post.states, paste( tmp.Cst,"(",new.state,")",sep="" ), tmp.Cst ) tmp.Xst <- as.character( lx$lex.Xst ) tmp.Xst <- ifelse( !is.na(lx$lex.new.scale) & tmp.Xst %in% post.states, paste( tmp.Xst,"(",new.state,")",sep="" ), tmp.Xst ) all.levels <- unique( c(tmp.Cst,tmp.Xst) ) ## put all the new levels after the old ones xtr.levels <- setdiff( all.levels, levels(lx$lex.Cst) ) new.levels <- c( levels(lx$lex.Cst), xtr.levels ) lx$lex.Cst <- factor( tmp.Cst, levels=new.levels ) lx$lex.Xst <- factor( tmp.Xst, levels=new.levels ) } ## Include the new timescale if( new.scale ) { ## Rename the new timescale variable names(lx)[match("lex.new.scale",names(lx))] <- scale.name ## The timescales' position among columns - used to reorder columns tn <- c( match( attr( data, "time.scales" ), names( lx ) ), ncol(lx) ) oth <- setdiff( 1:ncol(lx), tn ) ## Reorder columns (lx will then lose attributes) and sort rows lx <- lx[order(lx$lex.id,lx[,timescale]),c(tn,oth)] ## Update the attributes new.br <- c( attr( data, "breaks" ), list(NULL) ) names( new.br )[length(new.br)] <- scale.name attr( lx, "time.scales" ) <- c( attr( data, "time.scales" ), scale.name ) attr( lx, "time.since" ) <- c( attr( data, "time.since" ), names(table(new.state)) ) attr( lx, "breaks" ) <- new.br attr( lx, "class" ) <- attr( data, "class" ) } else { # Remove the new timescale and sort rows lx <- lx[order(lx$lex.id,lx[,timescale]),-match("lex.new.scale",names(lx))] # and transfer all the other attributes attr( lx, "time.scales" ) <- attr( data, "time.scales" ) attr( lx, "time.since" ) <- attr( data, "time.since" ) attr( lx, "breaks" ) <- attr( data, "breaks" ) attr( lx, "class" ) <- attr( data, "class" ) } lx } countLexis <- function(data, cut, timescale = 1) { if (!inherits(data, "Lexis")) stop("data must be a Lexis object") if( inherits( cut, "data.frame" ) ){ zz <- match.cut( data, cut ) cut <- zz$cut new.state <- zz$new.state } else if (length(cut) == 1) { cut <- rep(cut, nrow(data)) } else if (length(cut) != nrow(data)) { stop("'cut' must have length 1 or nrow(data) (=", nrow(data), "),\n --- but it has length ", length(cut),".") } timescale <- check.time.scale(data, timescale) if (length(timescale) > 1) { stop("Multiple time scales not meaningful") } lx <- doCutLexis(data, cut, timescale) ## Update status variables lx$lex.Xst[lx$lex.cut == 1] <- lx$lex.Cst[lx$lex.cut == 1] + 1 lx$lex.Cst[lx$lex.cut == 2] <- lx$lex.Cst[lx$lex.cut == 2] + 1 lx$lex.Xst[lx$lex.cut == 2] <- lx$lex.Xst[lx$lex.cut == 2] + 1 ## Remove redundant intervals lx <- lx[lx$lex.dur > 0,] ## Remove the lex.cut column lx <- lx[,-match("lex.cut",names(lx))] ## Retain the attributes attr( lx, "breaks" ) <- attr( data, "breaks" ) attr( lx, "time.scales" ) <- attr( data, "time.scales" ) attr( lx, "class" ) <- attr( data, "class" ) return(lx[order(lx$lex.id,lx[,timescale]),]) } Epi/R/contr.2nd.R0000644000175100001440000000037112531361077013146 0ustar hornikuserscontr.2nd <- function( n ) { if( is.numeric(n) && length(n) == 1 ) levs<- 1:n else { levs <- n n <- length(n) } if( n<3 ) stop( "Contrasts not defined for ", n-2, " degrees of freedom" ) outer( 1:n, 3:n-1, FUN=function(x,y) pmax( x-y, 0 ) ) } Epi/R/boxes.MS.R0000644000175100001440000003671712733147647013023 0ustar hornikuserstbox <- function( txt, x, y, wd, ht, font=2, lwd=2, col.txt=par("fg"), col.border=par("fg"), col.bg="transparent" ) { rect( x-wd/2, y-ht/2, x+wd/2, y+ht/2, lwd=lwd, border=col.border, col=col.bg ) text( x, y, txt, font=font, col=col.txt ) invisible( c( x, y, wd, ht ) ) } dbox <- function( x, y, wd, ht=wd, font=2, lwd=2, cwd=5, col.cross=par("fg"), col.border=par("fg"), col.bg="transparent" ) { rect( x-wd/2, y-ht/2, x+wd/2, y+ht/2, lwd=lwd, border=col.border, col=col.bg ) ch <- ht*2/3 segments( c(x , x-ch/3), c(y+ch/2, y+ch/6), c(x , x+ch/3), c(y-ch/2, y+ch/6), lwd=cwd, col=col.cross ) invisible( c( x, y, wd, ht ) ) } fillarr <- function( x1, y1, x2, y2, gap=2, fr=0.8, angle=17, lwd=2, length=par("pin")[1]/30, ... ) { fr <- 1-gap/sqrt((x1-x2)^2+(y1-y2)^2) if( !missing(fr) ) if( fr > 1 ) fr <- fr/100 for( a in 1:angle ) arrows( x1 + (x2-x1)*(1-fr)/2, y1 + (y2-y1)*(1-fr)/2, x2 - (x2-x1)*(1-fr)/2, y2 - (y2-y1)*(1-fr)/2, angle=a, lwd=lwd, ... ) } std.vec <- function( a, b ) { l <- sqrt(a^2+b^2) if( l==0 ) return( c(0,0) ) else return( c(a/l,b/l) ) } boxarr <- function (b1, b2, offset = FALSE, pos = 0.45, ...) { d <- std.vec(b2[1] - b1[1], b2[2] - b1[2]) dd <- d * offset x1 <- b1[1] - dd[2] y1 <- b1[2] + dd[1] w1 <- b1[3] h1 <- b1[4] x2 <- b2[1] - dd[2] y2 <- b2[2] + dd[1] w2 <- b2[3] h2 <- b2[4] hx1 <- x1 + ifelse((y2-y1) != 0, (x2-x1) * ((h1/2)/abs(y2-y1)), sign(x2-x1) * w1/2) vx1 <- x1 + ifelse((x2-x1) != 0, (x2-x1) * ((w1/2)/abs(x2-x1)), 0) hx2 <- x2 + ifelse((y1-y2) != 0, (x1-x2) * ((h2/2)/abs(y1-y2)), sign(x1-x2) * w2/2) vx2 <- x2 + ifelse((x1-x2) != 0, (x1-x2) * ((w2/2)/abs(x1-x2)), 0) hy1 <- y1 + ifelse((y2-y1) != 0, (y2-y1) * ((h1/2)/abs(y2-y1)), 0) vy1 <- y1 + ifelse((x2-x1) != 0, (y2-y1) * ((w1/2)/abs(x2-x1)), sign(y2-y1) * h1/2) hy2 <- y2 + ifelse((y1-y2) != 0, (y1-y2) * ((h2/2)/abs(y1-y2)), 0) vy2 <- y2 + ifelse((x1-x2) != 0, (y1-y2) * ((w2/2)/abs(x1-x2)), sign(y1-y2) * h2/2) if( abs(vy1-y1) < h1/2 ) { bx1 <- vx1 by1 <- vy1 } else { bx1 <- hx1 by1 <- hy1 } if( abs(vy2-y2) < h2/2 ) { bx2 <- vx2 by2 <- vy2 } else { bx2 <- hx2 by2 <- hy2 } fillarr( bx1, by1, bx2, by2, ... ) invisible( list( x = bx1*(1-pos)+bx2*pos, y = by1*(1-pos)+by2*pos, d = d ) ) } wh.no <- function( tt, i, j ) { ## Utility to count the number of non-NA off diagonal elements with ## row0 ) arrowtext[a] <- formatC( D[i,j], format="f", digits=0, big.mark="," ) else arrowtext[a] <- "" if( show.R & R[i,j]>0 ) arrowtext[a] <- paste( if( !is.null(arrowtext[a]) ) paste( arrowtext[a], DR.sep[1], sep="" ), formatC( R[i,j], format="f", digits=digits.R, big.mark="," ), if( length(DR.sep) > 1 ) DR.sep[2], sep="" ) } else if( !is.null(txt.arr) ) arrowtext[a] <- txt.arr[a] if( !is.null(arrowtext[a]) ) text( arr$x-arr$d[2], arr$y+arr$d[1], arrowtext[a], adj=as.numeric(c(arr$d[2]>0,arr$d[1]<0)), font=font.arr[a], col=col.txt.arr[a] ) } } # Redraw the boxes with white background to remove any arrows for( i in subset ) tbox( pl.nam[i], xx[i], yy[i], wd[i], ht[i], lwd=lwd[i], col.bg=par("bg") ) # Then redraw the boxes again for( i in subset ) tbox( pl.nam[i], xx[i], yy[i], wd[i], ht[i], font=font[i], lwd=lwd[i], col.txt=col.txt[i], col.border=col.border[i], col.bg=col.bg[i] ) # Finally create an object with all information to re-draw the display MSboxes <- list( Boxes = data.frame( xx = xx, yy = yy, wd = wd, ht = ht, font = font, lwd = lwd, col.txt = col.txt, col.border = col.border, col.bg = col.bg, stringsAsFactors=FALSE ), State.names = pl.nam, Tmat = tt, Arrows = data.frame( lwd.arr = lwd.arr, col.arr = col.arr, pos.arr = pos.arr, col.txt.arr = col.txt.arr, font.arr = font.arr, offset.arr = offset.arr, stringsAsFactors=FALSE ), Arrowtext = arrowtext ) class( MSboxes ) <- "MS" invisible( MSboxes ) } boxes.MS <- function( obj, sub.st, sub.tr, cex=1.5, ... ) { if( !inherits(obj,"MS") ) stop( "You must supply an object of class 'MSboxes'" ) n.st <- nrow( obj$Boxes ) n.tr <- nrow( obj$Arrows ) if( missing(sub.st) ) sub.st <- 1:n.st if( missing(sub.tr) ) sub.tr <- 1:n.tr # First setting up the plot area, and restoring the plot parameters later opar <- par( mar=c(0,0,0,0), cex=cex ) on.exit( par(opar) ) plot( NA, bty="n", xlim=0:1*100, ylim=0:1*100, xaxt="n", yaxt="n", xlab="", ylab="" ) # Exercise the subsets by putting the relevant colors to "transparent" obj$Boxes[-sub.st,c("col.txt", "col.border", "col.bg")] <- "transparent" obj$Arrows[-sub.tr,c("col.arr", "col.txt.arr")] <- "transparent" # Then draw the boxes b <- list() for( i in 1:n.st ) b[[i]] <- with( obj$Boxes, tbox( obj$State.names[i], xx[i], yy[i], wd[i], ht[i], font=font[i], lwd=lwd[i], col.txt=col.txt[i], col.border=col.border[i], col.bg=col.bg[i] ) ) # and the arrows for( i in 1:n.st ) for( j in 1:n.st ) { if( !is.na(obj$Tmat[i,j]) & i!=j ) { a <- wh.no( obj$Tmat, i, j ) arr <- with( obj$Arrows, boxarr( b[[i]], b[[j]], offset=(!is.na(obj$Tmat[j,i]))*offset.arr, lwd=lwd.arr[a], col=col.arr[a], pos=pos.arr[a], ... ) ) with( obj$Arrows, text( arr$x-arr$d[2], arr$y+arr$d[1], obj$Arrowtext[a], adj=as.numeric(c(arr$d[2]>0,arr$d[1]<0)), font=font.arr[a], col=col.txt.arr[a] ) ) } } # Redraw the boxes with "bg" background to remove any arrows crossing for( i in sub.st ) with( obj$Boxes, tbox( obj$State.names[i], xx[i], yy[i], wd[i], ht[i], font=font[i], lwd=lwd[i], col.txt=par("bg"), col.border=par("bg"), col.bg=par("bg") ) ) # Then redraw the boxes again for( i in sub.st ) with( obj$Boxes, tbox( obj$State.names[i], xx[i], yy[i], wd[i], ht[i], font=font[i], lwd=lwd[i], col.txt=col.txt[i], col.border=col.border[i], col.bg=col.bg[i] ) ) # Done! invisible( NULL ) } Epi/R/erl.R0000644000175100001440000001532613074466156012136 0ustar hornikuserserl <- function( int, muW, muD, lam = NULL, age.in = 0, A = NULL, immune = is.null(lam), yll = TRUE, note = TRUE ) { # Computes expected residual life time for Well and Dis states # respectively in an illness-death model, optionally ignoring # the well->ill transition # Utility to integrate a survival function from the last point where # it is 1, assuming points are 1 apart trsum <- function( x ) { x[c(diff(x)==0,TRUE)] <- NA sum( ( x[-length(x)] + x[-1] ) / 2, na.rm=TRUE ) } # Check sensibility if( !immune & is.null(lam) ) stop( "'lam' is required when immune=FALSE\n" ) # Replace NAs with 0s if( !is.null(lam) ) { if( any(is.na(lam)) ){ lam[is.na(lam)] <- 0 ; warning("NAs in agument 'lam' set to 0") } } if( any(is.na(muD)) ){ muD[is.na(muD)] <- 0 ; warning("NAs in agument 'muD' set to 0") } if( any(is.na(muW)) ){ muW[is.na(muW)] <- 0 ; warning("NAs in agument 'muW' set to 0") } # Survival functions sD <- surv1( int=int, muD, age.in = age.in, A = A ) if( immune ) sW <- surv1( int=int, muW, age.in = age.in, A = A ) else sW <- surv2( int=int, muW, muD, lam, age.in = age.in, A = A ) # Area under the survival functions erl <- cbind( apply( sW[,-1], 2, trsum ), apply( sD[,-1], 2, trsum ) ) * int colnames( erl ) <- c("Well","Dis") rownames( erl ) <- colnames( sW )[-1] # Should we compute years of life lost? if( yll ) erl <- cbind( erl, YLL = erl[,"Well"] - erl[,"Dis"] ) # Cautionary note if( immune ) { attr( erl, "NOTE" ) <- "Calculations assume that Well persons cannot get Ill (quite silly!)." if( note ) cat("NOTE:", attr( erl, "NOTE" ), "\n" ) } return( erl ) } # yll is just a simple wrapper for erl, only selecting the YLL column. yll <- function( int, muW, muD, lam = NULL, age.in = 0, A = NULL, immune = is.null(lam), note = TRUE ) erl( int = int, muW = muW, muD = muD, lam = lam, age.in = age.in, A = A, immune = immune, yll = TRUE, note = note )[,"YLL"] surv1 <- function( int, mu, age.in=0, A=NULL ) { # Computes the survival function from age A till the end, assuming # that mu is a vector of mortalities in intervals of length int. # int and mu should be in compatible units that is T and T^-1 for # some unit T (months, years, ...) # impute 0s for NAs if( any(is.na(mu)) ){ mu[is.na(mu)] <- 0 ; warning("NAs in agument 'mu' set to 0") } # age-class boundaries age <- 0:length(mu)*int + age.in # cumulative rates and survival at the boundaries Mu <- c( 0, cumsum( mu )*int ) Sv <- exp( -Mu ) surv <- data.frame( age=age, surv=Sv ) # if a vector of conditioning ages A is given if( cond <- !is.null(A) ) { j <- 0 # actual conditioning ages cage <- NULL for( ia in A ) { j <- j+1 # Where is the age we condition on cA <- which( diff(age>ia)==1 ) surv <- cbind( surv, pmin( 1, surv$surv/(surv$surv[cA]) ) ) cage[j] <- surv$age[cA] } } names( surv )[-1] <- paste( "A", c( age.in, if( cond ) cage else NULL ), sep="" ) rownames( surv ) <- NULL return( surv ) } erl1 <- function( int, mu, age.in = 0 ) { # Computes expected residual life time at all ages age <- 0:length(mu)*int + age.in # Small utility: cumulative cumulative sum from the end of a vector musmuc <- function( x ) rev( cumsum( rev(x) ) ) # The survival function with a 0 at end, and the integral from the upper end surv <- surv1( int = int, mu = mu, age.in = age.in )[,2] cbind( age = age, surv = surv, erl = c( musmuc( ( surv[-1]-diff(surv)/2 ) ) / surv[-length(surv)], 0 ) * int ) } surv2 <- function( int, muW, muD, lam, age.in=0, A=NULL ) { # check the vectors if( length(muW) != length(muD) | length(muD) != length(lam) ) stop( "Vectors with rates must have same length:\n", "length(muW)=", length(muW), ", length(muD)=", length(muD), ", length(lam)=", length(lam) ) # Replace NAs with 0s if( !is.null(lam) ) { if( any(is.na(lam)) ){ lam[is.na(lam)] <- 0 ; warning("NAs in agument 'lam' set to 0") } } if( any(is.na(muD)) ){ muD[is.na(muD)] <- 0 ; warning("NAs in agument 'muD' set to 0") } if( any(is.na(muW)) ){ muW[is.na(muW)] <- 0 ; warning("NAs in agument 'muW' set to 0") } # First the workhorse that computes the survival function for a # person in Well assuming that the mortality rate from this state is # muW, disease incidence is in lam, and mortality in the diseased # state is muD, and that all refer to constant rates intervals of # length int starting from age.in, conditional on survival to A wsurv2 <- function( int, muW, muD, lam, age.in=0, A=0 ) { # age-class boundaries - note one longer than rate vectors as it # refers to boundaries of intervals not midpoints age <- 0:length(muW)*int + age.in # cumulative rates at the boundaries, given survival to A MuW <- cumsum( c( 0, muW ) * ( age > A ) ) * int MuD <- cumsum( c( 0, muD ) * ( age > A ) ) * int Lam <- cumsum( c( 0, lam ) * ( age > A ) ) * int # probability of being well pW <- exp( -( Lam + MuW ) ) # probability of diagnosis at s --- first term in the integral for # P(DM at a). Note that we explicitly add a 0 at the start so we get a # probability of 0 of transition at the first age point Dis <- c(0,lam) * ( age > A ) * exp( -(Lam+MuW) ) * int # for each age (age[ia]) we compute the integral over the range # [0,age] of the product of the probability of diagnosis and the # probability of surviving from diagnosis till age ia pDM <- Dis * 0 for( ia in 1:length(age) ) pDM[ia] <- sum( Dis[1:ia] * exp( -(MuD[ia]-MuD[1:ia]) ) ) # 1st term as function of s (1:ia) # 2nd term integral over range s:age # upper integration limit is age (ia) and the lower # limit is the intermediate age (at DM) (1:ia) # Finally, we add the probabilities of being in Well resp. DM to get # the overall survival: surv <- data.frame( age = age, surv = pDM + pW ) return( surv ) } # survival from start surv <- wsurv2( int, muW, muD, lam, age.in=age.in, A=0 ) # add columns for conditioning ages if( !is.null(A) ) { for( j in 1:length(A) ) { surv <- cbind( surv, wsurv2( int, muW, muD, lam, age.in=age.in, A=A[j] )[,2] ) } } Al <- A for( i in 1:length(A) ) Al[i] <- max( surv$age[surv$age <= A[i]] ) colnames( surv )[-1] <- paste( "A", c( age.in, Al ), sep="" ) # done! return( surv ) } Epi/R/ccwc.R0000644000175100001440000001236212531361077012261 0ustar hornikusersccwc <- function(entry=0, exit, fail, origin=0, controls=1, match=list(), include=list(), data=NULL, silent=FALSE) { # Check arguments entry <- eval(substitute(entry), data) exit <- eval(substitute(exit), data) fail <- eval(substitute(fail), data) origin <- eval(substitute(origin), data) n <- length(fail) if (length(exit)!=n) stop("All vectors must have same length") if (length(entry)!=1 && length(entry)!=n) stop("All vectors must have same length") if (length(origin)==1) { origin <- rep(origin, n) } else { if (length(origin)!=n) stop("All vectors must have same length") } # Transform times to correct scale t.entry <- as.numeric(entry - origin) t.exit <- as.numeric(exit - origin) # match= argument marg <- substitute(match) if (mode(marg)=="name") { match <- list(eval(marg, data)) names(match) <- as.character(marg) } else if (mode(marg)=="call" && marg[[1]]=="list") { mnames <- names(marg) nm <- length(marg) if (!is.null(mnames)) { if (nm>1) { for (i in 2:nm) { if (mode(marg[[i]])=="name") mnames[i] <- as.character(marg[[i]]) else stop("illegal argument (match)") } } else { for (i in 2:nm) { if (mode(marg[[i]])=="name") mnames[i] <- as.character(marg[[i]]) else stop("illegal argument (match)") } mnames[1] <= "" } } names(marg) <- mnames match <- eval(marg, data) } else { stop("illegal argument (match)") } m <- length(match) mnames <- names(match) if (m>0) { for (i in 1:m) { if (length(match[[i]])!=n) { stop("incorrect length for matching variable") } } } # include= argument iarg <- substitute(include) if (mode(iarg)=="name") { include <- list(eval(iarg, data)) names(include) <- as.character(iarg) } else if (mode(iarg)=="call" && iarg[[1]]=="list") { ni <- length(iarg) inames <- names(iarg) if (ni>1) { if (!is.null(inames)) { for (i in 2:ni) { if (mode(iarg[[i]])=="name") inames[i] <- as.character(iarg[[i]]) else stop("illegal argument (include)") } } else { for (i in 2:ni) { if (mode(iarg[[i]])=="name") inames[i] <- as.character(iarg[[i]]) else stop("illegal argument (include)") } inames[1] <= "" } } names(iarg) <- inames include <- eval(iarg, data) } else { stop("illegal argument (include)") } ni <- length(include) inames <- names(include) if (ni>0) { for (i in 1:ni) { if (length(include[[i]])!=n) { stop("incorrect length for included variable") } } } # create group codes using matching variables grp <- rep(1,n) pd <- 1 if (m>0) { for (im in 1:m) { v <- match[[im]] if (length(v)!=n) stop("All vectors must have same length") if (!is.factor(v)) v <- factor(v) grp <- grp + pd*(as.numeric(v) - 1) pd <- pd*length(levels(v)) } } # Create vectors long enough to hold results nn <- (1+controls)*sum(fail!=0) pr <- numeric(nn) sr <- numeric(nn) tr <- vector("numeric", nn) fr <- numeric(nn) nn <- 0 # Sample each group if (!silent) { cat("\nSampling risk sets: ") } set <- 0 nomatch <- 0 incomplete <- 0 ties <- FALSE fg <- unique(grp[fail!=0]) for (g in fg) { # Failure times ft <- unique( t.exit[(grp==g) & (fail!=0)] ) # Create case-control sets for (tf in ft) { if (!silent) { cat(".") } set <- set+1 case <- (grp==g) & (t.exit==tf) & (fail!=0) ncase <- sum(case) if (ncase>0) ties <- TRUE noncase <- (grp==g) & (t.entry<=tf) & (t.exit>=tf) & !case ncont <- controls*ncase if (ncont>sum(noncase)) { ncont <- sum(noncase) if (ncont>0) incomplete <- incomplete + 1 } if (ncont>0) { newnn <- nn+ncase+ncont sr[(nn+1):newnn] <- set tr[(nn+1):newnn] <- tf fr[(nn+1):(nn+ncase)] <- 1 fr[(nn+ncase+1):newnn] <- 0 pr[(nn+1):(nn+ncase)] <- (1:n)[case] pr[(nn+ncase+1):(newnn)] <- sample((1:n)[noncase], size=ncont) nn <- newnn } else { nomatch <- nomatch + ncase } } } if (!silent) { cat("\n") } res <- vector("list", 4+m+ni) if (nn>0) { res[[1]] <- sr[1:nn] res[[2]] <- map <- pr[1:nn] res[[3]] <- tr[1:nn] + origin[map] res[[4]] <- fr[1:nn] } if (m>0) { for (i in 1:m) { res[[4+i]] <- match[[i]][map] } } if (ni>0) { for (i in 1:ni) { res[[4+m+i]] <- include[[i]][map] } } names(res) <- c("Set", "Map", "Time", "Fail", mnames, inames) if (incomplete>0) warning(paste(incomplete, "case-control sets are incomplete")) if (nomatch>0) warning(paste(nomatch, "cases could not be matched")) if (ties) warning("there were tied failure times") data.frame(res) } Epi/R/summary.Lexis.r0000644000175100001440000000661412774223734014173 0ustar hornikuserssummary.Lexis <- function( object, simplify=TRUE, scale=1, by=NULL, Rates=FALSE, timeScales=FALSE, ... ) { # If we have a by argument find out what to do if (!is.null(by)) { if (is.character(by)) { if (!all(by %in% names(object))) stop("Wrong 'by' argument: '", paste(by,collapse="','"), "' - must be name(s) of variable(s) in the Lexis object") else res <- lapply(split(object, object[, by]), summary.Lexis, by = NULL, simplify = simplify, scale = scale, Rates = Rates, timeScales=timeScales, ...) } else { if (length(by) != nrow(object)) stop("Wrong length of 'by' argument:", length(by), "must be same length as rows of the Lexis object:", nrow(object) ) else res <- lapply(split(object, by), summary.Lexis, by = NULL, simplify = simplify, scale = scale, Rates = Rates, timeScales=timeScales, ...) } # to avoid printing the time scale information repeatedly for( i in 1:(length(res)-1) ) res[[i]]$timeScales <- NULL return( res ) } # Table(s) of all transitions (no. records) tr <- trans <- with( object, table(lex.Cst,lex.Xst) ) # Remove diagonal, i.e. records with no transition for( i in intersect(rownames(trans),colnames(trans)) ) tr[i,i] <- 0 # Margins added trans <- addmargins(trans) tr <- addmargins(tr) # Sum omitting the diagonal trm <- tr[,ncol(tr)] # Compute person-years in each Cst-state pyrs <- with( object, addmargins( tapply( lex.dur,lex.Cst,sum,na.rm=TRUE), FUN=function(x) sum(x,na.rm=TRUE) ) )/scale pers <- with( object, c( tapply( lex.id, lex.Cst, function(x) length(unique(x)) ), length(unique(lex.id)) ) ) # Amend the table of records with column of events and person-years trans <- cbind( trans, trm, pyrs, pers ) # Annotate the table nicely colnames( trans )[ncol(trans)-2:0] <- c(" Events:","Risk time:"," Persons:" ) colnames( trans )[ncol(tr)] <- " Records:" names( dimnames( trans ) ) <- c("From","\nTransitions:\n To") # Make the rates and annotate the table nicely rates <- sweep( tr, 1, pyrs, "/" ) colnames( rates )[ncol(rates)] <- "Total" names( dimnames( rates ) ) <- c("From", paste("\nRates", if( scale != 1 ) paste(" (per ",scale,")",sep=""), ":\n To", sep="") ) if( simplify ) { trans <- trans[!is.na(pyrs),] rates <- rates[!is.na(pyrs),] } if( nrow(trans)==2 ) trans <- trans[1,,drop = FALSE] res <- list( Transitions = trans, Rates = rates[-nrow(rates),,drop=FALSE], timeScales = data.frame( "time scale" = attr( object, "time.scales" ), "time since" = attr( object, "time.since" ) ) ) if( !timeScales ) res <- res[-3] if( !Rates ) res <- res[-2] class( res ) <- "summary.Lexis" res } print.summary.Lexis <- function( x, ..., digits=2 ) { print( round( x$Transitions, digits ) ) if( "Rates" %in% names(x) ) print( round( x$Rates , digits ) ) # if( "timeScales" %in% names(x) ) if( !is.null(x$timeScales) ) { cat("\nTimescales:\n") print( x$timeScales ) } } Epi/R/addCov.Lexis.R0000644000175100001440000000743413127430406013624 0ustar hornikusers# The addCov method addCov <- function (x, ...) UseMethod("addCov") addCov.default <- addCov.Lexis <- function( Lx, clin, timescale = 1, exnam, tfc = "tfc", addScales = FALSE ) { # Function to add clinically measured covariates to a Lexis object # The point is to cut the Lexis diagram at the examination dates # and subsequently add the clinical records # ...but first the usual cheking of paraphernalia if( !inherits(Lx ,"Lexis") ) stop( "Lx must be a Lexis object.\n" ) if( inherits(clin,"Lexis") ) stop( "clin cannot be a Lexis object.\n" ) # Is the timescale argument a timescale in Lx and is it a variable in clin? ts <- if( is.numeric(timescale) ) timeScales( Lx )[timescale] else timescale if( !( ts %in% timeScales(Lx) ) ) stop( "timescale argument (", ts, ") must be one of timescales in in the Lexis object ", deparse(substitute(Lx)),":", timeScales(Lx), ".\n" ) clin.nam <- deparse(substitute(clin)) if( !( ts %in% names(clin) & "lex.id" %in% names(clin) ) ) stop( "'lex.id' and timescale '", ts, "' must be a variables in the clin object ", clin.nam, "\n" ) # variables to merge by mvar <- c( "lex.id", ts ) # order clin to get the possible construction of examination names ok clin <- clin[order(clin$lex.id,clin[,ts]),] # check that examination dates are unique within persons if( any( dd <- duplicated(clin[,c("lex.id",ts)]) ) ) { warning( "Examination dates must be unique within persons\n", sum(dd), " records with duplicate times from clin object ", clin.nam, " excluded.") clin <- clin[!dd,] } # the variable holding the name of the examination if( missing(exnam) ) exnam <- "exnam" # and if it is not there, construct it if( !(exnam %in% names(clin)) ) clin[,exnam] <- paste( "ex", ave( clin$lex.id, clin$lex.id, FUN = function(x) cumsum(x/x) ), sep="." ) # Add copy of the time of examination to be carried forward clin[,tfc] <- clin[,ts] # Clinical variables to be merged in --- note we take examination date # and name as a cinical variable too cvar <- setdiff( names(clin), mvar ) # A data frame of cutting times cfr <- data.frame( lex.id = clin$lex.id, cut = clin[,ts], new.state = clin[,exnam] ) # Now cut Lx --- this is really inefficient mc <- Lx for( st in levels(cfr$new.state) ) mc <- cutLexis( mc, cut = cfr[cfr$new.state==st,], timescale = ts, precursor.states = NULL ) # Merge in the old states mx <- Lx[,mvar] mx$org.Cst <- Lx$lex.Cst mx$org.Xst <- Lx$lex.Xst mx <- merge( mx, mc, by = mvar, all.y = TRUE, sort = TRUE ) # Complete the state variables ( wh <- which(is.na(mx$org.Cst)) ) mx$org.Cst[wh] <- na.locf( mx$org.Cst, nx.rm=FALSE )[wh] mx$org.Xst[wh] <- na.locf( mx$org.Xst, nx.rm=FALSE )[wh] # but - oops - the earlier lex.Xst should be as lex.Cst mx$org.Xst[wh-1] <- mx$org.Cst[wh-1] # overwrite the useless ones and get rid of the intermediate mx$lex.Cst <- mx$org.Cst mx$lex.Xst <- mx$org.Xst wh.rm <- match( c("org.Cst","org.Xst"), names(mx) ) mx <- mx[,-wh.rm] # Merge in the clinical variables mx <- merge( mx, clin, by=mvar, all.x=TRUE, sort=TRUE ) # And carry them forward within each lex.id # locf within each person (should be easier in data.table) locf.df <- function( df ) as.data.frame( lapply( df, na.locf, na.rm=FALSE ) ) # ave does not like character variables so we convert to factors wh <- which( sapply( mx[,cvar], is.character ) ) for( j in wh ) mx[,cvar[j]] <- factor( mx[,cvar[j]] ) # then we can carry forward mx[,cvar] <- ave( mx[,cvar], mx$lex.id, FUN=locf.df ) # Finally update the time from clinical measurement mx[,tfc] <- mx[,ts] - mx[,tfc] # Done! mx } Epi/R/gen.exp.R0000644000175100001440000001372412531361077012711 0ustar hornikusers# Acronyms: # dop: date of purchase # dpt: dose per time # amt: amount # dur: duration use.amt.dpt <- function( purchase, push.max = Inf, breaks, lags = NULL, lag.dec = 1 ) { do.call( "rbind", lapply( split( purchase, purchase$id ), function(set) { np <- nrow(set) if( np==1 ) return( NULL ) set <- set[order(set$dop),] # Compute length of exposure periods drug.dur <- set$amt / set$dpt # Put the exposed period head to foot new.start <- min( set$dop ) + c(0,cumsum(drug.dur[-np])) # Move them out so that the start of a period is never earlier than # the dop exp.start <- new.start + cummax( pmax(set$dop-new.start,0) ) # Compute the pushes push.one <- exp.start - set$dop # Revise them to the maximally acceptable push.adj <- pmin( push.one, push.max ) # Revise the starting dates of exposure exp.start <- exp.start - push.one + push.adj # Revise the durations to be at most equal to differences between the # revised starting dates drug.dur <- pmin( drug.dur, c(diff(exp.start),Inf) ) # Compute the end of the intervals exp.end <- exp.start + drug.dur # Intervals in the middle not covered by the drug exposures - note # also that we make a record for the last follow-date followed.by.gap <- c( exp.start[-1]-exp.end[-length(exp.end)] > 0, TRUE ) # To facilitate dfR <- rbind( data.frame( id = set$id[1], dof = exp.start, dpt = set$dpt ), data.frame( id = set$id[1], dof = exp.end[followed.by.gap], dpt = 0 ) ) dfR <- dfR[order(dfR$dof),] # We now compute the cumulative dose at the end of the interval using # interval length and dpt: dfR$cum.amt <- with( dfR, cumsum( c(0, diff(dof)*dpt[-length(dpt)]) ) ) return( dfR ) } ) ) } use.only.amt <- function( purchase, pred.win = Inf, breaks, lags = NULL, lag.dec = 1 ) { # Compute the cumulative dose at all purcase dates and at the last # (unknown) future expiry date, computed based on previous # consumption. The resulting data frame has one more line per person # than no. of purchases. do.call( "rbind", lapply( split( purchase, purchase$id ), function(set) { np <- nrow(set) if( np==1 ) return( NULL ) set <- set[order(set$dop),] # The points to include in the calculation: # All dates after pred.win before last purchase, # but at least the last two purchase dates, wp <- ( set$dop > pmin( max(set$dop)-pred.win, sort(set$dop,decreasing=TRUE)[2] ) ) # Cumulative amount consumed at each dop cum.amt <- cumsum(c(0,set$amt)) # Average slope to use to project the duration last purchase avg.slp <- diff(range(cum.amt[c(wp,FALSE)]))/ diff(range(set$dop[wp])) # Purchase dates and the date of last consumption dof <- c( set$dop, set$dop[np]+set$amt[np]/avg.slp ) return( data.frame( id = set$id[1], dof = dof, cum.amt = cum.amt ) ) } ) ) } gen.exp <- function( purchase, id="id", dop="dop", amt="amt", dpt="dpt", fu, doe="doe", dox="dox", breaks, use.dpt = ( dpt %in% names(purchase) ), lags = NULL, push.max = Inf, pred.win = Inf, lag.dec = 1 ) { # Make sure that the data fames have the right column names wh <- match( c(id,dop,amt), names(purchase) ) if( any( is.na(wh) ) ) stop("Wrong column names for the purchase data frame") names( purchase )[wh] <- c("id","dop","amt") wh <- match( c(id,doe,dox), names(fu) ) if( any( is.na(wh) ) ) stop("Wrong column names for the follow-up data frame") names( fu )[wh] <- c("id","doe","dox") if( use.dpt ) { # This is to allow dpt to be entered as numerical scalar common for all if( is.numeric(dpt) ) { if( length(dpt) > 1 ) stop( "If dpt is numeric it must have length 1" ) purchase$dpt <- dpt } else names( purchase )[match(c(dpt),names(purchase))] <- "dpt" tmp.dfr <- use.amt.dpt( purchase, lags = lags, push.max = push.max, lag.dec = lag.dec ) } else tmp.dfr <- use.only.amt( purchase, lags = lags, pred.win = pred.win, lag.dec = lag.dec ) # Merge in the follow-up period for the persons tmp.dfr <- merge( tmp.dfr, fu, all=T ) # Interpolate to find the cumulative doses at the dates in breaks do.call( "rbind", lapply( split( tmp.dfr, tmp.dfr$id ), function(set) { # All values of these are identical within each set (=person) doe <- set$doe[1] dox <- set$dox[1] # The first and last date of exposure according to the assumption doi <- min(set$dof) doc <- max(set$dof) # Get the breakpoints and the entry end exit dates breaks <- sort( unique( c(breaks,doe,dox) ) ) xval <- breaks[breaks>=doe & breaks<=dox] dfr <- data.frame( id = set$id[1], dof = xval ) dfr$tfi <- pmax(0,xval-doi) dfr$tfc <- pmax(0,xval-doc) dfr$cdos <- approx( set$dof, set$cum.amt, xout=xval, rule=2 )$y for( lg in lags ) dfr[,paste( "ldos", formatC(lg,format="f",digits=lag.dec), sep="." )] <- approx( set$dof, set$cum.amt, xout=xval-lg, rule=2 )$y dfr } ) ) } Epi/R/Icens.R0000644000175100001440000000620012531361077012375 0ustar hornikusersIcens <- function(first.well, last.well, first.ill, formula, model.type=c("MRR","AER"), breaks, boot=FALSE, alpha=0.05, keep.sample=FALSE, data) { ## Create follow-up matrix containing three event times fu.expression <- substitute(cbind(first.well, last.well, first.ill)) fu <- if (missing(data)) { eval(fu.expression) } else { eval(fu.expression, data) } ## Check consistency of arguments missing.f1 <- is.na(fu[,1]) missing.f2 <- is.na(fu[,2]) if (any(missing.f1 & missing.f2)) { stop("You must supply at least one of \"first.well\" and \"last.well\"") } if (any(fu[,1] > fu[,2], na.rm=TRUE) | any(fu[,2] > fu[,3], na.rm=TRUE)) { stop("Some units do not meet: first.well < last.well < first.ill" ) } ## Fill in any gaps fu[,1][missing.f1] <- fu[,2][missing.f1] fu[,2][missing.f2] <- fu[,1][missing.f2] ## Recensor cases that fall after the last break point is.censored <- fu[,3] > max(breaks) is.censored[is.na(is.censored)] <- FALSE fu[is.censored,3] <- NA exp.dat <- expand.data(fu, formula, breaks, data) model.type <- match.arg(model.type) if (missing(formula)) { fit.out <- with(exp.dat, fit.baseline(y, rates.frame)) lambda <- coef(fit.out) } else { fit.out <- switch(model.type, "MRR"=with(exp.dat, fit.mult(y, rates.frame, cov.frame)), "AER"=with(exp.dat, fit.add(y, rates.frame, cov.frame))) lambda <- coef(fit.out$rates) } beta <- if (is.null(fit.out$cov)) numeric(0) else coef(fit.out$cov) params <- c(lambda,beta) if (boot) { nboot <- ifelse (is.numeric(boot), boot, 100) boot.coef <- matrix(NA, nrow=nboot, ncol=length(lambda) + length(beta)) colnames(boot.coef) <- names(params) for (i in 1:nboot) { subsample <- sample(nrow(fu), replace=TRUE) exp.dat <- expand.data(fu[subsample,], formula, breaks, data[subsample,]) if (missing(formula)) { sim.out <- with(exp.dat, fit.baseline(y, rates.frame, params)) boot.coef[i,] <- coef(sim.out) } else { sim.out <- switch(model.type, "MRR"=with(exp.dat, fit.mult(y, rates.frame, cov.frame, params)), "AER"=with(exp.dat, fit.add(y, rates.frame, cov.frame, params))) boot.coef[i,] <- switch(model.type, "MRR"=c(coef(sim.out[[1]]), coef(sim.out[[2]])), "AER"=coef(sim.out[[1]])) } } ci.quantiles=c(0.5, alpha/2, 1 - alpha/2) boot.ci <- t(apply(boot.coef,2,quantile,ci.quantiles)) lower.ci.lab <- paste("lower ", formatC(100 * alpha/2, format="f", digits=1),"%", sep="") upper.ci.lab <- paste("upper ", formatC(100 * (1-alpha/2), format="f", digits=1),"%", sep="") colnames(boot.ci) <- c("median", lower.ci.lab, upper.ci.lab) fit.out$boot.ci <- boot.ci if (keep.sample) { fit.out$sample <- boot.coef } } class( fit.out ) <- "Icens" attr( fit.out, "model" ) <- model.type return( fit.out ) } Epi/R/pctab.R0000644000175100001440000000070212531361077012426 0ustar hornikuserspctab <- function( TT, margin=length( dim( TT ) ), dec=1 ) { nd <- length( dim( TT ) ) sw <- (1:nd)[-margin[1]] rt <- sweep( addmargins( TT, margin, list( list( All=sum, N=function( x ) sum( x )^2/100 ) ) ), sw, apply( TT, sw, sum )/100, "/" ) if( dec ) print( round( rt, dec ) ) invisible( rt ) } Epi/R/simLexis.R0000644000175100001440000002707512641733716013153 0ustar hornikusers# First the utility functions ###################################################################### lint <- function( ci, tt, u ) { # Makes a linear interpolation, but does not crash if all ci values are # identical, but requires that both ci and tt are non-decreasing. # ci plays the role of cumulative intensity, tt of time if( any( diff(ci)<0 ) | any( diff(tt)<0 ) ) stop("Non-icreasing arguments") c.u <- min( c( ci[ci>u], max(ci) ) ) c.l <- max( c( ci[ciu], max(tt) ) ) t.l <- max( c( tt[ci1 ) stop( "More than one lex.Cst present:\n", cst, "\n" ) # Expand each person by the time points prfrm <- nd[rep(1:nr,each=np),] prfrm[,tS] <- prfrm[,tS] + rep(time.pts,nr) prfrm$lex.dur <- il <- min( diff(time.pts) ) # Poisson-models should use the estimated rate at the midpoint of the # intervals: prfrp <- prfrm prfrp[,tS] <- prfrp[,tS]+il/2 # Make a data frame with predicted rates for each of the transitions # out of this state for these times rt <- data.frame( lex.id = prfrm$lex.id ) for( i in 1:length(Tr[[cst]]) ) { if( inherits( Tr[[cst]][[i]], "glm" ) ) rt <- cbind( rt, predict( Tr[[cst]][[i]], type="response", newdata=prfrp ) ) else if( inherits( Tr[[cst]][[i]], "coxph" ) ) rt <- cbind( rt, predict( Tr[[cst]][[i]], type="expected", newdata=prfrm ) ) else if( is.function( Tr[[cst]][[i]] ) ) rt <- cbind( rt, Tr[[cst]][[i]](prfrm) ) else stop( "Invalid object supplied as transition, elements of the list must be either:\n", "- a glm(poisson) object fitted to a Lexis object\n", "- a coxph object fitted to a Lexis object\n", "- a function that takes a Lexis object as argument and returns\n", " average rates for each record in the same units as lex.dur.") } names( rt )[-1] <- names( Tr[[cst]] ) # Then find the transition time and exit state for each person: xx <- match( c("lex.dur","lex.Xst"), names(nd) ) if( any(!is.na(xx)) ) nd <- nd[,-xx[!is.na(xx)]] merge( nd, do.call( rbind, lapply( split( rt, rt$lex.id ), sim1, time.pts ) ), by="lex.id" ) } ###################################################################### get.next <- function( sf, tr.st, tS, tF ) { # Produces an initial Lexis object for the next simulation for those # who have ended up in a transient state. # Note that this exploits the existence of the "time.since" attribute # for Lexis objects and assumes that a character vector naming the # transient states is supplied as argument. if( nrow(sf)==0 ) return( sf ) nxt <- sf[sf$lex.Xst %in% tr.st,] if( nrow(nxt) == 0 ) return( nxt ) nxt[,tS] <- nxt[,tS] + nxt$lex.dur wh <- tF for( i in 1:length(wh) ) if( wh[i] != "" ) nxt[nxt$lex.Xst==wh[i],tS[i]] <- 0 nxt$lex.Cst <- nxt$lex.Xst return( nxt ) } ###################################################################### chop.lex <- function( obj, tS, cens ) { # A function that chops off all follow-up beyond cens since entry for # each individual # Entry times on 1st timescale zz <- entry( obj, 1, by.id=TRUE ) # Merge with the revised exit times on this timescale ww <- merge( obj, data.frame( lex.id = as.numeric(names(zz)), cens = zz+cens ) ) # Only retain records with an entry time prior to the revised exit time ww <- ww[ww[,tS[1]] < ww$cens,] # Revise the duration according the the revised exit time x.dur <- pmin( ww$lex.dur, ww[,"cens"]-ww[,tS[1]] ) # Change lex.Xst to lex.Cst for those with shortened follow-up ww$lex.Xst[x.dur0] nt <- length(tt) warning("\nSome initiators start in a absorbing state\n", "Initiator states represented are: ", paste( rbind( names(tt), rep(":",nt), paste(tt), rep(" ",nt) ), collapse="" ), "\n", "Transient states are: ", paste( names( Tr ), coll=" " ) ) if( nrow(nxt)==0 ) stop( "\nNo initiators in transient states!" ) } # Then we update those who are in a transient states and keep on doing # that till all are in absorbing states or censored while( nrow(nxt) > 0 ) { nx <- do.call( rbind.data.frame, lapply( split( nxt, nxt$lex.Cst ), simX, Tr, time.pts, tS ) ) sf <- rbind.data.frame( sf, nx ) nxt <- get.next( nx, tr.st, tS, tF ) } # Doctor lex.Xst levels, fix values for the censored sf$lex.Xst <- factor( sf$lex.Xst, levels=levels(sf$lex.Cst) ) sf$lex.Xst[is.na(sf$lex.Xst)] <- sf$lex.Cst[is.na(sf$lex.Xst)] # Nicely order the output by persons, then times and states nord <- match( c( "lex.id", tS, "lex.dur", "lex.Cst", "lex.Xst" ), names(sf) ) noth <- setdiff( 1:ncol(sf), nord ) sf <- sf[order(sf$lex.id,sf[,tS[1]]),c(nord,noth)] rownames(sf) <- NULL # Finally, supply attributes - note we do not supply the "breaks" # attribute as this is irrelevant for simulated objects attr( sf, "time.scales" ) <- tS attr( sf, "time.since" ) <- tF chop.lex( sf, tS, max(time.pts) ) } ###################################################################### nState <- function ( obj, at, from, time.scale = 1 ) { # Counts the number of persons in each state of the Lexis object 'obj' # at the times 'at' from the time 'from' in the time scale # 'time.scale' # Determine timescales and absorbing and transient states tS <- check.time.scale(obj,time.scale) TT <- tmat(obj) absorb <- rownames(TT)[apply(!is.na(TT),1,sum)==0] transient <- setdiff( rownames(TT), absorb ) # Expand each record length(at) times tab.frm <- obj[rep(1:nrow(obj),each=length(at)), c(tS,"lex.dur","lex.Cst","lex.Xst")] # Stick in the corresponding times on the chosen time scale tab.frm$when <- rep( at, nrow(obj) ) + from # For transient states keep records that includes these points in time tab.tr <- tab.frm[tab.frm[,tS] <= tab.frm$when & tab.frm[,tS]+tab.frm$lex.dur > tab.frm$when,] tab.tr$State <- tab.tr$lex.Cst # For absorbing states keep records where follow-up ended before tab.ab <- tab.frm[tab.frm[,tS]+tab.frm$lex.dur <= tab.frm$when & tab.frm$lex.Xst %in% absorb,] tab.ab$State <- tab.ab$lex.Xst # Make a table using the combination of those in transient and # absorbing states. with( rbind( tab.ab, tab.tr ), table( when, State ) ) } ###################################################################### pState <- function( nSt, perm=1:ncol(nSt) ) { # Compute cumulative proportions of persons across states in order # designate by 'perm' tt <- t( apply( nSt[,perm], 1, cumsum ) ) tt <- sweep( tt, 1, tt[,ncol(tt)], "/" ) class( tt ) <- c("pState","matrix") tt } ###################################################################### plot.pState <- function( x, col = rainbow(ncol(x)), border = "transparent", xlab = "Time", ylim = 0:1, ylab = "Probability", ... ) { # Function to plot cumulative probabilities along the time scale. matplot( as.numeric(rownames(x)), x, type="n", ylim=ylim, yaxs="i", xaxs="i", xlab=xlab, ylab=ylab, ... ) lines.pState( x, col = col, border = border, ... ) } ###################################################################### lines.pState <- function( x, col = rainbow(ncol(x)), border = "transparent", ... ) { # Function to plot cumulative probabilities along the time scale. # Fixing the colors: nc <- ncol(x) col <- rep( col , nc )[1:nc] border <- rep( border, nc )[1:nc] # Just for coding convenience when plotting polygons pSt <- cbind( 0, x ) for( i in 2:ncol(pSt) ) { polygon( c( as.numeric(rownames(pSt)) , rev(as.numeric(rownames(pSt))) ), c( pSt[,i ], rev(pSt[,i-1]) ), col=col[i-1], border=border[i-1], ... ) } } Epi/R/apc.LCa.R0000644000175100001440000000341312721250747012542 0ustar hornikusers################################################################################### ### apc-LCa comparison apc.LCa <- function( data, # cohort reference for the interactions keep.models = FALSE, ... ) { models <- c("APa","ACa","APaC","APCa","APaCa" ) LCa.list <- list() length( LCa.list ) <- 5 names( LCa.list ) <- models for( mod in models ){ cat( mod, ":\n" ) LCa.list[[mod]] <- LCa.fit( data = data, model = mod, ... ) } APC <- apc.fit( data, npar = list( A=LCa.list[[2]]$knots$a.kn, P=LCa.list[[1]]$knots$p.kn, C=LCa.list[[1]]$knots$c.kn ) ) dev <- c( APC$Anova[c(2,5,3,4),2], sapply( LCa.list, function(x) x$deviance ) ) df <- c( APC$Anova[c(2,5,3,4),1], sapply( LCa.list, function(x) x$df ) ) names(dev)[1:4] <- names(df)[1:4] <- gsub( "rift","", gsub("eriod","", gsub("ohort","", gsub("-","", gsub( "ge", "", rownames(APC$Anova)[c(2,5,3,4)]))))) if( keep.models ) return( list( dev = cbind( dev, df ), apc = APC, LCa = LCa.list ) ) else return( cbind( dev, df ) ) } show.apc.LCa <- function( x, dev.scale=TRUE, top="Ad", ... ) { if( is.list(x) ) x <- x[[1]] TM <- matrix(NA,9,9) rownames( TM ) <- colnames( TM ) <- paste( rownames(x), "\n", formatC(x[,1],format="f",digits=1) ) TM[1,2:3] <- TM[2,c(4,5)] <- TM[3,c(4,6)] <- TM[4,c(7,8)] <- TM[5,7] <- TM[6,8] <- TM[c(7,8),9] <- 1 TM bp <- list( x=c(50,30,70,50,10,90,30,70,50), y=c(90,70,70,50,50,50,30,30,10) ) if( !dev.scale ) boxes.matrix( TM, boxpos=bp, hm=1.5, wm=1.5, ... ) else { bp$y <- 5+90*(pmin(x[top,1],x[,1])-x[9,1])/(x[top,1]-x[9,1]) boxes.matrix( TM, boxpos=bp, hm=1.5, wm=1.5, ... ) } } Epi/R/Lexis.lines.R0000644000175100001440000000631012531361077013533 0ustar hornikusersLexis.lines <- function( entry.date = NA, exit.date = NA, birth.date = NA, entry.age = NA, exit.age = NA, risk.time = NA, col.life = "black", lwd.life = 2, fail = NA, cex.fail = 1, pch.fail = c(NA,16), col.fail = col.life, data = NULL ) { ## Get variables from data argument, if supplied, or from parent ## frame if not. entry.date <- eval(substitute(entry.date), data) entry.age <- eval(substitute(entry.age ), data) exit.date <- eval(substitute(exit.date ), data) exit.age <- eval(substitute(exit.age ), data) risk.time <- eval(substitute(birth.date), data) birth.date <- eval(substitute(birth.date), data) fail <- eval(substitute(fail ), data) # If fail is numeric make it logical if( is.numeric( fail ) ) fail <- ( fail > 0 ) # Complete the information on lifelines XX <- Life.lines( entry.date = entry.date, entry.age = entry.age, exit.date = exit.date, exit.age = exit.age, risk.time = risk.time, birth.date = birth.date ) # Expand lwd.life/col.life/pch.fail/col.fail/cex.fail # Np <- nrow( XX ) if( length( col.life )==1 ) col.life <- rep( col.life, Np ) else if( length( col.life )!=length(fail) ) stop("col.life must have length 1 or length(fail)" ) if( length( lwd.life )==1 ) lwd.life <- rep( lwd.life, Np ) else if( length( lwd.life )!=length(fail) ) stop("lwd.life must have length 1 or length(fail)" ) if( length( col.fail )==1 ) col.fail <- rep( col.fail, Np ) else { if( length( col.fail )==2 ) col.fail <- col.fail[fail+1] } if( length( col.fail )!=length(fail) ) stop("col.fail must have length 1,2 or length(fail)" ) if( length( pch.fail )==1 ) pch.fail <- rep( pch.fail, Np ) else if( length( pch.fail )==2 ) pch.fail <- pch.fail[fail+1] if( length( pch.fail )!=length(fail) ) stop("pch.fail must have length 1,2 or length(fail)" ) if( length( cex.fail )==1 ) cex.fail <- rep( cex.fail, Np ) else if( length( cex.fail )==2 ) cex.fail <- cex.fail[fail+1] if( length( cex.fail )!=length(fail) ) stop("cex.fail must have length 1,2 or length(fail)" ) # Was XX returned as a Date-object? # If so make a numerical version i LL, otherwise just a copy. # if( attr( XX, "Date" ) ) { LL <- data.frame( lapply( XX, unclass ) ) LL[,c(1,3,5)] <- LL[,c(1,3,5)] / 365.25 + 1970 LL[,c(2,4,6)] <- LL[,c(2,4,6)] / 365.25 } else LL <- XX # Find age and date ranges in the current plot. # date <- par( "usr" )[1:2] age <- par( "usr" )[3:4] # Plot the lifelines segments( LL[,1], LL[,2], LL[,3], LL[,4], lwd=lwd.life, col=col.life ) # If there are any non-NAs for pch.fail then blank out the space # where they go before plotting the symbols if( any( !is.na(pch.fail) ) ) points( LL[!is.na(pch.fail),3], LL[!is.na(pch.fail),4], pch=16, col="white", #par()$bg, cex=cex.fail[!is.na(pch.fail)] ) points( LL[,3], LL[,4], pch=pch.fail, col=col.fail, cex=cex.fail ) # Return the untouched version of the completed dataframe # invisible( data.frame( XX, fail=fail ) ) } Epi/R/mcutLexis.R0000644000175100001440000001200313070542074013304 0ustar hornikusersmcutLexis <- function( L0, # A Lexis object timescale = 1, # the time scale referred to by L0[,wh] wh, # indices/names of columns holding dates of state entries (events) new.states = NULL, # Names of the event types (states) precursor.states = NULL, seq.states = TRUE, # Should state names reflect ordering of events new.scales = NULL, # Time-scales referring to time since ties.resolve = FALSE # Are tied event times accepted? ) { ### we rely on referring to the timescale and event time variables by name if( is.numeric(timescale) ) timescale <- timeScales(L0)[timescale] if( is.numeric(wh) ) wh <- names(L0)[wh] ### don't be silly if( length(wh)==1 ) # return( docut( L0, osv ) ) # old cutLexis should be absorbed here stop( "mcutLexis not needed for one type of event - use cutLexis\n" ) ### states if( is.null(new.states) ) { new.states <- wh cat( "NOTE: Name of new states set to\n", new.states ) } if( length(wh) != length(new.states) ) stop( "wh and new.states must have same length, but lengths are", "wh:", length(wh), "and new.states:", length(new.states), "\n" ) ### timescales # either all or none if( is.logical(new.scales) ) if( any( new.scales ) ) { new.scales <- paste( "tf", new.states, sep="" ) cat( "NOTE: new.scales set to: ", new.scales, "\n" ) } if( is.character(new.scales) & length(new.scales) != length(wh) ) { new.scales <- paste( "tf", new.states, sep="" ) warning( "new.scales not of same length as wh. Set to: ", new.scales, "\n" ) } if( is.character(new.scales) & length(intersect(new.states,timeScales(L0))) ) stop( "Names of new time scales must be different from names of timescales:\n", timeScales(L0) ) ### Tied transition times untied has.ties <- any( wh.tied <- apply( L0[,wh], 1, function(x) any(diff(sort(x[!is.na(x)]))==0) ) ) if( has.ties & is.logical(ties.resolve) & !ties.resolve ) stop( "Tied event times not allowed with ties.resolve=FALSE:\n", "there were", length(wh.tied), "records with tied event times.") if( has.ties & is.logical(ties.resolve) & ties.resolve ) ties.resolve = 1/100 if( has.ties & is.numeric(ties.resolve) ) { rnd <- L0[wh.tied,wh]*0 rnd[,] <- runif(rnd,-1,1) * ties.resolve L0[wh.tied,wh] <- L0[wh.tied,wh] + rnd cat( "NOTE: ", length(wh.tied), "records with tied events times resolved.\n", "Results only reproducible if the seed for the random number generator is set.") } # End of checks # The object to return initiated as NULL Lcut <- NULL # Utility function returning sequences of ocurrences as paste of numbers NAorder <- function (x) { oo <- order(x, na.last = T) on <- (1:length(oo))[oo] on[is.na(x[oo])] <- NA paste(on[!is.na(on)], collapse = "-") } # where do the different sequences of events actually occur in data L0$whseq <- apply( L0[,wh], 1, NAorder ) # Loop through the actually occurring orders of event occurrences for( sq in unique(L0$whseq) ) { # Persons with none of the events occurring transferred to result if( sq=="" ) Lcut <- rbind( Lcut, L0[L0$whseq=="",] ) else { # Extract the subset of persons with a given sequence of events Ltmp <- L0[L0$whseq==sq,] # The numerical sequence of states (refer to the elements of wh) ost <- as.numeric( strsplit( sq, "-" )[[1]] ) nxst <- "" prst <- precursor.states for( cs in ost ) { nxst <- ifelse( cs==ost[1], new.states[cs], paste( nxst, new.states[cs], sep="-" ) ) Ltmp <- cutLexis( Ltmp, cut = Ltmp[,wh[cs]], timescale = timescale, new.state = nxst, precursor.states = prst ) # include the created state among the precursor states for next cut prst <- c(prst,nxst) } # end of for loop through events in this sequence (cs) # Attach it to the end of the Lexis object Lcut <- rbind( Lcut, Ltmp ) } # end of the else clause } # end of for loop through sequences (sq) # Do we want the sequences or just the unordered set of previous events if( !seq.states ) { lvl <- levels( Lcut ) ulvl <- sapply( lapply( strsplit(lvl,"-"), sort ), paste, collapse="+" ) levels( Lcut$lex.Cst ) <- levels( Lcut$lex.Xst ) <- ulvl } # Did we ask for timescales as time since events? if( !is.null(new.scales) ) { # insert columns for the new time scales Lcut <- Lcut[,c(rep("whseq",length(new.scales)),names(Lcut))] names( Lcut )[1:length(new.scales)] <- new.scales for( i in 1:length(wh) ) Lcut[,i] <- ifelse( Lcut[,timescale] - Lcut[,wh[i]] < 0, NA, Lcut[,timescale] - Lcut[,wh[i]] ) # set attributes attr( Lcut, "time.scales" ) <- c( attr( Lcut, "time.scales" ), new.scales ) attr( Lcut, "time.since" ) <- c( attr( Lcut, "time.since" ), new.states ) } # return the cut object without the auxilary variable rmcol <- grep( "whseq", names(Lcut) ) Lcut[,-rmcol] } Epi/R/Pplot.R0000644000175100001440000000346512531361077012444 0ustar hornikusersPplot <- function( rates, age = as.numeric( dimnames( rates )[[1]] ), per = as.numeric( dimnames( rates )[[2]] ), grid = FALSE, p.grid = grid, ygrid = grid, col.grid = gray( 0.9 ), p.lim = range( per, na.rm=TRUE ) + c(0,diff(range(per))/30), ylim = range( rates[rates>0], na.rm=TRUE ), p.lab = names( dimnames( rates ) )[2], ylab = deparse( substitute( rates ) ), at = NULL, labels = paste( at ), type = "l", lwd = 2, lty = 1, col = par( "fg" ), log.ax = "y", las = 1, ann = FALSE, cex.ann = 0.8, xannx = 1/20, a.thin = seq( 1, length( age ), 2 ), ... ) { # Plot the frame if( ann ) p.lim <- p.lim + c(0,diff( range( age ) ) * xannx ) matplot( per, t(rates), type="n", xlim=p.lim, ylim=ylim, xlab=p.lab, ylab=ylab, log=log.ax, las=las, yaxt=if( !is.null( at ) ) "n" else "s" ) if( !is.null( at ) ) axis( side=2, at=at, labels=labels, yaxt="s", las=las ) # and the grid if required if( !missing( p.grid ) | !missing( grid ) ) { if( is.logical( p.grid ) & p.grid[1] ) p.grid <- nice( per, log=par("xlog") ) abline( v=p.grid, col=col.grid ) } if( !missing( ygrid ) | !missing( ygrid ) ) { if( is.logical( ygrid ) & ygrid[1] ) ygrid <- nice( rates[!is.na(rates)], log=par("ylog") ) abline( h=ygrid, col=col.grid ) } box() # then the curves matlines( per, t(rates), lwd=lwd, lty=lty, col=col, type=type, ... ) # annotate them if required (every second by default ) if( ann ) { nr <- nrow( rates ) nc <- ncol( rates ) text( rep( per[nc], nr )[a.thin], rates[,nc][a.thin], paste( "", age[a.thin] ), adj=c(0,0.5), cex=cex.ann, col=if( length(col)==1 ) col else col[a.thin] ) } } Epi/R/lls.R0000644000175100001440000000242113052220176012120 0ustar hornikuserslls <- # A function that expands the functionality of ls() function( pos = 1, pat = "", all=FALSE, print=TRUE ) { # First a function that returns length/dim when you ask for it dimx <- function(dd) if (is.null(dim(dd))) length(dd) else dim(dd) # A vector of object names lll <- ls( pos=pos, pattern=pat, all.names=all ) # Are there any objects at all? if( length(lll) > 0 ) { obj.mode <- obj.clas <- obj.dimx <- obj.size <- character(0) # Then find mode, class, name and dimension of them and return it for(i in 1:length(lll)) { obj.mode[i] <- eval( parse(text = paste( "mode(`", lll[i], "`)",sep=""))) obj.clas[i] <- paste( eval( parse(text = paste( "class(`", lll[i], "`)",sep=""))), collapse=" " ) obj.dimx[i] <- paste( eval( parse(text = paste( "dimx(`", lll[i], "`)",sep=""))), collapse=" " ) obj.size[i] <- formatC( eval( parse(text = paste("unclass(object.size(`", lll[i], "`))",sep="")))/2^10, format="f", digits=1, big.mark=",", width=14, flag=" " ) } dfr <- data.frame( name = lll, mode = obj.mode, class = obj.clas, dim = obj.dimx, sizeKbytes = obj.size, stringsAsFactors=FALSE ) names( dfr )[5] <- " size(Kb)" print( invisible( dfr ), right=FALSE ) } } Epi/R/mh.R0000644000175100001440000001034512531361077011745 0ustar hornikusers# Mantel-Haenszel estimate and test mh <- function(cases, denom, compare = 1, levels = c(1, 2), by = NULL, cohort = !is.integer(denom), confidence = 0.9) { ndim <- length(dim(cases)) edgin <- names(dimnames(cases)) edgen <- paste("Dimension", 1:ndim) if (is.null(edgin)) edges <- edgen else edges <- ifelse(edgin == "", edgen, edgin) if (is.null(edges)) edges <- rep("", ndim) if(length(dim(denom)) != ndim) { stop("Cases and Pyrs arrays of unequal dimension") } if(is.numeric(compare)) { comp <- as.integer(compare) if(comp < 1 || comp > ndim) { stop("Illegal argument: compare") } } else { comp <- (1:ndim)[edges == compare] if(length(comp) != 1) { stop("Illegal argument: compare") } } if(!is.null(by)) { if (!is.numeric(by)) { mtch <- match(by, edges) if (any(is.na(mtch))) { stop("Illegal argument: by") } by <- (1:ndim)[mtch] } if (any(by < 1 | by > ndim | by == comp)) { stop("Illegal argument: by") } } gtxt <- vector("character", 3) gtxt[1] <- edges[comp] gtxt[2] <- dimnames(cases)[[comp]][levels[1]] gtxt[3] <- dimnames(cases)[[comp]][levels[2]] ctxt <- edges[-c(comp, by)] if (length(ctxt) == 0) ctxt <- as.null() others <- (1:ndim)[ - comp] select <- function(a, el) { b <- a[el] ifelse(is.na(b), 0, b) } d1 <- apply(cases, others, select, el = levels[1]) d2 <- apply(cases, others, select, el = levels[2]) if(length(d1) == 0 || length(d2) == 0) { stop("Illegal argument: levels") } y1 <- apply(denom, others, select, el = levels[1]) y2 <- apply(denom, others, select, el = levels[2]) d <- d1 + d2 y <- y1 + y2 if (cohort) { qt <- ifelse(y>0, (d1 * y2)/y, 0) rt <- ifelse(y>0, (d2 * y1)/y, 0) ut <- ifelse(y>0, d1 - ((d * y1)/y), 0) vt <- ifelse(y>0, (d * y1 * y2)/(y^2), 0) } else { s1 <- d1 + y1 s2 <- d2 + y2 t <- s1 + s2 qt <- ifelse(t>1, (d1 * y2)/t, 0) rt <- ifelse(t>1, (d2 * y1)/t, 0) ut <- ifelse(t>1, d1 - ((d * s1)/t), 0) vt <- ifelse(t>1, (d * y * s1 * s2)/((t - 1) * (t^2)), 0) } if(!is.null(by)) { if(length(by) < ndim - 1) { nby <- match(by, others) q <- apply(qt, nby, sum) r <- apply(rt, nby, sum) u <- apply(ut, nby, sum) v <- apply(vt, nby, sum) } else { q <- qt r <- rt u <- ut v <- vt } } else { q <- sum(qt) r <- sum(rt) u <- sum(ut) v <- sum(vt) } rr <- q/r se <- sqrt(v/(q * r)) ch <- (u^2)/v ef <- exp( - qnorm((1 - confidence)/2) * se) if (cohort) ty <- "Rate ratio" else ty <- "Odds ratio" res <- list(groups = gtxt, control = ctxt, type=ty, q=q, r=r, u=u, v=v, ratio = rr, se.log.ratio = se, cl.lower = rr/ef, cl.upper = rr * ef, chisq = ch, p.value = 1 - pchisq( ch, 1)) class(res) <- "mh" res } print.mh <- function(m) { cat("\n") if (!is.null(m$control)) cat("\nMantel-Haenszel comparison for: ") else cat("Comparison for: ") cat(m$groups[1], " (", m$groups[2], "versus", m$groups[3], ")\n") if (!is.null(m$control)) cat("controlled for:", m$control, "\n") cols <- c(m$type, "CL (lower)", "CL (upper)", "Chisq (1 df)", "p-value") nr <- length(m$ratio) if (is.array(m$ratio)) { dnt <- dimnames(m$ratio) size <- dim(m$ratio) nw <- length(dnt) } else { rn <- names(m$ratio) if (length(rn) > 1) dnt <- list(names(m$ratio)) else dnt <- list("") size <- nr nw <- 1 } dno <- vector("list", nw+1) so <- vector("numeric", nw+1) dno[[1]] <- dnt[[1]] dno[[2]] <- cols so[1] <- size[1] so[2] <- 5 if (nw > 1) for (i in 2:nw) { dno[[i+1]] <- dnt[[i]] so[i+1] <- size[i] } s1 <- size[1] tab <- cbind(m$ratio, m$cl.lower, m$cl.upper, m$chisq, m$p.value) # as.matrix(m$ratio, nrow=s1), # as.matrix(m$cl.lower, nrow=s1), # as.matrix(m$cl.upper, nrow=s1), # as.matrix(m$chisq, nrow=s1), # as.matrix(m$p.value, nrow=s1) ) print(array(tab, dim=so, dimnames=dno)) if (nr > 1) { Q <- sum(m$q) R <- sum(m$r) cat("\nOverall Mantel-Haenszel estimate of", m$type, ":", format(Q/R)) h <- sum(((m$q*R-m$r*Q)^2)/m$v)/(Q*R) df <- sum(m$v>0)-1 cat("\nChi-squared test of heterogeneity:", format(h), "(",df," df), p =", format(1-pchisq(h, df)), "\n") } cat("\n") } # Power calculations mh.power <- function(mh, ratio, alpha=0.05) { n.se <- log(ratio)/mh$se.log.ratio pnorm(n.se - qnorm(1-alpha/2)) } Epi/R/LCa.fit.R0000644000175100001440000005240613142331302012550 0ustar hornikusers###################################################################### ### estimation method LCa.fit <- function( data, A, P, D, Y, model = "APa", # or one of "ACa", "APaC", "APCa" or "APaCa" a.ref, # age reference for the interactions pi.ref = a.ref, # age reference for the period interaction ci.ref = a.ref, # age reference for the cohort interaction p.ref, # period reference for the intercation c.ref, # cohort reference for the interactions npar = c(a = 6, # no. knots for main age-effect p = 6, # no. knots for peroid-effect c = 6, # no. knots for cohort-effect pi = 6, # no. knots for age in the period interaction ci = 6), # no. knots for age in the cohort interaction VC = TRUE, # numerical calculation of the Hessia? alpha = 0.05, # 1 minus confidence level eps = 1e-6, # convergence criterion maxit = 100, # max. no iterations quiet = TRUE ) # cut the crap { # "model" must have values in c(APa/ACa/APaC/APCa/APaCa)? if( !(model %in% c("APa","ACa","APaC","APCa","APaCa")) ) stop( '"model" must be one of "APa","ACa","APaC","APCa","APaCa", but is', model,'\n' ) # Which main effects and interactions are in the model intP <- as.logical(length(grep("Pa",model))) intC <- as.logical(length(grep("Ca",model))) mainP <- as.logical(length(grep("P" ,model))) # Also includes the age-period interaction mainC <- as.logical(length(grep("C" ,model))) # Also includes the age-cohort product # if a dataframe is supplied, fish out data and put in the function's environment if( !missing(data) ) { if (length(match(c("A", "P", "D", "Y"), names(data))) != 4) stop("Data frame ", deparse(substitute(data)), " has columns:\n", names(data), "\nmust have variables:\n", "A (age), P (period), D (cases) and Y (person-time)") data <- data[,c("A","P","D","Y")] data <- data[complete.cases(data),] A <- data$A P <- data$P D <- data$D Y <- data$Y } else { # if single vectors supplied, check they are all there nm <- c(missing(A), missing(P), missing(D), missing(Y)) if (any(nm)) stop("Variable", if (sum(nm) > 1) "s", paste(c(" A", " P", " D", " Y")[nm], collapse = ","), " missing from input") # and that they have the same length if( diff(range( lv <- c( length(A), length(P), length(D), length(Y) ) )) != 0 ) stop( "\nLengths of variables (", paste(paste(names(lv), lv, sep = ":"), collapse = ", "), ") are not the same." ) } # end of data acquisition # code-simplifier for knot calculation eqqnt <- function(n) round( (1:n-0.5)/n, 2 ) # Define knots - we compute also the knots not needed if( is.list(npar) ) { # Check if names is a named list if( is.null(names(npar)) ) stop( "If npar= is a list, it must be a *named* list.\n" ) a.kn <- if( length(npar$a )>1 ) npar$a else quantile( rep( A,D), probs=eqqnt(npar$a ) ) p.kn <- if( length(npar$p )>1 ) npar$p else quantile( rep(P ,D), probs=eqqnt(npar$p ) ) c.kn <- if( length(npar$c )>1 ) npar$c else quantile( rep(P-A,D), probs=eqqnt(npar$c ) ) pi.kn <- if( length(npar$pi)>1 ) npar$pi else quantile( rep( A,D), probs=eqqnt(npar$pi) ) ci.kn <- if( length(npar$ci)>1 ) npar$ci else quantile( rep( A,D), probs=eqqnt(npar$ci) ) } else { # if npar is too short fill it up npar <- rep( npar, 5 )[1:5] # if not named, name it and notify if( is.null(names(npar)) ) names(npar) <- c("a","p","c","pi","ci") a.kn <- quantile( rep( A,D), probs=eqqnt(npar["a"] ) ) p.kn <- quantile( rep(P ,D), probs=eqqnt(npar["p"] ) ) c.kn <- quantile( rep(P-A,D), probs=eqqnt(npar["c"] ) ) pi.kn <- quantile( rep( A,D), probs=eqqnt(npar["pi"]) ) ci.kn <- quantile( rep( A,D), probs=eqqnt(npar["ci"]) ) } # Reference points if( missing( p.ref) ) p.ref <- median( rep(P ,D) ) if( missing( c.ref) ) c.ref <- median( rep(P-A,D) ) if( missing(pi.ref) ) pi.ref <- median( rep( A,D) ) if( missing(ci.ref) ) ci.ref <- median( rep( A,D) ) ############################################################################ # Here starts the actual modelling commence <- Sys.time() # Matrices to extract the age-interaction terms at reference points Mp <- Ns( rep(pi.ref,length(A)), knots=pi.kn, intercept=TRUE ) Mc <- Ns( rep(ci.ref,length(A)), knots=ci.kn, intercept=TRUE ) # Current age-effects (in the iteration these will be term predictions) ba <- cbind( rep(1,length(A)), 1 ) # set to 0 if term is not in model at all if( !mainP ) ba[,1] <- 0 if( !mainC ) ba[,2] <- 0 # Main effects model with (at least one) age-interactions mat <- glm( D ~ -1 + Ns( A, knots=a.kn, intercept=TRUE ) + Ns( P , knots=p.kn, ref=p.ref):ba[,1] + Ns( P-A, knots=c.kn, ref=c.ref):ba[,2], offset = log(Y), family = poisson ) oldmb <- oldmat <- mat$deviance # Terms prediction --- three terms here. # No need to divide by the ba, it is eiter 1 or 0 pat <- predict( mat, type="terms" ) # iteration counter and continuation indicator nit <- 0 one.more <- TRUE # For simple formatting of the iteration output fC <- function(x,d) formatC(x,format="f",digits=d) # now, iterate till convergence while( one.more ) { nit <- nit+1 # Terms with main effects should be either in interaction or offset, # so one of these should always be 0 Pint <- Poff <- pat[,2] Cint <- Coff <- pat[,3] if( intP ) Poff <- Poff*0 else Pint <- Pint*0 if( intC ) Coff <- Coff*0 else Cint <- Cint*0 # Iteration of the age-interaction mb <- glm( D ~ -1 + Ns( A, knots=pi.kn, intercept=TRUE ):Pint + Ns( A, knots=ci.kn, intercept=TRUE ):Cint, offset = pat[,1] + Poff + Coff + log(Y), family = poisson ) # Get the age-interaction terms only, and if one is not needed set to 0 ba <- predict( mb, type="terms" ) / cbind(Pint,Cint) / cbind( ci.lin( mb, subset="pi.kn", ctr.mat=Mp)[,1], ci.lin( mb, subset="ci.kn", ctr.mat=Mc)[,1] ) ba[is.na(ba)] <- 0 # If no interaction only main should be fitted; if no main effect, set to 0 if( !intP ) ba[,1] <- rep(1,length(A)) * mainP if( !intC ) ba[,2] <- rep(1,length(A)) * mainC # apc model with assumed known interactions with age mat <- glm( D ~ -1 + Ns( A, knots=a.kn, intercept=TRUE ) + Ns( P , knots=p.kn, ref=p.ref):ba[,1] + Ns( P-A, knots=c.kn, ref=c.ref):ba[,2], offset = log(Y), family = poisson ) # extract age and period terms pat <- predict( mat, type="terms" ) / cbind( 1, ba ) pat[is.na(pat)] <- 0 # convergence? Check bot that the two models give the same deviance # and that the chnage in each is small newmat <- mat$deviance newmb <- mb$deviance conv <- ( reldif <- max( (abs(newmat-newmb)/ (newmat+newmb)*2), (oldmat-newmat)/newmat, (oldmb -newmb )/newmb ) ) < eps one.more <- ( !conv & ( nit < maxit ) ) oldmat <- newmat oldmb <- newmb if( !quiet & nit==1 ) cat( " Deviances: model(AT) model(A) Rel. diff.\n" ) if( !quiet ) cat( "Iteration", formatC( nit, width=3, flag=" "), "", fC(mat$deviance,3), fC( mb$deviance,3), fC( reldif, 7 ), "\n" ) } # end of iteration loop # Deviance and d.f - there is a "+1" because the intercept is in both models # but not explicit, (both models fitted with "-1"), hence the df.null # is the total no. observations dev <- mb$deviance df <- mat$df.null - ( mb$df.null- mb$df.res # no. parms in mb + mat$df.null-mat$df.res # no. parms in mat - 1 ) # common intercept if( conv ) cat( "LCa.fit convergence in ", nit, " iterations, deviance:", dev, "on", df, "d.f.\n") if( !conv ) cat( "LCa.fit *not* converged in ", nit, " iterations:\ndeviance (AT):", mat$deviance, ", deviance (B):" , mb$deviance, "\n", if( VC ) "...no variance-covariance computed.\n" ) fin <- Sys.time() if( !quiet ) cat("...using", round(difftime(fin,commence,units="secs"),1), "seconds.\n") # unique values of A, P and C in the dataset for reporting effects a.pt <- sort(unique( A)) p.pt <- sort(unique(P )) c.pt <- sort(unique(P-A)) # extract effects from final models after convergence ax <- ci.exp( mat, subset= "a.kn", ctr.mat=Ns(a.pt,knots= a.kn,intercept=TRUE ) ) kp <- ci.exp( mat, subset= "p.kn", ctr.mat=Ns(p.pt,knots= p.kn,ref=p.ref) ) kc <- ci.exp( mat, subset= "c.kn", ctr.mat=Ns(c.pt,knots= c.kn,ref=c.ref) ) pi <- ci.exp( mb , subset="pi.kn", ctr.mat=Ns(a.pt,knots=pi.kn,intercept=TRUE), Exp=FALSE ) ci <- ci.exp( mb , subset="ci.kn", ctr.mat=Ns(a.pt,knots=ci.kn,intercept=TRUE), Exp=FALSE ) # Label the estimated effects rownames( ax ) <- rownames( pi ) <- rownames( ci ) <- a.pt rownames( kp ) <- p.pt rownames( kc ) <- c.pt # do we bother about the correct variance-covariance? if( VC & conv ) # ...certainly not without convergence { commence <- Sys.time() if( !quiet ) cat("...computing Hessian by numerical differentiation...\n") # the number of parameters for each of the 5 effects na <- length( grep( "a.kn", names(coef(mat)) ) ) np <- length( grep( "p.kn", names(coef(mat)) ) ) nc <- length( grep( "c.kn", names(coef(mat)) ) ) npi <- length( grep( "pi.kn", names(coef(mb )) ) ) nci <- length( grep( "ci.kn", names(coef(mb )) ) ) # get only the parameters for effects that are non-zero (the others # are in the models but they are 0) ml.cf <- c( coef(mat)[c(rep(TRUE,na), rep(mainP,np), rep(mainC,nc))], coef(mb)[c(rep(intP,npi), rep(intC,nci))] ) # and some more snappy names for the parameters: first all names all.nam <- c( paste("ax",1:na,sep=""), paste("kp",1:np,sep=""), paste("kc",1:nc,sep=""), paste("pi",1:npi,sep=""), paste("ci",1:nci,sep="") ) # ...then those actually present in the model names( ml.cf ) <- all.nam[c(rep( TRUE,na), rep(mainP,np), rep(mainC,nc), rep(intP,npi), rep(intC,nci))] # We need the variance-covariance of the estimates as the 2nd # derivative of the log-likelihood, D*log(lambda) - lambda*Y, # or for eta=log(lambda), D*eta - exp(eta)*Y, # assuming the sequence of parameters is ax, kp, kc, pi, ci # (first A, P, C from model mat, then Pa, Ca from model mb) # Note that we cannot simplify this calculation because the model is # non-linear in pi,kp resp. ci,kc # Matrices to use in calculation of the terms of the model for each parms MA <- Ns( A, knots= a.kn, intercept=TRUE ) Mp <- Ns( P , knots= p.kn, ref=p.ref ) Mc <- Ns( P-A, knots= c.kn, ref=c.ref ) Mpi <- Ns( A, knots=pi.kn, intercept=TRUE ) Mci <- Ns( A, knots=ci.kn, intercept=TRUE ) # Computing the log-likelihood for any set of parameters llik <- function( parms ) { ax <- MA %*% parms[ 1:na] ; nn <- na if( mainP ) { kp <- Mp %*% parms[nn+1:np] ; nn <- nn+np } else kp = rep(0,length(ax)) if( mainC ) { kc <- Mc %*% parms[nn+1:nc] ; nn <- nn+nc } else kc = rep(0,length(ax)) if( intP ) { pi <- Mpi %*% parms[nn+1:npi] ; nn <- nn+npi} else pi = rep(1,length(ax)) if( intC ) { ci <- Mci %*% parms[nn+1:nci] } else ci = rep(1,length(ax)) eta <- ax + pi*kp + ci*kc sum( D*eta - exp(eta)*Y ) } # Numerical calculation of the Hessian for llik ivar <- -numDeriv::hessian( llik, ml.cf ) # Sometimes not quite positive definite, fix that after inverting the Hessian vcov <- Matrix::nearPD( solve( ivar ) ) vcov <- as.matrix( vcov$mat ) fin <- Sys.time() if( !quiet ) cat("...done - in", round(difftime(fin,commence,units="secs"),1), "seconds.\n") # Since we now have the variances of the parameters for each of the # effects we can compute corrected c.i.s for the effects se.eff <- function( sub, cM, Alpha=alpha ) { wh <- grep( sub, names(ml.cf) ) res <- cbind( cM %*% ml.cf[wh], sqrt( diag( cM %*% vcov[wh,wh] %*% t(cM) ) ) ) %*% ci.mat(alpha=Alpha) colnames(res)[1] <- paste( "Joint", colnames(res)[1] ) res } # Append the corrected c.i.s to the effect objects ax <- cbind( ax, exp( se.eff( "ax", Ns(a.pt,knots= a.kn,intercept=TRUE) ) ) ) if( mainP ) kp <- cbind( kp, exp( se.eff( "kp", Ns(p.pt,knots= p.kn,ref=p.ref) ) ) ) if( mainC ) kc <- cbind( kc, exp( se.eff( "kc", Ns(c.pt,knots= c.kn,ref=c.ref) ) ) ) if( intP ) pi <- cbind( pi, se.eff( "pi", Ns(a.pt,knots=pi.kn,intercept=TRUE) ) ) if( intC ) ci <- cbind( ci, se.eff( "ci", Ns(a.pt,knots=ci.kn,intercept=TRUE) ) ) } # Collect refs and knots in lists klist <- list( a.kn=a.kn, pi.kn=pi.kn, p.kn=p.kn, ci.kn=ci.kn, c.kn=c.kn ) rlist <- list( pi.ref=pi.ref, p.ref=p.ref, ci.ref=ci.ref, c.ref=c.ref ) # Finally output object res <- list( model = model, ax = ax, pi = if( intP ) pi else NULL, kp = if( mainP ) kp else NULL, ci = if( intC ) ci else NULL, kc = if( mainC ) kc else NULL, mod.at = mat, mod.b = mb, coef = if( VC & conv ) ml.cf else NULL, vcov = if( VC & conv ) vcov else NULL, knots = klist, refs = rlist, deviance = dev, df.residual = df, iter = nit ) # Remove redundant stuff before returning res <- res[!sapply(res,is.null)] class( res ) <- "LCa" invisible( res ) } ###################################################################### ### utility to determine the types of terms in a model model.terms <- function( x ) list( intP = as.logical(length(grep("Pa",x$model))), mainP = as.logical(length(grep("P" ,x$model))), intC = as.logical(length(grep("Ca",x$model))), mainC = as.logical(length(grep("C" ,x$model))) ) ###################################################################### ### print method print.LCa <- function( x, ... ) { # terms in the model mt <- model.terms( x ) # no. of parameters in each term npar <- sapply(x$knots,length)-1 npar[1] <- npar[1] + 1 npar <- npar[c(TRUE,mt$intP,mt$mainP,mt$intC,mt$mainC)] npar <- paste( paste( npar, c(rep(", ",length(npar)-2)," and ",""), sep=""), collapse=rep("") ) cat( paste( x$model, ": Lee-Carter model with natural splines:\n", " log(Rate) = ax(Age)", if( mt$mainP ) " + ", if( mt$intP ) "pi(Age)", if( mt$mainP ) "kp(Per)", if( mt$mainC ) " + ", if( mt$intC ) "ci(Age)", if( mt$mainC ) "kc(Coh)", "\nwith ", npar, " parameters respectively.\n", "Deviance: ", round(x$deviance,3), " on ", x$df, " d.f.\n", sep=""), if( !("vcov" %in% names(x)) ) "(only conditional c.i.s for effects)\n" ) } ###################################################################### ### summary method summary.LCa <- function( object, show.est=FALSE, ... ) { # terms in the model mt <- model.terms( object ) print( object ) # the number of parameters for each of the 5 effects na <- length( grep( "a.kn", names(coef(object$mod.at)) ) ) np <- length( grep( "p.kn", names(coef(object$mod.at)) ) ) nc <- length( grep( "c.kn", names(coef(object$mod.at)) ) ) npi <- length( grep( "pi.kn", names(coef(object$mod.b )) ) ) nci <- length( grep( "ci.kn", names(coef(object$mod.b )) ) ) # Show knots used cat( "\nKnots used:\n") for( nm in names(object$knots[c(TRUE,mt$mainP,mt$intP,mt$mainC,mt$intC)]) ) { cat( nm,"\n" ) ; print(object$knots[[nm]] ) } cf <- rbind( ci.lin(object$mod.at)[c(rep(TRUE ,na), rep(mt$mainP,np), rep(mt$mainC,nc)),1:2], ci.lin(object$mod.b )[c(rep(mt$intP ,npi), rep(mt$intC ,nci)),1:2] ) if( "vcov" %in% names(object) ) { cf <- cbind( cf, sqrt( diag(object$vcov) ) ) colnames( cf )[-1] <- c("cond.se","joint.se") } if( show.est ) print( cf ) invisible( cf ) } ###################################################################### ### plot method plot.LCa <- function( x, ... ) { # terms in the model mt <- model.terms( x ) # A small plot utility to exploit the structure of the effects plc <- function( x, ... ) matplot( as.numeric( rownames(x) ), x[,ncol(x)-2:0], type="l", lty=1, lwd=c(3,1,1), ... ) plc( x$ax, col="black", xlab="Age", ylab="Age-specific rates", log="y" ) rug( x$knots$a.kn, lwd=2 ) if( mt$intP ){ plc( x$pi, col="black", xlab="Age", ylab="Relative period log-effect multiplier" ) abline(h=1,v=x$refs$pi.ref) rug( x$knots$pi, lwd=2 ) } if( mt$mainP ){ plc( x$kp, col="black", log="y", xlab="Date of follow-up (period)", ylab="Period effect (RR)" ) abline(h=1,v=x$refs$p.ref) rug( x$knots$kp, lwd=2 ) } if( mt$intC ){ plc( x$ci, col="black", xlab="Age", ylab="Relative cohort log-effect multiplier" ) abline(h=1,v=x$refs$ci.ref) rug( x$knots$ci, lwd=2 ) } if( mt$mainC ){ plc( x$kc, col="black", log="y", xlab="Date of birth (cohort)", ylab="Cohort effect (RR)" ) abline(h=1,v=x$refs$c.ref) rug( x$knots$kc, lwd=2 ) } } ###################################################################### ### predict method predict.LCa <- function( object, newdata, alpha = 0.05, level = 1-alpha, sim = ( "vcov" %in% names(object) ), ... ) { # What main effects and interactions are in the model mt <- model.terms( object ) # is person-years suppied, otherwise use units as in the model if( "Y" %in% names(newdata) ) Y <- newdata$Y else Y <- rep(1,nrow(newdata)) # Matrices to extract effects at newdata rows Ma <- Ns( newdata$A, knots = object$knots$a.kn, intercept = TRUE) Mp <- Ns( newdata$P , knots = object$knots$p.kn, ref=object$refs$p.ref ) Mc <- Ns( newdata$P-newdata$A, knots = object$knots$c.kn, ref=object$refs$c.ref ) Mpi <- Ns( newdata$A, knots = object$knots$pi.kn, intercept = TRUE) Mci <- Ns( newdata$A, knots = object$knots$ci.kn, intercept = TRUE) # Default terms values for models without interactions kp <- kc <- rep( 0, nrow(newdata) ) pi <- ci <- rep( 1, nrow(newdata) ) # P, C and interaction term(s) if included in the model if( mt$intP ) { pi <- ci.lin( object$mod.b , subset="pi.kn", ctr.mat=Mpi )[,1] kp <- ci.lin( object$mod.at, subset= "p.kn", ctr.mat=Mp )[,1] } if( mt$intC ) { ci <- ci.lin( object$mod.b , subset="ci.kn", ctr.mat=Mci )[,1] kc <- ci.lin( object$mod.at, subset= "c.kn", ctr.mat=Mc )[,1] } # First fitted values from mod.at # Note that the model object mod.at always has the same number of # parameters, for some of the models either period or cohort parameters # are 0, hence not used. pr0 <- ci.exp( object$mod.at, alpha=alpha, ctr.mat=cbind(Ma,Mp*pi,Mc*ci) ) # Then fitted values from mod.b # But mod.b has an offset beyond log(Y), namely all the APC terms lp.b <- ci.lin( object$mod.b , ctr.mat=cbind(Mpi*kp,Mci*kc) )[,1:2] lp.b[,1] <- lp.b[,1] + ci.lin( object$mod.at, ctr.mat=cbind(Ma,Mp*(!mt$intP),Mc*(!mt$intC)) )[,1] pr0 <- cbind( pr0, exp( lp.b %*% ci.mat(alpha=alpha) ) ) # label the estimates colnames( pr0 )[c(1,4)] <- c("at|b Est.","b|at Est.") # The doings above gives confidence intervals based on the conditional # models, so if we want proper intervals we should simulate instead, # using the posterior distribuion of all parameters, albeit under the # slightly fishy assumption that the joint posterior is normal... if( sim ) # also renders TRUE if sim is numerical (and not 0) { if( is.logical(sim) & sim ) sim <- 1000 # Check that there is a vcov component of the model if( !( "vcov" %in% names(object) ) ) warning( "No variance-covariance in LCa object, only conditional c.i.s available.\n", "no simulation (prametric bootstrap) is done.\n" ) else { # require( MASS ) # using the parametric bootstrap based on the parameters and the # (numerically computed) Hessian eta <- NArray( list( pt = 1:nrow(pr0), it = 1:sim ) ) parms <- MASS::mvrnorm( n = sim, mu = object$coef, Sigma = object$vcov ) na <- ncol( Ma ) npi <- ncol( Mpi ) np <- ncol( Mp ) nci <- ncol( Mci ) nc <- ncol( Mc ) # Compute the linear predictor in each of the simulated samples # period and cohort effects if not in the model kp <- kc <- rep( 0, nrow(newdata) ) pi <- ci <- rep( 1, nrow(newdata) ) for( i in 1:sim ){ ax <- Ma %*% parms[i, 1:na] ; nn <- na if( mt$mainP ) { kp <- Mp %*% parms[i,nn+1:np] ; nn <- nn+np } if( mt$mainC ) { kc <- Mc %*% parms[i,nn+1:nc] ; nn <- nn+nc } if( mt$intP ) { pi <- Mpi %*% parms[i,nn+1:npi] ; nn <- nn+npi} if( mt$intC ) { ci <- Mci %*% parms[i,nn+1:nci] } eta[,i] <- ax + kp*pi + kc*ci } # predicted rates with bootstrap confidence limits pr.sim <- exp( t( apply( eta, 1, quantile, probs=c(0.5,alpha/2,1-alpha/2), na.rm=TRUE ) ) ) colnames( pr.sim )[1] <- "Joint est." return( pr.sim ) } } else return( pr0 ) } Epi/R/fit.baseline.R0000644000175100001440000000065012531361077013702 0ustar hornikusersfit.baseline <- function(y, rates.frame, start) { if (missing(start)) { ## Get starting values from logistic regression model glm.out.init <- glm(y~., family=binomial, data=rates.frame) mu.init <- fitted(glm.out.init, type="response") glm(y~-1 + ., family=binomial(link=log), data=rates.frame, mustart=mu.init) } else { glm(y~-1 + ., family=binomial(link=log), data=rates.frame, start=start) } } Epi/R/print.Icens.r0000644000175100001440000000020012531361077013562 0ustar hornikusersprint.Icens <- function( x, digits=4, scale=1, ... ) { emat <- summary.Icens( x, scale=scale ) print( round( emat, digits ) ) } Epi/R/NArray.R0000644000175100001440000000146212531361077012535 0ustar hornikusersNArray <- function( x, cells=NA ) { if( !is.list(x) ) stop("Argument must be a (named) list." ) array( cells, dimnames=x, dim=sapply( x, length ) ) } ZArray <- function( x, cells=0 ) NArray( x, cells=cells ) larray <- function( data=NA, dim, dimnames ) { if( is.list(data) ) return( array(data=NA,dim=sapply(data,length), dimnames=data) ) else if( is.list(dim) ) return( array(data=data,dim=sapply(dim,length), dimnames=dim) ) else if( is.list(dimnames) ) return( array(data=data,dim=sapply(dimnames,length), dimnames=dimnames) ) else if( !missing(dimnames) ) return( array(data=data,dim=length(data), dimnames=dimnames) ) else return( array(data=data,dim=length(data)) ) } Epi/R/print.floated.R0000644000175100001440000000160312531361077014107 0ustar hornikusers"print.floated" <- function(x, digits=max(3, getOption("digits") - 3), level = 0.95, ...) { K <- qnorm((1+level)/2) n <- length(x$coef) mat <- matrix("", n, 4) ci.mat <- matrix(0, n, 2) cm <- x$coefmat cat("Floating treatment contrasts for factor ", x$factor, "\n\n") mat[,1] <- names(x$coef) se <- sqrt(x$var) ci.mat[, 1] <- x$coef - K * se ci.mat[, 2] <- x$coef + K * se mat[,2] <- format(x$coef, digits=digits) mat[,3] <- format(se, digits=digits) ci.mat <- format(ci.mat, digits=digits) mat[,4] <- paste("(", ci.mat[,1], ",", ci.mat[,2], ")", sep="") dimnames(mat) <- list(rep("", n), c("Level", "Coefficient", "Std. Error", "95% Floating CI")) print(mat, quote=FALSE) cat("\nError limits over all contrasts: ", paste(format(c(0.99, x$limits), digits=2)[-1], collapse=","),"\n") } Epi/R/ftrend.R0000644000175100001440000000520312531361077012620 0ustar hornikusers"ftrend" <- function(object, ...) { if(length(object$xlevels) == 0) { stop("No factors in model") } xname <- names(object$xlevels)[1] if (!identical(object$contrasts[[1]], "contr.treatment")) { stop(paste("Treatment contrasts must be used for variable", xname)) } xlevels <- object$xlevels[[1]] nlevels <- length(xlevels) coefnames <- paste(xname, xlevels, sep="") ncoef <- length(coef(object)) if (!all(coefnames %in% names(coef(object)))) { stop("The model must not have an intercept term") } index1 <- match(coefnames, names(coef(object))) index2 <- (1:ncoef)[-index1] m <- length(index1) ncov <- length(index2) ## Centre the covariates according to Greenland et al (weighted mean = 0) X0 <- model.matrix(object) if (!is.null(object$weights)) { mu <- -apply(X0, 2, weighted.mean, object$weights )[index2] } else { mu <- -apply(X0, 2, mean)[index2] } mu.full <- rep(0, ncoef) mu.full[index2] <- mu X <- sweep(X0, 2, mu.full, "+") ## Information matrix with centred covariates if (!is.null(object$weights)) { J <- crossprod(X, sweep(X, 1, object$weights, "*")) } else { ## linear models J <- crossprod(X,X) } J11 <- J[index1, index1] J12 <- J[index1, index2] J21 <- J[index2, index1] J22 <- J[index2, index2] ## Variance matrix V <- solve(J) V11 <- V[index1, index1] V12 <- V[index1, index2] V21 <- V[index2, index1] V22 <- V[index2, index2] cal.V <- function(mu) { one <- as.matrix(rep(1,m)) mu <- as.matrix(mu) return(V11 - one %*% t(mu) %*% V21 - V12 %*% mu %*% t(one) + matrix(1, m, m) * (t(mu) %*% V22 %*% mu)[1,1]) } f <- function(mu) { V.mu <- cal.V(mu) # lambda is current vector of floating variances D <- sum(diag(V.mu)/lambda) - c(determinant(V.mu)$modulus) + sum(log(lambda)) - m S <- (1/sum(diag(J11)) + t(mu) %*% solve(J22) %*% mu)[1,1] grad1 <- - t(1/lambda) %*% V12 grad2 <- + sum(1/lambda) * t(mu) %*% V22 grad3 <- - t(mu) %*% solve(J22)/S attr(D,"gradient") <- 2 * (grad1 + grad2 + grad3) H1 <- V22 * sum(1/lambda) H2 <- -solve(J22)/S b <- solve(J22) %*% mu/S H3 <- 2 * b %*% t(b) attr(D, "hessian") <- 2 * (H1 + H2 + H3) return(D) } ## Initial value of lambda lambda <- diag(V[index1,index1]) ## Do the minimization nlm.out <- nlm(f, rep(0,ncov), check.analyticals=TRUE, ...) mu2 <- nlm.out$estimate ## Calculate parameter values and their covariance matrix ## if the covariates are appropriately centred coef <- coef(object)[index1] - c(crossprod(mu + mu2, coef(object)[index2])) return(list(coef=coef, vcov=cal.V(mu2))) } Epi/R/Relevel.R0000644000175100001440000000537412531361077012745 0ustar hornikusers # The levels method is already defined (in the utils package) # and hence imported in the NAMESPACE file levels.Lexis <- function( x ) { union( levels(x$lex.Cst), levels(x$lex.Xst) ) } # The Relevel method Relevel <- function (x, ...) UseMethod("Relevel") # The factor method is the default method Relevel.default <- Relevel.factor <- function( x, ref, first=TRUE, collapse="+", ... ) { # Function that collapses multiple sets of levels of a factor # if( !is.factor(x) ) { argnam <- deparse( substitute(x) ) f <- factor( x ) cat( "WARNING: ", argnam, "has been converted to a factor with levels:\n", levels( f ) ) } else f <- x # This is a copy of the relevel function from the base package: # relev <- function (x, ref, ...) { lev <- levels(x) if ( is.character( ref ) ) ref <- match(ref, lev) if ( any( is.na( ref ) ) ) stop( "any values in ref must be an existing level" ) nlev <- length( lev ) if ( any( ref < 1 ) || any( ref > nlev ) ) stop( paste( "ref=", paste( ref, collapse="," ), ": All elements must be in 1:", nlev, sep="" ) ) factor(x, levels = lev[c(ref, seq(along = lev)[-ref])]) } # If called with a non-list argument assume reshuffling of levels # if( !is.list( ref ) ) fnew <- relev( f, ref ) # If called with a list collapse levels in each list element. # if( is.list( ref ) ) { fnew <- f newnames <- levels( f ) uninames <- character( length( ref ) ) for( s in 1:length(ref) ) if ( is.character( ref[[s]] ) ) ref[[s]] <- match( ref[[s]], levels(f) ) # Check for replicates in levels to be grouped if( any( (tt<-table(unlist(ref))) > 1 ) ) stop("Factor level(s) ", levels( f )[as.numeric(names(tt)[tt>1])], " has been allocated to more than one new level.") for( s in 1:length(ref) ) { uninames[s] <- if( is.null( names( ref ) ) ) { paste( levels( f )[ref[[s]]], collapse=collapse ) } else if( names( ref )[s]=="" ) { paste( levels( f )[ref[[s]]], collapse=collapse ) } else names( ref )[s] newnames[ref[[s]]] <- rep( uninames[s], length( ref[[s]] ) ) } levels( fnew ) <- newnames if( !is.null( first ) ) { if( !first ) fnew <- factor( fnew, c( levels( f )[-unlist( ref )], uninames ) ) if( first ) fnew <- factor( fnew, c( uninames, levels( f )[-unlist( ref )] ) ) } } # This is in order to merge levels with identical names # factor( fnew, levels=levels(fnew) ) } Epi/R/contr.cum.R0000644000175100001440000000056612531361077013255 0ustar hornikuserscontr.cum <- function(n) { if (is.numeric(n) && length(n) == 1) levs <- 1:n else { levs <- n n <- length(n) } contr <- array(0, c(n, n), list(levs, levs)) contr[col(contr) <= row(contr)] <- 1 if (n < 2) stop(paste("Contrasts not defined for", n - 1, "degrees of freedom")) contr <- contr[, -1, drop = FALSE] contr } Epi/R/ci.lin.R0000644000175100001440000002157413073700077012522 0ustar hornikusers# The coef() methods in nlme and lme4 do something different # so we make a workaround by specifying our own generic methods COEF <- function( x, ... ) UseMethod("COEF") COEF.default <- function( x, ... ) coef( x, ... ) VCOV <- function( x, ... ) UseMethod("VCOV") VCOV.default <- function( x, ... ) vcov( x, ... ) # Then we can get from these methods what we want from lme, mer etc. COEF.lme <- function( x, ... ) nlme::fixed.effects( x ) COEF.mer <- function( x, ... ) lme4::fixef( x ) COEF.lmerMod <- function( x, ... ) lme4::fixef( x ) # The vcov returns a matrix with the wrong class so we strip that: VCOV.lme <- function( x, ... ) as.matrix(vcov( x )) VCOV.mer <- function( x, ... ) as.matrix(vcov( x )) VCOV.lmerMod <- function( x, ... ) as.matrix(vcov( x )) # For the rest of the non-conforming classes we then just need the methods not defined COEF.crr <- function( object, ... ) object$coef VCOV.crr <- function( object, ... ) object$var COEF.MIresult <- function( object, ... ) object$coefficients VCOV.MIresult <- function( object, ... ) object$variance COEF.mipo <- function( object, ... ) object$qbar VCOV.mipo <- function( object, ... ) object$t COEF.polr <- function( object, ... ) summary(object)$coefficients VCOV.gnlm <- function( object, ... ) object$cov VCOV.rq <- function( object, ... ) summary(object, cov=TRUE)$cov ci.lin <- function( obj, ctr.mat = NULL, subset = NULL, subint = NULL, diffs = FALSE, fnam = !diffs, vcov = FALSE, alpha = 0.05, df = Inf, Exp = FALSE, sample = FALSE ) { # First extract all the coefficients and the variance-covariance matrix cf <- COEF( obj ) vcv <- VCOV( obj ) # Workaround to expand the vcov matrix with 0s so that it matches # the coefficients vector in case of (extrinsic) aliasing. if( any( is.na( cf ) ) ) { if( inherits( obj, c("coxph") ) ) { # aliased parameters are only NAs in coef, but omitted from vcov wh <- !is.na(cf) cf <- cf[wh] vcv <- vcv[wh,wh] } else if( inherits( obj, c("clogistic") ) ) { cf[is.na(cf)] <- 0 } else { vM <- matrix( 0, length( cf ), length( cf ) ) dimnames( vM ) <- list( names( cf ), names( cf ) ) vM[!is.na(cf),!is.na(cf)] <- vcv cf[is.na(cf)] <- 0 vcv <- vM } } # Function for computing a contrast matrix for all possible # differences between a set of parameters. all.dif <- function( cf, pre=FALSE ) { nn <- length( cf ) nr <- nn * ( nn - 1 ) / 2 nam <- names( cf ) # Work out the indexes of parameter pairs to compare # xx <- numeric( 0 ) for( j in 2:nn ) xx <- c(xx, j:nn ) ctr <- cbind( rep( 1:(nn-1), (nn-1):1 ), xx ) # Now for the annotation: # Find out how large a proportion of rownames are identical i <- 1 while( all( substr( nam, 1, i ) == substr( nam[1], 1, i ) ) ) i <- i+1 # If a factor name is given, then use this, otherwise the identical part # of the parameter names if( is.character( pre ) ) { prefix <- pre pre <- TRUE } else { prefix <- substr( nam[1], 1, i-1 ) } rn <- paste( if( pre ) prefix else "", substring( nam[ctr[,1]], i ), "vs.", substring( nam[ctr[,2]], i ) ) # Finally, construct the contrast matrix and attach the rownames cm <- matrix( 0, nr, nn ) cm[cbind(1:nr,ctr[,1])] <- 1 cm[cbind(1:nr,ctr[,2])] <- -1 rownames( cm ) <- rn cm # end of function for all differences } # Were all differences requested? # if( diffs ) { if( is.character( subset ) ) { if ( inherits( obj, "lm" ) & length( grep( subset, names( obj$xlevels ) ) )>0 ) { # The case of factor level differences we find the relevant # subset of parameters by reconstructing names of parameters wf <- grep( subset, af <- names( obj$xlevels ) ) # All factor levels fn <- obj$xlevels[[af[wf]]] # Reconstruct names of relevant parameter names pnam <- paste( af[wf], fn, sep="" ) # Find them in the parameter vector wh <- match( pnam, names( coef( obj ) ) ) # Get the relevant subset, and stick in 0s for NAs cf <- coef( obj )[wh] cf[is.na( cf )] <- 0 vcv <- vcov( obj )[wh,wh] vcv[is.na( vcv )] <- 0 names( cf ) <- rownames( vcv ) <- colnames( vcv ) <- paste( subset, ": ", fn, sep="" ) } else { subset <- grep( subset, names( cf ) ) cf <- cf[subset] vcv <- vcv[subset,subset] } } else { cf <- cf[subset] vcv <- vcv[subset,subset] } ctr.mat <- all.dif( cf, pre=fnam ) } if( !diffs ) { if( is.character( subset ) ) { sb <- numeric(0) for( i in 1:length( subset ) ) sb <- c(sb,grep( subset[i], names( cf ) )) subset <- sb # unique( sb ) } if( is.character( subint ) ) { sb <- 1:length(cf) for( i in 1:length(subint) ) sb <- intersect( sb, grep(subint[i],names(cf)) ) subset <- sb # unique( sb ) } if( is.null( subset ) & is.null( subint ) ) subset <- 1:length( cf ) # Exclude units where aliasing has produced NAs. # Not needed after replacement with 0s # subset <- subset[!is.na( cf[subset] )] cf <- cf[subset] vcv <- vcv[subset,subset] if( is.null( ctr.mat ) ) { ctr.mat <- diag( length( cf ) ) rownames( ctr.mat ) <- names( cf ) } if( dim( ctr.mat )[2] != length(cf) ) stop( paste("\n Dimension of ", deparse(substitute(ctr.mat)), ": ", paste(dim(ctr.mat), collapse = "x"), ", not compatible with no of parameters in ", deparse(substitute(obj)), ": ", length(cf), sep = "")) } # Finally, here is the actual computation if( sample ) { # mvrnorm() returns a vector if sample=1, otherwise a sample x # length(cf) matrix - hence the rbind so we always get a row # matrix and res then becomes an nrow(ctr.mat) x sample matrix res <- ctr.mat %*% t( rbind(mvrnorm( sample, cf, vcv )) ) } else { ct <- ctr.mat %*% cf vc <- ctr.mat %*% vcv %*% t( ctr.mat ) se <- sqrt( diag( vc ) ) ci <- cbind( ct, se ) %*% ci.mat( alpha=alpha, df=df ) t0 <- cbind( se, ct/se, 2 * ( pnorm( -abs( ct / se ) ) ) ) colnames(t0) <- c("StdErr", "z", "P") res <- cbind(ci, t0)[, c(1, 4:6, 2:3), drop=FALSE] if( Exp ) { res <- cbind( res[,1:4 ,drop=FALSE], exp( res[,c(1,5,6),drop=FALSE] ) ) colnames( res )[5] <- "exp(Est.)" } } # Return the requested structure if( sample ) invisible( res ) else if( vcov ) invisible( list( est=ct, vcov=vc ) ) else res } # Handy wrapper ci.exp <- function( ..., Exp=TRUE, pval=FALSE ) { if( Exp ) ci.lin( ..., Exp=TRUE )[,if(pval) c(5:7,4) else 5:7 ,drop=FALSE] else ci.lin( ..., Exp=FALSE )[,if(pval) c(1,5,6,4) else c(1,5,6),drop=FALSE] } # Wrapper for predict.glm to give estimates and confidnece intervals ci.pred <- function( obj, newdata, Exp = NULL, alpha = 0.05 ) { if( !inherits( obj, "glm" ) ) stop("Not usable for non-glm objects") # get the prediction and se on the link scale zz <- predict( obj, newdata=newdata, se.fit=TRUE, type="link" ) # compute ci on link scale zz <- cbind( zz$fit, zz$se.fit ) %*% ci.mat( alpha=alpha ) # transform as requested if( missing(Exp) ) { return( obj$family$linkinv(zz) ) } else { if( Exp ) { return( exp(zz) ) } else if( !Exp ) return( zz ) } } ci.ratio <- function( r1, r2, se1 = NULL, # standard error of rt1 se2 = NULL, # standard error of rt2 log.tr = !is.null(se1) & !is.null(se2), # is this log-rates? alpha = 0.05, pval = FALSE ) { # Function to calculate RR with CIs from independent rates with CIs; # r1 and r2 are assumed to be vectors or 2 or 3-column matrices with # rate, lower and upper confidence limits repectively. if( is.matrix(r1) & !is.null(se1) ) warning("r1 is matrix, se1 is ignored") if( is.matrix(r2) & !is.null(se2) ) warning("r2 is matrix, se2 is ignored") # if supplied as 1-column matrix chnage to vector if( is.matrix(r1) ) if( ncol(r1)==1 ) r1 <- as.vector( r1 ) if( is.matrix(r2) ) if( ncol(r2)==1 ) r2 <- as.vector( r2 ) # move to log scale if( !log.tr ) { r1 <- log( r1 ) r2 <- log( r2 ) } # how wide are the condidence intervals if( is.matrix(r1) ) if( ncol(r1)>1 ) rg1 <- t( apply(r1,1,range) ) if( is.matrix(r2) ) if( ncol(r2)>1 ) rg2 <- t( apply(r2,1,range) ) # get the estimates on the log-scale R1 <- if( is.matrix(r1) ) apply( rg1, 1, mean ) else r1 R2 <- if( is.matrix(r2) ) apply( rg2, 1, mean ) else r2 if( is.null(se1) ) se1 <- apply( rg1, 1, diff ) / (2*qnorm(1-alpha/2)) if( is.null(se2) ) se2 <- apply( rg2, 1, diff ) / (2*qnorm(1-alpha/2)) # compute the RR and the c.i. and optionally the p-value lrr <- R1 - R2 slrr <- sqrt( se1^2 + se2^2 ) rr <- cbind(lrr,slrr) %*% ci.mat(alpha=alpha) if( !log.tr ) rr <- exp( rr ) if( pval ) return( cbind( rr, 1-pchisq( (lrr/slrr)^2, 1 ) ) ) else return( rr ) } Epi/R/fit.mult.r0000644000175100001440000000260212531361077013140 0ustar hornikusersfit.mult <- function(y, rates.frame, cov.frame, start) { if (missing(start)) { ## Fit model without covariates to get initial rates estimates glm.out.rates <- fit.baseline(y, rates.frame) ## Initial values for iterative fitting lambda <- coef(glm.out.rates) beta <- rep(0, ncol(cov.frame)) } else { lambda <- start[1:ncol(rates.frame)] beta <- start[ncol(rates.frame) + 1:ncol(cov.frame)] } niter <- 1 cy <- 1 - y while(TRUE) { ## covariates model off <- log(-as.matrix(rates.frame) %*% lambda) glm.out.cov <- glm(cy ~ -1 + offset(off) + ., family=binomial(link=cloglog), data=cov.frame, start=beta, maxit=100) beta <- coef(glm.out.cov) ## rates model wgt <- exp(as.matrix(cov.frame) %*% beta) temp.rates.frame <- wgt * rates.frame glm.out.rates <- glm(y ~ -1 + ., family=binomial(link=log), data=temp.rates.frame, start=lambda, maxit=100) lambda <- coef(glm.out.rates) ## Check convergence ## Convergence <==> deviances are equal TOL <- max(glm.out.cov$control$epsilon, glm.out.rates$control$epsilon) dev1 <- glm.out.cov$deviance dev2 <- glm.out.rates$deviance if (abs(dev1 - dev2)/(0.1 + abs(dev1)) < TOL) break else niter <- niter + 1 } return(list( rates=glm.out.rates, cov=glm.out.cov, niter=niter)) } Epi/R/Wald.R0000644000175100001440000000100412531361077012220 0ustar hornikusersWald <- function( obj, H0=0, ... ) { rl <- ci.lin( obj, ..., vcov=TRUE ) beta <- rl$est vcov <- rl$vcov if( missing( H0 ) ) H0 <- beta*0 if( length(H0) != length(beta) ) stop( "H0 has length ", length(H0), " but the set of selected paramteters has length ", length(beta), ":\n", paste(round(beta,options()[["digits"]]),collapse=" ") ) chi <- t( beta-H0 ) %*% solve( vcov, beta-H0 ) df <- length(beta) p <- 1 - pchisq( chi, df ) c( "Chisq"=chi, "d.f."=df, "P"=p ) } Epi/R/plotevent.r0000644000175100001440000000217112531361077013417 0ustar hornikusersplotevent <- function(last.well,first.ill,data) { subsetdata <- data[!is.na(data[,first.ill]),c(last.well,first.ill)] subsetdata$n <- seq(1,dim(subsetdata)[1]) plot(c(subsetdata[,1], subsetdata[,2]),rep(0,2*nrow(subsetdata)), bty="n", yaxt="n", type="n", xlim=c(round(min(subsetdata[,1],subsetdata[,2],na.rm=T)),round(max(subsetdata[,1],subsetdata[,2],na.rm=T))), ylim=c(-2, max(subsetdata[,3])), xlab="Time",ylab="Conversions", main=paste("Times between ",last.well," and ",first.ill,"",sep="")) mtext(seq(0,nrow(subsetdata),5)[-1],side=2,at=seq(0,nrow(subsetdata),5)[-1],las=1,line=0) mtext("Eq Cl",side=2,at=-2,las=1, padj=0,col="blue",font=2) segments(subsetdata[,1],subsetdata[,3],subsetdata[,2],subsetdata[,3],lwd=1) left <- unique(subsetdata[,1]) right <- unique(subsetdata[,2]) names(left) <- rep("0",length(left)) names(right) <- rep("1",length(right)) MM <- sort(c(left,right)) type <- as.numeric(names(MM)) type2 <- c(type[-1],0) diff <- type-type2 int <- MM[diff<0|diff>0] mat <- matrix(int,length(int)/2,2,byrow=TRUE) d <- mat[,1] - mat[,2] segments(mat[,1][d!=0],-2,mat[,2][d!=0],-2,lwd=3,col="blue") } Epi/R/ci.pd.R0000644000175100001440000000604512531361077012340 0ustar hornikusersci.pd <- function( aa, bb=NULL, cc=NULL, dd=NULL, method = "Nc", alpha = 0.05, conf.level = 0.95, digits = 3, print = TRUE, detail.labs = FALSE ) { # Computes the approximate c.i. for the probability difference # Optional methods: # -- "AC", Agresti and Caffo, Am Statistician (2000), # -- "Nc", method 10 from Newcombe, Stat.Med. 17, (1998), pp.873 ff. if ( !(method %in% c("AC", "Nc") ) ) stop( paste('Method', method, 'unsupported: Only "Nc" and "AC" supported') ) # Fix the confidence level if( missing( alpha ) ) alpha <- 1 - conf.level if( missing( conf.level ) ) conf.level <- 1 - alpha # Allow various forms of vector and matrix input prefix <- "" if( is.vector( aa ) & length( aa ) > 1 ) prefix <- names( aa ) if( length( dim( aa ) ) == 2 ) { bb <- aa[1,2] cc <- aa[2,1] dd <- aa[2,2] aa <- aa[1,1] } if( length( dim( aa ) ) == 3 ) { prefix <- paste( if( is.null( dimnames( aa ) ) ) 1:dim(aa)[3] else dimnames( aa )[[3]], ": ", sep="" ) bb <- aa[1,2,] cc <- aa[2,1,] dd <- aa[2,2,] aa <- aa[1,1,] } if( length( dim( aa ) ) > 3 ) stop( "Maximal array dimension (3) exceeded!" ) # Function to give roots in a 2nd degree polynomial # (Polyroot does not work on vectors of coefficients) pol2 <- function( Aye, Bee, Sea ) { Dee <- Bee^2 - 4 * Aye * Sea lo <- ifelse( Dee >= 0, ( -Bee - sqrt( Dee ) ) / ( 2 * Aye ), NA ) hi <- ifelse( Dee >= 0, ( -Bee + sqrt( Dee ) ) / ( 2 * Aye ), NA ) cbind( lo, hi ) } # Put the data in the right form x1 <- aa n1 <- aa+cc p1 <- x1/n1 x2 <- bb n2 <- bb+dd p2 <- x2/n2 pd <- x1/n1 - x2/n2 z <- qnorm( 1-alpha/2 ) zz <- z^2 if ( method == "AC" ) { x1.1 <- x1+1 n1.2 <- n1+2 x2.1 <- x2+1 n2.2 <- n2+2 p1.1 <- x1.1/n1.2 p2.1 <- x2.1/n2.2 pd.1 <- p1.1 - p2.1 SE.4 <- sqrt( p1.1 * ( 1-p1.1) /n1.2 + p2.1 * ( 1-p2.1) /n2.2 ) res <- cbind( n1, p1, n2, p2, pd, pd.1 - z*SE.4, pd.1 + z*SE.4 ) } else if ( method == "Nc" ) { A1 <- 1 + zz / n1 B1 <- -2*x1/n1 - zz / n1 C1 <- ( x1 / n1 )^2 r1 <- pol2( A1, B1, C1 ) A2 <- 1 + zz / n2 B2 <- -2*x2/n2 - zz / n2 C2 <- ( x2 / n2 )^2 r2 <- pol2( A2, B2, C2 ) dlt <- sqrt( ( x1/n1 - r1[,1] )^2 + ( x2/n2 - r2[,2] )^2 ) eps <- sqrt( ( x1/n1 - r1[,2] )^2 + ( x2/n2 - r2[,1] )^2 ) res <- cbind(n1, p1, n2, p2, pd, pd-dlt, pd+eps ) } colnames( res ) <- c("n1","p1","n2","p2", "diff",paste( alpha/2 *100,"%",sep=""), paste((1-alpha/2)*100,"%",sep="") ) rownames( res ) <- prefix if( detail.labs ) rownames( res ) <- paste( prefix, ": ", aa, "/(", aa, "+", cc, ") - ", bb, "/(", bb, "+", dd, ")", sep="" ) if( print ) print( round( res, digits ) ) invisible( res ) } Epi/R/Cplot.R0000644000175100001440000000514312705663505012426 0ustar hornikusersCplot <- function( rates, age = as.numeric( rownames( rates ) ), per = as.numeric( colnames( rates ) ), grid = FALSE, c.grid = grid, ygrid = grid, col.grid = gray( 0.9 ), c.lim = NULL, ylim = range( rates[rates>0], na.rm=TRUE ), at = NULL, labels = paste( at ), c.lab = names( dimnames( rates ) )[2], ylab = deparse( substitute( rates ) ), type = "l", lwd = 2, lty = 1, col = par( "fg" ), log.ax = "y", las = 1, xannx = 1/20, ann = FALSE, cex.ann = 0.8, a.thin = seq( 1, length( age ), 2 ), ... ) { # Convert the age-period table to an age-cohort table rt <- as.table( rates ) dimnames( rt ) <- list( age = age, per = per ) rtf <- data.frame( rt ) rtf$age <- as.numeric( as.character( rtf$age ) ) rtf$per <- as.numeric( as.character( rtf$per ) ) # Check that age and period classe have equal lengths: wa <- diff( ag <- sort( unique(rtf$age) ) ) wp <- diff( pg <- sort( unique(rtf$per) ) ) if( unique(wa) != unique(wp) ) stop("Age and period intervals must have same width:\n", "Ages:", ag, "\n", "Periods:", pg, "\n", "No plot with cohort produced.\n" ) # Table by age and cohort ac <- tapply( rtf$Freq, list( rtf$age, rtf$per-rtf$age ), mean ) coh <- as.numeric( colnames( ac ) ) if( is.null( c.lim ) ) c.lim <- range( coh, na.rm=TRUE ) + c(0,diff( range( coh ) )/30) * ann # Plot the frame if( ann ) c.lim <- c.lim - c(diff( range( coh ) ) * xannx,0) matplot( coh, t(ac), type="n", xlim=c.lim, ylim=ylim, xlab=c.lab, ylab=ylab, log=log.ax, las=las, yaxt=if( !is.null( at ) ) "n" else "s" ) if( !is.null( at ) ) axis( side=2, at=at, labels=labels, yaxt="s", las=las ) # and the grid if required if( !missing( c.grid ) | !missing( grid ) ) { if( is.logical( c.grid ) & c.grid[1] ) c.grid <- nice( coh, log=par("xlog") ) abline( v=c.grid, col=col.grid ) } if( !missing( ygrid ) | !missing( grid ) ) { if( is.logical( ygrid ) & ygrid[1] ) ygrid <- nice( rates[!is.na(rates)], log=par("ylog") ) abline( h=ygrid, col=col.grid ) } box() # then the curves matlines( coh, t(ac), lwd=lwd, lty=lty, col=col, type=type, ... ) # annotate them if required (every second by default ) if( ann ) { nr <- nrow( ac ) nc <- ncol( ac ) # Find the cohorts for the last rates in each age-class c.end <- rev( per )[1] - age text( c.end[a.thin], rates[,ncol(rates)][a.thin], paste( "", age[a.thin] ), adj=c(0,0.5), cex=cex.ann, col=if( length(col)==1 ) col else col[a.thin] ) } } Epi/R/rm.tr.R0000644000175100001440000000274112743677240012413 0ustar hornikusersrm.tr <- function( obj, from, to ) { # checks if( from==to) stop( "Don't be silly, 'from' and 'to' are identical." ) if( !(from %in% levels(obj) ) ) stop( "'from' not a state in the object." ) if( !( to %in% levels(obj) ) ) stop( " 'to' not a state in the object." ) ### These things do not change over the purging iterations # Sort the rows of the object and count them obj <- obj[order(obj$lex.id,obj[,timeScales(obj)[1]]),] nrw <- nrow( obj ) # First obs for each person no1 <- !duplicated( obj$lex.id ) wh1 <- which( no1 ) ### Utility function doing the work inside the loop purge.one <- function( obj, from, to, nrw, wh1 ) { # Where are the illegal transitions chX <- ( paste( obj$lex.Cst, obj$lex.Xst ) == paste( from, to ) ) whX <- which( chX ) if( length(whX)>0 ) { # Change lex.Xst in this record obj$lex.Xst[whX] <- obj$lex.Cst[whX] # and lex.Cst in next record, but only if it is not a new person whX <- setdiff( whX[whX=sum( x*w*y). # Avoids computing the entire projection matrix # X %*% inverse( X'WX ) %*% (XW)' by first computing # inverse( X'WX ) %*% (XW)'M # (which is (p x p) %*% (p x n) %*% (n x k), i.e. (p x k) ) # and then premultiplying X (n x p) hence avoiding making # a n x n matrix underway (note that n is large, p is small). # Note multiplication by W (diagional matrix) is done by # vector multiplication using the recycling facility of R. { if( nrow(X) != length(weight) ) stop( "Dimension of space and length of weights differ!" ) if( nrow(X) != nrow(M) ) stop( "Dimension of space and rownumber of model matrix differ!" ) Pp <- solve( crossprod( X * sqrt(weight) ), t( X * weight ) ) %*% M PM <- X %*% Pp if (orth) PM <- M - PM else PM } Epi/R/xgrep.R0000644000175100001440000000036013100324421012443 0ustar hornikusersfgrep <- function( pattern, x, ... ) x [grep( pattern, x , ... )] ngrep <- function( pattern, x, ... ) names(x)[grep( pattern, names(x), ... )] lgrep <- function( pattern, x, ... ) levels(x)[grep( pattern, levels(x), ... )] Epi/R/Lexis.diagram.R0000644000175100001440000000742312531361077014033 0ustar hornikusersLexis.diagram <- function( age = c( 0, 60), alab = "Age", date = c( 1940, 2000 ), dlab = "Calendar time", int = 5, lab.int = 2*int, col.life = "black", lwd.life = 2, age.grid = TRUE, date.grid = TRUE, coh.grid = FALSE, col.grid = gray(0.7), lwd.grid = 1, las = 1, entry.date = NA, entry.age = NA, exit.date = NA, exit.age = NA, risk.time = NA, birth.date = NA, fail = NA, cex.fail = 1.1, pch.fail = c(NA,16), col.fail = rep( col.life, 2 ), data = NULL, ... ) { # Function to plot a Lexis-diagram # # BxC, 2002, revsions in 2005 ## Get variables from data argument, if supplied, or from parent ## frame if not. entry.date <- eval(substitute(entry.date), data) entry.age <- eval(substitute(entry.age ), data) exit.date <- eval(substitute(exit.date ), data) exit.age <- eval(substitute(exit.age ), data) risk.time <- eval(substitute(birth.date), data) birth.date <- eval(substitute(birth.date), data) fail <- eval(substitute(fail ), data) # First expand intervals to both dimensions # int[1:2] <- c( int, int)[1:2] lab.int[1:2] <- c(lab.int,lab.int)[1:2] # Plot the diagram # plot( NA, xlim=date, xaxt="n", xaxs="i", xlab=dlab, ylim=age, yaxt="n", yaxs="i", ylab=alab, ... ) axis( side=1, at=seq( date[1], date[2], lab.int[2] ), las=las ) axis( side=2, at=seq( age[1], age[2], lab.int[1] ), las=las ) box( col="white" ) # par("fg") ) # Then the required grids # if ( age.grid ) { abline( h = seq( age[1], age[2], int[1] ), col=col.grid, lwd=lwd.grid ) } if ( date.grid ) { abline( v = seq( date[1], date[2], int[2] ), col=col.grid, lwd=lwd.grid ) } ages <- seq( age[1], age[2], min( int ) ) dates <- seq( date[1], date[2], min( int ) ) if ( coh.grid ) { segments( rep( date[1], length( ages ) ), ages, pmin( date[1] + ( age[2] - ages ), date[2] ), pmin( ages + ( date[2] - date[1] ), age[2] ), col=col.grid, lwd=lwd.grid ) segments( dates, rep( age[1], length( dates ) ), pmin( dates + ( age[2] - age[1] ), date[2] ), pmin( age[1] + ( date[2] - dates ), age[2] ), col=col.grid, lwd=lwd.grid ) } # Check if data for lifelines is supplied and plot lifelines if so # if( sum( !is.na( list( entry.date, entry.age, exit.date, exit.age, birth.date, risk.time ) ) ) > 2 ) { LL <- Lexis.lines( entry.date = entry.date, exit.date = exit.date, birth.date = birth.date, entry.age = entry.age, exit.age = exit.age, risk.time = risk.time, col.life = col.life, lwd.life = lwd.life, fail = fail, cex.fail = cex.fail, pch.fail = pch.fail, col.fail = col.fail, data = data ) invisible( LL ) } } Epi/R/apc.plot.R0000644000175100001440000001242512531361077013062 0ustar hornikusersplot.apc <- apc.plot <- function( x, r.txt="Rate", ... ) { if( !inherits( x, "apc" ) ) stop( "Argument must be an apc-object" ) # Determine the ranges of the horizontal axes a.lab = nice( x$Age[,1] ) cp.lab = nice( c(x$Per[,1],x$Coh[,1]), high=0.1 )[-1] # The necessary range of the two vertical axes r.rg <- range( x$Age[,-1] ) rr.rg <- range( rbind( x$Per[,-1], x$Coh[,-1] ) ) # Align the RR with the rates on an integer power of 10 rr.ref <- 10^floor( log10(r.rg[2])-log10(rr.rg[2]) ) # Find the tic-marks for the two vertical axes r.tic <- nice( r.rg, log=T, lpos=1:9 ) rr.tic <- nice( rr.rg, log=T, lpos=1:9 ) # Expand to cover it all r.tic <- sort( unique( c( r.tic, rr.tic*rr.ref ) ) ) rr.tic <- r.tic/rr.ref # Find the places for labels r.lab <- nice( r.tic, log=T, lpos=c(1,2,5) ) rr.lab <- nice( rr.tic, log=T, lpos=c(1,2,5) ) r.lab <- r.lab[ r.lab>min( r.tic) & r.labmin(rr.tic) & rr.lab 1) for (g in 2:ng) for (t in (cumsum(x$strata)[g-1]+1): cumsum(x$strata)[g] ) gr[t] <- g lt <- rep(1, ng) co <- rep(1, ng) if (!is.null(lty)) lt = lty if (!is.null(col)) co = col CI <- x$pstate[, 1] for (e in 1:ne) if (event==e) CI <- x$pstate[, e] plot( c(0, time[gr==1], max(time[gr==1]) ), c(0, CI[gr==1], max(CI[gr==1]) ), type = 's', ylim = ylim, xlab = xlab, ylab = ylab , col = co[1], lty = lt[1], ... ) if (ng > 1) for (g in 2:ng ) lines( c(0, time[gr==g], max(time[gr==g]) ), c(0, CI[gr==g], max(CI[gr==g]) ), type = 's', lty=lt[g], col = co[g], ... ) } else print(paste("Error: event must be an integer from 1 to", ne)) } Epi/R/Aplot.R0000644000175100001440000000622112531361077012416 0ustar hornikusersAplot <- function( rates, age = as.numeric( dimnames( rates )[[1]] ), per = as.numeric( dimnames( rates )[[2]] ), grid = FALSE, a.grid = grid, ygrid = grid, col.grid = gray( 0.9 ), a.lim = range( age, na.rm=TRUE ), ylim = range( rates[rates>0], na.rm=TRUE ), at = NULL, labels = paste( at ), a.lab = names( dimnames( rates ) )[1], ylab = deparse( substitute( rates ) ), type = "l", lwd = 2, lty = 1, col = par( "fg" ), log.ax = "y", las = 1, c.col = col, p.col = col, c.ann = FALSE, p.ann = FALSE, xannx = 1/20, cex.ann = 0.8, c.thin = seq( 2, length( age ) + length( per ) - 1, 2 ), p.thin = seq( 1, length( per ), 2 ), p.lines = TRUE, c.lines = !p.lines, ... # arguments passed on to matlines() ) { # Plot the frame if( p.ann ) a.lim <- a.lim + c(0,diff( range( age ) ) * xannx) if( c.ann ) a.lim <- a.lim - c( diff( range( age ) ) * xannx,0) matplot( age, rates, type="n", xlim=a.lim, ylim=ylim, xlab=a.lab, ylab=ylab, log=log.ax, las=las, yaxt=if( !is.null( at ) ) "n" else "s" ) if( !is.null( at ) ) axis( side=2, at=at, labels=labels, yaxt="s", las=las ) # and the grid if required: if( !missing( a.grid ) | !missing( grid ) ) { if( is.logical( a.grid ) & a.grid[1] ) a.grid <- nice( age, log=par("xlog") ) abline( v=a.grid, col=col.grid ) } if( !missing( ygrid ) | !missing( ygrid ) ) { if( is.logical( ygrid ) & ygrid[1] ) ygrid <- nice( rates[!is.na(rates)], log=par("ylog") ) abline( h=ygrid, col=col.grid ) } box() # What lines were required? if( !missing( c.lines ) & missing( p.lines ) ) p.lines <- !c.lines # Period curves: if( p.lines ){ matlines( age, rates, type=type, lwd=lwd, lty=lty, col=p.col, ... ) # annotate them if required (every second by default): if( p.ann ) { nr <- nrow( rates ) nc <- ncol( rates ) text( rep( age[nr], nc )[p.thin], rates[nr,][p.thin], paste( "", per[p.thin] ), adj=c(0,0.5), cex=cex.ann, col=if( length(p.col)==1 ) p.col else p.col[p.thin] ) } } # Cohort curves: if( c.lines ){ # First convert the age-period table to an age-cohort frame rt <- as.table( rates ) dimnames( rt ) <- list( age = age, per = per ) rtf <- data.frame( rt ) rtf$age <- as.numeric( as.character( rtf$age ) ) rtf$per <- as.numeric( as.character( rtf$per ) ) ac <- tapply( rtf$Freq, list( rtf$age, rtf$per-rtf$age ), mean ) matlines( age, ac, type=type, lwd=lwd, lty=lty, col=c.col, ... ) # annotate them if required (every other by default): if( c.ann ) { nr <- nrow( rt ) nc <- ncol( rt ) # Find the ages, cohorts and rates where the cohort curves starts a.min <- c( rev( age ), rep( age[1], nc-1 ) ) p.min <- c( rep( per[1], nr-1 ), per ) c.min <- p.min - a.min r.min <- c(rt[nr:1,1],rt[1,2:nc]) text( a.min[c.thin], r.min[c.thin], paste( "", c.min[c.thin] ), adj=c(1,0.5), cex=cex.ann, col=if( length(c.col)==1 ) c.col else c.col[c.thin] ) } } } Epi/R/stack.Lexis.R0000644000175100001440000000377112661112712013530 0ustar hornikusers# Functions to facilitate analysis of multistate models # The stack method is already defined (in the utils package) # and hence imported in the NAMESPACE file stack.Lexis <- function( x, ... ) { ## Function to stack obervations for survival analysis ## Make sure that lex.Cst and lex.Xst are factors with identical levels x <- Relevel( x ) ## Same covariates xx <- data.frame( cbind( x, lex.Tr="", lex.Fail=FALSE ) )[NULL,] tm <- tmat.Lexis( x ) for( fst in levels(factor(x$lex.Cst)) ) for( tst in levels(factor(x$lex.Xst)) ) if( !is.na(tm[fst,tst]) ) { tr = paste( fst, "->", tst , sep="" ) zz <- x[x$lex.Cst==fst,] xx <- rbind( xx, data.frame( zz, lex.Tr=tr, lex.Fail=(zz$lex.Xst==tst) ) ) } xx$lex.Tr <- factor(xx$lex.Tr) ## Reshuffle the variables wh.om <- match( "lex.Xst", names(xx) ) wh.rl <- match( c("lex.Tr","lex.Fail"), names(xx) ) xx <- xx[,c(1:wh.om,wh.rl,(wh.om+1):(wh.rl[1]-1))] attr(xx,"breaks") <- attr(x, "breaks") attr(xx,"time.scales") <- attr(x, "time.scales") class( xx ) <- c("stacked.Lexis","data.frame") xx } subset.stacked.Lexis <- function(x, ... ) { y <- subset.data.frame(x, ...) attr(y,"breaks") <- attr(x, "breaks") attr(y,"time.scales") <- attr(x, "time.scales") class(y) <- c("stacked.Lexis","data.frame") return(y) } transform.stacked.Lexis <- function(`_data`, ... ) { save.at <- attributes(`_data`) ## We can't use NextMethod here because of the special scoping rules ## used by transform.data.frame y <- base::transform.data.frame(`_data`, ...) save.at[["names"]] <- attr(y, "names") attributes(y) <- save.at y } # The tmat method tmat <- function (x, ...) UseMethod("tmat") tmat.Lexis <- function( x, Y=FALSE, mode="numeric", ... ) { zz <- table(x$lex.Cst,x$lex.Xst) class(zz) <- "matrix" if( Y ) { diag(zz) <- summary( x, simplify=FALSE )[[1]][1:nrow(zz),"Risk time:"] } else diag(zz) <- NA zz[zz==0] <- NA if( mode != "numeric" ) zz <- !is.na(zz) zz } Epi/R/summary.Icens.r0000644000175100001440000000140712531361077014135 0ustar hornikuserssummary.Icens <- function( x, scale=1, ... ) { if( attr( x, "model" ) == "MRR" ) { if( is.null( x$rates ) ) { class( x ) <- "glm" emat <- ci.lin( x ) } else { rate.est <- ci.lin( x$rates ) rate.est[,-(3:4)] <- rate.est[,-(3:4)] * scale emat <- rbind( cbind( rate.est, RR=NA )[,c(1:4,7,5:6)], ci.lin( x$cov, Exp=T ) ) } } if( attr( x, "model" ) == "AER" ) { rate.est <- ci.lin( x$rates ) rate.est[,-(3:4)] <- rate.est[,-(3:4)] * scale emat <- rate.est } if( length( x ) == 4 ) { b.est <- x[["boot.ci"]] colnames( b.est ) <- c( "Boot-med", "lo", "hi" ) emat <- cbind( emat, b.est ) } emat } Epi/vignettes/0000755000175100001440000000000013142414370013014 5ustar hornikusersEpi/vignettes/index.html0000644000175100001440000000130013051467223015007 0ustar hornikusers Vignettes for the Epi package</a>

    Vignettes for the Epi package

    Here is the website for the Epi package. Epi/vignettes/Follow-up.rnw0000644000175100001440000003624112531361102015431 0ustar hornikusers\SweaveOpts{results=verbatim,keep.source=TRUE,include=FALSE} %\VignetteIndexEntry{Follow-up data with the Epi package} \documentclass[a4paper,twoside,12pt]{article} \usepackage[english]{babel} \usepackage{booktabs,rotating,graphicx,amsmath,verbatim,fancyhdr,Sweave} \usepackage[colorlinks,linkcolor=red,urlcolor=blue]{hyperref} \newcommand{\R}{\textsf{\bf R}} \renewcommand{\topfraction}{0.95} \renewcommand{\bottomfraction}{0.95} \renewcommand{\textfraction}{0.1} \renewcommand{\floatpagefraction}{0.9} \DeclareGraphicsExtensions{.pdf,.jpg} \setcounter{secnumdepth}{1} \setcounter{tocdepth}{1} \oddsidemargin 1mm \evensidemargin 1mm \textwidth 160mm \textheight 230mm \topmargin -5mm \headheight 8mm \headsep 5mm \footskip 15mm \begin{document} \raggedleft \pagestyle{empty} \vspace*{0.1\textheight} \Huge {\bf Follow-up data with the\\ \texttt{Epi} package} \noindent\rule[-1ex]{\textwidth}{5pt}\\[2.5ex] \Large Summer 2014 \vfill \normalsize \begin{tabular}{rl} Michael Hills & Retired \\ & Highgate, London \\[1em] Martyn Plummer & International Agency for Research on Cancer, Lyon\\ & \texttt{plummer@iarc.fr} \\[1em] Bendix Carstensen & Steno Diabetes Center, Gentofte, Denmark\\ & \small \& Department of Biostatistics, University of Copenhagen\\ & \normalsize \texttt{bxc@steno.dk} \\ & \url{www.pubhealth.ku.dk/~bxc} \end{tabular} \normalsize \newpage \raggedright \parindent 3ex \parskip 0ex \tableofcontents \cleardoublepage \setcounter{page}{1} \pagestyle{fancy} \renewcommand{\sectionmark}[1]{\markboth{\thesection #1}{\thesection \ #1}} \fancyhead[OL]{\sl Follow-up data with the \texttt{Epi} package.} \fancyhead[ER]{\sl \rightmark} \fancyhead[EL,OR]{\bf \thepage} \fancyfoot{} \renewcommand{\headrulewidth}{0.1pt} <<>>= library(Epi) print( sessionInfo(), l=F ) @ \section{Follow-up data in the \texttt{Epi} package} In the \texttt{Epi}-package, follow-up data is represented by adding some extra variables to a dataframe. Such a dataframe is called a \texttt{Lexis} object. The tools for handling follow-up data then use the structure of this for special plots, tabulations etc. Follow-up data basically consists of a time of entry, a time of exit and an indication of the status at exit (normally either ``alive'' or ``dead''). Implicitly is also assumed a status \emph{during} the follow-up (usually ``alive''). \begin{figure}[htbp] \centering \setlength{\unitlength}{1pt} \begin{picture}(210,70)(0,75) %\scriptsize \thicklines \put( 0,80){\makebox(0,0)[r]{Age-scale}} \put( 50,80){\line(1,0){150}} \put( 50,80){\line(0,1){5}} \put(100,80){\line(0,1){5}} \put(150,80){\line(0,1){5}} \put(200,80){\line(0,1){5}} \put( 50,77){\makebox(0,0)[t]{35}} \put(100,77){\makebox(0,0)[t]{40}} \put(150,77){\makebox(0,0)[t]{45}} \put(200,77){\makebox(0,0)[t]{50}} \put( 0,115){\makebox(0,0)[r]{Follow-up}} \put( 80,105){\makebox(0,0)[r]{\small Two}} \put( 90,105){\line(1,0){87}} \put( 90,100){\line(0,1){10}} \put(100,100){\line(0,1){10}} \put(150,100){\line(0,1){10}} \put(180,105){\circle{6}} \put( 95,110){\makebox(0,0)[b]{1}} \put(125,110){\makebox(0,0)[b]{5}} \put(165,110){\makebox(0,0)[b]{3}} \put( 50,130){\makebox(0,0)[r]{\small One}} \put( 60,130){\line(1,0){70}} \put( 60,125){\line(0,1){10}} \put(100,125){\line(0,1){10}} \put(130,130){\circle*{6}} \put( 80,135){\makebox(0,0)[b]{4}} \put(115,135){\makebox(0,0)[b]{3}} \end{picture} \caption{\it Follow-up of two persons} \label{fig:fu2} \end{figure} \section{Timescales} A timescale is a variable that varies deterministically \emph{within} each person during follow-up, \textit{e.g.}: \begin{itemize} \item Age \item Calendar time \item Time since treatment \item Time since relapse \end{itemize} All timescales advance at the same pace, so the time followed is the same on all timescales. Therefore, it suffices to use only the entry point on each of the time scale, for example: \begin{itemize} \item Age at entry. \item Date of entry. \item Time since treatment (\emph{at} treatment this is 0). \item Time since relapse (\emph{at} relapse this is 0).. \end{itemize} In the \texttt{Epi} package, follow-up in a cohort is represented in a \texttt{Lexis} object. A \texttt{Lexis} object is a dataframe with a bit of extra structure representing the follow-up. For the \texttt{nickel} data we would construct a \texttt{Lexis} object by: <<>>= data( nickel ) nicL <- Lexis( entry = list( per=agein+dob, age=agein, tfh=agein-age1st ), exit = list( age=ageout ), exit.status = ( icd %in% c(162,163) )*1, data = nickel ) @ The \texttt{entry} argument is a \emph{named} list with the entry points on each of the timescales we want to use. It defines the names of the timescales and the entry points. The \texttt{exit} argument gives the exit time on \emph{one} of the timescales, so the name of the element in this list must match one of the neames of the \texttt{entry} list. This is sufficient, because the follow-up time on all time scales is the same, in this case \texttt{ageout - agein}. Now take a look at the result: <<>>= str( nickel ) str( nicL ) head( nicL ) @ The \texttt{Lexis} object \texttt{nicL} has a variable for each timescale which is the entry point on this timescale. The follow-up time is in the variable \texttt{lex.dur} (\textbf{dur}ation). There is a \texttt{summary} function for \texttt{Lexis} objects that list the numer of transitions and records as well as the total follow-up time: <<>>= summary( nicL ) @ We defined the exit status to be death from lung cancer (ICD7 162,163), i.e. this variable is 1 if follow-up ended with a death from this cause. If follow-up ended alive or by death from another cause, the exit status is coded 0, i.e. as a censoring. Note that the exit status is in the variable \texttt{lex.Xst} (e\textbf{X}it \textbf{st}atus. The variable \texttt{lex.Cst} is the state where the follow-up takes place (\textbf{C}urrent \textbf{st}atus), in this case 0 (alive). It is possible to get a visualization of the follow-up along the timescales chosen by using the \texttt{plot} method for \texttt{Lexis} objects. \texttt{nicL} is an object of \emph{class} \texttt{Lexis}, so using the function \texttt{plot()} on it means that \R\ will look for the function \texttt{plot.Lexis} and use this function. <>= plot( nicL ) @ The function allows a lot of control over the output, and a \texttt{points.Lexis} function allows plotting of the endpoints of follow-up: <>= par( mar=c(3,3,1,1), mgp=c(3,1,0)/1.6 ) plot( nicL, 1:2, lwd=1, col=c("blue","red")[(nicL$exp>0)+1], grid=TRUE, lty.grid=1, col.grid=gray(0.7), xlim=1900+c(0,90), xaxs="i", ylim= 10+c(0,90), yaxs="i", las=1 ) points( nicL, 1:2, pch=c(NA,3)[nicL$lex.Xst+1], col="lightgray", lwd=3, cex=1.5 ) points( nicL, 1:2, pch=c(NA,3)[nicL$lex.Xst+1], col=c("blue","red")[(nicL$exp>0)+1], lwd=1, cex=1.5 ) @ The results of these two plotting commands are in figure \ref{fig:Lexis-diagram}. \begin{figure}[tb] \centering \label{fig:Lexis-diagram} \includegraphics[width=0.39\textwidth]{Follow-up-nicL1} \includegraphics[width=0.59\textwidth]{Follow-up-nicL2} \caption{\it Lexis diagram of the \texttt{nickel} dataset, left panel the default version, the right one with bells and whistles. The red lines are for persons with exposure$>0$, so it is pretty evident that the oldest ones are the exposed part of the cohort.} \end{figure} \section{Splitting the follow-up time along a timescale} The follow-up time in a cohort can be subdivided by for example current age. This is achieved by the \texttt{splitLexis} (note that it is \emph{not} called \texttt{split.Lexis}). This requires that the timescale and the breakpoints on this timescale are supplied. Try: <<>>= nicS1 <- splitLexis( nicL, "age", breaks=seq(0,100,10) ) summary( nicL ) summary( nicS1 ) @ So we see that the number of events and the amount of follow-up is the same in the two datasets; only the number of records differ. To see how records are split for each individual, it is useful to list the results for a few individuals: <<>>= round( subset( nicS1, id %in% 8:10 ), 2 ) @ The resulting object, \texttt{nicS1}, is again a \texttt{Lexis} object, and so follow-up may be split further along another timescale. Try this and list the results for individuals 8, 9 and 10 again: <<>>= nicS2 <- splitLexis( nicS1, "tfh", breaks=c(0,1,5,10,20,30,100) ) round( subset( nicS2, id %in% 8:10 ), 2 ) @ If we want to model the effect of these timescales we will for each interval use either the value of the left endpoint in each interval or the middle. There is a function \texttt{timeBand} which returns these. Try: <<>>= timeBand( nicS2, "age", "middle" )[1:20] # For nice printing and column labelling use the data.frame() function: data.frame( nicS2[,c("id","lex.id","per","age","tfh","lex.dur")], mid.age=timeBand( nicS2, "age", "middle" ), mid.tfh=timeBand( nicS2, "tfh", "middle" ) )[1:20,] @ Note that these are the midpoints of the intervals defined by \texttt{breaks=}, \emph{not} the midpoints of the actual follow-up intervals. This is because the variable to be used in modelling must be independent of the consoring and mortality pattern --- it should only depend on the chosen grouping of the timescale. \section{Splitting time at a specific date} If we have a recording of the date of a specific event as for example recovery or relapse, we may classify follow-up time as being before of after this intermediate event. This is achieved with the function \texttt{cutLexis}, which takes three arguments: the time point, the timescale, and the value of the (new) state following the date. Now we define the age for the nickel vorkers where the cumulative exposure exceeds 50 exposure years: <<>>= subset( nicL, id %in% 8:10 ) agehi <- nicL$age1st + 50 / nicL$exposure nicC <- cutLexis( data=nicL, cut=agehi, timescale="age", new.state=2, precursor.states=0 ) subset( nicC, id %in% 8:10 ) @ (The \texttt{precursor.states=} argument is explained below). Note that individual 6 has had his follow-up split at age 25 where 50 exposure-years were attained. This could also have been achieved in the split dataset \texttt{nicS2} instead of \texttt{nicL}, try: <<>>= subset( nicS2, id %in% 8:10 ) agehi <- nicS2$age1st + 50 / nicS2$exposure nicS2C <- cutLexis( data=nicS2, cut=agehi, timescale="age", new.state=2, precursor.states=0 ) subset( nicS2C, id %in% 8:10 ) @ Note that follow-up subsequent to the event is classified as being in state 2, but that the final transition to state 1 (death from lung cancer) is preserved. This is the point of the \texttt{precursor.states=} argument. It names the states (in this case 0, ``Alive'') that will be over-witten by \texttt{new.state} (in this case state 2, ``High exposure''). Clearly, state 1 (``Dead'') should not be updated even if it is after the time where the persons moves to state 2. In other words, only state 0 is a precursor to state 2, state 1 is always subsequent to state 2. Note if the intermediate event is to be used as a time-dependent variable in a Cox-model, then \texttt{lex.Cst} should be used as the time-dependent variable, and \texttt{lex.Xst==1} as the event. \section{Competing risks --- multiple types of events} If we want to consider death from lung cancer and death from other causes as separate events we can code these as for example 1 and 2. <<>>= data( nickel ) nicL <- Lexis( entry = list( per=agein+dob, age=agein, tfh=agein-age1st ), exit = list( age=ageout ), exit.status = ( icd > 0 ) + ( icd %in% c(162,163) ), data = nickel ) summary( nicL ) subset( nicL, id %in% 8:10 ) @ If we want to label the states, we can enter the names of these in the \texttt{states} parameter, try for example: <<>>= nicL <- Lexis( entry = list( per=agein+dob, age=agein, tfh=agein-age1st ), exit = list( age=ageout ), exit.status = ( icd > 0 ) + ( icd %in% c(162,163) ), data = nickel, states = c("Alive","D.oth","D.lung") ) summary( nicL ) @ Note that the \texttt{Lexis} function automatically assumes that all persons enter in the first level (given in the \texttt{states=} argument) When we cut at a date as in this case, the date where cumulative exposure exceeds 50 exposure-years, we get the follow-up \emph{after} the date classified as being in the new state if the exit (\texttt{lex.Xst}) was to a state we defined as one of the \texttt{precursor.states}: <<>>= nicL$agehi <- nicL$age1st + 50 / nicL$exposure nicC <- cutLexis( data = nicL, cut = nicL$agehi, timescale = "age", new.state = "HiExp", precursor.states = "Alive" ) subset( nicC, id %in% 8:10 ) summary( nicC, scale=1000 ) @ Note that the persons-years is the same, but that the number of events has changed. This is because events are now defined as any transition from alive, including the transitions to \texttt{HiExp}. Also note that (so far) it is necessary to specify the variable with the cutpoints in full, using only \texttt{cut=agehi} would give an error. \subsection{Subdivision of existing states} It may be of interest to subdivide the states following the intermediate event according to wheter the event has occurred or not. That is done by the argument \texttt{split.states=TRUE}. Moreover, it will also often be of interest to introduce a new timescale indicating the time since intermediate event. This can be done by the argument \texttt{new.scale=TRUE}, alternatively \texttt{new.scale="tfevent"}, as illustrated here: <<>>= nicC <- cutLexis( data = nicL, cut = nicL$agehi, timescale = "age", new.state = "Hi", split.states=TRUE, new.scale=TRUE, precursor.states = "Alive" ) subset( nicC, id %in% 8:10 ) summary( nicC, scale=1000 ) @ \section{Multiple events of the same type (recurrent events)} Sometimes more events of the same type are recorded for each person and one would then like to count these and put follow-up time in states accordingly. Essentially, each set of cutpoints represents progressions from one state to the next. Therefore the states should be numbered, and the numbering of states subsequently occupied be increased accordingly. This is a behaviour different from the one outlined above, and it is achieved by the argument \texttt{count=TRUE} to \texttt{cutLexis}. When \texttt{count} is set to \texttt{TRUE}, the value of the arguments \texttt{new.state} and \texttt{precursor.states} are ignored. Actually, when using the argument \texttt{count=TRUE}, the function \texttt{countLexis} is called, so an alternative is to use this directly. \end{document} Epi/vignettes/simLexis.rnw0000644000175100001440000014637013074071400015351 0ustar hornikusers\SweaveOpts{results=verbatim,keep.source=TRUE,include=FALSE,eps=FALSE,prefix.string=sL} %\VignetteIndexEntry{Simulation of multistate models with multiple timescales: simLexis} \documentclass[a4paper,twoside,12pt]{report} %---------------------------------------------------------------------- % General information \newcommand{\Title}{Simulation of\\ multistate models with\\ multiple timescales:\\ \texttt{simLexis} in the \texttt{Epi} package} \newcommand{\Tit}{Multistate models with multiple timescales} \newcommand{\Version}{Version 2.3} \newcommand{\Dates}{\today} \newcommand{\Where}{SDC} \newcommand{\Homepage}{\url{http://BendixCarstensen.com/Epi/simLexis.pdf}} \newcommand{\Faculty}{\begin{tabular}{rl} Bendix Carstensen & Steno Diabetes Center, Gentofte, Denmark\\ & {\small \& Department of Biostatistics, University of Copenhagen} \\ & \texttt{bxc@steno.dk}\\ & \url{http://BendixCarstensen.com} \\[1em] \end{tabular}} %---------------------------------------------------------------------- % Packages %\usepackage[inline]{showlabels} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage[english]{babel} \usepackage[font=it,labelfont=normalfont]{caption} \usepackage[colorlinks,urlcolor=blue,linkcolor=red]{hyperref} \usepackage[ae,hyper]{Rd} \usepackage[dvipsnames]{xcolor} \usepackage[super]{nth} \usepackage{makeidx,Sweave,floatflt,amsmath,amsfonts,amsbsy,enumitem,dcolumn,needspace} \usepackage{ifthen,calc,eso-pic,everyshi} \usepackage{booktabs,longtable,rotating,graphicx} \usepackage{pdfpages,verbatim,fancyhdr,datetime,% afterpage} \usepackage[abspath]{currfile} % \usepackage{times} \renewcommand{\textfraction}{0.0} \renewcommand{\topfraction}{1.0} \renewcommand{\bottomfraction}{1.0} \renewcommand{\floatpagefraction}{0.9} \DeclareMathOperator{\Pp}{P} \providecommand{\pmat}[1]{\Pp\left\{#1\right\}} \providecommand{\ptxt}[1]{\Pp\left\{\text{#1}\right\}} \providecommand{\dif}{{\,\mathrm d}} % \usepackage{mslapa} \newenvironment{exercise}[0]{\refstepcounter{exno} \begin{quote} {\bf Exercise \theexno.}} {\end{quote}} \definecolor{blaa}{RGB}{99,99,255} \DeclareGraphicsExtensions{.pdf,.jpg} % Make the Sweave output nicer \DefineVerbatimEnvironment{Sinput}{Verbatim}{fontsize=\footnotesize,fontshape=sl,formatcom=\color{Blue}} \DefineVerbatimEnvironment{Soutput}{Verbatim}{fontsize=\footnotesize,formatcom=\color{Maroon},xleftmargin=0em} \DefineVerbatimEnvironment{Scode}{Verbatim}{fontsize=\footnotesize} \fvset{listparameters={\setlength{\topsep}{0pt}}} \renewenvironment{Schunk}% {\renewcommand{\baselinestretch}{0.85} \vspace{\topsep}}% {\renewcommand{\baselinestretch}{1.00} \vspace{\topsep}} % \renewenvironment{knitrout} % {\renewcommand{\baselinestretch}{0.85}} % {\renewcommand{\baselinestretch}{1.00}} % redefined in topreport.tex %---------------------------------------------------------------------- % The usual usefuls % \input{/home/bendix/util/tex/useful.tex} %---------------------------------------------------------------------- % Set up layout of pages \oddsidemargin 1mm \evensidemargin 1mm \topmargin -5mm \headheight 8mm \headsep 5mm \textheight 240mm \textwidth 165mm %\footheight 5mm \footskip 15mm \renewcommand{\topfraction}{0.9} \renewcommand{\bottomfraction}{0.9} \renewcommand{\textfraction}{0.1} \renewcommand{\floatpagefraction}{0.9} \renewcommand{\headrulewidth}{0.1pt} \setcounter{secnumdepth}{4} \setcounter{tocdepth}{2} %---------------------------------------------------------------------- % How to insert a figure in a .rnw file \newcommand{\rwpre}{sL} \newcommand{\insfig}[3]{ \begin{figure}[h] \centering \includegraphics[width=#2\textwidth]{\rwpre-#1} \caption{#3} \label{fig:#1} % \afterpage{\clearpage} \end{figure}} %---------------------------------------------------------------------- % Here is the document starting with the titlepage \begin{document} %---------------------------------------------------------------------- % The title page \setcounter{page}{1} \pagenumbering{roman} \pagestyle{plain} \thispagestyle{empty} % \vspace*{0.05\textheight} \flushright % The blank below here is necessary in order not to muck up the % linespacing in title if it has more than 2 lines {\Huge \bfseries \Title }\ \\[-1.5ex] \noindent\textcolor{blaa}{\rule[-1ex]{\textwidth}{5pt}}\\[2.5ex] \large \Where \\ \Dates \\ \Homepage \\ \Version \\[1em] \normalsize Compiled \today,\ \currenttime\\ % from: \texttt{\currfileabspath}\\[1em] % \input{wordcount} \normalsize \vfill \Faculty % End of titlepage % \newpage %---------------------------------------------------------------------- % Table of contents \tableofcontents %---------------------------------------------------------------------- % General text layout \raggedright \parindent 1em \parskip 0ex \cleardoublepage %---------------------------------------------------------------------- % General page style \pagenumbering{arabic} \setcounter{page}{1} \pagestyle{fancy} \renewcommand{\chaptermark}[1]{\markboth{\textsl{#1}}{}} \renewcommand{\sectionmark}[1]{\markright{\thesection\ \textsl{#1}}{}} \fancyhead[EL]{\bf \thepage \quad \rm \leftmark} \fancyhead[ER]{\sl \Tit} \fancyhead[OR]{\rm \rightmark \quad \bf \thepage} \fancyfoot{} %---------------------------------------------------------------------- % Here comes the substance \chapter{Using \texttt{simLexis}} \section{Introduction} This vignette explains the machinery behind simulation of life histories through multistate models implemented in \texttt{simLexis}. In \texttt{simLexis} transition rates are allowed to depend on multiple time scales, including timescales defined as time since entry to a particular state (duration). This therefore also covers the case where time \emph{at} entry into a state is an explanatory variable for the rates, since time at entry is merely time minus duration. Thus, the set-up here goes beyond Markov- and semi-Markov-models, and brings simulation based estimation of state-occupancy probabilities into the realm of realistic multistate models. The basic idea is to simulate a new \texttt{Lexis} object \cite{Plummer.2011,Carstensen.2011a} as defined in the \texttt{Epi} package for \R, based on 1) a multistate model defined by its states and the transition rates between them and 2) an initial population of individuals. Thus the output will be a \texttt{Lexis} object describing the transitions of a predefined set of persons through a multistate model. Therefore, if persons are defined to be identical at start, then calculation of the probability of being in a particular state at a given time boils down to a simple enumeration of the fraction of the persons in the particular state at the given time. Bar of course the (binomial) simulation error, but this can be brought down by simulation a sufficiently large number of persons. An observed \texttt{Lexis} object with follow-up of persons through a number of states will normally be the basis for estimation of transition rates between states, and thus will contain all information about covariates determining the occurrence rates, in particular the \emph{timescales} \cite{Iacobelli.2013}. Hence, the natural input to simulation from an estimated multistate model will typically be an object of the same structure as the originally observed. Since transitions and times are what is simulated, any values of \texttt{lex.Xst} and \texttt{lex.dur} in the input object will of course be ignored. This first chapter of this vignette shows by an example how to use the function \texttt{simLexis} and display the results. The subsequent chapter discusses in more detail how the simulation machinery is implemented and is not needed for the practical use of \texttt{simLexis}. \section{\texttt{simLexis} in practice} This section is largely a commented walk-trough of the example from the help-page of \texttt{simLexis}, with a larger number of simulated persons in order to minimize the pure simulation variation. When we want to simulate transition times through a multistate model where transition rates may depend on time since entry to the current or a previous state, it is essential that we have a machinery to keep track of the transition time on \emph{all} time scales, as well as a mechanism that can initiate a new time scale to 0 when a transition occurs to a state where we shall use time since entry as determinant of exit rates from that state. This is provided by \texttt{simLexis}. \subsection{Input for the simulation} Input for simulation of a single trajectory through a multistate model requires a representation of the \emph{current status} of a person; the starting conditions. The object that we supply to the simulation function must contain information about all covariates and all timescales upon which transitions depend, and in particular which one(s) of the timescales that are defined as time since entry into a particular state. Hence, starting conditions should be represented as a \texttt{Lexis} object (where \texttt{lex.dur} and \texttt{lex.Xst} are ignored, since there is no follow-up yet), where the time scale information is in the attributes \texttt{time.scale} and \texttt{time.since} respectively. Thus there are two main arguments to a function to simulate from a multistate model: \begin{enumerate} \item A \texttt{Lexis} object representing the initial states and covariates of the population to be simulated. This has to have the same structure as the original \texttt{Lexis} object representing the multistate model from which transition rates in the model were estimated. As noted above, the values for \texttt{lex.Xst} and \texttt{lex.dur} are not required (since these are the quantities that will be simulated). \item A transition object, representing the transition intensities between states, which should be a list of lists of intensity representations. As an intensity representation we mean a function that for given a \texttt{Lexis} object that can be used to produce estimates of the transition intensities at a set of supplied time points since the state represented in the \texttt{Lexis} object. The names of the elements of the transition object (which are lists) will be names of the \emph{transient} states, that is the states \emph{from} which a transition can occur. The names of the elements of each of these lists are the names of states \emph{to} which transitions can occur (which may be either transient or absorbing states). Hence, if the transition object is called \texttt{Tr} then \verb+TR$A$B+ (or \verb+Tr[["A"]][["B"]]+) will represent the transition intensity from state \texttt{A} to the state \texttt{B}. The entries in the transition object can be either \texttt{glm} objects, representing Poisson models for the transitions, \texttt{coxph} objects representing an intensity model along one time scale, or simply a function that takes a \texttt{Lexis} object as input returns an estimated intensity for each row. \end{enumerate} In addition to these two input items, there will be a couple of tuning parameters. The output of the function will simply be a \texttt{Lexis} object with simulated transitions between states. This will be the basis for deriving sensible statistics from the \texttt{Lexis} object --- see next section. \section{Setting up a \texttt{Lexis} object} As an example we will use the \texttt{DMlate} dataset from the \texttt{Epi} package; it is a dataset simulated to resemble a random sample of 10,000 patients from the Danish National Diabetes Register. We start by loading the \texttt{Epi} package: <>= options( width=90 ) library( Epi ) print( sessionInfo(), l=F ) @ % First we load the diabetes data and set up a simple illness-death model: <>= data(DMlate) dml <- Lexis( entry = list(Per=dodm, Age=dodm-dobth, DMdur=0 ), exit = list(Per=dox), exit.status = factor(!is.na(dodth),labels=c("DM","Dead")), data = DMlate ) @ % This is just data for a simple survival model with states ``DM'' and ``Dead''. Now we cut the follow-up at insulin start, which for the majority of patients (T2D) is a clinical indicator of deterioration of disease regulation. We therefore also introduce a new timescale, and split the non-precursor states, so that we can address the question of ever having been on insulin: <>= dmi <- cutLexis( dml, cut = dml$doins, pre = "DM", new.state = "Ins", new.scale = "t.Ins", split.states = TRUE ) summary( dmi ) str(dmi) @ % $ We can show how many person-years we have and show the number of transitions and transition rates (per 1000), using the \texttt{boxes.Lexis} function to display the states and the number of transitions between them: <>= boxes( dmi, boxpos = list(x=c(20,20,80,80), y=c(80,20,80,20)), scale.R = 1000, show.BE = TRUE ) @ % \insfig{boxes}{0.8}{Data overview for the \textrm{\tt dmi} dataset. Numbers in the boxes are person-years and the number of persons who begin, resp. end their follow-up in each state, and numbers on the arrows are no. of transitions and rates (transition intensities) per 1000 PY.} \section{Analysis of rates} In the \texttt{Lexis} object (which is just a data frame) each person is represented by one record for each transient state he occupies, thus in this case either 1 or 2 records; those who have a recorded time both without and with insulin have two records. In order to be able to fit Poisson models with occurrence rates varying by the different time-scales, we split the follow-up in 6-month intervals for modeling: <>= Si <- splitLexis( dmi, 0:30/2, "DMdur" ) dim( Si ) print( subset( Si, lex.id==97 )[,1:10], digits=6 ) @ % Note that when we split the follow-up each person's follow up now consists of many records, each with the \emph{current} values of the timescales at the start of the interval represented by the record. In the modelling we must necessarily assume that the rates are constant within each 6-month interval, but the \emph{size} of these rates we model as smooth functions of the time scales (that is the values at the beginning of each interval). The approach often used in epidemiology where one parameter is attached to each interval of time (or age) is not feasible when more than one time scale is used, because intervals are not classified the same way on all timescales. We shall use natural splines (restricted cubic splines) for the analysis of rates, and hence we must allocate knots for the splines. This is done for each of the time-scales, and separately for the transition out of states ``DM'' and ``Ins''. For age, we place the knots so that the number of events is the same between each pair of knots, but only half of this beyond each of the boundary knots, whereas for the timescales \texttt{DMdur} and \texttt{tIns} where we have observation from a well-defined 0, we put knots at 0 and place the remaining knots so that the number of events is the same between each pair of knots as well as outside the boundary knots. <>= nk <- 5 ( ai.kn <- with( subset(Si,lex.Xst=="Ins" & lex.Cst!=lex.Xst ), quantile( Age+lex.dur , probs=(1:nk-0.5)/nk ) ) ) ( ad.kn <- with( subset(Si,lex.Xst=="Dead"), quantile( Age+lex.dur , probs=(1:nk-0.5)/nk ) ) ) ( di.kn <- with( subset(Si,lex.Xst=="Ins" & lex.Cst!=lex.Xst ), c(0,quantile( DMdur+lex.dur, probs=(1:(nk-1))/nk ) )) ) ( dd.kn <- with( subset(Si,lex.Xst=="Dead"), c(0,quantile( DMdur+lex.dur, probs=(1:(nk-1))/nk ) )) ) ( ti.kn <- with( subset(Si,lex.Xst=="Dead(Ins)"), c(0,quantile( t.Ins+lex.dur, probs=(1:(nk-1))/nk ) )) ) @ % Note that when we tease out the event records for transition to \emph{transient} states (in this case ``Ins'', that is verb|lex.Xst=="Ins"|), we should add \verb|lex.Cst!=lex.Xst|, to include only transition records and avoiding including records of sojourn time in the transient state. We then fit Poisson models to transition rates, using the wrapper \texttt{Ns} from the \texttt{Epi} package to simplify the specification of the rates: <>= library( splines ) DM.Ins <- glm( (lex.Xst=="Ins") ~ Ns( Age , knots=ai.kn ) + Ns( DMdur, knots=di.kn ) + I(Per-2000) + sex, family=poisson, offset=log(lex.dur), data = subset(Si,lex.Cst=="DM") ) DM.Dead <- glm( (lex.Xst=="Dead") ~ Ns( Age , knots=ad.kn ) + Ns( DMdur, knots=dd.kn ) + I(Per-2000) + sex, family=poisson, offset=log(lex.dur), data = subset(Si,lex.Cst=="DM") ) Ins.Dead <- glm( (lex.Xst=="Dead(Ins)") ~ Ns( Age , knots=ad.kn ) + Ns( DMdur, knots=dd.kn ) + Ns( t.Ins, knots=ti.kn ) + I(Per-2000) + sex, family=poisson, offset=log(lex.dur), data = subset(Si,lex.Cst=="Ins") ) @ % Note the similarity of the code used to fit the three models, is is mainly redefining the response variable (``to'' state) and the subset of the data used (``from'' state). \section{The mortality rates} This section discusses in some detail how to extract ad display the mortality rates from the models fitted. But it is not necessary for understanding how to use \texttt{simLexis} in practice. \subsection{Proportionality of mortality rates} Note that we have fitted separate models for the three transitions, there is no assumption of proportionality between the mortality rates from \texttt{DM} and \texttt{Ins}. However, there is nothing that prevents us from testing this assumption; we can just fit a model for the mortality rates in the entire data frame \texttt{Si}, and compare the deviance from this with the sum of the deviances from the separate models: <>= with( Si, table(lex.Cst) ) All.Dead <- glm( (lex.Xst %in% c("Dead(Ins)","Dead")) ~ Ns( Age , knots=ad.kn ) + Ns( DMdur, knots=dd.kn ) + lex.Cst + I(Per-2000) + sex, family=poisson, offset=log(lex.dur), data = Si ) round( ci.exp( All.Dead ), 3 ) @ From the parameter values we would in a simple setting just claim that start of insulin-treatment was associated with a slightly more than doubling of mortality. The model \texttt{All.dead} assumes that the age- and DM-duration effects on mortality in the ``DM'' and ``Ins'' states are the same, and moreover that there is no effect of insulin duration, but merely a mortality that is larger by a multiplicative constant not depending on insulin duration. The model \texttt{DM.Dead} has 8 parameters to describe the dependency on age and DM duration, the model \texttt{Ins.Dead} has 12 for the same plus the insulin duration (a natural spline with $k$ knots gives $k-1$ parameters, and we chose $k=5$ above). We can compare the fit of the proportional hazards model with the fit of the separate models for the two mortality rates, by adding up the deviances and d.f. from these: <>= what <- c("null.deviance","df.null","deviance","df.residual") ( rD <- unlist( DM.Dead[what] ) ) ( rI <- unlist( Ins.Dead[what] ) ) ( rA <- unlist( All.Dead[what] ) ) round( c( dd <- rA-(rI+rD), "pVal"=1-pchisq(dd[3],dd[4]+1) ), 3 ) @ % Thus we see there is a substantial non-proportionality of mortality rates from the two states; but a test provides no clue whatsoever to the particular \emph{shape} of the non-proportionality. To this end, we shall explore the predicted mortalities under the two models quantitatively in more detail. Note that the reason that there is a difference in the null deviances (and a difference of 1 in the null d.f.) is that the null deviance of \texttt{All.Dead} refer to a model with a single intercept, that is a model with constant and \emph{identical} mortality rates from the states ``DM'' and ``Ins'', whereas the null models for \texttt{DM.Dead} and \texttt{Ins.Dead} have constant but \emph{different} mortality rates from the states ``DM'' and ``Ins''. This is however irrelevant for the comparison of the \emph{residual} deviances. \subsection{How the mortality rates look} If we want to see how the mortality rates are modelled in \texttt{DM.Dead} and \texttt{Ins.Dead} in relation to \texttt{All.Dead}, we make a prediction of rates for say men diagnosed in different ages and going on insulin at different times after this. So we consider men diagnosed in ages 40, 50, 60 and 70, and who either never enter insulin treatment or do it 0, 2 or 5 years after diagnosis of DM. To this end we create a prediction data frame where we have observation times from diagnosis and 12 years on (longer would not make sense as this is the extent of the data). But we start by setting up an array to hold the predicted mortality rates, classified by diabetes duration, age at diabetes onset, time of insulin onset, and of course type of model. What we want to do is to plot the age-specific mortality rates for persons not on insulin, and for persons starting insulin at different times after DM. The mortality curves start at the age where the person gets diabetes and continues 12 years; for persons on insulin they start at the age when they initiate insulin. <>= pr.rates <- NArray( list( DMdur = seq(0,12,0.1), DMage = 4:7*10, r.Ins = c(NA,0,2,5), model = c("DM/Ins","All"), what = c("rate","lo","hi") ) ) str( pr.rates ) @ % For convenience the \texttt{Epi} package contains a function that computes predicted (log-)rates with c.i. --- it is merely a wrapper for \texttt{predict.glm}: <<>>= ci.pred @ So set up the prediction data frame and modify it in loops over ages at onset and insulin onset. Note that we set \texttt{lex.dur} to 1000 in the prediction frame, so that we obtain rates in units of events per 1000 PY. <>= nd <- data.frame( DMdur = as.numeric( dimnames(pr.rates)[[1]] ), lex.Cst = factor( 1, levels=1:4, labels=levels(Si$lex.Cst) ), sex = factor( 1, levels=1:2, labels=c("M","F")), lex.dur = 1000 ) for( ia in dimnames(pr.rates)[[2]] ) { dnew <- transform( nd, Age = as.numeric(ia)+DMdur, Per = 1998+DMdur ) pr.rates[,ia,1,"DM/Ins",] <- ci.pred( DM.Dead, newdata = dnew ) pr.rates[,ia,1,"All" ,] <- ci.pred( All.Dead, newdata = dnew ) for( ii in dimnames(pr.rates)[[3]][-1] ) { dnew = transform( dnew, lex.Cst = factor( 2, levels=1:4, labels=levels(Si$lex.Cst) ), t.Ins = ifelse( (DMdur-as.numeric(ii)) >= 0, DMdur-as.numeric(ii), NA ) ) pr.rates[,ia, ii ,"DM/Ins",] <- ci.pred( Ins.Dead, newdata = dnew ) pr.rates[,ia, ii ,"All" ,] <- ci.pred( All.Dead, newdata = dnew ) } } @ % $ So for each age at DM onset we make a plot of the mortality as function of current age both for those with no insulin treatment at those that start 1, 3 and 5 years after, thus 4 curves (with c.i.). These curves are replicated with a different color for the simplified model. <>= par( mar=c(3,3,1,1), mgp=c(3,1,0)/1.6, las=1 ) plot( NA, xlim=c(40,82), ylim=c(5,300), bty="n", log="y", xlab="Age", ylab="Mortality rate per 1000 PY" ) abline( v=seq(40,80,5), h=outer(1:9,10^(0:2),"*"), col=gray(0.8) ) for( aa in 4:7*10 ) for( ii in 1:4 ) matlines( aa+as.numeric(dimnames(pr.rates)[[1]]), cbind( pr.rates[,paste(aa),ii,"DM/Ins",], pr.rates[,paste(aa),ii,"All" ,] ), type="l", lty=1, lwd=c(3,1,1), col=rep(c("red","limegreen"),each=3) ) @ % \insfig{mort-int}{0.9}{Estimated mortality rates for male diabetes patients with no insulin (lower sets of curves) and insulin (upper curves), with DM onset in age 40, 50, 60 and 70. The red curves are from the models with separate age effects for persons with and without insulin, and a separate effect of insulin duration. The green curves are from the model with common age-effects and only a time-dependent effect of insulin, assuming no effect of insulin duration (the classical time-dependent variable approach). Hence the upper green curve is common for any time of insulin inception.} From figure \ref{fig:mort-int} we see that there is a substantial insulin-duration effect which is not accommodated by the simple model with only one time-dependent variable to describe the insulin effect. Note that the simple model (green curves) for those on insulin does not depend in insulin duration, and hence the mortality curves for those on insulin are just parallel to the mortality curves for those not on insulin, regardless of diabetes duration (or age) at the time of insulin initiation. This is the proportional hazards assumption. Thus the effect of insulin initiation is under-estimated for short duration of insulin and over-estimated for long duration of insulin. This is the major discrepancy between the two models, and illustrates the importance of being able to accommodate different time scales, but there is also a declining overall insulin effect by age which is not accommodated by the proportional hazards approach. Finally, this plot illustrates an important feature in reporting models with multiple timescales; all timescales must be represented in the predicted rates, only reporting the effect of one timescale, conditional on a fixed value of other timescales is misleading since all timescales by definition advance at the same pace. For example, the age-effect for a fixed value of insulin duration really is a misnomer since it does not correspond to any real person's follow-up, but to the mortality of persons in different ages but with the same duration of incuin use. \section{Input to the \texttt{simLexis} function} In order to simulate from the multistate model with the estimated transition rates, and get the follow-up of a hypothetical cohort, we must supply \emph{both} the transition rates and the structure of the model \emph{as well as} the initial cohort status to \texttt{simLexis}. \subsection{The transition object} We first put the models into an object representing the transitions; note this is a list of lists, the latter having \texttt{glm} objects as elements: <>= Tr <- list( "DM" = list( "Ins" = DM.Ins, "Dead" = DM.Dead ), "Ins" = list( "Dead(Ins)" = Ins.Dead ) ) @ % Now we have the description of the rates and of the structure of the model. The \texttt{Tr} object defines the states and models for all transitions between them; the object \verb|Tr$A$B| is the model for the transition intensity from state \texttt{A} to state \texttt{B}. \subsection{The initial cohort} We now define an initial \texttt{Lexis} object of persons with all relevant covariates defined. Note that we use \texttt{subset} to get a \texttt{Lexis} object, this conserves the \texttt{time.scale} and \texttt{time.since} attributes which is needed for the simulation (the usual ``\texttt{[}'' operator does not preserve these attributes when you select columns): <>= str( Si[NULL,1:9] ) ini <- subset(Si,FALSE,select=1:9) str( ini ) ini <- subset(Si,select=1:9)[NULL,] str( ini ) @ % We now have an empty \texttt{Lexis} object with attributes reflecting the timescales in multistate model we want to simulate, so we must now enter some data to represent the persons whose follow-up we want to simulate through the model; we set up an initial dataset with one man and one woman: <>= ini[1:2,"lex.id"] <- 1:2 ini[1:2,"lex.Cst"] <- "DM" ini[1:2,"Per"] <- 1995 ini[1:2,"Age"] <- 60 ini[1:2,"DMdur"] <- 5 ini[1:2,"sex"] <- c("M","F") ini @ % \section{Simulation of the follow-up} Now we simulate 1000 of each of these persons using the estimated model. The \texttt{t.range} argument gives the times range where the integrated intensities (cumulative rates) are evaluated and where linear interpolation is used when simulating transition times. Note that this must be given in the same units as \texttt{lex.dur} in the \texttt{Lexis} object used for fitting the models for the transitions. <>= set.seed( 52381764 ) Nsim <- 1000 system.time( simL <- simLexis( Tr, ini, t.range = 12, N = Nsim ) ) @ % %% Temp %% <<>>= %% source("../../../tmpstore/rbind.Lexis.R") %% source("../R/simLexis.R") %% lls() %% @ %% Temp The result is a \texttt{Lexis} object --- a data frame representing the simulated follow-up of \Sexpr{2*Nsim} persons (\Sexpr{Nsim} identical men and \Sexpr{Nsim} identical women) according to the rates we estimated from the original dataset. <>= summary( simL, by="sex" ) @ % \subsection{Using other models for simulation} \subsubsection{Proportional hazards Poisson model} We fitted a proportional mortality model \texttt{All.Dead} (which fitted worse than the other two), this is a model for \emph{both} the transition from ``DM'' to ``Death'' \emph{and} from ``Ins'' to ``Dead(Ins)'', assuming that they are proportional. But it can easily be used in the simulation set-up, because the state is embedded in the model via the term \texttt{lex.Cst}, which is updated during the simulation. Simulation using this instead just requires that we supply a different transition object: <>= Tr.p <- list( "DM" = list( "Ins" = DM.Ins, "Dead" = All.Dead ), "Ins" = list( "Dead(Ins)" = All.Dead ) ) system.time( simP <- simLexis( Tr.p, ini, t.range = 12, N = Nsim ) ) summary( simP, by="sex" ) @ % \subsubsection{Proportional hazards Cox model} A third possibility would be to replace the two-time scale proportional mortality model by a one-time-scale Cox-model, using diabetes duration as time scale, and age at diagnosis of DM as (fixed) covariate: <>= library( survival ) Cox.Dead <- coxph( Surv( DMdur, DMdur+lex.dur, lex.Xst %in% c("Dead(Ins)","Dead")) ~ Ns( Age-DMdur, knots=ad.kn ) + I(lex.Cst=="Ins") + I(Per-2000) + sex, data = Si ) round( ci.exp( Cox.Dead ), 3 ) round( ci.exp( All.Dead ), 3 ) @ % Note that in order for this model to be usable for simulation, it is necessary that we use the components of the \texttt{Lexis} object to specify the survival. Each record in the data frame \texttt{Si} represents follow up from \texttt{DMdur} to \texttt{DMdur+lex.dur}, so the model is a Cox model with diabetes duration as underlying timescale and age at diagnosis, \texttt{Age-DMdur}, as covariate. Also note that we used \texttt{I(lex.Cst=="Ins")} instead of just \texttt{lex.Cst}, because \texttt{coxph} assigns design matrix columns to all levels of \texttt{lex.Cst}, also those not present in data, which would give \texttt{NA}s among the parameter estimates and \texttt{NA}s as mortality outcomes. We see that the effect of insulin and the other covariates are pretty much the same as in the two-time-scale model. We can simulate from this model too; there is no restrictions on what type of model can be used for different transitions <>= Tr.c <- list( "DM" = list( "Ins" = Tr$DM$Ins, "Dead" = Cox.Dead ), "Ins" = list( "Dead(Ins)" = Cox.Dead ) ) system.time( simC <- simLexis( Tr.c, ini, t.range = 12, N = Nsim ) ) summary( simC, by="sex" ) @ \section{Reporting the simulation results} We can now tabulate the number of persons in each state at a predefined set of times on a given time scale. Note that in order for this to be sensible, the \texttt{from} argument would normally be equal to the starting time for the simulated individuals. <>= system.time( nSt <- nState( subset(simL,sex=="M"), at=seq(0,11,0.2), from=1995, time.scale="Per" ) ) nSt[1:10,] @ % We see that as time goes by, the 5000 men slowly move away from the starting state (\texttt{DM}). Based on this table (\texttt{nSt} is a table) we can now compute the fractions in each state, or, rather more relevant, the cumulative fraction across the states in some specified order, so that a plot of the stacked probabilities can be made, using either the default rather colorful layout, or a more minimalistic version (both in figure \ref{fig:pstate0}): <>= pM <- pState( nSt, perm=c(1,2,4,3) ) head( pM ) par( mfrow=c(1,2), mar=c(3,3,1,1), mgp=c(3,1,0)/1.6 ) plot( pM ) plot( pM, border="black", col="transparent", lwd=3 ) text( rep(as.numeric(rownames(pM)[nrow(pM)-1]),ncol(pM)), pM[nrow(pM),]-diff(c(0,pM[nrow(pM),]))/5, colnames( pM ), adj=1 ) box( col="white", lwd=3 ) box() @ % \insfig{pstate0}{1.0}{Default layout of the \textrm{\tt plot.pState} graph (left), and a version with the state probabilites as lines and annotation of states.} A more useful set-up of the graph would include a more through annotation and sensible choice of colors, as seen in figure \ref{fig:pstatex}: <>= clr <- c("limegreen","orange") # expand with a lighter version of the two chosen colors clx <- c( clr, rgb( t( col2rgb( clr[2:1] )*2 + rep(255,3) ) / 3, max=255 ) ) par( mfrow=c(1,2), las=1, mar=c(3,3,4,2), mgp=c(3,1,0)/1.6 ) # Men plot( pM, col=clx ) lines( as.numeric(rownames(pM)), pM[,2], lwd=3 ) mtext( "60 year old male, diagnosed 1990, aged 55", side=3, line=2.5, adj=0, col=gray(0.6) ) mtext( "Survival curve", side=3, line=1.5, adj=0 ) mtext( "DM, no insulin DM, Insulin", side=3, line=0.5, adj=0, col=clr[1] ) mtext( "DM, no insulin", side=3, line=0.5, adj=0, col=clr[2] ) axis( side=4 ) axis( side=4, at=1:19/20, labels=FALSE ) axis( side=4, at=1:99/100, labels=FALSE, tcl=-0.3 ) # Women pF <- pState( nState( subset(simL,sex=="F"), at=seq(0,11,0.2), from=1995, time.scale="Per" ), perm=c(1,2,4,3) ) plot( pF, col=clx ) lines( as.numeric(rownames(pF)), pF[,2], lwd=3 ) mtext( "60 year old female, diagnosed 1990, aged 55", side=3, line=2.5, adj=0, col=gray(0.6) ) mtext( "Survival curve", side=3, line=1.5, adj=0 ) mtext( "DM, no insulin DM, Insulin", side=3, line=0.5, adj=0, col=clr[1] ) mtext( "DM, no insulin", side=3, line=0.5, adj=0, col=clr[2] ) axis( side=4 ) axis( side=4, at=1:19/20, labels=FALSE ) axis( side=4, at=1:99/100, labels=FALSE, tcl=-0.3 ) @ % \insfig{pstatex}{1.0}{\textrm{\tt plot.pState} graphs where persons ever on insulin are given in orange and persons never on insulin in green, and the overall survival (dead over the line) as a black line.} If we instead wanted to show the results on the age-scale, we would use age as timescale when constructing the probabilities; otherwise the code is pretty much the same as before (Figure \ref{fig:pstatey}): <>= par( mfrow=c(1,2), las=1, mar=c(3,3,4,2), mgp=c(3,1,0)/1.6 ) # Men pM <- pState( nState( subset(simL,sex=="M"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) plot( pM, col=clx, xlab="Age" ) lines( as.numeric(rownames(pM)), pM[,2], lwd=3 ) mtext( "60 year old male, diagnosed 1990, aged 55", side=3, line=2.5, adj=0, col=gray(0.6) ) mtext( "Survival curve", side=3, line=1.5, adj=0 ) mtext( "DM, no insulin DM, Insulin", side=3, line=0.5, adj=0, col=clr[1] ) mtext( "DM, no insulin", side=3, line=0.5, adj=0, col=clr[2] ) axis( side=4 ) axis( side=4, at=1:19/20, labels=FALSE ) axis( side=4, at=1:19/20, labels=FALSE, tcl=-0.4 ) axis( side=4, at=1:99/100, labels=FALSE, tcl=-0.3 ) # Women pF <- pState( nState( subset(simL,sex=="F"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) plot( pF, col=clx, xlab="Age" ) lines( as.numeric(rownames(pF)), pF[,2], lwd=3 ) mtext( "60 year old female, diagnosed 1990, aged 55", side=3, line=2.5, adj=0, col=gray(0.6) ) mtext( "Survival curve", side=3, line=1.5, adj=0 ) mtext( "DM, no insulin DM, Insulin", side=3, line=0.5, adj=0, col=clr[1] ) mtext( "DM, no insulin", side=3, line=0.5, adj=0, col=clr[2] ) axis( side=4 ) axis( side=4, at=1:9/10, labels=FALSE ) axis( side=4, at=1:19/20, labels=FALSE, tcl=-0.4 ) axis( side=4, at=1:99/100, labels=FALSE, tcl=-0.3 ) @ % Note the several statements with \texttt{axis(side=4,...}; they are nesessary to get the fine tick-marks in the right hand side of the plots that you will need in order to read off the probabilities at 2006 (or 71 years). \insfig{pstatey}{1.0}{\textrm{\tt plot.pState} graphs where persons ever on insulin are given in orange and persons never on insulin in green, and the overall survival (dead over the line) as a black line.} \subsection{Comparing predictions from different models} We have actually fitted different models for the transitions, and we have simulated Lexis objects from all three approaches, so we can plot these predictions on top of each other: <>= PrM <- pState( nState( subset(simP,sex=="M"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) PrF <- pState( nState( subset(simP,sex=="F"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) CoxM <- pState( nState( subset(simC,sex=="M"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) CoxF <- pState( nState( subset(simC,sex=="F"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) par( mfrow=c(1,2), mar=c(3,3,1,1), mgp=c(3,1,0)/1.6 ) plot( pM, border="black", col="transparent", lwd=3 ) lines( PrM, border="blue" , col="transparent", lwd=3 ) lines( CoxM, border="red" , col="transparent", lwd=3 ) text( 60.5, 0.05, "M" ) box( lwd=3 ) plot( pF, border="black", col="transparent", lwd=3 ) lines( PrF, border="blue" , col="transparent", lwd=3 ) lines( CoxF, border="red" , col="transparent", lwd=3 ) text( 60.5, 0.05, "F" ) box( lwd=3 ) @ % \insfig{comp-0}{1.0}{Comparison of the simulated state occupancy probabilities using separate Poisson models for the mortality rates with and without insulin (black) and using proportional hazards Poisson models (blue) and Cox-models with diabetes duration as timescale and age at diabetes diagnosis as covariate (red).} From figure \ref{fig:comp-0} it is clear that the two proportional hazards models (blue and red curves) produce pretty much the same estimates of the state occupancy probabilites over time, but also that they relative to the model with separately estimated transition intensities overestimates the probability of being alive without insulin and underestimates the probabilities of being dead without insulin. However both the overall survival, and the fraction of persons on insulin are quite well in agreement with the more elaborate model. Thus the proportional hazards models overestimate the relative mortality of the insulin treated diabetes patients relative to the non-insulin treated. Interestingly, we also see a bump in th estimated probabilities from the Cox-model based model, but this is entirely an artifact that comes from the estimation method for the baseline hazard of the Cox-model that lets the (cumulative) hazard have large jumps at event times where the risk set is small. So also here it shows up that an assumption of continuous underlying hazards leads to more credible estimates. \chapter{Simulation of transitions in multistate models} \section{Theory} Suppose that the rate functions for the transitions out of the current state to, say, 3 different states are $\lambda_1$, $\lambda_2$ and $\lambda_3$, and the corresponding cumulative rates are $\Lambda_1$, $\Lambda_2$ and $\Lambda_3$, and we want to simulate an exit time and an exit state (that is either 1, 2 or 3). This can be done in two slightly different ways: \begin{enumerate} \item First time, then state: \begin{enumerate} \item Compute the survival function, $S(t) = \exp\bigl(-\Lambda_1(t)-\Lambda_2(t)-\Lambda_3(t)\bigr)$ \item Simulate a random U(0,1) variate, $u$, say. \item The simulated exit time is then the solution $t_u$ to the equation $S(t_u) = u \quad \Leftrightarrow \quad \sum_j\Lambda_j(t_u) = -\log(u)$. \item A simulated transition at $t_u$ is then found by simulating a random draw from the multinomial distribution with probabilities $p_i=\lambda_i(t_u) / \sum_j\lambda_j(t_u)$. \end{enumerate} \item Separate cumulative incidences: \begin{enumerate} \item Simulate 3 independent U(0,1) random variates $u_1$, $u_2$ and $u_3$. \item Solve the equations $\Lambda_i(t_i)=-\log(u_i), i=1,2,3$ and get $(t_1,t_2,t_3)$. \item The simulated survival time is then $\min(t_1,t_2,t_3)$, and the simulated transition is to the state corresponding to this, that is $k \in \{1,2,3\}$, where $t_k=\min(t_1,t_2,t_3)$ \end{enumerate} \end{enumerate} The intuitive argument is that with three possible transition there are 3 independent processes running, but only the first transition is observed. The latter approach is used in the implementation in \texttt{simLexis}. The formal argument for the equality of the two approaches goes as follows: \begin{enumerate} \item Equality of the transition times: \begin{enumerate} \item In the first approach we simulate from a distribution with cumulative rate $\Lambda_1(t)+\Lambda_2(t)+\Lambda_3(t)$, hence from a distribution with survival function: \begin{align*} S(t) & = \exp\bigl(-(\Lambda_1(t)+\Lambda_2(t)+\Lambda_3(t))\bigr) \\ & = \exp\bigl(-\Lambda_1(t)\bigr)\times \exp\bigl(-\Lambda_2(t)\bigr)\times \exp\bigl(-\Lambda_3(t)\bigr) \end{align*} \item In the second approach we choose the smallest of three independent survival times, with survival functions $\exp(-\Lambda_i), i=1,2,3$. Now, the survival function for the minimum of three independent survival times is: \begin{align*} S_\text{min}(t) & = \pmat{\min(t_1,t_2,t_3)>t} \\ & = \pmat{t_1>t} \times \pmat{t_2>t} \times \pmat{t_3>t} \\ & = \exp\bigl(-\Lambda_1(t)\bigr)\times \exp\bigl(-\Lambda_2(t)\bigr)\times \exp\bigl(-\Lambda_3(t)\bigr) \end{align*} which is the same survival function as derived above. \end{enumerate} \item Type of transition: \begin{enumerate} \item In the first instance the probability of a transition to state $i$, conditional on the transition time being $t$, is as known from standard probability theory: $\lambda_i(t)/\bigl(\lambda_1(t)+\lambda_2(t)+\lambda_3(t)\bigr)$. \item In the second approach we choose the transition corresponding to the the smallest of the transition times. So when we condition on the event that a transition takes place at time $t$, we have to show that the conditional probability that the smallest of the three simulated transition times was actually the $i$th, is as above. But conditional on \emph{survival} till $t$, the probabilities that events of type $1,2,3$ takes place in the interval $(t,t+\dif t)$ are $\lambda_1(t)\dif t$, $\lambda_2(t)\dif t$ and $\lambda_1(t)\dif t$, respectively (assuming that the probability of more than one event in the interval of length $\dif t$ is 0). Hence the conditional probabilities \emph{given a transition time} in $(t,t+\dif t)$ is: \[ \frac{\lambda_i(t)\dif t}{\lambda_1(t)\dif t+\lambda_2(t)\dif t+\lambda_3(t)\dif t}= \frac{\lambda_i(t)}{\lambda_1(t)+\lambda_2(t)+\lambda_3(t)} \] --- exactly as above. \end{enumerate} \end{enumerate} \section{Components of \texttt{simLexis}} This section explains the actually existing code for \texttt{simLexis}, as it is in the current version of \texttt{Epi}. <>= source( "../R/simLexis.R", keep.source=TRUE ) @ % The function \texttt{simLexis} takes a \texttt{Lexis} object as input. This defines the initial state(s) and times of the start for a number of persons. Since the purpose is to simulate a history through the estimated multistate model, the input values of the outcome variables \texttt{lex.Xst} and \texttt{lex.dur} are ignored --- the aim is to simulate values for them. Note however that the attribute \texttt{time.since} must be present in the object. This is used for initializing timescales defined as time since entry into a particular state, it is a character vector of the same length as the \texttt{time.scales} attribute, with value equal to a state name if the corresponding time scale is defined as time since entry into that state. In this example the 4th timescale is time since entry into the ``Ins'' state, and hence: <<>>= cbind( attr( ini, "time.scale" ), attr( ini, "time.since" ) ) @ % \texttt{Lexis} objects will have this attribute set for time scales created using \texttt{cutLexis}. The other necessary argument is a transition object \texttt{Tr}, which is a list of lists. The elements of the lists should be \texttt{glm} objects derived by fitting Poisson models to a \texttt{Lexis} object representing follow-up data in a multistate model. It is assumed (but not checked) that timescales enter in the model via the timescales of the \texttt{Lexis} object. Formally, there are no assumptions about how \texttt{lex.dur} enters in the model. Optional arguments are \texttt{t.range}, \texttt{n.int} or \texttt{time.pts}, specifying the times after entry at which the cumulative rates will be computed (the maximum of which will be taken as the censoring time), and \texttt{N} a scalar or numerical vector of the number of persons with a given initial state each record of the \texttt{init} object should represent. The central part of the functions uses a \texttt{do.call} / \texttt{lapply} / \texttt{split} construction to do simulations for different initial states. This is the construction in the middle that calls \texttt{simX}. \texttt{simLexis} also calls \texttt{get.next} which is further detailed below. <<>>= simLexis @ % \subsection{\texttt{simX}} \texttt{simX} is called by \texttt{simLexis} and simulates transition-times and -types for a set of patients assumed to be in the same state. It is called from \texttt{simLexis} with a data frame as argument, uses the state in \texttt{lex.Cst} to select the relevant component of \texttt{Tr} and compute predicted cumulative intensities for all states reachable from this state. Note that it is here the switch between \texttt{glm}, \texttt{coxph} and objects of class \texttt{function} is made. The dataset on which this prediction is done has \texttt{length(time.pts)} rows per person. <<>>= simX @ % As we see, \texttt{simX} calls \texttt{sim1} which simulates the transition for one person. \subsection{\texttt{sim1}} The predicted cumulative intensities are fed, person by person, to \texttt{sim1} --- again via a \texttt{do.call} / \texttt{lapply} / \texttt{split} construction --- and the resulting time and state is appended to the \texttt{nd} data frame. This way we have simulated \emph{one} transition (time and state) for each person: <<>>= sim1 @ % The \texttt{sim1} function uses \texttt{lint} to do linear interpolation. \subsection{\texttt{lint}} We do not use \texttt{approx} to do the linear interpolation, because this function does not do the right thing if the cumulative incidences (\texttt{ci}) are constant across a number of times. Therefore we have a custom made linear interpolator that does the interpolation exploiting the fact the the \texttt{ci} is non-decreasing and \texttt{tt} is strictly monotonously increasing: <<>>= lint @ \subsection{\texttt{get.next}} We must repeat the simulation operation on those that have a simulated entry to a transient state, and also make sure that any time scales defined as time since entry to one of these states be initialized to 0 before a call to \texttt{simX} is made for these persons. This accomplished by the function \texttt{get.next}: <<>>= get.next @ \subsection{\texttt{chop.lex}} The operation so far has censored individuals \texttt{max(time.pts)} after \emph{each} new entry to a transient state. In order to groom the output data we use \texttt{chop.lex} to censor all persons at the same designated time after \emph{initial} entry. <<>>= chop.lex @ \section{Probabilities from simulated \texttt{Lexis} objects} Once we have simulated a Lexis object we will of course want to use it for estimating probabilities, so basically we will want to enumerate the number of persons in each state at a pre-specified set of time points. \subsection{\texttt{nState}} Since we are dealing with multistate model with potentially multiple time scales, it is necessary to define the timescale (\texttt{time.scale}), the starting point on this timescale (\texttt{from}) and the points after this where we compute the number of occupants in each state, (\texttt{at}). <<>>= nState @ % \subsection{\texttt{pState}, \texttt{plot.pState} and \texttt{lines.pState}} In order to plot probabilities of state-occupancy it is useful to compute cumulative probabilities across states in any given order; this is done by the function \texttt{pState}, which returns a matrix of class \texttt{pState}: <<>>= pState @ % There is also a \texttt{plot} and \texttt{lines} method for the resulting \texttt{pState} objects: <<>>= plot.pState lines.pState @ % \bibliographystyle{plain} \begin{thebibliography}{1} \bibitem{Carstensen.2011a} B.~Carstensen and M.~Plummer. \newblock Using {L}exis objects for multi-state models in {R}. \newblock {\em Journal of Statistical Software}, 38(6):1--18, 1 2011. \bibitem{Iacobelli.2013} S.~Iacobelli and B.~Carstensen. \newblock {{M}ultiple time scales in multi-state models}. \newblock {\em Stat Med}, 32(30):5315--5327, Dec 2013. \bibitem{Plummer.2011} M.~Plummer and B.~Carstensen. \newblock Lexis: An {R} class for epidemiological studies with long-term follow-up. \newblock {\em Journal of Statistical Software}, 38(5):1--12, 1 2011. \end{thebibliography} \addcontentsline{toc}{chapter}{References} \end{document} Epi/vignettes/yll.rnw0000644000175100001440000006155513074161727014371 0ustar hornikusers\SweaveOpts{results=verbatim,keep.source=TRUE,include=FALSE,eps=FALSE} %\VignetteIndexEntry{Years of life lost: simLexis} \documentclass[a4paper,twoside,12pt]{report} % ---------------------------------------------------------------------- % General information for the title page and the page headings \newcommand{\Title}{Years of Life Lost (YLL) to disease\\Diabetes in DK as example} \newcommand{\Tit}{YLL} \newcommand{\Version}{Version 1.2} \newcommand{\Dates}{February 2017} \newcommand{\Where}{SDC} \newcommand{\Homepage}{\url{http://bendixcarstensen.com/Epi}} \newcommand{\Faculty}{\begin{tabular}{rl} Bendix Carstensen & Steno Diabetes Center, Gentofte, Denmark\\ & {\small \& Department of Biostatistics, University of Copenhagen} \\ & \texttt{b@bxc.dk}\\ & \url{http://BendixCarstensen.com} \\[1em] \end{tabular}} % Packages \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage[english]{babel} \usepackage[font=it,labelfont=normalfont]{caption} \usepackage[colorlinks,urlcolor=blue,linkcolor=red,,citecolor=Maroon]{hyperref} \usepackage[ae,hyper]{Rd} \usepackage[dvipsnames]{xcolor} \usepackage[super]{nth} \usepackage[noae]{Sweave} \usepackage{makeidx,floatflt,amsmath,amsfonts,amsbsy,enumitem,dcolumn,needspace} \usepackage{ifthen,calc,eso-pic,everyshi} \usepackage{booktabs,longtable,rotating,graphicx,subfig} \usepackage{pdfpages,verbatim,fancyhdr,datetime,% afterpage} \usepackage[abspath]{currfile} % \usepackage{times} \renewcommand{\textfraction}{0.0} \renewcommand{\topfraction}{1.0} \renewcommand{\bottomfraction}{1.0} \renewcommand{\floatpagefraction}{0.9} % \usepackage{mslapa} \definecolor{blaa}{RGB}{99,99,255} \DeclareGraphicsExtensions{.png,.pdf,.jpg} % Make the Sweave output nicer \DefineVerbatimEnvironment{Sinput}{Verbatim}{fontsize=\small,fontshape=sl,formatcom=\color{Blue}} \DefineVerbatimEnvironment{Soutput}{Verbatim}{fontsize=\small,formatcom=\color{Maroon},xleftmargin=0em} \DefineVerbatimEnvironment{Scode}{Verbatim}{fontsize=\small} \fvset{listparameters={\setlength{\topsep}{-0.1ex}}} \renewenvironment{Schunk}% {\renewcommand{\baselinestretch}{0.85} \vspace{\topsep}}% {\renewcommand{\baselinestretch}{1.00} \vspace{\topsep}} \providecommand{\ptxt}[1]{\Pp\left\{\text{#1}\right\}} \providecommand{\dif}{{\,\mathrm d}} \DeclareMathOperator{\YLL}{YLL} \DeclareMathOperator{\Pp}{P} %---------------------------------------------------------------------- % Set up layout of pages \oddsidemargin 1mm \evensidemargin 1mm \topmargin -10mm \headheight 8mm \headsep 5mm \textheight 240mm \textwidth 165mm %\footheight 5mm \footskip 15mm \renewcommand{\topfraction}{0.9} \renewcommand{\bottomfraction}{0.9} \renewcommand{\textfraction}{0.1} \renewcommand{\floatpagefraction}{0.9} \renewcommand{\headrulewidth}{0.1pt} \setcounter{secnumdepth}{4} % \setcounter{tocdepth}{2} %---------------------------------------------------------------------- % How to insert a figure in a .rnw file \newcommand{\rwpre}{./graph/gr} \newcommand{\insfig}[3]{ \begin{figure}[h] \centering \includegraphics[width=#2\textwidth]{\rwpre-#1} \caption{#3} \label{fig:#1} % \afterpage{\clearpage} \end{figure}} %---------------------------------------------------------------------- % Here is the document starting with the titlepage \begin{document} %---------------------------------------------------------------------- % The title page \setcounter{page}{1} \pagenumbering{roman} \pagestyle{plain} \thispagestyle{empty} % \vspace*{0.05\textheight} \flushright % The blank below here is necessary in order not to muck up the % linespacing in title if it has more than 2 lines {\Huge \bfseries \Title }\ \\[-1.5ex] \noindent\textcolor{blaa}{\rule[-1ex]{\textwidth}{5pt}}\\[2.5ex] \large \Where \\ \Dates \\ \Homepage \\ \Version \\[1em] \normalsize Compiled \today,\ \currenttime\\ from: \texttt{\currfileabspath}\\[1em] % \input{wordcount} \normalsize \vfill \Faculty % End of titlepage % \newpage %---------------------------------------------------------------------- % Table of contents \tableofcontents %---------------------------------------------------------------------- % General text layout \raggedright \parindent 1em \parskip 0ex \cleardoublepage %---------------------------------------------------------------------- % General page style \pagenumbering{arabic} \setcounter{page}{1} \pagestyle{fancy} \renewcommand{\chaptermark}[1]{\markboth{\textsl{#1}}{}} \renewcommand{\sectionmark}[1]{\markright{\thesection\ \textsl{#1}}{}} \fancyhead[EL]{\bf \thepage \quad \rm \leftmark} \fancyhead[ER,OL]{\sl \Tit} \fancyhead[OR]{\rm \rightmark \quad \bf \thepage} \fancyfoot{} <>= options( width=90, SweaveHooks=list( fig=function() par(mar=c(3,3,1,1),mgp=c(3,1,0)/1.6,las=1,bty="n") ) ) @ % \renewcommand{\rwpre}{./yll} %---------------------------------------------------------------------- % Here comes the substance part \chapter{Theory and technicalities} This vignette for the \texttt{Epi} package describes the probabilistic/demographic background for and technical implementation of the \texttt{erl} and \texttt{yll} functions that computes the expected residual life time and years of life lost in an illness-death model. \section{Years of life lost (YLL)} \ldots to diabetes or any other disease for that matter. The general concept in calculation of ``years lost to\ldots'' is the comparison of the expected lifetime between two groups of persons; one with and one without disease (in this example DM). The expected lifetime is the area under the survival curve, so basically the exercise requires that two survival curves that are deemed relevant be available. The years of life lost is therefore just the area between the survival curves for those ``Well'', $S_W(t)$, and for those ``Diseased'', $S_D(t)$: \[ \YLL = \int_0^\infty S_W(t) - S_D(t) \dif t \] The time $t$ could of course be age, but it could also be ``time after age 50'' and the survival curves compared would then be survival curves \emph{conditional} on survival till age 50, and the YLL would be the years of life lost for a 50-year old person with diabetes. If we are referring to the expected lifetime we will more precisely use the label expected residual lifetime, ERL. \section{Constructing the survival curves} YLL can be computed in two different ways, depending on the way the survival curve and hence the expected lifetime of a person \emph{without} diabetes is computed: \begin{itemize} \item Assume that the ``Well'' persons are \emph{immune} to disease --- using only the non-DM mortality rates throughout for calculation of expected life time. \item Assume that the ``Well'' persons \emph{can} acquire the disease and thereby see an increased mortality, thus involving all three rates shown in figure \ref{fig:states}. \end{itemize} The former gives a higher YLL because the comparison is to persons assumed immune to DM (and yet with the same mortality as non-immune prior to diagnosis), the latter gives a more realistic picture of the comparison of group of persons with and without diabetes at a given age that can be interpreted in the real world. The differences can be illustrated by figure \ref{fig:states}; the immune approach corresponds to an assumption of $\lambda(t)=0$ in the calculation of the survival curve for a person in the ``Well'' state. Calculation of the survival of a diseased person already in the ``DM'' state is unaffected by assumptions about $\lambda$. <>= library( Epi ) TM <- matrix(NA,4,4) rownames(TM) <- colnames(TM) <- c("Well","DM","Dead","Dead(DM)") TM[1,2:3] <- TM[2,4] <- 1 zz <- boxes( TM, boxpos=list(x=c(20,80,20,80),y=c(80,80,20,20)), wm=1.5, hm=4 ) @ <>= zz$Arrowtext <- c( expression(lambda), expression(mu[W]), expression(mu[D][M]) ) boxes( zz ) @ % \insfig{states}{0.7}{Illness-death model describing diabetes incidence and -mortality.} \subsection{Total mortality --- a shortcut?} A practical crude shortcut could be to compare the ERL in the diabetic population to the ERL for the \emph{entire} population (that is use the total mortality ignoring diabetes status). Note however that this approach also counts the mortality of persons that acquired the disease earlier, thus making the comparison population on average more ill than the population we aim at, namely those well at a given time, which only then become more gradually ill. How large these effects are can however be empirically explored, as we shall do later. \subsection{Disease duration} In the exposition above there is no explicit provision for the effect of disease duration, but if we were able to devise mortality rates for any combination of age and duration, this could be taken into account. There are however severe limitations in this as we in principle would want to have duration effects as long as the age-effects --- in principle for all $(a,d)$ where $d\leq A$, where $A$ is the age at which we condition. So even if we were only to compute ERL from age, say, 40 we would still need duration effects up to 60 years (namely to age 100). The incorporation of duration effects is in principle trivial from a computational point of view, but we would be forced to entertain models predicting duration effects way beyond what is actually observed disease duration in any practical case. \subsection{Computing integrals} The practical calculations of survival curves, ERL and YLL involves calculation of (cumulative) integrals of rates and functions of these as we shall see below. This is easy if we have a closed form expression of the function, so its value may be computed at any time point --- this will be the case if we model rates by smooth parametric functions. Computing the (cumulative) integral of a function is done as follows: \begin{itemize} \item Compute the value of the function (mortality rate for example) at the midpoints of a sequence of narrow equidistant intervals --- for example one- or three month intervals of age, say. \item Take the cumulative sum of these values multiplied by the interval length --- this will be a very close approximation to the cumulative integral evaluated at the end of each interval. \item If the intervals are really small (like 1/100 year), the distinction between the value at the middle and at the end of each interval becomes irrelevant. \end{itemize} Note that in the above it is assumed that the rates are given in units corresponding to the interval length --- or more precisely, as the cumulative rates over the interval. \section{Survival functions in the illness-death model} The survival functions for persons in the ``Well'' state can be computed under two fundamentally different scenarios, depending on whether persons in the ``Well'' state are assumed to be immune to the disease ($\lambda(a)=0$) or not. \subsection{Immune approach} In this case both survival functions for person in the two states are the usual simple transformation of the cumulative mortality rates: \[ S_W(a) = \exp\left(-\int_0^a\!\!\mu_W(u) \dif u \right), \qquad S_D(a) = \exp\left(-\int_0^a\!\!\mu_D(u) \dif u \right) \] \subsubsection{Conditional survival functions} If we want the \emph{conditional} survival functions given survival to age $A$, say, they are just: \[ S_W(a|A) = S_W(a)/S_W(A), \qquad S_D(a|A) = S_D(a)/S_D(A) \] \subsection{Non-immune approach} For a diseased person, the survival function in this states is the same as above, but the survival function for a person without disease (at age 0) is (see figure \ref{fig:states}): \[ S(a) = \ptxt{Well}\!(a) + \ptxt{DM}\!(a) \] In the appendix of the paper \cite{Carstensen.2008c} is an indication of how to compute the probability of being in any of the four states shown in figure \ref{fig:states}, which I shall repeat here: In terms of the rates, the probability of being in the ``Well'' box is simply the probability of escaping both death (at a rate of $\mu_W(a)$) and diabetes (at a rate of $\lambda(a)$): \[ \ptxt{Well}(a) = \exp\left(\!-\int_0^a\!\!\mu_W(u)+\lambda(u) \right) \dif u \] The probability of being alive with diabetes at age $a$, is computed given that diabetes occurred at age $s$ ($s>= data( DMepi ) @ % The dataset \texttt{DMepi} contains diabetes events, deaths and person-years for persons without diabetes and deaths and person-years for persons with diabetes: <<>>= str( DMepi ) head( DMepi ) @ % For each combination of sex, age, period and date of birth in 1 year age groups, we have the person-years in the ``Well'' (\texttt{Y.nD}) and the ``DM'' (\texttt{Y.DM}) states, as well as the number of deaths from these (\texttt{D.nD}, \texttt{D.DM}) and the number of incident diabetes cases from the ``Well'' state (\texttt{X}). In order to compute the years of life lost to diabetes and how this has changed over time, we fit models for the mortality and incidence of both groups (and of course, separately for men and women). The models we use will be age-period-cohort models \cite{Carstensen.2007a} providing estimated mortality rates for ages 0--99 and dates 1.1.1996--1.1.2016. First we transform the age and period variables to reflect the mean age and period in each of the Lexis triangles. We also compute the total number of deaths and amount of risk time, as we are going to model the total mortality as well. Finally we restrict the dataset to ages over 30 only: <<>>= DMepi <- transform( subset( DMepi, A>30 ), D.T = D.nD + D.DM, Y.T = Y.nD + Y.DM ) head(DMepi) @ % With the correct age and period coding in the Lexis triangles, we fit models for the mortalities and incidences. Note that we for comparative purposes also fit a model for the \emph{total} mortality, ignoring the <<>>= # Knots used in all models ( a.kn <- seq(40,95,,6) ) ( p.kn <- seq(1997,2015,,4) ) ( c.kn <- seq(1910,1976,,6) ) # Check the number of events between knots ae <- xtabs( cbind(D.nD,D.DM,X) ~ cut(A,c(30,a.kn,Inf)) + sex, data=DMepi ) ftable( addmargins(ae,1), col.vars=3:2 ) pe <- xtabs( cbind(D.nD,D.DM,X) ~ cut(P,c(1990,p.kn,Inf)) + sex, data=DMepi ) ftable( addmargins(pe,1), col.vars=3:2 ) ce <- xtabs( cbind(D.nD,D.DM,X) ~ cut(P-A,c(-Inf,c.kn,Inf)) + sex, data=DMepi ) ftable( addmargins(ce,1), col.vars=3:2 ) # Fit an APC-model for all transitions, seperately for men and women mW.m <- glm( D.nD ~ -1 + Ns(A ,knots=a.kn,int=TRUE) + Ns( P,knots=p.kn,ref=2005) + Ns(P-A,knots=c.kn,ref=1950), offset = log(Y.nD), family = poisson, data = subset( DMepi, sex=="M" ) ) mD.m <- update( mW.m, D.DM ~ . , offset=log(Y.DM) ) mT.m <- update( mW.m, D.T ~ . , offset=log(Y.T ) ) lW.m <- update( mW.m, X ~ . ) # Model for women mW.f <- update( mW.m, data = subset( DMepi, sex=="F" ) ) mD.f <- update( mD.m, data = subset( DMepi, sex=="F" ) ) mT.f <- update( mT.m, data = subset( DMepi, sex=="F" ) ) lW.f <- update( lW.m, data = subset( DMepi, sex=="F" ) ) @ % \section{Residual life time and years lost to DM} We now collect the estimated years of life lost classified by method (immune assumption or not), sex, age and calendar time: <<>>= a.ref <- 30:90 p.ref <- 1996:2016 aYLL <- NArray( list( type = c("Imm","Tot","Sus"), sex = levels( DMepi$sex ), age = a.ref, date = p.ref ) ) str( aYLL ) system.time( for( ip in p.ref ) { nd <- data.frame( A = seq(30,90,0.2)+0.1, P = ip, Y.nD = 1, Y.DM = 1, Y.T = 1 ) muW.m <- ci.pred( mW.m, nd )[,1] muD.m <- ci.pred( mD.m, nd )[,1] muT.m <- ci.pred( mT.m, nd )[,1] lam.m <- ci.pred( lW.m, nd )[,1] muW.f <- ci.pred( mW.f, nd )[,1] muD.f <- ci.pred( mD.f, nd )[,1] muT.f <- ci.pred( mT.f, nd )[,1] lam.f <- ci.pred( lW.f, nd )[,1] aYLL["Imm","M",,paste(ip)] <- yll( int=0.2, muW.m, muD.m, lam=NULL, A=a.ref, age.in=30, note=FALSE )[-1] aYLL["Imm","F",,paste(ip)] <- yll( int=0.2, muW.f, muD.f, lam=NULL, A=a.ref, age.in=30, note=FALSE )[-1] aYLL["Tot","M",,paste(ip)] <- yll( int=0.2, muT.m, muD.m, lam=NULL, A=a.ref, age.in=30, note=FALSE )[-1] aYLL["Tot","F",,paste(ip)] <- yll( int=0.2, muT.f, muD.f, lam=NULL, A=a.ref, age.in=30, note=FALSE )[-1] aYLL["Sus","M",,paste(ip)] <- yll( int=0.2, muW.m, muD.m, lam=lam.m, A=a.ref, age.in=30, note=FALSE )[-1] aYLL["Sus","F",,paste(ip)] <- yll( int=0.2, muW.f, muD.f, lam=lam.f, A=a.ref, age.in=30, note=FALSE )[-1] } ) round( ftable( aYLL[,,seq(1,61,10),], col.vars=c(3,2) ), 1 ) @ % We now have the relevant points for the graph showing YLL to diabetes for men and women by age, and calendar year, both under the immunity and susceptibility models for the calculation of YLL. <>= plyll <- function(wh){ par( mfrow=c(1,2), mar=c(3,3,1,1), mgp=c(3,1,0)/1.6, bty="n", las=1 ) matplot( a.ref, aYLL[wh,"M",,], type="l", lty=1, col="blue", lwd=1:2, ylim=c(0,12), xlab="Age", ylab="Years lost to DM", yaxs="i" ) abline(v=50,h=1:10,col=gray(0.7)) text( 90, 11, "Men", col="blue", adj=1 ) text( 40, aYLL[wh,"M","40","1996"], "1996", adj=c(0,0), col="blue" ) text( 43, aYLL[wh,"M","44","2016"], "2016", adj=c(1,1), col="blue" ) matplot( a.ref, aYLL[wh,"F",,], type="l", lty=1, col="red", lwd=1:2, ylim=c(0,12), xlab="Age", ylab="Years lost to DM", yaxs="i" ) abline(v=50,h=1:10,col=gray(0.7)) text( 90, 11, "Women", col="red", adj=1 ) text( 40, aYLL[wh,"F","40","1996"], "1996", adj=c(0,0), col="red" ) text( 43, aYLL[wh,"F","44","2016"], "2016", adj=c(1,1), col="red" ) } plyll("Imm") @ % <>= plyll("Tot") @ % <>= plyll("Sus") @ % \begin{figure}[h] \centering \includegraphics[width=\textwidth]{yll-imm} \caption{Years of life lost to DM: the difference in expected residual life time at different ages between persons with and without diabetes, assuming the persons without diabetes at a given age remain free from diabetes (immunity assumption --- not reasonable). The lines refer to date of evaluation; the top lines refer to 1.1.1996 the bottom ones to 1.1.2016. Blue curves are men, red women.} \label{fig:imm} \end{figure} \begin{figure}[h] \centering \includegraphics[width=\textwidth]{yll-sus} \caption{Years of life lost to DM: the difference in expected residual life time at different ages between persons with and without diabetes, allowing the persons without diabetes at a given to contract diabetes and thus be subject to higher mortality. The lines refer to date of evaluation; the top lines refer to 1.1.1996 the bottom ones to 1.1.2016. Blue curves are men, red women.} \label{fig:sus} \end{figure} \begin{figure}[h] \centering \includegraphics[width=\textwidth]{yll-tot} \caption{Years of life lost to DM: the difference in expected residual life time at different ages between persons with and without diabetes. Allowance for susceptibility is approximated by using the total population mortality instead of non-DM mortality. The lines refer to date of evaluation; the top lines refer to 1.1.1996 the bottom ones to 1.1.2016. Blue curves are men, red women.} \label{fig:tot} \end{figure} From figure \ref{fig:sus} we see that for men aged 50 the years lost to diabetes has decreased from a bit over 8 to a bit less than 6 years, and for women from 8.5 to 5 years; so a greater improvement for women. \chapter{Practical implementation} We have devised functions that wraps these formulae up for practical use. \section{Function definitions} <>= source( "../R/erl.R", keep.source=TRUE ) @ When using the functions it is assumed that the functions $\mu_W$, $\mu_D$ and $\lambda$ are given as vectors corresponding to equidistantly (usually tightly) spaced ages from 0 to $K$ where K is the age where everyone can safely be assumed dead. \texttt{surv1} is a simple function that computes the survival function from a vector of mortality rates, and optionally the conditional survival given being alive at prespecified ages: <<>>= surv1 @ % \texttt{erl1} basically just expands the result of \texttt{surv1} with a column of expected residual life times: <<>>= erl1 @ % We also define a function, \texttt{surv2}, that computes the survival function for a non-diseased person that may become diseased with rate \texttt{lam} and after that die at a rate of \texttt{muD} (corresponding to the formulae above). This is the sane way of handling years of life lost to a particular illness: <<>>= surv2 @ % Finally we devised a function using these to compute the expected residual lifetime at select ages: <<>>= erl @ % \ldots and a wrapper for this if we only want the years of life lost returned: <<>>= yll @ % \bibliographystyle{plain} \begin{thebibliography}{1} \bibitem{Carstensen.2007a} B~Carstensen. \newblock Age-{P}eriod-{C}ohort models for the {L}exis diagram. \newblock {\em Statistics in Medicine}, 26(15):3018--3045, July 2007. \bibitem{Carstensen.2008c} B.~Carstensen, J.K. Kristensen, P.~Ottosen, and K.~Borch-Johnsen. \newblock The {D}anish {N}ational {D}iabetes {R}egister: {T}rends in incidence, prevalence and mortality. \newblock {\em Diabetologia}, 51:2187--2196, 2008. \end{thebibliography} \addcontentsline{toc}{chapter}{References} \end{document} Epi/MD50000644000175100001440000002433313142510775011327 0ustar hornikusers9a824270cc5a762fea93b89f7be6af50 *CHANGES 7ec191f7f9198e00e243799ac541a98a *DESCRIPTION 3889ddbc9a5ac1ba4f04ec84d8dfc26e *NAMESPACE fac3c7f01ab0bd6930cf3cbea20e6bcc *R/Aplot.R a031997be7388601dd1df6a28fc55328 *R/Cplot.R 6a1c4f4cbbf509d1f3c40b9f0adb6399 *R/Icens.R 6dcc1bf2ed458a8898d366791de02f7d *R/LCa.fit.R d802fc697f55ab0ef5ccd45e51776e46 *R/Lexis.diagram.R c6b992622881e60fb82ee4b8c3357c9d *R/Lexis.lines.R 05c38381cc48ab25b681e8615ac31ea8 *R/Life.lines.R a25e4901b0899a6b00285713117e3f21 *R/N2Y.r 8743609003b32036a7a1d02fb4b8e17b *R/NArray.R 876bd6183d0fdb8a180e462715675e0c *R/Ns.r e9f582b5dc17d07bf2df96de74441963 *R/Pplot.R b1c0f04443499205645ad578a3dd8573 *R/ROC.R 0a7bbd37e75920b54fd0fbe00a86511d *R/Relevel.R 0e3e3d23b8ab79dcf3046828190462b2 *R/Termplot.R 28a0ec0c8584e22759b516ff69e5bd78 *R/Wald.R 6f35204baee4552a741c7262ac33a05d *R/addCov.Lexis.R b1f0000430d6e15f59fe949ed8f1beb1 *R/apc.LCa.R 847f61901b2c9123367be3ebef30abe6 *R/apc.fit.R 3c53b3d667196c204fab811d2231ccd5 *R/apc.frame.R 40d04e6ce1304d51df6911621fe28b52 *R/apc.plot.R 8ce5a4c989947cb9d93becdecfde642c *R/as.Date.cal.yr.R f4e2a039dda786e4cad0b2961e3dd599 *R/boxes.MS.R 44e5f888817c94b8a190eae4aa964a2c *R/cal.yr.R 6988e76eb64f004a8c5029c23f8603af *R/ccwc.R d5171eb23f0b431a7cc89b69d03308a6 *R/ci.cum.R ab5fd1bbdc59ef536f103bf533a5f143 *R/ci.lin.R 6f80c7b2b2120068cd16c043fbc29db3 *R/ci.mat.R 886f87cbd08266fa281e2ed7b3b3c253 *R/ci.pd.R 7637da11fdfb3612df5d73a64ee044e4 *R/clear.R e7e271d9c47316877e9726fdaaa9699f *R/clogistic.R d365bc4739ebb104b0318c1c9ee226fd *R/contr.2nd.R bcd4142d3bf3e4517397387fe43fdf95 *R/contr.cum.R 8064804ee2b1cfa0cea2b44a58106b0a *R/contr.diff.R 8ffc3eabb90b6b9b710109015779d853 *R/contr.orth.R efb8f1a3b97b41244275534855707b8b *R/crr.Lexis.r 281380e913564ab522664f2255b2e8a8 *R/cutLexis.R 14270f90ed00f4f043286d50e2de9f26 *R/detrend.R a86250cce524f9fa2215c0c0cac4c6e7 *R/effx.match.r 9b46438b1c6fdc926ac1a253a85096aa *R/effx.r abd3fdeb059a214f253e2f3e4658a302 *R/erl.R 822e02862de39625e5ed9ef6f84bdf39 *R/expand.data.r 0466dba42d10766e0b9cd220ad39dcf4 *R/factorize.R 67ce5a28408f42c7b65084195897b995 *R/fit.add.r 44eec3e5b106ee3f518beed49b4e0f9b *R/fit.baseline.R 8ffaebb81a92649b137ff8a4911841da *R/fit.mult.r 7c7059bf47c6421d6412a4bc53fc5950 *R/float.R 23a68a19f8f8e70c5664eb5110b3e807 *R/foreign.R da7b5d41fe7876ef6bab01839b613939 *R/ftrend.R f0f84fc26294b1cb3016a9e23974c545 *R/gen.exp.R 06f8a1ac3afc69610b9edfebc638f17b *R/lexis.R f8eba91de17a8207c6303ffb7b34f0a7 *R/lls.R d593af0ab833c8655469a24891e9116f *R/mcutLexis.R 79d6e0b02a2c4e98fbbfcd936b21d377 *R/mh.R 9e48e47769874a34f63a2e2d4e6ffffc *R/ncut.r 2a44a66ac4fe7eccab191f94957265e2 *R/pctab.R ff45a8401b6862061389134357b610cc *R/plotCIF.R bb1ce8ea65f95b7e1720c2686e4de799 *R/plotEst.R 57eecdd415b7d0f7dfad39825644add5 *R/plotevent.r c0229c2819d977a8c557a22dea1dd5fa *R/print.Icens.r cca51283f637927702fbe217367011eb *R/print.floated.R 961858aa39320463dffa6154c70c87f6 *R/projection.ip.r 0c2a2e493c190c4e74587b5127e9bef6 *R/rateplot.R 251d9ec19ef0ca158582f78d70255c23 *R/rm.tr.R 804e11d9d564a860fce275258f40db3d *R/simLexis.R 358b6fa60093d8bbee969a76a88797c0 *R/splitLexis.R e08261ab194f4aca8502ee249afd309e *R/stack.Lexis.R 8796d2af48a79385ad22b03ed0f4059c *R/stackedCIF.R fb143d532001643d3f74fbd2e114e976 *R/stattable.R 889282ea37a5a9d9bf7155d790cd9036 *R/summary.Icens.r 8ceccd0ffa9694670f38c34b65d5be10 *R/summary.Lexis.r 88983ba8314a37910993d469a982d800 *R/twoby2.R 53904292629435d35ec42f11329b2c60 *R/xgrep.R 1ffde7eb6c78d26bcb1e51a138e63485 *build/vignette.rds b9d3112271b9545896c98ec6406f5f02 *data/B.dk.rda 666e336a1aefb9c4298abb83a81a3300 *data/DMconv.rda ea83ed46a5581ea8489646abd3d1c0ae *data/DMepi.rda e200a06eee9305b2fa2c59af5982d62b *data/DMlate.rda e8f6f529b77cb3a860b9d53f5f65c3bb *data/DMrand.rda ba4f4ad111ab2f488d1373c1cfcb7398 *data/M.dk.rda 7dda71830cede85dbfcbc4629ca31892 *data/N.dk.rda 7a458e4dee088bf6808e1e553532e590 *data/S.typh.rda 5fa4742e7db7dadb4b4be081ff296a24 *data/Y.dk.rda 5420c7c0ac8a7abd672203ae3f77b8fc *data/bdendo.rda 20661de22cca3c2724775faec39fe825 *data/bdendo11.rda ccc912355c96834cacc675ff5e8c0e55 *data/births.rda 2c17f06d2737d1dc3d2aaf1821013c9f *data/blcaIT.rda c902acbb18655da273e13654014be570 *data/brv.rda 27a20f2f644259b9d295a0486071f6c9 *data/diet.rda f9b5f0bcba4b20da2393194711e43d1b *data/ewrates.rda 8f51a96ef03eb3d5f8c723e58e3a8f29 *data/gmortDK.rda 2f3b8fc48d21966281153d98079cec92 *data/hivDK.rda 480bd25e6150c55fe17db41d6eb00007 *data/lep.rda b5911d05263d3e9efe5e4e99eaa6a76e *data/lungDK.rda cb139c31c1fb0421232caf88181ec5ac *data/mortDK.rda deb94384c7380312f9b33f75cf6d8559 *data/nickel.rda 4640a31484934cccc1d626104af1365f *data/occup.rda 404cc2c826ccdfb5b5edbe9834561e02 *data/testisDK.rda 1953ddd7d750051c5682fa08b11cb777 *data/thoro.rda 9bd39178a387f935acc54519109c9f4a *inst/CITATION e61ded63f726562d6f3172838e4f7337 *inst/doc/Follow-up.R d8bfa83259c458592bdf1e8cabca4247 *inst/doc/Follow-up.pdf a6978ca7d45a578a4fb047fb92eeed73 *inst/doc/Follow-up.rnw 364611344a5e791ae93f506e961b5fcc *inst/doc/index.html 8d64b0389082fb54478f8e9667934265 *inst/doc/simLexis.R 441f8e7242cf6b1ef990ffd642ff56fa *inst/doc/simLexis.pdf 37f8cd2365c025fbb1d348052c67f712 *inst/doc/simLexis.rnw 3cf7875e75ee2ef80cf2eda579764d6f *inst/doc/yll.R b4a034b2c6be5a4e5b63d7f38007a142 *inst/doc/yll.pdf 5b597c102643a5597a70ec91abc1899c *inst/doc/yll.rnw 317bb6ebeaec5e7376b609d7e382c166 *man/B.dk.Rd 3abc5c20e62c874d70dcb2688ad2cce5 *man/DMconv.Rd e9a988b029749169403ab0bf749d53da *man/DMepi.Rd 362200b221355a7bcbcd1c7c8df5243f *man/DMlate.Rd c87e6a0d0a5c461ecf4df07c2c96f1c1 *man/Icens.Rd c20a70a6f6c4f815e9a7c90d26529cab *man/LCa.fit.Rd e90e2ce2e2bc9daf1283492261c8ebbd *man/Lexis.Rd c97dabafce248e4d47c5b18b6f04efe0 *man/Lexis.diagram.Rd 2e71ca58213788c8a358708e776e2112 *man/Lexis.lines.Rd b4b2ca144feacece204f86bc6640d51a *man/Life.lines.Rd daf66f950320e836b8ce1d2bd37cdc41 *man/M.dk.Rd 6ae7494a426801b9944c37190c09b3ee *man/N.dk.Rd 0983e4031974eea1a30e67db90310c25 *man/N2Y.Rd 424aecfdd664b3123ad4815880aa3761 *man/NArray.Rd 03f9885a6c523d7a221cf0a2272628fc *man/Ns.Rd 335b75739b8a25293690da804cd5e522 *man/ROC.Rd ca827755eae8ee8286860a715cbd1744 *man/Relevel.Rd bb2162d557dfb7685edac64ac3213b6c *man/S.typh.Rd 9351888a37017068f2c9ac8b843c846d *man/Termplot.Rd b4879df831de32e9e298b7b3d90389a9 *man/Y.dk.Rd b813883bd7caca8d97ee45f456932eb4 *man/addCov.Lexis.Rd 62c36534ab2b6043f68306dd33407891 *man/apc.LCa.Rd d5976837ba976d5969aaaedb98b215eb *man/apc.fit.Rd 8e42054ad19c34f2bf77210cfafc560e *man/apc.frame.Rd 92b663829915395cdabf3e5d37cdd2b4 *man/bdendo.Rd 968ba8cef65153e9c9c521dd1541123e *man/bdendo11.Rd d74a4f6e66ce91c73cd2817bb690446a *man/births.Rd 8dc11840302a388e4f26892335d5d888 *man/blcaIT.Rd 6b9f6bc7ca862808b89f6439914b8a0a *man/boxes.MS.Rd 18d942d375c5d5f6899291bf9cd1fe11 *man/brv.Rd a2bedd44df3606b6585fd1da897de7ec *man/cal.yr.Rd effba2c17ade00f0afd10184a073d34c *man/ccwc.Rd 90337e7772c67e4e140e21165c30f079 *man/ci.cum.Rd 5fca264afe8e1bfd25f93d365d9156fa *man/ci.lin.Rd e7477402aa4746d653a0c72b2239d185 *man/ci.pd.Rd 128c0b1d00a69e41d131a6f74a1bae23 *man/clogistic.Rd cf5e5a6e18e07b7bb8d70dc0417e6166 *man/contr.cum.Rd 24343adc886e90c75f7af178201bd6cd *man/crr.Lexis.rd 7d42e6a788c81361f03f03af15a2187c *man/cutLexis.Rd a1ab8c14b721360ba0cb17da598bfa84 *man/detrend.Rd 386d0a4aa3515cf754ef458e1f32089c *man/diet.Rd 64dd6599bb830e98f4717b1a34ee12ab *man/effx.Rd 3c3cc3b1ecabece6b7709c1b147bab4e *man/effx.match.Rd a4922d13042b2d343868518a072e64d3 *man/erl.Rd 0dc62e726cdff6694774fab66595ee81 *man/ewrates.Rd eb0c50c4a2572fd514c475358165fa57 *man/expand.data.rd 344adb137962cfa8fc7c2cf2858de3a3 *man/fit.add.Rd 3b44fed4ae70541c965c4cfbed966a68 *man/fit.baseline.rd b92589537d0e1c4abebdf1aad6abf88b *man/fit.mult.Rd bca8b8c3452180e63d4d22885b04e3ce *man/float.Rd 3afd2a7cb9c812dfa783cb916828b7cf *man/foreign.Lexis.Rd e5a57a203cb91e9680dedc9023779e59 *man/ftrend.Rd e7e33d1ae13dec7a5cf3c3f96e1c085e *man/gen.exp.Rd cbbc2a23f902d83ba2527b27b5ed3adb *man/gmortDK.Rd d9f1d31e109d6058a2160ca0aa49bf81 *man/hivDK.Rd 9c3b059921d728298ccff73298b4dd31 *man/lep.Rd 470bf279897b9c9ee2600126127d8ada *man/lgrep.Rd ec0e27968d4ee35f390161e49abd903c *man/lines.apc.Rd 78125ba49d54905fb727765dc8997796 *man/lls.Rd 661ec298ffcd0f39cf55c5d033e04fd1 *man/lungDK.Rd cb1f50d16fe21259603273d2004d14b3 *man/mcutLexis.Rd 3c462c4ce7ca1ce4b8c6fef50b3c7623 *man/merge.Lexis.Rd 4c26c9edf5d64b0af3e63ad791b2a280 *man/merge.data.frame.Rd 34c530c36a3a1a7447ff8eea58f42084 *man/mh.Rd 2ecfec2d86e80b9bbcc2c3a253348edd *man/mortDK.Rd 9a531412399076898e3e39c1c20eb69a *man/ncut.Rd 880466737da2c1037259c3f712a7e9fe *man/nice.Rd 05bd25340716d0805cbc7eb433896206 *man/nickel.Rd 0e0ff2e0894523b3878213d03afcc8cf *man/occup.Rd fb7ba7ea4cc2a9a67529348a4d971a4f *man/pc.lines.Rd 86cac5433077a16960bca5d5865586a4 *man/pctab.Rd 50c0516a536004d7f4ce91ef1bbfd8c9 *man/plot.Lexis.Rd d30b27f4c3ef397de514614ba3e6ba3e *man/plot.apc.Rd 41c46ab16d54e331e163a455e67f9d20 *man/plotCIF.Rd 5e3bda25091001df87ded934e0fd929f *man/plotEst.Rd b0047a7bab6a20b153485db9bd338394 *man/plotevent.rd feb2228ef38635fcbf9083253c2f6d21 *man/projection.ip.rd a04f5841de6a7a9cf9a21e5caa8e54a5 *man/rateplot.Rd 78a9dbec1798f1b4e5735c71756f0ec6 *man/rbind.Lexis.Rd c5df7f725aed8ec3520ebd9735deeccb *man/rm.tr.Rd 9fee82808de1916808de45242ebafd78 *man/simLexis.Rd a22aa8901f1f717b6d3a7ed086bc8e02 *man/splitLexis.Rd 00fd0080aeb0551b2af69b6d918265e2 *man/stack.Lexis.Rd eaad8ae22bd68a18750a94352f65f9c3 *man/start.Lexis.Rd 4f43436fc863747dad4fcdd566948039 *man/stattable.Rd 73cf4597fcb4a9d019bda47431b095be *man/stattable.funs.Rd f10fc89dadf571e07f3b13923660cff6 *man/subset.Lexis.Rd 75b79b094aa4e94218df58cd5bec86d9 *man/summary.Lexis.rd 14711d23ae0b89d9d22b9f3b07211093 *man/testisDK.Rd e3446824b09ea4ad8e8a0ddfc1987eef *man/thoro.Rd 6ea9cf64475187fa2f402275c40573a7 *man/time.band.Rd 2edb93539fa7b9f47a3083b624443f9d *man/time.scales.Rd f80e2b3fe7e1d9df9c40dcd577a3f499 *man/transform.Lexis.Rd 02fc311541fae16a5d3a580a04925050 *man/twoby2.Rd bcc0556f8f0a158637592731928cf835 *src/chinv2.c 3e3a51847b5767274f0945350e947726 *src/cholesky2.c 09bf10fed80e805e7e58db9794e5edcc *src/chsolve2.c 872ef5e7ef0c1941c17d7dd612f6b1c3 *src/clogit.c d77bd820f6ce7dc7883c9e2813a44c89 *src/init.c a6978ca7d45a578a4fb047fb92eeed73 *vignettes/Follow-up.rnw 364611344a5e791ae93f506e961b5fcc *vignettes/index.html 37f8cd2365c025fbb1d348052c67f712 *vignettes/simLexis.rnw 5b597c102643a5597a70ec91abc1899c *vignettes/yll.rnw Epi/build/0000755000175100001440000000000013142414371012104 5ustar hornikusersEpi/build/vignette.rds0000644000175100001440000000046513142414371014450 0ustar hornikusersR=O0uJH],1JP\[Ѝ?iÇ|||wSL0 (D7\:Dd= 3.0.0), utils Imports: cmprsk, etm, splines, MASS, survival, plyr, Matrix, numDeriv, data.table, zoo Suggests: mstate, nlme, lme4 Description: Functions for demographic and epidemiological analysis in the Lexis diagram, i.e. register and cohort follow-up data, in particular representation, manipulation and simulation of multistate data - the Lexis suite of functions, which includes interfaces to 'mstate', 'etm' and 'cmprsk' packages. Also contains functions for Age-Period-Cohort and Lee-Carter modeling and a function for interval censored data and some useful functions for tabulation and plotting, as well as a number of epidemiological data sets. License: GPL-2 URL: http://BendixCarstensen.com/Epi/ NeedsCompilation: yes Packaged: 2017-08-08 20:03:05 UTC; bendix Author: Bendix Carstensen [aut, cre], Martyn Plummer [aut], Esa Laara [ctb], Michael Hills [ctb] Maintainer: Bendix Carstensen Repository: CRAN Date/Publication: 2017-08-09 04:39:25 UTC Epi/man/0000755000175100001440000000000013142414371011560 5ustar hornikusersEpi/man/Lexis.lines.Rd0000644000175100001440000000447713011073056014254 0ustar hornikusers\name{Lexis.lines} \alias{Lexis.lines} \title{Draw life lines in a Lexis diagram.} \description{ Add life lines to a Lexis diagram. } \usage{ Lexis.lines( entry.date = NA, exit.date = NA, birth.date = NA, entry.age = NA, exit.age = NA, risk.time = NA, col.life = "black", lwd.life = 2, fail = NA, cex.fail = 1, pch.fail = c(NA, 16), col.fail = col.life, data = NULL ) } \arguments{ \item{entry.date, entry.age, exit.date, exit.age, risk.time, birth.date}{Numerical vectors defining lifelines to be plotted in the diagram. At least three must be given to produce lines. Not all subsets of three will suffice, the given subset has to define life lines. If insufficient data is given, no life lines are produced.} \item{col.life}{Colour of the life lines.} \item{lwd.life}{Width of the life lines.} \item{fail}{Logical of event status at exit for the persons whose life lines are plotted.} \item{cex.fail}{The size of the status marks at the end of life lines.} \item{pch.fail}{The status marks at the end of the life lines.} \item{col.fail}{Colour of the marks for censorings and failures respectively.} \item{data}{Data frame in which to interpret values.} } \value{ If sufficient information on lifelines is given, a data frame with one row per person and columns with entry ages and dates, birth date, risk time and status filled in. Side effect: Life lines are added to an existing Lexis diagram. Lexis.lines adds life lines to an existing plot. } \author{ Bendix Carstensen, Steno Diabetes Center, \url{http://BendixCarstensen.com} } \examples{ Lexis.diagram( entry.age = c(3,30,45), risk.time = c(25,5,14), birth.date = c(1970,1931,1925.7), fail = c(TRUE,TRUE,FALSE) ) Lexis.lines( entry.age = sample( 0:50, 100, replace=TRUE ), risk.time = sample( 5:40, 100, r=TRUE), birth.date = sample( 1910:1980, 100, r=TRUE ), fail = sample(0:1,100,r=TRUE), cex.fail = 0.5, lwd.life = 1 ) } \keyword{ hplot } \keyword{ dplot } \seealso{ \code{\link{Lexis.diagram}}, \code{\link{Life.lines}} } Epi/man/cutLexis.Rd0000644000175100001440000001700413127405571013656 0ustar hornikusers\name{cutLexis} \alias{cutLexis} \alias{countLexis} \title{ Cut follow-up at a specified date for each person. } \description{ Follow-up intervals in a Lexis object are divided into two sub-intervals: one before and one after an intermediate event. The intermediate event may denote a change of state, in which case the entry and exit status variables in the split Lexis object are modified. } \usage{ cutLexis( data, cut, timescale = 1, new.state = nlevels(data$lex.Cst)+1, new.scale = FALSE, split.states = FALSE, progressive = FALSE, precursor.states = NULL, count = FALSE ) countLexis( data, cut, timescale = 1 ) } \arguments{ \item{data}{A \code{Lexis} object.} \item{cut}{A numeric vector with the times of the intermediate event. If a time is missing (\code{NA}) then the event is assumed to occur at time \code{Inf}. \code{cut} can also be a dataframe, see details.} \item{timescale}{The timescale that \code{cut} refers to. Numeric or character.} \item{new.state}{The state to which a transition occur at time \code{cut}. It may be a single value, which is then applied to all rows of \code{data}, or a vector with a separate value for each row} \item{new.scale}{Name of the timescale defined as "time since entry to new.state". If \code{TRUE} a name for the new scale is constructed. See details.} \item{split.states}{Should states that are not precursor states be split according to whether the intermediate event has occurred.} \item{progressive}{a logical flag that determines the changes to exit status. See details.} \item{precursor.states}{an optional vector of states to be considered as "less severe" than \code{new.state}. See Details below} \item{count}{logical indicating whether the \code{countLexis} options should be used. Specifying \code{count=TRUE} amounts to calling \code{countLexis}, in which case the arguments \code{new.state}, \code{progressive} and \code{precursor.states} will be ignored. } } \value{ A \code{Lexis} object, for which each follow-up interval containing the cutpoint is split in two: one before and one after the cutpoint. An extra time-scale is added; the time since the event at \code{cut}. This is \code{NA} for any follow-up prior to the intermediate event. } \note{ The \code{cutLexis} function superficially resembles the \code{splitLexis} function. However, the \code{splitLexis} function splits on a vector of common cut-points for all rows of the Lexis object, whereas the \code{cutLexis} function splits on a single time point, which may be distinct for each row, modifies the status variables, adds a new timescale and updates the attribute "time.since". This attribute is a character vector of the same length as the "time.scales" attribute, whose value is '""' if the corresponding timescale is defined for any piece of follow-up, and if the corresponding time scale is defined by say \code{cutLexis(obj,new.state="A",new.scale=TRUE)}, it has the value "A". } \details{ The \code{cutLexis} function allows a number of different ways of specifying the cutpoints and of modifying the status variable. If the \code{cut} argument is a dataframe it must have columns \code{lex.id}, \code{cut} and \code{new.state}. The values of \code{lex.id} must be unique. In this case it is assumed that each row represents a cutpoint (on the timescale indicated in the argument \code{timescale}). This cutpoint will be applied to all records in \code{data} with the corresponding \code{lex.id}. This makes it possible to apply \code{cutLexis} to a split \code{Lexis} object. If a \code{new.state} argument is supplied, the status variable is only modified at the time of the cut point. However, it is often useful to modify the status variable after the cutpoint when an important event occurs. There are three distinct ways of doing this. If the \code{progressive=TRUE} argument is given, then a "progressive" model is assumed, in which the status can either remain the same or increase during follow-up, but never decrease. This assumes that the state variables \code{lex.Cst} and \code{lex.Xst} are either numeric or ordered factors. In this case, if \code{new.state=X}, then any exit status with a value less than \code{X} is replaced with \code{X}. The Lexis object must already be progressive, so that there are no rows for which the exit status is less than the entry status. If \code{lex.Cst} and \code{lex.Xst} are factors they must be ordered factors if \code{progressive=TRUE} is given. As an alternative to the \code{progressive} argument, an explicit vector of precursor states, that are considered less severe than the new state, may be given. If \code{new.state=X} and \code{precursor.states=c(Y,Z)} then any exit status of \code{Y} or \code{Z} in the second interval is replaced with \code{X} and all other values for the exit status are retained. The \code{countLexis} function is a variant of \code{cutLexis} when the cutpoint marks a recurrent event, and the status variable is used to count the number of events that have occurred. Times given in \code{cut} represent times of new events. Splitting with \code{countLexis} increases the status variable by 1. If the current status is \code{X} and the exit status is \code{Y} before cutting, then after cutting the entry status is \code{X}, \code{X+1} for the first and second intervals, respectively, and the exit status is \code{X+1}, \code{Y+1} respectively. Moreover the values of the status is increased by 1 for all intervals for all intervals after the cut for the person in question. Hence, a call to \code{countLexis} is needed for as many times as the person with most events. But also it is immaterial in what order the cutpoints are entered. } \author{Bendix Carstensen, Steno Diabetes Center, \email{b@bxc.dk}, Martyn Plummer, IARC, \email{plummer@iarc.fr} } \seealso{ \code{\link{mcutLexis}}, \code{\link{splitLexis}}, \code{\link{Lexis}}, \code{\link{summary.Lexis}}, \code{\link{boxes.Lexis}} } \examples{ # A small artificial example xx <- Lexis( entry=list(age=c(17,24,33,29),per=c(1920,1933,1930,1929)), duration=c(23,57,12,15), exit.status=c(1,2,1,2) ) xx cut <- c(33,47,29,50) cutLexis(xx, cut, new.state=3, precursor=1) cutLexis(xx, cut, new.state=3, precursor=2) cutLexis(xx, cut, new.state=3, precursor=1:2) # The same as the last example cutLexis(xx, cut, new.state=3) # The same example with a factor status variable yy <- Lexis(entry = list(age=c(17,24,33,29),per=c(1920,1933,1930,1929)), duration = c(23,57,12,15), entry.status = factor(rep("alpha",4), levels=c("alpha","beta","gamma")), exit.status = factor(c("alpha","beta","alpha","beta"), levels=c("alpha","beta","gamma"))) cutLexis(yy,c(33,47,29,50),precursor="alpha",new.state="gamma") cutLexis(yy,c(33,47,29,50),precursor=c("alpha","beta"),new.state="aleph") ## Using a dataframe as cut argument rl <- data.frame( lex.id=1:3, cut=c(19,53,26), timescale="age", new.state=3 ) rl cutLexis( xx, rl ) cutLexis( xx, rl, precursor=1 ) cutLexis( xx, rl, precursor=0:2 ) ## It is immaterial in what order splitting and cutting is done xs <- splitLexis( xx, breaks=seq(0,100,10), time.scale="age" ) xs xsC <- cutLexis(xs, rl, precursor=0 ) xC <- cutLexis( xx, rl, pre=0 ) xC xCs <- splitLexis( xC, breaks=seq(0,100,10), time.scale="age" ) xCs str(xCs) } \keyword{survival} Epi/man/bdendo.Rd0000644000175100001440000000410713011073056013300 0ustar hornikusers\name{bdendo} \alias{bdendo} \docType{data} \title{A case-control study of endometrial cancer} \description{ The \code{bdendo} data frame has 315 rows and 13 columns. These data concern a study in which each case of endometrial cancer was matched with 4 controls. Matching was by date of birth (within one year), marital status, and residence. } \format{ This data frame contains the following columns: \tabular{rl}{ \code{set}: \tab Case-control set: a numeric vector \cr \code{d}: \tab Case or control: a numeric vector (1=case, 0=control) \cr \code{gall}: \tab Gall bladder disease: a factor with levels \code{No} \code{Yes}. \cr \code{hyp}: \tab Hypertension: a factor with levels \code{No} \code{Yes}. \cr \code{ob}: \tab Obesity: a factor with levels \code{No} \code{Yes}. \cr \code{est}: \tab A factor with levels \code{No} \code{Yes}. \cr \code{dur}: \tab Duration of conjugated oestrogen therapy: an ordered factor with levels \code{0} < \code{1} < \code{2} < \code{3} < \code{4}. \cr \code{non}: \tab Use of non oestrogen drugs: a factor with levels \code{No} \code{Yes}. \cr \code{duration}: \tab Months of oestrogen therapy: a numeric vector. \cr \code{age}: \tab A numeric vector. \cr \code{cest}: \tab Conjugated oestrogen dose: an ordered factor with levels \code{0} < \code{1} < \code{2} < \code{3}. \cr \code{agegrp}: \tab A factor with levels \code{55-59} \code{60-64} \code{65-69} \code{70-74} \code{75-79} \code{80-84} \cr \code{age3}: \tab a factor with levels \code{<64} \code{65-74} \code{75+} \cr } } \source{ Breslow NE, and Day N, Statistical Methods in Cancer Research. Volume I: The Analysis of Case-Control Studies. IARC Scientific Publications, IARC:Lyon, 1980. } \examples{ data(bdendo) } \keyword{datasets} Epi/man/ci.cum.Rd0000644000175100001440000001010613074615243013230 0ustar hornikusers\name{ci.cum} \alias{ci.cum} \title{ Compute cumulative sum of estimates. } \description{ Computes the cumulative sum of parameter functions and the standard error of it. Optionally the exponential is applied to the parameter functions before it is cumulated. } \usage{ ci.cum( obj, ctr.mat = NULL, subset = NULL, intl = 1, alpha = 0.05, Exp = TRUE, ci.Exp = FALSE, sample = FALSE ) } \arguments{ \item{obj}{A model object (of class \code{lm}, \code{glm}, \code{coxph}, \code{survreg}, \code{lme},\code{mer},\code{nls},\code{gnlm}, \code{MIresult} or \code{polr}). } \item{ctr.mat}{ Contrast matrix defining the parameter functions from the parameters of the model. } \item{subset}{ Subset of the parameters of the model to which \code{ctr.mat} should be applied. } \item{intl}{ Interval length for the cumulation. Either a constant or a numerical vector of length \code{nrow(ctr.mat)}. } \item{alpha}{ Significance level used when computing confidence limits. } \item{Exp}{ Should the parameter function be exponentiated before it is cumulated?} \item{ci.Exp}{ Should the confidence limits for the cumulative rate be computed on the log-scale, thus ensuring that exp(-cum.rate) is always in [0,1]?} \item{sample}{Should a sample of the original parameters be used to compute a cumulative rate?} } \details{ The purpose of this function is to the compute cumulative rate (integrated intensity) at a set of points based on a model for the rates. \code{ctr.mat} is a matrix which, when premultiplied to the parameters of the model reurn the (log)rates at a set of increasing time points. If log-rates are returned from the model, the they should be exponentiated before cumulated, and the variances computed accordingly. Since the primary use is for log-linear Poisson models the \code{Exp} parameter defaults to TRUE. The \code{ci.Exp} argument ensures that the confidence intervals for the cumulaive rates are alwys positive, so that exp(-cum.rate) is always in [0,1]. } \value{ A matrix with 4 columns: Estimate, lower and upper c.i. and standard error. If \code{sample} is TRUE, a sampled vector is reurned, if \code{sample} is numeric a matrix with \code{sample} columns is returned, each column a cumulative rate based on a random sample from the distribution of the parameter estimates. } \author{ Bendix Carstensen, \url{http://BendixCarstensen.com} } \seealso{ See also \code{\link{ci.lin}} } \examples{ # Packages required for this example library( splines ) library( survival ) data( lung ) par( mfrow=c(1,2) ) # Plot the Kaplan-meier-estimator plot( survfit( Surv( time, status==2 ) ~ 1, data=lung ) ) # Declare data as Lexis lungL <- Lexis( exit=list("tfd"=time), exit.status=(status==2)*1, data=lung ) summary( lungL ) # Cut the follow-up every 10 days sL <- splitLexis( lungL, "tfd", breaks=seq(0,1100,10) ) str( sL ) summary( sL ) # Fit a Poisson model with a natural spline for the effect of time. # Extract the variables needed D <- status(sL, "exit") Y <- dur(sL) tB <- timeBand( sL, "tfd", "left" ) MM <- ns( tB, knots=c(50,100,200,400,700), intercept=TRUE ) mp <- glm( D ~ MM - 1 + offset(log(Y)), family=poisson, eps=10^-8, maxit=25 ) # mp is now a model for the rates along the time scale tB # Contrast matrix to extract effects, i.e. matrix to multiply with the # coefficients to produce the log-rates: unique rows of MM, in time order. T.pt <- sort( unique( tB ) ) T.wh <- match( T.pt, tB ) # ctr.mat=MM[T.wh,] selects the rates as evaluated at times T.pt: Lambda <- ci.cum( mp, ctr.mat=MM[T.wh,], intl=diff(c(0,T.pt)) ) # Put the estimated survival function on top of the KM-estimator matlines( c(0,T.pt[-1]), exp(-Lambda[,1:3]), lwd=c(3,1,1), lty=1, col="Red" ) # Extract and plot the fitted intensity function lambda <- ci.lin( mp, ctr.mat=MM[T.wh,], Exp=TRUE ) matplot( T.pt, lambda[,5:7]*10^3, type="l", lwd=c(3,1,1), col="black", lty=1, log="y", ylim=c(0.2,20) ) } \keyword{models} \keyword{regression} Epi/man/blcaIT.Rd0000644000175100001440000000127613011073056013207 0ustar hornikusers\name{blcaIT} \alias{blcaIT} \docType{data} \title{Bladder cancer mortality in Italian males} \description{ Number of deaths from bladder cancer and person-years in the Italian male population 1955--1979, in ages 25--79. } % \usage{data(blcaIT)} \format{ A data frame with 55 observations on the following 4 variables: \tabular{rl}{ \code{age}: \tab Age at death. Left endpoint of age class \cr \code{period}: \tab Period of death. Left endpoint of period \cr \code{D}: \tab Number of deaths \cr \code{Y}: \tab Number of person-years. } } % \source{ % Reference to a source... % } % \references{ % Reference to a publication... % } \examples{ data(blcaIT) } \keyword{datasets} Epi/man/N.dk.Rd0000644000175100001440000000141513011073056012636 0ustar hornikusers\name{N.dk} \alias{N.dk} \docType{data} \title{Population size in Denmark} \description{ The population size at 1st January in ages 0-99. } \usage{data(N.dk)} \format{ A data frame with 7200 observations on the following 4 variables. \describe{ \item{\code{sex}}{Sex, 1:males, 2:females} \item{\code{A}}{Age. 0:0, 1:1, ..., 98:98, 99:99+} \item{\code{P}}{Year} \item{\code{N}}{Number of persons alive at 1st January year \code{P}} } } \source{ \url{http://www.statistikbanken.dk/statbank5a/SelectTable/omrade0.asp?SubjectCode=02&PLanguage=1&ShowNews=OFF} } \examples{ data(N.dk) str(N.dk) with(N.dk,addmargins(tapply(N,list(P,sex),sum),2)) with(subset(N.dk,P==max(P)),addmargins(tapply(N,list(A,sex),sum))) } \keyword{datasets} Epi/man/lls.Rd0000644000175100001440000000335213011073056012640 0ustar hornikusers\name{lls} \alias{lls} \alias{clear} \title{Functions to manage and explore the workspace } \description{These functions help you to find out what has gone wrong and to start afresh if needed. } \usage{ lls(pos = 1, pat = "", all=FALSE, print=TRUE ) clear() } \arguments{ \item{pos}{Numeric. What position in the search path do you want listed.} \item{pat}{Character. List only objects that have this string in their name.} \item{all}{Logical. Should invisible objects be printed too - see \code{\link{ls}} to which this argument is passed.} \item{print}{Logical. Should the result be printed?} } \details{\code{lls} is designed to give a quick overview of the name, mode, class and dimension of the object in your workspace. They may not always be what you think they are. \code{clear} clears all your objects from workspace, and all attached objects too --- it only leaves the loaded packages in the search path; thus allowing a fresh start without closing and restarting R. } \value{ \code{lls} returns a data frame with four character variables: code{name}, code{mode}, code{class} and code{size} and one row per object in the workspace (if \code{pos=1}). \code{size} is either the length or the dimension of the object. The data frame is by default printed with left-justified columns. } \author{\code{lls}: Unknown. Modified by Bendix Carstensen from a long forgotten snatch. \code{clear}: Michael Hills / David Clayton.} \examples{ x <- 1:10 y <- rbinom(10, 1, 0.5) m1 <- glm( y ~ x, family=binomial ) M <- matrix( 1:20, 4, 5 ) .M <- M dfr <- data.frame(x,y) attach( dfr ) lls() search() clear() search() lls() lls(all=TRUE) } \keyword{attributes}Epi/man/time.scales.Rd0000644000175100001440000000102313011073056014246 0ustar hornikusers\name{timeScales} \alias{timeScales} \title{The time scales of a Lexis object} \description{ Function to get the names of the time scales of a \code{Lexis} object. } \usage{ timeScales(x) } \arguments{ \item{x}{an object of class \code{Lexis}.} } \value{ A character vector containing the names of the variables in \code{x} that represent the time scales. Extracted from the \code{time.scales} attribute of the object. } \author{Martyn Plummer} \seealso{\code{\link{Lexis}}, \code{\link{splitLexis}}} \keyword{attribute} Epi/man/pc.lines.Rd0000644000175100001440000000273113011073056013561 0ustar hornikusers\name{pc.lines} \alias{pc.points} \alias{pc.lines} \alias{pc.matpoints} \alias{pc.matlines} \alias{cp.points} \alias{cp.lines} \alias{cp.matpoints} \alias{cp.matlines} \title{ Plot period and cohort effects in an APC-frame. } \description{ When an APC-frame has been produced by \code{\link{apc.frame}}, this function draws curves in the period/cohort part of the frame. } \usage{ pc.points( x, y, ... ) pc.lines( x, y, ... ) pc.matpoints( x, y, ... ) pc.matlines( x, y, ... ) cp.points( x, y, ... ) cp.lines( x, y, ... ) cp.matpoints( x, y, ... ) cp.matlines( x, y, ... ) } \arguments{ \item{x}{vector of \code{x}-coordinates.} \item{y}{vector of \code{y}-coordinates.} \item{...}{Further parameters to be transmitted to points, lines, matpoints or matlines used for plotting the three sets of curves.} } \details{Since the Age-part of the frame is referred to by its real coordinates plotting in the calendar time part requires translation and scaling to put things correctly there, that is done by the functions \code{pc.points} etc. The functions \code{cp.points} etc. are just synonyms for these, in recognition of the fact that you can never remember whether it is "pc" pr "cp". } \value{ The functions return nothing. } \author{ Bendix Carstensen, Steno Diabetes Center, \url{http://BendixCarstensen.com} } \seealso{ \code{\link{apc.frame}}, \code{\link{apc.fit}}, \code{\link{plot.apc}}, \code{\link{lines.apc}} } \keyword{hplot} Epi/man/Lexis.Rd0000644000175100001440000001635713125405741013151 0ustar hornikusers\name{Lexis} \alias{Lexis} \title{Create a Lexis object} \description{ Create an object of class \code{Lexis} to represent follow-up in multiple states on multiple time scales. } \usage{ Lexis( entry, exit, duration, entry.status = 0, exit.status = 0, id, data, merge=TRUE, states, tol=.Machine$double.eps^0.5, keep.dropped=FALSE ) } \arguments{ \item{entry}{a named list of entry times. Each element of the list is a numeric variable representing the entry time on the named time scale. All time scales must have the same units (e.g. years). The names of the timescales must be different from any column name in \code{data}.} \item{exit}{a named list of exit times.} \item{duration}{a numeric vector giving the duration of follow-up.} \item{entry.status}{a vector or a factor giving the status at entry} \item{exit.status}{a vector or factor giving status at exit. Any change in status during follow-up is assumed to take place exactly at the exit time.} \item{id}{a vector giving a unique identity value for each person represented in the Lexis object. Defaults to \code{1:nrow(data)}} \item{data}{an optional data frame, list, or environment containing the variables. If not found in \code{data}, the variables are taken from the environment from which \code{Lexis} was called.} \item{merge}{a logical flag. If \code{TRUE} then the \code{data} argument will be coerced to a data frame and then merged with the resulting \code{Lexis} object.} \item{states}{A vector of labels for the states. If given, the state variables \code{lex.Cst} and \code{lex.Xst} are returned as factors with identical levels attributes equal to \code{states}.} \item{tol}{Numerical tolerance for follow-up time. Rows with duration less than this value are automatically dropped.} \item{keep.dropped}{Logical. Should dropped rows from \code{data} be saved as an attribute with the object for inspection?} } \details{ The analysis of long-term population-based follow-up studies typically requires multiple time scales to be taken into account, such as age, calender time, or time since an event. A \code{Lexis} object is a data frame with additional attributes that allows these multiple time dimensions of follow-up to be managed. Separate variables for current end exit state allows representation of multistate data. Lexis objects are named after the German demographer Wilhelm Lexis (1837-1914), who is credited with the invention of the "Lexis diagram" for representing population dynamics simultaneously by several timescales. The \code{Lexis} function can create a minimal \code{Lexis} object with only those variables required to define the follow-up history in each row. Additional variables can be merged into the \code{Lexis} object using the \code{merge} method for \code{Lexis} objects. The latter is the default. There are also \code{merge}, \code{subset} and \code{transform} methods for \code{Lexis} objects. They work as the corresponding methods for data-frames but ensures that the result is a \code{Lexis} object. } \note{ Only two of the three arguments \code{entry}, \code{exit} and \code{duration} need to be given. If the third parameter is missing, it is imputed. \code{entry}, \code{exit} must be numeric, using \code{\link{Date}} variables will cause some of the utilites to crash. Transformation by \code{\link{cal.yr}} is recommended. If only either \code{exit} or \code{duration} are supplied it is assumed that \code{entry} is 0. This is only meaningful (and therefore checked) if there is only one timescale. If any of \code{entry.status} or \code{exit.status} are of mode character, they will both be converted to factors. If \code{entry.status} is not given, then its class is automatically set to that of \code{exit.status}. If \code{exit.status} is a character or factor, the value of \code{entry.status} is set to the first level. This may be highly undesirable, and therefore noted. For example, if \code{exit.status} is character the first level will be the first in the alphabetical ordering; slightly unfortunate if values are \code{c("Well","Diseased")}. If \code{exit.status} is logical, the value of \code{entry.status} set to \code{FALSE}. If \code{exit.status} is numeric, the value of \code{entry.status} set to 0. If \code{entry.status} or \code{exit.status} are factors or character, the corresponding state variables in the returned \code{Lexis} object, \code{lex.Cst} and \code{lex.Xst} will be (unordered) factors with identical set of levels, namely the union of the levels of \code{entry.status} and \code{exit.status}. } \value{ An object of class \code{Lexis}. This is represented as a data frame with a column for each time scale (with neaes equal to the union of the names of \code{entry} and \code{exit}), and additional columns with the following names: \item{lex.id}{Identification of the persons.} \item{lex.dur}{Duration of follow-up.} \item{lex.Cst}{Entry status (\code{C}urrent \code{st}ate), i.e. the state in which the follow up takes place.} \item{lex.Xst}{Exit status (e\code{X}it \code{st}ate), i.e. that state taken up after \code{dur} in \code{lex.Cst}.} If \code{merge=TRUE} (the default) then the \code{Lexis} object will also contain all variables from the \code{data} argument. } \author{Martyn Plummer with contributions from Bendix Carstensen} \examples{ # A small bogus cohort xcoh <- structure( list( id = c("A", "B", "C"), birth = c("14/07/1952", "01/04/1954", "10/06/1987"), entry = c("04/08/1965", "08/09/1972", "23/12/1991"), exit = c("27/06/1997", "23/05/1995", "24/07/1998"), fail = c(1, 0, 1) ), .Names = c("id", "birth", "entry", "exit", "fail"), row.names = c("1", "2", "3"), class = "data.frame" ) # Convert the character dates into numerical variables (fractional years) xcoh <- cal.yr( xcoh, format="\%d/\%m/\%Y", wh=2:4 ) # See how it looks xcoh str( xcoh ) # Define as Lexis object with timescales calendar time and age Lcoh <- Lexis( entry = list( per=entry ), exit = list( per=exit, age=exit-birth ), exit.status = fail, data = xcoh ) Lcoh # Using character states may have undesired effects: xcoh$Fail <- c("Dead","Well","Dead") Lexis( entry = list( per=entry ), exit = list( per=exit, age=exit-birth ), exit.status = Fail, data = xcoh ) # ...unless you order the levels correctly ( xcoh$Fail <- factor( xcoh$Fail, levels=c("Well","Dead") ) ) Lexis( entry = list( per=entry ), exit = list( per=exit, age=exit-birth ), exit.status = Fail, data = xcoh ) } \seealso{ \code{\link{plot.Lexis}}, \code{\link{splitLexis}}, \code{\link{cutLexis}}, \code{\link{mcutLexis}}, \code{\link{merge.Lexis}}, \code{\link{addCov.Lexis}}, \code{\link{subset.Lexis}}, \code{\link{cbind.Lexis}}, \code{\link{rbind.Lexis}}, \code{\link{transform.Lexis}}, \code{\link{summary.Lexis}}, \code{\link{timeScales}}, \code{\link{timeBand}}, \code{\link{entry}}, \code{\link{exit}}, \code{\link{dur}} } \keyword{survival} Epi/man/DMlate.Rd0000644000175100001440000000373713011073056013223 0ustar hornikusers\name{DMlate} \Rdversion{1.1} \alias{DMlate} \alias{DMrand} \docType{data} \title{ The Danish National Diabetes Register. } \description{ These two datasets each contain a random sample of 10,000 persons from the Danish National Diabetes Register. \code{DMrand} is a random sample from the register, whereas \code{DMlate} is a random sample among those with date of diagnosis after 1.1.1995. All dates are radomly jittered by adding a U(-7,7) (days). } \usage{data(DMrand) data(DMlate)} \format{ A data frame with 10000 observations on the following 7 variables. \describe{ \item{\code{sex}}{Sex, a factor with levels \code{M} \code{F}} \item{\code{dobth}}{Date of birth} \item{\code{dodm}}{Date of inclusion in the register} \item{\code{dodth}}{Date of death} \item{\code{dooad}}{Date of 2nd prescription of OAD} \item{\code{doins}}{Date of 2nd insulin prescription} \item{\code{dox}}{Date of exit from follow-up.} } } \details{All dates are given in fractions of years, so 1997.00 corresponds to 1 January 1997 and 1997.997 to 31 December 1997. } \source{ Danish National Board of Health. } \references{ B Carstensen, JK Kristensen, P Ottosen and K Borch-Johnsen: The Danish National Diabetes Register: Trends in incidence, prevalence and mortality, Diabetologia, 51, pp 2187--2196, 2008. In partucular see the appendix at the end of the paper. } \examples{ data(DMlate) str(DMlate) dml <- Lexis( entry=list(Per=dodm, Age=dodm-dobth, DMdur=0 ), exit=list(Per=dox), exit.status=factor(!is.na(dodth),labels=c("DM","Dead")), data=DMlate ) # Cut the follow-up at insulin start, and introduce a new timescale, # and split non-precursor states system.time( dmi <- cutLexis( dml, cut = dml$doins, pre = "DM", new.state = "Ins", new.scale = "t.Ins", split.states = TRUE ) ) summary( dmi ) } \keyword{datasets} Epi/man/addCov.Lexis.Rd0000644000175100001440000001171013127406277014343 0ustar hornikusers\name{addCov.Lexis} \alias{addCov.Lexis} \title{ Add covariates (typically clinical measurements) taken at known times to a Lexis object. } \description{ When follow-up in a multistate model is represented in a \code{\link{Lexis}} object we may want to add information on covariates, for example clinical measurements, obtained at different times. This function cuts the follow-up time (see \code{\link{cutLexis}}) at the times of measurement and carries the measurements forward in time to the next measurement occasion. } \usage{ \method{addCov}{Lexis}( Lx, clin, timescale = 1, exnam, tfc = "tfc", addScales = FALSE ) } \arguments{ \item{Lx}{ A Lexis object with follow-up of a cohort. } \item{clin}{ A data frame with the covariates to add (typically clinical measurements). Must contain a variable \code{lex.id} identifying the persons represented in \code{Lx}, as well as a variable with the same name as one of the \code{\link{timeScales}} in \code{Lx}, identifying the time at which covariates are measured. The times must be unique within each person; if not records with duplicate times are discarded, and a warning issued. This is done using \code{duplicated}, so not very well-defined, it is advisable that you do this by yourself. } \item{timescale}{ Numerical or character. Number or name of a timescale in \code{Lx}. The \code{clin} data frame must have a variable of this name indicating the time at which the covariate measurements were taken. } \item{exnam}{ Character. Name of the variable in \code{clin} with the examination names (such as \code{wave1}, \code{wave2} etc.). Values may not be repeated within person. Will be carried over to the resulting \code{Lexis} object. If there is no variable of this name in \code{clin} it will be constructed; if argument omitted, a variable called \code{exnam} with values \code{ex.1}, \code{ex.2} etc. will be constructed. } \item{tfc}{ Character (\code{t}ime \code{f}rom \code{c}ovariate). Name of the variable in the result which will contain the time since the most recent covariate date. This is not a time scale as it is reset to 0 at each new covariate time. Also note that by this very token, this variable will be meaningless if you \code{splitLexis} \emph{after} using \code{addCov.Lexis}. } \item{addScales}{ Logical. Should timescales representing time since each covariate time be added? They will be named \code{paste("tf",exnam)}. Not implemented, argument currently ignored. } } \value{ A \code{Lexis} object representing the same follow-up as \code{Lx}, with cuts added at the times of examination, and covariate measurements added for all records representing follow-up after the most recent time of measurement. } \details{ The implementation is clumpy, the function is slow. } \author{ Bendix Carstensen, \email{b@bxc.dk}, \url{http://BendixCarstensen.com} } \seealso{ \code{\link{cutLexis}}, \code{\link{mcutLexis}}, \code{\link{splitLexis}}, \code{\link{Lexis}} } \examples{ # A small bogus cohort xcoh <- structure( list( id = c("A", "B", "C"), birth = c("1952-07-14", "1954-04-01", "1987-06-10"), entry = c("1965-08-04", "1972-09-08", "1991-12-23"), exit = c("1997-06-27", "1995-05-23", "1998-07-24"), fail = c(1, 0, 1) ), .Names = c("id", "birth", "entry", "exit", "fail"), row.names = c("1", "2", "3"), class = "data.frame" ) # Convert the character dates into numerical variables (fractional years) xcoh$bt <- cal.yr( xcoh$birth ) xcoh$en <- cal.yr( xcoh$entry ) xcoh$ex <- cal.yr( xcoh$exit ) # Define as Lexis object with timescales calendar time and age Lcoh <- Lexis( entry = list( per=en ), exit = list( per=ex, age=ex-bt ), exit.status = factor( fail, 0:1, c("Alive","Dead") ), data = xcoh ) str( Lcoh ) Lx <- Lcoh[,1:7] # Data frame with clinical examination data, date of examination in per clin <- data.frame( lex.id = c(1,1,3,2), per = c(1977.3,1971.7,1996.2,1990.6), bp = c(120,140,160,157), chol = c(5,7,8,9) ) Lx clin # Works with time split BEFORE adding clinical data: Lb <- addCov.Lexis( splitLexis( Lx, time.scale="age", breaks=seq(0,80,5) ), clin, exnam="clX" ) Lb # With time split AFTER adding clinincal data, variable tfc is largely meaningless: La <- splitLexis( addCov.Lexis( Lx, clin, exnam="clX" ), breaks=seq(0,80,5), time.scale="age" ) La } \keyword{ survival } Epi/man/mh.Rd0000644000175100001440000000677613011073056012467 0ustar hornikusers\name{mh} \alias{mh} \title{ Mantel-Haenszel analyses of cohort and case-control studies } \description{ This function carries out Mantel-Haenszel comparisons in tabulated data derived from both cohort and case-control studies. } \usage{ mh(cases, denom, compare=1, levels=c(1, 2), by=NULL, cohort=!is.integer(denom), confidence=0.9) } \arguments{ \item{cases}{ the table of case frequencies (a multiway array). } \item{denom}{ the denominator table. For cohort studies this should be a table of person-years observation, while for case-control studies it should be a table of control frequencies. } \item{compare}{ the dimension of the table which defines the comparison groups (can be referred to either by number or by name). The default is the first dimension of the table. } \item{levels}{ a vector identifying (either by number or by name) the two groups to be compared. The default is the first two levels of the selected dimension. } \item{by}{ the dimensions not to be collapsed in the Mantel-Haenszel computations. Thus, this argument defines the structure of the resulting tables of estimates and tests. } \item{cohort}{ an indicator whether the data derive from a cohort or a case-control study. If the denominator table is stored as an integer, a case-control study is assumed. } \item{confidence}{ the approximate coverage probability for the confidence intervals to be computed. }} \value{ A list giving tables of rate (odds) ratio estimates, their standard errors (on a log scale), lower and upper confidence limits, chi-squared tests (1 degree of freedom) and the corresponding p-values. The result list also includes numerator and denominator of the Mantel-Haenszel estimates (q, r), and score test statistics and score variance (u, v). } \section{Side Effects}{ None } \details{ Multiway tables of data are accepted and any two levels of any dimension can be chosen as defining the comparison groups. The rate (odds) ratio estimates and the associated significance tests may be collapsed over all the remaining dimensions of the table, or over selected dimensions only, so that tables of estimates and tests are computed. } \references{ Clayton, D. and Hills, M. : Statistical Models in Epidemiology, Oxford University Press (1993). } \seealso{ \code{\link{Lexis}} } \examples{ # If d and y are 3-way tables of cases and person-years # observation formed by tabulation by two confounders # (named "C1" and "C2") an exposure of interest ("E"), # the following command will calculate an overall # Mantel-Haenszel comparison of the first two exposure # groups. # # Generate some bogus data dnam <- list( E=c("low","medium","high"), C1=letters[1:2], C2=LETTERS[1:4] ) d <- array( sample( 2:80, 24), dimnames=dnam, dim=sapply( dnam, length ) ) y <- array( abs( rnorm( 24, 227, 50 ) ), dimnames=dnam, dim=sapply( dnam, length ) ) mh(d, y, compare="E") # # Or, if exposure levels named "low" and "high" are to be # compared and these are not the first two levels of E : # mh(d, y, compare="E", levels=c("low", "high")) # # If we wish to carry out an analysis which controls for C1, # but examines the results at each level of C2: # mh(d, y, compare="E", by="C2") # # It is also possible to look at rate ratios for every # combination of C1 and C2 : # mh(d, y, compare="E", by=c("C1", "C2")) # # If dimensions and levels of the table are unnamed, they must # be referred to by number. # } \keyword{htest} Epi/man/Y.dk.Rd0000644000175100001440000000315713011073056012656 0ustar hornikusers\name{Y.dk} \alias{Y.dk} \docType{data} \title{Population risk time in Denmark} \description{ Risk time (person-years) in the Danish population, classified by sex, age, period and date of birth in 1-year classes. This corresponds to triangles in a Lexis diagram. } \usage{data(Y.dk)} \format{ A data frame with 13860 observations on the following 6 variables. \describe{ \item{\code{sex}}{Sex. 1:males, 2:females} \item{\code{A}}{One-year age class} \item{\code{P}}{Period} \item{\code{C}}{Birth cohort} \item{\code{Y}}{Person-years} \item{\code{upper}}{Indicator of upper triangle in the Lexis diagram} } } \details{ The risk time is computed from the population size figures in \code{\link{N.dk}}, using the formulae devised in B. Carstensen: "Demography and epidemiology: Age-Period-Cohort models in the computer age", \url{http://biostat.ku.dk/reports/2006/ResearchReport06-1.pdf/}, later published as: B. Carstensen: Age-period-cohort models for the Lexis diagram. Statistics in Medicine, 10; 26(15):3018-45, 2007. } \source{ \url{http://www.statistikbanken.dk/statbank5a/SelectTable/omrade0.asp?SubjectCode=02&PLanguage=1&ShowNews=OFF} } \examples{ data(Y.dk) str(Y.dk) # Compute mean age, period for the triangles attach( Y.dk ) age <- A + (1+upper)/3 per <- P + (2-upper)/3 # Plot a Lexis diagram library( Epi ) Lexis.diagram( age=c(0,10), date=c(1990,2000), coh.grid=TRUE, int=1 ) box() # Print the person-years for males there text( per[sex==1], age[sex==1], formatC( Y[sex==1]/1000, format="f", digits=1 ) ) } \keyword{datasets} Epi/man/effx.Rd0000644000175100001440000000737413011073056013006 0ustar hornikusers\name{effx} \alias{effx} \title{Function to calculate effects} \description{ The function calculates the effects of an exposure on a response, possibly stratified by a stratifying variable, and/or controlled for one or more confounding variables. } \usage{ effx( response, type = "metric", fup = NULL, exposure, strata = NULL, control = NULL, weights = NULL, eff = NULL, alpha = 0.05, base = 1, digits = 3, data = NULL ) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{response}{The \code{response} variable - must be numeric or logical. If logical, \code{TRUE} is considered the outcome.} \item{type}{The type of response\code{type} - must be one of "metric", "binary", "failure", or "count"} \item{fup}{The \code{fup} variable contains the follow-up time for a failure response}. This must be numeric. \item{exposure}{The \code{exposure} variable can be numeric or a factor} \item{strata}{The \code{strata} stratifying variable - must be a factor} \item{control}{The \code{control} variable(s) (confounders) - these are passed as a list if there are more than one.} \item{weights}{Frequency weights for binary response only} \item{eff}{How should effects be measured. If \code{response} is binomial, the default is "OR" (odds-ratio) with "RR" (relative risk) as an option. If \code{response} is failure, the default is "RR" (rate-ratio) with "RD" (rate difference) as an option.} \item{base}{Baseline for the effects of a categorical exposure, either a number or a name of the level. Defaults to 1} \item{digits}{Number of significant digits for the effects, default 3} \item{alpha}{1 - confidence level} \item{data}{\code{data} refers to the data used to evaluate the function} } \details{The function is a wrapper for glm. Effects are calculated as differences in means for a metric response, odds ratios/relatiev risks for a binary response, and rate ratios/rate differences for a failure or count response. The k-1 effects for a categorical exposure with k levels are relative to a baseline which, by default, is the first level. The effect of a metric (quantitative) exposure is calculated per unit of exposure. The exposure variable can be numeric or a factor, but if it is an ordered factor the order will be ignored.} \value{ % ~Describe the value returned % If it is a LIST, use \item{comp1 }{Effects of exposure} \item{comp2 }{Tests of significance} % ... } \references{ www.mhills.pwp.blueyonder.co.uk } \author{Michael Hills} %\note{ ~~further notes~~ } %\seealso{ ~~objects to See Also as \code{\link{~~fun~~}}, ~~~ } \examples{ library(Epi) data(births) births$hyp <- factor(births$hyp,labels=c("normal","hyper")) births$sex <- factor(births$sex,labels=c("M","F")) # bweight is the birth weight of the baby in gms, and is a metric # response (the default) # effect of hypertension on birth weight effx(bweight,exposure=hyp,data=births) # effect of hypertension on birth weight stratified by sex effx(bweight,exposure=hyp,strata=sex,data=births) # effect of hypertension on birth weight controlled for sex effx(bweight,exposure=hyp,control=sex,data=births) # effect of gestation time on birth weight effx(bweight,exposure=gestwks,data=births) # effect of gestation time on birth weight stratified by sex effx(bweight,exposure=gestwks,strata=sex,data=births) # effect of gestation time on birth weight controlled for sex effx(bweight,exposure=gestwks,control=sex,data=births) # lowbw is a binary response coded 1 for low birth weight and 0 otherwise # effect of hypertension on low birth weight effx(lowbw,type="binary",exposure=hyp,data=births) effx(lowbw,type="binary",exposure=hyp,eff="RR",data=births) } \keyword{ models } \keyword{ regression } Epi/man/lines.apc.Rd0000644000175100001440000001001713011073056013716 0ustar hornikusers\name{apc.lines} \alias{lines.apc} \alias{apc.lines} \title{ Plot APC-estimates in an APC-frame. } \description{ When an APC-frame has been produced by \code{\link{apc.frame}}, this function draws a set of estimates from an APC-fit in the frame. An optional drift parameter can be added to the period parameters and subtracted from the cohort and age parameters. } \usage{ \method{lines}{apc}( x, P, C, scale = c("log","ln","rates","inc","RR"), frame.par = options()[["apc.frame.par"]], drift = 0, c0 = median( C[,1] ), a0 = median( A[,1] ), p0 = c0 + a0, ci = rep( FALSE, 3 ), lwd = c(3,1,1), lty = 1, col = "black", type = "l", knots = FALSE, ... ) apc.lines( x, P, C, scale = c("log","ln","rates","inc","RR"), frame.par = options()[["apc.frame.par"]], drift = 0, c0 = median( C[,1] ), a0 = median( A[,1] ), p0 = c0 + a0, ci = rep( FALSE, 3 ), lwd = c(3,1,1), lty = 1, col = "black", type = "l", knots = FALSE, ... ) } \arguments{ \item{x}{If an \code{apc}-object, (see \code{\link{apc.fit}}), then the arguments \code{P}, \code{C}, \code{c0}, \code{a0} and \code{p0} are ignored, and the estimates from \code{x} plotted. Can also be a 4-column matrix with columns age, age-specific rates, lower and upper c.i., in which case period and cohort effects are taken from the arguments \code{P} and \code{C}. } \item{P}{Period effects. Rate-ratios. Same form as for the age-effects.} \item{C}{Cohort effects. Rate-ratios. Same form as for the age-effects.} \item{scale}{Are effects given on a log-scale? Character variable, one of \code{"log"}, \code{"ln"}, \code{"rates"}, \code{"inc"}, \code{"RR"}. If \code{"log"} or \code{"ln"} it is assumed that effects are log(rates) and log(RRs) otherwise the actual effects are assumed given in \code{A}, \code{P} and \code{C}. If \code{A} is of class \code{apc}, it is assumed to be \code{"rates"}.} \item{frame.par}{2-element vector with the cohort-period offset and RR multiplicator. This will typically be the result from the call of \code{\link{apc.frame}}. See this for details.} \item{drift}{The drift parameter to be added to the period effect. If \code{scale="log"} this is assumed to be on the log-scale, otherwise it is assumed to be a multiplicative factor per unit of the first columns of \code{A}, \code{P} and \code{C} } \item{c0}{The cohort where the drift is assumed to be 0; the subtracted drift effect is \code{drift*(C[,1]-c0)}.} \item{a0}{The age where the drift is assumed to be 0.} \item{p0}{The period where the drift is assumed to be 0.} \item{ci}{Should confidence interval be drawn. Logical or character. If character, any occurrence of \code{"a"} or \code{"A"} produces confidence intervals for the age-effect. Similarly for period and cohort.} \item{lwd}{Line widths for estimates, lower and upper confidence limits.} \item{lty}{Linetypes for the three effects.} \item{col}{Colours for the three effects.} \item{type}{What type of lines / points should be used.} \item{knots}{Should knots from the model be shown?} \item{...}{Further parameters to be transmitted to \code{points} \code{lines}, \code{matpoints} or \code{matlines} used for plotting the three sets of curves.} } \details{ The drawing of three effects in an APC-frame is a rather trivial task, and the main purpose of the utility is to provide a function that easily adds the functionality of adding a drift so that several sets of lines can be easily produced in the same frame. } \value{ \code{APC.lines} returns (invisibly) a list of three matrices of the effects plotted. } \author{ Bendix Carstensen, Steno Diabetes Center, \url{http://BendixCarstensen.com} } \seealso{ \code{\link{apc.frame}}, \code{\link{pc.lines}}, \code{\link{apc.fit}}, \code{\link{apc.plot}} } \keyword{hplot} Epi/man/mcutLexis.Rd0000644000175100001440000000676513070543211014036 0ustar hornikusers\name{mcutLexis} \alias{mcutLexis} \title{ Cut follow-up at multiple event dates and keep track of order of events } \description{ A generalization of \code{\link{cutLexis}} to the case where different events may occur in any order. } \usage{ mcutLexis( L0, timescale = 1, wh, new.states = NULL, precursor.states = NULL, seq.states = TRUE, new.scales = NULL, ties.resolve = FALSE ) } \arguments{ \item{L0}{A Lexis object.} \item{timescale}{Which time scale do the variables in \code{L0[,wh]} refer to. Can be character or integer.} \item{wh}{Which variables contain the event dates. Character or integer vector} \item{new.states}{Names of the events forming new states. If \code{NULL} equal to the variable names from \code{wh}.} \item{precursor.states}{Which states are precursor states. See \code{\link{cutLexis}} for definition of precursor states.} \item{seq.states}{Should the sequence of events be kept track of? That is, should A-B be considered different from B-A. If \code{FALSE}, the state with combined preceding events A and B will be called A+B.} \item{new.scales}{Should we construct new time scales indicating the time since each of the event occurrences.} \item{ties.resolve}{Should tied event times be resolved by adding random noise to tied event dates. If \code{FALSE} the function will not accept that two events occur at the same time for a person (ties). If \code{TRUE} a random quantity in the range \code{c(-1,1)/100} will be added to all event times in all records with at least one tie. If numeric a random quantity in the range \code{c(-1,1)*ties.resolve} will be added to all event times in all records with at least one tie.} } \value{A \code{\link{Lexis}} object with extra states created by occurrence of a number of intermediate events. } \author{ Bendix Carstensen, \url{http://BendixCarstensen.com} } \seealso{ \code{\link{cutLexis}}, \code{\link{Lexis}}, \code{\link{splitLexis}} } \examples{ # A dataframe of times set.seed(563248) dd <- data.frame( id = 1:10, doN = round(runif(10,-30, 0),1), doE = round(runif(10, 0,20),1), doX = round(runif(10, 50,60),1), doD = round(runif(10, 50,60),1), # these are the event times doA = c(NA,20,NA,27,35,NA,52, 5,43,80), doB = c(25,NA,37,40,NA,NA,15,23,36,61) ) # set up a Lexis object with time from entry to death/exit Lx <- Lexis( entry = list(time=doE, age=doE-doN), exit = list(time=pmin(doX,doD)), exit.status = factor(doD}".} \author{ Bendix Carstensen, \email{b@bxc.dk}, \url{http://BendixCarstensen.com} } \examples{ data(DMlate) str(DMlate) dml <- Lexis( entry=list(Per=dodm, Age=dodm-dobth, DMdur=0 ), exit=list(Per=dox), exit.status=factor(!is.na(dodth),labels=c("DM","Dead")), data=DMlate ) dmi <- cutLexis( dml, cut=dml$doins, new.state="Ins", pre="DM" ) summary( dmi ) ls.dmi <- stack( dmi ) str( ls.dmi ) # Check that all the transitions and person-years got across. with( ls.dmi, rbind( table(lex.Fail,lex.Tr), tapply(lex.dur,lex.Tr,sum) ) ) } \seealso{ \code{\link{splitLexis}} \code{\link{cutLexis}} \code{\link{Lexis}} } \keyword{survival} Epi/man/fit.mult.Rd0000644000175100001440000000356713011073056013620 0ustar hornikusers\name{fit.mult} \alias{fit.mult} \title{ Fits a multiplicative relative risk model to interval censored data. } \description{ Utility function. The model fitted assumes a piecewise constant baseline rate in intervals specified by the argument \code{breaks}, and a multiplicative relative risk function. } \usage{ fit.mult( y, rates.frame, cov.frame, start ) } \arguments{ \item{y}{Binary vector of outcomes} \item{rates.frame}{Dataframe expanded from the original data by \code{\link{expand.data}}, cooresponding to covariates for the rate parameters.} \item{cov.frame}{ do., but covariates corresponding to the \code{formula} argument of \code{\link{Icens}}} \item{start}{Starting values for the rate parameters. If not supplied, then starting values are generated.} } \details{ The model is fitted by alternating between two generalized linear models where one estimates the underlying rates in the intervals, and the other estimates the log-relative risks. } \value{ A list with three components: \item{rates}{A glm object from a binomial model with log-link, estimating the baseline rates.} \item{cov}{A glm object from a binomial model with complementary log-log link, estimating the log-rate-ratios} \item{niter}{Nuber of iterations, a scalar} } \references{ B Carstensen: Regression models for interval censored survival data: application to HIV infection in Danish homosexual men. Statistics in Medicine, 15(20):2177-2189, 1996. CP Farrington: Interval censored survival data: a generalized linear modelling approach. Statistics in Medicine, 15(3):283-292, 1996. } \author{ Martyn Plummer, \email{plummer@iarc.fr}, Bendix Carstensen, \email{b@bxc.dk} } \seealso{ \code{\link{Icens}} \code{\link{fit.add}} } \examples{ data( HIV.dk ) } \keyword{ models } \keyword{ regression } \keyword{ survival } Epi/man/hivDK.Rd0000644000175100001440000000260413011073056013052 0ustar hornikusers\name{ hivDK } \alias{ hivDK } \docType{ data } \title{ hivDK: seroconversion in a cohort of Danish men} \description{ Data from a survey of HIV-positivity of a cohort of Danish men followed by regular tests from 1983 to 1989. } \usage{ data(hivDK) } \format{ A data frame with 297 observations on the following 7 variables. \describe{ \item{\code{id}}{ID of the person} \item{\code{entry}}{Date of entry to the study. Date variable.} \item{\code{well}}{Date last seen seronegative. Date variable.} \item{\code{ill}}{Date first seen seroconverted. Date variable.} \item{\code{bth}}{Year of birth minus 1950.} \item{\code{pyr}}{Annual number of sexual partners.} \item{\code{us}}{Indicator of wheter the person has visited the USA.} } } \source{ Mads Melbye, Statens Seruminstitut. } \references{ Becker N.G. and Melbye M.: Use of a log-linear model to compute the empirical survival curve from interval-censored data, with application to data on tests for HIV-positivity, Australian Journal of Statistics, 33, 125--133, 1990. Melbye M., Biggar R.J., Ebbesen P., Sarngadharan M.G., Weiss S.H., Gallo R.C. and Blattner W.A.: Seroepidemiology of HTLV-III antibody in Danish homosexual men: prevalence, transmission and disease outcome. British Medical Journal, 289, 573--575, 1984. } \examples{ data(hivDK) str(hivDK) } \keyword{ datasets } Epi/man/boxes.MS.Rd0000644000175100001440000003654713011073056013520 0ustar hornikusers\name{boxes.MS} \Rdversion{1.1} \alias{tbox} \alias{dbox} \alias{fillarr} \alias{boxarr} \alias{boxes} \alias{boxes.Lexis} \alias{boxes.matrix} \alias{boxes.MS} \title{ Draw boxes and arrows for illustration of multistate models. } \description{ Boxes can be drawn with text (\code{tbox}) or a cross (\code{dbox}), and arrows pointing between the boxes (\code{boxarr}) can be drawn automatically not overlapping the boxes. The \code{boxes} method for \code{\link{Lexis}} objects generates displays of states with person-years and transitions with events or rates. } \usage{ tbox( txt, x, y, wd, ht, font=2, lwd=2, col.txt=par("fg"), col.border=par("fg"), col.bg="transparent" ) dbox( x, y, wd, ht=wd, font=2, lwd=2, cwd=5, col.cross=par("fg"), col.border=par("fg"), col.bg="transparent" ) boxarr( b1, b2, offset=FALSE, pos=0.45, ... ) \method{boxes}{Lexis}( obj, boxpos = FALSE, wmult = 1.15, hmult = 1.15, cex = 1.45, show = inherits( obj, "Lexis" ), show.Y = show, scale.Y = 1, digits.Y = 1, show.BE = FALSE, BE.sep = c("",""," ",""), show.D = show, scale.D = FALSE, digits.D = as.numeric(as.logical(scale.D)), show.R = is.numeric(scale.R), scale.R = 1, digits.R = as.numeric(as.logical(scale.R)), DR.sep = if( show.D ) c("\n(",")") else c("",""), eq.wd = TRUE, eq.ht = TRUE, wd, ht, subset = NULL, exclude = NULL, font = 2, lwd = 2, col.txt = par("fg"), col.border = col.txt, col.bg = "transparent", col.arr = par("fg"), lwd.arr = 2, font.arr = 2, pos.arr = 0.45, txt.arr = NULL, col.txt.arr = col.arr, offset.arr = 2, ... ) \method{boxes}{matrix}( obj, ... ) \method{boxes}{MS}( obj, sub.st, sub.tr, cex=1.5, ... ) fillarr( x1, y1, x2, y2, gap=2, fr=0.8, angle=17, lwd=2, length=par("pin")[1]/30, ... ) } \arguments{ \item{txt}{Text to be placed inside the box.} \item{x}{x-coordinate of center of box.} \item{y}{y-coordinate of center of box.} \item{wd}{width of boxes in percentage of the plot width.} \item{ht}{height of boxes in percentage of the plot height.} \item{font}{Font for the text. Defaults to 2 (=bold).} \item{lwd}{Line width of the boxborders.} \item{col.txt}{Color for the text in boxes.} \item{col.border}{Color of the box border.} \item{col.bg}{Background color for the interior of the box.} \item{\dots}{Arguments to be passed on to the call of other functions.} \item{cwd}{Width of the lines in the cross.} \item{col.cross}{Color of the cross.} \item{b1}{Coordinates of the "from" box. A vector with 4 components, \code{x}, \code{y}, \code{w}, \code{h}.} \item{b2}{Coordinates of the "to" box; like \code{b1}.} \item{offset}{Logical. Should the arrow be offset a bit to the left.} \item{pos}{Numerical between 0 and 1, determines the position of the point on the arrow which is returned.} \item{obj}{A \code{\link{Lexis}} object or a transition matrix; that is a square matrix indexed by state in both dimensions, and the \eqn{(i,j)}th entry different from \code{NA} if a transition \eqn{i} to \eqn{j} can occur. If \code{show.D=TRUE}, the arrows between states are annotated by these numbers. If \code{show.Y=TRUE}, the boxes representing states are annotated by the numbers in the diagonal of \code{obj}. For \code{boxes.matrix} \code{obj} is a matrix and for \code{boxes.MS}, \code{obj} is an \code{MS.boxes} object (see below).} \item{boxpos}{If \code{TRUE} the boxes are positioned equidistantly on a circle, if \code{FALSE} (the default) you are queried to click on the screen for the positions. This argument can also be a named list with elements \code{x} and \code{y}, both numerical vectors, giving the centers of the boxes.} \item{wmult}{Multiplier for the width of the box relative to the width of the text in the box.} \item{hmult}{Multiplier for the height of the box relative to the height of the text in the box.} \item{cex}{Character expansion for text in the box.} \item{show}{Should person-years and transitions be put in the plot. Ignored if \code{obj} is not a \code{Lexis} object.} \item{show.Y}{If logical: Should person-years be put in the boxes. If numeric: Numbers to put in boxes.} \item{scale.Y}{What scale should be used for annotation of person-years.} \item{digits.Y}{How many digits after the decimal point should be used for the person-years.} \item{show.BE}{Logical. Should number of persons beginning resp. ending follow up in each state be shown? If given as charcater "nz" or "noz" the numbers will be shown, but zeros omitted.} \item{BE.sep}{Character vector of length 4, used for annotation of the number of persons beginning and ending in each state: 1st elemet precedes no. beginning, 2nd trails it, 3rd precedes the no. ending (defaults to 8 spaces), and the 4th trails the no. ending.} \item{show.D}{Should no. transitions be put alongside the arrows. Ignored if \code{obj} is not a \code{Lexis} object.} \item{scale.D}{Synonumous with \code{scale.R}, retained for compatability.} \item{digits.D}{Synonumous with \code{digits.R}, retained for compatability.} \item{show.R}{Should the transition rates be shown on the arrows?} \item{scale.R}{If this a scalar, rates instead of no. transitions are printed at the arrows, scaled by \code{scale.R}.} \item{digits.R}{How many digits after the decimal point should be used for the rates.} \item{DR.sep}{Character vector of length 2. If rates are shown, the first element is inserted before and the second after the rate.} \item{eq.wd}{Should boxes all have the same width?} \item{eq.ht}{Should boxes all have the same height?} \item{subset}{Draw only boxes and arrows for a subset of the states. Can be given either as a numerical vector or character vector state names.} \item{exclude}{Exclude states from the plot. The complementary of \code{subset}. Ignored if \code{subset} is given.} \item{col.arr}{Color of the arrows between boxes. A vector of character strings, the arrows are referred to as the row-wise sequence of non-NA elements of the transition matrix. Thus the first ones refer to the transitions out of state 1, in order of states.} \item{lwd.arr}{Line withs of the arrows.} \item{font.arr}{Font of the text annotation the arrows.} \item{pos.arr}{Numerical between 0 and 1, determines the position on the arrows where the text is written.} \item{txt.arr}{Text put on the arrows.} \item{col.txt.arr}{Colors for text on the arrows.} \item{offset.arr}{The amount offset between arrows representing two-way transitions, that is where there are arrows both ways between two boxes.} \item{sub.st}{Subset of the states to be drawn.} \item{sub.tr}{Subset of the transitions to be drawn.} \item{x1}{x-coordinate of the starting point.} \item{y1}{y-coordinate of the starting point.} \item{x2}{x-coordinate of the end point.} \item{y2}{y-coordinate of the end point.} \item{gap}{Length of the gap between the box and the ends of the arrows.} \item{fr}{Length of the arrow as the fraction of the distance between the boxes. Ignored unless given explicitly, in which case any value given for \code{gap} is ignored.} \item{angle}{What angle should the arrow-head have?} \item{length}{Length of the arrow head in inches. Defaults to 1/30 of the physical width of the plot.} } \details{ These functions are designed to facilitate the drawing of multistate models, mainly by automatic calculation of the arrows between boxes. \code{tbox} draws a box with centered text, and returns a vector of location, height and width of the box. This is used when drawing arrows between boxes. \code{dbox} draws a box with a cross, symbolizing a death state. \code{boxarr} draws an arrow between two boxes, making sure it does not intersect the boxes. Only straight lines are drawn. \code{boxes.Lexis} takes as input a Lexis object sets up an empty plot area (with axes 0 to 100 in both directions) and if \code{boxpos=FALSE} (the default) prompts you to click on the locations for the state boxes, and then draws arrows implied by the actual transitions in the \code{Lexis} object. The default is to annotate the transitions with the number of transitions. A transition matrix can also be supplied, in which case the row/column names are used as state names, diagnonal elements taken as person-years, and off-diagnonal elements as number of transitions. This also works for \code{boxes.matrix}. Optionally returns the R-code reproducing the plot in a file, which can be useful if you want to produce exactly the same plot with differing arrow colors etc. \code{boxarr} draws an arrow between two boxes, on the line connecting the two box centers. The \code{offset} argument is used to offset the arrow a bit to the left (as seen in the direction of the arrow) on order to accommodate arrows both ways between boxes. \code{boxarr} returns a named list with elements \code{x}, \code{y} and \code{d}, where the two former give the location of a point on the arrow used for printing (see argument \code{pos}) and the latter is a unit vector in the direction of the arrow, which is used by \code{boxes.Lexis} to position the annotation of arrows with the number of transitions. \code{boxes.MS} re-draws what \code{boxes.Lexis} has done based on the object of class \code{MS} produced by \code{boxes.Lexis}. The point being that the \code{MS} object is easily modifiable, and thus it is a machinery to make variations of the plot with different color annotations etc. \code{fill.arr} is just a utility drawing nicer arrows than the default \code{\link{arrows}} command, basically by using filled arrow-heads; called by \code{boxarr}. } \value{The functions \code{tbox} and \code{dbox} return the location and dimension of the boxes, \code{c(x,y,w,h)}, which are designed to be used as input to the \code{boxarr} function. The \code{boxarr} function returns the coordinates (as a named list with names \code{x} and \code{y}) of a point on the arrow, designated to be used for annotation of the arrow. The function \code{boxes.Lexis} returns an \code{MS} object, a list with five elements: 1) \code{Boxes} - a dataframe with one row per box and columns \code{xx}, \code{yy}, \code{wd}, \code{ht}, \code{font}, \code{lwd}, \code{col.txt}, \code{col.border} and \code{col.bg}, 2) an object \code{State.names} with names of states (possibly an expression, hence not possible to include as a column in \code{Boxes}), 3) a matrix \code{Tmat}, the transition matrix, 4) a data frame, \code{Arrows} with one row per transition and columns: \code{lwd.arr}, \code{col.arr}, \code{pos.arr}, \code{col.txt.arr}, \code{font.arr} and \code{offset.arr} and 5) an object \code{Arrowtext} with names of states (possibly an expression, hence not possible to include as a column in \code{Arrows}) An \code{MS} object is used as input to \code{boxes.MS}, the primary use is to modify selected entries in the \code{MS} object first, e.g. colors, or supply subsetting arguments in order to produce displays that have the same structure, but with different colors etc. } \author{Bendix Carstensen} \examples{ par( mar=c(0,0,0,0), cex=1.5 ) plot( NA, bty="n", xlim=0:1*100, ylim=0:1*100, xaxt="n", yaxt="n", xlab="", ylab="" ) bw <- tbox( "Well" , 10, 60, 22, 10, col.txt="blue" ) bo <- tbox( "other Ca", 45, 80, 22, 10, col.txt="gray" ) bc <- tbox( "Ca" , 45, 60, 22, 10, col.txt="red" ) bd <- tbox( "DM" , 45, 40, 22, 10, col.txt="blue" ) bcd <- tbox( "Ca + DM" , 80, 60, 22, 10, col.txt="gray" ) bdc <- tbox( "DM + Ca" , 80, 40, 22, 10, col.txt="red" ) boxarr( bw, bo , col=gray(0.7), lwd=3 ) # Note the argument adj= can takes values outside (0,1) text( boxarr( bw, bc , col="blue", lwd=3 ), expression( lambda[Well] ), col="blue", adj=c(1,-0.2), cex=0.8 ) boxarr( bw, bd , col=gray(0.7) , lwd=3 ) boxarr( bc, bcd, col=gray(0.7) , lwd=3 ) text( boxarr( bd, bdc, col="blue", lwd=3 ), expression( lambda[DM] ), col="blue", adj=c(1.1,-0.2), cex=0.8 ) # Set up a transition matrix allowing recovery tm <- rbind( c(NA,1,1), c(1,NA,1), c(NA,NA,NA) ) rownames(tm) <- colnames(tm) <- c("Cancer","Recurrence","Dead") tm boxes.matrix( tm, boxpos=TRUE ) # Illustrate texting of arrows boxes.Lexis( tm, boxpos=TRUE, txt.arr=c("en","to","tre","fire") ) zz <- boxes( tm, boxpos=TRUE, txt.arr=c(expression(lambda[C]), expression(mu[C]), "recovery", expression(mu[R]) ) ) # Change color of a box zz$Boxes[3,c("col.bg","col.border")] <- "green" boxes( zz ) # Set up a Lexis object data(DMlate) str(DMlate) dml <- Lexis( entry=list(Per=dodm, Age=dodm-dobth, DMdur=0 ), exit=list(Per=dox), exit.status=factor(!is.na(dodth),labels=c("DM","Dead")), data=DMlate[1:1000,] ) # Cut follow-up at Insulin dmi <- cutLexis( dml, cut=dml$doins, new.state="Ins", pre="DM" ) summary( dmi ) boxes( dmi, boxpos=TRUE ) boxes( dmi, boxpos=TRUE, show.BE=TRUE ) boxes( dmi, boxpos=TRUE, show.BE="nz" ) boxes( dmi, boxpos=TRUE, show.BE="nz", BE.sep=c("In:"," Out:","") ) # Set up a bogus recovery date just to illustrate two-way transitions dmi$dorec <- dmi$doins + runif(nrow(dmi),0.5,10) dmi$dorec[dmi$dorec>dmi$dox] <- NA dmR <- cutLexis( dmi, cut=dmi$dorec, new.state="DM", pre="Ins" ) summary( dmR ) boxes( dmR, boxpos=TRUE ) boxes( dmR, boxpos=TRUE, show.D=FALSE ) boxes( dmR, boxpos=TRUE, show.D=FALSE, show.Y=FALSE ) boxes( dmR, boxpos=TRUE, scale.R=1000 ) MSobj <- boxes( dmR, boxpos=TRUE, scale.R=1000, show.D=FALSE ) MSobj <- boxes( dmR, boxpos=TRUE, scale.R=1000, DR.sep=c(" (",")") ) class( MSobj ) boxes( MSobj ) MSobj$Boxes[1,c("col.txt","col.border")] <- "red" MSobj$Arrows[1:2,"col.arr"] <- "red" boxes( MSobj ) } \seealso{ \code{\link{tmat.Lexis}} } \keyword{survival} \keyword{hplot} \keyword{iplot} Epi/man/plotEst.Rd0000644000175100001440000001057113011073056013501 0ustar hornikusers\name{plotEst} \alias{plotEst} \alias{pointsEst} \alias{linesEst} \title{ Plot estimates with confidence limits (forest plot) } \description{ Plots parameter estimates with confidence intervals, annotated with parameter names. A dot is plotted at the estimate and a horizontal line extending from the lower to the upper limit is superimposed. } \usage{ plotEst( ests, y = dim(ests)[1]:1, txt = rownames(ests), txtpos = y, ylim = range(y)-c(0.5,0), xlab = "", xtic = nice(ests[!is.na(ests)], log = xlog), xlim = range( xtic ), xlog = FALSE, pch = 16, cex = 1, lwd = 2, col = "black", col.txt = "black", font.txt = 1, col.lines = col, col.points = col, vref = NULL, grid = FALSE, col.grid = gray(0.9), restore.par = TRUE, ... ) linesEst( ests, y = dim(ests)[1]:1, pch = 16, cex = 1, lwd = 2, col="black", col.lines=col, col.points=col, ... ) pointsEst( ests, y = dim(ests)[1]:1, pch = 16, cex = 1, lwd = 2, col="black", col.lines=col, col.points=col, ... ) } \arguments{ \item{ests}{Matrix with three columns: Estimate, lower limit, upper limit. If a model object is supplied, \code{\link{ci.lin}} is invoked for this object first.} \item{y}{Vertical position of the lines.} \item{txt}{Annotation of the estimates. Either a character vector or an expression vector.} \item{txtpos}{Vertical position of the text. Defaults to \code{y}.} \item{ylim}{Extent of the vertical axis.} \item{xlab}{Annotation of the horizontal axis.} \item{xtic}{Location of tickmarks on the x-axis.} \item{xlim}{Extent of the x-axis.} \item{xlog}{Should the x-axis be logarithmic?} \item{pch}{What symbol should be used?} \item{cex}{Expansion of the symbol.} \item{col}{Colour of the points and lines.} \item{col.txt}{Colour of the text annotating the estimates.} \item{font.txt}{Font for the text annotating the estimates.} \item{col.lines}{Colour of the lines.} \item{col.points}{Colour of the symbol.} \item{lwd}{Thickness of the lines.} \item{vref}{Where should vertical reference line(s) be drawn?} \item{grid}{If TRUE, vertical gridlines are drawn at the tickmarks. If a numerical vector is given vertical lines are drawn at \code{grid}.} \item{col.grid}{Colour of the vertical gridlines} \item{restore.par}{Should the graphics parameters be restored? If set to \code{FALSE} the coordinate system will still be available for additional plotting, and \code{par("mai")} will still have the very large value set in order to make room for the labelling of the estimates.} \item{...}{Arguments passed on to \code{ci.lin} when a model object is supplied as \code{ests}.} } \details{ \code{plotEst} makes a news plot, whereas \code{linesEst} and \code{pointsEst} (identical functions) adds to an existing plot. If a model object of class \code{"glm"}, \code{"coxph"}, \code{"clogistic"} or \code{"gnlm"} is supplied the argument \code{xlog} defaults to \code{TRUE}, and exponentiated estimates are extracted by default. } \value{ NULL } \author{ Bendix Carstensen, \email{b@bxc.dk}, \url{http://BendixCarstensen.com}} \seealso{ ci.lin } \examples{ # Bogus data and a linear model f <- factor( sample( letters[1:5], 100, replace=TRUE ) ) x <- rnorm( 100 ) y <- 5 + 2 * as.integer( f ) + 0.8 * x + rnorm(100) * 2 m1 <- lm( y ~ f ) # Produce some confidence intervals for contrast to first level ( cf <- ci.lin( m1, subset=-1 )[,-(2:4)] ) # Plots with increasing amounts of bells and whistles par( mfcol=c(3,2), mar=c(3,3,2,1) ) plotEst( cf ) plotEst( cf, grid=TRUE, cex=2, lwd=3 ) plotEst( cf, grid=TRUE, cex=2, col.points="red", col.lines="green" ) plotEst( cf, grid=TRUE, cex=2, col.points="red", col.lines="green", xlog=TRUE, xtic=c(1:8), xlim=c(0.8,6) ) rownames( cf )[1] <- "Contrast to fa:\n fb" plotEst( cf, grid=TRUE, cex=2, col.points=rainbow(4), col.lines=rainbow(4), vref=1 ) # etxt <- expression("Plain text, qouted", "combined with maths:"*sqrt(a)*phi[c], f^d*" Hb"*A[1][c], eff^e*" kg/"*m^2) plotEst( cf, txt=etxt, grid=TRUE, cex=2, col.points=rainbow(4), col.lines =rainbow(4), vref=1 ) } \keyword{hplot} \keyword{models} Epi/man/rm.tr.Rd0000644000175100001440000000353613011073056013114 0ustar hornikusers\name{rm.tr} \alias{rm.tr} \title{ Remove transitions from a Lexis object. } \description{ Sometimes certain transitions are not of interest. This function removes these and assigns the risk time in the target state of the transitions to the originating state. } \usage{ rm.tr(obj, from, to) } \arguments{ \item{obj}{ A \code{Lexis} object. } \item{from}{ Character; name of the state from which the transition to be purged originates. Must be a valid state name for \code{obj}. } \item{to}{ Character; name of the state to which the transition to be purged targets. Must be a valid state name for \code{obj}. } } \details{ The function removes all transitions from \code{from} to \code{to}, and assigns all risk time in the \code{to} state after the transition (\code{lex.dur}) to the \code{from} state. This is only done for risk time in \code{to} occurring directly after \code{from}. Risk time in \code{to} occurring after a transition from states different from \code{from} is not affected. Transitions from \code{to} to another state, \code{other}, say, will be changed to transitions from \code{from} to \code{other}. } \value{ A \code{\link{Lexis}} object with the indicated transition removed. } \author{ Bendix Carstensen, \url{BendixCarstensen.com}. } \seealso{ \code{\link{Relevel}} } \examples{ data(DMlate) dml <- Lexis( entry = list(Per=dodm, Age=dodm-dobth, DMdur=0 ), exit = list(Per=dox), exit.status = factor(!is.na(dodth),labels=c("DM","Dead")), data = DMlate ) # A small subset for illustration dml <- subset( dml, lex.id \%in\% c(13,15,20,28,40) ) # Cut the follow-up at start of insulin therapy dmi <- cutLexis( dml, cut = dml$doins, pre = "DM", new.state = "Ins" )[,1:10] # How does it look? dmi # Remove all transitions DM -> Ins rm.tr( dmi, "DM", "Ins" ) } \keyword{manip} Epi/man/foreign.Lexis.Rd0000644000175100001440000000607613011073056014570 0ustar hornikusers\name{foreign.Lexis} \Rdversion{1.1} \alias{msdata} \alias{msdata.Lexis} \alias{etm} \alias{etm.Lexis} \title{Create a data structures suitable for use with packages mstate, etm. } \description{ The \code{mstate} package requires input in the form of a stacked dataset with specific variable names. This is provided by \code{msdata.Lexis}. The resulting dataframe contains the same information as the result of a call to \code{\link{stack.Lexis}}. The \code{etm} package requires input (almost) in the form of a \code{Lexis} object, but with specific column names etc. This is provided by \code{etm.Lexis}. } \usage{ msdata(obj, ...) \method{msdata}{Lexis}(obj, time.scale = timeScales(obj)[1], ... ) \method{etm}{Lexis}( obj, time.scale = timeScales(obj)[1], cens.name = "cens", s = 0, t = "last", covariance = TRUE, delta.na = TRUE, ... ) } \arguments{ \item{obj}{A \code{\link{Lexis}} object.} \item{time.scale}{Name or number of timescale in the \code{Lexis} object.} \item{cens.name}{Name of the code for censoring used by \code{etm}. It is only necessary to change this if one of the states in the \code{Lexis} object has name "\code{cens}".} \item{s}{Passed on to \code{etm}.} \item{t}{Passed on to \code{etm}.} \item{covariance}{Passed on to \code{etm}.} \item{delta.na}{Passed on to \code{etm}.} \item{\dots}{Further arguments.} } \value{ \code{msdata.Lexis} returns a dataframe with the \code{Lexis} specific variables stripped, and with the following added: \code{id}, \code{Tstart}, \code{Tstop}, \code{from}, \code{to}, \code{trans}, \code{status}, which are used in the \code{mstate} package. \code{etm.Lexis} transforms the \code{Lexis} object into a dataframe suitable for analysis by the function \code{etm} from the \code{etm} package, and actually calls this function, so returns an object of class \code{etm}. } \author{ Bendix Carstensen, \email{b@bxc.dk}, \url{http://BendixCarstensen.com} } \examples{ data(DMlate) str(DMlate) dml <- Lexis( entry = list(Per=dodm,Age=dodm-dobth,DMdur=0), exit = list(Per=dox), exit.status = factor(!is.na(dodth),labels=c("DM","Dead")), data = DMlate[1:1000,] ) dmi <- cutLexis( dml, cut=dml$doins, new.state="Ins", pre="DM" ) summary( dmi ) # Use the interface to the mstate package if( require(mstate) ) { ms.dmi <- msdata.Lexis( dmi ) # Check that all the transitions and person-years got across. with( ms.dmi, rbind( table(status,trans), tapply(Tstop-Tstart,trans,sum) ) ) } # Use the etm package directly with a Lexis object if( require(etm) ) { dmi <- subset(dmi,lex.id<1000) etm.D <- etm.Lexis( dmi, time.scale=3 ) plot( etm.D, col=rainbow(5), lwd=2, lty=1, xlab="DM duration" ) } } \seealso{ \code{\link{stack.Lexis}}, \code{\link[mstate:msprep]{msprep}}, \code{\link[etm:etm]{etm}} } \keyword{survival} Epi/man/splitLexis.Rd0000644000175100001440000000673313125405664014226 0ustar hornikusers\name{splitLexis} \alias{splitLexis} \title{Split follow-up time in a Lexis object} \description{ The \code{splitLexis} function divides each row of a \code{Lexis} object into disjoint follow-up intervals according to the supplied break points. } \usage{ splitLexis(lex, breaks, time.scale, tol=.Machine$double.eps^0.5) } \arguments{ \item{lex}{an object of class \code{Lexis}} \item{breaks}{a vector of break points} \item{time.scale}{the name or number of the time scale to be split} \item{tol}{numeric value >= 0. Intervals shorter than this value are dropped} } \value{ An object of class \code{Lexis} with multiple rows for each row of the argument \code{lex}. Each row of the new \code{Lexis} object contains the part of the follow-up interval that falls inside one of the time bands defined by the break points. The variables representing the various time scales, are appropriately updated in the new \code{Lexis} object. The entry and exit status variables are also updated according to the rule that the entry status is retained until the end of follow-up. All other variables are considered to represent variables that are constant in time, and so are replicated across all rows having the same id value. } \note{ The \code{splitLexis()} function divides follow-up time into intervals using breakpoints that are common to all rows of the \code{Lexis} object. To split a \code{Lexis} object by break points that are unique to each row, use the \code{cut.Lexis} function. } \author{Martyn Plummer} \examples{ # A small bogus cohort xcoh <- structure( list( id = c("A", "B", "C"), birth = c("14/07/1952", "01/04/1954", "10/06/1987"), entry = c("04/08/1965", "08/09/1972", "23/12/1991"), exit = c("27/06/1997", "23/05/1995", "24/07/1998"), fail = c(1, 0, 1) ), .Names = c("id", "birth", "entry", "exit", "fail"), row.names = c("1", "2", "3"), class = "data.frame" ) # Convert the character dates into numerical variables (fractional years) xcoh$bt <- cal.yr( xcoh$birth, format="\%d/\%m/\%Y" ) xcoh$en <- cal.yr( xcoh$entry, format="\%d/\%m/\%Y" ) xcoh$ex <- cal.yr( xcoh$exit , format="\%d/\%m/\%Y" ) # See how it looks xcoh # Define as Lexis object with timescales calendar time and age Lcoh <- Lexis( entry = list( per=en ), exit = list( per=ex, age=ex-bt ), exit.status = fail, data = xcoh ) # Default plot of follow-up plot( Lcoh ) # With a grid and deaths as endpoints plot( Lcoh, grid=0:10*10, col="black" ) points( Lcoh, pch=c(NA,16)[Lcoh$lex.Xst+1] ) # With a lot of bells and whistles: plot( Lcoh, grid=0:20*5, col="black", xaxs="i", yaxs="i", xlim=c(1960,2010), ylim=c(0,50), lwd=3, las=1 ) points( Lcoh, pch=c(NA,16)[Lcoh$lex.Xst+1], col="red", cex=1.5 ) # Split time along two time-axes ( x2 <- splitLexis( Lcoh, breaks = seq(1900,2000,5), time.scale="per") ) ( x2 <- splitLexis( x2, breaks = seq(0,80,5), time.scale="age" ) ) str( x2 ) # Tabulate the cases and the person-years summary( x2 ) tapply( status(x2,"exit")==1, list( timeBand(x2,"age","left"), timeBand(x2,"per","left") ), sum ) tapply( dur(x2), list( timeBand(x2,"age","left"), timeBand(x2,"per","left") ), sum ) } \seealso{ \code{\link{timeBand}}, \code{\link{cutLexis}}, \code{\link{mcutLexis}}, \code{\link{summary.Lexis}}} \keyword{manip} Epi/man/cal.yr.Rd0000644000175100001440000000554513011073056013244 0ustar hornikusers\name{cal.yr} \alias{cal.yr} \alias{as.Date.cal.yr} \title{ Functions to convert character, factor and various date objects into a number, and vice versa. } \description{ Dates are converted to a numerical value, giving the calendar year as a fractional number. 1 January 1970 is converted to 1970.0, and other dates are converted by assuming that years are all 365.25 days long, so inaccuracies may arise, for example, 1 Jan 2000 is converted to 1999.999. Differences between converted values will be 1/365.25 of the difference between corresponding \code{\link{Date}} objects. } \usage{ cal.yr( x, format="\%Y-\%m-\%d", wh=NULL ) \method{as.Date}{cal.yr}( x, ... ) } \arguments{ \item{x}{A factor or character vector, representing a date in format \code{format}, or an object of class \code{\link{Date}}, \code{\link{POSIXlt}}, \code{\link{POSIXct}}, \code{\link{date}}, \code{dates} or \code{chron} (the latter two requires the \code{chron} package). If \code{x} is a data frame, all variables in the data-frame which are of one the classes mentioned are converted to class \code{cal.yr}. See arguemt \code{wh}, though.} \item{format}{Format of the date values if \code{x} is factor or character. If this argument is supplied and \code{x} is a datafame, all character variables are converted to class \code{cal.yr}. Factors in the dataframe will be ignored.} \item{wh}{Indices of the variables to convert if \code{x} is a data frame. Can be either a numerical or character vector.} \item{...}{Arguments passed on from other methods.} } \value{ \code{cal.yr} returns a numerical vector of the same length as \code{x}, of class \code{c("cal.yr","numeric")}. If \code{x} is a data frame a dataframe with some of the columns converted to class \code{"cal.yr"} is returned. \code{as.Date.cal.yr} returns a \code{\link{Date}} object. } \author{ Bendix Carstensen, Steno Diabetes Center \& Dept. of Biostatistics, University of Copenhagen, \email{b@bxc.dk}, \url{http://BendixCarstensen.com} } \seealso{ \code{\link{DateTimeClasses}}, \code{\link{Date}} } \examples{ # Character vector of dates: birth <- c("14/07/1852","01/04/1954","10/06/1987","16/05/1990", "12/11/1980","01/01/1997","01/01/1998","01/01/1999") # Proper conversion to class "Date": birth.dat <- as.Date( birth, format="\%d/\%m/\%Y" ) # Converson of character to class "cal.yr" bt.yr <- cal.yr( birth, format="\%d/\%m/\%Y" ) # Back to class "Date": bt.dat <- as.Date( bt.yr ) # Numerical calculation of days since 1.1.1970: days <- Days <- (bt.yr-1970)*365.25 # Blunt assignment of class: class( Days ) <- "Date" # Then data.frame() to get readable output of results: data.frame( birth, birth.dat, bt.yr, bt.dat, days, Days, round(Days) ) } \keyword{manip} \keyword{chron} Epi/man/nickel.Rd0000644000175100001440000000233113011073056013307 0ustar hornikusers\name{nickel} \alias{nickel} \docType{data} \title{A Cohort of Nickel Smelters in South Wales} \description{ The \code{nickel} data frame has 679 rows and 7 columns. The data concern a cohort of nickel smelting workers in South Wales and are taken from Breslow and Day, Volume 2. For comparison purposes, England and Wales mortality rates (per 1,000,000 per annum) from lung cancer (ICDs 162 and 163), nasal cancer (ICD 160), and all causes, by age group and calendar period, are supplied in the dataset \code{\link{ewrates}}. } \format{ This data frame contains the following columns: \tabular{rl}{ \code{id}: \tab Subject identifier (numeric) \cr \code{icd}: \tab ICD cause of death if dead, 0 otherwise (numeric) \cr \code{exposure}: \tab Exposure index for workplace (numeric) \cr \code{dob}: \tab Date of birth (numeric) \cr \code{age1st}: \tab Age at first exposure (numeric) \cr \code{agein}: \tab Age at start of follow-up (numeric) \cr \code{ageout}: \tab Age at end of follow-up (numeric) \cr } } \source{ Breslow NE, and Day N, Statistical Methods in Cancer Research. Volume II: The Design and Analysis of Cohort Studies. IARC Scientific Publications, IARC:Lyon, 1987. } \examples{ data(nickel) str(nickel) } \keyword{datasets} Epi/man/time.band.Rd0000644000175100001440000000450113011073056013704 0ustar hornikusers\name{timeBand} \alias{timeBand} \alias{breaks} \title{Extract time band data from a split Lexis object} \description{ The break points of a \code{Lexis} object (created by a call to \code{splitLexis}) divide the follow-up intervals into time bands along a given time scale. The \code{breaks} function returns the break points, for a given time scale, and the \code{timeBand} classifies each row (=follow-up interval) into one of the time bands. } \usage{ timeBand(lex, time.scale, type="integer") breaks(lex, time.scale) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{lex}{an object of class \code{Lexis}} \item{time.scale}{a character or integer vector of length 1 identifying the time scale of interest} \item{type}{a string that determines how the time bands are labelled. See Details below} } \details{ Time bands may be labelled in various ways according to the \code{type} argument. The permitted values of the \code{type} argument, and the corresponding return values are: \describe{ \item{"integer"}{a numeric vector with integer codes starting from 0.} \item{"factor"}{a factor (unordered) with labels "(left,right]"} \item{"left"}{the left-hand limit of the time band} \item{"middle"}{the midpoint of the time band} \item{"right"}{the right-hand limit of the time band} } } \value{ The \code{breaks} function returns a vector of break points for the \code{Lexis} object, or NULL if no break points have been defined by a call to \code{splitLexis}. The \code{timeBand} function returns a numeric vector or factor, depending on the value of the \code{type} argument. } \author{Martyn Plummer} \note{ A newly created \code{Lexis} object has no break points defined. In this case, \code{breaks} will return NULL, and \code{timeBand} will a vector of zeros. } \examples{ data(diet) diet <- cal.yr(diet) diet.lex <- Lexis(entry=list(period=doe), exit=list(period=dox, age=dox-dob), exit.status=chd, data=diet) diet.split <- splitLexis(diet.lex, breaks=seq(40,70,5), "age" ) age.left <- timeBand(diet.split, "age", "left") table(age.left) age.fact <- timeBand(diet.split, "age", "factor") table(age.fact) age.mid <- timeBand(diet.split, "age", "mid") table(age.mid) } \seealso{\code{\link{Lexis}}} \keyword{attribute} Epi/man/Termplot.Rd0000644000175100001440000000643613011073056013662 0ustar hornikusers\name{Termplot} \alias{Termplot} \title{ A wrapper for \code{termplot} that optionally (but by default) exponentiates terms, and plot them on a common log-scale. Also scales x-axes to the same physical scale. } \description{ The function uses \code{\link{termplot}} to extract terms from a model with, say, spline, terms, including the standard errors, computes confidence intervals and transform these to the rate / rate-ratio scale. Thus the default use is for models on the log-scale such as Poisson-regression models. The function produces a plot with panels side-by-side, one panel per term, and returns the } \usage{ Termplot( obj, plot = TRUE, xlab = NULL, ylab = NULL, xeq = TRUE, yshr = 1, alpha = 0.05, terms = NULL, max.pt = NULL ) } \arguments{ \item{obj}{An object with a \code{terms}-method --- for details the the documentation for \code{\link{termplot}}. } \item{plot}{Should a plot be produced?} \item{xlab}{Labels for the \code{x}-axes. Defaults to the names of the terms.} \item{ylab}{Labels for the \code{x}-axes. Defaults to blank.} \item{xeq}{Should the units all all plots have the same physical scale for the \code{x}-axes).} \item{yshr}{Shrinking of \code{y}-axis. By default, the \code{y}-axes have an extent that accommodates the entire range of confidence intervals. This is a shrinking parameter for the \code{y}-axes, setting it to less than 1 will lose a bit of the confidence limits on some of the panels.} \item{alpha}{1 minus the confidence level for computing confidence intervals} \item{terms}{Which terms should be reported. Passed on to \code{\link{termplot}} and eventually \code{\link{predict}}.} \item{max.pt}{The maximal number of points in which to report the terms. If \code{NULL} all unique points from the analysis dataset are reported for each term (this is a feature of \code{\link{termplot}}).} } \value{ A list with one component per term in the model object \code{obj}, each component is a 4-column matrix with $x$ as the first column, and 3 columns with estimae and lower and upper confidence limit. } \author{ Bendix Cartensen } \seealso{ \code{\link{Ns}}, \code{termplot} } \examples{ # Get the diabetes data and set up as Lexis object data(DMlate) DMlate <- DMlate[sample(1:nrow(DMlate),500),] dml <- Lexis( entry = list(Per=dodm, Age=dodm-dobth, DMdur=0 ), exit = list(Per=dox), exit.status = factor(!is.na(dodth),labels=c("DM","Dead")), data = DMlate ) # Split in 1-year age intervals dms <- splitLexis( dml, time.scale="Age", breaks=0:100 ) # Model with 6 knots for both age and period n.kn <- 6 # Model age-specific rates with period referenced to 2004 ( a.kn <- with( subset(dms,lex.Xst=="Dead"), quantile( Age+lex.dur, probs=(1:n.kn-0.5)/n.kn ) ) ) ( p.kn <- with( subset(dms,lex.Xst=="Dead"), quantile( Per+lex.dur, probs=(1:n.kn-0.5)/n.kn ) ) ) m2 <- glm( lex.Xst=="Dead" ~ -1 + Ns( Age, kn=a.kn, intercept=TRUE ) + Ns( Per, kn=p.kn, ref=2004 ), offset = log( lex.dur ), family=poisson, data=dms ) # Finally we can plot the two effects: Termplot( m2, yshr=0.9 ) } \keyword{hplot} Epi/man/diet.Rd0000644000175100001440000000474513011073056013002 0ustar hornikusers\name{diet} \alias{diet} \docType{data} \title{Diet and heart data} \description{ The \code{diet} data frame has 337 rows and 14 columns. The data concern a subsample of subjects drawn from larger cohort studies of the incidence of coronary heart disease (CHD). These subjects had all completed a 7-day weighed dietary survey while taking part in validation studies of dietary questionnaire methods. Upon the closure of the MRC Social Medicine Unit, from where these studies were directed, it was found that 46 CHD events had occurred in this group, thus allowing a serendipitous study of the relationship between diet and the incidence of CHD. } \format{ This data frame contains the following columns: \tabular{rl}{ \code{id}: \tab subject identifier, a numeric vector. \cr \code{doe}: \tab date of entry into follow-up study, a \code{\link{Date}} variable. \cr \code{dox}: \tab date of exit from the follow-up study, a \code{\link{Date}} variable. \cr \code{dob}: \tab date of birth, a \code{\link{Date}} variable. \cr \code{y}: \tab - number of years at risk, a numeric vector. \cr \code{fail}: \tab status on exit, a numeric vector (codes 1, 3, 11, and 13 represent CHD events) \cr \code{job}: \tab occupation, a factor with levels \code{Driver} \code{Conductor} \code{Bank worker} \cr \code{month}: \tab month of dietary survey, a numeric vector \cr \code{energy}: \tab total energy intake (KCal per day/100), a numeric vector \cr \code{height}: \tab (cm), a numeric vector \cr \code{weight}: \tab (kg), a numeric vector \cr \code{fat}: \tab fat intake (g/day), a numeric vector \cr \code{fibre}: \tab dietary fibre intake (g/day), a numeric vector \cr \code{energy.grp}: \tab high daily energy intake, a factor with levels \code{<=2750 KCal} \code{>2750 KCal} \cr \code{chd}: \tab CHD event, a numeric vector (1=CHD event, 0=no event) \cr } } \source{ The data are described and used extensively by Clayton and Hills, Statistical Models in Epidemiology, Oxford University Press, Oxford:1993. They were rescued from destruction by David Clayton and reentered from paper printouts. } \examples{ data(diet) # Illustrate the follow-up in a Lexis diagram Lexis.diagram( age=c(30,75), date=c(1965,1990), entry.date=cal.yr(doe), exit.date=cal.yr(dox), birth.date=cal.yr(dob), fail=(fail>0), pch.fail=c(NA,16), col.fail=c(NA,"red"), cex.fail=1.0, data=diet ) } \keyword{datasets} Epi/man/ci.pd.Rd0000644000175100001440000000476313011073056013052 0ustar hornikusers\name{ci.pd} \alias{ci.pd} \title{ Compute confidence limits for a difference of two independent proportions. } \description{ The usual formula for the c.i. of at difference of proportions is inaccurate. Newcombe has compared 11 methods and method 10 in his paper looks like a winner. It is implemented here. } \usage{ ci.pd(aa, bb=NULL, cc=NULL, dd=NULL, method = "Nc", alpha = 0.05, conf.level=0.95, digits = 3, print = TRUE, detail.labs = FALSE ) } \arguments{ \item{aa}{Numeric vector of successes in sample 1. Can also be a matrix or array (see details).} \item{bb}{Successes in sample 2.} \item{cc}{Failures in sample 1.} \item{dd}{Failures in sample 2.} \item{method}{Method to use for calculation of confidence interval, see "Details".} \item{alpha}{Significance level} \item{conf.level}{Confidence level} \item{print}{Should an account of the two by two table be printed.} \item{digits}{How many digits should the result be rounded to if printed.} \item{detail.labs}{Should the computing of probability differences be reported in the labels.} } \details{ Implements method 10 from Newcombe(1998) (method="Nc") or from Agresti & Caffo(2000) (method="AC"). \code{aa}, \code{bb}, \code{cc} and \code{dd} can be vectors. If \code{aa} is a matrix, the elements \code{[1:2,1:2]} are used, with successes \code{aa[,1:2]}. If \code{aa} is a three-way table or array, the elements \code{aa[1:2,1:2,]} are used. } \value{ A matrix with three columns: probability difference, lower and upper limit. The number of rows equals the length of the vectors \code{aa}, \code{bb}, \code{cc} and \code{dd} or, if \code{aa} is a 3-way matrix, \code{dim(aa)[3]}. } \references{ RG Newcombe: Interval estimation for the difference between independent proportions. Comparison of eleven methods. Statistics in Medicine, 17, pp. 873-890, 1998. A Agresti & B Caffo: Simple and effective confidence intervals for proportions and differences of proportions result from adding two successes and two failures. The American Statistician, 54(4), pp. 280-288, 2000. } \author{ Bendix Carstensen, Esa Laara. \url{http://BendixCarstensen.com} } \seealso{ \code{\link{twoby2}}, \code{\link{binom.test}} } \examples{ ( a <- matrix( sample( 10:40, 4 ), 2, 2 ) ) ci.pd( a ) twoby2( t(a) ) prop.test( t(a) ) ( A <- array( sample( 10:40, 20 ), dim=c(2,2,5) ) ) ci.pd( A ) ci.pd( A, detail.labs=TRUE, digits=3 ) } \keyword{distribution} \keyword{htest} Epi/man/subset.Lexis.Rd0000644000175100001440000000220013011073056014425 0ustar hornikusers\name{subset.Lexis} \alias{subset.Lexis} \alias{[.Lexis} \alias{subset.stacked.Lexis} \title{Subsetting Lexis (and stacked.Lexis) objects} \description{ Return subsets of Lexis objects which meet conditions } \usage{ \method{subset}{Lexis}(x, ...) \method{[}{Lexis}(x, ...) \method{subset}{stacked.Lexis}(x, ...) } \arguments{ \item{x}{an object of class \code{Lexis}} \item{\dots}{additional arguments to be passed to \code{subset.data.frame}. This will normally be some logical expression selecting a subset of the rows. For details see \code{\link{subset.data.frame}}.} } \details{ The subset method for \code{Lexis} objects works exactly as the method for data frames. So does the "[" method. The special methods are needed in order to propagate the Lexis-specific attributes. The method for \code{stacked.Lexis} objects also shrinks the set of levels for \code{lex.Cst} and \code{lex.Xst} to those actually occurring in the resulting data frame. } \value{ A \code{Lexis} object with selected rows and columns. } \author{Martyn Plummer} \seealso{\code{\link{Lexis}}, \code{\link{merge.Lexis}}} \keyword{manip} Epi/man/ewrates.Rd0000644000175100001440000000172213011073056013517 0ustar hornikusers\name{ewrates} \alias{ewrates} \docType{data} \title{Rates of lung and nasal cancer mortality, and total mortality.} \description{ England and Wales mortality rates from lung cancer, nasal cancer, and all causes 1936 - 1980. The 1936 rates are repeated as 1931 rates in order to accomodate follow up for the \code{\link{nickel}} study. } \usage{data(ewrates)} \format{ A data frame with 150 observations on the following 5 variables: \tabular{rl}{ \code{id}: \tab Subject identifier (numeric) \cr \code{year} \tab Calendar period, 1931: 1931--35, 1936: 1936--40, \ldots \cr \code{age} \tab Age class: 10: 10--14, 15:15--19, \ldots \cr \code{lung} \tab Lung cancer mortality rate per 1,000,000 py. \cr \code{nasal} \tab Nasal cancer mortality rate per 1,000,000 py. \cr \code{other} \tab All cause mortality rate per 1,000,000 py. } } \source{ From Breslow and Day, Vol II, Appendix IX. } \examples{ data(ewrates) str(ewrates) } \keyword{datasets} Epi/man/plotCIF.Rd0000644000175100001440000001126413111362225013347 0ustar hornikusers\name{plotCIF} \alias{plotCIF} \alias{stackedCIF} \title{Plotting Aalen-Johansen curves for competing events } \description{Function \code{plotCIF} plots, for one or more groups, the cumulative incidence curves for a selected event out of two or more competing events. Function \code{stackedCIF} plots, for one group or population, the cumulative incidence curves for two or more competing events such that the cumulative incidences are stacked upon each other. The CIFs are are estimated by the Aalen-Johansen method. } \usage{ ## S3 method for class 'survfit' plotCIF( x, event = 1, xlab = "Time", ylab = "Cumulative incidence", ylim = c(0, 1), lty = NULL, col = NULL, ... ) ## S3 method for class 'survfit' stackedCIF( x, group = 1, colour = NULL, ylim = c(0, 1), xlab = "Time", ylab = "Cumulative incidence", ... ) } \arguments{ \item{x}{An object of class \code{\link{survfit}}, the \code{type} of \code{event} in \code{Surv()} being "\code{mstate}"; the first level of the event factor represents censoring and the remaining ones the alternative competing events. } \item{event}{Determines the event for which the cumulative incidence curve is plotted by \code{plotCIF}. } \item{group}{An integer showing the selected level of a possible grouping factor appearing in the model formula in \code{survfit} when plotting by \code{stackedCIF} } \item{col}{A vector specifying the plotting color(s) of the curve(s) for the different groups in \code{\link{plotCIF}}-- default: all "black". } \item{colour}{A vector indicating the colours to be used for shading the areas pertinent to the separate outcomes in \code{\link{stackedCIF}} -- default: all \code{"white"}. } \item{xlab}{Label for the $x$-axis. } \item{ylab}{Label for the $y$-axis. } \item{ylim}{Limits of the $y$-axis. } \item{lty}{A vector specifying the line type(s) of the curve(s) for the different groups -- default: all 1 (=solid). } \item{\dots}{Further graphical parameters to be passed. } } \details{ The order in which the curves with \code{\link{stackedCIF}} are piled upon each other is the same as the ordering of the values or levels of the competing events in the pertinent event variable. The ordering can be changed by permuting the levels as desired using function \code{Relevel}, after which \code{survfit} is called with the relevelled \code{event} variable in \code{Surv()} } \value{No value is returned but a plot is produced as a side-effect. } \references{Putter, H., Fiocco, M., Geskus, R.B. (2007). Tutorial in biostatistics: competing risks and multi-state models. Statistics in Medicine, 26: 2389--2430. } \author{Esa L{\"a}{\"a}r{\"a}, \email{esa.laara@oulu.fi} } \note{ Aalen-Johansen curves for competing events in several groups can also be plotted by function \code{\link{plot.survfit}} of the survival library as well as by some functions in other packages covering analysis of time-to-event data.} \seealso{ \code{\link{survfit}}, \code{\link{plot}}, \code{\link{plot.survfit}}. } \examples{ library(survival) # requires version 2.39-4 or later head(mgus1) # Aalen-Johansen estimates of CIF are plotted by sex for two # competing events: (1) progression (pcm), and (2) death, in # a cohort of patients with monoclonal gammopathy. # The data are actually covering transitions from pcm to death, too, # for those entering the state of pcm. Such patients have two rows # in the data frame, and in their 2nd row the 'start' time is # the time to pcm (in days). # In our analysis we shall only include those time intervals with value 0 # for variable 'start'. Thus, the relevant follow-up time is represented # by variable 'stop' (days). For convenience, days are converted to years. fitCI <- survfit(Surv(stop/365.25, event, type="mstate") ~ sex, data= subset(mgus1, start==0) ) par(mfrow=c(1,2)) plotCIF(fitCI, event = 1, col = c("red", "blue"), main = "Progression", xlab="Time (years)" ) text( 38, 0.15, "Men", pos = 2) text( 38, 0.4, "Women", pos = 2) plotCIF(fitCI, event = 2, col = c("red", "blue"), main = "Death", xlab="Time (years)" ) text( 38, 0.8, "Men", pos = 2) text( 38, 0.5, "Women", pos = 2) par(mfrow=c(1,2)) stackedCIF(fitCI, group = 1, colour = c("gray80", "gray90"), main = "Women", xlab="Time (years)" ) text( 36, 0.15, "PCM", pos = 2) text( 36, 0.6, "Death", pos = 2) stackedCIF(fitCI, group = 2, colour = c("gray80", "gray90"), main = "Men", xlab="Time (years)" ) text( 39, 0.10, "PCM", pos = 2) text( 39, 0.6, "Death", pos = 2) } Epi/man/start.Lexis.Rd0000644000175100001440000000257313011073056014272 0ustar hornikusers\name{start.Lexis} \alias{entry} \alias{exit} \alias{status} \alias{dur} \title{Time series methods for Lexis objects} \description{ Extract the entry time, exit time, status or duration of follow-up from a \code{Lexis} object. } \usage{ entry(x, time.scale = NULL, by.id=FALSE) exit(x, time.scale = NULL, by.id=FALSE) status(x, at="exit" , by.id=FALSE) dur(x, by.id=FALSE) } \arguments{ \item{x}{an object of class \code{Lexis}.} \item{time.scale}{a string or integer indicating the time scale. If omitted, all times scales are used.} \item{by.id}{Logical, if \code{TRUE}, only one record per unique value of \code{lex.id} is returned; either the first, the last or for \code{dur}, the sum of \code{lex.dur}. If \code{TRUE}, the returned object have the \code{lex.id} as (row)nmes attribute.} \item{at}{string indicating the time point(s) at which status is to be measured.} } \value{ The \code{entry} and \code{exit} functions return a vector of entry times and exit times, respectively, on the requested time scale. If multiple time scales are requested, then a matrix is returned. The \code{status} function returns a vector giving the status at entry or exit and \code{dur} returns a vector with the lengths of the follow-up intervals. } \author{Martyn Plummer} \seealso{\code{\link{Lexis}}} \keyword{survival} \keyword{ts} Epi/man/merge.Lexis.Rd0000644000175100001440000000244613011073056014233 0ustar hornikusers\name{merge.Lexis} \alias{merge.Lexis} \title{Merge a Lexis object with a data frame} \description{ Merge additional variables from a data frame into a Lexis object. } \usage{ \method{merge}{Lexis}(x, y, id, by, ...) } \arguments{ \item{x}{an object of class \code{Lexis}} \item{y}{a data frame} \item{id}{the name of the variable in \code{y} to use for matching against the variable \code{lex.id} in \code{x}. } \item{by}{if matching is not done by id, a vector of variable names common to both \code{x} and \code{y}} \item{...}{optional arguments to be passed to \code{merge.data.frame}} } \details{ A \code{Lexis} object can be considered as an augmented data frame in which some variables are time-dependent variables representing follow-up. The \code{Lexis} function produces a minimal object containing only these time-dependent variables. Additional variables may be added to a \code{Lexis} object using the \code{merge} method. } \value{ A \code{Lexis} object with additional columns taken from the merged data frame. } \author{Martyn Plummer} \note{ The variable given as the \code{by.y} argument must not contain any duplicate values in the data frame \code{y}. } \seealso{\code{\link{merge.data.frame}}, \code{\link{subset.Lexis}}} \keyword{array} \keyword{manip} Epi/man/simLexis.Rd0000644000175100001440000003224113011073056013642 0ustar hornikusers\name{simLexis} \alias{simLexis} \alias{nState} \alias{pState} \alias{plot.pState} \alias{lines.pState} \title{Simulate a Lexis object representing follow-up in a multistate model.} \description{Based on a (pre-)\code{Lexis} object representing persons at given states and times, and full specification of transition intensities between states in the form of models for the transition rates, this function simulates transition times and -types for persons and returns a \code{Lexis} object representing the simulated cohort. The simulation scheme accommodates multiple timescales, including time since entry into an intermediate state, and accepts fitted Poisson models, Cox-models or just a function as specification of rates.} \usage{ simLexis( Tr, init, N = 1, lex.id, t.range = 20, n.int = 101, time.pts = seq(0,t.range,length.out=n.int) ) nState( obj, at, from, time.scale = 1 ) pState( nSt, perm = 1:ncol(nSt) ) \method{plot}{pState}( x, col = rainbow(ncol(x)), border = "transparent", xlab = "Time", ylim = 0:1, ylab = "Probability", ... ) \method{lines}{pState}( x, col = rainbow(ncol(x)), border = "transparent", ... ) } \arguments{ \item{Tr}{A named list of named lists. The names of the list are names of the transient states in the model. Each list element is again a named list. The names of the elements of this inner list are the names of the states reachable from the state with name equal to the list. Elements of the intter lists represent transitions. See details.} \item{init}{A (pre-)\code{\link{Lexis}} object representing the initial state of the persons whose trajectories through the multiple states we want to simulate. Must have an attribute "time.since" --- see details. Duplicate values of \code{lex.id} are not sensible and not accepted.} \item{N}{Numeric. How many persons should be simulated. \code{N} persons with covariate configuration of each row in \code{init} will be simulated. Either a scalar or a vector of length \code{nrow(init)}.} \item{lex.id}{Vector of ids of the simulated persons. Useful when simulating in chunks.} \item{t.range}{Numerical scalar. The range of time over which to compute the cumulative rates when simulating. Simulted times beyond this will result in an obervation censored at \code{t.range} after entry.} \item{n.int}{Number of intervals to use when computing (cumulative) rates.} \item{time.pts}{Numerical vector of times since start. Cumulative rates for transitions are computed at these times after stater and entry state. Simulation is only done till time \code{max(time.pts)} after start, where persons are censored. Must start with 0.} \item{obj}{A \code{Lexis} object.} \item{from}{The point on the time scale \code{time.scale} from which we start counting.} \item{time.scale}{The timescale to which \code{from} refer.} \item{at}{Time points (after \code{from}) where the number of persons in each state is to be computed.} \item{nSt}{A table obtained by \code{nState}.} \item{perm}{A permutation of columns used before cumulating row-wise and taking percentages.} \item{x}{An object of class \code{pState}, e.g. created by \code{pState}.} \item{col}{Colors for filling the areas between curves.} \item{border}{Colors for outline of the areas between curves.} \item{xlab}{Label on x-axis} \item{ylim}{Limits on y-axis} \item{ylab}{Label on y-axis} \item{...}{Further arguments passed on to \code{plot}.} } \details{The simulation command \code{simLexis} is not defined as a method for \code{Lexis} objects, because the input is not a \code{Lexis} object, the \code{Lexis}-like object is merely representing a prevalent population and a specification of which variables that are timescales. The variables \code{lex.dur} and \code{lex.Xst} are ignored (and overwritten) if present. The core input is the list \code{Tr} giving the transitions. The components of \code{Tr} represents the transition intensities between states. The transition from state \code{A} to \code{B}, say, is assumed stored in \code{Tr$A$B}. Thus names of the elements of \code{Tr} are names of transient states, and the names of the elements of each these are the names of states reachable from the corresponding transient state. The transition intensities are assumed modelled by either a glm with Poisson family or a Cox-model. In both cases the timescale(s) in the model must be using the names fo the timescales in a Lexis object representng the follow-up in a cohort, and the risk time must be taken from the variable \code{lex.dur} --- see the example. Alternatively, an element in \code{Tr} could be a function that from a data frame produces transition rates, or specifically cumulative transition rates over intervals of length \code{lex.dur}. The pre-\code{Lexis} object \code{init} must contain values of all variables used in any of the objects in \code{Tr}, as well as all timescales - even those not used in the models. Moreover, the attributes \code{time.scales} and \code{time.since} must be present. The attribute \code{time.since} is a character vector of the same length as \code{time.scales} and an element has value \code{"A"} if the corresponding time scale is defined as "time since entry into state \code{A}", otherwise the value is \code{""}. If not present it will be set to a vector of \code{""}s, which is only OK if no time scales are defined as time since entry to a state. Note that the variables pre-\code{Lexis} object \code{init} must have the same mode and class as in the dataset used for fitting the models --- hence the indexing of rows by brackets in the assignment of values used in the example below - this way the variables have their attributes preserved; using \code{init[,"var"] <-} or \code{init$var <-} replaces the variable, whereas \code{init[1:4,"var"] <-} or \code{init$var[1:4] <-} replaces values only and prevents you from entering non-existing factor levels etc. The function \code{\link{Lexis}} automatically generates an attribute \code{time.since}, and \code{\link{cutLexis}} updates it when new time scales are defined. Hence, the simplest way of defining a initial pre-\code{Lexis} object representing a current state of a (set of) persons to be followed through a multistate model is to take \code{NULL} rows of an existing Lexis object (normally the one used for estimation), and so ensuring that all relevant attributes and state levels are properly defined. See the example code. The prevalence function \code{nState} computes the distribution of individuals in different states at prespecified times. Only sensible for a simulated \code{Lexis} object. The function \code{pState} takes a matrix as output by \code{nState} and computes the row-wise cumulative probabilities across states, and leaves an object of class \code{pState}, suitable for plotting. } \value{\code{simLexis} returns a \code{\link{Lexis}} object representing the experience of a population starting as \code{init} followed through the states according to the transitions in \code{Tr}. The function \code{nState} returns a table of persons classified by states at each of the times in \code{at}. Note that this function can easily produce meaningless results, for example if applied to a \code{Lexis} object not created by simulation. If you apply it to a \code{Lexis} object generated by \code{simLexis}, you must make sure that you start (\code{from}) the point where you started the simulation on the correct timescale, and you will get funny results if you try to tabulate beyond the censoring time for the simulation. The resulting object has class \code{"table"}. The result from using \code{pState} on the result from \code{nState} has class \code{c("pState","matrix")}. } \author{Bendix Carstensen, \url{BendixCarstensen.com}.} \seealso{ \code{\link{Lexis}}, \code{\link{cutLexis}}, \code{\link{splitLexis}} } \examples{ data(DMlate) dml <- Lexis( entry = list(Per=dodm, Age=dodm-dobth, DMdur=0 ), exit = list(Per=dox), exit.status = factor(!is.na(dodth),labels=c("DM","Dead")), data = DMlate[runif(nrow(DMlate))<0.1,] ) # Split follow-up at insulin, introduce a new timescale, # and split non-precursor states dmi <- cutLexis( dml, cut = dml$doins, pre = "DM", new.state = "Ins", new.scale = "t.Ins", split.states = TRUE ) # Split the follow in 1-year intervals for modelling Si <- splitLexis( dmi, 0:30/2, "DMdur" ) # Define knots nk <- 4 ( ai.kn <- with( subset(Si,lex.Xst=="Ins"), quantile( Age+lex.dur, probs=(1:nk-0.5)/nk ) ) ) ( ad.kn <- with( subset(Si,lex.Xst=="Dead"), quantile( Age+lex.dur, probs=(1:nk-0.5)/nk ) ) ) ( di.kn <- with( subset(Si,lex.Xst=="Ins"), quantile( DMdur+lex.dur, probs=(1:nk-0.5)/nk ) ) ) ( dd.kn <- with( subset(Si,lex.Xst=="Dead"), quantile( DMdur+lex.dur, probs=(1:nk-0.5)/nk ) ) ) ( td.kn <- with( subset(Si,lex.Xst=="Dead(Ins)"), quantile( t.Ins+lex.dur, probs=(1:nk-0.5)/nk ) ) ) # Fit Poisson models to transition rates library( splines ) DM.Ins <- glm( (lex.Xst=="Ins") ~ Ns( Age , knots=ai.kn ) + Ns( DMdur, knots=di.kn ) + I(Per-2000) + sex, family=poisson, offset=log(lex.dur), data = subset(Si,lex.Cst=="DM") ) DM.Dead <- glm( (lex.Xst=="Dead") ~ Ns( Age , knots=ad.kn ) + Ns( DMdur, knots=dd.kn ) + I(Per-2000) + sex, family=poisson, offset=log(lex.dur), data = subset(Si,lex.Cst=="DM") ) Ins.Dead <- glm( (lex.Xst=="Dead(Ins)") ~ Ns( Age , knots=ad.kn ) + Ns( DMdur, knots=dd.kn ) + Ns( t.Ins, knots=td.kn ) + I(Per-2000) + sex, family=poisson, offset=log(lex.dur), data = subset(Si,lex.Cst=="Ins") ) # Stuff the models into an object representing the transitions Tr <- list( "DM" = list( "Ins" = DM.Ins, "Dead" = DM.Dead ), "Ins" = list( "Dead(Ins)" = Ins.Dead ) ) lapply( Tr, names ) # Define an initial object - note the combination of "select=" and NULL # which ensures that the relevant attributes from the Lexis object 'Si' # are carried over to 'ini' ( Si[NULL,1:9] will lose essential # attributes ): ini <- subset(Si,select=1:9)[NULL,] ini[1:2,"lex.Cst"] <- "DM" ini[1:2,"Per"] <- 1995 ini[1:2,"Age"] <- 60 ini[1:2,"DMdur"] <- 5 ini[1:2,"sex"] <- c("M","F") str(ini) # Simulate 200 of each sex using the estimated models in Tr simL <- simLexis( Tr, ini, time.pts=seq(0,11,0.5), N=200 ) summary( simL ) # Find the number of persons in each state at a set of times. # Note that the times are shirter than the time-span simulated. nSt <- nState( subset(simL,sex=="M"), at=seq(0,10,0.1), from=1995, time.scale="Per" ) nSt # Show the cumulative prevalences in a different order than that of the # state-level ordering and plot them using all defaults pp <- pState( nSt, perm=c(1,2,4,3) ) head( pp ) plot( pp ) # A more useful set-up of the graph clr <- c("orange2","forestgreen") par( las=1 ) plot( pp, col=clr[c(2,1,1,2)] ) lines( as.numeric(rownames(pp)), pp[,2], lwd=2 ) mtext( "60 year old male, diagnosed 1995", side=3, line=2.5, adj=0 ) mtext( "Survival curve", side=3, line=1.5, adj=0 ) mtext( "DM, no insulin DM, Insulin", side=3, line=0.5, adj=0, col=clr[1] ) mtext( "DM, no insulin", side=3, line=0.5, adj=0, col=clr[2] ) axis( side=4 ) # Using a Cox-model for the mortality rates assuming the two mortality # rates to be proportional: # When we fit a Cox-model, lex.dur must be used in the Surv() function, # and the I() constrction must be used when specifying intermediate # states as covariates, since factors with levels not present in the # data will create NAs in the parameter vector returned by coxph, which # in return will crash the simulation machinery. library( survival ) Cox.Dead <- coxph( Surv( DMdur, DMdur+lex.dur, lex.Xst \%in\% c("Dead(Ins)","Dead")) ~ Ns( Age-DMdur, knots=ad.kn ) + I(lex.Cst=="Ins") + I(Per-2000) + sex, data = Si ) Cr <- list( "DM" = list( "Ins" = DM.Ins, "Dead" = Cox.Dead ), "Ins" = list( "Dead(Ins)" = Cox.Dead ) ) simL <- simLexis( Cr, ini, time.pts=seq(0,11,0.2), N=200 ) summary( simL ) nSt <- nState( subset(simL,sex=="M"), at=seq(0,10,0.2), from=1995, time.scale="Per" ) pp <- pState( nSt, perm=c(1,2,4,3) ) plot( pp ) } \keyword{survival} Epi/man/stattable.funs.Rd0000644000175100001440000000332413011073056015002 0ustar hornikusers\name{stattable.funs} \alias{count} \alias{percent} \alias{ratio} \title{Special functions for use in stat.table} \description{ These functions may be used as \code{contents} arguments to the function \code{stat.table}. They are defined internally in \code{stat.table} and have no independent existence. } \usage{ count(id) ratio(d,y,scale=1, na.rm=TRUE) percent(...) } \arguments{ \item{id}{numeric vector in which identical values identify the same individual.} \item{d, y}{numeric vectors of equal length (\code{d} for Deaths, \code{y} for person-Years)} \item{scale}{a scalar giving a value by which the ratio should be multiplied} \item{na.rm}{a logical value indicating whether \code{NA} values should be stripped before computation proceeds.} \item{...}{a list of variables taken from the \code{index} argument to \code{\link{stat.table}}} } \value{ When used as a \code{contents} argument to \code{stat.table}, these functions create the following tables: \item{\code{count}}{If given without argument (\code{count()}) it returns a contingency table of counts. If given an \code{id} argument it returns a table of the number of different values of \code{id} in each cell, i.e. how many persons contribute in each cell.} \item{\code{ratio}}{returns a table of values \code{scale * sum(d)/sum(y)}} \item{\code{percent}}{returns a table of percentages of the classifying variables. Variables that are in the \code{index} argument to \code{stat.table} but not in the call to \code{percent} are used to define strata, within which the percentages add up to 100.} } \author{Martyn Plummer} \seealso{\code{\link{stat.table}}} \keyword{iteration} \keyword{category} Epi/man/thoro.Rd0000644000175100001440000000401113011073056013172 0ustar hornikusers\name{thoro} \alias{thoro} \docType{data} \title{Thorotrast Study} \description{ The \code{thoro} data frame has 2470 rows and 14 columns. Each row represents one patient that have had cerebral angiography (X-ray of the brain) with an injected contrast medium, either Thorotrast or another one (the controls). } \format{ This data frame contains the following columns: \describe{ \item{\code{id}}{Identification of person.} \item{\code{sex}}{Sex, 1: male / 2: female.} \item{\code{birthdat}}{Date of birth, \code{Date} variable.} \item{\code{contrast}}{Group, 1: Thorotrast / 2: Control.} \item{\code{injecdat}}{Date of contrast injection, \code{Date} variable.} \item{\code{volume}}{Injected volume of Thorotrast in ml. Control patients have a 0 in this variable.} \item{\code{exitdat}}{Date of exit from the study, \code{Date} variable.} \item{\code{exitstat}}{Status at exit, 1: dead / 2: alive, censored at closing of study, 20 February 1992 / 3: censored alive at some earlier date.} \item{\code{cause}}{Cause of death. See causes in the helpfile for \code{\link{gmortDK}}.} \item{\code{liverdat}}{Date of liver cancer diagnosis, \code{Date} variable.} \item{\code{liver}}{Indicator of liver cancer diagnosis. Not all livercancers are histologically verified, hence \code{liver >= hepcc + chola + hmang}} \item{\code{hepcc}}{Hepatocellular carcinoma at \code{liverdat}.} \item{\code{chola}}{Cholangiocellular carcinoma at \code{liverdat}.} \item{\code{hmang}}{Haemangisarcoma carcinoma at \code{liverdat}.} } } \source{ M Andersson, M Vyberg, J Visfeldt, B Carstensen & HH Storm: Primary liver tumours among Danish patients exposed to Thorotrast. Radiation Research, 137, pp. 262--273, 1994. M Andersson, B Carstensen HH Storm: Mortality and cancer incidence after cerebral angiography. Radiation Research, 142, pp. 305--320, 1995. } \examples{ data(thoro) str(thoro) } \seealso{\code{\link{mortDK}}, \code{\link{gmortDK}}} \keyword{datasets} Epi/man/lungDK.Rd0000644000175100001440000000361413011073056013233 0ustar hornikusers\name{lungDK} \alias{lungDK} \docType{data} \title{Male lung cancer incidence in Denmark} \description{ Male lung cancer cases and population riks time in Denmark, for the period 1943--1992 in ages 40--89. } \usage{data(lungDK)} \format{ A data frame with 220 observations on the following 9 variables. \tabular{rl}{ \code{A5}: \tab Left end point of the age interval, a numeric vector. \cr \code{P5}: \tab Left enpoint of the period interval, a numeric vector. \cr \code{C5}: \tab Left enpoint of the birth cohort interval, a numeric vector. \cr \code{up}: \tab Indicator of upper trianges of each age by period rectangle in the Lexis diagram. (\code{up=(P5-A5-C5)/5}). \cr \code{Ax}: \tab The mean age of diagnois (at risk) in the triangle. \cr \code{Px}: \tab The mean date of diagnosis (at risk) in the triangle. \cr \code{Cx}: \tab The mean date of birth in the triangle, a numeric vector. \cr \code{D}: \tab Number of diagnosed cases of male lung cancer. \cr \code{Y}: \tab Risk time in the male population, person-years. \cr } } \details{ Cases and person-years are tabulated by age and date of diagnosis (period) as well as date of birth (cohort) in 5-year classes. Each observation in the dataframe correponds to a triangle in a Lexis diagram. Triangles are classified by age and date of diagnosis, period of diagnosis and date of birth, all in 5-year groupings. } \source{The Danish Cancer Registry and Statistics Denmark. } \references{ For a more thorough exposition of statistical inference in the Lexis diagram, see: B. Carstensen: Age-Period-Cohort models for the Lexis diagram. Statistics in Medicine, 26: 3018-3045, 2007. } \examples{ data( lungDK ) # Draw a Lexis diagram and show the number of cases in it. attach( lungDK ) Lexis.diagram( age=c(40,90), date=c(1943,1993), coh.grid=TRUE ) text( Px, Ax, paste( D ), cex=0.7 ) } \keyword{datasets} Epi/man/births.Rd0000644000175100001440000000171713011073056013344 0ustar hornikusers\name{births} \alias{births} \docType{data} \title{Births in a London Hospital} \description{ Data from 500 singleton births in a London Hospital } \usage{data(births)} \format{ A data frame with 500 observations on the following 8 variables. \tabular{rl}{ \code{id}: \tab Identity number for mother and baby. \cr \code{bweight}: \tab Birth weight of baby. \cr \code{lowbw}: \tab Indicator for birth weight less than 2500 g. \cr \code{gestwks}: \tab Gestation period. \cr \code{preterm}: \tab Indicator for gestation period less than 37 weeks. \cr \code{matage}: \tab Maternal age. \cr \code{hyp}: \tab Indicator for maternal hypertension. \cr \code{sex}: \tab Sex of baby: 1:Male, 2:Female. \cr } } \source{ Anonymous } \references{ Michael Hills and Bianca De Stavola (2002). A Short Introduction to Stata 8 for Biostatistics, Timberlake Consultants Ltd \url{http://www.timberlake.co.uk} } \examples{ data(births) } \keyword{datasets} Epi/man/transform.Lexis.Rd0000644000175100001440000000672313125275670015165 0ustar hornikusers\name{transform.Lexis} \alias{transform.Lexis} \alias{Relevel.Lexis} \alias{transform.stacked.Lexis} \alias{factorize} \alias{factorize.Lexis} \alias{levels.Lexis} \alias{order.Lexis} \alias{sort.Lexis} \title{Transform a Lexis (or stacked.Lexis) objects} \description{ Modify a Lexis object. } \usage{ %transform(`_data`, \dots) \method{transform}{Lexis}( `_data`, \dots) \method{Relevel}{Lexis}( x, states, print = TRUE, \dots ) \method{levels}{Lexis}( x ) \method{factorize}{Lexis}( x, states, print = TRUE, \dots ) %\method{order}{Lexis}( x, \dots ) %\method{sort}{Lexis}( x, \dots ) \method{transform}{stacked.Lexis}( `_data`, \dots) } \arguments{ \item{_data}{an object of class \code{Lexis}.} \item{x}{an object of class \code{Lexis}.} \item{states}{Names of the factor levels (states) for \code{lex.Cst} and \code{lex.Xst}. Can be a list, in which case some levels are collapsed, see the documentation for \code{\link{Relevel}}. No sanity check for the latter operation is undertaken.} \item{print}{Should a conversion between old and new levels be printed?} \item{\dots}{Additional arguments to be passed to \code{\link{transform.data.frame}} or \code{\link{Relevel}}.} } \details{ The transform method for \code{Lexis} objects works exactly as the method for data frames. \code{factorize} transforms the variables \code{lex.Cst} and \code{lex.Xst} to factors with identical set of levels, optionally with names given in \code{states}, and optionally collapsing states. \code{Relevel} is merely an alias for \code{factorize}, since the function does the same as \code{\link{Relevel}}, but for both the factors \code{lex.Cst} and \code{lex.Xst}. A default sideeffect is to produce a table of old states versus new states if \code{states} is a list. If \code{states} is \code{NULL}, as when for example the argument is not passed to the function, the returned object have levels of \code{lex.Cst}, \code{lex.Xst} (and for \code{stacked.Lexis} objects \code{lex.Tr}) shaved down to the actually occurring values. \code{order} returns the order of the rows in a Lexis object to sort it by (\code{lex.id},\code{timeScales[x]}). \code{sort} returns the Lexis object sorted by (\code{lex.id},\code{timeScales[x]}). } \value{ A transformed \code{Lexis} object. The function \code{levels} returns the names of the states (levels of the factors \code{lex.Cst} and \code{lex.Xst}. } \author{Martyn Plummer, Bendix Carstensen} \seealso{\code{\link{Lexis}}, \code{\link{merge.Lexis}}, \code{\link{subset.Lexis}}, \code{\link{subset.stacked.Lexis}}, \code{\link{Relevel}}} \examples{ data( nickel ) nic <- Lexis( data = nickel, id = id, entry = list(age=agein), exit = list(age=ageout,cal=ageout+dob,tfh=ageout-age1st), ## Lung cancer deaths are coded 2 and other deaths are coded 1 exit.status = ( (icd > 0) + (icd \%in\% c(162,163)) ) ) str( nic ) levels( nic ) nit <- transform( nic, cumex = exposure*(agein-age1st) ) str( nit ) ## It is still a Lexis object! summary( nic ) nix <- factorize.Lexis( nic, c("Alive","Lung","Dead")) niw <- factorize.Lexis( nix, c("Alive","Pulm","Mort")) niz <- factorize.Lexis( niw, states=list("Alive",c("Pulm","Mort")), coll=" \n& ") boxes( niw, boxpos=TRUE ) par( new=TRUE ) boxes( niz, boxpos=TRUE ) siw <- stack( niw ) str( siw ) } \keyword{manip} Epi/man/B.dk.Rd0000644000175100001440000000421113011073056012617 0ustar hornikusers\name{B.dk} \alias{B.dk} \docType{data} \title{Births in Denmark by year and month of birth and sex} \description{ The number of live births as entered from printed publications from Statistics Denmark. } \usage{data(B.dk)} \format{ A data frame with 1248 observations on the following 4 variables. \describe{ \item{\code{year}}{Year of birth} \item{\code{month}}{Month of birth} \item{\code{m}}{Number of male births} \item{\code{f}}{Number of female births} } } \details{ Division of births by month and sex is only avaialble for the years 1957--69 and 2002ff. For the remaining period, the total no. births in each month is divided between the sexes so that the fraction of boys is equal to the overall fraction for the years where the sex information is available. There is a break in the series at 1920, when Sonderjylland was joined to Denmark. } \source{ Statistiske Undersogelser nr. 19: Befolkningsudvikling og sundhedsforhold 1901-60, Copenhagen 1966. Befolkningens bevaegelser 1957. Befolkningens bevaegelser 1958. ... Befolkningens bevaegelser 2003. Befolkningens bevaegelser 2004. Vital Statistics 2005. Vital Statistics 2006. } \examples{ data( B.dk ) str( B.dk ) attach( B.dk ) # Plot the no of births and the M/F-ratio par( las=1, mar=c(4,4,2,4) ) matplot( year+(month-0.5)/12, cbind( m, f ), bty="n", col=c("blue","red"), lty=1, lwd=1, type="l", ylim=c(0,5000), xlab="Date of birth", ylab="" ) usr <- par()$usr mtext( "Monthly no. births in Denmark", side=3, adj=0, at=usr[1], line=1/1.6 ) text( usr[1:2] \%*\% cbind(c(19,1),c(19,1))/20, usr[3:4] \%*\% cbind(c(1,19),c(2,18))/20, c("Boys","Girls"), col=c("blue","red"), adj=0 ) lines( year+(month-0.5)/12, (m/(m+f)-0.5)*30000, lwd=1 ) axis( side=4, at=(seq(0.505,0.525,0.005)-0.5)*30000, labels=c("","","","",""), tcl=-0.3 ) axis( side=4, at=(50:53/100-0.5)*30000, labels=50:53, tcl=-0.5 ) axis( side=4, at=(0.54-0.5)*30000, labels="\% boys", tick=FALSE, mgp=c(3,0.1,0) ) abline( v=1920, col=gray(0.8) ) } \keyword{datasets} Epi/man/crr.Lexis.rd0000644000175100001440000000737012531361107013766 0ustar hornikusers\name{crr.Lexis} \alias{crr.Lexis} \title{Fit a competing risks regression model (Fine-Gray model) using a Lexis object) } \description{ Fits a competing risks regression model using a \code{\link{Lexis}} object assuming that every person enters at time 0 and exits at time \code{lex.dur}. Thus is only meaningful for Lexis objects with one record per person, (so far). } \usage{ crr.Lexis( obj, mod, quiet=FALSE, ...) } \arguments{ \item{obj}{A Lexis object; variables in \code{mod} are taken from this.} \item{mod}{Formula, with the l.h.s. a character constant equal to a level of \code{obj$lex.Xst}, and the r.h.s. a model formula interpreted in \code{obj}.} \item{quiet}{Logical indicating whether a brief summary should be printed.} \item{\dots}{Further arguments passed on to \code{\link[cmprsk:crr]{crr}}.} } \details{ This function is a simple wrapper for \code{crr}, allowing a formula-specification of the model (which allows specifications of covariates on the fly), and utilizing the structure of Lexis objects to simplify specification of the outcome. Prints a summary of the levels used as event, competing events and censoring. By the structure of the \code{\link{Lexis}} object it is not necessary to indicate what the censoring code or competing events are, that is automatically derived from the \code{Lexis} object. Currently only one state is allowed as l.h.s. (response) in \code{mod}. } \value{ A \code{\link[cmprsk:crr]{crr}} object (which is a list), with two extra elements in the list, \code{model.Lexis} - the model formula supplied, and \code{transitions} - a table of transitions and censorings showing which transition was analysed and which were taken as competing events. } \author{ Bendix Carstensen, \url{BendixCarstensen.com} } \seealso{ \code{\link[cmprsk:crr]{crr}}, \code{\link{Lexis}} } \examples{ # Thorotrats patients, different histological types of liver cancer # Load thorotrast data, and restrict to exposed data(thoro) tht <- thoro[thoro$contrast==1,] # Define exitdate as the date of livercancer tht$dox <- pmin( tht$liverdat, tht$exitdat, na.rm=TRUE ) tht <- subset( tht, dox > injecdat ) # Convert to calendar years in dates tht <- cal.yr( tht ) # Set up a Lexis object with three subtypes of liver cancer and death tht.L <- Lexis( entry = list( per = injecdat, tfi = 0 ), exit = list( per = dox ), exit.status = factor( 1*hepcc+2*chola+3*hmang+ 4*(hepcc+chola+hmang==0 & exitstat==1), labels=c("No cancer","hepcc","chola","hmang","Dead") ), data = tht ) summary( tht.L ) # Show the transitions boxes( tht.L, boxpos=list(x=c(20,rep(80,3),30), y=c(60,90,60,30,10) ), show.BE=TRUE, scale.R=1000 ) # Fit a model for the Hepatocellular Carcinoma as outcome # - note that you can create a variable on the fly: library( cmprsk ) hepcc <- crr.Lexis( tht.L, "hepcc" ~ volume + I(injecdat-1940) ) hepcc$model.Lexis hepcc$transitions # Models for the three other outcomes: chola <- crr.Lexis( tht.L, "chola" ~ volume + I(injecdat-1940) ) hmang <- crr.Lexis( tht.L, "hmang" ~ volume + I(injecdat-1940) ) dead <- crr.Lexis( tht.L, "Dead" ~ volume + I(injecdat-1940) ) # Compare the effects # NOTE: This is not necessarily a joint model for all transitions. zz <- rbind( ci.exp(hepcc), ci.exp(chola), ci.exp(hmang), ci.exp(dead) ) zz <- cbind( zz[c(1,3,5,7) ,], zz[c(1,3,5,7)+1,] ) rownames( zz ) <- c("hepcc","chola","hmang","dead") colnames( zz )[c(1,4)] <- rownames( ci.exp(chola) ) round( zz, 3 ) } \keyword{survival} Epi/man/nice.Rd0000644000175100001440000000141413011073056012761 0ustar hornikusers\name{nice} \alias{nice} \title{Nice breakpoints} \description{The function calls \code{\link{pretty}} for linear scale. For a log-scale nice are computed using a set of specified number in a decade. } \usage{ nice(x, log = F, lpos = c(1, 2, 5), ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{x}{Numerical vector to} \item{log}{Logical. Is the scale logartimic?} \item{lpos}{Numeric. Numbers between 1 and 10 giving the desired breakpoints in this interval.} \item{\dots}{Arguments passed on to \code{pretty} if \code{log}=FALSE} } \value{A vector of breakpoints.} \author{Bendix Carstensen, \email{b@bxc.dk}, \url{http://BendixCarstensen.com}} \seealso{pretty} \examples{ nice( exp( rnorm( 100 ) ), log=TRUE ) } \keyword{manip} Epi/man/occup.Rd0000644000175100001440000000333313011073056013156 0ustar hornikusers\name{occup} \alias{occup} \docType{data} \title{ A small occupational cohort } \description{This is the data that is behind the illustrative Lexis diagram in Breslow & Day's book on case-control studies.} \usage{data(occup)} \format{ A data frame with 13 observations on the following 4 variables. \describe{ \item{\code{AoE}}{a numeric vector, Age at Entry} \item{\code{DoE}}{a numeric vector, Date of entry} \item{\code{DoX}}{a numeric vector, Date of eXit} \item{\code{Xst}}{eXit status \code{D}-event, \code{W}-withdrawal, \code{X}-censoring} } } \references{ Breslow & Day: Statistical Methods in Cancer Research, vol 1: The analysis of case-control studies, figure 2.2, p. 48.} \examples{ data(occup) lx <- Lexis( entry = list( per=DoE, age=AoE ), exit = list( per=DoX ), entry.status = "W", exit.status = Xst, data = occup ) plot( lx ) # Split follow-up in 5-year classes sx <- splitLexis( lx, seq(1940,1960,5), "per" ) sx <- splitLexis( sx, seq( 40, 60,5), "age" ) plot( sx ) # Plot with a bit more paraphernalia and a device to get # the years on the same physical scale on both axes ypi <- 2.5 # Years per inch dev.new( height=15/ypi+1, width=20/ypi+1 ) # add an inch in each direction for par( mai=c(3,3,1,1)/4, mgp=c(3,1,0)/1.6 ) # the margins set in inches by mai= plot(sx,las=1,col="black",lty.grid=1,lwd=2,type="l", xlim=c(1940,1960),ylim=c(40,55),xaxs="i",yaxs="i",yaxt="n", xlab="Calendar year", ylab="Age (years)") axis( side=2, at=seq(40,55,5), las=1 ) points(sx,pch=c(NA,16)[(sx$lex.Xst=="D")+1] ) box() # Annotation with the person-years PY.ann.Lexis( sx, cex=0.8 ) } \keyword{datasets} Epi/man/projection.ip.rd0000644000175100001440000000171612562641052014702 0ustar hornikusers\name{projection.ip} \alias{projection.ip} \title{ Projection of columns of a matrix. } \description{ Projects the columns of the matrix \code{M} on the space spanned by the columns of the matrix \code{X}, with respect to the inner product defined by \code{weight}: \code{=sum(x*w*y)}. } \usage{ projection.ip(X, M, orth = FALSE, weight = rep(1, nrow(X))) } \arguments{ \item{X}{ Matrix defining the space to project onto. } \item{M}{ Matrix of columns to be projected. Must have the same number of rows as \code{X}. } \item{orth}{ Should the projection be on the orthogonal complement to \code{span(X)}? } \item{weight}{ Weights defining the inner product. Numerical vector of length \code{nrow(X)}. } } \value{ A matrix of full rank with columns in \code{span(X)} } \author{ Bendix Carstensen, Steno Diabetes Center, \url{http://BendixCarstensen.com}, with help from Peter Dalgaard. } \seealso{ \code{\link{detrend}} } \keyword{array} Epi/man/S.typh.Rd0000644000175100001440000000421613011073056013233 0ustar hornikusers\name{S.typh} \alias{S.typh} \docType{data} \title{Salmonella Typhimurium outbreak 1996 in Denmark.} \description{ Matched case-control study of food poisoning. } \format{ A data frame with 136 observations on the following 15 variables: \tabular{rl}{ \code{id}: \tab Person identification \cr \code{set}: \tab Matched set indicator \cr \code{case}: \tab Case-control status (1:case, 0:control \cr \code{age}: \tab Age of individual \cr \code{sex}: \tab Sex of individual (1:male, 2:female) \cr \code{abroad}: \tab Within the last two weeks visited abroad (1:yes, 0:no) \cr \code{beef}: \tab Within the last two weeks eaten beef \cr \code{pork}: \tab Within the last two weeks eaten pork \cr \code{veal}: \tab Within the last two weeks eaten veal \cr \code{poultry}: \tab Within the last two weeks eaten poultry \cr \code{liverp}: \tab Within the last two weeks eaten liverpaste \cr \code{veg}: \tab Within the last two weeks eaten vegetables \cr \code{fruit}: \tab Within the last two weeks eaten fruit \cr \code{egg}: \tab Within the last two weeks eaten eggs \cr \code{plant7}: \tab Within the last two weeks eaten meat from plant no. 7 \cr } } \details{ In the fall of 1996 an unusually large number of Salmonella Typhimurium cases were recorded in Fyn county in Denmark. The Danish Zoonosis Centre set up a matched case-control study to find the sources. Cases and two age-, sex- and residency-matched controls were telephone interviewed about their food intake during the last two weeks. The participants were asked at which retailer(s) they had purchased meat. Retailers were independently of this linked to meat processing plants, and thus participants were linked to meat processing plants. This way persons could be linked to (amongst other) plant no 7.} \source{ Tine Hald. } \references{ Molbak K and Hald T: Salmonella Typhimurium outbreak in late summer 1996. A Case-control study. (In Danish: Salmonella typhimurium udbrud paa Fyn sensommeren 1996. En case-kontrol undersogelse.) Ugeskrift for Laeger., 159(36):5372-7, 1997. } \examples{ data(S.typh) } \keyword{datasets} Epi/man/erl.Rd0000644000175100001440000001733113074120375012640 0ustar hornikusers\name{erl} \alias{surv1} \alias{surv2} \alias{erl1} \alias{erl} \alias{yll} \title{Compute survival functions from rates and expected residual lifetime in an illness-death model as well as years of life lost to disease. } \description{ These functions compute survival functions from a set of mortality and disease incidence rates in an illness-death model. Expected residual life time can be computed under various scenarios by the \code{erl} function, and areas between survival functions can be computed under various scenarios by the \code{yll} function. Rates are assumed supplied for equidistant intervals of length \code{int}. } \usage{ surv1( int, mu , age.in = 0, A = NULL ) erl1( int, mu , age.in = 0 ) surv2( int, muW, muD, lam, age.in = 0, A = NULL ) erl( int, muW, muD, lam=NULL, age.in = 0, A = NULL, immune = is.null(lam), yll=TRUE, note=TRUE ) yll( int, muW, muD, lam=NULL, age.in = 0, A = NULL, immune = is.null(lam), note=TRUE ) } \arguments{ \item{int}{ Scalar. Length of intervals that rates refer to. } \item{mu}{ Numeric vector of mortality rates at midpoints of intervals of length \code{int} } \item{muW}{ Numeric vector of mortality rates among persons in the "Well" state at midpoints of intervals of length \code{int}. Left endpoint of first interval is \code{age.in}. } \item{muD}{ Numeric vector of mortality rates among persons in the "Diseased" state at midpoints of intervals of length \code{int}. Left endpoint of first interval is \code{age.in}. } \item{lam}{ Numeric vector of disease incidence rates among persons in the "Well" state at midpoints of intervals of length \code{int}. Left endpoint of first interval is \code{age.in}. } \item{age.in}{ Scalar indicating the age at the left endpoint of the first interval. } \item{A}{ Numeric vector of conditioning ages for calculation of survival functions. } \item{immune}{ Logical. Should the years of life lost to the disease be computed using assumptions that non-diseased individuals are immune to the disease (\code{lam}=0) and that their mortality is yet still \code{muW}. } \item{note}{ Logical. Should a warning of silly assumptions be printed? } \item{yll}{ Logical. Should years of life lost be included in the result? } } \details{ The mortality rates given are supposed to refer to the ages \code{age.in+(i-1/2)*int}, \code{i=1,2,3,...}. The units in which \code{int} is given must correspond to the units in which the rates \code{mu}, \code{muW}, \code{muD} and \code{lam} are given. Thus if \code{int} is given in years, the rates must be given in the unit of events per year. The ages in which the survival curves are computed are from \code{age.in} and then at the end of \code{length(muW)} (\code{length(mu)}) intervals each of length \code{int}. The \code{age.in} argument is merely a device to account for rates only available from a given age. It has two effects, one is that labeling of the interval endpoint is offset by this quantity, thus starting at \code{age.in}, and the other that the conditioning ages given in the argument \code{A} will refer to the ages defined by this. The \code{immune} argument is \code{FALSE} whenever the disease incidence rates are supplied. If set to \code{TRUE}, the years of life lost is computed under the assumption that individuals without the disease at a given age are immune to the disease in the sense that the disease incidence rate is 0, so transitions to the diseased state (with presumably higher mortality rates) are assumed not to occur. This is a slightly peculiar assumption (but presumably the most used in the epidemiological literature) and the resulting object is therefore given an attribute, \code{NOTE}, that point this out. The default of the \code{surv2} function is to take the possibility of disease into account in order to potentially rectify this.} \value{\code{surv1} and \code{surv2} return a matrix whose first column is the ages at the ends of the intervals, thus with \code{length(mu)+1} rows. The following columns are the survival functions (since \code{age.in}), and conditional on survival till ages as indicated in \code{A}, thus a matrix with \code{length(A)+2} columns. Columns are labeled with the actual conditioning ages; if \code{A} contains values that are not among the endpoints of the intervals used, the nearest smaller interval border is used as conditioning age, and columns are named accordingly. \code{surv1} returns the survival function for a simple model with one type of death, occurring at intensity \code{mu}. \code{surv2} returns the survival function for a person in the "Well" state of an illness-death model, taking into account that the person may move to the "Diseased" state, thus requiring all three transition rates to be specified. The conditional survival functions are conditional on being in the "Well" state at ages given in \code{A}. \code{erl1} returns a three column matrix with columns \code{age}, \code{surv} (survival function) and \code{erl} (expected residual life time) with \code{length(mu)+1} rows. \code{erl} returns a two column matrix, columns labeled "Well" and "Dis", and with row-labels \code{A}. The entries are the expected residual life times given survival to \code{A}. If \code{yll=TRUE} the difference between the columns is added as a third column, labeled "YLL". } \author{Bendix Carstensen, \email{b@bxc.dk} } \seealso{ \code{\link{ci.cum}} } \examples{ library( Epi ) data( DMlate ) # Naive Lexis object Lx <- Lexis( entry = list( age = dodm-dobth ), exit = list( age = dox -dobth ), exit.status = factor( !is.na(dodth), labels=c("DM","Dead") ), data = DMlate ) # Cut follow-up at insulin inception Lc <- cutLexis( Lx, cut = Lx$doins-Lx$dob, new.state = "DM/ins", precursor.states = "DM" ) summary( Lc ) # Split in small age intervals Sc <- splitLexis( Lc, breaks=seq(0,120,2) ) summary( Sc ) # Overview of object boxes( Sc, boxpos=TRUE, show.BE=TRUE, scale.R=100 ) # Knots for splines a.kn <- 2:9*10 # Mortality among DM mW <- glm( lex.Xst=="Dead" ~ Ns( age, knots=a.kn ), offset = log(lex.dur), family = poisson, data = subset(Sc,lex.Cst=="DM") ) # Mortality among insulin treated mI <- update( mW, data = subset(Sc,lex.Cst=="DM/ins") ) # Total motality mT <- update( mW, data = Sc ) # Incidence of insulin inception lI <- update( mW, lex.Xst=="DM/ins" ~ . ) # From these we can now derive the fitted rates in intervals of 1 year's # length. In real applications you would use much smaller interval like # 1 month: # int <- 1/12 int <- 1 # Prediction frame to return rates in units of cases per 1 year # - we start at age 40 since rates of insulin inception are largely # indeterminate before age 40 nd <- data.frame( age = seq( 40+int, 110, int ) - int/2, lex.dur = 1 ) muW <- predict( mW, newdata = nd, type = "response" ) muD <- predict( mI, newdata = nd, type = "response" ) lam <- predict( lI, newdata = nd, type = "response" ) # Compute the survival function, and the conditional from ages 50 resp. 70 s1 <- surv1( int, muD, age.in=40, A=c(50,70) ) round( s1, 3 ) s2 <- surv2( int, muW, muD, lam, age.in=40, A=c(50,70) ) round( s2, 3 ) # How much is YLL overrated by ignoring insulin incidence? round( YLL <- cbind( yll( int, muW, muD, lam, A = 41:90, age.in = 40 ), yll( int, muW, muD, lam, A = 41:90, age.in = 40, immune=TRUE ) ), 2 )[seq(1,51,10),] par( mar=c(3,3,1,1), mgp=c(3,1,0)/1.6, bty="n", las=1 ) matplot( 40:90, YLL, type="l", lty=1, lwd=3, ylim=c(0,10), yaxs="i", xlab="Age" ) } \keyword{survival} Epi/man/pctab.Rd0000644000175100001440000000222413011073056013134 0ustar hornikusers\name{pctab} \alias{pctab} \title{Create percentages in a table} \description{ Computes percentages and a margin of totals along a given margin of a table. } \usage{ pctab(TT, margin = length(dim(TT)), dec=1) } \arguments{ \item{TT}{A table or array object} \item{margin}{Which margin should be the the total?} \item{dec}{How many decimals should be printed? If 0 or \code{FALSE} nothing is printed} } \value{ A table of percentages, where all dimensions except the one specified \code{margin} has two extra levels named "All" (where all entries are 100) and "N". The function prints the table with \code{dec} decimals. } \author{ Bendix Carstensen, Steno Diabetes Center, \url{http://BendixCarstensen.com}. } \seealso{ \code{\link{addmargins}} } \examples{ Aye <- sample( c("Yes","Si","Oui"), 177, replace=TRUE ) Bee <- sample( c("Hum","Buzz"), 177, replace=TRUE ) Sea <- sample( c("White","Black","Red","Dead"), 177, replace=TRUE ) A <- table( Aye, Bee, Sea ) A ftable( pctab( A ) ) ftable( pctab( addmargins( A, 1 ), 3 ) ) round( ftable( pctab( addmargins( A, 1 ), 3 ), row.vars=3 ), 1) } \keyword{ manip } \keyword{ methods } \keyword{ array } Epi/man/effx.match.Rd0000644000175100001440000000474413011073056014077 0ustar hornikusers\name{effx.match} \alias{effx.match} \title{Function to calculate effects for individually matched case-control studies} \description{ The function calculates the effects of an exposure on a response, possibly stratified by a stratifying variable, and/or controlled for one or more confounding variables. } \usage{ effx.match(response, exposure, match, strata=NULL, control=NULL, base=1, digits=3, alpha=0.05, data=NULL) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{response}{The \code{response} variable - must be numeric} \item{exposure}{The \code{exposure} variable can be numeric or a factor} \item{match}{The variable which identifies the matched sets} \item{strata}{The \code{strata} stratifying variable - must be a factor} \item{control}{ The \code{control} variable(s). These are passed as a list if there are more than one of them.} \item{base}{Baseline for the effects of a categorical exposure, default 1} \item{digits}{Number of significant digits for the effects, default 3} \item{alpha}{1 - confidence level} \item{data}{\code{data} refers to the data used to evaluate the function} } \details{Effects are calculated odds ratios. The function is a wrapper for clogit, from the survival package. The k-1 effects for a categorical exposure with k levels are relative to a baseline which, by default, is the first level. The effect of a metric (quantitative) exposure is calculated per unit of exposure. The exposure variable can be numeric or a factor, but if it is an ordered factor the order will be ignored. } \value{ % ~Describe the value returned % If it is a LIST, use \item{comp1 }{Effects of exposure} \item{comp2 }{Tests of significance} % ... } \references{ www.mhills.pwp.blueyonder.co.uk } \author{Michael Hills} %\note{ ~~further notes~~ } %\seealso{ ~~objects to See Also as \code{\link{~~fun~~}}, ~~~ } \examples{ library(Epi) library(survival) data(bdendo) # d is the case-control variable, set is the matching variable. # The variable est is a factor and refers to estrogen use (no,yes) # The variable hyp is a factor with 2 levels and refers to hypertension (no, yes) # effect of est on the odds of being a case effx.match(d,exposure=est,match=set,data=bdendo) # effect of est on the odds of being a case, stratified by hyp effx.match(d,exposure=est,match=set,strata=hyp,data=bdendo) # effect of est on the odds of being a case, controlled for hyp effx.match(d,exposure=est,match=set,control=hyp,data=bdendo) } \keyword{ models } \keyword{ regression } Epi/man/stattable.Rd0000644000175100001440000001135313011073056014031 0ustar hornikusers\name{stat.table} \alias{stat.table} \alias{print.stat.table} \title{Tables of summary statistics} \description{ \code{stat.table} creates tabular summaries of the data, using a limited set of functions. A list of index variables is used to cross-classify summary statistics. It does NOT work inside \code{with()}! } \usage{ stat.table(index, contents = count(), data, margins = FALSE) \method{print}{stat.table}(x, width=7, digits,...) } \arguments{ \item{index}{A factor, or list of factors, used for cross-classification. If the list is named, then the names will be used when printing the table. This feature can be used to give informative labels to the variables.} \item{contents}{A function call, or list of function calls. Only a limited set of functions may be called (See Details below). If the list is named, then the names will be used when printing the table.} \item{data}{an optional data frame containing the variables to be tabulated. If this is omitted, the variables will be searched for in the calling environment.} \item{margins}{a logical scalar or vector indicating which marginal tables are to be calculated. If a vector, it should be the same length as the \code{index} argument: values corresponding to \code{TRUE} will be retained in marginal tables.} \item{x}{an object of class \code{stat.table}.} \item{width}{a scalar giving the minimum column width when printing.} \item{digits}{a scalar, or named vector, giving the number of digits to print after the decimal point. If a named vector is used, the names should correspond to one of the permitted functions (See Details below) and all results obtained with that function will be printed with the same precision.} \item{...}{further arguments passed to other print methods.} } \details{ This function is similar to \code{tapply}, with some enhancements: multiple summaries of multiple variables may be mixed in the same table; marginal tables may be calculated; columns and rows may be given informative labels; pretty printing may be controlled by the associated print method. This function is not a replacement for \code{tapply} as it also has some limitations. The only functions that may be used in the \code{contents} argument are: \code{\link{count}}, \code{\link{mean}}, \code{\link{weighted.mean}}, \code{\link{sum}}, \code{\link{quantile}}, \code{\link{median}}, \code{\link{IQR}}, \code{\link{max}}, \code{\link{min}}, \code{\link{ratio}}, \code{\link{percent}}, and \code{\link{sd}}. The \code{count()} function, which is the default, simply creates a contingency table of counts. The other functions are applied to each cell created by combinations of the \code{index} variables. } \value{ An object of class \code{stat.table}, which is a multi-dimensional array. A print method is available to create formatted one-way and two-way tables. } \author{Martyn Plummer} \note{ The permitted functions in the contents list %are overloaded functions that are defined inside \code{stat.table}. They have the same interface as the functions callable from the command line, except for two differences. If there is an argument \code{na.rm} then its default value is always \code{TRUE}. A second difference is that the \code{quantile} function can only produce a single quantile in each call. } \seealso{\code{\link{table}}, \code{\link{tapply}}, \code{\link{mean}}, \code{\link{weighted.mean}}, \code{\link{sum}}, \code{\link{quantile}}, \code{\link{median}}, \code{\link{IQR}}, \code{\link{max}}, \code{\link{min}}, \code{\link{ratio}}, \code{\link{percent}}, \code{\link{count}}, \code{\link{sd}}.} \examples{ data(warpbreaks) # A one-way table stat.table(tension,list(count(),mean(breaks)),data=warpbreaks) # The same table with informative labels stat.table(index=list("Tension level"=tension),list(N=count(), "mean number of breaks"=mean(breaks)),data=warpbreaks) # A two-way table stat.table(index=list(tension,wool),mean(breaks),data=warpbreaks) # The same table with margins over tension, but not wool stat.table(index=list(tension,wool),mean(breaks),data=warpbreaks, margins=c(TRUE, FALSE)) # A table of column percentages stat.table(list(tension,wool), percent(tension), data=warpbreaks) # Cell percentages, with margins stat.table(list(tension,wool),percent(tension,wool), margin=TRUE, data=warpbreaks) # A table with multiple statistics # Note how each statistic has its own default precision a <- stat.table(index=list(wool,tension), contents=list(count(),mean(breaks),percent (wool)), data=warpbreaks) print(a) # Print the percentages rounded to the nearest integer print(a, digits=c(percent=0)) } \keyword{iteration} \keyword{category} Epi/man/brv.Rd0000644000175100001440000000363213011073056012640 0ustar hornikusers\name{brv} \alias{brv} \docType{data} \title{Bereavement in an elderly cohort} \description{ The \code{brv} data frame has 399 rows and 11 columns. The data concern the possible effect of marital bereavement on subsequent mortality. They arose from a survey of the physical and mental health of a cohort of 75-year-olds in one large general practice. These data concern mortality up to 1 January, 1990 (although further follow-up has now taken place). Subjects included all lived with a living spouse when they entered the study. There are three distinct groups of such subjects: (1) those in which both members of the couple were over 75 and therefore included in the cohort, (2) those whose spouse was below 75 (and was not, therefore, part of the main cohort study), and (3) those living in larger households (that is, not just with their spouse). } \format{ This data frame contains the following columns: \describe{ \item{\code{id}}{subject identifier, a numeric vector} \item{\code{couple}}{couple identifier, a numeric vector} \item{\code{dob}}{date of birth, a date} \item{\code{doe}}{date of entry into follow-up study, a date} \item{\code{dox}}{date of exit from follow-up study, a date} \item{\code{dosp}}{date of death of spouse, a date (if the spouse was still alive at the end of follow-up,this was coded to January 1, 2000)} \item{\code{fail}}{status at end of follow-up, a numeric vector (0=alive,1=dead)} \item{\code{group}}{see Description, a numeric vector} \item{\code{disab}}{disability score, a numeric vector} \item{\code{health}}{perceived health status score, a numeric vector} \item{\code{sex}}{a factor with levels \code{Male} and \code{Female} } } } \source{ Jagger C, and Sutton CJ, Death after Marital Bereavement. Statistics in Medicine, 10:395-404, 1991. (Data supplied by Carol Jagger). } \examples{ data(brv) } \keyword{datasets} Epi/man/rbind.Lexis.Rd0000644000175100001440000000617713011073056014237 0ustar hornikusers\name{cbind.Lexis} \alias{cbind.Lexis} \alias{rbind.Lexis} %- Also NEED an '\alias' for EACH other topic documented here. \title{Combining a Lexis objects with data frames or other Lexis objects } \description{A Lexis object may be combined side-by-side with data frames. Or several Lexis objects may stacked, possibly increasing the number of states and time scales. } \usage{ \method{cbind}{Lexis}(...) \method{rbind}{Lexis}(...) } \arguments{ \item{\dots}{For \code{cbind} a sequence of data frames or vectors of which exactly one has class \code{Lexis}. For \code{rbind} a sequence of Lexis objects, supposedly representing follow-up in the same population.} } \details{ Arguments to \code{rbind.Lexis} must all be \code{\link{Lexis}} objects; except for possible NULL objects. The timescales in the resulting object will be the union of all timescales present in all arguments. Values of timescales not present in a contributing Lexis object will be set to \code{NA}. The \code{breaks} for a given time scale will be \code{NULL} if the \code{breaks} of the same time scale from two contributing Lexis objects are different. The arguments to \code{cbind.Lexis} must consist of at most one Lexis object, so the method is intended for amending a Lexis object with extra columns without losing the Lexis-specific attributes. } \value{ A \code{\link{Lexis}} object. \code{rbind} renders a \code{Lexis} object with timescales equal to the union of timescales in the arguments supplied. Values of a given timescale are set to \code{NA} for rows corresponding to supplied objects. \code{cbind} basically just adds columns to an existing Lexis object. } \author{ Bendix Carstensen, \url{http://BendixCarstensen.com} } \seealso{ \code{\link{subset.Lexis}} } \examples{ # A small bogus cohort xcoh <- structure( list( id = c("A", "B", "C"), birth = c("14/07/1952", "01/04/1954", "10/06/1987"), entry = c("04/08/1965", "08/09/1972", "23/12/1991"), exit = c("27/06/1997", "23/05/1995", "24/07/1998"), fail = c(1, 0, 1) ), .Names = c("id", "birth", "entry", "exit", "fail"), row.names = c("1", "2", "3"), class = "data.frame" ) # Convert the character dates into numerical variables (fractional years) xcoh <- cal.yr( xcoh, format="\%d/\%m/\%Y", wh=2:4 ) # See how it looks xcoh str( xcoh ) # Define as Lexis object with timescales calendar time and age Lcoh <- Lexis( entry = list( per=entry ), exit = list( per=exit, age=exit-birth ), exit.status = fail, data = xcoh ) Lcoh cbind( Lcoh, zz=3:5 ) # Lexis object wit time since entry time scale Dcoh <- Lexis( entry = list( per=entry, tfe=0 ), exit = list( per=exit ), exit.status = fail, data = xcoh ) # A bit meningless to combie these two, really... rbind( Dcoh, Lcoh ) # Split different places sL <- splitLexis( Lcoh, time.scale="age", breaks=0:20*5 ) sD <- splitLexis( Dcoh, time.scale="tfe", breaks=0:50*2 ) sDL <- rbind( sD, sL ) } \keyword{survival,manip} Epi/man/detrend.Rd0000644000175100001440000000207013011073056013467 0ustar hornikusers\name{detrend} \alias{detrend} \title{ Projection of a model matrix on to the orthogonal complement of a trend. } \description{ The columns of the model matrix \code{M} is projected on the orthogonal complement to the matrix \code{(1,t)}. Orthogonality is defined w.r.t. an inner product defined by the weights \code{weight}. } \usage{ detrend( M, t, weight = rep(1, nrow(M)) ) } \arguments{ \item{M}{ A model matrix. } \item{t}{ The trend defining a subspace. A numerical vector of length \code{nrow(M)} } \item{weight}{ Weights defining the inner product of vectors \code{x} and \code{y} as \code{sum(x*w*y)}. A numerical vector of length \code{nrow(M)}, defaults to a vector of \code{1}s.} } \details{ The functions is intended to be used in parametrization of age-period-cohort models. } \value{ A full-rank matrix with columns orthogonal to \code{(1,t)}. } \author{ Bendix Carstensen, Steno Diabetes Center, \url{http://BendixCarstensen.com}, with help from Peter Dalgaard. } \seealso{ \code{\link{projection.ip}} } \keyword{array} Epi/man/bdendo11.Rd0000644000175100001440000000100313011073056013432 0ustar hornikusers\name{bdendo11} \alias{bdendo11} \docType{data} \title{A 1:1 subset of the endometrial cancer case-control study} \description{ The \code{bdendo11} data frame has 126 rows and 13 columns. This is a subset of the dataset \code{\link{bdendo}} in which each case was matched with a single control. } \source{ Breslow NE, and Day N, Statistical Methods in Cancer Research. Volume I: The Analysis of Case-Control Studies. IARC Scientific Publications, IARC:Lyon, 1980. } \examples{ data(bdendo11) } \keyword{datasets} Epi/man/ftrend.Rd0000644000175100001440000000476613011073056013342 0ustar hornikusers\name{ftrend} \alias{ftrend} \title{Fit a floating trend to a factor in generalized linear model} \description{ Fits a "floating trend" model to the given factor in a glm in a generalized linear model by centering covariates. } \usage{ ftrend(object, ...) } \arguments{ \item{object}{fitted \code{lm} or \code{glm} object. The model must not have an intercept term} \item{...}{arguments to the \code{nlm} function} } \details{ \code{ftrend()} calculates "floating trend" estimates for factors in generalized linear models. This is an alternative to treatment contrasts suggested by Greenland et al. (1999). If a regression model is fitted with no intercept term, then contrasts are not used for the first factor in the model. Instead, there is one parameter for each level of this factor. However, the interpretation of these parameters, and their variance-covariance matrix, depends on the numerical coding used for the covariates. If an arbitrary constant is added to the covariate values, then the variance matrix is changed. The \code{ftrend()} function takes the fitted model and works out an optimal constant to add to the covariate values so that the covariance matrix is approximately diagonal. The parameter estimates can then be treated as approximately independent, thus simplifying their presentation. This is particularly useful for graphical display of dose-response relationships (hence the name). Greenland et al. (1999) originally suggested centring the covariates so that their weighted mean, using the fitted weights from the model, is zero. This heuristic criterion is improved upon by \code{ftrend()} which uses the same minimum information divergence criterion as used by Plummer (2003) for floating variance calculations. \code{ftrend()} calls \code{nlm()} to do the minimization and will pass optional arguments to control it. } \note{ The "floating trend" method is an alternative to the "floating absolute risk" method, which is implemented in the function \code{float()}. } \value{ A list with the following components \item{coef}{coefficients for model with adjusted covariates.} \item{vcov}{Variance-covariance matrix of adjusted coefficients.} } \references{ Greenland S, Michels KB, Robins JM, Poole C and Willet WC (1999) Presenting statistical uncertainty in trends and dose-response relations, \emph{American Journal of Epidemiology}, \bold{149}, 1077-1086. } \author{Martyn Plummer} \seealso{\code{\link{float}}} \keyword{regression} Epi/man/ROC.Rd0000644000175100001440000000747713011073056012505 0ustar hornikusers\name{ROC} \alias{ROC} %- Also NEED an `\alias' for EACH other topic documented here. \title{Function to compute and draw ROC-curves.} \description{ Computes sensitivity, specificity and positive and negative predictive values for a test based on dichotomizing along the variable \code{test}, for prediction of \code{stat}. Plots curves of these and a ROC-curve. } \usage{ ROC( test = NULL, stat = NULL, form = NULL, plot = c("sp", "ROC"), PS = is.null(test), PV = TRUE, MX = TRUE, MI = TRUE, AUC = TRUE, grid = seq(0,100,10), col.grid = gray( 0.9 ), cuts = NULL, lwd = 2, data = parent.frame(), ... ) } \arguments{ \item{test}{ Numerical variable used for prediction. } \item{stat}{ Logical variable of true status. } \item{form}{ Formula used in a logistic regression. If this is given, \code{test} and \code{stat} are ignored. If not given then both \code{test} and \code{stat} must be supplied. } \item{plot}{ Character variable. If "sp", the a plot of sensitivity, specificity and predictive values against test is produced, if "ROC" a ROC-curve is plotted. Both may be given.} \item{PS}{logical, if TRUE the x-axis in the plot "ps"-plot is the the predicted probability for \code{stat}==TRUE, otherwise it is the scale of \code{test} if this is given otherwise the scale of the linear predictor from the logistic regression.} \item{PV}{Should sensitivity, specificity and predictive values at the optimal cutpoint be given on the ROC plot? } \item{MX}{Should the ``optimal cutpoint'' (i.e. where sens+spec is maximal) be indicated on the ROC curve?} \item{MI}{Should model summary from the logistic regression model be printed in the plot?} \item{AUC}{Should the area under the curve (AUC) be printed in the ROC plot?} \item{grid}{Numeric or logical. If FALSE no background grid is drawn. Otherwise a grid is drawn on both axes at \code{grid} percent.} \item{col.grid}{Colour of the grid lines drawn.} \item{cuts}{Points on the test-scale to be annotated on the ROC-curve. } \item{lwd}{Thickness of the curves} \item{data}{Data frame in which to interpret the variables.} \item{\dots}{Additional arguments for the plotting of the ROC-curve. Passed on to \code{plot}} } \details{ As an alternative to a \code{test} and a \code{status} variable, a model formula may given, in which case the the linear predictor is the test variable and the response is taken as the true status variable. The test used to derive sensitivity, specificity, PV+ and PV- as a function of \eqn{x} is \code{test}\eqn{\geq x}{>=x} as a predictor of \code{stat}=TRUE. } \value{ A list with two components: \item{res}{dataframe with variables \code{sens}, \code{spec}, \code{pvp}, \code{pvn} and name of the test variable. The latter is the unique values of test or linear predictor from the logistic regression in ascending order with -Inf prepended. Since the sensitivity is defined as \eqn{P(test>x)|status=TRUE}, the first row has \code{sens} equal to 1 and \code{spec} equal to 0, corresponding to drawing the ROC curve from the upper right to the lower left corner.} \item{lr}{glm object with the logistic regression result used for construction of the ROC curve} 0, 1 or 2 plots are produced according to the setting of \code{plot}. } \author{Bendix Carstensen, Steno Diabetes Center \& University of Copenhagen, \url{http://BendixCarstensen.com} } \examples{ x <- rnorm( 100 ) z <- rnorm( 100 ) w <- rnorm( 100 ) tigol <- function( x ) 1 - ( 1 + exp( x ) )^(-1) y <- rbinom( 100, 1, tigol( 0.3 + 3*x + 5*z + 7*w ) ) ROC( form = y ~ x + z, plot="ROC" ) } \keyword{manip} \keyword{htest} %\keyword{ROC-curves} %\keyword{sensitivity} %\keyword{specificity} %\keyword{predictive values} Epi/man/Icens.Rd0000644000175100001440000000672013011073056013111 0ustar hornikusers\name{Icens} \alias{Icens} \alias{print.Icens} \title{ Fits a regression model to interval censored data. } \description{ The models fitted assumes a piecewise constant baseline rate in intervals specified by the argument \code{breaks}, and for the covariates either a multiplicative relative risk function (default) or an additive excess risk function. } \usage{ Icens( first.well, last.well, first.ill, formula, model.type=c("MRR","AER"), breaks, boot=FALSE, alpha=0.05, keep.sample=FALSE, data ) } \arguments{ \item{first.well}{Time of entry to the study, i.e. the time first seen without event. Numerical vector.} \item{last.well}{Time last seen without event. Numerical vector.} \item{first.ill}{Time first seen with event. Numerical vector.} \item{formula}{Model formula for the log relative risk.} \item{model.type}{Which model should be fitted.} \item{breaks}{Breakpoints between intervals in which the underlying timescale is assumed constant. Any observation outside the range of \code{breaks} is discarded.} \item{boot}{Should bootstrap be performed to produce confidence intervals for parameters. If a number is given this will be the number of bootsrap samples. The default is 1000.} \item{alpha}{1 minus the confidence level.} \item{keep.sample}{Should the bootstrap sample of the parameter values be returned?} \item{data}{Data frame in which the times and formula are interpreted.} } \details{ The model is fitted by calling either \code{\link{fit.mult}} or \code{\link{fit.add}}. } \value{ An object of class \code{"Icens"}: a list with three components: \item{rates}{A glm object from a binomial model with log-link, estimating the baseline rates, and the excess risk if \code{"AER"} is specfied.} \item{cov}{A glm object from a binomial model with complementary log-log link, estimating the log-rate-ratios. Only if \code{"MRR"} is specfied.} \item{niter}{Nuber of iterations, a scalar} \item{boot.ci}{If \code{boot=TRUE}, a 3-column matrix with estimates and 1-\code{alpha} confidence intervals for the parameters in the model.} \item{sample}{A matrix of the parameterestimates from the bootstrapping. Rows refer to parameters, columns to bootstrap samples.} } \references{ B Carstensen: Regression models for interval censored survival data: application to HIV infection in Danish homosexual men. Statistics in Medicine, 15(20):2177-2189, 1996. CP Farrington: Interval censored survival data: a generalized linear modelling approach. Statistics in Medicine, 15(3):283-292, 1996. } \author{ Martyn Plummer, \email{plummer@iarc.fr}, Bendix Carstensen, \email{b@bxc.dk} } \seealso{ \code{\link{fit.add}} \code{\link{fit.mult}} } \examples{ data( hivDK ) # Convert the dates to fractional years so that rates are # expressed in cases per year for( i in 2:4 ) hivDK[,i] <- cal.yr( hivDK[,i] ) m.RR <- Icens( entry, well, ill, model="MRR", formula=~pyr+us, breaks=seq(1980,1990,5), data=hivDK) # Currently the MRR model returns a list with 2 glm objects. round( ci.lin( m.RR$rates ), 4 ) round( ci.lin( m.RR$cov, Exp=TRUE ), 4 ) # There is actually a print method: print( m.RR ) m.ER <- Icens( entry, well, ill, model="AER", formula=~pyr+us, breaks=seq(1980,1990,5), data=hivDK) # There is actually a print method: print( m.ER ) } \keyword{ models } \keyword{ regression } \keyword{ survival } Epi/man/Lexis.diagram.Rd0000644000175100001440000001160213011073056014532 0ustar hornikusers\name{Lexis.diagram} \alias{Lexis.diagram} \title{Plot a Lexis diagram} \description{ Draws a Lexis diagram, optionally with life lines from a cohort, and with lifelines of a cohort if supplied. Intended for presentation purposes. } \usage{ Lexis.diagram( age = c( 0, 60), alab = "Age", date = c( 1940, 2000 ), dlab = "Calendar time", int = 5, lab.int = 2*int, col.life = "black", lwd.life = 2, age.grid = TRUE, date.grid = TRUE, coh.grid = FALSE, col.grid = gray(0.7), lwd.grid = 1, las = 1, entry.date = NA, entry.age = NA, exit.date = NA, exit.age = NA, risk.time = NA, birth.date = NA, fail = NA, cex.fail = 1.1, pch.fail = c(NA,16), col.fail = rep( col.life, 2 ), data = NULL, ... ) } \arguments{ \item{age}{Numerical vector of length 2, giving the age-range for the diagram} \item{alab}{Label on the age-axis.} \item{date}{Numerical vector of length 2, giving the calendar time-range for the diagram} \item{dlab}{label on the calendar time axis.} \item{int}{The interval between grid lines in the diagram. If a vector of length two is given, the first value will be used for spacing of age-grid and the second for spacing of the date grid.} \item{lab.int}{The interval between labelling of the grids.} \item{col.life}{Colour of the life lines.} \item{lwd.life}{Width of the life lines.} \item{age.grid}{Should grid lines be drawn for age?} \item{date.grid}{Should grid lines be drawn for date?} \item{coh.grid}{Should grid lines be drawn for birth cohorts (diagonals)?} \item{col.grid}{Colour of the grid lines.} \item{lwd.grid}{Width of the grid lines.} \item{las}{How are the axis labels plotted?} \item{entry.date, entry.age, exit.date, exit.age, risk.time, birth.date}{Numerical vectors defining lifelines to be plotted in the diagram. At least three must be given to produce lines. Not all subsets of three will suffice, the given subset has to define life lines. If insufficient data is given, no life lines are produced.} \item{fail}{Logical of event status at exit for the persons whose life lines are plotted.} \item{pch.fail}{Symbols at the end of the life lines for censorings (\code{fail==0}) and failures (\code{fail != 0}).} \item{cex.fail}{Expansion of the status marks at the end of life lines.} \item{col.fail}{Character vector of length 2 giving the colour of the failure marks for censorings and failures respectively.} \item{data}{Dataframe in which to interpret the arguments.} \item{...}{Arguments to be passed on to the initial call to plot.} } \value{ If sufficient information on lifelines is given, a data frame with one row per person and columns with entry ages and dates, birth date, risk time and status filled in. Side effect: a plot of a Lexis diagram is produced with the life lines in it is produced. This will be the main reason for using the function. If the primary aim is to illustrate follow-up of a cohort, then it is better to represent the follow-up in a \code{\link{Lexis}} object, and use the generic \code{\link{plot.Lexis}} function. } \details{ The default unit for supplied variables are (calendar) years. If any of the variables \code{entry.date}, \code{exit.date} or \code{birth.date} are of class "\code{Date}" or if any of the variables \code{entry.age}, \code{exit.age} or \code{risk.time} are of class "\code{difftime}", they will be converted to calendar years, and plotted correctly in the diagram. The returned dataframe will then have colums of classes "\code{Date}" and "\code{difftime}". } \author{ Bendix Carstensen, \url{http://BendixCarstensen.com} } \examples{ Lexis.diagram( entry.age = c(3,30,45), risk.time = c(25,5,14), birth.date = c(1970,1931,1925.7), fail = c(TRUE,TRUE,FALSE) ) LL <- Lexis.diagram( entry.age = sample( 0:50, 17, replace=TRUE ), risk.time = sample( 5:40, 17, r=TRUE), birth.date = sample( 1910:1980, 17, r=TRUE ), fail = sample( 0:1, 17, r=TRUE ), cex.fail = 1.1, lwd.life = 2 ) # Identify the persons' entry and exits text( LL$exit.date, LL$exit.age, paste(1:nrow(LL)), col="red", font=2, adj=c(0,1) ) text( LL$entry.date, LL$entry.age, paste(1:nrow(LL)), col="blue", font=2, adj=c(1,0) ) data( nickel ) attach( nickel ) LL <- Lexis.diagram( age=c(10,100), date=c(1900,1990), entry.age=age1st, exit.age=ageout, birth.date=dob, fail=(icd \%in\% c(162,163)), lwd.life=1, cex.fail=0.8, col.fail=c("green","red") ) abline( v=1934, col="blue" ) nickel[1:10,] LL[1:10,] } \keyword{hplot} \keyword{dplot} \seealso{ \code{\link{Life.lines}}, \code{\link{Lexis.lines}} } Epi/man/apc.LCa.Rd0000644000175100001440000000562513011073056013254 0ustar hornikusers\name{apc.LCa} \alias{apc.LCa} \alias{show.apc.LCa} \title{Fit Age-Period-Cohort models and Lee-Carter models with effects modeled by natural splines. } \description{ \code{apc.LCa} fits an Age-Period-Cohort model and sub-models (using \code{\link{apc.fit}}) as well as Lee-Carter models (using \code{\link{LCa.fit}}). \code{boxes.apc.LCa} plots the models in little boxes with their residual deviance with arrows showing their relationships. } \usage{ apc.LCa( data, keep.models = FALSE, ... ) show.apc.LCa( x, dev.scale = TRUE, top = "Ad", ... ) } \arguments{ \item{data}{A data frame that must have columns \code{A}, \code{P}, \code{D} and \code{Y}, see e.g. \code{\link{apc.fit}} } \item{keep.models}{Logical. Should the \code{apc} object and the 5 \code{LCa} objects be returned too? } \item{...}{Further parameters passed on to \code{\link{LCa.fit}} or \code{\link{boxes.matrix}}. } \item{x}{The result from a call to \code{apc.LCa}.} \item{dev.scale}{Should the vertical position of the boxes with the models be scales relative to the deviance between the Age-drift model and the extended Lee-Carter model?} \item{top}{The model presented at the top of the plot of boxes (together with any other model with larger deviance) when vertical position is scaled by deviances. Only "Ad", "AP", "AC", "APa" or "ACa" will make sense.} } \details{The function \code{apc.LCa} fits all 9 models (well, 10) available as extension and sub-models of the APC-model and compares them by returning deviance and residual df. } \value{A 9 by 2 matrix classified by model and deviance/df; optionally (if \code{models=TRUE}) a list with the matrix as \code{dev}, \code{apc}, an \code{apc} object (from \code{\link{apc.fit}}), and \code{LCa}, a list with 5 \code{LCa} objects (from \code{\link{LCa.fit}}). } \author{ Bendix Carstensen, \url{http://BendixCarstensen.com} } \seealso{ \code{ \link{apc.fit}}, \code{\link{LCa.fit} } } \examples{ library( Epi ) # Danish lung cancer incidence in 5x5x5 Lexis triangles data( lungDK ) lc <- subset( lungDK, Ax>40 )[,c("Ax","Px","D","Y")] names( lc )[1:2] <- c("A","P") head( lc ) al <- apc.LCa( lc, npar=c(9,6,6,6,10), keep.models=TRUE, maxit=500, eps=10e-3 ) show.apc.LCa( al, dev=FALSE ) show.apc.LCa( al, top="AP" ) show.apc.LCa( al, top="APa" ) show.apc.LCa( al, top="ACa" ) # Danish mortality data \dontrun{ data( M.dk ) mdk <- subset( M.dk, sex==1 )[,c("A","P","D","Y")] head( mdk ) al <- apc.LCa( mdk, npar=c(15,15,20,6,6), maxit=50, eps=10e-3, quiet=FALSE, VC=FALSE ) show.apc.LCa( al, dev=FALSE ) show.apc.LCa( al, dev=TRUE ) show.apc.LCa( al, top="AP" ) # Fit a reasonable model to Danish mortality data and plot results mACa <- LCa.fit( mdk, model="ACa", npar=c(15,15,20,6,6), c.ref=1930, a.ref=70, quiet=FALSE, maxit=250 ) par( mfrow=c(1,3) ) plot( mACa )} } \keyword{regression} \keyword{models} Epi/man/fit.add.Rd0000644000175100001440000000264213011073056013360 0ustar hornikusers\name{fit.add} \alias{fit.add} \title{ Fit an addive excess risk model to interval censored data. } \description{ Utility function. The model fitted assumes a piecewise constant intensity for the baseline, and that the covariates act additively on the rate scale. } \usage{ fit.add( y, rates.frame, cov.frame, start ) } \arguments{ \item{y}{Binary vector of outcomes} \item{rates.frame}{Dataframe expanded from the original data by \code{\link{expand.data}}, cooresponding to covariates for the rate parameters.} \item{cov.frame}{ do., but covariates corresponding to the \code{formula} argument of \code{\link{Icens}}} \item{start}{Starting values for the rate parameters. If not supplied, then starting values are generated.} } \value{ A list with one component: \item{rates}{A glm object from a binomial model with log-link function.} } \references{ B Carstensen: Regression models for interval censored survival data: application to HIV infection in Danish homosexual men. Statistics in Medicine, 15(20):2177-2189, 1996. CP Farrington: Interval censored survival data: a generalized linear modelling approach. Statistics in Medicine, 15(3):283-292, 1996. } \author{ Martyn Plummer, \email{plummer@iarc.fr} } \seealso{ \code{\link{Icens}} \code{\link{fit.mult}} } \examples{ data( HIV.dk ) } \keyword{ models } \keyword{ regression } \keyword{ survival } Epi/man/N2Y.Rd0000644000175100001440000000604713011073056012462 0ustar hornikusers\name{N2Y} \alias{N2Y} \title{ Create risk time ("Person-Years") in Lexis triangles from population count data. } \description{ Data on population size at equidistant dates and age-classes are used to estimate person-time at risk in Lexis-triangles, i.e. classes classified by age, period AND cohort (date of birth). Only works for data where age-classes have the same width as the period-intervals. } \usage{ N2Y( A, P, N, data = NULL, return.dfr = TRUE) } \arguments{ \item{A}{Name of the age-variable, which should be numeric, corresponding to the left endpoints of the age intervals.} \item{P}{Name of the period-variable, which should be numeric, corresponding to the date of population count.} \item{N}{The population size at date \code{P} in age class \code{A}.} \item{data}{A data frame in which arguments are interpreted.} \item{return.dfr}{Logical. Should the results be returned as a data frame (default \code{TRUE}) or as a table.} } \details{The calculation of the risk time from the population figures is done as described in: B. Carstensen: Age-Period-Cohort models for the Lexis diagram. Statistics in Medicine, 26: 3018-3045, 2007. } \value{A data frame with variables \code{A}, \code{P} and \code{Y}, representing the mean age and period in the Lexis triangles and the person-time in them, respectively. The person-time is in units of the distance between population count dates. If \code{res.dfr=FALSE} a three-way table classified by the left end point of the age-classes and the periods and a factor \code{wh} taking the values \code{up} and \code{lo} corresponding to upper (early cohort) and lower (late cohort) Lexis triangles. } \references{ B. Carstensen: Age-Period-Cohort models for the Lexis diagram. Statistics in Medicine, 26: 3018-3045, 2007. } \author{ Bendix Carstensen, \url{BendixCarstensen.com} } \seealso{ \code{\link{splitLexis}}, \code{\link{apc.fit}} } \examples{ # Danish population at 1 Jan each year by sex and age data( N.dk ) # An illustrative subset ( Nx <- subset( N.dk, sex==1 & A<5 & P<1975 ) ) # Show the data in tabular form xtabs( N ~ A + P, data=Nx ) # Lexis triangles as data frame Nt <- N2Y( data=Nx, return.dfr=TRUE ) xtabs( Y ~ round(A,2) + round(P,2), data=Nt ) # Lexis triangles as a 3-dim array ftable( N2Y( data=Nx, return.dfr=FALSE ) ) # Calculation of PY for persons born 1970 in 1972 ( N.1.1972 <- subset( Nx, A==1 & P==1972)$N ) ( N.2.1973 <- subset( Nx, A==2 & P==1973)$N ) N.1.1972/3 + N.2.1973/6 N.1.1972/6 + N.2.1973/3 # These number can be found in the following plot: # Blue numbers are population size at 1 January # Red numbers are the computed person-years in Lexis triangles: Lexis.diagram(age=c(0,4), date=c(1970,1975), int=1, coh.grid=TRUE ) with( Nx, text(P,A+0.5,paste(N),srt=90,col="blue") ) with( Nt, text(P,A,formatC(Y,format="f",digits=1),col="red") ) text( 1970.5, 2, "Population count 1 January", srt=90, col="blue") text( 1974.5, 2, "Person-\nyears", col="red") } \keyword{Data} Epi/man/plotevent.rd0000644000175100001440000000216412531361107014131 0ustar hornikusers\name{plotevent} \alias{plotevent} \title{ Plot Equivalence Classes } \description{ For interval censored data, segments of times between last.well and first.ill are plotted for each conversion in the data. It also plots the equivalence classes. } \usage{ plotevent(last.well, first.ill, data) } \arguments{ \item{last.well}{ Time at which the individuals are last seen negative for the event } \item{first.ill}{ Time at which the individuals are first seen positive for the event } \item{data}{ Data with a transversal shape } } \details{ last.well and first.ill should be written as character in the function. } \value{ Graph } \references{ Carstensen B. Regression models for interval censored survival data: application to HIV infection in Danish homosexual men.Stat Med. 1996 Oct 30;15(20):2177-89. Lindsey JC, Ryan LM. Tutorial in biostatistics methods for interval-censored data.Stat Med. 1998 Jan 30;17(2):219-38. } \author{ Delphine Maucort-Boulch, Bendix Carstensen, Martyn Plummer } \seealso{ \code{\link{Icens}} } % \examples{ % } \keyword{ models } \keyword{ regression } \keyword{ survival } Epi/man/Life.lines.Rd0000644000175100001440000000404013011073056014031 0ustar hornikusers\name{Life.lines} \alias{Life.lines} \title{ Compute dates/ages for life lines in a Lexis diagram } \description{ Fills out the missing information for follow up of persons in a Lexis diagram if sufficient information is given. } \usage{ Life.lines( entry.date = NA, exit.date = NA, birth.date = NA, entry.age = NA, exit.age = NA, risk.time = NA ) } \arguments{ \item{entry.date, exit.date,birth.date, entry.age, exit.age, risk.time}{Vectors defining lifelines to be plotted in the diagram. At least three must be given to produce a result. Not all subsets of three will suffice, the given subset has to define life lines. If insufficient data is given, nothing is returned and a warning is given.} } \value{ Data frame with variables \code{entry.date}, \code{entry.age}, \code{exit.date}, \code{exit.age}, \code{risk.time}, \code{birth.date}, with all entries computed for each person. If any of \code{entry.date}, \code{exit.date} or \code{birth.date} are of class \code{Date} or if any of \code{entry.age}, \code{exit.age} or \code{risk.time} are of class \code{difftime} the date variables will be of class \code{Date} and the other three of class \code{difftime}. } \examples{ ( Life.lines( entry.age = c(3,30,45), risk.time = c(25,5,14), birth.date = c(1970,1931,1925.7) ) ) # Draw a Lexis diagram Lexis.diagram() # Compute entry and exit age and date. ( LL <- Life.lines( entry.age = c(3,30,45), risk.time = c(25,5,14), birth.date = c(1970,1931,1925.7) ) ) segments( LL[,1], LL[,2], LL[,3], LL[,4] ) # Plot the life lines. # Compute entry and exit age and date, supplying a date variable bd <- ( c(1970,1931,1925.7) - 1970 ) * 365.25 class( bd ) <- "Date" ( Life.lines( entry.age = c(3,30,45), risk.time = c(25,5,14), birth.date = bd ) ) } \seealso{ \code{\link{Lexis.diagram}}, \code{\link{Lexis.lines}} } \keyword{ manip } \keyword{ dplot } Epi/man/float.Rd0000644000175100001440000000726413011073056013161 0ustar hornikusers\name{float} \alias{float} \alias{print.floated} \title{Calculate floated variances} \description{ Given a fitted model object, the \code{float()} function calculates floating variances (a.k.a. quasi-variances) for a given factor in the model. } \usage{ float(object, factor, iter.max=50) } \arguments{ \item{object}{a fitted model object} \item{factor}{character string giving the name of the factor of interest. If this is not given, the first factor in the model is used.} \item{iter.max}{Maximum number of iterations for EM algorithm} } \details{ The \code{float()} function implements the "floating absolute risk" proposal of Easton, Peto and Babiker (1992). This is an alternative way of presenting parameter estimates for factors in regression models, which avoids some of the difficulties of treatment contrasts. It was originally designed for epidemiological studies of relative risk, but the idea is widely applicable. Treatment contrasts are not orthogonal. Consequently, the variances of treatment contrast estimates may be inflated by a poor choice of reference level, and the correlations between them may also be high. The \code{float()} function associates each level of the factor with a "floating" variance (or quasi-variance), including the reference level. Floating variances are not real variances, but they can be used to calculate the variance error of contrast by treating each level as independent. Plummer (2003) showed that floating variances can be derived from a covariance structure model applied to the variance-covariance matrix of the contrast estimates. This model can be fitted by minimizing the Kullback-Leibler information divergence between the true distribution of the parameter estimates and the simplified distribution given by the covariance structure model. Fitting is done using the EM algorithm. In order to check the goodness-of-fit of the floating variance model, the \code{float()} function compares the standard errors predicted by the model with the standard errors derived from the true variance-covariance matrix of the parameter contrasts. The maximum and minimum ratios between true and model-based standard errors are calculated over all possible contrasts. These should be within 5 percent, or the use of the floating variances may lead to invalid confidence intervals. } \value{ An object of class \code{floated}. This is a list with the following components \item{coef}{A vector of coefficients. These are the same as the treatment contrasts but the reference level is present with coefficient 0.} \item{var}{A vector of floating (or quasi-) variances} \item{limits}{The bounds on the accuracy of standard errors over all possible contrasts} } \note{ Menezes(1999) and Firth and Menezes (2004) take a slightly different approach to this problem, using a pseudo-likelihood approach to fit the quasi-variance model. Their work is implemented in the package qvcalc. } \references{ Easton DF, Peto J and Babiker GAG (1991) Floating absolute risk: An alternative to relative risk in survival and case control analysis avoiding an arbitrary reference group. \emph{Statistics in Medicine}, \bold{10}, 1025-1035. Firth D and Mezezes RX (2004) Quasi-variances. \emph{Biometrika} \bold{91}, 65-80. Menezes RX(1999) More useful standard errors for group and factor effects in generalized linear models. \emph{D.Phil. Thesis}, Department of Statistics, University of Oxford. Plummer M (2003) Improved estimates of floating absolute risk, \emph{Statistics in Medicine}, \bold{23}, 93-104. } \author{Martyn Plummer} \seealso{\code{\link{ftrend}}, \code{qvcalc}} \keyword{regression} Epi/man/gmortDK.Rd0000644000175100001440000000303113011073056013407 0ustar hornikusers\name{gmortDK} \alias{gmortDK} \docType{data} \title{Population mortality rates for Denmark in 5-years age groups.} \description{ The \code{gmortDK} data frame has 418 rows and 21 columns. } \format{ This data frame contains the following columns: \tabular{rl}{ \code{agr}: \tab Age group, 0:0--4, 5:5--9,..., 90:90+. \cr \code{per}: \tab Calendar period, 38: 1938--42, 43: 1943--47, ..., 88:1988-92. \cr \code{sex}: \tab Sex, 1: male, 2: female. \cr \code{risk}: \tab Number of person-years in the Danish population. \cr \code{dt}: \tab Number of deaths. \cr \code{rt}: \tab Overall mortality rate in cases per 1000 person-years, i.e. \code{rt=1000*dt/risk} \cr \tab Cause-specific mortality rates in cases per 1000 person-years: \cr \code{r1}: \tab Infections \cr \code{r2}: \tab Cancer. \cr \code{r3}: \tab Tumors, benign, unspecific nature. \cr \code{r4}: \tab Endocrine, metabolic. \cr \code{r5}: \tab Blood. \cr \code{r6}: \tab Nervous system, psychiatric. \cr \code{r7}: \tab Cerebrovascular. \cr \code{r8}: \tab Cardiac. \cr \code{r9}: \tab Respiratory diseases, excl. cancer. \cr \code{r10}: \tab Liver, excl. cancer. \cr \code{r11}: \tab Digestive, other. \cr \code{r12}: \tab Genitourinary. \cr \code{r13}: \tab Ill-defined symptoms. \cr \code{r14}: \tab All other, natural. \cr \code{r15}: \tab Violent. \cr } } \source{ Statistics Denmark, National board of health provided original data. Michael Andersson grouped the causes of death. } \examples{ data(gmortDK) } \seealso{\code{\link{thoro}}, \code{\link{mortDK}}} \keyword{datasets} Epi/man/M.dk.Rd0000644000175100001440000000315113011073056012634 0ustar hornikusers\name{M.dk} \alias{M.dk} \docType{data} \title{Mortality in Denmark 1974 ff.} \description{ Mortality in one-year classes of age (0-98,99+) and period (1974 ff.) in Denmark. } \usage{data(M.dk)} \format{ A data frame with 6400 observations on the following 6 variables. \describe{ \item{\code{A}}{Age-class, 0-98, 99:99+} \item{\code{sex}}{Sex. 1:males, 2:females} \item{\code{P}}{Period (year) of death} \item{\code{D}}{Number of deaths} \item{\code{Y}}{Number of person-years} \item{\code{rate}}{Mortality rate per 1000 person-years} } } \details{ Deaths in ages over 100 are in the class labelled 99. Risk time is computed by tabulation of the risk time in \code{\link{Y.dk}}, except for the class 99+ where the average of the population size in ages 99+ at the first and last date of the year is used.} \source{ \url{http://www.statistikbanken.dk/statbank5a/SelectTable/omrade0.asp?SubjectCode=02&PLanguage=1&ShowNews=OFF} } \examples{ data(M.dk) str(M.dk) zz <- xtabs( rate ~ sex+A+P, data=M.dk ) zz[zz==0] <- NA # 0s makes log-scale plots crash par(mfrow=c(1,2), mar=c(0,0,0,0), oma=c(3,3,1,1), mgp=c(3,1,0)/1.6 ) for( i in 1:2 ) { matplot( dimnames(zz)[[2]], zz[i,,], lty=1, lwd=1, col=rev(heat.colors(37)), log="y", type="l", ylim=range(zz,na.rm=TRUE), ylab="", xlab="", yaxt="n" ) text( 0, max(zz,na.rm=TRUE), c("M","F")[i], font=2, adj=0:1, cex=2, col="gray" ) if( i==1 ) axis( side=2, las=1 ) } mtext( side=1, "Age", line=2, outer=TRUE ) mtext( side=2, "Mortality rate", line=2, outer=TRUE ) } \keyword{datasets} Epi/man/apc.fit.Rd0000644000175100001440000002626113051733720013403 0ustar hornikusers\name{apc.fit} \alias{apc.fit} \title{ Fit an Age-Period-Cohort model to tabular data. } \description{ Fits the classical five models to tabulated rate data (cases, person-years) classified by two of age, period, cohort: Age, Age-drift, Age-Period, Age-Cohort and Age-Period-Cohort. There are no assumptions about the age, period or cohort classes being of the same length, or that tabulation should be only by two of the variables. Only requires that mean age and period for each tabulation unit is given. } \usage{ apc.fit( data, A, P, D, Y, ref.c, ref.p, dist = c("poisson","binomial"), model = c("ns","bs","ls","factor"), dr.extr = "weighted", parm = c("ACP","APC","AdCP","AdPC","Ad-P-C","Ad-C-P","AC-P","AP-C"), npar = c( A=5, P=5, C=5 ), scale = 1, alpha = 0.05, print.AOV = TRUE ) } \arguments{ \item{data}{Data frame with (at least) variables, \code{A} (age), \code{P} (period), \code{D} (cases, deaths) and \code{Y} (person-years). Cohort (date of birth) is computed as \code{P-A}. If this argument is given the arguments \code{A}, \code{P}, \code{D} and \code{Y} are ignored.} \item{A}{Age; numerical vector with mean age at diagnosis for each unit.} \item{P}{Period; numerical vector with mean date of diagnosis for each unit.} \item{D}{Cases, deaths; numerical vector.} \item{Y}{Person-years; numerical vector. Also used as denominator for binomial data, see the \code{dist} argument.} \item{ref.c}{Reference cohort, numerical. Defaults to median date of birth among cases. If used with \code{parm="AdCP"} or \code{parm="AdPC"}, the residual cohort effects will be 1 at \code{ref.c}} \item{ref.p}{Reference period, numerical. Defaults to median date of diagnosis among cases.} \item{dist}{Distribution (or more precisely: Likelihood) used for modeling. if a binomial model us used, \code{Y} is assumed to be the denominator; \code{"binomial"} gives a binomial model with logit link.} \item{model}{Type of model fitted: \itemize{ \item \code{ns} fits a model with natural splines for each of the terms, with \code{npar} parameters for the terms. \item \code{bs} fits a model with B-splines for each of the terms, with \code{npar} parameters for the terms. \item \code{ls} fits a model with linear splines. \item \code{factor} fits a factor model with one parameter per value of \code{A}, \code{P} and \code{C}. \code{npar} is ignored in this case. } } \item{dr.extr}{Character or numeric. How the drift parameter should be extracted from the age-period-cohort model. Specifies the inner product used for definition of orthogonality of the period / cohort effects to the linear effects --- in terms of a diagonal matrix. \code{"weighted"} (or "t") (default) uses the no. cases, \code{D}, corresponding to the observed information about the log-rate (usually termed "theta", hence the "\code{t}"). \code{"r"} or \code{"l"} uses \code{Y*Y/D} corresponding to the observed information about the rate (usually termed "lambda", hence the "\code{l}"). \code{"y"} uses the person-years as the weight in the inner product. If given "\code{n}" (Naive) (well, in fact any other character value) will induce the use of the standard inner product putting equal weight on all units in the dataset. If given as a numeric vector this is used as the diagonal of the matrix inducing the inner product. The setting of this parameter has no effect on the fit of the model, only on the parametrization. } \item{parm}{Character. Indicates the parametrization of the effects. The first four refer to the ML-fit of the Age-Period-Cohort model, the last four give Age-effects from a smaller model and residuals relative to this. If one of the latter is chosen, the argument \code{dr.extr} is ignored. Possible values for \code{parm} are: \itemize{ \item \code{"ACP"}: ML-estimates. Age-effects as rates for the reference cohort. Cohort effects as RR relative to the reference cohort. Period effects constrained to be 0 on average with 0 slope. \item \code{"APC"}: ML-estimates. Age-effects as rates for the reference period. Period effects as RR relative to the reference period. Cohort effects constrained to be 0 on average with 0 slope. \item \code{"AdCP"}: ML-estimates. Age-effects as rates for the reference cohort. Cohort and period effects constrained to be 0 on average with 0 slope. In this case returned effects do not multiply to the fitted rates, the drift is missing and needs to be included to produce the fitted values. \item \code{"AdPC"}: ML-estimates. Age-effects as rates for the reference period. Cohort and period effects constrained to be 0 on average with 0 slope. In this case returned effects do not multiply to the fitted rates, the drift is missing and needs to be included to produce the fitted values. \item \code{"Ad-C-P"}: Age effects are rates for the reference cohort in the Age-drift model (cohort drift). Cohort effects are from the model with cohort alone, using log(fitted values) from the Age-drift model as offset. Period effects are from the model with period alone using log(fitted values) from the cohort model as offset. \item \code{"Ad-P-C"}: Age effects are rates for the reference period in the Age-drift model (period drift). Period effects are from the model with period alone, using log(fitted values) from the Age-drift model as offset. Cohort effects are from the model with cohort alone using log(fitted values) from the period model as offset. \item \code{"AC-P"}: Age effects are rates for the reference cohort in the Age-Cohort model, cohort effects are RR relative to the reference cohort. Period effects are from the model with period alone, using log(fitted values) from the Age-Cohort model as offset. \item \code{"AP-C"}: Age effects are rates for the reference period in the Age-Period model, period effects are RR relative to the reference period. Cohort effects are from the model with cohort alone, using log(fitted values) from the Age-Period model as offset. } } \item{npar}{The number of parameters/knots to use for each of the terms in the model. If it is vector of length 3, the numbers are taken as the no. of knots for Age, Period and Cohort, respectively. Unless it has a names attribute with vales "A", "P" and "C" in which case these will be used. The knots chosen are the quantiles \code{(1:nk-0.5)/nk} of the events (i.e. of \code{rep(A,D)}) \code{npar} may also be a named list of three numerical vectors with names "A", "P" and "C", in which case these taken as the knots for the age, period and cohort effect, the smallest and largest element in each vector are used as the boundary knots.} \item{alpha}{The significance level. Estimates are given with (1-\code{alpha}) confidence limits.} \item{scale}{numeric(1), factor multiplied to the rate estimates before output.} \item{print.AOV}{Should the analysis of deviance table for the models be printed?} } \value{ An object of class "apc" (recognized by \code{\link{apc.plot}} and \code{\link{apc.lines}}) --- a list with components: \item{Type}{Text describing the model and parametrization returned} \item{Model}{The model object(s) on which the parametrization is based.} \item{Age}{Matrix with 4 columns: \code{A.pt} with the ages (equals \code{unique(A)}) and three columns giving the estimated rates with c.i.s.} \item{Per}{Matrix with 4 columns: \code{P.pt} with the dates of diagnosis (equals \code{unique(P)}) and three columns giving the estimated RRs with c.i.s.} \item{Coh}{Matrix with 4 columns: \code{C.pt} with the dates of birth (equals \code{unique(P-A)}) and three columns giving the estimated RRs with c.i.s.} \item{Drift}{A 3 column matrix with drift-estimates and c.i.s: The first row is the ML-estimate of the drift (as defined by \code{drift}), the second row is the estimate from the Age-drift model. The first row name indicates which type of inner product were used for projections. For the sequential parametrizations, only the latter is given.} \item{Ref}{Numerical vector of length 2 with reference period and cohort. If ref.p or ref.c was not supplied the corresponding element is NA.} \item{AOV}{Analysis of deviance table comparing the five classical models.} \item{Type}{Character string explaining the model and the parametrization.} \item{Knots}{If \code{model} is one of \code{"ns"} or \code{"bs"}, a list with three components: \code{Age}, \code{Per}, \code{Coh}, each one a vector of knots. The max and the min are the boundary knots.} } \details{ Each record in the input data frame represents a subset of a Lexis diagram. The subsets need not be of equal length on the age and period axes, in fact there are no restrictions on the shape of these; they could be Lexis triangels for example. The requirement is that \code{A} and \code{P} are coded with the mean age and calendar time of observation in the subset. This is essential since \code{A} and \code{P} are used as quantitative variables in the models. This is a different approach relative to the vast majority of the uses of APC-models in the literature where a factor model is used for age, perido and cohort effects. The latter can be obtained by using \code{model="factor"}. } \references{ The considerations behind the parametrizations used in this function are given in details in: B. Carstensen: Age-Period-Cohort models for the Lexis diagram. Statistics in Medicine, 10; 26(15):3018-45, 2007. Various links to course material etc. is available through \url{http://BendixCarstensen.com/APC} } \author{ Bendix Carstensen, \url{http://BendixCarstensen.com} } \seealso{ \code{\link{LCa.fit}}, \code{\link{apc.frame}}, \code{\link{apc.lines}}, \code{\link{apc.plot}}. } \examples{ library( Epi ) data(lungDK) # Taylor a dataframe that meets the requirements exd <- lungDK[,c("Ax","Px","D","Y")] names(exd)[1:2] <- c("A","P") # Two different ways of parametrizing the APC-model, ML ex.H <- apc.fit( exd, npar=7, model="ns", dr.extr="Holford", parm="ACP", scale=10^5 ) ex.W <- apc.fit( exd, npar=7, model="ns", dr.extr="weighted", parm="ACP", scale=10^5 ) # Sequential fit, first AC, then P given AC. ex.S <- apc.fit( exd, npar=7, model="ns", parm="AC-P", scale=10^5 ) # Show the estimated drifts ex.H[["Drift"]] ex.W[["Drift"]] ex.S[["Drift"]] # Plot the effects fp <- apc.plot( ex.H ) apc.lines( ex.W, frame.par=fp, col="red" ) apc.lines( ex.S, frame.par=fp, col="blue" ) } \keyword{models} \keyword{regression}Epi/man/twoby2.Rd0000644000175100001440000000352413011073056013275 0ustar hornikusers\name{twoby2} \alias{twoby2} \title{Analysis of a two by two table} \description{ Computes the usual measures of association in a 2 by 2 table with confidence intervals. Also produces asymtotic and exact tests. Assumes that comparison of probability of the first column level between levels of the row variable is of interest. Output requires that the input matrix has meaningful row and column labels. } \usage{ twoby2(exposure, outcome, alpha = 0.05, print = TRUE, dec = 4, conf.level = 1-alpha, F.lim = 10000) } \arguments{ \item{exposure}{If a table the analysis is based on the first two rows and first two columns of this. If a variable, this variable is tabulated against} \item{outcome}{as the second variable} \item{alpha}{Significance level} \item{print}{Should the results be printed?} \item{dec}{Number of decimals in the printout.} \item{conf.level}{1-\code{alpha}} \item{F.lim}{If the table total exceeds \code{F.lim}, Fisher's exact test is not computed} } \value{A list with elements: \item{table}{The analysed 2 x 2 table augmented with probabilities and confidence intervals. The confidence intervals for the probabilities are computed using the normal approximation to the log-odds. Confidence intervals for the difference of proportions are computed using method 10 from Newcombe, Stat.Med. 1998, 17, pp.873 ff.} \item{measures}{A table of Odds-ratios and relative risk with confidence intervals.} \item{p.value}{Exact p-value for the null hypothesis of OR=1} } \author{ Mark Myatt. Modified by Bendix Carstensen. } \examples{ Treat <- sample(c("A","B"), 50, rep=TRUE ) Resp <- c("Yes","No")[1+rbinom(50,1,0.3+0.2*(Treat=="A"))] twoby2( Treat, Resp ) twoby2( table( Treat, Resp )[,2:1] ) # Comparison the other way round } \keyword{univar} \keyword{htest} Epi/man/Ns.Rd0000644000175100001440000001426013011073056012426 0ustar hornikusers\name{Ns} \alias{Ns} \title{ Natural splines - (cubic splines linear beyond outermost knots) with convenient specification of knots and possibility of centering, detrending and clamping. } \description{ This function is partly for convenient specification of natural splines in practical modeling. The convention used is to take the smallest and the largest of the supplied knots as boundary knots. It also has the option of centering the effects provided at a chosen reference point as well as projecting the columns on the orthogonal space to that spanned by the intercept and the linear effect of the variable, and finally fixing slopes beyond boundary knots (clamping). } \usage{ Ns( x, ref = NULL, df = NULL, knots = NULL, intercept = FALSE, Boundary.knots = NULL, fixsl = c(FALSE,FALSE), detrend = FALSE ) } \arguments{ \item{x}{A variable.} \item{ref}{Scalar. Reference point on the \code{x}-scale, where the resulting effect will be 0.} \item{df}{degrees of freedom.} \item{knots}{knots to be used both as boundary and internal knots. If \code{Boundary.knots} are given, this will be taken as the set of internal knots.} \item{intercept}{Should the intercept be included in the resulting basis? Ignored if any of \code{ref} or \code{detrend} is given.} \item{Boundary.knots}{The boundary knots beyond which the spline is linear. Defaults to the minimum and maximum of \code{knots}.} \item{fixsl}{Specification of whether slopes beyond outer knots should be fixed to 0. \code{FALSE} correponds to no restriction; a curve with 0 slope beyond the upper knot is obtained using \code{c(FALSE,TRUE)}. Ignored if \code{!(detrend==FALSE)}.} \item{detrend}{If \code{TRUE}, the columns of the spline basis will be projected to the orthogonal of \code{cbind(1,x)}. Optionally \code{detrend} can be given as a vector of non-negative numbers used to define an inner product as \code{diag(detrend)} for projection on the orthogonal to \code{cbind(1,x)}. The default is projection w.r.t. the inner product defined by the identity matrix.} } \value{ A matrix of dimension c(length(x),df) where either \code{df} was supplied or if \code{knots} were supplied, \code{df = length(knots) - intercept}. \code{Ns} returns a spline basis which is centered at \code{ref}. \code{Ns} with the argument \code{detrend=TRUE} returns a spline basis which is orthogonal to \code{cbind(1,x)} with respect to the inner product defined by the positive definite matrix \code{diag(weight)} (an assumption which is checked). } \author{ Bendix Carstensen \email{b@bxc.dk}, Lars Jorge D\'iaz, Steno Diabetes Center. } \note{ The need for this function is primarily from analysis of rates in epidemiology and demography, where the dataset are time-split records of follow-up, and the range of data therefore rarely is of any interest (let alone meaningful). In Poisson modeling of rates based on time-split records one should aim at having the same number of \emph{events} between knots, rather than the same number of observations. } \examples{ require(splines) require(stats) require(graphics) ns( women$height, df = 3) Ns( women$height, knots=c(63,59,71,67) ) # Gives the same results as ns: summary( lm(weight ~ ns(height, df = 3), data = women) ) summary( lm(weight ~ Ns(height, df = 3), data = women) ) # Get the diabetes data and set up as Lexis object data(DMlate) DMlate <- DMlate[sample(1:nrow(DMlate),500),] dml <- Lexis( entry = list(Per=dodm, Age=dodm-dobth, DMdur=0 ), exit = list(Per=dox), exit.status = factor(!is.na(dodth),labels=c("DM","Dead")), data = DMlate ) # Split follow-up in 1-year age intervals dms <- splitLexis( dml, time.scale="Age", breaks=0:100 ) summary( dms ) # Model age-specific rates using Ns with 6 knots # and period-specific RRs around 2000 with 4 knots # with the same number of deaths between each pair of knots n.kn <- 6 ( a.kn <- with( subset(dms,lex.Xst=="Dead"), quantile( Age+lex.dur, probs=(1:n.kn-0.5)/n.kn ) ) ) n.kn <- 4 ( p.kn <- with( subset( dms, lex.Xst=="Dead" ), quantile( Per+lex.dur, probs=(1:n.kn-0.5)/n.kn ) ) ) m1 <- glm( lex.Xst=="Dead" ~ Ns( Age, kn=a.kn ) + Ns( Per, kn=p.kn, ref=2000 ), offset = log( lex.dur ), family = poisson, data = dms ) # Plot estimated age-mortality curve for the year 2005 and knots chosen: nd <- data.frame( Age=seq(40,100,0.1), Per=2005, lex.dur=1000 ) par( mfrow=c(1,2) ) matplot( nd$Age, ci.pred( m1, newdata=nd ), type="l", lwd=c(3,1,1), lty=1, col="black", log="y", ylab="Mortality rates per 1000 PY", xlab="Age (years)", las=1, ylim=c(1,1000) ) rug( a.kn, lwd=2 ) # Clamped Age effect to the right of rightmost knot. m1.c <- glm( lex.Xst=="Dead" ~ Ns( Age, kn=a.kn, fixsl=c(FALSE,TRUE) ) + Ns( Per, kn=p.kn, ref=2000 ), offset = log( lex.dur ), family = poisson, data = dms ) # Plot estimated age-mortality curve for the year 2005 and knots chosen. matplot( nd$Age, ci.pred( m1.c, newdata=nd ), type="l", lwd=c(3,1,1), lty=1, col="black", log="y", ylab="Mortality rates per 1000 PY", xlab="Age (years)", las=1, ylim=c(1,1000) ) rug( a.kn, lwd=2 ) par( mfrow=c(1,1) ) # Including a linear Age effect of 0.05 to the right of rightmost knot. m1.l <- glm( lex.Xst=="Dead" ~ Ns( Age, kn=a.kn, fixsl=c(FALSE,TRUE) ) + Ns( Per, kn=p.kn, ref=2000 ), offset = log( lex.dur ) + pmax( Age, max( a.kn ) ) * 0.05, family = poisson, data = dms ) # Plot estimated age-mortality curve for the year 2005 and knots chosen. nd <- data.frame(Age=40:100,Per=2005,lex.dur=1000) matplot( nd$Age, ci.pred( m1.l, newdata=nd ), type="l", lwd=c(3,1,1), lty=1, col="black", log="y", ylab="Mortality rates per 1000 PY", xlab="Age (years)", las=1, ylim=c(1,1000) ) rug( a.kn, lwd=2 ) } \keyword{regression} Epi/man/apc.frame.Rd0000644000175100001440000001135113011073056013700 0ustar hornikusers\name{apc.frame} \alias{apc.frame} \title{ Produce an empty frame for display of parameter-estimates from Age-Period-Cohort-models. } \description{ A plot is generated where both the age-scale and the cohort/period scale is on the x-axis. The left vertical axis will be a logarithmic rate scale referring to age-effects and the right a logarithmic rate-ratio scale of the same relative extent as the left referring to the cohort and period effects (rate ratios). Only an empty plot frame is generated. Curves or points must be added with \code{points}, \code{lines} or the special utility function \code{\link{apc.lines}}. } \usage{ apc.frame( a.lab, cp.lab, r.lab, rr.lab = r.lab / rr.ref, rr.ref = r.lab[length(r.lab)/2], a.tic = a.lab, cp.tic = cp.lab, r.tic = r.lab, rr.tic = r.tic / rr.ref, tic.fac = 1.3, a.txt = "Age", cp.txt = "Calendar time", r.txt = "Rate per 100,000 person-years", rr.txt = "Rate ratio", ref.line = TRUE, gap = diff(range(c(a.lab, a.tic)))/10, col.grid = gray(0.85), sides = c(1,2,4) ) } \arguments{ \item{a.lab}{Numerical vector of labels for the age-axis.} \item{cp.lab}{Numerical vector of labels for the cohort-period axis.} \item{r.lab}{Numerical vector of labels for the rate-axis (left vertical)} \item{rr.lab}{Numerical vector of labels for the RR-axis (right vertical)} \item{rr.ref}{At what level of the rate scale is the RR=1 to be.} \item{a.tic}{Location of additional tick marks on the age-scale} \item{cp.tic}{Location of additional tick marks on the cohort-period-scale} \item{r.tic}{Location of additional tick marks on the rate-scale} \item{rr.tic}{Location of additional tick marks on the RR-axis.} \item{tic.fac}{Factor with which to diminish intermediate tick marks} \item{a.txt}{Text for the age-axis (left part of horizontal axis).} \item{cp.txt}{Text for the cohort/period axis (right part of horizontal axis).} \item{r.txt}{Text for the rate axis (left vertical axis).} \item{rr.txt}{Text for the rate-ratio axis (right vertical axis)} \item{ref.line}{Logical. Should a reference line at RR=1 be drawn at the calendar time part of the plot?} \item{gap}{Gap between the age-scale and the cohort-period scale} \item{col.grid}{Colour of the grid put in the plot.} \item{sides}{Numerical vector indicating on which sides axes should be drawn and annotated. This option is aimed for multi-panel displays where axes only are put on the outer plots.} } \details{ The function produces an empty plot frame for display of results from an age-period-cohort model, with age-specific rates in the left side of the frame and cohort and period rate-ratio parameters in the right side of the frame. There is a gap of \code{gap} between the age-axis and the calendar time axis, vertical grid lines at \code{c(a.lab,a.tic,cp.lab,cp.tic)}, and horizontal grid lines at \code{c(r.lab,r.tic)}. The function returns a numerical vector of length 2, with names \code{c("cp.offset","RR.fac")}. The y-axis for the plot will be a rate scale for the age-effects, and the x-axis will be the age-scale. The cohort and period effects are plotted by subtracting the first element (named \code{"cp.offset"}) of the returned result form the cohort/period, and multiplying the rate-ratios by the second element of the returned result (named \code{"RR.fac"}). } \value{ A numerical vector of length two, with names \code{c("cp.offset","RR.fac")}. The first is the offset for the cohort period-axis, the second the multiplication factor for the rate-ratio scale. Side-effect: A plot with axes and grid lines but no points or curves. Moreover, the option \code{apc.frame.par} is given the value \code{c("cp.offset","RR.fac")}, which is recognized by \code{\link{apc.plot}} and \code{\link{apc.lines}}. } \references{ B. Carstensen: Age-Period-Cohort models for the Lexis diagram. Statistics in Medicine, 26: 3018-3045, 2007. } \author{ Bendix Carstensen, Steno Diabetes Center, \url{http://BendixCarstensen.com} } \examples{ par( mar=c(4,4,1,4) ) res <- apc.frame( a.lab=seq(30,90,20), cp.lab=seq(1880,2000,30), r.lab=c(1,2,5,10,20,50), a.tic=seq(30,90,10), cp.tic=seq(1880,2000,10), r.tic=c(1:10,1:5*10), gap=27 ) res # What are the axes actually? par(c("usr","xlog","ylog")) # How to plot in the age-part: a point at (50,10) points( 50, 10, pch=16, cex=2, col="blue" ) # How to plot in the cohort-period-part: a point at (1960,0.3) points( 1960-res[1], 0.3*res[2], pch=16, cex=2, col="red" ) } \seealso{ \code{\link{apc.lines},\link{apc.fit}} } \keyword{hplot} Epi/man/mortDK.Rd0000644000175100001440000000301213011073056013237 0ustar hornikusers\name{mortDK} \alias{mortDK} \docType{data} \title{Population mortality rates for Denmark in 1-year age-classes.} \description{ The \code{mortDK} data frame has 1820 rows and 21 columns. } \format{ This data frame contains the following columns: \tabular{rl}{ \code{age}: \tab Age class, 0--89, 90:90+. \cr \code{per}: \tab Calendar period, 38: 1938--42, 43: 1943--47, ..., 88:1988-92. \cr \code{sex}: \tab Sex, 1: male, 2: female. \cr \code{risk}: \tab Number of person-years in the Danish population. \cr \code{dt}: \tab Number of deaths. \cr \code{rt}: \tab Overall mortality rate in cases per 1000 person-years, i.e. \code{rt=1000*dt/risk} \cr \tab Cause-specific mortality rates in cases per 1000 person-years: \cr \code{r1}: \tab Infections \cr \code{r2}: \tab Cancer. \cr \code{r3}: \tab Tumors, benign, unspecific nature. \cr \code{r4}: \tab Endocrine, metabolic. \cr \code{r5}: \tab Blood. \cr \code{r6}: \tab Nervous system, psychiatric. \cr \code{r7}: \tab Cerebrovascular. \cr \code{r8}: \tab Cardiac. \cr \code{r9}: \tab Respiratory diseases, excl. cancer. \cr \code{r10}: \tab Liver, excl. cancer. \cr \code{r11}: \tab Digestive, other. \cr \code{r12}: \tab Genitourinary. \cr \code{r13}: \tab Ill-defined symptoms. \cr \code{r14}: \tab All other, natural. \cr \code{r15}: \tab Violent. \cr } } \source{ Statistics Denmark, National board of health provided original data. Michael Andersson grouped the causes of death. } \examples{ data(mortDK) } \seealso{\code{\link{thoro}}, \code{\link{gmortDK}}} \keyword{datasets} Epi/man/NArray.Rd0000644000175100001440000000207413011073056013242 0ustar hornikusers\name{NArray} \alias{NArray} \alias{ZArray} \title{Set up an array of NAs, solely from the list of dimnames } \description{Defines an array of NAs, solely from the list of dimnames } \usage{ NArray( x, cells=NA ) ZArray( x, cells=0 ) } \arguments{ \item{x}{A (possibly named) list to be used as dimnames for the resulting array} \item{cells}{Value(s) to fill the array} } \details{This is a simple useful way of defining arrays to be used for collection of results. The point is that everything is defined from the named list, so in the process of defining what you want to collect, there is only one place in the program to edit. It's just a wrapper for \code{array}. \code{ZArray} is just a wrapper for \code{NArray} with a different default. } \value{An array with \code{dimnames} attribute \code{x}, and all values equal to \code{cells}. } \author{Bendix Carstensen } \examples{ ftable( NArray( list(Aye = c("Yes", "Si", "Oui"), Bee = c("Hum", "Buzz"), Sea = c("White", "Black", "Red", "Dead") ) ) ) }Epi/man/rateplot.Rd0000644000175100001440000001723013011073056013700 0ustar hornikusers\name{rateplot} \alias{rateplot} \alias{Aplot} \alias{Pplot} \alias{Cplot} \title{ Functions to plot rates from a table classified by age and calendar time (period) } \description{ Produces plots of rates versus age, connected within period or cohort (\code{Aplot}), rates versus period connected within age-groups (\code{Pplot}) and rates and rates versus date of birth cohort (\code{Cplot}). \code{rateplot} is a wrapper for these, allowing to produce the four classical displays with a single call. } \usage{ rateplot( rates, which = c("ap","ac","pa","ca"), age = as.numeric( dimnames( rates )[[1]] ), per = as.numeric( dimnames( rates )[[2]] ), grid = FALSE, a.grid = grid, p.grid = grid, c.grid = grid, ygrid = grid, col.grid = gray( 0.9 ), a.lim = range( age, na.rm=TRUE ) + c(0,diff( range( age ) )/30), p.lim = range( per, na.rm=TRUE ) + c(0,diff( range( age ) )/30), c.lim = NULL, ylim = range( rates[rates>0], na.rm=TRUE ), at = NULL, labels = paste( at ), a.lab = "Age at diagnosis", p.lab = "Date of diagnosis", c.lab = "Date of birth", ylab = "Rates", type = "l", lwd = 2, lty = 1, log.ax = "y", las = 1, ann = FALSE, a.ann = ann, p.ann = ann, c.ann = ann, xannx = 1/20, cex.ann = 0.8, a.thin = seq( 1, length( age ), 2 ), p.thin = seq( 1, length( per ), 2 ), c.thin = seq( 2, length( age ) + length( per ) - 1, 2 ), col = par( "fg" ), a.col = col, p.col = col, c.col = col, ... ) Aplot( rates, age = as.numeric( dimnames( rates )[[1]] ), per = as.numeric( dimnames( rates )[[2]] ), grid = FALSE, a.grid = grid, ygrid = grid, col.grid = gray( 0.9 ), a.lim = range( age, na.rm=TRUE ), ylim = range( rates[rates>0], na.rm=TRUE ), at = NULL, labels = paste( at ), a.lab = names( dimnames( rates ) )[1], ylab = deparse( substitute( rates ) ), type = "l", lwd = 2, lty = 1, col = par( "fg" ), log.ax = "y", las = 1, c.col = col, p.col = col, c.ann = FALSE, p.ann = FALSE, xannx = 1/20, cex.ann = 0.8, c.thin = seq( 2, length( age ) + length( per ) - 1, 2 ), p.thin = seq( 1, length( per ), 2 ), p.lines = TRUE, c.lines = !p.lines, ... ) Pplot( rates, age = as.numeric( dimnames( rates )[[1]] ), per = as.numeric( dimnames( rates )[[2]] ), grid = FALSE, p.grid = grid, ygrid = grid, col.grid = gray( 0.9 ), p.lim = range( per, na.rm=TRUE ) + c(0,diff(range(per))/30), ylim = range( rates[rates>0], na.rm=TRUE ), p.lab = names( dimnames( rates ) )[2], ylab = deparse( substitute( rates ) ), at = NULL, labels = paste( at ), type = "l", lwd = 2, lty = 1, col = par( "fg" ), log.ax = "y", las = 1, ann = FALSE, cex.ann = 0.8, xannx = 1/20, a.thin = seq( 1, length( age ), 2 ), ... ) Cplot( rates, age = as.numeric( rownames( rates ) ), per = as.numeric( colnames( rates ) ), grid = FALSE, c.grid = grid, ygrid = grid, col.grid = gray( 0.9 ), c.lim = NULL, ylim = range( rates[rates>0], na.rm=TRUE ), at = NULL, labels = paste( at ), c.lab = names( dimnames( rates ) )[2], ylab = deparse( substitute( rates ) ), type = "l", lwd = 2, lty = 1, col = par( "fg" ), log.ax = "y", las = 1, xannx = 1/20, ann = FALSE, cex.ann = 0.8, a.thin = seq( 1, length( age ), 2 ), ... ) } \arguments{ \item{rates}{A two-dimensional table (or array) with rates to be plotted. It is assumed that the first dimension is age and the second is period.} \item{which}{A character vector with elements from \code{c("ap","ac","apc","pa","ca")}, indication which plots should be produced. One plot per element is produced. The first letter indicates the x-axis of the plot, the remaining which groups should be connected, i.e. \code{"pa"} will plot rates versus period and connect age-classes, and \code{"apc"} will plot rates versus age, and connect both periods and cohorts.} \item{age}{Numerical vector giving the means of the age-classes. Defaults to the rownames of \code{rates} as numeric.} \item{per}{Numerical vector giving the means of the periods. Defaults to the columnnames of \code{rates} as numeric.} \item{grid}{Logical indicating whether a background grid should be drawn.} \item{a.grid}{Logical indicating whether a background grid on the age-axis should be drawn. If numerical it indicates the age-coordinates of the grid.} \item{p.grid}{do. for the period.} \item{c.grid}{do. for the cohort.} \item{ygrid}{do. for the rate-dimension.} \item{col.grid}{The colour of the grid.} \item{a.lim}{Range for the age-axis.} \item{p.lim}{Range for the period-axis.} \item{c.lim}{Range for the cohort-axis.} \item{ylim}{Range for the y-axis (rates).} \item{at}{Position of labels on the y-axis (rates).} \item{labels}{Labels to put on the y-axis (rates).} \item{a.lab}{Text on the age-axis. Defaults to "Age".} \item{p.lab}{Text on the period-axis. Defaults to "Date of diagnosis".} \item{c.lab}{Text on the cohort-axis. Defaults to "Date of birth".} \item{ylab}{Text on the rate-axis. Defaults to the name of the rate-table.} \item{type}{How should the curves be plotted. Defaults to \code{"l"}.} \item{lwd}{Width of the lines. Defaults to 2.} \item{lty}{Which type of lines should be used. Defaults to 1, a solid line.} \item{log.ax}{Character with letters from \code{"apcyr"}, indicating which axes should be logarithmic. \code{"y"} and \code{"r"} both refer to the rate scale. Defaults to \code{"y"}.} \item{las}{see \code{par}.} \item{ann}{Should the curves be annotated?} \item{a.ann}{Logical indicating whether age-curves should be annotated.} \item{p.ann}{do. for period-curves.} \item{c.ann}{do. for cohort-curves.} \item{xannx}{The fraction that the x-axis is expanded when curves are annotated.} \item{cex.ann}{Expansion factor for characters annotating curves.} \item{a.thin}{Vector of integers indicating which of the age-classes should be labelled.} \item{p.thin}{do. for the periods.} \item{c.thin}{do. for the cohorts.} \item{col}{Colours for the curves.} \item{a.col}{Colours for the age-curves.} \item{p.col}{do. for the period-curves.} \item{c.col}{do. for the cohort-curves.} \item{p.lines}{Should rates from the same period be connected?} \item{c.lines}{Should rates from the same cohort be connected?} \item{...}{Additional arguments pssed on to \code{matlines} when plotting the curves.} } \details{ Zero values of the rates are ignored. They are neiter in the plot nor in the calculation of the axis ranges. } \value{ \code{NULL}. The function is used for its side-effect, the plot. } \author{ Bendix Carstensen, Steno Diabetes Center, \url{http://BendixCarstensen.com} } \seealso{ \code{\link{apc.frame}} } \examples{ data( blcaIT ) attach(blcaIT) # Table of rates: bl.rate <- tapply( D, list(age,period), sum ) / tapply( Y, list(age,period), sum ) bl.rate # The four classical plots: par( mfrow=c(2,2) ) rateplot( bl.rate*10^6 ) # The labels on the vertical axis could be nicer: rateplot( bl.rate*10^6, at=10^(-1:3), labels=c(0.1,1,10,100,1000) ) # More bells an whistles par( mfrow=c(1,3), mar=c(3,3,1,1), oma=c(0,3,0,0), mgp=c(3,1,0)/1.6 ) rateplot( bl.rate*10^6, ylab="", ann=TRUE, which=c("AC","PA","CA"), at=10^(-1:3), labels=c(0.1,1,10,100,1000), col=topo.colors(11), cex.ann=1.2 ) } \keyword{hplot} Epi/man/contr.cum.Rd0000644000175100001440000000306213011073056013754 0ustar hornikusers\name{contr.cum} \alias{contr.cum} \alias{contr.2nd} \alias{contr.diff} \alias{contr.orth} \title{ Contrast matrices } \description{ Return a matrix of contrasts for factor coding. } \usage{ contr.cum(n) contr.diff(n) contr.2nd(n) contr.orth(n) } \arguments{ \item{n}{A vector of levels for a factor, or the number of levels.} } \details{ These functions are used for creating contrast matrices for use in fitting regression models. The columns of the resulting matrices contain contrasts which can be used for coding a factor with \code{n} levels. \code{contr.cum} gives a coding corresponding to successive differences between factor levels. \code{contr.diff} gives a coding that correspond to the cumulative sum of the value for each level. This is not meaningful in a model where the intercept is included, therefore \code{n} columns ia always returned. \code{contr.2nd} gives contrasts corresponding to 2nd order differences between factor levels. Returns a matrix with \code{n-2} columns. \code{contr.orth} gives a matrix with \code{n-2} columns, which are mutually orthogonal and orthogonal to the matrix \code{cbind(1,1:n)} } \value{ A matrix with \code{n} rows and \code{k} columns, with \code{k}=\code{n} for \code{contr.diff} \code{k}=\code{n-1} for \code{contr.cum} \code{k}=\code{n-2} for \code{contr.2nd} and \code{contr.orth}. } \author{Bendix Carstensen} \seealso{ \code{\link{contr.treatment}} } \examples{ contr.cum(6) contr.2nd(6) contr.diff(6) contr.orth(6) } \keyword{design} \keyword{models} Epi/man/summary.Lexis.rd0000644000175100001440000000521513051733746014703 0ustar hornikusers\name{summary.Lexis} \alias{summary.Lexis} \alias{print.summary.Lexis} \title{ Summarize transitions and risk time from a Lexis object } \description{ A two-way table of records and transitions classified by states (\code{lex.Cst} and \code{lex.Xst}), as well the risk time in each state. } \usage{ \method{summary}{Lexis}( object, simplify=TRUE, scale=1, by=NULL, Rates=FALSE, timeScales=FALSE, ... ) \method{print}{summary.Lexis}( x, ..., digits=2 ) } \arguments{ \item{object}{A Lexis object.} \item{simplify}{Should rows with 0 follow-up time be dropped?} \item{scale}{Scaling factor for the rates. The calculated rates are multiplied by this number.} \item{by}{Character vector of name(s) of variable(s) in \code{object}. Used to give a separate summaries for subsets of \code{object}. If longer than than 1, the interaction between that variables is used to stratify the summary. It is also possible to supply a vector of length \code{nrow(object)}, and the distinct values of this will be used to stratify the summary.} \item{Rates}{Should a component with transition rates be returned (and printed) too?} \item{timeScales}{Should the names of the timescales and the indication of since which entry also be given?} \item{x}{A \code{summary.Lexis} object.} \item{digits}{How many digits should be used for printing?} \item{ ... }{Other parameters - ignored} } \value{ An object of class \code{summary.Lexis}, a list with two components, \code{Transitions} and \code{Rates}, each one a matrix with rows classified by states where persons spent time, and columns classified by states to which persons transit. The \code{Transitions} contains number of transitions and has 4 extra columns with number of records, total number of events, total risk time and number of person contributing attached. The \code{Rates} contains the transitions rates. If the argument \code{Rates} is FALSE (the default), then only the first component of the list is returned. } \author{ Bendix Carstensen, \url{http://BendixCarstensen.com} } \examples{ data( nickel ) # Lung cancer deaths and other deaths are coded 1 and 2 nic <- Lexis( data=nickel, entry=list(age=agein), exit=list(age=ageout,cal=ageout+dob,tfh=ageout-age1st), exit.status=factor( (icd > 0) + (icd \%in\% c(162,163)), labels=c("Alive","Other","Lung") ) ) str( nic ) head( nic ) summary( nic ) # More detailed summary, by exposure level summary( nic, by=nic$exposure>5, Rates=TRUE, scale=100 ) } \keyword{survival}Epi/man/DMconv.Rd0000644000175100001440000000217613011073056013237 0ustar hornikusers\name{DMconv} \alias{DMconv} \docType{data} \title{Conversion to diabetes} \description{ Data from a randomized intervention study ("Addition") where persons with prediabetic conditions are followed up for conversion to diabetes (DM). Conversion dates are interval censored. Original data are not published yet, so id-numbers have been changed and all dates have been randomly perturbed. } \usage{data(DMconv)} \format{ A data frame with 1519 observations on the following 6 variables. \describe{ \item{\code{id}}{Person identifier} \item{\code{doe}}{Date of entry, i.e. first visit.} \item{\code{dlw}}{Date last seen well, i.e. last visit without DM.} \item{\code{dfi}}{Date first seen ill, i.e. first visit with DM.} \item{\code{gtol}}{Glucose tolerance. Factor with levels: 1="IFG" (impaired fasting glucose), 2="IGT" (impaired glucose tolerance).} \item{\code{grp}}{Randomization. Factor with levels: 1="Intervention", 2="Control".} } } \source{ Signe Saetre Rasmussen, Steno Diabetes Center. The Addition Study. } \examples{ data(DMconv) str(DMconv) head(DMconv) } \keyword{datasets} Epi/man/DMepi.Rd0000644000175100001440000000302213051454131013037 0ustar hornikusers\name{DMepi} \alias{DMepi} \docType{data} \title{Epidmiological rates for diabetes in Denmark 1996--2015} \description{Register based counts and person-uears for incidece of diabetes and mortality with and without diabetes. } \usage{data("DMepi")} \format{ A data frame with 4000 observations on the following 8 variables. \describe{ \item{\code{sex}}{a factor with levels \code{M} \code{F}} \item{\code{A}}{Age glass 0 -- 99} \item{\code{P}}{Calendar year, 1996-2015} \item{\code{X}}{Number of new diagnoses of diabetes} \item{\code{D.nD}}{Number of deaths among persons without diabetes} \item{\code{Y.nD}}{Person-years among persons without diabetes} \item{\code{D.DM}}{Number of deaths among persons with diabetes} \item{\code{Y.DM}}{Person-years among persons with diabetes} } } \details{Based on registers of the Danish population. Only included for illustrative purposes. Cannot be used as scientifically validaed data. } \examples{ data(DMepi) # Total deaths and person-years in the Danish population ftable( addmargins( xtabs( cbind( Deaths=D.nD+D.DM, PYrs=Y.nD+Y.DM ) ~ P + sex, data=DMepi ), 2 ), row.vars = 1 ) # Deaths and person-years in the population of diabetes patients round( ftable( addmargins( xtabs( cbind( Deaths=D.DM, PYrs=Y.DM ) ~ P + sex, data=DMepi ), 2 ), row.vars = 1 ) ) } \keyword{datasets} Epi/man/lgrep.Rd0000644000175100001440000000216713100327032013155 0ustar hornikusers\name{lgrep} \alias{fgrep} \alias{ngrep} \alias{lgrep} \title{ Convenience versions of grep } \description{ Often you want the elements of a vector (or its names or levels) that meet a certain pattern. But \code{grep} only gives you the position, so these functions are designed to give you that. } \usage{ fgrep( pattern, x, ... ) ngrep( pattern, x, ... ) lgrep( pattern, x, ... ) } \arguments{ \item{pattern}{Pattern searched for.} \item{x}{Object where \code{pattern} is searched. Or in whose \code{names} or \code{levels} attributes \code{pattern} is sought.} \item{...}{Arguments passed on to \code{\link[base]{grep}}.} } \value{Elements of the input \code{x} (\code{fgrep}) or its names attribute (\code{ngrep}) or levels attribute (\code{lgrep}). } \author{Bendix Carstensen, \email{b@bxc.dk}, \url{www.bxc.dk} } \seealso{\code{\link{grep}}} \examples{ ff <- factor( ll <- paste( sample( letters[1:3], 20, replace=TRUE ), sample( letters[1:3], 20, replace=TRUE ), sep="" ) ) ff fgrep( "a", ff ) fgrep( "a", ll ) ngrep( "a", ff ) lgrep( "a", ff ) lgrep( "a", ff, invert=TRUE ) } \keyword{ manip } Epi/man/merge.data.frame.Rd0000644000175100001440000000124613011073056015146 0ustar hornikusers\name{merge.data.frame} \alias{merge.data.frame} \title{Merge data frame with a Lexis object} \description{ Merge two data frames, or a data frame with a \code{Lexis} object. } \usage{ \method{merge}{data.frame}(x, y, ...) } \arguments{ \item{x, y}{data frames, or objects to be coerced into one} \item{...}{optional arguments for the merge method} } \details{ This version of \code{merge.default} masks the one in the \code{base}. It ensures that, if either \code{x} or \code{y} is a \code{Lexis} object, then \code{merge.Lexis} is called. } \value{ A merged \code{Lexis} object or data frame. } \author{Martyn Plummer} \seealso{\code{\link{Lexis}}} \keyword{ts} Epi/man/Relevel.Rd0000644000175100001440000000245313011073056013445 0ustar hornikusers\name{Relevel} \alias{Relevel} \alias{Relevel.factor} \title{Reorder and combine levels of a factor} \description{ The levels of a factor are re-ordered so that the levels specified by \code{ref} is first and the others are moved down. This is useful for \code{contr.treatment} contrasts which take the first level as the reference. Levels may also be combined. } \usage{ \method{Relevel}{factor}( x, ref, first = TRUE, collapse="+", \dots ) } \arguments{ \item{x}{An unordered factor} \item{ref}{The names or numbers of levels to be the first. If \code{ref} is a list, factor levels mentioned in each list element are combined. If the list is named the names are used as new factor levels.} \item{first}{Should the levels mentioned in ref come before those not?} \item{collapse}{String used when collapsing factor levels.} \item{\dots}{Arguments passed on to other methods.} } \value{ An unordered factor, where levels of \code{x} have been reordered and/or collapsed. } \author{Bendix Carstensen, \url{BendixCarstensen.com}.} \seealso{\code{\link{Relevel.Lexis}}} \examples{ ff <- factor( sample( letters[1:5], 100, replace=TRUE ) ) table( ff, Relevel( ff, list( AB=1:2, "Dee"=4, c(3,5) ) ) ) table( ff, rr=Relevel( ff, list( 5:4, Z=c("c","a") ), coll="-und-", first=FALSE ) ) } \keyword{manip} Epi/man/ci.lin.Rd0000644000175100001440000002013213110076570013221 0ustar hornikusers\name{ci.lin} \alias{ci.lin} \alias{ci.mat} \alias{ci.exp} \alias{ci.pred} \alias{ci.ratio} \alias{Wald} \title{ Compute linear functions of parameters with standard errors and confidence limits } \description{ For a given model object the function computes a linear function of the parameters and the corresponding standard errors, p-values and confidence intervals. } \usage{ ci.lin( obj, ctr.mat = NULL, subset = NULL, subint = NULL, diffs = FALSE, fnam = !diffs, vcov = FALSE, alpha = 0.05, df = Inf, Exp = FALSE, sample = FALSE ) ci.exp( ..., Exp = TRUE, pval=FALSE ) Wald( obj, H0=0, ... ) ci.mat( alpha = 0.05, df = Inf ) ci.pred( obj, newdata, Exp = NULL, alpha = 0.05 ) ci.ratio( r1, r2, se1 = NULL, se2 = NULL, log.tr = !is.null(se1) & !is.null(se2), alpha = 0.05, pval = FALSE ) } \arguments{ \item{obj}{A model object (of class \code{lm}, \code{glm}, \code{coxph}, \code{survreg}, \code{clogistic}, \code{cch}, \code{lme}, \code{mer}, \code{lmerMod}, \code{gls}, \code{nls}, \code{gnlm}, \code{MIresult}, \code{mipo}, \code{polr}, or \code{rq}). } \item{ctr.mat}{Contrast matrix to be multiplied to the parameter vector, i.e. the desired linear function of the parameters.} \item{subset}{The subset of the parameters to be used. If given as a character vector, the elements are in turn matched against the parameter names (using \code{grep}) to find the subset. Repeat parameters may result from using a character vector. This is considered a facility.} \item{subint}{\code{sub}set selection like for \code{subset}, except that elements of a character vector given as argument will be used to select a number of subsets of parameters and only the \code{int}ersection of these is returned.} \item{diffs}{If TRUE, all differences between parameters in the subset are computed. \code{ctr.mat} is ignored. If \code{obj} inherits from \code{lm}, and \code{subset} is given as a string \code{subset} is used to search among the factors in the model and differences of all factor levels for the first match are shown. If \code{subset} does not match any of the factors in the model, all pairwise differences between parameters matching are returned.} \item{fnam}{Should the common part of the parameter names be included with the annotation of contrasts? Ignored if \code{diffs==T}. If a sting is supplied this will be prefixed to the labels.} \item{vcov}{Should the covariance matrix of the set of parameters be returned? If this is set, \code{Exp} is ignored. See details.} \item{alpha}{Significance level for the confidence intervals.} \item{df}{Integer. Number of degrees of freedom in the t-distribution used to compute the quantiles used to construct the confidence intervals.} \item{Exp}{If \code{TRUE} columns 5:6 are replaced with exp( columns 1,5,6 ). For \code{ci.pred} it indicates whether the predictions should be exponentiated - the default is to make a prediction on the scale of the linear predictor and transform it by the inverse link function; if FALSE, the prediction on the link scale is returned.} \item{sample}{Logical or numerical. If \code{TRUE} or numerical a sample of size \code{as.numeric(sample)} is drawn from the multivariate normal with mean equal to the (\code{subset} defined) coefficients and variance equal to the estimated variance-covariance of these. These are then transformed by \code{ctr.mat} and returned.} \item{pval}{Logical. Should a column of P-values be included with the estimates and confidence intervals output by \code{ci.exp}.} \item{H0}{Numeric. The null values for the selected/transformed parameters to be tested by a Wald test. Must have the same length as the selected parameter vector.} \item{\ldots}{Parameters passed on to \code{ci.lin}.} \item{newdata}{Data frame of covariates where prediction is made.} \item{r1,r2}{Estimates of rates in two independent groups, with confidence intervals.} \item{se1,se2}{Standard errors of log-rates in the two groups. If given, it is assumed that \code{r1} and \code{r2} represent log-rates.} \item{log.tr}{Logical, if true, it is assumed that \code{r1} and \code{r2} represent log-rates with confidence intervals.} } \value{ \code{ci.lin} returns a matrix with number of rows and row names as \code{ctr.mat}. The columns are Estimate, Std.Err, z, P, 2.5\% and 97.5\% (or according to the value of \code{alpha}). If \code{vcov=TRUE} a list with components \code{est}, the desired functional of the parameters and \code{vcov}, the variance covariance matrix of this, is returned but not printed. If \code{Exp==TRUE} the confidence intervals for the parameters are replaced with three columns: exp(estimate,c.i.). \code{ci.exp} returns only the exponentiated parameter estimates with confidence intervals. It is merely a wrapper for \code{ci.lin}, fishing out the last 3 columns from \code{ci.lin(...,Exp=TRUE)}. If you just want the estimates and confidence limits, but not exponentiated, use \code{ci.exp(...,Exp=FALSE)}. \code{Wald} computes a Wald test for a subset of (possibly linear combinations of) parameters being equal to the vector of null values as given by \code{H0}. The selection of the subset of parameters is the same as for \code{ci.lin}. Using the \code{ctr.mat} argument makes it possible to do a Wald test for equality of parameters. \code{Wald} returns a named numerical vector of length 3, with names \code{Chisq}, \code{d.f.} and \code{P}. \code{ci.mat} returns a 2 by 3 matrix with rows \code{c(1,0,0)} and \code{c(0,-1,1)*1.96}, devised to post-multiply to a p by 2 matrix with columns of estimates and standard errors, so as to produce a p by 3 matrix of estimates and confidence limits. Used internally in \code{ci.lin} and \code{ci.cum}. The 1.96 is replaced by the appropriate quantile from the normal or t-distribution when arguments \code{alpha} and/or \code{df} are given. \code{ci.pred} returns a 3-column matrix with estimates and upper and lower confidence intervals as columns. This is just a convenience wrapper for \code{predict.glm(obj,se.fit=TRUE)} which returns a rather unhandy structure. The prediction with c.i. is made in the \code{link} scale, and by default transformed by the inverse link, since the most common use for this is for multiplicative Poisson or binomial models with either log or logit link. \code{ci.ratio} returns the rate-ratio of two independent set of rates given with confidence intervals or s.e.s. If \code{se1} and \code{se2} are given and \code{log.tr=FALSE} it is assumed that \code{r1} and \code{r2} are rates and \code{se1} and \code{se2} are standard errors of the log-rates. } \author{ Bendix Carstensen, \url{BendixCarstensen.com} & Michael Hills } \seealso{See also \code{\link{ci.cum}} for a function computing cumulative sums of (functions of) parameter estimates.} \examples{ # Bogus data: f <- factor( sample( letters[1:5], 200, replace=TRUE ) ) g <- factor( sample( letters[1:3], 200, replace=TRUE ) ) x <- rnorm( 200 ) y <- 7 + as.integer( f ) * 3 + 2 * x + 1.7 * rnorm( 200 ) # Fit a simple model: mm <- lm( y ~ x + f + g ) ci.lin( mm ) ci.lin( mm, subset=3:6, diff=TRUE, fnam=FALSE ) ci.lin( mm, subset=3:6, diff=TRUE, fnam=TRUE ) ci.lin( mm, subset="f", diff=TRUE, fnam="f levels:" ) print( ci.lin( mm, subset="g", diff=TRUE, fnam="gee!:", vcov=TRUE ) ) # Use character defined subset to get ALL contrasts: ci.lin( mm, subset="f", diff=TRUE ) # A Wald test of whether the g-parameters are 0 Wald( mm, subset="g" ) # Wald test of whether the three first f-parameters are equal: ( CM <- rbind( c(1,-1,0,0), c(1,0,-1,0)) ) Wald( mm, subset="f", ctr.mat=CM ) # or alternatively ( CM <- rbind( c(1,-1,0,0), c(0,1,-1,0)) ) Wald( mm, subset="f", ctr.mat=CM ) # Confidnece intervas for ratio of rates ci.ratio( cbind(10,8,12.5), cbind(5,4,6.25) ) ci.ratio( cbind(8,12.5), cbind(4,6.25) ) } \keyword{models} \keyword{regression} Epi/man/fit.baseline.rd0000644000175100001440000000162012531361107014450 0ustar hornikusers\name{fit.baseline} \alias{fit.baseline} \title{ Fit a piecewise contsnt intesity model for interval censored data. } \description{ Utility function Fits a binomial model with logaritmic link, with \code{y} as outcome and covariates in \code{rates.frame} to estimate rates in the inttervals between \code{breaks}. } \usage{ fit.baseline( y, rates.frame, start ) } \arguments{ \item{y}{Binary vector of outcomes} \item{rates.frame}{Dataframe expanded from the original data by \code{\link{expand.data}}} \item{start}{Starting values for the rate parameters. If not supplied, then starting values are generated.} } \value{ A \code{\link{glm}} object, with binomial error and logaritmic link. } \author{ Martyn Plummer, \email{plummer@iarc.fr} } \seealso{ \code{\link{fit.add}} \code{\link{fit.mult}} } \keyword{ models } \keyword{ regression } \keyword{ survival } Epi/man/plot.apc.Rd0000644000175100001440000000342313011073056013565 0ustar hornikusers\name{plot.apc} \alias{plot.apc} \alias{apc.plot} \title{Plot the estimates from a fitted Age-Period-Cohort model} \description{ This function plots the estimates created by \code{\link{apc.fit}} in a single graph. It just calls \code{\link{apc.frame}} after computing some sensible values of the parameters, and subsequently plots the estimates using \code{\link{apc.lines}}. } \usage{ \method{plot}{apc}( x, r.txt="Rate", ...) apc.plot( x, r.txt="Rate", ...) } \arguments{ \item{x}{ An object of class \code{apc}. } \item{r.txt}{ The text to put on the vertical rate axis. } \item{\dots}{ Additional arguments passed on to \code{\link{apc.lines}}. } } \value{ A numerical vector of length two, with names \code{c("cp.offset","RR.fac")}. The first is the offset for the cohort period-axis, the second the multiplication factor for the rate-ratio scale. Therefore, if you want to plot at \code{(x,y)} in the right panel, use \code{(x-res["cp.offset"],y/res["RR.fac"])} \code{=(x-res[1],y/res[2])}. This vector should be supplied for the parameter \code{frame.par} to \code{\link{apc.lines}} if more sets of estimates is plotted in the same graph, however see \code{\link{cp.points}}. } \details{\code{plot.apc} is just a wrapper for \code{apc.plot}.} \author{ Bendix Carstensen, Steno Diabetes Center, \url{http://BendixCarstensen.com} } \seealso{ \code{\link{apc.lines}}, \code{\link{lines.apc}}, \code{\link{apc.frame}}, \code{\link{apc.fit}} } \examples{ data( lungDK ) attach( lungDK ) apc1 <- apc.fit( A=Ax, P=Px, D=D, Y=Y/10^5 ) fp <- apc.plot( apc1 ) apc.lines( apc1, frame.par=fp, drift=1.01, col="red" ) for( i in 1:11 ) apc.lines( apc1, frame.par=fp, drift=1+(i-6)/100, col=rainbow(12)[i] ) } \keyword{hplot} Epi/man/lep.Rd0000644000175100001440000000233013011073056012621 0ustar hornikusers\name{lep} \alias{lep} \docType{data} \title{An unmatched case-control study of leprosy incidence} \description{ The \code{lep} data frame has 1370 rows and 7 columns. This was an unmatched case-control study in which incident cases of leprosy in a region of N. Malawi were compared with population controls. } \format{ This data frame contains the following columns: \tabular{rl}{ \code{id}: \tab subject identifier: a numeric vector \cr \code{d}: \tab case/control status: a numeric vector (1=case, 0=control) \cr \code{age}: \tab a factor with levels \code{5-9} \code{10-14} \code{15-19} \code{20-24} \code{25-29} \code{30-44} \code{45+} \cr \code{sex}: \tab a factor with levels \code{male}, \code{female} \cr \code{bcg}: \tab presence of vaccine scar, a factor with levels \code{no} \code{yes} \cr \code{school}: \tab schooling, a factor with levels \code{none} \code{1-5yrs} \code{6-8yrs} \code{sec/tert} \cr \code{house}: \tab housing, a factor with levels \code{brick} \code{sunbrick} \code{wattle} \code{temp} \cr } } \source{ The study is described in more detail in Clayton and Hills, Statistical Models in Epidemiology, Oxford University Press, Oxford:1993. } \examples{ data(lep) } \keyword{datasets} Epi/man/ccwc.Rd0000644000175100001440000000413413011073056012764 0ustar hornikusers\name{ccwc} \alias{ccwc} \title{Generate a nested case-control study} \usage{ ccwc( entry=0, exit, fail, origin=0, controls=1, match=list(), include=list(), data=NULL, silent=FALSE ) } \arguments{ \item{entry}{ Time of entry to follow-up } \item{exit}{ Time of exit from follow-up } \item{fail}{ Status on exit (1=Fail, 0=Censored) } \item{origin}{ Origin of analysis time scale } \item{controls}{ The number of controls to be selected for each case } \item{match}{ List of categorical variables on which to match cases and controls } \item{include}{ List of other variables to be carried across into the case-control study } \item{data}{ Data frame in which to look for input variables } \item{silent}{ If FALSE, echos a . to the screen for each case-control set created; otherwise produces no output. } } \description{ Given the basic outcome variables for a cohort study: the time of entry to the cohort, the time of exit and the reason for exit ("failure" or "censoring"), this function computes risk sets and generates a matched case-control study in which each case is compared with a set of controls randomly sampled from the appropriate risk set. Other variables may be matched when selecting controls. } \value{ The case-control study, as a dataframe containing: \item{Set}{ case-control set number } \item{Map}{ row number of record in input dataframe } \item{Time}{ failure time of the case in this set } \item{Fail}{ failure status (1=case, 0=control) } These are followed by the matching variables, and finally by the variables in the \code{include} list } \references{ Clayton and Hills, Statistical Models in Epidemiology, Oxford University Press, Oxford:1993. } \author{ David Clayton } \seealso{ \code{\link{Lexis}} } \examples{ # # For the diet and heart dataset, create a nested case-control study # using the age scale and matching on job # data(diet) dietcc <- ccwc( doe, dox, chd, origin=dob, controls=2, data=diet, include=energy, match=job) } \keyword{datagen} Epi/man/clogistic.Rd0000644000175100001440000000656013011073056014032 0ustar hornikusers\name{clogistic} \alias{clogistic} \title{Conditional logistic regression} \description{ Estimates a logistic regression model by maximizing the conditional likelihood. The conditional likelihood calculations are exact, and scale efficiently to strata with large numbers of cases. } \usage{ clogistic(formula, strata, data, subset, na.action, init, model = TRUE, x = FALSE, y = TRUE, contrasts = NULL, iter.max=20, eps=1e-6, toler.chol = sqrt(.Machine$double.eps)) } \arguments{ \item{formula}{Model formula} \item{strata}{Factor describing membership of strata for conditioning} \item{data}{data frame containing the variables in the formula and strata arguments} \item{subset}{subset of records to use} \item{na.action}{missing value handling} \item{init}{initial values} \item{model}{ a logical value indicating whether \emph{model frame} should be included as a component of the returned value} \item{x,y}{ logical values indicating whether the response vector and model matrix used in the fitting process should be returned as components of the returned value. } \item{contrasts}{ an optional list. See the \code{contrasts.arg} of \code{model.matrix.default} } \item{iter.max}{maximum number of iterations} \item{eps}{ Convergence tolerance. Iteration continues until the relative change in the conditional log likelihood is less than \code{eps}. Must be positive. } \item{toler.chol}{ Tolerance used for detection of a singularity during a Cholesky decomposition of the variance matrix. This is used to detect redundant predictor variables. Must be less than \code{eps}. } } \value{ An object of class \code{"clogistic"}. This is a list containing the following components: \item{coefficients}{ the estimates of the log-odds ratio parameters. If the model is over-determined there will be missing values in the vector corresponding to the redundant columns in the model matrix. } \item{var}{ the variance matrix of the coefficients. Rows and columns corresponding to any missing coefficients are set to zero. } \item{loglik}{ a vector of length 2 containing the log-likelihood with the initial values and with the final values of the coefficients. } \item{iter}{ number of iterations used. } \item{n}{ number of observations used. Observations may be dropped either because they are missing, or because they belong to a homogeneous stratum. For more details on which observations were used, see \code{informative} below. } \item{informative}{ if \code{model=TRUE}, a logical vector of length equal to the number of rows in the model frame. This indicates whether an observation is informative. Strata that are homogeneous with respect to either the outcome variable or the predictor variables are uninformative, in the sense that they can be removed without modifying the estimates or standard errors. If \code{model=FALSE}, this is NULL. } The output will also contain the following, for documentation see the \code{glm} object: \code{terms}, \code{formula}, \code{call}, \code{contrasts}, \code{xlevels}, and, optionally, \code{x}, \code{y}, and/or \code{frame}. } \examples{ data(bdendo) clogistic(d ~ cest + dur, strata=set, data=bdendo) } \author{Martyn Plummer} \seealso{\code{\link{glm}}} \keyword{models} Epi/man/ncut.Rd0000644000175100001440000000304113011073056013012 0ustar hornikusers\name{ncut} \alias{ncut} \title{ Function to group a variable in intervals.} \description{ Cuts a continuous variable in intervals. As opposed to \code{cut} which returns a factor, \code{ncut} returns a numeric variable. } \usage{ ncut(x, breaks, type="left" ) } \arguments{ \item{x}{A numerical vector.} \item{breaks}{Vector of breakpoints. \code{NA} will results for values below \code{min(breaks)} if \code{type="left"}, for values above \code{max(breaks)} if \code{type="right"} and for values outside \code{range(breaks)} if \code{type="mid"}} \item{type}{Character: one of \code{c("left","right","mid")}, indicating whether the left, right or midpoint of the intervals defined in breaks is returned.} } \details{ The function uses the base function \code{findInterval}. } \value{ A numerical vector of the same length as \code{x}. } \author{ Bendix Carstensen, Steno Diabetes Center, \email{b@bxc.dk}, \url{http://BendixCarstensen.com}, with essential input from Martyn Plummer, IARC. } \seealso{ \code{\link{cut}}, \code{\link{findInterval}} } \examples{ br <- c(-2,0,1,2.5) x <- c( rnorm( 10 ), br, -3, 3 ) cbind( x, l=ncut( x, breaks=br, type="l" ), m=ncut( x, breaks=br, type="m" ), r=ncut( x, breaks=br, type="r" ) )[order(x),] x <- rnorm( 200 ) plot( x, ncut( x, breaks=br, type="l" ), pch=16, col="blue", ylim=range(x) ) abline( 0, 1 ) abline( v=br ) points( x, ncut( x, breaks=br, type="r" ), pch=16, col="red" ) points( x, ncut( x, breaks=br, type="m" ), pch=16, col="green" ) } \keyword{manip} Epi/man/expand.data.rd0000644000175100001440000000333212531361107014276 0ustar hornikusers\name{expand.data} \alias{expand.data} \title{ Function to expand data for regression analysis of interval censored data. } \description{ This is a utility function. The original records with \code{first.well}, \code{last.well} and \code{first.ill} are expanded to multiple records; several for each interval where the person is known to be well and one where the person is known to fail. At the same time columns for the covariates needed to estimate rates and the response variable are generated. } \usage{ expand.data(fu, formula, breaks, data) } \arguments{ \item{fu}{A 3-column matrix with \code{first.well}, \code{last.well} and \code{first.ill} in each row.} \item{formula}{Model fromula, used to derive the model matrix.} \item{breaks}{Defines the intervals in which the baseline rate is assumed constant. All follow-up before the first and after the last break is discarded.} \item{data}{Datafrem in which \code{fu} and \code{formula} is interpreted.} } \value{ Returns a list with three components \item{rates.frame}{Dataframe of covariates for estimation of the baseline rates --- one per interval defined by \code{breaks}.} \item{cov.frame}{Dataframe for estimation of the covariate effects. A data-framed version of the designmatrix from \code{formula}.} \item{y}{Response vector.} } \references{ B Carstensen: Regression models for interval censored survival data: application to HIV infection in Danish homosexual men. Statistics in Medicine, 15(20):2177-2189, 1996. } \author{ Martyn Plummer, \email{plummer@iarc.fr} } \seealso{ \code{\link{Icens}} \code{\link{fit.mult}} \code{\link{fit.add}} } \keyword{ models } \keyword{ regression } \keyword{ survival } Epi/man/plot.Lexis.Rd0000644000175100001440000001160513011073056014107 0ustar hornikusers\name{plot.Lexis} \alias{plot.Lexis} \alias{points.Lexis} \alias{lines.Lexis} \alias{PY.ann} \alias{PY.ann.Lexis} \title{Lexis diagrams} \description{ The follow-up histories represented by a Lexis object can be plotted using one or two dimensions. The two dimensional plot is a Lexis diagram showing follow-up time simultaneously on two time scales. } \usage{ \method{plot}{Lexis}(x=Lexis( entry=list(Date=1900,Age=0), exit=list(Age=0) ), time.scale = NULL, type="l", breaks="lightgray", ...) \method{points}{Lexis}(x, time.scale = options()[["Lexis.time.scale"]] , ...) \method{lines}{Lexis}(x, time.scale = options()[["Lexis.time.scale"]], ...) \method{PY.ann}{Lexis}(x, time.scale = options()[["Lexis.time.scale"]], digits=1, ...) } \arguments{ \item{x}{An object of class \code{Lexis}. The default is a bogus \code{Lexis} object, so that \code{plot.Lexis} can be called without the first argument and still produce a(n empty) Lexis diagram. Unless arguments \code{xlim} and \code{ylim} are given in this case the diagram is looking pretty daft.} \item{time.scale}{A vector of length 1 or 2 giving the time scales to be plotted either by name or numerical order} \item{type}{Character indication what to draw: "n" nothing (just set up the diagram), "l" - liefelines, "p" - endpoints of follow-up, "b" - both lifelines and endpoints.} \item{breaks}{a string giving the colour of grid lines to be drawn when plotting a split Lexis object. Grid lines can be suppressed by supplying the value \code{NULL} to the \code{breaks} argument} \item{digits}{Numerical. How many digits after the demimal points should be when plotting the person-years.} \item{\dots}{Further graphical parameters to be passed to the plotting methods. Grids can be drawn (behind the life lines) using the following parameters in \code{plot}: \itemize{ \item \code{grid} If logical, a background grid is set up using the axis ticks. If a list, the first component is used as positions for the vertical lines and the last as positions for the horizontal. If a nunerical vector, grids on both axes are set up using the distance between the numbers. \item \code{col.grid="lightgray"} Color of the background grid. \item \code{lty.grid=2} Line type for the grid. \item \code{coh.grid=FALSE} Should a 45 degree grid be plotted?} } } \details{ The plot method for \code{Lexis} objects traces ``life lines'' from the start to the end of follow-up. The \code{points} method plots points at the end of the life lines. If \code{time.scale} is of length 1, the life lines are drawn horizontally, with the time scale on the X axis and the id value on the Y axis. If \code{time.scale} is of length 2, a Lexis diagram is produced, with diagonal life lines plotted against both time scales simultaneously. If \code{lex} has been split along one of the time axes by a call to \code{splitLexis}, then vertical or horizontal grid lines are plotted (on top of the life lines) at the break points. \code{PY.ann} writes the length of each (segment of) life line at the middle of the line. Not advisable to use with large cohorts. Another example is in the example file for \code{\link{occup}}. } \author{Martyn Plummer} \examples{ # A small bogus cohort xcoh <- structure( list( id = c("A", "B", "C"), birth = c("14/07/1952", "01/04/1957", "10/06/1987"), entry = c("04/08/1965", "08/09/1972", "23/12/1991"), exit = c("27/06/1997", "23/05/1995", "24/07/1998"), fail = c(1, 0, 1) ), .Names = c("id", "birth", "entry", "exit", "fail"), row.names = c("1", "2", "3"), class = "data.frame" ) # Convert the character dates into numerical variables (fractional years) xcoh$bt <- cal.yr( xcoh$birth, format="\%d/\%m/\%Y" ) xcoh$en <- cal.yr( xcoh$entry, format="\%d/\%m/\%Y" ) xcoh$ex <- cal.yr( xcoh$exit , format="\%d/\%m/\%Y" ) # See how it looks xcoh # Define as Lexis object with timescales calendar time and age Lcoh <- Lexis( entry = list( per=en ), exit = list( per=ex, age=ex-bt ), exit.status = fail, data = xcoh ) # Default plot of follow-up plot( Lcoh ) # Show follow-up time PY.ann( Lcoh ) # Show exit status plot( Lcoh, type="b" ) # Same but failures only plot( Lcoh, type="b", pch=c(NA,16)[Lcoh$fail+1] ) # With a grid and deaths as endpoints plot( Lcoh, grid=0:10*10, col="black" ) points( Lcoh, pch=c(NA,16)[Lcoh$lex.Xst+1] ) # With a lot of bells and whistles: plot( Lcoh, grid=0:20*5, col="black", xaxs="i", yaxs="i", xlim=c(1960,2010), ylim=c(0,50), lwd=3, las=1 ) points( Lcoh, pch=c(NA,16)[Lcoh$lex.Xst+1], col="red", cex=1.5 ) } \seealso{\code{\link{Lexis}}, \code{\link{splitLexis}}} \keyword{hplot} \keyword{aplot} Epi/man/gen.exp.Rd0000644000175100001440000001656613011121662013422 0ustar hornikusers\name{gen.exp} \alias{gen.exp} \title{ Generate covariates for drug-exposure follow-up from drug purchase records. } \description{ From records of drug purchase and possibly known treatment intensity, the time since first drug use and cumulative dose at prespecified times is computed. Optionally, lagged exposures are computed too, i.e. cumulative exposure a prespecified time ago. } \usage{ gen.exp(purchase, id = "id", dop = "dop", amt = "amt", dpt = "dpt", fu, doe = "doe", dox = "dox", breaks, use.dpt = ( dpt \%in\% names(purchase) ), lags = NULL, push.max = Inf, pred.win = Inf, lag.dec = 1 ) } \arguments{ \item{purchase}{Data frame with columns \code{id}-person id, \code{dop} - \code{d}ate \code{o}f \code{p}urchase, \code{amt} - \code{am}oun\code{t} purchased, and optionally \code{dpt} - (\code{d}ose \code{p}er \code{t}ime) ("defined daily dose", DDD, that is), how much is assume to be ingested per unit time. The units used for \code{dpt} is assumed to be units of \code{amt} per units of \code{dop}.} \item{id}{Character. Name of the id variable in the data frame.} \item{dop}{Character. Name of the \code{d}ate \code{o}f \code{p}urchase variable in the data frame.} \item{amt}{Character. Name of the \code{am}oun\code{t} purchased variable in the data frame.} \item{dpt}{Character. Name of the \code{d}ose-\code{p}er-\code{t}ime variable in the data frame.} \item{fu}{Data frame with \code{f}ollow-\code{u}p period for each person, the person id variable must have the same name as in the \code{purchase} data frame.} \item{doe}{Character. Name of the \code{d}ate \code{o}f \code{e}ntry variable.} \item{dox}{Character. Name of the \code{d}ate \code{o}f e\code{x}it variable.} \item{use.dpt}{Logical: should we use information on dose per time.} \item{breaks}{Numerical vector of dates at which the time since first exposure, cumulative dose etc. are computed.} \item{lags}{Numerical vector of lag-times used in computing lagged cumulative doses.} \item{push.max}{Numerical. How much can purchases maximally be pushed forward in time. See details.} \item{pred.win}{The length of the window used for constructing the average dose per time used to compute the duration of the last purchase} \item{lag.dec}{How many decimals to use in the construction of names for the lagged exposure variables} } \details{ Each purchase record is converted into a time-interval of exposure. If \code{use.dpt} is \code{TRUE} then the dose per time information is used to compute the exposure interval associated with each purchase. Exposure intervals are stacked, that is each interval is put after any previous. This means that the start of exposure to a given purchase can be pushed into the future. The parameter \code{push.max} indicates the maximally tolerated push. If this is reached by a person, the assumption is that some of the purchased drug is not counted in the exposure calculations. The \code{dpt} can either be a constant, basically translating the purchased amount into exposure time the same way for all persons, or it can be a vector with different treatment intensities for each purchase. In any case the cumulative dose is computed taking this into account. If \code{use.dpt} is \code{FALSE} then the exposure from one purchase is assumed to stretch over the time to the next purchase, so we are effectively assuming different rates of dose per time between any two adjacent purchases. Moreover, with this approach, periods of non-exposure does not exist. Formally this approach conditions on the future, because the rate of consumption (the accumulation of cumulative exposure) is computed based on knowledge of when next purchase is made. The intention of this function is to generate covariates for a particular drug for the entire follow-up of each person. The reason that the follow-up prior to drug purchase and post-exposure is included is that the covariates must be defined for these periods too, in order to be useful for analysis of disease outcomes. This function is described in terme of calendar time as underlying time scale, because this will normally be the time scale for drug purchases and for entry and exit for persons. In principle the variables termed as dates might equally well refer to say the age scale, but this would then have to be true \emph{both} for the purchase data and the follow-up data. } \value{A data frame with one record per follow-up interval between \code{breaks}, with columns: \describe{ \item{\code{id}}{person id.} \item{\code{dof}}{date of follow up, i.e. start of interval. Apart from possibly the first interval for each person, this will assume values in the set of the values in \code{breaks}.} \item{\code{Y}}{the length of interval.} \item{\code{tfi}}{\code{t}ime \code{f}rom first \code{i}nitiation of drug.} \item{\code{tfc}}{\code{t}ime \code{f}rom latest \code{c}essation of drug.} \item{\code{cdur}}{\code{c}umulative \code{dur}ation of the drug.} \item{\code{cdos}}{\code{c}umulative \code{dos}e.} \item{\code{ldos}}{suffixed with one value per element in \code{lags}, the latter giving the cumulative doses \code{lags} before \code{dof}.} } } \author{Bendix Carstensen, \email{b@bxc.dk}. The development of this function was supported partly through a grant from the EFSD (European Foundation for the Study of Diabetes), ""} \seealso{\code{\link{Lexis}}, \code{\link{splitLexis}}} \examples{ # Construct a simple data frame of purchases for 3 persons # The purchase units (in variable dose) correspond to n <- c( 10, 17, 8 ) dop <- c( 1995.2+cumsum(sample(1:4/10,n[1],replace=TRUE)), 1997.3+cumsum(sample(1:4/10,n[2],replace=TRUE)), 1997.3+cumsum(sample(1:4/10,n[3],replace=TRUE)) ) amt <- sample( 1:3/15, sum(n), replace=TRUE ) dpt <- sample( 15:20/25, sum(n), replace=TRUE ) dfr <- data.frame( id = rep(1:3,n), dop, amt = amt, dpt = dpt ) round( dfr, 3 ) # Construct a simple dataframe for follow-up periods for these 3 persons fu <- data.frame( id = 1:3, doe = c(1995,1997,1996)+1:3/4, dox = c(2001,2003,2002)+1:3/5 ) round( fu, 3 ) ( dpos <- gen.exp( dfr, fu = fu, breaks = seq(1990,2015,0.5), lags = 2:3/5 ) ) ( xpos <- gen.exp( dfr, fu = fu, use.dpt = FALSE, breaks = seq(1990,2015,0.5), lags = 2:3/5 ) ) # How many relevant columns nvar <- ncol(xpos)-3 clrs <- rainbow(nvar) # Show how the variables relate to the follow-up time par( mfrow=c(3,1), mar=c(3,3,1,1), mgp=c(3,1,0)/1.6, bty="n" ) for( i in unique(xpos$id) ) matplot( xpos[xpos$id==i,"dof"], xpos[xpos$id==i,-(1:3)], xlim=range(xpos$dof), ylim=range(xpos[,-(1:3)]), type="l", lwd=2, lty=1, col=clrs, ylab="", xlab="Date of follow-up" ) ytxt <- par("usr")[3:4] ytxt <- ytxt[1] + (nvar:1)*diff(ytxt)/(nvar+2) xtxt <- rep( sum(par("usr")[1:2]*c(0.98,0.02)), nvar ) text( xtxt, ytxt, colnames(xpos)[-(1:3)], font=2, col=clrs, cex=1.5, adj=0 ) } \keyword{data manipulation} Epi/man/LCa.fit.Rd0000644000175100001440000002770013142325457013303 0ustar hornikusers\name{LCa.fit} \alias{LCa.fit} \alias{print.LCa} \alias{summary.LCa} \alias{plot.LCa} \alias{predict.LCa} \title{ Fit Lee-Carter-type models for rates to arbitrarily shaped observations of rates in a Lexis diagram. } \description{ The Lee-Carter model is originally defined as a model for rates observed in A-sets (age by period) of a Lexis diagram, as log(rate(x,t)) = a(x) + b(x)k(t), using one parameter per age(x) and period(t). This function uses natural splines for a(), b() and k(), placing knots for each effect such that the number of events is the same between knots. Also fits the continuous time counterparts of all models supported by the \code{\link[ilc]{lca.rh}} function from the \code{ilc} package (see details). } \usage{ LCa.fit( data, A, P, D, Y, model = "APa", # or one of "ACa", "APaC", "APCa" or "APaCa" a.ref, # age reference for the interactions pi.ref = a.ref, # age reference for the period interaction ci.ref = a.ref, # age reference for the cohort interaction p.ref, # period reference for the interaction c.ref, # cohort reference for the interactions npar = c(a = 6, # no. knots for main age-effect p = 6, # no. knots for period-effect c = 6, # no. knots for cohort-effect pi = 6, # no. knots for age in the period interaction ci = 6), # no. knots for age in the cohort interaction VC = TRUE, # numerical calculation of the Hessian? alpha = 0.05, # 1 minus confidence level eps = 1e-6, # convergence criterion maxit = 100, # max. no iterations quiet = TRUE ) # cut the crap \method{print}{LCa}( x, ... ) \method{summary}{LCa}( object, show.est=FALSE, ... ) \method{plot}{LCa}( x, ... ) \method{predict}{LCa}( object, newdata, alpha = 0.05, level = 1-alpha, sim = ( "vcov" \%in\% names(object) ), ... ) } \arguments{ \item{data}{ A data frame. Must have columns \code{A}(age), \code{P}(period, that is calendar time), \code{D}(no. of events) and \code{Y}(person-time, exposure). Alternatively these four quantities can be given as separate vectors: } \item{A}{ Vector of ages (midpoint of observation). } \item{P}{ Vector of period (midpoint of observation). } \item{D}{ Vector of no. of events. } \item{Y}{ Vector of person-time. Demographers would say "exposure", bewildering epidemiologists. } \item{a.ref}{ Reference age for the age-interaction term(s) \code{pi(x)} and/or \code{pi(x)}, where \code{pi(a.ref)=1} and \code{ci(a.ref)=1}. } \item{pi.ref}{ Same, but specifically for the interaction with period. } \item{ci.ref}{ Same, but specifically for the interaction with cohort. } \item{p.ref}{ Reference period for the time-interaction term \code{kp(t)} where \code{kp(p.ref)=0}. } \item{c.ref}{ Reference period for the time-interaction term \code{kp(t)} where \code{kc(c.ref)=0}. } \item{model}{ Character, either \code{"APa"} which is the classical Lee-Carter model for log-rates, other possibilities are \code{"ACa"}, \code{"APCa"}, \code{"APaC"} or \code{"APaCa"}, see details. } \item{npar}{ A (possibly named) vector or list, with either the number of knots or the actual vectors of knots for each term. If unnamed, components are taken to be in the order (a,b,t), if the model is "APaCa" in the order (a,p,c,pi,ci). If a vector, the three integers indicate the number of knots for each term; these will be placed so that there is an equal number of events (\code{D}) between each, and half as many below the first and above the last knot. If \code{npar} is a list of scalars the behavior is the same. If \code{npar} is a list of vectors, these are taken as the knots for the natural splines. } \item{VC}{ Logical. Should the variance-covariance matrix of the parameters be computed by numerical differentiation? See details. } \item{alpha}{ 1 minus the confidence level used when calculating confidence intervals for estimates in \code{LCa.fit} and for predictions by \code{predict.LCa}. } \item{eps}{ Convergence criterion for the deviance, we use the the relative difference between deviance from the two models fitted. } \item{maxit}{ Maximal number of iterations. } \item{quiet}{ Shall I shut up or talk extensively to you about iteration progression etc.? } \item{object}{An \code{LCa} object, see under "Value".} \item{show.est}{Logical. Should the estimates be printed?} \item{x}{An \code{LCa} object, see under "Value".} \item{newdata}{Prediction data frame, must have columns \code{A} and \code{P}. Any \code{Y} column is ignored, predictions are given in units of the \code{Y} supplied for the call that generated the \code{LCa} object.} \item{level}{Confidence level.} \item{sim}{Logical or numeric. If \code{TRUE}, prediction c.i.s will be based on 1000 simulations from the posterior parameters. If numeric, it will be based on that number of simulations.} \item{...}{Additional parameters passed on to the method.} } \details{ The Lee-Carter model is non-linear in age and time so does not fit in the classical glm-Poisson framework. But for fixed \code{b(x)} it is a glm, and also for fixed \code{a(x)}, \code{k(t)}. The function alternately fits the two versions until the same fit is produced (same deviance). The multiplicative age by period term could equally well have been a multiplicative age by cohort or even both. Thus the most extensive model is: \deqn{\log(\lambda(a,p)) = f(a) + b_p(a)k_p(a) + b_c(a)k_c(a)}{% log(lambda(a,p)) = f(a) + b_p(a)k_p(a) + b_c(a)k_c(a)} The naming convention for the models is a capital \code{P} and/or \code{C} if the effect is in the model followed by a lower case \code{a} if there is an interaction with age. Thus there are 5 different models that can be fitted: \code{APa}, \code{ACa}, \code{APaC} \code{APCa} and \code{APaCa}. The standard errors of the parameters from the two model fits are however wrong; they are conditional on some of terms having a fixed value. And the symbolic calculation of the Hessian is a nightmare, so this is done numerically using the \code{hessian} function from the \code{numDeriv} package if \code{VC=TRUE}. The coefficients and the variance-covariance matrix of these are used in \code{predict.LCa} for a parametric bootstrap (that is, a simulation from a multivariate normal with mean equal to the parameter estimates and variance as the estimated variance-covariance) to get confidence intervals for the predictions if \code{sim} is \code{TRUE} --- which it is by default if they are part of the object. The \code{plot} for \code{LCa} objects merely produces between 3 and 5 panels showing each of the terms in the model. These are mainly for preliminary inspection; real reporting of the effects should use proper relative scaling of the effects.} \value{ \code{LCa.fit} returns an object of class \code{LCa} (smooth effects \code{L}ee-\code{Ca}rter model); it is a list with the following components: \item{model}{Character, either \code{APa}, \code{ACa}, \code{APaC}, \code{APCa} or \code{APaCa}, indicating the variable(s) interacting with age.} \item{ax}{3-column matrix of age-effects, c.i. from the age-time model. Rownames are the unique occurring ages in the dataset. Estimates are rates.} \item{pi}{3-column matrix of age-period interaction effects, c.i. from the age model. Rownames are the actually occurring ages in the dataset. Estimates are multipliers of the log-RRs in \code{kt}, centered at 1 at \code{ci.ref}.} \item{kp}{3-column matrix of period-effects, with c.i.s from the age-time model. Rownames are the actually occurring times in the dataset. Estimates are rate-ratios centered at 1 at \code{p.ref}.} \item{ci}{3-column matrix of age-cohort interaction effects, c.i. from the age model. Rownames are the actually occurring ages in the dataset. Estimates are multipliers of the log-RRs in \code{kt}, centered at 1 at \code{ci.ref}.} \item{kc}{3-column matrix of period-effects, with c.i.s from the age-time model. Rownames are the actually occurring times in the dataset. Estimates are rate-ratios centered at 1 at \code{p.ref}.} \item{mod.at}{\code{glm} object with the final age-time model. Gives the same fit as the \code{mod.b} model.} \item{mod.b}{\code{glm} object with the final age model. Gives the same fit as the \code{mod.at} model.} \item{coef}{All coefficients from both models, in the order \code{ax}, \code{kp}, \code{kc}, \code{pi}, \code{ci}. Only present if \code{LCa.fit} were called with \code{VC=TRUE} (the default).} \item{vcov}{Variance-covariance matrix of coefficients from both models, in the same order as in the \code{coef}. Only present if \code{LCa.fit} were called with \code{VC=TRUE}.} \item{knots}{List of vectors of knots used in for the age, period and cohort effects.} \item{refs}{List of reference points used for the age, period and cohort terms in the interactions.} \item{deviance}{Deviance of the model} \item{df.residual}{Residual degrees of freedom} \item{iter}{Number of iterations used to reach convergence.} \code{plot.LCa} plots the estimated effects in separate panels, using a log-scale for the baseline rates (\code{ax}) and the time-RR (\code{kt}). For the \code{APaCa} model 5 panels are plotted. \code{summary.LCa} returns (invisibly) a matrix with the parameters from the models and a column of the conditional se.s and of the se.s derived from the numerically computed Hessian (if \code{LCa.fit} were called with \code{VC=TRUE}.) \code{predict.LCa} returns a matrix with one row per row in \code{newdata}. If \code{LCa.fit} were called with \code{VC=TRUE} there will be 3 columns, namely prediction (1st column) and c.i.s based on a simulation of parameters from a multivariate normal with mean \code{coef} and variance \code{vcov} using the median and \code{alpha}/2 quantiles from the \code{sim} simulations. If \code{LCa.fit} were called with \code{VC=FALSE} there will be 6 columns, namely estimates and c.i.s from age-time model (\code{mod.at}), and from the age-interaction model (\code{mod.b}), both using conditional variances. } \author{ Bendix Carstensen, \url{http://BendixCarstensen.com} This function was conceived during a course on APC models at the Max Planck Institute of Demographic Research (MPIDR, \url{https://www.demogr.mpg.de/en/}) in Rostock in May 2016 (\url{http://bendixcarstensen.com/APC/MPIDR-2016/}), and finished during a research stay there, kindly sponsored by the MPIDR. } \seealso{ \code{\link{apc.fit}}, \code{\link{apc.LCa}}, \code{\link[ilc]{lca.rh}}, \code{\link[demography]{lca}} } \examples{ library( Epi ) # Load the testis cancer data by Lexis triangles data( testisDK ) tc <- subset( testisDK, A>14 & A<60 ) head( tc ) # We want to see rates per 100,000 PY tc$Y <- tc$Y / 10^5 # Fit the Lee-Carter model with age-period interaction (default) LCa.tc <- LCa.fit( tc, model="ACa", a.ref=30, p.ref=1980, quiet=FALSE, eps=10e-4, maxit=50 ) LCa.tc summary( LCa.tc ) # Inspect what we got names( LCa.tc ) # show the estimated effects par( mfrow=c(1,3) ) plot( LCa.tc ) # Prediction data frame for ages 15 to 60 for three time points: nd <- data.frame( A=15:60 ) p50 <- predict.LCa( LCa.tc, newdata=cbind(nd,P=1950), sim=10000 ) p70 <- predict.LCa( LCa.tc, newdata=cbind(nd,P=1970), sim=10000 ) p90 <- predict.LCa( LCa.tc, newdata=cbind(nd,P=1990), sim=10000 ) # Inspect the curves from the parametric bootstrap (simulation): par( mfrow=c(1,1) ) matplot( nd$A, cbind(p50,p70,p90), type="l", lwd=c(6,3,3), lty=1, col=rep( c("red","green","blue"), each=3 ), log="y", ylab="Testis cancer incidence per 100,000 PY, 1970, 80, 90", xlab="Age" ) } \keyword{models} \keyword{regression} Epi/CHANGES0000644000175100001440000006775713142321754012030 0ustar hornikusersChanges in 2.19 o Typos in documentation fixed, LCa.fit o Bug in knot calculation in LCa.fit fixed. Meaningless models emerged if explicit knots were supplied for cohort effects. Prior to 2.19 only supplying *number* of knots for effects would give meaningful models if a cohort effect were included (with or without age-interaction). WISH: gen.exp has now got a wrapper, genExp.Lexis, explicitly using the Lexis structure. Changes in 2.18 o addCov.Lexis was fundamentally flawed, re-written, argument names and order changed too. o Documentation links between addCov.Lexis and gen.exp are introduced. Changes in 2.16 o Function addCov.Lexis added. Allows addition of covariates (clinical mesurements) taken at a particular time to be added to a Lexis object. Changes in 2.15 o typo in stackedCIF code corrected (caused a crash with ony one group) Changes in 2.14 o plotCIF, stackedCIF plotting Nelson-Aalen-Johansen estimators of cumulative risks added, courtesy Esa Lr o Convenice wrappers for grep to select elements: fgrep, ngrep, lgrep1. o A bug in Ns has been fixed, thanks to Lars J Diaz (DK) and Stephen Wade (AUS). o surv1, surv2, yll, erl: NAs in input rates are now changed to 0 (with a warning) instead of crashing the function. o documentation of ci.cum groomed. Changes in 2.12 o New function ci.ratio to compute RR with CIs from independent estimates of rates Changes in 2.11 o Small errors in calculation of knots in the simLexis macro corrected o A severe bug in mcutLexis which caused omission of certain cuts has been fixed. Changes in 2.10 o Bug in lls() caused a crash when objects had funny names (such as '[.Lexis'). Fixed. Changes in 2.9 o Grooming of code and documentation for mcutLexis. Changes in 2.8 o A function, mcutLexis, to cut at several different event times, preserving intermediat event histories has been added. o Errors in the erl.Rd corrected: Description of the argument "immune" was wrong, as were the description of the timepoints where rates were supposed given. o Inaccuracies in the vignette for simLexis patched. o lls() now also lists the size of objects o For illustrative purposes the DMepi dataset has been included Changes in 2.7 o '[.Lexis' redefined to comply with data.table as used from popEpi Changes in 2.6 o Added function erl computing Expected Residual Lifetime in an illness-death model added, together with companions surv1, surv2, erl1 and yll (Years of Life Lost). Changes in 2.5 o Argument "timeScales" added to summary.Lexis, printing names of timescales and which of them (if any) are defined as time since enty into a state. o rm.tr added; removes transitions from a Lexis object o boxes.MS no longer isssues a warning when show.BE is set to TRUE. o LCa.fit rewritten and expanded to encompass both age-period and age-cohort multiplicative interactions. o APC.LCa added, fits all possible Lee-Carter type models and APC-models. boxes.APC.LCa plots the relationship between models including the residual deviances, and optionally places boxes to provide overview of best fitting models. Changes in 2.4 o Ns updated with the possibility of clamping effects to have 0 slope beyond the outer knots, see argument "fixsl". Changes in 2.3 o Cplot (usually called from rateplot) now checks if age- and period-groupings are of the same length, and tells you if they are not, instead of just plotting (almost) nothing. o Grooming of LCa functions, and in particular the documentation. o Update of apc.fit so that also Y^2/D (the observed information about the rate) and Y (person-time) is allowed as weight when defining the inner product inducing orthogonality between linear and non-linear effects. Changes in 2.2 o LCa.fit added: Fits Lee-Carter models with smooth age and time effects to rate-data. print, summary, plot and predict methods also supplied. Changes in 2.1 o The show.BE="nz" feature in boxes.Lexis is now documented o "[.Lexis" is now exported and works... Changes in 2.0 o cbind, rbind and "[" methods for Lexis objects have been added o Consequential fixes in simLexis Changes in 1.1.72 o Improved man page for N2Y Changes in 1.1.71 o Bug from calling lme4::vcov from within ci.lin fixed Changes in 1.1.70 o Bug in calling lme4::fixef from within ci.lin fixed o ci.lin with sample=TRUE now samples from the posterior of the parameter vector and then transforms this by the contrast matrix (earlier the sampling was from the posterior of the ctr.mat transformed parameters). Changes in 1.1.69 o ci.cum now has an argument ci.Exp (defaults to FALSE) that computes the ci of the cum.haz on the log-scale. This is useful if you want to transform c.i.s to the survival scale and want the c.i.s for the survival function to stay inside [0,1]. o ci.pred updated to automatically use the inverse link for transformation of results. Also now only accepts glm objects. o Ns now have arguents ref= and detrend=. ref= allows a reference value to be specified (where the Ns is 0); this is independent of the supplied data. detrend= projects the columns of Ns() on the orthogonal of the variable supplied; this is strongly dependent on the data. Changes in 1.1.68 o ci.lin has been groomed to use internally (newly, from 1.1.68) defined methods COEF and VCOV to extract coefficients and variance-covariances of these from different types of objects. Changes in 1.1.67 o The simLexis vignette has been groomed a bit o The function ci.pred (a wrapper for predict.glm) added Changes in 1.1.66 o A crr.Lexis method has been added to simplify the use of the Fine-Gray model when data are set up in a Lexis object. o ci.lin and ci.exp now recognises crr objects. o A wrapper, ci.pred, for predict.glm has been added, it returns predictions with confidence intervals. Changes in 1.1.65 o Despite the note, dropped rows from construction of a Lexis objects were not put in the "dropped" attribute. Changes in 1.1.64 o Fixed the sim-Lexis vignette Changes in 1.1.64 o Added function ZArray, which generates an array of 0s just as NArray generates an array of NAs. o Updated code to avoid "::" and ":::" as far as possible, as well as "<<-". Hence excluded records from construction of a Lexis object is now put in an attribute "dropped" of the Lexis object. Changes in 1.1.62 o Bug fix in the example code for boxes.Lexis Changes in 1.1.61 o ci.lin updated to recognize objects of class "lmerMod" from lmer. Changes in 1.1.60 o Documentation for DMlate updated. Changes in 1.1.59 o boxes.Lexis updated so that also no. of beginners and enders are properly formatted if larger than 999 Changes in 1.1.57 o boxes.Lexis updated with arguments show.BE and BE.pre, allowing annotation of boxes by the *number* of persons strating and ending in different states. Changes in 1.1.57 o simLexis substantially updated and groomed to accept Cox-models for transitions too. Example in the documentation and vignette is expanded accordingly. Changes in 1.1.56 o Typos in documentation corrected. o When records with too short follow-up are encountered by Lexis, they are dropped from the resulting object, but they will be availabe in the object drop.sh in the global environment. o The col and border arguments to plot.pState were not repeated automatically, so needed fixing. o More elaborate warning and error-messages if initiators in absorbing states are handed to simLexis. Changes in 1.1.55 o Documentation of clogistic is clarified w.r.t. likelihood contributions of matched sets. Changes in 1.1.54 o apc.fit updated to use the Ns wrapper, and automatically use knots located so that the marginal number of events is the same between knots. o plot.apc and lines.apc defined as methods for apc objects. They are just wrappers for apc.plot and apc.lines. o gen.exp example slightly modified to give better output. Changes in 1.1.53 o Population figures in N.dk, M.dk and Y.dk updated Changes in 1.1.52 o col.txt argument to plotEst was not working properly. Fixed o txt argument to plotEst can now be an expression vector allowing sub- and superscripts and mathematical expressions. o Relevel did not issue warning or error when a given level was being specified as member of more than one new level. It now stops with an error. o The convenience wrappers Ns (for ns) and NArray (for array) have been added Changes in 1.1.51 o boxes.Lexis fixed so that rates could be computed from matrix input to. Changes in 1.1.50 o Calculation of p-values in ci.lin has been modified, thyanks to Krista Fischer. Changes in 1.1.49 o Default of "border" argument to plot.pState changed to "transparent" Changes in 1.1.48 o Slight tidying of code in apc.fit. Automatic determination of reference points for period and cohort fixed to produce median correctly. Changes in 1.1.47 o Bug in simLexis (specifically in Epi:::simX) where factor levels were wrongly used, is now corrected. Versions earlier are likely to produce wrong state allocation in simulated dataset and not crash. Changes in 1.1.46 o lex.id handling in simLexis changed, allows for easier simulation in chunks which may be necessary to avoid memory problems. Changes in 1.1.45 o simLexis introduced. Allows simulation from multiple timescale mulitste models. Accompanying utilities supplied too: pr.Lexis, prev and plot.prev. Changes in 1.1.44 o A number of dead links in the documentation have been resurrected. o attach() purged from Lexis.diagram, Lexis.lines and ccwc. o Bug in computing AUC in ROC fixed, thanks to Karl Ove Hufthammer. Documentation clarified with respect to definition of test. o Bug fix to remove warning when more than one variable name was supplied in the by= argument of summary.Lexis. Changes in 1.1.43 o N2Y fixed so that local variable bindings are recognized (M. Plummer) o summary.Lexis expanded with the argument by=, allowing a summary by a factor. Also, the default behaviour is now to return only the transition summary, and only optionally the transition rates; giverned by the Rates= argument Changes in 1.1.42 o Bug that caused a crash of ROC when vaiables in the "form" argument were only in the "data" argument data frame and not in the global environmant. Now fixed thanks to Ben Barnes of the Robert Koch Institute, German Center for Cancer Registry Data Changes in 1.1.41 o boxes.Lexis now returns an object of class MS, which easily allows plotting of slightly modified multistate displays using the new command boxes.MS. The facility in boxes.Lexis to produce weedy code for the same purpose has been removed. o boxes.Lexis now allows to show *both* number of transitions *and* rates between the states. o stack.Lexis now takes the Lexis attributes "time.scales" and "breaks" across from the Lexis object to the stacked.Lexis object. Changes in 1.1.40 o subset, transform and Relevel methods have been added for objects of type stacked.Lexis. Changes in 1.1.39 o effx has been expanded with an extra argument eff=, which defaults to NULL, allows "RR" for relative risk for binary data, and "RD" for rate differences for failure data. Also logical response is admitted for binomial and failure responses. o factorize and Relevel are now synonyms. Methods for Relevel are Relevel.default, Relevel.factor, Relevel.Lexis, for factorise only the factorize.default and factorize.Lexis exist. o A mistake in estimating sequential residuals in apc.fit() has been corrected. The wrong model (adc instead of rc, in the case parm == "AD-C-P") was used for the basis of residuals. Thanks to Shih-Yung Su from Taiwan. o as.Date.cal.yr is added, even though it was removed earlier: cal.yr is a class for date variables and the conversion function should be around. o A bug in ci.pd causing calculations to go wrong if vectors were supplied as input. Correction thanks to Patrick Rymer. o A bug in factorize.Lexis is fixed. Now appropriately groups factor levels in the state factors lex.Cst and lex.Xst. Relevel.Lexis is defined as an alias for factorize.Lexis. Thus the functins Relevel() and factorize() are now identical. Changes in 1.1.36 o A bug in boxes.Lexis causing arrow-coloring to go out of sync fixed o Array problems in stat.table fixed Changes in 1.1.35 o none. Just compiled for the archive with R 2.15.0 Changes in 1.1.34 o plotEst now has an arguments col.txt and font.txt which allows the use of different colors and fonts for the annotation of the estimates. Models likely to be multiplicative incurs a logarithmic x-axis in the plot. o ci.exp introduced - a wrapper for ci.lin, getting the exponentiated parameters with CIs. o A bug causing unintended reordering of levels using boxes.Lexis is fixed. o Method etm for Lexis objects included. This just takes a Lexis object, and fishes out the relevant information to be able to call the function etm from the etm package (empirical transition matrix). This function is now physically defined in the file(s) foreign.Lexis.R(d). Changes in 1.1.32 o gen.exp was re-written and simplified. o Small cosmetic changes to the code for N2Y Changes in 1.1.31 o The extractor functions entry, exit, status and dur have now an argument by.id=FALSE. If set to TRUE, only one record per lex.id is returned and the resulting object has lex.id as (row)names attribute. Changes in 1.1.30 o DMlate expanded with the column dooad o Documentation for as.Date.cal.yr fixed o Bug in gen.exp fixed (It was assuming a data frame called dfr existed was wrong, but not spotted by the example because in the example one actually did exist!) Changes in 1.1.29 o New function gen.exp for generating time-varying exposure variables from drug purchase records. Changes in 1.1.28 o splitLexis now allows NAs in the timescale on which you split. Records with NAs are simply left untouched, but a warning is printed. o A bug in boxes.Lexis preventing rates to be printed was issued. Changes in 1.1.27 o A few typos corrected o Functions a.lines, a.points, cp.lines and cp.points added to facilitate plotting points and curves from APC-models. o apc.fit did not return the reference cohort/period if it was not supplied in a model with explicit drift. Changes in 1.1.26 o A new function N2Y added which computes person-years in Lexis triangles from population prevalence data. o Demographic example data from Denmark added: N.dk - population size at 1 Jan Y.dk - risk time in Lexis triangles M.dk - mortality data B.dk - births in Denmark 1902 ff. Changes in 1.1.25 o Added sd() function to stat.table() o tmat.Lexis has an argument Y=FALSE which if set to TRUE will return the person-years in the diagonal. o boxes() now explicitly defined with methods boxes.Lexis and boxes.matrix that explicitly call boxes.default (which is the function doing the work (almost identical to the former boxes.Lexis). Changes in 1.1.24 o countLexis did not take the "timescales" and "breaks" attribute across to the resulting Lexis object. Changes in 1.1.23 o A missing defualt value for new.scale in doCutLexis caused a crash o A missing default value for new.scale in doCutLexis caused a crash when using the count=TRUE argument to cutLexis. Changes in 1.1.23 o ci.lin and ci.cum now have a sample= argument that causes return of a sample from the normal distribution with mean equal to the estimates and variance equal to the estimated variance of the estimates. To be used to do "parametric bootstrap" of complicated functions of the parameters, such as state occupancy probabilities from multistate models. o ci.lin now supports objects of class mipo (Multiple Imputation Pooled Objects --- see the mice package). o tabplot removed --- it was a proper subset of the mosaicplot from the graphics package Changes in 1.1.22 o A bug in boxes.Lexis prevented the use of ht= and wd= arguments to set boxes to a prespecified size. The scaling of these is now also clarified in the man file for boxes.Lexis. Changes in 1.1.21 o Specifying period of cohort effects with only two parameters caused apc.fit to crash. Fixed by adding a few ",drop=FALSE" in subsetting of matrices. o Since as.Date.cal.yr was not used anywhere, it has been removed from the package. o A function Wald added to do Wald test of several parameters or linear combinations of them. It is a small extension on top of ci.lin. Changes in 1.1.20 o CITATION file added. Changes in 1.1.19 o ci.lin amended by an argument subint= allowing to select subsets of parameters matching several strings. Changes in 1.1.18 o boxes.Lexis has been made a bit more versatile for production of box-diagrams from multistate models. Changes in 1.1.17 o A comma was missing in the code-output from boxes.Lexis o mstate.Lexis function changed name to msdata.Lexis, according to the change in convention in the mstate package. Code simplified as it is now using the functionality in stack.Lexis. o A factorize.Lexis function has been added, it basically changes the variables lex.Cst and lex.Xst to factors with same set of levels. A useful facility when we want boxes.Lexis to work. Changes in 1.1.16 o boxes.Lexis now resets the graphical parameters (par()) on exit. o plot.Lexis now has a default Lexis object as argument, allowing use of the function to plot empty Lexis diagrams without setting up a Lexis object first. The bogus object has timescales c("Date","Age") but 0 follow-up time. Changes in 1.1.14 o ci.lin now has an argument df to allow for t-quantiles in ci calculations. o lls() function revised to give nicer (left justified) output. Changes in 1.1.13 o ci.lin now supports objects of class clogistic. o utility function ci.mat() added --- earlier defined inside ci.lin and ci.cum, but also useful on its own. o lls() and clear() added, to ease overview and clearing of workspace (and attachments!) o apc.frame now sets the option "apc.frame.par" with the offset and scaling of calendar time part of the apc frame. This is recognised now by apc.lines automatically. o Function pc.points, pc.lines, pc.matlines, pc.matpoints added to ease plotting the calendar time region of an apc frame; live off the option "apc.frame.par". Changes in 1.1.12 o Added function clogistic for conditional logistic regression. Changes in 1.1.9 o A function PY.ann.Lexis is added. It writes the length of (pieces of) lifelines in a Lexis digram produced by plot.Lexis. o plot.Lexis now sets an option "Lexis.time.scale" which is queried by lines.Lexis and points.Lexis, so that time.scale is only needed in plot.Lexis. Changes in 1.1.8 o apc.fit had a bug in the specification of knots when using the argument model="bs". Fixed. Changes in 1.1.7 o boxes.Lexis has been further enhanced with the facility to plot rates instead of no. transitions on the arrows if required. The code has been tidied a bit too. o The man file for boxes.Lexis and subsidiaries have been renamed to MS.boxes.Rd Changes in 1.1.5 o boxes.Lexis have been enhanced to accommodate two-way transitions between states. Annotation by number of transitions has been improved to accommodate this too by always putting the number on the left side of the arrow. Changes in 1.1.3 o ci.lin() and ci.cum() have been expanded to accept objects of class "MIresult" from the mitools package (Esa Lr). o The boxes.Lexis() now gives a more versatile piece of code, which computes the text widths and heights. Changes in 1.1.2 o cutLexis crashed if new.state=TRUE and new.scale=FALSE were specified. Fixed. Changes in 1.1.1 o Functions stack.Lexis, tmat.Lexis and mstate.Lexis have been added to facilitate practical multistate modeling. The two latter provides an interface to the mstate package. o Functions tbox, dbox, fillarr, boxarr and boxes.Lexis added to facilitate drawing of multistate box diagrams. Changes in 1.1.0 o Two new datasets DMrand and DMlate with random samples from the Danish National diabetes register. The examples from these illustrate most of the recently added multistate stuff. o Minor bug in check.time.scale was fixed (misplaced parentheses in the argument to any(), causing a warning). o cutLexis introduces a new timescale "time since event", which has missing values for any follow-up time prior to event. Hence requires that the Lexis plotting functions explicitly discards the units with missing on timescales in use. Accomplished by the new function valid.times. o cutLexis now places the new states after the precursor states and before the other ones in the factors lex.Cst and lex.Xst. o splitLexis uses the first timescale by default. Which in particular means that in the case of only one time scale it is not necessary to specify it, so this has become acceptable now. o Vignettes has been updated. o Example for ci.cum has been fixed to be compatible with the new survival package as of 2.9.0 as announced. o apc.fit fitted the wrong model when using parm="AC-P". Fixed o The axis scaling of apc.plot has been improved. o apc.frame now by default plots a reference line for RR=1, this may be switched off by the (newly introduced) parameter "ref.line=FALSE". Changes in 1.0.10 o Fixed parse errors in documentation. Changes in 1.0.9 o Thanks to Mike Murphy, Professor of Demography, Department of Social Policy, London School of Economics, a bug causing a crash of apc.fit if only one row in the model matrix corresponds to the reference level was fixed. o Also thanks to Mike Murphy, a much more efficient calculation of median period and cohort is now used. o apc.fit expanded with an argument allowing logistic regression model instead of a Poisson model only. Changes in 1.0.8 o tab.Lexis removed and replaced by summary.Lexis which gives a better summary of the transitions and transition rates. o A bug in ci.pd (confidence interval for probability difference) has been fixed. Changes in 1.0.7 o Stat.table data= argument fixed. Changes in 1.0.6 o Lexis now converts character values of entry/exit.status to factors for lex.Cst and lex.Xst. And produces a warning if the entry.state is defaulted to the first level of exit.state (i.e. when exit.state is given as charcter or factor). o splitLexis gave wrong results for factor states. cutLexis gave wrong results for character states. Fixed by letting Lexis coerce character mode entry.status and exit.status to factors for lex.Cst and lex.Xst. In split.lexis.1D was the problem with the factor states, they were coerced to numeric when stuffed into the new.Xst matrix. Now states are turned to numeric before the call to split.lexis.1D and the factor attributes re-instituted after the split. o Added transform method for Lexis objects. Changes in 1.0.5 o Typos in documentation of APC functions corrected. o cutLexis updated to handle various instances by MP. A few BxC additions to MP's code: - cutLexis2 is renamed cutLexis. BxC's old cutLexis killed. - count=FALSE as argument to cutLexis, just calls countLexis if TRUE. - cutLexis no longer returns the working column lex.cut - cutLexis was missing the attributes "time.scales" and "breaks". Added. - cut= is allowed, simplifying cut of split Lexis objects. - documentation accordingly altered. o splitLexis amended so that lex.Xst is returned as a factor if lex.Cst is a factor. splitLexis crashed if lex.Cst and lex.Xst were factors. o Lexis now allows omission of entry.status --- if exit.status is numeric/logical/factor, entry.status (and hence lex.Cst) will be set to 0/FALSE/first level. o Lexis made sure that lex.Cst and lex.Xst have the same class. If they are factors, the set of levels is taken to be the union. Changes in 1.0.1 o cutLexis now works properly - no it did not! o cutLexis now accepts a (smaller) dataframe with cutpoints and states as input. Changes in 0.9.6 o Bugfix in timeBand, crashed when type="factor" was chosen. levels was given as 0:(lengh(breaks)+1), changed to 0:lengh(breaks) Changes in 0.9.5 o The Lexis definition now assumes that entry is 0 if only one of exit or duration are given as a one-component list. o tab.Lexis is now properly working as a method for Lexis objects. Changes in 0.9.4 o The lex.-variables in Lexis objects are now called lex.dur, lex.Cst, lex.Xst, lex.id (duration, Current state, eXit state and identification) o An extra option states= added to Lexis. If used the state variables are returned as factors. o The utility function deltat.Lexis() has been renamed to dur(). o state() now returns a dataframe of both (entry,exit) states a default. The reason for this is that lex.Cst and lex.Xst may be factors (which actually would be the logical thing to have by default, but it is not enforced only allowed). o entry() and exit() now by default returns matrices with entry and exit times on all timescales. If only one timescale is requested, they return a 1-column matrix. o A minor typo in stat.table corrected: in the definition of the quantile function prob=probs changed to probs=probs. o cutLexis() bugs corrected. Now works with split data too, but requires specification of censoring states --- i.e. states that will be replaced by the new state obtained at the cut date. Changes in 0.9.3 (since 0.9.0) o New function cutLexis() to allow cutting of follow-up time at a specific date for each person, where a new state is assumed. o New function tab.Lexis() which tabulates records as well as events and person-years from a Lexis object. o splitLexis got state information wrong if breaks were not unique. Fixed. Changes in 0.9.0 o effx and effx.match updated following Tartu 2007 to avoid attaching the data, and to correct the parsing of the list of control variables. Changes in 0.8.0 o A new function Lexis() to define follow-up on multiple timescales has been added. An object of class Lexis is defined and a number of utilities for the class are available. Time-splititng is now done by splitLexis(). o The old Lexis function for time-splitting has been renamed to W.Lexis for backward compatibility. o The function epi.eff() has been replaced by effx() and effx.match(). Changes 0.7.2 to 0.7.3 o Icens is now able to handle a constant underlying rate. (A bug in expand.data was fixed). Changes 0.7.0 to 0.7.2 o Bugs in ROC fixed, and the functionality of the grid option slightly chnaged. Changes 0.6.1 to 0.7.0 o Function Icens() for estimation of rates from intervalcensored follow-up data by Martyn Plummer added. o Function epi.eff by Michael Hills is added. Estimates effects in various epidemiological study types. Changes 0.6.0 to 0.6.1 o Coding errors in thoro dataset corrected. Only concerning dates and status for livercancer diagnosis. o Lexis.lines now allows col.life, lwd.life, pch.fail, col.fail and cex.fail to have the same length as the data, i.e. to produce individualized lines and points. As Lexis.diagram calls Lexis.lines, this facility is also available through Lexis.diagram. Changes from 0.4 to 0.6 o ci.pd() amended to support the Agresti-Caffo method for confidence intervals for difference between proportions. Newcombes method 10 is still used in twoby2. o apc.fit() added. Fits age-period-cohort models with a range of possibilities for parametrizations. o Functions for time-splitting at arbitrary times and at recurrent failures have been added: isec(), icut(), fcut1(), fcut() and ex1(). Eventually they will be superseded by new facilities in Lexis. o Function apc.plot() to make a plot of an apc fit is added. It is just a wrapper for apc.frame() and apc.lines(), with suitable computation of the paramters supplied to apc.frame. o Lexis.lines(): pch.fail and col.fail expandS to vectors of length two if only one value is given. o ci.cum() aimed at computing cumulative hazard functions from parametric functions for hazards. o Problem in print.floated() with printing of objects of class "floated" fixed. o Problem in ci.lin when subset did not match any factor names and diff=T was given the function crashed. Fixed, and documentation updated. o cal.yr produces objects of class c("cal.yr","numeric"). Functions as.Date.numeric and as.Date.cal.yr added.

    <*E}+ z##oVty6E0w؛o;eޕE y"_zoDFY!S{> 6<ѫU2uY_mI]x{O%vF.%7 u|CjX>fʴu,r2QUo U7Nګg`=/}5X_֛ft] #cPX{ys3Dʼ+wGD?wadg6C߰ܽhn3w-2n $/s:b_y?Uyv=# '"sf侲"2}Gd7%/bl۱܈\^&C0i~ﻢ=6VӑbnwIߎ~m;=ke hءӏ—{nuVJ4'T] l>v/r[RYV*,#cϲ˓ð^q}6D֫/pL 'D_$#.zb=[y[u.)ƾXߚLZ" :-!y]cAS!ꐵդo[FekDau׏Ѡ4AމTNv/Ыc XK3h*X3ykU`Bb(wx؝5`02x'(4এ΂w~E\[dw.6/@~J \G$cjbG[|%txT_fceǣLD"( *GSMG=#\ 󗈡]W}A=@Kn)fV"xPΈA@]U^_K{~w+״ȉy۽7,xjQ<9pi߄qh=-މfrzp 14jn;G$W[EQ,s9u]ܪ/AO8ƙ*~힥뷻!N3m/Şk_V>vI9OFyionƅ͆;*6J!d0F^Pႛ'.☧r3Q8ç id_G{`om#3 Ov7֕i}92rW&w/aF{*,/zܷu3;60fĘRXƾS1~fE?MRN;"Bo8 3b_,*|߿_ə~5 gJ*vX#oGF~@X&sI{ľ qEjΥ6yu"Ȋ}C`ni`}a N%_mXv#X|oSy<,n'z6,zWTbG1xI&\@mф":蔇Dnn9œ=.~-FS\aȉ$"'MFO>fX'˼;:]b8kK2,W /uvҋ<8m+|KM&r$IaMʜJk`B4uaIP=YF|s/@ ]E 1݅֜E)eGC#e|ြ: ͷ]$E㓢fYsE~~%R@wfXvy} ;a Hcч};gߔ(jK&6/F#k&3fsTϸQDx/ iE*yoJD&(^!泌>9^a0[^DdH>fBV,QHâŃeh746Ҳ3Y?~tIQhm~edE&6<ifcL1,$͵ꡦJi9CypO#؆ G'Gk?9ie6DP#c;x_f,3_5)dN[<&؟n6%mJ_n2DR\?|~YC{,&bK 0O"o(;Q>d1׮dg#g4.|%7旆_LOy2QS3"D64Yٽ- ?ni02sM0W~g3-yud3QbXs߹U i62eWA;gW&1l!)v_y#OJ1yeEFy>)-̱Q?_GUa2a{}a+$@삪D> [ca03`KxU?dYxD1ngk 17禀Sܞ5"ڻs=ݤi.!:?osQsKbH;/L Vq2%r.5U֥m̫I&̈k九q;Ű=}x`6yrG+!f`I#"}Y+j_O;DLB=#f"?&ȇ]%y:HU1ȯy{ݐѫAs<}WBWe b-aޝ%SDPL/ISE|:kyGb4ևφEWc/#a'C&#Ĉ$>  |ݘx<.ͻK!{m%7gE]vMPj]*S~=9%CuT$X+rR S/t󰓟=Ksתq!rڷnǮ6",_mH4/:LIV=-$E~!vFZNղloߺ]L>#j^9JG ߛ#{Pfe{2쳣mLybWO!_[D jfV.Oؾ$r$1k=qdy|}}g+s{:a(wy^WboH_ѓN}s4+m=X&Ϲ[VyG%ʋ=XSo\ҷ`mՑ͌.y|%eQ;]q^G3#~"T[ׯ"-|gG IuH)W7*\X?wW /³1m+ayc!be?²vfW\8c}O~:^د|>Nux]E =ģPC)#^W,-Ze,yþ|s_x30%La2ܟ[yǝ2k7mc>qk6G0SU5i>ww]f\72N1!çΑ5ŭs;hw{cafr8XW:׏]'gm6нpr{u\-hırg<:8x*{I6?v47" nEHLqխ>ūX͢S]kq`~:~1~*9d`#x.ƆW>ٔZk:aOyǎŰc`hNu!шEx*Ї]}˼]i]f @cG5M\, wfʈ_1Aƈ3Iư,ߏW(w~ѻ`>N n6~t.v:#oxC/~sҩx3Eƾkb$92^3e@cyKl&'ld:?R [Of2`i /I q}^%~,`R`&l7V&֐GRfn$c-X7,L˗bEW0l~X0O[:#lsp;uomfȍ{~]n{n\va25Ia.fkec}džb1,Ì}%A?XWٻ6c݊m4Rtݭ:-:~޿>|3?Ẽkڵ&fUU5_c/Z7Olwjy2uh[ܵY,څ{YlXah;-34/ͩw`ڏ8@ IwO;Ea~iwk a_\en.oa|z)n`-n>7f[:f268kwX07?ol+r_./Νx-+0q7/!;~Kqq 2.X25-jubu&g"pίJ2罫|'zs?Ev-c~_0#N]$Mv_{>I;-G 29bso {2}Go: [Zrv#`jc'yaSϬ>WNz+ޮk9ث<]XE C^g=a v@F!MA돤(OG 16&c{,3\K{)132f}?(kטe1o`71 jOsؖ|S[f ]ݦ$C\whWp'FCK}p-t 76l|(#nK7V0ZQ%P!G~oqN_QaqkJ?[ 7x Lus!g߶B?DLeUOTh[O>\ˡ׬? z ,#rs?Y8|L;̋@nJgN,"w(wԹݍ;Q 7} =:Bnim <[ȵ~rI!kwsOc/w9b.qwKVwr;-K Xwnz5w+u粩~lpIeŸLy#)=ܾ]Sn{=+5 T{3.p]RYB,\]ma4f|[NFr`=p~my /TL|}W }0f(gȍe5nhV1Yp{Xc!͘ap{ ;xεS9xN/ΜXg)lk`;^sIm4ټ g|q3̗n==ݩ|?#YT,ⶽOSyf|qA}0rqbaǝ{ۺam{Cg[{ܟ>&v*+`xjA;_]o]w8 :wwZZ (a$uO:vԤn}TḶ0>.kDk\+UXօb}y%줺^?@n?nƌqu'ڱ쭉NqpKMϛ9nT"E0n^/ ԇQ뛊gk?27>-"N) ٸPMx',sq_؉c]p/nWz V7v3/rO{5iuնМ/V3N7mOQs9P3~?m4GvR~qa0VU#5#~? vj+P;}As4<^^Ou9zlϏԌ3Dsj+卑K }.瑜y+qq|r}k5?]q6_"b4ģ u ~?'߿}?D Vy9Z$~J!׳4%^:ZOq_Jy&q~~P[)ϓKRN8j_;)w,v6Ac_OگGRI)d_A*5QK9+++WK0Fӗ>OhΗױRϓD~)}jRl~oTuGGƏ&,9󧫭)Aw~-nꩭ&F_mӿ,OSx~sKwjqvlj\O7^O'Vsxm|i^sriy% > oHGi4!#_F/H%q'%#RjysmeW[U6V?ޏyzBK,.9珗#'ߏ俤__ާ$FIOϿnZ]?އH#/ROؗzAꃼ.u/yRP47~)/C<8y8%GӗzVޟ&CK#jww|'/hyqi'_}![V|jɵ~F/N'M_ |üx*]+EoqRNK=f/~8RJ9$u/y5i!\%W[)%e_mWm<O/#vV~]K:_񥞴ֶ;~ ;=~x_ROqޔ-ǩK^Q%] qCRH*msM__ihx߼uZʿ55UO^S~=~_RնfzZ\jZ^P֚֎_ik/'ȼDWedz]87 H+O)'}<y/9$$RHH,? Ǚ\}ۭV[+z@_r^ )}U[Mg%ϗq"l34Ծ?S~G^v(qR僨h:j8߭W/M+q9?o|x|{+|&OE% >xC/ m>Ik8)48R^hF^ƙJ=&/V8ΕPK="Ҟ/3^swr=Z T[7?@Ə]O^_n+Wn~%&ߗ仴ϝWEݞ?Wyy5v]T_9O>[#mޫ֯O<.~鯎8߼_ݏv?Z񚸌o_yyX?? j׍G}m=9\r]JN^WmGu'B^WڑZ?/ڗrN7$vyJE^WKyuԾWK^MUvx^DڗzLi t[7WةIdRK.N>co}I#^W8*ɋI}/W;k_~W[W[K~?9ʫéo|N?']=wW7O_OiA>ٯm~m`|5k~ m`O~gpr}q~ɫ?%Nva^~א<֟.;~<#A3~j+%y]~4>_$UO$䝯9__VjZm&<5GqmOy}u$o$ZRNhYiC!CΖzKI}"㓤܇E _Iy.Ks?_wW'j_;zsK} ;OޫH!C/RH| y'{Ⱦzϥ!ڗxDZJ!y/m4iWIBEru$繞Mj\?Bs_ᅿ{:xӵ_|ϟhd<)%V[:kk!yS?"yvfi?J(9}I;V+/:ҟ #圼o$ސrQOqxyJ$pR[_@2U'>pT/qY>]![/q=/OQ=_WRH?Wϗz)/R?RWۼ^uioHCD9/|Ij,^w]^oQ__mkG49Ny \rB^Gy~j_%iJ;W5)G}Hy-C<}pPy<ܯ81)gey/Vj P;Q}>vR֚8ELo?$FޟϏ}<I>QnA+KIJyg/qykڗ@߆ڪW?ͫC?_lbkG;_s=~WZku 8A[]^Gw:zA ;˾kHS%/}GrB9OdR?HJiכR8/tVuJFo򾥜\OI!EIJ{7<)ϝޒח?ROJen#/K"q8R%LVC?^lvC6y|m0R'#Vc G%8[iE0F:s!,B\XӁm< `\Ҽu+a a1f;a[~?[c/.JL駂`qc`/=iX]}،HX8]{Տ9`uOpӺܾ5-=kxöA5KfRgoar&g9k7ZMԽNo1wmYw0ŧs.'x˟us;gw~ ol[n}w+\S?+Ű%=YX^hwcyQe~!(sj&c;!XffcAIk/r1_4c:sA E_3ð6O; @mhi쐹u1*y"ڎ>2 \gWc#̷_y~UjP'wgDi@'x'XERsQ: "{E_-{q1#x(DDy1akfZхbBHws , 3Jn0w1-B^8i]v>,^^?}!2mj4 ! |r !0U>"iP0=}.aWUnoχ£-O$KgɅ{!Y7ـ7IJS}Q{a^*v,L^gamަ)p89ֹՈ 6~KˊVB^= au cڶ(ֽy}Y`;F9Y ^ص( ޱw>/ʌ@Oja-#C+.ڨҿQ9K-^y`NOC+tJfa~,ܣ<&zhϟ㩀֣C"ѵǒѱSүs1>p": iT @L+k GAJXsw}wʞN\̏{O̺^-0&, #rDcS!F?5İmm^v \FGKZ#=He,Plչ*JnʄY?ߨ/K }jt_6lbZy N5Ҕן0locC`ZLK`uLа[OZΧa;!Ȫ&=-~_5&bg*qmoďU`߹enJùV_S~n5s w Tv%7xY(&\ }S9psٱ۲x3 JҺ1HĜinz`3j-Tз^Gzid A4QDii%] {?J@ixFt/wAba@ԕBnD`iq5 Lm7޼D^|mxnTr%fټ{ID_'f-DMF0܏#؄Cȥo_ODC^[ƾE6@byeAxU!oV ZoDڇwl"[8y6Q;\ 1QGn3q5"-hmBDPyJB_e7q؃ʊqzXEDtrg"]|ZhQvcXN\"na5DwwGq H?/Di+R\,H~!NYo!Mq@'Fe0Sb}1b^rw4jo;xp>|OuzxIGGzbƬB DS&kg-1|-*`A0Iڊ=U!ó10}caa۳ѷb&+ij P\(L5U ,z*#j k!4:+Fվ|l|90 xaK^}F1%zobDM"'GEͯܟ / .C7tkM0pgbˋה9H5lR+/cz7|](O.G%ccc1Q[ü4 `Tƽjk9͠aX)_ļ\>' XM1$a${0^i%?8+Ed;aG;suـ W~ăCI'-fB[FQϾAwr=3A,mZVE.!7@)1B̗EOhgb7mZ:N RY{Ŭ_-`.ðR g< \( ؖZL#P 2 "un%O#YJ  '#6geMrSNAς{k s5ذ+D89!XOc[wjuR7Ĭ6AH -b bh Cd  f.BI,ܶf~"Uich?@Oۅ]:f<i?CT1n:!jwq,^ D72#N!f-=j]>'qC[K"z8q}>bJW m/=^|gq^{)TzuDI<}5j<| !xoWu/]9ugb`ƝŒQvc>ݻĭ~k?5;~k$G!pδ|?fT {/1^9FRkFj.f3&ݤ!&*d2 O󾷭^suX k5Ttky#S9/:a8+h1%;#@&:М)(nBrP*#$9Y𷹆w~<փ?{\x@'&GAFh;mqVhuS@ï}F.g|G~G( 2E8ti>^L|=R9XlbfՎπgB$`!ãN`v `A 7fB c8W@S>U|ia.i733&,| 6OIXcE[U+.B;r;w5 <&>!g_7 /;d(ZV + g Ԃm/]IˆY6}+<%r/\K)g 0x9Ee#+<LkP3@^[z1!sxq&k*5rٵ3UJ0i}10&Б08#O$̝103N$+YK}\2ڻ Xe+|= l^~=*xWfWXErTD"fĜX,孝g*ɋ1q- ~ǟ_(;'웟E3? ݲ91I!= e"4niO7 + (K,,$n?$&a- b۴ܐ&{,7E.|\\,fg|\E? s*{B 烸\}AAtkur)x7fę/L~-ήO?x]@d٣BGKϜ5Edp o@\oy"퍽}J{e"Ӆ&Uk"*~7ۜS3FlW܎o{-B ?^oBWLC{Ѧx =9\Do=]ODt@IYms~DmA:?BW8 kđrdkbD3fn{6FBqXXGse`rs]Dr f_qDpm,-3<8GQobnAڍw`?ڀO!0nAxq5a<4L"^R0%6/%NFA&3Ϟ+K1FlY6'ڀb@j1{-~K;΢‹A+sъa+x_h AW 54|DsjXRaF)A LEsv f*'#?knT<`]hD^} c]1ݬޢ_gߡG8!U}_q޼AM0h110 JOfmS <o :Yf{rsすv]Xoal~kCg~S.ُa|z *p&.\#aDw'ffv'p}aǨ$`/Ą\M1h/Ffӄicb_bz7x&v{VޣvLʩ!*8U? .u=DfcU7N=ݳC" ft"`tzY35cJIDx<@֩pJ$eѱEo }Q5H<=4ё[3{3sx̘Mm T 3 58|_L3i9?_nP~w[fLxz hZZȞ3p?bO!3ht!:P _A<}a[) @3>bqSiM}/=KC8F p~If'1݅zBs> 1A; )R&S^ ED@ʝWf"@2SsD炪 cB!w䧐v,Ḍ_;R^oFj_>!q*כ9pe"m?" MHK>F{ Zg@Suu%+#ԂmSӑ8$ Q }hD=ǕyՆcC QLCDB>o;qֆ)Gd b$]v0uCL҈]F,y4Qf#!>x%ĔE4a;Ļ"~7Dh+PXpsb@ ,>[ID?#t ]Z q>.]TvC}@`=|b/"܍+iB_u\ދ`;#,1+~OzzLӮi(D<Ӡ?LjCz-P'/L<](0l}np=u s3c-'6jI-c_DW a Out"m6;Å)& Z~>AgEtB䫋"׭QKܫ&t)`LG3 )W9(+&WZuXS9OÔhؿۄ^6 NCt!k"-ہ>g)'2z #M>_s*usB8B1mB2p!js I1\1b @`N/ cF\hQ7)R`Vďug*!O 0='aP,ȓ/ȅKsqޕ8jTXsmi>YXV (êy䗰'۲3Q/B`t@`7ߓ[X*sN,9|!}B ru =6CjǸH;B:ޓ0CZ+ag}_Ri!jq !;QD9xEmHsH~JpDw < >E~>$o!Z\ߐГO'^ކ~Cu53d+"q!3D{U$X v=[^ gU?C1ұvSLB5E5 CDmQD(PgOϿ=x2b1`6Ҳ b6_eD̡Qh3hGM(ў0cFY &˄8DgHhSh^@Z?Gh q= N3rePm ٿY`|`~0}ì?E  c#u4,8%*f8W`R;iW=i$vџ In>l9M 2'R&:x<{Ri'&c'`bjk~# cp&G8 X,UNC aj7 CZ. oh9g)z;shJbxƵtwX̸pOu)*k C"+5o#̭ `{l-wvW7Ia!IەSy<g`:NmϮxtR8d|0d7 #BC Wf{0&MvpT+o~shj"AW#2A!;M%Dn8-qQ! X >tƓxp>xXqwP` WVio&@+b>uUPCؠ"?C:]qx&*ZwgI1}PPXc/k8.7Ek12-cȭLz~tZ7Be_y3Sr@(0.l*{xCoj` _ ̈́a  s=H `Zoa|3y#8iuaUht\U_,~.<+0n%=~w9mvN"XM*1Qa[k`a5,HykPqCT  D8&P38cY8608'3*sH T^+8syW1Hgy)g3poqe3x%S7a=PIv` zeKΉWFB@TĜy\Q({KI:=W|iN~Gw5].g: tE+|Q^@_3g%-F`]zwih),8Z3ɟ@ko[`au4&VD \ fߺQGŲmp !)? z8 Hs,O-.a"y2XA#bO3+?qygXXZ H.E D$xW2L["0FK' rl%=dA-ɾH?ۓO[\HGz%2F C\1G[ n؊ 5jvNg5 b ] -כ}H3%rץӼa ,wqanF<] )&#>#=ǐ&b'D%NnuىY!9;$l!~نo 9H,CWf]Kl-_&#ցD]eLٍq%,>Tˆ+p,Y{_z z3ƂӌۈhOOhHp]S{poS:xsҝ ;0èXS_ًq:ߘq;1Օ6+sG^*%<3.BL${7`BuLV[viEZתcME%%췻 ølE-~ӄ@y栽}5-o3Q#ٰިEC QiSтb~:(` Mu4(zzaܨ/9z1]}1~S|_@%d1?Wn|aoK%0,*0DG~lfs]"!_oݬq30K{6 Sµ[X*<`/`դq|`#sӒ,ўqhG^i KlTn1Lp<4e-j:Aq+yd<3fS8!-aP~@MtK# #b;!PCQtY{"GvB>)4Y09~# ~ o(Cˈ&/c0Fќ'{nD6 Ed f^H~xڮMU{# k̐ %!+4Q$/Mod0@!RnCܘDO!^:!& a,6BD= Јw*26ӎt]Yqv3:/chF`C^җaD0^}3`4Gz!WX pAJ%=`~=$W'NBBDD;'&P G|NGB $s^BB ᓈB~!cN!p K>r0bFCs=;0O~3Ӈv B =TALfj )c~7C?æ 0&3qh0XG:]X^ڽmNpVhx; Cqy\X!1Ǝ8{J|'L;F(qpl2 >9V|d,؉ïvJyhTEKjTt]VJ0ӅߡP(#~/`n=Tf`Thpd鶴1F3e'rM RstxFJZv`/~㘻ݛ O[cwwLjd`p0~N^"Fo8at4liq/vE* s%>v$(a1V7w0Nὖܖ ,S~tyY 0K]FaZ8vv_ú E/1?+|DŽ"v0cxe[,'RH>hX}$b?>f_* î&b0}ô0p O4rX.G1u,4V<]rp]xVOx&;ӔVEp?N= f]n O+]̌k w7LG[^´֜05!be̻D{<3/}|2^z(~%3O%p]yv|}hC]XK#Xv"CLבҁr?O0fEG ̼moD`hD xE"yz<Q B<}9Iw,zj Av s;5A+#["2vY,)"}q8I7{tr[oPruqB1 W"0c7B@E5$$p@v4{RҺeu= 3 BH-EO"Q8XW  Q[Ov~(P"5 اKTq`#p.~GISd:T BN 4*|Ί۷ zO)=(i̕9롡!3uКAj4fHT*ё[4:3\u@:0iU|gɾJ+S0OL{x.0x0bA==L,Wʹ=]`=WRcf#̲1Jxn(!KKo&:?06ŠI93f5j;ºJͩoj<{*f)i#ٷtgzQnbn)Ka~}ߴR貃"wDUo2G8_u0Y"0<_"|;5V#L-xS]! 7b 7"j`Ay8DQ~g>AqĴEK&Yq;RoP%#E GF *K`7dl%. I FaX꼊>HxK},u(cAՇ:>i=4Z\])C"LgxКݔvVty 7" }?-JF0g0a02K8hϗ0ü`f\5aD C/+Sob}[X +֐_*땴/_`o`5yG`YX``0Jiyݠ61ě}A^!l|l8lF{*lFiu!ԻC`;T|`{RG{ ֛GׄU*j`7r$5N ${o?k_y ԕyMv/̽]C|;9~d;U}T%ܖ*cqʘ@9>ٟɌ^K?fv1 DT!FbAP~/"?ts,B;2bӐي!pS*"!_8”<[[<%tK m"WyHIp+^sD/h u$;BL'1P +27FT'BtWK!3IRpx9"_wI3z]?!oXޖr:Ңt+0~׹+2( WaE[׸ <僔Xwf܆QWW' c"7VxB&̷)wދw+.EC%TCReN| "1<ibѸ&c^CΏ~<'ckao+,5Jo*kF}ZI]IV@BJ^&#.M91!xyO5ߓmFted5"~9,~1J eDd"eoHA2 ~* -änc1'޾~gz2Až/.f&s#]hGDuxk*:zԇ[$wB_^4Ӽ/x#(n@ ȸ%D¤%F`sS.OhW %^`"&|4X2u uM.~օ/B %߰o1?+ VoӃ`MVB[w߻!9TR6q` sW`_`D F% ( + YȰNDFarM LV1y#pozgG yt Y%Өb>{2$z1^p%pK3,m/̎ Ĭ-y(p3]'^ >ShG>wۏX[~gQB.y-|ۄ9xB4"I\xX@D2)N1 7 9b{ҿS`f'X#„5/*_tMH{HYIW"O۵AJ ,4a~ĕҺrE{׳H/Y(aJ{9∧6"ӏ1įbMp h`bg`;HK4j|fHyu$̋#m6ug3cu}$dz|5ȴfV3=722*+nҞGfIWF`U5誫S W>zcIHӟ~ხnGKs3dOi~ތ_ڀn]e:ZAHkO,=#F6&$ Úw֧ʐOUJaQ]B91{ k{,zx}ެGByiߴP1N `][C%c&OTß5K><lǜ<g5f[q~o*ykNxU:x#$^ MO 3- "fyw+b 2e G &09qvS[[NAz1#'~䡶 j1b_ "Q wX0 [-;cZ;,5oƴbn. A,[Sy{,A',̛~y6paOpa`9O߳ln|oq:F英?(z JxR< )Ѡ*CgQ}I| oRCI%eH4 #/uUE3% \ܜ.J tgQa9ʳgGrSOq>@%7!Ϻ F(GGcֺÕ8\e}0QC0RfcLy]]>"ۋj, Xe+7;~a! 8~Oe@^8`B9\(p(SxvI:{Nq'_`-)1oy0 k8}(J%pK'ul,g׿,&͢]ɔ7~p0 l(7PF0IS,4|S&_6>r{ECP`^<\碑^J{:[O)u\NO-_!n=H~ϓ|vYHwv1$"F#',7rJ!=,5xO\'6Gy:od_C9'o8'VȰd\h%,BkAבI) 4%Vp=AjuMHJ?tS,"!i.LdR$#zOF|_Ƈ:#)V+&7Bne!.{H}3bq]Ƃg ^Ja[Oa<"/g=Y; l3@^%趜 _: Qɳx7샕/Ph%.k%\kׇ?A5tfl'3N z ! j6u`F*uhIXSY`O LA'dFIc3ǰH= W)_C=>}P=>&7@ Y.cсe7Fo/JSu 0P,`S fL;= gZO12v+90Qo`߱F!O͙H_cj X!aQޘӏf]U=&1. _Йv 8^;E $c%]0QRNp.?ӡt[\8цi<Ly8PLGIHC݅yFHc?x*/6OBLuf(y0Ō\!;Q˩9_%ty^7|o[KW)s>j 5wQW-ȋ|~{9ZV&:p-O "bh7-@q̝_@Nq=D_]<oC.<#zvC@F> T}ꇮ{tiWHG"RbDފºix$թ[ܘfq e+v ,Jfaq7,H=Kuqfi1e;lΎJA?C),Ec3002ʲP#,+X]h:ƺ,\%h\[#jaib ꡮ3]N~h2֙|%wll_[\+S$aE8 Ȳ}4󶉏XQ듎 1]ǒ5:tG]0ch"#%):?_FMEZaf\4C܎/$ Մ\$ERƢj)ƗE3=}ĥ&"TA8%ty+'/'< 3,"j2ϒs~r1c~xxMŧ6/4bɯyfpfy? {8RALM"s&'I+Ձ,ƻVDu`>LD? 1JWD % )tB;@*sH d荈EYk)g-bu0#?aidʤɋF& HL۾kodcX$!:,[՞BR*z`#ȓb<$,1%ޥĺ^g pcW/_p!6Cq+?j9w+1 ui_`UY!E=⪽XlO/&g=PX}36wLr3m&6$ccb!džc+ۂeμX䊇55@:I{3K[Ѿª_ hX|XN ̋ouD3$ _倬ԏ^1?=Xh+=[tyusv M^~GJ D0AR+f]J>f09oS<ɟ} ;DOߚc[D;Է'DWaD`z>s;giT#N/ 5t:-0npg" /# vtqA1J\5tPMgLMښ#QtzեEpb.꡾Vxz@[%|?Y(n\Аa]KxmXU@tSuН嶡Ô!9`h.C;(͎5Q+8 }y&QtRp cƉ[qʿI1 `ؗgê=Qɮ,uyW ^[>N1>S XJOԞ\fvcL}F"&3tu0&3b6&%tSn׻.J>dz>1Su%`je΀cڐ%JՃϾc}p3p9pJ\{n_f7EuO,@;5*wXޝqȮLM,8ǣ^Kq+Nے(l<,WS*^ \H WPcJ]>p*:1 JNWwrTD`Fp`aGq y3сe`.?0E+Z4;[[g'^HP =7mx!m0ЕC7n<ԫC nJD xxt#=\s;zϢ]YҏFz;_#AٮL42Lq^Ę ѣ2 &}>b'6+}oSX)u:i&uײvpRHZ)"L7dpl/H9:? |2aQNxCGS7LKxLQ ߃ [@~"3żAb0NAb滗Òzvc}HBO$3+ BV]o4oGV!хau 8#*o%Ŋ_s.V'\ybm}ǭȮBBCn4 B\$ƙXFGqlGG,K8<`U%Tnvgo9j:.)8j'Vbظ55Ɔԣ/|S7 'e2ν-%V~f|Md{Z:{>{}d|9d/iC'B݋DpFf]_j32ۦnnH" 'Ɖc%$IXiEBH^Nv1#w!jeF]ˈ/ )ZCҹ]ScF r^z]ҏiޘn0ee}y'sơc xd^)8vR&J=Ұ|*ىޝ=Es^H$+[M`@q50}jI',Ч(%i&栖⿶F=FWV_p-z2;RnF=#Б;+q>{+h6YZ6#/X`æ=5u2|N'ԣd4Ffݎ0 XyBЃuca&uk0W3ǩ?a_/- [ Ƶ1 8/&v#c1#8IE0y*i*[ w`7FL)Οl )ge pA>\S/k2pbjȺ`u1n,{N {Nc2} g8־>C7vXڔ8KW/aYg?Ǧ UJ7n>:{JtQ\bjХߪbCeKWuu(?c=۰* `@1XXvXe0ŒX\>1^r';&DXwB⏍C6#Ocgf"/ر Hmr?! vŽ3D @ QYrWf,*ڮ8g1?="2ϙNĻ z1@6M v໋y[pyZsG˔ޘ|8))쬩c9Bʕ+WU@oYᡊc 7t؏t:“G[IzwXO zP[h?W}[nݧNo)/[JK+݁#OӺ8E^EEpi/data/Y.dk.rda0000644000175100001440000017662712531361106013234 0ustar hornikuserswEq]e :f6+& `VTLP6cBr!Ð0sN }ưUVӪ;}W\_xEUW+}]W]RVV}eەmC;n_ve;?l ޹eeT, BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( _* BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( ;,QVvNuww1>7[ jp0x5G= `D2xr'<O3x3 i,6xAˤ2s :+3h<̠2 :/*3h뼸̠2^emu^VfyyA[emWu.3h ::*3h ::.3h ::)3h ::-3h :: } Zm Zm ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::=Ωf/ B}P( P( [7BP( # BVpP( [BPX( ­gBP(nBPZ( ­wBP(n BUeBP(nw Bp+P( [݅BP( v Bp+P( [BP( V( ­`wP( BPip0x5e/6xAO5x5x v7[`WtNw6g?6 cMA```Ak 2Xkp68$ 6Q >cI 4{ 77x/3x Z'E}2(DOt4_Of?HOt>)DgN'EF }6(DOt:EF }>۠Ot>iFɌM;E}A':E}6_Of?HOt>)DgWOt>ѹO%="6(DOtEF }>ϠOt>96Ofl!?3(D >)D O%=ROt>ݠOtn#dSI>k >)D >ѹO%="}sA':E}6O}>)DgOOt>ѹ*}B>)D[ >ѹ*}:E}S-EFISI>E >)D}RՕݠOtE}SZG}SN':-Ot>ѹ*}E}S2O n#GDOt6(DOt:}R՝A':EmPN':Et *)RN':EmPN':}RT#OME}SήEFISI>E6(DOt}RՓ<֠OtV}SN':}G}SN':}SmDT?pA':E}A':}RT#O@':k >)D n#"4(DE}SMKISI)DOt4(Dۈ>b*'`N'E}A':}RT#O@':Ot>)Dۈ>M^fPN':Ot>)DG}SN':mOt>ѹ*}v5(DOtZEFISI>E >)De:}RՏ٠OtE}S2G}SN':G}SmDT?A':E}A':}RT#O@':7}SN':FI@Ot>ѹɠOt>>Jx)Ug]h/epA348@` lzm2<ߠe8}R~}S2O >ѹO G}SN':OtnDI':{}SN':mۨ>NRN':}S%DϐOt>)DoP%DcE}SNߠۨ> >)D nD΋Ot>ݠOt/'r}SN':7}>{dA':E}sA':Q}"H':}SN': nD푢Ot>ӠOt/'b}SN':}>{cPN':EbPmTA':E}6O"RN':-Ot>DwOt>YS%DS%}Ot>)DgN'Q}"sOt6(DOt:Q}RT#O@':G}SN':ۈ>N֠Ot6(DOt:KISI)DOt6(Dۈ>b*'&Ot>)DgWOtn#GDOtV}SN':}ۈ>IkPN': >)DR}RT#E>)D >)D6O؟JzD ŠOt>ݠۈ>b*'E}SM}Reg}SZOt>)D&G}SN':}SmDT?LOt>Ӡۈ>b*'A':E}smDT&/3(DA':E}sR}RT#E>)DA':EFISI>}SN':-Otn#GDOtE}S2ۊ>GlPN':}Ot>)DgV}RT#E>)D >)D6O؟JzD ݠOt>۠ۈ>b*' >)D] n#j A':EdPN':EjS(+;R?٥f\ާg S! ξzW?8܇p_7rUSVT :PFȯj w)u'p8CPyx:<=с:\ɟDX{nC=Uuq?>js<VN\9* Kt}$3GD>h'oWx0+A sw|L+ƟxP"^htnw.grp=O2]GCz+QUh'(g=v%?d]!/ǽ{w-w>c5~'C>w "ӽ?1k=\tÐnb8y µ߇tˑnk/4@绁C' g{)ꅊr<Q<}OןX^W { \o>?Fg|~b58?՝r7c\EXjr jg {0 wGza22<^HL1G:߱hP+s< EvgAېS>v;[7e Dd'~SNfjD~>ҟ ֣=wD?!][w,; n4]uL {#H?]F7Q8>gvDy#' (ȕ~ RAOYOP^'wߌ|EtGy|pcF ;.⥖CTƣɃ>il_m pG.kɡ[ &WI,w*Q/& G"uBQk{oM?pu_(­\W ?d-r,zpf7g95^:f^tf,@ x>i?< ǎx>_ n>xC>>֌y xw%W@[!m^x~f_TߞX'}r`QBC^@#SOx#A}zrt:DDqp{ރὔNSϿ{@}g\Y~dA~a?Np/w1oϫCx~xn& yOqIw*{> w A8vM> ;roi 0+1ʝ MmE9Z<ފ|])VAe3<5n_?>^a%9dWlg{͂{A=9>C:9]f][W3}ྀ]< BOA;حj~SW`f5Uw}ejXg'<߈ _U$#ΎX~ƸT?c%K-c0^ձ,ߣ[U 5 z!woo"ʥ?<3|e)WIKB7ސ7[TQq M?z ݉nbyA>~__ rik\?!^Dz#< COI{F,&#W;r^}; WO.ީW( yo/~z5垏|/|g?2 N)h,"cX),_3QwW|Sw>pO+Ox} { =u65Kr 'g ]`|Em/Bz7꣕?-@n{#~h/a@=l5o.[kg!tY]]_,|[jF-OpWcgx> 6g|ӯ)ߓ7&t9|CH.9|,ԍ o d~1{Yc ovAz0{Q>9x LYg:mP|]]~~9ߗ]/~Ǽ~ QqK0U&/$w:?)_5rXg)/*MVԓP L~LuxO?_ {uo ]"rzCs? p]O+~^<k8Tu|Wu{ |zį=%o[Xs/r{>Y33_Gw7p= yOAmD>=i6Bׁ?rf%qxgsȳ?3H] wDh Axom/H_:p{}vG| 8hd:|_jwю'*zɯA_]ߣQqQ%ҏӋ>?BփZ%9gW@: ɐS=r;s?RdW ìW\>UrJ,xRe/:Ǡ>!N3pC" fyFT^Dxd'=,{ 'sj>9sxFxo9B:ޥҝt ; {>XF*O|L k!;r 띌ҜoF=Y<'!yt<[0⾪t7s$9;<{=YzJ'%1ܽx&΁ jog{֓O!|K_[~B&r8?x'k oB+|=םk' %wo^9\5P"xw)75_ _#|y!z)X7"?:pp;.@es,\~z.Hgp?z#A)߱}'_׉|t=^y3h6)x v3uqV7<6F`j5 qA84IDn+5y~߇{ oU7"ɐ+: _\ڟZRW :E<ʯ*K X?1'>n w%zun(?`^$kS$yz>*'!o?G|G#r'r6C;d_Gd__fӏ"qx3[xdW}@:mߗzq'@Է+)D8w0n^<R/c|rbq>{r|vL?y'M;ʕbyj R`rIr}&9pc%6c oFȕ<r&C|&goEwBHȯmڣn[zkY6;~s5`q7P{Kh: _(Q/ A9E'5??ЭjC!Mcρ},]^ zOF:OR ףwv刧3 ϯ-Ļ}eEyf,;8{ G>ue߷Ao|uqzTE?wSпU%_w&|+ʙ "[&\ِ+:rApoʹr_5<.'z&1dV% P*b}a<3J+~Wl"o<˿t/Bގ __>xQpH韸D9cx}}fG}fA/s(=}3KE:$w$}rp.-@Ƹry*tE@9ܫ 7t=x㺈w<]-&.`] _~nBqG:Ðn˾H96vn:r8_r"F|7u_ߎ|OpuUp^qbҭ= e#R~7,:OOM7[p8;(Vϑ<>ʗx0?L1@+ ʙrF8;)<ug: CPC=ovWW]៾-}{x|q^z{Ͻ{rT.u,Sc\|)tǣ~\[QSPn7-7ܫQ_~[\OKӓg ~;oC>?L@9/o#6pj=gկk64W|"ߕ\Xˇj?BK%PeV kyA9#ެ#Qpyy)x>5:WWGG9P!;x^1<oxf!ˑN~/~ Y?.oz$%Afj~E{纡s;B|M{%/WtOq_yׂýnDb\8? xE:U##wu9C(',9u"STC>V/ӿ_O+YX; x(UwsSH?:3vG\??w\r (z VI5"^T2#*\Op{Qϧg!;열 t&?OweϽS w Ɲ =s*9?6MHos/餾C>@^X'ڟqOAZr;>As_\|/p_v).5݀=W&gXzk羞k~:ooNA6zQ_n|[ ߏ-i5/Ai5znZ}5~x G3[u_{n(g[h_>VN[;eM<_%X ͣۂsҐkVOp&#΍ykx㸯^E{6#N{T{ WTmF!qH`Qo\X3^Qe6ބhw?ݽr' |` YڍXoP8\_~@OwWOF~#UGz%¸ "O56?nqCX H'ߝQ&羠䋸.ÃP>ՄzWmw9|cٯՐN"]QNRW<-ԫzQCg]|o`mwC.<Bs!j"\D}yNoq:g//g%4Ǥ=|'>??א_oxߤ8lOMN $d<ϔQT60YO)xth/!5r$?A}Կ:N{$^ Vmɕoyn<-(WH㮕cZ!~+B|'Ѵ&vE ix@<_ ܫwu9¯9V VNx^;Z\࿀(1#?gq=x&۷߇\'O;9xu;^zI߀PƷ\C~phW xY!m ,nF8[.tzW j.{|zfĿ؟c?伪;}zpǠ92 v.Y Ώ6XtΣ c滊Ss)-+rx<PZCpGAslDYϳDXx p*Wk!j@g]\?PnE;$rF~jnBƸSWu|B~Ohu5q^>!_ݕ;NE=yNAv ϫO<r}9eA_Av3C{61`vWү~$)ԗS-?9*S?~{NSN1LA*ȝ=?OS3!Wi|r^4E;-H7u 9&Y̧Oq9W`;˵s_s0ӆSm7Uu(5xM.mP9;}SWO8k@~~UnE+hvN..[}W h_o. Y=n;S_pFp{?n0¿y~󳕜_I{ùv<8^uOOۿxS5ا]]9?>V|˩O/{#+_}hoOO⾮0!g>#N^x hw,X|UO8PޮoY.yvwt@S"E}!gD'A7GIΛ%3=$L~e3ӿ:~#܀NrSS$}SØυ`26Hh+׻[y}s5ߖwǍ$A4E,wiHcp} ~cڿ+p=w}9 /<*9Xs+h k/C%/:|p/<yG 3yY<2gp:׻Lx2v"_<_ !P;|~ B[AG/:cx.`<ܗmKp\_vEcr/t9; %!;<]hwO*ucw!xA ::]T%G(W\x)1U.(v!Wt 䊮Cul - {~y`Vh\7!'wE'+ w!B⹓i(S\R5zG: @So2pIJ=AE&}9~\?wp?q䫑~hۛv ,%NYQ*3(_h_WyP޳p{ߧmx 9^E"ԅ?k$$ƸJnxr'7#$'FѧP sZG侤p$&i/,%亂lcPĝLL Hmgo㾨]ڳe rmԷ!fn> r5q=eDHq i6tsu>ws5ܗ\es!+Sop|RZr0X ٷyjw/p!xN죹> _ݔ>Gp~j(`~į~  b?l:4Dهe}w<ڻEx5= OM@;!;nw)uӟ%{t xFd~܁?KE >x/xp]$x"7yE̊vKvuߏ+ >z 骮x}ঝsG/z~(g~<Ӈ!o8 ;'KNF| ʭc9`yXWR#Ǿb?C=N1; 39^r>%>\wK)ڃHueh0sE;=㿈pߗ׀gp?tU 'usOJx @ȥs >ݎc?țLr>+{c@Kk+|uxy,x9 5_NMGx5P9Ԣ U_U_/êPuL _g-|a9ș??9둧C,alg[ !pͳ<P{3CЎ/On<>%/[yۑ~;$n0yw;sL-ՒW&o>ՔD4|C{ik#>6r= W@zYx4<Ǵ(3-zfͧyܧ<73/CՏ#4ә"K=1O=SJ}Y^snɈos`~<?z96~wjĻ4^_cP Ȱe?Q{_ݽ#/<|Koj9!~{i彅ig6!'x+y\OsUw<~AGE.Aq?iw*HKunBO~/!혇@^u?幛@9P_Ejέb?P3X>eUygY7<8Rjr?z= 5m(wG}~ ry{n#B+ $llj`r9! 20u4c\s?F< nߓPIJ$%Gԟ//y'9a7[9D;'InF;ׇgb$h'=.kS?Go~+^ȿ}0tVKW_3 9C9\tvBFS5FWo< jG;;>?kaZ+ >U|ˠ /JG:;M{ikKsU~ڙrp݌sOqT_.G\]Hs_X2[(=h/!4uW>Cm bk<vss%c;Gwuqc h/Lug#\q{!Or~(gOB|w?h)'Z%V=ʸc pG rzW|BoQE|噆Q!:W~RKP/pz9r)ޟF>a- tﳾ}&Ոh[V#PޠK܇Nm>Ǒ_זi}>s^|F;P\go}f΃7qi{/4K)?5^ /[7:\\aՏާGS7W=Y<_yZuX.931`fUO_Ӹ^2k'>X'+/HGaN$ ~?Z&,#n?np`qvXW-V}kց{2mpgp᜕jȑ-=<'xw8O߹D~n}8i~e$3ewǸݏGromE­AC-qjOG>paCޣN|P( r;FtcUq<_{t!B #`{/Bnu, ]ӈ-z1TwS^kR {ȥ/t8ȫFCp.⇴mA;DO+BGl#L(S8k$'b?~ g'%)Mex݈=ú/r=> M݃ɟN~zN8.ݴ&0m%@>;Q9~/= OUQ~iJ;Xxprum\/hֻhۭ ^hsQs47^tÓ纞CB~nl)y~XE+-[Zǹd,/=;2EfL~M<41'GQώ;3doe7!ݧ~<[j{h<#GylnྡҽReH,yspwM?w~,ϻd?d=FWܧ>9K/.": .v@Q cgysHr<*m樿|#⊴)9seg< y߀OYYa7FcR8 Ͽ=^C(=GKwѮJ%WQu::Whu:r=ɋY0 >`E2Iuq}EB=kUpϢ=[0xvk<8qx^c }:X"M_w{C/|0:p~u,k{^>x9X}Nԓ1ƽc/p>yڹH'lWmGH|O^K>7uԟ7rȥ^1p{'y{p<_3W ,.H,ϰ{ _q]eK.ëW Z/zC1WP<Ǭ8N|N&dxGSOT A?y(4vYȑ} o~{gǐo#~~e_D>'Џ3w;\bs..xtKៜ~ $gv']iPۮEmҽw[Wץu&k@ky;Ņ-) 6&ڛl 4quM6pᷨ pq|-WoDմsR鯢]U#ʛrއ-EXW=1YvLs_7?ѹx4`p??sCh7k0*H|;j{| `hO?^tzw)`8+(C v E? h?Ϳ}_|/Xi?YGLwf+h4k]3 rs/eCp>$[xY:M,-7Ӿ7x ^(PO{t|J=n\}C܏mDGWqCy~GFVV:O3>i W߄£.<'"|x&z)(; ݈&8@>5r`\TS!z>q>o_0W*cO~pq+u_Ë}tc]U^h߀紂.糃Fˠ(^sq-GJoF<q G;)OY yӟa\F:i{=e(ԏ;x3|K3m?S}aY*/8|j.b*UQ6xR"/Qp5_ ij<乨c~]y| ɷ S(_i#G* ig7Ex%MǸ 'ϫO-dȭ&݌)NDZG=TqK{x/~w#H* n 鯽 kW݌W Ώ!~xKyob΃/t^Nqk]̦݃im7(MqY^ =QO|?JCzyqH=oy #ྐྵ חÍc9}-l/~AT>e}p 78 Yޛ>~ N?Up3?s_vOkӴÜ_=P~n]x/A8g>Cz"\KO{%QAsnp`5x~b8OB f:>gώ/AW5.W1H߸>f i G/ӿxnb"_>-Fy)9 wT !otӈ/#t yRx .<ʣxF%kI5p~B ԞtA]~sʡ__@9a,G,?c0v#; o㾩`.u ?dh7y4.b-oӿ=2 ᛹n׼y?nӃO;w|vrC5^wXcυ=u_Xuug¿~*~:  j϶Hg|pɓ0r_ڭONu}YΘ~8J3 0c^ }}pip?O?d.cH_wE{7nk X|M龨tY?G;:/|D{B-v~)88 ί>>H?Oș/78sx_wܑ/?rr׻z"s-7(z7ӿFBx\P,gΜ;WPX \<^"ԓ>ҹW>%r/1~,b^ G!3yGqIԳF'p]5]|N;&O\xea\s@ya꿎qOBy}8r܏Y~fr |z4;/f §+%DiNO}?t|ޯ?rW!_@^b'RO +IOMDhOv чhh(GPОh}(onw}>BO 9coF5G)(_n)yBK{{{ F>ƿ;AZ>(wq>b:ǧ?D@_h7֐XOGQK޿ Wۛ~e -|,B$M ]'uy7H-RcmZx%vj9㫅yMOC6&wD;s!|ȧՍD6;|xm=OlYkvBռnxsԅ Y^کCtpap[}9/p6ϕ><:ix2 L\X} _SF~tv {5waαƺϯ8(- 5~~??bz O{pyN3K?oEcio|sЯH~ 9[X f<{;(}"sn(ȟ_Nȟ}rF?hi_!\g}y_{WyRԃZAh\st?0vGW bQq*|G1ɯE|יB(%C;<n@9CI OGjHevyz:𴫩ؿ xk>:+(x`+B >(9nrU=@"= Ҵam+>t=ȗIT8]!~߶'ߺ[B-m| f{o /Mo;ƹ9ý>ۯϐikO[#\dXR_u=|_E+f7-}<﷈~>=@s|nL]=3=-D:_F96>h%+u9p?'?q?B{(ތ簃Ǻo*Tf]e_΅tk*Ͽy|(OA+A?Ÿ?5꿉v+2ÙAq޷/si&^SL4E|?@_GcYDyO>A{ޅܹszcWy]㜚9SyR'F5v~+iVغ?µ~W{=tٞ;M!5Mol&{:n}W\Ё\Yu-[{:\:U܇ zgw-Z5\Z+{f9t{&SOLq |"휏zJ>' o.?X7N_PcHcO?Ч "ԏ! `}؏7W~}=evqpL|\Io9we$·^fL{9MBS ӈ|;'`|5R?n{z'<֝ |z[#*^B+hwy-/?kYe#%¿X+{sdX'?F?8_ 7 Ψi#r}8~O"~owPBٌ? +qv6=oD/3<7|]#?~wVa<^fex@?Ȳb\NO;S_X"[KwI "w\~͡Y9Ӹ>8f4v "z?5 =g\O FA_(a.կܒyo}g_s?~Ns}kٯ{x<2ny(O~B{?-= y r] rާ}W Ѿez5{UL!K~ y.*8g" /\uߟ9+νtrXJ[7Y g\SOI?'^*|q=*"~ȣF2HT=Gv:k~~,ϿrOE;-'GoPpȯ+W:BP}ߥu.,pçwOA^H;;;7}嬏YeH?<rܻRNԷ%~7q53$K{o.7j> 'oOQ?mJ;\iZB?i~O秜#ў VȳQX ܧHg=ןs^mݛ.{m_3\y}嬕W!M_U{%xoj/9 hq*3y.j9ge&sā8q]s}Jѹ>QsE@6د }Cږ]@ksO{~Ɨ3s?}C$}w0xOw]bo0}O @ ⸼FE;&jr1.vH/2w)X,U~Socx~=W~'w-|?3[2 9Jna\fnwG> r ~OOCs~qǻE{$(kUU]PsQݨ~xE8_fBj6~KH{~qjK_F$"ɟtH/B/?= }Go!JF GnO~kuf >N}O~fލ өǠ>QN /<-|=#kx xԧϏdi-S8K;:S7I4 ȗF}=v>z?꥕"65c{qf\v.{1>/j} wc|}<_wshȽv"­},Ywڀ+ _>G~9{.}| oSlwt~La9&ϡFɞ;w^?#ᴗ?zK7~AX.t<totp \_pÜ_.p<zi_⿌"Ɲ& O}Λ=s7<~z?yL#>}*'=s9nyN( @.kS;B. 0Oo}A7^(,G_ Q?Yn㸴N_/]wMv)¯e5n\M%}IvVr˨ r,k{)j>{;oϥ9_9}5v$'q_7`j9(=}38{t}؁[@,7Sgrm%S/5|Z~Ϩ_v3}7OAXx7#]W7~9^i/hE{hT-Q<䫞Q\?8/|sԛY-2S=P$mr[{#Ǡ^>V^[F-{ÿr;o9 |Luw#\=$¯95?jh<~:\gp+n;EH.vX|/:yq~k-~YAF7py\xw4#|q BbKL3( ܇tb3<]xO̳ q>-thw*߇'ڳ/{F[1;c9 w9!gQC+wYf3sFz5COq:v rop|nEއKЯb>G=_`=d={?s4K^ ,gf]2Y7dy/Hx[̧rpլG7?;D+P|׳|o!}Մ&w8+wyn әzPV=g pQ:.|Av?󴷓9x?[q?}}ʃWH? 5;.W *^z h'i1D0]up?cv={;dAӴ =$p'h_[ܯCV` pys|s{yc=m<lfC|D{x_ݭ\XVG>u;ײߊy_+/ÿ+0;s\܋?5HZSqA{KuxΧ/)ggw+{1g!:Ss u.VqE<Ƨڟ{E|n=႓H%w'?^-scP߳Yg_Ee8{.K{4Y,1M /1N7~o?rrA}GC-c}rߔ=UCcyp" LԇFx1=h.>h1;xbixOq?f<;~ oEe*7V .mЁ zde83!WO3iO<7ܟd?9>Ay>y,Gq=B.v`'ϱSx oz>W'ahJr_Wlۑno ->#Wߴù8os ܿ~"] v#^ނpu\+߆{({r~,KKyo_a>ϓ<c\V4Wy~,%uk\}CNG{Bpz){opE{0Ⱥp\mh; > l gZ? >ǷߗK>Q~`q>_:is> ,ߧ?V`7v'N‡+|C#S3Pj.݁C}9uF+/wŅ|#S{jyb[D;5d!U-w;UfngЎ4'~^hO|GPoڼWY 5ku3n#o?Snatw9ƫOJBQvx6ZAl7{{B+ yMx>S'rҾ^8C/9C{7 93 EH[x }d>{ͻD?0ۣ3 [ShK#~z ʑ^N<idxvx.f@c'{c9Nb=9Kv {Gy<~45H{jދ󡝍4{y=n7Z+. /E7@0xn .F` ?(|, ~D@ߧM(gCzKS8cY>#YD{CB|O79=E F"zByA]hO=Ɏ8\gnxʌ3GfAyҼ:u.o{\^gw<z#\}r 7c3㼻c>N۞i{n /L)/r 2;A4z#p!q7LSy{4[v>nsWHoS~zNzNWN2ьsJ޿!ߛ^cH7pI#JrIb )1nڣh s;!m9Z?@-ݲᛓ{"\9 5iu*>FBU\ccPe+= CSo@'8?z 8`:9Tf᳽̺o{*>%Lpݾ@,..g8ߐ?I/{|_nkxe<< E;.ns53 8ݐԇ9!O,|}jU?sH?xCYLe< a\ `|7|ty?iPU3y^T0>³Yn{^O'!PEo8#|n]E \NY̝ 3Ιp_|<g+E㾎zu_ߓޟa_pV/@0lէx(vp8׺F_ wsl[d 6/xJgz3>` w`9p2l_;܏pa0'G d9lG~7"+҉uE#F(ouvQ<`{r \v ʑ܆x1..ALn3ρxωx.'tG]f>tF{o-HmM|.Dz[eά$9 ܯ^;C2=h;ݓrλWޝ,w/TQ]MelG7wSAp1=!t?v1]vIރ|..?q2K=>ug!W[oOk+ЎO 7E>ʹ'{ 7nO Ӟ0gFÿ_wyN CCM=_gUǺ|k,_p+8u+|g+;Z~>^f:~`SWo0#aH?C?ҋvB2?wS+Q `3C>x廑Ϲ>,(O { xOJn:9R܁LoBe4s2G җ> H{Azq+POޑdw یq?nbWqKOKނvK{9]92ܼW1 _p@s=vq<x}Pr{GUǗ[<D=C}t h"r/L0׳?\xSH,/2砟e[y]|?}j=pPסFɍy( ޺Pj[}>;g%c^[ƥX2\7~Uǹ΂c}(F{}gfY.a)|ԁ}pݲov#8__u}stG_,sG? )x2v,gxtVUE@h7@e^p83B  C>5w r ~Zs~Ag.X #RE{?"_u<-铣X_KU=%s/wg}dxV g*@=W݊Q.U7]~?}~U>߂P xzA F0K_K,7esw ]7] %1| xU_@ {@Q3O{Ph"9zn/A\nB=Ig}B{MGϢ}2g2LҴۜ>ri6}YH}帉~w6t#;垂zI}9Sb}m@8w)R䟺 r8/{%uEH' { \۷vjxno \f3h:8ȷv@ GjqմzW#go9'jýhӞǂ%|k7ww3>Q VN)gp sǠ}rߟ93ϔ#I;s=!ͧy/deӼ6}0{O=LZt e G3${{@o'.F=gi([xno A{/丼ȥu9RDcdu,ss7 L-Rr&yoE`Xq/Aj{乤Vh=lofl>6FM"֖s4ʽq;zG0摟uEߙ޷xy<>(%=)=ykP^o:3>YMh,Iԣd)GySkBIH7.OD)7ImDP_I?9nKHru60q)M6Zr֠[XWkݼ5MHND6΂|.B|K\­p{Vq=}%+2[.O5B{g,۬#;&}?vǴzL{ւMPNxrWui]?v#4ҧA4+7|nx|ٳ>ȑwj4}aMtRKPx'u'h$[Nюnj GOEs䯑^=țhGyYO@6΋_)`HeoלGfgl B6~Fwo{wz=kn# WK;6#>ˬ#ۏPXw-FCX7Hh+7teF;exlss? vvrwa1ڹ(Q>1ixU0Wφxҋ<ߢ,o^tP+?| 釴C^V}}j8?;s aJ,g:idh1Ld`_3~['ܭ!}W#: G=~^;A['H'C{Nh7u>Ե۩]Nn;sɫni:r8_I:'щtO<~L܌r$xG[·r\E2-gCf{knDM%kiOF: S >߮w(=S-ҩaYp/|},wȂ^\~L) t-);1̆ 8NJ nbn &bRmFྡྷ{㾻/i%Ю]v27丯,'OpyE?mgDٳMu-ޯnF'ܜgFV^xQX.#^|<F;%乶eaoC{*~j85}SxrBwp*Laߠ?y_ 0'ac9gw­QYSCQZ$B{Fw|y0P.e:!GFy=PI> ڷG{qd*o>Vlk;q|<3;sλH-wh/_1A{ҥqP!}e;NVԻ/TVA9{w@MT}^fg3~>qɬG Wig ו~Ws?s0k&f~Mџ;E:y{#yxĉYW|z||OzBѾV|~y?APzuV_ᡚW#5Lg9ٛ}vv;[lLj7ۄ3ҷ7}Ѥ8+Sߒ>w$\B}ɱd/hM덗x&gG_P>\;{oމRt3Ӑg "L{sZgz`?@1W!{^K|_9Mw\|.qyeqK`g=.Lh>ո,j1GZf?xQr~aWEbօǺGaa?I{TC!Sr}5KԎ~\3V;?'O-{jyDmr%$g9(|ʗy.M?<}^˜*s?_W:Q.T_ O5>y~NT:U=[Qn Zv/ۨsF|6qz=8YUy3_Ԋ=gU㜫Lc= ;dANn:\x䮪i™+[/>>k>vޗ͙/_iy[)_l˻up֙_}u6zECjzIՉYn4{~|{{_4?>Ӫ<U ϖ|G"uOj>ת~"~cD/ΟCj'F?'?EoЎG4TOP׿kk׺F|5AV3;!?C'W}/`}ʻ`G;?Z_CR?*PxE_UնB(̹\)Rg%7%$'wŽ-j8Q-Wzjߍ|_ѧo|]|_uwg?XZUO*ߊJ_rX-/ޒ?)}ݸJy̓U)߬O#ӱ{6 B'0?z~O{9M7E*?lꚽt0sŎOrIҟzG}pLq^ר{e+Gͬ<_ϫKժOp=:Ưj'}~1HE{^{Qmlb+ztϙY)o>`>9KWJ1>{ŏMowk>H=Ew'>N6A5)<O5)mo=zF/Rik^ D'ɝ~kMC>jS$/NK~'w7fvռ5; /x^+6SW{B՞c>>=Mk*^ 9^צ{~{UQ{NxO ~v\O{r>t ?%H]=Q꿏>Our-89D<|},Y"NOs"EKnv${"ŝo?G7;YRz?]{Ίف:@zu[Ur27-P-YvϣO;sYߏG+q5s©SD~o'|թ;.ar'w}hȹjHW} :_U[mz>||{8z0?Sz`.wCo[׳>dupmQǿ\ut믨0zC 3Ԣt2&_۷J~{Ewj~GV=Qv޳xꋹJ>( 񲒟x1]ZX!#ŷݿ9_]L?(reɏ~G2_rъ{$w^ޠ|l,vjv06++%rK~)>('V;W1q>+l~[gڽPrԈUkjWXϞ[X=Wo{ē88yoΕ<+U|;ZgķP#΀7;YL'Gd6\.9^TBS'9?YM=/ę)EՏ"vE Y)p^G0/πkՅ}UL3ozk=ѕwď]st䲄Un1 wP/9>Xt&r3k{}-?gjocnx=:/7L֭=zs?%aı}αZ|nÕ/ DzQ}@|F<7߆rƺ8uPc v= }_^-Kպo&i;uY!ߩf4ܬ&6?(cR̛P˾ڇ}6@#S~Qz|՞l~y䛜{{|cS{xհ`?jwݧv ,32mQwȇ>YJ[y>!G:7M87sAzn߅S[c-?f3?yU''Lgo\c޿ԿSS~/%5kk渚_̏ 9ďGBIE;zp^~MYY:c^_>zD0zJ#>??NR%\4XE!RDoLvTIR~QvӸRz]?D?u35误z@xm2.圽Aճ| =|-:/hX/O|+ Gnʣa9{hs~/.nCx;77V!{s`n0wK[*=i~f'ɡ2o^T>|"?$ߏU;Uzgk\+3oyT}EEϬ>Ҹ~T4kվA?ܣWvcJ-}iO󊞛C[TIz>@|7){~M)=۩3ZøEfh Kn/8P'߆fyZ|Vξ>&}+w\(>k4o4n(ʷ)xn!ʿsk<7E(߳k}y?S#ǐčg+; ;5 }1'*wz]NA!R=1z^;J5ޏi\T_>v8>zaq_QEƹySŮ,[Q F<`W̐!O35i~*J^[DߙKTO7hRz?ޚҞ JiBxq~ʕ$qc=7ym.KT~$$ٹ)-)?ɒMRS;M_|%>!~7T}ue꣆֎:͵.pƥ4F'*7zSIS!WziUPg4 'jߜX}ıGx>k=_F?cw5jYkWa U_@8G<%>ssƜ)y,v3pKsk&ѻ^tyOGxpOгWkJ4=A6űS;C;E=aS78A1վy~;4n&O=?v ef$M_e>&%='.=ӏ}OUr-iIտh!>c/5WQyUWp 75Ovg/[}}Go}.%SR+wGeUyWg#2Wz+W*?߁S%3[jةgƫrVON{ vf!jpQX" #߻/y~<1O]دtrډ[ּ_ǾyJ*w~eя%.AO|!2 ϢW6RV좞D/>BUσܧ޳Q% ܛ~7{ЈWX٤_|fK~'NZa۵^xO' ZT.F}뿆^o*O3.tr>qd=[KT9wY;Pհ+qoW\g+p~\%߅yV2 z7"\~q@#ZGvZsܞ->-q fjʏP93UxPMic΍z8uzO=~Y_w/؁3hgkTIzsgʚ/Ƨ?2+?&/" Q_q??Cϲax@ۃޑ|PJrK.sȔ\r'd'ct'BO o^bhc{F0Io?U7'ظ_&xGBWlrUo2gyW~ ʁgs?Wyz+^&`U[>|-.&>cDK*Կwo;+&l8O4KonRa?M_;Ѫ-S#;EGAs;KkVe//≖S">Ce=/_W ?O˳˟瞧 ծswGYʷN7|Wqnaw;ħ]J_x"K#/^9| ͻAzfu*LmNoQi>Mڙ'>Bgx7OcU4Coh v0F-zuoӺ~ڮ)w?!{?A߂aƣoy^vVYU<=Z7>+jÿGio8m_:N۩o6FTu~@Z{ )Ҧ}Ip`kzmggmN۱|k~U}=@274n17'KMvUZ:r1l]FY,I7{ պ6?} Cgk^)oC܇F!5gR!=D`oqoW'%d%)I_8zOe gY?O:@//@ 0$V0-mUGowq~QV=6G._YxG3%򑪿|+o{[ o}z¥KWzY,aG\и?屇(J.v|ǖT_#}[p4'4O.DutJ5Xv:vԺzw{Px-kEW~%W+_nz9gˎS{K9job:w~=5>;hTOOIt z^)}~03>tnNƻ0i BTGedE/,|QTzj1;<S>aZ!qqB54/4~k]rTbq>ZUN\<zwkyk^?"O)O 霟=)y xz@OS+/k>VZ{y|1( Jq-q\Bo]SjK~gMJD~m_>k Sկz)EK(r~O?]'.uGlgD:X̛uÏ:dEW?(|OnIʷm.ST>f}6#:ޓY=&ptZ>P=Oq`;ZoLa_ui /}ĹB~jtetAD菤%\]yV.j(zKg8N#$nqxG? 5~OVcSşf>̓#UV\x >Gz U}y9$ϰ'QC OPɇ{`$J\_;AN7cbco }U=7g3]|!:OH=}Oh6)=F`I՛\2^4&^fɛU_t;: ,>:slI9l5<_ӛ|}ws+\ P%+~.q.ݦ%Jc4nſj]5Nc4^bs U?gEǪ.N纟%⯰Ŀ^P0:.QGgX'֠wuX}˄jpY_[KտE3_\>_gLGЋ/N|:B׈pS;^=$y<^ђkt=V,~.ѾT]#9۵E`7F؎M6׸'>0{+I_|B+%{=Пvۻ /|*OUyUW/7$zn֊Oj?f4#v'.@Ŏ%ƾ6P-ZCV\Q}_a{wt%WC[mZ~Ius?{GL=`WTh۲-aQ"F)xqJ;pKMZ_H^6ɩ8^(!V{ŃTo"v[ s +]YNˢyƿo7݇ +5~ػoɺ{ RxW[@l6REo#~/Tn!Y杫} :kҟ>ug᧸_i8v+UC>s⻈{;FsLkɢd8܇Uc8[%|^u.9GAF'e/!ZSt禴8a550$r{pơνF*vC?5j>VTxauL޽$*1kַ|vVj~yPE!_d6'fiO蟖ы|m;oͪgOmSP#ʗ2A_gz|bo ^ IgY8|ģƏz7qzǮ0˿~nZ_Q՗d}#_+z}j2Vq^+oK-[}k)KkCou oܟξPϢG αviNW8i>|;^U&~3旄CEi]Ei=U}!Wa^$zc Cգ_.{,T|kQ!aYC͢]<$Գxm ϵK%͋*fI1:7"u YMq~W罭a #Fd?n'>TN<٤TrgI1GIz^\E|ՏP4QcrɎdg_s'܇$o)d;T?;׿_}@X̛?+|*4Ι^'? 4 ]L"׼~7 P}܃'&@/DGw?>\㒜!yOj2"7k)Q?jRb/`><,9빇1{JEB<ކP-XC wM+~W<(Ͼ0 z.߽0T5npuT A_R;uG]whv}OrD庨 ;.Z{w`~V V]qҗ|Ke\ԒJo[rϳ/®mG2{,/fي?3O]&?Q;AAi9]rc>@t;9q4Z7)=y^qSсQ-<-ďaH|}h /=^9/ov߂UJDh-Iآb<s4u/m#>k;}[*@_k?>r|}~V)O[-:~r>A|MӒ@?FY6i>Jz&?Z1dƞNa?5a}MϸE|&BIG.~6ڤv&AykWiOkH3mԞ {dq)_TQ{E$y|5?Qr-פ yzciā)*?5jUک=п|6o?ܬ:*Z|.]+[$GFW@pI={RFtXvoG:z7yx籓0?@u؅~['~a:^Buby'ku}\տ+[ /R-F{x!vr5of|=> )QDՇ志ߓ/֘SMװGUtz> S1[r J-[Eok5~Q_̓#Į B(Bn@҇hz2}Xw؉*NG~pHq?$,|˾ XM}R>=ͻ*_;ZWW)80~+?Gr08W=z{ڱ^ St 7@r΢$y|,MniMY6ً$o{~M1З69~Eڿ4ŧ4>s8{ӜGKԏ|Փp?&j?)z7J^wAlT׼/O>{ ՛ٚ.exO1S$ct摹C0f_,f6r}8r1I=x)/wz4n_T5)YTT"sp?!?Ws%JFt򗰏.# b0z +߶[oT;T1?cg'szGy׻*߅>B͒oOk|/$O6|TӁx~=&q3Y|)zujoQ*?;GذG^p$7sx;q4F؇tc%s0::BUh3h3iv߯=7|-U_4AF8GsZX? :s=mE뜇~vkħXk9.T ۔c/f]r~\IUE׮Tyu~;Ëg8HD@nCmj<9ױ؇3:)oKH5Y&o.%ro{nGcko8$A'?4H>yɹg݄+ۇĢm^mUOpywUjE?F|^hQ,+V5K?ӫQB#n 5]u޻ƪ.˻;|u7]ZY躱k+h'e;r^{Rr,ů|ۋJo-D зYg2 =晧* mQi=5K?07yMdE8{2ߑ^kBFa'rz +?(ɷBE@p oR悔h hsͣ3!ڗ5k]E-X ~ Iվ̓ͪsg=q>_뤾FFQCq>Zpsz^=KUUhv@5tV!6>"MF +t"#wDnѾ`9WkثI&>}gg_]{עogm}dO&I o4 o%~S?c%w{0`h``'i|?wXr5oi{Z܌%m_5@>q0F_j<EyX3wZ勉!y/h\b2ȁq+XϜT3t+yV,G].>^ >K+Q[_`9R7;'O\{'uGC:[O's;aEף߁5Z˹ZAל ׾o* {w*mo^t~澩Kp6&3A\ܧ8|rU$=zO~_8SrǛ߻t1E$LN x)w! 2%~CG5~?n>"D)7\7ua1[mп&7dh+ZR'ubG`JU_Îv=~7~_O_%.Q]]k ?-5&Թg $j8ώF+%ϠgҦ|vײ)qWgn'U; oa+TrՎE#> ^ },>o wj-3EZ;j4Rч*n{:O{9;>Cy͛x",Zx\2++یyZΐ[՟ -T2pQ.Zh\K{ݭa/?$'uqҺN"i׉9Q;|؃otzV?:k~#ڿiޮ&ժ/jW$c%3T/ EǑ7]߳ǟ lq|O>S/7yD9vM@/A]ݏ]U-+&~GFs5!z!<$RH|p_1DM[:4 yƧߤ5j'J5koS?uK7!,CO7x Z/W]O;=i{ ;U;R(iѷ7j_zM=o?knJfdO`gùF~"w{2PL[MJm?ϝu|jW0oj1Eɼ'ş}\#&> d/®%">_؁dCvL7uzQ}D oߵk 7?y>ri*SR ͕V2*MT}%"~S? OqIѣ>@tcן'bh~խ]N~:窝._'qw7p޶lctiz|W\^{`?[yʭXzѯJ"|bΏOw -yܣpf>k ~Z*ӫoSgj'CEl.(>ܳg sK^q`5jgk|e{_GCد4aK}6F/;ko?D<įnt}GD[zZ>+qte?ue }Y' ިU'!(~숢!54:A+^D#F\:絲ک[rzOWz}6VU>$QZow>Z*yDtcx!'lWh>؇Tyݣ\qS~SSڧg풯]-W$9T<"NrAf_$hG'Az{;eټNd&~g\(>ik#)_x埀z`\z [w;ko8;ǽ`{p?}y砽י`$ŸjQة{yG/:Zc%h;hGha:no:ܙux嗢Rʭ}gFwChȥC(dqY'G8=4zT?5?eT%n=CoWިF< t3s՞IiV v~T}g_fl~?s^9ZC%8!r}CĿV'oJ7^9p<8lN,=TxVo-y]~A.'/))#sIn^8] ]\:/yq;nC.s"ѵӭ_?5 {Pa%~Vעe|.}[6<_m؝ϻWsOR}sNQDg7V{D{2a?u qi2&w;Fnc߆~sw 󗻻Jý@?DO=!që$\zÎ:QnAvmԿKܪ *gj-zPR͗<Is r5{S,לx|ԟXm߃5?^'oL'ΰ3ķDujCH?&[%g~گ|_-oOW,.>牏~w[|q͋߹}h~y?Utv;N"m`vp>|k]? Y̪«˻r!;ߐ\Y, Uҋ5?`_E+Xt-\(<Tn: C=07e?}[EoиUmI *1J1x3ԿWK?r}6Ꮤ/>Ga̷f՗ i|]_Uu9zZљU_D\hoѾNnL,>Ows}ۺE{٥I93X2WìC4L_3'H.O5Op '%".|tC~v+~|eUb2] Gn7UrWٿO`*mM 1⯇O%xEBSQwEOszدE'w!U?@SMaqc^O璽mߧϩ8>?vavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavav-7f}M/ˮ<{mM#ŸqNidu46xx7|TVv69FddleG]5n~Gsn|e#ï1kd]6|_=r5]kU/[k.}oCuoBۀO Epi/data/DMrand.rda0000644000175100001440000045344012531361106013563 0ustar hornikusers7zXZi"6!X])TW"nRʟXaqjnj-&;QӮeI&9K(kڱ&Kca$WqRc*Ǹ$ܸ>p a#sqPfXx{FxPOS؅x."+k D;9ĝkM(TNV84X+u O:PErLdwG \{9/C3 mӥEJX{% 9ϛuǶ EӃg{`{.]1\VB/P67MZXމKW":o%94Vx2 )!ײ&պ4&趾̭QaSRpo]FJ-?HՈCr(I3)=Eu{BiM+-ZD-Uc,.p48s7Nѽ#{1 HO]E`Q~:[Y/bK-#%,&=S]eЯ3_ļ E2l! 6i5䂦q.Rľ"rϿ$U| l~آ%ԡw+O'2*m BW!`M'z-t3i c7f8ia ~bng L:TX0ew*X*nW|KR)i.z}tm$HI}[K 9p[ŨekE27MXZ r8&Ўg=+n lDte(ƪ i\O6B%=3}9!3TilF %d.:3|qdY־K MinyEC׵-_oĵa-Iv> 8hr#n͜u>ú,G2𸣴<#Ѓƺ>Lf뺽z\[hC7xbQ!N%9Ov I%*MDl>_ M s{H7l8a3=~~P o WFiS ʫR(Ҳ{(#R,C>\b@0;eV"ô '(9O! "g\\-m|RλƓRT9WUS*TZMyz^{K~t=Ӱ]tVua C/$ȸVQy؇DPƲz8pvHP 辥S`x ou.0Tİ3soġW1Yjɚ1)a&|=ND/[32T,_,;zAd;S\<'qbRjQyF/[AT;W"ap׫DM,Fמk^%5]'5 㡚$i$5'\bX"pcBhЄ%#њysPS]\td+dZ*qt݄8K8RrdUXiCk5UpND3n#Ba6ӯXE9`5xfxޝ+1pyN"E?{a;"$ߨÉ hϪxH9ԕ | cɞa0|΃(Cw22CėIl"j2ܫflI Y ku/$'~ "gB :!=.-Tj,`3;-g1:ԵAlf瑊{ફn(M-ih&P*-. [w1:>Ll"L 5:eTzT7S)Iپqy*]4?^n$mu H!hI'0kTL|f \r/>HHӠkrFUXd~l<9q)Wby-mda٬˛>^sB=;T\ٙQDedxwA\TnxeH( T1j`{DGi_,#ݢYz1n!{FP [° 5kA y3o;=>Izl f-ă?ԸUDNNRH (~6#6e]4;a_Nڎb{RX^cEE'G ~lh7oQ}W7}UcnbC ̤aa};Ct :f`F1+c_Ms)Z>ڻɷ}"IN.?;XIm6Zk{Xh)EQFFPb;w;E"dYmReLP`B [=Mk}]|zy K;F[#眖dT` ҷzՑReڊךa m蠌%'b>輭;'r'*-d m3T:ZqN>kP։pF Z OF0ND4ӡdDj0bBC&}\'L*}f4@2k?l X 3k08BCDn?8 n#A?<-JYW7jY 2Cj&*}6]Ôe$&#קշ1u2mPE)&.07 .3iH6Boҹ 9&8-J;5.6vWGc?'MhtKaW]y}^tϓ/k4pGh߱X¢!AQ9ĞUY+mI{ftӵ5-3V ~16:;%}Lgz%4nܽO [C*ْŨD*ؖ,-_h26ͣgT ܔmW^,;䃧0[ur'6cs %~``\+43ݐӑgo*})./6"LJ }#tELndu%\was/=$/Mė7Dϲ;U d댡Dp߮/"juB[6Ӡ5"e>54%`T`*pnl@ O 0VjݝnpeҥF ^W87shi;j" k[LO &]յEY&F'1R$<>P_x{"_FC$]6FPI2edž@2SF߰D$ft 6"\3zk} B3T- ,sܩ#{Iw=J}q\8P;<^6:qжdE. 󵆉h48|/Nn@ TٻE-=LMوVUbRpyt\$RXޞ\Qd<qJX@*(ZNyaZiK-N{fU_dE@y4%%#H|BM,$UM"o2My س*358\#~oz(\ƌ}=÷j\݅+5dn%7)غm% yS .}]ƫbA n q ˊztǾb3AܰPU1v6$ XTeh8fDV{W?6801D3^J@"xhf4!J: /*D汃p%ve?vŃx6J8#*u2dsS;{2#)"tKF%N_5Dh2|2#]~ n<%R] mfzi&q[B%ʛhcB,+ d["vVJ6I`мzi@p.i!{OvD9ݴ!V+8mύ(f߽歏XKU-eC1k--ׯ C@3 77K2ǃhf.A&|9(jُ&ǀ1HtTOn\0rƞ7=3|'YpDs EK/&O g;pu9%'07{SQ\58̡ooZ۸˾Dk'Ofb(0WJ w?& 8PrB)9PT^@3\* vr צm-ԍmmi< 5d]|ٓ lNV6oY b4\؁풭`ϙnnB~ZQ ~"vWt?,`z= Pu%6[}QO5WadՋB{[ŲV`+?Ǔossa儖wnruZFDz! MOPx%|4MmR5/;vuyzL{RkՍ oJ{1RBnE0LzjMӎ֫f`fCз*W% PM?W?ؠb'jC+B !g'P.2rꗍLDW!i^rO\9/kmh~; @g2`9lacڱ/]s8Km-yz8:HL~Fz(. $mEC֭YmύMqpi&R.=*4Aa|/e:ԯ6b}ס&#*+X}z%hlpPX*شTq,ypM e3:M;\AɫsfLIjn[O*7f.IJu+?$+ M&ڕٔ|\j(=C+4v*Ǟd#U;HCTK _f[ns~NgM(=SDݯi[G|7Q#(?bbOҰmI?ci_rXjl Q,1ޢ]e-A,^$*l^fwitms8Pp]s{ շx ]$2N>|Jc`g=-֞zT5 BR ?j.-5ȅM^"s4}@z3;u_go )khun@}-II'rFDnP)OUE‘#f6'.Y 3e߱m D3m{?0nI+*apș|36~Hv vW|h:o};0rYDRfOJE'0^mϲ}08i\&\ɓ\Ԋd {9JD8\߄N$z^~jIiD +yPP!n8mr2 p7P(ELʭ|}H5eCu%0\ʚ[eəC!CO.ZԻ'ܠ&5V ~6s!R_ f)sfŚvyrv[k“wƥ?Ǥ#'W#ϩDw㌕XC=A,%9]}_ R1("Q/Pg}]L&5Muѡj֙":wM͏ˑrR#v{y1'DS⚸H> &.Z>FռE56;.CxȖr9`VypQt͋f7+T\5>'b|Iz0D]OweU ߱a@WLLV6>sT`+ nř~a{q#fy,?W@)K h,?ԱT9VP_if9zZaj.']@zKQ.`OLr H BT:,fHhV((xp\%VVD#?6KiL]~&gFA8Cz>$83}ְ+u|7@xQXW;g)IA&qǟ7!|K} f]U\r/'v̂` ?&(Q~,{xª⌽R*)Σ,߷@ns4CNb6}`RHYrP֫N\ƾq-}BF>kT8|dNQnyH q;WP Pe]lOߡu:cqA>bd]^6zKYEEN"y<&?vN䁡I->̒ZRPS0{H"ΚYyFe5߻zޯðhC8) yrJ8G:bAfN(*0vswG`D0pM_&[)mX-tO&!C[,UZ@>,ſER KKӌ#{/H@B`a9׆w!􍄌ȣߖFiȘj?&U_´3lGQY^,OWHb M9Q0.i5 \]Ӣ|*HLSԔ5(-/&R=7ms'{<6]E.Z=V5M`UNc2D tR2SK#:eAqq-sQ5zvtX9ʀF&⢷ap zjqhu]Yy0Mbѻt'.G:P5q&tkHHpN}a7cP*pbG=Ł0T,:MWfS؇[uxrwjP? ''&AcL;R7hY|ݯMi@Sz w׌\b@o1讧0@[Qiֶlxa}ww J2aCĶS׾x|JaϏJcmEd],'Z½F>ƒtϔ\EtHXP=/ K7)2$Yubݯl D p{BvRAĺ gWm+FrTq2}yʬӐuNb_M)NOU\.Ћח0.֭:YLUA31ǎͿ7Cw}'qjy4ߨTCibrm>NѕގjZu#zBG[ Ń6iV~}~adX]ɗzDn": ס>a"`ԚE"*ͱl.DL`hv: ,/ž:Lz@Rd:u^tq[p&*6HwőT63ux)4w> ߓ'H+'" @4tMo̾hg &g:f,w3YqdAm#H뾚 Yhch8}5o'Ƒ)7,c6E %+(5戬Y"Zܿ,PW,m!Wɵ!;'ZӟKi<So/ff;z&"AjoUkϴ]+"vuwWQ , Sͱ&yɊdUÃp3`fXLBc ["g 'j낵>oG?};ƌmNlϾ& 1UL69s#,Bg9iIpc֡lqXABSoz/f2'o=n%B`ĆnHlNyKhX5Z("j/1ǽ 62`7ş%a،Y |m>[{󒈹ׁWlA30Ϊh fUΣLcka@L'a-Wז*SY PM_.W- j;?Iss+I m\+lQ[WVYKĄyp+RƓe^7E7lf0{Xv@>koŰ{6TRBt됽H::DMly(37;"|Ssw,/˥ =8y ^eFR|(}s,+#5X;R/ t& UP`3[%]q0=ˋ05yOidN_sRf|ix>.}-?WUsZ[_ݲ@(T!Tٺb 01#B8]q@XW2 Py ҈ѽ<1UBuؚej!uB%|2`fPn3~Lm23.L[8A̜uihU2 $;@q+f?D,PDJ@ҫ5L#nMbƘJ)ׄQVYdKP\ ^Ԥ,:m!3י  U-[y+4Qib(l$C"aə zۭ7G0 Ixqhx.(&7⮖$HvQ8vک3v("Iv7܅_jo0g*^%mem%q%pFHS>v#Z1 @cf]U'dAhj](dv,ϣ%2u[3 M cYUG2Ўad1%(GЌ(;p( $lΗy?ߒdIzZ6|U 8\U>Ȯܐ5 鳗'ӹ\_64K%{F5gbj?\H>:{F=hzNj| -qZ c3mTxQkTƚUǻȯHGs3o5BrL ˓)̭9:K6/h{c`k? &aS(n_֯$t}yx a/8`Ԍvq2E0 +E#9ygdzM3;FC[Q$S0<%ے`~0kyAX {|y/DL/{m+0($8 (3Vw+ҩ[=Rc_ly9 zipЂy5ۢwdCף ^\y6b'9$M\\BBgmJna#^уރshX=&UXq_C'edNy&I]}yDgPo~g-#9񈀴|KhdZUyN3|es(;pbq<<ʗRoMQ"copC.m/tsr vroN[byS8|t u?^R3$LQ  c\yf |y.Q9ke3}(*̋^vX֡O@wPCya'+TIoS5nf%Q#Fa[Rzp?Wi+|]CGj}NJpŬc$Ŀ шHSzD"Eup8+]zrN8F3-"$aMʂ[D]̢cĀ)xs9FZC4{{D#pp&"×-vXjb9o0ں  u.dVuan-Ws.Y|T^f*=kzNHr' *@# N>z@[GkH1"r8QsE˗>yO@+i$ h}5̿n=ʏZM J%4(<ϗws;S 'kT"0*ZB; 2%f˵ WxE,.z/v-Dzx%Hg4M|SBKW3 zQDNaMiD;XΟ+Pauݶ>"V+jHqƵفdj/wWh]`dE@޽.!L5ԗQ_8xNjSe963]{+($فV 0!̓6&.("-gxi @65fNTs(3k3OX {MVyE&;rY 4 s 9(Ewsk"K=aoObV%8Hfd/xx*w09h:Yzo z]prS)q+GA䙇G(9&šA2P15 JrA2xgrؠCx7fdr)T]FdODjf&4U& Wt;ɮK{ \4DŽ>n .( hF|u2{ v]8mAn3gFhAb#yЎTp!>J0mx)&(zI`N6|&'X$ًAҶŬCsU`}=SKIIdX2|u.I tE+ =:&&x xz\t} m]Eֱ"~`t3 ,(2_k$1܁8SAYح2Wxr^U´%m-LR(J됝ɐuIx{=s.F,L G=UѰkƬ]/HR`+񎱗N{q/ޝ j{ۀBw0I#clƆL7Ͻ8(fcoZUu2fDF iҼނi͛eY :_)1)O0끄tg貽goT֝hr b4v `e=A$T4_S>OΞ%Z<_k` Vҧ7HEp(I@ k.Jbota8~ץKsu_0JRՂX}-gգa3=;Ѐj2ԃK\6OI+8Gua` G<|)2<4(/Y$Sb[kO,|Q=D J!c%*Et.osU+E,rZm Q/,+RO{5G S@;SM`.\ KaYit8ik}XKF-mmNyD/,8䣱5Y)GePꔇLf^8hKJ&M$m+uxZMuƉ0DÚ8jwGؾjg@v zٲ_%_Pr{$o -:VNv-g{yʯ9N#l][5ʾxß[@zd8YTtj 䱃D|!Kb)6@4vc (NVN{KcL+S,suEs1HxZW4&}81` Vi'8?Bp T#Ut NzT{/T>wüWC@ŎHl:#C&VK^]1Qo1+iTV|V0'p~w?l;DM.r~]r^}F~pa3;mNdžֺmiR~jE2VD(̐le|/'sNuBI~;"94ir5P.VӂYvN1L0ͣO[E-Bx'mR0i@U1C%x6h]!t[]"P!Wk c/jb DFr(O `ˁiU}j@0m"X՞9x4Ȓkef>v@1V;q!pψգԭ9_DnŪ8slYb4ᓭivVѫ'BZS ߯PdYcCÔE8~tVBiҝ啄%WQe!SP$ÈnjC]LEE `Z͂AZ..M"nFt laȄuWtM&f&>j>/ޠp!M [/O9F2]E5)YdxM2#23_<5^.;JA#.*Y1e?A\DElx#y LiO@1Kyi!LQ vt4:ҟHa[`4tz1:4R6FǢ|UO5i<~:c4kޕkY1A묩?e}zxY*j 9vPi 9=hMOFu/rQ\jTH^=ˇ⾁:قe]I&0^*ٙ=ap%(XRXpIʊAqReOc!èj-c;d#XrSJQx' ܜ@ E;r$tPtאca؆,KNYJȷK٦s 쓲w+1,쒴S/B=zmcu-i-о)C,.b+>vv;!E2)SR5qЗ \RNYp D`mզ懌v~.-j礕uB2G%7l?G >d (cn:;tx 4KQ67ƻp+^hb$~sOhJO_$EAPbymqd~!hb]>ܤNloQa&giq}v81bX6rC4l`~ YB׋gHw]z9Ho%f'2~iN^,\Yo\<8H.+ǕU4'bB&@}})v3xjwЭ`R$/D~]A/Gtɷ9r5ˀ!VxْyiŠ7;tA_E2ISHU %+Y7o|CJo%Py_KBuBrʒp5OSr==Uwi֨9'7ǜoN[}XY86oK GD [pS4܇ lOt*7˭,C&0,8GcBM&EWpLݱB@T+ZjxZQekp 9䎈I6JKNQtZ~YNigDҙ3-Op|Գs;˚ENe)bTYHުP`s$V6JZU;]߳hw|?r9 IM.%C~52~ 7aQKCp7 )sJtvɅjkLݺZl$+{p=.P_NeDQc(U6HtQ:ˋ&U, 7\;16 @{H/nh r"q|*O I4Ҟ崟2DlT ]'.FFOp1ua/FZ:I)h*5_ON9 C&r(P%,m:>O^.Ԕ ݳ*Vq%."ފ h:}*UhY;{AܾLyicTRHF&iưkȪxmPt̄ߍ7)Dyjt{_m#i:T9AI4/ܿD¹o>6֚p+(+遱9yr ΍ !I)/Bal}. :W owx\oqH )T)ҙ^q 튓T;Kg-b_7y *"~3H p/g40z`< T d"ӌviWV:na+GԔݚMt'8bSzjo5YE8+1;5^4?ߥtL3? 1v)Tۍ Eb6;=l[#W@[_4wJ5:Qr}ISh[}^o8_ScCv.:O,&[VEIUӅwYB_6L=7B>Z&QdS2Xޝ g 3Qϝ+oB5~s4I+čbYo:q <zLfq/;:(u M}( ŀʤ$| 6cb8Y/, ` ԻA3fR&u%:;u͠l>m$ ,>er1;sJwMHbOJk[meTӐ2|lKjMB,CC{žWyDe%Љ<+- (llie-t1o@H jtD"vmq|tʖsVr0XT+btev~y K酳&̀N|/hiLjv0'5j0 ,Oz<$vM{4"dsYO_t¬G$ۀ神sHK2Ap/^z~sƨOv3iil5ͨz?;; dE>4g0m%Dzۯ׀lc/U0LC>H+9b8A˨i:#Ur2$#Oxg?.oDL~ RL^IFh-' fUc]Za길scBGAF֦PWÎ ߊBQ 3uLj fٸ"/GxƠJ0+D'o9[j6¼nǖm7jFIjaۦGXlm - $U9qT Ź֚JE:2>Z2;4TI CqȖݵĊ7 Ge\wn[\io%;juS$]`ϔ~pPM݈ ᢱG!˘UX깤`5pB V u6{N$[*8ҹb{"\/ۍ0S=ؔJUxv3/(ŝ P4);H8Y4~&0r`t=iM+.l- ,ˊjM򢩪˝{r !!*\~MҳgzEnSE1@Plfʱy}f6f 5 h60{gI^ |0Y/@S*SǝJǾMcisjlśEVۣ8~͍+Ҽ4j/kHd8LRY>A) &+Pz4cJe!0ӴHLNJQMsŋF5`7T?Crh)k-/1֣M+w ?0ѧ-Kൃ@DEFk4d\p#1`B4Ͳ!B1QQ5$o7GMa<|#Q^\%RnPEعZY(%H6uoX#"gwJ_z?3vuRcjh?[JDDɇu6 OgQt VVRh/"W+%!Ãip"cTST;R\14Cj6aEmW<`R7 4!f˂_QZĶn'cɺb7x-#5:[7驐^gJ W#897pPU+yaq^ִ^n&GMT(+$\ة&]\lG3*qIeRr?1H \B\xaY['JdNl{4]Lu VI'!M ;֝AZ^G(aӔQ͵Bj GV[X%L)+`v*0gqhe7~-͗fx_纠|YsI|1q * }kmɲҐ8!LY .3m,* h2~yF] IS@_5 ~Vkqn3W6P k0u `>yuer2!'>St{YM| WkCz9Xnm4YGsy5acEV[T6!f*ZL]s]"dn!z!Zr^A>N:Ϸ]4"Y.>QV7Tظ Z\2D6L-+ԉX [E&C}U1nqUcG#Hdk,LeDXؔc<BVkNX?84k 2f*ꅱAוOc{˛ʶ;nAwy;&},ѡ$zx!:OT)nqX֞6R'AQp>=UQq߫zJp'K<'84H~lگvi=V0h]]Ng'ZIJ.4OnriHɼ—R{ ] <Њ}7erlt EuV?0X]Vq(BV0 Q̳ԟ;6ԁ;{(OҀnT=MM4#0fpoVWp}4뮂ZjA[yJUGM ] )4tn/#o8j4^ZA+\4+qǫ"S*59qfo%Ye) IubCbt\㱏\M(o 3;ڋΒ 6^4=he )+o.1햑yQ`rF8>0M2}:bF d,<{Q<_dO/ @WQ8a`9>5ᖈƶ Ho>U5]{k<- *[{FÜ"I25NmdC Gn&ɎMFy>`U6vY *Ֆڮ. ض 5nQ\0 +Es\V˃i jsH lUt_[YJb#+ӒGto"e6[yj1)$I?}RnG/LF챈.5,cvrc4nZ- i!%]ĆcHO6hC&,+x0w&!j@/)pF1(9M,V+)Q W)=#V[o n8 SM`Lآ`q"B[0DI;ZA~`/Q\v', +M`3 .P*[6YPyd~ңÚ[$X\I )n'ba .⫴ w3wizbh@/H.Lس{ o2I$Ja<^h p2iB`mvcHsݛ;i@f3˃4r}%"w XU7ow34ԏjRdB{TgU;igA Mvekya ;% 65nWnh5QNhr\ ߫6(ޛ^ DŽ8f1mU)fr7,ҠPGdA-8@@z{[;_{ eB|`-QzA 6-g<$sb' a焻hC-lWN@=,1yxAtdZ)Geb-(pgk )bGh֐qﺗ;6\gdHd 2=3eǺ( fxj]Jo=zMAϘMlg9hi{`z| l7Q0 \D Yw'B#I&rC}iGE׵qw!}ϥ0yuyV, +hm |?PQKIt7t+D,8ۿhh+( \<m#lh݂Lv[7Nڪvtmgy9ތk3We{(΋}+^S i;9OX;Id&7TTTz9@b+msCV0vqw;F6ܳF9p^*tRqms`2RlFd"P036Fۀ0EOui۹.2U,=Ʊ#]3][װK !u -T[plf,yBF.(r?2!2rp MtHf.t}Ԥ#AⷷҌ:} O.TA+C#!ofB)H"i1@@$2c (0WH}pZ^9C/BB mkVqXf 3q&]AuDZOJ!Tm1 jd^-)pطz( hAѷ CCkʱ29|HͿT*ƹV6vKRP} 'P% <[l |8__'Ex?| ћ,se.Xjqb$Ġ UHܚ*X?| 0$ 3U%c+hдqK`vv6{|suÆxI-g"Xp`/rq'hz2{0.Ӽs"/_YCۻ}aݱf:5.A|꫿&!G`!:8 LyKMAJƦyQ,0aq҅a$#B?9@J&F11hk*A<}rW4Iڹ*E{}÷)L~h%Lש7cȮĖ\ ); OcP~hD%!e6ֆ[C`DT#!b*G &(ȯH Se 9E,,jgWÄ7`t~ {v N>̃wwv8!L׮ygH@Å٘\F⒖dC) ڤ6]yINQLFBQ+b2lbC}8T{ Dec?:H͖ՠU)me~$1h!3]6U~_3 Zs({ѮP AK³ꐺ%m2) zpZ697TM5$ծt?#拡] V.yFVM ]qҽR0-WT{eN9BV9Ac/MNis>^U67)G(1f:fM;]pi`@z# .jfYZ|dCPzv3Gg; vUsenj\Mf3 !tvT&KT xl~V/0&{sE&a Bv׺16}׼$81i̐J̞=oQh3#*k>#\^Ad>a$9GSG&el9#Ox pas_CΥl |wH*eoɳh2Q=j~G"Y&ł ;}GY:HU۝ k+Y1Em$h=NoD#tXPF_@[v2[5gq x;Y/$P.5`붵w'3̔M<\bǻjbgl%.ܛx5.HvQqn䅤ڴct:n\"Q&0(ZP}.@FA_k0a<H/._yXUkz :> tPP8XGO,%-qsO}wnėIo  0QM=),>4Ϸ{?SgT,QSv<3jMYᱠьvtL^ gԑ(5-%֜jC0N SΒV@JzL_q%`xl9Ub CaD>/% #v&ql+F6(_t3f.;?/3Y YnJ F brqR 5ƿW H{7 .^I܏+HL_oMY?e -9S@UvF@p&wzYm M&j^6 enU|#bTe5V!+60R'!7euEF|F)rtX) 6>+:h'iRR,_E&5yP]y~4Ks]vX}xuԑ_f:).' Y' DL,Ε^; 04-n23 TON_ĒY7b䉂ȟ)|`K23LdAĕA˵'{_i{;|ۼd\VUm s/A7F7D ?AҬODZ -:']#. Ź|P? d=uVї!ƩW&ɍ)&Kaܿ/6bgHOx jc"1 EM6O`ov}Lhѭ&GR>._M8Ej wMq2c-\S$=I14JO>|¯gùY('#[M}Fr*gK3F. jbR^#]ͽ^F#lP>X7J'08c Mֲw9-60F ?ɓ>XrkjtՄ};4 -e@k%#Ϝ%!by"fQD"M0U%8,G~>"`Hߵm];g`&ЪeM9DfLx15ܳłwj3oTt1:mFĽ(тXוJ9IoPѪy."IT|S)~BM1"ES"?&R~uF}YPoQ|C; kU3!&#ͬN\n|3qd(oX H@Q9{uG)a5[)>ԫV _!nZﻵJXڳyP$m=nzDzzAo"lȉ& qH]vo1}ڻ*@N " quK3"`mm44 P T1)aR !ﱀ=V5T0Ή=ٕ^fn㒺M̐͝a;9Jo3ZKM_EjRqA_N#Ҁ4wH!}E8w Q]RxykS(+1nqmb]ൾ#fټ#bfofw]JPZʩ Ўequ!끧wb*[Ag1ﱦl1g(V -q+b;ټ,6f(h|tξԱɇ-u"dQҺ h(Ȃ_O X"7zJwЇAG0L35AuXZJʂoܦ랴g; Th+hxB(h=HMJԿ<. 6xÅ/𵲱!b%^ @m:KY7KTS9'e''b둔50͝BeFQM92sryc e=vQ08;5OT7].'YL{;QUWrQN fΪ(w֫ٲ[r($>L4po-4ЕX5e瀀U23zIRȽcIv#1'M\߃# 37|+PF3B:lRGi4|:9oՔ/"vTQew]ތ-Gg{azj;?Y"k WC4cdR$X9&w^ E{q/tX(MNN'g[ƒgͩz覙S,SulX'`g.e**ޅB{Hn"[F<\s丷0 8X`edsze MW`GʅTrm,?*,o=x8Hs].#M6OB0kI@sTsX'd d)$VB9BCnk$=q`q~rJZM/:ߝEM¥.2SLe9ʍ$~#"BitC0Tl&G7Kӈ<>%6м³oKG;,f; äKjc!jHdZ*'ރ-[z!sQZXhiԽG r9<[wˌJLE3?B_ bQ7(5(5c˪b&IE*W37{Z?oeɼ%pXs=RA{7={:_Y0 yR6,H>֡Ģ#./g=Lfc,Kc$V >Uf‘F; , &{m&Ic"RflE GݣWH^2K/ɔ:zҮRs%8Qw3(}4:A0MMx1vz6 *3>u<_{}-lCpbEa'FHV6r.J {.oL  Hhlh*-b{勇ȕ'=pPN+`qF.Ҡ {Xfك:"[ MU PuhI &##Hx虋9k"urvbE% `Ɣ952zA(7Q=hFzw^H i:=W`l-lzSƚKDS]);x1w,ŠR6n-e<3 ӟTJG3LE]{%Q*tP}ay6(0Χ.i q}e?6~ `4$ٺa;OxJ@Ϳ Ik᬴ e#PD3k_k3oXA'4πwf^2PD}'ǟM.qB2ᩁa3CCf30RU8WVÌ_9ӸJLJ ^5\ou]o5 Dj(OĻi&(}#Bt&O`F1/~Xy26;JBɂ_H.^ 9Y6B@23q _$<';uѲS7]d ,\< ~ m#ZK@j" wDsLYrm HZ  )rJx&~L)]slP@= Katlkϖz^OQ誔Շ Җķ|uARsQ"KSruK$YGTiûV)K\D-Ȯg/XF֬w=Cd.KeD+> ̖cq`| C z hʮmJdyMbAHR@xB P(^9ӧUEΎvwnL m B>֣vx>>ĉփBW=X[jzm-'FbZ2 {͢y˯gPrˍ<}x|=Oy )uD[ Ĵ-G"/,"+?[?=pL7cf{͝yLꡮ9ڛ\1{Rl:ˎ݁^q`ӃjV0R%l@U_/AXik93`i9BaV\Y B28wu?̤铞I\ :Ut uHOCs-oHXDC@c!ݼho.~s!QH*5  `ہO9{X|P3L# So瓶\/S>mF^wع8ؐՇ5'sJ1xvv%๝3~l;~[$TЉ;X-l@1qn?+XHزC>ۗ92rRhW? I[`񬵃/3MbyPɱG؁DvʓRSK;D]ƎfjqZ@ު|=GwXUboD=lX~wVv#FEU R>*"Y!U(D5`J5G$Utv6.3C˯#KsE=-#ȕv1@lO+o:Fxb/!&PZ:䟎av:3R 4*k{!|x^6tM*Opѧ_Ws Ia qW* /qڥå0< c8 EQL` @_Vl[}LY[2P%AGbGaN}Ijd*vq>wec+!A23Vj;od~8Jcʻ΀RY^֧y0xcV8BCݰVe+Sϋwa<1k!S%P{uy; J!N/4 SIy$qD渚~mTkg=б<;(TVrst-2Z1)i/tީ>UաLܿ( ڈ6ˈF{8e8*}bESVab3 Z_b:*ǿGerHlٯB\UBgP Ԍ}BM A  Gex<.0c pA^,ynEŔtq35|sgMVsy3j0+Yj CgՂb"|\즻Q>ݸ("fh! fȝZ^֕Q7/4.߂T0VM:7cGeI`īM!vt6=ڂ!,Wт552IW_Q0#xҬ ^l'oI-ƛsMhHXY٢+NG|ةVWdK3_.S5?]1drX-èFpϪ z=4Q3M}bęn(EÒjBٹ4*Tk4 2".~@ы >O4,<4iÎl;3⵷em9s8mDǘ"Cjm|pd_;z< =$5_+\dC+.ɤ%ƏyCž͎F5~\~ X ܇BX}[#afzJ-S!l5z_v2wz28>:I̥`Dr2B[죐.G0,!3C$+HBZ C^ȒR@8݅MtOa:a g{uE8JD relC/{3sKnZ!8Q 3 cĻ<iCգ Zv#puShfz&?֙/|9@%HnLmBx#4} 5:*ڕX}0twO_~/lN1EB;_RQ2IGNN~(;4c@ђ5&9c.KǎBZa#Cl bo0ǿ}ǘ[ύ|J'й6[ؕIM?b9Kx.Q5"閥)Kz'aT2V:Ԣ28^ u{;.[w+t|EykewQ `Pj4vUcH"SDh\r@HFZہaT ]DLeCGa<oČ0g JW߬M\[m oh*,KU}7HWܓ/WjDJ9+5D\8j}nQ RZsnC25{- t07W{xT77&NO?՚y EC2?E͍*U`ݘ Q2bQ"- ݟϑ_i{&'4<'x TI!-SC2|K0P BiRgkK,MکeZ:tAwz'/ג%Zl1yYC3wz -B7 h 0[+6;ϹH %P^hRZGTv;wsIUۀ%uRrRZ;Ug5'cRGìKur,m4ؤ%փ M1'N_Υ>Gx _ENI!`SJ5d,+_H {85ߗjb'"rHaR+JDLM;p?X25#\G'R31? ҹmtJM\%5bm8S>CS2[̸1#n\U_~2BhV"wa.UN[20O4{E&#EBbQHRr d l!w,ObQUҲ#{߉W(A#cE+LK iaz띮(Q2%p$b֟J#g2cġ;O&v:*FhUQA|Q0}ize,/3t;1ް="t.WVG@ZzXo#@ڛ !ztr}"ztՂH/fL; Aj.NfLՄIPDI_' ʋ%JM6v/2t/v!A!5mՠXh.Qq۟lz,} r70PP#14RipNZ>d\H-\&oE*~Pw Z_@ k7Pc)RGW*r.[.#avs9K1I-;bq4 mݵ >ǻ DޢP_7; 6+ܹHm!H;:؎;z(R(&+O(=a;#[Yjmn1KW>v܌Iړo<:Vՠx/0f YD1RRc53Ƒ40׌q '@$ oz;r3$Q=겸7ڹHBpvazjVO3]/ᵔqȃ 4"I@/(߿ԙ @y@vb8#GyfkM;>|ڎv:_u]XԨ4ĵڍ3jK18vAP10Gr)y3@mn/n&̛npIjH16TƵ1U1?%#'M9Z;dBO,s9mU o'KS Y&ָ4M@]z԰ܒp*eTu5Wkf @pR]+ ^=GE^^)!REbGPc@'<{2 gHIÄs6Q1w.;'c[.o #mhb 9dRû0:),+MD6+?}p`lu8ǁktPx\N#Ă$ p| E.0ӗbhW_B}ƥ'S0JX(;saH&nPBx'6Odn (G^Q**zެ1\qpIq>U5}HlX@  {#D'EQ0g¿-̄oA^AK:Ԛ)fiUWwps)$#-l|6$ PM+rl8]pfTO!H[!h7J[—UÄfqGbdXϱZ='nnaәN9S=;A sFoR6Qlׁ.R<=7HJ8Chl E;XH]t}i>Yt\Is;I޺aF͖8(8#ۘ[fQWP\X*C>$4+Zh;f 5 A.b!]$-=,n:ckW!_ꑾKj]љo؛!'{s(8Rn+f NODEֲHw k"][kc.^x .[Vl5U\ً 镛ތBH`@"v %9AM-ˠ .,w: = 1XM ./ )Dؽ ]2CiS?/8C&o?6i4~7I;|Ipc6DW4ǚ ڋ:G"G5PFHDMqg s,W NIWLP3]Hej󖋸^u|f1PidWSnDxޡ 4#'?a-WRTE@Ae. p)^Au)c Y!ybzUYfP}Ƞ>=RmpasI{SRmME^hk$s`a"fNhqf$w)7YH_Dz5q]]~+fj!JW!$5<$ QCUF)L)'HފJ>aG|`O8'CoXAҘ%_YP=Lr:+-C'36!̡9++Yj1@_:pb176jfKf$Uo{~M}cÜf`g++g-1mY-VK45 ìW{OȔ DRޥ%;P)qQ()Q-|6!°4ݷR!tG Bn8kS(iRܓ?9MSAhzt{%4/f*9C&RV(O{qذXBiS*(X*!T*\s`5o[Z>r@ή/L75 cV,ß\\ZK%Yeo$~8q*5,xD#FCC1˛lJr՛pas퉡W1y+/x\85ۑo[tŋ x^_gs2 :T!.`PU:I<+2dYfמ`9Jtwhp)8ǿǀ?>LW5^ңqTK3?ͦF&xOmrP[s\9!D?^%R~#*NRc>y^;r-VdWi&ck$`YR( 1mZNdh+]>JJ`g `ۯ EEQqSu]l[\ TC xId1Y%1p4QIEǿw3"`HU0#zo]|> a~¾ӥҥ):JAjRοԣm[GMR>kc`'ZG7.׻b/Ԥِ$!z4GAQHGxe5Fl*lĴz9Zn!eR 2X?*A*@f#F8ɕ1VIt3H|Mp9jQt9@(pI0!ta~ȅ0W(yzC&S+ yzŽ+UyJFi!;^БI[ZL=9s2,9(4U?h?*/4jY{:fU$_xh"6q`ϒޏҋl3>+&} ivp)N(M{ 3p lxۓ-EeN' yku@]&UPe'1Z|t(*j罼Y|AEtJbJcgvCoQjgTB%.*47;[q.ǎj$2nݱr"݌;@xaF>T :acSzrN>î2G Aȩg^JSI<ꅝq,]c} foP(+`:+?Q1EaV&@ڸbrO*Qfw"@h168jeQi<낓/JjU9wFo^AttqpUބqd{fA |>2@o4m֩ `7#_Qf8_؅66(v||G!U'@Ch)v-2 Fs>V*ީ9ػ eb$: 'h!WTizڡύ݂PO -`3ǴH*ɝKޔH El_p-Qpk8ddTh d/o`OʖVE,ʘg8ԓ6/wgW^̿].R2B0\iXIʏL]NaD^L؂؍3jE#l8A+ѳ8ftι ǯUď ,C 83P.UQl]3uT ODiu09K=_5Ũ8v% u_t ٨ۚʵý='zަy͂+J }[M9*;5:qo)`1mVI/Mc~*o6Y?8az5mS\F ch@RϛudtU5iڨ-g]chRE5eNn^D[ בM(*RR1WĂ_wTePJvB &?CM1U2Ě{-S)Za0oM12Sr|үgꍥ1`= *C;}oklh: B^Bk%ћ !?oۥM/ dzqҧHy4s  S N'hoXK+V 1ԟ]JK1( 7jBӰz狭 7XEԐ^UZL_ɹcY`м0?p:+=}8 7QOsڝIn-{Zx֐P2A oD;@MBx,>1T&0&Suhd& ;F_HktȡYSTs& .S#( Mr "@TݡSC"HGCK e|HN h&Rvw +<Μje' _H/z g!n,%%{-͇F!t8}X"x-Yy̴ʙä>{py,:y?>{ ne&ܠr3xp)J&.La74Ce@.3 CVESh)%mUԱZOv\/GO֯;X/h28S"O,y➮Tma;S]jywhjhTCzr~=MAm/A(2q~Ot_E; V}hI71sΏwMc HTBd]\b~^pY(0 O?8elON[bP̮SD]&Th撒i3a i[rJn0>Vdkyr0B՘0?ʞ9CCM#π^NׂLh/?ywT2Cq4q^ŭ#=gfW+Z{CK,49,6DT!~u{ĪL7`~3LЏ?<:_~s.kVnD> Ȗa%b(!W/:wھ2)nDi"i,{3~uS!{I8s+-p8:UFffNf.IPDrL](ZcM{YD1/͒asoY6E3q żKAo\0~+2A]-˖}$O "$1ZSЪx ̸/dBK,}I󠇦"_b+8ڛ|z3=V[^)vIʅ(eR\]=b89 (p%R>_Edzg)|Pd6+ Bp"Zm~'׶U@P"N01x9%u%N>妳0[CC6i&j9%bC=7-rnz(f}z;Mz}BOE&s5~=mc8`ܒs}dxTQQ\Oύ'@ Xfӎ1w Hԅ,C6 5Y}SXQK?ޢZ݃hME?SӾk4xp}{5 GU>-5]Gl?Sb CNo}dr4*) pٿR`8c*w}'y]/boj*Qn _E8#1ljO!.]0Wq\"=d~{d]z_TM/'F?#MbWksowJcd)8UxAm r}H*n^nfQ~hЉwR&;LnwM#{O O^0i6̔ך (eolץN~M ,;Ș 1VŸi%c6DVP-E~x1٪lHy20eM'd(S' k@@E$lot\uf1KFWKTŒiV!5-1(z>ۦ/U[{AOL?d;믔M426kz{5\G s6șhAE|UroDbyxCzOq t!PW黓XSuB.-P\:D6m%[z٦0x튭m#3!Ș2@֚;$oU g mDq+b* "@;ݭ+J>Д&WG8mV`FU('ssdf-_ bg*{o:(:eDK]a[O>\w+*49bdu5fYw+bWQ5O(NKp|e tq J^H[yH #nfFv1IӚR?݅ZpN،Ql;-]c}MXAM"7㗬E[:ФI☆_]XjCxöި6]uثLLfRDNqQH GNCJEß~.z3}On#7 ݋ጅQ"z-?L9eeGI,S+?l0>DIm+z}9dg p\1c濲 ap1q%ҩLaxwyY,{NVM䑂SMU>|>:?\w|;-~*AΪʏE:. 7~}V X\#nKyv#6Fwo2Q̮Xg!35#y쀗50 Mb|\'#z_dP98N-{G*|4ҟxY5K!ݩ2oCnv(LrCXY* ]m&螎YF:8<3V. v:H-q`dŹo{gD-zЃl.[ +φXy~4JC?P-̗NXj9ފEY̴!d*(@I^vƋOnx) f=K_ E٨3P Ā(=Mrޟ?MP 2LD4L*Uy] YG,@y* ڰ@&mΟ([G^o E j&6:hHA:mg8M ` BD,43۔-"M)!jvO Iӗ1ۄt,<}N:_痎AtɂxS:Su'":]=6MG2~ۛso'E$)'?XL .h^P(Z%>fӕd~6O}Plm:s$ZPe5uU q Ҭ3vB`f)Ula4e D@O  U (yI(Ro g3rӎ$_CsޠWMl[|ڃj(8sT3rq+i1Jz b{jfȮW4K@ 70uԦ1?E)uD0훚嚫 z{/aTXF,l@4aĐ:?0<8qR@[_}p2BR怙Ω@P&/oݷk4^N4 KB7^Ҿ%7;85BILQI'k%rICn㝥~dȲ1&mH&NOtn_{ę!'4#|ZSq(G 8x}{ JZvkX5D_2KO98Z4|uC41@ T~f΃)2H lN~>?WAkP։k*_c ,_Sf=$W[&N1@5ӗ)c粷\jo^3ey^!RIR,@Ƒ 14P d3V-pQ+NV%ѳwB>_ M3$qT I4́BkUga^S8(ʁf%8[?ʻG88}F/qDGh==IToKg<={Yr."$3I\O[Uф/fМcE&f#JA^H$BsGХGoգ {HuqB 'scEoDHrZ<]mlE~ZK9xxgJIdvv0t25=owͮyH0 z9p^>7M<>? '/`rG!5g%4d-y*Dx#ˌYZDYl5x8voU-ö`l!q:Z=L/'~f<#"D)#An`O=GKdُTNkpPr C|7 Bc{$@w''bɃŽHXyn{^t`fgܷ*U,{ >9ISEcRGVR:V}:̢?!jf@nPޚ3, H ?mF"*j7F -Sb> [8ݳ8sܽ,T#uB/5]ے /kZŽj'(,W>:Z`t) @{vz1S3Uz;LI#J?K/e,:2C'YwW"y5Лt0Ͼz`ׇa˨f~asI,!Rw L'8\.\ :ppG߯FH ]S̛<݇fߤaý灕 <.NIIR35 MA@br}u_Y7v%%Z<[RL5V)о v0+7"DB_|HF. 'g8 ^ULя ;Kly,:|B%IoLڋ@i/_''ѕEټ0ڶ5R#ѢN>\ƭB)!?6V3U̘`藗ȍ+eƵ9nB ^$MrWg !lٵY*Cq(/ֺz91`A`pvֹIKL}c,tSt,nnsNWTR4CfT@x^H@6C=`׻|.u epC7)Kԑ8'ڨ~f`Bnz Jc6E'Z|/Vyޝ Yhˈ{2Fꨄ=tIZfGkj4t,H)zZA9C W4T泠_bT3RJw{hcNH ./* '<X!!RA&t u{2 DXBZ)m9i1jy,f ~7}ɽt'{B=HQSW:3i-KB̥͗5$ s'^z'1vjw)n\1\f}3 ]+k}փT$rH[ 8@Oq֤0ۊ'A.1K %VwnntI7r9 xrŚ,c d+s;V\]Ͱy~צsX*t`~TYe@O4RS= Y|Di"W%#&V'\K W~9C&vh`e?E/_'J'OJ3/jό!hَ3XUoY cy"µNs`T,JhM*-"VvvW=,͍p ٦5c!۸ !u䕡l,^x^ Yq PS1m'N"J ձ]g˨O_قzkL 5[:%Zx:|,L4i$XJ}|}Or'4!]WdrNzƼlh0QimVNX l/[p8kstouU_@ mI>jb~sj8Ky-@fg`:cߟ#.m\}9\La Ͼ=lYcJM+p8fŗr,*c5ެ "5=řxΧ[y$ӾCX} 0 ?) eh'ҧ$ JQ13[R nKlSޓsS5Eeh˿=пDf =@ŷ~m* [ O['}qЫ렾by tتVE/1+ 1fA\M -.KR Th;q)]9C%(|%BBӨa'R@ .tӑ|3O樉3?;'@g\U7kh|30PѳVj8]ϝAj!`왿J΀7p脦VJ~tc]仴<8݁K\@lq$` Kc\$b4^QeYR,ZMuvܸsiF /hO.BX/z]^6o֫9 Q ʀmγ*m$3\cGR2B<)/piE6vY5ps\<?lntH0]{$lj,*8Åf`:eftUa]mxVc$B#Gex_k;(UX%gHd~UigLjuDNOH7\qd7̤B$/(^IwY1{d5N2#؅P6(S@IsvӋ6b@t..0W(JN%fۅGfĘ%! vB"dk-"zf*DRG3yR?`b3l~up|su"oqXfs(XbUxyO^<Ӏ? htK\}j- U$2ǞYT)Wtf1 &sK9]FZ#(3P(p3 yOnIfSY+ѫXG'b¤PzWM&$͙6r_ë p{~HݐnLK7j?]GŦfLcŔ8q[NzveF!9͘e@ ٽp7՞b[!I"@ dxqke*v>g8!k`Ѱe_tUy;DEkM_24.%޳*%qY\b~j!T328纑w#\3 A/.nN -@)srZȸ&ێ8 dlxGb׀:CIbG)YGe Tau#>F_!yòa!"=4T1QT &ky[kSjP2Sjt0p5[x"S $&P=ƀ2CUQ1n(ձ3J1b; ]HEߋ{yW"tnb'x!t᪍J6<-ZvMcd/ e ү]!no!5?AgNҀI)dwx;xF{R?asWi4'K/KykϊVx$~G9ߖrzۀ !iJP>U'~TVIXgͱrQ rOl*7 Ka"(n MU#:^˲ۣy}y Ɣ'܉lUL&DZޡb>xiP*|71Td4ь5Fp9BJA6Ӂo@ʦ F/] 3SX_o#xs!1teW\݇`c9bqjBwNn~)Hr"Cߢ] xiʰV6_Gōi:30Xo ;(U^xb;i0c ^BX iOD'(~k w&y UQ+"jrr{{Pđ6`<7rsݏf @ȸֶ.aklS@PٞV;H6b{F98.jRTY ®qsG^AjlbADIńA)gxTXز-QּMUx~g ;NE8b:1׹78k#ټd/ŸV+mxFubq摍/tغ~j}$^<{;$`_/=fa-vM댢8$eW܈=t6[?y)rTxec}tY;l:2n~}t$CuH&:S*S*Ħ"B+B5~hi0Ds]cʹ^/yW>JΌ"`tpD= tIA ~x@2dx u~<\`Z>s)]A1nP % lF5`\$8뜗}5~O%&jOp><.h4qu6rHWQiyTGK'tn Vl| I)c(oB!\&STǗIEͿCH7yrjA5sNmCv\ƎFҳdS"$y8zbx}v)jgp!O@C(n܋O?Fr̗q{iBU4 0d \c IY }:ܢ(ɞ)hyԫ_* qGFiy;ZnaI6yƴwS[zf?nŎI1')ׄ_H:Zg$i*uf%I,t=E+mc@9s uix<UAbU0im`ïXoo:eC=Bygp6&L 9O7_ׯu! $Ӂ}+`Dwx{NGLSڛչ@Q(f>zj4K9pt65ve榋/;oɤ*>B;[ߐDSp^]_E(ˡa 0Ga0#(A55ܧ9ϝ 8dJ\v/GJAb>% HnZDh>pETʲ8`bz8? 6>ME‰,~ܶ:yZWq}g@Vblv~O ʞȗm'&^-Rx5m;9o70(Ƿ0[BHX MN 1$U&:j9 UD R6bh%lPEyºB?-7I܁V+eY32U#祣 7Ye1ysnGYBOyO§ېiBo 3m'94p~Okh,D?ެI%m/C*K;_ƍ2cҬtĆ$[ԕ68#;i}QIzIG ?\C3{J 9Bmk/Txѽ|)%Wd5 @T0޻ѡ %+mLTռC{$KNlr}z '@9ҽ4 n?lL_ @]rΊTes$mĚH-/4uwzt06zD,eYWip¾֜ۢ;|'q<4[3k ]=4q38{~E\mXW?Uq, t ]Oh1+yNdDw݇>Bm{b߲6]Glnb#SV5#Tj4 "Zt~uxC[u@8ʑ]xdBf1*HgC|Fu*`PtW$zZe*Npw!|@▌6 [X![ oljEk^ZdfޟH T? F HgW5qS,ʨT`(zɫ c;X>؄ڪ撬5-x\KMu<;-́1Ma, 99h4F@gbn>ʡv jF>5Af? {-Oel t8ȸ/_eABcQtygzmѓX@գK(a:?#L '91nM7z]nՌx1Hdjzǘhpm31 [h!AL9W >,⏅6u]~د_|HK׹lߜl^\dv!=/J#I9ߩ؎<6M;n4i$|샨 M"#{ Qǂk=`J9ρ"\J!7YAKA-xr mk**}{W+^V_ȅ+ /~}U?\f9ʒ![d Vv'|v챂8a2 y&XEY/I_;fP4EIV 4^i=׵L"Za#mڶ%Arz' ߦ/x]SeX e+*Lۭ Zұ(Lr Arq j=^ /pCa <[tlc${{k跤7HC8pC}m5Pp# |_.m5H AT 5O')ynrmGt}BЃUA#!N_f5 w)Q3!׉ Jn V)Dm FمE%TC5E ci'/T9٩gDhKb1ah7Wᅛ(o?S;(i|lwҤ:ZdʆYg1۳Y̙S1m(Ԣ*v[%v-ed^B͉15GjR?'E|ѰN+ŕVcH p$7C1A;qv_ iqxb*(2<jNYyc/6&l\|Ud+b[f:]jLۨULq#PЈ01.eKs[< N-hOvOU<^ Y4![sU[@KGժy\Zb 3f(x' MuZVe!h`S38E]+\<}Ai:@CA56ibWf e҅!<+X*$#VmO~Թv(RLJ@P?XCz EhZ9)DFs=,,)r9PIc$ABПё  G[X5cUiwFu7̼{RZf!aXS9x#z%_(EMנNM(w I6;FjE]$aQh,YCl{=1[,bVz阹je{hNvTCJ]6BJ]o _j .IoYvXUmuP>ds'l tu}_rDXv0}2lqKڱ,[ Y^lӳ^B x_][]R*whѲHwQ;ɐF(,g o!Q5a(3|֥me%=9ԢV ?;=" #H̵h(ʔLbIs%fφ]'5c# *Fe ytÁbmy_VӴ\$Ȝ9s' .zg.eW υbztlҧ6݅pr&*3+^q*t2Mٱt**; B^K*wdN;$Q2<7mp)elүVn UibjbJޢl F+XX; o1ʂ*gſc"=E|1G~ :.;T}(%gg<;ջ2l|R+$M5,%\ Sx)^ 4nZ#['7q&rT#I"1Ro^mN';MIDO`wmAd9^8ؖ"[Fb I^|g ґwJQ1k= 7rmS2ͶO %$pfwC>Q2(%Ka*nKUasMڱWe\ğ=)pCCפ$ۏLݎ* $\s$daT(TfKB^8hLul}REL>ڞwE~o@V0ƴ{80pyl%Zfb5<=yH4 "rK=W&_[&dy̕Og+<2H3Kۀ5u2o^`6vHpT0>m::af[ё|`yeҴ 1 ؠ?ZJi^Gfhu9Gns UnOadp8RBX {zAD54t"\Pfy:5^+(he4C8̳ 90d0@nxG˫۽/G/rP^Bj h9uι:% &g} LsMY~q>oľIoV؆9)vx.59b`Cl<ˢpj8e0 >?Blcf9t~?|>ݹ4Æ`,H}(Vh9*$Q-#;d^ZD.7߽>hgL_m~`niJe_l3$fsy-v a1ExDWƟ`M?J'4I+uR{jU[h.9hߩ <St`LR:FyPVc\|[0_3\ 0%g"#a>g% >z&$a`4jN]à5<~Zz䌠 %fݵn(ޥ)#MlNj (ar^>4ShGKO@ ^s#eS7Bedv2]?{mkb_#>&2rxȥ}Tܜw{|W\)deF#o@H^c+l?,(5.[Z]w1VfDuG_*F几ԪQ(8CR]E3Elz$LieV~[7ι /ӗaI:`^ {{zSŋ[hHT4֙zd%7Ǭ2%I Dٗ>\bպf]{K<Wv6gޤr{rf뉛٨qkR7M`q8%kmyk5X?] _{,#!]j?2Ƶ+\j"rGċuM6T 0Uc I9ecV g;u \ͬOk:]ypTA=~s|t!?/1 a :.]с3CiBb;_o* t{Q|A NM4-]y' 0|ܺ௵*t;7f;$Qfdn};^ٙf3rV9kr]zVR N7>-)Ԡy(yؚxf8dhf<.{o/d2_)gj1̈&7WI_4V@D8TBYUeE7{Z1)!^-3 ޕ%걄 jC?^>i6-<`!.=0QKxv,;L b92/'gBfuǑ ^$d" -tAS7;֕|2h<8<INLUH3b]?i{p {hh{ۚࠕ%iXW߾BJeDD&xe!>ޛ̳lO2= :'@:zt/ 2Ei .lQD;ڬ rkXot2z/wƂ{ `6Jն&!vbYѰ-PA9, /<k~H6tBhZe̯:^R>B /.9=;;(+mѐ d5ւ;o}a^D,]@sIdcZ("3(v RgiJ(4sؐ03&]$6XcJI$+iq*SV1+XAׇ}Rc+$ *k8`Lନjh®(,y#|g}?lDh3mP0HL.;6p`=;J~"HCh{ܴDݰ TT#0NOFdP6q7|FR>hdGNԽY5dz/l-6[>RM %NM,F-3RW)USTQL,Np Sܜ5*Բ"F/O!d_Jw9V{Փw#fҌʹ/J3=_9M~ :,(=O$@6kcD}˥f;Ɖ0,86'^ݨ:K@ 9p'|Y(mVh'Ixʿ8:dP:XFż/ؿ_6fR P9\S $j8Y[\! d1qWbDe$2.BF}" (N=#i:8K,pڞ]rn<c *5 Z}f:9쟀>zķ-9ha o}aɩA,yP$脡-q̭']->EW5ewuaH\jr? \Lu4#t+(T/eeqP1v?<ͺr.Gg1C)D~\Kt( x;nG$..+)Oo~˴ouB[X%&6ƿo1; y-i4Dɘ7rM;3΅ƕ QP5( J55=pFL >&$m]40F5VQM]Cгqz_VتPmp_3ZEH$IĤ\Mt ƁRg*j 4bU1f1LR\fӽS(fhzs$lEaG.߾n7BiAT­dQjbu,>IB_5fu`p&L+L/ȫ{3 f=.53f~dt\ 2=\ q#(x|o%-t2})e鿤WĹ3$4ǩm^&cRU ؒSiHiH+ZDeWSҎIR5r$i=jmE l2&mУ]qjՖH BXәS-W !`_B# o1#,2z5x$APkdX 1WfSؔ )\<B14+ih;L"6IO+-0UY^NxgOXM?c!ò/]'pI"J3eF19Aq ՌoKD#~t#FAc ue>uL'=Z̦JClfrf̣j',cݤ^%e~a'-8]$&{535ۯRH ~hPkqz66CG ?y֨SרbTqg6 <_m~W?aM6oLـ$t#"&2>}<0ہe2}TIͷzds[̪@;z!PB˧p "FTU EO~HHoG~+6xح1}ZB)&12_ԵF(d(Öα3؛2i݅&R%҇bo2 ͹Q\ Y >sBP1o*)`r";Z˔b׵~jT+KA@iMd6?Ea; s7+{Xe%R OVUy)q+ oϞì۵/BLETt_[Uw>pD WRE,[ ;C$A.]!|v#ci/xD"qZV@iC7FڸBFC, JmxЩb$X q!cX g ZRG-8/j ;7*a[VD VuIAx3I,cu"͹XXG7Op\Ӈfu:ǯ7nnKϡEs7xY&,4k+U&xo mKxˋ 8-nБ8bnN)SE} ] a#:*F 4w /ULu5N)<Τ7DC%kǎ#RW!$ĴAYYguRi\5P9yVB(W]/^ŎwmH%D,:1;f 61 d(wz/USߝ[53lpT0|9FGفhYZHm)8>j:j(6)'3{sgn#^<* *"4OI(JtyUy{)8".TT ;xyW[ޞ6/; r 8 +h8zڵZd3!z/d®'@uR@dKVI0!ƠStCs3' BF[GL4-L)!tdLv wM%4Qc2{3fVBj$%yT[qǴk4KϟXqyzfvR1^\4o־Ǹ69gVgϊ`kA !)9*ˍda;Id7A>K ]PviS?⃐+7)j@RYeo*s-:i}$H$zLOe{ tZZȢ9_2.ra-G 񝑗XnI&Bmsqa OC4X<~|gw)IӓJ@dm"U2eL|T:5I}iz{N!C-g\+hۏ~$}{-T uߍ 8BI5 ujKw!d[]ћb3/q t `ܚkJ:v_Kzbt%f4pT, QŘXn ]QcCD)\$|)Xmwöқ]zn2{ˇG}b`/pbRŊI֫J'/R*cu[G>(A.q(mÕ9rK0sQhd }qO.k&^G)}ŤWA\?Z,|3g BJg]#|Wǭ {tSXh;D ,c)\Xiϴ,=< :*#GR 딚/2B߷#]kFD<ϊCG@*|qhdAJJ>b abҟg40>PVcUg7VsCJFBM@'#XG,Hf {4}B!+jF]XveB{E~Z zT,3Şg܊ZA TWlݔ(| 5V@ZЅG!6ŭ0]~ 0}ޝ&)"g{1Uѷjq J~h=x%:,P:Xc!Ati[ǠvũiaPY`Be0{8ԹWB+Tκ5aV 36ZB6F״GXjXC+ttj|gӀ[6Hz9k1Ξ?IwNUE&՜ zt]=6e|ô[_y芰X XY4ܠsTȌ51&*ԗE zNLY-#gpW}3GkD< lhunب9_e =Hx=\69ƶڣe⚟[oN-Z ]hT;CbE| ZDM0um܀5RIAO),܇–VzԦ5{D'cĄO!zuՀ禃E1%sMo~'u0`3aٹEA$E2IlzZbN+%,jyÓhXG9l)?Q\IBrVUUsXCDsoà'N7fzDy n]a7w BkI]_7<ػ["~a }p0ΈaoB8|'J Ce;|llޤRq\?È0fj'{A5 sP6WwvD#ܘ/|V-q JK]1D7Uk#AJ\O Iu.v_v_o &|ߕo!CU@ km8^Kn'`9X( orV1e0{a<||lD u&^=HU[;^xq*HZ/[nM߁Z.{&1ol4,U>pf%̱Ijs@\k1j͛'mjW*!)84r/X_'= PLbU pbR7ͺ8U@nˬ\UBᣓ%v-MdwOIJ;,,fP:14-Qg>95hz0~d䳭lH1j\߽u2d,3ǴiHxxO*1S0l.塐ҙ3*3/pW]>uiH6fnvo)֧s⺀+8z@LyDդnP|(6"cE Xqbbg\Nizx MB^fn]ήtY֓"ZE-/)@ ^Q/ʫ)94i/Z]?b8;Lm.U,~߻?P̶9"*`MQ"9!=M{RٴɈawrXM=%uf+5wEVy22U8F؆<C=H{"eȇfU&G1ziLF8B7S]K&(C9f3?#_Ş/C`+'41@ĥfiv7 dX^aC{DL>eVDI v> ,RH`P&Z;+X2 yaEgs RqYYHy2Ѷ_Lm0z.2|Yj  )Ge}oU; DB̶2IeRv)XLQI2F,\VFi9;=]ZjMl ?+mMJɈ;}Q&+JӺ=vw˄FYS@`Jf ߙ1R?).وhEҰ5*<^\e(R)+V/ Cq# K& h!Z)0Vc,3Fjr1' +Wlgm01Z`bWM^3a~\W-Zvg34] ?MA'|GjqkW~7֠i/VdՁ͗.i>_bjk2DtNfx%RZU#BW(6jnq bW*.W_ ak1D'YIhnzR>nqۻ".k䰞Ok]-Pv׉?"_r=t\C. 213j.ar ΒӉYϡ Z"GD)48 f`ayFmd8v؛*{i)ۨ4cMp"֡/sQ~`zvߝlOv*;L1vIg ;Q#;_wN|6"aj]MP|yz Rzʄcn 彪Tc_5ؽȲ8"H%c6qt*f*#`iWچ}S`.G:MeL4WM\ruU,i 9'| kvhmL`(p Sg20h~0C.H1 >lNncԕŻ8uFdWuZ Jp%M'>K)4=kyJk{lsa񴊱(< k>b+ƚ A/P? ?az 3X7KA(vS@qgd b#ZKEׅqoG<}/' ^[[SX2fx܋ƒ4H)Ӝ>v<[I4/l߱gH|rqod^hM[%Pf?@6/4 q!XaR;]hݸ@S bB*#@ڠSN,4)PRVجEqW%%ڠ :IZQx+ry ^ 78ZJЊ/9L4nq&a~<գw@$Cu+U.)NtdE"k?~+S3,!Ä.avԸu4>wF^`~ժ-pRqvK|d͠! uI}o@T@XGy6XS)HV >fP`g6/=#@1a,)IiQԑMBm{PהDщI(N]qzmݍUsȜGITiN^'Z!m@W><J-к2.]}{MSygO մF|@0b:|Àxcf7gާ! V'j4ܤ leTlb}բ$2%ozNiMS<[(HJ`9.+8r6i RY> ]zgEuhz .2SWKG5aXP`dlz*Rw$>TY*~>}@c5.SzTd_=ƔAĔl !Θ`K]MخZ5߹<_sfVq?Vjl$b͊E>7bDP:UY{QX\ \fb{ '@έ|+D6n_^.6ݩ^WC>Ҡ2]ֈ54Duɰп:YrybҚ255Z͈W]p`mZg^<]J2 w%R㥬>SK\|+`:)_iAܘ;$p RnFn?\^Et0&R}pwH7r.\V`ǧ 4\ hVYHF `ǹM"p]^@;B : r=P^<4VnsAxZkvY;EqyD痒4 KC!q bEPzs)$4|5pmI˓Գ;),5]zJ2נ4hH#߬ G=2V.]",@"w G%@ k# XE㲖CzjL #Ήpup<pa Mv=(B9 kHVBuuEе)U7^l+.H#٧Ϗ{@u+P/8|7| '>aR!*+Ux*ա-)[S?72j.W+㒋+u`-*Y]L])-?PD8;`:Oh7++,V491pt9W=G.#>$:\f1Nia\_0K2RX `^S%!vXZXi䘀AŠtsp^*݌&UFIMu7D%CϿxT b܍߼ c!ϣ=)xDq;M:.aF<ܳeiDA& ;Z93,6@SdZW9 \y0]L) 1e&b3o|ФIzޓ>KWE)>蘆ԔDVgX;cT~On|U`6| YO|[ҿNYw8ڜ]Zs?a] T6j,@,M q]VR[pz.'F!ѩi4Hh+m0k'*d{A5wV S4찊 {&pIK`Oe/; U- TO 9O!3a,4{/ߡ[dOVJݨUiC1msY^ h [#%J7).P`?-lK!9]!\Hj $c &D"GƲnA(¨E‹!̬PF223UI0be2mo]qa`{@O\u+i 4)FdWpHrH9aRy_d ρ9siľ& W'A2M߁ y~QgOG$i{(,#~,yc_DٛYcik'֙OW]dl%XpԾ˚{ _tI{6YWU 8$H9e>c9Ү`ѰHpߤ/@˗  "$OD1J cVe"ż |yȞh&/,;ߟU ё0#~$@F{o~0wN][F;L:HmS,3GcNC񐄈ww\κ"v2Bƺfޮ8fv|‰`q3&էB&#hճ˛j˨a{YTiMiŀVfuh\Bc?n.xfX Q3-;G,tSߔ*5,ޒBmHRY6g̦5Lz߾U_)fCM ͨTDڈZ)Aغ|b#8ov;7^|rErbR(}SRRU/м߁$|MEarJeccyO1fP5s]xYF ^9TQ3$I?'#\j䶘_t@Y<!F/࿴ |B2f%ќ08!I+'[dfeVb:IOZ*r]>X ܘ~8C%=J?S3;ᕪ,&Fv'?@DKTeEA}-E47=}b y7l(YWv;bDK}3ԯNhEE~1#Xg,,3EskW{8#%ss?YݸW ̋(Qooo&~w 4꒠0Ӊ}Fxwl 2EqUnlTcn>g⹛5u 5a>(,ob]/<4҆+ypzKc`<>"2?(v )ٲYX]B?mU۸|ע'/5vޗ )cAL$Eq ᯉr^]t w7zJwٵ يR uOѷ+8u ge:ee|qz(*f";!JKي'%_Wn#I/-7OkcI!\;fdN[I%]E|@1\ljde:qY݄îZl9 kmJg^9F:f=u[3aJZ KWrlR&?ūgu^T䫴`\)He&#ʞVll"[!ѿ&h]$q`Z3p,t˼kw-,7q U?|J#⡾^f<ϦԑTPh+(-1pUL @k/>:굔%Ww9o]5᦭)378""@ p  Y{mW ˼Q\@=S 2ԟiLv|HU)oS%zPxjIA>xo@m8 : .nXfEl,lU*qB!CHJ?e?W/4RXf#O㥇p;p],\ t=NѲ da <8i"v' zr%_5[cuas00A"Yt˜w|ZR+ q B1tC GHv8w5gʕ?ʿnsma"k#ٳil 0:xRlq0qW_#KEqsFXvg3~[dl)VIȞl euZ\\`f*iW'h|0]}uf{CaTSpjؓtʀxGZ@U#N锬~>Qlꭍ.+xb+O@1l9"{$^,|o~hXk!3)Q-5ejW>ħ6銌VlkwZ(lCIwQ\r¤*2C9{k-em M#K;9rZ5tjRAcN$RBqJ7dLJ;܀S !v'7:Jg:zmNX$e/`l5@Zs|RUmKYd&_kt$[B+ jXf9VAfE'ݭH4-HYؔÞq~P2{Y6`W{fCO;EԿZCZۉgaa+;dA\59[i-k49˔PUc2B}S6^[tVU,-R/YΨl4U(jg#+с,Ȑ ۍlNyItȏeM5 Hнr/hgW|w[7<=;Փ,U'YD 0͇ٔAZa|u+D1܈4 M(k1t4"<5{|]okV.Q%VRtߛ=ed~V4'{-)p sУ_H/Nz7AL(66xU,ȤfsD&^#"q1Ϥ2&lq~@:N(l:[s#OcQ)H;,%/6ih;t˼6v^ 6y_AnK;yQ>iJ R1\9Y]R MNy}n0Sip`~;bKdXVv-턧IAm!>,(T0V[wxc thmXmq¬? )ƶ7QmMG(,azBpYU#nTF-ְ`:Cgqj6sYV*ǕӴ712LƵF,j "MlXC֑8 Tiay5pPtx6. `Xpzz?azb3&n}$dcy(,c8;l&@fZٳBx_t3Գ{Gk ґ1eהpoO&(4lfq3ƿB6 N 7$ 謹Ό3~a;:^tygІlRf?%{"^PKpJ19,DF;*!{}E1 mzC7"Z]xm-TnѮ|\r=tۍ@4m_>m(odYWBOAYAUPJ Ќ49P<@ CgԼ13(.nta*}o=lgqN|= ;XҖp~| 3[O"-bY:0᢫|dXf %ǯQq[- ( dL(9.r۷_O>ү i W$3F&jIv!Jc}^=ap$jT@]~ۤ nPqlᬺ='zo$z?u$Hc9st[`SGO|u@Ȁ|?;)=iP&%iOJ`Y#+NNˣovhu-a^tkiRptCiqLtRV?@1}N@gW4xxB+AkV2]|W-{I ;[EJz ϑҶWyˋOZA (Pp) ,Z&zbt0::SRQM]`nY! 0cb`ոYe%ч!Kֵ|rM)*6$ . M sY,̔`8؆fz&ի)_;*q2bv up@n-6w%V7B(M~?G#fJC䬽)@r|:OU?dL%#(kZ+mɧK Iud©އfϬ|} t! lS n o@#Ófr\l>NՁ6w%>agå2"m]:/iv7x+W LoUX}w bew ~;^17V#A]eAmwBԪK2Ga:G ,< "Tz3kL(N|urhqݷe࿬4m|)$\y B}hyGRvu67T&B6lI׵cǺ4^aH:#D 7|gnXv6·:ʁQ~I;s rz^)uuٵJŊvBA`|Onds0w@ͼɊA_n4ă4ei3vE C_Hr6 GDK=.,C+ x+7eºsf.٤䜘Tq_ʭjm_dW_q4Z؃.'P;hjNPπ(٬,~w7e|%ZuINd9CL5w Wǧy?@!suT ~5})Koq-bn!O8%wp%Zк%OFD}B$}Af/&C&ڠ6|1N64ko뾯5S",.D4^ssluj|#³-\ЄVt"[AnA 5#Ex O{3)k6zFZY ?qyYVכ?sT+ʠΩgr+#kr ~/%q+˳j[HigrUv:S;ɇak{F#T v"vc?؄*ԌT]Fŗ^%WZJbBQ  3.QKtw9DՕAU`赮 ms ]4ӳl$:ĹlHOKs 3[+7I:{Zc"&#YcV+~6}[SɊg{*'ȻGT~ gJj^߀Gl(uGnR1Z/,rռ`IA"]2ĦooQ+-b*RҀlvFJj򸆜0*ft+k]y%E (ш(_Bu*Z a-%Sսԍ5P=Ml0LJϣR6a>aYj)| #vqEbٌ>8>(Cfή(QHE7yn0{nӾ SJKRW@jtfaqVѾ>@ ]C*>6цr#P^M%bs),F+ZioűeBz@A5gc E>&8?fS27|,~ɒk7=n/ Y)+%6$J.~g蕷Q3O-!֔5R&!$9Wb*4b }o:,}ajLCe!|٪ bE. ?+`䝪iqɨ#)zr9p~~J5X'qd؎Fjg&?j,I/Tdj.X4Etd` Դz^?Ux;]HJ='am!Ix*Fn-fS!5x&}GN6b*k/^'(/J73AZxLA˯Jk,@'`5 $W<@#MT_#]!w2% }N_Bd0Y}H`*%oL4s`!ਔk _lI` O9T\YHV :D.z>w<<8;'cE jH-MbzL\Xf[+tX1X7TԵԱ lUͲ$m &?L,#6n^rsBц'!VE_هJ{|}d0;II6 .䃔eB 1w:n76ߒj]a!:;V@֚dqyr-OfAz )4Y.h!u0A7'H6X SEk2yLx<+, LNg[Z6tko^()1'\%6X8@t;foR+KïNZ#upәg H0 EW!IRfi{a=L4JXz iGcJ2 n]:Z N%ms*մ\df!BV)+\*Cste0ssA3fSAT&iZm1@ŒVj) w$cPK:QE%Uv(&KV&L xMPp'bc ꝍć.>FoynE`7+E ]%k %и,[' @ai%F EKvv>&&%^xv@N e}E?|w(oHfۣ"]L^$o:-sW'ۢG G>y; &~ 퐚fk0ƠS*(4@%.@Ap747ak%nbdq\u&A/7n}qHFZmS/Ѹ-hW%鰚mnX7(\>;>O-髞56s7Ctw1NIؐ|yb!GHf{L|\mv8 ^/~, YHdݗ[‚somCr\f`۲)\hn&bް=تE ӫSlTWB 1g:ex04T2Xr@Wc>]Zύ~" % bVkcz CU큗?պqxdFJ2͇Ko:>sk-JG F'_ySx|<[z83c@ ը%4T^e֫ .(laoЌihLPVN).\91RΛsl|l SoxA0IAQ,y杛 5%X*cOw;Ђnf[+( hg ~FV~CS!PC EY4-H"i9] zGzS|jZzR~YK(VEu֯p>b_*{h) 9G/P XBk?e7 3#qN)@O&T*rp[ Z 7m~?ɩqJW&"C* usʀ*jBZsܒD@JwiʹU+λǢq7O<[! u|,ZiΉ!䖘Qə6|+DF÷IeG]j()@ի:t# a?Qߓ) Mo#%x< 5`@.Pn B ~KbptE<# <1ea@Zk1k\2Rm#it(|b^= J!7*Vyxڶ@}N|-LJ۴m=Q!y :~zʜiԚ7jf%U۔eea]>K=hH<7 vb@~!Æ'Lkc`oћ/&>^z i kŜPPR3V47K.PZ[rvKjUϳ7wubl^@-gLq71!_ w~>"g~m%bLY(%0yr][cЭMFR7$GvXMASдSz:O[ ܪ*D1)Gus3E[LDgԆDhq~ɠ;5( fmc+e:mꩭLwdjA[qԨ☏/,pA;k1>0Nf[:b2|VpvKHP'9qSE?vth5~؉:+"P'Ah˷Rybϊ{K0ie6*V&!_q#4G5U0! Bs1-ve(SK-1sy{6Gb/ƣoK>ad@Tv)Mu駋Zp:RFn+ߑI}Ţdbo:]ڣ&?is:LraD-Ldc}ILALVGns_LW"ջˆ,Stz|<,SCt^ a7d4W=A ꣅ'P;Bp"8w ^G,\-Fwe[僒 h޷2#Gwɟ\sA#׈tj.*~_d8U;g_gEVo }bd午?IHMs֧mA\HlCW('BJvGERpJ<s[7ti U$2|Zg+_w#ڲ!V; cږ0vo3NVHVj T"`6+ N BYKEsjJce*~ahtv[Z̗M2e8|`jPZřyH!IhD9Ey#Ol7"Ā$C )f.ůs(ad+,ήt\YHsqѝsn=NLV]9*̀ }|b aE -QPȒ^la>X"@r_O㙓}ff" Ě ڄN #Eܾ`RUE%0BxYG:4"M#|U))m>䬷p] e 3rq!'0ˆD3dp+= \1mLmSFmtFuKGP 'oI i Z-U&[[ts@%w6r4;-vuW ߕVkxVKZ-}p%>,J`^TRg蹺+by:0П2VOTuU vHV 3Ϫres䓿ho"u@k0`>:vraH%mjO#,>yJzZ 'I´̲] 5dQDI) 2=@KvHӠّTeN6%DƁ%ЭMsBӾ,.8-}` Rl1@oL%XhVuT`(s&he%%m#= D!W-9^e'f?Uv#aI}KbHE3r3{Co9+$Tj' ⇋5UN}U]W4^j֔D'"24ש0zFޝId3+,I/l~vԺ"k.HBZݞTzy U@׹䍏ƴ+Bq,0#Rxph!0;B{G%3+ĖcsJvܭ h nNvdӌ&W$/usZC ,뜥^zkkZ"B/sJT?!22(BXΕ~PNl$7JZi+xvN6E'Y bcԋ܇Hg.O$[{P5Ob)zJ/sϽ e}up͑/Xz(+>D2]7sѫ!B&62a4}ިz$J(HOjT^3"a= ύ QGOU;ˁПܸw$~-^{ZvvŬ8Qu1fvA Nt^blӌg(s+*>|*oo&)ZԆdN^痧4J/T'?'<< ֢E_@khEaĘ)~(⋀6K%iH>}q=_aX\#x*'j̩ьaNwl dϛq]g`&jʸGf_`\ya4GlJ btzJVd?\~SP(?ȋ8JGӤ @;N.C 1hFKv*4OGt~W̅: lRT#B/7(`Md$(Fg1+z7=~ ǡNG9(Dp$ҵ -aI~ {63PyC؉R̰_;.Kς ,_B9Yfx5[TbPt "mR盿>VpoRXC˰-4VG.aYzѶu[]2ѩ &p--) +:̻*"}a 9qRƾ*<;)L6;O){pz`z]*:QYJLάʅ8yq]&$=b -Z1V%% Ϙd(Qc&A|I[S^E,{ ѳ[4_i EPI3ƫͭ+qh%X%5wBT, cgd+c2{><6è{C؛DGp;WkݙrmmlFfkw~U^4ף(\>뻒eʶ,_!Ƒ(1OIaئzv 7y.8G°z&MWR8/>VH[J"=ih xS1 lUGa\/#-eزM' 2h`C@`kbݦ`JmֺkSHIޥ+0ڃ?zxME2:7 F@ϽF&d\Ku()'j˒/25%=@ =5t}خ2B3NqG'`*2Va ]j\Bb@P4e{Ԁ  "Vm-w&bz wcrC˯kHfӔg\nU!<2@DudAb4a(8,³XA2n!5`fI<Z1B%I/ dz2A1p0#/br?<5@LxRTnSt'fwh}-b@eRe%1/_Zyp3ƣxyڀE 3HyjDmȢږ ]}P|@Ӫ%K৊(ͨ)Ao!(=q]ā'PAjK˞+P.5NeM ?q?A&R'+yj(i\z 8-YJ u+&RGSP'[DEVb顛M(B*cѵ!BB*$_- !T3 {QR^!AjX]rTqo+[|QBߠ<Vhy@V(Ireb4[p`At+0򞋼LS'VLkLmĨMJ~i\1۵hv}l=b ߍĺE7BrC!,gE7& 7ISiܶ$?Ly,# 3E2b>[R󊝜a ٦{_=C}YZ.J4T郝N6 S~?2x;(QkGJl4mkdKD,c1plܽ1'Z֋QJMz]GrUL&hԃFʱY`%>V dُqIP6\gyKd8)}}h׫WL>T\*\W/$\t$ҍv8?RrWH|ҏ&lZ4-)s2Lg@9#!8ZL~*”EKυr0d@V+/=")f[hZA<69o‰|3:6mgvM68 Nza=VXVio3<ǴIh nt0$^2EnV$2(4}FgDk!*=bҘe:(cig,ʫ^sI'Fa>ج}|j'[κ i>лX 2.ߑe*| PR=u8;?lq~&Txd)<"rQXu}\7 TFMFNRLAq[pLx,>C[2V%jz,|$PoxωxE"Bׂ ,s=.,7?X@`\-r8!87N$,H;2B"[>ҩl# sC{/ /wb٪.LG!ok| ;j-RzAH!:UN]f``YٰF ֌R`G UDe0Q_#@*PEjENQ碤;2`}_;xdV,gb7&+b"c\pʖd6b~`M;_}VG)QD{['BL70XjΚ7yO]vnz{#$>Cy^hy@6)it .u.Hݑ\8լ7Qܠ+U] K+<l9C{qnuaH0e%cZ/^oHI5Rb͉(8F6hW}omͥgY\=NFCF⿩g&@8=.JDH)-Ni8؆KGT;Vm+NjSYǛ_QÂWoS> 35Mjo?ƪrq`0qkZ qHo2vB tخf%)lԲ&3D^ּ+`x+!m8'WxW--%<׊iJxH}%jE$\n%tͨg-bĜ,DGWʒӳ^+Sd঱dɡDzȶưv7`j7%pJAsF1B-+@-+F&A~ʥ[ TB:KPŨ]ʦ@l.b?(6ȬK. +}+j 3ގ oϮ%PO]5SVрȩ17Qěr`[TI=ff<}6Yzޘ o +n oT̺+GH6ju'qFƕb†D#y)W%\]9un$c)RA( 5jFVJAatj!<{tBơyʂKFfGӗ/Mǖ5b\9j٠n3pzJMn< 1u ![,@ョgۃi-`A2+ l-똅ɒT}]98'r`Pjw+ngou"ٸ?9qvtO &C(}X2b5Gٛzr8' JvgB+NE;,Y($ JT 5c|\h{#| Ly%űIo8tL0S&ؾ)!J|ltCٯmRRרTq= L3KoX' AlyFm>·xW,]B092W(LCDMoӾ>4mb2SrX UX`4v41[;G|ZH ݱ!Zk'$ٞ܏`BS,2Ql1(#9-1KH\obm(As;Oa<|Ҕ4 Q=(X~N`S˵jKi? ]ckqt* Aek'eSVFLH&MCb0u - ؐAS:T#ݰԅ=FXm;x:4u7ƓgYwI@rHZTG46l7,q$F8ya#O9 pzkהZ9Mb:b0,S%rɽ:΁@~$։wTcRζw"օE #o( bjHB)MUU#A/(B];Ep"' #BfZA~S~D{7ǴM$U7K}:yR$:)6y˱ D}9נOV &(O;Onls*Kp+yŕ 61P跞`%4ӥ_ ^ g_ty(: Im 1MLkj"ҵ`93?|2Kw~eSI>o2.hnbOwUzȼ Y֧sp㏌T׭)zXrD-/F/ohAsŁ.D{s~ 3NIu=| j=|3_x37[Z[ՎUxK3a.RBaWR}u?y nlR|GcJ;$JO1x«O_] |M&_l I蟱3څx P Q07|abGF7VO =#-b\394}Rs)ǿ&5[r-ariBZom6!ueA(wQR)?J7roF‚aWB%g>eE_"i5AI7 NJVb#[| eM9`NN .!)ALE\l5klv !$N|NR lҞ2 +e0T6r]j,+p]?1V,?q,W&rNh>ﵳ|zDASOޢAJL3DY *.f3Rq:ZS@8ʜf]Zj2pc~Q&a<”z?sj;f7ϤoѿK 7R's-5ݭ(!׷;N1K5CҴX'Y!@HKoб(d}y,Ox`aUC?`23aZ0Ked;fwrͪӗ$SKN=p~,Y`4BCS~p,aBU:Za+6"h)8]oV6TQqdٖr1?`"2@s9|Aơ߃z-;Ǻ ڴP3hWfn:ti0ĮR$hN̏{ࢵ+ e,'!HgC}m}|=ݯ@RN;lɅ{YQjw?Ik|(v3PTg:/>֧a$urчha!דMmx&J[=U&Vp~4#^.pA6Q ķ!IvŅV^XU6:[//͔ݼ\v)! \MDD1++Sᘱ~30<8O; \bJ[CгB/bM84+]iݏx!/E\>аMˉ]CGdć0b=U*d\ktcng2hzB$6"i(o;ڹs=sH8$zzacvP3mWFPlb}E 4D=w l^%* Nv:^IhNfO^%Lp)^ZCmo#*սkh-^[v\w,X.+?KcA9-3yqC(nӟ#mQˁI*X1{${Ə!P܂FFփ劉XZAsi,)G`mܵN?)cK9ِ{X h;@KP_kX X+,IIϦKH8ujNu dEY#Z dJEs><>_b'Zi}|بNyD;~9#Ê{ Bѭ}kzwTnW,8[܁2@״AKag9`t)-e{*@!ưUॿQޜ[H$7=W;C$@6AOl~E1~nK$8 sz6$hDZ7^˖F|s^;^~tLlKvY] T髛2?x4v pYT%WPΗ|e~ +O7|ϲ^3qE-_nY"+Iaa"hj Iyl 5KeV\Lڦ=v2l{SQ01$J#<'OB! IIkCFإ в6>L c΍NBMlOd90? {/YCwZp#xLAc1XDaq%+|Dٲ k 9{G{R"nI u;",5.GFmE}ņi7 B}u xD ]b(͟E&4o=>)ػ0ƏЗʡGc2"f[x]=X/MʷKPQ82FTj<6i3}>gW2[Opv~Jӂi5D=4^h_`ݑ^P+!r7.NeaPwC퐐٦c n)1[P\M9s4VnxDcDz6I)˟6'oT|&jtzYx- f0[dxIJtFP}FNk 쌵>ڶO.>!%ĵ~H0ؚ0!N{[ AMqaf<3o tI f'NQOmVgZ>8pݯ@\ }R-R̼W/ u޵cc.7,OYKʱR]%wL^Y m8r6? e6]iL>W{ (;r Φ3z\"/Z3UJ|zb%:< FE_zD@ 45gJ⑗9TS(#0izĀ1K4_$?*}>mPfL@QGx^2|rjdR-(/fASV๵w$g10R^f^DWpFs#.kRpVk.{Ps+ )\ǺihC6%&WXF%1 !ׂT.>5y?O NxYi!JGĸRc0=@t +MzH (;e_.طPV߯?}r11O*ߟP8%g]&e =cF6HŮ;q{*׻BSF_v=ysmA'XYozLwrwu57_$? _5)zefw(",O[ ~5Uw!bs ժFç79i8|"*"hWu߁.[corEs%].A2/(3`o ғqƳNI];1݆љya!13gWs 0ث,ˇ 7G ]{7_?\)g v;׬%&> "b <6Z= i/&fI4T )-ndA1*7AWg`RF KA CSmQ[$4F˷Fp](4Kg͇ .xξSR}bK:{GFPʣ(A x`ސy9;C>Z/5{82]G+#|F (9Nr&#[Ҧ ]NkDb77ja3d9X NF爕'v/k$|5ȱۿYh/M&?x>dƶKHgc_ Z|`s!HK񣊘+}$qf>!8f[s"`2Aס y2_.. ~x)^!8gwU e]ˣ A5i3(Hw7#`d4$ ؚl"ڐ5FR!̝q'#x1c܊CҖ v1( I{gh۰WS k5̕g- 6k/R{LML%rQzE:xM+̲oOA{r$]35UT;ٛCvGE!ZB4Aؼ+.EcãVWX F>įK_CBÓ 6^}X]ZZ[S=b7AQG n<}m,IyEK rܻ̀TLv{~c?UAG!1VV;Yb@rqQ^ے ]9=& S+ذj˴aVǃYfna'#bHy.LC}biO꼢N̛k0wH h8y`wuGK,kf0,y6ܽ1gU*y%^˝|&Y]WaM=k_Da%ٹ}R 5M{2@k$r?I_REw0PSM2R<1  sTp"&=oKZ,z*e185/ڏ=jM{pc&D~~3%x?XVfDC9<> %; v_%<$uLÃ^a]>Þm/&[`*!+ʺLϤ wXGȇ mj*}`-Qp )cn'@tE @i.arOt(-VzC(/|pTyJ?4'61N JnRLNp}OY[!mz"IeMsdLG,Z_I+'_GzXkCFع>z( y˧P$Hde"vdLj^J5tӿ"xQ\3~5Lf.=l|^4g'L=Թ;P W(Ϩ8}ӿ qN=K!z /mWLX i~ꮞӄmzk2?SbMk $<\bmpS~|WK~8 @qe ?/+Ms:}14:u;Kxe_=RN{xB}ꕥ~51zQX*8.u;U\oDr5#!m2/qF`e+[US |46ؼ;|i+em IhM7p[̀9qVEP?icOz'VޖbVkv܂Á GEnfa o m[b]KEAҕ[H./Zf;I<[)&0őmO]G<./Ђ^v GI ;4FBt9W͹"1z 7B.%I.ms CE௺U^x?.RIKB͊ g$nZXt%ȣPyDhQx9kW (s{F7*:R0CuAf`` !ء0}4+-DDӑ}/Ad91 NvYZ5e .;P)"Et&< [=SʤfQq w6Ct%24dxzIOu4SNTF,pD!k!׵ELxau"gt~,'66X((nR Iý9?, \S󔄔M9Ό&nl EdKi6,9YL f@s- FÆixո4ydyM>nJՀw|]I;2B`4rY'vNy .겻8JeA\YjAW|Vˑv [im=kh+["{_auoA7,ͪ3;3fSFem[U]l=UkI|wyhLsWrILml쁉JFo8aqٮ4ڴ@UCJ=ٛOVdWVў93Vt*wLa8%b_ XO->9eFN虱W}w7(1Zߥ,!iM?yGk4/f*Ps4Oߎv@9Թ6[f]5|8jƒLqf%{fAIMph^{44Z~ۓfS^ZIAd\X|k+nf܌e%d$OCJzGCBt_2Nc1߸&heXDuLlt93ڇ 0q8 /oCN}-a#psJh!KРx&~v3WQ{yCI7Cso-Qnn}%Ҳ"+0E}G+щv5d˙,H_F@wNB˰aHAwb'l%ɚҖy޷qE7dHcVUކ0KA9ov=O,m02Gp3hMy>]RҢ4"6 "Qz2$wmEҽy6Q%hrO% bvn[qr 4&D~2gUֱ]goRw`2극&qM0-brT+GQbb:HUL?r'vrkq mtp:Μ6-fY+N45._sݼDZV:5( [1]] < :<$= %ɍ"/r.iӄxBZsf iq "*f|ݮe4Uը-z:EqnE"=mn {?`S|Xf$\ZR5b[輲-gBpD)ÑYKR{!Hgy ZlNRoAsʐ4롰Z\H!%RR!$\O͆#}C~wSg~quw끙/X/o.ױxyaS`OQi6%7ڲL樑1"7sRBzd9E4w /cUY{ƪH6" ByҼ:/kO_V=?a㇌0w~A)lR͕|C r]^9Rv`NVSuyG 0.Ba?z Tk~ Fݼ!BH6^6w!rL,õ˅ VVp[Ȏ,t?F9G2~PöMy $f[Dzyol91/vdvW}D-nď~@HǤ0W _,Ub'@J/X?=E>~Qvv }$\J2aChQ:@&45~ǥ \Bs9T><.&vCi6(nPk )fV+V#/7dӶbv؅# -_wR,gv\rfab ,@L|("W;6-L/z.(QUa3 '1PÇt:WC 9(㽵%8CUd::x>i,l3,:کC_Wl#ݻW$e;PIPG~ .zr|+ynBvJ]ѓ)jc)YI4v+m Db!=IѮȼ΂./G>Ir&T:4Q03(Hܗ g&#|t[TR)ljO".S6o* ZXw qOQUw&5USNt+CG*QqʲZ,[ H`U{ZYB' o#7lWf\XEznX(sq1KxzԶzt ލT?q&?OcQ:ᇾ֩q]uF<.D;QK $zv-Pv^{!k<@Zp ]JlorE oPߕ4P1m^(Uߘ 4nL%R э|N^|}ECy2 =:xhY/k560;QOϭي` YS@_^^l(n08w9ήBaQȡLhޠj0kW{.fʬֲ($O^ tVCRHH)[>8Ų PG=`ӵ.ҋÝ.*L;UvB. 1-Ǽ'B ܅4 TU'HO5XN[]WtkOg_< XХo1::wd$ %YHJ k&d\mp"3X \"mBW2ĝIFySd4 -Fr;]xquhB;|ug٘lQrb$|[ &9JqX#~LB 5 B P ^2+r5>hYH*y{?D΄١XxWI%?M YEGM H9:Q>F Q~&A™ ^3锖jBG;ڨ >O _Y#Edi&uL< \d\7hxdc=}$;@Щ:woxt4r2=qNF4AzgٜӢm]+`KʓUy6K[Z: ԯ3t\KGFDݹ}2:$f@*_s[ j*6%z1R#Y^a$l|\ ;-{|7< 9CJ+#iQ>ic͹P%k DCRY ULlS=g6?pq~քW;T-T}؇Uy<5o?\V'# {^rQn ]?HYx#lۣ 4@7e(7jdVF[l\ɠ?o@-'3{q Kuz. |_ߞ9@|՛UIv8D2-ʰ3YmO VS=C'G_c zM]\vke5G7C%@tt$+-}8'%>zdGm&A{Gg_=d=Qz\6y=G􋾪^I7o cxEI" 'RI{!+{ȡN97 m=7My˜Ś>{Iboll%Um&տ,)d:/OcDۻH*չ w7p$`.94A%n;(h }_:ٱ1ю,W֨{Yȓ#'nE@HB IOA?$({/wvImybCu'߉v&変HJj\촽4zKǢvbYbo7S4 6" % VP6JhW֡}Gj)*k6~eΠYvcڔ2Zmk ;~^@nRHΎ/34KøqS6i|Zd|i9|ȕ{Q,=}ҪI#֨m̮N29ߤ5o N_:9uD%#ZPmWNFgs! {:Zhb7{gV \|2Ī#s'ERt# ;^hW1HZu@cnعt vF9ij^Jv#v:ZdYNU\yV>X?Wkw51!N꺫}ڂ7/cp =:> ;~)_%@M2aĢ$%̋}@]4 QZ{dsF w8NRx\LH@SZ݋ Y/= xq4Y,m{/kn. F6υE0 i6Q7pCt\Ǩbd]<]~/#g)劊M̜)_foD*5A'[Ͳx"b?|Y*Y ?0EN تǴ4بaaؙ ! _?EutBHr*gG`uWzÑҢC9\~XD Q+D^yaޯ'9>>N@g+p+J|4}Aϗ\mbo-U[*i/ :F!ww(+}'?T]0郞د!U$n 0bՓ\ϛ3[U+7;\U[X /S[D#0y4dď\{2e``~"G@*Ay4H :4 G.QKIḼHlERs\m1((dX G*֌JWL|`L'BnNOw0u^_Qv6U"aײg<AJu[$g(a_r`!3ʞ P_JN#߳[j^@ TȸޮW²0n}ƇLX]T;Nv0"ȯ05^z!p OXκ|&ʪhXt pv`B EqՏSwQH.p^=˰ [/֮{6{8ZGET \haV0wFW%-eS4M=.=xA*q_\xvSMui V_jHwn2r=܌Q _]^RܫmgeC'_NNb9kwtpje,m <k|G}D$ޔh( YLϡ.wc]KAݒG]֑ Y6=odȁSvU>)6Pǀ`4ލٶOҸ@6igy6&xɂzHG0?S|VYƬ26Ҷ~]:`$`[jaK:+2٧gLs%:y}Id焵c{N#JKcXM]yڽ$Obx pv+tgH\mGӉl8'@Bs[_q6Acr{!M݊H"BGzㅱﴬfv(  k{w.x(vKWkWcR!xJzY|GoYzVBlP(ryI5FHfP*M{.]Q2z8Yn- or8-T!4JQ'Yn ixN ^Қ+w`X_ $"*!AB趢b#V} Ѹ#[$XsqeWL 1/LR,>QX<^nrF_Uncea0< ( ߏiٴF Lefy _D(?(j -L\20$u>QKeRi u̷d 誷|9}{sa}ގF- %nuKCE 8&]zĜT凉&!w5O:(.vZ҄@ ϰ|k 5$je^T `1rOv5=$̊Û<p^UOR{0'SX?*4Uql|ˆt@FپEvDDSa"a seƚYlmij-ꉇm= l\mfUQdLp7[֮g+[{ BDZ^0\Ckxg*lBOYS6l=LOӁ>Ň-*PƾX8& uƝMY,eTtY; S)jX\iwFwotiW iKad'ydEiVBO i.l#KSYyU._&aww",S֩{\}24,$[{)믻2Rok7}; b7OEE[42Ѵ$f^EB3VWE#^65p[g&(Ak~Bk#63 ޡ3bzƷfm6[/t!FEM $fwvJBP/$!] WxJmmxi"<~Ի+|tH o ŝ(L`[Q??Moas2̛Y@*#3#Ma` \aP65X/S%"3#S(M%(Bo`8ahWEdP fYӣ6mB2ceUS!B.3k2V~xc^iTIb3S5͉eOD])Aiud}ε 3Ǔv&iZYDZ RPLh#.v5-!RFRAiđ]Z&s-z@;4)@02a9J=EYY/wFxPiZ^#,9RhST%HX¹+OL$,!7](/'W$ElZ/ aǀv2W-> +e"ɩ%{o[}dwL BRqHQV$84.aw^MaLTr'\05.6~mP&ֆ7h-'3ğ R"^Xg, N3MlM9 ɞV>PB}i* .kc);Oёksow_7V a h/1Ayr_F*8Ea<3l vm42Wa>YoލcAIg$n}W !OIJnq.! IYv#+eqi64_7XAha#w0N蛽T-lz?M]7a T_xܽ-K!SB;̭=p ~ټD\+g9ծ$GNt#cvm]Xotg)cEG!(+7&v`k ̯9Aovnkqyۏy&N@c/-..脳%7cm64r}ܾV޴=>ܲ,VbtƂ'F&+V0I%q{h FvW˲;;<]mJK @%]RWWwW~m 0gO|Nk ,$auPY,;\O"2\{}Sh]?q&lƣHl^&`oxQݡU͘1H8|3]D~%(6{I:ku '盀܍| fBthS a ,~?fKuL]EF6Q6;.ZAI =' JT$TS&B"tuRI+BȗFO;u3/z>VcİZ"^elvIuynwb6SQJol=,/Se:@$8e'*dR\fmI¦V_O5Rkޓ'*  Nfikc^Eb8u=ΖdXb"m{e]3lG, Ͷ)C9}GpӲ'!&:0gX)| M+0^IAuQ*afRBVA~0n1n"-|^;NPl8H2?.P3Q,:CkТveta=WxH0o`c <9 n}3fivV9XNUx:̸Y\ FelF׺ij&` ֐{D㛺6 tyon2*0}pg|QTM?j-Flj]Q_PmkU\a:%^XC%FMfFj8MuCE,>Ʀ ƋZa hvfjP1:(}}}- .nqoȡpEldq5l5 ]PE};p;yzgzFW~r `|Od HlaW83<7&0\]c-^_(.̘ , w6 ˄UĂMTǽt<Ռl6VI 6ȜT8nnf*/6̿KB-QYMiPjq jc b͞k+`j+?.ylD\h^b9E p!fCQͥ(GS|7:J3|Qɒh ,a.tlvqa:s^Q@r[=I^Ge(QaK`)7;p ۶uull:y6M%+T>>鄂Qzq@+59qgCJ|S;T"ō!ˮ=X mcA7-'zbMy p([~U 2W^\#n6kRGltbJ7./(9F XypwY@Gg:Xa/G,٣H32{:vn38C+Pҗ:g>.I @_n}8T%rqh#Z KJ[̖qw2_&2UH5[dQR*.Gޣޔk6U3e =VZ9rhh.bM4|lZqSqTrNۿ 9a]EÌ}WkL;|'ϫ&}kt;RwHDuQïRs}Q0RO0G@AZRK5[.j9ݎ@̮ugkֽh-[)ZWD} 8)lW)Cy/ГEx~)kND,,C;vJѨ@#C7]pŰ !)JVZ}ypOuiU=tmExq- J?+G;0Ʒ^"QÝXFUv(%ԁ.+ PTs@ ̥*fi.|~s4g $^FyN\Qjwk냂1Ts?T$n&Ns:LuIsCã󦜻L;ю V}GEUc/G.]uS nbáWa7aֲ.A gYDВXx\I+c9tdbsQ<Ɔ_Xc34b2+GM~{}jpYi餓ͭTK2F>b1jre4 gD8,qd4Xlr_8\r#![xrFA,A+4BE ~^-z nvPY'?l">WS,t=;S JsJۃ4l䆯y96kOui-*Y"s68E1;V_Ng/VRvf''nPOUr"g0Nq#'T8ɡwm70hRx 6U= \E8RY꽪-п-ۜ0D ӠFe|H+ KBp Z7x bAoڡAv/ϝ'X'ZJX~ޫ$r'}_OV DV|9 󽆹 {A$E KA~ E8oTu]KruS g<=D8W<~NͶHw Ǯ:i"i?ڽà` 5;pJ=e:gtBsBVK7g45aXIRG]}vxg( % 0k枤 dN a(M&^-@75!ٴ[`&юַPw֔s[i>ZZK*q@cc/ *({JwTvt3D;~nCݾ9b>TEv7EoՄ'){rӛ! ^OEMZYhE6->vq~YTZa!};{FAwǑ/RkZ~ՖN/TkN,Xݙ3s2LA&OꎧAWi_1,>!O/G$ O}o/iRaokVNED02Tȭdi>"{y;XjMWdUDJ)^JrKǾCj2/}oFYV$`Ԉ8M ,Hxau/o-R{F?~4'Mh R[kfD#h10BN &`<{d~D.Nfag4ܙ[ݭKI `1*θX֫n)~q@)G0(϶[v)VπЃՎQ$P -X Q iwQm,Z`iL@8=Fym4yk7L.!D?vs+9CZ3EIB}״,6꾙ECP") 4 N9G!xQ̽8F[N,ťKbFE迁P@㏷ Ty f4T_Zz\ـ0{"ӚҳN֛5#+Է8~YR o \7^%0HG)(a#F3[_ .aeL'(Dbu ഡrOOe $8nm(]F{Lrtfa0k@ݤpK WG6 @Cw*d/m}QcvEcС-ׁ|Q;{ρ%˽TJ{MH|Y"j#{ J`r"11ևsA̕^*.,ED lZC!nփ 92pAlϟ& !kZ VH#MX%@슓hK 턓pAlxG$p9R:]1[4_iՒ gƫ/g߅Æ՗# s[ RY gVd1BcxHmK絖lj~wiKw]Kb=;蒍x`/[_ӇWZO@ - va#'\⟨ s"@0GXGXۂ>hKG5BΨІXNrk"JkgY #=i/{/W5оr,U(3x  9A705v}% h*ȔDAƀFݘtu*uAfrBĆS5(37'c˺h]ޜmQ&w3j?qyW 'ʨI ?pzJzM%P*U6{ g=jC짍. @FA~Ə?c>G聁~V6<<$8b#aY&Jtը2ߩG;B;© ANю;Zwj#F Ú`oylu gs)«/~)%PI#CQ}U/&VkS z!(aGj,_T#*R)5ͣ9SA/z_u- /pdna>-_:Qb`kH"9eؾc]bM\bEwͱzJj'ݧwеuJp3ux il2L LJUT?b ?!aLr؂#`xr]Q˙}5lMSSR: Uj8Z/@@\]sȍ[DGԷ,^,ʄ8 x,'h*l`L*+~>]vS_eރj{Z}.rأ$I)}(ܕVjgj )ߢpL~;ryJB7F&G046 O"`Hjh!N1``` `]Sxu66گc㎕w RG{1].N#_Y]r ?;z'.ܹ;`1_t]z2QT/k8Bvh!+6ҕր8%s12J79ӏbdz55Z |;Q JԞcW9mvY0!*/W xmұ"bS!_rNxw=?0W$ՙW R[Qoͫ6f~e<_Bi]RJw f?r6uLet`gNhBA,BY+:^C4R]U^p(q+W$yKuN =YcޢARt*C!uA XRe6=DbבsfcxPE㘦(h-`$Fjj;QN`[b|73;sӊ$;t󏧌a-nܜ/!U aUq&:/hEI^9\(ցºEճ] 2x4lGk`a4SWuVˏDBG+ޑK,&mIIjP.n g Z۹J\؏azHF`]bĦl:1˒.OQ[$:m0$sS;Oǽ˱$~rES"YRY#XB.M? k̗Nַ ͷ&y!O/UdvUػD_аRvb ka BXy$'%9F3[8.ߚ']6I3e߾MVk-`ޱE_KI ʣ` MުRƜICI26Z`_{>7K= ʝ|<4{pm.i}?A)7#c} NiM*wj(?2ѻT"RWkɦVxa&">L]׊oyF {J^Uט{N=wH g@Ŋ[S2:uHO'~rU W:=/:rǁuQ{R稪'гAXm[׳DR]Jg|R{}.Wƺ&Zu/!Ѐ3nfz2tAQ[,)OVS6&g 8g65n;2[xXU Ŷ错GgVE1)J09~RwFW0LoiA"JԢƆ7:+yޙ(gݨhVuVN;(ZTOHOkTYWjo-#e 5结%k=~uGP7ޔ4M4?w>ѡaN pDWaH? -=7/qQ{"X+*g/<_YVSK4ӿ<)w˦jcۯҰ=С$rkf.eCdhZd,3PѨW+;s{/[Fpi&?O?شӐ*Kif~f^cϪԍׄxuxż^aש&uU},Xqk +č-m.r}@]Z3_އqӂ LmHVPEXkm%rMzp)0[B[  Gn*_07'1ɕܼKTC~~N}ŽxE;c^͗3A`CP7 .G @\+EwAIv5 2 4 f'N !y|!^eOǛ -3%dCZm}VqFhAMahEZnnH Vm]|E, yw.LIF(t^u.3A \c.x+^%FjAjIi6ұY@% Ac`bV/kSJ?f };=l3 Sh~ T*cv_k BsqGK4jzK3z+қT&Lja15^ 4YBIBYD$)EuP$iw))A]+9B"PL&qI]߃j!bGS/2P恟աRmZsd&ĒЮt |H{tC1Y?C/tj_;l>y>1j#VWwKLB@Es{"]k_*E'IAƛyL@S?Y#t857"3H~aZ|xt 'CJ NX.UWv0vdOʹ `Jfo_^0!hQ'b[]Y6 21BurmX@MJ 2xH1i/Ram,npYt UFAMAe$Xݻ,үUVÌ+&v~vj {NyZ`IwI:xJ9MSr}8LZ[Zv܈@߀P mR%ըÄH~8Ͱ@  &J^3ȏ eߟO}U&]riG\/b] gSUSqB bȂ|'aC\C8ԮtP=E85WN+l46BLGO*Xh]=;2Q- +l}sA=\:FX8;$8G)>y=Ƿ=RT`e~/4YSˏiXF5@x>'i~̙~YP򺊭idϕo X{FpMǧ4yK'wF L!QRte̳/oc d!}bvt `~Sv"״&`٬E]i[t|-ZC;G׉?Î;q~1jO|yJ1U`3VɅrt'q1a Jk*S9_$óμˍ\.LǼ.3^bX2q%pgm00gCRj#Kޅ|w:@N6LGyلHeunWZVu̷2;NgQ jKQHwYK܄$W+mvm,`'G" DrՉ%͘ǹ#**a;mv2VM/ qHa/}ZǔXX0z\RR KY/!];lV9:TZ{ p pe8_eu7AAk9rhU?brÍOAijB}lBckHAX30W*UP)ش6Y N6PRfR-Z)KNs펝?)cH3b (q)^wC[voQg~݅g +# ⫯x>4ln},LOI0wbDvXurPHk͓.qҐQ4}A\Vw1 ߵ r 6wc}\y ˝v5\;di,*#Zkz64vSf'$ SMc30|C e)BEY[X(0ySlS>6IR@s|YqMy4TD`6yX6L$ 6kS s4t<~yyNAy~rHT\z_tDٽBxUKHr`W#8Cnn&78Pߗj%v#C,(b*L)8HT:SO $|v24QdHt )NٷEӠ^ tZYVJyq␊"Uɚvۛ1k?Xʻ]Vg3imefJ7$q+r|rJk^S(mOUf(gR㦥tmא3MKs}xuzlwƓemg_bT)~Ve١,[0%-z78zCW{NI,F#=DZQ5 }ҕ^@ NQP+ a3{>J[H4ǤjdkO1p 57tU؜MASpWo o 'PW&dû8庿Zw‎cϕt8&'!֜aHBm3QzC&`!. #` ޘzJs7-|em?C?u{ }&`.URy.sI?>ц|6>BXjD, {\|고hؔ.y/p5XϸrZR5vbKK!%u7Gzx oꀕ£XaCb;#_O:4NKR4ж⌁e]d 9H&ʆǯi̓ܞ̻vɂPN{L^,ijd^ȟ )W&0'y@dr72$"ߏelHl0AM)M֯"D!llfG^3V_/bct+li}m,x ww)`u y|D2`~ waMܰA*~ž~ To &_/Z֙߉nNT$ AD׽hۙf \q܃&Ve*o8m9߱K'nS*ǹ`aB_ ZpC* PD)ɣ΁[HO|C~j$wȊ{(<*fHgC1@)T4E npaE~\(,VS r-,2:%5t:u%f% fᾮ@ L|7Y |!bv37>Ɉїf &r`Ŕ劣bQŝ 0CO% B&^u]B9hi+nB[yc'rjBI@KU?taM0:{E7ktB>QkfG<Kq;w>MhQ x|snRPǫh2<`iZ8,.8f֥Hƈ$;cM\ߔ##O:#3Auh8}v^Vut@IW`GӚу͹=i$xRP\V]x_ ,岓w9İT%KIkx^L7ߪFύIѰ[HT([x䖳.R~Dѯۘzqmf0gzT JwŐyK*>`v& *Vq}^JtY8mB7w P"VjoޛCoÖy{8(=`SJ]p{+z&F{[P^j[$¶Uq ɾeFĠ<}C`Vzb=rb~2~ySy(l;$_|j#uZ<Q忚d$X4<\G~)~mxjj[GxM]e}(ٸ7V.}YʨX(;3& ~kԹi3`(u;O VͣV3׬G?2{&[r͵FeNTDt I?,LBj!3sY_\ @h؊K:WRYk9l4>"oU/̟T==Ҋ BkFH 2~kǡT+G(Վ۶yofBRNM2Xa|z `#X{J=>ĴI*) 7I)O ge[ؔh+xln\1?#։Ua0ڐ)6E `»9}r=/3  ' VN'>xe-KoSGU+g(40&QQn!jXsNJ4 YUɢ/ǦM l& ʮmtԩ"D.Re!`2_R3ܡ6\$ӪKga*G B0+;{[lIi,-6nD7p/0ᠥsZ87RP6\32J𤯄cLfz=~9q~>/J#`[w|J2lx`kX#ڂw{BweHXkS@1>8iYKc *PV$OZVZשf}snl'Q eVFxNh–,dO6Q#BzJvwYHBL-'"kCy1*%棒}1!}KғYu0JM:eQ-t$My2;9-7]pAi}&өݫn }zJ>ԘR3.RoTS+:"˾>d1G_srQAҍG~iT0Ӑ1+~;(U s =--j3D Ǒa!ˠi:CAO:`0U55 i]pn"E\`ݪr3Ѡ7,hT?JN l@̐>m H.RL3gPM_+16_g] |KtSQGDs^hR\uWBcy*c^"O3jJBZn&meKɇE(e49, $JP3f)wrZWQN6ո 9sY4F_wm(K&2]$8|1J?PM-Y"!3 'T)ɪ_:N9`gp@$,eU#O7!ʉKgnT:<7Ӭ]W! AhV@dF PYHE: b3)V3T$,+܍1rf}Qk΀Qb*\L!*;һ JG@LLٱ9i`"0<>Rt='Y~͞i[5 !]@N3)MA5Wj+=iTx6E]TP ЙyTmQDQNW[xsDA2tNIAi)LOE%B,$ɿ/0fq ߪqOe^㸐(3~40RId$LMT!9yϘXq-"uko1\)D~JyL,t֟ښ{DЕxVj5qmB弐j+ad71p?ɼpKFْ*;Bن6v]1 Z"{Kn t]U٫XIFTg8~$7Ĭ(hԉ׷P]J%GyaF>_Q6<PǬkauwƒg7@{7gIg>yHƱZ2s"nAq!O x[eB wt83}8G$Ad 0ؤi HMd΄=S5qwsI2_OUZ'Cz hX%zSAp㖶} gH3ӨOeq_bj9̴=3D#>:`h=FOri'6S@4I\3bls; ѓ&mUT "hW̭vٵGe~h2NmW al"ݱES:=e.S z=/4/z<ң lyl6QЎ~ʪ j,3C~OUF*%09셖-@Hs,6c\ae hEFL2d1n3ơc=zc#M] r=>>6/Y5Ib_zU=/a2Js 7m6~M%gf @>mg^9.5=ʗ؊JWaGv|347) 5[&%#pC0M`*8έcH͒knĎ9h߭NnjGal;;156aa&٪d5,*mz2P J`lTg'oR"D-Ճ߬kW&| g6^WMh$Ì'amF)W N[sPlj^_ ~º!JRa.\r֊ XitkYsbu9'e迩s7SCޣ0¶/@RNUyv;H@j#SOWYU(c~|opo7B :ܯ7inEJ9jTxcfUK:4=BvC3E1;@[ء`_s>x/ceѸ_%IvtVL[@U+fV&wpe kr?: *!ߡ[a< TBb aivޥwA91P ~5sMI Uֳ.Us%JVէnQJtvݕ ~~h1JJēf`uE vhy >MF(/LnEwE$-e,_ŲήvΨ ޶AUS2Hż)0K=yg=QA3&64"99wmn1]EEeĉX]Z^&! 'ܽ4v83Ҳ^.z^)3l]b8f0QEkq*.8Oa8YpyՅ&OG$pb4KP ~G&ul0rj (eNh)]3S*J{t 9=ǯcsoK3O7"ݶOCu >\gH*%cYǹ)A3'H柟Õ 6\f s!ٲ6^z(9d6Yʯ9tGo{VOx.SC*hޒwOVo,ݵҚw-$pXu5tt {K+P G(yg=V,&^Hӆ4 4jg:GA!zdq^!E}CS&%eFًZ i\Y~Q KA];^En=b%MS-Tj>TWeT>u03lGTOAX,6kϙTCHM>V&ZS2&Ԙ^+WōsC Esԯ{w7T wfP -*p9=_'Z*g;jD^#UkjUmn`wۊuMio7b&{kͅ9>2kt>8SйF Ӱ\+(ys%D?躽$_2wM#Q[`bȩub]jbQ- 96tkb접=W5qx_4xMc ta?Cڌ.u+:TCG@@(!wY9P@:6*ٗ!T m-|"G$E=Uuz + G9Y:әai-@>3VVڪհ0pjo/OKDh4+I@¬YoR?b̞EYx[ 5#WA;EvGO؎/߷K_UTP:7VO8FʃE9>ao;@2Az%iB‹rfwu$d^uFWۃ:9nGMoŬlv/ůL? Qu^yįRv\疝Tx6܍uctx]n`QlX 1>nd!w'o\@c*Yq4lCĄ^rrNʹJw}R >VE9VL;=Aq͒s&tgp*#+0~It׏!Aq'%oַNXv5bxa e v m0A*=Ո'&p-cAL% h kEm~UZ.!YɬT"xG`zo<8$/H,2@):ixcHAb2H|E#,&B9V%HcǕÈ$_ P|zJO Y/06*w%Լ<%x𳏫ß7-(Hbj5b֍5w=/24Pg%vsNk\XCzxC&rYun.S"UVib'ZAT}ש].Bx4.v~_4tHV"xF(3=|uV*~|j("K~=@AE.UpM{Hx+bj$'0x91YEG^ô_(lMId#t]Y_X//upPnpIZ?̥aF|! `h*ZkIk{1mזWC!JV)U'z$8SbF9Ż-4 = fI{ _ . utr~+4oEFk%Qzf|1Ǻ"$d `a'.b7#a乤nqϗxtӸXH. E&R9XyWa-J'LDeW#1c%ry⌊}V'Q*D]2jc܍w<ùò7R$EB|^Lv^Pb$wߍ!גB0U6Vm8{I+ˀdo1xKMsfgJ@`Yygndh3 {r)?iJ9;8ȩxl~+&wϮܽ"YOt@;Bu#8,7mnɞҸ88'Af#q^79.͕+ n!i[ UX"pױ`gF#RaNc0sYa B1ucW{dgۍ/C-y.i奦SemC*"QOga)4#aV#oǫ;[c0ҴKcCܷY#RДFߊ?!9dM*@Z^$9؝Jy #b10f#+Ǎ -S'ߥo*}fskzhd 1~k,:n%Յ9|\xf33?l]ޡv~ȵ<k/fٗ)Fr*\ӥ4:^bJU8c~^jѕN 17y0AL=NqSi7S OM.H( ڱ!_ɎנMoFQl.e*W'5>vhMOzKQaī-k<OD]A0y:u#31rBa*{r,2AP/*vH|fQa uPI #+ÃF17aB5㠶RZ74Ì/+L)  UXfB6@H:,5]󅥪h y.%Xg-ip\4>{LK*B_߽''yx1b}x'ݵ:ПӵUʠ7"-mpblئ(ʦV|-vWA3hPܠ$i$HA?@"F9-.n+3 ghGf__!1)@VVNq\傹dǃQ3|"Ľd`SC`0R?L$O^YC!wYnِI}ⲫ"9DPH4 Q_9*pOqhv߲n;w2ɼ=Hs20[SJ1§K_g>2 <'Q6n\sCA4Y"ۦw?nJrPLY/j$ uaYqkWd_ O%#O{wԁfyT(xDk-6o<6N1m3~O\6 <@K\j~YLW/sJ$5='߳Q&*;Yb|'A`dQh+G`[k%נּPx[R,BC9CA?て7`~M[65meTl+nӠHP_[21!eO2g8ӁG4. AemB18C=f?waFA@b 6|?.[2kF3H7 N`Xg+w:֧/ṑ] s_Α2`X[yv).h9(u:wݔjs {S5''a0&;.*g(AʝRyE[C%5PoVE)fBHk*4)oI蛖HC 1uߋem%!|0UZW"cC E72Srmܴeȕ4H,i,1^}G,z7Q.$e>*dKԹ*~3 ^bAj]";VPj@6sk{Ս R_z74 z SlxKSm7"!oVa׭ )\DTP܇U]QxRb6!\Q-E'y&A7~&#;[tl~d?"p9 H0bBsPO dك<v`Q~~um(F`;A4ݼMݰVυ4o9fQ1@ff~-{Y:0"o3?-\U?~ 9Eg&JtUBs}D!#+%!d+t~g{ ~TLu%HeRXVeWဍ2b=k]z3^uŕ.v`zEdADЭ{ 0N+Ƃu|\!He$m zBI]wb¦ a^ܛ Q0_ңx4Ƨ]z/K`"uiZJ_+:Q!IEnS &GF!*<_&i*p՝fAH\ң~pSD^%B]eaYcWUNc/‹5Ɓ-$Wf\ ?1K0[ʯ9~ d&`CM(țbiKWP=)b*r_½`vSj3HnXa l'S0OUa<‰ňRKF́7`sO߬ͺ">rq?=:atq+}{03I}iڪ!G_s˘U$giH߇n>)X/9Lx8>0u~})zEAEͫ'"`l+!y$!L…{/!#m֨XF0ƍ. V*GCW$ݟm<]یT~7kxvjn[-f B劒x*s%8pT3"EKM*w%YU Zv}@:pIkPccG*re.)B%Wz\·t$nfvlqŏ^wH~TNR 9hv&wypA, K_Nɗ}*Ri{N s4QZǍ,~_@.-378 y4&و9+/ \6ɛYf~;=5&R2b'w^߀}z[ tٔo֩E(ˆ:g&KxBjX\ Rj.TnKk!] '$ \ bSA[RR( Ⱦ|پ=̎5_=>Y&9!9b-p;gԭW٨"*{O~ @.h>3Z^& ?E)b"=&G= Ux eZ>2FU gzh7Ekq3>?#%oKFSڥvR W)澰3 # ϗ뮽Ъ(6}0<EcvK$߿aYmk>T PUh}%7L ?WN)R$+=ׯk0_9Nw4)/w(vTol5Qw+BAtf +,EtІ Bg o/ir#"zQ$ۛH}xS*<| .gv]ch?^Tdl",K(HCbP/Vܠ󮻁A_|dO1& +M@)7(LYgb}pUP:1󶀯Ҡo kXZ,;d2j7U>[pL-̞DMPƪuY0¹'lO֘ u{ňa~-)h1#hzϝg۲9},#wg֪J%>naMF+^.d9g-TtYQfo._{¥\#f}u *』Z_ܣ%L2 3*+b¦޹z[7ށD!AQVHnhlcnxyIbьv7)$;a@QD~,>Π_:﷬$Y‡w*p-w j +]6'ҙbdO**\m%g&7l?g.5$U 3v<tS t^'͚?R?2bk4d[E'tr'.Þ=؉NjRj$Bd,k%B']̒4 Yҙ 0rE0dEsd [Cy6؛!žxEɑb,lB 5?Y - I1h?#=N2ѐV@ P{ L@t'Y|G񠶌_SC87<A,6B O̅ۑg]0RJ"G|h`Mn9/FU-Te;q=ݨR+/f0yJh~P *k9a.>Ơḟ/gKcaMv(ke+¸BbG{n2:򝘎ݩk211evu$?p ׭|WNu`7 fL=Uhx@#FS^+( Ia.QPьI= BXkl׿ץ KgoI#0pM̎|D!+*l0 N><Pi]>D((*Th$"ݷ3Q axϖ͌ﯧu,Í>M7&5)8ݙ߰O/Rn|ϕ+fCTK2aEuaX>6&?++*LShřALiAyG6٧=ND?o4n9_$ bʹHFTѨU&cqPc.H71Ggo#x`7 `OR$2rns]!!6#VaDbe eיClI+Y|6; Mšc6xWDBT~1HɄ?T{B[٠n<D |ˌ:Ê=D;%c.A"r@q+f GbJF.&1Lng"$=5",O1Gm'[aKe R4Y2?P Z]*֘ \' V&<},@]TYchW%q#Ro( }@&6{E V(K ~y NrPA.vbݰݲ3-Mn% uPħ>VA`F>?ýr"'*Rz[?T 1J4~ߒL Wkf9Z[e@n5G YrV@X59˾|UёVj `v%-rnꄸ[V5ұc0yLD';fn _7 ̾y_uԆ[{ÐQ.wiY!i$ O hoAfj ND^3 I"޻UӰ;}Y%yw YB ק`C!QxƪF|#p2 7Ny^NJ.{w4ݣoɩW4fJ.#4pS8bR!kJE#c)&l^jDKV1C\0 0 YZEpi/data/gmortDK.rda0000644000175100001440000003406412531361106013762 0ustar hornikusers7zXZi"6!X&7])TW"nRʟXaqjnj-&j=%aq=Xe#dʜW woxu2 Uؠc'6,:Ck83d0f.g[IW0Gb\M uJs{c锼p-K31s݂YP`f(d9~>4?&Y70bn2J B}+ EQߨݖi#8o̅%7yQ[qLXXMa\vsO#y&V3+w'~'#wkdC71B,W(e0 dWIʿA)ggLKϸ 6l{@V OϜy=C"dwxs})H4 ,0"o|w'ײgA%Z-a{jfcu/rM A>enjH7sAu/zp .eyc÷|m6Qe೓ZQցmڞ"us'KsQ 4_'<^$ʗlj]㍽r<#0n wŠh>d>Ld@E_6x뽂H2'h5$@ u.Eu;?ee 6C >rtJT#ui1-^Ԟ裯2J![sžܺ[c%׬׺ETlnfٵzASl!Ͷa,T}d@;hqT]7qk^o 6d= M/5&bѭP+.Lg6})< zQ$vď]> ` z# 'oaɥKAɤ.˔:mQ0}T.V}пr ҋuZ~XZ!h*S\Y;f=}`N/Ւp ]JXvy@z/í:$ָ݀B$g | ?j?ÜfIsk1׊Z6'FF=A$>ƕ" T1 *3<+\]5չ #[+'W0bsBdp p4)u"\҉9y?Ȱ+ȠU=yW ^,IZ< Q\rQbG7[2~n1ַxaf{vUH_A5=BQ1D#c~EOzQE^y{}0T0z|*L! wLAٵץ廷fɱ2m~XHM$L3FSmf>Ձw@BI6!A$4k7ԢBf< t\g? feLG(u#4"x*vx5c0䊢d!MĮUJ]OPVڲQ"aΤ\[Zec:iT}6B زq|ZkqTO7>fK\ֵ{bPLV&U%z@41 IH_"% 𙫺 O"rC,^D&ۏR+DLJp)A_Dmm>\taJ{:30~$$(dn_b޸9 2|;ȟSVFlg%y|{%(^JtT:wGmTmx(;`~^ PF~f~H|3qiN*OGP kjY[Z'+ dG!M].>6 qP !rc}s̆[z>;Act YؚM`>"}j =قJ"8DbjQr!]2+apqଷw*K#/U"u]dB% Yj,VbִJZoZ -ȟK.\uwHvGu2%Y j L>Twբ:a]5M­ZpiP( @qQ8 FOGX/ަgP])z3x_:kF+<멘喇o]+|f׈%s+_A>~yEFGmQZ <PzÂ*eGAi Ͷy'I5 Wt$))ކo-z4Z1=biV*v&1ޓGB }O,%RC0go4-Dd.K:IM fke&4V>CO1w b7c5eD*ٗNfjg> ]pR껾1 bR{9a@0OA F0U_{IE5 62)6Za|>^Hiqxt4,bKOtA/" Zl腋3٭ٷV9\B;T_L,c*ۙ_sutf:q_G=`k #e %BB٦+ʍ`z|EM9fMT:*y=:~70+&F["T(P#1[+wy6º{VqHK%bq }#`F9<%I"!~\ y{+$^뭯opUDK,jSD @HoKq̆Oe56$}'DA݋~r2>fF'sv ų;ke/3Ȭ6 $`Nƹ;֪5É$2[~ пV.^?Ą.LHD U̘cmqi@ g6:.S`kG ujgւ^7rʝC`17|GnQbFcZ'`GHU%_u(S@#C0/HPN 6y@|uX5n Йαl\G Qp;_x ~@ eaP$N`8핇%WVbq8޲;n] # JUYVsYDu)I;:J * J@K CMK: '9ߚ9\Rb8%u|ˑqYbuE?Ӂ֦J \$3TA{?8enk P6Nr!:ZsZ*iVM)Pdj0h(z/\4@veTJxݏ.֑E>~Sh k ÿ3^T#jTw9J<'!VC{SsWFGi۠9sFU3^kS[ :H׉Ljм){ڽ0jy &埄?Lo:UgTړzUh"Z gG/S5D5;fXj|Q]Ђf4d76՜]fɦ&VwrUHgHSpZ ^3֎ӊ:G3T3-Mmq`s%q=Z[澦Ep 6B!r!融7l[aIQƯ)@fvtpD'Jx&;pkl'Si,)0 R24:Q1 Ɲ9e5/_~SkMn*tg kym1⸺q8=^S*mTi!#H㴾OؤlT〬cI7nqv}wrmiٲi)^ƴ J=1 ,ٷTRAtZ" $=`ŭ{My$c9ݖVҁ#h,qT̤>\wyf?ghċp WSݔ](Zh܌@Ň\;w̜J}˴Vh}7\r 6f狗լ^eAN0. gfJ0:;MH"EVyqG[nhʹV׊7( w|VU6k4K*[& r>xdsQ?0Jܝ?#폲*wJidfk* (Y?o`I9jq,`BP)]ibb]ލ_E9bmɾܼQ AӘY8GU]`<+/|Af?+ Kql:q-5qr'l~]=VPgL)!oZjy{">IU94{Aex4A,0↋bpH##阢#΢aE,5KGpO͸=0}_46fd^nϹ.ښ*#5V:yt=?K~[k?l6J n6y"&4 AR4b.bV5<pə@;5a]kh)3ش[Qu{ڇZDejByԫXyFz&:+Dz afo,.Kè͜"_Diy(MA? }j53yA·599whZ4\E,q휧,L~iN|, ;ϑ5S)#G!MzM K ğ^)׉!d|Jv|8=6R Ɇ{Gs=)/3ؔ;X6FF'upȶ3]WRHA +$a>gFVf\G8-:xkXcI(PDDEaW&r"&EaK"-+3V>Mb9 "4Dȃ;xiiG4oJ wW?;hrTsVzbeЙe{S!TJ;q:ҜڥŖN$Hzrx֧U%Q5^Ȱ&z?@VE+mPk ͭ͆}ñN@]Jٯv~!_U@DV0;L|N٢ #gf&0YFf;l~`e͊hmZ̉$)Fk\4QRdM_r' {Tz!kiQm(n+j0ܑ`,q^/UxKS'.Q'qZv}@_R -&?ikLh_TR_7YBI$[j-xv8I m&b n5~x@c@ۜQ8J"?0cOgR1wF-7QS`VUYyѮ!&z=Ň#4aWÿɉ}r[^+F6¤սmRE|+2isR垦*([Sx}^>DVKٕ>Ajj2ǩ Hט&«N(m1`EIbBECs Ȃ՘ozuVk4w&('~45GrE>W˵;- o7:%%US1 znAcftkh(XJ2e~aT-ӷꎙhg^f^;qP2߶^p8 -6rHBU_NGF!`(m\ ɀm(闧~+% \6>wx[FWkO`ez"KlO>a/WiVEQBK|9RpcH_&bu.c|:G].7Qm͈x'-F%>D>»X0^]Nм>꽥x(PP6z)|jꆠoLq VZ: CeΊbpa,}6lgIݠ(*f7觪OO&S{jY"][wXj29<_An;j I^Sfgkb[͖p|ԲڟOJl-:5׷^ڧ׸3Pܢ$`{[7 dWV(_Ge _x-km wy4G}$3Bts_tϰQH)6%hOz`ݮ5{v=5;=07.u{A~*%V%LoWiG;qAI/S`Y<ھv }`T@"H澑aU ˶r&hVqeDd [ 吊,;:oL]cԖdķãP×`C9YtR|?&<ހ_cf!`_ʊx'{ϛ.u0 8Cm|v!SF(6ҚU-۱>8auVhA#egY+OZ/kbZ0˫.=٪K}{l7;CވcqGt/BfhRDj8^βEac9r&4NC'*ڌInaC1E.?*1 "%P7>CqrЫvwrz~|,;3cЮ|R`1 AnIYL]}= 0Ű.Ș2x$ v תC3%1|Q+‰n :2ʅRa.l͘亶T5x t! 0Ћw8s<ҹrB@l[\ cDlQ~f-!&F@h,a|3+C0R? d7)*}*XVN]krgH /g/ghmS739@ֽ8ˑ=ᙗScm+g:$B'7/4#b'7(."d5^Ĵ lr9?ȁelo㴱-3qI[\ ڧb wP>qq4i%EP]oN:'AxZ7~X݇ԌPa0&&d81Yֻ_!֥Rc07X~U-m9W^}ಈ&⏍4=޲(+: ߊs&=Quax~ WW |L ;cbUdR_9PuwT+E`{\ΤR~Zn loNxQӥ/^OӜ_=d=$7r[: ^$xosNF8B|PogoK`d -~ޏ+u DCO[e:^-)1Yֹ먬t!Hf˰Fu#ժre1Du\u*y͙E.W:qc,6*l?c.,¬+Fv߰QFY MNx,")҅aQ\hŐo!/}AgEQzćRَ';mSDwH[[wS0:nsr9$Ǽswx_$uGӗdp5D1X֙ƅ38,ٜ1gUgJ{tVo Tj%dLTXEMS>:ϭir5ayCAv a-GEԥ=+[@IF2 'Ќ<#ƈx ؛ƝNhK[}sH`c'?t_a`A&`gI?J9RtM(RdFB5&#n vKtCo91sZ5II>u*s\& 8e9y9OrR>{b~oUqo&~ H-wvpE,h˚mXҙ䇓!rdWsB}^Kss+MpIȩӜ K:9${TdC8؅[pӣPչГ]!eorO¼zI6lju6-#ay01+/'\Gvy^Æ% 3 3qZ]E\GcB0U2 ߳k9hV^0`i}̵ Cipy?>qKF`D(Ky9W۠\ڕhY|!+ ?ATAԼTf? )MRHyN~WȜ #y:gZT\.W,A`qO.Oqj`c>-(kw 1P\ȢQTix2m4Tsd|6-v=6k4[j) 3bl7+<+354:-TзűrǛd@BR ^Zj ~3ni&\u~ :Mf e\M# nt@1wK&z%o]Y=^W x-.9u٫]M72B8ymn_묎4D%Zy`[##;AS}5-[K0kmZyqdČ GĘ@E u\[jaåǨ/.ԿõcP% )3Ros0K'u ac4ʭc=rߺ,q`uR=V;s9N8!X[ 0r xPExCIh,cJڻ~/6D@4W㋓sXeh}ôi,=$:JA+*R# * zކXJwOeiy$:L۵H@Qt6SY(D2/F~wG/ U]'oߌۺ$Gy_yכ1_?Sϙ: kꃑѴ(367{#I,_5g\[1"'m;Iڗ #&;nos}#i `Mܰ3c5:سV|r]Y-R O3Hc+_oau0R&b80paS*Ke#ۏD%!y(UoN )Ƿ.-*!x+_Q$Dف$SHb[cSTcxO:T&WDycnQ'RXiJ6o7g]|Ec̟v5H'|먗ASrvC~J9NPp}*>0 YZEpi/data/B.dk.rda0000644000175100001440000001425212531361106013166 0ustar hornikusersBZh91AY&SY]g;p )U@^hJ:TdA ɠт4zM24Sh  &=I&&&C4m?=uShad4`& * h4 F 4@hA$?TSCe=hGi4zhh4=@)'l`= =M3SMizP@4)骕OSʛF0FiFl(ROTz@4)IMSm@A@ښ@4h @ UM4@h?q|߉ehر1yUqW/L!{d2T+:9- Yz)#5Q---jFr`hӷ#ڣ[ro(ir1;s@MEZ|٠Q;OTpvdocb(3}nkp;"ǚq.OW-4_3)u5 ~!E5L'uYX)sdzB L[1(? $8NBMl|9@ELb.kZsM[ξ|X:aT Λ ʰLtj5 Pˋxy6 '3a^f:1烧X?$MĻ9]EBB!(wxC/k&kW>fX`HN,ξgFW2 >h?=ggDk7 S#i Ԝ^H^im%2jv&E5p $Lr'?JvP:ĘoQ`ί6vr[y+5`6 }L[r:::2#aLnc1jsPtVH)eij-.q`Ǝ\Jd6`3UMKftSx2Җ Ud kUCXm8SC@Y $]H dam}SwҫO&*): YFR(*i ߂qX-!Amƶm60byQLXy wr TR$I\Lu5j Α.G҉ u|qIb&F.V)Y |@*S\aCcQ:Hp0%B yF]jGP~8QC˰Rjƈ"{RqRY5"p ]|>+!ƣn(5g|(f_WЇ3 4r&yuۥalH)G | 0rqiĘ߈%{CX3gNeKw$v#Zb_iz 2HYz&HxGT$f<]I9 30'M,r-KknfRϖVM}9RJӶSM)bG2g86DrKTA!dV] Dlh! sL R)lj rKLK=o,/Fh_ufg6ΌYe꯬'A}㌓6VNk ܨpTVbәT^}o ERlH]1yQB^ROkEFğ5bE5}CJ2&6P*;ʃ&ӓ-P_+lv($DeFL<9揸6=eǠ@vE⬆w۱u)eq,`VbY5z :m+ZɇLC# vN;' hJLvMAyA*7Vꍲc굴fӃѵ˓rW:=ǽdi!$-`O0מ΅bDLIe \[Y5S]Se!MՀ4\+$ni~Rf)"R cSYiЀš0ЊI-5Bd ،<3@-’\i-& NRr.)]Mbݏ :#Npw+\NQmKjp^Ȧ۔AiJqw& ptHav\`(h=QHP{fU k{v 3 jmh&7 &8l,(@B(`mcaQG. \,.h*=!Ytjy9,X0ft_[~P8악6ɔjc#e68W'Vq۝FVU6Ye<ΛN7g.)%0^jjn;Ne2 mc]h+veOFґc;Z^4[u; &سzFZ'%vi;5/*<4'uTus?Ew]{4>=/}n/iqg/ɤέ+Jjd)JV&h8 A `pXp%\WZҒ.8 ,K.8 ,`@8 s@8 p2d=kZҠj ~  @8 p2\7  UVI$I$I$I$I$I$I$I$I$I$I$I$I$I3ZRh4I$I<|IUU*ʪ>UUUUxUUUUUUUUUUUUbJiUUUUUwUOO1Zֵ\Rs)JRAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAh 4@h 4@h 4@h 4RF+Uuuuh nuX,TذjZ*I( %Vg""  $>ﭠD" BI$D 4K+6r"R)#"kZ""il`_,kZ)J`:.ea!3vdLʐIa1iI$匰UDH1a6&v>T h[I%ôgxI'fCS!DUUQ$Q$q1c 6kde"kU)JS+wUUUw|馻kZi͛6lݷMmhֵjTDΨy皅U^F{=8PwwuUU")UA{UU]-a$vUT8(v jN4,]E K}{{{{{333@ܠpeUW80I@ߋ[r8Y^>h'C]`g8r!iIlq% d^%4~LN_+'\w $t L'*Oljcmjqߕ2{ka+};i<{WD䁧Ѷצ.7jHo1'afõ4'z}kWէnevPC=n 5qTE9tڼU zO,OL&fEXx-( h+ qo}f?Q! 9N'$8BԭFG+gʗxQ|G v?9t>@hES;Ϣ)e^&jr>$ 6źSi%N@l*-\Pz -y+X+!*EX$xk9Rp>HX-kklB^]drlUkyZVK>Z|p_5jmK_JOeJh&f:p`(n8 _2]u$pv+Y A֬|*<З:,[P \TRh }Y߀ܱ)c1!(Br{\ܩB|aly3޸ĺ)JŷRŃw2!ϸa+qs(q"}\o@ ^e!ˏݣBPj Yo$Eό5==מ5/#"3+f~>T"鍇H~L%SWF!zUiCfHYގ, iQb#qSԀqҀ>3Q5Cg#5g a1=elm޺-@IY$&C9=T(Gr{]%1h1\-acE󅏱\$uCj=3I="J/&Y.3 ]a )Jt 9ڲc5T`L(Ev^ϼ55:BxEob3s6WV|<}Ɛtõ""id61Gmtor3[Oe  28rj$=kAzDNlCTni<'\,{9^Pj&m&v~ rm4|\tǿ¸L^/-O-C$F44t~Xt'=)!ܺ$Dм߸cV sxNj}ͬ$T=SZ2+7Ad_.^oo ]`'P4%T)\s>$6g)Cmy`$6Ң6{b^0 ׿,]yM.~t&"@i(t1Ef^KbQ"1:+PcӲu̖X"-%mhU=:`d_U8sJH8.no#1 N$Ix0 &G=F׋ *$EZ ތ ׎8$%XXE9! 1XS9EMvA]l%Tj? F#ɝӽ9O[Z_0Suk#W|cvMʂ 3DY|rxAFlUHu C#`vяݍ&Ȭ ?=vnb$/醼ÞXHq^_S)7dV‚XliǑv12A*x k5ՠ@Ϟ@A[rԷhS:%DXT:ޜ :뇀uյ࿑%D6Xfru9B{0V3_D'kUV @?I`"=b  BӕMg<$/"[ʝ)TOߑG5*3{C@T'"v57-N}A{\'Ⓚ9V4x\1 viyk0p|/e {ri_*$u=2wξ뫃Q\ '[.vW/( x=hkܐ5-e/-EQZ_ !V©]xJ0 `@gHZE4#FIϫx³Tigf5=u4;A3CFV^iFmXIh>fުHOm[[Yߕ0p멵10az栕Uȹ0Ҁ⿉QDsrҟRZ؄uЧdpDG (+yXrJ ;9SB ٸIi5Jt0`H$\JLbٺ`,iPo-?=QAj&K]l$rZw.}s[y4cwJ|)pA)6^4YqO e}wATƭ -o 1k9>@ BȊF"ŀ#"u\Yt2]|0( *4uǛg-Yb}܀iFDrG Px3|;ULV]eN<ѭ~SRt;6_SÜ$d~K雉X}e-1s>)xjNjII,-sb'^e$j2! 9,)&V^#BeTSa P*.vZ!ߖ6oߘB& $+3W"DC-_M**10ڏވ:; F${-J!C1ȂJ0 _/F~zlZj/Wokϰw8snZs#(|xRFk@(P(6R4k <:n4x3fo5L hޑ&ŊWAE3y߶R2D1՚ x Bp8.G8یMBa Fe=h7%;(.=w2_Bӳ SXm"u>3+'sSV)e2?p:_VUp\ѿKg4-4;SNfxuw5Mj wt1)fWL5)]>A$GlB+{ֺ:@KRרВ`t'fpNme%]̉jVףGR' "(_ 5n8l0.?*?c0{A2(YX[+PlZ,< @6wq5;3s*uuG5@K>mHK#&p.AguXhz ~r`8)[::3Pכ pmF[赉o -i٩h`K.PyyQeWR"mm)C7!/ՇQyx4NJ{ՄWֵ'AVzCVYg_z!##=~mH݃^;ٳg1O*@f2'ptjv^"&zeI*fnr Ph'w% JH$*Br,jg¨8L\Q!(5~UYilH@PLLJ"`2yM71NĔcW'wúsrNw+'b%]YFeR_0" Z"^% `QYK5O(#JlV{C:n+-Y}iQskaFoAЛ"]j'47hp_Q2Iv'b#K N\PQ%{Rn} oo˴8i|L! !Y,}>[ I{-Epiס=n!6C6l2aS8eSb1-Sun"!oI0yKdGFf.6FNv 򤉌1;[}~ qK~6Ae9=b@{b\̊Ts QI [ A]?2kt(h<6t>70SDg'p>C>NK&]{}On,l\#E)u5[ uH1$ȢF^ φXZ-N7቏V $&X *i6Wd. }UudwF/g(Z)Es ZWNaʣBj0Zps&%u 3RsŹl>w]01L֑Ro*Gݛĸg!g:|Ǎ.uYTĜy7rS/` G:ZPD;!>pv;T{5Iǎ{K[՛ϫ=wpqqߟJ8% }Z zzoZtIB>nҕA3  JKݒT 0aЁC/d=EP_1ӇSPi}mDE5 ħl"P-Snd'E`ZtHSeMzl'-&íE&>7xJEdV9?iY$Z|'3 D3WnLE8Ү:Ѯ;;q1!5FHCt(иqp3Ja//P(2gѯ!@FͻgOȶK$dA80a#ʧdeө)U5{B6]~` 31IVRV?sD_-~]}1撩Ђukn*cG>|lb4+dpGP ڻ=-]EۏDZe\c۸) ڳMvpt,7ܢdPƱ-ES!e|&җ#|›EOӚzvd*g`3sΛԍXly쵥TEk+V]u&ƒ2H۲ ͚eA{m`R zr5lUnu#ss\R?yFn+e H4O[#i ~TS*)hziKѳɴ\1KpFިU6ь)hг Cި.ZT})KճH_⭖zsfdtwf?"F,% 3HY*] *宁 יi gM]ңzԮ' K@>TIXIZAtN<&)~1-# `ƁIP$J:@KcQU^kڊ'm ' HR y̞l9n+1ܼz ?C})[ ~pR͛N@ׅcB2b; ?'STs !#PMC׃I +;y؎0`5 iIqq.g:-4@7i L D9iv8p)`"`nQb2dɸZ 8iLRݽ wk!q%є'`^L1 JsBTUmD&SEL" S<5v~^ Wapk1%^Jcϥڡ?jY.VdɉT"^]|eYlk0 ZXQӚ|:GX~UO\l#2<\z"4DbLUߣA`0:L:[&is1\-כպu!X]|Fa<}4ŎG%SS !.>mcĞ|dXƽ"9^S^wK>Gbcq}RI_"c%DsO7;_ռn`n{:ǵLb΅kA̲ ])孽:#v1mo}(I_8MΛ z~y(R{ǃE ȼxG=v,٨K؈{kf֩_DsMw|Do,YtޖhP_GQ)O!T3k\6.P7 {\2X.~2wn}/Q:MU$II1k9 S.} u,Nc9~UthFǘ4ß*<닙\xp7=7G4p"RN?{%^=ZOTc ~ȤG%'\;9W֎ƺXI j8 4+ Ƃź*BxXN<&:1A<$є %fɦ£4Oƣ&F}AEJXBkwp~ECXH _:Ń9j "*T_ //iљ d,eDPȂY+_,늆L o2F@Tolf\9U0bfjdNJɍ,†)d9"(:L0s*<`षa/tx[w:JAB;IY),0ƒ,Q{T1|9.GTn]w#+&'$.|54DؙX{}g$F$x v!/ OЎX(9At7p[@ۅAAh:w5}~Qs MbSljҎ9 X"WV~!!&E2uX{\c$sJglXwoߠ=i13|I\@uq|jQ051]PUDGJgvͅ a)]J^4ܓWx5aY~Dq/ +xFLW@Cpf.0$V^%d*)Ҧs[@..pAk6Y* })Nf _4 Y "$<)>PeUrx5`<~nvq0Qj ] -3<D2[4|:Qq^^5^X|1m:]c}Ռ맕4=#CܬA<^~uU^o*X&kbHjh/ v9 (2>e:zTclAN2QXOѣ /0iz-Kct(J zs'BlWMC(w'C2TL zA2eLeg~NvUcyB1Q;׼x] xAQj:ڞvsHM9v`NX3m'rߏK<}j|C8pLNן/[!۠ 9ek8|ά!&K+0Mɂ(0; n,$ntMri_"7$dܢm,7J%ƟwE)qGf%Ϯ)ܘ 5(vpm"oCO}d[T9Ŀӑ@o`|sfHz@/z$L_H%9S^θzOcgvt[FaCN!c*GcIl@ܖeSv0̴\7C''f쌘FVk#f}IadzpT<5$(\B8"N{MRHy4e0^goun6a|o_uݝ삜_C. faWSص8(p&f3[&l]ѧޮދ'j'fsh }ߩ# `8Vܷ:ȝ \qB)c"ֶU5= tRlۓ*?O}'׵MWƌ gqL#LVYu-u . xe'ɂ`}n`ehJtu0t@1A * Xp?UvegxHt}) :64\Ok֢C*'΅G=d|`6Jt|lҰ\cVߦDP5z8H<*3Yf u3y/կ]\3b=T|/@rhąKFV|P KWj0i*c8]Mmmfơϖāl .FA[m&;LD'}-Y@Ts/\(븍+GKl@H{yձ""ox+T`Sz)d =A/<ܢ-ƗlRN 玢;΂>Oy ^ccZZʻ>rBcp (#N[R;$^YV: =sxS4ydF1~ٽfhvN/v z&RkL Du 4DVe8+A{ ,0}tK{1r&f~ Ж:Z'lwd^$Y>0 YZEpi/data/DMconv.rda0000644000175100001440000001735412531361106013604 0ustar hornikusers7zXZi"6!X])TW"nRʟXaqjnj-&;QAFS,[Q $;DxhXX܊01N1ͮBTكUH*Zآx]1 埕֜1 {FS銗'LI@.a`8ܠPjSeRjowebl>6 ?^Wh?i:P;eY6.|P+r٨tfV]! }d)2< `sAHM8qEun-,쫰szX=rUKYať Yֵ2ȏ@m" x2<%Q$ۯ/)PT JMԠc44|h➐~Xk+.g2ұINmbouT9~xZQMLDɼODo;RyMScT}-~%1:`{xS6l{?_fж; qi|{3@hD9VOv̥9.*<ʃQ8˚UQm|=wm0ȱD>V`/9=pY!DžQb~%Ԗ }pi j쏪.SKd:_h 2'}X]w[Q%rr@baynC; :f~,1 + =7+6-cQ`MhWꊊ2 /"*]mVGyp} #X1 aB7jo2CX/Yϼ8yh\#c 5hFn %[:R&DjQ|Z ,m#Jb,PI!aނH+`oU+,X6@(UMgVzk1{.11ELgnqs(`l5nPi_"+VU71{6W J}{ v95aQ 5StQ]luݧ@qqq蓢+S̹h#F盎a:ݚ9~AeE πh{'|O.vK<'JH 5y{p~>YXw^x'!ҽuO-g6֯/dWP^=Οܯ^РS+$O^}13MoTUW.^f=_nPkc`F3kh/qO*Zܝ;E+ھ>[-r y[k+#YeC|L.R in(8u8mCC-_i#L[k,0dpt.JǂyOZ9f鵃od4uY c/9@ wtn:8"01J,&wJ/Qӣ,JM{ѐ;}#a3P)6?;(#}hb` OKaGtkV#* MG|27jl=6ߝl觭K hS8G8!y4\j'\۞8L%9 p%/R˝rAI+r=vKN< vӥK69%ē 5.Xo@?!JhՆ `(+ksj %&3D`R(_ tM.FRBL!yޟ9ttگlˡYz+3hs'99E]VT۬sdugW]FpUqoD 3a O-s?9S)v|7:0>C|'kÐZq#eG#VV07%6zhUznV `[ZPiRpG?kGyr*w r.o,؅A9N8 FP }Q'/%rz&^H,8"`3=pʟ>-3k".5mfuőwPszoLJ` 8^qÑpQn5~J @T`-W$iHC6GY$6̑5ԘSzVzJ5'XwśtdQ0asoxcUXڥWhQLͽrQH 9'Z`W~U0J3RDQm@B,!+(YȘB?qv)+ D]h!rV'x!_osaff`uʁJM=O'wR[ 5UJ-<j=?k;&vY^NB6{{Ԃr.C2;-kƥbȼܺ4'ܩθ*|5gN)+B 1PKڢ{:C q᧗`^iF~"CnmzEڨ)3U\7&P{5XA[{QO<{#&W[WJP'z? i"L2?^Mr6L B նB,/t { V?$# H%QYa̡l"pF=WI˼w`^a,B bTNS79Zx)r ^ yɷ_OE)_Bє[z)}]<ǁ%c & ,ô/^]@j4+qFʴgX/Dyh &B}6]Xke9TH`8E+84^`OI1*&%7uZ )6OE{x)CSތd"N;f)*.KAE7BjFLt] ;aumL ǝ\%Y[5zbdIp\Du4OK#QyXo^qpbz?&霱\y?K yƾ BߪS$gPOʥ]M6"|+ؗƉrhYj?QǛvFjKJF\FX7I6o#;ti)qYM[e-yW>nwe8 Zݟѯk.MuIWJʐ:zN?=XS,:)z+. <_Je-[w=o@蔊k"t?8yx9W8c+WTrUbz$zUDVYO ~ zH㹙GؘyD H;EE!{] ..,#Z`\Va VzQ&⼢g-r^*+̢DGh%3b4fu,r`u]a#yudtuh;n;Kj8ZAn }V?"VtJZ )Z(+0L8|{%s$9HBGjUg ɁmPpq*#!{=!kg̼;"j =O; 7Q)vQJOpK.q!| $UtІ;lýIkg)j=mڒJDZn#X-mϔ&,g U$Ӧ[o͈Qp }=@~X[񿑁넑AѬS+OOH ATdO,JsjT݂ {~&7M斐wȎbҜC݁5* #WJB^Bfh4D,8b&=;m~zp  $dxڸl"(Vb*WrͩC &{0sʉϜiF.SНAAC锩_l/e)(IJoFE,9,@ʶ9!%WeN DPB=^JA[ҙj "D Gj/E#bjv^i |SWrRWUaAα}BsaL(AU88o1O=dJ(#8 ggz U8?\2CXmv)iÓemRȁݱeqRf=^a1N]sTTL<IPƕ⿛owk(g\ ~+R[Ku?Ta@p)^&Qd(BB(ugqCo6T70y슢#^4yu䊗؅ƶDTBIvV Uq}1 El׺X꒎ՉANC!N3@`K!'6GX7ox7ѫ)9ؘ_{N9>\*=ܼ@~BZ3-;_}V53'^*w^(Y3kϋQU䜖@"rd2ӡ](u8<٘m% A!<խL ՗Y;PRK_xFK3DI’IeeP yD+ Gf/%BnC\ކї$}+(lZS­B?X@K6,>;hx {Ο'$Si5`UY!_"Nl' As+ { 1ɉ.K;͢Oʿ}YdJpl-S cxO,IܐI:)"mgЖwJ!8l΄CQKŋܒm4gaJXZ.I!nl?$!m@KJ`lށH}TpZ+U+>\u70MywR/̄^3e9|r 5$`+(#e4 v~xo>2r rcZ (^ՌwNCOD}܎1,ra06}6ֳŧ$wU3;0YM_1xu2'Jӻh[oʧs~G!t~In{@+:#"-be4`, g񘇆zezTU^ϛNVX,sc~k@Fm`[%}`5k+UZ0OJO&|ʘGS뙤hV0lBQ`#ȮdM vmFSb\+6*:ejiqZ9fExhsb^(b8A(#Xpfcooq'C@pNIF6 ;2|FyVEqf/֪ YIv"ں~"Jux+e4x" L=Ɯۀt+@N.mN $c6eO7aDZF>œ//v}'\4t:W˻{Da^_+λ>d$߱N6 Ajc4TnJueN%3?+ThFGBD8x|ٙu/a&mS_VAKXe}+R0 YZEpi/data/DMlate.rda0000644000175100001440000031110012531361106013546 0ustar hornikusers7zXZi"6!Xu])TW"nRʟXaqjnj-&;Qcj:^Qm0^?_ aٶ"Z3z5X?y(wS_ǯ6m?R+PR|$FJmbN)ذQ(g<1HX(u^"A2yR!giԙg!,bey ǥWb .sc[kbnwK?b~Q>f~1W7qʖ|!(t^LW//pO ҃qVN8R\tŤegW>ODhvGc~v ]o:D-cMP7]7.X8mCx< 7F$hI)`6>vO1ZJEFx|tW Z9ASli_LpC}rcuc؊JG, ,z E66|0|cl.5؎,0W!oGUſ/rr 6[=4GEBxw__}dvŐ>[{VE`Rf/xD? '_v6bR%cvH魋dU+ P E7AaJ|#3'm8Aȵ`1,ᆼ0748 8% W [<1MGG\"'Ίhh j[J%[q9kbd5*Yl28\Գ&Ď*-~>$U{ [ SĶ %H}]S 1Wi\={[dxf4f> }1Km@ؖCE)N-X6T.]!jK83RF{#XMccG֯.}uKۤ84BMGE?2L1_X~)ӒxkL_W]ZY _ ިtJY--Ȕy/CP&PA/%U!.)64B4/1OIWI֝o Q|afcMtY,gH퉕b|,LJ%. JK9+쬇QϢ3!>'1b~/3f)t$MgPrjn펈Ŝ']%\gtHWzysc2G)%f|@MjmS4~&N"BZ愞jgɸCmvM"lfDxJcLy4nPaA}3:pz{7:kKL͗YuYTN< P9PHL˙8ABv^R 7tЈLk[s#C D g,`(cAW:Z%g] TwG9c[ !.$ +FlO,E}X_cJP".",ܿrT^Y,~ET-s ! y1DG7Rj+)9WJaamSq/uorDL9;HXf/!hϣ۵hny7/3rQQĀvo` ro*ξWH6L.w++xFSG;L/cz g{>u $u)p6-|oA,@6D  J`p@ =d-%oOD|soRNQތtѽ"'cڲ^bBD?\eZ}lܪٞIB:p9x jl ]VJ 0g~c gb?CBEF)9e|x ] f cMGIzup4ج{75g2PzoNoKn]2hF6 0)*~@Q Za{ksoVf@Fu#%SBHBcXp#,`&Yfۼ; &tPѵ.$u?,S>y<^tq1Pk#8X}E[,5t </R @x]^Z H&ZlԠ9H<ݰ~-+\'A5O5z7FOyqjLn#Z-AA:L#~*Z[vȀBfcuLz|$W4дJ|^74|_W쫣F~0VUNF*H|NHWv$gn-'/2ڳ伊àeB#nJt>B{1PSmv6h*toy5P뎖Mmh"2S`Ù[ѽw3[aԡ8!)@Y9h$ֳ.L z/1D _Be7 E5K9!tT!"s9.Z6yQW/8 Ͳ(ZI@KgiuJbB5ndJybBӍACI N!$M"YDKX \o:?g;̩w$~M%6m a $w) __#t⠬#ޒ0jKSGoB拼XcbvĉҎ,ί)N.#ڶ S]q9ɟQ/ p^؟WED׏EITTFRutr!`OIH\?+Z" nb5S8P_ kXNz8H@nТ/49ŽoŵÖT\8^1!'OJ#9ǯ=pqS6ڟnڅ}Y\xhί7/*zCOtZ%τМ'һN}*Oim R1(ٺn+9 .`>cN.eSf{ŽEeJ{1 rӠ"ct4g2t@ɚ._~Mvcs&)6  Ֆ q$ l0q*Oi) Ɨn92+3(W!qd=^3GrߥdZ 4C]0RȷN^hƉ `=7(̒ܖ^X85c, k3Ѣ_Gs5v&?͋$A88!.KR[oHcULd@G;-7QeFα(3Ȥ}t \,>3I&B,z&\g6S4weD%X~rwcVq4v#}EcVebӺ;*-jQbVhG,Z#azeG=v}V dg^a9k: G\|@:A+I|Sls[v2 X9=FEGVRUj !vʇw'Y_xwPY <]x>@9'QOWAD #9E=J$%) 66έi4[hq$I%դsnLwQDz+$aP"@JYt5s <`ׄݾ|O 7-/,ܹ0L.TeX}Kd<2Ԝe6jbi4MnҾ\-LjxuH,4 QMeF M[N]rY  =T/8VۻG,G&C/-o]flgc.d$yERwԕd4uTUWmFh jl7߆UUq{msNilLm\kKus~o0Ɓub\R?e]]:_#AݤRt&Ⱦy#wlnM;I~.G{ Di|?b}⊘5޽^^w"G 11 )+r0ߛ +nYtu4L`[٥=ih,Q@N0m1SWCэsݏ-1I{-@-olA mo'\pO[8wT{6c)/nszlb0.M0吊OݹN?࠻m=rghE 0%R@U3Z؇;m-0u aWJk+WB>5)kbX9?V;TXU%JPCAC:{kh!XF qf=-Y @3q}: B[QHi:<ft~mM{sZJʨ )'>3?!l[Mm5D7/RZ.M3֟uj{\sm&R3ҥOyТR0lq5'~yR7"iO`ҟAPo ütH و][Gc:d k17(q*c9>)%ES>-*'p!7k7zRJ1kwDm}CcQ5e+PiibR [&t-L=7"M]8_\yYt8a~s1 6tQRe2UEM6."cM%FX"-e0'B,6N*h%c?7--F3'eezM[]'v4WkSY3di ?֦mD >=rĊ7_`^[#ŵ_Y> @ :lFNg],JܿJ!%j;Oߟ7^C0Vg]O{3D+A]q]mD:..Y;̉^٣?'Pd ؄X~#tn)ȟ M|:Fقk^緳B(=dVQb$8$yV~De-.Z,q/lW9޺;<-Ųp@;~PZܼ!WYQ]kDJm&7i%]-OFkO[o8^Š+Qe&M=} ~ScH]kR`} EeaV[3fKnYj*|BAFf86M;K/%Nߗ|k =S' @54smݲaFh0B={!lQYa3`9rGiǞ΅34m_? c;$s-]Cr"oi٢0#A[p<8<8i>%xn]ڍ5%Id0g`xU@cOa e[\O/MC QHF?Aȶ&=N~/teC2}m7 ǓgzQma DfLA@nm}\Myin$y+ 7=f=qK7ԲoVC,`KĔb3R%dٙ?P*)OuD&LRmvtp ET/0rdhy 9ו`آqS">˺WO1 Gܴbޭx;2T?1qݰ:"LKQr:dklEgjTrJΤ(.eiU\܍ 5.ƝQ+U?Cdjj +)]ٹz8v#kZwveڛ<&\DӄcA NLP{4 ^z˴ѱJAS0 Ѻn{ X맱C|mCʙ?m- uߜ*Mv4*(…IJV8u(p S\JޡVogАa:^0ŀ^JAV#a} {PC H:Ƈߣ>*=cI6m2?oBybibWH)h] |p桷G(vD隑vuψu4Hn9>0~w \sPܡ*'[MƎb. P[6T܂'))vƫN0V\xV&x $#oO;4Z,8pGWJUԕYcVVh^}j"C7 fߎmp,hyi4"%yh4`=3*|B9f1OaanP M}^k.3P@T-RX^r^\;n(H4rҬ!H1J@j-K?RG$뜀(Tai!-lJZ'!)dcᦘ)j"m2Ǽ ~v["΃-"D[,B $Y? i)&QֲH\;vjBk o\9co70q&۷N\Z$06JP MR?: ę ?ЪЋ@olșp\fDf!]=~SW&uJι}h]P#du(;D:T-f:׫S>n [au1gW*O޶<3&sGv ;@ +S9'thmgQֶF_/u}XEmMڅ^.5o쮩H5(dxK沉 Bܜ^31fKf:cl|&M 龬Ė^cUS-%^ ^ ЯxCS?B`!u❻"ܡTVBOQ-iV4<އQS"Nm#FW: 1jOY _Vܹ`‘QkFsI`ACVt'cEE]g㏕Cz϶XSJݓ /VЭcS>JgǼ ПW,;\̳zphŸL- VVŽy(^ΑGJ>yiH~%=5(B9]Y^Y< !:3#(fRp!QK0oŠ1P'TE%gY\i:ާM0M#"63.4@-ٱݱh{>U:*KpqcsumC>dKԘ,4h1YT(@@XH"@/7#u6 R^5eSf*J9 lcsA bIjI]w:ʽ7_wV3- ,]»YJcIa|U|ȩ/y.sr;rҗ9lۚ&gIxV5ͳyciӄ-;JGx&Yw*V{R?wU]r!IhI%9M [% jP몏N ׫N&T (㺬1*[2Veީ#YnNz%GI2hi*anl=ڛ2[>n#:YHP!OF"F~htp.Վn53E.#& 5YṟCLԉaܱj%|d۔Ivү[0b寘B|@vs* U nVG4MpAMMM_W=A3 !&1lN͒Ti "Dę7E-DW/L~_9C|O vƆYr$8Lq;Q8jdN\ݰ Ճ?|lX{uxNl#fpnKSk+ϑ?S7=ڢ(VoaIߞ*>NpHebh>au%C3)l9S EMn\ 'tE-7kCQ]aA$ֽES ''K?>)@sFޅaNz2yV%8tT\C:n%-a6xy'ʇ3 4^5#$j+{r9_0; -rvI{k]溏RY :Й8`)'.7S`O)r+g,DL "0IDOڇrЈp]K=23&@rԚ=\ ohR $ú646gKݾ>i\-8y 2@;pc03AoVx`Я*U\&D&r;%xWQ+~$2ݘC3`hZxI&FO #K>ckP=j~%O|$fע+0d$|[,f{"ZE[mC~`KT32brm&\w%5*ÒfUp4zOG6)JT8!Z [7kC+ZmVk|<#Yg{lˆS>6[Y/-]QjL']'i|AGdkT45%KV&i\no.u* _:C彏Un%r.,5-\Z)[T"'kˤdIG6ri1y vUڗiwRfEJ7AeCPmy}-UJRAw k~3f\=/|:~yjж^ Tl~[`GS`,z;߿XIلFy\wEJv R3WX  )Yz\ArbL_´-p`i- CAg'%*w"=}}3[ )\bib'RybNhm52@ws/xtzۚd`jɉ=NC;˖Cr&-J}|Z]jC0kN\2JfuАrb¤xFߝ)Z1vFqyR5lj /]Q)=fryZFrVIic N)>wg7?.li5zc1qS3F#kֈ#KM:bMRsT:MzU8x5wM2w* :-phf0˗6 T]Yi=a>(5lX_pH)'d*ո؏Ajbr퓠`FRzB2ho) 'y}Mxz#9P16YIBII4AQhX(V+R PB8Oo .kv6ih18`[oygHߒRtN{sU&{E-[|[a!4n2hF$pitP:c _Ӯ_f#h\<-7D@v`zc& L Xb[[ >p"xv]rDDsA^wڄ#Tz-PP}DP]\asN):&dIjTn/GH(7!?Z֣'+qiƢ8)H9E o=\_rQx;wJvL}’)VkF:Wak/WSE{PCĎ*n լ|Ơ}n% HEȿk;[3&5h8!BiDwa{f_C6/:+X]!aJhJ-R)Pa8vb2h9Bn?dd?㥍"B=-fAW(O.mWZ-pзJ+@_ ]KI{$>'+s/炪#oS m[YD 9'L1hINZUZ FX|/dl\7/ip΂C \lvD\d#xAPT ˒ Gّ%;zP 6 )KE6h=X Co$#25!nt50TCvRNw,)wOah\zL avKTktρ꣬6 ҫC897pTsN,>* HX?n &s/:nsO#K`P=lpW0!a99r!ݪ\6whbScBҖEz<{Vi t*ΜlS4{'>Y4z㻦wg.7}X{.8(@hNb`&+ +WYGA#MI`!l }63(Ѽ0FJaH'ōg'\UnJ~e$ Ub>~! 4aKqLL @*LG zۅF%4҇pY^5O sD%6g֐A2IBjrdJR+I4YWFM/]D"6 C4~"urٵ+kbpG-2rQZK,&kL Gj_scݩbLQQA ~@2ն"% f3xOJW{HX!G+6$ˆ%95u?;`&$L_Go$ em3dV\ Ŧg bKSJ=3|ZVg7$ȁF∕Lk+EU~W4 ;{I>⅟k*c;G:~mY (\|VvWMѕ)x}F+ Ac ыY4o!=VbeӁE,JaCB슄(,w W-{ WiWsů7uc(-Hey D1b~U ,hi/ U J6)o(o |PVa}Q%ـ&89$3}Q圀x|Ykt>r롗dę1cK6z8;gX=Ѹ3 F;**k_܈>p&ݎH=&CSe[^f )Ti{Gi1ؗOFrz/4ݵv}ƐPxqVK+15ƥtϔ4 ORX$bC-Zg1&Oa nG2KK|p8--aV1l  5jp4 Ji̝-+)л٠ⲶK$o#1Ls{.?9o}(}ߺaJX5Be)sgWCʤh'k }h3Rr{.6tC~s^ KK9OD3XBS1.] \ š q.udG/1?}/~?vޅ ݳⱏ'qoWtpx^'N2 Gb˺Jd=K)Z[ָ+EorӘ)p<펼% ^,M[pmk೽Tp-诲9IXs^99.1igS剳p [RF!k2 5Ŀ|\.V N2T uV`\ KK6BOj*9)6ăX5k zūL 1;H!.> m&cOJU1ٚ@Sng0*O!FZ@Th` _.vpfWZu@?NSc-I#JZECTcǘϚh(tm([Dّr@8Qр๴R3LI}):s^:+06>a3[}gcyP7єWuW YATYdJi}́ ;_8M>紩=mgjMőKii(O @hAq[Ү+4dF4TWc {Ɠ=M̝`lr`~+1'-bF8{{=h$z;bZe[6yaXMIx*uē FcRɢz-3_v[ؖG%g?l AƐM׸M|q˵9޴+'M5_a"ǥ'NP"H 2!SU bF׿Mx *z*!^ jX^9KM}Qx} @Mb1b'ľۯA} Ym5CX6-V w ؘuRu& WBx%I߿U+3fiJjo}k--qJ8j'ǰmS1v隷Q ΜPnQ&TWzǜR)6G<@PMMNS88] '(Ы-N(KGyKx&RQ;?ڮ>>`h - Fbm)XԱd;^Me.J jCwOv| >-gg8h:D:|j?(UB;McBV% U]Ki X6AUE=86 0n`-јpQ"UI4?u-qF[Q^QѠݍ8I2LP^?M"(Rz+!d0q3*G};?4[`Fش=N woLVޗҴlJ p7+G 8{ƶ1$,q=XX2W E &v q= W3r*Cmd8ŭ|K'H%f珹#\!p%%2McŦJwVO 1:Ӽ}šy'D5*:`k"c9O4D#nyNi)=峂`Qp[*ډaq䲤&ҨgׁND. Y!H Ĕ %p c-k-q\۫>mEts90&/L`1\Fct#2ZN#,}Gs8= @doa-u Bڣӈ)۠C`y='\"G57J$QBKa=dsBKlGަ(A'A^!u=:ɑp8Һ%Bc_MM)VsMЛWkʓtdaf>bk {O?Ȁw%(-~YM5wcCP ai ;knkR5CA0-CK̐uf!Qs 6`z\㗗>wlu +[K{s{;}&N&83SpnvELUlAEJR1Q-|OamxDTjqdSg. % m,;!B5!/xj)Sr7z ejm- į[2¦)ñf0(zw=Qΰg*wBvʺz>lt;g^ ]fW8`#*MTޟ_!Ԉ nk[%h/o] (?,򞔅}\8&VH7F˸x%'^-8R9ʀF0nGL8n~ "4e1]}W# mgm.\`"-WD 7Qۈܷr$pAOfA҃rr CiFVs%VeP,KfF]nO}6X.*ViD<rΞ"2%v'39ei HѪ@U_?I LζMfdwa3[? |j^Ddx+~rc. 6qD{ zZ|UE-ݎJc*h0 .99~yl\{{YAһ/xt* ]'ۻXv-Dc]wc oZAObÖjwK Y$wl [m4ĿL˅/{BlD,{vA)OFupC]6OpO5ϦF2W;A,X ZL_sρn:`զ_ n+S"u'Xαd4()Lep]N0mVKeYe#f"5dܤE)2̽j=IQqe0ˬv0 ѾFd=Q6I}ˀvmJ0nI#/?-A~dnEдxpd]O}my)_L#nG:eYB.S旦?X;:0J9jStb/Ht4cpn'M>h3xy= a@ޭiW @Dz&ѯf~[}+p8IF&9U q=Gу Pw(\/5;"G$g=t ݉k;0Xb) 2jXz/'l-"8LA .ϻ Fʢyj7KL6:J2bNxM߃21ݢY?5!mt^o}aJYpH徯,e GZ+ɡ(qQبaM lA+c+N)V8XV \Ye2b2+ðՉc(#yV4wZ-ʋNTFEPmq1J^=ZnHז2O?!|p6v6hj7ٲB1zp83 Rͩ [qSqDs d/+OuKP̌ 9dAZH[`^5{4$Ut&Qgc1;U}e>);c6֒%3;+:vFCtYޚ77$itL0_iI ȃ~mǥbߓ*f SotFDMÄo:9L) :3Ac}‡ʡZ8P׶b AHD8ݓ͏O bՌ.# M{cD\k#0/^61Q+C0H߾l"1tE#|GP^6E@4獩 Mdgf8dty(ea̰YAyYW])/xQ O,R#Y]xP>H}$Tݧ+ 򋾺+(E%V,M dC΅ܻXU`4 Jw܆+7mLw4:I)}'΅au4 .+lfr]绱0oNe9[&^@[̓(W(ZX-Y휠/a eaO\&HPgƌx97ӭS偀]qiV &evACE$FR}bG޾(d~p-dW{l C]aGQzk)VF105?`7 Zupx4@iq>=#I9)^^ 0'א%CPecKJEQy=!Ԍkš}Z]i p3ˀ%E m1u!K3^W\K83#N3?_@ t 셨snBOR0^$֦ ZV+fҲ2cJVRJYn7Hڼ_IK8re%^@Mm;<ųu{X|}VYƖ@W(*PEȚ) ?i @fafV>mm WasvU0yИ [)H"$,, mD=B$pjjiJ\t2uxէ@Y-.ViC=JsSD@䒣Joo+壸P:`K4O|y<mn*\;ȱ;!?϶'̸ڃqp=&mhfBf]hYuR,iNdF(LicfVD6# 3iA W<602F@@_LMϞ;4r\)xg 1qibhoWJV/8|ߠaF &)-}tP܅qkP|*88L^ϜsY0UDv#yƈWFpc- $0o9:v,N/Zu(ҔVuazS)A'kA;*e^ M%ЯeWW2<{Ў>G9l/ôokqjkϯ37minT-&%bUkZ} g ?/I;K7_z E=R" 7橕zf)^!Mq-\aU!?93ʡ6v.^RbU=ĮIs1aY7<ȯÖ#A(6>C0' w !]JXL}; =W+g5@|)VR?&쁧i^|Xh6.LrO{Q O` 'a /\gZu']! G%t )Irܥ0gp-jB푟I{Wf}r-mVcȂnQ^v>[Z-;=&bl\rTp)n{'"2Lrdz8a}gjS6۪Q =BJt9$WT,P=~id*\!޸ud|Xt+re}֝yӊ/AsʐܑVcgďVy cd}zMsY|F( zXJA +?@3wXArȏ[:=Uݽ9s UeVXaeݢ`J_};mbM!BM)Sk"ڡ'[Y}!PE #"(7,jǎ~#BfTx: SqV\jD>es=gW7߃ADA[֟RN GG_ڌw3eVDT`ȴZJ4 `V"ЫUc=boe: -F fwB- ư嶎PCGtV#z{!b' YԯkF:cIn9q8Ls T-]xIDdh7!]u5 8->k2ĦF;M O Wڢj!%SX$gO0mC$$EP9t wqˑž‘ +eA>odɃ1l+9Ȁ(f%`4=^-2) ѷOk>w?ZW_$kj v.x>{T%<5;54h]PTDҌ63[!G;)l oR90c$yL.l֠MՌb~.-9Uw"d,@@$-)\2.7g(q)8RHMOhDͤPM\ԢSd%ظ/KB4J%Y,M2-Ӛ=|_dKe'nqE/?xeE8 GVZ1q{75W/EJr&1SNs"ņ=dpnOFv"BCIKd|?4Qbe+j$iN&ڱ(z]sbFj}Rjy]`5O;~q8?:J=A{[xO[}9#*9; 74P^i$0 * ȐxR}' Ž/,-f P-mf.؛}o^2X045TG&D?&zn<{ߑJ21v>qt+ˈ+m-r0R~]yD/I~ڒ~wrBZR)#d&"d֭W36yMNIT$:GaI|-O=LWEZ3WA·"%Yx 6.[,oS{ä*ry6P֬|bpſx{OQo[xMҙꉒ}%bпc@BLhe\~z֘y/'֙1:swbBQ(ѫoH;vwxUrХEoq!)7 HiJ׹|JNiBT@ݙR:OjũA>9cVӻ9W9r}MH]3[OY:Yȫu8yD:S&_AljP,dZj^6>@F %;c !qE#>+o>1A,ۛNp!s"\Ih_(p*:Pk2< \bʱ2jY!q[ g:,dxuN^jE1&N21u+/COE\8^wFG!1| :,e_MDIK0X1[*2˜8;ߜ[ViIf^خ LԂrjEzK:ECVDYrɺc!P5Mh/֐L<|W'KzQJ U Vhrwv&~34RXi8#\`7>}f*}##ewx璯 `69++\ׅ ݡyW5JE/\B|vRL+S|I_us1?i3W"WviWjw# ^fBu1hEX mD& |7@JQKp͒؇Q}o=/wI!Q$ xmeiӡb*%GM}8 GFLwW=}Bw1B-vd{IKŃZ~:g yw "'/|PɝZey'2 &O=kHsh#%-+>Zyo+ sN=?S 8ûf =B).k=q]3sEYpbd{cSTaZFr FS{_aV8̄.ytm9jU)-*h44r丈[5ʴF됌7}AVvqsxc=7kg2FҀLGoGCH]?='q#Iؓ[:  %`˟<+3n>7 B/D"ny 09^a^BKbX(S_a-bΛ̔xr=[3y:4R^GB߿::M~e(sH3Chg>,:#!ܳVT\廗sy٢@S!xzšEI1YCx,춫}qj P!j8Nt JM!y}⡥rVQR_%T Sn[+:Zb_3ͬ<+)1`ʖ".x;b\R a=,Eb0P׳GԜcjrSs4'| u !LiesT^osA2T)#=Lz ͣsBBK)Oʛ5xv-Ga~;[ 489uI'ȳw%{2 i_%K"azB(Acw猶5n+Vrγ6KjWYX5 MW*g%_e35;) ƕze@?=U7_j_]BRJ |yk\S{u/3ļ_]̀WN>X̦k7hD$g!>Yp:tRyzWYAϻ?^Jf8ݽ"mܙ<-,{Mn$i[{z=CX2-'E 㱀r5%L$Nf§\E6^6ĝ#-2lZ&_;2)JI^o0nǗOsE2O,D& @lQO+T!S4/LX=pb)Ȥevmiwb^(lg vfl.|Bu3L_7G7RzI"-P\]B eDrzW[Qd nsI&}5lES9\a{DyΙ. z5 Jʡ%GgY"L/N =}O;Y0&;xda zIЖ׺LqG Qnp9(f!fϾ~핰-F8ԯ`ߞQ3j77`}mlh8t=GY:iF p &[J"iS(l\Y kWqМ)V uJ.5,ω*_&( T$\P Ψ)71A/JApޜ]n.z&*JtRqS*0C."MGY1< ˦nrU%/$E0j|D>/'c6ڜ1Q Yu} 9zdnT'm, &]ek$u_+,:PZWghO)+kypDÆ9&P}l׿b(1eeCYt#*2\fpp`Ts/NxH[9Z|69ݶwwhA <|.=->u^NjĽ+l+djS5θIrw%d$j9yc㳗HLS Ǩ^$"%.49eIӚ3nԞT'fԴ2pUH#n0>/jVpÛ*G,LQ>' !(- N|.7caͪr;5usIx&m2gо,_ ŭoc=$foFcptN7i/hp[te`uƏ``$+6GT|Bex+1ņAa}&EBxŧv{xL'ŭ+S.Qd xdBkgdys8"4Nn,Er]lK`6i^K2c0R%+YY|% swDn|l${dQH'/.zv )|dji!ݻݭԈ4YUBa R]B'5^ i|N^q_-"H پ)Sڦ$pӮ>hF~e9Pl#+WqzyT1z*t<:BhWHM1kW`ggge_ +` }H5? v)N?"iErARoyf̺jΚV?5~ֱվ׫ZÊjc'߸o跀hLmWs ~sB]JWc FcUh5|X8;V X٫֮'4brLW`9 d^ :G$AEcmlk-_ N`Vz.|؈n{έ;KAaaW}їڵ8 P jխ{ؑnjG1"E0j_sY45p؋}P>VzOCf$ky;`/Qny3V]%42>/`Wԣw':+ g·Kl\ g0EF}aM{Z/g3`yAumw*@rf#>g)k_sGD+ණJ+mBXVLfs!-;l#~u8ϲ(sfab~IٿcƸ}#lZ`!B!9৊/=@播4(H<zFc[8dCD}żJ 4r5GL7{.'406&UTSKxi7sZqc 4}yٔl:RQ] -̉GK,/b'1op,nE=%! ċR4XH5cњޥnd>'}<vIT>SR|Uԛmy2MJ6y ? ޗLeH8B_xp'lWiPSQ5J&БhG7 g8q[Ǭ+d.tɨxPxLD-#:0Jr[з9{iXt T`7+؆x@ fPF-≳9iV1 B뷟>w105G+{LH4 aIFe`z} LJiO U"%NgMܽsB&$v/p\1KG[܀}+TG;ydцw#$[56t l{2 GG  - өI UqH=wv$PX}jEn-xB55V:^6]Ef %ub6w~2OZCd?"mDz2i̚^㶔5E2/,PG3>WK%uJSOL>8OK[1)}`T l$[|f ɺ@e24{^\-T숩f:oٗڈc9JpX+ysS1W@!r`l&\b6h;KSI+WWxVj~B;P iV[ ͔Hu\+U^,)F ɚLZ9=?ێ̸=Mq?B"waFAO ݫ 5m׼l%M:>nZ-_g$Rޢ  _&vD F-ٖIEd }M)VĻqq\12uJ>b.G91aGZp等vzWi2 #ISͿbU WcOmleH}C+aXI/+8 %vusp6c1WpJBfp4cӘ-+Jh__Y:$v~JWI%0 B/> pW-Z̐[7'2!ϥimb0`GkΝǷƠ[Aa2 +˸)ww D d=3U7 D&p}+ <N­l ai6nVl3Exrqq 1NI߲!WE,894HWڲ9ynuAcy!ś;bsPvZ%?ϊ̃leg[1Dw+;FJ Wl]V:8ɐm7\d!PuzO=JS͊`@*:oUK'b.XCB{a25B)ͬaDSJT:FbKB~pΠ?=xɨ$29n]+UgZ`la|b0 @F7=nsb&Mu.nu](=$/ڲ>XSMpj>ۙ9t7)?K!e<wqžS+onpҋibמlSr7JD;?Z8c#o=qkF:M‚=|c䭽o4Ңi~ޮw h`Xsm̝ܤ)P<ܱM Gx$BR)ɔŠRLO}Qg΋Dɵ$ b1G"I, aKE \裲#C\cO17~灘lh Z=Kۙ܋Ɋ]@U6]CL%@ISrw\k4D5.k&]9pߦ4XڿnAH͍뺆xCNwLvS8; 8 @&Q1SFx6:N rY41.: Nns( .n hέM\|P)}`K͐/K@`m=*X Ab3og D펟C]m*. zT:i[f D-gGfF7raC%i\oPU+TdPkAdVuK 's~A@Vuܚ@FȆ拊b rN;*Ϛ b'}_d{ l#<){eЦZf, ,i*Fam{XNDwʨH(x7(Xsr6c'߭j JH o/ez=L6>j꿊Gɜ;Nίe^z֬nnD Hb(+bCZ`JqW.GJ <jn!:˷ccP` B̔Ų)EG-o5Nꢶǐ4LOiB4=w1 XObo%iWȮ ^=L !|CV}D`}$F__Vc{myGX wcSͼŭsJEqٖd3Y:4]iJ ͷj0O ά=}ᦈ4nhξ*jl+]J@Zon+=cp@uhMeZZFK ) :%_>Gbz`oz, 4/DfUbM|*v؞p!( 2m>b¤GdN_T<>Fzz't {¾NH\*P<5wh'38ZXxآBݞBTWP8څ0}Dֆm燮~K//x_x4wKV݇J-W8 D`qyzޡZ֧"$fn#9B*y 4c{W hl40Uj|gƛtNָr yʃCv/aC<](}0~ ew߈wQg); ̫\u,zS"c#Wݳ}M^Q(¦Y0j$:oU#VT +SrVmWX W6/N0yNptR8ÛtdO&Ҷۚ!ޚ]M@Qy6R8:ӈ4e|I^as峡E ~({̥Z9<!΄V$ +,5Y|h:1)e$;E έ *ɉ[qi< )Dp=E4JE Za ْZEV1w clpaBFv4$LK9ZaɿʋC? V]t!D@N}@ǹ:9u͂}L_W|h U5Lw UI FVϽeQi <(汩 +\7W0R.e <AS.v~J'I,KwM'!>~hXm,U9/hYveyu[ ؓ%ϷN#k(n9j6J-3}u]xI\N)On|9.:*q;QgGV݄n3 H x;`^8٤0g4$yz\'sǚ]3ʨ/ɄBbf iFg{1xwSECe\:7xBR92E.$wj@^aؿppљH )fmh5h,O_'$SD%M1g_|ݿWCJd HRvY&VS/JV?l&.ۡ+upJ<_j]ՆGXHQϧ|ng{u9O;Z+-߹x[/ +T:6 }IK|DsK+e1mkBUp,][oE*SGѦlgWIMH榡'loK74I:zp,,/DfUOGiHKOdY,boagzE]5^MߍB\0Wt>7 E94Cty(7Ձ]И.]Q;'DT'xlA%u*\"wd{Щ3#"xQ+zvZL 7ps[XtT=:OEx''[c9r1spϘﹼ"bPٱ2Ik~Q5JQlQAt5Zp1V;nI@$]jb2j!Ʋ;Z=t) AUeY ǯ)Ft ^մ.w"rϘd9 M{J?E7Ar~#^'+sy^ P9f߃Yfq؉ ΪVza4MSp O߽av5~6 ٤ %vgkӯ!J #`,|fbU8nuX?#vF^uVO=P2FjK-Iz 씡HcWz |YnC*ed헨1^?mn@ lI0ɬ }ZŅl@\g:u@3qqR)gp|8'd6bUٞ:Q/2-!gzĮkӺ nUH|Z䞧mf5b6]ǂ"xi]I վ@DU)s澺S/0 biOZwUH z0]@F4zbĶ +uo aowa8b$+{z .R'u> jD,#$ZƟ,$EYbg<{a`O''98R<LA~=7}svV7)* =LkZcW-1m3|1&s4..v0hP>JD0xv9bf1ūNSjQo2Y8'<Q/⨵~^)-$:ܰ{~A\*WrIsjy"[r%4&R=P-`&/xk^zgB"' U}L^p)b7uB  vteAzjC$Y{2!\^.?E.Un+pqDu=.-g<]&mN"uE4T ]~4_`y\dZ0d<ŰJޫjgP^UPG$jŠ;A曲s9`KS#c_X&'><6;:nj뿵eRNuϜ6R&zlV1 | 'mOgg4bzu&` Bt=ǩjh'\ eH(1LTr/b*POnMN]vS"㗛ba**E8H>m :<y]hxS&A{;g}k U}6,0ݖb(4Ns { J&iB>"Ȑ<`BC}{5Rzuq϶vNp8%g'Wt {@7{BOSx0^MBE>PdGKq }/z8Z]h{ c,Ƞu0,| xnkO"RUx1jt-|7@:# w ,QqHhI8Ẕ́FCH1ZG4&)3S>Hڪ7?Ddn]l~{p:d }%Ԑ?6LW@p=@>x<(IV`{h>*;UA jS=Y1wR`=>?`X3w=Xɦ[й*Uu-Fp:Orԋ1t5ꑔv %%Q%HyĂ$ X5f; >OeQ˘Ȍr!1sz# ʑo' ^ƼHYz _2ϙl͈8sdnzM "~/x{|h1jf<>ѱwZ?gF7Y`IE;טtM.8b:!^[]FR'?ߙUcO;LrGYgER,)ջpq;?b[NSq?&e fb\ ׏!1٤HK#tc@*'BX I6aQJxu 8R!-Zz49EDImm~Jbd剖R˹<96q-Meͻg_f_ߍuxi -IBqW&Ge:~8ɦk5 ڜ(7gܠwk(IMV,7A|w#zlT~RH%*m +I17EH!o -/ƟUVPzAW\|6gLzXGˢ@ X5Ю2(KvCe Q=kX`*]^μ!K̷Ԝq[Zrh*F3p {(m}Jy'7J\CýPp,A+K)b\ kp2JV[/oePR@* &&AA+L.}#{&{T,nnYԍBs\;ά1583i^L[]JOA\]SF8 ԨRG/B_9呱Jj E g!UEFwQ]Ͱy% -IU%4 +ͮo`ȐOLT,*poN*rAs5۱|r5/%t3.r,iH!l. ѱ(kAA,!}F+DIAɗ}X::UFLs[|IS1aM^IkגP"dS*衜f.on ?oL3ﺳ/5TRVҌ ~zϖHk WBұJVkh|!$C 4UZ-)v;poGҏ@cvmR~,އkM8o Kʊk4o\G<𾀋 d=\EJ{'TH\D:@_/fErnyKpUt+OEJ_51O?_ӿ9Ipf9f/ bVQ}wE%!ܸ )HhJʥ&~b;ss)3b#&JHi}䉩 mzEjs/41M"^6j:\:wG*nQW}Ȝ'%e?:Qe870;ݸ,Wy=vڅ ltT)wl r&?=ٓGzFsVCPVA ҄W1FvWf|{X[y>︃M]t@x(tJ}Px">i}k VVmial^ױ~:NihvsL'Oj# >ݓRd-| `| yPzgx !4`u,<Sgp_>:d'ZU{md0W4bg%=lfk*$s0E vvZ"I^6xR\_?pǯLAm9 qnbr/whJ7iP`yAi͝,8K6 n˨ :M \Qsϋm:IchRs +6d?S.ASWmti㙌wi )Qn5& _#,8nŎ]ۨt*fիbF/H7P{Zegx,_ǂ",4jZvZ>zBϮrKq05ߦ_zc@:v)7OXd? _W.֣ğ~EݸKV[Yjl٘ + zjE:^ s#խ[qbqsT?g$'e_u,؅] nle^ M3Vs( !:$٬ +aB47y҆/>W%1h[wIF'MxNijĪ8#Z:p [9'hEED".z*9f}/hZ' Lk8'5o0FPba$_Gx3 k %NHe4P=dPH2Lo` } "?Sx1&jPWJ/J?E6Cܱ &Ap- f, Rp>-Ƃdu}"9N{@-T;stE4b$ e+[9< 3CK6PV1a#Sf$E;(}eqXېCKEvuB(drƪQʇͺ!gS[ZeFcb]KLHR[A&[kCQ}.S;1qζx~='ₚAb\QkQwͻ"ѵ3lÙ--z4!j=D]L 3@%[ rϨ>AZ"khb7c tVF94~c!?[ɿ'1K2C /z;9d-gfi>U6NHOl5)!΅snw2Te Rp%Ⱦ<);jLll$]Y1La֝r+! };#m`4`Y3:YhL煀XT9P[ܡld`H&ɩn4v \y[=.fꦶPK *"Pu4 W~ \ ߩsDYzk+LHuKf ٓnpP/Og|@QS _zZBBj @Ln`x1;+#O`5 ˸D)1G: F@HYB ]E^ ݎmPɬT#V=…L˶}IX*1=|s98`㨤c"XE$4raЄ|Az\?x8zYg&g:;Cs͏=7šTzV,Q=*o(?D1G -++󛳏n1nf!w&Ҭ(&h 0)- \ٞ:C6 A@jE$̟=v+(4oBai#x+ ŵxj 2,K7Vv8fa~)n@jH m7ȪbQP;LW~z("S||K ?Ez˹?,zpi_%j@eV0@z4F0948}0{KsR|8, `4ەJTR͹.ڌ&NY_x8ͩէZ;PPX7rGDS4 )(S(oOwjrNMb;+XaInKUڊn7gz5 IMz~8pAvXԇn5;Ya^*ן 6 3Ŭ8Atɋ@E4Ϳ", mcXuklf_(jsDв9'I ,(fX#kIkAφIמq dJiKNV>o)Ҥo|a@*:n6JyX|uܩe6|labc=ꆫtkggJ}"3F8!2 nSC17%By"ZR3<43}*! 4Rm_B=#ʍg )kT6! pj /7_A08ػ6fz(wElIn)Z)5=mJѕ܏g3B}2K1XiRÃF mDX;`ct3Hpb踪w9ގ3ۓYzl 9X[j = @m ̷+>^\ uXSp&|.ӌ, `)'xCs ~ D +W1g>_ Li_E@O^iSPt5gESyPNs*Jՙ6eJnHSG6so3G9ٮm>2{&=yWeE^"L)s}w< :3^a |])mI98a/cX$?Kp!!T0~0d/FU2N'82au~dY-d?#ǵrsa_,TPxsF))'1pev#Lj=@Z.(6wtM^,;A^4L a+>׶_! E4BƠ^ce<[h&4|ޥ(KNO8\σi/]ifDI b܊Dk)VbTaqxaLpB>s,uQьwm3Bi߮n]$ qbi9K_&.3w܍&4•9SD[WsKQLaJnT3)Ly\dmY% >~>唹nF̤z}6{Q*A#}+P?S:bp٦` ,9>!fvTԼgy]["sPWood~Yt.;(Ah ě fӀ;mLb=˂-D$U=W/8F! Ďϲ OD|snAP<`p1x.?XI5E:VC9#;|9$rJꋑAT3L{y MYNQTwkwt`+8(y I$Fy}AvjrV¹Rm9MqWy}\/^]Kbnf7*N!2ݹmLQC@LDORb\3S0$n ѪO^gAGB URq':IR{Ԙ>BW Lkw~!\;.b wػn[ "BG˸5g1dl7xn"ѨeDmJ@tIR`;{TE܍ۢx -Bo"&BK$|m 9YJ*x#CD3qi]1kۃ)=Xk1F<=X+ *eN \aVlf:aզe:9z  K@PZQ./)qɽm*ѫĥKfN2boZOyl$u̇`K8,F'hrr!!_jڷ+?8ǣ撽[XC7O/n*M}"ǰd,jPc'\ydss+]Uit~k} ś3!-G>`1/l_Mb3(o8<?rnUK8?aO5~K϶V1ݨp9?ayCK*Čcϸuct ׶`}h;؁>qYVk+]'A9! ~񹙒k{NJiq-n \-;}>BG&|?rҔE8sȡzp ƔFFӅu=wBaRRK ( Jh_Ӗ^abSas^gMT)0xNd8V-) °an _#gau =限͈gJLl,LݞkvE,I NI(^p^J:s.ׂ|LuyPm֌ 6:Je}kfK.0-Jڡk$ȿ]S(s_EO$mH[t] [ :Uo՗Lϙ+IJLl!uDl'q@9cu[jӡgWO+45SrF@rGݟzogw1R0Yb㾹w(}wp zy=!Pw(f` 0նrJ'*pC!ۥbycĢN. YSyzJeS_}:̬8vZA{i2kEbD]џ=?>,5'Ղ~*4O4}`e_ ^l?Az4 ,XxP\,ϻd;~4!!x|TP_31Vyd~DS Om@|,vD"Ii\ h7 .>?EHԹfͨwk#ATl|.cat_TV6ra*WPN `B_y"~we7NU+mӷaLPv};5K %*ZI_ZZӫ?XD&)1[FHcwt&Ah.1͗:Wt˽ B^,:nOe]zxLK l48iOo)A;gajغǗT]&Y1"I5@k3_4+ >y[_o v'abvV@N wQ\POdsȴC9ʃĉjJgO^_=KQ"ʃ{<ƝxI6_p=k_ מ\c)5?(f~%}_1p( IMj'y6Gs#դaA3ۊI6PI6yqFI^;GmF҂rz5VZ*wUzdcԣvz»r%0p%?L@1Y/t+eJ"L7F|wmLZ tV!xee֒P|Gf #"M4:qL\K2"[+w))D[)ħxs f|3i!FD-bܼ?~cU{.r/r aWE|*}kJ;v P̗rߏz21B<l'nX;a+KvLf8S,&uN` V o0SB$4:Xu"QÇ)U.6\4X\4C4h BٶtҼ"& @?h,$\eJrׇeilI]6"Yx6]+Twr@cUruo$뉊q0zБ+{2wbTAb7nY?AGwW'7j:15>8 1+,]5eztͳG)h24-$g7;I~ߓlFRM +6b33A2`ȣ"9f8ptx?5(zyP<WeP 6`3U^EGHӰY"c* ,3-͏AђNf\.}oAYNdC]''v?c QE^ ׭z:%ټ2mPͶ^f% ;i<7?$>4QΑ&(^oU>rZ4SbtYcy]Ý%o?(LW2\\<(5z4}뙢Ur@7;^Dh)]Ɓ]YScGKԑ!B|0O}=xmeǻi0w/A!.(,vːU.- "-ϓ$G8r~@#4Afb3p˃ gj.l$H 3 YO.[łm`,!}OsG\$Xꇂ@ӇRb}id#(~#Q\R IGvٮ5 sF=~DϮ]B? izLḒcgk02v\+) al7(KL9QLޒ7 .RbT5?χ}1jZwt/vH~$!1SqRz$!c4{1wsi9~`eh~8 L;<+gqkf%2#̘3Uj40]šO,\9}Zi(A7J/wFƎ+gi#{FU CL`KܖxN&*m_>=jc6fe;ʺL Wkd pj 3d=rn0-Eo3% @갇k|3Y |oKDbܩaEe9ķĢs "ocפ31ߓ OBFn86d.{Lxߠ][GVVx[Ä,[tb(d Eby0sVζBK.zUǞ}$]YpX8p qH+WHGT_<;f147hcω"!UPװW:XXW xET_Pu3!?tow:2F̶!s> .˒GELeVd?z-vFP*Q=׾P -Sx [[̐EyǪˉ 4;:q ůœ 18n[^˺&bƭ ,=Re2Q ! ^m`J'uV Q> !R_m>W! `T"ls2aB١K`FEKKuiI7/UnESeD:여tuQhbNLvH$·{WrSn<4]9OUB_?qW*@k#i 2XlbZT帿B!4\|:]NsĩZr gn/.nYyB 1/}asmZ[++iN' ԿIDYM0 cq?lpeKV uUǹ[7nF9Jy@).nl>4|7k缧tu5V܏ɍN-R&.&;z _tŠs&(B 0rcE2<7sӛipX0QǏb۸? ϙPoWQY<+ZW]qJ*D3= aBrYQU(bNomO?.o-Sϵ[~i<*qmWHN;U'9Nt!UJ/IO&#/izkmB/ ibC/xW@~zo6X'Z* _ I.ǥ u9S WEVbeCQg!ȷʎ~(99F칸_L@0R <,Ә1,Fš8 WX9;b4ǷqApfK1)ٔiL%c9Q);98q@bDb="8o0])ZiIg3FL k<"X`JL5Gm(Bh =m% BwxxN^ >4+͜ੵglwZIԆЕiX7.%l,ނ7}#i%Ct,#/k(V 鿈wYg8K{(SHJ"N:,MBbW#)0-{Do3)S(V Nӛh{f#DmU8^ ;҂Nkn H/Gd*xjb27Ճ@L0od6*Ғ \*UEȢM@% ÐE<%5f39\3Wiא(^<"ܟPű@" n5kZ"\y{"O<>,"9'"go>\ O?hXѲ, .h#eH̿iZ|Q:AK6+t[z85>>SnPj͘b{=Gm~gUs$M7;NE([`DİD˾W*;Kj)Þ::\@S~]bz_]6}iO>UBy6njTid׵Ch,|zmU GRo>L@8M2]z9H^A2D); /%y*74c̱}PbI<4 4$_o470HpWh-c F[и iJmB 5*;XȈmI&6io܊/UojΦ`O {ߖg@Я㸩n99d(j 8m+7])??FN)[?=?*k3̑6 40ZYxQa]Q|$~,{RNK}'`mlE/o ‘KD@~q4Ϡ}DnVtqoJX桥 3|- TRݡ %ɅV7O._Ln:ogp+*_sˋdKpr,>'G JPdbY5`{? FhR8#uF)A#~zDLe}81($ N)3mkϭV槶4D y˦E -lZD0ˉKs3d޽ XSP>LJމ4"iш;|Đs\G+!_b^-'AS;f#:IARC$ro6, !dJSdب46hѷ%oQaM ɼ,dE_ʯLo:Hm`-m%*V8@Fo'ʛT@ީ9+?fant1w "rW`x|ހ~"`s֕4ZMVycw_)E).?\u܂ $DKDG9Aɨx@'M>:jbi#mD-_논"g,/Lƚ&GB1D/0%_HEY>X8BSr IdySi.Iiv1K0cv=d)Z`3)|n \*=r8{1B/i-~LI?KsBuHq7~'} 86<,pE{/k/Nl .0$BEV v+]|PzQk=E,%Ħ:Q+OB44\¿vl k~xmM (7DH8=\ԏX/jɎ_F1hL%N5z88 hza'ĭc`z#Fltu3{7 @BbHtWv) EAjK" 143H!Wr|yFBKboL (W덇Ⱦҧqaո7NͮYyjTUV+3L} t^5kJ-PT:*Y$19EdD4"BO怛a4Ǻ'REٖ.ӌ̋zT8v+ +8B zM 1/*/q(X>h;yM" 4+mX*`1$B)j=z/ Vԇ<] 53 }dlQ\U{H4~䩻 e爾?YFZmg}Uqz +powVÁ,YhwυG>'e֋ BN&0Z[Y".-AA5;ؕa""'s(7s=(ι6!: IVMz.g}\brEB#-m)%}JL{:#R愮E0 ޏ:-t$3fմ0 c={;r0nT~@@@4%e)x=E  `hR]*ou/73',B`ގDH}H=QBsO=H}:+Hu&(/G9 MѺmLHGd |HFϾak}R+^=.RA[`z|/DZLaΐR9vS;;hSwT.L.A('jZa JL|)8qL%ŹvFj'sLwޮC>. ߨ |*8mv6gKLa3OVLeO":tDաASC+ AbagRe @ljTX2;ر6iAGY#:8<58j2S.<%hT7n_&|cV~#-2m&2 [&e놤ºqg}G0zR9≢(~WRyn\EO aEf^ʂ1xwϷ7A֔vc\2j6A:BOt~4UAD9B\jGQV:)I}-0 Ox.,9FO.xaYWw4̍Mً9 6}np}t@C^1P@ )< S`zW{5\zf)ƛoz>&dYM(P=`~ {n$AI]PQ3y7ݛ91*H^qͰ% GEw+k10SxA'>a^HcG]Fg1ZR0AKS'ijU %Bۊ"'_dT,֑l-}٘O{W9OV* ]FrD9,;wdۘO\NP‰~z*Z~f8!,ݽФWԥ+;:7D3-:3 LS)"jY[PҮ{w,2:m*ӴԽ 7˙[ [pz:9s(Q`,kv3%7^/V5d \h̡A;*eB D GAv?@޿j%YjňB@"4]+4!2bu̲l^$M;K7qCXQ /89Br.Huqo](<84 q|[zcGܫf}2WnuJQȥmK}CX,`9yQ- SMűwTeՔY(tCnZ#JѾ0ItTWm {BSlc]vH\A]r*̊r6);B[ 9x)qyT84`Ix%,+BGjIگT鄾KAp.Y6n9T4$[wc2`D)vG}}:Vӣtt8s @x'. ҹ @{#]C6dLҋ-G*+'gA t56q aqM@ d䚈h$LSLg3,{c?*; :8[:˔'+ t[td$0ڛ_Qj{gɁZ>ЎK '[ V: D^&FQ?<kd+be>PxY>?ś=r5;$aj|@dEޅjՅ>_aH-"{ 92X{oU*}zd퐰+P܁bvRJS୘F2+J>E4F o3wyi_m{C-KH76#Ul)3-6 3 F`. 軓%N]w[u;]r|Vfoi:tqSwDM(\Ěʴ,*lſx !^RwG:!^$PBD7n阕 -3:V=|Σ&Tf0s/^k=(fXFa&SR ;}p\S't-4 )vÏQ ;Hzva Lrs}Y'qG\L8Y1G@*@P#5v "rFdϓ''{Rry;LŰ]0 d'oQ[1߁' J #!T-pbisSȎ'PKv37I8fˆ>J@j./ao]X#Ǚ(ns%lKXoՇX?fpT' \fپ{bC%F%sf@4ncTߣp5aɭ !re tW|J=1$cˤ}Ok]|1S8҈EhSZgRZ3A7K~hkvF/E3zt@'JwY=Ʈi@@:#tB $W7 ۱L_Dp~ 3NP:%K/V]$MpL8P08ꇞH2_1#W:'}G*bԪ)!QO4߾.5laS?LaTD*ē )p51URY8[JeoՅPpm>W(K%A(h d1m7Aȅ hz.&Km;@2&`,\ ;v2^P1^󜾦9v? zfǾmg̷vs-7WEg;AR=/5Jx1WcQbf֍*" Na=rN, @7[_0*^r yȖ ?U`JT!bh>'#03 :||dk42_ZnF\,OˎEh%)ÿ8R Qi1!&lxEYluq^=:dW&'2Qfï}M) -9cJmhD!i0 ,j`d2B@N] J(їnoWW \HL d5S* WsCe;餷?Z,b8? !(DE|jܼ^(H5w}A' 9pqW^^hI/ >3Y>ӗӥ~3V%V=q 7C`܌_ w@yc Ace*܆ ]R3V-fv5co4YvL?ӆ>6.>B+6vh;lG;^)Z_ņƔOVU(@G.A5%n5A9Q#dڂ|XKR~+> IH Fgm@*Z*Aܕ*hcɟ_Cːgl@i`&nUnq`@9=&":Y+䠧^ۇ^% R| e'b*z,2#!OPc?Ke;\)ed I+ 1Wϔc]Xx: *DZwzD WaՈ8@L[{uPGWc6rfO{ݭx6ʳhLeuA|jh%lO'. N.gգ;ybt/ϥhG!a !2|p*&Z=eH$ <ԁs I̊)E;:HK?rGsa,펫^:m9sد%ȫU{pW]9$=1ׂf+I:0٢uQ\J(}gc,bfZ_m0YE}g>aNz, * vciK!$ /y7ɲƏZD "z5y.i\=$ֶ*Lu=Q"a[ Wa> lh@=˜Z;H|p&M򈹽Sb[`ziĤF SWh!e[ $ߍWPKw>a/k8$R^Jj7X'ՐEڽH=fmҎ- oEHҽYIҤ2f{`RE1Uk ź8QILt_YUUdS8 65Ga^*7~DhGi7!8@0 %5:Xd9Fmwkô VSb\ڛ !3r`:_tAVU6 M}/mw2*yc=zǵ1aF^jtTK C~2 Gg]?Ste}Bqpw$qujt\;Z|^^Ы m[|T}7!"MxGT%mJ9GN pƂXRO }Cf\ǰ '~27٤kJքƃXs BNMߡeMӗXqdɝ?AA0حG)I:x\x>\߰q6xmkQ9K2"VbߔD7l/@ Ddd+:.867Fx_*{[WN".f"GýCoM!la2fBK T1'Ӽ7)SA$_%bY]v;Sr\IoƵ yq|nKvU=Ymm(ޑ2Q_#3bXf> h-qG O2_uB+㚨GݲܜA)80-`ezVSp#n^q)Qf#v;@v0nvӪ@3[]n#;+x<܇rtn ."(ToEވE yo7pQퟚky伃ҫ m_QEi^V](ωؔ2[oG4MPF"V/,4ďaL,k֏oC{ ] (URY3ޙx3  ycPiZŋkI;KW2IjͿQLE 3ױ\IgΞk(&l棬 1>uqW\rYU?,.@ǐ9'Ճs}?gAWVv{autR Ruς# 0;CR >n D15,LQtjЊL |o3 pMd\t:\7Ijq{P T<׊QoK'P\8:F o)´&oCfV55iR):_P"ZSaEhäUu(ݭ̬>F [He  ieөCp$`49ri<^ I8$5CӢy8Htxα^\]F]I4~C;㨫X q=(bo],zJ/_*dii>@'l^@nχժkeUӪ v0z79Gܺ,b v ENwDZv مTG"gDg%`4d1Mr:0Iw][S{0\RX>$eT 9+=uԎۋ;z7ϩqģH -QO5Y˶iR]!FfmQqN2o;qp/LH/pJ<\B%.T,qĉb3F9)u!46nb b5ZoY\풂wxd{Bطg%ڈr]ls9tYb} hEP.(N`AYUq0 P5RMxD׀I2Pv_MMEª G&~4W;UY)䬐C@c3O0C5:F$X;f_B/*u{_x#P KB%r̔QMx/ lwM?k~D\CbAalx9ˀ+6JɏDwlTWeVYj7P5AheVؽ3L=M.Xp ~轟h4=K*5 R4#r Ii9F|GC0>)i?3 =[XXIJoO<_ /3jSP.0DY͓*q k-#@'l$]rAZ\ 0x=,#%nH㼐B6A%sFtgK9<0xօm^yg9I8i~aDPAk]wq@H#ͅ+؛s ]f~q] 6_]AviU=@*H9bK{gh"UwhSK)N෇1C$=_g$}&67oBK rQ4Z#Ti/?? 3&'(t_|%䲽ʑž(ϦJ W~ޓŹ¢ppo!a0~2z9w=Y+;uF U ozkQ]LcΩDW޽pL?W:SlLnٯh2[k=VTm&CX^5[@ۏrs KÐ7%ɤÌIY=Ě bpM@W>zTc.d^TN茢Z;KG.p|Q>n& :-<ѯp8<-Vb^Җ+$iP68ʕaEH `NgC_6"yfB}ˍE\Hgu*< t&EKhMgESI[څȴ`5Br%vL1~J_?.m!&3Z)\*+&T7#[M&STk>KnCՐ$:`p?Jī|br28Yu?"1(#E1jk9~nwX6{z$[gazJjX`Q+/v(2d(k `/5ap͏f0 k9*vPz@ 1W#K5O&+G&N6|]_OZ ye=cx3rT:Өd3s҆; ]AN=VpDT 5#p0 [( יQLv'`HF#d9(i+ӷ{>6g#aDstߝGqh0{^iIr’I7-*3lҡ"ZJ?|r2dLP&3?.@5 e\J.0b#upl2͆TJyS;Pŕjpž$guVֵ,3x;(ö"_%V(s5\iKۡߦ(07yq(]nMԱ,@poly!V,/Υ$5'Ah: >T~ =jI+mqbXd)EJN?wd9h'&ץMm.b(& ߼a%) D$:nj7 NT] GB'O+cVcFT(wߝM Bw̷sHoOT/J'k PbGe"]S}S΄r ⋖nBsarX.1X5XTG1%V#1[*)"сH/5e%s8)ݧ۴Q 3.;@'YZiOn4JJ֣E֋%þ6o,RUwT}q0HzC aI <Չ#˞3㕥¬\61T{`h'QQ^ۖ#Vן~ _ؽ'gM@|bap"`mLx}VB_db GA6uW+馃 8y0,7Z[I+QbJ|@9jW12 $L@kQfOAMeA)<&|zAR~GeC%1E_o$Y2oߴ7{_Vb8lR[3#QoCda " W `ԝY?(6>q1>Ze'dvRlBg'5ń1+jDyBvwTRpYs$9|{Zu3 `|2̦ԒplB}ߙ:W7ߧ)MXEY$8U@jzcF/ߢݱmjm^U(9>W8oKr ,f bOq\?ѡT(.l=f`qe~ &bkkzT-`hՓo0YS!Uupu)pL$Xj>q^ըR !31ꩁIUSڋ18*09 wQ򿙸~ʓmCWy`}kZ<; ;7bT&&6I>bo]n9ϽGO WN*lβ) \Ǹ/LIqbY_o]_IU ~W[O \jT2nD'Q(d4qys ἧx$3?H^3{Uqzdn}zInlBŖ(x:ޖ~@ft|  5RnSR?H%.D-i)l,&XI2nJ M]jUkE /#, &K Ө1F }_м^XYIw4xS"lxhE u3!>9AlOr:h|_O0]=ў"ns2U7w?Oo'i_QJ݈zϨS?DQJ@X&YȞT[^51ٍçK*[jskuGZx ٩Cb8nv*aO}n+)n ׌2yч u>63{4YH|&&kPj,1v(aLjrRCl%J Xy;dܥڨ H"&^%짼[7"x|.* X<;M :׭+p}?AwͱS5AW7 $THip-ONۺ-W<†I|yZ2K.pVߔ-׽v0B- ^#ҠU.l\!>'1N5 ԆWn۪;Gv&vI;2dVH9N A [nA 7JC=t@^`;{뻫ؒۜ})V{ Ie6~ >˰3Df{˪<ӱ?TVTo1YDhܨ?Ea1'֬q\C1[O*D桊ISWyhCZ âY8&Eo!X4Mwً?PѱbN ssU*9<-]^@ hxiH)y`9b[wb) s r'KO8SG8"< {P(oˎqSHw *_ӱsj|̽v4/ߌy{V P[!qjhGDcz-x[e4A>cQw"c2p8g{6~j(c )zÁidiKV>cSShltd?E) nMI~y :Ӥ PSݬnv'AS+ں;[#~W팒 y|Z ԚVkַ zdhNFS_D(7E#uҒq#nөU._wRl;܏]`G:R^awQRֺ&^72=)lIEq5-췈޿vAG1ޛ+2=Q/ԑNvRSiXF(ldL`n]aaQI;>Y'Jv*6O Ed:d?bޕ"?!slL4|ꨇEBB-Ob ND+Pլi}\/ڮʜM6] cPxkz%?,nhB(^;=:,ng3͓?r%Pr8rk24B?//O ׵n7C[\7:Ix}f 63 oDySIBqƲQn\dmlqC6m|YFyb!}bIf͔>FB1'>l\L`eT\7'8/ӏ?fW1c$0#!@qŻ'W9U/SP>RȅWM^gIF6%$1: u1[R:3EGP?tEewH2B6,Q<,aԌ%xM# Z F_׺)Sh)ўI5)k7#k[U|G*py1Fχx& %ףdEM#܏WNp/Xf(K!9+?Oj3!\)j-%"Ŕ imGe7QXmڈ}?uYx79gY*n-̚K ̲bm) 1IRs/x[Ywn9qfe隐+ɍ}ěcm^J1:~20; Zb)DM4Γ`Xy[s^ZUoT[%aΩ,T.H#i $.az%gƄDհ+͎EM6ʜjB^-^p|p%qһR':oMzYjmL {lC2p#AW}ezMK3 i>触w6K G K!au|^B3'DX/4HݐYƶ>Λ BEOiߖq)Ǖq_mbXtМۊ/3T"i#}LcUmyşO\Nr0oǽo@p4!׍Nȼ:b{J@=}R;ZAz-/ND=Hp6@-( ^Hm !9mcFNb OW;a_/toG;~KXJwIOKrBk6`K(U5-={F܈ :fjW=^^rZ䱞!=OHų6߾I^;[5U. JA bAX/hr{|>t6ZOuydjbګєd֮ /H`;Ke]͋ɭ'bY2xv1o51ƀ&Zp@2:Z΂D6\ a£'~ضQ~4= YZ {}9J~lxB%cW_ [I  TtQ׾J6ҖL%4pTz؟ӬBG&֔xfk M%HnڞK Zƻ?m.bjz~Am}R_eJoj-xrji7;^~& |YM'Z kBoWZq]8=LYdKOW_bnf~ !DB1]Lo# ~r6^I3gz$US$eZ\}<-Է!1!K^CU̸?;oMHѼn;|cAyIʸ$8S_v1::s]_hAM)CqP? SY 4 1+QGX^?= t))֗?9X[Jln(jB1mih[E2.C5cӏiX]}UE6Rfsx2Q,8BI:kv T.Ō@8fLXp參eڊum%g3q!g^=</w&Y swxLhQ/M}wi STU3LO+99{Ԃ>@Z$:ܧ0pOp34 M7Z knDũ (Cv_o$1)65l$^]@2:3:gtmF[ FDF9-`Bz IU(U peTqk҄]6[rYPV1ugE QZ nBrbHj.E VHSj(>6Mij7   "=@'0K 1Qdz$q Cߢ_3p<Uh܃ܓ [ p +]rܩcGMZiw+> | пY2#m<9x|_.YOm+$0G,+Wm1A󋃃tmU7HUǩR *XBΞyxhMkք^SBg++΂!", uqmh},G?,3ƀRрHw#iHjfRA4?։tTz$euǺ"c^ ⴚ..&~ٿnCb;Q?GeA7,nJomlԋ+OZjPe ooGDggZr}1UBij| ir*9Ob;߈TS˯A '!*C-i8EdV,%N3~첥){v c#w˂N<sx\ *q`U`nd~)?AB FC^Z-xhܰ$ǧCev+2P)":Ԯ'i T ?Ud6p0s2/č^J!xȝ=j}8m?G 7喷p<{y2}]Au_۱,ؖ9]]$c$Ccj>GʵݵxYֲt٦P7-*JQ>{t6貞"G2I'ʌ gvXPTCCb #Wfݪ{7,&z0P6]JӍW%^-)b?Cᭋ*O'oQZ2vd,42ӣDڃJ⺪/@o9%LCnWGRHN50=˂xaICʃc,:8hj;LNq2g2b|Rgiyjeh5U ^t 1?t@`~"SaA2;s=Hr9[Nیm~wRwS1(ֻ SjaI#͂Lmf=VB-ވ\V/@Gn!KF 9t 7&tԹy̴ !{=si>WOYn!I T5Δqƌsjs}_FH;5 X,5\*HZ_GҮ!@5TvEkjNluS ֡P>2[ۨi|mi.пRrJ NʺK],iJ(QѺ4Z8f#0L'.a{R 0|U\ME_̍L h Wnٴ1ʉ0ih"=RpD>[$ԓZhT5in T±nq"+D7ia@JgWdg /:quL vLg}Z9$RL_=/qۛtQLHn9~*qC1>ۊ6oKY륳ﰚ.<ܷY7_!V(ԞuI&F&<2."($plfޯ*{@ZÍ%OdؙݕWjd fM2o-%{MBQٚww`GbGi$xЂK#Ӓ<20?z7Ƀq*əkD )8>QNF鼗E5:%"{ #R"G5‚ز+/mQѮN=N2eW8Vim i$č7!x?~Νh|p<1>d N9VNO㠶#@!p"5cqb)m'~ nyl>XbZv@ju& -kJeqYhV:ԲO73N ]C_"3sԔC0 ?ȍnAJ~ VWQ$x1?RVouMmHZJ΀n RzDڙG-T}wzs:c˹ a`@K:YCwf0NbܖsZ]UF;E7@Ni6\ȹn`B"Ujp6Dж̔#1 IG@]'㰲Q)䬦!3s=\/bф~2:&czնBhkk2 3.#cpL eZȆVmw5=[Dg .פjm3~ tX{22V1{P0IM'2 ;2qicί|8\F=rri(ϓO$ BQ! #)h[d$뷻R"o)fMfmޓq#XY ** kn.Ws)U'.?u?;%KDib1KC]U +U1_q 6%zpʏl$#B 4hM}irR\6Ba g.@ YaB'U?)-Ď{g}F6Dr&S$cyή74{rJ.?SZC!J5'$Oo 7f@I4L:or?ȴf|CޏZRoQs}Ş8U$)iHyޞJY1:-MeHHw\wR ݩ-' [Ѿn6qНAy%Fؚ]tbѷ/bq E ՒNRu\݄%mqGgH:LU#!(FmU3GnVQG&u>=e%7f0\cJP Rzn^I[ޏB c<2Ht*@o6#%-JDٴg*%WBu3Xx=ޗ2e輀u>D{E\\'a =|KOtozG c>wSC-/1( dsOYǛG([HJ[͓l=^L/, K) {WM`)Y>a֦c^[(@d Y%aT6Yt^V6[/H$&3s7d@8f{" 5P炗X톎L+4 L@ T |FNm&Vvq%Uc}e1u3@d33|ec ? <3ߩGۤZUКA4]MAu]P0.+YL R c$G%7WG1D'bvVA妑 H-PޤΜPҾsŴ҃@o;~b [P^MkN!jIdBmL%A1cɄuŽg*d\#,aoiVAW TS mQ qha><%r-#~w&$s*9JCV~<'p<9#L"qqgAmpfJJA֮4RDX 4,Lø(z.z+;)f쵕joqoYMq~wa=k[\yp^TOLrh1<h㏋koy'xo_,-U<[;G] [0PL 5ArE.hh>|V De~L Fb20&͍p*[bf{[8`׃u4S3wi4Jy~1JJ9@$B0[$oS>';ݴhj(@(p< m#00pC[6BD-(,ҙXFRƄmR4t.lEC'v=ܷh뤕p>@k'0:@,:wDG ccuH1 =|2i^ovƨnUG[A3c0;%BxOR"ҟ!Yn eqٻBJOұb_r* UJX`~Y1S>RЏV qJj&R(]_m3!;wH)5*RQ>\m _ 3Z<14̵2Y(7[1ں|D2,lyj퓖'6: r eA{$3K[=Ђ;ѳ"79t@F`srWk|B4GÈ" X/d$r|9],g=yWHl=iw=! ;P,+K/ Ĭq9}ѵ. ,g?h]9PM*h㓾eL.[ݬBT8`Ҩ~ݡ1E&Цb mJR)k"#%L`{([v( /ڜS7ܕ+:9 G$Y<9]7А.c* (yٝП#rX[6PD+^^t\V_O%R6@[NH׿]12 lH[ԭ 9۔OZp=8a ~$yyNNP>ԫUrE>>j.gꁈ&E 6 ]!D^'ExYt>;= HMē4uFdZEШ8Paoazd!TJUGBS Ng{~D 91a]Z w@ '>(o9;l|~h!{I+6w!VC[/b\VJWf?]sDL$g1Y0B%c אz}m!0 `gDg#^=QݦC|f*,}?0p'0W% .ct`:L{e =oƥ>EK):xX ŪerE뗧&r&e$TnYONʼ%n!Ca4&hh}^$W"w}&a$|'RM%yd{bIYTy :׫ȑsq} Y5f\>%%wLH`@PW;>Dx%{۔8gl(q_>R%9Kn 硡 !y؎ͻk+[(齻&)by@,s(%IF⴨ZV+ɏMuP,VN$Ƭǫ{(EX^+zՒ#TFP( ?[.6wt6$3O9þ%vL=㗬+,'X;j~ >WTuCu9*x6IDTH5B;ޟnwzTl{X)2V=|*ld|{zW fOQȜv _㵆."Ey.EwB6&3AF蔏}(RLY9ؕ2aJJ*ȕ34KuDh};G?Z$y!Pk׿0U 4!:;vmfu0uI=ڤOy˴sM1莴Xkh'?!zuJAcT2% .[E_,LD^Z+j>6~QZȝPN?٧eR|v.ӈAR.pyᾟ^zѴNfOu mMpx@,xxI?+aVcZy\@'5Ḳ!4Uz6x7 u} Tz!y ۆ>oiϴQIk?%25&2x@챻N2cFgXP'84U_yɊ4vAq[X! rQk-Iӕ5l)6( -j|VʂUJ Yh- @l#๼y1Q T'i]%tRgwcv- Z7%mf}!".t/"aV] 4yNVc&FLyfp6<#uVV9+MET—*^aT3K1@.x{oXA*MiiBu9^vX)-m@T~ģY-}GQTTܿa#^  E`$34=-uo(o"Cfh˜ʔIOʚL[yh3<4ZoƷE&=\q2/`~ŭ轨 ur¸q5;s56~@&P?3;C.CAn*rruF<`gI(w%,׳%&-*CjL幃DΞ+3opҮ/5ލ/ɫ VEl.yzp 5s@=bf0f0HgI{c -}{I~^Sq_l]/>~. H'}W|6{;ԑר`TF[{V es+ҠEx,MN9.U:I!煅4MA CGp<fh6.ZF(-;}F ixvkYK}ٰ1BJq'ǓK?_+7D\vec ޜi]=gICb?zAjG-aA'7Pl5rdW0)`r28;kҒ/EQg4s9AqX .5Th QgMy4?kM9PESYhl#JV\GqQ2<\jۂTy JfKJ ?zq9/Nll|.M&Rx[m s 5md ʵ9mBHqdx6o}-jMa}ٺ c:?G v Ӌ®  ܿ"@7 Fw>zʩRQů2@m}jL.wT%U=qS2JML>ʕ)5J;n7~0aG+WGՑ/ura C^=а# Sޅza&IOf2"̑_D2|Ү:5x2 )2NBi1Xe Q-Ofó7|kàp{p6zAـ}.R:=ˌ|>fto{b8!u;\d Hq) }\F?/kK->>~M[ը3g O݈8엎BҶ`RSiۋK$-P3geQK"A{g LHY<c _^)wh)92e+f' 3#ҥ曕F`(ܽIn4 A'\S;XkdF}"'F)ͺyyԬO?h+nkR&OM͗G63x-,D/n[NsiƣWܿbZȂ½9⏭IN8wk|&[Iqa=о)#WNg\, kCK웦|ӧ nmD6Ы t͟q,H؈"FW54v"  `=rl 6 *;с0'%zpYFP}yx*)S GLuT ['k4#B1~4cjq)Z96WkI+3A8Wvެ/nAzKi 쓖2VYR5xixNۺ@lb\/ztB!tƸ @H ?׶~ wMͲom%Hկuj@O2b }wLPkf~ *~2M{e8d'[kڦ1'[e:Jf_`(5TΌE5nfH9oF[N thTRqNFE`luz|u|CBGI$Cy@gZ{Ʊ~οea_ϥ&nU#Ssumebް/ⵠV׮pY6e$-3Zb6-,B冭̆-P@v1v<ԸE O=F"SՔe6hҠEl`;5ئ.B<{!4^1ٿcS?-]`$1P" Ikc^k^/F@ߦ7ozƠdUt̴/HF 5t{>B"DE``bľ{ <$0N& q#K^9[ \ZWq.GHoRd~;Ix(hDd>ŭ_-VW^H̋$w?N"Pg%acc $tJQj|nRN%XPnK*E͵:D,Q4a0ie+F/=IinCaƠy+Ư։{aF F;D}E0z]q*@i\ؘ*%p8wpZibf9#UئON|5@a;Ѻ1 IǕ$3`旒ni=@K"J8Lc]h wދ{L9"?ʶAG ?YEC Qj?ih͘Nղ?P 4 ®z̿f%~j@^'aȺMM2{A3iv)˜FKJeNX@zJwo$,[BG{*M?%It ,FiƵ#6, |V2ݮ /!ʁĥ:"bo*+rN@||44 phi &FC:6 y$۝lļ'O0V= -WB(V6 rЙ}?LLhϕ\RԺ҈ e5A}Ĭq2!5{2gO @\- 0 &>ަ((ц5ϲXȩfeXp hMkWz}~a`G8{tBTTx >:N'?ys 4#*/RM|Aas낿HDj4GߌR yțF$Ϡ-[jdHf}Gs]y]%]PhZrPa _c`g'XuDpcЍ #A.2MC䈤+/]Bf$ CA/.`O(9/H]Snd\{%U!\P;PWROry=D҅?Dj"a 0d]I9y/V5*"=V19k֫ 0Ewk$HNXeEp!C<{ Nh"ȃzGԹc sgv70aibwvCfKHsO^v\T@n,Wx (0B9ro 2qט )`/Qia%)L "#Ӎ~Ş\&|cijK>&z&@`1ﱍ=v $JU#2 "bZ"LAHdXY;$D߼=1T|{y0s.TEMHݹAX,hoC&⌹AL A= wK&k:i`(߮i+($W@+Mpi..+X(mGfx@&P#m2bu-7cƝs/kFTf܈%r8]rB'Ϙ2w k:!. MgjeqrnXWMQ7=Ѱ#Ӕi)ʽˆif^sX %x^SL^ AWdWGmӛ:>l]oQИӢkޗ[(XtdK>7[NviEUL3N h+ӏfWtQ3oT}*Oj!^_|j#1D}mD?R}YLb 呹Dg:Ff>]R:E4aWmz1WB mZwF9ŞVuM+peFJhȢ|Plb=!2nz󪠔a1$E{wt"x ]-#~c8'e B8t:j6X:5@#*;jF]O <\عxzp1id0X9<6&_(k@^A͓5,ٿK w4zT鮙biHhşl(QR~QW%Z/MX^H5xs=Q EnXS&݋w W{(k^G(78d?Ř$~ƛTJ (/'D6Fb+)FpںU&Y/=ԝ+Py4J""@@)>, 4H:+~\iW-6 eR)++p x"qL^u}u(^ ]#1n/gIspٔOjҮOJaYIRcOG/f Mxꦚ Ǝ\o3Lxw{mPFPՅ̡5 d/#̡FM0hs+V҅FGS޾¦Ui4ք1p+z^?MOJՎ&}ARZby*w&^NG1&G9DD@Q~>Ȭ4"L?bSmm78KD2+hsc[[Ֆg U:N}E#AZ -3~,x-h%|$hd;Y7Ir)F8 âJE$utik]f j6$z3.Gl#vyYY!ڽB̦ѶkxCCLQZ9D0'ݴAaVE)^y)@aTT7QBD\T"h/Q ޸H ߈84 c+u珋1dbXUQu*6UpNeux-je0s߂ΗhL|"apE9AZ{Yb].]dm^mՂuF?~;l|<}]Us}pI\nãdiE*-; q`ᰵ2H:=kCۉ\heTPl"<WN1sJr0^:FM;QwiϘUvɝ3riU'z E 8H61 oGBML\L?]"*8> úL 璏VGw.= km`-*%,eU,gBzsU?X6wE|S0Z0/-DU{;-:&Ha^Vʪpab w5q)k:b`?`-!`҈N%]N1Ij4)+$si|TnQ+<"k`1B1?n=h(lj}V_<|iVHcyq 6FqT˟%: }ogrGSHn@6[ ujp/;oujfKTF1m WOeẄ́ kG6}MtwzZLEi? A#2K [ء<3).1'R^AmrvzB]Jo$FpɈ:ޭyfÃyDdXÑ&dZ.#0Iq!Gn^)7\}/ݴ칲=FjFp@bp%*}͍5B 9qK'63,X/\w<#c4|֓#m'pl㉊Ibmw{W,;"ܭA08֨hz}O)r!qN JW# ☿+4s cA܄].Tce M4&/L+h_s|.X A7zPSKd 2:"+1K%rӼ;[6D!Ȧ$V [tr:m ̦-~Ok~ܱ al}5ꯓҶ\ꠈ#LF^4Zonf3oȂ|@`:fU+D@y[ZJe/Ɍ'T΀;?h:? 9dL (%#K^MWߍl`#ֆ*b'W}45[qWvO#ѹsYOH9mnڗ_n Q.6搝ʳf!2E=w2E3$Tc!G|Io6c`.g:HS="e*؏ɷaV?8w!ݭT":9k0TTBK9X|7Q%Y:t-yz1`&h#vbr{;(\/gD pA*F zIظ`AAl_){i/?HhzO_BB?9&G&喜ٙJ͞5i|LLRtN,p,j!G۳x~#~ua:\ QM1.lXa3z7@ɴ+P?ýՒϮeq):\Tv=ץn U˫|3~"񾣦g`cdwq>M%.\$-zdL.|S|A?ϹYAdQ{xM1zDC5OyB -rxFY7u;?zrk|9`Zeȴ })Yh`Bk^#2|#B".VM{/GRPeUpc6xB_1bA:om#>V4~1U\GpZHdP;m{)"1$@u֥Jm*9ڪkBd7>cQ.FO@ ;9l4?@|>Ec{ b$YQ$-GR[D894)fE}k'e09X2 _E9+pDm~ADEBY7xSM~t- )4{WW[ih拌>a呴gV7 DAqrmlD_4azRu-^qՙ3,:G]B/H֖o՚2_6yg@a>[92kXDk zW;=AQ:"_ O.=RHU,Ѷ sV",gF`{MlG`60´hJRIYTUiǮo߄dkJfrv}1>ٲ$29W64>HŐPU rr4iL_Ɨ 540K~\ZRQo H'wk|Ciᯜ;݄j+=o:AʿS8{J/$BHfFUTс0Qð$ ʋT-PFyCBG AJ*)$okq,H̖Rl֫s~c}L$%gY9v#eg<9uI`tdrONic*:$mnh</&jҠȑ%j n-+]ٙ5iXȿmyJjZt2{{&2].ݣg#`s؞J?N_ `wd]hܚȕWFpڢf T,E܍ ћj2{Ev/IA=_a8TBsWC p%C7RU '#etT0 zK1!' J1_е:ޅZMBF}NcWDνJFPڦVP~VTo#]Q%'.wR<0Y؛ʁs +|VecZ5{/TV躕b$++툾ɪuL$NJ9d%!ߑ;\K8@4p(  J-iA*Ӂ B5&D5MAxeѬ(wI []ao`wcZ<[MdB}21mK[-@޶to\N(S4UԢ;:m-icop\j6"vjw;>